ZGlmZiAtLWdpdCBhL2xpYmMvQW5kcm9pZC5tayBiL2xpYmMvQW5kcm9pZC5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYWNhMzMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9BbmRyb2lkLm1rCkBAIC0wLDAgKzEsNDUzIEBACitMT0NBTF9QQVRIOj0gJChjYWxsIG15LWRpcikKKworaW5jbHVkZSAkKExPQ0FMX1BBVEgpL2FyY2gtYXJtL3N5c2NhbGxzLm1rCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgOj0gXAorCSQoc3lzY2FsbF9zcmMpIFwKKwl1bmlzdGQvYWJvcnQuYyBcCisJdW5pc3RkL2FsYXJtLmMgXAorCXVuaXN0ZC9icmsuYyBcCisJdW5pc3RkL2NyZWF0LmMgXAorCXVuaXN0ZC9kYWVtb24uYyBcCisJdW5pc3RkL2V4ZWMuYyBcCisJdW5pc3RkL2ZjbnRsLmMgXAorCXVuaXN0ZC9mbm1hdGNoLmMgXAorCXVuaXN0ZC9mdG9rLmMgXAorCXVuaXN0ZC9nZXRjd2QuYyBcCisJdW5pc3RkL2dldGR0YWJsZXNpemUuYyBcCisJdW5pc3RkL2dldGhvc3RuYW1lLmMgXAorCXVuaXN0ZC9nZXRvcHRfbG9uZy5jIFwKKwl1bmlzdGQvZ2V0cGdycC5jIFwKKwl1bmlzdGQvZ2V0cHJpb3JpdHkuYyBcCisJdW5pc3RkL2dldHB0LmMgXAorCXVuaXN0ZC9pc2F0dHkuYyBcCisJdW5pc3RkL2lzc2V0dWdpZC5jIFwKKwl1bmlzdGQvbHNlZWs2NC5jIFwKKwl1bmlzdGQvbW1hcC5jIFwKKwl1bmlzdGQvbmljZS5jIFwKKwl1bmlzdGQvb3Blbi5jIFwKKwl1bmlzdGQvb3BlbmF0LmMgXAorCXVuaXN0ZC9vcGVuZGlyLmMgXAorCXVuaXN0ZC9wYXRoY29uZi5jIFwKKwl1bmlzdGQvcGVycm9yLmMgXAorCXVuaXN0ZC9wb3Blbi5jIFwKKwl1bmlzdGQvcHJlYWQuYyBcCisJdW5pc3RkL3BzZWxlY3QuYyBcCisJdW5pc3RkL3B0c25hbWUuYyBcCisJdW5pc3RkL3B0c25hbWVfci5jIFwKKwl1bmlzdGQvcHdyaXRlLmMgXAorCXVuaXN0ZC9yYWlzZS5jIFwKKwl1bmlzdGQvcmVib290LmMgXAorCXVuaXN0ZC9yZWN2LmMgXAorCXVuaXN0ZC9zYnJrLmMgXAorCXVuaXN0ZC9zZW5kLmMgXAorCXVuaXN0ZC9zZXRlZ2lkLmMgXAorCXVuaXN0ZC9zZXRldWlkLmMgXAorCXVuaXN0ZC9zZXRwZ3JwLmMgXAorCXVuaXN0ZC9zaWdibG9jay5jIFwKKwl1bmlzdGQvc2lnbGlzdC5jIFwKKwl1bmlzdGQvc2lnbmFsLmMgXAorCXVuaXN0ZC9zaWdzZXRtYXNrLmMgXAorCXVuaXN0ZC9zaWdzdXNwZW5kLmMgXAorCXVuaXN0ZC9zaWd3YWl0LmMgXAorCXVuaXN0ZC9zbGVlcC5jIFwKKwl1bmlzdGQvc29ja2V0Y2FsbHMuYyBcCisJdW5pc3RkL3N0YXRmcy5jIFwKKwl1bmlzdGQvc3Ryc2lnbmFsLmMgXAorCXVuaXN0ZC9zeXNjb25mLmMgXAorCXVuaXN0ZC9zeXNsb2cuYyBcCisJdW5pc3RkL3N5c3RlbS5jIFwKKwl1bmlzdGQvdGltZS5jIFwKKwl1bmlzdGQvdW1vdW50LmMgXAorCXVuaXN0ZC91bmxvY2twdC5jIFwKKwl1bmlzdGQvdXNsZWVwLmMgXAorCXVuaXN0ZC93YWl0LmMgXAorCXN0ZGlvL2FzcHJpbnRmLmMgXAorCXN0ZGlvL2ZjbG9zZS5jIFwKKwlzdGRpby9mZG9wZW4uYyBcCisJc3RkaW8vZmVvZi5jIFwKKwlzdGRpby9mZXJyb3IuYyBcCisJc3RkaW8vZmZsdXNoLmMgXAorCXN0ZGlvL2ZnZXRjLmMgXAorCXN0ZGlvL2ZnZXRsbi5jIFwKKwlzdGRpby9mZ2V0cG9zLmMgXAorCXN0ZGlvL2ZnZXRzLmMgXAorCXN0ZGlvL2ZpbGVuby5jIFwKKwlzdGRpby9maW5kZnAuYyBcCisJc3RkaW8vZmxhZ3MuYyBcCisJc3RkaW8vZm9wZW4uYyBcCisJc3RkaW8vZnByaW50Zi5jIFwKKwlzdGRpby9mcHVyZ2UuYyBcCisJc3RkaW8vZnB1dGMuYyBcCisJc3RkaW8vZnB1dHMuYyBcCisJc3RkaW8vZnJlYWQuYyBcCisJc3RkaW8vZnJlb3Blbi5jIFwKKwlzdGRpby9mc2NhbmYuYyBcCisJc3RkaW8vZnNlZWsuYyBcCisJc3RkaW8vZnNldHBvcy5jIFwKKwlzdGRpby9mdGVsbC5jIFwKKwlzdGRpby9mdW5vcGVuLmMgXAorCXN0ZGlvL2Z2d3JpdGUuYyBcCisJc3RkaW8vZndhbGsuYyBcCisJc3RkaW8vZndyaXRlLmMgXAorCXN0ZGlvL2dldGMuYyBcCisJc3RkaW8vZ2V0Y2hhci5jIFwKKwlzdGRpby9nZXRzLmMgXAorCXN0ZGlvL21ha2VidWYuYyBcCisJc3RkaW8vbWt0ZW1wLmMgXAorCXN0ZGlvL3ByaW50Zi5jIFwKKwlzdGRpby9wdXRjLmMgXAorCXN0ZGlvL3B1dGNoYXIuYyBcCisJc3RkaW8vcHV0cy5jIFwKKwlzdGRpby9wdXR3LmMgXAorCXN0ZGlvL3JlZmlsbC5jIFwKKwlzdGRpby9yZW1vdmUuYyBcCisJc3RkaW8vcmV3aW5kLmMgXAorCXN0ZGlvL3JnZXQuYyBcCisJc3RkaW8vc2NhbmYuYyBcCisJc3RkaW8vc2V0YnVmLmMgXAorCXN0ZGlvL3NldGJ1ZmZlci5jIFwKKwlzdGRpby9zZXR2YnVmLmMgXAorCXN0ZGlvL3NucHJpbnRmLmNcCisJc3RkaW8vc3ByaW50Zi5jIFwKKwlzdGRpby9zc2NhbmYuYyBcCisJc3RkaW8vc3RkaW8uYyBcCisJc3RkaW8vdGVtcG5hbS5jIFwKKwlzdGRpby90bXBmaWxlLmMgXAorCXN0ZGlvL3RtcG5hbS5jIFwKKwlzdGRpby91bmdldGMuYyBcCisJc3RkaW8vdmFzcHJpbnRmLmMgXAorCXN0ZGlvL3ZmcHJpbnRmLmMgXAorCXN0ZGlvL3Zmc2NhbmYuYyBcCisJc3RkaW8vdnByaW50Zi5jIFwKKwlzdGRpby92c25wcmludGYuYyBcCisJc3RkaW8vdnNwcmludGYuYyBcCisJc3RkaW8vdnNjYW5mLmMgXAorCXN0ZGlvL3didWYuYyBcCisJc3RkaW8vd3NldHVwLmMgXAorCXN0ZGxpYi9fcmFuZDQ4LmMgXAorCXN0ZGxpYi9hc3NlcnQuYyBcCisJc3RkbGliL2F0ZXhpdC5jIFwKKwlzdGRsaWIvYXRvaS5jIFwKKwlzdGRsaWIvYXRvbC5jIFwKKwlzdGRsaWIvYXRvbGwuYyBcCisJc3RkbGliL2JzZWFyY2guYyBcCisJc3RkbGliL2N0eXBlXy5jIFwKKwlzdGRsaWIvZXhpdC5jIFwKKwlzdGRsaWIvZ2V0ZW52LmMgXAorCXN0ZGxpYi9qcmFuZDQ4LmMgXAorCXN0ZGxpYi9sb2NhbGUuYyBcCisJc3RkbGliL2xyYW5kNDguYyBcCisJc3RkbGliL21yYW5kNDguYyBcCisJc3RkbGliL25yYW5kNDguYyBcCisJc3RkbGliL3B1dGVudi5jIFwKKwlzdGRsaWIvcXNvcnQuYyBcCisJc3RkbGliL3NlZWQ0OC5jIFwKKwlzdGRsaWIvc2V0ZW52LmMgXAorCXN0ZGxpYi9zZXRqbXBlcnIuYyBcCisJc3RkbGliL3NyYW5kNDguYyBcCisJc3RkbGliL3N0cm50b2ltYXguYyBcCisJc3RkbGliL3N0cm50b3VtYXguYyBcCisJc3RkbGliL3N0cnRvZC5jIFwKKwlzdGRsaWIvc3RydG9pbWF4LmMgXAorCXN0ZGxpYi9zdHJ0b2wuYyBcCisJc3RkbGliL3N0cnRvbGwuYyBcCisJc3RkbGliL3N0cnRvdWwuYyBcCisJc3RkbGliL3N0cnRvdWxsLmMgXAorCXN0ZGxpYi9zdHJ0b3VtYXguYyBcCisJc3RkbGliL3RvbG93ZXJfLmMgXAorCXN0ZGxpYi90b3VwcGVyXy5jIFwKKwlzdGRsaWIvd2NoYXIuYyBcCisJc3RyaW5nL2Jjb3B5LmMgXAorCXN0cmluZy9pbmRleC5jIFwKKwlzdHJpbmcvbWVtY2NweS5jIFwKKwlzdHJpbmcvbWVtY2hyLmMgXAorCXN0cmluZy9tZW1tZW0uYyBcCisJc3RyaW5nL21lbW1vdmUuYy5hcm0gXAorCXN0cmluZy9tZW1yY2hyLmMgXAorCXN0cmluZy9tZW1zd2FwLmMgXAorCXN0cmluZy9zdHJjYXNlY21wLmMgXAorCXN0cmluZy9zdHJjYXNlc3RyLmMgXAorCXN0cmluZy9zdHJjYXQuYyBcCisJc3RyaW5nL3N0cmNoci5jIFwKKwlzdHJpbmcvc3RyY21wLmMgXAorCXN0cmluZy9zdHJjcHkuYyBcCisJc3RyaW5nL3N0cmNzcG4uYyBcCisJc3RyaW5nL3N0cmR1cC5jIFwKKwlzdHJpbmcvc3RyZXJyb3IuYyBcCisJc3RyaW5nL3N0cmVycm9yX3IuYyBcCisJc3RyaW5nL3N0cmxjYXQuYyBcCisJc3RyaW5nL3N0cmxjcHkuYyBcCisJc3RyaW5nL3N0cm5jYXQuYyBcCisJc3RyaW5nL3N0cm5jbXAuYyBcCisJc3RyaW5nL3N0cm5jcHkuYyBcCisJc3RyaW5nL3N0cm5kdXAuYyBcCisJc3RyaW5nL3N0cm5sZW4uYyBcCisJc3RyaW5nL3N0cnBicmsuYyBcCisJc3RyaW5nL3N0cnJjaHIuYyBcCisJc3RyaW5nL3N0cnNlcC5jIFwKKwlzdHJpbmcvc3Ryc3BuLmMgXAorCXN0cmluZy9zdHJzdHIuYyBcCisJc3RyaW5nL3N0cnRvay5jIFwKKwlzdHJpbmcvc3RydG90aW1ldmFsLmMgXAorCWluZXQvYmluZHJlc3Zwb3J0LmMgXAorCWluZXQvaW5ldF9hZGRyLmMgXAorCWluZXQvaW5ldF9hdG9uLmMgXAorCWluZXQvaW5ldF9udG9hLmMgXAorCWluZXQvaW5ldF9udG9wLmMgXAorCWluZXQvaW5ldF9wdG9uLmMgXAorCXR6Y29kZS9hc2N0aW1lLmMgXAorCXR6Y29kZS9kaWZmdGltZS5jIFwKKwl0emNvZGUvbG9jYWx0aW1lLmMgXAorCXR6Y29kZS9zdHJmdGltZS5jIFwKKwl0emNvZGUvc3RycHRpbWUuYyBcCisJYXJjaC1hcm0vYmlvbmljL19fZ2V0X3BjLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TIFwKKwlhcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUyBcCisJYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUyBcCisJYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMgXAorCWFyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUyBcCisJYXJjaC1hcm0vYmlvbmljL21lbXNldC5TIFwKKwlhcmNoLWFybS9iaW9uaWMvc2V0am1wLlMgXAorCWFyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUyBcCisJYXJjaC1hcm0vYmlvbmljL3N0cmxlbi5jLmFybSBcCisJYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUyBcCisJYXJjaC1hcm0vYmlvbmljL2tpbGwuUyBcCisJYXJjaC1hcm0vYmlvbmljL3RraWxsLlMgXAorCWJpb25pYy9fX2Vycm5vLmMgXAorCWJpb25pYy9fX3NldF9lcnJuby5jIFwKKwliaW9uaWMvX3JhbmQ0OC5jIFwKKwliaW9uaWMvYXJjNHJhbmRvbS5jIFwKKwliaW9uaWMvYmFzZW5hbWUuYyBcCisJYmlvbmljL2Jhc2VuYW1lX3IuYyBcCisJYmlvbmljL2Rpcm5hbWUuYyBcCisJYmlvbmljL2Rpcm5hbWVfci5jIFwKKwliaW9uaWMvZHJhbmQ0OC5jIFwKKwliaW9uaWMvZWFiaS5jIFwKKwliaW9uaWMvZXJhbmQ0OC5jIFwKKwliaW9uaWMvaWZfbmFtZXRvaW5kZXguYyBcCisJYmlvbmljL2lvY3RsLmMgXAorCWJpb25pYy9sZGV4cC5jIFwKKwliaW9uaWMvbGliY19pbml0X2NvbW1vbi5jIFwKKwliaW9uaWMvbG9nZF93cml0ZS5jIFwKKwliaW9uaWMvbWQ1LmMgXAorCWJpb25pYy9wdXR1dGxpbmUuYyBcCisJYmlvbmljL3JlYWxwYXRoLmMgXAorCWJpb25pYy9zZW1hcGhvcmUuYyBcCisJYmlvbmljL3NoYTEuYyBcCisJYmlvbmljL3NzcC5jIFwKKwliaW9uaWMvc3R1YnMuYyBcCisJYmlvbmljL3N5c3RlbV9wcm9wZXJ0aWVzLmMgXAorCWJpb25pYy90aHJlYWRfYXRleGl0LmMgXAorCWJpb25pYy91dGltZS5jIFwKKwliaW9uaWMvdXRtcC5jIFwKKwluZXRic2QvZ2V0aG5hbWFkZHIuYyBcCisJbmV0YnNkL2lzYy9ldl90aW1lcnMuYyBcCisJbmV0YnNkL2lzYy9ldl9zdHJlYW1zLmMgXAorCW5ldGJzZC9pbmV0L25zYXBfYWRkci5jIFwKKwluZXRic2QvcmVzb2x2L19fZG5fY29tcC5jIFwKKwluZXRic2QvcmVzb2x2L19fcmVzX2Nsb3NlLmMgXAorCW5ldGJzZC9yZXNvbHYvX19yZXNfc2VuZC5jIFwKKwluZXRic2QvcmVzb2x2L2hlcnJvci5jIFwKKwluZXRic2QvcmVzb2x2L3Jlc19jb21wLmMgXAorCW5ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jIFwKKwluZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMgXAorCW5ldGJzZC9yZXNvbHYvcmVzX3F1ZXJ5LmMgXAorCW5ldGJzZC9yZXNvbHYvcmVzX3NlbmQuYyBcCisJbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYy5hcm0gXAorCW5ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMgXAorCW5ldGJzZC9uZXQvbnNkaXNwYXRjaC5jIFwKKwluZXRic2QvbmV0L2dldGFkZHJpbmZvLmMgXAorCW5ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYyBcCisJbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lLmMgXAorCW5ldGJzZC9uZXQvZ2V0c2VydmVudC5jIFwKKwluZXRic2QvbmV0L2Jhc2U2NC5jIFwKKwluZXRic2QvbmV0L2dldHNlcnZieXBvcnQuYyBcCisJbmV0YnNkL25hbWVzZXIvbnNfbmFtZS5jIFwKKwluZXRic2QvbmFtZXNlci9uc19wYXJzZS5jIFwKKwluZXRic2QvbmFtZXNlci9uc190dGwuYyBcCisJbmV0YnNkL25hbWVzZXIvbnNfbmV0aW50LmMgXAorCW5ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMgXAorCW5ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYworCisjIFRoZXNlIGZpbGVzIG5lZWQgdG8gYmUgYXJtIHNvIHRoYXQgZ2Ric2VydmVyCisjIGNhbiBzZXQgYnJlYWtwb2ludHMgaW4gdGhlbSB3aXRob3V0IG1lc3NpbmcKKyMgdXAgYW55IHRodW1iIGNvZGUuCitsaWJjX2NvbW1vbl9zcmNfZmlsZXMgKz0gXAorCWJpb25pYy9wdGhyZWFkLmMuYXJtIFwKKwliaW9uaWMvcHRyYWNlLmMuYXJtCisKK2xpYmNfY29tbW9uX2NmbGFncyA6PSBcCisJCS1EV0lUSF9FUlJMSVNUCQkJXAorCQktREFORFJPSURfQ0hBTkdFUwkJXAorCQktRFVTRV9MT0NLUyAJCQlcCisJCS1EUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIAlcCisJCS1EX0xJQkM9MSAJCQlcCisJCS1EU09GVEZMT0FUICAgICAgICAgICAgICAgICAgICAgXAorCQktREZMT0FUSU5HX1BPSU5UCQlcCisJCS1ETkVFRF9QU0VMRUNUPTEKKworaWZlcSAoJChUQVJHRVRfQlVJTERfVFlQRSksZGVidWcpCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtRERFQlVHCitlbmRpZgorCitpZmVxICgkKFRBUkdFVF9BUkNIKSxhcm0pCisgIGxpYmNfY29tbW9uX2NmbGFncyArPSAtZnN0cmljdC1hbGlhc2luZworZW5kaWYKKworbGliY19jb21tb25fY19pbmNsdWRlcyA6PSBcCisJCSQoTE9DQUxfUEFUSCkvc3RkbGliICBcCisJCSQoTE9DQUxfUEFUSCkvc3RyaW5nICBcCisJCSQoTE9DQUxfUEFUSCkvc3RkaW8KKworIyBsaWJjX2NvbW1vbi5hCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9TUkNfRklMRVMgOj0gJChsaWJjX2NvbW1vbl9zcmNfZmlsZXMpCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpIC1EVVNFX0RMX1BSRUZJWAorTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCisKKyMgV2UgcmVuYW1lIGNydGVuZC5vIHRvIGNydGVuZF9hbmRyb2lkLm8gdG8gYXZvaWQgYQorIyBuYW1lIGNsYXNoIGJldHdlZW4gZ2NjIGFuZCBiaW9uaWMuCitHRU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL2NydGVuZF9hbmRyb2lkLm8KKyQoR0VOKTogJChMT0NBTF9QQVRIKS9hcmNoLWFybS9iaW9uaWMvY3J0ZW5kLlMKKwlAbWtkaXIgLXAgJChkaXIgJEApCisJJChUQVJHRVRfQ0MpIC1tdGh1bWItaW50ZXJ3b3JrIC1vICRAIC1jICQ8CitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK0xPQ0FMX01PRFVMRSA6PSBsaWJjX2NvbW1vbgorTE9DQUxfU1lTVEVNX1NIQVJFRF9MSUJSQVJJRVMgOj0KKworaW5jbHVkZSAkKEJVSUxEX1NUQVRJQ19MSUJSQVJZKQorCisKKyMgbGliYy5hCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitpbmNsdWRlICQoTE9DQUxfUEFUSCkvYXJjaC1hcm0vc3lzY2FsbHMubWsKKworIyBUbyBlbmFibGUgbWFsbG9jIGxlYWsgY2hlY2sgZm9yIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zLCBhZGQKKyMgIldJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSA6PSB0cnVlIiB0byBkZXZpY2UvYnVpbGRzcGVjLm1rCitXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gJChzdHJpcCAkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSkpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJJChsaWJjX2NvbW1vbl9zcmNfZmlsZXMpIFwKKwliaW9uaWMvZGxtYWxsb2MuYyBcCisJYXJjaC1hcm0vYmlvbmljL2V4aWR4X3N0YXRpYy5jIFwKKwliaW9uaWMvbGliY19pbml0X3N0YXRpYy5jCisKK2lmZXEgKCQoV0lUSF9NQUxMT0NfQ0hFQ0tfTElCQ19BKSx0cnVlKQorICBMT0NBTF9TUkNfRklMRVMgKz0gYmlvbmljL21hbGxvY19sZWFrLmMuYXJtCitlbmRpZgorCitHRU4gOj0gJChUQVJHRVRfT1VUX1NUQVRJQ19MSUJSQVJJRVMpL2NydGJlZ2luX3N0YXRpYy5vCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCisJQG1rZGlyIC1wICQoZGlyICRAKQorCSQoVEFSR0VUX0NDKSAtbXRodW1iLWludGVyd29yayAtbyAkQCAtYyAkPAorQUxMX0dFTkVSQVRFRF9TT1VSQ0VTICs9ICQoR0VOKQorCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCisKK0xPQ0FMX0NfSU5DTFVERVMgOj0gJChsaWJjX2NvbW1vbl9jX2luY2x1ZGVzKQorCitpZmVxICgkKFdJVEhfTUFMTE9DX0NIRUNLX0xJQkNfQSksdHJ1ZSkKKyAgTE9DQUxfQ0ZMQUdTICs9IC1EVVNFX0RMX1BSRUZJWCAtRE1BTExPQ19MRUFLX0NIRUNLCitlbmRpZgorCitMT0NBTF9XSE9MRV9TVEFUSUNfTElCUkFSSUVTIDo9IGxpYmNfY29tbW9uCitMT0NBTF9NT0RVTEU6PSBsaWJjCitMT0NBTF9TWVNURU1fU0hBUkVEX0xJQlJBUklFUyA6PQorCitpbmNsdWRlICQoQlVJTERfU1RBVElDX0xJQlJBUlkpCisKKworIyBsaWJjLnNvCisjID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK2luY2x1ZGUgJChDTEVBUl9WQVJTKQorCitMT0NBTF9DRkxBR1MgOj0gJChsaWJjX2NvbW1vbl9jZmxhZ3MpCisKK0xPQ0FMX0NGTEFHUyArPSAtRFVTRV9ETF9QUkVGSVgKKworTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJYmlvbmljL2RsbWFsbG9jLmMgXAorCWJpb25pYy9tYWxsb2NfbGVhay5jLmFybSBcCisJYXJjaC1hcm0vYmlvbmljL2V4aWR4X2R5bmFtaWMuYyBcCisJYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMKKworTE9DQUxfTU9EVUxFOj0gbGliYworCisjIFdBUk5JTkc6IFRoZSBvbmx5IGxpYnJhcnkgbGliYy5zbyBzaG91bGQgZGVwZW5kIG9uIGlzIGxpYmRsLnNvISAgSWYgeW91IGFkZCBvdGhlciBsaWJyYXJpZXMsCisjIG1ha2Ugc3VyZSB0byBhZGQgLVdsLC0tZXhjbHVkZS1saWJzPWxpYmdjYy5hIHRvIHRoZSBMT0NBTF9MREZMQUdTIGZvciB0aG9zZSBsaWJyYXJpZXMuICBUaGlzCisjIGVuc3VyZXMgdGhhdCBzeW1ib2xzIHRoYXQgYXJlIHB1bGxlZCBpbnRvIHRob3NlIG5ldyBsaWJyYXJpZXMgZnJvbSBsaWJnY2MuYSBhcmUgbm90IGRlY2xhcmVkCisjIGV4dGVybmFsOyBpZiB0aGF0IHdlcmUgdGhlIGNhc2UsIHRoZW4gbGliYyB3b3VsZCBub3QgcHVsbCB0aG9zZSBzeW1ib2xzIGZyb20gbGliZ2NjLmEgYXMgaXQKKyMgc2hvdWxkLCBpbnN0ZWFkIHJlbHlpbmcgb24gdGhlIGV4dGVybmFsIHN5bWJvbHMgZnJvbSB0aGUgZGVwZW5kZW50IGxpYnJhcmllcy4gIFRoYXQgd291bGQKKyMgY3JlYXRlIGFuICJjbG9ha2VkIiBkZXBlbmRlbmN5IG9uIGxpYmdjYy5hIGluIGxpYmMgdGhvdWdoIHRoZSBsaWJyYXJpZXMsIHdoaWNoIGlzIG5vdCB3aGF0CisjIHlvdSB3YW50ZWQhCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliZGwKK0xPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisKK0dFTiA6PSAkKFRBUkdFVF9PVVRfU1RBVElDX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYy5vCiskKEdFTik6ICQoTE9DQUxfUEFUSCkvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX2R5bmFtaWMuUworCUBta2RpciAtcCAkKGRpciAkQCkKKwkkKFRBUkdFVF9DQykgLW10aHVtYi1pbnRlcndvcmsgLW8gJEAgLWMgJDwKK0FMTF9HRU5FUkFURURfU09VUkNFUyArPSAkKEdFTikKKworaW5jbHVkZSAkKEJVSUxEX1NIQVJFRF9MSUJSQVJZKQorCisKKyMgbGliY19kZWJ1Zy5zbworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworTE9DQUxfQ0ZMQUdTIDo9ICQobGliY19jb21tb25fY2ZsYWdzKQorCitMT0NBTF9DRkxBR1MgKz0gLURVU0VfRExfUFJFRklYIC1ETUFMTE9DX0xFQUtfQ0hFQ0sKKworTE9DQUxfQ19JTkNMVURFUyA6PSAkKGxpYmNfY29tbW9uX2NfaW5jbHVkZXMpCisKK0xPQ0FMX1NSQ19GSUxFUyA6PSBcCisJYmlvbmljL2RsbWFsbG9jLmMgXAorCWJpb25pYy9tYWxsb2NfbGVhay5jLmFybSBcCisJYXJjaC1hcm0vYmlvbmljL2V4aWR4X2R5bmFtaWMuYyBcCisJYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMKKworTE9DQUxfTU9EVUxFOj0gbGliY19kZWJ1ZworCisjIFdBUk5JTkc6IFRoZSBvbmx5IGxpYnJhcnkgbGliYy5zbyBzaG91bGQgZGVwZW5kIG9uIGlzIGxpYmRsLnNvISAgSWYgeW91IGFkZCBvdGhlciBsaWJyYXJpZXMsCisjIG1ha2Ugc3VyZSB0byBhZGQgLVdsLC0tZXhjbHVkZS1saWJzPWxpYmdjYy5hIHRvIHRoZSBMT0NBTF9MREZMQUdTIGZvciB0aG9zZSBsaWJyYXJpZXMuICBUaGlzCisjIGVuc3VyZXMgdGhhdCBzeW1ib2xzIHRoYXQgYXJlIHB1bGxlZCBpbnRvIHRob3NlIG5ldyBsaWJyYXJpZXMgZnJvbSBsaWJnY2MuYSBhcmUgbm90IGRlY2xhcmVkCisjIGV4dGVybmFsOyBpZiB0aGF0IHdlcmUgdGhlIGNhc2UsIHRoZW4gbGliYyB3b3VsZCBub3QgcHVsbCB0aG9zZSBzeW1ib2xzIGZyb20gbGliZ2NjLmEgYXMgaXQKKyMgc2hvdWxkLCBpbnN0ZWFkIHJlbHlpbmcgb24gdGhlIGV4dGVybmFsIHN5bWJvbHMgZnJvbSB0aGUgZGVwZW5kZW50IGxpYnJhcmllcy4gIFRoYXQgd291bGQKKyMgY3JlYXRlIGFuICJjbG9ha2VkIiBkZXBlbmRlbmN5IG9uIGxpYmdjYy5hIGluIGxpYmMgdGhvdWdoIHRoZSBsaWJyYXJpZXMsIHdoaWNoIGlzIG5vdCB3aGF0CisjIHlvdSB3YW50ZWQhCisKK0xPQ0FMX1NIQVJFRF9MSUJSQVJJRVMgOj0gbGliZGwKK0xPQ0FMX1dIT0xFX1NUQVRJQ19MSUJSQVJJRVMgOj0gbGliY19jb21tb24KK0xPQ0FMX1NZU1RFTV9TSEFSRURfTElCUkFSSUVTIDo9CisjIERvbid0IHByZWxpbmsKK0xPQ0FMX1BSRUxJTktfTU9EVUxFIDo9IGZhbHNlCisjIERvbid0IGluc3RhbGwgb24gcmVsZWFzZSBidWlsZAorTE9DQUxfTU9EVUxFX1RBR1MgOj0gZW5nCisKK0dFTiA6PSAkKFRBUkdFVF9PVVRfU1RBVElDX0xJQlJBUklFUykvY3J0YmVnaW5fZHluYW1pYy5vCitBTExfR0VORVJBVEVEX1NPVVJDRVMgKz0gJChHRU4pCisKK2luY2x1ZGUgJChCVUlMRF9TSEFSRURfTElCUkFSWSkKKworIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoraW5jbHVkZSAkKGNhbGwgYWxsLW1ha2VmaWxlcy11bmRlciwkKExPQ0FMX1BBVEgpKQpkaWZmIC0tZ2l0IGEvbGliYy9DQVZFQVRTIGIvbGliYy9DQVZFQVRTCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjgxYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL0NBVkVBVFMKQEAgLTAsMCArMSwyNiBAQAorQmlvbmljIGlzIGEgdmVyeSBzbWFsbCBDIGxpYnJhcnkgYmVjYXVzZSB3ZSBoYXZlIGRlY2lkZWQgdG8gKm5vdCogaW1wbGVtZW50IHZhcmlvdXMgZmVhdHVyZXMKK29mIHRoZSBQT1NJWCBzdGFuZGFyZC4gd2Ugb25seSBhZGQgZnVuY3Rpb25zIG9uIGEgYXMtbmVlZGVkIGJhc2lzLCBhbmQgdGhlcmUgYXJlIGEgZmV3IHRoaW5ncword2Ugd2lzaCB3ZSdsbCBuZXZlciBwdXQgaW4gdGhlcmUuCisKK3RoaXMgZmlsZSBpcyBoZXJlIHRvIGRvY3VtZW50IGV4cGxpY2l0ZWx5IHdoYXQgd2UgZG9uJ3Qgd2FudCB0byBzdXBwb3J0IGluIEJpb25pYzoKKworLSBDKysgZXhjZXB0aW9ucyBhcmUgbm90IHN1cHBvcnRlZC4gb24gZW1iZWRkZWQgc3lzdGVtcywgdGhleSBsZWFkIHRvIGV4dHJlbWVseSBsYXJnZXIgYW5kCisgIHNsb3dlciBjb2RlIGZvciBubyBnb29kIHJlYXNvbiAoZXZlbiB3aGVuIHNvLWNhbGxlZCB6ZXJvLWNvc3QgZXhjZXB0aW9uIHNjaGVtZXMgYXJlCisgIGltcGxlbWVudGVkLCB0aGV5IGVuZm9yY2UgdmVyeSBsYXJnZSBudW1iZXJzIG9mIHJlZ2lzdGVycyBzcGlsbHMgdG8gdGhlIHN0YWNrLCBldmVuCisgIGluIGZ1bmN0aW9ucyB0aGF0IGRvIG5vdCB0aHJvdyBhbiBleGNlcHRpb24gdGhlbXNlbHZlcykuCisKKy0gcHRocmVhZCBjYW5jZWxsYXRpb24gaXMgKm5vdCogc3VwcG9ydGVkLiB0aGlzIHNlZW1pbmdseSBzaW1wbGUgImZlYXR1cmUiIGlzIHRoZSBzb3VyY2UKKyAgb2YgbXVjaCBibG9hdCBhbmQgY29tcGxleGl0eSBpbiBhIEMgbGlicmFyeS4gQmVzaWRlcywgeW91J2QgYmV0dGVyIHdyaXRlIGNvcnJlY3QKKyAgbXVsdGktdGhyZWFkZWQgY29kZSBpbnN0ZWFkIG9mIHJlbHlpbmcgb24gdGhpcyBzdHVmZi4KKworLSBwdGhyZWFkX29uY2UoKSBkb2Vzbid0IHN1cHBvcnQgQysrIGV4Y2VwdGlvbnMgdGhyb3duIGZyb20gdGhlIGluaXQgZnVuY3Rpb24sIG9yIHRoZSBpbml0CisgIGZ1bmN0aW9uIGRvaW5nIGEgZm9yaygpLgorCistIGxvY2FsZXMgYW5kIHdpZGUgY2hhcmFjdGVycyBhcmUgbm90IHN1cHBvcnRlZC4gd2UgdXNlIElDVSBmb3IgYWxsIHRoaXMgaTE4biBzdHVmZiwgd2hpY2gKKyAgaXMgbXVjaCBiZXR0ZXIgdGhhbiB0aGUgaWxsLWRlc2lnbmVkIHJlbGF0ZWQgQyBsaWJyYXJpZXMgZnVuY3Rpb25zLgorCistIGF0IHRoZSBtb21lbnQsIHNldmVyYWwgdXNlci1hY2NvdW50LXJlbGF0ZWQgZnVuY3Rpb25zIGxpa2UgZ2V0cHdkIGFyZSBzdHViYmVkIGFuZCByZXR1cm4KKyAgdGhlIHZhbHVlcyBjb3JyZXNwb25kaW5nIHRvIHJvb3QuIHRoaXMgd2lsbCBiZSBmaXhlZCB3aGVuIHdlJ2xsIGJlIGFibGUgdG8gaGF2ZSBkaXN0aW5jdAorICB1c2VycyBvbiB0aGUgQW5kcm9pZCBmaWxlc3lzdGVtLiA6LSgKKworICBzZWUgYmlvbmljL3N0dWJzLmMgZm9yIHRoZSBkZXRhaWxzCmRpZmYgLS1naXQgYS9saWJjL0phbWZpbGUgYi9saWJjL0phbWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTY1YmU1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvSmFtZmlsZQpAQCAtMCwwICsxLDQ0MSBAQAorIyBUaGlzIGZpbGUgaXMgdXNlZCB0byBidWlsZCB0aGUgQmlvbmljIGxpYnJhcnkgd2l0aCB0aGUgSmFtIGJ1aWxkCisjIHRvb2wuIEZvciBpbmZvLCBzZWUgd3d3LnBlcmZvcmNlLmNvbS9qYW0vamFtLmh0bWwKKyMKKworQklPTklDX1RPUCA/PSAkKERPVCkgOworCitERUJVRyA9IDEgOworCisjIHBhdHRlcm4gdXNlZCBmb3IgYXV0b21hdGljIGhlYWRlIGluY2x1c2lvbiBkZXRlY3Rpb24KK0hEUlBBVFRFUk4gPSAiXlsgCV0qI1sgCV0qaW5jbHVkZVsgCV0qWzxcIl0oW15cIj5dKilbXCI+XS4qJCIgOworCisKKyMgZGVidWdnaW5nIHN1cHBvcnQsIHNpbXBseSBkZWZpbmUgdGhlIERFQlVHIHZhcmlhYmxlIHRvIGFjdGl2YXRlIHZlcmJvc2Ugb3V0cHV0CitydWxlIERlYnVnCit7CisgICAgaWYgJChERUJVRykgeworICAgICAgICBFY2hvICQoMSkgOworICAgIH0KK30KKworIyByZXR1cm4gYWxsIGVsZW1lbnRzIGZyb20gJCgxKSB0aGF0IGFyZSBub3QgaW4gJCgyKQorcnVsZSBGaWx0ZXIgIGxpc3QgOiBmaWx0ZXIKK3sKKyAgICBsb2NhbCByZXN1bHQgPSA7CisgICAgbG9jYWwgaXRlbSA7CisgICAgZm9yIGl0ZW0gaW4gJChsaXN0KSB7CisgICAgICAgIGlmICEgJChpdGVtKSBpbiAkKGZpbHRlcikgeworICAgICAgICAgICAgcmVzdWx0ICs9ICQoaXRlbSkgOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAkKHJlc3VsdCkgOworfQorCisKKyMgcmV2ZXJzZSBhIGxpc3Qgb2YgZWxlbWVudHMKK3J1bGUgUmV2ZXJzZSAgbGlzdAoreworICAgIGxvY2FsICByZXN1bHQgPSA7CisgICAgbG9jYWwgIGl0ZW0gOworCisgICAgZm9yIGl0ZW0gaW4gJChsaXN0KSB7CisgICAgICAgIHJlc3VsdCA9ICQoaXRlbSkgJChyZXN1bHQpIDsKKyAgICB9CisgICAgcmV0dXJuICQocmVzdWx0KSA7Cit9CisKKworIyBkZWNvbXBvc2UgYSBwYXRoIGludG8gYSBsaXN0IG9mIGVsZW1lbnRzCitydWxlIFBhdGhEZWNvbXBvc2UgIGRpcgoreworICAgIGxvY2FsICByZXN1bHQgOworCisgICAgd2hpbGUgJChkaXI6RCkKKyAgICB7CisgICAgICAgIGlmICEgJChkaXI6QlMpIHsgICMgZm9yIHJvb3RlZCBwYXRocyBsaWtlICIvZm9vIgorICAgICAgICAgICAgYnJlYWsgOworICAgICAgICB9CisgICAgICAgIHJlc3VsdCA9ICQoZGlyOkJTKSAkKHJlc3VsdCkgOworICAgICAgICBkaXIgICAgPSAkKGRpcjpEKSA7CisgICAgfQorICAgIHJlc3VsdCA9ICQoZGlyKSAkKHJlc3VsdCkgOworICAgIHJldHVybiAkKHJlc3VsdCkgOworfQorCisKKyMgc2ltcGx5IGEgZmlsZSBwYXRoLCBpLmUuIGdldCByaWQgb2YgLiBvciAuLiB3aGVuIHBvc3NpYmxlCitydWxlIF9QYXRoU2ltcGxpZnkgIGRpcgoreworICAgIGxvY2FsICByZXN1bHQgPSA7CisgICAgbG9jYWwgIGRpcjIgZCA7CisKKyAgICBkaXIgID0gWyBQYXRoRGVjb21wb3NlICQoZGlyKSBdIDsKKworICAgICMgZ2V0IHJpZCBvZiBhbnkgc2luZ2xlIGRvdAorICAgIGRpcjIgPSA7CisgICAgZm9yIGQgaW4gJChkaXIpIHsKKyAgICAgICAgaWYgJChkKSA9ICIuIiB7CisgICAgICAgICAgICBjb250aW51ZSA7CisgICAgICAgIH0KKyAgICAgICAgZGlyMiArPSAkKGQpIDsKKyAgICB9CisKKyAgICAjIGdldCByaWQgb2YgLi4gd2hlbiBwb3NzaWJsZQorICAgIGZvciBkIGluICQoZGlyMikgeworICAgICAgICBpZiAkKGQpID0gIi4uIiAmJiAkKHJlc3VsdCkgeworICAgICAgICAgICAgcmVzdWx0ID0gJChyZXN1bHRbMi1dKSA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmVzdWx0ID0gJChkKSAkKHJlc3VsdCkgOworICAgIH0KKworICAgICMgbm93IGludmVydCB0aGUgcmVzdWx0CisgICAgcmVzdWx0ID0gWyBSZXZlcnNlICQocmVzdWx0KSBdIDsKKyAgICBpZiAhICQocmVzdWx0KSB7CisgICAgICAgIHJlc3VsdCA9ICIuIiA7CisgICAgfQorICAgIHJldHVybiAkKHJlc3VsdDpKPSIvIikgOworfQorCisKK3J1bGUgUGF0aFNpbXBsaWZ5ICBkaXJzCit7CisgICAgbG9jYWwgcmVzdWx0IDsKKyAgICBsb2NhbCBkIDsKKyAgICBmb3IgZCBpbiAkKGRpcnMpIHsKKyAgICAgICAgcmVzdWx0ICs9IFsgX1BhdGhTaW1wbGlmeSAkKGQpIF0gOworICAgIH0KKyAgICByZXR1cm4gJChyZXN1bHQpIDsKK30KKworCisjIHJldHJpZXZlIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMKK3J1bGUgTGlzdFN1YkRpcnMgIHBhdGhzCit7CisgICAgbG9jYWwgIHJlc3VsdCAgPSA7CisgICAgbG9jYWwgIGVudHJ5IDsKKyAgICBmb3IgZW50cnkgaW4gWyBHbG9iICQocGF0aHMpIDogKiBdIHsKKyAgICAgICAgaWYgISAkKGVudHJ5OlMpIHsKKyAgICAgICAgICAgIHJlc3VsdCArPSAkKGVudHJ5KSA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIFsgUGF0aFNpbXBsaWZ5ICQocmVzdWx0KSBdIDsKK30KKworCisjIHJldHJpZXZlIGxpc3Qgb2Ygc291cmNlcyBpbiBhIGdpdmVuIGRpcmVjdG9yeQorcnVsZSBMaXN0U291cmNlcyAgcGF0aAoreworICAgIHJldHVybiBbIEdsb2IgJChwYXRoKSA6ICouUyAqLmMgXSA7Cit9CisKKworIyBmaW5kIHRoZSBwcmVidWlsdCBkaXJlY3RvcnkKKyMKK2lmICEgJChUT1ApIHsKKyAgICBFY2hvICJQbGVhc2UgZGVmaW5lIFRPUCBhcyB0aGUgcm9vdCBvZiB5b3VyIGRldmljZSBidWlsZCB0cmVlIiA7CisgICAgRXhpdCA7Cit9CisKK0RlYnVnICJPUyBpcyIgJChPUykgOworRGVidWcgIkNQVSBpcyIgJChDUFUpIDsKKworaWYgJChPUykgPSBMSU5VWAoreworICAgIFBSRUJVSUxUID0gJChUT1ApL3ByZWJ1aWx0L0xpbnV4IDsKK30KK2Vsc2UgaWYgJChPUykgPSBNQUNPU1gKK3sKKyAgICBzd2l0Y2ggJChDUFUpIHsKKyAgICAgICAgY2FzZSBpMzg2IDogUFJFQlVJTFQgPSAkKFRPUCkvcHJlYnVpbHQvZGFyd2luLXg4NiA7IGJyZWFrIDsKKyAgICAgICAgY2FzZSBwcGMgIDogUFJFQlVJTFQgPSAkKFRPUCkvcHJlYnVpbHQvZGFyd2luLXBwYyA7IGJyZWFrIDsKKyAgICAgICAgY2FzZSAqICAgIDogRWNobyAidW5zdXBwb3J0ZWQgQ1BVIiAiJChDUFUpICEhIiA7CisgICAgICAgICAgICAgICAgICAgIEVjaG8gIlBsZWFzZSBjb250YWN0IGRpZ2l0QGdvb2dsZS5jb20gZm9yIGhlbHAiIDsKKyAgICAgICAgICAgICAgICAgICAgRXhpdCA7CisgICAgfQorfQorZWxzZQoreworICAgIEVjaG8gIlVuc3VwcG9ydGVkIG9wZXJhdGluZyBzeXN0ZW0iICQoT1MpIDsKKyAgICBFY2hvICJQbGVhc2UgY29udGFjdCBkaWdpdEBnb29nbGUuY29tIGZvciBoZWxwIiA7CisgICAgRXhpdCA7Cit9CisKK0RlYnVnICJUT1AgaXMiICQoVE9QKSA7CitEZWJ1ZyAiUFJFQlVJTFQgaXMiICQoUFJFQlVJTFQpIDsKKworCisjIGNoZWNrIGFyY2hpdGVjdHVyZXMgYW5kIHNldHVwIHRvb2xjaGFpbiB2YXJpYWJsZXMKKyMKK1NVUFBPUlRFRF9BUkNIUyA9IHg4NiBhcm0gOworCitBUkNIID89ICQoU1VQUE9SVEVEX0FSQ0hTKSA7CisKK2lmICEgJChBUkNIKSBpbiAkKFNVUFBPUlRFRF9BUkNIUykgeworICAgIEVjaG8gIlRoZSB2YXJpYWJsZSBBUkNIIGNvbnRhaW5zIGFuIHVuc3VwcG9ydGVkIHZhbHVlLCB1c2Ugb25lIG9yIG1vcmUgb2YgdGhlc2UgaW5zdGVhZCIgOworICAgIEVjaG8gInNlcGFyYXRlZCBieSBzcGFjZXM6IiAkKFNVUFBPUlRFRF9BUkNIUykgOworICAgIEV4aXQgOworfQorCit4ODZfVE9PTFNFVF9QUkVGSVggPz0gIiIgOworYXJtX1RPT0xTRVRfUFJFRklYID89ICQoVE9QKS9wcmVidWlsdC9MaW51eC90b29sY2hhaW4tNC4xLjEvYmluL2FybS1lbGYtIDsKKworZm9yIGFyY2ggaW4gJChBUkNIKSB7CisgICAgQ0NfJChhcmNoKSAgPSAkKCQoYXJjaClfVE9PTFNFVF9QUkVGSVgpZ2NjIDsKKyAgICBDKytfJChhcmNoKSA9ICQoJChhcmNoKV9UT09MU0VUX1BSRUZJWClnKysgOworICAgIEFSXyQoYXJjaCkgID0gJCgkKGFyY2gpX1RPT0xTRVRfUFJFRklYKWFyIDsKK30KKworCisjIHRoZSBsaXN0IG9mIGFyY2gtaW5kZXBlbmRlbnQgc291cmNlIHN1YmRpcmVjdG9yaWVzCitCSU9OSUNfU1JDX1NVQkRJUlMgPSBzdHJpbmcgOworQklPTklDX3g4Nl9TVUJESVJTID0gOworQklPTklDX2FybV9TVUJESVJTID0gOworCitDRkxBR1MgICA9IC1PMCAtZyAtVyA7CisKKworCisjIGZpbmQgc291cmNlcyBpbiBhIGdpdmVuIGxpc3Qgb2Ygc3ViZGlyZWN0b3JpZXMKK3J1bGUgRmluZFNvdXJjZXMgIGRpcnMKK3sKKyAgICBsb2NhbCBkaXIgOworCisgICAgZm9yIGRpciBpbiAkKGRpcnMpCisgICAgeworICAgICAgICBsb2NhbCBMT0NBTF9TUkMgTk9fTE9DQUxfU1JDIDsKKworICAgICAgICBpZiBbIEdsb2IgJChkaXIpIDogcnVsZXMuamFtIF0geworICAgICAgICAgICAgaW5jbHVkZSAkKGRpcikvcnVsZXMuamFtIDsKKyAgICAgICAgICAgIGlmICQoTE9DQUxfU1JDKSB7CisgICAgICAgICAgICAgICAgX3NvdXJjZXMgPSAkKExPQ0FMX1NSQykgOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgX3NvdXJjZXMgPSBbIEdsb2IgJChkaXIpIDogKi5TICouYyBdIDsKKyAgICAgICAgICAgICAgICBfc291cmNlcyA9ICQoX3NvdXJjZXM6QlMpIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICQoTk9fTE9DQUxfU1JDKSB7CisgICAgICAgICAgICAgICAgX3NvdXJjZXMgPSBbIEZpbHRlciAkKF9zb3VyY2VzKSA6ICQoTk9fTE9DQUxfU1JDKSBdIDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHNvdXJjZXMgKz0gJChkaXIpLyQoX3NvdXJjZXMpIDsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBzb3VyY2VzICs9IFsgTGlzdFNvdXJjZXMgJChkaXIpIF0gOworICAgIH0KK30KKworIyBDb21waWxlIGEgZ2l2ZW4gb2JqZWN0IGZpbGUgZnJvbSBhIHNvdXJjZQorcnVsZSBDb21waWxlICBvYmplY3QgOiBzb3VyY2UKK3sKKyAgICBEZXBlbmRzICQob2JqZWN0KSA6ICQoc291cmNlKSA7CisgICAgRGVwZW5kcyBiaW9uaWMgOiAkKG9iamVjdCkgOworICAgIENsZWFuIGNsZWFuIDogJChvYmplY3QpIDsKKworICAgIE1ha2VMb2NhdGUgJChvYmplY3QpIDogJChPVVQpIDsKKworCisgICAgQ0Mgb24gJChvYmplY3QpICAgICAgID0gJChDQ18kKGFyY2gpKSA7CisgICAgQ0ZMQUdTIG9uICQob2JqZWN0KSAgID0gJChDRkxBR1MpIDsKKyAgICBJTkNMVURFUyBvbiAkKG9iamVjdCkgPSAkKElOQ0xVREVTKSA7CisgICAgREVGSU5FUyBvbiAkKG9iamVjdCkgID0gJChERUZJTkVTKSA7CisKKyAgICBIRFJSVUxFIG9uICQoPikgPSBIZHJSdWxlIDsKKyAgICBIRFJTQ0FOIG9uICQoPikgPSAkKEhEUlBBVFRFUk4pIDsKKyAgICBIRFJTRUFSQ0ggb24gJCg+KSA9ICQoSU5DTFVERVMpIDsKKyAgICBIRFJHUklTVCBvbiAkKD4pID0gJChIRFJHUklTVCkgOworfQorCisKK2FjdGlvbnMgQ29tcGlsZQoreworICAgICQoQ0MpIC1jIC1vICQoMSkgJChDRkxBR1MpIC1JJChJTkNMVURFUykgLUQkKERFRklORVMpICQoMikKK30KKworCitydWxlIFJtVGVtcHMKK3sKKyAgICBUZW1wb3JhcnkgJCgyKSA7Cit9CisKK2FjdGlvbnMgcXVpZXRseSB1cGRhdGVkIHBpZWNlbWVhbCB0b2dldGhlciBSbVRlbXBzCit7CisgICAgcm0gLWYgJCgyKQorfQorCithY3Rpb25zIEFyY2hpdmUKK3sKKyAgICAkKEFSKSBydSAkKDEpICQoMikKK30KKworcnVsZSBMaWJyYXJ5ICBsaWJyYXJ5IDogb2JqZWN0cworeworICAgIGxvY2FsICBvYmogOworCisgICAgaWYgISAkKGxpYnJhcnk6UykgeworICAgICAgICBsaWJyYXJ5ID0gJChsaWJyYXJ5OlM9LmEpIDsKKyAgICB9CisgICAgbGlicmFyeSA9ICQobGlicmFyeTpHPTwkKGFyY2gpPikgOworCisgICAgRGVwZW5kcyBhbGwgOiAkKGxpYnJhcnkpIDsKKworICAgIGlmICEgJChsaWJyYXJ5OkQpIHsKKyAgICAgICAgTWFrZUxvY2F0ZSAkKGxpYnJhcnkpICQobGlicmFyeSkoJChvYmplY3RzOkJTKSkgOiAkKE9VVCkgOworICAgIH0KKworICAgIERlcGVuZHMgJChsaWJyYXJ5KSA6ICQobGlicmFyeSkoJChvYmplY3RzOkJTKSkgOworICAgIGZvciBvYmogaW4gJChvYmplY3RzKSB7CisgICAgICAgIERlcGVuZHMgJChsaWJyYXJ5KSgkKG9iajpCUykpIDogJChvYmopIDsKKyAgICB9CisKKyAgICBDbGVhbiBjbGVhbiA6ICQobGlicmFyeSkgOworCisgICAgQVIgb24gJChsaWJyYXJ5KSA9ICQoQVJfJChhcmNoKSkgOworICAgIEFyY2hpdmUgJChsaWJyYXJ5KSA6ICQob2JqZWN0cykgOworCisgICAgUm1UZW1wcyAkKGxpYnJhcnkpIDogJChvYmplY3RzKSA7Cit9CisKKworcnVsZSAgUHJvY2Vzc0RpcgoreworICAgIGxvY2FsIENGTEFHUyAgID0gJChDRkxBR1MpIDsKKyAgICBsb2NhbCBERUZJTkVTICA9ICQoREVGSU5FUykgOworICAgIGxvY2FsIElOQ0xVREVTID0gJChJTkNMVURFUykgOworICAgIGxvY2FsIGxvY2FsX3J1bGVzID0gWyBHbG9iICQoMSkgOiBydWxlcy5qYW0gXSA7CisgICAgbG9jYWwgc291cmNlIHNvdXJjZXMgOworCisgICAgaWYgJChsb2NhbF9ydWxlcykgeworICAgICAgICBsb2NhbCBMT0NBTF9DRkxBR1MgTE9DQUxfREVGSU5FUyBMT0NBTF9JTkNMVURFUyBMT0NBTF9TUkMgTk9fTE9DQUxfU1JDIDsKKworICAgICAgICBpbmNsdWRlICQobG9jYWxfcnVsZXMpIDsKKyAgICAgICAgQ0ZMQUdTICAgKz0gJChMT0NBTF9DRkxBR1MpIDsKKyAgICAgICAgREVGSU5FUyAgKz0gJChMT0NBTF9ERUZJTkVTKSA7CisgICAgICAgIElOQ0xVREVTICs9ICQoTE9DQUxfSU5DTFVERVMpIDsKKworICAgICAgICBpZiAkKExPQ0FMX1NSQykgeworICAgICAgICAgICAgc291cmNlcyA9ICQoTE9DQUxfU1JDKSA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzb3VyY2VzID0gWyBHbG9iICQoMSkgOiAqLlMgKi5jIF0gOworICAgICAgICAgICAgc291cmNlcyA9ICQoc291cmNlczpCUykgOworICAgICAgICB9CisKKyAgICAgICAgaWYgJChOT19MT0NBTF9TUkMpIHsKKyAgICAgICAgICAgIHNvdXJjZXMgPSBbIEZpbHRlciAkKHNvdXJjZXMpIDogJChOT19MT0NBTF9TUkMpIF0gOworICAgICAgICB9CisKKyAgICAgICAgc291cmNlcyA9ICQoMSkvJChzb3VyY2VzKSA7CisgICAgfQorICAgIGVsc2UKKyAgICAgICAgc291cmNlcyA9IFsgR2xvYiAkKDEpIDogKi5TICouYyBdIDsKKworICAgIGZvciBzb3VyY2UgaW4gJChzb3VyY2VzKSB7CisgICAgICAgIGxvY2FsIG5hbWUgPSAkKHNvdXJjZTpCKSA7CisKKyAgICAgICAgaWYgJChzb3VyY2U6UykgPSAiLlMiIHsKKyAgICAgICAgICAgICMgcmVjb3JkIHRoZSBsaXN0IG9mIGFzc2VtYmxlciBzb3VyY2VzCisgICAgICAgICAgICBBU1NFTUJMRVJfU09VUkNFUyArPSAkKG5hbWUpIDsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmICQoc291cmNlOlMpID0gIi5jIiAmJiAkKG5hbWUpIGluICQoQVNTRU1CTEVSX1NPVVJDRVMpIHsKKyAgICAgICAgICAgICMgc2tpcCBDIHNvdXJjZSBmaWxlIGlmIGNvcnJlc3BvbmRpbmcgYXNzZW1ibGVyIGV4aXN0cworICAgICAgICAgICAgY29udGludWUgOworICAgICAgICB9CisKKyAgICAgICAgb2JqbmFtZSA9IDwkKGFyY2gpPiQobmFtZSkubyAgOworCisgICAgICAgIENvbXBpbGUgJChvYmpuYW1lKSA6ICQoc291cmNlKSA7CisgICAgICAgIEFMTF9PQkpFQ1RTICs9ICQob2JqbmFtZSkgOworICAgIH0KK30KKworcnVsZSBQcm9jZXNzRGlycworeworICAgIGxvY2FsICBkaXIgOworICAgIGZvciBkaXIgaW4gJCgxKSB7CisgICAgICAgIFByb2Nlc3NEaXIgJChkaXIpIDsKKyAgICB9Cit9CisKK0lOQ0xVREVTX3g4NiA9IC91c3Ivc3JjL2xpbnV4L2luY2x1ZGUgOworCitJTkNMVURFU19hcm0gPSAuLi9rZXJuZWxfaGVhZGVycworICAgICAgICAgICAgICAgaW5jbHVkZS9hcmNoL2FybQorICAgICAgICAgICAgICAgaW5jbHVkZS9iaXRzMzIKKyAgICAgICAgICAgICAgIDsKKworSU5DTFVERVMgPSBpbmNsdWRlIHN0ZGlvIHN0cmluZyBzdGRsaWIgLgorICAgICAgICAgICAuLi9tc3VuL2luY2x1ZGUKKyAgICAgICAgICAgOworCitERUZJTkVTICA9IEFORFJPSURfQ0hBTkdFUworICAgICAgICAgICBVU0VfTE9DS1MKKyAgICAgICAgICAgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTCisgICAgICAgICAgIF9MSUJDPTEKKyAgICAgICAgICAgU09GVEZMT0FUCisgICAgICAgICAgIEZMT0FUSU5HX1BPSU5UCisgICAgICAgICAgIE5FRURfUFNFTEVDVD0xCisgICAgICAgICAgIEFORFJPSUQKKyAgICAgICAgICAgOworCitDRkxBR1NfeDg2ID0gOworCisKK2ZvciBhcmNoIGluICQoQVJDSCkKK3sKKyAgICBsb2NhbCBBUkNIX0RJUiA9ICQoQklPTklDX1RPUCkvYXJjaC0kKGFyY2gpIDsKKyAgICBsb2NhbCBJTkNMVURFUyA9ICQoSU5DTFVERVNfJChhcmNoKSkgJChBUkNIX0RJUikvaW5jbHVkZSAkKElOQ0xVREVTKSA7CisgICAgbG9jYWwgREVGSU5FUyAgPSAkKERFRklORVNfJChhcmNoKSkgJChERUZJTkVTKSBBUkNIPSQoYXJjaCkgIDsKKyAgICBsb2NhbCBDRkxBR1MgICA9ICQoQ0ZMQUdTKSAkKENGTEFHU18kKGFyY2gpKSA7CisgICAgbG9jYWwgT1VUICAgICAgPSBvdXQvJChhcmNoKSA7CisgICAgbG9jYWwgQVNTRU1CTEVSX1NPVVJDRVMgQUxMX09CSkVDVFMgOworCisgICAgUHJvY2Vzc0RpcnMgWyBMaXN0U3ViRGlycyAkKEFSQ0hfRElSKSBdIDsKKyAgICBQcm9jZXNzRGlycyBzdGRsaWIgc3RkaW8gdW5pc3RkIHN0cmluZyB0emNvZGUgaW5ldCA7CisgICAgUHJvY2Vzc0RpcnMgWyBMaXN0U3ViRGlycyBuZXRic2QgXSA7CisgICAgUHJvY2Vzc0RpcnMgYmlvbmljIDsKKworICAgIExpYnJhcnkgYmlvbmljIDogJChBTExfT0JKRUNUUykgOworfQorCitCSU9OSUNfU0VBUkNIID0gJChCSU9OSUNfVE9QKS9pbmNsdWRlIDsKKworCisKKyMgL0hkclJ1bGUgc291cmNlIDogaGVhZGVycyA7CisjCisjIEFycmFuZ2VzIHRoZSBwcm9wZXIgZGVwZW5kZW5jaWVzIHdoZW4gdGhlIGZpbGUgX3NvdXJjZV8gaW5jbHVkZXMgdGhlIGZpbGVzCisjIF9oZWFkZXJzXyB0aHJvdWdoIHRoZSAjaW5jbHVkZSBDIHByZXByb2Nlc3NvciBkaXJlY3RpdmUKKyMKKyMgdGhpcyBydWxlIGlzIG5vdCBpbnRlbmRlbmQgdG8gYmUgY2FsbGVkIGV4cGxpY2l0ZWx5LiBJdCBpcyBjYWxsZWQKKyMgYXV0b21hdGljYWxseSBkdXJpbmcgaGVhZGVyIHNjYW5uaW5nIG9uIHNvdXJjZXMgaGFuZGxlZCBieSB0aGUgQE9iamVjdAorIyBydWxlIChlLmcuIHNvdXJjZXMgaW4gQE1haW4gb3IgQExpYnJhcnkgcnVsZXMpCisjCitydWxlIEhkclJ1bGUKK3sKKyAgICAjIEhkclJ1bGUgc291cmNlIDogaGVhZGVycyA7CisKKyAgICAjIE4uQi4gIFRoaXMgcnVsZSBpcyBjYWxsZWQgZHVyaW5nIGJpbmRpbmcsIHBvdGVudGlhbGx5IGFmdGVyCisgICAgIyB0aGUgZmF0ZSBvZiBtYW55IHRhcmdldHMgaGFzIGJlZW4gZGV0ZXJtaW5lZCwgYW5kIG11c3QgYmUKKyAgICAjIHVzZWQgd2l0aCBjYXV0aW9uOiBkb24ndCBhZGQgZGVwZW5kZW5jaWVzIHRvIHVucmVsYXRlZAorICAgICMgdGFyZ2V0cywgYW5kIGRvbid0IHNldCB2YXJpYWJsZXMgb24gJCg8KS4KKworICAgICMgVGVsbCBKYW0gdGhhdCBhbnl0aGluZyBkZXBlbmRpbmcgb24gJCg8KSBhbHNvIGRlcGVuZHMgb24gJCg+KSwKKyAgICAjIHNldCBTRUFSQ0ggc28gSmFtIGNhbiBmaW5kIHRoZSBoZWFkZXJzLCBidXQgdGhlbiBzYXkgd2UgZG9uJ3QKKyAgICAjIGNhcmUgaWYgd2UgY2FuJ3QgYWN0dWFsbHkgZmluZCB0aGUgaGVhZGVycyAodGhleSBtYXkgaGF2ZSBiZWVuCisgICAgIyB3aXRoaW4gaWZkZWZzKSwKKworICAgIGxvY2FsIHMgPSAkKD46Rz0kKEhEUkdSSVNUOkUpKSA7CisKKyAgICBJbmNsdWRlcyAkKDwpIDogJChzKSA7CisgICAgU0VBUkNIIG9uICQocykgPSAkKEhEUlNFQVJDSCkgOworICAgIE5vQ2FyZSAkKHMpIDsKKworICAgICMgUHJvcGFnYXRlIG9uICQoPCkgdG8gJCg+KQorCisgICAgSERSU0VBUkNIIG9uICQocykgPSAkKEhEUlNFQVJDSCkgOworICAgIEhEUlNDQU4gb24gJChzKSA9ICQoSERSU0NBTikgOworICAgIEhEUlJVTEUgb24gJChzKSA9ICQoSERSUlVMRSkgOworICAgIEhEUkdSSVNUIG9uICQocykgPSAkKEhEUkdSSVNUKSA7Cit9CisKKwpkaWZmIC0tZ2l0IGEvbGliYy9NT0RVTEVfTElDRU5TRV9CU0QgYi9saWJjL01PRFVMRV9MSUNFTlNFX0JTRApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9NT0RVTEVfTElDRU5TRV9CU0QKZGlmZiAtLWdpdCBhL2xpYmMvTk9USUNFIGIvbGliYy9OT1RJQ0UKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTgwNzZiNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvTk9USUNFCkBAIC0wLDAgKzEsMzgyIEBACisKK0NvcHlyaWdodCAoYykgMjAwNS0yMDA4LCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKyAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIAorICAgZGlzdHJpYnV0aW9uLgorICogTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IG5vciB0aGUgbmFtZXMKKyAgIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4KKyAgIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCitMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKK0NPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKK0lOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCitCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKK09GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCAKK0FORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKK09SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworCitDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKK0NvcHlyaWdodCAoYykgMTk5NSwxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKworUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CitwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCitjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKK0FOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKK1dIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKK09GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisKKworUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk1IGJ5IEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4KKworSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLiAoaGVyZWluYWZ0ZXIgY2FsbGVkIElCTSkgZ3JhbnRzCitwZXJtaXNzaW9uIHVuZGVyIGl0cyBjb3B5cmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzCitTb2Z0d2FyZSB3aXRoIG9yIHdpdGhvdXQgZmVlLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorYWxsIHBhcmFncmFwaHMgb2YgdGhpcyBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0IHRoZSBuYW1lIG9mIElCTQorbm90IGJlIHVzZWQgaW4gY29ubmVjdGlvbiB3aXRoIHRoZSBtYXJrZXRpbmcgb2YgYW55IHByb2R1Y3QgaW5jb3Jwb3JhdGluZwordGhlIFNvZnR3YXJlIG9yIG1vZGlmaWNhdGlvbnMgdGhlcmVvZiwgd2l0aG91dCBzcGVjaWZpYywgd3JpdHRlbiBwcmlvcgorcGVybWlzc2lvbi4KKworVG8gdGhlIGV4dGVudCBpdCBoYXMgYSByaWdodCB0byBkbyBzbywgSUJNIGdyYW50cyBhbiBpbW11bml0eSBmcm9tIHN1aXQKK3VuZGVyIGl0cyBwYXRlbnRzLCBpZiBhbnksIGZvciB0aGUgdXNlLCBzYWxlIG9yIG1hbnVmYWN0dXJlIG9mIHByb2R1Y3RzIHRvCit0aGUgZXh0ZW50IHRoYXQgc3VjaCBwcm9kdWN0cyBhcmUgdXNlZCBmb3IgcGVyZm9ybWluZyBEb21haW4gTmFtZSBTeXN0ZW0KK2R5bmFtaWMgdXBkYXRlcyBpbiBUQ1AvSVAgbmV0d29ya3MgYnkgbWVhbnMgb2YgdGhlIFNvZnR3YXJlLiAgTm8gaW1tdW5pdHkgaXMKK2dyYW50ZWQgZm9yIGFueSBwcm9kdWN0IHBlciBzZSBvciBmb3IgYW55IG90aGVyIGZ1bmN0aW9uIG9mIGFueSBwcm9kdWN0LgorCitUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgQU5EIElCTSBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMsCitJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEKK1BBUlRJQ1VMQVIgUFVSUE9TRS4gIElOIE5PIEVWRU5UIFNIQUxMIElCTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLAorRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgQVJJU0lORworT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4KK0lGIElCTSBJUyBBUFBSSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0VTLgorCitDb3B5cmlnaHQgKGMpIDE5OTcsIDE5OTgsIDE5OTksIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCitBbGwgcmlnaHRzIHJlc2VydmVkLgorCitUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorYnkgTHVrZSBNZXdidXJuOyBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgorVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KK2J5IENocmlzdG9zIFpvdWxhcy4KKworQ29weXJpZ2h0IChjKSAxOTkzIENocmlzdG9waGVyIEcuIERlbWV0cmlvdQorQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg1LCAxOTkzIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCitDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCithcmUgbWV0OgorMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorU1VDSCBEQU1BR0UuCisKK0NvcHlyaWdodCAoYykgMjAwMyBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1BvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgZm9yIHRoZSBGcmVlQlNEIFByb2plY3QgYnkKK0phY3F1ZXMgQS4gVmlkcmluZSwgU2FmZXBvcnQgTmV0d29yayBTZXJ2aWNlcywgYW5kIE5ldHdvcmsKK0Fzc29jaWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUgU2VjdXJpdHkgUmVzZWFyY2ggRGl2aXNpb24gb2YgTmV0d29yaworQXNzb2NpYXRlcywgSW5jLiB1bmRlciBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNQorKCJDQk9TUyIpLCBhcyBwYXJ0IG9mIHRoZSBEQVJQQSBDSEFUUyByZXNlYXJjaCBwcm9ncmFtLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiAKK1NVQ0ggREFNQUdFLgorCitQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKK3RoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCitwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKK3NwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisKK1RIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCitXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCitPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKK0NPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKK0FDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworU09GVFdBUkUuCisKKworQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgQnJpbmljb21iZQorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cittb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKK2FyZSBtZXQ6CisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCiszLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJrIEJyaW5pY29tYmUKKzQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECitBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKK0lNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCitBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKK0RBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCitPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKK0hPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCitMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCitPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCitTVUNIIERBTUFHRS4KKworCitDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKK2ZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKworVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKK29mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCit0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorCisKK0FyYzQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIE9wZW5CU0QuCitDb3B5cmlnaHQgMTk5NiBEYXZpZCBNYXppZXJlcyA8ZG1AbGNzLm1pdC5lZHU+LgorCitNb2RpZmljYXRpb24gYW5kIHJlZGlzdHJpYnV0aW9uIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zIGlzCitwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCBkdWUgY3JlZGl0IGlzIGdpdmVuIHRvIHRoZSBhdXRob3IgYW5kIHRoZQorT3BlbkJTRCBwcm9qZWN0IGJ5IGxlYXZpbmcgdGhpcyBjb3B5cmlnaHQgbm90aWNlIGludGFjdC4KKworCitDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSMO2Z3Nrb2xhbgorKFJveWFsIEluc3RpdHV0ZSBvZiBUZWNobm9sb2d5LCBTdG9ja2hvbG0sIFN3ZWRlbikuIAorQWxsIHJpZ2h0cyByZXNlcnZlZC4gCisKK1JlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCAKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyAKK2FyZSBtZXQ6IAorCisxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAKKyAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisKKzIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSAKKyAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uIAorCiszLiBOZWl0aGVyIHRoZSBuYW1lIG9mIEtUSCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlCisgICB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0CisgICBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisKK1RISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgS1RIIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCitFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCitQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBLVEggT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKK1NVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCitXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovCisKKworPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorQ29weXJpZ2h0IChDKSAxOTkzIGJ5IFN1biBNaWNyb3N5c3RlbXMsIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKworRGV2ZWxvcGVkIGF0IFN1blBybywgYSBTdW4gTWljcm9zeXN0ZW1zLCBJbmMuIGJ1c2luZXNzLgorUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworc29mdHdhcmUgaXMgZnJlZWx5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhpcyBub3RpY2UKK2lzIHByZXNlcnZlZC4KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKworCitDb3B5cmlnaHQgKGMpIDE5OTcsIDIwMDUgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKworVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCitXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCitNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCitBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKworCitDb3B5cmlnaHQgKGMpIDE5ODksIDE5OTMKKyAgICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCitBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAordG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKK3RoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKzMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorCitUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCitGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKK09SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKK0xJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKK09VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKK1NVQ0ggREFNQUdFLgorCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBDYXJuZWdpZS1NZWxsb24gVW5pdmVyc2l0eS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0F1dGhvcjogQ2hyaXMgRy4gRGVtZXRyaW91CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKK3RoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitDQVJORUdJRSBNRUxMT04gQUxMT1dTIEZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTICJBUyBJUyIKK0NPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORAorRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorCitDYXJuZWdpZSBNZWxsb24gcmVxdWVzdHMgdXNlcnMgb2YgdGhpcyBzb2Z0d2FyZSB0byByZXR1cm4gdG8KKworIFNvZnR3YXJlIERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5DTVUuRURVCisgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorCithbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgorCisKK0NvcHlyaWdodCAoYykgMTk5NSwgMTk5NiBDYXJuZWdpZS1NZWxsb24gVW5pdmVyc2l0eS4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK0F1dGhvcjogQ2hyaXMgRy4gRGVtZXRyaW91CisKK1Blcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKK2l0cyBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKK3RoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorCitDQVJORUdJRSBNRUxMT04gQUxMT1dTIEZSRUUgVVNFIE9GIFRISVMgU09GVFdBUkUgSU4gSVRTICJBUyBJUyIKK0NPTkRJVElPTi4gIENBUk5FR0lFIE1FTExPTiBESVNDTEFJTVMgQU5ZIExJQUJJTElUWSBPRiBBTlkgS0lORAorRk9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLgorCitDYXJuZWdpZSBNZWxsb24gcmVxdWVzdHMgdXNlcnMgb2YgdGhpcyBzb2Z0d2FyZSB0byByZXR1cm4gdG8KKworIFNvZnR3YXJlIERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5DTVUuRURVCisgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorCithbnkgaW1wcm92ZW1lbnRzIG9yIGV4dGVuc2lvbnMgdGhhdCB0aGV5IG1ha2UgYW5kIGdyYW50IENhcm5lZ2llIHRoZQorcmlnaHRzIHRvIHJlZGlzdHJpYnV0ZSB0aGVzZSBjaGFuZ2VzLgorCisKK0NvcHlyaWdodCAoYykgMjAwMyBOZXR3b3JrcyBBc3NvY2lhdGVzIFRlY2hub2xvZ3ksIEluYy4KK0FsbCByaWdodHMgcmVzZXJ2ZWQuCisKK1BvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgZm9yIHRoZSBGcmVlQlNEIFByb2plY3QgYnkKK0phY3F1ZXMgQS4gVmlkcmluZSwgU2FmZXBvcnQgTmV0d29yayBTZXJ2aWNlcywgYW5kIE5ldHdvcmsKK0Fzc29jaWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUgU2VjdXJpdHkgUmVzZWFyY2ggRGl2aXNpb24gb2YgTmV0d29yaworQXNzb2NpYXRlcywgSW5jLiB1bmRlciBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNQorKCJDQk9TUyIpLCBhcyBwYXJ0IG9mIHRoZSBEQVJQQSBDSEFUUyByZXNlYXJjaCBwcm9ncmFtLgorCitSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKK21vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworYXJlIG1ldDoKKzEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKworVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCitJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKK0ZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCitEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCitIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiAKK1NVQ0ggREFNQUdFLgorCisKZGlmZiAtLWdpdCBhL2xpYmMvUkVBRE1FIGIvbGliYy9SRUFETUUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGUyOWYxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvUkVBRE1FCkBAIC0wLDAgKzEsNTMgQEAKK1dlbGNvbWUgdG8gQmlvbmljLCBBbmRyb2lkIHNtYWxsIGFuZCBjdXN0b20gQyBsaWJyYXJ5IGZvciB0aGUgQW5kcm9pZCBwbGF0Zm9ybQorCitCaW9uaWMgaXMgbWFpbmx5IGEgcG9ydCBvZiB0aGUgQlNEIEMgbGlicmFyeSB0byBvdXIgTGludXgga2VybmVsIHdpdGggdGhlCitmb2xsb3dpbmcgYWRkaXRpb25zL2NoYW5nZXM6CisKKy0gbm8gc3VwcG9ydCBmb3IgbG9jYWxlcworLSBubyBzdXBwb3J0IGZvciB3aWRlIGNoYXJzIChpLmUuIG11bHRpLWJ5dGUgY2hhcmFjdGVycykKKy0gaXRzIG93biBzbWFsbGlzaCBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkcyBiYXNlZCBvbiBMaW51eCBmdXRleGVzCistIHN1cHBvcnQgZm9yIHg4NiwgQVJNIGFuZCBBUk0gdGh1bWIgQ1BVIGluc3RydWN0aW9uIHNldHMgYW5kIGtlcm5lbCBpbnRlcmZhY2VzCisKK0Jpb25pYyBpcyByZWxlYXNlZCB1bmRlciB0aGUgc3RhbmRhcmQgMy1jbGF1c2UgQlNEIExpY2Vuc2UKKworQmlvbmljIGRvZXNuJ3Qgd2FudCB0byBpbXBsZW1lbnQgYWxsIGZlYXR1cmVzIG9mIGEgdHJhZGl0aW9uYWwgQyBsaWJyYXJ5LCB3ZSBvbmx5CithZGQgZmVhdHVyZXMgdG8gaXQgYXMgd2UgbmVlZCB0aGVtLCBhbmQgd2UgdHJ5IHRvIGtlZXAgdGhpbmdzIGFzIHNpbXBsZSBhbmQgc21hbGwKK2FzIHBvc3NpYmxlLiBPdXIgZ29hbCBpcyBub3QgdG8gc3VwcG9ydCBzY2FsaW5nIHRvIHRob3VzYW5kcyBvZiBjb25jdXJyZW50IHRocmVhZHMKK29uIG11bHRpLXByb2Nlc3NvcnMgbWFjaGluZXM7IHdlJ3JlIHJ1bm5pbmcgdGhpcyBvbiBjZWxsLXBob25lcywgZGFtbml0ICEhCisKK05vdGUgdGhhdCBCaW9uaWMgZG9lc24ndCBwcm92aWRlIGEgbGlidGhyZWFkX2RiIG9yIGEgbGlibSBpbXBsZW1lbnRhdGlvbi4KKworCitBZGRpbmcgbmV3IHN5c2NhbGxzOgorPT09PT09PT09PT09PT09PT09PT0KKworQmlvbmljIHByb3ZpZGVzIHRoZSBnZW5zeXNjYWxscy5weSBQeXRob24gc2NyaXB0IHRvIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGUgc3lzY2FsbAorc3R1YnMgZnJvbSB0aGUgbGlzdCBkZWZpbmVkIGluIHRoZSBmaWxlIFNZU0NBTExTLlRYVC4gWW91IGNhbiB0aHVzIGFkZCBhIG5ldyBzeXNjYWxsCitieSBkb2luZyB0aGUgZm9sbG93aW5nOgorCistIGVkaXQgU1lTQ0FMTFMuVFhUCistIGFkZCBhIG5ldyBsaW5lIGRlc2NyaWJpbmcgeW91ciBzeXNjYWxsLCBpdCBzaG91bGQgbG9vayBsaWtlOgorCisgICByZXR1cm5fdHlwZSAgc3lzY2FsbF9uYW1lKHBhcmFtZXRlcnMpICAgIHN5c2NhbGxfbnVtYmVyCisKKy0gaW4gdGhlIGV2ZW50IHdoZXJlIHlvdSB3YW50IHRvIGRpZmZlcmVudGlhdGUgdGhlIHN5c2NhbGwgZnVuY3Rpb24gZnJvbSBpdHMgZW50cnkgbmFtZSwKKyAgdXNlIHRoZSBhbHRlcm5hdGU6CisKKyAgIHJldHVybl90eXBlICBmdW5jbmFtZTpzeXNjYWxsX25hbWUocGFyYW1ldGVycykgIHN5c2NhbGxfbnVtYmVyCisKKy0gYWRkaXRpb25hbGx5LCBpZiB0aGUgc3lzY2FsbCBudW1iZXIgaXMgZGlmZmVyZW50IGJldHdlZW4gQVJNIGFuZCB4ODYsIHVzZToKKworICAgcmV0dXJuX3R5cGUgIGZ1bmNuYW1lWzpzeXNjYWxsX25hbWVdKHBhcmFtZXRlcnMpICAgYXJtX251bWJlcix4ODZfbnVtYmVyCisKKy0gYSBzeXNjYWxsIG51bWJlciBjYW4gYmUgLTEgdG8gaW5kaWNhdGUgdGhhdCB0aGUgc3lzY2FsbCBpcyBub3QgaW1wbGVtZW50ZWQgb24KKyAgYSBnaXZlbiBwbGF0Zm9ybSwgZm9yIGV4YW1wbGU6CisKKyAgIHZvaWQgICBfX3NldF90bHModm9pZCopICAgYXJtX251bWJlciwtMQorCisKK3RoZSBjb21tZW50cyBpbiBTWVNDQUxMUy5UWFQgY29udGFpbiBtb3JlIGluZm9ybWF0aW9uIGFib3V0IHRoZSBsaW5lIGZvcm1hdAorCitZb3UgY2FuIGFsc28gdXNlIHRoZSAnY2hlY2tzeXNjYWxscy5weScgc2NyaXB0IHRvIGNoZWNrIHRoYXQgYWxsIHRoZSBzeXNjYWxsCitudW1iZXJzIHlvdSBlbnRlcmVkIGFyZSBjb3JyZWN0LiBJdCBkb2VzIHNvIGJ5IGxvb2tpbmcgYXQgdGhlIHZhbHVlcyBkZWZpbmVkIGluCit5b3VyIExpbnV4IGtlcm5lbCBoZWFkZXJzLiBUaGUgc2NyaXB0IGluZGljYXRlcyB3aGVyZSB0aGUgdmFsdWVzIGFyZSBpbmNvcnJlY3QKK2FuZCB3aGF0IGlzIGV4cGVjdGVkIGluc3RlYWQuCmRpZmYgLS1naXQgYS9saWJjL1NZU0NBTExTLlRYVCBiL2xpYmMvU1lTQ0FMTFMuVFhUCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyM2E4ODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL1NZU0NBTExTLlRYVApAQCAtMCwwICsxLDIzNyBAQAorIyB0aGlzIGZpbGUgaXMgdXNlZCB0byBsaXN0IGFsbCB0aGUgc3lzY2FsbHMgdGhhdCB3aWxsIGJlIHN1cHBvcnRlZCBieQorIyB0aGUgQmlvbmljIEMgbGlicmFyeS4gSXQgaXMgdXNlZCB0byBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlIHRoZSBzeXNjYWxsCisjIHN0dWJzLCB0aGUgbGlzdCBvZiBzeXNjYWxsIGNvbnN0YW50cyAoX19OUl94eHh4KSBhbmQgdGhlIGNvbnRlbnQgb2YgPGxpbnV4L191bml0c2QuaD4KKyMKKyMgZWFjaCBub24gY29tbWVudCBsaW5lIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyMKKyMgcmV0dXJuX3R5cGUgICAgZnVuY19uYW1lWzpzeXNjYWxsX25hbWVdKFtwYXJhbWV0ZXJfbGlzdF0pICAoI3N5c2NhbGxfbnVtYmVyfHN0dWIpCisjCisjIG5vdGUgdGhhdDoKKyMgICAgICAtIHN5c2NhbGxfbmFtZSBjb3JyZXNwb25kIHRvIHRoZSBuYW1lIG9mIHRoZSBzeXNjYWxsLCB3aGljaCBtYXkgZGlmZmVyIGZyb20KKyMgICAgICAgIHRoZSBleHBvcnRlZCBmdW5jdGlvbiBuYW1lIChleGFtcGxlOiB0aGUgZXhpdCBzeXNjYWxsIGlzIGltcGxlbWVudGVkIGJ5IHRoZSBfZXhpdCgpCisjICAgICAgICBmdW5jdGlvbiwgd2hpY2ggaXMgbm90IHRoZSBzYW1lIGFzIHRoZSBzdGFuZGFyZCBDIGV4aXQoKSBmdW5jdGlvbiB3aGljaCBjYWxscyBpdCkKKyMKKyMgICAgICAtIGVhY2ggcGFyYW1ldGVyIHR5cGUgaXMgYXNzdW1lZCB0byBiZSBzdG9yZWQgb24gMzIgYml0cywgdGhlcmUgaXMgbm8gcGxhbiB0byBzdXBwb3J0CisjICAgICAgICA2NC1iaXQgYXJjaGl0ZWN0dXJlcyBhdCB0aGUgbW9tZW50CisjCisjICAgICAgLSBpdCB0aGVyZSBpcyAic3R1YiIgaW5zdGVhZCBvZiBhIHN5c2NhbGwgbnVtYmVyLCB0aGUgdG9vbCB3aWxsIG5vdCBnZW5lcmF0ZSBhbnkKKyMgICAgICAgIGFzc2VtYmxlciB0ZW1wbGF0ZSBmb3IgdGhlIHN5c2NhbGw7IGl0J3MgdXAgdG8gdGhlIGJpb25pYyBpbXBsZW1lbnRhdGlvbiB0byBwcm92aWRlCisjICAgICAgICBhIHJlbGV2YW50IEMgc3R1YgorIworIyB0aGUgZmlsZSBpcyBwcm9jZXNzZWQgYnkgYSBweXRob24gc2NyaXB0IG5hbWVkIGdlbnN5c2NhbGxzLnB5CisjCisKKyMgcHJvY2VzcyBtYW5hZ2VtZW50Cit2b2lkICAgIF9leGl0OmV4aXRfZ3JvdXAgKGludCkgICAgICAyNDgsMjUyCit2b2lkICAgIF9leGl0X3RocmVhZDpleGl0IChpbnQpCSAgICAxCitpbnQgICAgIGZvcmsgKHZvaWQpICAgICAgICAgICAyCitwaWRfdCAgIF93YWl0cGlkOndhaXRwaWQgKHBpZF90LCBpbnQqLCBpbnQsIHN0cnVjdCBydXNhZ2UqKSAgIC0xLDcKK2ludCAgICAgd2FpdGlkKGludCwgcGlkX3QsIHN0cnVjdCBzaWdpbmZvX3QqLCBpbnQsdm9pZCopICAgICAgICAgIDI4MCwyODQKK3BpZF90ICAgX19jbG9uZTpjbG9uZShpbnQgKCpmbikodm9pZCopLCB2b2lkICpjaGlsZF9zdGFjaywgaW50IGZsYWdzLCB2b2lkICphcmcpICAxMjAKK2ludCAgICAgZXhlY3ZlIChjb25zdCBjaGFyKiwgY2hhciogY29uc3QqLCBjaGFyKiBjb25zdCopICAxMQorCitpbnQgICAgIHNldHVpZDpzZXR1aWQzMiAodWlkX3QpICAgIDIxMwordWlkX3QgICBnZXR1aWQ6Z2V0dWlkMzIgKCkgICAgICAgICAxOTkKK2dpZF90ICAgZ2V0Z2lkOmdldGdpZDMyICgpICAgICAgICAgMjAwCit1aWRfdCAgIGdldGV1aWQ6Z2V0ZXVpZDMyICgpICAgICAgIDIwMQorZ2lkX3QgICBnZXRlZ2lkOmdldGVnaWQzMiAoKSAgICAgICAyMDIKK3VpZF90ICAgZ2V0cmVzdWlkOmdldHJlc3VpZDMyICgpICAgMjA5CitnaWRfdCAgIGdldHJlc2dpZDpnZXRyZXNnaWQzMiAoKSAgIDIxMQorcGlkX3QgICBnZXR0aWQoKSAgICAgICAgICAgICAgICAgICAyMjQKK2ludCAgICAgZ2V0Z3JvdXBzOmdldGdyb3VwczMyKGludCwgZ2lkX3QgKikgICAgMjA1CitwaWRfdCAgIGdldHBnaWQocGlkX3QpICAgICAgICAgICAgIDEzMgorcGlkX3QgICBnZXRwcGlkKCkJCSAgIDY0CitwaWRfdCAgIHNldHNpZCgpICAgICAgICAgICAgICAgICAgIDY2CitpbnQgICAgIHNldGdpZDpzZXRnaWQzMihnaWRfdCkgICAgIDIxNAoraW50ICAgICBzZXRldWlkOnNldGV1aWQzMih1aWRfdCkgICBzdHViCitpbnQgICAgIHNldHJldWlkOnNldHJldWlkMzIodWlkX3QsIHVpZF90KSAgIDIwMworaW50ICAgICBzZXRyZXN1aWQ6c2V0cmVzdWlkMzIodWlkX3QsIHVpZF90LCB1aWRfdCkgICAyMDgKK2ludCAgICAgc2V0cmVzZ2lkOnNldHJlc2dpZDMyKGdpZF90LCBnaWRfdCwgZ2lkX3QpICAgMjEwCit2b2lkKiAgIF9fYnJrOmJyayh2b2lkKikgICAgICAgICAgIDQ1CisjIHNlZSBjb21tZW50cyBpbiBhcmNoLWFybS9iaW9uaWMva2lsbC5TIHRvIHVuZGVyc3RhbmQgd2h5IHdlIGRvbid0IGdlbmVyYXRlIGFuIEFSTSBzdHViIGZvciBraWxsL3RraWxsCitpbnQgICAgIGtpbGwocGlkX3QsIGludCkgICAgICAgICAgIC0xLDM3CitpbnQgICAgIHRraWxsKHBpZF90IHRpZCwgaW50IHNpZykgIC0xLDIzOAoraW50ICAgICBfX3B0cmFjZTpwdHJhY2UoaW50IHJlcXVlc3QsIGludCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpICAyNgoraW50ICAgICBfX3NldF90aHJlYWRfYXJlYTpzZXRfdGhyZWFkX2FyZWEodm9pZCogIHVzZXJfZGVzYykgIC0xLDI0MworaW50ICAgICBfX2dldHByaW9yaXR5OmdldHByaW9yaXR5KGludCwgaW50KSAgOTYKK2ludCAgICAgc2V0cHJpb3JpdHkoaW50LCBpbnQsIGludCkgICA5NworaW50ICAgICBzZXRybGltaXQoaW50IHJlc291cmNlLCBjb25zdCBzdHJ1Y3QgcmxpbWl0ICpybHApICA3NQoraW50ICAgICBnZXRybGltaXQ6dWdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCkgIDE5MQoraW50ICAgICBnZXRydXNhZ2UoaW50IHdobywgc3RydWN0IHJ1c2FnZSogIHJfdXNhZ2UpICA3NworaW50ICAgICBzZXRncm91cHM6c2V0Z3JvdXBzMzIoaW50LCBjb25zdCBnaWRfdCAqKSAgIDIwNgorcGlkX3QgICBnZXRwZ3JwKHZvaWQpICBzdHViCitpbnQgICAgIHNldHBnaWQocGlkX3QsIHBpZF90KSAgNTcKK3BpZF90ICAgdmZvcmsodm9pZCkgIDE5MAoraW50ICAgICBzZXRyZWdpZDpzZXRyZWdpZDMyKGdpZF90LCBnaWRfdCkgIDIwNAoraW50ICAgICBjaHJvb3QoY29uc3QgY2hhciAqKSAgNjEKK2ludCAgICAgcHJjdGwoaW50IG9wdGlvbiwgdW5zaWduZWQgaW50IGFyZzIsIHVuc2lnbmVkIGludCBhcmczLCB1bnNpZ25lZCBpbnQgYXJnNCwgdW5zaWduZWQgaW50IGFyZzUpICAxNzIKK2ludCAgICAgY2FwZ2V0KGNhcF91c2VyX2hlYWRlcl90IGhlYWRlciwgY2FwX3VzZXJfZGF0YV90IGRhdGEpIDE4NAoraW50ICAgICBjYXBzZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3QgZGF0YSkgMTg1CitpbnQgICAgIGFjY3QoY29uc3QgY2hhciogIGZpbGVwYXRoKSAgNTEKKworIyBmaWxlIGRlc2NyaXB0b3JzCitzc2l6ZV90ICAgICByZWFkIChpbnQsIHZvaWQqLCBzaXplX3QpICAgICAgICAzCitzc2l6ZV90ICAgICB3cml0ZSAoaW50LCBjb25zdCB2b2lkKiwgc2l6ZV90KSAgICAgICA0CitpbnQgICAgICAgICBfX29wZW46b3BlbiAoY29uc3QgY2hhciosIGludCwgbW9kZV90KSAgNQoraW50ICAgICAgICAgX19vcGVuYXQ6b3BlbmF0IChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCkgIDMyMiwyOTUKK2ludCAgICAgICAgIGNsb3NlIChpbnQpICAgICAgICAgICAgICAgICAgICAgIDYKK2ludCAgICAgICAgIGNyZWF0KGNvbnN0IGNoYXIqLCBtb2RlX3QpICAgICAgIHN0dWIKK29mZl90ICAgICAgIGxzZWVrKGludCwgb2ZmX3QsIGludCkgICAgICAgICAgIDE5CitpbnQgICAgICAgICBfX2xsc2VlazpfbGxzZWVrIChpbnQsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIGxvZmZfdCosIGludCkgIDE0MAorcGlkX3QgICAgICAgZ2V0cGlkICgpICAgIDIwCit2b2lkICogICAgICBtbWFwKHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBsb25nKSAgc3R1Ygordm9pZCAqICAgICAgX19tbWFwMjptbWFwMih2b2lkKiwgc2l6ZV90LCBpbnQsIGludCwgaW50LCBsb25nKSAgIDE5MgoraW50ICAgICAgICAgbXVubWFwKHZvaWQgKiwgc2l6ZV90KSAgOTEKK3ZvaWQgKiAgICAgIG1yZW1hcCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nKSAgMTYzCitpbnQgICAgICAgICBtc3luYyhjb25zdCB2b2lkICosIHNpemVfdCwgaW50KSAgICAxNDQKK2ludCAgICAgICAgIG1wcm90ZWN0KGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpICAxMjUKK2ludCAgICAgICAgIG1hZHZpc2UoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCkgIDIyMCwyMTkKK2ludCAgICAgICAgIG1sb2NrKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pICAgIDE1MAoraW50ICAgICAgICAgbXVubG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKSAgIDE1MQoraW50ICAgICAgICAgbWluY29yZSh2b2lkKiAgc3RhcnQsIHNpemVfdCAgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiAgdmVjKSAgIDIxOSwyMTgKK2ludCAgICAgICAgIF9faW9jdGw6aW9jdGwoaW50LCBpbnQsIHZvaWQgKikgIDU0CitpbnQgICAgICAgICByZWFkdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpICAgMTQ1CitpbnQgICAgICAgICB3cml0ZXYoaW50LCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgaW50KSAgMTQ2CitpbnQgICAgICAgICBfX2ZjbnRsOmZjbnRsKGludCwgaW50LCB2b2lkKikgIDU1CitpbnQgICAgICAgICBmbG9jayhpbnQsIGludCkgICAxNDMKK2ludCAgICAgICAgIGZjaG1vZChpbnQsIG1vZGVfdCkgIDk0CitpbnQgICAgICAgICBkdXAoaW50KSAgNDEKK2ludCAgICAgICAgIHBpcGUoaW50ICopICA0MgoraW50ICAgICAgICAgZHVwMihpbnQsIGludCkgICA2MworaW50ICAgICAgICAgc2VsZWN0Ol9uZXdzZWxlY3QoaW50LCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKSAgMTQyCitpbnQgICAgICAgICBmdHJ1bmNhdGUoaW50LCBvZmZfdCkgIDkzCitpbnQgICAgICAgICBnZXRkZW50czpnZXRkZW50czY0KHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCAqLCB1bnNpZ25lZCBpbnQpICAgMjE3LDIyMAoraW50ICAgICAgICAgZnN5bmMoaW50KSAgMTE4CitpbnQgICAgICAgICBmY2hvd246ZmNob3duMzIoaW50LCB1aWRfdCwgZ2lkX3QpICAyMDcKK3ZvaWQgICAgICAgIHN5bmModm9pZCkgIDM2CitpbnQgICAgICAgICBfX2ZjbnRsNjQ6ZmNudGw2NChpbnQsIGludCwgdm9pZCAqKSAgMjIxCitpbnQgICAgICAgICBmc3RhdGZzOmZzdGF0ZnM2NChpbnQsIHNpemVfdCwgc3RydWN0IHN0YXRmcyAqKSAgMjY3LDI2OQorc3NpemVfdCAgICAgc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCAqb2Zmc2V0LCBzaXplX3QgY291bnQpICAxODcKK2ludCAgICAgICAgIGZzdGF0YXQ6ZnN0YXRhdDY0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWdzKSAgIDMyNywzMDAKK2ludCAgICAgICAgIG1rZGlyYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgbW9kZV90IG1vZGUpICAzMjMsMjk2CitpbnQgICAgICAgICBmY2hvd25hdChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHVpZF90IG93bmVyLCBnaWRfdCBncm91cCwgaW50IGZsYWdzKSAgMzI1LDI5OAoraW50ICAgICAgICAgZmNobW9kYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCBtb2RlX3QgbW9kZSwgaW50IGZsYWdzKSAgMzMzLDMwNgoraW50ICAgICAgICAgcmVuYW1lYXQoaW50IG9sZGRpcmZkLCBjb25zdCBjaGFyICpvbGRwYXRoLCBpbnQgbmV3ZGlyZmQsIGNvbnN0IGNoYXIgKm5ld3BhdGgpICAzMjksMzAyCisKKyMgZmlsZSBzeXN0ZW0KK2ludCAgICAgbGluayAoY29uc3QgY2hhciosIGNvbnN0IGNoYXIqKSAgOQoraW50ICAgICB1bmxpbmsgKGNvbnN0IGNoYXIqKSAgICAgICAgICAgICAxMAoraW50ICAgICB1bmxpbmthdCAoaW50LCBjb25zdCBjaGFyICosIGludCkgICAzMjgsMzAxCitpbnQgICAgIGNoZGlyIChjb25zdCBjaGFyKikgICAgICAgICAgICAgIDEyCitpbnQgICAgIG1rbm9kIChjb25zdCBjaGFyKiwgbW9kZV90LCBkZXZfdCkgIDE0CitpbnQgICAgIGNobW9kIChjb25zdCBjaGFyKixtb2RlX3QpICAgICAgICAgIDE1CitpbnQgICAgIGNob3duOmNob3duMzIoY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpICAyMTIKK2ludCAgICAgbGNob3duOmxjaG93bjMyIChjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90KSAgMTk4CitpbnQgICAgIG1vdW50IChjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBsb25nLCBjb25zdCB2b2lkKikgIDIxCitpbnQgICAgIHVtb3VudChjb25zdCBjaGFyKikgIHN0dWIKK2ludCAgICAgdW1vdW50MiAoY29uc3QgY2hhciosIGludCkgIDUyCitpbnQgICAgIGZzdGF0OmZzdGF0NjQoaW50LCBzdHJ1Y3Qgc3RhdCopICAgIDE5NworaW50ICAgICBzdGF0OnN0YXQ2NChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopICAxOTUKK2ludCAgICAgbHN0YXQ6bHN0YXQ2NChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopICAxOTYKK2ludCAgICAgbWtkaXIoY29uc3QgY2hhciAqLCBtb2RlX3QpIDM5CitpbnQgICAgIHJlYWRsaW5rKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpICA4NQoraW50ICAgICBybWRpcihjb25zdCBjaGFyICopICA0MAoraW50ICAgICByZW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopICAzOAoraW50ICAgICBfX2dldGN3ZDpnZXRjd2QoY2hhciAqIGJ1Ziwgc2l6ZV90IHNpemUpICAxODMKK2ludCAgICAgYWNjZXNzKGNvbnN0IGNoYXIgKiwgaW50KSAgMzMKK2ludCAgICAgc3ltbGluayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikgIDgzCitpbnQgICAgIGZjaGRpcihpbnQpICAgIDEzMworaW50ICAgICB0cnVuY2F0ZShjb25zdCBjaGFyKiwgb2ZmX3QpICAgIDkyCitpbnQgICAgIF9fc3RhdGZzNjQ6c3RhdGZzNjQoY29uc3QgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMgKikgIDI2NiwyNjgKKyMgdGltZQoraW50ICAgICAgICAgICBwYXVzZSAoKSAgICAgICAgICAgICAgICAgICAgICAgMjkKK2ludCAgICAgICAgICAgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsKiwgc3RydWN0IHRpbWV6b25lKikgICAgICAgNzgKK2ludCAgICAgICAgICAgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsKiwgY29uc3Qgc3RydWN0IHRpbWV6b25lKikgICA3OQorY2xvY2tfdCAgICAgICB0aW1lcyhzdHJ1Y3QgdG1zICopICAgICAgIDQzCitpbnQgICAgICAgICAgIG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopICAgMTYyCitpbnQgICAgICAgICAgIGNsb2NrX2dldHRpbWUoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICp0cCkgICAgMjYzLDI2NQoraW50ICAgICAgICAgICBjbG9ja19zZXR0aW1lKGNsb2NraWRfdCBjbGtfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdHApICAyNjIsMjY0CitpbnQgICAgICAgICAgIGNsb2NrX2dldHJlcyhjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnJlcykgICAyNjQsMjY2CitpbnQgICAgICAgICAgIGNsb2NrX25hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKnJlcSwgc3RydWN0IHRpbWVzcGVjICpyZW0pICAyNjUsMjY3CitpbnQgICAgICAgICAgIHNldGl0aW1lcihpbnQsIGNvbnN0IHN0cnVjdCBpdGltZXJ2YWwgKiwgc3RydWN0IGl0aW1lcnZhbCAqKSAgMTA0CitpbnQgICAgICAgICAgIHRpbWVyX2NyZWF0ZShjbG9ja2lkX3QgY2xvY2tpZCwgc3RydWN0IHNpZ2V2ZW50ICpldnAsIHRpbWVyX3QgKnRpbWVyaWQpICAgMjU3LDI1OQoraW50ICAgICAgICAgICB0aW1lcl9zZXR0aW1lKHRpbWVyX3QsIGludCwgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMqLCBzdHJ1Y3QgaXRpbWVyc3BlYyopIDI1OCwyNjAKK2ludCAgICAgICAgICAgdGltZXJfZ2V0dGltZSh0aW1lcl90LCBzdHJ1Y3QgaXRpbWVyc3BlYyopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyNTksMjYxCitpbnQgICAgICAgICAgIHRpbWVyX2dldG92ZXJydW4odGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMjYwLDI2MgoraW50ICAgICAgICAgICB0aW1lcl9kZWxldGUodGltZXJfdCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDI2MSwyNjMKK2ludCAgICAgICAgICAgdXRpbWVzKGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCB0dnBbMl0pICAgICAgICAgICAgICAgICAgICAgICAgICAyNjksIDI3MQorCisjIHNpZ25hbHMKK2ludCAgICAgc2lnYWN0aW9uKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBzdHJ1Y3Qgc2lnYWN0aW9uICopICA2NworaW50ICAgICBzaWdwcm9jbWFzayhpbnQsIGNvbnN0IHNpZ3NldF90ICosIHNpZ3NldF90ICopICAxMjYKK2ludCAgICAgX19zaWdzdXNwZW5kOnNpZ3N1c3BlbmQoaW50IHVudXNlZDEsIGludCB1bnVzZWQyLCB1bnNpZ25lZCBtYXNrKSAgNzIKK2ludCAgICAgX19ydF9zaWdhY3Rpb246cnRfc2lnYWN0aW9uIChpbnQgc2lnLCBjb25zdCBzdHJ1Y3Qgc2lnYWN0aW9uICphY3QsIHN0cnVjdCBzaWdhY3Rpb24gKm9hY3QsIHNpemVfdCBzaWdzZXRzaXplKSAgMTc0CitpbnQgICAgIF9fcnRfc2lncHJvY21hc2s6cnRfc2lncHJvY21hc2sgKGludCAgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb3NldCwgc2l6ZV90IHNpZ3NldHNpemUpICAxNzUKK2ludCAgICAgX19ydF9zaWd0aW1lZHdhaXQ6cnRfc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICpzZXQsIHN0cnVjdCBzaWdpbmZvX3QgICppbmZvLCBzdHJ1Y3QgdGltZXNwZWNfdCAgKnRpbWVvdXQsIHNpemVfdCAgc2lnc2V0X3NpemUpICAxNzcKK2ludCAgICAgc2lncGVuZGluZyhzaWdzZXRfdCAqKSAgNzMKKworIyBzb2NrZXRzCitpbnQgICAgICAgICAgIHNvY2tldChpbnQsIGludCwgaW50KSAgICAgICAgICAgICAgMjgxLC0xCitpbnQgICAgICAgICAgIHNvY2tldHBhaXIoaW50LCBpbnQsIGludCwgaW50KikgICAgMjg4LC0xCitpbnQgICAgICAgICAgIGJpbmQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KSAgMjgyLC0xCitpbnQgICAgICAgICAgIGNvbm5lY3QoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KSAgIDI4MywtMQoraW50ICAgICAgICAgICBsaXN0ZW4oaW50LCBpbnQpICAgICAgICAgICAgICAgICAgIDI4NCwtMQoraW50ICAgICAgICAgICBhY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAyODUsLTEKK2ludCAgICAgICAgICAgZ2V0c29ja25hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAyODYsLTEKK2ludCAgICAgICAgICAgZ2V0cGVlcm5hbWUoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopICAyODcsLTEKK2ludCAgICAgICAgICAgc2VuZHRvKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCkgIDI5MCwtMQoraW50ICAgICAgICAgICByZWN2ZnJvbShpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKikgIDI5MiwtMQoraW50ICAgICAgICAgICBzaHV0ZG93bihpbnQsIGludCkgIDI5MywtMQoraW50ICAgICAgICAgICBzZXRzb2Nrb3B0KGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KSAgMjk0LC0xCitpbnQgICAgICAgICAgIGdldHNvY2tvcHQoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKikgICAgMjk1LC0xCitpbnQgICAgICAgICAgIHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCkgIDI5NiwtMQoraW50ICAgICAgICAgICByZWN2bXNnKGludCwgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpICAgMjk3LC0xCisKKyMgc2NoZWR1bGVyICYgcmVhbC10aW1lCitpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90IHBpZCwgaW50IHBvbGljeSwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSkgIDE1NgoraW50IHNjaGVkX2dldHNjaGVkdWxlcihwaWRfdCBwaWQpICAxNTcKK2ludCBzY2hlZF95aWVsZCh2b2lkKSAgMTU4CitpbnQgc2NoZWRfc2V0cGFyYW0ocGlkX3QgcGlkLCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKSAgMTU0CitpbnQgc2NoZWRfZ2V0cGFyYW0ocGlkX3QgcGlkLCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKnBhcmFtKSAgMTU1CitpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21heChpbnQgcG9saWN5KSAgMTU5CitpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbihpbnQgcG9saWN5KSAgMTYwCitpbnQgc2NoZWRfcnJfZ2V0X2ludGVydmFsKHBpZF90IHBpZCwgc3RydWN0IHRpbWVzcGVjICppbnRlcnZhbCkgIDE2MQorCisjIHN5c3RlbS1WIGludGVyLXByb2Nlc3MgY29tbXVuaWNhdGlvbgorIyBUT0RPOiBpbXBsZW1lbnQgeDg2IHN0dWJzIGZvciB0aGVzZSBmdW5jdGlvbnMgd2hlbiBuZWVkZWQgKHdoZW4gPykKKyMKK2ludCAgIHNlbWN0bChpbnQgIHNlbWlkLCBpbnQgIHNlbW51bSwgaW50ICBjbWQsIC4uLikgICAgICAgICAgMzAwLC0xCitpbnQgICBzZW1nZXQoa2V5X3QgIGtleSwgaW50ICBuc2VtcywgaW50ICBzZW1mbGcpICAgICAgICAgICAgIDI5OSwtMQoraW50ICAgc2Vtb3AoaW50ICBzZW1pZCwgc3RydWN0IHNlbWJ1ZiogIHNvcHMsIHNpemVfdCAgbnNvcHMpICAyOTgsLTEKK3ZvaWQqIHNobWF0KGludCAgc2htaWQsIGNvbnN0IHZvaWQqICBzaG1hZGRyLCBpbnQgIHNobWZsZykgIDMwNSwtMQoraW50ICAgc2htY3RsKGludCAgc2htaWQsIGludCAgY21kLCBzdHJ1Y3Qgc2htaWRfZHMqICBidWYpICAgMzA4LC0xCitpbnQgICBzaG1kdChjb25zdCB2b2lkKiAgc2htYWRkcikgICAgICAgICAgICAgICAgICAgICAgICAgICAzMDYsLTEKK2ludCAgIHNobWdldChrZXlfdCAga2V5LCBzaXplX3QgIHNpemUsIGludCAgc2htZmxnKSAgICAgICAgIDMwNywtMQoraW50ICAgbXNnY3RsKGludCAgbXNxaWQsIGludCAgY21kLCBzdHJ1Y3QgbXNxaWRfZHMgKmJ1ZikgICAgMzA0LC0xCitpbnQgICBtc2dnZXQoa2V5X3QgIGtleSwgaW50ICBtc2dmbGcpICAgICAgICAgICAgICAgICAgICAgICAzMDMsLTEKK2ludCAgIG1zZ3JjdihpbnQgIG1zcWlkLCB2b2lkKiAgbXNncCwgc2l6ZV90ICBtc2dzeiwgbG9uZyBpbnQgIG1zZ3R5cCwgaW50ICBtc2dmbGcpICAzMDIsLTEKK2ludCAgIG1zZ3NuZChpbnQgIG1zcWlkLCBjb25zdCB2b2lkKiBtc2dwLCBzaXplX3QgIG1zZ3N6LCBpbnQgIG1zZ2ZsZykgICAgICAgICAgICAgICAzMDEsLTEKKworCisjIG90aGVyCitpbnQgICAgIHVuYW1lKHN0cnVjdCB1dHNuYW1lICopICAxMjIKK3BpZF90ICAgX193YWl0NDp3YWl0NChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKSAgIDExNAorbW9kZV90ICB1bWFzayhtb2RlX3QpICA2MAoraW50ICAgICAgX19yZWJvb3Q6cmVib290KGludCwgaW50LCBpbnQsIHZvaWQgKikgIDg4CitpbnQgICAgIF9fc3lzbG9nOnN5c2xvZyhpbnQsIGNoYXIgKiwgaW50KSAgMTAzCitpbnQgICAgIGluaXRfbW9kdWxlKHZvaWQgKiwgdW5zaWduZWQgbG9uZywgY29uc3QgY2hhciAqKSAgMTI4CitpbnQgICAgIGRlbGV0ZV9tb2R1bGUoY29uc3QgY2hhciosIHVuc2lnbmVkIGludCkgICAxMjkKK2ludCAgICAga2xvZ2N0bDpzeXNsb2coaW50LCBjaGFyICosIGludCkgICAxMDMKKworIyBmdXRleAoraW50CWZ1dGV4KHZvaWQgKiwgaW50LCBpbnQsIHZvaWQgKiwgdm9pZCAqLCBpbnQpIDI0MAorCisjIGVwb2xsCitpbnQgICAgIGVwb2xsX2NyZWF0ZShpbnQgc2l6ZSkgICAgIDI1MCwyNTQKK2ludCAgICAgZXBvbGxfY3RsKGludCBlcGZkLCBpbnQgb3AsIGludCBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudCkgICAgMjUxLDI1NQoraW50ICAgICBlcG9sbF93YWl0KGludCBlcGZkLCBzdHJ1Y3QgZXBvbGxfZXZlbnQgKmV2ZW50cywgaW50IG1heCwgaW50IHRpbWVvdXQpICAgMjUyLDI1NgorCitpbnQgICAgIGlub3RpZnlfaW5pdCh2b2lkKSAgICAgIDMxNiwyOTEKK2ludCAgICAgaW5vdGlmeV9hZGRfd2F0Y2goaW50LCBjb25zdCBjaGFyICosIHVuc2lnbmVkIGludCkgIDMxNywyOTIKK2ludCAgICAgaW5vdGlmeV9ybV93YXRjaChpbnQsIHVuc2lnbmVkIGludCkgIDMxOCwyOTMKKworaW50ICAgICBwb2xsKHN0cnVjdCBwb2xsZmQgKiwgdW5zaWduZWQgaW50LCBsb25nKSAgMTY4CisKKyMgQVJNLXNwZWNpZmljIEFSTV9OUl9CQVNFID09IDB4MGYwMDAwID09IDk4MzA0MAoraW50ICAgICBfX3NldF90bHM6QVJNX3NldF90bHModm9pZCopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOTgzMDQ1LC0xCitpbnQgICAgIGNhY2hlZmx1c2g6QVJNX2NhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpICA5ODMwNDIsLTEKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fZ2V0X3BjLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9wYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxMzc3YzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9wYy5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy5nbG9iYWwgX19nZXRfcGMKKworX19nZXRfcGM6CisJbW92IHIwLCBwYworCWJ4IGxyCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19fZ2V0X3NwLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhY2FmM2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fX2dldF9zcC5TCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy5nbG9iYWwgX19nZXRfc3AKKworX19nZXRfc3A6CisJbW92IHIwLCBzcAorCWJ4IGxyCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL19leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OWY2YzkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bi5TCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKKy50ZXh0CisudHlwZSBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duLCAjZnVuY3Rpb24KKy5nbG9ibCBfZXhpdF93aXRoX3N0YWNrX3RlYXJkb3duCisuYWxpZ24gNAorCitAIHZvaWQgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bih2b2lkICogc3RhY2tCYXNlLCBpbnQgc3RhY2tTaXplLCBpbnQgcmV0Q29kZSkKKworX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bjoKKworI2lmIF9fQVJNX0VBQklfXworICAgIG1vdiAgICAgbHIsIHIyCisgICAgbGRyICAgICByNywgPV9fTlJfbXVubWFwCisgICAgc3dpICAgICAjMCAgICAgICAgICAgICAgQCB0aGUgc3RhY2sgaXMgZGVzdHJveWVkIGJ5IHRoaXMgY2FsbAorICAgIG1vdiAgICAgcjAsIGxyCisgICAgbGRyICAgICByNywgPV9fTlJfZXhpdAorICAgIHN3aSAgICAgIzAKKyNlbHNlCisgICAgbW92ICAgICBsciwgcjIKKyAgICBzd2kgICAgICMgX19OUl9tdW5tYXAgICBAIHRoZSBzdGFjayBpcyBkZXN0cm95ZWQgYnkgdGhpcyBjYWxsCisgICAgbW92ICAgICByMCwgbHIKKyAgICBzd2kgICAgICMgX19OUl9leGl0CisjZW5kaWYKKworICAgIEAgZXhpdCgpIHNob3VsZCBuZXZlciByZXR1cm4sIGNhdXNlIGEgY3Jhc2ggaWYgaXQgZG9lcworICAgIG1vdgkJcjAsICMwCisgICAgbGRyCQlyMCwgW3IwXQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvX3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhMjdhZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9fc2V0am1wLlMKQEAgLTAsMCArMSwxMDYgQEAKKy8qCSRPcGVuQlNEOiBfc2V0am1wLlMsdiAxLjIgMjAwNC8wMi8wMSAwNTo0MDo1MiBkcmFobiBFeHAgJAkqLworLyoJJE5ldEJTRDogX3NldGptcC5TLHYgMS41IDIwMDMvMDQvMDUgMjM6MDg6NTEgYmpoMjEgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBNYXJrIEJyaW5pY29tYmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFyayBCcmluaWNvbWJlCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgorCisvKgorICogQyBsaWJyYXJ5IC0tIF9zZXRqbXAsIF9sb25nam1wCisgKgorICoJX2xvbmdqbXAoYSx2KQorICogd2lsbCBnZW5lcmF0ZSBhICJyZXR1cm4odikiIGZyb20gdGhlIGxhc3QgY2FsbCB0bworICoJX3NldGptcChhKQorICogYnkgcmVzdG9yaW5nIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4KKyAqIFRoZSBwcmV2aW91cyBzaWduYWwgc3RhdGUgaXMgTk9UIHJlc3RvcmVkLgorICoKKyAqIE5vdGU6IHIwIGlzIHRoZSByZXR1cm4gdmFsdWUKKyAqICAgICAgIHIxLXIzIGFyZSBzY3JhdGNoIHJlZ2lzdGVycyBpbiBmdW5jdGlvbnMKKyAqLworCitFTlRSWShfc2V0am1wKQorCWxkcglyMSwgLkxfc2V0am1wX21hZ2ljCisJc3RyCXIxLCBbcjBdLCAjNAorI2lmZGVmIFNPRlRGTE9BVAorCWFkZAlyMCwgcjAsICM1MgorI2Vsc2UKKwkvKiBTdG9yZSBmcCByZWdpc3RlcnMgKi8KKwlzZm0JZjQsIDQsIFtyMF0sICM0OAorCS8qIFN0b3JlIGZwc3IgKi8KKwlyZnMJcjEKKwlzdHIJcjEsIFtyMF0sICMweDAwMDQKKyNlbmRpZgkvKiBTT0ZURkxPQVQgKi8KKwkvKiBTdG9yZSBpbnRlZ2VyIHJlZ2lzdGVycyAqLworICAgICAgICBzdG1pYQlyMCwge3I0LXIxNH0KKworICAgICAgICBtb3YJcjAsICMweDAwMDAwMDAwCisgICAgICAgIGJ4ICAgICAgbHIKKworLkxfc2V0am1wX21hZ2ljOgorCS53b3JkCV9KQl9NQUdJQ19fU0VUSk1QCisKK0VOVFJZKF9sb25nam1wKQorCWxkcglyMiwgLkxfc2V0am1wX21hZ2ljCisJbGRyCXIzLCBbcjBdLCAjNAorCXRlcQlyMiwgcjMKKwlibmUJYm90Y2gKKworI2lmZGVmIFNPRlRGTE9BVAorCWFkZAlyMCwgcjAsICM1MgorI2Vsc2UKKwkvKiBSZXN0b3JlIGZwIHJlZ2lzdGVycyAqLworCWxmbQlmNCwgNCwgW3IwXSwgIzQ4CisJLyogUmVzdG9yZSBmcHNyICovCisJbGRyCXI0LCBbcjBdLCAjMHgwMDA0CisJd2ZzCXI0CisjZW5kaWYJLyogU09GVEZMT0FUICovCisgICAgICAgCS8qIFJlc3RvcmUgaW50ZWdlciByZWdpc3RlcnMgKi8KKyAgICAgICAgbGRtaWEJcjAsIHtyNC1yMTR9CisKKwkvKiBWYWxpZGF0ZSBzcCBhbmQgcjE0ICovCisJdGVxCXNwLCAjMAorCXRlcW5lCXIxNCwgIzAKKwliZXEJYm90Y2gKKworCS8qIFNldCByZXR1cm4gdmFsdWUgKi8KKwltb3YJcjAsIHIxCisJdGVxCXIwLCAjMHgwMDAwMDAwMAorCW1vdmVxCXIwLCAjMHgwMDAwMDAwMQorCWJ4ICAgICAgbHIKKworCS8qIHZhbGlkYXRpb24gZmFpbGVkLCBkaWUgZGllIGRpZS4gKi8KK2JvdGNoOgorCWJsCVBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcGVycm9yKSwgUExUKQorCWJsCVBJQ19TWU0oX0NfTEFCRUwoYWJvcnQpLCBQTFQpCisJYgkuIC0gOAkJLyogQ2Fubm90IGdldCBoZXJlICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9hdG9taWNzX2FybS5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMmRhMDlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvYXRvbWljc19hcm0uUwpAQCAtMCwwICsxLDE3OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisuZ2xvYmFsIF9fYXRvbWljX2NtcHhjaGcKKy5nbG9iYWwgX19hdG9taWNfc3dhcAorLmdsb2JhbCBfX2F0b21pY19kZWMKKy5nbG9iYWwgX19hdG9taWNfaW5jCisuZ2xvYmFsIF9fZnV0ZXhfd2FpdAorLmdsb2JhbCBfX2Z1dGV4X3dha2UKKworI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKKyNpZiAxCisgICAuZXF1ICAgICBrZXJuZWxfY21weGNoZywgMHhGRkZGMEZDMAorICAgLmVxdSAgICAga2VybmVsX2F0b21pY19iYXNlLCAweEZGRkYwRkZGCitfX2F0b21pY19kZWM6CisgICAgc3RtZGIgICBzcCEsIHtyNCwgbHJ9CisgICAgbW92ICAgICByMiwgcjAKKzE6IEAgYXRvbWljX2RlYworICAgIGxkciAgICAgcjAsIFtyMl0KKyAgICBtb3YgICAgIHIzLCAja2VybmVsX2F0b21pY19iYXNlCisgICAgYWRkICAgICBsciwgcGMsICM0CisgICAgc3ViICAgICByMSwgcjAsICMxCisgICAgYWRkICAgICBwYywgcjMsICMoa2VybmVsX2NtcHhjaGcgLSBrZXJuZWxfYXRvbWljX2Jhc2UpCisgICAgYmNjICAgICAxYgorICAgIGFkZCAgICAgcjAsIHIxLCAjMQorICAgIGxkbWlhICAgc3AhLCB7cjQsIGxyfQorICAgIGJ4ICAgICAgbHIKKworX19hdG9taWNfaW5jOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjIsIHIwCisxOiBAIGF0b21pY19pbmMKKyAgICBsZHIgICAgIHIwLCBbcjJdCisgICAgbW92ICAgICByMywgI2tlcm5lbF9hdG9taWNfYmFzZQorICAgIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIGFkZCAgICAgcjEsIHIwLCAjMQorICAgIGFkZCAgICAgcGMsIHIzLCAjKGtlcm5lbF9jbXB4Y2hnIC0ga2VybmVsX2F0b21pY19iYXNlKQorICAgIGJjYyAgICAgMWIKKyAgICBzdWIgICAgIHIwLCByMSwgIzEKKyAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KKyAgICBieCAgICAgIGxyCisKKy8qIHIwKG9sZCkgcjEobmV3KSByMihhZGRyKSAtPiByMCh6ZXJvX2lmX3N1Y2NlZWRlZCkgKi8KK19fYXRvbWljX2NtcHhjaGc6CisgICAgc3RtZGIgICBzcCEsIHtyNCwgbHJ9CisgICAgbW92ICAgICByNCwgcjAgICAgICAgICAgLyogcjQgPSBzYXZlIG9sZHZhbHVlICovCisxOiBAIGF0b21pY19jbXB4Y2hnCisgICAgbW92ICAgICByMywgI2tlcm5lbF9hdG9taWNfYmFzZQorICAgIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIG1vdiAgICAgcjAsIHI0ICAgICAgICAgIC8qIHIwID0gb2xkdmFsdWUgKi8KKyAgICBhZGQgICAgIHBjLCByMywgIyhrZXJuZWxfY21weGNoZyAtIGtlcm5lbF9hdG9taWNfYmFzZSkKKyAgICBiY3MgICAgIDJmICAgICAgICAgICAgICAvKiBzd2FwIHdhcyBtYWRlLiB3ZSdyZSBnb29kLCByZXR1cm4uICovCisgICAgbGRyICAgICByMywgW3IyXSAgICAgICAgLyogc3dhcCBub3QgbWFkZSwgc2VlIGlmIGl0J3MgYmVjYXVzZSAqcHRyIT1vbGR2YWx1ZSAqLworICAgIGNtcCAgICAgcjMsIHI0CisgICAgYmVxICAgICAxYgorMjogQCBhdG9taWNfY21weGNoZworICAgIGxkbWlhICAgc3AhLCB7cjQsIGxyfQorICAgIGJ4ICAgICAgbHIKKyNlbHNlCisjZGVmaW5lIEtVU0VSX0NNUFhDSEcgMHhmZmZmZmZjMAorCisvKiByMChvbGQpIHIxKG5ldykgcjIoYWRkcikgLT4gcjAoemVyb19pZl9zdWNjZWVkZWQpICovCitfX2F0b21pY19jbXB4Y2hnOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjQsIHIwICAgICAgICAgIC8qIHI0ID0gc2F2ZSBvbGR2YWx1ZSAqLworMTogIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIG1vdiAgICAgcjAsIHI0ICAgICAgICAgIC8qIHIwID0gb2xkdmFsdWUgKi8KKyAgICBtb3YgICAgIHBjLCAjS1VTRVJfQ01QWENIRworICAgIGJjcyAgICAgMmYgICAgICAgICAgICAgIC8qIHN3YXAgd2FzIG1hZGUuIHdlJ3JlIGdvb2QsIHJldHVybi4gKi8KKyAgICBsZHIgICAgIHIzLCBbcjJdICAgICAgICAvKiBzd2FwIG5vdCBtYWRlLCBzZWUgaWYgaXQncyBiZWNhdXNlICpwdHIhPW9sZHZhbHVlICovCisgICAgY21wICAgICByMywgcjQKKyAgICBiZXEgICAgIDFiCisyOiAgbGRtaWEgICBzcCEsIHtyNCwgbHJ9CisgICAgYnggICAgICBscgorCisvKiByMChhZGRyKSAtPiByMChvbGQpICovCitfX2F0b21pY19kZWM6CisgICAgc3RtZGIgICBzcCEsIHtyNCwgbHJ9CisgICAgbW92ICAgICByMiwgcjAgICAgICAgICAgLyogYWRkcmVzcyAqLworMTogIGxkciAgICAgcjAsIFtyMl0gICAgICAgIC8qIG9sZHZhbHVlICovCisgICAgYWRkICAgICBsciwgcGMsICM0CisgICAgc3ViICAgICByMSwgcjAsICMxICAgICAgLyogbmV3dmFsdWUgPSBvbGR2YWx1ZSAtIDEgKi8KKyAgICBtb3YgICAgIHBjLCAjS1VTRVJfQ01QWENIRworICAgIGJjYyAgICAgMWIgICAgICAgICAgICAgIC8qIG5vIHN3YXAsIHRyeSBhZ2FpbiB1bnRpbCB3ZSBnZXQgaXQgcmlnaHQgKi8KKyAgICBtb3YgICAgIHIwLCBpcCAgICAgICAgICAvKiBzd2FwcGVkLCByZXR1cm4gdGhlIG9sZCB2YWx1ZSAqLworICAgIGxkbWlhICAgc3AhLCB7cjQsIGxyfQorICAgIGJ4ICAgICAgbHIKKworLyogcjAoYWRkcikgLT4gcjAob2xkKSAqLworX19hdG9taWNfaW5jOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIGxyfQorICAgIG1vdiAgICAgcjIsIHIwICAgICAgICAgIC8qIGFkZHJlc3MgKi8KKzE6ICBsZHIgICAgIHIwLCBbcjJdICAgICAgICAvKiBvbGR2YWx1ZSAqLworICAgIGFkZCAgICAgbHIsIHBjLCAjNAorICAgIGFkZCAgICAgcjEsIHIwLCAjMSAgICAgIC8qIG5ld3ZhbHVlID0gb2xkdmFsdWUgKyAxICovCisgICAgbW92ICAgICBwYywgI0tVU0VSX0NNUFhDSEcKKyAgICBiY2MgICAgIDFiICAgICAgICAgICAgICAvKiBubyBzd2FwLCB0cnkgYWdhaW4gdW50aWwgd2UgZ2V0IGl0IHJpZ2h0ICovCisgICAgbW92ICAgICByMCwgaXAgICAgICAgICAgLyogc3dhcHBlZCwgcmV0dXJuIHRoZSBvbGQgdmFsdWUgKi8KKyAgICBsZG1pYSAgIHNwISwge3I0LCBscn0KKyAgICBieCAgICAgIGxyCisjZW5kaWYKKworLyogcjAobmV3KSByMShhZGRyKSAtPiByMChvbGQpICovCitfX2F0b21pY19zd2FwOgorICAgIHN3cCAgICAgcjAsIHIwLCBbcjFdCisgICAgYnggICAgICBscgorCisvKiBfX2Z1dGV4X3dhaXQoKmZ0eCwgdmFsLCAqdGltZXNwZWMpICovCisvKiBfX2Z1dGV4X3N5c2NhbGwoKmZ0eCwgb3AsIHZhbCwgKnRpbWVzcGVjLCAqYWRkcjIsIHZhbDMpICovCisKKyNpZiBfX0FSTV9FQUJJX18KKworX19mdXRleF93YWl0OgorICAgIC5mbnN0YXJ0CisgICAgc3RtZGIgICBzcCEsIHtyNCwgcjd9CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIG1vdiAgICAgcjMsIHIyCisgICAgbW92ICAgICByMiwgcjEKKyAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FJVAorICAgIGxkciAgICAgcjcsID1fX05SX2Z1dGV4CisgICAgc3dpICAgICAjMAorICAgIGxkbWlhICAgc3AhLCB7cjQsIHI3fQorICAgIGJ4ICAgICAgbHIKKyAgICAuZm5lbmQKKworX19mdXRleF93YWtlOgorICAgIHN0bWRiICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdiAgICAgcjIsIHIxCisgICAgbW92ICAgICByMSwgI0ZVVEVYX1dBS0UKKyAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1pYSAgIHNwISwge3I0LCByN30KKyAgICBieCAgICAgIGxyCisKKyNlbHNlCisKK19fZnV0ZXhfd2FpdDoKKyAgICBtb3YgICAgIHIzLCByMgorICAgIG1vdiAgICAgcjIsIHIxCisgICAgbW92ICAgICByMSwgI0ZVVEVYX1dBSVQKKyAgICBzd2kgICAgICNfX05SX2Z1dGV4CisgICAgYnggICAgICBscgorCitfX2Z1dGV4X3dha2U6CisgICAgbW92ICAgICByMiwgcjEKKyAgICBtb3YgICAgIHIxLCAjRlVURVhfV0FLRQorICAgIHN3aSAgICAgI19fTlJfZnV0ZXgKKyAgICBieCAgICAgIGxyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY2xvbmUuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxYzczZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2Nsb25lLlMKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisJLnRleHQKKwkudHlwZSBfX3B0aHJlYWRfY2xvbmUsICNmdW5jdGlvbgorCS5nbG9iYWwgX19wdGhyZWFkX2Nsb25lCisJLmFsaWduIDQKKyAgICAKK19fcHRocmVhZF9jbG9uZToKKwlAIGluc2VydCB0aGUgYXJncyBvbnRvIHRoZSBuZXcgc3RhY2sKKwlzdHIgICAgIHIwLCBbcjEsICMtNF0KKwlzdHIgICAgIHIzLCBbcjEsICMtOF0KKworCUAgZG8gdGhlIHN5c3RlbSBjYWxsCisJQCBnZXQgZmxhZ3MKKwkKKyAgICBtb3YgICAgIHIwLCByMgorCQorICAgIEAgbmV3IHNwIGlzIGFscmVhZHkgaW4gcjEKKworI2lmIF9fQVJNX0VBQklfXworICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nsb25lCisJc3dpICAgICAjMAorI2Vsc2UKKwlzd2kgICAgICNfX05SX2Nsb25lCisjZW5kaWYKKworCW1vdnMgICAgcjAsIHIwCisjaWYgX19BUk1fRUFCSV9fCisgICAgbGRtbmVmZCBzcCEsIHtyNCwgcjd9CisjZW5kaWYKKwlibHQgICAgIF9fZXJyb3IKKwlieG5lICAgIGxyCisKKworCUAgcGljayB0aGUgZnVuY3Rpb24gYXJnIGFuZCBjYWxsIGFkZHJlc3Mgb2ZmIHRoZSBzdGFjayBhbmQganVtcAorCUAgdG8gdGhlIEMgX190aHJlYWRfZW50cnkgZnVuY3Rpb24gd2hpY2ggZG9lcyBzb21lIHNldHVwIGFuZCB0aGVuCisJQCBjYWxscyB0aGUgdGhyZWFkJ3Mgc3RhcnQgZnVuY3Rpb24KKworCWxkciAgICAgcjAsIFtzcCwgIy00XQorCWxkciAgICAgcjEsIFtzcCwgIy04XQorCW1vdiAgICAgcjIsIHNwCQkJQCBfX3RocmVhZF9lbnRyeSBuZWVkcyB0aGUgVExTIHBvaW50ZXIKKwliICAgICAgIF9fdGhyZWFkX2VudHJ5CisKK19fZXJyb3I6CisJbW92ICAgICByMCwgIy0xCisJYnggICAgICBscgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fZHluYW1pYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyNjU5MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRiZWdpbl9keW5hbWljLlMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCS50ZXh0CisJLmFsaWduIDQKKwkudHlwZSBfc3RhcnQsI2Z1bmN0aW9uCisJLmdsb2JsIF9zdGFydAorCisjIHRoaXMgaXMgdGhlIHNtYWxsIHN0YXJ0dXAgY29kZSB0aGF0IGlzIGZpcnN0IHJ1biB3aGVuCisjIGFueSBleGVjdXRhYmxlIHRoYXQgaXMgc3RhdGljYWxseS1saW5rZWQgd2l0aCBCaW9uaWMKKyMgcnVucy4KKyMKKyMgaXQncyBwdXJwb3NlIGlzIHRvIGNhbGwgX19saWJjX2luaXQgd2l0aCBhcHByb3ByaWF0ZQorIyBhcmd1bWVudHMsIHdoaWNoIGFyZToKKyMKKyMgICAgLSB0aGUgYWRkcmVzcyBvZiB0aGUgcmF3IGRhdGEgYmxvY2sgc2V0dXAgYnkgdGhlIExpbnV4CisjICAgICAga2VybmVsIEVMRiBsb2FkZXIKKyMKKyMgICAgLSBhZGRyZXNzIG9mIGFuICJvbmV4aXQiIGZ1bmN0aW9uLCBub3QgdXNlZCBvbiBhbnkKKyMgICAgICBwbGF0Zm9ybSBzdXBwb3J0ZWQgYnkgQmlvbmljCisjCisjICAgIC0gYWRkcmVzcyBvZiB0aGUgIm1haW4iIGZ1bmN0aW9uIG9mIHRoZSBwcm9ncmFtLiBXZQorIyAgICAgIGNhbid0IGhhcmQtY29kZSBpdCBpbiB0aGUgYWRyIHBzZXVkbyBpbnN0cnVjdGlvbgorIyAgICAgIHNvIHdlIHVzZSBhIHRpbnkgdHJhbXBvbGluZSB0aGF0IHdpbGwgZ2V0IHJlbG9jYXRlZAorIyAgICAgIGJ5IHRoZSBkeW5hbWljIGxpbmtlciBiZWZvcmUgdGhpcyBjb2RlIHJ1bnMKKyMKKyMgICAgLSBhZGRyZXNzIG9mIHRoZSBjb25zdHJ1Y3RvciBsaXN0CisjCitfc3RhcnQ6CQorCW1vdglyMCwgc3AKKwltb3YJcjEsICMwCisJYWRyIHIyLCAwZgorCWFkciByMywgMWYKKwliCV9fbGliY19pbml0CisKKzA6ICBiICAgbWFpbgorCisxOiAgLmxvbmcgICBfX1BSRUlOSVRfQVJSQVlfXworICAgIC5sb25nICAgX19JTklUX0FSUkFZX18KKyAgICAubG9uZyAgIF9fRklOSV9BUlJBWV9fCisgICAgLmxvbmcgICBfX0NUT1JfTElTVF9fCisgICAgICAKKyMgdGhlIC5jdG9ycyBzZWN0aW9uIGNvbnRhaW5zIGEgbGlzdCBvZiBwb2ludGVycyB0byAiY29uc3RydWN0b3IiCisjIGZ1bmN0aW9ucyB0aGF0IG5lZWQgdG8gYmUgY2FsbGVkIGluIG9yZGVyIGR1cmluZyBDIGxpYnJhcnkgaW5pdGlhbGl6YXRpb24sCisjIGp1c3QgYmVmb3JlIHRoZSBwcm9ncmFtIGlzIGJlaW5nIHJ1bi4gVGhpcyBpcyBhIEMrKyByZXF1aXJlbWVudAorIworIyB0aGUgbGFzdCBlbnRyeSBzaGFsbCBiZSAwLCBhbmQgaXMgZGVmaW5lZCBpbiBjcnRlbmQuUworIworCS5zZWN0aW9uIC5wcmVpbml0X2FycmF5LCAiYXciCisJLmdsb2JsIF9fUFJFSU5JVF9BUlJBWV9fCitfX1BSRUlOSVRfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmluaXRfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19JTklUX0FSUkFZX18KK19fSU5JVF9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuZmluaV9hcnJheSwgImF3IgorCS5nbG9ibCBfX0ZJTklfQVJSQVlfXworX19GSU5JX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5jdG9ycywgImF3IgorCS5nbG9ibCBfX0NUT1JfTElTVF9fCitfX0NUT1JfTElTVF9fOgorCS5sb25nIC0xCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvY3J0YmVnaW5fc3RhdGljLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTI2NTkyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGJlZ2luX3N0YXRpYy5TCkBAIC0wLDAgKzEsOTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwkudGV4dAorCS5hbGlnbiA0CisJLnR5cGUgX3N0YXJ0LCNmdW5jdGlvbgorCS5nbG9ibCBfc3RhcnQKKworIyB0aGlzIGlzIHRoZSBzbWFsbCBzdGFydHVwIGNvZGUgdGhhdCBpcyBmaXJzdCBydW4gd2hlbgorIyBhbnkgZXhlY3V0YWJsZSB0aGF0IGlzIHN0YXRpY2FsbHktbGlua2VkIHdpdGggQmlvbmljCisjIHJ1bnMuCisjCisjIGl0J3MgcHVycG9zZSBpcyB0byBjYWxsIF9fbGliY19pbml0IHdpdGggYXBwcm9wcmlhdGUKKyMgYXJndW1lbnRzLCB3aGljaCBhcmU6CisjCisjICAgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIHJhdyBkYXRhIGJsb2NrIHNldHVwIGJ5IHRoZSBMaW51eAorIyAgICAgIGtlcm5lbCBFTEYgbG9hZGVyCisjCisjICAgIC0gYWRkcmVzcyBvZiBhbiAib25leGl0IiBmdW5jdGlvbiwgbm90IHVzZWQgb24gYW55CisjICAgICAgcGxhdGZvcm0gc3VwcG9ydGVkIGJ5IEJpb25pYworIworIyAgICAtIGFkZHJlc3Mgb2YgdGhlICJtYWluIiBmdW5jdGlvbiBvZiB0aGUgcHJvZ3JhbS4gV2UKKyMgICAgICBjYW4ndCBoYXJkLWNvZGUgaXQgaW4gdGhlIGFkciBwc2V1ZG8gaW5zdHJ1Y3Rpb24KKyMgICAgICBzbyB3ZSB1c2UgYSB0aW55IHRyYW1wb2xpbmUgdGhhdCB3aWxsIGdldCByZWxvY2F0ZWQKKyMgICAgICBieSB0aGUgZHluYW1pYyBsaW5rZXIgYmVmb3JlIHRoaXMgY29kZSBydW5zCisjCisjICAgIC0gYWRkcmVzcyBvZiB0aGUgY29uc3RydWN0b3IgbGlzdAorIworX3N0YXJ0OgkKKwltb3YJcjAsIHNwCisJbW92CXIxLCAjMAorCWFkciByMiwgMGYKKwlhZHIgcjMsIDFmCisJYglfX2xpYmNfaW5pdAorCiswOiAgYiAgIG1haW4KKworMTogIC5sb25nICAgX19QUkVJTklUX0FSUkFZX18KKyAgICAubG9uZyAgIF9fSU5JVF9BUlJBWV9fCisgICAgLmxvbmcgICBfX0ZJTklfQVJSQVlfXworICAgIC5sb25nICAgX19DVE9SX0xJU1RfXworICAgICAgCisjIHRoZSAuY3RvcnMgc2VjdGlvbiBjb250YWlucyBhIGxpc3Qgb2YgcG9pbnRlcnMgdG8gImNvbnN0cnVjdG9yIgorIyBmdW5jdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGNhbGxlZCBpbiBvcmRlciBkdXJpbmcgQyBsaWJyYXJ5IGluaXRpYWxpemF0aW9uLAorIyBqdXN0IGJlZm9yZSB0aGUgcHJvZ3JhbSBpcyBiZWluZyBydW4uIFRoaXMgaXMgYSBDKysgcmVxdWlyZW1lbnQKKyMKKyMgdGhlIGxhc3QgZW50cnkgc2hhbGwgYmUgMCwgYW5kIGlzIGRlZmluZWQgaW4gY3J0ZW5kLlMKKyMKKwkuc2VjdGlvbiAucHJlaW5pdF9hcnJheSwgImF3IgorCS5nbG9ibCBfX1BSRUlOSVRfQVJSQVlfXworX19QUkVJTklUX0FSUkFZX186CisJLmxvbmcgLTEKKworCS5zZWN0aW9uIC5pbml0X2FycmF5LCAiYXciCisJLmdsb2JsIF9fSU5JVF9BUlJBWV9fCitfX0lOSVRfQVJSQVlfXzoKKwkubG9uZyAtMQorCisJLnNlY3Rpb24gLmZpbmlfYXJyYXksICJhdyIKKwkuZ2xvYmwgX19GSU5JX0FSUkFZX18KK19fRklOSV9BUlJBWV9fOgorCS5sb25nIC0xCisKKwkuc2VjdGlvbiAuY3RvcnMsICJhdyIKKwkuZ2xvYmwgX19DVE9SX0xJU1RfXworX19DVE9SX0xJU1RfXzoKKwkubG9uZyAtMQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRlbmQuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2NydGVuZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2IxZWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9jcnRlbmQuUwpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisJCisJLnNlY3Rpb24gLnByZWluaXRfYXJyYXksICJhdyIKKwkubG9uZyAwCisKKwkuc2VjdGlvbiAuaW5pdF9hcnJheSwgImF3IgorCS5sb25nIDAKKworCS5zZWN0aW9uIC5maW5pX2FycmF5LCAiYXciCisJLmxvbmcgMAorCisJLnNlY3Rpb24gLmN0b3JzLCAiYXciCisJLmxvbmcgMAorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9keW5hbWljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTYyNjA2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2V4aWR4X2R5bmFtaWMuYwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCit0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50ICpfVW53aW5kX1B0cjsKKworLyogU3R1YmJlZCBvdXQgaW4gbGliZGwgYW5kIGRlZmluZWQgaW4gdGhlIGR5bmFtaWMgbGlua2VyLgorICogU2FtZSBzZW1hbnRpY3MgYXMgX19nbnVfVW53aW5kX0ZpbmRfZXhpZHgoKS4KKyAqLworZXh0ZXJuIF9VbndpbmRfUHRyIGRsX3Vud2luZF9maW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQgKnBjb3VudCk7CisKKy8qIEZvciBhIGdpdmVuIFBDLCBmaW5kIHRoZSAuc28gdGhhdCBpdCBiZWxvbmdzIHRvLgorICogUmV0dXJucyB0aGUgYmFzZSBhZGRyZXNzIG9mIHRoZSAuQVJNLmV4aWR4IHNlY3Rpb24KKyAqIGZvciB0aGF0IC5zbywgYW5kIHRoZSBudW1iZXIgb2YgOC1ieXRlIGVudHJpZXMKKyAqIGluIHRoYXQgc2VjdGlvbiAodmlhICpwY291bnQpLgorICoKKyAqIGxpYmdjYyBkZWNsYXJlcyBfX2dudV9VbndpbmRfRmluZF9leGlkeCgpIGFzIGEgd2VhayBzeW1ib2wsIHdpdGgKKyAqIHRoZSBleHBlY3RhdGlvbiB0aGF0IGxpYmMgd2lsbCBkZWZpbmUgaXQgYW5kIGNhbGwgdGhyb3VnaCB0bworICogYSBkaWZmZXJlbnRseS1uYW1lZCBmdW5jdGlvbiBpbiB0aGUgZHluYW1pYyBsaW5rZXIuCisgKi8KK19VbndpbmRfUHRyIF9fZ251X1Vud2luZF9GaW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjLCBpbnQgKnBjb3VudCkKK3sKKyAgICByZXR1cm4gZGxfdW53aW5kX2ZpbmRfZXhpZHgocGMsIHBjb3VudCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9zdGF0aWMuYyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2V4aWR4X3N0YXRpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3OWU5NTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9leGlkeF9zdGF0aWMuYwpAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCit0eXBlZGVmIGxvbmcgdW5zaWduZWQgaW50ICpfVW53aW5kX1B0cjsKKworLyogRmluZCB0aGUgLkFSTS5leGlkeCBzZWN0aW9uICh3aGljaCBpbiB0aGUgY2FzZSBvZiBhIHN0YXRpYyBleGVjdXRhYmxlCisgKiBjYW4gYmUgaWRlbnRpZmllZCB0aHJvdWdoIGl0cyBzdGFydCBhbmQgZW5kIHN5bWJvbHMpLCBhbmQgcmV0dXJuIGl0cworICogYmVnaW5uaW5nIGFuZCBudW1iZSBvZiBlbnRyaWVzIHRvIHRoZSBjYWxsZXIuICBOb3RlIHRoYXQgZm9yIHN0YXRpYworICogZXhlY3V0YWJsZXMgd2UgZG8gbm90IG5lZWQgdG8gdXNlIHRoZSB2YWx1ZSBvZiB0aGUgUEMgdG8gZmluZCB0aGUKKyAqIEVYSURYIHNlY3Rpb24uCisgKi8KKworZXh0ZXJuIHVuc2lnbmVkIF9fZXhpZHhfZW5kOworZXh0ZXJuIHVuc2lnbmVkIF9fZXhpZHhfc3RhcnQ7CisKK19VbndpbmRfUHRyIF9fZ251X1Vud2luZF9GaW5kX2V4aWR4KF9VbndpbmRfUHRyIHBjIF9fYXR0cmlidXRlX18oKHVudXNlZCkpLCAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqcGNvdW50KQoreworCSpwY291bnQgPSAoX19leGlkeF9lbmQtX19leGlkeF9zdGFydCkvODsKKwlyZXR1cm4gKF9VbndpbmRfUHRyKV9fZXhpZHhfc3RhcnQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9raWxsLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9raWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjk1NDA5MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL2tpbGwuUwpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKiB1bmxpa2Ugb3VyIGF1dG8tZ2VuZXJhdGVkIHN5c2NhbGwgc3R1YnMsIHRoaXMgY29kZSBzYXZlcyBscgorICAgb24gdGhlIHN0YWNrLCBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIHJlZ2lzdGVycy4gdGhpcyBtYWtlcworICAgb3VyIHN0YWNrIHVud2luZGVyIGhhcHB5LCB3aGVuIHdlIGdlbmVyYXRlIGRlYnVnIHN0YWNrCisgICB0cmFjZXMgYWZ0ZXIgdGhlIEMgbGlicmFyeSBvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtCisgICBhYm9ydCBkdWUgdG8gYSBmYXRhbCBydW50aW1lIGVycm9yIChlLmcuIGRldGVjdGlvbgorICAgb2YgYSBjb3JydXB0ZWQgbWFsbG9jIGhlYXApLgorKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworI2lmbmRlZiBfX05SX2tpbGwKKyNkZWZpbmUgX19OUl9raWxsICAgMzcKKyNlbmRpZgorCisgICAgLnRleHQKKyAgICAudHlwZSBraWxsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwga2lsbAorICAgIC5hbGlnbiA0CisKK2tpbGw6CisgICAgc3RtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQorICAgIGxkciAgICAgcjcsID1fX05SX2tpbGwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTlkZmI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY21wLlMKQEAgLTAsMCArMSwyODIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyAgICAudGV4dAorCisgICAgLmdsb2JhbCBtZW1jbXAKKyAgICAudHlwZSBtZW1jbXAsICVmdW5jdGlvbgorICAgIC5hbGlnbiA0CisKKy8qCisgKiBPcHRpbWl6ZWQgbWVtY21wKCkgZm9yIEFSTTkuCisgKiBUaGlzIHdvdWxkIG5vdCBiZSBvcHRpbWFsIG9uIFhTY2FsZSBvciBBUk0xMSwgd2hlcmUgbW9yZSBwcmVmZXRjaGluZworICogYW5kIHVzZSBvZiBQTEQgd2lsbCBiZSBuZWVkZWQuCisgKiBUaGUgMiBtYWpvciBvcHRpbXphdGlvbnMgaGVyZSBhcmUKKyAqICgxKSBUaGUgbWFpbiBsb29wIGNvbXBhcmVzIDE2IGJ5dGVzIGF0IGEgdGltZQorICogKDIpIFRoZSBsb2FkcyBhcmUgc2NoZWR1bGVkIGluIGEgd2F5IHRoZXkgd29uJ3Qgc3RhbGwKKyAqLworCittZW1jbXA6CisgICAgICAgIHBsZCAgICAgICAgIFtyMCwgIzBdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzBdCisKKyAgICAgICAgLyogdGFrZSBvZiB0aGUgY2FzZSB3aGVyZSBsZW5ndGggaXMgMCBvciB0aGUgYnVmZmVycyBhcmUgdGhlIHNhbWUgKi8KKyAgICAgICAgY21wICAgICAgICAgcjAsIHIxCisgICAgICAgIGNtcG5lICAgICAgIHIyLCAjMAorICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKKyAgICAgICAgYnhlcSAgICAgICAgbHIKKworICAgICAgICAvKiBzYXZlIHJlZ2lzdGVycyAqLworICAgICAgICBzdG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9CisgICAgICAgIAorICAgICAgICBwbGQgICAgICAgICBbcjAsICMzMl0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjMzJdCisKKyAgICAgICAgLyogc2luY2UgcjAgaG9sZCB0aGUgcmVzdWx0LCBtb3ZlIHRoZSBmaXJzdCBzb3VyY2UKKyAgICAgICAgICogcG9pbnRlciBzb21ld2hlcmUgZWxzZQorICAgICAgICAgKi8KKyAgICAgICAgIAorICAgICAgICAgbW92ICAgICAgICByNCwgcjAKKyAgICAgICAgIAorICAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgOCs0IGJ5dGVzLCB0aGlzIHNpbXBsaWZ5IHRoaW5ncyBiZWxvdworICAgICAgICAgICogYW5kIGF2b2lkIHNvbWUgb3ZlcmhlYWQgZm9yIHNtYWxsIGJsb2NrcworICAgICAgICAgICovCisgICAgICAgICBjbXAgICAgICAgIHIyLCAjKDgrNCkKKyAgICAgICAgIGJtaSAgICAgICAgOGYKKyAgICAgICAgCisgICAgICAgIC8qIGFsaWduIGZpcnN0IHBvaW50ZXIgdG8gd29yZCBib3VuZGFyeQorICAgICAgICAgKiBvZmZzZXQgPSAtc3JjICYgMworICAgICAgICAgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjMsIHI0LCAjMAorICAgICAgICBhbmRzICAgICAgICByMywgcjMsICMzCisgICAgICAgIGJlcSAgICAgICAgIDBmCisKKyAgICAgICAgLyogYWxpZ24gZmlyc3QgcG9pbnRlciAgKi8KKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCByMworMTogICAgICBsZHJiICAgICAgICByMCwgW3I0XSwgIzEKKyAgICAgICAgbGRyYiAgICAgICAgaXAsIFtyMV0sICMxCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgYm5lICAgICAgICAgOWYKKyAgICAgICAgc3VicyAgICAgICAgcjMsIHIzLCAjMQorICAgICAgICBibmUgICAgICAgICAxYgorCisKKzA6ICAgICAgLyogaGVyZSB0aGUgZmlyc3QgcG9pbnRlciBpcyBhbGlnbmVkLCBhbmQgd2UgaGF2ZSBhdCBsZWFzdCA0IGJ5dGVzCisgICAgICAgICAqIHRvIHByb2Nlc3MuCisgICAgICAgICAqLworCisgICAgICAgIC8qIHNlZSBpZiB0aGUgcG9pbnRlcnMgYXJlIGNvbmdydWVudCAqLworICAgICAgICBlb3IgICAgICAgICByMCwgcjQsIHIxCisgICAgICAgIGFuZHMgICAgICAgIHIwLCByMCwgIzMKKyAgICAgICAgYm5lICAgICAgICAgNWYKKworICAgICAgICAvKiBjb25ncnVlbnQgY2FzZSwgMzIgYnl0ZXMgcGVyIGl0ZXJhdGlvbgorICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgMzIrNCBieXRlcyBsZWZ0CisgICAgICAgICAqIGJlY2F1c2Ugd2UgZWZmZWN0aXZlbHkgcmVhZCBhaGVhZCBvbmUgd29yZCwgYW5kIHdlIGNvdWxkCisgICAgICAgICAqIHJlYWQgcGFzdCB0aGUgYnVmZmVyIChhbmQgc2VnZmF1bHQpIGlmIHdlJ3JlIG5vdCBjYXJlZnVsLgorICAgICAgICAgKi8KKworICAgICAgICBsZHIgICAgICAgICBpcCwgW3IxXQorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMoMzIgKyA0KQorICAgICAgICBibWkgICAgICAgICAxZgorICAgICAgICAKKzA6ICAgICAgcGxkICAgICAgICAgW3I0LCAjNjRdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzY0XQorICAgICAgICBsZHIgICAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgYm5lICAgICAgICAgMmYgICAgICAgIAorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBiaHMgICAgICAgICAwYgorCisgICAgICAgIC8qIGRvIHdlIGhhdmUgYXQgbGVhc3QgNCBieXRlcyBsZWZ0PyAqLworMTogICAgICBhZGRzICAgICAgICByMiwgcjIsICMoMzIgLSA0ICsgNCkKKyAgICAgICAgYm1pICAgICAgICAgNGYKKyAgICAgICAgCisgICAgICAgIC8qIGZpbmlzaCBvZmYgNCBieXRlcyBhdCBhIHRpbWUgKi8KKzM6ICAgICAgbGRyICAgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdLCAjNAorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDJmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzQKKyAgICAgICAgYmhzICAgICAgICAgM2IKKworICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KKzQ6ICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjNAorICAgICAgICBtb3ZlcSAgICAgICByMCwgIzAKKyAgICAgICAgYmVxICAgICAgICAgOWYKKworICAgICAgICAvKiBmaW5pc2ggb2ZmIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgICAgICAgYiAgICAgICAgICAgOGYKKworMjogICAgICAvKiB0aGUgbGFzdCA0IGJ5dGVzIGFyZSBkaWZmZXJlbnQsIHJlc3RhcnQgdGhlbSAqLworICAgICAgICBzdWIgICAgICAgICByNCwgcjQsICM0CisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzQKKyAgICAgICAgbW92ICAgICAgICAgcjIsICM0CisKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgbGFzdCBmZXcgYnl0ZXMgKi8KKzg6ICAgICAgbGRyYiAgICAgICAgcjAsIFtyNF0sICMxCisgICAgICAgIGxkcmIgICAgICAgIGlwLCBbcjFdLCAjMQorICAgICAgICAvLyBzdGFsbAorICAgICAgICBzdWJzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDlmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEKKyAgICAgICAgYm5lICAgICAgICAgOGIKKworOTogICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworCisKKworCis1OiAgICAgIC8qKioqKioqKioqKioqKiogbm9uLWNvbmdydWVudCBjYXNlICoqKioqKioqKioqKioqKi8KKyAgICAgICAgYW5kICAgICAgICAgcjAsIHIxLCAjMyAgICAgIAorICAgICAgICBjbXAgICAgICAgICByMCwgIzIKKyAgICAgICAgYm5lICAgICAgICAgNGYKKworICAgICAgICAvKiBoZXJlLCBvZmZzZXQgaXMgMiAoMTYtYml0cyBhbGlnbmVkLCBzcGVjaWFsIGNhc2VkKSAqLworICAgICAgICAKKyAgICAgICAgLyogbWFrZSBzdXJlIHdlIGhhdmUgYXQgbGVhc3QgMTYgYnl0ZXMgdG8gcHJvY2VzcyAqLworICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxNgorICAgICAgICBhZGRtaSAgICAgICByMiwgcjIsICMxNgorICAgICAgICBibWkgICAgICAgICA4YgorCisgICAgICAgIC8qIGFsaWduIHRoZSB1bmFsaWduZWQgcG9pbnRlciAqLworICAgICAgICBiaWMgICAgICAgICByMSwgcjEsICMzCisgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAorCis2OiAgICAgIHBsZCAgICAgICAgIFtyMSwgIzY0XQorICAgICAgICBwbGQgICAgICAgICBbcjQsICM2NF0KKyAgICAgICAgbW92ICAgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkciAgICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHIgICAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgb3JyICAgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyNF0sICM0CisgICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0CisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2CisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDdmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzE2CisgICAgICAgIGJocyAgICAgICAgIDZiCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzIKKyAgICAgICAgLyogYXJlIHdlIGRvbmU/ICovCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzE2CisgICAgICAgIG1vdmVxICAgICAgIHIwLCAjMAorICAgICAgICBiZXEgICAgICAgICA5YgorICAgICAgICAvKiBmaW5pc2ggb2ZmIHRoZSByZW1haW5pbmcgYnl0ZXMgKi8KKyAgICAgICAgYiAgICAgICAgICAgOGIKKworNzogICAgICAvKiBmaXggdXAgdGhlIDIgcG9pbnRlcnMgYW5kIGZhbGx0aHJvdWdoLi4uICovCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIyg0KzIpCisgICAgICAgIHN1YiAgICAgICAgIHI0LCByNCwgIzQKKyAgICAgICAgbW92ICAgICAgICAgcjIsICM0CisgICAgICAgIGIgICAgICAgICAgIDhiCisKKworNDogICAgICAvKioqKioqKioqKioqKioqIG9mZnNldCBpcyAxIG9yIDMgKGxlc3Mgb3B0aW1pemVkKSAqKioqKioqKioqKioqKiovCisKKwkJc3RtZmQJCXNwISwge3I1LCByNiwgcjd9CisKKyAgICAgICAgLy8gcjUgPSByaHMKKyAgICAgICAgLy8gcjYgPSBsaHMKKyAgICAgICAgLy8gcjcgPSBzY3JhdGNoCisKKyAgICAgICAgbW92ICAgICAgICAgcjUsIHIwLCBsc2wgIzMJCS8qIHI1ID0gcmlnaHQgc2hpZnQgKi8KKyAgICAgICAgcnNiICAgICAgICAgcjYsIHI1LCAjMzIgICAgICAgICAvKiByNiA9IGxlZnQgc2hpZnQgKi8KKworICAgICAgICAvKiBhbGlnbiB0aGUgdW5hbGlnbmVkIHBvaW50ZXIgKi8KKyAgICAgICAgYmljICAgICAgICAgcjEsIHIxLCAjMworICAgICAgICBsZHIgICAgICAgICByNywgW3IxXSwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjOAorCis2OiAgICAgIG1vdiAgICAgICAgIGlwLCByNywgbHNyIHI1CisgICAgICAgIGxkciAgICAgICAgIHI3LCBbcjFdLCAjNAorICAgICAgICBsZHIgICAgICAgICByMCwgW3I0XSwgIzQKKyAgICAgICAgb3JyICAgICAgICAgaXAsIGlwLCByNywgbHNsIHI2CisgICAgICAgIGVvcnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbW92ZXEgICAgICAgaXAsIHI3LCBsc3IgcjUKKyAgICAgICAgbGRyZXEgICAgICAgcjcsIFtyMV0sICM0CisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjRdLCAjNAorICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIHI3LCBsc2wgcjYKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBibmUgICAgICAgICA3ZgorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICM4CisgICAgICAgIGJocyAgICAgICAgIDZiCisKKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCByNiwgbHNyICMzCisJCWxkbWZkICAgICAgIHNwISwge3I1LCByNiwgcjd9CisKKyAgICAgICAgLyogYXJlIHdlIGRvbmU/ICovCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzgKKyAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCisgICAgICAgIGJlcSAgICAgICAgIDliCisKKyAgICAgICAgLyogZmluaXNoIG9mZiB0aGUgcmVtYWluaW5nIGJ5dGVzICovCisgICAgICAgIGIgICAgICAgICAgIDhiCisKKzc6ICAgICAgLyogZml4IHVwIHRoZSAyIHBvaW50ZXJzIGFuZCBmYWxsdGhyb3VnaC4uLiAqLworICAgICAgICBzdWIgICAgICAgICByMSwgcjEsICM0CisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgcjYsIGxzciAjMworICAgICAgICBzdWIgICAgICAgICByNCwgcjQsICM0CisgICAgICAgIG1vdiAgICAgICAgIHIyLCAjNAorCQlsZG1mZAkJc3AhLCB7cjUsIHI2LCByN30KKyAgICAgICAgYiAgICAgICAgICAgOGIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbWNtcDE2LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZTZkMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jbXAxNi5TCkBAIC0wLDAgKzEsMjMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisgICAgLnRleHQKKworICAgIC5nbG9iYWwgX19tZW1jbXAxNgorICAgIC50eXBlIF9fbWVtY21wMTYsICVmdW5jdGlvbgorICAgIC5hbGlnbiA0CisKKy8qCisgKiBPcHRpbWl6ZWQgbWVtY21wMTYoKSBmb3IgQVJNOS4KKyAqIFRoaXMgd291bGQgbm90IGJlIG9wdGltYWwgb24gWFNjYWxlIG9yIEFSTTExLCB3aGVyZSBtb3JlIHByZWZldGNoaW5nCisgKiBhbmQgdXNlIG9mIFBMRCB3aWxsIGJlIG5lZWRlZC4KKyAqIFRoZSAyIG1ham9yIG9wdGltemF0aW9ucyBoZXJlIGFyZQorICogKDEpIFRoZSBtYWluIGxvb3AgY29tcGFyZXMgMTYgYnl0ZXMgYXQgYSB0aW1lCisgKiAoMikgVGhlIGxvYWRzIGFyZSBzY2hlZHVsZWQgaW4gYSB3YXkgdGhleSB3b24ndCBzdGFsbAorICovCisKK19fbWVtY21wMTY6CisgICAgICAgIHBsZCAgICAgICAgIFtyMCwgIzBdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzBdCisKKyAgICAgICAgLyogdGFrZSBvZiB0aGUgY2FzZSB3aGVyZSBsZW5ndGggaXMgbnVsIG9yIHRoZSBidWZmZXJzIGFyZSB0aGUgc2FtZSAqLworICAgICAgICBjbXAgICAgICAgICByMCwgcjEKKyAgICAgICAgY21wbmUgICAgICAgcjIsICMwCisgICAgICAgIG1vdmVxICAgICAgIHIwLCAjMAorICAgICAgICBieGVxICAgICAgICBscgorCisgICAgICAgIC8qIHNpbmNlIHIwIGhvbGQgdGhlIHJlc3VsdCwgbW92ZSB0aGUgZmlyc3Qgc291cmNlCisgICAgICAgICAqIHBvaW50ZXIgc29tZXdoZXJlIGVsc2UKKyAgICAgICAgICovCisKKyAgICAgICAgbW92ICAgICAgICAgcjMsIHIwCisKKyAgICAgICAgIC8qIG1ha2Ugc3VyZSB3ZSBoYXZlIGF0IGxlYXN0IDEyIHdvcmRzLCB0aGlzIHNpbXBsaWZ5IHRoaW5ncyBiZWxvdworICAgICAgICAgICogYW5kIGF2b2lkIHNvbWUgb3ZlcmhlYWQgZm9yIHNtYWxsIGJsb2NrcworICAgICAgICAgICovCisKKyAgICAgICAgY21wICAgICAgICAgcjIsICMxMgorICAgICAgICBicGwgICAgICAgICAwZgorCisgICAgICAgIC8qIHNtYWxsIGJsb2NrcyAobGVzcyB0aGVuIDEyIHdvcmRzKSAqLworICAgICAgICBwbGQgICAgICAgICBbcjAsICMzMl0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjMzJdCisKKzE6ICAgICAgbGRyaCAgICAgICAgcjAsIFtyM10sICMyCisgICAgICAgIGxkcmggICAgICAgIGlwLCBbcjFdLCAjMgorICAgICAgICBzdWJzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJ4bmUgICAgICAgIGxyICAgICAgICAKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMQorICAgICAgICBibmUgICAgICAgICAxYgorICAgICAgICBieCAgICAgICAgICBscgorCisKKyAgICAgICAgLyogc2F2ZSByZWdpc3RlcnMgKi8KKzA6ICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjQsIGxyfQorICAgICAgICAKKyAgICAgICAgLyogYWxpZ24gZmlyc3QgcG9pbnRlciB0byB3b3JkIGJvdW5kYXJ5ICovCisgICAgICAgIHRzdCAgICAgICAgIHIzLCAjMgorICAgICAgICBiZXEgICAgICAgICAwZgorICAgICAgICAKKyAgICAgICAgbGRyaCAgICAgICAgcjAsIFtyM10sICMyCisgICAgICAgIGxkcmggICAgICAgIGlwLCBbcjFdLCAjMgorICAgICAgICBzdWIgICAgICAgICByMiwgcjIsICMxCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiAqLworICAgICAgICBsZG1uZWZkICAgICBzcCEsIHtyNCwgbHJ9CisgICAgICAgIGJ4bmUgICAgICAgIGxyCisKKworCiswOiAgICAgIC8qIGhlcmUgdGhlIGZpcnN0IHBvaW50ZXIgaXMgYWxpZ25lZCwgYW5kIHdlIGhhdmUgYXQgbGVhc3QgMyB3b3JkcworICAgICAgICAgKiB0byBwcm9jZXNzLgorICAgICAgICAgKi8KKworICAgICAgICAvKiBzZWUgaWYgdGhlIHBvaW50ZXJzIGFyZSBjb25ncnVlbnQgKi8KKyAgICAgICAgZW9yICAgICAgICAgcjAsIHIzLCByMQorICAgICAgICBhbmRzICAgICAgICByMCwgcjAsICMyCisgICAgICAgIGJuZSAgICAgICAgIDVmCisKKyAgICAgICAgLyogY29uZ3J1ZW50IGNhc2UsIDE2IGhhbGYtd29yZHMgcGVyIGl0ZXJhdGlvbgorICAgICAgICAgKiBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGVyZSBhcmUgYXQgbGVhc3QgMTYrMiB3b3JkcyBsZWZ0CisgICAgICAgICAqIGJlY2F1c2Ugd2UgZWZmZWN0aXZlbHkgcmVhZCBhaGVhZCBvbmUgbG9uZyB3b3JkLCBhbmQgd2UgY291bGQKKyAgICAgICAgICogcmVhZCBwYXN0IHRoZSBidWZmZXIgKGFuZCBzZWdmYXVsdCkgaWYgd2UncmUgbm90IGNhcmVmdWwuCisgICAgICAgICAqLworCisgICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIygxNiArIDIpCisgICAgICAgIGJtaSAgICAgICAgIDFmCisgICAgICAgIAorMDoKKyAgICAgICAgcGxkICAgICAgICAgW3IzLCAjNjRdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzY0XQorICAgICAgICBsZHIgICAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyICAgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgaXAsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGxyCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkcmVxICAgICAgIGlwLCBbcjEsICM0XSEKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBscgorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMSwgIzRdIQorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBsZHJlcSAgICAgICBpcCwgW3IxLCAjNF0hCisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgbHIKKyAgICAgICAgYm5lICAgICAgICAgMmYgICAgICAgIAorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICMxNgorICAgICAgICBiaHMgICAgICAgICAwYgorCisgICAgICAgIC8qIGRvIHdlIGhhdmUgYXQgbGVhc3QgMiB3b3JkcyBsZWZ0PyAqLworMTogICAgICBhZGRzICAgICAgICByMiwgcjIsICMoMTYgLSAyICsgMikKKyAgICAgICAgYm1pICAgICAgICAgNGYKKyAgICAgICAgCisgICAgICAgIC8qIGZpbmlzaCBvZmYgMiB3b3JkcyBhdCBhIHRpbWUgKi8KKzM6ICAgICAgbGRyICAgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIGxkciAgICAgICAgIGlwLCBbcjFdLCAjNAorICAgICAgICBlb3JzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDJmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzIKKyAgICAgICAgYmhzICAgICAgICAgM2IKKworICAgICAgICAvKiBhcmUgd2UgZG9uZT8gKi8KKzQ6ICAgICAgYWRkcyAgICAgICAgcjIsIHIyLCAjMgorICAgICAgICBibmUgICAgICAgICA4ZgorICAgICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgICAgIG1vdiAgICAgICAgIHIwLCAjMAorICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9CisgICAgICAgIGJ4ICAgICAgICAgIGxyCisKKzI6ICAgICAgLyogdGhlIGxhc3QgMiB3b3JkcyBhcmUgZGlmZmVyZW50LCByZXN0YXJ0IHRoZW0gKi8KKyAgICAgICAgbGRyaCAgICAgICAgcjAsIFtyMywgIy00XQorICAgICAgICBsZHJoICAgICAgICBpcCwgW3IxLCAjLTRdCisgICAgICAgIHN1YnMgICAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbGRyZXFoICAgICAgcjAsIFtyMywgIy0yXQorICAgICAgICBsZHJlcWggICAgICBpcCwgW3IxLCAjLTJdCisgICAgICAgIHN1YmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgLyogcmVzdG9yZSByZWdpc3RlcnMgYW5kIHJldHVybiAqLworICAgICAgICBsZG1mZCAgICAgICBzcCEsIHtyNCwgbHJ9CisgICAgICAgIGJ4ICAgICAgICAgIGxyCisKKyAgICAgICAgLyogcHJvY2VzcyB0aGUgbGFzdCBmZXcgd29yZHMgKi8KKzg6ICAgICAgbGRyaCAgICAgICAgcjAsIFtyM10sICMyCisgICAgICAgIGxkcmggICAgICAgIGlwLCBbcjFdLCAjMgorICAgICAgICBzdWJzICAgICAgICByMCwgcjAsIGlwCisgICAgICAgIGJuZSAgICAgICAgIDlmCisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzEKKyAgICAgICAgYm5lICAgICAgICAgOGIKKworOTogICAgICAvKiByZXN0b3JlIHJlZ2lzdGVycyBhbmQgcmV0dXJuICovCisgICAgICAgIGxkbWZkICAgICAgIHNwISwge3I0LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKworCis1OiAgICAgIC8qKioqKioqKioqKioqKiogbm9uLWNvbmdydWVudCBjYXNlICoqKioqKioqKioqKioqKi8KKworICAgICAgICAvKiBhbGlnbiB0aGUgdW5hbGlnbmVkIHBvaW50ZXIgKi8KKyAgICAgICAgYmljICAgICAgICAgcjEsIHIxLCAjMworICAgICAgICBsZHIgICAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgc3ViICAgICAgICAgcjIsIHIyLCAjOAorCis2OgorICAgICAgICBwbGQgICAgICAgICBbcjMsICM2NF0KKyAgICAgICAgcGxkICAgICAgICAgW3IxLCAjNjRdCisgICAgICAgIG1vdiAgICAgICAgIGlwLCBsciwgbHNyICMxNgorICAgICAgICBsZHIgICAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgbGRyICAgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIG9yciAgICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKKyAgICAgICAgZW9ycyAgICAgICAgcjAsIHIwLCBpcAorICAgICAgICBtb3ZlcSAgICAgICBpcCwgbHIsIGxzciAjMTYKKyAgICAgICAgbGRyZXEgICAgICAgbHIsIFtyMV0sICM0CisgICAgICAgIGxkcmVxICAgICAgIHIwLCBbcjNdLCAjNAorICAgICAgICBvcnJlcSAgICAgICBpcCwgaXAsIGxyLCBsc2wgIzE2CisgICAgICAgIGVvcmVxcyAgICAgIHIwLCByMCwgaXAKKyAgICAgICAgbW92ZXEgICAgICAgaXAsIGxyLCBsc3IgIzE2CisgICAgICAgIGxkcmVxICAgICAgIGxyLCBbcjFdLCAjNAorICAgICAgICBsZHJlcSAgICAgICByMCwgW3IzXSwgIzQKKyAgICAgICAgb3JyZXEgICAgICAgaXAsIGlwLCBsciwgbHNsICMxNgorICAgICAgICBlb3JlcXMgICAgICByMCwgcjAsIGlwCisgICAgICAgIG1vdmVxICAgICAgIGlwLCBsciwgbHNyICMxNgorICAgICAgICBsZHJlcSAgICAgICBsciwgW3IxXSwgIzQKKyAgICAgICAgbGRyZXEgICAgICAgcjAsIFtyM10sICM0CisgICAgICAgIG9ycmVxICAgICAgIGlwLCBpcCwgbHIsIGxzbCAjMTYKKyAgICAgICAgZW9yZXFzICAgICAgcjAsIHIwLCBpcAorICAgICAgICBibmUgICAgICAgICA3ZgorICAgICAgICBzdWJzICAgICAgICByMiwgcjIsICM4CisgICAgICAgIGJocyAgICAgICAgIDZiCisgICAgICAgIHN1YiAgICAgICAgIHIxLCByMSwgIzIKKyAgICAgICAgLyogYXJlIHdlIGRvbmU/ICovCisgICAgICAgIGFkZHMgICAgICAgIHIyLCByMiwgIzgKKyAgICAgICAgbW92ZXEgICAgICAgcjAsICMwCisgICAgICAgIGJlcSAgICAgICAgIDliCisgICAgICAgIC8qIGZpbmlzaCBvZmYgdGhlIHJlbWFpbmluZyBieXRlcyAqLworICAgICAgICBiICAgICAgICAgICA4YgorCis3OiAgICAgIC8qIGZpeCB1cCB0aGUgMiBwb2ludGVycyBhbmQgZmFsbHRocm91Z2guLi4gKi8KKyAgICAgICAgc3ViICAgICAgICAgcjEsIHIxLCAjMgorICAgICAgICBiICAgICAgICAgICAyYgpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9tZW1jcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNmU0YTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtY3B5LlMKQEAgLTAsMCArMSwzODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKwkudGV4dAorCisgICAgLmdsb2JhbCBtZW1jcHkKKyAgICAudHlwZSBtZW1jcHksICVmdW5jdGlvbgorICAgIC5hbGlnbiA0CisKKwkJLyoKKwkJICogT3B0aW1pemVkIG1lbWNweSgpIGZvciBBUk0uCisgICAgICAgICAqCisJCSAqIG5vdGUgdGhhdCBtZW1jcHkoKSBhbHdheXMgcmV0dXJucyB0aGUgZGVzdGluYXRpb24gcG9pbnRlciwKKwkJICogc28gd2UgaGF2ZSB0byBwcmVzZXJ2ZSBSMC4KKwkJICovCisJCittZW1jcHk6CQorCQkvKiBUaGUgc3RhY2sgbXVzdCBhbHdheXMgYmUgNjQtYml0cyBhbGlnbmVkIHRvIGJlIGNvbXBsaWFudCB3aXRoIHRoZSAKKwkJICogQVJNIEFCSS4gU2luY2Ugd2UgaGF2ZSB0byBzYXZlIFIwLCB3ZSBtaWdodCBhcyB3ZWxsIHNhdmUgUjQKKwkJICogd2hpY2ggd2UgY2FuIHVzZSBmb3IgYmV0dGVyIHBpcGVsaW5pbmcgb2YgdGhlIHJlYWRzIGJlbG93CisJCSAqLworICAgICAgICAuZm5zdGFydAorICAgICAgICAuc2F2ZSAgICAgICB7cjAsIHI0LCBscn0KKyAgICAgICAgc3RtZmQgICAgICAgc3AhLCB7cjAsIHI0LCBscn0KKyAgICAgICAgLyogTWFraW5nIHJvb20gZm9yIHI1LXIxMSB3aGljaCB3aWxsIGJlIHNwaWxsZWQgbGF0ZXIgKi8KKyAgICAgICAgLnBhZCAgICAgICAgIzI4CisgICAgICAgIHN1YiAgICAgICAgIHNwLCBzcCwgIzI4CisKKyAgICAgICAgLy8gcHJlbG9hZCB0aGUgZGVzdGluYXRpb24gYmVjYXVzZSB3ZSdsbCBhbGlnbiBpdCB0byBhIGNhY2hlIGxpbmUKKyAgICAgICAgLy8gd2l0aCBzbWFsbCB3cml0ZXMuIEFsc28gc3RhcnQgdGhlIHNvdXJjZSAicHVtcCIuCisgICAgICAgIHBsZCAgICAgICAgIFtyMCwgIzBdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzBdCisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzMyXQorCisJCS8qIGl0IHNpbXBsaWZpZXMgdGhpbmdzIHRvIHRha2UgY2FyZSBvZiBsZW48NCBlYXJseSAqLworCQljbXAJCQlyMiwgIzQKKwkJYmxvCQkJY29weV9sYXN0XzNfYW5kX3JldHVybgorCisJCS8qIGNvbXB1dGUgdGhlIG9mZnNldCB0byBhbGlnbiB0aGUgc291cmNlCisJCSAqIG9mZnNldCA9ICg0LShzcmMmMykpJjMgPSAtc3JjICYgMworCQkgKi8KKwkJcnNiCQkJcjMsIHIxLCAjMAorCQlhbmRzCQlyMywgcjMsICMzCisJCWJlcQkJCXNyY19hbGlnbmVkCisKKwkJLyogYWxpZ24gc291cmNlIHRvIDMyIGJpdHMuIFdlIG5lZWQgdG8gaW5zZXJ0IDIgaW5zdHJ1Y3Rpb25zIGJldHdlZW4KKwkJICogYSBsZHJbYnxoXSBhbmQgc3RyW2J8aF0gYmVjYXVzZSBieXRlIGFuZCBoYWxmLXdvcmQgaW5zdHJ1Y3Rpb25zCisJCSAqIHN0YWxsIDIgY3ljbGVzLgorCQkgKi8KKwkJbW92cwkJcjEyLCByMywgbHNsICMzMQorCQlzdWIJCQlyMiwgcjIsIHIzCQkvKiB3ZSBrbm93IHRoYXQgcjMgPD0gcjIgYmVjYXVzZSByMiA+PSA0ICovCisJCWxkcm1pYgkJcjMsIFtyMV0sICMxCisJCWxkcmNzYgkJcjQsIFtyMV0sICMxCisJCWxkcmNzYgkJcjEyLFtyMV0sICMxCisgICAgICAgIHN0cm1pYgkJcjMsIFtyMF0sICMxCisJCXN0cmNzYgkJcjQsIFtyMF0sICMxCisJCXN0cmNzYgkJcjEyLFtyMF0sICMxCisJCQorc3JjX2FsaWduZWQ6CisKKwkJLyogc2VlIGlmIHNyYyBhbmQgZHN0IGFyZSBhbGlnbmVkIHRvZ2V0aGVyIChjb25ncnVlbnQpICovCQorCQllb3IJCQlyMTIsIHIwLCByMQorCQl0c3QJCQlyMTIsICMzCisJCWJuZQkJCW5vbl9jb25ncnVlbnQKKworICAgICAgICAvKiBVc2UgcG9zdC1pbmNyaW1lbnQgbW9kZSBmb3Igc3RtIHRvIHNwaWxsIHI1LXIxMSB0byByZXNlcnZlZCBzdGFjaworICAgICAgICAgKiBmcmFtZS4gRG9uJ3QgdXBkYXRlIHNwLgorICAgICAgICAgKi8KKyAgICAgICAgc3RtZWEJCXNwLCB7cjUtcjExfQorCisJCS8qIGFsaWduIHRoZSBkZXN0aW5hdGlvbiB0byBhIGNhY2hlLWxpbmUgKi8KKwkJcnNiICAgICAgICAgcjMsIHIwLCAjMAorCQlhbmRzCQlyMywgcjMsICMweDFDCisJCWJlcSAgICAgICAgIGNvbmdydWVudF9hbGlnbmVkMzIKKwkJY21wICAgICAgICAgcjMsIHIyCisJCWFuZGhpCQlyMywgcjIsICMweDFDCisKKwkJLyogY29uZGl0aW9ubmFseSBjb3BpZXMgMCB0byA3IHdvcmRzIChsZW5ndGggaW4gcjMpICovCisJCW1vdnMJCXIxMiwgcjMsIGxzbCAjMjggCisJCWxkbWNzaWEJCXIxISwge3I0LCByNSwgcjYsIHI3fQkvKiAxNiBieXRlcyAqLworCQlsZG1taWlhCQlyMSEsIHtyOCwgcjl9CQkJLyogIDggYnl0ZXMgKi8KKwkJc3RtY3NpYQkJcjAhLCB7cjQsIHI1LCByNiwgcjd9CisJCXN0bW1paWEJCXIwISwge3I4LCByOX0KKwkJdHN0ICAgICAgICAgcjMsICMweDQKKwkJbGRybmUJCXIxMCxbcjFdLCAjNAkJCS8qICA0IGJ5dGVzICovCisJCXN0cm5lCQlyMTAsW3IwXSwgIzQKKwkJc3ViICAgICAgICAgcjIsIHIyLCByMworCitjb25ncnVlbnRfYWxpZ25lZDMyOgorCQkvKgorCQkgKiBoZXJlIHNvdXJjZSBpcyBhbGlnbmVkIHRvIDMyIGJ5dGVzLgorCQkgKi8KKworY2FjaGVkX2FsaWduZWQzMjoKKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKyAgICAgICAgYmxvICAgICAgICAgbGVzc190aGFuXzMyX2xlZnQKKworICAgICAgICAvKgorICAgICAgICAgKiBXZSBwcmVsb2FkIGEgY2FjaGUtbGluZSB1cCB0byA2NCBieXRlcyBhaGVhZC4gT24gdGhlIDkyNiwgdGhpcyB3aWxsCisgICAgICAgICAqIHN0YWxsIG9ubHkgdW50aWwgdGhlIHJlcXVlc3RlZCB3b3JsZCBpcyBmZXRjaGVkLCBidXQgdGhlIGxpbmVmaWxsIAorICAgICAgICAgKiBjb250aW51ZXMgaW4gdGhlIHRoZSBiYWNrZ3JvdW5kLgorICAgICAgICAgKiBXaGlsZSB0aGUgbGluZWZpbGwgaXMgZ29pbmcsIHdlIHdyaXRlIG91ciBwcmV2aW91cyBjYWNoZS1saW5lCisgICAgICAgICAqIGludG8gdGhlIHdyaXRlLWJ1ZmZlciAod2hpY2ggc2hvdWxkIGhhdmUgc29tZSBmcmVlIHNwYWNlKS4KKyAgICAgICAgICogV2hlbiB0aGUgbGluZWZpbGwgaXMgZG9uZSwgdGhlIHdyaXRlYnVmZmVyIHdpbGwKKyAgICAgICAgICogc3RhcnQgZHVtcGluZyBpdHMgY29udGVudCBpbnRvIG1lbW9yeQorICAgICAgICAgKgorICAgICAgICAgKiBXaGlsZSBhbGwgdGhpcyBpcyBnb2luZywgd2UgdGhlbiBsb2FkIGEgZnVsbCBjYWNoZSBsaW5lIGludG8KKyAgICAgICAgICogOCByZWdpc3RlcnMsIHRoaXMgY2FjaGUgbGluZSBzaG91bGQgYmUgaW4gdGhlIGNhY2hlIGJ5IG5vdworICAgICAgICAgKiAob3IgcGFydGx5IGluIHRoZSBjYWNoZSkuCisgICAgICAgICAqCisgICAgICAgICAqIFRoaXMgY29kZSBzaG91bGQgd29yayB3ZWxsIHJlZ2FyZGxlc3Mgb2YgdGhlIHNvdXJjZS9kZXN0IGFsaWdubWVudC4KKyAgICAgICAgICoKKyAgICAgICAgICovCisKKyAgICAgICAgLy8gQWxpZ24gdGhlIHByZWxvYWQgcmVnaXN0ZXIgdG8gYSBjYWNoZS1saW5lIGJlY2F1c2UgdGhlIGNwdSBkb2VzCisgICAgICAgIC8vICJjcml0aWNhbCB3b3JkIGZpcnN0IiAodGhlIGZpcnN0IHdvcmQgcmVxdWVzdGVkIGlzIGxvYWRlZCBmaXJzdCkuCisgICAgICAgIGJpYyAgICAgICAgIHIxMiwgcjEsICMweDFGCisgICAgICAgIGFkZCAgICAgICAgIHIxMiwgcjEyLCAjNjQKKworMTogICAgICBsZG1pYQkJcjEhLCB7IHI0LXIxMSB9CisgICAgICAgIHBsZCAgICAgICAgIFtyMTIsICM2NF0KKyAgICAgICAgc3VicyAgICAgICAgcjIsIHIyLCAjMzIKKworICAgICAgICAvLyBOT1RFOiBpZiByMTIgaXMgbW9yZSB0aGFuIDY0IGFoZWFkIG9mIHIxLCB0aGUgZm9sbG93aW5nIGxkcmhpCisgICAgICAgIC8vIGZvciBBUk05IHByZWxvYWQgd2lsbCBub3QgYmUgc2FmZWx5IGd1YXJkZWQgYnkgdGhlIHByZWNlZGluZyBzdWJzLgorICAgICAgICAvLyBXaGVuIGl0IGlzIHNhZmVseSBndWFyZGVkIHRoZSBvbmx5IHBvc3NpYmlsaXR5IHRvIGhhdmUgU0lHU0VHViBoZXJlIAorICAgICAgICAvLyBpcyBiZWNhdXNlIHRoZSBjYWxsZXIgb3ZlcnN0YXRlcyB0aGUgbGVuZ3RoLgorICAgICAgICBsZHJoaSAgICAgICByMywgW3IxMl0sICMzMiAgICAgIC8qIGNoZWFwIEFSTTkgcHJlbG9hZCAqLworICAgICAgICBzdG1pYSAgICAgICByMCEsIHsgcjQtcjExIH0KKwkJYmhzICAgICAgICAgMWIKKwkJCisgICAgICAgIGFkZCAgICAgICAgIHIyLCByMiwgIzMyCisKKworCisKK2xlc3NfdGhhbl8zMl9sZWZ0OgorCQkvKiAKKwkJICogbGVzcyB0aGFuIDMyIGJ5dGVzIGxlZnQgYXQgdGhpcyBwb2ludCAobGVuZ3RoIGluIHIyKQorCQkgKi8KKworCQkvKiBza2lwIGFsbCB0aGlzIGlmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHdoaWNoIHNob3VsZAorCQkgKiBiZSBhIGNvbW1vbiBjYXNlIChpZiBub3QgZXhlY3V0ZWQgdGhlIGNvZGUgYmVsb3cgdGFrZXMKKwkJICogYWJvdXQgMTYgY3ljbGVzKQorCQkgKi8KKwkJdHN0CQkJcjIsICMweDFGCisJCWJlcQkJCTFmCisKKwkJLyogY29uZGl0aW9ubmFseSBjb3BpZXMgMCB0byAzMSBieXRlcyAqLworCQltb3ZzCQlyMTIsIHIyLCBsc2wgIzI4IAorCQlsZG1jc2lhCQlyMSEsIHtyNCwgcjUsIHI2LCByN30JLyogMTYgYnl0ZXMgKi8KKwkJbGRtbWlpYQkJcjEhLCB7cjgsIHI5fQkJCS8qICA4IGJ5dGVzICovCisJCXN0bWNzaWEJCXIwISwge3I0LCByNSwgcjYsIHI3fQorCQlzdG1taWlhCQlyMCEsIHtyOCwgcjl9CisJCW1vdnMJCXIxMiwgcjIsIGxzbCAjMzAKKwkJbGRyY3MJCXIzLCBbcjFdLCAjNAkJCS8qICA0IGJ5dGVzICovCisJCWxkcm1paAkJcjQsIFtyMV0sICMyCQkJLyogIDIgYnl0ZXMgKi8KKwkJc3RyY3MJCXIzLCBbcjBdLCAjNAkJCisJCXN0cm1paAkJcjQsIFtyMF0sICMyCisJCXRzdCAgICAgICAgIHIyLCAjMHgxCisJCWxkcm5lYgkJcjMsIFtyMV0JCQkJLyogIGxhc3QgYnl0ZSAgKi8KKwkJc3RybmViCQlyMywgW3IwXQorCisJCS8qIHdlJ3JlIGRvbmUhIHJlc3RvcmUgZXZlcnl0aGluZyBhbmQgcmV0dXJuICovCisxOgkJbGRtZmQJCXNwISwge3I1LXIxMX0KKwkJbGRtZmQJCXNwISwge3IwLCByNCwgbHJ9CisJCWJ4CQkJbHIKKworCQkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK25vbl9jb25ncnVlbnQ6CisJCS8qCisJCSAqIGhlcmUgc291cmNlIGlzIGFsaWduZWQgdG8gNCBieXRlcworCQkgKiBidXQgZGVzdGluYXRpb24gaXMgbm90LgorCQkgKgorCQkgKiBpbiB0aGUgY29kZSBiZWxvdyByMiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHJlYWQgCisJCSAqICh0aGUgbnVtYmVyIG9mIGJ5dGVzIHdyaXR0ZW4gaXMgYWx3YXlzIHNtYWxsZXIsIGJlY2F1c2Ugd2UgaGF2ZQorCQkgKiBwYXJ0aWFsIHdvcmRzIGluIHRoZSBzaGlmdCBxdWV1ZSkKKwkJICovCisJCWNtcAkJCXIyLCAjNAorCQlibG8JCQljb3B5X2xhc3RfM19hbmRfcmV0dXJuCisJCQorICAgICAgICAvKiBVc2UgcG9zdC1pbmNyaW1lbnQgbW9kZSBmb3Igc3RtIHRvIHNwaWxsIHI1LXIxMSB0byByZXNlcnZlZCBzdGFjaworICAgICAgICAgKiBmcmFtZS4gRG9uJ3QgdXBkYXRlIHNwLgorICAgICAgICAgKi8KKyAgICAgICAgc3RtZWEJCXNwLCB7cjUtcjExfQorCQkKKwkJLyogY29tcHV0ZSBzaGlmdHMgbmVlZGVkIHRvIGFsaWduIHNyYyB0byBkZXN0ICovCisJCXJzYgkJCXI1LCByMCwgIzAKKwkJYW5kCQkJcjUsIHI1LCAjMwkJCS8qIHI1ID0gIyBieXRlcyBpbiBwYXJ0aWFsIHdvcmRzICovCisJCW1vdgkJCXIxMiwgcjUsIGxzbCAjMwkJLyogcjEyID0gcmlnaHQgKi8gCisJCXJzYgkJCWxyLCByMTIsICMzMgkJLyogbHIgPSBsZWZ0ICAqLworCQkKKwkJLyogcmVhZCB0aGUgZmlyc3Qgd29yZCAqLworCQlsZHIJCQlyMywgW3IxXSwgIzQKKwkJc3ViCQkJcjIsIHIyLCAjNAorCQkKKwkJLyogd3JpdGUgYSBwYXJ0aWFsIHdvcmQgKDAgdG8gMyBieXRlcyksIHN1Y2ggdGhhdCBkZXN0aW5hdGlvbgorCQkgKiBiZWNvbWVzIGFsaWduZWQgdG8gMzIgYml0cyAocjUgPSBuYiBvZiB3b3JkcyB0byBjb3B5IGZvciBhbGlnbm1lbnQpCisJCSAqLworCQltb3ZzCQlyNSwgcjUsIGxzbCAjMzEKKwkJc3RybWliCQlyMywgW3IwXSwgIzEKKwkJbW92bWkJCXIzLCByMywgbHNyICM4CQkKKwkJc3RyY3NiCQlyMywgW3IwXSwgIzEKKwkJbW92Y3MJCXIzLCByMywgbHNyICM4CisJCXN0cmNzYgkJcjMsIFtyMF0sICMxCisJCW1vdmNzCQlyMywgcjMsIGxzciAjOAorCisJCWNtcAkJCXIyLCAjNAorCQlibG8JCQlwYXJ0aWFsX3dvcmRfdGFpbAorCQkKKwkJLyogQWxpZ24gZGVzdGluYXRpb24gdG8gMzIgYnl0ZXMgKGNhY2hlIGxpbmUgYm91bmRhcnkpICovCisxOgkJdHN0CQkJcjAsICMweDFjCisJCWJlcQkJCTJmCisJCWxkcgkJCXI1LCBbcjFdLCAjNAorCQlzdWIgICAgICAgICByMiwgcjIsICM0CisJCW9ycgkJCXI0LCByMywgcjUsCQlsc2wgbHIKKwkJbW92CQkJcjMsIHI1LAkJCWxzciByMTIKKwkJc3RyCQkJcjQsIFtyMF0sICM0CisgICAgICAgIGNtcCAgICAgICAgIHIyLCAjNAorCQliaHMJCQkxYgorCQlibG8JCQlwYXJ0aWFsX3dvcmRfdGFpbAorCisJCS8qIGNvcHkgMzIgYnl0ZXMgYXQgYSB0aW1lICovCisyOgkJc3VicwkJcjIsIHIyLCAjMzIKKwkJYmxvCQkJbGVzc190aGFuX3RoaXJ0eXR3bworCisJCS8qIFVzZSBpbW1lZGlhdGUgbW9kZSBmb3IgdGhlIHNoaWZ0cywgYmVjYXVzZSB0aGVyZSBpcyBhbiBleHRyYSBjeWNsZQorCQkgKiBmb3IgcmVnaXN0ZXIgc2hpZnRzLCB3aGljaCBjb3VsZCBhY2NvdW50IGZvciB1cCB0byA1MCUgb2YKKwkJICogcGVyZm9ybWFuY2UgaGl0LgorCQkgKi8KKworICAgICAgICBjbXAJCQlyMTIsICMyNAorCQliZXEJCQlsb29wMjQKKwkJY21wCQkJcjEyLCAjOAorCQliZXEJCQlsb29wOAorCitsb29wMTY6CisgICAgICAgIGxkciAgICAgICAgIHIxMiwgW3IxXSwgIzQKKzE6ICAgICAgbW92ICAgICAgICAgcjQsIHIxMgorCQlsZG1pYQkJcjEhLCB7ICAgcjUscjYscjcsICByOCxyOSxyMTAscjExfQorICAgICAgICBwbGQgICAgICAgICBbcjEsICM2NF0KKwkJc3VicwkJcjIsIHIyLCAjMzIKKyAgICAgICAgbGRyaHMgICAgICAgcjEyLCBbcjFdLCAjNAorCQlvcnIJCQlyMywgcjMsIHI0LAkJbHNsICMxNgorCQltb3YJCQlyNCwgcjQsCQkJbHNyICMxNgorCQlvcnIJCQlyNCwgcjQsIHI1LAkJbHNsICMxNgorCQltb3YJCQlyNSwgcjUsCQkJbHNyICMxNgorCQlvcnIJCQlyNSwgcjUsIHI2LAkJbHNsICMxNgorCQltb3YJCQlyNiwgcjYsCQkJbHNyICMxNgorCQlvcnIJCQlyNiwgcjYsIHI3LAkJbHNsICMxNgorCQltb3YJCQlyNywgcjcsCQkJbHNyICMxNgorCQlvcnIJCQlyNywgcjcsIHI4LAkJbHNsICMxNgorCQltb3YJCQlyOCwgcjgsCQkJbHNyICMxNgorCQlvcnIJCQlyOCwgcjgsIHI5LAkJbHNsICMxNgorCQltb3YJCQlyOSwgcjksCQkJbHNyICMxNgorCQlvcnIJCQlyOSwgcjksIHIxMCwJbHNsICMxNgorCQltb3YJCQlyMTAsIHIxMCwJCWxzciAjMTYKKwkJb3JyCQkJcjEwLCByMTAsIHIxMSwJbHNsICMxNgorCQlzdG1pYQkJcjAhLCB7cjMscjQscjUscjYsIHI3LHI4LHI5LHIxMH0KKwkJbW92CQkJcjMsIHIxMSwJCWxzciAjMTYKKwkJYmhzCQkJMWIKKwkJYgkJCWxlc3NfdGhhbl90aGlydHl0d28KKworbG9vcDg6CisgICAgICAgIGxkciAgICAgICAgIHIxMiwgW3IxXSwgIzQKKzE6ICAgICAgbW92ICAgICAgICAgcjQsIHIxMgorCQlsZG1pYQkJcjEhLCB7ICAgcjUscjYscjcsICByOCxyOSxyMTAscjExfQorICAgICAgICBwbGQgICAgICAgICBbcjEsICM2NF0KKwkJc3VicwkJcjIsIHIyLCAjMzIKKyAgICAgICAgbGRyaHMgICAgICAgcjEyLCBbcjFdLCAjNAorCQlvcnIJCQlyMywgcjMsIHI0LAkJbHNsICMyNAorCQltb3YJCQlyNCwgcjQsCQkJbHNyICM4CisJCW9ycgkJCXI0LCByNCwgcjUsCQlsc2wgIzI0CisJCW1vdgkJCXI1LCByNSwJCQlsc3IgIzgKKwkJb3JyCQkJcjUsIHI1LCByNiwJCWxzbCAjMjQKKwkJbW92CQkJcjYsIHI2LAkJCWxzciAjOAorCQlvcnIJCQlyNiwgcjYsIHI3LAkJbHNsICMyNAorCQltb3YJCQlyNywgcjcsCQkJbHNyICM4CisJCW9ycgkJCXI3LCByNywgcjgsCQlsc2wgIzI0CisJCW1vdgkJCXI4LCByOCwJCQlsc3IgIzgKKwkJb3JyCQkJcjgsIHI4LCByOSwJCWxzbCAjMjQKKwkJbW92CQkJcjksIHI5LAkJCWxzciAjOAorCQlvcnIJCQlyOSwgcjksIHIxMCwJbHNsICMyNAorCQltb3YJCQlyMTAsIHIxMCwJCWxzciAjOAorCQlvcnIJCQlyMTAsIHIxMCwgcjExLAlsc2wgIzI0CisJCXN0bWlhCQlyMCEsIHtyMyxyNCxyNSxyNiwgcjcscjgscjkscjEwfQorCQltb3YJCQlyMywgcjExLAkJbHNyICM4CisJCWJocwkJCTFiCisJCWIJCQlsZXNzX3RoYW5fdGhpcnR5dHdvCisKK2xvb3AyNDoKKyAgICAgICAgbGRyICAgICAgICAgcjEyLCBbcjFdLCAjNAorMTogICAgICBtb3YgICAgICAgICByNCwgcjEyCisJCWxkbWlhCQlyMSEsIHsgICByNSxyNixyNywgIHI4LHI5LHIxMCxyMTF9CisgICAgICAgIHBsZCAgICAgICAgIFtyMSwgIzY0XQorCQlzdWJzCQlyMiwgcjIsICMzMgorICAgICAgICBsZHJocyAgICAgICByMTIsIFtyMV0sICM0CisJCW9ycgkJCXIzLCByMywgcjQsCQlsc2wgIzgKKwkJbW92CQkJcjQsIHI0LAkJCWxzciAjMjQKKwkJb3JyCQkJcjQsIHI0LCByNSwJCWxzbCAjOAorCQltb3YJCQlyNSwgcjUsCQkJbHNyICMyNAorCQlvcnIJCQlyNSwgcjUsIHI2LAkJbHNsICM4CisJCW1vdgkJCXI2LCByNiwJCQlsc3IgIzI0CisJCW9ycgkJCXI2LCByNiwgcjcsCQlsc2wgIzgKKwkJbW92CQkJcjcsIHI3LAkJCWxzciAjMjQKKwkJb3JyCQkJcjcsIHI3LCByOCwJCWxzbCAjOAorCQltb3YJCQlyOCwgcjgsCQkJbHNyICMyNAorCQlvcnIJCQlyOCwgcjgsIHI5LAkJbHNsICM4CisJCW1vdgkJCXI5LCByOSwJCQlsc3IgIzI0CisJCW9ycgkJCXI5LCByOSwgcjEwLAlsc2wgIzgKKwkJbW92CQkJcjEwLCByMTAsCQlsc3IgIzI0CisJCW9ycgkJCXIxMCwgcjEwLCByMTEsCWxzbCAjOAorCQlzdG1pYQkJcjAhLCB7cjMscjQscjUscjYsIHI3LHI4LHI5LHIxMH0KKwkJbW92CQkJcjMsIHIxMSwJCWxzciAjMjQKKwkJYmhzCQkJMWIKKworCitsZXNzX3RoYW5fdGhpcnR5dHdvOgorCQkvKiBjb3B5IHRoZSBsYXN0IDAgdG8gMzEgYnl0ZXMgb2YgdGhlIHNvdXJjZSAqLworCQlyc2IJCQlyMTIsIGxyLCAjMzIJCS8qIHdlIGNvcnJ1cHRlZCByMTIsIHJlY29tcHV0ZSBpdCAgKi8KKwkJYWRkCQkJcjIsIHIyLCAjMzIKKwkJY21wCQkJcjIsICM0CisJCWJsbwkJCXBhcnRpYWxfd29yZF90YWlsCisKKzE6CQlsZHIJCQlyNSwgW3IxXSwgIzQKKwkJc3ViICAgICAgICAgcjIsIHIyLCAjNAorCQlvcnIJCQlyNCwgcjMsIHI1LAkJbHNsIGxyCisJCW1vdgkJCXIzLAlyNSwJCQlsc3IgcjEyCisJCXN0cgkJCXI0LCBbcjBdLCAjNAorICAgICAgICBjbXAgICAgICAgICByMiwgIzQKKwkJYmhzCQkJMWIKKworcGFydGlhbF93b3JkX3RhaWw6CisJCS8qIHdlIGhhdmUgYSBwYXJ0aWFsIHdvcmQgaW4gdGhlIGlucHV0IGJ1ZmZlciAqLworCQltb3ZzCQlyNSwgbHIsIGxzbCAjKDMxLTMpCisJCXN0cm1pYgkJcjMsIFtyMF0sICMxCisJCW1vdm1pCQlyMywgcjMsIGxzciAjOAorCQlzdHJjc2IJCXIzLCBbcjBdLCAjMQorCQltb3ZjcwkJcjMsIHIzLCBsc3IgIzgKKwkJc3RyY3NiCQlyMywgW3IwXSwgIzEKKwkJCisJCS8qIFJlZmlsbCBzcGlsbGVkIHJlZ2lzdGVycyBmcm9tIHRoZSBzdGFjay4gRG9uJ3QgdXBkYXRlIHNwLiAqLworCQlsZG1mZAkJc3AsIHtyNS1yMTF9CisKK2NvcHlfbGFzdF8zX2FuZF9yZXR1cm46CisJCW1vdnMJCXIyLCByMiwgbHNsICMzMQkvKiBjb3B5IHJlbWFpbmluZyAwLCAxLCAyIG9yIDMgYnl0ZXMgKi8KKwkJbGRybWliCQlyMiwgW3IxXSwgIzEKKwkJbGRyY3NiCQlyMywgW3IxXSwgIzEKKwkJbGRyY3NiCQlyMTIsW3IxXQorCQlzdHJtaWIJCXIyLCBbcjBdLCAjMQorCQlzdHJjc2IJCXIzLCBbcjBdLCAjMQorCQlzdHJjc2IJCXIxMixbcjBdCisKKyAgICAgICAgLyogd2UncmUgZG9uZSEgcmVzdG9yZSBzcCBhbmQgc3BpbGxlZCByZWdpc3RlcnMgYW5kIHJldHVybiAqLworICAgICAgICBhZGQgICAgICAgICBzcCwgIHNwLCAjMjgKKwkJbGRtZmQJCXNwISwge3IwLCByNCwgbHJ9CisJCWJ4CQkJbHIKKyAgICAgICAgLmZuZW5kCisKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbXNldC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUyZDYyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL21lbXNldC5TCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisJLnRleHQKKworICAgIC5nbG9iYWwgbWVtc2V0CisgICAgLnR5cGUgbWVtc2V0LCAlZnVuY3Rpb24KKworICAgIC5nbG9iYWwgYnplcm8KKyAgICAudHlwZSBiemVybywgJWZ1bmN0aW9uCisKKyAgICAuYWxpZ24KKwkKKwkJLyoKKwkJICogT3B0aW1pemVkIG1lbXNldCgpIGZvciBBUk0uCisgICAgICAgICAqCisgICAgICAgICAqIG1lbXNldCgpIHJldHVybnMgaXRzIGZpcnN0IGFyZ3VtZW50LgorCQkgKi8KKwkKK2J6ZXJvOgorICAgICAgICBtb3YgICAgIHIyLCByMQorICAgICAgICBtb3YgICAgIHIxLCAjMAorCittZW1zZXQ6CQorCQkvKiBjb21wdXRlIHRoZSBvZmZzZXQgdG8gYWxpZ24gdGhlIGRlc3RpbmF0aW9uCisJCSAqIG9mZnNldCA9ICg0LShzcmMmMykpJjMgPSAtc3JjICYgMworCQkgKi8KKyAgICAgICAgLmZuc3RhcnQKKyAgICAgICAgLnNhdmUgICAgICAge3IwLCByNC1yNywgbHJ9CisJCXN0bWZkCQlzcCEsIHtyMCwgcjQtcjcsIGxyfQorCQlyc2IJCQlyMywgcjAsICMwCisJCWFuZHMJCXIzLCByMywgIzMKKyAgICAgICAgY21wICAgICAgICAgcjMsIHIyCisgICAgICAgIG1vdmhpICAgICAgIHIzLCByMgorCisgICAgICAgIC8qIHNwbGF0IHIxICovCisgICAgICAgIG1vdiAgICAgICAgIHIxLCByMSwgbHNsICMyNAorICAgICAgICBvcnIgICAgICAgICByMSwgcjEsIHIxLCBsc3IgIzgKKyAgICAgICAgb3JyICAgICAgICAgcjEsIHIxLCByMSwgbHNyICMxNgorCisJCW1vdnMJCXIxMiwgcjMsIGxzbCAjMzEKKwkJc3RyY3NiCQlyMSwgW3IwXSwgIzEgICAgLyogY2FuJ3QgdXNlIHN0cmggKGFsaWdubWVudCB1bmtub3duKSAqLworCQlzdHJjc2IJCXIxLCBbcjBdLCAjMQorCQlzdHJtaWIJCXIxLCBbcjBdLCAjMQorCQlzdWJzCQlyMiwgcjIsIHIzCisgICAgICAgIGxkbWxzZmQgICAgIHNwISwge3IwLCByNC1yNywgbHJ9ICAgLyogcmV0dXJuICovCisgICAgICAgIGJ4bHMgICAgICAgIGxyCisKKwkJLyogYWxpZ24gdGhlIGRlc3RpbmF0aW9uIHRvIGEgY2FjaGUtbGluZSAqLworICAgICAgICBtb3YgICAgICAgICByMTIsIHIxCisgICAgICAgIG1vdiAgICAgICAgIGxyLCByMQorICAgICAgICBtb3YgICAgICAgICByNCwgcjEKKyAgICAgICAgbW92ICAgICAgICAgcjUsIHIxCisgICAgICAgIG1vdiAgICAgICAgIHI2LCByMQorICAgICAgICBtb3YgICAgICAgICByNywgcjEKKyAgICAgICAgCisJCXJzYiAgICAgICAgIHIzLCByMCwgIzAKKwkJYW5kcwkJcjMsIHIzLCAjMHgxQworCQliZXEgICAgICAgICBhbGlnbmVkMzIKKwkJY21wICAgICAgICAgcjMsIHIyCisJCWFuZGhpCQlyMywgcjIsICMweDFDCisJCXN1YiAgICAgICAgIHIyLCByMiwgcjMKKworCQkvKiBjb25kaXRpb25uYWx5IHdyaXRlcyAwIHRvIDcgd29yZHMgKGxlbmd0aCBpbiByMykgKi8KKwkJbW92cwkJcjMsIHIzLCBsc2wgIzI4CisJCXN0bWNzaWEJCXIwISwge3IxLCBscn0KKwkJc3RtY3NpYQkJcjAhLCB7cjEsIGxyfQorCQlzdG1taWlhCQlyMCEsIHtyMSwgbHJ9CisJCW1vdnMJCXIzLCByMywgbHNsICMyCisgICAgICAgIHN0cmNzICAgICAgIHIxLCBbcjBdLCAjNAorCithbGlnbmVkMzI6CisgICAgICAgIHN1YnMgICAgICAgIHIyLCByMiwgIzMyCisgICAgICAgIG1vdiAgICAgICAgIHIzLCByMQorICAgICAgICBibWkgICAgICAgICAyZgorMTogICAgICBzdWJzICAgICAgICByMiwgcjIsICMzMgorICAgICAgICBzdG1pYQkJcjAhLCB7cjEscjMscjQscjUscjYscjcscjEyLGxyfQorICAgICAgICBiaHMgICAgICAgICAxYgorMjogICAgICBhZGQgICAgICAgICByMiwgcjIsICMzMgorCisJCS8qIGNvbmRpdGlvbm5hbHkgc3RvcmVzIDAgdG8gMzEgYnl0ZXMgKi8KKwkJbW92cwkJcjIsIHIyLCBsc2wgIzI4CisJCXN0bWNzaWEJCXIwISwge3IxLHIzLHIxMixscn0KKwkJc3RtbWlpYQkJcjAhLCB7cjEsIGxyfQorCQltb3ZzCQlyMiwgcjIsIGxzbCAjMgorICAgICAgICBzdHJjcyAgICAgICByMSwgW3IwXSwgIzQKKwkJc3RybWloCQlyMSwgW3IwXSwgIzIKKwkJbW92cwkJcjIsIHIyLCBsc2wgIzIKKwkJc3RyY3NiCQlyMSwgW3IwXQorICAgICAgICBsZG1mZAkJc3AhLCB7cjAsIHI0LXI3LCBscn0KKyAgICAgICAgYnggICAgICAgICAgbHIKKyAgICAgICAgLmZuZW5kCisgICAgCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3NldGptcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5ZjZlYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zZXRqbXAuUwpAQCAtMCwwICsxLDEzNiBAQAorLyoJJE9wZW5CU0Q6IHNldGptcC5TLHYgMS4yIDIwMDQvMDIvMDEgMDU6NDA6NTIgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IHNldGptcC5TLHYgMS41IDIwMDMvMDQvMDUgMjM6MDg6NTEgYmpoMjEgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBNYXJrIEJyaW5pY29tYmUKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgTWFyayBCcmluaWNvbWJlCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3NldGptcC5oPgorCisvKgorICogQyBsaWJyYXJ5IC0tIHNldGptcCwgbG9uZ2ptcAorICoKKyAqCWxvbmdqbXAoYSx2KQorICogd2lsbCBnZW5lcmF0ZSBhICJyZXR1cm4odikiIGZyb20gdGhlIGxhc3QgY2FsbCB0bworICoJc2V0am1wKGEpCisgKiBieSByZXN0b3JpbmcgcmVnaXN0ZXJzIGZyb20gdGhlIHN0YWNrLgorICogVGhlIHByZXZpb3VzIHNpZ25hbCBzdGF0ZSBpcyByZXN0b3JlZC4KKyAqLworCitFTlRSWShzZXRqbXApCisJLyogQmxvY2sgYWxsIHNpZ25hbHMgYW5kIHJldHJpZXZlIHRoZSBvbGQgc2lnbmFsIG1hc2sgKi8KKwlzdG1mZAlzcCEsIHtyMCwgcjE0fQorCW1vdglyMCwgIzB4MDAwMDAwMDAKKworCWJsCVBJQ19TWU0oX0NfTEFCRUwoc2lnYmxvY2spLCBQTFQpCisJbW92CXIxLCByMAorCisJbGRtZmQJc3AhLCB7cjAsIHIxNH0KKworCS8qIFN0b3JlIHNpZ25hbCBtYXNrICovCisJc3RyCXIxLCBbcjAsICMoMjUgKiA0KV0KKworCWxkcglyMSwgLkxzZXRqbXBfbWFnaWMKKwlzdHIJcjEsIFtyMF0sICM0CisKKyNpZmRlZiBTT0ZURkxPQVQKKwlhZGQJcjAsIHIwLCAjNTIKKyNlbHNlCisJLyogU3RvcmUgZnAgcmVnaXN0ZXJzICovCisJc2ZtCWY0LCA0LCBbcjBdLCAjNDgKKwkvKiBTdG9yZSBmcHNyICovCisJcmZzCXIxCisJc3RyCXIxLCBbcjBdLCAjMHgwMDA0CisjZW5kaWYJLypTT0ZURkxPQVQqLworCS8qIFN0b3JlIGludGVnZXIgcmVnaXN0ZXJzICovCisgICAgICAgIHN0bWlhCXIwLCB7cjQtcjE0fQorICAgICAgICBtb3YJcjAsICMweDAwMDAwMDAwCisgICAgICAgIGJ4ICAgICAgbHIKKworLkxzZXRqbXBfbWFnaWM6CisJLndvcmQJX0pCX01BR0lDX1NFVEpNUAorCisKK0VOVFJZKGxvbmdqbXApCisJbGRyCXIyLCAuTHNldGptcF9tYWdpYworCWxkcglyMywgW3IwXQorCXRlcQlyMiwgcjMKKwlibmUJYm90Y2gKKworCS8qIEZldGNoIHNpZ25hbCBtYXNrICovCisJbGRyCXIyLCBbcjAsICMoMjUgKiA0KV0KKworCS8qIFNldCBzaWduYWwgbWFzayAqLworCXN0bWZkCXNwISwge3IwLCByMSwgcjE0fQorCXN1YglzcCwgc3AsICM0CS8qIGFsaWduIHRoZSBzdGFjayAqLworCisJbW92CXIwLCByMgorCWJsCVBJQ19TWU0oX0NfTEFCRUwoc2lnc2V0bWFzayksIFBMVCkKKworCWFkZAlzcCwgc3AsICM0CS8qIHVuYWxpZ24gdGhlIHN0YWNrICovCisJbGRtZmQJc3AhLCB7cjAsIHIxLCByMTR9IAorCisJYWRkCXIwLCByMCwgIzQKKyNpZmRlZiBTT0ZURkxPQVQKKwlhZGQJcjAsIHIwLCAjNTIKKyNlbHNlCisJLyogUmVzdG9yZSBmcCByZWdpc3RlcnMgKi8KKwlsZm0JZjQsIDQsIFtyMF0sICM0OAorCS8qIFJlc3RvcmUgRlBTUiAqLworCWxkcglyNCwgW3IwXSwgIzB4MDAwNAorCXdmcwlyNAorI2VuZGlmCS8qIFNPRlRGTE9BVCAqLworCS8qIFJlc3RvcmUgaW50ZWdlciByZWdpc3RlcnMgKi8KKyAgICAgICAgbGRtaWEJcjAsIHtyNC1yMTR9CisKKwkvKiBWYWxpZGF0ZSBzcCBhbmQgcjE0ICovCisJdGVxCXNwLCAjMAorCXRlcW5lCXIxNCwgIzAKKwliZXEJYm90Y2gKKworCS8qIFNldCByZXR1cm4gdmFsdWUgKi8KKworCW1vdglyMCwgcjEKKwl0ZXEJcjAsICMweDAwMDAwMDAwCisJbW92ZXEJcjAsICMweDAwMDAwMDAxCisgICAgICAgIGJ4ICAgICAgbHIKKyNpZmRlZiBfX0FSTV8yNl9fCisJbW92CXIxNSwgcjE0CisjZWxzZQorCW1vdglyMTUsIHIxNAorI2VuZGlmCisKKwkvKiB2YWxpZGF0aW9uIGZhaWxlZCwgZGllIGRpZSBkaWUuICovCitib3RjaDoKKwlibAlQSUNfU1lNKF9DX0xBQkVMKGxvbmdqbXBlcnJvciksIFBMVCkKKwlibAlQSUNfU1lNKF9DX0xBQkVMKGFib3J0KSwgUExUKQorCWIJLiAtIDgJCS8qIENhbm5vdCBnZXQgaGVyZSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMgYi9saWJjL2FyY2gtYXJtL2Jpb25pYy9zaWdzZXRqbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU2NDI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc2lnc2V0am1wLlMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IHNpZ3NldGptcC5TLHYgMS4yIDIwMDQvMDIvMDEgMDU6NDA6NTIgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IHNpZ3NldGptcC5TLHYgMS4zIDIwMDIvMDgvMTcgMTk6NTQ6MzAgdGhvcnBlaiBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IE1hcmsgQnJpbmljb21iZQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSBNYXJrIEJyaW5pY29tYmUKKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CisKKy8qCisgKiBDIGxpYnJhcnkgLS0gc2lnc2V0am1wLCBzaWdsb25nam1wCisgKgorICoJbG9uZ2ptcChhLHYpCisgKiB3aWxsIGdlbmVyYXRlIGEgInJldHVybih2KSIgZnJvbSB0aGUgbGFzdCBjYWxsIHRvCisgKglzZXRqbXAoYSwgbSkKKyAqIGJ5IHJlc3RvcmluZyByZWdpc3RlcnMgZnJvbSB0aGUgc3RhY2suCisgKiBUaGUgcHJldmlvdXMgc2lnbmFsIHN0YXRlIGlzIHJlc3RvcmVkLgorICovCisKK0VOVFJZKHNpZ3NldGptcCkKKwl0ZXEJcjEsICMwCisJYmVxCVBJQ19TWU0oX0NfTEFCRUwoX3NldGptcCksIFBMVCkKKwliCVBJQ19TWU0oX0NfTEFCRUwoc2V0am1wKSwgUExUKQorCisuTF9zZXRqbXBfbWFnaWM6CisJLndvcmQJX0pCX01BR0lDX19TRVRKTVAKKworRU5UUlkoc2lnbG9uZ2ptcCkKKwlsZHIJcjIsIC5MX3NldGptcF9tYWdpYworCWxkcglyMywgW3IwXQorCXRlcQlyMiwgcjMKKwliZXEJUElDX1NZTShfQ19MQUJFTChfbG9uZ2ptcCksIFBMVCkKKwliCVBJQ19TWU0oX0NfTEFCRUwobG9uZ2ptcCksIFBMVCkKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmxlbi5jIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3RybGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2QxZmU0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N0cmxlbi5jCkBAIC0wLDAgKzEsMTI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3NpemVfdCBzdHJsZW4oY29uc3QgY2hhciAqcykKK3sKKyAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocyk7CisgICAgX19idWlsdGluX3ByZWZldGNoKHMrMzIpOworICAgIAorICAgIHVuaW9uIHsKKyAgICAgICAgY29uc3QgY2hhciAgICAgICpiOworICAgICAgICBjb25zdCB1aW50MzJfdCAgKnc7CisgICAgICAgIHVpbnRwdHJfdCAgICAgICBpOworICAgIH0gdTsKKyAgICAKKyAgICAvLyB0aGVzZSBhcmUgc29tZSBzY3JhdGNoIHZhcmlhYmxlcyBmb3IgdGhlIGFzbSBjb2RlIGJlbG93CisgICAgdWludDMyX3QgdiwgdDsKKyAgICAKKyAgICAvLyBpbml0aWFsaXplIHRoZSBzdHJpbmcgbGVuZ3RoIHRvIHplcm8KKyAgICBzaXplX3QgbCA9IDA7CisKKyAgICAvLyBhbGlnbiB0aGUgcG9pbnRlciB0byBhIDMyLWJpdCB3b3JkIGJvdW5kYXJ5CisgICAgdS5iID0gczsKKyAgICB3aGlsZSAodS5pICYgMHgzKSAgeworICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdCgqdS5iKysgPT0gMCwgMCkpIHsKKyAgICAgICAgICAgIGdvdG8gZG9uZTsKKyAgICAgICAgfQorICAgICAgICBsKys7CisgICAgfQorCisgICAgLy8gbG9vcCBmb3IgZWFjaCB3b3JkLCB0ZXN0aW5nIGlmIGl0IGNvbnRhaW5zIGEgemVybyBieXRlCisgICAgLy8gaWYgc28sIGV4aXQgdGhlIGxvb3AgYW5kIHVwZGF0ZSB0aGUgbGVuZ3RoLgorICAgIC8vIFdlIG5lZWQgdG8gcHJvY2VzcyAzMiBieXRlcyBwZXIgbG9vcCB0byBzY2hlZHVsZSBQTEQgcHJvcGVybHkKKyAgICAvLyBhbmQgYWNoaWV2ZSB0aGUgbWF4aW11bSBidXMgc3BlZWQuCisgICAgYXNtKAorICAgICAgICAibGRyICAgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVtsXSwgJVtsXSwgJVtzXSAgICAgICAgICAgXG4iCisgICAgICAgICIwOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAicGxkICAgICBbICVbc10sICM2NCBdICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisjaWYgIWRlZmluZWQoX19PUFRJTUlaRV9TSVpFX18pCisgICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKKyAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCisgICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgorICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisgICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKKyAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCisgICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyAgICAgICAgImJuZSAgICAgMWYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJzdWIgICAgICVbdF0sICVbdl0sICVbbWFza10sIGxzciAjN1xuIgorICAgICAgICAiYW5kICAgICAlW3RdLCAlW3RdLCAlW21hc2tdICAgICAgICBcbiIKKyAgICAgICAgImJpY3MgICAgJVt0XSwgJVt0XSwgJVt2XSAgICAgICAgICAgXG4iCisgICAgICAgICJsZHJlcSAgICVbdl0sIFsgJVtzXSBdLCAjNCAgICAgICAgIFxuIgorICAgICAgICAiYm5lICAgICAxZiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgInN1YiAgICAgJVt0XSwgJVt2XSwgJVttYXNrXSwgbHNyICM3XG4iCisgICAgICAgICJhbmQgICAgICVbdF0sICVbdF0sICVbbWFza10gICAgICAgIFxuIgorICAgICAgICAiYmljcyAgICAlW3RdLCAlW3RdLCAlW3ZdICAgICAgICAgICBcbiIKKyAgICAgICAgImxkcmVxICAgJVt2XSwgWyAlW3NdIF0sICM0ICAgICAgICAgXG4iCisgICAgICAgICJibmUgICAgIDFmICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICAic3ViICAgICAlW3RdLCAlW3ZdLCAlW21hc2tdLCBsc3IgIzdcbiIKKyAgICAgICAgImFuZCAgICAgJVt0XSwgJVt0XSwgJVttYXNrXSAgICAgICAgXG4iCisgICAgICAgICJiaWNzICAgICVbdF0sICVbdF0sICVbdl0gICAgICAgICAgIFxuIgorICAgICAgICAibGRyZXEgICAlW3ZdLCBbICVbc10gXSwgIzQgICAgICAgICBcbiIKKyNlbmRpZgorICAgICAgICAiYmVxICAgICAwYiAgICAgICAgICAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgIjE6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICVbc10gICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRiAgICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwICAgICAgICAgICAgICBcbiIKKyAgICAgICAgImJlcSAgICAgMmYgICAgICAgICAgICAgICAgICAgICAgICAgXG4iCisgICAgICAgICJhZGQgICAgICVbbF0sICVbbF0sICMxICAgICAgICAgICAgIFxuIgorICAgICAgICAidHN0ICAgICAlW3ZdLCAjMHhGRjAwMDAgICAgICAgICAgICBcbiIKKyAgICAgICAgImFkZG5lICAgJVtsXSwgJVtsXSwgIzEgICAgICAgICAgICAgXG4iCisgICAgICAgICIyOiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuIgorICAgICAgICA6IFtsXSI9JnIiKGwpLCBbdl0iPSZyIih2KSwgW3RdIj0mciIodCksIFtzXSI9JnIiKHUuYikKKyAgICAgICAgOiAiJVtsXSIobCksICIlW3NdIih1LmIpLCBbbWFza10iciIoMHg4MDgwODA4MFVMKQorICAgICAgICA6ICJjYyIKKyAgICApOworICAgIAorZG9uZToKKyAgICByZXR1cm4gbDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUyBiL2xpYmMvYXJjaC1hcm0vYmlvbmljL3N5c2NhbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZGExMmE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvc3lzY2FsbC5TCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworCisJLnRleHQKKwkuYWxpZ24gNAorCS50eXBlIHN5c2NhbGwsI2Z1bmN0aW9uCisJLmdsb2JsIHN5c2NhbGwKKyAKKwkudGV4dAorCS5hbGlnbgorCisjaWYgX19BUk1fRUFCSV9fCisKK3N5c2NhbGw6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICBzdG1mZAlzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3YgICAgIHI3LCByMAorICAgIG1vdiAgICAgcjAsIHIxCisgICAgbW92ICAgICByMSwgcjIKKyAgICBtb3YgICAgIHIyLCByMworICAgIGxkbWZkCWlwLCB7cjMsIHI0LCByNSwgcjZ9CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisKKyNlbHNlCisKKyNpZm5kZWYgX19OUl9zeXNjYWxsCisjZGVmaW5lIF9fTlJfc3lzY2FsbCAgICAxMTMKKyNlbmRpZgorCitzeXNjYWxsOgorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCBscn0KKyAgICBsZHIgICAgIHI0LCBbc3AsICMxMl0KKyAgICBsZHIgICAgIHI1LCBbc3AsICMxNl0KKyAgICBzd2kgICAgIF9fTlJfc3lzY2FsbAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCBscn0KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2Jpb25pYy90a2lsbC5TIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvdGtpbGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjMzMDFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9iaW9uaWMvdGtpbGwuUwpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKiB1bmxpa2Ugb3VyIGF1dG8tZ2VuZXJhdGVkIHN5c2NhbGwgc3R1YnMsIHRoaXMgY29kZSBzYXZlcyBscgorICAgb24gdGhlIHN0YWNrLCBhcyB3ZWxsIGFzIGEgZmV3IG90aGVyIHJlZ2lzdGVycy4gdGhpcyBtYWtlcworICAgb3VyIHN0YWNrIHVud2luZGVyIGhhcHB5LCB3aGVuIHdlIGdlbmVyYXRlIGRlYnVnIHN0YWNrCisgICB0cmFjZXMgYWZ0ZXIgdGhlIEMgbGlicmFyeSBvciBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtCisgICBhYm9ydCBkdWUgdG8gYSBmYXRhbCBydW50aW1lIGVycm9yIChlLmcuIGRldGVjdGlvbgorICAgb2YgYSBjb3JydXB0ZWQgbWFsbG9jIGhlYXApLgorKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworI2lmbmRlZiBfX05SX3RraWxsCisjZGVmaW5lIF9fTlJfdGtpbGwgIDIzOAorI2VuZGlmCisKKyAgICAudGV4dAorICAgIC50eXBlIHRraWxsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGtpbGwKKyAgICAuYWxpZ24gNAorCit0a2lsbDoKKyAgICBzdG1mZCAgIHNwISwge3I0LXI3LCBpcCwgbHJ9CisgICAgbGRyICAgICByNywgPV9fTlJfdGtpbGwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNC1yNywgaXAsIGxyfQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL2FzbSBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9hc20KbmV3IGZpbGUgbW9kZSAxMjAwMDAKaW5kZXggMDAwMDAwMC4uZjk0ODdmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9hc20KQEAgLTAsMCArMSBAQAorL3RtcC9iaW9uaWMta2VybmVsLWhlYWRlcnMvYXNtLWFybQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9lbmRpYW4uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9lbmRpYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDIwNGVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL2VuZGlhbi5oCkBAIC0wLDAgKzEsMTAgQEAKKy8qCSRPcGVuQlNEOiBlbmRpYW4uaCx2IDEuMyAyMDA1LzEyLzEzIDAwOjM1OjIzIG1pbGxlcnQgRXhwICQJKi8KKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBfQllURV9PUkRFUiBfQklHX0VORElBTgorI2Vsc2UKKyNkZWZpbmUgX0JZVEVfT1JERVIgX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2RlZmluZQlfX1NUUklDVF9BTElHTk1FTlQKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZW5kaWFuLmg+CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNmM2YwMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApAQCAtMCwwICsxLDEyMSBAQAorLyoJJE9wZW5CU0Q6IF90eXBlcy5oLHYgMS4zIDIwMDYvMDIvMTQgMTg6MTI6NTggbWlvZCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyl0eXBlcy5oCTguMyAoQmVya2VsZXkpIDEvNS85NAorICoJQCgjKWFuc2kuaAk4LjIgKEJlcmtlbGV5KSAxLzQvOTQKKyAqLworCisjaWZuZGVmIF9BUk1fX1RZUEVTX0hfCisjZGVmaW5lIF9BUk1fX1RZUEVTX0hfCisKKworI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKKy8qIHRoZSBrZXJuZWwgZGVmaW5lcyBzaXplX3QgYXMgdW5zaWduZWQgaW50LCBidXQgZysrIHdhbnRzIGl0IHRvIGJlIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgX1NJWkVfVAorI2RlZmluZSBfU1NJWkVfVAorI2RlZmluZSBfUFRSRElGRl9UCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgIHNpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgc3NpemVfdDsKK3R5cGVkZWYgbG9uZyAgICAgICAgICAgcHRyZGlmZl90OworI2VuZGlmCisKKy8vI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKy8qIDcuMTguMS4xIEV4YWN0LXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19zaWduZWQgY2hhcgkJX19pbnQ4X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGNoYXIJCV9fdWludDhfdDsKK3R5cGVkZWYJc2hvcnQJCQlfX2ludDE2X3Q7Cit0eXBlZGVmCXVuc2lnbmVkIHNob3J0CQlfX3VpbnQxNl90OwordHlwZWRlZglpbnQJCQlfX2ludDMyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludAkJX191aW50MzJfdDsKKy8qIExPTkdMT05HICovCit0eXBlZGVmCWxvbmcgbG9uZwkJX19pbnQ2NF90OworLyogTE9OR0xPTkcgKi8KK3R5cGVkZWYJdW5zaWduZWQgbG9uZyBsb25nCV9fdWludDY0X3Q7CisKKy8qIDcuMTguMS4yIE1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDhfdAkJX19pbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDhfdAkJX191aW50X2xlYXN0OF90OwordHlwZWRlZglfX2ludDE2X3QJCV9faW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX191aW50MTZfdAkJX191aW50X2xlYXN0MTZfdDsKK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRfbGVhc3Q2NF90OwordHlwZWRlZglfX3VpbnQ2NF90CQlfX3VpbnRfbGVhc3Q2NF90OworCisvKiA3LjE4LjEuMyBGYXN0ZXN0IG1pbmltdW0td2lkdGggaW50ZWdlciB0eXBlcyAqLwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3Q4X3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0OF90OwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QxNl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAkJX19pbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9fdWludDMyX3QJCV9fdWludF9mYXN0MzJfdDsKK3R5cGVkZWYJX19pbnQ2NF90CQlfX2ludF9mYXN0NjRfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50X2Zhc3Q2NF90OworCisvKiA3LjE4LjEuNCBJbnRlZ2VyIHR5cGVzIGNhcGFibGUgb2YgaG9sZGluZyBvYmplY3QgcG9pbnRlcnMgKi8KK3R5cGVkZWYJaW50IAkJCV9faW50cHRyX3Q7Cit0eXBlZGVmCXVuc2lnbmVkIGludCAJCV9fdWludHB0cl90OworCisvKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7CisKKy8qIFJlZ2lzdGVyIHNpemUgKi8KK3R5cGVkZWYgX19pbnQzMl90CQlfX3JlZ2lzdGVyX3Q7CisKKy8qIFZNIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcGFkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192c2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BzaXplX3Q7CisKKy8qIFN0YW5kYXJkIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiBpbnQJCQlfX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJCV9fY2xvY2tpZF90OwordHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Cit0eXBlZGVmCWludAkJCV9fdGltZV90OwordHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwordHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7CisjZW5kaWYKKworLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7CisjZW5kaWYKK3R5cGVkZWYgaW50CQkJX193aW50X3Q7Cit0eXBlZGVmCWludAkJCV9fcnVuZV90OwordHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKK3R5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKKworI2VuZGlmCS8qIF9BUk1fX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9hc20uaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2FzbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3YmQwMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9hc20uaApAQCAtMCwwICsxLDEzMCBAQAorLyoJJE9wZW5CU0Q6IGFzbS5oLHYgMS4xIDIwMDQvMDIvMDEgMDU6MDk6NDkgZHJhaG4gRXhwICQJKi8KKy8qCSROZXRCU0Q6IGFzbS5oLHYgMS40IDIwMDEvMDcvMTYgMDU6NDM6MzIgbWF0dCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIFdpbGxpYW0gSm9saXR6LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglmcm9tOiBAKCMpYXNtLmgJNS41IChCZXJrZWxleSkgNS83LzkxCisgKi8KKworI2lmbmRlZiBfQVJNMzJfQVNNX0hfCisjZGVmaW5lIF9BUk0zMl9BU01fSF8KKworI2lmZGVmIF9fRUxGX18KKyMgZGVmaW5lIF9DX0xBQkVMKHgpCXgKKyNlbHNlCisjIGlmZGVmIF9fU1REQ19fCisjICBkZWZpbmUgX0NfTEFCRUwoeCkJXyAjIyB4CisjIGVsc2UKKyMgIGRlZmluZSBfQ19MQUJFTCh4KQlfLyoqL3gKKyMgZW5kaWYKKyNlbmRpZgorI2RlZmluZQlfQVNNX0xBQkVMKHgpCXgKKworI2lmZGVmIF9fU1REQ19fCisjIGRlZmluZSBfX0NPTkNBVCh4LHkpCXggIyMgeQorIyBkZWZpbmUgX19TVFJJTkcoeCkJI3gKKyNlbHNlCisjIGRlZmluZSBfX0NPTkNBVCh4LHkpCXgvKioveQorIyBkZWZpbmUgX19TVFJJTkcoeCkJIngiCisjZW5kaWYKKworI2lmbmRlZiBfQUxJR05fVEVYVAorIyBkZWZpbmUgX0FMSUdOX1RFWFQgLmFsaWduIDAKKyNlbmRpZgorCisvKgorICogZ2FzL2FybSB1c2VzIEAgYXMgYSBzaW5nbGUgY29tbWVudCBjaGFyYWN0ZXIgYW5kIHRodXMgY2Fubm90IGJlIHVzZWQgaGVyZQorICogSW5zdGVhZCBpdCByZWNvZ25pc2VkIHRoZSAjIGluc3RlYWQgb2YgYW4gQCBzeW1ib2xzIGluIC50eXBlIGRpcmVjdGl2ZXMKKyAqIFdlIGRlZmluZSBhIGNvdXBsZSBvZiBtYWNyb3Mgc28gdGhhdCBhc3NlbWJseSBjb2RlIHdpbGwgbm90IGJlIGRlcGVuZGFudAorICogb24gb25lIG9yIHRoZSBvdGhlci4KKyAqLworI2RlZmluZSBfQVNNX1RZUEVfRlVOQ1RJT04JI2Z1bmN0aW9uCisjZGVmaW5lIF9BU01fVFlQRV9PQkpFQ1QJI29iamVjdAorI2RlZmluZSBfRU5UUlkoeCkgXAorCS50ZXh0OyBfQUxJR05fVEVYVDsgLmdsb2JsIHg7IC50eXBlIHgsX0FTTV9UWVBFX0ZVTkNUSU9OOyB4OgorCisjaWZkZWYgR1BST0YKKyMgaWZkZWYgX19FTEZfXworIyAgZGVmaW5lIF9QUk9GX1BST0xPR1VFCVwKKwltb3YgaXAsIGxyOyBibCBfX21jb3VudAorIyBlbHNlCisjICBkZWZpbmUgX1BST0ZfUFJPTE9HVUUJXAorCW1vdiBpcCxscjsgYmwgbWNvdW50CisjIGVuZGlmCisjZWxzZQorIyBkZWZpbmUgX1BST0ZfUFJPTE9HVUUKKyNlbmRpZgorCisjZGVmaW5lCUVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCisjZGVmaW5lCUVOVFJZX05QKHkpCV9FTlRSWShfQ19MQUJFTCh5KSkKKyNkZWZpbmUJQVNFTlRSWSh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCisjZGVmaW5lCUFTRU5UUllfTlAoeSkJX0VOVFJZKF9BU01fTEFCRUwoeSkpCisKKyNkZWZpbmUJQVNNU1RSCQkuYXNjaXoKKworI2lmIGRlZmluZWQoX19FTEZfXykgJiYgZGVmaW5lZChQSUMpCisjaWZkZWYgX19TVERDX18KKyNkZWZpbmUJUElDX1NZTSh4LHkpCXggIyMgKCAjIyB5ICMjICkKKyNlbHNlCisjZGVmaW5lCVBJQ19TWU0oeCx5KQl4LyoqLygvKioveS8qKi8pCisjZW5kaWYKKyNlbHNlCisjZGVmaW5lCVBJQ19TWU0oeCx5KQl4CisjZW5kaWYKKworI2lmZGVmIF9fRUxGX18KKyNkZWZpbmUgUkNTSUQoeCkJLnNlY3Rpb24gIi5pZGVudCI7IC5hc2NpeiB4CisjZWxzZQorI2RlZmluZSBSQ1NJRCh4KQkudGV4dDsgLmFzY2l6IHgKKyNlbmRpZgorCisjaWZkZWYgX19FTEZfXworI2RlZmluZQlXRUFLX0FMSUFTKGFsaWFzLHN5bSkJCQkJCQlcCisJLndlYWsgYWxpYXM7CQkJCQkJCVwKKwlhbGlhcyA9IHN5bQorI2VuZGlmCisKKyNpZmRlZiBfX1NURENfXworI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKKwkuc3RhYnMgbXNnICMjICwzMCwwLDAsMCA7CQkJCQlcCisJLnN0YWJzIF9fU1RSSU5HKF9DX0xBQkVMKHN5bSkpICMjICwxLDAsMCwwCisjZWxpZiBkZWZpbmVkKF9fRUxGX18pCisjZGVmaW5lCVdBUk5fUkVGRVJFTkNFUyhzeW0sbXNnKQkJCQkJXAorCS5zdGFicyBtc2csMzAsMCwwLDAgOwkJCQkJCVwKKwkuc3RhYnMgX19TVFJJTkcoc3ltKSwxLDAsMCwwCisjZWxzZQorI2RlZmluZQlXQVJOX1JFRkVSRU5DRVMoc3ltLG1zZykJCQkJCVwKKwkuc3RhYnMgbXNnLDMwLDAsMCwwIDsJCQkJCQlcCisJLnN0YWJzIF9fU1RSSU5HKF8vKiovc3ltKSwxLDAsMCwwCisjZW5kaWYgLyogX19TVERDX18gKi8KKworI2VuZGlmIC8qICFfQVJNX0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2NkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRmMTU0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2NkZWZzLmgKQEAgLTAsMCArMSwxOSBAQAorLyoJJE9wZW5CU0Q6IGNkZWZzLmgsdiAxLjIgMjAwNS8xMS8yNCAyMDo0Njo0NCBkZXJhYWR0IEV4cCAkCSovCisKKyNpZm5kZWYJX01BQ0hJTkVfQ0RFRlNfSF8KKyNkZWZpbmUJX01BQ0hJTkVfQ0RFRlNfSF8KKworI2lmIGRlZmluZWQobGludCkKKyNkZWZpbmUgX19pbmRyX3JlZmVyZW5jZShzeW0sYWxpYXMpCV9fbGludF9lcXVhbF9fKHN5bSxhbGlhcykKKyNkZWZpbmUgX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykKKyNkZWZpbmUgX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCV9fbGludF9lcXVhbF9fKHN5bSxhbGlhcykKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19TVERDX18pCisjZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQkJCQlcCisJX19hc21fXygiLndlYWsgIiBfX1NUUklORyhhbGlhcykgIiA7ICIgX19TVFJJTkcoYWxpYXMpCVwKKwkgICAgIiA9ICIgX19TVFJJTkcoc3ltKSk7CisjZGVmaW5lCV9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCQkJCVwKKwlfX2FzbV9fKCIuc2VjdGlvbiAuZ251Lndhcm5pbmcuIiBfX1NUUklORyhzeW0pCQlcCisJICAgICIgOyAuYXNjaWkgXCIiIG1zZyAiXCIgOyAudGV4dCIpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX01BQ0hJTkVfQ0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2V4ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjdiMjA3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvZXhlYy5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCSRPcGVuQlNEOiBleGVjLmgsdiAxLjkgMjAwMy8wNC8xNyAwMzo0MjoxNCBkcmFobiBFeHAgJAkqLworLyoJJE5ldEJTRDogZXhlYy5oLHYgMS42IDE5OTQvMTAvMjcgMDQ6MTY6MDUgY2dkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgQ2hyaXN0b3BoZXIgRy4gRGVtZXRyaW91CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELgorICogSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUCisgKiBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9BUk1fRVhFQ19IXworI2RlZmluZSBfQVJNX0VYRUNfSF8KKworI2RlZmluZSBfX0xEUEdTWgk0MDk2CisKKyNkZWZpbmUgTkFUSVZFX0VYRUNfRUxGCisKKyNkZWZpbmUgQVJDSF9FTEZTSVpFCQkzMgorCisjZGVmaW5lIEVMRl9UQVJHX0NMQVNTCQlFTEZDTEFTUzMyCisjZGVmaW5lIEVMRl9UQVJHX0RBVEEJCUVMRkRBVEEyTFNCCisjZGVmaW5lIEVMRl9UQVJHX01BQ0gJCUVNX0FSTQorCisjZGVmaW5lIF9OTElTVF9ET19BT1VUCisjZGVmaW5lIF9OTElTVF9ET19FTEYKKworI2RlZmluZSBfS0VSTl9ET19BT1VUCisjZGVmaW5lIF9LRVJOX0RPX0VMRgorCisjZW5kaWYgIC8qIF9BUk1fRVhFQ19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaWVlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmOWI4OWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKQEAgLTAsMCArMSwxOTEgQEAKKy8qCSRPcGVuQlNEOiBpZWVlLmgsdiAxLjEgMjAwNC8wMi8wMSAwNTowOTo0OSBkcmFobiBFeHAgJAkqLworLyoJJE5ldEJTRDogaWVlZS5oLHYgMS4yIDIwMDEvMDIvMjEgMTc6NDM6NTAgYmpoMjEgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkIGJ5IHRoZSBDb21wdXRlciBTeXN0ZW1zIEVuZ2luZWVyaW5nIGdyb3VwCisgKiBhdCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IHVuZGVyIERBUlBBIGNvbnRyYWN0IEJHIDkxLTY2IGFuZAorICogY29udHJpYnV0ZWQgdG8gQmVya2VsZXkuCisgKgorICogQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKglUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKglDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWllZWUuaAk4LjEgKEJlcmtlbGV5KSA2LzExLzkzCisgKi8KKworLyoKKyAqIGllZWUuaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBsYXlvdXQgb2YgdGhlIG1hY2hpbmUncyBJRUVFCisgKiBmbG9hdGluZyBwb2ludC4KKyAqLworCisvKgorICogRGVmaW5lIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGZyYWN0aW9uIGFuZCBleHBvbmVudC4KKyAqCisgKgkJICAgICBrCSAgICAgICAgIGsrMQorICogTm90ZSB0aGF0ICAxLjAgeCAyICA9PSAwLjEgeCAyICAgICAgYW5kIHRoYXQgZGVub3JtcyBhcmUgcmVwcmVzZW50ZWQKKyAqCisgKgkJCQkJICAoLWV4cF9iaWFzKzEpCisgKiBhcyBmcmFjdGlvbnMgdGhhdCBsb29rIGxpa2UgMC5mZmZmZiB4IDIgICAgICAgICAgICAgLiAgVGhpcyBtZWFucyB0aGF0CisgKgorICoJCQkgLTEyNgorICogdGhlIG51bWJlciAwLjEwMDAwIHggMiAgICAsIGZvciBpbnN0YW5jZSwgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbGl6ZWQKKyAqCisgKgkJLTEyNwkJCSAgIC0xMjgKKyAqIGZsb2F0IDEuMCB4IDIgICAgLiAgVGh1cywgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIG9uZSBsZWFkaW5nIHplcm8KKyAqCisgKgkJCQkgIC0xMjkKKyAqIGluIHRoZSBmcmFjdGlvbjsgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIHR3bywgYW5kIHNvIG9uLiAgVGhpcworICoKKyAqCQkJCQkJICAgICAoLWV4cF9iaWFzLWZyYWNiaXRzKzEpCisgKiBpbXBsaWVzIHRoYXQgdGhlIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBudW1iZXIgaXMgMgorICoKKyAqIGZvciB3aGljaGV2ZXIgZm9ybWF0IHdlIGFyZSB0YWxraW5nIGFib3V0OiBmb3Igc2luZ2xlIHByZWNpc2lvbiwgZm9yCisgKgorICoJCQkJCQktMTI2CQktMTQ5CisgKiBpbnN0YW5jZSwgd2UgZ2V0IC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB4IDIgICAgLCBvciAxLjAgeCAyICAgICwgYW5kCisgKgorICogLTE0OSA9PSAtMTI3IC0gMjMgKyAxLgorICovCisKKy8qCisgKiBUaGUgQVJNIGhhcyB0d28gc2V0cyBvZiBGUCBkYXRhIGZvcm1hdHMuICBUaGUgRlBBIHN1cHBvcnRzIDMyLWJpdCwgNjQtYml0CisgKiBhbmQgOTYtYml0IElFRUUgZm9ybWF0cywgd2l0aCB0aGUgd29yZHMgaW4gYmlnLWVuZGlhbiBvcmRlci4gIFZGUCBzdXBwb3J0cworICogMzItYmluIGFuZCA2NC1iaXQgSUVFRSBmb3JtYXRzIHdpdGggdGhlIHdvcmRzIGluIHRoZSBDUFUncyBuYXRpdmUgYnl0ZQorICogb3JkZXIuCisgKgorICogVGhlIEZQQSBhbHNvIGhhcyB0d28gcGFja2VkIGRlY2ltYWwgZm9ybWF0cywgYnV0IHdlIGlnbm9yZSB0aGVtIGhlcmUuCisgKi8KKworI2RlZmluZQlTTkdfRVhQQklUUwk4CisjZGVmaW5lCVNOR19GUkFDQklUUwkyMworCisjZGVmaW5lCURCTF9FWFBCSVRTCTExCisjZGVmaW5lCURCTF9GUkFDQklUUwk1MgorCisjaWZuZGVmIF9fVkZQX0ZQX18KKyNkZWZpbmUJRTgwX0VYUEJJVFMJMTUKKyNkZWZpbmUJRTgwX0ZSQUNCSVRTCTY0CisKKyNkZWZpbmUJRVhUX0VYUEJJVFMJMTUKKyNkZWZpbmUJRVhUX0ZSQUNCSVRTCTExMgorI2VuZGlmCisKK3N0cnVjdCBpZWVlX3NpbmdsZSB7CisJdV9pbnQJc25nX2ZyYWM6MjM7CisJdV9pbnQJc25nX2V4cG9uZW50Ojg7CisJdV9pbnQJc25nX3NpZ246MTsKK307CisKKyNpZmRlZiBfX1ZGUF9GUF9fCitzdHJ1Y3QgaWVlZV9kb3VibGUgeworI2lmZGVmIF9fQVJNRUJfXworCXVfaW50CWRibF9zaWduOjE7CisJdV9pbnQJZGJsX2V4cDoxMTsKKwl1X2ludAlkYmxfZnJhY2g6MjA7CisJdV9pbnQJZGJsX2ZyYWNsOworI2Vsc2UgLyogIV9fQVJNRUJfXyAqLworCXVfaW50CWRibF9mcmFjbDsKKwl1X2ludAlkYmxfZnJhY2g6MjA7CisJdV9pbnQJZGJsX2V4cDoxMTsKKwl1X2ludAlkYmxfc2lnbjoxOworI2VuZGlmIC8qICFfX0FSTUVCX18gKi8KK307CisjZWxzZSAvKiAhX19WRlBfRlBfXyAqLworc3RydWN0IGllZWVfZG91YmxlIHsKKwl1X2ludAlkYmxfZnJhY2g6MjA7CisJdV9pbnQJZGJsX2V4cDoxMTsKKwl1X2ludAlkYmxfc2lnbjoxOworCXVfaW50CWRibF9mcmFjbDsKK307CisKK3VuaW9uIGllZWVfZG91YmxlX3UgeworCWRvdWJsZSAgICAgICAgICAgICAgICAgIGRibHVfZDsKKwlzdHJ1Y3QgaWVlZV9kb3VibGUgICAgICBkYmx1X2RibDsKK307CisKKworc3RydWN0IGllZWVfZTgwIHsKKwl1X2ludAllODBfZXhwOjE1OworCXVfaW50CWU4MF96ZXJvOjE2OworCXVfaW50CWU4MF9zaWduOjE7CisJdV9pbnQJZTgwX2ZyYWNoOjMxOworCXVfaW50CWU4MF9qOjE7CisJdV9pbnQJZTgwX2ZyYWNsOworfTsKKworc3RydWN0IGllZWVfZXh0IHsKKwl1X2ludAlleHRfZnJhY2g6MTY7CisJdV9pbnQJZXh0X2V4cDoxNTsKKwl1X2ludAlleHRfc2lnbjoxOworCXVfaW50CWV4dF9mcmFjaG07CisJdV9pbnQJZXh0X2ZyYWNsbTsKKwl1X2ludAlleHRfZnJhY2w7Cit9OworI2VuZGlmIC8qICFfX1ZGUF9GUF9fICovCisKKy8qCisgKiBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgaW4gWzEuLklORk5BTikgKG9mIHdoYXRldmVyIHR5cGUpIGFyZQorICogYG5vcm1hbCcuICBGbG9hdHMgd2hvc2UgZXhwb25lbnQgaXMgSU5GTkFOIGFyZSBlaXRoZXIgSW5mIG9yIE5hTi4KKyAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyB6ZXJvIGFyZSBlaXRoZXIgemVybyAoaWZmIGFsbCBmcmFjdGlvbgorICogYml0cyBhcmUgemVybykgb3Igc3Vibm9ybWFsIHZhbHVlcy4KKyAqCisgKiBBIE5hTiBpcyBhIGBzaWduYWxsaW5nIE5hTicgaWYgaXRzIFFVSUVUTkFOIGJpdCBpcyBjbGVhciBpbiBpdHMKKyAqIGhpZ2ggZnJhY3Rpb247IGlmIHRoZSBiaXQgaXMgc2V0LCBpdCBpcyBhIGBxdWlldCBOYU4nLgorICovCisjZGVmaW5lCVNOR19FWFBfSU5GTkFOCTI1NQorI2RlZmluZQlEQkxfRVhQX0lORk5BTgkyMDQ3CisjaWZuZGVmIF9fVkZQX0ZQX18KKyNkZWZpbmUJRTgwX0VYUF9JTkZOQU4JMzI3NjcKKyNkZWZpbmUJRVhUX0VYUF9JTkZOQU4JMzI3NjcKKyNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLworCisjaWYgMAorI2RlZmluZQlTTkdfUVVJRVROQU4JKDEgPDwgMjIpCisjZGVmaW5lCURCTF9RVUlFVE5BTgkoMSA8PCAxOSkKKyNpZm5kZWYgX19WRlBfRlBfXworI2RlZmluZQlFODBfUVVJRVROQU4JKDEgPDwgMTUpCisjZGVmaW5lCUVYVF9RVUlFVE5BTgkoMSA8PCAxNSkKKyNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLworI2VuZGlmCisKKy8qCisgKiBFeHBvbmVudCBiaWFzZXMuCisgKi8KKyNkZWZpbmUJU05HX0VYUF9CSUFTCTEyNworI2RlZmluZQlEQkxfRVhQX0JJQVMJMTAyMworI2lmbmRlZiBfX1ZGUF9GUF9fCisjZGVmaW5lCUU4MF9FWFBfQklBUwkxNjM4MworI2RlZmluZQlFWFRfRVhQX0JJQVMJMTYzODMKKyNlbmRpZiAvKiAhX19WRlBfRlBfXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvaW50ZXJuYWxfdHlwZXMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U2MTBiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2ludGVybmFsX3R5cGVzLmgKQEAgLTAsMCArMSwxMCBAQAorLyogJE9wZW5CU0Q6IGludGVybmFsX3R5cGVzLmgsdiAxLjIgMjAwNC8wNS8wNiAxNTo1MzozOSBkcmFobiBFeHAgJCAqLworLyogUHVibGljIGRvbWFpbiAqLworI2lmbmRlZiBfQVJNX0lOVEVSTkFMX1RZUEVTX0hfCisjZGVmaW5lIF9BUk1fSU5URVJOQUxfVFlQRVNfSF8KKworI2lmZGVmIF9fQ0hBUl9VTlNJR05FRF9fCisjZGVmaW5lIF9fbWFjaGluZV9oYXNfdW5zaWduZWRfY2hhcnMKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUva2VybmVsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYyYjhlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2tlcm5lbC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0FSQ0hfQVJNX0tFUk5FTF9ICisjZGVmaW5lIF9BUkNIX0FSTV9LRVJORUxfSAorCisvKiB0aGlzIGZpbGUgY29udGFpbnMga2VybmVsLXNwZWNpZmljIGRlZmluaXRpb25zIHRoYXQgd2VyZSBvcHRpbWl6ZWQgb3V0IG9mCisgICBvdXIgcHJvY2Vzc2VkIGtlcm5lbCBoZWFkZXJzLCBidXQgc3RpbGwgdXNlZnVsIG5vbmV0aGVsZXNzLi4uICovCisKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2Jsa2NudF90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgX19rZXJuZWxfYmxrc2l6ZV90OworCisvKiB0aGVzZSBhcmVuJ3QgcmVhbGx5IGRlZmluZWQgYnkgdGhlIGtlcm5lbCBoZWFkZXJzIHRob3VnaC4uLiAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nICAgX19rZXJuZWxfZnNibGtjbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyAgIF9fa2VybmVsX2ZzZmlsY250X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICBfX2tlcm5lbF9pZF90OworCisjZW5kaWYgLyogX0FSQ0hfQVJNX0tFUk5FTF9IICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YzA0ZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApAQCAtMCwwICsxLDYzIEBACisvKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjMgMjAwNi8wMS8wNiAyMjo0ODo0NiBtaWxsZXJ0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuNCAyMDAzLzA0LzI4IDIzOjE2OjE4IGJqaDIxIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCWZyb206IEAoIylsaW1pdHMuaAk3LjIgKEJlcmtlbGV5KSA2LzI4LzkwCisgKi8KKworI2lmbmRlZglfQVJNMzJfTElNSVRTX0hfCisjZGVmaW5lCV9BUk0zMl9MSU1JVFNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjZGVmaW5lCU1CX0xFTl9NQVgJMQkJLyogbm8gbXVsdGlieXRlIGNoYXJhY3RlcnMgKi8KKworI2lmbmRlZglTSVpFX01BWAorI2RlZmluZQlTSVpFX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90ICovCisjZW5kaWYKKyNpZm5kZWYgU1NJWkVfTUFYCisjZGVmaW5lCVNTSVpFX01BWAlJTlRfTUFYCQkvKiBtYXggdmFsdWUgZm9yIGEgc3NpemVfdCAqLworI2VuZGlmCisKKyNpZiBfX0JTRF9WSVNJQkxFCisjZGVmaW5lCVNJWkVfVF9NQVgJVUlOVF9NQVgJLyogbWF4IHZhbHVlIGZvciBhIHNpemVfdCAoaGlzdG9yaWMpICovCisKKyNkZWZpbmUJVVFVQURfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAkJLyogbWF4IHVuc2lnbmVkIHF1YWQgKi8KKyNkZWZpbmUJUVVBRF9NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTEwJCS8qIG1heCBzaWduZWQgcXVhZCAqLworI2RlZmluZQlRVUFEX01JTgkoLTB4N2ZmZmZmZmZmZmZmZmZmZkxMLTEpCS8qIG1pbiBzaWduZWQgcXVhZCAqLworCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLworCisjZGVmaW5lIExPTkdMT05HX0JJVCAgICA2NAorI2RlZmluZSBMT05HTE9OR19NSU4gICAgKC05MjIzMzcyMDM2ODU0Nzc1ODA3TEwtMSkKKyNkZWZpbmUgTE9OR0xPTkdfTUFYICAgIDkyMjMzNzIwMzY4NTQ3NzU4MDdMTAorI2RlZmluZSBVTE9OR0xPTkdfTUFYICAgMTg0NDY3NDQwNzM3MDk1NTE2MTVVTEwKKworI2VuZGlmCS8qIF9BUk0zMl9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oIGIvbGliYy9hcmNoLWFybS9pbmNsdWRlL21hY2hpbmUvc2V0am1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjIwY2FiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuaCx2IDEuMSAyMDA0LzAyLzAxIDA1OjA5OjQ5IGRyYWhuIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzZXRqbXAuaCx2IDEuMiAyMDAxLzA4LzI1IDE0OjQ1OjU5IGJqaDIxIEV4cCAkCSovCisKKy8qCisgKiBtYWNoaW5lL3NldGptcC5oOiBtYWNoaW5lIGRlcGVuZGVudCBzZXRqbXAtcmVsYXRlZCBpbmZvcm1hdGlvbi4KKyAqLworCisjaWZkZWYgX19FTEZfXworI2RlZmluZQlfSkJMRU4JNjQJCS8qIHNpemUsIGluIGxvbmdzLCBvZiBhIGptcF9idWYgKi8KKyNlbHNlCisjZGVmaW5lCV9KQkxFTgkyOQkJLyogc2l6ZSwgaW4gbG9uZ3MsIG9mIGEgam1wX2J1ZiAqLworI2VuZGlmCisKKy8qCisgKiBOT1RFOiBUaGUgaW50ZXJuYWwgc3RydWN0dXJlIG9mIGEgam1wX2J1ZiBpcyAqUFJJVkFURSoKKyAqICAgICAgIFRoaXMgaW5mb3JtYXRpb24gaXMgcHJvdmlkZWQgYXMgdGhlcmUgaXMgc29mdHdhcmUKKyAqICAgICAgIHRoYXQgZmlkZGxlcyB3aXRoIHRoaXMgd2l0aCBvYnRhaW4gdGhlIHN0YWNrIHBvaW50ZXIKKyAqCSAoeWVzIHJlYWxseSAhIGFuZCBpdHMgY29tbWVyY2lhbCAhKS4KKyAqCisgKiBEZXNjcmlwdGlvbiBvZiB0aGUgc2V0am1wIGJ1ZmZlcgorICoKKyAqIHdvcmQgIDAJbWFnaWMgbnVtYmVyCShkZXBlbmRhbnQgb24gY3JlYXRvcikKKyAqICAgICAgIDEgLSAgMwlmNAkJZnAgcmVnaXN0ZXIgNAorICoJIDQgLSAgNglmNQkJZnAgcmVnaXN0ZXIgNQorICoJIDcgLSAgOSBmNgkJZnAgcmVnaXN0ZXIgNgorICoJMTAgLSAxMglmNwkJZnAgcmVnaXN0ZXIgNworICoJMTMJZnBzcgkJZnAgc3RhdHVzIHJlZ2lzdGVyCisgKgkxNAlyNAkJcmVnaXN0ZXIgNAorICoJMTUJcjUJCXJlZ2lzdGVyIDUKKyAqCTE2CXI2CQlyZWdpc3RlciA2CisgKgkxNwlyNwkJcmVnaXN0ZXIgNworICoJMTgJcjgJCXJlZ2lzdGVyIDgKKyAqCTE5CXI5CQlyZWdpc3RlciA5CisgKgkyMAlyMTAJCXJlZ2lzdGVyIDEwIChzbCkKKyAqCTIxCXIxMQkJcmVnaXN0ZXIgMTEgKGZwKQorICoJMjIJcjEyCQlyZWdpc3RlciAxMiAoaXApCisgKgkyMwlyMTMJCXJlZ2lzdGVyIDEzIChzcCkKKyAqCTI0CXIxNAkJcmVnaXN0ZXIgMTQgKGxyKQorICoJMjUJc2lnbmFsIG1hc2sJKGRlcGVuZGFudCBvbiBtYWdpYykKKyAqCTI2CShjb24ndCkKKyAqCTI3CShjb24ndCkKKyAqCTI4CShjb24ndCkKKyAqCisgKiBUaGUgbWFnaWMgbnVtYmVyIG51bWJlciBpZGVudGlmaWVzIHRoZSBqbXBfYnVmIGFuZAorICogaG93IHRoZSBidWZmZXIgd2FzIGNyZWF0ZWQgYXMgd2VsbCBhcyBwcm92aWRpbmcKKyAqIGEgc2FuaXR5IGNoZWNrCisgKgorICogQSBzaWRlIG5vdGUgSSBzaG91bGQgbWVudGlvbiAtIFBsZWFzZSBkbyBub3QgdGFtcGVyCisgKiB3aXRoIHRoZSBmbG9hdGluZyBwb2ludCBmaWVsZHMuIFdoaWxlIHRoZXkgYXJlCisgKiBhbHdheXMgc2F2ZWQgYW5kIHJlc3RvcmVkIGF0IHRoZSBtb21lbnQgdGhpcyBjYW5ub3QKKyAqIGJlIGdhcmVudGVlZCBlc3BlY2lhbGx5IGlmIHRoZSBjb21waWxlciBoYXBwZW5zCisgKiB0byBiZSBnZW5lcmF0aW5nIHNvZnQtZmxvYXQgY29kZSBzbyBubyBmcAorICogcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZC4KKyAqCisgKiBXaGlsc3QgdGhpcyBjYW4gYmUgc2VlbiBhbiBlbmNvdXJhZ2luZyBwZW9wbGUgdG8KKyAqIHVzZSB0aGUgc2V0am1wIGJ1ZmZlciBpbiB0aGlzIHdheSBJIHRoaW5rIHRoYXQgaXQKKyAqIGlzIGZvciB0aGUgYmVzdCB0aGVuIGlmIGNoYW5nZXMgb2NjdXIgY29tcGlsZXMgd2lsbAorICogYnJlYWsgcmF0aGVyIHRoYW4ganVzdCBoYXZpbmcgbmV3IGJ1aWxkcyBmYWxsaW5nIG92ZXIKKyAqIG15c3RlcmlvdXNseS4KKyAqLworCisjZGVmaW5lIF9KQl9NQUdJQ19fU0VUSk1QCTB4NDI3OGY1MDAKKyNkZWZpbmUgX0pCX01BR0lDX1NFVEpNUAkweDQyNzhmNTAxCisKKy8qIFZhbGlkIGZvciBhbGwgam1wX2J1ZidzICovCisKKyNkZWZpbmUgX0pCX01BR0lDCQkgMAorI2RlZmluZSBfSkJfUkVHX0Y0CQkgMQorI2RlZmluZSBfSkJfUkVHX0Y1CQkgNAorI2RlZmluZSBfSkJfUkVHX0Y2CQkgNworI2RlZmluZSBfSkJfUkVHX0Y3CQkxMAorI2RlZmluZSBfSkJfUkVHX0ZQU1IJCTEzCisjZGVmaW5lIF9KQl9SRUdfUjQJCTE0CisjZGVmaW5lIF9KQl9SRUdfUjUJCTE1CisjZGVmaW5lIF9KQl9SRUdfUjYJCTE2CisjZGVmaW5lIF9KQl9SRUdfUjcJCTE3CisjZGVmaW5lIF9KQl9SRUdfUjgJCTE4CisjZGVmaW5lIF9KQl9SRUdfUjkJCTE5CisjZGVmaW5lIF9KQl9SRUdfUjEwCQkyMAorI2RlZmluZSBfSkJfUkVHX1IxMQkJMjEKKyNkZWZpbmUgX0pCX1JFR19SMTIJCTIyCisjZGVmaW5lIF9KQl9SRUdfUjEzCQkyMworI2RlZmluZSBfSkJfUkVHX1IxNAkJMjQKKworLyogT25seSB2YWxpZCB3aXRoIHRoZSBfSkJfTUFHSUNfU0VUSk1QIG1hZ2ljICovCisKKyNkZWZpbmUgX0pCX1NJR01BU0sJCTI1CmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzLm1rIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tawpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFlZjViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy5tawpAQCAtMCwwICsxLDE3OCBAQAorIyBhdXRvLWdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSwgZG8gbm90IHRvdWNoCitzeXNjYWxsX3NyYyA6PSAKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19leGl0X3RocmVhZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mb3JrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3dhaXRpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2V4ZWN2ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGVnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzdWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJlc2dpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR0aWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z2lkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHJlc3VpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZXNnaWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19icmsuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRncm91cHMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0cGdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaHJvb3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2FwZ2V0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXByb3RlY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWFkdmlzZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy93cml0ZXYuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mbG9jay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZHVwMi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZWxlY3QuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnRydW5jYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdGZzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXJhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9saW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bmxpbmthdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaGRpci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9ta25vZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jaG93bi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mc3RhdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xzdGF0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21rZGlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlYWRsaW5rLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX2dldGN3ZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2Nlc3MuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc3ltbGluay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJfY3JlYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX3NldHRpbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJfZ2V0dGltZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy90aW1lcl9nZXRvdmVycnVuLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2RlbGV0ZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91dGltZXMuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2lnYWN0aW9uLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ2FjdGlvbi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9jb25uZWN0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9hY2NlcHQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW5kbXNnLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF95aWVsZC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NlbWN0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9zZW1nZXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2Vtb3AuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2htYXQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvc2htY3RsLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NobWR0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3NobWdldC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tc2djdGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvbXNnZ2V0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL21zZ3Jjdi5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9tc2dzbmQuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvdW5hbWUuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX193YWl0NC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy91bWFzay5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3JlYm9vdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9lcG9sbF93YWl0LlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCitzeXNjYWxsX3NyYyArPSBhcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL3BvbGwuUworc3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMKK3N5c2NhbGxfc3JjICs9IGFyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Jyay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YWQyZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fYnJrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2JyaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fYnJrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2JyazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfYnJrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fY2xvbmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTBlMmMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2Nsb25lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2Nsb25lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19jbG9uZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19jbG9uZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2xvbmUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiN2I5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZmNudGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX2ZjbnRsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2ZjbnRsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY250bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19mY250bDY0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxYTZmYzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZmNudGw2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19mY250bDY0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19mY250bDY0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2ZjbnRsNjQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZjbnRsNjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0Y3dkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA5OGQwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRjd2QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZ2V0Y3dkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19nZXRjd2QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fZ2V0Y3dkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRjd2QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiNjUyZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZ2V0cHJpb3JpdHksICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX2dldHByaW9yaXR5CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2dldHByaW9yaXR5OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwcmlvcml0eQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2lvY3RsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmZhZDIzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19pb2N0bC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19pb2N0bCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9faW9jdGwKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19faW9jdGw6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2lvY3RsCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX2xsc2Vlay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMjVlMmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbGxzZWVrLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2xsc2VlaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fbGxzZWVrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX2xsc2VlazoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfX2xsc2VlaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fbW1hcDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTcwMjBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX21tYXAyLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX21tYXAyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19tbWFwMgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19tbWFwMjoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfbW1hcDIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3Blbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlM2ZiN2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3Blbi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19vcGVuLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX29wZW46CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX29wZW4KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fb3BlbmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWU5MmI5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fb3BlbmF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuYXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fb3BlbmF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9vcGVuYXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcHRyYWNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5YTVhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19wdHJhY2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcHRyYWNlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19wdHJhY2UKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fcHRyYWNlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9wdHJhY2UKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcmVib290LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzcwZTlmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19yZWJvb3QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcmVib290LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19yZWJvb3QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fcmVib290OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWJvb3QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlhYmQ1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcnRfc2lnYWN0aW9uLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19ydF9zaWdhY3Rpb24KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fcnRfc2lnYWN0aW9uOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9ydF9zaWdhY3Rpb24KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWdwcm9jbWFzay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYWNiNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcnRfc2lncHJvY21hc2ssICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3J0X3NpZ3Byb2NtYXNrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3J0X3NpZ3Byb2NtYXNrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9ydF9zaWdwcm9jbWFzaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19ydF9zaWd0aW1lZHdhaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmIxNTczCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19ydF9zaWd0aW1lZHdhaXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3J0X3NpZ3RpbWVkd2FpdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX19ydF9zaWd0aW1lZHdhaXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3J0X3NpZ3RpbWVkd2FpdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zZXRfdGxzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY2YTA5N2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc2V0X3Rscy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19zZXRfdGxzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zZXRfdGxzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3NldF90bHM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX0FSTV9zZXRfdGxzCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3NpZ3N1c3BlbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0MTZmMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3NpZ3N1c3BlbmQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfX3NpZ3N1c3BlbmQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fc2lnc3VzcGVuZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2lnc3VzcGVuZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N0YXRmczY0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjYwMjYzNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX19zdGF0ZnM2NC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19zdGF0ZnM2NCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fc3RhdGZzNjQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19fc3RhdGZzNjQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3N0YXRmczY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3N5c2xvZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMThkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fc3lzbG9nLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3N5c2xvZywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIF9fc3lzbG9nCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitfX3N5c2xvZzoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3lzbG9nCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXQ0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19fd2FpdDQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjcwMTc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fX3dhaXQ0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3dhaXQ0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX193YWl0NAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworX193YWl0NDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfd2FpdDQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL19leGl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTc1MGNhMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9leGl0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgX2V4aXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19leGl0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9leGl0X2dyb3VwCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9fZXhpdF90aHJlYWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZmODY4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvX2V4aXRfdGhyZWFkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfZXhpdF90aHJlYWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBfZXhpdF90aHJlYWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK19leGl0X3RocmVhZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZXhpdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXB0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjMzJmMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2VwdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYWNjZXB0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgYWNjZXB0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCithY2NlcHQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2FjY2VwdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjZXNzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2Vzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2MzkxMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2FjY2Vzcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYWNjZXNzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgYWNjZXNzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCithY2Nlc3M6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2FjY2VzcworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9hY2N0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDdkODc4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYWNjdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYWNjdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGFjY3QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2FjY3Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2FjY3QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvYmluZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2Y2M2NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2JpbmQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGJpbmQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBiaW5kCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitiaW5kOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9iaW5kCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhY2hlZmx1c2guUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kN2ZiYTkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYWNoZWZsdXNoLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjYWNoZWZsdXNoLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2FjaGVmbHVzaAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2FjaGVmbHVzaDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfQVJNX2NhY2hlZmx1c2gKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjA4MmExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNhcGdldCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNhcGdldAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2FwZ2V0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jYXBnZXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NhcHNldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTE2OWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jYXBzZXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNhcHNldCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNhcHNldAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2Fwc2V0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jYXBzZXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2NoZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY0ZWM2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hkaXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNoZGlyLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2hkaXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2NoZGlyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jaGRpcgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2htb2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2htb2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmU0M2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG1vZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2htb2QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjaG1vZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2htb2Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2NobW9kCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jaG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkMzAzMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nob3duLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaG93biwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNob3duCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjaG93bjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2hvd24zMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwNjNkOGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nocm9vdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2hyb290LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2hyb290CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjaHJvb3Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nocm9vdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmZGJlMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfZ2V0cmVzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjbG9ja19nZXRyZXM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX2dldHJlcworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODk0MWIyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfZ2V0dGltZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfZ2V0dGltZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNsb2NrX2dldHRpbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Nsb2NrX2dldHRpbWU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2Nsb2NrX2dldHRpbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX25hbm9zbGVlcC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYzEwMTUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb2NrX25hbm9zbGVlcCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNsb2NrX25hbm9zbGVlcAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworY2xvY2tfbmFub3NsZWVwOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9ja19uYW5vc2xlZXAKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0NjE0ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb2NrX3NldHRpbWUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19zZXR0aW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjbG9ja19zZXR0aW1lOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jbG9ja19zZXR0aW1lCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9jbG9zZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1NGIxMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nsb3NlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9zZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGNsb3NlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjbG9zZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfY2xvc2UKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvY29ubmVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwNWQ2YTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Nvbm5lY3QuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNvbm5lY3QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBjb25uZWN0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitjb25uZWN0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9jb25uZWN0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2RlbGV0ZV9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OWQ1OTY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBkZWxldGVfbW9kdWxlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZGVsZXRlX21vZHVsZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZGVsZXRlX21vZHVsZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZGVsZXRlX21vZHVsZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNWQwNTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2R1cC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZHVwLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZHVwCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitkdXA6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2R1cAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9kdXAyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNlZDQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZHVwMi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZHVwMiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGR1cDIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2R1cDI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2R1cDIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zODlkNGJhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jcmVhdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX2NyZWF0ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGVwb2xsX2NyZWF0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZXBvbGxfY3JlYXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9lcG9sbF9jcmVhdGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MDZkODBkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9lcG9sbF9jdGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX2N0bCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGVwb2xsX2N0bAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZXBvbGxfY3RsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9lcG9sbF9jdGwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX3dhaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXBvbGxfd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmNzQ4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Vwb2xsX3dhaXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX3dhaXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBlcG9sbF93YWl0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitlcG9sbF93YWl0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9lcG9sbF93YWl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9leGVjdmUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMwOWExYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZXhlY3ZlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBleGVjdmUsICNmdW5jdGlvbgorICAgIC5nbG9ibCBleGVjdmUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2V4ZWN2ZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZXhlY3ZlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hkaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDQxZjNlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNoZGlyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2hkaXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBmY2hkaXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZjaGRpcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZmNoZGlyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjVmMTk4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNobW9kLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2htb2QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBmY2htb2QKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZjaG1vZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZmNobW9kCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2htb2RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2ZTM5MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2htb2RhdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZjaG1vZGF0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmY2htb2RhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZmNobW9kYXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZjaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODg3Mjk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaG93biwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZjaG93bgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZmNob3duOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mY2hvd24zMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmNob3duYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjc5ZDJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mY2hvd25hdC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNob3duYXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBmY2hvd25hdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZmNob3duYXQ6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZjaG93bmF0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Zsb2NrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Zsb2NrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJlMzkxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZmxvY2suUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZsb2NrLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmxvY2sKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Zsb2NrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mbG9jaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZm9yay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mb3JrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzljMThjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZm9yay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZm9yaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZvcmsKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Zvcms6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2ZvcmsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWYxNzUyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnN0YXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZzdGF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2ZzdGF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mc3RhdDY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2RkNzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3RhdGF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXRhdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZnN0YXRhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZnN0YXRhdDY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGZzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzdGF0ZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ODE1MGQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3RhdGZzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3RhdGZzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXRmcworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZnN0YXRmczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZnN0YXRmczY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4OGRmYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3luYywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZzeW5jCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitmc3luYzoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZnN5bmMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDYwYjQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZ0cnVuY2F0ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGZ0cnVuY2F0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZnRydW5jYXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mdHJ1bmNhdGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2Z1dGV4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzJkNGI3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZnV0ZXguUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZ1dGV4LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnV0ZXgKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2Z1dGV4OgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9mdXRleAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRkZW50cy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMxMmFhMGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGRlbnRzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRkZW50cywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldGRlbnRzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRkZW50czoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0ZGVudHM2NAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY3MjNiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZWdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldGVnaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldGVnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldGVnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDg2OTU5ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZXVpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldGV1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldGV1aWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldGV1aWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MDJmZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldGdpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0Z2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0Z2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldGdpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4ZmUwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRncm91cHMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRncm91cHMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldGdyb3VwczoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0Z3JvdXBzMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBlZXJuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA0ZWMzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGVlcm5hbWUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBlZXJuYW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cGVlcm5hbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHBlZXJuYW1lOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwZWVybmFtZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTM5NzQ1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cGdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHBnaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHBnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHBnaWQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYmU3OTNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRwaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHBpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0cGlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwaWQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTg1YjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBwaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRwcGlkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRwcGlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRwcGlkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTBjOTBkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRyZXNnaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRyZXNnaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHJlc2dpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfZ2V0cmVzZ2lkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDY3YWMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHJlc3VpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHJlc3VpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0cmVzdWlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRyZXN1aWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5YzEzNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cmxpbWl0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cmxpbWl0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXRybGltaXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3VnZXRybGltaXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHJ1c2FnZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWRiMTUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRydXNhZ2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHJ1c2FnZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHJ1c2FnZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworZ2V0cnVzYWdlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRydXNhZ2UKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHNvY2tuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmFlMDg3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja25hbWUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHNvY2tuYW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0c29ja25hbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHNvY2tuYW1lOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9nZXRzb2NrbmFtZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9nZXRzb2Nrb3B0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZlMWIxMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0c29ja29wdC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0c29ja29wdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGdldHNvY2tvcHQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2dldHNvY2tvcHQ6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHNvY2tvcHQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU1ZGE0NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0dGlkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0dGlkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXR0aWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHRpZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJhNzU5ZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHRpbWVvZmRheS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0dGltZW9mZGF5LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0dGltZW9mZGF5CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXR0aW1lb2ZkYXk6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHRpbWVvZmRheQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvZ2V0dWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YzMwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2dldHVpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0dWlkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0dWlkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitnZXR1aWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2dldHVpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbml0X21vZHVsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlOWNkMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2luaXRfbW9kdWxlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBpbml0X21vZHVsZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGluaXRfbW9kdWxlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitpbml0X21vZHVsZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfaW5pdF9tb2R1bGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIzZjMyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9hZGRfd2F0Y2guUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfYWRkX3dhdGNoLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgaW5vdGlmeV9hZGRfd2F0Y2gKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2lub3RpZnlfYWRkX3dhdGNoOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9pbm90aWZ5X2FkZF93YXRjaAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9pbml0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MTJiODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgaW5vdGlmeV9pbml0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgaW5vdGlmeV9pbml0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitpbm90aWZ5X2luaXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2lub3RpZnlfaW5pdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9pbm90aWZ5X3JtX3dhdGNoLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmM0MTZkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgaW5vdGlmeV9ybV93YXRjaCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfcm1fd2F0Y2gKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2lub3RpZnlfcm1fd2F0Y2g6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2lub3RpZnlfcm1fd2F0Y2gKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMva2xvZ2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlZTM0NzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGtsb2djdGwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBrbG9nY3RsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitrbG9nY3RsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zeXNsb2cKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xjaG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGVlNzkzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sY2hvd24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxjaG93biwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGxjaG93bgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbGNob3duOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9sY2hvd24zMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGluay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saW5rLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjM2ODU5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbGluay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbGluaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGxpbmsKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2xpbms6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2xpbmsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xpc3Rlbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMWE4YTZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9saXN0ZW4uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxpc3RlbiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIGxpc3RlbgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbGlzdGVuOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9saXN0ZW4KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL2xzZWVrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdiZjA2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHNlZWsuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxzZWVrLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbHNlZWsKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK2xzZWVrOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9sc2VlaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHN0YXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbHN0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTlkMTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9sc3RhdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbHN0YXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBsc3RhdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbHN0YXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX2xzdGF0NjQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWFkdmlzZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE5OTJmNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21hZHZpc2UuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1hZHZpc2UsICNmdW5jdGlvbgorICAgIC5nbG9ibCBtYWR2aXNlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittYWR2aXNlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tYWR2aXNlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21pbmNvcmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMmI1NDMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9taW5jb3JlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtaW5jb3JlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWluY29yZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWluY29yZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbWluY29yZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtkaXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzgzNzJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2Rpci5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWtkaXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBta2RpcgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWtkaXI6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21rZGlyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21rZGlyYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMzc3YzY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBta2RpcmF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtkaXJhdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWtkaXJhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbWtkaXJhdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2QuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbWtub2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYThiNmZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ta25vZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWtub2QsICNmdW5jdGlvbgorICAgIC5nbG9ibCBta25vZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbWtub2Q6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21rbm9kCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tbG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlZmY3MGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21sb2NrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtbG9jaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1sb2NrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittbG9jazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbWxvY2sKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21vdW50LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJiOWYxZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbW91bnQuUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1vdW50LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbW91bnQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK21vdW50OgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tb3VudAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcHJvdGVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxMDI5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21wcm90ZWN0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtcHJvdGVjdCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1wcm90ZWN0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittcHJvdGVjdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbXByb3RlY3QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21yZW1hcC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTc4NDRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tcmVtYXAuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1yZW1hcCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1yZW1hcAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXJlbWFwOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tcmVtYXAKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zZ2N0bC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2djdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzBiYmY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2djdGwuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1zZ2N0bCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1zZ2N0bAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXNnY3RsOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tc2djdGwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zZ2dldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2dnZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzE2NDQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2dnZXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1zZ2dldCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1zZ2dldAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXNnZ2V0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tc2dnZXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zZ3Jjdi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2dyY3YuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGI0MTI1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc2dyY3YuUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1zZ3JjdiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIG1zZ3JjdgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXNncmN2OgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9tc2dyY3YKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXNnc25kLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zZ3NuZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyYzkyZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL21zZ3NuZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXNnc25kLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXNnc25kCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittc2dzbmQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21zZ3NuZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXN5bmMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YWM3Y2QyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tc3luYy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXN5bmMsICNmdW5jdGlvbgorICAgIC5nbG9ibCBtc3luYworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXN5bmM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX21zeW5jCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bmxvY2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWVlNGQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9tdW5sb2NrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtdW5sb2NrLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXVubG9jaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworbXVubG9jazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfbXVubG9jaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3NjViMDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL211bm1hcC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXVubWFwLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXVubWFwCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCittdW5tYXA6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX211bm1hcAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvbmFub3NsZWVwLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmOWIxODEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL25hbm9zbGVlcC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbmFub3NsZWVwLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgbmFub3NsZWVwCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCituYW5vc2xlZXA6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX25hbm9zbGVlcAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGF1c2UuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcGF1c2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTE2ZWMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wYXVzZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcGF1c2UsICNmdW5jdGlvbgorICAgIC5nbG9ibCBwYXVzZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcGF1c2U6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3BhdXNlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9waXBlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3BpcGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWRjNzVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9waXBlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwaXBlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcGlwZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcGlwZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcGlwZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcG9sbC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9wb2xsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTRiMThlMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcG9sbC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcG9sbCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHBvbGwKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3BvbGw6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3BvbGwKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3ByY3RsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkNDE3YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcHJjdGwuUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHByY3RsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcHJjdGwKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3ByY3RsOgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9wcmN0bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlkODFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWFkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVhZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcmVhZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVhZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGxpbmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVhZGxpbmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjhhZThiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkbGluay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVhZGxpbmssICNmdW5jdGlvbgorICAgIC5nbG9ibCByZWFkbGluaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcmVhZGxpbms6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlYWRsaW5rCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWFkdi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0NTY0OGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlYWR2LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWFkdiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHJlYWR2CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZWFkdjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVhZHYKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Zmcm9tLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzQ0YjYwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVjdmZyb20uUwpAQCAtMCwwICsxLDIxIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlY3Zmcm9tLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVjdmZyb20KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3JlY3Zmcm9tOgorICAgIG1vdiAgICAgaXAsIHNwCisgICAgLnNhdmUgICB7cjQsIHI1LCByNiwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBsZG1mZCAgIGlwLCB7cjQsIHI1LCByNn0KKyAgICBsZHIgICAgIHI3LCA9X19OUl9yZWN2ZnJvbQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlY3Ztc2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjRiMWJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZWN2bXNnLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZWN2bXNnLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVjdm1zZworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcmVjdm1zZzoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcmVjdm1zZworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5ZjIzYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JlbmFtZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVuYW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVuYW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCityZW5hbWU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlbmFtZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvcmVuYW1lYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODA3ZGU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9yZW5hbWVhdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVuYW1lYXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCByZW5hbWVhdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworcmVuYW1lYXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3JlbmFtZWF0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ybWRpci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9ybWRpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFjMmY0YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3JtZGlyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBybWRpciwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHJtZGlyCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitybWRpcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfcm1kaXIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5NGVjOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9tYXguUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX2dldF9wcmlvcml0eV9tYXgsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzY2hlZF9nZXRfcHJpb3JpdHlfbWF4OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmFlODdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWluLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRfcHJpb3JpdHlfbWluLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfZ2V0X3ByaW9yaXR5X21pbjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21pbgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0cGFyYW0uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOWFkZGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfZ2V0cGFyYW0sICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRwYXJhbQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfZ2V0cGFyYW06CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NjaGVkX2dldHBhcmFtCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9nZXRzY2hlZHVsZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmEwNzBjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRzY2hlZHVsZXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRzY2hlZHVsZXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NjaGVkX2dldHNjaGVkdWxlcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQzODk1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NjaGVkX3JyX2dldF9pbnRlcnZhbDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfcnJfZ2V0X2ludGVydmFsCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmN2Y5MmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9zZXRwYXJhbSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX3NldHBhcmFtCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzY2hlZF9zZXRwYXJhbToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2NoZWRfc2V0cGFyYW0KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTY2N2M3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zY2hlZF9zZXRzY2hlZHVsZXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX3NldHNjaGVkdWxlciwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX3NldHNjaGVkdWxlcgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2NoZWRfc2V0c2NoZWR1bGVyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF9zZXRzY2hlZHVsZXIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NjaGVkX3lpZWxkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmMDE0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX3lpZWxkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfeWllbGQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NjaGVkX3lpZWxkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zY2hlZF95aWVsZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VsZWN0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbGVjdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMGNlNWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbGVjdC5TCkBAIC0wLDAgKzEsMjEgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2VsZWN0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2VsZWN0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZWxlY3Q6CisgICAgbW92ICAgICBpcCwgc3AKKyAgICAuc2F2ZSAgIHtyNCwgcjUsIHI2LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIGxkbWZkICAgaXAsIHtyNCwgcjUsIHI2fQorICAgIGxkciAgICAgcjcsID1fX05SX19uZXdzZWxlY3QKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VtY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbWN0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MGU0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbWN0bC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2VtY3RsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2VtY3RsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW1jdGw6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NlbWN0bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VtZ2V0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbWdldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYWJkMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbWdldC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2VtZ2V0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2VtZ2V0CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW1nZXQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NlbWdldAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2Vtb3AuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2Vtb3AuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMGVmNjhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW1vcC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2Vtb3AsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZW1vcAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2Vtb3A6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NlbW9wCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kZmlsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhMWRhNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZW5kZmlsZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNlbmRmaWxlCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW5kZmlsZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2VuZGZpbGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZG1zZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVhYzJkNjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NlbmRtc2cuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNlbmRtc2csICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZW5kbXNnCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZW5kbXNnOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZW5kbXNnCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZW5kdG8uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ0ODkxYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2VuZHRvLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZW5kdG8sICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZW5kdG8KKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NlbmR0bzoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfc2VuZHRvCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ0ZWU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRnaWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldGdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNldGdpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0Z2lkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0Z3JvdXBzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYTlkZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldGdyb3Vwcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0Z3JvdXBzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0Z3JvdXBzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRncm91cHM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldGdyb3VwczMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjRhZDU2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRpdGltZXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRpdGltZXIKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldGl0aW1lcjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0aXRpbWVyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHBnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZWM5OGM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwZ2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cGdpZAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0cGdpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cGdpZAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cHJpb3JpdHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTQxMTBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRwcmlvcml0eS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cHJpb3JpdHksICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRwcmlvcml0eQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0cHJpb3JpdHk6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldHByaW9yaXR5CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZWdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUzZDk0MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlZ2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZWdpZCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNldHJlZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRyZWdpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmVnaWQzMgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzZ2lkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzODI5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJlc2dpZC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cmVzZ2lkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVzZ2lkCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzZXRyZXNnaWQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NldHJlc2dpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRyZXN1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY2YzFhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmVzdWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZXN1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRyZXN1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJlc3VpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmVzdWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHJldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY5NGI0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmV1aWQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJldWlkLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmV1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJldWlkOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zZXRyZXVpZDMyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGE1ZGU0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRybGltaXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRybGltaXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHJsaW1pdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0cmxpbWl0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzaWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJiMDYxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0c2lkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRzaWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRzaWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHNpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0c2lkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NldHNvY2tvcHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMWYxMDRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXRzb2Nrb3B0LlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRzb2Nrb3B0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0c29ja29wdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2V0c29ja29wdDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0c29ja29wdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgcjYsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmY3OTA0MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXR0aW1lb2ZkYXksICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXR0aW1lb2ZkYXkKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHRpbWVvZmRheToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0dGltZW9mZGF5CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zZXR1aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzFjZjQ0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2V0dWlkLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXR1aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzZXR1aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NldHVpZDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2V0dWlkMzIKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NobWF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NobWF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI2M2JmMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htYXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNobWF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2htYXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NobWF0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaG1hdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htY3RsLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NobWN0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEyOWNhYTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NobWN0bC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2htY3RsLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2htY3RsCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzaG1jdGw6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NobWN0bAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htZHQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htZHQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU3MDdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaG1kdC5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2htZHQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzaG1kdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2htZHQ6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3NobWR0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaG1nZXQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htZ2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmUzMDcwNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2htZ2V0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzaG1nZXQsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzaG1nZXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3NobWdldDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2htZ2V0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaHV0ZG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjViZWMwMzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NodXRkb3duLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzaHV0ZG93biwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNodXRkb3duCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzaHV0ZG93bjoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2h1dGRvd24KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ2FjdGlvbi5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjk2ZjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdhY3Rpb24uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNpZ2FjdGlvbiwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNpZ2FjdGlvbgorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc2lnYWN0aW9uOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdhY3Rpb24KKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc2lncGVuZGluZy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjU2NWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3BlbmRpbmcuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNpZ3BlbmRpbmcsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzaWdwZW5kaW5nCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzaWdwZW5kaW5nOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zaWdwZW5kaW5nCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdwcm9jbWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zaWdwcm9jbWFzay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNTdkNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NpZ3Byb2NtYXNrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzaWdwcm9jbWFzaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNpZ3Byb2NtYXNrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzaWdwcm9jbWFzazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc2lncHJvY21hc2sKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldC5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2M5YTUzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zb2NrZXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNvY2tldCwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHNvY2tldAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc29ja2V0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zb2NrZXQKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc29ja2V0cGFpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZjA3ZDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3NvY2tldHBhaXIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNvY2tldHBhaXIsICNmdW5jdGlvbgorICAgIC5nbG9ibCBzb2NrZXRwYWlyCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCitzb2NrZXRwYWlyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl9zb2NrZXRwYWlyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zdGF0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmFmY2M1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zdGF0LlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzdGF0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc3RhdAorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc3RhdDoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3RhdDY0CisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3N5bWxpbmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2I1NTRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW1saW5rLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzeW1saW5rLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgc3ltbGluaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworc3ltbGluazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfc3ltbGluaworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3luYy5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy9zeW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzc4ZDM4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvc3luYy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc3luYywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHN5bmMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3N5bmM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3N5bmMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2NyZWF0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9jcmVhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjkwNzc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9jcmVhdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRpbWVyX2NyZWF0ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVyX2NyZWF0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordGltZXJfY3JlYXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9jcmVhdGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2RlbGV0ZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9kZWxldGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWQ4OWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9kZWxldGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRpbWVyX2RlbGV0ZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVyX2RlbGV0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordGltZXJfZGVsZXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9kZWxldGUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2dldG92ZXJydW4uUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJfZ2V0b3ZlcnJ1bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJkZDRlMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2dldG92ZXJydW4uUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRpbWVyX2dldG92ZXJydW4sICNmdW5jdGlvbgorICAgIC5nbG9ibCB0aW1lcl9nZXRvdmVycnVuCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit0aW1lcl9nZXRvdmVycnVuOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcl9nZXRvdmVycnVuCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9nZXR0aW1lLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVyX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNGJiNzVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9nZXR0aW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcl9nZXR0aW1lLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGltZXJfZ2V0dGltZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordGltZXJfZ2V0dGltZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdGltZXJfZ2V0dGltZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90aW1lcl9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDhhMThhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXJfc2V0dGltZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdGltZXJfc2V0dGltZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVyX3NldHRpbWUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3RpbWVyX3NldHRpbWU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3RpbWVyX3NldHRpbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3RpbWVzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzFhYjBjZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdGltZXMuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRpbWVzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGltZXMKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3RpbWVzOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl90aW1lcworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdHJ1bmNhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzRjODI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy90cnVuY2F0ZS5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdHJ1bmNhdGUsICNmdW5jdGlvbgorICAgIC5nbG9ibCB0cnVuY2F0ZQorICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordHJ1bmNhdGU6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3RydW5jYXRlCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bWFzay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZmMTgyNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VtYXNrLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bWFzaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHVtYXNrCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit1bWFzazoKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdW1hc2sKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vtb3VudDIuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW1vdW50Mi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1OWMzYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3Vtb3VudDIuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVtb3VudDIsICNmdW5jdGlvbgorICAgIC5nbG9ibCB1bW91bnQyCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit1bW91bnQyOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91bW91bnQyCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYTA1ZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VuYW1lLlMKQEAgLTAsMCArMSwxOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bmFtZSwgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHVuYW1lCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit1bmFtZToKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPV9fTlJfdW5hbWUKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGluay5TIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43N2FlOWI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy91bmxpbmsuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGluaywgI2Z1bmN0aW9uCisgICAgLmdsb2JsIHVubGluaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordW5saW5rOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91bmxpbmsKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3VubGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWIzMWU4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGlua2F0LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW5saW5rYXQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3VubGlua2F0OgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl91bmxpbmthdAorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdXRpbWVzLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmU4ZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdXRpbWVzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgdXRpbWVzCisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit1dGltZXM6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3V0aW1lcworICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvdmZvcmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTQxNzYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLWFybS9zeXNjYWxscy92Zm9yay5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdmZvcmssICNmdW5jdGlvbgorICAgIC5nbG9ibCB2Zm9yaworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKwordmZvcms6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3Zmb3JrCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI3fQorICAgIG1vdnMgICAgcjAsIHIwCisgICAgYnhwbCAgICBscgorICAgIGIgICAgICAgX19zZXRfc3lzY2FsbF9lcnJubworICAgIC5mbmVuZApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLWFybS9zeXNjYWxscy93YWl0aWQuUyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDEzNGU1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd2FpdGlkLlMKQEAgLTAsMCArMSwyMSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB3YWl0aWQsICNmdW5jdGlvbgorICAgIC5nbG9ibCB3YWl0aWQKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3dhaXRpZDoKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPV9fTlJfd2FpdGlkCisgICAgc3dpICAgICAjMAorICAgIGxkbWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCmRpZmYgLS1naXQgYS9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDZkZjMzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGUuUwpAQCAtMCwwICsxLDE5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHdyaXRlLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgd3JpdGUKKyAgICAuYWxpZ24gNAorICAgIC5mbnN0YXJ0CisKK3dyaXRlOgorICAgIC5zYXZlICAge3I0LCByN30KKyAgICBzdG1mZCAgIHNwISwge3I0LCByN30KKyAgICBsZHIgICAgIHI3LCA9X19OUl93cml0ZQorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC1hcm0vc3lzY2FsbHMvd3JpdGV2LlMgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YjA0ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gtYXJtL3N5c2NhbGxzL3dyaXRldi5TCkBAIC0wLDAgKzEsMTkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgd3JpdGV2LCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgd3JpdGV2CisgICAgLmFsaWduIDQKKyAgICAuZm5zdGFydAorCit3cml0ZXY6CisgICAgLnNhdmUgICB7cjQsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI3fQorICAgIGxkciAgICAgcjcsID1fX05SX3dyaXRldgorICAgIHN3aSAgICAgIzAKKyAgICBsZG1mZCAgIHNwISwge3I0LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3NwLlMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF9zcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlYWFhNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF9zcC5TCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyAgICAudGV4dAorICAgIC50eXBlIF9fZ2V0X3NwLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmFsIF9fZ2V0X3NwCisgICAgLmFsaWduIDQKKworX19nZXRfc3A6CisgICAgbW92ICAlZXNwLCAlZWF4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF90bHMuYyBiL2xpYmMvYXJjaC14ODYvYmlvbmljL19fZ2V0X3Rscy5jCm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjY4ZGRhODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX2dldF90bHMuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisvKiBzZWUgdGhlIGltcGxlbWVudGF0aW9uIG9mIF9fc2V0X3RscyBhbmQgcHRocmVhZC5jIHRvIHVuZGVyc3RhbmQgdGhpcworICogY29kZS4gQmFzaWNhbGx5LCB0aGUgY29udGVudCBvZiBmczpbMF0gYWx3YXlzIGlzIGEgcG9pbnRlciB0byB0aGUgYmFzZQorICogYWRkcmVzcyBvZiB0aGUgdGxzIHJlZ2lvbgorICovCit2b2lkKiAgIF9fZ2V0X3Rscyh2b2lkKQoreworICB2b2lkKiAgdGxzOworICBhc20gKCAiICAgbW92bCAgJSVmczowLCUwIiA6ICI9ciIodGxzKSApOworICByZXR1cm4gdGxzOworfQpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMgYi9saWJjL2FyY2gteDg2L2Jpb25pYy9fX3NldF90bHMuYwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi44ZGZmOGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvX19zZXRfdGxzLmMKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworc3RydWN0IHVzZXJfZGVzYyB7CisgICAgdW5zaWduZWQgaW50ICAgIGVudHJ5X251bWJlcjsKKyAgICB1bnNpZ25lZCBsb25nICAgYmFzZV9hZGRyOworICAgIHVuc2lnbmVkIGludCAgICBsaW1pdDsKKyAgICB1bnNpZ25lZCBpbnQgICAgc2VnXzMyYml0OjE7CisgICAgdW5zaWduZWQgaW50ICAgIGNvbnRlbnRzOjI7CisgICAgdW5zaWduZWQgaW50ICAgIHJlYWRfZXhlY19vbmx5OjE7CisgICAgdW5zaWduZWQgaW50ICAgIGxpbWl0X2luX3BhZ2VzOjE7CisgICAgdW5zaWduZWQgaW50ICAgIHNlZ19ub3RfcHJlc2VudDoxOworICAgIHVuc2lnbmVkIGludCAgICB1c2VhYmxlOjE7CisgICAgdW5zaWduZWQgaW50ICAgIGVtcHR5OjI1OworfTsKKworLyogdGhlIGZvbGxvd2luZyBjYW4ndCBiZSBjb25zdCwgc2luY2UgdGhlIGZpcnN0IGNhbGwgd2lsbAorICogdXBkYXRlIHRoZSAnZW50cnlfbnVtYmVyJyBmaWVsZAorICovCitzdGF0aWMgc3RydWN0IHVzZXJfZGVzYyAgX3Rsc19kZXNjID0KK3sKKyAgICAtMSwKKyAgICAwLAorICAgIDB4MTAwMCwKKyAgICAxLAorICAgIDAsCisgICAgMCwKKyAgICAxLAorICAgIDAsCisgICAgMSwKKyAgICAwCit9OworCisvKiB3ZSBpbXBsZW1lbnQgdGhyZWFkIGxvY2FsIHN0b3JhZ2UgdGhyb3VnaCB0aGUgZnM6IHNlZ21lbnQgZGVzY3JpcHRvcgorICogd2UgY3JlYXRlIGEgc2VnbWVudCBkZXNjcmlwdG9yIGZvciB0aGUgdGxzCisgKi8KK2ludCBfX3NldF90bHModm9pZCAqcHRyKQoreworICAgIGludCAgIHJjLCBzZWdtZW50OworCisgICAgX3Rsc19kZXNjLmJhc2VfYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKKworICAgIHJjID0gX19zZXRfdGhyZWFkX2FyZWEoICZfdGxzX2Rlc2MgKTsKKyAgICBpZiAocmMgIT0gMCkKKyAgICB7CisgICAgICAgIC8qIGNvdWxkIG5vdCBzZXQgdGhyZWFkIGxvY2FsIGFyZWEgKi8KKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIHRoaXMgd2VpcmQgY29tcHV0YXRpb24gY29tZXMgZnJvbSBHTGliYyAqLworICAgIHNlZ21lbnQgPSBfdGxzX2Rlc2MuZW50cnlfbnVtYmVyKjggKyAzOworICAgIGFzbSBfX3ZvbGF0aWxlX18gKAorICAgICAgICAiICAgbW92dyAldzAsICUlZnMiIDo6ICJyIihzZWdtZW50KQorICAgICk7CisgICAgcmV0dXJuIDA7Cit9CisKKworCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2Jpb25pYy9hdG9taWNzX3g4Ni5jIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRvbWljc194ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iN2IyMGU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9iaW9uaWMvYXRvbWljc194ODYuYwpAQCAtMCwwICsxLDEwNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CisKKyNkZWZpbmUgRlVURVhfU1lTQ0FMTCAyNDAKKyNkZWZpbmUgRlVURVhfV0FJVCAwCisjZGVmaW5lIEZVVEVYX1dBS0UgMQorCitpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCkKK3sKKyAgICBpbnQgcmV0OworICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICJpbnQgJDB4ODA7IgorICAgICAgICA6ICI9YSIgKHJldCkKKyAgICAgICAgOiAiMCIgKEZVVEVYX1NZU0NBTEwpLAorICAgICAgICAgICJiIiAoZnR4KSwKKyAgICAgICAgICAiYyIgKEZVVEVYX1dBSVQpLAorICAgICAgICAgICJkIiAodmFsKSwKKyAgICAgICAgICAiUyIgKDApCisgICAgKTsKKyAgICByZXR1cm4gcmV0OworfQorCitpbnQgX19mdXRleF93YWtlKHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IGNvdW50KQoreworICAgIGludCByZXQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImludCAkMHg4MDsiCisgICAgICAgIDogIj1hIiAocmV0KQorICAgICAgICA6ICIwIiAoRlVURVhfU1lTQ0FMTCksCisgICAgICAgICAgImIiIChmdHgpLAorICAgICAgICAgICJjIiAoRlVURVhfV0FLRSksCisgICAgICAgICAgImQiIChjb3VudCkKKyAgICApOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBfX2F0b21pY19jbXB4Y2hnKGludCBvbGQsIGludCBuZXcsIHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCB4Y2hnOworICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICJsb2NrOyIKKyAgICAgICAgImNtcHhjaGcgJSVlY3gsICglJWVkeCk7IgorICAgICAgICAic2V0bmUgJSVhbDsiCisgICAgICAgIDogIj1hIiAoeGNoZykKKyAgICAgICAgOiAiYSIgKG9sZCksCisgICAgICAgICAgImMiIChuZXcpLAorICAgICAgICAgICJkIiAoYWRkcikKKyAgICApOworICAgIHJldHVybiB4Y2hnOworfQorCitpbnQgX19hdG9taWNfc3dhcChpbnQgbmV3LCB2b2xhdGlsZSBpbnQqIGFkZHIpIHsKKyAgICBpbnQgb2xkOworICAgIGFzbSB2b2xhdGlsZSAoCisgICAgICAgICJsb2NrOyIKKyAgICAgICAgInhjaGcgJSVlY3gsICglJWVkeCk7IgorICAgICAgICA6ICI9YyIgKG9sZCkKKyAgICAgICAgOiAiYyIgKG5ldyksCisgICAgICAgICAgImQiIChhZGRyKQorICAgICk7CisgICAgcmV0dXJuIG9sZDsKK30KKworaW50IF9fYXRvbWljX2RlYyh2b2xhdGlsZSBpbnQqIGFkZHIpIHsKKyAgICBpbnQgb2xkOworICAgIGRvIHsKKyAgICAgICAgb2xkID0gKmFkZHI7CisgICAgfSB3aGlsZSAoYXRvbWljX2NtcHhjaGcob2xkLCBvbGQtMSwgYWRkcikpOworICAgIHJldHVybiBvbGQ7Cit9CisKK2ludCBfX2F0b21pY19pbmModm9sYXRpbGUgaW50KiBhZGRyKSB7CisgICAgaW50IG9sZDsKKyAgICBkbyB7CisgICAgICAgIG9sZCA9ICphZGRyOworICAgIH0gd2hpbGUgKGF0b21pY19jbXB4Y2hnKG9sZCwgb2xkKzEsIGFkZHIpKTsKKyAgICByZXR1cm4gb2xkOworfQorCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvZW5kaWFuLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQzNzkxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9lbmRpYW4uaApAQCAtMCwwICsxLDcwIEBACisvKgkkT3BlbkJTRDogZW5kaWFuLmgsdiAxLjE0IDIwMDUvMTIvMTMgMDA6MzU6MjMgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NyBOaWtsYXMgSGFsbHF2aXN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfSTM4Nl9FTkRJQU5fSF8KKyNkZWZpbmUgX0kzODZfRU5ESUFOX0hfCisKKyNpZmRlZiBfX0dOVUNfXworCisjaWYgZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChJMzg2X0NQVSkKKyNkZWZpbmUJX19zd2FwMzJtZCh4KSAoewkJCQkJCVwKKwl1X2ludDMyX3QgX19zd2FwMzJtZF94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtICgiYnN3YXAgJTEiIDogIityIiAoX19zd2FwMzJtZF94KSk7CQkJXAorCV9fc3dhcDMybWRfeDsJCQkJCQkJXAorfSkKKyNlbHNlCisjZGVmaW5lCV9fc3dhcDMybWQoeCkgKHsJCQkJCQlcCisJdV9pbnQzMl90IF9fc3dhcDMybWRfeCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2FzbSAoInJvcncgJDgsICV3MTsgcm9ybCAkMTYsICUxOyByb3J3ICQ4LCAldzEiIDoJCVwKKwkgICAgIityIiAoX19zd2FwMzJtZF94KSk7CQkJCQlcCisJX19zd2FwMzJtZF94OwkJCQkJCQlcCit9KQorI2VuZGlmCS8qIF9LRVJORUwgJiYgIUkzODZfQ1BVICovCisKKyNkZWZpbmUJX19zd2FwNjRtZCh4KSAoewkJCQkJCVwKKwl1X2ludDY0X3QgX19zd2FwNjRtZF94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCSh1X2ludDY0X3QpX19zd2FwMzJtZChfX3N3YXA2NG1kX3ggPj4gMzIpIHwJCQlcCisJICAgICh1X2ludDY0X3QpX19zd2FwMzJtZChfX3N3YXA2NG1kX3ggJiAweGZmZmZmZmZmKSA8PCAzMjsJXAorfSkKKyNkZWZpbmUJX19zd2FwMTZtZCh4KSAoewkJCQkJCVwKKwl1X2ludDE2X3QgX19zd2FwMTZtZF94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCV9fYXNtICgicm9ydyAkOCwgJXcxIiA6ICIrciIgKF9fc3dhcDE2bWRfeCkpOwkJCVwKKwlfX3N3YXAxNm1kX3g7CQkJCQkJCVwKK30pCisKKy8qIFRlbGwgc3lzL2VuZGlhbi5oIHdlIGhhdmUgTUQgdmFyaWFudHMgb2YgdGhlIHN3YXAgbWFjcm9zLiAgKi8KKyNkZWZpbmUgTURfU1dBUAorCisjZW5kaWYJLyogX19HTlVDX18gKi8KKworI2RlZmluZSBfQllURV9PUkRFUiBfTElUVExFX0VORElBTgorI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9JMzg2X0VORElBTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9fdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYTMxZTIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvX3R5cGVzLmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qCSRPcGVuQlNEOiBfdHlwZXMuaCx2IDEuMiAyMDA2LzAxLzEzIDE3OjUwOjA2IG1pbGxlcnQgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpdHlwZXMuaAk4LjMgKEJlcmtlbGV5KSAxLzUvOTQKKyAqCUAoIylhbnNpLmgJOC4yIChCZXJrZWxleSkgMS80Lzk0CisgKi8KKworI2lmbmRlZiBfSTM4Nl9fVFlQRVNfSF8KKyNkZWZpbmUgX0kzODZfX1RZUEVTX0hfCisKKy8qIHRoZSBrZXJuZWwgZGVmaW5lcyBzaXplX3QgYXMgdW5zaWduZWQgaW50LCBidXQgZysrIHdhbnRzIGl0IHRvIGJlIHVuc2lnbmVkIGxvbmcgKi8KKyNkZWZpbmUgX1NJWkVfVAorI2RlZmluZSBfUFRSRElGRl9UCit0eXBlZGVmIHVuc2lnbmVkIGludCAgIHNpemVfdDsKK3R5cGVkZWYgaW50ICAgICAgICAgICAgcHRyZGlmZl90OworCisjZGVmaW5lIF9PRkZfVF9ERUZJTkVEXworI2RlZmluZSBfU0laRV9UX0RFRklORURfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisvKiA3LjE4LjEuMSBFeGFjdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCit0eXBlZGVmCV9fc2lnbmVkIGNoYXIJCV9faW50OF90OwordHlwZWRlZgl1bnNpZ25lZCBjaGFyCQlfX3VpbnQ4X3Q7Cit0eXBlZGVmCXNob3J0CQkJX19pbnQxNl90OwordHlwZWRlZgl1bnNpZ25lZCBzaG9ydAkJX191aW50MTZfdDsKK3R5cGVkZWYJaW50CQkJX19pbnQzMl90OwordHlwZWRlZgl1bnNpZ25lZCBpbnQJCV9fdWludDMyX3Q7CisvKiBMT05HTE9ORyAqLwordHlwZWRlZglsb25nIGxvbmcJCV9faW50NjRfdDsKKy8qIExPTkdMT05HICovCit0eXBlZGVmCXVuc2lnbmVkIGxvbmcgbG9uZwlfX3VpbnQ2NF90OworCisvKiA3LjE4LjEuMiBNaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19pbnQ4X3QJCV9faW50X2xlYXN0OF90OwordHlwZWRlZglfX3VpbnQ4X3QJCV9fdWludF9sZWFzdDhfdDsKK3R5cGVkZWYJX19pbnQxNl90CQlfX2ludF9sZWFzdDE2X3Q7Cit0eXBlZGVmCV9fdWludDE2X3QJCV9fdWludF9sZWFzdDE2X3Q7Cit0eXBlZGVmCV9faW50MzJfdAkJX19pbnRfbGVhc3QzMl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfbGVhc3QzMl90OwordHlwZWRlZglfX2ludDY0X3QJCV9faW50X2xlYXN0NjRfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50X2xlYXN0NjRfdDsKKworLyogNy4xOC4xLjMgRmFzdGVzdCBtaW5pbXVtLXdpZHRoIGludGVnZXIgdHlwZXMgKi8KK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0OF90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDhfdDsKK3R5cGVkZWYJX19pbnQzMl90CQlfX2ludF9mYXN0MTZfdDsKK3R5cGVkZWYJX191aW50MzJfdAkJX191aW50X2Zhc3QxNl90OwordHlwZWRlZglfX2ludDMyX3QJCV9faW50X2Zhc3QzMl90OwordHlwZWRlZglfX3VpbnQzMl90CQlfX3VpbnRfZmFzdDMyX3Q7Cit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRfZmFzdDY0X3Q7Cit0eXBlZGVmCV9fdWludDY0X3QJCV9fdWludF9mYXN0NjRfdDsKKworLyogNy4xOC4xLjQgSW50ZWdlciB0eXBlcyBjYXBhYmxlIG9mIGhvbGRpbmcgb2JqZWN0IHBvaW50ZXJzICovCit0eXBlZGVmCWludCAJCQlfX2ludHB0cl90OwordHlwZWRlZgl1bnNpZ25lZCBpbnQgCV9fdWludHB0cl90OworCisvKiA3LjE4LjEuNSBHcmVhdGVzdC13aWR0aCBpbnRlZ2VyIHR5cGVzICovCit0eXBlZGVmCV9faW50NjRfdAkJX19pbnRtYXhfdDsKK3R5cGVkZWYJX191aW50NjRfdAkJX191aW50bWF4X3Q7CisKKy8qIFJlZ2lzdGVyIHNpemUgKi8KK3R5cGVkZWYgX19pbnQzMl90CQlfX3JlZ2lzdGVyX3Q7CisKKy8qIFZNIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3ZhZGRyX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcJCV9fcGFkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZwkJX192c2l6ZV90OwordHlwZWRlZiB1bnNpZ25lZCBsb25nCQlfX3BzaXplX3Q7CisKKy8qIFN0YW5kYXJkIHN5c3RlbSB0eXBlcyAqLwordHlwZWRlZiBpbnQJCQlfX2Nsb2NrX3Q7Cit0eXBlZGVmIGludAkJCV9fY2xvY2tpZF90OwordHlwZWRlZiBsb25nCQkJX19wdHJkaWZmX3Q7Cit0eXBlZGVmCWludAkJCV9fdGltZV90OwordHlwZWRlZiBpbnQJCQlfX3RpbWVyX3Q7CisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPj0gMwordHlwZWRlZglfX2J1aWx0aW5fdmFfbGlzdAlfX3ZhX2xpc3Q7CisjZWxzZQordHlwZWRlZgljaGFyICoJCQlfX3ZhX2xpc3Q7CisjZW5kaWYKKworLyogV2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCB0eXBlcyAqLworI2lmbmRlZiBfX2NwbHVzcGx1cwordHlwZWRlZglpbnQJCQlfX3djaGFyX3Q7CisjZW5kaWYKK3R5cGVkZWYgaW50CQkJX193aW50X3Q7Cit0eXBlZGVmCWludAkJCV9fcnVuZV90OwordHlwZWRlZgl2b2lkICoJCQlfX3djdHJhbnNfdDsKK3R5cGVkZWYJdm9pZCAqCQkJX193Y3R5cGVfdDsKKworLyogRmVhdHVyZSB0ZXN0IG1hY3JvcyAqLworI2RlZmluZSBfX0hBVkVfQ1BVSU5GTworI2RlZmluZSBfX0hBVkVfTVVURVgKKworI2VuZGlmCS8qIF9JMzg2X19UWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9hc20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMmRhNTc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvYXNtLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCSRPcGVuQlNEOiBhc20uaCx2IDEuOCAyMDA0LzA2LzEzIDIxOjQ5OjE2IG5pa2xhcyBFeHAgJAkqLworLyoJJE5ldEJTRDogYXNtLmgsdiAxLjcgMTk5NC8xMC8yNyAwNDoxNTo1NiBjZ2QgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogV2lsbGlhbSBKb2xpdHouCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylhc20uaAk1LjUgKEJlcmtlbGV5KSA1LzcvOTEKKyAqLworCisjaWZuZGVmIF9JMzg2X0FTTV9IXworI2RlZmluZSBfSTM4Nl9BU01fSF8KKworI2lmZGVmIFBJQworI2RlZmluZSBQSUNfUFJPTE9HVUUJXAorCXB1c2hsCSVlYng7CVwKKwljYWxsCTY2NmY7CVwKKzY2NjoJCQlcCisJcG9wbAklZWJ4OwlcCisJYWRkbAkkX0NfTEFCRUwoX0dMT0JBTF9PRkZTRVRfVEFCTEVfKStbLi02NjZiXSwgJWVieAorI2RlZmluZSBQSUNfRVBJTE9HVUUJXAorCXBvcGwJJWVieAorI2RlZmluZSBQSUNfUExUKHgpCXhAUExUCisjZGVmaW5lIFBJQ19HT1QoeCkJeEBHT1QoJWVieCkKKyNkZWZpbmUgUElDX0dPVE9GRih4KQl4QEdPVE9GRiglZWJ4KQorI2Vsc2UKKyNkZWZpbmUgUElDX1BST0xPR1VFCisjZGVmaW5lIFBJQ19FUElMT0dVRQorI2RlZmluZSBQSUNfUExUKHgpCXgKKyNkZWZpbmUgUElDX0dPVCh4KQl4CisjZGVmaW5lIFBJQ19HT1RPRkYoeCkJeAorI2VuZGlmCisKKyNkZWZpbmUgX0NfTEFCRUwobmFtZSkJbmFtZQorI2RlZmluZQlfQVNNX0xBQkVMKHgpCXgKKworI2RlZmluZSBDVkFST0ZGKHgsIHkpCV9DX0xBQkVMKHgpICsgeQorCisjaWZkZWYgX19TVERDX18KKyMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeCAjIyB5CisjIGRlZmluZSBfX1NUUklORyh4KQkjeAorI2Vsc2UKKyMgZGVmaW5lIF9fQ09OQ0FUKHgseSkJeC8qKi95CisjIGRlZmluZSBfX1NUUklORyh4KQkieCIKKyNlbmRpZgorCisvKgorICogV0VBSyBBTElBUzogY3JlYXRlIGEgd2VhayBhbGlhcworICovCisjZGVmaW5lIFdFQUtfQUxJQVMoYWxpYXMsc3ltKSBcCisJLndlYWsgYWxpYXM7IFwKKwlhbGlhcyA9IHN5bQorCisvKgorICogV0FSTl9SRUZFUkVOQ0VTOiBjcmVhdGUgYSB3YXJuaW5nIGlmIHRoZSBzcGVjaWZpZWQgc3ltYm9sIGlzIHJlZmVyZW5jZWQKKyAqLworI2RlZmluZSBXQVJOX1JFRkVSRU5DRVMoX3N5bSxfbXNnKQlcCisJLnNlY3Rpb24gLmdudS53YXJuaW5nLiAjIyBfc3ltIDsgLmFzY2lpIF9tc2cgOyAudGV4dAorCisvKiBsZXQga2VybmVscyBhbmQgb3RoZXJzIG92ZXJyaWRlIGVudHJ5cG9pbnQgYWxpZ25tZW50ICovCisjaWZuZGVmIF9BTElHTl9URVhUCisjIGRlZmluZSBfQUxJR05fVEVYVCAuYWxpZ24gMiwgMHg5MAorI2VuZGlmCisKKyNkZWZpbmUgX0VOVFJZKHgpIFwKKwkudGV4dDsgX0FMSUdOX1RFWFQ7IC5nbG9ibCB4OyAudHlwZSB4LEBmdW5jdGlvbjsgeDoKKworI2lmZGVmIEdQUk9GCisjIGRlZmluZSBfUFJPRl9QUk9MT0dVRQlcCisJcHVzaGwgJWVicDsgbW92bCAlZXNwLCVlYnA7IGNhbGwgUElDX1BMVChtY291bnQpOyBwb3BsICVlYnAKKyNlbHNlCisjIGRlZmluZSBfUFJPRl9QUk9MT0dVRQorI2VuZGlmCisKKyNkZWZpbmUJRU5UUlkoeSkJX0VOVFJZKF9DX0xBQkVMKHkpKTsgX1BST0ZfUFJPTE9HVUUKKyNkZWZpbmUJTkVOVFJZKHkpCV9FTlRSWShfQ19MQUJFTCh5KSkKKyNkZWZpbmUJQVNFTlRSWSh5KQlfRU5UUlkoX0FTTV9MQUJFTCh5KSk7IF9QUk9GX1BST0xPR1VFCisKKyNkZWZpbmUJQUxURU5UUlkobmFtZSkJLmdsb2JsIF9DX0xBQkVMKG5hbWUpOyBfQ19MQUJFTChuYW1lKToKKworI2RlZmluZQlBU01TVFIJCS5hc2NpegorCisjZGVmaW5lIFJDU0lEKHgpCS50ZXh0OyAuYXNjaXogeAorCisjZW5kaWYgLyogIV9JMzg2X0FTTV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvY2RlZnMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2NkZWZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVmZWU2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2NkZWZzLmgKQEAgLTAsMCArMSwyNCBAQAorLyoJJE9wZW5CU0Q6IGNkZWZzLmgsdiAxLjkgMjAwNS8xMS8yNCAyMDo0Njo0NSBkZXJhYWR0IEV4cCAkCSovCisKKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQHdpbXNleS5jb20+IDAxLzE3Lzk1LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaWZuZGVmCV9NQUNISU5FX0NERUZTX0hfCisjZGVmaW5lCV9NQUNISU5FX0NERUZTX0hfCisKKyNpZiBkZWZpbmVkKGxpbnQpCisjZGVmaW5lIF9faW5kcl9yZWZlcmVuY2Uoc3ltLGFsaWFzKQlfX2xpbnRfZXF1YWxfXyhzeW0sYWxpYXMpCisjZGVmaW5lIF9fd2Fybl9yZWZlcmVuY2VzKHN5bSxtc2cpCisjZGVmaW5lIF9fd2Vha19hbGlhcyhhbGlhcyxzeW0pCQlfX2xpbnRfZXF1YWxfXyhzeW0sYWxpYXMpCisjZWxpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fU1REQ19fKQorI2RlZmluZSBfX3dlYWtfYWxpYXMoYWxpYXMsc3ltKQkJCQlcCisJX19hc21fXygiLndlYWsgIiBfX1NUUklORyhhbGlhcykgIiA7ICIJCVwKKwkgICAgX19TVFJJTkcoYWxpYXMpICIgPSAiIF9fU1RSSU5HKHN5bSkpOworI2RlZmluZSBfX3dhcm5fcmVmZXJlbmNlcyhzeW0sbXNnKQkJCVwKKwlfX2FzbV9fKCIuc2VjdGlvbiAuZ251Lndhcm5pbmcuIiBfX1NUUklORyhzeW0pCVwKKwkgICAgIiA7IC5hc2NpaSBcIiIgbXNnICJcIiA7IC50ZXh0Iik7CisjZW5kaWYKKworI2VuZGlmIC8qICFfTUFDSElORV9DREVGU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvZXhlYy5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvZXhlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOTE3NDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9leGVjLmgKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IGV4ZWMuaCx2IDEuOSAyMDAzLzA0LzE3IDAzOjQyOjE0IGRyYWhuIEV4cCAkCSovCisvKgkkTmV0QlNEOiBleGVjLmgsdiAxLjYgMTk5NC8xMC8yNyAwNDoxNjowNSBjZ2QgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBDaHJpc3RvcGhlciBHLiBEZW1ldHJpb3UKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0kzODZfRVhFQ19IXworI2RlZmluZSBfSTM4Nl9FWEVDX0hfCisKKyNkZWZpbmUgX19MRFBHU1oJNDA5NgorCisjZGVmaW5lIE5BVElWRV9FWEVDX0VMRgorCisjZGVmaW5lIEFSQ0hfRUxGU0laRQkJMzIKKworI2RlZmluZSBFTEZfVEFSR19DTEFTUwkJRUxGQ0xBU1MzMgorI2RlZmluZSBFTEZfVEFSR19EQVRBCQlFTEZEQVRBMkxTQgorI2RlZmluZSBFTEZfVEFSR19NQUNICQlFTV8zODYgLyogWFhYIC0gRU1fNDg2IGlzIGN1cnJlbnRseSB1bnVzZWQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ5IGFsbCBPU3MvY29tcGlsZXJzL2xpbmtlcnMgKi8KKworI2RlZmluZSBfTkxJU1RfRE9fQU9VVAorI2RlZmluZSBfTkxJU1RfRE9fRUxGCisKKyNkZWZpbmUgX0tFUk5fRE9fQU9VVAorI2RlZmluZSBfS0VSTl9ET19FTEYKKworI2VuZGlmICAvKiBfSTM4Nl9FWEVDX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pZWVlLmggYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pZWVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTViMzcwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2llZWUuaApAQCAtMCwwICsxLDEzMyBAQAorLyoJJE9wZW5CU0Q6IGllZWUuaCx2IDEuMiAyMDAzLzA2LzAyIDIzOjI3OjQ3IG1pbGxlcnQgRXhwICQgKi8KKy8qCSROZXRCU0Q6IGllZWUuaCx2IDEuMSAxOTk2LzA5LzMwIDE2OjM0OjI1IHdzIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgd2FzIGRldmVsb3BlZCBieSB0aGUgQ29tcHV0ZXIgU3lzdGVtcyBFbmdpbmVlcmluZyBncm91cAorICogYXQgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSB1bmRlciBEQVJQQSBjb250cmFjdCBCRyA5MS02NiBhbmQKKyAqIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5LgorICoKKyAqIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICoJQ2FsaWZvcm5pYSwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWllZWUuaAk4LjEgKEJlcmtlbGV5KSA2LzExLzkzCisgKi8KKworLyoKKyAqIGllZWUuaCBkZWZpbmVzIHRoZSBtYWNoaW5lLWRlcGVuZGVudCBsYXlvdXQgb2YgdGhlIG1hY2hpbmUncyBJRUVFCisgKiBmbG9hdGluZyBwb2ludC4gIEl0IGRvZXMgKm5vdCogZGVmaW5lICh5ZXQ/KSBhbnkgb2YgdGhlIHJvdW5kaW5nCisgKiBtb2RlIGJpdHMsIGV4Y2VwdGlvbnMsIGFuZCBzbyBmb3J0aC4KKyAqLworCisvKgorICogRGVmaW5lIHRoZSBudW1iZXIgb2YgYml0cyBpbiBlYWNoIGZyYWN0aW9uIGFuZCBleHBvbmVudC4KKyAqCisgKgkJICAgICBrCSAgICAgICAgIGsrMQorICogTm90ZSB0aGF0ICAxLjAgeCAyICA9PSAwLjEgeCAyICAgICAgYW5kIHRoYXQgZGVub3JtcyBhcmUgcmVwcmVzZW50ZWQKKyAqCisgKgkJCQkJICAoLWV4cF9iaWFzKzEpCisgKiBhcyBmcmFjdGlvbnMgdGhhdCBsb29rIGxpa2UgMC5mZmZmZiB4IDIgICAgICAgICAgICAgLiAgVGhpcyBtZWFucyB0aGF0CisgKgorICoJCQkgLTEyNgorICogdGhlIG51bWJlciAwLjEwMDAwIHggMiAgICAsIGZvciBpbnN0YW5jZSwgaXMgdGhlIHNhbWUgYXMgdGhlIG5vcm1hbGl6ZWQKKyAqCisgKgkJLTEyNwkJCSAgIC0xMjgKKyAqIGZsb2F0IDEuMCB4IDIgICAgLiAgVGh1cywgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIG9uZSBsZWFkaW5nIHplcm8KKyAqCisgKgkJCQkgIC0xMjkKKyAqIGluIHRoZSBmcmFjdGlvbjsgdG8gcmVwcmVzZW50IDIgICAgLCB3ZSBuZWVkIHR3bywgYW5kIHNvIG9uLiAgVGhpcworICoKKyAqCQkJCQkJICAgICAoLWV4cF9iaWFzLWZyYWNiaXRzKzEpCisgKiBpbXBsaWVzIHRoYXQgdGhlIHNtYWxsZXN0IGRlbm9ybWFsaXplZCBudW1iZXIgaXMgMgorICoKKyAqIGZvciB3aGljaGV2ZXIgZm9ybWF0IHdlIGFyZSB0YWxraW5nIGFib3V0OiBmb3Igc2luZ2xlIHByZWNpc2lvbiwgZm9yCisgKgorICoJCQkJCQktMTI2CQktMTQ5CisgKiBpbnN0YW5jZSwgd2UgZ2V0IC4wMDAwMDAwMDAwMDAwMDAwMDAwMDAwMSB4IDIgICAgLCBvciAxLjAgeCAyICAgICwgYW5kCisgKgorICogLTE0OSA9PSAtMTI3IC0gMjMgKyAxLgorICovCisjZGVmaW5lCVNOR19FWFBCSVRTCTgKKyNkZWZpbmUJU05HX0ZSQUNCSVRTCTIzCisKKyNkZWZpbmUJREJMX0VYUEJJVFMJMTEKKyNkZWZpbmUJREJMX0ZSQUNCSVRTCTUyCisKKyNkZWZpbmUJRVhUX0VYUEJJVFMJMTUKKyNkZWZpbmUJRVhUX0ZSQUNCSVRTCTExMgorCitzdHJ1Y3QgaWVlZV9zaW5nbGUgeworCXVfaW50CXNuZ19mcmFjOjIzOworCXVfaW50CXNuZ19leHA6ODsKKwl1X2ludAlzbmdfc2lnbjoxOworfTsKKworc3RydWN0IGllZWVfZG91YmxlIHsKKwl1X2ludAlkYmxfZnJhY2w7CisJdV9pbnQJZGJsX2ZyYWNoOjIwOworCXVfaW50CWRibF9leHA6MTE7CisJdV9pbnQJZGJsX3NpZ246MTsKK307CisKK3N0cnVjdCBpZWVlX2V4dCB7CisJdV9pbnQJZXh0X2ZyYWNsOworCXVfaW50CWV4dF9mcmFjbG07CisJdV9pbnQJZXh0X2ZyYWNobTsKKwl1X2ludAlleHRfZnJhY2g6MTY7CisJdV9pbnQJZXh0X2V4cDoxNTsKKwl1X2ludAlleHRfc2lnbjoxOworfTsKKworLyoKKyAqIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBpbiBbMS4uSU5GTkFOKSAob2Ygd2hhdGV2ZXIgdHlwZSkgYXJlCisgKiBgbm9ybWFsJy4gIEZsb2F0cyB3aG9zZSBleHBvbmVudCBpcyBJTkZOQU4gYXJlIGVpdGhlciBJbmYgb3IgTmFOLgorICogRmxvYXRzIHdob3NlIGV4cG9uZW50IGlzIHplcm8gYXJlIGVpdGhlciB6ZXJvIChpZmYgYWxsIGZyYWN0aW9uCisgKiBiaXRzIGFyZSB6ZXJvKSBvciBzdWJub3JtYWwgdmFsdWVzLgorICoKKyAqIEEgTmFOIGlzIGEgYHNpZ25hbGxpbmcgTmFOJyBpZiBpdHMgUVVJRVROQU4gYml0IGlzIGNsZWFyIGluIGl0cworICogaGlnaCBmcmFjdGlvbjsgaWYgdGhlIGJpdCBpcyBzZXQsIGl0IGlzIGEgYHF1aWV0IE5hTicuCisgKi8KKyNkZWZpbmUJU05HX0VYUF9JTkZOQU4JMjU1CisjZGVmaW5lCURCTF9FWFBfSU5GTkFOCTIwNDcKKyNkZWZpbmUJRVhUX0VYUF9JTkZOQU4JMzI3NjcKKworI2lmIDAKKyNkZWZpbmUJU05HX1FVSUVUTkFOCSgxIDw8IDIyKQorI2RlZmluZQlEQkxfUVVJRVROQU4JKDEgPDwgMTkpCisjZGVmaW5lCUVYVF9RVUlFVE5BTgkoMSA8PCAxNSkKKyNlbmRpZgorCisvKgorICogRXhwb25lbnQgYmlhc2VzLgorICovCisjZGVmaW5lCVNOR19FWFBfQklBUwkxMjcKKyNkZWZpbmUJREJMX0VYUF9CSUFTCTEwMjMKKyNkZWZpbmUJRVhUX0VYUF9CSUFTCTE2MzgzCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9pbnRlcm5hbF90eXBlcy5oIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaW50ZXJuYWxfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZDE4MzNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9pbmNsdWRlL21hY2hpbmUvaW50ZXJuYWxfdHlwZXMuaApAQCAtMCwwICsxLDYgQEAKKy8qICRPcGVuQlNEOiBpbnRlcm5hbF90eXBlcy5oLHYgMS4xIDIwMDIvMDQvMjQgMjE6NTM6MTEgZXNwaWUgRXhwICQgKi8KKy8qIFB1YmxpYyBkb21haW4gKi8KKyNpZm5kZWYgX01BQ0hJTkVfSU5URVJOQUxfVFlQRVNfSF8KKyNkZWZpbmUgX01BQ0hJTkVfSU5URVJOQUxfVFlQRVNfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2ZmQ4NTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9saW1pdHMuaApAQCAtMCwwICsxLDYzIEBACisvKgkkT3BlbkJTRDogbGltaXRzLmgsdiAxLjExIDIwMDYvMDEvMDYgMjI6NDg6NDcgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogbGltaXRzLmgsdiAxLjExIDE5OTUvMTIvMjEgMDE6MDg6NTkgbXljcm9mdCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbGltaXRzLmgJNy4yIChCZXJrZWxleSkgNi8yOC85MAorICovCisKKyNpZm5kZWYgX01BQ0hJTkVfTElNSVRTX0hfCisjZGVmaW5lIF9NQUNISU5FX0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUJTUJfTEVOX01BWAkxCQkvKiBubyBtdWx0aWJ5dGUgY2hhcmFjdGVycyAqLworCisjaWZuZGVmCVNJWkVfTUFYCisjZGVmaW5lCVNJWkVfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSBzaXplX3QgKi8KKyNlbmRpZgorI2lmbmRlZiBTU0laRV9NQVgKKyNkZWZpbmUJU1NJWkVfTUFYCUlOVF9NQVgJCS8qIG1heCB2YWx1ZSBmb3IgYSBzc2l6ZV90ICovCisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUJU0laRV9UX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgc2l6ZV90IChoaXN0b3JpYykgKi8KKworI2RlZmluZQlVUVVBRF9NQVgJMHhmZmZmZmZmZmZmZmZmZmZmVUxMCQkvKiBtYXggdW5zaWduZWQgcXVhZCAqLworI2RlZmluZQlRVUFEX01BWAkweDdmZmZmZmZmZmZmZmZmZmZMTAkJLyogbWF4IHNpZ25lZCBxdWFkICovCisjZGVmaW5lCVFVQURfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTEwtMSkJLyogbWluIHNpZ25lZCBxdWFkICovCisKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKyNkZWZpbmUgTE9OR0xPTkdfQklUICAgIDY0CisjZGVmaW5lIExPTkdMT05HX01JTiAgICAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTC0xKQorI2RlZmluZSBMT05HTE9OR19NQVggICAgOTIyMzM3MjAzNjg1NDc3NTgwN0xMCisjZGVmaW5lIFVMT05HTE9OR19NQVggICAxODQ0Njc0NDA3MzcwOTU1MTYxNVVMTAorCisjZW5kaWYgLyogX01BQ0hJTkVfTElNSVRTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaCBiL2xpYmMvYXJjaC14ODYvaW5jbHVkZS9tYWNoaW5lL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlZDA5NWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L2luY2x1ZGUvbWFjaGluZS9zZXRqbXAuaApAQCAtMCwwICsxLDggQEAKKy8qCSRPcGVuQlNEOiBzZXRqbXAuaCx2IDEuMiAyMDAwLzA4LzA1IDIyOjA3OjMyIG5pa2xhcyBFeHAgJAkqLworLyoJJE5ldEJTRDogc2V0am1wLmgsdiAxLjEgMTk5NC8xMi8yMCAxMDozNjo0MyBjZ2QgRXhwICQJKi8KKworLyoKKyAqIG1hY2hpbmUvc2V0am1wLmg6IG1hY2hpbmUgZGVwZW5kZW50IHNldGptcC1yZWxhdGVkIGluZm9ybWF0aW9uLgorICovCisKKyNkZWZpbmUJX0pCTEVOCTEwCQkvKiBzaXplLCBpbiBsb25ncywgb2YgYSBqbXBfYnVmICovCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9iY21wLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTViNDZhZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2JjbXAuUwpAQCAtMCwwICsxLDMyIEBACisvKgkkT3BlbkJTRDogYmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoYmNtcCkKKwlwdXNobAklZWRpCisJcHVzaGwJJWVzaQorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdmwJMTYoJWVzcCksJWVzaQorCXhvcmwJJWVheCwlZWF4CQkvKiBjbGVhciByZXR1cm4gdmFsdWUgKi8KKwljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCXJlcGUKKwljbXBzbAorCWpuZQlMMQorCisJbW92bAkyMCglZXNwKSwlZWN4CQkvKiBjb21wYXJlIHJlbWFpbmRlciBieSBieXRlcyAqLworCWFuZGwJJDMsJWVjeAorCXJlcGUKKwljbXBzYgorCWplCUwyCisKK0wxOglpbmNsCSVlYXgKK0wyOglwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Jjb3B5LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkZTVhZTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iY29weS5TCkBAIC0wLDAgKzEsOTMgQEAKKy8qCSRPcGVuQlNEOiBiY29weS5TLHYgMS41IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBsb2NvcmUucy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKwkvKgorCSAqIChvdiliY29weSAoc3JjLGRzdCxjbnQpCisJICogIHdzQHRvb2xzLmRlICAgICAoV29sZmdhbmcgU29sZnJhbmssIFRvb0xzIEdtYkgpICs0OS0yMjgtOTg1ODAwCisJICovCisKKyNpZmRlZiBNRU1DT1BZCitFTlRSWShtZW1jcHkpCisjZWxzZQorI2lmZGVmIE1FTU1PVkUKK0VOVFJZKG1lbW1vdmUpCisjZWxzZQorRU5UUlkoYmNvcHkpCisjZW5kaWYKKyNlbmRpZgorCXB1c2hsCSVlc2kKKwlwdXNobAklZWRpCisjaWYgZGVmaW5lZChNRU1DT1BZKSB8fCBkZWZpbmVkKE1FTU1PVkUpCisJbW92bAkxMiglZXNwKSwlZWRpCisJbW92bAkxNiglZXNwKSwlZXNpCisJbW92bAklZWRpLCAlZWF4CisjZWxzZQorCW1vdmwJMTIoJWVzcCksJWVzaQorCW1vdmwJMTYoJWVzcCksJWVkaQorI2VuZGlmCisJbW92bAkyMCglZXNwKSwlZWN4CisJbW92bAklZWN4LCVlZHgKKwljbXBsCSVlc2ksJWVkaQkvKiBwb3RlbnRpYWxseSBvdmVybGFwcGluZz8gKi8KKwlqbmIJMWYKKwljbGQJCQkvKiBub3BlLCBjb3B5IGZvcndhcmRzLiAqLworCXNocmwJJDIsJWVjeAkJLyogY29weSBieSB3b3JkcyAqLworCXJlcAorCW1vdnNsCisJbW92bAklZWR4LCVlY3gKKwlhbmRsCSQzLCVlY3gJCS8qIGFueSBieXRlcyBsZWZ0PyAqLworCXJlcAorCW1vdnNiCisJcG9wbAklZWRpCisJcG9wbAklZXNpCisJcmV0CisxOgorCWFkZGwJJWVjeCwlZWRpCS8qIGNvcHkgYmFja3dhcmRzLiAqLworCWFkZGwJJWVjeCwlZXNpCisJc3RkCisJYW5kbAkkMywlZWN4CQkvKiBhbnkgZnJhY3Rpb25hbCBieXRlcz8gKi8KKwlkZWNsCSVlZGkKKwlkZWNsCSVlc2kKKwlyZXAKKwltb3ZzYgorCW1vdmwJJWVkeCwlZWN4CisJc2hybAkkMiwlZWN4CisJc3VibAkkMywlZXNpCisJc3VibAkkMywlZWRpCisJcmVwCisJbW92c2wKKwlwb3BsCSVlZGkKKwlwb3BsCSVlc2kKKwljbGQKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL2J6ZXJvLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyby5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJlYzljN2QKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9iemVyby5TCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBiemVyby5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoYnplcm8pCisJcHVzaGwJJWVkaQorCW1vdmwJOCglZXNwKSwlZWRpCisJbW92bAkxMiglZXNwKSwlZWR4CisKKwljbGQJCQkJLyogc2V0IGZpbGwgZGlyZWN0aW9uIGZvcndhcmQgKi8KKwl4b3JsCSVlYXgsJWVheAkJLyogc2V0IGZpbGwgZGF0YSB0byAwICovCisKKwkvKgorCSAqIGlmIHRoZSBzdHJpbmcgaXMgdG9vIHNob3J0LCBpdCdzIHJlYWxseSBub3Qgd29ydGggdGhlIG92ZXJoZWFkCisJICogb2YgYWxpZ25pbmcgdG8gd29yZCBib3VuZHJpZXMsIGV0Yy4gIFNvIHdlIGp1bXAgdG8gYSBwbGFpbgorCSAqIHVuYWxpZ25lZCBzZXQuCisJICovCisJY21wbAkkMTYsJWVkeAorCWpiCUwxCisKKwltb3ZsCSVlZGksJWVjeAkJLyogY29tcHV0ZSBtaXNhbGlnbm1lbnQgKi8KKwluZWdsCSVlY3gKKwlhbmRsCSQzLCVlY3gKKwlzdWJsCSVlY3gsJWVkeAorCXJlcAkJCQkvKiB6ZXJvIHVudGlsIHdvcmQgYWxpZ25lZCAqLworCXN0b3NiCisKKwltb3ZsCSVlZHgsJWVjeAkJLyogemVybyBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCWFuZGwJJDMsJWVkeAorCXJlcAorCXN0b3NsCisKK0wxOgltb3ZsCSVlZHgsJWVjeAkJLyogemVybyByZW1haW5kZXIgYnkgYnl0ZXMgKi8KKwlyZXAKKwlzdG9zYgorCisJcG9wbAklZWRpCisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9mc3MuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2Zzcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk2YWZmYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9mc3MuUwpAQCAtMCwwICsxLDE3IEBACisvKgkkT3BlbkJTRDogZmZzLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWShmZnMpCisJYnNmbAk0KCVlc3ApLCVlYXgKKwlqeglMMQkgCQkvKiBaRiBpcyBzZXQgaWYgYWxsIGJpdHMgYXJlIDAgKi8KKwlpbmNsCSVlYXgJCQkvKiBiaXRzIG51bWJlcmVkIGZyb20gMSwgbm90IDAgKi8KKwlyZXQKKworCS5hbGlnbiAyCitMMToJeG9ybAklZWF4LCVlYXgJCS8qIGNsZWFyIHJlc3VsdCAqLworCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvaW5kZXguUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4M2VmNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL2luZGV4LlMKQEAgLTAsMCArMSwyNiBAQAorLyoJJE9wZW5CU0Q6IGluZGV4LlMsdiAxLjQgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCisjaWZkZWYgU1RSQ0hSCitFTlRSWShzdHJjaHIpCisjZWxzZQorRU5UUlkoaW5kZXgpCisjZW5kaWYKKwltb3ZsCTQoJWVzcCksJWVheAorCW1vdmIJOCglZXNwKSwlY2wKKwkuYWxpZ24gMiwweDkwCitMMToKKwltb3ZiCSglZWF4KSwlZGwKKwljbXBiCSVkbCwlY2wJCQkvKiBmb3VuZCBjaGFyPz8/ICovCisJamUgCUwyCisJaW5jbAklZWF4CisJdGVzdGIJJWRsLCVkbAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWpueglMMQorCXhvcmwJJWVheCwlZWF4CitMMjoKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNoci5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDZiY2JlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNoci5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qCSRPcGVuQlNEOiBtZW1jaHIuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKG1lbWNocikKKwlwdXNobAklZWRpCisJbW92bAk4KCVlc3ApLCVlZGkJCS8qIHN0cmluZyBhZGRyZXNzICovCisJbW92bAkxMiglZXNwKSwlZWF4CQkvKiBzZXQgY2hhcmFjdGVyIHRvIHNlYXJjaCBmb3IgKi8KKwltb3ZsCTE2KCVlc3ApLCVlY3gJCS8qIHNldCBsZW5ndGggb2Ygc2VhcmNoICovCisJdGVzdGwJJWVjeCwlZWN4CQkvKiB0ZXN0IGZvciBsZW4gPT0gMCAqLworCWp6CUwxCisJY2xkCQkJCS8qIHNldCBzZWFyY2ggZm9yd2FyZCAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCWpuZQlMMQkJCS8qIHNjYW4gZmFpbGVkLCByZXR1cm4gbnVsbCAqLworCWxlYWwJLTEoJWVkaSksJWVheAkJLyogYWRqdXN0IHJlc3VsdCBvZiBzY2FuICovCisJcG9wbAklZWRpCisJcmV0CisJLmFsaWduIDIsMHg5MAorTDE6CXhvcmwJJWVheCwlZWF4CisJcG9wbAklZWRpCisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNtcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiZTE4OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1jbXAuUwpAQCAtMCwwICsxLDQzIEBACisvKgkkT3BlbkJTRDogbWVtY21wLlMsdiAxLjQgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIFdyaXR0ZW4gYnkgSi5ULiBDb25rbGluIDxqdGNAbmV0YnNkLm9yZz4uCisgKiBQdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxtYWNoaW5lL2FzbS5oPgorCitFTlRSWShtZW1jbXApCisJcHVzaGwJJWVkaQorCXB1c2hsCSVlc2kKKwltb3ZsCTEyKCVlc3ApLCVlZGkKKwltb3ZsCTE2KCVlc3ApLCVlc2kKKwljbGQJCQkJLyogc2V0IGNvbXBhcmUgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSBieSB3b3JkcyAqLworCXNocmwJJDIsJWVjeAorCXJlcGUKKwljbXBzbAorCWpuZQlMNQkJCS8qIGRvIHdlIG1hdGNoIHNvIGZhcj8gKi8KKworCW1vdmwJMjAoJWVzcCksJWVjeAkJLyogY29tcGFyZSByZW1haW5kZXIgYnkgYnl0ZXMgKi8KKwlhbmRsCSQzLCVlY3gKKwlyZXBlCisJY21wc2IKKwlqbmUJTDYJCQkvKiBkbyB3ZSBtYXRjaD8gKi8KKworCXhvcmwJJWVheCwlZWF4CQkvKiB3ZSBtYXRjaCwgcmV0dXJuIHplcm8JKi8KKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKKworTDU6CW1vdmwJJDQsJWVjeAkJCS8qIFdlIGtub3cgdGhhdCBvbmUgb2YgdGhlIG5leHQJKi8KKwlzdWJsCSVlY3gsJWVkaQkJLyogZm91ciBwYWlycyBvZiBieXRlcyBkbyBub3QJKi8KKwlzdWJsCSVlY3gsJWVzaQkJLyogbWF0Y2guCQkJKi8KKwlyZXBlCisJY21wc2IKK0w2Ogltb3Z6YmwgIC0xKCVlZGkpLCVlYXgJCS8qIFBlcmZvcm0gdW5zaWduZWQgY29tcGFyaXNvbgkqLworCW1vdnpibAktMSglZXNpKSwlZWR4CisJc3VibAklZWR4LCVlYXgKKwlwb3BsCSVlc2kKKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtY3B5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTVjOGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbWNweS5TCkBAIC0wLDAgKzEsMyBAQAorLyoJJE9wZW5CU0Q6IG1lbWNweS5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKyNkZWZpbmUgTUVNQ09QWQorI2luY2x1ZGUgImJjb3B5LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9tZW1tb3ZlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzViZmQxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbW1vdmUuUwpAQCAtMCwwICsxLDMgQEAKKy8qCSRPcGVuQlNEOiBtZW1tb3ZlLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworI2RlZmluZSBNRU1NT1ZFCisjaW5jbHVkZSAiYmNvcHkuUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvbWVtc2V0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTA1OWNjYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL21lbXNldC5TCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiBtZW1zZXQuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKK0VOVFJZKG1lbXNldCkKKwlwdXNobAklZWRpCisJcHVzaGwJJWVieAorCW1vdmwJMTIoJWVzcCksJWVkaQorCW1vdnpibAkxNiglZXNwKSwlZWF4CQkvKiB1bnNpZ25lZCBjaGFyLCB6ZXJvIGV4dGVuZCAqLworCW1vdmwJMjAoJWVzcCksJWVjeAorCXB1c2hsCSVlZGkJCQkvKiBwdXNoIGFkZHJlc3Mgb2YgYnVmZmVyICovCisKKwljbGQJCQkJLyogc2V0IGZpbGwgZGlyZWN0aW9uIGZvcndhcmQgKi8KKworCS8qCisJICogaWYgdGhlIHN0cmluZyBpcyB0b28gc2hvcnQsIGl0J3MgcmVhbGx5IG5vdCB3b3J0aCB0aGUgb3ZlcmhlYWQKKwkgKiBvZiBhbGlnbmluZyB0byB3b3JkIGJvdW5kcmllcywgZXRjLiAgU28gd2UganVtcCB0byBhIHBsYWluCisJICogdW5hbGlnbmVkIHNldC4KKwkgKi8KKwljbXBsCSQweDBmLCVlY3gKKwlqbGUJTDEKKworCW1vdmIJJWFsLCVhaAkJCS8qIGNvcHkgY2hhciB0byBhbGwgYnl0ZXMgaW4gd29yZCAqLworCW1vdmwJJWVheCwlZWR4CisJc2FsbAkkMTYsJWVheAorCW9ybAklZWR4LCVlYXgKKworCW1vdmwJJWVkaSwlZWR4CQkvKiBjb21wdXRlIG1pc2FsaWdubWVudCAqLworCW5lZ2wJJWVkeAorCWFuZGwJJDMsJWVkeAorCW1vdmwJJWVjeCwlZWJ4CisJc3VibAklZWR4LCVlYngKKworCW1vdmwJJWVkeCwlZWN4CQkvKiBzZXQgdW50aWwgd29yZCBhbGlnbmVkICovCisJcmVwCisJc3Rvc2IKKworCW1vdmwJJWVieCwlZWN4CisJc2hybAkkMiwlZWN4CQkJLyogc2V0IGJ5IHdvcmRzICovCisJcmVwCisJc3Rvc2wKKworCW1vdmwJJWVieCwlZWN4CQkvKiBzZXQgcmVtYWluZGVyIGJ5IGJ5dGVzICovCisJYW5kbAkkMywlZWN4CitMMToJcmVwCisJc3Rvc2IKKworCXBvcGwJJWVheAkJCS8qIHBvcCBhZGRyZXNzIG9mIGJ1ZmZlciAqLworCXBvcGwJJWVieAorCXBvcGwJJWVkaQorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvcmluZGV4LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9yaW5kZXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjYwZDM4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvcmluZGV4LlMKQEAgLTAsMCArMSwyOSBAQAorLyoJJE9wZW5CU0Q6IHJpbmRleC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmZGVmIFNUUlJDSFIKK0VOVFJZKHN0cnJjaHIpCisjZWxzZQorRU5UUlkocmluZGV4KQorI2VuZGlmCisJcHVzaGwJJWVieAorCW1vdmwJOCglZXNwKSwlZWR4CisJbW92YgkxMiglZXNwKSwlY2wKKwl4b3JsCSVlYXgsJWVheAkJLyogaW5pdCBwb2ludGVyIHRvIG51bGwgKi8KKwkuYWxpZ24gMiwweDkwCitMMToKKwltb3ZiCSglZWR4KSwlYmwKKwljbXBiCSVibCwlY2wKKwlqbmUJTDIKKwltb3ZsCSVlZHgsJWVheAorTDI6CisJaW5jbAklZWR4CisJdGVzdGIJJWJsLCVibAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWpueglMMQorCXBvcGwJJWVieAorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MGZkZDU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2F0LlMKQEAgLTAsMCArMSw3MyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNhdC5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKKyNBUFAKKwkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY2F0CisJLmFzY2lpICJ3YXJuaW5nOiBzdHJjYXQoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNhdCgpIgorI05PX0FQUAorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY2F0KQorCXB1c2hsCSVlZGkJCQkvKiBzYXZlIGVkaSAqLworCW1vdmwJOCglZXNwKSwlZWRpCQkvKiBkc3QgYWRkcmVzcyAqLworCW1vdmwJMTIoJWVzcCksJWVkeAkJLyogc3JjIGFkZHJlc3MgKi8KKwlwdXNobAklZWRpCQkJLyogcHVzaCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisKKwljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCisJeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLworCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCisJbGVhbAktMSglZWRpKSwlZWN4CQkvKiBjb3JyZWN0IGRzdCBhZGRyZXNzICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLworCW1vdmIJJWFsLCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMSglZWR4KSwlYWwKKwltb3ZiCSVhbCwxKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkyKCVlZHgpLCVhbAorCW1vdmIJJWFsLDIoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTMoJWVkeCksJWFsCisJbW92YgklYWwsMyglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNCglZWR4KSwlYWwKKwltb3ZiCSVhbCw0KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk1KCVlZHgpLCVhbAorCW1vdmIJJWFsLDUoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTYoJWVkeCksJWFsCisJbW92YgklYWwsNiglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNyglZWR4KSwlYWwKKwltb3ZiCSVhbCw3KCVlY3gpCisJYWRkbAkkOCwlZWR4CisJYWRkbAkkOCwlZWN4CisJdGVzdGIJJWFsLCVhbAorCWpueglMMQorTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkZXN0aW5hdGlvbiBhZGRyZXNzICovCisJcG9wbAklZWRpCQkJLyogcmVzdG9yZSBlZGkgKi8KKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNoci5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc2ZTU5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNoci5TCkBAIC0wLDAgKzEsMyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNoci5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKyNkZWZpbmUgU1RSQ0hSCisjaW5jbHVkZSAiaW5kZXguUyIKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY21wLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJiYTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cmNtcC5TCkBAIC0wLDAgKzEsODEgQEAKKy8qCSRPcGVuQlNEOiBzdHJjbXAuUyx2IDEuMyAyMDA1LzA4LzA3IDExOjMwOjM4IGVzcGllIEV4cCAkICovCisvKgorICogV3JpdHRlbiBieSBKLlQuIENvbmtsaW4gPGp0Y0BuZXRic2Qub3JnPi4KKyAqIFB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPG1hY2hpbmUvYXNtLmg+CisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY21wKQorCW1vdmwJMHgwNCglZXNwKSwlZWF4CisJbW92bAkweDA4KCVlc3ApLCVlZHgKKwlqbXAJTDIJCQkvKiBKdW1wIGludG8gdGhlIGxvb3AhICovCisKKwkuYWxpZ24JMiwweDkwCitMMToJaW5jbAklZWF4CisJaW5jbAklZWR4CitMMjoJbW92YgkoJWVheCksJWNsCisJdGVzdGIJJWNsLCVjbAkJCS8qIG51bGwgdGVybWluYXRvcj8/PyAqLworCWp6CUwzCisJY21wYgklY2wsKCVlZHgpCQkvKiBjaGFycyBtYXRjaD8/PyAqLworCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWpuZQlMMworCWluY2wJJWVheAorCWluY2wJJWVkeAorCW1vdmIJKCVlYXgpLCVjbAorCXRlc3RiCSVjbCwlY2wKKwlqeglMMworCWNtcGIJJWNsLCglZWR4KQorCWplCUwxCisJLmFsaWduIDIsIDB4OTAKK0wzOgltb3Z6YmwJKCVlYXgpLCVlYXgJCS8qIHVuc2lnbmVkIGNvbXBhcmlzb24gKi8KKwltb3Z6YmwJKCVlZHgpLCVlZHgKKwlzdWJsCSVlZHgsJWVheAorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY3B5LlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJjcHkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDFlYjZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RyY3B5LlMKQEAgLTAsMCArMSw2MyBAQAorLyoJJE9wZW5CU0Q6IHN0cmNweS5TLHYgMS44IDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworI2lmIGRlZmluZWQoQVBJV0FSTikKKyNBUFAKKwkuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3RyY3B5CisJLmFzY2lpICJ3YXJuaW5nOiBzdHJjcHkoKSBpcyBhbG1vc3QgYWx3YXlzIG1pc3VzZWQsIHBsZWFzZSB1c2Ugc3RybGNweSgpIgorI05PX0FQUAorI2VuZGlmCisKKy8qCisgKiBOT1RFOiBJJ3ZlIHVucm9sbGVkIHRoZSBsb29wIGVpZ2h0IHRpbWVzOiBsYXJnZSBlbm91Z2ggdG8gbWFrZSBhCisgKiBzaWduaWZpY2FudCBkaWZmZXJlbmNlLCBhbmQgc21hbGwgZW5vdWdoIG5vdCB0byB0b3RhbGx5IHRyYXNoIHRoZQorICogY2FjaGUuCisgKi8KKworRU5UUlkoc3RyY3B5KQorCW1vdmwJNCglZXNwKSwlZWN4CQkvKiBkc3QgYWRkcmVzcyAqLworCW1vdmwJOCglZXNwKSwlZWR4CQkvKiBzcmMgYWRkcmVzcyAqLworCXB1c2hsCSVlY3gJCQkvKiBwdXNoIGRzdCBhZGRyZXNzICovCisKKwkuYWxpZ24gMiwweDkwCitMMToJbW92YgkoJWVkeCksJWFsCQkvKiB1bnJvbGwgbG9vcCwgYnV0IG5vdCB0b28gbXVjaCAqLworCW1vdmIJJWFsLCglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJMSglZWR4KSwlYWwKKwltb3ZiCSVhbCwxKCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92YgkyKCVlZHgpLCVhbAorCW1vdmIJJWFsLDIoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTMoJWVkeCksJWFsCisJbW92YgklYWwsMyglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNCglZWR4KSwlYWwKKwltb3ZiCSVhbCw0KCVlY3gpCisJdGVzdGIJJWFsLCVhbAorCWp6CUwyCisJbW92Ygk1KCVlZHgpLCVhbAorCW1vdmIJJWFsLDUoJWVjeCkKKwl0ZXN0YgklYWwsJWFsCisJanoJTDIKKwltb3ZiCTYoJWVkeCksJWFsCisJbW92YgklYWwsNiglZWN4KQorCXRlc3RiCSVhbCwlYWwKKwlqeglMMgorCW1vdmIJNyglZWR4KSwlYWwKKwltb3ZiCSVhbCw3KCVlY3gpCisJYWRkbAkkOCwlZWR4CisJYWRkbAkkOCwlZWN4CisJdGVzdGIJJWFsLCVhbAorCWpueglMMQorTDI6CXBvcGwJJWVheAkJCS8qIHBvcCBkc3QgYWRkcmVzcyAqLworCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybGVuLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJsZW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZjA0ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybGVuLlMKQEAgLTAsMCArMSwyMCBAQAorLyoJJE9wZW5CU0Q6IHN0cmxlbi5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworRU5UUlkoc3RybGVuKQorCXB1c2hsCSVlZGkKKwltb3ZsCTgoJWVzcCksJWVkaQkJLyogc3RyaW5nIGFkZHJlc3MgKi8KKwljbGQJCQkJLyogc2V0IHNlYXJjaCBmb3J3YXJkICovCisJeG9ybAklZWF4LCVlYXgJCS8qIHNldCBzZWFyY2ggZm9yIG51bGwgdGVybWluYXRvciAqLworCW1vdmwJJC0xLCVlY3gJCS8qIHNldCBzZWFyY2ggZm9yIGxvdHMgb2YgY2hhcmFjdGVycyAqLworCXJlcG5lCQkJCS8qIHNlYXJjaCEgKi8KKwlzY2FzYgorCW5vdGwJJWVjeAkJCS8qIGdldCBsZW5ndGggYnkgdGFraW5nCWNvbXBsZW1lbnQgKi8KKwlsZWFsCS0xKCVlY3gpLCVlYXgJCS8qIGFuZCBzdWJ0cmFjdGluZyBvbmUgKi8KKwlwb3BsCSVlZGkKKwlyZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cm5jbXAuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YWE4OGQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zdHJpbmcvc3RybmNtcC5TCkBAIC0wLDAgKzEsMTEzIEBACisvKgkkT3BlbkJTRDogc3RybmNtcC5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworLyoKKyAqIE5PVEU6IEkndmUgdW5yb2xsZWQgdGhlIGxvb3AgZWlnaHQgdGltZXM6IGxhcmdlIGVub3VnaCB0byBtYWtlIGEKKyAqIHNpZ25pZmljYW50IGRpZmZlcmVuY2UsIGFuZCBzbWFsbCBlbm91Z2ggbm90IHRvIHRvdGFsbHkgdHJhc2ggdGhlCisgKiBjYWNoZS4KKyAqLworCitFTlRSWShzdHJuY21wKQorCXB1c2hsCSVlYngKKwltb3ZsCTgoJWVzcCksJWVheAorCW1vdmwJMTIoJWVzcCksJWVjeAorCW1vdmwJMTYoJWVzcCksJWVkeAorCXRlc3RsCSVlZHgsJWVkeAorCWptcAlMMgkJCS8qIEp1bXAgaW50byB0aGUgbG9vcCEgKi8KKworCS5hbGlnbiAyLDB4OTAKK0wxOglpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKK0wyOglqeglMNAkJCS8qIHN0cmluZ3MgYXJlIGVxdWFsICovCisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWpuZQlMMworCisJaW5jbAklZWF4CisJaW5jbAklZWN4CisJZGVjbAklZWR4CisJanoJTDQKKwltb3ZiCSglZWF4KSwlYmwKKwl0ZXN0YgklYmwsJWJsCisJanoJTDMKKwljbXBiCSVibCwoJWVjeCkKKwlqbmUJTDMKKworCWluY2wJJWVheAorCWluY2wJJWVjeAorCWRlY2wJJWVkeAorCWp6CUw0CisJbW92YgkoJWVheCksJWJsCisJdGVzdGIJJWJsLCVibAorCWp6CUwzCisJY21wYgklYmwsKCVlY3gpCisJam5lCUwzCisKKwlpbmNsCSVlYXgKKwlpbmNsCSVlY3gKKwlkZWNsCSVlZHgKKwlqeglMNAorCW1vdmIJKCVlYXgpLCVibAorCXRlc3RiCSVibCwlYmwKKwlqeglMMworCWNtcGIJJWJsLCglZWN4KQorCWplCUwxCisKKwkuYWxpZ24gMiwweDkwCitMMzoJbW92emJsCSglZWF4KSwlZWF4CQkvKiB1bnNpZ25lZCBjb21wYXJpc2lvbiAqLworCW1vdnpibAkoJWVjeCksJWVjeAorCXN1YmwJJWVjeCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CisJLmFsaWduIDIsMHg5MAorTDQ6CXhvcmwJJWVheCwlZWF4CisJcG9wbAklZWJ4CisJcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zdHJyY2hyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGVlMTUzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N0cnJjaHIuUwpAQCAtMCwwICsxLDMgQEAKKy8qCSRPcGVuQlNEOiBzdHJyY2hyLlMsdiAxLjMgMjAwNS8wOC8wNyAxMTozMDozOCBlc3BpZSBFeHAgJCAqLworI2RlZmluZSBTVFJSQ0hSCisjaW5jbHVkZSAicmluZGV4LlMiCmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMgYi9saWJjL2FyY2gteDg2L3N0cmluZy9zd2FiLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA1NTg2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3RyaW5nL3N3YWIuUwpAQCAtMCwwICsxLDY3IEBACisvKgkkT3BlbkJTRDogc3dhYi5TLHYgMS4zIDIwMDUvMDgvMDcgMTE6MzA6MzggZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjaW5jbHVkZSA8bWFjaGluZS9hc20uaD4KKworLyoKKyAqIE9uIHRoZSBpNDg2LCB0aGlzIGNvZGUgaXMgbmVnbGlnaWJseSBmYXN0ZXIgdGhhbiB0aGUgY29kZSBnZW5lcmF0ZWQKKyAqIGJ5IGdjYyBhdCBhYm91dCBoYWxmIHRoZSBzaXplLiAgSWYgbXkgaTM4NiBkYXRhYm9vayBpcyBjb3JyZWN0LCBpdAorICogc2hvdWxkIGJlIGNvbnNpZGVyYWJseSBmYXN0ZXIgdGhhbiB0aGUgZ2NjIGNvZGUgb24gYSBpMzg2LgorICovCisKK0VOVFJZKHN3YWIpCisJcHVzaGwJJWVzaQorCXB1c2hsCSVlZGkKKwltb3ZsCTEyKCVlc3ApLCVlc2kKKwltb3ZsCTE2KCVlc3ApLCVlZGkKKwltb3ZsCTIwKCVlc3ApLCVlY3gKKworCWNsZAkJCQkjIHNldCBkaXJlY3Rpb24gZm9yd2FyZAorCisJc2hybAkkMSwlZWN4CisJdGVzdGwJJDcsJWVjeAkJCSMgY29weSBmaXJzdCBncm91cCBvZiAxIHRvIDcgd29yZHMKKwlqeglMMgkJCSMgd2hpbGUgc3dhcGluZyBhbHRlcm5hdGUgYnl0ZXMuCisJLmFsaWduCTIsMHg5MAorTDE6CWxvZHN3CisJcm9ydwkkOCwlYXgKKwlzdG9zdworCWRlY2wJJWVjeAorCXRlc3RsCSQ3LCVlY3gKKwlqbnoJTDEKKworTDI6CXNocmwJJDMsJWVjeAkJCSMgY29weSByZW1haW5kZXIgOCB3b3JkcyBhdCBhIHRpbWUKKwlqeglMNAkJCSMgd2hpbGUgc3dhcHBpbmcgYWx0ZXJuYXRlIGJ5dGVzLgorCS5hbGlnbgkyLDB4OTAKK0wzOglsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlsb2RzdworCXJvcncJJDgsJWF4CisJc3Rvc3cKKwlkZWNsCSVlY3gKKwlqbnoJTDMKKworTDQ6CXBvcGwJJWVkaQorCXBvcGwJJWVzaQorCXJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Jyay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzNWNjNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fYnJrLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2JyaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fYnJrCisgICAgLmFsaWduIDQKKworX19icms6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9icmssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Nsb25lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fY2xvbmUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODYyMTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2Nsb25lLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2Nsb25lLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19jbG9uZQorICAgIC5hbGlnbiA0CisKK19fY2xvbmU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfY2xvbmUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNzdmMDhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2ZjbnRsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19mY250bAorICAgIC5hbGlnbiA0CisKK19fZmNudGw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9mY250bCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZmNudGw2NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWQ0N2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2ZjbnRsNjQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZmNudGw2NCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fZmNudGw2NAorICAgIC5hbGlnbiA0CisKK19fZmNudGw2NDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2ZjbnRsNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2dldGN3ZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYyYmQ1MjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0Y3dkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2dldGN3ZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fZ2V0Y3dkCisgICAgLmFsaWduIDQKKworX19nZXRjd2Q6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldGN3ZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19nZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTAzZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fZ2V0cHJpb3JpdHkuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fZ2V0cHJpb3JpdHksIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX2dldHByaW9yaXR5CisgICAgLmFsaWduIDQKKworX19nZXRwcmlvcml0eToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZ2V0cHJpb3JpdHksICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19faW9jdGwuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGRlOWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX2lvY3RsLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX2lvY3RsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19pb2N0bAorICAgIC5hbGlnbiA0CisKK19faW9jdGw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9pb2N0bCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbGxzZWVrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGY0OWE5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19sbHNlZWsuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fbGxzZWVrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19sbHNlZWsKKyAgICAuYWxpZ24gNAorCitfX2xsc2VlazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfX2xsc2VlaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19tbWFwMi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYTU3MWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fbW1hcDIuUwpAQCAtMCwwICsxLDM4IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fbW1hcDIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX21tYXAyCisgICAgLmFsaWduIDQKKworX19tbWFwMjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBwdXNobCAgICVlYnAKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0NCglZXNwKSwgJWVkaQorICAgIG1vdiAgICAgNDgoJWVzcCksICVlYnAKKyAgICBtb3ZsICAgICRfX05SX21tYXAyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYnAKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3Blbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmNmZkOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3Blbi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19vcGVuLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuCisgICAgLmFsaWduIDQKKworX19vcGVuOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfb3BlbiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fb3BlbmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWExNDkyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19vcGVuYXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fb3BlbmF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19vcGVuYXQKKyAgICAuYWxpZ24gNAorCitfX29wZW5hdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9vcGVuYXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3B0cmFjZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlYzk1MmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcHRyYWNlLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3B0cmFjZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcHRyYWNlCisgICAgLmFsaWduIDQKKworX19wdHJhY2U6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfcHRyYWNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19yZWJvb3QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42Y2I3NGUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3JlYm9vdC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19yZWJvb3QsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3JlYm9vdAorICAgIC5hbGlnbiA0CisKK19fcmVib290OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3JlYm9vdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lnYWN0aW9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzU3ZjU4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19ydF9zaWdhY3Rpb24uUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fcnRfc2lnYWN0aW9uLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19ydF9zaWdhY3Rpb24KKyAgICAuYWxpZ24gNAorCitfX3J0X3NpZ2FjdGlvbjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9ydF9zaWdhY3Rpb24sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lncHJvY21hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MjMzMzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3Byb2NtYXNrLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3J0X3NpZ3Byb2NtYXNrLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19ydF9zaWdwcm9jbWFzaworICAgIC5hbGlnbiA0CisKK19fcnRfc2lncHJvY21hc2s6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfcnRfc2lncHJvY21hc2ssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3J0X3NpZ3RpbWVkd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhlMTRhODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fcnRfc2lndGltZWR3YWl0LlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfX3J0X3NpZ3RpbWVkd2FpdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fcnRfc2lndGltZWR3YWl0CisgICAgLmFsaWduIDQKKworX19ydF9zaWd0aW1lZHdhaXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfcnRfc2lndGltZWR3YWl0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zZXRfdGhyZWFkX2FyZWEuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZDIyMDQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3NldF90aHJlYWRfYXJlYS5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19zZXRfdGhyZWFkX2FyZWEsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3NldF90aHJlYWRfYXJlYQorICAgIC5hbGlnbiA0CisKK19fc2V0X3RocmVhZF9hcmVhOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2V0X3RocmVhZF9hcmVhLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zaWdzdXNwZW5kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0ZGU3NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc2lnc3VzcGVuZC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19zaWdzdXNwZW5kLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgX19zaWdzdXNwZW5kCisgICAgLmFsaWduIDQKKworX19zaWdzdXNwZW5kOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2lnc3VzcGVuZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zdGF0ZnM2NC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEwNjg1YjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19fc3RhdGZzNjQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9fc3RhdGZzNjQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3N0YXRmczY0CisgICAgLmFsaWduIDQKKworX19zdGF0ZnM2NDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3N0YXRmczY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX19zeXNsb2cuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOTgyZGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3N5c2xvZy5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX19zeXNsb2csIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfX3N5c2xvZworICAgIC5hbGlnbiA0CisKK19fc3lzbG9nOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc3lzbG9nLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0NC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fX3dhaXQ0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVmZmI5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX193YWl0NC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX193YWl0NCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9fd2FpdDQKKyAgICAuYWxpZ24gNAorCitfX3dhaXQ0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3dhaXQ0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvX2V4aXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWFhNDlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgX2V4aXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBfZXhpdAorICAgIC5hbGlnbiA0CisKK19leGl0OgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZXhpdF9ncm91cCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL19leGl0X3RocmVhZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmFhYTViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fZXhpdF90aHJlYWQuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIF9leGl0X3RocmVhZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF9leGl0X3RocmVhZAorICAgIC5hbGlnbiA0CisKK19leGl0X3RocmVhZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2V4aXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fd2FpdHBpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9fd2FpdHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNzY0OTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL193YWl0cGlkLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBfd2FpdHBpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIF93YWl0cGlkCisgICAgLmFsaWduIDQKKworX3dhaXRwaWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfd2FpdHBpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2FjY2Vzcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2Nlc3MuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmYyNmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2Nlc3MuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGFjY2VzcywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGFjY2VzcworICAgIC5hbGlnbiA0CisKK2FjY2VzczoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfYWNjZXNzLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9hY2N0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzExYjZmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvYWNjdC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgYWNjdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGFjY3QKKyAgICAuYWxpZ24gNAorCithY2N0OgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfYWNjdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcGdldC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjg3Y2IyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jYXBnZXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNhcGdldCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNhcGdldAorICAgIC5hbGlnbiA0CisKK2NhcGdldDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2FwZ2V0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2Fwc2V0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNzFmNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NhcHNldC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2Fwc2V0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2Fwc2V0CisgICAgLmFsaWduIDQKKworY2Fwc2V0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9jYXBzZXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaGRpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlODg4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NoZGlyLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaGRpciwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNoZGlyCisgICAgLmFsaWduIDQKKworY2hkaXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9jaGRpciwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2NobW9kLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDAyM2E3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2htb2QuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNobW9kLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2htb2QKKyAgICAuYWxpZ24gNAorCitjaG1vZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2htb2QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jaG93bi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2NDYwODgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nob3duLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjaG93biwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGNob3duCisgICAgLmFsaWduIDQKKworY2hvd246CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9jaG93bjMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2hyb290LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ2MTA4N2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nocm9vdC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2hyb290LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2hyb290CisgICAgLmFsaWduIDQKKworY2hyb290OgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfY2hyb290LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfZ2V0cmVzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NzQyYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHJlcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgY2xvY2tfZ2V0cmVzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0cmVzCisgICAgLmFsaWduIDQKKworY2xvY2tfZ2V0cmVzOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9jbG9ja19nZXRyZXMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX2dldHRpbWUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZmUxNGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19nZXR0aW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19nZXR0aW1lLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvY2tfZ2V0dGltZQorICAgIC5hbGlnbiA0CisKK2Nsb2NrX2dldHRpbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2Nsb2NrX2dldHRpbWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9jbG9ja19uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQwMGUzZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfbmFub3NsZWVwLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBjbG9ja19uYW5vc2xlZXAsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19uYW5vc2xlZXAKKyAgICAuYWxpZ24gNAorCitjbG9ja19uYW5vc2xlZXA6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2Nsb2NrX25hbm9zbGVlcCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvY2tfc2V0dGltZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NDk1YmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb2NrX3NldHRpbWUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb2NrX3NldHRpbWUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBjbG9ja19zZXR0aW1lCisgICAgLmFsaWduIDQKKworY2xvY2tfc2V0dGltZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfY2xvY2tfc2V0dGltZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Nsb3NlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk0NGE4MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvY2xvc2UuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGNsb3NlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgY2xvc2UKKyAgICAuYWxpZ24gNAorCitjbG9zZToKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2Nsb3NlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kZWxldGVfbW9kdWxlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjg2NWQ2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZGVsZXRlX21vZHVsZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZGVsZXRlX21vZHVsZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGRlbGV0ZV9tb2R1bGUKKyAgICAuYWxpZ24gNAorCitkZWxldGVfbW9kdWxlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9kZWxldGVfbW9kdWxlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NWRlNzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2R1cC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZHVwLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZHVwCisgICAgLmFsaWduIDQKKworZHVwOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZHVwLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9kdXAyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTlmODMyOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZHVwMi5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZHVwMiwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGR1cDIKKyAgICAuYWxpZ24gNAorCitkdXAyOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9kdXAyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3JlYXRlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxMDZjNTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2NyZWF0ZS5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXBvbGxfY3JlYXRlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXBvbGxfY3JlYXRlCisgICAgLmFsaWduIDQKKworZXBvbGxfY3JlYXRlOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZXBvbGxfY3JlYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfY3RsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMmMxMTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX2N0bC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXBvbGxfY3RsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXBvbGxfY3RsCisgICAgLmFsaWduIDQKKworZXBvbGxfY3RsOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX2Vwb2xsX2N0bCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX3dhaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXBvbGxfd2FpdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkODFhMTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Vwb2xsX3dhaXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGVwb2xsX3dhaXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBlcG9sbF93YWl0CisgICAgLmFsaWduIDQKKworZXBvbGxfd2FpdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9lcG9sbF93YWl0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZXhlY3ZlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhYjFkNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2V4ZWN2ZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZXhlY3ZlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZXhlY3ZlCisgICAgLmFsaWduIDQKKworZXhlY3ZlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfZXhlY3ZlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNoZGlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRlNjgxYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaGRpci5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNoZGlyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNoZGlyCisgICAgLmFsaWduIDQKKworZmNoZGlyOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZmNoZGlyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNobW9kLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4ZjhhOTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZmNobW9kLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNobW9kCisgICAgLmFsaWduIDQKKworZmNobW9kOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9mY2htb2QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2htb2RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YjljNmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG1vZGF0LlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2htb2RhdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZjaG1vZGF0CisgICAgLmFsaWduIDQKKworZmNobW9kYXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfZmNobW9kYXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mY2hvd24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzY0OGQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmY2hvd24sIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmY2hvd24KKyAgICAuYWxpZ24gNAorCitmY2hvd246CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9mY2hvd24zMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZjaG93bmF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2JlYzg0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZmNob3duYXQuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZjaG93bmF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZmNob3duYXQKKyAgICAuYWxpZ24gNAorCitmY2hvd25hdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfZmNob3duYXQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mbG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjYTA5YTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Zsb2NrLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmbG9jaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZsb2NrCisgICAgLmFsaWduIDQKKworZmxvY2s6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2Zsb2NrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZm9yay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mb3JrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmJjMWFmMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZm9yay5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZm9yaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZvcmsKKyAgICAuYWxpZ24gNAorCitmb3JrOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZm9yaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGY1ODMxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZzdGF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXQKKyAgICAuYWxpZ24gNAorCitmc3RhdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZnN0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnN0YXRhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5MjZlOTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0YXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZzdGF0YXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmc3RhdGF0CisgICAgLmFsaWduIDQKKworZnN0YXRhdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9mc3RhdGF0NjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGZzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzdGF0ZnMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJiM2Q0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3RhdGZzLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3RhdGZzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZnN0YXRmcworICAgIC5hbGlnbiA0CisKK2ZzdGF0ZnM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9mc3RhdGZzNjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ5ZmQyMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2ZzeW5jLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBmc3luYywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZzeW5jCisgICAgLmFsaWduIDQKKworZnN5bmM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9mc3luYywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2Z0cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWI3ZGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdHJ1bmNhdGUuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGZ0cnVuY2F0ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGZ0cnVuY2F0ZQorICAgIC5hbGlnbiA0CisKK2Z0cnVuY2F0ZToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfZnRydW5jYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZnV0ZXguUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYzUxMzE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9mdXRleC5TCkBAIC0wLDAgKzEsMzggQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZnV0ZXgsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBmdXRleAorICAgIC5hbGlnbiA0CisKK2Z1dGV4OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIHB1c2hsICAgJWVicAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgNDAoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQ0KCVlc3ApLCAlZWRpCisgICAgbW92ICAgICA0OCglZXNwKSwgJWVicAorICAgIG1vdmwgICAgJF9fTlJfZnV0ZXgsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVicAorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRkZW50cy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI4YzUyN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGRlbnRzLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRkZW50cywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGRlbnRzCisgICAgLmFsaWduIDQKKworZ2V0ZGVudHM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9nZXRkZW50czY0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM0YTE0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZWdpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZWdpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGVnaWQKKyAgICAuYWxpZ24gNAorCitnZXRlZ2lkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0ZWdpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRldWlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGVjNzI5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0ZXVpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0ZXVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldGV1aWQKKyAgICAuYWxpZ24gNAorCitnZXRldWlkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0ZXVpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2OWQ3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldGdpZC5TCkBAIC0wLDAgKzEsMjAgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0Z2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0Z2lkCisgICAgLmFsaWduIDQKKworZ2V0Z2lkOgorICAgIG1vdmwgICAgJF9fTlJfZ2V0Z2lkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRncm91cHMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZhOTkxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0Z3JvdXBzLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRncm91cHMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRncm91cHMKKyAgICAuYWxpZ24gNAorCitnZXRncm91cHM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldGdyb3VwczMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2ExZTY1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cGdpZC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cGdpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHBnaWQKKyAgICAuYWxpZ24gNAorCitnZXRwZ2lkOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfZ2V0cGdpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjQzYjg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRwaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHBpZAorICAgIC5hbGlnbiA0CisKK2dldHBpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHBpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cHBpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhODgyYmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHBwaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHBwaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRwcGlkCisgICAgLmFsaWduIDQKKworZ2V0cHBpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHBwaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXNnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0ZDMyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmVzZ2lkLlMKQEAgLTAsMCArMSwyMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXRyZXNnaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXRyZXNnaWQKKyAgICAuYWxpZ24gNAorCitnZXRyZXNnaWQ6CisgICAgbW92bCAgICAkX19OUl9nZXRyZXNnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJlc3VpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMDdiNWM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXRyZXN1aWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHJlc3VpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHJlc3VpZAorICAgIC5hbGlnbiA0CisKK2dldHJlc3VpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHJlc3VpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cmxpbWl0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0YzMzNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJsaW1pdC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cmxpbWl0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cmxpbWl0CisgICAgLmFsaWduIDQKKworZ2V0cmxpbWl0OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl91Z2V0cmxpbWl0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0cnVzYWdlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MGFiNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHJ1c2FnZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgZ2V0cnVzYWdlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgZ2V0cnVzYWdlCisgICAgLmFsaWduIDQKKworZ2V0cnVzYWdlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9nZXRydXNhZ2UsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU4Y2I1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGlkLlMKQEAgLTAsMCArMSwyMCBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXR0aWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXR0aWQKKyAgICAuYWxpZ24gNAorCitnZXR0aWQ6CisgICAgbW92bCAgICAkX19OUl9nZXR0aWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR0aW1lb2ZkYXkuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmVmZmU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvZ2V0dGltZW9mZGF5LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBnZXR0aW1lb2ZkYXksIEBmdW5jdGlvbgorICAgIC5nbG9ibCBnZXR0aW1lb2ZkYXkKKyAgICAuYWxpZ24gNAorCitnZXR0aW1lb2ZkYXk6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2dldHRpbWVvZmRheSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2dldHVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzUxMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9nZXR1aWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGdldHVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGdldHVpZAorICAgIC5hbGlnbiA0CisKK2dldHVpZDoKKyAgICBtb3ZsICAgICRfX05SX2dldHVpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5pdF9tb2R1bGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTJiMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbml0X21vZHVsZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgaW5pdF9tb2R1bGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBpbml0X21vZHVsZQorICAgIC5hbGlnbiA0CisKK2luaXRfbW9kdWxlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfaW5pdF9tb2R1bGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2FkZF93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyYTEyZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfYWRkX3dhdGNoLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBpbm90aWZ5X2FkZF93YXRjaCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfYWRkX3dhdGNoCisgICAgLmFsaWduIDQKKworaW5vdGlmeV9hZGRfd2F0Y2g6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9pbm90aWZ5X2FkZF93YXRjaCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfaW5pdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDE4NmM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9pbm90aWZ5X2luaXQuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfaW5pdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGlub3RpZnlfaW5pdAorICAgIC5hbGlnbiA0CisKK2lub3RpZnlfaW5pdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX2lub3RpZnlfaW5pdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvaW5vdGlmeV9ybV93YXRjaC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5MzE4MzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2lub3RpZnlfcm1fd2F0Y2guUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGlub3RpZnlfcm1fd2F0Y2gsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBpbm90aWZ5X3JtX3dhdGNoCisgICAgLmFsaWduIDQKKworaW5vdGlmeV9ybV93YXRjaDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfaW5vdGlmeV9ybV93YXRjaCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2lsbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0OTVjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tpbGwuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGtpbGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBraWxsCisgICAgLmFsaWduIDQKKwora2lsbDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfa2lsbCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMva2xvZ2N0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0NmM4YWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2tsb2djdGwuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGtsb2djdGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBrbG9nY3RsCisgICAgLmFsaWduIDQKKwora2xvZ2N0bDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3N5c2xvZywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xjaG93bi5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTg0YTMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sY2hvd24uUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIGxjaG93biwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGxjaG93bgorICAgIC5hbGlnbiA0CisKK2xjaG93bjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX2xjaG93bjMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9saW5rLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzk0NmRiZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbGluay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbGluaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGxpbmsKKyAgICAuYWxpZ24gNAorCitsaW5rOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9saW5rLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbHNlZWsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYjJjNTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc2Vlay5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbHNlZWssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBsc2VlaworICAgIC5hbGlnbiA0CisKK2xzZWVrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfbHNlZWssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc3RhdC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9sc3RhdC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3MzlmMzIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL2xzdGF0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBsc3RhdCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIGxzdGF0CisgICAgLmFsaWduIDQKKworbHN0YXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX2xzdGF0NjQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21hZHZpc2UuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDIzY2MyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tYWR2aXNlLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtYWR2aXNlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWFkdmlzZQorICAgIC5hbGlnbiA0CisKK21hZHZpc2U6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9tYWR2aXNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9taW5jb3JlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWUwMmFjMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWluY29yZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWluY29yZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1pbmNvcmUKKyAgICAuYWxpZ24gNAorCittaW5jb3JlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfbWluY29yZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGYxZDE1NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtkaXIuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1rZGlyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtkaXIKKyAgICAuYWxpZ24gNAorCitta2RpcjoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfbWtkaXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21rZGlyYXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDQwNmQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta2RpcmF0LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBta2RpcmF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbWtkaXJhdAorICAgIC5hbGlnbiA0CisKK21rZGlyYXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9ta2RpcmF0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtub2QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbWtub2QuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZGYxMDEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9ta25vZC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbWtub2QsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBta25vZAorICAgIC5hbGlnbiA0CisKK21rbm9kOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfbWtub2QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tbG9jay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1MzIzZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21sb2NrLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBtbG9jaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG1sb2NrCisgICAgLmFsaWduIDQKKworbWxvY2s6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX21sb2NrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbW91bnQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjIzN2QzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tb3VudC5TCkBAIC0wLDAgKzEsMzUgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbW91bnQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBtb3VudAorICAgIC5hbGlnbiA0CisKK21vdW50OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIHB1c2hsICAgJWVkaQorICAgIG1vdiAgICAgMjQoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzYoJWVzcCksICVlc2kKKyAgICBtb3YgICAgIDQwKCVlc3ApLCAlZWRpCisgICAgbW92bCAgICAkX19OUl9tb3VudCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWRpCisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21wcm90ZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ0ZDU2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXByb3RlY3QuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1wcm90ZWN0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXByb3RlY3QKKyAgICAuYWxpZ24gNAorCittcHJvdGVjdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX21wcm90ZWN0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXJlbWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5MTI2MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21yZW1hcC5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXJlbWFwLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXJlbWFwCisgICAgLmFsaWduIDQKKworbXJlbWFwOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX21yZW1hcCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL21zeW5jLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjgzY2UwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXN5bmMuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIG1zeW5jLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXN5bmMKKyAgICAuYWxpZ24gNAorCittc3luYzoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX21zeW5jLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9tdW5sb2NrLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzVlZTc1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubG9jay5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXVubG9jaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIG11bmxvY2sKKyAgICAuYWxpZ24gNAorCittdW5sb2NrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9tdW5sb2NrLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbXVubWFwLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyNTE4NDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL211bm1hcC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgbXVubWFwLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgbXVubWFwCisgICAgLmFsaWduIDQKKworbXVubWFwOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9tdW5tYXAsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9uYW5vc2xlZXAuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzI3NGQ0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvbmFub3NsZWVwLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBuYW5vc2xlZXAsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBuYW5vc2xlZXAKKyAgICAuYWxpZ24gNAorCituYW5vc2xlZXA6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX25hbm9zbGVlcCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BhdXNlLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BhdXNlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZlMTU0NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGF1c2UuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHBhdXNlLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcGF1c2UKKyAgICAuYWxpZ24gNAorCitwYXVzZToKKyAgICBtb3ZsICAgICRfX05SX3BhdXNlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9waXBlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDEzMDkwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcGlwZS5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcGlwZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHBpcGUKKyAgICAuYWxpZ24gNAorCitwaXBlOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfcGlwZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BvbGwuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcG9sbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3MzJhZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3BvbGwuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHBvbGwsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBwb2xsCisgICAgLmFsaWduIDQKKworcG9sbDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3BvbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9wcmN0bC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZTVkODkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3ByY3RsLlMKQEAgLTAsMCArMSwzNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBwcmN0bCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHByY3RsCisgICAgLmFsaWduIDQKKworcHJjdGw6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgcHVzaGwgICAlZWRpCisgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKKyAgICBtb3ZsICAgICRfX05SX3ByY3RsLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM1NDlkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVhZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHJlYWQKKyAgICAuYWxpZ24gNAorCityZWFkOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfcmVhZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlYWRsaW5rLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjNzYzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZGxpbmsuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlYWRsaW5rLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVhZGxpbmsKKyAgICAuYWxpZ24gNAorCityZWFkbGluazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3JlYWRsaW5rLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVhZHYuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZDM1MmQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZWFkdi5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgcmVhZHYsIEBmdW5jdGlvbgorICAgIC5nbG9ibCByZWFkdgorICAgIC5hbGlnbiA0CisKK3JlYWR2OgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfcmVhZHYsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9yZW5hbWUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzlhZTExOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSByZW5hbWUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCByZW5hbWUKKyAgICAuYWxpZ24gNAorCityZW5hbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3JlbmFtZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JlbmFtZWF0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzBiYTIxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcmVuYW1lYXQuUwpAQCAtMCwwICsxLDMyIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJlbmFtZWF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcmVuYW1lYXQKKyAgICAuYWxpZ24gNAorCityZW5hbWVhdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZXNpCisgICAgbW92bCAgICAkX19OUl9yZW5hbWVhdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZXNpCisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JtZGlyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3JtZGlyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTI0YzEwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvcm1kaXIuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHJtZGlyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgcm1kaXIKKyAgICAuYWxpZ24gNAorCitybWRpcjoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3JtZGlyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTJkMDlhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21heC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldF9wcmlvcml0eV9tYXgKKyAgICAuYWxpZ24gNAorCitzY2hlZF9nZXRfcHJpb3JpdHlfbWF4OgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0X3ByaW9yaXR5X21pbi5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmNjZlZWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldF9wcmlvcml0eV9taW4uUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNjaGVkX2dldF9wcmlvcml0eV9taW4sIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF9nZXRfcHJpb3JpdHlfbWluCisgICAgLmFsaWduIDQKKworc2NoZWRfZ2V0X3ByaW9yaXR5X21pbjoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9nZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOGJkMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHBhcmFtLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9nZXRwYXJhbSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX2dldHBhcmFtCisgICAgLmFsaWduIDQKKworc2NoZWRfZ2V0cGFyYW06CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NjaGVkX2dldHBhcmFtLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfZ2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhYTVmOGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX2dldHNjaGVkdWxlci5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfZ2V0c2NoZWR1bGVyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfZ2V0c2NoZWR1bGVyCisgICAgLmFsaWduIDQKKworc2NoZWRfZ2V0c2NoZWR1bGVyOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfZ2V0c2NoZWR1bGVyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfcnJfZ2V0X2ludGVydmFsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4Y2NkZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3JyX2dldF9pbnRlcnZhbC5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfcnJfZ2V0X2ludGVydmFsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfcnJfZ2V0X2ludGVydmFsCisgICAgLmFsaWduIDQKKworc2NoZWRfcnJfZ2V0X2ludGVydmFsOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF9zZXRwYXJhbS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiODY5YmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHBhcmFtLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzY2hlZF9zZXRwYXJhbSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNjaGVkX3NldHBhcmFtCisgICAgLmFsaWduIDQKKworc2NoZWRfc2V0cGFyYW06CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NjaGVkX3NldHBhcmFtLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfc2V0c2NoZWR1bGVyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5OWE2ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NjaGVkX3NldHNjaGVkdWxlci5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfc2V0c2NoZWR1bGVyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2NoZWRfc2V0c2NoZWR1bGVyCisgICAgLmFsaWduIDQKKworc2NoZWRfc2V0c2NoZWR1bGVyOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfc2V0c2NoZWR1bGVyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2NoZWRfeWllbGQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2Q3MjgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zY2hlZF95aWVsZC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2NoZWRfeWllbGQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzY2hlZF95aWVsZAorICAgIC5hbGlnbiA0CisKK3NjaGVkX3lpZWxkOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2NoZWRfeWllbGQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZWxlY3QuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VsZWN0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjczNTlhOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2VsZWN0LlMKQEAgLTAsMCArMSwzNSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZWxlY3QsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZWxlY3QKKyAgICAuYWxpZ24gNAorCitzZWxlY3Q6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgcHVzaGwgICAlZWRpCisgICAgbW92ICAgICAyNCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjgoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDMyKCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzNiglZXNwKSwgJWVzaQorICAgIG1vdiAgICAgNDAoJWVzcCksICVlZGkKKyAgICBtb3ZsICAgICRfX05SX19uZXdzZWxlY3QsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkaQorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZW5kZmlsZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3NTJlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NlbmRmaWxlLlMKQEAgLTAsMCArMSwzMiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZW5kZmlsZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNlbmRmaWxlCisgICAgLmFsaWduIDQKKworc2VuZGZpbGU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgcHVzaGwgICAlZXNpCisgICAgbW92ICAgICAyMCglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI4KCVlc3ApLCAlZWR4CisgICAgbW92ICAgICAzMiglZXNwKSwgJWVzaQorICAgIG1vdmwgICAgJF9fTlJfc2VuZGZpbGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRnaWQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmZDAyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0Z2lkLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRnaWQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRnaWQKKyAgICAuYWxpZ24gNAorCitzZXRnaWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zZXRnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldGdyb3Vwcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmJhYjExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRncm91cHMuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldGdyb3VwcywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldGdyb3VwcworICAgIC5hbGlnbiA0CisKK3NldGdyb3VwczoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2V0Z3JvdXBzMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRpdGltZXIuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjlkNGJjNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0aXRpbWVyLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRpdGltZXIsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRpdGltZXIKKyAgICAuYWxpZ24gNAorCitzZXRpdGltZXI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zZXRpdGltZXIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHBnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjcyMzgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwZ2lkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwZ2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cGdpZAorICAgIC5hbGlnbiA0CisKK3NldHBnaWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHBnaWQsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRwcmlvcml0eS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5ZDdhMTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHByaW9yaXR5LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRwcmlvcml0eSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHByaW9yaXR5CisgICAgLmFsaWduIDQKKworc2V0cHJpb3JpdHk6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zZXRwcmlvcml0eSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWR4CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlZ2lkLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMxMTJkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVnaWQuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJlZ2lkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVnaWQKKyAgICAuYWxpZ24gNAorCitzZXRyZWdpZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2V0cmVnaWQzMiwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc2dpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTZjOGM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXNnaWQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHJlc2dpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHJlc2dpZAorICAgIC5hbGlnbiA0CisKK3NldHJlc2dpZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3NldHJlc2dpZDMyLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmVzdWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MWNiMzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJlc3VpZC5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0cmVzdWlkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0cmVzdWlkCisgICAgLmFsaWduIDQKKworc2V0cmVzdWlkOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2V0cmVzdWlkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRyZXVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5ZTVkNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHJldWlkLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRyZXVpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHJldWlkCisgICAgLmFsaWduIDQKKworc2V0cmV1aWQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHJldWlkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRybGltaXQuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzE2MTNjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0cmxpbWl0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzZXRybGltaXQsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzZXRybGltaXQKKyAgICAuYWxpZ24gNAorCitzZXRybGltaXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3NldHJsaW1pdCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHNpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYjMxMzgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXRzaWQuUwpAQCAtMCwwICsxLDIwIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHNpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHNpZAorICAgIC5hbGlnbiA0CisKK3NldHNpZDoKKyAgICBtb3ZsICAgICRfX05SX3NldHNpZCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHRpbWVvZmRheS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzdmYTFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zZXR0aW1lb2ZkYXkuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHNldHRpbWVvZmRheSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHNldHRpbWVvZmRheQorICAgIC5hbGlnbiA0CisKK3NldHRpbWVvZmRheToKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc2V0dGltZW9mZGF5LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2V0dWlkLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHVpZC5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMzM0YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NldHVpZC5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2V0dWlkLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2V0dWlkCisgICAgLmFsaWduIDQKKworc2V0dWlkOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfc2V0dWlkMzIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdhY3Rpb24uUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWN0aW9uLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE2ZTNhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lnYWN0aW9uLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzaWdhY3Rpb24sIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzaWdhY3Rpb24KKyAgICAuYWxpZ24gNAorCitzaWdhY3Rpb246CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl9zaWdhY3Rpb24sICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3NpZ3BlbmRpbmcuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjgwODg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwZW5kaW5nLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzaWdwZW5kaW5nLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc2lncGVuZGluZworICAgIC5hbGlnbiA0CisKK3NpZ3BlbmRpbmc6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl9zaWdwZW5kaW5nLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc2lncHJvY21hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmZjZjkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zaWdwcm9jbWFzay5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgc2lncHJvY21hc2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzaWdwcm9jbWFzaworICAgIC5hbGlnbiA0CisKK3NpZ3Byb2NtYXNrOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfc2lncHJvY21hc2ssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zdGF0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N0YXQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTk4NGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy9zdGF0LlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSBzdGF0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgc3RhdAorICAgIC5hbGlnbiA0CisKK3N0YXQ6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3N0YXQ2NCwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmsuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3ltbGluay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0YzQyOTgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bWxpbmsuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN5bWxpbmssIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzeW1saW5rCisgICAgLmFsaWduIDQKKworc3ltbGluazoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfc3ltbGluaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWN4CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bmMuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvc3luYy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhNmE3MjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3N5bmMuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHN5bmMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCBzeW5jCisgICAgLmFsaWduIDQKKworc3luYzoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3N5bmMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9jcmVhdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfY3JlYXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxNTIxMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfY3JlYXRlLlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcl9jcmVhdGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCB0aW1lcl9jcmVhdGUKKyAgICAuYWxpZ24gNAorCit0aW1lcl9jcmVhdGU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl90aW1lcl9jcmVhdGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9kZWxldGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfZGVsZXRlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkzOWRiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfZGVsZXRlLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcl9kZWxldGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCB0aW1lcl9kZWxldGUKKyAgICAuYWxpZ24gNAorCit0aW1lcl9kZWxldGU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl90aW1lcl9kZWxldGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9nZXRvdmVycnVuLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVyX2dldG92ZXJydW4uUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYTFmYTFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9nZXRvdmVycnVuLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcl9nZXRvdmVycnVuLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGltZXJfZ2V0b3ZlcnJ1bgorICAgIC5hbGlnbiA0CisKK3RpbWVyX2dldG92ZXJydW46CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl90aW1lcl9nZXRvdmVycnVuLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfZ2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9nZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDcyNThiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfZ2V0dGltZS5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdGltZXJfZ2V0dGltZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVyX2dldHRpbWUKKyAgICAuYWxpZ24gNAorCit0aW1lcl9nZXR0aW1lOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl90aW1lcl9nZXR0aW1lLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfc2V0dGltZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcl9zZXR0aW1lLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmMzNzg0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGltZXJfc2V0dGltZS5TCkBAIC0wLDAgKzEsMzIgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdGltZXJfc2V0dGltZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVyX3NldHRpbWUKKyAgICAuYWxpZ24gNAorCit0aW1lcl9zZXR0aW1lOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIHB1c2hsICAgJWVzaQorICAgIG1vdiAgICAgMjAoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVkeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlc2kKKyAgICBtb3ZsICAgICRfX05SX3RpbWVyX3NldHRpbWUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVzaQorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0M2YyYmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RpbWVzLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0aW1lcywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRpbWVzCisgICAgLmFsaWduIDQKKwordGltZXM6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl90aW1lcywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RraWxsLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmMTc0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdGtpbGwuUwpAQCAtMCwwICsxLDI2IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHRraWxsLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdGtpbGwKKyAgICAuYWxpZ24gNAorCit0a2lsbDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBtb3YgICAgIDEyKCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVjeAorICAgIG1vdmwgICAgJF9fTlJfdGtpbGwsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy90cnVuY2F0ZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNjY0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3RydW5jYXRlLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB0cnVuY2F0ZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHRydW5jYXRlCisgICAgLmFsaWduIDQKKwordHJ1bmNhdGU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3RydW5jYXRlLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW1hc2suUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTNkOGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bWFzay5TCkBAIC0wLDAgKzEsMjMgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdW1hc2ssIEBmdW5jdGlvbgorICAgIC5nbG9ibCB1bWFzaworICAgIC5hbGlnbiA0CisKK3VtYXNrOgorICAgIHB1c2hsICAgJWVieAorICAgIG1vdiAgICAgOCglZXNwKSwgJWVieAorICAgIG1vdmwgICAgJF9fTlJfdW1hc2ssICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Vtb3VudDIuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGI1MzU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bW91bnQyLlMKQEAgLTAsMCArMSwyNiBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bW91bnQyLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW1vdW50MgorICAgIC5hbGlnbiA0CisKK3Vtb3VudDI6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgbW92ICAgICAxMiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlY3gKKyAgICBtb3ZsICAgICRfX05SX3Vtb3VudDIsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmFtZS5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZThiZmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VuYW1lLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB1bmFtZSwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHVuYW1lCisgICAgLmFsaWduIDQKKwordW5hbWU6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl91bmFtZSwgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGluay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmsuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU1MmJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy91bmxpbmsuUwpAQCAtMCwwICsxLDIzIEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGluaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHVubGluaworICAgIC5hbGlnbiA0CisKK3VubGluazoKKyAgICBwdXNobCAgICVlYngKKyAgICBtb3YgICAgIDgoJWVzcCksICVlYngKKyAgICBtb3ZsICAgICRfX05SX3VubGluaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3VubGlua2F0LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjZmOGMxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdW5saW5rYXQuUwpAQCAtMCwwICsxLDI5IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHVubGlua2F0LCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdW5saW5rYXQKKyAgICAuYWxpZ24gNAorCit1bmxpbmthdDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyMCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMjQoJWVzcCksICVlZHgKKyAgICBtb3ZsICAgICRfX05SX3VubGlua2F0LCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvdXRpbWVzLlMgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhMWI1MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3V0aW1lcy5TCkBAIC0wLDAgKzEsMjYgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgdXRpbWVzLCBAZnVuY3Rpb24KKyAgICAuZ2xvYmwgdXRpbWVzCisgICAgLmFsaWduIDQKKwordXRpbWVzOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIG1vdiAgICAgMTIoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDE2KCVlc3ApLCAlZWN4CisgICAgbW92bCAgICAkX19OUl91dGltZXMsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy92Zm9yay5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy92Zm9yay5TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1Y2I5ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3Zmb3JrLlMKQEAgLTAsMCArMSwyMyBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB2Zm9yaywgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHZmb3JrCisgICAgLmFsaWduIDQKKwordmZvcms6CisgICAgcHVzaGwgICAlZWJ4CisgICAgbW92ICAgICA4KCVlc3ApLCAlZWJ4CisgICAgbW92bCAgICAkX19OUl92Zm9yaywgJWVheAorICAgIGludCAgICAgJDB4ODAKKyAgICBjbXBsICAgICQtMTI5LCAlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJWVheAorICAgIHB1c2hsICAgJWVheAorICAgIGNhbGwgICAgX19zZXRfZXJybm8KKyAgICBhZGRsICAgICQ0LCAlZXNwCisgICAgb3JsICAgICAkLTEsICVlYXgKKzE6CisgICAgcG9wbCAgICAlZWJ4CisgICAgcmV0CmRpZmYgLS1naXQgYS9saWJjL2FyY2gteDg2L3N5c2NhbGxzL3dhaXRpZC5TIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0aWQuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTUzMjhiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93YWl0aWQuUwpAQCAtMCwwICsxLDM1IEBACisvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlIHdhaXRpZCwgQGZ1bmN0aW9uCisgICAgLmdsb2JsIHdhaXRpZAorICAgIC5hbGlnbiA0CisKK3dhaXRpZDoKKyAgICBwdXNobCAgICVlYngKKyAgICBwdXNobCAgICVlY3gKKyAgICBwdXNobCAgICVlZHgKKyAgICBwdXNobCAgICVlc2kKKyAgICBwdXNobCAgICVlZGkKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWJ4CisgICAgbW92ICAgICAyOCglZXNwKSwgJWVjeAorICAgIG1vdiAgICAgMzIoJWVzcCksICVlZHgKKyAgICBtb3YgICAgIDM2KCVlc3ApLCAlZXNpCisgICAgbW92ICAgICA0MCglZXNwKSwgJWVkaQorICAgIG1vdmwgICAgJF9fTlJfd2FpdGlkLCAlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICVlYXgKKyAgICBqYiAgICAgIDFmCisgICAgbmVnbCAgICAlZWF4CisgICAgcHVzaGwgICAlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICVlc3AKKyAgICBvcmwgICAgICQtMSwgJWVheAorMToKKyAgICBwb3BsICAgICVlZGkKKyAgICBwb3BsICAgICVlc2kKKyAgICBwb3BsICAgICVlZHgKKyAgICBwb3BsICAgICVlY3gKKyAgICBwb3BsICAgICVlYngKKyAgICByZXQKZGlmZiAtLWdpdCBhL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGUuUwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWE0NTBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZS5TCkBAIC0wLDAgKzEsMjkgQEAKKy8qIGF1dG9nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHkgKi8KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworICAgIC50ZXh0CisgICAgLnR5cGUgd3JpdGUsIEBmdW5jdGlvbgorICAgIC5nbG9ibCB3cml0ZQorICAgIC5hbGlnbiA0CisKK3dyaXRlOgorICAgIHB1c2hsICAgJWVieAorICAgIHB1c2hsICAgJWVjeAorICAgIHB1c2hsICAgJWVkeAorICAgIG1vdiAgICAgMTYoJWVzcCksICVlYngKKyAgICBtb3YgICAgIDIwKCVlc3ApLCAlZWN4CisgICAgbW92ICAgICAyNCglZXNwKSwgJWVkeAorICAgIG1vdmwgICAgJF9fTlJfd3JpdGUsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcmNoLXg4Ni9zeXNjYWxscy93cml0ZXYuUyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNkMzczMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJjaC14ODYvc3lzY2FsbHMvd3JpdGV2LlMKQEAgLTAsMCArMSwyOSBAQAorLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSB3cml0ZXYsIEBmdW5jdGlvbgorICAgIC5nbG9ibCB3cml0ZXYKKyAgICAuYWxpZ24gNAorCit3cml0ZXY6CisgICAgcHVzaGwgICAlZWJ4CisgICAgcHVzaGwgICAlZWN4CisgICAgcHVzaGwgICAlZWR4CisgICAgbW92ICAgICAxNiglZXNwKSwgJWVieAorICAgIG1vdiAgICAgMjAoJWVzcCksICVlY3gKKyAgICBtb3YgICAgIDI0KCVlc3ApLCAlZWR4CisgICAgbW92bCAgICAkX19OUl93cml0ZXYsICVlYXgKKyAgICBpbnQgICAgICQweDgwCisgICAgY21wbCAgICAkLTEyOSwgJWVheAorICAgIGpiICAgICAgMWYKKyAgICBuZWdsICAgICVlYXgKKyAgICBwdXNobCAgICVlYXgKKyAgICBjYWxsICAgIF9fc2V0X2Vycm5vCisgICAgYWRkbCAgICAkNCwgJWVzcAorICAgIG9ybCAgICAgJC0xLCAlZWF4CisxOgorICAgIHBvcGwgICAgJWVkeAorICAgIHBvcGwgICAgJWVjeAorICAgIHBvcGwgICAgJWVieAorICAgIHJldApkaWZmIC0tZ2l0IGEvbGliYy9hcnBhX25hbWVzZXIuaCBiL2xpYmMvYXJwYV9uYW1lc2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmQyYTczOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJwYV9uYW1lc2VyLmgKQEAgLTAsMCArMSw1NjkgQEAKKy8qCSROZXRCU0Q6IG5hbWVzZXIuaCx2IDEuMTkgMjAwNS8xMi8yNiAxOTowMTo0NyBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg5LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKy8qCisgKglJZDogbmFtZXNlci5oLHYgMS4yLjIuNC40LjEgMjAwNC8wMy8wOSAwODozMzozMCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9BUlBBX05BTUVTRVJfSF8KKyNkZWZpbmUgX0FSUEFfTkFNRVNFUl9IXworCisjZGVmaW5lIEJJTkRfNF9DT01QQVQKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisvKgorICogUmV2aXNpb24gaW5mb3JtYXRpb24uICBUaGlzIGlzIHRoZSByZWxlYXNlIGRhdGUgaW4gWVlZWU1NREQgZm9ybWF0LgorICogSXQgY2FuIGNoYW5nZSBldmVyeSBkYXkgc28gdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIHdpdGggaXQgaXMgdXNlIGl0CisgKiBpbiBwcmVwcm9jZXNzb3IgY29tbWFuZHMgc3VjaCBhcyAiI2lmIChfX05BTUVTRVIgPiAxOTkzMTEwNCkiLiAgRG8gbm90CisgKiBjb21wYXJlIGZvciBlcXVhbGl0eTsgcmF0aGVyLCB1c2UgaXQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgeW91ciBsaWJiaW5kLmEKKyAqIGNvbnRhaW5zIGEgbmV3IGVub3VnaCBsaWIvbmFtZXNlci8gdG8gc3VwcG9ydCB0aGUgZmVhdHVyZSB5b3UgbmVlZC4KKyAqLworCisjZGVmaW5lIF9fTkFNRVNFUgkxOTk5MTAwNgkvKiBOZXcgaW50ZXJmYWNlIHZlcnNpb24gc3RhbXAuICovCisKKy8qCisgKiBEZWZpbmUgY29uc3RhbnRzIGJhc2VkIG9uIFJGQyA4ODMsIFJGQyAxMDM0LCBSRkMgMTAzNQorICovCisjZGVmaW5lIE5TX1BBQ0tFVFNaCTUxMgkvKiBkZWZhdWx0IFVEUCBwYWNrZXQgc2l6ZSAqLworI2RlZmluZSBOU19NQVhETkFNRQkxMDI1CS8qIG1heGltdW0gZG9tYWluIG5hbWUgKi8KKyNkZWZpbmUgTlNfTUFYTVNHCTY1NTM1CS8qIG1heGltdW0gbWVzc2FnZSBzaXplICovCisjZGVmaW5lIE5TX01BWENETkFNRQkyNTUJLyogbWF4aW11bSBjb21wcmVzc2VkIGRvbWFpbiBuYW1lICovCisjZGVmaW5lIE5TX01BWExBQkVMCTYzCS8qIG1heGltdW0gbGVuZ3RoIG9mIGRvbWFpbiBsYWJlbCAqLworI2RlZmluZSBOU19IRklYRURTWgkxMgkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gaGVhZGVyICovCisjZGVmaW5lIE5TX1FGSVhFRFNaCTQJLyogIy9ieXRlcyBvZiBmaXhlZCBkYXRhIGluIHF1ZXJ5ICovCisjZGVmaW5lIE5TX1JSRklYRURTWgkxMAkvKiAjL2J5dGVzIG9mIGZpeGVkIGRhdGEgaW4gciByZWNvcmQgKi8KKyNkZWZpbmUgTlNfSU5UMzJTWgk0CS8qICMvYnl0ZXMgb2YgZGF0YSBpbiBhIHVpbnQzMl90ICovCisjZGVmaW5lIE5TX0lOVDE2U1oJMgkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50MTZfdCAqLworI2RlZmluZSBOU19JTlQ4U1oJMQkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50OF90ICovCisjZGVmaW5lIE5TX0lOQUREUlNaCTQJLyogSVB2NCBUX0EgKi8KKyNkZWZpbmUgTlNfSU42QUREUlNaCTE2CS8qIElQdjYgVF9BQUFBICovCisjZGVmaW5lIE5TX0NNUFJTRkxHUwkweGMwCS8qIEZsYWcgYml0cyBpbmRpY2F0aW5nIG5hbWUgY29tcHJlc3Npb24uICovCisjZGVmaW5lIE5TX0RFRkFVTFRQT1JUCTUzCS8qIEZvciBib3RoIFRDUCBhbmQgVURQLiAqLworCisvKgorICogVGhlc2UgY2FuIGJlIGV4cGFuZGVkIHdpdGggc3lub255bXMsIGp1c3Qga2VlcCBuc19wYXJzZS5jOm5zX3BhcnNlcmVjb3JkKCkKKyAqIGluIHN5bmNoIHdpdGggaXQuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3NlY3QgeworCW5zX3NfcWQgPSAwLAkJLyogUXVlcnk6IFF1ZXN0aW9uLiAqLworCW5zX3Nfem4gPSAwLAkJLyogVXBkYXRlOiBab25lLiAqLworCW5zX3NfYW4gPSAxLAkJLyogUXVlcnk6IEFuc3dlci4gKi8KKwluc19zX3ByID0gMSwJCS8qIFVwZGF0ZTogUHJlcmVxdWlzaXRlcy4gKi8KKwluc19zX25zID0gMiwJCS8qIFF1ZXJ5OiBOYW1lIHNlcnZlcnMuICovCisJbnNfc191ZCA9IDIsCQkvKiBVcGRhdGU6IFVwZGF0ZS4gKi8KKwluc19zX2FyID0gMywJCS8qIFF1ZXJ5fFVwZGF0ZTogQWRkaXRpb25hbCByZWNvcmRzLiAqLworCW5zX3NfbWF4ID0gNAorfSBuc19zZWN0OworCisvKgorICogVGhpcyBpcyBhIG1lc3NhZ2UgaGFuZGxlLiAgSXQgaXMgY2FsbGVyIGFsbG9jYXRlZCBhbmQgaGFzIG5vIGR5bmFtaWMgZGF0YS4KKyAqIFRoaXMgc3RydWN0dXJlIGlzIGludGVuZGVkIHRvIGJlIG9wYXF1ZSB0byBhbGwgYnV0IG5zX3BhcnNlLmMsIHRodXMgdGhlCisgKiBsZWFkaW5nIF8ncyBvbiB0aGUgbWVtYmVyIG5hbWVzLiAgVXNlIHRoZSBhY2Nlc3NvciBmdW5jdGlvbnMsIG5vdCB0aGUgXydzLgorICovCit0eXBlZGVmIHN0cnVjdCBfX25zX21zZyB7CisJY29uc3QgdV9jaGFyCSpfbXNnLCAqX2VvbTsKKwl1aW50MTZfdAlfaWQsIF9mbGFncywgX2NvdW50c1tuc19zX21heF07CisJY29uc3QgdV9jaGFyCSpfc2VjdGlvbnNbbnNfc19tYXhdOworCW5zX3NlY3QJCV9zZWN0OworCWludAkJX3JybnVtOworCWNvbnN0IHVfY2hhcgkqX21zZ19wdHI7Cit9IG5zX21zZzsKKworLyogUHJpdmF0ZSBkYXRhIHN0cnVjdHVyZSAtIGRvIG5vdCB1c2UgZnJvbSBvdXRzaWRlIGxpYnJhcnkuICovCitzdHJ1Y3QgX25zX2ZsYWdkYXRhIHsgIGludCBtYXNrLCBzaGlmdDsgIH07CitleHRlcm4gY29uc3Qgc3RydWN0IF9uc19mbGFnZGF0YSBfbnNfZmxhZ2RhdGFbXTsKKworLyogQWNjZXNzb3IgbWFjcm9zIC0gdGhpcyBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiAqLworCisjZGVmaW5lIG5zX21zZ19pZChoYW5kbGUpICgoaGFuZGxlKS5faWQgKyAwKQorI2RlZmluZSBuc19tc2dfYmFzZShoYW5kbGUpICgoaGFuZGxlKS5fbXNnICsgMCkKKyNkZWZpbmUgbnNfbXNnX2VuZChoYW5kbGUpICgoaGFuZGxlKS5fZW9tICsgMCkKKyNkZWZpbmUgbnNfbXNnX3NpemUoaGFuZGxlKSAoKHNpemVfdCkoKGhhbmRsZSkuX2VvbSAtIChoYW5kbGUpLl9tc2cpKQorI2RlZmluZSBuc19tc2dfY291bnQoaGFuZGxlLCBzZWN0aW9uKSAoKGhhbmRsZSkuX2NvdW50c1tzZWN0aW9uXSArIDApCisKKy8qCisgKiBUaGlzIGlzIGEgcGFyc2VkIHJlY29yZC4gIEl0IGlzIGNhbGxlciBhbGxvY2F0ZWQgYW5kIGhhcyBubyBkeW5hbWljIGRhdGEuCisgKi8KK3R5cGVkZWYJc3RydWN0IF9fbnNfcnIgeworCWNoYXIJCW5hbWVbTlNfTUFYRE5BTUVdOworCXVpbnQxNl90CXR5cGU7CisJdWludDE2X3QJcnJfY2xhc3M7CisJdWludDMyX3QJdHRsOworCXVpbnQxNl90CXJkbGVuZ3RoOworCWNvbnN0IHVfY2hhciAqCXJkYXRhOworfSBuc19ycjsKKworLyogQWNjZXNzb3IgbWFjcm9zIC0gdGhpcyBpcyBwYXJ0IG9mIHRoZSBwdWJsaWMgaW50ZXJmYWNlLiAqLworI2RlZmluZSBuc19ycl9uYW1lKHJyKQkoKChycikubmFtZVswXSAhPSAnXDAnKSA/IChycikubmFtZSA6ICIuIikKKyNkZWZpbmUgbnNfcnJfdHlwZShycikJKChuc190eXBlKSgocnIpLnR5cGUgKyAwKSkKKyNkZWZpbmUgbnNfcnJfY2xhc3MocnIpCSgobnNfY2xhc3MpKChycikucnJfY2xhc3MgKyAwKSkKKyNkZWZpbmUgbnNfcnJfdHRsKHJyKQkoKHVfbG9uZykocnIpLnR0bCArIDApCisjZGVmaW5lIG5zX3JyX3JkbGVuKHJyKQkoKHNpemVfdCkocnIpLnJkbGVuZ3RoICsgMCkKKyNkZWZpbmUgbnNfcnJfcmRhdGEocnIpCSgocnIpLnJkYXRhICsgMCkKKworLyoKKyAqIFRoZXNlIGRvbid0IGhhdmUgdG8gYmUgaW4gdGhlIHNhbWUgb3JkZXIgYXMgaW4gdGhlIHBhY2tldCBmbGFncyB3b3JkLAorICogYW5kIHRoZXkgY2FuIGV2ZW4gb3ZlcmxhcCBpbiBzb21lIGNhc2VzLCBidXQgdGhleSB3aWxsIG5lZWQgdG8gYmUga2VwdAorICogaW4gc3luY2ggd2l0aCBuc19wYXJzZS5jOm5zX2ZsYWdkYXRhW10uCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2ZsYWcgeworCW5zX2ZfcXIsCQkvKiBRdWVzdGlvbi9SZXNwb25zZS4gKi8KKwluc19mX29wY29kZSwJCS8qIE9wZXJhdGlvbiBjb2RlLiAqLworCW5zX2ZfYWEsCQkvKiBBdXRob3JpdGF0aXZlIEFuc3dlci4gKi8KKwluc19mX3RjLAkJLyogVHJ1bmNhdGlvbiBvY2N1cnJlZC4gKi8KKwluc19mX3JkLAkJLyogUmVjdXJzaW9uIERlc2lyZWQuICovCisJbnNfZl9yYSwJCS8qIFJlY3Vyc2lvbiBBdmFpbGFibGUuICovCisJbnNfZl96LAkJCS8qIE1CWi4gKi8KKwluc19mX2FkLAkJLyogQXV0aGVudGljIERhdGEgKEROU1NFQykuICovCisJbnNfZl9jZCwJCS8qIENoZWNraW5nIERpc2FibGVkIChETlNTRUMpLiAqLworCW5zX2ZfcmNvZGUsCQkvKiBSZXNwb25zZSBjb2RlLiAqLworCW5zX2ZfbWF4Cit9IG5zX2ZsYWc7CisKKy8qCisgKiBDdXJyZW50bHkgZGVmaW5lZCBvcGNvZGVzLgorICovCit0eXBlZGVmIGVudW0gX19uc19vcGNvZGUgeworCW5zX29fcXVlcnkgPSAwLAkJLyogU3RhbmRhcmQgcXVlcnkuICovCisJbnNfb19pcXVlcnkgPSAxLAkvKiBJbnZlcnNlIHF1ZXJ5IChkZXByZWNhdGVkL3Vuc3VwcG9ydGVkKS4gKi8KKwluc19vX3N0YXR1cyA9IDIsCS8qIE5hbWUgc2VydmVyIHN0YXR1cyBxdWVyeSAodW5zdXBwb3J0ZWQpLiAqLworCQkJCS8qIE9wY29kZSAzIGlzIHVuZGVmaW5lZC9yZXNlcnZlZC4gKi8KKwluc19vX25vdGlmeSA9IDQsCS8qIFpvbmUgY2hhbmdlIG5vdGlmaWNhdGlvbi4gKi8KKwluc19vX3VwZGF0ZSA9IDUsCS8qIFpvbmUgdXBkYXRlIG1lc3NhZ2UuICovCisJbnNfb19tYXggPSA2Cit9IG5zX29wY29kZTsKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHJlc3BvbnNlIGNvZGVzLgorICovCit0eXBlZGVmCWVudW0gX19uc19yY29kZSB7CisJbnNfcl9ub2Vycm9yID0gMCwJLyogTm8gZXJyb3Igb2NjdXJyZWQuICovCisJbnNfcl9mb3JtZXJyID0gMSwJLyogRm9ybWF0IGVycm9yLiAqLworCW5zX3Jfc2VydmZhaWwgPSAyLAkvKiBTZXJ2ZXIgZmFpbHVyZS4gKi8KKwluc19yX254ZG9tYWluID0gMywJLyogTmFtZSBlcnJvci4gKi8KKwluc19yX25vdGltcGwgPSA0LAkvKiBVbmltcGxlbWVudGVkLiAqLworCW5zX3JfcmVmdXNlZCA9IDUsCS8qIE9wZXJhdGlvbiByZWZ1c2VkLiAqLworCS8qIHRoZXNlIGFyZSBmb3IgQklORF9VUERBVEUgKi8KKwluc19yX3l4ZG9tYWluID0gNiwJLyogTmFtZSBleGlzdHMgKi8KKwluc19yX3l4cnJzZXQgPSA3LAkvKiBSUnNldCBleGlzdHMgKi8KKwluc19yX254cnJzZXQgPSA4LAkvKiBSUnNldCBkb2VzIG5vdCBleGlzdCAqLworCW5zX3Jfbm90YXV0aCA9IDksCS8qIE5vdCBhdXRob3JpdGF0aXZlIGZvciB6b25lICovCisJbnNfcl9ub3R6b25lID0gMTAsCS8qIFpvbmUgb2YgcmVjb3JkIGRpZmZlcmVudCBmcm9tIHpvbmUgc2VjdGlvbiAqLworCW5zX3JfbWF4ID0gMTEsCisJLyogVGhlIGZvbGxvd2luZyBhcmUgRUROUyBleHRlbmRlZCByY29kZXMgKi8KKwluc19yX2JhZHZlcnMgPSAxNiwKKwkvKiBUaGUgZm9sbG93aW5nIGFyZSBUU0lHIGVycm9ycyAqLworCW5zX3JfYmFkc2lnID0gMTYsCisJbnNfcl9iYWRrZXkgPSAxNywKKwluc19yX2JhZHRpbWUgPSAxOAorfSBuc19yY29kZTsKKworLyogQklORF9VUERBVEUgKi8KK3R5cGVkZWYgZW51bSBfX25zX3VwZGF0ZV9vcGVyYXRpb24geworCW5zX3VvcF9kZWxldGUgPSAwLAorCW5zX3VvcF9hZGQgPSAxLAorCW5zX3VvcF9tYXggPSAyCit9IG5zX3VwZGF0ZV9vcGVyYXRpb247CisKKy8qCisgKiBUaGlzIHN0cnVjdHVyZSBpcyB1c2VkIGZvciBUU0lHIGF1dGhlbnRpY2F0ZWQgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RzaWdfa2V5IHsKKyAgICAgICAgY2hhciBuYW1lW05TX01BWEROQU1FXSwgYWxnW05TX01BWEROQU1FXTsKKyAgICAgICAgdW5zaWduZWQgY2hhciAqZGF0YTsKKyAgICAgICAgaW50IGxlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190c2lnX2tleSBuc190c2lnX2tleTsKKworLyoKKyAqIFRoaXMgc3RydWN0dXJlIGlzIHVzZWQgZm9yIFRTSUcgYXV0aGVudGljYXRlZCBUQ1AgbWVzc2FnZXMKKyAqLworc3RydWN0IG5zX3RjcF90c2lnX3N0YXRlIHsKKwlpbnQgY291bnRlcjsKKwlzdHJ1Y3QgZHN0X2tleSAqa2V5OworCXZvaWQgKmN0eDsKKwl1bnNpZ25lZCBjaGFyIHNpZ1tOU19QQUNLRVRTWl07CisJaW50IHNpZ2xlbjsKK307Cit0eXBlZGVmIHN0cnVjdCBuc190Y3BfdHNpZ19zdGF0ZSBuc190Y3BfdHNpZ19zdGF0ZTsKKworI2RlZmluZSBOU19UU0lHX0ZVREdFIDMwMAorI2RlZmluZSBOU19UU0lHX1RDUF9DT1VOVCAxMDAKKyNkZWZpbmUgTlNfVFNJR19BTEdfSE1BQ19NRDUgIkhNQUMtTUQ1LlNJRy1BTEcuUkVHLklOVCIKKworI2RlZmluZSBOU19UU0lHX0VSUk9SX05PX1RTSUcgLTEwCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfTk9fU1BBQ0UgLTExCisjZGVmaW5lIE5TX1RTSUdfRVJST1JfRk9STUVSUiAtMTIKKworLyoKKyAqIEN1cnJlbnRseSBkZWZpbmVkIHR5cGUgdmFsdWVzIGZvciByZXNvdXJjZXMgYW5kIHF1ZXJpZXMuCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX3R5cGUgeworCW5zX3RfaW52YWxpZCA9IDAsCS8qIENvb2tpZS4gKi8KKwluc190X2EgPSAxLAkJLyogSG9zdCBhZGRyZXNzLiAqLworCW5zX3RfbnMgPSAyLAkJLyogQXV0aG9yaXRhdGl2ZSBzZXJ2ZXIuICovCisJbnNfdF9tZCA9IDMsCQkvKiBNYWlsIGRlc3RpbmF0aW9uLiAqLworCW5zX3RfbWYgPSA0LAkJLyogTWFpbCBmb3J3YXJkZXIuICovCisJbnNfdF9jbmFtZSA9IDUsCQkvKiBDYW5vbmljYWwgbmFtZS4gKi8KKwluc190X3NvYSA9IDYsCQkvKiBTdGFydCBvZiBhdXRob3JpdHkgem9uZS4gKi8KKwluc190X21iID0gNywJCS8qIE1haWxib3ggZG9tYWluIG5hbWUuICovCisJbnNfdF9tZyA9IDgsCQkvKiBNYWlsIGdyb3VwIG1lbWJlci4gKi8KKwluc190X21yID0gOSwJCS8qIE1haWwgcmVuYW1lIG5hbWUuICovCisJbnNfdF9udWxsID0gMTAsCQkvKiBOdWxsIHJlc291cmNlIHJlY29yZC4gKi8KKwluc190X3drcyA9IDExLAkJLyogV2VsbCBrbm93biBzZXJ2aWNlLiAqLworCW5zX3RfcHRyID0gMTIsCQkvKiBEb21haW4gbmFtZSBwb2ludGVyLiAqLworCW5zX3RfaGluZm8gPSAxMywJLyogSG9zdCBpbmZvcm1hdGlvbi4gKi8KKwluc190X21pbmZvID0gMTQsCS8qIE1haWxib3ggaW5mb3JtYXRpb24uICovCisJbnNfdF9teCA9IDE1LAkJLyogTWFpbCByb3V0aW5nIGluZm9ybWF0aW9uLiAqLworCW5zX3RfdHh0ID0gMTYsCQkvKiBUZXh0IHN0cmluZ3MuICovCisJbnNfdF9ycCA9IDE3LAkJLyogUmVzcG9uc2libGUgcGVyc29uLiAqLworCW5zX3RfYWZzZGIgPSAxOCwJLyogQUZTIGNlbGwgZGF0YWJhc2UuICovCisJbnNfdF94MjUgPSAxOSwJCS8qIFhfMjUgY2FsbGluZyBhZGRyZXNzLiAqLworCW5zX3RfaXNkbiA9IDIwLAkJLyogSVNETiBjYWxsaW5nIGFkZHJlc3MuICovCisJbnNfdF9ydCA9IDIxLAkJLyogUm91dGVyLiAqLworCW5zX3RfbnNhcCA9IDIyLAkJLyogTlNBUCBhZGRyZXNzLiAqLworCW5zX3RfbnNhcF9wdHIgPSAyMywJLyogUmV2ZXJzZSBOU0FQIGxvb2t1cCAoZGVwcmVjYXRlZCkuICovCisJbnNfdF9zaWcgPSAyNCwJCS8qIFNlY3VyaXR5IHNpZ25hdHVyZS4gKi8KKwluc190X2tleSA9IDI1LAkJLyogU2VjdXJpdHkga2V5LiAqLworCW5zX3RfcHggPSAyNiwJCS8qIFguNDAwIG1haWwgbWFwcGluZy4gKi8KKwluc190X2dwb3MgPSAyNywJCS8qIEdlb2dyYXBoaWNhbCBwb3NpdGlvbiAod2l0aGRyYXduKS4gKi8KKwluc190X2FhYWEgPSAyOCwJCS8qIElwNiBBZGRyZXNzLiAqLworCW5zX3RfbG9jID0gMjksCQkvKiBMb2NhdGlvbiBJbmZvcm1hdGlvbi4gKi8KKwluc190X254dCA9IDMwLAkJLyogTmV4dCBkb21haW4gKHNlY3VyaXR5KS4gKi8KKwluc190X2VpZCA9IDMxLAkJLyogRW5kcG9pbnQgaWRlbnRpZmllci4gKi8KKwluc190X25pbWxvYyA9IDMyLAkvKiBOaW1yb2QgTG9jYXRvci4gKi8KKwluc190X3NydiA9IDMzLAkJLyogU2VydmVyIFNlbGVjdGlvbi4gKi8KKwluc190X2F0bWEgPSAzNCwJCS8qIEFUTSBBZGRyZXNzICovCisJbnNfdF9uYXB0ciA9IDM1LAkvKiBOYW1pbmcgQXV0aG9yaXR5IFBvaW5UZVIgKi8KKwluc190X2t4ID0gMzYsCQkvKiBLZXkgRXhjaGFuZ2UgKi8KKwluc190X2NlcnQgPSAzNywJCS8qIENlcnRpZmljYXRpb24gcmVjb3JkICovCisJbnNfdF9hNiA9IDM4LAkJLyogSVB2NiBhZGRyZXNzIChkZXByZWNhdGVzIEFBQUEpICovCisJbnNfdF9kbmFtZSA9IDM5LAkvKiBOb24tdGVybWluYWwgRE5BTUUgKGZvciBJUHY2KSAqLworCW5zX3Rfc2luayA9IDQwLAkJLyogS2l0Y2hlbiBzaW5rIChleHBlcmltZW50YXRsKSAqLworCW5zX3Rfb3B0ID0gNDEsCQkvKiBFRE5TMCBvcHRpb24gKG1ldGEtUlIpICovCisJbnNfdF9hcGwgPSA0MiwJCS8qIEFkZHJlc3MgcHJlZml4IGxpc3QgKFJGQyAzMTIzKSAqLworCW5zX3RfdGtleSA9IDI0OSwJLyogVHJhbnNhY3Rpb24ga2V5ICovCisJbnNfdF90c2lnID0gMjUwLAkvKiBUcmFuc2FjdGlvbiBzaWduYXR1cmUuICovCisJbnNfdF9peGZyID0gMjUxLAkvKiBJbmNyZW1lbnRhbCB6b25lIHRyYW5zZmVyLiAqLworCW5zX3RfYXhmciA9IDI1MiwJLyogVHJhbnNmZXIgem9uZSBvZiBhdXRob3JpdHkuICovCisJbnNfdF9tYWlsYiA9IDI1MywJLyogVHJhbnNmZXIgbWFpbGJveCByZWNvcmRzLiAqLworCW5zX3RfbWFpbGEgPSAyNTQsCS8qIFRyYW5zZmVyIG1haWwgYWdlbnQgcmVjb3Jkcy4gKi8KKwluc190X2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX3RfenhmciA9IDI1NiwJLyogQklORC1zcGVjaWZpYywgbm9uc3RhbmRhcmQuICovCisJbnNfdF9tYXggPSA2NTUzNgorfSBuc190eXBlOworCisvKiBFeGNsdXNpdmVseSBhIFFUWVBFPyAobm90IGFsc28gYW4gUlRZUEUpICovCisjZGVmaW5lCW5zX3RfcXRfcCh0KSAobnNfdF94ZnJfcCh0KSB8fCAodCkgPT0gbnNfdF9hbnkgfHwgXAorCQkgICAgICAodCkgPT0gbnNfdF9tYWlsYiB8fCAodCkgPT0gbnNfdF9tYWlsYSkKKy8qIFNvbWUga2luZCBvZiBtZXRhLVJSPyAobm90IGEgUVRZUEUsIGJ1dCBhbHNvIG5vdCBhbiBSVFlQRSkgKi8KKyNkZWZpbmUJbnNfdF9tcnJfcCh0KSAoKHQpID09IG5zX3RfdHNpZyB8fCAodCkgPT0gbnNfdF9vcHQpCisvKiBFeGNsdXNpdmVseSBhbiBSVFlQRT8gKG5vdCBhbHNvIGEgUVRZUEUgb3IgYSBtZXRhLVJSKSAqLworI2RlZmluZSBuc190X3JyX3AodCkgKCFuc190X3F0X3AodCkgJiYgIW5zX3RfbXJyX3AodCkpCisjZGVmaW5lIG5zX3RfdWRwX3AodCkgKCh0KSAhPSBuc190X2F4ZnIgJiYgKHQpICE9IG5zX3RfenhmcikKKyNkZWZpbmUgbnNfdF94ZnJfcCh0KSAoKHQpID09IG5zX3RfYXhmciB8fCAodCkgPT0gbnNfdF9peGZyIHx8IFwKKwkJICAgICAgICh0KSA9PSBuc190X3p4ZnIpCisKKy8qCisgKiBWYWx1ZXMgZm9yIGNsYXNzIGZpZWxkCisgKi8KK3R5cGVkZWYgZW51bSBfX25zX2NsYXNzIHsKKwluc19jX2ludmFsaWQgPSAwLAkvKiBDb29raWUuICovCisJbnNfY19pbiA9IDEsCQkvKiBJbnRlcm5ldC4gKi8KKwluc19jXzIgPSAyLAkJLyogdW5hbGxvY2F0ZWQvdW5zdXBwb3J0ZWQuICovCisJbnNfY19jaGFvcyA9IDMsCQkvKiBNSVQgQ2hhb3MtbmV0LiAqLworCW5zX2NfaHMgPSA0LAkJLyogTUlUIEhlc2lvZC4gKi8KKwkvKiBRdWVyeSBjbGFzcyB2YWx1ZXMgd2hpY2ggZG8gbm90IGFwcGVhciBpbiByZXNvdXJjZSByZWNvcmRzICovCisJbnNfY19ub25lID0gMjU0LAkvKiBmb3IgcHJlcmVxLiBzZWN0aW9ucyBpbiB1cGRhdGUgcmVxdWVzdHMgKi8KKwluc19jX2FueSA9IDI1NSwJCS8qIFdpbGRjYXJkIG1hdGNoLiAqLworCW5zX2NfbWF4ID0gNjU1MzYKK30gbnNfY2xhc3M7CisKKy8qIEROU1NFQyBjb25zdGFudHMuICovCisKK3R5cGVkZWYgZW51bSBfX25zX2tleV90eXBlcyB7CisJbnNfa3RfcnNhID0gMSwJCS8qIGtleSB0eXBlIFJTQS9NRDUgKi8KKwluc19rdF9kaCAgPSAyLAkJLyogRGlmZmllIEhlbGxtYW4gKi8KKwluc19rdF9kc2EgPSAzLAkJLyogRGlnaXRhbCBTaWduYXR1cmUgU3RhbmRhcmQgKE1BTkRBVE9SWSkgKi8KKwluc19rdF9wcml2YXRlID0gMjU0CS8qIFByaXZhdGUga2V5IHR5cGUgc3RhcnRzIHdpdGggT0lEICovCit9IG5zX2tleV90eXBlczsKKwordHlwZWRlZiBlbnVtIF9fbnNfY2VydF90eXBlcyB7CisJY2VydF90X3BraXggPSAxLAkvKiBQS0lYIChYLjUwOXYzKSAqLworCWNlcnRfdF9zcGtpID0gMiwJLyogU1BLSSAqLworCWNlcnRfdF9wZ3AgID0gMywJLyogUEdQICovCisJY2VydF90X3VybCAgPSAyNTMsCS8qIFVSTCBwcml2YXRlIHR5cGUgKi8KKwljZXJ0X3Rfb2lkICA9IDI1NAkvKiBPSUQgcHJpdmF0ZSB0eXBlICovCit9IG5zX2NlcnRfdHlwZXM7CisKKy8qIEZsYWdzIGZpZWxkIG9mIHRoZSBLRVkgUlIgcmRhdGEuICovCisjZGVmaW5lCU5TX0tFWV9UWVBFTUFTSwkJMHhDMDAwCS8qIE1hc2sgZm9yICJ0eXBlIiBiaXRzICovCisjZGVmaW5lCU5TX0tFWV9UWVBFX0FVVEhfQ09ORgkweDAwMDAJLyogS2V5IHVzYWJsZSBmb3IgYm90aCAqLworI2RlZmluZQlOU19LRVlfVFlQRV9DT05GX09OTFkJMHg4MDAwCS8qIEtleSB1c2FibGUgZm9yIGNvbmZpZGVudGlhbGl0eSAqLworI2RlZmluZQlOU19LRVlfVFlQRV9BVVRIX09OTFkJMHg0MDAwCS8qIEtleSB1c2FibGUgZm9yIGF1dGhlbnRpY2F0aW9uICovCisjZGVmaW5lCU5TX0tFWV9UWVBFX05PX0tFWQkweEMwMDAJLyogTm8ga2V5IHVzYWJsZSBmb3IgZWl0aGVyOyBubyBrZXkgKi8KKy8qIFRoZSB0eXBlIGJpdHMgY2FuIGFsc28gYmUgaW50ZXJwcmV0ZWQgaW5kZXBlbmRlbnRseSwgYXMgc2luZ2xlIGJpdHM6ICovCisjZGVmaW5lCU5TX0tFWV9OT19BVVRICQkweDgwMDAJLyogS2V5IHVudXNhYmxlIGZvciBhdXRoZW50aWNhdGlvbiAqLworI2RlZmluZQlOU19LRVlfTk9fQ09ORgkJMHg0MDAwCS8qIEtleSB1bnVzYWJsZSBmb3IgY29uZmlkZW50aWFsaXR5ICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDIJMHgyMDAwCS8qIFNlY3VyaXR5IGlzICptYW5kYXRvcnkqIGlmIGJpdD0wICovCisjZGVmaW5lCU5TX0tFWV9FWFRFTkRFRF9GTEFHUwkweDEwMDAJLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVENAkweDA4MDAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDUJMHgwNDAwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfTkFNRV9UWVBFCTB4MDMwMAkvKiB0aGVzZSBiaXRzIGRldGVybWluZSB0aGUgdHlwZSAqLworI2RlZmluZQlOU19LRVlfTkFNRV9VU0VSCTB4MDAwMAkvKiBrZXkgaXMgYXNzb2MuIHdpdGggdXNlciAqLworI2RlZmluZQlOU19LRVlfTkFNRV9FTlRJVFkJMHgwMjAwCS8qIGtleSBpcyBhc3NvYy4gd2l0aCBlbnRpdHkgZWcgaG9zdCAqLworI2RlZmluZQlOU19LRVlfTkFNRV9aT05FCTB4MDEwMAkvKiBrZXkgaXMgem9uZSBrZXkgKi8KKyNkZWZpbmUJTlNfS0VZX05BTUVfUkVTRVJWRUQJMHgwMzAwCS8qIHJlc2VydmVkIG1lYW5pbmcgKi8KKyNkZWZpbmUJTlNfS0VZX1JFU0VSVkVEOAkweDAwODAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDkJMHgwMDQwICAvKiByZXNlcnZlZCAtIG11c3QgYmUgemVybyAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRUQxMAkweDAwMjAgIC8qIHJlc2VydmVkIC0gbXVzdCBiZSB6ZXJvICovCisjZGVmaW5lCU5TX0tFWV9SRVNFUlZFRDExCTB4MDAxMCAgLyogcmVzZXJ2ZWQgLSBtdXN0IGJlIHplcm8gKi8KKyNkZWZpbmUJTlNfS0VZX1NJR05BVE9SWU1BU0sJMHgwMDBGCS8qIGtleSBjYW4gc2lnbiBSUidzIG9mIHNhbWUgbmFtZSAqLworI2RlZmluZQlOU19LRVlfUkVTRVJWRURfQklUTUFTSyAoIE5TX0tFWV9SRVNFUlZFRDIgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ0IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVENSB8IFwKKwkJCQkgIE5TX0tFWV9SRVNFUlZFRDggfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQ5IHwgXAorCQkJCSAgTlNfS0VZX1JFU0VSVkVEMTAgfCBcCisJCQkJICBOU19LRVlfUkVTRVJWRUQxMSApCisjZGVmaW5lIE5TX0tFWV9SRVNFUlZFRF9CSVRNQVNLMiAweEZGRkYgLyogbm8gYml0cyBkZWZpbmVkIGhlcmUgKi8KKworLyogVGhlIEFsZ29yaXRobSBmaWVsZCBvZiB0aGUgS0VZIGFuZCBTSUcgUlIncyBpcyBhbiBpbnRlZ2VyLCB7MS4uMjU0fSAqLworI2RlZmluZQlOU19BTEdfTUQ1UlNBCQkxCS8qIE1ENSB3aXRoIFJTQSAqLworI2RlZmluZQlOU19BTEdfREggICAgICAgICAgICAgICAyCS8qIERpZmZpZSBIZWxsbWFuIEtFWSAqLworI2RlZmluZQlOU19BTEdfRFNBICAgICAgICAgICAgICAzCS8qIERTQSBLRVkgKi8KKyNkZWZpbmUJTlNfQUxHX0RTUyAgICAgICAgICAgICAgTlNfQUxHX0RTQQorI2RlZmluZQlOU19BTEdfRVhQSVJFX09OTFkJMjUzCS8qIE5vIGFsZywgbm8gc2VjdXJpdHkgKi8KKyNkZWZpbmUJTlNfQUxHX1BSSVZBVEVfT0lECTI1NAkvKiBLZXkgYmVnaW5zIHdpdGggT0lEIGdpdmluZyBhbGcgKi8KKworLyogUHJvdG9jb2wgdmFsdWVzICAqLworLyogdmFsdWUgMCBpcyByZXNlcnZlZCAqLworI2RlZmluZSBOU19LRVlfUFJPVF9UTFMgICAgICAgICAxCisjZGVmaW5lIE5TX0tFWV9QUk9UX0VNQUlMICAgICAgIDIKKyNkZWZpbmUgTlNfS0VZX1BST1RfRE5TU0VDICAgICAgMworI2RlZmluZSBOU19LRVlfUFJPVF9JUFNFQyAgICAgICA0CisjZGVmaW5lIE5TX0tFWV9QUk9UX0FOWQkJMjU1CisKKy8qIFNpZ25hdHVyZXMgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01JTl9CSVRTCSA1MTIJLyogU2l6ZSBvZiBhIG1vZCBvciBleHAgaW4gYml0cyAqLworI2RlZmluZQlOU19NRDVSU0FfTUFYX0JJVFMJNDA5NgorCS8qIFRvdGFsIG9mIGJpbmFyeSBtb2QgYW5kIGV4cCAqLworI2RlZmluZQlOU19NRDVSU0FfTUFYX0JZVEVTCSgoTlNfTUQ1UlNBX01BWF9CSVRTKzcvOCkqMiszKQorCS8qIE1heCBsZW5ndGggb2YgdGV4dCBzaWcgYmxvY2sgKi8KKyNkZWZpbmUJTlNfTUQ1UlNBX01BWF9CQVNFNjQJKCgoTlNfTUQ1UlNBX01BWF9CWVRFUysyKS8zKSo0KQorI2RlZmluZSBOU19NRDVSU0FfTUlOX1NJWkUJKChOU19NRDVSU0FfTUlOX0JJVFMrNykvOCkKKyNkZWZpbmUgTlNfTUQ1UlNBX01BWF9TSVpFCSgoTlNfTUQ1UlNBX01BWF9CSVRTKzcpLzgpCisKKyNkZWZpbmUgTlNfRFNBX1NJR19TSVpFICAgICAgICAgNDEKKyNkZWZpbmUgTlNfRFNBX01JTl9TSVpFICAgICAgICAgMjEzCisjZGVmaW5lIE5TX0RTQV9NQVhfQllURVMgICAgICAgIDQwNQorCisvKiBPZmZzZXRzIGludG8gU0lHIHJlY29yZCByZGF0YSB0byBmaW5kIHZhcmlvdXMgdmFsdWVzICovCisjZGVmaW5lCU5TX1NJR19UWVBFCTAJLyogVHlwZSBmbGFncyAqLworI2RlZmluZQlOU19TSUdfQUxHCTIJLyogQWxnb3JpdGhtICovCisjZGVmaW5lCU5TX1NJR19MQUJFTFMJMwkvKiBIb3cgbWFueSBsYWJlbHMgaW4gbmFtZSAqLworI2RlZmluZQlOU19TSUdfT1RUTAk0CS8qIE9yaWdpbmFsIFRUTCAqLworI2RlZmluZQlOU19TSUdfRVhQSVIJOAkvKiBFeHBpcmF0aW9uIHRpbWUgKi8KKyNkZWZpbmUJTlNfU0lHX1NJR05FRAkxMgkvKiBTaWduYXR1cmUgdGltZSAqLworI2RlZmluZQlOU19TSUdfRk9PVAkxNgkvKiBLZXkgZm9vdHByaW50ICovCisjZGVmaW5lCU5TX1NJR19TSUdORVIJMTgJLyogRG9tYWluIG5hbWUgb2Ygd2hvIHNpZ25lZCBpdCAqLworCisvKiBIb3cgUlIgdHlwZXMgYXJlIHJlcHJlc2VudGVkIGFzIGJpdC1mbGFncyBpbiBOWFQgcmVjb3JkcyAqLworI2RlZmluZQlOU19OWFRfQklUUyA4CisjZGVmaW5lCU5TX05YVF9CSVRfU0VUKCAgbixwKSAocFsobikvTlNfTlhUX0JJVFNdIHw9ICAoMHg4MD4+KChuKSVOU19OWFRfQklUUykpKQorI2RlZmluZQlOU19OWFRfQklUX0NMRUFSKG4scCkgKHBbKG4pL05TX05YVF9CSVRTXSAmPSB+KDB4ODA+PigobiklTlNfTlhUX0JJVFMpKSkKKyNkZWZpbmUJTlNfTlhUX0JJVF9JU1NFVChuLHApIChwWyhuKS9OU19OWFRfQklUU10gJiAgICgweDgwPj4oKG4pJU5TX05YVF9CSVRTKSkpCisjZGVmaW5lIE5TX05YVF9NQVggMTI3CisKKy8qCisgKiBFRE5TMCBleHRlbmRlZCBmbGFncywgaG9zdCBvcmRlci4KKyAqLworI2RlZmluZSBOU19PUFRfRE5TU0VDX09LCTB4ODAwMFUKKworLyoKKyAqIElubGluZSB2ZXJzaW9ucyBvZiBnZXQvcHV0IHNob3J0L2xvbmcuICBQb2ludGVyIGlzIGFkdmFuY2VkLgorICovCisjZGVmaW5lIE5TX0dFVDE2KHMsIGNwKSBkbyB7IFwKKwljb25zdCB1X2NoYXIgKnRfY3AgPSAoY29uc3QgdV9jaGFyICopKGNwKTsgXAorCShzKSA9ICgodWludDE2X3QpdF9jcFswXSA8PCA4KSBcCisJICAgIHwgKCh1aW50MTZfdCl0X2NwWzFdKSBcCisJICAgIDsgXAorCShjcCkgKz0gTlNfSU5UMTZTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTlNfR0VUMzIobCwgY3ApIGRvIHsgXAorCWNvbnN0IHVfY2hhciAqdF9jcCA9IChjb25zdCB1X2NoYXIgKikoY3ApOyBcCisJKGwpID0gKCh1aW50MzJfdCl0X2NwWzBdIDw8IDI0KSBcCisJICAgIHwgKCh1aW50MzJfdCl0X2NwWzFdIDw8IDE2KSBcCisJICAgIHwgKCh1aW50MzJfdCl0X2NwWzJdIDw8IDgpIFwKKwkgICAgfCAoKHVpbnQzMl90KXRfY3BbM10pIFwKKwkgICAgOyBcCisJKGNwKSArPSBOU19JTlQzMlNaOyBcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBOU19QVVQxNihzLCBjcCkgZG8geyBcCisJdWludDMyX3QgdF9zID0gKHVpbnQzMl90KShzKTsgXAorCXVfY2hhciAqdF9jcCA9ICh1X2NoYXIgKikoY3ApOyBcCisJKnRfY3ArKyA9IHRfcyA+PiA4OyBcCisJKnRfY3AgICA9IHRfczsgXAorCShjcCkgKz0gTlNfSU5UMTZTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTlNfUFVUMzIobCwgY3ApIGRvIHsgXAorCXVpbnQzMl90IHRfbCA9ICh1aW50MzJfdCkobCk7IFwKKwl1X2NoYXIgKnRfY3AgPSAodV9jaGFyICopKGNwKTsgXAorCSp0X2NwKysgPSB0X2wgPj4gMjQ7IFwKKwkqdF9jcCsrID0gdF9sID4+IDE2OyBcCisJKnRfY3ArKyA9IHRfbCA+PiA4OyBcCisJKnRfY3AgICA9IHRfbDsgXAorCShjcCkgKz0gTlNfSU5UMzJTWjsgXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKy8qCisgKiBBTlNJIEMgaWRlbnRpZmllciBoaWRpbmcgZm9yIGJpbmQncyBsaWIvbmFtZXNlci4KKyAqLworI2RlZmluZQluc19tc2dfZ2V0ZmxhZwkJX19uc19tc2dfZ2V0ZmxhZworI2RlZmluZSBuc19nZXQxNgkJX19uc19nZXQxNgorI2RlZmluZSBuc19nZXQzMgkJX19uc19nZXQzMgorI2RlZmluZSBuc19wdXQxNgkJX19uc19wdXQxNgorI2RlZmluZSBuc19wdXQzMgkJX19uc19wdXQzMgorI2RlZmluZSBuc19pbml0cGFyc2UJCV9fbnNfaW5pdHBhcnNlCisjZGVmaW5lIG5zX3NraXBycgkJX19uc19za2lwcnIKKyNkZWZpbmUgbnNfcGFyc2VycgkJX19uc19wYXJzZXJyCisjZGVmaW5lCW5zX3NwcmludHJyCQlfX25zX3NwcmludHJyCisjZGVmaW5lCW5zX3NwcmludHJyZgkJX19uc19zcHJpbnRycmYKKyNkZWZpbmUJbnNfZm9ybWF0X3R0bAkJX19uc19mb3JtYXRfdHRsCisjZGVmaW5lCW5zX3BhcnNlX3R0bAkJX19uc19wYXJzZV90dGwKKyNkZWZpbmUgbnNfZGF0ZXRvc2VjcwkJX19uc19kYXRldG9zZWNzCisjZGVmaW5lCW5zX25hbWVfbnRvbAkJX19uc19uYW1lX250b2wKKyNkZWZpbmUJbnNfbmFtZV9udG9wCQlfX25zX25hbWVfbnRvcAorI2RlZmluZQluc19uYW1lX3B0b24JCV9fbnNfbmFtZV9wdG9uCisjZGVmaW5lCW5zX25hbWVfdW5wYWNrCQlfX25zX25hbWVfdW5wYWNrCisjZGVmaW5lCW5zX25hbWVfcGFjawkJX19uc19uYW1lX3BhY2sKKyNkZWZpbmUJbnNfbmFtZV9jb21wcmVzcwlfX25zX25hbWVfY29tcHJlc3MKKyNkZWZpbmUJbnNfbmFtZV91bmNvbXByZXNzCV9fbnNfbmFtZV91bmNvbXByZXNzCisjZGVmaW5lCW5zX25hbWVfc2tpcAkJX19uc19uYW1lX3NraXAKKyNkZWZpbmUJbnNfbmFtZV9yb2xsYmFjawlfX25zX25hbWVfcm9sbGJhY2sKKyNkZWZpbmUJbnNfc2lnbgkJCV9fbnNfc2lnbgorI2RlZmluZQluc19zaWduMgkJX19uc19zaWduMgorI2RlZmluZQluc19zaWduX3RjcAkJX19uc19zaWduX3RjcAorI2RlZmluZQluc19zaWduX3RjcDIJCV9fbnNfc2lnbl90Y3AyCisjZGVmaW5lCW5zX3NpZ25fdGNwX2luaXQJX19uc19zaWduX3RjcF9pbml0CisjZGVmaW5lIG5zX2ZpbmRfdHNpZwkJX19uc19maW5kX3RzaWcKKyNkZWZpbmUJbnNfdmVyaWZ5CQlfX25zX3ZlcmlmeQorI2RlZmluZQluc192ZXJpZnlfdGNwCQlfX25zX3ZlcmlmeV90Y3AKKyNkZWZpbmUJbnNfdmVyaWZ5X3RjcF9pbml0CV9fbnNfdmVyaWZ5X3RjcF9pbml0CisjZGVmaW5lCW5zX3NhbWVkb21haW4JCV9fbnNfc2FtZWRvbWFpbgorI2RlZmluZQluc19zdWJkb21haW4JCV9fbnNfc3ViZG9tYWluCisjZGVmaW5lCW5zX21ha2VjYW5vbgkJX19uc19tYWtlY2Fub24KKyNkZWZpbmUJbnNfc2FtZW5hbWUJCV9fbnNfc2FtZW5hbWUKKworX19CRUdJTl9ERUNMUworaW50CQluc19tc2dfZ2V0ZmxhZyhuc19tc2csIGludCk7Cit1aW50MTZfdAluc19nZXQxNihjb25zdCB1X2NoYXIgKik7Cit1aW50MzJfdAluc19nZXQzMihjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19wdXQxNih1aW50MTZfdCwgdV9jaGFyICopOwordm9pZAkJbnNfcHV0MzIodWludDMyX3QsIHVfY2hhciAqKTsKK2ludAkJbnNfaW5pdHBhcnNlKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX21zZyAqKTsKK2ludAkJbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgbnNfc2VjdCwgaW50KTsKK2ludAkJbnNfcGFyc2Vycihuc19tc2cgKiwgbnNfc2VjdCwgaW50LCBuc19yciAqKTsKK2ludAkJbnNfc3ByaW50cnIoY29uc3QgbnNfbXNnICosIGNvbnN0IG5zX3JyICosCisJCQkJIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3NwcmludHJyZihjb25zdCB1X2NoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosCisJCQkJICBuc19jbGFzcywgbnNfdHlwZSwgdV9sb25nLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgIHNpemVfdCwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX2Zvcm1hdF90dGwodV9sb25nLCBjaGFyICosIHNpemVfdCk7CitpbnQJCW5zX3BhcnNlX3R0bChjb25zdCBjaGFyICosIHVfbG9uZyAqKTsKK3VpbnQzMl90CW5zX2RhdGV0b3NlY3MoY29uc3QgY2hhciAqY3AsIGludCAqZXJycCk7CitpbnQJCW5zX25hbWVfbnRvbChjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfbnRvcChjb25zdCB1X2NoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50CQluc19uYW1lX3B0b24oY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV91bnBhY2soY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgICBjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIHNpemVfdCk7CitpbnQJCW5zX25hbWVfcGFjayhjb25zdCB1X2NoYXIgKiwgdV9jaGFyICosIGludCwKKwkJCQkgIGNvbnN0IHVfY2hhciAqKiwgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfbmFtZV91bmNvbXByZXNzKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkJY29uc3QgdV9jaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJbnNfbmFtZV9jb21wcmVzcyhjb25zdCBjaGFyICosIHVfY2hhciAqLCBzaXplX3QsCisJCQkJICAgICAgY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKiopOworaW50CQluc19uYW1lX3NraXAoY29uc3QgdV9jaGFyICoqLCBjb25zdCB1X2NoYXIgKik7Cit2b2lkCQluc19uYW1lX3JvbGxiYWNrKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiosCisJCQkJICAgICAgY29uc3QgdV9jaGFyICoqKTsKK2ludAkJbnNfc2lnbih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LCB2b2lkICosCisJCQkgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwgdGltZV90KTsKK2ludAkJbnNfc2lnbjIodV9jaGFyICosIGludCAqLCBpbnQsIGludCwgdm9pZCAqLAorCQkJICAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCAqLCB0aW1lX3QsCisJCQkgICAgICB1X2NoYXIgKiosIHVfY2hhciAqKik7CitpbnQJCW5zX3NpZ25fdGNwKHVfY2hhciAqLCBpbnQgKiwgaW50LCBpbnQsCisJCQkJIG5zX3RjcF90c2lnX3N0YXRlICosIGludCk7CitpbnQJCW5zX3NpZ25fdGNwMih1X2NoYXIgKiwgaW50ICosIGludCwgaW50LAorCQkJCSAgbnNfdGNwX3RzaWdfc3RhdGUgKiwgaW50LAorCQkJCSAgdV9jaGFyICoqLCB1X2NoYXIgKiopOworaW50CQluc19zaWduX3RjcF9pbml0KHZvaWQgKiwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQkJbnNfdGNwX3RzaWdfc3RhdGUgKik7Cit1X2NoYXIJCSpuc19maW5kX3RzaWcodV9jaGFyICosIHVfY2hhciAqKTsKK2ludAkJbnNfdmVyaWZ5KHVfY2hhciAqLCBpbnQgKiwgdm9pZCAqLAorCQkJICAgICAgIGNvbnN0IHVfY2hhciAqLCBpbnQsIHVfY2hhciAqLCBpbnQgKiwKKwkJCSAgICAgICB0aW1lX3QgKiwgaW50KTsKK2ludAkJbnNfdmVyaWZ5X3RjcCh1X2NoYXIgKiwgaW50ICosIG5zX3RjcF90c2lnX3N0YXRlICosIGludCk7CitpbnQJCW5zX3ZlcmlmeV90Y3BfaW5pdCh2b2lkICosIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJCW5zX3RjcF90c2lnX3N0YXRlICopOworaW50CQluc19zYW1lZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludAkJbnNfc3ViZG9tYWluKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2ludAkJbnNfbWFrZWNhbm9uKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50CQluc19zYW1lbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitfX0VORF9ERUNMUworCisjaWZkZWYgQklORF80X0NPTVBBVAorI2luY2x1ZGUgImFycGFfbmFtZXNlcl9jb21wYXQuaCIKKyNlbmRpZgorCisjZW5kaWYgLyogIV9BUlBBX05BTUVTRVJfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYXJwYV9uYW1lc2VyX2NvbXBhdC5oIGIvbGliYy9hcnBhX25hbWVzZXJfY29tcGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzliZGZkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYXJwYV9uYW1lc2VyX2NvbXBhdC5oCkBAIC0wLDAgKzEsMjM2IEBACisvKgkkTmV0QlNEOiBuYW1lc2VyX2NvbXBhdC5oLHYgMS4xLjEuMiAyMDA0LzExLzA3IDAxOjI4OjI3IGNocmlzdG9zIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk4MywgMTk4OQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiAgICAgIGZyb20gbmFtZXNlci5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICoJSWQ6IG5hbWVzZXJfY29tcGF0LmgsdiAxLjEuMi4zLjQuMiAyMDA0LzA3LzAxIDA0OjQzOjQxIG1hcmthIEV4cAorICovCisKKyNpZm5kZWYgX0FSUEFfTkFNRVNFUl9DT01QQVRfCisjZGVmaW5lCV9BUlBBX05BTUVTRVJfQ09NUEFUXworCisjZGVmaW5lCV9fQklORAkJMTk5NTA2MjEJLyogKERFQUQpIGludGVyZmFjZSB2ZXJzaW9uIHN0YW1wLiAqLworCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKKyNpZm5kZWYgQllURV9PUkRFUgorI2lmIChCU0QgPj0gMTk5MTAzKQorIyBpbmNsdWRlIDxtYWNoaW5lL2VuZGlhbi5oPgorI2Vsc2UKKyNpZmRlZiBfX2xpbnV4CisjIGluY2x1ZGUgPGVuZGlhbi5oPgorI2Vsc2UKKyNkZWZpbmUJTElUVExFX0VORElBTgkxMjM0CS8qIGxlYXN0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKHZheCwgcGMpICovCisjZGVmaW5lCUJJR19FTkRJQU4JNDMyMQkvKiBtb3N0LXNpZ25pZmljYW50IGJ5dGUgZmlyc3QgKElCTSwgbmV0KSAqLworI2RlZmluZQlQRFBfRU5ESUFOCTM0MTIJLyogTFNCIGZpcnN0IGluIHdvcmQsIE1TVyBmaXJzdCBpbiBsb25nIChwZHApKi8KKworI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKG5zMzIwMDApIHx8IGRlZmluZWQoc3VuMzg2KSB8fCBkZWZpbmVkKGkzODYpIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFTCkgfHwgZGVmaW5lZChfTUlQU0VMKSB8fCBkZWZpbmVkKEJJVF9aRVJPX09OX1JJR0hUKSB8fCBcCisgICAgZGVmaW5lZChfX2FscGhhX18pIHx8IGRlZmluZWQoX19hbHBoYSkgfHwgXAorICAgIChkZWZpbmVkKF9fTHlueF9fKSAmJiBkZWZpbmVkKF9feDg2X18pKQorI2RlZmluZSBCWVRFX09SREVSCUxJVFRMRV9FTkRJQU4KKyNlbmRpZgorCisjaWYgZGVmaW5lZChzZWwpIHx8IGRlZmluZWQocHlyKSB8fCBkZWZpbmVkKG1jNjgwMDApIHx8IGRlZmluZWQoc3BhcmMpIHx8IFwKKyAgICBkZWZpbmVkKGlzNjhrKSB8fCBkZWZpbmVkKHRhaG9lKSB8fCBkZWZpbmVkKGlibTAzMikgfHwgZGVmaW5lZChpYm0zNzApIHx8IFwKKyAgICBkZWZpbmVkKE1JUFNFQikgfHwgZGVmaW5lZChfTUlQU0VCKSB8fCBkZWZpbmVkKF9JQk1SMikgfHwgZGVmaW5lZChER1VYKSB8fFwKKyAgICBkZWZpbmVkKGFwb2xsbykgfHwgZGVmaW5lZChfX2NvbnZleF9fKSB8fCBkZWZpbmVkKF9DUkFZKSB8fCBcCisgICAgZGVmaW5lZChfX2hwcGEpIHx8IGRlZmluZWQoX19ocDkwMDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHA5MDAwczMwMCkgfHwgZGVmaW5lZChfX2hwOTAwMHM3MDApIHx8IFwKKyAgICBkZWZpbmVkKF9faHAzMDAwczkwMCkgfHwgZGVmaW5lZChfX2hwdXgpIHx8IGRlZmluZWQoTVBFKSB8fCBcCisgICAgZGVmaW5lZCAoQklUX1pFUk9fT05fTEVGVCkgfHwgZGVmaW5lZChtNjhrKSB8fCBkZWZpbmVkKF9fc3BhcmMpIHx8ICBcCisgICAgKGRlZmluZWQoX19MeW54X18pICYmIFwKKyAgICAgKGRlZmluZWQoX182OGtfXykgfHwgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pKSkKKyNkZWZpbmUgQllURV9PUkRFUglCSUdfRU5ESUFOCisjZW5kaWYKKyNlbmRpZiAvKiBfX2xpbnV4ICovCisjZW5kaWYgLyogQlNEICovCisjZW5kaWYgLyogQllURV9PUkRFUiAqLworCisjaWYgIWRlZmluZWQoQllURV9PUkRFUikgfHwgXAorICAgIChCWVRFX09SREVSICE9IEJJR19FTkRJQU4gJiYgQllURV9PUkRFUiAhPSBMSVRUTEVfRU5ESUFOICYmIFwKKyAgICBCWVRFX09SREVSICE9IFBEUF9FTkRJQU4pCisJLyogeW91IG11c3QgZGV0ZXJtaW5lIHdoYXQgdGhlIGNvcnJlY3QgYml0IG9yZGVyIGlzIGZvcgorCSAqIHlvdXIgY29tcGlsZXIgLSB0aGUgbmV4dCBsaW5lIGlzIGFuIGludGVudGlvbmFsIGVycm9yCisJICogd2hpY2ggd2lsbCBmb3JjZSB5b3VyIGNvbXBpbGVzIHRvIGJvbWIgdW50aWwgeW91IGZpeAorCSAqIHRoZSBhYm92ZSBtYWNyb3MuCisJICovCisgICNlcnJvciAiVW5kZWZpbmVkIG9yIGludmFsaWQgQllURV9PUkRFUiI7CisjZW5kaWYKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgcXVlcnkgaGVhZGVyLiAgVGhlIG9yZGVyIG9mIHRoZSBmaWVsZHMgaXMgbWFjaGluZS0gYW5kCisgKiBjb21waWxlci1kZXBlbmRlbnQsIGRlcGVuZGluZyBvbiB0aGUgYnl0ZS9iaXQgb3JkZXIgYW5kIHRoZSBsYXlvdXQKKyAqIG9mIGJpdCBmaWVsZHMuICBXZSB1c2UgYml0IGZpZWxkcyBvbmx5IGluIGludCB2YXJpYWJsZXMsIGFzIHRoaXMKKyAqIGlzIGFsbCBBTlNJIHJlcXVpcmVzLiAgVGhpcyByZXF1aXJlcyBhIHNvbWV3aGF0IGNvbmZ1c2luZyByZWFycmFuZ2VtZW50LgorICovCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZAlpZCA6MTY7CQkvKiBxdWVyeSBpZGVudGlmaWNhdGlvbiBudW1iZXIgKi8KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcXI6IDE7CQkvKiByZXNwb25zZSBmbGFnICovCisJdW5zaWduZWQJb3Bjb2RlOiA0OwkvKiBwdXJwb3NlIG9mIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYTogMTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCXRjOiAxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlyZDogMTsJCS8qIHJlY3Vyc2lvbiBkZXNpcmVkICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyYTogMTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAljZDogMTsJCS8qIGNoZWNraW5nIGRpc2FibGVkIGJ5IHJlc29sdmVyICovCisJdW5zaWduZWQJcmNvZGUgOjQ7CS8qIHJlc3BvbnNlIGNvZGUgKi8KKyNlbmRpZgorI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTiB8fCBCWVRFX09SREVSID09IFBEUF9FTkRJQU4KKwkJCS8qIGZpZWxkcyBpbiB0aGlyZCBieXRlICovCisJdW5zaWduZWQJcmQgOjE7CQkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworCXVuc2lnbmVkCXRjIDoxOwkJLyogdHJ1bmNhdGVkIG1lc3NhZ2UgKi8KKwl1bnNpZ25lZAlhYSA6MTsJCS8qIGF1dGhvcml0aXZlIGFuc3dlciAqLworCXVuc2lnbmVkCW9wY29kZSA6NDsJLyogcHVycG9zZSBvZiBtZXNzYWdlICovCisJdW5zaWduZWQJcXIgOjE7CQkvKiByZXNwb25zZSBmbGFnICovCisJCQkvKiBmaWVsZHMgaW4gZm91cnRoIGJ5dGUgKi8KKwl1bnNpZ25lZAlyY29kZSA6NDsJLyogcmVzcG9uc2UgY29kZSAqLworCXVuc2lnbmVkCWNkOiAxOwkJLyogY2hlY2tpbmcgZGlzYWJsZWQgYnkgcmVzb2x2ZXIgKi8KKwl1bnNpZ25lZAlhZDogMTsJCS8qIGF1dGhlbnRpYyBkYXRhIGZyb20gbmFtZWQgKi8KKwl1bnNpZ25lZAl1bnVzZWQgOjE7CS8qIHVudXNlZCBiaXRzIChNQlogYXMgb2YgNC45LjNhMykgKi8KKwl1bnNpZ25lZAlyYSA6MTsJCS8qIHJlY3Vyc2lvbiBhdmFpbGFibGUgKi8KKyNlbmRpZgorCQkJLyogcmVtYWluaW5nIGJ5dGVzICovCisJdW5zaWduZWQJcWRjb3VudCA6MTY7CS8qIG51bWJlciBvZiBxdWVzdGlvbiBlbnRyaWVzICovCisJdW5zaWduZWQJYW5jb3VudCA6MTY7CS8qIG51bWJlciBvZiBhbnN3ZXIgZW50cmllcyAqLworCXVuc2lnbmVkCW5zY291bnQgOjE2OwkvKiBudW1iZXIgb2YgYXV0aG9yaXR5IGVudHJpZXMgKi8KKwl1bnNpZ25lZAlhcmNvdW50IDoxNjsJLyogbnVtYmVyIG9mIHJlc291cmNlIGVudHJpZXMgKi8KK30gSEVBREVSOworCisjZGVmaW5lIFBBQ0tFVFNaCU5TX1BBQ0tFVFNaCisjZGVmaW5lIE1BWEROQU1FCU5TX01BWEROQU1FCisjZGVmaW5lIE1BWENETkFNRQlOU19NQVhDRE5BTUUKKyNkZWZpbmUgTUFYTEFCRUwJTlNfTUFYTEFCRUwKKyNkZWZpbmUJSEZJWEVEU1oJTlNfSEZJWEVEU1oKKyNkZWZpbmUgUUZJWEVEU1oJTlNfUUZJWEVEU1oKKyNkZWZpbmUgUlJGSVhFRFNaCU5TX1JSRklYRURTWgorI2RlZmluZQlJTlQzMlNaCQlOU19JTlQzMlNaCisjZGVmaW5lCUlOVDE2U1oJCU5TX0lOVDE2U1oKKyNkZWZpbmUJSU5UOFNaCQlOU19JTlQ4U1oKKyNkZWZpbmUJSU5BRERSU1oJTlNfSU5BRERSU1oKKyNkZWZpbmUJSU42QUREUlNaCU5TX0lONkFERFJTWgorI2RlZmluZQlJTkRJUl9NQVNLCU5TX0NNUFJTRkxHUworI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJTlNfREVGQVVMVFBPUlQKKworI2RlZmluZSBTX1pPTkUJCW5zX3Nfem4KKyNkZWZpbmUgU19QUkVSRVEJbnNfc19wcgorI2RlZmluZSBTX1VQREFURQluc19zX3VkCisjZGVmaW5lIFNfQUREVAkJbnNfc19hcgorCisjZGVmaW5lIFFVRVJZCQluc19vX3F1ZXJ5CisjZGVmaW5lIElRVUVSWQkJbnNfb19pcXVlcnkKKyNkZWZpbmUgU1RBVFVTCQluc19vX3N0YXR1cworI2RlZmluZQlOU19OT1RJRllfT1AJbnNfb19ub3RpZnkKKyNkZWZpbmUJTlNfVVBEQVRFX09QCW5zX29fdXBkYXRlCisKKyNkZWZpbmUgTk9FUlJPUgkJbnNfcl9ub2Vycm9yCisjZGVmaW5lIEZPUk1FUlIJCW5zX3JfZm9ybWVycgorI2RlZmluZSBTRVJWRkFJTAluc19yX3NlcnZmYWlsCisjZGVmaW5lIE5YRE9NQUlOCW5zX3Jfbnhkb21haW4KKyNkZWZpbmUgTk9USU1QCQluc19yX25vdGltcGwKKyNkZWZpbmUgUkVGVVNFRAkJbnNfcl9yZWZ1c2VkCisjZGVmaW5lIFlYRE9NQUlOCW5zX3JfeXhkb21haW4KKyNkZWZpbmUgWVhSUlNFVAkJbnNfcl95eHJyc2V0CisjZGVmaW5lIE5YUlJTRVQJCW5zX3JfbnhycnNldAorI2RlZmluZSBOT1RBVVRICQluc19yX25vdGF1dGgKKyNkZWZpbmUgTk9UWk9ORQkJbnNfcl9ub3R6b25lCisvKiNkZWZpbmUgQkFEU0lHCQluc19yX2JhZHNpZyovCisvKiNkZWZpbmUgQkFES0VZCQluc19yX2JhZGtleSovCisvKiNkZWZpbmUgQkFEVElNRQkJbnNfcl9iYWR0aW1lKi8KKworCisjZGVmaW5lIERFTEVURQkJbnNfdW9wX2RlbGV0ZQorI2RlZmluZSBBREQJCW5zX3VvcF9hZGQKKworI2RlZmluZSBUX0EJCW5zX3RfYQorI2RlZmluZSBUX05TCQluc190X25zCisjZGVmaW5lIFRfTUQJCW5zX3RfbWQKKyNkZWZpbmUgVF9NRgkJbnNfdF9tZgorI2RlZmluZSBUX0NOQU1FCQluc190X2NuYW1lCisjZGVmaW5lIFRfU09BCQluc190X3NvYQorI2RlZmluZSBUX01CCQluc190X21iCisjZGVmaW5lIFRfTUcJCW5zX3RfbWcKKyNkZWZpbmUgVF9NUgkJbnNfdF9tcgorI2RlZmluZSBUX05VTEwJCW5zX3RfbnVsbAorI2RlZmluZSBUX1dLUwkJbnNfdF93a3MKKyNkZWZpbmUgVF9QVFIJCW5zX3RfcHRyCisjZGVmaW5lIFRfSElORk8JCW5zX3RfaGluZm8KKyNkZWZpbmUgVF9NSU5GTwkJbnNfdF9taW5mbworI2RlZmluZSBUX01YCQluc190X214CisjZGVmaW5lIFRfVFhUCQluc190X3R4dAorI2RlZmluZQlUX1JQCQluc190X3JwCisjZGVmaW5lIFRfQUZTREIJCW5zX3RfYWZzZGIKKyNkZWZpbmUgVF9YMjUJCW5zX3RfeDI1CisjZGVmaW5lIFRfSVNETgkJbnNfdF9pc2RuCisjZGVmaW5lIFRfUlQJCW5zX3RfcnQKKyNkZWZpbmUgVF9OU0FQCQluc190X25zYXAKKyNkZWZpbmUgVF9OU0FQX1BUUgluc190X25zYXBfcHRyCisjZGVmaW5lCVRfU0lHCQluc190X3NpZworI2RlZmluZQlUX0tFWQkJbnNfdF9rZXkKKyNkZWZpbmUJVF9QWAkJbnNfdF9weAorI2RlZmluZQlUX0dQT1MJCW5zX3RfZ3BvcworI2RlZmluZQlUX0FBQUEJCW5zX3RfYWFhYQorI2RlZmluZQlUX0xPQwkJbnNfdF9sb2MKKyNkZWZpbmUJVF9OWFQJCW5zX3Rfbnh0CisjZGVmaW5lCVRfRUlECQluc190X2VpZAorI2RlZmluZQlUX05JTUxPQwluc190X25pbWxvYworI2RlZmluZQlUX1NSVgkJbnNfdF9zcnYKKyNkZWZpbmUgVF9BVE1BCQluc190X2F0bWEKKyNkZWZpbmUgVF9OQVBUUgkJbnNfdF9uYXB0cgorI2RlZmluZSBUX0E2CQluc190X2E2CisjZGVmaW5lCVRfVFNJRwkJbnNfdF90c2lnCisjZGVmaW5lCVRfSVhGUgkJbnNfdF9peGZyCisjZGVmaW5lIFRfQVhGUgkJbnNfdF9heGZyCisjZGVmaW5lIFRfTUFJTEIJCW5zX3RfbWFpbGIKKyNkZWZpbmUgVF9NQUlMQQkJbnNfdF9tYWlsYQorI2RlZmluZSBUX0FOWQkJbnNfdF9hbnkKKworI2RlZmluZSBDX0lOCQluc19jX2luCisjZGVmaW5lIENfQ0hBT1MJCW5zX2NfY2hhb3MKKyNkZWZpbmUgQ19IUwkJbnNfY19ocworLyogQklORF9VUERBVEUgKi8KKyNkZWZpbmUgQ19OT05FCQluc19jX25vbmUKKyNkZWZpbmUgQ19BTlkJCW5zX2NfYW55CisKKyNkZWZpbmUJR0VUU0hPUlQJCU5TX0dFVDE2CisjZGVmaW5lCUdFVExPTkcJCQlOU19HRVQzMgorI2RlZmluZQlQVVRTSE9SVAkJTlNfUFVUMTYKKyNkZWZpbmUJUFVUTE9ORwkJCU5TX1BVVDMyCisKKyNlbmRpZiAvKiBfQVJQQV9OQU1FU0VSX0NPTVBBVF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19fZXJybm8uYyBiL2xpYmMvYmlvbmljL19fZXJybm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmM2ZTYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX19lcnJuby5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90bHMuaD4KKwordm9sYXRpbGUgaW50KiAgX19lcnJubyggdm9pZCApCit7CisgIHJldHVybiAgJigodm9sYXRpbGUgaW50KilfX2dldF90bHMoKSlbVExTX1NMT1RfRVJSTk9dOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvX19zZXRfZXJybm8uYyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzcyZDRmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL19fc2V0X2Vycm5vLmMKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKworCitpbnQgX19zZXRfZXJybm8oaW50IG4pCit7CisgICAgZXJybm8gPSBuOworICAgIHJldHVybiAtMTsKK30KKworLyoKKyAqIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gc3lzY2FsbCBzdHVicywKKyAqICh0YWlsLWNhbGxlZCBpbiB0aGUgY2FzZSBvZiAwLTQgYXJnIHZlcnNpb25zKQorICovCisKK2ludCBfX3NldF9zeXNjYWxsX2Vycm5vKGludCBuKQoreworICAgICAgICAvKiBzb21lIHN5c2NhbGxzLCBtbWFwKCkgZm9yIGV4YW1wbGUsIGhhdmUgdmFsaWQgcmV0dXJuCisgICAgICAgICoqIHZhbHVlcyB0aGF0IGFyZSAibmVnYXRpdmUiLiAgU2luY2UgZXJybm8gdmFsdWVzIGFyZSBub3QKKyAgICAgICAgKiogZ3JlYXRlciB0aGFuIDEzMSBvbiBMaW51eCwgd2Ugd2lsbCBqdXN0IGNvbnNpZGVyIAorICAgICAgICAqKiBhbnl0aGluZyBzaWduaWZpY2FudGx5IG91dCBvZiByYW5nZSBhcyBub3QtYW4tZXJyb3IKKyAgICAgICAgKi8KKyAgICBpZihuID4gLTI1NikgeworICAgICAgICByZXR1cm4gX19zZXRfZXJybm8oLW4pOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBuOworICAgIH0KK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL19yYW5kNDguYyBiL2xpYmMvYmlvbmljL19yYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNDIyNzgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvX3JhbmQ0OC5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfc2VlZFszXSA9IHsKKwlSQU5ENDhfU0VFRF8wLAorCVJBTkQ0OF9TRUVEXzEsCisJUkFORDQ4X1NFRURfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfbXVsdFszXSA9IHsKKwlSQU5ENDhfTVVMVF8wLAorCVJBTkQ0OF9NVUxUXzEsCisJUkFORDQ4X01VTFRfMgorfTsKK3Vuc2lnbmVkIHNob3J0IF9yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKKwordm9pZAorX2RvcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCXVuc2lnbmVkIGxvbmcgYWNjdTsKKwl1bnNpZ25lZCBzaG9ydCB0ZW1wWzJdOworCisJYWNjdSA9ICh1bnNpZ25lZCBsb25nKSBfcmFuZDQ4X211bHRbMF0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF0gKworCSAodW5zaWduZWQgbG9uZykgX3JhbmQ0OF9hZGQ7CisJdGVtcFswXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbG93ZXIgMTYgYml0cyAqLworCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OworCWFjY3UgKz0gKHVuc2lnbmVkIGxvbmcpIF9yYW5kNDhfbXVsdFswXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFsxXSArCisJICh1bnNpZ25lZCBsb25nKSBfcmFuZDQ4X211bHRbMV0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMF07CisJdGVtcFsxXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbWlkZGxlIDE2IGJpdHMgKi8KKwlhY2N1ID4+PSBzaXplb2YodW5zaWduZWQgc2hvcnQpICogODsKKwlhY2N1ICs9IF9yYW5kNDhfbXVsdFswXSAqIHhzZWVkWzJdICsgX3JhbmQ0OF9tdWx0WzFdICogeHNlZWRbMV0gKyBfcmFuZDQ4X211bHRbMl0gKiB4c2VlZFswXTsKKwl4c2VlZFswXSA9IHRlbXBbMF07CisJeHNlZWRbMV0gPSB0ZW1wWzFdOworCXhzZWVkWzJdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jIGIvbGliYy9iaW9uaWMvYXJjNHJhbmRvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3MDU4MGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9hcmM0cmFuZG9tLmMKQEAgLTAsMCArMSwzMDggQEAKKy8qICAgICAgJE9wZW5CU0Q6IGFyYzRyYW5kb20uYyx2IDEuMTkgMjAwOC8wNi8wNCAwMDo1MDoyMyBkam0gRXhwICQgICAgICAgICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsIERhdmlkIE1hemllcmVzIDxkbUB1dW4ub3JnPgorICogQ29weXJpZ2h0IChjKSAyMDA4LCBEYW1pZW4gTWlsbGVyIDxkam1Ab3BlbmJzZC5vcmc+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIEFyYzQgcmFuZG9tIG51bWJlciBnZW5lcmF0b3IgZm9yIE9wZW5CU0QuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzZWN0aW9uIDE3LjEgb2YgQXBwbGllZCBDcnlwdG9ncmFwaHksCisgKiBzZWNvbmQgZWRpdGlvbiwgd2hpY2ggZGVzY3JpYmVzIGEgc3RyZWFtIGNpcGhlciBhbGxlZ2VkbHkKKyAqIGNvbXBhdGlibGUgd2l0aCBSU0EgTGFicyAiUkM0IiBjaXBoZXIgKHRoZSBhY3R1YWwgZGVzY3JpcHRpb24gb2YKKyAqIHdoaWNoIGlzIGEgdHJhZGUgc2VjcmV0KS4gIFRoZSBzYW1lIGFsZ29yaXRobSBpcyB1c2VkIGFzIGEgc3RyZWFtCisgKiBjaXBoZXIgY2FsbGVkICJhcmNmb3VyIiBpbiBUYXR1IFlsb25lbidzIHNzaCBwYWNrYWdlLgorICoKKyAqIEhlcmUgdGhlIHN0cmVhbSBjaXBoZXIgaGFzIGJlZW4gbW9kaWZpZWQgYWx3YXlzIHRvIGluY2x1ZGUgdGhlIHRpbWUKKyAqIHdoZW4gaW5pdGlhbGl6aW5nIHRoZSBzdGF0ZS4gIFRoYXQgbWFrZXMgaXQgaW1wb3NzaWJsZSB0bworICogcmVnZW5lcmF0ZSB0aGUgc2FtZSByYW5kb20gc2VxdWVuY2UgdHdpY2UsIHNvIHRoaXMgY2FuJ3QgYmUgdXNlZAorICogZm9yIGVuY3J5cHRpb24sIGJ1dCB3aWxsIGdlbmVyYXRlIGdvb2QgcmFuZG9tIG51bWJlcnMuCisgKgorICogUkM0IGlzIGEgcmVnaXN0ZXJlZCB0cmFkZW1hcmsgb2YgUlNBIExhYm9yYXRvcmllcy4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorI2luY2x1ZGUgInRocmVhZF9wcml2YXRlLmgiCisKKy8qIEJJT05JQy1CRUdJTiAqLworLyogdGhpcyBsb2NrIHNob3VsZCBwcm90ZWN0IHRoZSBnbG9iYWwgdmFyaWFibGVzIGluIHRoaXMgZmlsZSAqLworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCAgX2FyYzRfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisjZGVmaW5lICBfQVJDNF9MT0NLKCkgICAgICBwdGhyZWFkX211dGV4X2xvY2soJl9hcmM0X2xvY2spCisjZGVmaW5lICBfQVJDNF9VTkxPQ0soKSAgICBwdGhyZWFkX211dGV4X3VubG9jaygmX2FyYzRfbG9jaykKKy8qIEJJT05JQy1FTkQgKi8KKworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIGlubGluZSBfX2lubGluZQorI2Vsc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiAhX19HTlVDX18gKi8KKyNkZWZpbmUgaW5saW5lCisjZW5kaWYgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICFfX0dOVUNfXyAqLworCitzdHJ1Y3QgYXJjNF9zdHJlYW0geworICAgICAgICB1X2ludDhfdCBpOworICAgICAgICB1X2ludDhfdCBqOworICAgICAgICB1X2ludDhfdCBzWzI1Nl07Cit9OworCitzdGF0aWMgaW50IHJzX2luaXRpYWxpemVkOworc3RhdGljIHN0cnVjdCBhcmM0X3N0cmVhbSByczsKK3N0YXRpYyBwaWRfdCBhcmM0X3N0aXJfcGlkOworc3RhdGljIGludCBhcmM0X2NvdW50OworCitzdGF0aWMgaW5saW5lIHVfaW50OF90IGFyYzRfZ2V0Ynl0ZSh2b2lkKTsKKworc3RhdGljIGlubGluZSB2b2lkCithcmM0X2luaXQodm9pZCkKK3sKKyAgICAgICAgaW50ICAgICBuOworCisgICAgICAgIGZvciAobiA9IDA7IG4gPCAyNTY7IG4rKykKKyAgICAgICAgICAgICAgICBycy5zW25dID0gbjsKKyAgICAgICAgcnMuaSA9IDA7CisgICAgICAgIHJzLmogPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK2FyYzRfYWRkcmFuZG9tKHVfY2hhciAqZGF0LCBpbnQgZGF0bGVuKQoreworICAgICAgICBpbnQgICAgIG47CisgICAgICAgIHVfaW50OF90IHNpOworCisgICAgICAgIHJzLmktLTsKKyAgICAgICAgZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKSB7CisgICAgICAgICAgICAgICAgcnMuaSA9IChycy5pICsgMSk7CisgICAgICAgICAgICAgICAgc2kgPSBycy5zW3JzLmldOworICAgICAgICAgICAgICAgIHJzLmogPSAocnMuaiArIHNpICsgZGF0W24gJSBkYXRsZW5dKTsKKyAgICAgICAgICAgICAgICBycy5zW3JzLmldID0gcnMuc1tycy5qXTsKKyAgICAgICAgICAgICAgICBycy5zW3JzLmpdID0gc2k7CisgICAgICAgIH0KKyAgICAgICAgcnMuaiA9IHJzLmk7Cit9CisKK3N0YXRpYyB2b2lkCithcmM0X3N0aXIodm9pZCkKK3sKKyNpZiAxICAvKiBCSU9OSUMtQkVHSU4gKi8KKwlpbnQgICAgIGksIGZkOworCXVuaW9uIHsKKwkJc3RydWN0IHRpbWV2YWwgdHY7CisJCXVfaW50IHJuZFsxMjggLyBzaXplb2YodV9pbnQpXTsKKwl9ICAgICAgIHJkYXQ7CisJaW50CW47CisKKyAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkgeworICAgICAgICAgICAgICAgIGFyYzRfaW5pdCgpOworICAgICAgICAgICAgICAgIHJzX2luaXRpYWxpemVkID0gMTsKKyAgICAgICAgfQorCisJZmQgPSBvcGVuKCIvZGV2L3VyYW5kb20iLCBPX1JET05MWSk7CisJaWYgKGZkICE9IC0xKSB7CisJCXJlYWQoZmQsIHJkYXQucm5kLCBzaXplb2YocmRhdC5ybmQpKTsKKwkJY2xvc2UoZmQpOworCX0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisJICAgIC8qIGZkIDwgMCA/ICBBaCwgd2hhdCB0aGUgaGVjay4gV2UnbGwganVzdCB0YWtlCisJICAgICAqIHdoYXRldmVyIHdhcyBvbiB0aGUgc3RhY2suIGp1c3QgYWRkIGEgbGl0dGxlIG1vcmUKKyAgICAgICAgICAgICAqIHRpbWUtYmFzZWQgcmFuZG9tbmVzcyB0aG91Z2gKKyAgICAgICAgICAgICAqLworICAgICAgICAgICAgZ2V0dGltZW9mZGF5KCZyZGF0LnR2LCBOVUxMKTsKKyAgICAgICAgfQorCisgICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKKwlhcmM0X2FkZHJhbmRvbSgodm9pZCAqKSAmcmRhdCwgc2l6ZW9mKHJkYXQpKTsKKyNlbHNlICAvKiBCSU9OSUMtRU5EICovCisgICAgICAgIGludCAgICAgaSwgbWliWzJdOworICAgICAgICBzaXplX3QgICAgICAgIGxlbjsKKyAgICAgICAgdV9jaGFyIHJuZFsxMjhdOworCisgICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQpIHsKKyAgICAgICAgICAgICAgICBhcmM0X2luaXQoKTsKKyAgICAgICAgICAgICAgICByc19pbml0aWFsaXplZCA9IDE7CisgICAgICAgIH0KKworICAgICAgICBtaWJbMF0gPSBDVExfS0VSTjsKKyAgICAgICAgbWliWzFdID0gS0VSTl9BUk5EOworCisgICAgICAgIGxlbiA9IHNpemVvZihybmQpOworICAgICAgICBzeXNjdGwobWliLCAyLCBybmQsICZsZW4sIE5VTEwsIDApOworCisgICAgICAgIGFyYzRfc3Rpcl9waWQgPSBnZXRwaWQoKTsKKyAgICAgICAgYXJjNF9hZGRyYW5kb20ocm5kLCBzaXplb2Yocm5kKSk7CisjZW5kaWYKKyAgICAgICAgLyoKKyAgICAgICAgICogRGlzY2FyZCBlYXJseSBrZXlzdHJlYW0sIGFzIHBlciByZWNvbW1lbmRhdGlvbnMgaW46CisgICAgICAgICAqIGh0dHA6Ly93d3cud2lzZG9tLndlaXptYW5uLmFjLmlsL35pdHNpay9SQzQvUGFwZXJzL1JjNF9rc2EucHMKKyAgICAgICAgICovCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykKKyAgICAgICAgICAgICAgICAodm9pZClhcmM0X2dldGJ5dGUoKTsKKyAgICAgICAgYXJjNF9jb3VudCA9IDE2MDAwMDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdV9pbnQ4X3QKK2FyYzRfZ2V0Ynl0ZSh2b2lkKQoreworICAgICAgICB1X2ludDhfdCBzaSwgc2o7CisKKyAgICAgICAgcnMuaSA9IChycy5pICsgMSk7CisgICAgICAgIHNpID0gcnMuc1tycy5pXTsKKyAgICAgICAgcnMuaiA9IChycy5qICsgc2kpOworICAgICAgICBzaiA9IHJzLnNbcnMual07CisgICAgICAgIHJzLnNbcnMuaV0gPSBzajsKKyAgICAgICAgcnMuc1tycy5qXSA9IHNpOworICAgICAgICByZXR1cm4gKHJzLnNbKHNpICsgc2opICYgMHhmZl0pOworfQorCit1X2ludDhfdAorX19hcmM0X2dldGJ5dGUodm9pZCkKK3sKKyAgICAgICAgdV9pbnQ4X3QgdmFsOworCisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgaWYgKC0tYXJjNF9jb3VudCA9PSAwIHx8ICFyc19pbml0aWFsaXplZCkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgdmFsID0gYXJjNF9nZXRieXRlKCk7CisgICAgICAgIF9BUkM0X1VOTE9DSygpOworICAgICAgICByZXR1cm4gdmFsOworfQorCitzdGF0aWMgaW5saW5lIHVfaW50MzJfdAorYXJjNF9nZXR3b3JkKHZvaWQpCit7CisgICAgICAgIHVfaW50MzJfdCB2YWw7CisgICAgICAgIHZhbCA9IGFyYzRfZ2V0Ynl0ZSgpIDw8IDI0OworICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCkgPDwgMTY7CisgICAgICAgIHZhbCB8PSBhcmM0X2dldGJ5dGUoKSA8PCA4OworICAgICAgICB2YWwgfD0gYXJjNF9nZXRieXRlKCk7CisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3ZvaWQKK2FyYzRyYW5kb21fc3Rpcih2b2lkKQoreworICAgICAgICBfQVJDNF9MT0NLKCk7CisgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICBfQVJDNF9VTkxPQ0soKTsKK30KKwordm9pZAorYXJjNHJhbmRvbV9hZGRyYW5kb20odV9jaGFyICpkYXQsIGludCBkYXRsZW4pCit7CisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgaWYgKCFyc19pbml0aWFsaXplZCkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgYXJjNF9hZGRyYW5kb20oZGF0LCBkYXRsZW4pOworICAgICAgICBfQVJDNF9VTkxPQ0soKTsKK30KKwordV9pbnQzMl90CithcmM0cmFuZG9tKHZvaWQpCit7CisgICAgICAgIHVfaW50MzJfdCB2YWw7CisgICAgICAgIF9BUkM0X0xPQ0soKTsKKyAgICAgICAgYXJjNF9jb3VudCAtPSA0OworICAgICAgICBpZiAoYXJjNF9jb3VudCA8PSAwIHx8ICFyc19pbml0aWFsaXplZCB8fCBhcmM0X3N0aXJfcGlkICE9IGdldHBpZCgpKQorICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICB2YWwgPSBhcmM0X2dldHdvcmQoKTsKKyAgICAgICAgX0FSQzRfVU5MT0NLKCk7CisgICAgICAgIHJldHVybiB2YWw7Cit9CisKK3ZvaWQKK2FyYzRyYW5kb21fYnVmKHZvaWQgKl9idWYsIHNpemVfdCBuKQoreworICAgICAgICB1X2NoYXIgKmJ1ZiA9ICh1X2NoYXIgKilfYnVmOworICAgICAgICBfQVJDNF9MT0NLKCk7CisgICAgICAgIGlmICghcnNfaW5pdGlhbGl6ZWQgfHwgYXJjNF9zdGlyX3BpZCAhPSBnZXRwaWQoKSkKKyAgICAgICAgICAgICAgICBhcmM0X3N0aXIoKTsKKyAgICAgICAgd2hpbGUgKG4tLSkgeworICAgICAgICAgICAgICAgIGlmICgtLWFyYzRfY291bnQgPD0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGFyYzRfc3RpcigpOworICAgICAgICAgICAgICAgIGJ1ZltuXSA9IGFyYzRfZ2V0Ynl0ZSgpOworICAgICAgICB9CisgICAgICAgIF9BUkM0X1VOTE9DSygpOworfQorCisvKgorICogQ2FsY3VsYXRlIGEgdW5pZm9ybWx5IGRpc3RyaWJ1dGVkIHJhbmRvbSBudW1iZXIgbGVzcyB0aGFuIHVwcGVyX2JvdW5kCisgKiBhdm9pZGluZyAibW9kdWxvIGJpYXMiLgorICoKKyAqIFVuaWZvcm1pdHkgaXMgYWNoaWV2ZWQgYnkgZ2VuZXJhdGluZyBuZXcgcmFuZG9tIG51bWJlcnMgdW50aWwgdGhlIG9uZQorICogcmV0dXJuZWQgaXMgb3V0c2lkZSB0aGUgcmFuZ2UgWzAsIDIqKjMyICUgdXBwZXJfYm91bmQpLiAgVGhpcworICogZ3VhcmFudGVlcyB0aGUgc2VsZWN0ZWQgcmFuZG9tIG51bWJlciB3aWxsIGJlIGluc2lkZQorICogWzIqKjMyICUgdXBwZXJfYm91bmQsIDIqKjMyKSB3aGljaCBtYXBzIGJhY2sgdG8gWzAsIHVwcGVyX2JvdW5kKQorICogYWZ0ZXIgcmVkdWN0aW9uIG1vZHVsbyB1cHBlcl9ib3VuZC4KKyAqLwordV9pbnQzMl90CithcmM0cmFuZG9tX3VuaWZvcm0odV9pbnQzMl90IHVwcGVyX2JvdW5kKQoreworICAgICAgICB1X2ludDMyX3QgciwgbWluOworCisgICAgICAgIGlmICh1cHBlcl9ib3VuZCA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisKKyNpZiAoVUxPTkdfTUFYID4gMHhmZmZmZmZmZlVMKQorICAgICAgICBtaW4gPSAweDEwMDAwMDAwMFVMICUgdXBwZXJfYm91bmQ7CisjZWxzZQorICAgICAgICAvKiBDYWxjdWxhdGUgKDIqKjMyICUgdXBwZXJfYm91bmQpIGF2b2lkaW5nIDY0LWJpdCBtYXRoICovCisgICAgICAgIGlmICh1cHBlcl9ib3VuZCA+IDB4ODAwMDAwMDApCisgICAgICAgICAgICAgICAgbWluID0gMSArIH51cHBlcl9ib3VuZDsgICAgICAgICAgICAgICAgLyogMioqMzIgLSB1cHBlcl9ib3VuZCAqLworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiAoMioqMzIgLSAoeCAqIDIpKSAlIHggPT0gMioqMzIgJSB4IHdoZW4geCA8PSAyKiozMSAqLworICAgICAgICAgICAgICAgIG1pbiA9ICgoMHhmZmZmZmZmZiAtICh1cHBlcl9ib3VuZCAqIDIpKSArIDEpICUgdXBwZXJfYm91bmQ7CisgICAgICAgIH0KKyNlbmRpZgorCisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgY291bGQgdGhlb3JldGljYWxseSBsb29wIGZvcmV2ZXIgYnV0IGVhY2ggcmV0cnkgaGFzCisgICAgICAgICAqIHAgPiAwLjUgKHdvcnN0IGNhc2UsIHVzdWFsbHkgZmFyIGJldHRlcikgb2Ygc2VsZWN0aW5nIGEKKyAgICAgICAgICogbnVtYmVyIGluc2lkZSB0aGUgcmFuZ2Ugd2UgbmVlZCwgc28gaXQgc2hvdWxkIHJhcmVseSBuZWVkCisgICAgICAgICAqIHRvIHJlLXJvbGwuCisgICAgICAgICAqLworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICAgICAgciA9IGFyYzRyYW5kb20oKTsKKyAgICAgICAgICAgICAgICBpZiAociA+PSBtaW4pCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiByICUgdXBwZXJfYm91bmQ7Cit9CisKKyNpZiAwCisvKi0tLS0tLS0tIFRlc3QgY29kZSBmb3IgaTM4NiAtLS0tLS0tLSovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxtYWNoaW5lL3BjdHIuaD4KK2ludAorbWFpbihpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgICAgIGNvbnN0IGludCBpdGVyID0gMTAwMDAwMDsKKyAgICAgICAgaW50ICAgICBpOworICAgICAgICBwY3RydmFsIHY7CisKKyAgICAgICAgdiA9IHJkdHNjKCk7CisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBpdGVyOyBpKyspCisgICAgICAgICAgICAgICAgYXJjNHJhbmRvbSgpOworICAgICAgICB2ID0gcmR0c2MoKSAtIHY7CisgICAgICAgIHYgLz0gaXRlcjsKKworICAgICAgICBwcmludGYoIiVxZCBjeWNsZXNcbiIsIHYpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9hdG9taWNzX3g4Ni5jIGIvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZDYwZjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvYXRvbWljc194ODYuYwpAQCAtMCwwICsxLDk1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworI2RlZmluZSBGVVRFWF9TWVNDQUxMIDI0MAorI2RlZmluZSBGVVRFWF9XQUlUIDAKKyNkZWZpbmUgRlVURVhfV0FLRSAxCisKK2ludCBfX2Z1dGV4X3dhaXQodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgdmFsKQoreworICAgIGludCByZXQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImludCAkMHg4MDsiCisgICAgICAgIDogIj1hIiAocmV0KQorICAgICAgICA6ICIwIiAoRlVURVhfU1lTQ0FMTCksCisgICAgICAgICAgImIiIChmdHgpLAorICAgICAgICAgICJjIiAoRlVURVhfV0FJVCksCisgICAgICAgICAgImQiICh2YWwpLAorICAgICAgICAgICJTIiAoMCkKKyAgICApOworICAgIHJldHVybiByZXQ7Cit9CisKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpCit7CisgICAgaW50IHJldDsKKyAgICBhc20gdm9sYXRpbGUgKAorICAgICAgICAiaW50ICQweDgwOyIKKyAgICAgICAgOiAiPWEiIChyZXQpCisgICAgICAgIDogIjAiIChGVVRFWF9TWVNDQUxMKSwKKyAgICAgICAgICAiYiIgKGZ0eCksCisgICAgICAgICAgImMiIChGVVRFWF9XQUtFKSwKKyAgICAgICAgICAiZCIgKGNvdW50KQorICAgICk7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IF9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IG5ldywgdm9sYXRpbGUgaW50KiBhZGRyKSB7CisgICAgaW50IHhjaGc7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAiY21weGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgICJzZXRuZSAlJWFsOyIKKyAgICAgICAgOiAiPWEiICh4Y2hnKQorICAgICAgICA6ICJhIiAob2xkKSwKKyAgICAgICAgICAiYyIgKG5ldyksCisgICAgICAgICAgImQiIChhZGRyKQorICAgICk7CisgICAgcmV0dXJuIHhjaGc7Cit9CisKK2ludCBfX2F0b21pY19zd2FwKGludCBuZXcsIHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgYXNtIHZvbGF0aWxlICgKKyAgICAgICAgImxvY2s7IgorICAgICAgICAieGNoZyAlJWVjeCwgKCUlZWR4KTsiCisgICAgICAgIDogIj1jIiAob2xkKQorICAgICAgICA6ICJjIiAobmV3KSwKKyAgICAgICAgICAiZCIgKGFkZHIpCisgICAgKTsKKyAgICByZXR1cm4gb2xkOworfQorCitpbnQgX19hdG9taWNfZGVjKHZvbGF0aWxlIGludCogYWRkcikgeworICAgIGludCBvbGQ7CisgICAgZG8geworICAgICAgICBvbGQgPSAqYWRkcjsKKyAgICB9IHdoaWxlIChhdG9taWNfY21weGNoZyhvbGQsIG9sZC0xLCBhZGRyKSk7CisgICAgcmV0dXJuIG9sZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Jhc2VuYW1lLmMgYi9saWJjL2Jpb25pYy9iYXNlbmFtZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhYWFlNTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9iYXNlbmFtZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2NoYXIqCitiYXNlbmFtZShjb25zdCBjaGFyKiAgcGF0aCkKK3sKKyAgICBzdGF0aWMgY2hhciogIGJuYW1lID0gTlVMTDsKKyAgICBpbnQgICAgICAgICAgIHJldDsKKworICAgIGlmIChibmFtZSA9PSBOVUxMKSB7CisgICAgICAgIGJuYW1lID0gKGNoYXIgKiltYWxsb2MoTUFYUEFUSExFTik7CisgICAgICAgIGlmIChibmFtZSA9PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuKE5VTEwpOworICAgIH0KKyAgICByZXQgPSBiYXNlbmFtZV9yKHBhdGgsIGJuYW1lLCBNQVhQQVRITEVOKTsKKyAgICByZXR1cm4gKHJldCA8IDApID8gTlVMTCA6IGJuYW1lOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jIGIvbGliYy9iaW9uaWMvYmFzZW5hbWVfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5MDgwZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9iYXNlbmFtZV9yLmMKQEAgLTAsMCArMSw4MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorYmFzZW5hbWVfcihjb25zdCBjaGFyKiBwYXRoLCBjaGFyKiAgYnVmZmVyLCBzaXplX3QgIGJ1ZmZsZW4pCit7CisgICAgY29uc3QgY2hhciAqZW5kcCwgKnN0YXJ0cDsKKyAgICBpbnQgICAgICAgICBsZW4sIHJlc3VsdDsKKyAgICBjaGFyICAgICAgICB0ZW1wWzJdOworCisgICAgLyogRW1wdHkgb3IgTlVMTCBzdHJpbmcgZ2V0cyB0cmVhdGVkIGFzICIuIiAqLworICAgIGlmIChwYXRoID09IE5VTEwgfHwgKnBhdGggPT0gJ1wwJykgeworICAgICAgICBzdGFydHAgID0gIi4iOworICAgICAgICBsZW4gICAgID0gMTsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKworICAgIC8qIFN0cmlwIHRyYWlsaW5nIHNsYXNoZXMgKi8KKyAgICBlbmRwID0gcGF0aCArIHN0cmxlbihwYXRoKSAtIDE7CisgICAgd2hpbGUgKGVuZHAgPiBwYXRoICYmICplbmRwID09ICcvJykKKyAgICAgICAgZW5kcC0tOworCisgICAgLyogQWxsIHNsYXNoZXMgYmVjb21lcyAiLyIgKi8KKyAgICBpZiAoZW5kcCA9PSBwYXRoICYmICplbmRwID09ICcvJykgeworICAgICAgICBzdGFydHAgPSAiLyI7CisgICAgICAgIGxlbiAgICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBGaW5kIHRoZSBzdGFydCBvZiB0aGUgYmFzZSAqLworICAgIHN0YXJ0cCA9IGVuZHA7CisgICAgd2hpbGUgKHN0YXJ0cCA+IHBhdGggJiYgKihzdGFydHAgLSAxKSAhPSAnLycpCisgICAgICAgIHN0YXJ0cC0tOworCisgICAgbGVuID0gZW5kcCAtIHN0YXJ0cCArMTsKKworRXhpdDoKKyAgICByZXN1bHQgPSBsZW47CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKSB7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICAgIGlmIChsZW4gPiAoaW50KWJ1ZmZsZW4tMSkgeworICAgICAgICBsZW4gICAgPSAoaW50KWJ1ZmZsZW4tMTsKKyAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgIGVycm5vICA9IEVSQU5HRTsKKyAgICB9CisKKyAgICBpZiAobGVuID49IDApIHsKKyAgICAgICAgbWVtY3B5KCBidWZmZXIsIHN0YXJ0cCwgbGVuICk7CisgICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2Rpcm5hbWUuYyBiL2xpYmMvYmlvbmljL2Rpcm5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTFkYjkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGlybmFtZS5jCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGliZ2VuLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2NoYXIqCitkaXJuYW1lKGNvbnN0IGNoYXIqICBwYXRoKQoreworICAgIHN0YXRpYyBjaGFyKiAgYm5hbWUgPSBOVUxMOworICAgIGludCAgICAgICAgICAgcmV0OworCisgICAgaWYgKGJuYW1lID09IE5VTEwpIHsKKyAgICAgICAgYm5hbWUgPSAoY2hhciAqKW1hbGxvYyhNQVhQQVRITEVOKTsKKyAgICAgICAgaWYgKGJuYW1lID09IE5VTEwpCisgICAgICAgICAgICByZXR1cm4oTlVMTCk7CisgICAgfQorCisgICAgcmV0ID0gZGlybmFtZV9yKHBhdGgsIGJuYW1lLCBNQVhQQVRITEVOKTsKKyAgICByZXR1cm4gKHJldCA8IDApID8gTlVMTCA6IGJuYW1lOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZGlybmFtZV9yLmMgYi9saWJjL2Jpb25pYy9kaXJuYW1lX3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJlOWJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZGlybmFtZV9yLmMKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpYmdlbi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisKK2ludAorZGlybmFtZV9yKGNvbnN0IGNoYXIqICBwYXRoLCBjaGFyKiAgYnVmZmVyLCBzaXplX3QgIGJ1ZmZsZW4pCit7CisgICAgY29uc3QgY2hhciAqZW5kcDsKKyAgICBpbnQgICAgICAgICByZXN1bHQsIGxlbjsKKworICAgIC8qIEVtcHR5IG9yIE5VTEwgc3RyaW5nIGdldHMgdHJlYXRlZCBhcyAiLiIgKi8KKyAgICBpZiAocGF0aCA9PSBOVUxMIHx8ICpwYXRoID09ICdcMCcpIHsKKyAgICAgICAgcGF0aCA9ICIuIjsKKyAgICAgICAgbGVuICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICAvKiBTdHJpcCB0cmFpbGluZyBzbGFzaGVzICovCisgICAgZW5kcCA9IHBhdGggKyBzdHJsZW4ocGF0aCkgLSAxOworICAgIHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpCisgICAgICAgIGVuZHAtLTsKKworICAgIC8qIEZpbmQgdGhlIHN0YXJ0IG9mIHRoZSBkaXIgKi8KKyAgICB3aGlsZSAoZW5kcCA+IHBhdGggJiYgKmVuZHAgIT0gJy8nKQorICAgICAgICBlbmRwLS07CisKKyAgICAvKiBFaXRoZXIgdGhlIGRpciBpcyAiLyIgb3IgdGhlcmUgYXJlIG5vIHNsYXNoZXMgKi8KKyAgICBpZiAoZW5kcCA9PSBwYXRoKSB7CisgICAgICAgIHBhdGggPSAoKmVuZHAgPT0gJy8nKSA/ICIvIiA6ICIuIjsKKyAgICAgICAgbGVuICA9IDE7CisgICAgICAgIGdvdG8gRXhpdDsKKyAgICB9CisKKyAgICBkbyB7CisgICAgICAgIGVuZHAtLTsKKyAgICB9IHdoaWxlIChlbmRwID4gcGF0aCAmJiAqZW5kcCA9PSAnLycpOworCisgICAgbGVuID0gZW5kcCAtIHBhdGggKzE7CisKK0V4aXQ6CisgICAgcmVzdWx0ID0gbGVuOworICAgIGlmIChsZW4rMSA+IE1BWFBBVEhMRU4pIHsKKyAgICAgICAgZXJybm8gPSBFTkFNRVRPT0xPTkc7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKGJ1ZmZlciA9PSBOVUxMKQorICAgICAgICByZXR1cm4gcmVzdWx0OworCisgICAgaWYgKGxlbiA+IChpbnQpYnVmZmxlbi0xKSB7CisgICAgICAgIGxlbiAgICA9IChpbnQpYnVmZmxlbi0xOworICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgZXJybm8gID0gRVJBTkdFOworICAgIH0KKworICAgIGlmIChsZW4gPj0gMCkgeworICAgICAgICBtZW1jcHkoIGJ1ZmZlciwgcGF0aCwgbGVuICk7CisgICAgICAgIGJ1ZmZlcltsZW5dID0gMDsKKyAgICB9CisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmMgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4ZjIwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5jCkBAIC0wLDAgKzEsNTM3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworLyoKKyAgVGhpcyBpcyBhIHZlcnNpb24gKGFrYSBkbG1hbGxvYykgb2YgbWFsbG9jL2ZyZWUvcmVhbGxvYyB3cml0dGVuIGJ5CisgIERvdWcgTGVhIGFuZCByZWxlYXNlZCB0byB0aGUgcHVibGljIGRvbWFpbiwgYXMgZXhwbGFpbmVkIGF0CisgIGh0dHA6Ly9jcmVhdGl2ZWNvbW1vbnMub3JnL2xpY2Vuc2VzL3B1YmxpY2RvbWFpbi4gIFNlbmQgcXVlc3Rpb25zLAorICBjb21tZW50cywgY29tcGxhaW50cywgcGVyZm9ybWFuY2UgZGF0YSwgZXRjIHRvIGRsQGNzLm9zd2Vnby5lZHUKKworKiBWZXJzaW9uIDIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MTUgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisKKyAgIE5vdGU6IFRoZXJlIG1heSBiZSBhbiB1cGRhdGVkIHZlcnNpb24gb2YgdGhpcyBtYWxsb2Mgb2J0YWluYWJsZSBhdAorICAgICAgICAgICBmdHA6Ly9nZWUuY3Mub3N3ZWdvLmVkdS9wdWIvbWlzYy9tYWxsb2MuYworICAgICAgICAgQ2hlY2sgYmVmb3JlIGluc3RhbGxpbmchCisKKyogUXVpY2tzdGFydAorCisgIFRoaXMgbGlicmFyeSBpcyBhbGwgaW4gb25lIGZpbGUgdG8gc2ltcGxpZnkgdGhlIG1vc3QgY29tbW9uIHVzYWdlOgorICBmdHAgaXQsIGNvbXBpbGUgaXQgKC1PMyksIGFuZCBsaW5rIGl0IGludG8gYW5vdGhlciBwcm9ncmFtLiBBbGwgb2YKKyAgdGhlIGNvbXBpbGUtdGltZSBvcHRpb25zIGRlZmF1bHQgdG8gcmVhc29uYWJsZSB2YWx1ZXMgZm9yIHVzZSBvbgorICBtb3N0IHBsYXRmb3Jtcy4gIFlvdSBtaWdodCBsYXRlciB3YW50IHRvIHN0ZXAgdGhyb3VnaCB2YXJpb3VzCisgIGNvbXBpbGUtdGltZSBhbmQgZHluYW1pYyB0dW5pbmcgb3B0aW9ucy4KKworICBGb3IgY29udmVuaWVuY2UsIGFuIGluY2x1ZGUgZmlsZSBmb3IgY29kZSB1c2luZyB0aGlzIG1hbGxvYyBpcyBhdDoKKyAgICAgZnRwOi8vZ2VlLmNzLm9zd2Vnby5lZHUvcHViL21pc2MvbWFsbG9jLTIuOC4zLmgKKyAgWW91IGRvbid0IHJlYWxseSBuZWVkIHRoaXMgLmggZmlsZSB1bmxlc3MgeW91IGNhbGwgZnVuY3Rpb25zIG5vdAorICBkZWZpbmVkIGluIHlvdXIgc3lzdGVtIGluY2x1ZGUgZmlsZXMuICBUaGUgLmggZmlsZSBjb250YWlucyBvbmx5IHRoZQorICBleGNlcnB0cyBmcm9tIHRoaXMgZmlsZSBuZWVkZWQgZm9yIHVzaW5nIHRoaXMgbWFsbG9jIG9uIEFOU0kgQy9DKysKKyAgc3lzdGVtcywgc28gbG9uZyBhcyB5b3UgaGF2ZW4ndCBjaGFuZ2VkIGNvbXBpbGUtdGltZSBvcHRpb25zIGFib3V0CisgIG5hbWluZyBhbmQgdHVuaW5nIHBhcmFtZXRlcnMuICBJZiB5b3UgZG8sIHRoZW4geW91IGNhbiBjcmVhdGUgeW91cgorICBvd24gbWFsbG9jLmggdGhhdCBkb2VzIGluY2x1ZGUgYWxsIHNldHRpbmdzIGJ5IGN1dHRpbmcgYXQgdGhlIHBvaW50CisgIGluZGljYXRlZCBiZWxvdy4gTm90ZSB0aGF0IHlvdSBtYXkgYWxyZWFkeSBieSBkZWZhdWx0IGJlIHVzaW5nIGEgQworICBsaWJyYXJ5IGNvbnRhaW5pbmcgYSBtYWxsb2MgdGhhdCBpcyBiYXNlZCBvbiBzb21lIHZlcnNpb24gb2YgdGhpcworICBtYWxsb2MgKGZvciBleGFtcGxlIGluIGxpbnV4KS4gWW91IG1pZ2h0IHN0aWxsIHdhbnQgdG8gdXNlIHRoZSBvbmUKKyAgaW4gdGhpcyBmaWxlIHRvIGN1c3RvbWl6ZSBzZXR0aW5ncyBvciB0byBhdm9pZCBvdmVyaGVhZHMgYXNzb2NpYXRlZAorICB3aXRoIGxpYnJhcnkgdmVyc2lvbnMuCisKKyogVml0YWwgc3RhdGlzdGljczoKKworICBTdXBwb3J0ZWQgcG9pbnRlci9zaXplX3QgcmVwcmVzZW50YXRpb246ICAgICAgIDQgb3IgOCBieXRlcworICAgICAgIHNpemVfdCBNVVNUIGJlIGFuIHVuc2lnbmVkIHR5cGUgb2YgdGhlIHNhbWUgd2lkdGggYXMKKyAgICAgICBwb2ludGVycy4gKElmIHlvdSBhcmUgdXNpbmcgYW4gYW5jaWVudCBzeXN0ZW0gdGhhdCBkZWNsYXJlcworICAgICAgIHNpemVfdCBhcyBhIHNpZ25lZCB0eXBlLCBvciBuZWVkIGl0IHRvIGJlIGEgZGlmZmVyZW50IHdpZHRoCisgICAgICAgdGhhbiBwb2ludGVycywgeW91IGNhbiB1c2UgYSBwcmV2aW91cyByZWxlYXNlIG9mIHRoaXMgbWFsbG9jCisgICAgICAgKGUuZy4gMi43LjIpIHN1cHBvcnRpbmcgdGhlc2UuKQorCisgIEFsaWdubWVudDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBieXRlcyAoZGVmYXVsdCkKKyAgICAgICBUaGlzIHN1ZmZpY2VzIGZvciBuZWFybHkgYWxsIGN1cnJlbnQgbWFjaGluZXMgYW5kIEMgY29tcGlsZXJzLgorICAgICAgIEhvd2V2ZXIsIHlvdSBjYW4gZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgdG8gYmUgd2lkZXIgdGhhbiB0aGlzCisgICAgICAgaWYgbmVjZXNzYXJ5ICh1cCB0byAxMjhieXRlcyksIGF0IHRoZSBleHBlbnNlIG9mIHVzaW5nIG1vcmUgc3BhY2UuCisKKyAgTWluaW11bSBvdmVyaGVhZCBwZXIgYWxsb2NhdGVkIGNodW5rOiAgIDQgb3IgIDggYnl0ZXMgKGlmIDRieXRlIHNpemVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOCBvciAxNiBieXRlcyAoaWYgOGJ5dGUgc2l6ZXMpCisgICAgICAgRWFjaCBtYWxsb2NlZCBjaHVuayBoYXMgYSBoaWRkZW4gd29yZCBvZiBvdmVyaGVhZCBob2xkaW5nIHNpemUKKyAgICAgICBhbmQgc3RhdHVzIGluZm9ybWF0aW9uLCBhbmQgYWRkaXRpb25hbCBjcm9zcy1jaGVjayB3b3JkCisgICAgICAgaWYgRk9PVEVSUyBpcyBkZWZpbmVkLgorCisgIE1pbmltdW0gYWxsb2NhdGVkIHNpemU6IDQtYnl0ZSBwdHJzOiAgMTYgYnl0ZXMgICAgKGluY2x1ZGluZyBvdmVyaGVhZCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgOC1ieXRlIHB0cnM6ICAzMiBieXRlcyAgICAoaW5jbHVkaW5nIG92ZXJoZWFkKQorCisgICAgICAgRXZlbiBhIHJlcXVlc3QgZm9yIHplcm8gYnl0ZXMgKGkuZS4sIG1hbGxvYygwKSkgcmV0dXJucyBhCisgICAgICAgcG9pbnRlciB0byBzb21ldGhpbmcgb2YgdGhlIG1pbmltdW0gYWxsb2NhdGFibGUgc2l6ZS4KKyAgICAgICBUaGUgbWF4aW11bSBvdmVyaGVhZCB3YXN0YWdlIChpLmUuLCBudW1iZXIgb2YgZXh0cmEgYnl0ZXMKKyAgICAgICBhbGxvY2F0ZWQgdGhhbiB3ZXJlIHJlcXVlc3RlZCBpbiBtYWxsb2MpIGlzIGxlc3MgdGhhbiBvciBlcXVhbAorICAgICAgIHRvIHRoZSBtaW5pbXVtIHNpemUsIGV4Y2VwdCBmb3IgcmVxdWVzdHMgPj0gbW1hcF90aHJlc2hvbGQgdGhhdAorICAgICAgIGFyZSBzZXJ2aWNlZCB2aWEgbW1hcCgpLCB3aGVyZSB0aGUgd29yc3QgY2FzZSB3YXN0YWdlIGlzIGFib3V0CisgICAgICAgMzIgYnl0ZXMgcGx1cyB0aGUgcmVtYWluZGVyIGZyb20gYSBzeXN0ZW0gcGFnZSAodGhlIG1pbmltYWwKKyAgICAgICBtbWFwIHVuaXQpOyB0eXBpY2FsbHkgNDA5NiBvciA4MTkyIGJ5dGVzLgorCisgIFNlY3VyaXR5OiBzdGF0aWMtc2FmZTsgb3B0aW9uYWxseSBtb3JlIG9yIGxlc3MKKyAgICAgICBUaGUgInNlY3VyaXR5IiBvZiBtYWxsb2MgcmVmZXJzIHRvIHRoZSBhYmlsaXR5IG9mIG1hbGljaW91cworICAgICAgIGNvZGUgdG8gYWNjZW50dWF0ZSB0aGUgZWZmZWN0cyBvZiBlcnJvcnMgKGZvciBleGFtcGxlLCBmcmVlaW5nCisgICAgICAgc3BhY2UgdGhhdCBpcyBub3QgY3VycmVudGx5IG1hbGxvYydlZCBvciBvdmVyd3JpdGluZyBwYXN0IHRoZQorICAgICAgIGVuZHMgb2YgY2h1bmtzKSBpbiBjb2RlIHRoYXQgY2FsbHMgbWFsbG9jLiAgVGhpcyBtYWxsb2MKKyAgICAgICBndWFyYW50ZWVzIG5vdCB0byBtb2RpZnkgYW55IG1lbW9yeSBsb2NhdGlvbnMgYmVsb3cgdGhlIGJhc2Ugb2YKKyAgICAgICBoZWFwLCBpLmUuLCBzdGF0aWMgdmFyaWFibGVzLCBldmVuIGluIHRoZSBwcmVzZW5jZSBvZiB1c2FnZQorICAgICAgIGVycm9ycy4gIFRoZSByb3V0aW5lcyBhZGRpdGlvbmFsbHkgZGV0ZWN0IG1vc3QgaW1wcm9wZXIgZnJlZXMKKyAgICAgICBhbmQgcmVhbGxvY3MuICBBbGwgdGhpcyBob2xkcyBhcyBsb25nIGFzIHRoZSBzdGF0aWMgYm9va2tlZXBpbmcKKyAgICAgICBmb3IgbWFsbG9jIGl0c2VsZiBpcyBub3QgY29ycnVwdGVkIGJ5IHNvbWUgb3RoZXIgbWVhbnMuICBUaGlzCisgICAgICAgaXMgb25seSBvbmUgYXNwZWN0IG9mIHNlY3VyaXR5IC0tIHRoZXNlIGNoZWNrcyBkbyBub3QsIGFuZAorICAgICAgIGNhbm5vdCwgZGV0ZWN0IGFsbCBwb3NzaWJsZSBwcm9ncmFtbWluZyBlcnJvcnMuCisKKyAgICAgICBJZiBGT09URVJTIGlzIGRlZmluZWQgbm9uemVybywgdGhlbiBlYWNoIGFsbG9jYXRlZCBjaHVuaworICAgICAgIGNhcnJpZXMgYW4gYWRkaXRpb25hbCBjaGVjayB3b3JkIHRvIHZlcmlmeSB0aGF0IGl0IHdhcyBtYWxsb2NlZAorICAgICAgIGZyb20gaXRzIHNwYWNlLiAgVGhlc2UgY2hlY2sgd29yZHMgYXJlIHRoZSBzYW1lIHdpdGhpbiBlYWNoCisgICAgICAgZXhlY3V0aW9uIG9mIGEgcHJvZ3JhbSB1c2luZyBtYWxsb2MsIGJ1dCBkaWZmZXIgYWNyb3NzCisgICAgICAgZXhlY3V0aW9ucywgc28gZXh0ZXJuYWxseSBjcmFmdGVkIGZha2UgY2h1bmtzIGNhbm5vdCBiZQorICAgICAgIGZyZWVkLiBUaGlzIGltcHJvdmVzIHNlY3VyaXR5IGJ5IHJlamVjdGluZyBmcmVlcy9yZWFsbG9jcyB0aGF0CisgICAgICAgY291bGQgY29ycnVwdCBoZWFwIG1lbW9yeSwgaW4gYWRkaXRpb24gdG8gdGhlIGNoZWNrcyBwcmV2ZW50aW5nCisgICAgICAgd3JpdGVzIHRvIHN0YXRpY3MgdGhhdCBhcmUgYWx3YXlzIG9uLiAgVGhpcyBtYXkgZnVydGhlciBpbXByb3ZlCisgICAgICAgc2VjdXJpdHkgYXQgdGhlIGV4cGVuc2Ugb2YgdGltZSBhbmQgc3BhY2Ugb3ZlcmhlYWQuICAoTm90ZSB0aGF0CisgICAgICAgRk9PVEVSUyBtYXkgYWxzbyBiZSB3b3J0aCB1c2luZyB3aXRoIE1TUEFDRVMuKQorCisgICAgICAgQnkgZGVmYXVsdCBkZXRlY3RlZCBlcnJvcnMgY2F1c2UgdGhlIHByb2dyYW0gdG8gYWJvcnQgKGNhbGxpbmcKKyAgICAgICAiYWJvcnQoKSIpLiBZb3UgY2FuIG92ZXJyaWRlIHRoaXMgdG8gaW5zdGVhZCBwcm9jZWVkIHBhc3QKKyAgICAgICBlcnJvcnMgYnkgZGVmaW5pbmcgUFJPQ0VFRF9PTl9FUlJPUi4gIEluIHRoaXMgY2FzZSwgYSBiYWQgZnJlZQorICAgICAgIGhhcyBubyBlZmZlY3QsIGFuZCBhIG1hbGxvYyB0aGF0IGVuY291bnRlcnMgYSBiYWQgYWRkcmVzcworICAgICAgIGNhdXNlZCBieSB1c2VyIG92ZXJ3cml0ZXMgd2lsbCBpZ25vcmUgdGhlIGJhZCBhZGRyZXNzIGJ5CisgICAgICAgZHJvcHBpbmcgcG9pbnRlcnMgYW5kIGluZGljZXMgdG8gYWxsIGtub3duIG1lbW9yeS4gVGhpcyBtYXkKKyAgICAgICBiZSBhcHByb3ByaWF0ZSBmb3IgcHJvZ3JhbXMgdGhhdCBzaG91bGQgY29udGludWUgaWYgYXQgYWxsCisgICAgICAgcG9zc2libGUgaW4gdGhlIGZhY2Ugb2YgcHJvZ3JhbW1pbmcgZXJyb3JzLCBhbHRob3VnaCB0aGV5IG1heQorICAgICAgIHJ1biBvdXQgb2YgbWVtb3J5IGJlY2F1c2UgZHJvcHBlZCBtZW1vcnkgaXMgbmV2ZXIgcmVjbGFpbWVkLgorCisgICAgICAgSWYgeW91IGRvbid0IGxpa2UgZWl0aGVyIG9mIHRoZXNlIG9wdGlvbnMsIHlvdSBjYW4gZGVmaW5lCisgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gYW5kIFVTQUdFX0VSUk9SX0FDVElPTiB0byBkbyBhbnl0aGluZworICAgICAgIGVsc2UuIEFuZCBpZiBpZiB5b3UgYXJlIHN1cmUgdGhhdCB5b3VyIHByb2dyYW0gdXNpbmcgbWFsbG9jIGhhcworICAgICAgIG5vIGVycm9ycyBvciB2dWxuZXJhYmlsaXRpZXMsIHlvdSBjYW4gZGVmaW5lIElOU0VDVVJFIHRvIDEsCisgICAgICAgd2hpY2ggbWlnaHQgKG9yIG1pZ2h0IG5vdCkgcHJvdmlkZSBhIHNtYWxsIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50LgorCisgIFRocmVhZC1zYWZldHk6IE5PVCB0aHJlYWQtc2FmZSB1bmxlc3MgVVNFX0xPQ0tTIGRlZmluZWQKKyAgICAgICBXaGVuIFVTRV9MT0NLUyBpcyBkZWZpbmVkLCBlYWNoIHB1YmxpYyBjYWxsIHRvIG1hbGxvYywgZnJlZSwKKyAgICAgICBldGMgaXMgc3Vycm91bmRlZCB3aXRoIGVpdGhlciBhIHB0aHJlYWQgbXV0ZXggb3IgYSB3aW4zMgorICAgICAgIHNwaW5sb2NrIChkZXBlbmRpbmcgb24gV0lOMzIpLiBUaGlzIGlzIG5vdCBlc3BlY2lhbGx5IGZhc3QsIGFuZAorICAgICAgIGNhbiBiZSBhIG1ham9yIGJvdHRsZW5lY2suICBJdCBpcyBkZXNpZ25lZCBvbmx5IHRvIHByb3ZpZGUKKyAgICAgICBtaW5pbWFsIHByb3RlY3Rpb24gaW4gY29uY3VycmVudCBlbnZpcm9ubWVudHMsIGFuZCB0byBwcm92aWRlIGEKKyAgICAgICBiYXNpcyBmb3IgZXh0ZW5zaW9ucy4gIElmIHlvdSBhcmUgdXNpbmcgbWFsbG9jIGluIGEgY29uY3VycmVudAorICAgICAgIHByb2dyYW0sIGNvbnNpZGVyIGluc3RlYWQgdXNpbmcgcHRtYWxsb2MsIHdoaWNoIGlzIGRlcml2ZWQgZnJvbQorICAgICAgIGEgdmVyc2lvbiBvZiB0aGlzIG1hbGxvYy4gKFNlZSBodHRwOi8vd3d3Lm1hbGxvYy5kZSkuCisKKyAgU3lzdGVtIHJlcXVpcmVtZW50czogQW55IGNvbWJpbmF0aW9uIG9mIE1PUkVDT1JFIGFuZC9vciBNTUFQL01VTk1BUAorICAgICAgIFRoaXMgbWFsbG9jIGNhbiB1c2UgdW5peCBzYnJrIG9yIGFueSBlbXVsYXRpb24gKGludm9rZWQgdXNpbmcKKyAgICAgICB0aGUgQ0FMTF9NT1JFQ09SRSBtYWNybykgYW5kL29yIG1tYXAvbXVubWFwIG9yIGFueSBlbXVsYXRpb24KKyAgICAgICAoaW52b2tlZCB1c2luZyBDQUxMX01NQVAvQ0FMTF9NVU5NQVApIHRvIGdldCBhbmQgcmVsZWFzZSBzeXN0ZW0KKyAgICAgICBtZW1vcnkuICBPbiBtb3N0IHVuaXggc3lzdGVtcywgaXQgdGVuZHMgdG8gd29yayBiZXN0IGlmIGJvdGgKKyAgICAgICBNT1JFQ09SRSBhbmQgTU1BUCBhcmUgZW5hYmxlZC4gIE9uIFdpbjMyLCBpdCB1c2VzIGVtdWxhdGlvbnMKKyAgICAgICBiYXNlZCBvbiBWaXJ0dWFsQWxsb2MuIEl0IGFsc28gdXNlcyBjb21tb24gQyBsaWJyYXJ5IGZ1bmN0aW9ucworICAgICAgIGxpa2UgbWVtc2V0LgorCisgIENvbXBsaWFuY2U6IEkgYmVsaWV2ZSBpdCBpcyBjb21wbGlhbnQgd2l0aCB0aGUgU2luZ2xlIFVuaXggU3BlY2lmaWNhdGlvbgorICAgICAgIChTZWUgaHR0cDovL3d3dy51bml4Lm9yZykuIEFsc28gU1ZJRC9YUEcsIEFOU0kgQywgYW5kIHByb2JhYmx5CisgICAgICAgb3RoZXJzIGFzIHdlbGwuCisKKyogT3ZlcnZpZXcgb2YgYWxnb3JpdGhtcworCisgIFRoaXMgaXMgbm90IHRoZSBmYXN0ZXN0LCBtb3N0IHNwYWNlLWNvbnNlcnZpbmcsIG1vc3QgcG9ydGFibGUsIG9yCisgIG1vc3QgdHVuYWJsZSBtYWxsb2MgZXZlciB3cml0dGVuLiBIb3dldmVyIGl0IGlzIGFtb25nIHRoZSBmYXN0ZXN0CisgIHdoaWxlIGFsc28gYmVpbmcgYW1vbmcgdGhlIG1vc3Qgc3BhY2UtY29uc2VydmluZywgcG9ydGFibGUgYW5kCisgIHR1bmFibGUuICBDb25zaXN0ZW50IGJhbGFuY2UgYWNyb3NzIHRoZXNlIGZhY3RvcnMgcmVzdWx0cyBpbiBhIGdvb2QKKyAgZ2VuZXJhbC1wdXJwb3NlIGFsbG9jYXRvciBmb3IgbWFsbG9jLWludGVuc2l2ZSBwcm9ncmFtcy4KKworICBJbiBtb3N0IHdheXMsIHRoaXMgbWFsbG9jIGlzIGEgYmVzdC1maXQgYWxsb2NhdG9yLiBHZW5lcmFsbHksIGl0CisgIGNob29zZXMgdGhlIGJlc3QtZml0dGluZyBleGlzdGluZyBjaHVuayBmb3IgYSByZXF1ZXN0LCB3aXRoIHRpZXMKKyAgYnJva2VuIGluIGFwcHJveGltYXRlbHkgbGVhc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoaXMgc3RyYXRlZ3kKKyAgbm9ybWFsbHkgbWFpbnRhaW5zIGxvdyBmcmFnbWVudGF0aW9uLikgSG93ZXZlciwgZm9yIHJlcXVlc3RzIGxlc3MKKyAgdGhhbiAyNTZieXRlcywgaXQgZGV2aWF0ZXMgZnJvbSBiZXN0LWZpdCB3aGVuIHRoZXJlIGlzIG5vdCBhbgorICBleGFjdGx5IGZpdHRpbmcgYXZhaWxhYmxlIGNodW5rIGJ5IHByZWZlcnJpbmcgdG8gdXNlIHNwYWNlIGFkamFjZW50CisgIHRvIHRoYXQgdXNlZCBmb3IgdGhlIHByZXZpb3VzIHNtYWxsIHJlcXVlc3QsIGFzIHdlbGwgYXMgYnkgYnJlYWtpbmcKKyAgdGllcyBpbiBhcHByb3hpbWF0ZWx5IG1vc3QtcmVjZW50bHktdXNlZCBvcmRlci4gKFRoZXNlIGVuaGFuY2UKKyAgbG9jYWxpdHkgb2Ygc2VyaWVzIG9mIHNtYWxsIGFsbG9jYXRpb25zLikgIEFuZCBmb3IgdmVyeSBsYXJnZSByZXF1ZXN0cworICAoPj0gMjU2S2IgYnkgZGVmYXVsdCksIGl0IHJlbGllcyBvbiBzeXN0ZW0gbWVtb3J5IG1hcHBpbmcKKyAgZmFjaWxpdGllcywgaWYgc3VwcG9ydGVkLiAgKFRoaXMgaGVscHMgYXZvaWQgY2FycnlpbmcgYXJvdW5kIGFuZAorICBwb3NzaWJseSBmcmFnbWVudGluZyBtZW1vcnkgdXNlZCBvbmx5IGZvciBsYXJnZSBjaHVua3MuKQorCisgIEFsbCBvcGVyYXRpb25zIChleGNlcHQgbWFsbG9jX3N0YXRzIGFuZCBtYWxsaW5mbykgaGF2ZSBleGVjdXRpb24KKyAgdGltZXMgdGhhdCBhcmUgYm91bmRlZCBieSBhIGNvbnN0YW50IGZhY3RvciBvZiB0aGUgbnVtYmVyIG9mIGJpdHMgaW4KKyAgYSBzaXplX3QsIG5vdCBjb3VudGluZyBhbnkgY2xlYXJpbmcgaW4gY2FsbG9jIG9yIGNvcHlpbmcgaW4gcmVhbGxvYywKKyAgb3IgYWN0aW9ucyBzdXJyb3VuZGluZyBNT1JFQ09SRSBhbmQgTU1BUCB0aGF0IGhhdmUgdGltZXMKKyAgcHJvcG9ydGlvbmFsIHRvIHRoZSBudW1iZXIgb2Ygbm9uLWNvbnRpZ3VvdXMgcmVnaW9ucyByZXR1cm5lZCBieQorICBzeXN0ZW0gYWxsb2NhdGlvbiByb3V0aW5lcywgd2hpY2ggaXMgb2Z0ZW4ganVzdCAxLgorCisgIFRoZSBpbXBsZW1lbnRhdGlvbiBpcyBub3QgdmVyeSBtb2R1bGFyIGFuZCBzZXJpb3VzbHkgb3ZlcnVzZXMKKyAgbWFjcm9zLiBQZXJoYXBzIHNvbWVkYXkgYWxsIEMgY29tcGlsZXJzIHdpbGwgZG8gYXMgZ29vZCBhIGpvYgorICBpbmxpbmluZyBtb2R1bGFyIGNvZGUgYXMgY2FuIG5vdyBiZSBkb25lIGJ5IGJydXRlLWZvcmNlIGV4cGFuc2lvbiwKKyAgYnV0IG5vdywgZW5vdWdoIG9mIHRoZW0gc2VlbSBub3QgdG8uCisKKyAgU29tZSBjb21waWxlcnMgaXNzdWUgYSBsb3Qgb2Ygd2FybmluZ3MgYWJvdXQgY29kZSB0aGF0IGlzCisgIGRlYWQvdW5yZWFjaGFibGUgb25seSBvbiBzb21lIHBsYXRmb3JtcywgYW5kIGFsc28gYWJvdXQgaW50ZW50aW9uYWwKKyAgdXNlcyBvZiBuZWdhdGlvbiBvbiB1bnNpZ25lZCB0eXBlcy4gQWxsIGtub3duIGNhc2VzIG9mIGVhY2ggY2FuIGJlCisgIGlnbm9yZWQuCisKKyAgRm9yIGEgbG9uZ2VyIGJ1dCBvdXQgb2YgZGF0ZSBoaWdoLWxldmVsIGRlc2NyaXB0aW9uLCBzZWUKKyAgICAgaHR0cDovL2dlZS5jcy5vc3dlZ28uZWR1L2RsL2h0bWwvbWFsbG9jLmh0bWwKKworKiBNU1BBQ0VTCisgIElmIE1TUEFDRVMgaXMgZGVmaW5lZCwgdGhlbiBpbiBhZGRpdGlvbiB0byBtYWxsb2MsIGZyZWUsIGV0Yy4sCisgIHRoaXMgZmlsZSBhbHNvIGRlZmluZXMgbXNwYWNlX21hbGxvYywgbXNwYWNlX2ZyZWUsIGV0Yy4gVGhlc2UKKyAgYXJlIHZlcnNpb25zIG9mIG1hbGxvYyByb3V0aW5lcyB0aGF0IHRha2UgYW4gIm1zcGFjZSIgYXJndW1lbnQKKyAgb2J0YWluZWQgdXNpbmcgY3JlYXRlX21zcGFjZSwgdG8gY29udHJvbCBhbGwgaW50ZXJuYWwgYm9va2tlZXBpbmcuCisgIElmIE9OTFlfTVNQQUNFUyBpcyBkZWZpbmVkLCBvbmx5IHRoZXNlIHZlcnNpb25zIGFyZSBjb21waWxlZC4KKyAgU28gaWYgeW91IHdvdWxkIGxpa2UgdG8gdXNlIHRoaXMgYWxsb2NhdG9yIGZvciBvbmx5IHNvbWUgYWxsb2NhdGlvbnMsCisgIGFuZCB5b3VyIHN5c3RlbSBtYWxsb2MgZm9yIG90aGVycywgeW91IGNhbiBjb21waWxlIHdpdGgKKyAgT05MWV9NU1BBQ0VTIGFuZCB0aGVuIGRvIHNvbWV0aGluZyBsaWtlLi4uCisgICAgc3RhdGljIG1zcGFjZSBteW1zcGFjZSA9IGNyZWF0ZV9tc3BhY2UoMCwwKTsgLy8gZm9yIGV4YW1wbGUKKyAgICAjZGVmaW5lIG15bWFsbG9jKGJ5dGVzKSAgbXNwYWNlX21hbGxvYyhteW1zcGFjZSwgYnl0ZXMpCisKKyAgKE5vdGU6IElmIHlvdSBvbmx5IG5lZWQgb25lIGluc3RhbmNlIG9mIGFuIG1zcGFjZSwgeW91IGNhbiBpbnN0ZWFkCisgIHVzZSAiVVNFX0RMX1BSRUZJWCIgdG8gcmVsYWJlbCB0aGUgZ2xvYmFsIG1hbGxvYy4pCisKKyAgWW91IGNhbiBzaW1pbGFybHkgY3JlYXRlIHRocmVhZC1sb2NhbCBhbGxvY2F0b3JzIGJ5IHN0b3JpbmcKKyAgbXNwYWNlcyBhcyB0aHJlYWQtbG9jYWxzLiBGb3IgZXhhbXBsZToKKyAgICBzdGF0aWMgX190aHJlYWQgbXNwYWNlIHRsbXMgPSAwOworICAgIHZvaWQqICB0bG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgICAgIGlmICh0bG1zID09IDApIHRsbXMgPSBjcmVhdGVfbXNwYWNlKDAsIDApOworICAgICAgcmV0dXJuIG1zcGFjZV9tYWxsb2ModGxtcywgYnl0ZXMpOworICAgIH0KKyAgICB2b2lkICB0bGZyZWUodm9pZCogbWVtKSB7IG1zcGFjZV9mcmVlKHRsbXMsIG1lbSk7IH0KKworICBVbmxlc3MgRk9PVEVSUyBpcyBkZWZpbmVkLCBlYWNoIG1zcGFjZSBpcyBjb21wbGV0ZWx5IGluZGVwZW5kZW50LgorICBZb3UgY2Fubm90IGFsbG9jYXRlIGZyb20gb25lIGFuZCBmcmVlIHRvIGFub3RoZXIgKGFsdGhvdWdoCisgIGNvbmZvcm1hbmNlIGlzIG9ubHkgd2Vha2x5IGNoZWNrZWQsIHNvIHVzYWdlIGVycm9ycyBhcmUgbm90IGFsd2F5cworICBjYXVnaHQpLiBJZiBGT09URVJTIGlzIGRlZmluZWQsIHRoZW4gZWFjaCBjaHVuayBjYXJyaWVzIGFyb3VuZCBhIHRhZworICBpbmRpY2F0aW5nIGl0cyBvcmlnaW5hdGluZyBtc3BhY2UsIGFuZCBmcmVlcyBhcmUgZGlyZWN0ZWQgdG8gdGhlaXIKKyAgb3JpZ2luYXRpbmcgc3BhY2VzLgorCisgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgQ29tcGlsZS10aW1lIG9wdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK0JlIGNhcmVmdWwgaW4gc2V0dGluZyAjZGVmaW5lIHZhbHVlcyBmb3IgbnVtZXJpY2FsIGNvbnN0YW50cyBvZiB0eXBlCitzaXplX3QuIE9uIHNvbWUgc3lzdGVtcywgbGl0ZXJhbCB2YWx1ZXMgYXJlIG5vdCBhdXRvbWF0aWNhbGx5IGV4dGVuZGVkCit0byBzaXplX3QgcHJlY2lzaW9uIHVubGVzcyB0aGV5IGFyZSBleHBsaWNpdGx5IGNhc3RlZC4KKworV0lOMzIgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgaWYgX1dJTjMyIGRlZmluZWQKKyAgRGVmaW5pbmcgV0lOMzIgc2V0cyB1cCBkZWZhdWx0cyBmb3IgTVMgZW52aXJvbm1lbnQgYW5kIGNvbXBpbGVycy4KKyAgT3RoZXJ3aXNlIGRlZmF1bHRzIGFyZSBmb3IgdW5peC4KKworTUFMTE9DX0FMSUdOTUVOVCAgICAgICAgIGRlZmF1bHQ6IChzaXplX3QpOAorICBDb250cm9scyB0aGUgbWluaW11bSBhbGlnbm1lbnQgZm9yIG1hbGxvYydlZCBjaHVua3MuICBJdCBtdXN0IGJlIGEKKyAgcG93ZXIgb2YgdHdvIGFuZCBhdCBsZWFzdCA4LCBldmVuIG9uIG1hY2hpbmVzIGZvciB3aGljaCBzbWFsbGVyCisgIGFsaWdubWVudHMgd291bGQgc3VmZmljZS4gSXQgbWF5IGJlIGRlZmluZWQgYXMgbGFyZ2VyIHRoYW4gdGhpcworICB0aG91Z2guIE5vdGUgaG93ZXZlciB0aGF0IGNvZGUgYW5kIGRhdGEgc3RydWN0dXJlcyBhcmUgb3B0aW1pemVkIGZvcgorICB0aGUgY2FzZSBvZiA4LWJ5dGUgYWxpZ25tZW50LgorCitNU1BBQ0VTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMCAoZmFsc2UpCisgIElmIHRydWUsIGNvbXBpbGUgaW4gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnQgYWxsb2NhdGlvbiBzcGFjZXMuCisgIFRoaXMgaXMgb25seSBzdXBwb3J0ZWQgaWYgSEFWRV9NTUFQIGlzIHRydWUuCisKK09OTFlfTVNQQUNFUyAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgSWYgdHJ1ZSwgb25seSBjb21waWxlIGluIG1zcGFjZSB2ZXJzaW9ucywgbm90IHJlZ3VsYXIgdmVyc2lvbnMuCisKK1VTRV9MT0NLUyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwIChmYWxzZSkKKyAgQ2F1c2VzIGVhY2ggY2FsbCB0byBlYWNoIHB1YmxpYyByb3V0aW5lIHRvIGJlIHN1cnJvdW5kZWQgd2l0aAorICBwdGhyZWFkIG9yIFdJTjMyIG11dGV4IGxvY2svdW5sb2NrLiAoSWYgc2V0IHRydWUsIHRoaXMgY2FuIGJlCisgIG92ZXJyaWRkZW4gb24gYSBwZXItbXNwYWNlIGJhc2lzIGZvciBtc3BhY2UgdmVyc2lvbnMuKQorCitGT09URVJTICAgICAgICAgICAgICAgICAgZGVmYXVsdDogMAorICBJZiB0cnVlLCBwcm92aWRlIGV4dHJhIGNoZWNraW5nIGFuZCBkaXNwYXRjaGluZyBieSBwbGFjaW5nCisgIGluZm9ybWF0aW9uIGluIHRoZSBmb290ZXJzIG9mIGFsbG9jYXRlZCBjaHVua3MuIFRoaXMgYWRkcworICBzcGFjZSBhbmQgdGltZSBvdmVyaGVhZC4KKworSU5TRUNVUkUgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IDAKKyAgSWYgdHJ1ZSwgb21pdCBjaGVja3MgZm9yIHVzYWdlIGVycm9ycyBhbmQgaGVhcCBzcGFjZSBvdmVyd3JpdGVzLgorCitVU0VfRExfUFJFRklYICAgICAgICAgICAgZGVmYXVsdDogTk9UIGRlZmluZWQKKyAgQ2F1c2VzIGNvbXBpbGVyIHRvIHByZWZpeCBhbGwgcHVibGljIHJvdXRpbmVzIHdpdGggdGhlIHN0cmluZyAnZGwnLgorICBUaGlzIGNhbiBiZSB1c2VmdWwgd2hlbiB5b3Ugb25seSB3YW50IHRvIHVzZSB0aGlzIG1hbGxvYyBpbiBvbmUgcGFydAorICBvZiBhIHByb2dyYW0sIHVzaW5nIHlvdXIgcmVndWxhciBzeXN0ZW0gbWFsbG9jIGVsc2V3aGVyZS4KKworQUJPUlQgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgYWJvcnQoKQorICBEZWZpbmVzIGhvdyB0byBhYm9ydCBvbiBmYWlsZWQgY2hlY2tzLiAgT24gbW9zdCBzeXN0ZW1zLCBhIGZhaWxlZAorICBjaGVjayBjYW5ub3QgZGllIHdpdGggYW4gImFzc2VydCIgb3IgZXZlbiBwcmludCBhbiBpbmZvcm1hdGl2ZQorICBtZXNzYWdlLCBiZWNhdXNlIHRoZSB1bmRlcmx5aW5nIHByaW50IHJvdXRpbmVzIGluIHR1cm4gY2FsbCBtYWxsb2MsCisgIHdoaWNoIHdpbGwgZmFpbCBhZ2Fpbi4gIEdlbmVyYWxseSwgdGhlIGJlc3QgcG9saWN5IGlzIHRvIHNpbXBseSBjYWxsCisgIGFib3J0KCkuIEl0J3Mgbm90IHZlcnkgdXNlZnVsIHRvIGRvIG1vcmUgdGhhbiB0aGlzIGJlY2F1c2UgbWFueQorICBlcnJvcnMgZHVlIHRvIG92ZXJ3cml0aW5nIHdpbGwgc2hvdyB1cCBhcyBhZGRyZXNzIGZhdWx0cyAobnVsbCwgb2RkCisgIGFkZHJlc3NlcyBldGMpIHJhdGhlciB0aGFuIG1hbGxvYy10cmlnZ2VyZWQgY2hlY2tzLCBzbyB3aWxsIGFsc28KKyAgYWJvcnQuICBBbHNvLCBtb3N0IGNvbXBpbGVycyBrbm93IHRoYXQgYWJvcnQoKSBkb2VzIG5vdCByZXR1cm4sIHNvCisgIGNhbiBiZXR0ZXIgb3B0aW1pemUgY29kZSBjb25kaXRpb25hbGx5IGNhbGxpbmcgaXQuCisKK1BST0NFRURfT05fRVJST1IgICAgICAgICAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMCAoZmFsc2UpCisgIENvbnRyb2xzIHdoZXRoZXIgZGV0ZWN0ZWQgYmFkIGFkZHJlc3NlcyBjYXVzZSB0aGVtIHRvIGJ5cGFzc2VkCisgIHJhdGhlciB0aGFuIGFib3J0aW5nLiBJZiBzZXQsIGRldGVjdGVkIGJhZCBhcmd1bWVudHMgdG8gZnJlZSBhbmQKKyAgcmVhbGxvYyBhcmUgaWdub3JlZC4gQW5kIGFsbCBib29ra2VlcGluZyBpbmZvcm1hdGlvbiBpcyB6ZXJvZWQgb3V0CisgIHVwb24gYSBkZXRlY3RlZCBvdmVyd3JpdGUgb2YgZnJlZWQgaGVhcCBzcGFjZSwgdGh1cyBsb3NpbmcgdGhlCisgIGFiaWxpdHkgdG8gZXZlciByZXR1cm4gaXQgZnJvbSBtYWxsb2MgYWdhaW4sIGJ1dCBlbmFibGluZyB0aGUKKyAgYXBwbGljYXRpb24gdG8gcHJvY2VlZC4gSWYgUFJPQ0VFRF9PTl9FUlJPUiBpcyBkZWZpbmVkLCB0aGUKKyAgc3RhdGljIHZhcmlhYmxlIG1hbGxvY19jb3JydXB0aW9uX2Vycm9yX2NvdW50IGlzIGNvbXBpbGVkIGluCisgIGFuZCBjYW4gYmUgZXhhbWluZWQgdG8gc2VlIGlmIGVycm9ycyBoYXZlIG9jY3VycmVkLiBUaGlzIG9wdGlvbgorICBnZW5lcmF0ZXMgc2xvd2VyIGNvZGUgdGhhbiB0aGUgZGVmYXVsdCBhYm9ydCBwb2xpY3kuCisKK0RFQlVHICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OiBOT1QgZGVmaW5lZAorICBUaGUgREVCVUcgc2V0dGluZyBpcyBtYWlubHkgaW50ZW5kZWQgZm9yIHBlb3BsZSB0cnlpbmcgdG8gbW9kaWZ5CisgIHRoaXMgY29kZSBvciBkaWFnbm9zZSBwcm9ibGVtcyB3aGVuIHBvcnRpbmcgdG8gbmV3IHBsYXRmb3Jtcy4KKyAgSG93ZXZlciwgaXQgbWF5IGFsc28gYmUgYWJsZSB0byBiZXR0ZXIgaXNvbGF0ZSB1c2VyIGVycm9ycyB0aGFuIGp1c3QKKyAgdXNpbmcgcnVudGltZSBjaGVja3MuICBUaGUgYXNzZXJ0aW9ucyBpbiB0aGUgY2hlY2sgcm91dGluZXMgc3BlbGwKKyAgb3V0IGluIG1vcmUgZGV0YWlsIHRoZSBhc3N1bXB0aW9ucyBhbmQgaW52YXJpYW50cyB1bmRlcmx5aW5nIHRoZQorICBhbGdvcml0aG1zLiAgVGhlIGNoZWNraW5nIGlzIGZhaXJseSBleHRlbnNpdmUsIGFuZCB3aWxsIHNsb3cgZG93bgorICBleGVjdXRpb24gbm90aWNlYWJseS4gQ2FsbGluZyBtYWxsb2Nfc3RhdHMgb3IgbWFsbGluZm8gd2l0aCBERUJVRworICBzZXQgd2lsbCBhdHRlbXB0IHRvIGNoZWNrIGV2ZXJ5IG5vbi1tbWFwcGVkIGFsbG9jYXRlZCBhbmQgZnJlZSBjaHVuaworICBpbiB0aGUgY291cnNlIG9mIGNvbXB1dGluZyB0aGUgc3VtbWFyaWVzLgorCitBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAgIGRlZmF1bHQ6IGRlZmluZWQgYXMgMSAodHJ1ZSkKKyAgRGVidWdnaW5nIGFzc2VydGlvbiBmYWlsdXJlcyBjYW4gYmUgbmVhcmx5IGltcG9zc2libGUgaWYgeW91cgorICB2ZXJzaW9uIG9mIHRoZSBhc3NlcnQgbWFjcm8gY2F1c2VzIG1hbGxvYyB0byBiZSBjYWxsZWQsIHdoaWNoIHdpbGwKKyAgbGVhZCB0byBhIGNhc2NhZGUgb2YgZnVydGhlciBmYWlsdXJlcywgYmxvd2luZyB0aGUgcnVudGltZSBzdGFjay4KKyAgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUgY2F1c2UgYXNzZXJ0aW9ucyBmYWlsdXJlcyB0byBjYWxsIGFib3J0KCksCisgIHdoaWNoIHdpbGwgdXN1YWxseSBtYWtlIGRlYnVnZ2luZyBlYXNpZXIuCisKK01BTExPQ19GQUlMVVJFX0FDVElPTiAgICAgZGVmYXVsdDogc2V0cyBlcnJubyB0byBFTk9NRU0sIG9yIG5vLW9wIG9uIHdpbjMyCisgIFRoZSBhY3Rpb24gdG8gdGFrZSBiZWZvcmUgInJldHVybiAwIiB3aGVuIG1hbGxvYyBmYWlscyB0byBiZSBhYmxlIHRvCisgIHJldHVybiBtZW1vcnkgYmVjYXVzZSB0aGVyZSBpcyBub25lIGF2YWlsYWJsZS4KKworSEFWRV9NT1JFQ09SRSAgICAgICAgICAgICBkZWZhdWx0OiAxICh0cnVlKSB1bmxlc3Mgd2luMzIgb3IgT05MWV9NU1BBQ0VTCisgIFRydWUgaWYgdGhpcyBzeXN0ZW0gc3VwcG9ydHMgc2JyayBvciBhbiBlbXVsYXRpb24gb2YgaXQuCisKK01PUkVDT1JFICAgICAgICAgICAgICAgICAgZGVmYXVsdDogc2JyaworICBUaGUgbmFtZSBvZiB0aGUgc2Jyay1zdHlsZSBzeXN0ZW0gcm91dGluZSB0byBjYWxsIHRvIG9idGFpbiBtb3JlCisgIG1lbW9yeS4gIFNlZSBiZWxvdyBmb3IgZ3VpZGFuY2Ugb24gd3JpdGluZyBjdXN0b20gTU9SRUNPUkUKKyAgZnVuY3Rpb25zLiBUaGUgdHlwZSBvZiB0aGUgYXJndW1lbnQgdG8gc2Jyay9NT1JFQ09SRSB2YXJpZXMgYWNyb3NzCisgIHN5c3RlbXMuICBJdCBjYW5ub3QgYmUgc2l6ZV90LCBiZWNhdXNlIGl0IHN1cHBvcnRzIG5lZ2F0aXZlCisgIGFyZ3VtZW50cywgc28gaXQgaXMgbm9ybWFsbHkgdGhlIHNpZ25lZCB0eXBlIG9mIHRoZSBzYW1lIHdpZHRoIGFzCisgIHNpemVfdCAoc29tZXRpbWVzIGRlY2xhcmVkIGFzICJpbnRwdHJfdCIpLiAgSXQgZG9lc24ndCBtdWNoIG1hdHRlcgorICB0aG91Z2guIEludGVybmFsbHksIHdlIG9ubHkgY2FsbCBpdCB3aXRoIGFyZ3VtZW50cyBsZXNzIHRoYW4gaGFsZgorICB0aGUgbWF4IHZhbHVlIG9mIGEgc2l6ZV90LCB3aGljaCBzaG91bGQgd29yayBhY3Jvc3MgYWxsIHJlYXNvbmFibGUKKyAgcG9zc2liaWxpdGllcywgYWx0aG91Z2ggc29tZXRpbWVzIGdlbmVyYXRpbmcgY29tcGlsZXIgd2FybmluZ3MuICBTZWUKKyAgbmVhciB0aGUgZW5kIG9mIHRoaXMgZmlsZSBmb3IgZ3VpZGVsaW5lcyBmb3IgY3JlYXRpbmcgYSBjdXN0b20KKyAgdmVyc2lvbiBvZiBNT1JFQ09SRS4KKworTU9SRUNPUkVfQ09OVElHVU9VUyAgICAgICBkZWZhdWx0OiAxICh0cnVlKQorICBJZiB0cnVlLCB0YWtlIGFkdmFudGFnZSBvZiBmYWN0IHRoYXQgY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUKKyAgd2l0aCBwb3NpdGl2ZSBhcmd1bWVudHMgYWx3YXlzIHJldHVybiBjb250aWd1b3VzIGluY3JlYXNpbmcKKyAgYWRkcmVzc2VzLiAgVGhpcyBpcyB0cnVlIG9mIHVuaXggc2Jyay4gSXQgZG9lcyBub3QgaHVydCB0b28gbXVjaCB0bworICBzZXQgaXQgdHJ1ZSBhbnl3YXksIHNpbmNlIG1hbGxvYyBjb3BlcyB3aXRoIG5vbi1jb250aWd1aXRpZXMuCisgIFNldHRpbmcgaXQgZmFsc2Ugd2hlbiBkZWZpbml0ZWx5IG5vbi1jb250aWd1b3VzIHNhdmVzIHRpbWUKKyAgYW5kIHBvc3NpYmx5IHdhc3RlZCBzcGFjZSBpdCB3b3VsZCB0YWtlIHRvIGRpc2NvdmVyIHRoaXMgdGhvdWdoLgorCitNT1JFQ09SRV9DQU5OT1RfVFJJTSAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkCisgIFRydWUgaWYgTU9SRUNPUkUgY2Fubm90IHJlbGVhc2Ugc3BhY2UgYmFjayB0byB0aGUgc3lzdGVtIHdoZW4gZ2l2ZW4KKyAgbmVnYXRpdmUgYXJndW1lbnRzLiBUaGlzIGlzIGdlbmVyYWxseSBuZWNlc3Nhcnkgb25seSBpZiB5b3UgYXJlCisgIHVzaW5nIGEgaGFuZC1jcmFmdGVkIE1PUkVDT1JFIGZ1bmN0aW9uIHRoYXQgY2Fubm90IGhhbmRsZSBuZWdhdGl2ZQorICBhcmd1bWVudHMuCisKK0hBVkVfTU1BUCAgICAgICAgICAgICAgICAgZGVmYXVsdDogMSAodHJ1ZSkKKyAgVHJ1ZSBpZiB0aGlzIHN5c3RlbSBzdXBwb3J0cyBtbWFwIG9yIGFuIGVtdWxhdGlvbiBvZiBpdC4gIElmIHNvLCBhbmQKKyAgSEFWRV9NT1JFQ09SRSBpcyBub3QgdHJ1ZSwgTU1BUCBpcyB1c2VkIGZvciBhbGwgc3lzdGVtCisgIGFsbG9jYXRpb24uIElmIHNldCBhbmQgSEFWRV9NT1JFQ09SRSBpcyB0cnVlIGFzIHdlbGwsIE1NQVAgaXMKKyAgcHJpbWFyaWx5IHVzZWQgdG8gZGlyZWN0bHkgYWxsb2NhdGUgdmVyeSBsYXJnZSBibG9ja3MuIEl0IGlzIGFsc28KKyAgdXNlZCBhcyBhIGJhY2t1cCBzdHJhdGVneSBpbiBjYXNlcyB3aGVyZSBNT1JFQ09SRSBmYWlscyB0byBwcm92aWRlCisgIHNwYWNlIGZyb20gc3lzdGVtLiBOb3RlOiBBIHNpbmdsZSBjYWxsIHRvIE1VTk1BUCBpcyBhc3N1bWVkIHRvIGJlCisgIGFibGUgdG8gdW5tYXAgbWVtb3J5IHRoYXQgbWF5IGhhdmUgYmUgYWxsb2NhdGVkIHVzaW5nIG11bHRpcGxlIGNhbGxzCisgIHRvIE1NQVAsIHNvIGxvbmcgYXMgdGhleSBhcmUgYWRqYWNlbnQuCisKK0hBVkVfTVJFTUFQICAgICAgICAgICAgICAgZGVmYXVsdDogMSBvbiBsaW51eCwgZWxzZSAwCisgIElmIHRydWUgcmVhbGxvYygpIHVzZXMgbXJlbWFwKCkgdG8gcmUtYWxsb2NhdGUgbGFyZ2UgYmxvY2tzIGFuZAorICBleHRlbmQgb3Igc2hyaW5rIGFsbG9jYXRpb24gc3BhY2VzLgorCitNTUFQX0NMRUFSUyAgICAgICAgICAgICAgIGRlZmF1bHQ6IDEgb24gdW5peAorICBUcnVlIGlmIG1tYXAgY2xlYXJzIG1lbW9yeSBzbyBjYWxsb2MgZG9lc24ndCBuZWVkIHRvLiBUaGlzIGlzIHRydWUKKyAgZm9yIHN0YW5kYXJkIHVuaXggbW1hcCB1c2luZyAvZGV2L3plcm8uCisKK1VTRV9CVUlMVElOX0ZGUyAgICAgICAgICAgIGRlZmF1bHQ6IDAgKGkuZS4sIG5vdCB1c2VkKQorICBDYXVzZXMgbWFsbG9jIHRvIHVzZSB0aGUgYnVpbHRpbiBmZnMoKSBmdW5jdGlvbiB0byBjb21wdXRlIGluZGljZXMuCisgIFNvbWUgY29tcGlsZXJzIG1heSByZWNvZ25pemUgYW5kIGludHJpbnNpZnkgZmZzIHRvIGJlIGZhc3RlciB0aGFuIHRoZQorICBzdXBwbGllZCBDIHZlcnNpb24uIEFsc28sIHRoZSBjYXNlIG9mIHg4NiB1c2luZyBnY2MgaXMgc3BlY2lhbC1jYXNlZAorICB0byBhbiBhc20gaW5zdHJ1Y3Rpb24sIHNvIGlzIGFscmVhZHkgYXMgZmFzdCBhcyBpdCBjYW4gYmUsIGFuZCBzbworICB0aGlzIHNldHRpbmcgaGFzIG5vIGVmZmVjdC4gKE9uIG1vc3QgeDg2cywgdGhlIGFzbSB2ZXJzaW9uIGlzIG9ubHkKKyAgc2xpZ2h0bHkgZmFzdGVyIHRoYW4gdGhlIEMgdmVyc2lvbi4pCisKK21hbGxvY19nZXRwYWdlc2l6ZSAgICAgICAgIGRlZmF1bHQ6IGRlcml2ZSBmcm9tIHN5c3RlbSBpbmNsdWRlcywgb3IgNDA5Ni4KKyAgVGhlIHN5c3RlbSBwYWdlIHNpemUuIFRvIHRoZSBleHRlbnQgcG9zc2libGUsIHRoaXMgbWFsbG9jIG1hbmFnZXMKKyAgbWVtb3J5IGZyb20gdGhlIHN5c3RlbSBpbiBwYWdlLXNpemUgdW5pdHMuICBUaGlzIG1heSBiZSAoYW5kCisgIHVzdWFsbHkgaXMpIGEgZnVuY3Rpb24gcmF0aGVyIHRoYW4gYSBjb25zdGFudC4gVGhpcyBpcyBpZ25vcmVkCisgIGlmIFdJTjMyLCB3aGVyZSBwYWdlIHNpemUgaXMgZGV0ZXJtaW5lZCB1c2luZyBnZXRTeXN0ZW1JbmZvIGR1cmluZworICBpbml0aWFsaXphdGlvbi4KKworVVNFX0RFVl9SQU5ET00gICAgICAgICAgICAgZGVmYXVsdDogMCAoaS5lLiwgbm90IHVzZWQpCisgIENhdXNlcyBtYWxsb2MgdG8gdXNlIC9kZXYvcmFuZG9tIHRvIGluaXRpYWxpemUgc2VjdXJlIG1hZ2ljIHNlZWQgZm9yCisgIHN0YW1waW5nIGZvb3RlcnMuIE90aGVyd2lzZSwgdGhlIGN1cnJlbnQgdGltZSBpcyB1c2VkLgorCitOT19NQUxMSU5GTyAgICAgICAgICAgICAgICBkZWZhdWx0OiAwCisgIElmIGRlZmluZWQsIGRvbid0IGNvbXBpbGUgIm1hbGxpbmZvIi4gVGhpcyBjYW4gYmUgYSBzaW1wbGUgd2F5CisgIG9mIGRlYWxpbmcgd2l0aCBtaXNtYXRjaGVzIGJldHdlZW4gc3lzdGVtIGRlY2xhcmF0aW9ucyBhbmQKKyAgdGhvc2UgaW4gdGhpcyBmaWxlLgorCitNQUxMSU5GT19GSUVMRF9UWVBFICAgICAgICBkZWZhdWx0OiBzaXplX3QKKyAgVGhlIHR5cGUgb2YgdGhlIGZpZWxkcyBpbiB0aGUgbWFsbGluZm8gc3RydWN0LiBUaGlzIHdhcyBvcmlnaW5hbGx5CisgIGRlZmluZWQgYXMgImludCIgaW4gU1ZJRCBldGMsIGJ1dCBpcyBtb3JlIHVzZWZ1bGx5IGRlZmluZWQgYXMKKyAgc2l6ZV90LiBUaGUgdmFsdWUgaXMgdXNlZCBvbmx5IGlmICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIGlzIG5vdCBzZXQKKworUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICAgIGRlZmF1bHQ6IG5vdCBkZWZpbmVkCisgIFRoaXMgc2hvdWxkIGJlIHNldCBpZiBhIGNhbGwgdG8gcmVhbGxvYyB3aXRoIHplcm8gYnl0ZXMgc2hvdWxkIAorICBiZSB0aGUgc2FtZSBhcyBhIGNhbGwgdG8gZnJlZS4gU29tZSBwZW9wbGUgdGhpbmsgaXQgc2hvdWxkLiBPdGhlcndpc2UsIAorICBzaW5jZSB0aGlzIG1hbGxvYyByZXR1cm5zIGEgdW5pcXVlIHBvaW50ZXIgZm9yIG1hbGxvYygwKSwgc28gZG9lcyAKKyAgcmVhbGxvYyhwLCAwKS4KKworTEFDS1NfVU5JU1REX0gsIExBQ0tTX0ZDTlRMX0gsIExBQ0tTX1NZU19QQVJBTV9ILCBMQUNLU19TWVNfTU1BTl9ICitMQUNLU19TVFJJTkdTX0gsIExBQ0tTX1NUUklOR19ILCBMQUNLU19TWVNfVFlQRVNfSCwgIExBQ0tTX0VSUk5PX0gKK0xBQ0tTX1NURExJQl9IICAgICAgICAgICAgICAgIGRlZmF1bHQ6IE5PVCBkZWZpbmVkIHVubGVzcyBvbiBXSU4zMgorICBEZWZpbmUgdGhlc2UgaWYgeW91ciBzeXN0ZW0gZG9lcyBub3QgaGF2ZSB0aGVzZSBoZWFkZXIgZmlsZXMuCisgIFlvdSBtaWdodCBuZWVkIHRvIG1hbnVhbGx5IGluc2VydCBzb21lIG9mIHRoZSBkZWNsYXJhdGlvbnMgdGhleSBwcm92aWRlLgorCitERUZBVUxUX0dSQU5VTEFSSVRZICAgICAgICBkZWZhdWx0OiBwYWdlIHNpemUgaWYgTU9SRUNPUkVfQ09OVElHVU9VUywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3lzdGVtX2luZm8uZHdBbGxvY2F0aW9uR3JhbnVsYXJpdHkgaW4gV0lOMzIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSA2NEsuCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgeCkKKyAgVGhlIHVuaXQgZm9yIGFsbG9jYXRpbmcgYW5kIGRlYWxsb2NhdGluZyBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLiAgT24KKyAgbW9zdCBzeXN0ZW1zIHdpdGggY29udGlndW91cyBNT1JFQ09SRSwgdGhlcmUgaXMgbm8gcmVhc29uIHRvCisgIG1ha2UgdGhpcyBtb3JlIHRoYW4gYSBwYWdlLiBIb3dldmVyLCBzeXN0ZW1zIHdpdGggTU1BUCB0ZW5kIHRvCisgIGVpdGhlciByZXF1aXJlIG9yIGVuY291cmFnZSBsYXJnZXIgZ3JhbnVsYXJpdGllcy4gIFlvdSBjYW4gaW5jcmVhc2UKKyAgdGhpcyB2YWx1ZSB0byBwcmV2ZW50IHN5c3RlbSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyB0byBiZSBjYWxsZWQgc28KKyAgb2Z0ZW4sIGVzcGVjaWFsbHkgaWYgdGhleSBhcmUgc2xvdy4gIFRoZSB2YWx1ZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICBwYWdlIGFuZCBtdXN0IGJlIGEgcG93ZXIgb2YgdHdvLiAgU2V0dGluZyB0byAwIGNhdXNlcyBpbml0aWFsaXphdGlvbgorICB0byBlaXRoZXIgcGFnZSBzaXplIG9yIHdpbjMyIHJlZ2lvbiBzaXplLiAgKE5vdGU6IEluIHByZXZpb3VzCisgIHZlcnNpb25zIG9mIG1hbGxvYywgdGhlIGVxdWl2YWxlbnQgb2YgdGhpcyBvcHRpb24gd2FzIGNhbGxlZAorICAiVE9QX1BBRCIpCisKK0RFRkFVTFRfVFJJTV9USFJFU0hPTEQgICAgZGVmYXVsdDogMk1CCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9UUklNX1RIUkVTSE9MRCwgeCkKKyAgVGhlIG1heGltdW0gYW1vdW50IG9mIHVudXNlZCB0b3AtbW9zdCBtZW1vcnkgdG8ga2VlcCBiZWZvcmUKKyAgcmVsZWFzaW5nIHZpYSBtYWxsb2NfdHJpbSBpbiBmcmVlKCkuICBBdXRvbWF0aWMgdHJpbW1pbmcgaXMgbWFpbmx5CisgIHVzZWZ1bCBpbiBsb25nLWxpdmVkIHByb2dyYW1zIHVzaW5nIGNvbnRpZ3VvdXMgTU9SRUNPUkUuICBCZWNhdXNlCisgIHRyaW1taW5nIHZpYSBzYnJrIGNhbiBiZSBzbG93IG9uIHNvbWUgc3lzdGVtcywgYW5kIGNhbiBzb21ldGltZXMgYmUKKyAgd2FzdGVmdWwgKGluIGNhc2VzIHdoZXJlIHByb2dyYW1zIGltbWVkaWF0ZWx5IGFmdGVyd2FyZCBhbGxvY2F0ZQorICBtb3JlIGxhcmdlIGNodW5rcykgdGhlIHZhbHVlIHNob3VsZCBiZSBoaWdoIGVub3VnaCBzbyB0aGF0IHlvdXIKKyAgb3ZlcmFsbCBzeXN0ZW0gcGVyZm9ybWFuY2Ugd291bGQgaW1wcm92ZSBieSByZWxlYXNpbmcgdGhpcyBtdWNoCisgIG1lbW9yeS4gIEFzIGEgcm91Z2ggZ3VpZGUsIHlvdSBtaWdodCBzZXQgdG8gYSB2YWx1ZSBjbG9zZSB0byB0aGUKKyAgYXZlcmFnZSBzaXplIG9mIGEgcHJvY2VzcyAocHJvZ3JhbSkgcnVubmluZyBvbiB5b3VyIHN5c3RlbS4KKyAgUmVsZWFzaW5nIHRoaXMgbXVjaCBtZW1vcnkgd291bGQgYWxsb3cgc3VjaCBhIHByb2Nlc3MgdG8gcnVuIGluCisgIG1lbW9yeS4gIEdlbmVyYWxseSwgaXQgaXMgd29ydGggdHVuaW5nIHRyaW0gdGhyZXNob2xkcyB3aGVuIGEKKyAgcHJvZ3JhbSB1bmRlcmdvZXMgcGhhc2VzIHdoZXJlIHNldmVyYWwgbGFyZ2UgY2h1bmtzIGFyZSBhbGxvY2F0ZWQKKyAgYW5kIHJlbGVhc2VkIGluIHdheXMgdGhhdCBjYW4gcmV1c2UgZWFjaCBvdGhlcidzIHN0b3JhZ2UsIHBlcmhhcHMKKyAgbWl4ZWQgd2l0aCBwaGFzZXMgd2hlcmUgdGhlcmUgYXJlIG5vIHN1Y2ggY2h1bmtzIGF0IGFsbC4gVGhlIHRyaW0KKyAgdmFsdWUgbXVzdCBiZSBncmVhdGVyIHRoYW4gcGFnZSBzaXplIHRvIGhhdmUgYW55IHVzZWZ1bCBlZmZlY3QuICBUbworICBkaXNhYmxlIHRyaW1taW5nIGNvbXBsZXRlbHksIHlvdSBjYW4gc2V0IHRvIE1BWF9TSVpFX1QuIE5vdGUgdGhhdCB0aGUgdHJpY2sKKyAgc29tZSBwZW9wbGUgdXNlIG9mIG1hbGxvY2luZyBhIGh1Z2Ugc3BhY2UgYW5kIHRoZW4gZnJlZWluZyBpdCBhdAorICBwcm9ncmFtIHN0YXJ0dXAsIGluIGFuIGF0dGVtcHQgdG8gcmVzZXJ2ZSBzeXN0ZW0gbWVtb3J5LCBkb2Vzbid0CisgIGhhdmUgdGhlIGludGVuZGVkIGVmZmVjdCB1bmRlciBhdXRvbWF0aWMgdHJpbW1pbmcsIHNpbmNlIHRoYXQgbWVtb3J5CisgIHdpbGwgaW1tZWRpYXRlbHkgYmUgcmV0dXJuZWQgdG8gdGhlIHN5c3RlbS4KKworREVGQVVMVF9NTUFQX1RIUkVTSE9MRCAgICAgICBkZWZhdWx0OiAyNTZLCisgICAgICBBbHNvIHNldHRhYmxlIHVzaW5nIG1hbGxvcHQoTV9NTUFQX1RIUkVTSE9MRCwgeCkKKyAgVGhlIHJlcXVlc3Qgc2l6ZSB0aHJlc2hvbGQgZm9yIHVzaW5nIE1NQVAgdG8gZGlyZWN0bHkgc2VydmljZSBhCisgIHJlcXVlc3QuIFJlcXVlc3RzIG9mIGF0IGxlYXN0IHRoaXMgc2l6ZSB0aGF0IGNhbm5vdCBiZSBhbGxvY2F0ZWQKKyAgdXNpbmcgYWxyZWFkeS1leGlzdGluZyBzcGFjZSB3aWxsIGJlIHNlcnZpY2VkIHZpYSBtbWFwLiAgKElmIGVub3VnaAorICBub3JtYWwgZnJlZWQgc3BhY2UgYWxyZWFkeSBleGlzdHMgaXQgaXMgdXNlZCBpbnN0ZWFkLikgIFVzaW5nIG1tYXAKKyAgc2VncmVnYXRlcyByZWxhdGl2ZWx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkgc28gdGhhdCB0aGV5IGNhbiBiZQorICBpbmRpdmlkdWFsbHkgb2J0YWluZWQgYW5kIHJlbGVhc2VkIGZyb20gdGhlIGhvc3Qgc3lzdGVtLiBBIHJlcXVlc3QKKyAgc2VydmljZWQgdGhyb3VnaCBtbWFwIGlzIG5ldmVyIHJldXNlZCBieSBhbnkgb3RoZXIgcmVxdWVzdCAoYXQgbGVhc3QKKyAgbm90IGRpcmVjdGx5OyB0aGUgc3lzdGVtIG1heSBqdXN0IHNvIGhhcHBlbiB0byByZW1hcCBzdWNjZXNzaXZlCisgIHJlcXVlc3RzIHRvIHRoZSBzYW1lIGxvY2F0aW9ucykuICBTZWdyZWdhdGluZyBzcGFjZSBpbiB0aGlzIHdheSBoYXMKKyAgdGhlIGJlbmVmaXRzIHRoYXQ6IE1tYXBwZWQgc3BhY2UgY2FuIGFsd2F5cyBiZSBpbmRpdmlkdWFsbHkgcmVsZWFzZWQKKyAgYmFjayB0byB0aGUgc3lzdGVtLCB3aGljaCBoZWxwcyBrZWVwIHRoZSBzeXN0ZW0gbGV2ZWwgbWVtb3J5IGRlbWFuZHMKKyAgb2YgYSBsb25nLWxpdmVkIHByb2dyYW0gbG93LiAgQWxzbywgbWFwcGVkIG1lbW9yeSBkb2Vzbid0IGJlY29tZQorICBgbG9ja2VkJyBiZXR3ZWVuIG90aGVyIGNodW5rcywgYXMgY2FuIGhhcHBlbiB3aXRoIG5vcm1hbGx5IGFsbG9jYXRlZAorICBjaHVua3MsIHdoaWNoIG1lYW5zIHRoYXQgZXZlbiB0cmltbWluZyB2aWEgbWFsbG9jX3RyaW0gd291bGQgbm90CisgIHJlbGVhc2UgdGhlbS4gIEhvd2V2ZXIsIGl0IGhhcyB0aGUgZGlzYWR2YW50YWdlIHRoYXQgdGhlIHNwYWNlCisgIGNhbm5vdCBiZSByZWNsYWltZWQsIGNvbnNvbGlkYXRlZCwgYW5kIHRoZW4gdXNlZCB0byBzZXJ2aWNlIGxhdGVyCisgIHJlcXVlc3RzLCBhcyBoYXBwZW5zIHdpdGggbm9ybWFsIGNodW5rcy4gIFRoZSBhZHZhbnRhZ2VzIG9mIG1tYXAKKyAgbmVhcmx5IGFsd2F5cyBvdXR3ZWlnaCBkaXNhZHZhbnRhZ2VzIGZvciAibGFyZ2UiIGNodW5rcywgYnV0IHRoZQorICB2YWx1ZSBvZiAibGFyZ2UiIG1heSB2YXJ5IGFjcm9zcyBzeXN0ZW1zLiAgVGhlIGRlZmF1bHQgaXMgYW4KKyAgZW1waXJpY2FsbHkgZGVyaXZlZCB2YWx1ZSB0aGF0IHdvcmtzIHdlbGwgaW4gbW9zdCBzeXN0ZW1zLiBZb3UgY2FuCisgIGRpc2FibGUgbW1hcCBieSBzZXR0aW5nIHRvIE1BWF9TSVpFX1QuCisKKyovCisKKyNpZm5kZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKyNkZWZpbmUgV0lOMzIgMQorI2VuZGlmICAvKiBfV0lOMzIgKi8KKyNlbmRpZiAgLyogV0lOMzIgKi8KKyNpZmRlZiBXSU4zMgorI2RlZmluZSBXSU4zMl9MRUFOX0FORF9NRUFOCisjaW5jbHVkZSA8d2luZG93cy5oPgorI2RlZmluZSBIQVZFX01NQVAgMQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgTEFDS1NfVU5JU1REX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1BBUkFNX0gKKyNkZWZpbmUgTEFDS1NfU1lTX01NQU5fSAorI2RlZmluZSBMQUNLU19TVFJJTkdfSAorI2RlZmluZSBMQUNLU19TVFJJTkdTX0gKKyNkZWZpbmUgTEFDS1NfU1lTX1RZUEVTX0gKKyNkZWZpbmUgTEFDS1NfRVJSTk9fSAorI2RlZmluZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTU1BUF9DTEVBUlMgMCAvKiBXSU5DRSBhbmQgc29tZSBvdGhlcnMgYXBwYXJlbnRseSBkb24ndCBjbGVhciAqLworI2VuZGlmICAvKiBXSU4zMiAqLworCisjaWYgZGVmaW5lZChEQVJXSU4pIHx8IGRlZmluZWQoX0RBUldJTikKKy8qIE1hYyBPU1ggZG9jcyBhZHZpc2Ugbm90IHRvIHVzZSBzYnJrOyBpdCBzZWVtcyBiZXR0ZXIgdG8gdXNlIG1tYXAgKi8KKyNpZm5kZWYgSEFWRV9NT1JFQ09SRQorI2RlZmluZSBIQVZFX01PUkVDT1JFIDAKKyNkZWZpbmUgSEFWRV9NTUFQIDEKKyNlbmRpZiAgLyogSEFWRV9NT1JFQ09SRSAqLworI2VuZGlmICAvKiBEQVJXSU4gKi8KKworI2lmbmRlZiBMQUNLU19TWVNfVFlQRVNfSAorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgLyogRm9yIHNpemVfdCAqLworI2VuZGlmICAvKiBMQUNLU19TWVNfVFlQRVNfSCAqLworCisvKiBUaGUgbWF4aW11bSBwb3NzaWJsZSBzaXplX3QgdmFsdWUgaGFzIGFsbCBiaXRzIHNldCAqLworI2RlZmluZSBNQVhfU0laRV9UICAgICAgICAgICAofihzaXplX3QpMCkKKworI2lmbmRlZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgT05MWV9NU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjaWZuZGVmIE1TUEFDRVMKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgTVNQQUNFUyAxCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBNU1BBQ0VTIDAKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIE1TUEFDRVMgKi8KKyNpZm5kZWYgTUFMTE9DX0FMSUdOTUVOVAorI2RlZmluZSBNQUxMT0NfQUxJR05NRU5UICgoc2l6ZV90KThVKQorI2VuZGlmICAvKiBNQUxMT0NfQUxJR05NRU5UICovCisjaWZuZGVmIEZPT1RFUlMKKyNkZWZpbmUgRk9PVEVSUyAwCisjZW5kaWYgIC8qIEZPT1RFUlMgKi8KKyNpZm5kZWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorI2RlZmluZSBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UIDAKKyNlbmRpZgorI2lmbmRlZiBBQk9SVAorI2RlZmluZSBBQk9SVCAgYWJvcnQoKQorI2VuZGlmICAvKiBBQk9SVCAqLworI2lmbmRlZiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRQorI2RlZmluZSBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAxCisjZW5kaWYgIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjaWZuZGVmIFBST0NFRURfT05fRVJST1IKKyNkZWZpbmUgUFJPQ0VFRF9PTl9FUlJPUiAwCisjZW5kaWYgIC8qIFBST0NFRURfT05fRVJST1IgKi8KKyNpZm5kZWYgVVNFX0xPQ0tTCisjZGVmaW5lIFVTRV9MT0NLUyAwCisjZW5kaWYgIC8qIFVTRV9MT0NLUyAqLworI2lmbmRlZiBJTlNFQ1VSRQorI2RlZmluZSBJTlNFQ1VSRSAwCisjZW5kaWYgIC8qIElOU0VDVVJFICovCisjaWZuZGVmIEhBVkVfTU1BUAorI2RlZmluZSBIQVZFX01NQVAgMQorI2VuZGlmICAvKiBIQVZFX01NQVAgKi8KKyNpZm5kZWYgTU1BUF9DTEVBUlMKKyNkZWZpbmUgTU1BUF9DTEVBUlMgMQorI2VuZGlmICAvKiBNTUFQX0NMRUFSUyAqLworI2lmbmRlZiBIQVZFX01SRU1BUAorI2lmZGVmIGxpbnV4CisjZGVmaW5lIEhBVkVfTVJFTUFQIDEKKyNlbHNlICAgLyogbGludXggKi8KKyNkZWZpbmUgSEFWRV9NUkVNQVAgMAorI2VuZGlmICAvKiBsaW51eCAqLworI2VuZGlmICAvKiBIQVZFX01SRU1BUCAqLworI2lmbmRlZiBNQUxMT0NfRkFJTFVSRV9BQ1RJT04KKyNkZWZpbmUgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICBlcnJubyA9IEVOT01FTTsKKyNlbmRpZiAgLyogTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjaWZuZGVmIEhBVkVfTU9SRUNPUkUKKyNpZiBPTkxZX01TUEFDRVMKKyNkZWZpbmUgSEFWRV9NT1JFQ09SRSAwCisjZWxzZSAgIC8qIE9OTFlfTVNQQUNFUyAqLworI2RlZmluZSBIQVZFX01PUkVDT1JFIDEKKyNlbmRpZiAgLyogT05MWV9NU1BBQ0VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZiAhSEFWRV9NT1JFQ09SRQorI2RlZmluZSBNT1JFQ09SRV9DT05USUdVT1VTIDAKKyNlbHNlICAgLyogIUhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgTU9SRUNPUkUKKyNkZWZpbmUgTU9SRUNPUkUgc2JyaworI2VuZGlmICAvKiBNT1JFQ09SRSAqLworI2lmbmRlZiBNT1JFQ09SRV9DT05USUdVT1VTCisjZGVmaW5lIE1PUkVDT1JFX0NPTlRJR1VPVVMgMQorI2VuZGlmICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisjZW5kaWYgIC8qIEhBVkVfTU9SRUNPUkUgKi8KKyNpZm5kZWYgREVGQVVMVF9HUkFOVUxBUklUWQorI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyNkZWZpbmUgREVGQVVMVF9HUkFOVUxBUklUWSAoMCkgIC8qIDAgbWVhbnMgdG8gY29tcHV0ZSBpbiBpbml0X21wYXJhbXMgKi8KKyNlbHNlICAgLyogTU9SRUNPUkVfQ09OVElHVU9VUyAqLworI2RlZmluZSBERUZBVUxUX0dSQU5VTEFSSVRZICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKyNlbmRpZiAgLyogREVGQVVMVF9HUkFOVUxBUklUWSAqLworI2lmbmRlZiBERUZBVUxUX1RSSU1fVEhSRVNIT0xECisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKChzaXplX3QpMlUgKiAoc2l6ZV90KTEwMjRVICogKHNpemVfdCkxMDI0VSkKKyNlbHNlICAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgREVGQVVMVF9UUklNX1RIUkVTSE9MRCBNQVhfU0laRV9UCisjZW5kaWYgIC8qIE1PUkVDT1JFX0NBTk5PVF9UUklNICovCisjZW5kaWYgIC8qIERFRkFVTFRfVFJJTV9USFJFU0hPTEQgKi8KKyNpZm5kZWYgREVGQVVMVF9NTUFQX1RIUkVTSE9MRAorI2lmIEhBVkVfTU1BUAorI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEICgoc2l6ZV90KTY0VSAqIChzaXplX3QpMTAyNFUpCisjZWxzZSAgIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBERUZBVUxUX01NQVBfVEhSRVNIT0xEIE1BWF9TSVpFX1QKKyNlbmRpZiAgLyogSEFWRV9NTUFQICovCisjZW5kaWYgIC8qIERFRkFVTFRfTU1BUF9USFJFU0hPTEQgKi8KKyNpZm5kZWYgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIFVTRV9CVUlMVElOX0ZGUyAwCisjZW5kaWYgIC8qIFVTRV9CVUlMVElOX0ZGUyAqLworI2lmbmRlZiBVU0VfREVWX1JBTkRPTQorI2RlZmluZSBVU0VfREVWX1JBTkRPTSAwCisjZW5kaWYgIC8qIFVTRV9ERVZfUkFORE9NICovCisjaWZuZGVmIE5PX01BTExJTkZPCisjZGVmaW5lIE5PX01BTExJTkZPIDAKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmICAvKiBNQUxMSU5GT19GSUVMRF9UWVBFICovCisKKy8qCisgIG1hbGxvcHQgdHVuaW5nIG9wdGlvbnMuICBTVklEL1hQRyBkZWZpbmVzIGZvdXIgc3RhbmRhcmQgcGFyYW1ldGVyCisgIG51bWJlcnMgZm9yIG1hbGxvcHQsIG5vcm1hbGx5IGRlZmluZWQgaW4gbWFsbG9jLmguICBOb25lIG9mIHRoZXNlCisgIGFyZSB1c2VkIGluIHRoaXMgbWFsbG9jLCBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMKKyAgbWFsbG9jIGRvZXMgc3VwcG9ydCB0aGUgZm9sbG93aW5nIG9wdGlvbnMuCisqLworCisjZGVmaW5lIE1fVFJJTV9USFJFU0hPTEQgICAgICgtMSkKKyNkZWZpbmUgTV9HUkFOVUxBUklUWSAgICAgICAgKC0yKQorI2RlZmluZSBNX01NQVBfVEhSRVNIT0xEICAgICAoLTMpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNYWxsaW5mbyBkZWNsYXJhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KKy8qCisgIFRoaXMgdmVyc2lvbiBvZiBtYWxsb2Mgc3VwcG9ydHMgdGhlIHN0YW5kYXJkIFNWSUQvWFBHIG1hbGxpbmZvCisgIHJvdXRpbmUgdGhhdCByZXR1cm5zIGEgc3RydWN0IGNvbnRhaW5pbmcgdXNhZ2UgcHJvcGVydGllcyBhbmQKKyAgc3RhdGlzdGljcy4gSXQgc2hvdWxkIHdvcmsgb24gYW55IHN5c3RlbSB0aGF0IGhhcyBhCisgIC91c3IvaW5jbHVkZS9tYWxsb2MuaCBkZWZpbmluZyBzdHJ1Y3QgbWFsbGluZm8uICBUaGUgbWFpbgorICBkZWNsYXJhdGlvbiBuZWVkZWQgaXMgdGhlIG1hbGxpbmZvIHN0cnVjdCB0aGF0IGlzIHJldHVybmVkIChieS1jb3B5KQorICBieSBtYWxsaW5mbygpLiAgVGhlIG1hbGxvaW5mbyBzdHJ1Y3QgY29udGFpbnMgYSBidW5jaCBvZiBmaWVsZHMgdGhhdAorICBhcmUgbm90IGV2ZW4gbWVhbmluZ2Z1bCBpbiB0aGlzIHZlcnNpb24gb2YgbWFsbG9jLiAgVGhlc2UgZmllbGRzIGFyZQorICBhcmUgaW5zdGVhZCBmaWxsZWQgYnkgbWFsbGluZm8oKSB3aXRoIG90aGVyIG51bWJlcnMgdGhhdCBtaWdodCBiZSBvZgorICBpbnRlcmVzdC4KKworICBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19IIHNob3VsZCBiZSBzZXQgaWYgeW91IGhhdmUgYQorICAvdXNyL2luY2x1ZGUvbWFsbG9jLmggZmlsZSB0aGF0IGluY2x1ZGVzIGEgZGVjbGFyYXRpb24gb2Ygc3RydWN0CisgIG1hbGxpbmZvLiAgSWYgc28sIGl0IGlzIGluY2x1ZGVkOyBlbHNlIGEgY29tcGxpYW50IHZlcnNpb24gaXMKKyAgZGVjbGFyZWQgYmVsb3cuICBUaGVzZSBtdXN0IGJlIHByZWNpc2VseSB0aGUgc2FtZSBmb3IgbWFsbGluZm8oKSB0bworICB3b3JrLiAgVGhlIG9yaWdpbmFsIFNWSUQgdmVyc2lvbiBvZiB0aGlzIHN0cnVjdCwgZGVmaW5lZCBvbiBtb3N0CisgIHN5c3RlbXMgd2l0aCBtYWxsaW5mbywgZGVjbGFyZXMgYWxsIGZpZWxkcyBhcyBpbnRzLiBCdXQgc29tZSBvdGhlcnMKKyAgZGVmaW5lIGFzIHVuc2lnbmVkIGxvbmcuIElmIHlvdXIgc3lzdGVtIGRlZmluZXMgdGhlIGZpZWxkcyB1c2luZyBhCisgIHR5cGUgb2YgZGlmZmVyZW50IHdpZHRoIHRoYW4gbGlzdGVkIGhlcmUsIHlvdSBNVVNUICNpbmNsdWRlIHlvdXIKKyAgc3lzdGVtIHZlcnNpb24gYW5kICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSC4KKyovCisKKy8qICNkZWZpbmUgSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCisjaWYgIUFORFJPSUQKKyNpZmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaW5jbHVkZSAiL3Vzci9pbmNsdWRlL21hbGxvYy5oIgorI2Vsc2UgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCitzdHJ1Y3QgbWFsbGluZm8geworICBNQUxMSU5GT19GSUVMRF9UWVBFIGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBvcmRibGtzOyAgLyogbnVtYmVyIG9mIGZyZWUgY2h1bmtzICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgc21ibGtzOyAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgaGJsa2hkOyAgIC8qIHNwYWNlIGluIG1tYXBwZWQgcmVnaW9ucyAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVzbWJsa3M7ICAvKiBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIHVvcmRibGtzOyAvKiB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBmb3JkYmxrczsgLyogdG90YWwgZnJlZSBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworCisjZW5kaWYgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisjZW5kaWYgLyogQU5EUk9JRCAqLworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmIC8qIF9fY3BsdXNwbHVzICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gRGVjbGFyYXRpb25zIG9mIHB1YmxpYyByb3V0aW5lcyAtLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoVVNFX0RMX1BSRUZJWCkgfHwgIWRlZmluZWQoTUFMTE9DX0xFQUtfQ0hFQ0spIAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzCisjZGVmaW5lIGRsbWFsbG9jX3dhbGtfaGVhcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfaGVhcAorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjYXVzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0LiBTZWUgYmVsb3cgZm9yIGRldGFpbHMuICBCcmllZmx5LCBzdXBwb3J0ZWQKKyAgcGFyYW1ldGVycyBhcmUgYXMgZm9sbG93cyAobGlzdGVkIGRlZmF1bHRzIGFyZSBmb3IgInR5cGljYWwiCisgIGNvbmZpZ3VyYXRpb25zKS4KKworICBTeW1ib2wgICAgICAgICAgICBwYXJhbSAjICBkZWZhdWx0ICAgIGFsbG93ZWQgcGFyYW0gdmFsdWVzCisgIE1fVFJJTV9USFJFU0hPTEQgICAgIC0xICAgMioxMDI0KjEwMjQgICBhbnkgICAoTUFYX1NJWkVfVCBkaXNhYmxlcykKKyAgTV9HUkFOVUxBUklUWSAgICAgICAgLTIgICAgIHBhZ2Ugc2l6ZSAgIGFueSBwb3dlciBvZiAyID49IHBhZ2Ugc2l6ZQorICBNX01NQVBfVEhSRVNIT0xEICAgICAtMyAgICAgIDI1NioxMDI0ICAgYW55ICAgKG9yIDAgaWYgbm8gTU1BUCBzdXBwb3J0KQorKi8KK2ludCBkbG1hbGxvcHQoaW50LCBpbnQpOworCisvKgorICBtYWxsb2NfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgdG90YWwKKyAgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZCBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMKKyAgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZAorICByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4KKyAgRXZlbiBpZiBsb2NrcyBhcmUgb3RoZXJ3aXNlIGRlZmluZWQsIHRoaXMgZnVuY3Rpb24gZG9lcyBub3QgdXNlIHRoZW0sCisgIHNvIHJlc3VsdHMgbWlnaHQgbm90IGJlIHVwIHRvIGRhdGUuCisqLworc2l6ZV90IGRsbWFsbG9jX2Zvb3RwcmludCh2b2lkKTsKKworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKy8qCisgIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0byBvYnRhaW4KKyAgZnJvbSB0aGUgc3lzdGVtLiAgbWFsbG9jX2Zvb3RwcmludCgpIHNob3VsZCBhbHdheXMgcmV0dXJuIGEKKyAgc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4X2FsbG93ZWRfZm9vdHByaW50LCB1bmxlc3MgdGhlCisgIG1heF9hbGxvd2VkX2Zvb3RwcmludCB3YXMgc2V0IHRvIGEgdmFsdWUgc21hbGxlciB0aGFuIHRoZQorICBmb290cHJpbnQgYXQgdGhlIHRpbWUuCisqLworc2l6ZV90IGRsbWFsbG9jX21heF9hbGxvd2VkX2Zvb3RwcmludCgpOworCisvKgorICBtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludCgpOworICBTZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0bworICBvYnRhaW4gZnJvbSB0aGUgc3lzdGVtLiAgVGhlIHNpemUgd2lsbCBiZSByb3VuZGVkIHVwIHRvIGEgd2hvbGUKKyAgcGFnZSwgYW5kIHRoZSByb3VuZGVkIG51bWJlciB3aWxsIGJlIHJldHVybmVkIGZyb20gZnV0dXJlIGNhbGxzCisgIHRvIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKS4gIElmIHRoZSBuZXcgbWF4X2FsbG93ZWRfZm9vdHByaW50CisgIGlzIGxhcmdlciB0aGFuIHRoZSBjdXJyZW50IGZvb3RwcmludCwgdGhlIGhlYXAgd2lsbCBuZXZlciBncm93CisgIGxhcmdlciB0aGFuIG1heF9hbGxvd2VkX2Zvb3RwcmludC4gIElmIHRoZSBuZXcgbWF4X2FsbG93ZWRfZm9vdHByaW50CisgIGlzIHNtYWxsZXIgdGhhbiB0aGUgY3VycmVudCBmb290cHJpbnQsIHRoZSBoZWFwIHdpbGwgbm90IGdyb3cKKyAgZnVydGhlci4KKworICBUT0RPOiB0cnkgdG8gZm9yY2UgdGhlIGhlYXAgdG8gZ2l2ZSB1cCBtZW1vcnkgaW4gdGhlIHNocmluayBjYXNlLAorICAgICAgICBhbmQgdXBkYXRlIHRoaXMgY29tbWVudCBvbmNlIHRoYXQgaGFwcGVucy4KKyovCit2b2lkIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoc2l6ZV90IGJ5dGVzKTsKKyNlbmRpZiAvKiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UICovCisKKy8qCisgIG1hbGxvY19tYXhfZm9vdHByaW50KCk7CisgIFJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gVGhpcworICB2YWx1ZSB3aWxsIGJlIGdyZWF0ZXIgdGhhbiBjdXJyZW50IGZvb3RwcmludCBpZiBkZWFsbG9jYXRlZCBzcGFjZQorICBoYXMgYmVlbiByZWNsYWltZWQgYnkgdGhlIHN5c3RlbS4gVGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIGFsbG9jYXRlZAorICBieSBtYWxsb2MsIHJlYWxsb2MgZXRjLiwgaXMgbGVzcyB0aGFuIHRoaXMgdmFsdWUuIFVubGlrZSBtYWxsaW5mbywKKyAgdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9ubHkgYSBwcmVjb21wdXRlZCByZXN1bHQsIHNvIGNhbiBiZSBjYWxsZWQKKyAgZnJlcXVlbnRseSB0byBtb25pdG9yIG1lbW9yeSBjb25zdW1wdGlvbi4gIEV2ZW4gaWYgbG9ja3MgYXJlCisgIG90aGVyd2lzZSBkZWZpbmVkLCB0aGlzIGZ1bmN0aW9uIGRvZXMgbm90IHVzZSB0aGVtLCBzbyByZXN1bHRzIG1pZ2h0CisgIG5vdCBiZSB1cCB0byBkYXRlLgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfZm9vdHByaW50KHZvaWQpOworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtYWxsaW5mbygpCisgIFJldHVybnMgKGJ5IGNvcHkpIGEgc3RydWN0IGNvbnRhaW5pbmcgdmFyaW91cyBzdW1tYXJ5IHN0YXRpc3RpY3M6CisKKyAgYXJlbmE6ICAgICBjdXJyZW50IHRvdGFsIG5vbi1tbWFwcGVkIGJ5dGVzIGFsbG9jYXRlZCBmcm9tIHN5c3RlbQorICBvcmRibGtzOiAgIHRoZSBudW1iZXIgb2YgZnJlZSBjaHVua3MKKyAgc21ibGtzOiAgICBhbHdheXMgemVyby4KKyAgaGJsa3M6ICAgICBjdXJyZW50IG51bWJlciBvZiBtbWFwcGVkIHJlZ2lvbnMKKyAgaGJsa2hkOiAgICB0b3RhbCBieXRlcyBoZWxkIGluIG1tYXBwZWQgcmVnaW9ucworICB1c21ibGtzOiAgIHRoZSBtYXhpbXVtIHRvdGFsIGFsbG9jYXRlZCBzcGFjZS4gVGhpcyB3aWxsIGJlIGdyZWF0ZXIKKyAgICAgICAgICAgICAgICB0aGFuIGN1cnJlbnQgdG90YWwgaWYgdHJpbW1pbmcgaGFzIG9jY3VycmVkLgorICBmc21ibGtzOiAgIGFsd2F5cyB6ZXJvCisgIHVvcmRibGtzOiAgY3VycmVudCB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UgKG5vcm1hbCBvciBtbWFwcGVkKQorICBmb3JkYmxrczogIHRvdGFsIGZyZWUgc3BhY2UKKyAga2VlcGNvc3Q6ICB0aGUgbWF4aW11bSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBjb3VsZCBpZGVhbGx5IGJlIHJlbGVhc2VkCisgICAgICAgICAgICAgICBiYWNrIHRvIHN5c3RlbSB2aWEgbWFsbG9jX3RyaW0uICgiaWRlYWxseSIgbWVhbnMgdGhhdAorICAgICAgICAgICAgICAgaXQgaWdub3JlcyBwYWdlIHJlc3RyaWN0aW9ucyBldGMuKQorCisgIEJlY2F1c2UgdGhlc2UgZmllbGRzIGFyZSBpbnRzLCBidXQgaW50ZXJuYWwgYm9va2tlZXBpbmcgbWF5CisgIGJlIGtlcHQgYXMgbG9uZ3MsIHRoZSByZXBvcnRlZCB2YWx1ZXMgbWF5IHdyYXAgYXJvdW5kIHplcm8gYW5kCisgIHRodXMgYmUgaW5hY2N1cmF0ZS4KKyovCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtZW50X3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworICBpbmRlcGVuZGVudF9jYWxsb2MgaXMgc2ltaWxhciB0byBjYWxsb2MsIGJ1dCBpbnN0ZWFkIG9mIHJldHVybmluZyBhCisgIHNpbmdsZSBjbGVhcmVkIHNwYWNlLCBpdCByZXR1cm5zIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIG5fZWxlbWVudHMKKyAgaW5kZXBlbmRlbnQgZWxlbWVudHMgdGhhdCBjYW4gaG9sZCBjb250ZW50cyBvZiBzaXplIGVsZW1fc2l6ZSwgZWFjaAorICBvZiB3aGljaCBzdGFydHMgb3V0IGNsZWFyZWQsIGFuZCBjYW4gYmUgaW5kZXBlbmRlbnRseSBmcmVlZCwKKyAgcmVhbGxvYydlZCBldGMuIFRoZSBlbGVtZW50cyBhcmUgZ3VhcmFudGVlZCB0byBiZSBhZGphY2VudGx5CisgIGFsbG9jYXRlZCAodGhpcyBpcyBub3QgZ3VhcmFudGVlZCB0byBvY2N1ciB3aXRoIG11bHRpcGxlIGNhbGxvY3Mgb3IKKyAgbWFsbG9jcyksIHdoaWNoIG1heSBhbHNvIGltcHJvdmUgY2FjaGUgbG9jYWxpdHkgaW4gc29tZQorICBhcHBsaWNhdGlvbnMuCisKKyAgVGhlICJjaHVua3MiIGFyZ3VtZW50IGlzIG9wdGlvbmFsIChpLmUuLCBtYXkgYmUgbnVsbCwgd2hpY2ggaXMKKyAgcHJvYmFibHkgdGhlIG1vc3QgdHlwaWNhbCB1c2FnZSkuIElmIGl0IGlzIG51bGwsIHRoZSByZXR1cm5lZCBhcnJheQorICBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbyBiZSBmcmVlZCB3aGVuIGl0IGlzCisgIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheSBtdXN0IGJlIG9mIGF0IGxlYXN0CisgIG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUgcG9pbnRlcnMgdG8gdGhlCisgIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY2FsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgImNodW5rcyIKKyAgaXMgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIHJlZ3VsYXIgY2FsbG9jIGFuZCBhc3NpZ24gcG9pbnRlcnMgaW50byB0aGlzCisgIHNwYWNlIHRvIHJlcHJlc2VudCBlbGVtZW50cy4gIChJbiB0aGlzIGNhc2UgdGhvdWdoLCB5b3UgY2Fubm90CisgIGluZGVwZW5kZW50bHkgZnJlZSBlbGVtZW50cy4pCisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIHNpbXBsaWZpZXMgYW5kIHNwZWVkcyB1cCBpbXBsZW1lbnRhdGlvbnMgb2YgbWFueQorICBraW5kcyBvZiBwb29scy4gIEl0IG1heSBhbHNvIGJlIHVzZWZ1bCB3aGVuIGNvbnN0cnVjdGluZyBsYXJnZSBkYXRhCisgIHN0cnVjdHVyZXMgdGhhdCBpbml0aWFsbHkgaGF2ZSBhIGZpeGVkIG51bWJlciBvZiBmaXhlZC1zaXplZCBub2RlcywKKyAgYnV0IHRoZSBudW1iZXIgaXMgbm90IGtub3duIGF0IGNvbXBpbGUgdGltZSwgYW5kIHNvbWUgb2YgdGhlIG5vZGVzCisgIG1heSBsYXRlciBuZWVkIHRvIGJlIGZyZWVkLiBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgTm9kZSB7IGludCBpdGVtOyBzdHJ1Y3QgTm9kZSogbmV4dDsgfTsKKworICBzdHJ1Y3QgTm9kZSogYnVpbGRfbGlzdCgpIHsKKyAgICBzdHJ1Y3QgTm9kZSoqIHBvb2w7CisgICAgaW50IG4gPSByZWFkX251bWJlcl9vZl9ub2Rlc19uZWVkZWQoKTsKKyAgICBpZiAobiA8PSAwKSByZXR1cm4gMDsKKyAgICBwb29sID0gKHN0cnVjdCBOb2RlKiopKGluZGVwZW5kZW50X2NhbGxvYyhuLCBzaXplb2Yoc3RydWN0IE5vZGUpLCAwKTsKKyAgICBpZiAocG9vbCA9PSAwKSBkaWUoKTsKKyAgICAvLyBvcmdhbml6ZSBpbnRvIGEgbGlua2VkIGxpc3QuLi4KKyAgICBzdHJ1Y3QgTm9kZSogZmlyc3QgPSBwb29sWzBdOworICAgIGZvciAoaSA9IDA7IGkgPCBuLTE7ICsraSkKKyAgICAgIHBvb2xbaV0tPm5leHQgPSBwb29sW2krMV07CisgICAgZnJlZShwb29sKTsgICAgIC8vIENhbiBub3cgZnJlZSB0aGUgYXJyYXkgKG9yIG5vdCwgaWYgaXQgaXMgbmVlZGVkIGxhdGVyKQorICAgIHJldHVybiBmaXJzdDsKKyAgfQorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3QsIHNpemVfdCwgdm9pZCoqKTsKKworLyoKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY29tYWxsb2MgYWxsb2NhdGVzLCBhbGwgYXQgb25jZSwgYSBzZXQgb2Ygbl9lbGVtZW50cworICBjaHVua3Mgd2l0aCBzaXplcyBpbmRpY2F0ZWQgaW4gdGhlICJzaXplcyIgYXJyYXkuICAgIEl0IHJldHVybnMKKyAgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gdGhlc2UgZWxlbWVudHMsIGVhY2ggb2Ygd2hpY2ggY2FuIGJlCisgIGluZGVwZW5kZW50bHkgZnJlZWQsIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8KKyAgYmUgYWRqYWNlbnRseSBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aAorICBtdWx0aXBsZSBjYWxsb2NzIG9yIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5CisgIGluIHNvbWUgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwpLiBJZiBpdCBpcyBudWxsCisgIHRoZSByZXR1cm5lZCBhcnJheSBpcyBpdHNlbGYgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBzaG91bGQgYWxzbworICBiZSBmcmVlZCB3aGVuIGl0IGlzIG5vIGxvbmdlciBuZWVkZWQuIE90aGVyd2lzZSwgdGhlIGNodW5rcyBhcnJheQorICBtdXN0IGJlIG9mIGF0IGxlYXN0IG5fZWxlbWVudHMgaW4gbGVuZ3RoLiBJdCBpcyBmaWxsZWQgaW4gd2l0aCB0aGUKKyAgcG9pbnRlcnMgdG8gdGhlIGNodW5rcy4KKworICBJbiBlaXRoZXIgY2FzZSwgaW5kZXBlbmRlbnRfY29tYWxsb2MgcmV0dXJucyB0aGlzIHBvaW50ZXIgYXJyYXksIG9yCisgIG51bGwgaWYgdGhlIGFsbG9jYXRpb24gZmFpbGVkLiAgSWYgbl9lbGVtZW50cyBpcyB6ZXJvIGFuZCBjaHVua3MgaXMKKyAgbnVsbCwgaXQgcmV0dXJucyBhIGNodW5rIHJlcHJlc2VudGluZyBhbiBhcnJheSB3aXRoIHplcm8gZWxlbWVudHMKKyAgKHdoaWNoIHNob3VsZCBiZSBmcmVlZCBpZiBub3Qgd2FudGVkKS4KKworICBFYWNoIGVsZW1lbnQgbXVzdCBiZSBpbmRpdmlkdWFsbHkgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIKKyAgbmVlZGVkLiBJZiB5b3UnZCBsaWtlIHRvIGluc3RlYWQgYmUgYWJsZSB0byBmcmVlIGFsbCBhdCBvbmNlLCB5b3UKKyAgc2hvdWxkIGluc3RlYWQgdXNlIGEgc2luZ2xlIHJlZ3VsYXIgbWFsbG9jLCBhbmQgYXNzaWduIHBvaW50ZXJzIGF0CisgIHBhcnRpY3VsYXIgb2Zmc2V0cyBpbiB0aGUgYWdncmVnYXRlIHNwYWNlLiAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91CisgIGNhbm5vdCBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NvbWFsbGFjIGRpZmZlcnMgZnJvbSBpbmRlcGVuZGVudF9jYWxsb2MgaW4gdGhhdCBlYWNoCisgIGVsZW1lbnQgbWF5IGhhdmUgYSBkaWZmZXJlbnQgc2l6ZSwgYW5kIGFsc28gdGhhdCBpdCBkb2VzIG5vdAorICBhdXRvbWF0aWNhbGx5IGNsZWFyIGVsZW1lbnRzLgorCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBiZSB1c2VkIHRvIHNwZWVkIHVwIGFsbG9jYXRpb24gaW4gY2FzZXMKKyAgd2hlcmUgc2V2ZXJhbCBzdHJ1Y3RzIG9yIG9iamVjdHMgbXVzdCBhbHdheXMgYmUgYWxsb2NhdGVkIGF0IHRoZQorICBzYW1lIHRpbWUuICBGb3IgZXhhbXBsZToKKworICBzdHJ1Y3QgSGVhZCB7IC4uLiB9CisgIHN0cnVjdCBGb290IHsgLi4uIH0KKworICB2b2lkIHNlbmRfbWVzc2FnZShjaGFyKiBtc2cpIHsKKyAgICBpbnQgbXNnbGVuID0gc3RybGVuKG1zZyk7CisgICAgc2l6ZV90IHNpemVzWzNdID0geyBzaXplb2Yoc3RydWN0IEhlYWQpLCBtc2dsZW4sIHNpemVvZihzdHJ1Y3QgRm9vdCkgfTsKKyAgICB2b2lkKiBjaHVua3NbM107CisgICAgaWYgKGluZGVwZW5kZW50X2NvbWFsbG9jKDMsIHNpemVzLCBjaHVua3MpID09IDApCisgICAgICBkaWUoKTsKKyAgICBzdHJ1Y3QgSGVhZCogaGVhZCA9IChzdHJ1Y3QgSGVhZCopKGNodW5rc1swXSk7CisgICAgY2hhciogICAgICAgIGJvZHkgPSAoY2hhciopKGNodW5rc1sxXSk7CisgICAgc3RydWN0IEZvb3QqIGZvb3QgPSAoc3RydWN0IEZvb3QqKShjaHVua3NbMl0pOworICAgIC8vIC4uLgorICB9CisKKyAgSW4gZ2VuZXJhbCB0aG91Z2gsIGluZGVwZW5kZW50X2NvbWFsbG9jIGlzIHdvcnRoIHVzaW5nIG9ubHkgZm9yCisgIGxhcmdlciB2YWx1ZXMgb2Ygbl9lbGVtZW50cy4gRm9yIHNtYWxsIHZhbHVlcywgeW91IHByb2JhYmx5IHdvbid0CisgIGRldGVjdCBlbm91Z2ggZGlmZmVyZW5jZSBmcm9tIHNlcmllcyBvZiBtYWxsb2MgY2FsbHMgdG8gYm90aGVyLgorCisgIE92ZXJ1c2Ugb2YgaW5kZXBlbmRlbnRfY29tYWxsb2MgY2FuIGluY3JlYXNlIG92ZXJhbGwgbWVtb3J5IHVzYWdlLAorICBzaW5jZSBpdCBjYW5ub3QgcmV1c2UgZXhpc3Rpbmcgbm9uY29udGlndW91cyBzbWFsbCBjaHVua3MgdGhhdAorICBtaWdodCBiZSBhdmFpbGFibGUgZm9yIHNvbWUgb2YgdGhlIGVsZW1lbnRzLgorKi8KK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCwgc2l6ZV90Kiwgdm9pZCoqKTsKKworCisvKgorICBwdmFsbG9jKHNpemVfdCBuKTsKKyAgRXF1aXZhbGVudCB0byB2YWxsb2MobWluaW11bS1wYWdlLXRoYXQtaG9sZHMobikpLCB0aGF0IGlzLAorICByb3VuZCB1cCBuIHRvIG5lYXJlc3QgcGFnZXNpemUuCisgKi8KK3ZvaWQqICBkbHB2YWxsb2Moc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3RyaW0oc2l6ZV90IHBhZCk7CisKKyAgSWYgcG9zc2libGUsIGdpdmVzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0gKHZpYSBuZWdhdGl2ZSBhcmd1bWVudHMKKyAgdG8gc2JyaykgaWYgdGhlcmUgaXMgdW51c2VkIG1lbW9yeSBhdCB0aGUgYGhpZ2gnIGVuZCBvZiB0aGUgbWFsbG9jCisgIHBvb2wgb3IgaW4gdW51c2VkIE1NQVAgc2VnbWVudHMuIFlvdSBjYW4gY2FsbCB0aGlzIGFmdGVyIGZyZWVpbmcKKyAgbGFyZ2UgYmxvY2tzIG9mIG1lbW9yeSB0byBwb3RlbnRpYWxseSByZWR1Y2UgdGhlIHN5c3RlbS1sZXZlbCBtZW1vcnkKKyAgcmVxdWlyZW1lbnRzIG9mIGEgcHJvZ3JhbS4gSG93ZXZlciwgaXQgY2Fubm90IGd1YXJhbnRlZSB0byByZWR1Y2UKKyAgbWVtb3J5LiBVbmRlciBzb21lIGFsbG9jYXRpb24gcGF0dGVybnMsIHNvbWUgbGFyZ2UgZnJlZSBibG9ja3Mgb2YKKyAgbWVtb3J5IHdpbGwgYmUgbG9ja2VkIGJldHdlZW4gdHdvIHVzZWQgY2h1bmtzLCBzbyB0aGV5IGNhbm5vdCBiZQorICBnaXZlbiBiYWNrIHRvIHRoZSBzeXN0ZW0uCisKKyAgVGhlIGBwYWQnIGFyZ3VtZW50IHRvIG1hbGxvY190cmltIHJlcHJlc2VudHMgdGhlIGFtb3VudCBvZiBmcmVlCisgIHRyYWlsaW5nIHNwYWNlIHRvIGxlYXZlIHVudHJpbW1lZC4gSWYgdGhpcyBhcmd1bWVudCBpcyB6ZXJvLCBvbmx5CisgIHRoZSBtaW5pbXVtIGFtb3VudCBvZiBtZW1vcnkgdG8gbWFpbnRhaW4gaW50ZXJuYWwgZGF0YSBzdHJ1Y3R1cmVzCisgIHdpbGwgYmUgbGVmdC4gTm9uLXplcm8gYXJndW1lbnRzIGNhbiBiZSBzdXBwbGllZCB0byBtYWludGFpbiBlbm91Z2gKKyAgdHJhaWxpbmcgc3BhY2UgdG8gc2VydmljZSBmdXR1cmUgZXhwZWN0ZWQgYWxsb2NhdGlvbnMgd2l0aG91dCBoYXZpbmcKKyAgdG8gcmUtb2J0YWluIG1lbW9yeSBmcm9tIHRoZSBzeXN0ZW0uCisKKyAgTWFsbG9jX3RyaW0gcmV0dXJucyAxIGlmIGl0IGFjdHVhbGx5IHJlbGVhc2VkIGFueSBtZW1vcnksIGVsc2UgMC4KKyovCitpbnQgIGRsbWFsbG9jX3RyaW0oc2l6ZV90KTsKKworLyoKKyAgbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyhoYW5kbGVyLCBoYXJnKQorCisgIENhbGxzIHRoZSBwcm92aWRlZCBoYW5kbGVyIG9uIGVhY2ggZnJlZSByZWdpb24gaW4gdGhlIGhlYXAuICBUaGUKKyAgbWVtb3J5IGJldHdlZW4gc3RhcnQgYW5kIGVuZCBhcmUgZ3VhcmFudGVlZCBub3QgdG8gY29udGFpbiBhbnkKKyAgaW1wb3J0YW50IGRhdGEsIHNvIHRoZSBoYW5kbGVyIGlzIGZyZWUgdG8gYWx0ZXIgdGhlIGNvbnRlbnRzCisgIGluIGFueSB3YXkuICBUaGlzIGNhbiBiZSB1c2VkIHRvIGFkdmlzZSB0aGUgT1MgdGhhdCBsYXJnZSBmcmVlCisgIHJlZ2lvbnMgbWF5IGJlIHN3YXBwZWQgb3V0LgorCisgIFRoZSB2YWx1ZSBpbiBoYXJnIHdpbGwgYmUgcGFzc2VkIHRvIGVhY2ggY2FsbCBvZiB0aGUgaGFuZGxlci4KKyAqLwordm9pZCBkbG1hbGxvY193YWxrX2ZyZWVfcGFnZXModm9pZCgqKSh2b2lkKiwgdm9pZCosIHZvaWQqKSwgdm9pZCopOworCisvKgorICBtYWxsb2Nfd2Fsa19oZWFwKGhhbmRsZXIsIGhhcmcpCisKKyAgQ2FsbHMgdGhlIHByb3ZpZGVkIGhhbmRsZXIgb24gZWFjaCBvYmplY3Qgb3IgZnJlZSByZWdpb24gaW4gdGhlCisgIGhlYXAuICBUaGUgaGFuZGxlciB3aWxsIHJlY2VpdmUgdGhlIGNodW5rIHBvaW50ZXIgYW5kIGxlbmd0aCwgdGhlCisgIG9iamVjdCBwb2ludGVyIGFuZCBsZW5ndGgsIGFuZCB0aGUgdmFsdWUgaW4gaGFyZyBvbiBlYWNoIGNhbGwuCisgKi8KK3ZvaWQgZGxtYWxsb2Nfd2Fsa19oZWFwKHZvaWQoKikoY29uc3Qgdm9pZCosIHNpemVfdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCosIHNpemVfdCwgdm9pZCopLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCopOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHModm9pZCk7CisKKyNlbmRpZiAvKiBPTkxZX01TUEFDRVMgKi8KKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIHBlYWsgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlCisgIHN5c3RlbSBmb3IgdGhpcyBzcGFjZS4KKyovCitzaXplX3QgbXNwYWNlX21heF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbXNwYWNlX21hbGxpbmZvIGJlaGF2ZXMgYXMgbWFsbGluZm8sIGJ1dCByZXBvcnRzIHByb3BlcnRpZXMgb2YKKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3N0cnVjdCBtYWxsaW5mbyBtc3BhY2VfbWFsbGluZm8obXNwYWNlIG1zcCk7CisjZW5kaWYgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgbXNwYWNlX21hbGxvY19zdGF0cyBiZWhhdmVzIGFzIG1hbGxvY19zdGF0cywgYnV0IHJlcG9ydHMKKyAgcHJvcGVydGllcyBvZiB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfdHJpbSBiZWhhdmVzIGFzIG1hbGxvY190cmltLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCk7CisKKy8qCisgIEFuIGFsaWFzIGZvciBtYWxsb3B0LgorKi8KK2ludCBtc3BhY2VfbWFsbG9wdChpbnQsIGludCk7CisKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYgLyogX19jcGx1c3BsdXMgKi8KKworLyoKKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgIFRvIG1ha2UgYSBmdWxseSBjdXN0b21pemFibGUgbWFsbG9jLmggaGVhZGVyIGZpbGUsIGN1dCBldmVyeXRoaW5nCisgIGFib3ZlIHRoaXMgbGluZSwgcHV0IGludG8gZmlsZSBtYWxsb2MuaCwgZWRpdCB0byBzdWl0LCBhbmQgI2luY2x1ZGUgaXQKKyAgb24gdGhlIG5leHQgbGluZSwgYXMgd2VsbCBhcyBpbiBwcm9ncmFtcyB0aGF0IHVzZSB0aGlzIG1hbGxvYy4KKyAgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisqLworCisvKiAjaW5jbHVkZSAibWFsbG9jLmgiICovCisKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGludGVybmFsICNpbmNsdWRlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBXSU4zMgorI3ByYWdtYSB3YXJuaW5nKCBkaXNhYmxlIDogNDE0NiApIC8qIG5vICJ1bnNpZ25lZCIgd2FybmluZ3MgKi8KKyNlbmRpZiAvKiBXSU4zMiAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4gICAgICAgLyogZm9yIHByaW50aW5nIGluIG1hbGxvY19zdGF0cyAqLworCisjaWZuZGVmIExBQ0tTX0VSUk5PX0gKKyNpbmNsdWRlIDxlcnJuby5oPiAgICAgICAvKiBmb3IgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OICovCisjZW5kaWYgLyogTEFDS1NfRVJSTk9fSCAqLworI2lmIEZPT1RFUlMKKyNpbmNsdWRlIDx0aW1lLmg+ICAgICAgICAvKiBmb3IgbWFnaWMgaW5pdGlhbGl6YXRpb24gKi8KKyNlbmRpZiAvKiBGT09URVJTICovCisjaWZuZGVmIExBQ0tTX1NURExJQl9ICisjaW5jbHVkZSA8c3RkbGliLmg+ICAgICAgLyogZm9yIGFib3J0KCkgKi8KKyNlbmRpZiAvKiBMQUNLU19TVERMSUJfSCAqLworI2lmZGVmIERFQlVHCisjaWYgQUJPUlRfT05fQVNTRVJUX0ZBSUxVUkUKKyNkZWZpbmUgYXNzZXJ0KHgpIGlmKCEoeCkpIEFCT1JUCisjZWxzZSAvKiBBQk9SVF9PTl9BU1NFUlRfRkFJTFVSRSAqLworI2luY2x1ZGUgPGFzc2VydC5oPgorI2VuZGlmIC8qIEFCT1JUX09OX0FTU0VSVF9GQUlMVVJFICovCisjZWxzZSAgLyogREVCVUcgKi8KKyNkZWZpbmUgYXNzZXJ0KHgpCisjZW5kaWYgLyogREVCVUcgKi8KKyNpZm5kZWYgTEFDS1NfU1RSSU5HX0gKKyNpbmNsdWRlIDxzdHJpbmcuaD4gICAgICAvKiBmb3IgbWVtc2V0IGV0YyAqLworI2VuZGlmICAvKiBMQUNLU19TVFJJTkdfSCAqLworI2lmIFVTRV9CVUlMVElOX0ZGUworI2lmbmRlZiBMQUNLU19TVFJJTkdTX0gKKyNpbmNsdWRlIDxzdHJpbmdzLmg+ICAgICAvKiBmb3IgZmZzICovCisjZW5kaWYgLyogTEFDS1NfU1RSSU5HU19IICovCisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjaWYgSEFWRV9NTUFQCisjaWZuZGVmIExBQ0tTX1NZU19NTUFOX0gKKyNpbmNsdWRlIDxzeXMvbW1hbi5oPiAgICAvKiBmb3IgbW1hcCAqLworI2VuZGlmIC8qIExBQ0tTX1NZU19NTUFOX0ggKi8KKyNpZm5kZWYgTEFDS1NfRkNOVExfSAorI2luY2x1ZGUgPGZjbnRsLmg+CisjZW5kaWYgLyogTEFDS1NfRkNOVExfSCAqLworI2VuZGlmIC8qIEhBVkVfTU1BUCAqLworI2lmIEhBVkVfTU9SRUNPUkUKKyNpZm5kZWYgTEFDS1NfVU5JU1REX0gKKyNpbmNsdWRlIDx1bmlzdGQuaD4gICAgIC8qIGZvciBzYnJrICovCisjZWxzZSAvKiBMQUNLU19VTklTVERfSCAqLworI2lmICFkZWZpbmVkKF9fRnJlZUJTRF9fKSAmJiAhZGVmaW5lZChfX09wZW5CU0RfXykgJiYgIWRlZmluZWQoX19OZXRCU0RfXykKK2V4dGVybiB2b2lkKiAgICAgc2JyayhwdHJkaWZmX3QpOworI2VuZGlmIC8qIEZyZWVCU0QgZXRjICovCisjZW5kaWYgLyogTEFDS1NfVU5JU1REX0ggKi8KKyNlbmRpZiAvKiBIQVZFX01NQVAgKi8KKworI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBtYWxsb2NfZ2V0cGFnZXNpemUKKyMgIGlmZGVmIF9TQ19QQUdFU0laRSAgICAgICAgIC8qIHNvbWUgU1ZSNCBzeXN0ZW1zIG9taXQgYW4gdW5kZXJzY29yZSAqLworIyAgICBpZm5kZWYgX1NDX1BBR0VfU0laRQorIyAgICAgIGRlZmluZSBfU0NfUEFHRV9TSVpFIF9TQ19QQUdFU0laRQorIyAgICBlbmRpZgorIyAgZW5kaWYKKyMgIGlmZGVmIF9TQ19QQUdFX1NJWkUKKyMgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBzeXNjb25mKF9TQ19QQUdFX1NJWkUpCisjICBlbHNlCisjICAgIGlmIGRlZmluZWQoQlNEKSB8fCBkZWZpbmVkKERHVVgpIHx8IGRlZmluZWQoSEFWRV9HRVRQQUdFU0laRSkKKyAgICAgICBleHRlcm4gc2l6ZV90IGdldHBhZ2VzaXplKCk7CisjICAgICAgZGVmaW5lIG1hbGxvY19nZXRwYWdlc2l6ZSBnZXRwYWdlc2l6ZSgpCisjICAgIGVsc2UKKyMgICAgICBpZmRlZiBXSU4zMiAvKiB1c2Ugc3VwcGxpZWQgZW11bGF0aW9uIG9mIGdldHBhZ2VzaXplICovCisjICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIGdldHBhZ2VzaXplKCkKKyMgICAgICBlbHNlCisjICAgICAgICBpZm5kZWYgTEFDS1NfU1lTX1BBUkFNX0gKKyMgICAgICAgICAgaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjICAgICAgICBlbmRpZgorIyAgICAgICAgaWZkZWYgRVhFQ19QQUdFU0laRQorIyAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplIEVYRUNfUEFHRVNJWkUKKyMgICAgICAgIGVsc2UKKyMgICAgICAgICAgaWZkZWYgTkJQRworIyAgICAgICAgICAgIGlmbmRlZiBDTFNJWkUKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQRworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgKE5CUEcgKiBDTFNJWkUpCisjICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgZWxzZQorIyAgICAgICAgICAgIGlmZGVmIE5CUEMKKyMgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgTkJQQworIyAgICAgICAgICAgIGVsc2UKKyMgICAgICAgICAgICAgIGlmZGVmIFBBR0VTSVpFCisjICAgICAgICAgICAgICAgIGRlZmluZSBtYWxsb2NfZ2V0cGFnZXNpemUgUEFHRVNJWkUKKyMgICAgICAgICAgICAgIGVsc2UgLyoganVzdCBndWVzcyAqLworIyAgICAgICAgICAgICAgICBkZWZpbmUgbWFsbG9jX2dldHBhZ2VzaXplICgoc2l6ZV90KTQwOTZVKQorIyAgICAgICAgICAgICAgZW5kaWYKKyMgICAgICAgICAgICBlbmRpZgorIyAgICAgICAgICBlbmRpZgorIyAgICAgICAgZW5kaWYKKyMgICAgICBlbmRpZgorIyAgICBlbmRpZgorIyAgZW5kaWYKKyNlbmRpZgorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0gc2l6ZV90IGFuZCBhbGlnbm1lbnQgcHJvcGVydGllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBUaGUgYnl0ZSBhbmQgYml0IHNpemUgb2YgYSBzaXplX3QgKi8KKyNkZWZpbmUgU0laRV9UX1NJWkUgICAgICAgICAoc2l6ZW9mKHNpemVfdCkpCisjZGVmaW5lIFNJWkVfVF9CSVRTSVpFICAgICAgKHNpemVvZihzaXplX3QpIDw8IDMpCisKKy8qIFNvbWUgY29uc3RhbnRzIGNvZXJjZWQgdG8gc2l6ZV90ICovCisvKiBBbm5veWluZyBidXQgbmVjZXNzYXJ5IHRvIGF2b2lkIGVycm9ycyBvbiBzb21lIHBsYWZ0b3JtcyAqLworI2RlZmluZSBTSVpFX1RfWkVSTyAgICAgICAgICgoc2l6ZV90KTApCisjZGVmaW5lIFNJWkVfVF9PTkUgICAgICAgICAgKChzaXplX3QpMSkKKyNkZWZpbmUgU0laRV9UX1RXTyAgICAgICAgICAoKHNpemVfdCkyKQorI2RlZmluZSBUV09fU0laRV9UX1NJWkVTICAgIChTSVpFX1RfU0laRTw8MSkKKyNkZWZpbmUgRk9VUl9TSVpFX1RfU0laRVMgICAoU0laRV9UX1NJWkU8PDIpCisjZGVmaW5lIFNJWF9TSVpFX1RfU0laRVMgICAgKEZPVVJfU0laRV9UX1NJWkVTK1RXT19TSVpFX1RfU0laRVMpCisjZGVmaW5lIEhBTEZfTUFYX1NJWkVfVCAgICAgKE1BWF9TSVpFX1QgLyAyVSkKKworLyogVGhlIGJpdCBtYXNrIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gTUFMTE9DX0FMSUdOTUVOVCAqLworI2RlZmluZSBDSFVOS19BTElHTl9NQVNLICAgIChNQUxMT0NfQUxJR05NRU5UIC0gU0laRV9UX09ORSkKKworLyogVHJ1ZSBpZiBhZGRyZXNzIGEgaGFzIGFjY2VwdGFibGUgYWxpZ25tZW50ICovCisjZGVmaW5lIGlzX2FsaWduZWQoQSkgICAgICAgKCgoc2l6ZV90KSgoQSkpICYgKENIVU5LX0FMSUdOX01BU0spKSA9PSAwKQorCisvKiB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRvIG9mZnNldCBhbiBhZGRyZXNzIHRvIGFsaWduIGl0ICovCisjZGVmaW5lIGFsaWduX29mZnNldChBKVwKKyAoKCgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spID09IDApPyAwIDpcCisgICgoTUFMTE9DX0FMSUdOTUVOVCAtICgoc2l6ZV90KShBKSAmIENIVU5LX0FMSUdOX01BU0spKSAmIENIVU5LX0FMSUdOX01BU0spKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBNTUFQIHByZWxpbWluYXJpZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICAgSWYgSEFWRV9NT1JFQ09SRSBvciBIQVZFX01NQVAgYXJlIGZhbHNlLCB3ZSBqdXN0IGRlZmluZSBjYWxscyBhbmQKKyAgIGNoZWNrcyB0byBmYWlsIHNvIGNvbXBpbGVyIG9wdGltaXplciBjYW4gZGVsZXRlIGNvZGUgcmF0aGVyIHRoYW4KKyAgIHVzaW5nIHNvIG1hbnkgIiNpZiJzLgorKi8KKworCisvKiBNT1JFQ09SRSBhbmQgTU1BUCBtdXN0IHJldHVybiBNRkFJTCBvbiBmYWlsdXJlICovCisjZGVmaW5lIE1GQUlMICAgICAgICAgICAgICAgICgodm9pZCopKE1BWF9TSVpFX1QpKQorI2RlZmluZSBDTUZBSUwgICAgICAgICAgICAgICAoKGNoYXIqKShNRkFJTCkpIC8qIGRlZmluZWQgZm9yIGNvbnZlbmllbmNlICovCisKKyNpZiAhSEFWRV9NTUFQCisjZGVmaW5lIElTX01NQVBQRURfQklUICAgICAgIChTSVpFX1RfWkVSTykKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9aRVJPKQorI2RlZmluZSBDQUxMX01NQVAocykgICAgICAgICBNRkFJTAorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICAoLTEpCisjZGVmaW5lIERJUkVDVF9NTUFQKHMpICAgICAgIE1GQUlMCisKKyNlbHNlIC8qIEhBVkVfTU1BUCAqLworI2RlZmluZSBJU19NTUFQUEVEX0JJVCAgICAgICAoU0laRV9UX09ORSkKKyNkZWZpbmUgVVNFX01NQVBfQklUICAgICAgICAgKFNJWkVfVF9PTkUpCisKKyNpZm5kZWYgV0lOMzIKKyNkZWZpbmUgQ0FMTF9NVU5NQVAoYSwgcykgICAgbXVubWFwKChhKSwgKHMpKQorI2RlZmluZSBNTUFQX1BST1QgICAgICAgICAgICAoUFJPVF9SRUFEfFBST1RfV1JJVEUpCisjaWYgIWRlZmluZWQoTUFQX0FOT05ZTU9VUykgJiYgZGVmaW5lZChNQVBfQU5PTikKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAgICAgICAgTUFQX0FOT04KKyNlbmRpZiAvKiBNQVBfQU5PTiAqLworI2lmZGVmIE1BUF9BTk9OWU1PVVMKKyNkZWZpbmUgTU1BUF9GTEFHUyAgICAgICAgICAgKE1BUF9QUklWQVRFfE1BUF9BTk9OWU1PVVMpCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIG1tYXAoMCwgKHMpLCBNTUFQX1BST1QsIE1NQVBfRkxBR1MsIC0xLCAwKQorI2Vsc2UgLyogTUFQX0FOT05ZTU9VUyAqLworLyoKKyAgIE5lYXJseSBhbGwgdmVyc2lvbnMgb2YgbW1hcCBzdXBwb3J0IE1BUF9BTk9OWU1PVVMsIHNvIHRoZSBmb2xsb3dpbmcKKyAgIGlzIHVubGlrZWx5IHRvIGJlIG5lZWRlZCwgYnV0IGlzIHN1cHBsaWVkIGp1c3QgaW4gY2FzZS4KKyovCisjZGVmaW5lIE1NQVBfRkxBR1MgICAgICAgICAgIChNQVBfUFJJVkFURSkKK3N0YXRpYyBpbnQgZGV2X3plcm9fZmQgPSAtMTsgLyogQ2FjaGVkIGZpbGUgZGVzY3JpcHRvciBmb3IgL2Rldi96ZXJvLiAqLworI2RlZmluZSBDQUxMX01NQVAocykgKChkZXZfemVyb19mZCA8IDApID8gXAorICAgICAgICAgICAoZGV2X3plcm9fZmQgPSBvcGVuKCIvZGV2L3plcm8iLCBPX1JEV1IpLCBcCisgICAgICAgICAgICBtbWFwKDAsIChzKSwgTU1BUF9QUk9ULCBNTUFQX0ZMQUdTLCBkZXZfemVyb19mZCwgMCkpIDogXAorICAgICAgICAgICAgbW1hcCgwLCAocyksIE1NQVBfUFJPVCwgTU1BUF9GTEFHUywgZGV2X3plcm9fZmQsIDApKQorI2VuZGlmIC8qIE1BUF9BTk9OWU1PVVMgKi8KKworI2RlZmluZSBESVJFQ1RfTU1BUChzKSAgICAgICBDQUxMX01NQVAocykKKyNlbHNlIC8qIFdJTjMyICovCisKKy8qIFdpbjMyIE1NQVAgdmlhIFZpcnR1YWxBbGxvYyAqLworc3RhdGljIHZvaWQqIHdpbjMybW1hcChzaXplX3Qgc2l6ZSkgeworICB2b2lkKiBwdHIgPSBWaXJ0dWFsQWxsb2MoMCwgc2l6ZSwgTUVNX1JFU0VSVkV8TUVNX0NPTU1JVCwgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogRm9yIGRpcmVjdCBNTUFQLCB1c2UgTUVNX1RPUF9ET1dOIHRvIG1pbmltaXplIGludGVyZmVyZW5jZSAqLworc3RhdGljIHZvaWQqIHdpbjMyZGlyZWN0X21tYXAoc2l6ZV90IHNpemUpIHsKKyAgdm9pZCogcHRyID0gVmlydHVhbEFsbG9jKDAsIHNpemUsIE1FTV9SRVNFUlZFfE1FTV9DT01NSVR8TUVNX1RPUF9ET1dOLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgUEFHRV9SRUFEV1JJVEUpOworICByZXR1cm4gKHB0ciAhPSAwKT8gcHRyOiBNRkFJTDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBzdXBwb3J0cyByZWxlYXNpbmcgY29hbGVzZWQgc2VnbWVudHMgKi8KK3N0YXRpYyBpbnQgd2luMzJtdW5tYXAodm9pZCogcHRyLCBzaXplX3Qgc2l6ZSkgeworICBNRU1PUllfQkFTSUNfSU5GT1JNQVRJT04gbWluZm87CisgIGNoYXIqIGNwdHIgPSBwdHI7CisgIHdoaWxlIChzaXplKSB7CisgICAgaWYgKFZpcnR1YWxRdWVyeShjcHRyLCAmbWluZm8sIHNpemVvZihtaW5mbykpID09IDApCisgICAgICByZXR1cm4gLTE7CisgICAgaWYgKG1pbmZvLkJhc2VBZGRyZXNzICE9IGNwdHIgfHwgbWluZm8uQWxsb2NhdGlvbkJhc2UgIT0gY3B0ciB8fAorICAgICAgICBtaW5mby5TdGF0ZSAhPSBNRU1fQ09NTUlUIHx8IG1pbmZvLlJlZ2lvblNpemUgPiBzaXplKQorICAgICAgcmV0dXJuIC0xOworICAgIGlmIChWaXJ0dWFsRnJlZShjcHRyLCAwLCBNRU1fUkVMRUFTRSkgPT0gMCkKKyAgICAgIHJldHVybiAtMTsKKyAgICBjcHRyICs9IG1pbmZvLlJlZ2lvblNpemU7CisgICAgc2l6ZSAtPSBtaW5mby5SZWdpb25TaXplOworICB9CisgIHJldHVybiAwOworfQorCisjZGVmaW5lIENBTExfTU1BUChzKSAgICAgICAgIHdpbjMybW1hcChzKQorI2RlZmluZSBDQUxMX01VTk1BUChhLCBzKSAgICB3aW4zMm11bm1hcCgoYSksIChzKSkKKyNkZWZpbmUgRElSRUNUX01NQVAocykgICAgICAgd2luMzJkaXJlY3RfbW1hcChzKQorI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogSEFWRV9NTUFQICovCisKKyNpZiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAKKyNkZWZpbmUgQ0FMTF9NUkVNQVAoYWRkciwgb3N6LCBuc3osIG12KSBtcmVtYXAoKGFkZHIpLCAob3N6KSwgKG5zeiksIChtdikpCisjZWxzZSAgLyogSEFWRV9NTUFQICYmIEhBVkVfTVJFTUFQICovCisjZGVmaW5lIENBTExfTVJFTUFQKGFkZHIsIG9zeiwgbnN6LCBtdikgTUZBSUwKKyNlbmRpZiAvKiBIQVZFX01NQVAgJiYgSEFWRV9NUkVNQVAgKi8KKworI2lmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQ0FMTF9NT1JFQ09SRShTKSAgICAgTU9SRUNPUkUoUykKKyNlbHNlICAvKiBIQVZFX01PUkVDT1JFICovCisjZGVmaW5lIENBTExfTU9SRUNPUkUoUykgICAgIE1GQUlMCisjZW5kaWYgLyogSEFWRV9NT1JFQ09SRSAqLworCisvKiBtc3RhdGUgYml0IHNldCBpZiBjb250aW5ndW91cyBtb3JlY29yZSBkaXNhYmxlZCBvciBmYWlsZWQgKi8KKyNkZWZpbmUgVVNFX05PTkNPTlRJR1VPVVNfQklUICg0VSkKKworLyogc2VnbWVudCBiaXQgc2V0IGluIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlICovCisjZGVmaW5lIEVYVEVSTl9CSVQgICAgICAgICAgICAoOFUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIExvY2sgcHJlbGltaW5hcmllcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmIFVTRV9MT0NLUworCisvKgorICBXaGVuIGxvY2tzIGFyZSBkZWZpbmVkLCB0aGVyZSBhcmUgdXAgdG8gdHdvIGdsb2JhbCBsb2NrczoKKworICAqIElmIEhBVkVfTU9SRUNPUkUsIG1vcmVjb3JlX211dGV4IHByb3RlY3RzIHNlcXVlbmNlcyBvZiBjYWxscyB0bworICAgIE1PUkVDT1JFLiAgSW4gbWFueSBjYXNlcyBzeXNfYWxsb2MgcmVxdWlyZXMgdHdvIGNhbGxzLCB0aGF0IHNob3VsZAorICAgIG5vdCBiZSBpbnRlcmxlYXZlZCB3aXRoIGNhbGxzIGJ5IG90aGVyIHRocmVhZHMuICBUaGlzIGRvZXMgbm90CisgICAgcHJvdGVjdCBhZ2FpbnN0IGRpcmVjdCBjYWxscyB0byBNT1JFQ09SRSBieSBvdGhlciB0aHJlYWRzIG5vdAorICAgIHVzaW5nIHRoaXMgbG9jaywgc28gdGhlcmUgaXMgc3RpbGwgY29kZSB0byBjb3BlIHRoZSBiZXN0IHdlIGNhbiBvbgorICAgIGludGVyZmVyZW5jZS4KKworICAqIG1hZ2ljX2luaXRfbXV0ZXggZW5zdXJlcyB0aGF0IG1wYXJhbXMubWFnaWMgYW5kIG90aGVyCisgICAgdW5pcXVlIG1wYXJhbXMgdmFsdWVzIGFyZSBpbml0aWFsaXplZCBvbmx5IG9uY2UuCisqLworCisjaWZuZGVmIFdJTjMyCisvKiBCeSBkZWZhdWx0IHVzZSBwb3NpeCBsb2NrcyAqLworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNkZWZpbmUgTUxPQ0tfVCBwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgcHRocmVhZF9tdXRleF9pbml0KGwsIE5VTEwpCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICBwdGhyZWFkX211dGV4X3VubG9jayhsKQorCisjaWYgSEFWRV9NT1JFQ09SRQorc3RhdGljIE1MT0NLX1QgbW9yZWNvcmVfbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworI2VuZGlmIC8qIEhBVkVfTU9SRUNPUkUgKi8KKworc3RhdGljIE1MT0NLX1QgbWFnaWNfaW5pdF9tdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKyNlbHNlIC8qIFdJTjMyICovCisvKgorICAgQmVjYXVzZSBsb2NrLXByb3RlY3RlZCByZWdpb25zIGhhdmUgYm91bmRlZCB0aW1lcywgYW5kIHRoZXJlCisgICBhcmUgbm8gcmVjdXJzaXZlIGxvY2sgY2FsbHMsIHdlIGNhbiB1c2Ugc2ltcGxlIHNwaW5sb2Nrcy4KKyovCisKKyNkZWZpbmUgTUxPQ0tfVCBsb25nCitzdGF0aWMgaW50IHdpbjMyX2FjcXVpcmVfbG9jayAoTUxPQ0tfVCAqc2wpIHsKKyAgZm9yICg7OykgeworI2lmZGVmIEludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlUG9pbnRlcgorICAgIGlmICghSW50ZXJsb2NrZWRDb21wYXJlRXhjaGFuZ2Uoc2wsIDEsIDApKQorICAgICAgcmV0dXJuIDA7CisjZWxzZSAgLyogVXNlIG9sZGVyIHZvaWQqIHZlcnNpb24gKi8KKyAgICBpZiAoIUludGVybG9ja2VkQ29tcGFyZUV4Y2hhbmdlKCh2b2lkKiopc2wsICh2b2lkKikxLCAodm9pZCopMCkpCisgICAgICByZXR1cm4gMDsKKyNlbmRpZiAvKiBJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZVBvaW50ZXIgKi8KKyAgICBTbGVlcCAoMCk7CisgIH0KK30KKworc3RhdGljIHZvaWQgd2luMzJfcmVsZWFzZV9sb2NrIChNTE9DS19UICpzbCkgeworICBJbnRlcmxvY2tlZEV4Y2hhbmdlIChzbCwgMCk7Cit9CisKKyNkZWZpbmUgSU5JVElBTF9MT0NLKGwpICAgICAgKihsKT0wCisjZGVmaW5lIEFDUVVJUkVfTE9DSyhsKSAgICAgIHdpbjMyX2FjcXVpcmVfbG9jayhsKQorI2RlZmluZSBSRUxFQVNFX0xPQ0sobCkgICAgICB3aW4zMl9yZWxlYXNlX2xvY2sobCkKKyNpZiBIQVZFX01PUkVDT1JFCitzdGF0aWMgTUxPQ0tfVCBtb3JlY29yZV9tdXRleDsKKyNlbmRpZiAvKiBIQVZFX01PUkVDT1JFICovCitzdGF0aWMgTUxPQ0tfVCBtYWdpY19pbml0X211dGV4OworI2VuZGlmIC8qIFdJTjMyICovCisKKyNkZWZpbmUgVVNFX0xPQ0tfQklUICAgICAgICAgICAgICAgKDJVKQorI2Vsc2UgIC8qIFVTRV9MT0NLUyAqLworI2RlZmluZSBVU0VfTE9DS19CSVQgICAgICAgICAgICAgICAoMFUpCisjZGVmaW5lIElOSVRJQUxfTE9DSyhsKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisjaWYgVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUKKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkgICAgQUNRVUlSRV9MT0NLKCZtb3JlY29yZV9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpICAgIFJFTEVBU0VfTE9DSygmbW9yZWNvcmVfbXV0ZXgpOworI2Vsc2UgLyogVVNFX0xPQ0tTICYmIEhBVkVfTU9SRUNPUkUgKi8KKyNkZWZpbmUgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCkKKyNlbmRpZiAvKiBVU0VfTE9DS1MgJiYgSEFWRV9NT1JFQ09SRSAqLworCisjaWYgVVNFX0xPQ0tTCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkgIEFDUVVJUkVfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZGVmaW5lIFJFTEVBU0VfTUFHSUNfSU5JVF9MT0NLKCkgIFJFTEVBU0VfTE9DSygmbWFnaWNfaW5pdF9tdXRleCk7CisjZWxzZSAgLyogVVNFX0xPQ0tTICovCisjZGVmaW5lIEFDUVVJUkVfTUFHSUNfSU5JVF9MT0NLKCkKKyNkZWZpbmUgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKQorI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBDaHVuayByZXByZXNlbnRhdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIChUaGUgZm9sbG93aW5nIGluY2x1ZGVzIGxpZ2h0bHkgZWRpdGVkIGV4cGxhbmF0aW9ucyBieSBDb2xpbiBQbHVtYi4pCisKKyAgVGhlIG1hbGxvY19jaHVuayBkZWNsYXJhdGlvbiBiZWxvdyBpcyBtaXNsZWFkaW5nIChidXQgYWNjdXJhdGUgYW5kCisgIG5lY2Vzc2FyeSkuICBJdCBkZWNsYXJlcyBhICJ2aWV3IiBpbnRvIG1lbW9yeSBhbGxvd2luZyBhY2Nlc3MgdG8KKyAgbmVjZXNzYXJ5IGZpZWxkcyBhdCBrbm93biBvZmZzZXRzIGZyb20gYSBnaXZlbiBiYXNlLgorCisgIENodW5rcyBvZiBtZW1vcnkgYXJlIG1haW50YWluZWQgdXNpbmcgYSBgYm91bmRhcnkgdGFnJyBtZXRob2QgYXMKKyAgb3JpZ2luYWxseSBkZXNjcmliZWQgYnkgS251dGguICAoU2VlIHRoZSBwYXBlciBieSBQYXVsIFdpbHNvbgorICBmdHA6Ly9mdHAuY3MudXRleGFzLmVkdS9wdWIvZ2FyYmFnZS9hbGxvY3Nydi5wcyBmb3IgYSBzdXJ2ZXkgb2Ygc3VjaAorICB0ZWNobmlxdWVzLikgIFNpemVzIG9mIGZyZWUgY2h1bmtzIGFyZSBzdG9yZWQgYm90aCBpbiB0aGUgZnJvbnQgb2YKKyAgZWFjaCBjaHVuayBhbmQgYXQgdGhlIGVuZC4gIFRoaXMgbWFrZXMgY29uc29saWRhdGluZyBmcmFnbWVudGVkCisgIGNodW5rcyBpbnRvIGJpZ2dlciBjaHVua3MgZmFzdC4gIFRoZSBoZWFkIGZpZWxkcyBhbHNvIGhvbGQgYml0cworICByZXByZXNlbnRpbmcgd2hldGhlciBjaHVua3MgYXJlIGZyZWUgb3IgaW4gdXNlLgorCisgIEhlcmUgYXJlIHNvbWUgcGljdHVyZXMgdG8gbWFrZSBpdCBjbGVhcmVyLiAgVGhleSBhcmUgImV4cGxvZGVkIiB0bworICBzaG93IHRoYXQgdGhlIHN0YXRlIG9mIGEgY2h1bmsgY2FuIGJlIHRob3VnaHQgb2YgYXMgZXh0ZW5kaW5nIGZyb20KKyAgdGhlIGhpZ2ggMzEgYml0cyBvZiB0aGUgaGVhZCBmaWVsZCBvZiBpdHMgaGVhZGVyIHRocm91Z2ggdGhlCisgIHByZXZfZm9vdCBhbmQgUElOVVNFX0JJVCBiaXQgb2YgdGhlIGZvbGxvd2luZyBjaHVuayBoZWFkZXIuCisKKyAgQSBjaHVuayB0aGF0J3MgaW4gdXNlIGxvb2tzIGxpa2U6CisKKyAgIGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgfCBTaXplIG9mIHByZXZpb3VzIGNodW5rIChpZiBQID0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8UHwKKyAgICAgICAgIHwgU2l6ZSBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxfCArLSsKKyAgIG1lbS0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoKKyAgICAgICAgICstICAgICAgc2l6ZSAtIHNpemVvZihzaXplX3QpIGF2YWlsYWJsZSBwYXlsb2FkIGJ5dGVzICAgICAgICAgIC0rCisgICAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorIGNodW5rLT4gKy0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKyB8MXwKKyAgICAgICB8IFNpemUgb2YgbmV4dCBjaHVuayAobWF5IG9yIG1heSBub3QgYmUgaW4gdXNlKSAgICAgICAgICAgICAgIHwgKy0rCisgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKworICAgIEFuZCBpZiBpdCdzIGZyZWUsIGl0IGxvb2tzIGxpa2UgdGhpczoKKworICAgY2h1bmstPiArLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtKworICAgICAgICAgICB8IFVzZXIgcGF5bG9hZCAobXVzdCBiZSBpbiB1c2UsIG9yIHdlIHdvdWxkIGhhdmUgbWVyZ2VkISkgICAgICAgfAorICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHxQfAorICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB8ICstKworICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgIHwgTmV4dCBwb2ludGVyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBQcmV2IHBvaW50ZXIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOgorICAgICAgICAgKy0gICAgICBzaXplIC0gc2l6ZW9mKHN0cnVjdCBjaHVuaykgdW51c2VkIGJ5dGVzICAgICAgICAgICAgICAgLSsKKyAgICAgICAgIDogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgfCBTaXplIG9mIHRoaXMgY2h1bmsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rIHwwfAorICAgICAgIHwgU2l6ZSBvZiBuZXh0IGNodW5rIChtdXN0IGJlIGluIHVzZSwgb3Igd2Ugd291bGQgaGF2ZSBtZXJnZWQpfCArLSsKKyBtZW0tPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6CisgICAgICAgKy0gVXNlciBwYXlsb2FkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLSsKKyAgICAgICA6ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8MHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICstKworICBOb3RlIHRoYXQgc2luY2Ugd2UgYWx3YXlzIG1lcmdlIGFkamFjZW50IGZyZWUgY2h1bmtzLCB0aGUgY2h1bmtzCisgIGFkamFjZW50IHRvIGEgZnJlZSBjaHVuayBtdXN0IGJlIGluIHVzZS4KKworICBHaXZlbiBhIHBvaW50ZXIgdG8gYSBjaHVuayAod2hpY2ggY2FuIGJlIGRlcml2ZWQgdHJpdmlhbGx5IGZyb20gdGhlCisgIHBheWxvYWQgcG9pbnRlcikgd2UgY2FuLCBpbiBPKDEpIHRpbWUsIGZpbmQgb3V0IHdoZXRoZXIgdGhlIGFkamFjZW50CisgIGNodW5rcyBhcmUgZnJlZSwgYW5kIGlmIHNvLCB1bmxpbmsgdGhlbSBmcm9tIHRoZSBsaXN0cyB0aGF0IHRoZXkKKyAgYXJlIG9uIGFuZCBtZXJnZSB0aGVtIHdpdGggdGhlIGN1cnJlbnQgY2h1bmsuCisKKyAgQ2h1bmtzIGFsd2F5cyBiZWdpbiBvbiBldmVuIHdvcmQgYm91bmRhcmllcywgc28gdGhlIG1lbSBwb3J0aW9uCisgICh3aGljaCBpcyByZXR1cm5lZCB0byB0aGUgdXNlcikgaXMgYWxzbyBvbiBhbiBldmVuIHdvcmQgYm91bmRhcnksIGFuZAorICB0aHVzIGF0IGxlYXN0IGRvdWJsZS13b3JkIGFsaWduZWQuCisKKyAgVGhlIFAgKFBJTlVTRV9CSVQpIGJpdCwgc3RvcmVkIGluIHRoZSB1bnVzZWQgbG93LW9yZGVyIGJpdCBvZiB0aGUKKyAgY2h1bmsgc2l6ZSAod2hpY2ggaXMgYWx3YXlzIGEgbXVsdGlwbGUgb2YgdHdvIHdvcmRzKSwgaXMgYW4gaW4tdXNlCisgIGJpdCBmb3IgdGhlICpwcmV2aW91cyogY2h1bmsuICBJZiB0aGF0IGJpdCBpcyAqY2xlYXIqLCB0aGVuIHRoZQorICB3b3JkIGJlZm9yZSB0aGUgY3VycmVudCBjaHVuayBzaXplIGNvbnRhaW5zIHRoZSBwcmV2aW91cyBjaHVuaworICBzaXplLCBhbmQgY2FuIGJlIHVzZWQgdG8gZmluZCB0aGUgZnJvbnQgb2YgdGhlIHByZXZpb3VzIGNodW5rLgorICBUaGUgdmVyeSBmaXJzdCBjaHVuayBhbGxvY2F0ZWQgYWx3YXlzIGhhcyB0aGlzIGJpdCBzZXQsIHByZXZlbnRpbmcKKyAgYWNjZXNzIHRvIG5vbi1leGlzdGVudCAob3Igbm9uLW93bmVkKSBtZW1vcnkuIElmIHBpbnVzZSBpcyBzZXQgZm9yCisgIGFueSBnaXZlbiBjaHVuaywgdGhlbiB5b3UgQ0FOTk9UIGRldGVybWluZSB0aGUgc2l6ZSBvZiB0aGUKKyAgcHJldmlvdXMgY2h1bmssIGFuZCBtaWdodCBldmVuIGdldCBhIG1lbW9yeSBhZGRyZXNzaW5nIGZhdWx0IHdoZW4KKyAgdHJ5aW5nIHRvIGRvIHNvLgorCisgIFRoZSBDIChDSU5VU0VfQklUKSBiaXQsIHN0b3JlZCBpbiB0aGUgdW51c2VkIHNlY29uZC1sb3dlc3QgYml0IG9mCisgIHRoZSBjaHVuayBzaXplIHJlZHVuZGFudGx5IHJlY29yZHMgd2hldGhlciB0aGUgY3VycmVudCBjaHVuayBpcworICBpbnVzZS4gVGhpcyByZWR1bmRhbmN5IGVuYWJsZXMgdXNhZ2UgY2hlY2tzIHdpdGhpbiBmcmVlIGFuZCByZWFsbG9jLAorICBhbmQgcmVkdWNlcyBpbmRpcmVjdGlvbiB3aGVuIGZyZWVpbmcgYW5kIGNvbnNvbGlkYXRpbmcgY2h1bmtzLgorCisgIEVhY2ggZnJlc2hseSBhbGxvY2F0ZWQgY2h1bmsgbXVzdCBoYXZlIGJvdGggY2ludXNlIGFuZCBwaW51c2Ugc2V0LgorICBUaGF0IGlzLCBlYWNoIGFsbG9jYXRlZCBjaHVuayBib3JkZXJzIGVpdGhlciBhIHByZXZpb3VzbHkgYWxsb2NhdGVkCisgIGFuZCBzdGlsbCBpbi11c2UgY2h1bmssIG9yIHRoZSBiYXNlIG9mIGl0cyBtZW1vcnkgYXJlbmEuIFRoaXMgaXMKKyAgZW5zdXJlZCBieSBtYWtpbmcgYWxsIGFsbG9jYXRpb25zIGZyb20gdGhlIHRoZSBgbG93ZXN0JyBwYXJ0IG9mIGFueQorICBmb3VuZCBjaHVuay4gIEZ1cnRoZXIsIG5vIGZyZWUgY2h1bmsgcGh5c2ljYWxseSBib3JkZXJzIGFub3RoZXIgb25lLAorICBzbyBlYWNoIGZyZWUgY2h1bmsgaXMga25vd24gdG8gYmUgcHJlY2VkZWQgYW5kIGZvbGxvd2VkIGJ5IGVpdGhlcgorICBpbnVzZSBjaHVua3Mgb3IgdGhlIGVuZHMgb2YgbWVtb3J5LgorCisgIE5vdGUgdGhhdCB0aGUgYGZvb3QnIG9mIHRoZSBjdXJyZW50IGNodW5rIGlzIGFjdHVhbGx5IHJlcHJlc2VudGVkCisgIGFzIHRoZSBwcmV2X2Zvb3Qgb2YgdGhlIE5FWFQgY2h1bmsuIFRoaXMgbWFrZXMgaXQgZWFzaWVyIHRvCisgIGRlYWwgd2l0aCBhbGlnbm1lbnRzIGV0YyBidXQgY2FuIGJlIHZlcnkgY29uZnVzaW5nIHdoZW4gdHJ5aW5nCisgIHRvIGV4dGVuZCBvciBhZGFwdCB0aGlzIGNvZGUuCisKKyAgVGhlIGV4Y2VwdGlvbnMgdG8gYWxsIHRoaXMgYXJlCisKKyAgICAgMS4gVGhlIHNwZWNpYWwgY2h1bmsgYHRvcCcgaXMgdGhlIHRvcC1tb3N0IGF2YWlsYWJsZSBjaHVuayAoaS5lLiwKKyAgICAgICAgdGhlIG9uZSBib3JkZXJpbmcgdGhlIGVuZCBvZiBhdmFpbGFibGUgbWVtb3J5KS4gSXQgaXMgdHJlYXRlZAorICAgICAgICBzcGVjaWFsbHkuICBUb3AgaXMgbmV2ZXIgaW5jbHVkZWQgaW4gYW55IGJpbiwgaXMgdXNlZCBvbmx5IGlmCisgICAgICAgIG5vIG90aGVyIGNodW5rIGlzIGF2YWlsYWJsZSwgYW5kIGlzIHJlbGVhc2VkIGJhY2sgdG8gdGhlCisgICAgICAgIHN5c3RlbSBpZiBpdCBpcyB2ZXJ5IGxhcmdlIChzZWUgTV9UUklNX1RIUkVTSE9MRCkuICBJbiBlZmZlY3QsCisgICAgICAgIHRoZSB0b3AgY2h1bmsgaXMgdHJlYXRlZCBhcyBsYXJnZXIgKGFuZCB0aHVzIGxlc3Mgd2VsbAorICAgICAgICBmaXR0aW5nKSB0aGFuIGFueSBvdGhlciBhdmFpbGFibGUgY2h1bmsuICBUaGUgdG9wIGNodW5rCisgICAgICAgIGRvZXNuJ3QgdXBkYXRlIGl0cyB0cmFpbGluZyBzaXplIGZpZWxkIHNpbmNlIHRoZXJlIGlzIG5vIG5leHQKKyAgICAgICAgY29udGlndW91cyBjaHVuayB0aGF0IHdvdWxkIGhhdmUgdG8gaW5kZXggb2ZmIGl0LiBIb3dldmVyLAorICAgICAgICBzcGFjZSBpcyBzdGlsbCBhbGxvY2F0ZWQgZm9yIGl0IChUT1BfRk9PVF9TSVpFKSB0byBlbmFibGUKKyAgICAgICAgc2VwYXJhdGlvbiBvciBtZXJnaW5nIHdoZW4gc3BhY2UgaXMgZXh0ZW5kZWQuCisKKyAgICAgMy4gQ2h1bmtzIGFsbG9jYXRlZCB2aWEgbW1hcCwgd2hpY2ggaGF2ZSB0aGUgbG93ZXN0LW9yZGVyIGJpdAorICAgICAgICAoSVNfTU1BUFBFRF9CSVQpIHNldCBpbiB0aGVpciBwcmV2X2Zvb3QgZmllbGRzLCBhbmQgZG8gbm90IHNldAorICAgICAgICBQSU5VU0VfQklUIGluIHRoZWlyIGhlYWQgZmllbGRzLiAgQmVjYXVzZSB0aGV5IGFyZSBhbGxvY2F0ZWQKKyAgICAgICAgb25lLWJ5LW9uZSwgZWFjaCBtdXN0IGNhcnJ5IGl0cyBvd24gcHJldl9mb290IGZpZWxkLCB3aGljaCBpcworICAgICAgICBhbHNvIHVzZWQgdG8gaG9sZCB0aGUgb2Zmc2V0IHRoaXMgY2h1bmsgaGFzIHdpdGhpbiBpdHMgbW1hcHBlZAorICAgICAgICByZWdpb24sIHdoaWNoIGlzIG5lZWRlZCB0byBwcmVzZXJ2ZSBhbGlnbm1lbnQuIEVhY2ggbW1hcHBlZAorICAgICAgICBjaHVuayBpcyB0cmFpbGVkIGJ5IHRoZSBmaXJzdCB0d28gZmllbGRzIG9mIGEgZmFrZSBuZXh0LWNodW5rCisgICAgICAgIGZvciBzYWtlIG9mIHVzYWdlIGNoZWNrcy4KKworKi8KKworc3RydWN0IG1hbGxvY19jaHVuayB7CisgIHNpemVfdCAgICAgICAgICAgICAgIHByZXZfZm9vdDsgIC8qIFNpemUgb2YgcHJldmlvdXMgY2h1bmsgKGlmIGZyZWUpLiAgKi8KKyAgc2l6ZV90ICAgICAgICAgICAgICAgaGVhZDsgICAgICAgLyogU2l6ZSBhbmQgaW51c2UgYml0cy4gKi8KKyAgc3RydWN0IG1hbGxvY19jaHVuayogZmQ7ICAgICAgICAgLyogZG91YmxlIGxpbmtzIC0tIHVzZWQgb25seSBpZiBmcmVlLiAqLworICBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBiazsKK307CisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19jaHVuayAgbWNodW5rOwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX2NodW5rKiBtY2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfY2h1bmsqIHNiaW5wdHI7ICAvKiBUaGUgdHlwZSBvZiBiaW5zIG9mIGNodW5rcyAqLwordHlwZWRlZiB1bnNpZ25lZCBpbnQgYmluZGV4X3Q7ICAgICAgICAgLyogRGVzY3JpYmVkIGJlbG93ICovCit0eXBlZGVmIHVuc2lnbmVkIGludCBiaW5tYXBfdDsgICAgICAgICAvKiBEZXNjcmliZWQgYmVsb3cgKi8KK3R5cGVkZWYgdW5zaWduZWQgaW50IGZsYWdfdDsgICAgICAgICAgIC8qIFRoZSB0eXBlIG9mIHZhcmlvdXMgYml0IGZsYWcgc2V0cyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tIENodW5rcyBzaXplcyBhbmQgYWxpZ25tZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIE1DSFVOS19TSVpFICAgICAgICAgKHNpemVvZihtY2h1bmspKQorCisjaWYgRk9PVEVSUworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChUV09fU0laRV9UX1NJWkVTKQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBDSFVOS19PVkVSSEVBRCAgICAgIChTSVpFX1RfU0laRSkKKyNlbmRpZiAvKiBGT09URVJTICovCisKKy8qIE1NYXBwZWQgY2h1bmtzIG5lZWQgYSBzZWNvbmQgd29yZCBvZiBvdmVyaGVhZCAuLi4gKi8KKyNkZWZpbmUgTU1BUF9DSFVOS19PVkVSSEVBRCAoVFdPX1NJWkVfVF9TSVpFUykKKy8qIC4uLiBhbmQgYWRkaXRpb25hbCBwYWRkaW5nIGZvciBmYWtlIG5leHQtY2h1bmsgYXQgZm9vdCAqLworI2RlZmluZSBNTUFQX0ZPT1RfUEFEICAgICAgIChGT1VSX1NJWkVfVF9TSVpFUykKKworLyogVGhlIHNtYWxsZXN0IHNpemUgd2UgY2FuIG1hbGxvYyBpcyBhbiBhbGlnbmVkIG1pbmltYWwgY2h1bmsgKi8KKyNkZWZpbmUgTUlOX0NIVU5LX1NJWkVcCisgICgoTUNIVU5LX1NJWkUgKyBDSFVOS19BTElHTl9NQVNLKSAmIH5DSFVOS19BTElHTl9NQVNLKQorCisvKiBjb252ZXJzaW9uIGZyb20gbWFsbG9jIGhlYWRlcnMgdG8gdXNlciBwb2ludGVycywgYW5kIGJhY2sgKi8KKyNkZWZpbmUgY2h1bmsybWVtKHApICAgICAgICAoKHZvaWQqKSgoY2hhciopKHApICAgICAgICsgVFdPX1NJWkVfVF9TSVpFUykpCisjZGVmaW5lIG1lbTJjaHVuayhtZW0pICAgICAgKChtY2h1bmtwdHIpKChjaGFyKikobWVtKSAtIFRXT19TSVpFX1RfU0laRVMpKQorLyogY2h1bmsgYXNzb2NpYXRlZCB3aXRoIGFsaWduZWQgYWRkcmVzcyBBICovCisjZGVmaW5lIGFsaWduX2FzX2NodW5rKEEpICAgKG1jaHVua3B0cikoKEEpICsgYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShBKSkpCisKKy8qIEJvdW5kcyBvbiByZXF1ZXN0IChub3QgY2h1bmspIHNpemVzLiAqLworI2RlZmluZSBNQVhfUkVRVUVTVCAgICAgICAgICgoLU1JTl9DSFVOS19TSVpFKSA8PCAyKQorI2RlZmluZSBNSU5fUkVRVUVTVCAgICAgICAgIChNSU5fQ0hVTktfU0laRSAtIENIVU5LX09WRVJIRUFEIC0gU0laRV9UX09ORSkKKworLyogcGFkIHJlcXVlc3QgYnl0ZXMgaW50byBhIHVzYWJsZSBzaXplICovCisjZGVmaW5lIHBhZF9yZXF1ZXN0KHJlcSkgXAorICAgKCgocmVxKSArIENIVU5LX09WRVJIRUFEICsgQ0hVTktfQUxJR05fTUFTSykgJiB+Q0hVTktfQUxJR05fTUFTSykKKworLyogcGFkIHJlcXVlc3QsIGNoZWNraW5nIGZvciBtaW5pbXVtIChidXQgbm90IG1heGltdW0pICovCisjZGVmaW5lIHJlcXVlc3Qyc2l6ZShyZXEpIFwKKyAgKCgocmVxKSA8IE1JTl9SRVFVRVNUKT8gTUlOX0NIVU5LX1NJWkUgOiBwYWRfcmVxdWVzdChyZXEpKQorCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLSBPcGVyYXRpb25zIG9uIGhlYWQgYW5kIGZvb3QgZmllbGRzIC0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFRoZSBoZWFkIGZpZWxkIG9mIGEgY2h1bmsgaXMgb3InZWQgd2l0aCBQSU5VU0VfQklUIHdoZW4gcHJldmlvdXMKKyAgYWRqYWNlbnQgY2h1bmsgaW4gdXNlLCBhbmQgb3InZWQgd2l0aCBDSU5VU0VfQklUIGlmIHRoaXMgY2h1bmsgaXMgaW4KKyAgdXNlLiBJZiB0aGUgY2h1bmsgd2FzIG9idGFpbmVkIHdpdGggbW1hcCwgdGhlIHByZXZfZm9vdCBmaWVsZCBoYXMKKyAgSVNfTU1BUFBFRF9CSVQgc2V0LCBvdGhlcndpc2UgaG9sZGluZyB0aGUgb2Zmc2V0IG9mIHRoZSBiYXNlIG9mIHRoZQorICBtbWFwcGVkIHJlZ2lvbiB0byB0aGUgYmFzZSBvZiB0aGUgY2h1bmsuCisqLworCisjZGVmaW5lIFBJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9PTkUpCisjZGVmaW5lIENJTlVTRV9CSVQgICAgICAgICAgKFNJWkVfVF9UV08pCisjZGVmaW5lIElOVVNFX0JJVFMgICAgICAgICAgKFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkKKworLyogSGVhZCB2YWx1ZSBmb3IgZmVuY2Vwb3N0cyAqLworI2RlZmluZSBGRU5DRVBPU1RfSEVBRCAgICAgIChJTlVTRV9CSVRTfFNJWkVfVF9TSVpFKQorCisvKiBleHRyYWN0aW9uIG9mIGZpZWxkcyBmcm9tIGhlYWQgd29yZHMgKi8KKyNkZWZpbmUgY2ludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgQ0lOVVNFX0JJVCkKKyNkZWZpbmUgcGludXNlKHApICAgICAgICAgICAoKHApLT5oZWFkICYgUElOVVNFX0JJVCkKKyNkZWZpbmUgY2h1bmtzaXplKHApICAgICAgICAoKHApLT5oZWFkICYgfihJTlVTRV9CSVRTKSkKKworI2RlZmluZSBjbGVhcl9waW51c2UocCkgICAgICgocCktPmhlYWQgJj0gflBJTlVTRV9CSVQpCisjZGVmaW5lIGNsZWFyX2NpbnVzZShwKSAgICAgKChwKS0+aGVhZCAmPSB+Q0lOVVNFX0JJVCkKKworLyogVHJlYXQgc3BhY2UgYXQgcHRyICsvLSBvZmZzZXQgYXMgYSBjaHVuayAqLworI2RlZmluZSBjaHVua19wbHVzX29mZnNldChwLCBzKSAgKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpCisjZGVmaW5lIGNodW5rX21pbnVzX29mZnNldChwLCBzKSAoKG1jaHVua3B0cikoKChjaGFyKikocCkpIC0gKHMpKSkKKworLyogUHRyIHRvIG5leHQgb3IgcHJldmlvdXMgcGh5c2ljYWwgbWFsbG9jX2NodW5rLiAqLworI2RlZmluZSBuZXh0X2NodW5rKHApICgobWNodW5rcHRyKSggKChjaGFyKikocCkpICsgKChwKS0+aGVhZCAmIH5JTlVTRV9CSVRTKSkpCisjZGVmaW5lIHByZXZfY2h1bmsocCkgKChtY2h1bmtwdHIpKCAoKGNoYXIqKShwKSkgLSAoKHApLT5wcmV2X2Zvb3QpICkpCisKKy8qIGV4dHJhY3QgbmV4dCBjaHVuaydzIHBpbnVzZSBiaXQgKi8KKyNkZWZpbmUgbmV4dF9waW51c2UocCkgICgobmV4dF9jaHVuayhwKS0+aGVhZCkgJiBQSU5VU0VfQklUKQorCisvKiBHZXQvc2V0IHNpemUgYXQgZm9vdGVyICovCisjZGVmaW5lIGdldF9mb290KHAsIHMpICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290KQorI2RlZmluZSBzZXRfZm9vdChwLCBzKSAgKCgobWNodW5rcHRyKSgoY2hhciopKHApICsgKHMpKSktPnByZXZfZm9vdCA9IChzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGFuZCBmb290ICovCisjZGVmaW5lIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVQpLCBzZXRfZm9vdChwLCBzKSkKKworLyogU2V0IHNpemUsIHBpbnVzZSBiaXQsIGZvb3QsIGFuZCBjbGVhciBuZXh0IHBpbnVzZSAqLworI2RlZmluZSBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBzLCBuKVwKKyAgKGNsZWFyX3BpbnVzZShuKSwgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHMpKQorCisjZGVmaW5lIGlzX21tYXBwZWQocClcCisgICghKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpICYmICgocCktPnByZXZfZm9vdCAmIElTX01NQVBQRURfQklUKSkKKworLyogR2V0IHRoZSBpbnRlcm5hbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggY2h1bmsgcCAqLworI2RlZmluZSBvdmVyaGVhZF9mb3IocClcCisgKGlzX21tYXBwZWQocCk/IE1NQVBfQ0hVTktfT1ZFUkhFQUQgOiBDSFVOS19PVkVSSEVBRCkKKworLyogUmV0dXJuIHRydWUgaWYgbWFsbG9jZWQgc3BhY2UgaXMgbm90IG5lY2Vzc2FyaWx5IGNsZWFyZWQgKi8KKyNpZiBNTUFQX0NMRUFSUworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoIWlzX21tYXBwZWQocCkpCisjZWxzZSAvKiBNTUFQX0NMRUFSUyAqLworI2RlZmluZSBjYWxsb2NfbXVzdF9jbGVhcihwKSAoMSkKKyNlbmRpZiAvKiBNTUFQX0NMRUFSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE92ZXJsYWlkIGRhdGEgc3RydWN0dXJlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBXaGVuIGNodW5rcyBhcmUgbm90IGluIHVzZSwgdGhleSBhcmUgdHJlYXRlZCBhcyBub2RlcyBvZiBlaXRoZXIKKyAgbGlzdHMgb3IgdHJlZXMuCisKKyAgIlNtYWxsIiAgY2h1bmtzIGFyZSBzdG9yZWQgaW4gY2lyY3VsYXIgZG91Ymx5LWxpbmtlZCBsaXN0cywgYW5kIGxvb2sKKyAgbGlrZSB0aGlzOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgaW4gbGlzdCAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFVudXNlZCBzcGFjZSAobWF5IGJlIDAgYnl0ZXMgbG9uZykgICAgICAgICAgICAgICAgLgorICAgICAgICAgICAgLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4KKyAgICAgICAgICAgIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CituZXh0Y2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgIGBmb290OicgfCAgICAgICAgICAgICBTaXplIG9mIGNodW5rLCBpbiBieXRlcyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisKKyAgTGFyZ2VyIGNodW5rcyBhcmUga2VwdCBpbiBhIGZvcm0gb2YgYml0d2lzZSBkaWdpdGFsIHRyZWVzIChha2EKKyAgdHJpZXMpIGtleWVkIG9uIGNodW5rc2l6ZXMuICBCZWNhdXNlIG1hbGxvY190cmVlX2NodW5rcyBhcmUgb25seSBmb3IKKyAgZnJlZSBjaHVua3MgZ3JlYXRlciB0aGFuIDI1NiBieXRlcywgdGhlaXIgc2l6ZSBkb2Vzbid0IGltcG9zZSBhbnkKKyAgY29uc3RyYWludHMgb24gdXNlciBjaHVuayBzaXplcy4gIEVhY2ggbm9kZSBsb29rcyBsaWtlOgorCisgICAgY2h1bmstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBTaXplIG9mIHByZXZpb3VzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgYGhlYWQ6JyB8ICAgICAgICAgICAgIFNpemUgb2YgY2h1bmssIGluIGJ5dGVzICAgICAgICAgICAgICAgICAgICAgICAgIHxQfAorICAgICAgbWVtLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgRm9yd2FyZCBwb2ludGVyIHRvIG5leHQgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBCYWNrIHBvaW50ZXIgdG8gcHJldmlvdXMgY2h1bmsgb2Ygc2FtZSBzaXplICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIFBvaW50ZXIgdG8gbGVmdCBjaGlsZCAoY2hpbGRbMF0pICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgUG9pbnRlciB0byByaWdodCBjaGlsZCAoY2hpbGRbMV0pICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICAgICAgICAgICAgfCAgICAgICAgICAgICBQb2ludGVyIHRvIHBhcmVudCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAgICAgICAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgICAgICAgICAgICB8ICAgICAgICAgICAgIGJpbiBpbmRleCBvZiB0aGlzIGNodW5rICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICAgICAgICAgICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICAgICAgICAgIHwgICAgICAgICAgICAgVW51c2VkIHNwYWNlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgICAgICAgICAgICAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorbmV4dGNodW5rLT4gKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAgICBgZm9vdDonIHwgICAgICAgICAgICAgU2l6ZSBvZiBjaHVuaywgaW4gYnl0ZXMgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgICAgICAgICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworCisgIEVhY2ggdHJlZSBob2xkaW5nIHRyZWVub2RlcyBpcyBhIHRyZWUgb2YgdW5pcXVlIGNodW5rIHNpemVzLiAgQ2h1bmtzCisgIG9mIHRoZSBzYW1lIHNpemUgYXJlIGFycmFuZ2VkIGluIGEgY2lyY3VsYXJseS1saW5rZWQgbGlzdCwgd2l0aCBvbmx5CisgIHRoZSBvbGRlc3QgY2h1bmsgKHRoZSBuZXh0IHRvIGJlIHVzZWQsIGluIG91ciBGSUZPIG9yZGVyaW5nKQorICBhY3R1YWxseSBpbiB0aGUgdHJlZS4gIChUcmVlIG1lbWJlcnMgYXJlIGRpc3Rpbmd1aXNoZWQgYnkgYSBub24tbnVsbAorICBwYXJlbnQgcG9pbnRlci4pICBJZiBhIGNodW5rIHdpdGggdGhlIHNhbWUgc2l6ZSBhbiBhbiBleGlzdGluZyBub2RlCisgIGlzIGluc2VydGVkLCBpdCBpcyBsaW5rZWQgb2ZmIHRoZSBleGlzdGluZyBub2RlIHVzaW5nIHBvaW50ZXJzIHRoYXQKKyAgd29yayBpbiB0aGUgc2FtZSB3YXkgYXMgZmQvYmsgcG9pbnRlcnMgb2Ygc21hbGwgY2h1bmtzLgorCisgIEVhY2ggdHJlZSBjb250YWlucyBhIHBvd2VyIG9mIDIgc2l6ZWQgcmFuZ2Ugb2YgY2h1bmsgc2l6ZXMgKHRoZQorICBzbWFsbGVzdCBpcyAweDEwMCA8PSB4IDwgMHgxODApLCB3aGljaCBpcyBpcyBkaXZpZGVkIGluIGhhbGYgYXQgZWFjaAorICB0cmVlIGxldmVsLCB3aXRoIHRoZSBjaHVua3MgaW4gdGhlIHNtYWxsZXIgaGFsZiBvZiB0aGUgcmFuZ2UgKDB4MTAwCisgIDw9IHggPCAweDE0MCBmb3IgdGhlIHRvcCBub3NlKSBpbiB0aGUgbGVmdCBzdWJ0cmVlIGFuZCB0aGUgbGFyZ2VyCisgIGhhbGYgKDB4MTQwIDw9IHggPCAweDE4MCkgaW4gdGhlIHJpZ2h0IHN1YnRyZWUuICBUaGlzIGlzLCBvZiBjb3Vyc2UsCisgIGRvbmUgYnkgaW5zcGVjdGluZyBpbmRpdmlkdWFsIGJpdHMuCisKKyAgVXNpbmcgdGhlc2UgcnVsZXMsIGVhY2ggbm9kZSdzIGxlZnQgc3VidHJlZSBjb250YWlucyBhbGwgc21hbGxlcgorICBzaXplcyB0aGFuIGl0cyByaWdodCBzdWJ0cmVlLiAgSG93ZXZlciwgdGhlIG5vZGUgYXQgdGhlIHJvb3Qgb2YgZWFjaAorICBzdWJ0cmVlIGhhcyBubyBwYXJ0aWN1bGFyIG9yZGVyaW5nIHJlbGF0aW9uc2hpcCB0byBlaXRoZXIuICAoVGhlCisgIGRpdmlkaW5nIGxpbmUgYmV0d2VlbiB0aGUgc3VidHJlZSBzaXplcyBpcyBiYXNlZCBvbiB0cmllIHJlbGF0aW9uLikKKyAgSWYgd2UgcmVtb3ZlIHRoZSBsYXN0IGNodW5rIG9mIGEgZ2l2ZW4gc2l6ZSBmcm9tIHRoZSBpbnRlcmlvciBvZiB0aGUKKyAgdHJlZSwgd2UgbmVlZCB0byByZXBsYWNlIGl0IHdpdGggYSBsZWFmIG5vZGUuICBUaGUgdHJlZSBvcmRlcmluZworICBydWxlcyBwZXJtaXQgYSBub2RlIHRvIGJlIHJlcGxhY2VkIGJ5IGFueSBsZWFmIGJlbG93IGl0LgorCisgIFRoZSBzbWFsbGVzdCBjaHVuayBpbiBhIHRyZWUgKGEgY29tbW9uIG9wZXJhdGlvbiBpbiBhIGJlc3QtZml0CisgIGFsbG9jYXRvcikgY2FuIGJlIGZvdW5kIGJ5IHdhbGtpbmcgYSBwYXRoIHRvIHRoZSBsZWZ0bW9zdCBsZWFmIGluCisgIHRoZSB0cmVlLiAgVW5saWtlIGEgdXN1YWwgYmluYXJ5IHRyZWUsIHdoZXJlIHdlIGZvbGxvdyBsZWZ0IGNoaWxkCisgIHBvaW50ZXJzIHVudGlsIHdlIHJlYWNoIGEgbnVsbCwgaGVyZSB3ZSBmb2xsb3cgdGhlIHJpZ2h0IGNoaWxkCisgIHBvaW50ZXIgYW55IHRpbWUgdGhlIGxlZnQgb25lIGlzIG51bGwsIHVudGlsIHdlIHJlYWNoIGEgbGVhZiB3aXRoCisgIGJvdGggY2hpbGQgcG9pbnRlcnMgbnVsbC4gVGhlIHNtYWxsZXN0IGNodW5rIGluIHRoZSB0cmVlIHdpbGwgYmUKKyAgc29tZXdoZXJlIGFsb25nIHRoYXQgcGF0aC4KKworICBUaGUgd29yc3QgY2FzZSBudW1iZXIgb2Ygc3RlcHMgdG8gYWRkLCBmaW5kLCBvciByZW1vdmUgYSBub2RlIGlzCisgIGJvdW5kZWQgYnkgdGhlIG51bWJlciBvZiBiaXRzIGRpZmZlcmVudGlhdGluZyBjaHVua3Mgd2l0aGluCisgIGJpbnMuIFVuZGVyIGN1cnJlbnQgYmluIGNhbGN1bGF0aW9ucywgdGhpcyByYW5nZXMgZnJvbSA2IHVwIHRvIDIxCisgIChmb3IgMzIgYml0IHNpemVzKSBvciB1cCB0byA1MyAoZm9yIDY0IGJpdCBzaXplcykuIFRoZSB0eXBpY2FsIGNhc2UKKyAgaXMgb2YgY291cnNlIG11Y2ggYmV0dGVyLgorKi8KKworc3RydWN0IG1hbGxvY190cmVlX2NodW5rIHsKKyAgLyogVGhlIGZpcnN0IGZvdXIgZmllbGRzIG11c3QgYmUgY29tcGF0aWJsZSB3aXRoIG1hbGxvY19jaHVuayAqLworICBzaXplX3QgICAgICAgICAgICAgICAgICAgIHByZXZfZm9vdDsKKyAgc2l6ZV90ICAgICAgICAgICAgICAgICAgICBoZWFkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGZkOworICBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsqIGJrOworCisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogY2hpbGRbMl07CisgIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogcGFyZW50OworICBiaW5kZXhfdCAgICAgICAgICAgICAgICAgIGluZGV4OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFsbG9jX3RyZWVfY2h1bmsgIHRjaHVuazsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY190cmVlX2NodW5rKiB0Y2h1bmtwdHI7Cit0eXBlZGVmIHN0cnVjdCBtYWxsb2NfdHJlZV9jaHVuayogdGJpbnB0cjsgLyogVGhlIHR5cGUgb2YgYmlucyBvZiB0cmVlcyAqLworCisvKiBBIGxpdHRsZSBoZWxwZXIgbWFjcm8gZm9yIHRyZWVzICovCisjZGVmaW5lIGxlZnRtb3N0X2NoaWxkKHQpICgodCktPmNoaWxkWzBdICE9IDA/ICh0KS0+Y2hpbGRbMF0gOiAodCktPmNoaWxkWzFdKQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBTZWdtZW50cyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBFYWNoIG1hbGxvYyBzcGFjZSBtYXkgaW5jbHVkZSBub24tY29udGlndW91cyBzZWdtZW50cywgaGVsZCBpbiBhCisgIGxpc3QgaGVhZGVkIGJ5IGFuIGVtYmVkZGVkIG1hbGxvY19zZWdtZW50IHJlY29yZCByZXByZXNlbnRpbmcgdGhlCisgIHRvcC1tb3N0IHNwYWNlLiBTZWdtZW50cyBhbHNvIGluY2x1ZGUgZmxhZ3MgaG9sZGluZyBwcm9wZXJ0aWVzIG9mCisgIHRoZSBzcGFjZS4gTGFyZ2UgY2h1bmtzIHRoYXQgYXJlIGRpcmVjdGx5IGFsbG9jYXRlZCBieSBtbWFwIGFyZSBub3QKKyAgaW5jbHVkZWQgaW4gdGhpcyBsaXN0LiBUaGV5IGFyZSBpbnN0ZWFkIGluZGVwZW5kZW50bHkgY3JlYXRlZCBhbmQKKyAgZGVzdHJveWVkIHdpdGhvdXQgb3RoZXJ3aXNlIGtlZXBpbmcgdHJhY2sgb2YgdGhlbS4KKworICBTZWdtZW50IG1hbmFnZW1lbnQgbWFpbmx5IGNvbWVzIGludG8gcGxheSBmb3Igc3BhY2VzIGFsbG9jYXRlZCBieQorICBNTUFQLiAgQW55IGNhbGwgdG8gTU1BUCBtaWdodCBvciBtaWdodCBub3QgcmV0dXJuIG1lbW9yeSB0aGF0IGlzCisgIGFkamFjZW50IHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuICBNT1JFQ09SRSBub3JtYWxseSBjb250aWd1b3VzbHkKKyAgZXh0ZW5kcyB0aGUgY3VycmVudCBzcGFjZSwgc28gdGhpcyBzcGFjZSBpcyBhbG1vc3QgYWx3YXlzIGFkamFjZW50LAorICB3aGljaCBpcyBzaW1wbGVyIGFuZCBmYXN0ZXIgdG8gZGVhbCB3aXRoLiAoVGhpcyBpcyB3aHkgTU9SRUNPUkUgaXMKKyAgdXNlZCBwcmVmZXJlbnRpYWxseSB0byBNTUFQIHdoZW4gYm90aCBhcmUgYXZhaWxhYmxlIC0tIHNlZQorICBzeXNfYWxsb2MuKSAgV2hlbiBhbGxvY2F0aW5nIHVzaW5nIE1NQVAsIHdlIGRvbid0IHVzZSBhbnkgb2YgdGhlCisgIGhpbnRpbmcgbWVjaGFuaXNtcyAoaW5jb25zaXN0ZW50bHkpIHN1cHBvcnRlZCBpbiB2YXJpb3VzCisgIGltcGxlbWVudGF0aW9ucyBvZiB1bml4IG1tYXAsIG9yIGRpc3Rpbmd1aXNoIHJlc2VydmluZyBmcm9tCisgIGNvbW1pdHRpbmcgbWVtb3J5LiBJbnN0ZWFkLCB3ZSBqdXN0IGFzayBmb3Igc3BhY2UsIGFuZCBleHBsb2l0CisgIGNvbnRpZ3VpdHkgd2hlbiB3ZSBnZXQgaXQuICBJdCBpcyBwcm9iYWJseSBwb3NzaWJsZSB0byBkbworICBiZXR0ZXIgdGhhbiB0aGlzIG9uIHNvbWUgc3lzdGVtcywgYnV0IG5vIGdlbmVyYWwgc2NoZW1lIHNlZW1zCisgIHRvIGJlIHNpZ25pZmljYW50bHkgYmV0dGVyLgorCisgIE1hbmFnZW1lbnQgZW50YWlscyBhIHNpbXBsZXIgdmFyaWFudCBvZiB0aGUgY29uc29saWRhdGlvbiBzY2hlbWUKKyAgdXNlZCBmb3IgY2h1bmtzIHRvIHJlZHVjZSBmcmFnbWVudGF0aW9uIC0tIG5ldyBhZGphY2VudCBtZW1vcnkgaXMKKyAgbm9ybWFsbHkgcHJlcGVuZGVkIG9yIGFwcGVuZGVkIHRvIGFuIGV4aXN0aW5nIHNlZ21lbnQuIEhvd2V2ZXIsCisgIHRoZXJlIGFyZSBsaW1pdGF0aW9ucyBjb21wYXJlZCB0byBjaHVuayBjb25zb2xpZGF0aW9uIHRoYXQgbW9zdGx5CisgIHJlZmxlY3QgdGhlIGZhY3QgdGhhdCBzZWdtZW50IHByb2Nlc3NpbmcgaXMgcmVsYXRpdmVseSBpbmZyZXF1ZW50CisgIChvY2N1cnJpbmcgb25seSB3aGVuIGdldHRpbmcgbWVtb3J5IGZyb20gc3lzdGVtKSBhbmQgdGhhdCB3ZQorICBkb24ndCBleHBlY3QgdG8gaGF2ZSBodWdlIG51bWJlcnMgb2Ygc2VnbWVudHM6CisKKyAgKiBTZWdtZW50cyBhcmUgbm90IGluZGV4ZWQsIHNvIHRyYXZlcnNhbCByZXF1aXJlcyBsaW5lYXIgc2NhbnMuICAoSXQKKyAgICB3b3VsZCBiZSBwb3NzaWJsZSB0byBpbmRleCB0aGVzZSwgYnV0IGlzIG5vdCB3b3J0aCB0aGUgZXh0cmEKKyAgICBvdmVyaGVhZCBhbmQgY29tcGxleGl0eSBmb3IgbW9zdCBwcm9ncmFtcyBvbiBtb3N0IHBsYXRmb3Jtcy4pCisgICogTmV3IHNlZ21lbnRzIGFyZSBvbmx5IGFwcGVuZGVkIHRvIG9sZCBvbmVzIHdoZW4gaG9sZGluZyB0b3AtbW9zdAorICAgIG1lbW9yeTsgaWYgdGhleSBjYW5ub3QgYmUgcHJlcGVuZGVkIHRvIG90aGVycywgdGhleSBhcmUgaGVsZCBpbgorICAgIGRpZmZlcmVudCBzZWdtZW50cy4KKworICBFeGNlcHQgZm9yIHRoZSB0b3AtbW9zdCBzZWdtZW50IG9mIGFuIG1zdGF0ZSwgZWFjaCBzZWdtZW50IHJlY29yZAorICBpcyBrZXB0IGF0IHRoZSB0YWlsIG9mIGl0cyBzZWdtZW50LiBTZWdtZW50cyBhcmUgYWRkZWQgYnkgcHVzaGluZworICBzZWdtZW50IHJlY29yZHMgb250byB0aGUgbGlzdCBoZWFkZWQgYnkgJm1zdGF0ZS5zZWcgZm9yIHRoZQorICBjb250YWluaW5nIG1zdGF0ZS4KKworICBTZWdtZW50IGZsYWdzIGNvbnRyb2wgYWxsb2NhdGlvbi9tZXJnZS9kZWFsbG9jYXRpb24gcG9saWNpZXM6CisgICogSWYgRVhURVJOX0JJVCBzZXQsIHRoZW4gd2UgZGlkIG5vdCBhbGxvY2F0ZSB0aGlzIHNlZ21lbnQsCisgICAgYW5kIHNvIHNob3VsZCBub3QgdHJ5IHRvIGRlYWxsb2NhdGUgb3IgbWVyZ2Ugd2l0aCBvdGhlcnMuCisgICAgKFRoaXMgY3VycmVudGx5IGhvbGRzIG9ubHkgZm9yIHRoZSBpbml0aWFsIHNlZ21lbnQgcGFzc2VkCisgICAgaW50byBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZS4pCisgICogSWYgSVNfTU1BUFBFRF9CSVQgc2V0LCB0aGUgc2VnbWVudCBtYXkgYmUgbWVyZ2VkIHdpdGgKKyAgICBvdGhlciBzdXJyb3VuZGluZyBtbWFwcGVkIHNlZ21lbnRzIGFuZCB0cmltbWVkL2RlLWFsbG9jYXRlZAorICAgIHVzaW5nIG11bm1hcC4KKyAgKiBJZiBuZWl0aGVyIGJpdCBpcyBzZXQsIHRoZW4gdGhlIHNlZ21lbnQgd2FzIG9idGFpbmVkIHVzaW5nCisgICAgTU9SRUNPUkUgc28gY2FuIGJlIG1lcmdlZCB3aXRoIHN1cnJvdW5kaW5nIE1PUkVDT1JFJ2Qgc2VnbWVudHMKKyAgICBhbmQgZGVhbGxvY2F0ZWQvdHJpbW1lZCB1c2luZyBNT1JFQ09SRSB3aXRoIG5lZ2F0aXZlIGFyZ3VtZW50cy4KKyovCisKK3N0cnVjdCBtYWxsb2Nfc2VnbWVudCB7CisgIGNoYXIqICAgICAgICBiYXNlOyAgICAgICAgICAgICAvKiBiYXNlIGFkZHJlc3MgKi8KKyAgc2l6ZV90ICAgICAgIHNpemU7ICAgICAgICAgICAgIC8qIGFsbG9jYXRlZCBzaXplICovCisgIHN0cnVjdCBtYWxsb2Nfc2VnbWVudCogbmV4dDsgICAvKiBwdHIgdG8gbmV4dCBzZWdtZW50ICovCisgIGZsYWdfdCAgICAgICBzZmxhZ3M7ICAgICAgICAgICAvKiBtbWFwIGFuZCBleHRlcm4gZmxhZyAqLworfTsKKworI2RlZmluZSBpc19tbWFwcGVkX3NlZ21lbnQoUykgICgoUyktPnNmbGFncyAmIElTX01NQVBQRURfQklUKQorI2RlZmluZSBpc19leHRlcm5fc2VnbWVudChTKSAgICgoUyktPnNmbGFncyAmIEVYVEVSTl9CSVQpCisKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50ICBtc2VnbWVudDsKK3R5cGVkZWYgc3RydWN0IG1hbGxvY19zZWdtZW50KiBtc2VnbWVudHB0cjsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtYWxsb2Nfc3RhdGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgIEEgbWFsbG9jX3N0YXRlIGhvbGRzIGFsbCBvZiB0aGUgYm9va2tlZXBpbmcgZm9yIGEgc3BhY2UuCisgICBUaGUgbWFpbiBmaWVsZHMgYXJlOgorCisgIFRvcAorICAgIFRoZSB0b3Btb3N0IGNodW5rIG9mIHRoZSBjdXJyZW50bHkgYWN0aXZlIHNlZ21lbnQuIEl0cyBzaXplIGlzCisgICAgY2FjaGVkIGluIHRvcHNpemUuICBUaGUgYWN0dWFsIHNpemUgb2YgdG9wbW9zdCBzcGFjZSBpcworICAgIHRvcHNpemUrVE9QX0ZPT1RfU0laRSwgd2hpY2ggaW5jbHVkZXMgc3BhY2UgcmVzZXJ2ZWQgZm9yIGFkZGluZworICAgIGZlbmNlcG9zdHMgYW5kIHNlZ21lbnQgcmVjb3JkcyBpZiBuZWNlc3Nhcnkgd2hlbiBnZXR0aW5nIG1vcmUKKyAgICBzcGFjZSBmcm9tIHRoZSBzeXN0ZW0uICBUaGUgc2l6ZSBhdCB3aGljaCB0byBhdXRvdHJpbSB0b3AgaXMKKyAgICBjYWNoZWQgZnJvbSBtcGFyYW1zIGluIHRyaW1fY2hlY2ssIGV4Y2VwdCB0aGF0IGl0IGlzIGRpc2FibGVkIGlmCisgICAgYW4gYXV0b3RyaW0gZmFpbHMuCisKKyAgRGVzaWduYXRlZCB2aWN0aW0gKGR2KQorICAgIFRoaXMgaXMgdGhlIHByZWZlcnJlZCBjaHVuayBmb3Igc2VydmljaW5nIHNtYWxsIHJlcXVlc3RzIHRoYXQKKyAgICBkb24ndCBoYXZlIGV4YWN0IGZpdHMuICBJdCBpcyBub3JtYWxseSB0aGUgY2h1bmsgc3BsaXQgb2ZmIG1vc3QKKyAgICByZWNlbnRseSB0byBzZXJ2aWNlIGFub3RoZXIgc21hbGwgcmVxdWVzdC4gIEl0cyBzaXplIGlzIGNhY2hlZCBpbgorICAgIGR2c2l6ZS4gVGhlIGxpbmsgZmllbGRzIG9mIHRoaXMgY2h1bmsgYXJlIG5vdCBtYWludGFpbmVkIHNpbmNlIGl0CisgICAgaXMgbm90IGtlcHQgaW4gYSBiaW4uCisKKyAgU21hbGxCaW5zCisgICAgQW4gYXJyYXkgb2YgYmluIGhlYWRlcnMgZm9yIGZyZWUgY2h1bmtzLiAgVGhlc2UgYmlucyBob2xkIGNodW5rcworICAgIHdpdGggc2l6ZXMgbGVzcyB0aGFuIE1JTl9MQVJHRV9TSVpFIGJ5dGVzLiBFYWNoIGJpbiBjb250YWlucworICAgIGNodW5rcyBvZiBhbGwgdGhlIHNhbWUgc2l6ZSwgc3BhY2VkIDggYnl0ZXMgYXBhcnQuICBUbyBzaW1wbGlmeQorICAgIHVzZSBpbiBkb3VibGUtbGlua2VkIGxpc3RzLCBlYWNoIGJpbiBoZWFkZXIgYWN0cyBhcyBhIG1hbGxvY19jaHVuaworICAgIHBvaW50aW5nIHRvIHRoZSByZWFsIGZpcnN0IG5vZGUsIGlmIGl0IGV4aXN0cyAoZWxzZSBwb2ludGluZyB0bworICAgIGl0c2VsZikuICBUaGlzIGF2b2lkcyBzcGVjaWFsLWNhc2luZyBmb3IgaGVhZGVycy4gIEJ1dCB0byBhdm9pZAorICAgIHdhc3RlLCB3ZSBhbGxvY2F0ZSBvbmx5IHRoZSBmZC9iayBwb2ludGVycyBvZiBiaW5zLCBhbmQgdGhlbiB1c2UKKyAgICByZXBvc2l0aW9uaW5nIHRyaWNrcyB0byB0cmVhdCB0aGVzZSBhcyB0aGUgZmllbGRzIG9mIGEgY2h1bmsuCisKKyAgVHJlZUJpbnMKKyAgICBUcmVlYmlucyBhcmUgcG9pbnRlcnMgdG8gdGhlIHJvb3RzIG9mIHRyZWVzIGhvbGRpbmcgYSByYW5nZSBvZgorICAgIHNpemVzLiBUaGVyZSBhcmUgMiBlcXVhbGx5IHNwYWNlZCB0cmVlYmlucyBmb3IgZWFjaCBwb3dlciBvZiB0d28KKyAgICBmcm9tIFRSRUVfU0hJRlQgdG8gVFJFRV9TSElGVCsxNi4gVGhlIGxhc3QgYmluIGhvbGRzIGFueXRoaW5nCisgICAgbGFyZ2VyLgorCisgIEJpbiBtYXBzCisgICAgVGhlcmUgaXMgb25lIGJpdCBtYXAgZm9yIHNtYWxsIGJpbnMgKCJzbWFsbG1hcCIpIGFuZCBvbmUgZm9yCisgICAgdHJlZWJpbnMgKCJ0cmVlbWFwKS4gIEVhY2ggYmluIHNldHMgaXRzIGJpdCB3aGVuIG5vbi1lbXB0eSwgYW5kCisgICAgY2xlYXJzIHRoZSBiaXQgd2hlbiBlbXB0eS4gIEJpdCBvcGVyYXRpb25zIGFyZSB0aGVuIHVzZWQgdG8gYXZvaWQKKyAgICBiaW4tYnktYmluIHNlYXJjaGluZyAtLSBuZWFybHkgYWxsICJzZWFyY2giIGlzIGRvbmUgd2l0aG91dCBldmVyCisgICAgbG9va2luZyBhdCBiaW5zIHRoYXQgd29uJ3QgYmUgc2VsZWN0ZWQuICBUaGUgYml0IG1hcHMKKyAgICBjb25zZXJ2YXRpdmVseSB1c2UgMzIgYml0cyBwZXIgbWFwIHdvcmQsIGV2ZW4gaWYgb24gNjRiaXQgc3lzdGVtLgorICAgIEZvciBhIGdvb2QgZGVzY3JpcHRpb24gb2Ygc29tZSBvZiB0aGUgYml0LWJhc2VkIHRlY2huaXF1ZXMgdXNlZAorICAgIGhlcmUsIHNlZSBIZW5yeSBTLiBXYXJyZW4gSnIncyBib29rICJIYWNrZXIncyBEZWxpZ2h0IiAoYW5kCisgICAgc3VwcGxlbWVudCBhdCBodHRwOi8vaGFja2Vyc2RlbGlnaHQub3JnLykuIE1hbnkgb2YgdGhlc2UgYXJlCisgICAgaW50ZW5kZWQgdG8gcmVkdWNlIHRoZSBicmFuY2hpbmVzcyBvZiBwYXRocyB0aHJvdWdoIG1hbGxvYyBldGMsIGFzCisgICAgd2VsbCBhcyB0byByZWR1Y2UgdGhlIG51bWJlciBvZiBtZW1vcnkgbG9jYXRpb25zIHJlYWQgb3Igd3JpdHRlbi4KKworICBTZWdtZW50cworICAgIEEgbGlzdCBvZiBzZWdtZW50cyBoZWFkZWQgYnkgYW4gZW1iZWRkZWQgbWFsbG9jX3NlZ21lbnQgcmVjb3JkCisgICAgcmVwcmVzZW50aW5nIHRoZSBpbml0aWFsIHNwYWNlLgorCisgIEFkZHJlc3MgY2hlY2sgc3VwcG9ydAorICAgIFRoZSBsZWFzdF9hZGRyIGZpZWxkIGlzIHRoZSBsZWFzdCBhZGRyZXNzIGV2ZXIgb2J0YWluZWQgZnJvbQorICAgIE1PUkVDT1JFIG9yIE1NQVAuIEF0dGVtcHRlZCBmcmVlcyBhbmQgcmVhbGxvY3Mgb2YgYW55IGFkZHJlc3MgbGVzcworICAgIHRoYW4gdGhpcyBhcmUgdHJhcHBlZCAodW5sZXNzIElOU0VDVVJFIGlzIGRlZmluZWQpLgorCisgIE1hZ2ljIHRhZworICAgIEEgY3Jvc3MtY2hlY2sgZmllbGQgdGhhdCBzaG91bGQgYWx3YXlzIGhvbGQgc2FtZSB2YWx1ZSBhcyBtcGFyYW1zLm1hZ2ljLgorCisgIEZsYWdzCisgICAgQml0cyByZWNvcmRpbmcgd2hldGhlciB0byB1c2UgTU1BUCwgbG9ja3MsIG9yIGNvbnRpZ3VvdXMgTU9SRUNPUkUKKworICBTdGF0aXN0aWNzCisgICAgRWFjaCBzcGFjZSBrZWVwcyB0cmFjayBvZiBjdXJyZW50IGFuZCBtYXhpbXVtIHN5c3RlbSBtZW1vcnkKKyAgICBvYnRhaW5lZCB2aWEgTU9SRUNPUkUgb3IgTU1BUC4KKworICBMb2NraW5nCisgICAgSWYgVVNFX0xPQ0tTIGlzIGRlZmluZWQsIHRoZSAibXV0ZXgiIGxvY2sgaXMgYWNxdWlyZWQgYW5kIHJlbGVhc2VkCisgICAgYXJvdW5kIGV2ZXJ5IHB1YmxpYyBjYWxsIHVzaW5nIHRoaXMgbXNwYWNlLgorKi8KKworLyogQmluIHR5cGVzLCB3aWR0aHMgYW5kIHNpemVzICovCisjZGVmaW5lIE5TTUFMTEJJTlMgICAgICAgICgzMlUpCisjZGVmaW5lIE5UUkVFQklOUyAgICAgICAgICgzMlUpCisjZGVmaW5lIFNNQUxMQklOX1NISUZUICAgICgzVSkKKyNkZWZpbmUgU01BTExCSU5fV0lEVEggICAgKFNJWkVfVF9PTkUgPDwgU01BTExCSU5fU0hJRlQpCisjZGVmaW5lIFRSRUVCSU5fU0hJRlQgICAgICg4VSkKKyNkZWZpbmUgTUlOX0xBUkdFX1NJWkUgICAgKFNJWkVfVF9PTkUgPDwgVFJFRUJJTl9TSElGVCkKKyNkZWZpbmUgTUFYX1NNQUxMX1NJWkUgICAgKE1JTl9MQVJHRV9TSVpFIC0gU0laRV9UX09ORSkKKyNkZWZpbmUgTUFYX1NNQUxMX1JFUVVFU1QgKE1BWF9TTUFMTF9TSVpFIC0gQ0hVTktfQUxJR05fTUFTSyAtIENIVU5LX09WRVJIRUFEKQorCitzdHJ1Y3QgbWFsbG9jX3N0YXRlIHsKKyAgYmlubWFwX3QgICBzbWFsbG1hcDsKKyAgYmlubWFwX3QgICB0cmVlbWFwOworICBzaXplX3QgICAgIGR2c2l6ZTsKKyAgc2l6ZV90ICAgICB0b3BzaXplOworICBjaGFyKiAgICAgIGxlYXN0X2FkZHI7CisgIG1jaHVua3B0ciAgZHY7CisgIG1jaHVua3B0ciAgdG9wOworICBzaXplX3QgICAgIHRyaW1fY2hlY2s7CisgIHNpemVfdCAgICAgbWFnaWM7CisgIG1jaHVua3B0ciAgc21hbGxiaW5zWyhOU01BTExCSU5TKzEpKjJdOworICB0YmlucHRyICAgIHRyZWViaW5zW05UUkVFQklOU107CisgIHNpemVfdCAgICAgZm9vdHByaW50OworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgc2l6ZV90ICAgICBtYXhfYWxsb3dlZF9mb290cHJpbnQ7CisjZW5kaWYKKyAgc2l6ZV90ICAgICBtYXhfZm9vdHByaW50OworICBmbGFnX3QgICAgIG1mbGFnczsKKyNpZiBVU0VfTE9DS1MKKyAgTUxPQ0tfVCAgICBtdXRleDsgICAgIC8qIGxvY2F0ZSBsb2NrIGFtb25nIGZpZWxkcyB0aGF0IHJhcmVseSBjaGFuZ2UgKi8KKyNlbmRpZiAvKiBVU0VfTE9DS1MgKi8KKyAgbXNlZ21lbnQgICBzZWc7Cit9OworCit0eXBlZGVmIHN0cnVjdCBtYWxsb2Nfc3RhdGUqICAgIG1zdGF0ZTsKKworLyogLS0tLS0tLS0tLS0tLSBHbG9iYWwgbWFsbG9jX3N0YXRlIGFuZCBtYWxsb2NfcGFyYW1zIC0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgbWFsbG9jX3BhcmFtcyBob2xkcyBnbG9iYWwgcHJvcGVydGllcywgaW5jbHVkaW5nIHRob3NlIHRoYXQgY2FuIGJlCisgIGR5bmFtaWNhbGx5IHNldCB1c2luZyBtYWxsb3B0LiBUaGVyZSBpcyBhIHNpbmdsZSBpbnN0YW5jZSwgbXBhcmFtcywKKyAgaW5pdGlhbGl6ZWQgaW4gaW5pdF9tcGFyYW1zLgorKi8KKworc3RydWN0IG1hbGxvY19wYXJhbXMgeworICBzaXplX3QgbWFnaWM7CisgIHNpemVfdCBwYWdlX3NpemU7CisgIHNpemVfdCBncmFudWxhcml0eTsKKyAgc2l6ZV90IG1tYXBfdGhyZXNob2xkOworICBzaXplX3QgdHJpbV90aHJlc2hvbGQ7CisgIGZsYWdfdCBkZWZhdWx0X21mbGFnczsKK307CisKK3N0YXRpYyBzdHJ1Y3QgbWFsbG9jX3BhcmFtcyBtcGFyYW1zOworCisvKiBUaGUgZ2xvYmFsIG1hbGxvY19zdGF0ZSB1c2VkIGZvciBhbGwgbm9uLSJtc3BhY2UiIGNhbGxzICovCitzdGF0aWMgc3RydWN0IG1hbGxvY19zdGF0ZSBfZ21fCisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorICAgICAgICA9IHsgLm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IE1BWF9TSVpFX1QgfTsKKyNlbHNlCisgICAgICAgIDsKKyNlbmRpZgorCisjZGVmaW5lIGdtICAgICAgICAgICAgICAgICAoJl9nbV8pCisjZGVmaW5lIGlzX2dsb2JhbChNKSAgICAgICAoKE0pID09ICZfZ21fKQorI2RlZmluZSBpc19pbml0aWFsaXplZChNKSAgKChNKS0+dG9wICE9IDApCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN5c3RlbSBhbGxvYyBzZXR1cCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIE9wZXJhdGlvbnMgb24gbWZsYWdzICovCisKKyNkZWZpbmUgdXNlX2xvY2soTSkgICAgICAgICAgICgoTSktPm1mbGFncyAmICAgVVNFX0xPQ0tfQklUKQorI2RlZmluZSBlbmFibGVfbG9jayhNKSAgICAgICAgKChNKS0+bWZsYWdzIHw9ICBVU0VfTE9DS19CSVQpCisjZGVmaW5lIGRpc2FibGVfbG9jayhNKSAgICAgICAoKE0pLT5tZmxhZ3MgJj0gflVTRV9MT0NLX0JJVCkKKworI2RlZmluZSB1c2VfbW1hcChNKSAgICAgICAgICAgKChNKS0+bWZsYWdzICYgICBVU0VfTU1BUF9CSVQpCisjZGVmaW5lIGVuYWJsZV9tbWFwKE0pICAgICAgICAoKE0pLT5tZmxhZ3MgfD0gIFVTRV9NTUFQX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9tbWFwKE0pICAgICAgICgoTSktPm1mbGFncyAmPSB+VVNFX01NQVBfQklUKQorCisjZGVmaW5lIHVzZV9ub25jb250aWd1b3VzKE0pICAoKE0pLT5tZmxhZ3MgJiAgIFVTRV9OT05DT05USUdVT1VTX0JJVCkKKyNkZWZpbmUgZGlzYWJsZV9jb250aWd1b3VzKE0pICgoTSktPm1mbGFncyB8PSAgVVNFX05PTkNPTlRJR1VPVVNfQklUKQorCisjZGVmaW5lIHNldF9sb2NrKE0sTClcCisgKChNKS0+bWZsYWdzID0gKEwpP1wKKyAgKChNKS0+bWZsYWdzIHwgVVNFX0xPQ0tfQklUKSA6XAorICAoKE0pLT5tZmxhZ3MgJiB+VVNFX0xPQ0tfQklUKSkKKworLyogcGFnZS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgcGFnZV9hbGlnbihTKVwKKyAoKChTKSArIChtcGFyYW1zLnBhZ2Vfc2l6ZSkpICYgfihtcGFyYW1zLnBhZ2Vfc2l6ZSAtIFNJWkVfVF9PTkUpKQorCisvKiBncmFudWxhcml0eS1hbGlnbiBhIHNpemUgKi8KKyNkZWZpbmUgZ3JhbnVsYXJpdHlfYWxpZ24oUylcCisgICgoKFMpICsgKG1wYXJhbXMuZ3JhbnVsYXJpdHkpKSAmIH4obXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKQorCisjZGVmaW5lIGlzX3BhZ2VfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5wYWdlX3NpemUgLSBTSVpFX1RfT05FKSkgPT0gMCkKKyNkZWZpbmUgaXNfZ3JhbnVsYXJpdHlfYWxpZ25lZChTKVwKKyAgICgoKHNpemVfdCkoUykgJiAobXBhcmFtcy5ncmFudWxhcml0eSAtIFNJWkVfVF9PTkUpKSA9PSAwKQorCisvKiAgVHJ1ZSBpZiBzZWdtZW50IFMgaG9sZHMgYWRkcmVzcyBBICovCisjZGVmaW5lIHNlZ21lbnRfaG9sZHMoUywgQSlcCisgICgoY2hhciopKEEpID49IFMtPmJhc2UgJiYgKGNoYXIqKShBKSA8IFMtPmJhc2UgKyBTLT5zaXplKQorCisvKiBSZXR1cm4gc2VnbWVudCBob2xkaW5nIGdpdmVuIGFkZHJlc3MgKi8KK3N0YXRpYyBtc2VnbWVudHB0ciBzZWdtZW50X2hvbGRpbmcobXN0YXRlIG0sIGNoYXIqIGFkZHIpIHsKKyAgbXNlZ21lbnRwdHIgc3AgPSAmbS0+c2VnOworICBmb3IgKDs7KSB7CisgICAgaWYgKGFkZHIgPj0gc3AtPmJhc2UgJiYgYWRkciA8IHNwLT5iYXNlICsgc3AtPnNpemUpCisgICAgICByZXR1cm4gc3A7CisgICAgaWYgKChzcCA9IHNwLT5uZXh0KSA9PSAwKQorICAgICAgcmV0dXJuIDA7CisgIH0KK30KKworLyogUmV0dXJuIHRydWUgaWYgc2VnbWVudCBjb250YWlucyBhIHNlZ21lbnQgbGluayAqLworc3RhdGljIGludCBoYXNfc2VnbWVudF9saW5rKG1zdGF0ZSBtLCBtc2VnbWVudHB0ciBzcykgeworICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgIGZvciAoOzspIHsKKyAgICBpZiAoKGNoYXIqKXNwID49IHNzLT5iYXNlICYmIChjaGFyKilzcCA8IHNzLT5iYXNlICsgc3MtPnNpemUpCisgICAgICByZXR1cm4gMTsKKyAgICBpZiAoKHNwID0gc3AtPm5leHQpID09IDApCisgICAgICByZXR1cm4gMDsKKyAgfQorfQorCisjaWZuZGVmIE1PUkVDT1JFX0NBTk5PVF9UUklNCisjZGVmaW5lIHNob3VsZF90cmltKE0scykgICgocykgPiAoTSktPnRyaW1fY2hlY2spCisjZWxzZSAgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKyNkZWZpbmUgc2hvdWxkX3RyaW0oTSxzKSAgKDApCisjZW5kaWYgLyogTU9SRUNPUkVfQ0FOTk9UX1RSSU0gKi8KKworLyoKKyAgVE9QX0ZPT1RfU0laRSBpcyBwYWRkaW5nIGF0IHRoZSBlbmQgb2YgYSBzZWdtZW50LCBpbmNsdWRpbmcgc3BhY2UKKyAgdGhhdCBtYXkgYmUgbmVlZGVkIHRvIHBsYWNlIHNlZ21lbnQgcmVjb3JkcyBhbmQgZmVuY2Vwb3N0cyB3aGVuIG5ldworICBub25jb250aWd1b3VzIHNlZ21lbnRzIGFyZSBhZGRlZC4KKyovCisjZGVmaW5lIFRPUF9GT09UX1NJWkVcCisgIChhbGlnbl9vZmZzZXQoY2h1bmsybWVtKDApKStwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zZWdtZW50KSkrTUlOX0NIVU5LX1NJWkUpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAgSG9va3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgUFJFQUNUSU9OIHNob3VsZCBiZSBkZWZpbmVkIHRvIHJldHVybiAwIG9uIHN1Y2Nlc3MsIGFuZCBub256ZXJvIG9uCisgIGZhaWx1cmUuIElmIHlvdSBhcmUgbm90IHVzaW5nIGxvY2tpbmcsIHlvdSBjYW4gcmVkZWZpbmUgdGhlc2UgdG8gZG8KKyAgYW55dGhpbmcgeW91IGxpa2UuCisqLworCisjaWYgVVNFX0xPQ0tTCisKKy8qIEVuc3VyZSBsb2NrcyBhcmUgaW5pdGlhbGl6ZWQgKi8KKyNkZWZpbmUgR0xPQkFMTFlfSU5JVElBTElaRSgpIChtcGFyYW1zLnBhZ2Vfc2l6ZSA9PSAwICYmIGluaXRfbXBhcmFtcygpKQorCisjZGVmaW5lIFBSRUFDVElPTihNKSAgKChHTE9CQUxMWV9JTklUSUFMSVpFKCkgfHwgdXNlX2xvY2soTSkpPyBBQ1FVSVJFX0xPQ0soJihNKS0+bXV0ZXgpIDogMCkKKyNkZWZpbmUgUE9TVEFDVElPTihNKSB7IGlmICh1c2VfbG9jayhNKSkgUkVMRUFTRV9MT0NLKCYoTSktPm11dGV4KTsgfQorI2Vsc2UgLyogVVNFX0xPQ0tTICovCisKKyNpZm5kZWYgUFJFQUNUSU9OCisjZGVmaW5lIFBSRUFDVElPTihNKSAoMCkKKyNlbmRpZiAgLyogUFJFQUNUSU9OICovCisKKyNpZm5kZWYgUE9TVEFDVElPTgorI2RlZmluZSBQT1NUQUNUSU9OKE0pCisjZW5kaWYgIC8qIFBPU1RBQ1RJT04gKi8KKworI2VuZGlmIC8qIFVTRV9MT0NLUyAqLworCisvKgorICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTiBpcyB0cmlnZ2VyZWQgdXBvbiBkZXRlY3RlZCBiYWQgYWRkcmVzc2VzLgorICBVU0FHRV9FUlJPUl9BQ1RJT04gaXMgdHJpZ2dlcmVkIG9uIGRldGVjdGVkIGJhZCBmcmVlcyBhbmQKKyAgcmVhbGxvY3MuIFRoZSBhcmd1bWVudCBwIGlzIGFuIGFkZHJlc3MgdGhhdCBtaWdodCBoYXZlIHRyaWdnZXJlZCB0aGUKKyAgZmF1bHQuIEl0IGlzIGlnbm9yZWQgYnkgdGhlIHR3byBwcmVkZWZpbmVkIGFjdGlvbnMsIGJ1dCBtaWdodCBiZQorICB1c2VmdWwgaW4gY3VzdG9tIGFjdGlvbnMgdGhhdCB0cnkgdG8gaGVscCBkaWFnbm9zZSBlcnJvcnMuCisqLworCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBBIGNvdW50IG9mIHRoZSBudW1iZXIgb2YgY29ycnVwdGlvbiBlcnJvcnMgY2F1c2luZyByZXNldHMgKi8KK2ludCBtYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKworLyogZGVmYXVsdCBjb3JydXB0aW9uIGFjdGlvbiAqLworc3RhdGljIHZvaWQgcmVzZXRfb25fZXJyb3IobXN0YXRlIG0pOworCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pICByZXNldF9vbl9lcnJvcihtKQorI2RlZmluZSBVU0FHRV9FUlJPUl9BQ1RJT04obSwgcCkKKworI2Vsc2UgLyogUFJPQ0VFRF9PTl9FUlJPUiAqLworCisjaWZuZGVmIENPUlJVUFRJT05fRVJST1JfQUNUSU9OCisjZGVmaW5lIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pIEFCT1JUCisjZW5kaWYgLyogQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04gKi8KKworI2lmbmRlZiBVU0FHRV9FUlJPUl9BQ1RJT04KKyNkZWZpbmUgVVNBR0VfRVJST1JfQUNUSU9OKG0scCkgQUJPUlQKKyNlbmRpZiAvKiBVU0FHRV9FUlJPUl9BQ1RJT04gKi8KKworI2VuZGlmIC8qIFBST0NFRURfT05fRVJST1IgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRGVidWdnaW5nIHNldHVwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworI2lmICEgREVCVUcKKworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfaW51c2VfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikKKyNkZWZpbmUgY2hlY2tfbW1hcHBlZF9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX21hbGxvY19zdGF0ZShNKQorI2RlZmluZSBjaGVja190b3BfY2h1bmsoTSxQKQorCisjZWxzZSAvKiBERUJVRyAqLworI2RlZmluZSBjaGVja19mcmVlX2NodW5rKE0sUCkgICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX2ludXNlX2NodW5rKE0sUCkgICAgICBkb19jaGVja19pbnVzZV9jaHVuayhNLFApCisjZGVmaW5lIGNoZWNrX3RvcF9jaHVuayhNLFApICAgICAgICBkb19jaGVja190b3BfY2h1bmsoTSxQKQorI2RlZmluZSBjaGVja19tYWxsb2NlZF9jaHVuayhNLFAsTikgZG9fY2hlY2tfbWFsbG9jZWRfY2h1bmsoTSxQLE4pCisjZGVmaW5lIGNoZWNrX21tYXBwZWRfY2h1bmsoTSxQKSAgICBkb19jaGVja19tbWFwcGVkX2NodW5rKE0sUCkKKyNkZWZpbmUgY2hlY2tfbWFsbG9jX3N0YXRlKE0pICAgICAgIGRvX2NoZWNrX21hbGxvY19zdGF0ZShNKQorCitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX2FueV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja190b3BfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19pbnVzZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApOworc3RhdGljIHZvaWQgICBkb19jaGVja19mcmVlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCk7CitzdGF0aWMgdm9pZCAgIGRvX2NoZWNrX21hbGxvY2VkX2NodW5rKG1zdGF0ZSBtLCB2b2lkKiBtZW0sIHNpemVfdCBzKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfdHJlZShtc3RhdGUgbSwgdGNodW5rcHRyIHQpOworc3RhdGljIHZvaWQgICBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKTsKK3N0YXRpYyB2b2lkICAgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpOworc3RhdGljIHZvaWQgICBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pOworc3RhdGljIGludCAgICBiaW5fZmluZChtc3RhdGUgbSwgbWNodW5rcHRyIHgpOworc3RhdGljIHNpemVfdCB0cmF2ZXJzZV9hbmRfY2hlY2sobXN0YXRlIG0pOworI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gSW5kZXhpbmcgQmlucyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNkZWZpbmUgaXNfc21hbGwocykgICAgICAgICAoKChzKSA+PiBTTUFMTEJJTl9TSElGVCkgPCBOU01BTExCSU5TKQorI2RlZmluZSBzbWFsbF9pbmRleChzKSAgICAgICgocykgID4+IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBzbWFsbF9pbmRleDJzaXplKGkpICgoaSkgIDw8IFNNQUxMQklOX1NISUZUKQorI2RlZmluZSBNSU5fU01BTExfSU5ERVggICAgIChzbWFsbF9pbmRleChNSU5fQ0hVTktfU0laRSkpCisKKy8qIGFkZHJlc3NpbmcgYnkgaW5kZXguIFNlZSBhYm92ZSBhYm91dCBzbWFsbGJpbiByZXBvc2l0aW9uaW5nICovCisjZGVmaW5lIHNtYWxsYmluX2F0KE0sIGkpICAgKChzYmlucHRyKSgoY2hhciopJigoTSktPnNtYWxsYmluc1soaSk8PDFdKSkpCisjZGVmaW5lIHRyZWViaW5fYXQoTSxpKSAgICAgKCYoKE0pLT50cmVlYmluc1tpXSkpCisKKy8qIGFzc2lnbiB0cmVlIGluZGV4IGZvciBzaXplIFMgdG8gdmFyaWFibGUgSSAqLworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgSztcCisgICAgX19hc21fXygiYnNybCAlMSwlMFxuXHQiIDogIj1yIiAoSykgOiAicm0iICAoWCkpO1wKKyAgICBJID0gIChiaW5kZXhfdCkoKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSkpO1wKKyAgfVwKK30KKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgY29tcHV0ZV90cmVlX2luZGV4KFMsIEkpXAore1wKKyAgc2l6ZV90IFggPSBTID4+IFRSRUVCSU5fU0hJRlQ7XAorICBpZiAoWCA9PSAwKVwKKyAgICBJID0gMDtcCisgIGVsc2UgaWYgKFggPiAweEZGRkYpXAorICAgIEkgPSBOVFJFRUJJTlMtMTtcCisgIGVsc2Uge1wKKyAgICB1bnNpZ25lZCBpbnQgWSA9ICh1bnNpZ25lZCBpbnQpWDtcCisgICAgdW5zaWduZWQgaW50IE4gPSAoKFkgLSAweDEwMCkgPj4gMTYpICYgODtcCisgICAgdW5zaWduZWQgaW50IEsgPSAoKChZIDw8PSBOKSAtIDB4MTAwMCkgPj4gMTYpICYgNDtcCisgICAgTiArPSBLO1wKKyAgICBOICs9IEsgPSAoKChZIDw8PSBLKSAtIDB4NDAwMCkgPj4gMTYpICYgMjtcCisgICAgSyA9IDE0IC0gTiArICgoWSA8PD0gSykgPj4gMTUpO1wKKyAgICBJID0gKEsgPDwgMSkgKyAoKFMgPj4gKEsgKyAoVFJFRUJJTl9TSElGVC0xKSkgJiAxKSk7XAorICB9XAorfQorI2VuZGlmIC8qIEdOVUMgKi8KKworLyogQml0IHJlcHJlc2VudGluZyBtYXhpbXVtIHJlc29sdmVkIHNpemUgaW4gYSB0cmVlYmluIGF0IGkgKi8KKyNkZWZpbmUgYml0X2Zvcl90cmVlX2luZGV4KGkpIFwKKyAgIChpID09IE5UUkVFQklOUy0xKT8gKFNJWkVfVF9CSVRTSVpFLTEpIDogKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikKKworLyogU2hpZnQgcGxhY2luZyBtYXhpbXVtIHJlc29sdmVkIGJpdCBpbiBhIHRyZWViaW4gYXQgaSBhcyBzaWduIGJpdCAqLworI2RlZmluZSBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChpID09IE5UUkVFQklOUy0xKT8gMCA6IFwKKyAgICAoKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpIC0gKCgoaSkgPj4gMSkgKyBUUkVFQklOX1NISUZUIC0gMikpKQorCisvKiBUaGUgc2l6ZSBvZiB0aGUgc21hbGxlc3QgY2h1bmsgaGVsZCBpbiBiaW4gd2l0aCBpbmRleCBpICovCisjZGVmaW5lIG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoaSkgXAorICAgKChTSVpFX1RfT05FIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCkpIHwgIFwKKyAgICgoKHNpemVfdCkoKGkpICYgU0laRV9UX09ORSkpIDw8ICgoKGkpID4+IDEpICsgVFJFRUJJTl9TSElGVCAtIDEpKSkKKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gT3BlcmF0aW9ucyBvbiBiaW4gbWFwcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBiaXQgY29ycmVzcG9uZGluZyB0byBnaXZlbiBpbmRleCAqLworI2RlZmluZSBpZHgyYml0KGkpICAgICAgICAgICAgICAoKGJpbm1hcF90KSgxKSA8PCAoaSkpCisKKy8qIE1hcmsvQ2xlYXIgYml0cyB3aXRoIGdpdmVuIGluZGV4ICovCisjZGVmaW5lIG1hcmtfc21hbGxtYXAoTSxpKSAgICAgICgoTSktPnNtYWxsbWFwIHw9ICBpZHgyYml0KGkpKQorI2RlZmluZSBjbGVhcl9zbWFsbG1hcChNLGkpICAgICAoKE0pLT5zbWFsbG1hcCAmPSB+aWR4MmJpdChpKSkKKyNkZWZpbmUgc21hbGxtYXBfaXNfbWFya2VkKE0saSkgKChNKS0+c21hbGxtYXAgJiAgIGlkeDJiaXQoaSkpCisKKyNkZWZpbmUgbWFya190cmVlbWFwKE0saSkgICAgICAgKChNKS0+dHJlZW1hcCAgfD0gIGlkeDJiaXQoaSkpCisjZGVmaW5lIGNsZWFyX3RyZWVtYXAoTSxpKSAgICAgICgoTSktPnRyZWVtYXAgICY9IH5pZHgyYml0KGkpKQorI2RlZmluZSB0cmVlbWFwX2lzX21hcmtlZChNLGkpICAoKE0pLT50cmVlbWFwICAmICAgaWR4MmJpdChpKSkKKworLyogaW5kZXggY29ycmVzcG9uZGluZyB0byBnaXZlbiBiaXQgKi8KKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoaTM4NikKKyNkZWZpbmUgY29tcHV0ZV9iaXQyaWR4KFgsIEkpXAore1wKKyAgdW5zaWduZWQgaW50IEo7XAorICBfX2FzbV9fKCJic2ZsICUxLCUwXG5cdCIgOiAiPXIiIChKKSA6ICJybSIgKFgpKTtcCisgIEkgPSAoYmluZGV4X3QpSjtcCit9CisKKyNlbHNlIC8qIEdOVUMgKi8KKyNpZiAgVVNFX0JVSUxUSU5fRkZTCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKSBJID0gZmZzKFgpLTEKKworI2Vsc2UgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZGVmaW5lIGNvbXB1dGVfYml0MmlkeChYLCBJKVwKK3tcCisgIHVuc2lnbmVkIGludCBZID0gWCAtIDE7XAorICB1bnNpZ25lZCBpbnQgSyA9IFkgPj4gKDE2LTQpICYgMTY7XAorICB1bnNpZ25lZCBpbnQgTiA9IEs7ICAgICAgICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoOC0zKSAmICA4OyAgWSA+Pj0gSztcCisgIE4gKz0gSyA9IFkgPj4gKDQtMikgJiAgNDsgIFkgPj49IEs7XAorICBOICs9IEsgPSBZID4+ICgyLTEpICYgIDI7ICBZID4+PSBLO1wKKyAgTiArPSBLID0gWSA+PiAoMS0wKSAmICAxOyAgWSA+Pj0gSztcCisgIEkgPSAoYmluZGV4X3QpKE4gKyBZKTtcCit9CisjZW5kaWYgLyogVVNFX0JVSUxUSU5fRkZTICovCisjZW5kaWYgLyogR05VQyAqLworCisvKiBpc29sYXRlIHRoZSBsZWFzdCBzZXQgYml0IG9mIGEgYml0bWFwICovCisjZGVmaW5lIGxlYXN0X2JpdCh4KSAgICAgICAgICgoeCkgJiAtKHgpKQorCisvKiBtYXNrIHdpdGggYWxsIGJpdHMgdG8gbGVmdCBvZiBsZWFzdCBiaXQgb2YgeCBvbiAqLworI2RlZmluZSBsZWZ0X2JpdHMoeCkgICAgICAgICAoKHg8PDEpIHwgLSh4PDwxKSkKKworLyogbWFzayB3aXRoIGFsbCBiaXRzIHRvIGxlZnQgb2Ygb3IgZXF1YWwgdG8gbGVhc3QgYml0IG9mIHggb24gKi8KKyNkZWZpbmUgc2FtZV9vcl9sZWZ0X2JpdHMoeCkgKCh4KSB8IC0oeCkpCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gUnVudGltZSBDaGVjayBTdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyoKKyAgRm9yIHNlY3VyaXR5LCB0aGUgbWFpbiBpbnZhcmlhbnQgaXMgdGhhdCBtYWxsb2MvZnJlZS9ldGMgbmV2ZXIKKyAgd3JpdGVzIHRvIGEgc3RhdGljIGFkZHJlc3Mgb3RoZXIgdGhhbiBtYWxsb2Nfc3RhdGUsIHVubGVzcyBzdGF0aWMKKyAgbWFsbG9jX3N0YXRlIGl0c2VsZiBoYXMgYmVlbiBjb3JydXB0ZWQsIHdoaWNoIGNhbm5vdCBvY2N1ciB2aWEKKyAgbWFsbG9jIChiZWNhdXNlIG9mIHRoZXNlIGNoZWNrcykuIEluIGVzc2VuY2UgdGhpcyBtZWFucyB0aGF0IHdlCisgIGJlbGlldmUgYWxsIHBvaW50ZXJzLCBzaXplcywgbWFwcyBldGMgaGVsZCBpbiBtYWxsb2Nfc3RhdGUsIGJ1dAorICBjaGVjayBhbGwgb2YgdGhvc2UgbGlua2VkIG9yIG9mZnNldHRlZCBmcm9tIG90aGVyIGVtYmVkZGVkIGRhdGEKKyAgc3RydWN0dXJlcy4gIFRoZXNlIGNoZWNrcyBhcmUgaW50ZXJzcGVyc2VkIHdpdGggbWFpbiBjb2RlIGluIGEgd2F5CisgIHRoYXQgdGVuZHMgdG8gbWluaW1pemUgdGhlaXIgcnVuLXRpbWUgY29zdC4KKworICBXaGVuIEZPT1RFUlMgaXMgZGVmaW5lZCwgaW4gYWRkaXRpb24gdG8gcmFuZ2UgY2hlY2tpbmcsIHdlIGFsc28KKyAgdmVyaWZ5IGZvb3RlciBmaWVsZHMgb2YgaW51c2UgY2h1bmtzLCB3aGljaCBjYW4gYmUgdXNlZCBndWFyYW50ZWUKKyAgdGhhdCB0aGUgbXN0YXRlIGNvbnRyb2xsaW5nIG1hbGxvYy9mcmVlIGlzIGludGFjdC4gIFRoaXMgaXMgYQorICBzdHJlYW1saW5lZCB2ZXJzaW9uIG9mIHRoZSBhcHByb2FjaCBkZXNjcmliZWQgYnkgV2lsbGlhbSBSb2JlcnRzb24KKyAgZXQgYWwgaW4gIlJ1bi10aW1lIERldGVjdGlvbiBvZiBIZWFwLWJhc2VkIE92ZXJmbG93cyIgTElTQScwMworICBodHRwOi8vd3d3LnVzZW5peC5vcmcvZXZlbnRzL2xpc2EwMy90ZWNoL3JvYmVydHNvbi5odG1sIFRoZSBmb290ZXIKKyAgb2YgYW4gaW51c2UgY2h1bmsgaG9sZHMgdGhlIHhvciBvZiBpdHMgbXN0YXRlIGFuZCBhIHJhbmRvbSBzZWVkLAorICB0aGF0IGlzIGNoZWNrZWQgdXBvbiBjYWxscyB0byBmcmVlKCkgYW5kIHJlYWxsb2MoKS4gIFRoaXMgaXMKKyAgKHByb2JhYmxpc3RpY2FsbHkpIHVuZ3Vlc3NhYmxlIGZyb20gb3V0c2lkZSB0aGUgcHJvZ3JhbSwgYnV0IGNhbiBiZQorICBjb21wdXRlZCBieSBhbnkgY29kZSBzdWNjZXNzZnVsbHkgbWFsbG9jJ2luZyBhbnkgY2h1bmssIHNvIGRvZXMgbm90CisgIGl0c2VsZiBwcm92aWRlIHByb3RlY3Rpb24gYWdhaW5zdCBjb2RlIHRoYXQgaGFzIGFscmVhZHkgYnJva2VuCisgIHNlY3VyaXR5IHRocm91Z2ggc29tZSBvdGhlciBtZWFucy4gIFVubGlrZSBSb2JlcnRzb24gZXQgYWwsIHdlCisgIGFsd2F5cyBkeW5hbWljYWxseSBjaGVjayBhZGRyZXNzZXMgb2YgYWxsIG9mZnNldCBjaHVua3MgKHByZXZpb3VzLAorICBuZXh0LCBldGMpLiBUaGlzIHR1cm5zIG91dCB0byBiZSBjaGVhcGVyIHRoYW4gcmVseWluZyBvbiBoYXNoZXMuCisqLworCisjaWYgIUlOU0VDVVJFCisvKiBDaGVjayBpZiBhZGRyZXNzIGEgaXMgYXQgbGVhc3QgYXMgaGlnaCBhcyBhbnkgZnJvbSBNT1JFQ09SRSBvciBNTUFQICovCisjZGVmaW5lIG9rX2FkZHJlc3MoTSwgYSkgKChjaGFyKikoYSkgPj0gKE0pLT5sZWFzdF9hZGRyKQorLyogQ2hlY2sgaWYgYWRkcmVzcyBvZiBuZXh0IGNodW5rIG4gaXMgaGlnaGVyIHRoYW4gYmFzZSBjaHVuayBwICovCisjZGVmaW5lIG9rX25leHQocCwgbikgICAgKChjaGFyKikocCkgPCAoY2hhciopKG4pKQorLyogQ2hlY2sgaWYgcCBoYXMgaXRzIGNpbnVzZSBiaXQgb24gKi8KKyNkZWZpbmUgb2tfY2ludXNlKHApICAgICBjaW51c2UocCkKKy8qIENoZWNrIGlmIHAgaGFzIGl0cyBwaW51c2UgYml0IG9uICovCisjZGVmaW5lIG9rX3BpbnVzZShwKSAgICAgcGludXNlKHApCisKKyNlbHNlIC8qICFJTlNFQ1VSRSAqLworI2RlZmluZSBva19hZGRyZXNzKE0sIGEpICgxKQorI2RlZmluZSBva19uZXh0KGIsIG4pICAgICgxKQorI2RlZmluZSBva19jaW51c2UocCkgICAgICgxKQorI2RlZmluZSBva19waW51c2UocCkgICAgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisjaWYgKEZPT1RFUlMgJiYgIUlOU0VDVVJFKQorLyogQ2hlY2sgaWYgKGFsbGVnZWQpIG1zdGF0ZSBtIGhhcyBleHBlY3RlZCBtYWdpYyBmaWVsZCAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgoTSktPm1hZ2ljID09IG1wYXJhbXMubWFnaWMpCisjZWxzZSAgLyogKEZPT1RFUlMgJiYgIUlOU0VDVVJFKSAqLworI2RlZmluZSBva19tYWdpYyhNKSAgICAgICgxKQorI2VuZGlmIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKworCisvKiBJbiBnY2MsIHVzZSBfX2J1aWx0aW5fZXhwZWN0IHRvIG1pbmltaXplIGltcGFjdCBvZiBjaGVja3MgKi8KKyNpZiAhSU5TRUNVUkUKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBfX0dOVUNfXyA+PSAzCisjZGVmaW5lIFJUQ0hFQ0soZSkgIF9fYnVpbHRpbl9leHBlY3QoZSwgMSkKKyNlbHNlIC8qIEdOVUMgKi8KKyNkZWZpbmUgUlRDSEVDSyhlKSAgKGUpCisjZW5kaWYgLyogR05VQyAqLworI2Vsc2UgLyogIUlOU0VDVVJFICovCisjZGVmaW5lIFJUQ0hFQ0soZSkgICgxKQorI2VuZGlmIC8qICFJTlNFQ1VSRSAqLworCisvKiBtYWNyb3MgdG8gc2V0IHVwIGludXNlIGNodW5rcyB3aXRoIG9yIHdpdGhvdXQgZm9vdGVycyAqLworCisjaWYgIUZPT1RFUlMKKworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpCisKKy8qIFNldCBjaW51c2UgYml0IGFuZCBwaW51c2UgYml0IG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlKE0scCxzKVwKKyAgKChwKS0+aGVhZCA9ICgoKHApLT5oZWFkICYgUElOVVNFX0JJVCl8c3xDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgY2ludXNlIGFuZCBwaW51c2Ugb2YgdGhpcyBjaHVuayBhbmQgcGludXNlIG9mIG5leHQgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgobWNodW5rcHRyKSgoKGNoYXIqKShwKSkgKyAocykpKS0+aGVhZCB8PSBQSU5VU0VfQklUKQorCisvKiBTZXQgc2l6ZSwgY2ludXNlIGFuZCBwaW51c2UgYml0IG9mIHRoaXMgY2h1bmsgKi8KKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCkpCisKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKworLyogU2V0IGZvb3Qgb2YgaW51c2UgY2h1bmsgdG8gYmUgeG9yIG9mIG1zdGF0ZSBhbmQgc2VlZCAqLworI2RlZmluZSBtYXJrX2ludXNlX2Zvb3QoTSxwLHMpXAorICAoKChtY2h1bmtwdHIpKChjaGFyKikocCkgKyAocykpKS0+cHJldl9mb290ID0gKChzaXplX3QpKE0pIF4gbXBhcmFtcy5tYWdpYykpCisKKyNkZWZpbmUgZ2V0X21zdGF0ZV9mb3IocClcCisgICgobXN0YXRlKSgoKG1jaHVua3B0cikoKGNoYXIqKShwKSArXAorICAgIChjaHVua3NpemUocCkpKSktPnByZXZfZm9vdCBeIG1wYXJhbXMubWFnaWMpKQorCisjZGVmaW5lIHNldF9pbnVzZShNLHAscylcCisgICgocCktPmhlYWQgPSAoKChwKS0+aGVhZCAmIFBJTlVTRV9CSVQpfHN8Q0lOVVNFX0JJVCksXAorICAoKChtY2h1bmtwdHIpKCgoY2hhciopKHApKSArIChzKSkpLT5oZWFkIHw9IFBJTlVTRV9CSVQpLCBcCisgIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X2ludXNlX2FuZF9waW51c2UoTSxwLHMpXAorICAoKHApLT5oZWFkID0gKHN8UElOVVNFX0JJVHxDSU5VU0VfQklUKSxcCisgICgoKG1jaHVua3B0cikoKChjaGFyKikocCkpICsgKHMpKSktPmhlYWQgfD0gUElOVVNFX0JJVCksXAorIG1hcmtfaW51c2VfZm9vdChNLHAscykpCisKKyNkZWZpbmUgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhNLCBwLCBzKVwKKyAgKChwKS0+aGVhZCA9IChzfFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCksXAorICBtYXJrX2ludXNlX2Zvb3QoTSwgcCwgcykpCisKKyNlbmRpZiAvKiAhRk9PVEVSUyAqLworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHNldHRpbmcgbXBhcmFtcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIG1wYXJhbXMgKi8KK3N0YXRpYyBpbnQgaW5pdF9tcGFyYW1zKHZvaWQpIHsKKyAgaWYgKG1wYXJhbXMucGFnZV9zaXplID09IDApIHsKKyAgICBzaXplX3QgczsKKworICAgIG1wYXJhbXMubW1hcF90aHJlc2hvbGQgPSBERUZBVUxUX01NQVBfVEhSRVNIT0xEOworICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSBERUZBVUxUX1RSSU1fVEhSRVNIT0xEOworI2lmIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICBtcGFyYW1zLmRlZmF1bHRfbWZsYWdzID0gVVNFX0xPQ0tfQklUfFVTRV9NTUFQX0JJVDsKKyNlbHNlICAvKiBNT1JFQ09SRV9DT05USUdVT1VTICovCisgICAgbXBhcmFtcy5kZWZhdWx0X21mbGFncyA9IFVTRV9MT0NLX0JJVHxVU0VfTU1BUF9CSVR8VVNFX05PTkNPTlRJR1VPVVNfQklUOworI2VuZGlmIC8qIE1PUkVDT1JFX0NPTlRJR1VPVVMgKi8KKworI2lmIChGT09URVJTICYmICFJTlNFQ1VSRSkKKyAgICB7CisjaWYgVVNFX0RFVl9SQU5ET00KKyAgICAgIGludCBmZDsKKyAgICAgIHVuc2lnbmVkIGNoYXIgYnVmW3NpemVvZihzaXplX3QpXTsKKyAgICAgIC8qIFRyeSB0byB1c2UgL2Rldi91cmFuZG9tLCBlbHNlIGZhbGwgYmFjayBvbiB1c2luZyB0aW1lICovCisgICAgICBpZiAoKGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpKSA+PSAwICYmCisgICAgICAgICAgcmVhZChmZCwgYnVmLCBzaXplb2YoYnVmKSkgPT0gc2l6ZW9mKGJ1ZikpIHsKKyAgICAgICAgcyA9ICooKHNpemVfdCAqKSBidWYpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICB9CisgICAgICBlbHNlCisjZW5kaWYgLyogVVNFX0RFVl9SQU5ET00gKi8KKyAgICAgICAgcyA9IChzaXplX3QpKHRpbWUoMCkgXiAoc2l6ZV90KTB4NTU1NTU1NTVVKTsKKworICAgICAgcyB8PSAoc2l6ZV90KThVOyAgICAvKiBlbnN1cmUgbm9uemVybyAqLworICAgICAgcyAmPSB+KHNpemVfdCk3VTsgICAvKiBpbXByb3ZlIGNoYW5jZXMgb2YgZmF1bHQgZm9yIGJhZCB2YWx1ZXMgKi8KKworICAgIH0KKyNlbHNlIC8qIChGT09URVJTICYmICFJTlNFQ1VSRSkgKi8KKyAgICBzID0gKHNpemVfdCkweDU4NTg1ODU4VTsKKyNlbmRpZiAvKiAoRk9PVEVSUyAmJiAhSU5TRUNVUkUpICovCisgICAgQUNRVUlSRV9NQUdJQ19JTklUX0xPQ0soKTsKKyAgICBpZiAobXBhcmFtcy5tYWdpYyA9PSAwKSB7CisgICAgICBtcGFyYW1zLm1hZ2ljID0gczsKKyAgICAgIC8qIFNldCB1cCBsb2NrIGZvciBtYWluIG1hbGxvYyBhcmVhICovCisgICAgICBJTklUSUFMX0xPQ0soJmdtLT5tdXRleCk7CisgICAgICBnbS0+bWZsYWdzID0gbXBhcmFtcy5kZWZhdWx0X21mbGFnczsKKyAgICB9CisgICAgUkVMRUFTRV9NQUdJQ19JTklUX0xPQ0soKTsKKworI2lmbmRlZiBXSU4zMgorICAgIG1wYXJhbXMucGFnZV9zaXplID0gbWFsbG9jX2dldHBhZ2VzaXplOworICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSAoKERFRkFVTFRfR1JBTlVMQVJJVFkgIT0gMCk/CisgICAgICAgICAgICAgICAgICAgICAgICAgICBERUZBVUxUX0dSQU5VTEFSSVRZIDogbXBhcmFtcy5wYWdlX3NpemUpOworI2Vsc2UgLyogV0lOMzIgKi8KKyAgICB7CisgICAgICBTWVNURU1fSU5GTyBzeXN0ZW1faW5mbzsKKyAgICAgIEdldFN5c3RlbUluZm8oJnN5c3RlbV9pbmZvKTsKKyAgICAgIG1wYXJhbXMucGFnZV9zaXplID0gc3lzdGVtX2luZm8uZHdQYWdlU2l6ZTsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSBzeXN0ZW1faW5mby5kd0FsbG9jYXRpb25HcmFudWxhcml0eTsKKyAgICB9CisjZW5kaWYgLyogV0lOMzIgKi8KKworICAgIC8qIFNhbml0eS1jaGVjayBjb25maWd1cmF0aW9uOgorICAgICAgIHNpemVfdCBtdXN0IGJlIHVuc2lnbmVkIGFuZCBhcyB3aWRlIGFzIHBvaW50ZXIgdHlwZS4KKyAgICAgICBpbnRzIG11c3QgYmUgYXQgbGVhc3QgNCBieXRlcy4KKyAgICAgICBhbGlnbm1lbnQgbXVzdCBiZSBhdCBsZWFzdCA4LgorICAgICAgIEFsaWdubWVudCwgbWluIGNodW5rIHNpemUsIGFuZCBwYWdlIHNpemUgbXVzdCBhbGwgYmUgcG93ZXJzIG9mIDIuCisgICAgKi8KKyAgICBpZiAoKHNpemVvZihzaXplX3QpICE9IHNpemVvZihjaGFyKikpIHx8CisgICAgICAgIChNQVhfU0laRV9UIDwgTUlOX0NIVU5LX1NJWkUpICB8fAorICAgICAgICAoc2l6ZW9mKGludCkgPCA0KSAgfHwKKyAgICAgICAgKE1BTExPQ19BTElHTk1FTlQgPCAoc2l6ZV90KThVKSB8fAorICAgICAgICAoKE1BTExPQ19BTElHTk1FTlQgICAgJiAoTUFMTE9DX0FMSUdOTUVOVC1TSVpFX1RfT05FKSkgICAgIT0gMCkgfHwKKyAgICAgICAgKChNQ0hVTktfU0laRSAgICAgICAgICYgKE1DSFVOS19TSVpFLVNJWkVfVF9PTkUpKSAgICAgICAgICE9IDApIHx8CisgICAgICAgICgobXBhcmFtcy5ncmFudWxhcml0eSAmIChtcGFyYW1zLmdyYW51bGFyaXR5LVNJWkVfVF9PTkUpKSAhPSAwKSB8fAorICAgICAgICAoKG1wYXJhbXMucGFnZV9zaXplICAgJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpICAgIT0gMCkpCisgICAgICBBQk9SVDsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogc3VwcG9ydCBmb3IgbWFsbG9wdCAqLworc3RhdGljIGludCBjaGFuZ2VfbXBhcmFtKGludCBwYXJhbV9udW1iZXIsIGludCB2YWx1ZSkgeworICBzaXplX3QgdmFsID0gKHNpemVfdCl2YWx1ZTsKKyAgaW5pdF9tcGFyYW1zKCk7CisgIHN3aXRjaChwYXJhbV9udW1iZXIpIHsKKyAgY2FzZSBNX1RSSU1fVEhSRVNIT0xEOgorICAgIG1wYXJhbXMudHJpbV90aHJlc2hvbGQgPSB2YWw7CisgICAgcmV0dXJuIDE7CisgIGNhc2UgTV9HUkFOVUxBUklUWToKKyAgICBpZiAodmFsID49IG1wYXJhbXMucGFnZV9zaXplICYmICgodmFsICYgKHZhbC0xKSkgPT0gMCkpIHsKKyAgICAgIG1wYXJhbXMuZ3JhbnVsYXJpdHkgPSB2YWw7CisgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgZWxzZQorICAgICAgcmV0dXJuIDA7CisgIGNhc2UgTV9NTUFQX1RIUkVTSE9MRDoKKyAgICBtcGFyYW1zLm1tYXBfdGhyZXNob2xkID0gdmFsOworICAgIHJldHVybiAxOworICBkZWZhdWx0OgorICAgIHJldHVybiAwOworICB9Cit9CisKKyNpZiBERUJVRworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBEZWJ1Z2dpbmcgU3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBhbnkgY2h1bmssIHdoZXRoZXIgZnJlZSwgaW51c2UsIG1tYXBwZWQgZXRjICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfYW55X2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBhc3NlcnQoKGlzX2FsaWduZWQoY2h1bmsybWVtKHApKSkgfHwgKHAtPmhlYWQgPT0gRkVOQ0VQT1NUX0hFQUQpKTsKKyAgYXNzZXJ0KG9rX2FkZHJlc3MobSwgcCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIHRvcCBjaHVuayAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfdG9wX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopcCk7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIGFzc2VydChzcCAhPSAwKTsKKyAgYXNzZXJ0KChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpIHx8IChwLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKSk7CisgIGFzc2VydChva19hZGRyZXNzKG0sIHApKTsKKyAgYXNzZXJ0KHN6ID09IG0tPnRvcHNpemUpOworICBhc3NlcnQoc3ogPiAwKTsKKyAgYXNzZXJ0KHN6ID09ICgoc3AtPmJhc2UgKyBzcC0+c2l6ZSkgLSAoY2hhciopcCkgLSBUT1BfRk9PVF9TSVpFKTsKKyAgYXNzZXJ0KHBpbnVzZShwKSk7CisgIGFzc2VydCghbmV4dF9waW51c2UocCkpOworfQorCisvKiBDaGVjayBwcm9wZXJ0aWVzIG9mIChpbnVzZSkgbW1hcHBlZCBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX21tYXBwZWRfY2h1bmsobXN0YXRlIG0sIG1jaHVua3B0ciBwKSB7CisgIHNpemVfdCAgc3ogPSBjaHVua3NpemUocCk7CisgIHNpemVfdCBsZW4gPSAoc3ogKyAocC0+cHJldl9mb290ICYgfklTX01NQVBQRURfQklUKSArIE1NQVBfRk9PVF9QQUQpOworICBhc3NlcnQoaXNfbW1hcHBlZChwKSk7CisgIGFzc2VydCh1c2VfbW1hcChtKSk7CisgIGFzc2VydCgoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKSB8fCAocC0+aGVhZCA9PSBGRU5DRVBPU1RfSEVBRCkpOworICBhc3NlcnQob2tfYWRkcmVzcyhtLCBwKSk7CisgIGFzc2VydCghaXNfc21hbGwoc3opKTsKKyAgYXNzZXJ0KChsZW4gJiAobXBhcmFtcy5wYWdlX3NpemUtU0laRV9UX09ORSkpID09IDApOworICBhc3NlcnQoY2h1bmtfcGx1c19vZmZzZXQocCwgc3opLT5oZWFkID09IEZFTkNFUE9TVF9IRUFEKTsKKyAgYXNzZXJ0KGNodW5rX3BsdXNfb2Zmc2V0KHAsIHN6K1NJWkVfVF9TSVpFKS0+aGVhZCA9PSAwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBpbnVzZSBjaHVua3MgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX2ludXNlX2NodW5rKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCkgeworICBkb19jaGVja19hbnlfY2h1bmsobSwgcCk7CisgIGFzc2VydChjaW51c2UocCkpOworICBhc3NlcnQobmV4dF9waW51c2UocCkpOworICAvKiBJZiBub3QgcGludXNlIGFuZCBub3QgbW1hcHBlZCwgcHJldmlvdXMgY2h1bmsgaGFzIE9LIG9mZnNldCAqLworICBhc3NlcnQoaXNfbW1hcHBlZChwKSB8fCBwaW51c2UocCkgfHwgbmV4dF9jaHVuayhwcmV2X2NodW5rKHApKSA9PSBwKTsKKyAgaWYgKGlzX21tYXBwZWQocCkpCisgICAgZG9fY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBmcmVlIGNodW5rcyAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfZnJlZV9jaHVuayhtc3RhdGUgbSwgbWNodW5rcHRyIHApIHsKKyAgc2l6ZV90IHN6ID0gcC0+aGVhZCAmIH4oUElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChwLCBzeik7CisgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBwKTsKKyAgYXNzZXJ0KCFjaW51c2UocCkpOworICBhc3NlcnQoIW5leHRfcGludXNlKHApKTsKKyAgYXNzZXJ0ICghaXNfbW1hcHBlZChwKSk7CisgIGlmIChwICE9IG0tPmR2ICYmIHAgIT0gbS0+dG9wKSB7CisgICAgaWYgKHN6ID49IE1JTl9DSFVOS19TSVpFKSB7CisgICAgICBhc3NlcnQoKHN6ICYgQ0hVTktfQUxJR05fTUFTSykgPT0gMCk7CisgICAgICBhc3NlcnQoaXNfYWxpZ25lZChjaHVuazJtZW0ocCkpKTsKKyAgICAgIGFzc2VydChuZXh0LT5wcmV2X2Zvb3QgPT0gc3opOworICAgICAgYXNzZXJ0KHBpbnVzZShwKSk7CisgICAgICBhc3NlcnQgKG5leHQgPT0gbS0+dG9wIHx8IGNpbnVzZShuZXh0KSk7CisgICAgICBhc3NlcnQocC0+ZmQtPmJrID09IHApOworICAgICAgYXNzZXJ0KHAtPmJrLT5mZCA9PSBwKTsKKyAgICB9CisgICAgZWxzZSAgLyogbWFya2VycyBhcmUgYWx3YXlzIG9mIHNpemUgU0laRV9UX1NJWkUgKi8KKyAgICAgIGFzc2VydChzeiA9PSBTSVpFX1RfU0laRSk7CisgIH0KK30KKworLyogQ2hlY2sgcHJvcGVydGllcyBvZiBtYWxsb2NlZCBjaHVua3MgYXQgdGhlIHBvaW50IHRoZXkgYXJlIG1hbGxvY2VkICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2NlZF9jaHVuayhtc3RhdGUgbSwgdm9pZCogbWVtLCBzaXplX3QgcykgeworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworICAgIHNpemVfdCBzeiA9IHAtPmhlYWQgJiB+KFBJTlVTRV9CSVR8Q0lOVVNFX0JJVCk7CisgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcCk7CisgICAgYXNzZXJ0KChzeiAmIENIVU5LX0FMSUdOX01BU0spID09IDApOworICAgIGFzc2VydChzeiA+PSBNSU5fQ0hVTktfU0laRSk7CisgICAgYXNzZXJ0KHN6ID49IHMpOworICAgIC8qIHVubGVzcyBtbWFwcGVkLCBzaXplIGlzIGxlc3MgdGhhbiBNSU5fQ0hVTktfU0laRSBtb3JlIHRoYW4gcmVxdWVzdCAqLworICAgIGFzc2VydChpc19tbWFwcGVkKHApIHx8IHN6IDwgKHMgKyBNSU5fQ0hVTktfU0laRSkpOworICB9Cit9CisKKy8qIENoZWNrIGEgdHJlZSBhbmQgaXRzIHN1YnRyZWVzLiAgKi8KK3N0YXRpYyB2b2lkIGRvX2NoZWNrX3RyZWUobXN0YXRlIG0sIHRjaHVua3B0ciB0KSB7CisgIHRjaHVua3B0ciBoZWFkID0gMDsKKyAgdGNodW5rcHRyIHUgPSB0OworICBiaW5kZXhfdCB0aW5kZXggPSB0LT5pbmRleDsKKyAgc2l6ZV90IHRzaXplID0gY2h1bmtzaXplKHQpOworICBiaW5kZXhfdCBpZHg7CisgIGNvbXB1dGVfdHJlZV9pbmRleCh0c2l6ZSwgaWR4KTsKKyAgYXNzZXJ0KHRpbmRleCA9PSBpZHgpOworICBhc3NlcnQodHNpemUgPj0gTUlOX0xBUkdFX1NJWkUpOworICBhc3NlcnQodHNpemUgPj0gbWluc2l6ZV9mb3JfdHJlZV9pbmRleChpZHgpKTsKKyAgYXNzZXJ0KChpZHggPT0gTlRSRUVCSU5TLTEpIHx8ICh0c2l6ZSA8IG1pbnNpemVfZm9yX3RyZWVfaW5kZXgoKGlkeCsxKSkpKTsKKworICBkbyB7IC8qIHRyYXZlcnNlIHRocm91Z2ggY2hhaW4gb2Ygc2FtZS1zaXplZCBub2RlcyAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCAoKG1jaHVua3B0cil1KSk7CisgICAgYXNzZXJ0KHUtPmluZGV4ID09IHRpbmRleCk7CisgICAgYXNzZXJ0KGNodW5rc2l6ZSh1KSA9PSB0c2l6ZSk7CisgICAgYXNzZXJ0KCFjaW51c2UodSkpOworICAgIGFzc2VydCghbmV4dF9waW51c2UodSkpOworICAgIGFzc2VydCh1LT5mZC0+YmsgPT0gdSk7CisgICAgYXNzZXJ0KHUtPmJrLT5mZCA9PSB1KTsKKyAgICBpZiAodS0+cGFyZW50ID09IDApIHsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFswXSA9PSAwKTsKKyAgICAgIGFzc2VydCh1LT5jaGlsZFsxXSA9PSAwKTsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICBhc3NlcnQoaGVhZCA9PSAwKTsgLyogb25seSBvbmUgbm9kZSBvbiBjaGFpbiBoYXMgcGFyZW50ICovCisgICAgICBoZWFkID0gdTsKKyAgICAgIGFzc2VydCh1LT5wYXJlbnQgIT0gdSk7CisgICAgICBhc3NlcnQgKHUtPnBhcmVudC0+Y2hpbGRbMF0gPT0gdSB8fAorICAgICAgICAgICAgICB1LT5wYXJlbnQtPmNoaWxkWzFdID09IHUgfHwKKyAgICAgICAgICAgICAgKigodGJpbnB0ciopKHUtPnBhcmVudCkpID09IHUpOworICAgICAgaWYgKHUtPmNoaWxkWzBdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzBdLT5wYXJlbnQgPT0gdSk7CisgICAgICAgIGFzc2VydCh1LT5jaGlsZFswXSAhPSB1KTsKKyAgICAgICAgZG9fY2hlY2tfdHJlZShtLCB1LT5jaGlsZFswXSk7CisgICAgICB9CisgICAgICBpZiAodS0+Y2hpbGRbMV0gIT0gMCkgeworICAgICAgICBhc3NlcnQodS0+Y2hpbGRbMV0tPnBhcmVudCA9PSB1KTsKKyAgICAgICAgYXNzZXJ0KHUtPmNoaWxkWzFdICE9IHUpOworICAgICAgICBkb19jaGVja190cmVlKG0sIHUtPmNoaWxkWzFdKTsKKyAgICAgIH0KKyAgICAgIGlmICh1LT5jaGlsZFswXSAhPSAwICYmIHUtPmNoaWxkWzFdICE9IDApIHsKKyAgICAgICAgYXNzZXJ0KGNodW5rc2l6ZSh1LT5jaGlsZFswXSkgPCBjaHVua3NpemUodS0+Y2hpbGRbMV0pKTsKKyAgICAgIH0KKyAgICB9CisgICAgdSA9IHUtPmZkOworICB9IHdoaWxlICh1ICE9IHQpOworICBhc3NlcnQoaGVhZCAhPSAwKTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgdHJlZWJpbi4gICovCitzdGF0aWMgdm9pZCBkb19jaGVja190cmVlYmluKG1zdGF0ZSBtLCBiaW5kZXhfdCBpKSB7CisgIHRiaW5wdHIqIHRiID0gdHJlZWJpbl9hdChtLCBpKTsKKyAgdGNodW5rcHRyIHQgPSAqdGI7CisgIGludCBlbXB0eSA9IChtLT50cmVlbWFwICYgKDFVIDw8IGkpKSA9PSAwOworICBpZiAodCA9PSAwKQorICAgIGFzc2VydChlbXB0eSk7CisgIGlmICghZW1wdHkpCisgICAgZG9fY2hlY2tfdHJlZShtLCB0KTsKK30KKworLyogIENoZWNrIGFsbCB0aGUgY2h1bmtzIGluIGEgc21hbGxiaW4uICAqLworc3RhdGljIHZvaWQgZG9fY2hlY2tfc21hbGxiaW4obXN0YXRlIG0sIGJpbmRleF90IGkpIHsKKyAgc2JpbnB0ciBiID0gc21hbGxiaW5fYXQobSwgaSk7CisgIG1jaHVua3B0ciBwID0gYi0+Yms7CisgIHVuc2lnbmVkIGludCBlbXB0eSA9IChtLT5zbWFsbG1hcCAmICgxVSA8PCBpKSkgPT0gMDsKKyAgaWYgKHAgPT0gYikKKyAgICBhc3NlcnQoZW1wdHkpOworICBpZiAoIWVtcHR5KSB7CisgICAgZm9yICg7IHAgIT0gYjsgcCA9IHAtPmJrKSB7CisgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIG1jaHVua3B0ciBxOworICAgICAgLyogZWFjaCBjaHVuayBjbGFpbXMgdG8gYmUgZnJlZSAqLworICAgICAgZG9fY2hlY2tfZnJlZV9jaHVuayhtLCBwKTsKKyAgICAgIC8qIGNodW5rIGJlbG9uZ3MgaW4gYmluICovCisgICAgICBhc3NlcnQoc21hbGxfaW5kZXgoc2l6ZSkgPT0gaSk7CisgICAgICBhc3NlcnQocC0+YmsgPT0gYiB8fCBjaHVua3NpemUocC0+YmspID09IGNodW5rc2l6ZShwKSk7CisgICAgICAvKiBjaHVuayBpcyBmb2xsb3dlZCBieSBhbiBpbnVzZSBjaHVuayAqLworICAgICAgcSA9IG5leHRfY2h1bmsocCk7CisgICAgICBpZiAocS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkKKyAgICAgICAgZG9fY2hlY2tfaW51c2VfY2h1bmsobSwgcSk7CisgICAgfQorICB9Cit9CisKKy8qIEZpbmQgeCBpbiBhIGJpbi4gVXNlZCBpbiBvdGhlciBjaGVjayBmdW5jdGlvbnMuICovCitzdGF0aWMgaW50IGJpbl9maW5kKG1zdGF0ZSBtLCBtY2h1bmtwdHIgeCkgeworICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZSh4KTsKKyAgaWYgKGlzX3NtYWxsKHNpemUpKSB7CisgICAgYmluZGV4X3Qgc2lkeCA9IHNtYWxsX2luZGV4KHNpemUpOworICAgIHNiaW5wdHIgYiA9IHNtYWxsYmluX2F0KG0sIHNpZHgpOworICAgIGlmIChzbWFsbG1hcF9pc19tYXJrZWQobSwgc2lkeCkpIHsKKyAgICAgIG1jaHVua3B0ciBwID0gYjsKKyAgICAgIGRvIHsKKyAgICAgICAgaWYgKHAgPT0geCkKKyAgICAgICAgICByZXR1cm4gMTsKKyAgICAgIH0gd2hpbGUgKChwID0gcC0+ZmQpICE9IGIpOworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBiaW5kZXhfdCB0aWR4OworICAgIGNvbXB1dGVfdHJlZV9pbmRleChzaXplLCB0aWR4KTsKKyAgICBpZiAodHJlZW1hcF9pc19tYXJrZWQobSwgdGlkeCkpIHsKKyAgICAgIHRjaHVua3B0ciB0ID0gKnRyZWViaW5fYXQobSwgdGlkeCk7CisgICAgICBzaXplX3Qgc2l6ZWJpdHMgPSBzaXplIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleCh0aWR4KTsKKyAgICAgIHdoaWxlICh0ICE9IDAgJiYgY2h1bmtzaXplKHQpICE9IHNpemUpIHsKKyAgICAgICAgdCA9IHQtPmNoaWxkWyhzaXplYml0cyA+PiAoU0laRV9UX0JJVFNJWkUtU0laRV9UX09ORSkpICYgMV07CisgICAgICAgIHNpemViaXRzIDw8PSAxOworICAgICAgfQorICAgICAgaWYgKHQgIT0gMCkgeworICAgICAgICB0Y2h1bmtwdHIgdSA9IHQ7CisgICAgICAgIGRvIHsKKyAgICAgICAgICBpZiAodSA9PSAodGNodW5rcHRyKXgpCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfSB3aGlsZSAoKHUgPSB1LT5mZCkgIT0gdCk7CisgICAgICB9CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBUcmF2ZXJzZSBlYWNoIGNodW5rIGFuZCBjaGVjayBpdDsgcmV0dXJuIHRvdGFsICovCitzdGF0aWMgc2l6ZV90IHRyYXZlcnNlX2FuZF9jaGVjayhtc3RhdGUgbSkgeworICBzaXplX3Qgc3VtID0gMDsKKyAgaWYgKGlzX2luaXRpYWxpemVkKG0pKSB7CisgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgc3VtICs9IG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFOworICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgIG1jaHVua3B0ciBxID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICBtY2h1bmtwdHIgbGFzdHEgPSAwOworICAgICAgYXNzZXJ0KHBpbnVzZShxKSk7CisgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgc3VtICs9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgaWYgKGNpbnVzZShxKSkgeworICAgICAgICAgIGFzc2VydCghYmluX2ZpbmQobSwgcSkpOworICAgICAgICAgIGRvX2NoZWNrX2ludXNlX2NodW5rKG0sIHEpOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIGFzc2VydChxID09IG0tPmR2IHx8IGJpbl9maW5kKG0sIHEpKTsKKyAgICAgICAgICBhc3NlcnQobGFzdHEgPT0gMCB8fCBjaW51c2UobGFzdHEpKTsgLyogTm90IDIgY29uc2VjdXRpdmUgZnJlZSAqLworICAgICAgICAgIGRvX2NoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgICAgICAgIH0KKyAgICAgICAgbGFzdHEgPSBxOworICAgICAgICBxID0gbmV4dF9jaHVuayhxKTsKKyAgICAgIH0KKyAgICAgIHMgPSBzLT5uZXh0OworICAgIH0KKyAgfQorICByZXR1cm4gc3VtOworfQorCisvKiBDaGVjayBhbGwgcHJvcGVydGllcyBvZiBtYWxsb2Nfc3RhdGUuICovCitzdGF0aWMgdm9pZCBkb19jaGVja19tYWxsb2Nfc3RhdGUobXN0YXRlIG0pIHsKKyAgYmluZGV4X3QgaTsKKyAgc2l6ZV90IHRvdGFsOworICAvKiBjaGVjayBiaW5zICovCisgIGZvciAoaSA9IDA7IGkgPCBOU01BTExCSU5TOyArK2kpCisgICAgZG9fY2hlY2tfc21hbGxiaW4obSwgaSk7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICBkb19jaGVja190cmVlYmluKG0sIGkpOworCisgIGlmIChtLT5kdnNpemUgIT0gMCkgeyAvKiBjaGVjayBkdiBjaHVuayAqLworICAgIGRvX2NoZWNrX2FueV9jaHVuayhtLCBtLT5kdik7CisgICAgYXNzZXJ0KG0tPmR2c2l6ZSA9PSBjaHVua3NpemUobS0+ZHYpKTsKKyAgICBhc3NlcnQobS0+ZHZzaXplID49IE1JTl9DSFVOS19TSVpFKTsKKyAgICBhc3NlcnQoYmluX2ZpbmQobSwgbS0+ZHYpID09IDApOworICB9CisKKyAgaWYgKG0tPnRvcCAhPSAwKSB7ICAgLyogY2hlY2sgdG9wIGNodW5rICovCisgICAgZG9fY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgYXNzZXJ0KG0tPnRvcHNpemUgPT0gY2h1bmtzaXplKG0tPnRvcCkpOworICAgIGFzc2VydChtLT50b3BzaXplID4gMCk7CisgICAgYXNzZXJ0KGJpbl9maW5kKG0sIG0tPnRvcCkgPT0gMCk7CisgIH0KKworICB0b3RhbCA9IHRyYXZlcnNlX2FuZF9jaGVjayhtKTsKKyAgYXNzZXJ0KHRvdGFsIDw9IG0tPmZvb3RwcmludCk7CisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2Zvb3RwcmludCk7CisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorICAvL1RPRE86IGNoYW5nZSB0aGVzZSBhc3NlcnRpb25zIGlmIHdlIGFsbG93IGZvciBzaHJpbmtpbmcuCisgIGFzc2VydChtLT5mb290cHJpbnQgPD0gbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50KTsKKyAgYXNzZXJ0KG0tPm1heF9mb290cHJpbnQgPD0gbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50KTsKKyNlbmRpZgorfQorI2VuZGlmIC8qIERFQlVHICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHN0YXRpc3RpY3MgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiAhTk9fTUFMTElORk8KK3N0YXRpYyBzdHJ1Y3QgbWFsbGluZm8gaW50ZXJuYWxfbWFsbGluZm8obXN0YXRlIG0pIHsKKyAgc3RydWN0IG1hbGxpbmZvIG5tID0geyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwIH07CisgIGlmICghUFJFQUNUSU9OKG0pKSB7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgc2l6ZV90IG5mcmVlID0gU0laRV9UX09ORTsgLyogdG9wIGFsd2F5cyBmcmVlICovCisgICAgICBzaXplX3QgbWZyZWUgPSBtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRTsKKyAgICAgIHNpemVfdCBzdW0gPSBtZnJlZTsKKyAgICAgIG1zZWdtZW50cHRyIHMgPSAmbS0+c2VnOworICAgICAgd2hpbGUgKHMgIT0gMCkgeworICAgICAgICBtY2h1bmtwdHIgcSA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgICAgICB3aGlsZSAoc2VnbWVudF9ob2xkcyhzLCBxKSAmJgorICAgICAgICAgICAgICAgcSAhPSBtLT50b3AgJiYgcS0+aGVhZCAhPSBGRU5DRVBPU1RfSEVBRCkgeworICAgICAgICAgIHNpemVfdCBzeiA9IGNodW5rc2l6ZShxKTsKKyAgICAgICAgICBzdW0gKz0gc3o7CisgICAgICAgICAgaWYgKCFjaW51c2UocSkpIHsKKyAgICAgICAgICAgIG1mcmVlICs9IHN6OworICAgICAgICAgICAgKytuZnJlZTsKKyAgICAgICAgICB9CisgICAgICAgICAgcSA9IG5leHRfY2h1bmsocSk7CisgICAgICAgIH0KKyAgICAgICAgcyA9IHMtPm5leHQ7CisgICAgICB9CisKKyAgICAgIG5tLmFyZW5hICAgID0gc3VtOworICAgICAgbm0ub3JkYmxrcyAgPSBuZnJlZTsKKyAgICAgIG5tLmhibGtoZCAgID0gbS0+Zm9vdHByaW50IC0gc3VtOworICAgICAgbm0udXNtYmxrcyAgPSBtLT5tYXhfZm9vdHByaW50OworICAgICAgbm0udW9yZGJsa3MgPSBtLT5mb290cHJpbnQgLSBtZnJlZTsKKyAgICAgIG5tLmZvcmRibGtzID0gbWZyZWU7CisgICAgICBubS5rZWVwY29zdCA9IG0tPnRvcHNpemU7CisgICAgfQorCisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorICByZXR1cm4gbm07Cit9CisjZW5kaWYgLyogIU5PX01BTExJTkZPICovCisKK3N0YXRpYyB2b2lkIGludGVybmFsX21hbGxvY19zdGF0cyhtc3RhdGUgbSkgeworICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIHNpemVfdCBtYXhmcCA9IDA7CisgICAgc2l6ZV90IGZwID0gMDsKKyAgICBzaXplX3QgdXNlZCA9IDA7CisgICAgY2hlY2tfbWFsbG9jX3N0YXRlKG0pOworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICBtYXhmcCA9IG0tPm1heF9mb290cHJpbnQ7CisgICAgICBmcCA9IG0tPmZvb3RwcmludDsKKyAgICAgIHVzZWQgPSBmcCAtIChtLT50b3BzaXplICsgVE9QX0ZPT1RfU0laRSk7CisKKyAgICAgIHdoaWxlIChzICE9IDApIHsKKyAgICAgICAgbWNodW5rcHRyIHEgPSBhbGlnbl9hc19jaHVuayhzLT5iYXNlKTsKKyAgICAgICAgd2hpbGUgKHNlZ21lbnRfaG9sZHMocywgcSkgJiYKKyAgICAgICAgICAgICAgIHEgIT0gbS0+dG9wICYmIHEtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgICAgICBpZiAoIWNpbnVzZShxKSkKKyAgICAgICAgICAgIHVzZWQgLT0gY2h1bmtzaXplKHEpOworICAgICAgICAgIHEgPSBuZXh0X2NodW5rKHEpOworICAgICAgICB9CisgICAgICAgIHMgPSBzLT5uZXh0OworICAgICAgfQorICAgIH0KKworICAgIGZwcmludGYoc3RkZXJyLCAibWF4IHN5c3RlbSBieXRlcyA9ICUxMGx1XG4iLCAodW5zaWduZWQgbG9uZykobWF4ZnApKTsKKyAgICBmcHJpbnRmKHN0ZGVyciwgInN5c3RlbSBieXRlcyAgICAgPSAlMTBsdVxuIiwgKHVuc2lnbmVkIGxvbmcpKGZwKSk7CisgICAgZnByaW50ZihzdGRlcnIsICJpbiB1c2UgYnl0ZXMgICAgID0gJTEwbHVcbiIsICh1bnNpZ25lZCBsb25nKSh1c2VkKSk7CisKKyAgICBQT1NUQUNUSU9OKG0pOworICB9Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gc21hbGxiaW5zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIFZhcmlvdXMgZm9ybXMgb2YgbGlua2luZyBhbmQgdW5saW5raW5nIGFyZSBkZWZpbmVkIGFzIG1hY3Jvcy4gIEV2ZW4KKyAgdGhlIG9uZXMgZm9yIHRyZWVzLCB3aGljaCBhcmUgdmVyeSBsb25nIGJ1dCBoYXZlIHZlcnkgc2hvcnQgdHlwaWNhbAorICBwYXRocy4gIFRoaXMgaXMgdWdseSBidXQgcmVkdWNlcyByZWxpYW5jZSBvbiBpbmxpbmluZyBzdXBwb3J0IG9mCisgIGNvbXBpbGVycy4KKyovCisKKy8qIExpbmsgYSBmcmVlIGNodW5rIGludG8gYSBzbWFsbGJpbiAgKi8KKyNkZWZpbmUgaW5zZXJ0X3NtYWxsX2NodW5rKE0sIFAsIFMpIHtcCisgIGJpbmRleF90IEkgID0gc21hbGxfaW5kZXgoUyk7XAorICBtY2h1bmtwdHIgQiA9IHNtYWxsYmluX2F0KE0sIEkpO1wKKyAgbWNodW5rcHRyIEYgPSBCO1wKKyAgYXNzZXJ0KFMgPj0gTUlOX0NIVU5LX1NJWkUpO1wKKyAgaWYgKCFzbWFsbG1hcF9pc19tYXJrZWQoTSwgSSkpXAorICAgIG1hcmtfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgQi0+ZmQpKSlcCisgICAgRiA9IEItPmZkO1wKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKKyAgQi0+ZmQgPSBQO1wKKyAgRi0+YmsgPSBQO1wKKyAgUC0+ZmQgPSBGO1wKKyAgUC0+YmsgPSBCO1wKK30KKworLyogVW5saW5rIGEgY2h1bmsgZnJvbSBhIHNtYWxsYmluCisgKiBBZGRlZCBjaGVjazogaWYgRi0+YmsgIT0gUCBvciBCLT5mZCAhPSBQLCB3ZSBoYXZlIGRvdWJsZSBsaW5rZWQgbGlzdAorICogY29ycnVwdGlvbiwgYW5kIGFib3J0LgorICovCisjZGVmaW5lIHVubGlua19zbWFsbF9jaHVuayhNLCBQLCBTKSB7XAorICBtY2h1bmtwdHIgRiA9IFAtPmZkO1wKKyAgbWNodW5rcHRyIEIgPSBQLT5iaztcCisgIGJpbmRleF90IEkgPSBzbWFsbF9pbmRleChTKTtcCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChGLT5iayAhPSBQIHx8IEItPmZkICE9IFAsIDApKVwKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEYgPT0gQilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKChGID09IHNtYWxsYmluX2F0KE0sSSkgfHwgb2tfYWRkcmVzcyhNLCBGKSkgJiZcCisgICAgICAgICAgICAgICAgICAgKEIgPT0gc21hbGxiaW5fYXQoTSxJKSB8fCBva19hZGRyZXNzKE0sIEIpKSkpIHtcCisgICAgRi0+YmsgPSBCO1wKKyAgICBCLT5mZCA9IEY7XAorICB9XAorICBlbHNlIHtcCisgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICB9XAorfQorCisvKiBVbmxpbmsgdGhlIGZpcnN0IGNodW5rIGZyb20gYSBzbWFsbGJpbgorICogQWRkZWQgY2hlY2s6IGlmIEYtPmJrICE9IFAgb3IgQi0+ZmQgIT0gUCwgd2UgaGF2ZSBkb3VibGUgbGlua2VkIGxpc3QKKyAqIGNvcnJ1cHRpb24sIGFuZCBhYm9ydC4KKyAqLworI2RlZmluZSB1bmxpbmtfZmlyc3Rfc21hbGxfY2h1bmsoTSwgQiwgUCwgSSkge1wKKyAgbWNodW5rcHRyIEYgPSBQLT5mZDtcCisgIGlmIChfX2J1aWx0aW5fZXhwZWN0IChGLT5iayAhPSBQIHx8IEItPmZkICE9IFAsIDApKVwKKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgIGFzc2VydChQICE9IEIpO1wKKyAgYXNzZXJ0KFAgIT0gRik7XAorICBhc3NlcnQoY2h1bmtzaXplKFApID09IHNtYWxsX2luZGV4MnNpemUoSSkpO1wKKyAgaWYgKEIgPT0gRilcCisgICAgY2xlYXJfc21hbGxtYXAoTSwgSSk7XAorICBlbHNlIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgRikpKSB7XAorICAgIEItPmZkID0gRjtcCisgICAgRi0+YmsgPSBCO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgfVwKK30KKworLyogUmVwbGFjZSBkdiBub2RlLCBiaW5uaW5nIHRoZSBvbGQgb25lICovCisvKiBVc2VkIG9ubHkgd2hlbiBkdnNpemUga25vd24gdG8gYmUgc21hbGwgKi8KKyNkZWZpbmUgcmVwbGFjZV9kdihNLCBQLCBTKSB7XAorICBzaXplX3QgRFZTID0gTS0+ZHZzaXplO1wKKyAgaWYgKERWUyAhPSAwKSB7XAorICAgIG1jaHVua3B0ciBEViA9IE0tPmR2O1wKKyAgICBhc3NlcnQoaXNfc21hbGwoRFZTKSk7XAorICAgIGluc2VydF9zbWFsbF9jaHVuayhNLCBEViwgRFZTKTtcCisgIH1cCisgIE0tPmR2c2l6ZSA9IFM7XAorICBNLT5kdiA9IFA7XAorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIE9wZXJhdGlvbnMgb24gdHJlZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbnNlcnQgY2h1bmsgaW50byB0cmVlICovCisjZGVmaW5lIGluc2VydF9sYXJnZV9jaHVuayhNLCBYLCBTKSB7XAorICB0YmlucHRyKiBIO1wKKyAgYmluZGV4X3QgSTtcCisgIGNvbXB1dGVfdHJlZV9pbmRleChTLCBJKTtcCisgIEggPSB0cmVlYmluX2F0KE0sIEkpO1wKKyAgWC0+aW5kZXggPSBJO1wKKyAgWC0+Y2hpbGRbMF0gPSBYLT5jaGlsZFsxXSA9IDA7XAorICBpZiAoIXRyZWVtYXBfaXNfbWFya2VkKE0sIEkpKSB7XAorICAgIG1hcmtfdHJlZW1hcChNLCBJKTtcCisgICAgKkggPSBYO1wKKyAgICBYLT5wYXJlbnQgPSAodGNodW5rcHRyKUg7XAorICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgfVwKKyAgZWxzZSB7XAorICAgIHRjaHVua3B0ciBUID0gKkg7XAorICAgIHNpemVfdCBLID0gUyA8PCBsZWZ0c2hpZnRfZm9yX3RyZWVfaW5kZXgoSSk7XAorICAgIGZvciAoOzspIHtcCisgICAgICBpZiAoY2h1bmtzaXplKFQpICE9IFMpIHtcCisgICAgICAgIHRjaHVua3B0ciogQyA9ICYoVC0+Y2hpbGRbKEsgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdKTtcCisgICAgICAgIEsgPDw9IDE7XAorICAgICAgICBpZiAoKkMgIT0gMClcCisgICAgICAgICAgVCA9ICpDO1wKKyAgICAgICAgZWxzZSBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMpKSkge1wKKyAgICAgICAgICAqQyA9IFg7XAorICAgICAgICAgIFgtPnBhcmVudCA9IFQ7XAorICAgICAgICAgIFgtPmZkID0gWC0+YmsgPSBYO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICAgIGVsc2Uge1wKKyAgICAgICAgdGNodW5rcHRyIEYgPSBULT5mZDtcCisgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoTSwgVCkgJiYgb2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICAgICAgVC0+ZmQgPSBGLT5iayA9IFg7XAorICAgICAgICAgIFgtPmZkID0gRjtcCisgICAgICAgICAgWC0+YmsgPSBUO1wKKyAgICAgICAgICBYLT5wYXJlbnQgPSAwO1wKKyAgICAgICAgICBicmVhaztcCisgICAgICAgIH1cCisgICAgICAgIGVsc2Uge1wKKyAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgICAgYnJlYWs7XAorICAgICAgICB9XAorICAgICAgfVwKKyAgICB9XAorICB9XAorfQorCisvKgorICBVbmxpbmsgc3RlcHM6CisKKyAgMS4gSWYgeCBpcyBhIGNoYWluZWQgbm9kZSwgdW5saW5rIGl0IGZyb20gaXRzIHNhbWUtc2l6ZWQgZmQvYmsgbGlua3MKKyAgICAgYW5kIGNob29zZSBpdHMgYmsgbm9kZSBhcyBpdHMgcmVwbGFjZW1lbnQuCisgIDIuIElmIHggd2FzIHRoZSBsYXN0IG5vZGUgb2YgaXRzIHNpemUsIGJ1dCBub3QgYSBsZWFmIG5vZGUsIGl0IG11c3QKKyAgICAgYmUgcmVwbGFjZWQgd2l0aCBhIGxlYWYgbm9kZSAobm90IG1lcmVseSBvbmUgd2l0aCBhbiBvcGVuIGxlZnQgb3IKKyAgICAgcmlnaHQpLCB0byBtYWtlIHN1cmUgdGhhdCBsZWZ0cyBhbmQgcmlnaHRzIG9mIGRlc2NlbmRlbnRzCisgICAgIGNvcnJlc3BvbmQgcHJvcGVybHkgdG8gYml0IG1hc2tzLiAgV2UgdXNlIHRoZSByaWdodG1vc3QgZGVzY2VuZGVudAorICAgICBvZiB4LiAgV2UgY291bGQgdXNlIGFueSBvdGhlciBsZWFmLCBidXQgdGhpcyBpcyBlYXN5IHRvIGxvY2F0ZSBhbmQKKyAgICAgdGVuZHMgdG8gY291bnRlcmFjdCByZW1vdmFsIG9mIGxlZnRtb3N0cyBlbHNld2hlcmUsIGFuZCBzbyBrZWVwcworICAgICBwYXRocyBzaG9ydGVyIHRoYW4gbWluaW1hbGx5IGd1YXJhbnRlZWQuICBUaGlzIGRvZXNuJ3QgbG9vcCBtdWNoCisgICAgIGJlY2F1c2Ugb24gYXZlcmFnZSBhIG5vZGUgaW4gYSB0cmVlIGlzIG5lYXIgdGhlIGJvdHRvbS4KKyAgMy4gSWYgeCBpcyB0aGUgYmFzZSBvZiBhIGNoYWluIChpLmUuLCBoYXMgcGFyZW50IGxpbmtzKSByZWxpbmsKKyAgICAgeCdzIHBhcmVudCBhbmQgY2hpbGRyZW4gdG8geCdzIHJlcGxhY2VtZW50IChvciBudWxsIGlmIG5vbmUpLgorCisgIEFkZGVkIGNoZWNrOiBpZiBGLT5iayAhPSBYIG9yIFItPmZkICE9IFgsIHdlIGhhdmUgZG91YmxlIGxpbmtlZCBsaXN0CisgIGNvcnJ1cHRpb24sIGFuZCBhYm9ydC4KKyovCisKKyNkZWZpbmUgdW5saW5rX2xhcmdlX2NodW5rKE0sIFgpIHtcCisgIHRjaHVua3B0ciBYUCA9IFgtPnBhcmVudDtcCisgIHRjaHVua3B0ciBSO1wKKyAgaWYgKFgtPmJrICE9IFgpIHtcCisgICAgdGNodW5rcHRyIEYgPSBYLT5mZDtcCisgICAgUiA9IFgtPmJrO1wKKyAgICBpZiAoX19idWlsdGluX2V4cGVjdCAoRi0+YmsgIT0gWCB8fCBSLT5mZCAhPSBYLCAwKSlcCisgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBGKSkpIHtcCisgICAgICBGLT5iayA9IFI7XAorICAgICAgUi0+ZmQgPSBGO1wKKyAgICB9XAorICAgIGVsc2Uge1wKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICB9XAorICB9XAorICBlbHNlIHtcCisgICAgdGNodW5rcHRyKiBSUDtcCisgICAgaWYgKCgoUiA9ICooUlAgPSAmKFgtPmNoaWxkWzFdKSkpICE9IDApIHx8XAorICAgICAgICAoKFIgPSAqKFJQID0gJihYLT5jaGlsZFswXSkpKSAhPSAwKSkge1wKKyAgICAgIHRjaHVua3B0ciogQ1A7XAorICAgICAgd2hpbGUgKCgqKENQID0gJihSLT5jaGlsZFsxXSkpICE9IDApIHx8XAorICAgICAgICAgICAgICgqKENQID0gJihSLT5jaGlsZFswXSkpICE9IDApKSB7XAorICAgICAgICBSID0gKihSUCA9IENQKTtcCisgICAgICB9XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSUCkpKVwKKyAgICAgICAgKlJQID0gMDtcCisgICAgICBlbHNlIHtcCisgICAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICAgIH1cCisgICAgfVwKKyAgfVwKKyAgaWYgKFhQICE9IDApIHtcCisgICAgdGJpbnB0ciogSCA9IHRyZWViaW5fYXQoTSwgWC0+aW5kZXgpO1wKKyAgICBpZiAoWCA9PSAqSCkge1wKKyAgICAgIGlmICgoKkggPSBSKSA9PSAwKSBcCisgICAgICAgIGNsZWFyX3RyZWVtYXAoTSwgWC0+aW5kZXgpO1wKKyAgICB9XAorICAgIGVsc2UgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBYUCkpKSB7XAorICAgICAgaWYgKFhQLT5jaGlsZFswXSA9PSBYKSBcCisgICAgICAgIFhQLT5jaGlsZFswXSA9IFI7XAorICAgICAgZWxzZSBcCisgICAgICAgIFhQLT5jaGlsZFsxXSA9IFI7XAorICAgIH1cCisgICAgZWxzZVwKKyAgICAgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKE0pO1wKKyAgICBpZiAoUiAhPSAwKSB7XAorICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhNLCBSKSkpIHtcCisgICAgICAgIHRjaHVua3B0ciBDMCwgQzE7XAorICAgICAgICBSLT5wYXJlbnQgPSBYUDtcCisgICAgICAgIGlmICgoQzAgPSBYLT5jaGlsZFswXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMwKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFswXSA9IEMwO1wKKyAgICAgICAgICAgIEMwLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICAgIGlmICgoQzEgPSBYLT5jaGlsZFsxXSkgIT0gMCkge1wKKyAgICAgICAgICBpZiAoUlRDSEVDSyhva19hZGRyZXNzKE0sIEMxKSkpIHtcCisgICAgICAgICAgICBSLT5jaGlsZFsxXSA9IEMxO1wKKyAgICAgICAgICAgIEMxLT5wYXJlbnQgPSBSO1wKKyAgICAgICAgICB9XAorICAgICAgICAgIGVsc2VcCisgICAgICAgICAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihNKTtcCisgICAgICAgIH1cCisgICAgICB9XAorICAgICAgZWxzZVwKKyAgICAgICAgQ09SUlVQVElPTl9FUlJPUl9BQ1RJT04oTSk7XAorICAgIH1cCisgIH1cCit9CisKKy8qIFJlbGF5cyB0byBsYXJnZSB2cyBzbWFsbCBiaW4gb3BlcmF0aW9ucyAqLworCisjZGVmaW5lIGluc2VydF9jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSBpbnNlcnRfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgaW5zZXJ0X2xhcmdlX2NodW5rKE0sIFRQLCBTKTsgfQorCisjZGVmaW5lIHVubGlua19jaHVuayhNLCBQLCBTKVwKKyAgaWYgKGlzX3NtYWxsKFMpKSB1bmxpbmtfc21hbGxfY2h1bmsoTSwgUCwgUylcCisgIGVsc2UgeyB0Y2h1bmtwdHIgVFAgPSAodGNodW5rcHRyKShQKTsgdW5saW5rX2xhcmdlX2NodW5rKE0sIFRQKTsgfQorCisKKy8qIFJlbGF5cyB0byBpbnRlcm5hbCBjYWxscyB0byBtYWxsb2MvZnJlZSBmcm9tIHJlYWxsb2MsIG1lbWFsaWduIGV0YyAqLworCisjaWYgT05MWV9NU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBPTkxZX01TUEFDRVMgKi8KKyNpZiBNU1BBQ0VTCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKVwKKyAgIChtID09IGdtKT8gZGxtYWxsb2MoYikgOiBtc3BhY2VfbWFsbG9jKG0sIGIpCisjZGVmaW5lIGludGVybmFsX2ZyZWUobSwgbWVtKVwKKyAgIGlmIChtID09IGdtKSBkbGZyZWUobWVtKTsgZWxzZSBtc3BhY2VfZnJlZShtLG1lbSk7CisjZWxzZSAvKiBNU1BBQ0VTICovCisjZGVmaW5lIGludGVybmFsX21hbGxvYyhtLCBiKSBkbG1hbGxvYyhiKQorI2RlZmluZSBpbnRlcm5hbF9mcmVlKG0sIG1lbSkgZGxmcmVlKG1lbSkKKyNlbmRpZiAvKiBNU1BBQ0VTICovCisjZW5kaWYgLyogT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICBEaXJlY3QtbW1hcHBpbmcgY2h1bmtzIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qCisgIERpcmVjdGx5IG1tYXBwZWQgY2h1bmtzIGFyZSBzZXQgdXAgd2l0aCBhbiBvZmZzZXQgdG8gdGhlIHN0YXJ0IG9mCisgIHRoZSBtbWFwcGVkIHJlZ2lvbiBzdG9yZWQgaW4gdGhlIHByZXZfZm9vdCBmaWVsZCBvZiB0aGUgY2h1bmsuIFRoaXMKKyAgYWxsb3dzIHJlY29uc3RydWN0aW9uIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudCB0byBNVU5NQVAgd2hlbiBmcmVlZCwKKyAgYW5kIGFsc28gYWxsb3dzIGFkanVzdG1lbnQgb2YgdGhlIHJldHVybmVkIGNodW5rIHRvIG1lZXQgYWxpZ25tZW50CisgIHJlcXVpcmVtZW50cyAoZXNwZWNpYWxseSBpbiBtZW1hbGlnbikuICBUaGVyZSBpcyBhbHNvIGVub3VnaCBzcGFjZQorICBhbGxvY2F0ZWQgdG8gaG9sZCBhIGZha2UgbmV4dCBjaHVuayBvZiBzaXplIFNJWkVfVF9TSVpFIHRvIG1haW50YWluCisgIHRoZSBQSU5VU0UgYml0IHNvIGZyZWVzIGNhbiBiZSBjaGVja2VkLgorKi8KKworLyogTWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyB2b2lkKiBtbWFwX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG1tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArIENIVU5LX0FMSUdOX01BU0spOworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgc2l6ZV90IG5ld19mb290cHJpbnQgPSBtLT5mb290cHJpbnQgKyBtbXNpemU7CisgIGlmIChuZXdfZm9vdHByaW50IDw9IG0tPmZvb3RwcmludCB8fCAgLyogQ2hlY2sgZm9yIHdyYXAgYXJvdW5kIDAgKi8KKyAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpCisgICAgcmV0dXJuIDA7CisjZW5kaWYKKyAgaWYgKG1tc2l6ZSA+IG5iKSB7ICAgICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgIGNoYXIqIG1tID0gKGNoYXIqKShESVJFQ1RfTU1BUChtbXNpemUpKTsKKyAgICBpZiAobW0gIT0gQ01GQUlMKSB7CisgICAgICBzaXplX3Qgb2Zmc2V0ID0gYWxpZ25fb2Zmc2V0KGNodW5rMm1lbShtbSkpOworICAgICAgc2l6ZV90IHBzaXplID0gbW1zaXplIC0gb2Zmc2V0IC0gTU1BUF9GT09UX1BBRDsKKyAgICAgIG1jaHVua3B0ciBwID0gKG1jaHVua3B0cikobW0gKyBvZmZzZXQpOworICAgICAgcC0+cHJldl9mb290ID0gb2Zmc2V0IHwgSVNfTU1BUFBFRF9CSVQ7CisgICAgICAocCktPmhlYWQgPSAocHNpemV8Q0lOVVNFX0JJVCk7CisgICAgICBtYXJrX2ludXNlX2Zvb3QobSwgcCwgcHNpemUpOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpLT5oZWFkID0gRkVOQ0VQT1NUX0hFQUQ7CisgICAgICBjaHVua19wbHVzX29mZnNldChwLCBwc2l6ZStTSVpFX1RfU0laRSktPmhlYWQgPSAwOworCisgICAgICBpZiAobW0gPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICBtLT5sZWFzdF9hZGRyID0gbW07CisgICAgICBpZiAoKG0tPmZvb3RwcmludCArPSBtbXNpemUpID4gbS0+bWF4X2Zvb3RwcmludCkKKyAgICAgICAgbS0+bWF4X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludDsKKyAgICAgIGFzc2VydChpc19hbGlnbmVkKGNodW5rMm1lbShwKSkpOworICAgICAgY2hlY2tfbW1hcHBlZF9jaHVuayhtLCBwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiBSZWFsbG9jIHVzaW5nIG1tYXAgKi8KK3N0YXRpYyBtY2h1bmtwdHIgbW1hcF9yZXNpemUobXN0YXRlIG0sIG1jaHVua3B0ciBvbGRwLCBzaXplX3QgbmIpIHsKKyAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgIGlmIChpc19zbWFsbChuYikpIC8qIENhbid0IHNocmluayBtbWFwIHJlZ2lvbnMgYmVsb3cgc21hbGwgc2l6ZSAqLworICAgIHJldHVybiAwOworICAvKiBLZWVwIG9sZCBjaHVuayBpZiBiaWcgZW5vdWdoIGJ1dCBub3QgdG9vIGJpZyAqLworICBpZiAob2xkc2l6ZSA+PSBuYiArIFNJWkVfVF9TSVpFICYmCisgICAgICAob2xkc2l6ZSAtIG5iKSA8PSAobXBhcmFtcy5ncmFudWxhcml0eSA8PCAxKSkKKyAgICByZXR1cm4gb2xkcDsKKyAgZWxzZSB7CisgICAgc2l6ZV90IG9mZnNldCA9IG9sZHAtPnByZXZfZm9vdCAmIH5JU19NTUFQUEVEX0JJVDsKKyAgICBzaXplX3Qgb2xkbW1zaXplID0gb2xkc2l6ZSArIG9mZnNldCArIE1NQVBfRk9PVF9QQUQ7CisgICAgc2l6ZV90IG5ld21tc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgU0lYX1NJWkVfVF9TSVpFUyArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIVU5LX0FMSUdOX01BU0spOworICAgIGNoYXIqIGNwID0gKGNoYXIqKUNBTExfTVJFTUFQKChjaGFyKilvbGRwIC0gb2Zmc2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9sZG1tc2l6ZSwgbmV3bW1zaXplLCAxKTsKKyAgICBpZiAoY3AgIT0gQ01GQUlMKSB7CisgICAgICBtY2h1bmtwdHIgbmV3cCA9IChtY2h1bmtwdHIpKGNwICsgb2Zmc2V0KTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IG5ld21tc2l6ZSAtIG9mZnNldCAtIE1NQVBfRk9PVF9QQUQ7CisgICAgICBuZXdwLT5oZWFkID0gKHBzaXplfENJTlVTRV9CSVQpOworICAgICAgbWFya19pbnVzZV9mb290KG0sIG5ld3AsIHBzaXplKTsKKyAgICAgIGNodW5rX3BsdXNfb2Zmc2V0KG5ld3AsIHBzaXplKS0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICAgY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgcHNpemUrU0laRV9UX1NJWkUpLT5oZWFkID0gMDsKKworICAgICAgaWYgKGNwIDwgbS0+bGVhc3RfYWRkcikKKyAgICAgICAgbS0+bGVhc3RfYWRkciA9IGNwOworICAgICAgaWYgKChtLT5mb290cHJpbnQgKz0gbmV3bW1zaXplIC0gb2xkbW1zaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICAgIG0tPm1heF9mb290cHJpbnQgPSBtLT5mb290cHJpbnQ7CisgICAgICBjaGVja19tbWFwcGVkX2NodW5rKG0sIG5ld3ApOworICAgICAgcmV0dXJuIG5ld3A7CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBtc3BhY2UgbWFuYWdlbWVudCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBJbml0aWFsaXplIHRvcCBjaHVuayBhbmQgaXRzIHNpemUgKi8KK3N0YXRpYyB2b2lkIGluaXRfdG9wKG1zdGF0ZSBtLCBtY2h1bmtwdHIgcCwgc2l6ZV90IHBzaXplKSB7CisgIC8qIEVuc3VyZSBhbGlnbm1lbnQgKi8KKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocCkpOworICBwID0gKG1jaHVua3B0cikoKGNoYXIqKXAgKyBvZmZzZXQpOworICBwc2l6ZSAtPSBvZmZzZXQ7CisKKyAgbS0+dG9wID0gcDsKKyAgbS0+dG9wc2l6ZSA9IHBzaXplOworICBwLT5oZWFkID0gcHNpemUgfCBQSU5VU0VfQklUOworICAvKiBzZXQgc2l6ZSBvZiBmYWtlIHRyYWlsaW5nIGNodW5rIGhvbGRpbmcgb3ZlcmhlYWQgc3BhY2Ugb25seSBvbmNlICovCisgIGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKS0+aGVhZCA9IFRPUF9GT09UX1NJWkU7CisgIG0tPnRyaW1fY2hlY2sgPSBtcGFyYW1zLnRyaW1fdGhyZXNob2xkOyAvKiByZXNldCBvbiBlYWNoIHVwZGF0ZSAqLworfQorCisvKiBJbml0aWFsaXplIGJpbnMgZm9yIGEgbmV3IG1zdGF0ZSB0aGF0IGlzIG90aGVyd2lzZSB6ZXJvZWQgb3V0ICovCitzdGF0aWMgdm9pZCBpbml0X2JpbnMobXN0YXRlIG0pIHsKKyAgLyogRXN0YWJsaXNoIGNpcmN1bGFyIGxpbmtzIGZvciBzbWFsbGJpbnMgKi8KKyAgYmluZGV4X3QgaTsKKyAgZm9yIChpID0gMDsgaSA8IE5TTUFMTEJJTlM7ICsraSkgeworICAgIHNiaW5wdHIgYmluID0gc21hbGxiaW5fYXQobSxpKTsKKyAgICBiaW4tPmZkID0gYmluLT5iayA9IGJpbjsKKyAgfQorfQorCisjaWYgUFJPQ0VFRF9PTl9FUlJPUgorCisvKiBkZWZhdWx0IGNvcnJ1cHRpb24gYWN0aW9uICovCitzdGF0aWMgdm9pZCByZXNldF9vbl9lcnJvcihtc3RhdGUgbSkgeworICBpbnQgaTsKKyAgKyttYWxsb2NfY29ycnVwdGlvbl9lcnJvcl9jb3VudDsKKyAgLyogUmVpbml0aWFsaXplIGZpZWxkcyB0byBmb3JnZXQgYWJvdXQgYWxsIG1lbW9yeSAqLworICBtLT5zbWFsbGJpbnMgPSBtLT50cmVlYmlucyA9IDA7CisgIG0tPmR2c2l6ZSA9IG0tPnRvcHNpemUgPSAwOworICBtLT5zZWcuYmFzZSA9IDA7CisgIG0tPnNlZy5zaXplID0gMDsKKyAgbS0+c2VnLm5leHQgPSAwOworICBtLT50b3AgPSBtLT5kdiA9IDA7CisgIGZvciAoaSA9IDA7IGkgPCBOVFJFRUJJTlM7ICsraSkKKyAgICAqdHJlZWJpbl9hdChtLCBpKSA9IDA7CisgIGluaXRfYmlucyhtKTsKK30KKyNlbmRpZiAvKiBQUk9DRUVEX09OX0VSUk9SICovCisKKy8qIEFsbG9jYXRlIGNodW5rIGFuZCBwcmVwZW5kIHJlbWFpbmRlciB3aXRoIGNodW5rIGluIHN1Y2Nlc3NvciBiYXNlLiAqLworc3RhdGljIHZvaWQqIHByZXBlbmRfYWxsb2MobXN0YXRlIG0sIGNoYXIqIG5ld2Jhc2UsIGNoYXIqIG9sZGJhc2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgbmIpIHsKKyAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhuZXdiYXNlKTsKKyAgbWNodW5rcHRyIG9sZGZpcnN0ID0gYWxpZ25fYXNfY2h1bmsob2xkYmFzZSk7CisgIHNpemVfdCBwc2l6ZSA9IChjaGFyKilvbGRmaXJzdCAtIChjaGFyKilwOworICBtY2h1bmtwdHIgcSA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIG5iKTsKKyAgc2l6ZV90IHFzaXplID0gcHNpemUgLSBuYjsKKyAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCBuYik7CisKKyAgYXNzZXJ0KChjaGFyKilvbGRmaXJzdCA+IChjaGFyKilxKTsKKyAgYXNzZXJ0KHBpbnVzZShvbGRmaXJzdCkpOworICBhc3NlcnQocXNpemUgPj0gTUlOX0NIVU5LX1NJWkUpOworCisgIC8qIGNvbnNvbGlkYXRlIHJlbWFpbmRlciB3aXRoIGZpcnN0IGNodW5rIG9mIG9sZCBiYXNlICovCisgIGlmIChvbGRmaXJzdCA9PSBtLT50b3ApIHsKKyAgICBzaXplX3QgdHNpemUgPSBtLT50b3BzaXplICs9IHFzaXplOworICAgIG0tPnRvcCA9IHE7CisgICAgcS0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICBjaGVja190b3BfY2h1bmsobSwgcSk7CisgIH0KKyAgZWxzZSBpZiAob2xkZmlyc3QgPT0gbS0+ZHYpIHsKKyAgICBzaXplX3QgZHNpemUgPSBtLT5kdnNpemUgKz0gcXNpemU7CisgICAgbS0+ZHYgPSBxOworICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhxLCBkc2l6ZSk7CisgIH0KKyAgZWxzZSB7CisgICAgaWYgKCFjaW51c2Uob2xkZmlyc3QpKSB7CisgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUob2xkZmlyc3QpOworICAgICAgdW5saW5rX2NodW5rKG0sIG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBvbGRmaXJzdCA9IGNodW5rX3BsdXNfb2Zmc2V0KG9sZGZpcnN0LCBuc2l6ZSk7CisgICAgICBxc2l6ZSArPSBuc2l6ZTsKKyAgICB9CisgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocSwgcXNpemUsIG9sZGZpcnN0KTsKKyAgICBpbnNlcnRfY2h1bmsobSwgcSwgcXNpemUpOworICAgIGNoZWNrX2ZyZWVfY2h1bmsobSwgcSk7CisgIH0KKworICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgcmV0dXJuIGNodW5rMm1lbShwKTsKK30KKworCisvKiBBZGQgYSBzZWdtZW50IHRvIGhvbGQgYSBuZXcgbm9uY29udGlndW91cyByZWdpb24gKi8KK3N0YXRpYyB2b2lkIGFkZF9zZWdtZW50KG1zdGF0ZSBtLCBjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplLCBmbGFnX3QgbW1hcHBlZCkgeworICAvKiBEZXRlcm1pbmUgbG9jYXRpb25zIGFuZCBzaXplcyBvZiBzZWdtZW50LCBmZW5jZXBvc3RzLCBvbGQgdG9wICovCisgIGNoYXIqIG9sZF90b3AgPSAoY2hhciopbS0+dG9wOworICBtc2VnbWVudHB0ciBvbGRzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCBvbGRfdG9wKTsKKyAgY2hhciogb2xkX2VuZCA9IG9sZHNwLT5iYXNlICsgb2xkc3AtPnNpemU7CisgIHNpemVfdCBzc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3NlZ21lbnQpKTsKKyAgY2hhciogcmF3c3AgPSBvbGRfZW5kIC0gKHNzaXplICsgRk9VUl9TSVpFX1RfU0laRVMgKyBDSFVOS19BTElHTl9NQVNLKTsKKyAgc2l6ZV90IG9mZnNldCA9IGFsaWduX29mZnNldChjaHVuazJtZW0ocmF3c3ApKTsKKyAgY2hhciogYXNwID0gcmF3c3AgKyBvZmZzZXQ7CisgIGNoYXIqIGNzcCA9IChhc3AgPCAob2xkX3RvcCArIE1JTl9DSFVOS19TSVpFKSk/IG9sZF90b3AgOiBhc3A7CisgIG1jaHVua3B0ciBzcCA9IChtY2h1bmtwdHIpY3NwOworICBtc2VnbWVudHB0ciBzcyA9IChtc2VnbWVudHB0cikoY2h1bmsybWVtKHNwKSk7CisgIG1jaHVua3B0ciB0bmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHNwLCBzc2l6ZSk7CisgIG1jaHVua3B0ciBwID0gdG5leHQ7CisgIGludCBuZmVuY2VzID0gMDsKKworICAvKiByZXNldCB0b3AgdG8gbmV3IHNwYWNlICovCisgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisKKyAgLyogU2V0IHVwIHNlZ21lbnQgcmVjb3JkICovCisgIGFzc2VydChpc19hbGlnbmVkKHNzKSk7CisgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgc3AsIHNzaXplKTsKKyAgKnNzID0gbS0+c2VnOyAvKiBQdXNoIGN1cnJlbnQgcmVjb3JkICovCisgIG0tPnNlZy5iYXNlID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gdHNpemU7CisgIG0tPnNlZy5zZmxhZ3MgPSBtbWFwcGVkOworICBtLT5zZWcubmV4dCA9IHNzOworCisgIC8qIEluc2VydCB0cmFpbGluZyBmZW5jZXBvc3RzICovCisgIGZvciAoOzspIHsKKyAgICBtY2h1bmtwdHIgbmV4dHAgPSBjaHVua19wbHVzX29mZnNldChwLCBTSVpFX1RfU0laRSk7CisgICAgcC0+aGVhZCA9IEZFTkNFUE9TVF9IRUFEOworICAgICsrbmZlbmNlczsKKyAgICBpZiAoKGNoYXIqKSgmKG5leHRwLT5oZWFkKSkgPCBvbGRfZW5kKQorICAgICAgcCA9IG5leHRwOworICAgIGVsc2UKKyAgICAgIGJyZWFrOworICB9CisgIGFzc2VydChuZmVuY2VzID49IDIpOworCisgIC8qIEluc2VydCB0aGUgcmVzdCBvZiBvbGQgdG9wIGludG8gYSBiaW4gYXMgYW4gb3JkaW5hcnkgZnJlZSBjaHVuayAqLworICBpZiAoY3NwICE9IG9sZF90b3ApIHsKKyAgICBtY2h1bmtwdHIgcSA9IChtY2h1bmtwdHIpb2xkX3RvcDsKKyAgICBzaXplX3QgcHNpemUgPSBjc3AgLSBvbGRfdG9wOworICAgIG1jaHVua3B0ciB0biA9IGNodW5rX3BsdXNfb2Zmc2V0KHEsIHBzaXplKTsKKyAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShxLCBwc2l6ZSwgdG4pOworICAgIGluc2VydF9jaHVuayhtLCBxLCBwc2l6ZSk7CisgIH0KKworICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gU3lzdGVtIGFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogR2V0IG1lbW9yeSBmcm9tIHN5c3RlbSB1c2luZyBNT1JFQ09SRSBvciBNTUFQICovCitzdGF0aWMgdm9pZCogc3lzX2FsbG9jKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgY2hhciogdGJhc2UgPSBDTUZBSUw7CisgIHNpemVfdCB0c2l6ZSA9IDA7CisgIGZsYWdfdCBtbWFwX2ZsYWcgPSAwOworCisgIGluaXRfbXBhcmFtcygpOworCisgIC8qIERpcmVjdGx5IG1hcCBsYXJnZSBjaHVua3MgKi8KKyAgaWYgKHVzZV9tbWFwKG0pICYmIG5iID49IG1wYXJhbXMubW1hcF90aHJlc2hvbGQpIHsKKyAgICB2b2lkKiBtZW0gPSBtbWFwX2FsbG9jKG0sIG5iKTsKKyAgICBpZiAobWVtICE9IDApCisgICAgICByZXR1cm4gbWVtOworICB9CisKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCisgIC8qIE1ha2Ugc3VyZSB0aGUgZm9vdHByaW50IGRvZXNuJ3QgZ3JvdyBwYXN0IG1heF9hbGxvd2VkX2Zvb3RwcmludC4KKyAgICogVGhpcyBjb3ZlcnMgYWxsIGNhc2VzIGV4Y2VwdCBmb3Igd2hlcmUgd2UgbmVlZCB0byBwYWdlIGFsaWduLCBiZWxvdy4KKyAgICovCisgIHsKKyAgICBzaXplX3QgbmV3X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludCArCisgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICBpZiAobmV3X2Zvb3RwcmludCA8PSBtLT5mb290cHJpbnQgfHwgIC8qIENoZWNrIGZvciB3cmFwIGFyb3VuZCAwICovCisgICAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpCisgICAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmCisKKyAgLyoKKyAgICBUcnkgZ2V0dGluZyBtZW1vcnkgaW4gYW55IG9mIHRocmVlIHdheXMgKGluIG1vc3QtcHJlZmVycmVkIHRvCisgICAgbGVhc3QtcHJlZmVycmVkIG9yZGVyKToKKyAgICAxLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW4gbm9ybWFsbHkgY29udGlndW91c2x5IGV4dGVuZCBtZW1vcnkuCisgICAgICAgKGRpc2FibGVkIGlmIG5vdCBNT1JFQ09SRV9DT05USUdVT1VTIG9yIG5vdCBIQVZFX01PUkVDT1JFIG9yCisgICAgICAgb3IgbWFpbiBzcGFjZSBpcyBtbWFwcGVkIG9yIGEgcHJldmlvdXMgY29udGlndW91cyBjYWxsIGZhaWxlZCkKKyAgICAyLiBBIGNhbGwgdG8gTU1BUCBuZXcgc3BhY2UgKGRpc2FibGVkIGlmIG5vdCBIQVZFX01NQVApLgorICAgICAgIE5vdGUgdGhhdCB1bmRlciB0aGUgZGVmYXVsdCBzZXR0aW5ncywgaWYgTU9SRUNPUkUgaXMgdW5hYmxlIHRvCisgICAgICAgZnVsZmlsbCBhIHJlcXVlc3QsIGFuZCBIQVZFX01NQVAgaXMgdHJ1ZSwgdGhlbiBtbWFwIGlzCisgICAgICAgdXNlZCBhcyBhIG5vbmNvbnRpZ3VvdXMgc3lzdGVtIGFsbG9jYXRvci4gVGhpcyBpcyBhIHVzZWZ1bCBiYWNrdXAKKyAgICAgICBzdHJhdGVneSBmb3Igc3lzdGVtcyB3aXRoIGhvbGVzIGluIGFkZHJlc3Mgc3BhY2VzIC0tIGluIHRoaXMgY2FzZQorICAgICAgIHNicmsgY2Fubm90IGNvbnRpZ3VvdXNseSBleHBhbmQgdGhlIGhlYXAsIGJ1dCBtbWFwIG1heSBiZSBhYmxlIHRvCisgICAgICAgZmluZCBzcGFjZS4KKyAgICAzLiBBIGNhbGwgdG8gTU9SRUNPUkUgdGhhdCBjYW5ub3QgdXN1YWxseSBjb250aWd1b3VzbHkgZXh0ZW5kIG1lbW9yeS4KKyAgICAgICAoZGlzYWJsZWQgaWYgbm90IEhBVkVfTU9SRUNPUkUpCisgICovCisKKyAgaWYgKE1PUkVDT1JFX0NPTlRJR1VPVVMgJiYgIXVzZV9ub25jb250aWd1b3VzKG0pKSB7CisgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgbXNlZ21lbnRwdHIgc3MgPSAobS0+dG9wID09IDApPyAwIDogc2VnbWVudF9ob2xkaW5nKG0sIChjaGFyKiltLT50b3ApOworICAgIHNpemVfdCBhc2l6ZSA9IDA7CisgICAgQUNRVUlSRV9NT1JFQ09SRV9MT0NLKCk7CisKKyAgICBpZiAoc3MgPT0gMCkgeyAgLyogRmlyc3QgdGltZSB0aHJvdWdoIG9yIHJlY292ZXJ5ICovCisgICAgICBjaGFyKiBiYXNlID0gKGNoYXIqKUNBTExfTU9SRUNPUkUoMCk7CisgICAgICBpZiAoYmFzZSAhPSBDTUZBSUwpIHsKKyAgICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiArIFRPUF9GT09UX1NJWkUgKyBTSVpFX1RfT05FKTsKKyAgICAgICAgLyogQWRqdXN0IHRvIGVuZCBvbiBhIHBhZ2UgYm91bmRhcnkgKi8KKyAgICAgICAgaWYgKCFpc19wYWdlX2FsaWduZWQoYmFzZSkpIHsKKyAgICAgICAgICBhc2l6ZSArPSAocGFnZV9hbGlnbigoc2l6ZV90KWJhc2UpIC0gKHNpemVfdCliYXNlKTsKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCisgICAgICAgICAgLyogSWYgdGhlIGFsaWdubWVudCBwdXNoZXMgdXMgb3ZlciBtYXhfYWxsb3dlZF9mb290cHJpbnQsCisgICAgICAgICAgICogcG9pc29uIHRoZSB1cGNvbWluZyBjYWxsIHRvIE1PUkVDT1JFIGFuZCBjb250aW51ZS4KKyAgICAgICAgICAgKi8KKyAgICAgICAgICB7CisgICAgICAgICAgICBzaXplX3QgbmV3X2Zvb3RwcmludCA9IG0tPmZvb3RwcmludCArIGFzaXplOworICAgICAgICAgICAgaWYgKG5ld19mb290cHJpbnQgPD0gbS0+Zm9vdHByaW50IHx8ICAvKiBDaGVjayBmb3Igd3JhcCBhcm91bmQgMCAqLworICAgICAgICAgICAgICAgIG5ld19mb290cHJpbnQgPiBtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQpIHsKKyAgICAgICAgICAgICAgYXNpemUgPSBIQUxGX01BWF9TSVpFX1Q7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgIH0KKyAgICAgICAgLyogQ2FuJ3QgY2FsbCBNT1JFQ09SRSBpZiBzaXplIGlzIG5lZ2F0aXZlIHdoZW4gdHJlYXRlZCBhcyBzaWduZWQgKi8KKyAgICAgICAgaWYgKGFzaXplIDwgSEFMRl9NQVhfU0laRV9UICYmCisgICAgICAgICAgICAoYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoYXNpemUpKSkgPT0gYmFzZSkgeworICAgICAgICAgIHRiYXNlID0gYmFzZTsKKyAgICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLyogU3VidHJhY3Qgb3V0IGV4aXN0aW5nIGF2YWlsYWJsZSB0b3Agc3BhY2UgZnJvbSBNT1JFQ09SRSByZXF1ZXN0LiAqLworICAgICAgYXNpemUgPSBncmFudWxhcml0eV9hbGlnbihuYiAtIG0tPnRvcHNpemUgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSk7CisgICAgICAvKiBVc2UgbWVtIGhlcmUgb25seSBpZiBpdCBkaWQgY29udGludW91c2x5IGV4dGVuZCBvbGQgc3BhY2UgKi8KKyAgICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCAmJgorICAgICAgICAgIChiciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRShhc2l6ZSkpKSA9PSBzcy0+YmFzZStzcy0+c2l6ZSkgeworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgIH0KKworICAgIGlmICh0YmFzZSA9PSBDTUZBSUwpIHsgICAgLyogQ29wZSB3aXRoIHBhcnRpYWwgZmFpbHVyZSAqLworICAgICAgaWYgKGJyICE9IENNRkFJTCkgeyAgICAvKiBUcnkgdG8gdXNlL2V4dGVuZCB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICBpZiAoYXNpemUgPCBIQUxGX01BWF9TSVpFX1QgJiYKKyAgICAgICAgICAgIGFzaXplIDwgbmIgKyBUT1BfRk9PVF9TSVpFICsgU0laRV9UX09ORSkgeworICAgICAgICAgIHNpemVfdCBlc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUgLSBhc2l6ZSk7CisgICAgICAgICAgaWYgKGVzaXplIDwgSEFMRl9NQVhfU0laRV9UKSB7CisgICAgICAgICAgICBjaGFyKiBlbmQgPSAoY2hhciopQ0FMTF9NT1JFQ09SRShlc2l6ZSk7CisgICAgICAgICAgICBpZiAoZW5kICE9IENNRkFJTCkKKyAgICAgICAgICAgICAgYXNpemUgKz0gZXNpemU7CisgICAgICAgICAgICBlbHNlIHsgICAgICAgICAgICAvKiBDYW4ndCB1c2U7IHRyeSB0byByZWxlYXNlICovCisgICAgICAgICAgICAgIENBTExfTU9SRUNPUkUoLWFzaXplKTsKKyAgICAgICAgICAgICAgYnIgPSBDTUZBSUw7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgICBpZiAoYnIgIT0gQ01GQUlMKSB7ICAgIC8qIFVzZSB0aGUgc3BhY2Ugd2UgZGlkIGdldCAqLworICAgICAgICB0YmFzZSA9IGJyOworICAgICAgICB0c2l6ZSA9IGFzaXplOworICAgICAgfQorICAgICAgZWxzZQorICAgICAgICBkaXNhYmxlX2NvbnRpZ3VvdXMobSk7IC8qIERvbid0IHRyeSBjb250aWd1b3VzIHBhdGggaW4gdGhlIGZ1dHVyZSAqLworICAgIH0KKworICAgIFJFTEVBU0VfTU9SRUNPUkVfTE9DSygpOworICB9CisKKyAgaWYgKEhBVkVfTU1BUCAmJiB0YmFzZSA9PSBDTUZBSUwpIHsgIC8qIFRyeSBNTUFQICovCisgICAgc2l6ZV90IHJlcSA9IG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkU7CisgICAgc2l6ZV90IHJzaXplID0gZ3JhbnVsYXJpdHlfYWxpZ24ocmVxKTsKKyAgICBpZiAocnNpemUgPiBuYikgeyAvKiBGYWlsIGlmIHdyYXBzIGFyb3VuZCB6ZXJvICovCisgICAgICBjaGFyKiBtcCA9IChjaGFyKikoQ0FMTF9NTUFQKHJzaXplKSk7CisgICAgICBpZiAobXAgIT0gQ01GQUlMKSB7CisgICAgICAgIHRiYXNlID0gbXA7CisgICAgICAgIHRzaXplID0gcnNpemU7CisgICAgICAgIG1tYXBfZmxhZyA9IElTX01NQVBQRURfQklUOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmIChIQVZFX01PUkVDT1JFICYmIHRiYXNlID09IENNRkFJTCkgeyAvKiBUcnkgbm9uY29udGlndW91cyBNT1JFQ09SRSAqLworICAgIHNpemVfdCBhc2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKG5iICsgVE9QX0ZPT1RfU0laRSArIFNJWkVfVF9PTkUpOworICAgIGlmIChhc2l6ZSA8IEhBTEZfTUFYX1NJWkVfVCkgeworICAgICAgY2hhciogYnIgPSBDTUZBSUw7CisgICAgICBjaGFyKiBlbmQgPSBDTUZBSUw7CisgICAgICBBQ1FVSVJFX01PUkVDT1JFX0xPQ0soKTsKKyAgICAgIGJyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKGFzaXplKSk7CisgICAgICBlbmQgPSAoY2hhciopKENBTExfTU9SRUNPUkUoMCkpOworICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICBpZiAoYnIgIT0gQ01GQUlMICYmIGVuZCAhPSBDTUZBSUwgJiYgYnIgPCBlbmQpIHsKKyAgICAgICAgc2l6ZV90IHNzaXplID0gZW5kIC0gYnI7CisgICAgICAgIGlmIChzc2l6ZSA+IG5iICsgVE9QX0ZPT1RfU0laRSkgeworICAgICAgICAgIHRiYXNlID0gYnI7CisgICAgICAgICAgdHNpemUgPSBzc2l6ZTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfQorCisgIGlmICh0YmFzZSAhPSBDTUZBSUwpIHsKKworICAgIGlmICgobS0+Zm9vdHByaW50ICs9IHRzaXplKSA+IG0tPm1heF9mb290cHJpbnQpCisgICAgICBtLT5tYXhfZm9vdHByaW50ID0gbS0+Zm9vdHByaW50OworCisgICAgaWYgKCFpc19pbml0aWFsaXplZChtKSkgeyAvKiBmaXJzdC10aW1lIGluaXRpYWxpemF0aW9uICovCisgICAgICBtLT5zZWcuYmFzZSA9IG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgIG0tPnNlZy5zaXplID0gdHNpemU7CisgICAgICBtLT5zZWcuc2ZsYWdzID0gbW1hcF9mbGFnOworICAgICAgbS0+bWFnaWMgPSBtcGFyYW1zLm1hZ2ljOworICAgICAgaW5pdF9iaW5zKG0pOworICAgICAgaWYgKGlzX2dsb2JhbChtKSkgCisgICAgICAgIGluaXRfdG9wKG0sIChtY2h1bmtwdHIpdGJhc2UsIHRzaXplIC0gVE9QX0ZPT1RfU0laRSk7CisgICAgICBlbHNlIHsKKyAgICAgICAgLyogT2Zmc2V0IHRvcCBieSBlbWJlZGRlZCBtYWxsb2Nfc3RhdGUgKi8KKyAgICAgICAgbWNodW5rcHRyIG1uID0gbmV4dF9jaHVuayhtZW0yY2h1bmsobSkpOworICAgICAgICBpbml0X3RvcChtLCBtbiwgKHNpemVfdCkoKHRiYXNlICsgdHNpemUpIC0gKGNoYXIqKW1uKSAtVE9QX0ZPT1RfU0laRSk7CisgICAgICB9CisgICAgfQorCisgICAgZWxzZSB7CisgICAgICAvKiBUcnkgdG8gbWVyZ2Ugd2l0aCBhbiBleGlzdGluZyBzZWdtZW50ICovCisgICAgICBtc2VnbWVudHB0ciBzcCA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAoc3AgIT0gMCAmJiB0YmFzZSAhPSBzcC0+YmFzZSArIHNwLT5zaXplKQorICAgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKHNwICE9IDAgJiYKKyAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgKHNwLT5zZmxhZ3MgJiBJU19NTUFQUEVEX0JJVCkgPT0gbW1hcF9mbGFnICYmCisgICAgICAgICAgc2VnbWVudF9ob2xkcyhzcCwgbS0+dG9wKSkgeyAvKiBhcHBlbmQgKi8KKyAgICAgICAgc3AtPnNpemUgKz0gdHNpemU7CisgICAgICAgIGluaXRfdG9wKG0sIG0tPnRvcCwgbS0+dG9wc2l6ZSArIHRzaXplKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeworICAgICAgICBpZiAodGJhc2UgPCBtLT5sZWFzdF9hZGRyKQorICAgICAgICAgIG0tPmxlYXN0X2FkZHIgPSB0YmFzZTsKKyAgICAgICAgc3AgPSAmbS0+c2VnOworICAgICAgICB3aGlsZSAoc3AgIT0gMCAmJiBzcC0+YmFzZSAhPSB0YmFzZSArIHRzaXplKQorICAgICAgICAgIHNwID0gc3AtPm5leHQ7CisgICAgICAgIGlmIChzcCAhPSAwICYmCisgICAgICAgICAgICAhaXNfZXh0ZXJuX3NlZ21lbnQoc3ApICYmCisgICAgICAgICAgICAoc3AtPnNmbGFncyAmIElTX01NQVBQRURfQklUKSA9PSBtbWFwX2ZsYWcpIHsKKyAgICAgICAgICBjaGFyKiBvbGRiYXNlID0gc3AtPmJhc2U7CisgICAgICAgICAgc3AtPmJhc2UgPSB0YmFzZTsKKyAgICAgICAgICBzcC0+c2l6ZSArPSB0c2l6ZTsKKyAgICAgICAgICByZXR1cm4gcHJlcGVuZF9hbGxvYyhtLCB0YmFzZSwgb2xkYmFzZSwgbmIpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICBhZGRfc2VnbWVudChtLCB0YmFzZSwgdHNpemUsIG1tYXBfZmxhZyk7CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDwgbS0+dG9wc2l6ZSkgeyAvKiBBbGxvY2F0ZSBmcm9tIG5ldyBvciBleHRlbmRlZCB0b3Agc3BhY2UgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG0tPnRvcHNpemUgLT0gbmI7CisgICAgICBtY2h1bmtwdHIgcCA9IG0tPnRvcDsKKyAgICAgIG1jaHVua3B0ciByID0gbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgcCwgbmIpOworICAgICAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtLCBjaHVuazJtZW0ocCksIG5iKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0ocCk7CisgICAgfQorICB9CisKKyAgTUFMTE9DX0ZBSUxVUkVfQUNUSU9OOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIHN5c3RlbSBkZWFsbG9jYXRpb24gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworLyogVW5tYXAgYW5kIHVubGluayBhbnkgbW1hcHBlZCBzZWdtZW50cyB0aGF0IGRvbid0IGNvbnRhaW4gdXNlZCBjaHVua3MgKi8KK3N0YXRpYyBzaXplX3QgcmVsZWFzZV91bnVzZWRfc2VnbWVudHMobXN0YXRlIG0pIHsKKyAgc2l6ZV90IHJlbGVhc2VkID0gMDsKKyAgbXNlZ21lbnRwdHIgcHJlZCA9ICZtLT5zZWc7CisgIG1zZWdtZW50cHRyIHNwID0gcHJlZC0+bmV4dDsKKyAgd2hpbGUgKHNwICE9IDApIHsKKyAgICBjaGFyKiBiYXNlID0gc3AtPmJhc2U7CisgICAgc2l6ZV90IHNpemUgPSBzcC0+c2l6ZTsKKyAgICBtc2VnbWVudHB0ciBuZXh0ID0gc3AtPm5leHQ7CisgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkgJiYgIWlzX2V4dGVybl9zZWdtZW50KHNwKSkgeworICAgICAgbWNodW5rcHRyIHAgPSBhbGlnbl9hc19jaHVuayhiYXNlKTsKKyAgICAgIHNpemVfdCBwc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgIC8qIENhbiB1bm1hcCBpZiBmaXJzdCBjaHVuayBob2xkcyBlbnRpcmUgc2VnbWVudCBhbmQgbm90IHBpbm5lZCAqLworICAgICAgaWYgKCFjaW51c2UocCkgJiYgKGNoYXIqKXAgKyBwc2l6ZSA+PSBiYXNlICsgc2l6ZSAtIFRPUF9GT09UX1NJWkUpIHsKKyAgICAgICAgdGNodW5rcHRyIHRwID0gKHRjaHVua3B0cilwOworICAgICAgICBhc3NlcnQoc2VnbWVudF9ob2xkcyhzcCwgKGNoYXIqKXNwKSk7CisgICAgICAgIGlmIChwID09IG0tPmR2KSB7CisgICAgICAgICAgbS0+ZHYgPSAwOworICAgICAgICAgIG0tPmR2c2l6ZSA9IDA7CisgICAgICAgIH0KKyAgICAgICAgZWxzZSB7CisgICAgICAgICAgdW5saW5rX2xhcmdlX2NodW5rKG0sIHRwKTsKKyAgICAgICAgfQorICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkgeworICAgICAgICAgIHJlbGVhc2VkICs9IHNpemU7CisgICAgICAgICAgbS0+Zm9vdHByaW50IC09IHNpemU7CisgICAgICAgICAgLyogdW5saW5rIG9ic29sZXRlZCByZWNvcmQgKi8KKyAgICAgICAgICBzcCA9IHByZWQ7CisgICAgICAgICAgc3AtPm5leHQgPSBuZXh0OworICAgICAgICB9CisgICAgICAgIGVsc2UgeyAvKiBiYWNrIG91dCBpZiBjYW5ub3QgdW5tYXAgKi8KKyAgICAgICAgICBpbnNlcnRfbGFyZ2VfY2h1bmsobSwgdHAsIHBzaXplKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBwcmVkID0gc3A7CisgICAgc3AgPSBuZXh0OworICB9CisgIHJldHVybiByZWxlYXNlZDsKK30KKworc3RhdGljIGludCBzeXNfdHJpbShtc3RhdGUgbSwgc2l6ZV90IHBhZCkgeworICBzaXplX3QgcmVsZWFzZWQgPSAwOworICBpZiAocGFkIDwgTUFYX1JFUVVFU1QgJiYgaXNfaW5pdGlhbGl6ZWQobSkpIHsKKyAgICBwYWQgKz0gVE9QX0ZPT1RfU0laRTsgLyogZW5zdXJlIGVub3VnaCByb29tIGZvciBzZWdtZW50IG92ZXJoZWFkICovCisKKyAgICBpZiAobS0+dG9wc2l6ZSA+IHBhZCkgeworICAgICAgLyogU2hyaW5rIHRvcCBzcGFjZSBpbiBncmFudWxhcml0eS1zaXplIHVuaXRzLCBrZWVwaW5nIGF0IGxlYXN0IG9uZSAqLworICAgICAgc2l6ZV90IHVuaXQgPSBtcGFyYW1zLmdyYW51bGFyaXR5OworICAgICAgc2l6ZV90IGV4dHJhID0gKChtLT50b3BzaXplIC0gcGFkICsgKHVuaXQgLSBTSVpFX1RfT05FKSkgLyB1bml0IC0KKyAgICAgICAgICAgICAgICAgICAgICBTSVpFX1RfT05FKSAqIHVuaXQ7CisgICAgICBtc2VnbWVudHB0ciBzcCA9IHNlZ21lbnRfaG9sZGluZyhtLCAoY2hhciopbS0+dG9wKTsKKworICAgICAgaWYgKCFpc19leHRlcm5fc2VnbWVudChzcCkpIHsKKyAgICAgICAgaWYgKGlzX21tYXBwZWRfc2VnbWVudChzcCkpIHsKKyAgICAgICAgICBpZiAoSEFWRV9NTUFQICYmCisgICAgICAgICAgICAgIHNwLT5zaXplID49IGV4dHJhICYmCisgICAgICAgICAgICAgICFoYXNfc2VnbWVudF9saW5rKG0sIHNwKSkgeyAvKiBjYW4ndCBzaHJpbmsgaWYgcGlubmVkICovCisgICAgICAgICAgICBzaXplX3QgbmV3c2l6ZSA9IHNwLT5zaXplIC0gZXh0cmE7CisgICAgICAgICAgICAvKiBQcmVmZXIgbXJlbWFwLCBmYWxsIGJhY2sgdG8gbXVubWFwICovCisgICAgICAgICAgICBpZiAoKENBTExfTVJFTUFQKHNwLT5iYXNlLCBzcC0+c2l6ZSwgbmV3c2l6ZSwgMCkgIT0gTUZBSUwpIHx8CisgICAgICAgICAgICAgICAgKENBTExfTVVOTUFQKHNwLT5iYXNlICsgbmV3c2l6ZSwgZXh0cmEpID09IDApKSB7CisgICAgICAgICAgICAgIHJlbGVhc2VkID0gZXh0cmE7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGVsc2UgaWYgKEhBVkVfTU9SRUNPUkUpIHsKKyAgICAgICAgICBpZiAoZXh0cmEgPj0gSEFMRl9NQVhfU0laRV9UKSAvKiBBdm9pZCB3cmFwcGluZyBuZWdhdGl2ZSAqLworICAgICAgICAgICAgZXh0cmEgPSAoSEFMRl9NQVhfU0laRV9UKSArIFNJWkVfVF9PTkUgLSB1bml0OworICAgICAgICAgIEFDUVVJUkVfTU9SRUNPUkVfTE9DSygpOworICAgICAgICAgIHsKKyAgICAgICAgICAgIC8qIE1ha2Ugc3VyZSBlbmQgb2YgbWVtb3J5IGlzIHdoZXJlIHdlIGxhc3Qgc2V0IGl0LiAqLworICAgICAgICAgICAgY2hhciogb2xkX2JyID0gKGNoYXIqKShDQUxMX01PUkVDT1JFKDApKTsKKyAgICAgICAgICAgIGlmIChvbGRfYnIgPT0gc3AtPmJhc2UgKyBzcC0+c2l6ZSkgeworICAgICAgICAgICAgICBjaGFyKiByZWxfYnIgPSAoY2hhciopKENBTExfTU9SRUNPUkUoLWV4dHJhKSk7CisgICAgICAgICAgICAgIGNoYXIqIG5ld19iciA9IChjaGFyKikoQ0FMTF9NT1JFQ09SRSgwKSk7CisgICAgICAgICAgICAgIGlmIChyZWxfYnIgIT0gQ01GQUlMICYmIG5ld19iciA8IG9sZF9icikKKyAgICAgICAgICAgICAgICByZWxlYXNlZCA9IG9sZF9iciAtIG5ld19icjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgICAgUkVMRUFTRV9NT1JFQ09SRV9MT0NLKCk7CisgICAgICAgIH0KKyAgICAgIH0KKworICAgICAgaWYgKHJlbGVhc2VkICE9IDApIHsKKyAgICAgICAgc3AtPnNpemUgLT0gcmVsZWFzZWQ7CisgICAgICAgIG0tPmZvb3RwcmludCAtPSByZWxlYXNlZDsKKyAgICAgICAgaW5pdF90b3AobSwgbS0+dG9wLCBtLT50b3BzaXplIC0gcmVsZWFzZWQpOworICAgICAgICBjaGVja190b3BfY2h1bmsobSwgbS0+dG9wKTsKKyAgICAgIH0KKyAgICB9CisKKyAgICAvKiBVbm1hcCBhbnkgdW51c2VkIG1tYXBwZWQgc2VnbWVudHMgKi8KKyAgICBpZiAoSEFWRV9NTUFQKSAKKyAgICAgIHJlbGVhc2VkICs9IHJlbGVhc2VfdW51c2VkX3NlZ21lbnRzKG0pOworCisgICAgLyogT24gZmFpbHVyZSwgZGlzYWJsZSBhdXRvdHJpbSB0byBhdm9pZCByZXBlYXRlZCBmYWlsZWQgZnV0dXJlIGNhbGxzICovCisgICAgaWYgKHJlbGVhc2VkID09IDApCisgICAgICBtLT50cmltX2NoZWNrID0gTUFYX1NJWkVfVDsKKyAgfQorCisgIHJldHVybiAocmVsZWFzZWQgIT0gMCk/IDEgOiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIG1hbGxvYyBzdXBwb3J0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKiBhbGxvY2F0ZSBhIGxhcmdlIHJlcXVlc3QgZnJvbSB0aGUgYmVzdCBmaXR0aW5nIGNodW5rIGluIGEgdHJlZWJpbiAqLworc3RhdGljIHZvaWQqIHRtYWxsb2NfbGFyZ2UobXN0YXRlIG0sIHNpemVfdCBuYikgeworICB0Y2h1bmtwdHIgdiA9IDA7CisgIHNpemVfdCByc2l6ZSA9IC1uYjsgLyogVW5zaWduZWQgbmVnYXRpb24gKi8KKyAgdGNodW5rcHRyIHQ7CisgIGJpbmRleF90IGlkeDsKKyAgY29tcHV0ZV90cmVlX2luZGV4KG5iLCBpZHgpOworCisgIGlmICgodCA9ICp0cmVlYmluX2F0KG0sIGlkeCkpICE9IDApIHsKKyAgICAvKiBUcmF2ZXJzZSB0cmVlIGZvciB0aGlzIGJpbiBsb29raW5nIGZvciBub2RlIHdpdGggc2l6ZSA9PSBuYiAqLworICAgIHNpemVfdCBzaXplYml0cyA9IG5iIDw8IGxlZnRzaGlmdF9mb3JfdHJlZV9pbmRleChpZHgpOworICAgIHRjaHVua3B0ciByc3QgPSAwOyAgLyogVGhlIGRlZXBlc3QgdW50YWtlbiByaWdodCBzdWJ0cmVlICovCisgICAgZm9yICg7OykgeworICAgICAgdGNodW5rcHRyIHJ0OworICAgICAgc2l6ZV90IHRyZW0gPSBjaHVua3NpemUodCkgLSBuYjsKKyAgICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgICAgdiA9IHQ7CisgICAgICAgIGlmICgocnNpemUgPSB0cmVtKSA9PSAwKQorICAgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgcnQgPSB0LT5jaGlsZFsxXTsKKyAgICAgIHQgPSB0LT5jaGlsZFsoc2l6ZWJpdHMgPj4gKFNJWkVfVF9CSVRTSVpFLVNJWkVfVF9PTkUpKSAmIDFdOworICAgICAgaWYgKHJ0ICE9IDAgJiYgcnQgIT0gdCkKKyAgICAgICAgcnN0ID0gcnQ7CisgICAgICBpZiAodCA9PSAwKSB7CisgICAgICAgIHQgPSByc3Q7IC8qIHNldCB0IHRvIGxlYXN0IHN1YnRyZWUgaG9sZGluZyBzaXplcyA+IG5iICovCisgICAgICAgIGJyZWFrOworICAgICAgfQorICAgICAgc2l6ZWJpdHMgPDw9IDE7CisgICAgfQorICB9CisKKyAgaWYgKHQgPT0gMCAmJiB2ID09IDApIHsgLyogc2V0IHQgdG8gcm9vdCBvZiBuZXh0IG5vbi1lbXB0eSB0cmVlYmluICovCisgICAgYmlubWFwX3QgbGVmdGJpdHMgPSBsZWZ0X2JpdHMoaWR4MmJpdChpZHgpKSAmIG0tPnRyZWVtYXA7CisgICAgaWYgKGxlZnRiaXRzICE9IDApIHsKKyAgICAgIGJpbmRleF90IGk7CisgICAgICBiaW5tYXBfdCBsZWFzdGJpdCA9IGxlYXN0X2JpdChsZWZ0Yml0cyk7CisgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgdCA9ICp0cmVlYmluX2F0KG0sIGkpOworICAgIH0KKyAgfQorCisgIHdoaWxlICh0ICE9IDApIHsgLyogZmluZCBzbWFsbGVzdCBvZiB0cmVlIG9yIHN1YnRyZWUgKi8KKyAgICBzaXplX3QgdHJlbSA9IGNodW5rc2l6ZSh0KSAtIG5iOworICAgIGlmICh0cmVtIDwgcnNpemUpIHsKKyAgICAgIHJzaXplID0gdHJlbTsKKyAgICAgIHYgPSB0OworICAgIH0KKyAgICB0ID0gbGVmdG1vc3RfY2hpbGQodCk7CisgIH0KKworICAvKiAgSWYgZHYgaXMgYSBiZXR0ZXIgZml0LCByZXR1cm4gMCBzbyBtYWxsb2Mgd2lsbCB1c2UgaXQgKi8KKyAgaWYgKHYgIT0gMCAmJiByc2l6ZSA8IChzaXplX3QpKG0tPmR2c2l6ZSAtIG5iKSkgeworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgdikpKSB7IC8qIHNwbGl0ICovCisgICAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICAgIGFzc2VydChjaHVua3NpemUodikgPT0gcnNpemUgKyBuYik7CisgICAgICBpZiAoUlRDSEVDSyhva19uZXh0KHYsIHIpKSkgeworICAgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICAgIGlmIChyc2l6ZSA8IE1JTl9DSFVOS19TSVpFKQorICAgICAgICAgIHNldF9pbnVzZV9hbmRfcGludXNlKG0sIHYsIChyc2l6ZSArIG5iKSk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobSwgdiwgbmIpOworICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKG0sIHIsIHJzaXplKTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgICAgfQorICAgIH0KKyAgICBDT1JSVVBUSU9OX0VSUk9SX0FDVElPTihtKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworLyogYWxsb2NhdGUgYSBzbWFsbCByZXF1ZXN0IGZyb20gdGhlIGJlc3QgZml0dGluZyBjaHVuayBpbiBhIHRyZWViaW4gKi8KK3N0YXRpYyB2b2lkKiB0bWFsbG9jX3NtYWxsKG1zdGF0ZSBtLCBzaXplX3QgbmIpIHsKKyAgdGNodW5rcHRyIHQsIHY7CisgIHNpemVfdCByc2l6ZTsKKyAgYmluZGV4X3QgaTsKKyAgYmlubWFwX3QgbGVhc3RiaXQgPSBsZWFzdF9iaXQobS0+dHJlZW1hcCk7CisgIGNvbXB1dGVfYml0MmlkeChsZWFzdGJpdCwgaSk7CisKKyAgdiA9IHQgPSAqdHJlZWJpbl9hdChtLCBpKTsKKyAgcnNpemUgPSBjaHVua3NpemUodCkgLSBuYjsKKworICB3aGlsZSAoKHQgPSBsZWZ0bW9zdF9jaGlsZCh0KSkgIT0gMCkgeworICAgIHNpemVfdCB0cmVtID0gY2h1bmtzaXplKHQpIC0gbmI7CisgICAgaWYgKHRyZW0gPCByc2l6ZSkgeworICAgICAgcnNpemUgPSB0cmVtOworICAgICAgdiA9IHQ7CisgICAgfQorICB9CisKKyAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhtLCB2KSkpIHsKKyAgICBtY2h1bmtwdHIgciA9IGNodW5rX3BsdXNfb2Zmc2V0KHYsIG5iKTsKKyAgICBhc3NlcnQoY2h1bmtzaXplKHYpID09IHJzaXplICsgbmIpOworICAgIGlmIChSVENIRUNLKG9rX25leHQodiwgcikpKSB7CisgICAgICB1bmxpbmtfbGFyZ2VfY2h1bmsobSwgdik7CisgICAgICBpZiAocnNpemUgPCBNSU5fQ0hVTktfU0laRSkKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobSwgdiwgKHJzaXplICsgbmIpKTsKKyAgICAgIGVsc2UgeworICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHYsIG5iKTsKKyAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgcmVwbGFjZV9kdihtLCByLCByc2l6ZSk7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHYpOworICAgIH0KKyAgfQorCisgIENPUlJVUFRJT05fRVJST1JfQUNUSU9OKG0pOworICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHJlYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqIGludGVybmFsX3JlYWxsb2MobXN0YXRlIG0sIHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChieXRlcyA+PSBNQVhfUkVRVUVTVCkgeworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIG1jaHVua3B0ciBvbGRwID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgc2l6ZV90IG9sZHNpemUgPSBjaHVua3NpemUob2xkcCk7CisgICAgbWNodW5rcHRyIG5leHQgPSBjaHVua19wbHVzX29mZnNldChvbGRwLCBvbGRzaXplKTsKKyAgICBtY2h1bmtwdHIgbmV3cCA9IDA7CisgICAgdm9pZCogZXh0cmEgPSAwOworCisgICAgLyogVHJ5IHRvIGVpdGhlciBzaHJpbmsgb3IgZXh0ZW5kIGludG8gdG9wLiBFbHNlIG1hbGxvYy1jb3B5LWZyZWUgKi8KKworICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MobSwgb2xkcCkgJiYgb2tfY2ludXNlKG9sZHApICYmCisgICAgICAgICAgICAgICAgb2tfbmV4dChvbGRwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICBzaXplX3QgbmIgPSByZXF1ZXN0MnNpemUoYnl0ZXMpOworICAgICAgaWYgKGlzX21tYXBwZWQob2xkcCkpCisgICAgICAgIG5ld3AgPSBtbWFwX3Jlc2l6ZShtLCBvbGRwLCBuYik7CisgICAgICBlbHNlIGlmIChvbGRzaXplID49IG5iKSB7IC8qIGFscmVhZHkgYmlnIGVub3VnaCAqLworICAgICAgICBzaXplX3QgcnNpemUgPSBvbGRzaXplIC0gbmI7CisgICAgICAgIG5ld3AgPSBvbGRwOworICAgICAgICBpZiAocnNpemUgPj0gTUlOX0NIVU5LX1NJWkUpIHsKKyAgICAgICAgICBtY2h1bmtwdHIgcmVtYWluZGVyID0gY2h1bmtfcGx1c19vZmZzZXQobmV3cCwgbmIpOworICAgICAgICAgIHNldF9pbnVzZShtLCBuZXdwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHJlbWFpbmRlciwgcnNpemUpOworICAgICAgICAgIGV4dHJhID0gY2h1bmsybWVtKHJlbWFpbmRlcik7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIGVsc2UgaWYgKG5leHQgPT0gbS0+dG9wICYmIG9sZHNpemUgKyBtLT50b3BzaXplID4gbmIpIHsKKyAgICAgICAgLyogRXhwYW5kIGludG8gdG9wICovCisgICAgICAgIHNpemVfdCBuZXdzaXplID0gb2xkc2l6ZSArIG0tPnRvcHNpemU7CisgICAgICAgIHNpemVfdCBuZXd0b3BzaXplID0gbmV3c2l6ZSAtIG5iOworICAgICAgICBtY2h1bmtwdHIgbmV3dG9wID0gY2h1bmtfcGx1c19vZmZzZXQob2xkcCwgbmIpOworICAgICAgICBzZXRfaW51c2UobSwgb2xkcCwgbmIpOworICAgICAgICBuZXd0b3AtPmhlYWQgPSBuZXd0b3BzaXplIHxQSU5VU0VfQklUOworICAgICAgICBtLT50b3AgPSBuZXd0b3A7CisgICAgICAgIG0tPnRvcHNpemUgPSBuZXd0b3BzaXplOworICAgICAgICBuZXdwID0gb2xkcDsKKyAgICAgIH0KKyAgICB9CisgICAgZWxzZSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSwgb2xkbWVtKTsKKyAgICAgIFBPU1RBQ1RJT04obSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBQT1NUQUNUSU9OKG0pOworCisgICAgaWYgKG5ld3AgIT0gMCkgeworICAgICAgaWYgKGV4dHJhICE9IDApIHsKKyAgICAgICAgaW50ZXJuYWxfZnJlZShtLCBleHRyYSk7CisgICAgICB9CisgICAgICBjaGVja19pbnVzZV9jaHVuayhtLCBuZXdwKTsKKyAgICAgIHJldHVybiBjaHVuazJtZW0obmV3cCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgdm9pZCogbmV3bWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgICAgIGlmIChuZXdtZW0gIT0gMCkgeworICAgICAgICBzaXplX3Qgb2MgPSBvbGRzaXplIC0gb3ZlcmhlYWRfZm9yKG9sZHApOworICAgICAgICBtZW1jcHkobmV3bWVtLCBvbGRtZW0sIChvYyA8IGJ5dGVzKT8gb2MgOiBieXRlcyk7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgb2xkbWVtKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBuZXdtZW07CisgICAgfQorICB9CisgIHJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gbWVtYWxpZ24gc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgdm9pZCogaW50ZXJuYWxfbWVtYWxpZ24obXN0YXRlIG0sIHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykgeworICBpZiAoYWxpZ25tZW50IDw9IE1BTExPQ19BTElHTk1FTlQpICAgIC8qIENhbiBqdXN0IHVzZSBtYWxsb2MgKi8KKyAgICByZXR1cm4gaW50ZXJuYWxfbWFsbG9jKG0sIGJ5dGVzKTsKKyAgaWYgKGFsaWdubWVudCA8ICBNSU5fQ0hVTktfU0laRSkgLyogbXVzdCBiZSBhdCBsZWFzdCBhIG1pbmltdW0gY2h1bmsgc2l6ZSAqLworICAgIGFsaWdubWVudCA9IE1JTl9DSFVOS19TSVpFOworICBpZiAoKGFsaWdubWVudCAmIChhbGlnbm1lbnQtU0laRV9UX09ORSkpICE9IDApIHsvKiBFbnN1cmUgYSBwb3dlciBvZiAyICovCisgICAgc2l6ZV90IGEgPSBNQUxMT0NfQUxJR05NRU5UIDw8IDE7CisgICAgd2hpbGUgKGEgPCBhbGlnbm1lbnQpIGEgPDw9IDE7CisgICAgYWxpZ25tZW50ID0gYTsKKyAgfQorICAKKyAgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUIC0gYWxpZ25tZW50KSB7CisgICAgaWYgKG0gIT0gMCkgIHsgLyogVGVzdCBpc24ndCBuZWVkZWQgYnV0IGF2b2lkcyBjb21waWxlciB3YXJuaW5nICovCisgICAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgfQorICB9CisgIGVsc2UgeworICAgIHNpemVfdCBuYiA9IHJlcXVlc3Qyc2l6ZShieXRlcyk7CisgICAgc2l6ZV90IHJlcSA9IG5iICsgYWxpZ25tZW50ICsgTUlOX0NIVU5LX1NJWkUgLSBDSFVOS19PVkVSSEVBRDsKKyAgICBjaGFyKiBtZW0gPSAoY2hhciopaW50ZXJuYWxfbWFsbG9jKG0sIHJlcSk7CisgICAgaWYgKG1lbSAhPSAwKSB7CisgICAgICB2b2lkKiBsZWFkZXIgPSAwOworICAgICAgdm9pZCogdHJhaWxlciA9IDA7CisgICAgICBtY2h1bmtwdHIgcCA9IG1lbTJjaHVuayhtZW0pOworCisgICAgICBpZiAoUFJFQUNUSU9OKG0pKSByZXR1cm4gMDsKKyAgICAgIGlmICgoKChzaXplX3QpKG1lbSkpICUgYWxpZ25tZW50KSAhPSAwKSB7IC8qIG1pc2FsaWduZWQgKi8KKyAgICAgICAgLyoKKyAgICAgICAgICBGaW5kIGFuIGFsaWduZWQgc3BvdCBpbnNpZGUgY2h1bmsuICBTaW5jZSB3ZSBuZWVkIHRvIGdpdmUKKyAgICAgICAgICBiYWNrIGxlYWRpbmcgc3BhY2UgaW4gYSBjaHVuayBvZiBhdCBsZWFzdCBNSU5fQ0hVTktfU0laRSwgaWYKKyAgICAgICAgICB0aGUgZmlyc3QgY2FsY3VsYXRpb24gcGxhY2VzIHVzIGF0IGEgc3BvdCB3aXRoIGxlc3MgdGhhbgorICAgICAgICAgIE1JTl9DSFVOS19TSVpFIGxlYWRlciwgd2UgY2FuIG1vdmUgdG8gdGhlIG5leHQgYWxpZ25lZCBzcG90LgorICAgICAgICAgIFdlJ3ZlIGFsbG9jYXRlZCBlbm91Z2ggdG90YWwgcm9vbSBzbyB0aGF0IHRoaXMgaXMgYWx3YXlzCisgICAgICAgICAgcG9zc2libGUuCisgICAgICAgICovCisgICAgICAgIGNoYXIqIGJyID0gKGNoYXIqKW1lbTJjaHVuaygoc2l6ZV90KSgoKHNpemVfdCkobWVtICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGlnbm1lbnQgLQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNJWkVfVF9PTkUpKSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtYWxpZ25tZW50KSk7CisgICAgICAgIGNoYXIqIHBvcyA9ICgoc2l6ZV90KShiciAtIChjaGFyKikocCkpID49IE1JTl9DSFVOS19TSVpFKT8KKyAgICAgICAgICBiciA6IGJyK2FsaWdubWVudDsKKyAgICAgICAgbWNodW5rcHRyIG5ld3AgPSAobWNodW5rcHRyKXBvczsKKyAgICAgICAgc2l6ZV90IGxlYWRzaXplID0gcG9zIC0gKGNoYXIqKShwKTsKKyAgICAgICAgc2l6ZV90IG5ld3NpemUgPSBjaHVua3NpemUocCkgLSBsZWFkc2l6ZTsKKworICAgICAgICBpZiAoaXNfbW1hcHBlZChwKSkgeyAvKiBGb3IgbW1hcHBlZCBjaHVua3MsIGp1c3QgYWRqdXN0IG9mZnNldCAqLworICAgICAgICAgIG5ld3AtPnByZXZfZm9vdCA9IHAtPnByZXZfZm9vdCArIGxlYWRzaXplOworICAgICAgICAgIG5ld3AtPmhlYWQgPSAobmV3c2l6ZXxDSU5VU0VfQklUKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIHsgLyogT3RoZXJ3aXNlLCBnaXZlIGJhY2sgbGVhZGVyLCB1c2UgdGhlIHJlc3QgKi8KKyAgICAgICAgICBzZXRfaW51c2UobSwgbmV3cCwgbmV3c2l6ZSk7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIGxlYWRzaXplKTsKKyAgICAgICAgICBsZWFkZXIgPSBjaHVuazJtZW0ocCk7CisgICAgICAgIH0KKyAgICAgICAgcCA9IG5ld3A7CisgICAgICB9CisKKyAgICAgIC8qIEdpdmUgYmFjayBzcGFyZSByb29tIGF0IHRoZSBlbmQgKi8KKyAgICAgIGlmICghaXNfbW1hcHBlZChwKSkgeworICAgICAgICBzaXplX3Qgc2l6ZSA9IGNodW5rc2l6ZShwKTsKKyAgICAgICAgaWYgKHNpemUgPiBuYiArIE1JTl9DSFVOS19TSVpFKSB7CisgICAgICAgICAgc2l6ZV90IHJlbWFpbmRlcl9zaXplID0gc2l6ZSAtIG5iOworICAgICAgICAgIG1jaHVua3B0ciByZW1haW5kZXIgPSBjaHVua19wbHVzX29mZnNldChwLCBuYik7CisgICAgICAgICAgc2V0X2ludXNlKG0sIHAsIG5iKTsKKyAgICAgICAgICBzZXRfaW51c2UobSwgcmVtYWluZGVyLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICAgICAgdHJhaWxlciA9IGNodW5rMm1lbShyZW1haW5kZXIpOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIGFzc2VydCAoY2h1bmtzaXplKHApID49IG5iKTsKKyAgICAgIGFzc2VydCgoKChzaXplX3QpKGNodW5rMm1lbShwKSkpICUgYWxpZ25tZW50KSA9PSAwKTsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIHApOworICAgICAgUE9TVEFDVElPTihtKTsKKyAgICAgIGlmIChsZWFkZXIgIT0gMCkgeworICAgICAgICBpbnRlcm5hbF9mcmVlKG0sIGxlYWRlcik7CisgICAgICB9CisgICAgICBpZiAodHJhaWxlciAhPSAwKSB7CisgICAgICAgIGludGVybmFsX2ZyZWUobSwgdHJhaWxlcik7CisgICAgICB9CisgICAgICByZXR1cm4gY2h1bmsybWVtKHApOworICAgIH0KKyAgfQorICByZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIGNvbWFsbG9jL2NvYWxsb2Mgc3VwcG9ydCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQqKiBpYWxsb2MobXN0YXRlIG0sCisgICAgICAgICAgICAgICAgICAgICBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgIHNpemVfdCogc2l6ZXMsCisgICAgICAgICAgICAgICAgICAgICBpbnQgb3B0cywKKyAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIC8qCisgICAgVGhpcyBwcm92aWRlcyBjb21tb24gc3VwcG9ydCBmb3IgaW5kZXBlbmRlbnRfWCByb3V0aW5lcywgaGFuZGxpbmcKKyAgICBhbGwgb2YgdGhlIGNvbWJpbmF0aW9ucyB0aGF0IGNhbiByZXN1bHQuCisKKyAgICBUaGUgb3B0cyBhcmcgaGFzOgorICAgIGJpdCAwIHNldCBpZiBhbGwgZWxlbWVudHMgYXJlIHNhbWUgc2l6ZSAodXNpbmcgc2l6ZXNbMF0pCisgICAgYml0IDEgc2V0IGlmIGVsZW1lbnRzIHNob3VsZCBiZSB6ZXJvZWQKKyAgKi8KKworICBzaXplX3QgICAgZWxlbWVudF9zaXplOyAgIC8qIGNodW5rc2l6ZSBvZiBlYWNoIGVsZW1lbnQsIGlmIGFsbCBzYW1lICovCisgIHNpemVfdCAgICBjb250ZW50c19zaXplOyAgLyogdG90YWwgc2l6ZSBvZiBlbGVtZW50cyAqLworICBzaXplX3QgICAgYXJyYXlfc2l6ZTsgICAgIC8qIHJlcXVlc3Qgc2l6ZSBvZiBwb2ludGVyIGFycmF5ICovCisgIHZvaWQqICAgICBtZW07ICAgICAgICAgICAgLyogbWFsbG9jZWQgYWdncmVnYXRlIHNwYWNlICovCisgIG1jaHVua3B0ciBwOyAgICAgICAgICAgICAgLyogY29ycmVzcG9uZGluZyBjaHVuayAqLworICBzaXplX3QgICAgcmVtYWluZGVyX3NpemU7IC8qIHJlbWFpbmluZyBieXRlcyB3aGlsZSBzcGxpdHRpbmcgKi8KKyAgdm9pZCoqICAgIG1hcnJheTsgICAgICAgICAvKiBlaXRoZXIgImNodW5rcyIgb3IgbWFsbG9jZWQgcHRyIGFycmF5ICovCisgIG1jaHVua3B0ciBhcnJheV9jaHVuazsgICAgLyogY2h1bmsgZm9yIG1hbGxvY2VkIHB0ciBhcnJheSAqLworICBmbGFnX3QgICAgd2FzX2VuYWJsZWQ7ICAgIC8qIHRvIGRpc2FibGUgbW1hcCAqLworICBzaXplX3QgICAgc2l6ZTsKKyAgc2l6ZV90ICAgIGk7CisKKyAgLyogY29tcHV0ZSBhcnJheSBsZW5ndGgsIGlmIG5lZWRlZCAqLworICBpZiAoY2h1bmtzICE9IDApIHsKKyAgICBpZiAobl9lbGVtZW50cyA9PSAwKQorICAgICAgcmV0dXJuIGNodW5rczsgLyogbm90aGluZyB0byBkbyAqLworICAgIG1hcnJheSA9IGNodW5rczsKKyAgICBhcnJheV9zaXplID0gMDsKKyAgfQorICBlbHNlIHsKKyAgICAvKiBpZiBlbXB0eSByZXEsIG11c3Qgc3RpbGwgcmV0dXJuIGNodW5rIHJlcHJlc2VudGluZyBlbXB0eSBhcnJheSAqLworICAgIGlmIChuX2VsZW1lbnRzID09IDApCisgICAgICByZXR1cm4gKHZvaWQqKilpbnRlcm5hbF9tYWxsb2MobSwgMCk7CisgICAgbWFycmF5ID0gMDsKKyAgICBhcnJheV9zaXplID0gcmVxdWVzdDJzaXplKG5fZWxlbWVudHMgKiAoc2l6ZW9mKHZvaWQqKSkpOworICB9CisKKyAgLyogY29tcHV0ZSB0b3RhbCBlbGVtZW50IHNpemUgKi8KKyAgaWYgKG9wdHMgJiAweDEpIHsgLyogYWxsLXNhbWUtc2l6ZSAqLworICAgIGVsZW1lbnRfc2l6ZSA9IHJlcXVlc3Qyc2l6ZSgqc2l6ZXMpOworICAgIGNvbnRlbnRzX3NpemUgPSBuX2VsZW1lbnRzICogZWxlbWVudF9zaXplOworICB9CisgIGVsc2UgeyAvKiBhZGQgdXAgYWxsIHRoZSBzaXplcyAqLworICAgIGVsZW1lbnRfc2l6ZSA9IDA7CisgICAgY29udGVudHNfc2l6ZSA9IDA7CisgICAgZm9yIChpID0gMDsgaSAhPSBuX2VsZW1lbnRzOyArK2kpCisgICAgICBjb250ZW50c19zaXplICs9IHJlcXVlc3Qyc2l6ZShzaXplc1tpXSk7CisgIH0KKworICBzaXplID0gY29udGVudHNfc2l6ZSArIGFycmF5X3NpemU7CisKKyAgLyoKKyAgICAgQWxsb2NhdGUgdGhlIGFnZ3JlZ2F0ZSBjaHVuay4gIEZpcnN0IGRpc2FibGUgZGlyZWN0LW1tYXBwaW5nIHNvCisgICAgIG1hbGxvYyB3b24ndCB1c2UgaXQsIHNpbmNlIHdlIHdvdWxkIG5vdCBiZSBhYmxlIHRvIGxhdGVyCisgICAgIGZyZWUvcmVhbGxvYyBzcGFjZSBpbnRlcm5hbCB0byBhIHNlZ3JlZ2F0ZWQgbW1hcCByZWdpb24uCisgICovCisgIHdhc19lbmFibGVkID0gdXNlX21tYXAobSk7CisgIGRpc2FibGVfbW1hcChtKTsKKyAgbWVtID0gaW50ZXJuYWxfbWFsbG9jKG0sIHNpemUgLSBDSFVOS19PVkVSSEVBRCk7CisgIGlmICh3YXNfZW5hYmxlZCkKKyAgICBlbmFibGVfbW1hcChtKTsKKyAgaWYgKG1lbSA9PSAwKQorICAgIHJldHVybiAwOworCisgIGlmIChQUkVBQ1RJT04obSkpIHJldHVybiAwOworICBwID0gbWVtMmNodW5rKG1lbSk7CisgIHJlbWFpbmRlcl9zaXplID0gY2h1bmtzaXplKHApOworCisgIGFzc2VydCghaXNfbW1hcHBlZChwKSk7CisKKyAgaWYgKG9wdHMgJiAweDIpIHsgICAgICAgLyogb3B0aW9uYWxseSBjbGVhciB0aGUgZWxlbWVudHMgKi8KKyAgICBtZW1zZXQoKHNpemVfdCopbWVtLCAwLCByZW1haW5kZXJfc2l6ZSAtIFNJWkVfVF9TSVpFIC0gYXJyYXlfc2l6ZSk7CisgIH0KKworICAvKiBJZiBub3QgcHJvdmlkZWQsIGFsbG9jYXRlIHRoZSBwb2ludGVyIGFycmF5IGFzIGZpbmFsIHBhcnQgb2YgY2h1bmsgKi8KKyAgaWYgKG1hcnJheSA9PSAwKSB7CisgICAgc2l6ZV90ICBhcnJheV9jaHVua19zaXplOworICAgIGFycmF5X2NodW5rID0gY2h1bmtfcGx1c19vZmZzZXQocCwgY29udGVudHNfc2l6ZSk7CisgICAgYXJyYXlfY2h1bmtfc2l6ZSA9IHJlbWFpbmRlcl9zaXplIC0gY29udGVudHNfc2l6ZTsKKyAgICBtYXJyYXkgPSAodm9pZCoqKSAoY2h1bmsybWVtKGFycmF5X2NodW5rKSk7CisgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBhcnJheV9jaHVuaywgYXJyYXlfY2h1bmtfc2l6ZSk7CisgICAgcmVtYWluZGVyX3NpemUgPSBjb250ZW50c19zaXplOworICB9CisKKyAgLyogc3BsaXQgb3V0IGVsZW1lbnRzICovCisgIGZvciAoaSA9IDA7IDsgKytpKSB7CisgICAgbWFycmF5W2ldID0gY2h1bmsybWVtKHApOworICAgIGlmIChpICE9IG5fZWxlbWVudHMtMSkgeworICAgICAgaWYgKGVsZW1lbnRfc2l6ZSAhPSAwKQorICAgICAgICBzaXplID0gZWxlbWVudF9zaXplOworICAgICAgZWxzZQorICAgICAgICBzaXplID0gcmVxdWVzdDJzaXplKHNpemVzW2ldKTsKKyAgICAgIHJlbWFpbmRlcl9zaXplIC09IHNpemU7CisgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG0sIHAsIHNpemUpOworICAgICAgcCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHNpemUpOworICAgIH0KKyAgICBlbHNlIHsgLyogdGhlIGZpbmFsIGVsZW1lbnQgYWJzb3JicyBhbnkgb3ZlcmFsbG9jYXRpb24gc2xvcCAqLworICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9pbnVzZV9jaHVuayhtLCBwLCByZW1haW5kZXJfc2l6ZSk7CisgICAgICBicmVhazsKKyAgICB9CisgIH0KKworI2lmIERFQlVHCisgIGlmIChtYXJyYXkgIT0gY2h1bmtzKSB7CisgICAgLyogZmluYWwgZWxlbWVudCBtdXN0IGhhdmUgZXhhY3RseSBleGhhdXN0ZWQgY2h1bmsgKi8KKyAgICBpZiAoZWxlbWVudF9zaXplICE9IDApIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSBlbGVtZW50X3NpemUpOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIGFzc2VydChyZW1haW5kZXJfc2l6ZSA9PSByZXF1ZXN0MnNpemUoc2l6ZXNbaV0pKTsKKyAgICB9CisgICAgY2hlY2tfaW51c2VfY2h1bmsobSwgbWVtMmNodW5rKG1hcnJheSkpOworICB9CisgIGZvciAoaSA9IDA7IGkgIT0gbl9lbGVtZW50czsgKytpKQorICAgIGNoZWNrX2ludXNlX2NodW5rKG0sIG1lbTJjaHVuayhtYXJyYXlbaV0pKTsKKworI2VuZGlmIC8qIERFQlVHICovCisKKyAgUE9TVEFDVElPTihtKTsKKyAgcmV0dXJuIG1hcnJheTsKK30KKworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBwdWJsaWMgcm91dGluZXMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjaWYgIU9OTFlfTVNQQUNFUworCit2b2lkKiBkbG1hbGxvYyhzaXplX3QgYnl0ZXMpIHsKKyAgLyoKKyAgICAgQmFzaWMgYWxnb3JpdGhtOgorICAgICBJZiBhIHNtYWxsIHJlcXVlc3QgKDwgMjU2IGJ5dGVzIG1pbnVzIHBlci1jaHVuayBvdmVyaGVhZCk6CisgICAgICAgMS4gSWYgb25lIGV4aXN0cywgdXNlIGEgcmVtYWluZGVybGVzcyBjaHVuayBpbiBhc3NvY2lhdGVkIHNtYWxsYmluLgorICAgICAgICAgIChSZW1haW5kZXJsZXNzIG1lYW5zIHRoYXQgdGhlcmUgYXJlIHRvbyBmZXcgZXhjZXNzIGJ5dGVzIHRvCisgICAgICAgICAgcmVwcmVzZW50IGFzIGEgY2h1bmsuKQorICAgICAgIDIuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgZHYgY2h1bmssIHdoaWNoIGlzIG5vcm1hbGx5IHRoZQorICAgICAgICAgIGNodW5rIGFkamFjZW50IHRvIHRoZSBvbmUgdXNlZCBmb3IgdGhlIG1vc3QgcmVjZW50IHNtYWxsIHJlcXVlc3QuCisgICAgICAgMy4gSWYgb25lIGV4aXN0cywgc3BsaXQgdGhlIHNtYWxsZXN0IGF2YWlsYWJsZSBjaHVuayBpbiBhIGJpbiwKKyAgICAgICAgICBzYXZpbmcgcmVtYWluZGVyIGluIGR2LgorICAgICAgIDQuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDUuIElmIGF2YWlsYWJsZSwgZ2V0IG1lbW9yeSBmcm9tIHN5c3RlbSBhbmQgdXNlIGl0CisgICAgIE90aGVyd2lzZSwgZm9yIGEgbGFyZ2UgcmVxdWVzdDoKKyAgICAgICAxLiBGaW5kIHRoZSBzbWFsbGVzdCBhdmFpbGFibGUgYmlubmVkIGNodW5rIHRoYXQgZml0cywgYW5kIHVzZSBpdAorICAgICAgICAgIGlmIGl0IGlzIGJldHRlciBmaXR0aW5nIHRoYW4gZHYgY2h1bmssIHNwbGl0dGluZyBpZiBuZWNlc3NhcnkuCisgICAgICAgMi4gSWYgYmV0dGVyIGZpdHRpbmcgdGhhbiBhbnkgYmlubmVkIGNodW5rLCB1c2UgdGhlIGR2IGNodW5rLgorICAgICAgIDMuIElmIGl0IGlzIGJpZyBlbm91Z2gsIHVzZSB0aGUgdG9wIGNodW5rLgorICAgICAgIDQuIElmIHJlcXVlc3Qgc2l6ZSA+PSBtbWFwIHRocmVzaG9sZCwgdHJ5IHRvIGRpcmVjdGx5IG1tYXAgdGhpcyBjaHVuay4KKyAgICAgICA1LiBJZiBhdmFpbGFibGUsIGdldCBtZW1vcnkgZnJvbSBzeXN0ZW0gYW5kIHVzZSBpdAorCisgICAgIFRoZSB1Z2x5IGdvdG8ncyBoZXJlIGVuc3VyZSB0aGF0IHBvc3RhY3Rpb24gb2NjdXJzIGFsb25nIGFsbCBwYXRocy4KKyAgKi8KKworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gZ20tPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhnbSwgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gZ20tPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChnbSwgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKGdtLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShnbSwgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKGdtLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYoZ20sIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKGdtLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChnbS0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKGdtLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsoZ20sIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IGdtLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gZ20tPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gZ20tPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBnbS0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBnbS0+ZHZzaXplOworICAgICAgICBnbS0+ZHZzaXplID0gMDsKKyAgICAgICAgZ20tPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UoZ20sIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBnbS0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IGdtLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBnbS0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBnbS0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsoZ20sIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhnbSwgZ20tPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhnbSwgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKGdtLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgZGxmcmVlKHZvaWQqIG1lbSkgeworICAvKgorICAgICBDb25zb2xpZGF0ZSBmcmVlZCBjaHVua3Mgd2l0aCBwcmVjZWVkaW5nIG9yIHN1Y2NlZWRpbmcgYm9yZGVyaW5nCisgICAgIGZyZWUgY2h1bmtzLCBpZiB0aGV5IGV4aXN0LCBhbmQgdGhlbiBwbGFjZSBpbiBhIGJpbi4gIEludGVybWl4ZWQKKyAgICAgd2l0aCBzcGVjaWFsIGNhc2VzIGZvciB0b3AsIGR2LCBtbWFwcGVkIGNodW5rcywgYW5kIHVzYWdlIGVycm9ycy4KKyAgKi8KKworICBpZiAobWVtICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCAgPSBtZW0yY2h1bmsobWVtKTsKKyNpZiBGT09URVJTCisgICAgbXN0YXRlIGZtID0gZ2V0X21zdGF0ZV9mb3IocCk7CisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorI2Vsc2UgLyogRk9PVEVSUyAqLworI2RlZmluZSBmbSBnbQorI2VuZGlmIC8qIEZPT1RFUlMgKi8KKyAgICBpZiAoIVBSRUFDVElPTihmbSkpIHsKKyAgICAgIGNoZWNrX2ludXNlX2NodW5rKGZtLCBwKTsKKyAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHApICYmIG9rX2NpbnVzZShwKSkpIHsKKyAgICAgICAgc2l6ZV90IHBzaXplID0gY2h1bmtzaXplKHApOworICAgICAgICBtY2h1bmtwdHIgbmV4dCA9IGNodW5rX3BsdXNfb2Zmc2V0KHAsIHBzaXplKTsKKyAgICAgICAgaWYgKCFwaW51c2UocCkpIHsKKyAgICAgICAgICBzaXplX3QgcHJldnNpemUgPSBwLT5wcmV2X2Zvb3Q7CisgICAgICAgICAgaWYgKChwcmV2c2l6ZSAmIElTX01NQVBQRURfQklUKSAhPSAwKSB7CisgICAgICAgICAgICBwcmV2c2l6ZSAmPSB+SVNfTU1BUFBFRF9CSVQ7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZSArIE1NQVBfRk9PVF9QQUQ7CisgICAgICAgICAgICBpZiAoQ0FMTF9NVU5NQVAoKGNoYXIqKXAgLSBwcmV2c2l6ZSwgcHNpemUpID09IDApCisgICAgICAgICAgICAgIGZtLT5mb290cHJpbnQgLT0gcHNpemU7CisgICAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgbWNodW5rcHRyIHByZXYgPSBjaHVua19taW51c19vZmZzZXQocCwgcHJldnNpemUpOworICAgICAgICAgICAgcHNpemUgKz0gcHJldnNpemU7CisgICAgICAgICAgICBwID0gcHJldjsKKyAgICAgICAgICAgIGlmIChSVENIRUNLKG9rX2FkZHJlc3MoZm0sIHByZXYpKSkgeyAvKiBjb25zb2xpZGF0ZSBiYWNrd2FyZCAqLworICAgICAgICAgICAgICBpZiAocCAhPSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIHAsIHByZXZzaXplKTsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBlbHNlIGlmICgobmV4dC0+aGVhZCAmIElOVVNFX0JJVFMpID09IElOVVNFX0JJVFMpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgc2V0X2ZyZWVfd2l0aF9waW51c2UocCwgcHNpemUsIG5leHQpOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICBnb3RvIGVycm9yYWN0aW9uOworICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChSVENIRUNLKG9rX25leHQocCwgbmV4dCkgJiYgb2tfcGludXNlKG5leHQpKSkgeworICAgICAgICAgIGlmICghY2ludXNlKG5leHQpKSB7ICAvKiBjb25zb2xpZGF0ZSBmb3J3YXJkICovCisgICAgICAgICAgICBpZiAobmV4dCA9PSBmbS0+dG9wKSB7CisgICAgICAgICAgICAgIHNpemVfdCB0c2l6ZSA9IGZtLT50b3BzaXplICs9IHBzaXplOworICAgICAgICAgICAgICBmbS0+dG9wID0gcDsKKyAgICAgICAgICAgICAgcC0+aGVhZCA9IHRzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2ID0gMDsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gMDsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBpZiAoc2hvdWxkX3RyaW0oZm0sIHRzaXplKSkKKyAgICAgICAgICAgICAgICBzeXNfdHJpbShmbSwgMCk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKG5leHQgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgIHNpemVfdCBkc2l6ZSA9IGZtLT5kdnNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT5kdiA9IHA7CisgICAgICAgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhwLCBkc2l6ZSk7CisgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzaXplX3QgbnNpemUgPSBjaHVua3NpemUobmV4dCk7CisgICAgICAgICAgICAgIHBzaXplICs9IG5zaXplOworICAgICAgICAgICAgICB1bmxpbmtfY2h1bmsoZm0sIG5leHQsIG5zaXplKTsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIHBzaXplKTsKKyAgICAgICAgICAgICAgaWYgKHAgPT0gZm0tPmR2KSB7CisgICAgICAgICAgICAgICAgZm0tPmR2c2l6ZSA9IHBzaXplOworICAgICAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBlbHNlCisgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgaW5zZXJ0X2NodW5rKGZtLCBwLCBwc2l6ZSk7CisgICAgICAgICAgY2hlY2tfZnJlZV9jaHVuayhmbSwgcCk7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgZXJyb3JhY3Rpb246CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04oZm0sIHApOworICAgIHBvc3RhY3Rpb246CisgICAgICBQT1NUQUNUSU9OKGZtKTsKKyAgICB9CisgIH0KKyNpZiAhRk9PVEVSUworI3VuZGVmIGZtCisjZW5kaWYgLyogRk9PVEVSUyAqLworfQorCit2b2lkKiBkbGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkgeworICB2b2lkICptZW07CisgIGlmIChuX2VsZW1lbnRzICYmIE1BWF9TSVpFX1QgLyBuX2VsZW1lbnRzIDwgZWxlbV9zaXplKSB7CisgICAgLyogRmFpbCBvbiBvdmVyZmxvdyAqLworICAgIE1BTExPQ19GQUlMVVJFX0FDVElPTjsKKyAgICByZXR1cm4gTlVMTDsKKyAgfQorICBlbGVtX3NpemUgKj0gbl9lbGVtZW50czsKKyAgbWVtID0gZGxtYWxsb2MoZWxlbV9zaXplKTsKKyAgaWYgKG1lbSAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgZWxlbV9zaXplKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogZGxyZWFsbG9jKHZvaWQqIG9sZG1lbSwgc2l6ZV90IGJ5dGVzKSB7CisgIGlmIChvbGRtZW0gPT0gMCkKKyAgICByZXR1cm4gZGxtYWxsb2MoYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIGRsZnJlZShvbGRtZW0pOworICAgIHJldHVybiAwOworICB9CisjZW5kaWYgLyogUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTICovCisgIGVsc2UgeworI2lmICEgRk9PVEVSUworICAgIG1zdGF0ZSBtID0gZ207CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG0gPSBnZXRfbXN0YXRlX2ZvcihtZW0yY2h1bmsob2xkbWVtKSk7CisgICAgaWYgKCFva19tYWdpYyhtKSkgeworICAgICAgVVNBR0VfRVJST1JfQUNUSU9OKG0sIG9sZG1lbSk7CisgICAgICByZXR1cm4gMDsKKyAgICB9CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG0sIG9sZG1lbSwgYnl0ZXMpOworICB9Cit9CisKK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIHJldHVybiBpbnRlcm5hbF9tZW1hbGlnbihnbSwgYWxpZ25tZW50LCBieXRlcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQqIGNodW5rc1tdKSB7CisgIHNpemVfdCBzeiA9IGVsZW1fc2l6ZTsgLyogc2VydmVzIGFzIDEtZWxlbWVudCBhcnJheSAqLworICByZXR1cm4gaWFsbG9jKGdtLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBkbGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogY2h1bmtzW10pIHsKKyAgcmV0dXJuIGlhbGxvYyhnbSwgbl9lbGVtZW50cywgc2l6ZXMsIDAsIGNodW5rcyk7Cit9CisKK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCBieXRlcykgeworICBzaXplX3QgcGFnZXN6OworICBpbml0X21wYXJhbXMoKTsKKyAgcGFnZXN6ID0gbXBhcmFtcy5wYWdlX3NpemU7CisgIHJldHVybiBkbG1lbWFsaWduKHBhZ2VzeiwgYnl0ZXMpOworfQorCit2b2lkKiBkbHB2YWxsb2Moc2l6ZV90IGJ5dGVzKSB7CisgIHNpemVfdCBwYWdlc3o7CisgIGluaXRfbXBhcmFtcygpOworICBwYWdlc3ogPSBtcGFyYW1zLnBhZ2Vfc2l6ZTsKKyAgcmV0dXJuIGRsbWVtYWxpZ24ocGFnZXN6LCAoYnl0ZXMgKyBwYWdlc3ogLSBTSVpFX1RfT05FKSAmIH4ocGFnZXN6IC0gU0laRV9UX09ORSkpOworfQorCitpbnQgZGxtYWxsb2NfdHJpbShzaXplX3QgcGFkKSB7CisgIGludCByZXN1bHQgPSAwOworICBpZiAoIVBSRUFDVElPTihnbSkpIHsKKyAgICByZXN1bHQgPSBzeXNfdHJpbShnbSwgcGFkKTsKKyAgICBQT1NUQUNUSU9OKGdtKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5mb290cHJpbnQ7Cit9CisKKyNpZiBVU0VfTUFYX0FMTE9XRURfRk9PVFBSSU5UCitzaXplX3QgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KHZvaWQpIHsKKyAgcmV0dXJuIGdtLT5tYXhfYWxsb3dlZF9mb290cHJpbnQ7Cit9CisKK3ZvaWQgZGxtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKGJ5dGVzID4gZ20tPmZvb3RwcmludCkgeworICAgIC8qIEluY3JlYXNlIHRoZSBzaXplIGluIG11bHRpcGxlcyBvZiB0aGUgZ3JhbnVsYXJpdHksCisgICAgICogd2hpY2ggaXMgdGhlIHNtYWxsZXN0IHVuaXQgd2UgcmVxdWVzdCBmcm9tIHRoZSBzeXN0ZW0uCisgICAgICovCisgICAgZ20tPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IGdtLT5mb290cHJpbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBncmFudWxhcml0eV9hbGlnbihieXRlcyAtIGdtLT5mb290cHJpbnQpOworICB9CisgIGVsc2UgeworICAgIC8vVE9ETzogYWxsb3cgZm9yIHJlZHVjaW5nIHRoZSBtYXggZm9vdHByaW50CisgICAgZ20tPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IGdtLT5mb290cHJpbnQ7CisgIH0KK30KKyNlbmRpZgorCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKSB7CisgIHJldHVybiBnbS0+bWF4X2Zvb3RwcmludDsKK30KKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIGRsbWFsbGluZm8odm9pZCkgeworICByZXR1cm4gaW50ZXJuYWxfbWFsbGluZm8oZ20pOworfQorI2VuZGlmIC8qIE5PX01BTExJTkZPICovCisKK3ZvaWQgZGxtYWxsb2Nfc3RhdHMoKSB7CisgIGludGVybmFsX21hbGxvY19zdGF0cyhnbSk7Cit9CisKK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKiBtZW0pIHsKKyAgaWYgKG1lbSAhPSAwKSB7CisgICAgbWNodW5rcHRyIHAgPSBtZW0yY2h1bmsobWVtKTsKKyAgICBpZiAoY2ludXNlKHApKQorICAgICAgcmV0dXJuIGNodW5rc2l6ZShwKSAtIG92ZXJoZWFkX2ZvcihwKTsKKyAgfQorICByZXR1cm4gMDsKK30KKworaW50IGRsbWFsbG9wdChpbnQgcGFyYW1fbnVtYmVyLCBpbnQgdmFsdWUpIHsKKyAgcmV0dXJuIGNoYW5nZV9tcGFyYW0ocGFyYW1fbnVtYmVyLCB2YWx1ZSk7Cit9CisKKyNlbmRpZiAvKiAhT05MWV9NU1BBQ0VTICovCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIHVzZXIgbXNwYWNlcyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZiBNU1BBQ0VTCisKK3N0YXRpYyBtc3RhdGUgaW5pdF91c2VyX21zdGF0ZShjaGFyKiB0YmFzZSwgc2l6ZV90IHRzaXplKSB7CisgIHNpemVfdCBtc2l6ZSA9IHBhZF9yZXF1ZXN0KHNpemVvZihzdHJ1Y3QgbWFsbG9jX3N0YXRlKSk7CisgIG1jaHVua3B0ciBtbjsKKyAgbWNodW5rcHRyIG1zcCA9IGFsaWduX2FzX2NodW5rKHRiYXNlKTsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKShjaHVuazJtZW0obXNwKSk7CisgIG1lbXNldChtLCAwLCBtc2l6ZSk7CisgIElOSVRJQUxfTE9DSygmbS0+bXV0ZXgpOworICBtc3AtPmhlYWQgPSAobXNpemV8UElOVVNFX0JJVHxDSU5VU0VfQklUKTsKKyAgbS0+c2VnLmJhc2UgPSBtLT5sZWFzdF9hZGRyID0gdGJhc2U7CisgIG0tPnNlZy5zaXplID0gbS0+Zm9vdHByaW50ID0gbS0+bWF4X2Zvb3RwcmludCA9IHRzaXplOworI2lmIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQKKyAgbS0+bWF4X2FsbG93ZWRfZm9vdHByaW50ID0gTUFYX1NJWkVfVDsKKyNlbmRpZgorICBtLT5tYWdpYyA9IG1wYXJhbXMubWFnaWM7CisgIG0tPm1mbGFncyA9IG1wYXJhbXMuZGVmYXVsdF9tZmxhZ3M7CisgIGRpc2FibGVfY29udGlndW91cyhtKTsKKyAgaW5pdF9iaW5zKG0pOworICBtbiA9IG5leHRfY2h1bmsobWVtMmNodW5rKG0pKTsKKyAgaW5pdF90b3AobSwgbW4sIChzaXplX3QpKCh0YmFzZSArIHRzaXplKSAtIChjaGFyKiltbikgLSBUT1BfRk9PVF9TSVpFKTsKKyAgY2hlY2tfdG9wX2NodW5rKG0sIG0tPnRvcCk7CisgIHJldHVybiBtOworfQorCittc3BhY2UgY3JlYXRlX21zcGFjZShzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA8IChzaXplX3QpIC0obXNpemUgKyBUT1BfRk9PVF9TSVpFICsgbXBhcmFtcy5wYWdlX3NpemUpKSB7CisgICAgc2l6ZV90IHJzID0gKChjYXBhY2l0eSA9PSAwKT8gbXBhcmFtcy5ncmFudWxhcml0eSA6CisgICAgICAgICAgICAgICAgIChjYXBhY2l0eSArIFRPUF9GT09UX1NJWkUgKyBtc2l6ZSkpOworICAgIHNpemVfdCB0c2l6ZSA9IGdyYW51bGFyaXR5X2FsaWduKHJzKTsKKyAgICBjaGFyKiB0YmFzZSA9IChjaGFyKikoQ0FMTF9NTUFQKHRzaXplKSk7CisgICAgaWYgKHRiYXNlICE9IENNRkFJTCkgeworICAgICAgbSA9IGluaXRfdXNlcl9tc3RhdGUodGJhc2UsIHRzaXplKTsKKyAgICAgIG0tPnNlZy5zZmxhZ3MgPSBJU19NTUFQUEVEX0JJVDsKKyAgICAgIHNldF9sb2NrKG0sIGxvY2tlZCk7CisgICAgfQorICB9CisgIHJldHVybiAobXNwYWNlKW07Cit9CisKK21zcGFjZSBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZSh2b2lkKiBiYXNlLCBzaXplX3QgY2FwYWNpdHksIGludCBsb2NrZWQpIHsKKyAgbXN0YXRlIG0gPSAwOworICBzaXplX3QgbXNpemUgPSBwYWRfcmVxdWVzdChzaXplb2Yoc3RydWN0IG1hbGxvY19zdGF0ZSkpOworICBpbml0X21wYXJhbXMoKTsgLyogRW5zdXJlIHBhZ2VzaXplIGV0YyBpbml0aWFsaXplZCAqLworCisgIGlmIChjYXBhY2l0eSA+IG1zaXplICsgVE9QX0ZPT1RfU0laRSAmJgorICAgICAgY2FwYWNpdHkgPCAoc2l6ZV90KSAtKG1zaXplICsgVE9QX0ZPT1RfU0laRSArIG1wYXJhbXMucGFnZV9zaXplKSkgeworICAgIG0gPSBpbml0X3VzZXJfbXN0YXRlKChjaGFyKiliYXNlLCBjYXBhY2l0eSk7CisgICAgbS0+c2VnLnNmbGFncyA9IEVYVEVSTl9CSVQ7CisgICAgc2V0X2xvY2sobSwgbG9ja2VkKTsKKyAgfQorICByZXR1cm4gKG1zcGFjZSltOworfQorCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCkgeworICBzaXplX3QgZnJlZWQgPSAwOworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIG1zZWdtZW50cHRyIHNwID0gJm1zLT5zZWc7CisgICAgd2hpbGUgKHNwICE9IDApIHsKKyAgICAgIGNoYXIqIGJhc2UgPSBzcC0+YmFzZTsKKyAgICAgIHNpemVfdCBzaXplID0gc3AtPnNpemU7CisgICAgICBmbGFnX3QgZmxhZyA9IHNwLT5zZmxhZ3M7CisgICAgICBzcCA9IHNwLT5uZXh0OworICAgICAgaWYgKChmbGFnICYgSVNfTU1BUFBFRF9CSVQpICYmICEoZmxhZyAmIEVYVEVSTl9CSVQpICYmCisgICAgICAgICAgQ0FMTF9NVU5NQVAoYmFzZSwgc2l6ZSkgPT0gMCkKKyAgICAgICAgZnJlZWQgKz0gc2l6ZTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gZnJlZWQ7Cit9CisKKy8qCisgIG1zcGFjZSB2ZXJzaW9ucyBvZiByb3V0aW5lcyBhcmUgbmVhci1jbG9uZXMgb2YgdGhlIGdsb2JhbAorICB2ZXJzaW9ucy4gVGhpcyBpcyBub3Qgc28gbmljZSBidXQgYmV0dGVyIHRoYW4gdGhlIGFsdGVybmF0aXZlcy4KKyovCisKKwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICB2b2lkKiBtZW07CisgICAgc2l6ZV90IG5iOworICAgIGlmIChieXRlcyA8PSBNQVhfU01BTExfUkVRVUVTVCkgeworICAgICAgYmluZGV4X3QgaWR4OworICAgICAgYmlubWFwX3Qgc21hbGxiaXRzOworICAgICAgbmIgPSAoYnl0ZXMgPCBNSU5fUkVRVUVTVCk/IE1JTl9DSFVOS19TSVpFIDogcGFkX3JlcXVlc3QoYnl0ZXMpOworICAgICAgaWR4ID0gc21hbGxfaW5kZXgobmIpOworICAgICAgc21hbGxiaXRzID0gbXMtPnNtYWxsbWFwID4+IGlkeDsKKworICAgICAgaWYgKChzbWFsbGJpdHMgJiAweDNVKSAhPSAwKSB7IC8qIFJlbWFpbmRlcmxlc3MgZml0IHRvIGEgc21hbGxiaW4uICovCisgICAgICAgIG1jaHVua3B0ciBiLCBwOworICAgICAgICBpZHggKz0gfnNtYWxsYml0cyAmIDE7ICAgICAgIC8qIFVzZXMgbmV4dCBiaW4gaWYgaWR4IGVtcHR5ICovCisgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaWR4KTsKKyAgICAgICAgcCA9IGItPmZkOworICAgICAgICBhc3NlcnQoY2h1bmtzaXplKHApID09IHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIHVubGlua19maXJzdF9zbWFsbF9jaHVuayhtcywgYiwgcCwgaWR4KTsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIHNtYWxsX2luZGV4MnNpemUoaWR4KSk7CisgICAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisKKyAgICAgIGVsc2UgaWYgKG5iID4gbXMtPmR2c2l6ZSkgeworICAgICAgICBpZiAoc21hbGxiaXRzICE9IDApIHsgLyogVXNlIGNodW5rIGluIG5leHQgbm9uZW1wdHkgc21hbGxiaW4gKi8KKyAgICAgICAgICBtY2h1bmtwdHIgYiwgcCwgcjsKKyAgICAgICAgICBzaXplX3QgcnNpemU7CisgICAgICAgICAgYmluZGV4X3QgaTsKKyAgICAgICAgICBiaW5tYXBfdCBsZWZ0Yml0cyA9IChzbWFsbGJpdHMgPDwgaWR4KSAmIGxlZnRfYml0cyhpZHgyYml0KGlkeCkpOworICAgICAgICAgIGJpbm1hcF90IGxlYXN0Yml0ID0gbGVhc3RfYml0KGxlZnRiaXRzKTsKKyAgICAgICAgICBjb21wdXRlX2JpdDJpZHgobGVhc3RiaXQsIGkpOworICAgICAgICAgIGIgPSBzbWFsbGJpbl9hdChtcywgaSk7CisgICAgICAgICAgcCA9IGItPmZkOworICAgICAgICAgIGFzc2VydChjaHVua3NpemUocCkgPT0gc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgdW5saW5rX2ZpcnN0X3NtYWxsX2NodW5rKG1zLCBiLCBwLCBpKTsKKyAgICAgICAgICByc2l6ZSA9IHNtYWxsX2luZGV4MnNpemUoaSkgLSBuYjsKKyAgICAgICAgICAvKiBGaXQgaGVyZSBjYW5ub3QgYmUgcmVtYWluZGVybGVzcyBpZiA0Ynl0ZSBzaXplcyAqLworICAgICAgICAgIGlmIChTSVpFX1RfU0laRSAhPSA0ICYmIHJzaXplIDwgTUlOX0NIVU5LX1NJWkUpCisgICAgICAgICAgICBzZXRfaW51c2VfYW5kX3BpbnVzZShtcywgcCwgc21hbGxfaW5kZXgyc2l6ZShpKSk7CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ludXNlX2NodW5rKG1zLCBwLCBuYik7CisgICAgICAgICAgICByID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHIsIHJzaXplKTsKKyAgICAgICAgICAgIHJlcGxhY2VfZHYobXMsIHIsIHJzaXplKTsKKyAgICAgICAgICB9CisgICAgICAgICAgbWVtID0gY2h1bmsybWVtKHApOworICAgICAgICAgIGNoZWNrX21hbGxvY2VkX2NodW5rKG1zLCBtZW0sIG5iKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKworICAgICAgICBlbHNlIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX3NtYWxsKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgaWYgKGJ5dGVzID49IE1BWF9SRVFVRVNUKQorICAgICAgbmIgPSBNQVhfU0laRV9UOyAvKiBUb28gYmlnIHRvIGFsbG9jYXRlLiBGb3JjZSBmYWlsdXJlIChpbiBzeXMgYWxsb2MpICovCisgICAgZWxzZSB7CisgICAgICBuYiA9IHBhZF9yZXF1ZXN0KGJ5dGVzKTsKKyAgICAgIGlmIChtcy0+dHJlZW1hcCAhPSAwICYmIChtZW0gPSB0bWFsbG9jX2xhcmdlKG1zLCBuYikpICE9IDApIHsKKyAgICAgICAgY2hlY2tfbWFsbG9jZWRfY2h1bmsobXMsIG1lbSwgbmIpOworICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICB9CisgICAgfQorCisgICAgaWYgKG5iIDw9IG1zLT5kdnNpemUpIHsKKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT5kdnNpemUgLSBuYjsKKyAgICAgIG1jaHVua3B0ciBwID0gbXMtPmR2OworICAgICAgaWYgKHJzaXplID49IE1JTl9DSFVOS19TSVpFKSB7IC8qIHNwbGl0IGR2ICovCisgICAgICAgIG1jaHVua3B0ciByID0gbXMtPmR2ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgICBtcy0+ZHZzaXplID0gcnNpemU7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfZnJlZV9jaHVuayhyLCByc2l6ZSk7CisgICAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIH0KKyAgICAgIGVsc2UgeyAvKiBleGhhdXN0IGR2ICovCisgICAgICAgIHNpemVfdCBkdnMgPSBtcy0+ZHZzaXplOworICAgICAgICBtcy0+ZHZzaXplID0gMDsKKyAgICAgICAgbXMtPmR2ID0gMDsKKyAgICAgICAgc2V0X2ludXNlX2FuZF9waW51c2UobXMsIHAsIGR2cyk7CisgICAgICB9CisgICAgICBtZW0gPSBjaHVuazJtZW0ocCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgZWxzZSBpZiAobmIgPCBtcy0+dG9wc2l6ZSkgeyAvKiBTcGxpdCB0b3AgKi8KKyAgICAgIHNpemVfdCByc2l6ZSA9IG1zLT50b3BzaXplIC09IG5iOworICAgICAgbWNodW5rcHRyIHAgPSBtcy0+dG9wOworICAgICAgbWNodW5rcHRyIHIgPSBtcy0+dG9wID0gY2h1bmtfcGx1c19vZmZzZXQocCwgbmIpOworICAgICAgci0+aGVhZCA9IHJzaXplIHwgUElOVVNFX0JJVDsKKyAgICAgIHNldF9zaXplX2FuZF9waW51c2Vfb2ZfaW51c2VfY2h1bmsobXMsIHAsIG5iKTsKKyAgICAgIG1lbSA9IGNodW5rMm1lbShwKTsKKyAgICAgIGNoZWNrX3RvcF9jaHVuayhtcywgbXMtPnRvcCk7CisgICAgICBjaGVja19tYWxsb2NlZF9jaHVuayhtcywgbWVtLCBuYik7CisgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgfQorCisgICAgbWVtID0gc3lzX2FsbG9jKG1zLCBuYik7CisKKyAgcG9zdGFjdGlvbjoKKyAgICBQT1NUQUNUSU9OKG1zKTsKKyAgICByZXR1cm4gbWVtOworICB9CisKKyAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKSB7CisgIGlmIChtZW0gIT0gMCkgeworICAgIG1jaHVua3B0ciBwICA9IG1lbTJjaHVuayhtZW0pOworI2lmIEZPT1RFUlMKKyAgICBtc3RhdGUgZm0gPSBnZXRfbXN0YXRlX2ZvcihwKTsKKyNlbHNlIC8qIEZPT1RFUlMgKi8KKyAgICBtc3RhdGUgZm0gPSAobXN0YXRlKW1zcDsKKyNlbmRpZiAvKiBGT09URVJTICovCisgICAgaWYgKCFva19tYWdpYyhmbSkpIHsKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIGlmICghUFJFQUNUSU9OKGZtKSkgeworICAgICAgY2hlY2tfaW51c2VfY2h1bmsoZm0sIHApOworICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcCkgJiYgb2tfY2ludXNlKHApKSkgeworICAgICAgICBzaXplX3QgcHNpemUgPSBjaHVua3NpemUocCk7CisgICAgICAgIG1jaHVua3B0ciBuZXh0ID0gY2h1bmtfcGx1c19vZmZzZXQocCwgcHNpemUpOworICAgICAgICBpZiAoIXBpbnVzZShwKSkgeworICAgICAgICAgIHNpemVfdCBwcmV2c2l6ZSA9IHAtPnByZXZfZm9vdDsKKyAgICAgICAgICBpZiAoKHByZXZzaXplICYgSVNfTU1BUFBFRF9CSVQpICE9IDApIHsKKyAgICAgICAgICAgIHByZXZzaXplICY9IH5JU19NTUFQUEVEX0JJVDsKKyAgICAgICAgICAgIHBzaXplICs9IHByZXZzaXplICsgTU1BUF9GT09UX1BBRDsKKyAgICAgICAgICAgIGlmIChDQUxMX01VTk1BUCgoY2hhciopcCAtIHByZXZzaXplLCBwc2l6ZSkgPT0gMCkKKyAgICAgICAgICAgICAgZm0tPmZvb3RwcmludCAtPSBwc2l6ZTsKKyAgICAgICAgICAgIGdvdG8gcG9zdGFjdGlvbjsKKyAgICAgICAgICB9CisgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICBtY2h1bmtwdHIgcHJldiA9IGNodW5rX21pbnVzX29mZnNldChwLCBwcmV2c2l6ZSk7CisgICAgICAgICAgICBwc2l6ZSArPSBwcmV2c2l6ZTsKKyAgICAgICAgICAgIHAgPSBwcmV2OworICAgICAgICAgICAgaWYgKFJUQ0hFQ0sob2tfYWRkcmVzcyhmbSwgcHJldikpKSB7IC8qIGNvbnNvbGlkYXRlIGJhY2t3YXJkICovCisgICAgICAgICAgICAgIGlmIChwICE9IGZtLT5kdikgeworICAgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgcCwgcHJldnNpemUpOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGVsc2UgaWYgKChuZXh0LT5oZWFkICYgSU5VU0VfQklUUykgPT0gSU5VU0VfQklUUykgeworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSBwc2l6ZTsKKyAgICAgICAgICAgICAgICBzZXRfZnJlZV93aXRoX3BpbnVzZShwLCBwc2l6ZSwgbmV4dCk7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgIGdvdG8gZXJyb3JhY3Rpb247CisgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKFJUQ0hFQ0sob2tfbmV4dChwLCBuZXh0KSAmJiBva19waW51c2UobmV4dCkpKSB7CisgICAgICAgICAgaWYgKCFjaW51c2UobmV4dCkpIHsgIC8qIGNvbnNvbGlkYXRlIGZvcndhcmQgKi8KKyAgICAgICAgICAgIGlmIChuZXh0ID09IGZtLT50b3ApIHsKKyAgICAgICAgICAgICAgc2l6ZV90IHRzaXplID0gZm0tPnRvcHNpemUgKz0gcHNpemU7CisgICAgICAgICAgICAgIGZtLT50b3AgPSBwOworICAgICAgICAgICAgICBwLT5oZWFkID0gdHNpemUgfCBQSU5VU0VfQklUOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHYgPSAwOworICAgICAgICAgICAgICAgIGZtLT5kdnNpemUgPSAwOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgIGlmIChzaG91bGRfdHJpbShmbSwgdHNpemUpKQorICAgICAgICAgICAgICAgIHN5c190cmltKGZtLCAwKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSBpZiAobmV4dCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgc2l6ZV90IGRzaXplID0gZm0tPmR2c2l6ZSArPSBwc2l6ZTsKKyAgICAgICAgICAgICAgZm0tPmR2ID0gcDsKKyAgICAgICAgICAgICAgc2V0X3NpemVfYW5kX3BpbnVzZV9vZl9mcmVlX2NodW5rKHAsIGRzaXplKTsKKyAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgIHNpemVfdCBuc2l6ZSA9IGNodW5rc2l6ZShuZXh0KTsKKyAgICAgICAgICAgICAgcHNpemUgKz0gbnNpemU7CisgICAgICAgICAgICAgIHVubGlua19jaHVuayhmbSwgbmV4dCwgbnNpemUpOworICAgICAgICAgICAgICBzZXRfc2l6ZV9hbmRfcGludXNlX29mX2ZyZWVfY2h1bmsocCwgcHNpemUpOworICAgICAgICAgICAgICBpZiAocCA9PSBmbS0+ZHYpIHsKKyAgICAgICAgICAgICAgICBmbS0+ZHZzaXplID0gcHNpemU7CisgICAgICAgICAgICAgICAgZ290byBwb3N0YWN0aW9uOworICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHNldF9mcmVlX3dpdGhfcGludXNlKHAsIHBzaXplLCBuZXh0KTsKKyAgICAgICAgICBpbnNlcnRfY2h1bmsoZm0sIHAsIHBzaXplKTsKKyAgICAgICAgICBjaGVja19mcmVlX2NodW5rKGZtLCBwKTsKKyAgICAgICAgICBnb3RvIHBvc3RhY3Rpb247CisgICAgICAgIH0KKyAgICAgIH0KKyAgICBlcnJvcmFjdGlvbjoKKyAgICAgIFVTQUdFX0VSUk9SX0FDVElPTihmbSwgcCk7CisgICAgcG9zdGFjdGlvbjoKKyAgICAgIFBPU1RBQ1RJT04oZm0pOworICAgIH0KKyAgfQorfQorCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKSB7CisgIHZvaWQgKm1lbTsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICBpZiAobl9lbGVtZW50cyAmJiBNQVhfU0laRV9UIC8gbl9lbGVtZW50cyA8IGVsZW1fc2l6ZSkgeworICAgIC8qIEZhaWwgb24gb3ZlcmZsb3cgKi8KKyAgICBNQUxMT0NfRkFJTFVSRV9BQ1RJT047CisgICAgcmV0dXJuIE5VTEw7CisgIH0KKyAgZWxlbV9zaXplICo9IG5fZWxlbWVudHM7CisgIG1lbSA9IGludGVybmFsX21hbGxvYyhtcywgZWxlbV9zaXplKTsKKyAgaWYgKG1lbSAmJiBjYWxsb2NfbXVzdF9jbGVhcihtZW0yY2h1bmsobWVtKSkpCisgICAgbWVtc2V0KG1lbSwgMCwgZWxlbV9zaXplKTsKKyAgcmV0dXJuIG1lbTsKK30KKwordm9pZCogbXNwYWNlX3JlYWxsb2MobXNwYWNlIG1zcCwgdm9pZCogb2xkbWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgaWYgKG9sZG1lbSA9PSAwKQorICAgIHJldHVybiBtc3BhY2VfbWFsbG9jKG1zcCwgYnl0ZXMpOworI2lmZGVmIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUworICBpZiAoYnl0ZXMgPT0gMCkgeworICAgIG1zcGFjZV9mcmVlKG1zcCwgb2xkbWVtKTsKKyAgICByZXR1cm4gMDsKKyAgfQorI2VuZGlmIC8qIFJFQUxMT0NfWkVST19CWVRFU19GUkVFUyAqLworICBlbHNlIHsKKyNpZiBGT09URVJTCisgICAgbWNodW5rcHRyIHAgID0gbWVtMmNodW5rKG9sZG1lbSk7CisgICAgbXN0YXRlIG1zID0gZ2V0X21zdGF0ZV9mb3IocCk7CisjZWxzZSAvKiBGT09URVJTICovCisgICAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisjZW5kaWYgLyogRk9PVEVSUyAqLworICAgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBpbnRlcm5hbF9yZWFsbG9jKG1zLCBvbGRtZW0sIGJ5dGVzKTsKKyAgfQorfQorCit2b2lkKiBtc3BhY2VfbWVtYWxpZ24obXNwYWNlIG1zcCwgc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgICAgcmV0dXJuIDA7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21lbWFsaWduKG1zLCBhbGlnbm1lbnQsIGJ5dGVzKTsKK30KKwordm9pZCoqIG1zcGFjZV9pbmRlcGVuZGVudF9jYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgZWxlbV9zaXplLCB2b2lkKiBjaHVua3NbXSkgeworICBzaXplX3Qgc3ogPSBlbGVtX3NpemU7IC8qIHNlcnZlcyBhcyAxLWVsZW1lbnQgYXJyYXkgKi8KKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobXMpKSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgICByZXR1cm4gMDsKKyAgfQorICByZXR1cm4gaWFsbG9jKG1zLCBuX2VsZW1lbnRzLCAmc3osIDMsIGNodW5rcyk7Cit9CisKK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSkgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKCFva19tYWdpYyhtcykpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICAgIHJldHVybiAwOworICB9CisgIHJldHVybiBpYWxsb2MobXMsIG5fZWxlbWVudHMsIHNpemVzLCAwLCBjaHVua3MpOworfQorCitpbnQgbXNwYWNlX3RyaW0obXNwYWNlIG1zcCwgc2l6ZV90IHBhZCkgeworICBpbnQgcmVzdWx0ID0gMDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpZiAoIVBSRUFDVElPTihtcykpIHsKKyAgICAgIHJlc3VsdCA9IHN5c190cmltKG1zLCBwYWQpOworICAgICAgUE9TVEFDVElPTihtcyk7CisgICAgfQorICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBtc3BhY2VfbWFsbG9jX3N0YXRzKG1zcGFjZSBtc3ApIHsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICBpbnRlcm5hbF9tYWxsb2Nfc3RhdHMobXMpOworICB9CisgIGVsc2UgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KK30KKworc2l6ZV90IG1zcGFjZV9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVAorc2l6ZV90IG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQobXNwYWNlIG1zcCkgeworICBzaXplX3QgcmVzdWx0OworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIHJlc3VsdCA9IG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQ7CisgIH0KKyAgZWxzZSB7CisgICAgVVNBR0VfRVJST1JfQUNUSU9OKG1zLG1zKTsKKyAgfQorICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KG1zcGFjZSBtc3AsIHNpemVfdCBieXRlcykgeworICBtc3RhdGUgbXMgPSAobXN0YXRlKW1zcDsKKyAgaWYgKG9rX21hZ2ljKG1zKSkgeworICAgIGlmIChieXRlcyA+IG1zLT5mb290cHJpbnQpIHsKKyAgICAgIC8qIEluY3JlYXNlIHRoZSBzaXplIGluIG11bHRpcGxlcyBvZiB0aGUgZ3JhbnVsYXJpdHksCisgICAgICAgKiB3aGljaCBpcyB0aGUgc21hbGxlc3QgdW5pdCB3ZSByZXF1ZXN0IGZyb20gdGhlIHN5c3RlbS4KKyAgICAgICAqLworICAgICAgbXMtPm1heF9hbGxvd2VkX2Zvb3RwcmludCA9IG1zLT5mb290cHJpbnQgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdyYW51bGFyaXR5X2FsaWduKGJ5dGVzIC0gbXMtPmZvb3RwcmludCk7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLy9UT0RPOiBhbGxvdyBmb3IgcmVkdWNpbmcgdGhlIG1heCBmb290cHJpbnQKKyAgICAgIG1zLT5tYXhfYWxsb3dlZF9mb290cHJpbnQgPSBtcy0+Zm9vdHByaW50OworICAgIH0KKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9Cit9CisjZW5kaWYKKworc2l6ZV90IG1zcGFjZV9tYXhfZm9vdHByaW50KG1zcGFjZSBtc3ApIHsKKyAgc2l6ZV90IHJlc3VsdDsKKyAgbXN0YXRlIG1zID0gKG1zdGF0ZSltc3A7CisgIGlmIChva19tYWdpYyhtcykpIHsKKyAgICByZXN1bHQgPSBtcy0+bWF4X2Zvb3RwcmludDsKKyAgfQorICBlbHNlIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obXMsbXMpOworICB9CisgIHJldHVybiByZXN1bHQ7Cit9CisKKworI2lmICFOT19NQUxMSU5GTworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKSB7CisgIG1zdGF0ZSBtcyA9IChtc3RhdGUpbXNwOworICBpZiAoIW9rX21hZ2ljKG1zKSkgeworICAgIFVTQUdFX0VSUk9SX0FDVElPTihtcyxtcyk7CisgIH0KKyAgcmV0dXJuIGludGVybmFsX21hbGxpbmZvKG1zKTsKK30KKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCitpbnQgbXNwYWNlX21hbGxvcHQoaW50IHBhcmFtX251bWJlciwgaW50IHZhbHVlKSB7CisgIHJldHVybiBjaGFuZ2VfbXBhcmFtKHBhcmFtX251bWJlciwgdmFsdWUpOworfQorCisjZW5kaWYgLyogTVNQQUNFUyAqLworCisjaWYgTVNQQUNFUyAmJiBPTkxZX01TUEFDRVMKK3ZvaWQgbXNwYWNlX3dhbGtfZnJlZV9wYWdlcyhtc3BhY2UgbXNwLAorICAgIHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksIHZvaWQgKmhhcmcpCit7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKKyAgICByZXR1cm47CisgIH0KKyNlbHNlCit2b2lkIGRsbWFsbG9jX3dhbGtfZnJlZV9wYWdlcyh2b2lkKCpoYW5kbGVyKSh2b2lkICpzdGFydCwgdm9pZCAqZW5kLCB2b2lkICphcmcpLAorICAgIHZvaWQgKmhhcmcpCit7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSlnbTsKKyNlbmRpZgorICBpZiAoIVBSRUFDVElPTihtKSkgeworICAgIGlmIChpc19pbml0aWFsaXplZChtKSkgeworICAgICAgbXNlZ21lbnRwdHIgcyA9ICZtLT5zZWc7CisgICAgICB3aGlsZSAocyAhPSAwKSB7CisgICAgICAgIG1jaHVua3B0ciBwID0gYWxpZ25fYXNfY2h1bmsocy0+YmFzZSk7CisgICAgICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCisgICAgICAgICAgICAgICBwICE9IG0tPnRvcCAmJiBwLT5oZWFkICE9IEZFTkNFUE9TVF9IRUFEKSB7CisgICAgICAgICAgdm9pZCAqY2h1bmtwdHIsICp1c2VycHRyOworICAgICAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKKyAgICAgICAgICBjaHVua3B0ciA9IHA7CisgICAgICAgICAgY2h1bmtsZW4gPSBjaHVua3NpemUocCk7CisgICAgICAgICAgaWYgKCFjaW51c2UocCkpIHsKKyAgICAgICAgICAgIHZvaWQgKnN0YXJ0OworICAgICAgICAgICAgaWYgKGlzX3NtYWxsKGNodW5rbGVuKSkgeworICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKHAgKyAxKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICBzdGFydCA9ICh2b2lkICopKCh0Y2h1bmtwdHIpcCArIDEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaGFuZGxlcihzdGFydCwgbmV4dF9jaHVuayhwKSwgaGFyZyk7CisgICAgICAgICAgfQorICAgICAgICAgIHAgPSBuZXh0X2NodW5rKHApOworICAgICAgICB9CisgICAgICAgIGlmIChwID09IG0tPnRvcCkgeworICAgICAgICAgIGhhbmRsZXIoKHZvaWQgKikocCArIDEpLCBuZXh0X2NodW5rKHApLCBoYXJnKTsKKyAgICAgICAgfQorICAgICAgICBzID0gcy0+bmV4dDsKKyAgICAgIH0KKyAgICB9CisgICAgUE9TVEFDVElPTihtKTsKKyAgfQorfQorCisKKyNpZiBNU1BBQ0VTICYmIE9OTFlfTVNQQUNFUwordm9pZCBtc3BhY2Vfd2Fsa19oZWFwKG1zcGFjZSBtc3AsCisgICAgICAgICAgICAgICAgICAgICAgdm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICp1c2VycHRyLCBzaXplX3QgdXNlcmxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpCit7CisgIG1zZWdtZW50cHRyIHM7CisgIG1zdGF0ZSBtID0gKG1zdGF0ZSltc3A7CisgIGlmICghb2tfbWFnaWMobSkpIHsKKyAgICBVU0FHRV9FUlJPUl9BQ1RJT04obSxtKTsKKyAgICByZXR1cm47CisgIH0KKyNlbHNlCit2b2lkIGRsbWFsbG9jX3dhbGtfaGVhcCh2b2lkKCpoYW5kbGVyKShjb25zdCB2b2lkICpjaHVua3B0ciwgc2l6ZV90IGNodW5rbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqdXNlcnB0ciwgc2l6ZV90IHVzZXJsZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICphcmcpLAorICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqaGFyZykKK3sKKyAgbXNlZ21lbnRwdHIgczsKKyAgbXN0YXRlIG0gPSAobXN0YXRlKWdtOworI2VuZGlmCisKKyAgcyA9ICZtLT5zZWc7CisgIHdoaWxlIChzICE9IDApIHsKKyAgICBtY2h1bmtwdHIgcCA9IGFsaWduX2FzX2NodW5rKHMtPmJhc2UpOworICAgIHdoaWxlIChzZWdtZW50X2hvbGRzKHMsIHApICYmCisgICAgICAgICAgIHAgIT0gbS0+dG9wICYmIHAtPmhlYWQgIT0gRkVOQ0VQT1NUX0hFQUQpIHsKKyAgICAgIHZvaWQgKmNodW5rcHRyLCAqdXNlcnB0cjsKKyAgICAgIHNpemVfdCBjaHVua2xlbiwgdXNlcmxlbjsKKyAgICAgIGNodW5rcHRyID0gcDsKKyAgICAgIGNodW5rbGVuID0gY2h1bmtzaXplKHApOworICAgICAgaWYgKGNpbnVzZShwKSkgeworICAgICAgICB1c2VycHRyID0gY2h1bmsybWVtKHApOworICAgICAgICB1c2VybGVuID0gY2h1bmtsZW4gLSBvdmVyaGVhZF9mb3IocCk7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAgdXNlcnB0ciA9IE5VTEw7CisgICAgICAgIHVzZXJsZW4gPSAwOworICAgICAgfQorICAgICAgaGFuZGxlcihjaHVua3B0ciwgY2h1bmtsZW4sIHVzZXJwdHIsIHVzZXJsZW4sIGhhcmcpOworICAgICAgcCA9IG5leHRfY2h1bmsocCk7CisgICAgfQorICAgIGlmIChwID09IG0tPnRvcCkgeworICAgICAgLyogVGhlIHRvcCBjaHVuayBpcyBqdXN0IGEgYmlnIGZyZWUgY2h1bmsgZm9yIG91ciBwdXJwb3Nlcy4KKyAgICAgICAqLworICAgICAgaGFuZGxlcihtLT50b3AsIG0tPnRvcHNpemUsIE5VTEwsIDAsIGhhcmcpOworICAgIH0KKyAgICBzID0gcy0+bmV4dDsKKyAgfQorfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLSBBbHRlcm5hdGl2ZSBNT1JFQ09SRSBmdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisvKgorICBHdWlkZWxpbmVzIGZvciBjcmVhdGluZyBhIGN1c3RvbSB2ZXJzaW9uIG9mIE1PUkVDT1JFOgorCisgICogRm9yIGJlc3QgcGVyZm9ybWFuY2UsIE1PUkVDT1JFIHNob3VsZCBhbGxvY2F0ZSBpbiBtdWx0aXBsZXMgb2YgcGFnZXNpemUuCisgICogTU9SRUNPUkUgbWF5IGFsbG9jYXRlIG1vcmUgbWVtb3J5IHRoYW4gcmVxdWVzdGVkLiAoT3IgZXZlbiBsZXNzLAorICAgICAgYnV0IHRoaXMgd2lsbCB1c3VhbGx5IHJlc3VsdCBpbiBhIG1hbGxvYyBmYWlsdXJlLikKKyAgKiBNT1JFQ09SRSBtdXN0IG5vdCBhbGxvY2F0ZSBtZW1vcnkgd2hlbiBnaXZlbiBhcmd1bWVudCB6ZXJvLCBidXQKKyAgICAgIGluc3RlYWQgcmV0dXJuIG9uZSBwYXN0IHRoZSBlbmQgYWRkcmVzcyBvZiBtZW1vcnkgZnJvbSBwcmV2aW91cworICAgICAgbm9uemVybyBjYWxsLgorICAqIEZvciBiZXN0IHBlcmZvcm1hbmNlLCBjb25zZWN1dGl2ZSBjYWxscyB0byBNT1JFQ09SRSB3aXRoIHBvc2l0aXZlCisgICAgICBhcmd1bWVudHMgc2hvdWxkIHJldHVybiBpbmNyZWFzaW5nIGFkZHJlc3NlcywgaW5kaWNhdGluZyB0aGF0CisgICAgICBzcGFjZSBoYXMgYmVlbiBjb250aWd1b3VzbHkgZXh0ZW5kZWQuCisgICogRXZlbiB0aG91Z2ggY29uc2VjdXRpdmUgY2FsbHMgdG8gTU9SRUNPUkUgbmVlZCBub3QgcmV0dXJuIGNvbnRpZ3VvdXMKKyAgICAgIGFkZHJlc3NlcywgaXQgbXVzdCBiZSBPSyBmb3IgbWFsbG9jJ2VkIGNodW5rcyB0byBzcGFuIG11bHRpcGxlCisgICAgICByZWdpb25zIGluIHRob3NlIGNhc2VzIHdoZXJlIHRoZXkgZG8gaGFwcGVuIHRvIGJlIGNvbnRpZ3VvdXMuCisgICogTU9SRUNPUkUgbmVlZCBub3QgaGFuZGxlIG5lZ2F0aXZlIGFyZ3VtZW50cyAtLSBpdCBtYXkgaW5zdGVhZAorICAgICAganVzdCByZXR1cm4gTUZBSUwgd2hlbiBnaXZlbiBuZWdhdGl2ZSBhcmd1bWVudHMuCisgICAgICBOZWdhdGl2ZSBhcmd1bWVudHMgYXJlIGFsd2F5cyBtdWx0aXBsZXMgb2YgcGFnZXNpemUuIE1PUkVDT1JFCisgICAgICBtdXN0IG5vdCBtaXNpbnRlcnByZXQgbmVnYXRpdmUgYXJncyBhcyBsYXJnZSBwb3NpdGl2ZSB1bnNpZ25lZAorICAgICAgYXJncy4gWW91IGNhbiBzdXBwcmVzcyBhbGwgc3VjaCBjYWxscyBmcm9tIGV2ZW4gb2NjdXJyaW5nIGJ5IGRlZmluaW5nCisgICAgICBNT1JFQ09SRV9DQU5OT1RfVFJJTSwKKworICBBcyBhbiBleGFtcGxlIGFsdGVybmF0aXZlIE1PUkVDT1JFLCBoZXJlIGlzIGEgY3VzdG9tIGFsbG9jYXRvcgorICBraW5kbHkgY29udHJpYnV0ZWQgZm9yIHByZS1PU1ggbWFjT1MuICBJdCB1c2VzIHZpcnR1YWxseSBidXQgbm90CisgIG5lY2Vzc2FyaWx5IHBoeXNpY2FsbHkgY29udGlndW91cyBub24tcGFnZWQgbWVtb3J5IChsb2NrZWQgaW4sCisgIHByZXNlbnQgYW5kIHdvbid0IGdldCBzd2FwcGVkIG91dCkuICBZb3UgY2FuIHVzZSBpdCBieSB1bmNvbW1lbnRpbmcKKyAgdGhpcyBzZWN0aW9uLCBhZGRpbmcgc29tZSAjaW5jbHVkZXMsIGFuZCBzZXR0aW5nIHVwIHRoZSBhcHByb3ByaWF0ZQorICBkZWZpbmVzIGFib3ZlOgorCisgICAgICAjZGVmaW5lIE1PUkVDT1JFIG9zTW9yZUNvcmUKKworICBUaGVyZSBpcyBhbHNvIGEgc2h1dGRvd24gcm91dGluZSB0aGF0IHNob3VsZCBzb21laG93IGJlIGNhbGxlZCBmb3IKKyAgY2xlYW51cCB1cG9uIHByb2dyYW0gZXhpdC4KKworICAjZGVmaW5lIE1BWF9QT09MX0VOVFJJRVMgMTAwCisgICNkZWZpbmUgTUlOSU1VTV9NT1JFQ09SRV9TSVpFICAoNjQgKiAxMDI0VSkKKyAgc3RhdGljIGludCBuZXh0X29zX3Bvb2w7CisgIHZvaWQgKm91cl9vc19wb29sc1tNQVhfUE9PTF9FTlRSSUVTXTsKKworICB2b2lkICpvc01vcmVDb3JlKGludCBzaXplKQorICB7CisgICAgdm9pZCAqcHRyID0gMDsKKyAgICBzdGF0aWMgdm9pZCAqc2Jya190b3AgPSAwOworCisgICAgaWYgKHNpemUgPiAwKQorICAgIHsKKyAgICAgIGlmIChzaXplIDwgTUlOSU1VTV9NT1JFQ09SRV9TSVpFKQorICAgICAgICAgc2l6ZSA9IE1JTklNVU1fTU9SRUNPUkVfU0laRTsKKyAgICAgIGlmIChDdXJyZW50RXhlY3V0aW9uTGV2ZWwoKSA9PSBrVGFza0xldmVsKQorICAgICAgICAgcHRyID0gUG9vbEFsbG9jYXRlUmVzaWRlbnQoc2l6ZSArIFJNX1BBR0VfU0laRSwgMCk7CisgICAgICBpZiAocHRyID09IDApCisgICAgICB7CisgICAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICAgIH0KKyAgICAgIC8vIHNhdmUgcHRycyBzbyB0aGV5IGNhbiBiZSBmcmVlZCBkdXJpbmcgY2xlYW51cAorICAgICAgb3VyX29zX3Bvb2xzW25leHRfb3NfcG9vbF0gPSBwdHI7CisgICAgICBuZXh0X29zX3Bvb2wrKzsKKyAgICAgIHB0ciA9ICh2b2lkICopICgoKChzaXplX3QpIHB0cikgKyBSTV9QQUdFX01BU0spICYgflJNX1BBR0VfTUFTSyk7CisgICAgICBzYnJrX3RvcCA9IChjaGFyICopIHB0ciArIHNpemU7CisgICAgICByZXR1cm4gcHRyOworICAgIH0KKyAgICBlbHNlIGlmIChzaXplIDwgMCkKKyAgICB7CisgICAgICAvLyB3ZSBkb24ndCBjdXJyZW50bHkgc3VwcG9ydCBzaHJpbmsgYmVoYXZpb3IKKyAgICAgIHJldHVybiAodm9pZCAqKSBNRkFJTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgIHJldHVybiBzYnJrX3RvcDsKKyAgICB9CisgIH0KKworICAvLyBjbGVhbnVwIGFueSBhbGxvY2F0ZWQgbWVtb3J5IHBvb2xzCisgIC8vIGNhbGxlZCBhcyBsYXN0IHRoaW5nIGJlZm9yZSBzaHV0dGluZyBkb3duIGRyaXZlcgorCisgIHZvaWQgb3NDbGVhbnVwTWVtKHZvaWQpCisgIHsKKyAgICB2b2lkICoqcHRyOworCisgICAgZm9yIChwdHIgPSBvdXJfb3NfcG9vbHM7IHB0ciA8ICZvdXJfb3NfcG9vbHNbTUFYX1BPT0xfRU5UUklFU107IHB0cisrKQorICAgICAgaWYgKCpwdHIpCisgICAgICB7CisgICAgICAgICBQb29sRGVhbGxvY2F0ZSgqcHRyKTsKKyAgICAgICAgICpwdHIgPSAwOworICAgICAgfQorICB9CisKKyovCisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK0hpc3Rvcnk6CisgICAgVjIuOC4zIFRodSBTZXAgMjIgMTE6MTY6MzIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZCBtYXhfZm9vdHByaW50IGZ1bmN0aW9ucworICAgICAgKiBFbnN1cmUgYWxsIGFwcHJvcHJpYXRlIGxpdGVyYWxzIGFyZSBzaXplX3QKKyAgICAgICogRml4IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIHByb2JsZW0gZm9yIHNvbWUgI2RlZmluZSBzZXR0aW5ncworICAgICAgKiBBdm9pZCBjb25jYXRlbmF0aW5nIHNlZ21lbnRzIHdpdGggdGhlIG9uZSBwcm92aWRlZAorICAgICAgICBpbiBjcmVhdGVfbXNwYWNlX3dpdGhfYmFzZQorICAgICAgKiBSZW5hbWUgc29tZSB2YXJpYWJsZXMgdG8gYXZvaWQgY29tcGlsZXIgc2hhZG93aW5nIHdhcm5pbmdzCisgICAgICAqIFVzZSBleHBsaWNpdCBsb2NrIGluaXRpYWxpemF0aW9uLgorICAgICAgKiBCZXR0ZXIgaGFuZGxpbmcgb2Ygc2JyayBpbnRlcmZlcmVuY2UuCisgICAgICAqIFNpbXBsaWZ5IGFuZCBmaXggc2VnbWVudCBpbnNlcnRpb24sIHRyaW1taW5nIGFuZCBtc3BhY2VfZGVzdHJveQorICAgICAgKiBSZWluc3RhdGUgUkVBTExPQ19aRVJPX0JZVEVTX0ZSRUVTIG9wdGlvbiBmcm9tIDIuNy54CisgICAgICAqIFRoYW5rcyBlc3BlY2lhbGx5IHRvIERlbm5pcyBGbGFuYWdhbiBmb3IgaGVscCBvbiB0aGVzZS4KKworICAgIFYyLjguMiBTdW4gSnVuIDEyIDE2OjAxOjEwIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBGaXggbWVtYWxpZ24gYnJhY2UgZXJyb3IuCisKKyAgICBWMi44LjEgV2VkIEp1biAgOCAxNjoxMTo0NiAyMDA1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IGltcHJvcGVyICNlbmRpZiBuZXN0aW5nIGluIEMrKworICAgICAgKiBBZGQgZXhwbGljaXQgY2FzdHMgbmVlZGVkIGZvciBDKysKKworICAgIFYyLjguMCBNb24gTWF5IDMwIDE0OjA5OjAyIDIwMDUgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBVc2UgdHJlZXMgZm9yIGxhcmdlIGJpbnMKKyAgICAgICogU3VwcG9ydCBtc3BhY2VzCisgICAgICAqIFVzZSBzZWdtZW50cyB0byB1bmlmeSBzYnJrLWJhc2VkIGFuZCBtbWFwLWJhc2VkIHN5c3RlbSBhbGxvY2F0aW9uLAorICAgICAgICByZW1vdmluZyBuZWVkIGZvciBlbXVsYXRpb24gb24gbW9zdCBwbGF0Zm9ybXMgd2l0aG91dCBzYnJrLgorICAgICAgKiBEZWZhdWx0IHNhZmV0eSBjaGVja3MKKyAgICAgICogT3B0aW9uYWwgZm9vdGVyIGNoZWNrcy4gVGhhbmtzIHRvIFdpbGxpYW0gUm9iZXJ0c29uIGZvciB0aGUgaWRlYS4KKyAgICAgICogSW50ZXJuYWwgY29kZSByZWZhY3RvcmluZworICAgICAgKiBJbmNvcnBvcmF0ZSBzdWdnZXN0aW9ucyBhbmQgcGxhdGZvcm0tc3BlY2lmaWMgY2hhbmdlcy4KKyAgICAgICAgVGhhbmtzIHRvIERlbm5pcyBGbGFuYWdhbiwgQ29saW4gUGx1bWIsIE5pYWxsIERvdWdsYXMsCisgICAgICAgIEFhcm9uIEJhY2htYW5uLCAgRW1lcnkgQmVyZ2VyLCBhbmQgb3RoZXJzLgorICAgICAgKiBTcGVlZCB1cCBub24tZmFzdGJpbiBwcm9jZXNzaW5nIGVub3VnaCB0byByZW1vdmUgZmFzdGJpbnMuCisgICAgICAqIFJlbW92ZSB1c2VsZXNzIGNmcmVlKCkgdG8gYXZvaWQgY29uZmxpY3RzIHdpdGggb3RoZXIgYXBwcy4KKyAgICAgICogUmVtb3ZlIGludGVybmFsIG1lbWNweSwgbWVtc2V0LiBDb21waWxlcnMgaGFuZGxlIGJ1aWx0aW5zIGJldHRlci4KKyAgICAgICogUmVtb3ZlIHNvbWUgb3B0aW9ucyB0aGF0IG5vIG9uZSBldmVyIHVzZWQgYW5kIHJlbmFtZSBvdGhlcnMuCisKKyAgICBWMi43LjIgU2F0IEF1ZyAxNyAwOTowNzozMCAyMDAyICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4IG1hbGxvY19zdGF0ZSBiaXRtYXAgYXJyYXkgbWlzZGVjbGFyYXRpb24KKworICAgIFYyLjcuMSBUaHUgSnVsIDI1IDEwOjU4OjAzIDIwMDIgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiBBbGxvdyB0dW5pbmcgb2YgRklSU1RfU09SVEVEX0JJTl9TSVpFCisgICAgICAqIFVzZSBQVFJfVUlOVCBhcyB0eXBlIGZvciBhbGwgcHRyLT5pbnQgY2FzdHMuIFRoYW5rcyB0byBKb2huIEJlbG1vbnRlLgorICAgICAgKiBCZXR0ZXIgZGV0ZWN0aW9uIGFuZCBzdXBwb3J0IGZvciBub24tY29udGlndW91c25lc3Mgb2YgTU9SRUNPUkUuCisgICAgICAgIFRoYW5rcyB0byBBbmRyZWFzIE11ZWxsZXIsIENvbmFsIFdhbHNoLCBhbmQgV29sZnJhbSBHbG9nZXIKKyAgICAgICogQnlwYXNzIG1vc3Qgb2YgbWFsbG9jIGlmIG5vIGZyZWVzLiBUaGFua3MgVG8gRW1lcnkgQmVyZ2VyLgorICAgICAgKiBGaXggZnJlZWluZyBvZiBvbGQgdG9wIG5vbi1jb250aWd1b3VzIGNodW5rIGltIHN5c21hbGxvYy4KKyAgICAgICogUmFpc2VkIGRlZmF1bHQgdHJpbSBhbmQgbWFwIHRocmVzaG9sZHMgdG8gMjU2Sy4KKyAgICAgICogRml4IG1tYXAtcmVsYXRlZCAjZGVmaW5lcy4gVGhhbmtzIHRvIEx1Ym9zIEx1bmFrLgorICAgICAgKiBGaXggY29weSBtYWNyb3M7IGFkZGVkIExBQ0tTX0ZDTlRMX0guIFRoYW5rcyB0byBOZWFsIFdhbGZpZWxkLgorICAgICAgKiBCcmFuY2gtZnJlZSBiaW4gY2FsY3VsYXRpb24KKyAgICAgICogRGVmYXVsdCB0cmltIGFuZCBtbWFwIHRocmVzaG9sZHMgbm93IDI1NksuCisKKyAgICBWMi43LjAgU3VuIE1hciAxMSAxNDoxNDowNiAyMDAxICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50cm9kdWNlIGluZGVwZW5kZW50X2NvbWFsbG9jIGFuZCBpbmRlcGVuZGVudF9jYWxsb2MuCisgICAgICAgIFRoYW5rcyB0byBNaWNoYWVsIFBhY2hvcyBmb3IgbW90aXZhdGlvbiBhbmQgaGVscC4KKyAgICAgICogTWFrZSBvcHRpb25hbCAuaCBmaWxlIGF2YWlsYWJsZQorICAgICAgKiBBbGxvdyA+IDJHQiByZXF1ZXN0cyBvbiAzMmJpdCBzeXN0ZW1zLgorICAgICAgKiBuZXcgV0lOMzIgc2JyaywgbW1hcCwgbXVubWFwLCBsb2NrIGNvZGUgZnJvbSA8V2FsdGVyQEdlTmVTeXMtZS5kZT4uCisgICAgICAgIFRoYW5rcyBhbHNvIHRvIEFuZHJlYXMgTXVlbGxlciA8YS5tdWVsbGVyIGF0IHBhcmFkYXRlYy5kZT4sCisgICAgICAgIGFuZCBBbm9ueW1vdXMuCisgICAgICAqIEFsbG93IG92ZXJyaWRlIG9mIE1BTExPQ19BTElHTk1FTlQgKFRoYW5rcyB0byBSdXVkIFdhaWogZm9yCisgICAgICAgIGhlbHBpbmcgdGVzdCB0aGlzLikKKyAgICAgICogbWVtYWxpZ246IGNoZWNrIGFsaWdubWVudCBhcmcKKyAgICAgICogcmVhbGxvYzogZG9uJ3QgdHJ5IHRvIHNoaWZ0IGNodW5rcyBiYWNrd2FyZHMsIHNpbmNlIHRoaXMKKyAgICAgICAgbGVhZHMgdG8gIG1vcmUgZnJhZ21lbnRhdGlvbiBpbiBzb21lIHByb2dyYW1zIGFuZCBkb2Vzbid0CisgICAgICAgIHNlZW0gdG8gaGVscCBpbiBhbnkgb3RoZXJzLgorICAgICAgKiBDb2xsZWN0IGFsbCBjYXNlcyBpbiBtYWxsb2MgcmVxdWlyaW5nIHN5c3RlbSBtZW1vcnkgaW50byBzeXNtYWxsb2MKKyAgICAgICogVXNlIG1tYXAgYXMgYmFja3VwIHRvIHNicmsKKyAgICAgICogUGxhY2UgYWxsIGludGVybmFsIHN0YXRlIGluIG1hbGxvY19zdGF0ZQorICAgICAgKiBJbnRyb2R1Y2UgZmFzdGJpbnMgKGFsdGhvdWdoIHNpbWlsYXIgdG8gMi41LjEpCisgICAgICAqIE1hbnkgbWlub3IgdHVuaW5ncyBhbmQgY29zbWV0aWMgaW1wcm92ZW1lbnRzCisgICAgICAqIEludHJvZHVjZSBVU0VfUFVCTElDX01BTExPQ19XUkFQUEVSUywgVVNFX01BTExPQ19MT0NLCisgICAgICAqIEludHJvZHVjZSBNQUxMT0NfRkFJTFVSRV9BQ1RJT04sIE1PUkVDT1JFX0NPTlRJR1VPVVMKKyAgICAgICAgVGhhbmtzIHRvIFRvbnkgRS4gQmVubmV0dCA8dGJlbm5ldHRAbnZpZGlhLmNvbT4gYW5kIG90aGVycy4KKyAgICAgICogSW5jbHVkZSBlcnJuby5oIHRvIHN1cHBvcnQgZGVmYXVsdCBmYWlsdXJlIGFjdGlvbi4KKworICAgIFYyLjYuNiBTdW4gRGVjICA1IDA3OjQyOjE5IDE5OTkgIERvdWcgTGVhICAoZGwgYXQgZ2VlKQorICAgICAgKiByZXR1cm4gbnVsbCBmb3IgbmVnYXRpdmUgYXJndW1lbnRzCisgICAgICAqIEFkZGVkIFNldmVyYWwgV0lOMzIgY2xlYW51cHMgZnJvbSBNYXJ0aW4gQy4gRm9uZyA8bWNmb25nIGF0IHlhaG9vLmNvbT4KKyAgICAgICAgICogQWRkICdMQUNLU19TWVNfUEFSQU1fSCcgZm9yIHRob3NlIHN5c3RlbXMgd2l0aG91dCAnc3lzL3BhcmFtLmgnCisgICAgICAgICAgKGUuZy4gV0lOMzIgcGxhdGZvcm1zKQorICAgICAgICAgKiBDbGVhbnVwIGhlYWRlciBmaWxlIGluY2x1c2lvbiBmb3IgV0lOMzIgcGxhdGZvcm1zCisgICAgICAgICAqIENsZWFudXAgY29kZSB0byBhdm9pZCBNaWNyb3NvZnQgVmlzdWFsIEMrKyBjb21waWxlciBjb21wbGFpbnRzCisgICAgICAgICAqIEFkZCAnVVNFX0RMX1BSRUZJWCcgdG8gcXVpY2tseSBhbGxvdyBjby1leGlzdGVuY2Ugd2l0aCBleGlzdGluZworICAgICAgICAgICBtZW1vcnkgYWxsb2NhdGlvbiByb3V0aW5lcworICAgICAgICAgKiBTZXQgJ21hbGxvY19nZXRwYWdlc2l6ZScgZm9yIFdJTjMyIHBsYXRmb3JtcyAobmVlZHMgbW9yZSB3b3JrKQorICAgICAgICAgKiBVc2UgJ2Fzc2VydCcgcmF0aGVyIHRoYW4gJ0FTU0VSVCcgaW4gV0lOMzIgY29kZSB0byBjb25mb3JtIHRvCisgICAgICAgICAgIHVzYWdlIG9mICdhc3NlcnQnIGluIG5vbi1XSU4zMiBjb2RlCisgICAgICAgICAqIEltcHJvdmUgV0lOMzIgJ3NicmsoKScgZW11bGF0aW9uJ3MgJ2ZpbmRSZWdpb24oKScgcm91dGluZSB0bworICAgICAgICAgICBhdm9pZCBpbmZpbml0ZSBsb29wCisgICAgICAqIEFsd2F5cyBjYWxsICdmUkVlKCknIHJhdGhlciB0aGFuICdmcmVlKCknCisKKyAgICBWMi42LjUgV2VkIEp1biAxNyAxNTo1NzozMSAxOTk4ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogRml4ZWQgb3JkZXJpbmcgcHJvYmxlbSB3aXRoIGJvdW5kYXJ5LXN0YW1waW5nCisKKyAgICBWMi42LjMgU3VuIE1heSAxOSAwODoxNzo1OCAxOTk2ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogQWRkZWQgcHZhbGxvYywgYXMgcmVjb21tZW5kZWQgYnkgSC5KLiBMaXUKKyAgICAgICogQWRkZWQgNjRiaXQgcG9pbnRlciBzdXBwb3J0IG1haW5seSBmcm9tIFdvbGZyYW0gR2xvZ2VyCisgICAgICAqIEFkZGVkIGFub255bW91c2x5IGRvbmF0ZWQgV0lOMzIgc2JyayBlbXVsYXRpb24KKyAgICAgICogTWFsbG9jLCBjYWxsb2MsIGdldHBhZ2VzaXplOiBhZGQgb3B0aW1pemF0aW9ucyBmcm9tIFJheW1vbmQgTmlqc3NlbgorICAgICAgKiBtYWxsb2NfZXh0ZW5kX3RvcDogZml4IG1hc2sgZXJyb3IgdGhhdCBjYXVzZWQgd2FzdGFnZSBhZnRlcgorICAgICAgICBmb3JlaWduIHNicmtzCisgICAgICAqIEFkZCBsaW51eCBtcmVtYXAgc3VwcG9ydCBjb2RlIGZyb20gSEogTGl1CisKKyAgICBWMi42LjIgVHVlIERlYyAgNSAwNjo1Mjo1NSAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogSW50ZWdyYXRlZCBtb3N0IGRvY3VtZW50YXRpb24gd2l0aCB0aGUgY29kZS4KKyAgICAgICogQWRkIHN1cHBvcnQgZm9yIG1tYXAsIHdpdGggaGVscCBmcm9tCisgICAgICAgIFdvbGZyYW0gR2xvZ2VyIChHbG9nZXJAbHJ6LnVuaS1tdWVuY2hlbi5kZSkuCisgICAgICAqIFVzZSBsYXN0X3JlbWFpbmRlciBpbiBtb3JlIGNhc2VzLgorICAgICAgKiBQYWNrIGJpbnMgdXNpbmcgaWRlYSBmcm9tICBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKyAgICAgICogVXNlIG9yZGVyZWQgYmlucyBpbnN0ZWFkIG9mIGJlc3QtZml0IHRocmVzaGhvbGQKKyAgICAgICogRWxpbWluYXRlIGJsb2NrLWxvY2FsIGRlY2xzIHRvIHNpbXBsaWZ5IHRyYWNpbmcgYW5kIGRlYnVnZ2luZy4KKyAgICAgICogU3VwcG9ydCBhbm90aGVyIGNhc2Ugb2YgcmVhbGxvYyB2aWEgbW92ZSBpbnRvIHRvcAorICAgICAgKiBGaXggZXJyb3Igb2NjdXJpbmcgd2hlbiBpbml0aWFsIHNicmtfYmFzZSBub3Qgd29yZC1hbGlnbmVkLgorICAgICAgKiBSZWx5IG9uIHBhZ2Ugc2l6ZSBmb3IgdW5pdHMgaW5zdGVhZCBvZiBTQlJLX1VOSVQgdG8KKyAgICAgICAgYXZvaWQgc3VycHJpc2VzIGFib3V0IHNicmsgYWxpZ25tZW50IGNvbnZlbnRpb25zLgorICAgICAgKiBBZGQgbWFsbGluZm8sIG1hbGxvcHQuIFRoYW5rcyB0byBSYXltb25kIE5panNzZW4KKyAgICAgICAgKHJheW1vbmRAZXMuZWxlLnR1ZS5ubCkgZm9yIHRoZSBzdWdnZXN0aW9uLgorICAgICAgKiBBZGQgYHBhZCcgYXJndW1lbnQgdG8gbWFsbG9jX3RyaW0gYW5kIHRvcF9wYWQgbWFsbG9wdCBwYXJhbWV0ZXIuCisgICAgICAqIE1vcmUgcHJlY2F1dGlvbnMgZm9yIGNhc2VzIHdoZXJlIG90aGVyIHJvdXRpbmVzIGNhbGwgc2JyaywKKyAgICAgICAgY291cnRlc3kgb2YgV29sZnJhbSBHbG9nZXIgKEdsb2dlckBscnoudW5pLW11ZW5jaGVuLmRlKS4KKyAgICAgICogQWRkZWQgbWFjcm9zIGV0Yy4sIGFsbG93aW5nIHVzZSBpbiBsaW51eCBsaWJjIGZyb20KKyAgICAgICAgSC5KLiBMdSAoaGpsQGdudS5haS5taXQuZWR1KQorICAgICAgKiBJbnZlcnRlZCB0aGlzIGhpc3RvcnkgbGlzdAorCisgICAgVjIuNi4xIFNhdCBEZWMgIDIgMTQ6MTA6NTcgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIFJlLXR1bmVkIGFuZCBmaXhlZCB0byBiZWhhdmUgbW9yZSBuaWNlbHkgd2l0aCBWMi42LjAgY2hhbmdlcy4KKyAgICAgICogUmVtb3ZlZCBhbGwgcHJlYWxsb2NhdGlvbiBjb2RlIHNpbmNlIHVuZGVyIGN1cnJlbnQgc2NoZW1lCisgICAgICAgIHRoZSB3b3JrIHJlcXVpcmVkIHRvIHVuZG8gYmFkIHByZWFsbG9jYXRpb25zIGV4Y2VlZHMKKyAgICAgICAgdGhlIHdvcmsgc2F2ZWQgaW4gZ29vZCBjYXNlcyBmb3IgbW9zdCB0ZXN0IHByb2dyYW1zLgorICAgICAgKiBObyBsb25nZXIgdXNlIHJldHVybiBsaXN0IG9yIHVuY29uc29saWRhdGVkIGJpbnMgc2luY2UKKyAgICAgICAgbm8gc2NoZW1lIHVzaW5nIHRoZW0gY29uc2lzdGVudGx5IG91dHBlcmZvcm1zIHRob3NlIHRoYXQgZG9uJ3QKKyAgICAgICAgZ2l2ZW4gYWJvdmUgY2hhbmdlcy4KKyAgICAgICogVXNlIGJlc3QgZml0IGZvciB2ZXJ5IGxhcmdlIGNodW5rcyB0byBwcmV2ZW50IHNvbWUgd29yc3QtY2FzZXMuCisgICAgICAqIEFkZGVkIHNvbWUgc3VwcG9ydCBmb3IgZGVidWdnaW5nCisKKyAgICBWMi42LjAgU2F0IE5vdiAgNCAwNzowNToyMyAxOTk1ICBEb3VnIExlYSAgKGRsIGF0IGdlZSkKKyAgICAgICogUmVtb3ZlZCBmb290ZXJzIHdoZW4gY2h1bmtzIGFyZSBpbiB1c2UuIFRoYW5rcyB0bworICAgICAgICBQYXVsIFdpbHNvbiAod2lsc29uQGNzLnRleGFzLmVkdSkgZm9yIHRoZSBzdWdnZXN0aW9uLgorCisgICAgVjIuNS40IFdlZCBOb3YgIDEgMDc6NTQ6NTEgMTk5NSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisgICAgICAqIEFkZGVkIG1hbGxvY190cmltLCB3aXRoIGhlbHAgZnJvbSBXb2xmcmFtIEdsb2dlcgorICAgICAgICAod21nbG9ARGVudC5NRUQuVW5pLU11ZW5jaGVuLkRFKS4KKworICAgIFYyLjUuMyBUdWUgQXByIDI2IDEwOjE2OjAxIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKworICAgIFYyLjUuMiBUdWUgQXByICA1IDE2OjIwOjQwIDE5OTQgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogcmVhbGxvYzogdHJ5IHRvIGV4cGFuZCBpbiBib3RoIGRpcmVjdGlvbnMKKyAgICAgICogbWFsbG9jOiBzd2FwIG9yZGVyIG9mIGNsZWFuLWJpbiBzdHJhdGVneTsKKyAgICAgICogcmVhbGxvYzogb25seSBjb25kaXRpb25hbGx5IGV4cGFuZCBiYWNrd2FyZHMKKyAgICAgICogVHJ5IG5vdCB0byBzY2F2ZW5nZSB1c2VkIGJpbnMKKyAgICAgICogVXNlIGJpbiBjb3VudHMgYXMgYSBndWlkZSB0byBwcmVhbGxvY2F0aW9uCisgICAgICAqIE9jY2FzaW9uYWxseSBiaW4gcmV0dXJuIGxpc3QgY2h1bmtzIGluIGZpcnN0IHNjYW4KKyAgICAgICogQWRkIGEgZmV3IG9wdGltaXphdGlvbnMgZnJvbSBjb2xpbkBueXgxMC5jcy5kdS5lZHUKKworICAgIFYyLjUuMSBTYXQgQXVnIDE0IDE1OjQwOjQzIDE5OTMgIERvdWcgTGVhICAoZGwgYXQgZykKKyAgICAgICogZmFzdGVyIGJpbiBjb21wdXRhdGlvbiAmIHNsaWdodGx5IGRpZmZlcmVudCBiaW5uaW5nCisgICAgICAqIG1lcmdlZCBhbGwgY29uc29saWRhdGlvbnMgdG8gb25lIHBhcnQgb2YgbWFsbG9jIHByb3BlcgorICAgICAgICAgKGVsaW1pbmF0aW5nIG9sZCBtYWxsb2NfZmluZF9zcGFjZSAmIG1hbGxvY19jbGVhbl9iaW4pCisgICAgICAqIFNjYW4gMiByZXR1cm5zIGNodW5rcyAobm90IGp1c3QgMSkKKyAgICAgICogUHJvcGFnYXRlIGZhaWx1cmUgaW4gcmVhbGxvYyBpZiBtYWxsb2MgcmV0dXJucyAwCisgICAgICAqIEFkZCBzdHVmZiB0byBhbGxvdyBjb21waWxhdGlvbiBvbiBub24tQU5TSSBjb21waWxlcnMKKyAgICAgICAgICBmcm9tIGtwdkByZXNlYXJjaC5hdHQuY29tCisKKyAgICBWMi41IFNhdCBBdWcgIDcgMDc6NDE6NTkgMTk5MyAgRG91ZyBMZWEgIChkbCBhdCBnLm9zd2Vnby5lZHUpCisgICAgICAqIHJlbW92ZWQgcG90ZW50aWFsIGZvciBvZGQgYWRkcmVzcyBhY2Nlc3MgaW4gcHJldl9jaHVuaworICAgICAgKiByZW1vdmVkIGRlcGVuZGVuY3kgb24gZ2V0cGFnZXNpemUuaAorICAgICAgKiBtaXNjIGNvc21ldGljcyBhbmQgYSBiaXQgbW9yZSBpbnRlcm5hbCBkb2N1bWVudGF0aW9uCisgICAgICAqIGFudGljb3NtZXRpY3M6IG1hbmdsZWQgbmFtZXMgaW4gbWFjcm9zIHRvIGV2YWRlIGRlYnVnZ2VyIHN0cmFuZ2VuZXNzCisgICAgICAqIHRlc3RlZCBvbiBzcGFyYywgaHAtNzAwLCBkZWMtbWlwcywgcnM2MDAwCisgICAgICAgICAgd2l0aCBnY2MgJiBuYXRpdmUgY2MgKGhwLCBkZWMgb25seSkgYWxsb3dpbmcKKyAgICAgICAgICBEZXRsZWZzICYgWm9ybiBjb21wYXJpc29uIHN0dWR5IChpbiBTSUdQTEFOIE5vdGljZXMuKQorCisgICAgVHJpYWwgdmVyc2lvbiBGcmkgQXVnIDI4IDEzOjE0OjI5IDE5OTIgIERvdWcgTGVhICAoZGwgYXQgZy5vc3dlZ28uZWR1KQorICAgICAgKiBCYXNlZCBsb29zZWx5IG9uIGxpYmcrKy0xLjJYIG1hbGxvYy4gKEl0IHJldGFpbnMgc29tZSBvZiB0aGUgb3ZlcmFsbAorICAgICAgICAgc3RydWN0dXJlIG9mIG9sZCB2ZXJzaW9uLCAgYnV0IG1vc3QgZGV0YWlscyBkaWZmZXIuKQorIAorKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2RsbWFsbG9jLmggYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1YjVlMWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kbG1hbGxvYy5oCkBAIC0wLDAgKzEsNjQwIEBACisvKgorICBEZWZhdWx0IGhlYWRlciBmaWxlIGZvciBtYWxsb2MtMi44LngsIHdyaXR0ZW4gYnkgRG91ZyBMZWEKKyAgYW5kIHJlbGVhc2VkIHRvIHRoZSBwdWJsaWMgZG9tYWluLCBhcyBleHBsYWluZWQgYXQKKyAgaHR0cDovL2NyZWF0aXZlY29tbW9ucy5vcmcvbGljZW5zZXMvcHVibGljZG9tYWluLiAKKyAKKyAgbGFzdCB1cGRhdGU6IE1vbiBBdWcgMTUgMDg6NTU6NTIgMjAwNSAgRG91ZyBMZWEgIChkbCBhdCBnZWUpCisKKyAgVGhpcyBoZWFkZXIgaXMgZm9yIEFOU0kgQy9DKysgb25seS4gIFlvdSBjYW4gc2V0IGFueSBvZgorICB0aGUgZm9sbG93aW5nICNkZWZpbmVzIGJlZm9yZSBpbmNsdWRpbmc6CisKKyAgKiBJZiBVU0VfRExfUFJFRklYIGlzIGRlZmluZWQsIGl0IGlzIGFzc3VtZWQgdGhhdCBtYWxsb2MuYyAKKyAgICB3YXMgYWxzbyBjb21waWxlZCB3aXRoIHRoaXMgb3B0aW9uLCBzbyBhbGwgcm91dGluZXMKKyAgICBoYXZlIG5hbWVzIHN0YXJ0aW5nIHdpdGggImRsIi4KKworICAqIElmIEhBVkVfVVNSX0lOQ0xVREVfTUFMTE9DX0ggaXMgZGVmaW5lZCwgaXQgaXMgYXNzdW1lZCB0aGF0IHRoaXMKKyAgICBmaWxlIHdpbGwgYmUgI2luY2x1ZGVkIEFGVEVSIDxtYWxsb2MuaD4uIFRoaXMgaXMgbmVlZGVkIG9ubHkgaWYKKyAgICB5b3VyIHN5c3RlbSBkZWZpbmVzIGEgc3RydWN0IG1hbGxpbmZvIHRoYXQgaXMgaW5jb21wYXRpYmxlIHdpdGggdGhlCisgICAgc3RhbmRhcmQgb25lIGRlY2xhcmVkIGhlcmUuICBPdGhlcndpc2UsIHlvdSBjYW4gaW5jbHVkZSB0aGlzIGZpbGUKKyAgICBJTlNURUFEIG9mIHlvdXIgc3lzdGVtIHN5c3RlbSA8bWFsbG9jLmg+LiAgQXQgbGVhc3Qgb24gQU5TSSwgYWxsCisgICAgZGVjbGFyYXRpb25zIHNob3VsZCBiZSBjb21wYXRpYmxlIHdpdGggc3lzdGVtIHZlcnNpb25zCisKKyAgKiBJZiBNU1BBQ0VTIGlzIGRlZmluZWQsIGRlY2xhcmF0aW9ucyBmb3IgbXNwYWNlIHZlcnNpb25zIGFyZSBpbmNsdWRlZC4KKyovCisKKyNpZm5kZWYgTUFMTE9DXzI4MF9ICisjZGVmaW5lIE1BTExPQ18yODBfSAorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4gICAvKiBmb3Igc2l6ZV90ICovCisKKyNpZiAhT05MWV9NU1BBQ0VTCisKKy8qIENoZWNrIGFuIGFkZGl0aW9uYWwgbWFjcm8gZm9yIHRoZSBmaXZlIHByaW1hcnkgZnVuY3Rpb25zICovCisjaWYgIWRlZmluZWQoVVNFX0RMX1BSRUZJWCkgfHwgIWRlZmluZWQoTUFMTE9DX0xFQUtfQ0hFQ0spIAorI2RlZmluZSBkbGNhbGxvYyAgICAgICAgICAgICAgIGNhbGxvYworI2RlZmluZSBkbGZyZWUgICAgICAgICAgICAgICAgIGZyZWUKKyNkZWZpbmUgZGxtYWxsb2MgICAgICAgICAgICAgICBtYWxsb2MKKyNkZWZpbmUgZGxtZW1hbGlnbiAgICAgICAgICAgICBtZW1hbGlnbgorI2RlZmluZSBkbHJlYWxsb2MgICAgICAgICAgICAgIHJlYWxsb2MKKyNlbmRpZgorCisjaWZuZGVmIFVTRV9ETF9QUkVGSVgKKyNkZWZpbmUgZGx2YWxsb2MgICAgICAgICAgICAgICB2YWxsb2MKKyNkZWZpbmUgZGxwdmFsbG9jICAgICAgICAgICAgICBwdmFsbG9jCisjZGVmaW5lIGRsbWFsbGluZm8gICAgICAgICAgICAgbWFsbGluZm8KKyNkZWZpbmUgZGxtYWxsb3B0ICAgICAgICAgICAgICBtYWxsb3B0CisjZGVmaW5lIGRsbWFsbG9jX3RyaW0gICAgICAgICAgbWFsbG9jX3RyaW0KKyNkZWZpbmUgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzCisjZGVmaW5lIGRsbWFsbG9jX3dhbGtfaGVhcCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFsbG9jX3dhbGtfaGVhcAorI2RlZmluZSBkbG1hbGxvY19zdGF0cyAgICAgICAgIG1hbGxvY19zdGF0cworI2RlZmluZSBkbG1hbGxvY191c2FibGVfc2l6ZSAgIG1hbGxvY191c2FibGVfc2l6ZQorI2RlZmluZSBkbG1hbGxvY19mb290cHJpbnQgICAgIG1hbGxvY19mb290cHJpbnQKKyNkZWZpbmUgZGxtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50CisjZGVmaW5lIGRsbWFsbG9jX21heF9mb290cHJpbnQgbWFsbG9jX21heF9mb290cHJpbnQKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jYWxsb2MgICBpbmRlcGVuZGVudF9jYWxsb2MKKyNkZWZpbmUgZGxpbmRlcGVuZGVudF9jb21hbGxvYyBpbmRlcGVuZGVudF9jb21hbGxvYworI2VuZGlmIC8qIFVTRV9ETF9QUkVGSVggKi8KKworCisvKgorICBtYWxsb2Moc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgbmV3bHkgYWxsb2NhdGVkIGNodW5rIG9mIGF0IGxlYXN0IG4gYnl0ZXMsIG9yCisgIG51bGwgaWYgbm8gc3BhY2UgaXMgYXZhaWxhYmxlLCBpbiB3aGljaCBjYXNlIGVycm5vIGlzIHNldCB0byBFTk9NRU0KKyAgb24gQU5TSSBDIHN5c3RlbXMuCisKKyAgSWYgbiBpcyB6ZXJvLCBtYWxsb2MgcmV0dXJucyBhIG1pbmltdW0tc2l6ZWQgY2h1bmsuIChUaGUgbWluaW11bQorICBzaXplIGlzIDE2IGJ5dGVzIG9uIG1vc3QgMzJiaXQgc3lzdGVtcywgYW5kIDMyIGJ5dGVzIG9uIDY0Yml0CisgIHN5c3RlbXMuKSAgTm90ZSB0aGF0IHNpemVfdCBpcyBhbiB1bnNpZ25lZCB0eXBlLCBzbyBjYWxscyB3aXRoCisgIGFyZ3VtZW50cyB0aGF0IHdvdWxkIGJlIG5lZ2F0aXZlIGlmIHNpZ25lZCBhcmUgaW50ZXJwcmV0ZWQgYXMKKyAgcmVxdWVzdHMgZm9yIGh1Z2UgYW1vdW50cyBvZiBzcGFjZSwgd2hpY2ggd2lsbCBvZnRlbiBmYWlsLiBUaGUKKyAgbWF4aW11bSBzdXBwb3J0ZWQgdmFsdWUgb2YgbiBkaWZmZXJzIGFjcm9zcyBzeXN0ZW1zLCBidXQgaXMgaW4gYWxsCisgIGNhc2VzIGxlc3MgdGhhbiB0aGUgbWF4aW11bSByZXByZXNlbnRhYmxlIHZhbHVlIG9mIGEgc2l6ZV90LgorKi8KK3ZvaWQqIGRsbWFsbG9jKHNpemVfdCk7CisKKy8qCisgIGZyZWUodm9pZCogcCkKKyAgUmVsZWFzZXMgdGhlIGNodW5rIG9mIG1lbW9yeSBwb2ludGVkIHRvIGJ5IHAsIHRoYXQgaGFkIGJlZW4gcHJldmlvdXNseQorICBhbGxvY2F0ZWQgdXNpbmcgbWFsbG9jIG9yIGEgcmVsYXRlZCByb3V0aW5lIHN1Y2ggYXMgcmVhbGxvYy4KKyAgSXQgaGFzIG5vIGVmZmVjdCBpZiBwIGlzIG51bGwuIElmIHAgd2FzIG5vdCBtYWxsb2NlZCBvciBhbHJlYWR5CisgIGZyZWVkLCBmcmVlKHApIHdpbGwgYnkgZGVmYXVsdCBjdWFzZSB0aGUgY3VycmVudCBwcm9ncmFtIHRvIGFib3J0LgorKi8KK3ZvaWQgIGRsZnJlZSh2b2lkKik7CisKKy8qCisgIGNhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1lbnRfc2l6ZSk7CisgIFJldHVybnMgYSBwb2ludGVyIHRvIG5fZWxlbWVudHMgKiBlbGVtZW50X3NpemUgYnl0ZXMsIHdpdGggYWxsIGxvY2F0aW9ucworICBzZXQgdG8gemVyby4KKyovCit2b2lkKiBkbGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CisKKy8qCisgIHJlYWxsb2Modm9pZCogcCwgc2l6ZV90IG4pCisgIFJldHVybnMgYSBwb2ludGVyIHRvIGEgY2h1bmsgb2Ygc2l6ZSBuIHRoYXQgY29udGFpbnMgdGhlIHNhbWUgZGF0YQorICBhcyBkb2VzIGNodW5rIHAgdXAgdG8gdGhlIG1pbmltdW0gb2YgKG4sIHAncyBzaXplKSBieXRlcywgb3IgbnVsbAorICBpZiBubyBzcGFjZSBpcyBhdmFpbGFibGUuCisKKyAgVGhlIHJldHVybmVkIHBvaW50ZXIgbWF5IG9yIG1heSBub3QgYmUgdGhlIHNhbWUgYXMgcC4gVGhlIGFsZ29yaXRobQorICBwcmVmZXJzIGV4dGVuZGluZyBwIGluIG1vc3QgY2FzZXMgd2hlbiBwb3NzaWJsZSwgb3RoZXJ3aXNlIGl0CisgIGVtcGxveXMgdGhlIGVxdWl2YWxlbnQgb2YgYSBtYWxsb2MtY29weS1mcmVlIHNlcXVlbmNlLgorCisgIElmIHAgaXMgbnVsbCwgcmVhbGxvYyBpcyBlcXVpdmFsZW50IHRvIG1hbGxvYy4KKworICBJZiBzcGFjZSBpcyBub3QgYXZhaWxhYmxlLCByZWFsbG9jIHJldHVybnMgbnVsbCwgZXJybm8gaXMgc2V0IChpZiBvbgorICBBTlNJKSBhbmQgcCBpcyBOT1QgZnJlZWQuCisKKyAgaWYgbiBpcyBmb3IgZmV3ZXIgYnl0ZXMgdGhhbiBhbHJlYWR5IGhlbGQgYnkgcCwgdGhlIG5ld2x5IHVudXNlZAorICBzcGFjZSBpcyBsb3BwZWQgb2ZmIGFuZCBmcmVlZCBpZiBwb3NzaWJsZS4gIHJlYWxsb2Mgd2l0aCBhIHNpemUKKyAgYXJndW1lbnQgb2YgemVybyAocmUpYWxsb2NhdGVzIGEgbWluaW11bS1zaXplZCBjaHVuay4KKworICBUaGUgb2xkIHVuaXggcmVhbGxvYyBjb252ZW50aW9uIG9mIGFsbG93aW5nIHRoZSBsYXN0LWZyZWUnZCBjaHVuaworICB0byBiZSB1c2VkIGFzIGFuIGFyZ3VtZW50IHRvIHJlYWxsb2MgaXMgbm90IHN1cHBvcnRlZC4KKyovCisKK3ZvaWQqIGRscmVhbGxvYyh2b2lkKiwgc2l6ZV90KTsKKworLyoKKyAgbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IG4pOworICBSZXR1cm5zIGEgcG9pbnRlciB0byBhIG5ld2x5IGFsbG9jYXRlZCBjaHVuayBvZiBuIGJ5dGVzLCBhbGlnbmVkCisgIGluIGFjY29yZCB3aXRoIHRoZSBhbGlnbm1lbnQgYXJndW1lbnQuCisKKyAgVGhlIGFsaWdubWVudCBhcmd1bWVudCBzaG91bGQgYmUgYSBwb3dlciBvZiB0d28uIElmIHRoZSBhcmd1bWVudCBpcworICBub3QgYSBwb3dlciBvZiB0d28sIHRoZSBuZWFyZXN0IGdyZWF0ZXIgcG93ZXIgaXMgdXNlZC4KKyAgOC1ieXRlIGFsaWdubWVudCBpcyBndWFyYW50ZWVkIGJ5IG5vcm1hbCBtYWxsb2MgY2FsbHMsIHNvIGRvbid0CisgIGJvdGhlciBjYWxsaW5nIG1lbWFsaWduIHdpdGggYW4gYXJndW1lbnQgb2YgOCBvciBsZXNzLgorCisgIE92ZXJyZWxpYW5jZSBvbiBtZW1hbGlnbiBpcyBhIHN1cmUgd2F5IHRvIGZyYWdtZW50IHNwYWNlLgorKi8KK3ZvaWQqIGRsbWVtYWxpZ24oc2l6ZV90LCBzaXplX3QpOworCisvKgorICB2YWxsb2Moc2l6ZV90IG4pOworICBFcXVpdmFsZW50IHRvIG1lbWFsaWduKHBhZ2VzaXplLCBuKSwgd2hlcmUgcGFnZXNpemUgaXMgdGhlIHBhZ2UKKyAgc2l6ZSBvZiB0aGUgc3lzdGVtLiBJZiB0aGUgcGFnZXNpemUgaXMgdW5rbm93biwgNDA5NiBpcyB1c2VkLgorKi8KK3ZvaWQqIGRsdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvcHQoaW50IHBhcmFtZXRlcl9udW1iZXIsIGludCBwYXJhbWV0ZXJfdmFsdWUpCisgIFNldHMgdHVuYWJsZSBwYXJhbWV0ZXJzIFRoZSBmb3JtYXQgaXMgdG8gcHJvdmlkZSBhCisgIChwYXJhbWV0ZXItbnVtYmVyLCBwYXJhbWV0ZXItdmFsdWUpIHBhaXIuICBtYWxsb3B0IHRoZW4gc2V0cyB0aGUKKyAgY29ycmVzcG9uZGluZyBwYXJhbWV0ZXIgdG8gdGhlIGFyZ3VtZW50IHZhbHVlIGlmIGl0IGNhbiAoaS5lLiwgc28KKyAgbG9uZyBhcyB0aGUgdmFsdWUgaXMgbWVhbmluZ2Z1bCksIGFuZCByZXR1cm5zIDEgaWYgc3VjY2Vzc2Z1bCBlbHNlCisgIDAuICBTVklEL1hQRy9BTlNJIGRlZmluZXMgZm91ciBzdGFuZGFyZCBwYXJhbSBudW1iZXJzIGZvciBtYWxsb3B0LAorICBub3JtYWxseSBkZWZpbmVkIGluIG1hbGxvYy5oLiAgTm9uZSBvZiB0aGVzZSBhcmUgdXNlIGluIHRoaXMgbWFsbG9jLAorICBzbyBzZXR0aW5nIHRoZW0gaGFzIG5vIGVmZmVjdC4gQnV0IHRoaXMgbWFsbG9jIGFsc28gc3VwcG9ydHMgb3RoZXIKKyAgb3B0aW9ucyBpbiBtYWxsb3B0OgorCisgIFN5bWJvbCAgICAgICAgICAgIHBhcmFtICMgIGRlZmF1bHQgICAgYWxsb3dlZCBwYXJhbSB2YWx1ZXMKKyAgTV9UUklNX1RIUkVTSE9MRCAgICAgLTEgICAyKjEwMjQqMTAyNCAgIGFueSAgICgtMVUgZGlzYWJsZXMgdHJpbW1pbmcpCisgIE1fR1JBTlVMQVJJVFkgICAgICAgIC0yICAgICBwYWdlIHNpemUgICBhbnkgcG93ZXIgb2YgMiA+PSBwYWdlIHNpemUKKyAgTV9NTUFQX1RIUkVTSE9MRCAgICAgLTMgICAgICAyNTYqMTAyNCAgIGFueSAgIChvciAwIGlmIG5vIE1NQVAgc3VwcG9ydCkKKyovCitpbnQgZGxtYWxsb3B0KGludCwgaW50KTsKKworI2RlZmluZSBNX1RSSU1fVEhSRVNIT0xEICAgICAoLTEpCisjZGVmaW5lIE1fR1JBTlVMQVJJVFkgICAgICAgICgtMikKKyNkZWZpbmUgTV9NTUFQX1RIUkVTSE9MRCAgICAgKC0zKQorCisKKy8qCisgIG1hbGxvY19mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4gIFRoZSB0b3RhbAorICBudW1iZXIgb2YgYnl0ZXMgYWxsb2NhdGVkIGJ5IG1hbGxvYywgcmVhbGxvYyBldGMuLCBpcyBsZXNzIHRoYW4gdGhpcworICB2YWx1ZS4gVW5saWtlIG1hbGxpbmZvLCB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25seSBhIHByZWNvbXB1dGVkCisgIHJlc3VsdCwgc28gY2FuIGJlIGNhbGxlZCBmcmVxdWVudGx5IHRvIG1vbml0b3IgbWVtb3J5IGNvbnN1bXB0aW9uLgorICBFdmVuIGlmIGxvY2tzIGFyZSBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwKKyAgc28gcmVzdWx0cyBtaWdodCBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfZm9vdHByaW50KCk7CisKKy8qCisgIG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQgdGhlIGhlYXAgaXMgYWxsb3dlZCB0byBvYnRhaW4KKyAgZnJvbSB0aGUgc3lzdGVtLiAgbWFsbG9jX2Zvb3RwcmludCgpIHNob3VsZCBhbHdheXMgcmV0dXJuIGEKKyAgc2l6ZSBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gbWF4X2FsbG93ZWRfZm9vdHByaW50LCB1bmxlc3MgdGhlCisgIG1heF9hbGxvd2VkX2Zvb3RwcmludCB3YXMgc2V0IHRvIGEgdmFsdWUgc21hbGxlciB0aGFuIHRoZQorICBmb290cHJpbnQgYXQgdGhlIHRpbWUuCisKKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBkbG1hbGxvYy5jIHdhcyBjb21waWxlZAorICB3aXRoIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQgc2V0LgorKi8KK3NpemVfdCBkbG1hbGxvY19tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKworLyoKKyAgbWFsbG9jX3NldF9tYXhfYWxsb3dlZF9mb290cHJpbnQoKTsKKyAgU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0aGF0IHRoZSBoZWFwIGlzIGFsbG93ZWQgdG8KKyAgb2J0YWluIGZyb20gdGhlIHN5c3RlbS4gIFRoZSBzaXplIHdpbGwgYmUgcm91bmRlZCB1cCB0byBhIHdob2xlCisgIHBhZ2UsIGFuZCB0aGUgcm91bmRlZCBudW1iZXIgd2lsbCBiZSByZXR1cm5lZCBmcm9tIGZ1dHVyZSBjYWxscworICB0byBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAorICBpcyBsYXJnZXIgdGhhbiB0aGUgY3VycmVudCBmb290cHJpbnQsIHRoZSBoZWFwIHdpbGwgbmV2ZXIgZ3JvdworICBsYXJnZXIgdGhhbiBtYXhfYWxsb3dlZF9mb290cHJpbnQuICBJZiB0aGUgbmV3IG1heF9hbGxvd2VkX2Zvb3RwcmludAorICBpcyBzbWFsbGVyIHRoYW4gdGhlIGN1cnJlbnQgZm9vdHByaW50LCB0aGUgaGVhcCB3aWxsIG5vdCBncm93CisgIGZ1cnRoZXIuCisKKyAgVGhpcyBmdW5jdGlvbiBpcyBvbmx5IGF2YWlsYWJsZSBpZiBkbG1hbGxvYy5jIHdhcyBjb21waWxlZAorICB3aXRoIFVTRV9NQVhfQUxMT1dFRF9GT09UUFJJTlQgc2V0LgorCisgIFRPRE86IHRyeSB0byBmb3JjZSB0aGUgaGVhcCB0byBnaXZlIHVwIG1lbW9yeSBpbiB0aGUgc2hyaW5rIGNhc2UsCisgICAgICAgIGFuZCB1cGRhdGUgdGhpcyBjb21tZW50IG9uY2UgdGhhdCBoYXBwZW5zLgorKi8KK3ZvaWQgZGxtYWxsb2Nfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChzaXplX3QgYnl0ZXMpOworCisvKgorICBtYWxsb2NfbWF4X2Zvb3RwcmludCgpOworICBSZXR1cm5zIHRoZSBtYXhpbXVtIG51bWJlciBvZiBieXRlcyBvYnRhaW5lZCBmcm9tIHRoZSBzeXN0ZW0uIFRoaXMKKyAgdmFsdWUgd2lsbCBiZSBncmVhdGVyIHRoYW4gY3VycmVudCBmb290cHJpbnQgaWYgZGVhbGxvY2F0ZWQgc3BhY2UKKyAgaGFzIGJlZW4gcmVjbGFpbWVkIGJ5IHRoZSBzeXN0ZW0uIFRoZSBwZWFrIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQKKyAgYnkgbWFsbG9jLCByZWFsbG9jIGV0Yy4sIGlzIGxlc3MgdGhhbiB0aGlzIHZhbHVlLiBVbmxpa2UgbWFsbGluZm8sCisgIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvbmx5IGEgcHJlY29tcHV0ZWQgcmVzdWx0LCBzbyBjYW4gYmUgY2FsbGVkCisgIGZyZXF1ZW50bHkgdG8gbW9uaXRvciBtZW1vcnkgY29uc3VtcHRpb24uICBFdmVuIGlmIGxvY2tzIGFyZQorICBvdGhlcndpc2UgZGVmaW5lZCwgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdCB1c2UgdGhlbSwgc28gcmVzdWx0cyBtaWdodAorICBub3QgYmUgdXAgdG8gZGF0ZS4KKyovCitzaXplX3QgZGxtYWxsb2NfbWF4X2Zvb3RwcmludCh2b2lkKTsKKworI2lmICFOT19NQUxMSU5GTworLyoKKyAgbWFsbGluZm8oKQorICBSZXR1cm5zIChieSBjb3B5KSBhIHN0cnVjdCBjb250YWluaW5nIHZhcmlvdXMgc3VtbWFyeSBzdGF0aXN0aWNzOgorCisgIGFyZW5hOiAgICAgY3VycmVudCB0b3RhbCBub24tbW1hcHBlZCBieXRlcyBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0KKyAgb3JkYmxrczogICB0aGUgbnVtYmVyIG9mIGZyZWUgY2h1bmtzCisgIHNtYmxrczogICAgYWx3YXlzIHplcm8uCisgIGhibGtzOiAgICAgY3VycmVudCBudW1iZXIgb2YgbW1hcHBlZCByZWdpb25zCisgIGhibGtoZDogICAgdG90YWwgYnl0ZXMgaGVsZCBpbiBtbWFwcGVkIHJlZ2lvbnMKKyAgdXNtYmxrczogICB0aGUgbWF4aW11bSB0b3RhbCBhbGxvY2F0ZWQgc3BhY2UuIFRoaXMgd2lsbCBiZSBncmVhdGVyCisgICAgICAgICAgICAgICAgdGhhbiBjdXJyZW50IHRvdGFsIGlmIHRyaW1taW5nIGhhcyBvY2N1cnJlZC4KKyAgZnNtYmxrczogICBhbHdheXMgemVybworICB1b3JkYmxrczogIGN1cnJlbnQgdG90YWwgYWxsb2NhdGVkIHNwYWNlIChub3JtYWwgb3IgbW1hcHBlZCkKKyAgZm9yZGJsa3M6ICB0b3RhbCBmcmVlIHNwYWNlCisgIGtlZXBjb3N0OiAgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIHRoYXQgY291bGQgaWRlYWxseSBiZSByZWxlYXNlZAorICAgICAgICAgICAgICAgYmFjayB0byBzeXN0ZW0gdmlhIG1hbGxvY190cmltLiAoImlkZWFsbHkiIG1lYW5zIHRoYXQKKyAgICAgICAgICAgICAgIGl0IGlnbm9yZXMgcGFnZSByZXN0cmljdGlvbnMgZXRjLikKKworICBCZWNhdXNlIHRoZXNlIGZpZWxkcyBhcmUgaW50cywgYnV0IGludGVybmFsIGJvb2trZWVwaW5nIG1heQorICBiZSBrZXB0IGFzIGxvbmdzLCB0aGUgcmVwb3J0ZWQgdmFsdWVzIG1heSB3cmFwIGFyb3VuZCB6ZXJvIGFuZAorICB0aHVzIGJlIGluYWNjdXJhdGUuCisqLworI2lmbmRlZiBIQVZFX1VTUl9JTkNMVURFX01BTExPQ19ICisjaWZuZGVmIF9NQUxMT0NfSF8KKyNpZm5kZWYgTUFMTElORk9fRklFTERfVFlQRQorI2RlZmluZSBNQUxMSU5GT19GSUVMRF9UWVBFIHNpemVfdAorI2VuZGlmIC8qIE1BTExJTkZPX0ZJRUxEX1RZUEUgKi8KK3N0cnVjdCBtYWxsaW5mbyB7CisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgYXJlbmE7ICAgIC8qIG5vbi1tbWFwcGVkIHNwYWNlIGFsbG9jYXRlZCBmcm9tIHN5c3RlbSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIG9yZGJsa3M7ICAvKiBudW1iZXIgb2YgZnJlZSBjaHVua3MgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxrczsgICAgLyogYWx3YXlzIDAgKi8KKyAgTUFMTElORk9fRklFTERfVFlQRSBoYmxraGQ7ICAgLyogc3BhY2UgaW4gbW1hcHBlZCByZWdpb25zICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgZnNtYmxrczsgIC8qIGFsd2F5cyAwICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUgdW9yZGJsa3M7IC8qIHRvdGFsIGFsbG9jYXRlZCBzcGFjZSAqLworICBNQUxMSU5GT19GSUVMRF9UWVBFIGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgIE1BTExJTkZPX0ZJRUxEX1RZUEUga2VlcGNvc3Q7IC8qIHJlbGVhc2FibGUgKHZpYSBtYWxsb2NfdHJpbSkgc3BhY2UgKi8KK307CisjZW5kaWYgIC8qIF9NQUxMT0NfSF8gKi8KKyNlbmRpZiAgLyogSEFWRV9VU1JfSU5DTFVERV9NQUxMT0NfSCAqLworCitzdHJ1Y3QgbWFsbGluZm8gZGxtYWxsaW5mbyh2b2lkKTsKKyNlbmRpZiAgLyogTk9fTUFMTElORk8gKi8KKworLyoKKyAgaW5kZXBlbmRlbnRfY2FsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbWVudF9zaXplLCB2b2lkKiBjaHVua3NbXSk7CisKKyAgaW5kZXBlbmRlbnRfY2FsbG9jIGlzIHNpbWlsYXIgdG8gY2FsbG9jLCBidXQgaW5zdGVhZCBvZiByZXR1cm5pbmcgYQorICBzaW5nbGUgY2xlYXJlZCBzcGFjZSwgaXQgcmV0dXJucyBhbiBhcnJheSBvZiBwb2ludGVycyB0byBuX2VsZW1lbnRzCisgIGluZGVwZW5kZW50IGVsZW1lbnRzIHRoYXQgY2FuIGhvbGQgY29udGVudHMgb2Ygc2l6ZSBlbGVtX3NpemUsIGVhY2gKKyAgb2Ygd2hpY2ggc3RhcnRzIG91dCBjbGVhcmVkLCBhbmQgY2FuIGJlIGluZGVwZW5kZW50bHkgZnJlZWQsCisgIHJlYWxsb2MnZWQgZXRjLiBUaGUgZWxlbWVudHMgYXJlIGd1YXJhbnRlZWQgdG8gYmUgYWRqYWNlbnRseQorICBhbGxvY2F0ZWQgKHRoaXMgaXMgbm90IGd1YXJhbnRlZWQgdG8gb2NjdXIgd2l0aCBtdWx0aXBsZSBjYWxsb2NzIG9yCisgIG1hbGxvY3MpLCB3aGljaCBtYXkgYWxzbyBpbXByb3ZlIGNhY2hlIGxvY2FsaXR5IGluIHNvbWUKKyAgYXBwbGljYXRpb25zLgorCisgIFRoZSAiY2h1bmtzIiBhcmd1bWVudCBpcyBvcHRpb25hbCAoaS5lLiwgbWF5IGJlIG51bGwsIHdoaWNoIGlzCisgIHByb2JhYmx5IHRoZSBtb3N0IHR5cGljYWwgdXNhZ2UpLiBJZiBpdCBpcyBudWxsLCB0aGUgcmV0dXJuZWQgYXJyYXkKKyAgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28gYmUgZnJlZWQgd2hlbiBpdCBpcworICBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkgbXVzdCBiZSBvZiBhdCBsZWFzdAorICBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlIHBvaW50ZXJzIHRvIHRoZQorICBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NhbGxvYyByZXR1cm5zIHRoaXMgcG9pbnRlciBhcnJheSwgb3IKKyAgbnVsbCBpZiB0aGUgYWxsb2NhdGlvbiBmYWlsZWQuICBJZiBuX2VsZW1lbnRzIGlzIHplcm8gYW5kICJjaHVua3MiCisgIGlzIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSByZWd1bGFyIGNhbGxvYyBhbmQgYXNzaWduIHBvaW50ZXJzIGludG8gdGhpcworICBzcGFjZSB0byByZXByZXNlbnQgZWxlbWVudHMuICAoSW4gdGhpcyBjYXNlIHRob3VnaCwgeW91IGNhbm5vdAorICBpbmRlcGVuZGVudGx5IGZyZWUgZWxlbWVudHMuKQorCisgIGluZGVwZW5kZW50X2NhbGxvYyBzaW1wbGlmaWVzIGFuZCBzcGVlZHMgdXAgaW1wbGVtZW50YXRpb25zIG9mIG1hbnkKKyAga2luZHMgb2YgcG9vbHMuICBJdCBtYXkgYWxzbyBiZSB1c2VmdWwgd2hlbiBjb25zdHJ1Y3RpbmcgbGFyZ2UgZGF0YQorICBzdHJ1Y3R1cmVzIHRoYXQgaW5pdGlhbGx5IGhhdmUgYSBmaXhlZCBudW1iZXIgb2YgZml4ZWQtc2l6ZWQgbm9kZXMsCisgIGJ1dCB0aGUgbnVtYmVyIGlzIG5vdCBrbm93biBhdCBjb21waWxlIHRpbWUsIGFuZCBzb21lIG9mIHRoZSBub2RlcworICBtYXkgbGF0ZXIgbmVlZCB0byBiZSBmcmVlZC4gRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IE5vZGUgeyBpbnQgaXRlbTsgc3RydWN0IE5vZGUqIG5leHQ7IH07CisKKyAgc3RydWN0IE5vZGUqIGJ1aWxkX2xpc3QoKSB7CisgICAgc3RydWN0IE5vZGUqKiBwb29sOworICAgIGludCBuID0gcmVhZF9udW1iZXJfb2Zfbm9kZXNfbmVlZGVkKCk7CisgICAgaWYgKG4gPD0gMCkgcmV0dXJuIDA7CisgICAgcG9vbCA9IChzdHJ1Y3QgTm9kZSoqKShpbmRlcGVuZGVudF9jYWxsb2Mobiwgc2l6ZW9mKHN0cnVjdCBOb2RlKSwgMCk7CisgICAgaWYgKHBvb2wgPT0gMCkgZGllKCk7CisgICAgLy8gb3JnYW5pemUgaW50byBhIGxpbmtlZCBsaXN0Li4uCisgICAgc3RydWN0IE5vZGUqIGZpcnN0ID0gcG9vbFswXTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgbi0xOyArK2kpCisgICAgICBwb29sW2ldLT5uZXh0ID0gcG9vbFtpKzFdOworICAgIGZyZWUocG9vbCk7ICAgICAvLyBDYW4gbm93IGZyZWUgdGhlIGFycmF5IChvciBub3QsIGlmIGl0IGlzIG5lZWRlZCBsYXRlcikKKyAgICByZXR1cm4gZmlyc3Q7CisgIH0KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jYWxsb2Moc2l6ZV90LCBzaXplX3QsIHZvaWQqKik7CisKKy8qCisgIGluZGVwZW5kZW50X2NvbWFsbG9jKHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3Qgc2l6ZXNbXSwgdm9pZCogY2h1bmtzW10pOworCisgIGluZGVwZW5kZW50X2NvbWFsbG9jIGFsbG9jYXRlcywgYWxsIGF0IG9uY2UsIGEgc2V0IG9mIG5fZWxlbWVudHMKKyAgY2h1bmtzIHdpdGggc2l6ZXMgaW5kaWNhdGVkIGluIHRoZSAic2l6ZXMiIGFycmF5LiAgICBJdCByZXR1cm5zCisgIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHRoZXNlIGVsZW1lbnRzLCBlYWNoIG9mIHdoaWNoIGNhbiBiZQorICBpbmRlcGVuZGVudGx5IGZyZWVkLCByZWFsbG9jJ2VkIGV0Yy4gVGhlIGVsZW1lbnRzIGFyZSBndWFyYW50ZWVkIHRvCisgIGJlIGFkamFjZW50bHkgYWxsb2NhdGVkICh0aGlzIGlzIG5vdCBndWFyYW50ZWVkIHRvIG9jY3VyIHdpdGgKKyAgbXVsdGlwbGUgY2FsbG9jcyBvciBtYWxsb2NzKSwgd2hpY2ggbWF5IGFsc28gaW1wcm92ZSBjYWNoZSBsb2NhbGl0eQorICBpbiBzb21lIGFwcGxpY2F0aW9ucy4KKworICBUaGUgImNodW5rcyIgYXJndW1lbnQgaXMgb3B0aW9uYWwgKGkuZS4sIG1heSBiZSBudWxsKS4gSWYgaXQgaXMgbnVsbAorICB0aGUgcmV0dXJuZWQgYXJyYXkgaXMgaXRzZWxmIGR5bmFtaWNhbGx5IGFsbG9jYXRlZCBhbmQgc2hvdWxkIGFsc28KKyAgYmUgZnJlZWQgd2hlbiBpdCBpcyBubyBsb25nZXIgbmVlZGVkLiBPdGhlcndpc2UsIHRoZSBjaHVua3MgYXJyYXkKKyAgbXVzdCBiZSBvZiBhdCBsZWFzdCBuX2VsZW1lbnRzIGluIGxlbmd0aC4gSXQgaXMgZmlsbGVkIGluIHdpdGggdGhlCisgIHBvaW50ZXJzIHRvIHRoZSBjaHVua3MuCisKKyAgSW4gZWl0aGVyIGNhc2UsIGluZGVwZW5kZW50X2NvbWFsbG9jIHJldHVybnMgdGhpcyBwb2ludGVyIGFycmF5LCBvcgorICBudWxsIGlmIHRoZSBhbGxvY2F0aW9uIGZhaWxlZC4gIElmIG5fZWxlbWVudHMgaXMgemVybyBhbmQgY2h1bmtzIGlzCisgIG51bGwsIGl0IHJldHVybnMgYSBjaHVuayByZXByZXNlbnRpbmcgYW4gYXJyYXkgd2l0aCB6ZXJvIGVsZW1lbnRzCisgICh3aGljaCBzaG91bGQgYmUgZnJlZWQgaWYgbm90IHdhbnRlZCkuCisKKyAgRWFjaCBlbGVtZW50IG11c3QgYmUgaW5kaXZpZHVhbGx5IGZyZWVkIHdoZW4gaXQgaXMgbm8gbG9uZ2VyCisgIG5lZWRlZC4gSWYgeW91J2QgbGlrZSB0byBpbnN0ZWFkIGJlIGFibGUgdG8gZnJlZSBhbGwgYXQgb25jZSwgeW91CisgIHNob3VsZCBpbnN0ZWFkIHVzZSBhIHNpbmdsZSByZWd1bGFyIG1hbGxvYywgYW5kIGFzc2lnbiBwb2ludGVycyBhdAorICBwYXJ0aWN1bGFyIG9mZnNldHMgaW4gdGhlIGFnZ3JlZ2F0ZSBzcGFjZS4gKEluIHRoaXMgY2FzZSB0aG91Z2gsIHlvdQorICBjYW5ub3QgaW5kZXBlbmRlbnRseSBmcmVlIGVsZW1lbnRzLikKKworICBpbmRlcGVuZGVudF9jb21hbGxhYyBkaWZmZXJzIGZyb20gaW5kZXBlbmRlbnRfY2FsbG9jIGluIHRoYXQgZWFjaAorICBlbGVtZW50IG1heSBoYXZlIGEgZGlmZmVyZW50IHNpemUsIGFuZCBhbHNvIHRoYXQgaXQgZG9lcyBub3QKKyAgYXV0b21hdGljYWxseSBjbGVhciBlbGVtZW50cy4KKworICBpbmRlcGVuZGVudF9jb21hbGxvYyBjYW4gYmUgdXNlZCB0byBzcGVlZCB1cCBhbGxvY2F0aW9uIGluIGNhc2VzCisgIHdoZXJlIHNldmVyYWwgc3RydWN0cyBvciBvYmplY3RzIG11c3QgYWx3YXlzIGJlIGFsbG9jYXRlZCBhdCB0aGUKKyAgc2FtZSB0aW1lLiAgRm9yIGV4YW1wbGU6CisKKyAgc3RydWN0IEhlYWQgeyAuLi4gfQorICBzdHJ1Y3QgRm9vdCB7IC4uLiB9CisKKyAgdm9pZCBzZW5kX21lc3NhZ2UoY2hhciogbXNnKSB7CisgICAgaW50IG1zZ2xlbiA9IHN0cmxlbihtc2cpOworICAgIHNpemVfdCBzaXplc1szXSA9IHsgc2l6ZW9mKHN0cnVjdCBIZWFkKSwgbXNnbGVuLCBzaXplb2Yoc3RydWN0IEZvb3QpIH07CisgICAgdm9pZCogY2h1bmtzWzNdOworICAgIGlmIChpbmRlcGVuZGVudF9jb21hbGxvYygzLCBzaXplcywgY2h1bmtzKSA9PSAwKQorICAgICAgZGllKCk7CisgICAgc3RydWN0IEhlYWQqIGhlYWQgPSAoc3RydWN0IEhlYWQqKShjaHVua3NbMF0pOworICAgIGNoYXIqICAgICAgICBib2R5ID0gKGNoYXIqKShjaHVua3NbMV0pOworICAgIHN0cnVjdCBGb290KiBmb290ID0gKHN0cnVjdCBGb290KikoY2h1bmtzWzJdKTsKKyAgICAvLyAuLi4KKyAgfQorCisgIEluIGdlbmVyYWwgdGhvdWdoLCBpbmRlcGVuZGVudF9jb21hbGxvYyBpcyB3b3J0aCB1c2luZyBvbmx5IGZvcgorICBsYXJnZXIgdmFsdWVzIG9mIG5fZWxlbWVudHMuIEZvciBzbWFsbCB2YWx1ZXMsIHlvdSBwcm9iYWJseSB3b24ndAorICBkZXRlY3QgZW5vdWdoIGRpZmZlcmVuY2UgZnJvbSBzZXJpZXMgb2YgbWFsbG9jIGNhbGxzIHRvIGJvdGhlci4KKworICBPdmVydXNlIG9mIGluZGVwZW5kZW50X2NvbWFsbG9jIGNhbiBpbmNyZWFzZSBvdmVyYWxsIG1lbW9yeSB1c2FnZSwKKyAgc2luY2UgaXQgY2Fubm90IHJldXNlIGV4aXN0aW5nIG5vbmNvbnRpZ3VvdXMgc21hbGwgY2h1bmtzIHRoYXQKKyAgbWlnaHQgYmUgYXZhaWxhYmxlIGZvciBzb21lIG9mIHRoZSBlbGVtZW50cy4KKyovCit2b2lkKiogZGxpbmRlcGVuZGVudF9jb21hbGxvYyhzaXplX3QsIHNpemVfdCosIHZvaWQqKik7CisKKworLyoKKyAgcHZhbGxvYyhzaXplX3Qgbik7CisgIEVxdWl2YWxlbnQgdG8gdmFsbG9jKG1pbmltdW0tcGFnZS10aGF0LWhvbGRzKG4pKSwgdGhhdCBpcywKKyAgcm91bmQgdXAgbiB0byBuZWFyZXN0IHBhZ2VzaXplLgorICovCit2b2lkKiAgZGxwdmFsbG9jKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY190cmltKHNpemVfdCBwYWQpOworCisgIElmIHBvc3NpYmxlLCBnaXZlcyBtZW1vcnkgYmFjayB0byB0aGUgc3lzdGVtICh2aWEgbmVnYXRpdmUgYXJndW1lbnRzCisgIHRvIHNicmspIGlmIHRoZXJlIGlzIHVudXNlZCBtZW1vcnkgYXQgdGhlIGBoaWdoJyBlbmQgb2YgdGhlIG1hbGxvYworICBwb29sIG9yIGluIHVudXNlZCBNTUFQIHNlZ21lbnRzLiBZb3UgY2FuIGNhbGwgdGhpcyBhZnRlciBmcmVlaW5nCisgIGxhcmdlIGJsb2NrcyBvZiBtZW1vcnkgdG8gcG90ZW50aWFsbHkgcmVkdWNlIHRoZSBzeXN0ZW0tbGV2ZWwgbWVtb3J5CisgIHJlcXVpcmVtZW50cyBvZiBhIHByb2dyYW0uIEhvd2V2ZXIsIGl0IGNhbm5vdCBndWFyYW50ZWUgdG8gcmVkdWNlCisgIG1lbW9yeS4gVW5kZXIgc29tZSBhbGxvY2F0aW9uIHBhdHRlcm5zLCBzb21lIGxhcmdlIGZyZWUgYmxvY2tzIG9mCisgIG1lbW9yeSB3aWxsIGJlIGxvY2tlZCBiZXR3ZWVuIHR3byB1c2VkIGNodW5rcywgc28gdGhleSBjYW5ub3QgYmUKKyAgZ2l2ZW4gYmFjayB0byB0aGUgc3lzdGVtLgorCisgIFRoZSBgcGFkJyBhcmd1bWVudCB0byBtYWxsb2NfdHJpbSByZXByZXNlbnRzIHRoZSBhbW91bnQgb2YgZnJlZQorICB0cmFpbGluZyBzcGFjZSB0byBsZWF2ZSB1bnRyaW1tZWQuIElmIHRoaXMgYXJndW1lbnQgaXMgemVybywgb25seQorICB0aGUgbWluaW11bSBhbW91bnQgb2YgbWVtb3J5IHRvIG1haW50YWluIGludGVybmFsIGRhdGEgc3RydWN0dXJlcworICB3aWxsIGJlIGxlZnQuIE5vbi16ZXJvIGFyZ3VtZW50cyBjYW4gYmUgc3VwcGxpZWQgdG8gbWFpbnRhaW4gZW5vdWdoCisgIHRyYWlsaW5nIHNwYWNlIHRvIHNlcnZpY2UgZnV0dXJlIGV4cGVjdGVkIGFsbG9jYXRpb25zIHdpdGhvdXQgaGF2aW5nCisgIHRvIHJlLW9idGFpbiBtZW1vcnkgZnJvbSB0aGUgc3lzdGVtLgorCisgIE1hbGxvY190cmltIHJldHVybnMgMSBpZiBpdCBhY3R1YWxseSByZWxlYXNlZCBhbnkgbWVtb3J5LCBlbHNlIDAuCisqLworaW50ICBkbG1hbGxvY190cmltKHNpemVfdCk7CisKKy8qCisgIG1hbGxvY193YWxrX2ZyZWVfcGFnZXMoaGFuZGxlciwgaGFyZykKKworICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIGZyZWUgcmVnaW9uIGluIHRoZSBoZWFwLiAgVGhlCisgIG1lbW9yeSBiZXR3ZWVuIHN0YXJ0IGFuZCBlbmQgYXJlIGd1YXJhbnRlZWQgbm90IHRvIGNvbnRhaW4gYW55CisgIGltcG9ydGFudCBkYXRhLCBzbyB0aGUgaGFuZGxlciBpcyBmcmVlIHRvIGFsdGVyIHRoZSBjb250ZW50cworICBpbiBhbnkgd2F5LiAgVGhpcyBjYW4gYmUgdXNlZCB0byBhZHZpc2UgdGhlIE9TIHRoYXQgbGFyZ2UgZnJlZQorICByZWdpb25zIG1heSBiZSBzd2FwcGVkIG91dC4KKworICBUaGUgdmFsdWUgaW4gaGFyZyB3aWxsIGJlIHBhc3NlZCB0byBlYWNoIGNhbGwgb2YgdGhlIGhhbmRsZXIuCisgKi8KK3ZvaWQgZGxtYWxsb2Nfd2Fsa19mcmVlX3BhZ2VzKHZvaWQoKmhhbmRsZXIpKHZvaWQgKnN0YXJ0LCB2b2lkICplbmQsIHZvaWQgKmFyZyksCisgICAgdm9pZCAqaGFyZyk7CisKKy8qCisgIG1hbGxvY193YWxrX2hlYXAoaGFuZGxlciwgaGFyZykKKworICBDYWxscyB0aGUgcHJvdmlkZWQgaGFuZGxlciBvbiBlYWNoIG9iamVjdCBvciBmcmVlIHJlZ2lvbiBpbiB0aGUKKyAgaGVhcC4gIFRoZSBoYW5kbGVyIHdpbGwgcmVjZWl2ZSB0aGUgY2h1bmsgcG9pbnRlciBhbmQgbGVuZ3RoLCB0aGUKKyAgb2JqZWN0IHBvaW50ZXIgYW5kIGxlbmd0aCwgYW5kIHRoZSB2YWx1ZSBpbiBoYXJnIG9uIGVhY2ggY2FsbC4KKyAqLwordm9pZCBkbG1hbGxvY193YWxrX2hlYXAodm9pZCgqaGFuZGxlcikoY29uc3Qgdm9pZCAqY2h1bmtwdHIsIHNpemVfdCBjaHVua2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKnVzZXJwdHIsIHNpemVfdCB1c2VybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYXJnKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmhhcmcpOworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK3NpemVfdCBkbG1hbGxvY191c2FibGVfc2l6ZSh2b2lkKik7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLwordm9pZCAgZGxtYWxsb2Nfc3RhdHMoKTsKKworI2VuZGlmIC8qICFPTkxZX01TUEFDRVMgKi8KKworI2lmIE1TUEFDRVMKKworLyoKKyAgbXNwYWNlIGlzIGFuIG9wYXF1ZSB0eXBlIHJlcHJlc2VudGluZyBhbiBpbmRlcGVuZGVudAorICByZWdpb24gb2Ygc3BhY2UgdGhhdCBzdXBwb3J0cyBtc3BhY2VfbWFsbG9jLCBldGMuCisqLwordHlwZWRlZiB2b2lkKiBtc3BhY2U7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2UgY3JlYXRlcyBhbmQgcmV0dXJucyBhIG5ldyBpbmRlcGVuZGVudCBzcGFjZSB3aXRoIHRoZQorICBnaXZlbiBpbml0aWFsIGNhcGFjaXR5LCBvciwgaWYgMCwgdGhlIGRlZmF1bHQgZ3JhbnVsYXJpdHkgc2l6ZS4gIEl0CisgIHJldHVybnMgbnVsbCBpZiB0aGVyZSBpcyBubyBzeXN0ZW0gbWVtb3J5IGF2YWlsYWJsZSB0byBjcmVhdGUgdGhlCisgIHNwYWNlLiAgSWYgYXJndW1lbnQgbG9ja2VkIGlzIG5vbi16ZXJvLCB0aGUgc3BhY2UgdXNlcyBhIHNlcGFyYXRlCisgIGxvY2sgdG8gY29udHJvbCBhY2Nlc3MuIFRoZSBjYXBhY2l0eSBvZiB0aGUgc3BhY2Ugd2lsbCBncm93CisgIGR5bmFtaWNhbGx5IGFzIG5lZWRlZCB0byBzZXJ2aWNlIG1zcGFjZV9tYWxsb2MgcmVxdWVzdHMuICBZb3UgY2FuCisgIGNvbnRyb2wgdGhlIHNpemVzIG9mIGluY3JlbWVudGFsIGluY3JlYXNlcyBvZiB0aGlzIHNwYWNlIGJ5CisgIGNvbXBpbGluZyB3aXRoIGEgZGlmZmVyZW50IERFRkFVTFRfR1JBTlVMQVJJVFkgb3IgZHluYW1pY2FsbHkKKyAgc2V0dGluZyB3aXRoIG1hbGxvcHQoTV9HUkFOVUxBUklUWSwgdmFsdWUpLgorKi8KK21zcGFjZSBjcmVhdGVfbXNwYWNlKHNpemVfdCBjYXBhY2l0eSwgaW50IGxvY2tlZCk7CisKKy8qCisgIGRlc3Ryb3lfbXNwYWNlIGRlc3Ryb3lzIHRoZSBnaXZlbiBzcGFjZSwgYW5kIGF0dGVtcHRzIHRvIHJldHVybiBhbGwKKyAgb2YgaXRzIG1lbW9yeSBiYWNrIHRvIHRoZSBzeXN0ZW0sIHJldHVybmluZyB0aGUgdG90YWwgbnVtYmVyIG9mCisgIGJ5dGVzIGZyZWVkLiBBZnRlciBkZXN0cnVjdGlvbiwgdGhlIHJlc3VsdHMgb2YgYWNjZXNzIHRvIGFsbCBtZW1vcnkKKyAgdXNlZCBieSB0aGUgc3BhY2UgYmVjb21lIHVuZGVmaW5lZC4KKyovCitzaXplX3QgZGVzdHJveV9tc3BhY2UobXNwYWNlIG1zcCk7CisKKy8qCisgIGNyZWF0ZV9tc3BhY2Vfd2l0aF9iYXNlIHVzZXMgdGhlIG1lbW9yeSBzdXBwbGllZCBhcyB0aGUgaW5pdGlhbCBiYXNlCisgIG9mIGEgbmV3IG1zcGFjZS4gUGFydCAobGVzcyB0aGFuIDEyOCpzaXplb2Yoc2l6ZV90KSBieXRlcykgb2YgdGhpcworICBzcGFjZSBpcyB1c2VkIGZvciBib29ra2VlcGluZywgc28gdGhlIGNhcGFjaXR5IG11c3QgYmUgYXQgbGVhc3QgdGhpcworICBsYXJnZS4gKE90aGVyd2lzZSAwIGlzIHJldHVybmVkLikgV2hlbiB0aGlzIGluaXRpYWwgc3BhY2UgaXMKKyAgZXhoYXVzdGVkLCBhZGRpdGlvbmFsIG1lbW9yeSB3aWxsIGJlIG9idGFpbmVkIGZyb20gdGhlIHN5c3RlbS4KKyAgRGVzdHJveWluZyB0aGlzIHNwYWNlIHdpbGwgZGVhbGxvY2F0ZSBhbGwgYWRkaXRpb25hbGx5IGFsbG9jYXRlZAorICBzcGFjZSAoaWYgcG9zc2libGUpIGJ1dCBub3QgdGhlIGluaXRpYWwgYmFzZS4KKyovCittc3BhY2UgY3JlYXRlX21zcGFjZV93aXRoX2Jhc2Uodm9pZCogYmFzZSwgc2l6ZV90IGNhcGFjaXR5LCBpbnQgbG9ja2VkKTsKKworLyoKKyAgbXNwYWNlX21hbGxvYyBiZWhhdmVzIGFzIG1hbGxvYywgYnV0IG9wZXJhdGVzIHdpdGhpbgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLwordm9pZCogbXNwYWNlX21hbGxvYyhtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfZnJlZSBiZWhhdmVzIGFzIGZyZWUsIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorCisgIElmIGNvbXBpbGVkIHdpdGggRk9PVEVSUz09MSwgbXNwYWNlX2ZyZWUgaXMgbm90IGFjdHVhbGx5IG5lZWRlZC4KKyAgZnJlZSBtYXkgYmUgY2FsbGVkIGluc3RlYWQgb2YgbXNwYWNlX2ZyZWUgYmVjYXVzZSBmcmVlZCBjaHVua3MgZnJvbQorICBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcgc3BhY2VzLgorKi8KK3ZvaWQgbXNwYWNlX2ZyZWUobXNwYWNlIG1zcCwgdm9pZCogbWVtKTsKKworLyoKKyAgbXNwYWNlX3JlYWxsb2MgYmVoYXZlcyBhcyByZWFsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKworICBJZiBjb21waWxlZCB3aXRoIEZPT1RFUlM9PTEsIG1zcGFjZV9yZWFsbG9jIGlzIG5vdCBhY3R1YWxseQorICBuZWVkZWQuICByZWFsbG9jIG1heSBiZSBjYWxsZWQgaW5zdGVhZCBvZiBtc3BhY2VfcmVhbGxvYyBiZWNhdXNlCisgIHJlYWxsb2NlZCBjaHVua3MgZnJvbSBhbnkgc3BhY2UgYXJlIGhhbmRsZWQgYnkgdGhlaXIgb3JpZ2luYXRpbmcKKyAgc3BhY2VzLgorKi8KK3ZvaWQqIG1zcGFjZV9yZWFsbG9jKG1zcGFjZSBtc3AsIHZvaWQqIG1lbSwgc2l6ZV90IG5ld3NpemUpOworCisvKgorICBtc3BhY2VfY2FsbG9jIGJlaGF2ZXMgYXMgY2FsbG9jLCBidXQgb3BlcmF0ZXMgd2l0aGluCisgIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiBtc3BhY2VfY2FsbG9jKG1zcGFjZSBtc3AsIHNpemVfdCBuX2VsZW1lbnRzLCBzaXplX3QgZWxlbV9zaXplKTsKKworLyoKKyAgbXNwYWNlX21lbWFsaWduIGJlaGF2ZXMgYXMgbWVtYWxpZ24sIGJ1dCBvcGVyYXRlcyB3aXRoaW4KKyAgdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqIG1zcGFjZV9tZW1hbGlnbihtc3BhY2UgbXNwLCBzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfaW5kZXBlbmRlbnRfY2FsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY2FsbG9jLCBidXQKKyAgb3BlcmF0ZXMgd2l0aGluIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkKiogbXNwYWNlX2luZGVwZW5kZW50X2NhbGxvYyhtc3BhY2UgbXNwLCBzaXplX3Qgbl9lbGVtZW50cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBlbGVtX3NpemUsIHZvaWQqIGNodW5rc1tdKTsKKworLyoKKyAgbXNwYWNlX2luZGVwZW5kZW50X2NvbWFsbG9jIGJlaGF2ZXMgYXMgaW5kZXBlbmRlbnRfY29tYWxsb2MsIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK3ZvaWQqKiBtc3BhY2VfaW5kZXBlbmRlbnRfY29tYWxsb2MobXNwYWNlIG1zcCwgc2l6ZV90IG5fZWxlbWVudHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXplc1tdLCB2b2lkKiBjaHVua3NbXSk7CisKKy8qCisgIG1zcGFjZV9mb290cHJpbnQoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgYnl0ZXMgb2J0YWluZWQgZnJvbSB0aGUKKyAgc3lzdGVtIGZvciB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfZm9vdHByaW50KG1zcGFjZSBtc3ApOworCisvKgorICBtc3BhY2VfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHRoYXQKKyAgdGhpcyBzcGFjZSBpcyBhbGxvd2VkIHRvIG9idGFpbiBmcm9tIHRoZSBzeXN0ZW0uIFNlZQorICBtYWxsb2NfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgZm9yIGEgbW9yZSBpbi1kZXB0aCBkZXNjcmlwdGlvbi4KKworICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGRsbWFsbG9jLmMgd2FzIGNvbXBpbGVkCisgIHdpdGggVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCBzZXQuCisqLworc2l6ZV90IG1zcGFjZV9tYXhfYWxsb3dlZF9mb290cHJpbnQobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV9zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkgc2V0cyB0aGUgbWF4aW11bSBudW1iZXIgb2YKKyAgYnl0ZXMgKHJvdW5kZWQgdXAgdG8gYSBwYWdlKSB0aGF0IHRoaXMgc3BhY2UgaXMgYWxsb3dlZCB0bworICBvYnRhaW4gZnJvbSB0aGUgc3lzdGVtLiAgU2VlIG1hbGxvY19zZXRfbWF4X2FsbG93ZWRfZm9vdHByaW50KCkKKyAgZm9yIGEgbW9yZSBpbi1kZXB0aCBkZXNjcmlwdGlvbi4KKworICBUaGlzIGZ1bmN0aW9uIGlzIG9ubHkgYXZhaWxhYmxlIGlmIGRsbWFsbG9jLmMgd2FzIGNvbXBpbGVkCisgIHdpdGggVVNFX01BWF9BTExPV0VEX0ZPT1RQUklOVCBzZXQuCisqLwordm9pZCBtc3BhY2Vfc2V0X21heF9hbGxvd2VkX2Zvb3RwcmludChtc3BhY2UgbXNwLCBzaXplX3QgYnl0ZXMpOworCisvKgorICBtc3BhY2VfbWF4X2Zvb3RwcmludCgpIHJldHVybnMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJ5dGVzIG9idGFpbmVkCisgIGZyb20gdGhlIHN5c3RlbSBvdmVyIHRoZSBsaWZldGltZSBvZiB0aGlzIHNwYWNlLgorKi8KK3NpemVfdCBtc3BhY2VfbWF4X2Zvb3RwcmludChtc3BhY2UgbXNwKTsKKworCisjaWYgIU5PX01BTExJTkZPCisvKgorICBtc3BhY2VfbWFsbGluZm8gYmVoYXZlcyBhcyBtYWxsaW5mbywgYnV0IHJlcG9ydHMgcHJvcGVydGllcyBvZgorICB0aGUgZ2l2ZW4gc3BhY2UuCisqLworc3RydWN0IG1hbGxpbmZvIG1zcGFjZV9tYWxsaW5mbyhtc3BhY2UgbXNwKTsKKyNlbmRpZiAvKiBOT19NQUxMSU5GTyAqLworCisvKgorICBtc3BhY2VfbWFsbG9jX3N0YXRzIGJlaGF2ZXMgYXMgbWFsbG9jX3N0YXRzLCBidXQgcmVwb3J0cworICBwcm9wZXJ0aWVzIG9mIHRoZSBnaXZlbiBzcGFjZS4KKyovCit2b2lkIG1zcGFjZV9tYWxsb2Nfc3RhdHMobXNwYWNlIG1zcCk7CisKKy8qCisgIG1zcGFjZV90cmltIGJlaGF2ZXMgYXMgbWFsbG9jX3RyaW0sIGJ1dAorICBvcGVyYXRlcyB3aXRoaW4gdGhlIGdpdmVuIHNwYWNlLgorKi8KK2ludCBtc3BhY2VfdHJpbShtc3BhY2UgbXNwLCBzaXplX3QgcGFkKTsKKworLyoKKyAgQW4gYWxpYXMgZm9yIG1hbGxvcHQuCisqLworaW50IG1zcGFjZV9tYWxsb3B0KGludCwgaW50KTsKKworI2VuZGlmICAvKiBNU1BBQ0VTICovCisKKyNpZmRlZiBfX2NwbHVzcGx1cworfTsgIC8qIGVuZCBvZiBleHRlcm4gIkMiICovCisjZW5kaWYKKworI2VuZGlmIC8qIE1BTExPQ18yODBfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZHJhbmQ0OC5jIGIvbGliYy9iaW9uaWMvZHJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkNDgxOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9kcmFuZDQ4LmMKQEAgLTAsMCArMSwyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX3JhbmQ0OF9zZWVkWzNdOworCitkb3VibGUKK2RyYW5kNDgodm9pZCkKK3sKKwlyZXR1cm4gZXJhbmQ0OChfcmFuZDQ4X3NlZWQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvZWFiaS5jIGIvbGliYy9iaW9uaWMvZWFiaS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0OTFmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9lYWJpLmMKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkKiBfX2Rzb19oYW5kbGUgPSAwOworCitpbnQgX19hZWFiaV9hdGV4aXQgKHZvaWQgKm9iamVjdCwgdm9pZCAoKmRlc3RydWN0b3IpICh2b2lkICopLCB2b2lkICpkc29faGFuZGxlKQoreworICAgIC8vcmV0dXJuIF9fY3hhX2F0ZXhpdChkZXN0cnVjdG9yLCBvYmplY3QsIGRzb19oYW5kbGUpOworICAgIHJldHVybiAwOworfQorCisKK3ZvaWQgX19hZWFiaV9tZW1jcHk4KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1jcHkoZGVzdCwgc3JjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNweTQodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbWNweShkZXN0LCBzcmMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtY3B5KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1jcHkoZGVzdCwgc3JjLCBuKTsKK30KKworCit2b2lkIF9fYWVhYmlfbWVtbW92ZTgodm9pZCAqZGVzdCwgY29uc3Qgdm9pZCAqc3JjLCBzaXplX3QgbikgeworICAgIG1lbW1vdmUoZGVzdCwgc3JjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbW1vdmU0KHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1tb3ZlKHZvaWQgKmRlc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pIHsKKyAgICBtZW1tb3ZlKGRlc3QsIHNyYywgbik7Cit9CisKKy8qCisgKiBfX2FlYWJpX21lbXNldCBoYXMgdGhlIG9yZGVyIG9mIGl0cyBzZWNvbmQgYW5kIHRoaXJkIGFyZ3VtZW50cyByZXZlcnNlZC4gCisgKiAgVGhpcyBhbGxvd3MgX19hZWFiaV9tZW1jbHIgdG8gdGFpbC1jYWxsIF9fYWVhYmlfbWVtc2V0CisgKi8KKyAKK3ZvaWQgX19hZWFiaV9tZW1zZXQ4KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgeworICAgIG1lbXNldChkZXN0LCBjLCBuKTsKK30KKwordm9pZCBfX2FlYWJpX21lbXNldDQodm9pZCAqZGVzdCwgc2l6ZV90IG4sIGludCBjKSB7CisgICAgbWVtc2V0KGRlc3QsIGMsIG4pOworfQorCit2b2lkIF9fYWVhYmlfbWVtc2V0KHZvaWQgKmRlc3QsIHNpemVfdCBuLCBpbnQgYykgeworICAgIG1lbXNldChkZXN0LCBjLCBuKTsKK30KKworCit2b2lkIF9fYWVhYmlfbWVtY2xyOCh2b2lkICpkZXN0LCBzaXplX3QgbikgeworICAgIF9fYWVhYmlfbWVtc2V0OChkZXN0LCBuLCAwKTsKK30KKwordm9pZCBfX2FlYWJpX21lbWNscjQodm9pZCAqZGVzdCwgc2l6ZV90IG4pIHsKKyAgICBfX2FlYWJpX21lbXNldDQoZGVzdCwgbiwgMCk7Cit9CisKK3ZvaWQgX19hZWFiaV9tZW1jbHIodm9pZCAqZGVzdCwgc2l6ZV90IG4pIHsKKyAgICBfX2FlYWJpX21lbXNldChkZXN0LCBuLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2VyYW5kNDguYyBiL2xpYmMvYmlvbmljL2VyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDNmZjM0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvZXJhbmQ0OC5jCkBAIC0wLDAgKzEsMjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworZG91YmxlCitlcmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCV9kb3JhbmQ0OCh4c2VlZCk7CisJcmV0dXJuIGxkZXhwKChkb3VibGUpIHhzZWVkWzBdLCAtNDgpICsKKwkgICAgICAgbGRleHAoKGRvdWJsZSkgeHNlZWRbMV0sIC0zMikgKworCSAgICAgICBsZGV4cCgoZG91YmxlKSB4c2VlZFsyXSwgLTE2KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2hhc2guaCBiL2xpYmMvYmlvbmljL2hhc2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjQ4M2YxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvaGFzaC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4gCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLiAKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgCisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgCisgKiBhcmUgbWV0OiAKKyAqCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCAKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4gCisgKgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgCisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIAorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4gCisgKgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiBLVEggbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZQorICogICAgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dAorICogICAgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgS1RIIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBLVEggT1IgSVRTIENPTlRSSUJVVE9SUyBCRQorICogTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUgorICogQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksCisgKiBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUgorICogT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRgorICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuICovCisKKy8qICRIZWltZGFsOiBoYXNoLmgsdiAxLjEgMTk5OS8wMy8yMiAxOToxNjoyNSBqb2RhIEV4cCAkCisgICAkTmV0QlNEOiBoYXNoLmgsdiAxLjEuMS4zIDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCAqLworCisvKiBzdHVmZiBpbiBjb21tb24gYmV0d2VlbiBtZDQsIG1kNSwgYW5kIHNoYTEgKi8KKworI2lmbmRlZiBfX2hhc2hfaF9fCisjZGVmaW5lIF9faGFzaF9oX18KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaWZuZGVmIG1pbgorI2RlZmluZSBtaW4oYSxiKSAoKChhKT4oYikpPyhiKTooYSkpCisjZW5kaWYKKworLyogVmVjdG9yIENyYXlzIGRvZXNuJ3QgaGF2ZSBhIGdvb2QgMzItYml0IHR5cGUsIG9yIG1vcmUgcHJlY2lzZWx5LAorICAgaW50MzJfdCBhcyBkZWZpbmVkIGJ5IDxiaW5kL2JpdHlwZXMuaD4gaXNuJ3QgMzIgYml0cywgYW5kIHdlIGRvbid0CisgICB3YW50IHRvIGRlcGVuZCBpbiBiZWluZyBhYmxlIHRvIHJlZGVmaW5lIHRoaXMgdHlwZS4gIFRvIGNvcGUgd2l0aAorICAgdGhpcyB3ZSBoYXZlIHRvIGNsYW1wIHRoZSByZXN1bHQgaW4gc29tZSBwbGFjZXMgdG8gWzAsMl4zMik7IG5vCisgICBuZWVkIHRvIGRvIHRoaXMgb24gb3RoZXIgbWFjaGluZXMuICBEaWQgSSBzYXkgdGhpcyB3YXMgYSBtZXNzPworICAgKi8KKworI2lmZGVmIF9DUkFZCisjZGVmaW5lIENSQVlGSVgoWCkgKChYKSAmIDB4ZmZmZmZmZmYpCisjZWxzZQorI2RlZmluZSBDUkFZRklYKFgpIChYKQorI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Citjc2hpZnQgKHVfaW50MzJfdCB4LCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICB4ID0gQ1JBWUZJWCh4KTsKKyAgICByZXR1cm4gQ1JBWUZJWCgoeCA8PCBuKSB8ICh4ID4+ICgzMiAtIG4pKSk7Cit9CisKKyNlbmRpZiAvKiBfX2hhc2hfaF9fICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9pZl9uYW1ldG9pbmRleC5jIGIvbGliYy9iaW9uaWMvaWZfbmFtZXRvaW5kZXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjcwZTQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvaWZfbmFtZXRvaW5kZXguYwpAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+CisjaW5jbHVkZSA8bmV0L2lmLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCisvKgorICogTWFwIGFuIGludGVyZmFjZSBuYW1lIGludG8gaXRzIGNvcnJlc3BvbmRpbmcgaW5kZXguCisgKiBSZXR1cm5zIDAgb24gZXJyb3IsIGFzIDAgaXMgbm90IGEgdmFsaWQgaW5kZXguCisgKi8KK3Vuc2lnbmVkIGludCBpZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICppZm5hbWUpCit7CisgICAgaW50IGluZGV4OworICAgIGludCBjdGxfc29jazsKKyAgICBzdHJ1Y3QgaWZyZXEgaWZyOworCisgICAgbWVtc2V0KCZpZnIsIDAsIHNpemVvZihzdHJ1Y3QgaWZyZXEpKTsKKyAgICBzdHJuY3B5KGlmci5pZnJfbmFtZSwgaWZuYW1lLCBJRk5BTVNJWik7CisgICAgaWZyLmlmcl9uYW1lW0lGTkFNU0laIC0gMV0gPSAwOworCisgICAgaW5kZXggPSAwOworICAgIGlmICgoY3RsX3NvY2sgPSBzb2NrZXQoQUZfSU5FVCwgU09DS19ER1JBTSwgMCkpID49IDApIHsKKyAgICAgICAgaWYgKGlvY3RsKGN0bF9zb2NrLCBTSU9DR0lGSU5ERVgsICZpZnIpID49IDApIHsKKyAgICAgICAgICAgIGluZGV4ID0gaWZyLmlmcl9pZmluZGV4OworICAgICAgICB9CisgICAgICAgIGNsb3NlKGN0bF9zb2NrKTsKKyAgICB9CisgICAgcmV0dXJuIGluZGV4OworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvaW9jdGwuYyBiL2xpYmMvYmlvbmljL2lvY3RsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmRkOTVkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2lvY3RsLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitleHRlcm4gaW50IF9faW9jdGwoaW50LCBpbnQsIHZvaWQgKik7CisKK2ludCBpb2N0bChpbnQgZmQsIGludCByZXF1ZXN0LCAuLi4pCit7CisgICAgdmFfbGlzdCBhcDsKKyAgICB2b2lkICogYXJnOworCisgICAgdmFfc3RhcnQoYXAsIHJlcXVlc3QpOworICAgIGFyZyA9IHZhX2FyZyhhcCwgdm9pZCAqKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIF9faW9jdGwoZmQsIHJlcXVlc3QsIGFyZyk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xkZXhwLmMgYi9saWJjL2Jpb25pYy9sZGV4cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjMWYzZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9sZGV4cC5jCkBAIC0wLDAgKzEsMTIyIEBACisvKiBAKCMpc19zY2FsYm4uYyA1LjEgOTMvMDkvMjQgKi8KKy8qIEAoIylmZGxpYm0uaCA1LjEgOTMvMDkvMjQgKi8KKy8qCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKiBDb3B5cmlnaHQgKEMpIDE5OTMgYnkgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIERldmVsb3BlZCBhdCBTdW5Qcm8sIGEgU3VuIE1pY3Jvc3lzdGVtcywgSW5jLiBidXNpbmVzcy4KKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMKKyAqIHNvZnR3YXJlIGlzIGZyZWVseSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlCisgKiBpcyBwcmVzZXJ2ZWQuCisgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorCisvKiBCaXQgZmlkZGxpbmcgcm91dGluZXMgY29waWVkIGZyb20gbXN1bi9zcmMvbWF0aF9wcml2YXRlLmgsdiAxLjE1ICovCisKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwordHlwZWRlZiB1bmlvbgoreworICBkb3VibGUgdmFsdWU7CisgIHN0cnVjdAorICB7CisgICAgdV9pbnQzMl90IG1zdzsKKyAgICB1X2ludDMyX3QgbHN3OworICB9IHBhcnRzOworfSBpZWVlX2RvdWJsZV9zaGFwZV90eXBlOworCisjZW5kaWYKKworI2lmIEJZVEVfT1JERVIgPT0gTElUVExFX0VORElBTgorCit0eXBlZGVmIHVuaW9uCit7CisgIGRvdWJsZSB2YWx1ZTsKKyAgc3RydWN0CisgIHsKKyAgICB1X2ludDMyX3QgbHN3OworICAgIHVfaW50MzJfdCBtc3c7CisgIH0gcGFydHM7Cit9IGllZWVfZG91YmxlX3NoYXBlX3R5cGU7CisKKyNlbmRpZgorCisvKiBHZXQgdHdvIDMyIGJpdCBpbnRzIGZyb20gYSBkb3VibGUuICAqLworCisjZGVmaW5lIEVYVFJBQ1RfV09SRFMoaXgwLGl4MSxkKQkJCQlcCitkbyB7CQkJCQkJCQlcCisgIGllZWVfZG91YmxlX3NoYXBlX3R5cGUgZXdfdTsJCQkJCVwKKyAgZXdfdS52YWx1ZSA9IChkKTsJCQkJCQlcCisgIChpeDApID0gZXdfdS5wYXJ0cy5tc3c7CQkJCQlcCisgIChpeDEpID0gZXdfdS5wYXJ0cy5sc3c7CQkJCQlcCit9IHdoaWxlICgwKQorCisvKiBHZXQgdGhlIG1vcmUgc2lnbmlmaWNhbnQgMzIgYml0IGludCBmcm9tIGEgZG91YmxlLiAgKi8KKworI2RlZmluZSBHRVRfSElHSF9XT1JEKGksZCkJCQkJCVwKK2RvIHsJCQkJCQkJCVwKKyAgaWVlZV9kb3VibGVfc2hhcGVfdHlwZSBnaF91OwkJCQkJXAorICBnaF91LnZhbHVlID0gKGQpOwkJCQkJCVwKKyAgKGkpID0gZ2hfdS5wYXJ0cy5tc3c7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworLyogU2V0IHRoZSBtb3JlIHNpZ25pZmljYW50IDMyIGJpdHMgb2YgYSBkb3VibGUgZnJvbSBhbiBpbnQuICAqLworCisjZGVmaW5lIFNFVF9ISUdIX1dPUkQoZCx2KQkJCQkJXAorZG8gewkJCQkJCQkJXAorICBpZWVlX2RvdWJsZV9zaGFwZV90eXBlIHNoX3U7CQkJCQlcCisgIHNoX3UudmFsdWUgPSAoZCk7CQkJCQkJXAorICBzaF91LnBhcnRzLm1zdyA9ICh2KTsJCQkJCQlcCisgIChkKSA9IHNoX3UudmFsdWU7CQkJCQkJXAorfSB3aGlsZSAoMCkKKworCitzdGF0aWMgY29uc3QgZG91YmxlCit0d281NCAgID0gIDEuODAxNDM5ODUwOTQ4MTk4NDAwMDBlKzE2LCAvKiAweDQzNTAwMDAwLCAweDAwMDAwMDAwICovCit0d29tNTQgID0gIDUuNTUxMTE1MTIzMTI1NzgyNzAyMTJlLTE3LCAvKiAweDNDOTAwMDAwLCAweDAwMDAwMDAwICovCitodWdlICAgPSAxLjBlKzMwMCwKK3RpbnkgICA9IDEuMGUtMzAwOworCitzdGF0aWMgZG91YmxlCitfY29weXNpZ24oZG91YmxlIHgsIGRvdWJsZSB5KQoreworCXVfaW50MzJfdCBoeCxoeTsKKwlHRVRfSElHSF9XT1JEKGh4LHgpOworCUdFVF9ISUdIX1dPUkQoaHkseSk7CisJU0VUX0hJR0hfV09SRCh4LChoeCYweDdmZmZmZmZmKXwoaHkmMHg4MDAwMDAwMCkpOworCXJldHVybiB4OworfQorCitkb3VibGUKK2xkZXhwKGRvdWJsZSB4LCBpbnQgbikKK3sKKwlpbnQzMl90IGssaHgsbHg7CisJRVhUUkFDVF9XT1JEUyhoeCxseCx4KTsKKyAgICAgICAgayA9IChoeCYweDdmZjAwMDAwKT4+MjA7CQkvKiBleHRyYWN0IGV4cG9uZW50ICovCisgICAgICAgIGlmIChrPT0wKSB7CQkJCS8qIDAgb3Igc3Vibm9ybWFsIHggKi8KKyAgICAgICAgICAgIGlmICgobHh8KGh4JjB4N2ZmZmZmZmYpKT09MCkgcmV0dXJuIHg7IC8qICstMCAqLworCSAgICB4ICo9IHR3bzU0OworCSAgICBHRVRfSElHSF9XT1JEKGh4LHgpOworCSAgICBrID0gKChoeCYweDdmZjAwMDAwKT4+MjApIC0gNTQ7CisgICAgICAgICAgICBpZiAobjwgLTUwMDAwKSByZXR1cm4gdGlueSp4OyAJLyp1bmRlcmZsb3cqLworCSAgICB9CisgICAgICAgIGlmIChrPT0weDdmZikgcmV0dXJuIHgreDsJCS8qIE5hTiBvciBJbmYgKi8KKyAgICAgICAgayA9IGsrbjsKKyAgICAgICAgaWYgKGsgPiAgMHg3ZmUpIHJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOyAvKiBvdmVyZmxvdyAgKi8KKyAgICAgICAgaWYgKGsgPiAwKSAJCQkJLyogbm9ybWFsIHJlc3VsdCAqLworCSAgICB7U0VUX0hJR0hfV09SRCh4LChoeCYweDgwMGZmZmZmKXwoazw8MjApKTsgcmV0dXJuIHg7fQorICAgICAgICBpZiAoayA8PSAtNTQpIHsKKyAgICAgICAgICAgIGlmIChuID4gNTAwMDApIAkvKiBpbiBjYXNlIGludGVnZXIgb3ZlcmZsb3cgaW4gbitrICovCisJCXJldHVybiBodWdlKl9jb3B5c2lnbihodWdlLHgpOwkvKm92ZXJmbG93Ki8KKwkgICAgZWxzZSByZXR1cm4gdGlueSpfY29weXNpZ24odGlueSx4KTsgCS8qdW5kZXJmbG93Ki8KKwl9CisgICAgICAgIGsgKz0gNTQ7CQkJCS8qIHN1Ym5vcm1hbCByZXN1bHQgKi8KKwlTRVRfSElHSF9XT1JEKHgsKGh4JjB4ODAwZmZmZmYpfChrPDwyMCkpOworICAgICAgICByZXR1cm4geCp0d29tNTQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmMgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfY29tbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDk0NGNiMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uYwpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJsaWJjX2luaXRfY29tbW9uLmgiCisKKyNpbmNsdWRlIDxzeXMvdGxzLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworZXh0ZXJuIHZvaWQgX2luaXQodm9pZCk7CitleHRlcm4gdm9pZCBfZmluaSh2b2lkKTsKKworc3RhdGljIHZvaWQgY2FsbF9hcnJheSh2b2lkKCoqbGlzdCkoKSkKK3sKKyAgICAvLyBGaXJzdCBlbGVtZW50IGlzIC0xLCBsaXN0IGlzIG51bGwtdGVybWluYXRlZAorICAgIHdoaWxlICgqKytsaXN0KSB7CisgICAgICAgICgqbGlzdCkoKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIF9fYmlvbmljX2RvX2dsb2JhbF9kdG9ycyhzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHApCit7CisgICAgY2FsbF9hcnJheShwLT5maW5pX2FycmF5KTsKKyAgICAvL19maW5pKCk7Cit9CisKK2V4dGVybiB1bnNpZ25lZCBfX2dldF9zcCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgICBnZXR0aWQodm9pZCk7CisKK2NoYXIqICBfX3Byb2duYW1lOworY2hhciAqKmVudmlyb247CisKKy8qIGZyb20gYXNtL3BhZ2UuaCAqLwordW5zaWduZWQgaW50IF9fcGFnZV9zaXplID0gUEFHRV9TSVpFOwordW5zaWduZWQgaW50IF9fcGFnZV9zaGlmdCA9IFBBR0VfU0hJRlQ7CisKKworaW50IF9fc3lzdGVtX3Byb3BlcnRpZXNfaW5pdCh2b2lkKTsKKwordm9pZCBfX2xpYmNfaW5pdF9jb21tb24odWludHB0cl90ICplbGZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpwcmVfY3Rvcl9ob29rKSgpKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCB0aHJlYWQ7CisgICAgcHRocmVhZF9hdHRyX3QgdGhyZWFkX2F0dHI7CisgICAgdm9pZCAqdGxzX2FyZWFbQklPTklDX1RMU19TTE9UU107CisgICAgaW50IGFyZ2M7CisgICAgY2hhciAqKmFyZ3YsICoqZW52cCwgKiplbnZlbmQ7CisgICAgc3RydWN0IGF1eGVudHJ5ICphdXhlbnRyeTsKKyAgICB1bnNpZ25lZCBpbnQgcGFnZV9zaXplID0gMCwgcGFnZV9zaGlmdCA9IDA7CisKKyAgICAvKiBUaGUgbWFpbiB0aHJlYWQncyBzdGFjayBoYXMgZW1waXJpY2FsbHkgc2hvd24gdG8gYmUgODRrICovCisgICAgdW5zaWduZWQgc3RhY2t0b3AgPSAoX19nZXRfc3AoKSAmIH4oUEFHRV9TSVpFIC0gMSkpICsgUEFHRV9TSVpFOworICAgIHVuc2lnbmVkIHN0YWNrc2l6ZSA9IDEyOCAqIDEwMjQ7IC8vODQgKiAxMDI0OworICAgIHVuc2lnbmVkIHN0YWNrYm90dG9tID0gc3RhY2t0b3AgLSBzdGFja3NpemU7CisKKyAgICBwdGhyZWFkX2F0dHJfaW5pdCgmdGhyZWFkX2F0dHIpOworICAgIHB0aHJlYWRfYXR0cl9zZXRzdGFjaygmdGhyZWFkX2F0dHIsICh2b2lkKilzdGFja2JvdHRvbSwgc3RhY2tzaXplKTsKKyAgICBfaW5pdF90aHJlYWQoJnRocmVhZCwgZ2V0dGlkKCksICZ0aHJlYWRfYXR0ciwgKHZvaWQqKXN0YWNrYm90dG9tKTsKKyAgICBfX2luaXRfdGxzKHRsc19hcmVhLCAmdGhyZWFkKTsKKworICAgIGFyZ2MgPSAoaW50KSAqZWxmZGF0YSsrOworICAgIGFyZ3YgPSAoY2hhcioqKSBlbGZkYXRhOworICAgIGVudnAgPSBhcmd2KyhhcmdjKzEpOworICAgIGVudmlyb24gPSBlbnZwOworCisgICAgX19wcm9nbmFtZSA9IGFyZ3ZbMF0gPyBhcmd2WzBdIDogIjx1bmtub3duPiI7CisKKyAgICBlcnJubyA9IDA7CisKKyAgICBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQoKTsKKworICAgIGlmIChwcmVfY3Rvcl9ob29rKSBwcmVfY3Rvcl9ob29rKCk7CisKKyAgICAvLyBYWFg6IHdlIHNob3VsZCBleGVjdXRlIHRoZSAuZmluaV9hcnJheSB1cG9uIGV4aXQKKworICAgIC8vIHByZS1pbml0IGFycmF5LgorICAgIC8vIFhYWDogSSdtIG5vdCBzdXJlIHdoYXQncyB0aGUgZGlmZmVyZW50IHdpdGggdGhlIGluaXQgYXJyYXkuCisgICAgY2FsbF9hcnJheShzdHJ1Y3RvcnMtPnByZWluaXRfYXJyYXkpOworCisgICAgLy8gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24tZWFiaSBiaW5hcnksIGNhbGwgdGhlIC5jdG9ycyBzZWN0aW9uCisgICAgY2FsbF9hcnJheShzdHJ1Y3RvcnMtPmN0b3JzX2FycmF5KTsKKworICAgIC8vIGNhbGwgc3RhdGljIGNvbnN0cnVjdG9ycworICAgIGNhbGxfYXJyYXkoc3RydWN0b3JzLT5pbml0X2FycmF5KTsKKworICAgIGV4aXQoc2xpbmdzaG90KGFyZ2MsIGFyZ3YsIGVudnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaCBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYmM4MmU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X2NvbW1vbi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgTElCQ19JTklUX0NPTU1PTl9ICisjZGVmaW5lIExJQkNfSU5JVF9DT01NT05fSAorCisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdm9pZCAoKipwcmVpbml0X2FycmF5KSh2b2lkKTsKKyAgICB2b2lkICgqKmluaXRfYXJyYXkpKHZvaWQpOworICAgIHZvaWQgKCoqZmluaV9hcnJheSkodm9pZCk7CisgICAgdm9pZCAoKipjdG9yc19hcnJheSkodm9pZCk7Cit9IHN0cnVjdG9yc19hcnJheV90OworCitleHRlcm4gX19ub3JldHVybiB2b2lkIF9fbGliY19pbml0X2NvbW1vbih1aW50cHRyX3QgKmVsZmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycywKKyAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKnByZV9jdG9yX2hvb2spKCkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9keW5hbWljLmMgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjZjI0YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9saWJjX2luaXRfZHluYW1pYy5jCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBsaWJjX2luaXRfc3RhdGljLmMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSByYXcgZGF0YSBibG9jayBzZXQgdXAgYnkgdGhlIEVMRiBsb2FkZXIKKyAqIGluIHRoZSBrZXJuZWwgYW5kIHBhcnNlcyBpdC4gIEl0IGlzIGludm9rZWQgYnkgY3J0MC5TIHdoaWNoIG1ha2VzCisgKiBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGFuZCBwYXNzZXMgY2FsbHMgdGhpcyBmdW5jdGlvbiB1c2luZworICogdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgorICoKKyAqIFRoZSBhcmd1bWVudHMgYXJlOgorICogIHVpbnRwdHJfdCAqZWxmZGF0YQkgLS0gVGhlIEVMRiBsb2FkZXIgZGF0YSBibG9jazsgdXN1YWxseSBmcm9tIHRoZSBzdGFjay4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY2FsbHkgYSBwb2ludGVyIHRvIGFyZ2MuCisgKiAgdm9pZCAoKm9uZXhpdCkodm9pZCkgLS0gRnVuY3Rpb24gdG8gaW5zdGFsbCBpbnRvIG9uZXhpdAorICovCisKKy8qCisgKiBTZXZlcmFsIExpbnV4IEFCSXMgZG9uJ3QgcGFzcyB0aGUgb25leGl0IHBvaW50ZXIsIGFuZCB0aGUgb25lcyB0aGF0CisgKiBkbyBuZXZlciB1c2UgaXQuICBUaGVyZWZvcmUsIHVubGVzcyBVU0VfT05FWElUIGlzIGRlZmluZWQsIHdlIGp1c3QKKyAqIGlnbm9yZSB0aGUgb25leGl0IHBvaW50ZXIuCisgKi8KKy8qICNkZWZpbmUgVVNFX09ORVhJVCAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgorCitleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpOworCitfX25vcmV0dXJuIHZvaWQgX19saWJjX2luaXQodWludHB0cl90ICplbGZkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqb25leGl0KSh2b2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqc2xpbmdzaG90KShpbnQsIGNoYXIqKiwgY2hhcioqKSwKKyAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0b3JzX2FycmF5X3QgY29uc3QgKiBjb25zdCBzdHJ1Y3RvcnMpCit7CisgICAgX19saWJjX2luaXRfY29tbW9uKGVsZmRhdGEsIG9uZXhpdCwgc2xpbmdzaG90LCBzdHJ1Y3RvcnMsIG1hbGxvY19kZWJ1Z19pbml0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYyBiL2xpYmMvYmlvbmljL2xpYmNfaW5pdF9zdGF0aWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNWExZDgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbGliY19pbml0X3N0YXRpYy5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBsaWJjX2luaXRfc3RhdGljLmMKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIHRha2VzIHRoZSByYXcgZGF0YSBibG9jayBzZXQgdXAgYnkgdGhlIEVMRiBsb2FkZXIKKyAqIGluIHRoZSBrZXJuZWwgYW5kIHBhcnNlcyBpdC4gIEl0IGlzIGludm9rZWQgYnkgY3J0MC5TIHdoaWNoIG1ha2VzCisgKiBhbnkgbmVjZXNzYXJ5IGFkanVzdG1lbnRzIGFuZCBwYXNzZXMgY2FsbHMgdGhpcyBmdW5jdGlvbiB1c2luZworICogdGhlIHN0YW5kYXJkIEMgY2FsbGluZyBjb252ZW50aW9uLgorICoKKyAqIFRoZSBhcmd1bWVudHMgYXJlOgorICogIHVpbnRwdHJfdCAqZWxmZGF0YQkgLS0gVGhlIEVMRiBsb2FkZXIgZGF0YSBibG9jazsgdXN1YWxseSBmcm9tIHRoZSBzdGFjay4KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBCYXNpY2FsbHkgYSBwb2ludGVyIHRvIGFyZ2MuCisgKiAgdm9pZCAoKm9uZXhpdCkodm9pZCkgLS0gRnVuY3Rpb24gdG8gaW5zdGFsbCBpbnRvIG9uZXhpdAorICovCisKKy8qCisgKiBTZXZlcmFsIExpbnV4IEFCSXMgZG9uJ3QgcGFzcyB0aGUgb25leGl0IHBvaW50ZXIsIGFuZCB0aGUgb25lcyB0aGF0CisgKiBkbyBuZXZlciB1c2UgaXQuICBUaGVyZWZvcmUsIHVubGVzcyBVU0VfT05FWElUIGlzIGRlZmluZWQsIHdlIGp1c3QKKyAqIGlnbm9yZSB0aGUgb25leGl0IHBvaW50ZXIuCisgKi8KKy8qICNkZWZpbmUgVVNFX09ORVhJVCAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxlbGYuaD4KKyNpbmNsdWRlICJwdGhyZWFkX2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXRleGl0LmgiCisjaW5jbHVkZSAibGliY19pbml0X2NvbW1vbi5oIgorCisjaW5jbHVkZSA8c3lzL3Rscy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKK19fbm9yZXR1cm4gdm9pZCBfX2xpYmNfaW5pdCh1aW50cHRyX3QgKmVsZmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpvbmV4aXQpKHZvaWQpLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgKCpzbGluZ3Nob3QpKGludCwgY2hhcioqLCBjaGFyKiopLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3RvcnNfYXJyYXlfdCBjb25zdCAqIGNvbnN0IHN0cnVjdG9ycykKK3sKKy8qIAorICogVG8gZW5hYmxlIG1hbGxvYyBjaGVja3MgZm9yIHN0YXRpY2FsbHkgbGlua2VkIHByb2dyYW1zLCBhZGQKKyAqICJXSVRIX01BTExPQ19DSEVDS19MSUJDX0EgOj0gdHJ1ZSIgaW4gZGV2aWNlL2J1aWxkc3BlYy5taworICovCisjaWZkZWYgTUFMTE9DX0xFQUtfQ0hFQ0sKKyAgICBleHRlcm4gdm9pZCBtYWxsb2NfZGVidWdfaW5pdCgpOworICAgIF9fbGliY19pbml0X2NvbW1vbihlbGZkYXRhLCBvbmV4aXQsIHNsaW5nc2hvdCwgc3RydWN0b3JzLCBtYWxsb2NfZGVidWdfaW5pdCk7CisjZWxzZQorICAgIF9fbGliY19pbml0X2NvbW1vbihlbGZkYXRhLCBvbmV4aXQsIHNsaW5nc2hvdCwgc3RydWN0b3JzLCBOVUxMKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvbG9nZC5oIGIvbGliYy9iaW9uaWMvbG9nZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MWNiNDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9sb2dkLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfQU5EUk9JRF9CSU9OSUNfTE9HRF9ICisjZGVmaW5lIF9BTkRST0lEX0JJT05JQ19MT0dEX0gKKworZW51bSAgeworICAgIEFORFJPSURfTE9HX1VOS05PV04gPSAwLAorICAgIEFORFJPSURfTE9HX0RFRkFVTFQsICAgIC8qIG9ubHkgZm9yIFNldE1pblByaW9yaXR5KCkgKi8KKworICAgIEFORFJPSURfTE9HX1ZFUkJPU0UsCisgICAgQU5EUk9JRF9MT0dfREVCVUcsCisgICAgQU5EUk9JRF9MT0dfSU5GTywKKyAgICBBTkRST0lEX0xPR19XQVJOLAorICAgIEFORFJPSURfTE9HX0VSUk9SLAorICAgIEFORFJPSURfTE9HX0ZBVEFMLAorCisgICAgQU5EUk9JRF9MT0dfU0lMRU5ULCAgICAgLyogb25seSBmb3IgU2V0TWluUHJpb3JpdHkoKTsgbXVzdCBiZSBsYXN0ICovCit9OworCitpbnQgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworI2VuZGlmIC8qIF9BTkRST0lEX0JJT05JQ19MT0dEX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL2xvZ2Rfd3JpdGUuYyBiL2xpYmMvYmlvbmljL2xvZ2Rfd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGU2NDZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvbG9nZF93cml0ZS5jCkBAIC0wLDAgKzEsMTY2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy91aW8uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlIDx1dGlscy9sb2dnZXIuaD4KKyNpbmNsdWRlICJsb2dkLmgiCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKKyNkZWZpbmUgTE9HX0JVRl9TSVpFCTEwMjQKKwordHlwZWRlZiBlbnVtIHsKKyAgICBMT0dfSURfTUFJTiA9IDAsCisgICAgTE9HX0lEX1JBRElPLAorICAgIExPR19JRF9NQVgKK30gbG9nX2lkX3Q7CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfaW5pdChsb2dfaWRfdCwgc3RydWN0IGlvdmVjICp2ZWMpOworc3RhdGljIGludCAoKndyaXRlX3RvX2xvZykobG9nX2lkX3QsIHN0cnVjdCBpb3ZlYyAqdmVjKSA9IF9fd3JpdGVfdG9fbG9nX2luaXQ7CitzdGF0aWMgcHRocmVhZF9tdXRleF90IGxvZ19pbml0X2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCitzdGF0aWMgaW50IGxvZ19mZHNbKGludClMT0dfSURfTUFYXSA9IHsgLTEsIC0xIH07CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfbnVsbChsb2dfaWRfdCBsb2dfZmQsIHN0cnVjdCBpb3ZlYyAqdmVjKQoreworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludCBfX3dyaXRlX3RvX2xvZ19rZXJuZWwobG9nX2lkX3QgbG9nX2lkLCBzdHJ1Y3QgaW92ZWMgKnZlYykKK3sKKyAgICBzc2l6ZV90IHJldDsKKyAgICBpbnQgbG9nX2ZkOworCisgICAgaWYgKChpbnQpbG9nX2lkID49IDAgJiYgKGludClsb2dfaWQgPCAoaW50KUxPR19JRF9NQVgpIHsKKyAgICAgICAgbG9nX2ZkID0gbG9nX2Zkc1soaW50KWxvZ19pZF07CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEVCQURGOworICAgIH0KKworICAgIGRvIHsKKyAgICAgICAgcmV0ID0gd3JpdGV2KGxvZ19mZCwgdmVjLCAzKTsKKyAgICB9IHdoaWxlIChyZXQgPCAwICYmIGVycm5vID09IEVJTlRSKTsKKworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgX193cml0ZV90b19sb2dfaW5pdChsb2dfaWRfdCBsb2dfaWQsIHN0cnVjdCBpb3ZlYyAqdmVjKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmbG9nX2luaXRfbG9jayk7CisKKyAgICBpZiAod3JpdGVfdG9fbG9nID09IF9fd3JpdGVfdG9fbG9nX2luaXQpIHsKKyAgICAgICAgbG9nX2Zkc1tMT0dfSURfTUFJTl0gPSBvcGVuKCIvZGV2LyJMT0dHRVJfTE9HX01BSU4sIE9fV1JPTkxZKTsKKyAgICAgICAgbG9nX2Zkc1tMT0dfSURfUkFESU9dID0gb3BlbigiL2Rldi8iTE9HR0VSX0xPR19SQURJTywgT19XUk9OTFkpOworCisgICAgICAgIHdyaXRlX3RvX2xvZyA9IF9fd3JpdGVfdG9fbG9nX2tlcm5lbDsKKworICAgICAgICBpZiAobG9nX2Zkc1tMT0dfSURfTUFJTl0gPCAwIHx8IGxvZ19mZHNbTE9HX0lEX1JBRElPXSA8IDApIHsKKyAgICAgICAgICAgIGNsb3NlKGxvZ19mZHNbTE9HX0lEX01BSU5dKTsKKyAgICAgICAgICAgIGNsb3NlKGxvZ19mZHNbTE9HX0lEX1JBRElPXSk7CisgICAgICAgICAgICBsb2dfZmRzW0xPR19JRF9NQUlOXSA9IC0xOworICAgICAgICAgICAgbG9nX2Zkc1tMT0dfSURfUkFESU9dID0gLTE7CisgICAgICAgICAgICB3cml0ZV90b19sb2cgPSBfX3dyaXRlX3RvX2xvZ19udWxsOworICAgICAgICB9CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmxvZ19pbml0X2xvY2spOworCisgICAgcmV0dXJuIHdyaXRlX3RvX2xvZyhsb2dfaWQsIHZlYyk7Cit9CisKK3N0YXRpYyBpbnQgX19hbmRyb2lkX2xvZ193cml0ZShpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICptc2cpCit7CisgICAgc3RydWN0IGlvdmVjIHZlY1szXTsKKyAgICBsb2dfaWRfdCBsb2dfaWQgPSBMT0dfSURfTUFJTjsKKworICAgIGlmICghdGFnKQorICAgICAgICB0YWcgPSAiIjsKKworICAgIGlmICghc3RyY21wKHRhZywgIkhUQ19SSUwiKSkKKyAgICAgICAgbG9nX2lkID0gTE9HX0lEX1JBRElPOworCisgICAgdmVjWzBdLmlvdl9iYXNlICAgPSAodW5zaWduZWQgY2hhciAqKSAmcHJpbzsKKyAgICB2ZWNbMF0uaW92X2xlbiAgICA9IDE7CisgICAgdmVjWzFdLmlvdl9iYXNlICAgPSAodm9pZCAqKSB0YWc7CisgICAgdmVjWzFdLmlvdl9sZW4gICAgPSBzdHJsZW4odGFnKSArIDE7CisgICAgdmVjWzJdLmlvdl9iYXNlICAgPSAodm9pZCAqKSBtc2c7CisgICAgdmVjWzJdLmlvdl9sZW4gICAgPSBzdHJsZW4obXNnKSArIDE7CisKKyAgICByZXR1cm4gd3JpdGVfdG9fbG9nKGxvZ19pZCwgdmVjKTsKK30KKworCitzdGF0aWMgaW50IF9fYW5kcm9pZF9sb2dfdnByaW50KGludCBwcmlvLCBjb25zdCBjaGFyICp0YWcsIGNvbnN0IGNoYXIgKmZtdCwKKwkJCQl2YV9saXN0IGFwKQoreworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKworICAgIHJldHVybiBfX2FuZHJvaWRfbG9nX3dyaXRlKHByaW8sIHRhZywgYnVmKTsKK30KKworaW50IF9fbGliY19hbmRyb2lkX2xvZ19wcmludChpbnQgcHJpbywgY29uc3QgY2hhciAqdGFnLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgcmV0dXJuIF9fYW5kcm9pZF9sb2dfd3JpdGUocHJpbywgdGFnLCBidWYpOworfQorCitpbnQgX19saWJjX2FuZHJvaWRfbG9nX2Fzc2VydChjb25zdCBjaGFyICpjb25kLCBjb25zdCBjaGFyICp0YWcsCisJCQkgICAgICBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIGNoYXIgYnVmW0xPR19CVUZfU0laRV07ICAgIAorCisgICAgdmFfc3RhcnQoYXAsIGZtdCk7CisgICAgdnNucHJpbnRmKGJ1ZiwgTE9HX0JVRl9TSVpFLCBmbXQsIGFwKTsKKyAgICB2YV9lbmQoYXApOworCisgICAgX19hbmRyb2lkX2xvZ193cml0ZShBTkRST0lEX0xPR19GQVRBTCwgdGFnLCBidWYpOworCisgICAgZXhpdCgxKTsKKworICAgIHJldHVybiAtMTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL21hbGxvY19sZWFrLmMgYi9saWJjL2Jpb25pYy9tYWxsb2NfbGVhay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyMWVhMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tYWxsb2NfbGVhay5jCkBAIC0wLDAgKzEsODc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVud2luZC5oPgorCisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN5cy91bi5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworI2luY2x1ZGUgImRsbWFsbG9jLmgiCisjaW5jbHVkZSAibG9nZC5oIgorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gVXRpbGl0aWVzIGRpcmVjdGx5IHVzZWQgYnkgRGFsdmlrCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lIEhBU0hUQUJMRV9TSVpFICAgICAgMTU0MworI2RlZmluZSBCQUNLVFJBQ0VfU0laRSAgICAgIDMyCisvKiBmbGFnIGRlZmluaXRpb25zLCBjdXJyZW50bHkgc2hhcmluZyBzdG9yYWdlIHdpdGggInNpemUiICovCisjZGVmaW5lIFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQgICgxPDwzMSkKKyNkZWZpbmUgU0laRV9GTEFHX01BU0sgICAgICAgICAgKFNJWkVfRkxBR19aWUdPVEVfQ0hJTEQpCisKKy8qCisgKiBJbiBhIFZNIHByb2Nlc3MsIHRoaXMgaXMgc2V0IHRvIDEgYWZ0ZXIgZm9yaygpaW5nIG91dCBvZiB6eWdvdGUuCisgKi8KK2ludCBnTWFsbG9jTGVha1p5Z290ZUNoaWxkID0gMDsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0cnVjdHVyZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3R5cGVkZWYgc3RydWN0IEhhc2hFbnRyeSBIYXNoRW50cnk7CitzdHJ1Y3QgSGFzaEVudHJ5IHsKKyAgICBzaXplX3Qgc2xvdDsKKyAgICBIYXNoRW50cnkqIHByZXY7CisgICAgSGFzaEVudHJ5KiBuZXh0OworICAgIHNpemVfdCBudW1FbnRyaWVzOworICAgIC8vIGZpZWxkcyBhYm92ZSAic2l6ZSIgYXJlIE5PVCBzZW50IHRvIHRoZSBob3N0CisgICAgc2l6ZV90IHNpemU7CisgICAgc2l6ZV90IGFsbG9jYXRpb25zOworICAgIGludHB0cl90IGJhY2t0cmFjZVswXTsKK307CisKK3R5cGVkZWYgc3RydWN0IEhhc2hUYWJsZSBIYXNoVGFibGU7CitzdHJ1Y3QgSGFzaFRhYmxlIHsKKyAgICBzaXplX3QgY291bnQ7CisgICAgSGFzaEVudHJ5KiBzbG90c1tIQVNIVEFCTEVfU0laRV07Cit9OworCitzdGF0aWMgcHRocmVhZF9tdXRleF90IGdBbGxvY2F0aW9uc011dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBIYXNoVGFibGUgZ0hhc2hUYWJsZTsKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIG91dHB1dCBmdWNudGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3N0YXRpYyBpbnQgaGFzaF9lbnRyeV9jb21wYXJlKGNvbnN0IHZvaWQqIGFyZzEsIGNvbnN0IHZvaWQqIGFyZzIpCit7CisgICAgSGFzaEVudHJ5KiBlMSA9ICooSGFzaEVudHJ5KiopYXJnMTsKKyAgICBIYXNoRW50cnkqIGUyID0gKihIYXNoRW50cnkqKilhcmcyOworCisgICAgc2l6ZV90IG5iQWxsb2MxID0gZTEtPmFsbG9jYXRpb25zOworICAgIHNpemVfdCBuYkFsbG9jMiA9IGUyLT5hbGxvY2F0aW9uczsKKyAgICBzaXplX3Qgc2l6ZTEgPSBlMS0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3Qgc2l6ZTIgPSBlMi0+c2l6ZSAmIH5TSVpFX0ZMQUdfTUFTSzsKKyAgICBzaXplX3QgYWxsb2MxID0gbmJBbGxvYzEgKiBzaXplMTsKKyAgICBzaXplX3QgYWxsb2MyID0gbmJBbGxvYzIgKiBzaXplMjsKKworICAgIC8vIHNvcnQgaW4gZGVzY2VuZGluZyBvcmRlciBieToKKyAgICAvLyAxKSB0b3RhbCBzaXplCisgICAgLy8gMikgbnVtYmVyIG9mIGFsbG9jYXRpb25zCisgICAgLy8KKyAgICAvLyBUaGlzIGlzIHVzZWQgZm9yIHNvcnRpbmcsIG5vdCBkZXRlcm1pbmF0aW9uIG9mIGVxdWFsaXR5LCBzbyB3ZSBkb24ndAorICAgIC8vIG5lZWQgdG8gY29tcGFyZSB0aGUgYml0IGZsYWdzLgorICAgIGludCByZXN1bHQ7CisgICAgaWYgKGFsbG9jMSA+IGFsbG9jMikgeworICAgICAgICByZXN1bHQgPSAtMTsKKyAgICB9IGVsc2UgaWYgKGFsbG9jMSA8IGFsbG9jMikgeworICAgICAgICByZXN1bHQgPSAxOworICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChuYkFsbG9jMSA+IG5iQWxsb2MyKSB7CisgICAgICAgICAgICByZXN1bHQgPSAtMTsKKyAgICAgICAgfSBlbHNlIGlmIChuYkFsbG9jMSA8IG5iQWxsb2MyKSB7CisgICAgICAgICAgICByZXN1bHQgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmVzdWx0OworfQorCisvKgorICogUmV0cmlldmUgbmF0aXZlIGhlYXAgaW5mb3JtYXRpb24uCisgKgorICogIippbmZvIiBpcyBzZXQgdG8gYSBidWZmZXIgd2UgYWxsb2NhdGUKKyAqICIqb3ZlcmFsbFNpemUiIGlzIHNldCB0byB0aGUgc2l6ZSBvZiB0aGUgImluZm8iIGJ1ZmZlcgorICogIippbmZvU2l6ZSIgaXMgc2V0IHRvIHRoZSBzaXplIG9mIGEgc2luZ2xlIGVudHJ5CisgKiAiKnRvdGFsTWVtb3J5IiBpcyBzZXQgdG8gdGhlIHN1bSBvZiBhbGwgYWxsb2NhdGlvbnMgd2UncmUgdHJhY2tpbmc7IGRvZXMKKyAqICAgbm90IGluY2x1ZGUgaGVhcCBvdmVyaGVhZAorICogIipiYWNrdHJhY2VTaXplIiBpcyBzZXQgdG8gdGhlIG1heGltdW0gbnVtYmVyIG9mIGVudHJpZXMgaW4gdGhlIGJhY2sgdHJhY2UKKyAqLwordm9pZCBnZXRfbWFsbG9jX2xlYWtfaW5mbyh1aW50OF90KiogaW5mbywgc2l6ZV90KiBvdmVyYWxsU2l6ZSwKKyAgICAgICAgc2l6ZV90KiBpbmZvU2l6ZSwgc2l6ZV90KiB0b3RhbE1lbW9yeSwgc2l6ZV90KiBiYWNrdHJhY2VTaXplKQoreworICAgIC8vIGRvbid0IGRvIGFueXRoaW5nIGlmIHdlIGhhdmUgaW52YWxpZCBhcmd1bWVudHMKKyAgICBpZiAoaW5mbyA9PSBOVUxMIHx8IG92ZXJhbGxTaXplID09IE5VTEwgfHwgaW5mb1NpemUgPT0gTlVMTCB8fAorICAgICAgICAgICAgdG90YWxNZW1vcnkgPT0gTlVMTCB8fCBiYWNrdHJhY2VTaXplID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworCisgICAgaWYgKGdIYXNoVGFibGUuY291bnQgPT0gMCkgeworICAgICAgICAqaW5mbyA9IE5VTEw7CisgICAgICAgICpvdmVyYWxsU2l6ZSA9IDA7CisgICAgICAgICppbmZvU2l6ZSA9IDA7CisgICAgICAgICp0b3RhbE1lbW9yeSA9IDA7CisgICAgICAgICpiYWNrdHJhY2VTaXplID0gMDsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKyAgICAKKyAgICB2b2lkKiogbGlzdCA9ICh2b2lkKiopZGxtYWxsb2Moc2l6ZW9mKHZvaWQqKSAqIGdIYXNoVGFibGUuY291bnQpOworCisgICAgLy8gZGVidWdfbG9nKCIqKioqKlxuZ0hhc2hUYWJsZS5jb3VudCA9ICVkXG4iLCBnSGFzaFRhYmxlLmNvdW50KTsKKyAgICAvLyBkZWJ1Z19sb2coImxpc3QgPSAlcFxuIiwgbGlzdCk7CisKKyAgICAvLyBnZXQgdGhlIGVudHJpZXMgaW50byBhbiBhcnJheSB0byBiZSBzb3J0ZWQKKyAgICBpbnQgaW5kZXggPSAwOworICAgIGludCBpOworICAgIGZvciAoaSA9IDAgOyBpIDwgSEFTSFRBQkxFX1NJWkUgOyBpKyspIHsKKyAgICAgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGdIYXNoVGFibGUuc2xvdHNbaV07CisgICAgICAgIHdoaWxlIChlbnRyeSAhPSBOVUxMKSB7CisgICAgICAgICAgICBsaXN0W2luZGV4XSA9IGVudHJ5OworICAgICAgICAgICAgKnRvdGFsTWVtb3J5ID0gKnRvdGFsTWVtb3J5ICsKKyAgICAgICAgICAgICAgICAoKGVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLKSAqIGVudHJ5LT5hbGxvY2F0aW9ucyk7CisgICAgICAgICAgICBpbmRleCsrOworICAgICAgICAgICAgZW50cnkgPSBlbnRyeS0+bmV4dDsKKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIGRlYnVnX2xvZygic29ydGVkIGxpc3QhXG4iKTsKKyAgICAvLyBYWFg6IHRoZSBwcm90b2NvbCBkb2Vzbid0IGFsbG93IHZhcmlhYmxlIHNpemUgZm9yIHRoZSBzdGFjayB0cmFjZSAoeWV0KQorICAgICppbmZvU2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZihpbnRwdHJfdCkgKiBCQUNLVFJBQ0VfU0laRSk7CisgICAgKm92ZXJhbGxTaXplID0gKmluZm9TaXplICogZ0hhc2hUYWJsZS5jb3VudDsKKyAgICAqYmFja3RyYWNlU2l6ZSA9IEJBQ0tUUkFDRV9TSVpFOworCisgICAgLy8gZGVidWdfbG9nKCJpbmZvU2l6ZSA9IDB4JXggb3ZlcmFsbCA9IDB4JXhcbiIsICppbmZvU2l6ZSwgKm92ZXJhbGxTaXplKTsKKyAgICAvLyBub3cgZ2V0IEEgYnl0ZSBhcnJheSBiaWcgZW5vdWdoIGZvciB0aGlzCisgICAgKmluZm8gPSAodWludDhfdCopZGxtYWxsb2MoKm92ZXJhbGxTaXplKTsKKworICAgIC8vIGRlYnVnX2xvZygiaW5mbyA9ICVwXG4iLCBpbmZvKTsKKyAgICBpZiAoKmluZm8gPT0gTlVMTCkgeworICAgICAgICAqb3ZlcmFsbFNpemUgPSAwOworICAgICAgICBnb3RvIGRvbmU7CisgICAgfQorCisgICAgLy8gZGVidWdfbG9nKCJzb3J0aW5nIGxpc3QuLi5cbiIpOworICAgIHFzb3J0KCh2b2lkKilsaXN0LCBnSGFzaFRhYmxlLmNvdW50LCBzaXplb2Yodm9pZCopLCBoYXNoX2VudHJ5X2NvbXBhcmUpOworCisgICAgdWludDhfdCogaGVhZCA9ICppbmZvOworICAgIGNvbnN0IGludCBjb3VudCA9IGdIYXNoVGFibGUuY291bnQ7CisgICAgZm9yIChpID0gMCA7IGkgPCBjb3VudCA7IGkrKykgeworICAgICAgICBIYXNoRW50cnkqIGVudHJ5ID0gbGlzdFtpXTsKKyAgICAgICAgc2l6ZV90IGVudHJ5U2l6ZSA9IChzaXplb2Yoc2l6ZV90KSAqIDIpICsgKHNpemVvZihpbnRwdHJfdCkgKiBlbnRyeS0+bnVtRW50cmllcyk7CisgICAgICAgIGlmIChlbnRyeVNpemUgPCAqaW5mb1NpemUpIHsKKyAgICAgICAgICAgIC8qIHdlJ3JlIHdyaXRpbmcgbGVzcyB0aGFuIGEgZnVsbCBlbnRyeSwgY2xlYXIgb3V0IHRoZSByZXN0ICovCisgICAgICAgICAgICAvKiBUT0RPOiBvbmx5IGNsZWFyIG91dCB0aGUgcGFydCB3ZSdyZSBub3Qgb3ZlcndyaXRpbmc/ICovCisgICAgICAgICAgICBtZW1zZXQoaGVhZCwgMCwgKmluZm9TaXplKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIC8qIG1ha2Ugc3VyZSB0aGUgYW1vdW50IHdlJ3JlIGNvcHlpbmcgZG9lc24ndCBleGNlZWQgdGhlIGxpbWl0ICovCisgICAgICAgICAgICBlbnRyeVNpemUgPSAqaW5mb1NpemU7CisgICAgICAgIH0KKyAgICAgICAgbWVtY3B5KGhlYWQsICYoZW50cnktPnNpemUpLCBlbnRyeVNpemUpOworICAgICAgICBoZWFkICs9ICppbmZvU2l6ZTsKKyAgICB9CisKKyAgICBkbGZyZWUobGlzdCk7CisKK2RvbmU6CisgICAgLy8gZGVidWdfbG9nKCIrKysrKyBkb25lIVxuIik7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKK30KKwordm9pZCBmcmVlX21hbGxvY19sZWFrX2luZm8odWludDhfdCogaW5mbykKK3sKKyAgICBkbGZyZWUoaW5mbyk7Cit9CisKK3N0cnVjdCBtYWxsaW5mbyBtYWxsaW5mbygpCit7CisgICAgcmV0dXJuIGRsbWFsbGluZm8oKTsKK30KKwordm9pZCogdmFsbG9jKHNpemVfdCBieXRlcykgeworICAgIC8qIGFzc3VtZSBwYWdlIHNpemUgb2YgNDA5NiBieXRlcyAqLworICAgIHJldHVybiBtZW1hbGlnbiggZ2V0cGFnZXNpemUoKSwgYnl0ZXMgKTsKK30KKworCisvKgorICogQ29kZSBndWFyZGVkIGJ5IE1BTExPQ19MRUFLX0NIRUNLIGlzIG9ubHkgbmVlZGVkIHdoZW4gbWFsbG9jIGNoZWNrIGlzCisgKiBlbmFibGVkLiBDdXJyZW50bHkgd2UgZXhjbHVkZSB0aGVtIGluIGxpYmMuc28sIGFuZCBvbmx5IGluY2x1ZGUgdGhlbSBpbgorICogbGliY19kZWJ1Zy5zby4KKyAqLworI2lmZGVmIE1BTExPQ19MRUFLX0NIRUNLCisjZGVmaW5lIE1BTExPQ19BTElHTk1FTlQgICAgOAorI2RlZmluZSBHVUFSRCAgICAgICAgICAgICAgIDB4NDgxNTE2NDIKKworI2RlZmluZSBERUJVRyAgICAgICAgICAgICAgIDAKKworLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KKy8vIFN0cnVjdHVyZXMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Cit0eXBlZGVmIHN0cnVjdCBBbGxvY2F0aW9uRW50cnkgQWxsb2NhdGlvbkVudHJ5Oworc3RydWN0IEFsbG9jYXRpb25FbnRyeSB7CisgICAgSGFzaEVudHJ5KiBlbnRyeTsKKyAgICB1aW50MzJfdCBndWFyZDsKK307CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBsb2cgZnVudGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNkZWZpbmUgZGVidWdfbG9nKGZvcm1hdCwgLi4uKSAgXAorICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19ERUJVRywgIm1hbGxvY19sZWFrIiwgKGZvcm1hdCksICMjX19WQV9BUkdTX18gKQorCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gSGFzaCBUYWJsZSBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CitzdGF0aWMgdWludDMyX3QgZ2V0X2hhc2goaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMpCit7CisgICAgaWYgKGJhY2t0cmFjZSA9PSBOVUxMKSByZXR1cm4gMDsKKworICAgIGludCBoYXNoID0gMDsKKyAgICBzaXplX3QgaTsKKyAgICBmb3IgKGkgPSAwIDsgaSA8IG51bUVudHJpZXMgOyBpKyspIHsKKyAgICAgICAgaGFzaCA9IChoYXNoICogMzMpICsgKGJhY2t0cmFjZVtpXSA+PiAyKTsKKyAgICB9CisKKyAgICByZXR1cm4gaGFzaDsKK30KKworc3RhdGljIEhhc2hFbnRyeSogZmluZF9lbnRyeShIYXNoVGFibGUqIHRhYmxlLCBpbnQgc2xvdCwKKyAgICAgICAgaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMsIHNpemVfdCBzaXplKQoreworICAgIEhhc2hFbnRyeSogZW50cnkgPSB0YWJsZS0+c2xvdHNbc2xvdF07CisgICAgd2hpbGUgKGVudHJ5ICE9IE5VTEwpIHsKKyAgICAgICAgLy9kZWJ1Z19sb2coImJhY2t0cmFjZTogJXAsIGVudHJ5OiAlcCBlbnRyeS0+YmFja3RyYWNlOiAlcFxuIiwKKyAgICAgICAgLy8gICAgICAgIGJhY2t0cmFjZSwgZW50cnksIChlbnRyeSAhPSBOVUxMKSA/IGVudHJ5LT5iYWNrdHJhY2UgOiBOVUxMKTsKKyAgICAgICAgLyoKKyAgICAgICAgICogU2VlIGlmIHRoZSBlbnRyeSBtYXRjaGVzIGV4YWN0bHkuICBXZSBjb21wYXJlIHRoZSAic2l6ZSIgZmllbGQsCisgICAgICAgICAqIGluY2x1ZGluZyB0aGUgZmxhZyBiaXRzLgorICAgICAgICAgKi8KKyAgICAgICAgaWYgKGVudHJ5LT5zaXplID09IHNpemUgJiYgZW50cnktPm51bUVudHJpZXMgPT0gbnVtRW50cmllcyAmJgorICAgICAgICAgICAgICAgICFtZW1jbXAoYmFja3RyYWNlLCBlbnRyeS0+YmFja3RyYWNlLCBudW1FbnRyaWVzICogc2l6ZW9mKGludHB0cl90KSkpIHsKKyAgICAgICAgICAgIHJldHVybiBlbnRyeTsKKyAgICAgICAgfQorCisgICAgICAgIGVudHJ5ID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBIYXNoRW50cnkqIHJlY29yZF9iYWNrdHJhY2UoaW50cHRyX3QqIGJhY2t0cmFjZSwgc2l6ZV90IG51bUVudHJpZXMsIHNpemVfdCBzaXplKQoreworICAgIHNpemVfdCBoYXNoID0gZ2V0X2hhc2goYmFja3RyYWNlLCBudW1FbnRyaWVzKTsKKyAgICBzaXplX3Qgc2xvdCA9IGhhc2ggJSBIQVNIVEFCTEVfU0laRTsKKworICAgIGlmIChzaXplICYgU0laRV9GTEFHX01BU0spIHsKKyAgICAgICAgZGVidWdfbG9nKCJtYWxsb2NfZGVidWc6IGFsbG9jYXRpb24gJXp4IGV4Y2VlZHMgYml0IHdpZHRoXG4iLCBzaXplKTsKKyAgICAgICAgYWJvcnQoKTsKKyAgICB9CisKKyAgICBpZiAoZ01hbGxvY0xlYWtaeWdvdGVDaGlsZCkKKyAgICAgICAgc2l6ZSB8PSBTSVpFX0ZMQUdfWllHT1RFX0NISUxEOworCisgICAgSGFzaEVudHJ5KiBlbnRyeSA9IGZpbmRfZW50cnkoJmdIYXNoVGFibGUsIHNsb3QsIGJhY2t0cmFjZSwgbnVtRW50cmllcywgc2l6ZSk7CisKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBlbnRyeS0+YWxsb2NhdGlvbnMrKzsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBjcmVhdGUgYSBuZXcgZW50cnkKKyAgICAgICAgZW50cnkgPSAoSGFzaEVudHJ5KilkbG1hbGxvYyhzaXplb2YoSGFzaEVudHJ5KSArIG51bUVudHJpZXMqc2l6ZW9mKGludHB0cl90KSk7CisgICAgICAgIGVudHJ5LT5hbGxvY2F0aW9ucyA9IDE7CisgICAgICAgIGVudHJ5LT5zbG90ID0gc2xvdDsKKyAgICAgICAgZW50cnktPnByZXYgPSBOVUxMOworICAgICAgICBlbnRyeS0+bmV4dCA9IGdIYXNoVGFibGUuc2xvdHNbc2xvdF07CisgICAgICAgIGVudHJ5LT5udW1FbnRyaWVzID0gbnVtRW50cmllczsKKyAgICAgICAgZW50cnktPnNpemUgPSBzaXplOworCisgICAgICAgIG1lbWNweShlbnRyeS0+YmFja3RyYWNlLCBiYWNrdHJhY2UsIG51bUVudHJpZXMgKiBzaXplb2YoaW50cHRyX3QpKTsKKworICAgICAgICBnSGFzaFRhYmxlLnNsb3RzW3Nsb3RdID0gZW50cnk7CisKKyAgICAgICAgaWYgKGVudHJ5LT5uZXh0ICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGVudHJ5LT5uZXh0LT5wcmV2ID0gZW50cnk7CisgICAgICAgIH0KKworICAgICAgICAvLyB3ZSBqdXN0IGFkZGVkIGFuIGVudHJ5LCBpbmNyZWFzZSB0aGUgc2l6ZSBvZiB0aGUgaGFzaHRhYmxlCisgICAgICAgIGdIYXNoVGFibGUuY291bnQrKzsKKyAgICB9CisKKyAgICByZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyBpbnQgaXNfdmFsaWRfZW50cnkoSGFzaEVudHJ5KiBlbnRyeSkKK3sKKyAgICBpZiAoZW50cnkgIT0gTlVMTCkgeworICAgICAgICBpbnQgaTsKKyAgICAgICAgZm9yIChpID0gMCA7IGkgPCBIQVNIVEFCTEVfU0laRSA7IGkrKykgeworICAgICAgICAgICAgSGFzaEVudHJ5KiBlMSA9IGdIYXNoVGFibGUuc2xvdHNbaV07CisKKyAgICAgICAgICAgIHdoaWxlIChlMSAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgaWYgKGUxID09IGVudHJ5KSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIGUxID0gZTEtPm5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgcmVtb3ZlX2VudHJ5KEhhc2hFbnRyeSogZW50cnkpCit7CisgICAgSGFzaEVudHJ5KiBwcmV2ID0gZW50cnktPnByZXY7CisgICAgSGFzaEVudHJ5KiBuZXh0ID0gZW50cnktPm5leHQ7CisKKyAgICBpZiAocHJldiAhPSBOVUxMKSBlbnRyeS0+cHJldi0+bmV4dCA9IG5leHQ7CisgICAgaWYgKG5leHQgIT0gTlVMTCkgZW50cnktPm5leHQtPnByZXYgPSBwcmV2OworCisgICAgaWYgKHByZXYgPT0gTlVMTCkgeworICAgICAgICAvLyB3ZSBhcmUgdGhlIGhlYWQgb2YgdGhlIGxpc3QuIHNldCB0aGUgaGVhZCB0byBiZSBuZXh0CisgICAgICAgIGdIYXNoVGFibGUuc2xvdHNbZW50cnktPnNsb3RdID0gZW50cnktPm5leHQ7CisgICAgfQorCisgICAgLy8gd2UganVzdCByZW1vdmVkIGFuZCBlbnRyeSwgZGVjcmVhc2UgdGhlIHNpemUgb2YgdGhlIGhhc2h0YWJsZQorICAgIGdIYXNoVGFibGUuY291bnQtLTsKK30KKworCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorLy8gc3RhY2sgdHJhY2UgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit0eXBlZGVmIHN0cnVjdAoreworICAgIHNpemVfdCBjb3VudDsKKyAgICBpbnRwdHJfdCogYWRkcnM7Cit9IHN0YWNrX2NyYXdsX3N0YXRlX3Q7CisKK3N0YXRpYyBfVW53aW5kX1JlYXNvbl9Db2RlIHRyYWNlX2Z1bmN0aW9uKF9VbndpbmRfQ29udGV4dCAqY29udGV4dCwgdm9pZCAqYXJnKQoreworICAgIHN0YWNrX2NyYXdsX3N0YXRlX3QqIHN0YXRlID0gKHN0YWNrX2NyYXdsX3N0YXRlX3QqKWFyZzsKKyAgICBpZiAoc3RhdGUtPmNvdW50KSB7CisgICAgICAgIGludHB0cl90IGlwID0gKGludHB0cl90KV9VbndpbmRfR2V0SVAoY29udGV4dCk7CisgICAgICAgIGlmIChpcCkgeworICAgICAgICAgICAgc3RhdGUtPmFkZHJzWzBdID0gaXA7IAorICAgICAgICAgICAgc3RhdGUtPmFkZHJzKys7CisgICAgICAgICAgICBzdGF0ZS0+Y291bnQtLTsKKyAgICAgICAgICAgIHJldHVybiBfVVJDX05PX1JFQVNPTjsKKyAgICAgICAgfQorICAgIH0KKyAgICAvKiAKKyAgICAgKiBJZiB3ZSBydW4gb3V0IG9mIHNwYWNlIHRvIHJlY29yZCB0aGUgYWRkcmVzcyBvciAwIGhhcyBiZWVuIHNlZW4sIHN0b3AKKyAgICAgKiB1bndpbmRpbmcgdGhlIHN0YWNrLgorICAgICAqLworICAgIHJldHVybiBfVVJDX0VORF9PRl9TVEFDSzsKK30KKworc3RhdGljIGlubGluZQoraW50IGdldF9iYWNrdHJhY2UoaW50cHRyX3QqIGFkZHJzLCBzaXplX3QgbWF4X2VudHJpZXMpCit7CisgICAgc3RhY2tfY3Jhd2xfc3RhdGVfdCBzdGF0ZTsKKyAgICBzdGF0ZS5jb3VudCA9IG1heF9lbnRyaWVzOworICAgIHN0YXRlLmFkZHJzID0gKGludHB0cl90KilhZGRyczsKKyAgICBfVW53aW5kX0JhY2t0cmFjZSh0cmFjZV9mdW5jdGlvbiwgKHZvaWQqKSZzdGF0ZSk7CisgICAgcmV0dXJuIG1heF9lbnRyaWVzIC0gc3RhdGUuY291bnQ7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWxsb2MgbGVhayBmdW5jdGlvbiBkaXNwYXRjaGVyCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzdGF0aWMgdm9pZCogbGVha19tYWxsb2Moc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkICBsZWFrX2ZyZWUodm9pZCogbWVtKTsKK3N0YXRpYyB2b2lkKiBsZWFrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7CitzdGF0aWMgdm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKTsKK3N0YXRpYyB2b2lkKiBsZWFrX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcyk7CisKK3N0YXRpYyB2b2lkKiBmaWxsX21hbGxvYyhzaXplX3QgYnl0ZXMpOworc3RhdGljIHZvaWQgIGZpbGxfZnJlZSh2b2lkKiBtZW0pOworc3RhdGljIHZvaWQqIGZpbGxfcmVhbGxvYyh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcyk7CitzdGF0aWMgdm9pZCogZmlsbF9tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCitzdGF0aWMgdm9pZCogY2hrX21hbGxvYyhzaXplX3QgYnl0ZXMpOworc3RhdGljIHZvaWQgIGNoa19mcmVlKHZvaWQqIG1lbSk7CitzdGF0aWMgdm9pZCogY2hrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7CitzdGF0aWMgdm9pZCogY2hrX3JlYWxsb2Modm9pZCogb2xkTWVtLCBzaXplX3QgYnl0ZXMpOworc3RhdGljIHZvaWQqIGNoa19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgdm9pZCogKCptYWxsb2MpKHNpemVfdCBieXRlcyk7CisgICAgdm9pZCAgKCpmcmVlKSh2b2lkKiBtZW0pOworICAgIHZvaWQqICgqY2FsbG9jKShzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSk7CisgICAgdm9pZCogKCpyZWFsbG9jKSh2b2lkKiBvbGRNZW0sIHNpemVfdCBieXRlcyk7CisgICAgdm9pZCogKCptZW1hbGlnbikoc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKTsKK30gTWFsbG9jRGVidWc7CisKK3N0YXRpYyBjb25zdCBNYWxsb2NEZWJ1ZyBnTWFsbG9jRW5naW5lVGFibGVbXSBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKDMyKSkpID0KK3sKKyAgICB7IGRsbWFsbG9jLCAgICAgZGxmcmVlLCAgICAgZGxjYWxsb2MsICAgICAgIGRscmVhbGxvYywgICAgIGRsbWVtYWxpZ24gfSwKKyAgICB7IGxlYWtfbWFsbG9jLCAgbGVha19mcmVlLCAgbGVha19jYWxsb2MsICAgIGxlYWtfcmVhbGxvYywgIGxlYWtfbWVtYWxpZ24gfSwKKyAgICB7IGZpbGxfbWFsbG9jLCAgZmlsbF9mcmVlLCAgZGxjYWxsb2MsICAgICAgIGZpbGxfcmVhbGxvYywgIGZpbGxfbWVtYWxpZ24gfSwKKyAgICB7IGNoa19tYWxsb2MsICAgY2hrX2ZyZWUsICAgY2hrX2NhbGxvYywgICAgIGNoa19yZWFsbG9jLCAgIGNoa19tZW1hbGlnbiB9Cit9OworCitlbnVtIHsKKyAgICBJTkRFWF9OT1JNQUwgPSAwLAorICAgIElOREVYX0xFQUtfQ0hFQ0ssCisgICAgSU5ERVhfTUFMTE9DX0ZJTEwsCisgICAgSU5ERVhfTUFMTE9DX0NIRUNLLAorfTsKKworc3RhdGljIE1hbGxvY0RlYnVnIGNvbnN0ICogZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9OT1JNQUxdOworc3RhdGljIGludCBnTWFsbG9jRGVidWdMZXZlbDsKK3N0YXRpYyBpbnQgZ1RyYXBPbkVycm9yID0gMTsKKwordm9pZCogbWFsbG9jKHNpemVfdCBieXRlcykgeworICAgIHJldHVybiBnTWFsbG9jRGlzcGF0Y2gtPm1hbGxvYyhieXRlcyk7Cit9Cit2b2lkIGZyZWUodm9pZCogbWVtKSB7CisgICAgZ01hbGxvY0Rpc3BhdGNoLT5mcmVlKG1lbSk7Cit9Cit2b2lkKiBjYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpIHsKKyAgICByZXR1cm4gZ01hbGxvY0Rpc3BhdGNoLT5jYWxsb2Mobl9lbGVtZW50cywgZWxlbV9zaXplKTsKK30KK3ZvaWQqIHJlYWxsb2Modm9pZCogb2xkTWVtLCBzaXplX3QgYnl0ZXMpIHsKKyAgICByZXR1cm4gZ01hbGxvY0Rpc3BhdGNoLT5yZWFsbG9jKG9sZE1lbSwgYnl0ZXMpOworfQordm9pZCogbWVtYWxpZ24oc2l6ZV90IGFsaWdubWVudCwgc2l6ZV90IGJ5dGVzKSB7CisgICAgcmV0dXJuIGdNYWxsb2NEaXNwYXRjaC0+bWVtYWxpZ24oYWxpZ25tZW50LCBieXRlcyk7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWxsb2MgY2hlY2sgZnVuY3Rpb25zCisvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCisjZGVmaW5lIENIS19GSUxMX0ZSRUUgICAgICAgICAgIDB4ZWYKKyNkZWZpbmUgQ0hLX1NFTlRJTkVMX1ZBTFVFICAgICAgMHhlYgorI2RlZmluZSBDSEtfU0VOVElORUxfSEVBRF9TSVpFICAxNgorI2RlZmluZSBDSEtfU0VOVElORUxfVEFJTF9TSVpFICAxNgorI2RlZmluZSBDSEtfT1ZFUkhFQURfU0laRSAgICAgICAoICAgQ0hLX1NFTlRJTkVMX0hFQURfU0laRSArICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENIS19TRU5USU5FTF9UQUlMX1NJWkUgKyAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2Yoc2l6ZV90KSApCisKK3N0YXRpYyB2b2lkIGR1bXBfc3RhY2tfdHJhY2UoKQoreworICAgIGludHB0cl90IGFkZHJzWzIwXTsKKyAgICBpbnQgYyA9IGdldF9iYWNrdHJhY2UoYWRkcnMsIDIwKTsKKyAgICBjaGFyIGJ1ZlsxNl07CisgICAgY2hhciB0bXBbMTYqMjBdOworICAgIGludCBpOworCisgICAgdG1wWzBdID0gMDsgLy8gTmVlZCB0byBpbml0aWFsaXplIHRtcFswXSBmb3IgdGhlIGZpcnN0IHN0cmNhdAorICAgIGZvciAoaT0wIDsgaTxjOyBpKyspIHsKKyAgICAgICAgc3ByaW50ZihidWYsICIlMmQ6ICUwOHhcbiIsIGksIGFkZHJzW2ldKTsKKyAgICAgICAgc3RyY2F0KHRtcCwgYnVmKTsKKyAgICB9CisgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0VSUk9SLCAibGliYyIsICJjYWxsIHN0YWNrOlxuJXMiLCB0bXApOworfQorCitzdGF0aWMgaW50IGlzX3ZhbGlkX21hbGxvY19wb2ludGVyKHZvaWQqIGFkZHIpCit7CisgICAgcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB2b2lkIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcih2b2lkKiBtZW0pCit7CisgICAgaWYgKG1lbSAmJiAhaXNfdmFsaWRfbWFsbG9jX3BvaW50ZXIobWVtKSkgeworICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9OT1JNQUxdOworICAgICAgICAgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0VSUk9SLCAibGliYyIsCisgICAgICAgICAgICAgICAgICAgICIqKiogTUFMTE9DIENIRUNLOiBidWZmZXIgJXAsIGlzIG5vdCBhIHZhbGlkICIKKyAgICAgICAgICAgICAgICAgICAgIm1hbGxvYyBwb2ludGVyIChhcmUgeW91IG1peGluZyB1cCBuZXcvZGVsZXRlICIKKyAgICAgICAgICAgICAgICAgICAgImFuZCBtYWxsb2MvZnJlZT8pIiwgbWVtKTsKKyAgICAgICAgICAgIGR1bXBfc3RhY2tfdHJhY2UoKTsKKyAgICAgICAgICAgICAgICBpZiAoZ1RyYXBPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgICAgIF9fYnVpbHRpbl90cmFwKCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICBnTWFsbG9jRGlzcGF0Y2ggPSAmZ01hbGxvY0VuZ2luZVRhYmxlW0lOREVYX01BTExPQ19DSEVDS107CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBjaGtfb3V0X29mX2JvdW5kc19jaGVja19fbG9ja2VkKHZvaWQqIGJ1ZmZlciwgc2l6ZV90IHNpemUpCit7CisgICAgaW50IGk7CisgICAgY2hhciogYnVmID0gKGNoYXIqKWJ1ZmZlciAtIENIS19TRU5USU5FTF9IRUFEX1NJWkU7CisgICAgZm9yIChpPTAgOyBpPENIS19TRU5USU5FTF9IRUFEX1NJWkUgOyBpKyspIHsKKyAgICAgICAgaWYgKGJ1ZltpXSAhPSBDSEtfU0VOVElORUxfVkFMVUUpIHsKKyAgICAgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTk9STUFMXTsKKyAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAiKioqIE1BTExPQyBDSEVDSzogYnVmZmVyICVwLCBzaXplPSVsdSwgIgorICAgICAgICAgICAgICAgICAgICAiY29ycnVwdGVkICVkIGJ5dGVzIGJlZm9yZSBhbGxvY2F0aW9uIiwKKyAgICAgICAgICAgICAgICAgICAgYnVmZmVyLCBzaXplLCBDSEtfU0VOVElORUxfSEVBRF9TSVpFLWkpOworICAgICAgICAgICAgZHVtcF9zdGFja190cmFjZSgpOworICAgICAgICAgICAgaWYgKGdUcmFwT25FcnJvcikgeworICAgICAgICAgICAgICAgIF9fYnVpbHRpbl90cmFwKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBnTWFsbG9jRGlzcGF0Y2ggPSAmZ01hbGxvY0VuZ2luZVRhYmxlW0lOREVYX01BTExPQ19DSEVDS107CisgICAgICAgIH0KKyAgICB9CisgICAgYnVmID0gKGNoYXIqKWJ1ZmZlciArIHNpemU7CisgICAgZm9yIChpPUNIS19TRU5USU5FTF9UQUlMX1NJWkUtMSA7IGk+PTAgOyBpLS0pIHsKKyAgICAgICAgaWYgKGJ1ZltpXSAhPSBDSEtfU0VOVElORUxfVkFMVUUpIHsKKyAgICAgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTk9STUFMXTsKKyAgICAgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19FUlJPUiwgImxpYmMiLAorICAgICAgICAgICAgICAgICAgICAiKioqIE1BTExPQyBDSEVDSzogYnVmZmVyICVwLCBzaXplPSVsdSwgIgorICAgICAgICAgICAgICAgICAgICAiY29ycnVwdGVkICVkIGJ5dGVzIGFmdGVyIGFsbG9jYXRpb24iLAorICAgICAgICAgICAgICAgICAgICBidWZmZXIsIHNpemUsIGkrMSk7CisgICAgICAgICAgICBkdW1wX3N0YWNrX3RyYWNlKCk7CisgICAgICAgICAgICBpZiAoZ1RyYXBPbkVycm9yKSB7CisgICAgICAgICAgICAgICAgX19idWlsdGluX3RyYXAoKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTUFMTE9DX0NIRUNLXTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCogY2hrX21hbGxvYyhzaXplX3QgYnl0ZXMpCit7CisgICAgY2hhciogYnVmZmVyID0gKGNoYXIqKWRsbWFsbG9jKGJ5dGVzICsgQ0hLX09WRVJIRUFEX1NJWkUpOworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzICsgQ0hLX09WRVJIRUFEX1NJWkUpOworICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKGJ1ZmZlcikgLSBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgICAgICooc2l6ZV90ICopKGJ1ZmZlciArIG9mZnNldCkgPSBieXRlczsKKyAgICAgICAgICAgIGJ1ZmZlciArPSBDSEtfU0VOVElORUxfSEVBRF9TSVpFOworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgIH0KKyAgICByZXR1cm4gYnVmZmVyOworfQorCit2b2lkICBjaGtfZnJlZSh2b2lkKiBtZW0pCit7CisgICAgYXNzZXJ0X3ZhbGlkX21hbGxvY19wb2ludGVyKG1lbSk7CisgICAgaWYgKG1lbSkgeworICAgICAgICBwdGhyZWFkX211dGV4X2xvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKyAgICAgICAgICAgIGNoYXIqIGJ1ZmZlciA9IChjaGFyKiltZW0gLSBDSEtfU0VOVElORUxfSEVBRF9TSVpFOworICAgICAgICAgICAgc2l6ZV90IG9mZnNldCA9IGRsbWFsbG9jX3VzYWJsZV9zaXplKGJ1ZmZlcikgLSBzaXplb2Yoc2l6ZV90KTsKKyAgICAgICAgICAgIHNpemVfdCBieXRlcyA9ICooc2l6ZV90ICopKGJ1ZmZlciArIG9mZnNldCk7CisgICAgICAgICAgICBjaGtfb3V0X29mX2JvdW5kc19jaGVja19fbG9ja2VkKG1lbSwgYnl0ZXMpOworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfRklMTF9GUkVFLCBieXRlcyk7CisgICAgICAgIGRsZnJlZShidWZmZXIpOworICAgIH0KK30KKwordm9pZCogY2hrX2NhbGxvYyhzaXplX3Qgbl9lbGVtZW50cywgc2l6ZV90IGVsZW1fc2l6ZSkKK3sKKyAgICBzaXplX3Qgc2l6ZSA9IG5fZWxlbWVudHMgKiBlbGVtX3NpemU7CisgICAgdm9pZCogcHRyID0gY2hrX21hbGxvYyhzaXplKTsKKyAgICBpZiAocHRyICE9IE5VTEwpIHsKKyAgICAgICAgbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiBwdHI7Cit9CisKK3ZvaWQqIGNoa19yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKQoreworICAgIGFzc2VydF92YWxpZF9tYWxsb2NfcG9pbnRlcihtZW0pOworICAgIGNoYXIqIG5ld19idWZmZXIgPSBjaGtfbWFsbG9jKGJ5dGVzKTsKKyAgICBpZiAobWVtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIG5ld19idWZmZXI7CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisgICAgICAgIGNoYXIqIGJ1ZmZlciA9IChjaGFyKiltZW0gLSBDSEtfU0VOVElORUxfSEVBRF9TSVpFOworICAgICAgICBzaXplX3Qgb2Zmc2V0ID0gZGxtYWxsb2NfdXNhYmxlX3NpemUoYnVmZmVyKSAtIHNpemVvZihzaXplX3QpOworICAgICAgICBzaXplX3Qgb2xkX2J5dGVzID0gKihzaXplX3QgKikoYnVmZmVyICsgb2Zmc2V0KTsKKyAgICAgICAgY2hrX291dF9vZl9ib3VuZHNfY2hlY2tfX2xvY2tlZChtZW0sIG9sZF9ieXRlcyk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdBbGxvY2F0aW9uc011dGV4KTsKKworICAgIGlmIChuZXdfYnVmZmVyKSB7CisgICAgICAgIHNpemVfdCBzaXplID0gKGJ5dGVzIDwgb2xkX2J5dGVzKT8oYnl0ZXMpOihvbGRfYnl0ZXMpOworICAgICAgICBtZW1jcHkobmV3X2J1ZmZlciwgbWVtLCBzaXplKTsKKyAgICAgICAgY2hrX2ZyZWUobWVtKTsKKyAgICB9CisKKyAgICByZXR1cm4gbmV3X2J1ZmZlcjsKK30KKwordm9pZCogY2hrX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykKK3sKKyAgICAvLyBYWFg6IGl0J3MgYmV0dGVyIHRvIHVzZSBtYWxsb2MsIHRoYW4gYmVpbmcgd3JvbmcKKyAgICByZXR1cm4gY2hrX21hbGxvYyhieXRlcyk7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWxsb2MgZmlsbCBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3ZvaWQqIGZpbGxfbWFsbG9jKHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBidWZmZXIgPSBkbG1hbGxvYyhieXRlcyk7CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBtZW1zZXQoYnVmZmVyLCBDSEtfU0VOVElORUxfVkFMVUUsIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIGJ1ZmZlcjsKK30KKwordm9pZCAgZmlsbF9mcmVlKHZvaWQqIG1lbSkKK3sKKyAgICBzaXplX3QgYnl0ZXMgPSBkbG1hbGxvY191c2FibGVfc2l6ZShtZW0pOworICAgIG1lbXNldChtZW0sIENIS19GSUxMX0ZSRUUsIGJ5dGVzKTsKKyAgICBkbGZyZWUobWVtKTsKK30KKwordm9pZCogZmlsbF9yZWFsbG9jKHZvaWQqIG1lbSwgc2l6ZV90IGJ5dGVzKQoreworICAgIHZvaWQqIGJ1ZmZlciA9IGZpbGxfbWFsbG9jKGJ5dGVzKTsKKyAgICBpZiAobWVtID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIGJ1ZmZlcjsKKyAgICB9CisgICAgaWYgKGJ1ZmZlcikgeworICAgICAgICBzaXplX3Qgb2xkX3NpemUgPSBkbG1hbGxvY191c2FibGVfc2l6ZShtZW0pOworICAgICAgICBzaXplX3Qgc2l6ZSA9IChieXRlcyA8IG9sZF9zaXplKT8oYnl0ZXMpOihvbGRfc2l6ZSk7CisgICAgICAgIG1lbWNweShidWZmZXIsIG1lbSwgc2l6ZSk7CisgICAgICAgIGZpbGxfZnJlZShtZW0pOworICAgIH0KKyAgICByZXR1cm4gYnVmZmVyOworfQorCit2b2lkKiBmaWxsX21lbWFsaWduKHNpemVfdCBhbGlnbm1lbnQsIHNpemVfdCBieXRlcykKK3sKKyAgICB2b2lkKiBidWZmZXIgPSBkbG1lbWFsaWduKGFsaWdubWVudCwgYnl0ZXMpOworICAgIGlmIChidWZmZXIpIHsKKyAgICAgICAgbWVtc2V0KGJ1ZmZlciwgQ0hLX1NFTlRJTkVMX1ZBTFVFLCBieXRlcyk7CisgICAgfQorICAgIHJldHVybiBidWZmZXI7Cit9CisKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisvLyBtYWxsb2MgbGVhayBmdW5jdGlvbnMKKy8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKKyNkZWZpbmUgTUVNQUxJR05fR1VBUkQgICgodm9pZCopMHhBMUE0MTUyMCkKKwordm9pZCogbGVha19tYWxsb2Moc2l6ZV90IGJ5dGVzKQoreworICAgIC8vIGFsbG9jYXRlIGVub3VnaCBzcGFjZSBpbmZyb250IG9mIHRoZSBhbGxvY2F0aW9uIHRvIHN0b3JlIHRoZSBwb2ludGVyIGZvcgorICAgIC8vIHRoZSBhbGxvYyBzdHJ1Y3R1cmUuIFRoaXMgd2lsbCBtYWtpbmcgZnJlZSdpbmcgdGhlIHN0cnVjdGVyIHJlYWxseSBmYXN0IQorCisgICAgLy8gMS4gYWxsb2NhdGUgZW5vdWdoIG1lbW9yeSBhbmQgaW5jbHVkZSBvdXIgaGVhZGVyCisgICAgLy8gMi4gc2V0IHRoZSBiYXNlIHBvaW50ZXIgdG8gYmUgcmlnaHQgYWZ0ZXIgb3VyIGhlYWRlcgorCisgICAgdm9pZCogYmFzZSA9IGRsbWFsbG9jKGJ5dGVzICsgc2l6ZW9mKEFsbG9jYXRpb25FbnRyeSkpOworICAgIGlmIChiYXNlICE9IE5VTEwpIHsKKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnQWxsb2NhdGlvbnNNdXRleCk7CisKKyAgICAgICAgICAgIGludHB0cl90IGJhY2t0cmFjZVtCQUNLVFJBQ0VfU0laRV07CisgICAgICAgICAgICBzaXplX3QgbnVtRW50cmllcyA9IGdldF9iYWNrdHJhY2UoYmFja3RyYWNlLCBCQUNLVFJBQ0VfU0laRSk7CisgICAgCisgICAgICAgICAgICBBbGxvY2F0aW9uRW50cnkqIGhlYWRlciA9IChBbGxvY2F0aW9uRW50cnkqKWJhc2U7CisgICAgICAgICAgICBoZWFkZXItPmVudHJ5ID0gcmVjb3JkX2JhY2t0cmFjZShiYWNrdHJhY2UsIG51bUVudHJpZXMsIGJ5dGVzKTsKKyAgICAgICAgICAgIGhlYWRlci0+Z3VhcmQgPSBHVUFSRDsKKyAgICAKKyAgICAgICAgICAgIC8vIG5vdyBpbmNyZW1lbnQgYmFzZSB0byBwb2ludCB0byBhZnRlciBvdXIgaGVhZGVyLgorICAgICAgICAgICAgLy8gdGhpcyBzaG91bGQganVzdCB3b3JrIHNpbmNlIG91ciBoZWFkZXIgaXMgOCBieXRlcy4KKyAgICAgICAgICAgIGJhc2UgPSAoQWxsb2NhdGlvbkVudHJ5KiliYXNlICsgMTsKKworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgIH0KKworICAgIHJldHVybiBiYXNlOworfQorCit2b2lkIGxlYWtfZnJlZSh2b2lkKiBtZW0pCit7CisgICAgaWYgKG1lbSAhPSBOVUxMKSB7CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworCisgICAgICAgIC8vIGNoZWNrIHRoZSBndWFyZCB0byBtYWtlIHN1cmUgaXQgaXMgdmFsaWQKKyAgICAgICAgQWxsb2NhdGlvbkVudHJ5KiBoZWFkZXIgPSAoQWxsb2NhdGlvbkVudHJ5KiltZW0gLSAxOworICAgICAgICAKKyAgICAgICAgaWYgKGhlYWRlci0+Z3VhcmQgIT0gR1VBUkQpIHsKKyAgICAgICAgICAgIC8vIGNvdWxkIGJlIGEgbWVtYWxpZ25lZCBibG9jaworICAgICAgICAgICAgaWYgKCgodm9pZCoqKW1lbSlbLTFdID09IE1FTUFMSUdOX0dVQVJEKSB7CisgICAgICAgICAgICAgICAgbWVtID0gKCh2b2lkKiopbWVtKVstMl07CisgICAgICAgICAgICAgICAgaGVhZGVyID0gKEFsbG9jYXRpb25FbnRyeSopbWVtIC0gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgaWYgKGhlYWRlci0+Z3VhcmQgPT0gR1VBUkQgfHwgaXNfdmFsaWRfZW50cnkoaGVhZGVyLT5lbnRyeSkpIHsKKyAgICAgICAgICAgIC8vIGRlY3JlbWVudCB0aGUgYWxsb2NhdGlvbnMKKyAgICAgICAgICAgIEhhc2hFbnRyeSogZW50cnkgPSBoZWFkZXItPmVudHJ5OworICAgICAgICAgICAgZW50cnktPmFsbG9jYXRpb25zLS07CisgICAgICAgICAgICBpZiAoZW50cnktPmFsbG9jYXRpb25zIDw9IDApIHsKKyAgICAgICAgICAgICAgICByZW1vdmVfZW50cnkoZW50cnkpOworICAgICAgICAgICAgICAgIGRsZnJlZShlbnRyeSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8vIG5vdyBmcmVlIHRoZSBtZW1vcnkhCisgICAgICAgICAgICBkbGZyZWUoaGVhZGVyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGRlYnVnX2xvZygiV0FSTklORyBiYWQgaGVhZGVyIGd1YXJkOiAnMHgleCchIGFuZCBpbnZhbGlkIGVudHJ5OiAlcFxuIiwKKyAgICAgICAgICAgICAgICAgICAgaGVhZGVyLT5ndWFyZCwgaGVhZGVyLT5lbnRyeSk7CisgICAgICAgIH0KKworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ0FsbG9jYXRpb25zTXV0ZXgpOworICAgIH0KK30KKwordm9pZCogbGVha19jYWxsb2Moc2l6ZV90IG5fZWxlbWVudHMsIHNpemVfdCBlbGVtX3NpemUpCit7CisgICAgc2l6ZV90IHNpemUgPSBuX2VsZW1lbnRzICogZWxlbV9zaXplOworICAgIHZvaWQqIHB0ciA9IGxlYWtfbWFsbG9jKHNpemUpOworICAgIGlmIChwdHIgIT0gTlVMTCkgeworICAgICAgICBtZW1zZXQocHRyLCAwLCBzaXplKTsKKyAgICB9CisgICAgcmV0dXJuIHB0cjsKK30KKwordm9pZCogbGVha19yZWFsbG9jKHZvaWQqIG9sZE1lbSwgc2l6ZV90IGJ5dGVzKQoreworICAgIGlmIChvbGRNZW0gPT0gTlVMTCkgeworICAgICAgICByZXR1cm4gbGVha19tYWxsb2MoYnl0ZXMpOworICAgIH0KKyAgICB2b2lkKiBuZXdNZW0gPSBOVUxMOworICAgIEFsbG9jYXRpb25FbnRyeSogaGVhZGVyID0gKEFsbG9jYXRpb25FbnRyeSopb2xkTWVtIC0gMTsKKyAgICBpZiAoaGVhZGVyICYmIGhlYWRlci0+Z3VhcmQgPT0gR1VBUkQpIHsKKyAgICAgICAgc2l6ZV90IG9sZFNpemUgPSBoZWFkZXItPmVudHJ5LT5zaXplICYgflNJWkVfRkxBR19NQVNLOworICAgICAgICBuZXdNZW0gPSBsZWFrX21hbGxvYyhieXRlcyk7CisgICAgICAgIGlmIChuZXdNZW0gIT0gTlVMTCkgeworICAgICAgICAgICAgc2l6ZV90IGNvcHlTaXplID0gKG9sZFNpemUgPD0gYnl0ZXMpID8gb2xkU2l6ZSA6IGJ5dGVzOworICAgICAgICAgICAgbWVtY3B5KG5ld01lbSwgb2xkTWVtLCBjb3B5U2l6ZSk7CisgICAgICAgICAgICBsZWFrX2ZyZWUob2xkTWVtKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG5ld01lbSA9IGRscmVhbGxvYyhvbGRNZW0sIGJ5dGVzKTsKKyAgICB9CisgICAgcmV0dXJuIG5ld01lbTsKK30KKwordm9pZCogbGVha19tZW1hbGlnbihzaXplX3QgYWxpZ25tZW50LCBzaXplX3QgYnl0ZXMpCit7CisgICAgLy8gd2UgY2FuIGp1c3QgdXNlIG1hbGxvYworICAgIGlmIChhbGlnbm1lbnQgPD0gTUFMTE9DX0FMSUdOTUVOVCkKKyAgICAgICAgcmV0dXJuIGxlYWtfbWFsbG9jKGJ5dGVzKTsKKworICAgIC8vIG5lZWQgdG8gbWFrZSBzdXJlIGl0J3MgYSBwb3dlciBvZiB0d28KKyAgICBpZiAoYWxpZ25tZW50ICYgKGFsaWdubWVudC0xKSkKKyAgICAgICAgYWxpZ25tZW50ID0gMUwgPDwgKDMxIC0gX19idWlsdGluX2NseihhbGlnbm1lbnQpKTsKKyAgICAKKyAgICAvLyBoZXJlLCBhbGlnbWVudCBpcyBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UPDwxIGJ5dGVzCisgICAgLy8gd2Ugd2lsbCBhbGlnbiBieSBhdCBsZWFzdCBNQUxMT0NfQUxJR05NRU5UIGJ5dGVzCisgICAgLy8gYW5kIGF0IG1vc3QgYWxpZ25tZW50LU1BTExPQ19BTElHTk1FTlQgYnl0ZXMKKyAgICBzaXplX3Qgc2l6ZSA9IChhbGlnbm1lbnQtTUFMTE9DX0FMSUdOTUVOVCkgKyBieXRlczsKKyAgICB2b2lkKiBiYXNlID0gbGVha19tYWxsb2Moc2l6ZSk7CisgICAgaWYgKGJhc2UgIT0gTlVMTCkgeworICAgICAgICBpbnRwdHJfdCBwdHIgPSAoaW50cHRyX3QpYmFzZTsKKyAgICAgICAgaWYgKChwdHIgJSBhbGlnbm1lbnQpID09IDApCisgICAgICAgICAgICByZXR1cm4gYmFzZTsKKworICAgICAgICAvLyBhbGlnbiB0aGUgcG9pbnRlcgorICAgICAgICBwdHIgKz0gKCgtcHRyKSAlIGFsaWdubWVudCk7CisgICAgICAgIAorICAgICAgICAvLyB0aGVyZSBpcyBhbHdheXMgZW5vdWdoIHNwYWNlIGZvciB0aGUgYmFzZSBwb2ludGVyIGFuZCB0aGUgZ3VhcmQKKyAgICAgICAgKCh2b2lkKiopcHRyKVstMV0gPSBNRU1BTElHTl9HVUFSRDsKKyAgICAgICAgKCh2b2lkKiopcHRyKVstMl0gPSBiYXNlOworCisgICAgICAgIHJldHVybiAodm9pZCopcHRyOworICAgIH0KKyAgICByZXR1cm4gYmFzZTsKK30KKyNlbmRpZiAvKiBNQUxMT0NfTEVBS19DSEVDSyAqLworCisvLyBjYWxsZWQgZnJvbSBsaWJjX2luaXQoKQorZXh0ZXJuIGNoYXIqICBfX3Byb2duYW1lOworCit2b2lkIG1hbGxvY19kZWJ1Z19pbml0KCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgbGV2ZWwgPSAwOworI2lmZGVmIE1BTExPQ19MRUFLX0NIRUNLCisgICAgLy8gaWYgTUFMTE9DX0xFQUtfQ0hFQ0sgaXMgZW5hYmxlZCwgdXNlIGxldmVsPTEgYnkgZGVmYXVsdAorICAgIGxldmVsID0gMTsKKyNlbmRpZgorICAgIGNoYXIgZW52W1BST1BfVkFMVUVfTUFYXTsKKyAgICBpbnQgbGVuID0gX19zeXN0ZW1fcHJvcGVydHlfZ2V0KCJsaWJjLmRlYnVnLm1hbGxvYyIsIGVudik7CisKKyAgICBpZiAobGVuKSB7CisgICAgICAgIGxldmVsID0gYXRvaShlbnYpOworI2lmbmRlZiBNQUxMT0NfTEVBS19DSEVDSworICAgICAgICAvKiBBbGVydCB0aGUgdXNlciB0aGF0IGxpYmNfZGVidWcuc28gbmVlZHMgdG8gYmUgaW5zdGFsbGVkIGFzIGxpYmMuc28KKyAgICAgICAgICogd2hlbiBwZXJmb3JtaW5nIG1hbGxvYyBjaGVja3MuCisgICAgICAgICAqLworICAgICAgICBpZiAobGV2ZWwgIT0gMCkgeworICAgICAgICAgICAgX19saWJjX2FuZHJvaWRfbG9nX3ByaW50KEFORFJPSURfTE9HX0lORk8sICJsaWJjIiwKKyAgICAgICAgICAgICAgICAgIk1hbGxvYyBjaGVja3MgbmVlZCBsaWJjX2RlYnVnLnNvIHB1c2hlZCB0byB0aGUgZGV2aWNlIVxuIik7CisKKyAgICAgICAgfQorI2VuZGlmCisgICAgfQorCisjaWZkZWYgTUFMTE9DX0xFQUtfQ0hFQ0sKKyAgICBnTWFsbG9jRGVidWdMZXZlbCA9IGxldmVsOworICAgIHN3aXRjaCAobGV2ZWwpIHsKKyAgICBkZWZhdWx0OgorICAgIGNhc2UgMDoKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9OT1JNQUxdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDE6CisgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCisgICAgICAgICAgICAgICAgIiVzIHVzaW5nIE1BTExPQ19ERUJVRyA9ICVkIChsZWFrIGNoZWNrZXIpXG4iLAorICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGxldmVsKTsKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9MRUFLX0NIRUNLXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSA1OgorICAgICAgICBfX2xpYmNfYW5kcm9pZF9sb2dfcHJpbnQoQU5EUk9JRF9MT0dfSU5GTywgImxpYmMiLAorICAgICAgICAgICAgICAgICIlcyB1c2luZyBNQUxMT0NfREVCVUcgPSAlZCAoZmlsbClcbiIsIAorICAgICAgICAgICAgICAgIF9fcHJvZ25hbWUsIGxldmVsKTsKKyAgICAgICAgZ01hbGxvY0Rpc3BhdGNoID0gJmdNYWxsb2NFbmdpbmVUYWJsZVtJTkRFWF9NQUxMT0NfRklMTF07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMTA6CisgICAgICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19JTkZPLCAibGliYyIsCisgICAgICAgICAgICAgICAgIiVzIHVzaW5nIE1BTExPQ19ERUJVRyA9ICVkIChzZW50aW5lbHMsIGZpbGwpXG4iLCAKKyAgICAgICAgICAgICAgICBfX3Byb2duYW1lLCBsZXZlbCk7CisgICAgICAgIGdNYWxsb2NEaXNwYXRjaCA9ICZnTWFsbG9jRW5naW5lVGFibGVbSU5ERVhfTUFMTE9DX0NIRUNLXTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tZDUuYyBiL2xpYmMvYmlvbmljL21kNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4Nzc4NmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tZDUuYwpAQCAtMCwwICsxLDI3NSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NSAtIDIwMDEgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCisgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogCisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIAorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgSW5zdGl0dXRlIG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIAorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgSU5TVElUVVRFIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSU5TVElUVVRFIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKworX19SQ1NJRCgiJEhlaW1kYWw6IG1kNS5jLHYgMS4xNSAyMDAxLzAxLzI5IDA0OjMzOjQ0IGFzc2FyIEV4cCAkIgorICAgICAgICAiJE5ldEJTRDogbWQ1LmMsdiAxLjEuMS40IDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCIpOworI2VuZGlmCisKKyNpbmNsdWRlICJtZDUuaCIKKyNpbmNsdWRlICJoYXNoLmgiCisKKyNkZWZpbmUgQSBtLT5jb3VudGVyWzBdCisjZGVmaW5lIEIgbS0+Y291bnRlclsxXQorI2RlZmluZSBDIG0tPmNvdW50ZXJbMl0KKyNkZWZpbmUgRCBtLT5jb3VudGVyWzNdCisjZGVmaW5lIFggZGF0YQorCit2b2lkCitNRDVfSW5pdCAoc3RydWN0IG1kNSAqbSkKK3sKKyAgbS0+c3pbMF0gPSAwOworICBtLT5zelsxXSA9IDA7CisgIEQgPSAweDEwMzI1NDc2OworICBDID0gMHg5OGJhZGNmZTsKKyAgQiA9IDB4ZWZjZGFiODk7CisgIEEgPSAweDY3NDUyMzAxOworfQorCisjZGVmaW5lIEYoeCx5LHopIENSQVlGSVgoKHggJiB5KSB8ICh+eCAmIHopKQorI2RlZmluZSBHKHgseSx6KSBDUkFZRklYKCh4ICYgeikgfCAoeSAmIH56KSkKKyNkZWZpbmUgSCh4LHkseikgKHggXiB5IF4geikKKyNkZWZpbmUgSSh4LHkseikgQ1JBWUZJWCh5IF4gKHggfCB+eikpCisKKyNkZWZpbmUgRE9JVChhLGIsYyxkLGsscyxpLE9QKSBcCithID0gYiArIGNzaGlmdChhICsgT1AoYixjLGQpICsgWFtrXSArIChpKSwgcykKKworI2RlZmluZSBETzEoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEYpCisjZGVmaW5lIERPMihhLGIsYyxkLGsscyxpKSBET0lUKGEsYixjLGQsayxzLGksRykKKyNkZWZpbmUgRE8zKGEsYixjLGQsayxzLGkpIERPSVQoYSxiLGMsZCxrLHMsaSxIKQorI2RlZmluZSBETzQoYSxiLGMsZCxrLHMsaSkgRE9JVChhLGIsYyxkLGsscyxpLEkpCisKK3N0YXRpYyBpbmxpbmUgdm9pZAorY2FsYyAoc3RydWN0IG1kNSAqbSwgdV9pbnQzMl90ICpkYXRhKQoreworICB1X2ludDMyX3QgQUEsIEJCLCBDQywgREQ7CisKKyAgQUEgPSBBOworICBCQiA9IEI7CisgIENDID0gQzsKKyAgREQgPSBEOworCisgIC8qIFJvdW5kIDEgKi8KKworICBETzEoQSxCLEMsRCwwLDcsMHhkNzZhYTQ3OCk7CisgIERPMShELEEsQixDLDEsMTIsMHhlOGM3Yjc1Nik7CisgIERPMShDLEQsQSxCLDIsMTcsMHgyNDIwNzBkYik7CisgIERPMShCLEMsRCxBLDMsMjIsMHhjMWJkY2VlZSk7CisKKyAgRE8xKEEsQixDLEQsNCw3LDB4ZjU3YzBmYWYpOworICBETzEoRCxBLEIsQyw1LDEyLDB4NDc4N2M2MmEpOworICBETzEoQyxELEEsQiw2LDE3LDB4YTgzMDQ2MTMpOworICBETzEoQixDLEQsQSw3LDIyLDB4ZmQ0Njk1MDEpOworCisgIERPMShBLEIsQyxELDgsNywweDY5ODA5OGQ4KTsKKyAgRE8xKEQsQSxCLEMsOSwxMiwweDhiNDRmN2FmKTsKKyAgRE8xKEMsRCxBLEIsMTAsMTcsMHhmZmZmNWJiMSk7CisgIERPMShCLEMsRCxBLDExLDIyLDB4ODk1Y2Q3YmUpOworCisgIERPMShBLEIsQyxELDEyLDcsMHg2YjkwMTEyMik7CisgIERPMShELEEsQixDLDEzLDEyLDB4ZmQ5ODcxOTMpOworICBETzEoQyxELEEsQiwxNCwxNywweGE2Nzk0MzhlKTsKKyAgRE8xKEIsQyxELEEsMTUsMjIsMHg0OWI0MDgyMSk7CisKKyAgLyogUm91bmQgMiAqLworCisgIERPMihBLEIsQyxELDEsNSwweGY2MWUyNTYyKTsKKyAgRE8yKEQsQSxCLEMsNiw5LDB4YzA0MGIzNDApOworICBETzIoQyxELEEsQiwxMSwxNCwweDI2NWU1YTUxKTsKKyAgRE8yKEIsQyxELEEsMCwyMCwweGU5YjZjN2FhKTsKKworICBETzIoQSxCLEMsRCw1LDUsMHhkNjJmMTA1ZCk7CisgIERPMihELEEsQixDLDEwLDksMHgyNDQxNDUzKTsKKyAgRE8yKEMsRCxBLEIsMTUsMTQsMHhkOGExZTY4MSk7CisgIERPMihCLEMsRCxBLDQsMjAsMHhlN2QzZmJjOCk7CisKKyAgRE8yKEEsQixDLEQsOSw1LDB4MjFlMWNkZTYpOworICBETzIoRCxBLEIsQywxNCw5LDB4YzMzNzA3ZDYpOworICBETzIoQyxELEEsQiwzLDE0LDB4ZjRkNTBkODcpOworICBETzIoQixDLEQsQSw4LDIwLDB4NDU1YTE0ZWQpOworCisgIERPMihBLEIsQyxELDEzLDUsMHhhOWUzZTkwNSk7CisgIERPMihELEEsQixDLDIsOSwweGZjZWZhM2Y4KTsKKyAgRE8yKEMsRCxBLEIsNywxNCwweDY3NmYwMmQ5KTsKKyAgRE8yKEIsQyxELEEsMTIsMjAsMHg4ZDJhNGM4YSk7CisKKyAgLyogUm91bmQgMyAqLworCisgIERPMyhBLEIsQyxELDUsNCwweGZmZmEzOTQyKTsKKyAgRE8zKEQsQSxCLEMsOCwxMSwweDg3NzFmNjgxKTsKKyAgRE8zKEMsRCxBLEIsMTEsMTYsMHg2ZDlkNjEyMik7CisgIERPMyhCLEMsRCxBLDE0LDIzLDB4ZmRlNTM4MGMpOworCisgIERPMyhBLEIsQyxELDEsNCwweGE0YmVlYTQ0KTsKKyAgRE8zKEQsQSxCLEMsNCwxMSwweDRiZGVjZmE5KTsKKyAgRE8zKEMsRCxBLEIsNywxNiwweGY2YmI0YjYwKTsKKyAgRE8zKEIsQyxELEEsMTAsMjMsMHhiZWJmYmM3MCk7CisKKyAgRE8zKEEsQixDLEQsMTMsNCwweDI4OWI3ZWM2KTsKKyAgRE8zKEQsQSxCLEMsMCwxMSwweGVhYTEyN2ZhKTsKKyAgRE8zKEMsRCxBLEIsMywxNiwweGQ0ZWYzMDg1KTsKKyAgRE8zKEIsQyxELEEsNiwyMywweDQ4ODFkMDUpOworCisgIERPMyhBLEIsQyxELDksNCwweGQ5ZDRkMDM5KTsKKyAgRE8zKEQsQSxCLEMsMTIsMTEsMHhlNmRiOTllNSk7CisgIERPMyhDLEQsQSxCLDE1LDE2LDB4MWZhMjdjZjgpOworICBETzMoQixDLEQsQSwyLDIzLDB4YzRhYzU2NjUpOworCisgIC8qIFJvdW5kIDQgKi8KKworICBETzQoQSxCLEMsRCwwLDYsMHhmNDI5MjI0NCk7CisgIERPNChELEEsQixDLDcsMTAsMHg0MzJhZmY5Nyk7CisgIERPNChDLEQsQSxCLDE0LDE1LDB4YWI5NDIzYTcpOworICBETzQoQixDLEQsQSw1LDIxLDB4ZmM5M2EwMzkpOworCisgIERPNChBLEIsQyxELDEyLDYsMHg2NTViNTljMyk7CisgIERPNChELEEsQixDLDMsMTAsMHg4ZjBjY2M5Mik7CisgIERPNChDLEQsQSxCLDEwLDE1LDB4ZmZlZmY0N2QpOworICBETzQoQixDLEQsQSwxLDIxLDB4ODU4NDVkZDEpOworCisgIERPNChBLEIsQyxELDgsNiwweDZmYTg3ZTRmKTsKKyAgRE80KEQsQSxCLEMsMTUsMTAsMHhmZTJjZTZlMCk7CisgIERPNChDLEQsQSxCLDYsMTUsMHhhMzAxNDMxNCk7CisgIERPNChCLEMsRCxBLDEzLDIxLDB4NGUwODExYTEpOworCisgIERPNChBLEIsQyxELDQsNiwweGY3NTM3ZTgyKTsKKyAgRE80KEQsQSxCLEMsMTEsMTAsMHhiZDNhZjIzNSk7CisgIERPNChDLEQsQSxCLDIsMTUsMHgyYWQ3ZDJiYik7CisgIERPNChCLEMsRCxBLDksMjEsMHhlYjg2ZDM5MSk7CisKKyAgQSArPSBBQTsKKyAgQiArPSBCQjsKKyAgQyArPSBDQzsKKyAgRCArPSBERDsKK30KKworLyoKKyAqIEZyb20gYFBlcmZvcm1hbmNlIGFuYWx5c2lzIG9mIE1ENScgYnkgSm9zZXBoIEQuIFRvdWNoIDx0b3VjaEBpc2kuZWR1PgorICovCisKKyNpZiBkZWZpbmVkKFdPUkRTX0JJR0VORElBTikKK3N0YXRpYyBpbmxpbmUgdV9pbnQzMl90Citzd2FwX3VfaW50MzJfdCAodV9pbnQzMl90IHQpCit7CisgIHVfaW50MzJfdCB0ZW1wMSwgdGVtcDI7CisKKyAgdGVtcDEgICA9IGNzaGlmdCh0LCAxNik7CisgIHRlbXAyICAgPSB0ZW1wMSA+PiA4OworICB0ZW1wMSAgJj0gMHgwMGZmMDBmZjsKKyAgdGVtcDIgICY9IDB4MDBmZjAwZmY7CisgIHRlbXAxIDw8PSA4OworICByZXR1cm4gdGVtcDEgfCB0ZW1wMjsKK30KKyNlbmRpZgorCitzdHJ1Y3QgeDMyeworICB1bnNpZ25lZCBpbnQgYTozMjsKKyAgdW5zaWduZWQgaW50IGI6MzI7Cit9OworCit2b2lkCitNRDVfVXBkYXRlIChzdHJ1Y3QgbWQ1ICptLCBjb25zdCB2b2lkICp2LCBzaXplX3QgbGVuKQoreworICBjb25zdCB1bnNpZ25lZCBjaGFyICpwID0gdjsKKyAgc2l6ZV90IG9sZF9zeiA9IG0tPnN6WzBdOworICBzaXplX3Qgb2Zmc2V0OworCisgIG0tPnN6WzBdICs9IGxlbiAqIDg7CisgIGlmIChtLT5zelswXSA8IG9sZF9zeikKKyAgICAgICsrbS0+c3pbMV07CisgIG9mZnNldCA9IChvbGRfc3ogLyA4KSAgJSA2NDsKKyAgd2hpbGUobGVuID4gMCl7CisgICAgc2l6ZV90IGwgPSBtaW4obGVuLCA2NCAtIG9mZnNldCk7CisgICAgbWVtY3B5KG0tPnNhdmUgKyBvZmZzZXQsIHAsIGwpOworICAgIG9mZnNldCArPSBsOworICAgIHAgKz0gbDsKKyAgICBsZW4gLT0gbDsKKyAgICBpZihvZmZzZXQgPT0gNjQpeworI2lmIGRlZmluZWQoV09SRFNfQklHRU5ESUFOKQorICAgICAgaW50IGk7CisgICAgICB1X2ludDMyX3QgY3VycmVudFsxNl07CisgICAgICBzdHJ1Y3QgeDMyICp1ID0gKHN0cnVjdCB4MzIqKW0tPnNhdmU7CisgICAgICBmb3IoaSA9IDA7IGkgPCA4OyBpKyspeworCWN1cnJlbnRbMippKzBdID0gc3dhcF91X2ludDMyX3QodVtpXS5hKTsKKwljdXJyZW50WzIqaSsxXSA9IHN3YXBfdV9pbnQzMl90KHVbaV0uYik7CisgICAgICB9CisgICAgICBjYWxjKG0sIGN1cnJlbnQpOworI2Vsc2UKKyAgICAgIGNhbGMobSwgKHVfaW50MzJfdCopbS0+c2F2ZSk7CisjZW5kaWYKKyAgICAgIG9mZnNldCA9IDA7CisgICAgfQorICB9Cit9CisKK3ZvaWQKK01ENV9GaW5hbCAodm9pZCAqcmVzLCBzdHJ1Y3QgbWQ1ICptKQoreworICBzdGF0aWMgdW5zaWduZWQgY2hhciB6ZXJvc1s3Ml07CisgIHVuc2lnbmVkIG9mZnNldCA9IChtLT5zelswXSAvIDgpICUgNjQ7CisgIHVuc2lnbmVkIGludCBkc3RhcnQgPSAoMTIwIC0gb2Zmc2V0IC0gMSkgJSA2NCArIDE7CisKKyAgKnplcm9zID0gMHg4MDsKKyAgbWVtc2V0ICh6ZXJvcyArIDEsIDAsIHNpemVvZih6ZXJvcykgLSAxKTsKKyAgemVyb3NbZHN0YXJ0KzBdID0gKG0tPnN6WzBdID4+IDApICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzFdID0gKG0tPnN6WzBdID4+IDgpICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzJdID0gKG0tPnN6WzBdID4+IDE2KSAmIDB4ZmY7CisgIHplcm9zW2RzdGFydCszXSA9IChtLT5zelswXSA+PiAyNCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNF0gPSAobS0+c3pbMV0gPj4gMCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNV0gPSAobS0+c3pbMV0gPj4gOCkgJiAweGZmOworICB6ZXJvc1tkc3RhcnQrNl0gPSAobS0+c3pbMV0gPj4gMTYpICYgMHhmZjsKKyAgemVyb3NbZHN0YXJ0KzddID0gKG0tPnN6WzFdID4+IDI0KSAmIDB4ZmY7CisgIE1ENV9VcGRhdGUgKG0sIHplcm9zLCBkc3RhcnQgKyA4KTsKKyAgeworICAgICAgaW50IGk7CisgICAgICB1bnNpZ25lZCBjaGFyICpyID0gKHVuc2lnbmVkIGNoYXIgKilyZXM7CisKKyAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyArK2kpIHsKKwkgIHJbNCppXSAgID0gbS0+Y291bnRlcltpXSAmIDB4RkY7CisJICByWzQqaSsxXSA9IChtLT5jb3VudGVyW2ldID4+IDgpICYgMHhGRjsKKwkgIHJbNCppKzJdID0gKG0tPmNvdW50ZXJbaV0gPj4gMTYpICYgMHhGRjsKKwkgIHJbNCppKzNdID0gKG0tPmNvdW50ZXJbaV0gPj4gMjQpICYgMHhGRjsKKyAgICAgIH0KKyAgfQorI2lmIDAKKyAgeworICAgIGludCBpOworICAgIHVfaW50MzJfdCAqciA9ICh1X2ludDMyX3QgKilyZXM7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKQorICAgICAgcltpXSA9IHN3YXBfdV9pbnQzMl90IChtLT5jb3VudGVyW2ldKTsKKyAgfQorI2VuZGlmCit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9tZDUuaCBiL2xpYmMvYmlvbmljL21kNS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzODE5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9tZDUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTk1IC0gMjAwMSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIChSb3lhbCBJbnN0aXR1dGUgb2YgVGVjaG5vbG9neSwgU3RvY2tob2xtLCBTd2VkZW4pLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIAorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAKKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICogCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBJTlNUSVRVVEUgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBJTlNUSVRVVEUgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiAkSGVpbWRhbDogbWQ1LmgsdiAxLjggMjAwMS8wMS8yOSAwMjowODo1NyBhc3NhciBFeHAgJAorICAgJE5ldEJTRDogbWQ1LmgsdiAxLjEuMS40IDIwMDIvMDkvMTIgMTI6NDE6NDIgam9kYSBFeHAgJCAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK3N0cnVjdCBtZDUgeworICB1bnNpZ25lZCBpbnQgc3pbMl07CisgIHVfaW50MzJfdCBjb3VudGVyWzRdOworICB1bnNpZ25lZCBjaGFyIHNhdmVbNjRdOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWQ1IE1ENV9DVFg7CisKK3ZvaWQgTUQ1X0luaXQgKHN0cnVjdCBtZDUgKm0pOwordm9pZCBNRDVfVXBkYXRlIChzdHJ1Y3QgbWQ1ICptLCBjb25zdCB2b2lkICpwLCBzaXplX3QgbGVuKTsKK3ZvaWQgTUQ1X0ZpbmFsICh2b2lkICpyZXMsIHN0cnVjdCBtZDUgKm0pOyAvKiB1X2ludDMyX3QgcmVzWzRdICovCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkLmMgYi9saWJjL2Jpb25pYy9wdGhyZWFkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdmYzUxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWQuYwpAQCAtMCwwICsxLDE1NjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKyNpbmNsdWRlIDxzeXMvdGxzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgInB0aHJlYWRfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPG1hbGxvYy5oPgorCitleHRlcm4gaW50ICBfX3B0aHJlYWRfY2xvbmUoaW50ICgqZm4pKHZvaWQqKSwgdm9pZCAqY2hpbGRfc3RhY2ssIGludCBmbGFncywgdm9pZCAqYXJnKTsKK2V4dGVybiB2b2lkIF9leGl0X3dpdGhfc3RhY2tfdGVhcmRvd24odm9pZCAqIHN0YWNrQmFzZSwgaW50IHN0YWNrU2l6ZSwgaW50IHJldENvZGUpOworZXh0ZXJuIHZvaWQgX2V4aXRfdGhyZWFkKGludCAgcmV0Q29kZSk7CitleHRlcm4gaW50ICBfX3NldF9lcnJubyhpbnQpOworCit2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsKKworI2RlZmluZSBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCAgICAgIDB4MDAwMDAwMDEKKyNkZWZpbmUgUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9TVEFDSyAgICAweDAwMDAwMDAyCisKKyNkZWZpbmUgREVGQVVMVF9TVEFDS1NJWkUgKDEwMjQgKiAxMDI0KQorI2RlZmluZSBTVEFDS0JBU0UgMHgxMDAwMDAwMAorCitzdGF0aWMgdWludDhfdCAqIGdTdGFja0Jhc2UgPSAodWludDhfdCAqKVNUQUNLQkFTRTsKKworc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtbWFwX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisKK3N0YXRpYyBjb25zdCBwdGhyZWFkX2F0dHJfdCBnRGVmYXVsdFB0aHJlYWRBdHRyID0geworICAgIC5mbGFncyA9IDAsCisgICAgLnN0YWNrX2Jhc2UgPSBOVUxMLAorICAgIC5zdGFja19zaXplID0gREVGQVVMVF9TVEFDS1NJWkUsCisgICAgLmd1YXJkX3NpemUgPSBQQUdFX1NJWkUsCisgICAgLnNjaGVkX3BvbGljeSA9IFNDSEVEX05PUk1BTCwKKyAgICAuc2NoZWRfcHJpb3JpdHkgPSAwCit9OworCisjZGVmaW5lICBJTklUX1RIUkVBRFMgIDEKKworc3RhdGljIHB0aHJlYWRfaW50ZXJuYWxfdCogIGdUaHJlYWRMaXN0ID0gTlVMTDsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ1RocmVhZExpc3RMb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgZ0RlYnVnZ2VyTm90aWZpY2F0aW9uTG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CisKKworLyogd2Ugc2ltcGx5IG1hbGxvYy9mcmVlIHRoZSBpbnRlcm5hbCBwdGhyZWFkX2ludGVybmFsX3Qgc3RydWN0dXJlcy4gd2UgbWF5CisgKiB3YW50IHRvIHVzZSBhIGRpZmZlcmVudCBhbGxvY2F0aW9uIHNjaGVtZSBpbiB0aGUgZnV0dXJlLCBidXQgdGhpcyBvbmUgc2hvdWxkCisgKiBiZSBsYXJnZWx5IGVub3VnaAorICovCitzdGF0aWMgcHRocmVhZF9pbnRlcm5hbF90KgorX3B0aHJlYWRfaW50ZXJuYWxfYWxsb2Modm9pZCkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICAgdGhyZWFkOworCisgICAgdGhyZWFkID0gY2FsbG9jKCBzaXplb2YoKnRocmVhZCksIDEgKTsKKyAgICBpZiAodGhyZWFkKQorICAgICAgICB0aHJlYWQtPmludGVybiA9IDE7CisKKyAgICByZXR1cm4gdGhyZWFkOworfQorCitzdGF0aWMgdm9pZAorX3B0aHJlYWRfaW50ZXJuYWxfZnJlZSggcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkICkKK3sKKyAgICBpZiAodGhyZWFkICYmIHRocmVhZC0+aW50ZXJuKSB7CisgICAgICAgIHRocmVhZC0+aW50ZXJuID0gMDsgIC8qIGp1c3QgaW4gY2FzZSAqLworICAgICAgICBmcmVlICh0aHJlYWQpOworICAgIH0KK30KKworCitzdGF0aWMgdm9pZAorX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlX2xvY2tlZCggcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkICkKK3sKKyAgICB0aHJlYWQtPm5leHQtPnByZWYgPSB0aHJlYWQtPnByZWY7CisgICAgdGhyZWFkLT5wcmVmWzBdICAgID0gdGhyZWFkLT5uZXh0OworfQorCitzdGF0aWMgdm9pZAorX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlKCBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICBfcHRocmVhZF9pbnRlcm5hbF9yZW1vdmVfbG9ja2VkKHRocmVhZCk7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7Cit9CisKK3N0YXRpYyB2b2lkCitfcHRocmVhZF9pbnRlcm5hbF9hZGQoIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCApCit7CisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIHRocmVhZC0+cHJlZiA9ICZnVGhyZWFkTGlzdDsKKyAgICB0aHJlYWQtPm5leHQgPSB0aHJlYWQtPnByZWZbMF07CisgICAgaWYgKHRocmVhZC0+bmV4dCkKKyAgICAgICAgdGhyZWFkLT5uZXh0LT5wcmVmID0gJnRocmVhZC0+bmV4dDsKKyAgICB0aHJlYWQtPnByZWZbMF0gPSB0aHJlYWQ7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7Cit9CisKK3B0aHJlYWRfaW50ZXJuYWxfdCoKK19fZ2V0X3RocmVhZCh2b2lkKQoreworICAgIHZvaWQqKiAgdGxzID0gKHZvaWQqKilfX2dldF90bHMoKTsKKworICAgIHJldHVybiAgKHB0aHJlYWRfaW50ZXJuYWxfdCopIHRsc1tUTFNfU0xPVF9USFJFQURfSURdOworfQorCisKK3ZvaWQqCitfX2dldF9zdGFja19iYXNlKGludCAgKnBfc3RhY2tfc2l6ZSkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgPSBfX2dldF90aHJlYWQoKTsKKworICAgICpwX3N0YWNrX3NpemUgPSB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZTsKKyAgICByZXR1cm4gdGhyZWFkLT5hdHRyLnN0YWNrX2Jhc2U7Cit9CisKKwordm9pZCAgX19pbml0X3Rscyh2b2lkKiogIHRscywgdm9pZCogIHRocmVhZCkKK3sKKyAgICBpbnQgIG5uOworCisgICAgKChwdGhyZWFkX2ludGVybmFsX3QqKXRocmVhZCktPnRscyA9IHRsczsKKworICAgIC8vIHNsb3QgMCBtdXN0IHBvaW50IHRvIHRoZSB0bHMgYXJlYSwgdGhpcyBpcyByZXF1aXJlZCBieSB0aGUgaW1wbGVtZW50YXRpb24KKyAgICAvLyBvZiB0aGUgeDg2IExpbnV4IGtlcm5lbCB0aHJlYWQtbG9jYWwtc3RvcmFnZQorICAgIHRsc1tUTFNfU0xPVF9TRUxGXSAgICAgID0gKHZvaWQqKXRsczsKKyAgICB0bHNbVExTX1NMT1RfVEhSRUFEX0lEXSA9IHRocmVhZDsKKyAgICBmb3IgKG5uID0gVExTX1NMT1RfRVJSTk87IG5uIDwgQklPTklDX1RMU19TTE9UUzsgbm4rKykKKyAgICAgICB0bHNbbm5dID0gMDsKKworICAgIF9fc2V0X3RscyggKHZvaWQqKXRscyApOworfQorCisKKy8qCisgKiBUaGlzIHRyYW1wb2xpbmUgaXMgY2FsbGVkIGZyb20gdGhlIGFzc2VtYmx5IGNsb25lKCkgZnVuY3Rpb24KKyAqLwordm9pZCBfX3RocmVhZF9lbnRyeShpbnQgKCpmdW5jKSh2b2lkKiksIHZvaWQgKmFyZywgdm9pZCAqKnRscykKK3sKKyAgICBpbnQgcmV0VmFsdWU7CisgICAgcHRocmVhZF9pbnRlcm5hbF90ICogdGhySW5mbzsKKworICAgIC8vIFdhaXQgZm9yIG91ciBjcmVhdGluZyB0aHJlYWQgdG8gcmVsZWFzZSB1cy4gVGhpcyBsZXRzIGl0IGhhdmUgdGltZSB0bworICAgIC8vIG5vdGlmeSBnZGIgYWJvdXQgdGhpcyB0aHJlYWQgYmVmb3JlIGl0IHN0YXJ0cyBkb2luZyBhbnl0aGluZy4KKyAgICBwdGhyZWFkX211dGV4X3QgKiBzdGFydF9tdXRleCA9IChwdGhyZWFkX211dGV4X3QgKikmdGxzW1RMU19TTE9UX1NFTEZdOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhzdGFydF9tdXRleCk7CisgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KHN0YXJ0X211dGV4KTsKKworICAgIHRockluZm8gPSAocHRocmVhZF9pbnRlcm5hbF90ICopIHRsc1tUTFNfU0xPVF9USFJFQURfSURdOworCisgICAgX19pbml0X3RscyggdGxzLCB0aHJJbmZvICk7CisKKyAgICBwdGhyZWFkX2V4aXQoICh2b2lkKilmdW5jKGFyZykgKTsKK30KKwordm9pZCBfaW5pdF90aHJlYWQocHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkLCBwaWRfdCBrZXJuZWxfaWQsIHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2Jhc2UpCit7CisgICAgaWYgKGF0dHIgPT0gTlVMTCkgeworICAgICAgICB0aHJlYWQtPmF0dHIgPSBnRGVmYXVsdFB0aHJlYWRBdHRyOworICAgIH0gZWxzZSB7CisgICAgICAgIHRocmVhZC0+YXR0ciA9ICphdHRyOworICAgIH0KKyAgICB0aHJlYWQtPmF0dHIuc3RhY2tfYmFzZSA9IHN0YWNrX2Jhc2U7CisgICAgdGhyZWFkLT5rZXJuZWxfaWQgICAgICAgPSBrZXJuZWxfaWQ7CisKKyAgICAvLyBzZXQgdGhlIHNjaGVkdWxpbmcgcG9saWN5L3ByaW9yaXR5IG9mIHRoZSB0aHJlYWQKKyAgICBpZiAodGhyZWFkLT5hdHRyLnNjaGVkX3BvbGljeSAhPSBTQ0hFRF9OT1JNQUwpIHsKKyAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIHBhcmFtOworICAgICAgICBwYXJhbS5zY2hlZF9wcmlvcml0eSA9IHRocmVhZC0+YXR0ci5zY2hlZF9wcmlvcml0eTsKKyAgICAgICAgc2NoZWRfc2V0c2NoZWR1bGVyKGtlcm5lbF9pZCwgdGhyZWFkLT5hdHRyLnNjaGVkX3BvbGljeSwgJnBhcmFtKTsKKyAgICB9CisKKyAgICBwdGhyZWFkX2NvbmRfaW5pdCgmdGhyZWFkLT5qb2luX2NvbmQsIE5VTEwpOworICAgIHRocmVhZC0+am9pbl9jb3VudCA9IDA7CisKKyAgICB0aHJlYWQtPmNsZWFudXBfc3RhY2sgPSBOVUxMOworCisgICAgX3B0aHJlYWRfaW50ZXJuYWxfYWRkKHRocmVhZCk7Cit9CisKKworLyogWFhYIHN0YWNrcyBub3QgcmVjbGFpbWVkIGlmIHRocmVhZCBzcGF3biBmYWlscyAqLworLyogWFhYIHN0YWNrcyBhZGRyZXNzIHNwYWNlcyBzaG91bGQgYmUgcmV1c2VkIGlmIGF2YWlsYWJsZSBhZ2FpbiAqLworCitzdGF0aWMgdm9pZCAqbWtzdGFjayhzaXplX3Qgc2l6ZSwgc2l6ZV90IGd1YXJkX3NpemUpCit7CisgICAgdm9pZCAqIHN0YWNrOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZtbWFwX2xvY2spOworCisgICAgc3RhY2sgPSBtbWFwKCh2b2lkICopZ1N0YWNrQmFzZSwgc2l6ZSwKKyAgICAgICAgICAgICAgICAgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKKyAgICAgICAgICAgICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTIHwgTUFQX05PUkVTRVJWRSwKKyAgICAgICAgICAgICAgICAgLTEsIDApOworCisgICAgaWYoc3RhY2sgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICBzdGFjayA9IE5VTEw7CisgICAgICAgIGdvdG8gZG9uZTsKKyAgICB9CisKKyAgICBpZihtcHJvdGVjdChzdGFjaywgZ3VhcmRfc2l6ZSwgUFJPVF9OT05FKSl7CisgICAgICAgIG11bm1hcChzdGFjaywgc2l6ZSk7CisgICAgICAgIHN0YWNrID0gTlVMTDsKKyAgICAgICAgZ290byBkb25lOworICAgIH0KKworZG9uZToKKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmbW1hcF9sb2NrKTsKKyAgICByZXR1cm4gc3RhY2s7Cit9CisKKy8qCisgKiBDcmVhdGUgYSBuZXcgdGhyZWFkLiBUaGUgdGhyZWFkJ3Mgc3RhY2sgaXMgbGF5ZWQgb3V0IGxpa2Ugc286CisgKgorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgIHB0aHJlYWRfaW50ZXJuYWxfdCAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgVExTIGFyZWEgICAgICAgICB8CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgLgorICogLiAgICAgICAgIHN0YWNrIGFyZWEgICAgICAgIC4KKyAqIC4gICAgICAgICAgICAgICAgICAgICAgICAgICAuCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSsKKyAqIHwgICAgICAgICBndWFyZCBwYWdlICAgICAgICB8CisgKiArLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKworICoKKyAqICBub3RlIHRoYXQgVExTWzBdIG11c3QgYmUgYSBwb2ludGVyIHRvIGl0c2VsZiwgdGhpcyBpcyByZXF1aXJlZAorICogIGJ5IHRoZSB0aHJlYWQtbG9jYWwgc3RvcmFnZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgeDg2IExpbnV4CisgKiAga2VybmVsLCB3aGVyZSB0aGUgVExTIHBvaW50ZXIgaXMgcmVhZCBieSByZWFkaW5nIGZzOlswXQorICovCitpbnQgcHRocmVhZF9jcmVhdGUocHRocmVhZF90ICp0aHJlYWRfb3V0LCBwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkICopLCB2b2lkICogYXJnKQoreworICAgIGNoYXIqICAgc3RhY2s7CisgICAgdm9pZCoqICB0bHM7CisgICAgaW50IHRpZDsKKyAgICBwdGhyZWFkX211dGV4X3QgKiBzdGFydF9tdXRleDsKKyAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgbWFkZXN0YWNrID0gMDsKKyAgICBpbnQgICAgIG9sZF9lcnJubyA9IGVycm5vOworCisgICAgLyogdGhpcyB3aWxsIGluZm9ybSB0aGUgcmVzdCBvZiB0aGUgQyBsaWJyYXJ5IHRoYXQgYXQgbGVhc3Qgb25lIHRocmVhZAorICAgICAqIHdhcyBjcmVhdGVkLiB0aGlzIHdpbGwgZW5mb3JjZSBjZXJ0YWluIGZ1bmN0aW9ucyB0byBhY3F1aXJlL3JlbGVhc2UKKyAgICAgKiBsb2NrcyAoZS5nLiBhdGV4aXQoKSkgdG8gcHJvdGVjdCBzaGFyZWQgZ2xvYmFsIHN0cnVjdHVyZXMuCisgICAgICoKKyAgICAgKiB0aGlzIHdvcmtzIGJlY2F1c2UgcHRocmVhZF9jcmVhdGUoKSBpcyBub3QgY2FsbGVkIGJ5IHRoZSBDIGxpYnJhcnkKKyAgICAgKiBpbml0aWFsaXphdGlvbiByb3V0aW5lIHRoYXQgc2V0cyB1cCB0aGUgbWFpbiB0aHJlYWQncyBkYXRhIHN0cnVjdHVyZXMuCisgICAgICovCisgICAgX19pc3RocmVhZGVkID0gMTsKKworICAgIHRocmVhZCA9IF9wdGhyZWFkX2ludGVybmFsX2FsbG9jKCk7CisgICAgaWYgKHRocmVhZCA9PSBOVUxMKQorICAgICAgICByZXR1cm4gRU5PTUVNOworCisgICAgaWYgKGF0dHIgPT0gTlVMTCkgeworICAgICAgICBhdHRyID0gJmdEZWZhdWx0UHRocmVhZEF0dHI7CisgICAgfQorCisgICAgLy8gbWFrZSBzdXJlIHRoZSBzdGFjayBpcyBQQUdFX1NJWkUgYWxpZ25lZAorICAgIHNpemVfdCBzdGFja1NpemUgPSAoYXR0ci0+c3RhY2tfc2l6ZSArCisgICAgICAgICAgICAgICAgICAgICAgICAoUEFHRV9TSVpFLTEpKSAmIH4oUEFHRV9TSVpFLTEpOworCisgICAgaWYgKCFhdHRyLT5zdGFja19iYXNlKSB7CisgICAgICAgIHN0YWNrID0gbWtzdGFjayhzdGFja1NpemUsIGF0dHItPmd1YXJkX3NpemUpOworICAgICAgICBpZihzdGFjayA9PSBOVUxMKSB7CisgICAgICAgICAgICBfcHRocmVhZF9pbnRlcm5hbF9mcmVlKHRocmVhZCk7CisgICAgICAgICAgICByZXR1cm4gRU5PTUVNOworICAgICAgICB9CisgICAgICAgIG1hZGVzdGFjayA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgc3RhY2sgPSBhdHRyLT5zdGFja19iYXNlOworICAgIH0KKworICAgIC8vIE1ha2Ugcm9vbSBmb3IgVExTCisgICAgdGxzID0gKHZvaWQqKikoc3RhY2sgKyBzdGFja1NpemUgLSBCSU9OSUNfVExTX1NMT1RTKnNpemVvZih2b2lkKikpOworCisgICAgLy8gQ3JlYXRlIGEgbXV0ZXggZm9yIHRoZSB0aHJlYWQgaW4gVExTX1NMT1RfU0VMRiB0byB3YWl0IG9uIG9uY2UgaXQgc3RhcnRzIHNvIHdlIGNhbiBrZWVwCisgICAgLy8gaXQgZnJvbSBkb2luZyBhbnl0aGluZyB1bnRpbCBhZnRlciB3ZSBub3RpZnkgdGhlIGRlYnVnZ2VyIGFib3V0IGl0CisgICAgc3RhcnRfbXV0ZXggPSAocHRocmVhZF9tdXRleF90ICopICZ0bHNbVExTX1NMT1RfU0VMRl07CisgICAgcHRocmVhZF9tdXRleF9pbml0KHN0YXJ0X211dGV4LCBOVUxMKTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2soc3RhcnRfbXV0ZXgpOworCisgICAgdGxzW1RMU19TTE9UX1RIUkVBRF9JRF0gPSB0aHJlYWQ7CisKKyAgICB0aWQgPSBfX3B0aHJlYWRfY2xvbmUoKGludCgqKSh2b2lkKikpc3RhcnRfcm91dGluZSwgdGxzLAorICAgICAgICAgICAgICAgIENMT05FX0ZJTEVTIHwgQ0xPTkVfRlMgfCBDTE9ORV9WTSB8IENMT05FX1NJR0hBTkQKKyAgICAgICAgICAgICAgICB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfCBDTE9ORV9ERVRBQ0hFRCwKKyAgICAgICAgICAgICAgICBhcmcpOworCisgICAgaWYodGlkIDwgMCkgeworICAgICAgICBpbnQgIHJlc3VsdDsKKyAgICAgICAgaWYgKG1hZGVzdGFjaykKKyAgICAgICAgICAgIG11bm1hcChzdGFjaywgc3RhY2tTaXplKTsKKyAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfZnJlZSh0aHJlYWQpOworICAgICAgICByZXN1bHQgPSBlcnJubzsKKyAgICAgICAgZXJybm8gPSBvbGRfZXJybm87CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgX2luaXRfdGhyZWFkKHRocmVhZCwgdGlkLCAocHRocmVhZF9hdHRyX3QqKWF0dHIsIHN0YWNrKTsKKworICAgIGlmICghbWFkZXN0YWNrKQorICAgICAgICB0aHJlYWQtPmF0dHIuZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfVVNFUl9TVEFDSzsKKworICAgIC8vIE5vdGlmeSBhbnkgZGVidWdnZXJzIGFib3V0IHRoZSBuZXcgdGhyZWFkCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrKTsKKyAgICBfdGhyZWFkX2NyZWF0ZWRfaG9vayh0aWQpOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnRGVidWdnZXJOb3RpZmljYXRpb25Mb2NrKTsKKworICAgIC8vIExldCB0aGUgdGhyZWFkIGRvIGl0J3MgdGhpbmcKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayhzdGFydF9tdXRleCk7CisKKyAgICAqdGhyZWFkX291dCA9IChwdGhyZWFkX3QpdGhyZWFkOworICAgIHJldHVybiAwOworfQorCisKK2ludCBwdGhyZWFkX2F0dHJfaW5pdChwdGhyZWFkX2F0dHJfdCAqIGF0dHIpCit7CisgICAgKmF0dHIgPSBnRGVmYXVsdFB0aHJlYWRBdHRyOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKiBhdHRyKQoreworICAgIG1lbXNldChhdHRyLCAweDQyLCBzaXplb2YocHRocmVhZF9hdHRyX3QpKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIGludCBzdGF0ZSkKK3sKKyAgICBpZiAoc3RhdGUgPT0gUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpIHsKKyAgICAgICAgYXR0ci0+ZmxhZ3MgfD0gUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQ7CisgICAgfSBlbHNlIGlmIChzdGF0ZSA9PSBQVEhSRUFEX0NSRUFURV9KT0lOQUJMRSkgeworICAgICAgICBhdHRyLT5mbGFncyAmPSB+UFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBpbnQgKiBzdGF0ZSkKK3sKKyAgICAqc3RhdGUgPSAoYXR0ci0+ZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCkKKyAgICAgICAgICAgPyBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRAorICAgICAgICAgICA6IFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICogYXR0ciwgaW50IHBvbGljeSkKK3sKKyAgICBhdHRyLT5zY2hlZF9wb2xpY3kgPSBwb2xpY3k7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBpbnQgKiBwb2xpY3kpCit7CisgICAgKnBvbGljeSA9IGF0dHItPnNjaGVkX3BvbGljeTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtIGNvbnN0ICogcGFyYW0pCit7CisgICAgYXR0ci0+c2NoZWRfcHJpb3JpdHkgPSBwYXJhbS0+c2NoZWRfcHJpb3JpdHk7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHN0cnVjdCBzY2hlZF9wYXJhbSAqIHBhcmFtKQoreworICAgIHBhcmFtLT5zY2hlZF9wcmlvcml0eSA9IGF0dHItPnNjaGVkX3ByaW9yaXR5OworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBzdGFja19zaXplKQoreworICAgIGlmICgoc3RhY2tfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSB8fCBzdGFja19zaXplIDwgUFRIUkVBRF9TVEFDS19NSU4pKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorICAgIGF0dHItPnN0YWNrX3NpemUgPSBzdGFja19zaXplOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHNpemVfdCAqIHN0YWNrX3NpemUpCit7CisgICAgKnN0YWNrX3NpemUgPSBhdHRyLT5zdGFja19zaXplOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHZvaWQgKiBzdGFja19hZGRyKQoreworI2lmIDEKKyAgICAvLyBJdCdzIG5vdCBjbGVhciBpZiB0aGlzIGlzIHNldHRpbmcgdGhlIHRvcCBvciBib3R0b20gb2YgdGhlIHN0YWNrLCBzbyBkb24ndCBoYW5kbGUgaXQgZm9yIG5vdy4KKyAgICByZXR1cm4gRU5PU1lTOworI2Vsc2UKKyAgICBpZiAoKHVpbnQzMl90KXN0YWNrX2FkZHIgJiAoUEFHRV9TSVpFIC0gMSkpIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisgICAgYXR0ci0+c3RhY2tfYmFzZSA9IHN0YWNrX2FkZHI7CisgICAgcmV0dXJuIDA7CisjZW5kaWYKK30KKworaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCB2b2lkICoqIHN0YWNrX2FkZHIpCit7CisgICAgKnN0YWNrX2FkZHIgPSBhdHRyLT5zdGFja19iYXNlICsgYXR0ci0+c3RhY2tfc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayhwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHZvaWQgKiBzdGFja19iYXNlLCBzaXplX3Qgc3RhY2tfc2l6ZSkKK3sKKyAgICBpZiAoKHN0YWNrX3NpemUgJiAoUEFHRV9TSVpFIC0gMSkgfHwgc3RhY2tfc2l6ZSA8IFBUSFJFQURfU1RBQ0tfTUlOKSkgeworICAgICAgICByZXR1cm4gRUlOVkFMOworICAgIH0KKyAgICBpZiAoKHVpbnQzMl90KXN0YWNrX2Jhc2UgJiAoUEFHRV9TSVpFIC0gMSkpIHsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisgICAgYXR0ci0+c3RhY2tfYmFzZSA9IHN0YWNrX2Jhc2U7CisgICAgYXR0ci0+c3RhY2tfc2l6ZSA9IHN0YWNrX3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2socHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCB2b2lkICoqIHN0YWNrX2Jhc2UsIHNpemVfdCAqIHN0YWNrX3NpemUpCit7CisgICAgKnN0YWNrX2Jhc2UgPSBhdHRyLT5zdGFja19iYXNlOworICAgICpzdGFja19zaXplID0gYXR0ci0+c3RhY2tfc2l6ZTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgKiBhdHRyLCBzaXplX3QgZ3VhcmRfc2l6ZSkKK3sKKyAgICBpZiAoZ3VhcmRfc2l6ZSAmIChQQUdFX1NJWkUgLSAxKSB8fCBndWFyZF9zaXplIDwgUEFHRV9TSVpFKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgYXR0ci0+Z3VhcmRfc2l6ZSA9IGd1YXJkX3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2F0dHJfZ2V0Z3VhcmRzaXplKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgc2l6ZV90ICogZ3VhcmRfc2l6ZSkKK3sKKyAgICAqZ3VhcmRfc2l6ZSA9IGF0dHItPmd1YXJkX3NpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2dldGF0dHJfbnAocHRocmVhZF90IHRoaWQsIHB0aHJlYWRfYXR0cl90ICogYXR0cikKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90ICopdGhpZDsKKyAgICAqYXR0ciA9IHRocmVhZC0+YXR0cjsKKyAgICByZXR1cm4gMDsKK30KKworCisvKiBDQVZFQVQ6IG91ciBpbXBsZW1lbnRhdGlvbiBvZiBwdGhyZWFkX2NsZWFudXBfcHVzaC9wb3AgZG9lc24ndCBzdXBwb3J0IEMrKyBleGNlcHRpb25zCisgKiAgICAgICAgIGFuZCB0aHJlYWQgY2FuY2VsYXRpb24KKyAqLworCit2b2lkIF9fcHRocmVhZF9jbGVhbnVwX3B1c2goIF9fcHRocmVhZF9jbGVhbnVwX3QqICAgICAgYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wdGhyZWFkX2NsZWFudXBfZnVuY190ICByb3V0aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkKiAgICAgICAgICAgICAgICAgICAgIGFyZyApCit7CisgICAgcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyZWFkID0gX19nZXRfdGhyZWFkKCk7CisKKyAgICBjLT5fX2NsZWFudXBfcm91dGluZSAgPSByb3V0aW5lOworICAgIGMtPl9fY2xlYW51cF9hcmcgICAgICA9IGFyZzsKKyAgICBjLT5fX2NsZWFudXBfcHJldiAgICAgPSB0aHJlYWQtPmNsZWFudXBfc3RhY2s7CisgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrID0gYzsKK30KKwordm9pZCBfX3B0aHJlYWRfY2xlYW51cF9wb3AoIF9fcHRocmVhZF9jbGVhbnVwX3QqICBjLCBpbnQgIGV4ZWN1dGUgKQoreworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IF9fZ2V0X3RocmVhZCgpOworCisgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrID0gYy0+X19jbGVhbnVwX3ByZXY7CisgICAgaWYgKGV4ZWN1dGUpCisgICAgICAgIGMtPl9fY2xlYW51cF9yb3V0aW5lKGMtPl9fY2xlYW51cF9hcmcpOworfQorCisvKiB1c2VkIGJ5IHB0aHJlYWRfZXhpdCgpIHRvIGNsZWFuIGFsbCBUTFMga2V5cyBvZiB0aGUgY3VycmVudCB0aHJlYWQgKi8KK3N0YXRpYyB2b2lkIHB0aHJlYWRfa2V5X2NsZWFuX2FsbCh2b2lkKTsKKwordm9pZCBwdGhyZWFkX2V4aXQodm9pZCAqIHJldHZhbCkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgICAgID0gX19nZXRfdGhyZWFkKCk7CisgICAgdm9pZCogICAgICAgICAgICAgICAgc3RhY2tfYmFzZSA9IHRocmVhZC0+YXR0ci5zdGFja19iYXNlOworICAgIGludCAgICAgICAgICAgICAgICAgIHN0YWNrX3NpemUgPSB0aHJlYWQtPmF0dHIuc3RhY2tfc2l6ZTsKKyAgICBpbnQgICAgICAgICAgICAgICAgICB1c2VyX3N0YWNrID0gKHRocmVhZC0+YXR0ci5mbGFncyAmIFBUSFJFQURfQVRUUl9GTEFHX1VTRVJfU1RBQ0spICE9IDA7CisKKyAgICAvLyBjYWxsIHRoZSBjbGVhbnVwIGhhbmRsZXJzIGZpcnN0CisgICAgd2hpbGUgKHRocmVhZC0+Y2xlYW51cF9zdGFjaykgeworICAgICAgICBfX3B0aHJlYWRfY2xlYW51cF90KiAgYyA9IHRocmVhZC0+Y2xlYW51cF9zdGFjazsKKyAgICAgICAgdGhyZWFkLT5jbGVhbnVwX3N0YWNrICAgPSBjLT5fX2NsZWFudXBfcHJldjsKKyAgICAgICAgYy0+X19jbGVhbnVwX3JvdXRpbmUoYy0+X19jbGVhbnVwX2FyZyk7CisgICAgfQorCisgICAgLy8gY2FsbCB0aGUgVExTIGRlc3RydWN0b3JzLCBpdCBpcyBpbXBvcnRhbnQgdG8gZG8gdGhhdCBiZWZvcmUgcmVtb3ZpbmcgdGhpcworICAgIC8vIHRocmVhZCBmcm9tIHRoZSBnbG9iYWwgbGlzdC4gdGhpcyB3aWxsIGVuc3VyZSB0aGF0IGlmIHNvbWVvbmUgZWxzZSBkZWxldGVzCisgICAgLy8gYSBUTFMga2V5LCB0aGUgY29ycmVzcG9uZGluZyB2YWx1ZSB3aWxsIGJlIHNldCB0byBOVUxMIGluIHRoaXMgdGhyZWFkJ3MgVExTCisgICAgLy8gc3BhY2UgKHNlZSBwdGhyZWFkX2tleV9kZWxldGUpCisgICAgcHRocmVhZF9rZXlfY2xlYW5fYWxsKCk7CisKKyAgICAvLyBpZiB0aGUgdGhyZWFkIGlzIGRldGFjaGVkLCBkZXN0cm95IHRoZSBwdGhyZWFkX2ludGVybmFsX3QKKyAgICAvLyBvdGhlcndpc2UsIGtlZXAgaXQgaW4gbWVtb3J5IGFuZCBzaWduYWwgYW55IGpvaW5lcnMKKyAgICBpZiAodGhyZWFkLT5hdHRyLmZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQpIHsKKyAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfcmVtb3ZlKHRocmVhZCk7CisgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX2ZyZWUodGhyZWFkKTsKKyAgICB9IGVsc2UgeworICAgICAgIC8qIHRoZSBqb2luX2NvdW50IGZpZWxkIGlzIHVzZWQgdG8gc3RvcmUgdGhlIG51bWJlciBvZiB0aHJlYWRzIHdhaXRpbmcgZm9yCisgICAgICAgICogdGhlIHRlcm1pbmF0aW9uIG9mIHRoaXMgdGhyZWFkIHdpdGggcHRocmVhZF9qb2luKCksCisgICAgICAgICoKKyAgICAgICAgKiBpZiBpdCBpcyBwb3NpdGl2ZSB3ZSBuZWVkIHRvIHNpZ25hbCB0aGUgd2FpdGVycywgYW5kIHdlIGRvIG5vdCB0b3VjaAorICAgICAgICAqIHRoZSBjb3VudCAoaXQgd2lsbCBiZSBkZWNyZW1lbnRlZCBieSB0aGUgd2FpdGVycywgdGhlIGxhc3Qgb25lIHdpbGwKKyAgICAgICAgKiBhbHNvIHJlbW92ZS9mcmVlIHRoZSB0aHJlYWQgc3RydWN0dXJlCisgICAgICAgICoKKyAgICAgICAgKiBpZiBpdCBpcyB6ZXJvLCB3ZSBzZXQgdGhlIGNvdW50IHZhbHVlIHRvIC0xIHRvIGluZGljYXRlIHRoYXQgdGhlCisgICAgICAgICogdGhyZWFkIGlzIGluICd6b21iaWUnIHN0YXRlOiBpdCBoYXMgc3RvcHBlZCBleGVjdXRpbmcsIGFuZCBpdHMgc3RhY2sKKyAgICAgICAgKiBpcyBnb25lIChhcyB3ZWxsIGFzIGl0cyBUTFMgYXJlYSkuIHdoZW4gYW5vdGhlciB0aHJlYWQgY2FsbHMgcHRocmVhZF9qb2luKCkKKyAgICAgICAgKiBvbiBpdCwgaXQgd2lsbCBpbW1lZGlhdGVseSBmcmVlIHRoZSB0aHJlYWQgYW5kIHJldHVybi4KKyAgICAgICAgKi8KKyAgICAgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgICAgICB0aHJlYWQtPnJldHVybl92YWx1ZSA9IHJldHZhbDsKKyAgICAgICAgaWYgKHRocmVhZC0+am9pbl9jb3VudCA+IDApIHsKKyAgICAgICAgICAgIHB0aHJlYWRfY29uZF9icm9hZGNhc3QoJnRocmVhZC0+am9pbl9jb25kKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHRocmVhZC0+am9pbl9jb3VudCA9IC0xOyAgLyogem9tYmllIHRocmVhZCAqLworICAgICAgICB9CisgICAgICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIH0KKworICAgIC8vIGRlc3Ryb3kgdGhlIHRocmVhZCBzdGFjaworICAgIGlmICh1c2VyX3N0YWNrKQorICAgICAgICBfZXhpdF90aHJlYWQoKGludClyZXR2YWwpOworICAgIGVsc2UKKyAgICAgICAgX2V4aXRfd2l0aF9zdGFja190ZWFyZG93bihzdGFja19iYXNlLCBzdGFja19zaXplLCAoaW50KXJldHZhbCk7Cit9CisKK2ludCBwdGhyZWFkX2pvaW4ocHRocmVhZF90IHRoaWQsIHZvaWQgKiogcmV0X3ZhbCkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90Kil0aGlkOworICAgIGludCAgICAgICAgICAgICAgICAgIGNvdW50OworCisgICAgLy8gY2hlY2sgdGhhdCB0aGUgdGhyZWFkIHN0aWxsIGV4aXN0cyBhbmQgaXMgbm90IGRldGFjaGVkCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworCisgICAgZm9yICh0aHJlYWQgPSBnVGhyZWFkTGlzdDsgdGhyZWFkICE9IE5VTEw7IHRocmVhZCA9IHRocmVhZC0+bmV4dCkKKyAgICAgICAgaWYgKHRocmVhZCA9PSAocHRocmVhZF9pbnRlcm5hbF90Kil0aGlkKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICBpZiAoIXRocmVhZCkgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICAgICAgcmV0dXJuIEVTUkNIOworICAgIH0KKworICAgIGlmICh0aHJlYWQtPmF0dHIuZmxhZ3MgJiBQVEhSRUFEX0FUVFJfRkxBR19ERVRBQ0hFRCkgeworICAgICAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKyAgICB9CisKKyAgIC8qIHdhaXQgZm9yIHRocmVhZCBkZWF0aCB3aGVuIG5lZWRlZAorICAgICoKKyAgICAqIGlmIHRoZSAnam9pbl9jb3VudCcgaXMgbmVnYXRpdmUsIHRoaXMgaXMgYSAnem9tYmllJyB0aHJlYWQgdGhhdAorICAgICogaXMgYWxyZWFkeSBkZWFkIGFuZCB3aXRob3V0IHN0YWNrL1RMUworICAgICoKKyAgICAqIG90aGVyd2lzZSwgd2UgbmVlZCB0byBpbmNyZW1lbnQgJ2pvaW4tY291bnQnIGFuZCB3YWl0IHRvIGJlIHNpZ25hbGVkCisgICAgKi8KKyAgIGNvdW50ID0gdGhyZWFkLT5qb2luX2NvdW50OworICAgIGlmIChjb3VudCA+PSAwKSB7CisgICAgICAgIHRocmVhZC0+am9pbl9jb3VudCArPSAxOworICAgICAgICBwdGhyZWFkX2NvbmRfd2FpdCggJnRocmVhZC0+am9pbl9jb25kLCAmZ1RocmVhZExpc3RMb2NrICk7CisgICAgICAgIGNvdW50ID0gLS10aHJlYWQtPmpvaW5fY291bnQ7CisgICAgfQorICAgIGlmIChyZXRfdmFsKQorICAgICAgICAqcmV0X3ZhbCA9IHRocmVhZC0+cmV0dXJuX3ZhbHVlOworCisgICAgLyogcmVtb3ZlIHRocmVhZCBkZXNjcmlwdG9yIHdoZW4gd2UncmUgdGhlIGxhc3Qgam9pbmVyIG9yIHdoZW4gdGhlCisgICAgICogdGhyZWFkIHdhcyBhbHJlYWR5IGEgem9tYmllLgorICAgICAqLworICAgIGlmIChjb3VudCA8PSAwKSB7CisgICAgICAgIF9wdGhyZWFkX2ludGVybmFsX3JlbW92ZV9sb2NrZWQodGhyZWFkKTsKKyAgICAgICAgX3B0aHJlYWRfaW50ZXJuYWxfZnJlZSh0aHJlYWQpOworICAgIH0KKyAgICBwdGhyZWFkX211dGV4X3VubG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50ICBwdGhyZWFkX2RldGFjaCggcHRocmVhZF90ICB0aGlkICkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QqICB0aHJlYWQ7CisgICAgaW50ICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBmbGFnczsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmZ1RocmVhZExpc3RMb2NrKTsKKyAgICBmb3IgKHRocmVhZCA9IGdUaHJlYWRMaXN0OyB0aHJlYWQgIT0gTlVMTDsgdGhyZWFkID0gdGhyZWFkLT5uZXh0KQorICAgICAgICBpZiAodGhyZWFkID09IChwdGhyZWFkX2ludGVybmFsX3QqKXRoaWQpCisgICAgICAgICAgICBnb3RvIEZvdW5kSXQ7CisKKyAgICByZXN1bHQgPSBFU1JDSDsKKyAgICBnb3RvIEV4aXQ7CisKK0ZvdW5kSXQ6CisgICAgZG8geworICAgICAgICBmbGFncyA9IHRocmVhZC0+YXR0ci5mbGFnczsKKworICAgICAgICBpZiAoIGZsYWdzICYgUFRIUkVBRF9BVFRSX0ZMQUdfREVUQUNIRUQgKSB7CisgICAgICAgICAgICAvKiB0aHJlYWQgaXMgbm90IGpvaW5hYmxlICEgKi8KKyAgICAgICAgICAgIHJlc3VsdCA9IEVJTlZBTDsKKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoIF9fYXRvbWljX2NtcHhjaGcoIGZsYWdzLCBmbGFncyB8IFBUSFJFQURfQVRUUl9GTEFHX0RFVEFDSEVELAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZvbGF0aWxlIGludCopJnRocmVhZC0+YXR0ci5mbGFncyApICE9IDAgKTsKK0V4aXQ6CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworcHRocmVhZF90IHB0aHJlYWRfc2VsZih2b2lkKQoreworICAgIHJldHVybiAocHRocmVhZF90KV9fZ2V0X3RocmVhZCgpOworfQorCitpbnQgcHRocmVhZF9lcXVhbChwdGhyZWFkX3Qgb25lLCBwdGhyZWFkX3QgdHdvKQoreworICAgIHJldHVybiAob25lID09IHR3byA/IDEgOiAwKTsKK30KKworaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50ICogcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKiBwYXJhbSkKK3sKKyAgICBpbnQgIG9sZF9lcnJubyA9IGVycm5vOworCisgICAgcHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCAqKXRoaWQ7CisgICAgaW50IGVyciA9IHNjaGVkX2dldHBhcmFtKHRocmVhZC0+a2VybmVsX2lkLCBwYXJhbSk7CisgICAgaWYgKCFlcnIpIHsKKyAgICAgICAgKnBvbGljeSA9IHNjaGVkX2dldHNjaGVkdWxlcih0aHJlYWQtPmtlcm5lbF9pZCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZXJyID0gZXJybm87CisgICAgICAgIGVycm5vID0gb2xkX2Vycm5vOworICAgIH0KKyAgICByZXR1cm4gZXJyOworfQorCitpbnQgcHRocmVhZF9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfdCB0aGlkLCBpbnQgcG9saWN5LAorICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gY29uc3QgKiBwYXJhbSkKK3sKKyAgICBwdGhyZWFkX2ludGVybmFsX3QgKiB0aHJlYWQgPSAocHRocmVhZF9pbnRlcm5hbF90ICopdGhpZDsKKyAgICBpbnQgICAgICAgICAgICAgICAgICBvbGRfZXJybm8gPSBlcnJubzsKKyAgICBpbnQgICAgICAgICAgICAgICAgICByZXQ7CisKKyAgICByZXQgPSBzY2hlZF9zZXRzY2hlZHVsZXIodGhyZWFkLT5rZXJuZWxfaWQsIHBvbGljeSwgcGFyYW0pOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHJldCA9IGVycm5vOworICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KKworCitpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOworCisvLyBtdXRleCBsb2NrIHN0YXRlcworLy8KKy8vIDA6IHVubG9ja2VkCisvLyAxOiBsb2NrZWQsIG5vIHdhaXRlcnMKKy8vIDI6IGxvY2tlZCwgbWF5YmUgd2FpdGVycworCisvKiBhIG11dGV4IGlzIGltcGxlbWVudGVkIGFzIGEgMzItYml0IGludGVnZXIgaG9sZGluZyB0aGUgZm9sbG93aW5nIGZpZWxkcworICoKKyAqIGJpdHM6ICAgICBuYW1lICAgICBkZXNjcmlwdGlvbgorICogMzEtMTYgICAgIHRpZCAgICAgIG93bmVyIHRocmVhZCdzIGtlcm5lbCBpZCAocmVjdXJzaXZlIGFuZCBlcnJvcmNoZWNrIG9ubHkpCisgKiAxNS0xNCAgICAgdHlwZSAgICAgbXV0ZXggdHlwZQorICogMTMtMiAgICAgIGNvdW50ZXIgIGNvdW50ZXIgb2YgcmVjdXJzaXZlIG11dGV4ZXMKKyAqIDEtMCAgICAgICBzdGF0ZSAgICBsb2NrIHN0YXRlICgwLCAxIG9yIDIpCisgKi8KKworCisjZGVmaW5lICBNVVRFWF9PV05FUihtKSAgKCgobSktPnZhbHVlID4+IDE2KSAmIDB4ZmZmZikKKyNkZWZpbmUgIE1VVEVYX0NPVU5URVIobSkgKCgobSktPnZhbHVlID4+IDIpICYgMHhmZmYpCisKKyNkZWZpbmUgIE1VVEVYX1RZUEVfTUFTSyAgICAgICAweGMwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfTk9STUFMICAgICAweDAwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfUkVDVVJTSVZFICAweDQwMDAKKyNkZWZpbmUgIE1VVEVYX1RZUEVfRVJST1JDSEVDSyAweDgwMDAKKworI2RlZmluZSAgTVVURVhfQ09VTlRFUl9TSElGVCAgMgorI2RlZmluZSAgTVVURVhfQ09VTlRFUl9NQVNLICAgMHgzZmZjCisKKworCisKK2ludCBwdGhyZWFkX211dGV4YXR0cl9pbml0KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpCit7CisgICAgaWYgKGF0dHIpIHsKKyAgICAgICAgKmF0dHIgPSBQVEhSRUFEX01VVEVYX0RFRkFVTFQ7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfZGVzdHJveShwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKQoreworICAgIGlmIChhdHRyKSB7CisgICAgICAgICphdHRyID0gLTE7CisgICAgICAgIHJldHVybiAwOworICAgIH0gZWxzZSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZShjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgKnR5cGUpCit7CisgICAgaWYgKGF0dHIgJiYgKmF0dHIgPj0gUFRIUkVBRF9NVVRFWF9OT1JNQUwgJiYKKyAgICAgICAgICAgICAgICAqYXR0ciA8PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgKSB7CisgICAgICAgICp0eXBlID0gKmF0dHI7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gRUlOVkFMOworfQorCitpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlwZShwdGhyZWFkX211dGV4YXR0cl90ICphdHRyLCBpbnQgdHlwZSkKK3sKKyAgICBpZiAoYXR0ciAmJiB0eXBlID49IFBUSFJFQURfTVVURVhfTk9STUFMICYmCisgICAgICAgICAgICAgICAgdHlwZSA8PSBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgKSB7CisgICAgICAgICphdHRyID0gdHlwZTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIHJldHVybiBFSU5WQUw7Cit9CisKK2ludCBwdGhyZWFkX211dGV4X2luaXQocHRocmVhZF9tdXRleF90ICptdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0cikKK3sKKyAgICBpZiAoIG11dGV4ICkgeworICAgICAgICBpZiAoYXR0ciA9PSBOVUxMKSB7CisgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSBNVVRFWF9UWVBFX05PUk1BTDsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgICAgIHN3aXRjaCAoICphdHRyICkgeworICAgICAgICBjYXNlIFBUSFJFQURfTVVURVhfTk9STUFMOgorICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gTVVURVhfVFlQRV9OT1JNQUw7CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFOgorICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gTVVURVhfVFlQRV9SRUNVUlNJVkU7CisgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICBjYXNlIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSzoKKyAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IE1VVEVYX1RZUEVfRVJST1JDSEVDSzsKKyAgICAgICAgICAgIHJldHVybiAwOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiBFSU5WQUw7Cit9CisKK2ludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKyAgICBtdXRleC0+dmFsdWUgPSAweGRlYWQxMGNjOworICAgIHJldHVybiAwOworfQorCisKKy8qCisgKiBMb2NrIGEgbm9uLXJlY3Vyc2l2ZSBtdXRleC4KKyAqCisgKiBBcyBub3RlZCBhYm92ZSwgdGhlcmUgYXJlIHRocmVlIHN0YXRlczoKKyAqICAgMCAodW5sb2NrZWQsIG5vIGNvbnRlbnRpb24pCisgKiAgIDEgKGxvY2tlZCwgbm8gY29udGVudGlvbikKKyAqICAgMiAobG9ja2VkLCBjb250ZW50aW9uKQorICoKKyAqIE5vbi1yZWN1cnNpdmUgbXV0ZXhlcyBkb24ndCB1c2UgdGhlIHRocmVhZC1pZCBvciBjb3VudGVyIGZpZWxkcywgYW5kIHRoZQorICogInR5cGUiIHZhbHVlIGlzIHplcm8sIHNvIHRoZSBvbmx5IGJpdHMgdGhhdCB3aWxsIGJlIHNldCBhcmUgdGhlIG9uZXMgaW4KKyAqIHRoZSBsb2NrIHN0YXRlIGZpZWxkLgorICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitfbm9ybWFsX2xvY2socHRocmVhZF9tdXRleF90KiAgbXV0ZXgpCit7CisgICAgLyoKKyAgICAgKiBUaGUgY29tbW9uIGNhc2UgaXMgYW4gdW5sb2NrZWQgbXV0ZXgsIHNvIHdlIGJlZ2luIGJ5IHRyeWluZyB0bworICAgICAqIGNoYW5nZSB0aGUgbG9jaydzIHN0YXRlIGZyb20gMCB0byAxLiAgX19hdG9taWNfY21weGNoZygpIHJldHVybnMgMAorICAgICAqIGlmIGl0IG1hZGUgdGhlIHN3YXAgc3VjY2Vzc2Z1bGx5LiAgSWYgdGhlIHJlc3VsdCBpcyBub256ZXJvLCB0aGlzCisgICAgICogbG9jayBpcyBhbHJlYWR5IGhlbGQgYnkgYW5vdGhlciB0aHJlYWQuCisgICAgICovCisgICAgaWYgKF9fYXRvbWljX2NtcHhjaGcoMCwgMSwgJm11dGV4LT52YWx1ZSApICE9IDApIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogV2Ugd2FudCB0byBnbyB0byBzbGVlcCB1bnRpbCB0aGUgbXV0ZXggaXMgYXZhaWxhYmxlLCB3aGljaAorICAgICAgICAgKiByZXF1aXJlcyBwcm9tb3RpbmcgaXQgdG8gc3RhdGUgMi4gIFdlIG5lZWQgdG8gc3dhcCBpbiB0aGUgbmV3CisgICAgICAgICAqIHN0YXRlIHZhbHVlIGFuZCB0aGVuIHdhaXQgdW50aWwgc29tZWJvZHkgd2FrZXMgdXMgdXAuCisgICAgICAgICAqCisgICAgICAgICAqIF9fYXRvbWljX3N3YXAoKSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZS4gIFdlIHN3YXAgMiBpbiBhbmQKKyAgICAgICAgICogc2VlIGlmIHdlIGdvdCB6ZXJvIGJhY2s7IGlmIHNvLCB3ZSBoYXZlIGFjcXVpcmVkIHRoZSBsb2NrLiAgSWYKKyAgICAgICAgICogbm90LCBhbm90aGVyIHRocmVhZCBzdGlsbCBob2xkcyB0aGUgbG9jayBhbmQgd2Ugd2FpdCBhZ2Fpbi4KKyAgICAgICAgICoKKyAgICAgICAgICogVGhlIHNlY29uZCBhcmd1bWVudCB0byB0aGUgX19mdXRleF93YWl0KCkgY2FsbCBpcyBjb21wYXJlZAorICAgICAgICAgKiBhZ2FpbnN0IHRoZSBjdXJyZW50IHZhbHVlLiAgSWYgaXQgZG9lc24ndCBtYXRjaCwgX19mdXRleF93YWl0KCkKKyAgICAgICAgICogcmV0dXJucyBpbW1lZGlhdGVseSAob3RoZXJ3aXNlLCBpdCBzbGVlcHMgZm9yIGEgdGltZSBzcGVjaWZpZWQKKyAgICAgICAgICogYnkgdGhlIHRoaXJkIGFyZ3VtZW50OyAwIG1lYW5zIHNsZWVwIGZvcmV2ZXIpLiAgVGhpcyBlbnN1cmVzCisgICAgICAgICAqIHRoYXQgdGhlIG11dGV4IGlzIGluIHN0YXRlIDIgd2hlbiB3ZSBnbyB0byBzbGVlcCBvbiBpdCwgd2hpY2gKKyAgICAgICAgICogZ3VhcmFudGVlcyBhIHdha2UtdXAgY2FsbC4KKyAgICAgICAgICovCisgICAgICAgIHdoaWxlIChfX2F0b21pY19zd2FwKDIsICZtdXRleC0+dmFsdWUgKSAhPSAwKQorICAgICAgICAgICAgX19mdXRleF93YWl0KCZtdXRleC0+dmFsdWUsIDIsIDApOworICAgIH0KK30KKworLyoKKyAqIFJlbGVhc2UgYSBub24tcmVjdXJzaXZlIG11dGV4LiAgVGhlIGNhbGxlciBpcyByZXNwb25zaWJsZSBmb3IgZGV0ZXJtaW5pbmcKKyAqIHRoYXQgd2UgYXJlIGluIGZhY3QgdGhlIG93bmVyIG9mIHRoaXMgbG9jay4KKyAqLworc3RhdGljIF9faW5saW5lX18gdm9pZAorX25vcm1hbF91bmxvY2socHRocmVhZF9tdXRleF90KiAgbXV0ZXgpCit7CisgICAgLyoKKyAgICAgKiBUaGUgbXV0ZXggdmFsdWUgd2lsbCBiZSAxIG9yIChyYXJlbHkpIDIuICBXZSB1c2UgYW4gYXRvbWljIGRlY3JlbWVudAorICAgICAqIHRvIHJlbGVhc2UgdGhlIGxvY2suICBfX2F0b21pY19kZWMoKSByZXR1cm5zIHRoZSBwcmV2aW91cyB2YWx1ZTsKKyAgICAgKiBpZiBpdCB3YXNuJ3QgMSB3ZSBoYXZlIHRvIGRvIHNvbWUgYWRkaXRpb25hbCB3b3JrLgorICAgICAqLworICAgIGlmIChfX2F0b21pY19kZWMoJm11dGV4LT52YWx1ZSkgIT0gMSkgeworICAgICAgICAvKgorICAgICAgICAgKiBTdGFydCBieSByZWxlYXNpbmcgdGhlIGxvY2suICBUaGUgZGVjcmVtZW50IGNoYW5nZWQgaXQgZnJvbQorICAgICAgICAgKiAiY29udGVuZGVkIGxvY2siIHRvICJ1bmNvbnRlbmRlZCBsb2NrIiwgd2hpY2ggbWVhbnMgd2Ugc3RpbGwKKyAgICAgICAgICogaG9sZCBpdCwgYW5kIGFueWJvZHkgd2hvIHRyaWVzIHRvIHNuZWFrIGluIHdpbGwgcHVzaCBpdCBiYWNrCisgICAgICAgICAqIHRvIHN0YXRlIDIuCisgICAgICAgICAqCisgICAgICAgICAqIE9uY2Ugd2Ugc2V0IGl0IHRvIHplcm8gdGhlIGxvY2sgaXMgdXAgZm9yIGdyYWJzLiAgV2UgZm9sbG93CisgICAgICAgICAqIHRoaXMgd2l0aCBhIF9fZnV0ZXhfd2FrZSgpIHRvIGVuc3VyZSB0aGF0IG9uZSBvZiB0aGUgd2FpdGluZworICAgICAgICAgKiB0aHJlYWRzIGhhcyBhIGNoYW5jZSB0byBncmFiIGl0LgorICAgICAgICAgKgorICAgICAgICAgKiBUaGlzIGRvZXNuJ3QgY2F1c2UgYSByYWNlIHdpdGggdGhlIHN3YXAvd2FpdCBwYWlyIGluCisgICAgICAgICAqIF9ub3JtYWxfbG9jaygpLCBiZWNhdXNlIHRoZSBfX2Z1dGV4X3dhaXQoKSBjYWxsIHRoZXJlIHdpbGwKKyAgICAgICAgICogcmV0dXJuIGltbWVkaWF0ZWx5IGlmIHRoZSBtdXRleCB2YWx1ZSBpc24ndCAyLgorICAgICAgICAgKi8KKyAgICAgICAgbXV0ZXgtPnZhbHVlID0gMDsKKworICAgICAgICAvKgorICAgICAgICAgKiBXYWtlIHVwIG9uZSB3YWl0aW5nIHRocmVhZC4gIFdlIGRvbid0IGtub3cgd2hpY2ggdGhyZWFkIHdpbGwgYmUKKyAgICAgICAgICogd29rZW4gb3Igd2hlbiBpdCdsbCBzdGFydCBleGVjdXRpbmcgLS0gZnV0ZXhlcyBtYWtlIG5vIGd1YXJhbnRlZXMKKyAgICAgICAgICogaGVyZS4gIFRoZXJlIG1heSBub3QgZXZlbiBiZSBhIHRocmVhZCB3YWl0aW5nLgorICAgICAgICAgKgorICAgICAgICAgKiBUaGUgbmV3bHktd29rZW4gdGhyZWFkIHdpbGwgcmVwbGFjZSB0aGUgMCB3ZSBqdXN0IHNldCBhYm92ZQorICAgICAgICAgKiB3aXRoIDIsIHdoaWNoIG1lYW5zIHRoYXQgd2hlbiBpdCBldmVudHVhbGx5IHJlbGVhc2VzIHRoZSBtdXRleAorICAgICAgICAgKiBpdCB3aWxsIGFsc28gY2FsbCBGVVRFWF9XQUtFLiAgVGhpcyByZXN1bHRzIGluIG9uZSBleHRyYSB3YWtlCisgICAgICAgICAqIGNhbGwgd2hlbmV2ZXIgYSBsb2NrIGlzIGNvbnRlbmRlZCwgYnV0IGxldHMgdXMgYXZvaWQgZm9yZ2V0dGluZworICAgICAgICAgKiBhbnlvbmUgd2l0aG91dCByZXF1aXJpbmcgdXMgdG8gdHJhY2sgdGhlIG51bWJlciBvZiBzbGVlcGVycy4KKyAgICAgICAgICoKKyAgICAgICAgICogSXQncyBwb3NzaWJsZSBmb3IgYW5vdGhlciB0aHJlYWQgdG8gc25lYWsgaW4gYW5kIGdyYWIgdGhlIGxvY2sKKyAgICAgICAgICogYmV0d2VlbiB0aGUgemVybyBhc3NpZ25tZW50IGFib3ZlIGFuZCB0aGUgd2FrZSBjYWxsIGJlbG93LiAgSWYKKyAgICAgICAgICogdGhlIG5ldyB0aHJlYWQgaXMgInNsb3ciIGFuZCBob2xkcyB0aGUgbG9jayBmb3IgYSB3aGlsZSwgd2UnbGwKKyAgICAgICAgICogd2FrZSB1cCBhIHNsZWVwZXIsIHdoaWNoIHdpbGwgc3dhcCBpbiBhIDIgYW5kIHRoZW4gZ28gYmFjayB0bworICAgICAgICAgKiBzbGVlcCBzaW5jZSB0aGUgbG9jayBpcyBzdGlsbCBoZWxkLiAgSWYgdGhlIG5ldyB0aHJlYWQgaXMgImZhc3QiLAorICAgICAgICAgKiBydW5uaW5nIHRvIGNvbXBsZXRpb24gYmVmb3JlIHdlIGNhbGwgd2FrZSwgdGhlIHRocmVhZCB3ZQorICAgICAgICAgKiBldmVudHVhbGx5IHdha2Ugd2lsbCBmaW5kIGFuIHVubG9ja2VkIG11dGV4IGFuZCB3aWxsIGV4ZWN1dGUuCisgICAgICAgICAqIEVpdGhlciB3YXkgd2UgaGF2ZSBjb3JyZWN0IGJlaGF2aW9yIGFuZCBub2JvZHkgaXMgb3JwaGFuZWQgb24KKyAgICAgICAgICogdGhlIHdhaXQgcXVldWUuCisgICAgICAgICAqLworICAgICAgICBfX2Z1dGV4X3dha2UoJm11dGV4LT52YWx1ZSwgMSk7CisgICAgfQorfQorCitzdGF0aWMgcHRocmVhZF9tdXRleF90ICBfX3JlY3Vyc2l2ZV9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKworc3RhdGljIHZvaWQKK19yZWN1cnNpdmVfbG9jayh2b2lkKQoreworICAgIF9ub3JtYWxfbG9jayggJl9fcmVjdXJzaXZlX2xvY2spOworfQorCitzdGF0aWMgdm9pZAorX3JlY3Vyc2l2ZV91bmxvY2sodm9pZCkKK3sKKyAgICBfbm9ybWFsX3VubG9jayggJl9fcmVjdXJzaXZlX2xvY2sgKTsKK30KKworI2RlZmluZSAgX19saWtlbHkoY29uZCkgICAgX19idWlsdGluX2V4cGVjdCghIShjb25kKSwgMSkKKyNkZWZpbmUgIF9fdW5saWtlbHkoY29uZCkgIF9fYnVpbHRpbl9leHBlY3QoISEoY29uZCksIDApCisKK2ludCBwdGhyZWFkX211dGV4X2xvY2socHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKyAgICBpZiAoX19saWtlbHkobXV0ZXggIT0gTlVMTCkpCisgICAgeworICAgICAgICBpbnQgIG10eXBlID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7CisKKyAgICAgICAgaWYgKCBfX2xpa2VseShtdHlwZSA9PSBNVVRFWF9UWVBFX05PUk1BTCkgKSB7CisgICAgICAgICAgICBfbm9ybWFsX2xvY2sobXV0ZXgpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgeworICAgICAgICAgICAgaW50ICB0aWQgPSBfX2dldF90aHJlYWQoKS0+a2VybmVsX2lkOworCisgICAgICAgICAgICBpZiAoIHRpZCA9PSBNVVRFWF9PV05FUihtdXRleCkgKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGludCAgb2xkdiwgY291bnRlcjsKKworICAgICAgICAgICAgICAgIGlmIChtdHlwZSA9PSBNVVRFWF9UWVBFX0VSUk9SQ0hFQ0spIHsKKyAgICAgICAgICAgICAgICAgICAgLyogdHJ5aW5nIHRvIHJlLWxvY2sgYSBtdXRleCB3ZSBhbHJlYWR5IGFjcXVpcmVkICovCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBFREVBRExLOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFdlIG93biB0aGUgbXV0ZXgsIGJ1dCBvdGhlciB0aHJlYWRzIGFyZSBhYmxlIHRvIGNoYW5nZQorICAgICAgICAgICAgICAgICAqIHRoZSBjb250ZW50cyAoZS5nLiBwcm9tb3RpbmcgaXQgdG8gImNvbnRlbmRlZCIpLCBzbyB3ZQorICAgICAgICAgICAgICAgICAqIG5lZWQgdG8gaG9sZCB0aGUgZ2xvYmFsIGxvY2suCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV9sb2NrKCk7CisgICAgICAgICAgICAgICAgb2xkdiAgICAgICAgID0gbXV0ZXgtPnZhbHVlOworICAgICAgICAgICAgICAgIGNvdW50ZXIgICAgICA9IChvbGR2ICsgKDEgPDwgTVVURVhfQ09VTlRFUl9TSElGVCkpICYgTVVURVhfQ09VTlRFUl9NQVNLOworICAgICAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IChvbGR2ICYgfk1VVEVYX0NPVU5URVJfTUFTSykgfCBjb3VudGVyOworICAgICAgICAgICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgKiBJZiB0aGUgbmV3IGxvY2sgaXMgYXZhaWxhYmxlIGltbWVkaWF0ZWx5LCB3ZSBncmFiIGl0IGluCisgICAgICAgICAgICAgICAgICogdGhlICJ1bmNvbnRlbmRlZCIgc3RhdGUuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgaW50IG5ld19sb2NrX3R5cGUgPSAxOworCisgICAgICAgICAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgICAgICAgICBpbnQgIG9sZHY7CisKKyAgICAgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV9sb2NrKCk7CisgICAgICAgICAgICAgICAgICAgIG9sZHYgPSBtdXRleC0+dmFsdWU7CisgICAgICAgICAgICAgICAgICAgIGlmIChvbGR2ID09IG10eXBlKSB7IC8qIHVuY29udGVuZGVkIHJlbGVhc2VkIGxvY2sgPT4gMSBvciAyICovCisgICAgICAgICAgICAgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSAoKHRpZCA8PCAxNikgfCBtdHlwZSB8IG5ld19sb2NrX3R5cGUpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChvbGR2ICYgMykgPT0gMSkgeyAvKiBsb2NrZWQgc3RhdGUgMSA9PiBzdGF0ZSAyICovCisgICAgICAgICAgICAgICAgICAgICAgICBvbGR2IF49IDM7CisgICAgICAgICAgICAgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSBvbGR2OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKG9sZHYgPT0gbXR5cGUpCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAgICAgKiBUaGUgbG9jayB3YXMgaGVsZCwgcG9zc2libHkgY29udGVuZGVkIGJ5IG90aGVycy4gIEZyb20KKyAgICAgICAgICAgICAgICAgICAgICogbm93IG9uLCBpZiB3ZSBtYW5hZ2UgdG8gYWNxdWlyZSB0aGUgbG9jaywgd2UgaGF2ZSB0bworICAgICAgICAgICAgICAgICAgICAgKiBhc3N1bWUgdGhhdCBvdGhlcnMgYXJlIHN0aWxsIGNvbnRlbmRpbmcgZm9yIGl0IHNvIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgICogd2UnbGwgd2FrZSB0aGVtIHdoZW4gd2UgdW5sb2NrIGl0LgorICAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgbmV3X2xvY2tfdHlwZSA9IDI7CisKKyAgICAgICAgICAgICAgICAgICAgX19mdXRleF93YWl0KCAmbXV0ZXgtPnZhbHVlLCBvbGR2LCAwICk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gRUlOVkFMOworfQorCisKK2ludCBwdGhyZWFkX211dGV4X3VubG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIGlmIChfX2xpa2VseShtdXRleCAhPSBOVUxMKSkKKyAgICB7CisgICAgICAgIGludCAgbXR5cGUgPSAobXV0ZXgtPnZhbHVlICYgTVVURVhfVFlQRV9NQVNLKTsKKworICAgICAgICBpZiAoX19saWtlbHkobXR5cGUgPT0gTVVURVhfVFlQRV9OT1JNQUwpKSB7CisgICAgICAgICAgICBfbm9ybWFsX3VubG9jayhtdXRleCk7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgIHRpZCA9IF9fZ2V0X3RocmVhZCgpLT5rZXJuZWxfaWQ7CisKKyAgICAgICAgICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSKG11dGV4KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50ICBvbGR2OworCisgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV9sb2NrKCk7CisgICAgICAgICAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgICAgICBpZiAob2xkdiAmIE1VVEVYX0NPVU5URVJfTUFTSykgeworICAgICAgICAgICAgICAgICAgICBtdXRleC0+dmFsdWUgPSBvbGR2IC0gKDEgPDwgTVVURVhfQ09VTlRFUl9TSElGVCk7CisgICAgICAgICAgICAgICAgICAgIG9sZHYgPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIG11dGV4LT52YWx1ZSA9IG10eXBlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBfcmVjdXJzaXZlX3VubG9jaygpOworCisgICAgICAgICAgICAgICAgaWYgKChvbGR2ICYgMykgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgX19mdXRleF93YWtlKCAmbXV0ZXgtPnZhbHVlLCAxICk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvKiB0cnlpbmcgdG8gdW5sb2NrIGEgbG9jayB3ZSBkbyBub3Qgb3duICovCisgICAgICAgICAgICAgICAgcmV0dXJuIEVQRVJNOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICByZXR1cm4gRUlOVkFMOworfQorCisKK2ludCBwdGhyZWFkX211dGV4X3RyeWxvY2socHRocmVhZF9tdXRleF90ICptdXRleCkKK3sKKyAgICBpZiAoX19saWtlbHkobXV0ZXggIT0gTlVMTCkpCisgICAgeworICAgICAgICBpbnQgIG10eXBlID0gKG11dGV4LT52YWx1ZSAmIE1VVEVYX1RZUEVfTUFTSyk7CisKKyAgICAgICAgaWYgKCBfX2xpa2VseShtdHlwZSA9PSBNVVRFWF9UWVBFX05PUk1BTCkgKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoX19hdG9taWNfY21weGNoZygwLCAxLCAmbXV0ZXgtPnZhbHVlKSA9PSAwKQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICByZXR1cm4gRUJVU1k7CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICB7CisgICAgICAgICAgICBpbnQgIHRpZCA9IF9fZ2V0X3RocmVhZCgpLT5rZXJuZWxfaWQ7CisgICAgICAgICAgICBpbnQgIG9sZHY7CisKKyAgICAgICAgICAgIGlmICggdGlkID09IE1VVEVYX09XTkVSKG11dGV4KSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaW50ICBvbGR2LCBjb3VudGVyOworCisgICAgICAgICAgICAgICAgaWYgKG10eXBlID09IE1VVEVYX1RZUEVfRVJST1JDSEVDSykgeworICAgICAgICAgICAgICAgICAgICAvKiBhbHJlYWR5IGxvY2tlZCBieSBvdXJzZWx2ZXMgKi8KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEVERUFETEs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV9sb2NrKCk7CisgICAgICAgICAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgICAgICBjb3VudGVyID0gKG9sZHYgKyAoMSA8PCBNVVRFWF9DT1VOVEVSX1NISUZUKSkgJiBNVVRFWF9DT1VOVEVSX01BU0s7CisgICAgICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gKG9sZHYgJiB+TVVURVhfQ09VTlRFUl9NQVNLKSB8IGNvdW50ZXI7CisgICAgICAgICAgICAgICAgX3JlY3Vyc2l2ZV91bmxvY2soKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogdHJ5IHRvIGxvY2sgaXQgKi8KKyAgICAgICAgICAgIF9yZWN1cnNpdmVfbG9jaygpOworICAgICAgICAgICAgb2xkdiA9IG11dGV4LT52YWx1ZTsKKyAgICAgICAgICAgIGlmIChvbGR2ID09IG10eXBlKSAgLyogdW5jb250ZW5kZWQgcmVsZWFzZWQgbG9jayA9PiBzdGF0ZSAxICovCisgICAgICAgICAgICAgICAgbXV0ZXgtPnZhbHVlID0gKCh0aWQgPDwgMTYpIHwgbXR5cGUgfCAxKTsKKyAgICAgICAgICAgIF9yZWN1cnNpdmVfdW5sb2NrKCk7CisKKyAgICAgICAgICAgIGlmIChvbGR2ICE9IG10eXBlKQorICAgICAgICAgICAgICAgIHJldHVybiBFQlVTWTsKKworICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIEVJTlZBTDsKK30KKworCisvKiBYWFggKnRlY2huaWNhbGx5KiB0aGVyZSBpcyBhIHJhY2UgY29uZGl0aW9uIHRoYXQgY291bGQgYWxsb3cKKyAqIFhYWCBhIHNpZ25hbCB0byBiZSBtaXNzZWQuICBJZiB0aHJlYWQgQSBpcyBwcmVlbXB0ZWQgaW4gX3dhaXQoKQorICogWFhYIGFmdGVyIHVubG9ja2luZyB0aGUgbXV0ZXggYW5kIGJlZm9yZSB3YWl0aW5nLCBhbmQgaWYgb3RoZXIKKyAqIFhYWCB0aHJlYWRzIGNhbGwgc2lnbmFsIG9yIGJyb2FkY2FzdCBVSU5UX01BWCB0aW1lcyAoZXhhY3RseSksCisgKiBYWFggYmVmb3JlIHRocmVhZCBBIGlzIHNjaGVkdWxlZCBhZ2FpbiBhbmQgY2FsbHMgZnV0ZXhfd2FpdCgpLAorICogWFhYIHRoZW4gdGhlIHNpZ25hbCB3aWxsIGJlIGxvc3QuCisgKi8KKworaW50IHB0aHJlYWRfY29uZF9pbml0KHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqYXR0cikKK3sKKyAgICBjb25kLT52YWx1ZSA9IDA7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRfZGVzdHJveShwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKyAgICBjb25kLT52YWx1ZSA9IDB4ZGVhZGMwNGQ7CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICpjb25kKQoreworICAgIF9fYXRvbWljX2RlYygmY29uZC0+dmFsdWUpOworICAgIF9fZnV0ZXhfd2FrZSgmY29uZC0+dmFsdWUsIElOVF9NQVgpOworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jb25kX3NpZ25hbChwdGhyZWFkX2NvbmRfdCAqY29uZCkKK3sKKyAgICBfX2F0b21pY19kZWMoJmNvbmQtPnZhbHVlKTsKKyAgICBfX2Z1dGV4X3dha2UoJmNvbmQtPnZhbHVlLCAxKTsKKyAgICByZXR1cm4gMDsKK30KKworaW50IHB0aHJlYWRfY29uZF93YWl0KHB0aHJlYWRfY29uZF90ICpjb25kLCBwdGhyZWFkX211dGV4X3QgKm11dGV4KQoreworICAgIHJldHVybiBwdGhyZWFkX2NvbmRfdGltZWR3YWl0KGNvbmQsIG11dGV4LCBOVUxMKTsKK30KKworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXQocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgKiBtdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKK3sKKyAgICBpbnQgb2xkdmFsdWU7CisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIHN0cnVjdCB0aW1lc3BlYyAqIHRzcDsKKyAgICBpbnQgc3RhdHVzOworCisgICAgaWYgKGFic3RpbWUgIT0gTlVMTCkgeworICAgICAgICBjbG9ja19nZXR0aW1lKENMT0NLX1JFQUxUSU1FLCAmdHMpOworICAgICAgICB0cy50dl9zZWMgPSBhYnN0aW1lLT50dl9zZWMgLSB0cy50dl9zZWM7CisgICAgICAgIHRzLnR2X25zZWMgPSBhYnN0aW1lLT50dl9uc2VjIC0gdHMudHZfbnNlYzsKKyAgICAgICAgaWYgKHRzLnR2X25zZWMgPCAwKSB7CisgICAgICAgICAgICB0cy50dl9zZWMtLTsKKyAgICAgICAgICAgIHRzLnR2X25zZWMgKz0gMTAwMDAwMDAwMDsKKyAgICAgICAgfQorICAgICAgICBpZigodHMudHZfbnNlYyA8IDApIHx8ICh0cy50dl9zZWMgPCAwKSkgeworICAgICAgICAgICAgcmV0dXJuIEVUSU1FRE9VVDsKKyAgICAgICAgfQorICAgICAgICB0c3AgPSAmdHM7CisgICAgfSBlbHNlIHsKKyAgICAgICAgdHNwID0gTlVMTDsKKyAgICB9CisKKyAgICBvbGR2YWx1ZSA9IGNvbmQtPnZhbHVlOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworICAgIHN0YXR1cyA9IF9fZnV0ZXhfd2FpdCgmY29uZC0+dmFsdWUsIG9sZHZhbHVlLCB0c3ApOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCk7CisKKyAgICBpZihzdGF0dXMgPT0gKC1FVElNRURPVVQpKSByZXR1cm4gRVRJTUVET1VUOworCisgICAgcmV0dXJuIDA7Cit9CisKKworaW50IHB0aHJlYWRfY29uZF90aW1lZHdhaXRfbW9ub3RvbmljKHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqYWJzdGltZSkKK3sKKyAgICBpbnQgb2xkdmFsdWU7CisgICAgc3RydWN0IHRpbWVzcGVjIHRzOworICAgIHN0cnVjdCB0aW1lc3BlYyAqIHRzcDsKKyAgICBpbnQgc3RhdHVzOworCisgICAgaWYgKGFic3RpbWUgIT0gTlVMTCkgeworICAgICAgICBjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQywgJnRzKTsKKyAgICAgICAgdHMudHZfc2VjID0gYWJzdGltZS0+dHZfc2VjIC0gdHMudHZfc2VjOworICAgICAgICB0cy50dl9uc2VjID0gYWJzdGltZS0+dHZfbnNlYyAtIHRzLnR2X25zZWM7CisgICAgICAgIGlmICh0cy50dl9uc2VjIDwgMCkgeworICAgICAgICAgICAgdHMudHZfc2VjLS07CisgICAgICAgICAgICB0cy50dl9uc2VjICs9IDEwMDAwMDAwMDA7CisgICAgICAgIH0KKyAgICAgICAgaWYoKHRzLnR2X25zZWMgPCAwKSB8fCAodHMudHZfc2VjIDwgMCkpIHsKKyAgICAgICAgICAgIHJldHVybiBFVElNRURPVVQ7CisgICAgICAgIH0KKyAgICAgICAgdHNwID0gJnRzOworICAgIH0gZWxzZSB7CisgICAgICAgIHRzcCA9IE5VTEw7CisgICAgfQorCisgICAgb2xkdmFsdWUgPSBjb25kLT52YWx1ZTsKKworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKG11dGV4KTsKKyAgICBzdGF0dXMgPSBfX2Z1dGV4X3dhaXQoJmNvbmQtPnZhbHVlLCBvbGR2YWx1ZSwgdHNwKTsKKyAgICBwdGhyZWFkX211dGV4X2xvY2sobXV0ZXgpOworCisgICAgaWYoc3RhdHVzID09ICgtRVRJTUVET1VUKSkgcmV0dXJuIEVUSU1FRE9VVDsKKworICAgIHJldHVybiAwOworfQorCitpbnQgcHRocmVhZF9jb25kX3RpbWVvdXRfbnAocHRocmVhZF9jb25kX3QgKmNvbmQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICogbXV0ZXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbXNlY3MpCit7CisgICAgaW50IG9sZHZhbHVlOworICAgIHN0cnVjdCB0aW1lc3BlYyB0czsKKyAgICBpbnQgc3RhdHVzOworCisgICAgdHMudHZfc2VjID0gbXNlY3MgLyAxMDAwOworICAgIHRzLnR2X25zZWMgPSAobXNlY3MgJSAxMDAwKSAqIDEwMDAwMDA7CisKKyAgICBvbGR2YWx1ZSA9IGNvbmQtPnZhbHVlOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2sobXV0ZXgpOworICAgIHN0YXR1cyA9IF9fZnV0ZXhfd2FpdCgmY29uZC0+dmFsdWUsIG9sZHZhbHVlLCAmdHMpOworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayhtdXRleCk7CisKKyAgICBpZihzdGF0dXMgPT0gKC1FVElNRURPVVQpKSByZXR1cm4gRVRJTUVET1VUOworCisgICAgcmV0dXJuIDA7Cit9CisKKworCisvKiBBIHRlY2huaWNhbCBub3RlIHJlZ2FyZGluZyBvdXIgdGhyZWFkLWxvY2FsLXN0b3JhZ2UgKFRMUykgaW1wbGVtZW50YXRpb246CisgKgorICogVGhlcmUgY2FuIGJlIHVwIHRvIFRMU01BUF9TSVpFIGluZGVwZW5kZW50IFRMUyBrZXlzIGluIGEgZ2l2ZW4gcHJvY2VzcywKKyAqIHRob3VnaCB0aGUgZmlyc3QgVExTTUFQX1NUQVJUIGtleXMgYXJlIHJlc2VydmVkIGZvciBCaW9uaWMgdG8gaG9sZAorICogc3BlY2lhbCB0aHJlYWQtc3BlY2lmaWMgdmFyaWFibGVzIGxpa2UgZXJybm8gb3IgYSBwb2ludGVyIHRvCisgKiB0aGUgY3VycmVudCB0aHJlYWQncyBkZXNjcmlwdG9yLgorICoKKyAqIHdoaWxlIHN0b3JlZCBpbiB0aGUgVExTIGFyZWEsIHRoZXNlIGVudHJpZXMgY2Fubm90IGJlIGFjY2Vzc2VkIHRocm91Z2gKKyAqIHB0aHJlYWRfZ2V0c3BlY2lmaWMoKSAvIHB0aHJlYWRfc2V0c3BlY2lmaWMoKSBhbmQgcHRocmVhZF9rZXlfZGVsZXRlKCkKKyAqCisgKiBhbHNvLCBzb21lIGVudHJpZXMgaW4gdGhlIGtleSB0YWJsZSBhcmUgcHJlLWFsbG9jYXRlZCAoc2VlIHRsc21hcF9sb2NrKQorICogdG8gZ3JlYXRseSBzaW1wbGlmeSBhbmQgc3BlZWR1cCBzb21lIE9wZW5HTC1yZWxhdGVkIG9wZXJhdGlvbnMuIHRob3VnaCB0aGUKKyAqIGluaXRpYWx5IHZhbHVlIHdpbGwgYmUgTlVMTCBvbiBhbGwgdGhyZWFkcy4KKyAqCisgKiB5b3UgY2FuIHVzZSBwdGhyZWFkX2dldHNwZWNpZmljKCkvc2V0c3BlY2lmaWMoKSBvbiB0aGVzZSwgYW5kIGluIHRoZW9yeQorICogeW91IGNvdWxkIGFsc28gY2FsbCBwdGhyZWFkX2tleV9kZWxldGUoKSBhcyB3ZWxsLCB0aG91Z2ggdGhpcyB3b3VsZAorICogcHJvYmFibHkgYnJlYWsgc29tZSBhcHBzLgorICoKKyAqIFRoZSAndGxzbWFwX3QnIHR5cGUgZGVmaW5lZCBiZWxvdyBpbXBsZW1lbnRzIGEgc2hhcmVkIGdsb2JhbCBtYXAgb2YKKyAqIGN1cnJlbnRseSBjcmVhdGVkL2FsbG9jYXRlZCBUTFMga2V5cyBhbmQgdGhlIGRlc3RydWN0b3JzIGFzc29jaWF0ZWQKKyAqIHdpdGggdGhlbS4gWW91IHNob3VsZCB1c2UgdGxzbWFwX2xvY2svdW5sb2NrIHRvIGFjY2VzcyBpdCB0byBhdm9pZAorICogYW55IHJhY2UgY29uZGl0aW9uLgorICoKKyAqIHRoZSBnbG9iYWwgVExTIG1hcCBzaW1wbHkgY29udGFpbnMgYSBiaXRtYXAgb2YgYWxsb2NhdGVkIGtleXMsIGFuZAorICogYW4gYXJyYXkgb2YgZGVzdHJ1Y3RvcnMuCisgKgorICogZWFjaCB0aHJlYWQgaGFzIGEgVExTIGFyZWEgdGhhdCBpcyBhIHNpbXBsZSBhcnJheSBvZiBUTFNNQVBfU0laRSB2b2lkKgorICogcG9pbnRlcnMuIHRoZSBUTFMgYXJlYSBvZiB0aGUgbWFpbiB0aHJlYWQgaXMgc3RhY2stYWxsb2NhdGVkIGluCisgKiBfX2xpYmNfaW5pdF9jb21tb24sIHdoaWxlIHRoZSBUTFMgYXJlYSBvZiBvdGhlciB0aHJlYWRzIGlzIHBsYWNlZCBhdAorICogdGhlIHRvcCBvZiB0aGVpciBzdGFjayBpbiBwdGhyZWFkX2NyZWF0ZS4KKyAqCisgKiB3aGVuIHB0aHJlYWRfa2V5X2NyZWF0ZSgpIGlzIGNhbGxlZCwgaXQgZmluZHMgdGhlIGZpcnN0IGZyZWUga2V5IGluIHRoZQorICogYml0bWFwLCB0aGVuIHNldCBpdCB0byAxLCBzYXZpbmcgdGhlIGRlc3RydWN0b3IgYWx0b2dldGhlcgorICoKKyAqIHdoZW4gcHRocmVhZF9rZXlfZGVsZXRlKCkgaXMgY2FsbGVkLiBpdCB3aWxsIGVyYXNlIHRoZSBrZXkncyBiaXRtYXAgYml0CisgKiBhbmQgaXRzIGRlc3RydWN0b3IsIGFuZCB3aWxsIGFsc28gY2xlYXIgdGhlIGtleSBkYXRhIGluIHRoZSBUTFMgYXJlYSBvZgorICogYWxsIGNyZWF0ZWQgdGhyZWFkcy4gQXMgbWFuZGF0ZWQgYnkgUG9zaXgsIGl0IGlzIHRoZSByZXNwb25zYWJpbGl0eSBvZgorICogdGhlIGNhbGxlciBvZiBwdGhyZWFkX2tleV9kZWxldGUoKSB0byBwcm9wZXJseSByZWNsYWltIHRoZSBvYmplY3RzIHRoYXQKKyAqIHdlcmUgcG9pbnRlZCB0byBieSB0aGVzZSBkYXRhIGZpZWxkcyAoZWl0aGVyIGJlZm9yZSBvciBhZnRlciB0aGUgY2FsbCkuCisgKgorICovCisKKy8qIFRMUyBNYXAgaW1wbGVtZW50YXRpb24KKyAqLworCisjZGVmaW5lIFRMU01BUF9TVEFSVCAgICAgIChUTFNfU0xPVF9NQVhfV0VMTF9LTk9XTisxKQorI2RlZmluZSBUTFNNQVBfU0laRSAgICAgICBCSU9OSUNfVExTX1NMT1RTCisjZGVmaW5lIFRMU01BUF9CSVRTICAgICAgIDMyCisjZGVmaW5lIFRMU01BUF9XT1JEUyAgICAgICgoVExTTUFQX1NJWkUrVExTTUFQX0JJVFMtMSkvVExTTUFQX0JJVFMpCisjZGVmaW5lIFRMU01BUF9XT1JEKG0saykgIChtKS0+bWFwWyhrKS9UTFNNQVBfQklUU10KKyNkZWZpbmUgVExTTUFQX01BU0soaykgICAgKDFVIDw8ICgoaykmKFRMU01BUF9CSVRTLTEpKSkKKworLyogdGhpcyBtYWNybyBpcyB1c2VkIHRvIHF1aWNrbHkgY2hlY2sgdGhhdCBhIGtleSBiZWxvbmdzIHRvIGEgcmVhc29uYWJsZSByYW5nZSAqLworI2RlZmluZSBUTFNNQVBfVkFMSURBVEVfS0VZKGtleSkgIFwKKyAgICAoKGtleSkgPj0gVExTTUFQX1NUQVJUICYmIChrZXkpIDwgVExTTUFQX1NJWkUpCisKKy8qIHRoZSB0eXBlIG9mIHRscyBrZXkgZGVzdHJ1Y3RvciBmdW5jdGlvbnMgKi8KK3R5cGVkZWYgdm9pZCAoKnRsc19kdG9yX3QpKHZvaWQqKTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIGludCAgICAgICAgIGluaXQ7ICAgICAgICAgICAgICAgICAgLyogc2VlIGNvbW1lbnQgaW4gdGxzbWFwX2xvY2soKSAqLworICAgIHVpbnQzMl90ICAgIG1hcFtUTFNNQVBfV09SRFNdOyAgICAgLyogYml0bWFwIG9mIGFsbG9jYXRlZCBrZXlzICovCisgICAgdGxzX2R0b3JfdCAgZHRvcnNbVExTTUFQX1NJWkVdOyAgICAvKiBrZXkgZGVzdHJ1Y3RvcnMgKi8KK30gdGxzbWFwX3Q7CisKK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgIF90bHNtYXBfbG9jayA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CitzdGF0aWMgdGxzbWFwX3QgICAgICAgICBfdGxzbWFwOworCisvKiBsb2NrIHRoZSBnbG9iYWwgVExTIG1hcCBsb2NrIGFuZCByZXR1cm4gYSBoYW5kbGUgdG8gaXQgKi8KK3N0YXRpYyBfX2lubGluZV9fIHRsc21hcF90KiB0bHNtYXBfbG9jayh2b2lkKQoreworICAgIHRsc21hcF90KiAgIG0gPSAmX3Rsc21hcDsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jaygmX3Rsc21hcF9sb2NrKTsKKyAgICAvKiB3ZSBuZWVkIHRvIGluaXRpYWxpemUgdGhlIGZpcnN0IGVudHJ5IG9mIHRoZSAnbWFwJyBhcnJheQorICAgICAqIHdpdGggdGhlIHZhbHVlIFRMU19ERUZBVUxUX0FMTE9DX01BUC4gZG9pbmcgaXQgc3RhdGljYWxseQorICAgICAqIHdoZW4gZGVjbGFyaW5nIF90bHNtYXAgaXMgYSBiaXQgYXdrd2FyZCBhbmQgaXMgZ29pbmcgdG8KKyAgICAgKiBwcm9kdWNlIHdhcm5pbmdzLCBzbyBkbyBpdCB0aGUgZmlyc3QgdGltZSB3ZSB1c2UgdGhlIG1hcAorICAgICAqIGluc3RlYWQKKyAgICAgKi8KKyAgICBpZiAoX191bmxpa2VseSghbS0+aW5pdCkpIHsKKyAgICAgICAgVExTTUFQX1dPUkQobSwwKSA9IFRMU19ERUZBVUxUX0FMTE9DX01BUDsKKyAgICAgICAgbS0+aW5pdCAgICAgICAgICA9IDE7CisgICAgfQorICAgIHJldHVybiBtOworfQorCisvKiB1bmxvY2sgdGhlIGdsb2JhbCBUTFMgbWFwICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRsc21hcF91bmxvY2sodGxzbWFwX3QqICBtKQoreworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfdGxzbWFwX2xvY2spOworICAgICh2b2lkKW07ICAvKiBhIGdvb2QgY29tcGlsZXIgaXMgYSBoYXBweSBjb21waWxlciAqLworfQorCisvKiB0ZXN0IHRvIHNlZSB3ZXRoZXIgYSBrZXkgaXMgYWxsb2NhdGVkICovCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGxzbWFwX3Rlc3QodGxzbWFwX3QqICBtLCBpbnQgIGtleSkKK3sKKyAgICByZXR1cm4gKFRMU01BUF9XT1JEKG0sa2V5KSAmIFRMU01BUF9NQVNLKGtleSkpICE9IDA7Cit9CisKKy8qIHNldCB0aGUgZGVzdHJ1Y3RvciBhbmQgYml0IGZsYWcgb24gYSBuZXdseSBhbGxvY2F0ZWQga2V5ICovCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHRsc21hcF9zZXQodGxzbWFwX3QqICBtLCBpbnQgIGtleSwgdGxzX2R0b3JfdCAgZHRvcikKK3sKKyAgICBUTFNNQVBfV09SRChtLGtleSkgfD0gVExTTUFQX01BU0soa2V5KTsKKyAgICBtLT5kdG9yc1trZXldICAgICAgID0gZHRvcjsKK30KKworLyogY2xlYXIgdGhlIGRlc3RydWN0b3IgYW5kIGJpdCBmbGFnIG9uIGFuIGV4aXN0aW5nIGtleSAqLworc3RhdGljIF9faW5saW5lX18gdm9pZCAgdGxzbWFwX2NsZWFyKHRsc21hcF90KiAgbSwgaW50ICBrZXkpCit7CisgICAgVExTTUFQX1dPUkQobSxrZXkpICY9IH5UTFNNQVBfTUFTSyhrZXkpOworICAgIG0tPmR0b3JzW2tleV0gICAgICAgPSBOVUxMOworfQorCisvKiBhbGxvY2F0ZSBhIG5ldyBUTFMga2V5LCByZXR1cm4gLTEgaWYgbm8gcm9vbSBsZWZ0ICovCitzdGF0aWMgaW50IHRsc21hcF9hbGxvYyh0bHNtYXBfdCogIG0sIHRsc19kdG9yX3QgIGR0b3IpCit7CisgICAgaW50ICBrZXk7CisKKyAgICBmb3IgKCBrZXkgPSBUTFNNQVBfU1RBUlQ7IGtleSA8IFRMU01BUF9TSVpFOyBrZXkrKyApIHsKKyAgICAgICAgaWYgKCAhdGxzbWFwX3Rlc3QobSwga2V5KSApIHsKKyAgICAgICAgICAgIHRsc21hcF9zZXQobSwga2V5LCBkdG9yKTsKKyAgICAgICAgICAgIHJldHVybiBrZXk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIC0xOworfQorCisKK2ludCBwdGhyZWFkX2tleV9jcmVhdGUocHRocmVhZF9rZXlfdCAqa2V5LCB2b2lkICgqZGVzdHJ1Y3Rvcl9mdW5jdGlvbikodm9pZCAqKSkKK3sKKyAgICB1aW50MzJfdCAgIGVyciA9IEVOT01FTTsKKyAgICB0bHNtYXBfdCogIG1hcCA9IHRsc21hcF9sb2NrKCk7CisgICAgaW50ICAgICAgICBrICAgPSB0bHNtYXBfYWxsb2MobWFwLCBkZXN0cnVjdG9yX2Z1bmN0aW9uKTsKKworICAgIGlmIChrID49IDApIHsKKyAgICAgICAgKmtleSA9IGs7CisgICAgICAgIGVyciAgPSAwOworICAgIH0KKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgcmV0dXJuIGVycjsKK30KKworCisvKiBUaGlzIGRlbGV0ZXMgYSBwdGhyZWFkX2tleV90LiBub3RlIHRoYXQgdGhlIHN0YW5kYXJkIG1hbmRhdGVzIHRoYXQgdGhpcyBkb2VzCisgKiBub3QgY2FsbCB0aGUgZGVzdHJ1Y3RvciBvZiBub24tTlVMTCBrZXkgdmFsdWVzLiBJbnN0ZWFkLCBpdCBpcyB0aGUKKyAqIHJlc3BvbnNhYmlsaXR5IG9mIHRoZSBjYWxsZXIgdG8gcHJvcGVybHkgZGlzcG9zZSBvZiB0aGUgY29ycmVzcG9uZGluZyBkYXRhCisgKiBhbmQgcmVzb3VyY2VzLCB1c2luZyBhbnkgbWVhbiBpdCBmaW5kcyBzdWl0YWJsZS4KKyAqCisgKiBPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBmdW5jdGlvbiB3aWxsIGNsZWFyIHRoZSBjb3JyZXNwb25kaW5nIGtleSBkYXRhCisgKiB2YWx1ZXMgaW4gYWxsIGtub3duIHRocmVhZHMuIHRoaXMgcHJldmVudHMgbGF0ZXIgKGludmFsaWQpIGNhbGxzIHRvCisgKiBwdGhyZWFkX2dldHNwZWNpZmljKCkgdG8gcmVjZWl2ZSBpbnZhbGlkL3N0YWxlIHZhbHVlcy4KKyAqLworaW50IHB0aHJlYWRfa2V5X2RlbGV0ZShwdGhyZWFkX2tleV90IGtleSkKK3sKKyAgICB1aW50MzJfdCAgICAgICAgICAgICBlcnI7CisgICAgcHRocmVhZF9pbnRlcm5hbF90KiAgdGhyOworICAgIHRsc21hcF90KiAgICAgICAgICAgIG1hcDsKKworICAgIGlmICghVExTTUFQX1ZBTElEQVRFX0tFWShrZXkpKSB7CisgICAgICAgIHJldHVybiBFSU5WQUw7CisgICAgfQorCisgICAgbWFwID0gdGxzbWFwX2xvY2soKTsKKworICAgIGlmICghdGxzbWFwX3Rlc3QobWFwLCBrZXkpKSB7CisgICAgICAgIGVyciA9IEVJTlZBTDsKKyAgICAgICAgZ290byBlcnIxOworICAgIH0KKworICAgIC8qIGNsZWFyIHZhbHVlIGluIGFsbCB0aHJlYWRzICovCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCZnVGhyZWFkTGlzdExvY2spOworICAgIGZvciAoIHRociA9IGdUaHJlYWRMaXN0OyB0aHIgIT0gTlVMTDsgdGhyID0gdGhyLT5uZXh0ICkgeworICAgICAgICAvKiBhdm9pZCB6b21iaWUgdGhyZWFkcyB3aXRoIGEgbmVnYXRpdmUgJ2pvaW5fY291bnQnLiB0aGVzZSBhcmUgcmVhbGx5CisgICAgICAgICAqIGFscmVhZHkgZGVhZCBhbmQgZG9uJ3QgaGF2ZSBhIFRMUyBhcmVhIGFueW1vcmUuCisgICAgICAgICAqCisgICAgICAgICAqIHNpbWlsYXJseSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZSB0aHItPnRscyA9PSBOVUxMIGZvciB0aHJlYWRzIHRoYXQKKyAgICAgICAgICogd2VyZSBqdXN0IHJlY2VudGx5IGNyZWF0ZWQgdGhyb3VnaCBwdGhyZWFkX2NyZWF0ZSgpIGJ1dCB3aG9zZQorICAgICAgICAgKiBzdGFydHVwIHRyYW1wb2xpbmUgKF9fdGhyZWFkX2VudHJ5KSBoYXNuJ3QgYmVlbiBydW4geWV0IGJ5IHRoZQorICAgICAgICAgKiBzY2hlZHVsZXIuIHNvIGNoZWNrIGZvciB0aGlzIHRvby4KKyAgICAgICAgICovCisgICAgICAgIGlmICh0aHItPmpvaW5fY291bnQgPCAwIHx8ICF0aHItPnRscykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIHRoci0+dGxzW2tleV0gPSBOVUxMOworICAgIH0KKyAgICB0bHNtYXBfY2xlYXIobWFwLCBrZXkpOworCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soJmdUaHJlYWRMaXN0TG9jayk7CisgICAgZXJyID0gMDsKKworZXJyMToKKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgcmV0dXJuIGVycjsKK30KKworCitpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyhwdGhyZWFkX2tleV90IGtleSwgY29uc3Qgdm9pZCAqcHRyKQoreworICAgIGludCAgICAgICAgZXJyID0gRUlOVkFMOworICAgIHRsc21hcF90KiAgbWFwOworCisgICAgaWYgKFRMU01BUF9WQUxJREFURV9LRVkoa2V5KSkgeworICAgICAgICAvKiBjaGVjayB0aGF0IHdlJ3JlIHRyeWluZyB0byBzZXQgZGF0YSBmb3IgYW4gYWxsb2NhdGVkIGtleSAqLworICAgICAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworICAgICAgICBpZiAodGxzbWFwX3Rlc3QobWFwLCBrZXkpKSB7CisgICAgICAgICAgICAoKHVpbnQzMl90ICopX19nZXRfdGxzKCkpW2tleV0gPSAodWludDMyX3QpcHRyOworICAgICAgICAgICAgZXJyID0gMDsKKyAgICAgICAgfQorICAgICAgICB0bHNtYXBfdW5sb2NrKG1hcCk7CisgICAgfQorICAgIHJldHVybiBlcnI7Cit9CisKK3ZvaWQgKiBwdGhyZWFkX2dldHNwZWNpZmljKHB0aHJlYWRfa2V5X3Qga2V5KQoreworICAgIGlmICghVExTTUFQX1ZBTElEQVRFX0tFWShrZXkpKSB7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIC8qIGZvciBwZXJmb3JtYW5jZSByZWFzb24sIHdlIGRvIG5vdCBsb2NrL3VubG9jayB0aGUgZ2xvYmFsIFRMUyBtYXAKKyAgICAgKiB0byBjaGVjayB0aGF0IHRoZSBrZXkgaXMgcHJvcGVybHkgYWxsb2NhdGVkLiBpZiB0aGUga2V5IHdhcyBub3QKKyAgICAgKiBhbGxvY2F0ZWQsIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhlIFRMUyBzaG91bGQgYWx3YXlzIGJlIE5VTEwKKyAgICAgKiBkdWUgdG8gcHRocmVhZF9rZXlfZGVsZXRlKCkgY2xlYXJpbmcgdGhlIHZhbHVlcyBmb3IgYWxsIHRocmVhZHMuCisgICAgICovCisgICAgcmV0dXJuICh2b2lkICopKCgodW5zaWduZWQgKilfX2dldF90bHMoKSlba2V5XSk7Cit9CisKKy8qIFBvc2l4IG1hbmRhdGVzIHRoYXQgdGhpcyBiZSBkZWZpbmVkIGluIDxsaW1pdHMuaD4gYnV0IHdlIGRvbid0IGhhdmUKKyAqIGl0IGp1c3QgeWV0LgorICovCisjaWZuZGVmIFBUSFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TCisjICBkZWZpbmUgUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlMgIDQKKyNlbmRpZgorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmcm9tIHB0aHJlYWRfZXhpdCgpIHRvIHJlbW92ZSBhbGwgVExTIGtleSBkYXRhCisgKiBmcm9tIHRoaXMgdGhyZWFkJ3MgVExTIGFyZWEuIHRoaXMgbXVzdCBjYWxsIHRoZSBkZXN0cnVjdG9yIG9mIGFsbCBrZXlzCisgKiB0aGF0IGhhdmUgYSBub24tTlVMTCBkYXRhIHZhbHVlIChhbmQgYSBub24tTlVMTCBkZXN0cnVjdG9yKS4KKyAqCisgKiBiZWNhdXNlIGRlc3RydWN0b3JzIGNhbiBkbyBmdW5reSB0aGluZ3MgbGlrZSBkZWxldGluZy9jcmVhdGluZyBvdGhlcgorICoga2V5cywgd2UgbmVlZCB0byBpbXBsZW1lbnQgdGhpcyBpbiBhIGxvb3AKKyAqLworc3RhdGljIHZvaWQgcHRocmVhZF9rZXlfY2xlYW5fYWxsKHZvaWQpCit7CisgICAgdGxzbWFwX3QqICAgIG1hcDsKKyAgICB2b2lkKiogICAgICAgdGxzID0gKHZvaWQqKilfX2dldF90bHMoKTsKKyAgICBpbnQgICAgICAgICAgcm91bmRzID0gUFRIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7CisKKyAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworCisgICAgZm9yIChyb3VuZHMgPSBQVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUzsgcm91bmRzID4gMDsgcm91bmRzLS0pCisgICAgeworICAgICAgICBpbnQgIGtrLCBjb3VudCA9IDA7CisKKyAgICAgICAgZm9yIChrayA9IFRMU01BUF9TVEFSVDsga2sgPCBUTFNNQVBfU0laRTsga2srKykgeworICAgICAgICAgICAgaWYgKCB0bHNtYXBfdGVzdChtYXAsIGtrKSApCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdm9pZCogICAgICAgZGF0YSA9IHRsc1tra107CisgICAgICAgICAgICAgICAgdGxzX2R0b3JfdCAgZHRvciA9IG1hcC0+ZHRvcnNba2tdOworCisgICAgICAgICAgICAgICAgaWYgKGRhdGEgIT0gTlVMTCAmJiBkdG9yICE9IE5VTEwpCisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgIC8qIHdlIG5lZWQgdG8gY2xlYXIgdGhlIGtleSBkYXRhIG5vdywgdGhpcyB3aWxsIHByZXZlbnQgdGhlCisgICAgICAgICAgICAgICAgICAgICogZGVzdHJ1Y3RvciAob3IgYSBsYXRlciBvbmUpIGZyb20gc2VlaW5nIHRoZSBvbGQgdmFsdWUgaWYKKyAgICAgICAgICAgICAgICAgICAgKiBpdCBjYWxscyBwdGhyZWFkX2dldHNwZWNpZmljKCkgZm9yIHNvbWUgb2RkIHJlYXNvbgorICAgICAgICAgICAgICAgICAgICAqCisgICAgICAgICAgICAgICAgICAgICogd2UgZG8gbm90IGRvIHRoaXMgaWYgJ2R0b3IgPT0gTlVMTCcganVzdCBpbiBjYXNlIGFub3RoZXIKKyAgICAgICAgICAgICAgICAgICAgKiBkZXN0cnVjdG9yIGZ1bmN0aW9uIG1pZ2h0IGJlIHJlc3BvbnNpYmxlIGZvciBtYW51YWxseQorICAgICAgICAgICAgICAgICAgICAqIHJlbGVhc2luZyB0aGUgY29ycmVzcG9uZGluZyBkYXRhLgorICAgICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgICAgICB0bHNba2tdID0gTlVMTDsKKworICAgICAgICAgICAgICAgICAgIC8qIGJlY2F1c2UgdGhlIGRlc3RydWN0b3IgaXMgZnJlZSB0byBjYWxsIHB0aHJlYWRfa2V5X2NyZWF0ZQorICAgICAgICAgICAgICAgICAgICAqIGFuZC9vciBwdGhyZWFkX2tleV9kZWxldGUsIHdlIG5lZWQgdG8gdGVtcG9yYXJpbHkgdW5sb2NrCisgICAgICAgICAgICAgICAgICAgICogdGhlIFRMUyBtYXAKKyAgICAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICAgICAgdGxzbWFwX3VubG9jayhtYXApOworICAgICAgICAgICAgICAgICAgICAoKmR0b3IpKGRhdGEpOworICAgICAgICAgICAgICAgICAgICBtYXAgPSB0bHNtYXBfbG9jaygpOworCisgICAgICAgICAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgLyogaWYgd2UgZGlkbid0IGNhbGwgYW55IGRlc3RydWN0b3IsIHRoZXJlIGlzIG5vIG5lZWQgdG8gY2hlY2sgdGhlCisgICAgICAgICAqIFRMUyBkYXRhIGFnYWluCisgICAgICAgICAqLworICAgICAgICBpZiAoY291bnQgPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB0bHNtYXBfdW5sb2NrKG1hcCk7Cit9CisKKy8vIG1hbiBzYXlzIHRoaXMgc2hvdWxkIGJlIGluIDxsaW51eC91bmlzdGQuaD4sIGJ1dCBpdCBpc24ndAorZXh0ZXJuIGludCB0a2lsbChpbnQgdGlkLCBpbnQgc2lnKTsKKworaW50IHB0aHJlYWRfa2lsbChwdGhyZWFkX3QgdGlkLCBpbnQgc2lnKQoreworICAgIGludCAgcmV0OworICAgIGludCAgb2xkX2Vycm5vID0gZXJybm87CisgICAgcHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkID0gKHB0aHJlYWRfaW50ZXJuYWxfdCAqKXRpZDsKKworICAgIHJldCA9IHRraWxsKHRocmVhZC0+a2VybmVsX2lkLCBzaWcpOworICAgIGlmIChyZXQgPCAwKSB7CisgICAgICAgIHJldCA9IGVycm5vOworICAgICAgICBlcnJubyA9IG9sZF9lcnJubzsKKyAgICB9CisKKyAgICByZXR1cm4gcmV0OworfQorCitleHRlcm4gaW50IF9fcnRfc2lncHJvY21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqLCBzaXplX3QpOworCitpbnQgcHRocmVhZF9zaWdtYXNrKGludCBob3csIGNvbnN0IHNpZ3NldF90ICpzZXQsIHNpZ3NldF90ICpvc2V0KQoreworICAgIHJldHVybiBfX3J0X3NpZ3Byb2NtYXNrKGhvdywgc2V0LCBvc2V0LCBfTlNJRyAvIDgpOworfQorCisKK2ludCBwdGhyZWFkX2dldGNwdWNsb2NraWQocHRocmVhZF90ICB0aWQsIGNsb2NraWRfdCAgKmNsb2NraWQpCit7CisgICAgY29uc3QgaW50ICAgICAgICAgICAgQ0xPQ0tfSURUWVBFX0JJVFMgPSAzOworICAgIHB0aHJlYWRfaW50ZXJuYWxfdCogIHRocmVhZCA9IChwdGhyZWFkX2ludGVybmFsX3QqKXRpZDsKKworICAgIGlmICghdGhyZWFkKQorICAgICAgICByZXR1cm4gRVNSQ0g7CisKKyAgICAqY2xvY2tpZCA9IENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEIHwgKHRocmVhZC0+a2VybmVsX2lkIDw8IENMT0NLX0lEVFlQRV9CSVRTKTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKiBOT1RFOiB0aGlzIGltcGxlbWVudGF0aW9uIGRvZXNuJ3Qgc3VwcG9ydCBhIGluaXQgZnVuY3Rpb24gdGhhdCB0aHJvd3MgYSBDKysgZXhjZXB0aW9uCisgKiAgICAgICBvciBjYWxscyBmb3JrKCkKKyAqLworaW50ICBwdGhyZWFkX29uY2UoIHB0aHJlYWRfb25jZV90KiAgb25jZV9jb250cm9sLCAgdm9pZCAoKmluaXRfcm91dGluZSkodm9pZCkgKQoreworICAgIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgICBvbmNlX2xvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCisgICAgaWYgKCpvbmNlX2NvbnRyb2wgPT0gUFRIUkVBRF9PTkNFX0lOSVQpIHsKKyAgICAgICAgX25vcm1hbF9sb2NrKCAmb25jZV9sb2NrICk7CisgICAgICAgIGlmICgqb25jZV9jb250cm9sID09IFBUSFJFQURfT05DRV9JTklUKSB7CisgICAgICAgICAgICAoKmluaXRfcm91dGluZSkoKTsKKyAgICAgICAgICAgICpvbmNlX2NvbnRyb2wgPSB+UFRIUkVBRF9PTkNFX0lOSVQ7CisgICAgICAgIH0KKyAgICAgICAgX25vcm1hbF91bmxvY2soICZvbmNlX2xvY2sgKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmggYi9saWJjL2Jpb25pYy9wdGhyZWFkX2ludGVybmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM2YTVjZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0aHJlYWRfaW50ZXJuYWwuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9QVEhSRUFEX0lOVEVSTkFMX0hfCisjZGVmaW5lIF9QVEhSRUFEX0lOVEVSTkFMX0hfCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiBzdHJ1Y3QgcHRocmVhZF9pbnRlcm5hbF90Cit7CisgICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCogIG5leHQ7CisgICAgc3RydWN0IHB0aHJlYWRfaW50ZXJuYWxfdCoqIHByZWY7CisgICAgcHRocmVhZF9hdHRyX3QgICAgICAgICAgICAgIGF0dHI7CisgICAgcGlkX3QgICAgICAgICAgICAgICAgICAgICAgIGtlcm5lbF9pZDsKKyAgICBwdGhyZWFkX2NvbmRfdCAgICAgICAgICAgICAgam9pbl9jb25kOworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBqb2luX2NvdW50OworICAgIHZvaWQqICAgICAgICAgICAgICAgICAgICAgICByZXR1cm5fdmFsdWU7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGludGVybjsKKyAgICBfX3B0aHJlYWRfY2xlYW51cF90KiAgICAgICAgY2xlYW51cF9zdGFjazsKKyAgICB2b2lkKiogICAgICAgICAgICAgICAgICAgICAgdGxzOyAgICAgICAgIC8qIHRocmVhZC1sb2NhbCBzdG9yYWdlIGFyZWEgKi8KK30gcHRocmVhZF9pbnRlcm5hbF90OworCitleHRlcm4gdm9pZCBfaW5pdF90aHJlYWQocHRocmVhZF9pbnRlcm5hbF90ICogdGhyZWFkLCBwaWRfdCBrZXJuZWxfaWQsIHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrX2Jhc2UpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1BUSFJFQURfSU5URVJOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B0cmFjZS5jIGIvbGliYy9iaW9uaWMvcHRyYWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjFjYTAwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B0cmFjZS5jCkBAIC0wLDAgKzEsNjMgQEAKKy8qDQorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QNCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLg0KKyAqDQorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0DQorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zDQorICogYXJlIG1ldDoNCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4NCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodA0KKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbg0KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUNCisgKiAgICBkaXN0cmlidXRpb24uDQorICoNCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTDQorICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QNCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUw0KKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFDQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULA0KKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsDQorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTDQorICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEDQorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLA0KKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVA0KKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRg0KKyAqIFNVQ0ggREFNQUdFLg0KKyAqLw0KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4NCisjaW5jbHVkZSA8c3lzL3B0cmFjZS5oPg0KKw0KK2V4dGVybiBsb25nIF9fcHRyYWNlKGludCByZXF1ZXN0LCBwaWRfdCBwaWQsIHZvaWQgKmFkZHIsIHZvaWQgKmRhdGEpOw0KKw0KK2xvbmcgcHRyYWNlKGludCByZXF1ZXN0LCBwaWRfdCBwaWQsIHZvaWQgKiBhZGRyLCB2b2lkICogZGF0YSkNCit7DQorICAgIHN3aXRjaCAocmVxdWVzdCkgew0KKyAgICAgICAgY2FzZSBQVFJBQ0VfUEVFS1VTUjoNCisgICAgICAgIGNhc2UgUFRSQUNFX1BFRUtURVhUOg0KKyAgICAgICAgY2FzZSBQVFJBQ0VfUEVFS0RBVEE6DQorICAgICAgICB7DQorICAgICAgICAgICAgbG9uZyB3b3JkOw0KKyAgICAgICAgICAgIGxvbmcgcmV0Ow0KKyAgICAgICAgICAgIA0KKyAgICAgICAgICAgIHJldCA9IF9fcHRyYWNlKHJlcXVlc3QsIHBpZCwgYWRkciwgJndvcmQpOw0KKyAgICAgICAgICAgIGlmIChyZXQgPT0gMCkgew0KKyAgICAgICAgICAgICAgICByZXR1cm4gd29yZDsNCisgICAgICAgICAgICB9IGVsc2Ugew0KKyAgICAgICAgICAgICAgICAvLyBfX3B0cmFjZSB3aWxsIHNldCBlcnJubyBmb3IgdXMNCisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGRlZmF1bHQ6DQorICAgICAgICAgICAgIHJldHVybiBfX3B0cmFjZShyZXF1ZXN0LCBwaWQsIGFkZHIsIGRhdGEpOw0KKyAgICB9DQorfQ0KKw0KKy8qDQorICogSG9vayBmb3IgZ2RiIHRvIGdldCBub3RpZmllZCB3aGVuIGEgdGhyZWFkIGlzIGNyZWF0ZWQNCisgKi8NCit2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCkgX19hdHRyaWJ1dGVfXygobm9pbmxpbmUpKTsNCit2b2lkIF90aHJlYWRfY3JlYXRlZF9ob29rKHBpZF90IHRocmVhZF9pZCkNCit7DQorfQ0KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jIGIvbGliYy9iaW9uaWMvcHV0dXRsaW5lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ0OTA2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3B1dHV0bGluZS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKworCit2b2lkIHB1dHV0bGluZShzdHJ1Y3QgdXRtcCogdXRtcCkKK3sKKyAgICBGSUxFKiBmOworICAgIHN0cnVjdCB1dG1wIHU7CisgICAgaW50IGk7CisKKyAgICBpZiAoIShmID0gZm9wZW4oX1BBVEhfVVRNUCwgIncrIikpKQorICAgICAgICByZXR1cm47CisKKyAgICB3aGlsZSAoZnJlYWQoJnUsIHNpemVvZihzdHJ1Y3QgdXRtcCksIDEsIGYpID09IDEpCisgICAgeworICAgICAgICBpZiAoIXN0cm5jbXAodXRtcC0+dXRfbGluZSwgdS51dF9saW5lLCBzaXplb2YodS51dF9saW5lKSAtMSkpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICgoaSA9IGZ0ZWxsKGYpKSA8IDApCisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICBpZiAoZnNlZWsoZiwgaSAtIHNpemVvZihzdHJ1Y3QgdXRtcCksIFNFRUtfU0VUKSA8IDApCisgICAgICAgICAgICAgICAgZ290byByZXQ7CisgICAgICAgICAgICBmd3JpdGUodXRtcCwgc2l6ZW9mKHN0cnVjdCB1dG1wKSwgMSwgZik7CisgICAgICAgICAgICBnb3RvIHJldDsKKyAgICAgICAgfQorICAgIH0KKworCisgICAgZmNsb3NlKGYpOworCisgICAgaWYgKCEoZiA9IGZvcGVuKF9QQVRIX1VUTVAsICJ3KyIpKSkKKyAgICAgICAgcmV0dXJuOworICAgIGZ3cml0ZSh1dG1wLCBzaXplb2Yoc3RydWN0IHV0bXApLCAxLCBmKTsKKworcmV0OgorICAgIGZjbG9zZShmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3JhbmQ0OC5oIGIvbGliYy9iaW9uaWMvcmFuZDQ4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGEzZDgzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JhbmQ0OC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqCisgKiAkRnJlZUJTRDogc3JjL2xpYi9saWJjL2dlbi9yYW5kNDguaCx2IDEuMiAyMDAyLzAyLzAxIDAxOjMyOjE5IG9icmllbiBFeHAgJAorICovCisKKyNpZm5kZWYgX1JBTkQ0OF9IXworI2RlZmluZSBfUkFORDQ4X0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQJCV9kb3JhbmQ0OCh1bnNpZ25lZCBzaG9ydFszXSk7CisKKyNkZWZpbmUJUkFORDQ4X1NFRURfMAkoMHgzMzBlKQorI2RlZmluZQlSQU5ENDhfU0VFRF8xCSgweGFiY2QpCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzIJKDB4MTIzNCkKKyNkZWZpbmUJUkFORDQ4X01VTFRfMAkoMHhlNjZkKQorI2RlZmluZQlSQU5ENDhfTVVMVF8xCSgweGRlZWMpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzIJKDB4MDAwNSkKKyNkZWZpbmUJUkFORDQ4X0FERAkoMHgwMDBiKQorCisjZW5kaWYgLyogX1JBTkQ0OF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvcmVhbHBhdGguYyBiL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YTNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3JlYWxwYXRoLmMKQEAgLTAsMCArMSwxNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEphbi1TaW1vbiBQZW5kcnkuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVhbHBhdGguYwk4LjEgKEJlcmtlbGV5KSAyLzE2Lzk0IjsKK3N0YXRpYyBjaGFyIHJjc2lkW10gPQorIiRGcmVlQlNEOiAvcmVwb21hbi9yL25jdnMvc3JjL2xpYi9saWJjL3N0ZGxpYi9yZWFscGF0aC5jLHYgMS42LjIuMSAyMDAzLzA4LzAzIDIzOjQ3OjM5IG5lY3RhciBFeHAgJCI7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworLyoKKyAqIGNoYXIgKnJlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgcmVzb2x2ZWRfcGF0aFtNQVhQQVRITEVOXSk7CisgKgorICogRmluZCB0aGUgcmVhbCBuYW1lIG9mIHBhdGgsIGJ5IHJlbW92aW5nIGFsbCAiLiIsICIuLiIgYW5kIHN5bWxpbmsKKyAqIGNvbXBvbmVudHMuICBSZXR1cm5zIChyZXNvbHZlZCkgb24gc3VjY2Vzcywgb3IgKE5VTEwpIG9uIGZhaWx1cmUsCisgKiBpbiB3aGljaCBjYXNlIHRoZSBwYXRoIHdoaWNoIGNhdXNlZCB0cm91YmxlIGlzIGxlZnQgaW4gKHJlc29sdmVkKS4KKyAqLworY2hhciAqCityZWFscGF0aChwYXRoLCByZXNvbHZlZCkKKwljb25zdCBjaGFyICpwYXRoOworCWNoYXIgKnJlc29sdmVkOworeworCXN0cnVjdCBzdGF0IHNiOworCWludCBmZCwgbiwgcm9vdGQsIHNlcnJubzsKKwljaGFyICpwLCAqcSwgd2J1ZltNQVhQQVRITEVOXTsKKyAgICAgIGludCBzeW1saW5rcyA9IDA7CisKKwkvKiBTYXZlIHRoZSBzdGFydGluZyBwb2ludC4gKi8KKwlpZiAoKGZkID0gb3BlbigiLiIsIE9fUkRPTkxZKSkgPCAwKSB7CisJCSh2b2lkKXN0cmNweShyZXNvbHZlZCwgIi4iKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKgorCSAqIEZpbmQgdGhlIGRpcm5hbWUgYW5kIGJhc2VuYW1lIGZyb20gdGhlIHBhdGggdG8gYmUgcmVzb2x2ZWQuCisJICogQ2hhbmdlIGRpcmVjdG9yeSB0byB0aGUgZGlybmFtZSBjb21wb25lbnQuCisJICogbHN0YXQgdGhlIGJhc2VuYW1lIHBhcnQuCisJICogICAgIGlmIGl0IGlzIGEgc3ltbGluaywgcmVhZCBpbiB0aGUgdmFsdWUgYW5kIGxvb3AuCisJICogICAgIGlmIGl0IGlzIGEgZGlyZWN0b3J5LCB0aGVuIGNoYW5nZSB0byB0aGF0IGRpcmVjdG9yeS4KKwkgKiBnZXQgdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG5hbWUgYW5kIGFwcGVuZCB0aGUgYmFzZW5hbWUuCisJICovCisJKHZvaWQpc3RybmNweShyZXNvbHZlZCwgcGF0aCwgTUFYUEFUSExFTiAtIDEpOworCXJlc29sdmVkW01BWFBBVEhMRU4gLSAxXSA9ICdcMCc7Citsb29wOgorCXEgPSBzdHJyY2hyKHJlc29sdmVkLCAnLycpOworCWlmIChxICE9IE5VTEwpIHsKKwkJcCA9IHEgKyAxOworCQlpZiAocSA9PSByZXNvbHZlZCkKKwkJCXEgPSAiLyI7CisJCWVsc2UgeworCQkJZG8geworCQkJCS0tcTsKKwkJCX0gd2hpbGUgKHEgPiByZXNvbHZlZCAmJiAqcSA9PSAnLycpOworCQkJcVsxXSA9ICdcMCc7CisJCQlxID0gcmVzb2x2ZWQ7CisJCX0KKwkJaWYgKGNoZGlyKHEpIDwgMCkKKwkJCWdvdG8gZXJyMTsKKwl9IGVsc2UKKwkJcCA9IHJlc29sdmVkOworCisJLyogRGVhbCB3aXRoIHRoZSBsYXN0IGNvbXBvbmVudC4gKi8KKwlpZiAoKnAgIT0gJ1wwJyAmJiBsc3RhdChwLCAmc2IpID09IDApIHsKKwkJaWYgKFNfSVNMTksoc2Iuc3RfbW9kZSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICBpZiAoKytzeW1saW5rcyA+IE1BWFNZTUxJTktTKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlcnJubyA9IEVMT09QOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnIxOworICAgICAgICAgICAgICAgICAgICAgIH0KKwkJCW4gPSByZWFkbGluayhwLCByZXNvbHZlZCwgTUFYUEFUSExFTiAtIDEpOworCQkJaWYgKG4gPCAwKQorCQkJCWdvdG8gZXJyMTsKKwkJCXJlc29sdmVkW25dID0gJ1wwJzsKKwkJCWdvdG8gbG9vcDsKKwkJfQorCQlpZiAoU19JU0RJUihzYi5zdF9tb2RlKSkgeworCQkJaWYgKGNoZGlyKHApIDwgMCkKKwkJCQlnb3RvIGVycjE7CisJCQlwID0gIiI7CisJCX0KKwl9CisKKwkvKgorCSAqIFNhdmUgdGhlIGxhc3QgY29tcG9uZW50IG5hbWUgYW5kIGdldCB0aGUgZnVsbCBwYXRobmFtZSBvZgorCSAqIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkgKi8KKwkodm9pZClzdHJjcHkod2J1ZiwgcCk7CisJaWYgKGdldGN3ZChyZXNvbHZlZCwgTUFYUEFUSExFTikgPT0gMCkKKwkJZ290byBlcnIxOworCisJLyoKKwkgKiBKb2luIHRoZSB0d28gc3RyaW5ncyB0b2dldGhlciwgZW5zdXJpbmcgdGhhdCB0aGUgcmlnaHQgdGhpbmcKKwkgKiBoYXBwZW5zIGlmIHRoZSBsYXN0IGNvbXBvbmVudCBpcyBlbXB0eSwgb3IgdGhlIGRpcm5hbWUgaXMgcm9vdC4KKwkgKi8KKwlpZiAocmVzb2x2ZWRbMF0gPT0gJy8nICYmIHJlc29sdmVkWzFdID09ICdcMCcpCisJCXJvb3RkID0gMTsKKwllbHNlCisJCXJvb3RkID0gMDsKKworCWlmICgqd2J1ZikgeworCQlpZiAoc3RybGVuKHJlc29sdmVkKSArIHN0cmxlbih3YnVmKSArICgxLXJvb3RkKSArIDEgPgorCQkgICAgTUFYUEFUSExFTikgeworCQkJZXJybm8gPSBFTkFNRVRPT0xPTkc7CisJCQlnb3RvIGVycjE7CisJCX0KKwkJaWYgKHJvb3RkID09IDApCisJCQkodm9pZClzdHJjYXQocmVzb2x2ZWQsICIvIik7CisJCSh2b2lkKXN0cmNhdChyZXNvbHZlZCwgd2J1Zik7CisJfQorCisJLyogR28gYmFjayB0byB3aGVyZSB3ZSBjYW1lIGZyb20uICovCisJaWYgKGZjaGRpcihmZCkgPCAwKSB7CisJCXNlcnJubyA9IGVycm5vOworCQlnb3RvIGVycjI7CisJfQorCisJLyogSXQncyBva2F5IGlmIHRoZSBjbG9zZSBmYWlscywgd2hhdCdzIGFuIGZkIG1vcmUgb3IgbGVzcz8gKi8KKwkodm9pZCljbG9zZShmZCk7CisJcmV0dXJuIChyZXNvbHZlZCk7CisKK2VycjE6CXNlcnJubyA9IGVycm5vOworCSh2b2lkKWZjaGRpcihmZCk7CitlcnIyOgkodm9pZCljbG9zZShmZCk7CisJZXJybm8gPSBzZXJybm87CisJcmV0dXJuIChOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3J1bGVzLmphbSBiL2xpYmMvYmlvbmljL3J1bGVzLmphbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTk1MjZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvcnVsZXMuamFtCkBAIC0wLDAgKzEgQEAKK05PX0xPQ0FMX1NSQyA9IG1hbGxvY19sZWFrLmMgOwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMgYi9saWJjL2Jpb25pYy9zZW1hcGhvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTlkZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc2VtYXBob3JlLmMKQEAgLTAsMCArMSwxNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL2F0b21pY3MuaD4KKworaW50IHNlbV9pbml0KHNlbV90ICpzZW0sIGludCBwc2hhcmVkLCB1bnNpZ25lZCBpbnQgdmFsdWUpCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHBzaGFyZWQgIT0gMCkgeworICAgICAgICBlcnJubyA9IEVOT1NZUzsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIHNlbS0+Y291bnQgPSB2YWx1ZTsKKyAgICByZXR1cm4gMDsKK30KKworCitpbnQgc2VtX2Rlc3Ryb3koc2VtX3QgKnNlbSkKK3sKKyAgICBpZiAoc2VtID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgaWYgKHNlbS0+Y291bnQgPT0gMCkgeworICAgICAgICBlcnJubyA9IEVCVVNZOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCisKK3NlbV90ICpzZW1fb3Blbihjb25zdCBjaGFyICpuYW1lLCBpbnQgb2ZsYWcsIC4uLikKK3sKKyAgICBuYW1lPW5hbWU7CisgICAgb2ZsYWc9b2ZsYWc7CisKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gU0VNX0ZBSUxFRDsKK30KKworCitpbnQgc2VtX2Nsb3NlKHNlbV90ICpzZW0pCit7CisgICAgaWYgKHNlbSA9PSBOVUxMKSB7CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIGVycm5vID0gRU5PU1lTOworICAgIHJldHVybiAtMTsKK30KKworCitpbnQgc2VtX3VubGluayhjb25zdCBjaGFyICogbmFtZSkKK3sKKyAgICBlcnJubyA9IEVOT1NZUzsKKyAgICByZXR1cm4gLTE7Cit9CisKKworc3RhdGljIGludAorX19hdG9taWNfZGVjX2lmX3Bvc2l0aXZlKCB2b2xhdGlsZSB1bnNpZ25lZCBpbnQqICBwdmFsdWUgKQoreworICAgIHVuc2lnbmVkIGludCAgb2xkOworCisgICAgZG8geworICAgICAgICBvbGQgPSAqcHZhbHVlOworICAgIH0KKyAgICB3aGlsZSAoIG9sZCAhPSAwICYmIF9fYXRvbWljX2NtcHhjaGcoIChpbnQpb2xkLCAoaW50KW9sZC0xLCAodm9sYXRpbGUgaW50KilwdmFsdWUgKSAhPSAwICk7CisKKyAgICByZXR1cm4gb2xkOworfQorCitpbnQgc2VtX3dhaXQoc2VtX3QgKnNlbSkKK3sKKyAgICBpZiAoc2VtID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChfX2F0b21pY19kZWNfaWZfcG9zaXRpdmUoJnNlbS0+Y291bnQpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgX19mdXRleF93YWl0KCZzZW0tPmNvdW50LCAwLCAwKTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBzZW1fcG9zdChzZW1fdCAqc2VtKQoreworICAgIGlmIChzZW0gPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIEVJTlZBTDsKKworICAgIGlmIChfX2F0b21pY19pbmMoKHZvbGF0aWxlIGludCopJnNlbS0+Y291bnQpID09IDApCisgICAgICAgIF9fZnV0ZXhfd2FrZSgmc2VtLT5jb3VudCwgMSk7CisKKyAgICByZXR1cm4gMDsKK30KKworaW50ICBzZW1fdHJ5d2FpdChzZW1fdCAqc2VtKQoreworICAgIGlmIChzZW0gPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIGlmIChfX2F0b21pY19kZWNfaWZfcG9zaXRpdmUoJnNlbS0+Y291bnQpID4gMCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gRUFHQUlOOworICAgIH0KK30KKworaW50ICBzZW1fZ2V0dmFsdWUoc2VtX3QgKnNlbSwgaW50ICpzdmFsKQoreworICAgIGlmIChzZW0gPT0gTlVMTCB8fCBzdmFsID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICAqc3ZhbCA9IHNlbS0+Y291bnQ7CisgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zaGExLmMgYi9saWJjL2Jpb25pYy9zaGExLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWZhOTVhNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3NoYTEuYwpAQCAtMCwwICsxLDI3MCBAQAorLyoJJE5ldEJTRDogc2hhMS5jLHYgMS4xIDIwMDUvMTIvMjAgMjA6Mjk6NDAgY2hyaXN0b3MgRXhwICQJKi8KKy8qCSRPcGVuQlNEOiBzaGExLmMsdiAxLjkgMTk5Ny8wNy8yMyAyMToxMjozMiBrc3RhaWxleSBFeHAgJAkqLworCisvKgorICogU0hBLTEgaW4gQworICogQnkgU3RldmUgUmVpZCA8c3RldmVAZWRtd2ViLmNvbT4KKyAqIDEwMCUgUHVibGljIERvbWFpbgorICoKKyAqIFRlc3QgVmVjdG9ycyAoZnJvbSBGSVBTIFBVQiAxODAtMSkKKyAqICJhYmMiCisgKiAgIEE5OTkzRTM2IDQ3MDY4MTZBIEJBM0UyNTcxIDc4NTBDMjZDIDlDRDBEODlECisgKiAiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisgKiAgIDg0OTgzRTQ0IDFDM0JEMjZFIEJBQUU0QUExIEY5NTEyOUU1IEU1NDY3MEYxCisgKiBBIG1pbGxpb24gcmVwZXRpdGlvbnMgb2YgImEiCisgKiAgIDM0QUE5NzNDIEQ0QzREQUE0IEY2MUVFQjJCIERCQUQyNzMxIDY1MzQwMTZGCisgKi8KKworI2RlZmluZSBTSEExSEFORFNPRkYJCS8qIENvcGllcyBkYXRhIGJlZm9yZSBtZXNzaW5nIHdpdGggaXQuICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxzaGExLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpZiBIQVZFX05CVE9PTF9DT05GSUdfSAorI2luY2x1ZGUgIm5idG9vbF9jb25maWcuaCIKKyNlbmRpZgorCisjaWYgIUhBVkVfU0hBMV9ICisKKyNkZWZpbmUgcm9sKHZhbHVlLCBiaXRzKSAoKCh2YWx1ZSkgPDwgKGJpdHMpKSB8ICgodmFsdWUpID4+ICgzMiAtIChiaXRzKSkpKQorCisvKgorICogYmxrMCgpIGFuZCBibGsoKSBwZXJmb3JtIHRoZSBpbml0aWFsIGV4cGFuZC4KKyAqIEkgZ290IHRoZSBpZGVhIG9mIGV4cGFuZGluZyBkdXJpbmcgdGhlIHJvdW5kIGZ1bmN0aW9uIGZyb20gU1NMZWF5CisgKi8KKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKyMgZGVmaW5lIGJsazAoaSkgKGJsb2NrLT5sW2ldID0gKHJvbChibG9jay0+bFtpXSwyNCkmMHhGRjAwRkYwMCkgXAorICAgIHwocm9sKGJsb2NrLT5sW2ldLDgpJjB4MDBGRjAwRkYpKQorI2Vsc2UKKyMgZGVmaW5lIGJsazAoaSkgYmxvY2stPmxbaV0KKyNlbmRpZgorI2RlZmluZSBibGsoaSkgKGJsb2NrLT5sW2kmMTVdID0gcm9sKGJsb2NrLT5sWyhpKzEzKSYxNV1eYmxvY2stPmxbKGkrOCkmMTVdIFwKKyAgICBeYmxvY2stPmxbKGkrMikmMTVdXmJsb2NrLT5sW2kmMTVdLDEpKQorCisvKgorICogKFIwK1IxKSwgUjIsIFIzLCBSNCBhcmUgdGhlIGRpZmZlcmVudCBvcGVyYXRpb25zIChyb3VuZHMpIHVzZWQgaW4gU0hBMQorICovCisjZGVmaW5lIFIwKHYsdyx4LHkseixpKSB6Kz0oKHcmKHheeSkpXnkpK2JsazAoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjEodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrKGkpKzB4NUE4Mjc5OTkrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFIyKHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweDZFRDlFQkExK3JvbCh2LDUpO3c9cm9sKHcsMzApOworI2RlZmluZSBSMyh2LHcseCx5LHosaSkgeis9KCgod3x4KSZ5KXwodyZ4KSkrYmxrKGkpKzB4OEYxQkJDREMrcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFI0KHYsdyx4LHkseixpKSB6Kz0od154XnkpK2JsayhpKSsweENBNjJDMUQ2K3JvbCh2LDUpO3c9cm9sKHcsMzApOworCit0eXBlZGVmIHVuaW9uIHsKKyAgICB1X2NoYXIgY1s2NF07CisgICAgdV9pbnQgbFsxNl07Cit9IENIQVI2NExPTkcxNjsKKworLyogb2xkIHNwYXJjNjQgZ2NjIGNvdWxkIG5vdCBjb21waWxlIHRoaXMgKi8KKyN1bmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECisjaWYgZGVmaW5lZChfX3NwYXJjNjRfXykgJiYgZGVmaW5lZChfX0dOVUNfXykgJiYgX19HTlVDX18gPCAzCisjZGVmaW5lIFNQQVJDNjRfR0NDX1dPUktBUk9VTkQKKyNlbmRpZgorCisjaWZkZWYgU1BBUkM2NF9HQ0NfV09SS0FST1VORAordm9pZCBkb19SMDEodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKK3ZvaWQgZG9fUjIodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKK3ZvaWQgZG9fUjModV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKK3ZvaWQgZG9fUjQodV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqKTsKKworI2RlZmluZSBuUjAodix3LHgseSx6LGkpIFIwKCp2LCp3LCp4LCp5LCp6LGkpCisjZGVmaW5lIG5SMSh2LHcseCx5LHosaSkgUjEoKnYsKncsKngsKnksKnosaSkKKyNkZWZpbmUgblIyKHYsdyx4LHkseixpKSBSMigqdiwqdywqeCwqeSwqeixpKQorI2RlZmluZSBuUjModix3LHgseSx6LGkpIFIzKCp2LCp3LCp4LCp5LCp6LGkpCisjZGVmaW5lIG5SNCh2LHcseCx5LHosaSkgUjQoKnYsKncsKngsKnksKnosaSkKKwordm9pZAorZG9fUjAxKHVfaW50MzJfdCAqYSwgdV9pbnQzMl90ICpiLCB1X2ludDMyX3QgKmMsIHVfaW50MzJfdCAqZCwgdV9pbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQoreworICAgIG5SMChhLGIsYyxkLGUsIDApOyBuUjAoZSxhLGIsYyxkLCAxKTsgblIwKGQsZSxhLGIsYywgMik7IG5SMChjLGQsZSxhLGIsIDMpOworICAgIG5SMChiLGMsZCxlLGEsIDQpOyBuUjAoYSxiLGMsZCxlLCA1KTsgblIwKGUsYSxiLGMsZCwgNik7IG5SMChkLGUsYSxiLGMsIDcpOworICAgIG5SMChjLGQsZSxhLGIsIDgpOyBuUjAoYixjLGQsZSxhLCA5KTsgblIwKGEsYixjLGQsZSwxMCk7IG5SMChlLGEsYixjLGQsMTEpOworICAgIG5SMChkLGUsYSxiLGMsMTIpOyBuUjAoYyxkLGUsYSxiLDEzKTsgblIwKGIsYyxkLGUsYSwxNCk7IG5SMChhLGIsYyxkLGUsMTUpOworICAgIG5SMShlLGEsYixjLGQsMTYpOyBuUjEoZCxlLGEsYixjLDE3KTsgblIxKGMsZCxlLGEsYiwxOCk7IG5SMShiLGMsZCxlLGEsMTkpOworfQorCit2b2lkCitkb19SMih1X2ludDMyX3QgKmEsIHVfaW50MzJfdCAqYiwgdV9pbnQzMl90ICpjLCB1X2ludDMyX3QgKmQsIHVfaW50MzJfdCAqZSwgQ0hBUjY0TE9ORzE2ICpibG9jaykKK3sKKyAgICBuUjIoYSxiLGMsZCxlLDIwKTsgblIyKGUsYSxiLGMsZCwyMSk7IG5SMihkLGUsYSxiLGMsMjIpOyBuUjIoYyxkLGUsYSxiLDIzKTsKKyAgICBuUjIoYixjLGQsZSxhLDI0KTsgblIyKGEsYixjLGQsZSwyNSk7IG5SMihlLGEsYixjLGQsMjYpOyBuUjIoZCxlLGEsYixjLDI3KTsKKyAgICBuUjIoYyxkLGUsYSxiLDI4KTsgblIyKGIsYyxkLGUsYSwyOSk7IG5SMihhLGIsYyxkLGUsMzApOyBuUjIoZSxhLGIsYyxkLDMxKTsKKyAgICBuUjIoZCxlLGEsYixjLDMyKTsgblIyKGMsZCxlLGEsYiwzMyk7IG5SMihiLGMsZCxlLGEsMzQpOyBuUjIoYSxiLGMsZCxlLDM1KTsKKyAgICBuUjIoZSxhLGIsYyxkLDM2KTsgblIyKGQsZSxhLGIsYywzNyk7IG5SMihjLGQsZSxhLGIsMzgpOyBuUjIoYixjLGQsZSxhLDM5KTsKK30KKwordm9pZAorZG9fUjModV9pbnQzMl90ICphLCB1X2ludDMyX3QgKmIsIHVfaW50MzJfdCAqYywgdV9pbnQzMl90ICpkLCB1X2ludDMyX3QgKmUsIENIQVI2NExPTkcxNiAqYmxvY2spCit7CisgICAgblIzKGEsYixjLGQsZSw0MCk7IG5SMyhlLGEsYixjLGQsNDEpOyBuUjMoZCxlLGEsYixjLDQyKTsgblIzKGMsZCxlLGEsYiw0Myk7CisgICAgblIzKGIsYyxkLGUsYSw0NCk7IG5SMyhhLGIsYyxkLGUsNDUpOyBuUjMoZSxhLGIsYyxkLDQ2KTsgblIzKGQsZSxhLGIsYyw0Nyk7CisgICAgblIzKGMsZCxlLGEsYiw0OCk7IG5SMyhiLGMsZCxlLGEsNDkpOyBuUjMoYSxiLGMsZCxlLDUwKTsgblIzKGUsYSxiLGMsZCw1MSk7CisgICAgblIzKGQsZSxhLGIsYyw1Mik7IG5SMyhjLGQsZSxhLGIsNTMpOyBuUjMoYixjLGQsZSxhLDU0KTsgblIzKGEsYixjLGQsZSw1NSk7CisgICAgblIzKGUsYSxiLGMsZCw1Nik7IG5SMyhkLGUsYSxiLGMsNTcpOyBuUjMoYyxkLGUsYSxiLDU4KTsgblIzKGIsYyxkLGUsYSw1OSk7Cit9CisKK3ZvaWQKK2RvX1I0KHVfaW50MzJfdCAqYSwgdV9pbnQzMl90ICpiLCB1X2ludDMyX3QgKmMsIHVfaW50MzJfdCAqZCwgdV9pbnQzMl90ICplLCBDSEFSNjRMT05HMTYgKmJsb2NrKQoreworICAgIG5SNChhLGIsYyxkLGUsNjApOyBuUjQoZSxhLGIsYyxkLDYxKTsgblI0KGQsZSxhLGIsYyw2Mik7IG5SNChjLGQsZSxhLGIsNjMpOworICAgIG5SNChiLGMsZCxlLGEsNjQpOyBuUjQoYSxiLGMsZCxlLDY1KTsgblI0KGUsYSxiLGMsZCw2Nik7IG5SNChkLGUsYSxiLGMsNjcpOworICAgIG5SNChjLGQsZSxhLGIsNjgpOyBuUjQoYixjLGQsZSxhLDY5KTsgblI0KGEsYixjLGQsZSw3MCk7IG5SNChlLGEsYixjLGQsNzEpOworICAgIG5SNChkLGUsYSxiLGMsNzIpOyBuUjQoYyxkLGUsYSxiLDczKTsgblI0KGIsYyxkLGUsYSw3NCk7IG5SNChhLGIsYyxkLGUsNzUpOworICAgIG5SNChlLGEsYixjLGQsNzYpOyBuUjQoZCxlLGEsYixjLDc3KTsgblI0KGMsZCxlLGEsYiw3OCk7IG5SNChiLGMsZCxlLGEsNzkpOworfQorI2VuZGlmCisKKy8qCisgKiBIYXNoIGEgc2luZ2xlIDUxMi1iaXQgYmxvY2suIFRoaXMgaXMgdGhlIGNvcmUgb2YgdGhlIGFsZ29yaXRobS4KKyAqLwordm9pZCBTSEExVHJhbnNmb3JtKHN0YXRlLCBidWZmZXIpCisgICAgdV9pbnQzMl90IHN0YXRlWzVdOworICAgIGNvbnN0IHVfY2hhciBidWZmZXJbNjRdOworeworICAgIHVfaW50MzJfdCBhLCBiLCBjLCBkLCBlOworICAgIENIQVI2NExPTkcxNiAqYmxvY2s7CisKKyNpZmRlZiBTSEExSEFORFNPRkYKKyAgICBDSEFSNjRMT05HMTYgd29ya3NwYWNlOworI2VuZGlmCisKKyAgICBhc3NlcnQoYnVmZmVyICE9IDApOworICAgIGFzc2VydChzdGF0ZSAhPSAwKTsKKworI2lmZGVmIFNIQTFIQU5EU09GRgorICAgIGJsb2NrID0gJndvcmtzcGFjZTsKKyAgICAodm9pZCltZW1jcHkoYmxvY2ssIGJ1ZmZlciwgNjQpOworI2Vsc2UKKyAgICBibG9jayA9IChDSEFSNjRMT05HMTYgKikodm9pZCAqKWJ1ZmZlcjsKKyNlbmRpZgorCisgICAgLyogQ29weSBjb250ZXh0LT5zdGF0ZVtdIHRvIHdvcmtpbmcgdmFycyAqLworICAgIGEgPSBzdGF0ZVswXTsKKyAgICBiID0gc3RhdGVbMV07CisgICAgYyA9IHN0YXRlWzJdOworICAgIGQgPSBzdGF0ZVszXTsKKyAgICBlID0gc3RhdGVbNF07CisKKyNpZmRlZiBTUEFSQzY0X0dDQ19XT1JLQVJPVU5ECisgICAgZG9fUjAxKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1IyKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1IzKCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworICAgIGRvX1I0KCZhLCAmYiwgJmMsICZkLCAmZSwgYmxvY2spOworI2Vsc2UKKyAgICAvKiA0IHJvdW5kcyBvZiAyMCBvcGVyYXRpb25zIGVhY2guIExvb3AgdW5yb2xsZWQuICovCisgICAgUjAoYSxiLGMsZCxlLCAwKTsgUjAoZSxhLGIsYyxkLCAxKTsgUjAoZCxlLGEsYixjLCAyKTsgUjAoYyxkLGUsYSxiLCAzKTsKKyAgICBSMChiLGMsZCxlLGEsIDQpOyBSMChhLGIsYyxkLGUsIDUpOyBSMChlLGEsYixjLGQsIDYpOyBSMChkLGUsYSxiLGMsIDcpOworICAgIFIwKGMsZCxlLGEsYiwgOCk7IFIwKGIsYyxkLGUsYSwgOSk7IFIwKGEsYixjLGQsZSwxMCk7IFIwKGUsYSxiLGMsZCwxMSk7CisgICAgUjAoZCxlLGEsYixjLDEyKTsgUjAoYyxkLGUsYSxiLDEzKTsgUjAoYixjLGQsZSxhLDE0KTsgUjAoYSxiLGMsZCxlLDE1KTsKKyAgICBSMShlLGEsYixjLGQsMTYpOyBSMShkLGUsYSxiLGMsMTcpOyBSMShjLGQsZSxhLGIsMTgpOyBSMShiLGMsZCxlLGEsMTkpOworICAgIFIyKGEsYixjLGQsZSwyMCk7IFIyKGUsYSxiLGMsZCwyMSk7IFIyKGQsZSxhLGIsYywyMik7IFIyKGMsZCxlLGEsYiwyMyk7CisgICAgUjIoYixjLGQsZSxhLDI0KTsgUjIoYSxiLGMsZCxlLDI1KTsgUjIoZSxhLGIsYyxkLDI2KTsgUjIoZCxlLGEsYixjLDI3KTsKKyAgICBSMihjLGQsZSxhLGIsMjgpOyBSMihiLGMsZCxlLGEsMjkpOyBSMihhLGIsYyxkLGUsMzApOyBSMihlLGEsYixjLGQsMzEpOworICAgIFIyKGQsZSxhLGIsYywzMik7IFIyKGMsZCxlLGEsYiwzMyk7IFIyKGIsYyxkLGUsYSwzNCk7IFIyKGEsYixjLGQsZSwzNSk7CisgICAgUjIoZSxhLGIsYyxkLDM2KTsgUjIoZCxlLGEsYixjLDM3KTsgUjIoYyxkLGUsYSxiLDM4KTsgUjIoYixjLGQsZSxhLDM5KTsKKyAgICBSMyhhLGIsYyxkLGUsNDApOyBSMyhlLGEsYixjLGQsNDEpOyBSMyhkLGUsYSxiLGMsNDIpOyBSMyhjLGQsZSxhLGIsNDMpOworICAgIFIzKGIsYyxkLGUsYSw0NCk7IFIzKGEsYixjLGQsZSw0NSk7IFIzKGUsYSxiLGMsZCw0Nik7IFIzKGQsZSxhLGIsYyw0Nyk7CisgICAgUjMoYyxkLGUsYSxiLDQ4KTsgUjMoYixjLGQsZSxhLDQ5KTsgUjMoYSxiLGMsZCxlLDUwKTsgUjMoZSxhLGIsYyxkLDUxKTsKKyAgICBSMyhkLGUsYSxiLGMsNTIpOyBSMyhjLGQsZSxhLGIsNTMpOyBSMyhiLGMsZCxlLGEsNTQpOyBSMyhhLGIsYyxkLGUsNTUpOworICAgIFIzKGUsYSxiLGMsZCw1Nik7IFIzKGQsZSxhLGIsYyw1Nyk7IFIzKGMsZCxlLGEsYiw1OCk7IFIzKGIsYyxkLGUsYSw1OSk7CisgICAgUjQoYSxiLGMsZCxlLDYwKTsgUjQoZSxhLGIsYyxkLDYxKTsgUjQoZCxlLGEsYixjLDYyKTsgUjQoYyxkLGUsYSxiLDYzKTsKKyAgICBSNChiLGMsZCxlLGEsNjQpOyBSNChhLGIsYyxkLGUsNjUpOyBSNChlLGEsYixjLGQsNjYpOyBSNChkLGUsYSxiLGMsNjcpOworICAgIFI0KGMsZCxlLGEsYiw2OCk7IFI0KGIsYyxkLGUsYSw2OSk7IFI0KGEsYixjLGQsZSw3MCk7IFI0KGUsYSxiLGMsZCw3MSk7CisgICAgUjQoZCxlLGEsYixjLDcyKTsgUjQoYyxkLGUsYSxiLDczKTsgUjQoYixjLGQsZSxhLDc0KTsgUjQoYSxiLGMsZCxlLDc1KTsKKyAgICBSNChlLGEsYixjLGQsNzYpOyBSNChkLGUsYSxiLGMsNzcpOyBSNChjLGQsZSxhLGIsNzgpOyBSNChiLGMsZCxlLGEsNzkpOworI2VuZGlmCisKKyAgICAvKiBBZGQgdGhlIHdvcmtpbmcgdmFycyBiYWNrIGludG8gY29udGV4dC5zdGF0ZVtdICovCisgICAgc3RhdGVbMF0gKz0gYTsKKyAgICBzdGF0ZVsxXSArPSBiOworICAgIHN0YXRlWzJdICs9IGM7CisgICAgc3RhdGVbM10gKz0gZDsKKyAgICBzdGF0ZVs0XSArPSBlOworCisgICAgLyogV2lwZSB2YXJpYWJsZXMgKi8KKyAgICBhID0gYiA9IGMgPSBkID0gZSA9IDA7Cit9CisKKworLyoKKyAqIFNIQTFJbml0IC0gSW5pdGlhbGl6ZSBuZXcgY29udGV4dAorICovCit2b2lkIFNIQTFJbml0KGNvbnRleHQpCisgICAgU0hBMV9DVFggKmNvbnRleHQ7Cit7CisKKyAgICBhc3NlcnQoY29udGV4dCAhPSAwKTsKKworICAgIC8qIFNIQTEgaW5pdGlhbGl6YXRpb24gY29uc3RhbnRzICovCisgICAgY29udGV4dC0+c3RhdGVbMF0gPSAweDY3NDUyMzAxOworICAgIGNvbnRleHQtPnN0YXRlWzFdID0gMHhFRkNEQUI4OTsKKyAgICBjb250ZXh0LT5zdGF0ZVsyXSA9IDB4OThCQURDRkU7CisgICAgY29udGV4dC0+c3RhdGVbM10gPSAweDEwMzI1NDc2OworICAgIGNvbnRleHQtPnN0YXRlWzRdID0gMHhDM0QyRTFGMDsKKyAgICBjb250ZXh0LT5jb3VudFswXSA9IGNvbnRleHQtPmNvdW50WzFdID0gMDsKK30KKworCisvKgorICogUnVuIHlvdXIgZGF0YSB0aHJvdWdoIHRoaXMuCisgKi8KK3ZvaWQgU0hBMVVwZGF0ZShjb250ZXh0LCBkYXRhLCBsZW4pCisgICAgU0hBMV9DVFggKmNvbnRleHQ7CisgICAgY29uc3QgdV9jaGFyICpkYXRhOworICAgIHVfaW50IGxlbjsKK3sKKyAgICB1X2ludCBpLCBqOworCisgICAgYXNzZXJ0KGNvbnRleHQgIT0gMCk7CisgICAgYXNzZXJ0KGRhdGEgIT0gMCk7CisKKyAgICBqID0gY29udGV4dC0+Y291bnRbMF07CisgICAgaWYgKChjb250ZXh0LT5jb3VudFswXSArPSBsZW4gPDwgMykgPCBqKQorCWNvbnRleHQtPmNvdW50WzFdICs9IChsZW4+PjI5KSsxOworICAgIGogPSAoaiA+PiAzKSAmIDYzOworICAgIGlmICgoaiArIGxlbikgPiA2MykgeworCSh2b2lkKW1lbWNweSgmY29udGV4dC0+YnVmZmVyW2pdLCBkYXRhLCAoaSA9IDY0LWopKTsKKwlTSEExVHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCBjb250ZXh0LT5idWZmZXIpOworCWZvciAoIDsgaSArIDYzIDwgbGVuOyBpICs9IDY0KQorCSAgICBTSEExVHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCAmZGF0YVtpXSk7CisJaiA9IDA7CisgICAgfSBlbHNlIHsKKwlpID0gMDsKKyAgICB9CisgICAgKHZvaWQpbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbal0sICZkYXRhW2ldLCBsZW4gLSBpKTsKK30KKworCisvKgorICogQWRkIHBhZGRpbmcgYW5kIHJldHVybiB0aGUgbWVzc2FnZSBkaWdlc3QuCisgKi8KK3ZvaWQgU0hBMUZpbmFsKGRpZ2VzdCwgY29udGV4dCkKKyAgICB1X2NoYXIgZGlnZXN0WzIwXTsKKyAgICBTSEExX0NUWCogY29udGV4dDsKK3sKKyAgICB1X2ludCBpOworICAgIHVfY2hhciBmaW5hbGNvdW50WzhdOworCisgICAgYXNzZXJ0KGRpZ2VzdCAhPSAwKTsKKyAgICBhc3NlcnQoY29udGV4dCAhPSAwKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwlmaW5hbGNvdW50W2ldID0gKHVfY2hhcikoKGNvbnRleHQtPmNvdW50WyhpID49IDQgPyAwIDogMSldCisJID4+ICgoMy0oaSAmIDMpKSAqIDgpICkgJiAyNTUpOwkgLyogRW5kaWFuIGluZGVwZW5kZW50ICovCisgICAgfQorICAgIFNIQTFVcGRhdGUoY29udGV4dCwgKGNvbnN0IHVfY2hhciAqKSJcMjAwIiwgMSk7CisgICAgd2hpbGUgKChjb250ZXh0LT5jb3VudFswXSAmIDUwNCkgIT0gNDQ4KQorCVNIQTFVcGRhdGUoY29udGV4dCwgKGNvbnN0IHVfY2hhciAqKSJcMCIsIDEpOworICAgIFNIQTFVcGRhdGUoY29udGV4dCwgZmluYWxjb3VudCwgOCk7ICAvKiBTaG91bGQgY2F1c2UgYSBTSEExVHJhbnNmb3JtKCkgKi8KKworICAgIGlmIChkaWdlc3QpIHsKKwlmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykKKwkgICAgZGlnZXN0W2ldID0gKHVfY2hhcikKKwkJKChjb250ZXh0LT5zdGF0ZVtpPj4yXSA+PiAoKDMtKGkgJiAzKSkgKiA4KSApICYgMjU1KTsKKyAgICB9Cit9CisKKyNlbmRpZiAvKiBIQVZFX1NIQTFfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvc3NwLmMgYi9saWJjL2Jpb25pYy9zc3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDc5NGY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3NwLmMKQEAgLTAsMCArMSwxMDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlICJsb2dkLmgiCisKK3ZvaWQgKl9fc3RhY2tfY2hrX2d1YXJkID0gMDsKKworLyogSW5pdGlhbGl6ZSB0aGUgY2FuYXJ5IHdpdGggYSByYW5kb20gdmFsdWUgZnJvbSAvZGV2L3VyYW5kb20uCisgKiBJZiB0aGF0IGZhaWxzLCB1c2UgdGhlICJ0ZXJtaW5hdG9yIGNhbmFyeSIuICovCitzdGF0aWMgdm9pZCBfX2F0dHJpYnV0ZV9fICgoY29uc3RydWN0b3IpKQorX19ndWFyZF9zZXR1cCh2b2lkKQoreworICAgIGludCBmZDsKKworICAgIGZkID0gb3BlbigiL2Rldi91cmFuZG9tIiwgT19SRE9OTFkpOworICAgIGlmIChmZCAhPSAtMSkgeworICAgICAgICBzc2l6ZV90IGxlbiA9IHJlYWQoZmQsICZfX3N0YWNrX2Noa19ndWFyZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihfX3N0YWNrX2Noa19ndWFyZCkpOworICAgICAgICBjbG9zZShmZCk7CisgICAgICAgIGlmIChsZW4gPT0gc2l6ZW9mKF9fc3RhY2tfY2hrX2d1YXJkKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvKiBJZiB0aGF0IGZhaWxlZCwgc3dpdGNoIHRvICd0ZXJtaW5hdG9yIGNhbmFyeScgKi8KKyAgICAoKHVuc2lnbmVkIGNoYXIgKikmX19zdGFja19jaGtfZ3VhcmQpWzBdID0gMDsKKyAgICAoKHVuc2lnbmVkIGNoYXIgKikmX19zdGFja19jaGtfZ3VhcmQpWzFdID0gMDsKKyAgICAoKHVuc2lnbmVkIGNoYXIgKikmX19zdGFja19jaGtfZ3VhcmQpWzJdID0gJ1xuJzsKKyAgICAoKHVuc2lnbmVkIGNoYXIgKikmX19zdGFja19jaGtfZ3VhcmQpWzNdID0gMjU1OworfQorCisvKiBUaGlzIGlzIHRoZSBjcmFzaCBoYW5kbGVyLgorICogRG9lcyBhIGJlc3QgZWZmb3J0IGF0IGxvZ2dpbmcgYW5kIGNhbGxzIF9leGl0IHRvIHRlcm1pbmF0ZQorICogdGhlIHByb2Nlc3MgaW1tZWRpYXRlbHkgKHdpdGhvdXQgYXRleGl0IGhhbmRsZXJzLCBldGMuKSAqLwordm9pZCBfX3N0YWNrX2Noa19mYWlsKHZvaWQpCit7CisgICAgc3RydWN0IHNpZ2FjdGlvbiBzYTsKKyAgICBzaWdzZXRfdCBzaWdtYXNrOworICAgIHN0YXRpYyBjb25zdCBjaGFyIG1lc3NhZ2VbXSA9ICJzdGFjayBjb3JydXB0aW9uIGRldGVjdGVkOiBhYm9ydGVkIjsKKyAgICBjaGFyIHBhdGhbUEFUSF9NQVhdOworICAgIGludCBjb3VudDsKKworICAgIC8qIEltbWVkaWF0ZWx5IGJsb2NrIGFsbCAoYnV0IFNJR0FCUlQpIHNpZ25hbCBoYW5kbGVycyBmcm9tIHJ1bm5pbmcgY29kZSAqLworICAgIHNpZ2ZpbGxzZXQoJnNpZ21hc2spOworICAgIHNpZ2RlbHNldCgmc2lnbWFzaywgU0lHQUJSVCk7CisgICAgc2lncHJvY21hc2soU0lHX0JMT0NLLCAmc2lnbWFzaywgTlVMTCk7CisKKyAgICAvKiBVc2UgL3Byb2Mvc2VsZi9leGUgbGluayB0byBvYnRhaW4gdGhlIHByb2dyYW0gbmFtZSBmb3IgbG9nZ2luZworICAgICAqIHB1cnBvc2VzLiBJZiBpdCdzIG5vdCBhdmFpbGFibGUsIHdlIHNldCBpdCB0byAidW5rbm93biIgKi8KKyAgICBpZiAoKGNvdW50ID0gcmVhZGxpbmsoIi9wcm9jL3NlbGYvZXhlIiwgcGF0aCwgc2l6ZW9mKHBhdGgpIC0gMSkpID09IC0xKSB7CisgICAgICAgIHN0cmxjcHkocGF0aCwgInVua25vd24iLCBzaXplb2YocGF0aCkpOworICAgIH0gZWxzZSB7CisgICAgICAgIHBhdGhbY291bnRdID0gJ1wwJzsKKyAgICB9CisKKyAgICAvKiBEbyBhIGJlc3QgZWZmb3J0IGF0IGxvZ2dpbmcuIFRoaXMgZW5kcyB1cCBjYWxsaW5nIHdyaXRldigyKSAqLworICAgIF9fbGliY19hbmRyb2lkX2xvZ19wcmludChBTkRST0lEX0xPR19GQVRBTCwgcGF0aCwgbWVzc2FnZSk7CisKKyAgICAvKiBNYWtlIHN1cmUgdGhlcmUgaXMgbm8gZGVmYXVsdCBhY3Rpb24gZm9yIFNJR0FCUlQgKi8KKyAgICBiemVybygmc2EsIHNpemVvZihzdHJ1Y3Qgc2lnYWN0aW9uKSk7CisgICAgc2lnZW1wdHlzZXQoJnNhLnNhX21hc2spOworICAgIHNhLnNhX2ZsYWdzID0gMDsKKyAgICBzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDsKKyAgICBzaWdhY3Rpb24oU0lHQUJSVCwgJnNhLCBOVUxMKTsKKworICAgIC8qIFRlcm1pbmF0ZSB0aGUgcHJvY2VzcyBhbmQgZXhpdCBpbW1lZGlhdGVseSAqLworICAgIGtpbGwoZ2V0cGlkKCksIFNJR0FCUlQpOworCisgICAgX2V4aXQoMTI3KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3N0dWJzLmMgYi9saWJjL2Jpb25pYy9zdHVicy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmNzZiYmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy9zdHVicy5jCkBAIC0wLDAgKzEsMzEyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8Z3JwLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxwd2QuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPG1udGVudC5oPgorI2luY2x1ZGUgPHByaXZhdGUvYW5kcm9pZF9maWxlc3lzdGVtX2NvbmZpZy5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiogVGhyZWFkLXNwZWNpZmljIHN0YXRlIGZvciB0aGUgc3R1YnMgZnVuY3Rpb25zCisgKiovCisKK3B0aHJlYWRfb25jZV90ICAgdGhlX29uY2UgPSBQVEhSRUFEX09OQ0VfSU5JVDsKK3B0aHJlYWRfa2V5X3QgICAgdGhlX2tleTsKKwordHlwZWRlZiBzdHJ1Y3QgeworICAgIHN0cnVjdCBwYXNzd2QgIHBhc3N3ZDsKKyAgICBzdHJ1Y3QgZ3JvdXAgICBncm91cDsKKyAgICBjaGFyKiAgICAgICAgICBncm91cF9tZW1iZXJzWzJdOworICAgIGNoYXIgICAgICAgICAgIGFwcF9uYW1lX2J1ZmZlclszMl07CisgICAgY2hhciAgICAgICAgICAgZ3JvdXBfbmFtZV9idWZmZXJbMzJdOworfSBzdHVic19zdGF0ZV90OworCitzdGF0aWMgdm9pZAorc3R1YnNfc3RhdGVfZnJlZSggdm9pZCogIF9zICkKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgcyA9IF9zOworICAgIGZyZWUocyk7Cit9CisKK3N0YXRpYyBzdHVic19zdGF0ZV90Kgorc3R1YnNfc3RhdGVfYWxsb2MoIHZvaWQgKQoreworICAgIHN0dWJzX3N0YXRlX3QqICBzID0gY2FsbG9jKDEsIHNpemVvZiAqcyk7CisKKyAgICBpZiAocyAhPSBOVUxMKSB7CisgICAgICAgIHMtPmdyb3VwLmdyX21lbSA9IHMtPmdyb3VwX21lbWJlcnM7CisgICAgfQorICAgIHJldHVybiBzOworfQorCitzdGF0aWMgdm9pZCBfX3N0dWJzX2tleV9pbml0KHZvaWQpCit7CisgICAgcHRocmVhZF9rZXlfY3JlYXRlKCAmdGhlX2tleSwgc3R1YnNfc3RhdGVfZnJlZSApOworfQorCitzdGF0aWMgc3R1YnNfc3RhdGVfdCoKK19fc3R1YnNfc3RhdGUodm9pZCkKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgczsKKworICAgIHB0aHJlYWRfb25jZSgmdGhlX29uY2UsIF9fc3R1YnNfa2V5X2luaXQpOworICAgIHMgPSBwdGhyZWFkX2dldHNwZWNpZmljKHRoZV9rZXkpOworICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgcyA9IHN0dWJzX3N0YXRlX2FsbG9jKCk7CisgICAgICAgIGlmIChzID09IE5VTEwpIHsKKyAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOyAgLyoganVzdCBpbiBjYXNlICovCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoIHB0aHJlYWRfc2V0c3BlY2lmaWModGhlX2tleSwgcykgIT0gMCApIHsKKyAgICAgICAgICAgICAgICBzdHVic19zdGF0ZV9mcmVlKHMpOworICAgICAgICAgICAgICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICAgICAgICAgIHMgICAgID0gTlVMTDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gczsKK30KKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKmFuZHJvaWRfaWluZm9fdG9fcGFzc3dkKAorICAgIHN0cnVjdCBwYXNzd2QgKnB3LCBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbykKK3sKKyAgICBwdy0+cHdfbmFtZSAgPSAoY2hhciopaWluZm8tPm5hbWU7CisgICAgcHctPnB3X3VpZCAgID0gaWluZm8tPmFpZDsKKyAgICBwdy0+cHdfZ2lkICAgPSBpaW5mby0+YWlkOworICAgIHB3LT5wd19kaXIgICA9ICIvIjsKKyAgICBwdy0+cHdfc2hlbGwgPSAiL3N5c3RlbS9iaW4vc2giOworICAgIHJldHVybiBwdzsKK30KKworc3RhdGljIHN0cnVjdCBncm91cCAqYW5kcm9pZF9paW5mb190b19ncm91cCgKKyAgICBzdHJ1Y3QgZ3JvdXAgKmdyLCBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbykKK3sKKyAgICBnci0+Z3JfbmFtZSAgID0gKGNoYXIqKSBpaW5mby0+bmFtZTsKKyAgICBnci0+Z3JfZ2lkICAgID0gaWluZm8tPmFpZDsKKyAgICBnci0+Z3JfbWVtWzBdID0gZ3ItPmdyX25hbWU7CisgICAgZ3ItPmdyX21lbVsxXSA9IE5VTEw7CisgICAgcmV0dXJuIGdyOworfQorCitzdGF0aWMgc3RydWN0IHBhc3N3ZCAqYW5kcm9pZF9pZF90b19wYXNzd2QoCisgICAgc3RydWN0IHBhc3N3ZCAqcHcsIHVuc2lnbmVkIGlkKQoreworICAgIHN0cnVjdCBhbmRyb2lkX2lkX2luZm8gKmlpbmZvID0gYW5kcm9pZF9pZHM7CisgICAgdW5zaWduZWQgbjsKKyAgICBmb3IgKG4gPSAwOyBuIDwgYW5kcm9pZF9pZF9jb3VudDsgbisrKSB7CisgICAgICAgIGlmIChpaW5mb1tuXS5haWQgPT0gaWQpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX3Bhc3N3ZChwdywgaWluZm8gKyBuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBwYXNzd2QgKmFuZHJvaWRfbmFtZV90b19wYXNzd2QoCisgICAgc3RydWN0IHBhc3N3ZCAqcHcsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3RydWN0IGFuZHJvaWRfaWRfaW5mbyAqaWluZm8gPSBhbmRyb2lkX2lkczsKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoaWluZm9bbl0ubmFtZSwgbmFtZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX3Bhc3N3ZChwdywgaWluZm8gKyBuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncm91cCAqYW5kcm9pZF9pZF90b19ncm91cCgKKyAgICBzdHJ1Y3QgZ3JvdXAgKmdyLCB1bnNpZ25lZCBpZCkKK3sKKyAgICBzdHJ1Y3QgYW5kcm9pZF9pZF9pbmZvICppaW5mbyA9IGFuZHJvaWRfaWRzOworICAgIHVuc2lnbmVkIG47CisgICAgZm9yIChuID0gMDsgbiA8IGFuZHJvaWRfaWRfY291bnQ7IG4rKykgeworICAgICAgICBpZiAoaWluZm9bbl0uYWlkID09IGlkKSB7CisgICAgICAgICAgICByZXR1cm4gYW5kcm9pZF9paW5mb190b19ncm91cChnciwgaWluZm8gKyBuKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBncm91cCAqYW5kcm9pZF9uYW1lX3RvX2dyb3VwKAorICAgIHN0cnVjdCBncm91cCAqZ3IsIGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgc3RydWN0IGFuZHJvaWRfaWRfaW5mbyAqaWluZm8gPSBhbmRyb2lkX2lkczsKKyAgICB1bnNpZ25lZCBuOworICAgIGZvciAobiA9IDA7IG4gPCBhbmRyb2lkX2lkX2NvdW50OyBuKyspIHsKKyAgICAgICAgaWYgKCFzdHJjbXAoaWluZm9bbl0ubmFtZSwgbmFtZSkpIHsKKyAgICAgICAgICAgIHJldHVybiBhbmRyb2lkX2lpbmZvX3RvX2dyb3VwKGdyLCBpaW5mbyArIG4pOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgcGFzc3dkKiBnZXRwd3VpZCh1aWRfdCB1aWQpCit7CisgICAgc3R1YnNfc3RhdGVfdCogIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOworICAgIHN0cnVjdCBwYXNzd2QqICBwdzsKKworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHB3ID0gJnN0YXRlLT5wYXNzd2Q7CisKKyAgICBpZiAoIGFuZHJvaWRfaWRfdG9fcGFzc3dkKHB3LCB1aWQpICE9IE5VTEwgKQorICAgICAgICByZXR1cm4gcHc7CisKKyAgICBpZiAodWlkIDwgQUlEX0FQUCkgeworICAgICAgICBlcnJubyA9IEVOT0VOVDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgc25wcmludGYoIHN0YXRlLT5hcHBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+YXBwX25hbWVfYnVmZmVyLAorICAgICAgICAgICAgICAiYXBwXyVkIiwgdWlkIC0gQUlEX0FQUCApOworCisgICAgcHctPnB3X25hbWUgID0gc3RhdGUtPmFwcF9uYW1lX2J1ZmZlcjsKKyAgICBwdy0+cHdfZGlyICAgPSAiL2RhdGEiOworICAgIHB3LT5wd19zaGVsbCA9ICIvc3lzdGVtL2Jpbi9zaCI7CisgICAgcHctPnB3X3VpZCAgID0gdWlkOworICAgIHB3LT5wd19naWQgICA9IHVpZDsKKworICAgIHJldHVybiBwdzsKK30KKworc3RydWN0IHBhc3N3ZCogZ2V0cHduYW0oY29uc3QgY2hhciAqbG9naW4pCit7CisgICAgc3R1YnNfc3RhdGVfdCogIHN0YXRlID0gX19zdHVic19zdGF0ZSgpOworCisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGFuZHJvaWRfbmFtZV90b19wYXNzd2QoJnN0YXRlLT5wYXNzd2QsIGxvZ2luKTsKK30KKworaW50IGdldGdyb3VwbGlzdCAoY29uc3QgY2hhciAqdXNlciwgZ2lkX3QgZ3JvdXAsCisgICAgICAgICAgICAgICAgICBnaWRfdCAqZ3JvdXBzLCBpbnQgKm5ncm91cHMpIHsKKyAgICBpZiAoKm5ncm91cHMgPCAxKSB7CisgICAgICAgICpuZ3JvdXBzID0gMTsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBncm91cHNbMF0gPSBncm91cDsKKyAgICByZXR1cm4gKCpuZ3JvdXBzID0gMSk7Cit9CisKK2NoYXIqIGdldGxvZ2luKHZvaWQpCit7CisgICAgc3RydWN0IHBhc3N3ZCAqcHcgPSBnZXRwd3VpZChnZXR1aWQoKSk7CisKKyAgICBpZihwdykgeworICAgICAgICByZXR1cm4gcHctPnB3X25hbWU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdHJ1Y3QgZ3JvdXAqIGdldGdyZ2lkKGdpZF90IGdpZCkKK3sKKyAgICBzdHVic19zdGF0ZV90KiAgc3RhdGUgPSBfX3N0dWJzX3N0YXRlKCk7CisgICAgc3RydWN0IGdyb3VwKiAgIGdyOworCisgICAgaWYgKHN0YXRlID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgZ3IgPSBhbmRyb2lkX2lkX3RvX2dyb3VwKCZzdGF0ZS0+Z3JvdXAsIGdpZCk7CisgICAgaWYgKGdyICE9IE5VTEwpCisgICAgICAgIHJldHVybiBncjsKKworICAgIGlmIChnaWQgPCBBSURfQVBQKSB7CisgICAgICAgIGVycm5vID0gRU5PRU5UOworICAgICAgICByZXR1cm4gTlVMTDsKKyAgICB9CisKKyAgICBzbnByaW50ZihzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsIHNpemVvZiBzdGF0ZS0+Z3JvdXBfbmFtZV9idWZmZXIsCisgICAgICAgICAgICAgImFwcF8lZCIsIGdpZCAtIEFJRF9BUFApOworCisgICAgZ3IgPSAmc3RhdGUtPmdyb3VwOworCisgICAgZ3ItPmdyX25hbWUgICA9IHN0YXRlLT5ncm91cF9uYW1lX2J1ZmZlcjsKKyAgICBnci0+Z3JfZ2lkICAgID0gZ2lkOworICAgIGdyLT5ncl9tZW1bMF0gPSBnci0+Z3JfbmFtZTsKKyAgICBnci0+Z3JfbWVtWzFdID0gTlVMTDsKKworICAgIHJldHVybiBncjsKK30KKworc3RydWN0IGdyb3VwKiBnZXRncm5hbShjb25zdCBjaGFyICpuYW1lKQoreworICAgIHN0dWJzX3N0YXRlX3QqICBzdGF0ZSA9IF9fc3R1YnNfc3RhdGUoKTsKKworICAgIGlmIChzdGF0ZSA9PSBOVUxMKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIHJldHVybiBhbmRyb2lkX25hbWVfdG9fZ3JvdXAoJnN0YXRlLT5ncm91cCwgbmFtZSk7Cit9CisKK3N0cnVjdCBuZXRlbnQqIGdldG5ldGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiRklYIE1FISBpbXBsZW1lbnQgZ2V0Z3JuYW0oKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKwordm9pZCBlbmRwd2VudCh2b2lkKQoreworfQorCitzdHJ1Y3QgbW50ZW50KiBnZXRtbnRlbnQoRklMRSogZikKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IGdldG1udGVudCgpICVzOiVkXG4iLCBfX0ZJTEVfXywgX19MSU5FX18pOworICAgIHJldHVybiBOVUxMOworfQorCitjaGFyKiB0dHluYW1lKGludCBmZCkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50IHR0eW5hbWUoKSAlczolZFxuIiwgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IG5ldGVudCAqZ2V0bmV0YnlhZGRyKHVpbnQzMl90IG5ldCwgaW50IHR5cGUpCit7CisgICAgZnByaW50ZihzdGRlcnIsICJGSVggTUUhIGltcGxlbWVudCAlcygpICVzOiVkXG4iLCBfX0ZVTkNUSU9OX18sIF9fRklMRV9fLCBfX0xJTkVfXyk7CisgICAgcmV0dXJuIE5VTEw7Cit9CisKK3N0cnVjdCBwcm90b2VudCAqZ2V0cHJvdG9ieW5hbWUoY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RydWN0IHByb3RvZW50ICpnZXRwcm90b2J5bnVtYmVyKGludCBwcm90bykKK3sKKyAgICBmcHJpbnRmKHN0ZGVyciwgIkZJWCBNRSEgaW1wbGVtZW50ICVzKCkgJXM6JWRcbiIsIF9fRlVOQ1RJT05fXywgX19GSUxFX18sIF9fTElORV9fKTsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy9zeXN0ZW1fcHJvcGVydGllcy5jIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTNiOWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9iaW9uaWMvc3lzdGVtX3Byb3BlcnRpZXMuYwpAQCAtMCwwICsxLDE3MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgPHN5cy9tbWFuLmg+CisKKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8c3lzL3NlbGVjdC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKworI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXworI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworI2luY2x1ZGUgPHN5cy9hdG9taWNzLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIHByb3BlcnR5X3NlcnZpY2VfbmFtZVtdID0gUFJPUF9TRVJWSUNFX05BTUU7CisKK3N0YXRpYyB1bnNpZ25lZCBkdW1teV9wcm9wcyA9IDA7CisKK3Byb3BfYXJlYSAqX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fID0gKHZvaWQqKSAmZHVtbXlfcHJvcHM7CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0aWVzX2luaXQodm9pZCkKK3sKKyAgICBwcm9wX2FyZWEgKnBhOworICAgIGludCBzLCBmZDsKKyAgICB1bnNpZ25lZCBzejsKKyAgICBjaGFyICplbnY7CisKKyAgICBpZihfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gIT0gKCh2b2lkKikgJmR1bW15X3Byb3BzKSkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBlbnYgPSBnZXRlbnYoIkFORFJPSURfUFJPUEVSVFlfV09SS1NQQUNFIik7CisgICAgaWYgKCFlbnYpIHsKKyAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKyAgICBmZCA9IGF0b2koZW52KTsKKyAgICBlbnYgPSBzdHJjaHIoZW52LCAnLCcpOworICAgIGlmICghZW52KSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgc3ogPSBhdG9pKGVudiArIDEpOworICAgIAorICAgIHBhID0gbW1hcCgwLCBzeiwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMCk7CisgICAgCisgICAgaWYocGEgPT0gTUFQX0ZBSUxFRCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYoKHBhLT5tYWdpYyAhPSBQUk9QX0FSRUFfTUFHSUMpIHx8IChwYS0+dmVyc2lvbiAhPSBQUk9QX0FSRUFfVkVSU0lPTikpIHsKKyAgICAgICAgbXVubWFwKHBhLCBzeik7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisKKyAgICBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX18gPSBwYTsKKyAgICByZXR1cm4gMDsKK30KKworY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kX250aCh1bnNpZ25lZCBuKQoreworICAgIHByb3BfYXJlYSAqcGEgPSBfX3N5c3RlbV9wcm9wZXJ0eV9hcmVhX187CisKKyAgICBpZihuID49IHBhLT5jb3VudCkgeworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICByZXR1cm4gVE9DX1RPX0lORk8ocGEsIHBhLT50b2Nbbl0pOworICAgIH0KK30KKworY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpCit7CisgICAgcHJvcF9hcmVhICpwYSA9IF9fc3lzdGVtX3Byb3BlcnR5X2FyZWFfXzsKKyAgICB1bnNpZ25lZCBjb3VudCA9IHBhLT5jb3VudDsKKyAgICB1bnNpZ25lZCAqdG9jID0gcGEtPnRvYzsKKyAgICB1bnNpZ25lZCBsZW4gPSBzdHJsZW4obmFtZSk7CisgICAgcHJvcF9pbmZvICpwaTsKKworICAgIHdoaWxlKGNvdW50LS0pIHsKKyAgICAgICAgdW5zaWduZWQgZW50cnkgPSAqdG9jKys7CisgICAgICAgIGlmKFRPQ19OQU1FX0xFTihlbnRyeSkgIT0gbGVuKSBjb250aW51ZTsKKyAgICAgICAgCisgICAgICAgIHBpID0gVE9DX1RPX0lORk8ocGEsIGVudHJ5KTsKKyAgICAgICAgaWYobWVtY21wKG5hbWUsIHBpLT5uYW1lLCBsZW4pKSBjb250aW51ZTsKKworICAgICAgICByZXR1cm4gcGk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKGNvbnN0IHByb3BfaW5mbyAqcGksIGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworICAgIHVuc2lnbmVkIHNlcmlhbCwgbGVuOworICAgIAorICAgIGZvcig7OykgeworICAgICAgICBzZXJpYWwgPSBwaS0+c2VyaWFsOworICAgICAgICB3aGlsZShTRVJJQUxfRElSVFkoc2VyaWFsKSkgeworICAgICAgICAgICAgX19mdXRleF93YWl0KCZwaS0+c2VyaWFsLCBzZXJpYWwsIDApOworICAgICAgICAgICAgc2VyaWFsID0gcGktPnNlcmlhbDsKKyAgICAgICAgfQorICAgICAgICBsZW4gPSBTRVJJQUxfVkFMVUVfTEVOKHNlcmlhbCk7CisgICAgICAgIG1lbWNweSh2YWx1ZSwgcGktPnZhbHVlLCBsZW4gKyAxKTsKKyAgICAgICAgaWYoc2VyaWFsID09IHBpLT5zZXJpYWwpIHsKKyAgICAgICAgICAgIGlmKG5hbWUgIT0gMCkgeworICAgICAgICAgICAgICAgIHN0cmNweShuYW1lLCBwaS0+bmFtZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gbGVuOworICAgICAgICB9CisgICAgfQorfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfZ2V0KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKnZhbHVlKQoreworICAgIGNvbnN0IHByb3BfaW5mbyAqcGkgPSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKG5hbWUpOworCisgICAgaWYocGkgIT0gMCkgeworICAgICAgICByZXR1cm4gX19zeXN0ZW1fcHJvcGVydHlfcmVhZChwaSwgMCwgdmFsdWUpOworICAgIH0gZWxzZSB7CisgICAgICAgIHZhbHVlWzBdID0gMDsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitpbnQgX19zeXN0ZW1fcHJvcGVydHlfd2FpdChjb25zdCBwcm9wX2luZm8gKnBpKQoreworICAgIHVuc2lnbmVkIG47CisgICAgaWYocGkgPT0gMCkgeworICAgICAgICBwcm9wX2FyZWEgKnBhID0gX19zeXN0ZW1fcHJvcGVydHlfYXJlYV9fOworICAgICAgICBuID0gcGEtPnNlcmlhbDsKKyAgICAgICAgZG8geworICAgICAgICAgICAgX19mdXRleF93YWl0KCZwYS0+c2VyaWFsLCBuLCAwKTsKKyAgICAgICAgfSB3aGlsZShuID09IHBhLT5zZXJpYWwpOworICAgIH0gZWxzZSB7CisgICAgICAgIG4gPSBwaS0+c2VyaWFsOworICAgICAgICBkbyB7CisgICAgICAgICAgICBfX2Z1dGV4X3dhaXQoJnBpLT5zZXJpYWwsIG4sIDApOworICAgICAgICB9IHdoaWxlKG4gPT0gcGktPnNlcmlhbCk7CisgICAgfQorICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9iaW9uaWMvdGhyZWFkX2F0ZXhpdC5jIGIvbGliYy9iaW9uaWMvdGhyZWFkX2F0ZXhpdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRjNGE1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy90aHJlYWRfYXRleGl0LmMKQEAgLTAsMCArMSw0NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBzb21lIHNpbXBsZSBnbHVlIHVzZWQgdG8gbWFrZSB0aGUgQlNEIGF0ZXhpdCBjb2RlIGhhcHB5ICovCisKKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisjaW5jbHVkZSAicHRocmVhZF9pbnRlcm5hbC5oIgorCitzdGF0aWMgcHRocmVhZF9tdXRleF90ICAgZ0F0RXhpdExvY2sgPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSOworCit2b2lkICBfdGhyZWFkX2F0ZXhpdF9sb2NrKCB2b2lkICkKK3sKKyAgcHRocmVhZF9tdXRleF9sb2NrKCAmZ0F0RXhpdExvY2sgKTsKK30KKwordm9pZCBfdGhyZWFkX2F0ZXhpdF91bmxvY2soIHZvaWQgKQoreworICBwdGhyZWFkX211dGV4X3VubG9jayggJmdBdEV4aXRMb2NrICk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvYmlvbmljL3V0aW1lLmMgYi9saWJjL2Jpb25pYy91dGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMzk4NDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2Jpb25pYy91dGltZS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKXV0aW1lLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisvL19fRkJTRElEKCIkRnJlZUJTRDogL3JlcG9tYW4vci9uY3ZzL3NyYy9saWIvbGliYy9nZW4vdXRpbWUuYyx2IDEuMyAyMDA3LzAxLzA5IDAwOjI3OjU2IGltcCBFeHAgJCIpOworCisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPHV0aW1lLmg+CisKK2ludAordXRpbWUocGF0aCwgdGltZXMpCisJY29uc3QgY2hhciAqcGF0aDsKKwljb25zdCBzdHJ1Y3QgdXRpbWJ1ZiAqdGltZXM7Cit7CisJc3RydWN0IHRpbWV2YWwgdHZbMl0sICp0dnA7CisKKwlpZiAodGltZXMpIHsKKwkJdHZbMF0udHZfc2VjID0gdGltZXMtPmFjdGltZTsKKwkJdHZbMV0udHZfc2VjID0gdGltZXMtPm1vZHRpbWU7CisJCXR2WzBdLnR2X3VzZWMgPSB0dlsxXS50dl91c2VjID0gMDsKKwkJdHZwID0gdHY7CisJfSBlbHNlCisJCXR2cCA9IE5VTEw7CisJcmV0dXJuICh1dGltZXMocGF0aCwgdHZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2Jpb25pYy91dG1wLmMgYi9saWJjL2Jpb25pYy91dG1wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzNiNTVkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvYmlvbmljL3V0bXAuYwpAQCAtMCwwICsxLDkzIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMjAwMiBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IENocmlzdG9zIFpvdWxhcy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHV0bXAuaD4KKworc3RhdGljIHN0cnVjdCB1dG1wIHV0bXA7CitzdGF0aWMgRklMRSAqdXQ7CitzdGF0aWMgY2hhciB1dGZpbGVbTUFYUEFUSExFTl0gPSBfUEFUSF9VVE1QOworCit2b2lkCitzZXR1dGVudCh2b2lkKQoreworCWlmICh1dCA9PSBOVUxMKQorCQlyZXR1cm47CisJKHZvaWQpZnNlZWtvKHV0LCAob2ZmX3QpMCwgU0VFS19TRVQpOworfQorCitzdHJ1Y3QgdXRtcCAqCitnZXR1dGVudCh2b2lkKQoreworCWlmICh1dCA9PSBOVUxMKSB7CisJCWlmICgodXQgPSBmb3Blbih1dGZpbGUsICJyIikpID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKGZyZWFkKCZ1dG1wLCBzaXplb2YodXRtcCksIDEsIHV0KSA9PSAxKQorCQlyZXR1cm4gJnV0bXA7CisJcmV0dXJuIE5VTEw7Cit9CisKK3ZvaWQKK2VuZHV0ZW50KHZvaWQpCit7CisJaWYgKHV0ICE9IE5VTEwpIHsKKwkJKHZvaWQpZmNsb3NlKHV0KTsKKwkJdXQgPSBOVUxMOworCX0KK30KKworaW50Cit1dG1wbmFtZShjb25zdCBjaGFyICpmbmFtZSkKK3sKKwlzaXplX3QgbGVuID0gc3RybGVuKGZuYW1lKTsKKworCWlmIChsZW4gPj0gc2l6ZW9mKHV0ZmlsZSkpCisJCXJldHVybiAwOworCisJLyogbXVzdCBub3QgZW5kIGluIHghICovCisJaWYgKGZuYW1lW2xlbiAtIDFdID09ICd4JykKKwkJcmV0dXJuIDA7CisKKwkodm9pZClzdHJsY3B5KHV0ZmlsZSwgZm5hbWUsIHNpemVvZih1dGZpbGUpKTsKKwllbmR1dGVudCgpOworCXJldHVybiAxOworfQpkaWZmIC0tZ2l0IGEvbGliYy9jdHlwZV9wcml2YXRlLmggYi9saWJjL2N0eXBlX3ByaXZhdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNjNzkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9jdHlwZV9wcml2YXRlLmgKQEAgLTAsMCArMSw3IEBACisvKiAkT3BlbkJTRDogY3R5cGVfcHJpdmF0ZS5oLHYgMS4xIDIwMDUvMDgvMDggMDU6NTM6MDAgZXNwaWUgRXhwICQgKi8KKy8qIFdyaXR0ZW4gYnkgTWFyYyBFc3BpZSwgcHVibGljIGRvbWFpbiAqLworI2RlZmluZSBDVFlQRV9OVU1fQ0hBUlMgICAgICAgMjU2CitleHRlcm4gY29uc3QgY2hhciBfQ19jdHlwZV9bXTsKK2V4dGVybiBjb25zdCBzaG9ydCBfQ190b3VwcGVyX1tdOworZXh0ZXJuIGNvbnN0IHNob3J0IF9DX3RvbG93ZXJfW107CisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hbGxvY2EuaCBiL2xpYmMvaW5jbHVkZS9hbGxvY2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYzUwZmMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2FsbG9jYS5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0FMTE9DQV9ICisjZGVmaW5lIF9BTExPQ0FfSAorCisjZGVmaW5lIGFsbG9jYShzaXplKSAgIF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZSkKKworI2VuZGlmIC8qIF9BTExPQ0FfSCAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmggYi9saWJjL2luY2x1ZGUvYXJwYS9pbmV0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ViYjg3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9hcnBhL2luZXQuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9BUlBBX0lORVRfSF8KKyNkZWZpbmUgX0FSUEFfSU5FVF9IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW42Lmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiB1aW50MzJfdCBpbl9hZGRyX3Q7CisKK2V4dGVybiB1aW50MzJfdCAgICAgIGluZXRfYWRkcihjb25zdCBjaGFyICopOworCitleHRlcm4gaW50ICAgICAgICAgICBpbmV0X2F0b24oY29uc3QgY2hhciAqLCBzdHJ1Y3QgaW5fYWRkciAqKTsKK2V4dGVybiBjaGFyKiAgICAgICAgIGluZXRfbnRvYShzdHJ1Y3QgaW5fYWRkcik7CisKK2V4dGVybiBpbnQgICAgICAgICAgIGluZXRfcHRvbihpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKK2V4dGVybiBjb25zdCBjaGFyKiAgIGluZXRfbnRvcChpbnQsIGNvbnN0IHZvaWQgKiwgY2hhciAqLCBzaXplX3QpOworCitleHRlcm4gdW5zaWduZWQgaW50ICBpbmV0X25zYXBfYWRkcihjb25zdCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKK2V4dGVybiBjaGFyKiAgICAgICAgIGluZXRfbnNhcF9udG9hKGludCwgY29uc3QgdW5zaWduZWQgY2hhciAqLCBjaGFyICopOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0FSUEFfSU5FVF9IXyAqLworCisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaCBiL2xpYmMvaW5jbHVkZS9hcnBhL25hbWVzZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjhlYWRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2FycGEvbmFtZXNlci5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX2FycGFfbmFtZXNlcl9oCisjZGVmaW5lIF9hcnBhX25hbWVzZXJfaAorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKy8qIHRoaXMgaGVhZGVyIGludGVudGlvbmFsbHkgYmxhbmsKKyAqCisgKiB0aGUgZGVmaW5pdGlvbnMgbm9ybWFsbHkgZm91bmQgaW4gPGFycGEvbmFtZXNlci5oPiBhcmUKKyAqIHJlYWxseSBhIGJ1bmNoIG9mIHJlc29sdmVyJ3MgaW50ZXJuYWwgZGVjbGFyYXRpb25zIHRoYXQKKyAqIHNob3VsZCBub3QgYmUgZXhwb3NlZCB0byBjbGllbnQgY29kZSBpbiBhbnkgd2F5CisgKi8KKworI2VuZGlmIC8qIF9hcnBhX25hbWVzZXJfaCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2Fzc2VydC5oIGIvbGliYy9pbmNsdWRlL2Fzc2VydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYyNDcwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYXNzZXJ0LmgKQEAgLTAsMCArMSw2NSBAQAorLyoJJE9wZW5CU0Q6IGFzc2VydC5oLHYgMS4xMiAyMDA2LzAxLzMxIDEwOjUzOjUxIGhzaG9leGVyIEV4cCAkCSovCisvKgkkTmV0QlNEOiBhc3NlcnQuaCx2IDEuNiAxOTk0LzEwLzI2IDAwOjU1OjQ0IGNnZCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpYXNzZXJ0LmgJOC4yIChCZXJrZWxleSkgMS8yMS85NAorICovCisKKy8qCisgKiBVbmxpa2Ugb3RoZXIgQU5TSSBoZWFkZXIgZmlsZXMsIDxhc3NlcnQuaD4gbWF5IHVzZWZ1bGx5IGJlIGluY2x1ZGVkCisgKiBtdWx0aXBsZSB0aW1lcywgd2l0aCBhbmQgd2l0aG91dCBOREVCVUcgZGVmaW5lZC4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyN1bmRlZiBhc3NlcnQKKyN1bmRlZiBfYXNzZXJ0CisKKyNpZmRlZiBOREVCVUcKKyMgZGVmaW5lCWFzc2VydChlKQkoKHZvaWQpMCkKKyMgZGVmaW5lCV9hc3NlcnQoZSkJKCh2b2lkKTApCisjZWxzZQorIyBkZWZpbmUJX2Fzc2VydChlKQlhc3NlcnQoZSkKKyMgaWYgX19JU09fQ19WSVNJQkxFID49IDE5OTkKKyMgIGRlZmluZQlhc3NlcnQoZSkJKChlKSA/ICh2b2lkKTAgOiBfX2Fzc2VydDIoX19GSUxFX18sIF9fTElORV9fLCBfX2Z1bmNfXywgI2UpKQorIyBlbHNlCisjICBkZWZpbmUJYXNzZXJ0KGUpCSgoZSkgPyAodm9pZCkwIDogX19hc3NlcnQoX19GSUxFX18sIF9fTElORV9fLCAjZSkpCisjIGVuZGlmCisjZW5kaWYKKworX19CRUdJTl9ERUNMUworX19kZWFkIHZvaWQgX19hc3NlcnQoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CitfX2RlYWQgdm9pZCBfX2Fzc2VydDIoY29uc3QgY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK19fRU5EX0RFQ0xTCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvYnl0ZXN3YXAuaCBiL2xpYmMvaW5jbHVkZS9ieXRlc3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ZDJhZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvYnl0ZXN3YXAuaApAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9CWVRFU1dBUF9IXworI2RlZmluZSBfQllURVNXQVBfSF8KKworI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKworI2RlZmluZSAgYnN3YXBfMTYoeCkgICBzd2FwMTYoeCkKKyNkZWZpbmUgIGJzd2FwXzMyKHgpICAgc3dhcDMyKHgpCisjZGVmaW5lICBic3dhcF82NCh4KSAgIHN3YXA2NCh4KQorCisjZW5kaWYgLyogX0JZVEVTV0FQX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvY3R5cGUuaCBiL2xpYmMvaW5jbHVkZS9jdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjlmZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvY3R5cGUuaApAQCAtMCwwICsxLDIwMyBAQAorLyoJJE9wZW5CU0Q6IGN0eXBlLmgsdiAxLjE5IDIwMDUvMTIvMTMgMDA6MzU6MjIgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogY3R5cGUuaCx2IDEuMTQgMTk5NC8xMC8yNiAwMDo1NTo0NyBjZ2QgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIyljdHlwZS5oCTUuMyAoQmVya2VsZXkpIDQvMy85MQorICovCisKKyNpZm5kZWYgX0NUWVBFX0hfCisjZGVmaW5lIF9DVFlQRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNkZWZpbmUJX1UJMHgwMQorI2RlZmluZQlfTAkweDAyCisjZGVmaW5lCV9OCTB4MDQKKyNkZWZpbmUJX1MJMHgwOAorI2RlZmluZQlfUAkweDEwCisjZGVmaW5lCV9DCTB4MjAKKyNkZWZpbmUJX1gJMHg0MAorI2RlZmluZQlfQgkweDgwCisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGNvbnN0IGNoYXIJKl9jdHlwZV87CitleHRlcm4gY29uc3Qgc2hvcnQJKl90b2xvd2VyX3RhYl87CitleHRlcm4gY29uc3Qgc2hvcnQJKl90b3VwcGVyX3RhYl87CisKKy8qIGV4dGVybiBfX2lubGluZSBpcyBhIEdOVSBDIGV4dGVuc2lvbiAqLworI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lCV9fQ1RZUEVfSU5MSU5FCWV4dGVybiBfX2lubGluZQorI2Vsc2UKKyNkZWZpbmUJX19DVFlQRV9JTkxJTkUJc3RhdGljIF9faW5saW5lCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pIHx8IGRlZmluZWQoX0FOU0lfTElCUkFSWSkgfHwgZGVmaW5lZChsaW50KQoraW50CWlzYWxudW0oaW50KTsKK2ludAlpc2FscGhhKGludCk7CitpbnQJaXNjbnRybChpbnQpOworaW50CWlzZGlnaXQoaW50KTsKK2ludAlpc2dyYXBoKGludCk7CitpbnQJaXNsb3dlcihpbnQpOworaW50CWlzcHJpbnQoaW50KTsKK2ludAlpc3B1bmN0KGludCk7CitpbnQJaXNzcGFjZShpbnQpOworaW50CWlzdXBwZXIoaW50KTsKK2ludAlpc3hkaWdpdChpbnQpOworaW50CXRvbG93ZXIoaW50KTsKK2ludAl0b3VwcGVyKGludCk7CisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5IHx8IF9fUE9TSVhfVklTSUJMRSA+IDIwMDExMiBcCisgICAgfHwgX19YUEdfVklTSUJMRSA+IDYwMAoraW50CWlzYmxhbmsoaW50KTsKKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCitpbnQJaXNhc2NpaShpbnQpOworaW50CXRvYXNjaWkoaW50KTsKK2ludAlfdG9sb3dlcihpbnQpOworaW50CV90b3VwcGVyKGludCk7CisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFICovCisKKyNlbmRpZiAvKiBfX0dOVUNfXyB8fCBfQU5TSV9MSUJSQVJZIHx8IGxpbnQgKi8KKworI2lmIGRlZmluZWQoTkRFQlVHKQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNhbG51bShpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1V8X0x8X04pKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc2FscGhhKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfVXxfTCkpKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IGlzY250cmwoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX0MpKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IGlzZGlnaXQoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX04pKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IGlzZ3JhcGgoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9QfF9VfF9MfF9OKSkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNsb3dlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfTCkpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgaXNwcmludChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1B8X1V8X0x8X058X0IpKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc3B1bmN0KGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9QKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc3NwYWNlKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9TKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc3VwcGVyKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9VKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBpc3hkaWdpdChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX058X1gpKSk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCB0b2xvd2VyKGludCBjKQoreworCWlmICgodW5zaWduZWQgaW50KWMgPiAyNTUpCisJCXJldHVybiAoYyk7CisJcmV0dXJuICgoX3RvbG93ZXJfdGFiXyArIDEpW2NdKTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IHRvdXBwZXIoaW50IGMpCit7CisJaWYgKCh1bnNpZ25lZCBpbnQpYyA+IDI1NSkKKwkJcmV0dXJuIChjKTsKKwlyZXR1cm4gKChfdG91cHBlcl90YWJfICsgMSlbY10pOworfQorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX1BPU0lYX1ZJU0lCTEUgPiAyMDAxMTIgXAorICAgIHx8IF9fWFBHX1ZJU0lCTEUgPiA2MDAKK19fQ1RZUEVfSU5MSU5FIGludCBpc2JsYW5rKGludCBjKQoreworCXJldHVybiAoYyA9PSAnICcgfHwgYyA9PSAnXHQnKTsKK30KKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCitfX0NUWVBFX0lOTElORSBpbnQgaXNhc2NpaShpbnQgYykKK3sKKwlyZXR1cm4gKCh1bnNpZ25lZCBpbnQpYyA8PSAwMTc3KTsKK30KKworX19DVFlQRV9JTkxJTkUgaW50IHRvYXNjaWkoaW50IGMpCit7CisJcmV0dXJuIChjICYgMDE3Nyk7Cit9CisKK19fQ1RZUEVfSU5MSU5FIGludCBfdG9sb3dlcihpbnQgYykKK3sKKwlyZXR1cm4gKGMgLSAnQScgKyAnYScpOworfQorCitfX0NUWVBFX0lOTElORSBpbnQgX3RvdXBwZXIoaW50IGMpCit7CisJcmV0dXJuIChjIC0gJ2EnICsgJ0EnKTsKK30KKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KKworI2VuZGlmIC8qIE5ERUJVRyAqLworCitfX0VORF9ERUNMUworCisjdW5kZWYgX19DVFlQRV9JTkxJTkUKKworI2VuZGlmIC8qICFfQ1RZUEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9kaXJlbnQuaCBiL2xpYmMvaW5jbHVkZS9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGZiNjM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2RpcmVudC5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0RJUkVOVF9IXworI2RlZmluZSBfRElSRU5UX0hfCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisjaWZuZGVmIERUX1VOS05PV04KKyNkZWZpbmUgIERUX1VOS05PV04gICAgIDAKKyNkZWZpbmUgIERUX0ZJRk8gICAgICAgIDEKKyNkZWZpbmUgIERUX0NIUiAgICAgICAgIDIKKyNkZWZpbmUgIERUX0RJUiAgICAgICAgIDQKKyNkZWZpbmUgIERUX0JMSyAgICAgICAgIDYKKyNkZWZpbmUgIERUX1JFRyAgICAgICAgIDgKKyNkZWZpbmUgIERUX0xOSyAgICAgICAgIDEwCisjZGVmaW5lICBEVF9TT0NLICAgICAgICAxMgorI2RlZmluZSAgRFRfV0hUICAgICAgICAgMTQKKyNlbmRpZgorCisvKiB0aGUgZm9sbG93aW5nIHN0cnVjdHVyZSBpcyByZWFsbHkgY2FsbGVkIGRpcmVudDY0IGJ5IHRoZSBrZXJuZWwKKyAqIGhlYWRlcnMuIFRoZXkgYWxzbyBkZWZpbmUgYSBzdHJ1Y3QgZGlyZW50LCBidXQgdGhlIGxhdHRlciBsYWNrCisgKiB0aGUgZF90eXBlIGZpZWxkIHdoaWNoIGlzIHJlcXVpcmVkIGJ5IHNvbWUgbGlicmFyaWVzIChlLmcuIGhvdHBsdWcpCisgKiB3aG8gYXNzdW1lIHRvIGJlIGFibGUgdG8gYWNjZXNzIGl0IGRpcmVjdGx5LiBzYWQuLi4KKyAqLworc3RydWN0IGRpcmVudCB7CisgICAgdWludDY0X3QgICAgICAgICBkX2lubzsKKyAgICBpbnQ2NF90ICAgICAgICAgIGRfb2ZmOworICAgIHVuc2lnbmVkIHNob3J0ICAgZF9yZWNsZW47CisgICAgdW5zaWduZWQgY2hhciAgICBkX3R5cGU7CisgICAgY2hhciAgICAgICAgICAgICBkX25hbWVbMjU2XTsKK307CisKK3R5cGVkZWYgc3RydWN0IERJUiAgRElSOworCitleHRlcm4gIGludCAgICAgICAgICAgICAgZ2V0ZGVudHModW5zaWduZWQgaW50LCBzdHJ1Y3QgZGlyZW50KiwgdW5zaWduZWQgaW50KTsKK2V4dGVybiAgRElSKiAgICAgICAgICAgICBvcGVuZGlyKGNvbnN0IGNoYXIqICBkaXJwYXRoKTsKK2V4dGVybiAgRElSKiAgICAgICAgICAgICBmZG9wZW5kaXIoaW50IGZkKTsKK2V4dGVybiAgc3RydWN0IGRpcmVudCogICByZWFkZGlyKERJUiogIGRpcnApOworZXh0ZXJuICBpbnQgICAgICAgICAgICAgIHJlYWRkaXJfcihESVIqICBkaXJwLCBzdHJ1Y3QgZGlyZW50ICplbnRyeSwgc3RydWN0IGRpcmVudCAqKnJlc3VsdCk7CitleHRlcm4gIGludCAgICAgICAgICAgICAgY2xvc2VkaXIoRElSKiAgZGlycCk7CitleHRlcm4gIHZvaWQgICAgICAgICAgICAgcmV3aW5kZGlyKERJUiAqZGlycCk7CitleHRlcm4gIGludCAgICAgICAgICAgICAgZGlyZmQoRElSKiBkaXJwKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9ESVJFTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9kbGZjbi5oIGIvbGliYy9pbmNsdWRlL2RsZmNuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTU4Mjc5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9kbGZjbi5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX19ETEZDTl9IX18KKyNkZWZpbmUgX19ETEZDTl9IX18KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiB2b2lkKiAgICAgICAgZGxvcGVuKGNvbnN0IGNoYXIqICBmaWxlbmFtZSwgaW50IGZsYWcpOworZXh0ZXJuIGludCAgICAgICAgICBkbGNsb3NlKHZvaWQqICBoYW5kbGUpOworZXh0ZXJuIGNvbnN0IGNoYXIqICBkbGVycm9yKHZvaWQpOworZXh0ZXJuIHZvaWQqICAgICAgICBkbHN5bSh2b2lkKiAgaGFuZGxlLCBjb25zdCBjaGFyKiAgc3ltYm9sKTsKKworZW51bSB7CisgIFJUTERfTk9XICA9IDAsCisgIFJUTERfTEFaWSA9IDEsCisKKyAgUlRMRF9MT0NBTCAgPSAwLAorICBSVExEX0dMT0JBTCA9IDIsCit9OworCisjZGVmaW5lIFJUTERfREVGQVVMVCAgKCh2b2lkKikgMHhmZmZmZmZmZikKKyNkZWZpbmUgUlRMRF9ORVhUICAgICAoKHZvaWQqKSAweGZmZmZmZmZlKQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX19ETEZDTl9IICovCisKKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2VsZi5oIGIvbGliYy9pbmNsdWRlL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhODZhNjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZWxmLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRUxGX0gKKyNkZWZpbmUgX0VMRl9ICisKKy8qIHRoZXNlIGRlZmluaXRpb25zIGFyZSBtaXNzaW5nIGZyb20gdGhlIEJTRCBzb3VyY2VzICovCitlbnVtIHsKKyAgICBBVF9OVUxMID0gMCwKKyAgICBBVF9JR05PUkUsCisgICAgQVRfRVhFQ0ZELAorICAgIEFUX1BIRFIsCisgICAgQVRfUEhFTlQsCisgICAgQVRfUEhOVU0sCisgICAgQVRfUEFHRVNaLAorICAgIEFUX0JBU0UsCisgICAgQVRfRkxBR1MsCisgICAgQVRfRU5UUlksCisgICAgQVRfTk9URUxGLAorICAgIEFUX1VJRCwKKyAgICBBVF9FVUlELAorICAgIEFUX0dJRCwKKyAgICBBVF9FR0lELAorICAgIEFUX1BMQVRGT1JNLAorICAgIEFUX0hXQ0FQLAorICAgIEFUX0NMS1RDSywKKworICAgIEFUX1NFQ1VSRSA9IDIzCit9OworCisjaW5jbHVkZSA8c3lzL2V4ZWNfZWxmLmg+CisKKyNlbmRpZiAvKiBfRUxGX0ggKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2VuZGlhbi5oIGIvbGliYy9pbmNsdWRlL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NWI0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZW5kaWFuLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfRU5ESUFOX0hfCisjZGVmaW5lIF9FTkRJQU5fSF8KKworI2luY2x1ZGUgPHN5cy9lbmRpYW4uaD4KKworI2VuZGlmIC8qIF9FTkRJQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9lcnIuaCBiL2xpYmMvaW5jbHVkZS9lcnIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2Vyci5oCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZXJybm8uaCBiL2xpYmMvaW5jbHVkZS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJiMjY4NWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZXJybm8uaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9FUlJOT19ICisjZGVmaW5lIF9FUlJOT19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIG9uIExpbnV4LCBFTk9UU1VQIGFuZCBFT1BOT1RTVVBQIGFyZSBkZWZpbmVkIGFzIHRoZSBzYW1lIGVycm9yIGNvZGUKKyAqIGV2ZW4gaWYgMTAwMC4zIHN0YXRlcyB0aGF0IHRoZXkgc2hvdWxkIGJlIGRpZmZlcmVudAorICovCisjaWZuZGVmICBFTk9UVVAKKyNkZWZpbmUgIEVOT1RTVVAgIEVPUE5PVFNVUFAKKyNlbmRpZgorCisvKiBpbnRlcm5hbCBmdW5jdGlvbiB0aGF0IHNob3VsZCAqb25seSogYmUgY2FsbGVkIGZyb20gc3lzdGVtIGNhbGxzICovCisvKiB1c2UgZXJybm8gPSB4eHh4IGluc3RlYWQgaW4gQyBjb2RlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCitleHRlcm4gaW50ICAgIF9fc2V0X2Vycm5vKGludCAgZXJyb3IpOworCisvKiBpbnRlcm5hbCBmdW5jdGlvbiByZXR1cm5pbmcgdGhlIGFkZHJlc3Mgb2YgdGhlIHRocmVhZC1zcGVjaWZpYyBlcnJubyAqLworZXh0ZXJuIHZvbGF0aWxlIGludCogICBfX2Vycm5vKHZvaWQpOworCisvKiBhIG1hY3JvIGV4cGFuZGluZyB0byB0aGUgZXJybm8gbC12YWx1ZSAqLworI2RlZmluZSAgZXJybm8gICAoKl9fZXJybm8oKSkKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9FUlJOT19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZmNudGwuaCBiL2xpYmMvaW5jbHVkZS9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU5ZTcxMzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZmNudGwuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9GQ05UTF9ICisjZGVmaW5lIF9GQ05UTF9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9mY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPiAgLyogdGhpcyBpcyBub3QgcmVxdWlyZWQsIGJ1dCBtYWtlcyBjbGllbnQgY29kZSBtdWNoIGhhcHBpZXIgKi8KKworX19CRUdJTl9ERUNMUworCisjaWZuZGVmIE9fQVNZTkMKKyNkZWZpbmUgT19BU1lOQyAgRkFTWU5DCisjZW5kaWYKKworZXh0ZXJuIGludCAgb3Blbihjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBtb2RlLCAuLi4pOworZXh0ZXJuIGludCAgb3BlbmF0KGludCBmZCwgY29uc3QgY2hhciogIHBhdGgsIGludCAgbW9kZSwgLi4uKTsKK2V4dGVybiBpbnQgIHVubGlua2F0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncyk7CitleHRlcm4gaW50ICBmY250bChpbnQgICBmZCwgaW50ICAgY29tbWFuZCwgLi4uKTsKK2V4dGVybiBpbnQgIGNyZWF0KGNvbnN0IGNoYXIqICBwYXRoLCBtb2RlX3QgIG1vZGUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0ZDTlRMX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9mbm1hdGNoLmggYi9saWJjL2luY2x1ZGUvZm5tYXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3MmI0ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvZm5tYXRjaC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0ZOTUFUQ0hfSAorI2RlZmluZSBfRk5NQVRDSF9ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIEZOTV9OT01BVENIICAgICAgMSAgICAgLyogTWF0Y2ggZmFpbGVkLiAqLworI2RlZmluZSBGTk1fTk9TWVMgICAgICAgIDIgICAgIC8qIEZ1bmN0aW9uIG5vdCBzdXBwb3J0ZWQgKHVudXNlZCkuICovCisKKyNkZWZpbmUgRk5NX05PRVNDQVBFICAgICAweDAxICAgICAgICAvKiBEaXNhYmxlIGJhY2tzbGFzaCBlc2NhcGluZy4gKi8KKyNkZWZpbmUgRk5NX1BBVEhOQU1FICAgICAweDAyICAgICAgICAvKiBTbGFzaCBtdXN0IGJlIG1hdGNoZWQgYnkgc2xhc2guICovCisjZGVmaW5lIEZOTV9QRVJJT0QgICAgICAgMHgwNCAgICAgICAgLyogUGVyaW9kIG11c3QgYmUgbWF0Y2hlZCBieSBwZXJpb2QuICovCisjZGVmaW5lIEZOTV9MRUFESU5HX0RJUiAgMHgwOCAgICAgICAgLyogSWdub3JlIC88dGFpbD4gYWZ0ZXIgSW1hdGNoLiAqLworI2RlZmluZSBGTk1fQ0FTRUZPTEQgICAgIDB4MTAgICAgICAgIC8qIENhc2UgaW5zZW5zaXRpdmUgc2VhcmNoLiAqLworCisjZGVmaW5lIEZOTV9JR05PUkVDQVNFICAgRk5NX0NBU0VGT0xECisjZGVmaW5lIEZOTV9GSUxFX05BTUUgICAgRk5NX1BBVEhOQU1FCisKK2V4dGVybiBpbnQgIGZubWF0Y2goY29uc3QgY2hhciAqcGF0dGVybiwgY29uc3QgY2hhciAqc3RyaW5nLCBpbnQgZmxhZ3MpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0ZOTUFUQ0hfSCAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvZ2V0b3B0LmggYi9saWJjL2luY2x1ZGUvZ2V0b3B0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI0OTU0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9nZXRvcHQuaApAQCAtMCwwICsxLDg1IEBACisvKgkkT3BlbkJTRDogZ2V0b3B0LmgsdiAxLjEgMjAwMi8xMi8wMyAyMDoyNDoyOSBtaWxsZXJ0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBnZXRvcHQuaCx2IDEuNCAyMDAwLzA3LzA3IDEwOjQzOjU0IGFkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgRGlldGVyIEJhcm9uIGFuZCBUaG9tYXMgS2xhdXNuZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0dFVE9QVF9IXworI2RlZmluZSBfR0VUT1BUX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworLyoKKyAqIEdOVS1saWtlIGdldG9wdF9sb25nKCkgYW5kIDQuNEJTRCBnZXRzdWJvcHQoKS9vcHRyZXNldCBleHRlbnNpb25zCisgKi8KKyNkZWZpbmUgbm9fYXJndW1lbnQgICAgICAgIDAKKyNkZWZpbmUgcmVxdWlyZWRfYXJndW1lbnQgIDEKKyNkZWZpbmUgb3B0aW9uYWxfYXJndW1lbnQgIDIKKworc3RydWN0IG9wdGlvbiB7CisJLyogbmFtZSBvZiBsb25nIG9wdGlvbiAqLworCWNvbnN0IGNoYXIgKm5hbWU7CisJLyoKKwkgKiBvbmUgb2Ygbm9fYXJndW1lbnQsIHJlcXVpcmVkX2FyZ3VtZW50LCBhbmQgb3B0aW9uYWxfYXJndW1lbnQ6CisJICogd2hldGhlciBvcHRpb24gdGFrZXMgYW4gYXJndW1lbnQKKwkgKi8KKwlpbnQgaGFzX2FyZzsKKwkvKiBpZiBub3QgTlVMTCwgc2V0ICpmbGFnIHRvIHZhbCB3aGVuIG9wdGlvbiBmb3VuZCAqLworCWludCAqZmxhZzsKKwkvKiBpZiBmbGFnIG5vdCBOVUxMLCB2YWx1ZSB0byBzZXQgKmZsYWcgdG87IGVsc2UgcmV0dXJuIHZhbHVlICovCisJaW50IHZhbDsKK307CisKK19fQkVHSU5fREVDTFMKK2ludAkgZ2V0b3B0X2xvbmcoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCSAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqKTsKK2ludAkgZ2V0b3B0X2xvbmdfb25seShpbnQsIGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCisJICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKiwgaW50ICopOworI2lmbmRlZiBfR0VUT1BUX0RFRklORURfCisjZGVmaW5lIF9HRVRPUFRfREVGSU5FRF8KK2ludAkgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CitpbnQJIGdldHN1Ym9wdChjaGFyICoqLCBjaGFyICogY29uc3QgKiwgY2hhciAqKik7CisKK2V4dGVybiAgIGNoYXIgKm9wdGFyZzsgICAgICAgICAgICAgICAgICAvKiBnZXRvcHQoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCitleHRlcm4gICBpbnQgb3B0ZXJyOworZXh0ZXJuICAgaW50IG9wdGluZDsKK2V4dGVybiAgIGludCBvcHRvcHQ7CitleHRlcm4gICBpbnQgb3B0cmVzZXQ7CitleHRlcm4gICBjaGFyICpzdWJvcHRhcmc7ICAgICAgICAgICAgICAgLyogZ2V0c3Vib3B0KDMpIGV4dGVybmFsIHZhcmlhYmxlICovCisjZW5kaWYKK19fRU5EX0RFQ0xTCisgCisjZW5kaWYgLyogIV9HRVRPUFRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9ncnAuaCBiL2xpYmMvaW5jbHVkZS9ncnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWZjMmJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2dycC5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCSRPcGVuQlNEOiBncnAuaCx2IDEuOCAyMDA1LzEyLzEzIDAwOjM1OjIyIG1pbGxlcnQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGdycC5oLHYgMS43IDE5OTUvMDQvMjkgMDU6MzA6NDAgY2dkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTg5LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylncnAuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfR1JQX0hfCisjZGVmaW5lCV9HUlBfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZQlfUEFUSF9HUk9VUAkJIi9ldGMvZ3JvdXAiCisjZW5kaWYKKworc3RydWN0IGdyb3VwIHsKKwljaGFyCSpncl9uYW1lOwkJLyogZ3JvdXAgbmFtZSAqLworCWNoYXIJKmdyX3Bhc3N3ZDsJCS8qIGdyb3VwIHBhc3N3b3JkICovCisJZ2lkX3QJZ3JfZ2lkOwkJCS8qIGdyb3VwIGlkICovCisJY2hhcgkqKmdyX21lbTsJCS8qIGdyb3VwIG1lbWJlcnMgKi8KK307CisKK19fQkVHSU5fREVDTFMKK3N0cnVjdCBncm91cAkqZ2V0Z3JnaWQoZ2lkX3QpOworc3RydWN0IGdyb3VwCSpnZXRncm5hbShjb25zdCBjaGFyICopOworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFID49IDIwMDExMiB8fCBfX1hQR19WSVNJQkxFCitzdHJ1Y3QgZ3JvdXAJKmdldGdyZW50KHZvaWQpOwordm9pZAkJIHNldGdyZW50KHZvaWQpOwordm9pZAkJIGVuZGdyZW50KHZvaWQpOworaW50CQkgZ2V0Z3JnaWRfcihnaWRfdCwgc3RydWN0IGdyb3VwICosIGNoYXIgKiwKKwkJICAgIHNpemVfdCwgc3RydWN0IGdyb3VwICoqKTsKK2ludAkJIGdldGdybmFtX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgZ3JvdXAgKiwgY2hhciAqLAorCQkgICAgc2l6ZV90LCBzdHJ1Y3QgZ3JvdXAgKiopOworI2VuZGlmCisjaWYgX19CU0RfVklTSUJMRQordm9pZAkJIHNldGdyZmlsZShjb25zdCBjaGFyICopOworaW50CQkgc2V0Z3JvdXBlbnQoaW50KTsKK2NoYXIJCSpncm91cF9mcm9tX2dpZChnaWRfdCwgaW50KTsKKyNlbmRpZgorCitpbnQgICBnZXRncm91cGxpc3QgKGNvbnN0IGNoYXIgKnVzZXIsIGdpZF90IGdyb3VwLAorICAgICAgICAgICAgICAgICAgZ2lkX3QgKmdyb3VwcywgaW50ICpuZ3JvdXBzKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX0dSUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2ludHR5cGVzLmggYi9saWJjL2luY2x1ZGUvaW50dHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYTMwM2NiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2ludHR5cGVzLmgKQEAgLTAsMCArMSwyNTggQEAKKy8qCSRPcGVuQlNEOiBpbnR0eXBlcy5oLHYgMS45IDIwMDYvMDEvMTUgMDA6NDc6NTEgbWlsbGVydCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3LCAyMDA1IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYJX0lOVFRZUEVTX0hfCisjZGVmaW5lCV9JTlRUWVBFU19IXworCisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX1NURENfRk9STUFUX01BQ1JPUykKKy8qCisgKiA3LjguMSBNYWNyb3MgZm9yIGZvcm1hdCBzcGVjaWZpZXJzCisgKgorICogRWFjaCBvZiB0aGUgZm9sbG93aW5nIG9iamVjdC1saWtlIG1hY3JvcyBleHBhbmRzIHRvIGEgc3RyaW5nCisgKiBsaXRlcmFsIGNvbnRhaW5pbmcgYSBjb252ZXJzaW9uIHNwZWNpZmllciwgcG9zc2libHkgbW9kaWZpZWQgYnkKKyAqIGEgcHJlZml4IHN1Y2ggYXMgaGgsIGgsIGwsIG9yIGxsLCBzdWl0YWJsZSBmb3IgdXNlIHdpdGhpbiB0aGUKKyAqIGZvcm1hdCBhcmd1bWVudCBvZiBhIGZvcm1hdHRlZCBpbnB1dC9vdXRwdXQgZnVuY3Rpb24gd2hlbgorICogY29udmVydGluZyB0aGUgY29ycmVzcG9uZGluZyBpbnRlZ2VyIHR5cGUuICBUaGVzZSBtYWNybyBuYW1lcworICogaGF2ZSB0aGUgZ2VuZXJhbCBmb3JtIG9mIFBSSSAoY2hhcmFjdGVyIHN0cmluZyBsaXRlcmFscyBmb3IgdGhlCisgKiBmcHJpbnRmIGZhbWlseSkgb3IgU0NOIChjaGFyYWN0ZXIgc3RyaW5nIGxpdGVyYWxzIGZvciB0aGUgZnNjYW5mCisgKiBmYW1pbHkpLCBmb2xsb3dlZCBieSB0aGUgY29udmVyc2lvbiBzcGVjaWZpZXIsIGZvbGxvd2VkIGJ5IGEKKyAqIG5hbWUgY29ycmVzcG9uZGluZyB0byBhIHNpbWlsYXIgdHlwZWRlZiBuYW1lLiAgRm9yIGV4YW1wbGUsCisgKiBQUklkRkFTVDMyIGNhbiBiZSB1c2VkIGluIGEgZm9ybWF0IHN0cmluZyB0byBwcmludCB0aGUgdmFsdWUgb2YKKyAqIGFuIGludGVnZXIgb2YgdHlwZSBpbnRfZmFzdDMyX3QuCisgKi8KKworLyogZnByaW50ZiBtYWNyb3MgZm9yIHNpZ25lZCBpbnRlZ2VycyAqLworI2RlZmluZQlQUklkOAkJCSJkIgkJLyogaW50OF90ICovCisjZGVmaW5lCVBSSWQxNgkJCSJkIgkJLyogaW50MTZfdCAqLworI2RlZmluZQlQUklkMzIJCQkiZCIJCS8qIGludDMyX3QgKi8KKyNkZWZpbmUJUFJJZDY0CQkJImxsZCIJCS8qIGludDY0X3QgKi8KKworI2RlZmluZQlQUklkTEVBU1Q4CQkiZCIJCS8qIGludF9sZWFzdDhfdCAqLworI2RlZmluZQlQUklkTEVBU1QxNgkJImQiCQkvKiBpbnRfbGVhc3QxNl90ICovCisjZGVmaW5lCVBSSWRMRUFTVDMyCQkiZCIJCS8qIGludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJZExFQVNUNjQJCSJsbGQiCQkvKiBpbnRfbGVhc3Q2NF90ICovCisKKyNkZWZpbmUJUFJJZEZBU1Q4CQkiZCIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5lCVBSSWRGQVNUMTYJCSJkIgkJLyogaW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSWRGQVNUMzIJCSJkIgkJLyogaW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVBSSWRGQVNUNjQJCSJsbGQiCQkvKiBpbnRfZmFzdDY0X3QgKi8KKworI2RlZmluZQlQUklkTUFYCQkJImpkIgkJLyogaW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJZFBUUgkJCSJsZCIJCS8qIGludHB0cl90ICovCisKKyNkZWZpbmUJUFJJaTgJCQkiaSIJCS8qIGludDhfdCAqLworI2RlZmluZQlQUklpMTYJCQkiaSIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJUFJJaTMyCQkJImkiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBSSWk2NAkJCSJsbGkiCQkvKiBpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJaUxFQVNUOAkJImkiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJaUxFQVNUMTYJCSJpIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklpTEVBU1QzMgkJImkiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSWlMRUFTVDY0CQkibGxpIgkJLyogaW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSWlGQVNUOAkJImkiCQkvKiBpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklpRkFTVDE2CQkiaSIJCS8qIGludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklpRkFTVDMyCQkiaSIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklpRkFTVDY0CQkibGxpIgkJLyogaW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJUFJJaU1BWAkJCSJqaSIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSWlQVFIJCQkibGkiCQkvKiBpbnRwdHJfdCAqLworCisvKiBmcHJpbnRmIG1hY3JvcyBmb3IgdW5zaWduZWQgaW50ZWdlcnMgKi8KKyNkZWZpbmUJUFJJbzgJCQkibyIJCS8qIGludDhfdCAqLworI2RlZmluZQlQUklvMTYJCQkibyIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJUFJJbzMyCQkJIm8iCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVBSSW82NAkJCSJsbG8iCQkvKiBpbnQ2NF90ICovCisKKyNkZWZpbmUJUFJJb0xFQVNUOAkJIm8iCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJb0xFQVNUMTYJCSJvIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlQUklvTEVBU1QzMgkJIm8iCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVBSSW9MRUFTVDY0CQkibGxvIgkJLyogaW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSW9GQVNUOAkJIm8iCQkvKiBpbnRfZmFzdDhfdCAqLworI2RlZmluZQlQUklvRkFTVDE2CQkibyIJCS8qIGludF9mYXN0MTZfdCAqLworI2RlZmluZQlQUklvRkFTVDMyCQkibyIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklvRkFTVDY0CQkibGxvIgkJLyogaW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJUFJJb01BWAkJCSJqbyIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVBSSW9QVFIJCQkibG8iCQkvKiBpbnRwdHJfdCAqLworCisjZGVmaW5lCVBSSXU4CQkJInUiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSXUxNgkJCSJ1IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJdTMyCQkJInUiCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlQUkl1NjQJCQkibGx1IgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlQUkl1TEVBU1Q4CQkidSIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUMTYJCSJ1IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUMzIJCSJ1IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJdUxFQVNUNjQJCSJsbHUiCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSXVGQVNUOAkJInUiCQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJdUZBU1QxNgkJInUiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSXVGQVNUMzIJCSJ1IgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUkl1RkFTVDY0CQkibGx1IgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSXVNQVgJCQkianUiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJdVBUUgkJCSJsdSIJCS8qIHVpbnRwdHJfdCAqLworCisjZGVmaW5lCVBSSXg4CQkJIngiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSXgxNgkJCSJ4IgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJeDMyCQkJIngiCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlQUkl4NjQJCQkibGx4IgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlQUkl4TEVBU1Q4CQkieCIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUMTYJCSJ4IgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUMzIJCSJ4IgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJeExFQVNUNjQJCSJsbHgiCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSXhGQVNUOAkJIngiCQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJeEZBU1QxNgkJIngiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSXhGQVNUMzIJCSJ4IgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUkl4RkFTVDY0CQkibGx4IgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSXhNQVgJCQkiangiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJeFBUUgkJCSJseCIJCS8qIHVpbnRwdHJfdCAqLworCisjZGVmaW5lCVBSSVg4CQkJIlgiCQkvKiB1aW50OF90ICovCisjZGVmaW5lCVBSSVgxNgkJCSJYIgkJLyogdWludDE2X3QgKi8KKyNkZWZpbmUJUFJJWDMyCQkJIlgiCQkvKiB1aW50MzJfdCAqLworI2RlZmluZQlQUklYNjQJCQkibGxYIgkJLyogdWludDY0X3QgKi8KKworI2RlZmluZQlQUklYTEVBU1Q4CQkiWCIJCS8qIHVpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUMTYJCSJYIgkJLyogdWludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUMzIJCSJYIgkJLyogdWludF9sZWFzdDMyX3QgKi8KKyNkZWZpbmUJUFJJWExFQVNUNjQJCSJsbFgiCQkvKiB1aW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSVhGQVNUOAkJIlgiCQkvKiB1aW50X2Zhc3Q4X3QgKi8KKyNkZWZpbmUJUFJJWEZBU1QxNgkJIlgiCQkvKiB1aW50X2Zhc3QxNl90ICovCisjZGVmaW5lCVBSSVhGQVNUMzIJCSJYIgkJLyogdWludF9mYXN0MzJfdCAqLworI2RlZmluZQlQUklYRkFTVDY0CQkibGxYIgkJLyogdWludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVBSSVhNQVgJCQkialgiCQkvKiB1aW50bWF4X3QgKi8KKyNkZWZpbmUJUFJJWFBUUgkJCSJsWCIJCS8qIHVpbnRwdHJfdCAqLworCisvKiBmc2NhbmYgbWFjcm9zIGZvciBzaWduZWQgaW50ZWdlcnMgKi8KKyNkZWZpbmUJU0NOZDgJCQkiaGhkIgkJLyogaW50OF90ICovCisjZGVmaW5lCVNDTmQxNgkJCSJoZCIJCS8qIGludDE2X3QgKi8KKyNkZWZpbmUJU0NOZDMyCQkJImQiCQkvKiBpbnQzMl90ICovCisjZGVmaW5lCVNDTmQ2NAkJCSJsbGQiCQkvKiBpbnQ2NF90ICovCisKKyNkZWZpbmUJU0NOZExFQVNUOAkJImhoZCIJCS8qIGludF9sZWFzdDhfdCAqLworI2RlZmluZQlTQ05kTEVBU1QxNgkJImhkIgkJLyogaW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ05kTEVBU1QzMgkJImQiCQkvKiBpbnRfbGVhc3QzMl90ICovCisjZGVmaW5lCVNDTmRMRUFTVDY0CQkibGxkIgkJLyogaW50X2xlYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTmRGQVNUOAkJImhoZCIJCS8qIGludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTmRGQVNUMTYJCSJoZCIJCS8qIGludF9mYXN0MTZfdCAqLworI2RlZmluZQlTQ05kRkFTVDMyCQkiZCIJCS8qIGludF9mYXN0MzJfdCAqLworI2RlZmluZQlTQ05kRkFTVDY0CQkibGxkIgkJLyogaW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOZE1BWAkJCSJqZCIJCS8qIGludG1heF90ICovCisjZGVmaW5lCVNDTmRQVFIJCQkibGQiCQkvKiBpbnRwdHJfdCAqLworCisjZGVmaW5lCVNDTmk4CQkJImhoaSIJCS8qIGludDhfdCAqLworI2RlZmluZQlTQ05pMTYJCQkiaGkiCQkvKiBpbnQxNl90ICovCisjZGVmaW5lCVNDTmkzMgkJCSJpIgkJLyogaW50MzJfdCAqLworI2RlZmluZQlTQ05pNjQJCQkibGxpIgkJLyogaW50NjRfdCAqLworCisjZGVmaW5lCVNDTmlMRUFTVDgJCSJoaGkiCQkvKiBpbnRfbGVhc3Q4X3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUMTYJCSJoaSIJCS8qIGludF9sZWFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOaUxFQVNUMzIJCSJpIgkJLyogaW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ05pTEVBU1Q2NAkJImxsaSIJCS8qIGludF9sZWFzdDY0X3QgKi8KKworI2RlZmluZQlTQ05pRkFTVDgJCSJoaGkiCQkvKiBpbnRfZmFzdDhfdCAqLworI2RlZmluZQlTQ05pRkFTVDE2CQkiaGkiCQkvKiBpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOaUZBU1QzMgkJImkiCQkvKiBpbnRfZmFzdDMyX3QgKi8KKyNkZWZpbmUJU0NOaUZBU1Q2NAkJImxsaSIJCS8qIGludF9mYXN0NjRfdCAqLworCisjZGVmaW5lCVNDTmlNQVgJCQkiamkiCQkvKiBpbnRtYXhfdCAqLworI2RlZmluZQlTQ05pUFRSCQkJImxpIgkJLyogaW50cHRyX3QgKi8KKworLyogZnNjYW5mIG1hY3JvcyBmb3IgdW5zaWduZWQgaW50ZWdlcnMgKi8KKyNkZWZpbmUJU0NObzgJCQkiaGhvIgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ05vMTYJCQkiaG8iCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlTQ05vMzIJCQkibyIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTm82NAkJCSJsbG8iCQkvKiB1aW50NjRfdCAqLworCisjZGVmaW5lCVNDTm9MRUFTVDgJCSJoaG8iCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVNDTm9MRUFTVDE2CQkiaG8iCQkvKiB1aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ05vTEVBU1QzMgkJIm8iCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ05vTEVBU1Q2NAkJImxsbyIJCS8qIHVpbnRfbGVhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOb0ZBU1Q4CQkiaGhvIgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTm9GQVNUMTYJCSJobyIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOb0ZBU1QzMgkJIm8iCQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVNDTm9GQVNUNjQJCSJsbG8iCQkvKiB1aW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOb01BWAkJCSJqbyIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ05vUFRSCQkJImxvIgkJLyogdWludHB0cl90ICovCisKKyNkZWZpbmUJU0NOdTgJCQkiaGh1IgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ051MTYJCQkiaHUiCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlTQ051MzIJCQkidSIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTnU2NAkJCSJsbHUiCQkvKiB1aW50NjRfdCAqLworCisjZGVmaW5lCVNDTnVMRUFTVDgJCSJoaHUiCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVNDTnVMRUFTVDE2CQkiaHUiCQkvKiB1aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ051TEVBU1QzMgkJInUiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ051TEVBU1Q2NAkJImxsdSIJCS8qIHVpbnRfbGVhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOdUZBU1Q4CQkiaGh1IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTnVGQVNUMTYJCSJodSIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOdUZBU1QzMgkJInUiCQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVNDTnVGQVNUNjQJCSJsbHUiCQkvKiB1aW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOdU1BWAkJCSJqdSIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ051UFRSCQkJImx1IgkJLyogdWludHB0cl90ICovCisKKyNkZWZpbmUJU0NOeDgJCQkiaGh4IgkJLyogdWludDhfdCAqLworI2RlZmluZQlTQ054MTYJCQkiaHgiCQkvKiB1aW50MTZfdCAqLworI2RlZmluZQlTQ054MzIJCQkieCIJCS8qIHVpbnQzMl90ICovCisjZGVmaW5lCVNDTng2NAkJCSJsbHgiCQkvKiB1aW50NjRfdCAqLworCisjZGVmaW5lCVNDTnhMRUFTVDgJCSJoaHgiCQkvKiB1aW50X2xlYXN0OF90ICovCisjZGVmaW5lCVNDTnhMRUFTVDE2CQkiaHgiCQkvKiB1aW50X2xlYXN0MTZfdCAqLworI2RlZmluZQlTQ054TEVBU1QzMgkJIngiCQkvKiB1aW50X2xlYXN0MzJfdCAqLworI2RlZmluZQlTQ054TEVBU1Q2NAkJImxseCIJCS8qIHVpbnRfbGVhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOeEZBU1Q4CQkiaGh4IgkJLyogdWludF9mYXN0OF90ICovCisjZGVmaW5lCVNDTnhGQVNUMTYJCSJoeCIJCS8qIHVpbnRfZmFzdDE2X3QgKi8KKyNkZWZpbmUJU0NOeEZBU1QzMgkJIngiCQkvKiB1aW50X2Zhc3QzMl90ICovCisjZGVmaW5lCVNDTnhGQVNUNjQJCSJsbHgiCQkvKiB1aW50X2Zhc3Q2NF90ICovCisKKyNkZWZpbmUJU0NOeE1BWAkJCSJqeCIJCS8qIHVpbnRtYXhfdCAqLworI2RlZmluZQlTQ054UFRSCQkJImx4IgkJLyogdWludHB0cl90ICovCisKKyNlbmRpZiAvKiBfX2NwbHVzcGx1cyB8fCBfX1NURENfRk9STUFUX01BQ1JPUyAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJaW50bWF4X3QgcXVvdDsJCS8qIHF1b3RpZW50ICovCisJaW50bWF4X3QgcmVtOwkJLyogcmVtYWluZGVyICovCit9IGltYXhkaXZfdDsKKworX19CRUdJTl9ERUNMUworaW50bWF4X3QJaW1heGFicyhpbnRtYXhfdCk7CitpbWF4ZGl2X3QJaW1heGRpdihpbnRtYXhfdCwgaW50bWF4X3QpOworaW50bWF4X3QJc3RydG9pbWF4KGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK3VpbnRtYXhfdAlzdHJ0b3VtYXgoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9JTlRUWVBFU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2lzYy9hc3NlcnRpb25zLmggYi9saWJjL2luY2x1ZGUvaXNjL2Fzc2VydGlvbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MjFkMThmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2lzYy9hc3NlcnRpb25zLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCSROZXRCU0Q6IGFzc2VydGlvbnMuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTo0OTo0MSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTctMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqIElkOiBhc3NlcnRpb25zLmgsdiAxLjEuMjA2LjEgMjAwNC8wMy8wOSAwODozMzozMCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIEFTU0VSVElPTlNfSAorI2RlZmluZSBBU1NFUlRJT05TX0gJCTEKKwordHlwZWRlZiBlbnVtIHsKKwlhc3NlcnRfcmVxdWlyZSwgYXNzZXJ0X2Vuc3VyZSwgYXNzZXJ0X2luc2lzdCwgYXNzZXJ0X2ludmFyaWFudAorfSBhc3NlcnRpb25fdHlwZTsKKwordHlwZWRlZiB2b2lkICgqYXNzZXJ0aW9uX2ZhaWx1cmVfY2FsbGJhY2spKGNvbnN0IGNoYXIgKiwgaW50LCBhc3NlcnRpb25fdHlwZSwKKwkJCQkJICAgY29uc3QgY2hhciAqLCBpbnQpOworCitleHRlcm4gYXNzZXJ0aW9uX2ZhaWx1cmVfY2FsbGJhY2sgX19hc3NlcnRpb25fZmFpbGVkOwordm9pZCBzZXRfYXNzZXJ0aW9uX2ZhaWx1cmVfY2FsbGJhY2soYXNzZXJ0aW9uX2ZhaWx1cmVfY2FsbGJhY2sgZik7Citjb25zdCBjaGFyICphc3NlcnRpb25fdHlwZV90b190ZXh0KGFzc2VydGlvbl90eXBlIHR5cGUpOworCisjaWZkZWYgQ0hFQ0tfQUxMCisjZGVmaW5lIENIRUNLX1JFUVVJUkUJCTEKKyNkZWZpbmUgQ0hFQ0tfRU5TVVJFCQkxCisjZGVmaW5lIENIRUNLX0lOU0lTVAkJMQorI2RlZmluZSBDSEVDS19JTlZBUklBTlQJCTEKKyNlbmRpZgorCisjaWZkZWYgQ0hFQ0tfTk9ORQorI2RlZmluZSBDSEVDS19SRVFVSVJFCQkwCisjZGVmaW5lIENIRUNLX0VOU1VSRQkJMAorI2RlZmluZSBDSEVDS19JTlNJU1QJCTAKKyNkZWZpbmUgQ0hFQ0tfSU5WQVJJQU5UCQkwCisjZW5kaWYKKworI2lmbmRlZiBDSEVDS19SRVFVSVJFCisjZGVmaW5lIENIRUNLX1JFUVVJUkUJCTEKKyNlbmRpZgorCisjaWZuZGVmIENIRUNLX0VOU1VSRQorI2RlZmluZSBDSEVDS19FTlNVUkUJCTEKKyNlbmRpZgorCisjaWZuZGVmIENIRUNLX0lOU0lTVAorI2RlZmluZSBDSEVDS19JTlNJU1QJCTEKKyNlbmRpZgorCisjaWZuZGVmIENIRUNLX0lOVkFSSUFOVAorI2RlZmluZSBDSEVDS19JTlZBUklBTlQJCTEKKyNlbmRpZgorCisjaWYgQ0hFQ0tfUkVRVUlSRSAhPSAwCisjZGVmaW5lIFJFUVVJUkUoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfcmVxdWlyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMCksIDApKSkKKyNkZWZpbmUgUkVRVUlSRV9FUlIoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfcmVxdWlyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIFJFUVVJUkUoY29uZCkJCSgodm9pZCkgKGNvbmQpKQorI2RlZmluZSBSRVFVSVJFX0VSUihjb25kKQkoKHZvaWQpIChjb25kKSkKKyNlbmRpZiAvKiBDSEVDS19SRVFVSVJFICovCisKKyNpZiBDSEVDS19FTlNVUkUgIT0gMAorI2RlZmluZSBFTlNVUkUoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfZW5zdXJlLCBcCisJCQkJICAgICAgICNjb25kLCAwKSwgMCkpKQorI2RlZmluZSBFTlNVUkVfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2Vuc3VyZSwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIEVOU1VSRShjb25kKQkJKCh2b2lkKSAoY29uZCkpCisjZGVmaW5lIEVOU1VSRV9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZW5kaWYgLyogQ0hFQ0tfRU5TVVJFICovCisKKyNpZiBDSEVDS19JTlNJU1QgIT0gMAorI2RlZmluZSBJTlNJU1QoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfaW5zaXN0LCBcCisJCQkJICAgICAgICNjb25kLCAwKSwgMCkpKQorI2RlZmluZSBJTlNJU1RfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2luc2lzdCwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIElOU0lTVChjb25kKQkJKCh2b2lkKSAoY29uZCkpCisjZGVmaW5lIElOU0lTVF9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZW5kaWYgLyogQ0hFQ0tfSU5TSVNUICovCisKKyNpZiBDSEVDS19JTlZBUklBTlQgIT0gMAorI2RlZmluZSBJTlZBUklBTlQoY29uZCkgXAorCSgodm9pZCkgKChjb25kKSB8fCBcCisJCSAoKF9fYXNzZXJ0aW9uX2ZhaWxlZCkoX19GSUxFX18sIF9fTElORV9fLCBhc3NlcnRfaW52YXJpYW50LCBcCisJCQkJICAgICAgICNjb25kLCAwKSwgMCkpKQorI2RlZmluZSBJTlZBUklBTlRfRVJSKGNvbmQpIFwKKwkoKHZvaWQpICgoY29uZCkgfHwgXAorCQkgKChfX2Fzc2VydGlvbl9mYWlsZWQpKF9fRklMRV9fLCBfX0xJTkVfXywgYXNzZXJ0X2ludmFyaWFudCwgXAorCQkJCSAgICAgICAjY29uZCwgMSksIDApKSkKKyNlbHNlCisjZGVmaW5lIElOVkFSSUFOVChjb25kKQkJKCh2b2lkKSAoY29uZCkpCisjZGVmaW5lIElOVkFSSUFOVF9FUlIoY29uZCkJKCh2b2lkKSAoY29uZCkpCisjZW5kaWYgLyogQ0hFQ0tfSU5WQVJJQU5UICovCisKKyNlbmRpZiAvKiBBU1NFUlRJT05TX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9pc2MvZHN0LmggYi9saWJjL2luY2x1ZGUvaXNjL2RzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmYjA3MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvaXNjL2RzdC5oCkBAIC0wLDAgKzEsMTgyIEBACisvKgkkTmV0QlNEOiBkc3QuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxOTo0OTo0MSBjaHJpc3RvcyBFeHAgJAkqLworCisjaWZuZGVmIERTVF9ICisjZGVmaW5lIERTVF9ICisKKyNpZm5kZWYgSEFTX0RTVF9LRVkKK3R5cGVkZWYgc3RydWN0IGRzdF9rZXkgeworCWNoYXIJKmRrX2tleV9uYW1lOyAgIC8qIG5hbWUgb2YgdGhlIGtleSAqLworCWludAlka19rZXlfc2l6ZTsgICAgLyogdGhpcyBpcyB0aGUgc2l6ZSBvZiB0aGUga2V5IGluIGJpdHMgKi8KKwlpbnQJZGtfcHJvdG87ICAgICAgIC8qIHdoYXQgcHJvdG9jb2xzIHRoaXMga2V5IGNhbiBiZSB1c2VkIGZvciAqLworCWludAlka19hbGc7ICAgICAgICAgLyogYWxnb3JpdGhtIG51bWJlciBmcm9tIGtleSByZWNvcmQgKi8KKwl1X2ludDMyX3QgZGtfZmxhZ3M7ICAgICAvKiBhbmQgdGhlIGZsYWdzIG9mIHRoZSBwdWJsaWMga2V5ICovCisJdV9pbnQxNl90IGRrX2lkOyAgICAgICAgLyogaWRlbnRpZmllciBvZiB0aGUga2V5ICovCit9IERTVF9LRVk7CisjZW5kaWYgLyogSEFTX0RTVF9LRVkgKi8KKworLyoKKyAqIGRvIG5vdCB0YWludCBuYW1lc3BhY2UKKyAqLworI2RlZmluZQlkc3RfYnNhZmVfaW5pdAkJX19kc3RfYnNhZmVfaW5pdAorI2RlZmluZQlkc3RfYnVmZmVyX3RvX2tleQlfX2RzdF9idWZmZXJfdG9fa2V5CisjZGVmaW5lCWRzdF9jaGVja19hbGdvcml0aG0JX19kc3RfY2hlY2tfYWxnb3JpdGhtCisjZGVmaW5lCWRzdF9jb21wYXJlX2tleXMJX19kc3RfY29tcGFyZV9rZXlzCisjZGVmaW5lCWRzdF9jeWxpbmtfaW5pdAkJX19kc3RfY3lsaW5rX2luaXQKKyNkZWZpbmUJZHN0X2Ruc2tleV90b19rZXkJX19kc3RfZG5za2V5X3RvX2tleQorI2RlZmluZQlkc3RfZWF5X2Rzc19pbml0CV9fZHN0X2VheV9kc3NfaW5pdAorI2RlZmluZQlkc3RfZnJlZV9rZXkJCV9fZHN0X2ZyZWVfa2V5CisjZGVmaW5lCWRzdF9nZW5lcmF0ZV9rZXkJX19kc3RfZ2VuZXJhdGVfa2V5CisjZGVmaW5lCWRzdF9obWFjX21kNV9pbml0CV9fZHN0X2htYWNfbWQ1X2luaXQKKyNkZWZpbmUJZHN0X2luaXQJCV9fZHN0X2luaXQKKyNkZWZpbmUJZHN0X2tleV90b19idWZmZXIJX19kc3Rfa2V5X3RvX2J1ZmZlcgorI2RlZmluZQlkc3Rfa2V5X3RvX2Ruc2tleQlfX2RzdF9rZXlfdG9fZG5za2V5CisjZGVmaW5lCWRzdF9yZWFkX2tleQkJX19kc3RfcmVhZF9rZXkKKyNkZWZpbmUJZHN0X3JzYXJlZl9pbml0CQlfX2RzdF9yc2FyZWZfaW5pdAorI2RlZmluZQlkc3Rfc19idWlsZF9maWxlbmFtZQlfX2RzdF9zX2J1aWxkX2ZpbGVuYW1lCisjZGVmaW5lCWRzdF9zX2NhbGN1bGF0ZV9iaXRzCV9fZHN0X3NfY2FsY3VsYXRlX2JpdHMKKyNkZWZpbmUJZHN0X3NfY29udl9iaWdudW1fYjY0X3RvX3U4CV9fZHN0X3NfY29udl9iaWdudW1fYjY0X3RvX3U4CisjZGVmaW5lCWRzdF9zX2NvbnZfYmlnbnVtX3U4X3RvX2I2NAlfX2RzdF9zX2NvbnZfYmlnbnVtX3U4X3RvX2I2NAorI2RlZmluZQlkc3Rfc19kbnNfa2V5X2lkCV9fZHN0X3NfZG5zX2tleV9pZAorI2RlZmluZQlkc3Rfc19kdW1wCQlfX2RzdF9zX2R1bXAKKyNkZWZpbmUJZHN0X3NfZmlsZW5hbWVfbGVuZ3RoCV9fZHN0X3NfZmlsZW5hbWVfbGVuZ3RoCisjZGVmaW5lCWRzdF9zX2ZvcGVuCQlfX2RzdF9zX2ZvcGVuCisjZGVmaW5lCWRzdF9zX2dldF9pbnQxNgkJX19kc3Rfc19nZXRfaW50MTYKKyNkZWZpbmUJZHN0X3NfZ2V0X2ludDMyCQlfX2RzdF9zX2dldF9pbnQzMgorI2RlZmluZQlkc3Rfc19pZF9jYWxjCQlfX2RzdF9zX2lkX2NhbGMKKyNkZWZpbmUJZHN0X3NfcHV0X2ludDE2CQlfX2RzdF9zX3B1dF9pbnQxNgorI2RlZmluZQlkc3Rfc19wdXRfaW50MzIJCV9fZHN0X3NfcHV0X2ludDMyCisjZGVmaW5lCWRzdF9zX3F1aWNrX3JhbmRvbQlfX2RzdF9zX3F1aWNrX3JhbmRvbQorI2RlZmluZQlkc3Rfc19xdWlja19yYW5kb21fc2V0CV9fZHN0X3NfcXVpY2tfcmFuZG9tX3NldAorI2RlZmluZQlkc3Rfc19yYW5kb20JCV9fZHN0X3NfcmFuZG9tCisjZGVmaW5lCWRzdF9zX3NlbWlfcmFuZG9tCV9fZHN0X3Nfc2VtaV9yYW5kb20KKyNkZWZpbmUJZHN0X3NfdmVyaWZ5X3N0cglfX2RzdF9zX3ZlcmlmeV9zdHIKKyNkZWZpbmUJZHN0X3NpZ19zaXplCQlfX2RzdF9zaWdfc2l6ZQorI2RlZmluZQlkc3Rfc2lnbl9kYXRhCQlfX2RzdF9zaWduX2RhdGEKKyNkZWZpbmUJZHN0X3ZlcmlmeV9kYXRhCQlfX2RzdF92ZXJpZnlfZGF0YQorI2RlZmluZQlkc3Rfd3JpdGVfa2V5CQlfX2RzdF93cml0ZV9rZXkKKworLyogCisgKiBEU1QgQ3J5cHRvIEFQSSBkZWZpbnRpb25zIAorICovCit2b2lkICAgICBkc3RfaW5pdCh2b2lkKTsKK2ludCAgICAgIGRzdF9jaGVja19hbGdvcml0aG0oY29uc3QgaW50KTsKKworaW50IGRzdF9zaWduX2RhdGEoY29uc3QgaW50LAkgCS8qIHNwZWNpZmllcyBJTklUL1VQREFURS9GSU5BTC9BTEwgKi8KKwkJICBEU1RfS0VZICosCSAJLyogdGhlIGtleSB0byB1c2UgKi8KKwkJICB2b2lkICoqLAkgCS8qIHBvaW50ZXIgdG8gc3RhdGUgc3RydWN0dXJlICovCisJCSAgY29uc3QgdV9jaGFyICosCS8qIGRhdGEgdG8gYmUgc2lnbmVkICovCisJCSAgY29uc3QgaW50LAkgCS8qIGxlbmd0aCBvZiBpbnB1dCBkYXRhICovCisJCSAgdV9jaGFyICosCSAJLyogYnVmZmVyIHRvIHdyaXRlIHNpZ25hdHVyZSB0byAqLworCQkgIGNvbnN0IGludCk7CSAJLyogc2l6ZSBvZiBvdXRwdXQgYnVmZmVyICovCisKK2ludCBkc3RfdmVyaWZ5X2RhdGEoY29uc3QgaW50LAkgCS8qIHNwZWNpZmllcyBJTklUL1VQREFURS9GSU5BTC9BTEwgKi8KKwkJICAgIERTVF9LRVkgKiwJIAkvKiB0aGUga2V5IHRvIHVzZSAqLworCQkgICAgdm9pZCAqKiwJIAkvKiBwb2ludGVyIHRvIHN0YXRlIHN0cnVjdHVyZSAqLworCQkgICAgY29uc3QgdV9jaGFyICosCS8qIGRhdGEgdG8gYmUgdmVyaWZpZWQgKi8KKwkJICAgIGNvbnN0IGludCwJIAkvKiBsZW5ndGggb2YgaW5wdXQgZGF0YSAqLworCQkgICAgY29uc3QgdV9jaGFyICosCS8qIGJ1ZmZlciBjb250YWluaW5nIHNpZ25hdHVyZSAqLworCQkgICAgY29uc3QgaW50KTsJIAkvKiBsZW5ndGggb2Ygc2lnbmF0dXJlICovCisKKworRFNUX0tFWSAqZHN0X3JlYWRfa2V5KGNvbnN0IGNoYXIgKiwJLyogbmFtZSBvZiBrZXkgKi8KKwkJICAgICAgY29uc3QgdV9pbnQxNl90LAkvKiBrZXkgdGFnIGlkZW50aWZpZXIgKi8KKwkJICAgICAgY29uc3QgaW50LAkvKiBrZXkgYWxnb3JpdGhtICovCisJCSAgICAgIGNvbnN0IGludCk7CS8qIFByaXZhdGUvUHVibGljS2V5IHdhbnRlZCovCisKK2ludCAgICAgIGRzdF93cml0ZV9rZXkoY29uc3QgRFNUX0tFWSAqLAkvKiBrZXkgdG8gd3JpdGUgb3V0ICovCisJCSAgICAgICBjb25zdCBpbnQpOyAJLyogUHVibGljL1ByaXZhdGUgKi8KKworRFNUX0tFWSAqZHN0X2Ruc2tleV90b19rZXkoY29uc3QgY2hhciAqLAkvKiBLRVkgcmVjb3JkIG5hbWUgKi8KKwkJCSAgIGNvbnN0IHVfY2hhciAqLAkvKiBLRVkgUkRBVEEgKi8KKwkJCSAgIGNvbnN0IGludCk7CQkvKiBzaXplIG9mIGlucHV0IGJ1ZmZlciovCisKKworaW50ICAgICAgZHN0X2tleV90b19kbnNrZXkoY29uc3QgRFNUX0tFWSAqLAkvKiBrZXkgdG8gdHJhbnNsYXRlICovCisJCQkgICB1X2NoYXIgKiwJCS8qIG91dHB1dCBidWZmZXIgKi8KKwkJCSAgIGNvbnN0IGludCk7CQkvKiBzaXplIG9mIG91dF9zdG9yYWdlKi8KKworCitEU1RfS0VZICpkc3RfYnVmZmVyX3RvX2tleShjb25zdCBjaGFyICosICAJLyogbmFtZSBvZiB0aGUga2V5ICovCisJCQkgICBjb25zdCBpbnQsCSAgCS8qIGFsZ29yaXRobSAqLworCQkJICAgY29uc3QgaW50LAkgIAkvKiBkbnMgZmxhZ3MgKi8KKwkJCSAgIGNvbnN0IGludCwJICAJLyogZG5zIHByb3RvY29sICovCisJCQkgICBjb25zdCB1X2NoYXIgKiwgCS8qIGtleSBpbiBkbnMgd2lyZSBmbXQgKi8KKwkJCSAgIGNvbnN0IGludCk7CSAgCS8qIHNpemUgb2Yga2V5ICovCisKKworaW50ICAgICBkc3Rfa2V5X3RvX2J1ZmZlcihEU1RfS0VZICosIHVfY2hhciAqLCBpbnQpOworCitEU1RfS0VZICpkc3RfZ2VuZXJhdGVfa2V5KGNvbnN0IGNoYXIgKiwgICAgCS8qIG5hbWUgb2YgbmV3IGtleSAqLworCQkJICBjb25zdCBpbnQsICAgICAgIAkvKiBrZXkgYWxnb3JpdGhtIHRvIGdlbmVyYXRlICovCisJCQkgIGNvbnN0IGludCwgICAgICAJLyogc2l6ZSBvZiBuZXcga2V5ICovCisJCQkgIGNvbnN0IGludCwgICAgICAgCS8qIGFsZyBkZXBlbmRlbnQgcGFyYW1ldGVyKi8KKwkJCSAgY29uc3QgaW50LCAgICAgCS8qIGtleSBETlMgZmxhZ3MgKi8KKwkJCSAgY29uc3QgaW50KTsJCS8qIGtleSBETlMgcHJvdG9jb2wgKi8KKworRFNUX0tFWSAqZHN0X2ZyZWVfa2V5KERTVF9LRVkgKik7CitpbnQgICAgICBkc3RfY29tcGFyZV9rZXlzKGNvbnN0IERTVF9LRVkgKiwgY29uc3QgRFNUX0tFWSAqKTsKKworaW50CWRzdF9zaWdfc2l6ZShEU1RfS0VZICopOworCisKKy8qIHN1cHBvcnQgZm9yIGRucyBrZXkgdGFncy9pZHMgKi8KK3VfaW50MTZfdCBkc3Rfc19kbnNfa2V5X2lkKGNvbnN0IHVfY2hhciAqLCBjb25zdCBpbnQpOwordV9pbnQxNl90IGRzdF9zX2lkX2NhbGMoY29uc3QgdV9jaGFyICosIGNvbnN0IGludCk7CisKKy8qIFVzZWQgYnkgY2FsbGVycyBhcyB3ZWxsIGFzIGJ5IHRoZSBsaWJyYXJ5LiAgKi8KKyNkZWZpbmUgUkFXX0tFWV9TSVpFICAgIDgxOTIgICAgICAgIC8qIGxhcmdlIGVub3VnaCB0byBzdG9yZSBhbnkga2V5ICovCisKKy8qIERTVF9BUEkgY29udHJvbCBmbGFncyAqLworLyogVGhlc2UgYXJlIHVzZWQgdXNlZCBpbiBmdW5jdGlvbnMgZHN0X3NpZ25fZGF0YSBhbmQgZHN0X3ZlcmlmeV9kYXRhICovCisjZGVmaW5lIFNJR19NT0RFX0lOSVQJCTEgIC8qIGluaXRpYWxpemUgZGlnZXN0ICovCisjZGVmaW5lIFNJR19NT0RFX1VQREFURQkJMiAgLyogYWRkIGRhdGEgdG8gZGlnZXN0ICovCisjZGVmaW5lIFNJR19NT0RFX0ZJTkFMCQk0ICAvKiBnZW5lcmF0ZS92ZXJpZnkgc2lnbmF0dXJlICovCisjZGVmaW5lIFNJR19NT0RFX0FMTAkJKFNJR19NT0RFX0lOSVR8U0lHX01PREVfVVBEQVRFfFNJR19NT0RFX0ZJTkFMKQorCisvKiBGbGFncyBmb3IgZHN0X3JlYWRfcHJpdmF0ZV9rZXkoKSAgKi8KKyNkZWZpbmUgRFNUX0ZPUkNFX1JFQUQJCTB4MTAwMDAwMAorI2RlZmluZSBEU1RfQ0FOX1NJR04JCTB4MDEwRgorI2RlZmluZSBEU1RfTk9fQVVUSEVOCQkweDgwMDAKKyNkZWZpbmUgRFNUX0VYVEVORF9GTEFHICAgICAgICAgMHgxMDAwCisjZGVmaW5lIERTVF9TVEFOREFSRAkJMAorI2RlZmluZSBEU1RfUFJJVkFURSAgICAgICAgICAgICAweDIwMDAwMDAKKyNkZWZpbmUgRFNUX1BVQkxJQyAgICAgICAgICAgICAgMHg0MDAwMDAwCisjZGVmaW5lIERTVF9SQU5EX1NFTUkgICAgICAgICAgIDEKKyNkZWZpbmUgRFNUX1JBTkRfU1REICAgICAgICAgICAgMgorI2RlZmluZSBEU1RfUkFORF9LRVkgICAgICAgICAgICAzCisjZGVmaW5lIERTVF9SQU5EX0RTUyAgICAgICAgICAgIDQKKworCisvKiBEU1QgYWxnb3JpdGhtIGNvZGVzICovCisjZGVmaW5lIEtFWV9SU0EJCQkxCisjZGVmaW5lIEtFWV9ESAkJCTIKKyNkZWZpbmUgS0VZX0RTQQkJCTMKKyNkZWZpbmUgS0VZX1BSSVZBVEUJCTI1NAorI2RlZmluZSBLRVlfRVhQQU5ECQkyNTUKKyNkZWZpbmUgS0VZX0hNQUNfTUQ1CQkxNTcKKyNkZWZpbmUgS0VZX0hNQUNfU0hBMQkJMTU4CisjZGVmaW5lIFVOS05PV05fS0VZQUxHCQkwCisjZGVmaW5lIERTVF9NQVhfQUxHUyAgICAgICAgICAgIEtFWV9ITUFDX1NIQTEKKworLyogRFNUIGNvbnN0YW50cyB0byBsb2NhdGlvbnMgaW4gS0VZIHJlY29yZCAgY2hhbmdlcyBpbiBuZXcgS0VZIHJlY29yZCAqLworI2RlZmluZSBEU1RfRkxBR1NfU0laRQkJMgorI2RlZmluZSBEU1RfS0VZX1BST1QJCTIKKyNkZWZpbmUgRFNUX0tFWV9BTEcJCTMKKyNkZWZpbmUgRFNUX0VYVF9GTEFHICAgICAgICAgICAgNAorI2RlZmluZSBEU1RfS0VZX1NUQVJUCQk0CisKKyNpZm5kZWYgU0lHTl9GX05PS0VZIAorI2RlZmluZSBTSUdOX0ZfTk9LRVkJCTB4QzAwMAorI2VuZGlmCisKKy8qIGVycm9yIGNvZGVzIGZyb20gZHN0IHJvdXRpbmVzICovCisjZGVmaW5lIFNJR05fSU5JVF9GQUlMVVJFCSgtMjMpCisjZGVmaW5lIFNJR05fVVBEQVRFX0ZBSUxVUkUJKC0yNCkKKyNkZWZpbmUgU0lHTl9GSU5BTF9GQUlMVVJFCSgtMjUpCisjZGVmaW5lIFZFUklGWV9JTklUX0ZBSUxVUkUJKC0yNikKKyNkZWZpbmUgVkVSSUZZX1VQREFURV9GQUlMVVJFCSgtMjcpCisjZGVmaW5lIFZFUklGWV9GSU5BTF9GQUlMVVJFCSgtMjgpCisjZGVmaW5lIE1JU1NJTkdfS0VZX09SX1NJR05BVFVSRSAoLTMwKQorI2RlZmluZSBVTlNVUFBPUlRFRF9LRVlBTEcJKC0zMSkKKworI2VuZGlmIC8qIERTVF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmggYi9saWJjL2luY2x1ZGUvaXNjL2V2ZW50bGliLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTE4NWY2NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9pc2MvZXZlbnRsaWIuaApAQCAtMCwwICsxLDIwNCBAQAorLyoJJE5ldEJTRDogZXZlbnRsaWIuaCx2IDEuMS4xLjMgMjAwNS8xMi8yMSAyMzoxNToyMiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldmVudGxpYi5oIC0gZXhwb3J0ZWQgaW50ZXJmYWNlcyBmb3IgZXZlbnRsaWIKKyAqIHZpeCAwOXNlcDk1IFtpbml0aWFsXQorICoKKyAqIElkOiBldmVudGxpYi5oLHYgMS4xLjIuMS40LjIgMjAwNS8wNy8yOCAwNzo0MzoxOCBtYXJrYSBFeHAKKyAqLworCisjaWZuZGVmIF9FVkVOVExJQl9ICisjZGVmaW5lIF9FVkVOVExJQl9ICisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaWZuZGVmIF9fUAorIyBkZWZpbmUgX19FVkVOVExJQl9QX0RFRklORUQKKyMgaWZkZWYgX19TVERDX18KKyMgIGRlZmluZSBfX1AoeCkgeAorIyBlbHNlCisjICBkZWZpbmUgX19QKHgpICgpCisjIGVuZGlmCisjZW5kaWYKKworLyogSW4gdGhlIGFic2VuY2Ugb2YgYnJhbmRlZCB0eXBlcy4uLiAqLwordHlwZWRlZiBzdHJ1Y3QgeyB2b2lkICpvcGFxdWU7IH0gZXZDb25uSUQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldkZpbGVJRDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2U3RyZWFtSUQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldlRpbWVySUQ7Cit0eXBlZGVmIHN0cnVjdCB7IHZvaWQgKm9wYXF1ZTsgfSBldldhaXRJRDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2Q29udGV4dDsKK3R5cGVkZWYgc3RydWN0IHsgdm9pZCAqb3BhcXVlOyB9IGV2RXZlbnQ7CisKKyNkZWZpbmUJZXZJbml0SUQoaWQpICgoaWQpLT5vcGFxdWUgPSBOVUxMKQorI2RlZmluZQlldlRlc3RJRChpZCkgKChpZCkub3BhcXVlICE9IE5VTEwpCisKK3R5cGVkZWYgdm9pZCAoKmV2Q29ubkZ1bmMpX19QKChldkNvbnRleHQsIHZvaWQgKiwgaW50LCBjb25zdCB2b2lkICosIGludCwKKwkJCSAgICAgICBjb25zdCB2b2lkICosIGludCkpOwordHlwZWRlZiB2b2lkICgqZXZGaWxlRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLCBpbnQsIGludCkpOwordHlwZWRlZgl2b2lkICgqZXZTdHJlYW1GdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGludCwgaW50KSk7Cit0eXBlZGVmIHZvaWQgKCpldlRpbWVyRnVuYylfX1AoKGV2Q29udGV4dCwgdm9pZCAqLAorCQkJCXN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKSk7Cit0eXBlZGVmCXZvaWQgKCpldldhaXRGdW5jKV9fUCgoZXZDb250ZXh0LCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCit0eXBlZGVmCXN0cnVjdCB7IHVuc2lnbmVkIGNoYXIgbWFza1syNTYvOF07IH0gZXZCeXRlTWFzazsKKyNkZWZpbmUJRVZfQllURU1BU0tfQllURShiKSAoKGIpIC8gOCkKKyNkZWZpbmUJRVZfQllURU1BU0tfTUFTSyhiKSAoMSA8PCAoKGIpICUgOCkpCisjZGVmaW5lCUVWX0JZVEVNQVNLX1NFVChibSwgYikgXAorCSgoYm0pLm1hc2tbRVZfQllURU1BU0tfQllURShiKV0gfD0gRVZfQllURU1BU0tfTUFTSyhiKSkKKyNkZWZpbmUJRVZfQllURU1BU0tfQ0xSKGJtLCBiKSBcCisJKChibSkubWFza1tFVl9CWVRFTUFTS19CWVRFKGIpXSAmPSB+RVZfQllURU1BU0tfTUFTSyhiKSkKKyNkZWZpbmUJRVZfQllURU1BU0tfVFNUKGJtLCBiKSBcCisJKChibSkubWFza1tFVl9CWVRFTUFTS19CWVRFKGIpXSAmIEVWX0JZVEVNQVNLX01BU0soYikpCisKKyNkZWZpbmUJRVZfUE9MTAkJMQorI2RlZmluZQlFVl9XQUlUCQkyCisjZGVmaW5lCUVWX05VTEwJCTQKKworI2RlZmluZQlFVl9SRUFECQkxCisjZGVmaW5lCUVWX1dSSVRFCTIKKyNkZWZpbmUJRVZfRVhDRVBUCTQKKworI2RlZmluZSBFVl9XQVNOT05CTE9DS0lORyA4CS8qIEludGVybmFsIGxpYnJhcnkgdXNlLiAqLworCisvKiBldmVudGxpYi5jICovCisjZGVmaW5lIGV2Q3JlYXRlCV9fZXZDcmVhdGUKKyNkZWZpbmUgZXZTZXREZWJ1ZwlfX2V2U2V0RGVidWcKKyNkZWZpbmUgZXZEZXN0cm95CV9fZXZEZXN0cm95CisjZGVmaW5lIGV2R2V0TmV4dAlfX2V2R2V0TmV4dAorI2RlZmluZSBldkRpc3BhdGNoCV9fZXZEaXNwYXRjaAorI2RlZmluZSBldkRyb3AJCV9fZXZEcm9wCisjZGVmaW5lIGV2TWFpbkxvb3AJX19ldk1haW5Mb29wCisjZGVmaW5lIGV2SGlnaGVzdEZECV9fZXZIaWdoZXN0RkQKKyNkZWZpbmUgZXZHZXRPcHRpb24JX19ldkdldE9wdGlvbgorI2RlZmluZSBldlNldE9wdGlvbglfX2V2U2V0T3B0aW9uCisKK2ludCAgZXZDcmVhdGUgX19QKChldkNvbnRleHQgKikpOwordm9pZCBldlNldERlYnVnIF9fUCgoZXZDb250ZXh0LCBpbnQsIEZJTEUgKikpOworaW50ICBldkRlc3Ryb3kgX19QKChldkNvbnRleHQpKTsKK2ludCAgZXZHZXROZXh0IF9fUCgoZXZDb250ZXh0LCBldkV2ZW50ICosIGludCkpOworaW50ICBldkRpc3BhdGNoIF9fUCgoZXZDb250ZXh0LCBldkV2ZW50KSk7Cit2b2lkIGV2RHJvcCBfX1AoKGV2Q29udGV4dCwgZXZFdmVudCkpOworaW50ICBldk1haW5Mb29wIF9fUCgoZXZDb250ZXh0KSk7CitpbnQgIGV2SGlnaGVzdEZEIF9fUCgoZXZDb250ZXh0KSk7CitpbnQgIGV2R2V0T3B0aW9uIF9fUCgoZXZDb250ZXh0ICosIGNvbnN0IGNoYXIgKiwgaW50ICopKTsKK2ludCAgZXZTZXRPcHRpb24gX19QKChldkNvbnRleHQgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKKworLyogZXZfY29ubmVjdHMuYyAqLworI2RlZmluZSBldkxpc3RlbglfX2V2TGlzdGVuCisjZGVmaW5lIGV2Q29ubmVjdAlfX2V2Q29ubmVjdAorI2RlZmluZSBldkNhbmNlbENvbm4JX19ldkNhbmNlbENvbm4KKyNkZWZpbmUgZXZIb2xkCQlfX2V2SG9sZAorI2RlZmluZSBldlVuaG9sZAlfX2V2VW5ob2xkCisjZGVmaW5lIGV2VHJ5QWNjZXB0CV9fZXZUcnlBY2NlcHQKKworaW50IGV2TGlzdGVuIF9fUCgoZXZDb250ZXh0LCBpbnQsIGludCwgZXZDb25uRnVuYywgdm9pZCAqLCBldkNvbm5JRCAqKSk7CitpbnQgZXZDb25uZWN0IF9fUCgoZXZDb250ZXh0LCBpbnQsIGNvbnN0IHZvaWQgKiwgaW50LAorCQkgICBldkNvbm5GdW5jLCB2b2lkICosIGV2Q29ubklEICopKTsKK2ludCBldkNhbmNlbENvbm4gX19QKChldkNvbnRleHQsIGV2Q29ubklEKSk7CitpbnQgZXZIb2xkIF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCkpOworaW50IGV2VW5ob2xkIF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCkpOworaW50IGV2VHJ5QWNjZXB0IF9fUCgoZXZDb250ZXh0LCBldkNvbm5JRCwgaW50ICopKTsKKworLyogZXZfZmlsZXMuYyAqLworI2RlZmluZSBldlNlbGVjdEZECV9fZXZTZWxlY3RGRAorI2RlZmluZSBldkRlc2VsZWN0RkQJX19ldkRlc2VsZWN0RkQKKworaW50IGV2U2VsZWN0RkQgX19QKChldkNvbnRleHQsIGludCwgaW50LCBldkZpbGVGdW5jLCB2b2lkICosIGV2RmlsZUlEICopKTsKK2ludCBldkRlc2VsZWN0RkQgX19QKChldkNvbnRleHQsIGV2RmlsZUlEKSk7CisKKy8qIGV2X3N0cmVhbXMuYyAqLworI2RlZmluZSBldkNvbnNJb3ZlYwlfX2V2Q29uc0lvdmVjCisjZGVmaW5lIGV2V3JpdGUJCV9fZXZXcml0ZQorI2RlZmluZSBldlJlYWQJCV9fZXZSZWFkCisjZGVmaW5lIGV2VGltZVJXCV9fZXZUaW1lUlcKKyNkZWZpbmUgZXZVbnRpbWVSVwlfX2V2VW50aW1lUlcKKyNkZWZpbmUJZXZDYW5jZWxSVwlfX2V2Q2FuY2VsUlcKKworc3RydWN0IGlvdmVjIGV2Q29uc0lvdmVjIF9fUCgodm9pZCAqLCBzaXplX3QpKTsKK2ludCBldldyaXRlIF9fUCgoZXZDb250ZXh0LCBpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQsCisJCSBldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqLCBldlN0cmVhbUlEICopKTsKK2ludCBldlJlYWQgX19QKChldkNvbnRleHQsIGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCwKKwkJZXZTdHJlYW1GdW5jIGZ1bmMsIHZvaWQgKiwgZXZTdHJlYW1JRCAqKSk7CitpbnQgZXZUaW1lUlcgX19QKChldkNvbnRleHQsIGV2U3RyZWFtSUQsIGV2VGltZXJJRCB0aW1lcikpOworaW50IGV2VW50aW1lUlcgX19QKChldkNvbnRleHQsIGV2U3RyZWFtSUQpKTsKK2ludCBldkNhbmNlbFJXIF9fUCgoZXZDb250ZXh0LCBldlN0cmVhbUlEKSk7CisKKy8qIGV2X3RpbWVycy5jICovCisjZGVmaW5lIGV2Q29uc1RpbWUJX19ldkNvbnNUaW1lCisjZGVmaW5lIGV2QWRkVGltZQlfX2V2QWRkVGltZQorI2RlZmluZSBldlN1YlRpbWUJX19ldlN1YlRpbWUKKyNkZWZpbmUgZXZDbXBUaW1lCV9fZXZDbXBUaW1lCisjZGVmaW5lCWV2VGltZVNwZWMJX19ldlRpbWVTcGVjCisjZGVmaW5lCWV2VGltZVZhbAlfX2V2VGltZVZhbAorCisjZGVmaW5lIGV2Tm93VGltZQkJX19ldk5vd1RpbWUKKyNkZWZpbmUgZXZVVENUaW1lCQlfX2V2VVRDVGltZQorI2RlZmluZSBldkxhc3RFdmVudFRpbWUJCV9fZXZMYXN0RXZlbnRUaW1lCisjZGVmaW5lIGV2U2V0VGltZXIJCV9fZXZTZXRUaW1lcgorI2RlZmluZSBldkNsZWFyVGltZXIJCV9fZXZDbGVhclRpbWVyCisjZGVmaW5lIGV2Q29uZmlnVGltZXIJCV9fZXZDb25maWdUaW1lcgorI2RlZmluZSBldlJlc2V0VGltZXIJCV9fZXZSZXNldFRpbWVyCisjZGVmaW5lIGV2U2V0SWRsZVRpbWVyCQlfX2V2U2V0SWRsZVRpbWVyCisjZGVmaW5lIGV2Q2xlYXJJZGxlVGltZXIJX19ldkNsZWFySWRsZVRpbWVyCisjZGVmaW5lIGV2UmVzZXRJZGxlVGltZXIJX19ldlJlc2V0SWRsZVRpbWVyCisjZGVmaW5lIGV2VG91Y2hJZGxlVGltZXIJX19ldlRvdWNoSWRsZVRpbWVyCisKK3N0cnVjdCB0aW1lc3BlYyBldkNvbnNUaW1lIF9fUCgodGltZV90IHNlYywgbG9uZyBuc2VjKSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZBZGRUaW1lIF9fUCgoc3RydWN0IHRpbWVzcGVjLCBzdHJ1Y3QgdGltZXNwZWMpKTsKK3N0cnVjdCB0aW1lc3BlYyBldlN1YlRpbWUgX19QKChzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOworc3RydWN0IHRpbWVzcGVjIGV2Tm93VGltZSBfX1AoKHZvaWQpKTsKK3N0cnVjdCB0aW1lc3BlYyBldlVUQ1RpbWUgX19QKCh2b2lkKSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZMYXN0RXZlbnRUaW1lIF9fUCgoZXZDb250ZXh0KSk7CitzdHJ1Y3QgdGltZXNwZWMgZXZUaW1lU3BlYyBfX1AoKHN0cnVjdCB0aW1ldmFsKSk7CitzdHJ1Y3QgdGltZXZhbCBldlRpbWVWYWwgX19QKChzdHJ1Y3QgdGltZXNwZWMpKTsKK2ludCBldkNtcFRpbWUgX19QKChzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOworaW50IGV2U2V0VGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJGdW5jLCB2b2lkICosIHN0cnVjdCB0aW1lc3BlYywKKwkJICAgIHN0cnVjdCB0aW1lc3BlYywgZXZUaW1lcklEICopKTsKK2ludCBldkNsZWFyVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCkpOworaW50IGV2Q29uZmlnVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCwgY29uc3QgY2hhciAqcGFyYW0sCisJCSAgICAgIGludCB2YWx1ZSkpOworaW50IGV2UmVzZXRUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklELCBldlRpbWVyRnVuYywgdm9pZCAqLAorCQkgICAgICBzdHJ1Y3QgdGltZXNwZWMsIHN0cnVjdCB0aW1lc3BlYykpOworaW50IGV2U2V0SWRsZVRpbWVyIF9fUCgoZXZDb250ZXh0LCBldlRpbWVyRnVuYywgdm9pZCAqLCBzdHJ1Y3QgdGltZXNwZWMsCisJCQlldlRpbWVySUQgKikpOworaW50IGV2Q2xlYXJJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCkpOworaW50IGV2UmVzZXRJZGxlVGltZXIgX19QKChldkNvbnRleHQsIGV2VGltZXJJRCwgZXZUaW1lckZ1bmMsIHZvaWQgKiwKKwkJCSAgc3RydWN0IHRpbWVzcGVjKSk7CitpbnQgZXZUb3VjaElkbGVUaW1lciBfX1AoKGV2Q29udGV4dCwgZXZUaW1lcklEKSk7CisKKy8qIGV2X3dhaXRzLmMgKi8KKyNkZWZpbmUgZXZXYWl0Rm9yCV9fZXZXYWl0Rm9yCisjZGVmaW5lIGV2RG8JCV9fZXZEbworI2RlZmluZSBldlVud2FpdAlfX2V2VW53YWl0CisjZGVmaW5lIGV2RGVmZXIJCV9fZXZEZWZlcgorCitpbnQgZXZXYWl0Rm9yIF9fUCgoZXZDb250ZXh0LCBjb25zdCB2b2lkICosIGV2V2FpdEZ1bmMsIHZvaWQgKiwgZXZXYWl0SUQgKikpOworaW50IGV2RG8gX19QKChldkNvbnRleHQsIGNvbnN0IHZvaWQgKikpOworaW50IGV2VW53YWl0IF9fUCgoZXZDb250ZXh0LCBldldhaXRJRCkpOworaW50IGV2RGVmZXIgX19QKChldkNvbnRleHQsIGV2V2FpdEZ1bmMsIHZvaWQgKikpOworCisjaWZkZWYgX19FVkVOVExJQl9QX0RFRklORUQKKyMgdW5kZWYgX19QCisjZW5kaWYKKworI2VuZGlmIC8qX0VWRU5UTElCX0gqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmggYi9saWJjL2luY2x1ZGUvaXNjL2hlYXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTVhNmU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2lzYy9oZWFwLmgKQEAgLTAsMCArMSw0OSBAQAorLyoJJE5ldEJTRDogaGVhcC5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE5OjQ5OjQxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCit0eXBlZGVmIGludCAoKmhlYXBfaGlnaGVyX3ByaW9yaXR5X2Z1bmMpKHZvaWQgKiwgdm9pZCAqKTsKK3R5cGVkZWYgdm9pZCAoKmhlYXBfaW5kZXhfZnVuYykodm9pZCAqLCBpbnQpOwordHlwZWRlZiB2b2lkICgqaGVhcF9mb3JfZWFjaF9mdW5jKSh2b2lkICosIHZvaWQgKik7CisKK3R5cGVkZWYgc3RydWN0IGhlYXBfY29udGV4dCB7CisJaW50IGFycmF5X3NpemU7CisJaW50IGFycmF5X3NpemVfaW5jcmVtZW50OworCWludCBoZWFwX3NpemU7CisJdm9pZCAqKmhlYXA7CisJaGVhcF9oaWdoZXJfcHJpb3JpdHlfZnVuYyBoaWdoZXJfcHJpb3JpdHk7CisJaGVhcF9pbmRleF9mdW5jIGluZGV4OworfSAqaGVhcF9jb250ZXh0OworCisjZGVmaW5lIGhlYXBfbmV3CV9faGVhcF9uZXcKKyNkZWZpbmUgaGVhcF9mcmVlCV9faGVhcF9mcmVlCisjZGVmaW5lIGhlYXBfaW5zZXJ0CV9faGVhcF9pbnNlcnQKKyNkZWZpbmUgaGVhcF9kZWxldGUJX19oZWFwX2RlbGV0ZQorI2RlZmluZSBoZWFwX2luY3JlYXNlZAlfX2hlYXBfaW5jcmVhc2VkCisjZGVmaW5lIGhlYXBfZGVjcmVhc2VkCV9faGVhcF9kZWNyZWFzZWQKKyNkZWZpbmUgaGVhcF9lbGVtZW50CV9faGVhcF9lbGVtZW50CisjZGVmaW5lIGhlYXBfZm9yX2VhY2gJX19oZWFwX2Zvcl9lYWNoCisKK2hlYXBfY29udGV4dAloZWFwX25ldyhoZWFwX2hpZ2hlcl9wcmlvcml0eV9mdW5jLCBoZWFwX2luZGV4X2Z1bmMsIGludCk7CitpbnQJCWhlYXBfZnJlZShoZWFwX2NvbnRleHQpOworaW50CQloZWFwX2luc2VydChoZWFwX2NvbnRleHQsIHZvaWQgKik7CitpbnQJCWhlYXBfZGVsZXRlKGhlYXBfY29udGV4dCwgaW50KTsKK2ludAkJaGVhcF9pbmNyZWFzZWQoaGVhcF9jb250ZXh0LCBpbnQpOworaW50CQloZWFwX2RlY3JlYXNlZChoZWFwX2NvbnRleHQsIGludCk7Cit2b2lkICoJCWhlYXBfZWxlbWVudChoZWFwX2NvbnRleHQsIGludCk7CitpbnQJCWhlYXBfZm9yX2VhY2goaGVhcF9jb250ZXh0LCBoZWFwX2Zvcl9lYWNoX2Z1bmMsIHZvaWQgKik7CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaCBiL2xpYmMvaW5jbHVkZS9pc2MvbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4OTc2NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvaXNjL2xpc3QuaApAQCAtMCwwICsxLDExNCBAQAorLyoJJE5ldEJTRDogbGlzdC5oLHYgMS4yIDIwMDQvMDUvMjAgMTk6NTE6NTUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk3LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTElTVF9ICisjZGVmaW5lIExJU1RfSCAxCisjaW5jbHVkZSA8aXNjL2Fzc2VydGlvbnMuaD4KKworI2RlZmluZSBMSVNUKHR5cGUpIHN0cnVjdCB7IHR5cGUgKmhlYWQsICp0YWlsOyB9CisjZGVmaW5lIElOSVRfTElTVChsaXN0KSBcCisJZG8geyAobGlzdCkuaGVhZCA9IE5VTEw7IChsaXN0KS50YWlsID0gTlVMTDsgfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTElOSyh0eXBlKSBzdHJ1Y3QgeyB0eXBlICpwcmV2LCAqbmV4dDsgfQorI2RlZmluZSBJTklUX0xJTktfVFlQRShlbHQsIGxpbmssIHR5cGUpIFwKKwlkbyB7IFwKKwkJKGVsdCktPmxpbmsucHJldiA9ICh0eXBlICopKC0xKTsgXAorCQkoZWx0KS0+bGluay5uZXh0ID0gKHR5cGUgKikoLTEpOyBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisjZGVmaW5lIElOSVRfTElOSyhlbHQsIGxpbmspIFwKKwlJTklUX0xJTktfVFlQRShlbHQsIGxpbmssIHZvaWQpCisjZGVmaW5lIExJTktFRChlbHQsIGxpbmspICgodm9pZCAqKSgoZWx0KS0+bGluay5wcmV2KSAhPSAodm9pZCAqKSgtMSkpCisKKyNkZWZpbmUgSEVBRChsaXN0KSAoKGxpc3QpLmhlYWQpCisjZGVmaW5lIFRBSUwobGlzdCkgKChsaXN0KS50YWlsKQorI2RlZmluZSBFTVBUWShsaXN0KSAoKGxpc3QpLmhlYWQgPT0gTlVMTCkKKworI2RlZmluZSBQUkVQRU5EKGxpc3QsIGVsdCwgbGluaykgXAorCWRvIHsgXAorCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCisJCWlmICgobGlzdCkuaGVhZCAhPSBOVUxMKSBcCisJCQkobGlzdCkuaGVhZC0+bGluay5wcmV2ID0gKGVsdCk7IFwKKwkJZWxzZSBcCisJCQkobGlzdCkudGFpbCA9IChlbHQpOyBcCisJCShlbHQpLT5saW5rLnByZXYgPSBOVUxMOyBcCisJCShlbHQpLT5saW5rLm5leHQgPSAobGlzdCkuaGVhZDsgXAorCQkobGlzdCkuaGVhZCA9IChlbHQpOyBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgQVBQRU5EKGxpc3QsIGVsdCwgbGluaykgXAorCWRvIHsgXAorCQlJTlNJU1QoIUxJTktFRChlbHQsIGxpbmspKTtcCisJCWlmICgobGlzdCkudGFpbCAhPSBOVUxMKSBcCisJCQkobGlzdCkudGFpbC0+bGluay5uZXh0ID0gKGVsdCk7IFwKKwkJZWxzZSBcCisJCQkobGlzdCkuaGVhZCA9IChlbHQpOyBcCisJCShlbHQpLT5saW5rLnByZXYgPSAobGlzdCkudGFpbDsgXAorCQkoZWx0KS0+bGluay5uZXh0ID0gTlVMTDsgXAorCQkobGlzdCkudGFpbCA9IChlbHQpOyBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgVU5MSU5LX1RZUEUobGlzdCwgZWx0LCBsaW5rLCB0eXBlKSBcCisJZG8geyBcCisJCUlOU0lTVChMSU5LRUQoZWx0LCBsaW5rKSk7XAorCQlpZiAoKGVsdCktPmxpbmsubmV4dCAhPSBOVUxMKSBcCisJCQkoZWx0KS0+bGluay5uZXh0LT5saW5rLnByZXYgPSAoZWx0KS0+bGluay5wcmV2OyBcCisJCWVsc2UgXAorCQkJKGxpc3QpLnRhaWwgPSAoZWx0KS0+bGluay5wcmV2OyBcCisJCWlmICgoZWx0KS0+bGluay5wcmV2ICE9IE5VTEwpIFwKKwkJCShlbHQpLT5saW5rLnByZXYtPmxpbmsubmV4dCA9IChlbHQpLT5saW5rLm5leHQ7IFwKKwkJZWxzZSBcCisJCQkobGlzdCkuaGVhZCA9IChlbHQpLT5saW5rLm5leHQ7IFwKKwkJSU5JVF9MSU5LX1RZUEUoZWx0LCBsaW5rLCB0eXBlKTsgXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorI2RlZmluZSBVTkxJTksobGlzdCwgZWx0LCBsaW5rKSBcCisJVU5MSU5LX1RZUEUobGlzdCwgZWx0LCBsaW5rLCB2b2lkKQorCisjZGVmaW5lIFBSRVYoZWx0LCBsaW5rKSAoKGVsdCktPmxpbmsucHJldikKKyNkZWZpbmUgTkVYVChlbHQsIGxpbmspICgoZWx0KS0+bGluay5uZXh0KQorCisjZGVmaW5lIElOU0VSVF9CRUZPUkUobGlzdCwgYmVmb3JlLCBlbHQsIGxpbmspIFwKKwlkbyB7IFwKKwkJSU5TSVNUKCFMSU5LRUQoZWx0LCBsaW5rKSk7XAorCQlpZiAoKGJlZm9yZSktPmxpbmsucHJldiA9PSBOVUxMKSBcCisJCQlQUkVQRU5EKGxpc3QsIGVsdCwgbGluayk7IFwKKwkJZWxzZSB7IFwKKwkJCShlbHQpLT5saW5rLnByZXYgPSAoYmVmb3JlKS0+bGluay5wcmV2OyBcCisJCQkoYmVmb3JlKS0+bGluay5wcmV2ID0gKGVsdCk7IFwKKwkJCShlbHQpLT5saW5rLnByZXYtPmxpbmsubmV4dCA9IChlbHQpOyBcCisJCQkoZWx0KS0+bGluay5uZXh0ID0gKGJlZm9yZSk7IFwKKwkJfSBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgSU5TRVJUX0FGVEVSKGxpc3QsIGFmdGVyLCBlbHQsIGxpbmspIFwKKwlkbyB7IFwKKwkJSU5TSVNUKCFMSU5LRUQoZWx0LCBsaW5rKSk7XAorCQlpZiAoKGFmdGVyKS0+bGluay5uZXh0ID09IE5VTEwpIFwKKwkJCUFQUEVORChsaXN0LCBlbHQsIGxpbmspOyBcCisJCWVsc2UgeyBcCisJCQkoZWx0KS0+bGluay5uZXh0ID0gKGFmdGVyKS0+bGluay5uZXh0OyBcCisJCQkoYWZ0ZXIpLT5saW5rLm5leHQgPSAoZWx0KTsgXAorCQkJKGVsdCktPmxpbmsubmV4dC0+bGluay5wcmV2ID0gKGVsdCk7IFwKKwkJCShlbHQpLT5saW5rLnByZXYgPSAoYWZ0ZXIpOyBcCisJCX0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCisjZGVmaW5lIEVOUVVFVUUobGlzdCwgZWx0LCBsaW5rKSBBUFBFTkQobGlzdCwgZWx0LCBsaW5rKQorI2RlZmluZSBERVFVRVVFKGxpc3QsIGVsdCwgbGluaykgVU5MSU5LKGxpc3QsIGVsdCwgbGluaykKKworI2VuZGlmIC8qIExJU1RfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmggYi9saWJjL2luY2x1ZGUvaXNjL21lbWNsdXN0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZGFhZjIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2lzYy9tZW1jbHVzdGVyLmgKQEAgLTAsMCArMSw1MSBAQAorLyoJJE5ldEJTRDogbWVtY2x1c3Rlci5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE5OjQ5OjQxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NywxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIE1FTUNMVVNURVJfSAorI2RlZmluZSBNRU1DTFVTVEVSX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUgbWVtaW5pdAkJX19tZW1pbml0CisjaWZkZWYgTUVNQ0xVU1RFUl9ERUJVRworI2RlZmluZSBtZW1nZXQocykJX19tZW1nZXRfZGVidWcocywgX19GSUxFX18sIF9fTElORV9fKQorI2RlZmluZSBtZW1wdXQocCwgcykJX19tZW1wdXRfZGVidWcocCwgcywgX19GSUxFX18sIF9fTElORV9fKQorI2Vsc2UgLypNRU1DTFVTVEVSX0RFQlVHKi8KKyNpZmRlZiBNRU1DTFVTVEVSX1JFQ09SRAorI2RlZmluZSBtZW1nZXQocykJX19tZW1nZXRfcmVjb3JkKHMsIF9fRklMRV9fLCBfX0xJTkVfXykKKyNkZWZpbmUgbWVtcHV0KHAsIHMpCV9fbWVtcHV0X3JlY29yZChwLCBzLCBfX0ZJTEVfXywgX19MSU5FX18pCisjZWxzZSAvKk1FTUNMVVNURVJfUkVDT1JEKi8KKyNkZWZpbmUgbWVtZ2V0CQlfX21lbWdldAorI2RlZmluZSBtZW1wdXQJCV9fbWVtcHV0CisjZW5kaWYgLypNRU1DTFVTVEVSX1JFQ09SRCovCisjZW5kaWYgLypNRU1DTFVTVEVSX0RFQlVHKi8KKyNkZWZpbmUgbWVtc3RhdHMJX19tZW1zdGF0cworI2RlZmluZSBtZW1hY3RpdmUJX19tZW1hY3RpdmUKKworaW50CW1lbWluaXQoc2l6ZV90LCBzaXplX3QpOwordm9pZCAqCV9fbWVtZ2V0KHNpemVfdCk7Cit2b2lkIAlfX21lbXB1dCh2b2lkICosIHNpemVfdCk7Cit2b2lkICoJX19tZW1nZXRfZGVidWcoc2l6ZV90LCBjb25zdCBjaGFyICosIGludCk7Cit2b2lkIAlfX21lbXB1dF9kZWJ1Zyh2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZCAqCV9fbWVtZ2V0X3JlY29yZChzaXplX3QsIGNvbnN0IGNoYXIgKiwgaW50KTsKK3ZvaWQgCV9fbWVtcHV0X3JlY29yZCh2b2lkICosIHNpemVfdCwgY29uc3QgY2hhciAqLCBpbnQpOwordm9pZCAJbWVtc3RhdHMoRklMRSAqKTsKK2ludAltZW1hY3RpdmUodm9pZCk7CisKKyNlbmRpZiAvKiBNRU1DTFVTVEVSX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9sYXN0bG9nLmggYi9saWJjL2luY2x1ZGUvbGFzdGxvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbGFzdGxvZy5oCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbGliZ2VuLmggYi9saWJjL2luY2x1ZGUvbGliZ2VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVmYzc2YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9saWJnZW4uaApAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9MSUJHRU5fSAorI2RlZmluZSBfTElCR0VOX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIG91ciB2ZXJzaW9uIG9mIGRpcm5hbWUvYmFzZW5hbWUgZG9uJ3QgbW9kaWZ5IHRoZSBpbnB1dCBwYXRoICovCitleHRlcm4gY2hhciogIGRpcm5hbWUgKGNvbnN0IGNoYXIqICBwYXRoKTsKK2V4dGVybiBjaGFyKiAgYmFzZW5hbWUoY29uc3QgY2hhciogIHBhdGgpOworCisvKiBzcGVjaWFsIHRocmVhZC1zYWZlIEJpb25pYyB2ZXJzaW9ucworICoKKyAqIGlmICdidWZmZXInIGlzIE5VTEwsICdidWZmbGVuJyBpcyBpZ25vcmVkIGFuZCB0aGUgbGVuZ3RoIG9mIHRoZSByZXN1bHQgaXMgcmV0dXJuZWQKKyAqIG90aGVyd2lzZSwgcGxhY2UgcmVzdWx0IGluICdidWZmZXInCisgKgorICogYXQgbW9zdCBidWZmbGVuLTEgY2hhcmFjdGVycyB3cml0dGVuLCBwbHVzIGEgdGVybWluYXRpbmcgemVybworICoKKyAqIHJldHVybiBsZW5ndGggb2YgcmVzdWx0LCBvciAtMSBpbiBjYXNlIG9mIGVycm9yLCB3aXRoIGVycm5vIHNldCB0bzoKKyAqCisgKiAgICBFUkFOR0U6ICAgICAgICBidWZmZXIgaXMgdG9vIHNob3J0CisgKiAgICBFTkFNRVRPT0xPTkc6ICB0aGUgcmVzdWx0IGlzIHRvbyBsb25nIGZvciBhIHZhbGlkIHBhdGgKKyAqLworZXh0ZXJuIGludCAgICBkaXJuYW1lX3IoY29uc3QgY2hhciogIHBhdGgsIGNoYXIqICBidWZmZXIsIHNpemVfdCAgYnVmZmxlbik7CitleHRlcm4gaW50ICAgIGJhc2VuYW1lX3IoY29uc3QgY2hhciogIHBhdGgsIGNoYXIqICBidWZmZXIsIHNpemVfdCAgYnVmZmxlbik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTElCR0VOX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9saW1pdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjA0ZTRkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2xpbWl0cy5oCkBAIC0wLDAgKzEsOTYgQEAKKy8qCSRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuMTMgMjAwNS8xMi8zMSAxOToyOTozOCBtaWxsZXJ0IEV4cCAkCSovCisvKgkkTmV0QlNEOiBsaW1pdHMuaCx2IDEuNyAxOTk0LzEwLzI2IDAwOjU2OjAwIGNnZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpbGltaXRzLmgJNS45IChCZXJrZWxleSkgNC8zLzkxCisgKi8KKworI2lmbmRlZiBfTElNSVRTX0hfCisjZGVmaW5lCV9MSU1JVFNfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjaWYgX19QT1NJWF9WSVNJQkxFCisjZGVmaW5lCV9QT1NJWF9BUkdfTUFYCQk0MDk2CisjZGVmaW5lCV9QT1NJWF9DSElMRF9NQVgJMjUKKyNkZWZpbmUJX1BPU0lYX0xJTktfTUFYCQk4CisjZGVmaW5lCV9QT1NJWF9NQVhfQ0FOT04JMjU1CisjZGVmaW5lCV9QT1NJWF9NQVhfSU5QVVQJMjU1CisjZGVmaW5lCV9QT1NJWF9OQU1FX01BWAkJMTQKKyNkZWZpbmUJX1BPU0lYX05HUk9VUFNfTUFYCTAKKyNkZWZpbmUJX1BPU0lYX09QRU5fTUFYCQkxNgorI2RlZmluZQlfUE9TSVhfUEFUSF9NQVgJCTI1NgorI2RlZmluZSBfUE9TSVhfUElQRV9CVUYJCTUxMgorI2RlZmluZQlfUE9TSVhfUkVfRFVQX01BWAkyNTUKKyNkZWZpbmUgX1BPU0lYX1NTSVpFX01BWAkzMjc2NworI2RlZmluZSBfUE9TSVhfU1RSRUFNX01BWAk4CisjZGVmaW5lIF9QT1NJWF9TWU1MSU5LX01BWAkyNTUKKyNkZWZpbmUgX1BPU0lYX1NZTUxPT1BfTUFYCTgKKyNkZWZpbmUgX1BPU0lYX1RaTkFNRV9NQVgJMworCisjZGVmaW5lCV9QT1NJWDJfQkNfQkFTRV9NQVgJOTkKKyNkZWZpbmUJX1BPU0lYMl9CQ19ESU1fTUFYCTIwNDgKKyNkZWZpbmUJX1BPU0lYMl9CQ19TQ0FMRV9NQVgJOTkKKyNkZWZpbmUJX1BPU0lYMl9CQ19TVFJJTkdfTUFYCTEwMDAKKyNkZWZpbmUJX1BPU0lYMl9DT0xMX1dFSUdIVFNfTUFYCTIKKyNkZWZpbmUJX1BPU0lYMl9FWFBSX05FU1RfTUFYCTMyCisjZGVmaW5lCV9QT1NJWDJfTElORV9NQVgJMjA0OAorI2RlZmluZQlfUE9TSVgyX1JFX0RVUF9NQVgJX1BPU0lYX1JFX0RVUF9NQVgKKworI2lmIF9fUE9TSVhfVklTSUJMRSA+PSAyMDAxMTIKKyNkZWZpbmUgX1BPU0lYX1RUWV9OQU1FX01BWAk5CS8qIGluY2x1ZGVzIHRyYWlsaW5nIE5VTCAqLworI2RlZmluZSBfUE9TSVhfTE9HSU5fTkFNRV9NQVgJOQkvKiBpbmNsdWRlcyB0cmFpbGluZyBOVUwgKi8KKyNlbmRpZiAvKiBfX1BPU0lYX1ZJU0lCTEUgPj0gMjAwMTEyICovCisjZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFICovCisKKyNpZiBfX1hQR19WSVNJQkxFCisjZGVmaW5lIFBBU1NfTUFYCQkxMjgJLyogX1BBU1NXT1JEX0xFTiBmcm9tIDxwd2QuaD4gKi8KKworI2RlZmluZSBOTF9BUkdNQVgJCTkKKyNkZWZpbmUgTkxfTEFOR01BWAkJMTQKKyNkZWZpbmUgTkxfTVNHTUFYCQkzMjc2NworI2RlZmluZSBOTF9OTUFYCQkJMQorI2RlZmluZSBOTF9TRVRNQVgJCTI1NQorI2RlZmluZSBOTF9URVhUTUFYCQkyNTUKKworI2RlZmluZSBUTVBfTUFYICAgICAgICAgICAgICAgICAzMDg5MTU3NzYKKyNlbmRpZiAvKiBfX1hQR19WSVNJQkxFICovCisKKyNpbmNsdWRlIDxzeXMvbGltaXRzLmg+CisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUKKyNpbmNsdWRlIDxhcmNoL3N5c2xpbWl0cy5oPgorI2VuZGlmCisKKyNpZm5kZWYgUEFHRVNJWkUKKyNkZWZpbmUgIFBBR0VTSVpFICBQQUdFX1NJWkUKKyNlbmRpZgorCisjZW5kaWYgLyogIV9MSU1JVFNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9sb2NhbGUuaCBiL2xpYmMvaW5jbHVkZS9sb2NhbGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTExYjA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL2xvY2FsZS5oCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX0xPQ0FMRV9IXworI2RlZmluZSBfTE9DQUxFX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCitlbnVtIHsKKyAgICBMQ19DVFlQRSAgICAgPSAwLAorICAgIExDX05VTUVSSUMgICA9IDEsCisgICAgTENfVElNRSAgICAgID0gMiwKKyAgICBMQ19DT0xMQVRFICAgPSAzLAorICAgIExDX01PTkVUQVJZICA9IDQsCisgICAgTENfTUVTU0FHRVMgID0gNSwKKyAgICBMQ19BTEwgICAgICAgPSA2LAorICAgIExDX1BBUEVSICAgICA9IDcsCisgICAgTENfTkFNRSAgICAgID0gOCwKKyAgICBMQ19BRERSRVNTICAgPSA5LAorCisgICAgTENfVEVMRVBIT05FICAgICAgPSAxMCwKKyAgICBMQ19NRUFTVVJFTUVOVCAgICA9IDExLAorICAgIExDX0lERU5USUZJQ0FUSU9OID0gMTIKK307CisKK2V4dGVybiBjaGFyICpzZXRsb2NhbGUoaW50IGNhdGVnb3J5LCBjb25zdCBjaGFyICpsb2NhbGUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX0xPQ0FMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21hbGxvYy5oIGIvbGliYy9pbmNsdWRlL21hbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4NjQyODYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWFsbG9jLmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX01BTExPQ19IXworI2RlZmluZSBfTUFMTE9DX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gX19tYWxsb2NmdW5jIHZvaWQqICBtYWxsb2Moc2l6ZV90KTsKK2V4dGVybiBfX21hbGxvY2Z1bmMgdm9pZCogIGNhbGxvYyhzaXplX3QsIHNpemVfdCk7CitleHRlcm4gX19tYWxsb2NmdW5jIHZvaWQqICByZWFsbG9jKHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiAgICAgICAgICAgICAgICB2b2lkICAgZnJlZSh2b2lkICopOworCitleHRlcm4gdm9pZCogICBtZW1hbGlnbihzaXplX3QgIGFsaWdubWVudCwgc2l6ZV90ICBieXRlc2l6ZSk7CitleHRlcm4gdm9pZCogICB2YWxsb2Moc2l6ZV90ICBieXRlc2l6ZSk7CitleHRlcm4gdm9pZCogICBwdmFsbG9jKHNpemVfdCAgYnl0ZXNpemUpOworZXh0ZXJuIGludCAgICAgbWFsbG9wdChpbnQgIHBhcmFtX251bWJlciwgaW50ICBwYXJhbV92YWx1ZSk7CitleHRlcm4gc2l6ZV90ICBtYWxsb2NfZm9vdHByaW50KHZvaWQpOworZXh0ZXJuIHNpemVfdCAgbWFsbG9jX21heF9mb290cHJpbnQodm9pZCk7CisKK3N0cnVjdCBtYWxsaW5mbyB7CisgICAgc2l6ZV90IGFyZW5hOyAgICAvKiBub24tbW1hcHBlZCBzcGFjZSBhbGxvY2F0ZWQgZnJvbSBzeXN0ZW0gKi8KKyAgICBzaXplX3Qgb3JkYmxrczsgIC8qIG51bWJlciBvZiBmcmVlIGNodW5rcyAqLworICAgIHNpemVfdCBzbWJsa3M7ICAgLyogYWx3YXlzIDAgKi8KKyAgICBzaXplX3QgaGJsa3M7ICAgIC8qIGFsd2F5cyAwICovCisgICAgc2l6ZV90IGhibGtoZDsgICAvKiBzcGFjZSBpbiBtbWFwcGVkIHJlZ2lvbnMgKi8KKyAgICBzaXplX3QgdXNtYmxrczsgIC8qIG1heGltdW0gdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgICAgc2l6ZV90IGZzbWJsa3M7ICAvKiBhbHdheXMgMCAqLworICAgIHNpemVfdCB1b3JkYmxrczsgLyogdG90YWwgYWxsb2NhdGVkIHNwYWNlICovCisgICAgc2l6ZV90IGZvcmRibGtzOyAvKiB0b3RhbCBmcmVlIHNwYWNlICovCisgICAgc2l6ZV90IGtlZXBjb3N0OyAvKiByZWxlYXNhYmxlICh2aWEgbWFsbG9jX3RyaW0pIHNwYWNlICovCit9OworCitleHRlcm4gc3RydWN0IG1hbGxpbmZvICBtYWxsaW5mbyh2b2lkKTsKKworCisvKgorICBtYWxsb2NfdXNhYmxlX3NpemUodm9pZCogcCk7CisKKyAgUmV0dXJucyB0aGUgbnVtYmVyIG9mIGJ5dGVzIHlvdSBjYW4gYWN0dWFsbHkgdXNlIGluCisgIGFuIGFsbG9jYXRlZCBjaHVuaywgd2hpY2ggbWF5IGJlIG1vcmUgdGhhbiB5b3UgcmVxdWVzdGVkIChhbHRob3VnaAorICBvZnRlbiBub3QpIGR1ZSB0byBhbGlnbm1lbnQgYW5kIG1pbmltdW0gc2l6ZSBjb25zdHJhaW50cy4KKyAgWW91IGNhbiB1c2UgdGhpcyBtYW55IGJ5dGVzIHdpdGhvdXQgd29ycnlpbmcgYWJvdXQKKyAgb3ZlcndyaXRpbmcgb3RoZXIgYWxsb2NhdGVkIG9iamVjdHMuIFRoaXMgaXMgbm90IGEgcGFydGljdWxhcmx5IGdyZWF0CisgIHByb2dyYW1taW5nIHByYWN0aWNlLiBtYWxsb2NfdXNhYmxlX3NpemUgY2FuIGJlIG1vcmUgdXNlZnVsIGluCisgIGRlYnVnZ2luZyBhbmQgYXNzZXJ0aW9ucywgZm9yIGV4YW1wbGU6CisKKyAgcCA9IG1hbGxvYyhuKTsKKyAgYXNzZXJ0KG1hbGxvY191c2FibGVfc2l6ZShwKSA+PSAyNTYpOworKi8KK2V4dGVybiBzaXplX3QgbWFsbG9jX3VzYWJsZV9zaXplKHZvaWQqICBibG9jayk7CisKKy8qCisgIG1hbGxvY19zdGF0cygpOworICBQcmludHMgb24gc3RkZXJyIHRoZSBhbW91bnQgb2Ygc3BhY2Ugb2J0YWluZWQgZnJvbSB0aGUgc3lzdGVtIChib3RoCisgIHZpYSBzYnJrIGFuZCBtbWFwKSwgdGhlIG1heGltdW0gYW1vdW50ICh3aGljaCBtYXkgYmUgbW9yZSB0aGFuCisgIGN1cnJlbnQgaWYgbWFsbG9jX3RyaW0gYW5kL29yIG11bm1hcCBnb3QgY2FsbGVkKSwgYW5kIHRoZSBjdXJyZW50CisgIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQgdmlhIG1hbGxvYyAob3IgcmVhbGxvYywgZXRjKSBidXQgbm90IHlldAorICBmcmVlZC4gTm90ZSB0aGF0IHRoaXMgaXMgdGhlIG51bWJlciBvZiBieXRlcyBhbGxvY2F0ZWQsIG5vdCB0aGUKKyAgbnVtYmVyIHJlcXVlc3RlZC4gSXQgd2lsbCBiZSBsYXJnZXIgdGhhbiB0aGUgbnVtYmVyIHJlcXVlc3RlZAorICBiZWNhdXNlIG9mIGFsaWdubWVudCBhbmQgYm9va2tlZXBpbmcgb3ZlcmhlYWQuIEJlY2F1c2UgaXQgaW5jbHVkZXMKKyAgYWxpZ25tZW50IHdhc3RhZ2UgYXMgYmVpbmcgaW4gdXNlLCB0aGlzIGZpZ3VyZSBtYXkgYmUgZ3JlYXRlciB0aGFuCisgIHplcm8gZXZlbiB3aGVuIG5vIHVzZXItbGV2ZWwgY2h1bmtzIGFyZSBhbGxvY2F0ZWQuCisKKyAgVGhlIHJlcG9ydGVkIGN1cnJlbnQgYW5kIG1heGltdW0gc3lzdGVtIG1lbW9yeSBjYW4gYmUgaW5hY2N1cmF0ZSBpZgorICBhIHByb2dyYW0gbWFrZXMgb3RoZXIgY2FsbHMgdG8gc3lzdGVtIG1lbW9yeSBhbGxvY2F0aW9uIGZ1bmN0aW9ucworICAobm9ybWFsbHkgc2Jyaykgb3V0c2lkZSBvZiBtYWxsb2MuCisKKyAgbWFsbG9jX3N0YXRzIHByaW50cyBvbmx5IHRoZSBtb3N0IGNvbW1vbmx5IGludGVyZXN0aW5nIHN0YXRpc3RpY3MuCisgIE1vcmUgaW5mb3JtYXRpb24gY2FuIGJlIG9idGFpbmVkIGJ5IGNhbGxpbmcgbWFsbGluZm8uCisqLworZXh0ZXJuIHZvaWQgIG1hbGxvY19zdGF0cyh2b2lkKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9NQUxMT0NfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL21lbW9yeS5oIGIvbGliYy9pbmNsdWRlL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbWVtb3J5LmgKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9tbnRlbnQuaCBiL2xpYmMvaW5jbHVkZS9tbnRlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjhmZjc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL21udGVudC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX01OVEVOVF9IXworI2RlZmluZSBfTU5URU5UX0hfCisKKworI2RlZmluZSBNTlRUWVBFX0lHTk9SRSAiaWdub3JlIgorCitzdHJ1Y3QgbW50ZW50Cit7CisgICAgY2hhciogbW50X2ZzbmFtZTsKKyAgICBjaGFyKiBtbnRfZGlyOworICAgIGNoYXIqIG1udF90eXBlOworICAgIGNoYXIqIG1udF9vcHRzOworICAgIGludCBtbnRfZnJlcTsKKyAgICBpbnQgbW50X3Bhc3NubzsKK307CisKKworX19CRUdJTl9ERUNMUworCisKK3N0cnVjdCBtbnRlbnQqIGdldG1udGVudChGSUxFKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9ldGhlcnR5cGVzLmggYi9saWJjL2luY2x1ZGUvbmV0L2V0aGVydHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xY2ZkMmNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldC9ldGhlcnR5cGVzLmgKQEAgLTAsMCArMSwzMTMgQEAKKy8qCSROZXRCU0Q6IGV0aGVydHlwZXMuaCx2IDEuMTcgMjAwNS8xMi8xMCAyMzoyMTozOCBlbGFkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZXRoZXIuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworLyoKKyAqIEV0aGVybmV0IHByb3RvY29sIHR5cGVzLgorICoKKyAqIEFjY29yZGluZyB0byAiYXNzaWduZWQgbnVtYmVycyIsIHRoZSBFdGhlcm5ldCBwcm90b2NvbCBudW1iZXJzIGFyZSBhbHNvCisgKiB1c2VkIGFzIEFSUCBwcm90b2NvbCB0eXBlIG51bWJlcnMuCisgKgorICogSSBmYWN0b3IgdGhlbSBvdXQgaGVyZSB0byBhdm9pZCBwdWxsaW5nIGFsbCB0aGUgRXRoZXJuZXQgaGVhZGVyIGZpbGUKKyAqIGludG8gdGhlIGhhcmR3YXJlIGluZGVwZW5kZW50IEFSUCBjb2RlLiAtaXMKKyAqCisgKiBBZGRpdGlvbmFsIHNvdXJjZXMgb2YgaW5mb3JtYXRpb246CisgKglodHRwOi8vd3d3Lm1pdC5lZHUvfm1hcC9FdGhlcm5ldC9FdGhlcm5ldC50eHQKKyAqCWZ0cDovL3ZlbmVyYS5pc2kuZWR1L2luLW5vdGVzL2lhbmEvYXNzaWdubWVudHMvZXRoZXJuZXQtbnVtYmVycworICoKKyAqLworCisjaWZuZGVmIF9ORVRfRVRIRVJUWVBFU19IXworI2RlZmluZQlfTkVUX0VUSEVSVFlQRVNfSF8KKworLyoKKyAqICBOT1RFOiAweDAwMDAtMHgwNURDICgwLi4xNTAwKSBhcmUgZ2VuZXJhbGx5IElFRUUgODAyLjMgbGVuZ3RoIGZpZWxkcy4KKyAqICBIb3dldmVyLCB0aGVyZSBhcmUgc29tZSBjb25mbGljdHMuCisgKi8KKworI2RlZmluZQlFVEhFUlRZUEVfODAyMwkJMHgwMDA0CS8qIElFRUUgODAyLjMgcGFja2V0ICovCisJCSAgIC8qIDB4MDEwMSAuLiAweDFGRgkgICBFeHBlcmltZW50YWwgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BVUAkJMHgwMjAwCS8qIFhlcm94IFBVUCBwcm90b2NvbCAtIHNlZSAwQTAwICovCisjZGVmaW5lCUVUSEVSVFlQRV9QVVBBVAkJMHgwMjAwCS8qIFBVUCBBZGRyZXNzIFRyYW5zbGF0aW9uIC0gc2VlIDBBMDEgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NQUklURQkweDA1MDAJLyogPz8/ICovCisJCQkgICAgIC8qIDB4MDQwMAkgICBOaXhkb3JmICovCisjZGVmaW5lCUVUSEVSVFlQRV9OUwkJMHgwNjAwCS8qIFhOUyAqLworI2RlZmluZQlFVEhFUlRZUEVfTlNBVAkJMHgwNjAxCS8qIFhOUyBBZGRyZXNzIFRyYW5zbGF0aW9uICgzTWIgb25seSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RMT0cxIAkweDA2NjAJLyogRExPRyAoPykgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RMT0cyIAkweDA2NjEJLyogRExPRyAoPykgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lQCQkweDA4MDAJLyogSVAgcHJvdG9jb2wgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1g3NQkJMHgwODAxCS8qIFguNzUgSW50ZXJuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUwkJMHgwODAyCS8qIE5CUyBJbnRlcm5ldCAqLworI2RlZmluZQlFVEhFUlRZUEVfRUNNQQkJMHgwODAzCS8qIEVDTUEgSW50ZXJuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0NIQU9TIAkweDA4MDQJLyogQ0hBT1NuZXQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1gyNQkJMHgwODA1CS8qIFguMjUgTGV2ZWwgMyAqLworI2RlZmluZQlFVEhFUlRZUEVfQVJQCQkweDA4MDYJLyogQWRkcmVzcyByZXNvbHV0aW9uIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9OU0NPTVBBVAkweDA4MDcJLyogWE5TIENvbXBhdGliaWxpdHkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0ZSQVJQIAkweDA4MDgJLyogRnJhbWUgUmVsYXkgQVJQIChSRkMxNzAxKSAqLworCQkJICAgICAvKiAweDA4MUMJICAgU3ltYm9saWNzIFByaXZhdGUgKi8KKwkJICAgIC8qIDB4MDg4OCAtIDB4MDg4QQkgICBYeXBsZXggKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1VCREVCVUcJMHgwOTAwCS8qIFVuZ2VybWFubi1CYXNzIG5ldHdvcmsgZGVidWdnZXIgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lFRUVQVVAJMHgwQTAwCS8qIFhlcm94IElFRUU4MDIuMyBQVVAgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lFRUVQVVBBVAkweDBBMDEJLyogWGVyb3ggSUVFRTgwMi4zIFBVUCBBZGRyZXNzIFRyYW5zbGF0aW9uICovCisjZGVmaW5lCUVUSEVSVFlQRV9WSU5FUyAJMHgwQkFECS8qIEJhbnlhbiBWSU5FUyAqLworI2RlZmluZQlFVEhFUlRZUEVfVklORVNMT09QCTB4MEJBRQkvKiBCYW55YW4gVklORVMgTG9vcGJhY2sgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZJTkVTRUNITwkweDBCQUYJLyogQmFueWFuIFZJTkVTIEVjaG8gKi8KKworLyoJCSAgICAgICAweDEwMDAgLSAweDEwMEYJICAgQmVya2VsZXkgVHJhaWxlciAqLworLyoKKyAqIFRoZSBFVEhFUlRZUEVfTlRSQUlMRVIgcGFja2V0IHR5cGVzIHN0YXJ0aW5nIGF0IEVUSEVSVFlQRV9UUkFJTCBoYXZlCisgKiAodHlwZS1FVEhFUlRZUEVfVFJBSUwpKjUxMiBieXRlcyBvZiBkYXRhIGZvbGxvd2VkCisgKiBieSBhbiBFVEhFUiB0eXBlIChhcyBnaXZlbiBhYm92ZSkgYW5kIHRoZW4gdGhlICh2YXJpYWJsZS1sZW5ndGgpIGhlYWRlci4KKyAqLworI2RlZmluZQlFVEhFUlRZUEVfVFJBSUwJCTB4MTAwMAkvKiBUcmFpbGVyIHBhY2tldCAqLworI2RlZmluZQlFVEhFUlRZUEVfTlRSQUlMRVIJMTYKKworI2RlZmluZQlFVEhFUlRZUEVfRENBCQkweDEyMzQJLyogRENBIC0gTXVsdGljYXN0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQUxJRCAJMHgxNjAwCS8qIFZBTElEIHN5c3RlbSBwcm90b2NvbCAqLworI2RlZmluZQlFVEhFUlRZUEVfRE9HRklHSFQJMHgxOTg5CS8qIEFydGlmaWNpYWwgSG9yaXpvbnMgKCJBdmlhdG9yIiBkb2dmaWdodCBzaW11bGF0b3IgW29uIFN1bl0pICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQ0wJCTB4MTk5NQkvKiBEYXRhcG9pbnQgQ29ycG9yYXRpb24gKFJDTCBsYW4gcHJvdG9jb2wpICovCisKKwkJCQkJLyogVGhlIGZvbGxvd2luZyAzQzB4IHR5cGVzCisJCQkJCSAgIGFyZSB1bnJlZ2lzdGVyZWQ6ICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBWQ0QJMHgzQzAwCS8qIDNDb20gTkJQIHZpcnR1YWwgY2lyY3VpdCBkYXRhZ3JhbSAobGlrZSBYTlMgU1BQKSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQU0NECTB4M0MwMQkvKiAzQ29tIE5CUCBTeXN0ZW0gY29udHJvbCBkYXRhZ3JhbSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ1JFUQkweDNDMDIJLyogM0NvbSBOQlAgQ29ubmVjdCByZXF1ZXN0ICh2aXJ0dWFsIGNjdCkgbm90IHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUENSU1AJMHgzQzAzCS8qIDNDb20gTkJQIENvbm5lY3QgcmVwc29uc2Ugbm90IHJlZ2lzdGVyZWQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05CUENDCQkweDNDMDQJLyogM0NvbSBOQlAgQ29ubmVjdCBjb21wbGV0ZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xSRVEJMHgzQzA1CS8qIDNDb20gTkJQIENsb3NlIHJlcXVlc3QgKHZpcnR1YWwgY2N0KSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xSU1AJMHgzQzA2CS8qIDNDb20gTkJQIENsb3NlIHJlc3BvbnNlIG5vdCByZWdpc3RlcmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBERwkJMHgzQzA3CS8qIDNDb20gTkJQIERhdGFncmFtIChsaWtlIFhOUyBJRFApIG5vdCByZWdpc3RlcmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQlBER0IJMHgzQzA4CS8qIDNDb20gTkJQIERhdGFncmFtIGJyb2FkY2FzdCBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQQ0xBSU0JMHgzQzA5CS8qIDNDb20gTkJQIENsYWltIE5ldEJJT1MgbmFtZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQRExURQkweDNDMEEJLyogM0NvbSBOQlAgRGVsZXRlIE5ldGJpb3MgbmFtZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUkFTCTB4M0MwQgkvKiAzQ29tIE5CUCBSZW1vdGUgYWRhcHRvciBzdGF0dXMgcmVxdWVzdCBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUkFSCTB4M0MwQwkvKiAzQ29tIE5CUCBSZW1vdGUgYWRhcHRvciByZXNwb25zZSBub3QgcmVnaXN0ZXJlZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTkJQUlNUCTB4M0MwRAkvKiAzQ29tIE5CUCBSZXNldCBub3QgcmVnaXN0ZXJlZCAqLworCisjZGVmaW5lCUVUSEVSVFlQRV9QQ1MJCTB4NDI0MgkvKiBQQ1MgQmFzaWMgQmxvY2sgUHJvdG9jb2wgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lNTEJMRElBRwkweDQyNEMJLyogSW5mb3JtYXRpb24gTW9kZXMgTGl0dGxlIEJpZyBMQU4gZGlhZ25vc3RpYyAqLworI2RlZmluZQlFVEhFUlRZUEVfRElERExFCTB4NDMyMQkvKiBUSEQgLSBEaWRkbGUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lNTEJMCQkweDRDNDIJLyogSW5mb3JtYXRpb24gTW9kZXMgTGl0dGxlIEJpZyBMQU4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NJTU5FVAkweDUyMDgJLyogQkJOIFNpbW5ldCBQcml2YXRlICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNFWFBFUgkweDYwMDAJLyogREVDIFVuYXNzaWduZWQsIGV4cGVyaW1lbnRhbCAqLworI2RlZmluZQlFVEhFUlRZUEVfTU9QREwJCTB4NjAwMQkvKiBERUMgTU9QIGR1bXAvbG9hZCAqLworI2RlZmluZQlFVEhFUlRZUEVfTU9QUkMJCTB4NjAwMgkvKiBERUMgTU9QIHJlbW90ZSBjb25zb2xlICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNuZXQJMHg2MDAzCS8qIERFQyBERUNORVQgUGhhc2UgSVYgcm91dGUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0ROCQlFVEhFUlRZUEVfREVDbmV0CS8qIGxpYnBjYXAsIHRjcGR1bXAgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xBVAkJMHg2MDA0CS8qIERFQyBMQVQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0RJQUcJMHg2MDA1CS8qIERFQyBkaWFnbm9zdGljIHByb3RvY29sIChhdCBpbnRlcmZhY2UgaW5pdGlhbGl6YXRpb24/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDQ1VTVAkweDYwMDYJLyogREVDIGN1c3RvbWVyIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9TQ0EJCTB4NjAwNwkvKiBERUMgTEFWQywgU0NBICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTUJFUgkJMHg2MDA4CS8qIERFQyBBTUJFUiAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTVVNUFMJMHg2MDA5CS8qIERFQyBNVU1QUyAqLworCQkgICAgLyogMHg2MDEwIC0gMHg2MDE0CSAgIDNDb20gQ29ycG9yYXRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1RSQU5TRVRIRVIJMHg2NTU4CS8qIFRyYW5zIEV0aGVyIEJyaWRnaW5nIChSRkMxNzAxKSovCisjZGVmaW5lCUVUSEVSVFlQRV9SQVdGUgkJMHg2NTU5CS8qIFJhdyBGcmFtZSBSZWxheSAoUkZDMTcwMSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1VCREwJCTB4NzAwMAkvKiBVbmdlcm1hbm4tQmFzcyBkb3dubG9hZCAqLworI2RlZmluZQlFVEhFUlRZUEVfVUJOSVUJCTB4NzAwMQkvKiBVbmdlcm1hbm4tQmFzcyBOSVVzICovCisjZGVmaW5lCUVUSEVSVFlQRV9VQkRJQUdMT09QCTB4NzAwMgkvKiBVbmdlcm1hbm4tQmFzcyBkaWFnbm9zdGljL2xvb3BiYWNrICovCisjZGVmaW5lCUVUSEVSVFlQRV9VQk5NQwkJMHg3MDAzCS8qIFVuZ2VybWFubi1CYXNzID8/PyAoTk1DIHRvL2Zyb20gVUIgQnJpZGdlKSAqLworI2RlZmluZQlFVEhFUlRZUEVfVUJCU1QJCTB4NzAwNQkvKiBVbmdlcm1hbm4tQmFzcyBCcmlkZ2UgU3Bhbm5pbmcgVHJlZSAqLworI2RlZmluZQlFVEhFUlRZUEVfT1M5CQkweDcwMDcJLyogT1MvOSBNaWNyb3dhcmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX09TOU5FVAkweDcwMDkJLyogT1MvOSBOZXQ/ICovCisJCSAgICAvKiAweDcwMjAgLSAweDcwMjkJICAgTFJUIChFbmdsYW5kKSAobm93IFNpbnRyb20pICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQUNBTAkJMHg3MDMwCS8qIFJhY2FsLUludGVybGFuICovCisjZGVmaW5lCUVUSEVSVFlQRV9QUklNRU5UUwkweDcwMzEJLyogUHJpbWUgTlRTIChOZXR3b3JrIFRlcm1pbmFsIFNlcnZpY2UpICovCisjZGVmaW5lCUVUSEVSVFlQRV9DQUJMRVRST04JMHg3MDM0CS8qIENhYmxldHJvbiAqLworI2RlZmluZQlFVEhFUlRZUEVfQ1JPTlVTVkxOCTB4ODAwMwkvKiBDcm9udXMgVkxOICovCisjZGVmaW5lCUVUSEVSVFlQRV9DUk9OVVMJMHg4MDA0CS8qIENyb251cyBEaXJlY3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hQCQkweDgwMDUJLyogSFAgUHJvYmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05FU1RBUgkweDgwMDYJLyogTmVzdGFyICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVFRTVEFORk9SRAkweDgwMDgJLyogQVQmVC9TdGFuZm9yZCAobG9jYWwgdXNlKSAqLworI2RlZmluZQlFVEhFUlRZUEVfRVhDRUxBTgkweDgwMTAJLyogRXhjZWxhbiAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfRElBRwkweDgwMTMJLyogU0dJIGRpYWdub3N0aWMgdHlwZSAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfTkVUR0FNRVMJMHg4MDE0CS8qIFNHSSBuZXR3b3JrIGdhbWVzICovCisjZGVmaW5lCUVUSEVSVFlQRV9TR19SRVNWCTB4ODAxNQkvKiBTR0kgcmVzZXJ2ZWQgdHlwZSAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dfQk9VTkNFCTB4ODAxNgkvKiBTR0kgYm91bmNlIHNlcnZlciAqLworI2RlZmluZQlFVEhFUlRZUEVfQVBPTExPRE9NQUlOCTB4ODAxOQkvKiBBcG9sbG8gRE9NQUlOICovCisjZGVmaW5lCUVUSEVSVFlQRV9UWU1TSEFSRQkweDgwMkUJLyogVHltZXNoYXJlICovCisjZGVmaW5lCUVUSEVSVFlQRV9USUdBTgkJMHg4MDJGCS8qIFRpZ2FuLCBJbmMuICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRVZBUlAJMHg4MDM1CS8qIFJldmVyc2UgYWRkciByZXNvbHV0aW9uIHByb3RvY29sICovCisjZGVmaW5lCUVUSEVSVFlQRV9BRU9OSUMJMHg4MDM2CS8qIEFlb25pYyBTeXN0ZW1zICovCisjZGVmaW5lCUVUSEVSVFlQRV9JUFhORVcJMHg4MDM3CS8qIElQWCAoTm92ZWxsIE5ldHdhcmU/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfTEFOQlJJREdFCTB4ODAzOAkvKiBERUMgTEFOQnJpZGdlICovCisjZGVmaW5lCUVUSEVSVFlQRV9EU01ECTB4ODAzOQkvKiBERUMgRFNNL0REUCAqLworI2RlZmluZQlFVEhFUlRZUEVfQVJHT05BVVQJMHg4MDNBCS8qIERFQyBBcmdvbmF1dCBDb25zb2xlICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQVhFTE4JMHg4MDNCCS8qIERFQyBWQVhFTE4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0ROUwkweDgwM0MJLyogREVDIEROUyBOYW1pbmcgU2VydmljZSAqLworI2RlZmluZQlFVEhFUlRZUEVfRU5DUllQVAkweDgwM0QJLyogREVDIEV0aGVybmV0IEVuY3J5cHRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0RUUwkweDgwM0UJLyogREVDIERpc3RyaWJ1dGVkIFRpbWUgU2VydmljZSAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTFRNCTB4ODAzRgkvKiBERUMgTEFOIFRyYWZmaWMgTW9uaXRvciAqLworI2RlZmluZQlFVEhFUlRZUEVfREVDTkVUQklPUwkweDgwNDAJLyogREVDIFBBVEhXT1JLUyBERUNuZXQgTkVUQklPUyBFbXVsYXRpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQ0xBU1QJMHg4MDQxCS8qIERFQyBMb2NhbCBBcmVhIFN5c3RlbSBUcmFuc3BvcnQgKi8KKwkJCSAgICAgLyogMHg4MDQyCSAgIERFQyBVbmFzc2lnbmVkICovCisjZGVmaW5lCUVUSEVSVFlQRV9QTEFOTklORwkweDgwNDQJLyogUGxhbm5pbmcgUmVzZWFyY2ggQ29ycC4gKi8KKwkJICAgIC8qIDB4ODA0NiAtIDB4ODA0NwkgICBBVCZUICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUNBTQkJMHg4MDQ4CS8qIERFQyBBdmFpbGFiaWxpdHkgTWFuYWdlciBmb3IgRGlzdHJpYnV0ZWQgU3lzdGVtcyBERUNhbWRzIChidXQgc29tZW9uZSBhdCBERUMgc2F5cyBub3QpICovCisjZGVmaW5lCUVUSEVSVFlQRV9FWFBFUkRBVEEJMHg4MDQ5CS8qIEV4cGVyRGF0YSAqLworI2RlZmluZQlFVEhFUlRZUEVfVkVYUAkJMHg4MDVCCS8qIFN0YW5mb3JkIFYgS2VybmVsIGV4cC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZQUk9ECQkweDgwNUMJLyogU3RhbmZvcmQgViBLZXJuZWwgcHJvZC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0VTCQkweDgwNUQJLyogRXZhbnMgJiBTdXRoZXJsYW5kICovCisjZGVmaW5lCUVUSEVSVFlQRV9MSVRUTEUJMHg4MDYwCS8qIExpdHRsZSBNYWNoaW5lcyAqLworI2RlZmluZQlFVEhFUlRZUEVfQ09VTlRFUlBPSU5UCTB4ODA2MgkvKiBDb3VudGVycG9pbnQgQ29tcHV0ZXJzICovCisJCSAgICAvKiAweDgwNjUgLSAweDgwNjYJICAgVW5pdi4gb2YgTWFzcyBAIEFtaGVyc3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZFRUNPCQkweDgwNjcJLyogVmVlY28gSW50ZWdyYXRlZCBBdXRvLiAqLworI2RlZmluZQlFVEhFUlRZUEVfR0VORFlOCTB4ODA2OAkvKiBHZW5lcmFsIER5bmFtaWNzICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVFQJCTB4ODA2OQkvKiBBVCZUICovCisjZGVmaW5lCUVUSEVSVFlQRV9BVVRPUEhPTgkweDgwNkEJLyogQXV0b3Bob24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0NPTURFU0lHTgkweDgwNkMJLyogQ29tRGVzaWduICovCisjZGVmaW5lCUVUSEVSVFlQRV9DT01QVUdSQVBISUMJMHg4MDZECS8qIENvbXB1Z3JhcGhpYyBDb3Jwb3JhdGlvbiAqLworCQkgICAgLyogMHg4MDZFIC0gMHg4MDc3CSAgIExhbmRtYXJrIEdyYXBoaWNzIENvcnAuICovCisjZGVmaW5lCUVUSEVSVFlQRV9NQVRSQQkJMHg4MDdBCS8qIE1hdHJhICovCisjZGVmaW5lCUVUSEVSVFlQRV9EREUJCTB4ODA3QgkvKiBEYW5zayBEYXRhIEVsZWt0cm9uaWsgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01FUklUCQkweDgwN0MJLyogTWVyaXQgSW50ZXJub2RhbCAob3IgVW5pdiBvZiBNaWNoaWdhbj8pICovCisJCSAgICAvKiAweDgwN0QgLSAweDgwN0YJICAgVml0YWxpbmsgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZMVExNQU4JMHg4MDgwCS8qIFZpdGFsaW5rIFRyYW5zTEFOIElJSSBNYW5hZ2VtZW50ICovCisJCSAgICAvKiAweDgwODEgLSAweDgwODMJICAgQ291bnRlcnBvaW50IENvbXB1dGVycyAqLworCQkgICAgLyogMHg4MDg4IC0gMHg4MDhBCSAgIFh5cGxleCAqLworI2RlZmluZQlFVEhFUlRZUEVfQVRBTEsJCTB4ODA5QgkvKiBBcHBsZVRhbGsgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FUCQlFVEhFUlRZUEVfQVRBTEsJCS8qIG9sZCBOZXRCU0QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FQUExFVEFMSwlFVEhFUlRZUEVfQVRBTEsJCS8qIEhQLVVYICovCisJCSAgICAvKiAweDgwOUMgLSAweDgwOUUJICAgRGF0YWJpbGl0eSAqLworI2RlZmluZQlFVEhFUlRZUEVfU1BJREVSCTB4ODA5RgkvKiBTcGlkZXIgU3lzdGVtcyBMdGQuICovCisJCQkgICAgIC8qIDB4ODBBMwkgICBOaXhkb3JmICovCisJCSAgICAvKiAweDgwQTQgLSAweDgwQjMJICAgU2llbWVucyBHYW1tYXNvbmljcyBJbmMuICovCisJCSAgICAvKiAweDgwQzAgLSAweDgwQzMJICAgRENBIChEaWdpdGFsIENvbW0uIEFzc29jLikgRGF0YSBFeGNoYW5nZSBDbHVzdGVyICovCisJCSAgICAvKiAweDgwQzQgLSAweDgwQzUJICAgQmFueWFuIFN5c3RlbXMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BBQ0VSCQkweDgwQzYJLyogUGFjZXIgU29mdHdhcmUgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FQUExJVEVLCTB4ODBDNwkvKiBBcHBsaXRlayBDb3Jwb3JhdGlvbiAqLworCQkgICAgLyogMHg4MEM4IC0gMHg4MENDCSAgIEludGVyZ3JhcGggQ29ycG9yYXRpb24gKi8KKwkJICAgIC8qIDB4ODBDRCAtIDB4ODBDRQkgICBIYXJyaXMgQ29ycG9yYXRpb24gKi8KKwkJICAgIC8qIDB4ODBDRiAtIDB4ODBEMgkgICBUYXlsb3IgSW5zdHJ1bWVudCAqLworCQkgICAgLyogMHg4MEQzIC0gMHg4MEQ0CSAgIFJvc2Vtb3VudCBDb3Jwb3JhdGlvbiAqLworI2RlZmluZQlFVEhFUlRZUEVfU05BCQkweDgwRDUJLyogSUJNIFNOQSBTZXJ2aWNlcyBvdmVyIEV0aGVybmV0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9WQVJJQU4JMHg4MERECS8qIFZhcmlhbiBBc3NvY2lhdGVzICovCisJCSAgICAvKiAweDgwREUgLSAweDgwREYJICAgVFJGUyAoSW50ZWdyYXRlZCBTb2x1dGlvbnMgVHJhbnNwYXJlbnQgUmVtb3RlIEZpbGUgU3lzdGVtKSAqLworCQkgICAgLyogMHg4MEUwIC0gMHg4MEUzCSAgIEFsbGVuLUJyYWRsZXkgKi8KKwkJICAgIC8qIDB4ODBFNCAtIDB4ODBGMAkgICBEYXRhYmlsaXR5ICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRVRJWAkJMHg4MEYyCS8qIFJldGl4ICovCisjZGVmaW5lCUVUSEVSVFlQRV9BQVJQCQkweDgwRjMJLyogQXBwbGVUYWxrIEFBUlAgKi8KKwkJICAgIC8qIDB4ODBGNCAtIDB4ODBGNQkgICBLaW5ldGljcyAqLworI2RlZmluZQlFVEhFUlRZUEVfQVBPTExPCTB4ODBGNwkvKiBBcG9sbG8gQ29tcHV0ZXIgKi8KKyNkZWZpbmUgRVRIRVJUWVBFX1ZMQU4JCTB4ODEwMAkvKiBJRUVFIDgwMi4xUSBWTEFOIHRhZ2dpbmcgKFhYWCBjb25mbGljdHMpICovCisJCSAgICAvKiAweDgwRkYgLSAweDgxMDEJICAgV2VsbGZsZWV0IENvbW11bmljYXRpb25zIChYWFggY29uZmxpY3RzKSAqLworI2RlZmluZQlFVEhFUlRZUEVfQk9GTAkJMHg4MTAyCS8qIFdlbGxmbGVldDsgQk9GTCAoQnJlYXRoIE9GIExpZmUpIHBrdHMgW2V2ZXJ5IDUtMTAgc2Vjcy5dICovCisjZGVmaW5lCUVUSEVSVFlQRV9XRUxMRkxFRVQJMHg4MTAzCS8qIFdlbGxmbGVldCBDb21tdW5pY2F0aW9ucyAqLworCQkgICAgLyogMHg4MTA3IC0gMHg4MTA5CSAgIFN5bWJvbGljcyBQcml2YXRlICovCisjZGVmaW5lCUVUSEVSVFlQRV9UQUxBUklTCTB4ODEyQgkvKiBUYWxhcmlzICovCisjZGVmaW5lCUVUSEVSVFlQRV9XQVRFUkxPTwkweDgxMzAJLyogV2F0ZXJsb28gTWljcm9zeXN0ZW1zIEluYy4gKFhYWCB3aGljaD8pICovCisjZGVmaW5lCUVUSEVSVFlQRV9IQVlFUwkJMHg4MTMwCS8qIEhheWVzIE1pY3JvY29tcHV0ZXJzIChYWFggd2hpY2g/KSAqLworI2RlZmluZQlFVEhFUlRZUEVfVkdMQUIJCTB4ODEzMQkvKiBWRyBMYWJvcmF0b3J5IFN5c3RlbXMgKi8KKwkJICAgIC8qIDB4ODEzMiAtIDB4ODEzNwkgICBCcmlkZ2UgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0lQWAkJMHg4MTM3CS8qIE5vdmVsbCAob2xkKSBOZXRXYXJlIElQWCAoRUNPTkZJRyBFIG9wdGlvbikgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05PVkVMTAkweDgxMzgJLyogTm92ZWxsLCBJbmMuICovCisJCSAgICAvKiAweDgxMzkgLSAweDgxM0QJICAgS1RJICovCisjZGVmaW5lCUVUSEVSVFlQRV9NVU1QUwkJMHg4MTNGCS8qIE0vTVVNUFMgZGF0YSBzaGFyaW5nICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTU9FQkEJMHg4MTQ1CS8qIFZyaWplIFVuaXZlcnNpdGVpdCAoTkwpIEFtb2ViYSA0IFJQQyAob2Jzb2xldGUpICovCisjZGVmaW5lCUVUSEVSVFlQRV9GTElQCQkweDgxNDYJLyogVnJpamUgVW5pdmVyc2l0ZWl0IChOTCkgRkxJUCAoRmFzdCBMb2NhbCBJbnRlcm5ldCBQcm90b2NvbCkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1ZVUkVTRVJWRUQJMHg4MTQ3CS8qIFZyaWplIFVuaXZlcnNpdGVpdCAoTkwpIFtyZXNlcnZlZF0gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xPR0lDUkFGVAkweDgxNDgJLyogTG9naWNyYWZ0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9OQ0QJCTB4ODE0OQkvKiBOZXR3b3JrIENvbXB1dGluZyBEZXZpY2VzICovCisjZGVmaW5lCUVUSEVSVFlQRV9BTFBIQQkJMHg4MTRBCS8qIEFscGhhIE1pY3JvICovCisjZGVmaW5lCUVUSEVSVFlQRV9TTk1QCQkweDgxNEMJLyogU05NUCBvdmVyIEV0aGVybmV0IChzZWUgUkZDMTA4OSkgKi8KKwkJICAgIC8qIDB4ODE0RCAtIDB4ODE0RQkgICBCSUlOICovCisjZGVmaW5lCUVUSEVSVFlQRV9URUMJMHg4MTRGCS8qIFRlY2huaWNhbGx5IEVsaXRlIENvbmNlcHRzICovCisjZGVmaW5lCUVUSEVSVFlQRV9SQVRJT05BTAkweDgxNTAJLyogUmF0aW9uYWwgQ29ycCAqLworCQkgICAgLyogMHg4MTUxIC0gMHg4MTUzCSAgIFF1YWxjb21tICovCisJCSAgICAvKiAweDgxNUMgLSAweDgxNUUJICAgQ29tcHV0ZXIgUHJvdG9jb2wgUHR5IEx0ZCAqLworCQkgICAgLyogMHg4MTY0IC0gMHg4MTY2CSAgIENoYXJsZXMgUml2ZXIgRGF0YSBTeXN0ZW1zICovCisjZGVmaW5lCUVUSEVSVFlQRV9YVFAJCTB4ODE3RAkvKiBQcm90b2NvbCBFbmdpbmVzIFhUUCAqLworI2RlZmluZQlFVEhFUlRZUEVfU0dJVFcJCTB4ODE3RQkvKiBTR0kvVGltZSBXYXJuZXIgcHJvcC4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hJUFBJX0ZQCTB4ODE4MAkvKiBISVBQSS1GUCBlbmNhcHN1bGF0aW9uICovCisjZGVmaW5lCUVUSEVSVFlQRV9TVFAJCTB4ODE4MQkvKiBTY2hlZHVsZWQgVHJhbnNmZXIgU1RQLCBISVBQSS1TVCAqLworCQkgICAgLyogMHg4MTgyIC0gMHg4MTgzCSAgIFJlc2VydmVkIGZvciBISVBQSS02NDAwICovCisJCSAgICAvKiAweDgxODQgLSAweDgxOEMJICAgU0dJIHByb3AuICovCisjZGVmaW5lCUVUSEVSVFlQRV9NT1RPUk9MQQkweDgxOEQJLyogTW90b3JvbGEgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX05FVEJFVUkJMHg4MTkxCS8qIFBvd2VyTEFOIE5ldEJJT1MvTmV0QkVVSSAoUEMpICovCisJCSAgICAvKiAweDgxOUEgLSAweDgxQTMJICAgUkFEIE5ldHdvcmsgRGV2aWNlcyAqLworCQkgICAgLyogMHg4MUI3IC0gMHg4MUI5CSAgIFh5cGxleCAqLworCQkgICAgLyogMHg4MUNDIC0gMHg4MUQ1CSAgIEFwcmljb3QgQ29tcHV0ZXJzICovCisJCSAgICAvKiAweDgxRDYgLSAweDgxREQJICAgQXJ0aXNvZnQgTGFudGFzdGljICovCisJCSAgICAvKiAweDgxRTYgLSAweDgxRUYJICAgUG9seWdvbiAqLworCQkgICAgLyogMHg4MUYwIC0gMHg4MUYyCSAgIENvbXNhdCBMYWJzICovCisJCSAgICAvKiAweDgxRjMgLSAweDgxRjUJICAgU0FJQyAqLworCQkgICAgLyogMHg4MUY2IC0gMHg4MUY4CSAgIFZHIEFuYWx5dGljYWwgKi8KKwkJICAgIC8qIDB4ODIwMyAtIDB4ODIwNQkgICBRTlggU29mdHdhcmUgU3lzdGVtcyBMdGQuICovCisJCSAgICAvKiAweDgyMjEgLSAweDgyMjIJICAgQXNjb20gQmFua2luZyBTeXN0ZW1zICovCisJCSAgICAvKiAweDgyM0UgLSAweDgyNDAJICAgQWR2YW5jZWQgRW5jcnlwdGlvbiBTeXN0ZW1zICovCisJCSAgICAvKiAweDgyNjMgLSAweDgyNkEJICAgQ2hhcmxlcyBSaXZlciBEYXRhIFN5c3RlbXMgKi8KKwkJICAgIC8qIDB4ODI3RiAtIDB4ODI4MgkgICBBdGhlbmEgUHJvZ3JhbW1pbmcgKi8KKwkJICAgIC8qIDB4ODI5QSAtIDB4ODI5QgkgICBJbnN0IEluZCBJbmZvIFRlY2ggKi8KKwkJICAgIC8qIDB4ODI5QyAtIDB4ODJBQgkgICBUYXVydXMgQ29udHJvbHMgKi8KKwkJICAgIC8qIDB4ODJBQyAtIDB4ODY5MwkgICBXYWxrZXIgUmljaGVyICYgUXVpbm4gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FDQ1RPTgkweDgzOTAJLyogQWNjdG9uIFRlY2hub2xvZ2llcyAodW5yZWdpc3RlcmVkKSAqLworI2RlZmluZQlFVEhFUlRZUEVfVEFMQVJJU01DCTB4ODUyQgkvKiBUYWxhcmlzIG11bHRpY2FzdCAqLworI2RlZmluZQlFVEhFUlRZUEVfS0FMUEFOQQkweDg1ODIJLyogS2FscGFuYSAqLworCQkgICAgLyogMHg4Njk0IC0gMHg4NjlECSAgIElkZWEgQ291cmllciAqLworCQkgICAgLyogMHg4NjlFIC0gMHg4NkExCSAgIENvbXB1dGVyIE5ldHdvcmsgVGVjaCAqLworCQkgICAgLyogMHg4NkEzIC0gMHg4NkFDCSAgIEdhdGV3YXkgQ29tbXVuaWNhdGlvbnMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NFQ1RSQQkweDg2REIJLyogU0VDVFJBICovCisjZGVmaW5lCUVUSEVSVFlQRV9JUFY2CQkweDg2REQJLyogSVAgcHJvdG9jb2wgdmVyc2lvbiA2ICovCisjZGVmaW5lCUVUSEVSVFlQRV9ERUxUQUNPTgkweDg2REUJLyogRGVsdGEgQ29udHJvbHMgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0FUT01JQwkweDg2REYJLyogQVRPTUlDICovCisJCSAgICAvKiAweDg2RTAgLSAweDg2RUYJICAgTGFuZGlzICYgR3lyIFBvd2VycyAqLworCQkgICAgLyogMHg4NzAwIC0gMHg4NzEwCSAgIE1vdG9yb2xhICovCisjZGVmaW5lCUVUSEVSVFlQRV9SRFAJCTB4ODczOQkvKiBDb250cm9sIFRlY2hub2xvZ3kgSW5jLiBSRFAgV2l0aG91dCBJUCAqLworI2RlZmluZQlFVEhFUlRZUEVfTUlDUAkJMHg4NzNBCS8qIENvbnRyb2wgVGVjaG5vbG9neSBJbmMuIE1jYXN0IEluZHVzdHJpYWwgQ3RybCBQcm90by4gKi8KKwkJICAgIC8qIDB4ODczQiAtIDB4ODczQwkgICBDb250cm9sIFRlY2hub2xvZ3kgSW5jLiBQcm9wcmlldGFyeSAqLworI2RlZmluZQlFVEhFUlRZUEVfVENQQ09NUAkweDg3NkIJLyogVENQL0lQIENvbXByZXNzaW9uIChSRkMxNzAxKSAqLworI2RlZmluZQlFVEhFUlRZUEVfSVBBUwkJMHg4NzZDCS8qIElQIEF1dG9ub21vdXMgU3lzdGVtcyAoUkZDMTcwMSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1NFQ1VSRURBVEEJMHg4NzZECS8qIFNlY3VyZSBEYXRhIChSRkMxNzAxKSAqLworI2RlZmluZQlFVEhFUlRZUEVfRkxPV0NPTlRST0wJMHg4ODA4CS8qIDgwMi4zeCBmbG93IGNvbnRyb2wgcGFja2V0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9TTE9XUFJPVE9DT0xTCTB4ODgwOQkvKiBTbG93IHByb3RvY29scyAqLworI2RlZmluZQlFVEhFUlRZUEVfUFBQCQkweDg4MEIJLyogUFBQIChvYnNvbGV0ZSBieSBQUFBPRSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0hJVEFDSEkJMHg4ODIwCS8qIEhpdGFjaGkgQ2FibGUgKE9wdG9lbGVjdHJvbmljIFN5c3RlbXMgTGFib3JhdG9yeSkgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01QTFMJCTB4ODg0NwkvKiBNUExTIFVuaWNhc3QgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX01QTFNfTUNBU1QJMHg4ODQ4CS8qIE1QTFMgTXVsdGljYXN0ICovCisjZGVmaW5lCUVUSEVSVFlQRV9BWElTCQkweDg4NTYJLyogQXhpcyBDb21tdW5pY2F0aW9ucyBBQiBwcm9wcmlldGFyeSBib290c3RyYXAvY29uZmlnICovCisjZGVmaW5lCUVUSEVSVFlQRV9QUFBPRURJU0MJMHg4ODYzCS8qIFBQUCBPdmVyIEV0aGVybmV0IERpc2NvdmVyeSBTdGFnZSAqLworI2RlZmluZQlFVEhFUlRZUEVfUFBQT0UJCTB4ODg2NAkvKiBQUFAgT3ZlciBFdGhlcm5ldCBTZXNzaW9uIFN0YWdlICovCisjZGVmaW5lCUVUSEVSVFlQRV9MQU5QUk9CRQkweDg4ODgJLyogSFAgTGFuUHJvYmUgdGVzdD8gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1BBRQkJMHg4ODhlCS8qIEVBUE9MIFBBRS84MDIuMXggKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0xPT1BCQUNLCTB4OTAwMAkvKiBMb29wYmFjayAqLworI2RlZmluZQlFVEhFUlRZUEVfTEJBQ0sJCUVUSEVSVFlQRV9MT09QQkFDSwkvKiBERUMgTU9QIGxvb3BiYWNrICovCisjZGVmaW5lCUVUSEVSVFlQRV9YTlNTTQkJMHg5MDAxCS8qIDNDb20gKEZvcm1lcmx5IEJyaWRnZSBDb21tdW5pY2F0aW9ucyksIFhOUyBTeXN0ZW1zIE1hbmFnZW1lbnQgKi8KKyNkZWZpbmUJRVRIRVJUWVBFX1RDUFNNCQkweDkwMDIJLyogM0NvbSAoRm9ybWVybHkgQnJpZGdlIENvbW11bmljYXRpb25zKSwgVENQL0lQIFN5c3RlbXMgTWFuYWdlbWVudCAqLworI2RlZmluZQlFVEhFUlRZUEVfQkNMT09QCTB4OTAwMwkvKiAzQ29tIChGb3JtZXJseSBCcmlkZ2UgQ29tbXVuaWNhdGlvbnMpLCBsb29wYmFjayBkZXRlY3Rpb24gKi8KKyNkZWZpbmUJRVRIRVJUWVBFX0RFQk5JCQkweEFBQUEJLyogREVDTkVUPyBVc2VkIGJ5IFZBWCA2MjIwIERFQk5JICovCisjZGVmaW5lCUVUSEVSVFlQRV9TT05JWAkJMHhGQUY1CS8qIFNvbml4IEFycGVnZ2lvICovCisjZGVmaW5lCUVUSEVSVFlQRV9WSVRBTAkJMHhGRjAwCS8qIEJCTiBWSVRBTC1MYW5CcmlkZ2UgY2FjaGUgd2FrZXVwcyAqLworCQkgICAgLyogMHhGRjAwIC0gMHhGRk9GCSAgIElTQyBCdW5rZXIgUmFtbyAqLworCisjZGVmaW5lCUVUSEVSVFlQRV9NQVgJCTB4RkZGRgkvKiBNYXhpbXVtIHZhbGlkIGV0aGVybmV0IHR5cGUsIHJlc2VydmVkICovCisKKyNlbmRpZiAvKiAhX05FVF9FVEhFUlRZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L2lmLmggYi9saWJjL2luY2x1ZGUvbmV0L2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzYzYWM1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWYuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgSUZfTkFNRVNJWkUKKyNkZWZpbmUgSUZfTkFNRVNJWkUgSUZOQU1TSVoKKyNlbmRpZgorCitfX0JFR0lOX0RFQ0xTCisKKy8qCisgKiBNYXAgYW4gaW50ZXJmYWNlIG5hbWUgaW50byBpdHMgY29ycmVzcG9uZGluZyBpbmRleC4KKyAqLworZXh0ZXJuIHVuc2lnbmVkIGludCBpZl9uYW1ldG9pbmRleChjb25zdCBjaGFyICopOworCitfX0VORF9ERUNMUwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9hcnAuaCBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfYXJwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTI1ZjFiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfYXJwLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9kbC5oIGIvbGliYy9pbmNsdWRlL25ldC9pZl9kbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGMwODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX2RsLmgKQEAgLTAsMCArMSw4NyBAQAorLyoJJE5ldEJTRDogaWZfZGwuaCx2IDEuMTggMjAwNS8xMi8xMSAyMzowNToyNCB0aG9ycGVqIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZGwuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworLyoKKyAqIEEgTGluay1MZXZlbCBTb2NrYWRkciBtYXkgc3BlY2lmeSB0aGUgaW50ZXJmYWNlIGluIG9uZSBvZiB0d28KKyAqIHdheXM6IGVpdGhlciBieSBtZWFucyBvZiBhIHN5c3RlbS1wcm92aWRlZCBpbmRleCBudW1iZXIgKGNvbXB1dGVkCisgKiBhbmV3IGFuZCBwb3NzaWJseSBkaWZmZXJlbnRseSBvbiBldmVyeSByZWJvb3QpLCBvciBieSBhIGh1bWFuLXJlYWRhYmxlCisgKiBzdHJpbmcgc3VjaCBhcyAiaWwwIiAoZm9yIG1hbmFnZXJpYWwgY29udmVuaWVuY2UpLgorICoKKyAqIENlbnN1cyB0YWtpbmcgYWN0aW9ucywgc3VjaCBhcyBzb21ldGhpbmcgYWtpbiB0byBTSU9DR0NPTkYgd291bGQgcmV0dXJuCisgKiBib3RoIHRoZSBpbmRleCBhbmQgdGhlIGh1bWFuIG5hbWUuCisgKgorICogSGlnaCB2b2x1bWUgdHJhbnNhY3Rpb25zIChzdWNoIGFzIGdpdmluZyBhIGxpbmstbGV2ZWwgYGBmcm9tJycgYWRkcmVzcworICogaW4gYSByZWN2ZnJvbSBvciByZWN2bXNnIGNhbGwpIG1heSBiZSBsaWtlbHkgb25seSB0byBwcm92aWRlIHRoZSBpbmRleGVkCisgKiBmb3JtLCAod2hpY2ggcmVxdWlyZXMgZmV3ZXIgY29weSBvcGVyYXRpb25zIGFuZCBsZXNzIHNwYWNlKS4KKyAqCisgKiBUaGUgZm9ybSBhbmQgaW50ZXJwcmV0YXRpb24gIG9mIHRoZSBsaW5rLWxldmVsIGFkZHJlc3MgaXMgcHVyZWx5IGEgbWF0dGVyCisgKiBvZiBjb252ZW50aW9uIGJldHdlZW4gdGhlIGRldmljZSBkcml2ZXIgYW5kIGl0cyBjb25zdW1lcnM7IGhvd2V2ZXIsIGl0IGlzCisgKiBleHBlY3RlZCB0aGF0IGFsbCBkcml2ZXJzIGZvciBhbiBpbnRlcmZhY2Ugb2YgYSBnaXZlbiBpZl90eXBlIHdpbGwgYWdyZWUuCisgKi8KKworI2lmbmRlZiBfTkVUX0lGX0RMX0hfCisjZGVmaW5lIF9ORVRfSUZfRExfSF8KKworI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworLyoKKyAqIFN0cnVjdHVyZSBvZiBhIExpbmstTGV2ZWwgc29ja2FkZHI6CisgKi8KK3N0cnVjdCBzb2NrYWRkcl9kbCB7CisJdV9jaGFyCSAgICBzZGxfbGVuOwkvKiBUb3RhbCBsZW5ndGggb2Ygc29ja2FkZHIgKi8KKwlzYV9mYW1pbHlfdCBzZGxfZmFtaWx5OwkvKiBBRl9MSU5LICovCisJdV9pbnQxNl90ICAgc2RsX2luZGV4OwkvKiBpZiAhPSAwLCBzeXN0ZW0gZ2l2ZW4gaW5kZXggZm9yIGludGVyZmFjZSAqLworCXVfY2hhcgkgICAgc2RsX3R5cGU7CS8qIGludGVyZmFjZSB0eXBlICovCisJdV9jaGFyCSAgICBzZGxfbmxlbjsJLyogaW50ZXJmYWNlIG5hbWUgbGVuZ3RoLCBubyB0cmFpbGluZyAwIHJlcWQuICovCisJdV9jaGFyCSAgICBzZGxfYWxlbjsJLyogbGluayBsZXZlbCBhZGRyZXNzIGxlbmd0aCAqLworCXVfY2hhcgkgICAgc2RsX3NsZW47CS8qIGxpbmsgbGF5ZXIgc2VsZWN0b3IgbGVuZ3RoICovCisJY2hhcgkgICAgc2RsX2RhdGFbMTJdOyAvKiBtaW5pbXVtIHdvcmsgYXJlYSwgY2FuIGJlIGxhcmdlcjsKKwkJCQkgICAgIGNvbnRhaW5zIGJvdGggaWYgbmFtZSBhbmQgbGwgYWRkcmVzcyAqLworfTsKKworLyogV2UgZG8gYXJpdGhtZXRpYyBkaXJlY3RseSB3aXRoIHRoZXNlLCBzbyBrZWVwIHRoZW0gY2hhciBpbnN0ZWFkIG9mIHZvaWQgKi8KKyNkZWZpbmUgTExBRERSKHMpICgoY2hhciAqKSgocyktPnNkbF9kYXRhICsgKHMpLT5zZGxfbmxlbikpCisjZGVmaW5lIENMTEFERFIocykgKChjb25zdCBjaGFyICopKChzKS0+c2RsX2RhdGEgKyAocyktPnNkbF9ubGVuKSkKKworI2lmbmRlZiBfS0VSTkVMCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUwordm9pZAlsaW5rX2FkZHIoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc29ja2FkZHJfZGwgKik7CitjaGFyCSpsaW5rX250b2EoY29uc3Qgc3RydWN0IHNvY2thZGRyX2RsICopOworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfS0VSTkVMICovCisKKyNlbmRpZiAvKiAhX05FVF9JRl9ETF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldC9pZl9ldGhlci5oIGIvbGliYy9pbmNsdWRlL25ldC9pZl9ldGhlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyMWY5YWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX2V0aGVyLmgKQEAgLTAsMCArMSwyMTcgQEAKKy8qCSROZXRCU0Q6IGlmX2V0aGVyLmgsdiAxLjQzIDIwMDYvMTEvMjQgMDE6MDQ6MzAgcnBhdWxvIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaWZfZXRoZXIuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUX0lGX0VUSEVSX0hfCisjZGVmaW5lIF9ORVRfSUZfRVRIRVJfSF8KKworI2lmZGVmIF9LRVJORUwKKyNpZmRlZiBfS0VSTkVMX09QVAorI2luY2x1ZGUgIm9wdF9tYnVmdHJhY2UuaCIKKyNlbmRpZgorI2luY2x1ZGUgPHN5cy9tYnVmLmg+CisjZW5kaWYKKworLyoKKyAqIFNvbWUgYmFzaWMgRXRoZXJuZXQgY29uc3RhbnRzLgorICovCisjZGVmaW5lCUVUSEVSX0FERFJfTEVOCTYJLyogbGVuZ3RoIG9mIGFuIEV0aGVybmV0IGFkZHJlc3MgKi8KKyNkZWZpbmUJRVRIRVJfVFlQRV9MRU4JMgkvKiBsZW5ndGggb2YgdGhlIEV0aGVybmV0IHR5cGUgZmllbGQgKi8KKyNkZWZpbmUJRVRIRVJfQ1JDX0xFTgk0CS8qIGxlbmd0aCBvZiB0aGUgRXRoZXJuZXQgQ1JDICovCisjZGVmaW5lCUVUSEVSX0hEUl9MRU4JKChFVEhFUl9BRERSX0xFTiAqIDIpICsgRVRIRVJfVFlQRV9MRU4pCisjZGVmaW5lCUVUSEVSX01JTl9MRU4JNjQJLyogbWluaW11bSBmcmFtZSBsZW5ndGgsIGluY2x1ZGluZyBDUkMgKi8KKyNkZWZpbmUJRVRIRVJfTUFYX0xFTgkxNTE4CS8qIG1heGltdW0gZnJhbWUgbGVuZ3RoLCBpbmNsdWRpbmcgQ1JDICovCisjZGVmaW5lCUVUSEVSX01BWF9MRU5fSlVNQk8gOTAxOCAvKiBtYXhpbXVtIGp1bWJvIGZyYW1lIGxlbiwgaW5jbHVkaW5nIENSQyAqLworCisvKgorICogU29tZSBFdGhlcm5ldCBleHRlbnNpb25zLgorICovCisjZGVmaW5lCUVUSEVSX1ZMQU5fRU5DQVBfTEVOIDQJLyogbGVuZ3RoIG9mIDgwMi4xUSBWTEFOIGVuY2Fwc3VsYXRpb24gKi8KKworLyoKKyAqIEV0aGVybmV0IGFkZHJlc3MgLSA2IG9jdGV0cworICogdGhpcyBpcyBvbmx5IHVzZWQgYnkgdGhlIGV0aGVycygzKSBmdW5jdGlvbnMuCisgKi8KK3N0cnVjdCBldGhlcl9hZGRyIHsKKwl1X2ludDhfdCBldGhlcl9hZGRyX29jdGV0W0VUSEVSX0FERFJfTEVOXTsKK30gX19hdHRyaWJ1dGVfXygoX19wYWNrZWRfXykpOworCisvKgorICogU3RydWN0dXJlIG9mIGEgMTBNYi9zIEV0aGVybmV0IGhlYWRlci4KKyAqLworc3RydWN0CWV0aGVyX2hlYWRlciB7CisJdV9pbnQ4X3QgIGV0aGVyX2Rob3N0W0VUSEVSX0FERFJfTEVOXTsKKwl1X2ludDhfdCAgZXRoZXJfc2hvc3RbRVRIRVJfQUREUl9MRU5dOworCXVfaW50MTZfdCBldGhlcl90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChfX3BhY2tlZF9fKSk7CisKKyNpbmNsdWRlIDxuZXQvZXRoZXJ0eXBlcy5oPgorCisjZGVmaW5lCUVUSEVSX0lTX01VTFRJQ0FTVChhZGRyKSAoKihhZGRyKSAmIDB4MDEpIC8qIGlzIGFkZHJlc3MgbWNhc3QvYmNhc3Q/ICovCisKKyNkZWZpbmUJRVRIRVJNVFVfSlVNQk8JKEVUSEVSX01BWF9MRU5fSlVNQk8gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKyNkZWZpbmUJRVRIRVJNVFUJKEVUSEVSX01BWF9MRU4gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKyNkZWZpbmUJRVRIRVJNSU4JKEVUSEVSX01JTl9MRU4gLSBFVEhFUl9IRFJfTEVOIC0gRVRIRVJfQ1JDX0xFTikKKworLyoKKyAqIENvbXB1dGUgdGhlIG1heGltdW0gZnJhbWUgc2l6ZSBiYXNlZCBvbiBldGhlcnR5cGUgKGkuZS4gcG9zc2libGUKKyAqIGVuY2Fwc3VsYXRpb24pIGFuZCB3aGV0aGVyIG9yIG5vdCBhbiBGQ1MgaXMgcHJlc2VudC4KKyAqLworI2RlZmluZQlFVEhFUl9NQVhfRlJBTUUoaWZwLCBldHlwZSwgaGFzZmNzKQkJCQlcCisJKChpZnApLT5pZl9tdHUgKyBFVEhFUl9IRFJfTEVOICsJCQkJXAorCSAoKGhhc2ZjcykgPyBFVEhFUl9DUkNfTEVOIDogMCkgKwkJCQlcCisJICgoKGV0eXBlKSA9PSBFVEhFUlRZUEVfVkxBTikgPyBFVEhFUl9WTEFOX0VOQ0FQX0xFTiA6IDApKQorCisvKgorICogRXRoZXJuZXQgQ1JDMzIgcG9seW5vbWlhbHMgKGJpZy0gYW5kIGxpdHRsZS1lbmRpYW4gdmVyaW9ucykuCisgKi8KKyNkZWZpbmUJRVRIRVJfQ1JDX1BPTFlfTEUJMHhlZGI4ODMyMAorI2RlZmluZQlFVEhFUl9DUkNfUE9MWV9CRQkweDA0YzExZGI2CisKKyNpZm5kZWYgX1NUQU5EQUxPTkUKKworLyoKKyAqIEV0aGVybmV0LXNwZWNpZmljIG1idWYgZmxhZ3MuCisgKi8KKyNkZWZpbmUJTV9IQVNGQ1MJTV9MSU5LMAkvKiBGQ1MgaW5jbHVkZWQgYXQgZW5kIG9mIGZyYW1lICovCisjZGVmaW5lCU1fUFJPTUlTQwlNX0xJTksxCS8qIHRoaXMgcGFja2V0IGlzIG5vdCBmb3IgdXMgKi8KKworI2lmZGVmIF9LRVJORUwKKy8qCisgKiBNYWNybyB0byBtYXAgYW4gSVAgbXVsdGljYXN0IGFkZHJlc3MgdG8gYW4gRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3MuCisgKiBUaGUgaGlnaC1vcmRlciAyNSBiaXRzIG9mIHRoZSBFdGhlcm5ldCBhZGRyZXNzIGFyZSBzdGF0aWNhbGx5IGFzc2lnbmVkLAorICogYW5kIHRoZSBsb3ctb3JkZXIgMjMgYml0cyBhcmUgdGFrZW4gZnJvbSB0aGUgbG93IGVuZCBvZiB0aGUgSVAgYWRkcmVzcy4KKyAqLworI2RlZmluZSBFVEhFUl9NQVBfSVBfTVVMVElDQVNUKGlwYWRkciwgZW5hZGRyKQkJCQlcCisJLyogc3RydWN0IGluX2FkZHIgKmlwYWRkcjsgKi8JCQkJCVwKKwkvKiB1X2ludDhfdCBlbmFkZHJbRVRIRVJfQUREUl9MRU5dOyAqLwkJCQlcCit7CQkJCQkJCQkJXAorCShlbmFkZHIpWzBdID0gMHgwMTsJCQkJCQlcCisJKGVuYWRkcilbMV0gPSAweDAwOwkJCQkJCVwKKwkoZW5hZGRyKVsyXSA9IDB4NWU7CQkJCQkJXAorCShlbmFkZHIpWzNdID0gKCh1X2ludDhfdCAqKWlwYWRkcilbMV0gJiAweDdmOwkJCVwKKwkoZW5hZGRyKVs0XSA9ICgodV9pbnQ4X3QgKilpcGFkZHIpWzJdOwkJCQlcCisJKGVuYWRkcilbNV0gPSAoKHVfaW50OF90ICopaXBhZGRyKVszXTsJCQkJXAorfQorLyoKKyAqIE1hY3JvIHRvIG1hcCBhbiBJUDYgbXVsdGljYXN0IGFkZHJlc3MgdG8gYW4gRXRoZXJuZXQgbXVsdGljYXN0IGFkZHJlc3MuCisgKiBUaGUgaGlnaC1vcmRlciAxNiBiaXRzIG9mIHRoZSBFdGhlcm5ldCBhZGRyZXNzIGFyZSBzdGF0aWNhbGx5IGFzc2lnbmVkLAorICogYW5kIHRoZSBsb3ctb3JkZXIgMzIgYml0cyBhcmUgdGFrZW4gZnJvbSB0aGUgbG93IGVuZCBvZiB0aGUgSVA2IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgRVRIRVJfTUFQX0lQVjZfTVVMVElDQVNUKGlwNmFkZHIsIGVuYWRkcikJCQlcCisJLyogc3RydWN0IGluNl9hZGRyICppcDZhZGRyOyAqLwkJCQkJXAorCS8qIHVfaW50OF90IGVuYWRkcltFVEhFUl9BRERSX0xFTl07ICovCQkJCVwKK3sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkoZW5hZGRyKVswXSA9IDB4MzM7CQkJCQkJXAorCShlbmFkZHIpWzFdID0gMHgzMzsJCQkJCQlcCisJKGVuYWRkcilbMl0gPSAoKHVfaW50OF90ICopaXA2YWRkcilbMTJdOwkJCVwKKwkoZW5hZGRyKVszXSA9ICgodV9pbnQ4X3QgKilpcDZhZGRyKVsxM107CQkJXAorCShlbmFkZHIpWzRdID0gKCh1X2ludDhfdCAqKWlwNmFkZHIpWzE0XTsJCQlcCisJKGVuYWRkcilbNV0gPSAoKHVfaW50OF90ICopaXA2YWRkcilbMTVdOwkJCVwKK30KKyNlbmRpZgorCisjZGVmaW5lCUVUSEVSQ0FQX1ZMQU5fTVRVCTB4MDAwMDAwMDEJLyogVkxBTi1jb21wYXRpYmxlIE1UVSAqLworI2RlZmluZQlFVEhFUkNBUF9WTEFOX0hXVEFHR0lORwkweDAwMDAwMDAyCS8qIGhhcmR3YXJlIFZMQU4gdGFnIHN1cHBvcnQgKi8KKyNkZWZpbmUJRVRIRVJDQVBfSlVNQk9fTVRVCTB4MDAwMDAwMDQJLyogOTAwMCBieXRlIE1UVSBzdXBwb3J0ZWQgKi8KKworI2lmZGVmCV9LRVJORUwKK2V4dGVybiBjb25zdCB1aW50OF90IGV0aGVyYnJvYWRjYXN0YWRkcltFVEhFUl9BRERSX0xFTl07CitleHRlcm4gY29uc3QgdWludDhfdCBldGhlcm11bHRpY2FzdGFkZHJfc2xvd3Byb3RvY29sc1tFVEhFUl9BRERSX0xFTl07CitleHRlcm4gY29uc3QgdWludDhfdCBldGhlcl9pcG11bHRpY2FzdF9taW5bRVRIRVJfQUREUl9MRU5dOworZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZXRoZXJfaXBtdWx0aWNhc3RfbWF4W0VUSEVSX0FERFJfTEVOXTsKKworaW50CWV0aGVyX2lvY3RsKHN0cnVjdCBpZm5ldCAqLCB1X2xvbmcsIGNhZGRyX3QpOworaW50CWV0aGVyX2FkZG11bHRpIChzdHJ1Y3QgaWZyZXEgKiwgc3RydWN0IGV0aGVyY29tICopOworaW50CWV0aGVyX2RlbG11bHRpIChzdHJ1Y3QgaWZyZXEgKiwgc3RydWN0IGV0aGVyY29tICopOworaW50CWV0aGVyX2NoYW5nZWFkZHIgKHN0cnVjdCBpZnJlcSAqLCBzdHJ1Y3QgZXRoZXJjb20gKik7CitpbnQJZXRoZXJfbXVsdGlhZGRyKHN0cnVjdCBzb2NrYWRkciAqLCB1X2ludDhfdFtdLCB1X2ludDhfdFtdKTsKKworLyoKKyAqIEV0aGVybmV0IDgwMi4xUSBWTEFOIHN0cnVjdHVyZXMuCisgKi8KKworLyogYWRkIFZMQU4gdGFnIHRvIGlucHV0L3JlY2VpdmVkIHBhY2tldCAqLworI2RlZmluZQlWTEFOX0lOUFVUX1RBRyhpZnAsIG0sIHZsYW5pZCwgX2VycmNhc2UpCVwKKwlkbyB7CQkJCQkJCQlcCisgICAgICAgICAgICAgICAgc3RydWN0IG1fdGFnICptdGFnID0JCQkJCVwKKyAgICAgICAgICAgICAgICAgICAgbV90YWdfZ2V0KFBBQ0tFVF9UQUdfVkxBTiwgc2l6ZW9mKHVfaW50KSwgTV9OT1dBSVQpO1wKKyAgICAgICAgICAgICAgICBpZiAobXRhZyA9PSBOVUxMKSB7CQkJCQlcCisJCQlpZnAtPmlmX2llcnJvcnMrKzsJCQkJXAorICAgICAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCIlczogdW5hYmxlIHRvIGFsbG9jYXRlIFZMQU4gdGFnXG4iLAlcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWZwLT5pZl94bmFtZSk7CQkJCVwKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZnJlZW0obSk7CQkJCQlcCisgICAgICAgICAgICAgICAgICAgICAgICBfZXJyY2FzZTsJCQkJCVwKKyAgICAgICAgICAgICAgICB9CQkJCQkJCVwKKyAgICAgICAgICAgICAgICAqKHVfaW50ICopKG10YWcgKyAxKSA9IHZsYW5pZDsJCQkJXAorICAgICAgICAgICAgICAgIG1fdGFnX3ByZXBlbmQobSwgbXRhZyk7CQkJCQlcCisJfSB3aGlsZSgwKQorCisvKiBleHRyYWN0IFZMQU4gdGFnIGZyb20gb3V0cHV0L3RyYXNtaXQgcGFja2V0ICovCisjZGVmaW5lIFZMQU5fT1VUUFVUX1RBRyhlYywgbTApCQkJXAorCVZMQU5fQVRUQUNIRUQoZWMpID8gbV90YWdfZmluZCgobTApLCBQQUNLRVRfVEFHX1ZMQU4sIE5VTEwpIDogTlVMTAorCisvKiBleHRyYWN0IFZMQU4gSUQgdmFsdWUgZnJvbSBhIFZMQU4gdGFnICovCisjZGVmaW5lIFZMQU5fVEFHX1ZBTFVFKG10YWcpCVwKKwkoKCoodV9pbnQgKikobXRhZyArIDEpKSAmIDQwOTUpCisKKy8qIHRlc3QgaWYgYW55IFZMQU4gaXMgY29uZmlndXJlZCBmb3IgdGhpcyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgVkxBTl9BVFRBQ0hFRChlYykJKChlYyktPmVjX252bGFucyA+IDApCisKK3ZvaWQJZXRoZXJfaWZhdHRhY2goc3RydWN0IGlmbmV0ICosIGNvbnN0IHVfaW50OF90ICopOwordm9pZAlldGhlcl9pZmRldGFjaChzdHJ1Y3QgaWZuZXQgKik7CisKK2NoYXIJKmV0aGVyX3NwcmludGYoY29uc3QgdV9pbnQ4X3QgKik7CitjaGFyCSpldGhlcl9zbnByaW50ZihjaGFyICosIHNpemVfdCwgY29uc3QgdV9pbnQ4X3QgKik7CisKK3VfaW50MzJfdCBldGhlcl9jcmMzMl9sZShjb25zdCB1X2ludDhfdCAqLCBzaXplX3QpOwordV9pbnQzMl90IGV0aGVyX2NyYzMyX2JlKGNvbnN0IHVfaW50OF90ICosIHNpemVfdCk7CisKK2ludAlldGhlcl9ub25zdGF0aWNfYXRvbih1X2NoYXIgKiwgY2hhciAqKTsKKyNlbHNlCisvKgorICogUHJvdG90eXBlIGV0aGVycygzKSBmdW5jdGlvbnMuCisgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KK19fQkVHSU5fREVDTFMKK2NoYXIgKglldGhlcl9udG9hIF9fUCgoY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKikpOworc3RydWN0IGV0aGVyX2FkZHIgKgorCWV0aGVyX2F0b24gX19QKChjb25zdCBjaGFyICopKTsKK2ludAlldGhlcl9udG9ob3N0IF9fUCgoY2hhciAqLCBjb25zdCBzdHJ1Y3QgZXRoZXJfYWRkciAqKSk7CitpbnQJZXRoZXJfaG9zdHRvbiBfX1AoKGNvbnN0IGNoYXIgKiwgc3RydWN0IGV0aGVyX2FkZHIgKikpOworaW50CWV0aGVyX2xpbmUgX19QKChjb25zdCBjaGFyICosIHN0cnVjdCBldGhlcl9hZGRyICosIGNoYXIgKikpOworX19FTkRfREVDTFMKKyNlbmRpZgorCisjZW5kaWYgLyogX1NUQU5EQUxPTkUgKi8KKworI2VuZGlmIC8qICFfTkVUX0lGX0VUSEVSX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L2lmX2llZWUxMzk0LmggYi9saWJjL2luY2x1ZGUvbmV0L2lmX2llZWUxMzk0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE2MTU4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfaWVlZTEzOTQuaApAQCAtMCwwICsxLDEyNyBAQAorLyoJJE5ldEJTRDogaWZfaWVlZTEzOTQuaCx2IDEuNiAyMDA1LzEyLzEwIDIzOjIxOjM4IGVsYWQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwMCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEF0c3VzaGkgT25vZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICoJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgKglGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX05FVF9JRl9JRUVFMTM5NF9IXworI2RlZmluZSBfTkVUX0lGX0lFRUUxMzk0X0hfCisKKy8qIGhhcmR3YXJlIGFkZHJlc3MgaW5mb3JtYXRpb24gZm9yIGFycCAvIG5kICovCitzdHJ1Y3QgaWVlZTEzOTRfaHdhZGRyIHsKKwl1X2ludDhfdAlpaGFfdWlkWzhdOwkJLyogbm9kZSB1bmlxdWUgSUQgKi8KKwl1X2ludDhfdAlpaGFfbWF4cmVjOwkJLyogbWF4X3JlYyBpbiB0aGUgY29uZmlnIFJPTSAqLworCXVfaW50OF90CWloYV9zcGVlZDsJCS8qIG1pbiBvZiBsaW5rL1BIWSBzcGVlZCAqLworCXVfaW50OF90CWloYV9vZmZzZXRbNl07CQkvKiB1bmljYXN0IEZJRk8gYWRkcmVzcyAqLworfTsKKworLyoKKyAqIEJQRiB3YW50cyB0byBzZWUgb25lIG9mIHRoZXNlLgorICovCitzdHJ1Y3QgaWVlZTEzOTRfYnBmaGRyIHsKKwl1aW50OF90CQlpYmhfZGhvc3RbOF07CisJdWludDhfdAkJaWJoX3Nob3N0WzhdOworCXVpbnQxNl90CWliaF90eXBlOworfTsKKworI2lmZGVmIF9LRVJORUwKKworLyogcHNldWRvIGhlYWRlciAqLworc3RydWN0IGllZWUxMzk0X2hlYWRlciB7CisJdV9pbnQ4X3QJaWhfdWlkWzhdOwkJLyogZHN0L3NyYyB1aWQgKi8KKwl1X2ludDhfdAlpaF9tYXhyZWM7CQkvKiBkc3QgbWF4cmVjIGZvciB0eCAqLworCXVfaW50OF90CWloX3NwZWVkOwkJLyogc3BlZWQgKi8KKwl1X2ludDhfdAlpaF9vZmZzZXRbNl07CQkvKiBkc3Qgb2Zmc2V0ICovCit9OworCisvKiB1bmZyYWdtZW50IGVuY2Fwc3VsYXRpb24gaGVhZGVyICovCitzdHJ1Y3QgaWVlZTEzOTRfdW5mcmFnaGRyIHsKKwl1X2ludDE2X3QJaXVoX2Z0OwkJCS8qIGZyYWdtZW50IHR5cGUgPT0gMCAqLworCXVfaW50MTZfdAlpdWhfZXR5cGU7CQkvKiBldGhlcl90eXBlICovCit9OworCisvKiBmcmFnbWVudGVkIGVuY2Fwc3VsYXRpb24gaGVhZGVyICovCitzdHJ1Y3QgaWVlZTEzOTRfZnJhZ2hkciB7CisJdV9pbnQxNl90CWlmaF9mdF9zaXplOwkJLyogZnJhZ21lbnQgdHlwZSwgZGF0YSBzaXplLTEgKi8KKwl1X2ludDE2X3QJaWZoX2V0eXBlX29mZjsJCS8qIGV0eXBlIGZvciBmaXJzdCBmcmFnbWVudCAqLworCQkJCQkJLyogb2Zmc2V0IGZvciBzdWJzZXEgZnJhZyAqLworCXVfaW50MTZfdAlpZmhfZGdsOwkJLyogZGF0YWdyYW0gbGFiZWwgKi8KKwl1X2ludDE2X3QJaWZoX3Jlc2VydmVkOworfTsKKworI2RlZmluZQlJRUVFMTM5NF9GVF9TVUJTRVEJMHg4MDAwCisjZGVmaW5lCUlFRUUxMzk0X0ZUX01PUkUJMHg0MDAwCisKKyNkZWZpbmUJSUVFRTEzOTRNVFUJCTE1MDAKKworI2RlZmluZQlJRUVFMTM5NF9HQVNQX0xFTgk4CQkvKiBHQVNQIGhlYWRlciBmb3IgU3RyZWFtICovCisjZGVmaW5lCUlFRUUxMzk0X0FERFJfTEVOCTgKKyNkZWZpbmUJSUVFRTEzOTRfQ1JDX0xFTgk0CisKK3N0cnVjdCBpZWVlMTM5NF9yZWFzc19wa3QgeworCUxJU1RfRU5UUlkoaWVlZTEzOTRfcmVhc3NfcGt0KSBycF9uZXh0OworCXN0cnVjdCBtYnVmCSpycF9tOworCXVfaW50MTZfdAlycF9zaXplOworCXVfaW50MTZfdAlycF9ldHlwZTsKKwl1X2ludDE2X3QJcnBfb2ZmOworCXVfaW50MTZfdAlycF9kZ2w7CisJdV9pbnQxNl90CXJwX2xlbjsKKwl1X2ludDE2X3QJcnBfdHRsOworfTsKKworc3RydWN0IGllZWUxMzk0X3JlYXNzcSB7CisJTElTVF9FTlRSWShpZWVlMTM5NF9yZWFzc3EpIHJxX25vZGU7CisJTElTVF9IRUFEKCwgaWVlZTEzOTRfcmVhc3NfcGt0KSBycV9wa3Q7CisJdV9pbnQzMl90CWZyX2lkOworfTsKKworc3RydWN0IGllZWUxMzk0Y29tIHsKKwlzdHJ1Y3QgaWZuZXQJZmNfaWY7CisJc3RydWN0IGllZWUxMzk0X2h3YWRkciBpY19od2FkZHI7CisJdV9pbnQxNl90CWljX2RnbDsKKwlMSVNUX0hFQUQoLCBpZWVlMTM5NF9yZWFzc3EpIGljX3JlYXNzcTsKK307CisKK2NvbnN0IGNoYXIgKmllZWUxMzk0X3NwcmludGYoY29uc3QgdV9pbnQ4X3QgKik7Cit2b2lkIGllZWUxMzk0X2lucHV0KHN0cnVjdCBpZm5ldCAqLCBzdHJ1Y3QgbWJ1ZiAqLCB1X2ludDE2X3QpOwordm9pZCBpZWVlMTM5NF9pZmF0dGFjaChzdHJ1Y3QgaWZuZXQgKiwgY29uc3Qgc3RydWN0IGllZWUxMzk0X2h3YWRkciAqKTsKK3ZvaWQgaWVlZTEzOTRfaWZkZXRhY2goc3RydWN0IGlmbmV0ICopOworaW50ICBpZWVlMTM5NF9pb2N0bChzdHJ1Y3QgaWZuZXQgKiwgdV9sb25nLCBjYWRkcl90KTsKK3N0cnVjdCBtYnVmICogaWVlZTEzOTRfZnJhZ21lbnQoc3RydWN0IGlmbmV0ICosIHN0cnVjdCBtYnVmICosIGludCwgdV9pbnQxNl90KTsKK3ZvaWQgaWVlZTEzOTRfZHJhaW4oc3RydWN0IGlmbmV0ICopOwordm9pZCBpZWVlMTM5NF93YXRjaGRvZyhzdHJ1Y3QgaWZuZXQgKik7CisjZW5kaWYgLyogX0tFUk5FTCAqLworCisjZW5kaWYgLyogIV9ORVRfSUZfSUVFRTEzOTRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXQvaWZfcGFja2V0LmggYi9saWJjL2luY2x1ZGUvbmV0L2lmX3BhY2tldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZThlMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0L2lmX3BhY2tldC5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxsaW51eC9pZl9wYWNrZXQuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXQvaWZfdHlwZXMuaCBiL2xpYmMvaW5jbHVkZS9uZXQvaWZfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMGEwNGY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldC9pZl90eXBlcy5oCkBAIC0wLDAgKzEsMjY3IEBACisvKgkkTmV0QlNEOiBpZl90eXBlcy5oLHYgMS4yNCAyMDA1LzEyLzEwIDIzOjIxOjM4IGVsYWQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MywgMTk5NAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpZl90eXBlcy5oCTguMyAoQmVya2VsZXkpIDQvMjgvOTUKKyAqLworCisjaWZuZGVmIF9ORVRfSUZfVFlQRVNfSF8KKyNkZWZpbmUgX05FVF9JRl9UWVBFU19IXworCisvKgorICogSW50ZXJmYWNlIHR5cGVzIGZvciBiZW5lZml0IG9mIHBhcnNpbmcgbWVkaWEgYWRkcmVzcyBoZWFkZXJzLgorICogVGhpcyBsaXN0IGlzIGRlcml2ZWQgZnJvbSB0aGUgU05NUCBsaXN0IG9mIGlmVHlwZXMsIG9yaWdpbmFsbHkKKyAqIGRvY3VtZW50ZWQgaW4gUkZDMTU3Mywgbm93IG1haW50YWluZWQgYXM6CisgKgorICogPFVSTDpodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL3NtaS1udW1iZXJzPgorICovCisKKyNkZWZpbmUJSUZUX09USEVSCTB4MQkJLyogbm9uZSBvZiB0aGUgZm9sbG93aW5nICovCisjZGVmaW5lCUlGVF8xODIyCTB4MgkJLyogb2xkLXN0eWxlIGFycGFuZXQgaW1wICovCisjZGVmaW5lCUlGVF9IREgxODIyCTB4MwkJLyogSERIIGFycGFuZXQgaW1wICovCisjZGVmaW5lCUlGVF9YMjVERE4JMHg0CQkvKiB4MjUgdG8gaW1wICovCisjZGVmaW5lCUlGVF9YMjUJCTB4NQkJLyogUEROIFgyNSBpbnRlcmZhY2UgKFJGQzg3NykgKi8KKyNkZWZpbmUJSUZUX0VUSEVSCTB4NgkJLyogRXRoZXJuZXQgQ1NNQS9DRCAqLworI2RlZmluZQlJRlRfSVNPODgwMjMJMHg3CQkvKiBDU01BL0NEICovCisjZGVmaW5lCUlGVF9JU084ODAyNAkweDgJCS8qIFRva2VuIEJ1cyAqLworI2RlZmluZQlJRlRfSVNPODgwMjUJMHg5CQkvKiBUb2tlbiBSaW5nICovCisjZGVmaW5lCUlGVF9JU084ODAyNgkweGEJCS8qIE1BTiAqLworI2RlZmluZQlJRlRfU1RBUkxBTgkweGIKKyNkZWZpbmUJSUZUX1AxMAkJMHhjCQkvKiBQcm90ZW9uIDEwTUJpdCByaW5nICovCisjZGVmaW5lCUlGVF9QODAJCTB4ZAkJLyogUHJvdGVvbiA4ME1CaXQgcmluZyAqLworI2RlZmluZQlJRlRfSFkJCTB4ZQkJLyogSHlwZXJjaGFubmVsICovCisjZGVmaW5lCUlGVF9GRERJCTB4ZgorI2RlZmluZQlJRlRfTEFQQgkweDEwCisjZGVmaW5lCUlGVF9TRExDCTB4MTEKKyNkZWZpbmUJSUZUX1QxCQkweDEyCisjZGVmaW5lCUlGVF9DRVBUCTB4MTMJCS8qIEUxIC0gZXVyb3BlYW4gVDEgKi8KKyNkZWZpbmUJSUZUX0lTRE5CQVNJQwkweDE0CisjZGVmaW5lCUlGVF9JU0ROUFJJTUFSWQkweDE1CisjZGVmaW5lCUlGVF9QVFBTRVJJQUwJMHgxNgkJLyogUHJvcHJpZXRhcnkgUFRQIHNlcmlhbCAqLworI2RlZmluZQlJRlRfUFBQCQkweDE3CQkvKiBSRkMgMTMzMSAqLworI2RlZmluZQlJRlRfTE9PUAkweDE4CQkvKiBsb29wYmFjayAqLworI2RlZmluZQlJRlRfRU9OCQkweDE5CQkvKiBJU08gb3ZlciBJUCAqLworI2RlZmluZQlJRlRfWEVUSEVSCTB4MWEJCS8qIG9ic29sZXRlIDNNQiBleHBlcmltZW50YWwgZXRoZXJuZXQgKi8KKyNkZWZpbmUJSUZUX05TSVAJMHgxYgkJLyogWE5TIG92ZXIgSVAgKi8KKyNkZWZpbmUJSUZUX1NMSVAJMHgxYwkJLyogSVAgb3ZlciBnZW5lcmljIFRUWSAqLworI2RlZmluZQlJRlRfVUxUUkEJMHgxZAkJLyogVWx0cmEgVGVjaG5vbG9naWVzICovCisjZGVmaW5lCUlGVF9EUzMJCTB4MWUJCS8qIEdlbmVyaWMgVDMgKi8KKyNkZWZpbmUJSUZUX1NJUAkJMHgxZgkJLyogU01EUyAqLworI2RlZmluZQlJRlRfRlJFTEFZCTB4MjAJCS8qIEZyYW1lIFJlbGF5IERURSBvbmx5ICovCisjZGVmaW5lCUlGVF9SUzIzMgkweDIxCisjZGVmaW5lCUlGVF9QQVJBCTB4MjIJCS8qIHBhcmFsbGVsLXBvcnQgKi8KKyNkZWZpbmUJSUZUX0FSQ05FVAkweDIzCisjZGVmaW5lCUlGVF9BUkNORVRQTFVTCTB4MjQKKyNkZWZpbmUJSUZUX0FUTQkJMHgyNQkJLyogQVRNIGNlbGxzICovCisjZGVmaW5lCUlGVF9NSU9YMjUJMHgyNgorI2RlZmluZQlJRlRfU09ORVQJMHgyNwkJLyogU09ORVQgb3IgU0RIICovCisjZGVmaW5lCUlGVF9YMjVQTEUJMHgyOAorI2RlZmluZQlJRlRfSVNPODgwMjJMTEMJMHgyOQorI2RlZmluZQlJRlRfTE9DQUxUQUxLCTB4MmEKKyNkZWZpbmUJSUZUX1NNRFNEWEkJMHgyYgorI2RlZmluZQlJRlRfRlJFTEFZRENFCTB4MmMJCS8qIEZyYW1lIFJlbGF5IERDRSAqLworI2RlZmluZQlJRlRfVjM1CQkweDJkCisjZGVmaW5lCUlGVF9IU1NJCTB4MmUKKyNkZWZpbmUJSUZUX0hJUFBJCTB4MmYKKyNkZWZpbmUJSUZUX01PREVNCTB4MzAJCS8qIEdlbmVyaWMgTW9kZW0gKi8KKyNkZWZpbmUJSUZUX0FBTDUJMHgzMQkJLyogQUFMNSBvdmVyIEFUTSAqLworI2RlZmluZQlJRlRfU09ORVRQQVRICTB4MzIKKyNkZWZpbmUJSUZUX1NPTkVUVlQJMHgzMworI2RlZmluZQlJRlRfU01EU0lDSVAJMHgzNAkJLyogU01EUyBJbnRlckNhcnJpZXIgSW50ZXJmYWNlICovCisjZGVmaW5lCUlGVF9QUk9QVklSVFVBTAkweDM1CQkvKiBQcm9wcmlldGFyeSBWaXJ0dWFsL2ludGVybmFsICovCisjZGVmaW5lCUlGVF9QUk9QTVVYCTB4MzYJCS8qIFByb3ByaWV0YXJ5IE11bHRpcGxleGluZyAqLworI2RlZmluZSBJRlRfSUVFRTgwMjEyCQkgICAweDM3IC8qIDEwMEJhc2VWRyAqLworI2RlZmluZSBJRlRfRklCUkVDSEFOTkVMCSAgIDB4MzggLyogRmlicmUgQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfSElQUElJTlRFUkZBQ0UJICAgMHgzOSAvKiBISVBQSSBpbnRlcmZhY2VzCSAqLworI2RlZmluZSBJRlRfRlJBTUVSRUxBWUlOVEVSQ09OTkVDVCAweDNhIC8qIE9ic29sZXRlLCB1c2UgZWl0aGVyIDB4MjAgb3IgMHgyYyAqLworI2RlZmluZSBJRlRfQUZMQU5FODAyMwkJICAgMHgzYiAvKiBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuMyAqLworI2RlZmluZSBJRlRfQUZMQU5FODAyNQkJICAgMHgzYyAvKiBBVE0gRW11bGF0ZWQgTEFOIGZvciA4MDIuNSAqLworI2RlZmluZSBJRlRfQ0NURU1VTAkJICAgMHgzZCAvKiBBVE0gRW11bGF0ZWQgY2lyY3VpdAkJICAqLworI2RlZmluZSBJRlRfRkFTVEVUSEVSCQkgICAweDNlIC8qIEZhc3QgRXRoZXJuZXQgKDEwMEJhc2VUKSAqLworI2RlZmluZSBJRlRfSVNETgkJICAgMHgzZiAvKiBJU0ROIGFuZCBYLjI1CSAgICAqLworI2RlZmluZSBJRlRfVjExCQkJICAgMHg0MCAvKiBDQ0lUVCBWLjExL1guMjEJCSovCisjZGVmaW5lIElGVF9WMzYJCQkgICAweDQxIC8qIENDSVRUIFYuMzYJCQkqLworI2RlZmluZSBJRlRfRzcwM0FUNjRLCQkgICAweDQyIC8qIENDSVRUIEc3MDMgYXQgNjRLYnBzICovCisjZGVmaW5lIElGVF9HNzAzQVQyTUIJCSAgIDB4NDMgLyogT2Jzb2xldGUgc2VlIERTMS1NSUIgKi8KKyNkZWZpbmUgSUZUX1FMTEMJCSAgIDB4NDQgLyogU05BIFFMTEMJCQkqLworI2RlZmluZSBJRlRfRkFTVEVUSEVSRlgJCSAgIDB4NDUgLyogRmFzdCBFdGhlcm5ldCAoMTAwQmFzZUZYKQkqLworI2RlZmluZSBJRlRfQ0hBTk5FTAkJICAgMHg0NiAvKiBjaGFubmVsCQkJKi8KKyNkZWZpbmUgSUZUX0lFRUU4MDIxMQkJICAgMHg0NyAvKiByYWRpbyBzcHJlYWQgc3BlY3RydW0JKi8KKyNkZWZpbmUgSUZUX0lCTTM3MFBBUkNIQU4JICAgMHg0OCAvKiBJQk0gU3lzdGVtIDM2MC8zNzAgT0VNSSBDaGFubmVsICovCisjZGVmaW5lIElGVF9FU0NPTgkJICAgMHg0OSAvKiBJQk0gRW50ZXJwcmlzZSBTeXN0ZW1zIENvbm5lY3Rpb24gKi8KKyNkZWZpbmUgSUZUX0RMU1cJCSAgIDB4NGEgLyogRGF0YSBMaW5rIFN3aXRjaGluZyAqLworI2RlZmluZSBJRlRfSVNETlMJCSAgIDB4NGIgLyogSVNETiBTL1QgaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9JU0ROVQkJICAgMHg0YyAvKiBJU0ROIFUgaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9MQVBECQkgICAweDRkIC8qIExpbmsgQWNjZXNzIFByb3RvY29sIEQgKi8KKyNkZWZpbmUgSUZUX0lQU1dJVENICQkgICAweDRlIC8qIElQIFN3aXRjaGluZyBPYmplY3RzICovCisjZGVmaW5lIElGVF9SU1JCCQkgICAweDRmIC8qIFJlbW90ZSBTb3VyY2UgUm91dGUgQnJpZGdpbmcgKi8KKyNkZWZpbmUgSUZUX0FUTUxPR0lDQUwJCSAgIDB4NTAgLyogQVRNIExvZ2ljYWwgUG9ydCAqLworI2RlZmluZSBJRlRfRFMwCQkJICAgMHg1MSAvKiBEaWdpdGFsIFNpZ25hbCBMZXZlbCAwICovCisjZGVmaW5lIElGVF9EUzBCVU5ETEUJCSAgIDB4NTIgLyogZ3JvdXAgb2YgZHMwcyBvbiB0aGUgc2FtZSBkczEgKi8KKyNkZWZpbmUgSUZUX0JTQwkJCSAgIDB4NTMgLyogQmlzeW5jaHJvbm91cyBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfQVNZTkMJCSAgIDB4NTQgLyogQXN5bmNocm9ub3VzIFByb3RvY29sICovCisjZGVmaW5lIElGVF9DTlIJCQkgICAweDU1IC8qIENvbWJhdCBOZXQgUmFkaW8gKi8KKyNkZWZpbmUgSUZUX0lTTzg4MDI1RFRSCQkgICAweDU2IC8qIElTTyA4MDIuNXIgRFRSICovCisjZGVmaW5lIElGVF9FUExSUwkJICAgMHg1NyAvKiBFeHQgUG9zIExvYyBSZXBvcnQgU3lzICovCisjZGVmaW5lIElGVF9BUkFQCQkgICAweDU4IC8qIEFwcGxldGFsayBSZW1vdGUgQWNjZXNzIFByb3RvY29sICovCisjZGVmaW5lIElGVF9QUk9QQ05MUwkJICAgMHg1OSAvKiBQcm9wcmlldGFyeSBDb25uZWN0aW9ubGVzcyBQcm90b2NvbCovCisjZGVmaW5lIElGVF9IT1NUUEFECQkgICAweDVhIC8qIENDSVRULUlUVSBYLjI5IFBBRCBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfVEVSTVBBRAkJICAgMHg1YiAvKiBDQ0lUVC1JVFUgWC4zIFBBRCBGYWNpbGl0eSAqLworI2RlZmluZSBJRlRfRlJBTUVSRUxBWU1QSQkgICAweDVjIC8qIE11bHRpcHJvdG8gSW50ZXJjb25uZWN0IG92ZXIgRlIgKi8KKyNkZWZpbmUgSUZUX1gyMTMJCSAgIDB4NWQgLyogQ0NJVFQtSVRVIFgyMTMgKi8KKyNkZWZpbmUgSUZUX0FEU0wJCSAgIDB4NWUgLyogQXN5bW1ldHJpYyBEaWdpdGFsIFN1YnNjcmliZXIgTG9vcCAqLworI2RlZmluZSBJRlRfUkFEU0wJCSAgIDB4NWYgLyogUmF0ZS1BZGFwdC4gRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AqLworI2RlZmluZSBJRlRfU0RTTAkJICAgMHg2MCAvKiBTeW1tZXRyaWMgRGlnaXRhbCBTdWJzY3JpYmVyIExvb3AgKi8KKyNkZWZpbmUgSUZUX1ZEU0wJCSAgIDB4NjEgLyogVmVyeSBILVNwZWVkIERpZ2l0YWwgU3Vic2NyaWIuIExvb3AqLworI2RlZmluZSBJRlRfSVNPODgwMjVDUkZQSU5UCSAgIDB4NjIgLyogSVNPIDgwMi41IENSRlAgKi8KKyNkZWZpbmUgSUZUX01ZUklORVQJCSAgIDB4NjMgLyogTXlyaWNvbSBNeXJpbmV0ICovCisjZGVmaW5lIElGVF9WT0lDRUVNCQkgICAweDY0IC8qIHZvaWNlIHJlY0VpdmUgYW5kIHRyYW5zTWl0ICovCisjZGVmaW5lIElGVF9WT0lDRUZYTwkJICAgMHg2NSAvKiB2b2ljZSBGb3JlaWduIEV4Y2hhbmdlIE9mZmljZSAqLworI2RlZmluZSBJRlRfVk9JQ0VGWFMJCSAgIDB4NjYgLyogdm9pY2UgRm9yZWlnbiBFeGNoYW5nZSBTdGF0aW9uICovCisjZGVmaW5lIElGVF9WT0lDRUVOQ0FQCQkgICAweDY3IC8qIHZvaWNlIGVuY2Fwc3VsYXRpb24gKi8KKyNkZWZpbmUgSUZUX1ZPSUNFT1ZFUklQCQkgICAweDY4IC8qIHZvaWNlIG92ZXIgSVAgZW5jYXBzdWxhdGlvbiAqLworI2RlZmluZSBJRlRfQVRNRFhJCQkgICAweDY5IC8qIEFUTSBEWEkgKi8KKyNkZWZpbmUgSUZUX0FUTUZVTkkJCSAgIDB4NmEgLyogQVRNIEZVTkkgKi8KKyNkZWZpbmUgSUZUX0FUTUlNQQkJICAgMHg2YiAvKiBBVE0gSU1BCQkgICAgICAqLworI2RlZmluZSBJRlRfUFBQTVVMVElMSU5LQlVORExFCSAgIDB4NmMgLyogUFBQIE11bHRpbGluayBCdW5kbGUgKi8KKyNkZWZpbmUgSUZUX0lQT1ZFUkNETEMJCSAgIDB4NmQgLyogSUJNIGlwT3ZlckNkbGMgKi8KKyNkZWZpbmUgSUZUX0lQT1ZFUkNMQVcJCSAgIDB4NmUgLyogSUJNIENvbW1vbiBMaW5rIEFjY2VzcyB0byBXb3Jrc3RuICovCisjZGVmaW5lIElGVF9TVEFDS1RPU1RBQ0sJICAgMHg2ZiAvKiBJQk0gc3RhY2tUb1N0YWNrICovCisjZGVmaW5lIElGVF9WSVJUVUFMSVBBRERSRVNTCSAgIDB4NzAgLyogSUJNIFZJUEEgKi8KKyNkZWZpbmUgSUZUX01QQwkJCSAgIDB4NzEgLyogSUJNIG11bHRpLXByb3RvY29sIGNoYW5uZWwgc3VwcG9ydCAqLworI2RlZmluZSBJRlRfSVBPVkVSQVRNCQkgICAweDcyIC8qIElCTSBpcE92ZXJBdG0gKi8KKyNkZWZpbmUgSUZUX0lTTzg4MDI1RklCRVIJICAgMHg3MyAvKiBJU08gODAyLjVqIEZpYmVyIFRva2VuIFJpbmcgKi8KKyNkZWZpbmUgSUZUX1RETEMJCSAgIDB4NzQgLyogSUJNIHR3aW5heGlhbCBkYXRhIGxpbmsgY29udHJvbCAqLworI2RlZmluZSBJRlRfR0lHQUJJVEVUSEVSTkVUCSAgIDB4NzUgLyogR2lnYWJpdCBFdGhlcm5ldCAqLworI2RlZmluZSBJRlRfSERMQwkJICAgMHg3NiAvKiBIRExDICovCisjZGVmaW5lIElGVF9MQVBGCQkgICAweDc3IC8qIExBUCBGICovCisjZGVmaW5lIElGVF9WMzcJCQkgICAweDc4IC8qIFYuMzcgKi8KKyNkZWZpbmUgSUZUX1gyNU1MUAkJICAgMHg3OSAvKiBNdWx0aS1MaW5rIFByb3RvY29sICovCisjZGVmaW5lIElGVF9YMjVIVU5UR1JPVVAJICAgMHg3YSAvKiBYMjUgSHVudCBHcm91cCAqLworI2RlZmluZSBJRlRfVFJBTlNQSERMQwkJICAgMHg3YiAvKiBUcmFuc3AgSERMQyAqLworI2RlZmluZSBJRlRfSU5URVJMRUFWRQkJICAgMHg3YyAvKiBJbnRlcmxlYXZlIGNoYW5uZWwgKi8KKyNkZWZpbmUgSUZUX0ZBU1QJCSAgIDB4N2QgLyogRmFzdCBjaGFubmVsICovCisjZGVmaW5lIElGVF9JUAkJCSAgIDB4N2UgLyogSVAgKGZvciBBUFBOIEhQUiBpbiBJUCBuZXR3b3JrcykgKi8KKyNkZWZpbmUgSUZUX0RPQ1NDQUJMRU1BQ0xBWUVSCSAgIDB4N2YgLyogQ0FUViBNYWMgTGF5ZXIgKi8KKyNkZWZpbmUgSUZUX0RPQ1NDQUJMRURPV05TVFJFQU0JICAgMHg4MCAvKiBDQVRWIERvd25zdHJlYW0gaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9ET0NTQ0FCTEVVUFNUUkVBTQkgICAweDgxIC8qIENBVFYgVXBzdHJlYW0gaW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9BMTJNUFBTV0lUQ0gJICAgMHg4MgkvKiBBdmFsb24gUGFyYWxsZWwgUHJvY2Vzc29yICovCisjZGVmaW5lIElGVF9UVU5ORUwJCSAgIDB4ODMJLyogRW5jYXBzdWxhdGlvbiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0NPRkZFRQkJICAgMHg4NAkvKiBjb2ZmZWUgcG90ICovCisjZGVmaW5lIElGVF9DRVMJCQkgICAweDg1CS8qIENpcmNpdXQgRW11bGF0aW9uIFNlcnZpY2UgKi8KKyNkZWZpbmUgSUZUX0FUTVNVQklOVEVSRkFDRQkgICAweDg2CS8qICh4KSAgQVRNIFN1YiBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0wyVkxBTgkJICAgMHg4NwkvKiBMYXllciAyIFZpcnR1YWwgTEFOIHVzaW5nIDgwMi4xUSAqLworI2RlZmluZSBJRlRfTDNJUFZMQU4JCSAgIDB4ODgJLyogTGF5ZXIgMyBWaXJ0dWFsIExBTiAtIElQIFByb3RvY29sICovCisjZGVmaW5lIElGVF9MM0lQWFZMQU4JCSAgIDB4ODkJLyogTGF5ZXIgMyBWaXJ0dWFsIExBTiAtIElQWCBQcm90LiAqLworI2RlZmluZSBJRlRfRElHSVRBTFBPV0VSTElORQkgICAweDhhCS8qIElQIG92ZXIgUG93ZXIgTGluZXMgKi8KKyNkZWZpbmUgSUZUX01FRElBTUFJTE9WRVJJUAkgICAweDhiCS8qICh4eHgpICBNdWx0aW1lZGlhIE1haWwgb3ZlciBJUCAqLworI2RlZmluZSBJRlRfRFRNCQkJICAgMHg4YwkvKiBEeW5hbWljIHN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKi8KKyNkZWZpbmUgSUZUX0RDTgkJCSAgIDB4OGQJLyogRGF0YSBDb21tdW5pY2F0aW9ucyBOZXR3b3JrICovCisjZGVmaW5lIElGVF9JUEZPUldBUkQJCSAgIDB4OGUJLyogSVAgRm9yd2FyZGluZyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX01TRFNMCQkgICAweDhmCS8qIE11bHRpLXJhdGUgU3ltbWV0cmljIERTTCAqLworI2RlZmluZSBJRlRfSUVFRTEzOTQJCSAgIDB4OTAJLyogSUVFRTEzOTQgSGlnaCBQZXJmb3JtYW5jZSBTZXJpYWxCdXMqLworI2RlZmluZSBJRlRfSUZHU04JCSAgIDB4OTEJLyogSElQUEktNjQwMCAqLworI2RlZmluZSBJRlRfRFZCUkNDTUFDTEFZRVIJICAgMHg5MgkvKiBEVkItUkNDIE1BQyBMYXllciAqLworI2RlZmluZSBJRlRfRFZCUkNDRE9XTlNUUkVBTQkgICAweDkzCS8qIERWQi1SQ0MgRG93bnN0cmVhbSBDaGFubmVsICovCisjZGVmaW5lIElGVF9EVkJSQ0NVUFNUUkVBTQkgICAweDk0CS8qIERWQi1SQ0MgVXBzdHJlYW0gQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfQVRNVklSVFVBTAkJICAgMHg5NQkvKiBBVE0gVmlydHVhbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX01QTFNUVU5ORUwJCSAgIDB4OTYJLyogTVBMUyBUdW5uZWwgVmlydHVhbCBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1NSUAkJCSAgIDB4OTcJLyogU3BhdGlhbCBSZXVzZSBQcm90b2NvbCAqLworI2RlZmluZSBJRlRfVk9JQ0VPVkVSQVRNCSAgIDB4OTgJLyogVm9pY2Ugb3ZlciBBVE0gKi8KKyNkZWZpbmUgSUZUX1ZPSUNFT1ZFUkZSQU1FUkVMQVkJICAgMHg5OQkvKiBWb2ljZSBPdmVyIEZyYW1lIFJlbGF5ICovCisjZGVmaW5lIElGVF9JRFNMCQkgICAweDlhCS8qIERpZ2l0YWwgU3Vic2NyaWJlciBMb29wIG92ZXIgSVNETiAqLworI2RlZmluZSBJRlRfQ09NUE9TSVRFTElOSwkgICAweDliCS8qIEF2aWNpIENvbXBvc2l0ZSBMaW5rIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfU1M3U0lHTElOSwkJICAgMHg5YwkvKiBTUzcgU2lnbmFsaW5nIExpbmsgKi8KKyNkZWZpbmUgSUZUX1BST1BXSVJFTEVTU1AyUAkgICAweDlkCS8qIFByb3AuIFAyUCB3aXJlbGVzcyBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX0ZSRk9SV0FSRAkJICAgMHg5ZQkvKiBGcmFtZSBmb3J3YXJkIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfUkZDMTQ4MwkJICAgMHg5ZgkvKiBNdWx0aXByb3RvY29sIG92ZXIgQVRNIEFBTDUgKi8KKyNkZWZpbmUgSUZUX1VTQgkJCSAgIDB4YTAJLyogVVNCIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfSUVFRTgwMjNBRExBRwkgICAweGExCS8qIElFRUUgODAyLjNhZCBMaW5rIEFnZ3JlZ2F0ZSovCisjZGVmaW5lIElGVF9CR1BQT0xJQ1lBQ0NPVU5USU5HCSAgIDB4YTIJLyogQkdQIFBvbGljeSBBY2NvdW50aW5nICovCisjZGVmaW5lIElGVF9GUkYxNk1GUkJVTkRMRQkgICAweGEzCS8qIEZSRi4xNiBNdWx0aWxpayBGcmFtZSBSZWxheSovCisjZGVmaW5lIElGVF9IMzIzR0FURUtFRVBFUgkgICAweGE0CS8qIEgzMjMgR2F0ZWtlZXBlciAqLworI2RlZmluZSBJRlRfSDMyM1BST1hZCQkgICAweGE1CS8qIEgzMjMgVm9pY2UgYW5kIFZpZGVvIFByb3h5ICovCisjZGVmaW5lIElGVF9NUExTCQkgICAweGE2CS8qIE1QTFMgKi8KKyNkZWZpbmUgSUZUX01GU0lHTElOSwkJICAgMHhhNwkvKiBNdWx0aS1mcmVxdWVuY3kgc2lnbmFsaW5nIGxpbmsgKi8KKyNkZWZpbmUgSUZUX0hEU0wyCQkgICAweGE4CS8qIEhpZ2ggQml0LVJhdGUgRFNMLCAybmQgZ2VuLiAqLworI2RlZmluZSBJRlRfU0hEU0wJCSAgIDB4YTkJLyogTXVsdGlyYXRlIEhEU0wyICovCisjZGVmaW5lIElGVF9EUzFGREwJCSAgIDB4YWEJLyogRmFjaWxpdHkgRGF0YSBMaW5rICg0S2Jwcykgb24gYSBEUzEqLworI2RlZmluZSBJRlRfUE9TCQkJICAgMHhhYgkvKiBQYWNrZXQgb3ZlciBTT05FVC9TREggSW50ZXJmYWNlICovCisjZGVmaW5lIElGVF9EVkJBU0lMTgkJICAgMHhhYwkvKiBEVkItQVNJIElucHV0ICovCisjZGVmaW5lIElGVF9EVkJBU0lPVVQJCSAgIDB4YWQJLyogRFZCLUFTSSBPdXRwdXQgKi8KKyNkZWZpbmUgSUZUX1BMQwkJCSAgIDB4YWUJLyogUG93ZXIgTGluZSBDb21tdW5pY2F0aW9ucyAqLworI2RlZmluZSBJRlRfTkZBUwkJICAgMHhhZgkvKiBOb24tRmFjaWxpdHkgQXNzb2NpYXRlZCBTaWduYWxpbmcgKi8KKyNkZWZpbmUgSUZUX1RSMDA4CQkgICAweGIwCS8qIFRST084ICovCisjZGVmaW5lIElGVF9HUjMwM1JEVAkJICAgMHhiMQkvKiBSZW1vdGUgRGlnaXRhbCBUZXJtaW5hbCAqLworI2RlZmluZSBJRlRfR1IzMDNJRFQJCSAgIDB4YjIJLyogSW50ZWdyYXRlZCBEaWdpdGFsIFRlcm1pbmFsICovCisjZGVmaW5lIElGVF9JU1VQCQkgICAweGIzCS8qIElTVVAgKi8KKyNkZWZpbmUgSUZUX1BST1BET0NTV0lSRUxFU1NNQUNMQVlFUgkgICAweGI0CS8qIHByb3AvV2lyZWxlc3MgTUFDIExheWVyICovCisjZGVmaW5lIElGVF9QUk9QRE9DU1dJUkVMRVNTRE9XTlNUUkVBTQkgICAweGI1CS8qIHByb3AvV2lyZWxlc3MgRG93bnN0cmVhbSAqLworI2RlZmluZSBJRlRfUFJPUERPQ1NXSVJFTEVTU1VQU1RSRUFNCSAgIDB4YjYJLyogcHJvcC9XaXJlbGVzcyBVcHN0cmVhbSAqLworI2RlZmluZSBJRlRfSElQRVJMQU4yCQkgICAweGI3CS8qIEhJUEVSTEFOIFR5cGUgMiBSYWRpbyBJbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1BST1BCV0FQMk1QCQkgICAweGI4CS8qIFByb3BCcm9hZGJhbmRXaXJlbGVzc0FjY2VzcyBQMk1QKi8KKyNkZWZpbmUgSUZUX1NPTkVUT1ZFUkhFQURDSEFOTkVMICAgMHhiOQkvKiBTT05FVCBPdmVyaGVhZCBDaGFubmVsICovCisjZGVmaW5lIElGVF9ESUdJVEFMV1JBUFBFUk9WRVJIRUFEQ0hBTk5FTCAgMHhiYQkvKiBEaWdpdGFsIFdyYXBwZXIgT3ZlcmhlYWQgKi8KKyNkZWZpbmUgSUZUX0FBTDIJCSAgIDB4YmIJLyogQVRNIGFkYXB0YXRpb24gbGF5ZXIgMiAqLworI2RlZmluZSBJRlRfUkFESU9NQUMJCSAgIDB4YmMJLyogTUFDIGxheWVyIG92ZXIgcmFkaW8gbGlua3MgKi8KKyNkZWZpbmUgSUZUX0FUTVJBRElPCQkgICAweGJkCS8qIEFUTSBvdmVyIHJhZGlvIGxpbmtzICovCisjZGVmaW5lIElGVF9JTVQJCQkgICAweGJlIC8qIEludGVyLU1hY2hpbmUgVHJ1bmtzICovCisjZGVmaW5lIElGVF9NVkwJCQkgICAweGJmIC8qIE11bHRpcGxlIFZpcnR1YWwgTGluZXMgRFNMICovCisjZGVmaW5lIElGVF9SRUFDSERTTAkJICAgMHhjMCAvKiBMb25nIFJlYWNoIERTTCAqLworI2RlZmluZSBJRlRfRlJETENJRU5EUFQJCSAgIDB4YzEgLyogRnJhbWUgUmVsYXkgRExDSSBFbmQgUG9pbnQgKi8KKyNkZWZpbmUgSUZUX0FUTVZDSUVORFBUCQkgICAweGMyIC8qIEFUTSBWQ0kgRW5kIFBvaW50ICovCisjZGVmaW5lIElGVF9PUFRJQ0FMQ0hBTk5FTAkgICAweGMzIC8qIE9wdGljYWwgQ2hhbm5lbCAqLworI2RlZmluZSBJRlRfT1BUSUNBTFRSQU5TUE9SVAkgICAweGM0IC8qIE9wdGljYWwgVHJhbnNwb3J0ICovCisjZGVmaW5lIElGVF9QUk9QQVRNCQkgICAweGM1IC8qIFByb3ByaWV0YXJ5IEFUTSAqLworI2RlZmluZSBJRlRfVk9JQ0VPVkVSQ0FCTEUJICAgMHhjNiAvKiBWb2ljZSBPdmVyIENhYmxlIEludGVyZmFjZSAqLworI2RlZmluZSBJRlRfSU5GSU5JQkFORAkJICAgMHhjNyAvKiBJbmZpbmliYW5kICovCisjZGVmaW5lIElGVF9URUxJTksJCSAgIDB4YzggLyogVEUgTGluayAqLworI2RlZmluZSBJRlRfUTI5MzEJCSAgIDB4YzkgLyogUS4yOTMxICovCisjZGVmaW5lIElGVF9WSVJUVUFMVEcJCSAgIDB4Y2EgLyogVmlydHVhbCBUcnVuayBHcm91cCAqLworI2RlZmluZSBJRlRfU0lQVEcJCSAgIDB4Y2IgLyogU0lQIFRydW5rIEdyb3VwICovCisjZGVmaW5lIElGVF9TSVBTSUcJCSAgIDB4Y2MgLyogU0lQIFNpZ25hbGluZyAqLworI2RlZmluZSBJRlRfRE9DU0NBQkxFVVBTVFJFQU1DSEFOTkVMIDB4Y2QgLyogQ0FUViBVcHN0cmVhbSBDaGFubmVsICovCisjZGVmaW5lIElGVF9FQ09ORVQJCSAgIDB4Y2UgLyogQWNvcm4gRWNvbmV0ICovCisjZGVmaW5lIElGVF9QT04xNTUJCSAgIDB4Y2YgLyogRlNBTiAxNTVNYiBTeW1ldHJpY2FsIFBPTiBpbnRlcmZhY2UgKi8KKyNkZWZpbmUgSUZUX1BPTjYyMgkJICAgMHhkMCAvKiBGU0FOIDYyMk1iIFN5bWV0cmljYWwgUE9OIGludGVyZmFjZSAqLyovCisjZGVmaW5lIElGVF9CUklER0UJCSAgIDB4ZDEgLyogVHJhbnNwYXJlbnQgYnJpZGdlIGludGVyZmFjZSAqLworI2RlZmluZSBJRlRfTElORUdST1VQCQkgICAweGQyIC8qIEludGVyZmFjZSBjb21tb24gdG8gbXVsdGlwbGUgbGluZXMgKi8KKyNkZWZpbmUgSUZUX1ZPSUNFRU1GR0QJCSAgIDB4ZDMgLyogdm9pY2UgRSZNIEZlYXR1cmUgR3JvdXAgRCAqLworI2RlZmluZSBJRlRfVk9JQ0VGR0RFQU5BCSAgIDB4ZDQgLyogdm9pY2UgRkdEIEV4Y2hhbmdlIEFjY2VzcyBOb3J0aCBBbWVyaWNhbiAqLworI2RlZmluZSBJRlRfVk9JQ0VESUQJCSAgIDB4ZDUgLyogdm9pY2UgRGlyZWN0IElud2FyZCBEaWFsaW5nICovCisjZGVmaW5lIElGVF9TVEYJCQkgICAweGQ3CS8qIDZ0bzQgaW50ZXJmYWNlICovCisKKy8qIG5vdCBiYXNlZCBvbiBJQU5BIGFzc2lnbm1lbnRzIC0gaG93IHNob3VsZCB3ZSB0cmVhdCB0aGVzZT8gKi8KKyNkZWZpbmUgSUZUX0dJRgkJMHhmMAorI2RlZmluZSBJRlRfUFZDCQkweGYxCisjZGVmaW5lIElGVF9GQUlUSAkweGYyCisjZGVmaW5lIElGVF9QRkxPRwkweGY1CQkvKiBQYWNrZXQgZmlsdGVyIGxvZ2dpbmcgKi8KKyNkZWZpbmUgSUZUX1BGU1lOQwkweGY2CQkvKiBQYWNrZXQgZmlsdGVyIHN0YXRlIHN5bmNpbmcgKi8KKworI2VuZGlmIC8qICFfTkVUX0lGX1RZUEVTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0L3JvdXRlLmggYi9saWJjL2luY2x1ZGUvbmV0L3JvdXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTYwZGYyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXQvcm91dGUuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvcm91dGUuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRkYi5oIGIvbGliYy9pbmNsdWRlL25ldGRiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTIwOTU5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRkYi5oCkBAIC0wLDAgKzEsMjUwIEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk4MywgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICogLQorICogLS1Db3B5cmlnaHQtLQorICovCisKKy8qCisgKiAgICAgIEAoIyluZXRkYi5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICogICAgICBGcm9tOiBJZDogbmV0ZGIuaCx2IDguOSAxOTk2LzExLzE5IDA4OjM5OjI5IHZpeGllIEV4cCAkCisgKiAkRnJlZUJTRDogL3JlcG9tYW4vci9uY3ZzL3NyYy9pbmNsdWRlL25ldGRiLmgsdiAxLjQxIDIwMDYvMDQvMTUgMTY6MjA6MjYgdW1lIEV4cCAkCisgKi8KKworI2lmbmRlZiBfTkVUREJfSF8KKyNkZWZpbmUgX05FVERCX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpZm5kZWYgX1BBVEhfSEVRVUlWCisjIGRlZmluZQlfUEFUSF9IRVFVSVYJIi9zeXN0ZW0vZXRjL2hvc3RzLmVxdWl2IgorI2VuZGlmCisjZGVmaW5lCV9QQVRIX0hPU1RTCSIvc3lzdGVtL2V0Yy9ob3N0cyIKKyNkZWZpbmUJX1BBVEhfTkVUV09SS1MJIi9zeXN0ZW0vZXRjL25ldHdvcmtzIgorI2RlZmluZQlfUEFUSF9QUk9UT0NPTFMJIi9zeXN0ZW0vZXRjL3Byb3RvY29scyIKKyNkZWZpbmUJX1BBVEhfU0VSVklDRVMJIi9zeXN0ZW0vZXRjL3NlcnZpY2VzIgorCisvKiBCSU9OSUMtQkVHSU4gKi8KKyNkZWZpbmUgIGhfZXJybm8gICAoKl9fZ2V0X2hfZXJybm8oKSkKK2V4dGVybiBpbnQqICBfX2dldF9oX2Vycm5vKHZvaWQpOworLyogQklPTklDLUVORCAqLworCisvKgorICogU3RydWN0dXJlcyByZXR1cm5lZCBieSBuZXR3b3JrIGRhdGEgYmFzZSBsaWJyYXJ5LiAgQWxsIGFkZHJlc3NlcyBhcmUKKyAqIHN1cHBsaWVkIGluIGhvc3Qgb3JkZXIsIGFuZCByZXR1cm5lZCBpbiBuZXR3b3JrIG9yZGVyIChzdWl0YWJsZSBmb3IKKyAqIHVzZSBpbiBzeXN0ZW0gY2FsbHMpLgorICovCitzdHJ1Y3QgaG9zdGVudCB7CisJY2hhcgkqaF9uYW1lOwkvKiBvZmZpY2lhbCBuYW1lIG9mIGhvc3QgKi8KKwljaGFyCSoqaF9hbGlhc2VzOwkvKiBhbGlhcyBsaXN0ICovCisJaW50CWhfYWRkcnR5cGU7CS8qIGhvc3QgYWRkcmVzcyB0eXBlICovCisJaW50CWhfbGVuZ3RoOwkvKiBsZW5ndGggb2YgYWRkcmVzcyAqLworCWNoYXIJKipoX2FkZHJfbGlzdDsJLyogbGlzdCBvZiBhZGRyZXNzZXMgZnJvbSBuYW1lIHNlcnZlciAqLworI2RlZmluZQloX2FkZHIJaF9hZGRyX2xpc3RbMF0JLyogYWRkcmVzcywgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KK307CisKK3N0cnVjdCBuZXRlbnQgeworCWNoYXIJCSpuX25hbWU7CS8qIG9mZmljaWFsIG5hbWUgb2YgbmV0ICovCisJY2hhcgkJKipuX2FsaWFzZXM7CS8qIGFsaWFzIGxpc3QgKi8KKwlpbnQJCW5fYWRkcnR5cGU7CS8qIG5ldCBhZGRyZXNzIHR5cGUgKi8KKwl1aW50MzJfdAluX25ldDsJCS8qIG5ldHdvcmsgIyAqLworfTsKKworc3RydWN0IHNlcnZlbnQgeworCWNoYXIJKnNfbmFtZTsJLyogb2ZmaWNpYWwgc2VydmljZSBuYW1lICovCisJY2hhcgkqKnNfYWxpYXNlczsJLyogYWxpYXMgbGlzdCAqLworCWludAlzX3BvcnQ7CQkvKiBwb3J0ICMgKi8KKwljaGFyCSpzX3Byb3RvOwkvKiBwcm90b2NvbCB0byB1c2UgKi8KK307CisKK3N0cnVjdCBwcm90b2VudCB7CisJY2hhcgkqcF9uYW1lOwkvKiBvZmZpY2lhbCBwcm90b2NvbCBuYW1lICovCisJY2hhcgkqKnBfYWxpYXNlczsJLyogYWxpYXMgbGlzdCAqLworCWludAlwX3Byb3RvOwkvKiBwcm90b2NvbCAjICovCit9OworCitzdHJ1Y3QgYWRkcmluZm8geworCWludAlhaV9mbGFnczsJLyogQUlfUEFTU0lWRSwgQUlfQ0FOT05OQU1FLCBBSV9OVU1FUklDSE9TVCAqLworCWludAlhaV9mYW1pbHk7CS8qIFBGX3h4eCAqLworCWludAlhaV9zb2NrdHlwZTsJLyogU09DS194eHggKi8KKwlpbnQJYWlfcHJvdG9jb2w7CS8qIDAgb3IgSVBQUk9UT194eHggZm9yIElQdjQgYW5kIElQdjYgKi8KKwlzb2NrbGVuX3QgYWlfYWRkcmxlbjsJLyogbGVuZ3RoIG9mIGFpX2FkZHIgKi8KKwljaGFyCSphaV9jYW5vbm5hbWU7CS8qIGNhbm9uaWNhbCBuYW1lIGZvciBob3N0bmFtZSAqLworCXN0cnVjdAlzb2NrYWRkciAqYWlfYWRkcjsJLyogYmluYXJ5IGFkZHJlc3MgKi8KKwlzdHJ1Y3QJYWRkcmluZm8gKmFpX25leHQ7CS8qIG5leHQgc3RydWN0dXJlIGluIGxpbmtlZCBsaXN0ICovCit9OworCisvKgorICogRXJyb3IgcmV0dXJuIGNvZGVzIGZyb20gZ2V0aG9zdGJ5bmFtZSgpIGFuZCBnZXRob3N0YnlhZGRyKCkKKyAqIChsZWZ0IGluIGhfZXJybm8pLgorICovCisKKyNkZWZpbmUJTkVUREJfSU5URVJOQUwJLTEJLyogc2VlIGVycm5vICovCisjZGVmaW5lCU5FVERCX1NVQ0NFU1MJMAkvKiBubyBwcm9ibGVtICovCisjZGVmaW5lCUhPU1RfTk9UX0ZPVU5ECTEgLyogQXV0aG9yaXRhdGl2ZSBBbnN3ZXIgSG9zdCBub3QgZm91bmQgKi8KKyNkZWZpbmUJVFJZX0FHQUlOCTIgLyogTm9uLUF1dGhvcml0YXRpdmUgSG9zdCBub3QgZm91bmQsIG9yIFNFUlZFUkZBSUwgKi8KKyNkZWZpbmUJTk9fUkVDT1ZFUlkJMyAvKiBOb24gcmVjb3ZlcmFibGUgZXJyb3JzLCBGT1JNRVJSLCBSRUZVU0VELCBOT1RJTVAgKi8KKyNkZWZpbmUJTk9fREFUQQkJNCAvKiBWYWxpZCBuYW1lLCBubyBkYXRhIHJlY29yZCBvZiByZXF1ZXN0ZWQgdHlwZSAqLworI2RlZmluZQlOT19BRERSRVNTCU5PX0RBVEEJCS8qIG5vIGFkZHJlc3MsIGxvb2sgZm9yIE1YIHJlY29yZCAqLworCisvKgorICogRXJyb3IgcmV0dXJuIGNvZGVzIGZyb20gZ2V0YWRkcmluZm8oKQorICovCisjaWYgMAorLyogb2Jzb2xldGVkICovCisjZGVmaW5lCUVBSV9BRERSRkFNSUxZCSAxCS8qIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0bmFtZSBub3Qgc3VwcG9ydGVkICovCisjZW5kaWYKKyNkZWZpbmUJRUFJX0FHQUlOCSAyCS8qIHRlbXBvcmFyeSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiAqLworI2RlZmluZQlFQUlfQkFERkxBR1MJIDMJLyogaW52YWxpZCB2YWx1ZSBmb3IgYWlfZmxhZ3MgKi8KKyNkZWZpbmUJRUFJX0ZBSUwJIDQJLyogbm9uLXJlY292ZXJhYmxlIGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uICovCisjZGVmaW5lCUVBSV9GQU1JTFkJIDUJLyogYWlfZmFtaWx5IG5vdCBzdXBwb3J0ZWQgKi8KKyNkZWZpbmUJRUFJX01FTU9SWQkgNgkvKiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlICovCisjZGVmaW5lCUVBSV9OT0RBVEEJIDcJLyogbm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggaG9zdG5hbWUgKi8KKyNkZWZpbmUJRUFJX05PTkFNRQkgOAkvKiBob3N0bmFtZSBub3Igc2Vydm5hbWUgcHJvdmlkZWQsIG9yIG5vdCBrbm93biAqLworI2RlZmluZQlFQUlfU0VSVklDRQkgOQkvKiBzZXJ2bmFtZSBub3Qgc3VwcG9ydGVkIGZvciBhaV9zb2NrdHlwZSAqLworI2RlZmluZQlFQUlfU09DS1RZUEUJMTAJLyogYWlfc29ja3R5cGUgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZQlFQUlfU1lTVEVNCTExCS8qIHN5c3RlbSBlcnJvciByZXR1cm5lZCBpbiBlcnJubyAqLworI2RlZmluZQlFQUlfQkFESElOVFMJMTIKKyNkZWZpbmUJRUFJX1BST1RPQ09MCTEzCisjZGVmaW5lCUVBSV9NQVgJCTE0CisKKy8qCisgKiBGbGFnIHZhbHVlcyBmb3IgZ2V0YWRkcmluZm8oKQorICovCisjZGVmaW5lCUFJX1BBU1NJVkUJMHgwMDAwMDAwMSAvKiBnZXQgYWRkcmVzcyB0byB1c2UgYmluZCgpICovCisjZGVmaW5lCUFJX0NBTk9OTkFNRQkweDAwMDAwMDAyIC8qIGZpbGwgYWlfY2Fub25uYW1lICovCisjZGVmaW5lCUFJX05VTUVSSUNIT1NUCTB4MDAwMDAwMDQgLyogcHJldmVudCBob3N0IG5hbWUgcmVzb2x1dGlvbiAqLworI2RlZmluZQlBSV9OVU1FUklDU0VSVgkweDAwMDAwMDA4IC8qIHByZXZlbnQgc2VydmljZSBuYW1lIHJlc29sdXRpb24gKi8KKy8qIHZhbGlkIGZsYWdzIGZvciBhZGRyaW5mbyAobm90IGEgc3RhbmRhcmQgZGVmLCBhcHBzIHNob3VsZCBub3QgdXNlIGl0KSAqLworI2RlZmluZSBBSV9NQVNLIFwKKyAgICAoQUlfUEFTU0lWRSB8IEFJX0NBTk9OTkFNRSB8IEFJX05VTUVSSUNIT1NUIHwgQUlfTlVNRVJJQ1NFUlYgfCBcCisgICAgQUlfQUREUkNPTkZJRykKKworI2RlZmluZQlBSV9BTEwJCTB4MDAwMDAxMDAgLyogSVB2NiBhbmQgSVB2NC1tYXBwZWQgKHdpdGggQUlfVjRNQVBQRUQpICovCisjZGVmaW5lCUFJX1Y0TUFQUEVEX0NGRwkweDAwMDAwMjAwIC8qIGFjY2VwdCBJUHY0LW1hcHBlZCBpZiBrZXJuZWwgc3VwcG9ydHMgKi8KKyNkZWZpbmUJQUlfQUREUkNPTkZJRwkweDAwMDAwNDAwIC8qIG9ubHkgaWYgYW55IGFkZHJlc3MgaXMgYXNzaWduZWQgKi8KKyNkZWZpbmUJQUlfVjRNQVBQRUQJMHgwMDAwMDgwMCAvKiBhY2NlcHQgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzICovCisvKiBzcGVjaWFsIHJlY29tbWVuZGVkIGZsYWdzIGZvciBnZXRpcG5vZGVieW5hbWUgKi8KKyNkZWZpbmUJQUlfREVGQVVMVAkoQUlfVjRNQVBQRURfQ0ZHIHwgQUlfQUREUkNPTkZJRykKKworLyoKKyAqIENvbnN0YW50cyBmb3IgZ2V0bmFtZWluZm8oKQorICovCisjZGVmaW5lCU5JX01BWEhPU1QJMTAyNQorI2RlZmluZQlOSV9NQVhTRVJWCTMyCisKKy8qCisgKiBGbGFnIHZhbHVlcyBmb3IgZ2V0bmFtZWluZm8oKQorICovCisjZGVmaW5lCU5JX05PRlFETgkweDAwMDAwMDAxCisjZGVmaW5lCU5JX05VTUVSSUNIT1NUCTB4MDAwMDAwMDIKKyNkZWZpbmUJTklfTkFNRVJFUUQJMHgwMDAwMDAwNAorI2RlZmluZQlOSV9OVU1FUklDU0VSVgkweDAwMDAwMDA4CisjZGVmaW5lCU5JX0RHUkFNCTB4MDAwMDAwMTAKKyNpZiAwIC8qIG9ic29sZXRlICovCisjZGVmaW5lIE5JX1dJVEhTQ09QRUlECTB4MDAwMDAwMjAKKyNlbmRpZgorCisvKgorICogU2NvcGUgZGVsaW1pdCBjaGFyYWN0ZXIKKyAqLworI2RlZmluZQlTQ09QRV9ERUxJTUlURVIJJyUnCisKK19fQkVHSU5fREVDTFMKK3ZvaWQgZW5kaG9zdGVudCh2b2lkKTsKK3ZvaWQgZW5kbmV0ZW50KHZvaWQpOwordm9pZCBlbmRuZXRncmVudCh2b2lkKTsKK3ZvaWQgZW5kcHJvdG9lbnQodm9pZCk7Cit2b2lkIGVuZHNlcnZlbnQodm9pZCk7Cit2b2lkIGZyZWVob3N0ZW50KHN0cnVjdCBob3N0ZW50ICopOworc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieWFkZHIoY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitpbnQgZ2V0aG9zdGJ5YWRkcl9yKGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgaG9zdGVudCAqKiwgaW50ICopOworc3RydWN0IGhvc3RlbnQJKmdldGhvc3RieW5hbWUoY29uc3QgY2hhciAqKTsKK2ludCBnZXRob3N0YnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgaG9zdGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IGhvc3RlbnQgKiosIGludCAqKTsKK3N0cnVjdCBob3N0ZW50CSpnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICosIGludCk7CitpbnQgZ2V0aG9zdGJ5bmFtZTJfcihjb25zdCBjaGFyICosIGludCwgc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgaG9zdGVudAkqZ2V0aG9zdGVudCh2b2lkKTsKK2ludCBnZXRob3N0ZW50X3Ioc3RydWN0IGhvc3RlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBob3N0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgaG9zdGVudAkqZ2V0aXBub2RlYnlhZGRyKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGludCAqKTsKK3N0cnVjdCBob3N0ZW50CSpnZXRpcG5vZGVieW5hbWUoY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50ICopOworc3RydWN0IG5ldGVudAkqZ2V0bmV0YnlhZGRyKHVpbnQzMl90LCBpbnQpOworaW50IGdldG5ldGJ5YWRkcl9yKHVpbnQzMl90LCBpbnQsIHN0cnVjdCBuZXRlbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBuZXRlbnQqKiwgaW50ICopOworc3RydWN0IG5ldGVudAkqZ2V0bmV0YnluYW1lKGNvbnN0IGNoYXIgKik7CitpbnQgZ2V0bmV0YnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgbmV0ZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgbmV0ZW50ICoqLCBpbnQgKik7CitzdHJ1Y3QgbmV0ZW50CSpnZXRuZXRlbnQodm9pZCk7CitpbnQgZ2V0bmV0ZW50X3Ioc3RydWN0IG5ldGVudCAqLCBjaGFyICosIHNpemVfdCwgc3RydWN0IG5ldGVudCAqKiwgaW50ICopOworaW50IGdldG5ldGdyZW50KGNoYXIgKiosIGNoYXIgKiosIGNoYXIgKiopOworc3RydWN0IHByb3RvZW50CSpnZXRwcm90b2J5bmFtZShjb25zdCBjaGFyICopOworaW50IGdldHByb3RvYnluYW1lX3IoY29uc3QgY2hhciAqLCBzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBwcm90b2VudCAqKik7CitzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvYnludW1iZXIoaW50KTsKK2ludCBnZXRwcm90b2J5bnVtYmVyX3IoaW50LCBzdHJ1Y3QgcHJvdG9lbnQgKiwgY2hhciAqLCBzaXplX3QsIHN0cnVjdCBwcm90b2VudCAqKik7CitzdHJ1Y3QgcHJvdG9lbnQJKmdldHByb3RvZW50KHZvaWQpOworaW50IGdldHByb3RvZW50X3Ioc3RydWN0IHByb3RvZW50ICosIGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3QgcHJvdG9lbnQgKiopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZieW5hbWUoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZieXBvcnQoaW50LCBjb25zdCBjaGFyICopOworc3RydWN0IHNlcnZlbnQJKmdldHNlcnZlbnQodm9pZCk7Cit2b2lkIGhlcnJvcihjb25zdCBjaGFyICopOworY29uc3QgY2hhcgkqaHN0cmVycm9yKGludCk7CitpbnQgaW5uZXRncihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwordm9pZCBzZXRob3N0ZW50KGludCk7Cit2b2lkIHNldG5ldGVudChpbnQpOwordm9pZCBzZXRwcm90b2VudChpbnQpOworaW50IGdldGFkZHJpbmZvKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgc3RydWN0IGFkZHJpbmZvICoqKTsKK2ludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90LCBjaGFyICosIHNpemVfdCwgY2hhciAqLCBzaXplX3QsIGludCk7Cit2b2lkIGZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKik7Citjb25zdCBjaGFyCSpnYWlfc3RyZXJyb3IoaW50KTsKK3ZvaWQgc2V0bmV0Z3JlbnQoY29uc3QgY2hhciAqKTsKK3ZvaWQgc2V0c2VydmVudChpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9ORVREQl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvZXRoZXIuaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFjOWNiYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2V0aGVyLmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPG5ldC9pZl9ldGhlci5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaWZfZXRoZXIuaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzAwYjlkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lmX2V0aGVyLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L2lmX2V0aGVyLmg+CisjaW5jbHVkZSA8bGludXgvaWZfYXJwLmg+CisjaWZuZGVmIEVUSEVSX0FERFJfTEVOCisjZGVmaW5lIEVUSEVSX0FERFJfTEVOIEVUSF9BTEVOCisjaW5jbHVkZSA8bmV0L2V0aGVydHlwZXMuaD4KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaW4uaCBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGJmZmJlZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9JTl9IXworI2RlZmluZSBfTkVUSU5FVF9JTl9IXworCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+CisjaW5jbHVkZSA8bGludXgvaW4uaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIElQUE9SVF9SRVNFUlZFRCAgMTAyNAorCitleHRlcm4gaW50IGJpbmRyZXN2cG9ydCAoaW50IHNkLCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKnNpbik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfTkVUSU5FVF9JTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvaW42LmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMzBlNzE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvaW42LmgKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9JTjZfSAorI2RlZmluZSBfTkVUSU5FVF9JTjZfSAorCisjaW5jbHVkZSA8bGludXgvaW42Lmg+CisKKyNkZWZpbmUgSU42X0lTX0FERFJfVU5TUEVDSUZJRUQoYSkJXAorCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzRdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls4XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMTJdKSA9PSAwKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9WNENPTVBBVChhKQkJXAorCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzRdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls4XSkgPT0gMCkgJiYJXAorCSAoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMTJdKSAhPSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkclsxMl0pICE9IG50b2hsKDEpKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9WNE1BUFBFRChhKQkJICAgICAgXAorCSgoKihjb25zdCB1aW50MzJfdCAqKShjb25zdCB2b2lkICopKCYoYSktPnM2X2FkZHJbMF0pID09IDApICYmCVwKKwkgKCooY29uc3QgdWludDMyX3QgKikoY29uc3Qgdm9pZCAqKSgmKGEpLT5zNl9hZGRyWzRdKSA9PSAwKSAmJglcCisJICgqKGNvbnN0IHVpbnQzMl90ICopKGNvbnN0IHZvaWQgKikoJihhKS0+czZfYWRkcls4XSkgPT0gbnRvaGwoMHgwMDAwZmZmZikpKQorCisjZGVmaW5lIElONl9JU19BRERSX0xJTktMT0NBTChhKQlcCisJKCgoYSktPnM2X2FkZHJbMF0gPT0gMHhmZSkgJiYgKCgoYSktPnM2X2FkZHJbMV0gJiAweGMwKSA9PSAweDgwKSkKKworI2RlZmluZSBJTjZfSVNfQUREUl9TSVRFTE9DQUwoYSkJXAorCSgoKGEpLT5zNl9hZGRyWzBdID09IDB4ZmUpICYmICgoKGEpLT5zNl9hZGRyWzFdICYgMHhjMCkgPT0gMHhjMCkpCisKKyNkZWZpbmUgSU42X0lTX0FERFJfTVVMVElDQVNUKGEpIFwKKyAgICAoKChfX2NvbnN0IHVpbnQ4X3QgKikgKGEpKVswXSA9PSAweGZmKQorCisjZGVmaW5lIElONl9BUkVfQUREUl9FUVVBTChhLCBiKQkJCVwKKyAgICAobWVtY21wKCYoYSktPnM2X2FkZHJbMF0sICYoYiktPnM2X2FkZHJbMF0sIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSA9PSAwKQorCisjZW5kaWYgLyogX05FVElORVRfSU42X0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2luX3N5c3RtLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbl9zeXN0bS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmNTNmYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pbl9zeXN0bS5oCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSROZXRCU0Q6IGluX3N5c3RtLmgsdiAxLjEzIDIwMDUvMTIvMTAgMjM6MzY6MjMgZWxhZCBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWluX3N5c3RtLmgJOC4xIChCZXJrZWxleSkgNi8xMC85MworICovCisKKyNpZm5kZWYgX05FVElORVRfSU5fU1lTVE1fSF8KKyNkZWZpbmUgX05FVElORVRfSU5fU1lTVE1fSF8KKworLyoKKyAqIE1pc2NlbGxhbmVvdXMgaW50ZXJuZXR3b3JrCisgKiBkZWZpbml0aW9ucyBmb3Iga2VybmVsLgorICovCisKKy8qCisgKiBOZXR3b3JrIHR5cGVzLgorICoKKyAqIEludGVybmFsbHkgdGhlIHN5c3RlbSBrZWVwcyBjb3VudGVycyBpbiB0aGUgaGVhZGVycyB3aXRoIHRoZSBieXRlcworICogc3dhcHBlZCBzbyB0aGF0IFZBWCBpbnN0cnVjdGlvbnMgd2lsbCB3b3JrIG9uIHRoZW0uICBJdCByZXZlcnNlcworICogdGhlIGJ5dGVzIGJlZm9yZSB0cmFuc21pc3Npb24gYXQgZWFjaCBwcm90b2NvbCBsZXZlbC4gIFRoZSBuXyB0eXBlcworICogcmVwcmVzZW50IHRoZSB0eXBlcyB3aXRoIHRoZSBieXRlcyBpbiBgYGhpZ2gtZW5kZXInJyBvcmRlci4KKyAqLwordHlwZWRlZiB1X2ludDE2X3Qgbl9zaG9ydDsJCS8qIHNob3J0IGFzIHJlY2VpdmVkIGZyb20gdGhlIG5ldCAqLwordHlwZWRlZiB1X2ludDMyX3Qgbl9sb25nOwkJLyogbG9uZyBhcyByZWNlaXZlZCBmcm9tIHRoZSBuZXQgKi8KKwordHlwZWRlZiB1X2ludDMyX3Qgbl90aW1lOwkJLyogbXMgc2luY2UgMDA6MDAgR01ULCBieXRlIHJldiAqLworCisjaWZkZWYgX0tFUk5FTAorbl90aW1lCSBpcHRpbWUgKHZvaWQpOworI2VuZGlmCisKKyNlbmRpZiAvKiAhX05FVElORVRfSU5fU1lTVE1fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTkwNWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcC5oCkBAIC0wLDAgKzEsMjc1IEBACisvKgkkT3BlbkJTRDogaXAuaCx2IDEuMTIgMjAwNi8wNC8yNyAwMjoxOTozMiB0ZWR1IEV4cCAkCSovCisvKgkkTmV0QlNEOiBpcC5oLHYgMS45IDE5OTUvMDUvMTUgMDE6MjI6NDQgY2dkIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODIsIDE5ODYsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpaXAuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9JUF9IXworI2RlZmluZSBfTkVUSU5FVF9JUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8ZW5kaWFuLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW5fc3lzdG0uaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogRGVmaW5pdGlvbnMgZm9yIGludGVybmV0IHByb3RvY29sIHZlcnNpb24gNC4KKyAqIFBlciBSRkMgNzkxLCBTZXB0ZW1iZXIgMTk4MS4KKyAqLworI2RlZmluZQlJUFZFUlNJT04JNAorCisvKgorICogU3RydWN0dXJlIG9mIGFuIGludGVybmV0IGhlYWRlciwgbmFrZWQgb2Ygb3B0aW9ucy4KKyAqLworc3RydWN0IGlwIHsKKyNpZiBCWVRFX09SREVSID09IExJVFRMRV9FTkRJQU4KKwl1X2ludDMyX3QgaXBfaGw6NCwJCS8qIGhlYWRlciBsZW5ndGggKi8KKwkJICBpcF92OjQ7CQkvKiB2ZXJzaW9uICovCisjZW5kaWYKKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKwl1X2ludDMyX3QgaXBfdjo0LAkJLyogdmVyc2lvbiAqLworCQkgIGlwX2hsOjQ7CQkvKiBoZWFkZXIgbGVuZ3RoICovCisjZW5kaWYKKwl1X2ludDhfdCAgaXBfdG9zOwkJLyogdHlwZSBvZiBzZXJ2aWNlICovCisJdV9pbnQxNl90IGlwX2xlbjsJCS8qIHRvdGFsIGxlbmd0aCAqLworCXVfaW50MTZfdCBpcF9pZDsJCS8qIGlkZW50aWZpY2F0aW9uICovCisJdV9pbnQxNl90IGlwX29mZjsJCS8qIGZyYWdtZW50IG9mZnNldCBmaWVsZCAqLworI2RlZmluZQlJUF9SRiAweDgwMDAJCQkvKiByZXNlcnZlZCBmcmFnbWVudCBmbGFnICovCisjZGVmaW5lCUlQX0RGIDB4NDAwMAkJCS8qIGRvbnQgZnJhZ21lbnQgZmxhZyAqLworI2RlZmluZQlJUF9NRiAweDIwMDAJCQkvKiBtb3JlIGZyYWdtZW50cyBmbGFnICovCisjZGVmaW5lCUlQX09GRk1BU0sgMHgxZmZmCQkvKiBtYXNrIGZvciBmcmFnbWVudGluZyBiaXRzICovCisJdV9pbnQ4X3QgIGlwX3R0bDsJCS8qIHRpbWUgdG8gbGl2ZSAqLworCXVfaW50OF90ICBpcF9wOwkJCS8qIHByb3RvY29sICovCisJdV9pbnQxNl90IGlwX3N1bTsJCS8qIGNoZWNrc3VtICovCisJc3RydWN0CSAgaW5fYWRkciBpcF9zcmMsIGlwX2RzdDsgLyogc291cmNlIGFuZCBkZXN0IGFkZHJlc3MgKi8KK307CisKKyNkZWZpbmUJSVBfTUFYUEFDS0VUCTY1NTM1CQkvKiBtYXhpbXVtIHBhY2tldCBzaXplICovCisKKy8qCisgKiBEZWZpbml0aW9ucyBmb3IgSVAgdHlwZSBvZiBzZXJ2aWNlIChpcF90b3MpCisgKi8KKyNkZWZpbmUJSVBUT1NfTE9XREVMQVkJCTB4MTAKKyNkZWZpbmUJSVBUT1NfVEhST1VHSFBVVAkweDA4CisjZGVmaW5lCUlQVE9TX1JFTElBQklMSVRZCTB4MDQKKy8qCUlQVE9TX0xPV0NPU1QJCTB4MDIgWFhYICovCisjaWYgMQorLyogRUNOIFJGQzMxNjggb2Jzb2xldGVzIFJGQzI0ODEsIGFuZCB0aGVzZSB3aWxsIGJlIGRlcHJlY2F0ZWQgc29vbi4gKi8KKyNkZWZpbmUgSVBUT1NfQ0UJCTB4MDEJLyogY29uZ2VzdGlvbiBleHBlcmllbmNlZCAqLworI2RlZmluZSBJUFRPU19FQ1QJCTB4MDIJLyogRUNOLWNhcGFibGUgdHJhbnNwb3J0ICovCisjZW5kaWYKKworLyoKKyAqIERlZmluaXRpb25zIGZvciBJUCBwcmVjZWRlbmNlIChhbHNvIGluIGlwX3RvcykgKGhvcGVmdWxseSB1bnVzZWQpCisgKi8KKyNkZWZpbmUJSVBUT1NfUFJFQ19ORVRDT05UUk9MCQkweGUwCisjZGVmaW5lCUlQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MCTB4YzAKKyNkZWZpbmUJSVBUT1NfUFJFQ19DUklUSUNfRUNQCQkweGEwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0hPVkVSUklERQkweDgwCisjZGVmaW5lCUlQVE9TX1BSRUNfRkxBU0gJCTB4NjAKKyNkZWZpbmUJSVBUT1NfUFJFQ19JTU1FRElBVEUJCTB4NDAKKyNkZWZpbmUJSVBUT1NfUFJFQ19QUklPUklUWQkJMHgyMAorI2RlZmluZQlJUFRPU19QUkVDX1JPVVRJTkUJCTB4MDAKKworLyoKKyAqIEVDTiAoRXhwbGljaXQgQ29uZ2VzdGlvbiBOb3RpZmljYXRpb24pIGNvZGVwb2ludHMgaW4gUkZDMzE2OAorICogbWFwcGVkIHRvIHRoZSBsb3dlciAyIGJpdHMgb2YgdGhlIFRPUyBmaWVsZC4KKyAqLworI2RlZmluZQlJUFRPU19FQ05fTk9URUNUCTB4MDAJLyogbm90LUVDVCAqLworI2RlZmluZQlJUFRPU19FQ05fRUNUMQkJMHgwMQkvKiBFQ04tY2FwYWJsZSB0cmFuc3BvcnQgKDEpICovCisjZGVmaW5lCUlQVE9TX0VDTl9FQ1QwCQkweDAyCS8qIEVDTi1jYXBhYmxlIHRyYW5zcG9ydCAoMCkgKi8KKyNkZWZpbmUJSVBUT1NfRUNOX0NFCQkweDAzCS8qIGNvbmdlc3Rpb24gZXhwZXJpZW5jZWQgKi8KKyNkZWZpbmUJSVBUT1NfRUNOX01BU0sJCTB4MDMJLyogRUNOIGZpZWxkIG1hc2sgKi8KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBvcHRpb25zLgorICovCisjZGVmaW5lCUlQT1BUX0NPUElFRChvKQkJKChvKSYweDgwKQorI2RlZmluZQlJUE9QVF9DTEFTUyhvKQkJKChvKSYweDYwKQorI2RlZmluZQlJUE9QVF9OVU1CRVIobykJCSgobykmMHgxZikKKworI2RlZmluZQlJUE9QVF9DT05UUk9MCQkweDAwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMQkJMHgyMAorI2RlZmluZQlJUE9QVF9ERUJNRUFTCQkweDQwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMgkJMHg2MAorCisjZGVmaW5lCUlQT1BUX0VPTAkJMAkJLyogZW5kIG9mIG9wdGlvbiBsaXN0ICovCisjZGVmaW5lCUlQT1BUX05PUAkJMQkJLyogbm8gb3BlcmF0aW9uICovCisKKyNkZWZpbmUJSVBPUFRfUlIJCTcJCS8qIHJlY29yZCBwYWNrZXQgcm91dGUgKi8KKyNkZWZpbmUJSVBPUFRfVFMJCTY4CQkvKiB0aW1lc3RhbXAgKi8KKyNkZWZpbmUJSVBPUFRfU0VDVVJJVFkJCTEzMAkJLyogcHJvdmlkZSBzLGMsaCx0Y2MgKi8KKyNkZWZpbmUJSVBPUFRfTFNSUgkJMTMxCQkvKiBsb29zZSBzb3VyY2Ugcm91dGUgKi8KKyNkZWZpbmUJSVBPUFRfU0FUSUQJCTEzNgkJLyogc2F0bmV0IGlkICovCisjZGVmaW5lCUlQT1BUX1NTUlIJCTEzNwkJLyogc3RyaWN0IHNvdXJjZSByb3V0ZSAqLworCisvKgorICogT2Zmc2V0cyB0byBmaWVsZHMgaW4gb3B0aW9ucyBvdGhlciB0aGFuIEVPTCBhbmQgTk9QLgorICovCisjZGVmaW5lCUlQT1BUX09QVFZBTAkJMAkJLyogb3B0aW9uIElEICovCisjZGVmaW5lCUlQT1BUX09MRU4JCTEJCS8qIG9wdGlvbiBsZW5ndGggKi8KKyNkZWZpbmUJSVBPUFRfT0ZGU0VUCQkyCQkvKiBvZmZzZXQgd2l0aGluIG9wdGlvbiAqLworI2RlZmluZQlJUE9QVF9NSU5PRkYJCTQJCS8qIG1pbiB2YWx1ZSBvZiBhYm92ZSAqLworCisvKgorICogVGltZSBzdGFtcCBvcHRpb24gc3RydWN0dXJlLgorICovCitzdHJ1Y3QJaXBfdGltZXN0YW1wIHsKKwl1X2ludDhfdCBpcHRfY29kZTsJCS8qIElQT1BUX1RTICovCisJdV9pbnQ4X3QgaXB0X2xlbjsJCS8qIHNpemUgb2Ygc3RydWN0dXJlICh2YXJpYWJsZSkgKi8KKwl1X2ludDhfdCBpcHRfcHRyOwkJLyogaW5kZXggb2YgY3VycmVudCBlbnRyeSAqLworI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisJdV9pbnQzMl90IGlwdF9mbGc6NCwJCS8qIGZsYWdzLCBzZWUgYmVsb3cgKi8KKwkJICBpcHRfb2Zsdzo0OwkJLyogb3ZlcmZsb3cgY291bnRlciAqLworI2VuZGlmCisjaWYgX0JZVEVfT1JERVIgPT0gX0JJR19FTkRJQU4KKwl1X2ludDMyX3QgaXB0X29mbHc6NCwJCS8qIG92ZXJmbG93IGNvdW50ZXIgKi8KKwkJICBpcHRfZmxnOjQ7CQkvKiBmbGFncywgc2VlIGJlbG93ICovCisjZW5kaWYKKwl1bmlvbiBpcHRfdGltZXN0YW1wIHsKKwluX3RpbWUJaXB0X3RpbWVbMV07CisJc3RydWN0CWlwdF90YSB7CisJCXN0cnVjdCBpbl9hZGRyIGlwdF9hZGRyOworCQluX3RpbWUgaXB0X3RpbWU7CisJfSBpcHRfdGFbMV07CisJfSBpcHRfdGltZXN0YW1wOworfTsKKworLyogZmxhZyBiaXRzIGZvciBpcHRfZmxnICovCisjZGVmaW5lCUlQT1BUX1RTX1RTT05MWQkJMAkJLyogdGltZXN0YW1wcyBvbmx5ICovCisjZGVmaW5lCUlQT1BUX1RTX1RTQU5EQUREUgkxCQkvKiB0aW1lc3RhbXBzIGFuZCBhZGRyZXNzZXMgKi8KKyNkZWZpbmUJSVBPUFRfVFNfUFJFU1BFQwkzCQkvKiBzcGVjaWZpZWQgbW9kdWxlcyBvbmx5ICovCisKKy8qIGJpdHMgZm9yIHNlY3VyaXR5IChub3QgYnl0ZSBzd2FwcGVkKSAqLworI2RlZmluZQlJUE9QVF9TRUNVUl9VTkNMQVNTCTB4MDAwMAorI2RlZmluZQlJUE9QVF9TRUNVUl9DT05GSUQJMHhmMTM1CisjZGVmaW5lCUlQT1BUX1NFQ1VSX0VGVE8JMHg3ODlhCisjZGVmaW5lCUlQT1BUX1NFQ1VSX01NTU0JMHhiYzRkCisjZGVmaW5lCUlQT1BUX1NFQ1VSX1JFU1RSCTB4YWYxMworI2RlZmluZQlJUE9QVF9TRUNVUl9TRUNSRVQJMHhkNzg4CisjZGVmaW5lCUlQT1BUX1NFQ1VSX1RPUFNFQ1JFVAkweDZiYzUKKworLyoKKyAqIEludGVybmV0IGltcGxlbWVudGF0aW9uIHBhcmFtZXRlcnMuCisgKi8KKyNkZWZpbmUJTUFYVFRMCQkyNTUJCS8qIG1heGltdW0gdGltZSB0byBsaXZlIChzZWNvbmRzKSAqLworI2RlZmluZQlJUERFRlRUTAk2NAkJLyogZGVmYXVsdCB0dGwsIGZyb20gUkZDIDEzNDAgKi8KKyNkZWZpbmUJSVBGUkFHVFRMCTYwCQkvKiB0aW1lIHRvIGxpdmUgZm9yIGZyYWdzLCBzbG93aHogKi8KKyNkZWZpbmUJSVBUVExERUMJMQkJLyogc3VidHJhY3RlZCB3aGVuIGZvcndhcmRpbmcgKi8KKworI2RlZmluZQlJUF9NU1MJCTU3NgkJLyogZGVmYXVsdCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLworCisvKgorICogVGhpcyBpcyB0aGUgcmVhbCBJUHY0IHBzZXVkbyBoZWFkZXIsIHVzZWQgZm9yIGNvbXB1dGluZyB0aGUgVENQIGFuZCBVRFAKKyAqIGNoZWNrc3Vtcy4gRm9yIHRoZSBJbnRlcm5ldCBjaGVja3N1bSwgc3RydWN0IGlwb3ZseSBjYW4gYmUgdXNlZCBpbnN0ZWFkLgorICogRm9yIHN0cm9uZ2VyIGNoZWNrc3VtcywgdGhlIHJlYWwgdGhpbmcgbXVzdCBiZSB1c2VkLgorICovCitzdHJ1Y3QgaXBwc2V1ZG8geworCXN0cnVjdCAgICBpbl9hZGRyIGlwcHNldWRvX3NyYzsJLyogc291cmNlIGludGVybmV0IGFkZHJlc3MgKi8KKwlzdHJ1Y3QgICAgaW5fYWRkciBpcHBzZXVkb19kc3Q7CS8qIGRlc3RpbmF0aW9uIGludGVybmV0IGFkZHJlc3MgKi8KKwl1X2ludDhfdCAgaXBwc2V1ZG9fcGFkOwkJLyogcGFkLCBtdXN0IGJlIHplcm8gKi8KKwl1X2ludDhfdCAgaXBwc2V1ZG9fcDsJCS8qIHByb3RvY29sICovCisJdV9pbnQxNl90IGlwcHNldWRvX2xlbjsJCS8qIHByb3RvY29sIGxlbmd0aCAqLworfTsKKworLyogQklPTklDIGFkZGl0aW9uOiBkZWNsYXJhdGlvbnMgbWF0Y2hpbmcgdGhlIExpbnV4IGtlcm5lbCAqLworLyogICAgICAgICAgICAgICAgICBzb21lIHByb2dyYW1zIGV4cGVjdCB0aGVzZS4uLiAgICAgICAgICAqLworCisjZGVmaW5lIElQT1BUX09QVFZBTCAwCisjZGVmaW5lIElQT1BUX09MRU4gICAxCisjZGVmaW5lIElQT1BUX09GRlNFVCAyCisjZGVmaW5lIElQT1BUX01JTk9GRiA0CisjZGVmaW5lIE1BWF9JUE9QVExFTiA0MAorCisjZGVmaW5lIElQT1BUX0NPUFkJCTB4ODAKKyNkZWZpbmUgSVBPUFRfQ0xBU1NfTUFTSwkweDYwCisjZGVmaW5lIElQT1BUX05VTUJFUl9NQVNLCTB4MWYKKworI2RlZmluZQlJUE9QVF9DT05UUk9MCQkweDAwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMQkJMHgyMAorI2RlZmluZQlJUE9QVF9NRUFTVVJFTUVOVAkweDQwCisjZGVmaW5lCUlQT1BUX1JFU0VSVkVEMgkJMHg2MAorCisjZGVmaW5lIElQT1BUX0VORAkoMCB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfTk9PUAkoMSB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfU0VDCSgyIHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1RJTUVTVEFNUAkoNCB8SVBPUFRfTUVBU1VSRU1FTlQpCisjZGVmaW5lIElQT1BUX1NJRAkoOCB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9SQQkoMjB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorCitzdHJ1Y3QgaXBoZHIgeworI2lmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorCXVpbnQ4X3QgIGlobCAgICA6NCwKKwkJIHZlcnNpb246NDsKKyNlbGlmIGRlZmluZWQgKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKwl1aW50OF90ICB2ZXJzaW9uOjQsCisgIAkJIGlobCAgICA6NDsKKyNlbHNlCisjZXJyb3IJIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKwl1aW50OF90CSAgdG9zOworCXVpbnQxNl90ICB0b3RfbGVuOworCXVpbnQxNl90ICBpZDsKKwl1aW50MTZfdCAgZnJhZ19vZmY7CisJdWludDhfdCAgIHR0bDsKKwl1aW50OF90ICAgcHJvdG9jb2w7CisJdWludDE2X3QgIGNoZWNrOworCWludDMyX3QgICBzYWRkcjsKKwlpbnQzMl90ICAgZGFkZHI7Cit9OworCitzdHJ1Y3QgaXBfYXV0aF9oZHIgeworCXVpbnQ4X3QgIG5leHRoZHI7CisJdWludDhfdCAgaGRybGVuOworCXVpbnQxNl90IHJlc2VydmVkOworCXVpbnQzMl90IHNwaTsKKwl1aW50MzJfdCBzZXFfbm87CisJdWludDhfdCAgYXV0aF9kYXRhWzBdOworfTsKKworc3RydWN0IGlwX2VzcF9oZHIgeworCXVpbnQzMl90IHNwaTsKKwl1aW50MzJfdCBzZXFfbm87CisJdWludDhfdCAgZW5jX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaXBfY29tcF9oZHIgeworCXVpbnQ4X3QgIG5leHRoZHI7CisJdWludDhfdCAgZmxhZ3M7CisJdWludDE2X3QgY3BpOworfTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9ORVRJTkVUX0lQX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzUxMDU5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9uZXRpbmV0L2lwX2ljbXAuaApAQCAtMCwwICsxLDIxNCBAQAorLyoJJE9wZW5CU0Q6IGlwX2ljbXAuaCx2IDEuMjEgMjAwNS8wNy8zMSAwMzozMDo1NSBwYXNjb2UgRXhwICQJKi8KKy8qCSROZXRCU0Q6IGlwX2ljbXAuaCx2IDEuMTAgMTk5Ni8wMi8xMyAyMzo0MjoyOCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgyLCAxOTg2LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKWlwX2ljbXAuaAk4LjEgKEJlcmtlbGV5KSA2LzEwLzkzCisgKi8KKworI2lmbmRlZiBfTkVUSU5FVF9JUF9JQ01QX0hfCisjZGVmaW5lIF9ORVRJTkVUX0lQX0lDTVBfSF8KKworI2luY2x1ZGUgPG5ldGluZXQvaXAuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCisvKgorICogSW50ZXJmYWNlIENvbnRyb2wgTWVzc2FnZSBQcm90b2NvbCBEZWZpbml0aW9ucy4KKyAqIFBlciBSRkMgNzkyLCBTZXB0ZW1iZXIgMTk4MS4KKyAqIFJGQyA5NTAsIEF1Z3VzdCAxOTg1LiAoQWRkcmVzcyBNYXNrIFJlcXVlc3QgLyBSZXBseSkKKyAqIFJGQyAxMjU2LCBTZXB0ZW1iZXIgMTk5MS4gKFJvdXRlciBBZHZlcnRpc2VtZW50IGFuZCBTb2xpY2l0YXRpb24pCisgKiBSRkMgMTEwOCwgTm92ZW1iZXIgMTk5MS4gKFBhcmFtIFByb2JsZW0sIE1pc3NpbmcgUmVxLiBPcHRpb24pCisgKiBSRkMgMTM5MywgSmFudWFyeSAxOTkzLiAoVHJhY2Vyb3V0ZSkKKyAqIFJGQyAxNDc1LCBKdW5lIDE5OTMuIChEYXRhZ3JhbSBDb252ZXJzaW9uIEVycm9yKQorICogUkZDIDE4MTIsIEp1bmUgMTk5NS4gKGFkbSBwcm9oaWIsIGhvc3QgcHJlY2VkZW5jZSwgcHJlY2VkZW5jZSBjdXRvZmYpCisgKiBSRkMgMjAwMiwgT2N0b2JlciAxOTk2LiAoTW9iaWxpdHkgY2hhbmdlcyB0byBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCkKKyAqLworCisvKgorICogSUNNUCBSb3V0ZXIgQWR2ZXJ0aXNlbWVudCBkYXRhCisgKi8KK3N0cnVjdCBpY21wX3JhX2FkZHIgeworCXVpbnQzMl90ICBpcmFfYWRkcjsKKwl1aW50MzJfdCAgaXJhX3ByZWZlcmVuY2U7Cit9OworCisvKgorICogU3RydWN0dXJlIG9mIGFuIGljbXAgaGVhZGVyLgorICovCitzdHJ1Y3QgaWNtcCB7CisJdWludDhfdCAgaWNtcF90eXBlOwkJLyogdHlwZSBvZiBtZXNzYWdlLCBzZWUgYmVsb3cgKi8KKwl1aW50OF90ICBpY21wX2NvZGU7CQkvKiB0eXBlIHN1YiBjb2RlICovCisJdWludDE2X3QgaWNtcF9ja3N1bTsJCS8qIG9uZXMgY29tcGxlbWVudCBja3N1bSBvZiBzdHJ1Y3QgKi8KKwl1bmlvbiB7CisJCXVpbnQ4X3QgICBpaF9wcHRyOwkJLyogSUNNUF9QQVJBTVBST0IgKi8KKwkJc3RydWN0IGluX2FkZHIgaWhfZ3dhZGRyOwkvKiBJQ01QX1JFRElSRUNUICovCisJCXN0cnVjdCBpaF9pZHNlcSB7CisJCQkgIHVpbnQxNl90ICBpY2RfaWQ7CisJCQkgIHVpbnQxNl90ICBpY2Rfc2VxOworCQl9IGloX2lkc2VxOworCQlpbnQzMl90ICAgaWhfdm9pZDsKKworCQkvKiBJQ01QX1VOUkVBQ0hfTkVFREZSQUcgLS0gUGF0aCBNVFUgRGlzY292ZXJ5IChSRkMxMTkxKSAqLworCQlzdHJ1Y3QgaWhfcG10dSB7CisJCQkgIHVpbnQxNl90ICBpcG1fdm9pZDsKKwkJCSAgdWludDE2X3QgIGlwbV9uZXh0bXR1OworCQl9IGloX3BtdHU7CisKKwkJc3RydWN0IGloX3J0cmFkdiB7CisJCQl1aW50OF90ICAgaXJ0X251bV9hZGRyczsKKwkJCXVpbnQ4X3QgICBpcnRfd3BhOworCQkJdWludDE2X3QgIGlydF9saWZldGltZTsKKwkJfSBpaF9ydHJhZHY7CisJfSBpY21wX2h1bjsKKyNkZWZpbmUJaWNtcF9wcHRyCSAgaWNtcF9odW4uaWhfcHB0cgorI2RlZmluZQlpY21wX2d3YWRkcgkgIGljbXBfaHVuLmloX2d3YWRkcgorI2RlZmluZQlpY21wX2lkCQkgIGljbXBfaHVuLmloX2lkc2VxLmljZF9pZAorI2RlZmluZQlpY21wX3NlcQkgIGljbXBfaHVuLmloX2lkc2VxLmljZF9zZXEKKyNkZWZpbmUJaWNtcF92b2lkCSAgaWNtcF9odW4uaWhfdm9pZAorI2RlZmluZQlpY21wX3Btdm9pZAkgIGljbXBfaHVuLmloX3BtdHUuaXBtX3ZvaWQKKyNkZWZpbmUJaWNtcF9uZXh0bXR1CSAgaWNtcF9odW4uaWhfcG10dS5pcG1fbmV4dG10dQorI2RlZmluZQlpY21wX251bV9hZGRycwkgIGljbXBfaHVuLmloX3J0cmFkdi5pcnRfbnVtX2FkZHJzCisjZGVmaW5lCWljbXBfd3BhCSAgaWNtcF9odW4uaWhfcnRyYWR2LmlydF93cGEKKyNkZWZpbmUJaWNtcF9saWZldGltZQkgIGljbXBfaHVuLmloX3J0cmFkdi5pcnRfbGlmZXRpbWUKKwl1bmlvbiB7CisJCXN0cnVjdCBpZF90cyB7CisJCQkgIHVpbnQzMl90ICBpdHNfb3RpbWU7CisJCQkgIHVpbnQzMl90ICBpdHNfcnRpbWU7CisJCQkgIHVpbnQzMl90ICBpdHNfdHRpbWU7CisJCX0gaWRfdHM7CisJCXN0cnVjdCBpZF9pcCAgeworCQkJICBzdHJ1Y3QgaXAgaWRpX2lwOworCQkJICAvKiBvcHRpb25zIGFuZCB0aGVuIDY0IGJpdHMgb2YgZGF0YSAqLworCQl9IGlkX2lwOworCQl1aW50MzJfdCAgaWRfbWFzazsKKwkJaW50OF90CSAgaWRfZGF0YVsxXTsKKwl9IGljbXBfZHVuOworI2RlZmluZQlpY21wX290aW1lCSAgaWNtcF9kdW4uaWRfdHMuaXRzX290aW1lCisjZGVmaW5lCWljbXBfcnRpbWUJICBpY21wX2R1bi5pZF90cy5pdHNfcnRpbWUKKyNkZWZpbmUJaWNtcF90dGltZQkgIGljbXBfZHVuLmlkX3RzLml0c190dGltZQorI2RlZmluZQlpY21wX2lwCQkgIGljbXBfZHVuLmlkX2lwLmlkaV9pcAorI2RlZmluZQlpY21wX21hc2sJICBpY21wX2R1bi5pZF9tYXNrCisjZGVmaW5lCWljbXBfZGF0YQkgIGljbXBfZHVuLmlkX2RhdGEKK307CisKKy8qCisgKiBGb3IgSVB2NiB0cmFuc2l0aW9uIHJlbGF0ZWQgSUNNUCBlcnJvcnMuCisgKi8KKyNkZWZpbmUJSUNNUF9WNkFEVkxFTk1JTgkoOCArIHNpemVvZihzdHJ1Y3QgaXApICsgNDApCisjZGVmaW5lCUlDTVBfVjZBRFZMRU4ocCkJKDggKyAoKHApLT5pY21wX2lwLmlwX2hsIDw8IDIpICsgNDApCisKKy8qCisgKiBMb3dlciBib3VuZHMgb24gcGFja2V0IGxlbmd0aHMgZm9yIHZhcmlvdXMgdHlwZXMuCisgKiBGb3IgdGhlIGVycm9yIGFkdmljZSBwYWNrZXRzIG11c3QgZmlyc3QgaW5zdXJlIHRoYXQgdGhlCisgKiBwYWNrZXQgaXMgbGFyZ2UgZW5vdWdoIHRvIGNvbnRhaW4gdGhlIHJldHVybmVkIGlwIGhlYWRlci4KKyAqIE9ubHkgdGhlbiBjYW4gd2UgZG8gdGhlIGNoZWNrIHRvIHNlZSBpZiA2NCBiaXRzIG9mIHBhY2tldAorICogZGF0YSBoYXZlIGJlZW4gcmV0dXJuZWQsIHNpbmNlIHdlIG5lZWQgdG8gY2hlY2sgdGhlIHJldHVybmVkCisgKiBpcCBoZWFkZXIgbGVuZ3RoLgorICovCisjZGVmaW5lCUlDTVBfTUlOTEVOCTgJCQkJLyogYWJzIG1pbmltdW0gKi8KKyNkZWZpbmUJSUNNUF9UU0xFTgkoOCArIDMgKiBzaXplb2YgKG5fdGltZSkpCS8qIHRpbWVzdGFtcCAqLworI2RlZmluZQlJQ01QX01BU0tMRU4JMTIJCQkJLyogYWRkcmVzcyBtYXNrICovCisjZGVmaW5lCUlDTVBfQURWTEVOTUlOCSg4ICsgc2l6ZW9mIChzdHJ1Y3QgaXApICsgOCkJLyogbWluICovCisjZGVmaW5lCUlDTVBfQURWTEVOKHApCSg4ICsgKChwKS0+aWNtcF9pcC5pcF9obCA8PCAyKSArIDgpCisJLyogTi5CLjogbXVzdCBzZXBhcmF0ZWx5IGNoZWNrIHRoYXQgaXBfaGwgPj0gNSAqLworCisvKgorICogRGVmaW5pdGlvbiBvZiB0eXBlIGFuZCBjb2RlIGZpZWxkIHZhbHVlcy4KKyAqCWh0dHA6Ly93d3cuaWFuYS5vcmcvYXNzaWdubWVudHMvaWNtcC1wYXJhbWV0ZXJzCisgKi8KKyNkZWZpbmUJSUNNUF9FQ0hPUkVQTFkJCTAJCS8qIGVjaG8gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNICQkzCQkvKiBkZXN0IHVucmVhY2hhYmxlLCBjb2RlczogKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVAkJMAkvKiBiYWQgbmV0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9IT1NUCQkxCS8qIGJhZCBob3N0ICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9QUk9UT0NPTAkJMgkvKiBiYWQgcHJvdG9jb2wgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1BPUlQJCTMJLyogYmFkIHBvcnQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FRURGUkFHCQk0CS8qIElQX0RGIGNhdXNlZCBkcm9wICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9TUkNGQUlMCQk1CS8qIHNyYyByb3V0ZSBmYWlsZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVF9VTktOT1dOCTYJLyogdW5rbm93biBuZXQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1RfVU5LTk9XTgk3CS8qIHVua25vd24gaG9zdCAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfSVNPTEFURUQJCTgJLyogc3JjIGhvc3QgaXNvbGF0ZWQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX05FVF9QUk9ISUIJCTkJLyogZm9yIGNyeXB0byBkZXZzICovCisjZGVmaW5lCUlDTVBfVU5SRUFDSF9IT1NUX1BST0hJQgkxMAkvKiBkaXR0byAqLworI2RlZmluZQlJQ01QX1VOUkVBQ0hfVE9TTkVUCQkxMQkvKiBiYWQgdG9zIGZvciBuZXQgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1RPU0hPU1QJCTEyCS8qIGJhZCB0b3MgZm9yIGhvc3QgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0ZJTFRFUl9QUk9ISUIJMTMJLyogcHJvaGliaXRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX0hPU1RfUFJFQ0VERU5DRQkxNAkvKiBwcmVjZWRlbmNlIHZpb2xhdCduKi8KKyNkZWZpbmUJSUNNUF9VTlJFQUNIX1BSRUNFREVOQ0VfQ1VUT0ZGCTE1CS8qIHByZWNlZGVuY2UgY3V0b2ZmICovCisjZGVmaW5lCUlDTVBfU09VUkNFUVVFTkNICTQJCS8qIHBhY2tldCBsb3N0LCBzbG93IGRvd24gKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVAkJNQkJLyogc2hvcnRlciByb3V0ZSwgY29kZXM6ICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1RfTkVUCTAJCS8qIGZvciBuZXR3b3JrICovCisjZGVmaW5lCUlDTVBfUkVESVJFQ1RfSE9TVAkxCQkvKiBmb3IgaG9zdCAqLworI2RlZmluZQlJQ01QX1JFRElSRUNUX1RPU05FVAkyCQkvKiBmb3IgdG9zIGFuZCBuZXQgKi8KKyNkZWZpbmUJSUNNUF9SRURJUkVDVF9UT1NIT1NUCTMJCS8qIGZvciB0b3MgYW5kIGhvc3QgKi8KKyNkZWZpbmUJSUNNUF9BTFRIT1NUQUREUgk2CQkvKiBhbHRlcm5hdGUgaG9zdCBhZGRyZXNzICovCisjZGVmaW5lCUlDTVBfRUNITwkJOAkJLyogZWNobyBzZXJ2aWNlICovCisjZGVmaW5lCUlDTVBfUk9VVEVSQURWRVJUCTkJCS8qIHJvdXRlciBhZHZlcnRpc2VtZW50ICovCisjZGVmaW5lCUlDTVBfUk9VVEVSQURWRVJUX05PUk1BTAkJMAkvKiBub3JtYWwgYWR2ZXJ0aXNlbWVudCAqLworI2RlZmluZQlJQ01QX1JPVVRFUkFEVkVSVF9OT1JPVVRFX0NPTU1PTgkxNgkvKiBzZWxlY3RpdmUgcm91dGluZyAqLworI2RlZmluZQlJQ01QX1JPVVRFUlNPTElDSVQJMTAJCS8qIHJvdXRlciBzb2xpY2l0YXRpb24gKi8KKyNkZWZpbmUJSUNNUF9USU1YQ0VFRAkJMTEJCS8qIHRpbWUgZXhjZWVkZWQsIGNvZGU6ICovCisjZGVmaW5lCUlDTVBfVElNWENFRURfSU5UUkFOUwkwCQkvKiB0dGw9PTAgaW4gdHJhbnNpdCAqLworI2RlZmluZQlJQ01QX1RJTVhDRUVEX1JFQVNTCTEJCS8qIHR0bD09MCBpbiByZWFzcyAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQgkJMTIJCS8qIGlwIGhlYWRlciBiYWQgKi8KKyNkZWZpbmUJSUNNUF9QQVJBTVBST0JfRVJSQVRQVFIgMAkJLyogcmVxLiBvcHQuIGFic2VudCAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQl9PUFRBQlNFTlQgMQkJLyogcmVxLiBvcHQuIGFic2VudCAqLworI2RlZmluZQlJQ01QX1BBUkFNUFJPQl9MRU5HVEgJMgkJLyogYmFkIGxlbmd0aCAqLworI2RlZmluZQlJQ01QX1RTVEFNUAkJMTMJCS8qIHRpbWVzdGFtcCByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfVFNUQU1QUkVQTFkJMTQJCS8qIHRpbWVzdGFtcCByZXBseSAqLworI2RlZmluZQlJQ01QX0lSRVEJCTE1CQkvKiBpbmZvcm1hdGlvbiByZXF1ZXN0ICovCisjZGVmaW5lCUlDTVBfSVJFUVJFUExZCQkxNgkJLyogaW5mb3JtYXRpb24gcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVRCQkxNwkJLyogYWRkcmVzcyBtYXNrIHJlcXVlc3QgKi8KKyNkZWZpbmUJSUNNUF9NQVNLUkVQTFkJCTE4CQkvKiBhZGRyZXNzIG1hc2sgcmVwbHkgKi8KKyNkZWZpbmUJSUNNUF9UUkFDRVJPVVRFCQkzMAkJLyogdHJhY2Vyb3V0ZSAqLworI2RlZmluZQlJQ01QX0RBVEFDT05WRVJSCTMxCQkvKiBkYXRhIGNvbnZlcnNpb24gZXJyb3IgKi8KKyNkZWZpbmUJSUNNUF9NT0JJTEVfUkVESVJFQ1QJMzIJCS8qIG1vYmlsZSBob3N0IHJlZGlyZWN0ICovCisjZGVmaW5lCUlDTVBfSVBWNl9XSEVSRUFSRVlPVQkzMwkJLyogSVB2NiB3aGVyZS1hcmUteW91ICovCisjZGVmaW5lCUlDTVBfSVBWNl9JQU1IRVJFCTM0CQkvKiBJUHY2IGktYW0taGVyZSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVFVRVNUCTM1CQkvKiBtb2JpbGUgcmVnaXN0cmF0aW9uIHJlcSAqLworI2RlZmluZQlJQ01QX01PQklMRV9SRUdSRVBMWQkzNgkJLyogbW9iaWxlIHJlZ2lzdHJhdGlvbiByZXBseSAqLworI2RlZmluZQlJQ01QX1NLSVAJCTM5CQkvKiBTS0lQICovCisjZGVmaW5lCUlDTVBfUEhPVFVSSVMJCTQwCQkvKiBQaG90dXJpcyAqLworI2RlZmluZQlJQ01QX1BIT1RVUklTX1VOS05PV05fSU5ERVgJMQkvKiB1bmtub3duIHNlYyBpbmRleCAqLworI2RlZmluZQlJQ01QX1BIT1RVUklTX0FVVEhfRkFJTEVECTIJLyogYXV0aCBmYWlsZWQgKi8KKyNkZWZpbmUJSUNNUF9QSE9UVVJJU19ERUNSWVBUX0ZBSUxFRAkzCS8qIGRlY3J5cHQgZmFpbGVkICovCisKKyNkZWZpbmUJSUNNUF9NQVhUWVBFCQk0MAorCisjZGVmaW5lCUlDTVBfSU5GT1RZUEUodHlwZSkgXAorCSgodHlwZSkgPT0gSUNNUF9FQ0hPUkVQTFkgfHwgKHR5cGUpID09IElDTVBfRUNITyB8fCBcCisJKHR5cGUpID09IElDTVBfUk9VVEVSQURWRVJUIHx8ICh0eXBlKSA9PSBJQ01QX1JPVVRFUlNPTElDSVQgfHwgXAorCSh0eXBlKSA9PSBJQ01QX1RTVEFNUCB8fCAodHlwZSkgPT0gSUNNUF9UU1RBTVBSRVBMWSB8fCBcCisJKHR5cGUpID09IElDTVBfSVJFUSB8fCAodHlwZSkgPT0gSUNNUF9JUkVRUkVQTFkgfHwgXAorCSh0eXBlKSA9PSBJQ01QX01BU0tSRVEgfHwgKHR5cGUpID09IElDTVBfTUFTS1JFUExZKQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX05FVElORVRfSVBfSUNNUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvdGNwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC90Y3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YWRmOTA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvdGNwLmgKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9UQ1BfSAorI2RlZmluZSBfTkVUSU5FVF9UQ1BfSAorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CQkvKiBJbmNsdWRlICpiZWZvcmUqIGxpbnV4L3RjcC5oICovCisjaW5jbHVkZSA8bGludXgvdGNwLmg+CisKKyNlbmRpZiAvKiBfTkVUSU5FVF9UQ1BfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL25ldGluZXQvdWRwLmggYi9saWJjL2luY2x1ZGUvbmV0aW5ldC91ZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWUwZGZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldGluZXQvdWRwLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfTkVUSU5FVF9VRFBfSAorI2RlZmluZSBfTkVUSU5FVF9VRFBfSAorCisvKgorICogV2Ugd291bGQgaW5jbHVkZSBsaW51eC91ZHAuaCwgYnV0IGl0IGJyaW5ncyBpbiB0b28gbXVjaCBvdGhlciBzdHVmZgorICovCisKKyNpZmRlZiBfX0ZBVk9SX0JTRAorCitzdHJ1Y3QgdWRwaGRyIHsKKyAgICB1X2ludDE2X3QgdWhfc3BvcnQ7CS8qIHNvdXJjZSBwb3J0ICovCisgICAgdV9pbnQxNl90IHVoX2Rwb3J0OwkvKiBkZXN0aW5hdGlvbiBwb3J0ICovCisgICAgdV9pbnQxNl90IHVoX3VsZW47CS8qIHVkcCBsZW5ndGggKi8KKyAgICB1X2ludDE2X3QgdWhfc3VtOwkvKiB1ZHAgY2hlY2tzdW0gKi8KK307CisKKyNlbHNlCisKK3N0cnVjdCB1ZHBoZHIgeworICAgIF9fdTE2ICBzb3VyY2U7CisgICAgX191MTYgIGRlc3Q7CisgICAgX191MTYgIGxlbjsKKyAgICBfX3UxNiAgY2hlY2s7Cit9OworCisjZW5kaWYgLyogX19GQVZPUl9CU0QgKi8KKworI2VuZGlmIC8qIF9ORVRJTkVUX1VEUF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbmV0cGFja2V0L3BhY2tldC5oIGIvbGliYy9pbmNsdWRlL25ldHBhY2tldC9wYWNrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNWU4ZTBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL25ldHBhY2tldC9wYWNrZXQuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8bGludXgvaWZfcGFja2V0Lmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaCBiL2xpYmMvaW5jbHVkZS9uc3N3aXRjaC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxOWQwNTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvbnNzd2l0Y2guaApAQCAtMCwwICsxLDIzNiBAQAorLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMTggMjAwNS8xMS8yOSAwMzoxMjo1OCBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTlNTV0lUQ0hfSAorI2RlZmluZSBfTlNTV0lUQ0hfSAkxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZQlOU1NfTU9EVUxFX0lOVEVSRkFDRV9WRVJTSU9OCTAKKworI2lmbmRlZiBfUEFUSF9OU19DT05GCisjZGVmaW5lIF9QQVRIX05TX0NPTkYJIi9ldGMvbnNzd2l0Y2guY29uZiIKKyNlbmRpZgorCisjZGVmaW5lCU5TX0NPTlRJTlVFCTAKKyNkZWZpbmUJTlNfUkVUVVJOCTEKKworLyoKKyAqIExheW91dCBvZjoKKyAqCXVpbnQzMl90IG5zX3NyYy5mbGFncworICovIAorCS8qIG5zc3dpdGNoLmNvbmYgc3RhdHVzIGNvZGVzIGFuZCBuc2Rpc3BhdGNoKDMpIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUJTlNfU1VDQ0VTUwkoMTw8MCkJCS8qIGVudHJ5IHdhcyBmb3VuZCAqLworI2RlZmluZQlOU19VTkFWQUlMCSgxPDwxKQkJLyogc291cmNlIG5vdCByZXNwb25kaW5nLCBvciBjb3JydXB0ICovCisjZGVmaW5lCU5TX05PVEZPVU5ECSgxPDwyKQkJLyogc291cmNlIHJlc3BvbmRlZCAnbm8gc3VjaCBlbnRyeScgKi8KKyNkZWZpbmUJTlNfVFJZQUdBSU4JKDE8PDMpCQkvKiBzb3VyY2UgYnVzeSwgbWF5IHJlc3BvbmQgdG8gcmV0cnlzICovCisjZGVmaW5lCU5TX1NUQVRVU01BU0sJMHgwMDAwMDBmZgkvKiBiaXRtYXNrIHRvIGdldCB0aGUgc3RhdHVzIGZsYWdzICovCisKKwkvKiBpbnRlcm5hbCBuc2Rpc3BhdGNoKDMpIGZsYWdzOyBub3Qgc2V0dGFibGUgaW4gbnNzd2l0Y2guY29uZig1KSAgKi8KKyNkZWZpbmUJTlNfRk9SQ0VBTEwJKDE8PDgpCQkvKiBmb3JjZSBhbGwgbWV0aG9kcyB0byBiZSBpbnZva2VkOyAqLworCisvKgorICogQ3VycmVudGx5IGltcGxlbWVudGVkIHNvdXJjZXMuCisgKi8KKyNkZWZpbmUgTlNTUkNfRklMRVMJImZpbGVzIgkJLyogbG9jYWwgZmlsZXMgKi8KKyNkZWZpbmUJTlNTUkNfRE5TCSJkbnMiCQkvKiBETlM7IElOIGZvciBob3N0cywgSFMgZm9yIG90aGVycyAqLworI2RlZmluZQlOU1NSQ19OSVMJIm5pcyIJCS8qIFlQL05JUyAqLworI2RlZmluZQlOU1NSQ19DT01QQVQJImNvbXBhdCIJLyogcGFzc3dkLGdyb3VwIGluIFlQIGNvbXBhdCBtb2RlICovCisKKy8qCisgKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgZGF0YWJhc2VzLgorICovCisjZGVmaW5lIE5TREJfSE9TVFMJCSJob3N0cyIKKyNkZWZpbmUgTlNEQl9HUk9VUAkJImdyb3VwIgorI2RlZmluZSBOU0RCX0dST1VQX0NPTVBBVAkiZ3JvdXBfY29tcGF0IgorI2RlZmluZSBOU0RCX05FVEdST1VQCQkibmV0Z3JvdXAiCisjZGVmaW5lIE5TREJfTkVUV09SS1MJCSJuZXR3b3JrcyIKKyNkZWZpbmUgTlNEQl9QQVNTV0QJCSJwYXNzd2QiCisjZGVmaW5lIE5TREJfUEFTU1dEX0NPTVBBVAkicGFzc3dkX2NvbXBhdCIKKyNkZWZpbmUgTlNEQl9TSEVMTFMJCSJzaGVsbHMiCisKKy8qCisgKiBTdWdnZXN0ZWQgZGF0YWJhc2VzIHRvIGltcGxlbWVudC4KKyAqLworI2RlZmluZSBOU0RCX0FMSUFTRVMJCSJhbGlhc2VzIgorI2RlZmluZSBOU0RCX0FVVEgJCSJhdXRoIgorI2RlZmluZSBOU0RCX0FVVE9NT1VOVAkJImF1dG9tb3VudCIKKyNkZWZpbmUgTlNEQl9CT09UUEFSQU1TCQkiYm9vdHBhcmFtcyIKKyNkZWZpbmUgTlNEQl9FVEhFUlMJCSJldGhlcnMiCisjZGVmaW5lIE5TREJfRVhQT1JUUwkJImV4cG9ydHMiCisjZGVmaW5lIE5TREJfTkVUTUFTS1MJCSJuZXRtYXNrcyIKKyNkZWZpbmUgTlNEQl9QSE9ORVMJCSJwaG9uZXMiCisjZGVmaW5lIE5TREJfUFJJTlRDQVAJCSJwcmludGNhcCIKKyNkZWZpbmUgTlNEQl9QUk9UT0NPTFMJCSJwcm90b2NvbHMiCisjZGVmaW5lIE5TREJfUkVNT1RFCQkicmVtb3RlIgorI2RlZmluZSBOU0RCX1JQQwkJInJwYyIKKyNkZWZpbmUgTlNEQl9TRU5ETUFJTFZBUlMJInNlbmRtYWlsdmFycyIKKyNkZWZpbmUgTlNEQl9TRVJWSUNFUwkJInNlcnZpY2VzIgorI2RlZmluZSBOU0RCX1RFUk1DQVAJCSJ0ZXJtY2FwIgorI2RlZmluZSBOU0RCX1RUWVMJCSJ0dHlzIgorCisvKgorICogbnNfZHRhYiBgY2FsbGJhY2snIGZ1bmN0aW9uIHNpZ25hdHVyZS4KKyAqLwordHlwZWRlZglpbnQgKCpuc3NfbWV0aG9kKSh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKKy8qCisgKiBuc19kdGFiIC0gYG5zc3dpdGNoIGRpc3BhdGNoIHRhYmxlJworICogQ29udGFpbnMgYW4gZW50cnkgZm9yIGVhY2ggc291cmNlIGFuZCB0aGUgYXBwcm9wcmlhdGUgZnVuY3Rpb24gdG8gY2FsbC4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJICpzcmM7CisJbnNzX21ldGhvZAkgY2FsbGJhY2s7CisJdm9pZAkJICpjYl9kYXRhOworfSBuc19kdGFiOworCisvKgorICogTWFjcm9zIHRvIGhlbHAgYnVpbGQgYW4gbnNfZHRhYltdCisgKi8KKyNkZWZpbmUgTlNfRklMRVNfQ0IoRixDKQl7IE5TU1JDX0ZJTEVTLAlGLAlfX1VOQ09OU1QoQykgfSwKKyNkZWZpbmUgTlNfQ09NUEFUX0NCKEYsQykJeyBOU1NSQ19DT01QQVQsCUYsCV9fVU5DT05TVChDKSB9LAorIAorI2lmZGVmIEhFU0lPRAorIyAgIGRlZmluZSBOU19ETlNfQ0IoRixDKQl7IE5TU1JDX0ROUywJRiwJX19VTkNPTlNUKEMpIH0sCisjZWxzZQorIyAgIGRlZmluZSBOU19ETlNfQ0IoRixDKQorI2VuZGlmCisKKyNpZmRlZiBZUAorIyAgIGRlZmluZSBOU19OSVNfQ0IoRixDKQl7IE5TU1JDX05JUywJRiwJX19VTkNPTlNUKEMpIH0sCisjZWxzZQorIyAgIGRlZmluZSBOU19OSVNfQ0IoRixDKQorI2VuZGlmCisKKy8qCisgKiBuc19zcmMgLSBgbnNzd2l0Y2ggc291cmNlJworICogVXNlZCBieSB0aGUgbnNwYXJzZXIgcm91dGluZXMgdG8gc3RvcmUgYSBtYXBwaW5nIGJldHdlZW4gYSBzb3VyY2UKKyAqIGFuZCBpdHMgZGlzcGF0Y2ggY29udHJvbCBmbGFncyBmb3IgYSBnaXZlbiBkYXRhYmFzZS4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CisJdWludDMyX3QJIGZsYWdzOworfSBuc19zcmM7CisKKworLyoKKyAqIERlZmF1bHQgc291cmNlbGlzdHMgKGlmIG5zc3dpdGNoLmNvbmYgaXMgbWlzc2luZywgY29ycnVwdCwKKyAqIG9yIHRoZSByZXF1ZXN0ZWQgZGF0YWJhc2UgZG9lc24ndCBoYXZlIGFuIGVudHJ5KQorICovCitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0c3JjW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0W107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0Y29tcGF0X2ZvcmNlYWxsW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0ZmlsZXNbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc19mb3JjZWFsbFtdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc1tdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdG5pc19mb3JjZWFsbFtdOworCisKKy8qCisgKiBuc19tdGFiIC0gYG5zc3dpdGNoIG1ldGhvZCB0YWJsZScKKyAqIEFuIG5zc3dpdGNoIG1vZHVsZSBwcm92aWRlcyBhIG1hcHBpbmcgZnJvbSAoZGF0YWJhc2UgbmFtZSwgbWV0aG9kIG5hbWUpCisgKiB0dXBsZXMgdG8gdGhlIG5zc19tZXRob2QgYW5kIGFzc29jaWF0ZWQgY2FsbGJhY2sgZGF0YS4gIEVmZmVjdGl2ZWx5LAorICogbnNfZHRhYiwgYnV0IHVzZWQgZm9yIGR5bmFtaWNhbGx5IGxvYWRlZCBtb2R1bGVzLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqZGF0YWJhc2U7CisJY29uc3QgY2hhcgkqbmFtZTsKKwluc3NfbWV0aG9kCSBtZXRob2Q7CisJdm9pZAkJKm1kYXRhOworfSBuc19tdGFiOworCisvKgorICogbnNzX21vZHVsZV9yZWdpc3Rlcl9mbiAtIG1vZHVsZSByZWdpc3RyYXRpb24gZnVuY3Rpb24KKyAqCWNhbGxlZCBhdCBtb2R1bGUgbG9hZAorICogbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIC0gbW9kdWxlIHVuLXJlZ2lzdHJhdGlvbiBmdW5jdGlvbgorICoJY2FsbGVkIGF0IG1vZHVsZSB1bmxvYWQKKyAqLwordHlwZWRlZgl2b2lkICgqbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuKShuc19tdGFiICosIHVfaW50KTsKK3R5cGVkZWYJbnNfbXRhYiAqKCpuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuKShjb25zdCBjaGFyICosIHVfaW50ICosCisJCQkJCSAgIG5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiAqKTsKKworI2lmZGVmIF9OU19QUklWQVRFCisKKy8qCisgKiBQcml2YXRlIGRhdGEgc3RydWN0dXJlcyBmb3IgYmFjay1lbmQgbnNzd2l0Y2ggaW1wbGVtZW50YXRpb24uCisgKi8KKworLyoKKyAqIG5zX2RidCAtIGBuc3N3aXRjaCBkYXRhYmFzZSB0aGFuZycKKyAqIEZvciBlYWNoIGRhdGFiYXNlIGluIC9ldGMvbnNzd2l0Y2guY29uZiB0aGVyZSBpcyBhIG5zX2RidCwgd2l0aCBpdHMKKyAqIG5hbWUgYW5kIGEgbGlzdCBvZiBuc19zcmMncyBjb250YWluaW5nIHRoZSBzb3VyY2UgaW5mb3JtYXRpb24uCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOwkJLyogbmFtZSBvZiBkYXRhYmFzZSAqLworCW5zX3NyYwkJKnNyY2xpc3Q7CS8qIGxpc3Qgb2Ygc291cmNlcyAqLworCXVfaW50CQkgc3JjbGlzdHNpemU7CS8qIHNpemUgb2Ygc3JjbGlzdCAqLworfSBuc19kYnQ7CisKKy8qCisgKiBuc19tb2QgLSBgbnNzd2l0Y2ggbW9kdWxlJworICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkqbmFtZTsJCS8qIG1vZHVsZSBuYW1lICovCisJdm9pZAkJKmhhbmRsZTsJLyogaGFuZGxlIGZyb20gZGxvcGVuKCkgKi8KKwluc19tdGFiCQkqbXRhYjsJCS8qIG1ldGhvZCB0YWJsZSAqLworCXVfaW50CQkgbXRhYnNpemU7CS8qIHNpemUgb2YgbXRhYiAqLworCQkJCQkvKiBjYWxsZWQgdG8gdW5sb2FkIG1vZHVsZSAqLworCW5zc19tb2R1bGVfdW5yZWdpc3Rlcl9mbiB1bnJlZ2lzdGVyOworfSBuc19tb2Q7CisKKyNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLworCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworaW50CW5zZGlzcGF0Y2godm9pZCAqLCBjb25zdCBuc19kdGFiIFtdLCBjb25zdCBjaGFyICosCisJCQljb25zdCBjaGFyICosIGNvbnN0IG5zX3NyYyBbXSwgLi4uKTsKKworI2lmZGVmIF9OU19QUklWQVRFCitpbnQJCSBfbnNkYnRhZGRzcmMobnNfZGJ0ICosIGNvbnN0IG5zX3NyYyAqKTsKK3ZvaWQJCSBfbnNkYnRkdW1wKGNvbnN0IG5zX2RidCAqKTsKK2ludAkJIF9uc2RidHB1dChjb25zdCBuc19kYnQgKik7Cit2b2lkCQkgX25zeXllcnJvcihjb25zdCBjaGFyICopOworaW50CQkgX25zeXlsZXgodm9pZCk7CisjZW5kaWYgLyogX05TX1BSSVZBVEUgKi8KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qICFfTlNTV0lUQ0hfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3BhdGhjb25mLmggYi9saWJjL2luY2x1ZGUvcGF0aGNvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Njc3ZjdiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BhdGhjb25mLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfUEFUSENPTkZfSF8KKyNkZWZpbmUgX1BBVEhDT05GX0hfCisKKy8qIGNvbnN0YW50cyB0byBiZSB1c2VkIGZvciB0aGUgJ25hbWUnIHBhcmVtZXRlciBvZiBwYXRoY29uZi9mcGF0aGNvbmYgKi8KKworI2RlZmluZSAgX1BDX0ZJTEVTSVpFQklUUyAgICAgICAweDAwMDAKKyNkZWZpbmUgIF9QQ19MSU5LX01BWCAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lICBfUENfTUFYX0NBTk9OICAgICAgICAgIDB4MDAwMgorI2RlZmluZSAgX1BDX01BWF9JTlBVVCAgICAgICAgICAweDAwMDMKKyNkZWZpbmUgIF9QQ19OQU1FX01BWCAgICAgICAgICAgMHgwMDA0CisjZGVmaW5lICBfUENfUEFUSF9NQVggICAgICAgICAgIDB4MDAwNQorI2RlZmluZSAgX1BDX1BJUEVfQlVGICAgICAgICAgICAweDAwMDYKKyNkZWZpbmUgIF9QQ18yX1NZTUxJTktTICAgICAgICAgMHgwMDA3CisjZGVmaW5lICBfUENfQUxMT0NfU0laRV9NSU4gICAgIDB4MDAwOAorI2RlZmluZSAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSAweDAwMDkKKyNkZWZpbmUgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSAgMHgwMDBhCisjZGVmaW5lICBfUENfUkVDX01JTl9YRkVSX1NJWkUgIDB4MDAwYgorI2RlZmluZSAgX1BDX1JFQ19YRkVSX0FMSUdOICAgICAweDAwMGMKKyNkZWZpbmUgIF9QQ19TWU1MSU5LX01BWCAgICAgICAgMHgwMDBkCisjZGVmaW5lICBfUENfQ0hPV05fUkVTVFJJQ1RFRCAgIDB4MDAwZQorI2RlZmluZSAgX1BDX05PX1RSVU5DICAgICAgICAgICAweDAwMGYKKyNkZWZpbmUgIF9QQ19WRElTQUJMRSAgICAgICAgICAgMHgwMDEwCisjZGVmaW5lICBfUENfQVNZTkNfSU8gICAgICAgICAgIDB4MDAxMQorI2RlZmluZSAgX1BDX1BSSU9fSU8gICAgICAgICAgICAweDAwMTIKKyNkZWZpbmUgIF9QQ19TWU5DX0lPICAgICAgICAgICAgMHgwMDEzCisKK2V4dGVybiBsb25nIGZwYXRoY29uZihpbnQgZmlsZGVzLCBpbnQgbmFtZSk7CitleHRlcm4gbG9uZyBwYXRoY29uZihjb25zdCBjaGFyICpwYXRoLCBpbnQgbmFtZSk7CisKKyNlbmRpZiAvKiBfUEFUSENPTkZfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3BhdGhzLmggYi9saWJjL2luY2x1ZGUvcGF0aHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzIxNjJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BhdGhzLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylwYXRocy5oCTguMSAoQmVya2VsZXkpIDYvMi85MworICovCisKKyNpZm5kZWYgX1BBVEhTX0hfCisjZGVmaW5lCV9QQVRIU19IXworCisvKiBEZWZhdWx0IHNlYXJjaCBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9ERUZQQVRICSIvdXNyL2JpbjovYmluIgorLyogQWxsIHN0YW5kYXJkIHV0aWxpdGllcyBwYXRoLiAqLworI2RlZmluZQlfUEFUSF9TVERQQVRIIFwKKwkiL3Vzci9iaW46L2JpbjovdXNyL3NiaW46L3NiaW4iCisKKyNkZWZpbmUJX1BBVEhfQlNIRUxMCSIvc3lzdGVtL2Jpbi9zaCIKKyNkZWZpbmUJX1BBVEhfQ09OU09MRQkiL2Rldi9jb25zb2xlIgorI2RlZmluZQlfUEFUSF9DU0hFTEwJIi9iaW4vY3NoIgorI2RlZmluZQlfUEFUSF9ERVZEQgkiL3Zhci9ydW4vZGV2LmRiIgorI2RlZmluZQlfUEFUSF9ERVZOVUxMCSIvZGV2L251bGwiCisjZGVmaW5lCV9QQVRIX0RSVU0JIi9kZXYvZHJ1bSIKKyNkZWZpbmUJX1BBVEhfS0xPRwkiL3Byb2Mva21zZyIKKyNkZWZpbmUJX1BBVEhfS01FTQkiL2Rldi9rbWVtIgorI2RlZmluZQlfUEFUSF9MQVNUTE9HCSIvdmFyL2xvZy9sYXN0bG9nIgorI2RlZmluZQlfUEFUSF9NQUlMRElSCSIvdmFyL21haWwiCisjZGVmaW5lCV9QQVRIX01BTgkiL3Vzci9zaGFyZS9tYW4iCisjZGVmaW5lCV9QQVRIX01FTQkiL2Rldi9tZW0iCisjZGVmaW5lCV9QQVRIX01OVFRBQgkiL2V0Yy9mc3RhYiIKKyNkZWZpbmUJX1BBVEhfTU9VTlRFRAkiL2V0Yy9tdGFiIgorI2RlZmluZQlfUEFUSF9OT0xPR0lOCSIvZXRjL25vbG9naW4iCisjZGVmaW5lCV9QQVRIX1BSRVNFUlZFCSIvdmFyL2xpYiIKKyNkZWZpbmUJX1BBVEhfUldIT0RJUgkiL3Zhci9zcG9vbC9yd2hvIgorI2RlZmluZQlfUEFUSF9TRU5ETUFJTAkiL3Vzci9zYmluL3NlbmRtYWlsIgorI2RlZmluZQlfUEFUSF9TSEFET1cJIi9ldGMvc2hhZG93IgorI2RlZmluZQlfUEFUSF9TSEVMTFMJIi9ldGMvc2hlbGxzIgorI2RlZmluZQlfUEFUSF9UVFkJIi9kZXYvdHR5IgorI2RlZmluZQlfUEFUSF9VTklYCSIvYm9vdC92bWxpbnV4IgorI2RlZmluZSBfUEFUSF9VVE1QCSIvdmFyL3J1bi91dG1wIgorI2RlZmluZQlfUEFUSF9WSQkiL2Jpbi92aSIKKyNkZWZpbmUgX1BBVEhfV1RNUAkiL3Zhci9sb2cvd3RtcCIKKworLyogUHJvdmlkZSB0cmFpbGluZyBzbGFzaCwgc2luY2UgbW9zdGx5IHVzZWQgZm9yIGJ1aWxkaW5nIHBhdGhuYW1lcy4gKi8KKyNkZWZpbmUJX1BBVEhfREVWCSIvZGV2LyIKKyNkZWZpbmUJX1BBVEhfVE1QCSIvdG1wLyIKKyNkZWZpbmUJX1BBVEhfVkFSREIJIi92YXIvZGIvIgorI2RlZmluZQlfUEFUSF9WQVJSVU4JIi92YXIvcnVuLyIKKyNkZWZpbmUJX1BBVEhfVkFSVE1QCSIvdmFyL3RtcC8iCisKKyNlbmRpZiAvKiAhX1BBVEhTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcG9sbC5oIGIvbGliYy9pbmNsdWRlL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjBiZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3BvbGwuaApAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9QT0xMX0hfCisjZGVmaW5lIF9QT0xMX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9wb2xsLmg+CisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiB1bnNpZ25lZCBpbnQgIG5mZHNfdDsKKworLyogUE9TSVggc3BlY2lmaWVzICJpbnQiIGZvciB0aGUgdGltZW91dCwgTGludXggc2VlbXMgdG8gdXNlIGxvbmcuLi4gKi8KK2V4dGVybiBpbnQgcG9sbChzdHJ1Y3QgcG9sbGZkICosIG5mZHNfdCwgbG9uZyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfUE9MTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3B0aHJlYWQuaCBiL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjdkZDc2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9wdGhyZWFkLmgKQEAgLTAsMCArMSwyMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1BUSFJFQURfSF8KKyNkZWZpbmUgX1BUSFJFQURfSF8KKworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzY2hlZC5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisvKgorICogVHlwZXMKKyAqLwordHlwZWRlZiBzdHJ1Y3QKK3sKKyAgICBpbnQgdm9sYXRpbGUgdmFsdWU7Cit9IHB0aHJlYWRfbXV0ZXhfdDsKKworI2RlZmluZSAgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiAgICAgICAgICAgICB7MH0KKyNkZWZpbmUgIFBUSFJFQURfUkVDVVJTSVZFX01VVEVYX0lOSVRJQUxJWkVSICAgezB4NDAwMH0KKyNkZWZpbmUgIFBUSFJFQURfRVJST1JDSEVDS19NVVRFWF9JTklUSUFMSVpFUiAgezB4ODAwMH0KKworZW51bSB7CisgICAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSAwLAorICAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFID0gMSwKKyAgICBQVEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0sgPSAyLAorCisgICAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLLAorICAgIFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QICA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFLAorCisgICAgUFRIUkVBRF9NVVRFWF9ERUZBVUxUID0gUFRIUkVBRF9NVVRFWF9OT1JNQUwKK307CisKKworCit0eXBlZGVmIHN0cnVjdAoreworICAgIGludCB2b2xhdGlsZSB2YWx1ZTsKK30gcHRocmVhZF9jb25kX3Q7CisKK3R5cGVkZWYgc3RydWN0Cit7CisgICAgdWludDMyX3QgZmxhZ3M7CisgICAgdm9pZCAqIHN0YWNrX2Jhc2U7CisgICAgc2l6ZV90IHN0YWNrX3NpemU7CisgICAgc2l6ZV90IGd1YXJkX3NpemU7CisgICAgaW50MzJfdCBzY2hlZF9wb2xpY3k7CisgICAgaW50MzJfdCBzY2hlZF9wcmlvcml0eTsKK30gcHRocmVhZF9hdHRyX3Q7CisKK3R5cGVkZWYgbG9uZyBwdGhyZWFkX211dGV4YXR0cl90OwordHlwZWRlZiBsb25nIHB0aHJlYWRfY29uZGF0dHJfdDsKKwordHlwZWRlZiBpbnQgcHRocmVhZF9rZXlfdDsKK3R5cGVkZWYgbG9uZyBwdGhyZWFkX3Q7CisKK3R5cGVkZWYgdm9sYXRpbGUgaW50ICBwdGhyZWFkX29uY2VfdDsKKworLyoKKyAqIERlZmluZXMKKyAqLworI2RlZmluZSBQVEhSRUFEX0NPTkRfSU5JVElBTElaRVIgIHswfQorCisjZGVmaW5lIFBUSFJFQURfU1RBQ0tfTUlOICgyICogUEFHRV9TSVpFKQorCisjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEICAweDAwMDAwMDAxCisjZGVmaW5lIFBUSFJFQURfQ1JFQVRFX0pPSU5BQkxFICAweDAwMDAwMDAwCisKKyNkZWZpbmUgUFRIUkVBRF9PTkNFX0lOSVQgICAgMAorCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFICAwCisjZGVmaW5lIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQgICAxCisKKy8qCisgKiBQcm90b3R5cGVzCisgKi8KKyNpZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworaW50IHB0aHJlYWRfYXR0cl9pbml0KHB0aHJlYWRfYXR0cl90ICogYXR0cik7CitpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kocHRocmVhZF9hdHRyX3QgKiBhdHRyKTsKKworaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIGludCBzdGF0ZSk7CitpbnQgcHRocmVhZF9hdHRyX2dldGRldGFjaHN0YXRlKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgaW50ICogc3RhdGUpOworCitpbnQgcHRocmVhZF9hdHRyX3NldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90ICogYXR0ciwgaW50IHBvbGljeSk7CitpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcG9saWN5KHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgaW50ICogcG9saWN5KTsKKworaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtIGNvbnN0ICogcGFyYW0pOworaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgc3RydWN0IHNjaGVkX3BhcmFtICogcGFyYW0pOworCitpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZShwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHNpemVfdCBzdGFja19zaXplKTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tzaXplKHB0aHJlYWRfYXR0cl90IGNvbnN0ICogYXR0ciwgc2l6ZV90ICogc3RhY2tfc2l6ZSk7CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgdm9pZCAqIHN0YWNrYWRkcik7CitpbnQgcHRocmVhZF9hdHRyX2dldHN0YWNrYWRkcihwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsIHZvaWQgKiogc3RhY2thZGRyKTsKKworaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFjayhwdGhyZWFkX2F0dHJfdCAqIGF0dHIsIHZvaWQgKiBzdGFja2FkZHIsIHNpemVfdCBzdGFja19zaXplKTsKK2ludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2socHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCB2b2lkICoqIHN0YWNrYWRkciwgc2l6ZV90ICogc3RhY2tfc2l6ZSk7CisKK2ludCBwdGhyZWFkX2F0dHJfc2V0Z3VhcmRzaXplKHB0aHJlYWRfYXR0cl90ICogYXR0ciwgc2l6ZV90IGd1YXJkX3NpemUpOworaW50IHB0aHJlYWRfYXR0cl9nZXRndWFyZHNpemUocHRocmVhZF9hdHRyX3QgY29uc3QgKiBhdHRyLCBzaXplX3QgKiBndWFyZF9zaXplKTsKKworaW50IHB0aHJlYWRfZ2V0YXR0cl9ucChwdGhyZWFkX3QgdGhpZCwgcHRocmVhZF9hdHRyX3QgKiBhdHRyKTsKKworaW50IHB0aHJlYWRfY3JlYXRlKHB0aHJlYWRfdCAqdGhyZWFkLCBwdGhyZWFkX2F0dHJfdCBjb25zdCAqIGF0dHIsCisgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpzdGFydF9yb3V0aW5lKSh2b2lkICopLCB2b2lkICogYXJnKTsKK3ZvaWQgcHRocmVhZF9leGl0KHZvaWQgKiByZXR2YWwpOworaW50IHB0aHJlYWRfam9pbihwdGhyZWFkX3QgdGhpZCwgdm9pZCAqKiByZXRfdmFsKTsKK2ludCBwdGhyZWFkX2RldGFjaChwdGhyZWFkX3QgIHRoaWQpOworCitwdGhyZWFkX3QgcHRocmVhZF9zZWxmKHZvaWQpOworaW50IHB0aHJlYWRfZXF1YWwocHRocmVhZF90IG9uZSwgcHRocmVhZF90IHR3byk7CisKK2ludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0ocHRocmVhZF90IHRoaWQsIGludCAqIHBvbGljeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICogcGFyYW0pOworaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbShwdGhyZWFkX3QgdGhpZCwgaW50IHBvaWxjeSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtIGNvbnN0ICogcGFyYW0pOworCitpbnQgcHRocmVhZF9tdXRleGF0dHJfaW5pdChwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKTsKK2ludCBwdGhyZWFkX211dGV4YXR0cl9kZXN0cm95KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIpOworaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqYXR0ciwgaW50ICp0eXBlKTsKK2ludCBwdGhyZWFkX211dGV4YXR0cl9zZXR0eXBlKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKmF0dHIsIGludCB0eXBlKTsKKworaW50IHB0aHJlYWRfbXV0ZXhfaW5pdChwdGhyZWFkX211dGV4X3QgKm11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICphdHRyKTsKK2ludCBwdGhyZWFkX211dGV4X2Rlc3Ryb3kocHRocmVhZF9tdXRleF90ICptdXRleCk7CitpbnQgcHRocmVhZF9tdXRleF9sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrKHB0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpOworaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4KTsKK2ludCBwdGhyZWFkX211dGV4X3RpbWVkbG9jayhwdGhyZWFkX211dGV4X3QgKm11dGV4LCBzdHJ1Y3QgdGltZXNwZWMqICB0cyk7CisKK2ludCBwdGhyZWFkX2NvbmRfaW5pdChwdGhyZWFkX2NvbmRfdCAqY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKmF0dHIpOworaW50IHB0aHJlYWRfY29uZF9kZXN0cm95KHB0aHJlYWRfY29uZF90ICpjb25kKTsKK2ludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0KHB0aHJlYWRfY29uZF90ICpjb25kKTsKK2ludCBwdGhyZWFkX2NvbmRfc2lnbmFsKHB0aHJlYWRfY29uZF90ICpjb25kKTsKK2ludCBwdGhyZWFkX2NvbmRfd2FpdChwdGhyZWFkX2NvbmRfdCAqY29uZCwgcHRocmVhZF9tdXRleF90ICptdXRleCk7CitpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdChwdGhyZWFkX2NvbmRfdCAqY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICphYnN0aW1lKTsKKworLyogQklPTklDOiBzYW1lIGFzIHB0aHJlYWRfY29uZF90aW1lZHdhaXQsIGV4Y2VwdCB0aGUgJ2Fic3RpbWUnIGdpdmVuIHJlZmVycworICogICAgICAgICB0byB0aGUgQ0xPQ0tfTU9OT1RPTklDIGNsb2NrIGluc3RlYWQsIHRvIGF2b2lkIGFueSBwcm9ibGVtcyB3aGVuCisgKiAgICAgICAgIHRoZSB3YWxsLWNsb2NrIHRpbWUgaXMgY2hhbmdlZCBicnV0YWxseQorICovCitpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdF9tb25vdG9uaWMocHRocmVhZF9jb25kX3QgICAgICAgICAqY29uZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211dGV4X3QgICAgICAgICptdXRleCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgICphYnN0aW1lKTsKKworaW50IHB0aHJlYWRfY29uZF90aW1lb3V0X25wKHB0aHJlYWRfY29uZF90ICpjb25kLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqIG11dGV4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIG1zZWNzKTsKKworaW50IHB0aHJlYWRfa2V5X2NyZWF0ZShwdGhyZWFkX2tleV90ICprZXksIHZvaWQgKCpkZXN0cnVjdG9yX2Z1bmN0aW9uKSh2b2lkICopKTsKK2ludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QpOworaW50IHB0aHJlYWRfc2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnZhbHVlKTsKK3ZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMocHRocmVhZF9rZXlfdCBrZXkpOworCitpbnQgcHRocmVhZF9raWxsKHB0aHJlYWRfdCB0aWQsIGludCBzaWcpOworaW50IHB0aHJlYWRfc2lnbWFzayhpbnQgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb3NldCk7CisKK2ludCBwdGhyZWFkX2dldGNwdWNsb2NraWQocHRocmVhZF90ICB0aWQsIGNsb2NraWRfdCAgKmNsb2NraWQpOworCitpbnQgcHRocmVhZF9vbmNlKHB0aHJlYWRfb25jZV90ICAqb25jZV9jb250cm9sLCB2b2lkICgqaW5pdF9yb3V0aW5lKSh2b2lkKSk7CisKK3R5cGVkZWYgdm9pZCAgKCpfX3B0aHJlYWRfY2xlYW51cF9mdW5jX3QpKHZvaWQqKTsKKwordHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2NsZWFudXBfdCB7CisgICAgc3RydWN0IF9fcHRocmVhZF9jbGVhbnVwX3QqICAgX19jbGVhbnVwX3ByZXY7CisgICAgX19wdGhyZWFkX2NsZWFudXBfZnVuY190ICAgICAgX19jbGVhbnVwX3JvdXRpbmU7CisgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICAgICAgX19jbGVhbnVwX2FyZzsKK30gX19wdGhyZWFkX2NsZWFudXBfdDsKKworZXh0ZXJuIHZvaWQgIF9fcHRocmVhZF9jbGVhbnVwX3B1c2goX19wdGhyZWFkX2NsZWFudXBfdCogICAgICBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wdGhyZWFkX2NsZWFudXBfZnVuY190ICByb3V0aW5lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCogICAgICAgICAgICAgICAgICAgICBhcmcpOworCitleHRlcm4gdm9pZCAgX19wdGhyZWFkX2NsZWFudXBfcG9wKF9fcHRocmVhZF9jbGVhbnVwX3QqICBjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgZXhlY3V0ZSk7CisKKy8qIEJlbGlldmUgb3Igbm90LCB0aGUgZGVmaW5pdGlvbnMgb2YgcHRocmVhZF9jbGVhbnVwX3B1c2ggYW5kCisgKiBwdGhyZWFkX2NsZWFudXBfcG9wIGJlbG93IGFyZSBjb3JyZWN0LiBQb3NpeCBzdGF0ZXMgdGhhdCB0aGVzZQorICogY2FuIGJlIGltcGxlbWVudGVkIGFzIG1hY3JvcyB0aGF0IG1pZ2h0IGludHJvZHVjZSBvcGVuaW5nIGFuZAorICogY2xvc2luZyBicmFjZXMsIGFuZCB0aGF0IHVzaW5nIHNldGptcC9sb25nam1wL3JldHVybi9icmVhay9jb250aW51ZQorICogYmV0d2VlbiB0aGVtIHJlc3VsdHMgaW4gdW5kZWZpbmVkIGJlaGF2aW91ci4KKyAqCisgKiBBbmQgaW5kZWVkLCBHTGliYyBhbmQgb3RoZXIgQyBsaWJyYXJpZXMgdXNlIGEgc2ltaWxhciBkZWZpbml0aW9uCisgKi8KKyNkZWZpbmUgIHB0aHJlYWRfY2xlYW51cF9wdXNoKHJvdXRpbmUsIGFyZykgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9fcHRocmVhZF9jbGVhbnVwX3QgIF9fY2xlYW51cDsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX19wdGhyZWFkX2NsZWFudXBfcHVzaCggJl9fY2xlYW51cCwgKHJvdXRpbmUpLCAoYXJnKSApOyAgXAorCisjZGVmaW5lICBwdGhyZWFkX2NsZWFudXBfcG9wKGV4ZWN1dGUpICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfX3B0aHJlYWRfY2xlYW51cF9wb3AoICZfX2NsZWFudXAsIChleGVjdXRlKSk7IFwKKyAgICB9IHdoaWxlICgwKTsKKworI2lmIF9fY3BsdXNwbHVzCit9IC8qIGV4dGVybiAiQyIgKi8KKyNlbmRpZgorCisvKioqKioqKioqKioqIFRPIEZJWCAqKioqKioqKioqKiovCisKKyNkZWZpbmUgTE9OR19MT05HX01BWCBfX0xPTkdfTE9OR19NQVhfXworI2RlZmluZSBMT05HX0xPTkdfTUlOICgtX19MT05HX0xPTkdfTUFYX18gLSAxKQorCisjZW5kaWYgLy8gX1BUSFJFQURfSF8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9wd2QuaCBiL2xpYmMvaW5jbHVkZS9wd2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjNmYWQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3B3ZC5oCkBAIC0wLDAgKzEsMTI1IEBACisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAoYykgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKiBBbGwgb3Igc29tZSBwb3J0aW9ucyBvZiB0aGlzIGZpbGUgYXJlIGRlcml2ZWQgZnJvbSBtYXRlcmlhbCBsaWNlbnNlZAorICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBieSBBbWVyaWNhbiBUZWxlcGhvbmUgYW5kIFRlbGVncmFwaAorICogQ28uIG9yIFVuaXggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLiBhbmQgYXJlIHJlcHJvZHVjZWQgaGVyZWluIHdpdGgKKyAqIHRoZSBwZXJtaXNzaW9uIG9mIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpcHdkLmgJOC4yIChCZXJrZWxleSkgMS8yMS85NAorICovCisKKy8qLQorICogUG9ydGlvbnMgQ29weXJpZ2h0KEMpIDE5OTUsIEphc29uIERvd25zLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IoUykgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUworICogT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIF9QV0RfSF8KKyNkZWZpbmUgX1BXRF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgX1BBVEhfUEFTU1dEICAgICAgICAiL2V0Yy9wYXNzd2QiCisjZGVmaW5lIF9QQVRIX01BU1RFUlBBU1NXRCAgIi9ldGMvbWFzdGVyLnBhc3N3ZCIKKyNkZWZpbmUgX1BBVEhfTUFTVEVSUEFTU1dEX0xPQ0sgIi9ldGMvcHRtcCIKKworI2RlZmluZSBfUEFUSF9QQVNTV0RfQ09ORiAgICIvZXRjL3Bhc3N3ZC5jb25mIgorI2RlZmluZSBfUEFUSF9QQVNTV0RDT05GICAgIF9QQVRIX1BBU1NXRF9DT05GICAgLyogWFhYOiBjb21wYXQgKi8KKyNkZWZpbmUgX1BBVEhfVVNFUk1HTVRfQ09ORiAiL2V0Yy91c2VybWdtdC5jb25mIgorCisjZGVmaW5lIF9QQVRIX01QX0RCICAgICAiL2V0Yy9wd2QuZGIiCisjZGVmaW5lIF9QQVRIX1NNUF9EQiAgICAgICAgIi9ldGMvc3B3ZC5kYiIKKworI2RlZmluZSBfUEFUSF9QV0RfTUtEQiAgICAgICIvdXNyL3NiaW4vcHdkX21rZGIiCisKKyNkZWZpbmUgX1BXX0tFWUJZTkFNRSAgICAgICAnMScgLyogc3RvcmVkIGJ5IG5hbWUgKi8KKyNkZWZpbmUgX1BXX0tFWUJZTlVNICAgICAgICAnMicgLyogc3RvcmVkIGJ5IGVudHJ5IGluIHRoZSAiZmlsZSIgKi8KKyNkZWZpbmUgX1BXX0tFWUJZVUlEICAgICAgICAnMycgLyogc3RvcmVkIGJ5IHVpZCAqLworCisjZGVmaW5lIF9QQVNTV09SRF9FRk1UMSAgICAgJ18nIC8qIGV4dGVuZGVkIERFUyBlbmNyeXB0aW9uIGZvcm1hdCAqLworI2RlZmluZSBfUEFTU1dPUkRfTk9OREVTICAgICckJyAvKiBub24tREVTIGVuY3J5cHRpb24gZm9ybWF0cyAqLworCisjZGVmaW5lIF9QQVNTV09SRF9MRU4gICAgICAgMTI4IC8qIG1heCBsZW5ndGgsIG5vdCBjb3VudGluZyBOVUwgKi8KKworI2RlZmluZSBfUEFTU1dPUkRfTk9VSUQgICAgIDB4MDEgICAgLyogZmxhZyBmb3Igbm8gc3BlY2lmaWVkIHVpZC4gKi8KKyNkZWZpbmUgX1BBU1NXT1JEX05PR0lEICAgICAweDAyICAgIC8qIGZsYWcgZm9yIG5vIHNwZWNpZmllZCBnaWQuICovCisjZGVmaW5lIF9QQVNTV09SRF9OT0NIRyAgICAgMHgwNCAgICAvKiBmbGFnIGZvciBubyBzcGVjaWZpZWQgY2hhbmdlLiAqLworI2RlZmluZSBfUEFTU1dPUkRfTk9FWFAgICAgIDB4MDggICAgLyogZmxhZyBmb3Igbm8gc3BlY2lmaWVkIGV4cGlyZS4gKi8KKworI2RlZmluZSBfUEFTU1dPUkRfT0xERk1UICAgIDB4MTAgICAgLyogZmxhZyB0byBleHBlY3QgYW4gb2xkIHN0eWxlIGVudHJ5ICovCisjZGVmaW5lIF9QQVNTV09SRF9OT1dBUk4gICAgMHgyMCAgICAvKiBubyB3YXJuaW5ncyBmb3IgYmFkIGVudHJpZXMgKi8KKworI2RlZmluZSBfUEFTU1dPUkRfV0FSTkRBWVMgIDE0ICAvKiBkYXlzIHRvIHdhcm4gYWJvdXQgZXhwaXJ5ICovCisjZGVmaW5lIF9QQVNTV09SRF9DSEdOT1cgICAgLTEgIC8qIHNwZWNpYWwgZGF5IHRvIGZvcmNlIHBhc3N3b3JkIGNoYW5nZSBhdCBuZXh0IGxvZ2luICovCisKK3N0cnVjdCBwYXNzd2QKK3sKKyAgICBjaGFyKiBwd19uYW1lOworICAgIGNoYXIqIHB3X3Bhc3N3ZDsKKyAgICB1aWRfdCBwd191aWQ7CisgICAgZ2lkX3QgcHdfZ2lkOworICAgIGNoYXIqIHB3X2RpcjsKKyAgICBjaGFyKiBwd19zaGVsbDsKK307CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHBhc3N3ZCogZ2V0cHduYW0oY29uc3QgY2hhciopOworc3RydWN0IHBhc3N3ZCogZ2V0cHd1aWQodWlkX3QpOworCitpbnQgZ2V0cHduYW1fcihjb25zdCBjaGFyKiwgc3RydWN0IHBhc3N3ZCosIGNoYXIqLCBzaXplX3QsIHN0cnVjdCBwYXNzd2QqKik7CitpbnQgZ2V0cHd1aWRfcih1aWRfdCwgc3RydWN0IHBhc3N3ZCosIGNoYXIqLCBzaXplX3QsIHN0cnVjdCBwYXNzd2QqKik7CisKK3ZvaWQgZW5kcHdlbnQodm9pZCk7CitzdHJ1Y3QgcGFzc3dkKiBnZXRwd2VudCh2b2lkKTsKK2ludCBzZXRwd2VudCh2b2lkKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvcmVzb2x2LmggYi9saWJjL2luY2x1ZGUvcmVzb2x2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDI0N2Q2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9yZXNvbHYuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9SRVNPTFZfSF8KKyNkZWZpbmUgX1JFU09MVl9IXworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8YXJwYS9uYW1lc2VyLmg+CisKK19fQkVHSU5fREVDTFMKKworc3RydWN0IHJlc19zdGF0ZTsKKworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfc3RhdGUodm9pZCk7CisjZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQorCisvKiBCYXNlLTY0IGZ1bmN0aW9ucyAtIGJlY2F1c2Ugc29tZSBjb2RlIGV4cGVjdHMgaXQgdGhlcmUgKi8KKworI2RlZmluZSBiNjRfbnRvcCAgICAgICAgX19iNjRfbnRvcAorI2RlZmluZSBiNjRfcHRvbiAgICAgICAgX19iNjRfcHRvbgorZXh0ZXJuIGludCAgIGI2NF9udG9wKHVfY2hhciBjb25zdCAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICBiNjRfcHRvbihjaGFyIGNvbnN0ICosIHVfY2hhciAqLCBzaXplX3QpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1JFU09MVl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NjaGVkLmggYi9saWJjL2luY2x1ZGUvc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NjAwYmFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3NjaGVkLmgKQEAgLTAsMCArMSw3NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU0NIRURfSF8KKyNkZWZpbmUgX1NDSEVEX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU0NIRURfTk9STUFMICAgICAgICAgICAgMAorI2RlZmluZSBTQ0hFRF9PVEhFUiAgICAgICAgICAgICAwCisjZGVmaW5lIFNDSEVEX0ZJRk8gICAgICAgICAgICAgIDEKKyNkZWZpbmUgU0NIRURfUlIgICAgICAgICAgICAgICAgMgorCitzdHJ1Y3Qgc2NoZWRfcGFyYW0geworICAgIGludCBzY2hlZF9wcmlvcml0eTsKK307CisKK2V4dGVybiBpbnQgc2NoZWRfc2V0c2NoZWR1bGVyKHBpZF90LCBpbnQsIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqKTsKK2V4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyKHBpZF90KTsKK2V4dGVybiBpbnQgc2NoZWRfeWllbGQodm9pZCk7CitleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXgoaW50IHBvbGljeSk7CitleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9taW4oaW50IHBvbGljeSk7CitleHRlcm4gaW50IHNjaGVkX3NldHBhcmFtKHBpZF90LCBjb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CitleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtKHBpZF90LCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKik7CitleHRlcm4gaW50IHNjaGVkX3JyX2dldF9pbnRlcnZhbChwaWRfdCBwaWQsIHN0cnVjdCB0aW1lc3BlYyAqdHApOworCisjZGVmaW5lIENMT05FX1ZNICAgICAgICAgICAgIDB4MDAwMDAxMDAKKyNkZWZpbmUgQ0xPTkVfRlMgICAgICAgICAgICAgMHgwMDAwMDIwMAorI2RlZmluZSBDTE9ORV9GSUxFUyAgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIENMT05FX1NJR0hBTkQgICAgICAgIDB4MDAwMDA4MDAKKyNkZWZpbmUgQ0xPTkVfUFRSQUNFICAgICAgICAgMHgwMDAwMjAwMAorI2RlZmluZSBDTE9ORV9WRk9SSyAgICAgICAgICAweDAwMDA0MDAwCisjZGVmaW5lIENMT05FX1BBUkVOVCAgICAgICAgIDB4MDAwMDgwMDAKKyNkZWZpbmUgQ0xPTkVfVEhSRUFEICAgICAgICAgMHgwMDAxMDAwMAorI2RlZmluZSBDTE9ORV9ORVdOUyAgICAgICAgICAweDAwMDIwMDAwCisjZGVmaW5lIENMT05FX1NZU1ZTRU0gICAgICAgIDB4MDAwNDAwMDAKKyNkZWZpbmUgQ0xPTkVfU0VUVExTICAgICAgICAgMHgwMDA4MDAwMAorI2RlZmluZSBDTE9ORV9QQVJFTlRfU0VUVElEICAweDAwMTAwMDAwCisjZGVmaW5lIENMT05FX0NISUxEX0NMRUFSVElEIDB4MDAyMDAwMDAKKyNkZWZpbmUgQ0xPTkVfREVUQUNIRUQgICAgICAgMHgwMDQwMDAwMAorI2RlZmluZSBDTE9ORV9VTlRSQUNFRCAgICAgICAweDAwODAwMDAwCisjZGVmaW5lIENMT05FX0NISUxEX1NFVFRJRCAgIDB4MDEwMDAwMDAKKyNkZWZpbmUgQ0xPTkVfU1RPUFBFRCAgICAgICAgMHgwMjAwMDAwMAorCitleHRlcm4gaW50ICAgIGNsb25lKGludCAoKmZuKSh2b2lkKiksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZyk7CitleHRlcm4gcGlkX3QgIF9fY2xvbmUoaW50LCB2b2lkICopOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NDSEVEX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmggYi9saWJjL2luY2x1ZGUvc2VtYXBob3JlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmRjNDAxYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zZW1hcGhvcmUuaApAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TRU1BUEhPUkVfSAorI2RlZmluZSBfU0VNQVBIT1JFX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB2b2xhdGlsZSB1bnNpZ25lZCBpbnQgIGNvdW50OworfSBzZW1fdDsKKworI2RlZmluZSAgU0VNX0ZBSUxFRCAgTlVMTAorCitleHRlcm4gaW50IHNlbV9pbml0KHNlbV90ICpzZW0sIGludCBwc2hhcmVkLCB1bnNpZ25lZCBpbnQgdmFsdWUpOworCitleHRlcm4gaW50ICAgIHNlbV9jbG9zZShzZW1fdCAqKTsKK2V4dGVybiBpbnQgICAgc2VtX2Rlc3Ryb3koc2VtX3QgKik7CitleHRlcm4gaW50ICAgIHNlbV9nZXR2YWx1ZShzZW1fdCAqLCBpbnQgKik7CitleHRlcm4gaW50ICAgIHNlbV9pbml0KHNlbV90ICosIGludCwgdW5zaWduZWQgaW50KTsKK2V4dGVybiBzZW1fdCAqc2VtX29wZW4oY29uc3QgY2hhciAqLCBpbnQsIC4uLik7CitleHRlcm4gaW50ICAgIHNlbV9wb3N0KHNlbV90ICopOworZXh0ZXJuIGludCAgICBzZW1fdHJ5d2FpdChzZW1fdCAqKTsKK2V4dGVybiBpbnQgICAgc2VtX3VubGluayhjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICBzZW1fd2FpdChzZW1fdCAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TRU1BUEhPUkVfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NldGptcC5oIGIvbGliYy9pbmNsdWRlL3NldGptcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYTE5N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc2V0am1wLmgKQEAgLTAsMCArMSw3OCBAQAorLyoJJE9wZW5CU0Q6IHNldGptcC5oLHYgMS41IDIwMDUvMTIvMTMgMDA6MzU6MjIgbWlsbGVydCBFeHAgJAkqLworLyoJJE5ldEJTRDogc2V0am1wLmgsdiAxLjExIDE5OTQvMTIvMjAgMTA6MzU6NDQgY2dkIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylzZXRqbXAuaAk4LjIgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfU0VUSk1QX0hfCisjZGVmaW5lIF9TRVRKTVBfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG1hY2hpbmUvc2V0am1wLmg+CisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCit0eXBlZGVmIGxvbmcgc2lnam1wX2J1ZltfSkJMRU4gKyAxXTsKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFICovCisKK3R5cGVkZWYgbG9uZyBqbXBfYnVmW19KQkxFTl07CisKK19fQkVHSU5fREVDTFMKKworLyogQklPTklDIFNQRUNJQUw6IHdlICpkb24ndCogc2F2ZSB0aGUgc2lnbmFsIG1hc2sgaW4gc2V0am1wL2xvbmdqbXAKKyAqICAgICAgICAgICAgICAgICB0aGlzIG1lYW5zIHdlIGNvbXBseSB3aXRoIEFOU0ksIG5vdCB3aXRoIFBPU0lYLCBhbmQKKyAqICAgICAgICAgICAgICAgICBvdXIgcnVudGltZSBydW5zIHdlbGwgaW5zdGVhZCBvZiBnZXR0aW5nIHN0dWNrCisgKi8KKyNpZiAxCisjZGVmaW5lICBzZXRqbXAoeCkgICBfc2V0am1wKHgpCisjZGVmaW5lICBsb25nam1wKHgseSkgIF9sb25nam1wKHgseSkKKyNlbHNlCitpbnQJc2V0am1wKGptcF9idWYpOwordm9pZAlsb25nam1wKGptcF9idWYsIGludCk7CisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUKK2ludAlzaWdzZXRqbXAoc2lnam1wX2J1ZiwgaW50KTsKK3ZvaWQJc2lnbG9uZ2ptcChzaWdqbXBfYnVmLCBpbnQpOworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgfHwgX19QT1NJWF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQoraW50CV9zZXRqbXAoam1wX2J1Zik7Cit2b2lkCV9sb25nam1wKGptcF9idWYsIGludCk7Cit2b2lkCWxvbmdqbXBlcnJvcih2b2lkKTsKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fWFBHX1ZJU0lCTEUgKi8KK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX1NFVEpNUF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3NndHR5LmggYi9saWJjL2luY2x1ZGUvc2d0dHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYWMzMTAwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3NndHR5LmgKQEAgLTAsMCArMSw0OCBAQAorLyoJJE5ldEJTRDogc2d0dHkuaCx2IDEuOCAyMDA1LzAyLzAzIDA0OjM5OjMyIHBlcnJ5IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpc2d0dHkuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqLworCisjaWZuZGVmIF9TR1RUWV9IXworI2RlZmluZSBfU0dUVFlfSF8KKworI2lmbmRlZiBVU0VfT0xEX1RUWQorI2RlZmluZQlVU0VfT0xEX1RUWQorI2VuZGlmCisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKK2ludCBndHR5KGludCwgc3RydWN0IHNndHR5YiAqKTsKK2ludCBzdHR5KGludCwgc3RydWN0IHNndHR5YiAqKTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU0dUVFlfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zaGExLmggYi9saWJjL2luY2x1ZGUvc2hhMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3YWRhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc2hhMS5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCSROZXRCU0Q6IHNoYTEuaCx2IDEuMTMgMjAwNS8xMi8yNiAxODo0MTozNiBwZXJyeSBFeHAgJAkqLworCisvKgorICogU0hBLTEgaW4gQworICogQnkgU3RldmUgUmVpZCA8c3RldmVAZWRtd2ViLmNvbT4KKyAqIDEwMCUgUHVibGljIERvbWFpbgorICovCisKKyNpZm5kZWYgX1NZU19TSEExX0hfCisjZGVmaW5lCV9TWVNfU0hBMV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNkZWZpbmUgU0hBMV9ESUdFU1RfTEVOR1RICQkyMAorI2RlZmluZSBTSEExX0RJR0VTVF9TVFJJTkdfTEVOR1RICTQxCisKK3R5cGVkZWYgc3RydWN0IHsKKwl1aW50MzJfdCBzdGF0ZVs1XTsKKwl1aW50MzJfdCBjb3VudFsyXTsKKwl1X2NoYXIgYnVmZmVyWzY0XTsKK30gU0hBMV9DVFg7CisKK19fQkVHSU5fREVDTFMKK3ZvaWQJU0hBMVRyYW5zZm9ybSh1aW50MzJfdFs1XSwgY29uc3QgdV9jaGFyWzY0XSk7Cit2b2lkCVNIQTFJbml0KFNIQTFfQ1RYICopOwordm9pZAlTSEExVXBkYXRlKFNIQTFfQ1RYICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Cit2b2lkCVNIQTFGaW5hbCh1X2NoYXJbU0hBMV9ESUdFU1RfTEVOR1RIXSwgU0hBMV9DVFggKik7CitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TSEExX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc2lnbmFsLmggYi9saWJjL2luY2x1ZGUvc2lnbmFsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRkYTg0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zaWduYWwuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU0lHTkFMX0hfCisjZGVmaW5lIF9TSUdOQUxfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgkJLyogRm9yIExPTkdfQklUICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CQkvKiBGb3IgbWVtc2V0KCkgKi8KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKKyNkZWZpbmUgX19BUkNIX1NJX1VJRF9UIF9fa2VybmVsX3VpZDMyX3QKKyNpbmNsdWRlIDxhc20vc2lnaW5mby5oPgorI3VuZGVmIF9fQVJDSF9TSV9VSURfVAorCitfX0JFR0lOX0RFQ0xTCisKK3R5cGVkZWYgaW50IHNpZ19hdG9taWNfdDsKKworLyogY3JlcHkgTklHIC8gX05TSUcgaGFuZGxpbmcsIGp1c3QgdG8gYmUgc2FmZSAqLworI2lmbmRlZiBOU0lHCisjICBkZWZpbmUgTlNJRyAgX05TSUcKKyNlbmRpZgorI2lmbmRlZiBfTlNJRworIyAgZGVmaW5lIF9OU0lHICBOU0lHCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBzeXNfc2lnbGlzdFtdOworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnaXNtZW1iZXIoc2lnc2V0X3QgKnNldCwgaW50IHNpZ251bSkKK3sKKyAgICB1bnNpZ25lZCBsb25nICpsb2NhbF9zZXQgPSAodW5zaWduZWQgbG9uZyAqKXNldDsKKyAgICBzaWdudW0tLTsKKyAgICByZXR1cm4gKGludCkoKGxvY2FsX3NldFtzaWdudW0vTE9OR19CSVRdID4+IChzaWdudW0lTE9OR19CSVQpKSAmIDEpOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IHNpZ251bSkKK3sKKyAgICB1bnNpZ25lZCBsb25nICpsb2NhbF9zZXQgPSAodW5zaWduZWQgbG9uZyAqKXNldDsKKyAgICBzaWdudW0tLTsKKyAgICBsb2NhbF9zZXRbc2lnbnVtL0xPTkdfQklUXSB8PSAxVUwgPDwgKHNpZ251bSVMT05HX0JJVCk7CisgICAgcmV0dXJuIDA7Cit9CisKKworc3RhdGljIF9faW5saW5lX18gaW50IHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQgc2lnbnVtKQoreworICAgIHVuc2lnbmVkIGxvbmcgKmxvY2FsX3NldCA9ICh1bnNpZ25lZCBsb25nICopc2V0OworICAgIHNpZ251bS0tOworICAgIGxvY2FsX3NldFtzaWdudW0vTE9OR19CSVRdICY9IH4oMVVMIDw8IChzaWdudW0lTE9OR19CSVQpKTsKKyAgICByZXR1cm4gMDsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCkKK3sKKyAgICBtZW1zZXQoc2V0LCAwLCBzaXplb2YgKnNldCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBzaWdmaWxsc2V0KHNpZ3NldF90ICpzZXQpCit7CisgICAgbWVtc2V0KHNldCwgfjAsIHNpemVvZiAqc2V0KTsKKyAgICByZXR1cm4gMDsKK30KKworCisvKiBjb21wYXRpYmlsaXR5IHR5cGVzICovCit0eXBlZGVmIHZvaWQgICgqc2lnX3QpKGludCk7Cit0eXBlZGVmIHNpZ190IHNpZ2hhbmRsZXJfdDsKKworLyogZGlmZmVyZW50aWF0ZXIgYmV0d2VlbiBzeXN2IGFuZCBic2QgYmVoYXZpb3VyIDgqLworZXh0ZXJuIF9fc2lnaGFuZGxlcl90IHN5c3Zfc2lnbmFsKGludCwgX19zaWdoYW5kbGVyX3QpOworZXh0ZXJuIF9fc2lnaGFuZGxlcl90IGJzZF9zaWduYWwoaW50LCBfX3NpZ2hhbmRsZXJfdCk7CisKKy8qIHRoZSBkZWZhdWx0IGlzIGJzZCAqLworc3RhdGljIF9faW5saW5lX18gX19zaWdoYW5kbGVyX3Qgc2lnbmFsKGludCBzLCBfX3NpZ2hhbmRsZXJfdCBmKQoreworICAgIHJldHVybiBic2Rfc2lnbmFsKHMsZik7Cit9CisKKy8qIHRoZSBzeXNjYWxsIGl0c2VsZiAqLworZXh0ZXJuIF9fc2lnaGFuZGxlcl90IF9fc2lnbmFsKGludCwgX19zaWdoYW5kbGVyX3QsIGludCk7CisKK2V4dGVybiBpbnQgc2lncHJvY21hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKK2V4dGVybiBpbnQgc2lnYWN0aW9uKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBzdHJ1Y3Qgc2lnYWN0aW9uICopOworCitleHRlcm4gaW50IHNpZ3BlbmRpbmcoc2lnc2V0X3QgKik7CitleHRlcm4gaW50IHNpZ3N1c3BlbmQoY29uc3Qgc2lnc2V0X3QgKik7CitleHRlcm4gaW50IHNpZ3dhaXQoY29uc3Qgc2lnc2V0X3QgKnNldCwgaW50ICpzaWcpOworCitleHRlcm4gaW50IHJhaXNlKGludCk7CitleHRlcm4gaW50IGtpbGwocGlkX3QsIGludCk7CisKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TSUdOQUxfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpbnQuaCBiL2xpYmMvaW5jbHVkZS9zdGRpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2YzMmI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGludC5oCkBAIC0wLDAgKzEsMjU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TVERJTlRfSAorI2RlZmluZSBfU1RESU5UX0gKKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN5cy9fdHlwZXMuaD4KKworCisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX1NURENfTElNSVRfTUFDUk9TKQorIyAgZGVmaW5lIF9fU1RESU5UX0xJTUlUUworI2VuZGlmCisKKyNpZiAhZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX1NURENfQ09OU1RBTlRfTUFDUk9TKQorIyAgZGVmaW5lICBfX1NURElOVF9NQUNST1MKKyNlbmRpZgorCit0eXBlZGVmIF9faW50OF90ICAgICAgaW50OF90OwordHlwZWRlZiBfX3VpbnQ4X3QgICAgIHVpbnQ4X3Q7Cit0eXBlZGVmIF9faW50MTZfdCAgICAgaW50MTZfdDsKK3R5cGVkZWYgX191aW50MTZfdCAgICB1aW50MTZfdDsKK3R5cGVkZWYgX19pbnQzMl90ICAgICBpbnQzMl90OwordHlwZWRlZiBfX3VpbnQzMl90ICAgIHVpbnQzMl90OworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX19pbnQ2NF90ICAgICBpbnQ2NF90OwordHlwZWRlZiBfX3VpbnQ2NF90ICAgIHVpbnQ2NF90OworI2VuZGlmCisKKy8qCisgKiBpbnQ4X3QgJiB1aW50OF90CisgKi8KKwordHlwZWRlZiBpbnQ4X3QgICAgICAgIGludF9sZWFzdDhfdDsKK3R5cGVkZWYgaW50OF90ICAgICAgICBpbnRfZmFzdDhfdDsKKwordHlwZWRlZiB1aW50OF90ICAgICAgIHVpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVmIHVpbnQ4X3QgICAgICAgdWludF9mYXN0OF90OworCisjaWZkZWYgX19TVERJTlRfTElNSVRTCisjICBkZWZpbmUgSU5UOF9NSU4gICAgICAgICAoLTEyOCkKKyMgIGRlZmluZSBJTlQ4X01BWCAgICAgICAgICgxMjcpCisjICBkZWZpbmUgSU5UX0xFQVNUOF9NSU4gICBJTlQ4X01JTgorIyAgZGVmaW5lIElOVF9MRUFTVDhfTUFYICAgSU5UOF9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDhfTUlOICAgIElOVDhfTUlOCisjICBkZWZpbmUgSU5UX0ZBU1Q4X01BWCAgICBJTlQ4X01BWAorCisjICBkZWZpbmUgVUlOVDhfTUFYICAgICAgICAgICAoMjU1VSkKKyMgIGRlZmluZSBVSU5UX0xFQVNUOF9NQVggICAgIFVJTlQ4X01BWAorIyAgZGVmaW5lIFVJTlRfRkFTVDhfTUFYICAgICAgVUlOVDhfTUFYCisjZW5kaWYKKworI2lmZGVmIF9fU1RESU5UX01BQ1JPUworIyAgZGVmaW5lIElOVDhfQyhjKQljCisjICBkZWZpbmUgSU5UX0xFQVNUOF9DKGMpCSBJTlQ4X0MoYykKKyMgIGRlZmluZSBJTlRfRkFTVDhfQyhjKQlJTlQ4X0MoYykKKworIyAgZGVmaW5lIFVJTlQ4X0MoYykJYyAjIyBVCisjICBkZWZpbmUgVUlOVF9MRUFTVDhfQyhjKSAgVUlOVDhfQyhjKQorIyAgZGVmaW5lIFVJTlRfRkFTVDhfQyhjKSAgVUlOVDhfQyhjKQorI2VuZGlmCisKKy8qCisgKiBpbnQxNl90ICYgdWludDE2X3QKKyAqLworCisKK3R5cGVkZWYgaW50MTZfdCAgICAgICBpbnRfbGVhc3QxNl90OwordHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9mYXN0MTZfdDsKKwordHlwZWRlZiB1aW50MTZfdCAgICAgIHVpbnRfbGVhc3QxNl90OwordHlwZWRlZiB1aW50MzJfdCAgICAgIHVpbnRfZmFzdDE2X3Q7CisKKyNpZmRlZiBfX1NURElOVF9MSU1JVFMKKyMgIGRlZmluZSBJTlQxNl9NSU4JKC0zMjc2OCkKKyMgIGRlZmluZSBJTlQxNl9NQVgJKDMyNzY3KQorIyAgZGVmaW5lIElOVF9MRUFTVDE2X01JTglJTlQxNl9NSU4KKyMgIGRlZmluZSBJTlRfTEVBU1QxNl9NQVgJSU5UMTZfTUFYCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9NSU4JSU5UMzJfTUlOCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9NQVgJSU5UMzJfTUFYCisKKyMgIGRlZmluZSBVSU5UMTZfTUFYCSg2NTUzNVUpCisjICBkZWZpbmUgVUlOVF9MRUFTVDE2X01BWCBVSU5UMTZfTUFYCisjICBkZWZpbmUgVUlOVF9GQVNUMTZfTUFYIFVJTlQzMl9NQVgKKyNlbmRpZgorCisjaWZkZWYgX19TVERJTlRfTUFDUk9TCisjICBkZWZpbmUgSU5UMTZfQyhjKQljCisjICBkZWZpbmUgSU5UX0xFQVNUMTZfQyhjKSBJTlQxNl9DKGMpCisjICBkZWZpbmUgSU5UX0ZBU1QxNl9DKGMpCSBJTlQzMl9DKGMpCisKKyMgIGRlZmluZSBVSU5UMTZfQyhjKQljICMjIFUKKyMgIGRlZmluZSBVSU5UX0xFQVNUMTZfQyhjKSBVSU5UMTZfQyhjKQorIyAgZGVmaW5lIFVJTlRfRkFTVDE2X0MoYykgVUlOVDMyX0MoYykKKyNlbmRpZgorCisvKgorICogaW50MzJfdCAmIHVpbnQzMl90CisgKi8KKwordHlwZWRlZiBpbnQzMl90ICAgICAgIGludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIGludDMyX3QgICAgICAgaW50X2Zhc3QzMl90OworCit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9sZWFzdDMyX3Q7Cit0eXBlZGVmIHVpbnQzMl90ICAgICAgdWludF9mYXN0MzJfdDsKKworI2lmZGVmIF9fU1RESU5UX0xJTUlUUworIyAgZGVmaW5lIElOVDMyX01JTgkoLTIxNDc0ODM2NDctMSkKKyMgIGRlZmluZSBJTlQzMl9NQVgJKDIxNDc0ODM2NDcpCisjICBkZWZpbmUgSU5UX0xFQVNUMzJfTUlOCUlOVDMyX01JTgorIyAgZGVmaW5lIElOVF9MRUFTVDMyX01BWAlJTlQzMl9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDMyX01JTglJTlQzMl9NSU4KKyMgIGRlZmluZSBJTlRfRkFTVDMyX01BWAlJTlQzMl9NQVgKKworIyAgZGVmaW5lIFVJTlQzMl9NQVgJKDQyOTQ5NjcyOTVVKQorIyAgZGVmaW5lIFVJTlRfTEVBU1QzMl9NQVggVUlOVDMyX01BWAorIyAgZGVmaW5lIFVJTlRfRkFTVDMyX01BWCBVSU5UMzJfTUFYCisjZW5kaWYKKworI2lmZGVmIF9fU1RESU5UX01BQ1JPUworIyAgZGVmaW5lIElOVDMyX0MoYykJYworIyAgZGVmaW5lIElOVF9MRUFTVDMyX0MoYykgSU5UMzJfQyhjKQorIyAgZGVmaW5lIElOVF9GQVNUMzJfQyhjKSAgSU5UMzJfQyhjKQorCisjICBkZWZpbmUgVUlOVDMyX0MoYykJYyAjIyBVCisjICBkZWZpbmUgVUlOVF9MRUFTVDMyX0MoYykgVUlOVDMyX0MoYykKKyMgIGRlZmluZSBVSU5UX0ZBU1QzMl9DKGMpIFVJTlQzMl9DKGMpCisjZW5kaWYKKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKy8qCisgKiAgaW50NjRfdAorICovCit0eXBlZGVmIGludDY0X3QgICAgICAgaW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgaW50NjRfdCAgICAgICBpbnRfZmFzdDY0X3Q7CisKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2xlYXN0NjRfdDsKK3R5cGVkZWYgdWludDY0X3QgICAgICB1aW50X2Zhc3Q2NF90OworCisKKyNpZmRlZiBfX1NURElOVF9MSU1JVFMKKyMgIGRlZmluZSBJTlQ2NF9NSU4gICAgICAgIChfX0lOVDY0X0MoLTkyMjMzNzIwMzY4NTQ3NzU4MDcpLTEpCisjICBkZWZpbmUgSU5UNjRfTUFYICAgICAgICAoX19JTlQ2NF9DKDkyMjMzNzIwMzY4NTQ3NzU4MDcpKQorIyAgZGVmaW5lIElOVF9MRUFTVDY0X01JTiAgSU5UNjRfTUlOCisjICBkZWZpbmUgSU5UX0xFQVNUNjRfTUFYICBJTlQ2NF9NQVgKKyMgIGRlZmluZSBJTlRfRkFTVDY0X01JTiAgIElOVDY0X01JTgorIyAgZGVmaW5lIElOVF9GQVNUNjRfTUFYICAgSU5UNjRfTUFYCisjICBkZWZpbmUgVUlOVDY0X01BWCAgICAgICAoX19VSU5UNjRfQygxODQ0Njc0NDA3MzcwOTU1MTYxNSkpCisKKyMgIGRlZmluZSBVSU5UX0xFQVNUNjRfTUFYIFVJTlQ2NF9NQVgKKyMgIGRlZmluZSBVSU5UX0ZBU1Q2NF9NQVggVUlOVDY0X01BWAorI2VuZGlmCisKKyNpZmRlZiBfX1NURElOVF9NQUNST1MKKyMgIGRlZmluZSBfX0lOVDY0X0MoYykgICAgIGMgIyMgTEwKKyMgIGRlZmluZSBJTlQ2NF9DKGMpICAgICAgIF9fSU5UNjRfQyhjKQorIyAgZGVmaW5lIElOVF9MRUFTVDY0X0MoYykgSU5UNjRfQyhjKQorIyAgZGVmaW5lIElOVF9GQVNUNjRfQyhjKSAgSU5UNjRfQyhjKQorCisjICBkZWZpbmUgX19VSU5UNjRfQyhjKSAgICAgYyAjIyBVTEwKKyMgIGRlZmluZSBVSU5UNjRfQyhjKSAgICAgICBfX1VJTlQ2NF9DKGMpCisjICBkZWZpbmUgVUlOVF9MRUFTVDY0X0MoYykgVUlOVDY0X0MoYykKKyMgIGRlZmluZSBVSU5UX0ZBU1Q2NF9DKGMpICBVSU5UNjRfQyhjKQorI2VuZGlmCisKKworIyAgZGVmaW5lIF9fUFJJNjRfUkFOSyAgICJsbCIKKyMgIGRlZmluZSBfX1BSSUZBU1RfUkFOSyAiIgorIyAgZGVmaW5lIF9fUFJJUFRSX1JBTksgICIiCisKKyNlbmRpZiAvKiAhX19TVFJJQ1RfQU5TSV9fICovCisKKy8qCisgKiBpbnRwdHJfdCAmIHVpbnRwdHJfdAorICovCisKK3R5cGVkZWYgaW50ICAgICAgICAgICBpbnRwdHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICB1aW50cHRyX3Q7CisKKyMgIGRlZmluZSBJTlRQVFJfTUlOICAgIElOVDMyX01JTgorIyAgZGVmaW5lIElOVFBUUl9NQVggICAgSU5UMzJfTUFYCisjICBkZWZpbmUgVUlOVFBUUl9NQVggICBVSU5UMzJfTUFYCisjICBkZWZpbmUgSU5UUFRSX0MoYykgICBJTlQzMl9DKGMpCisjICBkZWZpbmUgVUlOVFBUUl9DKGMpICBVSU5UMzJfQyhjKQorIyAgZGVmaW5lIFBUUkRJRkZfQyhjKSAgSU5UMzJfQyhjKQorIyAgZGVmaW5lIFBUUkRJRkZfTUlOICAgSU5UMzJfTUlOCisjICBkZWZpbmUgUFRSRElGRl9NQVggICBJTlQzMl9NQVgKKworCisvKgorICogIGludG1heF90ICYgdWludG1heF90CisgKi8KKworI2lmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKKwordHlwZWRlZiB1aW50NjRfdCB1aW50bWF4X3Q7Cit0eXBlZGVmIGludDY0X3QgIGludG1heF90OworCisjZGVmaW5lIElOVE1BWF9NSU4JSU5UNjRfTUlOCisjZGVmaW5lIElOVE1BWF9NQVgJSU5UNjRfTUFYCisjZGVmaW5lIFVJTlRNQVhfTUFYCVVJTlQ2NF9NQVgKKworI2RlZmluZSBJTlRNQVhfQyhjKQlJTlQ2NF9DKGMpCisjZGVmaW5lIFVJTlRNQVhfQyhjKQlVSU5UNjRfQyhjKQorCisjZWxzZSAvKiBfX1NUUklDVF9BTlNJX18gKi8KKwordHlwZWRlZiB1aW50MzJfdCAgdWludG1heF90OwordHlwZWRlZiBpbnQzMl90ICAgaW50bWF4X3Q7CisKKyNkZWZpbmUgIElOVE1BWF9NSU4gICAgSU5UMzJfTUlOCisjZGVmaW5lICBJTlRNQVhfTUFYICAgIElOVDMyX01BWAorI2RlZmluZSAgVUlOVE1BWF9NQVggICBVSU5UMzJfTUFYCisKKyNkZWZpbmUgSU5UTUFYX0MoYykJSU5UMzJfQyhjKQorI2RlZmluZSBVSU5UTUFYX0MoYykJVUlOVDMyX0MoYykKKworI2VuZGlmIC8qIF9fU1RSSUNUX0FOU0lfXyAqLworCisKKy8qIHNpemVfdCBpcyBkZWZpbmVkIGJ5IHRoZSBHQ0Mtc3BlY2lmaWMgPHN0ZGRlZi5oPiAqLworI2lmbmRlZiBfU1NJWkVfVF9ERUZJTkVEXworI2RlZmluZSBfU1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZiBsb25nIGludCAgc3NpemVfdDsKKyNlbmRpZgorCisjZGVmaW5lIF9CSVRTSVpFIDMyCisKKy8qIEtlZXAgdGhlIGtlcm5lbCBmcm9tIHRyeWluZyB0byBkZWZpbmUgdGhlc2UgdHlwZXMuLi4gKi8KKyNkZWZpbmUgX19CSVRfVFlQRVNfREVGSU5FRF9fCisKKyNlbmRpZiAvKiBfU1RESU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRpby5oIGIvbGliYy9pbmNsdWRlL3N0ZGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWY2MmQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zdGRpby5oCkBAIC0wLDAgKzEsNDMzIEBACisvKgkkT3BlbkJTRDogc3RkaW8uaCx2IDEuMzUgMjAwNi8wMS8xMyAxODoxMDowOSBtaW9kIEV4cCAkCSovCisvKgkkTmV0QlNEOiBzdGRpby5oLHYgMS4xOCAxOTk2LzA0LzI1IDE4OjI5OjIxIGp0YyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXN0ZGlvLmgJNS4xNyAoQmVya2VsZXkpIDYvMy85MQorICovCisKKyNpZm5kZWYJX1NURElPX0hfCisjZGVmaW5lCV9TVERJT19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL190eXBlcy5oPgorCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1BPU0lYX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgkvKiBYWFggc2hvdWxkIGJlIHJlbW92ZWQgKi8KKyNlbmRpZgorCisjaWZuZGVmCV9TSVpFX1RfREVGSU5FRF8KKyNkZWZpbmUJX1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZgl1bnNpZ25lZCBsb25nICAgIHNpemVfdDsKKyNlbmRpZgorCisjaWZuZGVmCV9PRkZfVF9ERUZJTkVEXworI2RlZmluZQlfT0ZGX1RfREVGSU5FRF8KK3R5cGVkZWYJbG9uZyAgICBvZmZfdDsKKyNlbmRpZgorCisjaWZuZGVmIE5VTEwKKyNpZmRlZiAJX19HTlVHX18KKyNkZWZpbmUJTlVMTAlfX251bGwKKyNlbHNlCisjZGVmaW5lCU5VTEwJMEwKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUJX0ZTVERJTwkJCS8qIERlZmluZSBmb3IgbmV3IHN0ZGlvIHdpdGggZnVuY3Rpb25zLiAqLworCit0eXBlZGVmIG9mZl90IGZwb3NfdDsJCS8qIHN0ZGlvIGZpbGUgcG9zaXRpb24gdHlwZSAqLworCisvKgorICogTkI6IHRvIGZpdCB0aGluZ3MgaW4gc2l4IGNoYXJhY3RlciBtb25vY2FzZSBleHRlcm5hbHMsIHRoZSBzdGRpbworICogY29kZSB1c2VzIHRoZSBwcmVmaXggYF9fcycgZm9yIHN0ZGlvIG9iamVjdHMsIHR5cGljYWxseSBmb2xsb3dlZAorICogYnkgYSB0aHJlZS1jaGFyYWN0ZXIgYXR0ZW1wdCBhdCBhIG1uZW1vbmljLgorICovCisKKy8qIHN0ZGlvIGJ1ZmZlcnMgKi8KK3N0cnVjdCBfX3NidWYgeworCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCWludAlfc2l6ZTsKK307CisKKy8qCisgKiBzdGRpbyBzdGF0ZSB2YXJpYWJsZXMuCisgKgorICogVGhlIGZvbGxvd2luZyBhbHdheXMgaG9sZDoKKyAqCisgKglpZiAoX2ZsYWdzJihfX1NMQkZ8X19TV1IpKSA9PSAoX19TTEJGfF9fU1dSKSwKKyAqCQlfbGJmc2l6ZSBpcyAtX2JmLl9zaXplLCBlbHNlIF9sYmZzaXplIGlzIDAKKyAqCWlmIF9mbGFncyZfX1NSRCwgX3cgaXMgMAorICoJaWYgX2ZsYWdzJl9fU1dSLCBfciBpcyAwCisgKgorICogVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGdldGMgYW5kIHB1dGMgbWFjcm9zIChvciBpbmxpbmUgZnVuY3Rpb25zKSBuZXZlcgorICogdHJ5IHRvIHdyaXRlIG9yIHJlYWQgZnJvbSBhIGZpbGUgdGhhdCBpcyBpbiBgcmVhZCcgb3IgYHdyaXRlJyBtb2RlLgorICogKE1vcmVvdmVyLCB0aGV5IGNhbiwgYW5kIGRvLCBhdXRvbWF0aWNhbGx5IHN3aXRjaCBmcm9tIHJlYWQgbW9kZSB0bworICogd3JpdGUgbW9kZSwgYW5kIGJhY2ssIG9uICJyKyIgYW5kICJ3KyIgZmlsZXMuKQorICoKKyAqIF9sYmZzaXplIGlzIHVzZWQgb25seSB0byBtYWtlIHRoZSBpbmxpbmUgbGluZS1idWZmZXJlZCBvdXRwdXQgc3RyZWFtCisgKiBjb2RlIGFzIGNvbXBhY3QgYXMgcG9zc2libGUuCisgKgorICogX3ViLCBfdXAsIGFuZCBfdXIgYXJlIHVzZWQgd2hlbiB1bmdldGMoKSBwdXNoZXMgYmFjayBtb3JlIGNoYXJhY3RlcnMKKyAqIHRoYW4gZml0IGluIHRoZSBjdXJyZW50IF9iZiwgb3Igd2hlbiB1bmdldGMoKSBwdXNoZXMgYmFjayBhIGNoYXJhY3RlcgorICogdGhhdCBkb2VzIG5vdCBtYXRjaCB0aGUgcHJldmlvdXMgb25lIGluIF9iZi4gIFdoZW4gdGhpcyBoYXBwZW5zLAorICogX3ViLl9iYXNlIGJlY29tZXMgbm9uLW5pbCAoaS5lLiwgYSBzdHJlYW0gaGFzIHVuZ2V0YygpIGRhdGEgaWZmCisgKiBfdWIuX2Jhc2UhPU5VTEwpIGFuZCBfdXAgYW5kIF91ciBzYXZlIHRoZSBjdXJyZW50IHZhbHVlcyBvZiBfcCBhbmQgX3IuCisgKi8KK3R5cGVkZWYJc3RydWN0IF9fc0ZJTEUgeworCXVuc2lnbmVkIGNoYXIgKl9wOwkvKiBjdXJyZW50IHBvc2l0aW9uIGluIChzb21lKSBidWZmZXIgKi8KKwlpbnQJX3I7CQkvKiByZWFkIHNwYWNlIGxlZnQgZm9yIGdldGMoKSAqLworCWludAlfdzsJCS8qIHdyaXRlIHNwYWNlIGxlZnQgZm9yIHB1dGMoKSAqLworCXNob3J0CV9mbGFnczsJCS8qIGZsYWdzLCBiZWxvdzsgdGhpcyBGSUxFIGlzIGZyZWUgaWYgMCAqLworCXNob3J0CV9maWxlOwkJLyogZmlsZW5vLCBpZiBVbml4IGRlc2NyaXB0b3IsIGVsc2UgLTEgKi8KKwlzdHJ1Y3QJX19zYnVmIF9iZjsJLyogdGhlIGJ1ZmZlciAoYXQgbGVhc3QgMSBieXRlLCBpZiAhTlVMTCkgKi8KKwlpbnQJX2xiZnNpemU7CS8qIDAgb3IgLV9iZi5fc2l6ZSwgZm9yIGlubGluZSBwdXRjICovCisKKwkvKiBvcGVyYXRpb25zICovCisJdm9pZAkqX2Nvb2tpZTsJLyogY29va2llIHBhc3NlZCB0byBpbyBmdW5jdGlvbnMgKi8KKwlpbnQJKCpfY2xvc2UpKHZvaWQgKik7CisJaW50CSgqX3JlYWQpKHZvaWQgKiwgY2hhciAqLCBpbnQpOworCWZwb3NfdAkoKl9zZWVrKSh2b2lkICosIGZwb3NfdCwgaW50KTsKKwlpbnQJKCpfd3JpdGUpKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworCisJLyogZXh0ZW5zaW9uIGRhdGEsIHRvIGF2b2lkIGZ1cnRoZXIgQUJJIGJyZWFrYWdlICovCisJc3RydWN0CV9fc2J1ZiBfZXh0OworCS8qIGRhdGEgZm9yIGxvbmcgc2VxdWVuY2VzIG9mIHVuZ2V0YygpICovCisJdW5zaWduZWQgY2hhciAqX3VwOwkvKiBzYXZlZCBfcCB3aGVuIF9wIGlzIGRvaW5nIHVuZ2V0YyBkYXRhICovCisJaW50CV91cjsJCS8qIHNhdmVkIF9yIHdoZW4gX3IgaXMgY291bnRpbmcgdW5nZXRjIGRhdGEgKi8KKworCS8qIHRyaWNrcyB0byBtZWV0IG1pbmltdW0gcmVxdWlyZW1lbnRzIGV2ZW4gd2hlbiBtYWxsb2MoKSBmYWlscyAqLworCXVuc2lnbmVkIGNoYXIgX3VidWZbM107CS8qIGd1YXJhbnRlZSBhbiB1bmdldGMoKSBidWZmZXIgKi8KKwl1bnNpZ25lZCBjaGFyIF9uYnVmWzFdOwkvKiBndWFyYW50ZWUgYSBnZXRjKCkgYnVmZmVyICovCisKKwkvKiBzZXBhcmF0ZSBidWZmZXIgZm9yIGZnZXRsbigpIHdoZW4gbGluZSBjcm9zc2VzIGJ1ZmZlciBib3VuZGFyeSAqLworCXN0cnVjdAlfX3NidWYgX2xiOwkvKiBidWZmZXIgZm9yIGZnZXRsbigpICovCisKKwkvKiBVbml4IHN0ZGlvIGZpbGVzIGdldCBhbGlnbmVkIHRvIGJsb2NrIGJvdW5kYXJpZXMgb24gZnNlZWsoKSAqLworCWludAlfYmxrc2l6ZTsJLyogc3RhdC5zdF9ibGtzaXplIChtYXkgYmUgIT0gX2JmLl9zaXplKSAqLworCWZwb3NfdAlfb2Zmc2V0OwkvKiBjdXJyZW50IGxzZWVrIG9mZnNldCAqLworfSBGSUxFOworCitfX0JFR0lOX0RFQ0xTCitleHRlcm4gRklMRSBfX3NGW107CitfX0VORF9ERUNMUworCisjZGVmaW5lCV9fU0xCRgkweDAwMDEJCS8qIGxpbmUgYnVmZmVyZWQgKi8KKyNkZWZpbmUJX19TTkJGCTB4MDAwMgkJLyogdW5idWZmZXJlZCAqLworI2RlZmluZQlfX1NSRAkweDAwMDQJCS8qIE9LIHRvIHJlYWQgKi8KKyNkZWZpbmUJX19TV1IJMHgwMDA4CQkvKiBPSyB0byB3cml0ZSAqLworCS8qIFJEIGFuZCBXUiBhcmUgbmV2ZXIgc2ltdWx0YW5lb3VzbHkgYXNzZXJ0ZWQgKi8KKyNkZWZpbmUJX19TUlcJMHgwMDEwCQkvKiBvcGVuIGZvciByZWFkaW5nICYgd3JpdGluZyAqLworI2RlZmluZQlfX1NFT0YJMHgwMDIwCQkvKiBmb3VuZCBFT0YgKi8KKyNkZWZpbmUJX19TRVJSCTB4MDA0MAkJLyogZm91bmQgZXJyb3IgKi8KKyNkZWZpbmUJX19TTUJGCTB4MDA4MAkJLyogX2J1ZiBpcyBmcm9tIG1hbGxvYyAqLworI2RlZmluZQlfX1NBUFAJMHgwMTAwCQkvKiBmZG9wZW4oKWVkIGluIGFwcGVuZCBtb2RlICovCisjZGVmaW5lCV9fU1NUUgkweDAyMDAJCS8qIHRoaXMgaXMgYW4gc3ByaW50Zi9zbnByaW50ZiBzdHJpbmcgKi8KKyNkZWZpbmUJX19TT1BUCTB4MDQwMAkJLyogZG8gZnNlZWsoKSBvcHRpbWlzYXRpb24gKi8KKyNkZWZpbmUJX19TTlBUCTB4MDgwMAkJLyogZG8gbm90IGRvIGZzZWVrKCkgb3B0aW1pc2F0aW9uICovCisjZGVmaW5lCV9fU09GRgkweDEwMDAJCS8qIHNldCBpZmYgX29mZnNldCBpcyBpbiBmYWN0IGNvcnJlY3QgKi8KKyNkZWZpbmUJX19TTU9ECTB4MjAwMAkJLyogdHJ1ZSA9PiBmZ2V0bG4gbW9kaWZpZWQgX3AgdGV4dCAqLworI2RlZmluZQlfX1NBTEMJMHg0MDAwCQkvKiBhbGxvY2F0ZSBzdHJpbmcgc3BhY2UgZHluYW1pY2FsbHkgKi8KKworLyoKKyAqIFRoZSBmb2xsb3dpbmcgdGhyZWUgZGVmaW5pdGlvbnMgYXJlIGZvciBBTlNJIEMsIHdoaWNoIHRvb2sgdGhlbQorICogZnJvbSBTeXN0ZW0gViwgd2hpY2ggYnJpbGxpYW50bHkgdG9vayBpbnRlcm5hbCBpbnRlcmZhY2UgbWFjcm9zIGFuZAorICogbWFkZSB0aGVtIG9mZmljaWFsIGFyZ3VtZW50cyB0byBzZXR2YnVmKCksIHdpdGhvdXQgcmVuYW1pbmcgdGhlbS4KKyAqIEhlbmNlLCB0aGVzZSB1Z2x5IF9JT3h4eCBuYW1lcyBhcmUgKnN1cHBvc2VkKiB0byBhcHBlYXIgaW4gdXNlciBjb2RlLgorICoKKyAqIEFsdGhvdWdoIG51bWJlcmVkIGFzIHRoZWlyIGNvdW50ZXJwYXJ0cyBhYm92ZSwgdGhlIGltcGxlbWVudGF0aW9uCisgKiBkb2VzIG5vdCByZWx5IG9uIHRoaXMuCisgKi8KKyNkZWZpbmUJX0lPRkJGCTAJCS8qIHNldHZidWYgc2hvdWxkIHNldCBmdWxseSBidWZmZXJlZCAqLworI2RlZmluZQlfSU9MQkYJMQkJLyogc2V0dmJ1ZiBzaG91bGQgc2V0IGxpbmUgYnVmZmVyZWQgKi8KKyNkZWZpbmUJX0lPTkJGCTIJCS8qIHNldHZidWYgc2hvdWxkIHNldCB1bmJ1ZmZlcmVkICovCisKKyNkZWZpbmUJQlVGU0laCTEwMjQJCS8qIHNpemUgb2YgYnVmZmVyIHVzZWQgYnkgc2V0YnVmICovCisKKyNkZWZpbmUJRU9GCSgtMSkKKworLyoKKyAqIEZPUEVOX01BWCBpcyBhIG1pbmltdW0gbWF4aW11bSwgYW5kIHNob3VsZCBiZSB0aGUgbnVtYmVyIG9mIGRlc2NyaXB0b3JzCisgKiB0aGF0IHRoZSBrZXJuZWwgY2FuIHByb3ZpZGUgd2l0aG91dCBhbGxvY2F0aW9uIG9mIGEgcmVzb3VyY2UgdGhhdCBjYW4KKyAqIGZhaWwgd2l0aG91dCB0aGUgcHJvY2VzcyBzbGVlcGluZy4gIERvIG5vdCB1c2UgdGhpcyBmb3IgYW55dGhpbmcuCisgKi8KKyNkZWZpbmUJRk9QRU5fTUFYCTIwCS8qIG11c3QgYmUgPD0gT1BFTl9NQVggPHN5cy9zeXNsaW1pdHMuaD4gKi8KKyNkZWZpbmUJRklMRU5BTUVfTUFYCTEwMjQJLyogbXVzdCBiZSA8PSBQQVRIX01BWCA8c3lzL3N5c2xpbWl0cy5oPiAqLworCisvKiBTeXN0ZW0gVi9BTlNJIEM7IHRoaXMgaXMgdGhlIHdyb25nIHdheSB0byBkbyB0aGlzLCBkbyAqbm90KiB1c2UgdGhlc2UuICovCisjaWYgX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCisjZGVmaW5lCVBfdG1wZGlyCSIvdG1wLyIKKyNlbmRpZgorI2RlZmluZQlMX3RtcG5hbQkxMDI0CS8qIFhYWCBtdXN0IGJlID09IFBBVEhfTUFYICovCisjZGVmaW5lCVRNUF9NQVgJCTMwODkxNTc3NgorCisjaWZuZGVmIFNFRUtfU0VUCisjZGVmaW5lCVNFRUtfU0VUCTAJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIG9mZnNldCAqLworI2VuZGlmCisjaWZuZGVmIFNFRUtfQ1VSCisjZGVmaW5lCVNFRUtfQ1VSCTEJLyogc2V0IGZpbGUgb2Zmc2V0IHRvIGN1cnJlbnQgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorI2lmbmRlZiBTRUVLX0VORAorI2RlZmluZQlTRUVLX0VORAkyCS8qIHNldCBmaWxlIG9mZnNldCB0byBFT0YgcGx1cyBvZmZzZXQgKi8KKyNlbmRpZgorCisjZGVmaW5lCXN0ZGluCSgmX19zRlswXSkKKyNkZWZpbmUJc3Rkb3V0CSgmX19zRlsxXSkKKyNkZWZpbmUJc3RkZXJyCSgmX19zRlsyXSkKKworLyoKKyAqIEZ1bmN0aW9ucyBkZWZpbmVkIGluIEFOU0kgQyBzdGFuZGFyZC4KKyAqLworX19CRUdJTl9ERUNMUwordm9pZAkgY2xlYXJlcnIoRklMRSAqKTsKK2ludAkgZmNsb3NlKEZJTEUgKik7CitpbnQJIGZlb2YoRklMRSAqKTsKK2ludAkgZmVycm9yKEZJTEUgKik7CitpbnQJIGZmbHVzaChGSUxFICopOworaW50CSBmZ2V0YyhGSUxFICopOworaW50CSBmZ2V0cG9zKEZJTEUgKiwgZnBvc190ICopOworY2hhcgkqZmdldHMoY2hhciAqLCBpbnQsIEZJTEUgKik7CitGSUxFCSpmb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQJIGZwcmludGYoRklMRSAqLCBjb25zdCBjaGFyICosIC4uLik7CitpbnQJIGZwdXRjKGludCwgRklMRSAqKTsKK2ludAkgZnB1dHMoY29uc3QgY2hhciAqLCBGSUxFICopOworc2l6ZV90CSBmcmVhZCh2b2lkICosIHNpemVfdCwgc2l6ZV90LCBGSUxFICopOworRklMRQkqZnJlb3Blbihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgRklMRSAqKTsKK2ludAkgZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CSBmc2VlayhGSUxFICosIGxvbmcsIGludCk7CitpbnQJIGZzZWVrbyhGSUxFICosIG9mZl90LCBpbnQpOworaW50CSBmc2V0cG9zKEZJTEUgKiwgY29uc3QgZnBvc190ICopOworbG9uZwkgZnRlbGwoRklMRSAqKTsKK29mZl90CSBmdGVsbG8oRklMRSAqKTsKK3NpemVfdAkgZndyaXRlKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBzaXplX3QsIEZJTEUgKik7CitpbnQJIGdldGMoRklMRSAqKTsKK2ludAkgZ2V0Y2hhcih2b2lkKTsKK2NoYXIJKmdldHMoY2hhciAqKTsKKyNpZiBfX0JTRF9WSVNJQkxFICYmICFkZWZpbmVkKF9fU1lTX0VSUkxJU1QpCisjZGVmaW5lIF9fU1lTX0VSUkxJU1QKKworZXh0ZXJuIGludCBzeXNfbmVycjsJCQkvKiBwZXJyb3IoMykgZXh0ZXJuYWwgdmFyaWFibGVzICovCitleHRlcm4gY2hhciAqc3lzX2Vycmxpc3RbXTsKKyNlbmRpZgordm9pZAkgcGVycm9yKGNvbnN0IGNoYXIgKik7CitpbnQJIHByaW50Zihjb25zdCBjaGFyICosIC4uLik7CitpbnQJIHB1dGMoaW50LCBGSUxFICopOworaW50CSBwdXRjaGFyKGludCk7CitpbnQJIHB1dHMoY29uc3QgY2hhciAqKTsKK2ludAkgcmVtb3ZlKGNvbnN0IGNoYXIgKik7CitpbnQJIHJlbmFtZShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7Cit2b2lkCSByZXdpbmQoRklMRSAqKTsKK2ludAkgc2NhbmYoY29uc3QgY2hhciAqLCAuLi4pOwordm9pZAkgc2V0YnVmKEZJTEUgKiwgY2hhciAqKTsKK2ludAkgc2V0dmJ1ZihGSUxFICosIGNoYXIgKiwgaW50LCBzaXplX3QpOworaW50CSBzcHJpbnRmKGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworaW50CSBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitGSUxFCSp0bXBmaWxlKHZvaWQpOworY2hhcgkqdG1wbmFtKGNoYXIgKik7CitpbnQJIHVuZ2V0YyhpbnQsIEZJTEUgKik7CitpbnQJIHZmcHJpbnRmKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpOworaW50CSB2cHJpbnRmKGNvbnN0IGNoYXIgKiwgX192YV9saXN0KTsKK2ludAkgdnNwcmludGYoY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCk7CisKKyNpZiBfX0lTT19DX1ZJU0lCTEUgPj0gMTk5OSB8fCBfX0JTRF9WSVNJQkxFCitpbnQJIHNucHJpbnRmKGNoYXIgKiwgc2l6ZV90LCBjb25zdCBjaGFyICosIC4uLikKKwkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAzLCA0KSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgzKSkpOworaW50CSB2ZnNjYW5mKEZJTEUgKiwgY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCisJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHNjYW5mLCAyLCAwKSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgyKSkpOworaW50CSB2c2NhbmYoY29uc3QgY2hhciAqLCBfX3ZhX2xpc3QpCisJCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18gKHNjYW5mLCAxLCAwKSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgxKSkpOworaW50CSB2c25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgX192YV9saXN0KQorCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDMsIDApKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDMpKSk7CitpbnQJIHZzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKKwkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAoc2NhbmYsIDIsIDApKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CisjZW5kaWYgLyogX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19CU0RfVklTSUJMRSAqLworCitfX0VORF9ERUNMUworCisKKy8qCisgKiBGdW5jdGlvbnMgZGVmaW5lZCBpbiBQT1NJWCAxMDAzLjEuCisgKi8KKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFCisjZGVmaW5lCUxfY3Rlcm1pZAkxMDI0CS8qIHNpemUgZm9yIGN0ZXJtaWQoKTsgUEFUSF9NQVggKi8KKyNkZWZpbmUgTF9jdXNlcmlkCTkJLyogc2l6ZSBmb3IgY3VzZXJpZCgpOyBVVF9OQU1FU0laRSArIDEgKi8KKworX19CRUdJTl9ERUNMUworY2hhcgkqY3Rlcm1pZChjaGFyICopOworY2hhcgkqY3VzZXJpZChjaGFyICopOworRklMRQkqZmRvcGVuKGludCwgY29uc3QgY2hhciAqKTsKK2ludAkgZmlsZW5vKEZJTEUgKik7CisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUgPj0gMTk5MjA5CitpbnQJIHBjbG9zZShGSUxFICopOworRklMRQkqcG9wZW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworI2VuZGlmCisKKyNpZiBfX1BPU0lYX1ZJU0lCTEUgPj0gMTk5NTA2Cit2b2lkCSBmbG9ja2ZpbGUoRklMRSAqKTsKK2ludAkgZnRyeWxvY2tmaWxlKEZJTEUgKik7Cit2b2lkCSBmdW5sb2NrZmlsZShGSUxFICopOworCisvKgorICogVGhlc2UgYXJlIG5vcm1hbGx5IHVzZWQgdGhyb3VnaCBtYWNyb3MgYXMgZGVmaW5lZCBiZWxvdywgYnV0IFBPU0lYCisgKiByZXF1aXJlcyBmdW5jdGlvbnMgYXMgd2VsbC4KKyAqLworaW50CSBnZXRjX3VubG9ja2VkKEZJTEUgKik7CitpbnQJIGdldGNoYXJfdW5sb2NrZWQodm9pZCk7CitpbnQJIHB1dGNfdW5sb2NrZWQoaW50LCBGSUxFICopOworaW50CSBwdXRjaGFyX3VubG9ja2VkKGludCk7CisjZW5kaWYgLyogX19QT1NJWF9WSVNJQkxFID49IDE5OTUwNiAqLworCisjaWYgX19YUEdfVklTSUJMRQorY2hhcgkqdGVtcG5hbShjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisjZW5kaWYKK19fRU5EX0RFQ0xTCisKKyNpZm5kZWYgX1BPU0lYX1RIUkVBRFMKKyMgIGRlZmluZSBmbG9ja2ZpbGUoZnApCQkJLyogbm90aGluZyAqLworIyAgZGVmaW5lIGZ0cnlsb2NrZmlsZShmcCkJCSgwKQorIyAgZGVmaW5lIGZ1bmxvY2tmaWxlKGZwKQkJLyogbm90aGluZyAqLworI2VuZGlmCisKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFIHx8IF9fUE9TSVhfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFICovCisKKy8qCisgKiBSb3V0aW5lcyB0aGF0IGFyZSBwdXJlbHkgbG9jYWwuCisgKi8KKyNpZiBfX0JTRF9WSVNJQkxFCitfX0JFR0lOX0RFQ0xTCitpbnQJIGFzcHJpbnRmKGNoYXIgKiosIGNvbnN0IGNoYXIgKiwgLi4uKQorCQlfX2F0dHJpYnV0ZV9fKChfX2Zvcm1hdF9fIChwcmludGYsIDIsIDMpKSkKKwkJX19hdHRyaWJ1dGVfXygoX19ub25udWxsX18gKDIpKSk7CitjaGFyCSpmZ2V0bG4oRklMRSAqLCBzaXplX3QgKik7CitpbnQJIGZwdXJnZShGSUxFICopOworaW50CSBnZXR3KEZJTEUgKik7CitpbnQJIHB1dHcoaW50LCBGSUxFICopOwordm9pZAkgc2V0YnVmZmVyKEZJTEUgKiwgY2hhciAqLCBpbnQpOworaW50CSBzZXRsaW5lYnVmKEZJTEUgKik7CitpbnQJIHZhc3ByaW50ZihjaGFyICoqLCBjb25zdCBjaGFyICosIF9fdmFfbGlzdCkKKwkJX19hdHRyaWJ1dGVfXygoX19mb3JtYXRfXyAocHJpbnRmLCAyLCAwKSkpCisJCV9fYXR0cmlidXRlX18oKF9fbm9ubnVsbF9fICgyKSkpOworX19FTkRfREVDTFMKKworLyoKKyAqIFN0ZGlvIGZ1bmN0aW9uLWFjY2VzcyBpbnRlcmZhY2UuCisgKi8KK19fQkVHSU5fREVDTFMKK0ZJTEUJKmZ1bm9wZW4oY29uc3Qgdm9pZCAqLAorCQlpbnQgKCopKHZvaWQgKiwgY2hhciAqLCBpbnQpLAorCQlpbnQgKCopKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpLAorCQlmcG9zX3QgKCopKHZvaWQgKiwgZnBvc190LCBpbnQpLAorCQlpbnQgKCopKHZvaWQgKikpOworX19FTkRfREVDTFMKKyNkZWZpbmUJZnJvcGVuKGNvb2tpZSwgZm4pIGZ1bm9wZW4oY29va2llLCBmbiwgMCwgMCwgMCkKKyNkZWZpbmUJZndvcGVuKGNvb2tpZSwgZm4pIGZ1bm9wZW4oY29va2llLCAwLCBmbiwgMCwgMCkKKyNlbmRpZiAvKiBfX0JTRF9WSVNJQkxFICovCisKKy8qCisgKiBGdW5jdGlvbnMgaW50ZXJuYWwgdG8gdGhlIGltcGxlbWVudGF0aW9uLgorICovCitfX0JFR0lOX0RFQ0xTCitpbnQJX19zcmdldChGSUxFICopOworaW50CV9fc3didWYoaW50LCBGSUxFICopOworX19FTkRfREVDTFMKKworLyoKKyAqIFRoZSBfX3Nmb28gbWFjcm9zIGFyZSBoZXJlIHNvIHRoYXQgd2UgY2FuCisgKiBkZWZpbmUgZnVuY3Rpb24gdmVyc2lvbnMgaW4gdGhlIEMgbGlicmFyeS4KKyAqLworI2RlZmluZQlfX3NnZXRjKHApICgtLShwKS0+X3IgPCAwID8gX19zcmdldChwKSA6IChpbnQpKCoocCktPl9wKyspKQorI2lmIGRlZmluZWQoX19HTlVDX18pCitzdGF0aWMgX19pbmxpbmUgaW50IF9fc3B1dGMoaW50IF9jLCBGSUxFICpfcCkgeworCWlmICgtLV9wLT5fdyA+PSAwIHx8IChfcC0+X3cgPj0gX3AtPl9sYmZzaXplICYmIChjaGFyKV9jICE9ICdcbicpKQorCQlyZXR1cm4gKCpfcC0+X3ArKyA9IF9jKTsKKwllbHNlCisJCXJldHVybiAoX19zd2J1ZihfYywgX3ApKTsKK30KKyNlbHNlCisvKgorICogVGhpcyBoYXMgYmVlbiB0dW5lZCB0byBnZW5lcmF0ZSByZWFzb25hYmxlIGNvZGUgb24gdGhlIHZheCB1c2luZyBwY2MuCisgKi8KKyNkZWZpbmUJX19zcHV0YyhjLCBwKSBcCisJKC0tKHApLT5fdyA8IDAgPyBcCisJCShwKS0+X3cgPj0gKHApLT5fbGJmc2l6ZSA/IFwKKwkJCSgqKHApLT5fcCA9IChjKSksICoocCktPl9wICE9ICdcbicgPyBcCisJCQkJKGludCkqKHApLT5fcCsrIDogXAorCQkJCV9fc3didWYoJ1xuJywgcCkgOiBcCisJCQlfX3N3YnVmKChpbnQpKGMpLCBwKSA6IFwKKwkJKCoocCktPl9wID0gKGMpLCAoaW50KSoocCktPl9wKyspKQorI2VuZGlmCisKKyNkZWZpbmUJX19zZmVvZihwKQkoKChwKS0+X2ZsYWdzICYgX19TRU9GKSAhPSAwKQorI2RlZmluZQlfX3NmZXJyb3IocCkJKCgocCktPl9mbGFncyAmIF9fU0VSUikgIT0gMCkKKyNkZWZpbmUJX19zY2xlYXJlcnIocCkJKCh2b2lkKSgocCktPl9mbGFncyAmPSB+KF9fU0VSUnxfX1NFT0YpKSkKKyNkZWZpbmUJX19zZmlsZW5vKHApCSgocCktPl9maWxlKQorCisjZGVmaW5lCWZlb2YocCkJCV9fc2Zlb2YocCkKKyNkZWZpbmUJZmVycm9yKHApCV9fc2ZlcnJvcihwKQorCisjaWZuZGVmIF9QT1NJWF9USFJFQURTCisjZGVmaW5lCWNsZWFyZXJyKHApCV9fc2NsZWFyZXJyKHApCisjZW5kaWYKKworI2lmIF9fUE9TSVhfVklTSUJMRQorI2RlZmluZQlmaWxlbm8ocCkJX19zZmlsZW5vKHApCisjZW5kaWYKKworI2lmbmRlZiBsaW50CisjaWZuZGVmIF9QT1NJWF9USFJFQURTCisjZGVmaW5lCWdldGMoZnApCV9fc2dldGMoZnApCisjZW5kaWYgLyogX1BPU0lYX1RIUkVBRFMgKi8KKyNkZWZpbmUJZ2V0Y191bmxvY2tlZChmcCkJX19zZ2V0YyhmcCkKKy8qCisgKiBUaGUgbWFjcm8gaW1wbGVtZW50YXRpb25zIG9mIHB1dGMgYW5kIHB1dGNfdW5sb2NrZWQgYXJlIG5vdAorICogZnVsbHkgUE9TSVggY29tcGxpYW50OyB0aGV5IGRvIG5vdCBzZXQgZXJybm8gb24gZmFpbHVyZQorICovCisjaWYgX19CU0RfVklTSUJMRQorI2lmbmRlZiBfUE9TSVhfVEhSRUFEUworI2RlZmluZSBwdXRjKHgsIGZwKQlfX3NwdXRjKHgsIGZwKQorI2VuZGlmIC8qIF9QT1NJWF9USFJFQURTICovCisjZGVmaW5lIHB1dGNfdW5sb2NrZWQoeCwgZnApCV9fc3B1dGMoeCwgZnApCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLworI2VuZGlmIC8qIGxpbnQgKi8KKworI2RlZmluZQlnZXRjaGFyKCkJZ2V0YyhzdGRpbikKKyNkZWZpbmUJcHV0Y2hhcih4KQlwdXRjKHgsIHN0ZG91dCkKKyNkZWZpbmUgZ2V0Y2hhcl91bmxvY2tlZCgpCWdldGNfdW5sb2NrZWQoc3RkaW4pCisjZGVmaW5lIHB1dGNoYXJfdW5sb2NrZWQoYykJcHV0Y191bmxvY2tlZChjLCBzdGRvdXQpCisKKyNlbmRpZiAvKiBfU1RESU9fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdGRsaWIuaCBiL2xpYmMvaW5jbHVkZS9zdGRsaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjNjMWY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0ZGxpYi5oCkBAIC0wLDAgKzEsMTM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TVERMSUJfSF8KKyNkZWZpbmUgX1NURExJQl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8YWxsb2NhLmg+CisjaW5jbHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPG1lbW9yeS5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgRVhJVF9GQUlMVVJFIDEKKyNkZWZpbmUgRVhJVF9TVUNDRVNTIDAKKworZXh0ZXJuIF9fbm9yZXR1cm4gdm9pZCBleGl0KGludCk7CitleHRlcm4gX19ub3JldHVybiB2b2lkIGFib3J0KHZvaWQpOworZXh0ZXJuIGludCBhdGV4aXQodm9pZCAoKikodm9pZCkpOworZXh0ZXJuIGludCBvbl9leGl0KHZvaWQgKCopKGludCwgdm9pZCAqKSwgdm9pZCAqKTsKKworZXh0ZXJuIGNoYXIgKmdldGVudihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBwdXRlbnYoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgc2V0ZW52KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGludCB1bnNldGVudihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBjbGVhcmVudih2b2lkKTsKKworZXh0ZXJuIGNoYXIgKm1rdGVtcCAoY2hhciAqKTsKK2V4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqKTsKKworZXh0ZXJuIGxvbmcgc3RydG9sKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK2V4dGVybiBsb25nIGxvbmcgc3RydG9sbChjb25zdCBjaGFyICosIGNoYXIgKiosIGludCk7CitleHRlcm4gdW5zaWduZWQgbG9uZyBzdHJ0b3VsKGNvbnN0IGNoYXIgKiwgY2hhciAqKiwgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGxvbmcgc3RydG91bGwoY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOworZXh0ZXJuIGRvdWJsZSBzdHJ0b2QoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0cik7CisKK3N0YXRpYyBfX2lubGluZV9fIGZsb2F0IHN0cnRvZihjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyKQoreworICAgIHJldHVybiAoZmxvYXQpc3RydG9kKG5wdHIsIGVuZHB0cik7Cit9CisKK2V4dGVybiBpbnQgYXRvaShjb25zdCBjaGFyICopOworZXh0ZXJuIGxvbmcgYXRvbChjb25zdCBjaGFyICopOworZXh0ZXJuIGxvbmcgbG9uZyBhdG9sbChjb25zdCBjaGFyICopOworCitzdGF0aWMgX19pbmxpbmVfXyBkb3VibGUgYXRvZihjb25zdCBjaGFyICpucHRyKQoreworICAgIHJldHVybiAoc3RydG9kKG5wdHIsIE5VTEwpKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGFicyhpbnQgX19uKSB7CisgICAgcmV0dXJuIChfX24gPCAwKSA/IC1fX24gOiBfX247Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgbGFicyhsb25nIF9fbikgeworICAgIHJldHVybiAoX19uIDwgMEwpID8gLV9fbiA6IF9fbjsKK30KKworc3RhdGljIF9faW5saW5lX18gbG9uZyBsb25nIGxsYWJzKGxvbmcgbG9uZyBfX24pIHsKKyAgICByZXR1cm4gKF9fbiA8IDBMTCkgPyAtX19uIDogX19uOworfQorCitleHRlcm4gY2hhciAqIHJlYWxwYXRoKGNvbnN0IGNoYXIgKnBhdGgsIGNoYXIgKnJlc29sdmVkKTsKK2V4dGVybiBpbnQgc3lzdGVtKGNvbnN0IGNoYXIgKiBzdHJpbmcpOworCitleHRlcm4gdm9pZCAqIGJzZWFyY2goY29uc3Qgdm9pZCAqa2V5LCBjb25zdCB2b2lkICpiYXNlMCwKKwlzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLAorCWludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKKworZXh0ZXJuIHZvaWQgcXNvcnQodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgaW50ICgqKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpOworCitleHRlcm4gbG9uZyBqcmFuZDQ4KHVuc2lnbmVkIHNob3J0ICopOworZXh0ZXJuIGxvbmcgbXJhbmQ0OCh2b2lkKTsKK2V4dGVybiBsb25nIG5yYW5kNDgodW5zaWduZWQgc2hvcnQgKik7CitleHRlcm4gbG9uZyBscmFuZDQ4KHZvaWQpOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0ICpzZWVkNDgodW5zaWduZWQgc2hvcnQqKTsKK2V4dGVybiB2b2lkIHNyYW5kNDgobG9uZyk7CitleHRlcm4gdW5zaWduZWQgaW50IGFyYzRyYW5kb20odm9pZCk7CitleHRlcm4gdm9pZCBhcmM0cmFuZG9tX3N0aXIodm9pZCk7CitleHRlcm4gdm9pZCBhcmM0cmFuZG9tX2FkZHJhbmRvbSh1bnNpZ25lZCBjaGFyICosIGludCk7CisKKyNkZWZpbmUgUkFORF9NQVggMHg3ZmZmZmZmZgorc3RhdGljIF9faW5saW5lX18gaW50IHJhbmQodm9pZCkgeworICAgIHJldHVybiAoaW50KWxyYW5kNDgoKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3JhbmQodW5zaWduZWQgaW50IF9fcykgeworICAgIHNyYW5kNDgoX19zKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGxvbmcgcmFuZG9tKHZvaWQpCit7CisgICAgcmV0dXJuIGxyYW5kNDgoKTsKK30KK3N0YXRpYyBfX2lubGluZV9fIHZvaWQgc3JhbmRvbSh1bnNpZ25lZCBpbnQgX19zKQoreworICAgIHNyYW5kNDgoX19zKTsKK30KKworLyogQmFzaWMgUFRZIGZ1bmN0aW9ucy4gIFRoZXNlIG9ubHkgd29yayBpZiBkZXZwdHMgaXMgbW91bnRlZCEgKi8KKworZXh0ZXJuIGludCAgICB1bmxvY2twdChpbnQpOworZXh0ZXJuIGNoYXIqICBwdHNuYW1lKGludCk7CitleHRlcm4gY2hhciogIHB0c25hbWVfcihpbnQsIGNoYXIqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICBnZXRwdCh2b2lkKTsKKworc3RhdGljIF9faW5saW5lX18gaW50IGdyYW50cHQoaW50IF9fZmQpCit7CisgICh2b2lkKV9fZmQ7CisgIHJldHVybiAwOyAgICAgLyogZGV2cHRzIGRvZXMgdGhpcyBhbGwgZm9yIHVzISAqLworfQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NURExJQl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N0bF9wYWlyLmggYi9saWJjL2luY2x1ZGUvc3RsX3BhaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODE4MGIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0bF9wYWlyLmgKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk0CisgKiBIZXdsZXR0LVBhY2thcmQgQ29tcGFueQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgSGV3bGV0dC1QYWNrYXJkIENvbXBhbnkgbWFrZXMgbm8KKyAqIHJlcHJlc2VudGF0aW9ucyBhYm91dCB0aGUgc3VpdGFiaWxpdHkgb2YgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlLiAgSXQgaXMgcHJvdmlkZWQgImFzIGlzIiB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqCisgKgorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTcKKyAqIFNpbGljb24gR3JhcGhpY3MgQ29tcHV0ZXIgU3lzdGVtcywgSW5jLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGRpc3RyaWJ1dGUgYW5kIHNlbGwgdGhpcyBzb2Z0d2FyZQorICogYW5kIGl0cyBkb2N1bWVudGF0aW9uIGZvciBhbnkgcHVycG9zZSBpcyBoZXJlYnkgZ3JhbnRlZCB3aXRob3V0IGZlZSwKKyAqIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMgYW5kCisgKiB0aGF0IGJvdGggdGhhdCBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhcgorICogaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLiAgU2lsaWNvbiBHcmFwaGljcyBtYWtlcyBubworICogcmVwcmVzZW50YXRpb25zIGFib3V0IHRoZSBzdWl0YWJpbGl0eSBvZiB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2UuICBJdCBpcyBwcm92aWRlZCAiYXMgaXMiIHdpdGhvdXQgZXhwcmVzcyBvciBpbXBsaWVkIHdhcnJhbnR5LgorICovCisKKy8qIE5PVEU6IFRoaXMgaXMgYW4gaW50ZXJuYWwgaGVhZGVyIGZpbGUsIGluY2x1ZGVkIGJ5IG90aGVyIFNUTCBoZWFkZXJzLgorICogICBZb3Ugc2hvdWxkIG5vdCBhdHRlbXB0IHRvIHVzZSBpdCBkaXJlY3RseS4KKyAqLworCisjaWZuZGVmIF9fU0dJX1NUTF9JTlRFUk5BTF9QQUlSX0gKKyNkZWZpbmUgX19TR0lfU1RMX0lOVEVSTkFMX1BBSVJfSAorCitfX1NUTF9CRUdJTl9OQU1FU1BBQ0UKKwordGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgorc3RydWN0IHBhaXIgeworICB0eXBlZGVmIF9UMSBmaXJzdF90eXBlOworICB0eXBlZGVmIF9UMiBzZWNvbmRfdHlwZTsKKworICBfVDEgZmlyc3Q7CisgIF9UMiBzZWNvbmQ7CisgIHBhaXIoKSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CisgIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CisKKyAgdGVtcGxhdGUgPGNsYXNzIF9VMSwgY2xhc3MgX1UyPgorICBwYWlyKGNvbnN0IHBhaXI8X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9Cit9OworCit0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCit7CisgIHJldHVybiBfX3guZmlyc3QgPT0gX195LmZpcnN0ICYmIF9feC5zZWNvbmQgPT0gX195LnNlY29uZDsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoraW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpCit7CisgIHJldHVybiBfX3guZmlyc3QgPCBfX3kuZmlyc3QgfHwKKyAgICAgICAgICghKF9feS5maXJzdCA8IF9feC5maXJzdCkgJiYgX194LnNlY29uZCA8IF9feS5zZWNvbmQpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CitpbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKKyAgcmV0dXJuICEoX194ID09IF9feSk7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KK2lubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CisgIHJldHVybiBfX3kgPCBfX3g7Cit9CisKK3RlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KK2lubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgeworICByZXR1cm4gIShfX3kgPCBfX3gpOworfQorCit0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CitpbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kpIHsKKyAgcmV0dXJuICEoX194IDwgX195KTsKK30KKwordGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoraW5saW5lIHBhaXI8X1QxLCBfVDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoreworICByZXR1cm4gcGFpcjxfVDEsIF9UMj4oX194LCBfX3kpOworfQorCit9IC8vIG5hbWVzcGFjZSBzdGQKKworI2VuZGlmIC8qIF9fU0dJX1NUTF9JTlRFUk5BTF9QQUlSX0ggKi8KKworLy8gTG9jYWwgVmFyaWFibGVzOgorLy8gbW9kZTpDKysKKy8vIEVuZDoKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zdHJpbmcuaCBiL2xpYmMvaW5jbHVkZS9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDYxMDBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZy5oCkBAIC0wLDAgKzEsODcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NUUklOR19IXworI2RlZmluZSBfU1RSSU5HX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxtYWxsb2MuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gdm9pZCogIG1lbWNjcHkodm9pZCAqLCBjb25zdCB2b2lkICosIGludCwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1yY2hyKGNvbnN0IHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIGludCAgICBtZW1jbXAoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gdm9pZCogIG1lbWNweSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtbW92ZSh2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkKiAgbWVtc2V0KHZvaWQgKiwgaW50LCBzaXplX3QpOworZXh0ZXJuIHZvaWQqICBtZW1tZW0oY29uc3Qgdm9pZCAqLCBzaXplX3QsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiB2b2lkICAgbWVtc3dhcCh2b2lkICosIHZvaWQgKiwgc2l6ZV90KTsKKworZXh0ZXJuIGNoYXIqICBpbmRleChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHJpbmRleChjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHN0cmNocihjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gY2hhciogIHN0cnJjaHIoY29uc3QgY2hhciAqLCBpbnQpOworCitleHRlcm4gc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICBzdHJjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIqICBzdHJjcHkoY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGNoYXIqICBzdHJjYXQoY2hhciAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gaW50ICAgIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCAgICBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RyZHVwKGNvbnN0IGNoYXIgKik7CisKK2V4dGVybiBjaGFyKiAgc3Ryc3RyKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RyY2FzZXN0cihjb25zdCBjaGFyICpoYXlzdGFjaywgY29uc3QgY2hhciAqbmVlZGxlKTsKK2V4dGVybiBjaGFyKiAgc3RydG9rKGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RydG9rX3IoY2hhciAqLCBjb25zdCBjaGFyICosIGNoYXIqKik7CisKK2V4dGVybiBjaGFyKiAgc3RyZXJyb3IoaW50KTsKK2V4dGVybiBpbnQgICAgc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICpidWYsIHNpemVfdCBuKTsKKworZXh0ZXJuIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RybmNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBjaGFyKiAgc3RybmR1cChjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50ICAgIHN0cm5jbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CitleHRlcm4gY2hhciogIHN0cm5jcHkoY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKK2V4dGVybiBzaXplX3Qgc3RybGNhdChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3Qgc3RybGNweShjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKKworZXh0ZXJuIHNpemVfdCBzdHJjc3BuKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBjaGFyKiAgc3RycGJyayhjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gY2hhciogIHN0cnNlcChjaGFyICoqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIHNpemVfdCBzdHJzcG4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworCitleHRlcm4gY2hhciogIHN0cnNpZ25hbChpbnQgIHNpZyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1RSSU5HX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3RyaW5ncy5oIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjczZTIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N0cmluZ3MuaApAQCAtMCwwICsxLDU1IEBACisvKgkkTmV0QlNEOiBzdHJpbmdzLmgsdiAxLjEwIDIwMDUvMDIvMDMgMDQ6Mzk6MzIgcGVycnkgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTggVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBLbGF1cyBLbGVpbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfU1RSSU5HU19IXworI2RlZmluZSBfU1RSSU5HU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKK2ludAkgYmNtcChjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK3ZvaWQJIGJjb3B5KGNvbnN0IHZvaWQgKiwgdm9pZCAqLCBzaXplX3QpOwordm9pZAkgYnplcm8odm9pZCAqLCBzaXplX3QpOworaW50CSBmZnMoaW50KTsKK2NoYXIJKmluZGV4KGNvbnN0IGNoYXIgKiwgaW50KTsKK2NoYXIJKnJpbmRleChjb25zdCBjaGFyICosIGludCk7CitpbnQJIHN0cmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworaW50CSBzdHJuY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhZGVmaW5lZChfU1RSSU5HU19IXykgKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX2VycmRlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX2VycmRlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjdhYjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fZXJyZGVmcy5oCkBAIC0wLDAgKzEsMTcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qIHRoZSBmb2xsb3dpbmcgY29ycmVzcG9uZHMgdG8gdGhlIGVycm9yIGNvZGVzIG9mIHRoZSBMaW51eCBrZXJuZWwgdXNlZCBieSB0aGUgQW5kcm9pZCBwbGF0Zm9ybQorICogdGhlc2UgYXJlIGRpc3RpbmN0IGZyb20gdGhlIE9wZW5CU0Qgb25lcywgd2hpY2ggaXMgd2h5IHdlIG5lZWQgdG8gcmVkZWNsYXJlIHRoZW0gaGVyZQorICoKKyAqIHRoaXMgZmlsZSBtYXkgYmUgaW5jbHVkZWQgc2V2ZXJhbCB0aW1lcyB0byBkZWZpbmUgZWl0aGVyIGVycm9yIGNvbnN0YW50cyBvciB0aGVpcgorICogc3RyaW5nIHJlcHJlc2VudGF0aW9uCisgKi8KKworI2lmbmRlZiBfX0JJT05JQ19FUlJERUYKKyNlcnJvciAiX19CSU9OSUNfRVJSREVGIG11c3QgYmUgZGVmaW5lZCBiZWZvcmUgaW5jbHVkaW5nIHRoaXMgZmlsZSIKKyNlbmRpZgorX19CSU9OSUNfRVJSREVGKCBFUEVSTSAgICAgICAgICAsICAgMSwgIk9wZXJhdGlvbiBub3QgcGVybWl0dGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0VOVCAgICAgICAgICwgICAyLCAiTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeSIgKQorX19CSU9OSUNfRVJSREVGKCBFU1JDSCAgICAgICAgICAsICAgMywgIk5vIHN1Y2ggcHJvY2VzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFSU5UUiAgICAgICAgICAsICAgNCwgIkludGVycnVwdGVkIHN5c3RlbSBjYWxsIiApCitfX0JJT05JQ19FUlJERUYoIEVJTyAgICAgICAgICAgICwgICA1LCAiSS9PIGVycm9yIiApCitfX0JJT05JQ19FUlJERUYoIEVOWElPICAgICAgICAgICwgICA2LCAiTm8gc3VjaCBkZXZpY2Ugb3IgYWRkcmVzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFMkJJRyAgICAgICAgICAsICAgNywgIkFyZ3VtZW50IGxpc3QgdG9vIGxvbmciICkKK19fQklPTklDX0VSUkRFRiggRU5PRVhFQyAgICAgICAgLCAgIDgsICJFeGVjIGZvcm1hdCBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFERiAgICAgICAgICAsICAgOSwgIkJhZCBmaWxlIG51bWJlciIgKQorX19CSU9OSUNfRVJSREVGKCBFQ0hJTEQgICAgICAgICAsICAxMCwgIk5vIGNoaWxkIHByb2Nlc3NlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFQUdBSU4gICAgICAgICAsICAxMSwgIlRyeSBhZ2FpbiIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NRU0gICAgICAgICAsICAxMiwgIk91dCBvZiBtZW1vcnkiICkKK19fQklPTklDX0VSUkRFRiggRUFDQ0VTICAgICAgICAgLCAgMTMsICJQZXJtaXNzaW9uIGRlbmllZCIgKQorX19CSU9OSUNfRVJSREVGKCBFRkFVTFQgICAgICAgICAsICAxNCwgIkJhZCBhZGRyZXNzIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RCTEsgICAgICAgICwgIDE1LCAiQmxvY2sgZGV2aWNlIHJlcXVpcmVkIiApCitfX0JJT05JQ19FUlJERUYoIEVCVVNZICAgICAgICAgICwgIDE2LCAiRGV2aWNlIG9yIHJlc291cmNlIGJ1c3kiICkKK19fQklPTklDX0VSUkRFRiggRUVYSVNUICAgICAgICAgLCAgMTcsICJGaWxlIGV4aXN0cyIgKQorX19CSU9OSUNfRVJSREVGKCBFWERFViAgICAgICAgICAsICAxOCwgIkNyb3NzLWRldmljZSBsaW5rIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0RFViAgICAgICAgICwgIDE5LCAiTm8gc3VjaCBkZXZpY2UiICkKK19fQklPTklDX0VSUkRFRiggRU5PVERJUiAgICAgICAgLCAgMjAsICJOb3QgYSBkaXJlY3RvcnkiICkKK19fQklPTklDX0VSUkRFRiggRUlTRElSICAgICAgICAgLCAgMjEsICJJcyBhIGRpcmVjdG9yeSIgKQorX19CSU9OSUNfRVJSREVGKCBFSU5WQUwgICAgICAgICAsICAyMiwgIkludmFsaWQgYXJndW1lbnQiICkKK19fQklPTklDX0VSUkRFRiggRU5GSUxFICAgICAgICAgLCAgMjMsICJGaWxlIHRhYmxlIG92ZXJmbG93IiApCitfX0JJT05JQ19FUlJERUYoIEVNRklMRSAgICAgICAgICwgIDI0LCAiVG9vIG1hbnkgb3BlbiBmaWxlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9UVFkgICAgICAgICAsICAyNSwgIk5vdCBhIHR5cGV3cml0ZXIiICkKK19fQklPTklDX0VSUkRFRiggRVRYVEJTWSAgICAgICAgLCAgMjYsICJUZXh0IGZpbGUgYnVzeSIgKQorX19CSU9OSUNfRVJSREVGKCBFRkJJRyAgICAgICAgICAsICAyNywgIkZpbGUgdG9vIGxhcmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1NQQyAgICAgICAgICwgIDI4LCAiTm8gc3BhY2UgbGVmdCBvbiBkZXZpY2UiICkKK19fQklPTklDX0VSUkRFRiggRVNQSVBFICAgICAgICAgLCAgMjksICJJbGxlZ2FsIHNlZWsiICkKK19fQklPTklDX0VSUkRFRiggRVJPRlMgICAgICAgICAgLCAgMzAsICJSZWFkLW9ubHkgZmlsZSBzeXN0ZW0iICkKK19fQklPTklDX0VSUkRFRiggRU1MSU5LICAgICAgICAgLCAgMzEsICJUb28gbWFueSBsaW5rcyIgKQorX19CSU9OSUNfRVJSREVGKCBFUElQRSAgICAgICAgICAsICAzMiwgIkJyb2tlbiBwaXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVET00gICAgICAgICAgICwgIDMzLCAiTWF0aCBhcmd1bWVudCBvdXQgb2YgZG9tYWluIG9mIGZ1bmMiICkKK19fQklPTklDX0VSUkRFRiggRVJBTkdFICAgICAgICAgLCAgMzQsICJNYXRoIHJlc3VsdCBub3QgcmVwcmVzZW50YWJsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFREVBRExLICAgICAgICAsICAzNSwgIlJlc291cmNlIGRlYWRsb2NrIHdvdWxkIG9jY3VyIiApCitfX0JJT05JQ19FUlJERUYoIEVOQU1FVE9PTE9ORyAgICwgIDM2LCAiRmlsZSBuYW1lIHRvbyBsb25nIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0xDSyAgICAgICAgICwgIDM3LCAiTm8gcmVjb3JkIGxvY2tzIGF2YWlsYWJsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9TWVMgICAgICAgICAsICAzOCwgIkZ1bmN0aW9uIG5vdCBpbXBsZW1lbnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9URU1QVFkgICAgICAsICAzOSwgIkRpcmVjdG9yeSBub3QgZW1wdHkiICkKK19fQklPTklDX0VSUkRFRiggRUxPT1AgICAgICAgICAgLCAgNDAsICJUb28gbWFueSBzeW1ib2xpYyBsaW5rcyBlbmNvdW50ZXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NU0cgICAgICAgICAsICA0MiwgIk5vIG1lc3NhZ2Ugb2YgZGVzaXJlZCB0eXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVJRFJNICAgICAgICAgICwgIDQzLCAiSWRlbnRpZmllciByZW1vdmVkIiApCitfX0JJT05JQ19FUlJERUYoIEVDSFJORyAgICAgICAgICwgIDQ0LCAiQ2hhbm5lbCBudW1iZXIgb3V0IG9mIHJhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVMMk5TWU5DICAgICAgICwgIDQ1LCAiTGV2ZWwgMiBub3Qgc3luY2hyb25pemVkIiApCitfX0JJT05JQ19FUlJERUYoIEVMM0hMVCAgICAgICAgICwgIDQ2LCAiTGV2ZWwgMyBoYWx0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRUwzUlNUICAgICAgICAgLCAgNDcsICJMZXZlbCAzIHJlc2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVMTlJORyAgICAgICAgICwgIDQ4LCAiTGluayBudW1iZXIgb3V0IG9mIHJhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVVTkFUQ0ggICAgICAgICwgIDQ5LCAiUHJvdG9jb2wgZHJpdmVyIG5vdCBhdHRhY2hlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9DU0kgICAgICAgICAsICA1MCwgIk5vIENTSSBzdHJ1Y3R1cmUgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVMMkhMVCAgICAgICAgICwgIDUxLCAiTGV2ZWwgMiBoYWx0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRUJBREUgICAgICAgICAgLCAgNTIsICJJbnZhbGlkIGV4Y2hhbmdlIiApCitfX0JJT05JQ19FUlJERUYoIEVCQURSICAgICAgICAgICwgIDUzLCAiSW52YWxpZCByZXF1ZXN0IGRlc2NyaXB0b3IiICkKK19fQklPTklDX0VSUkRFRiggRVhGVUxMICAgICAgICAgLCAgNTQsICJFeGNoYW5nZSBmdWxsIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0FOTyAgICAgICAgICwgIDU1LCAiTm8gYW5vZGUiICkKK19fQklPTklDX0VSUkRFRiggRUJBRFJRQyAgICAgICAgLCAgNTYsICJJbnZhbGlkIHJlcXVlc3QgY29kZSIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFEU0xUICAgICAgICAsICA1NywgIkludmFsaWQgc2xvdCIgKQorX19CSU9OSUNfRVJSREVGKCBFQkZPTlQgICAgICAgICAsICA1OSwgIkJhZCBmb250IGZpbGUgZm9ybWF0IiApCitfX0JJT05JQ19FUlJERUYoIEVOT1NUUiAgICAgICAgICwgIDYwLCAiRGV2aWNlIG5vdCBhIHN0cmVhbSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9EQVRBICAgICAgICAsICA2MSwgIk5vIGRhdGEgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVUSU1FICAgICAgICAgICwgIDYyLCAiVGltZXIgZXhwaXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9TUiAgICAgICAgICAsICA2MywgIk91dCBvZiBzdHJlYW1zIHJlc291cmNlcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9ORVQgICAgICAgICAsICA2NCwgIk1hY2hpbmUgaXMgbm90IG9uIHRoZSBuZXR3b3JrIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1BLRyAgICAgICAgICwgIDY1LCAiUGFja2FnZSBub3QgaW5zdGFsbGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVSRU1PVEUgICAgICAgICwgIDY2LCAiT2JqZWN0IGlzIHJlbW90ZSIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9MSU5LICAgICAgICAsICA2NywgIkxpbmsgaGFzIGJlZW4gc2V2ZXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFQURWICAgICAgICAgICAsICA2OCwgIkFkdmVydGlzZSBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFU1JNTlQgICAgICAgICAsICA2OSwgIlNybW91bnQgZXJyb3IiICkKK19fQklPTklDX0VSUkRFRiggRUNPTU0gICAgICAgICAgLCAgNzAsICJDb21tdW5pY2F0aW9uIGVycm9yIG9uIHNlbmQiICkKK19fQklPTklDX0VSUkRFRiggRVBST1RPICAgICAgICAgLCAgNzEsICJQcm90b2NvbCBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFTVVMVElIT1AgICAgICAsICA3MiwgIk11bHRpaG9wIGF0dGVtcHRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFRE9URE9UICAgICAgICAsICA3MywgIlJGUyBzcGVjaWZpYyBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFETVNHICAgICAgICAsICA3NCwgIk5vdCBhIGRhdGEgbWVzc2FnZSIgKQorX19CSU9OSUNfRVJSREVGKCBFT1ZFUkZMT1cgICAgICAsICA3NSwgIlZhbHVlIHRvbyBsYXJnZSBmb3IgZGVmaW5lZCBkYXRhIHR5cGUiICkKK19fQklPTklDX0VSUkRFRiggRU5PVFVOSVEgICAgICAgLCAgNzYsICJOYW1lIG5vdCB1bmlxdWUgb24gbmV0d29yayIgKQorX19CSU9OSUNfRVJSREVGKCBFQkFERkQgICAgICAgICAsICA3NywgIkZpbGUgZGVzY3JpcHRvciBpbiBiYWQgc3RhdGUiICkKK19fQklPTklDX0VSUkRFRiggRVJFTUNIRyAgICAgICAgLCAgNzgsICJSZW1vdGUgYWRkcmVzcyBjaGFuZ2VkIiApCitfX0JJT05JQ19FUlJERUYoIEVMSUJBQ0MgICAgICAgICwgIDc5LCAiQ2FuIG5vdCBhY2Nlc3MgYSBuZWVkZWQgc2hhcmVkIGxpYnJhcnkiICkKK19fQklPTklDX0VSUkRFRiggRUxJQkJBRCAgICAgICAgLCAgODAsICJBY2Nlc3NpbmcgYSBjb3JydXB0ZWQgc2hhcmVkIGxpYnJhcnkiICkKK19fQklPTklDX0VSUkRFRiggRUxJQlNDTiAgICAgICAgLCAgODEsICIubGliIHNlY3Rpb24gaW4gYS5vdXQgY29ycnVwdGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVMSUJNQVggICAgICAgICwgIDgyLCAiQXR0ZW1wdGluZyB0byBsaW5rIGluIHRvbyBtYW55IHNoYXJlZCBsaWJyYXJpZXMiICkKK19fQklPTklDX0VSUkRFRiggRUxJQkVYRUMgICAgICAgLCAgODMsICJDYW5ub3QgZXhlYyBhIHNoYXJlZCBsaWJyYXJ5IGRpcmVjdGx5IiApCitfX0JJT05JQ19FUlJERUYoIEVJTFNFUSAgICAgICAgICwgIDg0LCAiSWxsZWdhbCBieXRlIHNlcXVlbmNlIiApCitfX0JJT05JQ19FUlJERUYoIEVSRVNUQVJUICAgICAgICwgIDg1LCAiSW50ZXJydXB0ZWQgc3lzdGVtIGNhbGwgc2hvdWxkIGJlIHJlc3RhcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFU1RSUElQRSAgICAgICAsICA4NiwgIlN0cmVhbXMgcGlwZSBlcnJvciIgKQorX19CSU9OSUNfRVJSREVGKCBFVVNFUlMgICAgICAgICAsICA4NywgIlRvbyBtYW55IHVzZXJzIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RTT0NLICAgICAgICwgIDg4LCAiU29ja2V0IG9wZXJhdGlvbiBvbiBub24tc29ja2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVERVNUQUREUlJFUSAgICwgIDg5LCAiRGVzdGluYXRpb24gYWRkcmVzcyByZXF1aXJlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTVNHU0laRSAgICAgICAsICA5MCwgIk1lc3NhZ2UgdG9vIGxvbmciICkKK19fQklPTklDX0VSUkRFRiggRVBST1RPVFlQRSAgICAgLCAgOTEsICJQcm90b2NvbCB3cm9uZyB0eXBlIGZvciBzb2NrZXQiICkKK19fQklPTklDX0VSUkRFRiggRU5PUFJPVE9PUFQgICAgLCAgOTIsICJQcm90b2NvbCBub3QgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVQUk9UT05PU1VQUE9SVCwgIDkzLCAiUHJvdG9jb2wgbm90IHN1cHBvcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFU09DS1ROT1NVUFBPUlQsICA5NCwgIlNvY2tldCB0eXBlIG5vdCBzdXBwb3J0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRU9QTk9UU1VQUCAgICAgLCAgOTUsICJPcGVyYXRpb24gbm90IHN1cHBvcnRlZCBvbiB0cmFuc3BvcnQgZW5kcG9pbnQiICkKK19fQklPTklDX0VSUkRFRiggRVBGTk9TVVBQT1JUICAgLCAgOTYsICJQcm90b2NvbCBmYW1pbHkgbm90IHN1cHBvcnRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFQUZOT1NVUFBPUlQgICAsICA5NywgIkFkZHJlc3MgZmFtaWx5IG5vdCBzdXBwb3J0ZWQgYnkgcHJvdG9jb2wiICkKK19fQklPTklDX0VSUkRFRiggRUFERFJJTlVTRSAgICAgLCAgOTgsICJBZGRyZXNzIGFscmVhZHkgaW4gdXNlIiApCitfX0JJT05JQ19FUlJERUYoIEVBRERSTk9UQVZBSUwgICwgIDk5LCAiQ2Fubm90IGFzc2lnbiByZXF1ZXN0ZWQgYWRkcmVzcyIgKQorX19CSU9OSUNfRVJSREVGKCBFTkVURE9XTiAgICAgICAsIDEwMCwgIk5ldHdvcmsgaXMgZG93biIgKQorX19CSU9OSUNfRVJSREVGKCBFTkVUVU5SRUFDSCAgICAsIDEwMSwgIk5ldHdvcmsgaXMgdW5yZWFjaGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRU5FVFJFU0VUICAgICAgLCAxMDIsICJOZXR3b3JrIGRyb3BwZWQgY29ubmVjdGlvbiBiZWNhdXNlIG9mIHJlc2V0IiApCitfX0JJT05JQ19FUlJERUYoIEVDT05OQUJPUlRFRCAgICwgMTAzLCAiU29mdHdhcmUgY2F1c2VkIGNvbm5lY3Rpb24gYWJvcnQiICkKK19fQklPTklDX0VSUkRFRiggRUNPTk5SRVNFVCAgICAgLCAxMDQsICJDb25uZWN0aW9uIHJlc2V0IGJ5IHBlZXIiICkKK19fQklPTklDX0VSUkRFRiggRU5PQlVGUyAgICAgICAgLCAxMDUsICJObyBidWZmZXIgc3BhY2UgYXZhaWxhYmxlIiApCitfX0JJT05JQ19FUlJERUYoIEVJU0NPTk4gICAgICAgICwgMTA2LCAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIGFscmVhZHkgY29ubmVjdGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1RDT05OICAgICAgICwgMTA3LCAiVHJhbnNwb3J0IGVuZHBvaW50IGlzIG5vdCBjb25uZWN0ZWQiICkKK19fQklPTklDX0VSUkRFRiggRVNIVVRET1dOICAgICAgLCAxMDgsICJDYW5ub3Qgc2VuZCBhZnRlciB0cmFuc3BvcnQgZW5kcG9pbnQgc2h1dGRvd24iICkKK19fQklPTklDX0VSUkRFRiggRVRPT01BTllSRUZTICAgLCAxMDksICJUb28gbWFueSByZWZlcmVuY2VzOiBjYW5ub3Qgc3BsaWNlIiApCitfX0JJT05JQ19FUlJERUYoIEVUSU1FRE9VVCAgICAgICwgMTEwLCAiQ29ubmVjdGlvbiB0aW1lZCBvdXQiICkKK19fQklPTklDX0VSUkRFRiggRUNPTk5SRUZVU0VEICAgLCAxMTEsICJDb25uZWN0aW9uIHJlZnVzZWQiICkKK19fQklPTklDX0VSUkRFRiggRUhPU1RET1dOICAgICAgLCAxMTIsICJIb3N0IGlzIGRvd24iICkKK19fQklPTklDX0VSUkRFRiggRUhPU1RVTlJFQUNIICAgLCAxMTMsICJObyByb3V0ZSB0byBob3N0IiApCitfX0JJT05JQ19FUlJERUYoIEVBTFJFQURZICAgICAgICwgMTE0LCAiT3BlcmF0aW9uIGFscmVhZHkgaW4gcHJvZ3Jlc3MiICkKK19fQklPTklDX0VSUkRFRiggRUlOUFJPR1JFU1MgICAgLCAxMTUsICJPcGVyYXRpb24gbm93IGluIHByb2dyZXNzIiApCitfX0JJT05JQ19FUlJERUYoIEVTVEFMRSAgICAgICAgICwgMTE2LCAiU3RhbGUgTkZTIGZpbGUgaGFuZGxlIiApCitfX0JJT05JQ19FUlJERUYoIEVVQ0xFQU4gICAgICAgICwgMTE3LCAiU3RydWN0dXJlIG5lZWRzIGNsZWFuaW5nIiApCitfX0JJT05JQ19FUlJERUYoIEVOT1ROQU0gICAgICAgICwgMTE4LCAiTm90IGEgWEVOSVggbmFtZWQgdHlwZSBmaWxlIiApCitfX0JJT05JQ19FUlJERUYoIEVOQVZBSUwgICAgICAgICwgMTE5LCAiTm8gWEVOSVggc2VtYXBob3JlcyBhdmFpbGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRUlTTkFNICAgICAgICAgLCAxMjAsICJJcyBhIG5hbWVkIHR5cGUgZmlsZSIgKQorX19CSU9OSUNfRVJSREVGKCBFUkVNT1RFSU8gICAgICAsIDEyMSwgIlJlbW90ZSBJL08gZXJyb3IiICkKK19fQklPTklDX0VSUkRFRiggRURRVU9UICAgICAgICAgLCAxMjIsICJRdW90YSBleGNlZWRlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTk9NRURJVU0gICAgICAsIDEyMywgIk5vIG1lZGl1bSBmb3VuZCIgKQorX19CSU9OSUNfRVJSREVGKCBFTUVESVVNVFlQRSAgICAsIDEyNCwgIldyb25nIG1lZGl1bSB0eXBlIiApCitfX0JJT05JQ19FUlJERUYoIEVDQU5DRUxFRCAgICAgICwgMTI1LCAiT3BlcmF0aW9uIENhbmNlbGVkIiApCitfX0JJT05JQ19FUlJERUYoIEVOT0tFWSAgICAgICAgICwgMTI2LCAiUmVxdWlyZWQga2V5IG5vdCBhdmFpbGFibGUiICkKK19fQklPTklDX0VSUkRFRiggRUtFWUVYUElSRUQgICAgLCAxMjcsICJLZXkgaGFzIGV4cGlyZWQiICkKK19fQklPTklDX0VSUkRFRiggRUtFWVJFVk9LRUQgICAgLCAxMjgsICJLZXkgaGFzIGJlZW4gcmV2b2tlZCIgKQorX19CSU9OSUNfRVJSREVGKCBFS0VZUkVKRUNURUQgICAsIDEyOSwgIktleSB3YXMgcmVqZWN0ZWQgYnkgc2VydmljZSIgKQorX19CSU9OSUNfRVJSREVGKCBFT1dORVJERUFEICAgICAsIDEzMCwgIk93bmVyIGRpZWQiICkKK19fQklPTklDX0VSUkRFRiggRU5PVFJFQ09WRVJBQkxFLCAxMzEsICJTdGF0ZSBub3QgcmVjb3ZlcmFibGUiICkKKworLyogdGhlIGZvbGxvd2luZyBpcyBub3QgZGVmaW5lZCBieSBMaW51eCBidXQgbmVlZGVkIGZvciB0aGUgQlNEIHBvcnRpb25zIG9mIHRoZSBDIGxpYnJhcnkgKi8KK19fQklPTklDX0VSUkRFRiggRUZUWVBFLCAxMDAwLCAiU3R1cGlkIEMgbGlicmFyeSBoYWNrICEhIiApCisKKyN1bmRlZiBfX0JJT05JQ19FUlJERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvX3NpZ2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NiN2EzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fc2lnZGVmcy5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qIHRoaXMgaGVhZGVyIGlzIHVzZWQgdG8gZGVmaW5lIHNpZ25hbCBjb25zdGFudHMgYW5kIG5hbWVzOyBpdCBtaWdodCBiZSBpbmNsdWRlZCBzZXZlcmFsIHRpbWVzICovCisjaWZuZGVmIF9fQklPTklDX1NJR0RFRgorI2Vycm9yIF9fQklPTklDX1NJR0RFRiBub3QgZGVmaW5lZAorI2VuZGlmCisKK19fQklPTklDX1NJR0RFRihTSUdIVVAsMSwiSGFuZ3VwIikKK19fQklPTklDX1NJR0RFRihTSUdJTlQsMiwiSW50ZXJydXB0IikKK19fQklPTklDX1NJR0RFRihTSUdRVUlULDMsIlF1aXQiKQorX19CSU9OSUNfU0lHREVGKFNJR0lMTCw0LCJJbGxlZ2FsIGluc3RydWN0aW9uIikKK19fQklPTklDX1NJR0RFRihTSUdUUkFQLDUsIlRyYXAiKQorX19CSU9OSUNfU0lHREVGKFNJR0FCUlQsNiwiQWJvcnRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHQlVTLDcsIkJ1cyBlcnJvciIpCitfX0JJT05JQ19TSUdERUYoU0lHRlBFLDgsIkZsb2F0aW5nIHBvaW50IGV4Y2VwdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHS0lMTCw5LCJLaWxsZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1VTUjEsMTAsIlVzZXIgc2lnbmFsIDEiKQorX19CSU9OSUNfU0lHREVGKFNJR1NFR1YsMTEsIlNlZ21lbnRhdGlvbiBmYXVsdCIpCitfX0JJT05JQ19TSUdERUYoU0lHVVNSMiwxMiwiVXNlciBzaWduYWwgMiIpCitfX0JJT05JQ19TSUdERUYoU0lHUElQRSwxMywiQnJva2VuIHBpcGUiKQorX19CSU9OSUNfU0lHREVGKFNJR0FMUk0sMTQsIkFsYXJtIGNsb2NrIikKK19fQklPTklDX1NJR0RFRihTSUdURVJNLDE1LCJUZXJtaW5hdGVkIikKK19fQklPTklDX1NJR0RFRihTSUdTVEtGTFQsMTYsIlN0YWNrIGZhdWx0IikKK19fQklPTklDX1NJR0RFRihTSUdDSExELDE3LCJDaGlsZCBleGl0ZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR0NPTlQsMTgsIkNvbnRpbnVlIikKK19fQklPTklDX1NJR0RFRihTSUdTVE9QLDE5LCJTdG9wcGVkIChzaWduYWwpIikKK19fQklPTklDX1NJR0RFRihTSUdUU1RQLDIwLCJTdG9wcGVkIikKK19fQklPTklDX1NJR0RFRihTSUdUVElOLDIxLCJTdG9wcGVkICh0dHkgaW5wdXQpIikKK19fQklPTklDX1NJR0RFRihTSUdUVE9VLDIyLCJTdG9wcGVyICh0dHkgb3V0cHV0KSIpCitfX0JJT05JQ19TSUdERUYoU0lHVVJHLDIzLCJVcmdlbnQgSS9PIGNvbmRpdGlvbiIpCitfX0JJT05JQ19TSUdERUYoU0lHWENQVSwyNCwiQ1BVIHRpbWUgbGltaXQgZXhjZWVkZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1hGU1osMjUsIkZpbGUgc2l6ZSBsaW1pdCBleGNlZWRlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHVlRBTFJNLDI2LCJWaXJ0dWFsIHRpbWVyIGV4cGlyZWQiKQorX19CSU9OSUNfU0lHREVGKFNJR1BST0YsMjcsIlByb2ZpbGluZyB0aW1lciBleHBpcmVkIikKK19fQklPTklDX1NJR0RFRihTSUdXSU5DSCwyOCwiV2luZG93IHNpemUgY2hhbmdlZCIpCitfX0JJT05JQ19TSUdERUYoU0lHSU8sMjksIkkvTyBwb3NzaWJsZSIpCitfX0JJT05JQ19TSUdERUYoU0lHUFdSLDMwLCJQb3dlciBmYWlsdXJlIikKK19fQklPTklDX1NJR0RFRihTSUdTWVMsMzEsIkJhZCBzeXN0ZW0gY2FsbCIpCisKKyN1bmRlZiBfX0JJT05JQ19TSUdERUYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvX3N5c3RlbV9wcm9wZXJ0aWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExNDU5MjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL19zeXN0ZW1fcHJvcGVydGllcy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19ICisjZGVmaW5lIF9JTkNMVURFX1NZU19fU1lTVEVNX1BST1BFUlRJRVNfSAorCisjaWZuZGVmIF9SRUFMTFlfSU5DTFVERV9TWVNfX1NZU1RFTV9QUk9QRVJUSUVTX0hfCisjZXJyb3IgeW91IHNob3VsZCAjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+IGluc3RlYWQKKyNlbHNlCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKK3R5cGVkZWYgc3RydWN0IHByb3BfYXJlYSBwcm9wX2FyZWE7Cit0eXBlZGVmIHN0cnVjdCBwcm9wX21zZyBwcm9wX21zZzsKKworI2RlZmluZSBQUk9QX0FSRUFfTUFHSUMgICAweDUwNGY1MjUwCisjZGVmaW5lIFBST1BfQVJFQV9WRVJTSU9OIDB4NDU0MzRmNzYKKworI2RlZmluZSBQUk9QX1NFUlZJQ0VfTkFNRSAicHJvcGVydHlfc2VydmljZSIKKworLyogI2RlZmluZSBQUk9QX01BWF9FTlRSSUVTIDI0NyAqLworLyogMjQ3IC0+IDMyNjIwIGJ5dGVzICg8MzI3NjgpICovCisKKyNkZWZpbmUgVE9DX05BTUVfTEVOKHRvYykgICAgICAgKCh0b2MpID4+IDI0KQorI2RlZmluZSBUT0NfVE9fSU5GTyhhcmVhLCB0b2MpICAoKHByb3BfaW5mbyopICgoKGNoYXIqKSBhcmVhKSArICgodG9jKSAmIDB4RkZGRkZGKSkpCisKK3N0cnVjdCBwcm9wX2FyZWEgeworICAgIHVuc2lnbmVkIHZvbGF0aWxlIGNvdW50OworICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKKyAgICB1bnNpZ25lZCBtYWdpYzsKKyAgICB1bnNpZ25lZCB2ZXJzaW9uOworICAgIHVuc2lnbmVkIHJlc2VydmVkWzRdOworICAgIHVuc2lnbmVkIHRvY1sxXTsKK307CisKKyNkZWZpbmUgU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpICgoc2VyaWFsKSA+PiAyNCkKKyNkZWZpbmUgU0VSSUFMX0RJUlRZKHNlcmlhbCkgKChzZXJpYWwpICYgMSkKKworc3RydWN0IHByb3BfaW5mbyB7CisgICAgdW5zaWduZWQgY2hhciBuYW1lW1BST1BfTkFNRV9NQVhdOworICAgIHVuc2lnbmVkIHZvbGF0aWxlIHNlcmlhbDsKKyAgICB1bnNpZ25lZCBjaGFyIHZhbHVlW1BST1BfVkFMVUVfTUFYXTsKK307CisKK3N0cnVjdCBwcm9wX21zZyAKK3sKKyAgICB1bnNpZ25lZCBjbWQ7CisgICAgdW5zaWduZWQgY2hhciBuYW1lW1BST1BfTkFNRV9NQVhdOworICAgIHVuc2lnbmVkIGNoYXIgdmFsdWVbUFJPUF9WQUxVRV9NQVhdOworfTsKKworI2RlZmluZSBQUk9QX01TR19TRVRQUk9QIDEKKyAgICAKKy8qCisqKiBSdWxlczoKKyoqCisqKiAtIHRoZXJlIGlzIG9ubHkgb25lIHdyaXRlciwgYnV0IG1hbnkgcmVhZGVycworKiogLSBwcm9wX2FyZWEuY291bnQgd2lsbCBuZXZlciBkZWNyZWFzZSBpbiB2YWx1ZQorKiogLSBvbmNlIGFsbG9jYXRlZCwgYSBwcm9wX2luZm8ncyBuYW1lIHdpbGwgbm90IGNoYW5nZQorKiogLSBvbmNlIGFsbG9jYXRlZCwgYSBwcm9wX2luZm8ncyBvZmZzZXQgd2lsbCBub3QgY2hhbmdlCisqKiAtIHJlYWRpbmcgYSB2YWx1ZSByZXF1aXJlcyB0aGUgZm9sbG93aW5nIHN0ZXBzCisqKiAgIDEuIHNlcmlhbCA9IHBpLT5zZXJpYWwKKyoqICAgMi4gaWYgU0VSSUFMX0RJUlRZKHNlcmlhbCksIHdhaXQqLCB0aGVuIGdvdG8gMQorKiogICAzLiBtZW1jcHkobG9jYWwsIHBpLT52YWx1ZSwgU0VSSUFMX1ZBTFVFX0xFTihzZXJpYWwpICsgMSkKKyoqICAgNC4gaWYgcGktPnNlcmlhbCAhPSBzZXJpYWwsIGdvdG8gMgorKioKKyoqIC0gd3JpdGluZyBhIHZhbHVlIHJlcXVpcmVzIHRoZSBmb2xsb3dpbmcgc3RlcHMKKyoqICAgMS4gcGktPnNlcmlhbCA9IHBpLT5zZXJpYWwgfCAxCisqKiAgIDIuIG1lbWNweShwaS0+dmFsdWUsIGxvY2FsX3ZhbHVlLCB2YWx1ZV9sZW4pCisqKiAgIDMuIHBpLT5zZXJpYWwgPSAodmFsdWVfbGVuIDw8IDI0KSB8ICgocGktPnNlcmlhbCArIDEpICYgMHhmZmZmZmYpCisqKgorKiogSW1wcm92ZW1lbnRzOgorKiogLSBtYWludGFpbiB0aGUgdG9jIHNvcnRlZCBieSBwaS0+bmFtZSB0byBhbGxvdyBsb29rdXAKKyoqICAgYnkgYmluYXJ5IHNlYXJjaAorKioKKyovCisKKyNkZWZpbmUgUFJPUF9QQVRIX1JBTURJU0tfREVGQVVMVCAgIi9kZWZhdWx0LnByb3AiCisjZGVmaW5lIFBST1BfUEFUSF9TWVNURU1fQlVJTEQgICAgICIvc3lzdGVtL2J1aWxkLnByb3AiCisjZGVmaW5lIFBST1BfUEFUSF9TWVNURU1fREVGQVVMVCAgICIvc3lzdGVtL2RlZmF1bHQucHJvcCIKKyNkZWZpbmUgUFJPUF9QQVRIX0xPQ0FMX09WRVJSSURFICAgIi9kYXRhL2xvY2FsLnByb3AiCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL190eXBlcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43Yjk5ZTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9fdHlwZXMuaApAQCAtMCwwICsxLDc3IEBACisvKgkkT3BlbkJTRDogX3R5cGVzLmgsdiAxLjEgMjAwNi8wMS8wNiAxODo1MzowNSBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKgorICoJQCgjKXR5cGVzLmgJOC4zIChCZXJrZWxleSkgMS81Lzk0CisgKi8KKworI2lmbmRlZiBfU1lTX19UWVBFU19IXworI2RlZmluZQlfU1lTX19UWVBFU19IXworCisjdW5kZWYgIF9fS0VSTkVMX1NUUklDVF9OQU1FUworI2RlZmluZSBfX0tFUk5FTF9TVFJJQ1RfTkFNRVMgIDEKKworI2luY2x1ZGUgPG1hY2hpbmUvX3R5cGVzLmg+CisKK3R5cGVkZWYJdW5zaWduZWQgbG9uZwlfX2NwdWlkX3Q7CS8qIENQVSBpZCAqLwordHlwZWRlZglfX2ludDMyX3QJX19kZXZfdDsJLyogZGV2aWNlIG51bWJlciAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fZml4cHRfdDsJLyogZml4ZWQgcG9pbnQgbnVtYmVyICovCit0eXBlZGVmCV9fdWludDMyX3QJX19naWRfdDsJLyogZ3JvdXAgaWQgKi8KK3R5cGVkZWYJX191aW50MzJfdAlfX2lkX3Q7CQkvKiBtYXkgY29udGFpbiBwaWQsIHVpZCBvciBnaWQgKi8KK3R5cGVkZWYgX191aW50MzJfdAlfX2luX2FkZHJfdDsJLyogYmFzZSB0eXBlIGZvciBpbnRlcm5ldCBhZGRyZXNzICovCit0eXBlZGVmIF9fdWludDE2X3QJX19pbl9wb3J0X3Q7CS8qIElQIHBvcnQgdHlwZSAqLwordHlwZWRlZglfX3VpbnQzMl90CV9faW5vX3Q7CS8qIGlub2RlIG51bWJlciAqLwordHlwZWRlZglsb25nCQlfX2tleV90OwkvKiBJUEMga2V5IChmb3IgU3lzIFYgSVBDKSAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fbW9kZV90OwkvKiBwZXJtaXNzaW9ucyAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fbmxpbmtfdDsJLyogbGluayBjb3VudCAqLwordHlwZWRlZglfX2ludDMyX3QJX19waWRfdDsJLyogcHJvY2VzcyBpZCAqLwordHlwZWRlZiBfX3VpbnQ2NF90CV9fcmxpbV90OwkvKiByZXNvdXJjZSBsaW1pdCAqLwordHlwZWRlZiBfX3VpbnQxNl90CV9fc2FfZmFtaWx5X3Q7CS8qIHNvY2thZGRyIGFkZHJlc3MgZmFtaWx5IHR5cGUgKi8KK3R5cGVkZWYJX19pbnQzMl90CV9fc2Vnc3pfdDsJLyogc2VnbWVudCBzaXplICovCit0eXBlZGVmIF9fdWludDMyX3QJX19zb2NrbGVuX3Q7CS8qIGxlbmd0aCB0eXBlIGZvciBuZXR3b3JrIHN5c2NhbGxzICovCit0eXBlZGVmCV9faW50MzJfdAlfX3N3YmxrX3Q7CS8qIHN3YXAgb2Zmc2V0ICovCit0eXBlZGVmCV9fdWludDMyX3QJX191aWRfdDsJLyogdXNlciBpZCAqLwordHlwZWRlZglfX3VpbnQzMl90CV9fdXNlY29uZHNfdDsJLyogbWljcm9zZWNvbmRzICovCit0eXBlZGVmCV9faW50MzJfdAlfX3N1c2Vjb25kc190OwkvKiBtaWNyb3NlY29uZHMgKHNpZ25lZCkgKi8KKworLyoKKyAqIG1ic3RhdGVfdCBpcyBhbiBvcGFxdWUgb2JqZWN0IHRvIGtlZXAgY29udmVyc2lvbiBzdGF0ZSwgZHVyaW5nIG11bHRpYnl0ZQorICogc3RyZWFtIGNvbnZlcnNpb25zLiBUaGUgY29udGVudCBtdXN0IG5vdCBiZSByZWZlcmVuY2VkIGJ5IHVzZXIgcHJvZ3JhbXMuCisgKi8KK3R5cGVkZWYgdW5pb24geworCWNoYXIgX19tYnN0YXRlOFsxMjhdOworCV9faW50NjRfdCBfX21ic3RhdGVMOwkJCS8qIGZvciBhbGlnbm1lbnQgKi8KK30gX19tYnN0YXRlX3Q7CisKKy8qIEJJT05JQzogaWYgd2UncmUgdXNpbmcgbm9uLWNsZWFuZWQgdXAgdXNlci1sZXZlbCBrZXJuZWwgaGVhZGVycywgCisgKiAgICAgICAgIHRoaXMgd2lsbCBwcmV2ZW50IG1hbnkgdHlwZSBkZWNsYXJhdGlvbiBjb25mbGljdHMKKyAqLworI2RlZmluZSAgX19LRVJORUxfU1RSSUNUX05BTUVTICAxCisKKyNlbmRpZiAvKiAhX1NZU19fVFlQRVNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYW5kcm9pZC9hdG9taWNzLmggYi9saWJjL2luY2x1ZGUvc3lzL2FuZHJvaWQvYXRvbWljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1MDE3YjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2FuZHJvaWQvYXRvbWljcy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvYXRvbWljcy5oPgpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvYW5kcm9pZC90bHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvYW5kcm9pZC90bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNzRhYzM1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9hbmRyb2lkL3Rscy5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxzeXMvdGxzLmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2F0b21pY3MuaCBiL2xpYmMvaW5jbHVkZS9zeXMvYXRvbWljcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiZjliNmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2F0b21pY3MuaApAQCAtMCwwICsxLDQ1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfQVRPTUlDU19ICisjZGVmaW5lIF9TWVNfQVRPTUlDU19ICisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IF9fYXRvbWljX2NtcHhjaGcoaW50IG9sZCwgaW50IF9uZXcsIHZvbGF0aWxlIGludCAqcHRyKTsKK2V4dGVybiBpbnQgX19hdG9taWNfc3dhcChpbnQgX25ldywgdm9sYXRpbGUgaW50ICpwdHIpOworZXh0ZXJuIGludCBfX2F0b21pY19kZWModm9sYXRpbGUgaW50ICpwdHIpOworZXh0ZXJuIGludCBfX2F0b21pY19pbmModm9sYXRpbGUgaW50ICpwdHIpOworCitpbnQgX19mdXRleF93YWl0KHZvbGF0aWxlIHZvaWQgKmZ0eCwgaW50IHZhbCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0aW1lb3V0KTsKK2ludCBfX2Z1dGV4X3dha2Uodm9sYXRpbGUgdm9pZCAqZnR4LCBpbnQgY291bnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19BVE9NSUNTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTcwMzNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9jZGVmcy5oCkBAIC0wLDAgKzEsMzc2IEBACisvKgkkTmV0QlNEOiBjZGVmcy5oLHYgMS41OCAyMDA0LzEyLzExIDA1OjU5OjAwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIEJlcmtlbGV5IFNvZnR3YXJlIERlc2lnbiwgSW5jLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqCisgKglAKCMpY2RlZnMuaAk4LjggKEJlcmtlbGV5KSAxLzkvOTUKKyAqLworCisjaWZuZGVmCV9TWVNfQ0RFRlNfSF8KKyNkZWZpbmUJX1NZU19DREVGU19IXworCisKKy8qIG91ciBpbXBsZW1lbnRhdGlvbiBvZiB3Y2hhcl90IGlzIG9ubHkgOC1iaXQgLSBkaWUgZGllIG5vbi1wb3J0YWJsZSBjb2RlICovCisjdW5kZWYgIF9fV0NIQVJfVFlQRV9fCisjZGVmaW5lIF9fV0NIQVJfVFlQRV9fICB1bnNpZ25lZCBjaGFyCisKKworLyoKKyAqIE1hY3JvIHRvIHRlc3QgaWYgd2UncmUgdXNpbmcgYSBHTlUgQyBjb21waWxlciBvZiBhIHNwZWNpZmljIHZpbnRhZ2UKKyAqIG9yIGxhdGVyLCBmb3IgZS5nLiBmZWF0dXJlcyB0aGF0IGFwcGVhcmVkIGluIGEgcGFydGljdWxhciB2ZXJzaW9uCisgKiBvZiBHTlUgQy4gIFVzYWdlOgorICoKKyAqCSNpZiBfX0dOVUNfUFJFUkVRX18obWFqb3IsIG1pbm9yKQorICoJLi4uY29vbCBmZWF0dXJlLi4uCisgKgkjZWxzZQorICoJLi4uZGVsZXRlIGZlYXR1cmUuLi4KKyAqCSNlbmRpZgorICovCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUJX19HTlVDX1BSRVJFUV9fKHgsIHkpCQkJCQkJXAorCSgoX19HTlVDX18gPT0gKHgpICYmIF9fR05VQ19NSU5PUl9fID49ICh5KSkgfHwJCQlcCisJIChfX0dOVUNfXyA+ICh4KSkpCisjZWxzZQorI2RlZmluZQlfX0dOVUNfUFJFUkVRX18oeCwgeSkJMAorI2VuZGlmCisKKy8vWFhYICNpbmNsdWRlIDxtYWNoaW5lL2NkZWZzLmg+CisKKy8qIEJJT05JQzogc2ltcGxlciBkZWZpbml0aW9uICovCisjZGVmaW5lIF9fQlNEX1ZJU0lCTEUgICAxCisKKyNpbmNsdWRlIDxzeXMvY2RlZnNfZWxmLmg+CisKKyNpZiBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZQlfX0JFR0lOX0RFQ0xTCQlleHRlcm4gIkMiIHsKKyNkZWZpbmUJX19FTkRfREVDTFMJCX0KKyNkZWZpbmUJX19zdGF0aWNfY2FzdCh4LHkpCXN0YXRpY19jYXN0PHg+KHkpCisjZWxzZQorI2RlZmluZQlfX0JFR0lOX0RFQ0xTCisjZGVmaW5lCV9fRU5EX0RFQ0xTCisjZGVmaW5lCV9fc3RhdGljX2Nhc3QoeCx5KQkoeCl5CisjZW5kaWYKKworLyoKKyAqIFRoZSBfX0NPTkNBVCBtYWNybyBpcyB1c2VkIHRvIGNvbmNhdGVuYXRlIHBhcnRzIG9mIHN5bWJvbCBuYW1lcywgZS5nLgorICogd2l0aCAiI2RlZmluZSBPTEQoZm9vKSBfX0NPTkNBVChvbGQsZm9vKSIsIE9MRChmb28pIHByb2R1Y2VzIG9sZGZvby4KKyAqIFRoZSBfX0NPTkNBVCBtYWNybyBpcyBhIGJpdCB0cmlja3kgLS0gbWFrZSBzdXJlIHlvdSBkb24ndCBwdXQgc3BhY2VzCisgKiBpbiBiZXR3ZWVuIGl0cyBhcmd1bWVudHMuICBfX0NPTkNBVCBjYW4gYWxzbyBjb25jYXRlbmF0ZSBkb3VibGUtcXVvdGVkCisgKiBzdHJpbmdzIHByb2R1Y2VkIGJ5IHRoZSBfX1NUUklORyBtYWNybywgYnV0IHRoaXMgb25seSB3b3JrcyB3aXRoIEFOU0kgQy4KKyAqLworCisjZGVmaW5lCV9fX1NUUklORyh4KQlfX1NUUklORyh4KQorI2RlZmluZQlfX19DT05DQVQoeCx5KQlfX0NPTkNBVCh4LHkpCisKKyNpZiBfX1NURENfXyB8fCBkZWZpbmVkKF9fY3BsdXNwbHVzKQorI2RlZmluZQlfX1AocHJvdG9zKQlwcm90b3MJCS8qIGZ1bGwtYmxvd24gQU5TSSBDICovCisjZGVmaW5lCV9fQ09OQ0FUKHgseSkJeCAjIyB5CisjZGVmaW5lCV9fU1RSSU5HKHgpCSN4CisKKyNkZWZpbmUJX19jb25zdAkJY29uc3QJCS8qIGRlZmluZSByZXNlcnZlZCBuYW1lcyB0byBzdGFuZGFyZCAqLworI2RlZmluZQlfX3NpZ25lZAlzaWduZWQKKyNkZWZpbmUJX192b2xhdGlsZQl2b2xhdGlsZQorI2lmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lCV9faW5saW5lCWlubGluZQkJLyogY29udmVydCB0byBDKysga2V5d29yZCAqLworI2Vsc2UKKyNpZiAhZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19saW50X18pCisjZGVmaW5lCV9faW5saW5lCQkJLyogZGVsZXRlIEdDQyBrZXl3b3JkICovCisjZW5kaWYgLyogIV9fR05VQ19fICAmJiAhX19saW50X18gKi8KKyNlbmRpZiAvKiAhX19jcGx1c3BsdXMgKi8KKworI2Vsc2UJLyogIShfX1NURENfXyB8fCBfX2NwbHVzcGx1cykgKi8KKyNkZWZpbmUJX19QKHByb3RvcykJKCkJCS8qIHRyYWRpdGlvbmFsIEMgcHJlcHJvY2Vzc29yICovCisjZGVmaW5lCV9fQ09OQ0FUKHgseSkJeC8qKi95CisjZGVmaW5lCV9fU1RSSU5HKHgpCSJ4IgorCisjaWZuZGVmIF9fR05VQ19fCisjZGVmaW5lCV9fY29uc3QJCQkJLyogZGVsZXRlIHBzZXVkby1BTlNJIEMga2V5d29yZHMgKi8KKyNkZWZpbmUJX19pbmxpbmUKKyNkZWZpbmUJX19zaWduZWQKKyNkZWZpbmUJX192b2xhdGlsZQorI2VuZGlmCS8qICFfX0dOVUNfXyAqLworCisvKgorICogSW4gbm9uLUFOU0kgQyBlbnZpcm9ubWVudHMsIG5ldyBwcm9ncmFtcyB3aWxsIHdhbnQgQU5TSS1vbmx5IEMga2V5d29yZHMKKyAqIGRlbGV0ZWQgZnJvbSB0aGUgcHJvZ3JhbSBhbmQgb2xkIHByb2dyYW1zIHdpbGwgd2FudCB0aGVtIGxlZnQgYWxvbmUuCisgKiBQcm9ncmFtcyB1c2luZyB0aGUgQU5TSSBDIGtleXdvcmRzIGNvbnN0LCBpbmxpbmUgZXRjLiBhcyBub3JtYWwKKyAqIGlkZW50aWZpZXJzIHNob3VsZCBkZWZpbmUgLUROT19BTlNJX0tFWVdPUkRTLgorICovCisjaWZuZGVmCU5PX0FOU0lfS0VZV09SRFMKKyNkZWZpbmUJY29uc3QJCV9fY29uc3QJCS8qIGNvbnZlcnQgQU5TSSBDIGtleXdvcmRzICovCisjZGVmaW5lCWlubGluZQkJX19pbmxpbmUKKyNkZWZpbmUJc2lnbmVkCQlfX3NpZ25lZAorI2RlZmluZQl2b2xhdGlsZQlfX3ZvbGF0aWxlCisjZW5kaWYgLyogIU5PX0FOU0lfS0VZV09SRFMgKi8KKyNlbmRpZgkvKiAhKF9fU1REQ19fIHx8IF9fY3BsdXNwbHVzKSAqLworCisvKgorICogVXNlZCBmb3IgaW50ZXJuYWwgYXVkaXRpbmcgb2YgdGhlIE5ldEJTRCBzb3VyY2UgdHJlZS4KKyAqLworI2lmZGVmIF9fQVVESVRfXworI2RlZmluZQlfX2Fjb25zdAlfX2NvbnN0CisjZWxzZQorI2RlZmluZQlfX2Fjb25zdAorI2VuZGlmCisKKy8qCisgKiBUaGUgZm9sbG93aW5nIG1hY3JvIGlzIHVzZWQgdG8gcmVtb3ZlIGNvbnN0IGNhc3QtYXdheSB3YXJuaW5ncworICogZnJvbSBnY2MgLVdjYXN0LXF1YWw7IGl0IHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbiBiZWNhdXNlIGl0CisgKiBjYW4gaGlkZSB2YWxpZCBlcnJvcnM7IGluIHBhcnRpY3VsYXIgbW9zdCB2YWxpZCB1c2VzIGFyZSBpbgorICogc2l0dWF0aW9ucyB3aGVyZSB0aGUgQVBJIHJlcXVpcmVzIGl0LCBub3QgdG8gY2FzdCBhd2F5IHN0cmluZworICogY29uc3RhbnRzLiBXZSBkb24ndCB1c2UgKmludHB0cl90IG9uIHB1cnBvc2UgaGVyZSBhbmQgd2UgYXJlCisgKiBleHBsaWNpdCBhYm91dCB1bnNpZ25lZCBsb25nIHNvIHRoYXQgd2UgZG9uJ3QgaGF2ZSBhZGRpdGlvbmFsCisgKiBkZXBlbmRlbmNpZXMuCisgKi8KKyNkZWZpbmUgX19VTkNPTlNUKGEpCSgodm9pZCAqKSh1bnNpZ25lZCBsb25nKShjb25zdCB2b2lkICopKGEpKQorCisvKgorICogR0NDMiBwcm92aWRlcyBfX2V4dGVuc2lvbl9fIHRvIHN1cHByZXNzIHdhcm5pbmdzIGZvciB2YXJpb3VzIEdOVSBDCisgKiBsYW5ndWFnZSBleHRlbnNpb25zIHVuZGVyICItYW5zaSAtcGVkYW50aWMiLgorICovCisjaWYgIV9fR05VQ19QUkVSRVFfXygyLCAwKQorI2RlZmluZQlfX2V4dGVuc2lvbl9fCQkvKiBkZWxldGUgX19leHRlbnNpb25fXyBpZiBub24tZ2NjIG9yIGdjYzEgKi8KKyNlbmRpZgorCisvKgorICogR0NDMSBhbmQgc29tZSB2ZXJzaW9ucyBvZiBHQ0MyIGRlY2xhcmUgZGVhZCAobm9uLXJldHVybmluZykgYW5kCisgKiBwdXJlIChubyBzaWRlIGVmZmVjdHMpIGZ1bmN0aW9ucyB1c2luZyAidm9sYXRpbGUiIGFuZCAiY29uc3QiOworICogdW5mb3J0dW5hdGVseSwgdGhlc2UgdGhlbiBjYXVzZSB3YXJuaW5ncyB1bmRlciAiLWFuc2kgLXBlZGFudGljIi4KKyAqIEdDQzIgdXNlcyBhIG5ldywgcGVjdWxpYXIgX19hdHRyaWJ1dGVfXygoYXR0cnMpKSBzdHlsZS4gIEFsbCBvZgorICogdGhlc2Ugd29yayBmb3IgR05VIEMrKyAobW9kdWxvIGEgc2xpZ2h0IGdsaXRjaCBpbiB0aGUgQysrIGdyYW1tYXIKKyAqIGluIHRoZSBkaXN0cmlidXRpb24gdmVyc2lvbiBvZiAyLjUuNSkuCisgKi8KKyNpZiAhX19HTlVDX1BSRVJFUV9fKDIsIDUpCisjZGVmaW5lCV9fYXR0cmlidXRlX18oeCkJLyogZGVsZXRlIF9fYXR0cmlidXRlX18gaWYgbm9uLWdjYyBvciBnY2MxICovCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQorI2RlZmluZQlfX2RlYWQJCV9fdm9sYXRpbGUKKyNkZWZpbmUJX19wdXJlCQlfX2NvbnN0CisjZW5kaWYKKyNlbmRpZgorCisvKiBEZWxldGUgcHNldWRvLWtleXdvcmRzIHdoZXJldmVyIHRoZXkgYXJlIG5vdCBhdmFpbGFibGUgb3IgbmVlZGVkLiAqLworI2lmbmRlZiBfX2RlYWQKKyNkZWZpbmUJX19kZWFkCisjZGVmaW5lCV9fcHVyZQorI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oMiwgNykKKyNkZWZpbmUJX191bnVzZWQJX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCisjZWxzZQorI2RlZmluZQlfX3VudXNlZAkvKiBkZWxldGUgKi8KKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDMsIDEpCisjZGVmaW5lCV9fdXNlZAkJX19hdHRyaWJ1dGVfXygoX191c2VkX18pKQorI2Vsc2UKKyNkZWZpbmUJX191c2VkCQkvKiBkZWxldGUgKi8KKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDIsIDcpCisjZGVmaW5lCV9fcGFja2VkCV9fYXR0cmlidXRlX18oKF9fcGFja2VkX18pKQorI2RlZmluZQlfX2FsaWduZWQoeCkJX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oeCkpKQorI2RlZmluZQlfX3NlY3Rpb24oeCkJX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oeCkpKQorI2VsaWYgZGVmaW5lZChfX2xpbnRfXykKKyNkZWZpbmUJX19wYWNrZWQJLyogZGVsZXRlICovCisjZGVmaW5lCV9fYWxpZ25lZCh4KQkvKiBkZWxldGUgKi8KKyNkZWZpbmUJX19zZWN0aW9uKHgpCS8qIGRlbGV0ZSAqLworI2Vsc2UKKyNkZWZpbmUJX19wYWNrZWQJZXJyb3I6IG5vIF9fcGFja2VkIGZvciB0aGlzIGNvbXBpbGVyCisjZGVmaW5lCV9fYWxpZ25lZCh4KQllcnJvcjogbm8gX19hbGlnbmVkIGZvciB0aGlzIGNvbXBpbGVyCisjZGVmaW5lCV9fc2VjdGlvbih4KQllcnJvcjogbm8gX19zZWN0aW9uIGZvciB0aGlzIGNvbXBpbGVyCisjZW5kaWYKKworI2lmICFfX0dOVUNfUFJFUkVRX18oMiwgOCkKKyNkZWZpbmUJX19leHRlbnNpb25fXworI2VuZGlmCisKKyNpZiBfX0dOVUNfUFJFUkVRX18oMiwgOCkKKyNkZWZpbmUgX19zdGF0ZW1lbnQoeCkJX19leHRlbnNpb25fXyh4KQorI2VsaWYgZGVmaW5lZChsaW50KQorI2RlZmluZSBfX3N0YXRlbWVudCh4KQkoMCkKKyNlbHNlCisjZGVmaW5lIF9fc3RhdGVtZW50KHgpCSh4KQorI2VuZGlmCisKKy8qCisgKiBDOTkgZGVmaW5lcyB0aGUgcmVzdHJpY3QgdHlwZSBxdWFsaWZpZXIga2V5d29yZCwgd2hpY2ggd2FzIG1hZGUgYXZhaWxhYmxlCisgKiBpbiBHQ0MgMi45Mi4KKyAqLworI2lmIF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTAorI2RlZmluZQlfX3Jlc3RyaWN0CXJlc3RyaWN0CisjZWxzZQorI2lmICFfX0dOVUNfUFJFUkVRX18oMiwgOTIpCisjZGVmaW5lCV9fcmVzdHJpY3QJLyogZGVsZXRlIF9fcmVzdHJpY3Qgd2hlbiBub3Qgc3VwcG9ydGVkICovCisjZW5kaWYKKyNlbmRpZgorCisvKgorICogQzk5IGRlZmluZXMgX19mdW5jX18gcHJlZGVmaW5lZCBpZGVudGlmaWVyLCB3aGljaCB3YXMgbWFkZSBhdmFpbGFibGUKKyAqIGluIEdDQyAyLjk1LgorICovCisjaWYgIShfX1NURENfVkVSU0lPTl9fID49IDE5OTkwMUwpCisjaWYgX19HTlVDX1BSRVJFUV9fKDIsIDYpCisjZGVmaW5lCV9fZnVuY19fCV9fUFJFVFRZX0ZVTkNUSU9OX18KKyNlbGlmIF9fR05VQ19QUkVSRVFfXygyLCA0KQorI2RlZmluZQlfX2Z1bmNfXwlfX0ZVTkNUSU9OX18KKyNlbHNlCisjZGVmaW5lCV9fZnVuY19fCSIiCisjZW5kaWYKKyNlbmRpZiAvKiAhKF9fU1REQ19WRVJTSU9OX18gPj0gMTk5OTAxTCkgKi8KKworI2lmIGRlZmluZWQoX0tFUk5FTCkKKyNpZiBkZWZpbmVkKE5PX0tFUk5FTF9SQ1NJRFMpCisjdW5kZWYgX19LRVJORUxfUkNTSUQKKyNkZWZpbmUJX19LRVJORUxfUkNTSUQoX24sIF9zKQkJLyogbm90aGluZyAqLworI2VuZGlmIC8qIE5PX0tFUk5FTF9SQ1NJRFMgKi8KKyNlbmRpZiAvKiBfS0VSTkVMICovCisKKyNpZiAhZGVmaW5lZChfU1RBTkRBTE9ORSkgJiYgIWRlZmluZWQoX0tFUk5FTCkKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZQlfX1JFTkFNRSh4KQlfX19SRU5BTUUoeCkKKyNlbHNlCisjaWZkZWYgX19saW50X18KKyNkZWZpbmUJX19SRU5BTUUoeCkJX19zeW1ib2xyZW5hbWUoeCkKKyNlbHNlCisjZXJyb3IgIk5vIGZ1bmN0aW9uIHJlbmFtaW5nIHBvc3NpYmxlIgorI2VuZGlmIC8qIF9fbGludF9fICovCisjZW5kaWYgLyogX19HTlVDX18gKi8KKyNlbHNlIC8qIF9TVEFOREFMT05FIHx8IF9LRVJORUwgKi8KKyNkZWZpbmUJX19SRU5BTUUoeCkJbm8gcmVuYW1pbmcgaW4ga2VybmVsIG9yIHN0YW5kYWxvbmUgZW52aXJvbm1lbnQKKyNlbmRpZgorCisvKgorICogQSBiYXJyaWVyIHRvIHN0b3AgdGhlIG9wdGltaXplciBmcm9tIG1vdmluZyBjb2RlIG9yIGFzc3VtZSBsaXZlCisgKiByZWdpc3RlciB2YWx1ZXMuIFRoaXMgaXMgZ2NjIHNwZWNpZmljLCB0aGUgdmVyc2lvbiBpcyBtb3JlIG9yIGxlc3MKKyAqIGFyYml0cmFyeSwgbWlnaHQgd29yayB3aXRoIG9sZGVyIGNvbXBpbGVycy4KKyAqLworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NSkKKyNkZWZpbmUJX19pbnNuX2JhcnJpZXIoKQlfX2FzbSBfX3ZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpCisjZWxzZQorI2RlZmluZQlfX2luc25fYmFycmllcigpCS8qICovCisjZW5kaWYKKworLyoKKyAqIEdOVSBDIHZlcnNpb24gMi45NiBhZGRzIGV4cGxpY2l0IGJyYW5jaCBwcmVkaWN0aW9uIHNvIHRoYXQKKyAqIHRoZSBDUFUgYmFjay1lbmQgY2FuIGhpbnQgdGhlIHByb2Nlc3NvciBhbmQgYWxzbyBzbyB0aGF0CisgKiBjb2RlIGJsb2NrcyBjYW4gYmUgcmVvcmRlcmVkIHN1Y2ggdGhhdCB0aGUgcHJlZGljdGVkIHBhdGgKKyAqIHNlZXMgYSBtb3JlIGxpbmVhciBmbG93LCB0aHVzIGltcHJvdmluZyBjYWNoZSBiZWhhdmlvciwgZXRjLgorICoKKyAqIFRoZSBmb2xsb3dpbmcgdHdvIG1hY3JvcyBwcm92aWRlIHVzIHdpdGggYSB3YXkgdG8gdXNlIHRoaXMKKyAqIGNvbXBpbGVyIGZlYXR1cmUuICBVc2UgX19wcmVkaWN0X3RydWUoKSBpZiB5b3UgZXhwZWN0IHRoZSBleHByZXNzaW9uCisgKiB0byBldmFsdWF0ZSB0byB0cnVlLCBhbmQgX19wcmVkaWN0X2ZhbHNlKCkgaWYgeW91IGV4cGVjdCB0aGUKKyAqIGV4cHJlc3Npb24gdG8gZXZhbHVhdGUgdG8gZmFsc2UuCisgKgorICogQSBmZXcgbm90ZXMgYWJvdXQgdXNhZ2U6CisgKgorICoJKiBHZW5lcmFsbHksIF9fcHJlZGljdF9mYWxzZSgpIGVycm9yIGNvbmRpdGlvbiBjaGVja3MgKHVubGVzcworICoJICB5b3UgaGF2ZSBzb21lIF9zdHJvbmdfIHJlYXNvbiB0byBkbyBvdGhlcndpc2UsIGluIHdoaWNoIGNhc2UKKyAqCSAgZG9jdW1lbnQgaXQpLCBhbmQvb3IgX19wcmVkaWN0X3RydWUoKSBgbm8tZXJyb3InIGNvbmRpdGlvbgorICoJICBjaGVja3MsIGFzc3VtaW5nIHlvdSB3YW50IHRvIG9wdGltaXplIGZvciB0aGUgbm8tZXJyb3IgY2FzZS4KKyAqCisgKgkqIE90aGVyIHRoYW4gdGhhdCwgaWYgeW91IGRvbid0IGtub3cgdGhlIGxpa2VsaWhvb2Qgb2YgYSB0ZXN0CisgKgkgIHN1Y2NlZWRpbmcgZnJvbSBlbXBpcmljYWwgb3Igb3RoZXIgYGhhcmQnIGV2aWRlbmNlLCBkb24ndAorICoJICBtYWtlIHByZWRpY3Rpb25zLgorICoKKyAqCSogVGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgaW4gcGxhY2VzIHRoYXQgYXJlIHJ1biBgYSBsb3QnLgorICoJICBJdCBpcyB3YXN0ZWZ1bCB0byBtYWtlIHByZWRpY3Rpb25zIGluIGNvZGUgdGhhdCBpcyBydW4KKyAqCSAgc2VsZG9tbHkgKGUuZy4gYXQgc3Vic3lzdGVtIGluaXRpYWxpemF0aW9uIHRpbWUpIGFzIHRoZQorICoJICBiYXNpYyBibG9jayByZW9yZGVyaW5nIHRoYXQgdGhpcyBhZmZlY3RzIGNhbiBvZnRlbiBnZW5lcmF0ZQorICoJICBsYXJnZXIgY29kZS4KKyAqLworI2lmIF9fR05VQ19QUkVSRVFfXygyLCA5NikKKyNkZWZpbmUJX19wcmVkaWN0X3RydWUoZXhwKQlfX2J1aWx0aW5fZXhwZWN0KChleHApICE9IDAsIDEpCisjZGVmaW5lCV9fcHJlZGljdF9mYWxzZShleHApCV9fYnVpbHRpbl9leHBlY3QoKGV4cCkgIT0gMCwgMCkKKyNlbHNlCisjZGVmaW5lCV9fcHJlZGljdF90cnVlKGV4cCkJKGV4cCkKKyNkZWZpbmUJX19wcmVkaWN0X2ZhbHNlKGV4cCkJKGV4cCkKKyNlbmRpZgorCisjaWYgX19HTlVDX1BSRVJFUV9fKDIsIDk2KQorI2RlZmluZSBfX25vcmV0dXJuICAgIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpCisjZGVmaW5lIF9fbWFsbG9jZnVuYyAgX19hdHRyaWJ1dGVfXygobWFsbG9jKSkKKyNlbHNlCisjZGVmaW5lIF9fbm9yZXR1cm4KKyNkZWZpbmUgX19tYWxsb2NmdW5jCisjZW5kaWYKKworLyoKKyAqIE1hY3JvcyBmb3IgbWFuaXB1bGF0aW5nICJsaW5rIHNldHMiLiAgTGluayBzZXRzIGFyZSBhcnJheXMgb2YgcG9pbnRlcnMKKyAqIHRvIG9iamVjdHMsIHdoaWNoIGFyZSBnYXRoZXJlZCB1cCBieSB0aGUgbGlua2VyLgorICoKKyAqIE9iamVjdCBmb3JtYXQtc3BlY2lmaWMgY29kZSBoYXMgcHJvdmlkZWQgdXMgd2l0aCB0aGUgZm9sbG93aW5nIG1hY3JvczoKKyAqCisgKglfX2xpbmtfc2V0X2FkZF90ZXh0KHNldCwgc3ltKQorICoJCUFkZCBhIHJlZmVyZW5jZSB0byB0aGUgLnRleHQgc3ltYm9sIGBzeW0nIHRvIGBzZXQnLgorICoKKyAqCV9fbGlua19zZXRfYWRkX3JvZGF0YShzZXQsIHN5bSkKKyAqCQlBZGQgYSByZWZlcmVuY2UgdG8gdGhlIC5yb2RhdGEgc3ltYm9sIGBzeW0nIHRvIGBzZXQnLgorICoKKyAqCV9fbGlua19zZXRfYWRkX2RhdGEoc2V0LCBzeW0pCisgKgkJQWRkIGEgcmVmZXJlbmNlIHRvIHRoZSAuZGF0YSBzeW1ib2wgYHN5bScgdG8gYHNldCcuCisgKgorICoJX19saW5rX3NldF9hZGRfYnNzKHNldCwgc3ltKQorICoJCUFkZCBhIHJlZmVyZW5jZSB0byB0aGUgLmJzcyBzeW1ib2wgYHN5bScgdG8gYHNldCcuCisgKgorICoJX19saW5rX3NldF9kZWNsKHNldCwgcHR5cGUpCisgKgkJUHJvdmlkZSBhbiBleHRlcm4gZGVjbGFyYXRpb24gb2YgdGhlIHNldCBgc2V0Jywgd2hpY2gKKyAqCQljb250YWlucyBhbiBhcnJheSBvZiB0aGUgcG9pbnRlciB0eXBlIGBwdHlwZScuICBUaGlzCisgKgkJbWFjcm8gbXVzdCBiZSB1c2VkIGJ5IGFueSBjb2RlIHdoaWNoIHdpc2hlcyB0byByZWZlcmVuY2UKKyAqCQl0aGUgZWxlbWVudHMgb2YgYSBsaW5rIHNldC4KKyAqCisgKglfX2xpbmtfc2V0X3N0YXJ0KHNldCkKKyAqCQlUaGlzIHBvaW50cyB0byB0aGUgZmlyc3Qgc2xvdCBpbiB0aGUgbGluayBzZXQuCisgKgorICoJX19saW5rX3NldF9lbmQoc2V0KQorICoJCVRoaXMgcG9pbnRzIHRvIHRoZSAobm9uLWV4aXN0ZW50KSBzbG90IGFmdGVyIHRoZSBsYXN0CisgKgkJZW50cnkgaW4gdGhlIGxpbmsgc2V0LgorICoKKyAqCV9fbGlua19zZXRfY291bnQoc2V0KQorICoJCUNvdW50IHRoZSBudW1iZXIgb2YgZW50cmllcyBpbiBsaW5rIHNldCBgc2V0Jy4KKyAqCisgKiBJbiBhZGRpdGlvbiwgd2UgcHJvdmlkZSB0aGUgZm9sbG93aW5nIG1hY3JvcyBmb3IgYWNjZXNzaW5nIGxpbmsgc2V0czoKKyAqCisgKglfX2xpbmtfc2V0X2ZvcmVhY2gocHZhciwgc2V0KQorICoJCUl0ZXJhdGUgb3ZlciB0aGUgbGluayBzZXQgYHNldCcuICBCZWNhdXNlIGEgbGluayBzZXQgaXMKKyAqCQlhbiBhcnJheSBvZiBwb2ludGVycywgcHZhciBtdXN0IGJlIGRlY2xhcmVkIGFzICJ0eXBlICoqcHZhciIsCisgKgkJYW5kIHRoZSBhY3R1YWwgZW50cnkgYWNjZXNzZWQgYXMgIipwdmFyIi4KKyAqCisgKglfX2xpbmtfc2V0X2VudHJ5KHNldCwgaWR4KQorICoJCUFjY2VzcyB0aGUgbGluayBzZXQgZW50cnkgYXQgaW5kZXggYGlkeCcgZnJvbSBzZXQgYHNldCcuCisgKi8KKyNkZWZpbmUJX19saW5rX3NldF9mb3JlYWNoKHB2YXIsIHNldCkJCQkJCVwKKwlmb3IgKHB2YXIgPSBfX2xpbmtfc2V0X3N0YXJ0KHNldCk7IHB2YXIgPCBfX2xpbmtfc2V0X2VuZChzZXQpOyBwdmFyKyspCisKKyNkZWZpbmUJX19saW5rX3NldF9lbnRyeShzZXQsIGlkeCkJKF9fbGlua19zZXRfYmVnaW4oc2V0KVtpZHhdKQorCisjZGVmaW5lICBfX0JJT05JQ19fICAgMQorCisjZW5kaWYgLyogIV9TWVNfQ0RFRlNfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvY2RlZnNfZWxmLmggYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNTFiMWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2NkZWZzX2VsZi5oCkBAIC0wLDAgKzEsMTUyIEBACisvKgkkTmV0QlNEOiBjZGVmc19lbGYuaCx2IDEuMjIgMjAwNS8wMi8yNiAyMjoyNTozNCBwZXJyeSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IENhcm5lZ2llLU1lbGxvbiBVbml2ZXJzaXR5LgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBBdXRob3I6IENocmlzIEcuIERlbWV0cmlvdQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnkgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBhbmQKKyAqIGl0cyBkb2N1bWVudGF0aW9uIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IGJvdGggdGhlIGNvcHlyaWdodAorICogbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzIG9mIHRoZQorICogc29mdHdhcmUsIGRlcml2YXRpdmUgd29ya3Mgb3IgbW9kaWZpZWQgdmVyc2lvbnMsIGFuZCBhbnkgcG9ydGlvbnMKKyAqIHRoZXJlb2YsIGFuZCB0aGF0IGJvdGggbm90aWNlcyBhcHBlYXIgaW4gc3VwcG9ydGluZyBkb2N1bWVudGF0aW9uLgorICoKKyAqIENBUk5FR0lFIE1FTExPTiBBTExPV1MgRlJFRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSBJTiBJVFMgIkFTIElTIgorICogQ09ORElUSU9OLiAgQ0FSTkVHSUUgTUVMTE9OIERJU0NMQUlNUyBBTlkgTElBQklMSVRZIE9GIEFOWSBLSU5ECisgKiBGT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogQ2FybmVnaWUgTWVsbG9uIHJlcXVlc3RzIHVzZXJzIG9mIHRoaXMgc29mdHdhcmUgdG8gcmV0dXJuIHRvCisgKgorICogIFNvZnR3YXJlIERpc3RyaWJ1dGlvbiBDb29yZGluYXRvciAgb3IgIFNvZnR3YXJlLkRpc3RyaWJ1dGlvbkBDUy5DTVUuRURVCisgKiAgU2Nob29sIG9mIENvbXB1dGVyIFNjaWVuY2UKKyAqICBDYXJuZWdpZSBNZWxsb24gVW5pdmVyc2l0eQorICogIFBpdHRzYnVyZ2ggUEEgMTUyMTMtMzg5MAorICoKKyAqIGFueSBpbXByb3ZlbWVudHMgb3IgZXh0ZW5zaW9ucyB0aGF0IHRoZXkgbWFrZSBhbmQgZ3JhbnQgQ2FybmVnaWUgdGhlCisgKiByaWdodHMgdG8gcmVkaXN0cmlidXRlIHRoZXNlIGNoYW5nZXMuCisgKi8KKworI2lmbmRlZiBfU1lTX0NERUZTX0VMRl9IXworI2RlZmluZQlfU1lTX0NERUZTX0VMRl9IXworCisjaWZkZWYgX19MRUFESU5HX1VOREVSU0NPUkUKKyNkZWZpbmUJX0NfTEFCRUwoeCkJX19DT05DQVQoXyx4KQorI2RlZmluZSBfQ19MQUJFTF9TVFJJTkcoeCkJIl8ieAorI2Vsc2UKKyNkZWZpbmUJX0NfTEFCRUwoeCkJeAorI2RlZmluZSBfQ19MQUJFTF9TVFJJTkcoeCkJeAorI2VuZGlmCisKKyNpZiBfX1NURENfXworI2RlZmluZQlfX19SRU5BTUUoeCkJX19hc21fXyhfX19TVFJJTkcoX0NfTEFCRUwoeCkpKQorI2Vsc2UKKyNpZmRlZiBfX0xFQURJTkdfVU5ERVJTQ09SRQorI2RlZmluZQlfX19SRU5BTUUoeCkJX19fX1JFTkFNRShfLyoqL3gpCisjZGVmaW5lCV9fX19SRU5BTUUoeCkJX19hc21fXyhfX19TVFJJTkcoeCkpCisjZWxzZQorI2RlZmluZQlfX19SRU5BTUUoeCkJX19hc21fXyhfX19TVFJJTkcoeCkpCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lCV9faW5kcl9yZWZlcmVuY2Uoc3ltLGFsaWFzKQkvKiBuYWRhLCBzaW5jZSB3ZSBkbyB3ZWFrIHJlZnMgKi8KKworI2lmIF9fU1REQ19fCisjZGVmaW5lCV9fc3Ryb25nX2FsaWFzKGFsaWFzLHN5bSkJICAgICAgIAkJCQlcCisgICAgX19hc21fXygiLmdsb2JhbCAiIF9DX0xBQkVMX1NUUklORygjYWxpYXMpICJcbiIJCQlcCisJICAgIF9DX0xBQkVMX1NUUklORygjYWxpYXMpICIgPSAiIF9DX0xBQkVMX1NUUklORygjc3ltKSk7CisKKyNkZWZpbmUJX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCQkJCQlcCisgICAgX19hc21fXygiLndlYWsgIiBfQ19MQUJFTF9TVFJJTkcoI2FsaWFzKSAiXG4iCQkJXAorCSAgICBfQ19MQUJFTF9TVFJJTkcoI2FsaWFzKSAiID0gIiBfQ19MQUJFTF9TVFJJTkcoI3N5bSkpOworI2RlZmluZQlfX3dlYWtfZXh0ZXJuKHN5bSkJCQkJCQlcCisgICAgX19hc21fXygiLndlYWsgIiBfQ19MQUJFTF9TVFJJTkcoI3N5bSkpOworI2RlZmluZQlfX3dhcm5fcmVmZXJlbmNlcyhzeW0sbXNnKQkJCQkJXAorICAgIF9fYXNtX18oIi5zZWN0aW9uIC5nbnUud2FybmluZy4iICNzeW0gIlxuXHQuYXNjaWkgXCIiIG1zZyAiXCJcblx0LnRleHQiKTsKKworI2Vsc2UgLyogIV9fU1REQ19fICovCisKKyNpZmRlZiBfX0xFQURJTkdfVU5ERVJTQ09SRQorI2RlZmluZSBfX3dlYWtfYWxpYXMoYWxpYXMsc3ltKSBfX193ZWFrX2FsaWFzKF8vKiovYWxpYXMsXy8qKi9zeW0pCisjZGVmaW5lCV9fX3dlYWtfYWxpYXMoYWxpYXMsc3ltKQkJCQkJXAorICAgIF9fYXNtX18oIi53ZWFrIGFsaWFzXG5hbGlhcyA9IHN5bSIpOworI2Vsc2UKKyNkZWZpbmUJX193ZWFrX2FsaWFzKGFsaWFzLHN5bSkJCQkJCQlcCisgICAgX19hc21fXygiLndlYWsgYWxpYXNcbmFsaWFzID0gc3ltIik7CisjZW5kaWYKKyNpZmRlZiBfX0xFQURJTkdfVU5ERVJTQ09SRQorI2RlZmluZSBfX3dlYWtfZXh0ZXJuKHN5bSkgX19fd2Vha19leHRlcm4oXy8qKi9zeW0pCisjZGVmaW5lCV9fX3dlYWtfZXh0ZXJuKHN5bSkJCQkJCQlcCisgICAgX19hc21fXygiLndlYWsgc3ltIik7CisjZWxzZQorI2RlZmluZQlfX3dlYWtfZXh0ZXJuKHN5bSkJCQkJCQlcCisgICAgX19hc21fXygiLndlYWsgc3ltIik7CisjZW5kaWYKKyNkZWZpbmUJX193YXJuX3JlZmVyZW5jZXMoc3ltLG1zZykJCQkJCVwKKyAgICBfX2FzbV9fKCIuc2VjdGlvbiAuZ251Lndhcm5pbmcuc3ltXG5cdC5hc2NpaSBtc2cgOyAudGV4dCIpOworCisjZW5kaWYgLyogIV9fU1REQ19fICovCisKKyNpZiBfX1NURENfXworI2RlZmluZQlfX1NFQ1RJT05TVFJJTkcoX3NlYywgX3N0cikJCQkJCVwKKwlfX2FzbV9fKCIuc2VjdGlvbiAiICNfc2VjICJcblx0LmFzY2l6IFwiIiBfc3RyICJcIlxuXHQucHJldmlvdXMiKQorI2Vsc2UKKyNkZWZpbmUJX19TRUNUSU9OU1RSSU5HKF9zZWMsIF9zdHIpCQkJCQlcCisJX19hc21fXygiLnNlY3Rpb24gX3NlY1xuXHQuYXNjaXogX3N0clxuXHQucHJldmlvdXMiKQorI2VuZGlmCisKKyNkZWZpbmUJX19JRFNUUklORyhfbixfcykJCV9fU0VDVElPTlNUUklORyguaWRlbnQsX3MpCisKKyNkZWZpbmUJX19SQ1NJRChfcykJCQlfX0lEU1RSSU5HKHJjc2lkLF9zKQorI2RlZmluZQlfX1NDQ1NJRChfcykKKyNkZWZpbmUgX19TQ0NTSUQyKF9zKQorI2lmIDAJLyogWFhYIHVzZXJsYW5kIF9fQ09QWVJJR0hUcyBoYXZlIFxucyBpbiB0aGVtICovCisjZGVmaW5lCV9fQ09QWVJJR0hUKF9zKQkJCV9fU0VDVElPTlNUUklORyguY29weXJpZ2h0LF9zKQorI2Vsc2UKKyNkZWZpbmUJX19DT1BZUklHSFQoX3MpCQkJCQkJCVwKKwlzdGF0aWMgY29uc3QgY2hhciBjb3B5cmlnaHRbXQkJCQkJXAorCSAgICBfX2F0dHJpYnV0ZV9fKChfX3VudXNlZF9fLF9fc2VjdGlvbl9fKCIuY29weXJpZ2h0IikpKSA9IF9zCisjZW5kaWYKKworI2RlZmluZQlfX0tFUk5FTF9SQ1NJRChfbiwgX3MpCQlfX1JDU0lEKF9zKQorI2RlZmluZQlfX0tFUk5FTF9TQ0NTSUQoX24sIF9zKQorI2lmIDAJLyogWFhYIHNlZSBhYm92ZSAqLworI2RlZmluZQlfX0tFUk5FTF9DT1BZUklHSFQoX24sIF9zKQlfX0NPUFlSSUdIVChfcykKKyNlbHNlCisjZGVmaW5lCV9fS0VSTkVMX0NPUFlSSUdIVChfbiwgX3MpCV9fU0VDVElPTlNUUklORyguY29weXJpZ2h0LCBfcykKKyNlbmRpZgorCisjaWZuZGVmIF9fbGludF9fCisjZGVmaW5lCV9fbGlua19zZXRfbWFrZV9lbnRyeShzZXQsIHN5bSkJCQkJCVwKKwlzdGF0aWMgdm9pZCBjb25zdCAqIGNvbnN0IF9fbGlua19zZXRfIyNzZXQjI19zeW1fIyNzeW0JCVwKKwkgICAgX19zZWN0aW9uKCJsaW5rX3NldF8iICNzZXQpIF9fdXNlZCA9ICZzeW0KKyNkZWZpbmUJX19saW5rX3NldF9tYWtlX2VudHJ5MihzZXQsIHN5bSwgbikJCQkJXAorCXN0YXRpYyB2b2lkIGNvbnN0ICogY29uc3QgX19saW5rX3NldF8jI3NldCMjX3N5bV8jI3N5bSMjXyMjbglcCisJICAgIF9fc2VjdGlvbigibGlua19zZXRfIiAjc2V0KSBfX3VzZWQgPSAmc3ltW25dCisjZWxzZQorI2RlZmluZQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCQkJCQlcCisJZXh0ZXJuIHZvaWQgY29uc3QgKiBjb25zdCBfX2xpbmtfc2V0XyMjc2V0IyNfc3ltXyMjc3ltCisjZGVmaW5lCV9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCQkJCVwKKwlleHRlcm4gdm9pZCBjb25zdCAqIGNvbnN0IF9fbGlua19zZXRfIyNzZXQjI19zeW1fIyNzeW0jI18jI24KKyNlbmRpZiAvKiBfX2xpbnRfXyAqLworCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX3RleHQoc2V0LCBzeW0pCV9fbGlua19zZXRfbWFrZV9lbnRyeShzZXQsIHN5bSkKKyNkZWZpbmUJX19saW5rX3NldF9hZGRfcm9kYXRhKHNldCwgc3ltKQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX2RhdGEoc2V0LCBzeW0pCV9fbGlua19zZXRfbWFrZV9lbnRyeShzZXQsIHN5bSkKKyNkZWZpbmUJX19saW5rX3NldF9hZGRfYnNzKHNldCwgc3ltKQlfX2xpbmtfc2V0X21ha2VfZW50cnkoc2V0LCBzeW0pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX3RleHQyKHNldCwgc3ltLCBuKSAgIF9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX3JvZGF0YTIoc2V0LCBzeW0sIG4pIF9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX2RhdGEyKHNldCwgc3ltLCBuKSAgIF9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCisjZGVmaW5lCV9fbGlua19zZXRfYWRkX2JzczIoc2V0LCBzeW0sIG4pICAgIF9fbGlua19zZXRfbWFrZV9lbnRyeTIoc2V0LCBzeW0sIG4pCisKKyNkZWZpbmUJX19saW5rX3NldF9kZWNsKHNldCwgcHR5cGUpCQkJCQlcCisJZXh0ZXJuIHB0eXBlICogY29uc3QgX19zdGFydF9saW5rX3NldF8jI3NldFtdOwkJCVwKKwlleHRlcm4gcHR5cGUgKiBjb25zdCBfX3N0b3BfbGlua19zZXRfIyNzZXRbXQkJCVwKKworI2RlZmluZQlfX2xpbmtfc2V0X3N0YXJ0KHNldCkJKF9fc3RhcnRfbGlua19zZXRfIyNzZXQpCisjZGVmaW5lCV9fbGlua19zZXRfZW5kKHNldCkJKF9fc3RvcF9saW5rX3NldF8jI3NldCkKKworI2RlZmluZQlfX2xpbmtfc2V0X2NvdW50KHNldCkJCQkJCQlcCisJKF9fbGlua19zZXRfZW5kKHNldCkgLSBfX2xpbmtfc2V0X3N0YXJ0KHNldCkpCisKKyNlbmRpZiAvKiAhX1NZU19DREVGU19FTEZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZGlyZW50LmggYi9saWJjL2luY2x1ZGUvc3lzL2RpcmVudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhOTZmNWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2RpcmVudC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19ESVJFTlRfSF8KKyNkZWZpbmUgX1NZU19ESVJFTlRfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCBkaXJlbnQ2NCAqLworc3RydWN0IGRpcmVudCB7CisgIHVpbnQ2NF90ICAgICAgICAgIGRfaW5vOworICBpbnQ2NF90ICAgICAgICAgICBkX29mZjsKKyAgdW5zaWduZWQgc2hvcnQgICAgZF9yZWNsZW47CisgIHVuc2lnbmVkIGNoYXIgICAgIGRfdHlwZTsKKyAgY2hhciAgICAgICAgICAgICAgZF9uYW1lWzI1Nl07Cit9OworCitleHRlcm4gaW50IGdldGRlbnRzKHVuc2lnbmVkIGludCwgc3RydWN0IGRpcmVudCAqLCB1bnNpZ25lZCBpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19ESVJFTlRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZW5kaWFuLmggYi9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAwZjQ4MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2VuZGlhbi5oCkBAIC0wLDAgKzEsMjczIEBACisvKgkkT3BlbkJTRDogZW5kaWFuLmgsdiAxLjE3IDIwMDYvMDEvMDYgMTg6NTM6MDUgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NyBOaWtsYXMgSGFsbHF2aXN0LiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4KKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVAorICogTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAorICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCisgKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEdlbmVyaWMgZGVmaW5pdGlvbnMgZm9yIGxpdHRsZS0gYW5kIGJpZy1lbmRpYW4gc3lzdGVtcy4gIE90aGVyIGVuZGlhbmVzc2VzCisgKiBoYXMgdG8gYmUgZGVhbHQgd2l0aCBpbiB0aGUgc3BlY2lmaWMgbWFjaGluZS9lbmRpYW4uaCBmaWxlIGZvciB0aGF0IHBvcnQuCisgKgorICogVGhpcyBmaWxlIGlzIG1lYW50IHRvIGJlIGluY2x1ZGVkIGZyb20gYSBsaXR0bGUtIG9yIGJpZy1lbmRpYW4gcG9ydCdzCisgKiBtYWNoaW5lL2VuZGlhbi5oIGFmdGVyIHNldHRpbmcgX0JZVEVfT1JERVIgdG8gZWl0aGVyIDEyMzQgZm9yIGxpdHRsZSBlbmRpYW4KKyAqIG9yIDQzMjEgZm9yIGJpZy4uCisgKi8KKworI2lmbmRlZiBfU1lTX0VORElBTl9IXworI2RlZmluZSBfU1lTX0VORElBTl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9fdHlwZXMuaD4KKworI2RlZmluZSBfTElUVExFX0VORElBTgkxMjM0CisjZGVmaW5lIF9CSUdfRU5ESUFOCTQzMjEKKyNkZWZpbmUgX1BEUF9FTkRJQU4JMzQxMgorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZSBMSVRUTEVfRU5ESUFOCV9MSVRUTEVfRU5ESUFOCisjZGVmaW5lIEJJR19FTkRJQU4JX0JJR19FTkRJQU4KKyNkZWZpbmUgUERQX0VORElBTglfUERQX0VORElBTgorI2RlZmluZSBCWVRFX09SREVSCV9CWVRFX09SREVSCisjZW5kaWYKKworI2lmZGVmIF9fR05VQ19fCisKKyNkZWZpbmUgX19zd2FwMTZnZW4oeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCV9fdWludDE2X3QgX19zd2FwMTZnZW5feCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwkoX191aW50MTZfdCkoKF9fc3dhcDE2Z2VuX3ggJiAweGZmKSA8PCA4IHwJCQlcCisJICAgIChfX3N3YXAxNmdlbl94ICYgMHhmZjAwKSA+PiA4KTsJCQkJXAorfSkKKworI2RlZmluZSBfX3N3YXAzMmdlbih4KSBfX3N0YXRlbWVudCh7CQkJCQlcCisJX191aW50MzJfdCBfX3N3YXAzMmdlbl94ID0gKHgpOwkJCQkJXAorCQkJCQkJCQkJXAorCShfX3VpbnQzMl90KSgoX19zd2FwMzJnZW5feCAmIDB4ZmYpIDw8IDI0IHwJCQlcCisJICAgIChfX3N3YXAzMmdlbl94ICYgMHhmZjAwKSA8PCA4IHwJCQkJXAorCSAgICAoX19zd2FwMzJnZW5feCAmIDB4ZmYwMDAwKSA+PiA4IHwJCQkJXAorCSAgICAoX19zd2FwMzJnZW5feCAmIDB4ZmYwMDAwMDApID4+IDI0KTsJCQlcCit9KQorCisjZGVmaW5lIF9fc3dhcDY0Z2VuKHgpIF9fc3RhdGVtZW50KHsJCQkJCVwKKwlfX3VpbnQ2NF90IF9fc3dhcDY0Z2VuX3ggPSAoeCk7CQkJCQlcCisJCQkJCQkJCQlcCisJKF9fdWludDY0X3QpKChfX3N3YXA2NGdlbl94ICYgMHhmZikgPDwgNTYgfAkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDBVTEwpIDw8IDQwIHwJCQkJXAorCSAgICAoX19zd2FwNjRnZW5feCAmIDB4ZmYwMDAwVUxMKSA8PCAyNCB8CQkJXAorCSAgICAoX19zd2FwNjRnZW5feCAmIDB4ZmYwMDAwMDBVTEwpIDw8IDggfAkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDAwMDAwMDBVTEwpID4+IDggfAkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQgfAkJCVwKKwkgICAgKF9fc3dhcDY0Z2VuX3ggJiAweGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCB8CQlcCisJICAgIChfX3N3YXA2NGdlbl94ICYgMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1Nik7CQlcCit9KQorCisjZWxzZSAvKiBfX0dOVUNfXyAqLworCisvKiBOb3RlIHRoYXQgdGhlc2UgbWFjcm9zIGV2YWx1YXRlIHRoZWlyIGFyZ3VtZW50cyBzZXZlcmFsIHRpbWVzLiAgKi8KKyNkZWZpbmUgX19zd2FwMTZnZW4oeCkJCQkJCQkJXAorICAgIChfX3VpbnQxNl90KSgoKF9fdWludDE2X3QpKHgpICYgMHhmZikgPDwgOCB8ICgoX191aW50MTZfdCkoeCkgJiAweGZmMDApID4+IDgpCisKKyNkZWZpbmUgX19zd2FwMzJnZW4oeCkJCQkJCQkJXAorICAgIChfX3VpbnQzMl90KSgoKF9fdWludDMyX3QpKHgpICYgMHhmZikgPDwgMjQgfAkJCVwKKyAgICAoKF9fdWludDMyX3QpKHgpICYgMHhmZjAwKSA8PCA4IHwgKChfX3VpbnQzMl90KSh4KSAmIDB4ZmYwMDAwKSA+PiA4IHxcCisgICAgKChfX3VpbnQzMl90KSh4KSAmIDB4ZmYwMDAwMDApID4+IDI0KQorCisjZGVmaW5lIF9fc3dhcDY0Z2VuKHgpCQkJCQkJCVwKKwkoX191aW50NjRfdCkoKCgoX191aW50NjRfdCkoeCkgJiAweGZmKSA8PCA1NikgfAkJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMFVMTCkgPDwgNDAgfAkJCVwKKwkgICAgKChfX3VpbnQ2NF90KSh4KSAmIDB4ZmYwMDAwVUxMKSA8PCAyNCB8CQkJXAorCSAgICAoKF9fdWludDY0X3QpKHgpICYgMHhmZjAwMDAwMFVMTCkgPDwgOCB8CQkJXAorCSAgICAoKF9fdWludDY0X3QpKHgpICYgMHhmZjAwMDAwMDAwVUxMKSA+PiA4IHwJCQlcCisJICAgICgoX191aW50NjRfdCkoeCkgJiAweGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQgfAkJXAorCSAgICAoKF9fdWludDY0X3QpKHgpICYgMHhmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDAgfAkJXAorCSAgICAoKF9fdWludDY0X3QpKHgpICYgMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikKKworI2VuZGlmIC8qIF9fR05VQ19fICovCisKKy8qCisgKiBEZWZpbmUgTURfU1dBUCBpZiB5b3UgcHJvdmlkZSBzd2FwezE2LDMyfW1kIGZ1bmN0aW9ucy9tYWNyb3MgdGhhdCBhcmUKKyAqIG9wdGltaXplZCBmb3IgeW91ciBhcmNoaXRlY3R1cmUsICBUaGVzZSB3aWxsIGJlIHVzZWQgZm9yIHN3YXB7MTYsMzJ9CisgKiB1bmxlc3MgdGhlIGFyZ3VtZW50IGlzIGEgY29uc3RhbnQgYW5kIHdlIGFyZSB1c2luZyBHQ0MsIHdoZXJlIHdlIGNhbgorICogdGFrZSBhZHZhbnRhZ2Ugb2YgdGhlIENTRSBwaGFzZSBtdWNoIGJldHRlciBieSB1c2luZyB0aGUgZ2VuZXJpYyB2ZXJzaW9uLgorICovCisjaWZkZWYgTURfU1dBUAorI2lmIF9fR05VQ19fCisKKyNkZWZpbmUgX19zd2FwMTYoeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCV9fdWludDE2X3QgX19zd2FwMTZfeCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSA/IF9fc3dhcDE2Z2VuKF9fc3dhcDE2X3gpIDoJCVwKKwkgICAgX19zd2FwMTZtZChfX3N3YXAxNl94KTsJCQkJCVwKK30pCisKKyNkZWZpbmUgX19zd2FwMzIoeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCV9fdWludDMyX3QgX19zd2FwMzJfeCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSA/IF9fc3dhcDMyZ2VuKF9fc3dhcDMyX3gpIDoJCVwKKwkgICAgX19zd2FwMzJtZChfX3N3YXAzMl94KTsJCQkJCVwKK30pCisKKyNkZWZpbmUgX19zd2FwNjQoeCkgX19zdGF0ZW1lbnQoewkJCQkJXAorCV9fdWludDY0X3QgX19zd2FwNjRfeCA9ICh4KTsJCQkJCVwKKwkJCQkJCQkJCVwKKwlfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSA/IF9fc3dhcDY0Z2VuKF9fc3dhcDY0X3gpIDoJCVwKKwkgICAgX19zd2FwNjRtZChfX3N3YXA2NF94KTsJCQkJCVwKK30pCisKKyNlbmRpZiAvKiBfX0dOVUNfXyAgKi8KKworI2Vsc2UgLyogTURfU1dBUCAqLworI2RlZmluZSBfX3N3YXAxNiBfX3N3YXAxNmdlbgorI2RlZmluZSBfX3N3YXAzMiBfX3N3YXAzMmdlbgorI2RlZmluZSBfX3N3YXA2NCBfX3N3YXA2NGdlbgorI2VuZGlmIC8qIE1EX1NXQVAgKi8KKworI2RlZmluZSBfX3N3YXAxNl9tdWx0aSh2LCBuKSBkbyB7CQkJCQkJXAorCV9fc2l6ZV90IF9fc3dhcDE2X211bHRpX24gPSAobik7CQkJCVwKKwlfX3VpbnQxNl90ICpfX3N3YXAxNl9tdWx0aV92ID0gKHYpOwkJCQlcCisJCQkJCQkJCQlcCisJd2hpbGUgKF9fc3dhcDE2X211bHRpX24pIHsJCQkJCVwKKwkJKl9fc3dhcDE2X211bHRpX3YgPSBzd2FwMTYoKl9fc3dhcDE2X211bHRpX3YpOwkJXAorCQlfX3N3YXAxNl9tdWx0aV92Kys7CQkJCQlcCisJCV9fc3dhcDE2X211bHRpX24tLTsJCQkJCVwKKwl9CQkJCQkJCQlcCit9IHdoaWxlICgwKQorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZSBzd2FwMTYgX19zd2FwMTYKKyNkZWZpbmUgc3dhcDMyIF9fc3dhcDMyCisjZGVmaW5lIHN3YXA2NCBfX3N3YXA2NAorI2RlZmluZSBzd2FwMTZfbXVsdGkgX19zd2FwMTZfbXVsdGkKKworX19CRUdJTl9ERUNMUworX191aW50NjRfdAlodG9iZTY0KF9fdWludDY0X3QpOworX191aW50MzJfdAlodG9iZTMyKF9fdWludDMyX3QpOworX191aW50MTZfdAlodG9iZTE2KF9fdWludDE2X3QpOworX191aW50NjRfdAliZXRvaDY0KF9fdWludDY0X3QpOworX191aW50MzJfdAliZXRvaDMyKF9fdWludDMyX3QpOworX191aW50MTZfdAliZXRvaDE2KF9fdWludDE2X3QpOworCitfX3VpbnQ2NF90CWh0b2xlNjQoX191aW50NjRfdCk7CitfX3VpbnQzMl90CWh0b2xlMzIoX191aW50MzJfdCk7CitfX3VpbnQxNl90CWh0b2xlMTYoX191aW50MTZfdCk7CitfX3VpbnQ2NF90CWxldG9oNjQoX191aW50NjRfdCk7CitfX3VpbnQzMl90CWxldG9oMzIoX191aW50MzJfdCk7CitfX3VpbnQxNl90CWxldG9oMTYoX191aW50MTZfdCk7CitfX0VORF9ERUNMUworI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworI2lmIF9CWVRFX09SREVSID09IF9MSVRUTEVfRU5ESUFOCisKKy8qIENhbiBiZSBvdmVycmlkZGVuIGJ5IG1hY2hpbmUvZW5kaWFuLmggYmVmb3JlIGluY2x1c2lvbiBvZiB0aGlzIGZpbGUuICAqLworI2lmbmRlZiBfUVVBRF9ISUdIV09SRAorI2RlZmluZSBfUVVBRF9ISUdIV09SRCAxCisjZW5kaWYKKyNpZm5kZWYgX1FVQURfTE9XV09SRAorI2RlZmluZSBfUVVBRF9MT1dXT1JEIDAKKyNlbmRpZgorCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZSBodG9iZTE2IF9fc3dhcDE2CisjZGVmaW5lIGh0b2JlMzIgX19zd2FwMzIKKyNkZWZpbmUgaHRvYmU2NCBfX3N3YXA2NAorI2RlZmluZSBiZXRvaDE2IF9fc3dhcDE2CisjZGVmaW5lIGJldG9oMzIgX19zd2FwMzIKKyNkZWZpbmUgYmV0b2g2NCBfX3N3YXA2NAorCisjZGVmaW5lIGh0b2xlMTYoeCkgKHgpCisjZGVmaW5lIGh0b2xlMzIoeCkgKHgpCisjZGVmaW5lIGh0b2xlNjQoeCkgKHgpCisjZGVmaW5lIGxldG9oMTYoeCkgKHgpCisjZGVmaW5lIGxldG9oMzIoeCkgKHgpCisjZGVmaW5lIGxldG9oNjQoeCkgKHgpCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSAqLworCisjZGVmaW5lIGh0b25zKHgpIF9fc3dhcDE2KHgpCisjZGVmaW5lIGh0b25sKHgpIF9fc3dhcDMyKHgpCisjZGVmaW5lIG50b2hzKHgpIF9fc3dhcDE2KHgpCisjZGVmaW5lIG50b2hsKHgpIF9fc3dhcDMyKHgpCisKKy8qIEJpb25pYyBhZGRpdGlvbnMgKi8KKyNkZWZpbmUgbnRvaHEoeCkgX19zd2FwNjQoeCkKKyNkZWZpbmUgaHRvbnEoeCkgX19zd2FwNjQoeCkKKworI2RlZmluZSBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKworI2VuZGlmIC8qIF9CWVRFX09SREVSICovCisKKyNpZiBfQllURV9PUkRFUiA9PSBfQklHX0VORElBTgorCisvKiBDYW4gYmUgb3ZlcnJpZGRlbiBieSBtYWNoaW5lL2VuZGlhbi5oIGJlZm9yZSBpbmNsdXNpb24gb2YgdGhpcyBmaWxlLiAgKi8KKyNpZm5kZWYgX1FVQURfSElHSFdPUkQKKyNkZWZpbmUgX1FVQURfSElHSFdPUkQgMAorI2VuZGlmCisjaWZuZGVmIF9RVUFEX0xPV1dPUkQKKyNkZWZpbmUgX1FVQURfTE9XV09SRCAxCisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUKKyNkZWZpbmUgaHRvbGUxNiBfX3N3YXAxNgorI2RlZmluZSBodG9sZTMyIF9fc3dhcDMyCisjZGVmaW5lIGh0b2xlNjQgX19zd2FwNjQKKyNkZWZpbmUgbGV0b2gxNiBfX3N3YXAxNgorI2RlZmluZSBsZXRvaDMyIF9fc3dhcDMyCisjZGVmaW5lIGxldG9oNjQgX19zd2FwNjQKKworI2RlZmluZSBodG9iZTE2KHgpICh4KQorI2RlZmluZSBodG9iZTMyKHgpICh4KQorI2RlZmluZSBodG9iZTY0KHgpICh4KQorI2RlZmluZSBiZXRvaDE2KHgpICh4KQorI2RlZmluZSBiZXRvaDMyKHgpICh4KQorI2RlZmluZSBiZXRvaDY0KHgpICh4KQorI2VuZGlmIC8qIF9fQlNEX1ZJU0lCTEUgKi8KKworI2RlZmluZSBodG9ucyh4KSAoeCkKKyNkZWZpbmUgaHRvbmwoeCkgKHgpCisjZGVmaW5lIG50b2hzKHgpICh4KQorI2RlZmluZSBudG9obCh4KSAoeCkKKworLyogQmlvbmljIGFkZGl0aW9ucyAqLworI2RlZmluZSBudG9ocSh4KSAoeCkKKyNkZWZpbmUgaHRvbnEoeCkgKHgpCisKKyNkZWZpbmUgX19CSUdfRU5ESUFOX0JJVEZJRUxECisKKyNlbmRpZiAvKiBfQllURV9PUkRFUiAqLworCisjaWYgX19CU0RfVklTSUJMRQorI2RlZmluZQlOVE9ITCh4KSAoeCkgPSBudG9obCgodV9pbnQzMl90KSh4KSkKKyNkZWZpbmUJTlRPSFMoeCkgKHgpID0gbnRvaHMoKHVfaW50MTZfdCkoeCkpCisjZGVmaW5lCUhUT05MKHgpICh4KSA9IGh0b25sKCh1X2ludDMyX3QpKHgpKQorI2RlZmluZQlIVE9OUyh4KSAoeCkgPSBodG9ucygodV9pbnQxNl90KSh4KSkKKyNlbmRpZgorCisKKyNkZWZpbmUgIF9fQllURV9PUkRFUiAgICAgICBfQllURV9PUkRFUgorI2lmbmRlZiAgX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lICBfX0xJVFRMRV9FTkRJQU4gICAgX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2lmbmRlZiAgX19CSUdfRU5ESUFOCisjZGVmaW5lICBfX0JJR19FTkRJQU4gICAgICAgX0JJR19FTkRJQU4KKyNlbmRpZgorCisjZW5kaWYgLyogX1NZU19FTkRJQU5fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZXBvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDc4Y2FhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9lcG9sbC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19FUE9MTF9IXworI2RlZmluZSBfU1lTX0VQT0xMX0hfCisKKyNkZWZpbmUgRVBPTExJTiAgICAgICAgICAweDAwMDAwMDAxCisjZGVmaW5lIEVQT0xMUFJJICAgICAgICAgMHgwMDAwMDAwMgorI2RlZmluZSBFUE9MTE9VVCAgICAgICAgIDB4MDAwMDAwMDQKKyNkZWZpbmUgRVBPTExFUlIgICAgICAgICAweDAwMDAwMDA4CisjZGVmaW5lIEVQT0xMSFVQICAgICAgICAgMHgwMDAwMDAxMAorI2RlZmluZSBFUE9MTFJETk9STSAgICAgIDB4MDAwMDAwNDAKKyNkZWZpbmUgRVBPTExSREJBTkQgICAgICAweDAwMDAwMDgwCisjZGVmaW5lIEVQT0xMV1JOT1JNICAgICAgMHgwMDAwMDEwMAorI2RlZmluZSBFUE9MTFdSQkFORCAgICAgIDB4MDAwMDAyMDAKKyNkZWZpbmUgRVBPTExNU0cgICAgICAgICAweDAwMDAwNDAwCisjZGVmaW5lIEVQT0xMRVQgICAgICAgICAgMHg4MDAwMDAwMAorCisjZGVmaW5lIEVQT0xMX0NUTF9BREQgICAgMQorI2RlZmluZSBFUE9MTF9DVExfREVMICAgIDIKKyNkZWZpbmUgRVBPTExfQ1RMX01PRCAgICAzCisKK3R5cGVkZWYgdW5pb24gZXBvbGxfZGF0YSAKK3sKKyAgICB2b2lkICpwdHI7CisgICAgaW50IGZkOworICAgIHVuc2lnbmVkIGludCB1MzI7CisgICAgdW5zaWduZWQgbG9uZyBsb25nIHU2NDsKK30gZXBvbGxfZGF0YV90OworCitzdHJ1Y3QgZXBvbGxfZXZlbnQgCit7CisgICAgdW5zaWduZWQgaW50IGV2ZW50czsKKyAgICBlcG9sbF9kYXRhX3QgZGF0YTsKK307CisKK2ludCBlcG9sbF9jcmVhdGUoaW50IHNpemUpOworaW50IGVwb2xsX2N0bChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQpOworaW50IGVwb2xsX3dhaXQoaW50IGVwZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnRzLCBpbnQgbWF4LCBpbnQgdGltZW91dCk7CisKKyNlbmRpZiAgLyogX1NZU19FUE9MTF9IXyAqLworCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2Vycm5vLmggYi9saWJjL2luY2x1ZGUvc3lzL2Vycm5vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM5ZjRmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZXJybm8uaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8ZXJybm8uaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZXhlY19lbGYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzJmODFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9leGVjX2VsZi5oCkBAIC0wLDAgKzEsNjI1IEBACisvKgkkT3BlbkJTRDogZXhlY19lbGYuaCx2IDEuNDEgMjAwNi8wMS8wNiAxODo1MzowNSBtaWxsZXJ0IEV4cCAkCSovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk1LCAxOTk2IEVyaWsgVGhlaXNlbi4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKKyAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBUaGlzIGlzIHRoZSBFTEYgQUJJIGhlYWRlciBmaWxlCisgKiBmb3JtZXJseSBrbm93biBhcyAiZWxmX2FiaS5oIi4KKyAqLworCisjaWZuZGVmIF9TWVNfRVhFQ19FTEZfSF8KKyNkZWZpbmUgX1NZU19FWEVDX0VMRl9IXworCisjaW5jbHVkZSA8bWFjaGluZS9fdHlwZXMuaD4KKyNpbmNsdWRlIDxtYWNoaW5lL2V4ZWMuaD4KKwordHlwZWRlZiBfX3VpbnQ4X3QJRWxmX0J5dGU7CisKK3R5cGVkZWYgX191aW50MzJfdAlFbGYzMl9BZGRyOwkvKiBVbnNpZ25lZCBwcm9ncmFtIGFkZHJlc3MgKi8KK3R5cGVkZWYgX191aW50MzJfdAlFbGYzMl9PZmY7CS8qIFVuc2lnbmVkIGZpbGUgb2Zmc2V0ICovCit0eXBlZGVmIF9faW50MzJfdAlFbGYzMl9Td29yZDsJLyogU2lnbmVkIGxhcmdlIGludGVnZXIgKi8KK3R5cGVkZWYgX191aW50MzJfdAlFbGYzMl9Xb3JkOwkvKiBVbnNpZ25lZCBsYXJnZSBpbnRlZ2VyICovCit0eXBlZGVmIF9fdWludDE2X3QJRWxmMzJfSGFsZjsJLyogVW5zaWduZWQgbWVkaXVtIGludGVnZXIgKi8KKwordHlwZWRlZiBfX3VpbnQ2NF90CUVsZjY0X0FkZHI7Cit0eXBlZGVmIF9fdWludDY0X3QJRWxmNjRfT2ZmOwordHlwZWRlZiBfX2ludDMyX3QJRWxmNjRfU2hhbGY7CisKKyNpZmRlZiBfX2FscGhhX18KK3R5cGVkZWYgX19pbnQ2NF90CUVsZjY0X1N3b3JkOwordHlwZWRlZiBfX3VpbnQ2NF90CUVsZjY0X1dvcmQ7CisjZWxzZQordHlwZWRlZiBfX2ludDMyX3QJRWxmNjRfU3dvcmQ7Cit0eXBlZGVmIF9fdWludDMyX3QJRWxmNjRfV29yZDsKKyNlbmRpZgorCit0eXBlZGVmIF9faW50NjRfdAlFbGY2NF9TeHdvcmQ7Cit0eXBlZGVmIF9fdWludDY0X3QJRWxmNjRfWHdvcmQ7CisKK3R5cGVkZWYgX191aW50MzJfdAlFbGY2NF9IYWxmOwordHlwZWRlZiBfX3VpbnQxNl90CUVsZjY0X1F1YXJ0ZXI7CisKKy8qCisgKiBlX2lkZW50W10gaWRlbnRpZmljYXRpb24gaW5kZXhlcyAKKyAqIFNlZSBodHRwOi8vd3d3LmNhbGRlcmEuY29tL2RldmVsb3BlcnMvZ2FiaS8yMDAwLTA3LTE3L2NoNC5laGVhZGVyLmh0bWwKKyAqLworI2RlZmluZSBFSV9NQUcwCQkwCQkvKiBmaWxlIElEICovCisjZGVmaW5lIEVJX01BRzEJCTEJCS8qIGZpbGUgSUQgKi8KKyNkZWZpbmUgRUlfTUFHMgkJMgkJLyogZmlsZSBJRCAqLworI2RlZmluZSBFSV9NQUczCQkzCQkvKiBmaWxlIElEICovCisjZGVmaW5lIEVJX0NMQVNTCTQJCS8qIGZpbGUgY2xhc3MgKi8KKyNkZWZpbmUgRUlfREFUQQkJNQkJLyogZGF0YSBlbmNvZGluZyAqLworI2RlZmluZSBFSV9WRVJTSU9OCTYJCS8qIEVMRiBoZWFkZXIgdmVyc2lvbiAqLworI2RlZmluZSBFSV9PU0FCSQk3CQkvKiBPUy9BQkkgSUQgKi8KKyNkZWZpbmUgRUlfQUJJVkVSU0lPTgk4CQkvKiBBQkkgdmVyc2lvbiAqLyAKKyNkZWZpbmUgRUlfUEFECQk5CQkvKiBzdGFydCBvZiBwYWQgYnl0ZXMgKi8KKyNkZWZpbmUgRUlfTklERU5UCTE2CQkvKiBTaXplIG9mIGVfaWRlbnRbXSAqLworCisvKiBlX2lkZW50W10gbWFnaWMgbnVtYmVyICovCisjZGVmaW5lCUVMRk1BRzAJCTB4N2YJCS8qIGVfaWRlbnRbRUlfTUFHMF0gKi8KKyNkZWZpbmUJRUxGTUFHMQkJJ0UnCQkvKiBlX2lkZW50W0VJX01BRzFdICovCisjZGVmaW5lCUVMRk1BRzIJCSdMJwkJLyogZV9pZGVudFtFSV9NQUcyXSAqLworI2RlZmluZQlFTEZNQUczCQknRicJCS8qIGVfaWRlbnRbRUlfTUFHM10gKi8KKyNkZWZpbmUJRUxGTUFHCQkiXDE3N0VMRiIJLyogbWFnaWMgKi8KKyNkZWZpbmUJU0VMRk1BRwkJNAkJLyogc2l6ZSBvZiBtYWdpYyAqLworCisvKiBlX2lkZW50W10gZmlsZSBjbGFzcyAqLworI2RlZmluZQlFTEZDTEFTU05PTkUJMAkJLyogaW52YWxpZCAqLworI2RlZmluZQlFTEZDTEFTUzMyCTEJCS8qIDMyLWJpdCBvYmpzICovCisjZGVmaW5lCUVMRkNMQVNTNjQJMgkJLyogNjQtYml0IG9ianMgKi8KKyNkZWZpbmUJRUxGQ0xBU1NOVU0JMwkJLyogbnVtYmVyIG9mIGNsYXNzZXMgKi8KKworLyogZV9pZGVudFtdIGRhdGEgZW5jb2RpbmcgKi8KKyNkZWZpbmUgRUxGREFUQU5PTkUJMAkJLyogaW52YWxpZCAqLworI2RlZmluZSBFTEZEQVRBMkxTQgkxCQkvKiBMaXR0bGUtRW5kaWFuICovCisjZGVmaW5lIEVMRkRBVEEyTVNCCTIJCS8qIEJpZy1FbmRpYW4gKi8KKyNkZWZpbmUgRUxGREFUQU5VTQkzCQkvKiBudW1iZXIgb2YgZGF0YSBlbmNvZGUgZGVmaW5lcyAqLworCisvKiBlX2lkZW50W10gT3BlcmF0aW5nIFN5c3RlbS9BQkkgKi8KKyNkZWZpbmUgRUxGT1NBQklfU1lTVgkJMAkvKiBVTklYIFN5c3RlbSBWIEFCSSAqLworI2RlZmluZSBFTEZPU0FCSV9IUFVYCQkxCS8qIEhQLVVYIG9wZXJhdGluZyBzeXN0ZW0gKi8KKyNkZWZpbmUgRUxGT1NBQklfTkVUQlNECQkyCS8qIE5ldEJTRCAqLworI2RlZmluZSBFTEZPU0FCSV9MSU5VWAkJMwkvKiBHTlUvTGludXggKi8KKyNkZWZpbmUgRUxGT1NBQklfSFVSRAkJNAkvKiBHTlUvSHVyZCAqLworI2RlZmluZSBFTEZPU0FCSV84Nk9QRU4JCTUJLyogODZPcGVuIGNvbW1vbiBJQTMyIEFCSSAqLworI2RlZmluZSBFTEZPU0FCSV9TT0xBUklTCTYJLyogU29sYXJpcyAqLworI2RlZmluZSBFTEZPU0FCSV9NT05URVJFWQk3CS8qIE1vbnRlcmV5ICovCisjZGVmaW5lIEVMRk9TQUJJX0lSSVgJCTgJLyogSVJJWCAqLworI2RlZmluZSBFTEZPU0FCSV9GUkVFQlNECTkJLyogRnJlZUJTRCAqLworI2RlZmluZSBFTEZPU0FCSV9UUlU2NAkJMTAJLyogVFJVNjQgVU5JWCAqLworI2RlZmluZSBFTEZPU0FCSV9NT0RFU1RPCTExCS8qIE5vdmVsbCBNb2Rlc3RvICovCisjZGVmaW5lIEVMRk9TQUJJX09QRU5CU0QJMTIJLyogT3BlbkJTRCAqLworI2RlZmluZSBFTEZPU0FCSV9BUk0JCTk3CS8qIEFSTSAqLworI2RlZmluZSBFTEZPU0FCSV9TVEFOREFMT05FCTI1NQkvKiBTdGFuZGFsb25lIChlbWJlZGRlZCkgYXBwbGljYXRpb24gKi8KKworLyogZV9pZGVudCAqLworI2RlZmluZSBJU19FTEYoZWhkcikgKChlaGRyKS5lX2lkZW50W0VJX01BRzBdID09IEVMRk1BRzAgJiYgXAorICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzFdID09IEVMRk1BRzEgJiYgXAorICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzJdID09IEVMRk1BRzIgJiYgXAorICAgICAgICAgICAgICAgICAgICAgIChlaGRyKS5lX2lkZW50W0VJX01BRzNdID09IEVMRk1BRzMpCisKKy8qIEVMRiBIZWFkZXIgKi8KK3R5cGVkZWYgc3RydWN0IGVsZmhkciB7CisJdW5zaWduZWQgY2hhcgllX2lkZW50W0VJX05JREVOVF07IC8qIEVMRiBJZGVudGlmaWNhdGlvbiAqLworCUVsZjMyX0hhbGYJZV90eXBlOwkJLyogb2JqZWN0IGZpbGUgdHlwZSAqLworCUVsZjMyX0hhbGYJZV9tYWNoaW5lOwkvKiBtYWNoaW5lICovCisJRWxmMzJfV29yZAllX3ZlcnNpb247CS8qIG9iamVjdCBmaWxlIHZlcnNpb24gKi8KKwlFbGYzMl9BZGRyCWVfZW50cnk7CS8qIHZpcnR1YWwgZW50cnkgcG9pbnQgKi8KKwlFbGYzMl9PZmYJZV9waG9mZjsJLyogcHJvZ3JhbSBoZWFkZXIgdGFibGUgb2Zmc2V0ICovCisJRWxmMzJfT2ZmCWVfc2hvZmY7CS8qIHNlY3Rpb24gaGVhZGVyIHRhYmxlIG9mZnNldCAqLworCUVsZjMyX1dvcmQJZV9mbGFnczsJLyogcHJvY2Vzc29yLXNwZWNpZmljIGZsYWdzICovCisJRWxmMzJfSGFsZgllX2Voc2l6ZTsJLyogRUxGIGhlYWRlciBzaXplICovCisJRWxmMzJfSGFsZgllX3BoZW50c2l6ZTsJLyogcHJvZ3JhbSBoZWFkZXIgZW50cnkgc2l6ZSAqLworCUVsZjMyX0hhbGYJZV9waG51bTsJLyogbnVtYmVyIG9mIHByb2dyYW0gaGVhZGVyIGVudHJpZXMgKi8KKwlFbGYzMl9IYWxmCWVfc2hlbnRzaXplOwkvKiBzZWN0aW9uIGhlYWRlciBlbnRyeSBzaXplICovCisJRWxmMzJfSGFsZgllX3NobnVtOwkvKiBudW1iZXIgb2Ygc2VjdGlvbiBoZWFkZXIgZW50cmllcyAqLworCUVsZjMyX0hhbGYJZV9zaHN0cm5keDsJLyogc2VjdGlvbiBoZWFkZXIgdGFibGUncyAic2VjdGlvbiAKKwkJCQkJICAgaGVhZGVyIHN0cmluZyB0YWJsZSIgZW50cnkgb2Zmc2V0ICovCit9IEVsZjMyX0VoZHI7CisKK3R5cGVkZWYgc3RydWN0IHsKKwl1bnNpZ25lZCBjaGFyCWVfaWRlbnRbRUlfTklERU5UXTsJLyogSWQgYnl0ZXMgKi8KKwlFbGY2NF9RdWFydGVyCWVfdHlwZTsJCQkvKiBmaWxlIHR5cGUgKi8KKwlFbGY2NF9RdWFydGVyCWVfbWFjaGluZTsJCS8qIG1hY2hpbmUgdHlwZSAqLworCUVsZjY0X0hhbGYJZV92ZXJzaW9uOwkJLyogdmVyc2lvbiBudW1iZXIgKi8KKwlFbGY2NF9BZGRyCWVfZW50cnk7CQkvKiBlbnRyeSBwb2ludCAqLworCUVsZjY0X09mZgllX3Bob2ZmOwkJLyogUHJvZ3JhbSBoZHIgb2Zmc2V0ICovCisJRWxmNjRfT2ZmCWVfc2hvZmY7CQkvKiBTZWN0aW9uIGhkciBvZmZzZXQgKi8KKwlFbGY2NF9IYWxmCWVfZmxhZ3M7CQkvKiBQcm9jZXNzb3IgZmxhZ3MgKi8KKwlFbGY2NF9RdWFydGVyCWVfZWhzaXplOwkJLyogc2l6ZW9mIGVoZHIgKi8KKwlFbGY2NF9RdWFydGVyCWVfcGhlbnRzaXplOwkJLyogUHJvZ3JhbSBoZWFkZXIgZW50cnkgc2l6ZSAqLworCUVsZjY0X1F1YXJ0ZXIJZV9waG51bTsJCS8qIE51bWJlciBvZiBwcm9ncmFtIGhlYWRlcnMgKi8KKwlFbGY2NF9RdWFydGVyCWVfc2hlbnRzaXplOwkJLyogU2VjdGlvbiBoZWFkZXIgZW50cnkgc2l6ZSAqLworCUVsZjY0X1F1YXJ0ZXIJZV9zaG51bTsJCS8qIE51bWJlciBvZiBzZWN0aW9uIGhlYWRlcnMgKi8KKwlFbGY2NF9RdWFydGVyCWVfc2hzdHJuZHg7CQkvKiBTdHJpbmcgdGFibGUgaW5kZXggKi8KK30gRWxmNjRfRWhkcjsKKworLyogZV90eXBlICovCisjZGVmaW5lIEVUX05PTkUJCTAJCS8qIE5vIGZpbGUgdHlwZSAqLworI2RlZmluZSBFVF9SRUwJCTEJCS8qIHJlbG9jYXRhYmxlIGZpbGUgKi8KKyNkZWZpbmUgRVRfRVhFQwkJMgkJLyogZXhlY3V0YWJsZSBmaWxlICovCisjZGVmaW5lIEVUX0RZTgkJMwkJLyogc2hhcmVkIG9iamVjdCBmaWxlICovCisjZGVmaW5lIEVUX0NPUkUJCTQJCS8qIGNvcmUgZmlsZSAqLworI2RlZmluZSBFVF9OVU0JCTUJCS8qIG51bWJlciBvZiB0eXBlcyAqLworI2RlZmluZSBFVF9MT1BST0MJMHhmZjAwCQkvKiByZXNlcnZlZCByYW5nZSBmb3IgcHJvY2Vzc29yICovCisjZGVmaW5lIEVUX0hJUFJPQwkweGZmZmYJCS8qICBzcGVjaWZpYyBlX3R5cGUgKi8KKworLyogZV9tYWNoaW5lICovCisjZGVmaW5lIEVNX05PTkUJCTAJCS8qIE5vIE1hY2hpbmUgKi8KKyNkZWZpbmUgRU1fTTMyCQkxCQkvKiBBVCZUIFdFIDMyMTAwICovCisjZGVmaW5lIEVNX1NQQVJDCTIJCS8qIFNQQVJDICovCisjZGVmaW5lIEVNXzM4NgkJMwkJLyogSW50ZWwgODAzODYgKi8KKyNkZWZpbmUgRU1fNjhLCQk0CQkvKiBNb3Rvcm9sYSA2ODAwMCAqLworI2RlZmluZSBFTV84OEsJCTUJCS8qIE1vdG9yb2xhIDg4MDAwICovCisjZGVmaW5lIEVNXzQ4NgkJNgkJLyogSW50ZWwgODA0ODYgLSB1bnVzZWQ/ICovCisjZGVmaW5lIEVNXzg2MAkJNwkJLyogSW50ZWwgODA4NjAgKi8KKyNkZWZpbmUgRU1fTUlQUwkJOAkJLyogTUlQUyBSMzAwMCBCaWctRW5kaWFuIG9ubHkgKi8KKy8qIAorICogRG9uJ3Qga25vdyBpZiBFTV9NSVBTX1JTNF9CRSwKKyAqIEVNX1NQQVJDNjQsIEVNX1BBUklTQywKKyAqIG9yIEVNX1BQQyBhcmUgQUJJIGNvbXBsaWFudAorICovCisjZGVmaW5lIEVNX01JUFNfUlM0X0JFCTEwCQkvKiBNSVBTIFI0MDAwIEJpZy1FbmRpYW4gKi8KKyNkZWZpbmUgRU1fU1BBUkM2NAkxMQkJLyogU1BBUkMgdjkgNjQtYml0IHVub2ZmaWNhbCAqLworI2RlZmluZSBFTV9QQVJJU0MJMTUJCS8qIEhQUEEgKi8KKyNkZWZpbmUgRU1fU1BBUkMzMlBMVVMJMTgJCS8qIEVuaGFuY2VkIGluc3RydWN0aW9uIHNldCBTUEFSQyAqLworI2RlZmluZSBFTV9QUEMJCTIwCQkvKiBQb3dlclBDICovCisjZGVmaW5lIEVNX0FSTQkJNDAJCS8qIEFkdmFuY2VkIFJJU0MgTWFjaGluZXMgQVJNICovCisjZGVmaW5lIEVNX0FMUEhBCTQxCQkvKiBERUMgQUxQSEEgKi8KKyNkZWZpbmUgRU1fU1BBUkNWOQk0MwkJLyogU1BBUkMgdmVyc2lvbiA5ICovCisjZGVmaW5lIEVNX0FMUEhBX0VYUAkweDkwMjYJCS8qIERFQyBBTFBIQSAqLworI2RlZmluZSBFTV9BTUQ2NAk2MgkJLyogQU1ENjQgYXJjaGl0ZWN0dXJlICovCisjZGVmaW5lIEVNX1ZBWAkJNzUJCS8qIERFQyBWQVggKi8KKyNkZWZpbmUgRU1fTlVNCQkxNQkJLyogbnVtYmVyIG9mIG1hY2hpbmUgdHlwZXMgKi8KKworLyogVmVyc2lvbiAqLworI2RlZmluZSBFVl9OT05FCQkwCQkvKiBJbnZhbGlkICovCisjZGVmaW5lIEVWX0NVUlJFTlQJMQkJLyogQ3VycmVudCAqLworI2RlZmluZSBFVl9OVU0JCTIJCS8qIG51bWJlciBvZiB2ZXJzaW9ucyAqLworCisvKiBTZWN0aW9uIEhlYWRlciAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJc2hfbmFtZTsJLyogbmFtZSAtIGluZGV4IGludG8gc2VjdGlvbiBoZWFkZXIKKwkJCQkJICAgc3RyaW5nIHRhYmxlIHNlY3Rpb24gKi8KKwlFbGYzMl9Xb3JkCXNoX3R5cGU7CS8qIHR5cGUgKi8KKwlFbGYzMl9Xb3JkCXNoX2ZsYWdzOwkvKiBmbGFncyAqLworCUVsZjMyX0FkZHIJc2hfYWRkcjsJLyogYWRkcmVzcyAqLworCUVsZjMyX09mZglzaF9vZmZzZXQ7CS8qIGZpbGUgb2Zmc2V0ICovCisJRWxmMzJfV29yZAlzaF9zaXplOwkvKiBzZWN0aW9uIHNpemUgKi8KKwlFbGYzMl9Xb3JkCXNoX2xpbms7CS8qIHNlY3Rpb24gaGVhZGVyIHRhYmxlIGluZGV4IGxpbmsgKi8KKwlFbGYzMl9Xb3JkCXNoX2luZm87CS8qIGV4dHJhIGluZm9ybWF0aW9uICovCisJRWxmMzJfV29yZAlzaF9hZGRyYWxpZ247CS8qIGFkZHJlc3MgYWxpZ25tZW50ICovCisJRWxmMzJfV29yZAlzaF9lbnRzaXplOwkvKiBzZWN0aW9uIGVudHJ5IHNpemUgKi8KK30gRWxmMzJfU2hkcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X0hhbGYJc2hfbmFtZTsJLyogc2VjdGlvbiBuYW1lICovCisJRWxmNjRfSGFsZglzaF90eXBlOwkvKiBzZWN0aW9uIHR5cGUgKi8KKwlFbGY2NF9Yd29yZAlzaF9mbGFnczsJLyogc2VjdGlvbiBmbGFncyAqLworCUVsZjY0X0FkZHIJc2hfYWRkcjsJLyogdmlydHVhbCBhZGRyZXNzICovCisJRWxmNjRfT2ZmCXNoX29mZnNldDsJLyogZmlsZSBvZmZzZXQgKi8KKwlFbGY2NF9Yd29yZAlzaF9zaXplOwkvKiBzZWN0aW9uIHNpemUgKi8KKwlFbGY2NF9IYWxmCXNoX2xpbms7CS8qIGxpbmsgdG8gYW5vdGhlciAqLworCUVsZjY0X0hhbGYJc2hfaW5mbzsJLyogbWlzYyBpbmZvICovCisJRWxmNjRfWHdvcmQJc2hfYWRkcmFsaWduOwkvKiBtZW1vcnkgYWxpZ25tZW50ICovCisJRWxmNjRfWHdvcmQJc2hfZW50c2l6ZTsJLyogdGFibGUgZW50cnkgc2l6ZSAqLworfSBFbGY2NF9TaGRyOworCisvKiBTcGVjaWFsIFNlY3Rpb24gSW5kZXhlcyAqLworI2RlZmluZSBTSE5fVU5ERUYJMAkJLyogdW5kZWZpbmVkICovCisjZGVmaW5lIFNITl9MT1JFU0VSVkUJMHhmZjAwCQkvKiBsb3dlciBib3VuZHMgb2YgcmVzZXJ2ZWQgaW5kZXhlcyAqLworI2RlZmluZSBTSE5fTE9QUk9DCTB4ZmYwMAkJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLworI2RlZmluZSBTSE5fSElQUk9DCTB4ZmYxZgkJLyogICBzcGVjaWZpYyBzZWN0aW9uIGluZGV4ZXMgKi8KKyNkZWZpbmUgU0hOX0FCUwkJMHhmZmYxCQkvKiBhYnNvbHV0ZSB2YWx1ZSAqLworI2RlZmluZSBTSE5fQ09NTU9OCTB4ZmZmMgkJLyogY29tbW9uIHN5bWJvbCAqLworI2RlZmluZSBTSE5fSElSRVNFUlZFCTB4ZmZmZgkJLyogdXBwZXIgYm91bmRzIG9mIHJlc2VydmVkIGluZGV4ZXMgKi8KKworLyogc2hfdHlwZSAqLworI2RlZmluZSBTSFRfTlVMTAkwCQkvKiBpbmFjdGl2ZSAqLworI2RlZmluZSBTSFRfUFJPR0JJVFMJMQkJLyogcHJvZ3JhbSBkZWZpbmVkIGluZm9ybWF0aW9uICovCisjZGVmaW5lIFNIVF9TWU1UQUIJMgkJLyogc3ltYm9sIHRhYmxlIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX1NUUlRBQgkzCQkvKiBzdHJpbmcgdGFibGUgc2VjdGlvbiAqLworI2RlZmluZSBTSFRfUkVMQQk0CQkvKiByZWxvY2F0aW9uIHNlY3Rpb24gd2l0aCBhZGRlbmRzKi8KKyNkZWZpbmUgU0hUX0hBU0gJNQkJLyogc3ltYm9sIGhhc2ggdGFibGUgc2VjdGlvbiAqLworI2RlZmluZSBTSFRfRFlOQU1JQwk2CQkvKiBkeW5hbWljIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX05PVEUJNwkJLyogbm90ZSBzZWN0aW9uICovCisjZGVmaW5lIFNIVF9OT0JJVFMJOAkJLyogbm8gc3BhY2Ugc2VjdGlvbiAqLworI2RlZmluZSBTSFRfUkVMCQk5CQkvKiByZWxhdGlvbiBzZWN0aW9uIHdpdGhvdXQgYWRkZW5kcyAqLworI2RlZmluZSBTSFRfU0hMSUIJMTAJCS8qIHJlc2VydmVkIC0gcHVycG9zZSB1bmtub3duICovCisjZGVmaW5lIFNIVF9EWU5TWU0JMTEJCS8qIGR5bmFtaWMgc3ltYm9sIHRhYmxlIHNlY3Rpb24gKi8KKyNkZWZpbmUgU0hUX05VTQkJMTIJCS8qIG51bWJlciBvZiBzZWN0aW9uIHR5cGVzICovCisjZGVmaW5lIFNIVF9MT1BST0MJMHg3MDAwMDAwMAkvKiByZXNlcnZlZCByYW5nZSBmb3IgcHJvY2Vzc29yICovCisjZGVmaW5lIFNIVF9ISVBST0MJMHg3ZmZmZmZmZgkvKiAgc3BlY2lmaWMgc2VjdGlvbiBoZWFkZXIgdHlwZXMgKi8KKyNkZWZpbmUgU0hUX0xPVVNFUgkweDgwMDAwMDAwCS8qIHJlc2VydmVkIHJhbmdlIGZvciBhcHBsaWNhdGlvbiAqLworI2RlZmluZSBTSFRfSElVU0VSCTB4ZmZmZmZmZmYJLyogIHNwZWNpZmljIGluZGV4ZXMgKi8KKworLyogU2VjdGlvbiBuYW1lcyAqLworI2RlZmluZSBFTEZfQlNTICAgICAgICAgIi5ic3MiCQkvKiB1bmluaXRpYWxpemVkIGRhdGEgKi8KKyNkZWZpbmUgRUxGX0RBVEEgICAgICAgICIuZGF0YSIJCS8qIGluaXRpYWxpemVkIGRhdGEgKi8KKyNkZWZpbmUgRUxGX0RFQlVHICAgICAgICIuZGVidWciCS8qIGRlYnVnICovCisjZGVmaW5lIEVMRl9EWU5BTUlDICAgICAiLmR5bmFtaWMiCS8qIGR5bmFtaWMgbGlua2luZyBpbmZvcm1hdGlvbiAqLworI2RlZmluZSBFTEZfRFlOU1RSICAgICAgIi5keW5zdHIiCS8qIGR5bmFtaWMgc3RyaW5nIHRhYmxlICovCisjZGVmaW5lIEVMRl9EWU5TWU0gICAgICAiLmR5bnN5bSIJLyogZHluYW1pYyBzeW1ib2wgdGFibGUgKi8KKyNkZWZpbmUgRUxGX0ZJTkkgICAgICAgICIuZmluaSIJCS8qIHRlcm1pbmF0aW9uIGNvZGUgKi8KKyNkZWZpbmUgRUxGX0dPVCAgICAgICAgICIuZ290IgkJLyogZ2xvYmFsIG9mZnNldCB0YWJsZSAqLworI2RlZmluZSBFTEZfSEFTSCAgICAgICAgIi5oYXNoIgkJLyogc3ltYm9sIGhhc2ggdGFibGUgKi8KKyNkZWZpbmUgRUxGX0lOSVQgICAgICAgICIuaW5pdCIJCS8qIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KKyNkZWZpbmUgRUxGX1JFTF9EQVRBICAgICIucmVsLmRhdGEiCS8qIHJlbG9jYXRpb24gZGF0YSAqLworI2RlZmluZSBFTEZfUkVMX0ZJTkkgICAgIi5yZWwuZmluaSIJLyogcmVsb2NhdGlvbiB0ZXJtaW5hdGlvbiBjb2RlICovCisjZGVmaW5lIEVMRl9SRUxfSU5JVCAgICAiLnJlbC5pbml0IgkvKiByZWxvY2F0aW9uIGluaXRpYWxpemF0aW9uIGNvZGUgKi8KKyNkZWZpbmUgRUxGX1JFTF9EWU4gICAgICIucmVsLmR5biIJLyogcmVsb2NhbHRpb24gZHluYW1pYyBsaW5rIGluZm8gKi8KKyNkZWZpbmUgRUxGX1JFTF9ST0RBVEEgICIucmVsLnJvZGF0YSIJLyogcmVsb2NhdGlvbiByZWFkLW9ubHkgZGF0YSAqLworI2RlZmluZSBFTEZfUkVMX1RFWFQgICAgIi5yZWwudGV4dCIJLyogcmVsb2NhdGlvbiBjb2RlICovCisjZGVmaW5lIEVMRl9ST0RBVEEgICAgICAiLnJvZGF0YSIJLyogcmVhZC1vbmx5IGRhdGEgKi8KKyNkZWZpbmUgRUxGX1NIU1RSVEFCICAgICIuc2hzdHJ0YWIiCS8qIHNlY3Rpb24gaGVhZGVyIHN0cmluZyB0YWJsZSAqLworI2RlZmluZSBFTEZfU1RSVEFCICAgICAgIi5zdHJ0YWIiCS8qIHN0cmluZyB0YWJsZSAqLworI2RlZmluZSBFTEZfU1lNVEFCICAgICAgIi5zeW10YWIiCS8qIHN5bWJvbCB0YWJsZSAqLworI2RlZmluZSBFTEZfVEVYVCAgICAgICAgIi50ZXh0IgkJLyogY29kZSAqLworCisKKy8qIFNlY3Rpb24gQXR0cmlidXRlIEZsYWdzIC0gc2hfZmxhZ3MgKi8KKyNkZWZpbmUgU0hGX1dSSVRFCTB4MQkJLyogV3JpdGFibGUgKi8KKyNkZWZpbmUgU0hGX0FMTE9DCTB4MgkJLyogb2NjdXBpZXMgbWVtb3J5ICovCisjZGVmaW5lIFNIRl9FWEVDSU5TVFIJMHg0CQkvKiBleGVjdXRhYmxlICovCisjZGVmaW5lIFNIRl9NQVNLUFJPQwkweGYwMDAwMDAwCS8qIHJlc2VydmVkIGJpdHMgZm9yIHByb2Nlc3NvciAqLworCQkJCQkvKiAgc3BlY2lmaWMgc2VjdGlvbiBhdHRyaWJ1dGVzICovCisKKy8qIFN5bWJvbCBUYWJsZSBFbnRyeSAqLwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfc3ltIHsKKwlFbGYzMl9Xb3JkCXN0X25hbWU7CS8qIG5hbWUgLSBpbmRleCBpbnRvIHN0cmluZyB0YWJsZSAqLworCUVsZjMyX0FkZHIJc3RfdmFsdWU7CS8qIHN5bWJvbCB2YWx1ZSAqLworCUVsZjMyX1dvcmQJc3Rfc2l6ZTsJLyogc3ltYm9sIHNpemUgKi8KKwl1bnNpZ25lZCBjaGFyCXN0X2luZm87CS8qIHR5cGUgYW5kIGJpbmRpbmcgKi8KKwl1bnNpZ25lZCBjaGFyCXN0X290aGVyOwkvKiAwIC0gbm8gZGVmaW5lZCBtZWFuaW5nICovCisJRWxmMzJfSGFsZglzdF9zaG5keDsJLyogc2VjdGlvbiBoZWFkZXIgaW5kZXggKi8KK30gRWxmMzJfU3ltOworCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmNjRfSGFsZglzdF9uYW1lOwkvKiBTeW1ib2wgbmFtZSBpbmRleCBpbiBzdHIgdGFibGUgKi8KKwlFbGZfQnl0ZQlzdF9pbmZvOwkvKiB0eXBlIC8gYmluZGluZyBhdHRycyAqLworCUVsZl9CeXRlCXN0X290aGVyOwkvKiB1bnVzZWQgKi8KKwlFbGY2NF9RdWFydGVyCXN0X3NobmR4OwkvKiBzZWN0aW9uIGluZGV4IG9mIHN5bWJvbCAqLworCUVsZjY0X1h3b3JkCXN0X3ZhbHVlOwkvKiB2YWx1ZSBvZiBzeW1ib2wgKi8KKwlFbGY2NF9Yd29yZAlzdF9zaXplOwkvKiBzaXplIG9mIHN5bWJvbCAqLworfSBFbGY2NF9TeW07CisKKy8qIFN5bWJvbCB0YWJsZSBpbmRleCAqLworI2RlZmluZSBTVE5fVU5ERUYJMAkJLyogdW5kZWZpbmVkICovCisKKy8qIEV4dHJhY3Qgc3ltYm9sIGluZm8gLSBzdF9pbmZvICovCisjZGVmaW5lIEVMRjMyX1NUX0JJTkQoeCkJKCh4KSA+PiA0KQorI2RlZmluZSBFTEYzMl9TVF9UWVBFKHgpCSgoKHVuc2lnbmVkIGludCkgeCkgJiAweGYpCisjZGVmaW5lIEVMRjMyX1NUX0lORk8oYix0KQkoKChiKSA8PCA0KSArICgodCkgJiAweGYpKQorCisjZGVmaW5lIEVMRjY0X1NUX0JJTkQoeCkJKCh4KSA+PiA0KQorI2RlZmluZSBFTEY2NF9TVF9UWVBFKHgpCSgoKHVuc2lnbmVkIGludCkgeCkgJiAweGYpCisjZGVmaW5lIEVMRjY0X1NUX0lORk8oYix0KQkoKChiKSA8PCA0KSArICgodCkgJiAweGYpKQorCisvKiBTeW1ib2wgQmluZGluZyAtIEVMRjMyX1NUX0JJTkQgLSBzdF9pbmZvICovCisjZGVmaW5lIFNUQl9MT0NBTAkwCQkvKiBMb2NhbCBzeW1ib2wgKi8KKyNkZWZpbmUgU1RCX0dMT0JBTAkxCQkvKiBHbG9iYWwgc3ltYm9sICovCisjZGVmaW5lIFNUQl9XRUFLCTIJCS8qIGxpa2UgZ2xvYmFsIC0gbG93ZXIgcHJlY2VkZW5jZSAqLworI2RlZmluZSBTVEJfTlVNCQkzCQkvKiBudW1iZXIgb2Ygc3ltYm9sIGJpbmRpbmdzICovCisjZGVmaW5lIFNUQl9MT1BST0MJMTMJCS8qIHJlc2VydmVkIHJhbmdlIGZvciBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgU1RCX0hJUFJPQwkxNQkJLyogIHNwZWNpZmljIHN5bWJvbCBiaW5kaW5ncyAqLworCisvKiBTeW1ib2wgdHlwZSAtIEVMRjMyX1NUX1RZUEUgLSBzdF9pbmZvICovCisjZGVmaW5lIFNUVF9OT1RZUEUJMAkJLyogbm90IHNwZWNpZmllZCAqLworI2RlZmluZSBTVFRfT0JKRUNUCTEJCS8qIGRhdGEgb2JqZWN0ICovCisjZGVmaW5lIFNUVF9GVU5DCTIJCS8qIGZ1bmN0aW9uICovCisjZGVmaW5lIFNUVF9TRUNUSU9OCTMJCS8qIHNlY3Rpb24gKi8KKyNkZWZpbmUgU1RUX0ZJTEUJNAkJLyogZmlsZSAqLworI2RlZmluZSBTVFRfTlVNCQk1CQkvKiBudW1iZXIgb2Ygc3ltYm9sIHR5cGVzICovCisjZGVmaW5lIFNUVF9MT1BST0MJMTMJCS8qIHJlc2VydmVkIHJhbmdlIGZvciBwcm9jZXNzb3IgKi8KKyNkZWZpbmUgU1RUX0hJUFJPQwkxNQkJLyogIHNwZWNpZmljIHN5bWJvbCB0eXBlcyAqLworCisvKiBSZWxvY2F0aW9uIGVudHJ5IHdpdGggaW1wbGljaXQgYWRkZW5kICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfQWRkcglyX29mZnNldDsJLyogb2Zmc2V0IG9mIHJlbG9jYXRpb24gKi8KKwlFbGYzMl9Xb3JkCXJfaW5mbzsJCS8qIHN5bWJvbCB0YWJsZSBpbmRleCBhbmQgdHlwZSAqLworfSBFbGYzMl9SZWw7CisKKy8qIFJlbG9jYXRpb24gZW50cnkgd2l0aCBleHBsaWNpdCBhZGRlbmQgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwlFbGYzMl9BZGRyCXJfb2Zmc2V0OwkvKiBvZmZzZXQgb2YgcmVsb2NhdGlvbiAqLworCUVsZjMyX1dvcmQJcl9pbmZvOwkJLyogc3ltYm9sIHRhYmxlIGluZGV4IGFuZCB0eXBlICovCisJRWxmMzJfU3dvcmQJcl9hZGRlbmQ7Cit9IEVsZjMyX1JlbGE7CisKKy8qIEV4dHJhY3QgcmVsb2NhdGlvbiBpbmZvIC0gcl9pbmZvICovCisjZGVmaW5lIEVMRjMyX1JfU1lNKGkpCQkoKGkpID4+IDgpCisjZGVmaW5lIEVMRjMyX1JfVFlQRShpKQkJKCh1bnNpZ25lZCBjaGFyKSAoaSkpCisjZGVmaW5lIEVMRjMyX1JfSU5GTyhzLHQpIAkoKChzKSA8PCA4KSArICh1bnNpZ25lZCBjaGFyKSh0KSkKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1h3b3JkCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLworCUVsZjY0X1h3b3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCit9IEVsZjY0X1JlbDsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1h3b3JkCXJfb2Zmc2V0OwkvKiB3aGVyZSB0byBkbyBpdCAqLworCUVsZjY0X1h3b3JkCXJfaW5mbzsJCS8qIGluZGV4ICYgdHlwZSBvZiByZWxvY2F0aW9uICovCisJRWxmNjRfU3h3b3JkCXJfYWRkZW5kOwkvKiBhZGp1c3RtZW50IHZhbHVlICovCit9IEVsZjY0X1JlbGE7CisKKyNkZWZpbmUJRUxGNjRfUl9TWU0oaW5mbykJKChpbmZvKSA+PiAzMikKKyNkZWZpbmUJRUxGNjRfUl9UWVBFKGluZm8pCSgoaW5mbykgJiAweEZGRkZGRkZGKQorI2RlZmluZSBFTEY2NF9SX0lORk8ocyx0KSAJKCgocykgPDwgMzIpICsgKF9fdWludDMyX3QpKHQpKQorCisvKiBQcm9ncmFtIEhlYWRlciAqLwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1dvcmQJcF90eXBlOwkJLyogc2VnbWVudCB0eXBlICovCisJRWxmMzJfT2ZmCXBfb2Zmc2V0OwkvKiBzZWdtZW50IG9mZnNldCAqLworCUVsZjMyX0FkZHIJcF92YWRkcjsJLyogdmlydHVhbCBhZGRyZXNzIG9mIHNlZ21lbnQgKi8KKwlFbGYzMl9BZGRyCXBfcGFkZHI7CS8qIHBoeXNpY2FsIGFkZHJlc3MgLSBpZ25vcmVkPyAqLworCUVsZjMyX1dvcmQJcF9maWxlc3o7CS8qIG51bWJlciBvZiBieXRlcyBpbiBmaWxlIGZvciBzZWcuICovCisJRWxmMzJfV29yZAlwX21lbXN6OwkvKiBudW1iZXIgb2YgYnl0ZXMgaW4gbWVtLiBmb3Igc2VnLiAqLworCUVsZjMyX1dvcmQJcF9mbGFnczsJLyogZmxhZ3MgKi8KKwlFbGYzMl9Xb3JkCXBfYWxpZ247CS8qIG1lbW9yeSBhbGlnbm1lbnQgKi8KK30gRWxmMzJfUGhkcjsKKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X0hhbGYJcF90eXBlOwkJLyogZW50cnkgdHlwZSAqLworCUVsZjY0X0hhbGYJcF9mbGFnczsJLyogZmxhZ3MgKi8KKwlFbGY2NF9PZmYJcF9vZmZzZXQ7CS8qIG9mZnNldCAqLworCUVsZjY0X0FkZHIJcF92YWRkcjsJLyogdmlydHVhbCBhZGRyZXNzICovCisJRWxmNjRfQWRkcglwX3BhZGRyOwkvKiBwaHlzaWNhbCBhZGRyZXNzICovCisJRWxmNjRfWHdvcmQJcF9maWxlc3o7CS8qIGZpbGUgc2l6ZSAqLworCUVsZjY0X1h3b3JkCXBfbWVtc3o7CS8qIG1lbW9yeSBzaXplICovCisJRWxmNjRfWHdvcmQJcF9hbGlnbjsJLyogbWVtb3J5ICYgZmlsZSBhbGlnbm1lbnQgKi8KK30gRWxmNjRfUGhkcjsKKworLyogU2VnbWVudCB0eXBlcyAtIHBfdHlwZSAqLworI2RlZmluZSBQVF9OVUxMCQkwCQkvKiB1bnVzZWQgKi8KKyNkZWZpbmUgUFRfTE9BRAkJMQkJLyogbG9hZGFibGUgc2VnbWVudCAqLworI2RlZmluZSBQVF9EWU5BTUlDCTIJCS8qIGR5bmFtaWMgbGlua2luZyBzZWN0aW9uICovCisjZGVmaW5lIFBUX0lOVEVSUAkzCQkvKiB0aGUgUlRMRCAqLworI2RlZmluZSBQVF9OT1RFCQk0CQkvKiBhdXhpbGlhcnkgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgUFRfU0hMSUIJNQkJLyogcmVzZXJ2ZWQgLSBwdXJwb3NlIHVuZGVmaW5lZCAqLworI2RlZmluZSBQVF9QSERSCQk2CQkvKiBwcm9ncmFtIGhlYWRlciAqLworI2RlZmluZSBQVF9OVU0JCTcJCS8qIE51bWJlciBvZiBzZWdtZW50IHR5cGVzICovCisjZGVmaW5lIFBUX0xPT1MJCTB4NjAwMDAwMDAJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIE9TICovCisjZGVmaW5lIFBUX0hJT1MJCTB4NmZmZmZmZmYJLyogIHNwZWNpZmljIHNlZ21lbnQgdHlwZXMgKi8KKyNkZWZpbmUgUFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLworI2RlZmluZSBQVF9ISVBST0MJMHg3ZmZmZmZmZgkvKiAgc3BlY2lmaWMgc2VnbWVudCB0eXBlcyAqLworCisvKiBTZWdtZW50IGZsYWdzIC0gcF9mbGFncyAqLworI2RlZmluZSBQRl9YCQkweDEJCS8qIEV4ZWN1dGFibGUgKi8KKyNkZWZpbmUgUEZfVwkJMHgyCQkvKiBXcml0YWJsZSAqLworI2RlZmluZSBQRl9SCQkweDQJCS8qIFJlYWRhYmxlICovCisjZGVmaW5lIFBGX01BU0tQUk9DCTB4ZjAwMDAwMDAJLyogcmVzZXJ2ZWQgYml0cyBmb3IgcHJvY2Vzc29yICovCisJCQkJCS8qICBzcGVjaWZpYyBzZWdtZW50IGZsYWdzICovCisKKy8qIER5bmFtaWMgc3RydWN0dXJlICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfU3dvcmQJZF90YWc7CQkvKiBjb250cm9scyBtZWFuaW5nIG9mIGRfdmFsICovCisJdW5pb24geworCQlFbGYzMl9Xb3JkCWRfdmFsOwkvKiBNdWx0aXBsZSBtZWFuaW5ncyAtIHNlZSBkX3RhZyAqLworCQlFbGYzMl9BZGRyCWRfcHRyOwkvKiBwcm9ncmFtIHZpcnR1YWwgYWRkcmVzcyAqLworCX0gZF91bjsKK30gRWxmMzJfRHluOworCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmNjRfWHdvcmQJZF90YWc7CQkvKiBjb250cm9scyBtZWFuaW5nIG9mIGRfdmFsICovCisJdW5pb24geworCQlFbGY2NF9BZGRyCWRfcHRyOworCQlFbGY2NF9Yd29yZAlkX3ZhbDsKKwl9IGRfdW47Cit9IEVsZjY0X0R5bjsKKworLyogRHluYW1pYyBBcnJheSBUYWdzIC0gZF90YWcgKi8KKyNkZWZpbmUgRFRfTlVMTAkJMAkJLyogbWFya3MgZW5kIG9mIF9EWU5BTUlDIGFycmF5ICovCisjZGVmaW5lIERUX05FRURFRAkxCQkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IG9mIG5lZWRlZCBsaWIgKi8KKyNkZWZpbmUgRFRfUExUUkVMU1oJMgkJLyogc2l6ZSBvZiByZWxvY2F0aW9uIGVudHJpZXMgaW4gUExUICovCisjZGVmaW5lIERUX1BMVEdPVAkzCQkvKiBhZGRyZXNzIFBMVC9HT1QgKi8KKyNkZWZpbmUgRFRfSEFTSAkJNAkJLyogYWRkcmVzcyBvZiBzeW1ib2wgaGFzaCB0YWJsZSAqLworI2RlZmluZSBEVF9TVFJUQUIJNQkJLyogYWRkcmVzcyBvZiBzdHJpbmcgdGFibGUgKi8KKyNkZWZpbmUgRFRfU1lNVEFCCTYJCS8qIGFkZHJlc3Mgb2Ygc3ltYm9sIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEEJCTcJCS8qIGFkZHJlc3Mgb2YgcmVsb2NhdGlvbiB0YWJsZSAqLworI2RlZmluZSBEVF9SRUxBU1oJOAkJLyogc2l6ZSBvZiByZWxvY2F0aW9uIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEFFTlQJOQkJLyogc2l6ZSBvZiByZWxvY2F0aW9uIGVudHJ5ICovCisjZGVmaW5lIERUX1NUUlNaCTEwCQkvKiBzaXplIG9mIHN0cmluZyB0YWJsZSAqLworI2RlZmluZSBEVF9TWU1FTlQJMTEJCS8qIHNpemUgb2Ygc3ltYm9sIHRhYmxlIGVudHJ5ICovCisjZGVmaW5lIERUX0lOSVQJCTEyCQkvKiBhZGRyZXNzIG9mIGluaXRpYWxpemF0aW9uIGZ1bmMuICovCisjZGVmaW5lIERUX0ZJTkkJCTEzCQkvKiBhZGRyZXNzIG9mIHRlcm1pbmF0aW9uIGZ1bmN0aW9uICovCisjZGVmaW5lIERUX1NPTkFNRQkxNAkJLyogc3RyaW5nIHRhYmxlIG9mZnNldCBvZiBzaGFyZWQgb2JqICovCisjZGVmaW5lIERUX1JQQVRICTE1CQkvKiBzdHJpbmcgdGFibGUgb2Zmc2V0IG9mIGxpYnJhcnkKKwkJCQkJICAgc2VhcmNoIHBhdGggKi8KKyNkZWZpbmUgRFRfU1lNQk9MSUMJMTYJCS8qIHN0YXJ0IHN5bSBzZWFyY2ggaW4gc2hhcmVkIG9iai4gKi8KKyNkZWZpbmUgRFRfUkVMCQkxNwkJLyogYWRkcmVzcyBvZiByZWwuIHRibC4gdyBhZGRlbmRzICovCisjZGVmaW5lIERUX1JFTFNaCTE4CQkvKiBzaXplIG9mIERUX1JFTCByZWxvY2F0aW9uIHRhYmxlICovCisjZGVmaW5lIERUX1JFTEVOVAkxOQkJLyogc2l6ZSBvZiBEVF9SRUwgcmVsb2NhdGlvbiBlbnRyeSAqLworI2RlZmluZSBEVF9QTFRSRUwJMjAJCS8qIFBMVCByZWZlcmVuY2VkIHJlbG9jYXRpb24gZW50cnkgKi8KKyNkZWZpbmUgRFRfREVCVUcJMjEJCS8qIGJ1Z2dlciAqLworI2RlZmluZSBEVF9URVhUUkVMCTIyCQkvKiBBbGxvdyByZWwuIG1vZC4gdG8gdW53cml0YWJsZSBzZWcgKi8KKyNkZWZpbmUgRFRfSk1QUkVMCTIzCQkvKiBhZGQuIG9mIFBMVCdzIHJlbG9jYXRpb24gZW50cmllcyAqLworI2RlZmluZSBEVF9CSU5EX05PVwkyNAkJLyogQmluZCBub3cgcmVnYXJkbGVzcyBvZiBlbnYgc2V0dGluZyAqLworI2RlZmluZSBEVF9OVU0JCTI1CQkvKiBOdW1iZXIgdXNlZC4gKi8KKyNkZWZpbmUgRFRfTE9QUk9DCTB4NzAwMDAwMDAJLyogcmVzZXJ2ZWQgcmFuZ2UgZm9yIHByb2Nlc3NvciAqLworI2RlZmluZSBEVF9ISVBST0MJMHg3ZmZmZmZmZgkvKiAgc3BlY2lmaWMgZHluYW1pYyBhcnJheSB0YWdzICovCisJCisvKiBTdGFuZGFyZCBFTEYgaGFzaGluZyBmdW5jdGlvbiAqLwordW5zaWduZWQgaW50IGVsZl9oYXNoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKm5hbWUpOworCisvKgorICogTm90ZSBEZWZpbml0aW9ucworICovCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmMzJfV29yZCBuYW1lc3o7CisJRWxmMzJfV29yZCBkZXNjc3o7CisJRWxmMzJfV29yZCB0eXBlOworfSBFbGYzMl9Ob3RlOworCit0eXBlZGVmIHN0cnVjdCB7CisJRWxmNjRfSGFsZiBuYW1lc3o7CisJRWxmNjRfSGFsZiBkZXNjc3o7CisJRWxmNjRfSGFsZiB0eXBlOworfSBFbGY2NF9Ob3RlOworCisvKgorICogWFhYIC0gdGhlc2UgX0tFUk5FTCBpdGVtcyBhcmVuJ3QgcGFydCBvZiB0aGUgQUJJIQorICovCisjaWYgZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKF9EWU5fTE9BREVSKQorCisjZGVmaW5lIEVMRjMyX05PX0FERFIJKCh1X2xvbmcpIH4wKQkvKiBJbmRpY2F0ZXMgYWRkci4gbm90IHlldCBmaWxsZWQgaW4gKi8KKyNkZWZpbmUgRUxGX0FVWF9FTlRSSUVTCTgJCS8qIFNpemUgb2YgYXV4IGFycmF5IHBhc3NlZCB0byBsb2FkZXIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjMyX1N3b3JkCWF1X2lkOwkJCQkvKiAzMi1iaXQgaWQgKi8KKwlFbGYzMl9Xb3JkCWF1X3Y7CQkJCS8qIDMyLWJpdCB2YWx1ZSAqLworfSBBdXgzMkluZm87CisKKyNkZWZpbmUgRUxGNjRfTk9fQUREUgkoKF9fdWludDY0X3QpIH4wKS8qIEluZGljYXRlcyBhZGRyLiBub3QgeWV0IGZpbGxlZCBpbiAqLworI2RlZmluZSBFTEY2NF9BVVhfRU5UUklFUwk4CS8qIFNpemUgb2YgYXV4IGFycmF5IHBhc3NlZCB0byBsb2FkZXIgKi8KKwordHlwZWRlZiBzdHJ1Y3QgeworCUVsZjY0X1NoYWxmCWF1X2lkOwkJCQkvKiAzMi1iaXQgaWQgKi8KKwlFbGY2NF9Yd29yZAlhdV92OwkJCQkvKiA2NC1iaXQgaWQgKi8KK30gQXV4NjRJbmZvOworCitlbnVtIEF1eElEIHsKKwlBVVhfbnVsbCA9IDAsCisJQVVYX2lnbm9yZSA9IDEsCisJQVVYX2V4ZWNmZCA9IDIsCisJQVVYX3BoZHIgPSAzLAkJCS8qICZwaGRyWzBdICovCisJQVVYX3BoZW50ID0gNCwJCQkvKiBzaXplb2YocGhkclswXSkgKi8KKwlBVVhfcGhudW0gPSA1LAkJCS8qICMgcGhkciBlbnRyaWVzICovCisJQVVYX3BhZ2VzeiA9IDYsCQkJLyogUEFHRVNJWkUgKi8KKwlBVVhfYmFzZSA9IDcsCQkJLyogbGQuc28gYmFzZSBhZGRyICovCisJQVVYX2ZsYWdzID0gOCwJCQkvKiBwcm9jZXNzb3IgZmxhZ3MgKi8KKwlBVVhfZW50cnkgPSA5LAkJCS8qIGEub3V0IGVudHJ5ICovCisJQVVYX3N1bl91aWQgPSAyMDAwLAkJLyogZXVpZCAqLworCUFVWF9zdW5fcnVpZCA9IDIwMDEsCQkvKiBydWlkICovCisJQVVYX3N1bl9naWQgPSAyMDAyLAkJLyogZWdpZCAqLworCUFVWF9zdW5fcmdpZCA9IDIwMDMJCS8qIHJnaWQgKi8KK307CisKK3N0cnVjdCBlbGZfYXJncyB7CisgICAgICAgIHVfbG9uZyAgYXJnX2VudHJ5OwkJLyogcHJvZ3JhbSBlbnRyeSBwb2ludCAqLworICAgICAgICB1X2xvbmcgIGFyZ19pbnRlcnA7CQkvKiBJbnRlcnByZXRlciBsb2FkIGFkZHJlc3MgKi8KKyAgICAgICAgdV9sb25nICBhcmdfcGhhZGRyOwkJLyogcHJvZ3JhbSBoZWFkZXIgYWRkcmVzcyAqLworICAgICAgICB1X2xvbmcgIGFyZ19waGVudHNpemU7CQkvKiBTaXplIG9mIHByb2dyYW0gaGVhZGVyICovCisgICAgICAgIHVfbG9uZyAgYXJnX3BobnVtOwkJLyogTnVtYmVyIG9mIHByb2dyYW0gaGVhZGVycyAqLworICAgICAgICB1X2xvbmcgIGFyZ19vczsJCQkvKiBPUyB0YWcgKi8KK307CisKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoRUxGU0laRSkgJiYgZGVmaW5lZChBUkNIX0VMRlNJWkUpCisjZGVmaW5lIEVMRlNJWkUgQVJDSF9FTEZTSVpFCisjZW5kaWYKKworI2lmIGRlZmluZWQoRUxGU0laRSkKKyNkZWZpbmUgQ09OQ0FUKHgseSkJX19DT05DQVQoeCx5KQorI2RlZmluZSBFTEZOQU1FKHgpCUNPTkNBVChlbGYsQ09OQ0FUKEVMRlNJWkUsQ09OQ0FUKF8seCkpKQorI2RlZmluZSBFTEZOQU1FMih4LHkpCUNPTkNBVCh4LENPTkNBVChfZWxmLENPTkNBVChFTEZTSVpFLENPTkNBVChfLHkpKSkpCisjZGVmaW5lIEVMRk5BTUVFTkQoeCkJQ09OQ0FUKHgsQ09OQ0FUKF9lbGYsRUxGU0laRSkpCisjZGVmaW5lIEVMRkRFRk5OQU1FKHgpCUNPTkNBVChFTEYsQ09OQ0FUKEVMRlNJWkUsQ09OQ0FUKF8seCkpKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKEVMRlNJWkUpICYmIChFTEZTSVpFID09IDMyKQorI2RlZmluZSBFbGZfRWhkcglFbGYzMl9FaGRyCisjZGVmaW5lIEVsZl9QaGRyCUVsZjMyX1BoZHIKKyNkZWZpbmUgRWxmX1NoZHIJRWxmMzJfU2hkcgorI2RlZmluZSBFbGZfU3ltCQlFbGYzMl9TeW0KKyNkZWZpbmUgRWxmX1JlbAkJRWxmMzJfUmVsCisjZGVmaW5lIEVsZl9SZWxBCUVsZjMyX1JlbGEKKyNkZWZpbmUgRWxmX0R5bgkJRWxmMzJfRHluCisjZGVmaW5lIEVsZl9IYWxmCUVsZjMyX0hhbGYKKyNkZWZpbmUgRWxmX1dvcmQJRWxmMzJfV29yZAorI2RlZmluZSBFbGZfU3dvcmQJRWxmMzJfU3dvcmQKKyNkZWZpbmUgRWxmX0FkZHIJRWxmMzJfQWRkcgorI2RlZmluZSBFbGZfT2ZmCQlFbGYzMl9PZmYKKyNkZWZpbmUgRWxmX05oZHIJRWxmMzJfTmhkcgorI2RlZmluZSBFbGZfTm90ZQlFbGYzMl9Ob3RlCisKKyNkZWZpbmUgRUxGX1JfU1lNCUVMRjMyX1JfU1lNCisjZGVmaW5lIEVMRl9SX1RZUEUJRUxGMzJfUl9UWVBFCisjZGVmaW5lIEVMRl9SX0lORk8JRUxGMzJfUl9JTkZPCisjZGVmaW5lIEVMRkNMQVNTCUVMRkNMQVNTMzIKKworI2RlZmluZSBFTEZfU1RfQklORAlFTEYzMl9TVF9CSU5ECisjZGVmaW5lIEVMRl9TVF9UWVBFCUVMRjMyX1NUX1RZUEUKKyNkZWZpbmUgRUxGX1NUX0lORk8JRUxGMzJfU1RfSU5GTworCisjZGVmaW5lIEF1eEluZm8JCUF1eDMySW5mbworI2VsaWYgZGVmaW5lZChFTEZTSVpFKSAmJiAoRUxGU0laRSA9PSA2NCkKKyNkZWZpbmUgRWxmX0VoZHIJRWxmNjRfRWhkcgorI2RlZmluZSBFbGZfUGhkcglFbGY2NF9QaGRyCisjZGVmaW5lIEVsZl9TaGRyCUVsZjY0X1NoZHIKKyNkZWZpbmUgRWxmX1N5bQkJRWxmNjRfU3ltCisjZGVmaW5lIEVsZl9SZWwJCUVsZjY0X1JlbAorI2RlZmluZSBFbGZfUmVsQQlFbGY2NF9SZWxhCisjZGVmaW5lIEVsZl9EeW4JCUVsZjY0X0R5bgorI2RlZmluZSBFbGZfSGFsZglFbGY2NF9IYWxmCisjZGVmaW5lIEVsZl9Xb3JkCUVsZjY0X1dvcmQKKyNkZWZpbmUgRWxmX1N3b3JkCUVsZjY0X1N3b3JkCisjZGVmaW5lIEVsZl9BZGRyCUVsZjY0X0FkZHIKKyNkZWZpbmUgRWxmX09mZgkJRWxmNjRfT2ZmCisjZGVmaW5lIEVsZl9OaGRyCUVsZjY0X05oZHIKKyNkZWZpbmUgRWxmX05vdGUJRWxmNjRfTm90ZQorCisjZGVmaW5lIEVMRl9SX1NZTQlFTEY2NF9SX1NZTQorI2RlZmluZSBFTEZfUl9UWVBFCUVMRjY0X1JfVFlQRQorI2RlZmluZSBFTEZfUl9JTkZPCUVMRjY0X1JfSU5GTworI2RlZmluZSBFTEZDTEFTUwlFTEZDTEFTUzY0CisKKyNkZWZpbmUgRUxGX1NUX0JJTkQJRUxGNjRfU1RfQklORAorI2RlZmluZSBFTEZfU1RfVFlQRQlFTEY2NF9TVF9UWVBFCisjZGVmaW5lIEVMRl9TVF9JTkZPCUVMRjY0X1NUX0lORk8KKworI2RlZmluZSBBdXhJbmZvCQlBdXg2NEluZm8KKyNlbmRpZgorCisjaWZuZGVmIF9LRVJORUwKK2V4dGVybiBFbGZfRHluCQlfRFlOQU1JQ1tdOworI2VuZGlmCisKKyNpZmRlZglfS0VSTkVMCisjaWZkZWYgX0tFUk5fRE9fRUxGNjQKK2ludCBleGVjX2VsZjY0X21ha2VjbWRzKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKik7Cit2b2lkICplbGY2NF9jb3B5YXJncyhzdHJ1Y3QgZXhlY19wYWNrYWdlICosIHN0cnVjdCBwc19zdHJpbmdzICosCisgICAgICAgIHZvaWQgKiwgdm9pZCAqKTsKK2ludCBleGVjX2VsZjY0X2ZpeHVwKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKik7CitjaGFyICplbGY2NF9jaGVja19icmFuZChFbGY2NF9FaGRyICopOworaW50IGVsZjY0X29zX3B0X25vdGUoc3RydWN0IHByb2MgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLCBFbGY2NF9FaGRyICosCisJY2hhciAqLCBzaXplX3QsIHNpemVfdCk7CisjZW5kaWYKKyNpZmRlZiBfS0VSTl9ET19FTEYKK2ludCBleGVjX2VsZjMyX21ha2VjbWRzKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKik7Cit2b2lkICplbGYzMl9jb3B5YXJncyhzdHJ1Y3QgZXhlY19wYWNrYWdlICosIHN0cnVjdCBwc19zdHJpbmdzICosCisgICAgICAgIHZvaWQgKiwgdm9pZCAqKTsKK2ludCBleGVjX2VsZjMyX2ZpeHVwKHN0cnVjdCBwcm9jICosIHN0cnVjdCBleGVjX3BhY2thZ2UgKik7CitjaGFyICplbGYzMl9jaGVja19icmFuZChFbGYzMl9FaGRyICopOworaW50IGVsZjMyX29zX3B0X25vdGUoc3RydWN0IHByb2MgKiwgc3RydWN0IGV4ZWNfcGFja2FnZSAqLCBFbGYzMl9FaGRyICosCisJY2hhciAqLCBzaXplX3QsIHNpemVfdCk7CisjZW5kaWYKKworI2VuZGlmIC8qIF9LRVJORUwgKi8KKworI2RlZmluZSBFTEZfVEFSR19WRVIJMQkvKiBUaGUgdmVyIGZvciB3aGljaCB0aGlzIGNvZGUgaXMgaW50ZW5kZWQgKi8KKworI2VuZGlmIC8qIF9TWVNfRVhFQ19FTEZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZmlsZS5oIGIvbGliYy9pbmNsdWRlL3N5cy9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDY5MzdmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvZmlsZS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19GSUxFX0hfCisjZGVmaW5lIF9TWVNfRklMRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKy8vIEFORFJPSUQ6IG5lZWRlZCBmb3IgZmxvY2soKQorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKKyNlbmRpZiAvKiBfU1lTX0ZJTEVfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvZnN1aWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjU3YmMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9mc3VpZC5oCkBAIC0wLDAgKzEsNDEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19GU1VJRF9IXworI2RlZmluZSBfU1lTX0ZTVUlEX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IHNldGZzdWlkKHVpZF90KTsKK2V4dGVybiBpbnQgc2V0ZnNnaWQoZ2lkX3QpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19GU1VJRF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9pbm90aWZ5LmggYi9saWJjL2luY2x1ZGUvc3lzL2lub3RpZnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2Y5ZTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9pbm90aWZ5LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX0lOT1RJRllfSF8KKyNkZWZpbmUgX1NZU19JTk9USUZZX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pbm90aWZ5Lmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBpbm90aWZ5X2luaXQodm9pZCk7CitleHRlcm4gaW50IGlub3RpZnlfYWRkX3dhdGNoKGludCwgY29uc3QgY2hhciAqLCBfX3UzMik7CitleHRlcm4gaW50IGlub3RpZnlfcm1fd2F0Y2goaW50LCBfX3UzMik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX0lOT1RJRllfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjY4NTEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9pb2N0bC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19JT0NUTF9IXworI2RlZmluZSBfU1lTX0lPQ1RMX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9pb2N0bHMuaD4KKyNpbmNsdWRlIDxhc20vdGVybWJpdHMuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGxfY29tcGF0Lmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBpb2N0bChpbnQsIGludCwgLi4uKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfSU9DVExfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvaW9jdGxfY29tcGF0LmggYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsX2NvbXBhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3OWI2N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2lvY3RsX2NvbXBhdC5oCkBAIC0wLDAgKzEsMTY4IEBACisvKgkkTmV0QlNEOiBpb2N0bF9jb21wYXQuaCx2IDEuMTUgMjAwNS8xMi8wMyAxNzoxMDo0NiBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIChjKSBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqIEFsbCBvciBzb21lIHBvcnRpb25zIG9mIHRoaXMgZmlsZSBhcmUgZGVyaXZlZCBmcm9tIG1hdGVyaWFsIGxpY2Vuc2VkCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGJ5IEFtZXJpY2FuIFRlbGVwaG9uZSBhbmQgVGVsZWdyYXBoCisgKiBDby4gb3IgVW5peCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuIGFuZCBhcmUgcmVwcm9kdWNlZCBoZXJlaW4gd2l0aAorICogdGhlIHBlcm1pc3Npb24gb2YgVU5JWCBTeXN0ZW0gTGFib3JhdG9yaWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqCUAoIylpb2N0bF9jb21wYXQuaAk4LjQgKEJlcmtlbGV5KSAxLzIxLzk0CisgKi8KKworI2lmbmRlZiBfU1lTX0lPQ1RMX0NPTVBBVF9IXworI2RlZmluZQlfU1lTX0lPQ1RMX0NPTVBBVF9IXworCisvLyNpbmNsdWRlIDxzeXMvdHR5Y2hhcnMuaD4KKy8vI2luY2x1ZGUgPHN5cy90dHlkZXYuaD4KKworc3RydWN0IHRjaGFycyB7CisJY2hhcgl0X2ludHJjOwkvKiBpbnRlcnJ1cHQgKi8KKwljaGFyCXRfcXVpdGM7CS8qIHF1aXQgKi8KKwljaGFyCXRfc3RhcnRjOwkvKiBzdGFydCBvdXRwdXQgKi8KKwljaGFyCXRfc3RvcGM7CS8qIHN0b3Agb3V0cHV0ICovCisJY2hhcgl0X2VvZmM7CQkvKiBlbmQtb2YtZmlsZSAqLworCWNoYXIJdF9icmtjOwkJLyogaW5wdXQgZGVsaW1pdGVyIChsaWtlIG5sKSAqLworfTsKKworc3RydWN0IGx0Y2hhcnMgeworCWNoYXIJdF9zdXNwYzsJLyogc3RvcCBwcm9jZXNzIHNpZ25hbCAqLworCWNoYXIJdF9kc3VzcGM7CS8qIGRlbGF5ZWQgc3RvcCBwcm9jZXNzIHNpZ25hbCAqLworCWNoYXIJdF9ycHJudGM7CS8qIHJlcHJpbnQgbGluZSAqLworCWNoYXIJdF9mbHVzaGM7CS8qIGZsdXNoIG91dHB1dCAodG9nZ2xlcykgKi8KKwljaGFyCXRfd2VyYXNjOwkvKiB3b3JkIGVyYXNlICovCisJY2hhcgl0X2xuZXh0YzsJLyogbGl0ZXJhbCBuZXh0IGNoYXJhY3RlciAqLworfTsKKworLyoKKyAqIFN0cnVjdHVyZSBmb3IgVElPQ0dFVFAgYW5kIFRJT0NTRVRQIGlvY3Rscy4KKyAqLworI2lmbmRlZiBfU0dUVFlCXworI2RlZmluZQlfU0dUVFlCXworc3RydWN0IHNndHR5YiB7CisJY2hhcglzZ19pc3BlZWQ7CQkvKiBpbnB1dCBzcGVlZCAqLworCWNoYXIJc2dfb3NwZWVkOwkJLyogb3V0cHV0IHNwZWVkICovCisJY2hhcglzZ19lcmFzZTsJCS8qIGVyYXNlIGNoYXJhY3RlciAqLworCWNoYXIJc2dfa2lsbDsJCS8qIGtpbGwgY2hhcmFjdGVyICovCisJc2hvcnQJc2dfZmxhZ3M7CQkvKiBtb2RlIGZsYWdzICovCit9OworI2VuZGlmCisKKyNpZmRlZiBVU0VfT0xEX1RUWQorIyB1bmRlZiAgVElPQ0dFVEQKKyMgZGVmaW5lIFRJT0NHRVRECV9JT1IoJ3QnLCAwLCBpbnQpCS8qIGdldCBsaW5lIGRpc2NpcGxpbmUgKi8KKyMgdW5kZWYgIFRJT0NTRVRECisjIGRlZmluZSBUSU9DU0VURAlfSU9XKCd0JywgMSwgaW50KQkvKiBzZXQgbGluZSBkaXNjaXBsaW5lICovCisjZWxzZQorIyBkZWZpbmUgT1RJT0NHRVRECV9JT1IoJ3QnLCAwLCBpbnQpCS8qIGdldCBsaW5lIGRpc2NpcGxpbmUgKi8KKyMgZGVmaW5lIE9USU9DU0VURAlfSU9XKCd0JywgMSwgaW50KQkvKiBzZXQgbGluZSBkaXNjaXBsaW5lICovCisjZW5kaWYKKyNkZWZpbmUJVElPQ0hQQ0wJX0lPKCd0JywgMikJCS8qIGhhbmcgdXAgb24gbGFzdCBjbG9zZSAqLworI2RlZmluZQlUSU9DR0VUUAlfSU9SKCd0JywgOCxzdHJ1Y3Qgc2d0dHliKS8qIGdldCBwYXJhbWV0ZXJzIC0tIGd0dHkgKi8KKyNkZWZpbmUJVElPQ1NFVFAJX0lPVygndCcsIDksc3RydWN0IHNndHR5YikvKiBzZXQgcGFyYW1ldGVycyAtLSBzdHR5ICovCisjZGVmaW5lCVRJT0NTRVROCV9JT1coJ3QnLDEwLHN0cnVjdCBzZ3R0eWIpLyogYXMgYWJvdmUsIGJ1dCBubyBmbHVzaHR0eSovCisjZGVmaW5lCVRJT0NTRVRDCV9JT1coJ3QnLDE3LHN0cnVjdCB0Y2hhcnMpLyogc2V0IHNwZWNpYWwgY2hhcmFjdGVycyAqLworI2RlZmluZQlUSU9DR0VUQwlfSU9SKCd0JywxOCxzdHJ1Y3QgdGNoYXJzKS8qIGdldCBzcGVjaWFsIGNoYXJhY3RlcnMgKi8KKyNpZiAwCisvKiBCVUc6IGEgYnVuY2ggb2YgdGhlc2UgY29uZmxpY3Qgd2l0aCAjZGVmaW5lcyBpbiBhc20vdGVybWJpdHMuaCAqLworI2RlZmluZQkJVEFOREVNCQkweDAwMDAwMDAxCS8qIHNlbmQgc3RvcGMgb24gb3V0IHEgZnVsbCAqLworI2RlZmluZQkJQ0JSRUFLCQkweDAwMDAwMDAyCS8qIGhhbGYtY29va2VkIG1vZGUgKi8KKyNkZWZpbmUJCUxDQVNFCQkweDAwMDAwMDA0CS8qIHNpbXVsYXRlIGxvd2VyIGNhc2UgKi8KKyNkZWZpbmUJCUVDSE8JCTB4MDAwMDAwMDgJLyogZW5hYmxlIGVjaG9pbmcgKi8KKyNkZWZpbmUJCUNSTU9ECQkweDAwMDAwMDEwCS8qIG1hcCBcciB0byBcclxuIG9uIG91dHB1dCAqLworI2RlZmluZQkJUkFXCQkweDAwMDAwMDIwCS8qIG5vIGkvbyBwcm9jZXNzaW5nICovCisjZGVmaW5lCQlPRERQCQkweDAwMDAwMDQwCS8qIGdldC9zZW5kIG9kZCBwYXJpdHkgKi8KKyNkZWZpbmUJCUVWRU5QCQkweDAwMDAwMDgwCS8qIGdldC9zZW5kIGV2ZW4gcGFyaXR5ICovCisjZGVmaW5lCQlBTllQCQkweDAwMDAwMGMwCS8qIGdldCBhbnkgcGFyaXR5L3NlbmQgbm9uZSAqLworI2RlZmluZQkJTkxERUxBWQkJMHgwMDAwMDMwMAkvKiBcbiBkZWxheSAqLworI2RlZmluZQkJCU5MMAkweDAwMDAwMDAwCisjZGVmaW5lCQkJTkwxCTB4MDAwMDAxMDAJLyogdHR5IDM3ICovCisjZGVmaW5lCQkJTkwyCTB4MDAwMDAyMDAJLyogdnQwNSAqLworI2RlZmluZQkJCU5MMwkweDAwMDAwMzAwCisjZGVmaW5lCQlUQkRFTEFZCQkweDAwMDAwYzAwCS8qIGhvcml6b250YWwgdGFiIGRlbGF5ICovCisjZGVmaW5lCQkJVEFCMAkweDAwMDAwMDAwCisjZGVmaW5lCQkJVEFCMQkweDAwMDAwNDAwCS8qIHR0eSAzNyAqLworI2RlZmluZQkJCVRBQjIJMHgwMDAwMDgwMAorI2RlZmluZQkJWFRBQlMJCTB4MDAwMDBjMDAJLyogZXhwYW5kIHRhYnMgb24gb3V0cHV0ICovCisjZGVmaW5lCQlDUkRFTEFZCQkweDAwMDAzMDAwCS8qIFxyIGRlbGF5ICovCisjZGVmaW5lCQkJQ1IwCTB4MDAwMDAwMDAKKyNkZWZpbmUJCQlDUjEJMHgwMDAwMTAwMAkvKiB0biAzMDAgKi8KKyNkZWZpbmUJCQlDUjIJMHgwMDAwMjAwMAkvKiB0dHkgMzcgKi8KKyNkZWZpbmUJCQlDUjMJMHgwMDAwMzAwMAkvKiBjb25jZXB0IDEwMCAqLworI2RlZmluZQkJVlRERUxBWQkJMHgwMDAwNDAwMAkvKiB2ZXJ0aWNhbCB0YWIgZGVsYXkgKi8KKyNkZWZpbmUJCQlGRjAJMHgwMDAwMDAwMAorI2RlZmluZQkJCUZGMQkweDAwMDA0MDAwCS8qIHR0eSAzNyAqLworI2RlZmluZQkJQlNERUxBWQkJMHgwMDAwODAwMAkvKiBcYiBkZWxheSAqLworI2RlZmluZQkJCUJTMAkweDAwMDAwMDAwCisjZGVmaW5lCQkJQlMxCTB4MDAwMDgwMDAKKyNkZWZpbmUJCUFMTERFTEFZCShOTERFTEFZfFRCREVMQVl8Q1JERUxBWXxWVERFTEFZfEJTREVMQVkpCisjZGVmaW5lCQlDUlRCUwkJMHgwMDAxMDAwMAkvKiBkbyBiYWNrc3BhY2luZyBmb3IgY3J0ICovCisjZGVmaW5lCQlQUlRFUkEJCTB4MDAwMjAwMDAJLyogXCAuLi4gLyBlcmFzZSAqLworI2RlZmluZQkJQ1JURVJBCQkweDAwMDQwMDAwCS8qICIgXGIgIiB0byB3aXBlIG91dCBjaGFyICovCisjZGVmaW5lCQlUSUxERQkJMHgwMDA4MDAwMAkvKiBoYXplbHRpbmUgdGlsZGUga2x1ZGdlICovCisjZGVmaW5lCQlNRE1CVUYJCTB4MDAxMDAwMDAJLyogRFRSL0RDRCBoYXJkd2FyZSBmbG93IGNvbnRyb2wgKi8KKyNkZWZpbmUJCUxJVE9VVAkJMHgwMDIwMDAwMAkvKiBsaXRlcmFsIG91dHB1dCAqLworI2RlZmluZQkJVE9TVE9QCQkweDAwNDAwMDAwCS8qIHN0b3AgYmFja2dyb3VuZCBqb2JzIG9uIG91dHB1dCAqLworI2RlZmluZQkJRkxVU0hPCQkweDAwODAwMDAwCS8qIG91dHB1dCBiZWluZyBmbHVzaGVkIChzdGF0ZSkgKi8KKyNkZWZpbmUJCU5PSEFORwkJMHgwMTAwMDAwMAkvKiAobm8tb3ApIHdhcyBubyBTSUdIVVAgb24gY2FycmllciBkcm9wICovCisjZGVmaW5lCQlMMDAxMDAwCQkweDAyMDAwMDAwCisjZGVmaW5lCQlDUlRLSUwJCTB4MDQwMDAwMDAJLyoga2lsbCBsaW5lIHdpdGggIiBcYiAiICovCisjZGVmaW5lCQlQQVNTOAkJMHgwODAwMDAwMAorI2RlZmluZQkJQ1RMRUNICQkweDEwMDAwMDAwCS8qIGVjaG8gY29udHJvbCBjaGFycyBhcyBeWCAqLworI2RlZmluZQkJUEVORElOCQkweDIwMDAwMDAwCS8qIHJlLWVjaG8gaW5wdXQgYnVmZmVyIGF0IG5leHQgcmVhZCAqLworI2RlZmluZQkJREVDQ1RRCQkweDQwMDAwMDAwCS8qIG9ubHkgXlEgc3RhcnRzIGFmdGVyIF5TICovCisjZGVmaW5lCQlOT0ZMU0gJCTB4ODAwMDAwMDAJLyogZG9uJ3QgZmx1c2ggb3V0cHV0IG9uIHNpZ25hbCAqLworI2VuZGlmCisjZGVmaW5lCVRJT0NMQklTCV9JT1coJ3QnLCAxMjcsIGludCkJLyogYmlzIGxvY2FsIG1vZGUgYml0cyAqLworI2RlZmluZQlUSU9DTEJJQwlfSU9XKCd0JywgMTI2LCBpbnQpCS8qIGJpYyBsb2NhbCBtb2RlIGJpdHMgKi8KKyNkZWZpbmUJVElPQ0xTRVQJX0lPVygndCcsIDEyNSwgaW50KQkvKiBzZXQgZW50aXJlIGxvY2FsIG1vZGUgd29yZCAqLworI2RlZmluZQlUSU9DTEdFVAlfSU9SKCd0JywgMTI0LCBpbnQpCS8qIGdldCBsb2NhbCBtb2RlcyAqLworI2RlZmluZQkJTENSVEJTCQkoQ1JUQlM+PjE2KQorI2RlZmluZQkJTFBSVEVSQQkJKFBSVEVSQT4+MTYpCisjZGVmaW5lCQlMQ1JURVJBCQkoQ1JURVJBPj4xNikKKyNkZWZpbmUJCUxUSUxERQkJKFRJTERFPj4xNikKKyNkZWZpbmUJCUxNRE1CVUYJCShNRE1CVUY+PjE2KQorI2RlZmluZQkJTExJVE9VVAkJKExJVE9VVD4+MTYpCisjZGVmaW5lCQlMVE9TVE9QCQkoVE9TVE9QPj4xNikKKyNkZWZpbmUJCUxGTFVTSE8JCShGTFVTSE8+PjE2KQorI2RlZmluZQkJTE5PSEFORwkJKE5PSEFORz4+MTYpCisjZGVmaW5lCQlMQ1JUS0lMCQkoQ1JUS0lMPj4xNikKKyNkZWZpbmUJCUxQQVNTOAkJKFBBU1M4Pj4xNikKKyNkZWZpbmUJCUxDVExFQ0gJCShDVExFQ0g+PjE2KQorI2RlZmluZQkJTFBFTkRJTgkJKFBFTkRJTj4+MTYpCisjZGVmaW5lCQlMREVDQ1RRCQkoREVDQ1RRPj4xNikKKyNkZWZpbmUJCUxOT0ZMU0gJCShOT0ZMU0g+PjE2KQorI2RlZmluZQlUSU9DU0xUQwlfSU9XKCd0JywxMTcsc3RydWN0IGx0Y2hhcnMpLyogc2V0IGxvY2FsIHNwZWNpYWwgY2hhcnMqLworI2RlZmluZQlUSU9DR0xUQwlfSU9SKCd0JywxMTYsc3RydWN0IGx0Y2hhcnMpLyogZ2V0IGxvY2FsIHNwZWNpYWwgY2hhcnMqLworI2RlZmluZSBPVElPQ0NPTlMJX0lPKCd0JywgOTgpCS8qIGZvciBocDMwMCAtLSBzYW5zIGludCBhcmcgKi8KKyNkZWZpbmUJT1RUWURJU0MJMAorI2RlZmluZQlORVRMRElTQwkxCisjZGVmaW5lCU5UVFlESVNDCTIKKworI2VuZGlmIC8qICFfU1lTX0lPQ1RMX0NPTVBBVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9pcGMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvaXBjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzBhZTBiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvaXBjLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX0lQQ19ICisjZGVmaW5lIF9TWVNfSVBDX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2lwYy5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBrZXlfdCAgZnRvayhjb25zdCBjaGFyKiAgcGF0aCwgaW50ICBpZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX0lQQ19IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2tsb2cuaCBiL2xpYmMvaW5jbHVkZS9zeXMva2xvZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmI3ZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2tsb2cuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfS0xPR19IXworI2RlZmluZSBfU1lTX0tMT0dfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgS0xPR19DTE9TRSAgICAgIDAKKyNkZWZpbmUgS0xPR19PUEVOICAgICAgIDEKKyNkZWZpbmUgS0xPR19SRUFEICAgICAgIDIKKyNkZWZpbmUgS0xPR19SRUFEX0FMTCAgIDMKKyNkZWZpbmUgS0xPR19SRUFEX0NMRUFSIDQKKyNkZWZpbmUgS0xPR19DTEVBUiAgICAgIDUKKyNkZWZpbmUgS0xPR19ESVNBQkxFICAgIDYKKyNkZWZpbmUgS0xPR19FTkFCTEUgICAgIDcKKyNkZWZpbmUgS0xPR19TRVRMRVZFTCAgIDgKKyNkZWZpbmUgS0xPR19VTlJFQURTSVpFIDkKKyNkZWZpbmUgS0xPR19XUklURSAgICAgIDEwCisKK2V4dGVybiBpbnQga2xvZ2N0bChpbnQsIGNoYXIgKiwgaW50KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfS0xPR19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9saW1pdHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDFkMDJmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvbGltaXRzLmgKQEAgLTAsMCArMSwxNzkgQEAKKy8qICRPcGVuQlNEOiBsaW1pdHMuaCx2IDEuNiAyMDA1LzEyLzEzIDAwOjM1OjIzIG1pbGxlcnQgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgTWFyYyBFc3BpZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBPUEVOQlNEIFBST0pFQ1QgQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBPUEVOQlNECisgKiBQUk9KRUNUIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX0xJTUlUU19IXworI2RlZmluZSBfU1lTX0xJTUlUU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisKKy8qIENvbW1vbiBkZWZpbml0aW9ucyBmb3IgbGltaXRzLmguICovCisKKy8qCisgKiA8bWFjaGluZS9pbnRlcm5hbF90eXBlcy5oPiBpcyBtZWFudCB0byBkZXNjcmliZSBhIHNwZWNpZmljIGFyY2hpdGVjdHVyZSwKKyAqIGJ1dCB0byBiZSBhIHNhZmUgaW5jbHVkZSwgdGhhdCBkb2Vzbid0IGV2ZXIgZGVmaW5lIGFueXRoaW5nIHRoYXQgaXMKKyAqIHVzZXItdmlzaWJsZSAob25seSB0eXBlZGVmcyBhbmQgI2RlZmluZSBuYW1lcyB0aGF0IHN0YXlzIGluIHRoZSBfX3h4eAorICogbmFtZXNwYWNlKS4KKyAqCisgKiAgIF9fbWFjaGluZV9oYXNfdW5zaWduZWRfY2hhcnMJKGRlZmF1bHQgaXMgc2lnbmVkIGNoYXJzKQorICogICBfX0ZMVF94eHgvX19EQkxfeHh4CQlub24gc3RhbmRhcmQgdmFsdWVzIGZvciBmbG9hdGluZworICogICAJCQkJCXBvaW50cyBsaW1pdHMuCisgKi8KKyNpbmNsdWRlIDxtYWNoaW5lL2ludGVybmFsX3R5cGVzLmg+CisKKy8qIExlZ2FjeSAqLworI2luY2x1ZGUgPG1hY2hpbmUvbGltaXRzLmg+CisKKyNkZWZpbmUJQ0hBUl9CSVQJOAkJLyogbnVtYmVyIG9mIGJpdHMgaW4gYSBjaGFyICovCisKKyNkZWZpbmUJU0NIQVJfTUFYCTB4N2YJCS8qIG1heCB2YWx1ZSBmb3IgYSBzaWduZWQgY2hhciAqLworI2RlZmluZSBTQ0hBUl9NSU4JKC0weDdmLTEpCS8qIG1pbiB2YWx1ZSBmb3IgYSBzaWduZWQgY2hhciAqLworCisjZGVmaW5lCVVDSEFSX01BWAkweGZmVQkJLyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBjaGFyICovCisjaWZkZWYgX19tYWNoaW5lX2hhc191bnNpZ25lZF9jaGFycworIyBkZWZpbmUgQ0hBUl9NSU4JMAkJLyogbWluIHZhbHVlIGZvciBhIGNoYXIgKi8KKyMgZGVmaW5lIENIQVJfTUFYCTB4ZmYJCS8qIG1heCB2YWx1ZSBmb3IgYSBjaGFyICovCisjZWxzZQorIyBkZWZpbmUgQ0hBUl9NQVgJMHg3ZgorIyBkZWZpbmUgQ0hBUl9NSU4JKC0weDdmLTEpCisjZW5kaWYKKworI2RlZmluZQlVU0hSVF9NQVgJMHhmZmZmVQkJLyogbWF4IHZhbHVlIGZvciBhbiB1bnNpZ25lZCBzaG9ydCAqLworI2RlZmluZQlTSFJUX01BWAkweDdmZmYJCS8qIG1heCB2YWx1ZSBmb3IgYSBzaG9ydCAqLworI2RlZmluZSBTSFJUX01JTiAgICAgICAgKC0weDdmZmYtMSkgICAgIC8qIG1pbiB2YWx1ZSBmb3IgYSBzaG9ydCAqLworCisjZGVmaW5lCVVJTlRfTUFYCTB4ZmZmZmZmZmZVCS8qIG1heCB2YWx1ZSBmb3IgYW4gdW5zaWduZWQgaW50ICovCisjZGVmaW5lCUlOVF9NQVgJCTB4N2ZmZmZmZmYJLyogbWF4IHZhbHVlIGZvciBhbiBpbnQgKi8KKyNkZWZpbmUJSU5UX01JTgkJKC0weDdmZmZmZmZmLTEpCS8qIG1pbiB2YWx1ZSBmb3IgYW4gaW50ICovCisKKyNpZmRlZiBfX0xQNjRfXworIyBkZWZpbmUgVUxPTkdfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMCisJCQkJCS8qIG1heCB2YWx1ZSBmb3IgdW5zaWduZWQgbG9uZyAqLworIyBkZWZpbmUgTE9OR19NQVgJMHg3ZmZmZmZmZmZmZmZmZmZmTAorCQkJCQkvKiBtYXggdmFsdWUgZm9yIGEgc2lnbmVkIGxvbmcgKi8KKyMgZGVmaW5lIExPTkdfTUlOCSgtMHg3ZmZmZmZmZmZmZmZmZmZmTC0xKQorCQkJCQkvKiBtaW4gdmFsdWUgZm9yIGEgc2lnbmVkIGxvbmcgKi8KKyNlbHNlCisjIGRlZmluZSBVTE9OR19NQVgJMHhmZmZmZmZmZlVMCS8qIG1heCB2YWx1ZSBmb3IgYW4gdW5zaWduZWQgbG9uZyAqLworIyBkZWZpbmUgTE9OR19NQVgJMHg3ZmZmZmZmZkwJLyogbWF4IHZhbHVlIGZvciBhIGxvbmcgKi8KKyMgZGVmaW5lIExPTkdfTUlOCSgtMHg3ZmZmZmZmZkwtMSkvKiBtaW4gdmFsdWUgZm9yIGEgbG9uZyAqLworI2VuZGlmCisKKyNpZiBfX0JTRF9WSVNJQkxFIHx8IF9fSVNPX0NfVklTSUJMRSA+PSAxOTk5CisjIGRlZmluZSBVTExPTkdfTUFYCTB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorCQkJCQkvKiBtYXggdmFsdWUgZm9yIHVuc2lnbmVkIGxvbmcgbG9uZyAqLworIyBkZWZpbmUgTExPTkdfTUFYCTB4N2ZmZmZmZmZmZmZmZmZmZkxMCisJCQkJCS8qIG1heCB2YWx1ZSBmb3IgYSBzaWduZWQgbG9uZyBsb25nICovCisjIGRlZmluZSBMTE9OR19NSU4JKC0weDdmZmZmZmZmZmZmZmZmZmZMTC0xKQorCQkJCQkvKiBtaW4gdmFsdWUgZm9yIGEgc2lnbmVkIGxvbmcgbG9uZyAqLworI2VuZGlmCisKKyNpZiBfX0JTRF9WSVNJQkxFCisjIGRlZmluZSBVSURfTUFYCVVJTlRfTUFYCS8qIG1heCB2YWx1ZSBmb3IgYSB1aWRfdCAqLworIyBkZWZpbmUgR0lEX01BWAlVSU5UX01BWAkvKiBtYXggdmFsdWUgZm9yIGEgZ2lkX3QgKi8KKyNlbmRpZgorCisKKyNpZmRlZiBfX0xQNjRfXworIyBkZWZpbmUgTE9OR19CSVQJNjQKKyNlbHNlCisjIGRlZmluZSBMT05HX0JJVAkzMgorI2VuZGlmCisKKy8qIGZsb2F0LmggZGVmaW5lcyB0aGVzZSBhcyB3ZWxsICovCisjIGlmICFkZWZpbmVkKERCTF9ESUcpCisjICBpZiBkZWZpbmVkKF9fREJMX0RJRykKKyMgICBkZWZpbmUgREJMX0RJRwlfX0RCTF9ESUcKKyMgICBkZWZpbmUgREJMX01BWAlfX0RCTF9NQVgKKyMgICBkZWZpbmUgREJMX01JTglfX0RCTF9NSU4KKworIyAgIGRlZmluZSBGTFRfRElHCV9fRkxUX0RJRworIyAgIGRlZmluZSBGTFRfTUFYCV9fRkxUX01BWAorIyAgIGRlZmluZSBGTFRfTUlOCV9fRkxUX01JTgorIyAgZWxzZQorIyAgIGRlZmluZSBEQkxfRElHCTE1CisjICAgZGVmaW5lIERCTF9NQVgJMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgKKyMgICBkZWZpbmUgREJMX01JTgkyLjIyNTA3Mzg1ODUwNzIwMTRFLTMwOAorCisjICAgZGVmaW5lIEZMVF9ESUcJNgorIyAgIGRlZmluZSBGTFRfTUFYCTMuNDAyODIzNDdFKzM4RgorIyAgIGRlZmluZSBGTFRfTUlOCTEuMTc1NDk0MzVFLTM4RgorIyAgZW5kaWYKKyMgZW5kaWYKKworLyogQmlvbmljOiB0aGUgZm9sbG93aW5nIGhhcyBiZWVuIG9wdGltaXplZCBvdXQgZnJvbSBvdXIgcHJvY2Vzc2VkIGtlcm5lbCBoZWFkZXJzICovCisKKyNkZWZpbmUgIENISUxEX01BWCAgIDk5OQorI2RlZmluZSAgT1BFTl9NQVggICAgMjU2CisKKy8qIEJpb25pYy1zcGVjaWZpYyBkZWZpbml0aW9ucyAqLworCisjZGVmaW5lICBfUE9TSVhfVkVSU0lPTiAgICAgICAgICAgICAyMDAxMTJMICAgLyogUG9zaXggQyBsYW5ndWFnZSBiaW5kaW5ncyB2ZXJzaW9uICovCisjZGVmaW5lICBfUE9TSVgyX1ZFUlNJT04gICAgICAgICAgICAtMSAgICAgICAgLyogd2UgZG9uJ3Qgc3VwcG9ydCBQb3NpeCBjb21tYW5kLWxpbmUgdG9vbHMgKi8KKyNkZWZpbmUgIF9QT1NJWDJfQ19WRVJTSU9OICAgICAgICAgIF9QT1NJWF9WRVJTSU9OCisjZGVmaW5lICBfWE9QRU5fVkVSU0lPTiAgICAgICAgICAgICA1MDAgICAgICAgLyogYnkgUG9zaXggZGVmaW5pdGlvbiAqLworI2RlZmluZSAgX1hPUEVOX1hDVV9WRVJTSU9OICAgICAgICAgLTEgICAgICAgIC8qIHdlIGRvbid0IHN1cHBvcnQgY29tbWFuZC1saW5lIHV0aWxpdGllcyAqLworCisvKiB0ZWxsIHdoYXQgd2UgaW1wbGVtZW50IGxlZ2FjeSBzdHVmZiB3aGVuIGFwcHJvcHJpYXRlICovCisjaWYgX1BPU0lYX1ZFUlNJT04gPiAwCisjZGVmaW5lICBfWE9QRU5fWFBHMiAgICAgICAgICAgICAgICAxCisjZGVmaW5lICBfWE9QRU5fWFBHMyAgICAgICAgICAgICAgICAxCisjZGVmaW5lICBfWE9QRU5fWFBHNCAgICAgICAgICAgICAgICAxCisjZGVmaW5lICBfWE9QRU5fVU5JWCAgICAgICAgICAgICAgICAxCisjZW5kaWYKKworI2RlZmluZSAgX1hPUEVOX0VOSF9JMThOICAgICAgICAgIC0xICAvKiB3ZSBkb24ndCBzdXBwb3J0IGludGVybmF0aW9uYWxpemF0aW9uIGluIHRoZSBDIGxpYnJhcnkgKi8KKyNkZWZpbmUgIF9YT1BFTl9DUllQVCAgICAgICAgICAgICAtMSAgLyogZG9uJ3Qgc3VwcG9ydCBYL09wZW4gRW5jcnlwdGlvbiAqLworI2RlZmluZSAgX1hPUEVOX0xFR0FDWSAgICAgICAgICAgIC0xICAvKiBkb24ndCBjbGFpbSB3ZSBzdXBwb3J0IHRoZXNlLCB3ZSBoYXZlIHNvbWUgb2YgdGhlbSBidXQgbm90IGFsbCAqLworI2RlZmluZSAgX1hPUEVOX1JFQUxUSU1FICAgICAgICAgIC0xIC8qIHdlIGRvbid0IHN1cHBvcnQgYWxsIHRoZXNlIGZ1bmN0aW9ucyAqLworI2RlZmluZSAgX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgIC0xICAvKiBzYW1lIGhlcmUgKi8KKworI2RlZmluZSAgX1BPU0lYX1JFQUxUSU1FX1NJR05BTFMgICAgLTEgIC8qIGZvciBub3csIHRoaXMgaXMgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSAgX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkcgIDEgIC8qIHByaW9yaXR5IHNjaGVkdWxpbmcgaXMgYSBMaW51eCBmZWF0dXJlICovCisjZGVmaW5lICBfUE9TSVhfVElNRVJTICAgICAgICAgICAgICAgMSAgLyogUG9zaXggdGltZXJzIGFyZSBzdXBwb3J0ZWQgKi8KKyN1bmRlZiAgIF9QT1NJWF9BU1lOQ0hST05PVVNfSU8gICAgICAgICAvKiBhaW9fIGZ1bmN0aW9ucyBhcmUgbm90IHN1cHBvcnRlZCAqLworI2RlZmluZSAgX1BPU0lYX1NZTkNIUk9OSVpFRF9JTyAgICAgIDEgIC8qIHN5bmNocm9uaXplZCBpL28gc3VwcG9ydGVkICovCisjZGVmaW5lICBfUE9TSVhfRlNZTkMgICAgICAgICAgICAgICAgMSAgLyogZmRhdGFzeW5jKCkgc3VwcG9ydGVkICovCisjZGVmaW5lICBfUE9TSVhfTUFQUEVEX0ZJTEVTICAgICAgICAgMSAgLyogbW1hcC1lZCBmaWxlcyBzdXBwb3J0ZWQgKi8KKworLyogWFhYOiBUT0RPOiBjb21wbGV0ZSBhbmQgY2hlY2sgbGlzdCBoZXJlICovCisKKworI2RlZmluZSAgX1BPU0lYX1RIUkVBRFMgICAgICAgICAgICAgMSAgICAvKiB3ZSBzdXBwb3J0IHRocmVhZHMgKi8KKyNkZWZpbmUgIF9QT1NJWF9USFJFQURfU1RBQ0tBRERSICAgIDEgICAgLyogd2Ugc3VwcG9ydCB0aHJlYWQgc3RhY2sgYWRkcmVzcyAqLworI2RlZmluZSAgX1BPU0lYX1RIUkVBRF9TVEFDS1NJWkUgICAgMSAgICAvKiB3ZSBzdXBwb3J0IHRocmVhZCBzdGFjayBzaXplICovCisjZGVmaW5lICBfUE9TSVhfVEhSRUFEX1BSSU9fSU5IRVJJVCAyMDAxMTJMICAgLyogbGludXggZmVhdHVyZSAqLworI2RlZmluZSAgX1BPU0lYX1RIUkVBRF9QUklPX1BST1RFQ1QgMjAwMTEyTCAgIC8qIGxpbnV4IGZlYXR1cmUgKi8KKworI3VuZGVmICAgX1BPU0lYX1BST0NFU1NfU0hBUkVEICAgICAgICAgICAvKiB3ZSBkb24ndCBzdXBwb3J0IHByb2Nlc3Mtc2hhcmVkIHN5bmNocm9uaXphdGlvbiAqLworI3VuZGVmICAgX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyAgICAvKiBtb3N0IGZ1bmN0aW9ucyBhcmUsIGJ1dCBub3QgZXZlcnl0aGluZyB5ZXQgKi8KKyNkZWZpbmUgIF9QT1NJWF9DSE9XTl9SRVNUUklDVEVEICAgIDEgICAgLyogeWVzLCBjaG93biByZXF1aXJlcyBhcHByb3ByaWF0ZSBwcml2aWxlZGdlcyAqLworI2RlZmluZSAgX1BPU0lYX05PX1RSVU5DICAgICAgICAgICAgMSAgICAvKiB2ZXJ5IGxvbmcgcGF0aG5hbWVzIGdlbmVyYXRlIGFuIGVycm9yICovCisjZGVmaW5lICBfUE9TSVhfU0FWRURfSURTICAgICAgICAgICAxICAgIC8qIHNhdmVkIHVzZXIgaWRzIGlzIGEgTGludXggZmVhdHVyZSAqLworI2RlZmluZSAgX1BPU0lYX0pPQl9DT05UUk9MICAgICAgICAgMSAgICAvKiBqb2IgY29udHJvbCBpcyBhIExpbnV4IGZlYXR1cmUgKi8KKworCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oIGIvbGliYy9pbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2OTEyYWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXN5c2NhbGxzLmgKQEAgLTAsMCArMSwyMzAgQEAKKy8qIGF1dG8tZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5LCBkbyBub3QgdG91Y2ggKi8KKyNpZm5kZWYgX0JJT05JQ19MSU5VWF9TWVNDQUxMU19IXworCisjaWYgIWRlZmluZWQgX19BU01fQVJNX1VOSVNURF9IICYmICFkZWZpbmVkIF9fQVNNX0kzODZfVU5JU1REX0gKKyNpZiBkZWZpbmVkIF9fYXJtX18gJiYgIWRlZmluZWQgX19BUk1fRUFCSV9fICYmICFkZWZpbmVkIF9fdGh1bWJfXworICAjICBkZWZpbmUgX19OUl9TWVNDQUxMX0JBU0UgIDB4OTAwMDAwCisgICNlbHNlCisgICMgIGRlZmluZSAgX19OUl9TWVNDQUxMX0JBU0UgIDAKKyAgI2VuZGlmCisKKyNkZWZpbmUgX19OUl9leGl0ICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEpCisjZGVmaW5lIF9fTlJfZm9yayAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyKQorI2RlZmluZSBfX05SX2Nsb25lICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTIwKQorI2RlZmluZSBfX05SX2V4ZWN2ZSAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTEpCisjZGVmaW5lIF9fTlJfc2V0dWlkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTMpCisjZGVmaW5lIF9fTlJfZ2V0dWlkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTkpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDApCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZDMyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDEpCisjZGVmaW5lIF9fTlJfZ2V0ZWdpZDMyICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDIpCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDkpCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTEpCisjZGVmaW5lIF9fTlJfZ2V0dGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjQpCisjZGVmaW5lIF9fTlJfZ2V0Z3JvdXBzMzIgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDUpCisjZGVmaW5lIF9fTlJfZ2V0cGdpZCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMzIpCisjZGVmaW5lIF9fTlJfZ2V0cHBpZCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2NCkKKyNkZWZpbmUgX19OUl9zZXRzaWQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDY2KQorI2RlZmluZSBfX05SX3NldGdpZDMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjE0KQorI2RlZmluZSBfX05SX3NldHJldWlkMzIgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjAzKQorI2RlZmluZSBfX05SX3NldHJlc3VpZDMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA4KQorI2RlZmluZSBfX05SX3NldHJlc2dpZDMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjEwKQorI2RlZmluZSBfX05SX2JyayAgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDUpCisjZGVmaW5lIF9fTlJfcHRyYWNlICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNikKKyNkZWZpbmUgX19OUl9nZXRwcmlvcml0eSAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDk2KQorI2RlZmluZSBfX05SX3NldHByaW9yaXR5ICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTcpCisjZGVmaW5lIF9fTlJfc2V0cmxpbWl0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3NSkKKyNkZWZpbmUgX19OUl91Z2V0cmxpbWl0ICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5MSkKKyNkZWZpbmUgX19OUl9nZXRydXNhZ2UgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDc3KQorI2RlZmluZSBfX05SX3NldGdyb3VwczMyICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA2KQorI2RlZmluZSBfX05SX3NldHBnaWQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNTcpCisjZGVmaW5lIF9fTlJfdmZvcmsgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTApCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMDQpCisjZGVmaW5lIF9fTlJfY2hyb290ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2MSkKKyNkZWZpbmUgX19OUl9wcmN0bCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE3MikKKyNkZWZpbmUgX19OUl9jYXBnZXQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4NCkKKyNkZWZpbmUgX19OUl9jYXBzZXQgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE4NSkKKyNkZWZpbmUgX19OUl9hY2N0ICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDUxKQorI2RlZmluZSBfX05SX3JlYWQgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMykKKyNkZWZpbmUgX19OUl93cml0ZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQpCisjZGVmaW5lIF9fTlJfb3BlbiAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA1KQorI2RlZmluZSBfX05SX2Nsb3NlICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNikKKyNkZWZpbmUgX19OUl9sc2VlayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE5KQorI2RlZmluZSBfX05SX19sbHNlZWsgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQwKQorI2RlZmluZSBfX05SX2dldHBpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjApCisjZGVmaW5lIF9fTlJfbW1hcDIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTIpCisjZGVmaW5lIF9fTlJfbXVubWFwICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5MSkKKyNkZWZpbmUgX19OUl9tcmVtYXAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2MykKKyNkZWZpbmUgX19OUl9tc3luYyAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0NCkKKyNkZWZpbmUgX19OUl9tcHJvdGVjdCAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyNSkKKyNkZWZpbmUgX19OUl9tbG9jayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1MCkKKyNkZWZpbmUgX19OUl9tdW5sb2NrICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1MSkKKyNkZWZpbmUgX19OUl9pb2N0bCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDU0KQorI2RlZmluZSBfX05SX3JlYWR2ICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQ1KQorI2RlZmluZSBfX05SX3dyaXRldiAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTQ2KQorI2RlZmluZSBfX05SX2ZjbnRsICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNTUpCisjZGVmaW5lIF9fTlJfZmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNDMpCisjZGVmaW5lIF9fTlJfZmNobW9kICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5NCkKKyNkZWZpbmUgX19OUl9kdXAgICAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQxKQorI2RlZmluZSBfX05SX3BpcGUgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNDIpCisjZGVmaW5lIF9fTlJfZHVwMiAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA2MykKKyNkZWZpbmUgX19OUl9fbmV3c2VsZWN0ICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0MikKKyNkZWZpbmUgX19OUl9mdHJ1bmNhdGUgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDkzKQorI2RlZmluZSBfX05SX2ZzeW5jICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTE4KQorI2RlZmluZSBfX05SX2ZjaG93bjMyICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjA3KQorI2RlZmluZSBfX05SX3N5bmMgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzYpCisjZGVmaW5lIF9fTlJfZmNudGw2NCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjEpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGUgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODcpCisjZGVmaW5lIF9fTlJfbGluayAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5KQorI2RlZmluZSBfX05SX3VubGluayAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTApCisjZGVmaW5lIF9fTlJfY2hkaXIgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMikKKyNkZWZpbmUgX19OUl9ta25vZCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE0KQorI2RlZmluZSBfX05SX2NobW9kICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTUpCisjZGVmaW5lIF9fTlJfY2hvd24zMiAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTIpCisjZGVmaW5lIF9fTlJfbGNob3duMzIgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxOTgpCisjZGVmaW5lIF9fTlJfbW91bnQgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMSkKKyNkZWZpbmUgX19OUl91bW91bnQyICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDUyKQorI2RlZmluZSBfX05SX2ZzdGF0NjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk3KQorI2RlZmluZSBfX05SX3N0YXQ2NCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk1KQorI2RlZmluZSBfX05SX2xzdGF0NjQgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTk2KQorI2RlZmluZSBfX05SX21rZGlyICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzkpCisjZGVmaW5lIF9fTlJfcmVhZGxpbmsgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA4NSkKKyNkZWZpbmUgX19OUl9ybWRpciAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDQwKQorI2RlZmluZSBfX05SX3JlbmFtZSAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzgpCisjZGVmaW5lIF9fTlJfZ2V0Y3dkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxODMpCisjZGVmaW5lIF9fTlJfYWNjZXNzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMykKKyNkZWZpbmUgX19OUl9zeW1saW5rICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDgzKQorI2RlZmluZSBfX05SX2ZjaGRpciAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTMzKQorI2RlZmluZSBfX05SX3RydW5jYXRlICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgOTIpCisjZGVmaW5lIF9fTlJfcGF1c2UgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOSkKKyNkZWZpbmUgX19OUl9nZXR0aW1lb2ZkYXkgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDc4KQorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzkpCisjZGVmaW5lIF9fTlJfdGltZXMgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA0MykKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2MikKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEwNCkKKyNkZWZpbmUgX19OUl9zaWdhY3Rpb24gICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDY3KQorI2RlZmluZSBfX05SX3NpZ3Byb2NtYXNrICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMTI2KQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgNzIpCisjZGVmaW5lIF9fTlJfcnRfc2lnYWN0aW9uICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzQpCisjZGVmaW5lIF9fTlJfcnRfc2lncHJvY21hc2sgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzUpCisjZGVmaW5lIF9fTlJfcnRfc2lndGltZWR3YWl0ICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNzcpCisjZGVmaW5lIF9fTlJfc2lncGVuZGluZyAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3MykKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRzY2hlZHVsZXIgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1NikKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRzY2hlZHVsZXIgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1NykKKyNkZWZpbmUgX19OUl9zY2hlZF95aWVsZCAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1OCkKKyNkZWZpbmUgX19OUl9zY2hlZF9zZXRwYXJhbSAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1NCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1NSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWF4ICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE1OSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRfcHJpb3JpdHlfbWluICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDE2MSkKKyNkZWZpbmUgX19OUl91bmFtZSAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDEyMikKKyNkZWZpbmUgX19OUl93YWl0NCAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDExNCkKKyNkZWZpbmUgX19OUl91bWFzayAgICAgICAgICAgICAgICAgICAgICAgIChfX05SX1NZU0NBTExfQkFTRSArIDYwKQorI2RlZmluZSBfX05SX3JlYm9vdCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgODgpCisjZGVmaW5lIF9fTlJfc3lzbG9nICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMDMpCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMjgpCisjZGVmaW5lIF9fTlJfZGVsZXRlX21vZHVsZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMjkpCisjZGVmaW5lIF9fTlJfc3lzbG9nICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxMDMpCisjZGVmaW5lIF9fTlJfZnV0ZXggICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDApCisjZGVmaW5lIF9fTlJfcG9sbCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAxNjgpCisKKyNpZmRlZiBfX2FybV9fCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDgpCisjZGVmaW5lIF9fTlJfd2FpdGlkICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODApCisjZGVmaW5lIF9fTlJfb3BlbmF0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjIpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjApCisjZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTkpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTcpCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjcpCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjcpCisjZGVmaW5lIF9fTlJfbWtkaXJhdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjMpCisjZGVmaW5lIF9fTlJfZmNob3duYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjUpCisjZGVmaW5lIF9fTlJfZmNobW9kYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMzMpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjkpCisjZGVmaW5lIF9fTlJfdW5saW5rYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMjgpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjYpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjMpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjIpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjQpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjUpCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTcpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTgpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTkpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjApCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjEpCisjZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjkpCisjZGVmaW5lIF9fTlJfc29ja2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODEpCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODgpCisjZGVmaW5lIF9fTlJfYmluZCAgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODIpCisjZGVmaW5lIF9fTlJfY29ubmVjdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODMpCisjZGVmaW5lIF9fTlJfbGlzdGVuICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODQpCisjZGVmaW5lIF9fTlJfYWNjZXB0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODUpCisjZGVmaW5lIF9fTlJfZ2V0c29ja25hbWUgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODYpCisjZGVmaW5lIF9fTlJfZ2V0cGVlcm5hbWUgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyODcpCisjZGVmaW5lIF9fTlJfc2VuZHRvICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTApCisjZGVmaW5lIF9fTlJfcmVjdmZyb20gICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTIpCisjZGVmaW5lIF9fTlJfc2h1dGRvd24gICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTMpCisjZGVmaW5lIF9fTlJfc2V0c29ja29wdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTQpCisjZGVmaW5lIF9fTlJfZ2V0c29ja29wdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTUpCisjZGVmaW5lIF9fTlJfc2VuZG1zZyAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTYpCisjZGVmaW5lIF9fTlJfcmVjdm1zZyAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTcpCisjZGVmaW5lIF9fTlJfc2VtY3RsICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDApCisjZGVmaW5lIF9fTlJfc2VtZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTkpCisjZGVmaW5lIF9fTlJfc2Vtb3AgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTgpCisjZGVmaW5lIF9fTlJfc2htYXQgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDUpCisjZGVmaW5lIF9fTlJfc2htY3RsICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDgpCisjZGVmaW5lIF9fTlJfc2htZHQgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDYpCisjZGVmaW5lIF9fTlJfc2htZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDcpCisjZGVmaW5lIF9fTlJfbXNnY3RsICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDQpCisjZGVmaW5lIF9fTlJfbXNnZ2V0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDMpCisjZGVmaW5lIF9fTlJfbXNncmN2ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDIpCisjZGVmaW5lIF9fTlJfbXNnc25kICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDEpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTApCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTEpCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTIpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTYpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTcpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMTgpCisjZGVmaW5lIF9fTlJfQVJNX3NldF90bHMgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5ODMwNDUpCisjZGVmaW5lIF9fTlJfQVJNX2NhY2hlZmx1c2ggICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA5ODMwNDIpCisjZW5kaWYKKworI2lmZGVmIF9faTM4Nl9fCisjZGVmaW5lIF9fTlJfZXhpdF9ncm91cCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTIpCisjZGVmaW5lIF9fTlJfd2FpdHBpZCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyA3KQorI2RlZmluZSBfX05SX3dhaXRpZCAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMjg0KQorI2RlZmluZSBfX05SX2tpbGwgICAgICAgICAgICAgICAgICAgICAgICAgKF9fTlJfU1lTQ0FMTF9CQVNFICsgMzcpCisjZGVmaW5lIF9fTlJfdGtpbGwgICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMzgpCisjZGVmaW5lIF9fTlJfc2V0X3RocmVhZF9hcmVhICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNDMpCisjZGVmaW5lIF9fTlJfb3BlbmF0ICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTUpCisjZGVmaW5lIF9fTlJfbWFkdmlzZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTkpCisjZGVmaW5lIF9fTlJfbWluY29yZSAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMTgpCisjZGVmaW5lIF9fTlJfZ2V0ZGVudHM2NCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyMjApCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjkpCisjZGVmaW5lIF9fTlJfZnN0YXRhdDY0ICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDApCisjZGVmaW5lIF9fTlJfbWtkaXJhdCAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTYpCisjZGVmaW5lIF9fTlJfZmNob3duYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTgpCisjZGVmaW5lIF9fTlJfZmNobW9kYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDYpCisjZGVmaW5lIF9fTlJfcmVuYW1lYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDIpCisjZGVmaW5lIF9fTlJfdW5saW5rYXQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAzMDEpCisjZGVmaW5lIF9fTlJfc3RhdGZzNjQgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjgpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjUpCisjZGVmaW5lIF9fTlJfY2xvY2tfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjQpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0cmVzICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjYpCisjZGVmaW5lIF9fTlJfY2xvY2tfbmFub3NsZWVwICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjcpCisjZGVmaW5lIF9fTlJfdGltZXJfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTkpCisjZGVmaW5lIF9fTlJfdGltZXJfc2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjApCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjEpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0b3ZlcnJ1biAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjIpCisjZGVmaW5lIF9fTlJfdGltZXJfZGVsZXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNjMpCisjZGVmaW5lIF9fTlJfdXRpbWVzICAgICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNzEpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3JlYXRlICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTQpCisjZGVmaW5lIF9fTlJfZXBvbGxfY3RsICAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTUpCisjZGVmaW5lIF9fTlJfZXBvbGxfd2FpdCAgICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyNTYpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0ICAgICAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTEpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTIpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9ybV93YXRjaCAgICAgICAgICAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAyOTMpCisjZW5kaWYKKworI2VuZGlmCisKKyNlbmRpZiAvKiBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL2xpbnV4LXVuaXN0ZC5oIGIvbGliYy9pbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2ZmYTNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaApAQCAtMCwwICsxLDE5NyBAQAorLyogYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaCAqLworI2lmbmRlZiBfQklPTklDX0xJTlVYX1VOSVNURF9IXworCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKK3ZvaWQgICAgICAgICAgICAgX2V4aXQgKGludCk7Cit2b2lkICAgICAgICAgICAgIF9leGl0X3RocmVhZCAoaW50KTsKK2ludCAgICAgICAgICAgICAgZm9yayAodm9pZCk7CitwaWRfdCAgICAgICAgICAgIF93YWl0cGlkIChwaWRfdCwgaW50KiwgaW50LCBzdHJ1Y3QgcnVzYWdlKik7CitpbnQgICAgICAgICAgICAgIHdhaXRpZCAoaW50LCBwaWRfdCwgc3RydWN0IHNpZ2luZm9fdCosIGludCx2b2lkKik7CitwaWRfdCAgICAgICAgICAgIF9fY2xvbmUgKGludCAoKmZuKSh2b2lkKiksIHZvaWQgKmNoaWxkX3N0YWNrLCBpbnQgZmxhZ3MsIHZvaWQgKmFyZyk7CitpbnQgICAgICAgICAgICAgIGV4ZWN2ZSAoY29uc3QgY2hhciosIGNoYXIqIGNvbnN0KiwgY2hhciogY29uc3QqKTsKK2ludCAgICAgICAgICAgICAgc2V0dWlkICh1aWRfdCk7Cit1aWRfdCAgICAgICAgICAgIGdldHVpZCAodm9pZCk7CitnaWRfdCAgICAgICAgICAgIGdldGdpZCAodm9pZCk7Cit1aWRfdCAgICAgICAgICAgIGdldGV1aWQgKHZvaWQpOworZ2lkX3QgICAgICAgICAgICBnZXRlZ2lkICh2b2lkKTsKK3VpZF90ICAgICAgICAgICAgZ2V0cmVzdWlkICh2b2lkKTsKK2dpZF90ICAgICAgICAgICAgZ2V0cmVzZ2lkICh2b2lkKTsKK3BpZF90ICAgICAgICAgICAgZ2V0dGlkICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgZ2V0Z3JvdXBzIChpbnQsIGdpZF90ICopOworcGlkX3QgICAgICAgICAgICBnZXRwZ2lkIChwaWRfdCk7CitwaWRfdCAgICAgICAgICAgIGdldHBwaWQgKHZvaWQpOworcGlkX3QgICAgICAgICAgICBzZXRzaWQgKHZvaWQpOworaW50ICAgICAgICAgICAgICBzZXRnaWQgKGdpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0ZXVpZCAodWlkX3QpOworaW50ICAgICAgICAgICAgICBzZXRyZXVpZCAodWlkX3QsIHVpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0cmVzdWlkICh1aWRfdCwgdWlkX3QsIHVpZF90KTsKK2ludCAgICAgICAgICAgICAgc2V0cmVzZ2lkIChnaWRfdCwgZ2lkX3QsIGdpZF90KTsKK3ZvaWQqICAgICAgICAgICAgX19icmsgKHZvaWQqKTsKK2ludCAgICAgICAgICAgICAga2lsbCAocGlkX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIHRraWxsIChwaWRfdCB0aWQsIGludCBzaWcpOworaW50ICAgICAgICAgICAgICBfX3B0cmFjZSAoaW50IHJlcXVlc3QsIGludCBwaWQsIHZvaWQqIGFkZHIsIHZvaWQqIGRhdGEpOworaW50ICAgICAgICAgICAgICBfX3NldF90aHJlYWRfYXJlYSAodm9pZCogIHVzZXJfZGVzYyk7CitpbnQgICAgICAgICAgICAgIF9fZ2V0cHJpb3JpdHkgKGludCwgaW50KTsKK2ludCAgICAgICAgICAgICAgc2V0cHJpb3JpdHkgKGludCwgaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzZXRybGltaXQgKGludCByZXNvdXJjZSwgY29uc3Qgc3RydWN0IHJsaW1pdCAqcmxwKTsKK2ludCAgICAgICAgICAgICAgZ2V0cmxpbWl0IChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCk7CitpbnQgICAgICAgICAgICAgIGdldHJ1c2FnZSAoaW50IHdobywgc3RydWN0IHJ1c2FnZSogIHJfdXNhZ2UpOworaW50ICAgICAgICAgICAgICBzZXRncm91cHMgKGludCwgY29uc3QgZ2lkX3QgKik7CitwaWRfdCAgICAgICAgICAgIGdldHBncnAgKHZvaWQpOworaW50ICAgICAgICAgICAgICBzZXRwZ2lkIChwaWRfdCwgcGlkX3QpOworcGlkX3QgICAgICAgICAgICB2Zm9yayAodm9pZCk7CitpbnQgICAgICAgICAgICAgIHNldHJlZ2lkIChnaWRfdCwgZ2lkX3QpOworaW50ICAgICAgICAgICAgICBjaHJvb3QgKGNvbnN0IGNoYXIgKik7CitpbnQgICAgICAgICAgICAgIHByY3RsIChpbnQgb3B0aW9uLCB1bnNpZ25lZCBpbnQgYXJnMiwgdW5zaWduZWQgaW50IGFyZzMsIHVuc2lnbmVkIGludCBhcmc0LCB1bnNpZ25lZCBpbnQgYXJnNSk7CitpbnQgICAgICAgICAgICAgIGNhcGdldCAoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CitpbnQgICAgICAgICAgICAgIGNhcHNldCAoY2FwX3VzZXJfaGVhZGVyX3QgaGVhZGVyLCBjb25zdCBjYXBfdXNlcl9kYXRhX3QgZGF0YSk7CitpbnQgICAgICAgICAgICAgIGFjY3QgKGNvbnN0IGNoYXIqICBmaWxlcGF0aCk7Citzc2l6ZV90ICAgICAgICAgIHJlYWQgKGludCwgdm9pZCosIHNpemVfdCk7Citzc2l6ZV90ICAgICAgICAgIHdyaXRlIChpbnQsIGNvbnN0IHZvaWQqLCBzaXplX3QpOworaW50ICAgICAgICAgICAgICBfX29wZW4gKGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCk7CitpbnQgICAgICAgICAgICAgIF9fb3BlbmF0IChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIG1vZGVfdCk7CitpbnQgICAgICAgICAgICAgIGNsb3NlIChpbnQpOworaW50ICAgICAgICAgICAgICBjcmVhdCAoY29uc3QgY2hhciosIG1vZGVfdCk7CitvZmZfdCAgICAgICAgICAgIGxzZWVrIChpbnQsIG9mZl90LCBpbnQpOworaW50ICAgICAgICAgICAgICBfX2xsc2VlayAoaW50LCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBsb2ZmX3QqLCBpbnQpOworcGlkX3QgICAgICAgICAgICBnZXRwaWQgKHZvaWQpOwordm9pZCAqICAgICAgICAgICBtbWFwICh2b2lkICosIHNpemVfdCwgaW50LCBpbnQsIGludCwgbG9uZyk7Cit2b2lkICogICAgICAgICAgIF9fbW1hcDIgKHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIGxvbmcpOworaW50ICAgICAgICAgICAgICBtdW5tYXAgKHZvaWQgKiwgc2l6ZV90KTsKK3ZvaWQgKiAgICAgICAgICAgbXJlbWFwICh2b2lkICosIHNpemVfdCwgc2l6ZV90LCB1bnNpZ25lZCBsb25nKTsKK2ludCAgICAgICAgICAgICAgbXN5bmMgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworaW50ICAgICAgICAgICAgICBtcHJvdGVjdCAoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitpbnQgICAgICAgICAgICAgIG1hZHZpc2UgKGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworaW50ICAgICAgICAgICAgICBtbG9jayAoY29uc3Qgdm9pZCAqYWRkciwgc2l6ZV90IGxlbik7CitpbnQgICAgICAgICAgICAgIG11bmxvY2sgKGNvbnN0IHZvaWQgKmFkZHIsIHNpemVfdCBsZW4pOworaW50ICAgICAgICAgICAgICBtaW5jb3JlICh2b2lkKiAgc3RhcnQsIHNpemVfdCAgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyKiAgdmVjKTsKK2ludCAgICAgICAgICAgICAgX19pb2N0bCAoaW50LCBpbnQsIHZvaWQgKik7CitpbnQgICAgICAgICAgICAgIHJlYWR2IChpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOworaW50ICAgICAgICAgICAgICB3cml0ZXYgKGludCwgY29uc3Qgc3RydWN0IGlvdmVjICosIGludCk7CitpbnQgICAgICAgICAgICAgIF9fZmNudGwgKGludCwgaW50LCB2b2lkKik7CitpbnQgICAgICAgICAgICAgIGZsb2NrIChpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIGZjaG1vZCAoaW50LCBtb2RlX3QpOworaW50ICAgICAgICAgICAgICBkdXAgKGludCk7CitpbnQgICAgICAgICAgICAgIHBpcGUgKGludCAqKTsKK2ludCAgICAgICAgICAgICAgZHVwMiAoaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzZWxlY3QgKGludCwgc3RydWN0IGZkX3NldCAqLCBzdHJ1Y3QgZmRfc2V0ICosIHN0cnVjdCBmZF9zZXQgKiwgc3RydWN0IHRpbWV2YWwgKik7CitpbnQgICAgICAgICAgICAgIGZ0cnVuY2F0ZSAoaW50LCBvZmZfdCk7CitpbnQgICAgICAgICAgICAgIGdldGRlbnRzICh1bnNpZ25lZCBpbnQsIHN0cnVjdCBkaXJlbnQgKiwgdW5zaWduZWQgaW50KTsKK2ludCAgICAgICAgICAgICAgZnN5bmMgKGludCk7CitpbnQgICAgICAgICAgICAgIGZjaG93biAoaW50LCB1aWRfdCwgZ2lkX3QpOwordm9pZCAgICAgICAgICAgICBzeW5jICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgX19mY250bDY0IChpbnQsIGludCwgdm9pZCAqKTsKK2ludCAgICAgICAgICAgICAgZnN0YXRmcyAoaW50LCBzaXplX3QsIHN0cnVjdCBzdGF0ZnMgKik7Citzc2l6ZV90ICAgICAgICAgIHNlbmRmaWxlIChpbnQgb3V0X2ZkLCBpbnQgaW5fZmQsIG9mZl90ICpvZmZzZXQsIHNpemVfdCBjb3VudCk7CitpbnQgICAgICAgICAgICAgIGZzdGF0YXQgKGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgc3RydWN0IHN0YXQgKmJ1ZiwgaW50IGZsYWdzKTsKK2ludCAgICAgICAgICAgICAgbWtkaXJhdCAoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgbW9kZV90IG1vZGUpOworaW50ICAgICAgICAgICAgICBmY2hvd25hdCAoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFncyk7CitpbnQgICAgICAgICAgICAgIGZjaG1vZGF0IChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIG1vZGVfdCBtb2RlLCBpbnQgZmxhZ3MpOworaW50ICAgICAgICAgICAgICByZW5hbWVhdCAoaW50IG9sZGRpcmZkLCBjb25zdCBjaGFyICpvbGRwYXRoLCBpbnQgbmV3ZGlyZmQsIGNvbnN0IGNoYXIgKm5ld3BhdGgpOworaW50ICAgICAgICAgICAgICBsaW5rIChjb25zdCBjaGFyKiwgY29uc3QgY2hhciopOworaW50ICAgICAgICAgICAgICB1bmxpbmsgKGNvbnN0IGNoYXIqKTsKK2ludCAgICAgICAgICAgICAgdW5saW5rYXQgKGludCwgY29uc3QgY2hhciAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBjaGRpciAoY29uc3QgY2hhciopOworaW50ICAgICAgICAgICAgICBta25vZCAoY29uc3QgY2hhciosIG1vZGVfdCwgZGV2X3QpOworaW50ICAgICAgICAgICAgICBjaG1vZCAoY29uc3QgY2hhciosbW9kZV90KTsKK2ludCAgICAgICAgICAgICAgY2hvd24gKGNvbnN0IGNoYXIgKiwgdWlkX3QsIGdpZF90KTsKK2ludCAgICAgICAgICAgICAgbGNob3duIChjb25zdCBjaGFyKiwgdWlkX3QsIGdpZF90KTsKK2ludCAgICAgICAgICAgICAgbW91bnQgKGNvbnN0IGNoYXIqLCBjb25zdCBjaGFyKiwgY29uc3QgY2hhciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IHZvaWQqKTsKK2ludCAgICAgICAgICAgICAgdW1vdW50IChjb25zdCBjaGFyKik7CitpbnQgICAgICAgICAgICAgIHVtb3VudDIgKGNvbnN0IGNoYXIqLCBpbnQpOworaW50ICAgICAgICAgICAgICBmc3RhdCAoaW50LCBzdHJ1Y3Qgc3RhdCopOworaW50ICAgICAgICAgICAgICBzdGF0IChjb25zdCBjaGFyICosIHN0cnVjdCBzdGF0ICopOworaW50ICAgICAgICAgICAgICBsc3RhdCAoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK2ludCAgICAgICAgICAgICAgbWtkaXIgKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKK2ludCAgICAgICAgICAgICAgcmVhZGxpbmsgKGNvbnN0IGNoYXIgKiwgY2hhciAqLCBzaXplX3QpOworaW50ICAgICAgICAgICAgICBybWRpciAoY29uc3QgY2hhciAqKTsKK2ludCAgICAgICAgICAgICAgcmVuYW1lIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQgICAgICAgICAgICAgIF9fZ2V0Y3dkIChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSk7CitpbnQgICAgICAgICAgICAgIGFjY2VzcyAoY29uc3QgY2hhciAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBzeW1saW5rIChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CitpbnQgICAgICAgICAgICAgIGZjaGRpciAoaW50KTsKK2ludCAgICAgICAgICAgICAgdHJ1bmNhdGUgKGNvbnN0IGNoYXIqLCBvZmZfdCk7CitpbnQgICAgICAgICAgICAgIF9fc3RhdGZzNjQgKGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopOworaW50ICAgICAgICAgICAgICBwYXVzZSAodm9pZCk7CitpbnQgICAgICAgICAgICAgIGdldHRpbWVvZmRheSAoc3RydWN0IHRpbWV2YWwqLCBzdHJ1Y3QgdGltZXpvbmUqKTsKK2ludCAgICAgICAgICAgICAgc2V0dGltZW9mZGF5IChjb25zdCBzdHJ1Y3QgdGltZXZhbCosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSopOworY2xvY2tfdCAgICAgICAgICB0aW1lcyAoc3RydWN0IHRtcyAqKTsKK2ludCAgICAgICAgICAgICAgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOworaW50ICAgICAgICAgICAgICBjbG9ja19nZXR0aW1lIChjbG9ja2lkX3QgY2xrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKnRwKTsKK2ludCAgICAgICAgICAgICAgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IGNsa19pZCwgY29uc3Qgc3RydWN0IHRpbWVzcGVjICp0cCk7CitpbnQgICAgICAgICAgICAgIGNsb2NrX2dldHJlcyAoY2xvY2tpZF90IGNsa19pZCwgc3RydWN0IHRpbWVzcGVjICpyZXMpOworaW50ICAgICAgICAgICAgICBjbG9ja19uYW5vc2xlZXAgKGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqcmVxLCBzdHJ1Y3QgdGltZXNwZWMgKnJlbSk7CitpbnQgICAgICAgICAgICAgIHNldGl0aW1lciAoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7CitpbnQgICAgICAgICAgICAgIHRpbWVyX2NyZWF0ZSAoY2xvY2tpZF90IGNsb2NraWQsIHN0cnVjdCBzaWdldmVudCAqZXZwLCB0aW1lcl90ICp0aW1lcmlkKTsKK2ludCAgICAgICAgICAgICAgdGltZXJfc2V0dGltZSAodGltZXJfdCwgaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyosIHN0cnVjdCBpdGltZXJzcGVjKik7CitpbnQgICAgICAgICAgICAgIHRpbWVyX2dldHRpbWUgKHRpbWVyX3QsIHN0cnVjdCBpdGltZXJzcGVjKik7CitpbnQgICAgICAgICAgICAgIHRpbWVyX2dldG92ZXJydW4gKHRpbWVyX3QpOworaW50ICAgICAgICAgICAgICB0aW1lcl9kZWxldGUgKHRpbWVyX3QpOworaW50ICAgICAgICAgICAgICB1dGltZXMgKGNvbnN0IGNoYXIqLCBjb25zdCBzdHJ1Y3QgdGltZXZhbCB0dnBbMl0pOworaW50ICAgICAgICAgICAgICBzaWdhY3Rpb24gKGludCwgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqLCBzdHJ1Y3Qgc2lnYWN0aW9uICopOworaW50ICAgICAgICAgICAgICBzaWdwcm9jbWFzayAoaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKK2ludCAgICAgICAgICAgICAgX19zaWdzdXNwZW5kIChpbnQgdW51c2VkMSwgaW50IHVudXNlZDIsIHVuc2lnbmVkIG1hc2spOworaW50ICAgICAgICAgICAgICBfX3J0X3NpZ2FjdGlvbiAoaW50IHNpZywgY29uc3Qgc3RydWN0IHNpZ2FjdGlvbiAqYWN0LCBzdHJ1Y3Qgc2lnYWN0aW9uICpvYWN0LCBzaXplX3Qgc2lnc2V0c2l6ZSk7CitpbnQgICAgICAgICAgICAgIF9fcnRfc2lncHJvY21hc2sgKGludCAgaG93LCBjb25zdCBzaWdzZXRfdCAqc2V0LCBzaWdzZXRfdCAqb3NldCwgc2l6ZV90IHNpZ3NldHNpemUpOworaW50ICAgICAgICAgICAgICBfX3J0X3NpZ3RpbWVkd2FpdCAoY29uc3Qgc2lnc2V0X3QgKnNldCwgc3RydWN0IHNpZ2luZm9fdCAgKmluZm8sIHN0cnVjdCB0aW1lc3BlY190ICAqdGltZW91dCwgc2l6ZV90ICBzaWdzZXRfc2l6ZSk7CitpbnQgICAgICAgICAgICAgIHNpZ3BlbmRpbmcgKHNpZ3NldF90ICopOworaW50ICAgICAgICAgICAgICBzb2NrZXQgKGludCwgaW50LCBpbnQpOworaW50ICAgICAgICAgICAgICBzb2NrZXRwYWlyIChpbnQsIGludCwgaW50LCBpbnQqKTsKK2ludCAgICAgICAgICAgICAgYmluZCAoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgY29ubmVjdCAoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90KTsKK2ludCAgICAgICAgICAgICAgbGlzdGVuIChpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIGFjY2VwdCAoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworaW50ICAgICAgICAgICAgICBnZXRzb2NrbmFtZSAoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworaW50ICAgICAgICAgICAgICBnZXRwZWVybmFtZSAoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworaW50ICAgICAgICAgICAgICBzZW5kdG8gKGludCwgY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCk7CitpbnQgICAgICAgICAgICAgIHJlY3Zmcm9tIChpbnQsIHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7CitpbnQgICAgICAgICAgICAgIHNodXRkb3duIChpbnQsIGludCk7CitpbnQgICAgICAgICAgICAgIHNldHNvY2tvcHQgKGludCwgaW50LCBpbnQsIGNvbnN0IHZvaWQgKiwgc29ja2xlbl90KTsKK2ludCAgICAgICAgICAgICAgZ2V0c29ja29wdCAoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7CitpbnQgICAgICAgICAgICAgIHNlbmRtc2cgKGludCwgY29uc3Qgc3RydWN0IG1zZ2hkciAqLCB1bnNpZ25lZCBpbnQpOworaW50ICAgICAgICAgICAgICByZWN2bXNnIChpbnQsIHN0cnVjdCBtc2doZHIgKiwgdW5zaWduZWQgaW50KTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfc2V0c2NoZWR1bGVyIChwaWRfdCBwaWQsIGludCBwb2xpY3ksIGNvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOworaW50ICAgICAgICAgICAgICBzY2hlZF9nZXRzY2hlZHVsZXIgKHBpZF90IHBpZCk7CitpbnQgICAgICAgICAgICAgIHNjaGVkX3lpZWxkICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfc2V0cGFyYW0gKHBpZF90IHBpZCwgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpwYXJhbSk7CitpbnQgICAgICAgICAgICAgIHNjaGVkX2dldHBhcmFtIChwaWRfdCBwaWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqcGFyYW0pOworaW50ICAgICAgICAgICAgICBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQgcG9saWN5KTsKK2ludCAgICAgICAgICAgICAgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50IHBvbGljeSk7CitpbnQgICAgICAgICAgICAgIHNjaGVkX3JyX2dldF9pbnRlcnZhbCAocGlkX3QgcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKmludGVydmFsKTsKK2ludCAgICAgICAgICAgICAgc2VtY3RsIChpbnQgIHNlbWlkLCBpbnQgIHNlbW51bSwgaW50ICBjbWQsIC4uLik7CitpbnQgICAgICAgICAgICAgIHNlbWdldCAoa2V5X3QgIGtleSwgaW50ICBuc2VtcywgaW50ICBzZW1mbGcpOworaW50ICAgICAgICAgICAgICBzZW1vcCAoaW50ICBzZW1pZCwgc3RydWN0IHNlbWJ1ZiogIHNvcHMsIHNpemVfdCAgbnNvcHMpOwordm9pZCogICAgICAgICAgICBzaG1hdCAoaW50ICBzaG1pZCwgY29uc3Qgdm9pZCogIHNobWFkZHIsIGludCAgc2htZmxnKTsKK2ludCAgICAgICAgICAgICAgc2htY3RsIChpbnQgIHNobWlkLCBpbnQgIGNtZCwgc3RydWN0IHNobWlkX2RzKiAgYnVmKTsKK2ludCAgICAgICAgICAgICAgc2htZHQgKGNvbnN0IHZvaWQqICBzaG1hZGRyKTsKK2ludCAgICAgICAgICAgICAgc2htZ2V0IChrZXlfdCAga2V5LCBzaXplX3QgIHNpemUsIGludCAgc2htZmxnKTsKK2ludCAgICAgICAgICAgICAgbXNnY3RsIChpbnQgIG1zcWlkLCBpbnQgIGNtZCwgc3RydWN0IG1zcWlkX2RzICpidWYpOworaW50ICAgICAgICAgICAgICBtc2dnZXQgKGtleV90ICBrZXksIGludCAgbXNnZmxnKTsKK2ludCAgICAgICAgICAgICAgbXNncmN2IChpbnQgIG1zcWlkLCB2b2lkKiAgbXNncCwgc2l6ZV90ICBtc2dzeiwgbG9uZyBpbnQgIG1zZ3R5cCwgaW50ICBtc2dmbGcpOworaW50ICAgICAgICAgICAgICBtc2dzbmQgKGludCAgbXNxaWQsIGNvbnN0IHZvaWQqIG1zZ3AsIHNpemVfdCAgbXNnc3osIGludCAgbXNnZmxnKTsKK2ludCAgICAgICAgICAgICAgdW5hbWUgKHN0cnVjdCB1dHNuYW1lICopOworcGlkX3QgICAgICAgICAgICBfX3dhaXQ0IChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsKK21vZGVfdCAgICAgICAgICAgdW1hc2sgKG1vZGVfdCk7CitpbnQgICAgICAgICAgICAgIF9fcmVib290IChpbnQsIGludCwgaW50LCB2b2lkICopOworaW50ICAgICAgICAgICAgICBfX3N5c2xvZyAoaW50LCBjaGFyICosIGludCk7CitpbnQgICAgICAgICAgICAgIGluaXRfbW9kdWxlICh2b2lkICosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IGNoYXIgKik7CitpbnQgICAgICAgICAgICAgIGRlbGV0ZV9tb2R1bGUgKGNvbnN0IGNoYXIqLCB1bnNpZ25lZCBpbnQpOworaW50ICAgICAgICAgICAgICBrbG9nY3RsIChpbnQsIGNoYXIgKiwgaW50KTsKK2ludCAgICAgICAgICAgICAgZnV0ZXggKHZvaWQgKiwgaW50LCBpbnQsIHZvaWQgKiwgdm9pZCAqLCBpbnQpOworaW50ICAgICAgICAgICAgICBlcG9sbF9jcmVhdGUgKGludCBzaXplKTsKK2ludCAgICAgICAgICAgICAgZXBvbGxfY3RsIChpbnQgZXBmZCwgaW50IG9wLCBpbnQgZmQsIHN0cnVjdCBlcG9sbF9ldmVudCAqZXZlbnQpOworaW50ICAgICAgICAgICAgICBlcG9sbF93YWl0IChpbnQgZXBmZCwgc3RydWN0IGVwb2xsX2V2ZW50ICpldmVudHMsIGludCBtYXgsIGludCB0aW1lb3V0KTsKK2ludCAgICAgICAgICAgICAgaW5vdGlmeV9pbml0ICh2b2lkKTsKK2ludCAgICAgICAgICAgICAgaW5vdGlmeV9hZGRfd2F0Y2ggKGludCwgY29uc3QgY2hhciAqLCB1bnNpZ25lZCBpbnQpOworaW50ICAgICAgICAgICAgICBpbm90aWZ5X3JtX3dhdGNoIChpbnQsIHVuc2lnbmVkIGludCk7CitpbnQgICAgICAgICAgICAgIHBvbGwgKHN0cnVjdCBwb2xsZmQgKiwgdW5zaWduZWQgaW50LCBsb25nKTsKK2ludCAgICAgICAgICAgICAgX19zZXRfdGxzICh2b2lkKik7CitpbnQgICAgICAgICAgICAgIGNhY2hlZmx1c2ggKGxvbmcgc3RhcnQsIGxvbmcgZW5kLCBsb25nIGZsYWdzKTsKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKyNlbmRpZiAvKiBfQklPTklDX0xJTlVYX1VOSVNURF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9tbWFuLmggYi9saWJjL2luY2x1ZGUvc3lzL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YTMyOTc0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9tbWFuLmgKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX01NQU5fSF8KKyNkZWZpbmUgX1NZU19NTUFOX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vbW1hbi5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKK19fQkVHSU5fREVDTFMKKworI2lmbmRlZiBNQVBfQU5PTgorI2RlZmluZSBNQVBfQU5PTiAgTUFQX0FOT05ZTU9VUworI2VuZGlmCisKKyNkZWZpbmUgTUFQX0ZBSUxFRCAoKHZvaWQgKiktMSkKKworI2RlZmluZSBNUkVNQVBfTUFZTU9WRSAgMQorI2RlZmluZSBNUkVNQVBfRklYRUQgICAgMgorCitleHRlcm4gdm9pZCogIG1tYXAodm9pZCAqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIG9mZl90KTsKK2V4dGVybiBpbnQgICAgbXVubWFwKHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgbXN5bmMoY29uc3Qgdm9pZCAqLCBzaXplX3QsIGludCk7CitleHRlcm4gaW50ICAgIG1wcm90ZWN0KGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworZXh0ZXJuIHZvaWQqICBtcmVtYXAodm9pZCAqLCBzaXplX3QsIHNpemVfdCwgdW5zaWduZWQgbG9uZyk7CisKK2V4dGVybiBpbnQgICAgbWxvY2thbGwoaW50KTsKK2V4dGVybiBpbnQgICAgbXVubG9ja2FsbCh2b2lkKTsKK2V4dGVybiBpbnQgICAgbWxvY2soY29uc3Qgdm9pZCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICBtdW5sb2NrKGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgbWFkdmlzZShjb25zdCB2b2lkICosIHNpemVfdCwgaW50KTsKKworZXh0ZXJuIGludCAgICBtbG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKK2V4dGVybiBpbnQgICAgbXVubG9jayhjb25zdCB2b2lkICphZGRyLCBzaXplX3QgbGVuKTsKKworZXh0ZXJuIGludCAgICBtaW5jb3JlKHZvaWQqICBzdGFydCwgc2l6ZV90ICBsZW5ndGgsIHVuc2lnbmVkIGNoYXIqICB2ZWMpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19NTUFOX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL21vdW50LmggYi9saWJjL2luY2x1ZGUvc3lzL21vdW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjJjNGVlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvbW91bnQuaApAQCAtMCwwICsxLDk5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfTU9VTlRfSAorI2RlZmluZSBfU1lTX01PVU5UX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qCisgKiBUaGVzZSBhcmUgdGhlIGZzLWluZGVwZW5kZW50IG1vdW50LWZsYWdzOiB1cCB0byAzMiBmbGFncyBhcmUgc3VwcG9ydGVkCisgKi8KKyNkZWZpbmUgTVNfUkRPTkxZICAgICAgICAxICAgICAgLyogTW91bnQgcmVhZC1vbmx5ICovCisjZGVmaW5lIE1TX05PU1VJRCAgICAgICAgMiAgICAgIC8qIElnbm9yZSBzdWlkIGFuZCBzZ2lkIGJpdHMgKi8KKyNkZWZpbmUgTVNfTk9ERVYgICAgICAgICA0ICAgICAgLyogRGlzYWxsb3cgYWNjZXNzIHRvIGRldmljZSBzcGVjaWFsIGZpbGVzICovCisjZGVmaW5lIE1TX05PRVhFQyAgICAgICAgOCAgICAgIC8qIERpc2FsbG93IHByb2dyYW0gZXhlY3V0aW9uICovCisjZGVmaW5lIE1TX1NZTkNIUk9OT1VTICAxNiAgICAgIC8qIFdyaXRlcyBhcmUgc3luY2VkIGF0IG9uY2UgKi8KKyNkZWZpbmUgTVNfUkVNT1VOVCAgICAgIDMyICAgICAgLyogQWx0ZXIgZmxhZ3Mgb2YgYSBtb3VudGVkIEZTICovCisjZGVmaW5lIE1TX01BTkRMT0NLICAgICA2NCAgICAgIC8qIEFsbG93IG1hbmRhdG9yeSBsb2NrcyBvbiBhbiBGUyAqLworI2RlZmluZSBNU19ESVJTWU5DICAgICAgMTI4ICAgICAvKiBEaXJlY3RvcnkgbW9kaWZpY2F0aW9ucyBhcmUgc3luY2hyb25vdXMgKi8KKyNkZWZpbmUgTVNfTk9BVElNRSAgICAgIDEwMjQgICAgLyogRG8gbm90IHVwZGF0ZSBhY2Nlc3MgdGltZXMuICovCisjZGVmaW5lIE1TX05PRElSQVRJTUUgICAyMDQ4ICAgIC8qIERvIG5vdCB1cGRhdGUgZGlyZWN0b3J5IGFjY2VzcyB0aW1lcyAqLworI2RlZmluZSBNU19CSU5EICAgICAgICAgNDA5NgorI2RlZmluZSBNU19NT1ZFICAgICAgICAgODE5MgorI2RlZmluZSBNU19SRUMgICAgICAgICAgMTYzODQKKyNkZWZpbmUgTVNfVkVSQk9TRSAgICAgIDMyNzY4CisjZGVmaW5lIE1TX1BPU0lYQUNMICAgICAoMTw8MTYpIC8qIFZGUyBkb2VzIG5vdCBhcHBseSB0aGUgdW1hc2sgKi8KKyNkZWZpbmUgTVNfT05FX1NFQ09ORCAgICgxPDwxNykgLyogZnMgaGFzIDEgc2VjIGEvbS9jdGltZSByZXNvbHV0aW9uICovCisjZGVmaW5lIE1TX0FDVElWRSAgICAgICAoMTw8MzApCisjZGVmaW5lIE1TX05PVVNFUiAgICAgICAoMTw8MzEpCisKKy8qCisgKiBTdXBlcmJsb2NrIGZsYWdzIHRoYXQgY2FuIGJlIGFsdGVyZWQgYnkgTVNfUkVNT1VOVAorICovCisjZGVmaW5lIE1TX1JNVF9NQVNLICAgICAoTVNfUkRPTkxZfE1TX1NZTkNIUk9OT1VTfE1TX01BTkRMT0NLfE1TX05PQVRJTUV8TVNfTk9ESVJBVElNRSkKKworLyoKKyAqIE9sZCBtYWdpYyBtb3VudCBmbGFnIGFuZCBtYXNrCisgKi8KKyNkZWZpbmUgTVNfTUdDX1ZBTCAweEMwRUQwMDAwCisjZGVmaW5lIE1TX01HQ19NU0sgMHhmZmZmMDAwMAorCisvKgorICogdW1vdW50MigpIGZsYWdzCisgKi8KKyNkZWZpbmUgTU5UX0ZPUkNFCTEJLyogRm9yY2libHkgdW5tb3VudCAqLworI2RlZmluZSBNTlRfREVUQUNICTIJLyogRGV0YWNoIGZyb20gdHJlZSBvbmx5ICovCisjZGVmaW5lIE1OVF9FWFBJUkUJNAkvKiBNYXJrIGZvciBleHBpcnkgKi8KKworLyoKKyAqIEJsb2NrIGRldmljZSBpb2N0bHMKKyAqLworI2RlZmluZSBCTEtST1NFVCAgIF9JTygweDEyLCA5MykgLyogU2V0IGRldmljZSByZWFkLW9ubHkgKDAgPSByZWFkLXdyaXRlKS4gICovCisjZGVmaW5lIEJMS1JPR0VUICAgX0lPKDB4MTIsIDk0KSAvKiBHZXQgcmVhZC1vbmx5IHN0YXR1cyAoMCA9IHJlYWRfd3JpdGUpLiAgKi8KKyNkZWZpbmUgQkxLUlJQQVJUICBfSU8oMHgxMiwgOTUpIC8qIFJlLXJlYWQgcGFydGl0aW9uIHRhYmxlLiAgKi8KKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiwgOTYpIC8qIFJldHVybiBkZXZpY2Ugc2l6ZS4gICovCisjZGVmaW5lIEJMS0ZMU0JVRiAgX0lPKDB4MTIsIDk3KSAvKiBGbHVzaCBidWZmZXIgY2FjaGUuICAqLworI2RlZmluZSBCTEtSQVNFVCAgIF9JTygweDEyLCA5OCkgLyogU2V0IHJlYWQgYWhlYWQgZm9yIGJsb2NrIGRldmljZS4gICovCisjZGVmaW5lIEJMS1JBR0VUICAgX0lPKDB4MTIsIDk5KSAvKiBHZXQgY3VycmVudCByZWFkIGFoZWFkIHNldHRpbmcuICAqLworCisvKgorICogUHJvdG90eXBlcworICovCitleHRlcm4gaW50IG1vdW50KGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLAorCQkgICBjb25zdCBjaGFyICosIHVuc2lnbmVkIGxvbmcsCisJCSAgIGNvbnN0IHZvaWQgKik7CitleHRlcm4gaW50IHVtb3VudChjb25zdCBjaGFyICopOworZXh0ZXJuIGludCB1bW91bnQyKGNvbnN0IGNoYXIgKiwgaW50KTsKK2V4dGVybiBpbnQgcGl2b3Rfcm9vdChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX01PVU5UX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvbXNnLmggYi9saWJjL2luY2x1ZGUvc3lzL21zZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkMWI1MjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL21zZy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19NU0dfSAorI2RlZmluZSBfU1lTX01TR19ICisKKyNpbmNsdWRlIDxzeXMvaXBjLmg+CisjaW5jbHVkZSA8bGludXgvbXNnLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCAgbXNnY3RsKGludCAgbXNxaWQsIGludCAgY21kLCBzdHJ1Y3QgbXNxaWRfZHMgKmJ1Zik7CitleHRlcm4gaW50ICBtc2dnZXQoa2V5X3QgIGtleSwgaW50ICBtc2dmbGcpOworZXh0ZXJuIGludCAgbXNncmN2KGludCAgbXNxaWQsIHZvaWQqICBtc2dwLCBzaXplX3QgIG1zZ3N6LCBsb25nIGludCAgbXNndHlwLCBpbnQgIG1zZ2ZsZyk7CitleHRlcm4gaW50ICBtc2dzbmQoaW50ICBtc3FpZCwgY29uc3Qgdm9pZCogbXNncCwgc2l6ZV90ICBtc2dzeiwgaW50ICBtc2dmbGcpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19NU0dfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oIGIvbGliYy9pbmNsdWRlL3N5cy9wYXJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhODE1Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3BhcmFtLmgKQEAgLTAsMCArMSw0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1BBUkFNX0hfCisjZGVmaW5lIF9TWVNfUEFSQU1fSF8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3BhcmFtLmg+CisKKyNkZWZpbmUgTUFYUEFUSExFTiAgUEFUSF9NQVgKKyNkZWZpbmUgTUFYU1lNTElOS1MgOAorCisjZGVmaW5lIEFMSUdOQllURVMgIDMKKyNkZWZpbmUgQUxJR04ocCkgICAgKCgodW5zaWduZWQgaW50KShwKSArIEFMSUdOQllURVMpICZ+IEFMSUdOQllURVMpCisKKyNlbmRpZiAvKiBfU1lTX1BBUkFNX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3BvbGwuaCBiL2xpYmMvaW5jbHVkZS9zeXMvcG9sbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3OWVjNzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3BvbGwuaApAQCAtMCwwICsxIEBACisjaW5jbHVkZSA8cG9sbC5oPgpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oIGIvbGliYy9pbmNsdWRlL3N5cy9wcmN0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlODViZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3ByY3RsLmgKQEAgLTAsMCArMSw0MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1BSQ1RMX0gKKyNkZWZpbmUgX1NZU19QUkNUTF9ICisKKyNpbmNsdWRlIDxsaW51eC9wcmN0bC5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgcHJjdGwoaW50IG9wdGlvbiwgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMgLCB1bnNpZ25lZAorICAgICAgICAgICAgICAgbG9uZyBhcmc0LCB1bnNpZ25lZCBsb25nIGFyZzUpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19QUkNUTF9IICovCisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvcHRyYWNlLmggYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc4YTA1N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3B0cmFjZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19QVFJBQ0VfSF8KKyNkZWZpbmUgX1NZU19QVFJBQ0VfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorLy8gRm9yIGFsbCBvZiB0aGUgZGVmaW5lcworI2luY2x1ZGUgPGxpbnV4L3B0cmFjZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgUFRSQUNFX1BPS0VVU0VSICAgICBQVFJBQ0VfUE9LRVVTUgorI2RlZmluZSBQVFJBQ0VfUEVFS1VTRVIgICAgIFBUUkFDRV9QRUVLVVNSCisKK2V4dGVybiBsb25nIHB0cmFjZShpbnQgcmVxdWVzdCwgcGlkX3QgcGlkLCB2b2lkICphZGRyLCB2b2lkICpkYXRhKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfUFRSQUNFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3JlYm9vdC5oIGIvbGliYy9pbmNsdWRlL3N5cy9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjgxMTM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9yZWJvb3QuaApAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfUkVCT09UX0hfCisjZGVmaW5lIF9TWVNfUkVCT09UX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9yZWJvb3QuaD4KKworX19CRUdJTl9ERUNMUworCisvKiB1c2UgZ2xpYmMgbmFtZXMgYXMgd2VsbCAqLworCisjZGVmaW5lIFJCX0FVVE9CT09UICAgICBMSU5VWF9SRUJPT1RfQ01EX1JFU1RBUlQKKyNkZWZpbmUgUkJfSEFMVF9TWVNURU0gIExJTlVYX1JFQk9PVF9DTURfSEFMVAorI2RlZmluZSBSQl9FTkFCTEVfQ0FEICAgTElOVVhfUkVCT09UX0NNRF9DQURfT04KKyNkZWZpbmUgUkJfRElTQUJMRV9DQUQgIExJTlVYX1JFQk9PVF9DTURfQ0FEX09GRgorI2RlZmluZSBSQl9QT1dFUl9PRkYgICAgTElOVVhfUkVCT09UX0NNRF9QT1dFUl9PRkYKKworZXh0ZXJuIGludCByZWJvb3QoaW50ICByZWJvb3RfdHlwZSk7CitleHRlcm4gaW50IF9fcmVib290KGludCwgaW50LCBpbnQsIHZvaWQgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1JFQk9PVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oIGIvbGliYy9pbmNsdWRlL3N5cy9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3ZGU2ZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Jlc291cmNlLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1JFU09VUkNFX0hfCisjZGVmaW5lIF9TWVNfUkVTT1VSQ0VfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPiAgICAgLyogTVVTVCBiZSBpbmNsdWRlZCBiZWZvcmUgbGludXgvcmVzb3VyY2UuaCAqLworCisvKiBUUklDSyBBSEVBRDogPGxpbnV4L3Jlc291cmNlLmg+IGRlZmluZXMgYSBnZXRydXNhZ2UgZnVuY3Rpb24gd2l0aAorICogICAgICAgICAgICAgIGEgbm9uLXN0YW5kYXJkIHNpZ25hdHVyZS4gdGhpcyBpcyBzdXJwcmlzaW5nIGJlY2F1c2UgdGhlCisgKiAgICAgICAgICAgICAgc3lzY2FsbCBzZWVtcyB0byB1c2UgdGhlIHN0YW5kYXJkIG9uZSBpbnN0ZWFkLgorICogICAgICAgICAgICAgIG9uY2UgYWdhaW4sIGNyZWF0aXZlIG1hY3JvIHVzYWdlIHNhdmVzIHRoZSBkYXlzCisgKi8KKyNkZWZpbmUgIGdldHJ1c2FnZSAgIF9fa2VybmVsX2dldHJ1c2FnZQorI2luY2x1ZGUgPGxpbnV4L3Jlc291cmNlLmg+CisjdW5kZWYgICBnZXRydXNhZ2UKKworX19CRUdJTl9ERUNMUworCitleHRlcm4gaW50IGdldHByaW9yaXR5KGludCwgaW50KTsKK2V4dGVybiBpbnQgc2V0cHJpb3JpdHkoaW50LCBpbnQsIGludCk7CitleHRlcm4gaW50IGdldHJsaW1pdChpbnQgcmVzb3VyY2UsIHN0cnVjdCBybGltaXQgKnJscCk7CitleHRlcm4gaW50IHNldHJsaW1pdChpbnQgcmVzb3VyY2UsIGNvbnN0IHN0cnVjdCBybGltaXQgKnJscCk7CitleHRlcm4gaW50IGdldHJ1c2FnZShpbnQgIHdobywgc3RydWN0IHJ1c2FnZSogIHJfdXNhZ2UpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19SRVNPVVJDRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zZWxlY3QuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc2VsZWN0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTIzMTViOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2VsZWN0LmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1NFTEVDVF9IXworI2RlZmluZSBfU1lTX1NFTEVDVF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworX19CRUdJTl9ERUNMUworCit0eXBlZGVmIF9fa2VybmVsX2ZkX3NldCAgIGZkX3NldDsKKworZXh0ZXJuIGludCBzZWxlY3QoaW50LCBmZF9zZXQgKiwgZmRfc2V0ICosIGZkX3NldCAqLCBzdHJ1Y3QgdGltZXZhbCAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU0VMRUNUX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NlbmRmaWxlLmggYi9saWJjL2luY2x1ZGUvc3lzL3NlbmRmaWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDVhYmEyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2VuZGZpbGUuaApAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU0VOREZJTEVfSF8KKyNkZWZpbmUgX1NZU19TRU5ERklMRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIHNzaXplX3Qgc2VuZGZpbGUoaW50IG91dF9mZCwgaW50IGluX2ZkLCBvZmZfdCAqb2Zmc2V0LCBzaXplX3QgY291bnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19TRU5ERklMRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zaG0uaCBiL2xpYmMvaW5jbHVkZS9zeXMvc2htLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk1ZDMzZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc2htLmgKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1NITV9ICisjZGVmaW5lIF9TWVNfU0hNX0gKKworI2luY2x1ZGUgPHN5cy9pcGMuaD4KKyNpbmNsdWRlIDxsaW51eC9zaG0uaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gdm9pZCogIHNobWF0KGludCAgc2htaWQsIGNvbnN0IHZvaWQqICBzaG1hZGRyLCBpbnQgIHNobWZsZyk7CitleHRlcm4gaW50ICAgIHNobWN0bChpbnQgIHNobWlkLCBpbnQgIGNtZCwgc3RydWN0IHNobWlkX2RzKiAgYnVmKTsKK2V4dGVybiBpbnQgICAgc2htZHQoY29uc3Qgdm9pZCogIHNobWFkZHIpOworZXh0ZXJuIGludCAgICBzaG1nZXQoa2V5X3QgIGtleSwgc2l6ZV90ICBzaXplLCBpbnQgIHNobWZsZyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NITV9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NvY2tldC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NTUxNmZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zb2NrZXQuaApAQCAtMCwwICsxLDg3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU09DS0VUX0hfCisjZGVmaW5lIF9TWVNfU09DS0VUX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIFNPQ0tfU1RSRUFNICAgICAgMQorI2RlZmluZSBTT0NLX0RHUkFNICAgICAgIDIKKyNkZWZpbmUgU09DS19SQVcgICAgICAgICAzCisjZGVmaW5lIFNPQ0tfUkRNICAgICAgICAgNAorI2RlZmluZSBTT0NLX1NFUVBBQ0tFVCAgIDUKKyNkZWZpbmUgU09DS19QQUNLRVQgICAgICAxMAorCisjaWZkZWYgX19pMzg2X18KKyMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4gX19jZGVjbAorI2Vsc2UKKyMgZGVmaW5lIF9fc29ja2V0Y2FsbCBleHRlcm4KKyNlbmRpZgorCisvKiBCSU9OSUM6IHNlY29uZCBhcmd1bWVudCB0byBzaHV0ZG93bigpICovCitlbnVtIHsKKyAgICBTSFVUX1JEID0gMCwgICAgICAgIC8qIG5vIG1vcmUgcmVjZXB0aW9ucyAqLworI2RlZmluZSBTSFVUX1JEICAgICAgICAgU0hVVF9SRAorICAgIFNIVVRfV1IsICAgICAgICAgICAgLyogbm8gbW9yZSB0cmFuc21pc3Npb25zICovCisjZGVmaW5lIFNIVVRfV1IgICAgICAgICBTSFVUX1dSCisgICAgU0hVVF9SRFdSICAgICAgICAgICAvKiBubyBtb3JlIHJlY2VwdGlvbnMgb3IgdHJhbnNtaXNzaW9ucyAqLworI2RlZmluZSBTSFVUX1JEV1IgICAgICAgU0hVVF9SRFdSCit9OworCisKK3R5cGVkZWYgaW50IHNvY2tsZW5fdDsKKworX19zb2NrZXRjYWxsIGludCBzb2NrZXQoaW50LCBpbnQsIGludCk7CitfX3NvY2tldGNhbGwgaW50IGJpbmQoaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgY29ubmVjdChpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOworX19zb2NrZXRjYWxsIGludCBsaXN0ZW4oaW50LCBpbnQpOworX19zb2NrZXRjYWxsIGludCBhY2NlcHQoaW50LCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworX19zb2NrZXRjYWxsIGludCBnZXRzb2NrbmFtZShpbnQsIHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QgKik7CitfX3NvY2tldGNhbGwgaW50IGdldHBlZXJuYW1lKGludCwgc3RydWN0IHNvY2thZGRyICosIHNvY2tsZW5fdCAqKTsKK19fc29ja2V0Y2FsbCBpbnQgc29ja2V0cGFpcihpbnQsIGludCwgaW50LCBpbnQgKik7CitfX3NvY2tldGNhbGwgaW50IHNodXRkb3duKGludCwgaW50KTsKK19fc29ja2V0Y2FsbCBpbnQgc2V0c29ja29wdChpbnQsIGludCwgaW50LCBjb25zdCB2b2lkICosIHNvY2tsZW5fdCk7CitfX3NvY2tldGNhbGwgaW50IGdldHNvY2tvcHQoaW50LCBpbnQsIGludCwgdm9pZCAqLCBzb2NrbGVuX3QgKik7CitfX3NvY2tldGNhbGwgaW50IHNlbmRtc2coaW50LCBjb25zdCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7CitfX3NvY2tldGNhbGwgaW50IHJlY3Ztc2coaW50LCBzdHJ1Y3QgbXNnaGRyICosIHVuc2lnbmVkIGludCk7CisKK2V4dGVybiAgc3NpemVfdCAgc2VuZChpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCB1bnNpZ25lZCBpbnQpOworZXh0ZXJuICBzc2l6ZV90ICByZWN2KGludCwgdm9pZCAqLCBzaXplX3QsIHVuc2lnbmVkIGludCk7CisKK19fc29ja2V0Y2FsbCBzc2l6ZV90IHNlbmR0byhpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QpOworX19zb2NrZXRjYWxsIHNzaXplX3QgcmVjdmZyb20oaW50LCB2b2lkICosIHNpemVfdCwgdW5zaWduZWQgaW50LCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc29ja2xlbl90ICopOworCisjdW5kZWYgX19zb2NrZXRjYWxsCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NPQ0tFVF9IICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3NvY2tldGNhbGxzLmggYi9saWJjL2luY2x1ZGUvc3lzL3NvY2tldGNhbGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzc0ZjQ2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc29ja2V0Y2FsbHMuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU09DS0VUQ0FMTFNfSF8KKyNkZWZpbmUgX1NZU19TT0NLRVRDQUxMU19IXworCisvKiBzb2NrZXRjYWxscyBieSBudW1iZXIgKi8KKworI2RlZmluZSBTWVNfU09DS0VUICAgICAgMSAgICAgICAgICAgICAgIC8qIHN5c19zb2NrZXQoMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0JJTkQgICAgICAgIDIgICAgICAgICAgICAgICAvKiBzeXNfYmluZCgyKSAgICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19DT05ORUNUICAgICAzICAgICAgICAgICAgICAgLyogc3lzX2Nvbm5lY3QoMikgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfTElTVEVOICAgICAgNCAgICAgICAgICAgICAgIC8qIHN5c19saXN0ZW4oMikgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX0FDQ0VQVCAgICAgIDUgICAgICAgICAgICAgICAvKiBzeXNfYWNjZXB0KDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19HRVRTT0NLTkFNRSA2ICAgICAgICAgICAgICAgLyogc3lzX2dldHNvY2tuYW1lKDIpICAgICAgICAgICAqLworI2RlZmluZSBTWVNfR0VUUEVFUk5BTUUgNyAgICAgICAgICAgICAgIC8qIHN5c19nZXRwZWVybmFtZSgyKSAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NPQ0tFVFBBSVIgIDggICAgICAgICAgICAgICAvKiBzeXNfc29ja2V0cGFpcigyKSAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19TRU5EICAgICAgICA5ICAgICAgICAgICAgICAgLyogc3lzX3NlbmQoMikgICAgICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfUkVDViAgICAgICAgMTAgICAgICAgICAgICAgIC8qIHN5c19yZWN2KDIpICAgICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NFTkRUTyAgICAgIDExICAgICAgICAgICAgICAvKiBzeXNfc2VuZHRvKDIpICAgICAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19SRUNWRlJPTSAgICAxMiAgICAgICAgICAgICAgLyogc3lzX3JlY3Zmcm9tKDIpICAgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU0hVVERPV04gICAgMTMgICAgICAgICAgICAgIC8qIHN5c19zaHV0ZG93bigyKSAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1NFVFNPQ0tPUFQgIDE0ICAgICAgICAgICAgICAvKiBzeXNfc2V0c29ja29wdCgyKSAgICAgICAgICAgICovCisjZGVmaW5lIFNZU19HRVRTT0NLT1BUICAxNSAgICAgICAgICAgICAgLyogc3lzX2dldHNvY2tvcHQoMikgICAgICAgICAgICAqLworI2RlZmluZSBTWVNfU0VORE1TRyAgICAgMTYgICAgICAgICAgICAgIC8qIHN5c19zZW5kbXNnKDIpICAgICAgICAgICAgICAgKi8KKyNkZWZpbmUgU1lTX1JFQ1ZNU0cgICAgIDE3ICAgICAgICAgICAgICAvKiBzeXNfcmVjdm1zZygyKSAgICAgICAgICAgICAgICovCisKKyNlbmRpZiAvKiBfU1lTX1NPQ0tFVENBTExTX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdhYjBmODIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N0YXQuaApAQCAtMCwwICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1RBVF9IXworI2RlZmluZSBfU1lTX1NUQVRfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgorCisjaW5jbHVkZSA8ZW5kaWFuLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogcmVhbGx5IG1hdGNoZXMgc3RhdDY0IGluIHRoZSBrZXJuZWwsIGhlbmNlIHRoZSBwYWRkaW5nCisgKiBOb3RlOiBUaGUga2VybmVsIHplcm8ncyB0aGUgcGFkZGVkIHJlZ2lvbiBiZWNhdXNlIGdsaWJjIG1pZ2h0IHJlYWQgdGhlbQorICogaW4gdGhlIGhvcGUgdGhhdCB0aGUga2VybmVsIGhhcyBzdHJldGNoZWQgdG8gdXNpbmcgbGFyZ2VyIHNpemVzLgorICovCitzdHJ1Y3Qgc3RhdCB7CisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9kZXY7CisgICAgdW5zaWduZWQgY2hhciAgICAgICBfX3BhZDBbNF07CisKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIF9fc3RfaW5vOworICAgIHVuc2lnbmVkIGludCAgICAgICAgc3RfbW9kZTsKKyAgICB1bnNpZ25lZCBpbnQgICAgICAgIHN0X25saW5rOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF91aWQ7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9naWQ7CisKKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgIHN0X3JkZXY7CisgICAgdW5zaWduZWQgY2hhciAgICAgICBfX3BhZDNbNF07CisKKyAgICBsb25nIGxvbmcgICAgICAgICAgIHN0X3NpemU7CisgICAgdW5zaWduZWQgbG9uZwlzdF9ibGtzaXplOworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyAgc3RfYmxvY2tzOworCisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9hdGltZTsKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X2F0aW1lX25zZWM7CisKKyAgICB1bnNpZ25lZCBsb25nICAgICAgIHN0X210aW1lOworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfbXRpbWVfbnNlYzsKKworICAgIHVuc2lnbmVkIGxvbmcgICAgICAgc3RfY3RpbWU7CisgICAgdW5zaWduZWQgbG9uZyAgICAgICBzdF9jdGltZV9uc2VjOworCisgICAgdW5zaWduZWQgbG9uZyBsb25nICBzdF9pbm87Cit9OworCitleHRlcm4gaW50ICAgIHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgZnN0YXQoaW50LCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgbHN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKK2V4dGVybiBpbnQgICAgbWtub2QoY29uc3QgY2hhciAqLCBtb2RlX3QsIGRldl90KTsKK2V4dGVybiBtb2RlX3QgdW1hc2sobW9kZV90KTsKKworc3RhdGljIF9faW5saW5lX18gaW50IG1rZmlmbyhjb25zdCBjaGFyICpfX3AsIG1vZGVfdCBfX20pCit7CisgIHJldHVybiBta25vZChfX3AsIChfX20gJiB+U19JRk1UKSB8IFNfSUZJRk8sIChkZXZfdCkwKTsKK30KKworZXh0ZXJuIGludCAgZnN0YXRhdChpbnQgZGlyZmQsIGNvbnN0IGNoYXIgKnBhdGgsIHN0cnVjdCBzdGF0ICpidWYsIGludCBmbGFncyk7CitleHRlcm4gaW50ICBta2RpcmF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aG5hbWUsIG1vZGVfdCBtb2RlKTsKK2V4dGVybiBpbnQgZmNob3duYXQoaW50IGRpcmZkLCBjb25zdCBjaGFyICpwYXRoLCB1aWRfdCBvd25lciwgZ2lkX3QgZ3JvdXAsIGludCBmbGFncyk7CitleHRlcm4gaW50IGZjaG1vZGF0KGludCBkaXJmZCwgY29uc3QgY2hhciAqcGF0aCwgbW9kZV90IG1vZGUsIGludCBmbGFncyk7CitleHRlcm4gaW50IHJlbmFtZWF0KGludCBvbGRkaXJmZCwgY29uc3QgY2hhciAqb2xkcGF0aCwgaW50IG5ld2RpcmZkLCBjb25zdCBjaGFyICpuZXdwYXRoKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU1RBVF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zdGF0ZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3RhdGZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNiM2I1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3RhdGZzLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHN5cy92ZnMuaD4KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNjYWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA1NTUxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzY2FsbC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19TWVNDQUxMX0hfCisjZGVmaW5lIF9TWVNfU1lTQ0FMTF9IXworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdW5pc3RkLmg+CisKK19fQkVHSU5fREVDTFMKKworaW50IHN5c2NhbGwoaW50IG51bWJlciwgLi4uKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfU1lTQ0FMTF9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy9zeXNjb25mLmggYi9saWJjL2luY2x1ZGUvc3lzL3N5c2NvbmYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZmMxYjA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNjb25mLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19TWVNDT05GX0hfCisjZGVmaW5lIF9TWVNfU1lTQ09ORl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogYXMgbGlzdGVkIGJ5IFBvc2l4IHN5c2NvbmYoKSBkZXNjcmlwdGlvbiAqLworLyogbW9zdCBvZiB0aGVzZSB3aWxsIHJldHVybiAtMSBhbmQgRU5PU1lTICAqLworCisjZGVmaW5lIF9TQ19BUkdfTUFYICAgICAgICAgICAgIDB4MDAwMAorI2RlZmluZSBfU0NfQkNfQkFTRV9NQVggICAgICAgICAweDAwMDEKKyNkZWZpbmUgX1NDX0JDX0RJTV9NQVggICAgICAgICAgMHgwMDAyCisjZGVmaW5lIF9TQ19CQ19TQ0FMRV9NQVggICAgICAgIDB4MDAwMworI2RlZmluZSBfU0NfQkNfU1RSSU5HX01BWCAgICAgICAweDAwMDQKKyNkZWZpbmUgX1NDX0NISUxEX01BWCAgICAgICAgICAgMHgwMDA1CisjZGVmaW5lIF9TQ19DTEtfVENLICAgICAgICAgICAgIDB4MDAwNgorI2RlZmluZSBfU0NfQ09MTF9XRUlHSFRTX01BWCAgICAweDAwMDcKKyNkZWZpbmUgX1NDX0VYUFJfTkVTVF9NQVggICAgICAgMHgwMDA4CisjZGVmaW5lIF9TQ19MSU5FX01BWCAgICAgICAgICAgIDB4MDAwOQorI2RlZmluZSBfU0NfTkdST1VQU19NQVggICAgICAgICAweDAwMGEKKyNkZWZpbmUgX1NDX09QRU5fTUFYICAgICAgICAgICAgMHgwMDBiCisjZGVmaW5lIF9TQ19QQVNTX01BWCAgICAgICAgICAgIDB4MDAwYworI2RlZmluZSBfU0NfMl9DX0JJTkQgICAgICAgICAgICAweDAwMGQKKyNkZWZpbmUgX1NDXzJfQ19ERVYgICAgICAgICAgICAgMHgwMDBlCisjZGVmaW5lIF9TQ18yX0NfVkVSU0lPTiAgICAgICAgIDB4MDAwZgorI2RlZmluZSBfU0NfMl9DSEFSX1RFUk0gICAgICAgICAweDAwMTAKKyNkZWZpbmUgX1NDXzJfRk9SVF9ERVYgICAgICAgICAgMHgwMDExCisjZGVmaW5lIF9TQ18yX0ZPUlRfUlVOICAgICAgICAgIDB4MDAxMgorI2RlZmluZSBfU0NfMl9MT0NBTEVERUYgICAgICAgICAweDAwMTMKKyNkZWZpbmUgX1NDXzJfU1dfREVWICAgICAgICAgICAgMHgwMDE0CisjZGVmaW5lIF9TQ18yX1VQRSAgICAgICAgICAgICAgIDB4MDAxNQorI2RlZmluZSBfU0NfMl9WRVJTSU9OICAgICAgICAgICAweDAwMTYKKyNkZWZpbmUgX1NDX0pPQl9DT05UUk9MICAgICAgICAgMHgwMDE3CisjZGVmaW5lIF9TQ19TQVZFRF9JRFMgICAgICAgICAgIDB4MDAxOAorI2RlZmluZSBfU0NfVkVSU0lPTiAgICAgICAgICAgICAweDAwMTkKKyNkZWZpbmUgX1NDX1JFX0RVUF9NQVggICAgICAgICAgMHgwMDFhCisjZGVmaW5lIF9TQ19TVFJFQU1fTUFYICAgICAgICAgIDB4MDAxYgorI2RlZmluZSBfU0NfVFpOQU1FX01BWCAgICAgICAgICAweDAwMWMKKyNkZWZpbmUgX1NDX1hPUEVOX0NSWVBUICAgICAgICAgMHgwMDFkCisjZGVmaW5lIF9TQ19YT1BFTl9FTkhfSTE4TiAgICAgIDB4MDAxZQorI2RlZmluZSBfU0NfWE9QRU5fU0hNICAgICAgICAgICAweDAwMWYKKyNkZWZpbmUgX1NDX1hPUEVOX1ZFUlNJT04gICAgICAgMHgwMDIwCisjZGVmaW5lIF9TQ19YT1BFTl9YQ1VfVkVSU0lPTiAgIDB4MDAyMQorI2RlZmluZSBfU0NfWE9QRU5fUkVBTFRJTUUgICAgICAweDAwMjIKKyNkZWZpbmUgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMgIDB4MDAyMworI2RlZmluZSBfU0NfWE9QRU5fTEVHQUNZICAgICAgICAweDAwMjQKKyNkZWZpbmUgX1NDX0FURVhJVF9NQVggICAgICAgICAgMHgwMDI1CisjZGVmaW5lIF9TQ19JT1ZfTUFYICAgICAgICAgICAgIDB4MDAyNgorI2RlZmluZSBfU0NfUEFHRVNJWkUgICAgICAgICAgICAweDAwMjcKKyNkZWZpbmUgX1NDX1BBR0VfU0laRSAgICAgICAgICAgMHgwMDI4CisjZGVmaW5lIF9TQ19YT1BFTl9VTklYICAgICAgICAgIDB4MDAyOQorI2RlZmluZSBfU0NfWEJTNV9JTFAzMl9PRkYzMiAgICAweDAwMmEKKyNkZWZpbmUgX1NDX1hCUzVfSUxQMzJfT0ZGQklHICAgMHgwMDJiCisjZGVmaW5lIF9TQ19YQlM1X0xQNjRfT0ZGNjQgICAgIDB4MDAyYworI2RlZmluZSBfU0NfWEJTNV9MUEJJR19PRkZCSUcgICAweDAwMmQKKyNkZWZpbmUgX1NDX0FJT19MSVNUSU9fTUFYICAgICAgMHgwMDJlCisjZGVmaW5lIF9TQ19BSU9fTUFYICAgICAgICAgICAgIDB4MDAyZgorI2RlZmluZSBfU0NfQUlPX1BSSU9fREVMVEFfTUFYICAweDAwMzAKKyNkZWZpbmUgX1NDX0RFTEFZVElNRVJfTUFYICAgICAgMHgwMDMxCisjZGVmaW5lIF9TQ19NUV9PUEVOX01BWCAgICAgICAgIDB4MDAzMgorI2RlZmluZSBfU0NfTVFfUFJJT19NQVggICAgICAgICAweDAwMzMKKyNkZWZpbmUgX1NDX1JUU0lHX01BWCAgICAgICAgICAgMHgwMDM0CisjZGVmaW5lIF9TQ19TRU1fTlNFTVNfTUFYICAgICAgIDB4MDAzNQorI2RlZmluZSBfU0NfU0VNX1ZBTFVFX01BWCAgICAgICAweDAwMzYKKyNkZWZpbmUgX1NDX1NJR1FVRVVFX01BWCAgICAgICAgMHgwMDM3CisjZGVmaW5lIF9TQ19USU1FUl9NQVggICAgICAgICAgIDB4MDAzOAorI2RlZmluZSBfU0NfQVNZTkNIUk9OT1VTX0lPICAgICAweDAwMzkKKyNkZWZpbmUgX1NDX0ZTWU5DICAgICAgICAgICAgICAgMHgwMDNhCisjZGVmaW5lIF9TQ19NQVBQRURfRklMRVMgICAgICAgIDB4MDAzYgorI2RlZmluZSBfU0NfTUVNTE9DSyAgICAgICAgICAgICAweDAwM2MKKyNkZWZpbmUgX1NDX01FTUxPQ0tfUkFOR0UgICAgICAgMHgwMDNkCisjZGVmaW5lIF9TQ19NRU1PUllfUFJPVEVDVElPTiAgIDB4MDAzZQorI2RlZmluZSBfU0NfTUVTU0FHRV9QQVNTSU5HICAgICAweDAwM2YKKyNkZWZpbmUgX1NDX1BSSU9SSVRJWkVEX0lPICAgICAgMHgwMDQwCisjZGVmaW5lIF9TQ19QUklPUklUWV9TQ0hFRFVMSU5HIDB4MDA0MQorI2RlZmluZSBfU0NfUkVBTFRJTUVfU0lHTkFMUyAgICAweDAwNDIKKyNkZWZpbmUgX1NDX1NFTUFQSE9SRVMgICAgICAgICAgMHgwMDQzCisjZGVmaW5lIF9TQ19TSEFSRURfTUVNT1JZX09CSkVDVFMgIDB4MDA0NAorI2RlZmluZSBfU0NfU1lOQ0hST05JWkVEX0lPICAgICAweDAwNDUKKyNkZWZpbmUgX1NDX1RJTUVSUyAgICAgICAgICAgICAgMHgwMDQ2CisjZGVmaW5lIF9TQ19HRVRHUl9SX1NJWkVfTUFYICAgIDB4MDA0NworI2RlZmluZSBfU0NfR0VUUFdfUl9TSVpFX01BWCAgICAweDAwNDgKKyNkZWZpbmUgX1NDX0xPR0lOX05BTUVfTUFYICAgICAgMHgwMDQ5CisjZGVmaW5lIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TICAweDAwNGEKKyNkZWZpbmUgX1NDX1RIUkVBRF9LRVlTX01BWCAgICAgMHgwMDRiCisjZGVmaW5lIF9TQ19USFJFQURfU1RBQ0tfTUlOICAgIDB4MDA0YworI2RlZmluZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYICAweDAwNGQKKyNkZWZpbmUgX1NDX1RUWV9OQU1FX01BWCAgICAgICAgMHgwMDRlCisKKyNkZWZpbmUgX1NDX1RIUkVBRFMgICAgICAgICAgICAgICAgICAgICAweDAwNGYKKyNkZWZpbmUgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiAgICAgICAweDAwNTAKKyNkZWZpbmUgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRSAgICAgICAweDAwNTEKKyNkZWZpbmUgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HICAweDAwNTIKKyNkZWZpbmUgX1NDX1RIUkVBRF9QUklPX0lOSEVSSVQgICAgICAgICAweDAwNTMKKyNkZWZpbmUgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1QgICAgICAgICAweDAwNTQKKyNkZWZpbmUgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUyAgICAgICAweDAwNTUKKworI2RlZmluZSBfU0NfTlBST0NFU1NPUlNfQ09ORiAgICAgICAgICAgIDB4MDA2MAorI2RlZmluZSBfU0NfTlBST0NFU1NPUlNfT05MTiAgICAgICAgICAgIDB4MDA2MQorI2RlZmluZSBfU0NfUEhZU19QQUdFUyAgICAgICAgICAgICAgICAgIDB4MDA2MgorI2RlZmluZSBfU0NfQVZQSFlTX1BBR0VTICAgICAgICAgICAgICAgIDB4MDA2MworCitleHRlcm4gaW50IHN5c2NvbmYgKGludCAgbmFtZSk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NZU0NPTkZfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdlNDZlNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzaW5mby5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19TWVNJTkZPX0hfCisjZGVmaW5lIF9TWVNfU1lTSU5GT19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIGludCBzeXNpbmZvIChzdHJ1Y3Qgc3lzaW5mbyAqaW5mbyk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1NZU0lORk9fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzbGltaXRzLmggYi9saWJjL2luY2x1ZGUvc3lzL3N5c2xpbWl0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2OWRlMjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3N5c2xpbWl0cy5oCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3N5c21hY3Jvcy5oIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjA1M2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXNtYWNyb3MuaApAQCAtMCwwICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfU1lTTUFDUk9TX0hfCisjZGVmaW5lIF9TWVNfU1lTTUFDUk9TX0hfCisKKy8qIHNvbWUgcm9ndWUgY29kZSBpbmNsdWRlcyB0aGlzIGZpbGUgZGlyZWN0bHkgOi0oICovCisjaWZuZGVmIF9TWVNfVFlQRVNfSF8KKyMgaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworc3RhdGljIF9faW5saW5lX18gaW50IG1ham9yKGRldl90IF9kZXYpCit7CisgIHJldHVybiAoX2RldiA+PiA4KSAmIDB4ZmZmOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgbWlub3IoZGV2X3QgX2RldikKK3sKKyAgcmV0dXJuIChfZGV2ICYgMHhmZikgfCAoKF9kZXYgPj4gMTIpICYgMHhmZmYwMCk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGRldl90IG1ha2VkZXYoaW50IF9fbWEsIGludCBfX21pKQoreworICByZXR1cm4gKChfX21hICYgMHhmZmYpIDw8IDgpIHwgKF9fbWkgJiAweGZmKSB8ICgoX19taSAmIDB4ZmZmMDApIDw8IDEyKTsKK30KKworI2VuZGlmIC8qIF9TWVNfU1lTTUFDUk9TX0hfICovCisKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvc3lzdGVtX3Byb3BlcnRpZXMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvc3lzdGVtX3Byb3BlcnRpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZWIwMGNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy9zeXN0ZW1fcHJvcGVydGllcy5oCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfSU5DTFVERV9TWVNfU1lTVEVNX1BST1BFUlRJRVNfSAorI2RlZmluZSBfSU5DTFVERV9TWVNfU1lTVEVNX1BST1BFUlRJRVNfSAorCit0eXBlZGVmIHN0cnVjdCBwcm9wX2luZm8gcHJvcF9pbmZvOworCisjZGVmaW5lIFBST1BfTkFNRV9NQVggICAzMgorI2RlZmluZSBQUk9QX1ZBTFVFX01BWCAgOTIKKworLyogTG9vayB1cCBhIHN5c3RlbSBwcm9wZXJ0eSBieSBuYW1lLCBjb3B5aW5nIGl0cyB2YWx1ZSBhbmQgYQorKiogXDAgdGVybWluYXRvciB0byB0aGUgcHJvdmlkZWQgcG9pbnRlci4gIFRoZSB0b3RhbCBieXRlcworKiogY29waWVkIHdpbGwgYmUgbm8gZ3JlYXRlciB0aGFuIFBST1BfVkFMVUVfTUFYLiAgUmV0dXJucworKiogdGhlIHN0cmluZyBsZW5ndGggb2YgdGhlIHZhbHVlLiAgQSBwcm9wZXJ0eSB0aGF0IGlzIG5vdAorKiogZGVmaW5lZCBpcyBpZGVudGljYWwgdG8gYSBwcm9wZXJ0eSB3aXRoIGEgbGVuZ3RoIDAgdmFsdWUuCisqLworaW50IF9fc3lzdGVtX3Byb3BlcnR5X2dldChjb25zdCBjaGFyICpuYW1lLCBjaGFyICp2YWx1ZSk7CisKKy8qIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIHN5c3RlbSBwcm9wZXJ0eSBuYW1lZCBuYW1lLCBpZiBpdAorKiogZXhpc3RzLCBvciBOVUxMIGlmIHRoZXJlIGlzIG5vIHN1Y2ggcHJvcGVydHkuICBVc2UgCisqKiBfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKCkgdG8gb2J0YWluIHRoZSBzdHJpbmcgdmFsdWUgZnJvbQorKiogdGhlIHJldHVybmVkIHByb3BfaW5mbyBwb2ludGVyLgorKioKKyoqIEl0IGlzIHNhZmUgdG8gY2FjaGUgdGhlIHByb3BfaW5mbyBwb2ludGVyIHRvIGF2b2lkIGZ1dHVyZQorKiogbG9va3Vwcy4gIFRoZXNlIHJldHVybmVkIHBvaW50ZXJzIHdpbGwgcmVtYWluIHZhbGlkIGZvcgorKiogdGhlIGxpZmV0aW1lIG9mIHRoZSBzeXN0ZW0uCisqLworY29uc3QgcHJvcF9pbmZvICpfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKGNvbnN0IGNoYXIgKm5hbWUpOworCisvKiBSZWFkIHRoZSB2YWx1ZSBvZiBhIHN5c3RlbSBwcm9wZXJ0eS4gIFJldHVybnMgdGhlIGxlbmd0aAorKiogb2YgdGhlIHZhbHVlLiAgQ29waWVzIHRoZSB2YWx1ZSBhbmQgXDAgdGVybWluYXRvciBpbnRvCisqKiB0aGUgcHJvdmlkZWQgdmFsdWUgcG9pbnRlci4gIFRvdGFsIGxlbmd0aCAoaW5jbHVkaW5nCisqKiB0ZXJtaW5hdG9yKSB3aWxsIGJlIG5vIGdyZWF0ZXIgdGhhdCBQUk9QX1ZBTFVFX01BWC4KKyoqCisqKiBJZiBuYW1lIGlzIG5vbnplcm8sIHVwIHRvIFBST1BfTkFNRV9NQVggYnl0ZXMgd2lsbCBiZQorKiogY29waWVkIGludG8gdGhlIHByb3ZpZGVkIG5hbWUgcG9pbnRlci4gIFRoZSBuYW1lIHdpbGwKKyoqIGJlIFwwIHRlcm1pbmF0ZWQuCisqLworaW50IF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoY29uc3QgcHJvcF9pbmZvICpwaSwgY2hhciAqbmFtZSwgY2hhciAqdmFsdWUpOworCisvKiBSZXR1cm4gYSBwcm9wX2luZm8gZm9yIHRoZSBudGggc3lzdGVtIHByb3BlcnR5LCBvciBOVUxMIGlmIAorKiogdGhlcmUgaXMgbm8gbnRoIHByb3BlcnR5LiAgVXNlIF9fc3lzdGVtX3Byb3BlcnR5X3JlYWQoKSB0bworKiogcmVhZCB0aGUgdmFsdWUgb2YgdGhpcyBwcm9wZXJ0eS4KKyoqCisqKiBUaGlzIG1ldGhvZCBpcyBmb3IgaW5zcGVjdGluZyBhbmQgZGVidWdnaW5nIHRoZSBwcm9wZXJ0eSAKKyoqIHN5c3RlbS4gIFBsZWFzZSB1c2UgX19zeXN0ZW1fcHJvcGVydHlfZmluZCgpIGluc3RlYWQuCisqKgorKiogT3JkZXIgb2YgcmVzdWx0cyBtYXkgY2hhbmdlIGZyb20gY2FsbCB0byBjYWxsLiAgVGhpcyBpcworKiogbm90IGEgYnVnLgorKi8gCitjb25zdCBwcm9wX2luZm8gKl9fc3lzdGVtX3Byb3BlcnR5X2ZpbmRfbnRoKHVuc2lnbmVkIG4pOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdGltZS5oIGIvbGliYy9pbmNsdWRlL3N5cy90aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRlZTRkYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZS5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19USU1FX0hfCisjZGVmaW5lIF9TWVNfVElNRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgZ2V0dGltZW9mZGF5KHN0cnVjdCB0aW1ldmFsICosIHN0cnVjdCB0aW1lem9uZSAqKTsKK2V4dGVybiBpbnQgc2V0dGltZW9mZGF5KGNvbnN0IHN0cnVjdCB0aW1ldmFsICosIGNvbnN0IHN0cnVjdCB0aW1lem9uZSAqKTsKKworZXh0ZXJuIGludCBnZXRpdGltZXIoaW50LCBzdHJ1Y3QgaXRpbWVydmFsICopOworZXh0ZXJuIGludCBzZXRpdGltZXIoaW50LCBjb25zdCBzdHJ1Y3QgaXRpbWVydmFsICosIHN0cnVjdCBpdGltZXJ2YWwgKik7CisKK2V4dGVybiBpbnQgdXRpbWVzKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHRpbWV2YWwgKik7CisKKyNkZWZpbmUgdGltZXJjbGVhcihhKSAgIFwKKyAgICAgICAgKChhKS0+dHZfc2VjID0gKGEpLT50dl91c2VjID0gMCkKKworI2RlZmluZSB0aW1lcmlzc2V0KGEpICAgIFwKKyAgICAgICAgKChhKS0+dHZfc2VjICE9IDAgfHwgKGEpLT50dl91c2VjICE9IDApCisKKyNkZWZpbmUgdGltZXJjbXAoYSwgYiwgb3ApICAgICAgICAgICAgICAgXAorICAgICAgICAoKGEpLT50dl9zZWMgPT0gKGIpLT50dl9zZWMgICAgICBcCisgICAgICAgID8gKGEpLT50dl91c2VjIG9wIChiKS0+dHZfdXNlYyAgIFwKKyAgICAgICAgOiAoYSktPnR2X3NlYyBvcCAoYiktPnR2X3NlYykKKworI2RlZmluZSB0aW1lcmFkZChhLCBiLCByZXMpICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAocmVzKS0+dHZfc2VjICA9IChhKS0+dHZfc2VjICArIChiKS0+dHZfc2VjOyAgXAorICAgICAgICAocmVzKS0+dHZfdXNlYyA9IChhKS0+dHZfdXNlYyAtIChiKS0+dHZfdXNlYzsgXAorICAgICAgICBpZiAoKHJlcyktPnR2X3VzZWMgPj0gMTAwMDAwMCkgeyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKHJlcyktPnR2X3VzZWMgLT0gMTAwMDAwMDsgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgKHJlcyktPnR2X3NlYyAgKz0gMTsgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgdGltZXJzdWIoYSwgYiwgcmVzKSAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgKHJlcyktPnR2X3NlYyAgPSAoYSktPnR2X3NlYyAgLSAoYiktPnR2X3NlYzsgIFwKKyAgICAgICAgKHJlcyktPnR2X3VzZWMgPSAoYSktPnR2X3VzZWMgLSAoYiktPnR2X3VzZWM7IFwKKyAgICAgICAgaWYgKChyZXMpLT50dl91c2VjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChyZXMpLT50dl91c2VjICs9IDEwMDAwMDA7ICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIChyZXMpLT50dl9zZWMgIC09IDE7ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9IHdoaWxlICgwKQorCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19USU1FX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3RpbWVzLmggYi9saWJjL2luY2x1ZGUvc3lzL3RpbWVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWI5YjhiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdGltZXMuaApAQCAtMCwwICsxLDQxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfVElNRVNfSF8KKyNkZWZpbmUgX1NZU19USU1FU19IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZXMuaD4KKworX19CRUdJTl9ERUNMUworCitleHRlcm4gY2xvY2tfdCB0aW1lcyhzdHJ1Y3QgdG1zICopOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19USU1FU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90bHMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdGxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDU5ZjFjMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdGxzLmgKQEAgLTAsMCArMSw4MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1RMU19ICisjZGVmaW5lIF9TWVNfVExTX0gKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIG1heGltdW0gbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSBUTFMgYXJyYXkgKi8KKyNkZWZpbmUgQklPTklDX1RMU19TTE9UUyAgICAgICAgICAgIDY0CisKKy8qIG5vdGUgdGhhdCBzbG90IDAsIGNhbGxlZCBUTFNfU0xPVF9TRUxGIG11c3QgcG9pbnQgdG8gaXRzZWxmLgorICogdGhpcyBpcyByZXF1aXJlZCB0byBpbXBsZW1lbnQgdGhyZWFkLWxvY2FsIHN0b3JhZ2Ugd2l0aCB0aGUgeDg2CisgKiBMaW51eCBrZXJuZWwsIHRoYXQgcmVhZHMgdGhlIFRMUyBmcm9tIGZzOlswXSwgd2hlcmUgJ2ZzJyBpcyBhCisgKiB0aHJlYWQtc3BlY2lmaWMgc2VnbWVudCBkZXNjcmlwdG9yLi4uCisgKi8KKworLyogV2VsbCBrbm93biBUTFMgc2xvdHMgKi8KKyNkZWZpbmUgVExTX1NMT1RfU0VMRiAgICAgICAgICAgICAgIDAKKyNkZWZpbmUgVExTX1NMT1RfVEhSRUFEX0lEICAgICAgICAgIDEKKyNkZWZpbmUgVExTX1NMT1RfRVJSTk8gICAgICAgICAgICAgIDIKKworI2RlZmluZSBUTFNfU0xPVF9PUEVOR0xfQVBJICAgICAgICAgMworI2RlZmluZSBUTFNfU0xPVF9PUEVOR0wgICAgICAgICAgICAgNAorCisvKiBzbWFsbCB0ZWNobmljYWwgbm90ZTogaXQgaXMgbm90IHBvc3NpYmxlIHRvIGNhbGwgcHRocmVhZF9zZXRzcGVjaWZpYworICogb24ga2V5cyB0aGF0IGFyZSA8PSBUTFNfU0xPVF9NQVhfV0VMTF9LTk9XTiwgd2hpY2ggaXMgd2h5IGl0IGlzIHNldCB0bworICogVExTX1NMT1RfRVJSTk8uCisgKgorICogbGF0ZXIgc2xvdHMgbGlrZSBUTFNfU0xPVF9PUEVOR0wgYXJlIHByZS1hbGxvY2F0ZWQgdGhyb3VnaCB0aGUgdXNlIG9mCisgKiBUTFNfREVGQVVMVF9BTExPQ19NQVAuIHRoaXMgbWVhbnMgdGhhdCB0aGVyZSBpcyBubyBuZWVkIHRvIHVzZQorICogcHRocmVhZF9rZXlfY3JlYXRlKCkgdG8gaW5pdGlhbGl6ZSB0aGVtLiBvbiB0aGUgb3RoZXIgaGFuZCwgdGhlcmUgaXMKKyAqIG5vIGRlc3RydWN0b3IgYXNzb2NpYXRlZCB0byB0aGVtICh3ZSBtaWdodCBuZWVkIHRvIGltcGxlbWVudCB0aGlzIGxhdGVyKQorICovCisjZGVmaW5lIFRMU19TTE9UX01BWF9XRUxMX0tOT1dOICAgICBUTFNfU0xPVF9FUlJOTworCisjZGVmaW5lIFRMU19ERUZBVUxUX0FMTE9DX01BUCAgICAgICAweDAwMDAwMDFGCisKKy8qIHNldCB0aGUgVGhyZWFkIExvY2FsIFN0b3JhZ2UsIG11c3QgY29udGFpbiBhdCBsZWFzdCBCSU9OSUNfVExTX1NMT1RTIHBvaW50ZXJzICovCitleHRlcm4gdm9pZCBfX2luaXRfdGxzKHZvaWQqKiAgdGxzLCB2b2lkKiAgdGhyZWFkX2luZm8pOworCisvKiBzeXNjYWxsIG9ubHksIGRvIG5vdCBjYWxsIGRpcmVjdGx5ICovCitleHRlcm4gaW50IF9fc2V0X3Rscyh2b2lkICpwdHIpOworCisvKiBnZXQgdGhlIFRMUyAqLworI2lmZGVmIF9fYXJtX18KKyMgIGRlZmluZSBfX2dldF90bHMoKSAoICooKHZvbGF0aWxlIHZvaWQgKiopIDB4ZmZmZjBmZjApICkKKyNlbHNlCitleHRlcm4gdm9pZCogIF9fZ2V0X3Rscyggdm9pZCApOworI2VuZGlmCisKKy8qIHJldHVybiB0aGUgc3RhY2sgYmFzZSBhbmQgc2l6ZSwgdXNlZCBieSBvdXIgbWFsbG9jIGRlYnVnZ2VyICovCitleHRlcm4gdm9pZCogIF9fZ2V0X3N0YWNrX2Jhc2UoaW50ICAqcF9zdGFja19zaXplKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVExTX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdHR5Y2hhcnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdHR5Y2hhcnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90dHljaGFycy5oCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3R0eWRldi5oIGIvbGliYy9pbmNsdWRlL3N5cy90dHlkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy90dHlkZXYuaApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oIGIvbGliYy9pbmNsdWRlL3N5cy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkyYjQ1MmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3R5cGVzLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19UWVBFU19IXworI2RlZmluZSBfU1lTX1RZUEVTX0hfCisKKyNkZWZpbmUgX19uZWVkX3NpemVfdAorI2RlZmluZSBfX25lZWRfcHRyZGlmZl90CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisKKyNpbmNsdWRlIDxsaW51eC9wb3NpeF90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bWFjaGluZS9rZXJuZWwuaD4KKwordHlwZWRlZiBfX3UzMiAgICBfX2tlcm5lbF9kZXZfdDsKKworLyogYmUgY2FyZWZ1bCB3aXRoIF9fa2VybmVsX2dpZF90IGFuZCBfX2tlcm5lbF91aWRfdAorICogdGhlc2UgYXJlIGRlZmluZWQgYXMgMTYtYml0IGZvciBsZWdhY3kgcmVhc29uLCBidXQKKyAqIHRoZSBrZXJuZWwgdXNlcyAzMi1iaXRzIGluc3RlYWQuCisgKgorICogMzItYml0IHZhbHVlYSBhcmUgcmVxdWlyZWQgZm9yIEFuZHJvaWQsIHNvIHVzZQorICogX19rZXJuZWxfdWlkMzJfdCBhbmQgX19rZXJuZWxfZ2lkMzJfdAorICovCisKK3R5cGVkZWYgX19rZXJuZWxfYmxrY250X3QgICAgYmxrY250X3Q7Cit0eXBlZGVmIF9fa2VybmVsX2Jsa3NpemVfdCAgIGJsa3NpemVfdDsKK3R5cGVkZWYgX19rZXJuZWxfY2xvY2tfdCAgICAgY2xvY2tfdDsKK3R5cGVkZWYgX19rZXJuZWxfY2xvY2tpZF90ICAgY2xvY2tpZF90OwordHlwZWRlZiBfX2tlcm5lbF9kZXZfdCAgICAgICBkZXZfdDsKK3R5cGVkZWYgX19rZXJuZWxfZnNibGtjbnRfdCAgZnNibGtjbnRfdDsKK3R5cGVkZWYgX19rZXJuZWxfZnNmaWxjbnRfdCAgZnNmaWxjbnRfdDsKK3R5cGVkZWYgX19rZXJuZWxfZ2lkMzJfdCAgICAgZ2lkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2lkX3QgICAgICAgIGlkX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2lub190ICAgICAgIGlub190OwordHlwZWRlZiBfX2tlcm5lbF9rZXlfdCAgICAgICBrZXlfdDsKK3R5cGVkZWYgX19rZXJuZWxfbW9kZV90ICAgICAgbW9kZV90OwordHlwZWRlZiBfX2tlcm5lbF9ubGlua190CSBubGlua190OworI2RlZmluZSBfT0ZGX1RfREVGSU5FRF8KK3R5cGVkZWYgX19rZXJuZWxfb2ZmX3QgICAgICAgb2ZmX3Q7Cit0eXBlZGVmIF9fa2VybmVsX2xvZmZfdCAgICAgIGxvZmZfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9waWRfdAkJIHBpZF90OworCisvKiB3aGlsZSBQT1NJWCB3YW50cyB0aGVzZSBpbiA8c3lzL3R5cGVzLmg+LCB3ZQorICogZGVjbGFyZSB0aGVuIGluIDxwdGhyZWFkLmg+IGluc3RlYWQgKi8KKyNpZiAwCit0eXBlZGVmICAuLi4uIHB0aHJlYWRfYXR0cl90OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX2NvbmRfdDsKK3R5cGVkZWYgIC4uLi4gcHRocmVhZF9jb25kYXR0cl90OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX2tleV90OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX211dGV4X3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfb25jZV90OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX3J3bG9ja190OwordHlwZWRlZiAgLi4uLiBwdGhyZWFkX3J3bG9ja19hdHRyX3Q7Cit0eXBlZGVmICAuLi4uIHB0aHJlYWRfdDsKKyNlbmRpZgorCisjaWZuZGVmIF9TSVpFX1RfREVGSU5FRF8KKyNkZWZpbmUgX1NJWkVfVF9ERUZJTkVEXwordHlwZWRlZiB1bnNpZ25lZCBpbnQgIHNpemVfdDsKKyNlbmRpZgorCisvKiBzaXplX3QgaXMgZGVmaW5lZCBieSB0aGUgR0NDLXNwZWNpZmljIDxzdGRkZWYuaD4gKi8KKyNpZm5kZWYgX1NTSVpFX1RfREVGSU5FRF8KKyNkZWZpbmUgX1NTSVpFX1RfREVGSU5FRF8KK3R5cGVkZWYgbG9uZyBpbnQgIHNzaXplX3Q7CisjZW5kaWYKKwordHlwZWRlZiBfX2tlcm5lbF9zdXNlY29uZHNfdCAgc3VzZWNvbmRzX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3RpbWVfdCAgICAgICB0aW1lX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3VpZDMyX3QgICAgICAgIHVpZF90OwordHlwZWRlZiBzaWduZWQgbG9uZyAgICAgICAgICAgdXNlY29uZHNfdDsKKwordHlwZWRlZiBfX2tlcm5lbF9kYWRkcl90CWRhZGRyX3Q7Cit0eXBlZGVmIF9fa2VybmVsX3RpbWVyX3QJdGltZXJfdDsKK3R5cGVkZWYgX19rZXJuZWxfbXFkX3QJCW1xZF90OworCit0eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QgICAgY2FkZHJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50ICAgICAgICB1aW50X3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCAgICAgICAgdWludDsKKworLyogZm9yIHNvbWUgYXBwbGljYXRpb25zICovCisjaW5jbHVkZSA8c3lzL3N5c21hY3Jvcy5oPgorCisjaWZkZWYgX19CU0RfVklTSUJMRQordHlwZWRlZgl1bnNpZ25lZCBjaGFyCXVfY2hhcjsKK3R5cGVkZWYJdW5zaWduZWQgc2hvcnQJdV9zaG9ydDsKK3R5cGVkZWYJdW5zaWduZWQgaW50CXVfaW50OwordHlwZWRlZgl1bnNpZ25lZCBsb25nCXVfbG9uZzsKKwordHlwZWRlZiB1aW50MzJfdCAgICAgICB1X2ludDMyX3Q7Cit0eXBlZGVmIHVpbnQxNl90ICAgICAgIHVfaW50MTZfdDsKK3R5cGVkZWYgdWludDhfdCAgICAgICAgdV9pbnQ4X3Q7Cit0eXBlZGVmIHVpbnQ2NF90ICAgICAgIHVfaW50NjRfdDsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdWlvLmggYi9saWJjL2luY2x1ZGUvc3lzL3Vpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAyNTE3MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Vpby5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19VSU9fSF8KKyNkZWZpbmUgX1NZU19VSU9fSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2ludCByZWFkdihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOworaW50IHdyaXRldihpbnQsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqLCBpbnQpOworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogX1NZU19VSU9fSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXMvdW4uaCBiL2xpYmMvaW5jbHVkZS9zeXMvdW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzM4NjFmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5cy91bi5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19VTl9IXworI2RlZmluZSBfU1lTX1VOX0hfCisKKyNpbmNsdWRlIDxsaW51eC91bi5oPgorCisjZW5kaWYgLyogX1NZU19VTl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy91dGltZS5oIGIvbGliYy9pbmNsdWRlL3N5cy91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlmODgxMGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3V0aW1lLmgKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfU1lTX1VUSU1FX0hfCisjZGVmaW5lIF9TWVNfVVRJTUVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3V0aW1lLmg+CisKKyNlbmRpZiAvKiBfU1lTX1VUSU1FX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3V0c25hbWUuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdXRzbmFtZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1NGE5OTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3V0c25hbWUuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfVVRTTkFNRV9IXworI2RlZmluZSBfU1lTX1VUU05BTUVfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKyNkZWZpbmUgU1lTX05NTE4gNjUKKworc3RydWN0IHV0c25hbWUgeworICAgIGNoYXIgIHN5c25hbWUgICBbU1lTX05NTE5dOworICAgIGNoYXIgIG5vZGVuYW1lICBbU1lTX05NTE5dOworICAgIGNoYXIgIHJlbGVhc2UgICBbU1lTX05NTE5dOworICAgIGNoYXIgIHZlcnNpb24gICBbU1lTX05NTE5dOworICAgIGNoYXIgIG1hY2hpbmUgICBbU1lTX05NTE5dOworICAgIGNoYXIgIGRvbWFpbm5hbWVbU1lTX05NTE5dOworfTsKKworZXh0ZXJuIGludCB1bmFtZShzdHJ1Y3QgdXRzbmFtZSAqKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNfVVRTTkFNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy92ZnMuaCBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFkYWY1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS9zeXMvdmZzLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1NZU19WRlNfSF8KKyNkZWZpbmUgX1NZU19WRlNfSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCitfX0JFR0lOX0RFQ0xTCisKKy8qIG5vdGU6IHRoaXMgY29ycmVzcG9uZHMgdG8gdGhlIGtlcm5lbCdzIHN0YXRmczY0IHR5cGUgKi8KK3N0cnVjdCBzdGF0ZnMgeworICAgIHVpbnQzMl90ICAgICAgICBmX3R5cGU7CisgICAgdWludDMyX3QgICAgICAgIGZfYnNpemU7CisgICAgdWludDY0X3QgICAgICAgIGZfYmxvY2tzOworICAgIHVpbnQ2NF90ICAgICAgICBmX2JmcmVlOworICAgIHVpbnQ2NF90ICAgICAgICBmX2JhdmFpbDsKKyAgICB1aW50NjRfdCAgICAgICAgZl9maWxlczsKKyAgICB1aW50NjRfdCAgICAgICAgZl9mZnJlZTsKKyAgICBfX2tlcm5lbF9mc2lkX3QgZl9mc2lkOworICAgIHVpbnQzMl90ICAgICAgICBmX25hbWVsZW47CisgICAgdWludDMyX3QgICAgICAgIGZfZnJzaXplOworICAgIHVpbnQzMl90ICAgICAgICBmX3NwYXJlWzVdOworfTsKKworI2RlZmluZSAgQURGU19TVVBFUl9NQUdJQyAgICAgIDB4YWRmNQorI2RlZmluZSAgQUZGU19TVVBFUl9NQUdJQyAgICAgIDB4QURGRgorI2RlZmluZSAgQkVGU19TVVBFUl9NQUdJQyAgICAgIDB4NDI0NjUzMzEKKyNkZWZpbmUgIEJGU19NQUdJQyAgICAgICAgICAgICAweDFCQURGQUNFCisjZGVmaW5lICBDSUZTX01BR0lDX05VTUJFUiAgICAgMHhGRjUzNEQ0MgorI2RlZmluZSAgQ09EQV9TVVBFUl9NQUdJQyAgICAgIDB4NzM3NTcyNDUKKyNkZWZpbmUgIENPSF9TVVBFUl9NQUdJQyAgICAgICAweDAxMkZGN0I3CisjZGVmaW5lICBDUkFNRlNfTUFHSUMgICAgICAgICAgMHgyOGNkM2Q0NQorI2RlZmluZSAgREVWRlNfU1VQRVJfTUFHSUMgICAgIDB4MTM3MworI2RlZmluZSAgRUZTX1NVUEVSX01BR0lDICAgICAgIDB4MDA0MTRBNTMKKyNkZWZpbmUgIEVYVF9TVVBFUl9NQUdJQyAgICAgICAweDEzN0QKKyNkZWZpbmUgIEVYVDJfT0xEX1NVUEVSX01BR0lDICAweEVGNTEKKyNkZWZpbmUgIEVYVDJfU1VQRVJfTUFHSUMgICAgICAweEVGNTMKKyNkZWZpbmUgIEVYVDNfU1VQRVJfTUFHSUMgICAgICAweEVGNTMKKyNkZWZpbmUgIEhGU19TVVBFUl9NQUdJQyAgICAgICAweDQyNDQKKyNkZWZpbmUgIEhQRlNfU1VQRVJfTUFHSUMgICAgICAweEY5OTVFODQ5CisjZGVmaW5lICBIVUdFVExCRlNfTUFHSUMgICAgICAgMHg5NTg0NThmNgorI2RlZmluZSAgSVNPRlNfU1VQRVJfTUFHSUMgICAgIDB4OTY2MAorI2RlZmluZSAgSkZGUzJfU1VQRVJfTUFHSUMgICAgIDB4NzJiNgorI2RlZmluZSAgSkZTX1NVUEVSX01BR0lDICAgICAgIDB4MzE1MzQ2NGEKKyNkZWZpbmUgIE1JTklYX1NVUEVSX01BR0lDICAgICAweDEzN0YgLyogb3JpZy4gbWluaXggKi8KKyNkZWZpbmUgIE1JTklYX1NVUEVSX01BR0lDMiAgICAweDEzOEYgLyogMzAgY2hhciBtaW5peCAqLworI2RlZmluZSAgTUlOSVgyX1NVUEVSX01BR0lDICAgIDB4MjQ2OCAvKiBtaW5peCBWMiAqLworI2RlZmluZSAgTUlOSVgyX1NVUEVSX01BR0lDMiAgIDB4MjQ3OCAvKiBtaW5peCBWMiwgMzAgY2hhciBuYW1lcyAqLworI2RlZmluZSAgTVNET1NfU1VQRVJfTUFHSUMgICAgIDB4NGQ0NAorI2RlZmluZSAgTkNQX1NVUEVSX01BR0lDICAgICAgIDB4NTY0YworI2RlZmluZSAgTkZTX1NVUEVSX01BR0lDICAgICAgIDB4Njk2OQorI2RlZmluZSAgTlRGU19TQl9NQUdJQyAgICAgICAgIDB4NTM0NjU0NGUKKyNkZWZpbmUgIE9QRU5QUk9NX1NVUEVSX01BR0lDICAweDlmYTEKKyNkZWZpbmUgIFBST0NfU1VQRVJfTUFHSUMgICAgICAweDlmYTAKKyNkZWZpbmUgIFFOWDRfU1VQRVJfTUFHSUMgICAgICAweDAwMmYKKyNkZWZpbmUgIFJFSVNFUkZTX1NVUEVSX01BR0lDICAweDUyNjU0OTczCisjZGVmaW5lICBST01GU19NQUdJQyAgICAgICAgICAgMHg3Mjc1CisjZGVmaW5lICBTTUJfU1VQRVJfTUFHSUMgICAgICAgMHg1MTdCCisjZGVmaW5lICBTWVNWMl9TVVBFUl9NQUdJQyAgICAgMHgwMTJGRjdCNgorI2RlZmluZSAgU1lTVjRfU1VQRVJfTUFHSUMgICAgIDB4MDEyRkY3QjUKKyNkZWZpbmUgIFRNUEZTX01BR0lDICAgICAgICAgICAweDAxMDIxOTk0CisjZGVmaW5lICBVREZfU1VQRVJfTUFHSUMgICAgICAgMHgxNTAxMzM0NgorI2RlZmluZSAgVUZTX01BR0lDICAgICAgICAgICAgIDB4MDAwMTE5NTQKKyNkZWZpbmUgIFVTQkRFVklDRV9TVVBFUl9NQUdJQyAweDlmYTIKKyNkZWZpbmUgIFZYRlNfU1VQRVJfTUFHSUMgICAgICAweGE1MDFGQ0Y1CisjZGVmaW5lICBYRU5JWF9TVVBFUl9NQUdJQyAgICAgMHgwMTJGRjdCNAorI2RlZmluZSAgWEZTX1NVUEVSX01BR0lDICAgICAgIDB4NTg0NjUzNDIKKyNkZWZpbmUgIF9YSUFGU19TVVBFUl9NQUdJQyAgICAweDAxMkZEMTZECisKK2V4dGVybiBpbnQgc3RhdGZzKGNvbnN0IGNoYXIgKiwgc3RydWN0IHN0YXRmcyAqKTsKK2V4dGVybiBpbnQgZnN0YXRmcyhpbnQsIHN0cnVjdCBzdGF0ZnMgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1ZGU19IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3N5cy92dC5oIGIvbGliYy9pbmNsdWRlL3N5cy92dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzN2E4NjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3Z0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGxpbnV4L3Z0Lmg+CmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvc3lzL3dhaXQuaCBiL2xpYmMvaW5jbHVkZS9zeXMvd2FpdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYTE4MzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvc3lzL3dhaXQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNfV0FJVF9IXworI2RlZmluZSBfU1lTX1dBSVRfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworX19CRUdJTl9ERUNMUworCisjZGVmaW5lIFdFWElUU1RBVFVTKHMpICAoKChzKSAmIDB4ZmYwMCkgPj4gOCkKKyNkZWZpbmUgV0NPUkVEVU1QKHMpICAgICgocykgJiAweDgwKQorI2RlZmluZSBXVEVSTVNJRyhzKSAgICAgKChzKSAmIDB4N2YpCisjZGVmaW5lIFdTVE9QU0lHKHMpICAgICBXRVhJVFNUQVRVUyhzKQorCisjZGVmaW5lIFdJRkVYSVRFRChzKSAgICAoV1RFUk1TSUcocykgPT0gMCkKKyNkZWZpbmUgV0lGU1RPUFBFRChzKSAgIChXVEVSTVNJRyhzKSA9PSAweDdmKQorI2RlZmluZSBXSUZTSUdOQUxFRChzKSAgKFdURVJNU0lHKChzKSsxKSA+PSAyKQorCitleHRlcm4gcGlkX3QgIHdhaXQoaW50ICopOworZXh0ZXJuIHBpZF90ICB3YWl0cGlkKHBpZF90LCBpbnQgKiwgaW50KTsKK2V4dGVybiBwaWRfdCAgd2FpdDMoaW50ICosIGludCwgc3RydWN0IHJ1c2FnZSAqKTsKK2V4dGVybiBwaWRfdCAgd2FpdDQocGlkX3QsIGludCAqLCBpbnQsIHN0cnVjdCBydXNhZ2UgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfU1lTX1dBSVRfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvaW5jbHVkZS9zeXNsb2cuaCBiL2xpYmMvaW5jbHVkZS9zeXNsb2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzViYzc5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3N5c2xvZy5oCkBAIC0wLDAgKzEsMTE2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaWZuZGVmIF9TWVNMT0dfSAorI2RlZmluZSBfU1lTTE9HX0gKKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK19fQkVHSU5fREVDTFMKKworLyogQWxlcnQgbGV2ZWxzICovCisjZGVmaW5lIExPR19FTUVSRwkwCisjZGVmaW5lIExPR19BTEVSVAkxCisjZGVmaW5lIExPR19DUklUCTIKKyNkZWZpbmUgTE9HX0VSUgkJMworI2RlZmluZSBMT0dfV0FSTklORwk0CisjZGVmaW5lIExPR19OT1RJQ0UJNQorI2RlZmluZSBMT0dfSU5GTwk2CisjZGVmaW5lIExPR19ERUJVRwk3CisKKyNkZWZpbmUgTE9HX1BSSU1BU0sJNworI2RlZmluZSBMT0dfUFJJKHgpCSgoeCkgJiBMT0dfUFJJTUFTSykKKworCisvKiBGYWNpbGl0aWVzOyBub3QgYWN0dWFsbHkgdXNlZCAqLworI2RlZmluZSBMT0dfS0VSTgkwMDAwCisjZGVmaW5lIExPR19VU0VSCTAwMTAKKyNkZWZpbmUgTE9HX01BSUwJMDAyMAorI2RlZmluZSBMT0dfREFFTU9OCTAwMzAKKyNkZWZpbmUgTE9HX0FVVEgJMDA0MAorI2RlZmluZSBMT0dfU1lTTE9HCTAwNTAKKyNkZWZpbmUgTE9HX0xQUgkJMDA2MAorI2RlZmluZSBMT0dfTkVXUwkwMDcwCisjZGVmaW5lIExPR19VVUNQCTAxMDAKKyNkZWZpbmUgTE9HX0NST04JMDExMAorI2RlZmluZSBMT0dfQVVUSFBSSVYJMDEyMAorI2RlZmluZSBMT0dfRlRQCQkwMTMwCisjZGVmaW5lIExPR19MT0NBTDAJMDIwMAorI2RlZmluZSBMT0dfTE9DQUwxCTAyMTAKKyNkZWZpbmUgTE9HX0xPQ0FMMgkwMjIwCisjZGVmaW5lIExPR19MT0NBTDMJMDIzMAorI2RlZmluZSBMT0dfTE9DQUw0CTAyNDAKKyNkZWZpbmUgTE9HX0xPQ0FMNQkwMjUwCisjZGVmaW5lIExPR19MT0NBTDYJMDI2MAorI2RlZmluZSBMT0dfTE9DQUw3CTAyNzAKKworI2RlZmluZSBMT0dfRkFDTUFTSwkwMTc3MAorI2RlZmluZSBMT0dfRkFDKHgpCSgoKHgpID4+IDMpICYgKExPR19GQUNNQVNLID4+IDMpKQorCisjZGVmaW5lCUxPR19NQVNLKHByaSkJKDEgPDwgKHByaSkpCQkvKiBtYXNrIGZvciBvbmUgcHJpb3JpdHkgKi8KKyNkZWZpbmUJTE9HX1VQVE8ocHJpKQkoKDEgPDwgKChwcmkpKzEpKSAtIDEpCS8qIGFsbCBwcmlvcml0aWVzIHRocm91Z2ggcHJpICovCisKKy8qIG9wZW5sb2coKSBmbGFnczsgb25seSBMT0dfUElEIGFuZCBMT0dfUEVSUk9SIHN1cHBvcnRlZCAqLworI2RlZmluZSAgICAgICAgTE9HX1BJRCAgICAgICAgIDB4MDEgICAgLyogaW5jbHVkZSBwaWQgd2l0aCBtZXNzYWdlICovCisjZGVmaW5lICAgICAgICBMT0dfQ09OUyAgICAgICAgMHgwMiAgICAvKiB3cml0ZSB0byBjb25zb2xlIG9uIGxvZ2dlciBlcnJvciAqLworI2RlZmluZSAgICAgICAgTE9HX09ERUxBWSAgICAgIDB4MDQgICAgLyogZGVsYXkgY29ubmVjdGlvbiB1bnRpbCBzeXNsb2coKSAqLworI2RlZmluZSAgICAgICAgTE9HX05ERUxBWSAgICAgIDB4MDggICAgLyogb3BlbiBjb25uZWN0aW9uIGltbWVkaWF0ZWx5ICovCisjZGVmaW5lICAgICAgICBMT0dfTk9XQUlUICAgICAgMHgxMCAgICAvKiB3YWl0IGZvciBjaGlsZCBwcm9jZXNzZXMgKHVudXNlZCBvbiBsaW51eCkgKi8KKyNkZWZpbmUgICAgICAgIExPR19QRVJST1IgICAgICAweDIwICAgIC8qIGFkZGl0aW9uYWwgbG9nZ2luZyB0byBzdGRlcnIgKi8KKworLyogQklPTklDOiB0aGUgZm9sbG93aW5nIGRlZmluaXRpb25zIGFyZSBmcm9tIE9wZW5CU0QncyBzeXMvc3lzbG9nLmgKKyAqLworc3RydWN0IHN5c2xvZ19kYXRhIHsKKwlpbnQJbG9nX2ZpbGU7CisgICAgICAgIGludAljb25uZWN0ZWQ7CisgICAgICAgIGludAlvcGVuZWQ7CisgICAgICAgIGludAlsb2dfc3RhdDsKKyAgICAgICAgY29uc3QgY2hhciAJKmxvZ190YWc7CisgICAgICAgIGludCAJbG9nX2ZhYzsKKyAgICAgICAgaW50IAlsb2dfbWFzazsKK307CisKKyNkZWZpbmUgU1lTTE9HX0RBVEFfSU5JVCB7LTEsIDAsIDAsIDAsIChjb25zdCBjaGFyICopMCwgTE9HX1VTRVIsIDB4ZmZ9CisKKyNkZWZpbmUgX1BBVEhfTE9HICAiL2Rldi9rbXNnIgorCitleHRlcm4gdm9pZAljbG9zZWxvZyh2b2lkKTsKK2V4dGVybiB2b2lkCW9wZW5sb2coY29uc3QgY2hhciAqLCBpbnQsIGludCk7CitleHRlcm4gaW50CXNldGxvZ21hc2soaW50KTsKK2V4dGVybiB2b2lkCXN5c2xvZyhpbnQsIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiB2b2lkCXZzeXNsb2coaW50LCBjb25zdCBjaGFyICosIHZhX2xpc3QpOworZXh0ZXJuIHZvaWQJY2xvc2Vsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CitleHRlcm4gdm9pZAlvcGVubG9nX3IoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IHN5c2xvZ19kYXRhICopOworZXh0ZXJuIGludAlzZXRsb2dtYXNrX3IoaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CitleHRlcm4gdm9pZAlzeXNsb2dfcihpbnQsIHN0cnVjdCBzeXNsb2dfZGF0YSAqLCBjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gdm9pZAl2c3lzbG9nX3IoaW50LCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKiwgY29uc3QgY2hhciAqLCB2YV9saXN0KTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9TWVNMT0dfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3Rlcm1pb3MuaCBiL2xpYmMvaW5jbHVkZS90ZXJtaW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQzZmUxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS90ZXJtaW9zLmgKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1RFUk1JT1NfSF8KKyNkZWZpbmUgX1RFUk1JT1NfSF8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy9pb2N0bC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPGxpbnV4L3Rlcm1pb3MuaD4KKworX19CRUdJTl9ERUNMUworCisvKiBSZWRlZmluZSB0aGVzZSB0byBtYXRjaCB0aGVpciBpb2N0bCBudW1iZXIgKi8KKyN1bmRlZiAgVENTQU5PVworI2RlZmluZSBUQ1NBTk9XICAgIFRDU0VUUworCisjdW5kZWYgIFRDU0FEUkFJTgorI2RlZmluZSBUQ1NBRFJBSU4gIFRDU0VUU1cKKworI3VuZGVmICBUQ1NBRkxVU0gKKyNkZWZpbmUgVENTQUZMVVNIICBUQ1NFVFNGCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y2dldGF0dHIoaW50IGZkLCBzdHJ1Y3QgdGVybWlvcyAqcykKK3sKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRDR0VUUywgcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y3NldGF0dHIoaW50IGZkLCBpbnQgX19vcHQsIGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQoreworICAgIHJldHVybiBpb2N0bChmZCwgX19vcHQsICh2b2lkICopcyk7Cit9CisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y2Zsb3coaW50IGZkLCBpbnQgYWN0aW9uKQoreworICAgIHJldHVybiBpb2N0bChmZCwgVENYT05DLCAodm9pZCAqKShpbnRwdHJfdClhY3Rpb24pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNmbHVzaChpbnQgZmQsIGludCBfX3F1ZXVlKQoreworICAgIHJldHVybiBpb2N0bChmZCwgVENGTFNILCAodm9pZCAqKShpbnRwdHJfdClfX3F1ZXVlKTsKK30KKworc3RhdGljIF9faW5saW5lX18gcGlkX3QgdGNnZXRwZ3JwKGludCBmZCkKK3sKKyAgICBwaWRfdCBfcGlkOworICAgIHJldHVybiBpb2N0bChmZCwgVElPQ0dQR1JQLCAmX3BpZCkgPyAocGlkX3QpLTEgOiBfcGlkOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGNzZXRwZ3JwKGludCBmZCwgcGlkX3QgX3BpZCkKK3sKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NTUEdSUCwgJl9waWQpOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBwaWRfdCB0Y2dldHNpZChpbnQgZmQpCit7CisgICAgcGlkX3QgX3BpZDsKKyAgICByZXR1cm4gaW9jdGwoZmQsIFRJT0NHU0lELCAmX3BpZCkgPyAocGlkX3QpLTEgOiBfcGlkOworfSAgCisKK3N0YXRpYyBfX2lubGluZV9fIGludCB0Y3NlbmRicmVhayhpbnQgZmQsIGludCBfX2R1cmF0aW9uKQoreworICAgIHJldHVybiBpb2N0bChmZCwgVENTQlJLUCwgKHZvaWQgKikodWludHB0cl90KV9fZHVyYXRpb24pOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzcGVlZF90IGNmZ2V0b3NwZWVkKGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQoreworICAgIHJldHVybiAoc3BlZWRfdCkocy0+Y19jZmxhZyAmIENCQVVEKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGNmc2V0b3NwZWVkKHN0cnVjdCB0ZXJtaW9zICpzLCBzcGVlZF90ICBzcGVlZCkKK3sKKyAgICBzLT5jX2NmbGFnID0gKHMtPmNfY2ZsYWcgJiB+Q0JBVUQpIHwgKHNwZWVkICYgQ0JBVUQpOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgX19pbmxpbmVfXyBzcGVlZF90IGNmZ2V0aXNwZWVkKGNvbnN0IHN0cnVjdCB0ZXJtaW9zICpzKQoreworICAgIHJldHVybiAoc3BlZWRfdCkocy0+Y19jZmxhZyAmIENCQVVEKTsKK30KKworc3RhdGljIF9faW5saW5lX18gaW50IGNmc2V0aXNwZWVkKHN0cnVjdCB0ZXJtaW9zICpzLCBzcGVlZF90ICBzcGVlZCkKK3sKKyAgICBzLT5jX2NmbGFnID0gKHMtPmNfY2ZsYWcgJiB+Q0JBVUQpIHwgKHNwZWVkICYgQ0JBVUQpOworICByZXR1cm4gMDsKK30KKworc3RhdGljIF9faW5saW5lX18gdm9pZCBjZm1ha2VyYXcoc3RydWN0IHRlcm1pb3MgKnMpCit7CisgICAgcy0+Y19pZmxhZyAmPSB+KElHTkJSS3xCUktJTlR8UEFSTVJLfElTVFJJUHxJTkxDUnxJR05DUnxJQ1JOTHxJWE9OKTsKKyAgICBzLT5jX29mbGFnICY9IH5PUE9TVDsKKyAgICBzLT5jX2xmbGFnICY9IH4oRUNIT3xFQ0hPTkx8SUNBTk9OfElTSUd8SUVYVEVOKTsKKyAgICBzLT5jX2NmbGFnICY9IH4oQ1NJWkV8UEFSRU5CKTsKKyAgICBzLT5jX2NmbGFnIHw9IENTODsKK30KKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9URVJNSU9TX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdGltZS5oIGIvbGliYy9pbmNsdWRlL3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjUxZmYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3RpbWUuaApAQCAtMCwwICsxLDExMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfVElNRV9IXworI2RlZmluZSBfVElNRV9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2RlZmluZSBfX0FSQ0hfU0lfVUlEX1QgX19rZXJuZWxfdWlkMzJfdAorI2luY2x1ZGUgPGFzbS9zaWdpbmZvLmg+CisjdW5kZWYgX19BUkNIX1NJX1VJRF9UCisKK19fQkVHSU5fREVDTFMKKworZXh0ZXJuIHRpbWVfdCAgIHRpbWUodGltZV90ICopOworZXh0ZXJuIGludCAgICAgIG5hbm9zbGVlcChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiwgc3RydWN0IHRpbWVzcGVjICopOworCitleHRlcm4gY2hhciAqc3RydG90aW1ldmFsKGNvbnN0IGNoYXIgKnN0ciwgc3RydWN0IHRpbWV2YWwgKnR2KTsKKworc3RydWN0IHRtIHsKKyAgIGludCAgICAgdG1fc2VjOyAgICAgICAgIC8qIHNlY29uZHMgKi8KKyAgIGludCAgICAgdG1fbWluOyAgICAgICAgIC8qIG1pbnV0ZXMgKi8KKyAgIGludCAgICAgdG1faG91cjsgICAgICAgIC8qIGhvdXJzICovCisgICBpbnQgICAgIHRtX21kYXk7ICAgICAgICAvKiBkYXkgb2YgdGhlIG1vbnRoICovCisgICBpbnQgICAgIHRtX21vbjsgICAgICAgICAvKiBtb250aCAqLworICAgaW50ICAgICB0bV95ZWFyOyAgICAgICAgLyogeWVhciAqLworICAgaW50ICAgICB0bV93ZGF5OyAgICAgICAgLyogZGF5IG9mIHRoZSB3ZWVrICovCisgICBpbnQgICAgIHRtX3lkYXk7ICAgICAgICAvKiBkYXkgaW4gdGhlIHllYXIgKi8KKyAgIGludCAgICAgdG1faXNkc3Q7ICAgICAgIC8qIGRheWxpZ2h0IHNhdmluZyB0aW1lICovCisKKyAgIGxvbmcgaW50IHRtX2dtdG9mZjsgICAgIC8qIFNlY29uZHMgZWFzdCBvZiBVVEMuICAqLworICAgY29uc3QgY2hhciAqdG1fem9uZTsgICAgLyogVGltZXpvbmUgYWJicmV2aWF0aW9uLiAgKi8KKworfTsKKworLyogZGVmaW5pbmcgVE1fWk9ORSBpbmRpY2F0ZXMgdGhhdCB3ZSBoYXZlIGEgInRpbWV6b25lIGFiYnJldmlhdGlvbiIgZmllbGQgaW4KKyAqIHN0cnVjdCB0bSwgdGhlIHZhbHVlIHNob3VsZCBiZSB0aGUgZmllbGQgbmFtZQorICovCisjZGVmaW5lICAgVE1fWk9ORSAgIHRtX3pvbmUKKworZXh0ZXJuIGNoYXIqIGFzY3RpbWUoY29uc3Qgc3RydWN0IHRtKiBhKTsKKworLyogUmV0dXJuIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gVElNRTEgYW5kIFRJTUUwLiAgKi8KK2V4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCk7CitleHRlcm4gdGltZV90IG1rdGltZSAoc3RydWN0IHRtICphKTsKKworZXh0ZXJuIHN0cnVjdCB0bSogIGxvY2FsdGltZShjb25zdCB0aW1lX3QgKnQpOworZXh0ZXJuIHN0cnVjdCB0bSogIGxvY2FsdGltZV9yKGNvbnN0IHRpbWVfdCAqdGltZXAsIHN0cnVjdCB0bSAqcmVzdWx0KTsKKworZXh0ZXJuIHN0cnVjdCB0bSogIGdtdGltZShjb25zdCB0aW1lX3QgKnRpbWVwKTsKK2V4dGVybiBzdHJ1Y3QgdG0qICBnbXRpbWVfcihjb25zdCB0aW1lX3QgKnRpbWVwLCBzdHJ1Y3QgdG0gKnJlc3VsdCk7CisKK2V4dGVybiBjaGFyKiAgICAgICBzdHJwdGltZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHRtICp0bSk7CitleHRlcm4gc2l6ZV90ICAgICAgc3RyZnRpbWUoY2hhciAqcywgc2l6ZV90IG1heCwgY29uc3QgY2hhciAqZm9ybWF0LCBjb25zdCBzdHJ1Y3QgdG0gKnRtKTsKKworZXh0ZXJuIGNoYXIgKmN0aW1lKGNvbnN0IHRpbWVfdCAqdGltZXApOworZXh0ZXJuIGNoYXIgKmN0aW1lX3IoY29uc3QgdGltZV90ICp0aW1lcCwgY2hhciAqYnVmKTsKKworLyogZ2xvYmFsIGluY2x1ZGVzICovCitleHRlcm4gY2hhciogICAgIHR6bmFtZVtdOworZXh0ZXJuIGludCAgICAgICBkYXlsaWdodDsKK2V4dGVybiBsb25nIGludCAgdGltZXpvbmU7CisKKyNkZWZpbmUgQ0xPQ0tTX1BFUl9TRUMgICAgIDEwMDAwMDAKKworZXh0ZXJuIGNsb2NrX3QgICBjbG9jaygpOworCisvKiBCSU9OSUM6IGV4dHJhIGxpbnV4IGNsb2NrIGdvb2RpZXMgKi8KK2V4dGVybiBpbnQgY2xvY2tfZ2V0cmVzKGludCwgc3RydWN0IHRpbWVzcGVjICopOworZXh0ZXJuIGludCBjbG9ja19nZXR0aW1lKGludCwgc3RydWN0IHRpbWVzcGVjICopOworCisjZGVmaW5lIENMT0NLX1JFQUxUSU1FICAgICAgICAgICAgIDAKKyNkZWZpbmUgQ0xPQ0tfTU9OT1RPTklDICAgICAgICAgICAgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgICAyCisjZGVmaW5lIENMT0NLX1RIUkVBRF9DUFVUSU1FX0lEICAgIDMKKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUVfSFIgICAgICAgICAgNAorI2RlZmluZSBDTE9DS19NT05PVE9OSUNfSFIgICAgICAgICA1CisKK2V4dGVybiBpbnQgIHRpbWVyX2NyZWF0ZShpbnQsIHN0cnVjdCBzaWdldmVudCosIHRpbWVyX3QqKTsKK2V4dGVybiBpbnQgIHRpbWVyX2RlbGV0ZSh0aW1lcl90KTsKK2V4dGVybiBpbnQgIHRpbWVyX3NldHRpbWUodGltZXJfdCB0aW1lcmlkLCBpbnQgZmxhZ3MsIGNvbnN0IHN0cnVjdCBpdGltZXJzcGVjICp2YWx1ZSwgc3RydWN0IGl0aW1lcnNwZWMgKm92YWx1ZSk7CitleHRlcm4gaW50ICB0aW1lcl9nZXR0aW1lKHRpbWVyX3QgdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKnZhbHVlKTsKK2V4dGVybiBpbnQgIHRpbWVyX2dldG92ZXJydW4odGltZXJfdCAgdGltZXJpZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVElNRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3VuaXN0ZC5oIGIvbGliYy9pbmNsdWRlL3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5NmIxNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvdW5pc3RkLmgKQEAgLTAsMCArMSwxOTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1VOSVNURF9IXworI2RlZmluZSBfVU5JU1REX0hfCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc2VsZWN0Lmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxsaW51eC9jYXBhYmlsaXR5Lmg+CisKK19fQkVHSU5fREVDTFMKKworLyogU3RhbmRhcmQgZmlsZSBkZXNjcmlwdG9yIG51bWJlcnMuICovCisjZGVmaW5lIFNURElOX0ZJTEVOTwkwCisjZGVmaW5lIFNURE9VVF9GSUxFTk8JMQorI2RlZmluZSBTVERFUlJfRklMRU5PCTIKKworLyogVmFsdWVzIGZvciB3aGVuY2UgaW4gZnNlZWsgYW5kIGxzZWVrICovCisjZGVmaW5lIFNFRUtfU0VUIDAKKyNkZWZpbmUgU0VFS19DVVIgMQorI2RlZmluZSBTRUVLX0VORCAyCisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKK2V4dGVybiBfX25vcmV0dXJuIHZvaWQgX2V4aXQoaW50KTsKKworZXh0ZXJuIHBpZF90ICBmb3JrKHZvaWQpOworZXh0ZXJuIHBpZF90ICB2Zm9yayh2b2lkKTsKK2V4dGVybiBwaWRfdCAgZ2V0cGlkKHZvaWQpOworZXh0ZXJuIHBpZF90ICBnZXR0aWQodm9pZCk7CitleHRlcm4gcGlkX3QgIGdldHBnaWQocGlkX3QpOworZXh0ZXJuIGludCAgICBzZXRwZ2lkKHBpZF90LCBwaWRfdCk7CitleHRlcm4gcGlkX3QgIGdldHBwaWQodm9pZCk7CitleHRlcm4gcGlkX3QgIGdldHBncnAodm9pZCk7CitleHRlcm4gaW50ICAgIHNldHBncnAodm9pZCk7CitleHRlcm4gcGlkX3QgIHNldHNpZCh2b2lkKTsKK2V4dGVybiBwaWRfdCAgZ2V0c2lkKHBpZF90KTsKKworZXh0ZXJuIGludCBleGVjdihjb25zdCBjaGFyICosIGNoYXIgKiBjb25zdCAqKTsKK2V4dGVybiBpbnQgZXhlY3ZwKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICopOworZXh0ZXJuIGludCBleGVjdmUoY29uc3QgY2hhciAqLCBjaGFyICogY29uc3QgKiwgY2hhciAqIGNvbnN0ICopOworZXh0ZXJuIGludCBleGVjdnBlKGNvbnN0IGNoYXIgKiwgY2hhciAqIGNvbnN0ICosIGNoYXIgKiBjb25zdCAqKTsKK2V4dGVybiBpbnQgZXhlY2woY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLik7CitleHRlcm4gaW50IGV4ZWNscChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgLi4uKTsKK2V4dGVybiBpbnQgZXhlY2xlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBleGVjbHBlKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4pOworZXh0ZXJuIGludCBjYXBnZXQoY2FwX3VzZXJfaGVhZGVyX3QgaGRycCwgY2FwX3VzZXJfZGF0YV90IGRhdGFwKTsKK2V4dGVybiBpbnQgY2Fwc2V0KGNhcF91c2VyX2hlYWRlcl90IGhkcnAsIGNvbnN0IGNhcF91c2VyX2RhdGFfdCBkYXRhcCk7CitleHRlcm4gaW50IHByY3RsKGludCAgb3B0aW9uLCAgdW5zaWduZWQgbG9uZyBhcmcyLCB1bnNpZ25lZCBsb25nIGFyZzMsCisgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnNCwgdW5zaWduZWQgbG9uZyBhcmc1KTsKKworZXh0ZXJuIGludCBuaWNlKGludCk7CisKK2V4dGVybiBpbnQgc2V0dWlkKHVpZF90KTsKK2V4dGVybiB1aWRfdCBnZXR1aWQodm9pZCk7CitleHRlcm4gaW50IHNldGV1aWQodWlkX3QpOworZXh0ZXJuIHVpZF90IGdldGV1aWQodm9pZCk7CitleHRlcm4gaW50IHNldGdpZChnaWRfdCk7CitleHRlcm4gZ2lkX3QgZ2V0Z2lkKHZvaWQpOworZXh0ZXJuIGludCBzZXRlZ2lkKGdpZF90KTsKK2V4dGVybiBnaWRfdCBnZXRlZ2lkKHZvaWQpOworZXh0ZXJuIGludCBnZXRncm91cHMoaW50LCBnaWRfdCAqKTsKK2V4dGVybiBpbnQgc2V0Z3JvdXBzKHNpemVfdCwgY29uc3QgZ2lkX3QgKik7CitleHRlcm4gaW50IHNldHJldWlkKHVpZF90LCB1aWRfdCk7CitleHRlcm4gaW50IHNldHJlZ2lkKGdpZF90LCBnaWRfdCk7CitleHRlcm4gaW50IHNldHJlc3VpZCh1aWRfdCwgdWlkX3QsIHVpZF90KTsKK2V4dGVybiBpbnQgc2V0cmVzZ2lkKGdpZF90LCBnaWRfdCwgZ2lkX3QpOworZXh0ZXJuIGludCBnZXRyZXN1aWQodWlkX3QgKnJ1aWQsIHVpZF90ICpldWlkLCB1aWRfdCAqc3VpZCk7CitleHRlcm4gaW50IGdldHJlc2dpZChnaWRfdCAqcmdpZCwgZ2lkX3QgKmVnaWQsIGdpZF90ICpzZ2lkKTsKK2V4dGVybiBpbnQgZ2V0ZnN1aWQodWlkX3QpOworZXh0ZXJuIGludCBzZXRmc3VpZCh1aWRfdCk7CitleHRlcm4gaW50IGlzc2V0dWdpZCh2b2lkKTsKK2V4dGVybiBjaGFyKiBnZXRsb2dpbih2b2lkKTsKK2V4dGVybiBpbnQgZ2V0bG9naW5fcihjaGFyKiBuYW1lLCBzaXplX3QgbmFtZXNpemUpOworCisKKy8qIE1hY3JvcyBmb3IgYWNjZXNzKCkgKi8KKyNkZWZpbmUgUl9PSyAgNCAgLyogUmVhZCAqLworI2RlZmluZSBXX09LICAyICAvKiBXcml0ZSAqLworI2RlZmluZSBYX09LICAxICAvKiBFeGVjdXRlICovCisjZGVmaW5lIEZfT0sgIDAgIC8qIEV4aXN0ZW5jZSAqLworCitleHRlcm4gaW50IGFjY2Vzcyhjb25zdCBjaGFyICosIGludCk7CitleHRlcm4gaW50IGxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCB1bmxpbmsoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgY2hkaXIoY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgZmNoZGlyKGludCk7CitleHRlcm4gaW50IGNobW9kKGNvbnN0IGNoYXIgKiwgbW9kZV90KTsKK2V4dGVybiBpbnQgZmNobW9kKGludCwgbW9kZV90KTsKK2V4dGVybiBpbnQgbWtkaXIoY29uc3QgY2hhciAqLCBtb2RlX3QpOworZXh0ZXJuIGludCBybWRpcihjb25zdCBjaGFyICopOworZXh0ZXJuIGludCBwaXBlKGludCAqKTsKK2V4dGVybiBpbnQgY2hyb290KGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50IHN5bWxpbmsoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOworZXh0ZXJuIGludCByZWFkbGluayhjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgY2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpOworZXh0ZXJuIGludCBmY2hvd24oaW50LCB1aWRfdCwgZ2lkX3QpOworZXh0ZXJuIGludCBsY2hvd24oY29uc3QgY2hhciAqLCB1aWRfdCwgZ2lkX3QpOworZXh0ZXJuIGNoYXIgKmdldGN3ZChjaGFyICosIHNpemVfdCk7CisKK2V4dGVybiBpbnQgc3luYyh2b2lkKTsKKworZXh0ZXJuIGludCBjbG9zZShpbnQpOworZXh0ZXJuIG9mZl90IGxzZWVrKGludCwgb2ZmX3QsIGludCk7CitleHRlcm4gbG9mZl90IGxzZWVrNjQoaW50LCBsb2ZmX3QsIGludCk7CisKK2V4dGVybiBzc2l6ZV90IHJlYWQoaW50LCB2b2lkICosIHNpemVfdCk7CitleHRlcm4gc3NpemVfdCB3cml0ZShpbnQsIGNvbnN0IHZvaWQgKiwgc2l6ZV90KTsKK2V4dGVybiBzc2l6ZV90IHByZWFkKGludCwgdm9pZCAqLCBzaXplX3QsIG9mZl90KTsKK2V4dGVybiBzc2l6ZV90IHB3cml0ZShpbnQsIHZvaWQgKiwgc2l6ZV90LCBvZmZfdCk7CisKK2V4dGVybiBpbnQgZHVwKGludCk7CitleHRlcm4gaW50IGR1cDIoaW50LCBpbnQpOworZXh0ZXJuIGludCBmY250bChpbnQsIGludCwgLi4uKTsKK2V4dGVybiBpbnQgaW9jdGwoaW50LCBpbnQsIC4uLik7CitleHRlcm4gaW50IGZsb2NrKGludCwgaW50KTsKK2V4dGVybiBpbnQgZnN5bmMoaW50KTsKK2V4dGVybiBpbnQgZmRhdGFzeW5jKGludCk7CitleHRlcm4gaW50IGZ0cnVuY2F0ZShpbnQsIG9mZl90KTsKKworZXh0ZXJuIGludCBwYXVzZSh2b2lkKTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0odW5zaWduZWQgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBpbnQgc2xlZXAodW5zaWduZWQgaW50KTsKK2V4dGVybiB2b2lkIHVzbGVlcCh1bnNpZ25lZCBsb25nKTsKKworZXh0ZXJuIGludCBnZXRob3N0bmFtZShjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50IHNldGhvc3RuYW1lKGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK2V4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZShjaGFyICosIHNpemVfdCk7CitleHRlcm4gaW50IHNldGRvbWFpbm5hbWUoY29uc3QgY2hhciAqLCBzaXplX3QpOworCitleHRlcm4gaW50IGdldGR0YWJsZXNpemUodm9pZCk7CisKK2V4dGVybiB2b2lkICpfX2Jyayh2b2lkICopOworZXh0ZXJuIGludCBicmsodm9pZCAqKTsKK2V4dGVybiB2b2lkICpzYnJrKHB0cmRpZmZfdCk7CisKK2V4dGVybiBpbnQgZ2V0b3B0KGludCwgY2hhciAqIGNvbnN0ICosIGNvbnN0IGNoYXIgKik7CitleHRlcm4gY2hhciAqb3B0YXJnOworZXh0ZXJuIGludCBvcHRpbmQsIG9wdGVyciwgb3B0b3B0OworCitleHRlcm4gaW50IGlzYXR0eShpbnQpOworCitleHRlcm4gaW50ICBhY2N0KGNvbnN0IGNoYXIqICBmaWxlcGF0aCk7CisKK3N0YXRpYyBfX2lubGluZV9fIGludCBnZXRwYWdlc2l6ZSh2b2lkKSB7CisgIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NpemU7CisgIHJldHVybiBfX3BhZ2Vfc2l6ZTsKK30KK3N0YXRpYyBfX2lubGluZV9fIGludCBfX2dldHBhZ2VzaGlmdCh2b2lkKSB7CisgIGV4dGVybiB1bnNpZ25lZCBpbnQgX19wYWdlX3NoaWZ0OworICByZXR1cm4gX19wYWdlX3NoaWZ0OworfQorCitleHRlcm4gaW50IHN5c2NvbmYoaW50ICBuYW1lKTsKKworZXh0ZXJuIGludCBkYWVtb24oaW50LCBpbnQpOworCisvKiBBIHNwZWNpYWwgc3lzY2FsbCB0aGF0IGlzIG9ubHkgYXZhaWxhYmxlIG9uIHRoZSBBUk0sIG5vdCB4ODYgZnVuY3Rpb24uICovCitleHRlcm4gaW50IGNhY2hlZmx1c2gobG9uZyBzdGFydCwgbG9uZyBlbmQsIGxvbmcgZmxhZ3MpOworCisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVU5JU1REX0hfICovCmRpZmYgLS1naXQgYS9saWJjL2luY2x1ZGUvdXRpbC5oIGIvbGliYy9pbmNsdWRlL3V0aWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjlkZTI5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3V0aWwuaApkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3V0aWxpdHkgYi9saWJjL2luY2x1ZGUvdXRpbGl0eQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjA0NGE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3V0aWxpdHkKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfQ1BQX1VUSUxJVFkKKyNkZWZpbmUgX0NQUF9VVElMSVRZCisKKyNwcmFnbWEgR0NDIHN5c3RlbV9oZWFkZXIKKworI2RlZmluZSAgX19TVExfQkVHSU5fTkFNRVNQQUNFICBuYW1lc3BhY2Ugc3RkIHsKKyNkZWZpbmUgIF9fU1RMX0VORF9OQU1FU1BBQ0UgICAgfQorCisjaW5jbHVkZSA8c3RsX3BhaXIuaD4KKworI2VuZGlmIC8qIF9DUFBfVVRJTElUWSAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3V0aW1lLmggYi9saWJjL2luY2x1ZGUvdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdjZDJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3V0aW1lLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfVVRJTUVfSF8KKyNkZWZpbmUgX1VUSU1FX0hfCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91dGltZS5oPgorCitfX0JFR0lOX0RFQ0xTCisKK2V4dGVybiBpbnQgIHV0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3Qgc3RydWN0IHV0aW1idWYgKik7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiBfVVRJTUVfSF8gKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3V0bXAuaCBiL2xpYmMvaW5jbHVkZS91dG1wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM2MmI0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5jbHVkZS91dG1wLmgKQEAgLTAsMCArMSw5MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2lmbmRlZiBfVVRNUF9IXworI2RlZmluZSBfVVRNUF9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisjZGVmaW5lIF9QQVRIX1VUTVAgICAgICAiL3Zhci9ydW4vdXRtcCIKKyNkZWZpbmUgX1BBVEhfV1RNUCAgICAgICIvdmFyL2xvZy93dG1wIgorI2RlZmluZSBfUEFUSF9MQVNUTE9HICAgIi92YXIvbG9nL2xhc3Rsb2ciCisKKyNkZWZpbmUJVVRfTkFNRVNJWkUJOAorI2RlZmluZQlVVF9MSU5FU0laRQk4CisjZGVmaW5lCVVUX0hPU1RTSVpFCTE2CisKKyNkZWZpbmUgVVNFUl9QUk9DRVNTIDcKKworc3RydWN0IGxhc3Rsb2cKK3sKKyAgICB0aW1lX3QgbGxfdGltZTsKKyAgICBjaGFyIGxsX2xpbmVbVVRfTElORVNJWkVdOworICAgIGNoYXIgbGxfaG9zdFtVVF9IT1NUU0laRV07Cit9OworCitzdHJ1Y3QgZXhpdF9zdGF0dXMKK3sKKyAgICBzaG9ydCBpbnQgZV90ZXJtaW5hdGlvbjsKKyAgICBzaG9ydCBpbnQgZV9leGl0OworfTsKKworCitzdHJ1Y3QgdXRtcAoreworICAgIHNob3J0IGludCB1dF90eXBlOworICAgIHBpZF90IHV0X3BpZDsKKyAgICBjaGFyIHV0X2xpbmVbVVRfTElORVNJWkVdOworICAgIGNoYXIgdXRfaWRbNF07CisgICAgY2hhciB1dF91c2VyW1VUX05BTUVTSVpFXTsKKyAgICBjaGFyIHV0X2hvc3RbVVRfSE9TVFNJWkVdOworCisgICAgc3RydWN0IGV4aXRfc3RhdHVzIHV0X2V4aXQ7CisKKyAgICBsb25nIGludCB1dF9zZXNzaW9uOworICAgIHN0cnVjdCB0aW1ldmFsIHV0X3R2OworCisgICAgaW50MzJfdCB1dF9hZGRyX3Y2WzRdOworICAgIGNoYXIgdW5zZWRbMjBdOworfTsKKworCisjZGVmaW5lIHV0X25hbWUgdXRfdXNlcgorI2RlZmluZSB1dF90aW1lIHV0X3R2LnR2X3NlYworI2RlZmluZSB1dF9hZGRyIHV0X2FkZHJfdjZbMF0KKworX19CRUdJTl9ERUNMUworCitpbnQgdXRtcG5hbWUoY29uc3QgY2hhciopOwordm9pZCBzZXR1dGVudCgpOworc3RydWN0IHV0bXAqIGdldHV0ZW50KCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvLyBfVVRNUF9IXwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djaGFyLmggYi9saWJjL2luY2x1ZGUvd2NoYXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmY2ZmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmNsdWRlL3djaGFyLmgKQEAgLTAsMCArMSwxNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1dDSEFSX0hfCisjZGVmaW5lIF9XQ0hBUl9IXworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8bWFsbG9jLmg+CisKKy8qIElNUE9SVEFOVDogQW55IGNvZGUgdGhhdCByZWxpZXMgb24gd2lkZSBjaGFyYWN0ZXIgc3VwcG9ydCBpcyBlc3NlbnRpYWxseQorICogICAgICAgICAgICBub24tcG9ydGFibGUgYW5kL29yIGJyb2tlbi4gdGhlIG9ubHkgcmVhc29uIHRoaXMgaGVhZGVyIGV4aXN0CisgKiAgICAgICAgICAgIGlzIGJlY2F1c2UgSSdtIHJlYWxseSBhIG5pY2UgZ3V5LiBIb3dldmVyLCBJJ20gbm90IG5pY2UgZW5vdWdoCisgKiAgICAgICAgICAgIHRvIHByb3ZpZGUgeW91IHdpdGggYSByZWFsIGltcGxlbWVudGF0aW9uLiBpbnN0ZWFkIHdjaGFyX3QgPT0gY2hhcgorICogICAgICAgICAgICBhbmQgYWxsIHdjIGZ1bmN0aW9ucyBhcmUgc3R1YnMgdG8gdGhlaXIgIm5vcm1hbCIgZXF1aXZhbGVudC4uLgorICovCisKK19fQkVHSU5fREVDTFMKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyICAgICAgICAgICB3Y2hhcl90OwordHlwZWRlZiBpbnQgICAgICAgICAgICAgICAgICAgICB3aW50X3Q7Cit0eXBlZGVmIHN0cnVjdCB7IGludCAgZHVtbXk7IH0gIG1ic3RhdGVfdDsKKwordHlwZWRlZiBlbnVtIHsKKyAgICBXQ19UWVBFX0lOVkFMSUQgPSAwLAorICAgIFdDX1RZUEVfQUxOVU0sCisgICAgV0NfVFlQRV9BTFBIQSwKKyAgICBXQ19UWVBFX0JMQU5LLAorICAgIFdDX1RZUEVfQ05UUkwsCisgICAgV0NfVFlQRV9ESUdJVCwKKyAgICBXQ19UWVBFX0dSQVBILAorICAgIFdDX1RZUEVfTE9XRVIsCisgICAgV0NfVFlQRV9QUklOVCwKKyAgICBXQ19UWVBFX1BVTkNULAorICAgIFdDX1RZUEVfU1BBQ0UsCisgICAgV0NfVFlQRV9VUFBFUiwKKyAgICBXQ19UWVBFX1hESUdJVCwKKyAgICBXQ19UWVBFX01BWAorfSB3Y3R5cGVfdDsKKworI2RlZmluZSAgV0NIQVJfTUFYICAgMjU1CisjZGVmaW5lICBXQ0hBUl9NSU4gICAwCisjZGVmaW5lICBXRU9GICAgICAgICAoLTEpCisKK2V4dGVybiB3aW50X3QgICAgICAgICAgICBidG93YyhpbnQpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGZ3cHJpbnRmKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCAuLi4pOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGZ3c2NhbmYoRklMRSAqLCBjb25zdCB3Y2hhcl90ICosIC4uLik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3YWxudW0od2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dhbHBoYSh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2NudHJsKHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3ZGlnaXQod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dncmFwaCh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd2xvd2VyKHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3cHJpbnQod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3dwdW5jdCh3aW50X3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIGlzd3NwYWNlKHdpbnRfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgaXN3dXBwZXIod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3d4ZGlnaXQod2ludF90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBpc3djdHlwZSh3aW50X3QsIHdjdHlwZV90KTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICBmZ2V0d2MoRklMRSAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICpmZ2V0d3Mod2NoYXJfdCAqLCBpbnQsIEZJTEUgKik7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgZnB1dHdjKHdjaGFyX3QsIEZJTEUgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgZnB1dHdzKGNvbnN0IHdjaGFyX3QgKiwgRklMRSAqKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBmd2lkZShGSUxFICosIGludCk7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgZ2V0d2MoRklMRSAqKTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICBnZXR3Y2hhcih2b2lkKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICBtYnNpbml0KGNvbnN0IG1ic3RhdGVfdCAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICBtYnJsZW4oY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICBtYnJ0b3djKHdjaGFyX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICBtYnNydG93Y3Mod2NoYXJfdCAqLCBjb25zdCBjaGFyICoqLCBzaXplX3QsIG1ic3RhdGVfdCAqKTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICBwdXR3Yyh3Y2hhcl90LCBGSUxFICopOworZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHB1dHdjaGFyKHdjaGFyX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHN3cHJpbnRmKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIC4uLik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgc3dzY2FuZihjb25zdCB3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKK2V4dGVybiB3aW50X3QgICAgICAgICAgICB0b3dsb3dlcih3aW50X3QpOworZXh0ZXJuIHdpbnRfdCAgICAgICAgICAgIHRvd3VwcGVyKHdpbnRfdCk7CitleHRlcm4gd2ludF90ICAgICAgICAgICAgdW5nZXR3Yyh3aW50X3QsIEZJTEUgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgdmZ3cHJpbnRmKEZJTEUgKiwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICosIHZhX2xpc3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHZzd3ByaW50Zih3Y2hhcl90ICosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCAqLCB2YV9saXN0KTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3J0b21iKGNoYXIgKiwgd2NoYXJfdCwgbWJzdGF0ZV90ICopOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc2NhdCh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKik7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd2NzY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NjcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2NzcG4oY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIHNpemVfdCAgICAgICAgICAgIHdjc2Z0aW1lKHdjaGFyX3QgKiwgc2l6ZV90LCBjb25zdCB3Y2hhcl90ICosIGNvbnN0IHN0cnVjdCB0bSAqKTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NuY2F0KHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd2NzbmNweSh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NwYnJrKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NyY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCk7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2NzcnRvbWJzKGNoYXIgKiwgY29uc3Qgd2NoYXJfdCAqKiwgc2l6ZV90LCBtYnN0YXRlX3QgKik7CitleHRlcm4gc2l6ZV90ICAgICAgICAgICAgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqKTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3NzdHIoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIGRvdWJsZSAgICAgICAgICAgIHdjc3RvZChjb25zdCB3Y2hhcl90ICosIHdjaGFyX3QgKiopOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndjc3Rvayh3Y2hhcl90ICosIGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CitleHRlcm4gbG9uZyBpbnQgICAgICAgICAgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCAqKiwgaW50KTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3Y3N3Y3MoY29uc3Qgd2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICopOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjc3dpZHRoKGNvbnN0IHdjaGFyX3QgKiwgc2l6ZV90KTsKK2V4dGVybiBzaXplX3QgICAgICAgICAgICB3Y3N4ZnJtKHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIGludCAgICAgICAgICAgICAgIHdjdG9iKHdpbnRfdCk7CitleHRlcm4gd2N0eXBlX3QgICAgICAgICAgd2N0eXBlKGNvbnN0IGNoYXIgKik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd2N3aWR0aCh3Y2hhcl90KTsKK2V4dGVybiB3Y2hhcl90ICAgICAgICAgICp3bWVtY2hyKGNvbnN0IHdjaGFyX3QgKiwgd2NoYXJfdCwgc2l6ZV90KTsKK2V4dGVybiBpbnQgICAgICAgICAgICAgICB3bWVtY21wKGNvbnN0IHdjaGFyX3QgKiwgY29uc3Qgd2NoYXJfdCAqLCBzaXplX3QpOworZXh0ZXJuIHdjaGFyX3QgICAgICAgICAgKndtZW1jcHkod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd21lbW1vdmUod2NoYXJfdCAqLCBjb25zdCB3Y2hhcl90ICosIHNpemVfdCk7CitleHRlcm4gd2NoYXJfdCAgICAgICAgICAqd21lbXNldCh3Y2hhcl90ICosIHdjaGFyX3QsIHNpemVfdCk7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd3ByaW50Zihjb25zdCB3Y2hhcl90ICosIC4uLik7CitleHRlcm4gaW50ICAgICAgICAgICAgICAgd3NjYW5mKGNvbnN0IHdjaGFyX3QgKiwgLi4uKTsKKworX19FTkRfREVDTFMKKworI2VuZGlmIC8qIF9XQ0hBUl9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9pbmNsdWRlL3djdHlwZS5oIGIvbGliYy9pbmNsdWRlL3djdHlwZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1ZjE4YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luY2x1ZGUvd2N0eXBlLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPHdjaGFyLmg+CmRpZmYgLS1naXQgYS9saWJjL2luZXQvYmluZHJlc3Zwb3J0LmMgYi9saWJjL2luZXQvYmluZHJlc3Zwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQ5YWQyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvaW5ldC9iaW5kcmVzdnBvcnQuYwpAQCAtMCwwICsxLDcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjZGVmaW5lIFNUQVJUX1BPUlQJNjAwCisjZGVmaW5lIEVORF9QT1JUCUlQUE9SVF9SRVNFUlZFRAorI2RlZmluZSBOVU1fUE9SVFMJKEVORF9QT1JUIC0gU1RBUlRfUE9SVCkKKworaW50IGJpbmRyZXN2cG9ydChpbnQgc2QsIHN0cnVjdCBzb2NrYWRkcl9pbiAqc2luKQoreworICAgIHN0YXRpYyBzaG9ydCAgICAgICAgcG9ydDsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW4gIHNpbjA7CisgICAgaW50ICAgICAgICAgICAgICAgICBubiwgcmV0OworCisgICAgaWYgKHNpbiA9PSBOVUxMKSB7CisgICAgICAgIHNpbiA9ICZzaW4wOworICAgICAgICBtZW1zZXQoIHNpbiwgMCwgc2l6ZW9mICpzaW4gKTsKKyAgICAgICAgc2luLT5zaW5fZmFtaWx5ID0gQUZfSU5FVDsKKyAgICB9IGVsc2UgaWYgKHNpbi0+c2luX2ZhbWlseSAhPSBBRl9JTkVUKSB7CisgICAgICAgIGVycm5vID0gRVBGTk9TVVBQT1JUOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorCisgICAgaWYgKHBvcnQgPT0gMCkgeworICAgICAgICBwb3J0ID0gU1RBUlRfUE9SVCArIChnZXRwaWQoKSAlIE5VTV9QT1JUUyk7CisgICAgfQorCisgICAgZm9yIChubiA9IE5VTV9QT1JUUzsgbm4gPiAwOyBubi0tLCBwb3J0KyspIAorICAgIHsKKyAgICAgICAgaWYgKHBvcnQgPT0gRU5EX1BPUlQpCisgICAgICAgICAgICBwb3J0ID0gU1RBUlRfUE9SVDsKKworICAgICAgICBzaW4tPnNpbl9wb3J0ID0gaHRvbnMocG9ydCk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJldCA9IGJpbmQoc2QsIChzdHJ1Y3Qgc29ja2FkZHIqKXNpbiwgc2l6ZW9mKCpzaW4pKTsKKyAgICAgICAgfSB3aGlsZSAocmV0IDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisKKyAgICAgICAgaWYgKCFyZXQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X2FkZHIuYyBiL2xpYmMvaW5ldC9pbmV0X2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTQ4MGE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfYWRkci5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuOSAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKgorICogQXNjaWkgaW50ZXJuZXQgYWRkcmVzcyBpbnRlcnByZXRhdGlvbiByb3V0aW5lLgorICogVGhlIHZhbHVlIHJldHVybmVkIGlzIGluIG5ldHdvcmsgb3JkZXIuCisgKi8KK2luX2FkZHJfdAoraW5ldF9hZGRyKGNvbnN0IGNoYXIgKmNwKQoreworCXN0cnVjdCBpbl9hZGRyIHZhbDsKKworCWlmIChpbmV0X2F0b24oY3AsICZ2YWwpKQorCQlyZXR1cm4gKHZhbC5zX2FkZHIpOworCXJldHVybiAoSU5BRERSX05PTkUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfYXRvbi5jIGIvbGliYy9pbmV0L2luZXRfYXRvbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0NTZkMDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luZXQvaW5ldF9hdG9uLmMKQEAgLTAsMCArMSwxNTcgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X2FkZHIuYyx2IDEuOSAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODMsIDE5OTAsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKiAKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKiAtCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKiAKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKiAKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKiAtCisgKiAtLUNvcHlyaWdodC0tCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiAKKyAqIENoZWNrIHdoZXRoZXIgImNwIiBpcyBhIHZhbGlkIGFzY2lpIHJlcHJlc2VudGF0aW9uCisgKiBvZiBhbiBJbnRlcm5ldCBhZGRyZXNzIGFuZCBjb252ZXJ0IHRvIGEgYmluYXJ5IGFkZHJlc3MuCisgKiBSZXR1cm5zIDEgaWYgdGhlIGFkZHJlc3MgaXMgdmFsaWQsIDAgaWYgbm90LgorICogVGhpcyByZXBsYWNlcyBpbmV0X2FkZHIsIHRoZSByZXR1cm4gdmFsdWUgZnJvbSB3aGljaAorICogY2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVyZSBhbmQgYSBsb2NhbCBicm9hZGNhc3QgYWRkcmVzcy4KKyAqLworaW50CitpbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHN0cnVjdCBpbl9hZGRyICphZGRyKQoreworCWluX2FkZHJfdCB2YWw7CisJaW50IGJhc2UsIG47CisJY2hhciBjOworCXVfaW50IHBhcnRzWzRdOworCXVfaW50ICpwcCA9IHBhcnRzOworCisJYyA9ICpjcDsKKwlmb3IgKDs7KSB7CisJCS8qCisJCSAqIENvbGxlY3QgbnVtYmVyIHVwIHRvIGBgLicnLgorCQkgKiBWYWx1ZXMgYXJlIHNwZWNpZmllZCBhcyBmb3IgQzoKKwkJICogMHg9aGV4LCAwPW9jdGFsLCBpc2RpZ2l0PWRlY2ltYWwuCisJCSAqLworCQlpZiAoIWlzZGlnaXQoYykpCisJCQlyZXR1cm4gKDApOworCQl2YWwgPSAwOyBiYXNlID0gMTA7CisJCWlmIChjID09ICcwJykgeworCQkJYyA9ICorK2NwOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQorCQkJCWJhc2UgPSAxNiwgYyA9ICorK2NwOworCQkJZWxzZQorCQkJCWJhc2UgPSA4OworCQl9CisJCWZvciAoOzspIHsKKwkJCWlmIChpc2FzY2lpKGMpICYmIGlzZGlnaXQoYykpIHsKKwkJCQl2YWwgPSAodmFsICogYmFzZSkgKyAoYyAtICcwJyk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlIGlmIChiYXNlID09IDE2ICYmIGlzYXNjaWkoYykgJiYgaXN4ZGlnaXQoYykpIHsKKwkJCQl2YWwgPSAodmFsIDw8IDQpIHwKKwkJCQkJKGMgKyAxMCAtIChpc2xvd2VyKGMpID8gJ2EnIDogJ0EnKSk7CisJCQkJYyA9ICorK2NwOworCQkJfSBlbHNlCisJCQkJYnJlYWs7CisJCX0KKwkJaWYgKGMgPT0gJy4nKSB7CisJCQkvKgorCQkJICogSW50ZXJuZXQgZm9ybWF0OgorCQkJICoJYS5iLmMuZAorCQkJICoJYS5iLmMJKHdpdGggYyB0cmVhdGVkIGFzIDE2IGJpdHMpCisJCQkgKglhLmIJKHdpdGggYiB0cmVhdGVkIGFzIDI0IGJpdHMpCisJCQkgKi8KKwkJCWlmIChwcCA+PSBwYXJ0cyArIDMpCisJCQkJcmV0dXJuICgwKTsKKwkJCSpwcCsrID0gdmFsOworCQkJYyA9ICorK2NwOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIENoZWNrIGZvciB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCWlmIChjICE9ICdcMCcgJiYgKCFpc2FzY2lpKGMpIHx8ICFpc3NwYWNlKGMpKSkKKwkJcmV0dXJuICgwKTsKKwkvKgorCSAqIENvbmNvY3QgdGhlIGFkZHJlc3MgYWNjb3JkaW5nIHRvCisJICogdGhlIG51bWJlciBvZiBwYXJ0cyBzcGVjaWZpZWQuCisJICovCisJbiA9IHBwIC0gcGFydHMgKyAxOworCXN3aXRjaCAobikgeworCisJY2FzZSAwOgorCQlyZXR1cm4gKDApOwkJLyogaW5pdGlhbCBub25kaWdpdCAqLworCisJY2FzZSAxOgkJCQkvKiBhIC0tIDMyIGJpdHMgKi8KKwkJYnJlYWs7CisKKwljYXNlIDI6CQkJCS8qIGEuYiAtLSA4LjI0IGJpdHMgKi8KKwkJaWYgKCh2YWwgPiAweGZmZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gcGFydHNbMF0gPDwgMjQ7CisJCWJyZWFrOworCisJY2FzZSAzOgkJCQkvKiBhLmIuYyAtLSA4LjguMTYgYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmZmZikgfHwgKHBhcnRzWzBdID4gMHhmZikgfHwgKHBhcnRzWzFdID4gMHhmZikpCisJCQlyZXR1cm4gKDApOworCQl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNik7CisJCWJyZWFrOworCisJY2FzZSA0OgkJCQkvKiBhLmIuYy5kIC0tIDguOC44LjggYml0cyAqLworCQlpZiAoKHZhbCA+IDB4ZmYpIHx8IChwYXJ0c1swXSA+IDB4ZmYpIHx8IChwYXJ0c1sxXSA+IDB4ZmYpIHx8IChwYXJ0c1syXSA+IDB4ZmYpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsIHw9IChwYXJ0c1swXSA8PCAyNCkgfCAocGFydHNbMV0gPDwgMTYpIHwgKHBhcnRzWzJdIDw8IDgpOworCQlicmVhazsKKwl9CisJaWYgKGFkZHIpCisJCWFkZHItPnNfYWRkciA9IGh0b25sKHZhbCk7CisJcmV0dXJuICgxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X250b2EuYyBiL2xpYmMvaW5ldC9pbmV0X250b2EuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjVkOTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfbnRvYS5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b2EuYyx2IDEuNiAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIENvbnZlcnQgbmV0d29yay1mb3JtYXQgaW50ZXJuZXQgYWRkcmVzcworICogdG8gYmFzZSAyNTYgZC5kLmQuZCByZXByZXNlbnRhdGlvbi4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorCitjaGFyICoKK2luZXRfbnRvYShzdHJ1Y3QgaW5fYWRkciBpbikKK3sKKwlzdGF0aWMgY2hhciBiWzE4XTsKKwljaGFyICpwOworCisJcCA9IChjaGFyICopJmluOworI2RlZmluZQlVQyhiKQkoKChpbnQpYikmMHhmZikKKwkodm9pZClzbnByaW50ZihiLCBzaXplb2YoYiksCisJICAgICIldS4ldS4ldS4ldSIsIFVDKHBbMF0pLCBVQyhwWzFdKSwgVUMocFsyXSksIFVDKHBbM10pKTsKKwlyZXR1cm4gKGIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9pbmV0L2luZXRfbnRvcC5jIGIvbGliYy9pbmV0L2luZXRfbnRvcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NDhkYTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2luZXQvaW5ldF9udG9wLmMKQEAgLTAsMCArMSwxOTcgQEAKKy8qCSRPcGVuQlNEOiBpbmV0X250b3AuYyx2IDEuNyAyMDA1LzA4LzA2IDIwOjMwOjAzIGVzcGllIEV4cCAkCSovCisKKy8qIENvcHlyaWdodCAoYykgMTk5NiBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSU5URVJORVQgU09GVFdBUkUgQ09OU09SVElVTSBESVNDTEFJTVMKKyAqIEFMTCBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgSU5URVJORVQgU09GVFdBUkUKKyAqIENPTlNPUlRJVU0gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A0KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKK3N0YXRpYyBjb25zdCBjaGFyICppbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKTsKKworLyogY2hhciAqCisgKiBpbmV0X250b3AoYWYsIHNyYywgZHN0LCBzaXplKQorICoJY29udmVydCBhIG5ldHdvcmsgZm9ybWF0IGFkZHJlc3MgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCXBvaW50ZXIgdG8gcHJlc2VudGF0aW9uIGZvcm1hdCBhZGRyZXNzIChgZHN0JyksIG9yIE5VTEwgKHNlZSBlcnJubykuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitjb25zdCBjaGFyICoKK2luZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDQoc3JjLCBkc3QsIHNpemUpCisgKglmb3JtYXQgYW4gSVB2NCBhZGRyZXNzLCBtb3JlIG9yIGxlc3MgbGlrZSBpbmV0X250b2EoKQorICogcmV0dXJuOgorICoJYGRzdCcgKGFzIGEgY29uc3QpCisgKiBub3RlczoKKyAqCSgxKSB1c2VzIG5vIHN0YXRpY3MKKyAqCSgyKSB0YWtlcyBhIHVfY2hhciogbm90IGFuIGluX2FkZHIgYXMgaW5wdXQKKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBjb25zdCBjaGFyICoKK2luZXRfbnRvcDQoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgZm10W10gPSAiJXUuJXUuJXUuJXUiOworCWNoYXIgdG1wW3NpemVvZiAiMjU1LjI1NS4yNTUuMjU1Il07CisJaW50IGw7CisKKwlsID0gc25wcmludGYodG1wLCBzaXplLCBmbXQsIHNyY1swXSwgc3JjWzFdLCBzcmNbMl0sIHNyY1szXSk7CisJaWYgKGwgPD0gMCB8fCAoc2l6ZV90KWwgPj0gc2l6ZSkgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJc3RybGNweShkc3QsIHRtcCwgc2l6ZSk7CisJcmV0dXJuIChkc3QpOworfQorCisvKiBjb25zdCBjaGFyICoKKyAqIGluZXRfbnRvcDYoc3JjLCBkc3QsIHNpemUpCisgKgljb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0CisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitzdGF0aWMgY29uc3QgY2hhciAqCitpbmV0X250b3A2KGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQoreworCS8qCisJICogTm90ZSB0aGF0IGludDMyX3QgYW5kIGludDE2X3QgbmVlZCBvbmx5IGJlICJhdCBsZWFzdCIgbGFyZ2UgZW5vdWdoCisJICogdG8gY29udGFpbiBhIHZhbHVlIG9mIHRoZSBzcGVjaWZpZWQgc2l6ZS4gIE9uIHNvbWUgc3lzdGVtcywgbGlrZQorCSAqIENyYXlzLCB0aGVyZSBpcyBubyBzdWNoIHRoaW5nIGFzIGFuIGludGVnZXIgdmFyaWFibGUgd2l0aCAxNiBiaXRzLgorCSAqIEtlZXAgdGhpcyBpbiBtaW5kIGlmIHlvdSB0aGluayB0aGlzIGZ1bmN0aW9uIHNob3VsZCBoYXZlIGJlZW4gY29kZWQKKwkgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCisJICovCisJY2hhciB0bXBbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoyNTUuMjU1LjI1NS4yNTUiXTsKKwljaGFyICp0cCwgKmVwOworCXN0cnVjdCB7IGludCBiYXNlLCBsZW47IH0gYmVzdCwgY3VyOworCXVfaW50IHdvcmRzW0lONkFERFJTWiAvIElOVDE2U1pdOworCWludCBpOworCWludCBhZHZhbmNlOworCisJLyoKKwkgKiBQcmVwcm9jZXNzOgorCSAqCUNvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgorCSAqCUZpbmQgdGhlIGxvbmdlc3QgcnVuIG9mIDB4MDAncyBpbiBzcmNbXSBmb3IgOjogc2hvcnRoYW5kaW5nLgorCSAqLworCW1lbXNldCh3b3JkcywgJ1wwJywgc2l6ZW9mIHdvcmRzKTsKKwlmb3IgKGkgPSAwOyBpIDwgSU42QUREUlNaOyBpKyspCisJCXdvcmRzW2kgLyAyXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKwliZXN0LmJhc2UgPSAtMTsKKwliZXN0LmxlbiAgPSAwOworCWN1ci5iYXNlID0gLTE7CisJY3VyLmxlbiAgPSAwOworCWZvciAoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykgeworCQlpZiAod29yZHNbaV0gPT0gMCkgeworCQkJaWYgKGN1ci5iYXNlID09IC0xKQorCQkJCWN1ci5iYXNlID0gaSwgY3VyLmxlbiA9IDE7CisJCQllbHNlCisJCQkJY3VyLmxlbisrOworCQl9IGVsc2UgeworCQkJaWYgKGN1ci5iYXNlICE9IC0xKSB7CisJCQkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQkJCWJlc3QgPSBjdXI7CisJCQkJY3VyLmJhc2UgPSAtMTsKKwkJCX0KKwkJfQorCX0KKwlpZiAoY3VyLmJhc2UgIT0gLTEpIHsKKwkJaWYgKGJlc3QuYmFzZSA9PSAtMSB8fCBjdXIubGVuID4gYmVzdC5sZW4pCisJCQliZXN0ID0gY3VyOworCX0KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGJlc3QubGVuIDwgMikKKwkJYmVzdC5iYXNlID0gLTE7CisKKwkvKgorCSAqIEZvcm1hdCB0aGUgcmVzdWx0LgorCSAqLworCXRwID0gdG1wOworCWVwID0gdG1wICsgc2l6ZW9mKHRtcCk7CisJZm9yIChpID0gMDsgaSA8IChJTjZBRERSU1ogLyBJTlQxNlNaKSAmJiB0cCA8IGVwOyBpKyspIHsKKwkJLyogQXJlIHdlIGluc2lkZSB0aGUgYmVzdCBydW4gb2YgMHgwMCdzPyAqLworCQlpZiAoYmVzdC5iYXNlICE9IC0xICYmIGkgPj0gYmVzdC5iYXNlICYmCisJCSAgICBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkgeworCQkJaWYgKGkgPT0gYmVzdC5iYXNlKSB7CisJCQkJaWYgKHRwICsgMSA+PSBlcCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQkqdHArKyA9ICc6JzsKKwkJCX0KKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PyAqLworCQlpZiAoaSAhPSAwKSB7CisJCQlpZiAodHAgKyAxID49IGVwKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQkqdHArKyA9ICc6JzsKKwkJfQorCQkvKiBJcyB0aGlzIGFkZHJlc3MgYW4gZW5jYXBzdWxhdGVkIElQdjQ/ICovCisJCWlmIChpID09IDYgJiYgYmVzdC5iYXNlID09IDAgJiYKKwkJICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKSB7CisJCQlpZiAoIWluZXRfbnRvcDQoc3JjKzEyLCB0cCwgKHNpemVfdCkoZXAgLSB0cCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQl0cCArPSBzdHJsZW4odHApOworCQkJYnJlYWs7CisJCX0KKwkJYWR2YW5jZSA9IHNucHJpbnRmKHRwLCBlcCAtIHRwLCAiJXgiLCB3b3Jkc1tpXSk7CisJCWlmIChhZHZhbmNlIDw9IDAgfHwgYWR2YW5jZSA+PSBlcCAtIHRwKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJdHAgKz0gYWR2YW5jZTsKKwl9CisJLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8gKi8KKwlpZiAoYmVzdC5iYXNlICE9IC0xICYmIChiZXN0LmJhc2UgKyBiZXN0LmxlbikgPT0gKElONkFERFJTWiAvIElOVDE2U1opKSB7CisJCWlmICh0cCArIDEgPj0gZXApCisJCQlyZXR1cm4gKE5VTEwpOworCQkqdHArKyA9ICc6JzsKKwl9CisJaWYgKHRwICsgMSA+PSBlcCkKKwkJcmV0dXJuIChOVUxMKTsKKwkqdHArKyA9ICdcMCc7CisKKwkvKgorCSAqIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCisJICovCisJaWYgKChzaXplX3QpKHRwIC0gdG1wKSA+IHNpemUpIHsKKwkJZXJybm8gPSBFTk9TUEM7CisJCXJldHVybiAoTlVMTCk7CisJfQorCXN0cmxjcHkoZHN0LCB0bXAsIHNpemUpOworCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvaW5ldC9pbmV0X3B0b24uYyBiL2xpYmMvaW5ldC9pbmV0X3B0b24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40Y2FmOTgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9pbmV0L2luZXRfcHRvbi5jCkBAIC0wLDAgKzEsMjEyIEBACisvKgkkT3BlbkJTRDogaW5ldF9wdG9uLmMsdiAxLjcgMjAwNi8xMi8zMCAyMzozNzozNyBpdG9qdW4gRXhwICQJKi8KKworLyogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBXQVJOSU5HOiBEb24ndCBldmVuIGNvbnNpZGVyIHRyeWluZyB0byBjb21waWxlIHRoaXMgb24gYSBzeXN0ZW0gd2hlcmUKKyAqIHNpemVvZihpbnQpIDwgNC4gIHNpemVvZihpbnQpID4gNCBpcyBmaW5lOyBhbGwgdGhlIHdvcmxkJ3Mgbm90IGEgVkFYLgorICovCisKK3N0YXRpYyBpbnQJaW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKK3N0YXRpYyBpbnQJaW5ldF9wdG9uNihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KTsKKworLyogaW50CisgKiBpbmV0X3B0b24oYWYsIHNyYywgZHN0KQorICoJY29udmVydCBmcm9tIHByZXNlbnRhdGlvbiBmb3JtYXQgKHdoaWNoIHVzdWFsbHkgbWVhbnMgQVNDSUkgcHJpbnRhYmxlKQorICoJdG8gbmV0d29yayBmb3JtYXQgKHdoaWNoIGlzIHVzdWFsbHkgc29tZSBraW5kIG9mIGJpbmFyeSBmb3JtYXQpLgorICogcmV0dXJuOgorICoJMSBpZiB0aGUgYWRkcmVzcyB3YXMgdmFsaWQgZm9yIHRoZSBzcGVjaWZpZWQgYWRkcmVzcyBmYW1pbHkKKyAqCTAgaWYgdGhlIGFkZHJlc3Mgd2Fzbid0IHZhbGlkIChgZHN0JyBpcyB1bnRvdWNoZWQgaW4gdGhpcyBjYXNlKQorICoJLTEgaWYgc29tZSBvdGhlciBlcnJvciBvY2N1cnJlZCAoYGRzdCcgaXMgdW50b3VjaGVkIGluIHRoaXMgY2FzZSwgdG9vKQorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworaW50CitpbmV0X3B0b24oaW50IGFmLCBjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK3sKKwlzd2l0Y2ggKGFmKSB7CisJY2FzZSBBRl9JTkVUOgorCQlyZXR1cm4gKGluZXRfcHRvbjQoc3JjLCBkc3QpKTsKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gKGluZXRfcHRvbjYoc3JjLCBkc3QpKTsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJcmV0dXJuICgtMSk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyogaW50CisgKiBpbmV0X3B0b240KHNyYywgZHN0KQorICoJbGlrZSBpbmV0X2F0b24oKSBidXQgd2l0aG91dCBhbGwgdGhlIGhleGFkZWNpbWFsIGFuZCBzaG9ydGhhbmQuCisgKiByZXR1cm46CisgKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgZG90dGVkIHF1YWQsIGVsc2UgMC4KKyAqIG5vdGljZToKKyAqCWRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICogYXV0aG9yOgorICoJUGF1bCBWaXhpZSwgMTk5Ni4KKyAqLworc3RhdGljIGludAoraW5ldF9wdG9uNChjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0KQoreworCXN0YXRpYyBjb25zdCBjaGFyIGRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworCWludCBzYXdfZGlnaXQsIG9jdGV0cywgY2g7CisJdV9jaGFyIHRtcFtJTkFERFJTWl0sICp0cDsKKworCXNhd19kaWdpdCA9IDA7CisJb2N0ZXRzID0gMDsKKwkqKHRwID0gdG1wKSA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQljb25zdCBjaGFyICpwY2g7CisKKwkJaWYgKChwY2ggPSBzdHJjaHIoZGlnaXRzLCBjaCkpICE9IE5VTEwpIHsKKwkJCXVfaW50IG5ldyA9ICp0cCAqIDEwICsgKHBjaCAtIGRpZ2l0cyk7CisKKwkJCWlmIChuZXcgPiAyNTUpCisJCQkJcmV0dXJuICgwKTsKKwkJCWlmICghIHNhd19kaWdpdCkgeworCQkJCWlmICgrK29jdGV0cyA+IDQpCisJCQkJCXJldHVybiAoMCk7CisJCQkJc2F3X2RpZ2l0ID0gMTsKKwkJCX0KKwkJCSp0cCA9IG5ldzsKKwkJfSBlbHNlIGlmIChjaCA9PSAnLicgJiYgc2F3X2RpZ2l0KSB7CisJCQlpZiAob2N0ZXRzID09IDQpCisJCQkJcmV0dXJuICgwKTsKKwkJCSorK3RwID0gMDsKKwkJCXNhd19kaWdpdCA9IDA7CisJCX0gZWxzZQorCQkJcmV0dXJuICgwKTsKKwl9CisJaWYgKG9jdGV0cyA8IDQpCisJCXJldHVybiAoMCk7CisKKwltZW1jcHkoZHN0LCB0bXAsIElOQUREUlNaKTsKKwlyZXR1cm4gKDEpOworfQorCisvKiBpbnQKKyAqIGluZXRfcHRvbjYoc3JjLCBkc3QpCisgKgljb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBhZGRyZXNzIHRvIG5ldHdvcmsgb3JkZXIgYmluYXJ5IGZvcm0uCisgKiByZXR1cm46CisgKgkxIGlmIGBzcmMnIGlzIGEgdmFsaWQgW1JGQzE4ODQgMi4yXSBhZGRyZXNzLCBlbHNlIDAuCisgKiBub3RpY2U6CisgKgkoMSkgZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKgkoMikgOjogaW4gYSBmdWxsIGFkZHJlc3MgaXMgc2lsZW50bHkgaWdub3JlZC4KKyAqIGNyZWRpdDoKKyAqCWluc3BpcmVkIGJ5IE1hcmsgQW5kcmV3cy4KKyAqIGF1dGhvcjoKKyAqCVBhdWwgVml4aWUsIDE5OTYuCisgKi8KK3N0YXRpYyBpbnQKK2luZXRfcHRvbjYoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCkKK3sKKwlzdGF0aWMgY29uc3QgY2hhciB4ZGlnaXRzX2xbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIiwKKwkJCSAgeGRpZ2l0c191W10gPSAiMDEyMzQ1Njc4OUFCQ0RFRiI7CisJdV9jaGFyIHRtcFtJTjZBRERSU1pdLCAqdHAsICplbmRwLCAqY29sb25wOworCWNvbnN0IGNoYXIgKnhkaWdpdHMsICpjdXJ0b2s7CisJaW50IGNoLCBzYXdfeGRpZ2l0LCBjb3VudF94ZGlnaXQ7CisJdV9pbnQgdmFsOworCisJbWVtc2V0KCh0cCA9IHRtcCksICdcMCcsIElONkFERFJTWik7CisJZW5kcCA9IHRwICsgSU42QUREUlNaOworCWNvbG9ucCA9IE5VTEw7CisJLyogTGVhZGluZyA6OiByZXF1aXJlcyBzb21lIHNwZWNpYWwgaGFuZGxpbmcuICovCisJaWYgKCpzcmMgPT0gJzonKQorCQlpZiAoKisrc3JjICE9ICc6JykKKwkJCXJldHVybiAoMCk7CisJY3VydG9rID0gc3JjOworCXNhd194ZGlnaXQgPSBjb3VudF94ZGlnaXQgPSAwOworCXZhbCA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQljb25zdCBjaGFyICpwY2g7CisKKwkJaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCisJCQlwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7CisJCWlmIChwY2ggIT0gTlVMTCkgeworCQkJaWYgKGNvdW50X3hkaWdpdCA+PSA0KQorCQkJCXJldHVybiAoMCk7CisJCQl2YWwgPDw9IDQ7CisJCQl2YWwgfD0gKHBjaCAtIHhkaWdpdHMpOworCQkJaWYgKHZhbCA+IDB4ZmZmZikKKwkJCQlyZXR1cm4gKDApOworCQkJc2F3X3hkaWdpdCA9IDE7CisJCQljb3VudF94ZGlnaXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjaCA9PSAnOicpIHsKKwkJCWN1cnRvayA9IHNyYzsKKwkJCWlmICghc2F3X3hkaWdpdCkgeworCQkJCWlmIChjb2xvbnApCisJCQkJCXJldHVybiAoMCk7CisJCQkJY29sb25wID0gdHA7CisJCQkJY29udGludWU7CisJCQl9IGVsc2UgaWYgKCpzcmMgPT0gJ1wwJykgeworCQkJCXJldHVybiAoMCk7CisJCQl9CisJCQlpZiAodHAgKyBJTlQxNlNaID4gZW5kcCkKKwkJCQlyZXR1cm4gKDApOworCQkJKnRwKysgPSAodV9jaGFyKSAodmFsID4+IDgpICYgMHhmZjsKKwkJCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKKwkJCXNhd194ZGlnaXQgPSAwOworCQkJY291bnRfeGRpZ2l0ID0gMDsKKwkJCXZhbCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBJTkFERFJTWikgPD0gZW5kcCkgJiYKKwkJICAgIGluZXRfcHRvbjQoY3VydG9rLCB0cCkgPiAwKSB7CisJCQl0cCArPSBJTkFERFJTWjsKKwkJCXNhd194ZGlnaXQgPSAwOworCQkJY291bnRfeGRpZ2l0ID0gMDsKKwkJCWJyZWFrOwkvKiAnXDAnIHdhcyBzZWVuIGJ5IGluZXRfcHRvbjQoKS4gKi8KKwkJfQorCQlyZXR1cm4gKDApOworCX0KKwlpZiAoc2F3X3hkaWdpdCkgeworCQlpZiAodHAgKyBJTlQxNlNaID4gZW5kcCkKKwkJCXJldHVybiAoMCk7CisJCSp0cCsrID0gKHVfY2hhcikgKHZhbCA+PiA4KSAmIDB4ZmY7CisJCSp0cCsrID0gKHVfY2hhcikgdmFsICYgMHhmZjsKKwl9CisJaWYgKGNvbG9ucCAhPSBOVUxMKSB7CisJCS8qCisJCSAqIFNpbmNlIHNvbWUgbWVtbW92ZSgpJ3MgZXJyb25lb3VzbHkgZmFpbCB0byBoYW5kbGUKKwkJICogb3ZlcmxhcHBpbmcgcmVnaW9ucywgd2UnbGwgZG8gdGhlIHNoaWZ0IGJ5IGhhbmQuCisJCSAqLworCQljb25zdCBpbnQgbiA9IHRwIC0gY29sb25wOworCQlpbnQgaTsKKworCQlmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworCQkJZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKwkJCWNvbG9ucFtuIC0gaV0gPSAwOworCQl9CisJCXRwID0gZW5kcDsKKwl9CisJaWYgKHRwICE9IGVuZHApCisJCXJldHVybiAoMCk7CisJbWVtY3B5KGRzdCwgdG1wLCBJTjZBRERSU1opOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9SRUFETUUuVFhUIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYThjNWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvUkVBRE1FLlRYVApAQCAtMCwwICsxLDI2OCBAQAorQmlvbmljIGNvbWVzIHdpdGggYSBzZXQgb2YgJ2NsZWFuJyBMaW51eCBrZXJuZWwgaGVhZGVycyB0aGF0IGNhbiBzYWZlbHkgYmUKK2luY2x1ZGVkIGJ5IHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBhbmQgbGlicmFyaWVzIHdpdGhvdXQgZmVhciBvZiBoaWRlb3VzCitjb25mbGljdHMuIGZvciBtb3JlIGluZm9ybWF0aW9uIHdoeSB0aGlzIGlzIG5lZWRlZCwgc2VlIHRoZSAiUkFUSU9OQUxFIgorc2VjdGlvbiBhdCB0aGUgZW5kIG9mIHRoaXMgZG9jdW1lbnQuCisKK3RoZXNlIGNsZWFuIGhlYWRlcnMgYXJlIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGJ5IHNldmVyYWwgc2NyaXB0cyBsb2NhdGVkCitpbiB0aGUgJ2Jpb25pYy9rZXJuZWwvdG9vbHMnIGRpcmVjdG9yeSwgd2hpY2ggcHJvY2VzcyBhIHNldCBvZiBvcmlnaW5hbAorYW5kIHVubW9kaWZpZWQga2VybmVsIGhlYWRlcnMgaW4gb3JkZXIgdG8gZ2V0IHJpZCBvZiBtYW55IGFubm95aW5nCitkZWNsYXJhdGlvbnMgYW5kIGNvbnN0cnVjdHMgdGhhdCB1c3VhbGx5IHJlc3VsdCBpbiBjb21waWxhdGlvbiBmYWlsdXJlLgorCit0aGUgJ2NsZWFuIGhlYWRlcnMnIG9ubHkgY29udGFpbiB0eXBlIGFuZCBtYWNybyBkZWZpbml0aW9ucywgd2l0aCB0aGUKK2V4Y2VwdGlvbiBvZiBhIGNvdXBsZSBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB1c2VkIGZvciBwZXJmb3JtYW5jZQorcmVhc29uIChlLmcuIG9wdGltaXplZCBDUFUtc3BlY2lmaWMgYnl0ZS1zd2FwcGluZyByb3V0aW5lcykKKwordGhleSBjYW4gYmUgaW5jbHVkZWQgZnJvbSBDKyssIG9yIHdoZW4gY29tcGlsaW5nIGNvZGUgaW4gc3RyaWN0IEFOU0kgbW9kZS4KK3RoZXkgY2FuIGJlIGFsc28gaW5jbHVkZWQgYmVmb3JlIG9yIGFmdGVyIGFueSBCaW9uaWMgQyBsaWJyYXJ5IGhlYWRlci4KKwordGhlIGdlbmVyYXRpb24gcHJvY2VzcyB3b3JrcyBhcyBmb2xsb3dzOgorCisgICogJ2Jpb25pYy9rZXJuZWwvb3JpZ2luYWwvJworICAgIGNvbnRhaW5zIGEgc2V0IG9mIGtlcm5lbCBoZWFkZXJzIGFzIG5vcm1hbGx5IGZvdW5kIGluIHRoZSAnaW5jbHVkZScKKyAgICBkaXJlY3Rvcnkgb2YgYSBub3JtYWwgTGludXgga2VybmVsIHNvdXJjZSB0cmVlLiBub3RlIHRoYXQgdGhpcyBzaG91bGQKKyAgICBvbmx5IGNvbnRhaW4gdGhlIGZpbGVzIHRoYXQgYXJlIHJlYWxseSBuZWVkZWQgYnkgQW5kcm9pZCAodXNlCisgICAgJ2ZpbmRfaGVhZGVycy5weScgdG8gZmluZCB0aGVzZSBhdXRvbWF0aWNhbGx5KS4KKworICAqICdiaW9uaWMva2VybmVsL2NvbW1vbicKKyAgICBjb250YWlucyB0aGUgbm9uLWFyY2gtc3BlY2lmaWMgY2xlYW4gaGVhZGVycyBhbmQgZGlyZWN0b3JpZXMKKyAgICAoZS5nLiBsaW51eCwgYXNtLWdlbmVyaWMgYW5kIG10ZCkKKworICAqJ2Jpb25pYy9rZXJuZWwvYXJjaC1hcm0vJworICAgIGNvbnRhaW5zIHRoZSBBUk0tc3BlY2lmaWMgZGlyZWN0b3J5IHRyZWUgb2YgY2xlYW4gaGVhZGVycy4KKworICAqICdiaW9uaWMva2VybmVsL2FyY2gtYXJtL2xpbnV4JworICAgIGlzIHJlYWxseSBhIHN5bWxpbmsgdG8gJy4uL2NvbW1vbi9saW51eCcuIGRpdHRvIGZvciB0aGUgJ2FzbS1nZW5lcmljJworICAgIGFuZCAnbXRkJyBkaXJlY3RvcmllcworCisgICogJ2Jpb25pYy9rZXJuZWwvYXJjaC1hcm0vYXNtJworICAgIGNvbnRhaW5zIHRoZSByZWFsIEFSTS1zcGVjaWZpYyBoZWFkZXJzCisKKyAgKiAnYmlvbmljL2tlcm5lbC9hcmNoLXg4NicKKyAgICBzaW1pbGFybHkgY29udGFpbnMgYWxsIGhlYWRlcnMgYW5kIHN5bWxpbmtzIHRvIGJlIHVzZWQgb24geDg2CisKKyAgKiAnYmlvbmljL2tlcm5lbC90b29scycgY29udGFpbnMgdmFyaW91cyBQeXRob24gYW5kIHNoZWxsIHNjcmlwdHMgdXNlZAorICAgIHRvIG1hbmFnZSBhbmQgcmUtZ2VuZXJhdGUgdGhlIGhlYWRlcnMKKwordGhlIHRvb2xzIHlvdSBjYW4gdXNlIGFyZToKKworICAqIHRvb2xzL2ZpbmRfdXNlcnMucHkKKyAgICBzY2FucyBhIGxpc3Qgb2Ygc291cmNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGFuZCBwcmludHMgd2hpY2ggb25lcyBkbworICAgIGluY2x1ZGUgTGludXggaGVhZGVycy4KKworICAqIHRvb2xzL2ZpbmRfaGVhZGVycy5weQorICAgIHNjYW5zIGEgbGlzdCBvZiBzb3VyY2UgZmlsZXMgb3IgZGlyZWN0b3JpZXMgYW5kIHJlY3Vyc2l2ZWx5IGZpbmRzIGFsbAorICAgIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyB0aGV5IG5lZWQuCisKKyAgKiB0b29scy9jbGVhbl9oZWFkZXIucHkKKyAgICBwcmludHMgdGhlIGNsZWFuIHZlcnNpb24gb2YgYSBnaXZlbiBrZXJuZWwgaGVhZGVyLiB3aXRoIHRoZSAtdSBvcHRpb24sCisgICAgdGhpcyB3aWxsIGFsc28gdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nIGNsZWFuIGhlYWRlciBmaWxlIGlmIGl0cworICAgIGNvbnRlbnQgaGFzIGNoYW5nZWQuIHlvdSBjYW4gYWxzbyBwcm9jZXNzIG1vcmUgdGhhbiBvbmUgZmlsZSB3aXRoIC11CisKKyAgKiB0b29scy91cGRhdGVfYWxsLnB5CisgICAgYXV0b21hdGljYWxseSB1cGRhdGUgPGxpbnV4L19jb25maWcuaD4gYW5kIGFsbCBjbGVhbiBoZWFkZXJzIGZyb20KKyAgICB0aGUgY29udGVudCBvZiAnYmlvbmljL2tlcm5lbC9vcmlnaW5hbCcuIHRoaXMgaXMgdGhlIHNjcmlwdCB5b3UncmUKKyAgICBsaWtlbHkgZ29pbmcgdG8gcnVuIHdoZW5ldmVyIHlvdSB1cGRhdGUgdGhlIG9yaWdpbmFsIGhlYWRlcnMuCisKK05PVEU6CisgIGlmIEFORFJPSURfUFJPRFVDVF9PVVQgaXMgZGVmaW5lZCBpbiB5b3VyIGVudmlyb25tZW50LCBib3RoICdjbGVhbl9oZWFkZXIucHknCisgIGFuZCAndXBkYXRlX2FsbC5weScgd2lsbCBhdXRvbWF0aWNhbGx5IGlzc3VlICJwNCBhZGQvZWRpdC9kZWxldGUiIGNvbW1hbmRzCisgIGFwcHJvcHJpYXRlbHkgdG8gcmVmbGVjdCB0aGUgY2hhbmdlcyBiZWluZyBtYWRlLgorCisgIHlvdSB3aWxsIG5lZWQgdG8gInA0IHN1Ym1pdCIgbWFudWFsbHkgdGhvdWdoLi4uCisKKworSE9XIFRPIEJVSUxEIEJJT05JQyBBTkQgT1RIRVIgUFJPR1JBTVMgV0lUSCBUSEUgQ0xFQU4gSEVBREVSUzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CisKK3NpbXBseSBhZGQgYmlvbmljL2tlcm5lbC9hcmNoLTx5b3VyYXJjaD4gdG8geW91ciBDIGluY2x1ZGUgcGF0aC4gdGhhdCBzaG91bGQKK2JlIGVub3VnaC4gTm90ZSB0aGF0IEJpb25pYyB3aWxsIG5vdCBjb21waWxlIHByb3Blcmx5IGlmIHlvdSBkb24ndC4KKworCitIT1cgVE8gU1VQUE9SVCBBTk9USEVSIEFSQ0hJVEVDVFVSRToKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitzZWUgdGhlIGNvbnRlbnQgb2YgdG9vbHMvZGVmYXVsdHMucHksIHlvdSB3aWxsIG5lZWQgdG8gbWFrZSBhIGZldyB1cGRhdGVzCitoZXJlOgorCisgIC0gYWRkIGEgbmV3IGl0ZW0gdG8gdGhlICdrZXJuZWxfYXJjaHMnIGxpc3Qgb2Ygc3VwcG9ydGVkIGFyY2hpdGVjdHVyZXMKKworICAtIGFkZCBhIHByb3BlciBkZWZpbml0aW9uIGZvciAna2VybmVsX2tub3duXzxhcmNoPl9zdGF0aWNzJyB3aXRoCisgICAgcmVsZXZhbnQgZGVmaW5pdGlvbnMuCisKKyAgLSB1cGRhdGUgJ2tlcm5lbF9rbm93bl9zdGF0aWNzJyB0byBtYXAgIjxhcmNoPiIgdG8KKyAgICAna2VybmVsX2tub3duXzxhcmNoPl9zdGF0aWNzJworCit0aGVuLCBhZGQgdGhlIG5ldyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgaGVhZGVycyB0byBvcmlnaW5hbC9hc20tPGFyY2g+LgorKHBsZWFzZSBlbnN1cmUgdGhhdCB0aGVzZSBhcmUgcmVhbGx5IG5lZWRlZCwgZS5nLiB3aXRoIHRvb2xzL2ZpbmRfaGVhZGVycy5weSkKKworZmluYWxseSwgcnVuIHRvb2xzL3VwZGF0ZV9hbGwucHkKKworCisKK0hPVyBUTyBVUERBVEUgVEhFIEhFQURFUlMgV0hFTiBORUVERUQ6Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCitJTVBPUlRBTlQgSU1QT1JUQU5UOgorCisgIFdIRU4gVVBEQVRJTkcgVEhFIEhFQURFUlMsIEFMV0FZUyBDSEVDSyBUSEFUIFRIRSBORVcgQ0xFQU4gSEVBREVSUyBETworICBOT1QgQlJFQUsgVEhFIEtFUk5FTCA8LT4gVVNFUiBBQkksIEZPUiBFWEFNUExFIEJZIENIQU5HSU5HIFRIRSBTSVpFCisgIE9GIEEgR0lWRU4gVFlQRS4gVEhJUyBUQVNLIENBTk5PVCBCRSBFQVNJTFkgQVVUT01BVEVEIEFUIFRIRSBNT01FTlQKKworY29weSBhbnkgdXBkYXRlZCBrZXJuZWwgaGVhZGVyIGludG8gdGhlIGNvcnJlc3BvbmRpbmcgbG9jYXRpb24gdW5kZXIKKydiaW9uaWMva2VybmVsL29yaWdpbmFsJy4KKworZm9yIGFueSBuZXcga2VybmVsIGhlYWRlciB5b3Ugd2FudCB0byBhZGQsIGZpcnN0IHJ1biB0b29scy9maW5kX2hlYWRlcnMucHkgdG8gYmUKK3N1cmUgdGhhdCBpdCBpcyByZWFsbHkgbmVlZGVkIGJ5IHRoZSBBbmRyb2lkIHNvdXJjZXMuIHRoZW4gYWRkIGl0IHRvCisnYmlvbmljL2tlcm5lbC9vcmlnaW5hbCcKKwordGhlbiwgcnVuIHRvb2xzL3VwZGF0ZV9hbGwucHkgdG8gcmUtcnVuIHRoZSBhdXRvLWNsZWFuaW5nCisKKworCitIT1cgVEhFIENMRUFOVVAgUFJPQ0VTUyBXT1JLUzoKKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQorCit0aGlzIHNlY3Rpb24gZGVzY3JpYmVzIHRoZSBhY3Rpb24gcGVyZm9ybWVkIGJ5IHRoZSBjbGVhbnVwIHByb2dyYW0ocykgd2hlbiB0aGV5Citwcm9jZXNzIHRoZSBvcmlnaW5hbCBrZXJuZWwgaGVhZGVycyBpbnRvIGNsZWFuIG9uZXM6CisKKzEuIE9wdGltaXplIHdlbGwta25vd24gbWFjcm9zIChlLmcuIF9fS0VSTkVMX18sIF9fS0VSTkVMX1NUUklDVF9OQU1FUykKKworICAgIHRoaXMgcGFzcyBnZXRzIHJpZCBvZiBldmVyeXRoaW5nIHRoYXQgaXMgZ3VhcmRlZCBieSBhIHdlbGwta25vd24gbWFjcm8KKyAgICBkZWZpbml0aW9uLiB0aGlzIG1lYW5zIHRoYXQgYSBibG9jayBsaWtlCisKKyAgICAgICAjaWZkZWYgX19LRVJORUxfXworICAgICAgIC4uLi4KKyAgICAgICAjZW5kaWYKKworICAgIHdpbGwgYmUgdG90YWxseSBvbWl0dGVkIGZyb20gdGhlIG91dHB1dC4gdGhlIG9wdGltaXplciBpcyBzbWFydCBlbm91Z2ggdG8KKyAgICBoYW5kbGUgYWxsIGNvbXBsZXggQy1wcmVwcm9jZXNzb3IgY29uZGl0aW9uYWwgZXhwcmVzc2lvbiBhcHByb3ByaWF0ZWx5LgorICAgIHRoaXMgbWVhbnMgdGhhdCwgZm9yIGV4YW1wbGU6CisKKyAgICAgICAjaWYgZGVmaW5lZChfX0tFUk5FTF9fKSB8fCBkZWZpbmVkKEZPTykKKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgIHdpbGwgYmUgdHJhbnNmb3JtZWQgaW50bzoKKworICAgICAgICNpZmRlZiBGT08KKyAgICAgICAuLi4KKyAgICAgICAjZW5kaWYKKworICAgIHNlZSB0b29scy9kZWZhdWx0cy5weSBmb3IgdGhlIGxpc3Qgb2Ygd2VsbC1rbm93biBtYWNyb3MgdXNlZCBpbiB0aGlzIHBhc3MsCisgICAgaW4gY2FzZSB5b3UgbmVlZCB0byB1cGRhdGUgaXQgaW4gdGhlIGZ1dHVyZS4KKworICAgIG5vdGUgdGhhdCB0aGlzIGFsc28gcmVtb3ZlIGFueSByZWZlcmVuY2UgdG8gYSBrZXJuZWwtc3BlY2lmaWMgY29uZmlndXJhdGlvbgorICAgIG1hY3JvIGxpa2UgQ09ORklHX0ZPTyBmcm9tIHRoZSBjbGVhbiBoZWFkZXJzLgorCisKKzIuIHJlbW92ZSB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zOgorCisgIHRoaXMgcGFzcyBzY2FucyBub24tZGlyZWN0aXZlIHRleHQgYW5kIG9ubHkga2VlcHMgdGhpbmdzIHRoYXQgbG9vayBsaWtlIGEKKyAgdHlwZWRlZiBvciBzdHJ1Y3QgZGVjbGFyYXRpb24uIHRoaXMgYWxsb3dzIHRvIGdldCByaWQgb2YgYW55IHZhcmlhYmxlIG9yCisgIGZ1bmN0aW9uIGRlY2xhcmF0aW9uIHRoYXQgc2hvdWxkIG9ubHkgYmUgdXNlZCB3aXRoaW4gdGhlIGtlcm5lbCBhbnl3YXkKKyAgKGFuZCB3aGljaCBub3JtYWxseSAqc2hvdWxkKiBiZSBndWFyZGVkIGluIGEgI2lmZGVmIF9fS0VSTkVMX18gLi4uICNlbmRpZgorICBibG9jaywgaWYgdGhlIGtlcm5lbCB3cml0ZXJzIHdlcmUgbm90IHNvIG1lc3N5KQorCisgIHRoZXIgYXJlIGhvd2V2ZXIgYSBmZXcgZXhjZXB0aW9uczogaXQgaXMgc2VsZG9tIHVzZWZ1bCB0byBrZWVwIHRoZSBkZWZpbml0aW9uCisgIG9mIHNvbWUgc3RhdGljIGlubGluZSBmdW5jdGlvbnMgcGVyZm9ybWluZyB2ZXJ5IHNpbXBsZSBvcGVyYXRpb25zLiBhIGdvb2QKKyAgZXhhbXBsZSBpcyB0aGUgb3B0aW1pemVkIDMyLWJpdCBieXRlLXN3YXAgZnVuY3Rpb24gZm91bmQgaW4KKyAgYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCisKKyAgdGhlIGxpc3Qgb2YgZXhjZXB0aW9ucyBpcyBpbiB0b29scy9kZWZhdWx0cy5weSBpbiBjYXNlIHlvdSBuZWVkIHRvIHVwZGF0ZSBpdAorICBpbiB0aGUgZnV0dXJlLgorCisgIG5vdGUgdGhhdCB3ZSBkbyAqbm90KiByZW1vdmUgbWFjcm8gZGVmaW5pdGlvbnMsIGluY2x1ZGluZyB0aGVzZSBtYWNybyB0aGF0CisgIHBlcmZvcm0gYSBjYWxsIHRvIG9uZSBvZiB0aGVzZSBrZXJuZWwtaGVhZGVyIGZ1bmN0aW9ucywgb3IgZXZlbiBkZWZpbmUgb3RoZXIKKyAgZnVuY3Rpb25zLiB3ZSBjb25zaWRlciBpdCBzYWZlIHNpbmNlIHVzZXJsYW5kIGFwcGxpY2F0aW9ucyBoYXZlIG5vIGJ1c2luZXNzCisgIHVzaW5nIHRoZW0gYW55d2F5LgorCisKKzQuIHdoaXRlc3BhY2UgY2xlYW51cDoKKworICB0aGUgZmluYWwgcGFzcyByZW1vdmUgYW55IGNvbW1lbnRzIGFuZCBlbXB0eSBsaW5lcyBmcm9tIHRoZSBmaW5hbCBoZWFkZXJzLgorCisKKzUuIGFkZCBhIHN0YW5kYXJkIGRpc2NsYWltZXI6CisKKyAgcHJlcGVuZGVkIHRvIGVhY2ggZ2VuZXJhdGVkIGhlYWRlciwgY29udGFpbnMgYSBtZXNzYWdlIGxpa2UKKyAgImRvIG5vdCBlZGl0IGRpcmVjdGx5IC0gZmlsZSB3YXMgYXV0by1nZW5lcmF0ZWQgYnkgLi4uLiIKKworCitSQVRJT05BTEU6Cis9PT09PT09PT09CisKK09WRVJWSUVXIE9GIFRIRSBDVVJSRU5UIEtFUk5FTCBIRUFERVIgTUVTUzoKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworVGhlIG9yaWdpbmFsIGtlcm5lbCBoZWFkZXJzIGFyZSBub3QgZWFzaWx5IHVzYWJsZSBmcm9tIHVzZXJsYW5kIGFwcGxpY2F0aW9ucy4KK3RoZXkgY29udGFpbiBtYW55IGRlY2xhcmF0aW9ucyBhbmQgY29uc3RydWN0IHRoYXQgd2lsbCByZXN1bHQgaW4gYSBjb21waWxhdGlvbgorZmFpbHVyZSBvciBldmVuIHdvcnNlLCBpbmNvcnJlY3QgYmVoYXZpb3VyLiBmb3IgZXhhbXBsZToKKworLSBzb21lIGhlYWRlcnMgdHJ5IHRvIGRlZmluZSBQb3NpeCB0eXBlcyAoZS5nLiBzaXplX3QsIHNzaXplX3QpIHRoYXQgY2FuCisgIGNvbmZsaWN0IHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZGVmaW5pdGlvbnMgcHJvdmlkZWQgYnkgeW91ciBDIGxpYnJhcnkuCisKKy0gc29tZSBoZWFkZXJzIHVzZSBjb25zdHJ1Y3RzIHRoYXQgY2Fubm90IGJlIGNvbXBpbGVkIGluIEFOU0kgQyBtb2RlLgorCistIHNvbWUgaGVhZGVycyB1c2UgY29uc3RydWN0cyBkbyBub3QgY29tcGlsZSB3aXRoIEMrKyBhdCBhbGwuCisKKy0gc29tZSBoZWFkZXJzIGNvbnRhaW4gaW52YWxpZCAibGVnYWN5IiBkZWZpbml0aW9ucyBmb3IgdGhlIGJlbmVmaXQgb2Ygb2xkCisgIEMgbGlicmFyaWVzIChlLmcuIGdsaWJjNSkgYnV0IHJlc3VsdCBpbiBpbmNvcnJlY3QgYmVoYXZpb3VyIGlmIHVzZWQKKyAgZGlyZWN0bHkuCisKKyAgZS5nLiBnaWRfdCBiZWluZyBkZWZpbmVkIGluIDxsaW51eC90eXBlcy5oPiBhcyBhIDE2LWJpdCB0eXBlIHdoaWxlCisgIF9fa2VybmVsX2dpZF90IGlzIDMyLWJpdC4gdGhpcyByZXN1bHRzIGluIHByb2JsZW1zIHdoZW4gZ2V0Z3JvdXBzKCkgb3IKKyAgc2V0Z3JvdXBzKCkgYXJlIGNhbGxlZCwgc2luY2UgdGhleSBvcGVyYXRlIG9uIGdpZF90IGFycmF5cy4KKwordW5mb3J0dW5hdGVseSwgdGhlc2UgaGVhZGVycyBhcmUgYWxzbyB0aGUgb25seSBzb3VyY2Ugb2Ygc29tZSByZWFsbHkgZXh0ZW5zaXZlCitjb25zdGFudCBhbmQgdHlwZSBkZWZpbml0aW9ucyB0aGF0IGFyZSByZXF1aXJlZCBieSB1c2VybGFuZCBhcHBsaWNhdGlvbnMuCit0aGluayBhbnkgbGlicmFyeS9wcm9ncmFtIHRoYXQgbmVlZCB0byBhY2Nlc3MgQUxTQSwgb3IgVmlkZW80TGludXgsIG9yCithbnl0aGluZyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgZGV2aWNlIG9yIExpbnV4LXNwZWNpZmljIHN5c3RlbSBpbnRlcmZhY2UKKyhlLmcuIElPQ1RMUywgZXRjLi4uKQorCitBcyBhIGNvbnNlcXVlbmNlLCBldmVyeSBMaW51eCBkaXN0cmlidXRpb24gcHJvdmlkZXMgYSBzZXQgb2YgcGF0Y2hlZCBrZXJuZWwKK2hlYWRlcnMgdG8gYmUgdXNlZCBieSB1c2VybGFuZCBhcHBsaWNhdGlvbnMgKHdoaWNoIGluc3RhbGxzIGluCisvdXNyL2luY2x1ZGUvbGludXgvLCAvdXNyL2luY2x1ZGUvYXNtLywgZXRjLi4uKS4gdGhlc2UgYXJlIG1hbnVhbGx5IG1haW50YWluZWQKK2J5IGRpc3RyaWJ1dGlvbiBwYWNrYWdlcnMsIGFuZCBnZW5lcmF0ZWQgZWl0aGVyIG1hbnVhbGx5IG9yIHdpdGggdmFyaW91cworc2NyaXB0cy4gdGhlc2UgaGVhZGVycyBhcmUgYWxzbyB0YWlsb3JlZCB0byBHTlUgTGliQyBhbmQgY2Fubm90IGJlIHJldXNlZAorZWFzaWx5IGJ5IEJpb25pYy4KKwordGhlIGtlcm5lbCBhdXRob3JzIGhhdmUgYWxyZWFkeSBzdGF0ZWQgdGhhdCB0aGV5IGRvbid0IHdhbnQgdG8gZml4IHRoZQorcHJvYmxlbSwgZXZlbiB3aGVuIHNvbWVvbmUgcHJvcG9zZWQgYSBwYXRjaCB0byBzdGFydCBjbGVhbmluZyB0aGUgb2ZmaWNpYWwKK2hlYWRlcnMuIGZyb20gdGhlaXIgcG9pbnQgb2YgdmlldyB0aGlzIGlzIHB1cmVseSBhIGxpYnJhcnkgYXV0aG9yIHByb2JsZW0uCisKK3llYWgsIHJpZ2h0Li4uLgorCisKK1dIQVQgV0UgRE86CistLS0tLS0tLS0tLQorCitzbyB3ZSdyZSBkb29tZWQgdG8gcmVwZWF0IHRoZSBzYW1lIGVmZm9ydCB0aGFuIGFueW9uZSBlbHNlLiB0aGUgYmlnIGRpZmZlcmVuY2UKK2hlcmUgaXMgdGhhdCB3ZSB3YW50IHRvIGF1dG9tYXRlIGFzIG11Y2ggYXMgcG9zc2libGUgdGhlIGdlbmVyYXRpb24gb2YgdGhlCitjbGVhbiBoZWFkZXJzIHRvIGVhc2lseSBzdXBwb3J0IGFkZGl0aW9uYWwgYXJjaGl0ZWN0dXJlcyBpbiB0aGUgZnV0dXJlLAorYW5kIGtlZXAgY3VycmVudCB3aXRoIHVwc3RyZWFtIGNoYW5nZXMgaW4gdGhlIGhlYWRlciBkZWZpbml0aW9ucyB3aXRoIHRoZQorbGVhc3QgcG9zc2libGUgaGFzc2xlLgorCitvZiBjb3Vyc2UsIHRoaXMgaXMgb25seSBhIHJhY2UgdG8gdGhlIGJvdHRvbS4gdGhlIGtlcm5lbCBtYWludGFpbmVycyBzdGlsbAorZmVlbCBmcmVlIHRvIHJhbmRvbWx5IGJyZWFrIHRoZSBzdHJ1Y3R1cmUgb2YgdGhlaXIgaGVhZGVycyAoZS5nLiBtb3ZpbmcgdGhlCitsb2NhdGlvbiBvZiBzb21lIGZpbGVzKSBvY2Nhc2lvbmFsbHksIHNvIHdlJ2xsIG5lZWQgdG8ga2VlcCB1cCB3aXRoIHRoYXQgYnkKK3VwZGF0aW5nIG91ciBidWlsZCBzY3JpcHQvb3JpZ2luYWwgaGVhZGVycyBhcyB0aGVzZSBjYXNlcyBoYXBwZW4uCisKK3doYXQgd2UgZG8gaXMga2VlcCBhIHNldCBvZiAib3JpZ2luYWwiIGtlcm5lbCBoZWFkZXJzLCBhbmQgcHJvY2VzcyB0aGVtCithdXRvbWF0aWNhbGx5IHRvIGdlbmVyYXRlIGEgc2V0IG9mICJjbGVhbiIgaGVhZGVycyB0aGF0IGNhbiBiZSB1c2VkIGZyb20KK3VzZXJsYW5kIGFuZCB0aGUgQyBsaWJyYXJ5LgorCitub3RlIHRoYXQgdGhlICJvcmlnaW5hbCIgaGVhZGVycyBjYW4gYmUgdHdlYWtlZCBhIGxpdHRsZSB0byBhdm9pZCBzb21lIHN1YnRsZQoraXNzdWVzLiBmb3IgZXhhbXBsZToKKworLSB3aGVuIHRoZSBsb2NhdGlvbiBvZiB2YXJpb3VzIFVTQi1yZWxhdGVkIGhlYWRlcnMgY2hhbmdlcyBpbiB0aGUga2VybmVsCisgIHNvdXJjZSB0cmVlLCB3ZSB3YW50IHRvIGtlZXAgdGhlbSBhdCB0aGUgc2FtZSBsb2NhdGlvbiBpbiBvdXIgZ2VuZXJhdGVkCisgIGhlYWRlcnMgKHRoZXJlIGlzIG5vIHJlYXNvbiB0byBicmVhayB0aGUgdXNlcmxhbmQgQVBJIGZvciBzb21ldGhpbmcKKyAgbGlrZSB0aGF0KS4KKworLSBzb21ldGltZXMsIHdlIHByZWZlciB0byB0YWtlIGNlcnRhaW4gdGhpbmdzIG91dCBvZiBibG9ja3MgZ3VhcmRlZCBieSBhCisgICNpZmRlZiBfX0tFUk5FTF9fIC4uICNlbmRpZi4gZm9yIGV4YW1wbGUsIG9uIHJlY2VudCBrZXJuZWxzIDxsaW51eC93aXJlbGVzcy5oPgorICBvbmx5IGluY2x1ZGVzIDxsaW51eC9pZi5oPiB3aGVuIGluIGtlcm5lbCBtb2RlLiB3ZSBtYWtlIGl0IGF2YWlsYWJsZSB0bworICB1c2VybGFuZCBhcyB3ZWxsIHNpbmNlIHNvbWUgY29kZSBvdXQgdGhlcmUgYXNzdW1lcyB0aGF0IHRoaXMgaXMgdGhlIGNhc2UuCisKKy0gc29tZXRpbWVzLCB0aGUgaGVhZGVyIGlzIHNpbXBseSBpbmNvcnJlY3QgKGUuZy4gaXQgdXNlcyBhIHR5cGUgd2l0aG91dAorICBpbmNsdWRpbmcgdGhlIGhlYWRlciB0aGF0IGRlZmluZXMgaXQgYmVmb3JlLWhhbmQpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYS5vdXQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hLm91dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4ZjE3ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYS5vdXQuaApAQCAtMCwwICsxLDQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJNX0FfT1VUX0hfXworI2RlZmluZSBfX0FSTV9BX09VVF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3BlcnNvbmFsaXR5Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBleGVjCit7CisgX191MzIgYV9pbmZvOworIF9fdTMyIGFfdGV4dDsKKyBfX3UzMiBhX2RhdGE7CisgX191MzIgYV9ic3M7CisgX191MzIgYV9zeW1zOworIF9fdTMyIGFfZW50cnk7CisgX191MzIgYV90cnNpemU7CisgX191MzIgYV9kcnNpemU7Cit9OworCisjZGVmaW5lIE5fVFhUQUREUihhKSAoMHgwMDAwODAwMCkKKworI2RlZmluZSBOX1RSU0laRShhKSAoKGEpLmFfdHJzaXplKQorI2RlZmluZSBOX0RSU0laRShhKSAoKGEpLmFfZHJzaXplKQorI2RlZmluZSBOX1NZTVNJWkUoYSkgKChhKS5hX3N5bXMpCisKKyNkZWZpbmUgTV9BUk0gMTAzCisKKyNpZm5kZWYgTElCUkFSWV9TVEFSVF9URVhUCisjZGVmaW5lIExJQlJBUllfU1RBUlRfVEVYVCAoMHgwMGMwMDAwMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLXBlcnNldXMyLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC1wZXJzZXVzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2YzU0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC1wZXJzZXVzMi5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX1BFUlNFVVMyX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2ZwZ2EuaD4KKworI2lmbmRlZiBPTUFQX1NEUkFNX0RFVklDRQorI2RlZmluZSBPTUFQX1NEUkFNX0RFVklDRSBEMjU2TV8xWDE2XzRCCisjZW5kaWYKKworI2RlZmluZSBNQVhJUlFOVU0gSUhfQk9BUkRfQkFTRQorI2RlZmluZSBNQVhGSVFOVU0gTUFYSVJRTlVNCisjZGVmaW5lIE1BWFNXSU5VTSBNQVhJUlFOVU0KKworI2RlZmluZSBOUl9JUlFTIChNQVhJUlFOVU0gKyAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2JvYXJkLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3YTRjNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ib2FyZC5oCkBAIC0wLDAgKzEsMTYzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9PTUFQX0JPQVJEX0gKKyNkZWZpbmUgX09NQVBfQk9BUkRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2luY2x1ZGUgPGFzbS9hcmNoL2dwaW8tc3dpdGNoLmg+CisKKyNkZWZpbmUgT01BUF9UQUdfQ0xPQ0sgMHg0ZjAxCisjZGVmaW5lIE9NQVBfVEFHX01NQyAweDRmMDIKKyNkZWZpbmUgT01BUF9UQUdfU0VSSUFMX0NPTlNPTEUgMHg0ZjAzCisjZGVmaW5lIE9NQVBfVEFHX1VTQiAweDRmMDQKKyNkZWZpbmUgT01BUF9UQUdfTENEIDB4NGYwNQorI2RlZmluZSBPTUFQX1RBR19HUElPX1NXSVRDSCAweDRmMDYKKyNkZWZpbmUgT01BUF9UQUdfVUFSVCAweDRmMDcKKyNkZWZpbmUgT01BUF9UQUdfRkJNRU0gMHg0ZjA4CisjZGVmaW5lIE9NQVBfVEFHX1NUSV9DT05TT0xFIDB4NGYwOQorI2RlZmluZSBPTUFQX1RBR19DQU1FUkFfU0VOU09SIDB4NGYwYQorI2RlZmluZSBPTUFQX1RBR19CVCAweDRmMGIKKworI2RlZmluZSBPTUFQX1RBR19CT09UX1JFQVNPTiAweDRmODAKKyNkZWZpbmUgT01BUF9UQUdfRkxBU0hfUEFSVCAweDRmODEKKyNkZWZpbmUgT01BUF9UQUdfVkVSU0lPTl9TVFIgMHg0ZjgyCisKK3N0cnVjdCBvbWFwX2Nsb2NrX2NvbmZpZyB7CisKKyB1OCBzeXN0ZW1fY2xvY2tfdHlwZTsKK307CisKK3N0cnVjdCBvbWFwX21tY19jb25mIHsKKyB1bnNpZ25lZCBlbmFibGVkOjE7CisKKyB1bnNpZ25lZCBub211eDoxOworCisgdW5zaWduZWQgY292ZXI6MTsKKworIHVuc2lnbmVkIHdpcmU0OjE7CisgczE2IHBvd2VyX3BpbjsKKyBzMTYgc3dpdGNoX3BpbjsKKyBzMTYgd3BfcGluOworfTsKKworc3RydWN0IG9tYXBfbW1jX2NvbmZpZyB7Cisgc3RydWN0IG9tYXBfbW1jX2NvbmYgbW1jWzJdOworfTsKKworc3RydWN0IG9tYXBfc2VyaWFsX2NvbnNvbGVfY29uZmlnIHsKKyB1OCBjb25zb2xlX3VhcnQ7CisgdTMyIGNvbnNvbGVfc3BlZWQ7Cit9OworCitzdHJ1Y3Qgb21hcF9zdGlfY29uc29sZV9jb25maWcgeworIHVuc2lnbmVkIGVuYWJsZToxOworIHU4IGNoYW5uZWw7Cit9OworCitzdHJ1Y3Qgb21hcF9jYW1lcmFfc2Vuc29yX2NvbmZpZyB7CisgdTE2IHJlc2V0X2dwaW87CisgaW50ICgqcG93ZXJfb24pKHZvaWQgKiBkYXRhKTsKKyBpbnQgKCpwb3dlcl9vZmYpKHZvaWQgKiBkYXRhKTsKK307CisKK3N0cnVjdCBvbWFwX3VzYl9jb25maWcgeworCisgdW5zaWduZWQgcmVnaXN0ZXJfaG9zdDoxOworIHVuc2lnbmVkIHJlZ2lzdGVyX2RldjoxOworIHU4IG90ZzsKKworIHU4IGhtY19tb2RlOworCisgdTggcndjOworCisgdTggcGluc1szXTsKK307CisKK3N0cnVjdCBvbWFwX2xjZF9jb25maWcgeworIGNoYXIgcGFuZWxfbmFtZVsxNl07CisgY2hhciBjdHJsX25hbWVbMTZdOworIHMxNiBucmVzZXRfZ3BpbzsKKyB1OCBkYXRhX2xpbmVzOworfTsKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBmYl9pbmZvOworc3RydWN0IG9tYXBfYmFja2xpZ2h0X2NvbmZpZyB7CisgaW50IGRlZmF1bHRfaW50ZW5zaXR5OworIGludCAoKnNldF9wb3dlcikoc3RydWN0IGRldmljZSAqZGV2LCBpbnQgc3RhdGUpOworIGludCAoKmNoZWNrX2ZiKShzdHJ1Y3QgZmJfaW5mbyAqZmIpOworfTsKKworc3RydWN0IG9tYXBfZmJtZW1fY29uZmlnIHsKKyB1MzIgc3RhcnQ7CisgdTMyIHNpemU7Cit9OworCitzdHJ1Y3Qgb21hcF9wd21fbGVkX3BsYXRmb3JtX2RhdGEgeworIGNvbnN0IGNoYXIgKm5hbWU7CisgaW50IGludGVuc2l0eV90aW1lcjsKKyBpbnQgYmxpbmtfdGltZXI7Cisgdm9pZCAoKnNldF9wb3dlcikoc3RydWN0IG9tYXBfcHdtX2xlZF9wbGF0Zm9ybV9kYXRhICpzZWxmLCBpbnQgb25fb2ZmKTsKK307CisKK3N0cnVjdCBvbWFwX2dwaW9fc3dpdGNoX2NvbmZpZyB7CisgY2hhciBuYW1lWzEyXTsKKyB1MTYgZ3BpbzsKKyBpbnQgZmxhZ3M6NDsKKyBpbnQgdHlwZTo0OworIGludCBrZXlfY29kZToyNDsKK307CisKK3N0cnVjdCBvbWFwX3VhcnRfY29uZmlnIHsKKworIHVuc2lnbmVkIGludCBlbmFibGVkX3VhcnRzOworfTsKKworc3RydWN0IG9tYXBfZmxhc2hfcGFydF9jb25maWcgeworIGNoYXIgcGFydF90YWJsZVswXTsKK307CisKK3N0cnVjdCBvbWFwX2Jvb3RfcmVhc29uX2NvbmZpZyB7CisgY2hhciByZWFzb25fc3RyWzEyXTsKK307CisKK3N0cnVjdCBvbWFwX3ZlcnNpb25fY29uZmlnIHsKKyBjaGFyIGNvbXBvbmVudFsxMl07CisgY2hhciB2ZXJzaW9uWzEyXTsKK307CisKK3N0cnVjdCBvbWFwX2JvYXJkX2NvbmZpZ19lbnRyeSB7CisgdTE2IHRhZzsKKyB1MTYgbGVuOworIHU4IGRhdGFbMF07Cit9OworCitzdHJ1Y3Qgb21hcF9ib2FyZF9jb25maWdfa2VybmVsIHsKKyB1MTYgdGFnOworIGNvbnN0IHZvaWQgKmRhdGE7Cit9OworCitzdHJ1Y3Qgb21hcF9ibHVldG9vdGhfY29uZmlnIHsKKyB1OCBjaGlwX3R5cGU7CisgdTggYnRfdWFydDsKKyB1OCBiZF9hZGRyWzZdOworIHU4IGJ0X3N5c2NsazsKKyBpbnQgYnRfd2FrZXVwX2dwaW87CisgaW50IGhvc3Rfd2FrZXVwX2dwaW87CisgaW50IHJlc2V0X2dwaW87Cit9OworCisjZGVmaW5lIG9tYXBfZ2V0X2NvbmZpZyh0YWcsIHR5cGUpICAgKChjb25zdCB0eXBlICopIF9fb21hcF9nZXRfY29uZmlnKCh0YWcpLCBzaXplb2YodHlwZSksIDApKQorI2RlZmluZSBvbWFwX2dldF9ucl9jb25maWcodGFnLCB0eXBlLCBucikgICAoKGNvbnN0IHR5cGUgKikgX19vbWFwX2dldF9jb25maWcoKHRhZyksIHNpemVvZih0eXBlKSwgKG5yKSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvY3B1LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTdhNDA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvY3B1LmgKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfQ1BVX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX0NQVV9ICisKKyNkZWZpbmUgb21hcDJfY3B1X3JldigpICgoc3lzdGVtX3JldiA+PiA4KSAmIDB4MGYpCisKKyN1bmRlZiBNVUxUSV9PTUFQMQorI3VuZGVmIE1VTFRJX09NQVAyCisjdW5kZWYgT01BUF9OQU1FCisKKyNkZWZpbmUgR0VUX09NQVBfQ0xBU1MgKHN5c3RlbV9yZXYgJiAweGZmKQorCisjZGVmaW5lIElTX09NQVBfQ0xBU1MoY2xhc3MsIGlkKSAgc3RhdGljIGlubGluZSBpbnQgaXNfb21hcCAjI2NsYXNzICh2b2lkKSAgeyAgIHJldHVybiAoR0VUX09NQVBfQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsgIH0KKworI2RlZmluZSBHRVRfT01BUF9TVUJDTEFTUyAoKHN5c3RlbV9yZXYgPj4gMjApICYgMHgwZmZmKQorCisjZGVmaW5lIElTX09NQVBfU1VCQ0xBU1Moc3ViY2xhc3MsIGlkKSAgc3RhdGljIGlubGluZSBpbnQgaXNfb21hcCAjI3N1YmNsYXNzICh2b2lkKSAgeyAgIHJldHVybiAoR0VUX09NQVBfU1VCQ0xBU1MgPT0gKGlkKSkgPyAxIDogMDsgIH0KKworI2RlZmluZSBjcHVfaXNfb21hcDd4eCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNXh4KCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDE2eHgoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMjR4eCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDJ4KCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDI0M3goKSAwCisjaWZkZWYgTVVMVElfT01BUDEKKyNlbHNlCisjZW5kaWYKKyNkZWZpbmUgR0VUX09NQVBfVFlQRSAoKHN5c3RlbV9yZXYgPj4gMTYpICYgMHhmZmZmKQorI2RlZmluZSBJU19PTUFQX1RZUEUodHlwZSwgaWQpICBzdGF0aWMgaW5saW5lIGludCBpc19vbWFwICMjdHlwZSAodm9pZCkgIHsgICByZXR1cm4gKEdFVF9PTUFQX1RZUEUgPT0gKGlkKSkgPyAxIDogMDsgIH0KKyNkZWZpbmUgY3B1X2lzX29tYXAzMTAoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwNzMwKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDE1MTAoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMTYxMCgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXA1OTEyKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDE2MTEoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMTYyMSgpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAxNzEwKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MjAoKSAwCisjZGVmaW5lIGNwdV9pc19vbWFwMjQyMigpIDAKKyNkZWZpbmUgY3B1X2lzX29tYXAyNDIzKCkgMAorI2RlZmluZSBjcHVfaXNfb21hcDI0MzAoKSAwCisjaWZkZWYgTVVMVElfT01BUDEKKyNlbHNlCisjZW5kaWYKKyNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAxKCkgKGNwdV9pc19vbWFwNzMwKCkgfHwgY3B1X2lzX29tYXAxNXh4KCkgfHwgICBjcHVfaXNfb21hcDE2eHgoKSkKKyNkZWZpbmUgY3B1X2NsYXNzX2lzX29tYXAyKCkgY3B1X2lzX29tYXAyNHh4KCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZG1hLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9kbWEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZTViZTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZG1hLmgKQEAgLTAsMCArMSwzMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9ETUFfSAorI2RlZmluZSBfX0FTTV9BUkNIX0RNQV9ICisKKyNkZWZpbmUgT01BUF9ETUFfQkFTRSAoMHhmZmZlZDgwMCkKKyNkZWZpbmUgT01BUF9ETUFfR0NSIChPTUFQX0RNQV9CQVNFICsgMHg0MDApCisjZGVmaW5lIE9NQVBfRE1BX0dTQ1IgKE9NQVBfRE1BX0JBU0UgKyAweDQwNCkKKyNkZWZpbmUgT01BUF9ETUFfR1JTVCAoT01BUF9ETUFfQkFTRSArIDB4NDA4KQorI2RlZmluZSBPTUFQX0RNQV9IV19JRCAoT01BUF9ETUFfQkFTRSArIDB4NDQyKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gyX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NDQpCisjZGVmaW5lIE9NQVBfRE1BX1BDSDBfSUQgKE9NQVBfRE1BX0JBU0UgKyAweDQ0NikKKyNkZWZpbmUgT01BUF9ETUFfUENIMV9JRCAoT01BUF9ETUFfQkFTRSArIDB4NDQ4KQorI2RlZmluZSBPTUFQX0RNQV9QQ0hHX0lEIChPTUFQX0RNQV9CQVNFICsgMHg0NGEpCisjZGVmaW5lIE9NQVBfRE1BX1BDSERfSUQgKE9NQVBfRE1BX0JBU0UgKyAweDQ0YykKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX1UgKE9NQVBfRE1BX0JBU0UgKyAweDQ0ZSkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18wX0wgKE9NQVBfRE1BX0JBU0UgKyAweDQ1MCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX1UgKE9NQVBfRE1BX0JBU0UgKyAweDQ1MikKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18xX0wgKE9NQVBfRE1BX0JBU0UgKyAweDQ1NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0FQU18yIChPTUFQX0RNQV9CQVNFICsgMHg0NTYpCisjZGVmaW5lIE9NQVBfRE1BX0NBUFNfMyAoT01BUF9ETUFfQkFTRSArIDB4NDU4KQorI2RlZmluZSBPTUFQX0RNQV9DQVBTXzQgKE9NQVBfRE1BX0JBU0UgKyAweDQ1YSkKKyNkZWZpbmUgT01BUF9ETUFfUENIMl9TUiAoT01BUF9ETUFfQkFTRSArIDB4NDYwKQorI2RlZmluZSBPTUFQX0RNQV9QQ0gwX1NSIChPTUFQX0RNQV9CQVNFICsgMHg0ODApCisjZGVmaW5lIE9NQVBfRE1BX1BDSDFfU1IgKE9NQVBfRE1BX0JBU0UgKyAweDQ4MikKKyNkZWZpbmUgT01BUF9ETUFfUENIRF9TUiAoT01BUF9ETUFfQkFTRSArIDB4NGMwKQorCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9CQVNFIChMNF8yNFhYX0JBU0UgKyAweDU2MDAwKQorI2RlZmluZSBPTUFQX0RNQTRfUkVWSVNJT04gKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgwMCkKKyNkZWZpbmUgT01BUF9ETUE0X0dDUl9SRUcgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3OCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMCAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDA4KQorI2RlZmluZSBPTUFQX0RNQTRfSVJRU1RBVFVTX0wxIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MGMpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFTVEFUVVNfTDIgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxMCkKKyNkZWZpbmUgT01BUF9ETUE0X0lSUVNUQVRVU19MMyAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDE0KQorI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wwIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MTgpCisjZGVmaW5lIE9NQVBfRE1BNF9JUlFFTkFCTEVfTDEgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgxYykKKyNkZWZpbmUgT01BUF9ETUE0X0lSUUVOQUJMRV9MMiAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDIwKQorI2RlZmluZSBPTUFQX0RNQTRfSVJRRU5BQkxFX0wzIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4MjQpCisjZGVmaW5lIE9NQVBfRE1BNF9TWVNTVEFUVVMgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHgyOCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfMCAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDY0KQorI2RlZmluZSBPTUFQX0RNQTRfQ0FQU18yIChPTUFQMjRYWF9ETUFfQkFTRSArIDB4NmMpCisjZGVmaW5lIE9NQVBfRE1BNF9DQVBTXzMgKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg3MCkKKyNkZWZpbmUgT01BUF9ETUE0X0NBUFNfNCAoT01BUDI0WFhfRE1BX0JBU0UgKyAweDc0KQorCisjZGVmaW5lIE9NQVBfTE9HSUNBTF9ETUFfQ0hfQ09VTlQgMzIgIAorCisjZGVmaW5lIE9NQVBfRE1BX0NDUl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDgwKQorI2RlZmluZSBPTUFQX0RNQV9DTE5LX0NUUkxfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0lDUl9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDg4KQorI2RlZmluZSBPTUFQX0RNQV9DU1JfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg4YykKKyNkZWZpbmUgT01BUF9ETUFfQ1NEUF9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweDkwKQorI2RlZmluZSBPTUFQX0RNQV9DRU5fUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5NCkKKyNkZWZpbmUgT01BUF9ETUFfQ0ZOX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4OTgpCisjZGVmaW5lIE9NQVBfRE1BX0NTRUlfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhNCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NGSV9SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGE4KQorI2RlZmluZSBPTUFQX0RNQV9DREVJX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YWMpCisjZGVmaW5lIE9NQVBfRE1BX0NERklfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiMCkKKyNkZWZpbmUgT01BUF9ETUFfQ1NBQ19SRUcobikgX19SRUczMihPTUFQMjRYWF9ETUFfQkFTRSArIDB4NjAgKiAobikgKyAweGI0KQorI2RlZmluZSBPTUFQX0RNQV9DREFDX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YjgpCisKKyNkZWZpbmUgT01BUDFfRE1BX0NTU0FfTF9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MDgpCisjZGVmaW5lIE9NQVAxX0RNQV9DU1NBX1VfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDBhKQorI2RlZmluZSBPTUFQMV9ETUFfQ0RTQV9MX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgwYykKKyNkZWZpbmUgT01BUDFfRE1BX0NEU0FfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MGUpCisjZGVmaW5lIE9NQVAxX0RNQV9DT0xPUl9MX1JFRyhuKSBfX1JFRzE2KE9NQVBfRE1BX0JBU0UgKyAweDQwICogKG4pICsgMHgyMCkKKyNkZWZpbmUgT01BUDFfRE1BX0NDUjJfUkVHKG4pIF9fUkVHMTYoT01BUF9ETUFfQkFTRSArIDB4NDAgKiAobikgKyAweDI0KQorI2RlZmluZSBPTUFQMV9ETUFfQ09MT1JfVV9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MjIpCisjZGVmaW5lIE9NQVAxX0RNQV9MQ0hfQ1RSTF9SRUcobikgX19SRUcxNihPTUFQX0RNQV9CQVNFICsgMHg0MCAqIChuKSArIDB4MmEpCisKKyNkZWZpbmUgT01BUDJfRE1BX0NTU0FfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHg5YykKKyNkZWZpbmUgT01BUDJfRE1BX0NEU0FfUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhhMCkKKyNkZWZpbmUgT01BUDJfRE1BX0NDRU5fUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhiYykKKyNkZWZpbmUgT01BUDJfRE1BX0NDRk5fUkVHKG4pIF9fUkVHMzIoT01BUDI0WFhfRE1BX0JBU0UgKyAweDYwICogKG4pICsgMHhjMCkKKyNkZWZpbmUgT01BUDJfRE1BX0NPTE9SX1JFRyhuKSBfX1JFRzMyKE9NQVAyNFhYX0RNQV9CQVNFICsgMHg2MCAqIChuKSArIDB4YzQpCisKKyNkZWZpbmUgT01BUF9ETUFfTk9fREVWSUNFIDAKKyNkZWZpbmUgT01BUF9ETUFfTUNTSTFfVFggMQorI2RlZmluZSBPTUFQX0RNQV9NQ1NJMV9SWCAyCisjZGVmaW5lIE9NQVBfRE1BX0kyQ19SWCAzCisjZGVmaW5lIE9NQVBfRE1BX0kyQ19UWCA0CisjZGVmaW5lIE9NQVBfRE1BX0VYVF9ORE1BX1JFUSA1CisjZGVmaW5lIE9NQVBfRE1BX0VYVF9ORE1BX1JFUTIgNgorI2RlZmluZSBPTUFQX0RNQV9VV0lSRV9UWCA3CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQMV9UWCA4CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQMV9SWCA5CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQM19UWCAxMAorI2RlZmluZSBPTUFQX0RNQV9NQ0JTUDNfUlggMTEKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDFfVFggMTIKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDFfUlggMTMKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDJfVFggMTQKKyNkZWZpbmUgT01BUF9ETUFfVUFSVDJfUlggMTUKKyNkZWZpbmUgT01BUF9ETUFfTUNCU1AyX1RYIDE2CisjZGVmaW5lIE9NQVBfRE1BX01DQlNQMl9SWCAxNworI2RlZmluZSBPTUFQX0RNQV9VQVJUM19UWCAxOAorI2RlZmluZSBPTUFQX0RNQV9VQVJUM19SWCAxOQorI2RlZmluZSBPTUFQX0RNQV9DQU1FUkFfSUZfUlggMjAKKyNkZWZpbmUgT01BUF9ETUFfTU1DX1RYIDIxCisjZGVmaW5lIE9NQVBfRE1BX01NQ19SWCAyMgorI2RlZmluZSBPTUFQX0RNQV9OQU5EIDIzCisjZGVmaW5lIE9NQVBfRE1BX0lSUV9MQ0RfTElORSAyNAorI2RlZmluZSBPTUFQX0RNQV9NRU1PUllfU1RJQ0sgMjUKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfUlgwIDI2CisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1JYMSAyNworI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19SWDIgMjgKKyNkZWZpbmUgT01BUF9ETUFfVVNCX1cyRkNfVFgwIDI5CisjZGVmaW5lIE9NQVBfRE1BX1VTQl9XMkZDX1RYMSAzMAorI2RlZmluZSBPTUFQX0RNQV9VU0JfVzJGQ19UWDIgMzEKKworI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX0lOIDMyCisjZGVmaW5lIE9NQVBfRE1BX1NQSV9UWCAzMworI2RlZmluZSBPTUFQX0RNQV9TUElfUlggMzQKKyNkZWZpbmUgT01BUF9ETUFfQ1JZUFRPX0hBU0ggMzUKKyNkZWZpbmUgT01BUF9ETUFfQ0NQX0FUVE4gMzYKKyNkZWZpbmUgT01BUF9ETUFfQ0NQX0ZJRk9fTk9UX0VNUFRZIDM3CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8wIDM4CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8wIDM5CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8xIDQwCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8xIDQxCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8yIDQyCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8yIDQzCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl8zIDQ0CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl8zIDQ1CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl80IDQ2CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl80IDQ3CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl81IDQ4CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl81IDQ5CisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl82IDUwCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl82IDUxCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfVFhfQ0hBTl83IDUyCisjZGVmaW5lIE9NQVBfRE1BX0NNVF9BUEVfUlZfQ0hBTl83IDUzCisjZGVmaW5lIE9NQVBfRE1BX01NQzJfVFggNTQKKyNkZWZpbmUgT01BUF9ETUFfTU1DMl9SWCA1NQorI2RlZmluZSBPTUFQX0RNQV9DUllQVE9fREVTX09VVCA1NgorCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9OT19ERVZJQ0UgMAorI2RlZmluZSBPTUFQMjRYWF9ETUFfWFRJX0RNQSAxICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVEwIDIgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRVhUX0RNQVJFUTEgMyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9HUE1DIDQgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfR0ZYIDUgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRFNTIDYgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVkxZTlFfVFggNyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9DV1QgOCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfVFggOSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9BRVNfUlggMTAgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfREVTX1RYIDExICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0RFU19SWCAxMiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TSEExTUQ1X1JYIDEzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVEyIDE0ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVEzIDE1ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VYVF9ETUFSRVE0IDE2ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19BQ19SRCAxNyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQUNfV1IgMTggIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX1VMX1JEIDE5ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19NRF9VTF9XUiAyMCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfTURfRExfUkQgMjEgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX01EX0RMX1dSIDIyICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9VTF9SRCAyMyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FQUNfQlRfVUxfV1IgMjQgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfRUFDX0JUX0RMX1JEIDI1ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0VBQ19CVF9ETF9XUiAyNiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMxX1RYIDI3ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX0kyQzFfUlggMjggIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfSTJDMl9UWCAyOSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9JMkMyX1JYIDMwICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMV9UWCAzMSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NQ0JTUDFfUlggMzIgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfTUNCU1AyX1RYIDMzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01DQlNQMl9SWCAzNCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMCAzNSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMCAzNiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMSAzNyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMSAzOCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMiAzOSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMiA0MCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1RYMyA0MSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkxX1JYMyA0MiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1RYMCA0MyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1JYMCA0NCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1RYMSA0NSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9TUEkyX1JYMSA0NiAgCisKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1RYIDQ5ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQxX1JYIDUwICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1RYIDUxICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQyX1JYIDUyICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1RYIDUzICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VBUlQzX1JYIDU0ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1RYMCA1NSAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19SWDAgNTYgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfVFgxIDU3ICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX1VTQl9XMkZDX1JYMSA1OCAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9VU0JfVzJGQ19UWDIgNTkgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfVVNCX1cyRkNfUlgyIDYwICAKKyNkZWZpbmUgT01BUDI0WFhfRE1BX01NQzFfVFggNjEgIAorI2RlZmluZSBPTUFQMjRYWF9ETUFfTU1DMV9SWCA2MiAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9NUyA2MyAgCisjZGVmaW5lIE9NQVAyNFhYX0RNQV9FWFRfRE1BUkVRNSA2NCAgCisKKyNkZWZpbmUgT01BUDE1MTBfRE1BX0xDRF9CQVNFICgweGZmZmVkYjAwKQorI2RlZmluZSBPTUFQMTUxMF9ETUFfTENEX0NUUkwgKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX0wgKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDIpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfVE9QX0YxX1UgKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDQpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX0wgKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDYpCisjZGVmaW5lIE9NQVAxNTEwX0RNQV9MQ0RfQk9UX0YxX1UgKE9NQVAxNTEwX0RNQV9MQ0RfQkFTRSArIDB4MDgpCisKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9CQVNFICgweGZmZmVlMzAwKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NTRFAgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzApCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQ0NSIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGMyKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX0NUUkwgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX0wgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4YzgpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IxX1UgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2EpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX0wgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2MpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IxX1UgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4Y2UpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IyX0wgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDApCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfVE9QX0IyX1UgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDIpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX0wgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfQk9UX0IyX1UgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZDYpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0VJX0IxIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGQ4KQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19GSV9CMV9MIChPTUFQMTYxMF9ETUFfTENEX0JBU0UgKyAweGRhKQorI2RlZmluZSBPTUFQMTYxMF9ETUFfTENEX1NSQ19FTl9CMSAoT01BUDE2MTBfRE1BX0xDRF9CQVNFICsgMHhlMCkKKyNkZWZpbmUgT01BUDE2MTBfRE1BX0xDRF9TUkNfRk5fQjEgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZTQpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfTENIX0NUUkwgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZWEpCisjZGVmaW5lIE9NQVAxNjEwX0RNQV9MQ0RfU1JDX0ZJX0IxX1UgKE9NQVAxNjEwX0RNQV9MQ0RfQkFTRSArIDB4ZjQpCisKKyNkZWZpbmUgT01BUDFfRE1BX1RPVVRfSVJRICgxIDw8IDApCisjZGVmaW5lIE9NQVBfRE1BX0RST1BfSVJRICgxIDw8IDEpCisjZGVmaW5lIE9NQVBfRE1BX0hBTEZfSVJRICgxIDw8IDIpCisjZGVmaW5lIE9NQVBfRE1BX0ZSQU1FX0lSUSAoMSA8PCAzKQorI2RlZmluZSBPTUFQX0RNQV9MQVNUX0lSUSAoMSA8PCA0KQorI2RlZmluZSBPTUFQX0RNQV9CTE9DS19JUlEgKDEgPDwgNSkKKyNkZWZpbmUgT01BUDFfRE1BX1NZTkNfSVJRICgxIDw8IDYpCisjZGVmaW5lIE9NQVAyX0RNQV9QS1RfSVJRICgxIDw8IDcpCisjZGVmaW5lIE9NQVAyX0RNQV9UUkFOU19FUlJfSVJRICgxIDw8IDgpCisjZGVmaW5lIE9NQVAyX0RNQV9TRUNVUkVfRVJSX0lSUSAoMSA8PCA5KQorI2RlZmluZSBPTUFQMl9ETUFfU1VQRVJWSVNPUl9FUlJfSVJRICgxIDw8IDEwKQorI2RlZmluZSBPTUFQMl9ETUFfTUlTQUxJR05FRF9FUlJfSVJRICgxIDw8IDExKQorCisjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TOCAweDAwCisjZGVmaW5lIE9NQVBfRE1BX0RBVEFfVFlQRV9TMTYgMHgwMQorI2RlZmluZSBPTUFQX0RNQV9EQVRBX1RZUEVfUzMyIDB4MDIKKworI2RlZmluZSBPTUFQX0RNQV9TWU5DX0VMRU1FTlQgMHgwMAorI2RlZmluZSBPTUFQX0RNQV9TWU5DX0ZSQU1FIDB4MDEKKyNkZWZpbmUgT01BUF9ETUFfU1lOQ19CTE9DSyAweDAyCisKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9FTUlGRiAweDAwCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfRU1JRlMgMHgwMQorI2RlZmluZSBPTUFQX0RNQV9QT1JUX09DUF9UMSAweDAyCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfVElQQiAweDAzCisjZGVmaW5lIE9NQVBfRE1BX1BPUlRfT0NQX1QyIDB4MDQKKyNkZWZpbmUgT01BUF9ETUFfUE9SVF9NUFVJIDB4MDUKKworI2RlZmluZSBPTUFQX0RNQV9BTU9ERV9DT05TVEFOVCAweDAwCisjZGVmaW5lIE9NQVBfRE1BX0FNT0RFX1BPU1RfSU5DIDB4MDEKKyNkZWZpbmUgT01BUF9ETUFfQU1PREVfU0lOR0xFX0lEWCAweDAyCisjZGVmaW5lIE9NQVBfRE1BX0FNT0RFX0RPVUJMRV9JRFggMHgwMworCitlbnVtIHsKKyBPTUFQX0xDRF9ETUFfQjFfVE9QLAorIE9NQVBfTENEX0RNQV9CMV9CT1RUT00sCisgT01BUF9MQ0RfRE1BX0IyX1RPUCwKKyBPTUFQX0xDRF9ETUFfQjJfQk9UVE9NCit9OworCitlbnVtIG9tYXBfZG1hX2J1cnN0X21vZGUgeworIE9NQVBfRE1BX0RBVEFfQlVSU1RfRElTID0gMCwKKyBPTUFQX0RNQV9EQVRBX0JVUlNUXzQsCisgT01BUF9ETUFfREFUQV9CVVJTVF84LAorIE9NQVBfRE1BX0RBVEFfQlVSU1RfMTYsCit9OworCitlbnVtIG9tYXBfZG1hX2NvbG9yX21vZGUgeworIE9NQVBfRE1BX0NPTE9SX0RJUyA9IDAsCisgT01BUF9ETUFfQ09OU1RBTlRfRklMTCwKKyBPTUFQX0RNQV9UUkFOU1BBUkVOVF9DT1BZCit9OworCitlbnVtIG9tYXBfZG1hX3dyaXRlX21vZGUgeworIE9NQVBfRE1BX1dSSVRFX05PTl9QT1NURUQgPSAwLAorIE9NQVBfRE1BX1dSSVRFX1BPU1RFRCwKKyBPTUFQX0RNQV9XUklURV9MQVNUX05PTl9QT1NURUQKK307CisKK3N0cnVjdCBvbWFwX2RtYV9jaGFubmVsX3BhcmFtcyB7CisgaW50IGRhdGFfdHlwZTsKKyBpbnQgZWxlbV9jb3VudDsKKyBpbnQgZnJhbWVfY291bnQ7CisKKyBpbnQgc3JjX3BvcnQ7CisgaW50IHNyY19hbW9kZTsKKyB1bnNpZ25lZCBsb25nIHNyY19zdGFydDsKKyBpbnQgc3JjX2VpOworIGludCBzcmNfZmk7CisKKyBpbnQgZHN0X3BvcnQ7CisgaW50IGRzdF9hbW9kZTsKKyB1bnNpZ25lZCBsb25nIGRzdF9zdGFydDsKKyBpbnQgZHN0X2VpOworIGludCBkc3RfZmk7CisKKyBpbnQgdHJpZ2dlcjsKKyBpbnQgc3luY19tb2RlOworIGludCBzcmNfb3JfZHN0X3N5bmNoOworCisgaW50IGllOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9mcGdhLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9mcGdhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiMjEwZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2ZwZ2EuaApAQCAtMCwwICsxLDE2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfRlBHQV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9GUEdBX0gKKworI2RlZmluZSBvbWFwMTUxMF9mcGdhX2luaXRfaXJxKCkgKDApCisKKyNkZWZpbmUgZnBnYV9yZWFkKHJlZykgX19yYXdfcmVhZGIocmVnKQorI2RlZmluZSBmcGdhX3dyaXRlKHZhbCwgcmVnKSBfX3Jhd193cml0ZWIodmFsLCByZWcpCisKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9CQVNFIDB4RTgwMDAwMDAgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX1NJWkUgU1pfNEsgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX1NUQVJUIDB4MDQwMDAwMDAgIAorCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfRVRIUl9TVEFSVCAoSDJQMl9EQkdfRlBHQV9TVEFSVCArIDB4MzAwKQorI2RlZmluZSBIMlAyX0RCR19GUEdBX0ZQR0FfUkVWIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEwKSAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfQk9BUkRfUkVWIChIMlAyX0RCR19GUEdBX0JBU0UgKyAweDEyKSAgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfR1BJTyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxNCkgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRFMgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MTYpICAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9NSVNDX0lOUFVUUyAoSDJQMl9EQkdfRlBHQV9CQVNFICsgMHgxOCkgIAorI2RlZmluZSBIMlAyX0RCR19GUEdBX0xBTl9TVEFUVVMgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUEpICAKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MQU5fUkVTRVQgKEgyUDJfREJHX0ZQR0FfQkFTRSArIDB4MUMpICAKKworc3RydWN0IGgycDJfZGJnX2ZwZ2EgeworCisgdTE2IHNtYzkxeFs4XTsKKworIHUxNiBmcGdhX3JldjsKKyB1MTYgYm9hcmRfcmV2OworIHUxNiBncGlvX291dHB1dHM7CisgdTE2IGxlZHM7CisKKyB1MTYgbWlzY19pbnB1dHM7CisgdTE2IGxhbl9zdGF0dXM7CisgdTE2IGxhbl9yZXNldDsKKyB1MTYgcmVzZXJ2ZWQwOworCisgdTE2IHBzMl9kYXRhOworIHUxNiBwczJfY3RybDsKKworfTsKKworI2RlZmluZSBIMlAyX0RCR19GUEdBX0xFRF9HUkVFTiAoMSA8PCAxNSkKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfQU1CRVIgKDEgPDwgMTQpCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTEVEX1JFRCAoMSA8PCAxMykKKyNkZWZpbmUgSDJQMl9EQkdfRlBHQV9MRURfQkxVRSAoMSA8PCAxMikKKworI2RlZmluZSBIMlAyX0RCR19GUEdBX0xPQURfTUVURVIgKDEgPDwgMCkgCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9TSVpFIDExCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfTE9BRF9NRVRFUl9NQVNLICgoMSA8PCBIMlAyX0RCR19GUEdBX0xPQURfTUVURVJfU0laRSkgLSAxKQorCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX1RJTUVSICgxIDw8IDApCisjZGVmaW5lIEgyUDJfREJHX0ZQR0FfUDJfTEVEX0lETEUgKDEgPDwgMSkKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0JBU0UgMHhFODAwMDAwMCAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfU0laRSBTWl80SworI2RlZmluZSBPTUFQMTUxMF9GUEdBX1NUQVJUIDB4MDgwMDAwMDAgIAorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVWX0xPVyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgwKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1JFVl9ISUdIIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEpCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9MQ0RfUEFORUxfQ09OVFJPTCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0xFRF9ESUdJVCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgzKQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9ISURfU1BJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDQpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUE9XRVIgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4NSkKKworI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lTUl9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg2KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0lTUl9ISSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHg3KQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSU1SX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDgpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSU1SX0hJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDkpCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9IT1NUX1JFU0VUIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGEpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUlNUIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweGIpCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9BVURJTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhjKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0RJUCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHhlKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0ZQR0FfSU8gKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4ZikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9VQVJUMSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNCkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9VQVJUMiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxNSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9PTUFQMTUxMF9TVEFUVVMgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MTYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfQk9BUkRfUkVWIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDE4KQorI2RlZmluZSBPTUFQMTUxMFAxX1BQVF9EQVRBIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMCkKKyNkZWZpbmUgT01BUDE1MTBQMV9QUFRfU1RBVFVTIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDEwMSkKKyNkZWZpbmUgT01BUDE1MTBQMV9QUFRfQ09OVFJPTCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgxMDIpCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9UT1VDSFNDUkVFTiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDQpCisKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSU5GTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDUpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xDRF9CUklHSFRfTE8gKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA2KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MQ0RfQlJJR0hUX0hJIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwNykKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX0dSTl9MTyAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMDgpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0xFRF9HUk5fSEkgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjA5KQorI2RlZmluZSBJTk5PVkFUT1JfRlBHQV9MRURfUkVEX0xPIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwYSkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfTEVEX1JFRF9ISSAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGIpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0NBTV9VU0JfQ09OVFJPTCAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGMpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0VYUF9DT05UUk9MIChPTUFQMTUxMF9GUEdBX0JBU0UgKyAweDIwZCkKKyNkZWZpbmUgSU5OT1ZBVE9SX0ZQR0FfSVNSMiAoT01BUDE1MTBfRlBHQV9CQVNFICsgMHgyMGUpCisjZGVmaW5lIElOTk9WQVRPUl9GUEdBX0lNUjIgKE9NQVAxNTEwX0ZQR0FfQkFTRSArIDB4MjEwKQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfRVRIUl9TVEFSVCAoT01BUDE1MTBfRlBHQV9TVEFSVCArIDB4MzAwKQorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUkVTRVRfVkFMVUUgMHg0MgorCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0lGX1BEMCAoMSA8PCA3KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl9DT00yX0VOICgxIDw8IDYpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSX0NPTTFfRU4gKDEgPDwgNSkKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9QQ1JfRVhQX1BEMCAoMSA8PCA0KQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl9FWFBfUEQxICgxIDw8IDMpCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfUENSXzQ4TUhaX0NMSyAoMSA8PCAyKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl80TUhaX0NMSyAoMSA8PCAxKQorI2RlZmluZSBPTUFQMTUxMF9GUEdBX1BDUl9SU1JWRF9CSVQwICgxIDw8IDApCisKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfU0NMSyAoMTw8MCkgIAorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9NT1NJICgxPDwxKSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX25TUyAoMTw8MikgIAorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9uSFNVUyAoMTw8MykgIAorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9NSVNPICgxPDw0KSAgCisjZGVmaW5lIE9NQVAxNTEwX0ZQR0FfSElEX0FUTiAoMTw8NSkgIAorI2RlZmluZSBPTUFQMTUxMF9GUEdBX0hJRF9yc3J2ZCAoMTw8NikKKyNkZWZpbmUgT01BUDE1MTBfRlBHQV9ISURfUkVTRVRuICgxPDw3KSAgCisKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EgKElIX0dQSU9fQkFTRSArIDEzKQorCisjZGVmaW5lIE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSBJSF9CT0FSRF9CQVNFCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX0FUTiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMCkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FfQUNLIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMyAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMykKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0E0IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA0KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTUgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDUpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBNiAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgNikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0E3IChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyA3KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTggKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDgpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBOSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgOSkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0ExMCAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTApCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTEgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDExKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTEyIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0VUSEVSIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAxMykKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FVQVJUMSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTQpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBVUFSVDIgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE1KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9UUyAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTYpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBMTcgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE3KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9DQU0gKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDE4KQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQV9SVENfQSAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMTkpCisjZGVmaW5lIE9NQVAxNTEwX0lOVF9GUEdBX1JUQ19CIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMCkKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0FfQ0QgKE9NQVAxNTEwX0lIX0ZQR0FfQkFTRSArIDIxKQorI2RlZmluZSBPTUFQMTUxMF9JTlRfRlBHQTIyIChPTUFQMTUxMF9JSF9GUEdBX0JBU0UgKyAyMikKKyNkZWZpbmUgT01BUDE1MTBfSU5UX0ZQR0EyMyAoT01BUDE1MTBfSUhfRlBHQV9CQVNFICsgMjMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby1zd2l0Y2guaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2dwaW8tc3dpdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBlYTNmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2dwaW8tc3dpdGNoLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfR1BJT19TV0lUQ0hfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfR1BJT19TV0lUQ0hfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX1RZUEVfQ09WRVIgMHgwMDAwCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfVFlQRV9DT05ORUNUSU9OIDB4MDAwMQorI2RlZmluZSBPTUFQX0dQSU9fU1dJVENIX1RZUEVfQUNUSVZJVFkgMHgwMDAyCisjZGVmaW5lIE9NQVBfR1BJT19TV0lUQ0hfRkxBR19JTlZFUlRFRCAweDAwMDEKKyNkZWZpbmUgT01BUF9HUElPX1NXSVRDSF9GTEFHX09VVFBVVCAweDAwMDIKKworc3RydWN0IG9tYXBfZ3Bpb19zd2l0Y2ggeworIGNvbnN0IGNoYXIgKm5hbWU7CisgczE2IGdwaW87CisgdW5zaWduZWQgZmxhZ3M6NDsKKyB1bnNpZ25lZCB0eXBlOjQ7CisKKyB1MTYgZGVib3VuY2VfcmlzaW5nOworCisgdTE2IGRlYm91bmNlX2ZhbGxpbmc7CisKKyB2b2lkICgqIG5vdGlmeSkodm9pZCAqZGF0YSwgaW50IHN0YXRlKTsKKyB2b2lkICpub3RpZnlfZGF0YTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvZ3Bpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzMjI0NmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9ncGlvLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfR1BJT19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUF9HUElPX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2RlZmluZSBPTUFQX01QVUlPX0JBU0UgKHZvaWQgX19pb21lbSAqKTB4ZmZmYjUwMDAKKworI2RlZmluZSBPTUFQX01QVUlPX0lOUFVUX0xBVENIIDB4MDAKKyNkZWZpbmUgT01BUF9NUFVJT19PVVRQVVQgMHgwNAorI2RlZmluZSBPTUFQX01QVUlPX0lPX0NOVEwgMHgwOAorI2RlZmluZSBPTUFQX01QVUlPX0tCUl9MQVRDSCAweDEwCisjZGVmaW5lIE9NQVBfTVBVSU9fS0JDIDB4MTQKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX0VWRU5UX01PREUgMHgxOAorI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fSU5UX0VER0UgMHgxYworI2RlZmluZSBPTUFQX01QVUlPX0tCRF9JTlQgMHgyMAorI2RlZmluZSBPTUFQX01QVUlPX0dQSU9fSU5UIDB4MjQKKyNkZWZpbmUgT01BUF9NUFVJT19LQkRfTUFTS0lUIDB4MjgKKyNkZWZpbmUgT01BUF9NUFVJT19HUElPX01BU0tJVCAweDJjCisjZGVmaW5lIE9NQVBfTVBVSU9fR1BJT19ERUJPVU5DSU5HIDB4MzAKKyNkZWZpbmUgT01BUF9NUFVJT19MQVRDSCAweDM0CisKKyNkZWZpbmUgT01BUF9NUFVJTyhucikgKE9NQVBfTUFYX0dQSU9fTElORVMgKyAobnIpKQorI2RlZmluZSBPTUFQX0dQSU9fSVNfTVBVSU8obnIpICgobnIpID49IE9NQVBfTUFYX0dQSU9fTElORVMpCisKKyNkZWZpbmUgT01BUF9HUElPX0lSUShucikgKE9NQVBfR1BJT19JU19NUFVJTyhucikgPyAgIElIX01QVUlPX0JBU0UgKyAoKG5yKSAmIDB4MGYpIDogICBJSF9HUElPX0JBU0UgKyAobnIpKQorCitzdHJ1Y3Qgb21hcF9tYWNoaW5lX2dwaW9fYmFuayB7CisgaW50IHN0YXJ0OworIGludCBlbmQ7CisKKyB2b2lkICgqc2V0X2dwaW9fZGlyZWN0aW9uKShpbnQgZ3BpbywgaW50IGlzX2lucHV0KTsKKyB2b2lkICgqc2V0X2dwaW9fZGF0YW91dCkoaW50IGdwaW8sIGludCBlbmFibGUpOworIGludCAoKmdldF9ncGlvX2RhdGFpbikoaW50IGdwaW8pOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9oYXJkd2FyZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaGFyZHdhcmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNTE1ZWU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaGFyZHdhcmUuaApAQCAtMCwwICsxLDE1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfSEFSRFdBUkVfSAorCisjaW5jbHVkZSA8YXNtL3NpemVzLmg+CisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9jcHUuaD4KKyNlbmRpZgorI2luY2x1ZGUgPGFzbS9hcmNoL2lvLmg+CisjaW5jbHVkZSA8YXNtL2FyY2gvc2VyaWFsLmg+CisKKyNkZWZpbmUgT01BUF9NUFVfVElNRVIxX0JBU0UgKDB4ZmZmZWM1MDApCisjZGVmaW5lIE9NQVBfTVBVX1RJTUVSMl9CQVNFICgweGZmZmVjNjAwKQorI2RlZmluZSBPTUFQX01QVV9USU1FUjNfQkFTRSAoMHhmZmZlYzcwMCkKKyNkZWZpbmUgTVBVX1RJTUVSX0ZSRUUgKDEgPDwgNikKKyNkZWZpbmUgTVBVX1RJTUVSX0NMT0NLX0VOQUJMRSAoMSA8PCA1KQorI2RlZmluZSBNUFVfVElNRVJfQVIgKDEgPDwgMSkKKyNkZWZpbmUgTVBVX1RJTUVSX1NUICgxIDw8IDApCisKKyNkZWZpbmUgQ0xLR0VOX1JFR19CQVNFICgweGZmZmVjZTAwKQorI2RlZmluZSBBUk1fQ0tDVEwgKENMS0dFTl9SRUdfQkFTRSArIDB4MCkKKyNkZWZpbmUgQVJNX0lETEVDVDEgKENMS0dFTl9SRUdfQkFTRSArIDB4NCkKKyNkZWZpbmUgQVJNX0lETEVDVDIgKENMS0dFTl9SRUdfQkFTRSArIDB4OCkKKyNkZWZpbmUgQVJNX0VXVVBDVCAoQ0xLR0VOX1JFR19CQVNFICsgMHhDKQorI2RlZmluZSBBUk1fUlNUQ1QxIChDTEtHRU5fUkVHX0JBU0UgKyAweDEwKQorI2RlZmluZSBBUk1fUlNUQ1QyIChDTEtHRU5fUkVHX0JBU0UgKyAweDE0KQorI2RlZmluZSBBUk1fU1lTU1QgKENMS0dFTl9SRUdfQkFTRSArIDB4MTgpCisjZGVmaW5lIEFSTV9JRExFQ1QzIChDTEtHRU5fUkVHX0JBU0UgKyAweDI0KQorCisjZGVmaW5lIENLX1JBVEVGIDEKKyNkZWZpbmUgQ0tfSURMRUYgMgorI2RlZmluZSBDS19FTkFCTEVGIDQKKyNkZWZpbmUgQ0tfU0VMRUNURiA4CisjZGVmaW5lIFNFVEFSTV9JRExFX1NISUZUCisKKyNkZWZpbmUgRFBMTF9DVEwgKDB4ZmZmZWNmMDApCisKKyNkZWZpbmUgRFNQX0NPTkZJR19SRUdfQkFTRSAoMHhlMTAwODAwMCkKKyNkZWZpbmUgRFNQX0NLQ1RMIChEU1BfQ09ORklHX1JFR19CQVNFICsgMHgwKQorI2RlZmluZSBEU1BfSURMRUNUMSAoRFNQX0NPTkZJR19SRUdfQkFTRSArIDB4NCkKKyNkZWZpbmUgRFNQX0lETEVDVDIgKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDgpCisjZGVmaW5lIERTUF9SU1RDVDIgKERTUF9DT05GSUdfUkVHX0JBU0UgKyAweDE0KQorCisjZGVmaW5lIFVMUERfUkVHX0JBU0UgKDB4ZmZmZTA4MDApCisjZGVmaW5lIFVMUERfSVRfU1RBVFVTIChVTFBEX1JFR19CQVNFICsgMHgxNCkKKyNkZWZpbmUgVUxQRF9TRVRVUF9BTkFMT0dfQ0VMTF8zIChVTFBEX1JFR19CQVNFICsgMHgyNCkKKyNkZWZpbmUgVUxQRF9DTE9DS19DVFJMIChVTFBEX1JFR19CQVNFICsgMHgzMCkKKyNkZWZpbmUgRElTX1VTQl9QVkNJX0NMSyAoMSA8PCA1KSAgCisjZGVmaW5lIFVTQl9NQ0xLX0VOICgxIDw8IDQpICAKKyNkZWZpbmUgVUxQRF9TT0ZUX1JFUSAoVUxQRF9SRUdfQkFTRSArIDB4MzQpCisjZGVmaW5lIFNPRlRfVURDX1JFUSAoMSA8PCA0KQorI2RlZmluZSBTT0ZUX1VTQl9DTEtfUkVRICgxIDw8IDMpCisjZGVmaW5lIFNPRlRfRFBMTF9SRVEgKDEgPDwgMCkKKyNkZWZpbmUgVUxQRF9EUExMX0NUUkwgKFVMUERfUkVHX0JBU0UgKyAweDNjKQorI2RlZmluZSBVTFBEX1NUQVRVU19SRVEgKFVMUERfUkVHX0JBU0UgKyAweDQwKQorI2RlZmluZSBVTFBEX0FQTExfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4NGMpCisjZGVmaW5lIFVMUERfUE9XRVJfQ1RSTCAoVUxQRF9SRUdfQkFTRSArIDB4NTApCisjZGVmaW5lIFVMUERfU09GVF9ESVNBQkxFX1JFUV9SRUcgKFVMUERfUkVHX0JBU0UgKyAweDY4KQorI2RlZmluZSBESVNfTU1DMl9EUExMX1JFUSAoMSA8PCAxMSkKKyNkZWZpbmUgRElTX01NQzFfRFBMTF9SRVEgKDEgPDwgMTApCisjZGVmaW5lIERJU19VQVJUM19EUExMX1JFUSAoMSA8PCA5KQorI2RlZmluZSBESVNfVUFSVDJfRFBMTF9SRVEgKDEgPDwgOCkKKyNkZWZpbmUgRElTX1VBUlQxX0RQTExfUkVRICgxIDw8IDcpCisjZGVmaW5lIERJU19VU0JfSE9TVF9EUExMX1JFUSAoMSA8PCA2KQorI2RlZmluZSBVTFBEX1NEV19DTEtfRElWX0NUUkxfU0VMIChVTFBEX1JFR19CQVNFICsgMHg3NCkKKyNkZWZpbmUgVUxQRF9DQU1fQ0xLX0NUUkwgKFVMUERfUkVHX0JBU0UgKyAweDdjKQorCisjZGVmaW5lIE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKDB4ZmZmZWM4MDApCisjZGVmaW5lIE9NQVBfV0RUX1RJTUVSIChPTUFQX01QVV9XQVRDSERPR19CQVNFICsgMHgwKQorI2RlZmluZSBPTUFQX1dEVF9MT0FEX1RJTSAoT01BUF9NUFVfV0FUQ0hET0dfQkFTRSArIDB4NCkKKyNkZWZpbmUgT01BUF9XRFRfUkVBRF9USU0gKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDQpCisjZGVmaW5lIE9NQVBfV0RUX1RJTUVSX01PREUgKE9NQVBfTVBVX1dBVENIRE9HX0JBU0UgKyAweDgpCisKKyNkZWZpbmUgTU9EX0NPTkZfQ1RSTF8wIDB4ZmZmZTEwODAKKyNkZWZpbmUgTU9EX0NPTkZfQ1RSTF8xIDB4ZmZmZTExMTAKKworI2RlZmluZSBGVU5DX01VWF9DVFJMXzAgMHhmZmZlMTAwMAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzEgMHhmZmZlMTAwNAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzIgMHhmZmZlMTAwOAorI2RlZmluZSBDT01QX01PREVfQ1RSTF8wIDB4ZmZmZTEwMGMKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8zIDB4ZmZmZTEwMTAKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF80IDB4ZmZmZTEwMTQKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF81IDB4ZmZmZTEwMTgKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF82IDB4ZmZmZTEwMUMKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF83IDB4ZmZmZTEwMjAKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF84IDB4ZmZmZTEwMjQKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF85IDB4ZmZmZTEwMjgKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9BIDB4ZmZmZTEwMkMKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9CIDB4ZmZmZTEwMzAKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9DIDB4ZmZmZTEwMzQKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF9EIDB4ZmZmZTEwMzgKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF8wIDB4ZmZmZTEwNDAKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF8xIDB4ZmZmZTEwNDQKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF8yIDB4ZmZmZTEwNDgKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF8zIDB4ZmZmZTEwNGMKKyNkZWZpbmUgUFVMTF9EV05fQ1RSTF80IDB4ZmZmZTEwYWMKKworI2RlZmluZSBGVU5DX01VWF9DVFJMX0UgMHhmZmZlMTA5MAorI2RlZmluZSBGVU5DX01VWF9DVFJMX0YgMHhmZmZlMTA5NAorI2RlZmluZSBGVU5DX01VWF9DVFJMXzEwIDB4ZmZmZTEwOTgKKyNkZWZpbmUgRlVOQ19NVVhfQ1RSTF8xMSAweGZmZmUxMDljCisjZGVmaW5lIEZVTkNfTVVYX0NUUkxfMTIgMHhmZmZlMTBhMAorI2RlZmluZSBQVV9QRF9TRUxfMCAweGZmZmUxMGI0CisjZGVmaW5lIFBVX1BEX1NFTF8xIDB4ZmZmZTEwYjgKKyNkZWZpbmUgUFVfUERfU0VMXzIgMHhmZmZlMTBiYworI2RlZmluZSBQVV9QRF9TRUxfMyAweGZmZmUxMGMwCisjZGVmaW5lIFBVX1BEX1NFTF80IDB4ZmZmZTEwYzQKKworI2RlZmluZSBPTUFQX1RJTUVSMzJLX0JBU0UgMHhGRkZCQzQwMAorCisjZGVmaW5lIFRJUEJfUFVCTElDX0NOVExfQkFTRSAweGZmZmVkMzAwCisjZGVmaW5lIE1QVV9QVUJMSUNfVElQQl9DTlRMIChUSVBCX1BVQkxJQ19DTlRMX0JBU0UgKyAweDgpCisjZGVmaW5lIFRJUEJfUFJJVkFURV9DTlRMX0JBU0UgMHhmZmZlY2EwMAorI2RlZmluZSBNUFVfUFJJVkFURV9USVBCX0NOVEwgKFRJUEJfUFJJVkFURV9DTlRMX0JBU0UgKyAweDgpCisKKyNkZWZpbmUgTVBVSV9CQVNFICgweGZmZmVjOTAwKQorI2RlZmluZSBNUFVJX0NUUkwgKE1QVUlfQkFTRSArIDB4MCkKKyNkZWZpbmUgTVBVSV9ERUJVR19BRERSIChNUFVJX0JBU0UgKyAweDQpCisjZGVmaW5lIE1QVUlfREVCVUdfREFUQSAoTVBVSV9CQVNFICsgMHg4KQorI2RlZmluZSBNUFVJX0RFQlVHX0ZMQUcgKE1QVUlfQkFTRSArIDB4YykKKyNkZWZpbmUgTVBVSV9TVEFUVVNfUkVHIChNUFVJX0JBU0UgKyAweDEwKQorI2RlZmluZSBNUFVJX0RTUF9TVEFUVVMgKE1QVUlfQkFTRSArIDB4MTQpCisjZGVmaW5lIE1QVUlfRFNQX0JPT1RfQ09ORklHIChNUFVJX0JBU0UgKyAweDE4KQorI2RlZmluZSBNUFVJX0RTUF9BUElfQ09ORklHIChNUFVJX0JBU0UgKyAweDFjKQorCisjZGVmaW5lIE9NQVBfTFBHMV9CQVNFIDB4ZmZmYmQwMDAKKyNkZWZpbmUgT01BUF9MUEcyX0JBU0UgMHhmZmZiZDgwMAorI2RlZmluZSBPTUFQX0xQRzFfTENSIChPTUFQX0xQRzFfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfTFBHMV9QTVIgKE9NQVBfTFBHMV9CQVNFICsgMHgwNCkKKyNkZWZpbmUgT01BUF9MUEcyX0xDUiAoT01BUF9MUEcyX0JBU0UgKyAweDAwKQorI2RlZmluZSBPTUFQX0xQRzJfUE1SIChPTUFQX0xQRzJfQkFTRSArIDB4MDQpCisKKyNkZWZpbmUgT01BUF9QV0xfQkFTRSAweGZmZmI1ODAwCisjZGVmaW5lIE9NQVBfUFdMX0VOQUJMRSAoT01BUF9QV0xfQkFTRSArIDB4MDApCisjZGVmaW5lIE9NQVBfUFdMX0NMS19FTkFCTEUgKE9NQVBfUFdMX0JBU0UgKyAweDA0KQorCisjaW5jbHVkZSAib21hcDczMC5oIgorI2luY2x1ZGUgIm9tYXAxNTEwLmgiCisjaW5jbHVkZSAib21hcDI0eHguaCIKKyNpbmNsdWRlICJvbWFwMTZ4eC5oIgorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaW8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJhYzNkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lvLmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fQVJDSF9JT19ICisjZGVmaW5lIF9fQVNNX0FSTV9BUkNIX0lPX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjZGVmaW5lIElPX1NQQUNFX0xJTUlUIDB4ZmZmZmZmZmYKKworI2RlZmluZSBfX2lvKGEpICgodm9pZCBfX2lvbWVtICopKFBDSU9fQkFTRSArIChhKSkpCisjZGVmaW5lIF9fbWVtX3BjaShhKSAoYSkKKworI2RlZmluZSBQQ0lPX0JBU0UgMAorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KKworI2RlZmluZSBvbWFwX3JlYWRiKGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKilJT19BRERSRVNTKGEpKQorI2RlZmluZSBvbWFwX3JlYWR3KGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopSU9fQUREUkVTUyhhKSkKKyNkZWZpbmUgb21hcF9yZWFkbChhKSAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKilJT19BRERSRVNTKGEpKQorCisjZGVmaW5lIG9tYXBfd3JpdGViKHYsYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKUlPX0FERFJFU1MoYSkgPSAodikpCisjZGVmaW5lIG9tYXBfd3JpdGV3KHYsYSkgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKilJT19BRERSRVNTKGEpID0gKHYpKQorI2RlZmluZSBvbWFwX3dyaXRlbCh2LGEpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKUlPX0FERFJFU1MoYSkgPSAodikpCisKK3R5cGVkZWYgc3RydWN0IHsgdm9sYXRpbGUgdTE2IG9mZnNldFsyNTZdOyB9IF9fcmVnYmFzZTE2OworI2RlZmluZSBfX1JFR1YxNih2YWRkcikgKChfX3JlZ2Jhc2UxNiAqKSgodmFkZHIpJn4weGZmKSkgICAtPm9mZnNldFsoKHZhZGRyKSYweGZmKT4+MV0KKyNkZWZpbmUgX19SRUcxNihwYWRkcikgX19SRUdWMTYoaW9fcDJ2KHBhZGRyKSkKKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1OCBvZmZzZXRbNDA5Nl07IH0gX19yZWdiYXNlODsKKyNkZWZpbmUgX19SRUdWOCh2YWRkcikgKChfX3JlZ2Jhc2U4ICopKCh2YWRkcikmfjQwOTUpKSAgIC0+b2Zmc2V0WygodmFkZHIpJjQwOTUpPj4wXQorI2RlZmluZSBfX1JFRzgocGFkZHIpIF9fUkVHVjgoaW9fcDJ2KHBhZGRyKSkKKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSB1MzIgb2Zmc2V0WzQwOTZdOyB9IF9fcmVnYmFzZTMyOworI2RlZmluZSBfX1JFR1YzMih2YWRkcikgKChfX3JlZ2Jhc2UzMiAqKSgodmFkZHIpJn40MDk1KSkgICAtPm9mZnNldFsoKHZhZGRyKSY0MDk1KT4+Ml0KKyNkZWZpbmUgX19SRUczMihwYWRkcikgX19SRUdWMzIoaW9fcDJ2KHBhZGRyKSkKKworI2Vsc2UKKworI2RlZmluZSBfX1JFRzgocGFkZHIpIGlvX3AydihwYWRkcikKKyNkZWZpbmUgX19SRUcxNihwYWRkcikgaW9fcDJ2KHBhZGRyKQorI2RlZmluZSBfX1JFRzMyKHBhZGRyKSBpb19wMnYocGFkZHIpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lycXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL2lycXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTk0NDg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvaXJxcy5oCkBAIC0wLDAgKzEsMjQyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfT01BUDE1WFhfSVJRU19ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDE1WFhfSVJRU19ICisKKyNkZWZpbmUgSU5UX0NBTUVSQSAxCisjZGVmaW5lIElOVF9GSVEgMworI2RlZmluZSBJTlRfUlREWCA2CisjZGVmaW5lIElOVF9EU1BfTU1VX0FCT1JUIDcKKyNkZWZpbmUgSU5UX0hPU1QgOAorI2RlZmluZSBJTlRfQUJPUlQgOQorI2RlZmluZSBJTlRfRFNQX01BSUxCT1gxIDEwCisjZGVmaW5lIElOVF9EU1BfTUFJTEJPWDIgMTEKKyNkZWZpbmUgSU5UX0JSSURHRV9QUklWIDEzCisjZGVmaW5lIElOVF9HUElPX0JBTksxIDE0CisjZGVmaW5lIElOVF9VQVJUMyAxNQorI2RlZmluZSBJTlRfVElNRVIzIDE2CisjZGVmaW5lIElOVF9ETUFfQ0gwXzYgMTkKKyNkZWZpbmUgSU5UX0RNQV9DSDFfNyAyMAorI2RlZmluZSBJTlRfRE1BX0NIMl84IDIxCisjZGVmaW5lIElOVF9ETUFfQ0gzIDIyCisjZGVmaW5lIElOVF9ETUFfQ0g0IDIzCisjZGVmaW5lIElOVF9ETUFfQ0g1IDI0CisjZGVmaW5lIElOVF9ETUFfTENEIDI1CisjZGVmaW5lIElOVF9USU1FUjEgMjYKKyNkZWZpbmUgSU5UX1dEX1RJTUVSIDI3CisjZGVmaW5lIElOVF9CUklER0VfUFVCIDI4CisjZGVmaW5lIElOVF9USU1FUjIgMzAKKyNkZWZpbmUgSU5UX0xDRF9DVFJMIDMxCisKKyNkZWZpbmUgSU5UXzE1MTBfSUgyX0lSUSAwCisjZGVmaW5lIElOVF8xNTEwX1JFUzIgMgorI2RlZmluZSBJTlRfMTUxMF9TUElfVFggNAorI2RlZmluZSBJTlRfMTUxMF9TUElfUlggNQorI2RlZmluZSBJTlRfMTUxMF9SRVMxMiAxMgorI2RlZmluZSBJTlRfMTUxMF9MQl9NTVUgMTcKKyNkZWZpbmUgSU5UXzE1MTBfUkVTMTggMTgKKyNkZWZpbmUgSU5UXzE1MTBfTE9DQUxfQlVTIDI5CisKKyNkZWZpbmUgSU5UXzE2MTBfSUgyX0lSUSAwCisjZGVmaW5lIElOVF8xNjEwX0lIMl9GSVEgMgorI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfVFggNAorI2RlZmluZSBJTlRfMTYxMF9NY0JTUDJfUlggNQorI2RlZmluZSBJTlRfMTYxMF9MQ0RfTElORSAxMgorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSMSAxNworI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSMiAxOAorI2RlZmluZSBJTlRfMTYxMF9TU1JfRklGT18wIDI5CisKKyNkZWZpbmUgSU5UXzczMF9JSDJfRklRIDAKKyNkZWZpbmUgSU5UXzczMF9JSDJfSVJRIDEKKyNkZWZpbmUgSU5UXzczMF9VU0JfTk9OX0lTTyAyCisjZGVmaW5lIElOVF83MzBfVVNCX0lTTyAzCisjZGVmaW5lIElOVF83MzBfSUNSIDQKKyNkZWZpbmUgSU5UXzczMF9FQUMgNQorI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzEgNgorI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzIgNworI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzMgOAorI2RlZmluZSBJTlRfNzMwX01jQlNQMlRYIDEwCisjZGVmaW5lIElOVF83MzBfTWNCU1AyUlggMTEKKyNkZWZpbmUgSU5UXzczMF9NY0JTUDJSWF9PVkYgMTIKKyNkZWZpbmUgSU5UXzczMF9MQ0RfTElORSAxNAorI2RlZmluZSBJTlRfNzMwX0dTTV9QUk9URUNUIDE1CisjZGVmaW5lIElOVF83MzBfVElNRVIzIDE2CisjZGVmaW5lIElOVF83MzBfR1BJT19CQU5LNSAxNworI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzYgMTgKKyNkZWZpbmUgSU5UXzczMF9TUEdJT19XUiAyOQorCisjZGVmaW5lIElIMl9CQVNFIDMyCisKKyNkZWZpbmUgSU5UX0tFWUJPQVJEICgxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF91V2lyZVRYICgyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF91V2lyZVJYICgzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9JMkMgKDQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX01QVUlPICg1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VU0JfSEhDXzEgKDYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX01jQlNQM1RYICgxMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTWNCU1AzUlggKDExICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9NY0JTUDFUWCAoMTIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX01jQlNQMVJYICgxMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfVUFSVDIgKDE0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9VQVJUMSAoMTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX0JUX01DU0kxVFggKDE2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF9CVF9NQ1NJMVJYICgxNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfVVNCX1cyRkMgKDIwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xV0lSRSAoMjEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UX09TX1RJTUVSICgyMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTU1DICgyMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfR0FVR0VfMzJLICgyNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfUlRDX1RJTUVSICgyNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfUlRDX0FMQVJNICgyNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfTUVNX1NUSUNLICgyNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfRFNQX01NVSAoMjggKyBJSDJfQkFTRSkKKworI2RlZmluZSBJTlRfMTUxMF9DT01fU1BJX1JPICgzMSArIElIMl9CQVNFKQorCisjZGVmaW5lIElOVF8xNjEwX0ZBQyAoMCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9VU0JfSEhDXzIgKDcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfVVNCX09URyAoOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9Tb1NTSSAoOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9Tb1NTSV9NQVRDSCAoMTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfTWNCU1AyUlhfT0YgKDMxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1NUSSAoMzIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfU1RJX1dBS0VVUCAoMzMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjMgKDM0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI0ICgzNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSNSAoMzYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BUSU1FUjYgKDM3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0dQVElNRVI3ICgzOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUFRJTUVSOCAoMzkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMiAoNDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfR1BJT19CQU5LMyAoNDEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfTU1DMiAoNDIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfQ0YgKDQzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX1dBS0VfVVBfUkVRICg0NiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9HUElPX0JBTks0ICg0OCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9TUEkgKDQ5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDYgKDUzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDcgKDU0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDggKDU1ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDkgKDU2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDEwICg1NyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxMSAoNTggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTIgKDU5ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX0RNQV9DSDEzICg2MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfMTYxMF9ETUFfQ0gxNCAoNjEgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzE2MTBfRE1BX0NIMTUgKDYyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF8xNjEwX05BTkQgKDYzICsgSUgyX0JBU0UpCisKKyNkZWZpbmUgSU5UXzczMF9IV19FUlJPUlMgKDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9ORklRX1BXUl9GQUlMICgxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfQ0ZDRCAoMiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0NGSVJFUSAoMyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0kyQyAoNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1BDQyAoNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01QVV9FWFRfTklSUSAoNiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NQSV8xMDBLXzEgKDcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9TWVJFTl9TUEkgKDggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9WTFlOUSAoOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0dQSU9fQkFOSzQgKDEwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxVFggKDExICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxUlggKDEyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTWNCU1AxUlhfT0YgKDEzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVUFSVF9NT0RFTV9JUkRBXzIgKDE0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVUFSVF9NT0RFTV8xICgxNSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01DU0kgKDE2ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfdVdpcmVUWCAoMTcgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF91V2lyZVJYICgxOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1NNQ19DRCAoMTkgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9TTUNfSVJFUSAoMjAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9IRFFfMVdJUkUgKDIxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVElNRVIzMksgKDIyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTU1DX1NESU8gKDIzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVBMRCAoMjQgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9VU0JfSEhDXzEgKDI3ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfVVNCX0hIQ18yICgyOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1VTQl9HRU5JICgyOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1VTQl9PVEcgKDMwICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfQ0FNRVJBX0lGICgzMSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1JORyAoMzIgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9EVUFMX01PREVfVElNRVIgKDMzICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfREJCX1JGX0VOICgzNCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01QVUlPX0tFWVBBRCAoMzUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9TSEExX01ENSAoMzYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9TUElfMTAwS18yICgzNyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX1JOR19JRExFICgzOCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX01QVUlPICgzOSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0xMUENfTENEX0NUUkxfQ0FOX0JFX09GRiAoNDAgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9MTFBDX09FX0ZBTExJTkcgKDQxICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTExQQ19PRV9SSVNJTkcgKDQyICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfTExQQ19WU1lOQyAoNDMgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9XQUtFX1VQX1JFUSAoNDYgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9ETUFfQ0g2ICg1MyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDcgKDU0ICsgSUgyX0JBU0UpCisjZGVmaW5lIElOVF83MzBfRE1BX0NIOCAoNTUgKyBJSDJfQkFTRSkKKyNkZWZpbmUgSU5UXzczMF9ETUFfQ0g5ICg1NiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEwICg1NyArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDExICg1OCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEyICg1OSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDEzICg2MCArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE0ICg2MSArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX0RNQV9DSDE1ICg2MiArIElIMl9CQVNFKQorI2RlZmluZSBJTlRfNzMwX05BTkQgKDYzICsgSUgyX0JBU0UpCisKKyNkZWZpbmUgSU5UXzI0WFhfU1lTX05JUlEgNworI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTAgMTIKKyNkZWZpbmUgSU5UXzI0WFhfU0RNQV9JUlExIDEzCisjZGVmaW5lIElOVF8yNFhYX1NETUFfSVJRMiAxNAorI2RlZmluZSBJTlRfMjRYWF9TRE1BX0lSUTMgMTUKKyNkZWZpbmUgSU5UXzI0WFhfQ0FNX0lSUSAyNAorI2RlZmluZSBJTlRfMjRYWF9EU1NfSVJRIDI1CisjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzEgMjkKKyNkZWZpbmUgSU5UXzI0WFhfR1BJT19CQU5LMiAzMAorI2RlZmluZSBJTlRfMjRYWF9HUElPX0JBTkszIDMxCisjZGVmaW5lIElOVF8yNFhYX0dQSU9fQkFOSzQgMzIKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEgMzcKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjIgMzgKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjMgMzkKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjQgNDAKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjUgNDEKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjYgNDIKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjcgNDMKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjggNDQKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjkgNDUKKyNkZWZpbmUgSU5UXzI0WFhfR1BUSU1FUjEwIDQ2CisjZGVmaW5lIElOVF8yNFhYX0dQVElNRVIxMSA0NworI2RlZmluZSBJTlRfMjRYWF9HUFRJTUVSMTIgNDgKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AxX0lSUV9UWCA1OQorI2RlZmluZSBJTlRfMjRYWF9NQ0JTUDFfSVJRX1JYIDYwCisjZGVmaW5lIElOVF8yNFhYX01DQlNQMl9JUlFfVFggNjIKKyNkZWZpbmUgSU5UXzI0WFhfTUNCU1AyX0lSUV9SWCA2MworI2RlZmluZSBJTlRfMjRYWF9VQVJUMV9JUlEgNzIKKyNkZWZpbmUgSU5UXzI0WFhfVUFSVDJfSVJRIDczCisjZGVmaW5lIElOVF8yNFhYX1VBUlQzX0lSUSA3NAorI2RlZmluZSBJTlRfMjRYWF9NTUNfSVJRIDgzCisKKyNkZWZpbmUgT01BUF9NQVhfR1BJT19MSU5FUyAxOTIKKyNkZWZpbmUgSUhfR1BJT19CQVNFICgxMjggKyBJSDJfQkFTRSkKKyNkZWZpbmUgSUhfTVBVSU9fQkFTRSAoT01BUF9NQVhfR1BJT19MSU5FUyArIElIX0dQSU9fQkFTRSkKKyNkZWZpbmUgSUhfQk9BUkRfQkFTRSAoMTYgKyBJSF9NUFVJT19CQVNFKQorCisjZGVmaW5lIE9NQVBfSVJRX0JJVChpcnEpICgxIDw8ICgoaXJxKSAlIDMyKSkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2VuZGlmCisKKyNpbmNsdWRlIDxhc20vaGFyZHdhcmUuaD4KKworI2lmbmRlZiBOUl9JUlFTCisjZGVmaW5lIE5SX0lSUVMgSUhfQk9BUkRfQkFTRQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWNic3AuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL21jYnNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FlNWUzYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL21jYnNwLmgKQEAgLTAsMCArMSwxODUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQX01DQlNQX0gKKyNkZWZpbmUgX19BU01fQVJDSF9PTUFQX01DQlNQX0gKKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorCisjZGVmaW5lIE9NQVA3MzBfTUNCU1AxX0JBU0UgMHhmZmZiMTAwMAorI2RlZmluZSBPTUFQNzMwX01DQlNQMl9CQVNFIDB4ZmZmYjE4MDAKKworI2RlZmluZSBPTUFQMTUxMF9NQ0JTUDFfQkFTRSAweGUxMDExODAwCisjZGVmaW5lIE9NQVAxNTEwX01DQlNQMl9CQVNFIDB4ZmZmYjEwMDAKKyNkZWZpbmUgT01BUDE1MTBfTUNCU1AzX0JBU0UgMHhlMTAxNzAwMAorCisjZGVmaW5lIE9NQVAxNjEwX01DQlNQMV9CQVNFIDB4ZTEwMTE4MDAKKyNkZWZpbmUgT01BUDE2MTBfTUNCU1AyX0JBU0UgMHhmZmZiMTAwMAorI2RlZmluZSBPTUFQMTYxMF9NQ0JTUDNfQkFTRSAweGUxMDE3MDAwCisKKyNkZWZpbmUgT01BUDI0WFhfTUNCU1AxX0JBU0UgMHg0ODA3NDAwMAorI2RlZmluZSBPTUFQMjRYWF9NQ0JTUDJfQkFTRSAweDQ4MDc2MDAwCisKKyNkZWZpbmUgT01BUF9NQ0JTUF9SRUFEKGJhc2UsIHJlZykgX19yYXdfcmVhZHcoKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCisjZGVmaW5lIE9NQVBfTUNCU1BfV1JJVEUoYmFzZSwgcmVnLCB2YWwpIF9fcmF3X3dyaXRldygodmFsKSwgKGJhc2UpICsgT01BUF9NQ0JTUF9SRUdfIyNyZWcpCisKKyNkZWZpbmUgUlJTVCAweDAwMDEKKyNkZWZpbmUgUlJEWSAweDAwMDIKKyNkZWZpbmUgUkZVTEwgMHgwMDA0CisjZGVmaW5lIFJTWU5DX0VSUiAweDAwMDgKKyNkZWZpbmUgUklOVE0odmFsdWUpICgodmFsdWUpPDw0KSAgCisjZGVmaW5lIEFCSVMgMHgwMDQwCisjZGVmaW5lIERYRU5BIDB4MDA4MAorI2RlZmluZSBDTEtTVFAodmFsdWUpICgodmFsdWUpPDwxMSkgIAorI2RlZmluZSBSSlVTVCh2YWx1ZSkgKCh2YWx1ZSk8PDEzKSAgCisjZGVmaW5lIERMQiAweDgwMDAKKworI2RlZmluZSBYUlNUIDB4MDAwMQorI2RlZmluZSBYUkRZIDB4MDAwMgorI2RlZmluZSBYRU1QVFkgMHgwMDA0CisjZGVmaW5lIFhTWU5DX0VSUiAweDAwMDgKKyNkZWZpbmUgWElOVE0odmFsdWUpICgodmFsdWUpPDw0KSAgCisjZGVmaW5lIEdSU1QgMHgwMDQwCisjZGVmaW5lIEZSU1QgMHgwMDgwCisjZGVmaW5lIFNPRlQgMHgwMTAwCisjZGVmaW5lIEZSRUUgMHgwMjAwCisKKyNkZWZpbmUgQ0xLUlAgMHgwMDAxCisjZGVmaW5lIENMS1hQIDB4MDAwMgorI2RlZmluZSBGU1JQIDB4MDAwNAorI2RlZmluZSBGU1hQIDB4MDAwOAorI2RlZmluZSBEUl9TVEFUIDB4MDAxMAorI2RlZmluZSBEWF9TVEFUIDB4MDAyMAorI2RlZmluZSBDTEtTX1NUQVQgMHgwMDQwCisjZGVmaW5lIFNDTEtNRSAweDAwODAKKyNkZWZpbmUgQ0xLUk0gMHgwMTAwCisjZGVmaW5lIENMS1hNIDB4MDIwMAorI2RlZmluZSBGU1JNIDB4MDQwMAorI2RlZmluZSBGU1hNIDB4MDgwMAorI2RlZmluZSBSSU9FTiAweDEwMDAKKyNkZWZpbmUgWElPRU4gMHgyMDAwCisjZGVmaW5lIElETEVfRU4gMHg0MDAwCisKKyNkZWZpbmUgUldETEVOMSh2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKKyNkZWZpbmUgUkZSTEVOMSh2YWx1ZSkgKCh2YWx1ZSk8PDgpICAKKworI2RlZmluZSBYV0RMRU4xKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBYRlJMRU4xKHZhbHVlKSAoKHZhbHVlKTw8OCkgIAorCisjZGVmaW5lIFJEQVRETFkodmFsdWUpICh2YWx1ZSkgIAorI2RlZmluZSBSRklHIDB4MDAwNAorI2RlZmluZSBSQ09NUEFORCh2YWx1ZSkgKCh2YWx1ZSk8PDMpICAKKyNkZWZpbmUgUldETEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKKyNkZWZpbmUgUkZSTEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDgpICAKKyNkZWZpbmUgUlBIQVNFIDB4ODAwMAorCisjZGVmaW5lIFhEQVRETFkodmFsdWUpICh2YWx1ZSkgIAorI2RlZmluZSBYRklHIDB4MDAwNAorI2RlZmluZSBYQ09NUEFORCh2YWx1ZSkgKCh2YWx1ZSk8PDMpICAKKyNkZWZpbmUgWFdETEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKKyNkZWZpbmUgWEZSTEVOMih2YWx1ZSkgKCh2YWx1ZSk8PDgpICAKKyNkZWZpbmUgWFBIQVNFIDB4ODAwMAorCisjZGVmaW5lIENMS0dEVih2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIEZXSUQodmFsdWUpICgodmFsdWUpPDw4KSAgCisKKyNkZWZpbmUgRlBFUih2YWx1ZSkgKHZhbHVlKSAgCisjZGVmaW5lIEZTR00gMHgxMDAwCisjZGVmaW5lIENMS1NNIDB4MjAwMAorI2RlZmluZSBDTEtTUCAweDQwMDAKKyNkZWZpbmUgR1NZTkMgMHg4MDAwCisKKyNkZWZpbmUgUk1DTSAweDAwMDEKKyNkZWZpbmUgUkNCTEsodmFsdWUpICgodmFsdWUpPDwyKSAgCisjZGVmaW5lIFJQQUJMSyh2YWx1ZSkgKCh2YWx1ZSk8PDUpICAKKyNkZWZpbmUgUlBCQkxLKHZhbHVlKSAoKHZhbHVlKTw8NykgIAorCisjZGVmaW5lIFhNQ00odmFsdWUpICh2YWx1ZSkgIAorI2RlZmluZSBYQ0JMSyh2YWx1ZSkgKCh2YWx1ZSk8PDIpICAKKyNkZWZpbmUgWFBBQkxLKHZhbHVlKSAoKHZhbHVlKTw8NSkgIAorI2RlZmluZSBYUEJCTEsodmFsdWUpICgodmFsdWUpPDw3KSAgCisKK3N0cnVjdCBvbWFwX21jYnNwX3JlZ19jZmcgeworIHUxNiBzcGNyMjsKKyB1MTYgc3BjcjE7CisgdTE2IHJjcjI7CisgdTE2IHJjcjE7CisgdTE2IHhjcjI7CisgdTE2IHhjcjE7CisgdTE2IHNyZ3IyOworIHUxNiBzcmdyMTsKKyB1MTYgbWNyMjsKKyB1MTYgbWNyMTsKKyB1MTYgcGNyMDsKKyB1MTYgcmNlcmM7CisgdTE2IHJjZXJkOworIHUxNiB4Y2VyYzsKKyB1MTYgeGNlcmQ7CisgdTE2IHJjZXJlOworIHUxNiByY2VyZjsKKyB1MTYgeGNlcmU7CisgdTE2IHhjZXJmOworIHUxNiByY2VyZzsKKyB1MTYgcmNlcmg7CisgdTE2IHhjZXJnOworIHUxNiB4Y2VyaDsKK307CisKK3R5cGVkZWYgZW51bSB7CisgT01BUF9NQ0JTUDEgPSAwLAorIE9NQVBfTUNCU1AyLAorIE9NQVBfTUNCU1AzLAorfSBvbWFwX21jYnNwX2lkOworCit0eXBlZGVmIGludCBfX2JpdHdpc2Ugb21hcF9tY2JzcF9pb190eXBlX3Q7CisjZGVmaW5lIE9NQVBfTUNCU1BfSVJRX0lPICgoX19mb3JjZSBvbWFwX21jYnNwX2lvX3R5cGVfdCkgMSkKKyNkZWZpbmUgT01BUF9NQ0JTUF9QT0xMX0lPICgoX19mb3JjZSBvbWFwX21jYnNwX2lvX3R5cGVfdCkgMikKKwordHlwZWRlZiBlbnVtIHsKKyBPTUFQX01DQlNQX1dPUkRfOCA9IDAsCisgT01BUF9NQ0JTUF9XT1JEXzEyLAorIE9NQVBfTUNCU1BfV09SRF8xNiwKKyBPTUFQX01DQlNQX1dPUkRfMjAsCisgT01BUF9NQ0JTUF9XT1JEXzI0LAorIE9NQVBfTUNCU1BfV09SRF8zMiwKK30gb21hcF9tY2JzcF93b3JkX2xlbmd0aDsKKwordHlwZWRlZiBlbnVtIHsKKyBPTUFQX01DQlNQX0NMS19SSVNJTkcgPSAwLAorIE9NQVBfTUNCU1BfQ0xLX0ZBTExJTkcsCit9IG9tYXBfbWNic3BfY2xrX3BvbGFyaXR5OworCit0eXBlZGVmIGVudW0geworIE9NQVBfTUNCU1BfRlNfQUNUSVZFX0hJR0ggPSAwLAorIE9NQVBfTUNCU1BfRlNfQUNUSVZFX0xPVywKK30gb21hcF9tY2JzcF9mc19wb2xhcml0eTsKKwordHlwZWRlZiBlbnVtIHsKKyBPTUFQX01DQlNQX0NMS19TVFBfTU9ERV9OT19ERUxBWSA9IDAsCisgT01BUF9NQ0JTUF9DTEtfU1RQX01PREVfREVMQVksCit9IG9tYXBfbWNic3BfY2xrX3N0cF9tb2RlOworCit0eXBlZGVmIGVudW0geworIE9NQVBfTUNCU1BfU1BJX01BU1RFUiA9IDAsCisgT01BUF9NQ0JTUF9TUElfU0xBVkUsCit9IG9tYXBfbWNic3Bfc3BpX21vZGU7CisKK3N0cnVjdCBvbWFwX21jYnNwX3NwaV9jZmcgeworIG9tYXBfbWNic3Bfc3BpX21vZGUgc3BpX21vZGU7Cisgb21hcF9tY2JzcF9jbGtfcG9sYXJpdHkgcnhfY2xvY2tfcG9sYXJpdHk7Cisgb21hcF9tY2JzcF9jbGtfcG9sYXJpdHkgdHhfY2xvY2tfcG9sYXJpdHk7Cisgb21hcF9tY2JzcF9mc19wb2xhcml0eSBmc3hfcG9sYXJpdHk7CisgdTggY2xrX2RpdjsKKyBvbWFwX21jYnNwX2Nsa19zdHBfbW9kZSBjbGtfc3RwX21vZGU7Cisgb21hcF9tY2JzcF93b3JkX2xlbmd0aCB3b3JkX2xlbmd0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWVtb3J5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tZW1vcnkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YjA2NGI4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbWVtb3J5LmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX01FTU9SWV9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfTUVNT1JZX0gKKworI2RlZmluZSBfX3ZpcnRfdG9fYnVzKHgpIF9fdmlydF90b19waHlzKHgpCisjZGVmaW5lIF9fYnVzX3RvX3ZpcnQoeCkgX19waHlzX3RvX3ZpcnQoeCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL210ZC14aXAuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL210ZC14aXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YjYwYWVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXRkLXhpcC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUkNIX09NQVBfTVREX1hJUF9IX18KKyNkZWZpbmUgX19BUkNIX09NQVBfTVREX1hJUF9IX18KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2RlZmluZSBPTUFQX01QVV9USU1FUl9CQVNFICgweGZmZmVjNTAwKQorI2RlZmluZSBPTUFQX01QVV9USU1FUl9PRkZTRVQgMHgxMDAKKwordHlwZWRlZiBzdHJ1Y3QgeworIHUzMiBjbnRsOworIHUzMiBsb2FkX3RpbTsKKyB1MzIgcmVhZF90aW07Cit9IHhpcF9vbWFwX21wdV90aW1lcl9yZWdzX3Q7CisKKyNkZWZpbmUgeGlwX29tYXBfbXB1X3RpbWVyX2Jhc2UobikgICgodm9sYXRpbGUgeGlwX29tYXBfbXB1X3RpbWVyX3JlZ3NfdCopSU9fQUREUkVTUyhPTUFQX01QVV9USU1FUl9CQVNFICsgICAobikqT01BUF9NUFVfVElNRVJfT0ZGU0VUKSkKKworI2RlZmluZSB4aXBfaXJxcGVuZGluZygpICAgKG9tYXBfcmVhZGwoT01BUF9JSDFfSVRSKSAmIH5vbWFwX3JlYWRsKE9NQVBfSUgxX01JUikpCisjZGVmaW5lIHhpcF9jdXJydGltZSgpICh+eGlwX29tYXBfbXB1X3RpbWVyX3JlYWQoMCkpCisjZGVmaW5lIHhpcF9lbGFwc2VkX3NpbmNlKHgpIChzaWduZWQpKCh+eGlwX29tYXBfbXB1X3RpbWVyX3JlYWQoMCkgLSAoeCkpIC8gNikKKyNkZWZpbmUgeGlwX2NwdV9pZGxlKCkgYXNtIHZvbGF0aWxlICgibWNyIHAxNSwgMCwgJTAsIGM3LCBjMCwgNCIgOjogInIiICgxKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXV4LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9tdXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MmRhNTRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvbXV4LmgKQEAgLTAsMCArMSwzOTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9NVVhfSAorI2RlZmluZSBfX0FTTV9BUkNIX01VWF9ICisKKyNkZWZpbmUgUFVfUERfU0VMX05BIDAgIAorI2RlZmluZSBQVUxMX0RXTl9DVFJMX05BIDAgIAorCisjZGVmaW5lIE1VWF9SRUcocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgLm11eF9yZWcgPSBGVU5DX01VWF9DVFJMXyMjcmVnLCAgIC5tYXNrX29mZnNldCA9IG1vZGVfb2Zmc2V0LCAgIC5tYXNrID0gbW9kZSwKKworI2RlZmluZSBQVUxMX1JFRyhyZWcsIGJpdCwgc3RhdHVzKSAucHVsbF9yZWcgPSBQVUxMX0RXTl9DVFJMXyMjcmVnLCAgIC5wdWxsX2JpdCA9IGJpdCwgICAucHVsbF92YWwgPSBzdGF0dXMsCisKKyNkZWZpbmUgUFVfUERfUkVHKHJlZywgc3RhdHVzKSAucHVfcGRfcmVnID0gUFVfUERfU0VMXyMjcmVnLCAgIC5wdV9wZF92YWwgPSBzdGF0dXMsCisKKyNkZWZpbmUgTVVYX1JFR183MzAocmVnLCBtb2RlX29mZnNldCwgbW9kZSkgICAubXV4X3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgICAubWFza19vZmZzZXQgPSBtb2RlX29mZnNldCwgICAubWFzayA9IG1vZGUsCisKKyNkZWZpbmUgUFVMTF9SRUdfNzMwKHJlZywgYml0LCBzdGF0dXMpIC5wdWxsX3JlZyA9IE9NQVA3MzBfSU9fQ09ORl8jI3JlZywgICAucHVsbF9iaXQgPSBiaXQsICAgLnB1bGxfdmFsID0gc3RhdHVzLAorCisjZGVmaW5lIE1VWF9DRkcoZGVzYywgbXV4X3JlZywgbW9kZV9vZmZzZXQsIG1vZGUsICAgcHVsbF9yZWcsIHB1bGxfYml0LCBwdWxsX3N0YXR1cywgICBwdV9wZF9yZWcsIHB1X3BkX3N0YXR1cywgZGVidWdfc3RhdHVzKSAgeyAgIC5uYW1lID0gZGVzYywgICAuZGVidWcgPSBkZWJ1Z19zdGF0dXMsICAgTVVYX1JFRyhtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSkgICBQVUxMX1JFRyhwdWxsX3JlZywgcHVsbF9iaXQsICFwdWxsX3N0YXR1cykgICBQVV9QRF9SRUcocHVfcGRfcmVnLCBwdV9wZF9zdGF0dXMpICB9LAorCisjZGVmaW5lIE1VWF9DRkdfNzMwKGRlc2MsIG11eF9yZWcsIG1vZGVfb2Zmc2V0LCBtb2RlLCAgIHB1bGxfYml0LCBwdWxsX3N0YXR1cywgZGVidWdfc3RhdHVzKSB7ICAgLm5hbWUgPSBkZXNjLCAgIC5kZWJ1ZyA9IGRlYnVnX3N0YXR1cywgICBNVVhfUkVHXzczMChtdXhfcmVnLCBtb2RlX29mZnNldCwgbW9kZSkgICBQVUxMX1JFR183MzAobXV4X3JlZywgcHVsbF9iaXQsIHB1bGxfc3RhdHVzKSAgIFBVX1BEX1JFRyhOQSwgMCkgIH0sCisKKyNkZWZpbmUgTVVYX0NGR18yNFhYKGRlc2MsIHJlZ19vZmZzZXQsIG1vZGUsICAgcHVsbF9lbiwgcHVsbF9tb2RlLCBkYmcpICB7ICAgLm5hbWUgPSBkZXNjLCAgIC5kZWJ1ZyA9IGRiZywgICAubXV4X3JlZyA9IHJlZ19vZmZzZXQsICAgLm1hc2sgPSBtb2RlLCAgIC5wdWxsX3ZhbCA9IHB1bGxfZW4sICAgLnB1X3BkX3ZhbCA9IHB1bGxfbW9kZSwgIH0sCisKKyNkZWZpbmUgUFVMTF9ESVNBQkxFRCAwCisjZGVmaW5lIFBVTExfRU5BQkxFRCAxCisKKyNkZWZpbmUgUFVMTF9ET1dOIDAKKyNkZWZpbmUgUFVMTF9VUCAxCisKK3N0cnVjdCBwaW5fY29uZmlnIHsKKyBjaGFyICpuYW1lOworIHVuc2lnbmVkIGNoYXIgYnVzeTsKKyB1bnNpZ25lZCBjaGFyIGRlYnVnOworCisgY29uc3QgY2hhciAqbXV4X3JlZ19uYW1lOworIGNvbnN0IHVuc2lnbmVkIGludCBtdXhfcmVnOworIGNvbnN0IHVuc2lnbmVkIGNoYXIgbWFza19vZmZzZXQ7CisgY29uc3QgdW5zaWduZWQgY2hhciBtYXNrOworCisgY29uc3QgY2hhciAqcHVsbF9uYW1lOworIGNvbnN0IHVuc2lnbmVkIGludCBwdWxsX3JlZzsKKyBjb25zdCB1bnNpZ25lZCBjaGFyIHB1bGxfdmFsOworIGNvbnN0IHVuc2lnbmVkIGNoYXIgcHVsbF9iaXQ7CisKKyBjb25zdCBjaGFyICpwdV9wZF9uYW1lOworIGNvbnN0IHVuc2lnbmVkIGludCBwdV9wZF9yZWc7CisgY29uc3QgdW5zaWduZWQgY2hhciBwdV9wZF92YWw7Cit9OworCitlbnVtIG9tYXA3MzBfaW5kZXggeworCisgRTJfNzMwX0tCUjAsCisgSjdfNzMwX0tCUjEsCisgRTFfNzMwX0tCUjIsCisgRjNfNzMwX0tCUjMsCisgRDJfNzMwX0tCUjQsCisgQUEyMF83MzBfS0JSNSwKKyBWMTdfNzMwX0tCUjYsCisgQzJfNzMwX0tCQzAsCisgRDNfNzMwX0tCQzEsCisgRTRfNzMwX0tCQzIsCisgRjRfNzMwX0tCQzMsCisgRTNfNzMwX0tCQzQsCisKKyBBQTE3XzczMF9VU0JfRE0sCisgVzE2XzczMF9VU0JfUFVfRU4sCisgVzE3XzczMF9VU0JfVkJVU0ksCisKKyBWMTlfNzMwX0dQSU9fMTUsCisgTTE5XzczMF9HUElPXzc3LAorIEMyMV83MzBfR1BJT18xMjFfMTIyLAorIEsxOV83MzBfR1BJT18xMjYsCisgSzE1XzczMF9HUElPXzEyNywKKworIFAxNV83MzBfR1BJT18xNl8xNywKKworIE0xNV83MzBfR1BJT184MywKKyBOMjBfNzMwX0dQSU9fODIsCisgTjE4XzczMF9HUElPXzgxLAorIE4xOV83MzBfR1BJT184MCwKKyBMMTVfNzMwX0dQSU9fNzYsCisKKyBVQVJUMV9DVFNfUlRTLAorIE9NQVBfNzMwX0dQSU9TXzQyXzQzLAorIFVBUlQxX1RYX1JYLAorIE9NQVBfNzMwX0dQSU9TXzQwXzQxLAorIFVBUlQxX1VTQl9SWF9UWCwKKyBVQVJUMV9VU0JfUlRTLAorIFVBUlQxX1VTQl9DVFMKK307CisKK2VudW0gb21hcDF4eHhfaW5kZXggeworCisgVUFSVDFfVFggPSAwLAorIFVBUlQxX1JUUywKKworIFVBUlQyX1RYLAorIFVBUlQyX1JYLAorIFVBUlQyX0NUUywKKyBVQVJUMl9SVFMsCisKKyBVQVJUM19UWCwKKyBVQVJUM19SWCwKKyBVQVJUM19DVFMsCisgVUFSVDNfUlRTLAorIFVBUlQzX0NMS1JFUSwKKyBVQVJUM19CQ0xLLAorIFkxNV8xNjEwX1VBUlQzX1JUUywKKworIFBXVCwKKyBQV0wsCisKKyBSMThfVVNCX1ZCVVMsCisgUjE4XzE1MTBfVVNCX0dQSU8wLAorIFc0X1VTQl9QVUVOLAorIFc0X1VTQl9DTEtPLAorIFc0X1VTQl9ISUdIWiwKKyBXNF9HUElPNTgsCisKKyBVU0IxX1NVU1AsCisgVVNCMV9TRU8sCisgVzEzXzE2MTBfVVNCMV9TRTAsCisgVVNCMV9UWEVOLAorIFVTQjFfVFhELAorIFVTQjFfVlAsCisgVVNCMV9WTSwKKyBVU0IxX1JDViwKKyBVU0IxX1NQRUVELAorIFIxM18xNjEwX1VTQjFfU1BFRUQsCisgUjEzXzE3MTBfVVNCMV9TRTAsCisKKyBVU0IyX1NVU1AsCisgVVNCMl9WUCwKKyBVU0IyX1RYRU4sCisgVVNCMl9WTSwKKyBVU0IyX1JDViwKKyBVU0IyX1NFTywKKyBVU0IyX1RYRCwKKworIFIxOF8xNTEwX0dQSU8wLAorIFIxOV8xNTEwX0dQSU8xLAorIE0xNF8xNTEwX0dQSU8yLAorCisgUDE4XzE2MTBfR1BJTzMsCisgWTE1XzE2MTBfR1BJTzE3LAorCisgUjE4XzE3MTBfR1BJTzAsCisgVjJfMTcxMF9HUElPMTAsCisgTjIxXzE3MTBfR1BJTzE0LAorIFcxNV8xNzEwX0dQSU80MCwKKworIE1QVUlPMiwKKyBOMTVfMTYxMF9NUFVJTzIsCisgTVBVSU80LAorIE1QVUlPNSwKKyBUMjBfMTYxMF9NUFVJTzUsCisgVzExXzE2MTBfTVBVSU82LAorIFYxMF8xNjEwX01QVUlPNywKKyBXMTFfMTYxMF9NUFVJTzksCisgVjEwXzE2MTBfTVBVSU8xMCwKKyBXMTBfMTYxMF9NUFVJTzExLAorIEUyMF8xNjEwX01QVUlPMTMsCisgVTIwXzE2MTBfTVBVSU8xNCwKKyBFMTlfMTYxMF9NUFVJTzE1LAorCisgTUNCU1AyX0NMS1IsCisgTUNCU1AyX0NMS1gsCisgTUNCU1AyX0RSLAorIE1DQlNQMl9EWCwKKyBNQ0JTUDJfRlNSLAorIE1DQlNQMl9GU1gsCisKKyBNQ0JTUDNfQ0xLWCwKKworIEJBTExPVVRfVjhfQVJNSU8zLAorIE4yMF9IRFEsCisKKyBXOF8xNjEwX01NQzJfREFUMCwKKyBWOF8xNjEwX01NQzJfREFUMSwKKyBXMTVfMTYxMF9NTUMyX0RBVDIsCisgUjEwXzE2MTBfTU1DMl9EQVQzLAorIFkxMF8xNjEwX01NQzJfQ0xLLAorIFk4XzE2MTBfTU1DMl9DTUQsCisgVjlfMTYxMF9NTUMyX0NNRERJUiwKKyBWNV8xNjEwX01NQzJfREFURElSMCwKKyBXMTlfMTYxMF9NTUMyX0RBVERJUjEsCisgUjE4XzE2MTBfTU1DMl9DTEtJTiwKKworIE0xOV8xNjEwX0VUTV9QU1RBVDAsCisgTDE1XzE2MTBfRVRNX1BTVEFUMSwKKyBMMThfMTYxMF9FVE1fUFNUQVQyLAorIEwxOV8xNjEwX0VUTV9EMCwKKyBKMTlfMTYxMF9FVE1fRDYsCisgSjE4XzE2MTBfRVRNX0Q3LAorCisgUDIwXzE2MTBfR1BJTzQsCisgVjlfMTYxMF9HUElPNywKKyBXOF8xNjEwX0dQSU85LAorIE4yMF8xNjEwX0dQSU8xMSwKKyBOMTlfMTYxMF9HUElPMTMsCisgUDEwXzE2MTBfR1BJTzIyLAorIFY1XzE2MTBfR1BJTzI0LAorIEFBMjBfMTYxMF9HUElPXzQxLAorIFcxOV8xNjEwX0dQSU80OCwKKyBNN18xNjEwX0dQSU82MiwKKyBWMTRfMTZYWF9HUElPMzcsCisgUjlfMTZYWF9HUElPMTgsCisgTDE0XzE2WFhfR1BJTzQ5LAorCisgVjE5XzE2MTBfVVdJUkVfU0NMSywKKyBVMThfMTYxMF9VV0lSRV9TREksCisgVzIxXzE2MTBfVVdJUkVfU0RPLAorIE4xNF8xNjEwX1VXSVJFX0NTMCwKKyBQMTVfMTYxMF9VV0lSRV9DUzMsCisgTjE1XzE2MTBfVVdJUkVfQ1MxLAorCisgVTE5XzE2MTBfU1BJRl9TQ0ssCisgVTE4XzE2MTBfU1BJRl9ESU4sCisgUDIwXzE2MTBfU1BJRl9ESU4sCisgVzIxXzE2MTBfU1BJRl9ET1VULAorIFIxOF8xNjEwX1NQSUZfRE9VVCwKKyBOMTRfMTYxMF9TUElGX0NTMCwKKyBOMTVfMTYxMF9TUElGX0NTMSwKKyBUMTlfMTYxMF9TUElGX0NTMiwKKyBQMTVfMTYxMF9TUElGX0NTMywKKworIEwzXzE2MTBfRkxBU0hfQ1MyQl9PRSwKKyBNOF8xNjEwX0ZMQVNIX0NTMkJfV0UsCisKKyBNTUNfQ01ELAorIE1NQ19EQVQxLAorIE1NQ19EQVQyLAorIE1NQ19EQVQwLAorIE1NQ19DTEssCisgTU1DX0RBVDMsCisKKyBNMTVfMTcxMF9NTUNfQ0xLSSwKKyBQMTlfMTcxMF9NTUNfQ01ERElSLAorIFAyMF8xNzEwX01NQ19EQVRESVIwLAorCisgVzlfVVNCMF9UWEVOLAorIEFBOV9VU0IwX1ZQLAorIFk1X1VTQjBfUkNWLAorIFI5X1VTQjBfVk0sCisgVjZfVVNCMF9UWEQsCisgVzVfVVNCMF9TRTAsCisgVjlfVVNCMF9TUEVFRCwKKyBWOV9VU0IwX1NVU1AsCisKKyBXOV9VU0IyX1RYRU4sCisgQUE5X1VTQjJfVlAsCisgWTVfVVNCMl9SQ1YsCisgUjlfVVNCMl9WTSwKKyBWNl9VU0IyX1RYRCwKKyBXNV9VU0IyX1NFMCwKKworIFIxM18xNjEwX1VBUlQxX1RYLAorIFYxNF8xNlhYX1VBUlQxX1JYLAorIFIxNF8xNjEwX1VBUlQxX0NUUywKKyBBQTE1XzE2MTBfVUFSVDFfUlRTLAorIFI5XzE2WFhfVUFSVDJfUlgsCisgTDE0XzE2WFhfVUFSVDNfUlgsCisKKyBJMkNfU0NMLAorIEkyQ19TREEsCisKKyBGMThfMTYxMF9LQkMwLAorIEQyMF8xNjEwX0tCQzEsCisgRDE5XzE2MTBfS0JDMiwKKyBFMThfMTYxMF9LQkMzLAorIEMyMV8xNjEwX0tCQzQsCisgRzE4XzE2MTBfS0JSMCwKKyBGMTlfMTYxMF9LQlIxLAorIEgxNF8xNjEwX0tCUjIsCisgRTIwXzE2MTBfS0JSMywKKyBFMTlfMTYxMF9LQlI0LAorIE4xOV8xNjEwX0tCUjUsCisKKyBUMjBfMTYxMF9MT1dfUFdSLAorCisgVjVfMTcxMF9NQ0xLX09OLAorIFY1XzE3MTBfTUNMS19PRkYsCisgUjEwXzE2MTBfTUNMS19PTiwKKyBSMTBfMTYxMF9NQ0xLX09GRiwKKworIFAxMV8xNjEwX0NGX0NEMiwKKyBSMTFfMTYxMF9DRl9JT0lTMTYsCisgVjEwXzE2MTBfQ0ZfSVJFUSwKKyBXMTBfMTYxMF9DRl9SRVNFVCwKKyBXMTFfMTYxMF9DRl9DRDEsCit9OworCitlbnVtIG9tYXAyNHh4X2luZGV4IHsKKworIE0xOV8yNFhYX0kyQzFfU0NMLAorIEwxNV8yNFhYX0kyQzFfU0RBLAorIEoxNV8yNFhYX0kyQzJfU0NMLAorIEgxOV8yNFhYX0kyQzJfU0RBLAorCisgVzE5XzI0WFhfU1lTX05JUlEsCisKKyBXMTRfMjRYWF9TWVNfQ0xLT1VULAorCisgTDNfR1BNQ19XQUlUMCwKKyBON19HUE1DX1dBSVQxLAorIE0xX0dQTUNfV0FJVDIsCisgUDFfR1BNQ19XQUlUMywKKworIFkxNV8yNFhYX01DQlNQMl9DTEtYLAorIFIxNF8yNFhYX01DQlNQMl9GU1gsCisgVzE1XzI0WFhfTUNCU1AyX0RSLAorIFYxNV8yNFhYX01DQlNQMl9EWCwKKworIE0yMV8yNDJYX0dQSU8xMSwKKyBBQTEwXzI0MlhfR1BJTzEzLAorIEFBNl8yNDJYX0dQSU8xNCwKKyBBQTRfMjQyWF9HUElPMTUsCisgWTExXzI0MlhfR1BJTzE2LAorIEFBMTJfMjQyWF9HUElPMTcsCisgQUE4XzI0MlhfR1BJTzU4LAorIFkyMF8yNFhYX0dQSU82MCwKKyBXNF9fMjRYWF9HUElPNzQsCisgTTE1XzI0WFhfR1BJTzkyLAorIFYxNF8yNFhYX0dQSU8xMTcsCisKKyBWNF8yNDJYX0dQSU80OSwKKyBXMl8yNDJYX0dQSU81MCwKKyBVNF8yNDJYX0dQSU81MSwKKyBWM18yNDJYX0dQSU81MiwKKyBWMl8yNDJYX0dQSU81MywKKyBWNl8yNDJYX0dQSU81MywKKyBUNF8yNDJYX0dQSU81NCwKKyBZNF8yNDJYX0dQSU81NCwKKyBUM18yNDJYX0dQSU81NSwKKyBVMl8yNDJYX0dQSU81NiwKKworIEFBMTBfMjQyWF9ETUFSRVEwLAorIEFBNl8yNDJYX0RNQVJFUTEsCisgRTRfMjQyWF9ETUFSRVEyLAorIEc0XzI0MlhfRE1BUkVRMywKKyBEM18yNDJYX0RNQVJFUTQsCisgRTNfMjQyWF9ETUFSRVE1LAorCisgUDIwXzI0WFhfVFNDX0lSUSwKKworIEsxNV8yNFhYX1VBUlQzX1RYLAorIEsxNF8yNFhYX1VBUlQzX1JYLAorCisgRzE5XzI0WFhfTU1DX0NMS08sCisgSDE4XzI0WFhfTU1DX0NNRCwKKyBGMjBfMjRYWF9NTUNfREFUMCwKKyBIMTRfMjRYWF9NTUNfREFUMSwKKyBFMTlfMjRYWF9NTUNfREFUMiwKKyBEMTlfMjRYWF9NTUNfREFUMywKKyBGMTlfMjRYWF9NTUNfREFUX0RJUjAsCisgRTIwXzI0WFhfTU1DX0RBVF9ESVIxLAorIEYxOF8yNFhYX01NQ19EQVRfRElSMiwKKyBFMThfMjRYWF9NTUNfREFUX0RJUjMsCisgRzE4XzI0WFhfTU1DX0NNRF9ESVIsCisgSDE1XzI0WFhfTU1DX0NMS0ksCisKKyBUMTlfMjRYWF9LQlIwLAorIFIxOV8yNFhYX0tCUjEsCisgVjE4XzI0WFhfS0JSMiwKKyBNMjFfMjRYWF9LQlIzLAorIEU1X18yNFhYX0tCUjQsCisgTTE4XzI0WFhfS0JSNSwKKyBSMjBfMjRYWF9LQkMwLAorIE0xNF8yNFhYX0tCQzEsCisgSDE5XzI0WFhfS0JDMiwKKyBWMTdfMjRYWF9LQkMzLAorIFAyMV8yNFhYX0tCQzQsCisgTDE0XzI0WFhfS0JDNSwKKyBOMTlfMjRYWF9LQkM2LAorCisgQjNfXzI0WFhfS0JSNSwKKyBBQTRfMjRYWF9LQkMyLAorIEIxM18yNFhYX0tCQzYsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL29tYXAyNHh4LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9vbWFwMjR4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZGVmMmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9vbWFwMjR4eC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJDSF9PTUFQMjRYWF9ICisjZGVmaW5lIF9fQVNNX0FSQ0hfT01BUDI0WFhfSAorCisjZGVmaW5lIEw0XzI0WFhfQkFTRSAweDQ4MDAwMDAwCisjZGVmaW5lIEwzXzI0WFhfQkFTRSAweDY4MDAwMDAwCisKKyNkZWZpbmUgT01BUDI0WFhfSUNfQkFTRSAoTDRfMjRYWF9CQVNFICsgMHhmZTAwMCkKKyNkZWZpbmUgVkFfSUNfQkFTRSBJT19BRERSRVNTKE9NQVAyNFhYX0lDX0JBU0UpCisjZGVmaW5lIE9NQVAyNFhYX0lWQV9JTlRDX0JBU0UgMHg0MDAwMDAwMAorI2RlZmluZSBJUlFfU0lSX0lSUSAweDAwNDAKKworI2RlZmluZSBPTUFQMjRYWF8zMktTWU5DVF9CQVNFIChMNF8yNFhYX0JBU0UgKyAweDQwMDApCisjZGVmaW5lIE9NQVAyNFhYX1BSQ01fQkFTRSAoTDRfMjRYWF9CQVNFICsgMHg4MDAwKQorI2RlZmluZSBPTUFQMjRYWF9TRFJDX0JBU0UgKEwzXzI0WFhfQkFTRSArIDB4OTAwMCkKKworI2RlZmluZSBPTUFQMjQyWF9DT05UUk9MX1NUQVRVUyAoTDRfMjRYWF9CQVNFICsgMHgyZjgpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9zZXJpYWwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3NlcmlhbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhYjg2MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC9zZXJpYWwuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSQ0hfU0VSSUFMX0gKKyNkZWZpbmUgX19BU01fQVJDSF9TRVJJQUxfSAorCisjZGVmaW5lIE9NQVBfTUFYX05SX1BPUlRTIDMKKyNkZWZpbmUgT01BUDE1MTBfQkFTRV9CQVVEICgxMjAwMDAwMC8xNikKKyNkZWZpbmUgT01BUDE2WFhfQkFTRV9CQVVEICg0ODAwMDAwMC8xNikKKworI2RlZmluZSBpc19vbWFwX3BvcnQocCkgKHtpbnQgX19yZXQgPSAwOyAgIGlmIChwID09IElPX0FERFJFU1MoT01BUF9VQVJUMV9CQVNFKSB8fCAgIHAgPT0gSU9fQUREUkVTUyhPTUFQX1VBUlQyX0JBU0UpIHx8ICAgcCA9PSBJT19BRERSRVNTKE9NQVBfVUFSVDNfQkFTRSkpICAgX19yZXQgPSAxOyAgIF9fcmV0OyAgIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2FyY2gvdGltZXguaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3RpbWV4LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmM5MjM0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3RpbWV4LmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUkNIX09NQVBfVElNRVhfSAorI2RlZmluZSBfX0FTTV9BUkNIX09NQVBfVElNRVhfSAorCisjZGVmaW5lIENMT0NLX1RJQ0tfUkFURSAoSFogKiAxMDAwMDBVTCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC92bWFsbG9jLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXJjaC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJiNWI0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hcmNoL3ZtYWxsb2MuaApAQCAtMCwwICsxLDEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFZNQUxMT0NfRU5EIChQQUdFX09GRlNFVCArIDB4MTAwMDAwMDApCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdG9taWMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZjE5MjFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F0b21pYy5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0FUT01JQ19ICisjZGVmaW5lIF9fQVNNX0FSTV9BVE9NSUNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyB2b2xhdGlsZSBpbnQgY291bnRlcjsgfSBhdG9taWNfdDsKKworI2RlZmluZSBBVE9NSUNfSU5JVChpKSB7IChpKSB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F1eHZlYy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2F1eHZlYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZTgzOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vYXV4dmVjLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTUFSTV9BVVhWRUNfSAorI2RlZmluZSBfX0FTTUFSTV9BVVhWRUNfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9iaXRvcHMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjc2YTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2JpdG9wcy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0JJVE9QU19ICisjZGVmaW5lIF9fQVNNX0FSTV9CSVRPUFNfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9ieXRlb3JkZXIuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9ieXRlb3JkZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZGEzN2JmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2J5dGVvcmRlci5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0JZVEVPUkRFUl9ICisjZGVmaW5lIF9fQVNNX0FSTV9CWVRFT1JERVJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworc3RhdGljIGlubGluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fdTMyIF9fX2FyY2hfX3N3YWIzMihfX3UzMiB4KQoreworIF9fdTMyIHQ7CisKKyNpZm5kZWYgX190aHVtYl9fCisgaWYgKCFfX2J1aWx0aW5fY29uc3RhbnRfcCh4KSkgeworCisgYXNtICgiZW9yXHQlMCwgJTEsICUxLCByb3IgIzE2IiA6ICI9ciIgKHQpIDogInIiICh4KSk7CisgfSBlbHNlCisjZW5kaWYKKyB0ID0geCBeICgoeCA8PCAxNikgfCAoeCA+PiAxNikpOworCisgeCA9ICh4IDw8IDI0KSB8ICh4ID4+IDgpOworIHQgJj0gfjB4MDBGRjAwMDA7CisgeCBePSAodCA+PiA4KTsKKworIHJldHVybiB4OworfQorCisjZGVmaW5lIF9fYXJjaF9fc3dhYjMyKHgpIF9fX2FyY2hfX3N3YWIzMih4KQorCisjaWZuZGVmIF9fU1RSSUNUX0FOU0lfXworI2RlZmluZSBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyNkZWZpbmUgX19TV0FCXzY0X1RIUlVfMzJfXworI2VuZGlmCisKKyNpZmRlZiBfX0FSTUVCX18KKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oPgorI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJlMjY0MjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vY2FjaGUuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX0NBQ0hFX0gKKyNkZWZpbmUgX19BU01BUk1fQ0FDSEVfSAorCisjZGVmaW5lIEwxX0NBQ0hFX1NISUZUIDUKKyNkZWZpbmUgTDFfQ0FDSEVfQllURVMgKDEgPDwgTDFfQ0FDSEVfU0hJRlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NhY2hlZmx1c2guaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZWZsdXNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZmYTg3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jYWNoZWZsdXNoLmgKQEAgLTAsMCArMSwxMDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9DQUNIRUZMVVNIX0gKKyNkZWZpbmUgX0FTTUFSTV9DQUNIRUZMVVNIX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKworI2luY2x1ZGUgPGFzbS9nbHVlLmg+CisjaW5jbHVkZSA8YXNtL3NobXBhcmFtLmg+CisKKyNkZWZpbmUgQ0FDSEVfQ09MT1VSKHZhZGRyKSAoKHZhZGRyICYgKFNITUxCQSAtIDEpKSA+PiBQQUdFX1NISUZUKQorCisjdW5kZWYgX0NBQ0hFCisjdW5kZWYgTVVMVElfQ0FDSEUKKworI2lmICFkZWZpbmVkKF9DQUNIRSkgJiYgIWRlZmluZWQoTVVMVElfQ0FDSEUpCisjZXJyb3IgVW5rbm93biBjYWNoZSBtYWludGFpbmVuY2UgbW9kZWwKKyNlbmRpZgorCisjZGVmaW5lIFBHX2RjYWNoZV9kaXJ0eSBQR19hcmNoXzEKKworc3RydWN0IGNwdV9jYWNoZV9mbnMgeworIHZvaWQgKCpmbHVzaF9rZXJuX2FsbCkodm9pZCk7Cisgdm9pZCAoKmZsdXNoX3VzZXJfYWxsKSh2b2lkKTsKKyB2b2lkICgqZmx1c2hfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZywgdW5zaWduZWQgaW50KTsKKworIHZvaWQgKCpjb2hlcmVudF9rZXJuX3JhbmdlKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKKyB2b2lkICgqY29oZXJlbnRfdXNlcl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cisgdm9pZCAoKmZsdXNoX2tlcm5fZGNhY2hlX3BhZ2UpKHZvaWQgKik7CisKKyB2b2lkICgqZG1hX2ludl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cisgdm9pZCAoKmRtYV9jbGVhbl9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cisgdm9pZCAoKmRtYV9mbHVzaF9yYW5nZSkodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7Cit9OworCisjaWZkZWYgTVVMVElfQ0FDSEUKKworI2RlZmluZSBfX2NwdWNfZmx1c2hfa2Vybl9hbGwgY3B1X2NhY2hlLmZsdXNoX2tlcm5fYWxsCisjZGVmaW5lIF9fY3B1Y19mbHVzaF91c2VyX2FsbCBjcHVfY2FjaGUuZmx1c2hfdXNlcl9hbGwKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfcmFuZ2UgY3B1X2NhY2hlLmZsdXNoX3VzZXJfcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X2tlcm5fcmFuZ2UgY3B1X2NhY2hlLmNvaGVyZW50X2tlcm5fcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2NvaGVyZW50X3VzZXJfcmFuZ2UgY3B1X2NhY2hlLmNvaGVyZW50X3VzZXJfcmFuZ2UKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX2RjYWNoZV9wYWdlIGNwdV9jYWNoZS5mbHVzaF9rZXJuX2RjYWNoZV9wYWdlCisKKyNkZWZpbmUgZG1hY19pbnZfcmFuZ2UgY3B1X2NhY2hlLmRtYV9pbnZfcmFuZ2UKKyNkZWZpbmUgZG1hY19jbGVhbl9yYW5nZSBjcHVfY2FjaGUuZG1hX2NsZWFuX3JhbmdlCisjZGVmaW5lIGRtYWNfZmx1c2hfcmFuZ2UgY3B1X2NhY2hlLmRtYV9mbHVzaF9yYW5nZQorCisjZWxzZQorCisjZGVmaW5lIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCBfX2dsdWUoX0NBQ0hFLF9mbHVzaF9rZXJuX2NhY2hlX2FsbCkKKyNkZWZpbmUgX19jcHVjX2ZsdXNoX3VzZXJfYWxsIF9fZ2x1ZShfQ0FDSEUsX2ZsdXNoX3VzZXJfY2FjaGVfYWxsKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfdXNlcl9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9mbHVzaF91c2VyX2NhY2hlX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfa2Vybl9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF9rZXJuX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9jb2hlcmVudF91c2VyX3JhbmdlKQorI2RlZmluZSBfX2NwdWNfZmx1c2hfZGNhY2hlX3BhZ2UgX19nbHVlKF9DQUNIRSxfZmx1c2hfa2Vybl9kY2FjaGVfcGFnZSkKKworI2RlZmluZSBkbWFjX2ludl9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9kbWFfaW52X3JhbmdlKQorI2RlZmluZSBkbWFjX2NsZWFuX3JhbmdlIF9fZ2x1ZShfQ0FDSEUsX2RtYV9jbGVhbl9yYW5nZSkKKyNkZWZpbmUgZG1hY19mbHVzaF9yYW5nZSBfX2dsdWUoX0NBQ0hFLF9kbWFfZmx1c2hfcmFuZ2UpCisKKyNlbmRpZgorCisjZGVmaW5lIGZsdXNoX2NhY2hlX3ZtYXAoc3RhcnQsIGVuZCkgZmx1c2hfY2FjaGVfYWxsKCkKKyNkZWZpbmUgZmx1c2hfY2FjaGVfdnVubWFwKHN0YXJ0LCBlbmQpIGZsdXNoX2NhY2hlX2FsbCgpCisKKyNkZWZpbmUgY29weV90b191c2VyX3BhZ2Uodm1hLCBwYWdlLCB2YWRkciwgZHN0LCBzcmMsIGxlbikgICBkbyB7ICAgbWVtY3B5KGRzdCwgc3JjLCBsZW4pOyAgIGZsdXNoX3B0cmFjZV9hY2Nlc3Modm1hLCBwYWdlLCB2YWRkciwgZHN0LCBsZW4sIDEpOyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBjb3B5X2Zyb21fdXNlcl9wYWdlKHZtYSwgcGFnZSwgdmFkZHIsIGRzdCwgc3JjLCBsZW4pICAgZG8geyAgIG1lbWNweShkc3QsIHNyYywgbGVuKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGZsdXNoX2NhY2hlX2FsbCgpIF9fY3B1Y19mbHVzaF9rZXJuX2FsbCgpCisjZGVmaW5lIGZsdXNoX2NhY2hlX3VzZXJfcmFuZ2Uodm1hLHN0YXJ0LGVuZCkgICBfX2NwdWNfY29oZXJlbnRfdXNlcl9yYW5nZSgoc3RhcnQpICYgUEFHRV9NQVNLLCBQQUdFX0FMSUdOKGVuZCkpCisjZGVmaW5lIGZsdXNoX2ljYWNoZV9yYW5nZShzLGUpIF9fY3B1Y19jb2hlcmVudF9rZXJuX3JhbmdlKHMsZSkKKyNkZWZpbmUgY2xlYW5fZGNhY2hlX2FyZWEoc3RhcnQsc2l6ZSkgY3B1X2RjYWNoZV9jbGVhbl9hcmVhKHN0YXJ0LCBzaXplKQorCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX2xvY2sobWFwcGluZykgICB3cml0ZV9sb2NrX2lycSgmKG1hcHBpbmcpLT50cmVlX2xvY2spCisjZGVmaW5lIGZsdXNoX2RjYWNoZV9tbWFwX3VubG9jayhtYXBwaW5nKSAgIHdyaXRlX3VubG9ja19pcnEoJihtYXBwaW5nKS0+dHJlZV9sb2NrKQorCisjZGVmaW5lIGZsdXNoX2ljYWNoZV91c2VyX3JhbmdlKHZtYSxwYWdlLGFkZHIsbGVuKSAgIGZsdXNoX2RjYWNoZV9wYWdlKHBhZ2UpCisKKyNkZWZpbmUgZmx1c2hfaWNhY2hlX3BhZ2Uodm1hLHBhZ2UpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX2NhY2hlaWRfcHJlc2VudCh2YWwpICh2YWwgIT0gcmVhZF9jcHVpZChDUFVJRF9JRCkpCisjZGVmaW5lIF9fY2FjaGVpZF92aXZ0KHZhbCkgKCh2YWwgJiAoMTUgPDwgMjUpKSAhPSAoMTQgPDwgMjUpKQorI2RlZmluZSBfX2NhY2hlaWRfdmlwdCh2YWwpICgodmFsICYgKDE1IDw8IDI1KSkgPT0gKDE0IDw8IDI1KSkKKyNkZWZpbmUgX19jYWNoZWlkX3ZpcHRfbm9uYWxpYXNpbmcodmFsKSAoKHZhbCAmICgxNSA8PCAyNSB8IDEgPDwgMjMpKSA9PSAoMTQgPDwgMjUpKQorI2RlZmluZSBfX2NhY2hlaWRfdmlwdF9hbGlhc2luZyh2YWwpICgodmFsICYgKDE1IDw8IDI1IHwgMSA8PCAyMykpID09ICgxNCA8PCAyNSB8IDEgPDwgMjMpKQorCisjZGVmaW5lIGNhY2hlX2lzX3ZpdnQoKSAgICh7ICAgdW5zaWduZWQgaW50IF9fdmFsID0gcmVhZF9jcHVpZChDUFVJRF9DQUNIRVRZUEUpOyAgICghX19jYWNoZWlkX3ByZXNlbnQoX192YWwpKSB8fCBfX2NhY2hlaWRfdml2dChfX3ZhbCk7ICAgfSkKKworI2RlZmluZSBjYWNoZV9pc192aXB0KCkgICAoeyAgIHVuc2lnbmVkIGludCBfX3ZhbCA9IHJlYWRfY3B1aWQoQ1BVSURfQ0FDSEVUWVBFKTsgICBfX2NhY2hlaWRfcHJlc2VudChfX3ZhbCkgJiYgX19jYWNoZWlkX3ZpcHQoX192YWwpOyAgIH0pCisKKyNkZWZpbmUgY2FjaGVfaXNfdmlwdF9ub25hbGlhc2luZygpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgX19jYWNoZWlkX3ByZXNlbnQoX192YWwpICYmICAgX19jYWNoZWlkX3ZpcHRfbm9uYWxpYXNpbmcoX192YWwpOyAgIH0pCisKKyNkZWZpbmUgY2FjaGVfaXNfdmlwdF9hbGlhc2luZygpICAgKHsgICB1bnNpZ25lZCBpbnQgX192YWwgPSByZWFkX2NwdWlkKENQVUlEX0NBQ0hFVFlQRSk7ICAgX19jYWNoZWlkX3ByZXNlbnQoX192YWwpICYmICAgX19jYWNoZWlkX3ZpcHRfYWxpYXNpbmcoX192YWwpOyAgIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2NwdXRpbWUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jcHV0aW1lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGE0MDk3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9jcHV0aW1lLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSTV9DUFVUSU1FX0gKKyNkZWZpbmUgX19BUk1fQ1BVVElNRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9jcHV0aW1lLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RlbGF5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGVsYXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzFmZDliCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RlbGF5LmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fREVMQVlfSAorI2RlZmluZSBfX0FTTV9BUk1fREVMQVlfSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAKKworI2RlZmluZSBNQVhfVURFTEFZX01TIDIKKworI2RlZmluZSB1ZGVsYXkobikgICAoX19idWlsdGluX2NvbnN0YW50X3AobikgPyAgICgobikgPiAoTUFYX1VERUxBWV9NUyAqIDEwMDApID8gX19iYWRfdWRlbGF5KCkgOiAgIF9fY29uc3RfdWRlbGF5KChuKSAqICgoMjE5OTAyM1UqSFopPj4xMSkpKSA6ICAgX191ZGVsYXkobikpCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGl2NjQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kaXY2NC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMwM2EwZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZGl2NjQuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9ESVY2NAorI2RlZmluZSBfX0FTTV9BUk1fRElWNjQKKworI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2lmZGVmIF9fQVJNRUJfXworI2RlZmluZSBfX3hoICJyMCIKKyNkZWZpbmUgX194bCAicjEiCisjZWxzZQorI2RlZmluZSBfX3hsICJyMCIKKyNkZWZpbmUgX194aCAicjEiCisjZW5kaWYKKworI2RlZmluZSBkb19kaXYobixiYXNlKSAgKHsgICByZWdpc3RlciB1bnNpZ25lZCBpbnQgX19iYXNlIGFzbSgicjQiKSA9IGJhc2U7ICAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBsb25nIF9fbiBhc20oInIwIikgPSBuOyAgIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3JlcyBhc20oInIyIik7ICAgcmVnaXN0ZXIgdW5zaWduZWQgaW50IF9fcmVtIGFzbShfX3hoKTsgICBhc20oIF9fYXNtZXEoIiUwIiwgX194aCkgICBfX2FzbWVxKCIlMSIsICJyMiIpICAgX19hc21lcSgiJTIiLCAicjAiKSAgIF9fYXNtZXEoIiUzIiwgInI0IikgICAiYmwJX19kb19kaXY2NCIgICA6ICI9ciIgKF9fcmVtKSwgIj1yIiAoX19yZXMpICAgOiAiciIgKF9fbiksICJyIiAoX19iYXNlKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgbiA9IF9fcmVzOyAgIF9fcmVtOyAgfSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLW1hcHBpbmcuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kbWEtbWFwcGluZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlNjUwMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEFTTUFSTV9ETUFfTUFQUElOR19ICisjZGVmaW5lIEFTTUFSTV9ETUFfTUFQUElOR19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RtYS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZWViNzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZG1hLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fRE1BX0gKKyNkZWZpbmUgX19BU01fQVJNX0RNQV9ICisKK3R5cGVkZWYgdW5zaWduZWQgaW50IGRtYWNoX3Q7CisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKyNpbmNsdWRlIDxhc20vc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxhc20vYXJjaC9kbWEuaD4KKworI2lmbmRlZiBNQVhfRE1BX0FERFJFU1MKKyNkZWZpbmUgTUFYX0RNQV9BRERSRVNTIDB4ZmZmZmZmZmYKKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGludCBkbWFtb2RlX3Q7CisKKyNkZWZpbmUgRE1BX01PREVfTUFTSyAzCisKKyNkZWZpbmUgRE1BX01PREVfUkVBRCAwCisjZGVmaW5lIERNQV9NT0RFX1dSSVRFIDEKKyNkZWZpbmUgRE1BX01PREVfQ0FTQ0FERSAyCisjZGVmaW5lIERNQV9BVVRPSU5JVCA0CisKKyNkZWZpbmUgY2xlYXJfZG1hX2ZmKGNoYW5uZWwpCisKKyNkZWZpbmUgc2V0X2RtYV9hZGRyKGNoYW5uZWwsIGFkZHIpICAgX19zZXRfZG1hX2FkZHIoY2hhbm5lbCwgYnVzX3RvX3ZpcnQoYWRkcikpCisKKyNpZm5kZWYgTk9fRE1BCisjZGVmaW5lIE5PX0RNQSAyNTUKKyNlbmRpZgorCisjZGVmaW5lIGlzYV9kbWFfYnJpZGdlX2J1Z2d5ICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kb21haW4uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9kb21haW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NzMxMDllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2RvbWFpbi5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fUFJPQ19ET01BSU5fSAorI2RlZmluZSBfX0FTTV9QUk9DX0RPTUFJTl9ICisKKyNkZWZpbmUgRE9NQUlOX0tFUk5FTCAwCisjZGVmaW5lIERPTUFJTl9UQUJMRSAwCisjZGVmaW5lIERPTUFJTl9VU0VSIDEKKyNkZWZpbmUgRE9NQUlOX0lPIDIKKworI2RlZmluZSBET01BSU5fTk9BQ0NFU1MgMAorI2RlZmluZSBET01BSU5fQ0xJRU5UIDEKKyNkZWZpbmUgRE9NQUlOX01BTkFHRVIgMworCisjZGVmaW5lIGRvbWFpbl92YWwoZG9tLHR5cGUpICgodHlwZSkgPDwgKDIqKGRvbSkpKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIHNldF9kb21haW4oeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBtb2RpZnlfZG9tYWluKGRvbSx0eXBlKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZHludGljay5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2R5bnRpY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjMyM2YyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2R5bnRpY2suaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fRFlOVElDS19ICisjZGVmaW5lIF9BU01BUk1fRFlOVElDS19ICisKKyNpbmNsdWRlIDxhc20vbWFjaC90aW1lLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2VsZi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZDA5NWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZWxmLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTUFSTV9FTEZfSAorI2RlZmluZSBfX0FTTUFSTV9FTEZfSAorCisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorI2luY2x1ZGUgPGFzbS91c2VyLmg+CisjaWZkZWYgX19LRVJORUwKKyNpbmNsdWRlIDxhc20vcHJvY2luZm8uaD4KKyNlbmRpZgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgZWxmX2dyZWdfdDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBlbGZfZnJlZ190WzNdOworCisjZGVmaW5lIEVNX0FSTSA0MAorI2RlZmluZSBFRl9BUk1fQVBDUzI2IDB4MDgKKyNkZWZpbmUgRUZfQVJNX1NPRlRfRkxPQVQgMHgyMDAKKyNkZWZpbmUgRUZfQVJNX0VBQklfTUFTSyAweEZGMDAwMDAwCisKKyNkZWZpbmUgUl9BUk1fTk9ORSAwCisjZGVmaW5lIFJfQVJNX1BDMjQgMQorI2RlZmluZSBSX0FSTV9BQlMzMiAyCisjZGVmaW5lIFJfQVJNX0NBTEwgMjgKKyNkZWZpbmUgUl9BUk1fSlVNUDI0IDI5CisKKyNkZWZpbmUgRUxGX05HUkVHIChzaXplb2YgKHN0cnVjdCBwdF9yZWdzKSAvIHNpemVvZihlbGZfZ3JlZ190KSkKK3R5cGVkZWYgZWxmX2dyZWdfdCBlbGZfZ3JlZ3NldF90W0VMRl9OR1JFR107CisKK3R5cGVkZWYgc3RydWN0IHVzZXJfZnAgZWxmX2ZwcmVnc2V0X3Q7CisKKyNkZWZpbmUgZWxmX2NoZWNrX2FyY2goeCkgKCAoKHgpLT5lX21hY2hpbmUgPT0gRU1fQVJNKSAmJiAoRUxGX1BST0NfT0soKHgpKSkgKQorCisjZGVmaW5lIEVMRl9DTEFTUyBFTEZDTEFTUzMyCisjaWZkZWYgX19BUk1FQl9fCisjZGVmaW5lIEVMRl9EQVRBIEVMRkRBVEEyTVNCCisjZWxzZQorI2RlZmluZSBFTEZfREFUQSBFTEZEQVRBMkxTQgorI2VuZGlmCisjZGVmaW5lIEVMRl9BUkNIIEVNX0FSTQorCisjZGVmaW5lIFVTRV9FTEZfQ09SRV9EVU1QCisjZGVmaW5lIEVMRl9FWEVDX1BBR0VTSVpFIDQwOTYKKworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UgKDIgKiBUQVNLX1NJWkUgLyAzKQorCisjZGVmaW5lIEVMRl9QTEFUX0lOSVQoX3IsIGxvYWRfYWRkcikgKF9yKS0+QVJNX3IwID0gMAorCisjZGVmaW5lIEVMRl9IV0NBUCAoZWxmX2h3Y2FwKQorCisjZGVmaW5lIEVMRl9QTEFURk9STV9TSVpFIDgKKworI2RlZmluZSBFTEZfUExBVEZPUk0gKGVsZl9wbGF0Zm9ybSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZXJybm8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiZTcwNDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZXJybm8uaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUk1fRVJSTk9fSAorI2RlZmluZSBfQVJNX0VSUk5PX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2Vycm5vLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2ZjbnRsLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZmNudGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjM1MWVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2ZjbnRsLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVJNX0ZDTlRMX0gKKyNkZWZpbmUgX0FSTV9GQ05UTF9ICisKKyNkZWZpbmUgT19ESVJFQ1RPUlkgMDQwMDAwICAKKyNkZWZpbmUgT19OT0ZPTExPVyAwMTAwMDAwICAKKyNkZWZpbmUgT19ESVJFQ1QgMDIwMDAwMCAgCisjZGVmaW5lIE9fTEFSR0VGSUxFIDA0MDAwMDAKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2ZjbnRsLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2Zwc3RhdGUuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mcHN0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjM2MmIxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9mcHN0YXRlLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fRlBTVEFURV9ICisjZGVmaW5lIF9fQVNNX0FSTV9GUFNUQVRFX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHZmcF9oYXJkX3N0cnVjdCB7CisgX191NjQgZnByZWdzWzE2XTsKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CisgX191MzIgZnBteF9zdGF0ZTsKKyNlbmRpZgorIF9fdTMyIGZwZXhjOworIF9fdTMyIGZwc2NyOworCisgX191MzIgZnBpbnN0OworIF9fdTMyIGZwaW5zdDI7Cit9OworCit1bmlvbiB2ZnBfc3RhdGUgeworIHN0cnVjdCB2ZnBfaGFyZF9zdHJ1Y3QgaGFyZDsKK307CisKKyNkZWZpbmUgRlBfSEFSRF9TSVpFIDM1CisKK3N0cnVjdCBmcF9oYXJkX3N0cnVjdCB7CisgdW5zaWduZWQgaW50IHNhdmVbRlBfSEFSRF9TSVpFXTsKK307CisKKyNkZWZpbmUgRlBfU09GVF9TSVpFIDM1CisKK3N0cnVjdCBmcF9zb2Z0X3N0cnVjdCB7CisgdW5zaWduZWQgaW50IHNhdmVbRlBfU09GVF9TSVpFXTsKK307CisKKyNkZWZpbmUgSVdNTVhUX1NJWkUgMHg5OAorCitzdHJ1Y3QgaXdtbXh0X3N0cnVjdCB7CisgdW5zaWduZWQgaW50IHNhdmVbSVdNTVhUX1NJWkUgLyBzaXplb2YodW5zaWduZWQgaW50KV07Cit9OworCit1bmlvbiBmcF9zdGF0ZSB7Cisgc3RydWN0IGZwX2hhcmRfc3RydWN0IGhhcmQ7Cisgc3RydWN0IGZwX3NvZnRfc3RydWN0IHNvZnQ7Cit9OworCisjZGVmaW5lIEZQX1NJWkUgKHNpemVvZih1bmlvbiBmcF9zdGF0ZSkgLyBzaXplb2YoaW50KSkKKworc3RydWN0IGNydW5jaF9zdGF0ZSB7CisgdW5zaWduZWQgaW50IG12ZHhbMTZdWzJdOworIHVuc2lnbmVkIGludCBtdmF4WzRdWzNdOworIHVuc2lnbmVkIGludCBkc3BzY1syXTsKK307CisKKyNkZWZpbmUgQ1JVTkNIX1NJWkUgc2l6ZW9mKHN0cnVjdCBjcnVuY2hfc3RhdGUpCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9nbHVlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZ2x1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzMjdiNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vZ2x1ZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaGFyZGlycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MjA3ZTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaGFyZGlycS5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fSEFSRElSUV9ICisjZGVmaW5lIF9fQVNNX0hBUkRJUlFfSAorCisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8YXNtL2lycS5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOworIHVuc2lnbmVkIGludCBsb2NhbF90aW1lcl9pcnFzOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQgaXJxX2NwdXN0YXRfdDsKKworI2luY2x1ZGUgPGxpbnV4L2lycV9jcHVzdGF0Lmg+ICAKKworI2lmIE5SX0lSUVMgPiAyNTYKKyNkZWZpbmUgSEFSRElSUV9CSVRTIDkKKyNlbHNlCisjZGVmaW5lIEhBUkRJUlFfQklUUyA4CisjZW5kaWYKKworI2lmIDEgPDwgSEFSRElSUV9CSVRTIDwgTlJfSVJRUworI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisKKyNkZWZpbmUgX19BUkNIX0lSUV9FWElUX0lSUVNfRElTQUJMRUQgMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkd2FyZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2hhcmR3YXJlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGIzODFkMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9oYXJkd2FyZS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fSEFSRFdBUkVfSAorI2RlZmluZSBfX0FTTV9IQVJEV0FSRV9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC9oYXJkd2FyZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9od19pcnEuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9od19pcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMzRiMzkwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2h3X2lycS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FSQ0hfQVJNX0hXX0lSUV9ICisjZGVmaW5lIF9BUkNIX0FSTV9IV19JUlFfSAorCisjaW5jbHVkZSA8YXNtL21hY2gvaXJxLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lkZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lkZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1MmQ1Y2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaWRlLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTUFSTV9JREVfSAorI2RlZmluZSBfX0FTTUFSTV9JREVfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pby5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc5NDAyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pby5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0lPX0gKKyNkZWZpbmUgX19BU01fQVJNX0lPX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZlNDQ2YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaW9jdGwuaApAQCAtMCwwICsxLDEyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaW9jdGwuaD4KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bHMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pb2N0bHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGY4MmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lvY3Rscy5oCkBAIC0wLDAgKzEsODggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fQVJNX0lPQ1RMU19ICisjZGVmaW5lIF9fQVNNX0FSTV9JT0NUTFNfSAorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKyNkZWZpbmUgVENHRVRTIDB4NTQwMQorI2RlZmluZSBUQ1NFVFMgMHg1NDAyCisjZGVmaW5lIFRDU0VUU1cgMHg1NDAzCisjZGVmaW5lIFRDU0VUU0YgMHg1NDA0CisjZGVmaW5lIFRDR0VUQSAweDU0MDUKKyNkZWZpbmUgVENTRVRBIDB4NTQwNgorI2RlZmluZSBUQ1NFVEFXIDB4NTQwNworI2RlZmluZSBUQ1NFVEFGIDB4NTQwOAorI2RlZmluZSBUQ1NCUksgMHg1NDA5CisjZGVmaW5lIFRDWE9OQyAweDU0MEEKKyNkZWZpbmUgVENGTFNIIDB4NTQwQgorI2RlZmluZSBUSU9DRVhDTCAweDU0MEMKKyNkZWZpbmUgVElPQ05YQ0wgMHg1NDBECisjZGVmaW5lIFRJT0NTQ1RUWSAweDU0MEUKKyNkZWZpbmUgVElPQ0dQR1JQIDB4NTQwRgorI2RlZmluZSBUSU9DU1BHUlAgMHg1NDEwCisjZGVmaW5lIFRJT0NPVVRRIDB4NTQxMQorI2RlZmluZSBUSU9DU1RJIDB4NTQxMgorI2RlZmluZSBUSU9DR1dJTlNaIDB4NTQxMworI2RlZmluZSBUSU9DU1dJTlNaIDB4NTQxNAorI2RlZmluZSBUSU9DTUdFVCAweDU0MTUKKyNkZWZpbmUgVElPQ01CSVMgMHg1NDE2CisjZGVmaW5lIFRJT0NNQklDIDB4NTQxNworI2RlZmluZSBUSU9DTVNFVCAweDU0MTgKKyNkZWZpbmUgVElPQ0dTT0ZUQ0FSIDB4NTQxOQorI2RlZmluZSBUSU9DU1NPRlRDQVIgMHg1NDFBCisjZGVmaW5lIEZJT05SRUFEIDB4NTQxQgorI2RlZmluZSBUSU9DSU5RIEZJT05SRUFECisjZGVmaW5lIFRJT0NMSU5VWCAweDU0MUMKKyNkZWZpbmUgVElPQ0NPTlMgMHg1NDFECisjZGVmaW5lIFRJT0NHU0VSSUFMIDB4NTQxRQorI2RlZmluZSBUSU9DU1NFUklBTCAweDU0MUYKKyNkZWZpbmUgVElPQ1BLVCAweDU0MjAKKyNkZWZpbmUgRklPTkJJTyAweDU0MjEKKyNkZWZpbmUgVElPQ05PVFRZIDB4NTQyMgorI2RlZmluZSBUSU9DU0VURCAweDU0MjMKKyNkZWZpbmUgVElPQ0dFVEQgMHg1NDI0CisjZGVmaW5lIFRDU0JSS1AgMHg1NDI1ICAKKyNkZWZpbmUgVElPQ1NCUksgMHg1NDI3ICAKKyNkZWZpbmUgVElPQ0NCUksgMHg1NDI4ICAKKyNkZWZpbmUgVElPQ0dTSUQgMHg1NDI5ICAKKyNkZWZpbmUgVElPQ0dQVE4gX0lPUignVCcsMHgzMCwgdW5zaWduZWQgaW50KSAgCisjZGVmaW5lIFRJT0NTUFRMQ0sgX0lPVygnVCcsMHgzMSwgaW50KSAgCisKKyNkZWZpbmUgRklPTkNMRVggMHg1NDUwICAKKyNkZWZpbmUgRklPQ0xFWCAweDU0NTEKKyNkZWZpbmUgRklPQVNZTkMgMHg1NDUyCisjZGVmaW5lIFRJT0NTRVJDT05GSUcgMHg1NDUzCisjZGVmaW5lIFRJT0NTRVJHV0lMRCAweDU0NTQKKyNkZWZpbmUgVElPQ1NFUlNXSUxEIDB4NTQ1NQorI2RlZmluZSBUSU9DR0xDS1RSTUlPUyAweDU0NTYKKyNkZWZpbmUgVElPQ1NMQ0tUUk1JT1MgMHg1NDU3CisjZGVmaW5lIFRJT0NTRVJHU1RSVUNUIDB4NTQ1OCAgCisjZGVmaW5lIFRJT0NTRVJHRVRMU1IgMHg1NDU5ICAKKyNkZWZpbmUgVElPQ1NFUkdFVE1VTFRJIDB4NTQ1QSAgCisjZGVmaW5lIFRJT0NTRVJTRVRNVUxUSSAweDU0NUIgIAorCisjZGVmaW5lIFRJT0NNSVdBSVQgMHg1NDVDICAKKyNkZWZpbmUgVElPQ0dJQ09VTlQgMHg1NDVEICAKKyNkZWZpbmUgRklPUVNJWkUgMHg1NDVFCisKKyNkZWZpbmUgVElPQ1BLVF9EQVRBIDAKKyNkZWZpbmUgVElPQ1BLVF9GTFVTSFJFQUQgMQorI2RlZmluZSBUSU9DUEtUX0ZMVVNIV1JJVEUgMgorI2RlZmluZSBUSU9DUEtUX1NUT1AgNAorI2RlZmluZSBUSU9DUEtUX1NUQVJUIDgKKyNkZWZpbmUgVElPQ1BLVF9OT1NUT1AgMTYKKyNkZWZpbmUgVElPQ1BLVF9ET1NUT1AgMzIKKworI2RlZmluZSBUSU9DU0VSX1RFTVQgMHgwMSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lwY2J1Zi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2lwY2J1Zi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBlNDc1MDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXBjYnVmLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTUFSTV9JUENCVUZfSAorI2RlZmluZSBfX0FTTUFSTV9JUENCVUZfSAorCitzdHJ1Y3QgaXBjNjRfcGVybQoreworIF9fa2VybmVsX2tleV90IGtleTsKKyBfX2tlcm5lbF91aWQzMl90IHVpZDsKKyBfX2tlcm5lbF9naWQzMl90IGdpZDsKKyBfX2tlcm5lbF91aWQzMl90IGN1aWQ7CisgX19rZXJuZWxfZ2lkMzJfdCBjZ2lkOworIF9fa2VybmVsX21vZGVfdCBtb2RlOworIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCBzZXE7CisgdW5zaWduZWQgc2hvcnQgX19wYWQyOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXJxLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vaXJxLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjA4NWEyMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9pcnEuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9JUlFfSAorI2RlZmluZSBfX0FTTV9BUk1fSVJRX0gKKworI2luY2x1ZGUgPGFzbS9hcmNoL2lycXMuaD4KKworI2lmbmRlZiBpcnFfY2Fub25pY2FsaXplCisjZGVmaW5lIGlycV9jYW5vbmljYWxpemUoaSkgKGkpCisjZW5kaWYKKworI2lmbmRlZiBOUl9JUlFTCisjZGVmaW5lIE5SX0lSUVMgMTI4CisjZW5kaWYKKworI2lmbmRlZiBOT19JUlEKKyNkZWZpbmUgTk9fSVJRICgodW5zaWduZWQgaW50KSgtMSkpCisjZW5kaWYKKworc3RydWN0IGlycWFjdGlvbjsKKworI2RlZmluZSBfX0lSUVRfRkFMRURHRSBJUlFfVFlQRV9FREdFX0ZBTExJTkcKKyNkZWZpbmUgX19JUlFUX1JJU0VER0UgSVJRX1RZUEVfRURHRV9SSVNJTkcKKyNkZWZpbmUgX19JUlFUX0xPV0xWTCBJUlFfVFlQRV9MRVZFTF9MT1cKKyNkZWZpbmUgX19JUlFUX0hJR0hMVkwgSVJRX1RZUEVfTEVWRUxfSElHSAorCisjZGVmaW5lIElSUVRfTk9FREdFICgwKQorI2RlZmluZSBJUlFUX1JJU0lORyAoX19JUlFUX1JJU0VER0UpCisjZGVmaW5lIElSUVRfRkFMTElORyAoX19JUlFUX0ZBTEVER0UpCisjZGVmaW5lIElSUVRfQk9USEVER0UgKF9fSVJRVF9SSVNFREdFfF9fSVJRVF9GQUxFREdFKQorI2RlZmluZSBJUlFUX0xPVyAoX19JUlFUX0xPV0xWTCkKKyNkZWZpbmUgSVJRVF9ISUdIIChfX0lSUVRfSElHSExWTCkKKyNkZWZpbmUgSVJRVF9QUk9CRSBJUlFfVFlQRV9QUk9CRQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xpbmthZ2UuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9saW5rYWdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWZiNjI4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9saW5rYWdlLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9MSU5LQUdFX0gKKyNkZWZpbmUgX19BU01fTElOS0FHRV9ICisKKyNkZWZpbmUgX19BTElHTiAuYWxpZ24gMAorI2RlZmluZSBfX0FMSUdOX1NUUiAiLmFsaWduIDAiCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xvY2FsLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGQ2YTYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL2xvY2FsLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGFzbS1nZW5lcmljL2xvY2FsLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9ja3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9sb2Nrcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY0ODQ4NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbG9ja3MuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX1BST0NfTE9DS1NfSAorI2RlZmluZSBfX0FTTV9QUk9DX0xPQ0tTX0gKKworI2lmIF9fTElOVVhfQVJNX0FSQ0hfXyA+PSA2CisKKyNkZWZpbmUgX19kb3duX29wKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcFxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCXN1YglsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdm1pCWlwLCAlMFxuIiAgIglibG1pCSIgI2ZhaWwgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIH0pCisKKyNkZWZpbmUgX19kb3duX29wX3JldChwdHIsZmFpbCkgICAoeyAgIHVuc2lnbmVkIGludCByZXQ7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF9yZXRcbiIgICIxOglsZHJleAlsciwgWyUxXVxuIiAgIglzdWIJbHIsIGxyLCAlMlxuIiAgIglzdHJleAlpcCwgbHIsIFslMV1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJdGVxCWxyLCAjMFxuIiAgIgltb3ZtaQlpcCwgJTFcbiIgICIJbW92cGwJaXAsICMwXG4iICAiCWJsbWkJIiAjZmFpbCAiXG4iICAiCW1vdgklMCwgaXAiICAgOiAiPSZyIiAocmV0KSAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICByZXQ7ICAgfSkKKworI2RlZmluZSBfX3VwX29wKHB0cix3YWtlKSAgICh7ICAgc21wX21iKCk7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgdXBfb3BcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglhZGQJbHIsIGxyLCAlMVxuIiAgIglzdHJleAlpcCwgbHIsIFslMF1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJY21wCWxyLCAjMFxuIiAgIgltb3ZsZQlpcCwgJTBcbiIgICIJYmxsZQkiICN3YWtlICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICB9KQorCisjZGVmaW5lIFJXX0xPQ0tfQklBUyAweDAxMDAwMDAwCisjZGVmaW5lIFJXX0xPQ0tfQklBU19TVFIgIjB4MDEwMDAwMDAiCisKKyNkZWZpbmUgX19kb3duX29wX3dyaXRlKHB0cixmYWlsKSAgICh7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgZG93bl9vcF93cml0ZVxuIiAgIjE6CWxkcmV4CWxyLCBbJTBdXG4iICAiCXN1YglsciwgbHIsICUxXG4iICAiCXN0cmV4CWlwLCBsciwgWyUwXVxuIiAgIgl0ZXEJaXAsICMwXG4iICAiCWJuZQkxYlxuIiAgIgl0ZXEJbHIsICMwXG4iICAiCW1vdm5lCWlwLCAlMFxuIiAgIglibG5lCSIgI2ZhaWwgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKKworI2RlZmluZSBfX3VwX29wX3dyaXRlKHB0cix3YWtlKSAgICh7ICAgc21wX21iKCk7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgdXBfb3Bfd3JpdGVcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyZXgJaXAsIGxyLCBbJTBdXG4iICAiCXRlcQlpcCwgIzBcbiIgICIJYm5lCTFiXG4iICAiCW1vdmNzCWlwLCAlMFxuIiAgIglibGNzCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoUldfTE9DS19CSUFTKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmVhZChwdHIsZmFpbCkgICBfX2Rvd25fb3AocHRyLCBmYWlsKQorCisjZGVmaW5lIF9fdXBfb3BfcmVhZChwdHIsd2FrZSkgICAoeyAgIHNtcF9tYigpOyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIHVwX29wX3JlYWRcbiIgICIxOglsZHJleAlsciwgWyUwXVxuIiAgIglhZGQJbHIsIGxyLCAlMVxuIiAgIglzdHJleAlpcCwgbHIsIFslMF1cbiIgICIJdGVxCWlwLCAjMFxuIiAgIglibmUJMWJcbiIgICIJdGVxCWxyLCAjMFxuIiAgIgltb3ZlcQlpcCwgJTBcbiIgICIJYmxlcQkiICN3YWtlICAgOiAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICB9KQorCisjZWxzZQorCisjZGVmaW5lIF9fZG93bl9vcChwdHIsZmFpbCkgICAoeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIGRvd25fb3BcbiIgICIJbXJzCWlwLCBjcHNyXG4iICAiCW9ycglsciwgaXAsICMxMjhcbiIgICIJbXNyCWNwc3JfYywgbHJcbiIgICIJbGRyCWxyLCBbJTBdXG4iICAiCXN1YnMJbHIsIGxyLCAlMVxuIiAgIglzdHIJbHIsIFslMF1cbiIgICIJbXNyCWNwc3JfYywgaXBcbiIgICIJbW92bWkJaXAsICUwXG4iICAiCWJsbWkJIiAjZmFpbCAgIDogICA6ICJyIiAocHRyKSwgIkkiICgxKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgc21wX21iKCk7ICAgfSkKKworI2RlZmluZSBfX2Rvd25fb3BfcmV0KHB0cixmYWlsKSAgICh7ICAgdW5zaWduZWQgaW50IHJldDsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCBkb3duX29wX3JldFxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMV1cbiIgICIJc3VicwlsciwgbHIsICUyXG4iICAiCXN0cglsciwgWyUxXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZtaQlpcCwgJTFcbiIgICIJbW92cGwJaXAsICMwXG4iICAiCWJsbWkJIiAjZmFpbCAiXG4iICAiCW1vdgklMCwgaXAiICAgOiAiPSZyIiAocmV0KSAgIDogInIiIChwdHIpLCAiSSIgKDEpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICByZXQ7ICAgfSkKKworI2RlZmluZSBfX3VwX29wKHB0cix3YWtlKSAgICh7ICAgc21wX21iKCk7ICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIkAgdXBfb3BcbiIgICIJbXJzCWlwLCBjcHNyXG4iICAiCW9ycglsciwgaXAsICMxMjhcbiIgICIJbXNyCWNwc3JfYywgbHJcbiIgICIJbGRyCWxyLCBbJTBdXG4iICAiCWFkZHMJbHIsIGxyLCAlMVxuIiAgIglzdHIJbHIsIFslMF1cbiIgICIJbXNyCWNwc3JfYywgaXBcbiIgICIJbW92bGUJaXAsICUwXG4iICAiCWJsbGUJIiAjd2FrZSAgIDogICA6ICJyIiAocHRyKSwgIkkiICgxKSAgIDogImlwIiwgImxyIiwgImNjIik7ICAgfSkKKworI2RlZmluZSBSV19MT0NLX0JJQVMgMHgwMTAwMDAwMAorI2RlZmluZSBSV19MT0NLX0JJQVNfU1RSICIweDAxMDAwMDAwIgorCisjZGVmaW5lIF9fZG93bl9vcF93cml0ZShwdHIsZmFpbCkgICAoeyAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICJAIGRvd25fb3Bfd3JpdGVcbiIgICIJbXJzCWlwLCBjcHNyXG4iICAiCW9ycglsciwgaXAsICMxMjhcbiIgICIJbXNyCWNwc3JfYywgbHJcbiIgICIJbGRyCWxyLCBbJTBdXG4iICAiCXN1YnMJbHIsIGxyLCAlMVxuIiAgIglzdHIJbHIsIFslMF1cbiIgICIJbXNyCWNwc3JfYywgaXBcbiIgICIJbW92bmUJaXAsICUwXG4iICAiCWJsbmUJIiAjZmFpbCAgIDogICA6ICJyIiAocHRyKSwgIkkiIChSV19MT0NLX0JJQVMpICAgOiAiaXAiLCAibHIiLCAiY2MiKTsgICBzbXBfbWIoKTsgICB9KQorCisjZGVmaW5lIF9fdXBfb3Bfd3JpdGUocHRyLHdha2UpICAgKHsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcF93cml0ZVxuIiAgIgltcnMJaXAsIGNwc3JcbiIgICIJb3JyCWxyLCBpcCwgIzEyOFxuIiAgIgltc3IJY3Bzcl9jLCBsclxuIiAgIglsZHIJbHIsIFslMF1cbiIgICIJYWRkcwlsciwgbHIsICUxXG4iICAiCXN0cglsciwgWyUwXVxuIiAgIgltc3IJY3Bzcl9jLCBpcFxuIiAgIgltb3ZjcwlpcCwgJTBcbiIgICIJYmxjcwkiICN3YWtlICAgOiAgIDogInIiIChwdHIpLCAiSSIgKFJXX0xPQ0tfQklBUykgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIHNtcF9tYigpOyAgIH0pCisKKyNkZWZpbmUgX19kb3duX29wX3JlYWQocHRyLGZhaWwpICAgX19kb3duX29wKHB0ciwgZmFpbCkKKworI2RlZmluZSBfX3VwX29wX3JlYWQocHRyLHdha2UpICAgKHsgICBzbXBfbWIoKTsgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiQCB1cF9vcF9yZWFkXG4iICAiCW1ycwlpcCwgY3BzclxuIiAgIglvcnIJbHIsIGlwLCAjMTI4XG4iICAiCW1zcgljcHNyX2MsIGxyXG4iICAiCWxkcglsciwgWyUwXVxuIiAgIglhZGRzCWxyLCBsciwgJTFcbiIgICIJc3RyCWxyLCBbJTBdXG4iICAiCW1zcgljcHNyX2MsIGlwXG4iICAiCW1vdmVxCWlwLCAlMFxuIiAgIglibGVxCSIgI3dha2UgICA6ICAgOiAiciIgKHB0ciksICJJIiAoMSkgICA6ICJpcCIsICJsciIsICJjYyIpOyAgIH0pCisKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tYzE0NjgxOHJ0Yy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21jMTQ2ODE4cnRjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE4NjcyNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tYzE0NjgxOHJ0Yy5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9NQzE0NjgxOFJUQ19ICisjZGVmaW5lIF9BU01fTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2FyY2gvaXJxcy5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorCisjaWZuZGVmIFJUQ19QT1JUCisjZGVmaW5lIFJUQ19QT1JUKHgpICgweDcwICsgKHgpKQorI2RlZmluZSBSVENfQUxXQVlTX0JDRCAxICAKKyNlbmRpZgorCisjZGVmaW5lIENNT1NfUkVBRChhZGRyKSAoeyAgb3V0Yl9wKChhZGRyKSxSVENfUE9SVCgwKSk7ICBpbmJfcChSVENfUE9SVCgxKSk7ICB9KQorI2RlZmluZSBDTU9TX1dSSVRFKHZhbCwgYWRkcikgKHsgIG91dGJfcCgoYWRkciksUlRDX1BPUlQoMCkpOyAgb3V0Yl9wKCh2YWwpLFJUQ19QT1JUKDEpKTsgIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21lbW9yeS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21lbW9yeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMTM3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbWVtb3J5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fTUVNT1JZX0gKKyNkZWZpbmUgX19BU01fQVJNX01FTU9SWV9ICisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisjZGVmaW5lIFVMKHgpICh4IyNVTCkKKyNlbHNlCisjZGVmaW5lIFVMKHgpICh4KQorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL21lbW9yeS5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjaWZuZGVmIFRBU0tfU0laRQorI2RlZmluZSBUQVNLX1NJWkUgKENPTkZJR19EUkFNX1NJWkUpCisjZW5kaWYKKworI2lmbmRlZiBUQVNLX1VOTUFQUEVEX0JBU0UKKyNkZWZpbmUgVEFTS19VTk1BUFBFRF9CQVNFIFVMKDB4MDAwMDAwMDApCisjZW5kaWYKKworI2lmbmRlZiBQSFlTX09GRlNFVAorI2RlZmluZSBQSFlTX09GRlNFVCAoQ09ORklHX0RSQU1fQkFTRSkKKyNlbmRpZgorCisjaWZuZGVmIEVORF9NRU0KKyNkZWZpbmUgRU5EX01FTSAoQ09ORklHX0RSQU1fQkFTRSArIENPTkZJR19EUkFNX1NJWkUpCisjZW5kaWYKKworI2lmbmRlZiBQQUdFX09GRlNFVAorI2RlZmluZSBQQUdFX09GRlNFVCAoUEhZU19PRkZTRVQpCisjZW5kaWYKKworI2RlZmluZSBNT0RVTEVfRU5EIChFTkRfTUVNKQorI2RlZmluZSBNT0RVTEVfU1RBUlQgKFBIWVNfT0ZGU0VUKQorCisjaWZuZGVmIENPTlNJU1RFTlRfRE1BX1NJWkUKKyNkZWZpbmUgQ09OU0lTVEVOVF9ETUFfU0laRSBTWl8yTQorI2VuZGlmCisKKyNpZm5kZWYgX192aXJ0X3RvX3BoeXMKKyNkZWZpbmUgX192aXJ0X3RvX3BoeXMoeCkgKCh4KSAtIFBBR0VfT0ZGU0VUICsgUEhZU19PRkZTRVQpCisjZGVmaW5lIF9fcGh5c190b192aXJ0KHgpICgoeCkgLSBQSFlTX09GRlNFVCArIFBBR0VfT0ZGU0VUKQorI2VuZGlmCisKKyNkZWZpbmUgX19waHlzX3RvX3BmbihwYWRkcikgKChwYWRkcikgPj4gUEFHRV9TSElGVCkKKyNkZWZpbmUgX19wZm5fdG9fcGh5cyhwZm4pICgocGZuKSA8PCBQQUdFX1NISUZUKQorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaWZuZGVmIElTQV9ETUFfVEhSRVNIT0xECisjZGVmaW5lIElTQV9ETUFfVEhSRVNIT0xEICgweGZmZmZmZmZmVUxMKQorI2VuZGlmCisKKyNpZm5kZWYgYXJjaF9hZGp1c3Rfem9uZXMKKyNkZWZpbmUgYXJjaF9hZGp1c3Rfem9uZXMobm9kZSxzaXplLGhvbGVzKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2RlZmluZSBQSFlTX1BGTl9PRkZTRVQgKFBIWVNfT0ZGU0VUID4+IFBBR0VfU0hJRlQpCisKKyNkZWZpbmUgX19wYSh4KSBfX3ZpcnRfdG9fcGh5cygodW5zaWduZWQgbG9uZykoeCkpCisjZGVmaW5lIF9fdmEoeCkgKCh2b2lkICopX19waHlzX3RvX3ZpcnQoKHVuc2lnbmVkIGxvbmcpKHgpKSkKKyNkZWZpbmUgcGZuX3RvX2thZGRyKHBmbikgX192YSgocGZuKSA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBBUkNIX1BGTl9PRkZTRVQgUEhZU19QRk5fT0ZGU0VUCisjZGVmaW5lIHBmbl92YWxpZChwZm4pICgocGZuKSA+PSBQSFlTX1BGTl9PRkZTRVQgJiYgKHBmbikgPCAoUEhZU19QRk5fT0ZGU0VUICsgbWF4X21hcG5yKSkKKyNkZWZpbmUgdmlydF90b19wYWdlKGthZGRyKSBwZm5fdG9fcGFnZShfX3BhKGthZGRyKSA+PiBQQUdFX1NISUZUKQorI2RlZmluZSB2aXJ0X2FkZHJfdmFsaWQoa2FkZHIpICgodW5zaWduZWQgbG9uZykoa2FkZHIpID49IFBBR0VfT0ZGU0VUICYmICh1bnNpZ25lZCBsb25nKShrYWRkcikgPCAodW5zaWduZWQgbG9uZyloaWdoX21lbW9yeSkKKyNkZWZpbmUgUEhZU19UT19OSUQoYWRkcikgKDApCisjZGVmaW5lIHBhZ2VfdG9fcGh5cyhwYWdlKSAocGFnZV90b19wZm4ocGFnZSkgPDwgUEFHRV9TSElGVCkKKyNpZm5kZWYgX19hcmNoX3BhZ2VfdG9fZG1hCisjZGVmaW5lIHBhZ2VfdG9fZG1hKGRldiwgcGFnZSkgKChkbWFfYWRkcl90KV9fdmlydF90b19idXMoKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpKSkKKyNkZWZpbmUgZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKSAoKHZvaWQgKilfX2J1c190b192aXJ0KGFkZHIpKQorI2RlZmluZSB2aXJ0X3RvX2RtYShkZXYsIGFkZHIpICgoZG1hX2FkZHJfdClfX3ZpcnRfdG9fYnVzKCh1bnNpZ25lZCBsb25nKShhZGRyKSkpCisjZWxzZQorI2RlZmluZSBwYWdlX3RvX2RtYShkZXYsIHBhZ2UpIChfX2FyY2hfcGFnZV90b19kbWEoZGV2LCBwYWdlKSkKKyNkZWZpbmUgZG1hX3RvX3ZpcnQoZGV2LCBhZGRyKSAoX19hcmNoX2RtYV90b192aXJ0KGRldiwgYWRkcikpCisjZGVmaW5lIHZpcnRfdG9fZG1hKGRldiwgYWRkcikgKF9fYXJjaF92aXJ0X3RvX2RtYShkZXYsIGFkZHIpKQorI2VuZGlmCisjaWZuZGVmIGFyY2hfaXNfY29oZXJlbnQKKyNkZWZpbmUgYXJjaF9pc19jb2hlcmVudCgpIDAKKyNlbmRpZgorI2VuZGlmCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvbWVtb3J5X21vZGVsLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tbWFuLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW1hbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmNzFkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW1hbi5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUk1fTU1BTl9IX18KKyNkZWZpbmUgX19BUk1fTU1BTl9IX18KKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL21tYW4uaD4KKworI2RlZmluZSBNQVBfR1JPV1NET1dOIDB4MDEwMCAgCisjZGVmaW5lIE1BUF9ERU5ZV1JJVEUgMHgwODAwICAKKyNkZWZpbmUgTUFQX0VYRUNVVEFCTEUgMHgxMDAwICAKKyNkZWZpbmUgTUFQX0xPQ0tFRCAweDIwMDAgIAorI2RlZmluZSBNQVBfTk9SRVNFUlZFIDB4NDAwMCAgCisjZGVmaW5lIE1BUF9QT1BVTEFURSAweDgwMDAgIAorI2RlZmluZSBNQVBfTk9OQkxPQ0sgMHgxMDAwMCAgCisKKyNkZWZpbmUgTUNMX0NVUlJFTlQgMSAgCisjZGVmaW5lIE1DTF9GVVRVUkUgMiAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21vZHVsZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL21vZHVsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY4YjgwNmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbW9kdWxlLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0FSTV9NT0RVTEVfSAorI2RlZmluZSBfQVNNX0FSTV9NT0RVTEVfSAorCitzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMKK3sKKyBpbnQgZm9vOworfTsKKworI2RlZmluZSBFbGZfU2hkciBFbGYzMl9TaGRyCisjZGVmaW5lIEVsZl9TeW0gRWxmMzJfU3ltCisjZGVmaW5lIEVsZl9FaGRyIEVsZjMyX0VoZHIKKworI2RlZmluZSBNT0RVTEVfQVJDSF9WRVJNQUdJQyAiQVJNdiIgX19zdHJpbmdpZnkoX19MSU5VWF9BUk1fQVJDSF9fKSAiICIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXNnYnVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXNnYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRkNjE0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tc2didWYuaApAQCAtMCwwICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fTVNHQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9NU0dCVUZfSAorCitzdHJ1Y3QgbXNxaWQ2NF9kcyB7Cisgc3RydWN0IGlwYzY0X3Blcm0gbXNnX3Blcm07CisgX19rZXJuZWxfdGltZV90IG1zZ19zdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyBfX2tlcm5lbF90aW1lX3QgbXNnX3J0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworIF9fa2VybmVsX3RpbWVfdCBtc2dfY3RpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDM7CisgdW5zaWduZWQgbG9uZyBtc2dfY2J5dGVzOworIHVuc2lnbmVkIGxvbmcgbXNnX3FudW07CisgdW5zaWduZWQgbG9uZyBtc2dfcWJ5dGVzOworIF9fa2VybmVsX3BpZF90IG1zZ19sc3BpZDsKKyBfX2tlcm5lbF9waWRfdCBtc2dfbHJwaWQ7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9tdGQteGlwLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXRkLXhpcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZjNTNmNmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vbXRkLXhpcC5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BUk1fTVREX1hJUF9IX18KKyNkZWZpbmUgX19BUk1fTVREX1hJUF9IX18KKworI2luY2x1ZGUgPGFzbS9oYXJkd2FyZS5oPgorI2luY2x1ZGUgPGFzbS9hcmNoL210ZC14aXAuaD4KKworI2RlZmluZSB4aXBfaXByZWZldGNoKCkgZG8geyBhc20gdm9sYXRpbGUgKCIucmVwIDg7IG5vcDsgLmVuZHIiKTsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGFnZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTgwMzQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhZ2UuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fUEFHRV9ICisjZGVmaW5lIF9BU01BUk1fUEFHRV9ICisKKyNkZWZpbmUgUEFHRV9TSElGVCAxMgorI2RlZmluZSBQQUdFX1NJWkUgKDFVTCA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBQQUdFX01BU0sgKH4oUEFHRV9TSVpFLTEpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYXJhbS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjNkNDVjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wYXJhbS5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fUEFSQU1fSAorI2RlZmluZSBfX0FTTV9QQVJBTV9ICisKKyNkZWZpbmUgSFogMTAwCisKKyNkZWZpbmUgRVhFQ19QQUdFU0laRSA0MDk2CisKKyNpZm5kZWYgTk9HUk9VUAorI2RlZmluZSBOT0dST1VQICgtMSkKKyNlbmRpZgorCisjZGVmaW5lIE1BWEhPU1ROQU1FTEVOIDY0CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGVyY3B1LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjUwMDM0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZXJjcHUuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJNX1BFUkNQVQorI2RlZmluZSBfX0FSTV9QRVJDUFUKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BlcmNwdS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wZ2FsbG9jLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGdhbGxvYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkNDVlNjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGdhbGxvYy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9QR0FMTE9DX0gKKyNkZWZpbmUgX0FTTUFSTV9QR0FMTE9DX0gKKworI2luY2x1ZGUgPGFzbS9kb21haW4uaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1od2RlZi5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCisjZGVmaW5lIGNoZWNrX3BndF9jYWNoZSgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS1od2RlZi5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUtaHdkZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40N2U4Njc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUtaHdkZWYuaApAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fUEdUQUJMRV9IV0RFRl9ICisjZGVmaW5lIF9BU01BUk1fUEdUQUJMRV9IV0RFRl9ICisKKyNkZWZpbmUgUE1EX1RZUEVfTUFTSyAoMyA8PCAwKQorI2RlZmluZSBQTURfVFlQRV9GQVVMVCAoMCA8PCAwKQorI2RlZmluZSBQTURfVFlQRV9UQUJMRSAoMSA8PCAwKQorI2RlZmluZSBQTURfVFlQRV9TRUNUICgyIDw8IDApCisjZGVmaW5lIFBNRF9CSVQ0ICgxIDw8IDQpCisjZGVmaW5lIFBNRF9ET01BSU4oeCkgKCh4KSA8PCA1KQorI2RlZmluZSBQTURfUFJPVEVDVElPTiAoMSA8PCA5KSAgCisKKyNkZWZpbmUgUE1EX1NFQ1RfQlVGRkVSQUJMRSAoMSA8PCAyKQorI2RlZmluZSBQTURfU0VDVF9DQUNIRUFCTEUgKDEgPDwgMykKKyNkZWZpbmUgUE1EX1NFQ1RfWE4gKDEgPDwgNCkgIAorI2RlZmluZSBQTURfU0VDVF9BUF9XUklURSAoMSA8PCAxMCkKKyNkZWZpbmUgUE1EX1NFQ1RfQVBfUkVBRCAoMSA8PCAxMSkKKyNkZWZpbmUgUE1EX1NFQ1RfVEVYKHgpICgoeCkgPDwgMTIpICAKKyNkZWZpbmUgUE1EX1NFQ1RfQVBYICgxIDw8IDE1KSAgCisjZGVmaW5lIFBNRF9TRUNUX1MgKDEgPDwgMTYpICAKKyNkZWZpbmUgUE1EX1NFQ1RfbkcgKDEgPDwgMTcpICAKKyNkZWZpbmUgUE1EX1NFQ1RfU1VQRVIgKDEgPDwgMTgpICAKKworI2RlZmluZSBQTURfU0VDVF9VTkNBQ0hFRCAoMCkKKyNkZWZpbmUgUE1EX1NFQ1RfQlVGRkVSRUQgKFBNRF9TRUNUX0JVRkZFUkFCTEUpCisjZGVmaW5lIFBNRF9TRUNUX1dUIChQTURfU0VDVF9DQUNIRUFCTEUpCisjZGVmaW5lIFBNRF9TRUNUX1dCIChQTURfU0VDVF9DQUNIRUFCTEUgfCBQTURfU0VDVF9CVUZGRVJBQkxFKQorI2RlZmluZSBQTURfU0VDVF9NSU5JQ0FDSEUgKFBNRF9TRUNUX1RFWCgxKSB8IFBNRF9TRUNUX0NBQ0hFQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfV0JXQSAoUE1EX1NFQ1RfVEVYKDEpIHwgUE1EX1NFQ1RfQ0FDSEVBQkxFIHwgUE1EX1NFQ1RfQlVGRkVSQUJMRSkKKyNkZWZpbmUgUE1EX1NFQ1RfTk9OU0hBUkVEX0RFViAoUE1EX1NFQ1RfVEVYKDIpKQorCisjZGVmaW5lIFBURV9UWVBFX01BU0sgKDMgPDwgMCkKKyNkZWZpbmUgUFRFX1RZUEVfRkFVTFQgKDAgPDwgMCkKKyNkZWZpbmUgUFRFX1RZUEVfTEFSR0UgKDEgPDwgMCkKKyNkZWZpbmUgUFRFX1RZUEVfU01BTEwgKDIgPDwgMCkKKyNkZWZpbmUgUFRFX1RZUEVfRVhUICgzIDw8IDApICAKKyNkZWZpbmUgUFRFX0JVRkZFUkFCTEUgKDEgPDwgMikKKyNkZWZpbmUgUFRFX0NBQ0hFQUJMRSAoMSA8PCAzKQorCisjZGVmaW5lIFBURV9FWFRfWE4gKDEgPDwgMCkgIAorI2RlZmluZSBQVEVfRVhUX0FQX01BU0sgKDMgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9BUDAgKDEgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9BUDEgKDIgPDwgNCkKKyNkZWZpbmUgUFRFX0VYVF9BUF9VTk9fU1JPICgwIDw8IDQpCisjZGVmaW5lIFBURV9FWFRfQVBfVU5PX1NSVyAoUFRFX0VYVF9BUDApCisjZGVmaW5lIFBURV9FWFRfQVBfVVJPX1NSVyAoUFRFX0VYVF9BUDEpCisjZGVmaW5lIFBURV9FWFRfQVBfVVJXX1NSVyAoUFRFX0VYVF9BUDF8UFRFX0VYVF9BUDApCisjZGVmaW5lIFBURV9FWFRfVEVYKHgpICgoeCkgPDwgNikgIAorI2RlZmluZSBQVEVfRVhUX0FQWCAoMSA8PCA5KSAgCisjZGVmaW5lIFBURV9FWFRfQ09IRVJFTlQgKDEgPDwgOSkgIAorI2RlZmluZSBQVEVfRVhUX1NIQVJFRCAoMSA8PCAxMCkgIAorI2RlZmluZSBQVEVfRVhUX05HICgxIDw8IDExKSAgCisKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX01BU0sgKDB4ZmYgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VOT19TUk8gKDB4MDAgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VOT19TUlcgKDB4NTUgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VST19TUlcgKDB4YWEgPDwgNCkKKyNkZWZpbmUgUFRFX1NNQUxMX0FQX1VSV19TUlcgKDB4ZmYgPDwgNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcGd0YWJsZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmFjNjExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BndGFibGUuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fUEdUQUJMRV9ICisjZGVmaW5lIF9BU01BUk1fUEdUQUJMRV9ICisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaD4KKyNpbmNsdWRlIDxhc20vcHJvYy1mbnMuaD4KKworI2luY2x1ZGUgInBndGFibGUtbm9tbXUuaCIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9sbC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BvbGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI4MGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3BvbGwuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNQVJNX1BPTExfSAorI2RlZmluZSBfX0FTTUFSTV9QT0xMX0gKKworI2RlZmluZSBQT0xMSU4gMHgwMDAxCisjZGVmaW5lIFBPTExQUkkgMHgwMDAyCisjZGVmaW5lIFBPTExPVVQgMHgwMDA0CisjZGVmaW5lIFBPTExFUlIgMHgwMDA4CisjZGVmaW5lIFBPTExIVVAgMHgwMDEwCisjZGVmaW5lIFBPTExOVkFMIDB4MDAyMAorCisjZGVmaW5lIFBPTExSRE5PUk0gMHgwMDQwCisjZGVmaW5lIFBPTExSREJBTkQgMHgwMDgwCisjZGVmaW5lIFBPTExXUk5PUk0gMHgwMTAwCisjZGVmaW5lIFBPTExXUkJBTkQgMHgwMjAwCisjZGVmaW5lIFBPTExNU0cgMHgwNDAwCisjZGVmaW5lIFBPTExSRU1PVkUgMHgxMDAwCisjZGVmaW5lIFBPTExSREhVUCAweDIwMDAKKworc3RydWN0IHBvbGxmZCB7CisgaW50IGZkOworIHNob3J0IGV2ZW50czsKKyBzaG9ydCByZXZlbnRzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9zaXhfdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJjODUyMTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVJDSF9BUk1fUE9TSVhfVFlQRVNfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1BPU0lYX1RZUEVTX0gKKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fa2VybmVsX2lub190OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9tb2RlX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX25saW5rX3Q7Cit0eXBlZGVmIGxvbmcgX19rZXJuZWxfb2ZmX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9waWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBjX3BpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9zc2l6ZV90OwordHlwZWRlZiBpbnQgX19rZXJuZWxfcHRyZGlmZl90OwordHlwZWRlZiBsb25nIF9fa2VybmVsX3RpbWVfdDsKK3R5cGVkZWYgbG9uZyBfX2tlcm5lbF9zdXNlY29uZHNfdDsKK3R5cGVkZWYgbG9uZyBfX2tlcm5lbF9jbG9ja190OwordHlwZWRlZiBpbnQgX19rZXJuZWxfdGltZXJfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX2Nsb2NraWRfdDsKK3R5cGVkZWYgaW50IF9fa2VybmVsX2RhZGRyX3Q7Cit0eXBlZGVmIGNoYXIgKiBfX2tlcm5lbF9jYWRkcl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9naWQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfdWlkMzJfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX2dpZDMyX3Q7CisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfb2xkX3VpZF90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF9kZXZfdDsKKworI2lmZGVmIF9fR05VQ19fCit0eXBlZGVmIGxvbmcgbG9uZyBfX2tlcm5lbF9sb2ZmX3Q7CisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworI2lmZGVmIF9fVVNFX0FMTAorIGludCB2YWxbMl07CisjZWxzZQorIGludCBfX3ZhbFsyXTsKKyNlbmRpZgorfSBfX2tlcm5lbF9mc2lkX3Q7CisKKyNpZiAhZGVmaW5lZChfX0dMSUJDX18pIHx8IF9fR0xJQkNfXyA8IDIKKworI3VuZGVmIF9fRkRfU0VUCisjZGVmaW5lIF9fRkRfU0VUKGZkLCBmZHNldHApICAgKCgoZmRfc2V0ICopKGZkc2V0cCkpLT5mZHNfYml0c1soZmQpID4+IDVdIHw9ICgxPDwoKGZkKSAmIDMxKSkpCisKKyN1bmRlZiBfX0ZEX0NMUgorI2RlZmluZSBfX0ZEX0NMUihmZCwgZmRzZXRwKSAgICgoKGZkX3NldCAqKShmZHNldHApKS0+ZmRzX2JpdHNbKGZkKSA+PiA1XSAmPSB+KDE8PCgoZmQpICYgMzEpKSkKKworI3VuZGVmIF9fRkRfSVNTRVQKKyNkZWZpbmUgX19GRF9JU1NFVChmZCwgZmRzZXRwKSAgICgoKChmZF9zZXQgKikoZmRzZXRwKSktPmZkc19iaXRzWyhmZCkgPj4gNV0gJiAoMTw8KChmZCkgJiAzMSkpKSAhPSAwKQorCisjdW5kZWYgX19GRF9aRVJPCisjZGVmaW5lIF9fRkRfWkVSTyhmZHNldHApICAgKG1lbXNldCAoZmRzZXRwLCAwLCBzaXplb2YgKCooZmRfc2V0ICopKGZkc2V0cCkpKSkKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2MtZm5zLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvYy1mbnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YTU2MGQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2MtZm5zLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9QUk9DRk5TX0gKKyNkZWZpbmUgX19BU01fUFJPQ0ZOU19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2Nlc3Nvci5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2Nlc3Nvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5M2NiYzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2Vzc29yLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fUFJPQ0VTU09SX0gKKyNkZWZpbmUgX19BU01fQVJNX1BST0NFU1NPUl9ICisKKyNkZWZpbmUgY3VycmVudF90ZXh0X2FkZHIoKSAoeyBfX2xhYmVsX18gX2w7IF9sOiAmJl9sO30pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2NpbmZvLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHJvY2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzc0ZTBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Byb2NpbmZvLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9QUk9DSU5GT19ICisjZGVmaW5lIF9fQVNNX1BST0NJTkZPX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IGNwdV90bGJfZm5zOworc3RydWN0IGNwdV91c2VyX2ZuczsKK3N0cnVjdCBjcHVfY2FjaGVfZm5zOworc3RydWN0IHByb2Nlc3NvcjsKKworc3RydWN0IHByb2NfaW5mb19saXN0IHsKKyB1bnNpZ25lZCBpbnQgY3B1X3ZhbDsKKyB1bnNpZ25lZCBpbnQgY3B1X21hc2s7CisgdW5zaWduZWQgbG9uZyBfX2NwdV9tbV9tbXVfZmxhZ3M7CisgdW5zaWduZWQgbG9uZyBfX2NwdV9pb19tbXVfZmxhZ3M7CisgdW5zaWduZWQgbG9uZyBfX2NwdV9mbHVzaDsKKyBjb25zdCBjaGFyICphcmNoX25hbWU7CisgY29uc3QgY2hhciAqZWxmX25hbWU7CisgdW5zaWduZWQgaW50IGVsZl9od2NhcDsKKyBjb25zdCBjaGFyICpjcHVfbmFtZTsKKyBzdHJ1Y3QgcHJvY2Vzc29yICpwcm9jOworIHN0cnVjdCBjcHVfdGxiX2ZucyAqdGxiOworIHN0cnVjdCBjcHVfdXNlcl9mbnMgKnVzZXI7Cisgc3RydWN0IGNwdV9jYWNoZV9mbnMgKmNhY2hlOworfTsKKworI2VuZGlmCisKKyNkZWZpbmUgSFdDQVBfU1dQIDEKKyNkZWZpbmUgSFdDQVBfSEFMRiAyCisjZGVmaW5lIEhXQ0FQX1RIVU1CIDQKKyNkZWZpbmUgSFdDQVBfMjZCSVQgOCAgCisjZGVmaW5lIEhXQ0FQX0ZBU1RfTVVMVCAxNgorI2RlZmluZSBIV0NBUF9GUEEgMzIKKyNkZWZpbmUgSFdDQVBfVkZQIDY0CisjZGVmaW5lIEhXQ0FQX0VEU1AgMTI4CisjZGVmaW5lIEhXQ0FQX0pBVkEgMjU2CisjZGVmaW5lIEhXQ0FQX0lXTU1YVCA1MTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHRyYWNlLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzZkZmVhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9wdHJhY2UuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9QVFJBQ0VfSAorI2RlZmluZSBfX0FTTV9BUk1fUFRSQUNFX0gKKworI2RlZmluZSBQVFJBQ0VfR0VUUkVHUyAxMgorI2RlZmluZSBQVFJBQ0VfU0VUUkVHUyAxMworI2RlZmluZSBQVFJBQ0VfR0VURlBSRUdTIDE0CisjZGVmaW5lIFBUUkFDRV9TRVRGUFJFR1MgMTUKKworI2RlZmluZSBQVFJBQ0VfR0VUV01NWFJFR1MgMTgKKyNkZWZpbmUgUFRSQUNFX1NFVFdNTVhSRUdTIDE5CisKKyNkZWZpbmUgUFRSQUNFX09MRFNFVE9QVElPTlMgMjEKKworI2RlZmluZSBQVFJBQ0VfR0VUX1RIUkVBRF9BUkVBIDIyCisKKyNkZWZpbmUgUFRSQUNFX1NFVF9TWVNDQUxMIDIzCisKKyNkZWZpbmUgUFRSQUNFX0dFVENSVU5DSFJFR1MgMjUKKyNkZWZpbmUgUFRSQUNFX1NFVENSVU5DSFJFR1MgMjYKKworI2RlZmluZSBVU1IyNl9NT0RFIDB4MDAwMDAwMDAKKyNkZWZpbmUgRklRMjZfTU9ERSAweDAwMDAwMDAxCisjZGVmaW5lIElSUTI2X01PREUgMHgwMDAwMDAwMgorI2RlZmluZSBTVkMyNl9NT0RFIDB4MDAwMDAwMDMKKyNkZWZpbmUgVVNSX01PREUgMHgwMDAwMDAxMAorI2RlZmluZSBGSVFfTU9ERSAweDAwMDAwMDExCisjZGVmaW5lIElSUV9NT0RFIDB4MDAwMDAwMTIKKyNkZWZpbmUgU1ZDX01PREUgMHgwMDAwMDAxMworI2RlZmluZSBBQlRfTU9ERSAweDAwMDAwMDE3CisjZGVmaW5lIFVORF9NT0RFIDB4MDAwMDAwMWIKKyNkZWZpbmUgU1lTVEVNX01PREUgMHgwMDAwMDAxZgorI2RlZmluZSBNT0RFMzJfQklUIDB4MDAwMDAwMTAKKyNkZWZpbmUgTU9ERV9NQVNLIDB4MDAwMDAwMWYKKyNkZWZpbmUgUFNSX1RfQklUIDB4MDAwMDAwMjAKKyNkZWZpbmUgUFNSX0ZfQklUIDB4MDAwMDAwNDAKKyNkZWZpbmUgUFNSX0lfQklUIDB4MDAwMDAwODAKKyNkZWZpbmUgUFNSX0pfQklUIDB4MDEwMDAwMDAKKyNkZWZpbmUgUFNSX1FfQklUIDB4MDgwMDAwMDAKKyNkZWZpbmUgUFNSX1ZfQklUIDB4MTAwMDAwMDAKKyNkZWZpbmUgUFNSX0NfQklUIDB4MjAwMDAwMDAKKyNkZWZpbmUgUFNSX1pfQklUIDB4NDAwMDAwMDAKKyNkZWZpbmUgUFNSX05fQklUIDB4ODAwMDAwMDAKKyNkZWZpbmUgUENNQVNLIDAKKworI2RlZmluZSBQU1JfZiAweGZmMDAwMDAwICAKKyNkZWZpbmUgUFNSX3MgMHgwMGZmMDAwMCAgCisjZGVmaW5lIFBTUl94IDB4MDAwMGZmMDAgIAorI2RlZmluZSBQU1JfYyAweDAwMDAwMGZmICAKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworc3RydWN0IHB0X3JlZ3MgeworIGxvbmcgdXJlZ3NbMThdOworfTsKKworI2RlZmluZSBBUk1fY3BzciB1cmVnc1sxNl0KKyNkZWZpbmUgQVJNX3BjIHVyZWdzWzE1XQorI2RlZmluZSBBUk1fbHIgdXJlZ3NbMTRdCisjZGVmaW5lIEFSTV9zcCB1cmVnc1sxM10KKyNkZWZpbmUgQVJNX2lwIHVyZWdzWzEyXQorI2RlZmluZSBBUk1fZnAgdXJlZ3NbMTFdCisjZGVmaW5lIEFSTV9yMTAgdXJlZ3NbMTBdCisjZGVmaW5lIEFSTV9yOSB1cmVnc1s5XQorI2RlZmluZSBBUk1fcjggdXJlZ3NbOF0KKyNkZWZpbmUgQVJNX3I3IHVyZWdzWzddCisjZGVmaW5lIEFSTV9yNiB1cmVnc1s2XQorI2RlZmluZSBBUk1fcjUgdXJlZ3NbNV0KKyNkZWZpbmUgQVJNX3I0IHVyZWdzWzRdCisjZGVmaW5lIEFSTV9yMyB1cmVnc1szXQorI2RlZmluZSBBUk1fcjIgdXJlZ3NbMl0KKyNkZWZpbmUgQVJNX3IxIHVyZWdzWzFdCisjZGVmaW5lIEFSTV9yMCB1cmVnc1swXQorI2RlZmluZSBBUk1fT1JJR19yMCB1cmVnc1sxN10KKworI2RlZmluZSBwY19wb2ludGVyKHYpICAgKCh2KSAmIH5QQ01BU0spCisKKyNkZWZpbmUgaW5zdHJ1Y3Rpb25fcG9pbnRlcihyZWdzKSAgIChwY19wb2ludGVyKChyZWdzKS0+QVJNX3BjKSkKKworI2RlZmluZSBwcm9maWxlX3BjKHJlZ3MpIGluc3RydWN0aW9uX3BvaW50ZXIocmVncykKKworI2VuZGlmCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcmVzb3VyY2UuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9yZXNvdXJjZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1NDZkZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vcmVzb3VyY2UuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BUk1fUkVTT1VSQ0VfSAorI2RlZmluZSBfQVJNX1JFU09VUkNFX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3Jlc291cmNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NjYXR0ZXJsaXN0LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2NhdHRlcmxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmMwNmNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NjYXR0ZXJsaXN0LmgKQEAgLTAsMCArMSwyOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NDQVRURVJMSVNUX0gKKyNkZWZpbmUgX0FTTUFSTV9TQ0FUVEVSTElTVF9ICisKKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBzY2F0dGVybGlzdCB7Cisgc3RydWN0IHBhZ2UgKnBhZ2U7CisgdW5zaWduZWQgaW50IG9mZnNldDsKKyBkbWFfYWRkcl90IGRtYV9hZGRyZXNzOworIHVuc2lnbmVkIGludCBsZW5ndGg7Cit9OworCisjZGVmaW5lIHNnX2RtYV9hZGRyZXNzKHNnKSAoKHNnKS0+ZG1hX2FkZHJlc3MpCisjZGVmaW5lIHNnX2RtYV9sZW4oc2cpICgoc2cpLT5sZW5ndGgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWFwaG9yZS5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NlbWFwaG9yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNTYxOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYXBob3JlLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fU0VNQVBIT1JFX0gKKyNkZWZpbmUgX19BU01fQVJNX1NFTUFQSE9SRV9ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vbG9ja3MuaD4KKworc3RydWN0IHNlbWFwaG9yZSB7CisgYXRvbWljX3QgY291bnQ7CisgaW50IHNsZWVwZXJzOworIHdhaXRfcXVldWVfaGVhZF90IHdhaXQ7Cit9OworCisjZGVmaW5lIF9fU0VNQVBIT1JFX0lOSVQobmFtZSwgY250KSAgeyAgIC5jb3VudCA9IEFUT01JQ19JTklUKGNudCksICAgLndhaXQgPSBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigobmFtZSkud2FpdCksICB9CisKKyNkZWZpbmUgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsY291bnQpICAgc3RydWN0IHNlbWFwaG9yZSBuYW1lID0gX19TRU1BUEhPUkVfSU5JVChuYW1lLGNvdW50KQorCisjZGVmaW5lIERFQ0xBUkVfTVVURVgobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMSkKKyNkZWZpbmUgREVDTEFSRV9NVVRFWF9MT0NLRUQobmFtZSkgX19ERUNMQVJFX1NFTUFQSE9SRV9HRU5FUklDKG5hbWUsMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYnVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2VtYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTJmNWRkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zZW1idWYuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0VNQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9TRU1CVUZfSAorCitzdHJ1Y3Qgc2VtaWQ2NF9kcyB7Cisgc3RydWN0IGlwYzY0X3Blcm0gc2VtX3Blcm07CisgX19rZXJuZWxfdGltZV90IHNlbV9vdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyBfX2tlcm5lbF90aW1lX3Qgc2VtX2N0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQyOworIHVuc2lnbmVkIGxvbmcgc2VtX25zZW1zOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQzOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htYnVmLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htYnVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQ0ZDc4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaG1idWYuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0hNQlVGX0gKKyNkZWZpbmUgX0FTTUFSTV9TSE1CVUZfSAorCitzdHJ1Y3Qgc2htaWQ2NF9kcyB7Cisgc3RydWN0IGlwYzY0X3Blcm0gc2htX3Blcm07Cisgc2l6ZV90IHNobV9zZWdzejsKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2F0aW1lOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOworIF9fa2VybmVsX3RpbWVfdCBzaG1fZHRpbWU7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CisgX19rZXJuZWxfdGltZV90IHNobV9jdGltZTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyBfX2tlcm5lbF9waWRfdCBzaG1fY3BpZDsKKyBfX2tlcm5lbF9waWRfdCBzaG1fbHBpZDsKKyB1bnNpZ25lZCBsb25nIHNobV9uYXR0Y2g7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDQ7CisgdW5zaWduZWQgbG9uZyBfX3VudXNlZDU7Cit9OworCitzdHJ1Y3Qgc2htaW5mbzY0IHsKKyB1bnNpZ25lZCBsb25nIHNobW1heDsKKyB1bnNpZ25lZCBsb25nIHNobW1pbjsKKyB1bnNpZ25lZCBsb25nIHNobW1uaTsKKyB1bnNpZ25lZCBsb25nIHNobXNlZzsKKyB1bnNpZ25lZCBsb25nIHNobWFsbDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMTsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NobXBhcmFtLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2htcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTUzYThkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NobXBhcmFtLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NITVBBUkFNX0gKKyNkZWZpbmUgX0FTTUFSTV9TSE1QQVJBTV9ICisKKyNkZWZpbmUgU0hNTEJBICg0ICogUEFHRV9TSVpFKSAgCisKKyNkZWZpbmUgX19BUkNIX0ZPUkNFX1NITUxCQQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdjb250ZXh0LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnY29udGV4dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNGZjZjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2lnY29udGV4dC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TSUdDT05URVhUX0gKKyNkZWZpbmUgX0FTTUFSTV9TSUdDT05URVhUX0gKKworc3RydWN0IHNpZ2NvbnRleHQgeworIHVuc2lnbmVkIGxvbmcgdHJhcF9ubzsKKyB1bnNpZ25lZCBsb25nIGVycm9yX2NvZGU7CisgdW5zaWduZWQgbG9uZyBvbGRtYXNrOworIHVuc2lnbmVkIGxvbmcgYXJtX3IwOworIHVuc2lnbmVkIGxvbmcgYXJtX3IxOworIHVuc2lnbmVkIGxvbmcgYXJtX3IyOworIHVuc2lnbmVkIGxvbmcgYXJtX3IzOworIHVuc2lnbmVkIGxvbmcgYXJtX3I0OworIHVuc2lnbmVkIGxvbmcgYXJtX3I1OworIHVuc2lnbmVkIGxvbmcgYXJtX3I2OworIHVuc2lnbmVkIGxvbmcgYXJtX3I3OworIHVuc2lnbmVkIGxvbmcgYXJtX3I4OworIHVuc2lnbmVkIGxvbmcgYXJtX3I5OworIHVuc2lnbmVkIGxvbmcgYXJtX3IxMDsKKyB1bnNpZ25lZCBsb25nIGFybV9mcDsKKyB1bnNpZ25lZCBsb25nIGFybV9pcDsKKyB1bnNpZ25lZCBsb25nIGFybV9zcDsKKyB1bnNpZ25lZCBsb25nIGFybV9scjsKKyB1bnNpZ25lZCBsb25nIGFybV9wYzsKKyB1bnNpZ25lZCBsb25nIGFybV9jcHNyOworIHVuc2lnbmVkIGxvbmcgZmF1bHRfYWRkcmVzczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ2luZm8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdpbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI1Njg1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWdpbmZvLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1NJR0lORk9fSAorI2RlZmluZSBfQVNNQVJNX1NJR0lORk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvc2lnaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWduYWwuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaWduYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMTJkOWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NpZ25hbC5oCkBAIC0wLDAgKzEsMTAzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU0lHTkFMX0gKKyNkZWZpbmUgX0FTTUFSTV9TSUdOQUxfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHNpZ2luZm87CisKKyNkZWZpbmUgTlNJRyAzMgordHlwZWRlZiB1bnNpZ25lZCBsb25nIHNpZ3NldF90OworCisjZGVmaW5lIFNJR0hVUCAxCisjZGVmaW5lIFNJR0lOVCAyCisjZGVmaW5lIFNJR1FVSVQgMworI2RlZmluZSBTSUdJTEwgNAorI2RlZmluZSBTSUdUUkFQIDUKKyNkZWZpbmUgU0lHQUJSVCA2CisjZGVmaW5lIFNJR0lPVCA2CisjZGVmaW5lIFNJR0JVUyA3CisjZGVmaW5lIFNJR0ZQRSA4CisjZGVmaW5lIFNJR0tJTEwgOQorI2RlZmluZSBTSUdVU1IxIDEwCisjZGVmaW5lIFNJR1NFR1YgMTEKKyNkZWZpbmUgU0lHVVNSMiAxMgorI2RlZmluZSBTSUdQSVBFIDEzCisjZGVmaW5lIFNJR0FMUk0gMTQKKyNkZWZpbmUgU0lHVEVSTSAxNQorI2RlZmluZSBTSUdTVEtGTFQgMTYKKyNkZWZpbmUgU0lHQ0hMRCAxNworI2RlZmluZSBTSUdDT05UIDE4CisjZGVmaW5lIFNJR1NUT1AgMTkKKyNkZWZpbmUgU0lHVFNUUCAyMAorI2RlZmluZSBTSUdUVElOIDIxCisjZGVmaW5lIFNJR1RUT1UgMjIKKyNkZWZpbmUgU0lHVVJHIDIzCisjZGVmaW5lIFNJR1hDUFUgMjQKKyNkZWZpbmUgU0lHWEZTWiAyNQorI2RlZmluZSBTSUdWVEFMUk0gMjYKKyNkZWZpbmUgU0lHUFJPRiAyNworI2RlZmluZSBTSUdXSU5DSCAyOAorI2RlZmluZSBTSUdJTyAyOQorI2RlZmluZSBTSUdQT0xMIFNJR0lPCisKKyNkZWZpbmUgU0lHUFdSIDMwCisjZGVmaW5lIFNJR1NZUyAzMQorI2RlZmluZSBTSUdVTlVTRUQgMzEKKworI2RlZmluZSBTSUdSVE1JTiAzMgorI2RlZmluZSBTSUdSVE1BWCBfTlNJRworCisjZGVmaW5lIFNJR1NXSSAzMgorCisjZGVmaW5lIFNBX05PQ0xEU1RPUCAweDAwMDAwMDAxCisjZGVmaW5lIFNBX05PQ0xEV0FJVCAweDAwMDAwMDAyCisjZGVmaW5lIFNBX1NJR0lORk8gMHgwMDAwMDAwNAorI2RlZmluZSBTQV9USElSVFlUV08gMHgwMjAwMDAwMAorI2RlZmluZSBTQV9SRVNUT1JFUiAweDA0MDAwMDAwCisjZGVmaW5lIFNBX09OU1RBQ0sgMHgwODAwMDAwMAorI2RlZmluZSBTQV9SRVNUQVJUIDB4MTAwMDAwMDAKKyNkZWZpbmUgU0FfTk9ERUZFUiAweDQwMDAwMDAwCisjZGVmaW5lIFNBX1JFU0VUSEFORCAweDgwMDAwMDAwCisKKyNkZWZpbmUgU0FfTk9NQVNLIFNBX05PREVGRVIKKyNkZWZpbmUgU0FfT05FU0hPVCBTQV9SRVNFVEhBTkQKKworI2RlZmluZSBTU19PTlNUQUNLIDEKKyNkZWZpbmUgU1NfRElTQUJMRSAyCisKKyNkZWZpbmUgTUlOU0lHU1RLU1ogMjA0OAorI2RlZmluZSBTSUdTVEtTWiA4MTkyCisKKyNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zaWduYWwuaD4KKworc3RydWN0IHNpZ2FjdGlvbiB7CisgdW5pb24geworIF9fc2lnaGFuZGxlcl90IF9zYV9oYW5kbGVyOworIHZvaWQgKCpfc2Ffc2lnYWN0aW9uKShpbnQsIHN0cnVjdCBzaWdpbmZvICosIHZvaWQgKik7CisgfSBfdTsKKyBzaWdzZXRfdCBzYV9tYXNrOworIHVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7Cisgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKK307CisKKyNkZWZpbmUgc2FfaGFuZGxlciBfdS5fc2FfaGFuZGxlcgorI2RlZmluZSBzYV9zaWdhY3Rpb24gX3UuX3NhX3NpZ2FjdGlvbgorCit0eXBlZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7Cisgdm9pZCBfX3VzZXIgKnNzX3NwOworIGludCBzc19mbGFnczsKKyBzaXplX3Qgc3Nfc2l6ZTsKK30gc3RhY2tfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2l6ZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zaXplcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkwYzFjNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc2l6ZXMuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fc2l6ZXNfaAorI2RlZmluZSBfX3NpemVzX2ggMQorCisjZGVmaW5lIFNaXzFLIDB4MDAwMDA0MDAKKyNkZWZpbmUgU1pfNEsgMHgwMDAwMTAwMAorI2RlZmluZSBTWl84SyAweDAwMDAyMDAwCisjZGVmaW5lIFNaXzE2SyAweDAwMDA0MDAwCisjZGVmaW5lIFNaXzY0SyAweDAwMDEwMDAwCisjZGVmaW5lIFNaXzEyOEsgMHgwMDAyMDAwMAorI2RlZmluZSBTWl8yNTZLIDB4MDAwNDAwMDAKKyNkZWZpbmUgU1pfNTEySyAweDAwMDgwMDAwCisKKyNkZWZpbmUgU1pfMU0gMHgwMDEwMDAwMAorI2RlZmluZSBTWl8yTSAweDAwMjAwMDAwCisjZGVmaW5lIFNaXzRNIDB4MDA0MDAwMDAKKyNkZWZpbmUgU1pfOE0gMHgwMDgwMDAwMAorI2RlZmluZSBTWl8xNk0gMHgwMTAwMDAwMAorI2RlZmluZSBTWl8zMk0gMHgwMjAwMDAwMAorI2RlZmluZSBTWl82NE0gMHgwNDAwMDAwMAorI2RlZmluZSBTWl8xMjhNIDB4MDgwMDAwMDAKKyNkZWZpbmUgU1pfMjU2TSAweDEwMDAwMDAwCisjZGVmaW5lIFNaXzUxMk0gMHgyMDAwMDAwMAorCisjZGVmaW5lIFNaXzFHIDB4NDAwMDAwMDAKKyNkZWZpbmUgU1pfMkcgMHg4MDAwMDAwMAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NtcC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2YzFlNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc21wLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fU01QX0gKKyNkZWZpbmUgX19BU01fQVJNX1NNUF9ICisKKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisKKyNpbmNsdWRlIDxhc20vYXJjaC9zbXAuaD4KKworI2Vycm9yICI8YXNtLWFybS9zbXAuaD4gaW5jbHVkZWQgaW4gbm9uLVNNUCBidWlsZCIKKworI2RlZmluZSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpIChjdXJyZW50X3RocmVhZF9pbmZvKCktPmNwdSkKKworI2RlZmluZSBQUk9DX0NIQU5HRV9QRU5BTFRZIDE1CisKK3N0cnVjdCBzZXFfZmlsZTsKKworc3RydWN0IHNlY29uZGFyeV9kYXRhIHsKKyB1bnNpZ25lZCBsb25nIHBnZGlyOworIHZvaWQgKnN0YWNrOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc29ja2V0LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYwMDUwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NrZXQuaApAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01BUk1fU09DS0VUX0gKKyNkZWZpbmUgX0FTTUFSTV9TT0NLRVRfSAorCisjaW5jbHVkZSA8YXNtL3NvY2tpb3MuaD4KKworI2RlZmluZSBTT0xfU09DS0VUIDEKKworI2RlZmluZSBTT19ERUJVRyAxCisjZGVmaW5lIFNPX1JFVVNFQUREUiAyCisjZGVmaW5lIFNPX1RZUEUgMworI2RlZmluZSBTT19FUlJPUiA0CisjZGVmaW5lIFNPX0RPTlRST1VURSA1CisjZGVmaW5lIFNPX0JST0FEQ0FTVCA2CisjZGVmaW5lIFNPX1NOREJVRiA3CisjZGVmaW5lIFNPX1JDVkJVRiA4CisjZGVmaW5lIFNPX1NOREJVRkZPUkNFIDMyCisjZGVmaW5lIFNPX1JDVkJVRkZPUkNFIDMzCisjZGVmaW5lIFNPX0tFRVBBTElWRSA5CisjZGVmaW5lIFNPX09PQklOTElORSAxMAorI2RlZmluZSBTT19OT19DSEVDSyAxMQorI2RlZmluZSBTT19QUklPUklUWSAxMgorI2RlZmluZSBTT19MSU5HRVIgMTMKKyNkZWZpbmUgU09fQlNEQ09NUEFUIDE0CisKKyNkZWZpbmUgU09fUEFTU0NSRUQgMTYKKyNkZWZpbmUgU09fUEVFUkNSRUQgMTcKKyNkZWZpbmUgU09fUkNWTE9XQVQgMTgKKyNkZWZpbmUgU09fU05ETE9XQVQgMTkKKyNkZWZpbmUgU09fUkNWVElNRU8gMjAKKyNkZWZpbmUgU09fU05EVElNRU8gMjEKKworI2RlZmluZSBTT19TRUNVUklUWV9BVVRIRU5USUNBVElPTiAyMgorI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX1RSQU5TUE9SVCAyMworI2RlZmluZSBTT19TRUNVUklUWV9FTkNSWVBUSU9OX05FVFdPUksgMjQKKworI2RlZmluZSBTT19CSU5EVE9ERVZJQ0UgMjUKKworI2RlZmluZSBTT19BVFRBQ0hfRklMVEVSIDI2CisjZGVmaW5lIFNPX0RFVEFDSF9GSUxURVIgMjcKKworI2RlZmluZSBTT19QRUVSTkFNRSAyOAorI2RlZmluZSBTT19USU1FU1RBTVAgMjkKKyNkZWZpbmUgU0NNX1RJTUVTVEFNUCBTT19USU1FU1RBTVAKKworI2RlZmluZSBTT19BQ0NFUFRDT05OIDMwCisKKyNkZWZpbmUgU09fUEVFUlNFQyAzMQorI2RlZmluZSBTT19QQVNTU0VDIDM0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NvY2tpb3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NraW9zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2FiODZiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zb2NraW9zLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAorI2RlZmluZSBfX0FSQ0hfQVJNX1NPQ0tJT1NfSAorCisjZGVmaW5lIEZJT1NFVE9XTiAweDg5MDEKKyNkZWZpbmUgU0lPQ1NQR1JQIDB4ODkwMgorI2RlZmluZSBGSU9HRVRPV04gMHg4OTAzCisjZGVmaW5lIFNJT0NHUEdSUCAweDg5MDQKKyNkZWZpbmUgU0lPQ0FUTUFSSyAweDg5MDUKKyNkZWZpbmUgU0lPQ0dTVEFNUCAweDg5MDYgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9jay5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3NwaW5sb2NrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FlMjE3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9jay5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fU1BJTkxPQ0tfSAorI2RlZmluZSBfX0FTTV9TUElOTE9DS19ICisKKyNpZiBfX0xJTlVYX0FSTV9BUkNIX18gPCA2CisjZXJyb3IgU01QIG5vdCBzdXBwb3J0ZWQgb24gcHJlLUFSTXY2IENQVXMKKyNlbmRpZgorCisjZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKHgpICgoeCktPmxvY2sgIT0gMCkKKyNkZWZpbmUgX19yYXdfc3Bpbl91bmxvY2tfd2FpdChsb2NrKSAgIGRvIHsgd2hpbGUgKF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spKSBjcHVfcmVsYXgoKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX3Jhd19zcGluX2xvY2tfZmxhZ3MobG9jaywgZmxhZ3MpIF9fcmF3X3NwaW5fbG9jayhsb2NrKQorCisjZGVmaW5lIHJ3bG9ja19pc19sb2NrZWQoeCkgKCooKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSh4KSkgIT0gMCkKKyNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2soeCkgKCh4KS0+bG9jayA9PSAweDgwMDAwMDAwKQorI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKHgpICgoeCktPmxvY2sgPCAweDgwMDAwMDAwKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2tfdHlwZXMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zcGlubG9ja190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNzdmMjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3BpbmxvY2tfdHlwZXMuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX1NQSU5MT0NLX1RZUEVTX0gKKyNkZWZpbmUgX19BU01fU1BJTkxPQ0tfVFlQRVNfSAorCisjaWZuZGVmIF9fTElOVVhfU1BJTkxPQ0tfVFlQRVNfSAorI2Vycm9yICJwbGVhc2UgZG9uJ3QgaW5jbHVkZSB0aGlzIGZpbGUgZGlyZWN0bHkiCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeworIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworfSByYXdfc3BpbmxvY2tfdDsKKworI2RlZmluZSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQgeyAwIH0KKwordHlwZWRlZiBzdHJ1Y3QgeworIHZvbGF0aWxlIHVuc2lnbmVkIGludCBsb2NrOworfSByYXdfcndsb2NrX3Q7CisKKyNkZWZpbmUgX19SQVdfUldfTE9DS19VTkxPQ0tFRCB7IDAgfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5Yjg1ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3RhdC5oCkBAIC0wLDAgKzEsOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TVEFUX0gKKyNkZWZpbmUgX0FTTUFSTV9TVEFUX0gKKworc3RydWN0IF9fb2xkX2tlcm5lbF9zdGF0IHsKKyB1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisgdW5zaWduZWQgc2hvcnQgc3RfaW5vOworIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisgdW5zaWduZWQgc2hvcnQgc3RfdWlkOworIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKyB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworIHVuc2lnbmVkIGxvbmcgc3Rfc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9jdGltZTsKK307CisKKyNkZWZpbmUgU1RBVF9IQVZFX05TRUMgCisKK3N0cnVjdCBzdGF0IHsKKyNpZmRlZiBfX0FSTUVCX18KKyB1bnNpZ25lZCBzaG9ydCBzdF9kZXY7CisgdW5zaWduZWQgc2hvcnQgX19wYWQxOworI2Vsc2UKKyB1bnNpZ25lZCBsb25nIHN0X2RldjsKKyNlbmRpZgorIHVuc2lnbmVkIGxvbmcgc3RfaW5vOworIHVuc2lnbmVkIHNob3J0IHN0X21vZGU7CisgdW5zaWduZWQgc2hvcnQgc3Rfbmxpbms7CisgdW5zaWduZWQgc2hvcnQgc3RfdWlkOworIHVuc2lnbmVkIHNob3J0IHN0X2dpZDsKKyNpZmRlZiBfX0FSTUVCX18KKyB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OworIHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKKyNlbHNlCisgdW5zaWduZWQgbG9uZyBzdF9yZGV2OworI2VuZGlmCisgdW5zaWduZWQgbG9uZyBzdF9zaXplOworIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0X2Jsb2NrczsKKyB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWVfbnNlYzsKKyB1bnNpZ25lZCBsb25nIHN0X210aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWVfbnNlYzsKKyB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKKyB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKK307CisKK3N0cnVjdCBzdGF0NjQgeworIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9kZXY7CisgdW5zaWduZWQgY2hhciBfX3BhZDBbNF07CisKKyNkZWZpbmUgU1RBVDY0X0hBU19CUk9LRU5fU1RfSU5PIDEKKyB1bnNpZ25lZCBsb25nIF9fc3RfaW5vOworIHVuc2lnbmVkIGludCBzdF9tb2RlOworIHVuc2lnbmVkIGludCBzdF9ubGluazsKKworIHVuc2lnbmVkIGxvbmcgc3RfdWlkOworIHVuc2lnbmVkIGxvbmcgc3RfZ2lkOworCisgdW5zaWduZWQgbG9uZyBsb25nIHN0X3JkZXY7CisgdW5zaWduZWQgY2hhciBfX3BhZDNbNF07CisKKyBsb25nIGxvbmcgc3Rfc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHN0X2Jsa3NpemU7CisgdW5zaWduZWQgbG9uZyBsb25nIHN0X2Jsb2NrczsKKworIHVuc2lnbmVkIGxvbmcgc3RfYXRpbWU7CisgdW5zaWduZWQgbG9uZyBzdF9hdGltZV9uc2VjOworCisgdW5zaWduZWQgbG9uZyBzdF9tdGltZTsKKyB1bnNpZ25lZCBsb25nIHN0X210aW1lX25zZWM7CisKKyB1bnNpZ25lZCBsb25nIHN0X2N0aW1lOworIHVuc2lnbmVkIGxvbmcgc3RfY3RpbWVfbnNlYzsKKworIHVuc2lnbmVkIGxvbmcgbG9uZyBzdF9pbm87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0ZnMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdGF0ZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43OTYzZWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3N0YXRmcy5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TVEFURlNfSAorI2RlZmluZSBfQVNNQVJNX1NUQVRGU19ICisKK3N0cnVjdCBzdGF0ZnMgeworIF9fdTMyIGZfdHlwZTsKKyBfX3UzMiBmX2JzaXplOworIF9fdTMyIGZfYmxvY2tzOworIF9fdTMyIGZfYmZyZWU7CisgX191MzIgZl9iYXZhaWw7CisgX191MzIgZl9maWxlczsKKyBfX3UzMiBmX2ZmcmVlOworIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisgX191MzIgZl9uYW1lbGVuOworIF9fdTMyIGZfZnJzaXplOworIF9fdTMyIGZfc3BhcmVbNV07Cit9OworCitzdHJ1Y3Qgc3RhdGZzNjQgeworIF9fdTMyIGZfdHlwZTsKKyBfX3UzMiBmX2JzaXplOworIF9fdTY0IGZfYmxvY2tzOworIF9fdTY0IGZfYmZyZWU7CisgX191NjQgZl9iYXZhaWw7CisgX191NjQgZl9maWxlczsKKyBfX3U2NCBmX2ZmcmVlOworIF9fa2VybmVsX2ZzaWRfdCBmX2ZzaWQ7CisgX191MzIgZl9uYW1lbGVuOworIF9fdTMyIGZfZnJzaXplOworIF9fdTMyIGZfc3BhcmVbNV07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQsYWxpZ25lZCg0KSkpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zdXNwZW5kLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3VzcGVuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NmMxNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3VzcGVuZC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTUFSTV9TVVNQRU5EX0gKKyNkZWZpbmUgX0FTTUFSTV9TVVNQRU5EX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3lzdGVtLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vc3lzdGVtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGU4NTAzOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS9zeXN0ZW0uaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9TWVNURU1fSAorI2RlZmluZSBfX0FTTV9BUk1fU1lTVEVNX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWJpdHMuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90ZXJtYml0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0MGJkMjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWJpdHMuaApAQCAtMCwwICsxLDE3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fVEVSTUJJVFNfSAorI2RlZmluZSBfX0FTTV9BUk1fVEVSTUJJVFNfSAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgY2NfdDsKK3R5cGVkZWYgdW5zaWduZWQgaW50IHNwZWVkX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB0Y2ZsYWdfdDsKKworI2RlZmluZSBOQ0NTIDE5CitzdHJ1Y3QgdGVybWlvcyB7CisgdGNmbGFnX3QgY19pZmxhZzsKKyB0Y2ZsYWdfdCBjX29mbGFnOworIHRjZmxhZ190IGNfY2ZsYWc7CisgdGNmbGFnX3QgY19sZmxhZzsKKyBjY190IGNfbGluZTsKKyBjY190IGNfY2NbTkNDU107Cit9OworCisjZGVmaW5lIFZJTlRSIDAKKyNkZWZpbmUgVlFVSVQgMQorI2RlZmluZSBWRVJBU0UgMgorI2RlZmluZSBWS0lMTCAzCisjZGVmaW5lIFZFT0YgNAorI2RlZmluZSBWVElNRSA1CisjZGVmaW5lIFZNSU4gNgorI2RlZmluZSBWU1dUQyA3CisjZGVmaW5lIFZTVEFSVCA4CisjZGVmaW5lIFZTVE9QIDkKKyNkZWZpbmUgVlNVU1AgMTAKKyNkZWZpbmUgVkVPTCAxMQorI2RlZmluZSBWUkVQUklOVCAxMgorI2RlZmluZSBWRElTQ0FSRCAxMworI2RlZmluZSBWV0VSQVNFIDE0CisjZGVmaW5lIFZMTkVYVCAxNQorI2RlZmluZSBWRU9MMiAxNgorCisjZGVmaW5lIElHTkJSSyAwMDAwMDAxCisjZGVmaW5lIEJSS0lOVCAwMDAwMDAyCisjZGVmaW5lIElHTlBBUiAwMDAwMDA0CisjZGVmaW5lIFBBUk1SSyAwMDAwMDEwCisjZGVmaW5lIElOUENLIDAwMDAwMjAKKyNkZWZpbmUgSVNUUklQIDAwMDAwNDAKKyNkZWZpbmUgSU5MQ1IgMDAwMDEwMAorI2RlZmluZSBJR05DUiAwMDAwMjAwCisjZGVmaW5lIElDUk5MIDAwMDA0MDAKKyNkZWZpbmUgSVVDTEMgMDAwMTAwMAorI2RlZmluZSBJWE9OIDAwMDIwMDAKKyNkZWZpbmUgSVhBTlkgMDAwNDAwMAorI2RlZmluZSBJWE9GRiAwMDEwMDAwCisjZGVmaW5lIElNQVhCRUwgMDAyMDAwMAorI2RlZmluZSBJVVRGOCAwMDQwMDAwCisKKyNkZWZpbmUgT1BPU1QgMDAwMDAwMQorI2RlZmluZSBPTENVQyAwMDAwMDAyCisjZGVmaW5lIE9OTENSIDAwMDAwMDQKKyNkZWZpbmUgT0NSTkwgMDAwMDAxMAorI2RlZmluZSBPTk9DUiAwMDAwMDIwCisjZGVmaW5lIE9OTFJFVCAwMDAwMDQwCisjZGVmaW5lIE9GSUxMIDAwMDAxMDAKKyNkZWZpbmUgT0ZERUwgMDAwMDIwMAorI2RlZmluZSBOTERMWSAwMDAwNDAwCisjZGVmaW5lIE5MMCAwMDAwMDAwCisjZGVmaW5lIE5MMSAwMDAwNDAwCisjZGVmaW5lIENSRExZIDAwMDMwMDAKKyNkZWZpbmUgQ1IwIDAwMDAwMDAKKyNkZWZpbmUgQ1IxIDAwMDEwMDAKKyNkZWZpbmUgQ1IyIDAwMDIwMDAKKyNkZWZpbmUgQ1IzIDAwMDMwMDAKKyNkZWZpbmUgVEFCRExZIDAwMTQwMDAKKyNkZWZpbmUgVEFCMCAwMDAwMDAwCisjZGVmaW5lIFRBQjEgMDAwNDAwMAorI2RlZmluZSBUQUIyIDAwMTAwMDAKKyNkZWZpbmUgVEFCMyAwMDE0MDAwCisjZGVmaW5lIFhUQUJTIDAwMTQwMDAKKyNkZWZpbmUgQlNETFkgMDAyMDAwMAorI2RlZmluZSBCUzAgMDAwMDAwMAorI2RlZmluZSBCUzEgMDAyMDAwMAorI2RlZmluZSBWVERMWSAwMDQwMDAwCisjZGVmaW5lIFZUMCAwMDAwMDAwCisjZGVmaW5lIFZUMSAwMDQwMDAwCisjZGVmaW5lIEZGRExZIDAxMDAwMDAKKyNkZWZpbmUgRkYwIDAwMDAwMDAKKyNkZWZpbmUgRkYxIDAxMDAwMDAKKworI2RlZmluZSBDQkFVRCAwMDEwMDE3CisjZGVmaW5lIEIwIDAwMDAwMDAgIAorI2RlZmluZSBCNTAgMDAwMDAwMQorI2RlZmluZSBCNzUgMDAwMDAwMgorI2RlZmluZSBCMTEwIDAwMDAwMDMKKyNkZWZpbmUgQjEzNCAwMDAwMDA0CisjZGVmaW5lIEIxNTAgMDAwMDAwNQorI2RlZmluZSBCMjAwIDAwMDAwMDYKKyNkZWZpbmUgQjMwMCAwMDAwMDA3CisjZGVmaW5lIEI2MDAgMDAwMDAxMAorI2RlZmluZSBCMTIwMCAwMDAwMDExCisjZGVmaW5lIEIxODAwIDAwMDAwMTIKKyNkZWZpbmUgQjI0MDAgMDAwMDAxMworI2RlZmluZSBCNDgwMCAwMDAwMDE0CisjZGVmaW5lIEI5NjAwIDAwMDAwMTUKKyNkZWZpbmUgQjE5MjAwIDAwMDAwMTYKKyNkZWZpbmUgQjM4NDAwIDAwMDAwMTcKKyNkZWZpbmUgRVhUQSBCMTkyMDAKKyNkZWZpbmUgRVhUQiBCMzg0MDAKKyNkZWZpbmUgQ1NJWkUgMDAwMDA2MAorI2RlZmluZSBDUzUgMDAwMDAwMAorI2RlZmluZSBDUzYgMDAwMDAyMAorI2RlZmluZSBDUzcgMDAwMDA0MAorI2RlZmluZSBDUzggMDAwMDA2MAorI2RlZmluZSBDU1RPUEIgMDAwMDEwMAorI2RlZmluZSBDUkVBRCAwMDAwMjAwCisjZGVmaW5lIFBBUkVOQiAwMDAwNDAwCisjZGVmaW5lIFBBUk9ERCAwMDAxMDAwCisjZGVmaW5lIEhVUENMIDAwMDIwMDAKKyNkZWZpbmUgQ0xPQ0FMIDAwMDQwMDAKKyNkZWZpbmUgQ0JBVURFWCAwMDEwMDAwCisjZGVmaW5lIEI1NzYwMCAwMDEwMDAxCisjZGVmaW5lIEIxMTUyMDAgMDAxMDAwMgorI2RlZmluZSBCMjMwNDAwIDAwMTAwMDMKKyNkZWZpbmUgQjQ2MDgwMCAwMDEwMDA0CisjZGVmaW5lIEI1MDAwMDAgMDAxMDAwNQorI2RlZmluZSBCNTc2MDAwIDAwMTAwMDYKKyNkZWZpbmUgQjkyMTYwMCAwMDEwMDA3CisjZGVmaW5lIEIxMDAwMDAwIDAwMTAwMTAKKyNkZWZpbmUgQjExNTIwMDAgMDAxMDAxMQorI2RlZmluZSBCMTUwMDAwMCAwMDEwMDEyCisjZGVmaW5lIEIyMDAwMDAwIDAwMTAwMTMKKyNkZWZpbmUgQjI1MDAwMDAgMDAxMDAxNAorI2RlZmluZSBCMzAwMDAwMCAwMDEwMDE1CisjZGVmaW5lIEIzNTAwMDAwIDAwMTAwMTYKKyNkZWZpbmUgQjQwMDAwMDAgMDAxMDAxNworI2RlZmluZSBDSUJBVUQgMDAyMDAzNjAwMDAwICAKKyNkZWZpbmUgQ01TUEFSIDAxMDAwMDAwMDAwMCAgCisjZGVmaW5lIENSVFNDVFMgMDIwMDAwMDAwMDAwICAKKworI2RlZmluZSBJU0lHIDAwMDAwMDEKKyNkZWZpbmUgSUNBTk9OIDAwMDAwMDIKKyNkZWZpbmUgWENBU0UgMDAwMDAwNAorI2RlZmluZSBFQ0hPIDAwMDAwMTAKKyNkZWZpbmUgRUNIT0UgMDAwMDAyMAorI2RlZmluZSBFQ0hPSyAwMDAwMDQwCisjZGVmaW5lIEVDSE9OTCAwMDAwMTAwCisjZGVmaW5lIE5PRkxTSCAwMDAwMjAwCisjZGVmaW5lIFRPU1RPUCAwMDAwNDAwCisjZGVmaW5lIEVDSE9DVEwgMDAwMTAwMAorI2RlZmluZSBFQ0hPUFJUIDAwMDIwMDAKKyNkZWZpbmUgRUNIT0tFIDAwMDQwMDAKKyNkZWZpbmUgRkxVU0hPIDAwMTAwMDAKKyNkZWZpbmUgUEVORElOIDAwNDAwMDAKKyNkZWZpbmUgSUVYVEVOIDAxMDAwMDAKKworI2RlZmluZSBUQ09PRkYgMAorI2RlZmluZSBUQ09PTiAxCisjZGVmaW5lIFRDSU9GRiAyCisjZGVmaW5lIFRDSU9OIDMKKworI2RlZmluZSBUQ0lGTFVTSCAwCisjZGVmaW5lIFRDT0ZMVVNIIDEKKyNkZWZpbmUgVENJT0ZMVVNIIDIKKworI2RlZmluZSBUQ1NBTk9XIDAKKyNkZWZpbmUgVENTQURSQUlOIDEKKyNkZWZpbmUgVENTQUZMVVNIIDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGVybWlvcy5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Rlcm1pb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYTQzYWMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3Rlcm1pb3MuaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9URVJNSU9TX0gKKyNkZWZpbmUgX19BU01fQVJNX1RFUk1JT1NfSAorCisjaW5jbHVkZSA8YXNtL3Rlcm1iaXRzLmg+CisjaW5jbHVkZSA8YXNtL2lvY3Rscy5oPgorCitzdHJ1Y3Qgd2luc2l6ZSB7CisgdW5zaWduZWQgc2hvcnQgd3Nfcm93OworIHVuc2lnbmVkIHNob3J0IHdzX2NvbDsKKyB1bnNpZ25lZCBzaG9ydCB3c194cGl4ZWw7CisgdW5zaWduZWQgc2hvcnQgd3NfeXBpeGVsOworfTsKKworI2RlZmluZSBOQ0MgOAorc3RydWN0IHRlcm1pbyB7CisgdW5zaWduZWQgc2hvcnQgY19pZmxhZzsKKyB1bnNpZ25lZCBzaG9ydCBjX29mbGFnOworIHVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CisgdW5zaWduZWQgc2hvcnQgY19sZmxhZzsKKyB1bnNpZ25lZCBjaGFyIGNfbGluZTsKKyB1bnNpZ25lZCBjaGFyIGNfY2NbTkNDXTsKK307CisKKyNkZWZpbmUgVElPQ01fTEUgMHgwMDEKKyNkZWZpbmUgVElPQ01fRFRSIDB4MDAyCisjZGVmaW5lIFRJT0NNX1JUUyAweDAwNAorI2RlZmluZSBUSU9DTV9TVCAweDAwOAorI2RlZmluZSBUSU9DTV9TUiAweDAxMAorI2RlZmluZSBUSU9DTV9DVFMgMHgwMjAKKyNkZWZpbmUgVElPQ01fQ0FSIDB4MDQwCisjZGVmaW5lIFRJT0NNX1JORyAweDA4MAorI2RlZmluZSBUSU9DTV9EU1IgMHgxMDAKKyNkZWZpbmUgVElPQ01fQ0QgVElPQ01fQ0FSCisjZGVmaW5lIFRJT0NNX1JJIFRJT0NNX1JORworI2RlZmluZSBUSU9DTV9PVVQxIDB4MjAwMAorI2RlZmluZSBUSU9DTV9PVVQyIDB4NDAwMAorI2RlZmluZSBUSU9DTV9MT09QIDB4ODAwMAorCisjZGVmaW5lIE5fVFRZIDAKKyNkZWZpbmUgTl9TTElQIDEKKyNkZWZpbmUgTl9NT1VTRSAyCisjZGVmaW5lIE5fUFBQIDMKKyNkZWZpbmUgTl9TVFJJUCA0CisjZGVmaW5lIE5fQVgyNSA1CisjZGVmaW5lIE5fWDI1IDYgIAorI2RlZmluZSBOXzZQQUNLIDcKKyNkZWZpbmUgTl9NQVNDIDggIAorI2RlZmluZSBOX1IzOTY0IDkgIAorI2RlZmluZSBOX1BST0ZJQlVTX0ZETCAxMCAgCisjZGVmaW5lIE5fSVJEQSAxMSAgCisjZGVmaW5lIE5fU01TQkxPQ0sgMTIgIAorI2RlZmluZSBOX0hETEMgMTMgIAorI2RlZmluZSBOX1NZTkNfUFBQIDE0CisjZGVmaW5lIE5fSENJIDE1ICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGhyZWFkX2luZm8uaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS90aHJlYWRfaW5mby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzMGQyZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGhyZWFkX2luZm8uaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9USFJFQURfSU5GT19ICisjZGVmaW5lIF9fQVNNX0FSTV9USFJFQURfSU5GT19ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RpbWV4LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMTBjNDcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RpbWV4LmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1RJTUVYX0gKKyNkZWZpbmUgX0FTTUFSTV9USU1FWF9ICisKKyNpbmNsdWRlIDxhc20vYXJjaC90aW1leC5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgY3ljbGVzX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RsYmZsdXNoLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdGxiZmx1c2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MGEyM2RjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RsYmZsdXNoLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1RMQkZMVVNIX0gKKyNkZWZpbmUgX0FTTUFSTV9UTEJGTFVTSF9ICisKKyNkZWZpbmUgdGxiX2ZsdXNoKHRsYikgKCh2b2lkKSB0bGIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RvcG9sb2d5LmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZWNjZmQ0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3RvcG9sb2d5LmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0FSTV9UT1BPTE9HWV9ICisjZGVmaW5lIF9BU01fQVJNX1RPUE9MT0dZX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3RvcG9sb2d5Lmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3R5cGVzLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYzYwZjEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3R5cGVzLmgKQEAgLTAsMCArMSwzNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fVFlQRVNfSAorI2RlZmluZSBfX0FTTV9BUk1fVFlQRVNfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVtb2RlX3Q7CisKK3R5cGVkZWYgX19zaWduZWRfXyBjaGFyIF9fczg7Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191ODsKKwordHlwZWRlZiBfX3NpZ25lZF9fIHNob3J0IF9fczE2OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX3UxNjsKKwordHlwZWRlZiBfX3NpZ25lZF9fIGludCBfX3MzMjsKK3R5cGVkZWYgdW5zaWduZWQgaW50IF9fdTMyOworCisjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIWRlZmluZWQoX19TVFJJQ1RfQU5TSV9fKQordHlwZWRlZiBfX3NpZ25lZF9fIGxvbmcgbG9uZyBfX3M2NDsKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIF9fdTY0OworI2VuZGlmCisKKyNlbmRpZgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VhY2Nlc3MuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91YWNjZXNzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmYzNmMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91YWNjZXNzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNQVJNX1VBQ0NFU1NfSAorI2RlZmluZSBfQVNNQVJNX1VBQ0NFU1NfSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKyNpbmNsdWRlIDxhc20vbWVtb3J5Lmg+CisjaW5jbHVkZSA8YXNtL2RvbWFpbi5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBWRVJJRllfUkVBRCAwCisjZGVmaW5lIFZFUklGWV9XUklURSAxCisKK3N0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnkKK3sKKyB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOworfTsKKworI2RlZmluZSBLRVJORUxfRFMgMHgwMDAwMDAwMAorI2RlZmluZSBnZXRfZHMoKSAoS0VSTkVMX0RTKQorCisjZGVmaW5lIFVTRVJfRFMgS0VSTkVMX0RTCisKKyNkZWZpbmUgc2VnbWVudF9lcShhLGIpICgxKQorI2RlZmluZSBfX2FkZHJfb2soYWRkcikgKDEpCisjZGVmaW5lIF9fcmFuZ2Vfb2soYWRkcixzaXplKSAoMCkKKyNkZWZpbmUgZ2V0X2ZzKCkgKEtFUk5FTF9EUykKKworI2RlZmluZSBnZXRfdXNlcih4LHApIF9fZ2V0X3VzZXIoeCxwKQorI2RlZmluZSBwdXRfdXNlcih4LHApIF9fcHV0X3VzZXIoeCxwKQorI2RlZmluZSBhY2Nlc3Nfb2sodHlwZSxhZGRyLHNpemUpIChfX3JhbmdlX29rKGFkZHIsc2l6ZSkgPT0gMCkKKyNkZWZpbmUgX19nZXRfdXNlcih4LHB0cikgICh7ICAgbG9uZyBfX2d1X2VyciA9IDA7ICAgX19nZXRfdXNlcl9lcnIoKHgpLChwdHIpLF9fZ3VfZXJyKTsgICBfX2d1X2VycjsgIH0pCisjZGVmaW5lIF9fZ2V0X3VzZXJfZXJyb3IoeCxwdHIsZXJyKSAgKHsgICBfX2dldF91c2VyX2VycigoeCksKHB0ciksZXJyKTsgICAodm9pZCkgMDsgIH0pCisjZGVmaW5lIF9fZ2V0X3VzZXJfZXJyKHgscHRyLGVycikgIGRvIHsgICB1bnNpZ25lZCBsb25nIF9fZ3VfYWRkciA9ICh1bnNpZ25lZCBsb25nKShwdHIpOyAgIHVuc2lnbmVkIGxvbmcgX19ndV92YWw7ICAgX19jaGtfdXNlcl9wdHIocHRyKTsgICBzd2l0Y2ggKHNpemVvZigqKHB0cikpKSB7ICAgY2FzZSAxOiBfX2dldF91c2VyX2FzbV9ieXRlKF9fZ3VfdmFsLF9fZ3VfYWRkcixlcnIpOyBicmVhazsgICBjYXNlIDI6IF9fZ2V0X3VzZXJfYXNtX2hhbGYoX19ndV92YWwsX19ndV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgNDogX19nZXRfdXNlcl9hc21fd29yZChfX2d1X3ZhbCxfX2d1X2FkZHIsZXJyKTsgYnJlYWs7ICAgZGVmYXVsdDogKF9fZ3VfdmFsKSA9IF9fZ2V0X3VzZXJfYmFkKCk7ICAgfSAgICh4KSA9IChfX3R5cGVvZl9fKCoocHRyKSkpX19ndV92YWw7ICB9IHdoaWxlICgwKQorI2RlZmluZSBfX2dldF91c2VyX2FzbV9ieXRlKHgsYWRkcixlcnIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CWxkcmJ0CSUxLFslMl0sIzBcbiIgICAiMjpcbiIgICAiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiCS5hbGlnbgkyXG4iICAgIjM6CW1vdgklMCwgJTNcbiIgICAiCW1vdgklMSwgIzBcbiIgICAiCWIJMmJcbiIgICAiCS5wcmV2aW91c1xuIiAgICIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduCTNcbiIgICAiCS5sb25nCTFiLCAzYlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSwgIj0mciIgKHgpICAgOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpICAgOiAiY2MiKQorI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgX19nZXRfdXNlcl9hc21faGFsZih4LF9fZ3VfYWRkcixlcnIpICAoeyAgIHVuc2lnbmVkIGxvbmcgX19iMSwgX19iMjsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjEsIF9fZ3VfYWRkciwgZXJyKTsgICBfX2dldF91c2VyX2FzbV9ieXRlKF9fYjIsIF9fZ3VfYWRkciArIDEsIGVycik7ICAgKHgpID0gX19iMSB8IChfX2IyIDw8IDgpOyAgfSkKKyNlbHNlCisjZGVmaW5lIF9fZ2V0X3VzZXJfYXNtX2hhbGYoeCxfX2d1X2FkZHIsZXJyKSAgKHsgICB1bnNpZ25lZCBsb25nIF9fYjEsIF9fYjI7ICAgX19nZXRfdXNlcl9hc21fYnl0ZShfX2IxLCBfX2d1X2FkZHIsIGVycik7ICAgX19nZXRfdXNlcl9hc21fYnl0ZShfX2IyLCBfX2d1X2FkZHIgKyAxLCBlcnIpOyAgICh4KSA9IChfX2IxIDw8IDgpIHwgX19iMjsgIH0pCisjZW5kaWYKKyNkZWZpbmUgX19nZXRfdXNlcl9hc21fd29yZCh4LGFkZHIsZXJyKSAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAgICIxOglsZHJ0CSUxLFslMl0sIzBcbiIgICAiMjpcbiIgICAiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiCS5hbGlnbgkyXG4iICAgIjM6CW1vdgklMCwgJTNcbiIgICAiCW1vdgklMSwgIzBcbiIgICAiCWIJMmJcbiIgICAiCS5wcmV2aW91c1xuIiAgICIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduCTNcbiIgICAiCS5sb25nCTFiLCAzYlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSwgIj0mciIgKHgpICAgOiAiciIgKGFkZHIpLCAiaSIgKC1FRkFVTFQpICAgOiAiY2MiKQorI2RlZmluZSBfX3B1dF91c2VyKHgscHRyKSAgKHsgICBsb25nIF9fcHVfZXJyID0gMDsgICBfX3B1dF91c2VyX2VycigoeCksKHB0ciksX19wdV9lcnIpOyAgIF9fcHVfZXJyOyAgfSkKKyNkZWZpbmUgX19wdXRfdXNlcl9lcnJvcih4LHB0cixlcnIpICAoeyAgIF9fcHV0X3VzZXJfZXJyKCh4KSwocHRyKSxlcnIpOyAgICh2b2lkKSAwOyAgfSkKKyNkZWZpbmUgX19wdXRfdXNlcl9lcnIoeCxwdHIsZXJyKSAgZG8geyAgIHVuc2lnbmVkIGxvbmcgX19wdV9hZGRyID0gKHVuc2lnbmVkIGxvbmcpKHB0cik7ICAgX190eXBlb2ZfXygqKHB0cikpIF9fcHVfdmFsID0gKHgpOyAgIF9fY2hrX3VzZXJfcHRyKHB0cik7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogX19wdXRfdXNlcl9hc21fYnl0ZShfX3B1X3ZhbCxfX3B1X2FkZHIsZXJyKTsgYnJlYWs7ICAgY2FzZSAyOiBfX3B1dF91c2VyX2FzbV9oYWxmKF9fcHVfdmFsLF9fcHVfYWRkcixlcnIpOyBicmVhazsgICBjYXNlIDQ6IF9fcHV0X3VzZXJfYXNtX3dvcmQoX19wdV92YWwsX19wdV9hZGRyLGVycik7IGJyZWFrOyAgIGNhc2UgODogX19wdXRfdXNlcl9hc21fZHdvcmQoX19wdV92YWwsX19wdV9hZGRyLGVycik7IGJyZWFrOyAgIGRlZmF1bHQ6IF9fcHV0X3VzZXJfYmFkKCk7ICAgfSAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wdXRfdXNlcl9hc21fYnl0ZSh4LF9fcHVfYWRkcixlcnIpICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICAgIjE6CXN0cmJ0CSUxLFslMl0sIzBcbiIgICAiMjpcbiIgICAiCS5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgICAiCS5hbGlnbgkyXG4iICAgIjM6CW1vdgklMCwgJTNcbiIgICAiCWIJMmJcbiIgICAiCS5wcmV2aW91c1xuIiAgICIJLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAgICIJLmFsaWduCTNcbiIgICAiCS5sb25nCTFiLCAzYlxuIiAgICIJLnByZXZpb3VzIiAgIDogIityIiAoZXJyKSAgIDogInIiICh4KSwgInIiIChfX3B1X2FkZHIpLCAiaSIgKC1FRkFVTFQpICAgOiAiY2MiKQorI2lmbmRlZiBfX0FSTUVCX18KKyNkZWZpbmUgX19wdXRfdXNlcl9hc21faGFsZih4LF9fcHVfYWRkcixlcnIpICAoeyAgIHVuc2lnbmVkIGxvbmcgX190ZW1wID0gKHVuc2lnbmVkIGxvbmcpKHgpOyAgIF9fcHV0X3VzZXJfYXNtX2J5dGUoX190ZW1wLCBfX3B1X2FkZHIsIGVycik7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAgPj4gOCwgX19wdV9hZGRyICsgMSwgZXJyKTsgIH0pCisjZWxzZQorI2RlZmluZSBfX3B1dF91c2VyX2FzbV9oYWxmKHgsX19wdV9hZGRyLGVycikgICh7ICAgdW5zaWduZWQgbG9uZyBfX3RlbXAgPSAodW5zaWduZWQgbG9uZykoeCk7ICAgX19wdXRfdXNlcl9hc21fYnl0ZShfX3RlbXAgPj4gOCwgX19wdV9hZGRyLCBlcnIpOyAgIF9fcHV0X3VzZXJfYXNtX2J5dGUoX190ZW1wLCBfX3B1X2FkZHIgKyAxLCBlcnIpOyAgfSkKKyNlbmRpZgorI2RlZmluZSBfX3B1dF91c2VyX2FzbV93b3JkKHgsX19wdV9hZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJc3RydAklMSxbJTJdLCMwXG4iICAgIjI6XG4iICAgIgkuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICAgIgkuYWxpZ24JMlxuIiAgICIzOgltb3YJJTAsICUzXG4iICAgIgliCTJiXG4iICAgIgkucHJldmlvdXNcbiIgICAiCS5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgICAiCS5hbGlnbgkzXG4iICAgIgkubG9uZwkxYiwgM2JcbiIgICAiCS5wcmV2aW91cyIgICA6ICIrciIgKGVycikgICA6ICJyIiAoeCksICJyIiAoX19wdV9hZGRyKSwgImkiICgtRUZBVUxUKSAgIDogImNjIikKKyNpZm5kZWYgX19BUk1FQl9fCisjZGVmaW5lIF9fcmVnX29wZXIwICIlUjIiCisjZGVmaW5lIF9fcmVnX29wZXIxICIlUTIiCisjZWxzZQorI2RlZmluZSBfX3JlZ19vcGVyMCAiJVEyIgorI2RlZmluZSBfX3JlZ19vcGVyMSAiJVIyIgorI2VuZGlmCisjZGVmaW5lIF9fcHV0X3VzZXJfYXNtX2R3b3JkKHgsX19wdV9hZGRyLGVycikgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggICAiMToJc3RydAkiIF9fcmVnX29wZXIxICIsIFslMV0sICM0XG4iICAgIjI6CXN0cnQJIiBfX3JlZ19vcGVyMCAiLCBbJTFdLCAjMFxuIiAgICIzOlxuIiAgICIJLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAgICIJLmFsaWduCTJcbiIgICAiNDoJbW92CSUwLCAlM1xuIiAgICIJYgkzYlxuIiAgICIJLnByZXZpb3VzXG4iICAgIgkuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICAgIgkuYWxpZ24JM1xuIiAgICIJLmxvbmcJMWIsIDRiXG4iICAgIgkubG9uZwkyYiwgNGJcbiIgICAiCS5wcmV2aW91cyIgICA6ICIrciIgKGVyciksICIrciIgKF9fcHVfYWRkcikgICA6ICJyIiAoeCksICJpIiAoLUVGQVVMVCkgICA6ICJjYyIpCisjZGVmaW5lIF9fY29weV9mcm9tX3VzZXIodG8sZnJvbSxuKSAobWVtY3B5KHRvLCAodm9pZCBfX2ZvcmNlICopZnJvbSwgbiksIDApCisjZGVmaW5lIF9fY29weV90b191c2VyKHRvLGZyb20sbikgKG1lbWNweSgodm9pZCBfX2ZvcmNlICopdG8sIGZyb20sIG4pLCAwKQorI2RlZmluZSBfX2NsZWFyX3VzZXIoYWRkcixuKSAobWVtc2V0KCh2b2lkIF9fZm9yY2UgKilhZGRyLCAwLCBuKSwgMCkKKworI2RlZmluZSBfX2NvcHlfdG9fdXNlcl9pbmF0b21pYyBfX2NvcHlfdG9fdXNlcgorI2RlZmluZSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljIF9fY29weV9mcm9tX3VzZXIKKyNkZWZpbmUgc3RybGVuX3VzZXIocykgc3Rybmxlbl91c2VyKHMsIH4wVUwgPj4gMSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuYWxpZ25lZC5oIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuYWxpZ25lZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiOWIwOTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdW5hbGlnbmVkLmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9BUk1fVU5BTElHTkVEX0gKKyNkZWZpbmUgX19BU01fQVJNX1VOQUxJR05FRF9ICisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfMl9sZShfX3ApICAgKF9fcFswXSB8IF9fcFsxXSA8PCA4KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF8yX2JlKF9fcCkgICAoX19wWzBdIDw8IDggfCBfX3BbMV0pCisKKyNkZWZpbmUgX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKSAgIChfX3BbMF0gfCBfX3BbMV0gPDwgOCB8IF9fcFsyXSA8PCAxNiB8IF9fcFszXSA8PCAyNCkKKworI2RlZmluZSBfX2dldF91bmFsaWduZWRfNF9iZShfX3ApICAgKF9fcFswXSA8PCAyNCB8IF9fcFsxXSA8PCAxNiB8IF9fcFsyXSA8PCA4IHwgX19wWzNdKQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9sZShwdHIpICAgKHsgICBfX3R5cGVvZl9fKCoocHRyKSkgX192OyAgIF9fdTggKl9fcCA9IChfX3U4ICopKHB0cik7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogX192ID0gKihwdHIpOyBicmVhazsgICBjYXNlIDI6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF8yX2xlKF9fcCk7IGJyZWFrOyAgIGNhc2UgNDogX192ID0gX19nZXRfdW5hbGlnbmVkXzRfbGUoX19wKTsgYnJlYWs7ICAgY2FzZSA4OiB7ICAgdW5zaWduZWQgaW50IF9fdjEsIF9fdjI7ICAgX192MiA9IF9fZ2V0X3VuYWxpZ25lZF80X2xlKChfX3ArNCkpOyAgIF9fdjEgPSBfX2dldF91bmFsaWduZWRfNF9sZShfX3ApOyAgIF9fdiA9ICgodW5zaWduZWQgbG9uZyBsb25nKV9fdjIgPDwgMzIgfCBfX3YxKTsgICB9ICAgYnJlYWs7ICAgZGVmYXVsdDogX192ID0gX19idWdfdW5hbGlnbmVkX3goX19wKTsgYnJlYWs7ICAgfSAgIF9fdjsgICB9KQorCisjZGVmaW5lIF9fZ2V0X3VuYWxpZ25lZF9iZShwdHIpICAgKHsgICBfX3R5cGVvZl9fKCoocHRyKSkgX192OyAgIF9fdTggKl9fcCA9IChfX3U4ICopKHB0cik7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogX192ID0gKihwdHIpOyBicmVhazsgICBjYXNlIDI6IF9fdiA9IF9fZ2V0X3VuYWxpZ25lZF8yX2JlKF9fcCk7IGJyZWFrOyAgIGNhc2UgNDogX192ID0gX19nZXRfdW5hbGlnbmVkXzRfYmUoX19wKTsgYnJlYWs7ICAgY2FzZSA4OiB7ICAgdW5zaWduZWQgaW50IF9fdjEsIF9fdjI7ICAgX192MiA9IF9fZ2V0X3VuYWxpZ25lZF80X2JlKF9fcCk7ICAgX192MSA9IF9fZ2V0X3VuYWxpZ25lZF80X2JlKChfX3ArNCkpOyAgIF9fdiA9ICgodW5zaWduZWQgbG9uZyBsb25nKV9fdjIgPDwgMzIgfCBfX3YxKTsgICB9ICAgYnJlYWs7ICAgZGVmYXVsdDogX192ID0gX19idWdfdW5hbGlnbmVkX3goX19wKTsgYnJlYWs7ICAgfSAgIF9fdjsgICB9KQorCisjZGVmaW5lIF9fcHV0X3VuYWxpZ25lZF9sZSh2YWwscHRyKSAgICh7ICAgc3dpdGNoIChzaXplb2YoKihwdHIpKSkgeyAgIGNhc2UgMTogICAqKHB0cikgPSAodmFsKTsgICBicmVhazsgICBjYXNlIDI6IF9fcHV0X3VuYWxpZ25lZF8yX2xlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGNhc2UgNDogX19wdXRfdW5hbGlnbmVkXzRfbGUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgY2FzZSA4OiBfX3B1dF91bmFsaWduZWRfOF9sZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBkZWZhdWx0OiBfX2J1Z191bmFsaWduZWRfeChwdHIpOyAgIGJyZWFrOyAgIH0gICAodm9pZCkgMDsgICB9KQorI2RlZmluZSBfX3B1dF91bmFsaWduZWRfYmUodmFsLHB0cikgICAoeyAgIHN3aXRjaCAoc2l6ZW9mKCoocHRyKSkpIHsgICBjYXNlIDE6ICAgKihwdHIpID0gKHZhbCk7ICAgYnJlYWs7ICAgY2FzZSAyOiBfX3B1dF91bmFsaWduZWRfMl9iZSgodmFsKSwoX191OCAqKShwdHIpKTsgICBicmVhazsgICBjYXNlIDQ6IF9fcHV0X3VuYWxpZ25lZF80X2JlKCh2YWwpLChfX3U4ICopKHB0cikpOyAgIGJyZWFrOyAgIGNhc2UgODogX19wdXRfdW5hbGlnbmVkXzhfYmUoKHZhbCksKF9fdTggKikocHRyKSk7ICAgYnJlYWs7ICAgZGVmYXVsdDogX19idWdfdW5hbGlnbmVkX3gocHRyKTsgICBicmVhazsgICB9ICAgKHZvaWQpIDA7ICAgfSkKKyNpZm5kZWYgX19BUk1FQl9fCisjZGVmaW5lIGdldF91bmFsaWduZWQgX19nZXRfdW5hbGlnbmVkX2xlCisjZGVmaW5lIHB1dF91bmFsaWduZWQgX19wdXRfdW5hbGlnbmVkX2xlCisjZWxzZQorI2RlZmluZSBnZXRfdW5hbGlnbmVkIF9fZ2V0X3VuYWxpZ25lZF9iZQorI2RlZmluZSBwdXRfdW5hbGlnbmVkIF9fcHV0X3VuYWxpZ25lZF9iZQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmlzdGQuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91bmlzdGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45YTMwZGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3VuaXN0ZC5oCkBAIC0wLDAgKzEsMzU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fQVNNX0FSTV9VTklTVERfSAorI2RlZmluZSBfX0FTTV9BUk1fVU5JU1REX0gKKworI2RlZmluZSBfX05SX09BQklfU1lTQ0FMTF9CQVNFIDB4OTAwMDAwCisKKyNpZiBkZWZpbmVkKF9fdGh1bWJfXykgfHwgZGVmaW5lZChfX0FSTV9FQUJJX18pCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFIDAKKyNlbHNlCisjZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFIF9fTlJfT0FCSV9TWVNDQUxMX0JBU0UKKyNlbmRpZgorCisjZGVmaW5lIF9fTlJfcmVzdGFydF9zeXNjYWxsIChfX05SX1NZU0NBTExfQkFTRSsgMCkKKyNkZWZpbmUgX19OUl9leGl0IChfX05SX1NZU0NBTExfQkFTRSsgMSkKKyNkZWZpbmUgX19OUl9mb3JrIChfX05SX1NZU0NBTExfQkFTRSsgMikKKyNkZWZpbmUgX19OUl9yZWFkIChfX05SX1NZU0NBTExfQkFTRSsgMykKKyNkZWZpbmUgX19OUl93cml0ZSAoX19OUl9TWVNDQUxMX0JBU0UrIDQpCisjZGVmaW5lIF9fTlJfb3BlbiAoX19OUl9TWVNDQUxMX0JBU0UrIDUpCisjZGVmaW5lIF9fTlJfY2xvc2UgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2KQorCisjZGVmaW5lIF9fTlJfY3JlYXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4KQorI2RlZmluZSBfX05SX2xpbmsgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5KQorI2RlZmluZSBfX05SX3VubGluayAoX19OUl9TWVNDQUxMX0JBU0UrIDEwKQorI2RlZmluZSBfX05SX2V4ZWN2ZSAoX19OUl9TWVNDQUxMX0JBU0UrIDExKQorI2RlZmluZSBfX05SX2NoZGlyIChfX05SX1NZU0NBTExfQkFTRSsgMTIpCisjZGVmaW5lIF9fTlJfdGltZSAoX19OUl9TWVNDQUxMX0JBU0UrIDEzKQorI2RlZmluZSBfX05SX21rbm9kIChfX05SX1NZU0NBTExfQkFTRSsgMTQpCisjZGVmaW5lIF9fTlJfY2htb2QgKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNSkKKyNkZWZpbmUgX19OUl9sY2hvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKyAxNikKKworI2RlZmluZSBfX05SX2xzZWVrIChfX05SX1NZU0NBTExfQkFTRSsgMTkpCisjZGVmaW5lIF9fTlJfZ2V0cGlkIChfX05SX1NZU0NBTExfQkFTRSsgMjApCisjZGVmaW5lIF9fTlJfbW91bnQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMSkKKyNkZWZpbmUgX19OUl91bW91bnQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMikKKyNkZWZpbmUgX19OUl9zZXR1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyMykKKyNkZWZpbmUgX19OUl9nZXR1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyAyNCkKKyNkZWZpbmUgX19OUl9zdGltZSAoX19OUl9TWVNDQUxMX0JBU0UrIDI1KQorI2RlZmluZSBfX05SX3B0cmFjZSAoX19OUl9TWVNDQUxMX0JBU0UrIDI2KQorI2RlZmluZSBfX05SX2FsYXJtIChfX05SX1NZU0NBTExfQkFTRSsgMjcpCisKKyNkZWZpbmUgX19OUl9wYXVzZSAoX19OUl9TWVNDQUxMX0JBU0UrIDI5KQorI2RlZmluZSBfX05SX3V0aW1lIChfX05SX1NZU0NBTExfQkFTRSsgMzApCisKKyNkZWZpbmUgX19OUl9hY2Nlc3MgKF9fTlJfU1lTQ0FMTF9CQVNFKyAzMykKKyNkZWZpbmUgX19OUl9uaWNlIChfX05SX1NZU0NBTExfQkFTRSsgMzQpCisKKyNkZWZpbmUgX19OUl9zeW5jIChfX05SX1NZU0NBTExfQkFTRSsgMzYpCisjZGVmaW5lIF9fTlJfa2lsbCAoX19OUl9TWVNDQUxMX0JBU0UrIDM3KQorI2RlZmluZSBfX05SX3JlbmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrIDM4KQorI2RlZmluZSBfX05SX21rZGlyIChfX05SX1NZU0NBTExfQkFTRSsgMzkpCisjZGVmaW5lIF9fTlJfcm1kaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MCkKKyNkZWZpbmUgX19OUl9kdXAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MSkKKyNkZWZpbmUgX19OUl9waXBlIChfX05SX1NZU0NBTExfQkFTRSsgNDIpCisjZGVmaW5lIF9fTlJfdGltZXMgKF9fTlJfU1lTQ0FMTF9CQVNFKyA0MykKKworI2RlZmluZSBfX05SX2JyayAoX19OUl9TWVNDQUxMX0JBU0UrIDQ1KQorI2RlZmluZSBfX05SX3NldGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDQ2KQorI2RlZmluZSBfX05SX2dldGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDQ3KQorCisjZGVmaW5lIF9fTlJfZ2V0ZXVpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDQ5KQorI2RlZmluZSBfX05SX2dldGVnaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA1MCkKKyNkZWZpbmUgX19OUl9hY2N0IChfX05SX1NZU0NBTExfQkFTRSsgNTEpCisjZGVmaW5lIF9fTlJfdW1vdW50MiAoX19OUl9TWVNDQUxMX0JBU0UrIDUyKQorCisjZGVmaW5lIF9fTlJfaW9jdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKyA1NCkKKyNkZWZpbmUgX19OUl9mY250bCAoX19OUl9TWVNDQUxMX0JBU0UrIDU1KQorCisjZGVmaW5lIF9fTlJfc2V0cGdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDU3KQorCisjZGVmaW5lIF9fTlJfdW1hc2sgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MCkKKyNkZWZpbmUgX19OUl9jaHJvb3QgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MSkKKyNkZWZpbmUgX19OUl91c3RhdCAoX19OUl9TWVNDQUxMX0JBU0UrIDYyKQorI2RlZmluZSBfX05SX2R1cDIgKF9fTlJfU1lTQ0FMTF9CQVNFKyA2MykKKyNkZWZpbmUgX19OUl9nZXRwcGlkIChfX05SX1NZU0NBTExfQkFTRSsgNjQpCisjZGVmaW5lIF9fTlJfZ2V0cGdycCAoX19OUl9TWVNDQUxMX0JBU0UrIDY1KQorI2RlZmluZSBfX05SX3NldHNpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDY2KQorI2RlZmluZSBfX05SX3NpZ2FjdGlvbiAoX19OUl9TWVNDQUxMX0JBU0UrIDY3KQorCisjZGVmaW5lIF9fTlJfc2V0cmV1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MCkKKyNkZWZpbmUgX19OUl9zZXRyZWdpZCAoX19OUl9TWVNDQUxMX0JBU0UrIDcxKQorI2RlZmluZSBfX05SX3NpZ3N1c3BlbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3MikKKyNkZWZpbmUgX19OUl9zaWdwZW5kaW5nIChfX05SX1NZU0NBTExfQkFTRSsgNzMpCisjZGVmaW5lIF9fTlJfc2V0aG9zdG5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NCkKKyNkZWZpbmUgX19OUl9zZXRybGltaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NSkKKyNkZWZpbmUgX19OUl9nZXRybGltaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKyA3NikgIAorI2RlZmluZSBfX05SX2dldHJ1c2FnZSAoX19OUl9TWVNDQUxMX0JBU0UrIDc3KQorI2RlZmluZSBfX05SX2dldHRpbWVvZmRheSAoX19OUl9TWVNDQUxMX0JBU0UrIDc4KQorI2RlZmluZSBfX05SX3NldHRpbWVvZmRheSAoX19OUl9TWVNDQUxMX0JBU0UrIDc5KQorI2RlZmluZSBfX05SX2dldGdyb3VwcyAoX19OUl9TWVNDQUxMX0JBU0UrIDgwKQorI2RlZmluZSBfX05SX3NldGdyb3VwcyAoX19OUl9TWVNDQUxMX0JBU0UrIDgxKQorI2RlZmluZSBfX05SX3NlbGVjdCAoX19OUl9TWVNDQUxMX0JBU0UrIDgyKQorI2RlZmluZSBfX05SX3N5bWxpbmsgKF9fTlJfU1lTQ0FMTF9CQVNFKyA4MykKKworI2RlZmluZSBfX05SX3JlYWRsaW5rIChfX05SX1NZU0NBTExfQkFTRSsgODUpCisjZGVmaW5lIF9fTlJfdXNlbGliIChfX05SX1NZU0NBTExfQkFTRSsgODYpCisjZGVmaW5lIF9fTlJfc3dhcG9uIChfX05SX1NZU0NBTExfQkFTRSsgODcpCisjZGVmaW5lIF9fTlJfcmVib290IChfX05SX1NZU0NBTExfQkFTRSsgODgpCisjZGVmaW5lIF9fTlJfcmVhZGRpciAoX19OUl9TWVNDQUxMX0JBU0UrIDg5KQorI2RlZmluZSBfX05SX21tYXAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MCkKKyNkZWZpbmUgX19OUl9tdW5tYXAgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5MSkKKyNkZWZpbmUgX19OUl90cnVuY2F0ZSAoX19OUl9TWVNDQUxMX0JBU0UrIDkyKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZSAoX19OUl9TWVNDQUxMX0JBU0UrIDkzKQorI2RlZmluZSBfX05SX2ZjaG1vZCAoX19OUl9TWVNDQUxMX0JBU0UrIDk0KQorI2RlZmluZSBfX05SX2ZjaG93biAoX19OUl9TWVNDQUxMX0JBU0UrIDk1KQorI2RlZmluZSBfX05SX2dldHByaW9yaXR5IChfX05SX1NZU0NBTExfQkFTRSsgOTYpCisjZGVmaW5lIF9fTlJfc2V0cHJpb3JpdHkgKF9fTlJfU1lTQ0FMTF9CQVNFKyA5NykKKworI2RlZmluZSBfX05SX3N0YXRmcyAoX19OUl9TWVNDQUxMX0JBU0UrIDk5KQorI2RlZmluZSBfX05SX2ZzdGF0ZnMgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMCkKKworI2RlZmluZSBfX05SX3NvY2tldGNhbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMikKKyNkZWZpbmUgX19OUl9zeXNsb2cgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwMykKKyNkZWZpbmUgX19OUl9zZXRpdGltZXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNCkKKyNkZWZpbmUgX19OUl9nZXRpdGltZXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNSkKKyNkZWZpbmUgX19OUl9zdGF0IChfX05SX1NZU0NBTExfQkFTRSsxMDYpCisjZGVmaW5lIF9fTlJfbHN0YXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzEwNykKKyNkZWZpbmUgX19OUl9mc3RhdCAoX19OUl9TWVNDQUxMX0JBU0UrMTA4KQorCisjZGVmaW5lIF9fTlJfdmhhbmd1cCAoX19OUl9TWVNDQUxMX0JBU0UrMTExKQorCisjZGVmaW5lIF9fTlJfc3lzY2FsbCAoX19OUl9TWVNDQUxMX0JBU0UrMTEzKSAgCisjZGVmaW5lIF9fTlJfd2FpdDQgKF9fTlJfU1lTQ0FMTF9CQVNFKzExNCkKKyNkZWZpbmUgX19OUl9zd2Fwb2ZmIChfX05SX1NZU0NBTExfQkFTRSsxMTUpCisjZGVmaW5lIF9fTlJfc3lzaW5mbyAoX19OUl9TWVNDQUxMX0JBU0UrMTE2KQorI2RlZmluZSBfX05SX2lwYyAoX19OUl9TWVNDQUxMX0JBU0UrMTE3KQorI2RlZmluZSBfX05SX2ZzeW5jIChfX05SX1NZU0NBTExfQkFTRSsxMTgpCisjZGVmaW5lIF9fTlJfc2lncmV0dXJuIChfX05SX1NZU0NBTExfQkFTRSsxMTkpCisjZGVmaW5lIF9fTlJfY2xvbmUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMCkKKyNkZWZpbmUgX19OUl9zZXRkb21haW5uYW1lIChfX05SX1NZU0NBTExfQkFTRSsxMjEpCisjZGVmaW5lIF9fTlJfdW5hbWUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyMikKKworI2RlZmluZSBfX05SX2FkanRpbWV4IChfX05SX1NZU0NBTExfQkFTRSsxMjQpCisjZGVmaW5lIF9fTlJfbXByb3RlY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyNSkKKyNkZWZpbmUgX19OUl9zaWdwcm9jbWFzayAoX19OUl9TWVNDQUxMX0JBU0UrMTI2KQorCisjZGVmaW5lIF9fTlJfaW5pdF9tb2R1bGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzEyOCkKKyNkZWZpbmUgX19OUl9kZWxldGVfbW9kdWxlIChfX05SX1NZU0NBTExfQkFTRSsxMjkpCisKKyNkZWZpbmUgX19OUl9xdW90YWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMTMxKQorI2RlZmluZSBfX05SX2dldHBnaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMikKKyNkZWZpbmUgX19OUl9mY2hkaXIgKF9fTlJfU1lTQ0FMTF9CQVNFKzEzMykKKyNkZWZpbmUgX19OUl9iZGZsdXNoIChfX05SX1NZU0NBTExfQkFTRSsxMzQpCisjZGVmaW5lIF9fTlJfc3lzZnMgKF9fTlJfU1lTQ0FMTF9CQVNFKzEzNSkKKyNkZWZpbmUgX19OUl9wZXJzb25hbGl0eSAoX19OUl9TWVNDQUxMX0JBU0UrMTM2KQorCisjZGVmaW5lIF9fTlJfc2V0ZnN1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzEzOCkKKyNkZWZpbmUgX19OUl9zZXRmc2dpZCAoX19OUl9TWVNDQUxMX0JBU0UrMTM5KQorI2RlZmluZSBfX05SX19sbHNlZWsgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MCkKKyNkZWZpbmUgX19OUl9nZXRkZW50cyAoX19OUl9TWVNDQUxMX0JBU0UrMTQxKQorI2RlZmluZSBfX05SX19uZXdzZWxlY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0MikKKyNkZWZpbmUgX19OUl9mbG9jayAoX19OUl9TWVNDQUxMX0JBU0UrMTQzKQorI2RlZmluZSBfX05SX21zeW5jIChfX05SX1NZU0NBTExfQkFTRSsxNDQpCisjZGVmaW5lIF9fTlJfcmVhZHYgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NSkKKyNkZWZpbmUgX19OUl93cml0ZXYgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NikKKyNkZWZpbmUgX19OUl9nZXRzaWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0NykKKyNkZWZpbmUgX19OUl9mZGF0YXN5bmMgKF9fTlJfU1lTQ0FMTF9CQVNFKzE0OCkKKyNkZWZpbmUgX19OUl9fc3lzY3RsIChfX05SX1NZU0NBTExfQkFTRSsxNDkpCisjZGVmaW5lIF9fTlJfbWxvY2sgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MCkKKyNkZWZpbmUgX19OUl9tdW5sb2NrIChfX05SX1NZU0NBTExfQkFTRSsxNTEpCisjZGVmaW5lIF9fTlJfbWxvY2thbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE1MikKKyNkZWZpbmUgX19OUl9tdW5sb2NrYWxsIChfX05SX1NZU0NBTExfQkFTRSsxNTMpCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0cGFyYW0gKF9fTlJfU1lTQ0FMTF9CQVNFKzE1NCkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRwYXJhbSAoX19OUl9TWVNDQUxMX0JBU0UrMTU1KQorI2RlZmluZSBfX05SX3NjaGVkX3NldHNjaGVkdWxlciAoX19OUl9TWVNDQUxMX0JBU0UrMTU2KQorI2RlZmluZSBfX05SX3NjaGVkX2dldHNjaGVkdWxlciAoX19OUl9TWVNDQUxMX0JBU0UrMTU3KQorI2RlZmluZSBfX05SX3NjaGVkX3lpZWxkIChfX05SX1NZU0NBTExfQkFTRSsxNTgpCisjZGVmaW5lIF9fTlJfc2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoX19OUl9TWVNDQUxMX0JBU0UrMTU5KQorI2RlZmluZSBfX05SX3NjaGVkX2dldF9wcmlvcml0eV9taW4gKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MCkKKyNkZWZpbmUgX19OUl9zY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MSkKKyNkZWZpbmUgX19OUl9uYW5vc2xlZXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MikKKyNkZWZpbmUgX19OUl9tcmVtYXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2MykKKyNkZWZpbmUgX19OUl9zZXRyZXN1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NCkKKyNkZWZpbmUgX19OUl9nZXRyZXN1aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2NSkKKworI2RlZmluZSBfX05SX3BvbGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE2OCkKKyNkZWZpbmUgX19OUl9uZnNzZXJ2Y3RsIChfX05SX1NZU0NBTExfQkFTRSsxNjkpCisjZGVmaW5lIF9fTlJfc2V0cmVzZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxNzApCisjZGVmaW5lIF9fTlJfZ2V0cmVzZ2lkIChfX05SX1NZU0NBTExfQkFTRSsxNzEpCisjZGVmaW5lIF9fTlJfcHJjdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MikKKyNkZWZpbmUgX19OUl9ydF9zaWdyZXR1cm4gKF9fTlJfU1lTQ0FMTF9CQVNFKzE3MykKKyNkZWZpbmUgX19OUl9ydF9zaWdhY3Rpb24gKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NCkKKyNkZWZpbmUgX19OUl9ydF9zaWdwcm9jbWFzayAoX19OUl9TWVNDQUxMX0JBU0UrMTc1KQorI2RlZmluZSBfX05SX3J0X3NpZ3BlbmRpbmcgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NikKKyNkZWZpbmUgX19OUl9ydF9zaWd0aW1lZHdhaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE3NykKKyNkZWZpbmUgX19OUl9ydF9zaWdxdWV1ZWluZm8gKF9fTlJfU1lTQ0FMTF9CQVNFKzE3OCkKKyNkZWZpbmUgX19OUl9ydF9zaWdzdXNwZW5kIChfX05SX1NZU0NBTExfQkFTRSsxNzkpCisjZGVmaW5lIF9fTlJfcHJlYWQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTgwKQorI2RlZmluZSBfX05SX3B3cml0ZTY0IChfX05SX1NZU0NBTExfQkFTRSsxODEpCisjZGVmaW5lIF9fTlJfY2hvd24gKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MikKKyNkZWZpbmUgX19OUl9nZXRjd2QgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4MykKKyNkZWZpbmUgX19OUl9jYXBnZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NCkKKyNkZWZpbmUgX19OUl9jYXBzZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE4NSkKKyNkZWZpbmUgX19OUl9zaWdhbHRzdGFjayAoX19OUl9TWVNDQUxMX0JBU0UrMTg2KQorI2RlZmluZSBfX05SX3NlbmRmaWxlIChfX05SX1NZU0NBTExfQkFTRSsxODcpCisKKyNkZWZpbmUgX19OUl92Zm9yayAoX19OUl9TWVNDQUxMX0JBU0UrMTkwKQorI2RlZmluZSBfX05SX3VnZXRybGltaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5MSkgIAorI2RlZmluZSBfX05SX21tYXAyIChfX05SX1NZU0NBTExfQkFTRSsxOTIpCisjZGVmaW5lIF9fTlJfdHJ1bmNhdGU2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTkzKQorI2RlZmluZSBfX05SX2Z0cnVuY2F0ZTY0IChfX05SX1NZU0NBTExfQkFTRSsxOTQpCisjZGVmaW5lIF9fTlJfc3RhdDY0IChfX05SX1NZU0NBTExfQkFTRSsxOTUpCisjZGVmaW5lIF9fTlJfbHN0YXQ2NCAoX19OUl9TWVNDQUxMX0JBU0UrMTk2KQorI2RlZmluZSBfX05SX2ZzdGF0NjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzE5NykKKyNkZWZpbmUgX19OUl9sY2hvd24zMiAoX19OUl9TWVNDQUxMX0JBU0UrMTk4KQorI2RlZmluZSBfX05SX2dldHVpZDMyIChfX05SX1NZU0NBTExfQkFTRSsxOTkpCisjZGVmaW5lIF9fTlJfZ2V0Z2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMCkKKyNkZWZpbmUgX19OUl9nZXRldWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMSkKKyNkZWZpbmUgX19OUl9nZXRlZ2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwMikKKyNkZWZpbmUgX19OUl9zZXRyZXVpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMDMpCisjZGVmaW5lIF9fTlJfc2V0cmVnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA0KQorI2RlZmluZSBfX05SX2dldGdyb3VwczMyIChfX05SX1NZU0NBTExfQkFTRSsyMDUpCisjZGVmaW5lIF9fTlJfc2V0Z3JvdXBzMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwNikKKyNkZWZpbmUgX19OUl9mY2hvd24zMiAoX19OUl9TWVNDQUxMX0JBU0UrMjA3KQorI2RlZmluZSBfX05SX3NldHJlc3VpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMDgpCisjZGVmaW5lIF9fTlJfZ2V0cmVzdWlkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIwOSkKKyNkZWZpbmUgX19OUl9zZXRyZXNnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjEwKQorI2RlZmluZSBfX05SX2dldHJlc2dpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTEpCisjZGVmaW5lIF9fTlJfY2hvd24zMiAoX19OUl9TWVNDQUxMX0JBU0UrMjEyKQorI2RlZmluZSBfX05SX3NldHVpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTMpCisjZGVmaW5lIF9fTlJfc2V0Z2lkMzIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxNCkKKyNkZWZpbmUgX19OUl9zZXRmc3VpZDMyIChfX05SX1NZU0NBTExfQkFTRSsyMTUpCisjZGVmaW5lIF9fTlJfc2V0ZnNnaWQzMiAoX19OUl9TWVNDQUxMX0JBU0UrMjE2KQorI2RlZmluZSBfX05SX2dldGRlbnRzNjQgKF9fTlJfU1lTQ0FMTF9CQVNFKzIxNykKKyNkZWZpbmUgX19OUl9waXZvdF9yb290IChfX05SX1NZU0NBTExfQkFTRSsyMTgpCisjZGVmaW5lIF9fTlJfbWluY29yZSAoX19OUl9TWVNDQUxMX0JBU0UrMjE5KQorI2RlZmluZSBfX05SX21hZHZpc2UgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyMCkKKyNkZWZpbmUgX19OUl9mY250bDY0IChfX05SX1NZU0NBTExfQkFTRSsyMjEpCisKKyNkZWZpbmUgX19OUl9nZXR0aWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyNCkKKyNkZWZpbmUgX19OUl9yZWFkYWhlYWQgKF9fTlJfU1lTQ0FMTF9CQVNFKzIyNSkKKyNkZWZpbmUgX19OUl9zZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjI2KQorI2RlZmluZSBfX05SX2xzZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjI3KQorI2RlZmluZSBfX05SX2ZzZXR4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjI4KQorI2RlZmluZSBfX05SX2dldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMjkpCisjZGVmaW5lIF9fTlJfbGdldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzApCisjZGVmaW5lIF9fTlJfZmdldHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzEpCisjZGVmaW5lIF9fTlJfbGlzdHhhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyMzIpCisjZGVmaW5lIF9fTlJfbGxpc3R4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjMzKQorI2RlZmluZSBfX05SX2ZsaXN0eGF0dHIgKF9fTlJfU1lTQ0FMTF9CQVNFKzIzNCkKKyNkZWZpbmUgX19OUl9yZW1vdmV4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjM1KQorI2RlZmluZSBfX05SX2xyZW1vdmV4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjM2KQorI2RlZmluZSBfX05SX2ZyZW1vdmV4YXR0ciAoX19OUl9TWVNDQUxMX0JBU0UrMjM3KQorI2RlZmluZSBfX05SX3RraWxsIChfX05SX1NZU0NBTExfQkFTRSsyMzgpCisjZGVmaW5lIF9fTlJfc2VuZGZpbGU2NCAoX19OUl9TWVNDQUxMX0JBU0UrMjM5KQorI2RlZmluZSBfX05SX2Z1dGV4IChfX05SX1NZU0NBTExfQkFTRSsyNDApCisjZGVmaW5lIF9fTlJfc2NoZWRfc2V0YWZmaW5pdHkgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0MSkKKyNkZWZpbmUgX19OUl9zY2hlZF9nZXRhZmZpbml0eSAoX19OUl9TWVNDQUxMX0JBU0UrMjQyKQorI2RlZmluZSBfX05SX2lvX3NldHVwIChfX05SX1NZU0NBTExfQkFTRSsyNDMpCisjZGVmaW5lIF9fTlJfaW9fZGVzdHJveSAoX19OUl9TWVNDQUxMX0JBU0UrMjQ0KQorI2RlZmluZSBfX05SX2lvX2dldGV2ZW50cyAoX19OUl9TWVNDQUxMX0JBU0UrMjQ1KQorI2RlZmluZSBfX05SX2lvX3N1Ym1pdCAoX19OUl9TWVNDQUxMX0JBU0UrMjQ2KQorI2RlZmluZSBfX05SX2lvX2NhbmNlbCAoX19OUl9TWVNDQUxMX0JBU0UrMjQ3KQorI2RlZmluZSBfX05SX2V4aXRfZ3JvdXAgKF9fTlJfU1lTQ0FMTF9CQVNFKzI0OCkKKyNkZWZpbmUgX19OUl9sb29rdXBfZGNvb2tpZSAoX19OUl9TWVNDQUxMX0JBU0UrMjQ5KQorI2RlZmluZSBfX05SX2Vwb2xsX2NyZWF0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjUwKQorI2RlZmluZSBfX05SX2Vwb2xsX2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrMjUxKQorI2RlZmluZSBfX05SX2Vwb2xsX3dhaXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1MikKKyNkZWZpbmUgX19OUl9yZW1hcF9maWxlX3BhZ2VzIChfX05SX1NZU0NBTExfQkFTRSsyNTMpCisKKyNkZWZpbmUgX19OUl9zZXRfdGlkX2FkZHJlc3MgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1NikKKyNkZWZpbmUgX19OUl90aW1lcl9jcmVhdGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI1NykKKyNkZWZpbmUgX19OUl90aW1lcl9zZXR0aW1lIChfX05SX1NZU0NBTExfQkFTRSsyNTgpCisjZGVmaW5lIF9fTlJfdGltZXJfZ2V0dGltZSAoX19OUl9TWVNDQUxMX0JBU0UrMjU5KQorI2RlZmluZSBfX05SX3RpbWVyX2dldG92ZXJydW4gKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MCkKKyNkZWZpbmUgX19OUl90aW1lcl9kZWxldGUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI2MSkKKyNkZWZpbmUgX19OUl9jbG9ja19zZXR0aW1lIChfX05SX1NZU0NBTExfQkFTRSsyNjIpCisjZGVmaW5lIF9fTlJfY2xvY2tfZ2V0dGltZSAoX19OUl9TWVNDQUxMX0JBU0UrMjYzKQorI2RlZmluZSBfX05SX2Nsb2NrX2dldHJlcyAoX19OUl9TWVNDQUxMX0JBU0UrMjY0KQorI2RlZmluZSBfX05SX2Nsb2NrX25hbm9zbGVlcCAoX19OUl9TWVNDQUxMX0JBU0UrMjY1KQorI2RlZmluZSBfX05SX3N0YXRmczY0IChfX05SX1NZU0NBTExfQkFTRSsyNjYpCisjZGVmaW5lIF9fTlJfZnN0YXRmczY0IChfX05SX1NZU0NBTExfQkFTRSsyNjcpCisjZGVmaW5lIF9fTlJfdGdraWxsIChfX05SX1NZU0NBTExfQkFTRSsyNjgpCisjZGVmaW5lIF9fTlJfdXRpbWVzIChfX05SX1NZU0NBTExfQkFTRSsyNjkpCisjZGVmaW5lIF9fTlJfYXJtX2ZhZHZpc2U2NF82NCAoX19OUl9TWVNDQUxMX0JBU0UrMjcwKQorI2RlZmluZSBfX05SX3BjaWNvbmZpZ19pb2Jhc2UgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3MSkKKyNkZWZpbmUgX19OUl9wY2ljb25maWdfcmVhZCAoX19OUl9TWVNDQUxMX0JBU0UrMjcyKQorI2RlZmluZSBfX05SX3BjaWNvbmZpZ193cml0ZSAoX19OUl9TWVNDQUxMX0JBU0UrMjczKQorI2RlZmluZSBfX05SX21xX29wZW4gKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NCkKKyNkZWZpbmUgX19OUl9tcV91bmxpbmsgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NSkKKyNkZWZpbmUgX19OUl9tcV90aW1lZHNlbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NikKKyNkZWZpbmUgX19OUl9tcV90aW1lZHJlY2VpdmUgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3NykKKyNkZWZpbmUgX19OUl9tcV9ub3RpZnkgKF9fTlJfU1lTQ0FMTF9CQVNFKzI3OCkKKyNkZWZpbmUgX19OUl9tcV9nZXRzZXRhdHRyIChfX05SX1NZU0NBTExfQkFTRSsyNzkpCisjZGVmaW5lIF9fTlJfd2FpdGlkIChfX05SX1NZU0NBTExfQkFTRSsyODApCisjZGVmaW5lIF9fTlJfc29ja2V0IChfX05SX1NZU0NBTExfQkFTRSsyODEpCisjZGVmaW5lIF9fTlJfYmluZCAoX19OUl9TWVNDQUxMX0JBU0UrMjgyKQorI2RlZmluZSBfX05SX2Nvbm5lY3QgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4MykKKyNkZWZpbmUgX19OUl9saXN0ZW4gKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NCkKKyNkZWZpbmUgX19OUl9hY2NlcHQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4NSkKKyNkZWZpbmUgX19OUl9nZXRzb2NrbmFtZSAoX19OUl9TWVNDQUxMX0JBU0UrMjg2KQorI2RlZmluZSBfX05SX2dldHBlZXJuYW1lIChfX05SX1NZU0NBTExfQkFTRSsyODcpCisjZGVmaW5lIF9fTlJfc29ja2V0cGFpciAoX19OUl9TWVNDQUxMX0JBU0UrMjg4KQorI2RlZmluZSBfX05SX3NlbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI4OSkKKyNkZWZpbmUgX19OUl9zZW5kdG8gKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MCkKKyNkZWZpbmUgX19OUl9yZWN2IChfX05SX1NZU0NBTExfQkFTRSsyOTEpCisjZGVmaW5lIF9fTlJfcmVjdmZyb20gKF9fTlJfU1lTQ0FMTF9CQVNFKzI5MikKKyNkZWZpbmUgX19OUl9zaHV0ZG93biAoX19OUl9TWVNDQUxMX0JBU0UrMjkzKQorI2RlZmluZSBfX05SX3NldHNvY2tvcHQgKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NCkKKyNkZWZpbmUgX19OUl9nZXRzb2Nrb3B0IChfX05SX1NZU0NBTExfQkFTRSsyOTUpCisjZGVmaW5lIF9fTlJfc2VuZG1zZyAoX19OUl9TWVNDQUxMX0JBU0UrMjk2KQorI2RlZmluZSBfX05SX3JlY3Ztc2cgKF9fTlJfU1lTQ0FMTF9CQVNFKzI5NykKKyNkZWZpbmUgX19OUl9zZW1vcCAoX19OUl9TWVNDQUxMX0JBU0UrMjk4KQorI2RlZmluZSBfX05SX3NlbWdldCAoX19OUl9TWVNDQUxMX0JBU0UrMjk5KQorI2RlZmluZSBfX05SX3NlbWN0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzAwKQorI2RlZmluZSBfX05SX21zZ3NuZCAoX19OUl9TWVNDQUxMX0JBU0UrMzAxKQorI2RlZmluZSBfX05SX21zZ3JjdiAoX19OUl9TWVNDQUxMX0JBU0UrMzAyKQorI2RlZmluZSBfX05SX21zZ2dldCAoX19OUl9TWVNDQUxMX0JBU0UrMzAzKQorI2RlZmluZSBfX05SX21zZ2N0bCAoX19OUl9TWVNDQUxMX0JBU0UrMzA0KQorI2RlZmluZSBfX05SX3NobWF0IChfX05SX1NZU0NBTExfQkFTRSszMDUpCisjZGVmaW5lIF9fTlJfc2htZHQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNikKKyNkZWZpbmUgX19OUl9zaG1nZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwNykKKyNkZWZpbmUgX19OUl9zaG1jdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzMwOCkKKyNkZWZpbmUgX19OUl9hZGRfa2V5IChfX05SX1NZU0NBTExfQkFTRSszMDkpCisjZGVmaW5lIF9fTlJfcmVxdWVzdF9rZXkgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMCkKKyNkZWZpbmUgX19OUl9rZXljdGwgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxMSkKKyNkZWZpbmUgX19OUl9zZW10aW1lZG9wIChfX05SX1NZU0NBTExfQkFTRSszMTIpCisjZGVmaW5lIF9fTlJfdnNlcnZlciAoX19OUl9TWVNDQUxMX0JBU0UrMzEzKQorI2RlZmluZSBfX05SX2lvcHJpb19zZXQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNCkKKyNkZWZpbmUgX19OUl9pb3ByaW9fZ2V0IChfX05SX1NZU0NBTExfQkFTRSszMTUpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9pbml0IChfX05SX1NZU0NBTExfQkFTRSszMTYpCisjZGVmaW5lIF9fTlJfaW5vdGlmeV9hZGRfd2F0Y2ggKF9fTlJfU1lTQ0FMTF9CQVNFKzMxNykKKyNkZWZpbmUgX19OUl9pbm90aWZ5X3JtX3dhdGNoIChfX05SX1NZU0NBTExfQkFTRSszMTgpCisjZGVmaW5lIF9fTlJfbWJpbmQgKF9fTlJfU1lTQ0FMTF9CQVNFKzMxOSkKKyNkZWZpbmUgX19OUl9nZXRfbWVtcG9saWN5IChfX05SX1NZU0NBTExfQkFTRSszMjApCisjZGVmaW5lIF9fTlJfc2V0X21lbXBvbGljeSAoX19OUl9TWVNDQUxMX0JBU0UrMzIxKQorCisjZGVmaW5lIF9fQVJNX05SX0JBU0UgKF9fTlJfU1lTQ0FMTF9CQVNFKzB4MGYwMDAwKQorI2RlZmluZSBfX0FSTV9OUl9icmVha3BvaW50IChfX0FSTV9OUl9CQVNFKzEpCisjZGVmaW5lIF9fQVJNX05SX2NhY2hlZmx1c2ggKF9fQVJNX05SX0JBU0UrMikKKyNkZWZpbmUgX19BUk1fTlJfdXNyMjYgKF9fQVJNX05SX0JBU0UrMykKKyNkZWZpbmUgX19BUk1fTlJfdXNyMzIgKF9fQVJNX05SX0JBU0UrNCkKKyNkZWZpbmUgX19BUk1fTlJfc2V0X3RscyAoX19BUk1fTlJfQkFTRSs1KQorCisjaWYgZGVmaW5lZChfX0FSTV9FQUJJX18pICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCisjdW5kZWYgX19OUl90aW1lCisjdW5kZWYgX19OUl91bW91bnQKKyN1bmRlZiBfX05SX3N0aW1lCisjdW5kZWYgX19OUl9hbGFybQorI3VuZGVmIF9fTlJfdXRpbWUKKyN1bmRlZiBfX05SX2dldHJsaW1pdAorI3VuZGVmIF9fTlJfc2VsZWN0CisjdW5kZWYgX19OUl9yZWFkZGlyCisjdW5kZWYgX19OUl9tbWFwCisjdW5kZWYgX19OUl9zb2NrZXRjYWxsCisjdW5kZWYgX19OUl9zeXNjYWxsCisjdW5kZWYgX19OUl9pcGMKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS91c2VyLmggYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdXNlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMjU4NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9hcmNoLWFybS9hc20vdXNlci5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FSTV9VU0VSX0gKKyNkZWZpbmUgX0FSTV9VU0VSX0gKKworI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3B0cmFjZS5oPgorCitzdHJ1Y3QgdXNlcl9mcCB7Cisgc3RydWN0IGZwX3JlZyB7CisgdW5zaWduZWQgaW50IHNpZ24xOjE7CisgdW5zaWduZWQgaW50IHVudXNlZDoxNTsKKyB1bnNpZ25lZCBpbnQgc2lnbjI6MTsKKyB1bnNpZ25lZCBpbnQgZXhwb25lbnQ6MTQ7CisgdW5zaWduZWQgaW50IGo6MTsKKyB1bnNpZ25lZCBpbnQgbWFudGlzc2ExOjMxOworIHVuc2lnbmVkIGludCBtYW50aXNzYTA6MzI7CisgfSBmcHJlZ3NbOF07CisgdW5zaWduZWQgaW50IGZwc3I6MzI7CisgdW5zaWduZWQgaW50IGZwY3I6MzI7CisgdW5zaWduZWQgY2hhciBmdHlwZVs4XTsKKyB1bnNpZ25lZCBpbnQgaW5pdF9mbGFnOworfTsKKworc3RydWN0IHVzZXJ7CisKKyBzdHJ1Y3QgcHRfcmVncyByZWdzOworCisgaW50IHVfZnB2YWxpZDsKKworIHVuc2lnbmVkIGxvbmcgaW50IHVfdHNpemU7CisgdW5zaWduZWQgbG9uZyBpbnQgdV9kc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGludCB1X3NzaXplOworIHVuc2lnbmVkIGxvbmcgc3RhcnRfY29kZTsKKyB1bnNpZ25lZCBsb25nIHN0YXJ0X3N0YWNrOworIGxvbmcgaW50IHNpZ25hbDsKKyBpbnQgcmVzZXJ2ZWQ7Cisgc3RydWN0IHB0X3JlZ3MgKiB1X2FyMDsKKworIHVuc2lnbmVkIGxvbmcgbWFnaWM7CisgY2hhciB1X2NvbW1bMzJdOworIGludCB1X2RlYnVncmVnWzhdOworIHN0cnVjdCB1c2VyX2ZwIHVfZnA7Cisgc3RydWN0IHVzZXJfZnBfc3RydWN0ICogdV9mcDA7CisKK307CisjZGVmaW5lIE5CUEcgUEFHRV9TSVpFCisjZGVmaW5lIFVQQUdFUyAxCisjZGVmaW5lIEhPU1RfVEVYVF9TVEFSVF9BRERSICh1LnN0YXJ0X2NvZGUpCisjZGVmaW5lIEhPU1RfU1RBQ0tfRU5EX0FERFIgKHUuc3RhcnRfc3RhY2sgKyB1LnVfc3NpemUgKiBOQlBHKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS92Z2EuaCBiL2xpYmMva2VybmVsL2FyY2gtYXJtL2FzbS92Z2EuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ODc1ZGJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvYXJjaC1hcm0vYXNtL3ZnYS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQVNNQVJNX1ZHQV9ICisjZGVmaW5lIEFTTUFSTV9WR0FfSAorCisjaW5jbHVkZSA8YXNtL2hhcmR3YXJlLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgVkdBX01BUF9NRU0oeCxzKSAoUENJTUVNX0JBU0UgKyAoeCkpCisKKyNkZWZpbmUgdmdhX3JlYWRiKHgpICgqKCh2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopeCkpCisjZGVmaW5lIHZnYV93cml0ZWIoeCx5KSAoKigodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKXkpID0gKHgpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy80bGV2ZWwtZml4dXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MWFlN2Y0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljLzRsZXZlbC1maXh1cC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgXzRMRVZFTF9GSVhVUF9ICisjZGVmaW5lIF80TEVWRUxfRklYVVBfSAorCisjZGVmaW5lIF9fQVJDSF9IQVNfNExFVkVMX0hBQ0sKKyNkZWZpbmUgX19QQUdFVEFCTEVfUFVEX0ZPTERFRAorCisjZGVmaW5lIFBVRF9TSVpFIFBHRElSX1NJWkUKKyNkZWZpbmUgUFVEX01BU0sgUEdESVJfTUFTSworI2RlZmluZSBQVFJTX1BFUl9QVUQgMQorCisjZGVmaW5lIHB1ZF90IHBnZF90CisKKyNkZWZpbmUgcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHJlc3MpICAgKCh1bmxpa2VseShwZ2Rfbm9uZSgqKHB1ZCkpKSAmJiBfX3BtZF9hbGxvYyhtbSwgcHVkLCBhZGRyZXNzKSk/ICAgTlVMTDogcG1kX29mZnNldChwdWQsIGFkZHJlc3MpKQorCisjZGVmaW5lIHB1ZF9hbGxvYyhtbSwgcGdkLCBhZGRyZXNzKSAocGdkKQorI2RlZmluZSBwdWRfb2Zmc2V0KHBnZCwgc3RhcnQpIChwZ2QpCisjZGVmaW5lIHB1ZF9ub25lKHB1ZCkgMAorI2RlZmluZSBwdWRfYmFkKHB1ZCkgMAorI2RlZmluZSBwdWRfcHJlc2VudChwdWQpIDEKKyNkZWZpbmUgcHVkX0VSUk9SKHB1ZCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwdWRfY2xlYXIocHVkKSBwZ2RfY2xlYXIocHVkKQorCisjdW5kZWYgcHVkX2ZyZWVfdGxiCisjZGVmaW5lIHB1ZF9mcmVlX3RsYih0bGIsIHgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcHVkX2ZyZWUoeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3B1ZF9mcmVlX3RsYih0bGIsIHgpIGRvIHsgfSB3aGlsZSAoMCkKKworI3VuZGVmIHB1ZF9hZGRyX2VuZAorI2RlZmluZSBwdWRfYWRkcl9lbmQoYWRkciwgZW5kKSAoZW5kKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9hdWRpdF9kaXJfd3JpdGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzI3YjU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2F1ZGl0X2Rpcl93cml0ZS5oCkBAIC0wLDAgKzEsMTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvX19mZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZDEzNWJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9fX2Zmcy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19fX0ZGU19IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX19fRkZTX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2F0b21pYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZjUzYmE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9hdG9taWMuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfQVRPTUlDX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfQVRPTUlDX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBCSVRPUF9NQVNLKG5yKSAoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCisjZGVmaW5lIEJJVE9QX1dPUkQobnIpICgobnIpIC8gQklUU19QRVJfTE9ORykKKworI2RlZmluZSBfYXRvbWljX3NwaW5fbG9ja19pcnFzYXZlKGwsZikgZG8geyBsb2NhbF9pcnFfc2F2ZShmKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX2F0b21pY19zcGluX3VubG9ja19pcnFyZXN0b3JlKGwsZikgZG8geyBsb2NhbF9pcnFfcmVzdG9yZShmKTsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2Zmei5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mZnouaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOGRhMjcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mZnouaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfRkZaX0hfCisjZGVmaW5lIF9BU01fR0VORVJJQ19CSVRPUFNfRkZaX0hfCisKKyNkZWZpbmUgZmZ6KHgpIF9fZmZzKH4oeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2ZpbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzYxY2ZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9maW5kLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0ZJTkRfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19GSU5EX0hfCisKKyNkZWZpbmUgZmluZF9maXJzdF9iaXQoYWRkciwgc2l6ZSkgZmluZF9uZXh0X2JpdCgoYWRkciksIChzaXplKSwgMCkKKyNkZWZpbmUgZmluZF9maXJzdF96ZXJvX2JpdChhZGRyLCBzaXplKSBmaW5kX25leHRfemVyb19iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGFkYmYzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX0ZMU19IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0ZMU19IXworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvZmxzNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjc3MDk4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9mbHM2NC5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0JJVE9QU19GTFM2NF9IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfQklUT1BTX0ZMUzY0X0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2xlLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL2xlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjYTk3MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9iaXRvcHMvbGUuaApAQCAtMCwwICsxLDUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CSVRPUFNfTEVfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19MRV9IXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIEJJVE9QX1dPUkQobnIpICgobnIpIC8gQklUU19QRVJfTE9ORykKKyNkZWZpbmUgQklUT1BfTEVfU1dJWlpMRSAoKEJJVFNfUEVSX0xPTkctMSkgJiB+MHg3KQorCisjaWZkZWYgX19MSVRUTEVfRU5ESUFOCisKKyNkZWZpbmUgZ2VuZXJpY190ZXN0X2xlX2JpdChuciwgYWRkcikgdGVzdF9iaXQobnIsIGFkZHIpCisjZGVmaW5lIGdlbmVyaWNfX19zZXRfbGVfYml0KG5yLCBhZGRyKSBfX3NldF9iaXQobnIsIGFkZHIpCisjZGVmaW5lIGdlbmVyaWNfX19jbGVhcl9sZV9iaXQobnIsIGFkZHIpIF9fY2xlYXJfYml0KG5yLCBhZGRyKQorCisjZGVmaW5lIGdlbmVyaWNfdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgdGVzdF9hbmRfc2V0X2JpdChuciwgYWRkcikKKyNkZWZpbmUgZ2VuZXJpY190ZXN0X2FuZF9jbGVhcl9sZV9iaXQobnIsIGFkZHIpIHRlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikKKworI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgX190ZXN0X2FuZF9zZXRfYml0KG5yLCBhZGRyKQorI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfY2xlYXJfbGVfYml0KG5yLCBhZGRyKSBfX3Rlc3RfYW5kX2NsZWFyX2JpdChuciwgYWRkcikKKworI2RlZmluZSBnZW5lcmljX2ZpbmRfbmV4dF96ZXJvX2xlX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpIGZpbmRfbmV4dF96ZXJvX2JpdChhZGRyLCBzaXplLCBvZmZzZXQpCisKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOKQorCisjZGVmaW5lIGdlbmVyaWNfdGVzdF9sZV9iaXQobnIsIGFkZHIpICAgdGVzdF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKKyNkZWZpbmUgZ2VuZXJpY19fX3NldF9sZV9iaXQobnIsIGFkZHIpICAgX19zZXRfYml0KChucikgXiBCSVRPUF9MRV9TV0laWkxFLCAoYWRkcikpCisjZGVmaW5lIGdlbmVyaWNfX19jbGVhcl9sZV9iaXQobnIsIGFkZHIpICAgX19jbGVhcl9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKKworI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX3NldF9sZV9iaXQobnIsIGFkZHIpICAgdGVzdF9hbmRfc2V0X2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorI2RlZmluZSBnZW5lcmljX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICB0ZXN0X2FuZF9jbGVhcl9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKKworI2RlZmluZSBnZW5lcmljX19fdGVzdF9hbmRfc2V0X2xlX2JpdChuciwgYWRkcikgICBfX3Rlc3RfYW5kX3NldF9iaXQoKG5yKSBeIEJJVE9QX0xFX1NXSVpaTEUsIChhZGRyKSkKKyNkZWZpbmUgZ2VuZXJpY19fX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChuciwgYWRkcikgICBfX3Rlc3RfYW5kX2NsZWFyX2JpdCgobnIpIF4gQklUT1BfTEVfU1dJWlpMRSwgKGFkZHIpKQorCisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisKKyNkZWZpbmUgZ2VuZXJpY19maW5kX2ZpcnN0X3plcm9fbGVfYml0KGFkZHIsIHNpemUpICAgZ2VuZXJpY19maW5kX25leHRfemVyb19sZV9iaXQoKGFkZHIpLCAoc2l6ZSksIDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYml0b3BzL25vbi1hdG9taWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MjdmNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2JpdG9wcy9ub24tYXRvbWljLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfQklUT1BTX05PTl9BVE9NSUNfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX0JJVE9QU19OT05fQVRPTUlDX0hfCisKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBCSVRPUF9NQVNLKG5yKSAoMVVMIDw8ICgobnIpICUgQklUU19QRVJfTE9ORykpCisjZGVmaW5lIEJJVE9QX1dPUkQobnIpICgobnIpIC8gQklUU19QRVJfTE9ORykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYnVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkxYTEzNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9idWcuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19CVUdfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfQlVHX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZm5kZWYgSEFWRV9BUkNIX0JVRworI2RlZmluZSBCVUcoKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX0JVR19PTgorI2RlZmluZSBCVUdfT04oY29uZGl0aW9uKSBkbyB7IGlmIChjb25kaXRpb24pIDsgfSB3aGlsZSgwKQorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1dBUk5fT04KKyNkZWZpbmUgV0FSTl9PTihjb25kaXRpb24pIGRvIHsgaWYgKGNvbmRpdGlvbikgOyB9IHdoaWxlKDApCisjZW5kaWYKKworI2RlZmluZSBXQVJOX09OX09OQ0UoY29uZGl0aW9uKSAgKHsgICBzdGF0aWMgaW50IF9fd2Fybl9vbmNlID0gMTsgICBpbnQgX19yZXQgPSAwOyAgICAgaWYgKHVubGlrZWx5KChjb25kaXRpb24pICYmIF9fd2Fybl9vbmNlKSkgeyAgIF9fd2Fybl9vbmNlID0gMDsgICBXQVJOX09OKDEpOyAgIF9fcmV0ID0gMTsgICB9ICAgX19yZXQ7ICB9KQorCisjZGVmaW5lIFdBUk5fT05fU01QKHgpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvY3B1dGltZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2NwdXRpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNDg2Yjg3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2NwdXRpbWUuaApAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19DUFVUSU1FX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0NQVVRJTUVfSAorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGNwdXRpbWVfdDsKKworI2RlZmluZSBjcHV0aW1lX3plcm8gKDBVTCkKKyNkZWZpbmUgY3B1dGltZV9tYXggKCh+MFVMID4+IDEpIC0gMSkKKyNkZWZpbmUgY3B1dGltZV9hZGQoX19hLCBfX2IpICgoX19hKSArIChfX2IpKQorI2RlZmluZSBjcHV0aW1lX3N1YihfX2EsIF9fYikgKChfX2EpIC0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZGl2KF9fYSwgX19uKSAoKF9fYSkgLyAoX19uKSkKKyNkZWZpbmUgY3B1dGltZV9oYWx2ZShfX2EpICgoX19hKSA+PiAxKQorI2RlZmluZSBjcHV0aW1lX2VxKF9fYSwgX19iKSAoKF9fYSkgPT0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfZ3QoX19hLCBfX2IpICgoX19hKSA+IChfX2IpKQorI2RlZmluZSBjcHV0aW1lX2dlKF9fYSwgX19iKSAoKF9fYSkgPj0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfbHQoX19hLCBfX2IpICgoX19hKSA8IChfX2IpKQorI2RlZmluZSBjcHV0aW1lX2xlKF9fYSwgX19iKSAoKF9fYSkgPD0gKF9fYikpCisjZGVmaW5lIGNwdXRpbWVfdG9famlmZmllcyhfX2N0KSAoX19jdCkKKyNkZWZpbmUgamlmZmllc190b19jcHV0aW1lKF9faHopIChfX2h6KQorCit0eXBlZGVmIHU2NCBjcHV0aW1lNjRfdDsKKworI2RlZmluZSBjcHV0aW1lNjRfemVybyAoMFVMTCkKKyNkZWZpbmUgY3B1dGltZTY0X2FkZChfX2EsIF9fYikgKChfX2EpICsgKF9fYikpCisjZGVmaW5lIGNwdXRpbWU2NF9zdWIoX19hLCBfX2IpICgoX19hKSAtIChfX2IpKQorI2RlZmluZSBjcHV0aW1lNjRfdG9famlmZmllczY0KF9fY3QpIChfX2N0KQorI2RlZmluZSBqaWZmaWVzNjRfdG9fY3B1dGltZTY0KF9famlmKSAoX19qaWYpCisjZGVmaW5lIGNwdXRpbWVfdG9fY3B1dGltZTY0KF9fY3QpICgodTY0KSBfX2N0KQorCisjZGVmaW5lIGNwdXRpbWVfdG9fbXNlY3MoX19jdCkgamlmZmllc190b19tc2VjcyhfX2N0KQorI2RlZmluZSBtc2Vjc190b19jcHV0aW1lKF9fbXNlY3MpIG1zZWNzX3RvX2ppZmZpZXMoX19tc2VjcykKKworI2RlZmluZSBjcHV0aW1lX3RvX3NlY3MoamlmKSAoKGppZikgLyBIWikKKyNkZWZpbmUgc2Vjc190b19jcHV0aW1lKHNlYykgKChzZWMpICogSFopCisKKyNkZWZpbmUgdGltZXNwZWNfdG9fY3B1dGltZShfX3ZhbCkgdGltZXNwZWNfdG9famlmZmllcyhfX3ZhbCkKKyNkZWZpbmUgY3B1dGltZV90b190aW1lc3BlYyhfX2N0LF9fdmFsKSBqaWZmaWVzX3RvX3RpbWVzcGVjKF9fY3QsX192YWwpCisKKyNkZWZpbmUgdGltZXZhbF90b19jcHV0aW1lKF9fdmFsKSB0aW1ldmFsX3RvX2ppZmZpZXMoX192YWwpCisjZGVmaW5lIGNwdXRpbWVfdG9fdGltZXZhbChfX2N0LF9fdmFsKSBqaWZmaWVzX3RvX3RpbWV2YWwoX19jdCxfX3ZhbCkKKworI2RlZmluZSBjcHV0aW1lX3RvX2Nsb2NrX3QoX19jdCkgamlmZmllc190b19jbG9ja190KF9fY3QpCisjZGVmaW5lIGNsb2NrX3RfdG9fY3B1dGltZShfX3gpIGNsb2NrX3RfdG9famlmZmllcyhfX3gpCisKKyNkZWZpbmUgY3B1dGltZTY0X3RvX2Nsb2NrX3QoX19jdCkgamlmZmllc182NF90b19jbG9ja190KF9fY3QpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2VtZXJnZW5jeS1yZXN0YXJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZW1lcmdlbmN5LXJlc3RhcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MTljNjgyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2VtZXJnZW5jeS1yZXN0YXJ0LmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfRU1FUkdFTkNZX1JFU1RBUlRfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfRU1FUkdFTkNZX1JFU1RBUlRfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby1iYXNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmYjRhMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX0VSUk5PX0JBU0VfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfRVJSTk9fQkFTRV9ICisKKyNkZWZpbmUgRVBFUk0gMSAgCisjZGVmaW5lIEVOT0VOVCAyICAKKyNkZWZpbmUgRVNSQ0ggMyAgCisjZGVmaW5lIEVJTlRSIDQgIAorI2RlZmluZSBFSU8gNSAgCisjZGVmaW5lIEVOWElPIDYgIAorI2RlZmluZSBFMkJJRyA3ICAKKyNkZWZpbmUgRU5PRVhFQyA4ICAKKyNkZWZpbmUgRUJBREYgOSAgCisjZGVmaW5lIEVDSElMRCAxMCAgCisjZGVmaW5lIEVBR0FJTiAxMSAgCisjZGVmaW5lIEVOT01FTSAxMiAgCisjZGVmaW5lIEVBQ0NFUyAxMyAgCisjZGVmaW5lIEVGQVVMVCAxNCAgCisjZGVmaW5lIEVOT1RCTEsgMTUgIAorI2RlZmluZSBFQlVTWSAxNiAgCisjZGVmaW5lIEVFWElTVCAxNyAgCisjZGVmaW5lIEVYREVWIDE4ICAKKyNkZWZpbmUgRU5PREVWIDE5ICAKKyNkZWZpbmUgRU5PVERJUiAyMCAgCisjZGVmaW5lIEVJU0RJUiAyMSAgCisjZGVmaW5lIEVJTlZBTCAyMiAgCisjZGVmaW5lIEVORklMRSAyMyAgCisjZGVmaW5lIEVNRklMRSAyNCAgCisjZGVmaW5lIEVOT1RUWSAyNSAgCisjZGVmaW5lIEVUWFRCU1kgMjYgIAorI2RlZmluZSBFRkJJRyAyNyAgCisjZGVmaW5lIEVOT1NQQyAyOCAgCisjZGVmaW5lIEVTUElQRSAyOSAgCisjZGVmaW5lIEVST0ZTIDMwICAKKyNkZWZpbmUgRU1MSU5LIDMxICAKKyNkZWZpbmUgRVBJUEUgMzIgIAorI2RlZmluZSBFRE9NIDMzICAKKyNkZWZpbmUgRVJBTkdFIDM0ICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExZGQwMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZXJybm8uaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfRVJSTk9fSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfRVJSTk9fSAorCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZXJybm8tYmFzZS5oPgorCisjZGVmaW5lIEVERUFETEsgMzUgIAorI2RlZmluZSBFTkFNRVRPT0xPTkcgMzYgIAorI2RlZmluZSBFTk9MQ0sgMzcgIAorI2RlZmluZSBFTk9TWVMgMzggIAorI2RlZmluZSBFTk9URU1QVFkgMzkgIAorI2RlZmluZSBFTE9PUCA0MCAgCisjZGVmaW5lIEVXT1VMREJMT0NLIEVBR0FJTiAgCisjZGVmaW5lIEVOT01TRyA0MiAgCisjZGVmaW5lIEVJRFJNIDQzICAKKyNkZWZpbmUgRUNIUk5HIDQ0ICAKKyNkZWZpbmUgRUwyTlNZTkMgNDUgIAorI2RlZmluZSBFTDNITFQgNDYgIAorI2RlZmluZSBFTDNSU1QgNDcgIAorI2RlZmluZSBFTE5STkcgNDggIAorI2RlZmluZSBFVU5BVENIIDQ5ICAKKyNkZWZpbmUgRU5PQ1NJIDUwICAKKyNkZWZpbmUgRUwySExUIDUxICAKKyNkZWZpbmUgRUJBREUgNTIgIAorI2RlZmluZSBFQkFEUiA1MyAgCisjZGVmaW5lIEVYRlVMTCA1NCAgCisjZGVmaW5lIEVOT0FOTyA1NSAgCisjZGVmaW5lIEVCQURSUUMgNTYgIAorI2RlZmluZSBFQkFEU0xUIDU3ICAKKworI2RlZmluZSBFREVBRExPQ0sgRURFQURMSworCisjZGVmaW5lIEVCRk9OVCA1OSAgCisjZGVmaW5lIEVOT1NUUiA2MCAgCisjZGVmaW5lIEVOT0RBVEEgNjEgIAorI2RlZmluZSBFVElNRSA2MiAgCisjZGVmaW5lIEVOT1NSIDYzICAKKyNkZWZpbmUgRU5PTkVUIDY0ICAKKyNkZWZpbmUgRU5PUEtHIDY1ICAKKyNkZWZpbmUgRVJFTU9URSA2NiAgCisjZGVmaW5lIEVOT0xJTksgNjcgIAorI2RlZmluZSBFQURWIDY4ICAKKyNkZWZpbmUgRVNSTU5UIDY5ICAKKyNkZWZpbmUgRUNPTU0gNzAgIAorI2RlZmluZSBFUFJPVE8gNzEgIAorI2RlZmluZSBFTVVMVElIT1AgNzIgIAorI2RlZmluZSBFRE9URE9UIDczICAKKyNkZWZpbmUgRUJBRE1TRyA3NCAgCisjZGVmaW5lIEVPVkVSRkxPVyA3NSAgCisjZGVmaW5lIEVOT1RVTklRIDc2ICAKKyNkZWZpbmUgRUJBREZEIDc3ICAKKyNkZWZpbmUgRVJFTUNIRyA3OCAgCisjZGVmaW5lIEVMSUJBQ0MgNzkgIAorI2RlZmluZSBFTElCQkFEIDgwICAKKyNkZWZpbmUgRUxJQlNDTiA4MSAgCisjZGVmaW5lIEVMSUJNQVggODIgIAorI2RlZmluZSBFTElCRVhFQyA4MyAgCisjZGVmaW5lIEVJTFNFUSA4NCAgCisjZGVmaW5lIEVSRVNUQVJUIDg1ICAKKyNkZWZpbmUgRVNUUlBJUEUgODYgIAorI2RlZmluZSBFVVNFUlMgODcgIAorI2RlZmluZSBFTk9UU09DSyA4OCAgCisjZGVmaW5lIEVERVNUQUREUlJFUSA4OSAgCisjZGVmaW5lIEVNU0dTSVpFIDkwICAKKyNkZWZpbmUgRVBST1RPVFlQRSA5MSAgCisjZGVmaW5lIEVOT1BST1RPT1BUIDkyICAKKyNkZWZpbmUgRVBST1RPTk9TVVBQT1JUIDkzICAKKyNkZWZpbmUgRVNPQ0tUTk9TVVBQT1JUIDk0ICAKKyNkZWZpbmUgRU9QTk9UU1VQUCA5NSAgCisjZGVmaW5lIEVQRk5PU1VQUE9SVCA5NiAgCisjZGVmaW5lIEVBRk5PU1VQUE9SVCA5NyAgCisjZGVmaW5lIEVBRERSSU5VU0UgOTggIAorI2RlZmluZSBFQUREUk5PVEFWQUlMIDk5ICAKKyNkZWZpbmUgRU5FVERPV04gMTAwICAKKyNkZWZpbmUgRU5FVFVOUkVBQ0ggMTAxICAKKyNkZWZpbmUgRU5FVFJFU0VUIDEwMiAgCisjZGVmaW5lIEVDT05OQUJPUlRFRCAxMDMgIAorI2RlZmluZSBFQ09OTlJFU0VUIDEwNCAgCisjZGVmaW5lIEVOT0JVRlMgMTA1ICAKKyNkZWZpbmUgRUlTQ09OTiAxMDYgIAorI2RlZmluZSBFTk9UQ09OTiAxMDcgIAorI2RlZmluZSBFU0hVVERPV04gMTA4ICAKKyNkZWZpbmUgRVRPT01BTllSRUZTIDEwOSAgCisjZGVmaW5lIEVUSU1FRE9VVCAxMTAgIAorI2RlZmluZSBFQ09OTlJFRlVTRUQgMTExICAKKyNkZWZpbmUgRUhPU1RET1dOIDExMiAgCisjZGVmaW5lIEVIT1NUVU5SRUFDSCAxMTMgIAorI2RlZmluZSBFQUxSRUFEWSAxMTQgIAorI2RlZmluZSBFSU5QUk9HUkVTUyAxMTUgIAorI2RlZmluZSBFU1RBTEUgMTE2ICAKKyNkZWZpbmUgRVVDTEVBTiAxMTcgIAorI2RlZmluZSBFTk9UTkFNIDExOCAgCisjZGVmaW5lIEVOQVZBSUwgMTE5ICAKKyNkZWZpbmUgRUlTTkFNIDEyMCAgCisjZGVmaW5lIEVSRU1PVEVJTyAxMjEgIAorI2RlZmluZSBFRFFVT1QgMTIyICAKKworI2RlZmluZSBFTk9NRURJVU0gMTIzICAKKyNkZWZpbmUgRU1FRElVTVRZUEUgMTI0ICAKKyNkZWZpbmUgRUNBTkNFTEVEIDEyNSAgCisjZGVmaW5lIEVOT0tFWSAxMjYgIAorI2RlZmluZSBFS0VZRVhQSVJFRCAxMjcgIAorI2RlZmluZSBFS0VZUkVWT0tFRCAxMjggIAorI2RlZmluZSBFS0VZUkVKRUNURUQgMTI5ICAKKworI2RlZmluZSBFT1dORVJERUFEIDEzMCAgCisjZGVmaW5lIEVOT1RSRUNPVkVSQUJMRSAxMzEgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mY250bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2ZjbnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTUzYjUzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mY250bC5oCkBAIC0wLDAgKzEsMTQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19GQ05UTF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19GQ05UTF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE9fQUNDTU9ERSAwMDAwMDAwMworI2RlZmluZSBPX1JET05MWSAwMDAwMDAwMAorI2RlZmluZSBPX1dST05MWSAwMDAwMDAwMQorI2RlZmluZSBPX1JEV1IgMDAwMDAwMDIKKyNpZm5kZWYgT19DUkVBVAorI2RlZmluZSBPX0NSRUFUIDAwMDAwMTAwICAKKyNlbmRpZgorI2lmbmRlZiBPX0VYQ0wKKyNkZWZpbmUgT19FWENMIDAwMDAwMjAwICAKKyNlbmRpZgorI2lmbmRlZiBPX05PQ1RUWQorI2RlZmluZSBPX05PQ1RUWSAwMDAwMDQwMCAgCisjZW5kaWYKKyNpZm5kZWYgT19UUlVOQworI2RlZmluZSBPX1RSVU5DIDAwMDAxMDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX0FQUEVORAorI2RlZmluZSBPX0FQUEVORCAwMDAwMjAwMAorI2VuZGlmCisjaWZuZGVmIE9fTk9OQkxPQ0sKKyNkZWZpbmUgT19OT05CTE9DSyAwMDAwNDAwMAorI2VuZGlmCisjaWZuZGVmIE9fU1lOQworI2RlZmluZSBPX1NZTkMgMDAwMTAwMDAKKyNlbmRpZgorI2lmbmRlZiBGQVNZTkMKKyNkZWZpbmUgRkFTWU5DIDAwMDIwMDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX0RJUkVDVAorI2RlZmluZSBPX0RJUkVDVCAwMDA0MDAwMCAgCisjZW5kaWYKKyNpZm5kZWYgT19MQVJHRUZJTEUKKyNkZWZpbmUgT19MQVJHRUZJTEUgMDAxMDAwMDAKKyNlbmRpZgorI2lmbmRlZiBPX0RJUkVDVE9SWQorI2RlZmluZSBPX0RJUkVDVE9SWSAwMDIwMDAwMCAgCisjZW5kaWYKKyNpZm5kZWYgT19OT0ZPTExPVworI2RlZmluZSBPX05PRk9MTE9XIDAwNDAwMDAwICAKKyNlbmRpZgorI2lmbmRlZiBPX05PQVRJTUUKKyNkZWZpbmUgT19OT0FUSU1FIDAxMDAwMDAwCisjZW5kaWYKKyNpZm5kZWYgT19OREVMQVkKKyNkZWZpbmUgT19OREVMQVkgT19OT05CTE9DSworI2VuZGlmCisKKyNkZWZpbmUgRl9EVVBGRCAwICAKKyNkZWZpbmUgRl9HRVRGRCAxICAKKyNkZWZpbmUgRl9TRVRGRCAyICAKKyNkZWZpbmUgRl9HRVRGTCAzICAKKyNkZWZpbmUgRl9TRVRGTCA0ICAKKyNpZm5kZWYgRl9HRVRMSworI2RlZmluZSBGX0dFVExLIDUKKyNkZWZpbmUgRl9TRVRMSyA2CisjZGVmaW5lIEZfU0VUTEtXIDcKKyNlbmRpZgorI2lmbmRlZiBGX1NFVE9XTgorI2RlZmluZSBGX1NFVE9XTiA4ICAKKyNkZWZpbmUgRl9HRVRPV04gOSAgCisjZW5kaWYKKyNpZm5kZWYgRl9TRVRTSUcKKyNkZWZpbmUgRl9TRVRTSUcgMTAgIAorI2RlZmluZSBGX0dFVFNJRyAxMSAgCisjZW5kaWYKKworI2RlZmluZSBGRF9DTE9FWEVDIDEgIAorCisjaWZuZGVmIEZfUkRMQ0sKKyNkZWZpbmUgRl9SRExDSyAwCisjZGVmaW5lIEZfV1JMQ0sgMQorI2RlZmluZSBGX1VOTENLIDIKKyNlbmRpZgorCisjaWZuZGVmIEZfRVhMQ0sKKyNkZWZpbmUgRl9FWExDSyA0ICAKKyNkZWZpbmUgRl9TSExDSyA4ICAKKyNlbmRpZgorCisjaWZuZGVmIEZfSU5QUk9HUkVTUworI2RlZmluZSBGX0lOUFJPR1JFU1MgMTYKKyNlbmRpZgorCisjZGVmaW5lIExPQ0tfU0ggMSAgCisjZGVmaW5lIExPQ0tfRVggMiAgCisjZGVmaW5lIExPQ0tfTkIgNCAgCisjZGVmaW5lIExPQ0tfVU4gOCAgCisKKyNkZWZpbmUgTE9DS19NQU5EIDMyICAKKyNkZWZpbmUgTE9DS19SRUFEIDY0ICAKKyNkZWZpbmUgTE9DS19XUklURSAxMjggIAorI2RlZmluZSBMT0NLX1JXIDE5MiAgCisKKyNkZWZpbmUgRl9MSU5VWF9TUEVDSUZJQ19CQVNFIDEwMjQKKworI2lmbmRlZiBIQVZFX0FSQ0hfU1RSVUNUX0ZMT0NLCisjaWZuZGVmIF9fQVJDSF9GTE9DS19QQUQKKyNkZWZpbmUgX19BUkNIX0ZMT0NLX1BBRAorI2VuZGlmCisKK3N0cnVjdCBmbG9jayB7Cisgc2hvcnQgbF90eXBlOworIHNob3J0IGxfd2hlbmNlOworIG9mZl90IGxfc3RhcnQ7Cisgb2ZmX3QgbF9sZW47CisgcGlkX3QgbF9waWQ7CisgX19BUkNIX0ZMT0NLX1BBRAorfTsKKyNlbmRpZgorCisjaWZuZGVmIEZfR0VUTEs2NAorI2RlZmluZSBGX0dFVExLNjQgMTIgIAorI2RlZmluZSBGX1NFVExLNjQgMTMKKyNkZWZpbmUgRl9TRVRMS1c2NCAxNAorI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1NUUlVDVF9GTE9DSzY0CisjaWZuZGVmIF9fQVJDSF9GTE9DSzY0X1BBRAorI2RlZmluZSBfX0FSQ0hfRkxPQ0s2NF9QQUQKKyNlbmRpZgorCitzdHJ1Y3QgZmxvY2s2NCB7Cisgc2hvcnQgbF90eXBlOworIHNob3J0IGxfd2hlbmNlOworIGxvZmZfdCBsX3N0YXJ0OworIGxvZmZfdCBsX2xlbjsKKyBwaWRfdCBsX3BpZDsKKyBfX0FSQ0hfRkxPQ0s2NF9QQUQKK307CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZnV0ZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9mdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1ZDNhZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvZnV0ZXguaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19GVVRFWF9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19GVVRFWF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lvY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmEyYjhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lvY3RsLmgKQEAgLTAsMCArMSw1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfSU9DVExfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfSU9DVExfSAorCisjZGVmaW5lIF9JT0NfTlJCSVRTIDgKKyNkZWZpbmUgX0lPQ19UWVBFQklUUyA4CisjZGVmaW5lIF9JT0NfU0laRUJJVFMgMTQKKyNkZWZpbmUgX0lPQ19ESVJCSVRTIDIKKworI2RlZmluZSBfSU9DX05STUFTSyAoKDEgPDwgX0lPQ19OUkJJVFMpLTEpCisjZGVmaW5lIF9JT0NfVFlQRU1BU0sgKCgxIDw8IF9JT0NfVFlQRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfU0laRU1BU0sgKCgxIDw8IF9JT0NfU0laRUJJVFMpLTEpCisjZGVmaW5lIF9JT0NfRElSTUFTSyAoKDEgPDwgX0lPQ19ESVJCSVRTKS0xKQorCisjZGVmaW5lIF9JT0NfTlJTSElGVCAwCisjZGVmaW5lIF9JT0NfVFlQRVNISUZUIChfSU9DX05SU0hJRlQrX0lPQ19OUkJJVFMpCisjZGVmaW5lIF9JT0NfU0laRVNISUZUIChfSU9DX1RZUEVTSElGVCtfSU9DX1RZUEVCSVRTKQorI2RlZmluZSBfSU9DX0RJUlNISUZUIChfSU9DX1NJWkVTSElGVCtfSU9DX1NJWkVCSVRTKQorCisjZGVmaW5lIF9JT0NfTk9ORSAwVQorI2RlZmluZSBfSU9DX1dSSVRFIDFVCisjZGVmaW5lIF9JT0NfUkVBRCAyVQorCisjZGVmaW5lIF9JT0MoZGlyLHR5cGUsbnIsc2l6ZSkgICAoKChkaXIpIDw8IF9JT0NfRElSU0hJRlQpIHwgICAoKHR5cGUpIDw8IF9JT0NfVFlQRVNISUZUKSB8ICAgKChucikgPDwgX0lPQ19OUlNISUZUKSB8ICAgKChzaXplKSA8PCBfSU9DX1NJWkVTSElGVCkpCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgX19pbnZhbGlkX3NpemVfYXJndW1lbnRfZm9yX0lPQzsKKyNkZWZpbmUgX0lPQ19UWVBFQ0hFQ0sodCkgICAoKHNpemVvZih0KSA9PSBzaXplb2YodFsxXSkgJiYgICBzaXplb2YodCkgPCAoMSA8PCBfSU9DX1NJWkVCSVRTKSkgPyAgIHNpemVvZih0KSA6IF9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MpCisKKyNkZWZpbmUgX0lPKHR5cGUsbnIpIF9JT0MoX0lPQ19OT05FLCh0eXBlKSwobnIpLDApCisjZGVmaW5lIF9JT1IodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRCwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9XKHR5cGUsbnIsc2l6ZSkgX0lPQyhfSU9DX1dSSVRFLCh0eXBlKSwobnIpLChfSU9DX1RZUEVDSEVDSyhzaXplKSkpCisjZGVmaW5lIF9JT1dSKHR5cGUsbnIsc2l6ZSkgX0lPQyhfSU9DX1JFQUR8X0lPQ19XUklURSwodHlwZSksKG5yKSwoX0lPQ19UWVBFQ0hFQ0soc2l6ZSkpKQorI2RlZmluZSBfSU9SX0JBRCh0eXBlLG5yLHNpemUpIF9JT0MoX0lPQ19SRUFELCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKyNkZWZpbmUgX0lPV19CQUQodHlwZSxucixzaXplKSBfSU9DKF9JT0NfV1JJVEUsKHR5cGUpLChuciksc2l6ZW9mKHNpemUpKQorI2RlZmluZSBfSU9XUl9CQUQodHlwZSxucixzaXplKSBfSU9DKF9JT0NfUkVBRHxfSU9DX1dSSVRFLCh0eXBlKSwobnIpLHNpemVvZihzaXplKSkKKworI2RlZmluZSBfSU9DX0RJUihucikgKCgobnIpID4+IF9JT0NfRElSU0hJRlQpICYgX0lPQ19ESVJNQVNLKQorI2RlZmluZSBfSU9DX1RZUEUobnIpICgoKG5yKSA+PiBfSU9DX1RZUEVTSElGVCkgJiBfSU9DX1RZUEVNQVNLKQorI2RlZmluZSBfSU9DX05SKG5yKSAoKChucikgPj4gX0lPQ19OUlNISUZUKSAmIF9JT0NfTlJNQVNLKQorI2RlZmluZSBfSU9DX1NJWkUobnIpICgoKG5yKSA+PiBfSU9DX1NJWkVTSElGVCkgJiBfSU9DX1NJWkVNQVNLKQorCisjZGVmaW5lIElPQ19JTiAoX0lPQ19XUklURSA8PCBfSU9DX0RJUlNISUZUKQorI2RlZmluZSBJT0NfT1VUIChfSU9DX1JFQUQgPDwgX0lPQ19ESVJTSElGVCkKKyNkZWZpbmUgSU9DX0lOT1VUICgoX0lPQ19XUklURXxfSU9DX1JFQUQpIDw8IF9JT0NfRElSU0hJRlQpCisjZGVmaW5lIElPQ1NJWkVfTUFTSyAoX0lPQ19TSVpFTUFTSyA8PCBfSU9DX1NJWkVTSElGVCkKKyNkZWZpbmUgSU9DU0laRV9TSElGVCAoX0lPQ19TSVpFU0hJRlQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lwYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU3NjU3YTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvaXBjLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfSVBDX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX0lQQ19ICisKK3N0cnVjdCBpcGNfa2x1ZGdlIHsKKyBzdHJ1Y3QgbXNnYnVmIF9fdXNlciAqbXNncDsKKyBsb25nIG1zZ3R5cDsKK307CisKKyNkZWZpbmUgU0VNT1AgMQorI2RlZmluZSBTRU1HRVQgMgorI2RlZmluZSBTRU1DVEwgMworI2RlZmluZSBTRU1USU1FRE9QIDQKKyNkZWZpbmUgTVNHU05EIDExCisjZGVmaW5lIE1TR1JDViAxMgorI2RlZmluZSBNU0dHRVQgMTMKKyNkZWZpbmUgTVNHQ1RMIDE0CisjZGVmaW5lIFNITUFUIDIxCisjZGVmaW5lIFNITURUIDIyCisjZGVmaW5lIFNITUdFVCAyMworI2RlZmluZSBTSE1DVEwgMjQKKworI2RlZmluZSBESVBDIDI1CisKKyNkZWZpbmUgSVBDQ0FMTCh2ZXJzaW9uLG9wKSAoKHZlcnNpb24pPDwxNiB8IChvcCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2xvY2FsLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbG9jYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYWUwZDU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL2xvY2FsLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfTE9DQUxfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfTE9DQUxfSAorCisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKwordHlwZWRlZiBzdHJ1Y3QKK3sKKyBhdG9taWNfbG9uZ190IGE7Cit9IGxvY2FsX3Q7CisKKyNkZWZpbmUgTE9DQUxfSU5JVChpKSB7IEFUT01JQ19MT05HX0lOSVQoaSkgfQorCisjZGVmaW5lIGxvY2FsX3JlYWQobCkgYXRvbWljX2xvbmdfcmVhZCgmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9zZXQobCxpKSBhdG9taWNfbG9uZ19zZXQoKCYobCktPmEpLChpKSkKKyNkZWZpbmUgbG9jYWxfaW5jKGwpIGF0b21pY19sb25nX2luYygmKGwpLT5hKQorI2RlZmluZSBsb2NhbF9kZWMobCkgYXRvbWljX2xvbmdfZGVjKCYobCktPmEpCisjZGVmaW5lIGxvY2FsX2FkZChpLGwpIGF0b21pY19sb25nX2FkZCgoaSksKCYobCktPmEpKQorI2RlZmluZSBsb2NhbF9zdWIoaSxsKSBhdG9taWNfbG9uZ19zdWIoKGkpLCgmKGwpLT5hKSkKKworI2RlZmluZSBfX2xvY2FsX2luYyhsKSBsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpICsgMSkKKyNkZWZpbmUgX19sb2NhbF9kZWMobCkgbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSAtIDEpCisjZGVmaW5lIF9fbG9jYWxfYWRkKGksbCkgbG9jYWxfc2V0KChsKSwgbG9jYWxfcmVhZChsKSArIChpKSkKKyNkZWZpbmUgX19sb2NhbF9zdWIoaSxsKSBsb2NhbF9zZXQoKGwpLCBsb2NhbF9yZWFkKGwpIC0gKGkpKQorCisjZGVmaW5lIGNwdV9sb2NhbF9yZWFkKHYpIGxvY2FsX3JlYWQoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIGNwdV9sb2NhbF9zZXQodiwgaSkgbG9jYWxfc2V0KCZfX2dldF9jcHVfdmFyKHYpLCAoaSkpCisjZGVmaW5lIGNwdV9sb2NhbF9pbmModikgbG9jYWxfaW5jKCZfX2dldF9jcHVfdmFyKHYpKQorI2RlZmluZSBjcHVfbG9jYWxfZGVjKHYpIGxvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX2FkZChpLCB2KSBsb2NhbF9hZGQoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgY3B1X2xvY2FsX3N1YihpLCB2KSBsb2NhbF9zdWIoKGkpLCAmX19nZXRfY3B1X3Zhcih2KSkKKworI2RlZmluZSBfX2NwdV9sb2NhbF9pbmModikgX19sb2NhbF9pbmMoJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX2RlYyh2KSBfX2xvY2FsX2RlYygmX19nZXRfY3B1X3Zhcih2KSkKKyNkZWZpbmUgX19jcHVfbG9jYWxfYWRkKGksIHYpIF9fbG9jYWxfYWRkKChpKSwgJl9fZ2V0X2NwdV92YXIodikpCisjZGVmaW5lIF9fY3B1X2xvY2FsX3N1YihpLCB2KSBfX2xvY2FsX3N1YigoaSksICZfX2dldF9jcHVfdmFyKHYpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9tZW1vcnlfbW9kZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYTc2MDJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21lbW9yeV9tb2RlbC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BU01fTUVNT1JZX01PREVMX0gKKyNkZWZpbmUgX19BU01fTUVNT1JZX01PREVMX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbW1hbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21tYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OGQyNzgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL21tYW4uaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19NTUFOX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX01NQU5fSAorCisjZGVmaW5lIFBST1RfUkVBRCAweDEgIAorI2RlZmluZSBQUk9UX1dSSVRFIDB4MiAgCisjZGVmaW5lIFBST1RfRVhFQyAweDQgIAorI2RlZmluZSBQUk9UX1NFTSAweDggIAorI2RlZmluZSBQUk9UX05PTkUgMHgwICAKKyNkZWZpbmUgUFJPVF9HUk9XU0RPV04gMHgwMTAwMDAwMCAgCisjZGVmaW5lIFBST1RfR1JPV1NVUCAweDAyMDAwMDAwICAKKworI2RlZmluZSBNQVBfU0hBUkVEIDB4MDEgIAorI2RlZmluZSBNQVBfUFJJVkFURSAweDAyICAKKyNkZWZpbmUgTUFQX1RZUEUgMHgwZiAgCisjZGVmaW5lIE1BUF9GSVhFRCAweDEwICAKKyNkZWZpbmUgTUFQX0FOT05ZTU9VUyAweDIwICAKKworI2RlZmluZSBNU19BU1lOQyAxICAKKyNkZWZpbmUgTVNfSU5WQUxJREFURSAyICAKKyNkZWZpbmUgTVNfU1lOQyA0ICAKKworI2RlZmluZSBNQURWX05PUk1BTCAwICAKKyNkZWZpbmUgTUFEVl9SQU5ET00gMSAgCisjZGVmaW5lIE1BRFZfU0VRVUVOVElBTCAyICAKKyNkZWZpbmUgTUFEVl9XSUxMTkVFRCAzICAKKyNkZWZpbmUgTUFEVl9ET05UTkVFRCA0ICAKKworI2RlZmluZSBNQURWX1JFTU9WRSA5ICAKKyNkZWZpbmUgTUFEVl9ET05URk9SSyAxMCAgCisjZGVmaW5lIE1BRFZfRE9GT1JLIDExICAKKworI2RlZmluZSBNQVBfQU5PTiBNQVBfQU5PTllNT1VTCisjZGVmaW5lIE1BUF9GSUxFIDAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvbXV0ZXgteGNoZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42M2E1NTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL211dGV4LXhjaGcuaApAQCAtMCwwICsxLDE2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19NVVRFWF9YQ0hHX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX01VVEVYX1hDSEdfSAorCisjZGVmaW5lIF9fbXV0ZXhfc2xvd3BhdGhfbmVlZHNfdG9fdW5sb2NrKCkgMAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGVyY3B1LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGVyY3B1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ5ODMwMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZXJjcHUuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19QRVJDUFVfSF8KKyNkZWZpbmUgX0FTTV9HRU5FUklDX1BFUkNQVV9IXworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgX19HRU5FUklDX1BFUl9DUFUKKworI2RlZmluZSBERUZJTkVfUEVSX0NQVSh0eXBlLCBuYW1lKSAgIF9fdHlwZW9mX18odHlwZSkgcGVyX2NwdV9fIyNuYW1lCisKKyNkZWZpbmUgcGVyX2NwdSh2YXIsIGNwdSkgKCooKHZvaWQpKGNwdSksICZwZXJfY3B1X18jI3ZhcikpCisjZGVmaW5lIF9fZ2V0X2NwdV92YXIodmFyKSBwZXJfY3B1X18jI3ZhcgorI2RlZmluZSBfX3Jhd19nZXRfY3B1X3Zhcih2YXIpIHBlcl9jcHVfXyMjdmFyCisKKyNkZWZpbmUgREVDTEFSRV9QRVJfQ1BVKHR5cGUsIG5hbWUpIGV4dGVybiBfX3R5cGVvZl9fKHR5cGUpIHBlcl9jcHVfXyMjbmFtZQorCisjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTCh2YXIpIEVYUE9SVF9TWU1CT0wocGVyX2NwdV9fIyN2YXIpCisjZGVmaW5lIEVYUE9SVF9QRVJfQ1BVX1NZTUJPTF9HUEwodmFyKSBFWFBPUlRfU1lNQk9MX0dQTChwZXJfY3B1X18jI3ZhcikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODVmODE2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9QR1RBQkxFX05PUFVEX0gKKyNkZWZpbmUgX1BHVEFCTEVfTk9QVURfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIF9fUEFHRVRBQkxFX1BVRF9GT0xERUQKKwordHlwZWRlZiBzdHJ1Y3QgeyBwZ2RfdCBwZ2Q7IH0gcHVkX3Q7CisKKyNkZWZpbmUgUFVEX1NISUZUIFBHRElSX1NISUZUCisjZGVmaW5lIFBUUlNfUEVSX1BVRCAxCisjZGVmaW5lIFBVRF9TSVpFICgxVUwgPDwgUFVEX1NISUZUKQorI2RlZmluZSBQVURfTUFTSyAofihQVURfU0laRS0xKSkKKworI2RlZmluZSBwdWRfRVJST1IocHVkKSAocGdkX0VSUk9SKChwdWQpLnBnZCkpCisjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwdWQpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkgc2V0X3B1ZCgocHVkX3QgKikocGdkcHRyKSwgKHB1ZF90KSB7IHBnZHZhbCB9KQorI2RlZmluZSBwdWRfdmFsKHgpIChwZ2RfdmFsKCh4KS5wZ2QpKQorI2RlZmluZSBfX3B1ZCh4KSAoKHB1ZF90KSB7IF9fcGdkKHgpIH0gKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpIChwdWRfcGFnZSgocHVkX3QpeyBwZ2QgfSkpCisjZGVmaW5lIHBnZF9wYWdlX2tlcm5lbChwZ2QpIChwdWRfcGFnZV9rZXJuZWwoKHB1ZF90KXsgcGdkIH0pKQorI2RlZmluZSBwdWRfYWxsb2Nfb25lKG1tLCBhZGRyZXNzKSBOVUxMCisjZGVmaW5lIHB1ZF9mcmVlKHgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19wdWRfZnJlZV90bGIodGxiLCB4KSBkbyB7IH0gd2hpbGUgKDApCisjdW5kZWYgcHVkX2FkZHJfZW5kCisjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpIChlbmQpCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3BndGFibGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTIxY2RiYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9wZ3RhYmxlLmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfUEdUQUJMRV9ICisjZGVmaW5lIF9BU01fR0VORVJJQ19QR1RBQkxFX0gKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0VTVEFCTElTSAorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1NFVF9QVEVfQVRPTUlDCisjZGVmaW5lIHB0ZXBfZXN0YWJsaXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSkgIGRvIHsgICBzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgX19wdGVwLCBfX2VudHJ5KTsgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgIH0gd2hpbGUgKDApCisjZWxzZQorI2RlZmluZSBwdGVwX2VzdGFibGlzaChfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnkpICBkbyB7ICAgc2V0X3B0ZV9hdG9taWMoX19wdGVwLCBfX2VudHJ5KTsgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgIH0gd2hpbGUgKDApCisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworCisjZGVmaW5lIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpICBkbyB7ICAgc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksIF9fcHRlcCwgX19lbnRyeSk7ICAgZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7ICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9URVNUX0FORF9DTEVBUl9ZT1VORworI2RlZmluZSBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgcHRlX3QgX19wdGUgPSAqKF9fcHRlcCk7ICAgaW50IHIgPSAxOyAgIGlmICghcHRlX3lvdW5nKF9fcHRlKSkgICByID0gMDsgICBlbHNlICAgc2V0X3B0ZV9hdCgoX192bWEpLT52bV9tbSwgKF9fYWRkcmVzcyksICAgKF9fcHRlcCksIHB0ZV9ta29sZChfX3B0ZSkpOyAgIHI7ICB9KQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9ZT1VOR19GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoX3lvdW5nKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgaW50IF9feW91bmc7ICAgX195b3VuZyA9IHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoX192bWEsIF9fYWRkcmVzcywgX19wdGVwKTsgICBpZiAoX195b3VuZykgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgICBfX3lvdW5nOyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfVEVTVF9BTkRfQ0xFQVJfRElSVFkKKyNkZWZpbmUgcHRlcF90ZXN0X2FuZF9jbGVhcl9kaXJ0eShfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApICAoeyAgIHB0ZV90IF9fcHRlID0gKl9fcHRlcDsgICBpbnQgciA9IDE7ICAgaWYgKCFwdGVfZGlydHkoX19wdGUpKSAgIHIgPSAwOyAgIGVsc2UgICBzZXRfcHRlX2F0KChfX3ZtYSktPnZtX21tLCAoX19hZGRyZXNzKSwgKF9fcHRlcCksICAgcHRlX21rY2xlYW4oX19wdGUpKTsgICByOyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfQ0xFQVJfRElSVFlfRkxVU0gKKyNkZWZpbmUgcHRlcF9jbGVhcl9mbHVzaF9kaXJ0eShfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXApICAoeyAgIGludCBfX2RpcnR5OyAgIF9fZGlydHkgPSBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCk7ICAgaWYgKF9fZGlydHkpICAgZmx1c2hfdGxiX3BhZ2UoX192bWEsIF9fYWRkcmVzcyk7ICAgX19kaXJ0eTsgIH0pCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0dFVF9BTkRfQ0xFQVIKKyNkZWZpbmUgcHRlcF9nZXRfYW5kX2NsZWFyKF9fbW0sIF9fYWRkcmVzcywgX19wdGVwKSAgKHsgICBwdGVfdCBfX3B0ZSA9ICooX19wdGVwKTsgICBwdGVfY2xlYXIoKF9fbW0pLCAoX19hZGRyZXNzKSwgKF9fcHRlcCkpOyAgIF9fcHRlOyAgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BURVBfR0VUX0FORF9DTEVBUl9GVUxMCisjZGVmaW5lIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKF9fbW0sIF9fYWRkcmVzcywgX19wdGVwLCBfX2Z1bGwpICAoeyAgIHB0ZV90IF9fcHRlOyAgIF9fcHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKChfX21tKSwgKF9fYWRkcmVzcyksIChfX3B0ZXApKTsgICBfX3B0ZTsgIH0pCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVfQ0xFQVJfRlVMTAorI2RlZmluZSBwdGVfY2xlYXJfZnVsbChfX21tLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19mdWxsKSAgZG8geyAgIHB0ZV9jbGVhcigoX19tbSksIChfX2FkZHJlc3MpLCAoX19wdGVwKSk7ICB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9DTEVBUl9GTFVTSAorI2RlZmluZSBwdGVwX2NsZWFyX2ZsdXNoKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCkgICh7ICAgcHRlX3QgX19wdGU7ICAgX19wdGUgPSBwdGVwX2dldF9hbmRfY2xlYXIoKF9fdm1hKS0+dm1fbW0sIF9fYWRkcmVzcywgX19wdGVwKTsgICBmbHVzaF90bGJfcGFnZShfX3ZtYSwgX19hZGRyZXNzKTsgICBfX3B0ZTsgIH0pCisjZW5kaWYKKworI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX1NFVF9XUlBST1RFQ1QKK3N0cnVjdCBtbV9zdHJ1Y3Q7CisjZW5kaWYKKyNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFX1NBTUUKKyNkZWZpbmUgcHRlX3NhbWUoQSxCKSAocHRlX3ZhbChBKSA9PSBwdGVfdmFsKEIpKQorI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BBR0VfVEVTVF9BTkRfQ0xFQVJfRElSVFkKKyNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl9kaXJ0eShwYWdlKSAoMCkKKyNkZWZpbmUgcHRlX21heWJlX2RpcnR5KHB0ZSkgcHRlX2RpcnR5KHB0ZSkKKyNlbHNlCisjZGVmaW5lIHB0ZV9tYXliZV9kaXJ0eShwdGUpICgxKQorI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX1BBR0VfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKKyNkZWZpbmUgcGFnZV90ZXN0X2FuZF9jbGVhcl95b3VuZyhwYWdlKSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX0hBVkVfQVJDSF9QR0RfT0ZGU0VUX0dBVEUKKyNkZWZpbmUgcGdkX29mZnNldF9nYXRlKG1tLCBhZGRyKSBwZ2Rfb2Zmc2V0KG1tLCBhZGRyKQorI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX0xBWllfTU1VX1BST1RfVVBEQVRFCisjZGVmaW5lIGxhenlfbW11X3Byb3RfdXBkYXRlKHB0ZSkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisjaWZuZGVmIF9fSEFWRV9BUkNIX01PVkVfUFRFCisjZGVmaW5lIG1vdmVfcHRlKHB0ZSwgcHJvdCwgb2xkX2FkZHIsIG5ld19hZGRyKSAocHRlKQorI2VuZGlmCisjZGVmaW5lIHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpICAoeyB1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUEdESVJfU0laRSkgJiBQR0RJUl9NQVNLOyAgIChfX2JvdW5kYXJ5IC0gMSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOyAgfSkKKyNpZm5kZWYgcHVkX2FkZHJfZW5kCisjZGVmaW5lIHB1ZF9hZGRyX2VuZChhZGRyLCBlbmQpICAoeyB1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkgPSAoKGFkZHIpICsgUFVEX1NJWkUpICYgUFVEX01BU0s7ICAgKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTogKGVuZCk7ICB9KQorI2VuZGlmCisjaWZuZGVmIHBtZF9hZGRyX2VuZAorI2RlZmluZSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKSAgKHsgdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOyAgIChfX2JvdW5kYXJ5IC0gMSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOyAgfSkKKyNlbmRpZgorI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3Jlc291cmNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTdmN2RlYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9yZXNvdXJjZS5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKKyNkZWZpbmUgX0FTTV9HRU5FUklDX1JFU09VUkNFX0gKKworI2RlZmluZSBSTElNSVRfQ1BVIDAgIAorI2RlZmluZSBSTElNSVRfRlNJWkUgMSAgCisjZGVmaW5lIFJMSU1JVF9EQVRBIDIgIAorI2RlZmluZSBSTElNSVRfU1RBQ0sgMyAgCisjZGVmaW5lIFJMSU1JVF9DT1JFIDQgIAorCisjaWZuZGVmIFJMSU1JVF9SU1MKKyNkZWZpbmUgUkxJTUlUX1JTUyA1ICAKKyNlbmRpZgorCisjaWZuZGVmIFJMSU1JVF9OUFJPQworI2RlZmluZSBSTElNSVRfTlBST0MgNiAgCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfTk9GSUxFCisjZGVmaW5lIFJMSU1JVF9OT0ZJTEUgNyAgCisjZW5kaWYKKworI2lmbmRlZiBSTElNSVRfTUVNTE9DSworI2RlZmluZSBSTElNSVRfTUVNTE9DSyA4ICAKKyNlbmRpZgorCisjaWZuZGVmIFJMSU1JVF9BUworI2RlZmluZSBSTElNSVRfQVMgOSAgCisjZW5kaWYKKworI2RlZmluZSBSTElNSVRfTE9DS1MgMTAgIAorI2RlZmluZSBSTElNSVRfU0lHUEVORElORyAxMSAgCisjZGVmaW5lIFJMSU1JVF9NU0dRVUVVRSAxMiAgCisjZGVmaW5lIFJMSU1JVF9OSUNFIDEzICAKKyNkZWZpbmUgUkxJTUlUX1JUUFJJTyAxNCAgCisKKyNkZWZpbmUgUkxJTV9OTElNSVRTIDE1CisKKyNpZm5kZWYgUkxJTV9JTkZJTklUWQorI2RlZmluZSBSTElNX0lORklOSVRZICh+MFVMKQorI2VuZGlmCisKKyNpZm5kZWYgX1NUS19MSU1fTUFYCisjZGVmaW5lIF9TVEtfTElNX01BWCBSTElNX0lORklOSVRZCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2VjdGlvbnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy9zZWN0aW9ucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU5ZWFhNDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2VjdGlvbnMuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BU01fR0VORVJJQ19TRUNUSU9OU19IXworI2RlZmluZSBfQVNNX0dFTkVSSUNfU0VDVElPTlNfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnaW5mby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ2luZm8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNjc0M2E3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ2luZm8uaApAQCAtMCwwICsxLDIxMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfU0lHSU5GT19ICisjZGVmaW5lIF9BU01fR0VORVJJQ19TSUdJTkZPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwordHlwZWRlZiB1bmlvbiBzaWd2YWwgeworIGludCBzaXZhbF9pbnQ7Cisgdm9pZCBfX3VzZXIgKnNpdmFsX3B0cjsKK30gc2lndmFsX3Q7CisKKyNpZm5kZWYgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUKKyNkZWZpbmUgX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUgKDMgKiBzaXplb2YoaW50KSkKKyNlbmRpZgorCisjZGVmaW5lIFNJX01BWF9TSVpFIDEyOAorI2lmbmRlZiBTSV9QQURfU0laRQorI2RlZmluZSBTSV9QQURfU0laRSAoKFNJX01BWF9TSVpFIC0gX19BUkNIX1NJX1BSRUFNQkxFX1NJWkUpIC8gc2l6ZW9mKGludCkpCisjZW5kaWYKKworI2lmbmRlZiBfX0FSQ0hfU0lfVUlEX1QKKyNkZWZpbmUgX19BUkNIX1NJX1VJRF9UIHVpZF90CisjZW5kaWYKKworI2lmbmRlZiBfX0FSQ0hfU0lfQkFORF9UCisjZGVmaW5lIF9fQVJDSF9TSV9CQU5EX1QgbG9uZworI2VuZGlmCisKKyNpZm5kZWYgSEFWRV9BUkNIX1NJR0lORk9fVAorCit0eXBlZGVmIHN0cnVjdCBzaWdpbmZvIHsKKyBpbnQgc2lfc2lnbm87CisgaW50IHNpX2Vycm5vOworIGludCBzaV9jb2RlOworCisgdW5pb24geworIGludCBfcGFkW1NJX1BBRF9TSVpFXTsKKworIHN0cnVjdCB7CisgcGlkX3QgX3BpZDsKKyBfX0FSQ0hfU0lfVUlEX1QgX3VpZDsKKyB9IF9raWxsOworCisgc3RydWN0IHsKKyB0aW1lcl90IF90aWQ7CisgaW50IF9vdmVycnVuOworIGNoYXIgX3BhZFtzaXplb2YoIF9fQVJDSF9TSV9VSURfVCkgLSBzaXplb2YoaW50KV07Cisgc2lndmFsX3QgX3NpZ3ZhbDsKKyBpbnQgX3N5c19wcml2YXRlOworIH0gX3RpbWVyOworCisgc3RydWN0IHsKKyBwaWRfdCBfcGlkOworIF9fQVJDSF9TSV9VSURfVCBfdWlkOworIHNpZ3ZhbF90IF9zaWd2YWw7CisgfSBfcnQ7CisKKyBzdHJ1Y3QgeworIHBpZF90IF9waWQ7CisgX19BUkNIX1NJX1VJRF9UIF91aWQ7CisgaW50IF9zdGF0dXM7CisgY2xvY2tfdCBfdXRpbWU7CisgY2xvY2tfdCBfc3RpbWU7CisgfSBfc2lnY2hsZDsKKworIHN0cnVjdCB7Cisgdm9pZCBfX3VzZXIgKl9hZGRyOworI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KKyBpbnQgX3RyYXBubzsKKyNlbmRpZgorIH0gX3NpZ2ZhdWx0OworCisgc3RydWN0IHsKKyBfX0FSQ0hfU0lfQkFORF9UIF9iYW5kOworIGludCBfZmQ7CisgfSBfc2lncG9sbDsKKyB9IF9zaWZpZWxkczsKK30gc2lnaW5mb190OworCisjZW5kaWYKKworI2RlZmluZSBzaV9waWQgX3NpZmllbGRzLl9raWxsLl9waWQKKyNkZWZpbmUgc2lfdWlkIF9zaWZpZWxkcy5fa2lsbC5fdWlkCisjZGVmaW5lIHNpX3RpZCBfc2lmaWVsZHMuX3RpbWVyLl90aWQKKyNkZWZpbmUgc2lfb3ZlcnJ1biBfc2lmaWVsZHMuX3RpbWVyLl9vdmVycnVuCisjZGVmaW5lIHNpX3N5c19wcml2YXRlIF9zaWZpZWxkcy5fdGltZXIuX3N5c19wcml2YXRlCisjZGVmaW5lIHNpX3N0YXR1cyBfc2lmaWVsZHMuX3NpZ2NobGQuX3N0YXR1cworI2RlZmluZSBzaV91dGltZSBfc2lmaWVsZHMuX3NpZ2NobGQuX3V0aW1lCisjZGVmaW5lIHNpX3N0aW1lIF9zaWZpZWxkcy5fc2lnY2hsZC5fc3RpbWUKKyNkZWZpbmUgc2lfdmFsdWUgX3NpZmllbGRzLl9ydC5fc2lndmFsCisjZGVmaW5lIHNpX2ludCBfc2lmaWVsZHMuX3J0Ll9zaWd2YWwuc2l2YWxfaW50CisjZGVmaW5lIHNpX3B0ciBfc2lmaWVsZHMuX3J0Ll9zaWd2YWwuc2l2YWxfcHRyCisjZGVmaW5lIHNpX2FkZHIgX3NpZmllbGRzLl9zaWdmYXVsdC5fYWRkcgorI2lmZGVmIF9fQVJDSF9TSV9UUkFQTk8KKyNkZWZpbmUgc2lfdHJhcG5vIF9zaWZpZWxkcy5fc2lnZmF1bHQuX3RyYXBubworI2VuZGlmCisjZGVmaW5lIHNpX2JhbmQgX3NpZmllbGRzLl9zaWdwb2xsLl9iYW5kCisjZGVmaW5lIHNpX2ZkIF9zaWZpZWxkcy5fc2lncG9sbC5fZmQKKworI2RlZmluZSBfX1NJX0tJTEwgMAorI2RlZmluZSBfX1NJX1RJTUVSIDAKKyNkZWZpbmUgX19TSV9QT0xMIDAKKyNkZWZpbmUgX19TSV9GQVVMVCAwCisjZGVmaW5lIF9fU0lfQ0hMRCAwCisjZGVmaW5lIF9fU0lfUlQgMAorI2RlZmluZSBfX1NJX01FU0dRIDAKKyNkZWZpbmUgX19TSV9DT0RFKFQsTikgKE4pCisKKyNkZWZpbmUgU0lfVVNFUiAwICAKKyNkZWZpbmUgU0lfS0VSTkVMIDB4ODAgIAorI2RlZmluZSBTSV9RVUVVRSAtMSAgCisjZGVmaW5lIFNJX1RJTUVSIF9fU0lfQ09ERShfX1NJX1RJTUVSLC0yKSAgCisjZGVmaW5lIFNJX01FU0dRIF9fU0lfQ09ERShfX1NJX01FU0dRLC0zKSAgCisjZGVmaW5lIFNJX0FTWU5DSU8gLTQgIAorI2RlZmluZSBTSV9TSUdJTyAtNSAgCisjZGVmaW5lIFNJX1RLSUxMIC02ICAKKyNkZWZpbmUgU0lfREVUSFJFQUQgLTcgIAorCisjZGVmaW5lIFNJX0ZST01VU0VSKHNpcHRyKSAoKHNpcHRyKS0+c2lfY29kZSA8PSAwKQorI2RlZmluZSBTSV9GUk9NS0VSTkVMKHNpcHRyKSAoKHNpcHRyKS0+c2lfY29kZSA+IDApCisKKyNkZWZpbmUgSUxMX0lMTE9QQyAoX19TSV9GQVVMVHwxKSAgCisjZGVmaW5lIElMTF9JTExPUE4gKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBJTExfSUxMQURSIChfX1NJX0ZBVUxUfDMpICAKKyNkZWZpbmUgSUxMX0lMTFRSUCAoX19TSV9GQVVMVHw0KSAgCisjZGVmaW5lIElMTF9QUlZPUEMgKF9fU0lfRkFVTFR8NSkgIAorI2RlZmluZSBJTExfUFJWUkVHIChfX1NJX0ZBVUxUfDYpICAKKyNkZWZpbmUgSUxMX0NPUFJPQyAoX19TSV9GQVVMVHw3KSAgCisjZGVmaW5lIElMTF9CQURTVEsgKF9fU0lfRkFVTFR8OCkgIAorI2RlZmluZSBOU0lHSUxMIDgKKworI2RlZmluZSBGUEVfSU5URElWIChfX1NJX0ZBVUxUfDEpICAKKyNkZWZpbmUgRlBFX0lOVE9WRiAoX19TSV9GQVVMVHwyKSAgCisjZGVmaW5lIEZQRV9GTFRESVYgKF9fU0lfRkFVTFR8MykgIAorI2RlZmluZSBGUEVfRkxUT1ZGIChfX1NJX0ZBVUxUfDQpICAKKyNkZWZpbmUgRlBFX0ZMVFVORCAoX19TSV9GQVVMVHw1KSAgCisjZGVmaW5lIEZQRV9GTFRSRVMgKF9fU0lfRkFVTFR8NikgIAorI2RlZmluZSBGUEVfRkxUSU5WIChfX1NJX0ZBVUxUfDcpICAKKyNkZWZpbmUgRlBFX0ZMVFNVQiAoX19TSV9GQVVMVHw4KSAgCisjZGVmaW5lIE5TSUdGUEUgOAorCisjZGVmaW5lIFNFR1ZfTUFQRVJSIChfX1NJX0ZBVUxUfDEpICAKKyNkZWZpbmUgU0VHVl9BQ0NFUlIgKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBOU0lHU0VHViAyCisKKyNkZWZpbmUgQlVTX0FEUkFMTiAoX19TSV9GQVVMVHwxKSAgCisjZGVmaW5lIEJVU19BRFJFUlIgKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBCVVNfT0JKRVJSIChfX1NJX0ZBVUxUfDMpICAKKyNkZWZpbmUgTlNJR0JVUyAzCisKKyNkZWZpbmUgVFJBUF9CUktQVCAoX19TSV9GQVVMVHwxKSAgCisjZGVmaW5lIFRSQVBfVFJBQ0UgKF9fU0lfRkFVTFR8MikgIAorI2RlZmluZSBOU0lHVFJBUCAyCisKKyNkZWZpbmUgQ0xEX0VYSVRFRCAoX19TSV9DSExEfDEpICAKKyNkZWZpbmUgQ0xEX0tJTExFRCAoX19TSV9DSExEfDIpICAKKyNkZWZpbmUgQ0xEX0RVTVBFRCAoX19TSV9DSExEfDMpICAKKyNkZWZpbmUgQ0xEX1RSQVBQRUQgKF9fU0lfQ0hMRHw0KSAgCisjZGVmaW5lIENMRF9TVE9QUEVEIChfX1NJX0NITER8NSkgIAorI2RlZmluZSBDTERfQ09OVElOVUVEIChfX1NJX0NITER8NikgIAorI2RlZmluZSBOU0lHQ0hMRCA2CisKKyNkZWZpbmUgUE9MTF9JTiAoX19TSV9QT0xMfDEpICAKKyNkZWZpbmUgUE9MTF9PVVQgKF9fU0lfUE9MTHwyKSAgCisjZGVmaW5lIFBPTExfTVNHIChfX1NJX1BPTEx8MykgIAorI2RlZmluZSBQT0xMX0VSUiAoX19TSV9QT0xMfDQpICAKKyNkZWZpbmUgUE9MTF9QUkkgKF9fU0lfUE9MTHw1KSAgCisjZGVmaW5lIFBPTExfSFVQIChfX1NJX1BPTEx8NikgIAorI2RlZmluZSBOU0lHUE9MTCA2CisKKyNkZWZpbmUgU0lHRVZfU0lHTkFMIDAgIAorI2RlZmluZSBTSUdFVl9OT05FIDEgIAorI2RlZmluZSBTSUdFVl9USFJFQUQgMiAgCisjZGVmaW5lIFNJR0VWX1RIUkVBRF9JRCA0ICAKKworI2lmbmRlZiBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRQorI2RlZmluZSBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRSAoc2l6ZW9mKGludCkgKiAyICsgc2l6ZW9mKHNpZ3ZhbF90KSkKKyNlbmRpZgorCisjZGVmaW5lIFNJR0VWX01BWF9TSVpFIDY0CisjZGVmaW5lIFNJR0VWX1BBRF9TSVpFICgoU0lHRVZfTUFYX1NJWkUgLSBfX0FSQ0hfU0lHRVZfUFJFQU1CTEVfU0laRSkgICAvIHNpemVvZihpbnQpKQorCit0eXBlZGVmIHN0cnVjdCBzaWdldmVudCB7Cisgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CisgaW50IHNpZ2V2X3NpZ25vOworIGludCBzaWdldl9ub3RpZnk7CisgdW5pb24geworIGludCBfcGFkW1NJR0VWX1BBRF9TSVpFXTsKKyBpbnQgX3RpZDsKKworIHN0cnVjdCB7Cisgdm9pZCAoKl9mdW5jdGlvbikoc2lndmFsX3QpOworIHZvaWQgKl9hdHRyaWJ1dGU7CisgfSBfc2lnZXZfdGhyZWFkOworIH0gX3NpZ2V2X3VuOworfSBzaWdldmVudF90OworCisjZGVmaW5lIHNpZ2V2X25vdGlmeV9mdW5jdGlvbiBfc2lnZXZfdW4uX3NpZ2V2X3RocmVhZC5fZnVuY3Rpb24KKyNkZWZpbmUgc2lnZXZfbm90aWZ5X2F0dHJpYnV0ZXMgX3NpZ2V2X3VuLl9zaWdldl90aHJlYWQuX2F0dHJpYnV0ZQorI2RlZmluZSBzaWdldl9ub3RpZnlfdGhyZWFkX2lkIF9zaWdldl91bi5fdGlkCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIyNmQ5OWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvc2lnbmFsLmgKQEAgLTAsMCArMSwzOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0FTTV9HRU5FUklDX1NJR05BTF9ICisjZGVmaW5lIF9fQVNNX0dFTkVSSUNfU0lHTkFMX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpZm5kZWYgU0lHX0JMT0NLCisjZGVmaW5lIFNJR19CTE9DSyAwICAKKyNlbmRpZgorI2lmbmRlZiBTSUdfVU5CTE9DSworI2RlZmluZSBTSUdfVU5CTE9DSyAxICAKKyNlbmRpZgorI2lmbmRlZiBTSUdfU0VUTUFTSworI2RlZmluZSBTSUdfU0VUTUFTSyAyICAKKyNlbmRpZgorCisjaWZuZGVmIF9fQVNTRU1CTFlfXwordHlwZWRlZiB2b2lkIF9fc2lnbmFsZm5fdChpbnQpOwordHlwZWRlZiBfX3NpZ25hbGZuX3QgX191c2VyICpfX3NpZ2hhbmRsZXJfdDsKKwordHlwZWRlZiB2b2lkIF9fcmVzdG9yZWZuX3Qodm9pZCk7Cit0eXBlZGVmIF9fcmVzdG9yZWZuX3QgX191c2VyICpfX3NpZ3Jlc3RvcmVfdDsKKworI2RlZmluZSBTSUdfREZMICgoX19mb3JjZSBfX3NpZ2hhbmRsZXJfdCkwKSAgCisjZGVmaW5lIFNJR19JR04gKChfX2ZvcmNlIF9fc2lnaGFuZGxlcl90KTEpICAKKyNkZWZpbmUgU0lHX0VSUiAoKF9fZm9yY2UgX19zaWdoYW5kbGVyX3QpLTEpICAKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90bGIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy90bGIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYzFlNzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RsYi5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9HRU5FUklDX19UTEJfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfX1RMQl9ICisKKyNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisjaW5jbHVkZSA8YXNtL3BnYWxsb2MuaD4KKyNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KKworI2RlZmluZSBGUkVFX1BURV9OUiAxCisjZGVmaW5lIHRsYl9mYXN0X21vZGUodGxiKSAxCisKK3N0cnVjdCBtbXVfZ2F0aGVyIHsKKyBzdHJ1Y3QgbW1fc3RydWN0ICptbTsKKyB1bnNpZ25lZCBpbnQgbnI7CisgdW5zaWduZWQgaW50IG5lZWRfZmx1c2g7CisgdW5zaWduZWQgaW50IGZ1bGxtbTsKKyBzdHJ1Y3QgcGFnZSAqIHBhZ2VzW0ZSRUVfUFRFX05SXTsKK307CisKKyNkZWZpbmUgdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKSAgIGRvIHsgICB0bGItPm5lZWRfZmx1c2ggPSAxOyAgIF9fdGxiX3JlbW92ZV90bGJfZW50cnkodGxiLCBwdGVwLCBhZGRyZXNzKTsgICB9IHdoaWxlICgwKQorI2RlZmluZSBwdGVfZnJlZV90bGIodGxiLCBwdGVwKSAgIGRvIHsgICB0bGItPm5lZWRfZmx1c2ggPSAxOyAgIF9fcHRlX2ZyZWVfdGxiKHRsYiwgcHRlcCk7ICAgfSB3aGlsZSAoMCkKKyNpZm5kZWYgX19BUkNIX0hBU180TEVWRUxfSEFDSworI2RlZmluZSBwdWRfZnJlZV90bGIodGxiLCBwdWRwKSAgIGRvIHsgICB0bGItPm5lZWRfZmx1c2ggPSAxOyAgIF9fcHVkX2ZyZWVfdGxiKHRsYiwgcHVkcCk7ICAgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2RlZmluZSBwbWRfZnJlZV90bGIodGxiLCBwbWRwKSAgIGRvIHsgICB0bGItPm5lZWRfZmx1c2ggPSAxOyAgIF9fcG1kX2ZyZWVfdGxiKHRsYiwgcG1kcCk7ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdGxiX21pZ3JhdGVfZmluaXNoKG1tKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RvcG9sb2d5LmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMvdG9wb2xvZ3kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODliMWYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2FzbS1nZW5lcmljL3RvcG9sb2d5LmgKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVNNX0dFTkVSSUNfVE9QT0xPR1lfSAorI2RlZmluZSBfQVNNX0dFTkVSSUNfVE9QT0xPR1lfSAorCisjaWZuZGVmIGNwdV90b19ub2RlCisjZGVmaW5lIGNwdV90b19ub2RlKGNwdSkgKDApCisjZW5kaWYKKyNpZm5kZWYgcGFyZW50X25vZGUKKyNkZWZpbmUgcGFyZW50X25vZGUobm9kZSkgKDApCisjZW5kaWYKKyNpZm5kZWYgbm9kZV90b19jcHVtYXNrCisjZGVmaW5lIG5vZGVfdG9fY3B1bWFzayhub2RlKSAoY3B1X29ubGluZV9tYXApCisjZW5kaWYKKyNpZm5kZWYgbm9kZV90b19maXJzdF9jcHUKKyNkZWZpbmUgbm9kZV90b19maXJzdF9jcHUobm9kZSkgKDApCisjZW5kaWYKKyNpZm5kZWYgcGNpYnVzX3RvX25vZGUKKyNkZWZpbmUgcGNpYnVzX3RvX25vZGUobm9kZSkgKC0xKQorI2VuZGlmCisKKyNpZm5kZWYgcGNpYnVzX3RvX2NwdW1hc2sKKyNkZWZpbmUgcGNpYnVzX3RvX2NwdW1hc2soYnVzKSAocGNpYnVzX3RvX25vZGUoYnVzKSA9PSAtMSA/ICAgQ1BVX01BU0tfQUxMIDogICBub2RlX3RvX2NwdW1hc2socGNpYnVzX3RvX25vZGUoYnVzKSkgICApCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMveG9yLmggYi9saWJjL2tlcm5lbC9jb21tb24vYXNtLWdlbmVyaWMveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmIxZTRlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9hc20tZ2VuZXJpYy94b3IuaApAQCAtMCwwICsxLDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorCisjZGVmaW5lIFhPUl9UUllfVEVNUExBVEVTICAgZG8geyAgIHhvcl9zcGVlZCgmeG9yX2Jsb2NrXzhyZWdzKTsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja184cmVnc19wKTsgICB4b3Jfc3BlZWQoJnhvcl9ibG9ja18zMnJlZ3MpOyAgIHhvcl9zcGVlZCgmeG9yX2Jsb2NrXzMycmVnc19wKTsgICB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYS5vdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MzI1MzA0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Eub3V0LmgKQEAgLTAsMCArMSwyMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19BX09VVF9HTlVfSF9fCisjZGVmaW5lIF9fQV9PVVRfR05VX0hfXworCisjZGVmaW5lIF9fR05VX0VYRUNfTUFDUk9TX18KKworI2lmbmRlZiBfX1NUUlVDVF9FWEVDX09WRVJSSURFX18KKworI2luY2x1ZGUgPGFzbS9hLm91dC5oPgorCisjZW5kaWYKKworZW51bSBtYWNoaW5lX3R5cGUgeworI2lmZGVmIE1fT0xEU1VOMgorIE1fX09MRFNVTjIgPSBNX09MRFNVTjIsCisjZWxzZQorIE1fT0xEU1VOMiA9IDAsCisjZW5kaWYKKyNpZmRlZiBNXzY4MDEwCisgTV9fNjgwMTAgPSBNXzY4MDEwLAorI2Vsc2UKKyBNXzY4MDEwID0gMSwKKyNlbmRpZgorI2lmZGVmIE1fNjgwMjAKKyBNX182ODAyMCA9IE1fNjgwMjAsCisjZWxzZQorIE1fNjgwMjAgPSAyLAorI2VuZGlmCisjaWZkZWYgTV9TUEFSQworIE1fX1NQQVJDID0gTV9TUEFSQywKKyNlbHNlCisgTV9TUEFSQyA9IDMsCisjZW5kaWYKKworIE1fMzg2ID0gMTAwLAorIE1fTUlQUzEgPSAxNTEsCisgTV9NSVBTMiA9IDE1MgorfTsKKworI2lmbmRlZiBOX01BR0lDCisjZGVmaW5lIE5fTUFHSUMoZXhlYykgKChleGVjKS5hX2luZm8gJiAweGZmZmYpCisjZW5kaWYKKyNkZWZpbmUgTl9NQUNIVFlQRShleGVjKSAoKGVudW0gbWFjaGluZV90eXBlKSgoKGV4ZWMpLmFfaW5mbyA+PiAxNikgJiAweGZmKSkKKyNkZWZpbmUgTl9GTEFHUyhleGVjKSAoKChleGVjKS5hX2luZm8gPj4gMjQpICYgMHhmZikKKyNkZWZpbmUgTl9TRVRfSU5GTyhleGVjLCBtYWdpYywgdHlwZSwgZmxhZ3MpICAgKChleGVjKS5hX2luZm8gPSAoKG1hZ2ljKSAmIDB4ZmZmZikgICB8ICgoKGludCkodHlwZSkgJiAweGZmKSA8PCAxNikgICB8ICgoKGZsYWdzKSAmIDB4ZmYpIDw8IDI0KSkKKyNkZWZpbmUgTl9TRVRfTUFHSUMoZXhlYywgbWFnaWMpICAgKChleGVjKS5hX2luZm8gPSAoKChleGVjKS5hX2luZm8gJiAweGZmZmYwMDAwKSB8ICgobWFnaWMpICYgMHhmZmZmKSkpCisKKyNkZWZpbmUgTl9TRVRfTUFDSFRZUEUoZXhlYywgbWFjaHR5cGUpICAgKChleGVjKS5hX2luZm8gPSAgICgoZXhlYykuYV9pbmZvJjB4ZmYwMGZmZmYpIHwgKCgoKGludCkobWFjaHR5cGUpKSYweGZmKSA8PCAxNikpCisKKyNkZWZpbmUgTl9TRVRfRkxBR1MoZXhlYywgZmxhZ3MpICAgKChleGVjKS5hX2luZm8gPSAgICgoZXhlYykuYV9pbmZvJjB4MDBmZmZmZmYpIHwgKCgoZmxhZ3MpICYgMHhmZikgPDwgMjQpKQorCisjZGVmaW5lIE9NQUdJQyAwNDA3CisKKyNkZWZpbmUgTk1BR0lDIDA0MTAKKworI2RlZmluZSBaTUFHSUMgMDQxMworCisjZGVmaW5lIFFNQUdJQyAwMzE0CisKKyNkZWZpbmUgQ01BR0lDIDA0MjEKKworI2lmbmRlZiBOX0JBRE1BRworI2RlZmluZSBOX0JBRE1BRyh4KSAoTl9NQUdJQyh4KSAhPSBPTUFHSUMgICAmJiBOX01BR0lDKHgpICE9IE5NQUdJQyAgICYmIE5fTUFHSUMoeCkgIT0gWk1BR0lDICAgJiYgTl9NQUdJQyh4KSAhPSBRTUFHSUMpCisjZW5kaWYKKworI2RlZmluZSBfTl9IRFJPRkYoeCkgKDEwMjQgLSBzaXplb2YgKHN0cnVjdCBleGVjKSkKKworI2lmbmRlZiBOX1RYVE9GRgorI2RlZmluZSBOX1RYVE9GRih4KSAgIChOX01BR0lDKHgpID09IFpNQUdJQyA/IF9OX0hEUk9GRigoeCkpICsgc2l6ZW9mIChzdHJ1Y3QgZXhlYykgOiAgIChOX01BR0lDKHgpID09IFFNQUdJQyA/IDAgOiBzaXplb2YgKHN0cnVjdCBleGVjKSkpCisjZW5kaWYKKworI2lmbmRlZiBOX0RBVE9GRgorI2RlZmluZSBOX0RBVE9GRih4KSAoTl9UWFRPRkYoeCkgKyAoeCkuYV90ZXh0KQorI2VuZGlmCisKKyNpZm5kZWYgTl9UUkVMT0ZGCisjZGVmaW5lIE5fVFJFTE9GRih4KSAoTl9EQVRPRkYoeCkgKyAoeCkuYV9kYXRhKQorI2VuZGlmCisKKyNpZm5kZWYgTl9EUkVMT0ZGCisjZGVmaW5lIE5fRFJFTE9GRih4KSAoTl9UUkVMT0ZGKHgpICsgTl9UUlNJWkUoeCkpCisjZW5kaWYKKworI2lmbmRlZiBOX1NZTU9GRgorI2RlZmluZSBOX1NZTU9GRih4KSAoTl9EUkVMT0ZGKHgpICsgTl9EUlNJWkUoeCkpCisjZW5kaWYKKworI2lmbmRlZiBOX1NUUk9GRgorI2RlZmluZSBOX1NUUk9GRih4KSAoTl9TWU1PRkYoeCkgKyBOX1NZTVNJWkUoeCkpCisjZW5kaWYKKworI2lmbmRlZiBOX1RYVEFERFIKKyNkZWZpbmUgTl9UWFRBRERSKHgpIChOX01BR0lDKHgpID09IFFNQUdJQyA/IFBBR0VfU0laRSA6IDApCisjZW5kaWYKKworI2lmIGRlZmluZWQodmF4KSB8fCBkZWZpbmVkKGhwMzAwKSB8fCBkZWZpbmVkKHB5cikKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIHBhZ2Vfc2l6ZQorI2VuZGlmCisjaWZkZWYgc29ueQorI2RlZmluZSBTRUdNRU5UX1NJWkUgMHgyMDAwCisjZW5kaWYKKyNpZmRlZiBpczY4aworI2RlZmluZSBTRUdNRU5UX1NJWkUgMHgyMDAwMAorI2VuZGlmCisjaWYgZGVmaW5lZChtNjhrKSAmJiBkZWZpbmVkKFBPUlRBUikKKyNkZWZpbmUgUEFHRV9TSVpFIDB4NDAwCisjZGVmaW5lIFNFR01FTlRfU0laRSBQQUdFX1NJWkUKKyNlbmRpZgorCisjaWZkZWYgbGludXgKKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2lmIGRlZmluZWQoX19pMzg2X18pIHx8IGRlZmluZWQoX19tYzY4MDAwX18pCisjZGVmaW5lIFNFR01FTlRfU0laRSAxMDI0CisjZWxzZQorI2lmbmRlZiBTRUdNRU5UX1NJWkUKKyNkZWZpbmUgU0VHTUVOVF9TSVpFIFBBR0VfU0laRQorI2VuZGlmCisjZW5kaWYKKyNlbmRpZgorCisjZGVmaW5lIF9OX1NFR01FTlRfUk9VTkQoeCkgQUxJR04oeCwgU0VHTUVOVF9TSVpFKQorCisjZGVmaW5lIF9OX1RYVEVOREFERFIoeCkgKE5fVFhUQUREUih4KSsoeCkuYV90ZXh0KQorCisjaWZuZGVmIE5fREFUQUREUgorI2RlZmluZSBOX0RBVEFERFIoeCkgICAoTl9NQUdJQyh4KT09T01BR0lDPyAoX05fVFhURU5EQUREUih4KSkgICA6IChfTl9TRUdNRU5UX1JPVU5EIChfTl9UWFRFTkRBRERSKHgpKSkpCisjZW5kaWYKKworI2lmbmRlZiBOX0JTU0FERFIKKyNkZWZpbmUgTl9CU1NBRERSKHgpIChOX0RBVEFERFIoeCkgKyAoeCkuYV9kYXRhKQorI2VuZGlmCisKKyNpZm5kZWYgTl9OTElTVF9ERUNMQVJFRAorc3RydWN0IG5saXN0IHsKKyB1bmlvbiB7CisgY2hhciAqbl9uYW1lOworIHN0cnVjdCBubGlzdCAqbl9uZXh0OworIGxvbmcgbl9zdHJ4OworIH0gbl91bjsKKyB1bnNpZ25lZCBjaGFyIG5fdHlwZTsKKyBjaGFyIG5fb3RoZXI7Cisgc2hvcnQgbl9kZXNjOworIHVuc2lnbmVkIGxvbmcgbl92YWx1ZTsKK307CisjZW5kaWYKKworI2lmbmRlZiBOX1VOREYKKyNkZWZpbmUgTl9VTkRGIDAKKyNlbmRpZgorI2lmbmRlZiBOX0FCUworI2RlZmluZSBOX0FCUyAyCisjZW5kaWYKKyNpZm5kZWYgTl9URVhUCisjZGVmaW5lIE5fVEVYVCA0CisjZW5kaWYKKyNpZm5kZWYgTl9EQVRBCisjZGVmaW5lIE5fREFUQSA2CisjZW5kaWYKKyNpZm5kZWYgTl9CU1MKKyNkZWZpbmUgTl9CU1MgOAorI2VuZGlmCisjaWZuZGVmIE5fRk4KKyNkZWZpbmUgTl9GTiAxNQorI2VuZGlmCisKKyNpZm5kZWYgTl9FWFQKKyNkZWZpbmUgTl9FWFQgMQorI2VuZGlmCisjaWZuZGVmIE5fVFlQRQorI2RlZmluZSBOX1RZUEUgMDM2CisjZW5kaWYKKyNpZm5kZWYgTl9TVEFCCisjZGVmaW5lIE5fU1RBQiAwMzQwCisjZW5kaWYKKworI2RlZmluZSBOX0lORFIgMHhhCisKKyNkZWZpbmUgTl9TRVRBIDB4MTQgIAorI2RlZmluZSBOX1NFVFQgMHgxNiAgCisjZGVmaW5lIE5fU0VURCAweDE4ICAKKyNkZWZpbmUgTl9TRVRCIDB4MUEgIAorCisjZGVmaW5lIE5fU0VUViAweDFDICAKKworI2lmbmRlZiBOX1JFTE9DQVRJT05fSU5GT19ERUNMQVJFRAorCitzdHJ1Y3QgcmVsb2NhdGlvbl9pbmZvCit7CisKKyBpbnQgcl9hZGRyZXNzOworCisgdW5zaWduZWQgaW50IHJfc3ltYm9sbnVtOjI0OworCisgdW5zaWduZWQgaW50IHJfcGNyZWw6MTsKKworIHVuc2lnbmVkIGludCByX2xlbmd0aDoyOworCisgdW5zaWduZWQgaW50IHJfZXh0ZXJuOjE7CisKKyNpZmRlZiBOUzMySworIHVuc2lnbmVkIHJfYnNyOjE7CisgdW5zaWduZWQgcl9kaXNwOjE7CisgdW5zaWduZWQgcl9wYWQ6MjsKKyNlbHNlCisgdW5zaWduZWQgaW50IHJfcGFkOjQ7CisjZW5kaWYKK307CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWlvX2FiaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Fpb19hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOTJiYzhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Fpb19hYmkuaApAQCAtMCwwICsxLDY0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfX0FJT19BQklfSAorI2RlZmluZSBfX0xJTlVYX19BSU9fQUJJX0gKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKwordHlwZWRlZiB1bnNpZ25lZCBsb25nIGFpb19jb250ZXh0X3Q7CisKK2VudW0geworIElPQ0JfQ01EX1BSRUFEID0gMCwKKyBJT0NCX0NNRF9QV1JJVEUgPSAxLAorIElPQ0JfQ01EX0ZTWU5DID0gMiwKKyBJT0NCX0NNRF9GRFNZTkMgPSAzLAorCisgSU9DQl9DTURfTk9PUCA9IDYsCit9OworCitzdHJ1Y3QgaW9fZXZlbnQgeworIF9fdTY0IGRhdGE7CisgX191NjQgb2JqOworIF9fczY0IHJlczsKKyBfX3M2NCByZXMyOworfTsKKworI2lmZGVmIF9fTElUVExFX0VORElBTgorI2RlZmluZSBQQURERUQoeCx5KSB4LCB5CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTikKKyNkZWZpbmUgUEFEREVEKHgseSkgeSwgeAorI2Vsc2UKKyNlcnJvciBlZGl0IGZvciB5b3VyIG9kZCBieXRlb3JkZXIuCisjZW5kaWYKKworc3RydWN0IGlvY2IgeworCisgX191NjQgYWlvX2RhdGE7CisgX191MzIgUEFEREVEKGFpb19rZXksIGFpb19yZXNlcnZlZDEpOworCisgX191MTYgYWlvX2xpb19vcGNvZGU7CisgX19zMTYgYWlvX3JlcXByaW87CisgX191MzIgYWlvX2ZpbGRlczsKKworIF9fdTY0IGFpb19idWY7CisgX191NjQgYWlvX25ieXRlczsKKyBfX3M2NCBhaW9fb2Zmc2V0OworCisgX191NjQgYWlvX3Jlc2VydmVkMjsKKyBfX3U2NCBhaW9fcmVzZXJ2ZWQzOworfTsKKworI3VuZGVmIElGQklHCisjdW5kZWYgSUZMSVRUTEUKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ha204OTc2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3Ni5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1YWE2OGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYWttODk3Ni5oCkBAIC0wLDAgKzEsODkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgQUtNODk3Nl9ICisjZGVmaW5lIEFLTTg5NzZfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBBS0VDU19NT0RFX01FQVNVUkUgMHgwMCAgCisKKyNkZWZpbmUgQUtFQ1NfTU9ERV9QRkZEIDB4MDEgIAorI2RlZmluZSBBS0VDU19NT0RFX0UyUF9SRUFEIDB4MDIgIAorI2RlZmluZSBBS0VDU19NT0RFX1BPV0VSRE9XTiAweDAzICAKKworI2RlZmluZSBBS0VDU19NT0RFX01FQVNVUkVfU05HIDB4MTAgIAorI2RlZmluZSBBS0VDU19NT0RFX01FQVNVUkVfU0VRIDB4MTEgIAorCisjZGVmaW5lIENTUEVDX0FJTlQgMHgwMSAgCisjZGVmaW5lIENTUEVDX1NOR19OVU0gMHgwMSAgCisjZGVmaW5lIENTUEVDX1NFUV9OVU0gMHgwMiAgCisjZGVmaW5lIENTUEVDX1NGUlFfMzIgMHgwMCAgCisjZGVmaW5lIENTUEVDX1NGUlFfNjQgMHgwMSAgCisjZGVmaW5lIENTUEVDX01DUyAweDA3ICAKKyNkZWZpbmUgQ1NQRUNfTUtTIDB4MDEgIAorI2RlZmluZSBDU1BFQ19JTlRFTiAweDAxICAKKworI2RlZmluZSBSQlVGRl9TSVpFIDMxICAKKyNkZWZpbmUgTUFYX0NBTElfU0laRSAweDEwMDBVICAKKworI2RlZmluZSBBS0VDU19SRUdfU1QgMHhDMAorI2RlZmluZSBBS0VDU19SRUdfVE1QUyAweEMxCisjZGVmaW5lIEFLRUNTX1JFR19NUzEgMHhFMAorI2RlZmluZSBBS0VDU19SRUdfTVMyIDB4RTEKKyNkZWZpbmUgQUtFQ1NfUkVHX01TMyAweEUyCisKKyNkZWZpbmUgQUtNSU8gMHhBMQorCisjZGVmaW5lIEVDU19JT0NUTF9JTklUIF9JTyhBS01JTywgMHgwMSkKKyNkZWZpbmUgRUNTX0lPQ1RMX1dSSVRFIF9JT1coQUtNSU8sIDB4MDIsIGNoYXJbNV0pCisjZGVmaW5lIEVDU19JT0NUTF9SRUFEIF9JT1dSKEFLTUlPLCAweDAzLCBjaGFyWzVdKQorI2RlZmluZSBFQ1NfSU9DVExfUkVTRVQgX0lPKEFLTUlPLCAweDA0KQorI2RlZmluZSBFQ1NfSU9DVExfSU5UX1NUQVRVUyBfSU8oQUtNSU8sIDB4MDUpCisjZGVmaW5lIEVDU19JT0NUTF9GRkRfU1RBVFVTIF9JTyhBS01JTywgMHgwNikKKyNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9NT0RFIF9JT1coQUtNSU8sIDB4MDcsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfR0VUREFUQSBfSU9SKEFLTUlPLCAweDA4LCBjaGFyW1JCVUZGX1NJWkUrMV0pCisjZGVmaW5lIEVDU19JT0NUTF9HRVRfTlVNRlJRIF9JT1IoQUtNSU8sIDB4MDksIGNoYXJbMl0pCisjZGVmaW5lIEVDU19JT0NUTF9TRVRfUEVSU1QgX0lPKEFLTUlPLCAweDBBKQorI2RlZmluZSBFQ1NfSU9DVExfU0VUX0cwUlNUIF9JTyhBS01JTywgMHgwQikKKyNkZWZpbmUgRUNTX0lPQ1RMX1NFVF9ZUFIgX0lPVyhBS01JTywgMHgwQywgc2hvcnRbMTJdKQorI2RlZmluZSBFQ1NfSU9DVExfR0VUX09QRU5fU1RBVFVTIF9JT1IoQUtNSU8sIDB4MEQsIGludCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0dFVF9DTE9TRV9TVEFUVVMgX0lPUihBS01JTywgMHgwRSwgaW50KQorI2RlZmluZSBFQ1NfSU9DVExfR0VUX0NBTElfREFUQSBfSU9SKEFLTUlPLCAweDBGLCBjaGFyW01BWF9DQUxJX1NJWkVdKQorI2RlZmluZSBFQ1NfSU9DVExfR0VUX0RFTEFZIF9JT1IoQUtNSU8sIDB4MzAsIHNob3J0KQorCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01PREUgX0lPVyhBS01JTywgMHgxMCwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfU0VUX01GTEFHIF9JT1coQUtNSU8sIDB4MTEsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX0dFVF9NRkxBRyBfSU9XKEFLTUlPLCAweDEyLCBzaG9ydCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfQUZMQUcgX0lPVyhBS01JTywgMHgxMywgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX0FGTEFHIF9JT1IoQUtNSU8sIDB4MTQsIHNob3J0KQorI2RlZmluZSBFQ1NfSU9DVExfQVBQX1NFVF9URkxBRyBfSU9SKEFLTUlPLCAweDE1LCBzaG9ydCkKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9HRVRfVEZMQUcgX0lPUihBS01JTywgMHgxNiwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfUkVTRVRfUEVET01FVEVSIF9JTyhBS01JTywgMHgxNykKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfREVMQVkgX0lPVyhBS01JTywgMHgxOCwgc2hvcnQpCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX0RFTEFZIEVDU19JT0NUTF9HRVRfREVMQVkKKyNkZWZpbmUgRUNTX0lPQ1RMX0FQUF9TRVRfTVZGTEFHIF9JT1coQUtNSU8sIDB4MTksIHNob3J0KSAgCisjZGVmaW5lIEVDU19JT0NUTF9BUFBfR0VUX01WRkxBRyBfSU9SKEFLTUlPLCAweDFBLCBzaG9ydCkgIAorCisjZGVmaW5lIEVDU19JT0NUTF9TRVRfU1RFUF9DTlQgX0lPVyhBS01JTywgMHgyMCwgc2hvcnQpCisKKyNkZWZpbmUgRUNTX1JTVCAxNDYgIAorI2RlZmluZSBFQ1NfQ0xLX09OIDE1NSAgCisjZGVmaW5lIEVDU19JTlRSIDE2MSAgCisKK3N0cnVjdCBha204OTc2X3BsYXRmb3JtX2RhdGEgeworIGludCByZXNldDsKKyBpbnQgY2xrX29uOworIGludCBpbnRyOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hbmRyb2lkX2FsYXJtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9hbGFybS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhOTU2MTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9hbGFybS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FORFJPSURfQUxBUk1fSAorI2RlZmluZSBfTElOVVhfQU5EUk9JRF9BTEFSTV9ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisKK3R5cGVkZWYgZW51bSB7CisKKyBBTkRST0lEX0FMQVJNX1JUQ19XQUtFVVAsCisgQU5EUk9JRF9BTEFSTV9SVEMsCisgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FX1dBS0VVUCwKKyBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUUsCisgQU5EUk9JRF9BTEFSTV9TWVNURU1USU1FLAorCisgQU5EUk9JRF9BTEFSTV9UWVBFX0NPVU5ULAorCit9IGFuZHJvaWRfYWxhcm1fdHlwZV90OworCit0eXBlZGVmIGVudW0geworIEFORFJPSURfQUxBUk1fUlRDX1dBS0VVUF9NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9SVENfV0FLRVVQLAorIEFORFJPSURfQUxBUk1fUlRDX01BU0sgPSAxVSA8PCBBTkRST0lEX0FMQVJNX1JUQywKKyBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUVfV0FLRVVQX01BU0sgPSAxVSA8PCBBTkRST0lEX0FMQVJNX0VMQVBTRURfUkVBTFRJTUVfV0FLRVVQLAorIEFORFJPSURfQUxBUk1fRUxBUFNFRF9SRUFMVElNRV9NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9FTEFQU0VEX1JFQUxUSU1FLAorIEFORFJPSURfQUxBUk1fU1lTVEVNVElNRV9NQVNLID0gMVUgPDwgQU5EUk9JRF9BTEFSTV9TWVNURU1USU1FLAorIEFORFJPSURfQUxBUk1fVElNRV9DSEFOR0VfTUFTSyA9IDFVIDw8IDE2Cit9IGFuZHJvaWRfYWxhcm1fcmV0dXJuX2ZsYWdzX3Q7CisKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9DTEVBUih0eXBlKSBfSU8oJ2EnLCAwIHwgKCh0eXBlKSA8PCA0KSkgCisjZGVmaW5lIEFORFJPSURfQUxBUk1fV0FJVCBfSU8oJ2EnLCAxKSAKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9TRVQodHlwZSkgX0lPVygnYScsIDIgfCAoKHR5cGUpIDw8IDQpLCBzdHJ1Y3QgdGltZXNwZWMpIAorI2RlZmluZSBBTkRST0lEX0FMQVJNX1NFVF9BTkRfV0FJVCh0eXBlKSBfSU9XKCdhJywgMyB8ICgodHlwZSkgPDwgNCksIHN0cnVjdCB0aW1lc3BlYykKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9HRVRfVElNRSh0eXBlKSBfSU9XKCdhJywgNCB8ICgodHlwZSkgPDwgNCksIHN0cnVjdCB0aW1lc3BlYykKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9TRVRfUlRDIF9JT1coJ2EnLCA1LCBzdHJ1Y3QgdGltZXNwZWMpCisKKyNkZWZpbmUgQU5EUk9JRF9BTEFSTV9CQVNFX0NNRChjbWQpIChjbWQgJiB+KF9JT0MoMCwgMCwgMHhmMCwgMCkpKQorI2RlZmluZSBBTkRST0lEX0FMQVJNX0lPQ1RMX1RPX1RZUEUoY21kKSAoX0lPQ19OUihjbWQpID4+IDQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG1lbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG1lbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1ODg1N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9wbWVtLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQU5EUk9JRF9QTUVNX0hfCisjZGVmaW5lIF9BTkRST0lEX1BNRU1fSF8KKworI2luY2x1ZGUgPHN0ZGludC5oPgorCisjaWZuZGVmIF9fdXNlcgorI2RlZmluZSBfX3VzZXIKKyNlbmRpZgorCitzdHJ1Y3QgcG1lbV9yZWdpb24geworIHVuc2lnbmVkIGxvbmcgb2Zmc2V0OworIHVuc2lnbmVkIGxvbmcgbGVuOworfTsKKworI2RlZmluZSBQTUVNX0lPQ1RMX01BR0lDICdwJworI2RlZmluZSBQTUVNX0dFVF9QSFlTIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgMSwgc3RydWN0IHBtZW1fcmVnaW9uICopCisjZGVmaW5lIFBNRU1fTUFQIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgMiwgc3RydWN0IHBtZW1fcmVnaW9uICopCisjZGVmaW5lIFBNRU1fR0VUX1NJWkUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCAzLCBzdHJ1Y3QgcG1lbV9yZWdpb24gKikKKyNkZWZpbmUgUE1FTV9VTk1BUCBfSU9XKFBNRU1fSU9DVExfTUFHSUMsIDQsIHN0cnVjdCBwbWVtX3JlZ2lvbiAqKQorCisjZGVmaW5lIFBNRU1fQUxMT0NBVEUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA1LCB1bnNpZ25lZCBpbnQpCisKKyNkZWZpbmUgUE1FTV9DT05ORUNUIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgNiwgdW5zaWduZWQgaW50KQorCisjZGVmaW5lIFBNRU1fR0VUX1RPVEFMX1NJWkUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA3LCBzdHJ1Y3QgcG1lbV9yZWdpb24gKikKKworI2RlZmluZSBIVzNEX1JFVk9LRV9HUFUgX0lPVyhQTUVNX0lPQ1RMX01BR0lDLCA4LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIEhXM0RfR1JBTlRfR1BVIF9JT1coUE1FTV9JT0NUTF9NQUdJQywgOSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBIVzNEX1dBSVRfSVJRIF9JT1coUE1FTV9JT0NUTF9NQUdJQywxMCwgdW5zaWduZWQgaW50KQorCitzdHJ1Y3QgYW5kcm9pZF9wbWVtX3BsYXRmb3JtX2RhdGE7CitzdHJ1Y3QgcG1lbV9maWxlX29wZXJhdGlvbnMgeworIGludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CisgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKKyBzc2l6ZV90ICgqcmVhZCkgKHN0cnVjdCBmaWxlICosIGNoYXIgX191c2VyICosIHNpemVfdCwgbG9uZyBsb25nICopOworIGludCAoKnJlbGVhc2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisgbG9uZyAoKmlvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYW5kcm9pZF9wb3dlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG93ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTkwMzIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FuZHJvaWRfcG93ZXIuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BTkRST0lEX1BPV0VSX0gKKyNkZWZpbmUgX0xJTlVYX0FORFJPSURfUE9XRVJfSAorCisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCit0eXBlZGVmIHN0cnVjdAoreworIHN0cnVjdCBsaXN0X2hlYWQgbGluazsKKyBpbnQgbG9ja19jb3VudDsKKyBpbnQgZmxhZ3M7CisgY29uc3QgY2hhciAqbmFtZTsKKyBpbnQgZXhwaXJlczsKK30gYW5kcm9pZF9zdXNwZW5kX2xvY2tfdDsKKworI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX0NPVU5URUQgKDFVIDw8IDApCisjZGVmaW5lIEFORFJPSURfU1VTUEVORF9MT0NLX0ZMQUdfVVNFUl9SRUFEQUJMRSAoMVUgPDwgMSkKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX1NFVCAoMVUgPDwgMikKKyNkZWZpbmUgQU5EUk9JRF9TVVNQRU5EX0xPQ0tfRkxBR19VU0VSX0NMRUFSICgxVSA8PCAzKQorI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfSU5DICgxVSA8PCA0KQorI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfREVDICgxVSA8PCA1KQorI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19GTEFHX1VTRVJfVklTSUJMRV9NQVNLICgweDFmVSA8PCAxKQorI2RlZmluZSBBTkRST0lEX1NVU1BFTkRfTE9DS19BVVRPX0VYUElSRSAoMVUgPDwgNikKKwordHlwZWRlZiBzdHJ1Y3QgYW5kcm9pZF9lYXJseV9zdXNwZW5kIGFuZHJvaWRfZWFybHlfc3VzcGVuZF90Oworc3RydWN0IGFuZHJvaWRfZWFybHlfc3VzcGVuZAoreworIHN0cnVjdCBsaXN0X2hlYWQgbGluazsKKyBpbnQgbGV2ZWw7Cisgdm9pZCAoKnN1c3BlbmQpKGFuZHJvaWRfZWFybHlfc3VzcGVuZF90ICpoKTsKKyB2b2lkICgqcmVzdW1lKShhbmRyb2lkX2Vhcmx5X3N1c3BlbmRfdCAqaCk7Cit9OworCit0eXBlZGVmIGVudW0geworIEFORFJPSURfQ0hBUkdJTkdfU1RBVEVfVU5LTk9XTiwKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX0RJU0NIQVJHRSwKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX01BSU5UQUlOLAorIEFORFJPSURfQ0hBUkdJTkdfU1RBVEVfU0xPVywKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX05PUk1BTCwKKyBBTkRST0lEX0NIQVJHSU5HX1NUQVRFX0ZBU1QsCisgQU5EUk9JRF9DSEFSR0lOR19TVEFURV9PVkVSSEVBVAorfSBhbmRyb2lkX2NoYXJnaW5nX3N0YXRlX3Q7CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXBtX2Jpb3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hcG1fYmlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQzMmI0YWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXBtX2Jpb3MuaApAQCAtMCwwICsxLDk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BUE1fSAorI2RlZmluZSBfTElOVVhfQVBNX0gKKwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBhcG1fZXZlbnRfdDsKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgYXBtX2V2ZW50aW5mb190OworCisjZGVmaW5lIEFQTV9TVEFURV9SRUFEWSAweDAwMDAKKyNkZWZpbmUgQVBNX1NUQVRFX1NUQU5EQlkgMHgwMDAxCisjZGVmaW5lIEFQTV9TVEFURV9TVVNQRU5EIDB4MDAwMgorI2RlZmluZSBBUE1fU1RBVEVfT0ZGIDB4MDAwMworI2RlZmluZSBBUE1fU1RBVEVfQlVTWSAweDAwMDQKKyNkZWZpbmUgQVBNX1NUQVRFX1JFSkVDVCAweDAwMDUKKyNkZWZpbmUgQVBNX1NUQVRFX09FTV9TWVMgMHgwMDIwCisjZGVmaW5lIEFQTV9TVEFURV9PRU1fREVWIDB4MDA0MAorCisjZGVmaW5lIEFQTV9TVEFURV9ESVNBQkxFIDB4MDAwMAorI2RlZmluZSBBUE1fU1RBVEVfRU5BQkxFIDB4MDAwMQorCisjZGVmaW5lIEFQTV9TVEFURV9ESVNFTkdBR0UgMHgwMDAwCisjZGVmaW5lIEFQTV9TVEFURV9FTkdBR0UgMHgwMDAxCisKKyNkZWZpbmUgQVBNX1NZU19TVEFOREJZIDB4MDAwMQorI2RlZmluZSBBUE1fU1lTX1NVU1BFTkQgMHgwMDAyCisjZGVmaW5lIEFQTV9OT1JNQUxfUkVTVU1FIDB4MDAwMworI2RlZmluZSBBUE1fQ1JJVElDQUxfUkVTVU1FIDB4MDAwNAorI2RlZmluZSBBUE1fTE9XX0JBVFRFUlkgMHgwMDA1CisjZGVmaW5lIEFQTV9QT1dFUl9TVEFUVVNfQ0hBTkdFIDB4MDAwNgorI2RlZmluZSBBUE1fVVBEQVRFX1RJTUUgMHgwMDA3CisjZGVmaW5lIEFQTV9DUklUSUNBTF9TVVNQRU5EIDB4MDAwOAorI2RlZmluZSBBUE1fVVNFUl9TVEFOREJZIDB4MDAwOQorI2RlZmluZSBBUE1fVVNFUl9TVVNQRU5EIDB4MDAwYQorI2RlZmluZSBBUE1fU1RBTkRCWV9SRVNVTUUgMHgwMDBiCisjZGVmaW5lIEFQTV9DQVBBQklMSVRZX0NIQU5HRSAweDAwMGMKKworI2RlZmluZSBBUE1fU1VDQ0VTUyAweDAwCisjZGVmaW5lIEFQTV9ESVNBQkxFRCAweDAxCisjZGVmaW5lIEFQTV9DT05ORUNURUQgMHgwMgorI2RlZmluZSBBUE1fTk9UX0NPTk5FQ1RFRCAweDAzCisjZGVmaW5lIEFQTV8xNl9DT05ORUNURUQgMHgwNQorI2RlZmluZSBBUE1fMTZfVU5TVVBQT1JURUQgMHgwNgorI2RlZmluZSBBUE1fMzJfQ09OTkVDVEVEIDB4MDcKKyNkZWZpbmUgQVBNXzMyX1VOU1VQUE9SVEVEIDB4MDgKKyNkZWZpbmUgQVBNX0JBRF9ERVZJQ0UgMHgwOQorI2RlZmluZSBBUE1fQkFEX1BBUkFNIDB4MGEKKyNkZWZpbmUgQVBNX05PVF9FTkdBR0VEIDB4MGIKKyNkZWZpbmUgQVBNX0JBRF9GVU5DVElPTiAweDBjCisjZGVmaW5lIEFQTV9SRVNVTUVfRElTQUJMRUQgMHgwZAorI2RlZmluZSBBUE1fTk9fRVJST1IgMHg1MworI2RlZmluZSBBUE1fQkFEX1NUQVRFIDB4NjAKKyNkZWZpbmUgQVBNX05PX0VWRU5UUyAweDgwCisjZGVmaW5lIEFQTV9OT1RfUFJFU0VOVCAweDg2CisKKyNkZWZpbmUgQVBNX0RFVklDRV9CSU9TIDB4MDAwMAorI2RlZmluZSBBUE1fREVWSUNFX0FMTCAweDAwMDEKKyNkZWZpbmUgQVBNX0RFVklDRV9ESVNQTEFZIDB4MDEwMAorI2RlZmluZSBBUE1fREVWSUNFX1NUT1JBR0UgMHgwMjAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfUEFSQUxMRUwgMHgwMzAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfU0VSSUFMIDB4MDQwMAorI2RlZmluZSBBUE1fREVWSUNFX05FVFdPUksgMHgwNTAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfUENNQ0lBIDB4MDYwMAorI2RlZmluZSBBUE1fREVWSUNFX0JBVFRFUlkgMHg4MDAwCisjZGVmaW5lIEFQTV9ERVZJQ0VfT0VNIDB4ZTAwMAorI2RlZmluZSBBUE1fREVWSUNFX09MRF9BTEwgMHhmZmZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfQ0xBU1MgMHgwMGZmCisjZGVmaW5lIEFQTV9ERVZJQ0VfTUFTSyAweGZmMDAKKworI2RlZmluZSBBUE1fTUFYX0JBVFRFUklFUyAyCisKKyNkZWZpbmUgQVBNX0NBUF9HTE9CQUxfU1RBTkRCWSAweDAwMDEKKyNkZWZpbmUgQVBNX0NBUF9HTE9CQUxfU1VTUEVORCAweDAwMDIKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9USU1FUiAweDAwMDQgIAorI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVVNQRU5EX1RJTUVSIDB4MDAwOCAgCisjZGVmaW5lIEFQTV9DQVBfUkVTVU1FX1NUQU5EQllfUklORyAweDAwMTAgIAorI2RlZmluZSBBUE1fQ0FQX1JFU1VNRV9TVVNQRU5EX1JJTkcgMHgwMDIwICAKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1RBTkRCWV9QQ01DSUEgMHgwMDQwICAKKyNkZWZpbmUgQVBNX0NBUF9SRVNVTUVfU1VTUEVORF9QQ01DSUEgMHgwMDgwICAKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQVBNX0lPQ19TVEFOREJZIF9JTygnQScsIDEpCisjZGVmaW5lIEFQTV9JT0NfU1VTUEVORCBfSU8oJ0EnLCAyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hc2htZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hc2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTdkMWRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2FzaG1lbS5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FTSE1FTV9ICisjZGVmaW5lIF9MSU5VWF9BU0hNRU1fSAorCisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI2RlZmluZSBBU0hNRU1fTkFNRV9MRU4gMjU2CisKKyNkZWZpbmUgQVNITUVNX05BTUVfREVGICJkZXYvYXNobWVtIgorCisjZGVmaW5lIEFTSE1FTV9OT1RfUFVSR0VEIDAKKyNkZWZpbmUgQVNITUVNX1dBU19QVVJHRUQgMQorCisjZGVmaW5lIEFTSE1FTV9JU19VTlBJTk5FRCAwCisjZGVmaW5lIEFTSE1FTV9JU19QSU5ORUQgMQorCitzdHJ1Y3QgYXNobWVtX3BpbiB7CisgX191MzIgb2Zmc2V0OworIF9fdTMyIGxlbjsKK307CisKKyNkZWZpbmUgX19BU0hNRU1JT0MgMHg3NworCisjZGVmaW5lIEFTSE1FTV9TRVRfTkFNRSBfSU9XKF9fQVNITUVNSU9DLCAxLCBjaGFyW0FTSE1FTV9OQU1FX0xFTl0pCisjZGVmaW5lIEFTSE1FTV9HRVRfTkFNRSBfSU9SKF9fQVNITUVNSU9DLCAyLCBjaGFyW0FTSE1FTV9OQU1FX0xFTl0pCisjZGVmaW5lIEFTSE1FTV9TRVRfU0laRSBfSU9XKF9fQVNITUVNSU9DLCAzLCBzaXplX3QpCisjZGVmaW5lIEFTSE1FTV9HRVRfU0laRSBfSU8oX19BU0hNRU1JT0MsIDQpCisjZGVmaW5lIEFTSE1FTV9TRVRfUFJPVF9NQVNLIF9JT1coX19BU0hNRU1JT0MsIDUsIHVuc2lnbmVkIGxvbmcpCisjZGVmaW5lIEFTSE1FTV9HRVRfUFJPVF9NQVNLIF9JTyhfX0FTSE1FTUlPQywgNikKKyNkZWZpbmUgQVNITUVNX1BJTiBfSU9XKF9fQVNITUVNSU9DLCA3LCBzdHJ1Y3QgYXNobWVtX3BpbikKKyNkZWZpbmUgQVNITUVNX1VOUElOIF9JT1coX19BU0hNRU1JT0MsIDgsIHN0cnVjdCBhc2htZW1fcGluKQorI2RlZmluZSBBU0hNRU1fR0VUX1BJTl9TVEFUVVMgX0lPKF9fQVNITUVNSU9DLCA5KQorI2RlZmluZSBBU0hNRU1fUFVSR0VfQUxMX0NBQ0hFUyBfSU8oX19BU0hNRU1JT0MsIDEwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdGEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NmFmNTc2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0YS5oCkBAIC0wLDAgKzEsMjY1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQVRBX0hfXworI2RlZmluZSBfX0xJTlVYX0FUQV9IX18KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQVRBX0RNQV9CT1VOREFSWSAweGZmZmZVTAorI2RlZmluZSBBVEFfRE1BX01BU0sgMHhmZmZmZmZmZlVMTAorCitlbnVtIHsKKworIEFUQV9NQVhfREVWSUNFUyA9IDIsCisgQVRBX01BWF9QUkQgPSAyNTYsCisgQVRBX1NFQ1RfU0laRSA9IDUxMiwKKworIEFUQV9JRF9XT1JEUyA9IDI1NiwKKyBBVEFfSURfU0VSTk9fT0ZTID0gMTAsCisgQVRBX0lEX0ZXX1JFVl9PRlMgPSAyMywKKyBBVEFfSURfUFJPRF9PRlMgPSAyNywKKyBBVEFfSURfT0xEX1BJT19NT0RFUyA9IDUxLAorIEFUQV9JRF9GSUVMRF9WQUxJRCA9IDUzLAorIEFUQV9JRF9NV0RNQV9NT0RFUyA9IDYzLAorIEFUQV9JRF9QSU9fTU9ERVMgPSA2NCwKKyBBVEFfSURfRUlERV9ETUFfTUlOID0gNjUsCisgQVRBX0lEX0VJREVfUElPID0gNjcsCisgQVRBX0lEX0VJREVfUElPX0lPUkRZID0gNjgsCisgQVRBX0lEX1VETUFfTU9ERVMgPSA4OCwKKyBBVEFfSURfTUFKT1JfVkVSID0gODAsCisgQVRBX0lEX1BJTzQgPSAoMSA8PCAxKSwKKworIEFUQV9QQ0lfQ1RMX09GUyA9IDIsCisgQVRBX1NFUk5PX0xFTiA9IDIwLAorIEFUQV9VRE1BMCA9ICgxIDw8IDApLAorIEFUQV9VRE1BMSA9IEFUQV9VRE1BMCB8ICgxIDw8IDEpLAorIEFUQV9VRE1BMiA9IEFUQV9VRE1BMSB8ICgxIDw8IDIpLAorIEFUQV9VRE1BMyA9IEFUQV9VRE1BMiB8ICgxIDw8IDMpLAorIEFUQV9VRE1BNCA9IEFUQV9VRE1BMyB8ICgxIDw8IDQpLAorIEFUQV9VRE1BNSA9IEFUQV9VRE1BNCB8ICgxIDw8IDUpLAorIEFUQV9VRE1BNiA9IEFUQV9VRE1BNSB8ICgxIDw8IDYpLAorIEFUQV9VRE1BNyA9IEFUQV9VRE1BNiB8ICgxIDw8IDcpLAorCisgQVRBX1VETUFfTUFTS180MEMgPSBBVEFfVURNQTIsCisKKyBBVEFfUFJEX1NaID0gOCwKKyBBVEFfUFJEX1RCTF9TWiA9IChBVEFfTUFYX1BSRCAqIEFUQV9QUkRfU1opLAorIEFUQV9QUkRfRU9UID0gKDEgPDwgMzEpLAorCisgQVRBX0RNQV9UQUJMRV9PRlMgPSA0LAorIEFUQV9ETUFfU1RBVFVTID0gMiwKKyBBVEFfRE1BX0NNRCA9IDAsCisgQVRBX0RNQV9XUiA9ICgxIDw8IDMpLAorIEFUQV9ETUFfU1RBUlQgPSAoMSA8PCAwKSwKKyBBVEFfRE1BX0lOVFIgPSAoMSA8PCAyKSwKKyBBVEFfRE1BX0VSUiA9ICgxIDw8IDEpLAorIEFUQV9ETUFfQUNUSVZFID0gKDEgPDwgMCksCisKKyBBVEFfSE9CID0gKDEgPDwgNyksCisgQVRBX05JRU4gPSAoMSA8PCAxKSwKKyBBVEFfTEJBID0gKDEgPDwgNiksCisgQVRBX0RFVjEgPSAoMSA8PCA0KSwKKyBBVEFfREVWSUNFX09CUyA9ICgxIDw8IDcpIHwgKDEgPDwgNSksCisgQVRBX0RFVkNUTF9PQlMgPSAoMSA8PCAzKSwKKyBBVEFfQlVTWSA9ICgxIDw8IDcpLAorIEFUQV9EUkRZID0gKDEgPDwgNiksCisgQVRBX0RGID0gKDEgPDwgNSksCisgQVRBX0RSUSA9ICgxIDw8IDMpLAorIEFUQV9FUlIgPSAoMSA8PCAwKSwKKyBBVEFfU1JTVCA9ICgxIDw8IDIpLAorIEFUQV9JQ1JDID0gKDEgPDwgNyksCisgQVRBX1VOQyA9ICgxIDw8IDYpLAorIEFUQV9JRE5GID0gKDEgPDwgNCksCisgQVRBX0FCT1JURUQgPSAoMSA8PCAyKSwKKworIEFUQV9SRUdfREFUQSA9IDB4MDAsCisgQVRBX1JFR19FUlIgPSAweDAxLAorIEFUQV9SRUdfTlNFQ1QgPSAweDAyLAorIEFUQV9SRUdfTEJBTCA9IDB4MDMsCisgQVRBX1JFR19MQkFNID0gMHgwNCwKKyBBVEFfUkVHX0xCQUggPSAweDA1LAorIEFUQV9SRUdfREVWSUNFID0gMHgwNiwKKyBBVEFfUkVHX1NUQVRVUyA9IDB4MDcsCisKKyBBVEFfUkVHX0ZFQVRVUkUgPSBBVEFfUkVHX0VSUiwKKyBBVEFfUkVHX0NNRCA9IEFUQV9SRUdfU1RBVFVTLAorIEFUQV9SRUdfQllURUwgPSBBVEFfUkVHX0xCQU0sCisgQVRBX1JFR19CWVRFSCA9IEFUQV9SRUdfTEJBSCwKKyBBVEFfUkVHX0RFVlNFTCA9IEFUQV9SRUdfREVWSUNFLAorIEFUQV9SRUdfSVJRID0gQVRBX1JFR19OU0VDVCwKKworIEFUQV9DTURfQ0hLX1BPV0VSID0gMHhFNSwKKyBBVEFfQ01EX1NUQU5EQlkgPSAweEUyLAorIEFUQV9DTURfSURMRSA9IDB4RTMsCisgQVRBX0NNRF9FREQgPSAweDkwLAorIEFUQV9DTURfRkxVU0ggPSAweEU3LAorIEFUQV9DTURfRkxVU0hfRVhUID0gMHhFQSwKKyBBVEFfQ01EX0lEX0FUQSA9IDB4RUMsCisgQVRBX0NNRF9JRF9BVEFQSSA9IDB4QTEsCisgQVRBX0NNRF9SRUFEID0gMHhDOCwKKyBBVEFfQ01EX1JFQURfRVhUID0gMHgyNSwKKyBBVEFfQ01EX1dSSVRFID0gMHhDQSwKKyBBVEFfQ01EX1dSSVRFX0VYVCA9IDB4MzUsCisgQVRBX0NNRF9XUklURV9GVUFfRVhUID0gMHgzRCwKKyBBVEFfQ01EX0ZQRE1BX1JFQUQgPSAweDYwLAorIEFUQV9DTURfRlBETUFfV1JJVEUgPSAweDYxLAorIEFUQV9DTURfUElPX1JFQUQgPSAweDIwLAorIEFUQV9DTURfUElPX1JFQURfRVhUID0gMHgyNCwKKyBBVEFfQ01EX1BJT19XUklURSA9IDB4MzAsCisgQVRBX0NNRF9QSU9fV1JJVEVfRVhUID0gMHgzNCwKKyBBVEFfQ01EX1JFQURfTVVMVEkgPSAweEM0LAorIEFUQV9DTURfUkVBRF9NVUxUSV9FWFQgPSAweDI5LAorIEFUQV9DTURfV1JJVEVfTVVMVEkgPSAweEM1LAorIEFUQV9DTURfV1JJVEVfTVVMVElfRVhUID0gMHgzOSwKKyBBVEFfQ01EX1dSSVRFX01VTFRJX0ZVQV9FWFQgPSAweENFLAorIEFUQV9DTURfU0VUX0ZFQVRVUkVTID0gMHhFRiwKKyBBVEFfQ01EX1BBQ0tFVCA9IDB4QTAsCisgQVRBX0NNRF9WRVJJRlkgPSAweDQwLAorIEFUQV9DTURfVkVSSUZZX0VYVCA9IDB4NDIsCisgQVRBX0NNRF9TVEFOREJZTk9XMSA9IDB4RTAsCisgQVRBX0NNRF9JRExFSU1NRURJQVRFID0gMHhFMSwKKyBBVEFfQ01EX0lOSVRfREVWX1BBUkFNUyA9IDB4OTEsCisgQVRBX0NNRF9SRUFEX05BVElWRV9NQVggPSAweEY4LAorIEFUQV9DTURfUkVBRF9OQVRJVkVfTUFYX0VYVCA9IDB4MjcsCisgQVRBX0NNRF9SRUFEX0xPR19FWFQgPSAweDJmLAorCisgQVRBX0xPR19TQVRBX05DUSA9IDB4MTAsCisKKyBTRVRGRUFUVVJFU19YRkVSID0gMHgwMywKKyBYRkVSX1VETUFfNyA9IDB4NDcsCisgWEZFUl9VRE1BXzYgPSAweDQ2LAorIFhGRVJfVURNQV81ID0gMHg0NSwKKyBYRkVSX1VETUFfNCA9IDB4NDQsCisgWEZFUl9VRE1BXzMgPSAweDQzLAorIFhGRVJfVURNQV8yID0gMHg0MiwKKyBYRkVSX1VETUFfMSA9IDB4NDEsCisgWEZFUl9VRE1BXzAgPSAweDQwLAorIFhGRVJfTVdfRE1BXzIgPSAweDIyLAorIFhGRVJfTVdfRE1BXzEgPSAweDIxLAorIFhGRVJfTVdfRE1BXzAgPSAweDIwLAorIFhGRVJfU1dfRE1BXzIgPSAweDEyLAorIFhGRVJfU1dfRE1BXzEgPSAweDExLAorIFhGRVJfU1dfRE1BXzAgPSAweDEwLAorIFhGRVJfUElPXzQgPSAweDBDLAorIFhGRVJfUElPXzMgPSAweDBCLAorIFhGRVJfUElPXzIgPSAweDBBLAorIFhGRVJfUElPXzEgPSAweDA5LAorIFhGRVJfUElPXzAgPSAweDA4LAorIFhGRVJfUElPX1NMT1cgPSAweDAwLAorCisgU0VURkVBVFVSRVNfV0NfT04gPSAweDAyLAorIFNFVEZFQVRVUkVTX1dDX09GRiA9IDB4ODIsCisKKyBBVEFQSV9QS1RfRE1BID0gKDEgPDwgMCksCisgQVRBUElfRE1BRElSID0gKDEgPDwgMiksCisgQVRBUElfQ0RCX0xFTiA9IDE2LAorCisgQVRBX0NCTF9OT05FID0gMCwKKyBBVEFfQ0JMX1BBVEE0MCA9IDEsCisgQVRBX0NCTF9QQVRBODAgPSAyLAorIEFUQV9DQkxfUEFUQV9VTksgPSAzLAorIEFUQV9DQkxfU0FUQSA9IDQsCisKKyBTQ1JfU1RBVFVTID0gMCwKKyBTQ1JfRVJST1IgPSAxLAorIFNDUl9DT05UUk9MID0gMiwKKyBTQ1JfQUNUSVZFID0gMywKKyBTQ1JfTk9USUZJQ0FUSU9OID0gNCwKKworIFNFUlJfREFUQV9SRUNPVkVSRUQgPSAoMSA8PCAwKSwKKyBTRVJSX0NPTU1fUkVDT1ZFUkVEID0gKDEgPDwgMSksCisgU0VSUl9EQVRBID0gKDEgPDwgOCksCisgU0VSUl9QRVJTSVNURU5UID0gKDEgPDwgOSksCisgU0VSUl9QUk9UT0NPTCA9ICgxIDw8IDEwKSwKKyBTRVJSX0lOVEVSTkFMID0gKDEgPDwgMTEpLAorIFNFUlJfUEhZUkRZX0NIRyA9ICgxIDw8IDE2KSwKKyBTRVJSX0RFVl9YQ0hHID0gKDEgPDwgMjYpLAorCisgQVRBX1RGTEFHX0xCQTQ4ID0gKDEgPDwgMCksCisgQVRBX1RGTEFHX0lTQUREUiA9ICgxIDw8IDEpLAorIEFUQV9URkxBR19ERVZJQ0UgPSAoMSA8PCAyKSwKKyBBVEFfVEZMQUdfV1JJVEUgPSAoMSA8PCAzKSwKKyBBVEFfVEZMQUdfTEJBID0gKDEgPDwgNCksCisgQVRBX1RGTEFHX0ZVQSA9ICgxIDw8IDUpLAorIEFUQV9URkxBR19QT0xMSU5HID0gKDEgPDwgNiksCit9OworCitlbnVtIGF0YV90Zl9wcm90b2NvbHMgeworCisgQVRBX1BST1RfVU5LTk9XTiwKKyBBVEFfUFJPVF9OT0RBVEEsCisgQVRBX1BST1RfUElPLAorIEFUQV9QUk9UX0RNQSwKKyBBVEFfUFJPVF9OQ1EsCisgQVRBX1BST1RfQVRBUEksCisgQVRBX1BST1RfQVRBUElfTk9EQVRBLAorIEFUQV9QUk9UX0FUQVBJX0RNQSwKK307CisKK2VudW0gYXRhX2lvY3RscyB7CisgQVRBX0lPQ19HRVRfSU8zMiA9IDB4MzA5LAorIEFUQV9JT0NfU0VUX0lPMzIgPSAweDMyNCwKK307CisKK3N0cnVjdCBhdGFfcHJkIHsKKyB1MzIgYWRkcjsKKyB1MzIgZmxhZ3NfbGVuOworfTsKKworc3RydWN0IGF0YV90YXNrZmlsZSB7CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKyB1OCBwcm90b2NvbDsKKworIHU4IGN0bDsKKworIHU4IGhvYl9mZWF0dXJlOworIHU4IGhvYl9uc2VjdDsKKyB1OCBob2JfbGJhbDsKKyB1OCBob2JfbGJhbTsKKyB1OCBob2JfbGJhaDsKKworIHU4IGZlYXR1cmU7CisgdTggbnNlY3Q7CisgdTggbGJhbDsKKyB1OCBsYmFtOworIHU4IGxiYWg7CisKKyB1OCBkZXZpY2U7CisKKyB1OCBjb21tYW5kOworfTsKKworI2RlZmluZSBhdGFfaWRfaXNfYXRhKGlkKSAoKChpZClbMF0gJiAoMSA8PCAxNSkpID09IDApCisjZGVmaW5lIGF0YV9pZF9pc19jZmEoaWQpICgoaWQpWzBdID09IDB4ODQ4QSkKKyNkZWZpbmUgYXRhX2lkX2lzX3NhdGEoaWQpICgoaWQpWzkzXSA9PSAwKQorI2RlZmluZSBhdGFfaWRfcmFoZWFkX2VuYWJsZWQoaWQpICgoaWQpWzg1XSAmICgxIDw8IDYpKQorI2RlZmluZSBhdGFfaWRfd2NhY2hlX2VuYWJsZWQoaWQpICgoaWQpWzg1XSAmICgxIDw8IDUpKQorI2RlZmluZSBhdGFfaWRfaHBhX2VuYWJsZWQoaWQpICgoaWQpWzg1XSAmICgxIDw8IDEwKSkKKyNkZWZpbmUgYXRhX2lkX2hhc19mdWEoaWQpICgoaWQpWzg0XSAmICgxIDw8IDYpKQorI2RlZmluZSBhdGFfaWRfaGFzX2ZsdXNoKGlkKSAoKGlkKVs4M10gJiAoMSA8PCAxMikpCisjZGVmaW5lIGF0YV9pZF9oYXNfZmx1c2hfZXh0KGlkKSAoKGlkKVs4M10gJiAoMSA8PCAxMykpCisjZGVmaW5lIGF0YV9pZF9oYXNfbGJhNDgoaWQpICgoaWQpWzgzXSAmICgxIDw8IDEwKSkKKyNkZWZpbmUgYXRhX2lkX2hhc19ocGEoaWQpICgoaWQpWzgyXSAmICgxIDw8IDEwKSkKKyNkZWZpbmUgYXRhX2lkX2hhc193Y2FjaGUoaWQpICgoaWQpWzgyXSAmICgxIDw8IDUpKQorI2RlZmluZSBhdGFfaWRfaGFzX3BtKGlkKSAoKGlkKVs4Ml0gJiAoMSA8PCAzKSkKKyNkZWZpbmUgYXRhX2lkX2hhc19sYmEoaWQpICgoaWQpWzQ5XSAmICgxIDw8IDkpKQorI2RlZmluZSBhdGFfaWRfaGFzX2RtYShpZCkgKChpZClbNDldICYgKDEgPDwgOCkpCisjZGVmaW5lIGF0YV9pZF9oYXNfbmNxKGlkKSAoKGlkKVs3Nl0gJiAoMSA8PCA4KSkKKyNkZWZpbmUgYXRhX2lkX3F1ZXVlX2RlcHRoKGlkKSAoKChpZClbNzVdICYgMHgxZikgKyAxKQorI2RlZmluZSBhdGFfaWRfcmVtb3ZlYWJsZShpZCkgKChpZClbMF0gJiAoMSA8PCA3KSkKKyNkZWZpbmUgYXRhX2lkX2hhc19kd29yZF9pbyhpZCkgKChpZClbNTBdICYgKDEgPDwgMCkpCisjZGVmaW5lIGF0YV9pZF91MzIoaWQsbikgICAoKCh1MzIpIChpZClbKG4pICsgMV0gPDwgMTYpIHwgKCh1MzIpIChpZClbKG4pXSkpCisjZGVmaW5lIGF0YV9pZF91NjQoaWQsbikgICAoICgodTY0KSAoaWQpWyhuKSArIDNdIDw8IDQ4KSB8ICAgKCh1NjQpIChpZClbKG4pICsgMl0gPDwgMzIpIHwgICAoKHU2NCkgKGlkKVsobikgKyAxXSA8PCAxNikgfCAgICgodTY0KSAoaWQpWyhuKSArIDBdKSApCisKKyNkZWZpbmUgYXRhX2lkX2NkYl9pbnRyKGlkKSAoKChpZClbMF0gJiAweDYwKSA9PSAweDIwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWJjZDcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bS5oCkBAIC0wLDAgKzEsMTYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVE1fSAorI2RlZmluZSBfTElOVVhfQVRNX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisjaW5jbHVkZSA8bGludXgvYXRtc2FwLmg+CisjaW5jbHVkZSA8bGludXgvYXRtaW9jLmg+CisKKyNkZWZpbmUgQVRNX0NFTExfU0laRSA1MyAgCisjZGVmaW5lIEFUTV9DRUxMX1BBWUxPQUQgNDggIAorI2RlZmluZSBBVE1fQUFMMF9TRFUgNTIgIAorI2RlZmluZSBBVE1fTUFYX0FBTDM0X1BEVSA2NTUzNSAgCisjZGVmaW5lIEFUTV9BQUw1X1RSQUlMRVIgOCAgCisjZGVmaW5lIEFUTV9NQVhfQUFMNV9QRFUgNjU1MzUgIAorI2RlZmluZSBBVE1fTUFYX0NEViA5OTk5ICAKKyNkZWZpbmUgQVRNX05PVF9SU1ZfVkNJIDMyICAKKworI2RlZmluZSBBVE1fTUFYX1ZQSSAyNTUgIAorI2RlZmluZSBBVE1fTUFYX1ZQSV9OTkkgNDA5NiAgCisjZGVmaW5lIEFUTV9NQVhfVkNJIDY1NTM1ICAKKworI2RlZmluZSBBVE1fTk9fQUFMIDAgIAorI2RlZmluZSBBVE1fQUFMMCAxMyAgCisjZGVmaW5lIEFUTV9BQUwxIDEgIAorI2RlZmluZSBBVE1fQUFMMiAyICAKKyNkZWZpbmUgQVRNX0FBTDM0IDMgIAorI2RlZmluZSBBVE1fQUFMNSA1ICAKKworI2RlZmluZSBfX1NPX0VOQ09ERShsLG4sdCkgKCgoKGwpICYgMHgxRkYpIDw8IDIyKSB8ICgobikgPDwgMTYpIHwgICBzaXplb2YodCkpCisjZGVmaW5lIF9fU09fTEVWRUxfTUFUQ0goYyxtKSAoKChjKSA+PiAyMikgPT0gKChtKSAmIDB4MUZGKSkKKyNkZWZpbmUgX19TT19OVU1CRVIoYykgKCgoYykgPj4gMTYpICYgMHgzZikKKyNkZWZpbmUgX19TT19TSVpFKGMpICgoYykgJiAweDNmZmYpCisKKyNkZWZpbmUgU09fU0VUQ0xQIF9fU09fRU5DT0RFKFNPTF9BVE0sMCxpbnQpCisKKyNkZWZpbmUgU09fQ0lSQU5HRSBfX1NPX0VOQ09ERShTT0xfQVRNLDEsc3RydWN0IGF0bV9jaXJhbmdlKQorCisjZGVmaW5lIFNPX0FUTVFPUyBfX1NPX0VOQ09ERShTT0xfQVRNLDIsc3RydWN0IGF0bV9xb3MpCisKKyNkZWZpbmUgU09fQVRNU0FQIF9fU09fRU5DT0RFKFNPTF9BVE0sMyxzdHJ1Y3QgYXRtX3NhcCkKKworI2RlZmluZSBTT19BVE1QVkMgX19TT19FTkNPREUoU09MX0FUTSw0LHN0cnVjdCBzb2NrYWRkcl9hdG1wdmMpCisKKyNkZWZpbmUgU09fTVVMVElQT0lOVCBfX1NPX0VOQ09ERShTT0xfQVRNLCA1LCBpbnQpCisKKyNkZWZpbmUgQVRNX0hEUl9HRkNfTUFTSyAweGYwMDAwMDAwCisjZGVmaW5lIEFUTV9IRFJfR0ZDX1NISUZUIDI4CisjZGVmaW5lIEFUTV9IRFJfVlBJX01BU0sgMHgwZmYwMDAwMAorI2RlZmluZSBBVE1fSERSX1ZQSV9TSElGVCAyMAorI2RlZmluZSBBVE1fSERSX1ZDSV9NQVNLIDB4MDAwZmZmZjAKKyNkZWZpbmUgQVRNX0hEUl9WQ0lfU0hJRlQgNAorI2RlZmluZSBBVE1fSERSX1BUSV9NQVNLIDB4MDAwMDAwMGUKKyNkZWZpbmUgQVRNX0hEUl9QVElfU0hJRlQgMQorI2RlZmluZSBBVE1fSERSX0NMUCAweDAwMDAwMDAxCisKKyNkZWZpbmUgQVRNX1BUSV9VUzAgMCAgCisjZGVmaW5lIEFUTV9QVElfVVMxIDEgIAorI2RlZmluZSBBVE1fUFRJX1VDRVMwIDIgIAorI2RlZmluZSBBVE1fUFRJX1VDRVMxIDMgIAorI2RlZmluZSBBVE1fUFRJX1NFR0Y1IDQgIAorI2RlZmluZSBBVE1fUFRJX0UyRUY1IDUgIAorI2RlZmluZSBBVE1fUFRJX1JTVl9STSA2ICAKKyNkZWZpbmUgQVRNX1BUSV9SU1YgNyAgCisKKyNkZWZpbmUgQVRNX05PTkUgMCAgCisjZGVmaW5lIEFUTV9VQlIgMQorI2RlZmluZSBBVE1fQ0JSIDIKKyNkZWZpbmUgQVRNX1ZCUiAzCisjZGVmaW5lIEFUTV9BQlIgNAorI2RlZmluZSBBVE1fQU5ZQ0xBU1MgNSAgCisKKyNkZWZpbmUgQVRNX01BWF9QQ1IgLTEgIAorCitzdHJ1Y3QgYXRtX3RyYWZwcm0geworIHVuc2lnbmVkIGNoYXIgdHJhZmZpY19jbGFzczsKKyBpbnQgbWF4X3BjcjsKKyBpbnQgcGNyOworIGludCBtaW5fcGNyOworIGludCBtYXhfY2R2OworIGludCBtYXhfc2R1OworCisgdW5zaWduZWQgaW50IGljcjsKKyB1bnNpZ25lZCBpbnQgdGJlOworIHVuc2lnbmVkIGludCBmcnR0IDogMjQ7CisgdW5zaWduZWQgaW50IHJpZiA6IDQ7CisgdW5zaWduZWQgaW50IHJkZiA6IDQ7CisgdW5zaWduZWQgaW50IG5ybV9wcmVzIDoxOworIHVuc2lnbmVkIGludCB0cm1fcHJlcyA6MTsKKyB1bnNpZ25lZCBpbnQgYWR0Zl9wcmVzIDoxOworIHVuc2lnbmVkIGludCBjZGZfcHJlcyA6MTsKKyB1bnNpZ25lZCBpbnQgbnJtIDozOworIHVuc2lnbmVkIGludCB0cm0gOjM7CisgdW5zaWduZWQgaW50IGFkdGYgOjEwOworIHVuc2lnbmVkIGludCBjZGYgOjM7CisgdW5zaWduZWQgaW50IHNwYXJlIDo5OworfTsKKworc3RydWN0IGF0bV9xb3MgeworIHN0cnVjdCBhdG1fdHJhZnBybSB0eHRwOworIHN0cnVjdCBhdG1fdHJhZnBybSByeHRwIF9fQVRNX0FQSV9BTElHTjsKKworIHVuc2lnbmVkIGNoYXIgYWFsIF9fQVRNX0FQSV9BTElHTjsKK307CisKKyNkZWZpbmUgQVRNX0lURl9BTlkgLTEgIAorI2RlZmluZSBBVE1fVlBJX0FOWSAtMQorI2RlZmluZSBBVE1fVkNJX0FOWSAtMQorI2RlZmluZSBBVE1fVlBJX1VOU1BFQyAtMgorI2RlZmluZSBBVE1fVkNJX1VOU1BFQyAtMgorCitzdHJ1Y3Qgc29ja2FkZHJfYXRtcHZjIHsKKyB1bnNpZ25lZCBzaG9ydCBzYXBfZmFtaWx5OworIHN0cnVjdCB7Cisgc2hvcnQgaXRmOworIHNob3J0IHZwaTsKKyBpbnQgdmNpOworIH0gc2FwX2FkZHIgX19BVE1fQVBJX0FMSUdOOworfTsKKworI2RlZmluZSBBVE1fRVNBX0xFTiAyMCAgCisjZGVmaW5lIEFUTV9FMTY0X0xFTiAxMiAgCisKKyNkZWZpbmUgQVRNX0FGSV9EQ0MgMHgzOSAgCisjZGVmaW5lIEFUTV9BRklfSUNEIDB4NDcgIAorI2RlZmluZSBBVE1fQUZJX0UxNjQgMHg0NSAgCisjZGVmaW5lIEFUTV9BRklfTE9DQUwgMHg0OSAgIAorCisjZGVmaW5lIEFUTV9BRklfRENDX0dST1VQIDB4QkQgIAorI2RlZmluZSBBVE1fQUZJX0lDRF9HUk9VUCAweEM1ICAKKyNkZWZpbmUgQVRNX0FGSV9FMTY0X0dST1VQIDB4QzMgIAorI2RlZmluZSBBVE1fQUZJX0xPQ0FMX0dST1VQIDB4QzcgIAorCisjZGVmaW5lIEFUTV9MSUpfTk9ORSAwICAKKyNkZWZpbmUgQVRNX0xJSiAxICAKKyNkZWZpbmUgQVRNX0xJSl9SUEogMiAgCisjZGVmaW5lIEFUTV9MSUpfTkogMyAgCisKK3N0cnVjdCBzb2NrYWRkcl9hdG1zdmMgeworIHVuc2lnbmVkIHNob3J0IHNhc19mYW1pbHk7Cisgc3RydWN0IHsKKyB1bnNpZ25lZCBjaGFyIHBydltBVE1fRVNBX0xFTl07CisgY2hhciBwdWJbQVRNX0UxNjRfTEVOKzFdOworCisgY2hhciBsaWpfdHlwZTsKKyB1aW50MzJfdCBsaWpfaWQ7CisgfSBzYXNfYWRkciBfX0FUTV9BUElfQUxJR047Cit9OworCit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGF0bV9iYWNrZW5kX3Q7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1hcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWU1Y2FlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWFwaS5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FUTUFQSV9ICisjZGVmaW5lIF9MSU5VWF9BVE1BUElfSAorCisjaWYgZGVmaW5lZChfX3NwYXJjX18pIHx8IGRlZmluZWQoX19pYTY0X18pCisKKyNkZWZpbmUgX19BVE1fQVBJX0FMSUdOIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKQorI2Vsc2UKKyNkZWZpbmUgX19BVE1fQVBJX0FMSUdOCisjZW5kaWYKKwordHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBjaGFyIF9bOF07IH0gX19BVE1fQVBJX0FMSUdOIGF0bV9rcHRyX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWRldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWRldi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3YmFlYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtZGV2LmgKQEAgLTAsMCArMSwxNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfQVRNREVWX0gKKyNkZWZpbmUgTElOVVhfQVRNREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bWFwaS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorI2luY2x1ZGUgPGxpbnV4L2F0bWlvYy5oPgorCisjZGVmaW5lIEVTSV9MRU4gNgorCisjZGVmaW5lIEFUTV9PQzNfUENSICgxNTU1MjAwMDAvMjcwKjI2MC84LzUzKQorCisjZGVmaW5lIEFUTV8yNV9QQ1IgKCgyNTYwMDAwMC84LTgwMDApLzU0KQorCisjZGVmaW5lIEFUTV9PQzEyX1BDUiAoNjIyMDgwMDAwLzEwODAqMTA0MC84LzUzKQorCisjZGVmaW5lIEFUTV9EUzNfUENSICg4MDAwKjEyKQorCisjZGVmaW5lIF9fQUFMX1NUQVRfSVRFTVMgICBfX0hBTkRMRV9JVEVNKHR4KTsgICAgIF9fSEFORExFX0lURU0odHhfZXJyKTsgICAgIF9fSEFORExFX0lURU0ocngpOyAgICAgX19IQU5ETEVfSVRFTShyeF9lcnIpOyAgICAgX19IQU5ETEVfSVRFTShyeF9kcm9wKTsgIAorCitzdHJ1Y3QgYXRtX2FhbF9zdGF0cyB7CisjZGVmaW5lIF9fSEFORExFX0lURU0oaSkgaW50IGkKKyBfX0FBTF9TVEFUX0lURU1TCisjdW5kZWYgX19IQU5ETEVfSVRFTQorfTsKKworc3RydWN0IGF0bV9kZXZfc3RhdHMgeworIHN0cnVjdCBhdG1fYWFsX3N0YXRzIGFhbDA7Cisgc3RydWN0IGF0bV9hYWxfc3RhdHMgYWFsMzQ7Cisgc3RydWN0IGF0bV9hYWxfc3RhdHMgYWFsNTsKK30gX19BVE1fQVBJX0FMSUdOOworCisjZGVmaW5lIEFUTV9HRVRMSU5LUkFURSBfSU9XKCdhJyxBVE1JT0NfSVRGKzEsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVE5BTUVTIF9JT1coJ2EnLEFUTUlPQ19JVEYrMyxzdHJ1Y3QgYXRtX2lvYnVmKQorCisjZGVmaW5lIEFUTV9HRVRUWVBFIF9JT1coJ2EnLEFUTUlPQ19JVEYrNCxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VURVNJIF9JT1coJ2EnLEFUTUlPQ19JVEYrNSxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VUQUREUiBfSU9XKCdhJyxBVE1JT0NfSVRGKzYsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1JTVEFERFIgX0lPVygnYScsQVRNSU9DX0lURis3LHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9BRERBRERSIF9JT1coJ2EnLEFUTUlPQ19JVEYrOCxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fREVMQUREUiBfSU9XKCdhJyxBVE1JT0NfSVRGKzksc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0dFVENJUkFOR0UgX0lPVygnYScsQVRNSU9DX0lURisxMCxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fU0VUQ0lSQU5HRSBfSU9XKCdhJyxBVE1JT0NfSVRGKzExLHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9TRVRFU0kgX0lPVygnYScsQVRNSU9DX0lURisxMixzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fU0VURVNJRiBfSU9XKCdhJyxBVE1JT0NfSVRGKzEzLHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9BRERMRUNTQUREUiBfSU9XKCdhJywgQVRNSU9DX0lURisxNCwgc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX0RFTExFQ1NBRERSIF9JT1coJ2EnLCBBVE1JT0NfSVRGKzE1LCBzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VUTEVDU0FERFIgX0lPVygnYScsIEFUTUlPQ19JVEYrMTYsIHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9HRVRTVEFUIF9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMCxzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fR0VUU1RBVFogX0lPVygnYScsQVRNSU9DX1NBUkNPTSsxLHN0cnVjdCBhdG1pZl9zaW9jKQorCisjZGVmaW5lIEFUTV9HRVRMT09QIF9JT1coJ2EnLEFUTUlPQ19TQVJDT00rMixzdHJ1Y3QgYXRtaWZfc2lvYykKKworI2RlZmluZSBBVE1fU0VUTE9PUCBfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzMsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1FVRVJZTE9PUCBfSU9XKCdhJyxBVE1JT0NfU0FSQ09NKzQsc3RydWN0IGF0bWlmX3Npb2MpCisKKyNkZWZpbmUgQVRNX1NFVFNDIF9JT1coJ2EnLEFUTUlPQ19TUEVDSUFMKzEsaW50KQorCisjZGVmaW5lIEFUTV9TRVRCQUNLRU5EIF9JT1coJ2EnLEFUTUlPQ19TUEVDSUFMKzIsYXRtX2JhY2tlbmRfdCkKKworI2RlZmluZSBBVE1fTkVXQkFDS0VORElGIF9JT1coJ2EnLEFUTUlPQ19TUEVDSUFMKzMsYXRtX2JhY2tlbmRfdCkKKworI2RlZmluZSBBVE1fQUREUEFSVFkgX0lPVygnYScsIEFUTUlPQ19TUEVDSUFMKzQsc3RydWN0IGF0bV9pb2J1ZikKKworI2RlZmluZSBBVE1fRFJPUFBBUlRZIF9JT1coJ2EnLCBBVE1JT0NfU1BFQ0lBTCs1LGludCkKKworI2RlZmluZSBBVE1fQkFDS0VORF9SQVcgMCAKKyNkZWZpbmUgQVRNX0JBQ0tFTkRfUFBQIDEgIAorI2RlZmluZSBBVE1fQkFDS0VORF9CUjI2ODQgMiAgCisKKyNkZWZpbmUgQVRNX0lURlRZUF9MRU4gOCAgCisKKyNkZWZpbmUgX19BVE1fTE1fTk9ORSAwICAKKyNkZWZpbmUgX19BVE1fTE1fQUFMIDEgIAorI2RlZmluZSBfX0FUTV9MTV9BVE0gMiAgCisKKyNkZWZpbmUgX19BVE1fTE1fUEhZIDggIAorI2RlZmluZSBfX0FUTV9MTV9BTkFMT0cgMTYgIAorCisjZGVmaW5lIF9fQVRNX0xNX01LTE9DKG4pICgobikpICAKKyNkZWZpbmUgX19BVE1fTE1fTUtSTVQobikgKChuKSA8PCA4KSAgCisKKyNkZWZpbmUgX19BVE1fTE1fWFRMT0MobikgKChuKSAmIDB4ZmYpCisjZGVmaW5lIF9fQVRNX0xNX1hUUk1UKG4pICgoKG4pID4+IDgpICYgMHhmZikKKworI2RlZmluZSBBVE1fTE1fTk9ORSAwICAKKworI2RlZmluZSBBVE1fTE1fTE9DX0FBTCBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BQUwpCisjZGVmaW5lIEFUTV9MTV9MT0NfQVRNIF9fQVRNX0xNX01LTE9DKF9fQVRNX0xNX0FUTSkKKyNkZWZpbmUgQVRNX0xNX0xPQ19QSFkgX19BVE1fTE1fTUtMT0MoX19BVE1fTE1fUEhZKQorI2RlZmluZSBBVE1fTE1fTE9DX0FOQUxPRyBfX0FUTV9MTV9NS0xPQyhfX0FUTV9MTV9BTkFMT0cpCisKKyNkZWZpbmUgQVRNX0xNX1JNVF9BQUwgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQUFMKQorI2RlZmluZSBBVE1fTE1fUk1UX0FUTSBfX0FUTV9MTV9NS1JNVChfX0FUTV9MTV9BVE0pCisjZGVmaW5lIEFUTV9MTV9STVRfUEhZIF9fQVRNX0xNX01LUk1UKF9fQVRNX0xNX1BIWSkKKyNkZWZpbmUgQVRNX0xNX1JNVF9BTkFMT0cgX19BVE1fTE1fTUtSTVQoX19BVE1fTE1fQU5BTE9HKQorCitzdHJ1Y3QgYXRtX2lvYnVmIHsKKyBpbnQgbGVuZ3RoOworIHZvaWQgX191c2VyICpidWZmZXI7Cit9OworCisjZGVmaW5lIEFUTV9DSV9NQVggLTEgIAorCitzdHJ1Y3QgYXRtX2NpcmFuZ2UgeworIHNpZ25lZCBjaGFyIHZwaV9iaXRzOworIHNpZ25lZCBjaGFyIHZjaV9iaXRzOworfTsKKworI2RlZmluZSBBVE1fU0NfUlggMTAyNCAgCisjZGVmaW5lIEFUTV9TQ19UWCAyMDQ4ICAKKworI2RlZmluZSBBVE1fQkFDS0xPR19ERUZBVUxUIDMyICAKKworI2RlZmluZSBBVE1fTUZfSU1NRUQgMSAgCisjZGVmaW5lIEFUTV9NRl9JTkNfUlNWIDIgIAorI2RlZmluZSBBVE1fTUZfSU5DX1NIUCA0ICAKKyNkZWZpbmUgQVRNX01GX0RFQ19SU1YgOCAgCisjZGVmaW5lIEFUTV9NRl9ERUNfU0hQIDE2ICAKKyNkZWZpbmUgQVRNX01GX0JXRCAzMiAgCisKKyNkZWZpbmUgQVRNX01GX1NFVCAoQVRNX01GX0lOQ19SU1YgfCBBVE1fTUZfSU5DX1NIUCB8IEFUTV9NRl9ERUNfUlNWIHwgICBBVE1fTUZfREVDX1NIUCB8IEFUTV9NRl9CV0QpCisKKyNkZWZpbmUgQVRNX1ZTX0lETEUgMCAgCisjZGVmaW5lIEFUTV9WU19DT05ORUNURUQgMSAgCisjZGVmaW5lIEFUTV9WU19DTE9TSU5HIDIgIAorI2RlZmluZSBBVE1fVlNfTElTVEVOIDMgIAorI2RlZmluZSBBVE1fVlNfSU5VU0UgNCAgCisjZGVmaW5lIEFUTV9WU19CT1VORCA1ICAKKworI2RlZmluZSBBVE1fVlMyVFhUX01BUCAgICJJRExFIiwgIkNPTk5FQ1RFRCIsICJDTE9TSU5HIiwgIkxJU1RFTiIsICJJTlVTRSIsICJCT1VORCIKKworI2RlZmluZSBBVE1fVkYyVFhUX01BUCAgICJBRERSIiwgIlJFQURZIiwgIlBBUlRJQUwiLCAiUkVHSVMiLCAgICJSRUxFQVNFRCIsICJIQVNRT1MiLCAiTElTVEVOIiwgIk1FVEEiLCAgICIyNTYiLCAiNTEyIiwgIjEwMjQiLCAiMjA0OCIsICAgIlNFU1NJT04iLCAiSEFTU0FQIiwgIkJPVU5EIiwgIkNMT1NFIgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1pb2MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1pb2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDA0MzM5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bWlvYy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FUTUlPQ19ICisjZGVmaW5lIF9MSU5VWF9BVE1JT0NfSAorCisjaW5jbHVkZSA8YXNtL2lvY3RsLmg+CisKKyNkZWZpbmUgQVRNSU9DX1BIWUNPTSAweDAwICAKKyNkZWZpbmUgQVRNSU9DX1BIWUNPTV9FTkQgMHgwZgorI2RlZmluZSBBVE1JT0NfUEhZVFlQIDB4MTAgIAorI2RlZmluZSBBVE1JT0NfUEhZVFlQX0VORCAweDJmCisjZGVmaW5lIEFUTUlPQ19QSFlQUlYgMHgzMCAgCisjZGVmaW5lIEFUTUlPQ19QSFlQUlZfRU5EIDB4NGYKKyNkZWZpbmUgQVRNSU9DX1NBUkNPTSAweDUwICAKKyNkZWZpbmUgQVRNSU9DX1NBUkNPTV9FTkQgMHg1MAorI2RlZmluZSBBVE1JT0NfU0FSUFJWIDB4NjAgIAorI2RlZmluZSBBVE1JT0NfU0FSUFJWX0VORCAweDdmCisjZGVmaW5lIEFUTUlPQ19JVEYgMHg4MCAgCisjZGVmaW5lIEFUTUlPQ19JVEZfRU5EIDB4OGYKKyNkZWZpbmUgQVRNSU9DX0JBQ0tFTkQgMHg5MCAgCisjZGVmaW5lIEFUTUlPQ19CQUNLRU5EX0VORCAweGFmCisKKyNkZWZpbmUgQVRNSU9DX0FSRVFVSVBBIDB4YzAgIAorI2RlZmluZSBBVE1JT0NfTEFORSAweGQwICAKKyNkZWZpbmUgQVRNSU9DX01QT0EgMHhkOCAgCisjZGVmaW5lIEFUTUlPQ19DTElQIDB4ZTAgIAorI2RlZmluZSBBVE1JT0NfQ0xJUF9FTkQgMHhlZgorI2RlZmluZSBBVE1JT0NfU1BFQ0lBTCAweGYwICAKKyNkZWZpbmUgQVRNSU9DX1NQRUNJQUxfRU5EIDB4ZmYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtcHBwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzMGMzMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdG1wcHAuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9BVE1QUFBfSAorI2RlZmluZSBfTElOVVhfQVRNUFBQX0gKKworI2luY2x1ZGUgPGxpbnV4L2F0bS5oPgorCisjZGVmaW5lIFBQUE9BVE1fRU5DQVBTX0FVVE9ERVRFQ1QgKDApCisjZGVmaW5lIFBQUE9BVE1fRU5DQVBTX1ZDICgxKQorI2RlZmluZSBQUFBPQVRNX0VOQ0FQU19MTEMgKDIpCisKK3N0cnVjdCBhdG1fYmFja2VuZF9wcHAgeworIGF0bV9iYWNrZW5kX3QgYmFja2VuZF9udW07CisgaW50IGVuY2FwczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXNhcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0bXNhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NmY3NWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXRtc2FwLmgKQEAgLTAsMCArMSwxMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FUTVNBUF9ICisjZGVmaW5lIF9MSU5VWF9BVE1TQVBfSAorCisjaW5jbHVkZSA8bGludXgvYXRtYXBpLmg+CisKKyNkZWZpbmUgQVRNX0wyX05PTkUgMCAgCisjZGVmaW5lIEFUTV9MMl9JU08xNzQ1IDB4MDEgIAorI2RlZmluZSBBVE1fTDJfUTI5MSAweDAyICAKKyNkZWZpbmUgQVRNX0wyX1gyNV9MTCAweDA2ICAKKyNkZWZpbmUgQVRNX0wyX1gyNV9NTCAweDA3ICAKKyNkZWZpbmUgQVRNX0wyX0xBUEIgMHgwOCAgCisjZGVmaW5lIEFUTV9MMl9IRExDX0FSTSAweDA5ICAKKyNkZWZpbmUgQVRNX0wyX0hETENfTlJNIDB4MGEgIAorI2RlZmluZSBBVE1fTDJfSERMQ19BQk0gMHgwYiAgCisjZGVmaW5lIEFUTV9MMl9JU084ODAyIDB4MGMgIAorI2RlZmluZSBBVE1fTDJfWDc1IDB4MGQgIAorI2RlZmluZSBBVE1fTDJfUTkyMiAweDBlICAKKyNkZWZpbmUgQVRNX0wyX1VTRVIgMHgxMCAgCisjZGVmaW5lIEFUTV9MMl9JU083Nzc2IDB4MTEgIAorCisjZGVmaW5lIEFUTV9MM19OT05FIDAgIAorI2RlZmluZSBBVE1fTDNfWDI1IDB4MDYgIAorI2RlZmluZSBBVE1fTDNfSVNPODIwOCAweDA3ICAKKyNkZWZpbmUgQVRNX0wzX1gyMjMgMHgwOCAgCisjZGVmaW5lIEFUTV9MM19JU084NDczIDB4MDkgIAorI2RlZmluZSBBVE1fTDNfVDcwIDB4MGEgIAorI2RlZmluZSBBVE1fTDNfVFI5NTc3IDB4MGIgIAorI2RlZmluZSBBVE1fTDNfSDMxMCAweDBjICAKKyNkZWZpbmUgQVRNX0wzX0gzMjEgMHgwZCAgCisjZGVmaW5lIEFUTV9MM19VU0VSIDB4MTAgIAorCisjZGVmaW5lIEFUTV9ITF9OT05FIDAgIAorI2RlZmluZSBBVE1fSExfSVNPIDB4MDEgIAorI2RlZmluZSBBVE1fSExfVVNFUiAweDAyICAKKyNkZWZpbmUgQVRNX0hMX0hMUCAweDAzICAKKyNkZWZpbmUgQVRNX0hMX1ZFTkRPUiAweDA0ICAKKworI2RlZmluZSBBVE1fSU1EX05PTkUgMCAgCisjZGVmaW5lIEFUTV9JTURfTk9STUFMIDEgIAorI2RlZmluZSBBVE1fSU1EX0VYVEVOREVEIDIgIAorCisjZGVmaW5lIEFUTV9UVF9OT05FIDAgIAorI2RlZmluZSBBVE1fVFRfUlggMSAgCisjZGVmaW5lIEFUTV9UVF9UWCAyICAKKyNkZWZpbmUgQVRNX1RUX1JYVFggMyAgCisKKyNkZWZpbmUgQVRNX01DX05PTkUgMCAgCisjZGVmaW5lIEFUTV9NQ19UUyAxICAKKyNkZWZpbmUgQVRNX01DX1RTX0ZFQyAyICAKKyNkZWZpbmUgQVRNX01DX1BTIDMgIAorI2RlZmluZSBBVE1fTUNfUFNfRkVDIDQgIAorI2RlZmluZSBBVE1fTUNfSDIyMSA1ICAKKworI2RlZmluZSBBVE1fTUFYX0hMSSA4ICAKKworc3RydWN0IGF0bV9ibGxpIHsKKyB1bnNpZ25lZCBjaGFyIGwyX3Byb3RvOworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIHVuc2lnbmVkIGNoYXIgbW9kZTsKKworIHVuc2lnbmVkIGNoYXIgd2luZG93OworIH0gaXR1OworIHVuc2lnbmVkIGNoYXIgdXNlcjsKKyB9IGwyOworIHVuc2lnbmVkIGNoYXIgbDNfcHJvdG87CisgdW5pb24geworIHN0cnVjdCB7CisgdW5zaWduZWQgY2hhciBtb2RlOworCisgdW5zaWduZWQgY2hhciBkZWZfc2l6ZTsKKworIHVuc2lnbmVkIGNoYXIgd2luZG93OworIH0gaXR1OworIHVuc2lnbmVkIGNoYXIgdXNlcjsKKyBzdHJ1Y3QgeworIHVuc2lnbmVkIGNoYXIgdGVybV90eXBlOworIHVuc2lnbmVkIGNoYXIgZndfbXB4X2NhcDsKKworIHVuc2lnbmVkIGNoYXIgYndfbXB4X2NhcDsKKworIH0gaDMxMDsKKyBzdHJ1Y3QgeworIHVuc2lnbmVkIGNoYXIgaXBpOworIHVuc2lnbmVkIGNoYXIgc25hcFs1XTsKKworIH0gdHI5NTc3OworIH0gbDM7Cit9IF9fQVRNX0FQSV9BTElHTjsKKworc3RydWN0IGF0bV9iaGxpIHsKKyB1bnNpZ25lZCBjaGFyIGhsX3R5cGU7CisgdW5zaWduZWQgY2hhciBobF9sZW5ndGg7CisKKyB1bnNpZ25lZCBjaGFyIGhsX2luZm9bQVRNX01BWF9ITEldOworfTsKKworI2RlZmluZSBBVE1fTUFYX0JMTEkgMyAgCisKK3N0cnVjdCBhdG1fc2FwIHsKKyBzdHJ1Y3QgYXRtX2JobGkgYmhsaTsKKyBzdHJ1Y3QgYXRtX2JsbGkgYmxsaVtBVE1fTUFYX0JMTEldIF9fQVRNX0FQSV9BTElHTjsKKworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYXR0cmlidXRlX2NvbnRhaW5lci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTliZmIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F0dHJpYnV0ZV9jb250YWluZXIuaApAQCAtMCwwICsxLDM0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9BVFRSSUJVVEVfQ09OVEFJTkVSX0hfCisjZGVmaW5lIF9BVFRSSUJVVEVfQ09OVEFJTkVSX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgva2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorCitzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciB7Cisgc3RydWN0IGxpc3RfaGVhZCBub2RlOworIHN0cnVjdCBrbGlzdCBjb250YWluZXJzOworIHN0cnVjdCBjbGFzcyAqY2xhc3M7Cisgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiphdHRyczsKKyBpbnQgKCptYXRjaCkoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqKTsKKyNkZWZpbmUgQVRUUklCVVRFX0NPTlRBSU5FUl9OT19DTEFTU0RFVlMgMHgwMQorIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cit9OworCitzdHJ1Y3QgYXR0cmlidXRlX2NvbnRhaW5lciAqYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19jb250YWluZXIoc3RydWN0IGNsYXNzX2RldmljZSAqKTsKK3N0cnVjdCBjbGFzc19kZXZpY2UgKmF0dHJpYnV0ZV9jb250YWluZXJfZmluZF9jbGFzc19kZXZpY2Uoc3RydWN0IGF0dHJpYnV0ZV9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqKTsKK3N0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlICoqYXR0cmlidXRlX2NvbnRhaW5lcl9jbGFzc2Rldl90b19hdHRycyhjb25zdCBzdHJ1Y3QgY2xhc3NfZGV2aWNlICpjbGFzc2Rldik7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F1dG9fZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzcxMWNjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvX2ZzLmgKQEAgLTAsMCArMSw1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQVVUT19GU19ICisjZGVmaW5lIF9MSU5VWF9BVVRPX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgQVVUT0ZTX1BST1RPX1ZFUlNJT04gMworCisjZGVmaW5lIEFVVE9GU19NQVhfUFJPVE9fVkVSU0lPTiBBVVRPRlNfUFJPVE9fVkVSU0lPTgorI2RlZmluZSBBVVRPRlNfTUlOX1BST1RPX1ZFUlNJT04gQVVUT0ZTX1BST1RPX1ZFUlNJT04KKworI2lmIGRlZmluZWQoX19zcGFyY19fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19zMzkwX18pCit0eXBlZGVmIHVuc2lnbmVkIGludCBhdXRvZnNfd3F0X3Q7CisjZWxzZQordHlwZWRlZiB1bnNpZ25lZCBsb25nIGF1dG9mc193cXRfdDsKKyNlbmRpZgorCisjZGVmaW5lIGF1dG9mc19wdHlwZV9taXNzaW5nIDAgIAorI2RlZmluZSBhdXRvZnNfcHR5cGVfZXhwaXJlIDEgIAorCitzdHJ1Y3QgYXV0b2ZzX3BhY2tldF9oZHIgeworIGludCBwcm90b192ZXJzaW9uOworIGludCB0eXBlOworfTsKKworc3RydWN0IGF1dG9mc19wYWNrZXRfbWlzc2luZyB7Cisgc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIGhkcjsKKyBhdXRvZnNfd3F0X3Qgd2FpdF9xdWV1ZV90b2tlbjsKKyBpbnQgbGVuOworIGNoYXIgbmFtZVtOQU1FX01BWCsxXTsKK307CisKK3N0cnVjdCBhdXRvZnNfcGFja2V0X2V4cGlyZSB7Cisgc3RydWN0IGF1dG9mc19wYWNrZXRfaGRyIGhkcjsKKyBpbnQgbGVuOworIGNoYXIgbmFtZVtOQU1FX01BWCsxXTsKK307CisKKyNkZWZpbmUgQVVUT0ZTX0lPQ19SRUFEWSBfSU8oMHg5MywweDYwKQorI2RlZmluZSBBVVRPRlNfSU9DX0ZBSUwgX0lPKDB4OTMsMHg2MSkKKyNkZWZpbmUgQVVUT0ZTX0lPQ19DQVRBVE9OSUMgX0lPKDB4OTMsMHg2MikKKyNkZWZpbmUgQVVUT0ZTX0lPQ19QUk9UT1ZFUiBfSU9SKDB4OTMsMHg2MyxpbnQpCisjZGVmaW5lIEFVVE9GU19JT0NfU0VUVElNRU9VVCBfSU9XUigweDkzLDB4NjQsdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgQVVUT0ZTX0lPQ19FWFBJUkUgX0lPUigweDkzLDB4NjUsc3RydWN0IGF1dG9mc19wYWNrZXRfZXhwaXJlKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F1dG9jb25mLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzA2YmYxMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXRvY29uZi5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfQVVUT0NPTkZfQ1JBUF9HT0VTX0hFUkUKKyNkZWZpbmUgTElOVVhfQVVUT0NPTkZfQ1JBUF9HT0VTX0hFUkUKKworI2RlZmluZSBBVVRPQ09ORl9JTkNMVURFRAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXh2ZWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9hdXh2ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGEwNzAxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2F1eHZlYy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0FVWFZFQ19ICisjZGVmaW5lIF9MSU5VWF9BVVhWRUNfSAorCisjaW5jbHVkZSA8YXNtL2F1eHZlYy5oPgorCisjZGVmaW5lIEFUX05VTEwgMCAgCisjZGVmaW5lIEFUX0lHTk9SRSAxICAKKyNkZWZpbmUgQVRfRVhFQ0ZEIDIgIAorI2RlZmluZSBBVF9QSERSIDMgIAorI2RlZmluZSBBVF9QSEVOVCA0ICAKKyNkZWZpbmUgQVRfUEhOVU0gNSAgCisjZGVmaW5lIEFUX1BBR0VTWiA2ICAKKyNkZWZpbmUgQVRfQkFTRSA3ICAKKyNkZWZpbmUgQVRfRkxBR1MgOCAgCisjZGVmaW5lIEFUX0VOVFJZIDkgIAorI2RlZmluZSBBVF9OT1RFTEYgMTAgIAorI2RlZmluZSBBVF9VSUQgMTEgIAorI2RlZmluZSBBVF9FVUlEIDEyICAKKyNkZWZpbmUgQVRfR0lEIDEzICAKKyNkZWZpbmUgQVRfRUdJRCAxNCAgCisjZGVmaW5lIEFUX1BMQVRGT1JNIDE1ICAKKyNkZWZpbmUgQVRfSFdDQVAgMTYgIAorI2RlZmluZSBBVF9DTEtUQ0sgMTcgIAorCisjZGVmaW5lIEFUX1NFQ1VSRSAyMyAgCisKKyNkZWZpbmUgQVRfVkVDVE9SX1NJWkUgNDQgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JhY2tpbmctZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDk5NmQyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iYWNraW5nLWRldi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JBQ0tJTkdfREVWX0gKKyNkZWZpbmUgX0xJTlVYX0JBQ0tJTkdfREVWX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworZW51bSBiZGlfc3RhdGUgeworIEJESV9wZGZsdXNoLAorIEJESV93cml0ZV9jb25nZXN0ZWQsCisgQkRJX3JlYWRfY29uZ2VzdGVkLAorIEJESV91bnVzZWQsCit9OworCit0eXBlZGVmIGludCAoY29uZ2VzdGVkX2ZuKSh2b2lkICosIGludCk7CisKK3N0cnVjdCBiYWNraW5nX2Rldl9pbmZvIHsKKyB1bnNpZ25lZCBsb25nIHJhX3BhZ2VzOworIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisgdW5zaWduZWQgaW50IGNhcGFiaWxpdGllczsKKyBjb25nZXN0ZWRfZm4gKmNvbmdlc3RlZF9mbjsKKyB2b2lkICpjb25nZXN0ZWRfZGF0YTsKKyB2b2lkICgqdW5wbHVnX2lvX2ZuKShzdHJ1Y3QgYmFja2luZ19kZXZfaW5mbyAqLCBzdHJ1Y3QgcGFnZSAqKTsKKyB2b2lkICp1bnBsdWdfaW9fZGF0YTsKK307CisKKyNkZWZpbmUgQkRJX0NBUF9OT19BQ0NUX0RJUlRZIDB4MDAwMDAwMDEgIAorI2RlZmluZSBCRElfQ0FQX05PX1dSSVRFQkFDSyAweDAwMDAwMDAyICAKKyNkZWZpbmUgQkRJX0NBUF9NQVBfQ09QWSAweDAwMDAwMDA0ICAKKyNkZWZpbmUgQkRJX0NBUF9NQVBfRElSRUNUIDB4MDAwMDAwMDggIAorI2RlZmluZSBCRElfQ0FQX1JFQURfTUFQIDB4MDAwMDAwMTAgIAorI2RlZmluZSBCRElfQ0FQX1dSSVRFX01BUCAweDAwMDAwMDIwICAKKyNkZWZpbmUgQkRJX0NBUF9FWEVDX01BUCAweDAwMDAwMDQwICAKKyNkZWZpbmUgQkRJX0NBUF9WTUZMQUdTICAgKEJESV9DQVBfUkVBRF9NQVAgfCBCRElfQ0FQX1dSSVRFX01BUCB8IEJESV9DQVBfRVhFQ19NQVApCisKKyNpZiBkZWZpbmVkKFZNX01BWVJFQUQpICYmIEJESV9DQVBfUkVBRF9NQVAgIT0gKFZNX01BWVJFQUQgfHwgQkRJX0NBUF9XUklURV9NQVAgIT0gKFZNX01BWVdSSVRFIHx8IEJESV9DQVBfRVhFQ19NQVAgIT0gVk1fTUFZRVhFQykpCisjZXJyb3IgcGxlYXNlIGNoYW5nZSBiYWNraW5nX2Rldl9pbmZvOjpjYXBhYmlsaXRpZXMgZmxhZ3MKKyNlbmRpZgorCisjZGVmaW5lIGJkaV9jYXBfd3JpdGViYWNrX2RpcnR5KGJkaSkgICAoISgoYmRpKS0+Y2FwYWJpbGl0aWVzICYgQkRJX0NBUF9OT19XUklURUJBQ0spKQorI2RlZmluZSBiZGlfY2FwX2FjY291bnRfZGlydHkoYmRpKSAgICghKChiZGkpLT5jYXBhYmlsaXRpZXMgJiBCRElfQ0FQX05PX0FDQ1RfRElSVFkpKQorI2RlZmluZSBtYXBwaW5nX2NhcF93cml0ZWJhY2tfZGlydHkobWFwcGluZykgICBiZGlfY2FwX3dyaXRlYmFja19kaXJ0eSgobWFwcGluZyktPmJhY2tpbmdfZGV2X2luZm8pCisjZGVmaW5lIG1hcHBpbmdfY2FwX2FjY291bnRfZGlydHkobWFwcGluZykgICBiZGlfY2FwX2FjY291bnRfZGlydHkoKG1hcHBpbmcpLT5iYWNraW5nX2Rldl9pbmZvKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmluZGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk3ZWFmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5kZXIuaApAQCAtMCwwICsxLDE4NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQklOREVSX0gKKyNkZWZpbmUgX0xJTlVYX0JJTkRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEJfUEFDS19DSEFSUyhjMSwgYzIsIGMzLCBjNCkgICAoKCgoYzEpPDwyNCkpIHwgKCgoYzIpPDwxNikpIHwgKCgoYzMpPDw4KSkgfCAoYzQpKQorI2RlZmluZSBCX1RZUEVfTEFSR0UgMHg4NQorCitlbnVtIHsKKyBCSU5ERVJfVFlQRV9CSU5ERVIgPSBCX1BBQ0tfQ0hBUlMoJ3MnLCAnYicsICcqJywgQl9UWVBFX0xBUkdFKSwKKyBCSU5ERVJfVFlQRV9XRUFLX0JJTkRFUiA9IEJfUEFDS19DSEFSUygndycsICdiJywgJyonLCBCX1RZUEVfTEFSR0UpLAorIEJJTkRFUl9UWVBFX0hBTkRMRSA9IEJfUEFDS19DSEFSUygncycsICdoJywgJyonLCBCX1RZUEVfTEFSR0UpLAorIEJJTkRFUl9UWVBFX1dFQUtfSEFORExFID0gQl9QQUNLX0NIQVJTKCd3JywgJ2gnLCAnKicsIEJfVFlQRV9MQVJHRSksCisgQklOREVSX1RZUEVfRkQgPSBCX1BBQ0tfQ0hBUlMoJ2YnLCAnZCcsICcqJywgQl9UWVBFX0xBUkdFKSwKK307CisKK2VudW0geworIEZMQVRfQklOREVSX0ZMQUdfUFJJT1JJVFlfTUFTSyA9IDB4ZmYsCisgRkxBVF9CSU5ERVJfRkxBR19BQ0NFUFRTX0ZEUyA9IDB4MTAwLAorfTsKKworc3RydWN0IGZsYXRfYmluZGVyX29iamVjdCB7CisKKyB1bnNpZ25lZCBsb25nIHR5cGU7CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKworIHVuaW9uIHsKKyB2b2lkICpiaW5kZXI7Cisgc2lnbmVkIGxvbmcgaGFuZGxlOworIH07CisKKyB2b2lkICpjb29raWU7Cit9OworCitzdHJ1Y3QgYmluZGVyX3dyaXRlX3JlYWQgeworIHNpZ25lZCBsb25nIHdyaXRlX3NpemU7Cisgc2lnbmVkIGxvbmcgd3JpdGVfY29uc3VtZWQ7CisgdW5zaWduZWQgbG9uZyB3cml0ZV9idWZmZXI7Cisgc2lnbmVkIGxvbmcgcmVhZF9zaXplOworIHNpZ25lZCBsb25nIHJlYWRfY29uc3VtZWQ7CisgdW5zaWduZWQgbG9uZyByZWFkX2J1ZmZlcjsKK307CisKK3N0cnVjdCBiaW5kZXJfdmVyc2lvbiB7CisKKyBzaWduZWQgbG9uZyBwcm90b2NvbF92ZXJzaW9uOworfTsKKworI2RlZmluZSBCSU5ERVJfQ1VSUkVOVF9QUk9UT0NPTF9WRVJTSU9OIDcKKworI2RlZmluZSBCSU5ERVJfV1JJVEVfUkVBRCBfSU9XUignYicsIDEsIHN0cnVjdCBiaW5kZXJfd3JpdGVfcmVhZCkKKyNkZWZpbmUgQklOREVSX1NFVF9JRExFX1RJTUVPVVQgX0lPVygnYicsIDMsIGludDY0X3QpCisjZGVmaW5lIEJJTkRFUl9TRVRfTUFYX1RIUkVBRFMgX0lPVygnYicsIDUsIHNpemVfdCkKKyNkZWZpbmUgQklOREVSX1NFVF9JRExFX1BSSU9SSVRZIF9JT1coJ2InLCA2LCBpbnQpCisjZGVmaW5lIEJJTkRFUl9TRVRfQ09OVEVYVF9NR1IgX0lPVygnYicsIDcsIGludCkKKyNkZWZpbmUgQklOREVSX1RIUkVBRF9FWElUIF9JT1coJ2InLCA4LCBpbnQpCisjZGVmaW5lIEJJTkRFUl9WRVJTSU9OIF9JT1dSKCdiJywgOSwgc3RydWN0IGJpbmRlcl92ZXJzaW9uKQorCitlbnVtIHRyYW5zYWN0aW9uX2ZsYWdzIHsKKyBURl9PTkVfV0FZID0gMHgwMSwKKyBURl9ST09UX09CSkVDVCA9IDB4MDQsCisgVEZfU1RBVFVTX0NPREUgPSAweDA4LAorIFRGX0FDQ0VQVF9GRFMgPSAweDEwLAorfTsKKworc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhIHsKKworIHVuaW9uIHsKKyBzaXplX3QgaGFuZGxlOworIHZvaWQgKnB0cjsKKyB9IHRhcmdldDsKKyB2b2lkICpjb29raWU7CisgdW5zaWduZWQgaW50IGNvZGU7CisKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgcGlkX3Qgc2VuZGVyX3BpZDsKKyB1aWRfdCBzZW5kZXJfZXVpZDsKKyBzaXplX3QgZGF0YV9zaXplOworIHNpemVfdCBvZmZzZXRzX3NpemU7CisKKyB1bmlvbiB7Cisgc3RydWN0IHsKKworIGNvbnN0IHZvaWQgKmJ1ZmZlcjsKKworIGNvbnN0IHZvaWQgKm9mZnNldHM7CisgfSBwdHI7CisgdWludDhfdCBidWZbOF07CisgfSBkYXRhOworfTsKKworc3RydWN0IGJpbmRlcl9wdHJfY29va2llIHsKKyB2b2lkICpwdHI7Cisgdm9pZCAqY29va2llOworfTsKKworc3RydWN0IGJpbmRlcl9wcmlfZGVzYyB7CisgaW50IHByaW9yaXR5OworIGludCBkZXNjOworfTsKKworc3RydWN0IGJpbmRlcl9wcmlfcHRyX2Nvb2tpZSB7CisgaW50IHByaW9yaXR5OworIHZvaWQgKnB0cjsKKyB2b2lkICpjb29raWU7Cit9OworCitlbnVtIEJpbmRlckRyaXZlclJldHVyblByb3RvY29sIHsKKyBCUl9FUlJPUiA9IF9JT1JfQkFEKCdyJywgMCwgaW50KSwKKworIEJSX09LID0gX0lPKCdyJywgMSksCisKKyBCUl9UUkFOU0FDVElPTiA9IF9JT1JfQkFEKCdyJywgMiwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKKyBCUl9SRVBMWSA9IF9JT1JfQkFEKCdyJywgMywgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKKworIEJSX0FDUVVJUkVfUkVTVUxUID0gX0lPUl9CQUQoJ3InLCA0LCBpbnQpLAorCisgQlJfREVBRF9SRVBMWSA9IF9JTygncicsIDUpLAorCisgQlJfVFJBTlNBQ1RJT05fQ09NUExFVEUgPSBfSU8oJ3InLCA2KSwKKworIEJSX0lOQ1JFRlMgPSBfSU9SX0JBRCgncicsIDcsIHN0cnVjdCBiaW5kZXJfcHRyX2Nvb2tpZSksCisgQlJfQUNRVUlSRSA9IF9JT1JfQkFEKCdyJywgOCwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKyBCUl9SRUxFQVNFID0gX0lPUl9CQUQoJ3InLCA5LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorIEJSX0RFQ1JFRlMgPSBfSU9SX0JBRCgncicsIDEwLCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorCisgQlJfQVRURU1QVF9BQ1FVSVJFID0gX0lPUl9CQUQoJ3InLCAxMSwgc3RydWN0IGJpbmRlcl9wcmlfcHRyX2Nvb2tpZSksCisKKyBCUl9OT09QID0gX0lPKCdyJywgMTIpLAorCisgQlJfU1BBV05fTE9PUEVSID0gX0lPKCdyJywgMTMpLAorCisgQlJfRklOSVNIRUQgPSBfSU8oJ3InLCAxNCksCisKKyBCUl9ERUFEX0JJTkRFUiA9IF9JT1JfQkFEKCdyJywgMTUsIHZvaWQgKiksCisKKyBCUl9DTEVBUl9ERUFUSF9OT1RJRklDQVRJT05fRE9ORSA9IF9JT1JfQkFEKCdyJywgMTYsIHZvaWQgKiksCisKKyBCUl9GQUlMRURfUkVQTFkgPSBfSU8oJ3InLCAxNyksCisKK307CisKK2VudW0gQmluZGVyRHJpdmVyQ29tbWFuZFByb3RvY29sIHsKKyBCQ19UUkFOU0FDVElPTiA9IF9JT1dfQkFEKCdjJywgMCwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKKyBCQ19SRVBMWSA9IF9JT1dfQkFEKCdjJywgMSwgc3RydWN0IGJpbmRlcl90cmFuc2FjdGlvbl9kYXRhKSwKKworIEJDX0FDUVVJUkVfUkVTVUxUID0gX0lPV19CQUQoJ2MnLCAyLCBpbnQpLAorCisgQkNfRlJFRV9CVUZGRVIgPSBfSU9XX0JBRCgnYycsIDMsIGludCksCisKKyBCQ19JTkNSRUZTID0gX0lPV19CQUQoJ2MnLCA0LCBpbnQpLAorIEJDX0FDUVVJUkUgPSBfSU9XX0JBRCgnYycsIDUsIGludCksCisgQkNfUkVMRUFTRSA9IF9JT1dfQkFEKCdjJywgNiwgaW50KSwKKyBCQ19ERUNSRUZTID0gX0lPV19CQUQoJ2MnLCA3LCBpbnQpLAorCisgQkNfSU5DUkVGU19ET05FID0gX0lPV19CQUQoJ2MnLCA4LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorIEJDX0FDUVVJUkVfRE9ORSA9IF9JT1dfQkFEKCdjJywgOSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKworIEJDX0FUVEVNUFRfQUNRVUlSRSA9IF9JT1dfQkFEKCdjJywgMTAsIHN0cnVjdCBiaW5kZXJfcHJpX2Rlc2MpLAorCisgQkNfUkVHSVNURVJfTE9PUEVSID0gX0lPKCdjJywgMTEpLAorCisgQkNfRU5URVJfTE9PUEVSID0gX0lPKCdjJywgMTIpLAorIEJDX0VYSVRfTE9PUEVSID0gX0lPKCdjJywgMTMpLAorCisgQkNfUkVRVUVTVF9ERUFUSF9OT1RJRklDQVRJT04gPSBfSU9XX0JBRCgnYycsIDE0LCBzdHJ1Y3QgYmluZGVyX3B0cl9jb29raWUpLAorCisgQkNfQ0xFQVJfREVBVEhfTk9USUZJQ0FUSU9OID0gX0lPV19CQUQoJ2MnLCAxNSwgc3RydWN0IGJpbmRlcl9wdHJfY29va2llKSwKKworIEJDX0RFQURfQklOREVSX0RPTkUgPSBfSU9XX0JBRCgnYycsIDE2LCB2b2lkICopLAorCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpbmZtdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5mbXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzMzNTk4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW5mbXRzLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQklORk1UU19ICisjZGVmaW5lIF9MSU5VWF9CSU5GTVRTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKworc3RydWN0IHB0X3JlZ3M7CisKKyNkZWZpbmUgTUFYX0FSR19QQUdFUyAzMgorCisjZGVmaW5lIEJJTlBSTV9CVUZfU0laRSAxMjgKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5MTMxNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaW8uaApAQCAtMCwwICsxLDE3MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0JJT19ICisjZGVmaW5lIF9fTElOVVhfQklPX0gKKworI2luY2x1ZGUgPGxpbnV4L2hpZ2htZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvaW9wcmlvLmg+CisKKyNpbmNsdWRlIDxhc20vaW8uaD4KKworI2lmIGRlZmluZWQoQklPX1ZNRVJHRV9NQVhfU0laRSkgJiYgZGVmaW5lZChCSU9fVk1FUkdFX0JPVU5EQVJZKQorI2RlZmluZSBCSU9WRUNfVklSVF9TVEFSVF9TSVpFKHgpIChidmVjX3RvX3BoeXMoeCkgJiAoQklPX1ZNRVJHRV9CT1VOREFSWSAtIDEpKQorI2RlZmluZSBCSU9WRUNfVklSVF9PVkVSU0laRSh4KSAoKHgpID4gQklPX1ZNRVJHRV9NQVhfU0laRSkKKyNlbHNlCisjZGVmaW5lIEJJT1ZFQ19WSVJUX1NUQVJUX1NJWkUoeCkgMAorI2RlZmluZSBCSU9WRUNfVklSVF9PVkVSU0laRSh4KSAwCisjZW5kaWYKKworI2lmbmRlZiBCSU9fVk1FUkdFX0JPVU5EQVJZCisjZGVmaW5lIEJJT19WTUVSR0VfQk9VTkRBUlkgMAorI2VuZGlmCisKKyNkZWZpbmUgQklPX0RFQlVHCisKKyNpZmRlZiBCSU9fREVCVUcKKyNkZWZpbmUgQklPX0JVR19PTiBCVUdfT04KKyNlbHNlCisjZGVmaW5lIEJJT19CVUdfT04KKyNlbmRpZgorCisjZGVmaW5lIEJJT19NQVhfUEFHRVMgMjU2CisjZGVmaW5lIEJJT19NQVhfU0laRSAoQklPX01BWF9QQUdFUyA8PCBQQUdFX0NBQ0hFX1NISUZUKQorI2RlZmluZSBCSU9fTUFYX1NFQ1RPUlMgKEJJT19NQVhfU0laRSA+PiA5KQorCitzdHJ1Y3QgYmlvX3ZlYyB7Cisgc3RydWN0IHBhZ2UgKmJ2X3BhZ2U7CisgdW5zaWduZWQgaW50IGJ2X2xlbjsKKyB1bnNpZ25lZCBpbnQgYnZfb2Zmc2V0OworfTsKKworc3RydWN0IGJpb19zZXQ7CitzdHJ1Y3QgYmlvOwordHlwZWRlZiBpbnQgKGJpb19lbmRfaW9fdCkgKHN0cnVjdCBiaW8gKiwgdW5zaWduZWQgaW50LCBpbnQpOwordHlwZWRlZiB2b2lkIChiaW9fZGVzdHJ1Y3Rvcl90KSAoc3RydWN0IGJpbyAqKTsKKworc3RydWN0IGJpbyB7Cisgc2VjdG9yX3QgYmlfc2VjdG9yOworIHN0cnVjdCBiaW8gKmJpX25leHQ7Cisgc3RydWN0IGJsb2NrX2RldmljZSAqYmlfYmRldjsKKyB1bnNpZ25lZCBsb25nIGJpX2ZsYWdzOworIHVuc2lnbmVkIGxvbmcgYmlfcnc7CisKKyB1bnNpZ25lZCBzaG9ydCBiaV92Y250OworIHVuc2lnbmVkIHNob3J0IGJpX2lkeDsKKworIHVuc2lnbmVkIHNob3J0IGJpX3BoeXNfc2VnbWVudHM7CisKKyB1bnNpZ25lZCBzaG9ydCBiaV9od19zZWdtZW50czsKKworIHVuc2lnbmVkIGludCBiaV9zaXplOworCisgdW5zaWduZWQgaW50IGJpX2h3X2Zyb250X3NpemU7CisgdW5zaWduZWQgaW50IGJpX2h3X2JhY2tfc2l6ZTsKKworIHVuc2lnbmVkIGludCBiaV9tYXhfdmVjczsKKworIHN0cnVjdCBiaW9fdmVjICpiaV9pb192ZWM7CisKKyBiaW9fZW5kX2lvX3QgKmJpX2VuZF9pbzsKKyBhdG9taWNfdCBiaV9jbnQ7CisKKyB2b2lkICpiaV9wcml2YXRlOworCisgYmlvX2Rlc3RydWN0b3JfdCAqYmlfZGVzdHJ1Y3RvcjsKK307CisKKyNkZWZpbmUgQklPX1VQVE9EQVRFIDAgIAorI2RlZmluZSBCSU9fUldfQkxPQ0sgMSAgCisjZGVmaW5lIEJJT19FT0YgMiAgCisjZGVmaW5lIEJJT19TRUdfVkFMSUQgMyAgCisjZGVmaW5lIEJJT19DTE9ORUQgNCAgCisjZGVmaW5lIEJJT19CT1VOQ0VEIDUgIAorI2RlZmluZSBCSU9fVVNFUl9NQVBQRUQgNiAgCisjZGVmaW5lIEJJT19FT1BOT1RTVVBQIDcgIAorI2RlZmluZSBiaW9fZmxhZ2dlZChiaW8sIGZsYWcpICgoYmlvKS0+YmlfZmxhZ3MgJiAoMSA8PCAoZmxhZykpKQorCisjZGVmaW5lIEJJT19QT09MX0JJVFMgKDQpCisjZGVmaW5lIEJJT19QT09MX09GRlNFVCAoQklUU19QRVJfTE9ORyAtIEJJT19QT09MX0JJVFMpCisjZGVmaW5lIEJJT19QT09MX01BU0sgKDFVTCA8PCBCSU9fUE9PTF9PRkZTRVQpCisjZGVmaW5lIEJJT19QT09MX0lEWChiaW8pICgoYmlvKS0+YmlfZmxhZ3MgPj4gQklPX1BPT0xfT0ZGU0VUKSAKKworI2RlZmluZSBCSU9fUlcgMAorI2RlZmluZSBCSU9fUldfQUhFQUQgMQorI2RlZmluZSBCSU9fUldfQkFSUklFUiAyCisjZGVmaW5lIEJJT19SV19GQUlMRkFTVCAzCisjZGVmaW5lIEJJT19SV19TWU5DIDQKKworI2RlZmluZSBCSU9fUFJJT19TSElGVCAoOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSAtIElPUFJJT19CSVRTKQorI2RlZmluZSBiaW9fcHJpbyhiaW8pICgoYmlvKS0+YmlfcncgPj4gQklPX1BSSU9fU0hJRlQpCisjZGVmaW5lIGJpb19wcmlvX3ZhbGlkKGJpbykgaW9wcmlvX3ZhbGlkKGJpb19wcmlvKGJpbykpCisKKyNkZWZpbmUgYmlvX3NldF9wcmlvKGJpbywgcHJpbykgZG8geyAgIFdBUk5fT04ocHJpbyA+PSAoMSA8PCBJT1BSSU9fQklUUykpOyAgIChiaW8pLT5iaV9ydyAmPSAoKDFVTCA8PCBCSU9fUFJJT19TSElGVCkgLSAxKTsgICAoYmlvKS0+YmlfcncgfD0gKCh1bnNpZ25lZCBsb25nKSAocHJpbykgPDwgQklPX1BSSU9fU0hJRlQpOyAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBiaW9faW92ZWNfaWR4KGJpbywgaWR4KSAoJigoYmlvKS0+YmlfaW9fdmVjWyhpZHgpXSkpCisjZGVmaW5lIGJpb19pb3ZlYyhiaW8pIGJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV9pZHgpCisjZGVmaW5lIGJpb19wYWdlKGJpbykgYmlvX2lvdmVjKChiaW8pKS0+YnZfcGFnZQorI2RlZmluZSBiaW9fb2Zmc2V0KGJpbykgYmlvX2lvdmVjKChiaW8pKS0+YnZfb2Zmc2V0CisjZGVmaW5lIGJpb19zZWdtZW50cyhiaW8pICgoYmlvKS0+YmlfdmNudCAtIChiaW8pLT5iaV9pZHgpCisjZGVmaW5lIGJpb19zZWN0b3JzKGJpbykgKChiaW8pLT5iaV9zaXplID4+IDkpCisjZGVmaW5lIGJpb19jdXJfc2VjdG9ycyhiaW8pIChiaW9faW92ZWMoYmlvKS0+YnZfbGVuID4+IDkpCisjZGVmaW5lIGJpb19kYXRhKGJpbykgKHBhZ2VfYWRkcmVzcyhiaW9fcGFnZSgoYmlvKSkpICsgYmlvX29mZnNldCgoYmlvKSkpCisjZGVmaW5lIGJpb19iYXJyaWVyKGJpbykgKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19CQVJSSUVSKSkKKyNkZWZpbmUgYmlvX3N5bmMoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBiaW9fZmFpbGZhc3QoYmlvKSAoKGJpbyktPmJpX3J3ICYgKDEgPDwgQklPX1JXX0ZBSUxGQVNUKSkKKyNkZWZpbmUgYmlvX3J3X2FoZWFkKGJpbykgKChiaW8pLT5iaV9ydyAmICgxIDw8IEJJT19SV19BSEVBRCkpCisKKyNkZWZpbmUgYmlvX3RvX3BoeXMoYmlvKSAocGFnZV90b19waHlzKGJpb19wYWdlKChiaW8pKSkgKyAodW5zaWduZWQgbG9uZykgYmlvX29mZnNldCgoYmlvKSkpCisjZGVmaW5lIGJ2ZWNfdG9fcGh5cyhidikgKHBhZ2VfdG9fcGh5cygoYnYpLT5idl9wYWdlKSArICh1bnNpZ25lZCBsb25nKSAoYnYpLT5idl9vZmZzZXQpCisKKyNkZWZpbmUgX19iaW9fa21hcF9hdG9taWMoYmlvLCBpZHgsIGttdHlwZSkgICAoa21hcF9hdG9taWMoYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGlkeCkpLT5idl9wYWdlLCBrbXR5cGUpICsgICBiaW9faW92ZWNfaWR4KChiaW8pLCAoaWR4KSktPmJ2X29mZnNldCkKKworI2RlZmluZSBfX2Jpb19rdW5tYXBfYXRvbWljKGFkZHIsIGttdHlwZSkga3VubWFwX2F0b21pYyhhZGRyLCBrbXR5cGUpCisKKyNkZWZpbmUgX19CVkVDX0VORChiaW8pIGJpb19pb3ZlY19pZHgoKGJpbyksIChiaW8pLT5iaV92Y250IC0gMSkKKyNkZWZpbmUgX19CVkVDX1NUQVJUKGJpbykgYmlvX2lvdmVjX2lkeCgoYmlvKSwgKGJpbyktPmJpX2lkeCkKKworI2lmbmRlZiBCSU9WRUNfUEhZU19NRVJHRUFCTEUKKyNkZWZpbmUgQklPVkVDX1BIWVNfTUVSR0VBQkxFKHZlYzEsIHZlYzIpICAgKChidmVjX3RvX3BoeXMoKHZlYzEpKSArICh2ZWMxKS0+YnZfbGVuKSA9PSBidmVjX3RvX3BoeXMoKHZlYzIpKSkKKyNlbmRpZgorCisjZGVmaW5lIEJJT1ZFQ19WSVJUX01FUkdFQUJMRSh2ZWMxLCB2ZWMyKSAgICgoKChidmVjX3RvX3BoeXMoKHZlYzEpKSArICh2ZWMxKS0+YnZfbGVuKSB8IGJ2ZWNfdG9fcGh5cygodmVjMikpKSAmIChCSU9fVk1FUkdFX0JPVU5EQVJZIC0gMSkpID09IDApCisjZGVmaW5lIF9fQklPX1NFR19CT1VOREFSWShhZGRyMSwgYWRkcjIsIG1hc2spICAgKCgoYWRkcjEpIHwgKG1hc2spKSA9PSAoKChhZGRyMikgLSAxKSB8IChtYXNrKSkpCisjZGVmaW5lIEJJT1ZFQ19TRUdfQk9VTkRBUlkocSwgYjEsIGIyKSAgIF9fQklPX1NFR19CT1VOREFSWShidmVjX3RvX3BoeXMoKGIxKSksIGJ2ZWNfdG9fcGh5cygoYjIpKSArIChiMiktPmJ2X2xlbiwgKHEpLT5zZWdfYm91bmRhcnlfbWFzaykKKyNkZWZpbmUgQklPX1NFR19CT1VOREFSWShxLCBiMSwgYjIpICAgQklPVkVDX1NFR19CT1VOREFSWSgocSksIF9fQlZFQ19FTkQoKGIxKSksIF9fQlZFQ19TVEFSVCgoYjIpKSkKKworI2RlZmluZSBiaW9faW9fZXJyb3IoYmlvLCBieXRlcykgYmlvX2VuZGlvKChiaW8pLCAoYnl0ZXMpLCAtRUlPKQorCisjZGVmaW5lIF9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZsLCBiaW8sIGksIHN0YXJ0X2lkeCkgICBmb3IgKGJ2bCA9IGJpb19pb3ZlY19pZHgoKGJpbyksIChzdGFydF9pZHgpKSwgaSA9IChzdGFydF9pZHgpOyAgIGkgPCAoYmlvKS0+YmlfdmNudDsgICBidmwrKywgaSsrKQorCisjZGVmaW5lIGJpb19mb3JfZWFjaF9zZWdtZW50KGJ2bCwgYmlvLCBpKSAgIF9fYmlvX2Zvcl9lYWNoX3NlZ21lbnQoYnZsLCBiaW8sIGksIChiaW8pLT5iaV9pZHgpCisKKyNkZWZpbmUgYmlvX2dldChiaW8pIGF0b21pY19pbmMoJihiaW8pLT5iaV9jbnQpCisKK3N0cnVjdCBiaW9fcGFpciB7Cisgc3RydWN0IGJpbyBiaW8xLCBiaW8yOworIHN0cnVjdCBiaW9fdmVjIGJ2MSwgYnYyOworIGF0b21pY190IGNudDsKKyBpbnQgZXJyb3I7Cit9OworCitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZTsKKworc3RydWN0IHNnX2lvdmVjOworCisjZGVmaW5lIGJ2ZWNfa21hcF9pcnEoYnZlYywgZmxhZ3MpIChwYWdlX2FkZHJlc3MoKGJ2ZWMpLT5idl9wYWdlKSArIChidmVjKS0+YnZfb2Zmc2V0KQorI2RlZmluZSBidmVjX2t1bm1hcF9pcnEoYnVmLCBmbGFncykgZG8geyAqKGZsYWdzKSA9IDA7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19iaW9fa3VubWFwX2lycShidWYsIGZsYWdzKSBidmVjX2t1bm1hcF9pcnEoYnVmLCBmbGFncykKKyNkZWZpbmUgYmlvX2ttYXBfaXJxKGJpbywgZmxhZ3MpICAgX19iaW9fa21hcF9pcnEoKGJpbyksIChiaW8pLT5iaV9pZHgsIChmbGFncykpCisjZGVmaW5lIGJpb19rdW5tYXBfaXJxKGJ1ZixmbGFncykgX19iaW9fa3VubWFwX2lycShidWYsIGZsYWdzKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0bWFwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYml0bWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjQ2ZDE1OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRtYXAuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQklUTUFQX0gKKyNkZWZpbmUgX19MSU5VWF9CSVRNQVBfSAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2RlZmluZSBCSVRNQVBfTEFTVF9XT1JEX01BU0sobmJpdHMpICAoICAgKChuYml0cykgJSBCSVRTX1BFUl9MT05HKSA/ICAgKDFVTDw8KChuYml0cykgJSBCSVRTX1BFUl9MT05HKSktMSA6IH4wVUwgICkKKworI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRvcHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9iaXRvcHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGRmNjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2JpdG9wcy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JJVE9QU19ICisjZGVmaW5lIF9MSU5VWF9CSVRPUFNfSAorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL2JpdG9wcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibGtkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMDA0NTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa2Rldi5oCkBAIC0wLDAgKzEsNDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CTEtERVZfSAorI2RlZmluZSBfTElOVVhfQkxLREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+CisjaW5jbHVkZSA8bGludXgvZ2VuaGQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC93b3JrcXVldWUuaD4KKyNpbmNsdWRlIDxsaW51eC9wYWdlbWFwLmg+CisjaW5jbHVkZSA8bGludXgvYmFja2luZy1kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvbWVtcG9vbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCisjaW5jbHVkZSA8YXNtL3NjYXR0ZXJsaXN0Lmg+CisKK3N0cnVjdCBzY3NpX2lvY3RsX2NvbW1hbmQ7CisKK3N0cnVjdCByZXF1ZXN0X3F1ZXVlOwordHlwZWRlZiBzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSByZXF1ZXN0X3F1ZXVlX3Q7CitzdHJ1Y3QgZWxldmF0b3JfcXVldWU7Cit0eXBlZGVmIHN0cnVjdCBlbGV2YXRvcl9xdWV1ZSBlbGV2YXRvcl90Oworc3RydWN0IHJlcXVlc3RfcG1fc3RhdGU7CitzdHJ1Y3QgYmxrX3RyYWNlOworCisjZGVmaW5lIEJMS0RFVl9NSU5fUlEgNAorI2RlZmluZSBCTEtERVZfTUFYX1JRIDEyOCAgCisKK3N0cnVjdCBhc19pb19jb250ZXh0IHsKKyBzcGlubG9ja190IGxvY2s7CisKKyB2b2lkICgqZHRvcikoc3RydWN0IGFzX2lvX2NvbnRleHQgKmFpYyk7Cisgdm9pZCAoKmV4aXQpKHN0cnVjdCBhc19pb19jb250ZXh0ICphaWMpOworCisgdW5zaWduZWQgbG9uZyBzdGF0ZTsKKyBhdG9taWNfdCBucl9xdWV1ZWQ7CisgYXRvbWljX3QgbnJfZGlzcGF0Y2hlZDsKKworIHVuc2lnbmVkIGxvbmcgbGFzdF9lbmRfcmVxdWVzdDsKKyB1bnNpZ25lZCBsb25nIHR0aW1lX3RvdGFsOworIHVuc2lnbmVkIGxvbmcgdHRpbWVfc2FtcGxlczsKKyB1bnNpZ25lZCBsb25nIHR0aW1lX21lYW47CisKKyB1bnNpZ25lZCBpbnQgc2Vla19zYW1wbGVzOworIHNlY3Rvcl90IGxhc3RfcmVxdWVzdF9wb3M7CisgdTY0IHNlZWtfdG90YWw7Cisgc2VjdG9yX3Qgc2Vla19tZWFuOworfTsKKworc3RydWN0IGNmcV9xdWV1ZTsKK3N0cnVjdCBjZnFfaW9fY29udGV4dCB7Cisgc3RydWN0IHJiX25vZGUgcmJfbm9kZTsKKyB2b2lkICprZXk7CisKKyBzdHJ1Y3QgY2ZxX3F1ZXVlICpjZnFxWzJdOworCisgc3RydWN0IGlvX2NvbnRleHQgKmlvYzsKKworIHVuc2lnbmVkIGxvbmcgbGFzdF9lbmRfcmVxdWVzdDsKKyBzZWN0b3JfdCBsYXN0X3JlcXVlc3RfcG9zOworIHVuc2lnbmVkIGxvbmcgbGFzdF9xdWV1ZTsKKworIHVuc2lnbmVkIGxvbmcgdHRpbWVfdG90YWw7CisgdW5zaWduZWQgbG9uZyB0dGltZV9zYW1wbGVzOworIHVuc2lnbmVkIGxvbmcgdHRpbWVfbWVhbjsKKworIHVuc2lnbmVkIGludCBzZWVrX3NhbXBsZXM7CisgdTY0IHNlZWtfdG90YWw7Cisgc2VjdG9yX3Qgc2Vla19tZWFuOworCisgc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9saXN0OworCisgdm9pZCAoKmR0b3IpKHN0cnVjdCBpb19jb250ZXh0ICopOworIHZvaWQgKCpleGl0KShzdHJ1Y3QgaW9fY29udGV4dCAqKTsKK307CisKK3N0cnVjdCBpb19jb250ZXh0IHsKKyBhdG9taWNfdCByZWZjb3VudDsKKyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7CisKKyBpbnQgKCpzZXRfaW9wcmlvKShzdHJ1Y3QgaW9fY29udGV4dCAqLCB1bnNpZ25lZCBpbnQpOworCisgdW5zaWduZWQgbG9uZyBsYXN0X3dhaXRlZDsKKyBpbnQgbnJfYmF0Y2hfcmVxdWVzdHM7CisKKyBzdHJ1Y3QgYXNfaW9fY29udGV4dCAqYWljOworIHN0cnVjdCByYl9yb290IGNpY19yb290OworfTsKKworc3RydWN0IGlvX2NvbnRleHQgKmN1cnJlbnRfaW9fY29udGV4dChnZnBfdCBnZnBfZmxhZ3MpOworc3RydWN0IGlvX2NvbnRleHQgKmdldF9pb19jb250ZXh0KGdmcF90IGdmcF9mbGFncyk7CisKK3N0cnVjdCByZXF1ZXN0OwordHlwZWRlZiB2b2lkIChycV9lbmRfaW9fZm4pKHN0cnVjdCByZXF1ZXN0ICosIGludCk7CisKK3N0cnVjdCByZXF1ZXN0X2xpc3QgeworIGludCBjb3VudFsyXTsKKyBpbnQgc3RhcnZlZFsyXTsKKyBpbnQgZWx2cHJpdjsKKyBtZW1wb29sX3QgKnJxX3Bvb2w7Cisgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdFsyXTsKK307CisKKyNkZWZpbmUgQkxLX01BWF9DREIgMTYKKworc3RydWN0IHJlcXVlc3QgeworIHN0cnVjdCBsaXN0X2hlYWQgcXVldWVsaXN0OworIHN0cnVjdCBsaXN0X2hlYWQgZG9uZWxpc3Q7CisKKyB1bnNpZ25lZCBsb25nIGZsYWdzOworCisgc2VjdG9yX3Qgc2VjdG9yOworIHVuc2lnbmVkIGxvbmcgbnJfc2VjdG9yczsKKworIHVuc2lnbmVkIGludCBjdXJyZW50X25yX3NlY3RvcnM7CisKKyBzZWN0b3JfdCBoYXJkX3NlY3RvcjsKKyB1bnNpZ25lZCBsb25nIGhhcmRfbnJfc2VjdG9yczsKKworIHVuc2lnbmVkIGludCBoYXJkX2N1cl9zZWN0b3JzOworCisgc3RydWN0IGJpbyAqYmlvOworIHN0cnVjdCBiaW8gKmJpb3RhaWw7CisKKyB2b2lkICplbGV2YXRvcl9wcml2YXRlOworIHZvaWQgKmNvbXBsZXRpb25fZGF0YTsKKworIGludCBycV9zdGF0dXM7CisgaW50IGVycm9yczsKKyBzdHJ1Y3QgZ2VuZGlzayAqcnFfZGlzazsKKyB1bnNpZ25lZCBsb25nIHN0YXJ0X3RpbWU7CisKKyB1bnNpZ25lZCBzaG9ydCBucl9waHlzX3NlZ21lbnRzOworCisgdW5zaWduZWQgc2hvcnQgbnJfaHdfc2VnbWVudHM7CisKKyB1bnNpZ25lZCBzaG9ydCBpb3ByaW87CisKKyBpbnQgdGFnOworCisgaW50IHJlZl9jb3VudDsKKyByZXF1ZXN0X3F1ZXVlX3QgKnE7Cisgc3RydWN0IHJlcXVlc3RfbGlzdCAqcmw7CisKKyBzdHJ1Y3QgY29tcGxldGlvbiAqd2FpdGluZzsKKyB2b2lkICpzcGVjaWFsOworIGNoYXIgKmJ1ZmZlcjsKKworIHVuc2lnbmVkIGludCBjbWRfbGVuOworIHVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKKworIHVuc2lnbmVkIGludCBkYXRhX2xlbjsKKyB1bnNpZ25lZCBpbnQgc2Vuc2VfbGVuOworIHZvaWQgKmRhdGE7Cisgdm9pZCAqc2Vuc2U7CisKKyB1bnNpZ25lZCBpbnQgdGltZW91dDsKKyBpbnQgcmV0cmllczsKKworIHJxX2VuZF9pb19mbiAqZW5kX2lvOworIHZvaWQgKmVuZF9pb19kYXRhOworfTsKKworZW51bSBycV9mbGFnX2JpdHMgeworIF9fUkVRX1JXLAorIF9fUkVRX0ZBSUxGQVNULAorIF9fUkVRX1NPUlRFRCwKKyBfX1JFUV9TT0ZUQkFSUklFUiwKKyBfX1JFUV9IQVJEQkFSUklFUiwKKyBfX1JFUV9GVUEsCisgX19SRVFfQ01ELAorIF9fUkVRX05PTUVSR0UsCisgX19SRVFfU1RBUlRFRCwKKyBfX1JFUV9ET05UUFJFUCwKKyBfX1JFUV9RVUVVRUQsCisgX19SRVFfRUxWUFJJViwKKworIF9fUkVRX1BDLAorIF9fUkVRX0JMT0NLX1BDLAorIF9fUkVRX1NFTlNFLAorCisgX19SRVFfRkFJTEVELAorIF9fUkVRX1FVSUVULAorIF9fUkVRX1NQRUNJQUwsCisgX19SRVFfRFJJVkVfQ01ELAorIF9fUkVRX0RSSVZFX1RBU0ssCisgX19SRVFfRFJJVkVfVEFTS0ZJTEUsCisgX19SRVFfUFJFRU1QVCwKKyBfX1JFUV9QTV9TVVNQRU5ELAorIF9fUkVRX1BNX1JFU1VNRSwKKyBfX1JFUV9QTV9TSFVURE9XTiwKKyBfX1JFUV9PUkRFUkVEX0NPTE9SLAorIF9fUkVRX1JXX1NZTkMsCisgX19SRVFfTlJfQklUUywKK307CisKKyNkZWZpbmUgUkVRX1JXICgxIDw8IF9fUkVRX1JXKQorI2RlZmluZSBSRVFfRkFJTEZBU1QgKDEgPDwgX19SRVFfRkFJTEZBU1QpCisjZGVmaW5lIFJFUV9TT1JURUQgKDEgPDwgX19SRVFfU09SVEVEKQorI2RlZmluZSBSRVFfU09GVEJBUlJJRVIgKDEgPDwgX19SRVFfU09GVEJBUlJJRVIpCisjZGVmaW5lIFJFUV9IQVJEQkFSUklFUiAoMSA8PCBfX1JFUV9IQVJEQkFSUklFUikKKyNkZWZpbmUgUkVRX0ZVQSAoMSA8PCBfX1JFUV9GVUEpCisjZGVmaW5lIFJFUV9DTUQgKDEgPDwgX19SRVFfQ01EKQorI2RlZmluZSBSRVFfTk9NRVJHRSAoMSA8PCBfX1JFUV9OT01FUkdFKQorI2RlZmluZSBSRVFfU1RBUlRFRCAoMSA8PCBfX1JFUV9TVEFSVEVEKQorI2RlZmluZSBSRVFfRE9OVFBSRVAgKDEgPDwgX19SRVFfRE9OVFBSRVApCisjZGVmaW5lIFJFUV9RVUVVRUQgKDEgPDwgX19SRVFfUVVFVUVEKQorI2RlZmluZSBSRVFfRUxWUFJJViAoMSA8PCBfX1JFUV9FTFZQUklWKQorI2RlZmluZSBSRVFfUEMgKDEgPDwgX19SRVFfUEMpCisjZGVmaW5lIFJFUV9CTE9DS19QQyAoMSA8PCBfX1JFUV9CTE9DS19QQykKKyNkZWZpbmUgUkVRX1NFTlNFICgxIDw8IF9fUkVRX1NFTlNFKQorI2RlZmluZSBSRVFfRkFJTEVEICgxIDw8IF9fUkVRX0ZBSUxFRCkKKyNkZWZpbmUgUkVRX1FVSUVUICgxIDw8IF9fUkVRX1FVSUVUKQorI2RlZmluZSBSRVFfU1BFQ0lBTCAoMSA8PCBfX1JFUV9TUEVDSUFMKQorI2RlZmluZSBSRVFfRFJJVkVfQ01EICgxIDw8IF9fUkVRX0RSSVZFX0NNRCkKKyNkZWZpbmUgUkVRX0RSSVZFX1RBU0sgKDEgPDwgX19SRVFfRFJJVkVfVEFTSykKKyNkZWZpbmUgUkVRX0RSSVZFX1RBU0tGSUxFICgxIDw8IF9fUkVRX0RSSVZFX1RBU0tGSUxFKQorI2RlZmluZSBSRVFfUFJFRU1QVCAoMSA8PCBfX1JFUV9QUkVFTVBUKQorI2RlZmluZSBSRVFfUE1fU1VTUEVORCAoMSA8PCBfX1JFUV9QTV9TVVNQRU5EKQorI2RlZmluZSBSRVFfUE1fUkVTVU1FICgxIDw8IF9fUkVRX1BNX1JFU1VNRSkKKyNkZWZpbmUgUkVRX1BNX1NIVVRET1dOICgxIDw8IF9fUkVRX1BNX1NIVVRET1dOKQorI2RlZmluZSBSRVFfT1JERVJFRF9DT0xPUiAoMSA8PCBfX1JFUV9PUkRFUkVEX0NPTE9SKQorI2RlZmluZSBSRVFfUldfU1lOQyAoMSA8PCBfX1JFUV9SV19TWU5DKQorCitzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZQoreworCisgaW50IHBtX3N0ZXA7CisKKyB1MzIgcG1fc3RhdGU7Cisgdm9pZCogZGF0YTsKK307CisKKyNpbmNsdWRlIDxsaW51eC9lbGV2YXRvci5oPgorCit0eXBlZGVmIGludCAobWVyZ2VfcmVxdWVzdF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLAorIHN0cnVjdCBiaW8gKik7Cit0eXBlZGVmIGludCAobWVyZ2VfcmVxdWVzdHNfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwKKyBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAocmVxdWVzdF9mbl9wcm9jKSAocmVxdWVzdF9xdWV1ZV90ICpxKTsKK3R5cGVkZWYgaW50IChtYWtlX3JlcXVlc3RfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKnEsIHN0cnVjdCBiaW8gKmJpbyk7Cit0eXBlZGVmIGludCAocHJlcF9ycV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAodW5wbHVnX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICopOworCitzdHJ1Y3QgYmlvX3ZlYzsKK3R5cGVkZWYgaW50IChtZXJnZV9idmVjX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCBiaW8gKiwgc3RydWN0IGJpb192ZWMgKik7Cit0eXBlZGVmIHZvaWQgKGFjdGl2aXR5X2ZuKSAodm9pZCAqZGF0YSwgaW50IHJ3KTsKK3R5cGVkZWYgaW50IChpc3N1ZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgZ2VuZGlzayAqLCBzZWN0b3JfdCAqKTsKK3R5cGVkZWYgdm9pZCAocHJlcGFyZV9mbHVzaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKK3R5cGVkZWYgdm9pZCAoc29mdGlycV9kb25lX2ZuKShzdHJ1Y3QgcmVxdWVzdCAqKTsKKworZW51bSBibGtfcXVldWVfc3RhdGUgeworIFF1ZXVlX2Rvd24sCisgUXVldWVfdXAsCit9OworCitzdHJ1Y3QgYmxrX3F1ZXVlX3RhZyB7Cisgc3RydWN0IHJlcXVlc3QgKip0YWdfaW5kZXg7CisgdW5zaWduZWQgbG9uZyAqdGFnX21hcDsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGJ1c3lfbGlzdDsKKyBpbnQgYnVzeTsKKyBpbnQgbWF4X2RlcHRoOworIGludCByZWFsX21heF9kZXB0aDsKKyBhdG9taWNfdCByZWZjbnQ7Cit9OworCitzdHJ1Y3QgcmVxdWVzdF9xdWV1ZQoreworCisgc3RydWN0IGxpc3RfaGVhZCBxdWV1ZV9oZWFkOworIHN0cnVjdCByZXF1ZXN0ICpsYXN0X21lcmdlOworIGVsZXZhdG9yX3QgKmVsZXZhdG9yOworCisgc3RydWN0IHJlcXVlc3RfbGlzdCBycTsKKworIHJlcXVlc3RfZm5fcHJvYyAqcmVxdWVzdF9mbjsKKyBtZXJnZV9yZXF1ZXN0X2ZuICpiYWNrX21lcmdlX2ZuOworIG1lcmdlX3JlcXVlc3RfZm4gKmZyb250X21lcmdlX2ZuOworIG1lcmdlX3JlcXVlc3RzX2ZuICptZXJnZV9yZXF1ZXN0c19mbjsKKyBtYWtlX3JlcXVlc3RfZm4gKm1ha2VfcmVxdWVzdF9mbjsKKyBwcmVwX3JxX2ZuICpwcmVwX3JxX2ZuOworIHVucGx1Z19mbiAqdW5wbHVnX2ZuOworIG1lcmdlX2J2ZWNfZm4gKm1lcmdlX2J2ZWNfZm47CisgYWN0aXZpdHlfZm4gKmFjdGl2aXR5X2ZuOworIGlzc3VlX2ZsdXNoX2ZuICppc3N1ZV9mbHVzaF9mbjsKKyBwcmVwYXJlX2ZsdXNoX2ZuICpwcmVwYXJlX2ZsdXNoX2ZuOworIHNvZnRpcnFfZG9uZV9mbiAqc29mdGlycV9kb25lX2ZuOworCisgc2VjdG9yX3QgZW5kX3NlY3RvcjsKKyBzdHJ1Y3QgcmVxdWVzdCAqYm91bmRhcnlfcnE7CisKKyBzdHJ1Y3QgdGltZXJfbGlzdCB1bnBsdWdfdGltZXI7CisgaW50IHVucGx1Z190aHJlc2g7CisgdW5zaWduZWQgbG9uZyB1bnBsdWdfZGVsYXk7Cisgc3RydWN0IHdvcmtfc3RydWN0IHVucGx1Z193b3JrOworCisgc3RydWN0IGJhY2tpbmdfZGV2X2luZm8gYmFja2luZ19kZXZfaW5mbzsKKworIHZvaWQgKnF1ZXVlZGF0YTsKKworIHZvaWQgKmFjdGl2aXR5X2RhdGE7CisKKyB1bnNpZ25lZCBsb25nIGJvdW5jZV9wZm47CisgZ2ZwX3QgYm91bmNlX2dmcDsKKworIHVuc2lnbmVkIGxvbmcgcXVldWVfZmxhZ3M7CisKKyBzcGlubG9ja190IF9fcXVldWVfbG9jazsKKyBzcGlubG9ja190ICpxdWV1ZV9sb2NrOworCisgc3RydWN0IGtvYmplY3Qga29iajsKKworIHVuc2lnbmVkIGxvbmcgbnJfcmVxdWVzdHM7CisgdW5zaWduZWQgaW50IG5yX2Nvbmdlc3Rpb25fb247CisgdW5zaWduZWQgaW50IG5yX2Nvbmdlc3Rpb25fb2ZmOworIHVuc2lnbmVkIGludCBucl9iYXRjaGluZzsKKworIHVuc2lnbmVkIGludCBtYXhfc2VjdG9yczsKKyB1bnNpZ25lZCBpbnQgbWF4X2h3X3NlY3RvcnM7CisgdW5zaWduZWQgc2hvcnQgbWF4X3BoeXNfc2VnbWVudHM7CisgdW5zaWduZWQgc2hvcnQgbWF4X2h3X3NlZ21lbnRzOworIHVuc2lnbmVkIHNob3J0IGhhcmRzZWN0X3NpemU7CisgdW5zaWduZWQgaW50IG1heF9zZWdtZW50X3NpemU7CisKKyB1bnNpZ25lZCBsb25nIHNlZ19ib3VuZGFyeV9tYXNrOworIHVuc2lnbmVkIGludCBkbWFfYWxpZ25tZW50OworCisgc3RydWN0IGJsa19xdWV1ZV90YWcgKnF1ZXVlX3RhZ3M7CisKKyB1bnNpZ25lZCBpbnQgbnJfc29ydGVkOworIHVuc2lnbmVkIGludCBpbl9mbGlnaHQ7CisKKyB1bnNpZ25lZCBpbnQgc2dfdGltZW91dDsKKyB1bnNpZ25lZCBpbnQgc2dfcmVzZXJ2ZWRfc2l6ZTsKKyBpbnQgbm9kZTsKKworIHN0cnVjdCBibGtfdHJhY2UgKmJsa190cmFjZTsKKworIHVuc2lnbmVkIGludCBvcmRlcmVkLCBuZXh0X29yZGVyZWQsIG9yZHNlcTsKKyBpbnQgb3JkZXJyLCBvcmRjb2xvcjsKKyBzdHJ1Y3QgcmVxdWVzdCBwcmVfZmx1c2hfcnEsIGJhcl9ycSwgcG9zdF9mbHVzaF9ycTsKKyBzdHJ1Y3QgcmVxdWVzdCAqb3JpZ19iYXJfcnE7CisgdW5zaWduZWQgaW50IGJpX3NpemU7CisKKyBzdHJ1Y3QgbXV0ZXggc3lzZnNfbG9jazsKK307CisKKyNkZWZpbmUgUlFfSU5BQ1RJVkUgKC0xKQorI2RlZmluZSBSUV9BQ1RJVkUgMQorCisjZGVmaW5lIFFVRVVFX0ZMQUdfQ0xVU1RFUiAwICAKKyNkZWZpbmUgUVVFVUVfRkxBR19RVUVVRUQgMSAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfU1RPUFBFRCAyICAKKyNkZWZpbmUgUVVFVUVfRkxBR19SRUFERlVMTCAzICAKKyNkZWZpbmUgUVVFVUVfRkxBR19XUklURUZVTEwgNCAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfREVBRCA1ICAKKyNkZWZpbmUgUVVFVUVfRkxBR19SRUVOVEVSIDYgIAorI2RlZmluZSBRVUVVRV9GTEFHX1BMVUdHRUQgNyAgCisjZGVmaW5lIFFVRVVFX0ZMQUdfRUxWU1dJVENIIDggIAorCitlbnVtIHsKKworIFFVRVVFX09SREVSRURfTk9ORSA9IDB4MDAsCisgUVVFVUVfT1JERVJFRF9EUkFJTiA9IDB4MDEsCisgUVVFVUVfT1JERVJFRF9UQUcgPSAweDAyLAorCisgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCA9IDB4MTAsCisgUVVFVUVfT1JERVJFRF9QT1NURkxVU0ggPSAweDIwLAorIFFVRVVFX09SREVSRURfRlVBID0gMHg0MCwKKworIFFVRVVFX09SREVSRURfRFJBSU5fRkxVU0ggPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKKyBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIIHwgUVVFVUVfT1JERVJFRF9QT1NURkxVU0gsCisgUVVFVUVfT1JERVJFRF9EUkFJTl9GVUEgPSBRVUVVRV9PUkRFUkVEX0RSQUlOIHwKKyBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIIHwgUVVFVUVfT1JERVJFRF9GVUEsCisgUVVFVUVfT1JERVJFRF9UQUdfRkxVU0ggPSBRVUVVRV9PUkRFUkVEX1RBRyB8CisgUVVFVUVfT1JERVJFRF9QUkVGTFVTSCB8IFFVRVVFX09SREVSRURfUE9TVEZMVVNILAorIFFVRVVFX09SREVSRURfVEFHX0ZVQSA9IFFVRVVFX09SREVSRURfVEFHIHwKKyBRVUVVRV9PUkRFUkVEX1BSRUZMVVNIIHwgUVVFVUVfT1JERVJFRF9GVUEsCisKKyBRVUVVRV9PUkRTRVFfU1RBUlRFRCA9IDB4MDEsCisgUVVFVUVfT1JEU0VRX0RSQUlOID0gMHgwMiwKKyBRVUVVRV9PUkRTRVFfUFJFRkxVU0ggPSAweDA0LAorIFFVRVVFX09SRFNFUV9CQVIgPSAweDA4LAorIFFVRVVFX09SRFNFUV9QT1NURkxVU0ggPSAweDEwLAorIFFVRVVFX09SRFNFUV9ET05FID0gMHgyMCwKK307CisKKyNkZWZpbmUgYmxrX3F1ZXVlX3BsdWdnZWQocSkgdGVzdF9iaXQoUVVFVUVfRkxBR19QTFVHR0VELCAmKHEpLT5xdWV1ZV9mbGFncykKKyNkZWZpbmUgYmxrX3F1ZXVlX3RhZ2dlZChxKSB0ZXN0X2JpdChRVUVVRV9GTEFHX1FVRVVFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9zdG9wcGVkKHEpIHRlc3RfYml0KFFVRVVFX0ZMQUdfU1RPUFBFRCwgJihxKS0+cXVldWVfZmxhZ3MpCisjZGVmaW5lIGJsa19xdWV1ZV9mbHVzaGluZyhxKSAoKHEpLT5vcmRzZXEpCisKKyNkZWZpbmUgYmxrX2ZzX3JlcXVlc3QocnEpICgocnEpLT5mbGFncyAmIFJFUV9DTUQpCisjZGVmaW5lIGJsa19wY19yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfQkxPQ0tfUEMpCisjZGVmaW5lIGJsa19ub3JldHJ5X3JlcXVlc3QocnEpICgocnEpLT5mbGFncyAmIFJFUV9GQUlMRkFTVCkKKyNkZWZpbmUgYmxrX3JxX3N0YXJ0ZWQocnEpICgocnEpLT5mbGFncyAmIFJFUV9TVEFSVEVEKQorCisjZGVmaW5lIGJsa19hY2NvdW50X3JxKHJxKSAoYmxrX3JxX3N0YXJ0ZWQocnEpICYmIGJsa19mc19yZXF1ZXN0KHJxKSkKKworI2RlZmluZSBibGtfcG1fc3VzcGVuZF9yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfUE1fU1VTUEVORCkKKyNkZWZpbmUgYmxrX3BtX3Jlc3VtZV9yZXF1ZXN0KHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfUE1fUkVTVU1FKQorI2RlZmluZSBibGtfcG1fcmVxdWVzdChycSkgICAoKHJxKS0+ZmxhZ3MgJiAoUkVRX1BNX1NVU1BFTkQgfCBSRVFfUE1fUkVTVU1FKSkKKworI2RlZmluZSBibGtfc29ydGVkX3JxKHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfU09SVEVEKQorI2RlZmluZSBibGtfYmFycmllcl9ycShycSkgKChycSktPmZsYWdzICYgUkVRX0hBUkRCQVJSSUVSKQorI2RlZmluZSBibGtfZnVhX3JxKHJxKSAoKHJxKS0+ZmxhZ3MgJiBSRVFfRlVBKQorCisjZGVmaW5lIGxpc3RfZW50cnlfcnEocHRyKSBsaXN0X2VudHJ5KChwdHIpLCBzdHJ1Y3QgcmVxdWVzdCwgcXVldWVsaXN0KQorCisjZGVmaW5lIHJxX2RhdGFfZGlyKHJxKSAoKHJxKS0+ZmxhZ3MgJiAxKQorCisjZGVmaW5lIFJRX05PTUVSR0VfRkxBR1MgICAoUkVRX05PTUVSR0UgfCBSRVFfU1RBUlRFRCB8IFJFUV9IQVJEQkFSUklFUiB8IFJFUV9TT0ZUQkFSUklFUikKKyNkZWZpbmUgcnFfbWVyZ2VhYmxlKHJxKSAgICghKChycSktPmZsYWdzICYgUlFfTk9NRVJHRV9GTEFHUykgJiYgYmxrX2ZzX3JlcXVlc3QoKHJxKSkpCisjZGVmaW5lIGJsa19xdWV1ZV9oZWFkYWN0aXZlKHEsIGhlYWRfYWN0aXZlKQorI2RlZmluZSBCTEtQUkVQX09LIDAgIAorI2RlZmluZSBCTEtQUkVQX0tJTEwgMSAgCisjZGVmaW5lIEJMS1BSRVBfREVGRVIgMiAgCisKKyNkZWZpbmUgQkxLX0JPVU5DRV9ISUdIICgodTY0KWJsa19tYXhfbG93X3BmbiA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBCTEtfQk9VTkNFX0FOWSAoKHU2NClibGtfbWF4X3BmbiA8PCBQQUdFX1NISUZUKQorI2RlZmluZSBCTEtfQk9VTkNFX0lTQSAoSVNBX0RNQV9USFJFU0hPTEQpCisKKyNkZWZpbmUgcnFfZm9yX2VhY2hfYmlvKF9iaW8sIHJxKSAgIGlmICgocnEtPmJpbykpICAgZm9yIChfYmlvID0gKHJxKS0+YmlvOyBfYmlvOyBfYmlvID0gX2Jpby0+YmlfbmV4dCkKKworI2RlZmluZSBlbmRfaW9fZXJyb3IodXB0b2RhdGUpICh1bmxpa2VseSgodXB0b2RhdGUpIDw9IDApKQorCisjZGVmaW5lIGJsa19xdWV1ZV90YWdfZGVwdGgocSkgKChxKS0+cXVldWVfdGFncy0+YnVzeSkKKyNkZWZpbmUgYmxrX3F1ZXVlX3RhZ19xdWV1ZShxKSAoKHEpLT5xdWV1ZV90YWdzLT5idXN5IDwgKHEpLT5xdWV1ZV90YWdzLT5tYXhfZGVwdGgpCisjZGVmaW5lIGJsa19ycV90YWdnZWQocnEpICgocnEpLT5mbGFncyAmIFJFUV9RVUVVRUQpCisKKyNkZWZpbmUgTUFYX1BIWVNfU0VHTUVOVFMgMTI4CisjZGVmaW5lIE1BWF9IV19TRUdNRU5UUyAxMjgKKyNkZWZpbmUgU0FGRV9NQVhfU0VDVE9SUyAyNTUKKyNkZWZpbmUgQkxLX0RFRl9NQVhfU0VDVE9SUyAxMDI0CisKKyNkZWZpbmUgTUFYX1NFR01FTlRfU0laRSA2NTUzNgorCisjZGVmaW5lIGJsa2Rldl9lbnRyeV90b19yZXF1ZXN0KGVudHJ5KSBsaXN0X2VudHJ5KChlbnRyeSksIHN0cnVjdCByZXF1ZXN0LCBxdWV1ZWxpc3QpCisKKyNkZWZpbmUgYmxrX2ZpbmlzaGVkX2lvKG5zZWN0cykgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBibGtfc3RhcnRlZF9pbyhuc2VjdHMpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBzZWN0b3JfZGl2KG4sIGIpKCAgeyAgIGludCBfcmVzOyAgIF9yZXMgPSAobikgJSAoYik7ICAgKG4pIC89IChiKTsgICBfcmVzOyAgfSAgKQorCisjZGVmaW5lIE1PRFVMRV9BTElBU19CTE9DS0RFVihtYWpvcixtaW5vcikgICBNT0RVTEVfQUxJQVMoImJsb2NrLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItIiBfX3N0cmluZ2lmeShtaW5vcikpCisjZGVmaW5lIE1PRFVMRV9BTElBU19CTE9DS0RFVl9NQUpPUihtYWpvcikgICBNT0RVTEVfQUxJQVMoImJsb2NrLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItKiIpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa3BnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYmxrcGcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NWE0YTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsa3BnLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQkxLUEdfSAorI2RlZmluZSBfTElOVVhfQkxLUEdfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIEJMS1BHIF9JTygweDEyLDEwNSkKKworc3RydWN0IGJsa3BnX2lvY3RsX2FyZyB7CisgaW50IG9wOworIGludCBmbGFnczsKKyBpbnQgZGF0YWxlbjsKKyB2b2lkIF9fdXNlciAqZGF0YTsKK307CisKKyNkZWZpbmUgQkxLUEdfQUREX1BBUlRJVElPTiAxCisjZGVmaW5lIEJMS1BHX0RFTF9QQVJUSVRJT04gMgorCisjZGVmaW5lIEJMS1BHX0RFVk5BTUVMVEggNjQKKyNkZWZpbmUgQkxLUEdfVk9MTkFNRUxUSCA2NAorCitzdHJ1Y3QgYmxrcGdfcGFydGl0aW9uIHsKKyBsb25nIGxvbmcgc3RhcnQ7CisgbG9uZyBsb25nIGxlbmd0aDsKKyBpbnQgcG5vOworIGNoYXIgZGV2bmFtZVtCTEtQR19ERVZOQU1FTFRIXTsKKyBjaGFyIHZvbG5hbWVbQkxLUEdfVk9MTkFNRUxUSF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibG9ja2dyb3VwX2xvY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ibG9ja2dyb3VwX2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODE0MDIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Jsb2NrZ3JvdXBfbG9jay5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JMT0NLR1JPVVBfTE9DS19ICisjZGVmaW5lIF9MSU5VWF9CTE9DS0dST1VQX0xPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisjZGVmaW5lIE5SX0JHX0xPQ0tTIDEKKworc3RydWN0IGJnbF9sb2NrIHsKKyBzcGlubG9ja190IGxvY2s7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CisKK3N0cnVjdCBibG9ja2dyb3VwX2xvY2sgeworIHN0cnVjdCBiZ2xfbG9jayBsb2Nrc1tOUl9CR19MT0NLU107Cit9OworCisjZGVmaW5lIHNiX2JnbF9sb2NrKHNiLCBibG9ja19ncm91cCkgICAoJihzYiktPnNfYmxvY2tncm91cF9sb2NrLmxvY2tzWyhibG9ja19ncm91cCkgJiAoTlJfQkdfTE9DS1MtMSldLmxvY2spCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9iaWdfZW5kaWFuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWUwZDg4MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvYmlnX2VuZGlhbi5oCkBAIC0wLDAgKzEsNjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0gKKyNkZWZpbmUgX0xJTlVYX0JZVEVPUkRFUl9CSUdfRU5ESUFOX0gKKworI2lmbmRlZiBfX0JJR19FTkRJQU4KKyNkZWZpbmUgX19CSUdfRU5ESUFOIDQzMjEKKyNlbmRpZgorI2lmbmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyNkZWZpbmUgX19CSUdfRU5ESUFOX0JJVEZJRUxECisjZW5kaWYKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvYnl0ZW9yZGVyL3N3YWIuaD4KKworI2RlZmluZSBfX2NvbnN0YW50X2h0b25sKHgpICgoX19mb3JjZSBfX2JlMzIpKF9fdTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9udG9obCh4KSAoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfaHRvbnMoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hzKHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KV9fX2NvbnN0YW50X3N3YWI2NCgoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlNjRfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWI2NCgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlMzJfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX3UzMikoX19sZTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUxNih4KSAoKF9fZm9yY2UgX19sZTE2KV9fX2NvbnN0YW50X3N3YWIxNigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlMTZfdG9fY3B1KHgpIF9fX2NvbnN0YW50X3N3YWIxNigoX19mb3JjZSBfX3UxNikoX19sZTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fYmU2NCh4KSAoKF9fZm9yY2UgX19iZTY0KShfX3U2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfYmU2NF90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpKF9fdTMyKSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2JlMTZfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGU2NCh4KSAoKF9fZm9yY2UgX19sZTY0KV9fc3dhYjY0KCh4KSkpCisjZGVmaW5lIF9fbGU2NF90b19jcHUoeCkgX19zd2FiNjQoKF9fZm9yY2UgX191NjQpKF9fbGU2NCkoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlMzIoeCkgKChfX2ZvcmNlIF9fbGUzMilfX3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1KHgpIF9fc3dhYjMyKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpX19zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdSh4KSBfX3N3YWIxNigoX19mb3JjZSBfX3UxNikoX19sZTE2KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NCh4KSAoKF9fZm9yY2UgX19iZTY0KShfX3U2NCkoeCkpCisjZGVmaW5lIF9fYmU2NF90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpKF9fdTMyKSh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNikoX191MTYpKHgpKQorI2RlZmluZSBfX2JlMTZfdG9fY3B1KHgpICgoX19mb3JjZSBfX3UxNikoX19iZTE2KSh4KSkKKworI2RlZmluZSBfX2NwdV90b19sZTY0cyh4KSBfX3N3YWI2NHMoKHgpKQorI2RlZmluZSBfX2xlNjRfdG9fY3B1cyh4KSBfX3N3YWI2NHMoKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTMycyh4KSBfX3N3YWIzMnMoKHgpKQorI2RlZmluZSBfX2xlMzJfdG9fY3B1cyh4KSBfX3N3YWIzMnMoKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTE2cyh4KSBfX3N3YWIxNnMoKHgpKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBfX3N3YWIxNnMoKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTY0cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2JlMzJzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2JlMzJfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNnMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fYmUxNl90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9nZW5lcmljLmg+CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM0NjlmZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9HRU5FUklDX0gKKyNkZWZpbmUgX0xJTlVYX0JZVEVPUkRFUl9HRU5FUklDX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvbGl0dGxlX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjMjZlOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaApAQCAtMCwwICsxLDY3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfTElUVExFX0VORElBTl9ICisKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9fTElUVExFX0VORElBTiAxMjM0CisjZW5kaWYKKyNpZm5kZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisjZGVmaW5lIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorI2VuZGlmCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2J5dGVvcmRlci9zd2FiLmg+CisKKyNkZWZpbmUgX19jb25zdGFudF9odG9ubCh4KSAoKF9fZm9yY2UgX19iZTMyKV9fX2NvbnN0YW50X3N3YWIzMigoeCkpKQorI2RlZmluZSBfX2NvbnN0YW50X250b2hsKHgpIF9fX2NvbnN0YW50X3N3YWIzMigoX19mb3JjZSBfX2JlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2h0b25zKHgpICgoX19mb3JjZSBfX2JlMTYpX19fY29uc3RhbnRfc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fY29uc3RhbnRfbnRvaHMoeCkgX19fY29uc3RhbnRfc3dhYjE2KChfX2ZvcmNlIF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2xlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NvbnN0YW50X2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19jb25zdGFudF9sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NClfX19jb25zdGFudF9zd2FiNjQoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTY0X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiNjQoKF9fZm9yY2UgX191NjQpKF9fYmU2NCkoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMzIoeCkgKChfX2ZvcmNlIF9fYmUzMilfX19jb25zdGFudF9zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTMyX3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMzIoKF9fZm9yY2UgX191MzIpKF9fYmUzMikoeCkpCisjZGVmaW5lIF9fY29uc3RhbnRfY3B1X3RvX2JlMTYoeCkgKChfX2ZvcmNlIF9fYmUxNilfX19jb25zdGFudF9zd2FiMTYoKHgpKSkKKyNkZWZpbmUgX19jb25zdGFudF9iZTE2X3RvX2NwdSh4KSBfX19jb25zdGFudF9zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2xlNjQoeCkgKChfX2ZvcmNlIF9fbGU2NCkoX191NjQpKHgpKQorI2RlZmluZSBfX2xlNjRfdG9fY3B1KHgpICgoX19mb3JjZSBfX3U2NCkoX19sZTY0KSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fbGUzMih4KSAoKF9fZm9yY2UgX19sZTMyKShfX3UzMikoeCkpCisjZGVmaW5lIF9fbGUzMl90b19jcHUoeCkgKChfX2ZvcmNlIF9fdTMyKShfX2xlMzIpKHgpKQorI2RlZmluZSBfX2NwdV90b19sZTE2KHgpICgoX19mb3JjZSBfX2xlMTYpKF9fdTE2KSh4KSkKKyNkZWZpbmUgX19sZTE2X3RvX2NwdSh4KSAoKF9fZm9yY2UgX191MTYpKF9fbGUxNikoeCkpCisjZGVmaW5lIF9fY3B1X3RvX2JlNjQoeCkgKChfX2ZvcmNlIF9fYmU2NClfX3N3YWI2NCgoeCkpKQorI2RlZmluZSBfX2JlNjRfdG9fY3B1KHgpIF9fc3dhYjY0KChfX2ZvcmNlIF9fdTY0KShfX2JlNjQpKHgpKQorI2RlZmluZSBfX2NwdV90b19iZTMyKHgpICgoX19mb3JjZSBfX2JlMzIpX19zd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdSh4KSBfX3N3YWIzMigoX19mb3JjZSBfX3UzMikoX19iZTMyKSh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNih4KSAoKF9fZm9yY2UgX19iZTE2KV9fc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fYmUxNl90b19jcHUoeCkgX19zd2FiMTYoKF9fZm9yY2UgX191MTYpKF9fYmUxNikoeCkpCisKKyNkZWZpbmUgX19jcHVfdG9fbGU2NHMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fbGU2NF90b19jcHVzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2NwdV90b19sZTMycyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19sZTMyX3RvX2NwdXMoeCkgZG8ge30gd2hpbGUgKDApCisjZGVmaW5lIF9fY3B1X3RvX2xlMTZzKHgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBfX2xlMTZfdG9fY3B1cyh4KSBkbyB7fSB3aGlsZSAoMCkKKyNkZWZpbmUgX19jcHVfdG9fYmU2NHMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19iZTY0X3RvX2NwdXMoeCkgX19zd2FiNjRzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUzMnMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19iZTMyX3RvX2NwdXMoeCkgX19zd2FiMzJzKCh4KSkKKyNkZWZpbmUgX19jcHVfdG9fYmUxNnMoeCkgX19zd2FiMTZzKCh4KSkKKyNkZWZpbmUgX19iZTE2X3RvX2NwdXMoeCkgX19zd2FiMTZzKCh4KSkKKyNpbmNsdWRlIDxsaW51eC9ieXRlb3JkZXIvZ2VuZXJpYy5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzM2YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvYnl0ZW9yZGVyL3N3YWIuaApAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9CWVRFT1JERVJfU1dBQl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfU1dBQl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIF9fX3N3YWIxNih4KSAgKHsgICBfX3UxNiBfX3ggPSAoeCk7ICAgKChfX3UxNikoICAgKCgoX191MTYpKF9feCkgJiAoX191MTYpMHgwMGZmVSkgPDwgOCkgfCAgICgoKF9fdTE2KShfX3gpICYgKF9fdTE2KTB4ZmYwMFUpID4+IDgpICkpOyAgfSkKKworI2RlZmluZSBfX19zd2FiMzIoeCkgICh7ICAgX191MzIgX194ID0gKHgpOyAgICgoX191MzIpKCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAwMDAwVUwpID4+IDI0KSApKTsgIH0pCisKKyNkZWZpbmUgX19fc3dhYjY0KHgpICAoeyAgIF9fdTY0IF9feCA9ICh4KTsgICAoKF9fdTY0KSggICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZmVUxMKSA8PCA1NikgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwMDAwMGZmMDAwMFVMTCkgPDwgMjQpIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCA4KSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAgIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDBmZjAwMDAwMDAwMDBVTEwpID4+IDI0KSB8ICAgKF9fdTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgICAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSk7ICB9KQorCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIxNih4KSAgICgoX191MTYpKCAgICgoKF9fdTE2KSh4KSAmIChfX3UxNikweDAwZmZVKSA8PCA4KSB8ICAgKCgoX191MTYpKHgpICYgKF9fdTE2KTB4ZmYwMFUpID4+IDgpICkpCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWIzMih4KSAgICgoX191MzIpKCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwMDAwMGZmVUwpIDw8IDI0KSB8ICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDAwMGZmMDBVTCkgPDwgOCkgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweDAwZmYwMDAwVUwpID4+IDgpIHwgICAoKChfX3UzMikoeCkgJiAoX191MzIpMHhmZjAwMDAwMFVMKSA+PiAyNCkgKSkKKyNkZWZpbmUgX19fY29uc3RhbnRfc3dhYjY0KHgpICAgKChfX3U2NCkoICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8ICAgKF9fdTY0KSgoKF9fdTY0KSh4KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgICAoX191NjQpKCgoX191NjQpKHgpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+PiAyNCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAwVUxMKSA+PiA0MCkgfCAgIChfX3U2NCkoKChfX3U2NCkoeCkgJiAoX191NjQpMHhmZjAwMDAwMDAwMDAwMDAwVUxMKSA+PiA1NikgKSkKKworI2lmbmRlZiBfX2FyY2hfX3N3YWIxNgorI2RlZmluZSBfX2FyY2hfX3N3YWIxNih4KSAoeyBfX3UxNiBfX3RtcCA9ICh4KSA7IF9fX3N3YWIxNihfX3RtcCk7IH0pCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiMzIKKyNkZWZpbmUgX19hcmNoX19zd2FiMzIoeCkgKHsgX191MzIgX190bXAgPSAoeCkgOyBfX19zd2FiMzIoX190bXApOyB9KQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhYjY0CisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0KHgpICh7IF9fdTY0IF9fdG1wID0gKHgpIDsgX19fc3dhYjY0KF9fdG1wKTsgfSkKKyNlbmRpZgorCisjaWZuZGVmIF9fYXJjaF9fc3dhYjE2cAorI2RlZmluZSBfX2FyY2hfX3N3YWIxNnAoeCkgX19hcmNoX19zd2FiMTYoKih4KSkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWIzMnAKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJwKHgpIF9fYXJjaF9fc3dhYjMyKCooeCkpCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FiNjRwCisjZGVmaW5lIF9fYXJjaF9fc3dhYjY0cCh4KSBfX2FyY2hfX3N3YWI2NCgqKHgpKQorI2VuZGlmCisKKyNpZm5kZWYgX19hcmNoX19zd2FiMTZzCisjZGVmaW5lIF9fYXJjaF9fc3dhYjE2cyh4KSBkbyB7ICooeCkgPSBfX2FyY2hfX3N3YWIxNnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWIzMnMKKyNkZWZpbmUgX19hcmNoX19zd2FiMzJzKHgpIGRvIHsgKih4KSA9IF9fYXJjaF9fc3dhYjMycCgoeCkpOyB9IHdoaWxlICgwKQorI2VuZGlmCisjaWZuZGVmIF9fYXJjaF9fc3dhYjY0cworI2RlZmluZSBfX2FyY2hfX3N3YWI2NHMoeCkgZG8geyAqKHgpID0gX19hcmNoX19zd2FiNjRwKCh4KSk7IH0gd2hpbGUgKDApCisjZW5kaWYKKworI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19PUFRJTUlaRV9fKQorI2RlZmluZSBfX3N3YWIxNih4KSAgKF9fYnVpbHRpbl9jb25zdGFudF9wKChfX3UxNikoeCkpID8gICBfX19zd2FiMTYoKHgpKSA6ICAgX19mc3dhYjE2KCh4KSkpCisjZGVmaW5lIF9fc3dhYjMyKHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyAgIF9fX3N3YWIzMigoeCkpIDogICBfX2Zzd2FiMzIoKHgpKSkKKyNkZWZpbmUgX19zd2FiNjQoeCkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191NjQpKHgpKSA/ICAgX19fc3dhYjY0KCh4KSkgOiAgIF9fZnN3YWI2NCgoeCkpKQorI2Vsc2UKKyNkZWZpbmUgX19zd2FiMTYoeCkgX19mc3dhYjE2KHgpCisjZGVmaW5lIF9fc3dhYjMyKHgpIF9fZnN3YWIzMih4KQorI2RlZmluZSBfX3N3YWI2NCh4KSBfX2Zzd2FiNjQoeCkKKyNlbmRpZgorCisjaWZkZWYgX19CWVRFT1JERVJfSEFTX1U2NF9fCisjaWZkZWYgX19TV0FCXzY0X1RIUlVfMzJfXworI2Vsc2UKKyNlbmRpZgorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYmIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ieXRlb3JkZXIvc3dhYmIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI2YTNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2J5dGVvcmRlci9zd2FiYi5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0JZVEVPUkRFUl9TV0FCQl9ICisjZGVmaW5lIF9MSU5VWF9CWVRFT1JERVJfU1dBQkJfSAorCisjZGVmaW5lIF9fX3N3YWh3MzIoeCkgICh7ICAgX191MzIgX194ID0gKHgpOyAgICgoX191MzIpKCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMGZmZmZVTCkgPDwgMTYpIHwgICAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmZmYwMDAwVUwpID4+IDE2KSApKTsgIH0pCisjZGVmaW5lIF9fX3N3YWhiMzIoeCkgICh7ICAgX191MzIgX194ID0gKHgpOyAgICgoX191MzIpKCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDBmZjAwZmZVTCkgPDwgOCkgfCAgICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4ZmYwMGZmMDBVTCkgPj4gOCkgKSk7ICB9KQorCisjZGVmaW5lIF9fX2NvbnN0YW50X3N3YWh3MzIoeCkgICAoKF9fdTMyKSggICAoKChfX3UzMikoeCkgJiAoX191MzIpMHgwMDAwZmZmZlVMKSA8PCAxNikgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmZmYwMDAwVUwpID4+IDE2KSApKQorI2RlZmluZSBfX19jb25zdGFudF9zd2FoYjMyKHgpICAgKChfX3UzMikoICAgKCgoX191MzIpKHgpICYgKF9fdTMyKTB4MDBmZjAwZmZVTCkgPDwgOCkgfCAgICgoKF9fdTMyKSh4KSAmIChfX3UzMikweGZmMDBmZjAwVUwpID4+IDgpICkpCisKKyNpZm5kZWYgX19hcmNoX19zd2FodzMyCisjZGVmaW5lIF9fYXJjaF9fc3dhaHczMih4KSBfX19zd2FodzMyKHgpCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FoYjMyCisjZGVmaW5lIF9fYXJjaF9fc3dhaGIzMih4KSBfX19zd2FoYjMyKHgpCisjZW5kaWYKKworI2lmbmRlZiBfX2FyY2hfX3N3YWh3MzJwCisjZGVmaW5lIF9fYXJjaF9fc3dhaHczMnAoeCkgX19zd2FodzMyKCooeCkpCisjZW5kaWYKKyNpZm5kZWYgX19hcmNoX19zd2FoYjMycAorI2RlZmluZSBfX2FyY2hfX3N3YWhiMzJwKHgpIF9fc3dhaGIzMigqKHgpKQorI2VuZGlmCisKKyNpZm5kZWYgX19hcmNoX19zd2FodzMycworI2RlZmluZSBfX2FyY2hfX3N3YWh3MzJzKHgpIGRvIHsgKih4KSA9IF9fc3dhaHczMnAoKHgpKTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorI2lmbmRlZiBfX2FyY2hfX3N3YWhiMzJzCisjZGVmaW5lIF9fYXJjaF9fc3dhaGIzMnMoeCkgZG8geyAqKHgpID0gX19zd2FoYjMycCgoeCkpOyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiBkZWZpbmVkKF9fT1BUSU1JWkVfXykKKyNkZWZpbmUgX19zd2FodzMyKHgpICAoX19idWlsdGluX2NvbnN0YW50X3AoKF9fdTMyKSh4KSkgPyAgIF9fX3N3YWh3MzIoKHgpKSA6ICAgX19mc3dhaHczMigoeCkpKQorI2RlZmluZSBfX3N3YWhiMzIoeCkgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKHgpKSA/ICAgX19fc3dhaGIzMigoeCkpIDogICBfX2Zzd2FoYjMyKCh4KSkpCisjZWxzZQorI2RlZmluZSBfX3N3YWh3MzIoeCkgX19mc3dhaHczMih4KQorI2RlZmluZSBfX3N3YWhiMzIoeCkgX19mc3dhaGIzMih4KQorI2VuZGlmCisKKyNpZmRlZiBfX0JZVEVPUkRFUl9IQVNfVTY0X18KKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FjaGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQyODE4NTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FjaGUuaApAQCAtMCwwICsxLDU0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ0FDSEVfSAorI2RlZmluZSBfX0xJTlVYX0NBQ0hFX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9jYWNoZS5oPgorCisjaWZuZGVmIEwxX0NBQ0hFX0FMSUdOCisjZGVmaW5lIEwxX0NBQ0hFX0FMSUdOKHgpIEFMSUdOKHgsIEwxX0NBQ0hFX0JZVEVTKQorI2VuZGlmCisKKyNpZm5kZWYgU01QX0NBQ0hFX0JZVEVTCisjZGVmaW5lIFNNUF9DQUNIRV9CWVRFUyBMMV9DQUNIRV9CWVRFUworI2VuZGlmCisKKyNpZm5kZWYgX19yZWFkX21vc3RseQorI2RlZmluZSBfX3JlYWRfbW9zdGx5CisjZW5kaWYKKworI2lmbmRlZiBfX19fY2FjaGVsaW5lX2FsaWduZWQKKyNkZWZpbmUgX19fX2NhY2hlbGluZV9hbGlnbmVkIF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKFNNUF9DQUNIRV9CWVRFUykpKQorI2VuZGlmCisKKyNpZm5kZWYgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcAorI2RlZmluZSBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCisjZW5kaWYKKworI2lmbmRlZiBfX2NhY2hlbGluZV9hbGlnbmVkCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWQgICBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXyhTTVBfQ0FDSEVfQllURVMpLCAgIF9fc2VjdGlvbl9fKCIuZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCIpKSkKKyNlbmRpZgorCisjaWZuZGVmIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCisjZGVmaW5lIF9fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wCisjZW5kaWYKKworI2lmbmRlZiBJTlRFUk5PREVfQ0FDSEVfU0hJRlQKKyNkZWZpbmUgSU5URVJOT0RFX0NBQ0hFX1NISUZUIEwxX0NBQ0hFX1NISUZUCisjZW5kaWYKKworI2lmbmRlZiBfX19fY2FjaGVsaW5lX2ludGVybm9kZWFsaWduZWRfaW5fc21wCisjZGVmaW5lIF9fX19jYWNoZWxpbmVfaW50ZXJub2RlYWxpZ25lZF9pbl9zbXAKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWxjNjQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYWxjNjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZjcyNmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhbGM2NC5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NBTEM2NF9ICisjZGVmaW5lIF9MSU5VWF9DQUxDNjRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vZGl2NjQuaD4KKworI2lmbmRlZiBkaXZfbG9uZ19sb25nX3JlbQorI2RlZmluZSBkaXZfbG9uZ19sb25nX3JlbShkaXZpZGVuZCwgZGl2aXNvciwgcmVtYWluZGVyKSAgIGRvX2Rpdl9sbHIoKGRpdmlkZW5kKSwgZGl2aXNvciwgcmVtYWluZGVyKQorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGFiaWxpdHkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBhYmlsaXR5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjA1YmMyNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jYXBhYmlsaXR5LmgKQEAgLTAsMCArMSw5NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ0FQQUJJTElUWV9ICisjZGVmaW5lIF9MSU5VWF9DQVBBQklMSVRZX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBfTElOVVhfQ0FQQUJJTElUWV9WRVJTSU9OIDB4MTk5ODAzMzAKKwordHlwZWRlZiBzdHJ1Y3QgX191c2VyX2NhcF9oZWFkZXJfc3RydWN0IHsKKyBfX3UzMiB2ZXJzaW9uOworIGludCBwaWQ7Cit9IF9fdXNlciAqY2FwX3VzZXJfaGVhZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgeworIF9fdTMyIGVmZmVjdGl2ZTsKKyBfX3UzMiBwZXJtaXR0ZWQ7CisgX191MzIgaW5oZXJpdGFibGU7Cit9IF9fdXNlciAqY2FwX3VzZXJfZGF0YV90OworCisjZGVmaW5lIENBUF9DSE9XTiAwCisKKyNkZWZpbmUgQ0FQX0RBQ19PVkVSUklERSAxCisKKyNkZWZpbmUgQ0FQX0RBQ19SRUFEX1NFQVJDSCAyCisKKyNkZWZpbmUgQ0FQX0ZPV05FUiAzCisKKyNkZWZpbmUgQ0FQX0ZTRVRJRCA0CisKKyNkZWZpbmUgQ0FQX0ZTX01BU0sgMHgxZgorCisjZGVmaW5lIENBUF9LSUxMIDUKKworI2RlZmluZSBDQVBfU0VUR0lEIDYKKworI2RlZmluZSBDQVBfU0VUVUlEIDcKKworI2RlZmluZSBDQVBfU0VUUENBUCA4CisKKyNkZWZpbmUgQ0FQX0xJTlVYX0lNTVVUQUJMRSA5CisKKyNkZWZpbmUgQ0FQX05FVF9CSU5EX1NFUlZJQ0UgMTAKKworI2RlZmluZSBDQVBfTkVUX0JST0FEQ0FTVCAxMQorCisjZGVmaW5lIENBUF9ORVRfQURNSU4gMTIKKworI2RlZmluZSBDQVBfTkVUX1JBVyAxMworCisjZGVmaW5lIENBUF9JUENfTE9DSyAxNAorCisjZGVmaW5lIENBUF9JUENfT1dORVIgMTUKKworI2RlZmluZSBDQVBfU1lTX01PRFVMRSAxNgorCisjZGVmaW5lIENBUF9TWVNfUkFXSU8gMTcKKworI2RlZmluZSBDQVBfU1lTX0NIUk9PVCAxOAorCisjZGVmaW5lIENBUF9TWVNfUFRSQUNFIDE5CisKKyNkZWZpbmUgQ0FQX1NZU19QQUNDVCAyMAorCisjZGVmaW5lIENBUF9TWVNfQURNSU4gMjEKKworI2RlZmluZSBDQVBfU1lTX0JPT1QgMjIKKworI2RlZmluZSBDQVBfU1lTX05JQ0UgMjMKKworI2RlZmluZSBDQVBfU1lTX1JFU09VUkNFIDI0CisKKyNkZWZpbmUgQ0FQX1NZU19USU1FIDI1CisKKyNkZWZpbmUgQ0FQX1NZU19UVFlfQ09ORklHIDI2CisKKyNkZWZpbmUgQ0FQX01LTk9EIDI3CisKKyNkZWZpbmUgQ0FQX0xFQVNFIDI4CisKKyNkZWZpbmUgQ0FQX0FVRElUX1dSSVRFIDI5CisKKyNkZWZpbmUgQ0FQX0FVRElUX0NPTlRST0wgMzAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2FwaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTkxY2Y2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NhcGkuaApAQCAtMCwwICsxLDg4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ0FQSV9IX18KKyNkZWZpbmUgX19MSU5VWF9DQVBJX0hfXworCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxjYXBpLmg+CisKK3R5cGVkZWYgc3RydWN0IGNhcGlfcmVnaXN0ZXJfcGFyYW1zIHsKKyBfX3UzMiBsZXZlbDNjbnQ7CisgX191MzIgZGF0YWJsa2NudDsKKyBfX3UzMiBkYXRhYmxrbGVuOworfSBjYXBpX3JlZ2lzdGVyX3BhcmFtczsKKworI2RlZmluZSBDQVBJX1JFR0lTVEVSIF9JT1coJ0MnLDB4MDEsc3RydWN0IGNhcGlfcmVnaXN0ZXJfcGFyYW1zKQorCisjZGVmaW5lIENBUElfTUFOVUZBQ1RVUkVSX0xFTiA2NAorCisjZGVmaW5lIENBUElfR0VUX01BTlVGQUNUVVJFUiBfSU9XUignQycsMHgwNixpbnQpICAKKwordHlwZWRlZiBzdHJ1Y3QgY2FwaV92ZXJzaW9uIHsKKyBfX3UzMiBtYWpvcnZlcnNpb247CisgX191MzIgbWlub3J2ZXJzaW9uOworIF9fdTMyIG1ham9ybWFudXZlcnNpb247CisgX191MzIgbWlub3JtYW51dmVyc2lvbjsKK30gY2FwaV92ZXJzaW9uOworCisjZGVmaW5lIENBUElfR0VUX1ZFUlNJT04gX0lPV1IoJ0MnLDB4MDcsc3RydWN0IGNhcGlfdmVyc2lvbikKKworI2RlZmluZSBDQVBJX1NFUklBTF9MRU4gOAorI2RlZmluZSBDQVBJX0dFVF9TRVJJQUwgX0lPV1IoJ0MnLDB4MDgsaW50KSAgCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfcHJvZmlsZSB7CisgX191MTYgbmNvbnRyb2xsZXI7CisgX191MTYgbmJjaGFubmVsOworIF9fdTMyIGdvcHRpb25zOworIF9fdTMyIHN1cHBvcnQxOworIF9fdTMyIHN1cHBvcnQyOworIF9fdTMyIHN1cHBvcnQzOworIF9fdTMyIHJlc2VydmVkWzZdOworIF9fdTMyIG1hbnVbNV07Cit9IGNhcGlfcHJvZmlsZTsKKworI2RlZmluZSBDQVBJX0dFVF9QUk9GSUxFIF9JT1dSKCdDJywweDA5LHN0cnVjdCBjYXBpX3Byb2ZpbGUpCisKK3R5cGVkZWYgc3RydWN0IGNhcGlfbWFudWZhY3R1cmVyX2NtZCB7CisgdW5zaWduZWQgbG9uZyBjbWQ7Cisgdm9pZCBfX3VzZXIgKmRhdGE7Cit9IGNhcGlfbWFudWZhY3R1cmVyX2NtZDsKKworI2RlZmluZSBDQVBJX01BTlVGQUNUVVJFUl9DTUQgX0lPV1IoJ0MnLDB4MjAsIHN0cnVjdCBjYXBpX21hbnVmYWN0dXJlcl9jbWQpCisKKyNkZWZpbmUgQ0FQSV9HRVRfRVJSQ09ERSBfSU9SKCdDJywweDIxLCBfX3UxNikKKworI2RlZmluZSBDQVBJX0lOU1RBTExFRCBfSU9SKCdDJywweDIyLCBfX3UxNikKKwordHlwZWRlZiB1bmlvbiBjYXBpX2lvY3RsX3N0cnVjdCB7CisgX191MzIgY29udHI7CisgY2FwaV9yZWdpc3Rlcl9wYXJhbXMgcnBhcmFtczsKKyBfX3U4IG1hbnVmYWN0dXJlcltDQVBJX01BTlVGQUNUVVJFUl9MRU5dOworIGNhcGlfdmVyc2lvbiB2ZXJzaW9uOworIF9fdTggc2VyaWFsW0NBUElfU0VSSUFMX0xFTl07CisgY2FwaV9wcm9maWxlIHByb2ZpbGU7CisgY2FwaV9tYW51ZmFjdHVyZXJfY21kIGNtZDsKKyBfX3UxNiBlcnJjb2RlOworfSBjYXBpX2lvY3RsX3N0cnVjdDsKKworI2RlZmluZSBDQVBJRkxBR19ISUdISkFDS0lORyAweDAwMDEKKworI2RlZmluZSBDQVBJX0dFVF9GTEFHUyBfSU9SKCdDJywweDIzLCB1bnNpZ25lZCkKKyNkZWZpbmUgQ0FQSV9TRVRfRkxBR1MgX0lPUignQycsMHgyNCwgdW5zaWduZWQpCisjZGVmaW5lIENBUElfQ0xSX0ZMQUdTIF9JT1IoJ0MnLDB4MjUsIHVuc2lnbmVkKQorCisjZGVmaW5lIENBUElfTkNDSV9PUEVOQ09VTlQgX0lPUignQycsMHgyNiwgdW5zaWduZWQpCisKKyNkZWZpbmUgQ0FQSV9OQ0NJX0dFVFVOSVQgX0lPUignQycsMHgyNywgdW5zaWduZWQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2E3MWM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jZGV2LmgKQEAgLTAsMCArMSwxNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ0RFVl9ICisjZGVmaW5lIF9MSU5VWF9DREVWX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2Ryb20uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYzcwYzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Nkcm9tLmgKQEAgLTAsMCArMSw3MTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NEUk9NX0gKKyNkZWZpbmUgX0xJTlVYX0NEUk9NX0gKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworI2RlZmluZSBFRFJJVkVfQ0FOVF9ET19USElTIEVPUE5PVFNVUFAKKworI2RlZmluZSBDRFJPTVBBVVNFIDB4NTMwMSAgIAorI2RlZmluZSBDRFJPTVJFU1VNRSAweDUzMDIgIAorI2RlZmluZSBDRFJPTVBMQVlNU0YgMHg1MzAzICAKKyNkZWZpbmUgQ0RST01QTEFZVFJLSU5EIDB4NTMwNCAgCisjZGVmaW5lIENEUk9NUkVBRFRPQ0hEUiAweDUzMDUgIAorI2RlZmluZSBDRFJPTVJFQURUT0NFTlRSWSAweDUzMDYgIAorI2RlZmluZSBDRFJPTVNUT1AgMHg1MzA3ICAKKyNkZWZpbmUgQ0RST01TVEFSVCAweDUzMDggIAorI2RlZmluZSBDRFJPTUVKRUNUIDB4NTMwOSAgCisjZGVmaW5lIENEUk9NVk9MQ1RSTCAweDUzMGEgIAorI2RlZmluZSBDRFJPTVNVQkNITkwgMHg1MzBiICAKKyNkZWZpbmUgQ0RST01SRUFETU9ERTIgMHg1MzBjICAKKyNkZWZpbmUgQ0RST01SRUFETU9ERTEgMHg1MzBkICAKKyNkZWZpbmUgQ0RST01SRUFEQVVESU8gMHg1MzBlICAKKyNkZWZpbmUgQ0RST01FSkVDVF9TVyAweDUzMGYgIAorI2RlZmluZSBDRFJPTU1VTFRJU0VTU0lPTiAweDUzMTAgIAorI2RlZmluZSBDRFJPTV9HRVRfTUNOIDB4NTMxMSAgCisjZGVmaW5lIENEUk9NX0dFVF9VUEMgQ0RST01fR0VUX01DTiAgCisjZGVmaW5lIENEUk9NUkVTRVQgMHg1MzEyICAKKyNkZWZpbmUgQ0RST01WT0xSRUFEIDB4NTMxMyAgCisjZGVmaW5lIENEUk9NUkVBRFJBVyAweDUzMTQgIAorCisjZGVmaW5lIENEUk9NUkVBRENPT0tFRCAweDUzMTUgIAorI2RlZmluZSBDRFJPTVNFRUsgMHg1MzE2ICAKKworI2RlZmluZSBDRFJPTVBMQVlCTEsgMHg1MzE3ICAKKworI2RlZmluZSBDRFJPTVJFQURBTEwgMHg1MzE4ICAKKworI2RlZmluZSBDRFJPTUdFVFNQSU5ET1dOIDB4NTMxZAorI2RlZmluZSBDRFJPTVNFVFNQSU5ET1dOIDB4NTMxZQorCisjZGVmaW5lIENEUk9NQ0xPU0VUUkFZIDB4NTMxOSAgCisjZGVmaW5lIENEUk9NX1NFVF9PUFRJT05TIDB4NTMyMCAgCisjZGVmaW5lIENEUk9NX0NMRUFSX09QVElPTlMgMHg1MzIxICAKKyNkZWZpbmUgQ0RST01fU0VMRUNUX1NQRUVEIDB4NTMyMiAgCisjZGVmaW5lIENEUk9NX1NFTEVDVF9ESVNDIDB4NTMyMyAgCisjZGVmaW5lIENEUk9NX01FRElBX0NIQU5HRUQgMHg1MzI1ICAKKyNkZWZpbmUgQ0RST01fRFJJVkVfU1RBVFVTIDB4NTMyNiAgCisjZGVmaW5lIENEUk9NX0RJU0NfU1RBVFVTIDB4NTMyNyAgCisjZGVmaW5lIENEUk9NX0NIQU5HRVJfTlNMT1RTIDB4NTMyOCAgCisjZGVmaW5lIENEUk9NX0xPQ0tET09SIDB4NTMyOSAgCisjZGVmaW5lIENEUk9NX0RFQlVHIDB4NTMzMCAgCisjZGVmaW5lIENEUk9NX0dFVF9DQVBBQklMSVRZIDB4NTMzMSAgCisKKyNkZWZpbmUgQ0RST01BVURJT0JVRlNJWiAweDUzODIgIAorCisjZGVmaW5lIERWRF9SRUFEX1NUUlVDVCAweDUzOTAgIAorI2RlZmluZSBEVkRfV1JJVEVfU1RSVUNUIDB4NTM5MSAgCisjZGVmaW5lIERWRF9BVVRIIDB4NTM5MiAgCisKKyNkZWZpbmUgQ0RST01fU0VORF9QQUNLRVQgMHg1MzkzICAKKyNkZWZpbmUgQ0RST01fTkVYVF9XUklUQUJMRSAweDUzOTQgIAorI2RlZmluZSBDRFJPTV9MQVNUX1dSSVRURU4gMHg1Mzk1ICAKKworc3RydWN0IGNkcm9tX21zZjAKK3sKKyBfX3U4IG1pbnV0ZTsKKyBfX3U4IHNlY29uZDsKKyBfX3U4IGZyYW1lOworfTsKKwordW5pb24gY2Ryb21fYWRkcgoreworIHN0cnVjdCBjZHJvbV9tc2YwIG1zZjsKKyBpbnQgbGJhOworfTsKKworc3RydWN0IGNkcm9tX21zZgoreworIF9fdTggY2Rtc2ZfbWluMDsKKyBfX3U4IGNkbXNmX3NlYzA7CisgX191OCBjZG1zZl9mcmFtZTA7CisgX191OCBjZG1zZl9taW4xOworIF9fdTggY2Rtc2Zfc2VjMTsKKyBfX3U4IGNkbXNmX2ZyYW1lMTsKK307CisKK3N0cnVjdCBjZHJvbV90aQoreworIF9fdTggY2R0aV90cmswOworIF9fdTggY2R0aV9pbmQwOworIF9fdTggY2R0aV90cmsxOworIF9fdTggY2R0aV9pbmQxOworfTsKKworc3RydWN0IGNkcm9tX3RvY2hkcgoreworIF9fdTggY2R0aF90cmswOworIF9fdTggY2R0aF90cmsxOworfTsKKworc3RydWN0IGNkcm9tX3ZvbGN0cmwKK3sKKyBfX3U4IGNoYW5uZWwwOworIF9fdTggY2hhbm5lbDE7CisgX191OCBjaGFubmVsMjsKKyBfX3U4IGNoYW5uZWwzOworfTsKKworc3RydWN0IGNkcm9tX3N1YmNobmwKK3sKKyBfX3U4IGNkc2NfZm9ybWF0OworIF9fdTggY2RzY19hdWRpb3N0YXR1czsKKyBfX3U4IGNkc2NfYWRyOiA0OworIF9fdTggY2RzY19jdHJsOiA0OworIF9fdTggY2RzY190cms7CisgX191OCBjZHNjX2luZDsKKyB1bmlvbiBjZHJvbV9hZGRyIGNkc2NfYWJzYWRkcjsKKyB1bmlvbiBjZHJvbV9hZGRyIGNkc2NfcmVsYWRkcjsKK307CisKK3N0cnVjdCBjZHJvbV90b2NlbnRyeQoreworIF9fdTggY2R0ZV90cmFjazsKKyBfX3U4IGNkdGVfYWRyIDo0OworIF9fdTggY2R0ZV9jdHJsIDo0OworIF9fdTggY2R0ZV9mb3JtYXQ7CisgdW5pb24gY2Ryb21fYWRkciBjZHRlX2FkZHI7CisgX191OCBjZHRlX2RhdGFtb2RlOworfTsKKworc3RydWN0IGNkcm9tX3JlYWQKK3sKKyBpbnQgY2RyZWFkX2xiYTsKKyBjaGFyICpjZHJlYWRfYnVmYWRkcjsKKyBpbnQgY2RyZWFkX2J1ZmxlbjsKK307CisKK3N0cnVjdCBjZHJvbV9yZWFkX2F1ZGlvCit7CisgdW5pb24gY2Ryb21fYWRkciBhZGRyOworIF9fdTggYWRkcl9mb3JtYXQ7CisgaW50IG5mcmFtZXM7CisgX191OCBfX3VzZXIgKmJ1ZjsKK307CisKK3N0cnVjdCBjZHJvbV9tdWx0aXNlc3Npb24KK3sKKyB1bmlvbiBjZHJvbV9hZGRyIGFkZHI7CisgX191OCB4YV9mbGFnOworIF9fdTggYWRkcl9mb3JtYXQ7Cit9OworCitzdHJ1Y3QgY2Ryb21fbWNuCit7CisgX191OCBtZWRpdW1fY2F0YWxvZ19udW1iZXJbMTRdOworfTsKKworc3RydWN0IGNkcm9tX2JsaworeworIHVuc2lnbmVkIGZyb207CisgdW5zaWduZWQgc2hvcnQgbGVuOworfTsKKworI2RlZmluZSBDRFJPTV9QQUNLRVRfU0laRSAxMgorCisjZGVmaW5lIENHQ19EQVRBX1VOS05PV04gMAorI2RlZmluZSBDR0NfREFUQV9XUklURSAxCisjZGVmaW5lIENHQ19EQVRBX1JFQUQgMgorI2RlZmluZSBDR0NfREFUQV9OT05FIDMKKworc3RydWN0IGNkcm9tX2dlbmVyaWNfY29tbWFuZAoreworIHVuc2lnbmVkIGNoYXIgY21kW0NEUk9NX1BBQ0tFVF9TSVpFXTsKKyB1bnNpZ25lZCBjaGFyIF9fdXNlciAqYnVmZmVyOworIHVuc2lnbmVkIGludCBidWZsZW47CisgaW50IHN0YXQ7Cisgc3RydWN0IHJlcXVlc3Rfc2Vuc2UgX191c2VyICpzZW5zZTsKKyB1bnNpZ25lZCBjaGFyIGRhdGFfZGlyZWN0aW9uOworIGludCBxdWlldDsKKyBpbnQgdGltZW91dDsKKyB2b2lkIF9fdXNlciAqcmVzZXJ2ZWRbMV07Cit9OworCisjZGVmaW5lIENEX01JTlMgNzQgIAorI2RlZmluZSBDRF9TRUNTIDYwICAKKyNkZWZpbmUgQ0RfRlJBTUVTIDc1ICAKKyNkZWZpbmUgQ0RfU1lOQ19TSVpFIDEyICAKKyNkZWZpbmUgQ0RfTVNGX09GRlNFVCAxNTAgIAorI2RlZmluZSBDRF9DSFVOS19TSVpFIDI0ICAKKyNkZWZpbmUgQ0RfTlVNX09GX0NIVU5LUyA5OCAgCisjZGVmaW5lIENEX0ZSQU1FU0laRV9TVUIgOTYgIAorI2RlZmluZSBDRF9IRUFEX1NJWkUgNCAgCisjZGVmaW5lIENEX1NVQkhFQURfU0laRSA4ICAKKyNkZWZpbmUgQ0RfRURDX1NJWkUgNCAgCisjZGVmaW5lIENEX1pFUk9fU0laRSA4ICAKKyNkZWZpbmUgQ0RfRUNDX1NJWkUgMjc2ICAKKyNkZWZpbmUgQ0RfRlJBTUVTSVpFIDIwNDggIAorI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXIDIzNTIgIAorI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXRVIgMjY0NiAgIAorCisjZGVmaW5lIENEX0ZSQU1FU0laRV9SQVcxIChDRF9GUkFNRVNJWkVfUkFXLUNEX1NZTkNfU0laRSkgIAorI2RlZmluZSBDRF9GUkFNRVNJWkVfUkFXMCAoQ0RfRlJBTUVTSVpFX1JBVy1DRF9TWU5DX1NJWkUtQ0RfSEVBRF9TSVpFKSAgCisKKyNkZWZpbmUgQ0RfWEFfSEVBRCAoQ0RfSEVBRF9TSVpFK0NEX1NVQkhFQURfU0laRSkgIAorI2RlZmluZSBDRF9YQV9UQUlMIChDRF9FRENfU0laRStDRF9FQ0NfU0laRSkgIAorI2RlZmluZSBDRF9YQV9TWU5DX0hFQUQgKENEX1NZTkNfU0laRStDRF9YQV9IRUFEKSAgCisKKyNkZWZpbmUgQ0RST01fTEJBIDB4MDEgIAorI2RlZmluZSBDRFJPTV9NU0YgMHgwMiAgCisKKyNkZWZpbmUgQ0RST01fREFUQV9UUkFDSyAweDA0CisKKyNkZWZpbmUgQ0RST01fTEVBRE9VVCAweEFBCisKKyNkZWZpbmUgQ0RST01fQVVESU9fSU5WQUxJRCAweDAwICAKKyNkZWZpbmUgQ0RST01fQVVESU9fUExBWSAweDExICAKKyNkZWZpbmUgQ0RST01fQVVESU9fUEFVU0VEIDB4MTIgIAorI2RlZmluZSBDRFJPTV9BVURJT19DT01QTEVURUQgMHgxMyAgCisjZGVmaW5lIENEUk9NX0FVRElPX0VSUk9SIDB4MTQgIAorI2RlZmluZSBDRFJPTV9BVURJT19OT19TVEFUVVMgMHgxNSAgCisKKyNkZWZpbmUgQ0RDX0NMT1NFX1RSQVkgMHgxICAKKyNkZWZpbmUgQ0RDX09QRU5fVFJBWSAweDIgIAorI2RlZmluZSBDRENfTE9DSyAweDQgIAorI2RlZmluZSBDRENfU0VMRUNUX1NQRUVEIDB4OCAgCisjZGVmaW5lIENEQ19TRUxFQ1RfRElTQyAweDEwICAKKyNkZWZpbmUgQ0RDX01VTFRJX1NFU1NJT04gMHgyMCAgCisjZGVmaW5lIENEQ19NQ04gMHg0MCAgCisjZGVmaW5lIENEQ19NRURJQV9DSEFOR0VEIDB4ODAgIAorI2RlZmluZSBDRENfUExBWV9BVURJTyAweDEwMCAgCisjZGVmaW5lIENEQ19SRVNFVCAweDIwMCAgCisjZGVmaW5lIENEQ19EUklWRV9TVEFUVVMgMHg4MDAgIAorI2RlZmluZSBDRENfR0VORVJJQ19QQUNLRVQgMHgxMDAwICAKKyNkZWZpbmUgQ0RDX0NEX1IgMHgyMDAwICAKKyNkZWZpbmUgQ0RDX0NEX1JXIDB4NDAwMCAgCisjZGVmaW5lIENEQ19EVkQgMHg4MDAwICAKKyNkZWZpbmUgQ0RDX0RWRF9SIDB4MTAwMDAgIAorI2RlZmluZSBDRENfRFZEX1JBTSAweDIwMDAwICAKKyNkZWZpbmUgQ0RDX01PX0RSSVZFIDB4NDAwMDAgIAorI2RlZmluZSBDRENfTVJXIDB4ODAwMDAgIAorI2RlZmluZSBDRENfTVJXX1cgMHgxMDAwMDAgIAorI2RlZmluZSBDRENfUkFNIDB4MjAwMDAwICAKKworI2RlZmluZSBDRFNfTk9fSU5GTyAwICAKKyNkZWZpbmUgQ0RTX05PX0RJU0MgMQorI2RlZmluZSBDRFNfVFJBWV9PUEVOIDIKKyNkZWZpbmUgQ0RTX0RSSVZFX05PVF9SRUFEWSAzCisjZGVmaW5lIENEU19ESVNDX09LIDQKKworI2RlZmluZSBDRFNfQVVESU8gMTAwCisjZGVmaW5lIENEU19EQVRBXzEgMTAxCisjZGVmaW5lIENEU19EQVRBXzIgMTAyCisjZGVmaW5lIENEU19YQV8yXzEgMTAzCisjZGVmaW5lIENEU19YQV8yXzIgMTA0CisjZGVmaW5lIENEU19NSVhFRCAxMDUKKworI2RlZmluZSBDRE9fQVVUT19DTE9TRSAweDEgIAorI2RlZmluZSBDRE9fQVVUT19FSkVDVCAweDIgIAorI2RlZmluZSBDRE9fVVNFX0ZGTEFHUyAweDQgIAorI2RlZmluZSBDRE9fTE9DSyAweDggIAorI2RlZmluZSBDRE9fQ0hFQ0tfVFlQRSAweDEwICAKKworI2RlZmluZSBDRFNMX05PTkUgKChpbnQpICh+MFU+PjEpLTEpCisjZGVmaW5lIENEU0xfQ1VSUkVOVCAoKGludCkgKH4wVT4+MSkpCisKKyNkZWZpbmUgQ0RfUEFSVF9NQVggNjQKKyNkZWZpbmUgQ0RfUEFSVF9NQVNLIChDRF9QQVJUX01BWCAtIDEpCisKKyNkZWZpbmUgR1BDTURfQkxBTksgMHhhMQorI2RlZmluZSBHUENNRF9DTE9TRV9UUkFDSyAweDViCisjZGVmaW5lIEdQQ01EX0ZMVVNIX0NBQ0hFIDB4MzUKKyNkZWZpbmUgR1BDTURfRk9STUFUX1VOSVQgMHgwNAorI2RlZmluZSBHUENNRF9HRVRfQ09ORklHVVJBVElPTiAweDQ2CisjZGVmaW5lIEdQQ01EX0dFVF9FVkVOVF9TVEFUVVNfTk9USUZJQ0FUSU9OIDB4NGEKKyNkZWZpbmUgR1BDTURfR0VUX1BFUkZPUk1BTkNFIDB4YWMKKyNkZWZpbmUgR1BDTURfSU5RVUlSWSAweDEyCisjZGVmaW5lIEdQQ01EX0xPQURfVU5MT0FEIDB4YTYKKyNkZWZpbmUgR1BDTURfTUVDSEFOSVNNX1NUQVRVUyAweGJkCisjZGVmaW5lIEdQQ01EX01PREVfU0VMRUNUXzEwIDB4NTUKKyNkZWZpbmUgR1BDTURfTU9ERV9TRU5TRV8xMCAweDVhCisjZGVmaW5lIEdQQ01EX1BBVVNFX1JFU1VNRSAweDRiCisjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fMTAgMHg0NQorI2RlZmluZSBHUENNRF9QTEFZX0FVRElPX01TRiAweDQ3CisjZGVmaW5lIEdQQ01EX1BMQVlfQVVESU9fVEkgMHg0OAorI2RlZmluZSBHUENNRF9QTEFZX0NEIDB4YmMKKyNkZWZpbmUgR1BDTURfUFJFVkVOVF9BTExPV19NRURJVU1fUkVNT1ZBTCAweDFlCisjZGVmaW5lIEdQQ01EX1JFQURfMTAgMHgyOAorI2RlZmluZSBHUENNRF9SRUFEXzEyIDB4YTgKKyNkZWZpbmUgR1BDTURfUkVBRF9CVUZGRVJfQ0FQQUNJVFkgMHg1YworI2RlZmluZSBHUENNRF9SRUFEX0NEVkRfQ0FQQUNJVFkgMHgyNQorI2RlZmluZSBHUENNRF9SRUFEX0NEIDB4YmUKKyNkZWZpbmUgR1BDTURfUkVBRF9DRF9NU0YgMHhiOQorI2RlZmluZSBHUENNRF9SRUFEX0RJU0NfSU5GTyAweDUxCisjZGVmaW5lIEdQQ01EX1JFQURfRFZEX1NUUlVDVFVSRSAweGFkCisjZGVmaW5lIEdQQ01EX1JFQURfRk9STUFUX0NBUEFDSVRJRVMgMHgyMworI2RlZmluZSBHUENNRF9SRUFEX0hFQURFUiAweDQ0CisjZGVmaW5lIEdQQ01EX1JFQURfVFJBQ0tfUlpPTkVfSU5GTyAweDUyCisjZGVmaW5lIEdQQ01EX1JFQURfU1VCQ0hBTk5FTCAweDQyCisjZGVmaW5lIEdQQ01EX1JFQURfVE9DX1BNQV9BVElQIDB4NDMKKyNkZWZpbmUgR1BDTURfUkVQQUlSX1JaT05FX1RSQUNLIDB4NTgKKyNkZWZpbmUgR1BDTURfUkVQT1JUX0tFWSAweGE0CisjZGVmaW5lIEdQQ01EX1JFUVVFU1RfU0VOU0UgMHgwMworI2RlZmluZSBHUENNRF9SRVNFUlZFX1JaT05FX1RSQUNLIDB4NTMKKyNkZWZpbmUgR1BDTURfU0VORF9DVUVfU0hFRVQgMHg1ZAorI2RlZmluZSBHUENNRF9TQ0FOIDB4YmEKKyNkZWZpbmUgR1BDTURfU0VFSyAweDJiCisjZGVmaW5lIEdQQ01EX1NFTkRfRFZEX1NUUlVDVFVSRSAweGJmCisjZGVmaW5lIEdQQ01EX1NFTkRfRVZFTlQgMHhhMgorI2RlZmluZSBHUENNRF9TRU5EX0tFWSAweGEzCisjZGVmaW5lIEdQQ01EX1NFTkRfT1BDIDB4NTQKKyNkZWZpbmUgR1BDTURfU0VUX1JFQURfQUhFQUQgMHhhNworI2RlZmluZSBHUENNRF9TRVRfU1RSRUFNSU5HIDB4YjYKKyNkZWZpbmUgR1BDTURfU1RBUlRfU1RPUF9VTklUIDB4MWIKKyNkZWZpbmUgR1BDTURfU1RPUF9QTEFZX1NDQU4gMHg0ZQorI2RlZmluZSBHUENNRF9URVNUX1VOSVRfUkVBRFkgMHgwMAorI2RlZmluZSBHUENNRF9WRVJJRllfMTAgMHgyZgorI2RlZmluZSBHUENNRF9XUklURV8xMCAweDJhCisjZGVmaW5lIEdQQ01EX1dSSVRFX0FORF9WRVJJRllfMTAgMHgyZQorCisjZGVmaW5lIEdQQ01EX1NFVF9TUEVFRCAweGJiCisKKyNkZWZpbmUgR1BDTURfUExBWUFVRElPX1RJIDB4NDgKKworI2RlZmluZSBHUENNRF9HRVRfTUVESUFfU1RBVFVTIDB4ZGEKKworI2RlZmluZSBHUE1PREVfVkVORE9SX1BBR0UgMHgwMAorI2RlZmluZSBHUE1PREVfUl9XX0VSUk9SX1BBR0UgMHgwMQorI2RlZmluZSBHUE1PREVfV1JJVEVfUEFSTVNfUEFHRSAweDA1CisjZGVmaW5lIEdQTU9ERV9XQ0FDSElOR19QQUdFIDB4MDgKKyNkZWZpbmUgR1BNT0RFX0FVRElPX0NUTF9QQUdFIDB4MGUKKyNkZWZpbmUgR1BNT0RFX1BPV0VSX1BBR0UgMHgxYQorI2RlZmluZSBHUE1PREVfRkFVTFRfRkFJTF9QQUdFIDB4MWMKKyNkZWZpbmUgR1BNT0RFX1RPX1BST1RFQ1RfUEFHRSAweDFkCisjZGVmaW5lIEdQTU9ERV9DQVBBQklMSVRJRVNfUEFHRSAweDJhCisjZGVmaW5lIEdQTU9ERV9BTExfUEFHRVMgMHgzZgorCisjZGVmaW5lIEdQTU9ERV9DRFJPTV9QQUdFIDB4MGQKKworI2RlZmluZSBEVkRfU1RSVUNUX1BIWVNJQ0FMIDB4MDAKKyNkZWZpbmUgRFZEX1NUUlVDVF9DT1BZUklHSFQgMHgwMQorI2RlZmluZSBEVkRfU1RSVUNUX0RJU0NLRVkgMHgwMgorI2RlZmluZSBEVkRfU1RSVUNUX0JDQSAweDAzCisjZGVmaW5lIERWRF9TVFJVQ1RfTUFOVUZBQ1QgMHgwNAorCitzdHJ1Y3QgZHZkX2xheWVyIHsKKyBfX3U4IGJvb2tfdmVyc2lvbiA6IDQ7CisgX191OCBib29rX3R5cGUgOiA0OworIF9fdTggbWluX3JhdGUgOiA0OworIF9fdTggZGlzY19zaXplIDogNDsKKyBfX3U4IGxheWVyX3R5cGUgOiA0OworIF9fdTggdHJhY2tfcGF0aCA6IDE7CisgX191OCBubGF5ZXJzIDogMjsKKyBfX3U4IHRyYWNrX2RlbnNpdHkgOiA0OworIF9fdTggbGluZWFyX2RlbnNpdHkgOiA0OworIF9fdTggYmNhIDogMTsKKyBfX3UzMiBzdGFydF9zZWN0b3I7CisgX191MzIgZW5kX3NlY3RvcjsKKyBfX3UzMiBlbmRfc2VjdG9yX2wwOworfTsKKworI2RlZmluZSBEVkRfTEFZRVJTIDQKKworc3RydWN0IGR2ZF9waHlzaWNhbCB7CisgX191OCB0eXBlOworIF9fdTggbGF5ZXJfbnVtOworIHN0cnVjdCBkdmRfbGF5ZXIgbGF5ZXJbRFZEX0xBWUVSU107Cit9OworCitzdHJ1Y3QgZHZkX2NvcHlyaWdodCB7CisgX191OCB0eXBlOworCisgX191OCBsYXllcl9udW07CisgX191OCBjcHN0OworIF9fdTggcm1pOworfTsKKworc3RydWN0IGR2ZF9kaXNja2V5IHsKKyBfX3U4IHR5cGU7CisKKyB1bnNpZ25lZCBhZ2lkIDogMjsKKyBfX3U4IHZhbHVlWzIwNDhdOworfTsKKworc3RydWN0IGR2ZF9iY2EgeworIF9fdTggdHlwZTsKKworIGludCBsZW47CisgX191OCB2YWx1ZVsxODhdOworfTsKKworc3RydWN0IGR2ZF9tYW51ZmFjdCB7CisgX191OCB0eXBlOworCisgX191OCBsYXllcl9udW07CisgaW50IGxlbjsKKyBfX3U4IHZhbHVlWzIwNDhdOworfTsKKwordHlwZWRlZiB1bmlvbiB7CisgX191OCB0eXBlOworCisgc3RydWN0IGR2ZF9waHlzaWNhbCBwaHlzaWNhbDsKKyBzdHJ1Y3QgZHZkX2NvcHlyaWdodCBjb3B5cmlnaHQ7Cisgc3RydWN0IGR2ZF9kaXNja2V5IGRpc2NrZXk7Cisgc3RydWN0IGR2ZF9iY2EgYmNhOworIHN0cnVjdCBkdmRfbWFudWZhY3QgbWFudWZhY3Q7Cit9IGR2ZF9zdHJ1Y3Q7CisKKyNkZWZpbmUgRFZEX0xVX1NFTkRfQUdJRCAwCisjZGVmaW5lIERWRF9IT1NUX1NFTkRfQ0hBTExFTkdFIDEKKyNkZWZpbmUgRFZEX0xVX1NFTkRfS0VZMSAyCisjZGVmaW5lIERWRF9MVV9TRU5EX0NIQUxMRU5HRSAzCisjZGVmaW5lIERWRF9IT1NUX1NFTkRfS0VZMiA0CisKKyNkZWZpbmUgRFZEX0FVVEhfRVNUQUJMSVNIRUQgNQorI2RlZmluZSBEVkRfQVVUSF9GQUlMVVJFIDYKKworI2RlZmluZSBEVkRfTFVfU0VORF9USVRMRV9LRVkgNworI2RlZmluZSBEVkRfTFVfU0VORF9BU0YgOAorI2RlZmluZSBEVkRfSU5WQUxJREFURV9BR0lEIDkKKyNkZWZpbmUgRFZEX0xVX1NFTkRfUlBDX1NUQVRFIDEwCisjZGVmaW5lIERWRF9IT1NUX1NFTkRfUlBDX1NUQVRFIDExCisKK3R5cGVkZWYgX191OCBkdmRfa2V5WzVdOwordHlwZWRlZiBfX3U4IGR2ZF9jaGFsbGVuZ2VbMTBdOworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfYWdpZCB7CisgX191OCB0eXBlOworIHVuc2lnbmVkIGFnaWQgOiAyOworfTsKKworc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlIHsKKyBfX3U4IHR5cGU7CisgdW5zaWduZWQgYWdpZCA6IDI7CisKKyBkdmRfY2hhbGxlbmdlIGNoYWw7Cit9OworCitzdHJ1Y3QgZHZkX3NlbmRfa2V5IHsKKyBfX3U4IHR5cGU7CisgdW5zaWduZWQgYWdpZCA6IDI7CisKKyBkdmRfa2V5IGtleTsKK307CisKK3N0cnVjdCBkdmRfbHVfc2VuZF9jaGFsbGVuZ2UgeworIF9fdTggdHlwZTsKKyB1bnNpZ25lZCBhZ2lkIDogMjsKKworIGR2ZF9jaGFsbGVuZ2UgY2hhbDsKK307CisKKyNkZWZpbmUgRFZEX0NQTV9OT19DT1BZUklHSFQgMAorI2RlZmluZSBEVkRfQ1BNX0NPUFlSSUdIVEVEIDEKKworI2RlZmluZSBEVkRfQ1BfU0VDX05PTkUgMAorI2RlZmluZSBEVkRfQ1BfU0VDX0VYSVNUIDEKKworI2RlZmluZSBEVkRfQ0dNU19VTlJFU1RSSUNURUQgMAorI2RlZmluZSBEVkRfQ0dNU19TSU5HTEUgMgorI2RlZmluZSBEVkRfQ0dNU19SRVNUUklDVEVEIDMKKworc3RydWN0IGR2ZF9sdV9zZW5kX3RpdGxlX2tleSB7CisgX191OCB0eXBlOworIHVuc2lnbmVkIGFnaWQgOiAyOworCisgZHZkX2tleSB0aXRsZV9rZXk7CisgaW50IGxiYTsKKyB1bnNpZ25lZCBjcG0gOiAxOworIHVuc2lnbmVkIGNwX3NlYyA6IDE7CisgdW5zaWduZWQgY2dtcyA6IDI7Cit9OworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfYXNmIHsKKyBfX3U4IHR5cGU7CisgdW5zaWduZWQgYWdpZCA6IDI7CisKKyB1bnNpZ25lZCBhc2YgOiAxOworfTsKKworc3RydWN0IGR2ZF9ob3N0X3NlbmRfcnBjc3RhdGUgeworIF9fdTggdHlwZTsKKyBfX3U4IHBkcmM7Cit9OworCitzdHJ1Y3QgZHZkX2x1X3NlbmRfcnBjc3RhdGUgeworIF9fdTggdHlwZSA6IDI7CisgX191OCB2cmEgOiAzOworIF9fdTggdWNjYSA6IDM7CisgX191OCByZWdpb25fbWFzazsKKyBfX3U4IHJwY19zY2hlbWU7Cit9OworCit0eXBlZGVmIHVuaW9uIHsKKyBfX3U4IHR5cGU7CisKKyBzdHJ1Y3QgZHZkX2x1X3NlbmRfYWdpZCBsc2E7Cisgc3RydWN0IGR2ZF9ob3N0X3NlbmRfY2hhbGxlbmdlIGhzYzsKKyBzdHJ1Y3QgZHZkX3NlbmRfa2V5IGxzazsKKyBzdHJ1Y3QgZHZkX2x1X3NlbmRfY2hhbGxlbmdlIGxzYzsKKyBzdHJ1Y3QgZHZkX3NlbmRfa2V5IGhzazsKKyBzdHJ1Y3QgZHZkX2x1X3NlbmRfdGl0bGVfa2V5IGxzdGs7Cisgc3RydWN0IGR2ZF9sdV9zZW5kX2FzZiBsc2FzZjsKKyBzdHJ1Y3QgZHZkX2hvc3Rfc2VuZF9ycGNzdGF0ZSBocnBjczsKKyBzdHJ1Y3QgZHZkX2x1X3NlbmRfcnBjc3RhdGUgbHJwY3M7Cit9IGR2ZF9hdXRoaW5mbzsKKworc3RydWN0IHJlcXVlc3Rfc2Vuc2UgeworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggdmFsaWQgOiAxOworIF9fdTggZXJyb3JfY29kZSA6IDc7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IGVycm9yX2NvZGUgOiA3OworIF9fdTggdmFsaWQgOiAxOworI2VuZGlmCisgX191OCBzZWdtZW50X251bWJlcjsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMSA6IDI7CisgX191OCBpbGkgOiAxOworIF9fdTggcmVzZXJ2ZWQyIDogMTsKKyBfX3U4IHNlbnNlX2tleSA6IDQ7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IHNlbnNlX2tleSA6IDQ7CisgX191OCByZXNlcnZlZDIgOiAxOworIF9fdTggaWxpIDogMTsKKyBfX3U4IHJlc2VydmVkMSA6IDI7CisjZW5kaWYKKyBfX3U4IGluZm9ybWF0aW9uWzRdOworIF9fdTggYWRkX3NlbnNlX2xlbjsKKyBfX3U4IGNvbW1hbmRfaW5mb1s0XTsKKyBfX3U4IGFzYzsKKyBfX3U4IGFzY3E7CisgX191OCBmcnVjOworIF9fdTggc2tzWzNdOworIF9fdTggYXNiWzQ2XTsKK307CisKKyNkZWZpbmUgQ0RGX1JXUlQgMHgwMDIwICAKKyNkZWZpbmUgQ0RGX0hXRE0gMHgwMDI0ICAKKyNkZWZpbmUgQ0RGX01SVyAweDAwMjgKKworI2RlZmluZSBDRE1fTVJXX05PVE1SVyAwCisjZGVmaW5lIENETV9NUldfQkdGT1JNQVRfSU5BQ1RJVkUgMQorI2RlZmluZSBDRE1fTVJXX0JHRk9STUFUX0FDVElWRSAyCisjZGVmaW5lIENETV9NUldfQkdGT1JNQVRfQ09NUExFVEUgMworCisjZGVmaW5lIE1SV19MQkFfRE1BIDAKKyNkZWZpbmUgTVJXX0xCQV9HQUEgMQorCisjZGVmaW5lIE1SV19NT0RFX1BDX1BSRTEgMHgyYworI2RlZmluZSBNUldfTU9ERV9QQyAweDAzCisKK3N0cnVjdCBtcndfZmVhdHVyZV9kZXNjIHsKKyBfX3UxNiBmZWF0dXJlX2NvZGU7CisjaWZkZWYgX19CSUdfRU5ESUFOX0JJVEZJRUxECisgX191OCByZXNlcnZlZDEgOiAyOworIF9fdTggZmVhdHVyZV92ZXJzaW9uIDogNDsKKyBfX3U4IHBlcnNpc3RlbnQgOiAxOworIF9fdTggY3VyciA6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IGN1cnIgOiAxOworIF9fdTggcGVyc2lzdGVudCA6IDE7CisgX191OCBmZWF0dXJlX3ZlcnNpb24gOiA0OworIF9fdTggcmVzZXJ2ZWQxIDogMjsKKyNlbmRpZgorIF9fdTggYWRkX2xlbjsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMiA6IDc7CisgX191OCB3cml0ZSA6IDE7CisjZWxpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IHdyaXRlIDogMTsKKyBfX3U4IHJlc2VydmVkMiA6IDc7CisjZW5kaWYKKyBfX3U4IHJlc2VydmVkMzsKKyBfX3U4IHJlc2VydmVkNDsKKyBfX3U4IHJlc2VydmVkNTsKK307CisKK3N0cnVjdCByd3J0X2ZlYXR1cmVfZGVzYyB7CisgX191MTYgZmVhdHVyZV9jb2RlOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggcmVzZXJ2ZWQxIDogMjsKKyBfX3U4IGZlYXR1cmVfdmVyc2lvbiA6IDQ7CisgX191OCBwZXJzaXN0ZW50IDogMTsKKyBfX3U4IGN1cnIgOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBjdXJyIDogMTsKKyBfX3U4IHBlcnNpc3RlbnQgOiAxOworIF9fdTggZmVhdHVyZV92ZXJzaW9uIDogNDsKKyBfX3U4IHJlc2VydmVkMSA6IDI7CisjZW5kaWYKKyBfX3U4IGFkZF9sZW47CisgX191MzIgbGFzdF9sYmE7CisgX191MzIgYmxvY2tfc2l6ZTsKKyBfX3UxNiBibG9ja2luZzsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IHJlc2VydmVkMiA6IDc7CisgX191OCBwYWdlX3ByZXNlbnQgOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBwYWdlX3ByZXNlbnQgOiAxOworIF9fdTggcmVzZXJ2ZWQyIDogNzsKKyNlbmRpZgorIF9fdTggcmVzZXJ2ZWQzOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworIF9fdTE2IGRpc2NfaW5mb3JtYXRpb25fbGVuZ3RoOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggcmVzZXJ2ZWQxIDogMzsKKyBfX3U4IGVyYXNhYmxlIDogMTsKKyBfX3U4IGJvcmRlcl9zdGF0dXMgOiAyOworIF9fdTggZGlzY19zdGF0dXMgOiAyOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBkaXNjX3N0YXR1cyA6IDI7CisgX191OCBib3JkZXJfc3RhdHVzIDogMjsKKyBfX3U4IGVyYXNhYmxlIDogMTsKKyBfX3U4IHJlc2VydmVkMSA6IDM7CisjZWxzZQorI2Vycm9yICJQbGVhc2UgZml4IDxhc20vYnl0ZW9yZGVyLmg+IgorI2VuZGlmCisgX191OCBuX2ZpcnN0X3RyYWNrOworIF9fdTggbl9zZXNzaW9uc19sc2I7CisgX191OCBmaXJzdF90cmFja19sc2I7CisgX191OCBsYXN0X3RyYWNrX2xzYjsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IGRpZF92IDogMTsKKyBfX3U4IGRiY192IDogMTsKKyBfX3U4IHVydSA6IDE7CisgX191OCByZXNlcnZlZDIgOiAyOworIF9fdTggZGJpdCA6IDE7CisgX191OCBtcndfc3RhdHVzIDogMjsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggbXJ3X3N0YXR1cyA6IDI7CisgX191OCBkYml0IDogMTsKKyBfX3U4IHJlc2VydmVkMiA6IDI7CisgX191OCB1cnUgOiAxOworIF9fdTggZGJjX3YgOiAxOworIF9fdTggZGlkX3YgOiAxOworI2VuZGlmCisgX191OCBkaXNjX3R5cGU7CisgX191OCBuX3Nlc3Npb25zX21zYjsKKyBfX3U4IGZpcnN0X3RyYWNrX21zYjsKKyBfX3U4IGxhc3RfdHJhY2tfbXNiOworIF9fdTMyIGRpc2NfaWQ7CisgX191MzIgbGVhZF9pbjsKKyBfX3UzMiBsZWFkX291dDsKKyBfX3U4IGRpc2NfYmFyX2NvZGVbOF07CisgX191OCByZXNlcnZlZDM7CisgX191OCBuX29wYzsKK30gZGlzY19pbmZvcm1hdGlvbjsKKwordHlwZWRlZiBzdHJ1Y3QgeworIF9fdTE2IHRyYWNrX2luZm9ybWF0aW9uX2xlbmd0aDsKKyBfX3U4IHRyYWNrX2xzYjsKKyBfX3U4IHNlc3Npb25fbHNiOworIF9fdTggcmVzZXJ2ZWQxOworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggcmVzZXJ2ZWQyIDogMjsKKyBfX3U4IGRhbWFnZSA6IDE7CisgX191OCBjb3B5IDogMTsKKyBfX3U4IHRyYWNrX21vZGUgOiA0OworIF9fdTggcnQgOiAxOworIF9fdTggYmxhbmsgOiAxOworIF9fdTggcGFja2V0IDogMTsKKyBfX3U4IGZwIDogMTsKKyBfX3U4IGRhdGFfbW9kZSA6IDQ7CisgX191OCByZXNlcnZlZDMgOiA2OworIF9fdTggbHJhX3YgOiAxOworIF9fdTggbndhX3YgOiAxOworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCB0cmFja19tb2RlIDogNDsKKyBfX3U4IGNvcHkgOiAxOworIF9fdTggZGFtYWdlIDogMTsKKyBfX3U4IHJlc2VydmVkMiA6IDI7CisgX191OCBkYXRhX21vZGUgOiA0OworIF9fdTggZnAgOiAxOworIF9fdTggcGFja2V0IDogMTsKKyBfX3U4IGJsYW5rIDogMTsKKyBfX3U4IHJ0IDogMTsKKyBfX3U4IG53YV92IDogMTsKKyBfX3U4IGxyYV92IDogMTsKKyBfX3U4IHJlc2VydmVkMyA6IDY7CisjZW5kaWYKKyBfX3UzMiB0cmFja19zdGFydDsKKyBfX3UzMiBuZXh0X3dyaXRhYmxlOworIF9fdTMyIGZyZWVfYmxvY2tzOworIF9fdTMyIGZpeGVkX3BhY2tldF9zaXplOworIF9fdTMyIHRyYWNrX3NpemU7CisgX191MzIgbGFzdF9yZWNfYWRkcmVzczsKK30gdHJhY2tfaW5mb3JtYXRpb247CisKK3N0cnVjdCBmZWF0dXJlX2hlYWRlciB7CisgX191MzIgZGF0YV9sZW47CisgX191OCByZXNlcnZlZDE7CisgX191OCByZXNlcnZlZDI7CisgX191MTYgY3Vycl9wcm9maWxlOworfTsKKworc3RydWN0IG1vZGVfcGFnZV9oZWFkZXIgeworIF9fdTE2IG1vZGVfZGF0YV9sZW5ndGg7CisgX191OCBtZWRpdW1fdHlwZTsKKyBfX3U4IHJlc2VydmVkMTsKKyBfX3U4IHJlc2VydmVkMjsKKyBfX3U4IHJlc2VydmVkMzsKKyBfX3UxNiBkZXNjX2xlbmd0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2lyY19idWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzgyNTBjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NpcmNfYnVmLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ0lSQ19CVUZfSAorI2RlZmluZSBfTElOVVhfQ0lSQ19CVUZfSCAxCisKK3N0cnVjdCBjaXJjX2J1ZiB7CisgY2hhciAqYnVmOworIGludCBoZWFkOworIGludCB0YWlsOworfTsKKworI2RlZmluZSBDSVJDX0NOVChoZWFkLHRhaWwsc2l6ZSkgKCgoaGVhZCkgLSAodGFpbCkpICYgKChzaXplKS0xKSkKKworI2RlZmluZSBDSVJDX1NQQUNFKGhlYWQsdGFpbCxzaXplKSBDSVJDX0NOVCgodGFpbCksKChoZWFkKSsxKSwoc2l6ZSkpCisKKyNkZWZpbmUgQ0lSQ19DTlRfVE9fRU5EKGhlYWQsdGFpbCxzaXplKSAgICh7aW50IGVuZCA9IChzaXplKSAtICh0YWlsKTsgICBpbnQgbiA9ICgoaGVhZCkgKyBlbmQpICYgKChzaXplKS0xKTsgICBuIDwgZW5kID8gbiA6IGVuZDt9KQorCisjZGVmaW5lIENJUkNfU1BBQ0VfVE9fRU5EKGhlYWQsdGFpbCxzaXplKSAgICh7aW50IGVuZCA9IChzaXplKSAtIDEgLSAoaGVhZCk7ICAgaW50IG4gPSAoZW5kICsgKHRhaWwpKSAmICgoc2l6ZSktMSk7ICAgbiA8PSBlbmQgPyBuIDogZW5kKzE7fSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2xrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY2xrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmI4ZjQzNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jbGsuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ0xLX0gKKyNkZWZpbmUgX19MSU5VWF9DTEtfSAorCitzdHJ1Y3QgZGV2aWNlOworCitzdHJ1Y3QgY2xrOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0KHN0cnVjdCBkZXZpY2UgKmRldiwgY29uc3QgY2hhciAqaWQpOworCitzdHJ1Y3QgY2xrICpjbGtfZ2V0X3BhcmVudChzdHJ1Y3QgY2xrICpjbGspOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb2RhLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU3ZTg5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYS5oCkBAIC0wLDAgKzEsNTk0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9DT0RBX0hFQURFUl8KKyNkZWZpbmUgX0NPREFfSEVBREVSXworCisjaWYgZGVmaW5lZChfX05ldEJTRF9fKSB8fCAoZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pKSAmJiAhZGVmaW5lZChLRVJORUwpCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjZW5kaWYKKworI2lmbmRlZiBDT0RBX01BWFNZTUxJTktTCisjZGVmaW5lIENPREFfTUFYU1lNTElOS1MgMTAKKyNlbmRpZgorCisjaWYgZGVmaW5lZChESkdQUCkgfHwgZGVmaW5lZChfX0NZR1dJTjMyX18pCisjaWZkZWYgS0VSTkVMCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdV9sb25nOwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ7Cit0eXBlZGVmIHVuc2lnbmVkIHNob3J0IHVfc2hvcnQ7Cit0eXBlZGVmIHVfbG9uZyBpbm9fdDsKK3R5cGVkZWYgdV9sb25nIGRldl90OwordHlwZWRlZiB2b2lkICogY2FkZHJfdDsKKyNpZmRlZiBET1MKK3R5cGVkZWYgdW5zaWduZWQgX19pbnQ2NCB1X3F1YWRfdDsKKyNlbHNlCit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X3F1YWRfdDsKKyNlbmRpZgorCisjZGVmaW5lIGlubGluZQorCitzdHJ1Y3QgdGltZXNwZWMgeworIGxvbmcgdHNfc2VjOworIGxvbmcgdHNfbnNlYzsKK307CisjZWxzZQorI2luY2x1ZGUgPHN5cy90aW1lLmg+Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1X3F1YWRfdDsKKyNlbmRpZgorI2VuZGlmCisKKyNpZmRlZiBfX2xpbnV4X18KKyNpbmNsdWRlIDxsaW51eC90aW1lLmg+CisjZGVmaW5lIGNkZXZfdCB1X3F1YWRfdAorI2lmICFkZWZpbmVkKF9VUVVBRF9UXykgJiYgKCFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMikKKyNkZWZpbmUgX1VRVUFEX1RfIDEKK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIHVfcXVhZF90OworI2VuZGlmCisjZWxzZQorI2RlZmluZSBjZGV2X3QgZGV2X3QKKyNlbmRpZgorCisjaWZkZWYgX19DWUdXSU4zMl9fCitzdHJ1Y3QgdGltZXNwZWMgeworIHRpbWVfdCB0dl9zZWM7CisgbG9uZyB0dl9uc2VjOworfTsKKyNlbmRpZgorCisjaWZuZGVmIF9fQklUX1RZUEVTX0RFRklORURfXworI2RlZmluZSBfX0JJVF9UWVBFU19ERUZJTkVEX18KK3R5cGVkZWYgc2lnbmVkIGNoYXIgaW50OF90OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfaW50OF90OwordHlwZWRlZiBzaG9ydCBpbnQxNl90OwordHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1X2ludDE2X3Q7Cit0eXBlZGVmIGludCBpbnQzMl90OwordHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90OworI2VuZGlmCisKKyNkZWZpbmUgQ09EQV9NQVhOQU1MRU4gMjU1CisjZGVmaW5lIENPREFfTUFYUEFUSExFTiAxMDI0CisjZGVmaW5lIENPREFfTUFYU1lNTElOSyAxMAorCisjZGVmaW5lIENfT19SRUFEIDB4MDAxCisjZGVmaW5lIENfT19XUklURSAweDAwMgorI2RlZmluZSBDX09fVFJVTkMgMHgwMTAKKyNkZWZpbmUgQ19PX0VYQ0wgMHgxMDAKKyNkZWZpbmUgQ19PX0NSRUFUIDB4MjAwCisKKyNkZWZpbmUgQ19NX1JFQUQgMDA0MDAKKyNkZWZpbmUgQ19NX1dSSVRFIDAwMjAwCisKKyNkZWZpbmUgQ19BX0NfT0sgOCAgCisjZGVmaW5lIENfQV9SX09LIDQgIAorI2RlZmluZSBDX0FfV19PSyAyICAKKyNkZWZpbmUgQ19BX1hfT0sgMSAgCisjZGVmaW5lIENfQV9GX09LIDAgIAorCisjaWZuZGVmIF9WRU5VU19ESVJFTlRfVF8KKyNkZWZpbmUgX1ZFTlVTX0RJUkVOVF9UXyAxCitzdHJ1Y3QgdmVudXNfZGlyZW50IHsKKyB1X2ludDMyX3QgZF9maWxlbm87CisgdV9pbnQxNl90IGRfcmVjbGVuOworIHVfaW50OF90IGRfdHlwZTsKKyB1X2ludDhfdCBkX25hbWxlbjsKKyBjaGFyIGRfbmFtZVtDT0RBX01BWE5BTUxFTiArIDFdOworfTsKKyN1bmRlZiBESVJTSVoKKyNkZWZpbmUgRElSU0laKGRwKSAoKHNpemVvZiAoc3RydWN0IHZlbnVzX2RpcmVudCkgLSAoQ09EQV9NQVhOQU1MRU4rMSkpICsgICAoKChkcCktPmRfbmFtbGVuKzEgKyAzKSAmfiAzKSkKKworI2RlZmluZSBDRFRfVU5LTk9XTiAwCisjZGVmaW5lIENEVF9GSUZPIDEKKyNkZWZpbmUgQ0RUX0NIUiAyCisjZGVmaW5lIENEVF9ESVIgNAorI2RlZmluZSBDRFRfQkxLIDYKKyNkZWZpbmUgQ0RUX1JFRyA4CisjZGVmaW5lIENEVF9MTksgMTAKKyNkZWZpbmUgQ0RUX1NPQ0sgMTIKKyNkZWZpbmUgQ0RUX1dIVCAxNAorCisjZGVmaW5lIElGVE9DRFQobW9kZSkgKCgobW9kZSkgJiAwMTcwMDAwKSA+PiAxMikKKyNkZWZpbmUgQ0RUVE9JRihkaXJ0eXBlKSAoKGRpcnR5cGUpIDw8IDEyKQorCisjZW5kaWYKKworI2lmbmRlZiBfVlVJRF9UXworI2RlZmluZSBfVlVJRF9UXwordHlwZWRlZiB1X2ludDMyX3QgdnVpZF90OwordHlwZWRlZiB1X2ludDMyX3QgdmdpZF90OworI2VuZGlmCisKK3N0cnVjdCBDb2RhRmlkIHsKKyB1X2ludDMyX3Qgb3BhcXVlWzRdOworfTsKKworI2RlZmluZSBjb2RhX2YyaShmaWQpICAoZmlkID8gKGZpZC0+b3BhcXVlWzNdIF4gKGZpZC0+b3BhcXVlWzJdPDwxMCkgXiAoZmlkLT5vcGFxdWVbMV08PDIwKSBeIGZpZC0+b3BhcXVlWzBdKSA6IDApCisKKyNpZm5kZWYgX1ZFTlVTX1ZBVFRSX1RfCisjZGVmaW5lIF9WRU5VU19WQVRUUl9UXworCitlbnVtIGNvZGFfdnR5cGUgeyBDX1ZOT04sIENfVlJFRywgQ19WRElSLCBDX1ZCTEssIENfVkNIUiwgQ19WTE5LLCBDX1ZTT0NLLCBDX1ZGSUZPLCBDX1ZCQUQgfTsKKworc3RydWN0IGNvZGFfdmF0dHIgeworIGxvbmcgdmFfdHlwZTsKKyB1X3Nob3J0IHZhX21vZGU7Cisgc2hvcnQgdmFfbmxpbms7CisgdnVpZF90IHZhX3VpZDsKKyB2Z2lkX3QgdmFfZ2lkOworIGxvbmcgdmFfZmlsZWlkOworIHVfcXVhZF90IHZhX3NpemU7CisgbG9uZyB2YV9ibG9ja3NpemU7Cisgc3RydWN0IHRpbWVzcGVjIHZhX2F0aW1lOworIHN0cnVjdCB0aW1lc3BlYyB2YV9tdGltZTsKKyBzdHJ1Y3QgdGltZXNwZWMgdmFfY3RpbWU7CisgdV9sb25nIHZhX2dlbjsKKyB1X2xvbmcgdmFfZmxhZ3M7CisgY2Rldl90IHZhX3JkZXY7CisgdV9xdWFkX3QgdmFfYnl0ZXM7CisgdV9xdWFkX3QgdmFfZmlsZXJldjsKK307CisKKyNlbmRpZgorCitzdHJ1Y3QgY29kYV9zdGF0ZnMgeworIGludDMyX3QgZl9ibG9ja3M7CisgaW50MzJfdCBmX2JmcmVlOworIGludDMyX3QgZl9iYXZhaWw7CisgaW50MzJfdCBmX2ZpbGVzOworIGludDMyX3QgZl9mZnJlZTsKK307CisKKyNkZWZpbmUgQ09EQV9ST09UIDIKKyNkZWZpbmUgQ09EQV9PUEVOX0JZX0ZEIDMKKyNkZWZpbmUgQ09EQV9PUEVOIDQKKyNkZWZpbmUgQ09EQV9DTE9TRSA1CisjZGVmaW5lIENPREFfSU9DVEwgNgorI2RlZmluZSBDT0RBX0dFVEFUVFIgNworI2RlZmluZSBDT0RBX1NFVEFUVFIgOAorI2RlZmluZSBDT0RBX0FDQ0VTUyA5CisjZGVmaW5lIENPREFfTE9PS1VQIDEwCisjZGVmaW5lIENPREFfQ1JFQVRFIDExCisjZGVmaW5lIENPREFfUkVNT1ZFIDEyCisjZGVmaW5lIENPREFfTElOSyAxMworI2RlZmluZSBDT0RBX1JFTkFNRSAxNAorI2RlZmluZSBDT0RBX01LRElSIDE1CisjZGVmaW5lIENPREFfUk1ESVIgMTYKKyNkZWZpbmUgQ09EQV9TWU1MSU5LIDE4CisjZGVmaW5lIENPREFfUkVBRExJTksgMTkKKyNkZWZpbmUgQ09EQV9GU1lOQyAyMAorI2RlZmluZSBDT0RBX1ZHRVQgMjIKKyNkZWZpbmUgQ09EQV9TSUdOQUwgMjMKKyNkZWZpbmUgQ09EQV9SRVBMQUNFIDI0ICAKKyNkZWZpbmUgQ09EQV9GTFVTSCAyNSAgCisjZGVmaW5lIENPREFfUFVSR0VVU0VSIDI2ICAKKyNkZWZpbmUgQ09EQV9aQVBGSUxFIDI3ICAKKyNkZWZpbmUgQ09EQV9aQVBESVIgMjggIAorI2RlZmluZSBDT0RBX1BVUkdFRklEIDMwICAKKyNkZWZpbmUgQ09EQV9PUEVOX0JZX1BBVEggMzEKKyNkZWZpbmUgQ09EQV9SRVNPTFZFIDMyCisjZGVmaW5lIENPREFfUkVJTlRFR1JBVEUgMzMKKyNkZWZpbmUgQ09EQV9TVEFURlMgMzQKKyNkZWZpbmUgQ09EQV9TVE9SRSAzNQorI2RlZmluZSBDT0RBX1JFTEVBU0UgMzYKKyNkZWZpbmUgQ09EQV9OQ0FMTFMgMzcKKworI2RlZmluZSBET1dOQ0FMTChvcGNvZGUpIChvcGNvZGUgPj0gQ09EQV9SRVBMQUNFICYmIG9wY29kZSA8PSBDT0RBX1BVUkdFRklEKQorCisjZGVmaW5lIFZDX01BWERBVEFTSVpFIDgxOTIKKyNkZWZpbmUgVkNfTUFYTVNHU0laRSBzaXplb2YodW5pb24gaW5wdXRBcmdzKStzaXplb2YodW5pb24gb3V0cHV0QXJncykgKyAgVkNfTUFYREFUQVNJWkUgCisKKyNkZWZpbmUgQ0lPQ19LRVJORUxfVkVSU0lPTiBfSU9XUignYycsIDEwLCBzaXplX3QpCisKKyNkZWZpbmUgQ09EQV9LRVJORUxfVkVSU0lPTiAzICAKKworc3RydWN0IGNvZGFfaW5faGRyIHsKKyB1X2ludDMyX3Qgb3Bjb2RlOworIHVfaW50MzJfdCB1bmlxdWU7CisgcGlkX3QgcGlkOworIHBpZF90IHBnaWQ7CisgdnVpZF90IHVpZDsKK307CisKK3N0cnVjdCBjb2RhX291dF9oZHIgeworIHVfaW50MzJfdCBvcGNvZGU7CisgdV9pbnQzMl90IHVuaXF1ZTsKKyB1X2ludDMyX3QgcmVzdWx0OworfTsKKworc3RydWN0IGNvZGFfcm9vdF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX3Jvb3RfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKK307CisKK3N0cnVjdCBjb2RhX29wZW5faW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX29wZW5fb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIGNkZXZfdCBkZXY7CisgaW5vX3QgaW5vZGU7Cit9OworCitzdHJ1Y3QgY29kYV9zdG9yZV9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfc3RvcmVfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX3JlbGVhc2VfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX3JlbGVhc2Vfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX2Nsb3NlX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9jbG9zZV9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworc3RydWN0IGNvZGFfaW9jdGxfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBjbWQ7CisgaW50IGxlbjsKKyBpbnQgcndmbGFnOworIGNoYXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgaW50IGxlbjsKKyBjYWRkcl90IGRhdGE7Cit9OworCitzdHJ1Y3QgY29kYV9nZXRhdHRyX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX2dldGF0dHJfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cit9OworCitzdHJ1Y3QgY29kYV9zZXRhdHRyX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworfTsKKworc3RydWN0IGNvZGFfc2V0YXR0cl9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0OworfTsKKworc3RydWN0IGNvZGFfYWNjZXNzX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgZmxhZ3M7Cit9OworCitzdHJ1Y3QgY29kYV9hY2Nlc3Nfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKKyNkZWZpbmUgQ0xVX0NBU0VfU0VOU0lUSVZFIDB4MDEKKyNkZWZpbmUgQ0xVX0NBU0VfSU5TRU5TSVRJVkUgMHgwMgorCitzdHJ1Y3QgY29kYV9sb29rdXBfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBuYW1lOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX2xvb2t1cF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgdnR5cGU7Cit9OworCitzdHJ1Y3QgY29kYV9jcmVhdGVfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CisgaW50IGV4Y2w7CisgaW50IG1vZGU7CisgaW50IG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cisgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKK3N0cnVjdCBjb2RhX3JlbW92ZV9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9yZW1vdmVfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX2xpbmtfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBzb3VyY2VGaWQ7Cisgc3RydWN0IENvZGFGaWQgZGVzdEZpZDsKKyBpbnQgdG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9saW5rX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZW5hbWVfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBzb3VyY2VGaWQ7CisgaW50IHNyY25hbWU7Cisgc3RydWN0IENvZGFGaWQgZGVzdEZpZDsKKyBpbnQgZGVzdG5hbWU7Cit9OworCitzdHJ1Y3QgY29kYV9yZW5hbWVfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX21rZGlyX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworIGludCBuYW1lOworfTsKKworc3RydWN0IGNvZGFfbWtkaXJfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7Cisgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKK307CisKK3N0cnVjdCBjb2RhX3JtZGlyX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgbmFtZTsKK307CisKK3N0cnVjdCBjb2RhX3JtZGlyX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvdXQ7Cit9OworCitzdHJ1Y3QgY29kYV9zeW1saW5rX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgc3JjbmFtZTsKKyBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOworIGludCB0bmFtZTsKK307CisKK3N0cnVjdCBjb2RhX3N5bWxpbmtfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX3JlYWRsaW5rX2luIHsKKyBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKK307CisKK3N0cnVjdCBjb2RhX3JlYWRsaW5rX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBpbnQgY291bnQ7CisgY2FkZHJfdCBkYXRhOworfTsKKworc3RydWN0IGNvZGFfZnN5bmNfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfZnN5bmNfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKK307CisKK3N0cnVjdCBjb2RhX3ZnZXRfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworfTsKKworc3RydWN0IGNvZGFfdmdldF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IENvZGFGaWQgVkZpZDsKKyBpbnQgdnR5cGU7Cit9OworCitzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHZ1aWRfdCB1aWQ7Cit9OworCitzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworc3RydWN0IGNvZGFfemFwZGlyX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBDb2RhRmlkOworfTsKKworc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IHsKKyBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOworIHN0cnVjdCBDb2RhRmlkIENvZGFGaWQ7Cit9OworCitzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgQ29kYUZpZCBOZXdGaWQ7Cisgc3RydWN0IENvZGFGaWQgT2xkRmlkOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBDb2RhRmlkIFZGaWQ7CisgaW50IGZsYWdzOworfTsKKworc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgaW50IGZkOworCit9OworCitzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKKyBzdHJ1Y3QgQ29kYUZpZCBWRmlkOworIGludCBmbGFnczsKK307CisKK3N0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CisgaW50IHBhdGg7Cit9OworCitzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4geworIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKK307CisKK3N0cnVjdCBjb2RhX3N0YXRmc19vdXQgeworIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7Cisgc3RydWN0IGNvZGFfc3RhdGZzIHN0YXQ7Cit9OworCisjZGVmaW5lIENPREFfTk9DQUNIRSAweDgwMDAwMDAwCisKK3VuaW9uIGlucHV0QXJncyB7Cisgc3RydWN0IGNvZGFfaW5faGRyIGloOworIHN0cnVjdCBjb2RhX29wZW5faW4gY29kYV9vcGVuOworIHN0cnVjdCBjb2RhX3N0b3JlX2luIGNvZGFfc3RvcmU7Cisgc3RydWN0IGNvZGFfcmVsZWFzZV9pbiBjb2RhX3JlbGVhc2U7Cisgc3RydWN0IGNvZGFfY2xvc2VfaW4gY29kYV9jbG9zZTsKKyBzdHJ1Y3QgY29kYV9pb2N0bF9pbiBjb2RhX2lvY3RsOworIHN0cnVjdCBjb2RhX2dldGF0dHJfaW4gY29kYV9nZXRhdHRyOworIHN0cnVjdCBjb2RhX3NldGF0dHJfaW4gY29kYV9zZXRhdHRyOworIHN0cnVjdCBjb2RhX2FjY2Vzc19pbiBjb2RhX2FjY2VzczsKKyBzdHJ1Y3QgY29kYV9sb29rdXBfaW4gY29kYV9sb29rdXA7Cisgc3RydWN0IGNvZGFfY3JlYXRlX2luIGNvZGFfY3JlYXRlOworIHN0cnVjdCBjb2RhX3JlbW92ZV9pbiBjb2RhX3JlbW92ZTsKKyBzdHJ1Y3QgY29kYV9saW5rX2luIGNvZGFfbGluazsKKyBzdHJ1Y3QgY29kYV9yZW5hbWVfaW4gY29kYV9yZW5hbWU7Cisgc3RydWN0IGNvZGFfbWtkaXJfaW4gY29kYV9ta2RpcjsKKyBzdHJ1Y3QgY29kYV9ybWRpcl9pbiBjb2RhX3JtZGlyOworIHN0cnVjdCBjb2RhX3N5bWxpbmtfaW4gY29kYV9zeW1saW5rOworIHN0cnVjdCBjb2RhX3JlYWRsaW5rX2luIGNvZGFfcmVhZGxpbms7Cisgc3RydWN0IGNvZGFfZnN5bmNfaW4gY29kYV9mc3luYzsKKyBzdHJ1Y3QgY29kYV92Z2V0X2luIGNvZGFfdmdldDsKKyBzdHJ1Y3QgY29kYV9vcGVuX2J5X2ZkX2luIGNvZGFfb3Blbl9ieV9mZDsKKyBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gY29kYV9vcGVuX2J5X3BhdGg7Cisgc3RydWN0IGNvZGFfc3RhdGZzX2luIGNvZGFfc3RhdGZzOworfTsKKwordW5pb24gb3V0cHV0QXJncyB7Cisgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKKyBzdHJ1Y3QgY29kYV9yb290X291dCBjb2RhX3Jvb3Q7Cisgc3RydWN0IGNvZGFfb3Blbl9vdXQgY29kYV9vcGVuOworIHN0cnVjdCBjb2RhX2lvY3RsX291dCBjb2RhX2lvY3RsOworIHN0cnVjdCBjb2RhX2dldGF0dHJfb3V0IGNvZGFfZ2V0YXR0cjsKKyBzdHJ1Y3QgY29kYV9sb29rdXBfb3V0IGNvZGFfbG9va3VwOworIHN0cnVjdCBjb2RhX2NyZWF0ZV9vdXQgY29kYV9jcmVhdGU7Cisgc3RydWN0IGNvZGFfbWtkaXJfb3V0IGNvZGFfbWtkaXI7Cisgc3RydWN0IGNvZGFfcmVhZGxpbmtfb3V0IGNvZGFfcmVhZGxpbms7Cisgc3RydWN0IGNvZGFfdmdldF9vdXQgY29kYV92Z2V0OworIHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgY29kYV9wdXJnZXVzZXI7Cisgc3RydWN0IGNvZGFfemFwZmlsZV9vdXQgY29kYV96YXBmaWxlOworIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgY29kYV96YXBkaXI7Cisgc3RydWN0IGNvZGFfcHVyZ2VmaWRfb3V0IGNvZGFfcHVyZ2VmaWQ7Cisgc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgY29kYV9yZXBsYWNlOworIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0IGNvZGFfb3Blbl9ieV9mZDsKKyBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IGNvZGFfb3Blbl9ieV9wYXRoOworIHN0cnVjdCBjb2RhX3N0YXRmc19vdXQgY29kYV9zdGF0ZnM7Cit9OworCit1bmlvbiBjb2RhX2Rvd25jYWxscyB7CisKKyBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHB1cmdldXNlcjsKKyBzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB6YXBmaWxlOworIHN0cnVjdCBjb2RhX3phcGRpcl9vdXQgemFwZGlyOworIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBwdXJnZWZpZDsKKyBzdHJ1Y3QgY29kYV9yZXBsYWNlX291dCByZXBsYWNlOworfTsKKworI2RlZmluZSBQSU9DUEFSTV9NQVNLIDB4MDAwMGZmZmYKK3N0cnVjdCBWaWNlSW9jdGwgeworIHZvaWQgX191c2VyICppbjsKKyB2b2lkIF9fdXNlciAqb3V0OworIHVfc2hvcnQgaW5fc2l6ZTsKKyB1X3Nob3J0IG91dF9zaXplOworfTsKKworc3RydWN0IFBpb2N0bERhdGEgeworIGNvbnN0IGNoYXIgX191c2VyICpwYXRoOworIGludCBmb2xsb3c7Cisgc3RydWN0IFZpY2VJb2N0bCB2aTsKK307CisKKyNkZWZpbmUgQ09EQV9DT05UUk9MICIuQ09OVFJPTCIKKyNkZWZpbmUgQ09EQV9DT05UUk9MTEVOIDgKKyNkZWZpbmUgQ1RMX0lOTyAtMQorCisjZGVmaW5lIENPREFfTU9VTlRfVkVSU0lPTiAxCisKK3N0cnVjdCBjb2RhX21vdW50X2RhdGEgeworIGludCB2ZXJzaW9uOworIGludCBmZDsKK307CisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYV9mc19pLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29kYV9mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhiMGU1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb2RhX2ZzX2kuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DT0RBX0ZTX0kKKyNkZWZpbmUgX0xJTlVYX0NPREFfRlNfSQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wYXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21wYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzBiNTUwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBhdC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NPTVBBVF9ICisjZGVmaW5lIF9MSU5VWF9DT01QQVRfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci1nY2MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci1nY2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGQ0YTYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBpbGVyLWdjYy5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgYmFycmllcigpIF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5IikKKworI2RlZmluZSBSRUxPQ19ISURFKHB0ciwgb2ZmKSAgICh7IHVuc2lnbmVkIGxvbmcgX19wdHI7ICAgX19hc21fXyAoIiIgOiAiPXIiKF9fcHRyKSA6ICIwIihwdHIpKTsgICAodHlwZW9mKHB0cikpIChfX3B0ciArIChvZmYpKTsgfSkKKworI2RlZmluZSBpbmxpbmUgaW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZSBfX2lubGluZV9fIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpCisjZGVmaW5lIF9faW5saW5lIF9faW5saW5lIF9fYXR0cmlidXRlX18oKGFsd2F5c19pbmxpbmUpKQorI2RlZmluZSBfX2RlcHJlY2F0ZWQgX19hdHRyaWJ1dGVfXygoZGVwcmVjYXRlZCkpCisjZGVmaW5lIG5vaW5saW5lIF9fYXR0cmlidXRlX18oKG5vaW5saW5lKSkKKyNkZWZpbmUgX19hdHRyaWJ1dGVfcHVyZV9fIF9fYXR0cmlidXRlX18oKHB1cmUpKQorI2RlZmluZSBfX2F0dHJpYnV0ZV9jb25zdF9fIF9fYXR0cmlidXRlX18oKF9fY29uc3RfXykpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb21waWxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQwNTVlMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGlsZXIuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ09NUElMRVJfSAorI2RlZmluZSBfX0xJTlVYX0NPTVBJTEVSX0gKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKworI2RlZmluZSBfX3VzZXIKKyNkZWZpbmUgX19rZXJuZWwKKyNkZWZpbmUgX19zYWZlCisjZGVmaW5lIF9fZm9yY2UKKyNkZWZpbmUgX19ub2Nhc3QKKyNkZWZpbmUgX19pb21lbQorI2RlZmluZSBfX2Noa191c2VyX3B0cih4KSAodm9pZCkwCisjZGVmaW5lIF9fY2hrX2lvX3B0cih4KSAodm9pZCkwCisjZGVmaW5lIF9fYnVpbHRpbl93YXJuaW5nKHgsIHkuLi4pICgxKQorI2RlZmluZSBfX2FjcXVpcmVzKHgpCisjZGVmaW5lIF9fcmVsZWFzZXMoeCkKKyNkZWZpbmUgX19hY3F1aXJlKHgpICh2b2lkKTAKKyNkZWZpbmUgX19yZWxlYXNlKHgpICh2b2lkKTAKKyNkZWZpbmUgX19jb25kX2xvY2soeCkgKHgpCisKKyNlbmRpZgorCisjaWZuZGVmIF9fYXR0cmlidXRlX2NvbnN0X18KKyNkZWZpbmUgX19hdHRyaWJ1dGVfY29uc3RfXyAgCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29tcGxldGlvbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBsZXRpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTE4MjExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbXBsZXRpb24uaApAQCAtMCwwICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfQ09NUExFVElPTl9ICisjZGVmaW5lIF9fTElOVVhfQ09NUExFVElPTl9ICisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisKK3N0cnVjdCBjb21wbGV0aW9uIHsKKyB1bnNpZ25lZCBpbnQgZG9uZTsKKyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfTsKKworI2RlZmluZSBDT01QTEVUSU9OX0lOSVRJQUxJWkVSKHdvcmspICAgeyAwLCBfX1dBSVRfUVVFVUVfSEVBRF9JTklUSUFMSVpFUigod29yaykud2FpdCkgfQorCisjZGVmaW5lIENPTVBMRVRJT05fSU5JVElBTElaRVJfT05TVEFDSyh3b3JrKSAgICh7IGluaXRfY29tcGxldGlvbigmd29yayk7IHdvcms7IH0pCisKKyNkZWZpbmUgREVDTEFSRV9DT01QTEVUSU9OKHdvcmspICAgc3RydWN0IGNvbXBsZXRpb24gd29yayA9IENPTVBMRVRJT05fSU5JVElBTElaRVIod29yaykKKworI2RlZmluZSBERUNMQVJFX0NPTVBMRVRJT05fT05TVEFDSyh3b3JrKSBERUNMQVJFX0NPTVBMRVRJT04od29yaykKKworI2RlZmluZSBJTklUX0NPTVBMRVRJT04oeCkgKCh4KS5kb25lID0gMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uZmlnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uZmlnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2FhMTA1NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jb25maWcuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9DT05GSUdfSAorI2RlZmluZSBfTElOVVhfQ09ORklHX0gKKworI2luY2x1ZGUgPGxpbnV4L2F1dG9jb25mLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbnNvbGVfc3RydWN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY29uc29sZV9zdHJ1Y3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MGU0Y2JlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NvbnNvbGVfc3RydWN0LmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8bGludXgvdnQuaD4KKworc3RydWN0IHZ0X3N0cnVjdDsKKworI2RlZmluZSBOUEFSIDE2CisKK3N0cnVjdCB2Y19kYXRhIHsKKyB1bnNpZ25lZCBzaG9ydCB2Y19udW07CisgdW5zaWduZWQgaW50IHZjX2NvbHM7CisgdW5zaWduZWQgaW50IHZjX3Jvd3M7CisgdW5zaWduZWQgaW50IHZjX3NpemVfcm93OworIHVuc2lnbmVkIGludCB2Y19zY2FuX2xpbmVzOworIHVuc2lnbmVkIGxvbmcgdmNfb3JpZ2luOworIHVuc2lnbmVkIGxvbmcgdmNfc2NyX2VuZDsKKyB1bnNpZ25lZCBsb25nIHZjX3Zpc2libGVfb3JpZ2luOworIHVuc2lnbmVkIGludCB2Y190b3AsIHZjX2JvdHRvbTsKKyBjb25zdCBzdHJ1Y3QgY29uc3cgKnZjX3N3OworIHVuc2lnbmVkIHNob3J0ICp2Y19zY3JlZW5idWY7CisgdW5zaWduZWQgaW50IHZjX3NjcmVlbmJ1Zl9zaXplOworIHVuc2lnbmVkIGNoYXIgdmNfbW9kZTsKKworIHVuc2lnbmVkIGNoYXIgdmNfYXR0cjsKKyB1bnNpZ25lZCBjaGFyIHZjX2RlZl9jb2xvcjsKKyB1bnNpZ25lZCBjaGFyIHZjX2NvbG9yOworIHVuc2lnbmVkIGNoYXIgdmNfc19jb2xvcjsKKyB1bnNpZ25lZCBjaGFyIHZjX3VsY29sb3I7CisgdW5zaWduZWQgY2hhciB2Y19oYWxmY29sb3I7CisKKyB1bnNpZ25lZCBpbnQgdmNfY3Vyc29yX3R5cGU7CisgdW5zaWduZWQgc2hvcnQgdmNfY29tcGxlbWVudF9tYXNrOworIHVuc2lnbmVkIHNob3J0IHZjX3NfY29tcGxlbWVudF9tYXNrOworIHVuc2lnbmVkIGludCB2Y194LCB2Y195OworIHVuc2lnbmVkIGludCB2Y19zYXZlZF94LCB2Y19zYXZlZF95OworIHVuc2lnbmVkIGxvbmcgdmNfcG9zOworCisgdW5zaWduZWQgc2hvcnQgdmNfaGlfZm9udF9tYXNrOworIHN0cnVjdCBjb25zb2xlX2ZvbnQgdmNfZm9udDsKKyB1bnNpZ25lZCBzaG9ydCB2Y192aWRlb19lcmFzZV9jaGFyOworCisgdW5zaWduZWQgaW50IHZjX3N0YXRlOworIHVuc2lnbmVkIGludCB2Y19ucGFyLHZjX3BhcltOUEFSXTsKKyBzdHJ1Y3QgdHR5X3N0cnVjdCAqdmNfdHR5OworCisgc3RydWN0IHZ0X21vZGUgdnRfbW9kZTsKKyBpbnQgdnRfcGlkOworIGludCB2dF9uZXd2dDsKKyB3YWl0X3F1ZXVlX2hlYWRfdCBwYXN0ZV93YWl0OworCisgdW5zaWduZWQgaW50IHZjX2NoYXJzZXQgOiAxOworIHVuc2lnbmVkIGludCB2Y19zX2NoYXJzZXQgOiAxOworIHVuc2lnbmVkIGludCB2Y19kaXNwX2N0cmwgOiAxOworIHVuc2lnbmVkIGludCB2Y190b2dnbGVfbWV0YSA6IDE7CisgdW5zaWduZWQgaW50IHZjX2RlY3Njbm0gOiAxOworIHVuc2lnbmVkIGludCB2Y19kZWNvbSA6IDE7CisgdW5zaWduZWQgaW50IHZjX2RlY2F3bSA6IDE7CisgdW5zaWduZWQgaW50IHZjX2RlY2NtIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfZGVjaW0gOiAxOworIHVuc2lnbmVkIGludCB2Y19kZWNjb2xtIDogMTsKKworIHVuc2lnbmVkIGludCB2Y19pbnRlbnNpdHkgOiAyOworIHVuc2lnbmVkIGludCB2Y191bmRlcmxpbmUgOiAxOworIHVuc2lnbmVkIGludCB2Y19ibGluayA6IDE7CisgdW5zaWduZWQgaW50IHZjX3JldmVyc2UgOiAxOworIHVuc2lnbmVkIGludCB2Y19zX2ludGVuc2l0eSA6IDI7CisgdW5zaWduZWQgaW50IHZjX3NfdW5kZXJsaW5lIDogMTsKKyB1bnNpZ25lZCBpbnQgdmNfc19ibGluayA6IDE7CisgdW5zaWduZWQgaW50IHZjX3NfcmV2ZXJzZSA6IDE7CisKKyB1bnNpZ25lZCBpbnQgdmNfcXVlcyA6IDE7CisgdW5zaWduZWQgaW50IHZjX25lZWRfd3JhcCA6IDE7CisgdW5zaWduZWQgaW50IHZjX2Nhbl9kb19jb2xvciA6IDE7CisgdW5zaWduZWQgaW50IHZjX3JlcG9ydF9tb3VzZSA6IDI7CisgdW5zaWduZWQgaW50IHZjX2ttYWxsb2NlZCA6IDE7CisgdW5zaWduZWQgY2hhciB2Y191dGYgOiAxOworIHVuc2lnbmVkIGNoYXIgdmNfdXRmX2NvdW50OworIGludCB2Y191dGZfY2hhcjsKKyB1bnNpZ25lZCBpbnQgdmNfdGFiX3N0b3BbOF07CisgdW5zaWduZWQgY2hhciB2Y19wYWxldHRlWzE2KjNdOworIHVuc2lnbmVkIHNob3J0ICogdmNfdHJhbnNsYXRlOworIHVuc2lnbmVkIGNoYXIgdmNfRzBfY2hhcnNldDsKKyB1bnNpZ25lZCBjaGFyIHZjX0cxX2NoYXJzZXQ7CisgdW5zaWduZWQgY2hhciB2Y19zYXZlZF9HMDsKKyB1bnNpZ25lZCBjaGFyIHZjX3NhdmVkX0cxOworIHVuc2lnbmVkIGludCB2Y19iZWxsX3BpdGNoOworIHVuc2lnbmVkIGludCB2Y19iZWxsX2R1cmF0aW9uOworIHN0cnVjdCB2Y19kYXRhICoqdmNfZGlzcGxheV9mZzsKKyB1bnNpZ25lZCBsb25nIHZjX3VuaV9wYWdlZGlyOworIHVuc2lnbmVkIGxvbmcgKnZjX3VuaV9wYWdlZGlyX2xvYzsKKworfTsKKworc3RydWN0IHZjIHsKKyBzdHJ1Y3QgdmNfZGF0YSAqZDsKKworfTsKKworI2RlZmluZSBDVVJfREVGIDAKKyNkZWZpbmUgQ1VSX05PTkUgMQorI2RlZmluZSBDVVJfVU5ERVJMSU5FIDIKKyNkZWZpbmUgQ1VSX0xPV0VSX1RISVJEIDMKKyNkZWZpbmUgQ1VSX0xPV0VSX0hBTEYgNAorI2RlZmluZSBDVVJfVFdPX1RISVJEUyA1CisjZGVmaW5lIENVUl9CTE9DSyA2CisjZGVmaW5lIENVUl9IV01BU0sgMHgwZgorI2RlZmluZSBDVVJfU1dNQVNLIDB4ZmZmMAorCisjZGVmaW5lIENVUl9ERUZBVUxUIENVUl9VTkRFUkxJTkUKKworI2RlZmluZSBDT05fSVNfVklTSUJMRShjb25wKSAoKmNvbnAtPnZjX2Rpc3BsYXlfZmcgPT0gY29ucCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2UzODg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2NwdS5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0NQVV9IXworI2RlZmluZSBfTElOVVhfQ1BVX0hfCisKKyNpbmNsdWRlIDxsaW51eC9zeXNkZXYuaD4KKyNpbmNsdWRlIDxsaW51eC9ub2RlLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL3NlbWFwaG9yZS5oPgorCitzdHJ1Y3QgY3B1IHsKKyBpbnQgbm9kZV9pZDsKKyBpbnQgbm9fY29udHJvbDsKKyBzdHJ1Y3Qgc3lzX2RldmljZSBzeXNkZXY7Cit9OworCitzdHJ1Y3Qgbm90aWZpZXJfYmxvY2s7CisKKyNkZWZpbmUgbG9ja19jcHVfaG90cGx1ZygpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdW5sb2NrX2NwdV9ob3RwbHVnKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrX2NwdV9ob3RwbHVnX2ludGVycnVwdGlibGUoKSAwCisjZGVmaW5lIGhvdGNwdV9ub3RpZmllcihmbiwgcHJpKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB1bnJlZ2lzdGVyX2hvdGNwdV9ub3RpZmllcihuYikgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9jcHVtYXNrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1bWFzay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTk0MGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3B1bWFzay5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9DUFVNQVNLX0gKKyNkZWZpbmUgX19MSU5VWF9DUFVNQVNLX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRtYXAuaD4KKwordHlwZWRlZiBzdHJ1Y3QgeyBERUNMQVJFX0JJVE1BUChiaXRzLCBOUl9DUFVTKTsgfSBjcHVtYXNrX3Q7CisKKyNkZWZpbmUgY3B1X3NldChjcHUsIGRzdCkgX19jcHVfc2V0KChjcHUpLCAmKGRzdCkpCisjZGVmaW5lIGNwdV9jbGVhcihjcHUsIGRzdCkgX19jcHVfY2xlYXIoKGNwdSksICYoZHN0KSkKKyNkZWZpbmUgY3B1c19zZXRhbGwoZHN0KSBfX2NwdXNfc2V0YWxsKCYoZHN0KSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19jbGVhcihkc3QpIF9fY3B1c19jbGVhcigmKGRzdCksIE5SX0NQVVMpCisjZGVmaW5lIGNwdV9pc3NldChjcHUsIGNwdW1hc2spIHRlc3RfYml0KChjcHUpLCAoY3B1bWFzaykuYml0cykKKyNkZWZpbmUgY3B1X3Rlc3RfYW5kX3NldChjcHUsIGNwdW1hc2spIF9fY3B1X3Rlc3RfYW5kX3NldCgoY3B1KSwgJihjcHVtYXNrKSkKKyNkZWZpbmUgY3B1c19hbmQoZHN0LCBzcmMxLCBzcmMyKSBfX2NwdXNfYW5kKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19vcihkc3QsIHNyYzEsIHNyYzIpIF9fY3B1c19vcigmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfeG9yKGRzdCwgc3JjMSwgc3JjMikgX19jcHVzX3hvcigmKGRzdCksICYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfYW5kbm90KGRzdCwgc3JjMSwgc3JjMikgICBfX2NwdXNfYW5kbm90KCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19jb21wbGVtZW50KGRzdCwgc3JjKSBfX2NwdXNfY29tcGxlbWVudCgmKGRzdCksICYoc3JjKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19lcXVhbChzcmMxLCBzcmMyKSBfX2NwdXNfZXF1YWwoJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19pbnRlcnNlY3RzKHNyYzEsIHNyYzIpIF9fY3B1c19pbnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfc3Vic2V0KHNyYzEsIHNyYzIpIF9fY3B1c19zdWJzZXQoJihzcmMxKSwgJihzcmMyKSwgTlJfQ1BVUykKKyNkZWZpbmUgY3B1c19lbXB0eShzcmMpIF9fY3B1c19lbXB0eSgmKHNyYyksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfZnVsbChjcHVtYXNrKSBfX2NwdXNfZnVsbCgmKGNwdW1hc2spLCBOUl9DUFVTKQorI2RlZmluZSBjcHVzX3dlaWdodChjcHVtYXNrKSBfX2NwdXNfd2VpZ2h0KCYoY3B1bWFzayksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfc2hpZnRfcmlnaHQoZHN0LCBzcmMsIG4pICAgX19jcHVzX3NoaWZ0X3JpZ2h0KCYoZHN0KSwgJihzcmMpLCAobiksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfc2hpZnRfbGVmdChkc3QsIHNyYywgbikgICBfX2NwdXNfc2hpZnRfbGVmdCgmKGRzdCksICYoc3JjKSwgKG4pLCBOUl9DUFVTKQorI2RlZmluZSBmaXJzdF9jcHUoc3JjKSAwCisjZGVmaW5lIG5leHRfY3B1KG4sIHNyYykgMQorI2RlZmluZSBjcHVtYXNrX29mX2NwdShjcHUpICAoeyAgIHR5cGVvZihfdW51c2VkX2NwdW1hc2tfYXJnXykgbTsgICBpZiAoc2l6ZW9mKG0pID09IHNpemVvZih1bnNpZ25lZCBsb25nKSkgeyAgIG0uYml0c1swXSA9IDFVTDw8KGNwdSk7ICAgfSBlbHNlIHsgICBjcHVzX2NsZWFyKG0pOyAgIGNwdV9zZXQoKGNwdSksIG0pOyAgIH0gICBtOyAgfSkKKyNkZWZpbmUgQ1BVX01BU0tfTEFTVF9XT1JEIEJJVE1BUF9MQVNUX1dPUkRfTUFTSyhOUl9DUFVTKQorI2lmIE5SX0NQVVMgPD0gQklUU19QRVJfTE9ORworI2RlZmluZSBDUFVfTUFTS19BTEwgIChjcHVtYXNrX3QpIHsgeyAgIFtCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTFdID0gQ1BVX01BU0tfTEFTVF9XT1JEICB9IH0KKyNlbHNlCisjZGVmaW5lIENQVV9NQVNLX0FMTCAgKGNwdW1hc2tfdCkgeyB7ICAgWzAgLi4uIEJJVFNfVE9fTE9OR1MoTlJfQ1BVUyktMl0gPSB+MFVMLCAgIFtCSVRTX1RPX0xPTkdTKE5SX0NQVVMpLTFdID0gQ1BVX01BU0tfTEFTVF9XT1JEICB9IH0KKyNlbmRpZgorI2RlZmluZSBDUFVfTUFTS19OT05FICAoY3B1bWFza190KSB7IHsgICBbMCAuLi4gQklUU19UT19MT05HUyhOUl9DUFVTKS0xXSA9IDBVTCAgfSB9CisjZGVmaW5lIENQVV9NQVNLX0NQVTAgIChjcHVtYXNrX3QpIHsgeyAgIFswXSA9IDFVTCAgfSB9CisjZGVmaW5lIGNwdXNfYWRkcihzcmMpICgoc3JjKS5iaXRzKQorI2RlZmluZSBjcHVtYXNrX3NjbnByaW50ZihidWYsIGxlbiwgc3JjKSAgIF9fY3B1bWFza19zY25wcmludGYoKGJ1ZiksIChsZW4pLCAmKHNyYyksIE5SX0NQVVMpCisjZGVmaW5lIGNwdW1hc2tfcGFyc2UodWJ1ZiwgdWxlbiwgZHN0KSAgIF9fY3B1bWFza19wYXJzZSgodWJ1ZiksICh1bGVuKSwgJihkc3QpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVsaXN0X3NjbnByaW50ZihidWYsIGxlbiwgc3JjKSAgIF9fY3B1bGlzdF9zY25wcmludGYoKGJ1ZiksIChsZW4pLCAmKHNyYyksIE5SX0NQVVMpCisjZGVmaW5lIGNwdWxpc3RfcGFyc2UoYnVmLCBkc3QpIF9fY3B1bGlzdF9wYXJzZSgoYnVmKSwgJihkc3QpLCBOUl9DUFVTKQorI2RlZmluZSBjcHVfcmVtYXAob2xkYml0LCBvbGQsIG5ldykgICBfX2NwdV9yZW1hcCgob2xkYml0KSwgJihvbGQpLCAmKG5ldyksIE5SX0NQVVMpCisjZGVmaW5lIGNwdXNfcmVtYXAoZHN0LCBzcmMsIG9sZCwgbmV3KSAgIF9fY3B1c19yZW1hcCgmKGRzdCksICYoc3JjKSwgJihvbGQpLCAmKG5ldyksIE5SX0NQVVMpCisjaWYgTlJfQ1BVUyA+IDEKKyNkZWZpbmUgZm9yX2VhY2hfY3B1X21hc2soY3B1LCBtYXNrKSAgIGZvciAoKGNwdSkgPSBmaXJzdF9jcHUobWFzayk7ICAgKGNwdSkgPCBOUl9DUFVTOyAgIChjcHUpID0gbmV4dF9jcHUoKGNwdSksIChtYXNrKSkpCisjZWxzZQorI2RlZmluZSBmb3JfZWFjaF9jcHVfbWFzayhjcHUsIG1hc2spICAgZm9yICgoY3B1KSA9IDA7IChjcHUpIDwgMTsgKGNwdSkrKywgKHZvaWQpbWFzaykKKyNlbmRpZgorCisjaWYgTlJfQ1BVUyA+IDEKKyNkZWZpbmUgbnVtX29ubGluZV9jcHVzKCkgY3B1c193ZWlnaHQoY3B1X29ubGluZV9tYXApCisjZGVmaW5lIG51bV9wb3NzaWJsZV9jcHVzKCkgY3B1c193ZWlnaHQoY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgbnVtX3ByZXNlbnRfY3B1cygpIGNwdXNfd2VpZ2h0KGNwdV9wcmVzZW50X21hcCkKKyNkZWZpbmUgY3B1X29ubGluZShjcHUpIGNwdV9pc3NldCgoY3B1KSwgY3B1X29ubGluZV9tYXApCisjZGVmaW5lIGNwdV9wb3NzaWJsZShjcHUpIGNwdV9pc3NldCgoY3B1KSwgY3B1X3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgY3B1X3ByZXNlbnQoY3B1KSBjcHVfaXNzZXQoKGNwdSksIGNwdV9wcmVzZW50X21hcCkKKyNlbHNlCisjZGVmaW5lIG51bV9vbmxpbmVfY3B1cygpIDEKKyNkZWZpbmUgbnVtX3Bvc3NpYmxlX2NwdXMoKSAxCisjZGVmaW5lIG51bV9wcmVzZW50X2NwdXMoKSAxCisjZGVmaW5lIGNwdV9vbmxpbmUoY3B1KSAoKGNwdSkgPT0gMCkKKyNkZWZpbmUgY3B1X3Bvc3NpYmxlKGNwdSkgKChjcHUpID09IDApCisjZGVmaW5lIGNwdV9wcmVzZW50KGNwdSkgKChjcHUpID09IDApCisjZW5kaWYKKworI2RlZmluZSBoaWdoZXN0X3Bvc3NpYmxlX3Byb2Nlc3Nvcl9pZCgpIDAKKyNkZWZpbmUgYW55X29ubGluZV9jcHUobWFzaykgMAorCisjZGVmaW5lIGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcG9zc2libGVfbWFwKQorI2RlZmluZSBmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkgZm9yX2VhY2hfY3B1X21hc2soKGNwdSksIGNwdV9vbmxpbmVfbWFwKQorI2RlZmluZSBmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIGZvcl9lYWNoX2NwdV9tYXNrKChjcHUpLCBjcHVfcHJlc2VudF9tYXApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvY3R5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NjQ0ZDEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2N0eXBlLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfQ1RZUEVfSAorI2RlZmluZSBfTElOVVhfQ1RZUEVfSAorCisjZGVmaW5lIF9VIDB4MDEgIAorI2RlZmluZSBfTCAweDAyICAKKyNkZWZpbmUgX0QgMHgwNCAgCisjZGVmaW5lIF9DIDB4MDggIAorI2RlZmluZSBfUCAweDEwICAKKyNkZWZpbmUgX1MgMHgyMCAgCisjZGVmaW5lIF9YIDB4NDAgIAorI2RlZmluZSBfU1AgMHg4MCAgCisKKyNkZWZpbmUgX19pc21hc2soeCkgKF9jdHlwZVsoaW50KSh1bnNpZ25lZCBjaGFyKSh4KV0pCisKKyNkZWZpbmUgaXNhbG51bShjKSAoKF9faXNtYXNrKGMpJihfVXxfTHxfRCkpICE9IDApCisjZGVmaW5lIGlzYWxwaGEoYykgKChfX2lzbWFzayhjKSYoX1V8X0wpKSAhPSAwKQorI2RlZmluZSBpc2NudHJsKGMpICgoX19pc21hc2soYykmKF9DKSkgIT0gMCkKKyNkZWZpbmUgaXNkaWdpdChjKSAoKF9faXNtYXNrKGMpJihfRCkpICE9IDApCisjZGVmaW5lIGlzZ3JhcGgoYykgKChfX2lzbWFzayhjKSYoX1B8X1V8X0x8X0QpKSAhPSAwKQorI2RlZmluZSBpc2xvd2VyKGMpICgoX19pc21hc2soYykmKF9MKSkgIT0gMCkKKyNkZWZpbmUgaXNwcmludChjKSAoKF9faXNtYXNrKGMpJihfUHxfVXxfTHxfRHxfU1ApKSAhPSAwKQorI2RlZmluZSBpc3B1bmN0KGMpICgoX19pc21hc2soYykmKF9QKSkgIT0gMCkKKyNkZWZpbmUgaXNzcGFjZShjKSAoKF9faXNtYXNrKGMpJihfUykpICE9IDApCisjZGVmaW5lIGlzdXBwZXIoYykgKChfX2lzbWFzayhjKSYoX1UpKSAhPSAwKQorI2RlZmluZSBpc3hkaWdpdChjKSAoKF9faXNtYXNrKGMpJihfRHxfWCkpICE9IDApCisKKyNkZWZpbmUgaXNhc2NpaShjKSAoKCh1bnNpZ25lZCBjaGFyKShjKSk8PTB4N2YpCisjZGVmaW5lIHRvYXNjaWkoYykgKCgodW5zaWduZWQgY2hhcikoYykpJjB4N2YpCisKKyNkZWZpbmUgdG9sb3dlcihjKSBfX3RvbG93ZXIoYykKKyNkZWZpbmUgdG91cHBlcihjKSBfX3RvdXBwZXIoYykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RjY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kY2NwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUzMzc3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kY2NwLmgKQEAgLTAsMCArMSwxMzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0RDQ1BfSAorI2RlZmluZSBfTElOVVhfRENDUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworc3RydWN0IGRjY3BfaGRyIHsKKyBfX2JlMTYgZGNjcGhfc3BvcnQsCisgZGNjcGhfZHBvcnQ7CisgX191OCBkY2NwaF9kb2ZmOworI2lmZGVmIF9fTElUVExFX0VORElBTl9CSVRGSUVMRAorIF9fdTggZGNjcGhfY3Njb3Y6NCwKKyBkY2NwaF9jY3ZhbDo0OworI2VsaWYgZGVmaW5lZChfX0JJR19FTkRJQU5fQklURklFTEQpCisgX191OCBkY2NwaF9jY3ZhbDo0LAorIGRjY3BoX2NzY292OjQ7CisjZWxzZQorI2Vycm9yICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgorI2VuZGlmCisgX191MTYgZGNjcGhfY2hlY2tzdW07CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisgX191OCBkY2NwaF94OjEsCisgZGNjcGhfdHlwZTo0LAorIGRjY3BoX3Jlc2VydmVkOjM7CisjZWxpZiBkZWZpbmVkKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IGRjY3BoX3Jlc2VydmVkOjMsCisgZGNjcGhfdHlwZTo0LAorIGRjY3BoX3g6MTsKKyNlbHNlCisjZXJyb3IgIkFkanVzdCB5b3VyIDxhc20vYnl0ZW9yZGVyLmg+IGRlZmluZXMiCisjZW5kaWYKKyBfX3U4IGRjY3BoX3NlcTI7CisgX19iZTE2IGRjY3BoX3NlcTsKK307CisKK3N0cnVjdCBkY2NwX2hkcl9leHQgeworIF9fYmUzMiBkY2NwaF9zZXFfbG93OworfTsKKworc3RydWN0IGRjY3BfaGRyX3JlcXVlc3QgeworIF9fYmUzMiBkY2NwaF9yZXFfc2VydmljZTsKK307CisKK3N0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyB7CisgX19iZTE2IGRjY3BoX3Jlc2VydmVkMTsKKyBfX2JlMTYgZGNjcGhfYWNrX25yX2hpZ2g7CisgX19iZTMyIGRjY3BoX2Fja19ucl9sb3c7Cit9OworCitzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UgeworIHN0cnVjdCBkY2NwX2hkcl9hY2tfYml0cyBkY2NwaF9yZXNwX2FjazsKKyBfX2JlMzIgZGNjcGhfcmVzcF9zZXJ2aWNlOworfTsKKworc3RydWN0IGRjY3BfaGRyX3Jlc2V0IHsKKyBzdHJ1Y3QgZGNjcF9oZHJfYWNrX2JpdHMgZGNjcGhfcmVzZXRfYWNrOworIF9fdTggZGNjcGhfcmVzZXRfY29kZSwKKyBkY2NwaF9yZXNldF9kYXRhWzNdOworfTsKKworZW51bSBkY2NwX3BrdF90eXBlIHsKKyBEQ0NQX1BLVF9SRVFVRVNUID0gMCwKKyBEQ0NQX1BLVF9SRVNQT05TRSwKKyBEQ0NQX1BLVF9EQVRBLAorIERDQ1BfUEtUX0FDSywKKyBEQ0NQX1BLVF9EQVRBQUNLLAorIERDQ1BfUEtUX0NMT1NFUkVRLAorIERDQ1BfUEtUX0NMT1NFLAorIERDQ1BfUEtUX1JFU0VULAorIERDQ1BfUEtUX1NZTkMsCisgRENDUF9QS1RfU1lOQ0FDSywKKyBEQ0NQX1BLVF9JTlZBTElELAorfTsKKworI2RlZmluZSBEQ0NQX05SX1BLVF9UWVBFUyBEQ0NQX1BLVF9JTlZBTElECisKK2VudW0geworIERDQ1BPX1BBRERJTkcgPSAwLAorIERDQ1BPX01BTkRBVE9SWSA9IDEsCisgRENDUE9fTUlOX1JFU0VSVkVEID0gMywKKyBEQ0NQT19NQVhfUkVTRVJWRUQgPSAzMSwKKyBEQ0NQT19DSEFOR0VfTCA9IDMyLAorIERDQ1BPX0NPTkZJUk1fTCA9IDMzLAorIERDQ1BPX0NIQU5HRV9SID0gMzQsCisgRENDUE9fQ09ORklSTV9SID0gMzUsCisgRENDUE9fTkRQX0NPVU5UID0gMzcsCisgRENDUE9fQUNLX1ZFQ1RPUl8wID0gMzgsCisgRENDUE9fQUNLX1ZFQ1RPUl8xID0gMzksCisgRENDUE9fVElNRVNUQU1QID0gNDEsCisgRENDUE9fVElNRVNUQU1QX0VDSE8gPSA0MiwKKyBEQ0NQT19FTEFQU0VEX1RJTUUgPSA0MywKKyBEQ0NQT19NQVggPSA0NSwKKyBEQ0NQT19NSU5fQ0NJRF9TUEVDSUZJQyA9IDEyOCwKKyBEQ0NQT19NQVhfQ0NJRF9TUEVDSUZJQyA9IDI1NSwKK307CisKK2VudW0geworIERDQ1BGX1JFU0VSVkVEID0gMCwKKyBEQ0NQRl9DQ0lEID0gMSwKKyBEQ0NQRl9TRVFVRU5DRV9XSU5ET1cgPSAzLAorIERDQ1BGX0FDS19SQVRJTyA9IDUsCisgRENDUEZfU0VORF9BQ0tfVkVDVE9SID0gNiwKKyBEQ0NQRl9TRU5EX05EUF9DT1VOVCA9IDcsCisKKyBEQ0NQRl9NSU5fQ0NJRF9TUEVDSUZJQyA9IDEyOCwKKyBEQ0NQRl9NQVhfQ0NJRF9TUEVDSUZJQyA9IDI1NSwKK307CisKK3N0cnVjdCBkY2NwX3NvX2ZlYXQgeworIF9fdTggZGNjcHNmX2ZlYXQ7CisgX191OCAqZGNjcHNmX3ZhbDsKKyBfX3U4IGRjY3BzZl9sZW47Cit9OworCisjZGVmaW5lIERDQ1BfU09DS09QVF9QQUNLRVRfU0laRSAxCisjZGVmaW5lIERDQ1BfU09DS09QVF9TRVJWSUNFIDIKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NIQU5HRV9MIDMKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NIQU5HRV9SIDQKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NDSURfUlhfSU5GTyAxMjgKKyNkZWZpbmUgRENDUF9TT0NLT1BUX0NDSURfVFhfSU5GTyAxOTIKKworI2RlZmluZSBEQ0NQX1NFUlZJQ0VfTElTVF9NQVhfTEVOIDMyCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlYnVnX2xvY2tzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZGVidWdfbG9ja3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDU1ZmNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlYnVnX2xvY2tzLmgKQEAgLTAsMCArMSwyNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0RFQlVHX0xPQ0tJTkdfSAorI2RlZmluZSBfX0xJTlVYX0RFQlVHX0xPQ0tJTkdfSAorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNkZWZpbmUgX1JFVF9JUF8gKHVuc2lnbmVkIGxvbmcpX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApCisjZGVmaW5lIF9USElTX0lQXyAoeyBfX2xhYmVsX18gX19oZXJlOyBfX2hlcmU6ICh1bnNpZ25lZCBsb25nKSYmX19oZXJlOyB9KQorCisjZGVmaW5lIERFQlVHX0xPQ0tTX1dBUk5fT04oYykgICh7ICAgaW50IF9fcmV0ID0gMDsgICAgIGlmICh1bmxpa2VseShjKSkgeyAgIGlmIChkZWJ1Z19sb2Nrc19vZmYoKSkgICBXQVJOX09OKDEpOyAgIF9fcmV0ID0gMTsgICB9ICAgX19yZXQ7ICB9KQorCisjZGVmaW5lIFNNUF9ERUJVR19MT0NLU19XQVJOX09OKGMpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBsb2NraW5nX3NlbGZ0ZXN0KCkgZG8geyB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWxheS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RlbGF5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzMmI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZWxheS5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0RFTEFZX0gKKyNkZWZpbmUgX0xJTlVYX0RFTEFZX0gKKworI2luY2x1ZGUgPGFzbS9kZWxheS5oPgorCisjaWZuZGVmIE1BWF9VREVMQVlfTVMKKyNkZWZpbmUgTUFYX1VERUxBWV9NUyA1CisjZW5kaWYKKworI2lmbmRlZiBtZGVsYXkKKyNkZWZpbmUgbWRlbGF5KG4pICggIChfX2J1aWx0aW5fY29uc3RhbnRfcChuKSAmJiAobik8PU1BWF9VREVMQVlfTVMpID8gdWRlbGF5KChuKSoxMDAwKSA6ICAgKHt1bnNpZ25lZCBsb25nIF9fbXM9KG4pOyB3aGlsZSAoX19tcy0tKSB1ZGVsYXkoMTAwMCk7fSkpCisjZW5kaWYKKworI2lmbmRlZiBuZGVsYXkKKyNkZWZpbmUgbmRlbGF5KHgpIHVkZWxheSgoKHgpKzk5OSkvMTAwMCkKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NDE5MzIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RldmljZS5oCkBAIC0wLDAgKzEsMjIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ERVZJQ0VfSF8KKyNkZWZpbmUgX0RFVklDRV9IXworCisjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcG0uaD4KKyNpbmNsdWRlIDxhc20vc2VtYXBob3JlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIERFVklDRV9OQU1FX1NJWkUgNTAKKyNkZWZpbmUgREVWSUNFX05BTUVfSEFMRiBfX3N0cmluZ2lmeSgyMCkgIAorI2RlZmluZSBERVZJQ0VfSURfU0laRSAzMgorI2RlZmluZSBCVVNfSURfU0laRSBLT0JKX05BTUVfTEVOCisKK3N0cnVjdCBkZXZpY2U7CitzdHJ1Y3QgZGV2aWNlX2RyaXZlcjsKK3N0cnVjdCBjbGFzczsKK3N0cnVjdCBjbGFzc19kZXZpY2U7CisKK3N0cnVjdCBidXNfdHlwZSB7CisgY29uc3QgY2hhciAqIG5hbWU7CisKKyBzdHJ1Y3Qgc3Vic3lzdGVtIHN1YnN5czsKKyBzdHJ1Y3Qga3NldCBkcml2ZXJzOworIHN0cnVjdCBrc2V0IGRldmljZXM7Cisgc3RydWN0IGtsaXN0IGtsaXN0X2RldmljZXM7Cisgc3RydWN0IGtsaXN0IGtsaXN0X2RyaXZlcnM7CisKKyBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSAqIGJ1c19hdHRyczsKKyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqIGRldl9hdHRyczsKKyBzdHJ1Y3QgZHJpdmVyX2F0dHJpYnV0ZSAqIGRydl9hdHRyczsKKworIGludCAoKm1hdGNoKShzdHJ1Y3QgZGV2aWNlICogZGV2LCBzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqIGRydik7CisgaW50ICgqdWV2ZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAorIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOworIGludCAoKnByb2JlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyBpbnQgKCpyZW1vdmUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IGRldmljZSAqIGRldik7CisgaW50ICgqc3VzcGVuZCkoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyBpbnQgKCpyZXN1bWUpKHN0cnVjdCBkZXZpY2UgKiBkZXYpOworfTsKKworc3RydWN0IGRldmljZSAqIGJ1c19maW5kX2RldmljZShzdHJ1Y3QgYnVzX3R5cGUgKmJ1cywgc3RydWN0IGRldmljZSAqc3RhcnQsCisgdm9pZCAqZGF0YSwgaW50ICgqbWF0Y2gpKHN0cnVjdCBkZXZpY2UgKiwgdm9pZCAqKSk7CisKK3N0cnVjdCBidXNfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBidXNfdHlwZSAqLCBjaGFyICogYnVmKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBidXNfdHlwZSAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOworfTsKKworI2RlZmluZSBCVVNfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgYnVzX2F0dHJpYnV0ZSBidXNfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworc3RydWN0IGRldmljZV9kcml2ZXIgeworIGNvbnN0IGNoYXIgKiBuYW1lOworIHN0cnVjdCBidXNfdHlwZSAqIGJ1czsKKworIHN0cnVjdCBjb21wbGV0aW9uIHVubG9hZGVkOworIHN0cnVjdCBrb2JqZWN0IGtvYmo7Cisgc3RydWN0IGtsaXN0IGtsaXN0X2RldmljZXM7Cisgc3RydWN0IGtsaXN0X25vZGUga25vZGVfYnVzOworCisgc3RydWN0IG1vZHVsZSAqIG93bmVyOworCisgaW50ICgqcHJvYmUpIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyBpbnQgKCpyZW1vdmUpIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyB2b2lkICgqc2h1dGRvd24pIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKKyBpbnQgKCpzdXNwZW5kKSAoc3RydWN0IGRldmljZSAqIGRldiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyBpbnQgKCpyZXN1bWUpIChzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK307CisKK3N0cnVjdCBkcml2ZXJfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2VfZHJpdmVyICosIGNoYXIgKiBidWYpOworIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IGRldmljZV9kcml2ZXIgKiwgY29uc3QgY2hhciAqIGJ1Ziwgc2l6ZV90IGNvdW50KTsKK307CisKKyNkZWZpbmUgRFJJVkVSX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IGRyaXZlcl9hdHRyaWJ1dGUgZHJpdmVyX2F0dHJfIyNfbmFtZSA9IF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK3N0cnVjdCBkZXZpY2UgKiBkcml2ZXJfZmluZF9kZXZpY2Uoc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiwKKyBzdHJ1Y3QgZGV2aWNlICpzdGFydCwgdm9pZCAqZGF0YSwKKyBpbnQgKCptYXRjaCkoc3RydWN0IGRldmljZSAqLCB2b2lkICopKTsKKworc3RydWN0IGNsYXNzIHsKKyBjb25zdCBjaGFyICogbmFtZTsKKyBzdHJ1Y3QgbW9kdWxlICogb3duZXI7CisKKyBzdHJ1Y3Qgc3Vic3lzdGVtIHN1YnN5czsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOworIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGludGVyZmFjZXM7Cisgc3RydWN0IHNlbWFwaG9yZSBzZW07CisKKyBzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlICogY2xhc3NfYXR0cnM7Cisgc3RydWN0IGNsYXNzX2RldmljZV9hdHRyaWJ1dGUgKiBjbGFzc19kZXZfYXR0cnM7CisKKyBpbnQgKCp1ZXZlbnQpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldiwgY2hhciAqKmVudnAsCisgaW50IG51bV9lbnZwLCBjaGFyICpidWZmZXIsIGludCBidWZmZXJfc2l6ZSk7CisKKyB2b2lkICgqcmVsZWFzZSkoc3RydWN0IGNsYXNzX2RldmljZSAqZGV2KTsKKyB2b2lkICgqY2xhc3NfcmVsZWFzZSkoc3RydWN0IGNsYXNzICpjbGFzcyk7Cit9OworCitzdHJ1Y3QgY2xhc3NfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBjbGFzcyAqLCBjaGFyICogYnVmKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBjbGFzcyAqLCBjb25zdCBjaGFyICogYnVmLCBzaXplX3QgY291bnQpOworfTsKKworI2RlZmluZSBDTEFTU19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgIHN0cnVjdCBjbGFzc19hdHRyaWJ1dGUgY2xhc3NfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgCisKK3N0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgY2hhciAqIGJ1Zik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIGNvbnN0IGNoYXIgKiBidWYsIHNpemVfdCBjb3VudCk7Cit9OworCisjZGVmaW5lIENMQVNTX0RFVklDRV9BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkgIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIGNsYXNzX2RldmljZV9hdHRyXyMjX25hbWUgPSAgIF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpCisKK3N0cnVjdCBjbGFzc19kZXZpY2UgeworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKKworIHN0cnVjdCBrb2JqZWN0IGtvYmo7Cisgc3RydWN0IGNsYXNzICogY2xhc3M7CisgZGV2X3QgZGV2dDsKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlX2F0dHJpYnV0ZSAqZGV2dF9hdHRyOworIHN0cnVjdCBjbGFzc19kZXZpY2VfYXR0cmlidXRlIHVldmVudF9hdHRyOworIHN0cnVjdCBkZXZpY2UgKiBkZXY7Cisgdm9pZCAqIGNsYXNzX2RhdGE7Cisgc3RydWN0IGNsYXNzX2RldmljZSAqcGFyZW50OworIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKiogZ3JvdXBzOworCisgdm9pZCAoKnJlbGVhc2UpKHN0cnVjdCBjbGFzc19kZXZpY2UgKmRldik7CisgaW50ICgqdWV2ZW50KShzdHJ1Y3QgY2xhc3NfZGV2aWNlICpkZXYsIGNoYXIgKiplbnZwLAorIGludCBudW1fZW52cCwgY2hhciAqYnVmZmVyLCBpbnQgYnVmZmVyX3NpemUpOworIGNoYXIgY2xhc3NfaWRbQlVTX0lEX1NJWkVdOworfTsKKworc3RydWN0IGNsYXNzX2ludGVyZmFjZSB7Cisgc3RydWN0IGxpc3RfaGVhZCBub2RlOworIHN0cnVjdCBjbGFzcyAqY2xhc3M7CisKKyBpbnQgKCphZGQpIChzdHJ1Y3QgY2xhc3NfZGV2aWNlICosIHN0cnVjdCBjbGFzc19pbnRlcmZhY2UgKik7Cisgdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBjbGFzc19kZXZpY2UgKiwgc3RydWN0IGNsYXNzX2ludGVyZmFjZSAqKTsKK307CisKK3N0cnVjdCBkZXZpY2VfYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgY2hhciAqYnVmKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsCisgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpOworfTsKKworI2RlZmluZSBERVZJQ0VfQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZfYXR0cl8jI19uYW1lID0gX19BVFRSKF9uYW1lLF9tb2RlLF9zaG93LF9zdG9yZSkKKworc3RydWN0IGRldmljZSB7Cisgc3RydWN0IGtsaXN0IGtsaXN0X2NoaWxkcmVuOworIHN0cnVjdCBrbGlzdF9ub2RlIGtub2RlX3BhcmVudDsKKyBzdHJ1Y3Qga2xpc3Rfbm9kZSBrbm9kZV9kcml2ZXI7Cisgc3RydWN0IGtsaXN0X25vZGUga25vZGVfYnVzOworIHN0cnVjdCBkZXZpY2UgKiBwYXJlbnQ7CisKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworIGNoYXIgYnVzX2lkW0JVU19JRF9TSVpFXTsKKyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSB1ZXZlbnRfYXR0cjsKKyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqZGV2dF9hdHRyOworCisgc3RydWN0IHNlbWFwaG9yZSBzZW07CisKKyBzdHJ1Y3QgYnVzX3R5cGUgKiBidXM7Cisgc3RydWN0IGRldmljZV9kcml2ZXIgKmRyaXZlcjsKKyB2b2lkICpkcml2ZXJfZGF0YTsKKyB2b2lkICpwbGF0Zm9ybV9kYXRhOworIHZvaWQgKmZpcm13YXJlX2RhdGE7Cisgc3RydWN0IGRldl9wbV9pbmZvIHBvd2VyOworCisgdTY0ICpkbWFfbWFzazsKKyB1NjQgY29oZXJlbnRfZG1hX21hc2s7CisKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRtYV9wb29sczsKKworIHN0cnVjdCBkbWFfY29oZXJlbnRfbWVtICpkbWFfbWVtOworCisgc3RydWN0IGxpc3RfaGVhZCBub2RlOworIHN0cnVjdCBjbGFzcyAqY2xhc3M7CisgZGV2X3QgZGV2dDsKKworIHZvaWQgKCpyZWxlYXNlKShzdHJ1Y3QgZGV2aWNlICogZGV2KTsKK307CisKKyNkZWZpbmUgZGV2X3ByaW50ayhsZXZlbCwgZGV2LCBmb3JtYXQsIGFyZy4uLikgICBwcmludGsobGV2ZWwgIiVzICVzOiAiIGZvcm1hdCAsIGRldl9kcml2ZXJfc3RyaW5nKGRldikgLCAoZGV2KS0+YnVzX2lkICwgIyMgYXJnKQorCisjaWZkZWYgREVCVUcKKyNkZWZpbmUgZGV2X2RiZyhkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9ERUJVRyAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKyNlbHNlCisjZGVmaW5lIGRldl9kYmcoZGV2LCBmb3JtYXQsIGFyZy4uLikgZG8geyAodm9pZCkoZGV2KTsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIGRldl9lcnIoZGV2LCBmb3JtYXQsIGFyZy4uLikgICBkZXZfcHJpbnRrKEtFUk5fRVJSICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSBkZXZfaW5mbyhkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9JTkZPICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSBkZXZfd2FybihkZXYsIGZvcm1hdCwgYXJnLi4uKSAgIGRldl9wcmludGsoS0VSTl9XQVJOSU5HICwgZGV2ICwgZm9ybWF0ICwgIyMgYXJnKQorI2RlZmluZSBkZXZfbm90aWNlKGRldiwgZm9ybWF0LCBhcmcuLi4pICAgZGV2X3ByaW50ayhLRVJOX05PVElDRSAsIGRldiAsIGZvcm1hdCAsICMjIGFyZykKKworI2RlZmluZSBNT0RVTEVfQUxJQVNfQ0hBUkRFVihtYWpvcixtaW5vcikgICBNT0RVTEVfQUxJQVMoImNoYXItbWFqb3ItIiBfX3N0cmluZ2lmeShtYWpvcikgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKKyNkZWZpbmUgTU9EVUxFX0FMSUFTX0NIQVJERVZfTUFKT1IobWFqb3IpICAgTU9EVUxFX0FMSUFTKCJjaGFyLW1ham9yLSIgX19zdHJpbmdpZnkobWFqb3IpICItKiIpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kaXJlbnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kaXJlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGFjZTE4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RpcmVudC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0RJUkVOVF9ICisjZGVmaW5lIF9MSU5VWF9ESVJFTlRfSAorCitzdHJ1Y3QgZGlyZW50IHsKKyBsb25nIGRfaW5vOworIF9fa2VybmVsX29mZl90IGRfb2ZmOworIHVuc2lnbmVkIHNob3J0IGRfcmVjbGVuOworIGNoYXIgZF9uYW1lWzI1Nl07Cit9OworCitzdHJ1Y3QgZGlyZW50NjQgeworIF9fdTY0IGRfaW5vOworIF9fczY0IGRfb2ZmOworIHVuc2lnbmVkIHNob3J0IGRfcmVjbGVuOworIHVuc2lnbmVkIGNoYXIgZF90eXBlOworIGNoYXIgZF9uYW1lWzI1Nl07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWEtbWFwcGluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RtYS1tYXBwaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQzMjI1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWEtbWFwcGluZy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0FTTV9MSU5VWF9ETUFfTUFQUElOR19ICisjZGVmaW5lIF9BU01fTElOVVhfRE1BX01BUFBJTkdfSAorCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvZXJyLmg+CisKK2VudW0gZG1hX2RhdGFfZGlyZWN0aW9uIHsKKyBETUFfQklESVJFQ1RJT05BTCA9IDAsCisgRE1BX1RPX0RFVklDRSA9IDEsCisgRE1BX0ZST01fREVWSUNFID0gMiwKKyBETUFfTk9ORSA9IDMsCit9OworCisjZGVmaW5lIERNQV82NEJJVF9NQVNLIDB4ZmZmZmZmZmZmZmZmZmZmZlVMTAorI2RlZmluZSBETUFfNDhCSVRfTUFTSyAweDAwMDBmZmZmZmZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzQwQklUX01BU0sgMHgwMDAwMDBmZmZmZmZmZmZmVUxMCisjZGVmaW5lIERNQV8zOUJJVF9NQVNLIDB4MDAwMDAwN2ZmZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMzJCSVRfTUFTSyAweDAwMDAwMDAwZmZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzMxQklUX01BU0sgMHgwMDAwMDAwMDdmZmZmZmZmVUxMCisjZGVmaW5lIERNQV8zMEJJVF9NQVNLIDB4MDAwMDAwMDAzZmZmZmZmZlVMTAorI2RlZmluZSBETUFfMjlCSVRfTUFTSyAweDAwMDAwMDAwMWZmZmZmZmZVTEwKKyNkZWZpbmUgRE1BXzI4QklUX01BU0sgMHgwMDAwMDAwMDBmZmZmZmZmVUxMCisjZGVmaW5lIERNQV8yNEJJVF9NQVNLIDB4MDAwMDAwMDAwMGZmZmZmZlVMTAorCisjaW5jbHVkZSA8YXNtL2RtYS1tYXBwaW5nLmg+CisKKyNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CisjZGVmaW5lIGRtYV9zeW5jX3NnIGRtYV9zeW5jX3NnX2Zvcl9jcHUKKworI2RlZmluZSBETUFfTUVNT1JZX01BUCAweDAxCisjZGVmaW5lIERNQV9NRU1PUllfSU8gMHgwMgorI2RlZmluZSBETUFfTUVNT1JZX0lOQ0xVREVTX0NISUxEUkVOIDB4MDQKKyNkZWZpbmUgRE1BX01FTU9SWV9FWENMVVNJVkUgMHgwOAorCisjaWZuZGVmIEFSQ0hfSEFTX0RNQV9ERUNMQVJFX0NPSEVSRU5UX01FTU9SWQorI2VuZGlmCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWFlbmdpbmUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9kbWFlbmdpbmUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NDlmZWE5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2RtYWVuZ2luZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgRE1BRU5HSU5FX0gKKyNkZWZpbmUgRE1BRU5HSU5FX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2Rpci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19kaXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YmUyNzYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19kaXIuaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fRUZTX0RJUl9IX18KKyNkZWZpbmUgX19FRlNfRElSX0hfXworCisjZGVmaW5lIEVGU19ESVJCU0laRV9CSVRTIEVGU19CTE9DS1NJWkVfQklUUworI2RlZmluZSBFRlNfRElSQlNJWkUgKDEgPDwgRUZTX0RJUkJTSVpFX0JJVFMpCisKK3N0cnVjdCBlZnNfZGVudHJ5IHsKKyBfX2JlMzIgaW5vZGU7CisgdW5zaWduZWQgY2hhciBuYW1lbGVuOworIGNoYXIgbmFtZVszXTsKK307CisKKyNkZWZpbmUgRUZTX0RFTlRTSVpFIChzaXplb2Yoc3RydWN0IGVmc19kZW50cnkpIC0gMyArIDEpCisjZGVmaW5lIEVGU19NQVhOQU1FTEVOICgoMSA8PCAoc2l6ZW9mKGNoYXIpICogOCkpIC0gMSkKKworI2RlZmluZSBFRlNfRElSQkxLX0hFQURFUlNJWkUgNAorI2RlZmluZSBFRlNfRElSQkxLX01BR0lDIDB4YmVlZiAgCisKK3N0cnVjdCBlZnNfZGlyIHsKKyBfX2JlMTYgbWFnaWM7CisgdW5zaWduZWQgY2hhciBmaXJzdHVzZWQ7CisgdW5zaWduZWQgY2hhciBzbG90czsKKworIHVuc2lnbmVkIGNoYXIgc3BhY2VbRUZTX0RJUkJTSVpFIC0gRUZTX0RJUkJMS19IRUFERVJTSVpFXTsKK307CisKKyNkZWZpbmUgRUZTX01BWEVOVFMgICAoKEVGU19ESVJCU0laRSAtIEVGU19ESVJCTEtfSEVBREVSU0laRSkgLyAgIChFRlNfREVOVFNJWkUgKyBzaXplb2YoY2hhcikpKQorCisjZGVmaW5lIEVGU19TTE9UQVQoZGlyLCBzbG90KSBFRlNfUkVBTE9GRigoZGlyKS0+c3BhY2Vbc2xvdF0pCisKKyNkZWZpbmUgRUZTX1JFQUxPRkYob2Zmc2V0KSAoKG9mZnNldCA8PCAxKSkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ4OGQyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lZnNfZnNfaS5oCkBAIC0wLDAgKzEsNjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19FRlNfRlNfSV9IX18KKyNkZWZpbmUgX19FRlNfRlNfSV9IX18KKwordHlwZWRlZiBpbnQzMl90IGVmc19ibG9ja190OwordHlwZWRlZiB1aW50MzJfdCBlZnNfaW5vX3Q7CisKKyNkZWZpbmUgRUZTX0RJUkVDVEVYVEVOVFMgMTIKKwordHlwZWRlZiB1bmlvbiBleHRlbnRfdSB7CisgdW5zaWduZWQgY2hhciByYXdbOF07Cisgc3RydWN0IGV4dGVudF9zIHsKKyB1bnNpZ25lZCBpbnQgZXhfbWFnaWM6ODsKKyB1bnNpZ25lZCBpbnQgZXhfYm46MjQ7CisgdW5zaWduZWQgaW50IGV4X2xlbmd0aDo4OworIHVuc2lnbmVkIGludCBleF9vZmZzZXQ6MjQ7CisgfSBjb29rZWQ7Cit9IGVmc19leHRlbnQ7CisKK3R5cGVkZWYgc3RydWN0IGVkZXZzIHsKKyBfX2JlMTYgb2RldjsKKyBfX2JlMzIgbmRldjsKK30gZWZzX2RldnM7CisKK3N0cnVjdCBlZnNfZGlub2RlIHsKKyBfX2JlMTYgZGlfbW9kZTsKKyBfX2JlMTYgZGlfbmxpbms7CisgX19iZTE2IGRpX3VpZDsKKyBfX2JlMTYgZGlfZ2lkOworIF9fYmUzMiBkaV9zaXplOworIF9fYmUzMiBkaV9hdGltZTsKKyBfX2JlMzIgZGlfbXRpbWU7CisgX19iZTMyIGRpX2N0aW1lOworIF9fYmUzMiBkaV9nZW47CisgX19iZTE2IGRpX251bWV4dGVudHM7CisgdV9jaGFyIGRpX3ZlcnNpb247CisgdV9jaGFyIGRpX3NwYXJlOworIHVuaW9uIGRpX2FkZHIgeworIGVmc19leHRlbnQgZGlfZXh0ZW50c1tFRlNfRElSRUNURVhURU5UU107CisgZWZzX2RldnMgZGlfZGV2OworIH0gZGlfdTsKK307CisKK3N0cnVjdCBlZnNfaW5vZGVfaW5mbyB7CisgaW50IG51bWV4dGVudHM7CisgaW50IGxhc3RleHRlbnQ7CisKKyBlZnNfZXh0ZW50IGV4dGVudHNbRUZTX0RJUkVDVEVYVEVOVFNdOworIHN0cnVjdCBpbm9kZSB2ZnNfaW5vZGU7Cit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19zYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Vmc19mc19zYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3OTYwYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWZzX2ZzX3NiLmgKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0VGU19GU19TQl9IX18KKyNkZWZpbmUgX19FRlNfRlNfU0JfSF9fCisKKyNkZWZpbmUgRUZTX1NVUEVSX01BR0lDIDB4NDE0QTUzCisKKyNkZWZpbmUgRUZTX01BR0lDIDB4MDcyOTU5CisjZGVmaW5lIEVGU19ORVdNQUdJQyAweDA3Mjk1YQorCisjZGVmaW5lIElTX0VGU19NQUdJQyh4KSAoKHggPT0gRUZTX01BR0lDKSB8fCAoeCA9PSBFRlNfTkVXTUFHSUMpKQorCisjZGVmaW5lIEVGU19TVVBFUiAxCisjZGVmaW5lIEVGU19ST09USU5PREUgMgorCitzdHJ1Y3QgZWZzX3N1cGVyIHsKKyBfX2JlMzIgZnNfc2l6ZTsKKyBfX2JlMzIgZnNfZmlyc3RjZzsKKyBfX2JlMzIgZnNfY2dmc2l6ZTsKKyBfX2JlMTYgZnNfY2dpc2l6ZTsKKyBfX2JlMTYgZnNfc2VjdG9yczsKKyBfX2JlMTYgZnNfaGVhZHM7CisgX19iZTE2IGZzX25jZzsKKyBfX2JlMTYgZnNfZGlydHk7CisgX19iZTMyIGZzX3RpbWU7CisgX19iZTMyIGZzX21hZ2ljOworIGNoYXIgZnNfZm5hbWVbNl07CisgY2hhciBmc19mcGFja1s2XTsKKyBfX2JlMzIgZnNfYm1zaXplOworIF9fYmUzMiBmc190ZnJlZTsKKyBfX2JlMzIgZnNfdGlub2RlOworIF9fYmUzMiBmc19ibWJsb2NrOworIF9fYmUzMiBmc19yZXBsc2I7CisgX19iZTMyIGZzX2xhc3RpYWxsb2M7CisgY2hhciBmc19zcGFyZVsyMF07CisgX19iZTMyIGZzX2NoZWNrc3VtOworfTsKKworc3RydWN0IGVmc19zYl9pbmZvIHsKKyBfX3UzMiBmc19tYWdpYzsKKyBfX3UzMiBmc19zdGFydDsKKyBfX3UzMiBmaXJzdF9ibG9jazsKKyBfX3UzMiB0b3RhbF9ibG9ja3M7CisgX191MzIgZ3JvdXBfc2l6ZTsKKyBfX3UzMiBkYXRhX2ZyZWU7CisgX191MzIgaW5vZGVfZnJlZTsKKyBfX3UxNiBpbm9kZV9ibG9ja3M7CisgX191MTYgdG90YWxfZ3JvdXBzOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGV2YXRvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZXZhdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmU3OWNlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGV2YXRvci5oCkBAIC0wLDAgKzEsMTA5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FTEVWQVRPUl9ICisjZGVmaW5lIF9MSU5VWF9FTEVWQVRPUl9ICisKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9tZXJnZV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKiwKKyBzdHJ1Y3QgYmlvICopOworCit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX21lcmdlX3JlcV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKKwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9tZXJnZWRfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CisKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9kaXNwYXRjaF9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQpOworCit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2FkZF9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIGludCAoZWxldmF0b3JfcXVldWVfZW1wdHlfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKik7Cit0eXBlZGVmIHN0cnVjdCByZXF1ZXN0ICooZWxldmF0b3JfcmVxdWVzdF9saXN0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9jb21wbGV0ZWRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiBpbnQgKGVsZXZhdG9yX21heV9xdWV1ZV9mbikgKHJlcXVlc3RfcXVldWVfdCAqLCBpbnQsIHN0cnVjdCBiaW8gKik7CisKK3R5cGVkZWYgaW50IChlbGV2YXRvcl9zZXRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHN0cnVjdCBiaW8gKiwgZ2ZwX3QpOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9wdXRfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwordHlwZWRlZiB2b2lkIChlbGV2YXRvcl9hY3RpdmF0ZV9yZXFfZm4pIChyZXF1ZXN0X3F1ZXVlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2RlYWN0aXZhdGVfcmVxX2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworCit0eXBlZGVmIHZvaWQgKihlbGV2YXRvcl9pbml0X2ZuKSAocmVxdWVzdF9xdWV1ZV90ICosIGVsZXZhdG9yX3QgKik7Cit0eXBlZGVmIHZvaWQgKGVsZXZhdG9yX2V4aXRfZm4pIChlbGV2YXRvcl90ICopOworCitzdHJ1Y3QgZWxldmF0b3Jfb3BzCit7CisgZWxldmF0b3JfbWVyZ2VfZm4gKmVsZXZhdG9yX21lcmdlX2ZuOworIGVsZXZhdG9yX21lcmdlZF9mbiAqZWxldmF0b3JfbWVyZ2VkX2ZuOworIGVsZXZhdG9yX21lcmdlX3JlcV9mbiAqZWxldmF0b3JfbWVyZ2VfcmVxX2ZuOworCisgZWxldmF0b3JfZGlzcGF0Y2hfZm4gKmVsZXZhdG9yX2Rpc3BhdGNoX2ZuOworIGVsZXZhdG9yX2FkZF9yZXFfZm4gKmVsZXZhdG9yX2FkZF9yZXFfZm47CisgZWxldmF0b3JfYWN0aXZhdGVfcmVxX2ZuICplbGV2YXRvcl9hY3RpdmF0ZV9yZXFfZm47CisgZWxldmF0b3JfZGVhY3RpdmF0ZV9yZXFfZm4gKmVsZXZhdG9yX2RlYWN0aXZhdGVfcmVxX2ZuOworCisgZWxldmF0b3JfcXVldWVfZW1wdHlfZm4gKmVsZXZhdG9yX3F1ZXVlX2VtcHR5X2ZuOworIGVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm4gKmVsZXZhdG9yX2NvbXBsZXRlZF9yZXFfZm47CisKKyBlbGV2YXRvcl9yZXF1ZXN0X2xpc3RfZm4gKmVsZXZhdG9yX2Zvcm1lcl9yZXFfZm47CisgZWxldmF0b3JfcmVxdWVzdF9saXN0X2ZuICplbGV2YXRvcl9sYXR0ZXJfcmVxX2ZuOworCisgZWxldmF0b3Jfc2V0X3JlcV9mbiAqZWxldmF0b3Jfc2V0X3JlcV9mbjsKKyBlbGV2YXRvcl9wdXRfcmVxX2ZuICplbGV2YXRvcl9wdXRfcmVxX2ZuOworCisgZWxldmF0b3JfbWF5X3F1ZXVlX2ZuICplbGV2YXRvcl9tYXlfcXVldWVfZm47CisKKyBlbGV2YXRvcl9pbml0X2ZuICplbGV2YXRvcl9pbml0X2ZuOworIGVsZXZhdG9yX2V4aXRfZm4gKmVsZXZhdG9yX2V4aXRfZm47Cisgdm9pZCAoKnRyaW0pKHN0cnVjdCBpb19jb250ZXh0ICopOworfTsKKworI2RlZmluZSBFTFZfTkFNRV9NQVggKDE2KQorCitzdHJ1Y3QgZWx2X2ZzX2VudHJ5IHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc3NpemVfdCAoKnNob3cpKGVsZXZhdG9yX3QgKiwgY2hhciAqKTsKKyBzc2l6ZV90ICgqc3RvcmUpKGVsZXZhdG9yX3QgKiwgY29uc3QgY2hhciAqLCBzaXplX3QpOworfTsKKworc3RydWN0IGVsZXZhdG9yX3R5cGUKK3sKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cisgc3RydWN0IGVsZXZhdG9yX29wcyBvcHM7Cisgc3RydWN0IGVsZXZhdG9yX3R5cGUgKmVsZXZhdG9yX3R5cGU7Cisgc3RydWN0IGVsdl9mc19lbnRyeSAqZWxldmF0b3JfYXR0cnM7CisgY2hhciBlbGV2YXRvcl9uYW1lW0VMVl9OQU1FX01BWF07Cisgc3RydWN0IG1vZHVsZSAqZWxldmF0b3Jfb3duZXI7Cit9OworCitzdHJ1Y3QgZWxldmF0b3JfcXVldWUKK3sKKyBzdHJ1Y3QgZWxldmF0b3Jfb3BzICpvcHM7Cisgdm9pZCAqZWxldmF0b3JfZGF0YTsKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworIHN0cnVjdCBlbGV2YXRvcl90eXBlICplbGV2YXRvcl90eXBlOworIHN0cnVjdCBtdXRleCBzeXNmc19sb2NrOworfTsKKworI2RlZmluZSBFTEVWQVRPUl9OT19NRVJHRSAwCisjZGVmaW5lIEVMRVZBVE9SX0ZST05UX01FUkdFIDEKKyNkZWZpbmUgRUxFVkFUT1JfQkFDS19NRVJHRSAyCisKKyNkZWZpbmUgRUxFVkFUT1JfSU5TRVJUX0ZST05UIDEKKyNkZWZpbmUgRUxFVkFUT1JfSU5TRVJUX0JBQ0sgMgorI2RlZmluZSBFTEVWQVRPUl9JTlNFUlRfU09SVCAzCisjZGVmaW5lIEVMRVZBVE9SX0lOU0VSVF9SRVFVRVVFIDQKKworZW51bSB7CisgRUxWX01RVUVVRV9NQVksCisgRUxWX01RVUVVRV9OTywKKyBFTFZfTVFVRVVFX01VU1QsCit9OworCisjZGVmaW5lIHJxX2VuZF9zZWN0b3IocnEpICgocnEpLT5zZWN0b3IgKyAocnEpLT5ucl9zZWN0b3JzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYtZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lbGYtZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTUxZmRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi1lbS5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0VMRl9FTV9ICisjZGVmaW5lIF9MSU5VWF9FTEZfRU1fSAorCisjZGVmaW5lIEVNX05PTkUgMAorI2RlZmluZSBFTV9NMzIgMQorI2RlZmluZSBFTV9TUEFSQyAyCisjZGVmaW5lIEVNXzM4NiAzCisjZGVmaW5lIEVNXzY4SyA0CisjZGVmaW5lIEVNXzg4SyA1CisjZGVmaW5lIEVNXzQ4NiA2ICAKKyNkZWZpbmUgRU1fODYwIDcKKyNkZWZpbmUgRU1fTUlQUyA4ICAKKworI2RlZmluZSBFTV9NSVBTX1JTM19MRSAxMCAgCisjZGVmaW5lIEVNX01JUFNfUlM0X0JFIDEwICAKKworI2RlZmluZSBFTV9QQVJJU0MgMTUgIAorI2RlZmluZSBFTV9TUEFSQzMyUExVUyAxOCAgCisjZGVmaW5lIEVNX1BQQyAyMCAgCisjZGVmaW5lIEVNX1BQQzY0IDIxICAKKyNkZWZpbmUgRU1fU0ggNDIgIAorI2RlZmluZSBFTV9TUEFSQ1Y5IDQzICAKKyNkZWZpbmUgRU1fSUFfNjQgNTAgIAorI2RlZmluZSBFTV9YODZfNjQgNjIgIAorI2RlZmluZSBFTV9TMzkwIDIyICAKKyNkZWZpbmUgRU1fQ1JJUyA3NiAgCisjZGVmaW5lIEVNX1Y4NTAgODcgIAorI2RlZmluZSBFTV9NMzJSIDg4ICAKKyNkZWZpbmUgRU1fSDhfMzAwIDQ2ICAKKyNkZWZpbmUgRU1fRlJWIDB4NTQ0MSAgCisKKyNkZWZpbmUgRU1fQUxQSEEgMHg5MDI2CisKKyNkZWZpbmUgRU1fQ1lHTlVTX1Y4NTAgMHg5MDgwCisKKyNkZWZpbmUgRU1fQ1lHTlVTX00zMlIgMHg5MDQxCisKKyNkZWZpbmUgRU1fUzM5MF9PTEQgMHhBMzkwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2VsZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNmI0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZWxmLmgKQEAgLTAsMCArMSwzNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0VMRl9ICisjZGVmaW5lIF9MSU5VWF9FTEZfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4KKyNpbmNsdWRlIDxsaW51eC9lbGYtZW0uaD4KKyNpbmNsdWRlIDxhc20vZWxmLmg+CisKKyNpZm5kZWYgZWxmX3JlYWRfaW1wbGllc19leGVjCisKKyNkZWZpbmUgZWxmX3JlYWRfaW1wbGllc19leGVjKGV4LCBoYXZlX3B0X2dudV9zdGFjaykgMAorI2VuZGlmCisKK3R5cGVkZWYgX191MzIgRWxmMzJfQWRkcjsKK3R5cGVkZWYgX191MTYgRWxmMzJfSGFsZjsKK3R5cGVkZWYgX191MzIgRWxmMzJfT2ZmOwordHlwZWRlZiBfX3MzMiBFbGYzMl9Td29yZDsKK3R5cGVkZWYgX191MzIgRWxmMzJfV29yZDsKKwordHlwZWRlZiBfX3U2NCBFbGY2NF9BZGRyOwordHlwZWRlZiBfX3UxNiBFbGY2NF9IYWxmOwordHlwZWRlZiBfX3MxNiBFbGY2NF9TSGFsZjsKK3R5cGVkZWYgX191NjQgRWxmNjRfT2ZmOwordHlwZWRlZiBfX3MzMiBFbGY2NF9Td29yZDsKK3R5cGVkZWYgX191MzIgRWxmNjRfV29yZDsKK3R5cGVkZWYgX191NjQgRWxmNjRfWHdvcmQ7Cit0eXBlZGVmIF9fczY0IEVsZjY0X1N4d29yZDsKKworI2RlZmluZSBQVF9OVUxMIDAKKyNkZWZpbmUgUFRfTE9BRCAxCisjZGVmaW5lIFBUX0RZTkFNSUMgMgorI2RlZmluZSBQVF9JTlRFUlAgMworI2RlZmluZSBQVF9OT1RFIDQKKyNkZWZpbmUgUFRfU0hMSUIgNQorI2RlZmluZSBQVF9QSERSIDYKKyNkZWZpbmUgUFRfVExTIDcgIAorI2RlZmluZSBQVF9MT09TIDB4NjAwMDAwMDAgIAorI2RlZmluZSBQVF9ISU9TIDB4NmZmZmZmZmYgIAorI2RlZmluZSBQVF9MT1BST0MgMHg3MDAwMDAwMAorI2RlZmluZSBQVF9ISVBST0MgMHg3ZmZmZmZmZgorI2RlZmluZSBQVF9HTlVfRUhfRlJBTUUgMHg2NDc0ZTU1MAorCisjZGVmaW5lIFBUX0dOVV9TVEFDSyAoUFRfTE9PUyArIDB4NDc0ZTU1MSkKKworI2RlZmluZSBFVF9OT05FIDAKKyNkZWZpbmUgRVRfUkVMIDEKKyNkZWZpbmUgRVRfRVhFQyAyCisjZGVmaW5lIEVUX0RZTiAzCisjZGVmaW5lIEVUX0NPUkUgNAorI2RlZmluZSBFVF9MT1BST0MgMHhmZjAwCisjZGVmaW5lIEVUX0hJUFJPQyAweGZmZmYKKworI2RlZmluZSBEVF9OVUxMIDAKKyNkZWZpbmUgRFRfTkVFREVEIDEKKyNkZWZpbmUgRFRfUExUUkVMU1ogMgorI2RlZmluZSBEVF9QTFRHT1QgMworI2RlZmluZSBEVF9IQVNIIDQKKyNkZWZpbmUgRFRfU1RSVEFCIDUKKyNkZWZpbmUgRFRfU1lNVEFCIDYKKyNkZWZpbmUgRFRfUkVMQSA3CisjZGVmaW5lIERUX1JFTEFTWiA4CisjZGVmaW5lIERUX1JFTEFFTlQgOQorI2RlZmluZSBEVF9TVFJTWiAxMAorI2RlZmluZSBEVF9TWU1FTlQgMTEKKyNkZWZpbmUgRFRfSU5JVCAxMgorI2RlZmluZSBEVF9GSU5JIDEzCisjZGVmaW5lIERUX1NPTkFNRSAxNAorI2RlZmluZSBEVF9SUEFUSCAxNQorI2RlZmluZSBEVF9TWU1CT0xJQyAxNgorI2RlZmluZSBEVF9SRUwgMTcKKyNkZWZpbmUgRFRfUkVMU1ogMTgKKyNkZWZpbmUgRFRfUkVMRU5UIDE5CisjZGVmaW5lIERUX1BMVFJFTCAyMAorI2RlZmluZSBEVF9ERUJVRyAyMQorI2RlZmluZSBEVF9URVhUUkVMIDIyCisjZGVmaW5lIERUX0pNUFJFTCAyMworI2RlZmluZSBEVF9MT1BST0MgMHg3MDAwMDAwMAorI2RlZmluZSBEVF9ISVBST0MgMHg3ZmZmZmZmZgorCisjZGVmaW5lIFNUQl9MT0NBTCAwCisjZGVmaW5lIFNUQl9HTE9CQUwgMQorI2RlZmluZSBTVEJfV0VBSyAyCisKKyNkZWZpbmUgU1RUX05PVFlQRSAwCisjZGVmaW5lIFNUVF9PQkpFQ1QgMQorI2RlZmluZSBTVFRfRlVOQyAyCisjZGVmaW5lIFNUVF9TRUNUSU9OIDMKKyNkZWZpbmUgU1RUX0ZJTEUgNAorI2RlZmluZSBTVFRfQ09NTU9OIDUKKyNkZWZpbmUgU1RUX1RMUyA2CisKKyNkZWZpbmUgRUxGX1NUX0JJTkQoeCkgKCh4KSA+PiA0KQorI2RlZmluZSBFTEZfU1RfVFlQRSh4KSAoKCh1bnNpZ25lZCBpbnQpIHgpICYgMHhmKQorI2RlZmluZSBFTEYzMl9TVF9CSU5EKHgpIEVMRl9TVF9CSU5EKHgpCisjZGVmaW5lIEVMRjMyX1NUX1RZUEUoeCkgRUxGX1NUX1RZUEUoeCkKKyNkZWZpbmUgRUxGNjRfU1RfQklORCh4KSBFTEZfU1RfQklORCh4KQorI2RlZmluZSBFTEY2NF9TVF9UWVBFKHgpIEVMRl9TVF9UWVBFKHgpCisKK3R5cGVkZWYgc3RydWN0IGR5bmFtaWN7CisgRWxmMzJfU3dvcmQgZF90YWc7CisgdW5pb257CisgRWxmMzJfU3dvcmQgZF92YWw7CisgRWxmMzJfQWRkciBkX3B0cjsKKyB9IGRfdW47Cit9IEVsZjMyX0R5bjsKKwordHlwZWRlZiBzdHJ1Y3QgeworIEVsZjY0X1N4d29yZCBkX3RhZzsKKyB1bmlvbiB7CisgRWxmNjRfWHdvcmQgZF92YWw7CisgRWxmNjRfQWRkciBkX3B0cjsKKyB9IGRfdW47Cit9IEVsZjY0X0R5bjsKKworI2RlZmluZSBFTEYzMl9SX1NZTSh4KSAoKHgpID4+IDgpCisjZGVmaW5lIEVMRjMyX1JfVFlQRSh4KSAoKHgpICYgMHhmZikKKworI2RlZmluZSBFTEY2NF9SX1NZTShpKSAoKGkpID4+IDMyKQorI2RlZmluZSBFTEY2NF9SX1RZUEUoaSkgKChpKSAmIDB4ZmZmZmZmZmYpCisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3JlbCB7CisgRWxmMzJfQWRkciByX29mZnNldDsKKyBFbGYzMl9Xb3JkIHJfaW5mbzsKK30gRWxmMzJfUmVsOworCit0eXBlZGVmIHN0cnVjdCBlbGY2NF9yZWwgeworIEVsZjY0X0FkZHIgcl9vZmZzZXQ7CisgRWxmNjRfWHdvcmQgcl9pbmZvOworfSBFbGY2NF9SZWw7CisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3JlbGF7CisgRWxmMzJfQWRkciByX29mZnNldDsKKyBFbGYzMl9Xb3JkIHJfaW5mbzsKKyBFbGYzMl9Td29yZCByX2FkZGVuZDsKK30gRWxmMzJfUmVsYTsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcmVsYSB7CisgRWxmNjRfQWRkciByX29mZnNldDsKKyBFbGY2NF9Yd29yZCByX2luZm87CisgRWxmNjRfU3h3b3JkIHJfYWRkZW5kOworfSBFbGY2NF9SZWxhOworCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9zeW17CisgRWxmMzJfV29yZCBzdF9uYW1lOworIEVsZjMyX0FkZHIgc3RfdmFsdWU7CisgRWxmMzJfV29yZCBzdF9zaXplOworIHVuc2lnbmVkIGNoYXIgc3RfaW5mbzsKKyB1bnNpZ25lZCBjaGFyIHN0X290aGVyOworIEVsZjMyX0hhbGYgc3Rfc2huZHg7Cit9IEVsZjMyX1N5bTsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfc3ltIHsKKyBFbGY2NF9Xb3JkIHN0X25hbWU7CisgdW5zaWduZWQgY2hhciBzdF9pbmZvOworIHVuc2lnbmVkIGNoYXIgc3Rfb3RoZXI7CisgRWxmNjRfSGFsZiBzdF9zaG5keDsKKyBFbGY2NF9BZGRyIHN0X3ZhbHVlOworIEVsZjY0X1h3b3JkIHN0X3NpemU7Cit9IEVsZjY0X1N5bTsKKworI2RlZmluZSBFSV9OSURFTlQgMTYKKwordHlwZWRlZiBzdHJ1Y3QgZWxmMzJfaGRyeworIHVuc2lnbmVkIGNoYXIgZV9pZGVudFtFSV9OSURFTlRdOworIEVsZjMyX0hhbGYgZV90eXBlOworIEVsZjMyX0hhbGYgZV9tYWNoaW5lOworIEVsZjMyX1dvcmQgZV92ZXJzaW9uOworIEVsZjMyX0FkZHIgZV9lbnRyeTsKKyBFbGYzMl9PZmYgZV9waG9mZjsKKyBFbGYzMl9PZmYgZV9zaG9mZjsKKyBFbGYzMl9Xb3JkIGVfZmxhZ3M7CisgRWxmMzJfSGFsZiBlX2Voc2l6ZTsKKyBFbGYzMl9IYWxmIGVfcGhlbnRzaXplOworIEVsZjMyX0hhbGYgZV9waG51bTsKKyBFbGYzMl9IYWxmIGVfc2hlbnRzaXplOworIEVsZjMyX0hhbGYgZV9zaG51bTsKKyBFbGYzMl9IYWxmIGVfc2hzdHJuZHg7Cit9IEVsZjMyX0VoZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X2hkciB7CisgdW5zaWduZWQgY2hhciBlX2lkZW50WzE2XTsKKyBFbGY2NF9IYWxmIGVfdHlwZTsKKyBFbGY2NF9IYWxmIGVfbWFjaGluZTsKKyBFbGY2NF9Xb3JkIGVfdmVyc2lvbjsKKyBFbGY2NF9BZGRyIGVfZW50cnk7CisgRWxmNjRfT2ZmIGVfcGhvZmY7CisgRWxmNjRfT2ZmIGVfc2hvZmY7CisgRWxmNjRfV29yZCBlX2ZsYWdzOworIEVsZjY0X0hhbGYgZV9laHNpemU7CisgRWxmNjRfSGFsZiBlX3BoZW50c2l6ZTsKKyBFbGY2NF9IYWxmIGVfcGhudW07CisgRWxmNjRfSGFsZiBlX3NoZW50c2l6ZTsKKyBFbGY2NF9IYWxmIGVfc2hudW07CisgRWxmNjRfSGFsZiBlX3Noc3RybmR4OworfSBFbGY2NF9FaGRyOworCisjZGVmaW5lIFBGX1IgMHg0CisjZGVmaW5lIFBGX1cgMHgyCisjZGVmaW5lIFBGX1ggMHgxCisKK3R5cGVkZWYgc3RydWN0IGVsZjMyX3BoZHJ7CisgRWxmMzJfV29yZCBwX3R5cGU7CisgRWxmMzJfT2ZmIHBfb2Zmc2V0OworIEVsZjMyX0FkZHIgcF92YWRkcjsKKyBFbGYzMl9BZGRyIHBfcGFkZHI7CisgRWxmMzJfV29yZCBwX2ZpbGVzejsKKyBFbGYzMl9Xb3JkIHBfbWVtc3o7CisgRWxmMzJfV29yZCBwX2ZsYWdzOworIEVsZjMyX1dvcmQgcF9hbGlnbjsKK30gRWxmMzJfUGhkcjsKKwordHlwZWRlZiBzdHJ1Y3QgZWxmNjRfcGhkciB7CisgRWxmNjRfV29yZCBwX3R5cGU7CisgRWxmNjRfV29yZCBwX2ZsYWdzOworIEVsZjY0X09mZiBwX29mZnNldDsKKyBFbGY2NF9BZGRyIHBfdmFkZHI7CisgRWxmNjRfQWRkciBwX3BhZGRyOworIEVsZjY0X1h3b3JkIHBfZmlsZXN6OworIEVsZjY0X1h3b3JkIHBfbWVtc3o7CisgRWxmNjRfWHdvcmQgcF9hbGlnbjsKK30gRWxmNjRfUGhkcjsKKworI2RlZmluZSBTSFRfTlVMTCAwCisjZGVmaW5lIFNIVF9QUk9HQklUUyAxCisjZGVmaW5lIFNIVF9TWU1UQUIgMgorI2RlZmluZSBTSFRfU1RSVEFCIDMKKyNkZWZpbmUgU0hUX1JFTEEgNAorI2RlZmluZSBTSFRfSEFTSCA1CisjZGVmaW5lIFNIVF9EWU5BTUlDIDYKKyNkZWZpbmUgU0hUX05PVEUgNworI2RlZmluZSBTSFRfTk9CSVRTIDgKKyNkZWZpbmUgU0hUX1JFTCA5CisjZGVmaW5lIFNIVF9TSExJQiAxMAorI2RlZmluZSBTSFRfRFlOU1lNIDExCisjZGVmaW5lIFNIVF9OVU0gMTIKKyNkZWZpbmUgU0hUX0xPUFJPQyAweDcwMDAwMDAwCisjZGVmaW5lIFNIVF9ISVBST0MgMHg3ZmZmZmZmZgorI2RlZmluZSBTSFRfTE9VU0VSIDB4ODAwMDAwMDAKKyNkZWZpbmUgU0hUX0hJVVNFUiAweGZmZmZmZmZmCisKKyNkZWZpbmUgU0hGX1dSSVRFIDB4MQorI2RlZmluZSBTSEZfQUxMT0MgMHgyCisjZGVmaW5lIFNIRl9FWEVDSU5TVFIgMHg0CisjZGVmaW5lIFNIRl9NQVNLUFJPQyAweGYwMDAwMDAwCisKKyNkZWZpbmUgU0hOX1VOREVGIDAKKyNkZWZpbmUgU0hOX0xPUkVTRVJWRSAweGZmMDAKKyNkZWZpbmUgU0hOX0xPUFJPQyAweGZmMDAKKyNkZWZpbmUgU0hOX0hJUFJPQyAweGZmMWYKKyNkZWZpbmUgU0hOX0FCUyAweGZmZjEKKyNkZWZpbmUgU0hOX0NPTU1PTiAweGZmZjIKKyNkZWZpbmUgU0hOX0hJUkVTRVJWRSAweGZmZmYKKwordHlwZWRlZiBzdHJ1Y3QgeworIEVsZjMyX1dvcmQgc2hfbmFtZTsKKyBFbGYzMl9Xb3JkIHNoX3R5cGU7CisgRWxmMzJfV29yZCBzaF9mbGFnczsKKyBFbGYzMl9BZGRyIHNoX2FkZHI7CisgRWxmMzJfT2ZmIHNoX29mZnNldDsKKyBFbGYzMl9Xb3JkIHNoX3NpemU7CisgRWxmMzJfV29yZCBzaF9saW5rOworIEVsZjMyX1dvcmQgc2hfaW5mbzsKKyBFbGYzMl9Xb3JkIHNoX2FkZHJhbGlnbjsKKyBFbGYzMl9Xb3JkIHNoX2VudHNpemU7Cit9IEVsZjMyX1NoZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X3NoZHIgeworIEVsZjY0X1dvcmQgc2hfbmFtZTsKKyBFbGY2NF9Xb3JkIHNoX3R5cGU7CisgRWxmNjRfWHdvcmQgc2hfZmxhZ3M7CisgRWxmNjRfQWRkciBzaF9hZGRyOworIEVsZjY0X09mZiBzaF9vZmZzZXQ7CisgRWxmNjRfWHdvcmQgc2hfc2l6ZTsKKyBFbGY2NF9Xb3JkIHNoX2xpbms7CisgRWxmNjRfV29yZCBzaF9pbmZvOworIEVsZjY0X1h3b3JkIHNoX2FkZHJhbGlnbjsKKyBFbGY2NF9Yd29yZCBzaF9lbnRzaXplOworfSBFbGY2NF9TaGRyOworCisjZGVmaW5lIEVJX01BRzAgMCAgCisjZGVmaW5lIEVJX01BRzEgMQorI2RlZmluZSBFSV9NQUcyIDIKKyNkZWZpbmUgRUlfTUFHMyAzCisjZGVmaW5lIEVJX0NMQVNTIDQKKyNkZWZpbmUgRUlfREFUQSA1CisjZGVmaW5lIEVJX1ZFUlNJT04gNgorI2RlZmluZSBFSV9PU0FCSSA3CisjZGVmaW5lIEVJX1BBRCA4CisKKyNkZWZpbmUgRUxGTUFHMCAweDdmICAKKyNkZWZpbmUgRUxGTUFHMSAnRScKKyNkZWZpbmUgRUxGTUFHMiAnTCcKKyNkZWZpbmUgRUxGTUFHMyAnRicKKyNkZWZpbmUgRUxGTUFHICJcMTc3RUxGIgorI2RlZmluZSBTRUxGTUFHIDQKKworI2RlZmluZSBFTEZDTEFTU05PTkUgMCAgCisjZGVmaW5lIEVMRkNMQVNTMzIgMQorI2RlZmluZSBFTEZDTEFTUzY0IDIKKyNkZWZpbmUgRUxGQ0xBU1NOVU0gMworCisjZGVmaW5lIEVMRkRBVEFOT05FIDAgIAorI2RlZmluZSBFTEZEQVRBMkxTQiAxCisjZGVmaW5lIEVMRkRBVEEyTVNCIDIKKworI2RlZmluZSBFVl9OT05FIDAgIAorI2RlZmluZSBFVl9DVVJSRU5UIDEKKyNkZWZpbmUgRVZfTlVNIDIKKworI2RlZmluZSBFTEZPU0FCSV9OT05FIDAKKyNkZWZpbmUgRUxGT1NBQklfTElOVVggMworCisjaWZuZGVmIEVMRl9PU0FCSQorI2RlZmluZSBFTEZfT1NBQkkgRUxGT1NBQklfTk9ORQorI2VuZGlmCisKKyNkZWZpbmUgTlRfUFJTVEFUVVMgMQorI2RlZmluZSBOVF9QUkZQUkVHIDIKKyNkZWZpbmUgTlRfUFJQU0lORk8gMworI2RlZmluZSBOVF9UQVNLU1RSVUNUIDQKKyNkZWZpbmUgTlRfQVVYViA2CisjZGVmaW5lIE5UX1BSWEZQUkVHIDB4NDZlNjJiN2YgIAorCit0eXBlZGVmIHN0cnVjdCBlbGYzMl9ub3RlIHsKKyBFbGYzMl9Xb3JkIG5fbmFtZXN6OworIEVsZjMyX1dvcmQgbl9kZXNjc3o7CisgRWxmMzJfV29yZCBuX3R5cGU7Cit9IEVsZjMyX05oZHI7CisKK3R5cGVkZWYgc3RydWN0IGVsZjY0X25vdGUgeworIEVsZjY0X1dvcmQgbl9uYW1lc3o7CisgRWxmNjRfV29yZCBuX2Rlc2NzejsKKyBFbGY2NF9Xb3JkIG5fdHlwZTsKK30gRWxmNjRfTmhkcjsKKworI2lmIEVMRl9DTEFTUyA9PSBFTEZDTEFTUzMyCisKKyNkZWZpbmUgZWxmaGRyIGVsZjMyX2hkcgorI2RlZmluZSBlbGZfcGhkciBlbGYzMl9waGRyCisjZGVmaW5lIGVsZl9ub3RlIGVsZjMyX25vdGUKKworI2Vsc2UKKworI2RlZmluZSBlbGZoZHIgZWxmNjRfaGRyCisjZGVmaW5lIGVsZl9waGRyIGVsZjY0X3BoZHIKKyNkZWZpbmUgZWxmX25vdGUgZWxmNjRfbm90ZQorCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhNGY5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnIuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FUlJfSAorI2RlZmluZSBfTElOVVhfRVJSX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2RlZmluZSBNQVhfRVJSTk8gNDA5NQorCisjZGVmaW5lIElTX0VSUl9WQUxVRSh4KSB1bmxpa2VseSgoeCkgPj0gKHVuc2lnbmVkIGxvbmcpLU1BWF9FUlJOTykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnJuby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyZWU2NDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJybm8uaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FUlJOT19ICisjZGVmaW5lIF9MSU5VWF9FUlJOT19ICisKKyNpbmNsdWRlIDxhc20vZXJybm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJycXVldWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9lcnJxdWV1ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYjJlNDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXJycXVldWUuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FUlJRVUVVRV9ICisjZGVmaW5lIF9MSU5VWF9FUlJRVUVVRV9IIDEKKworc3RydWN0IHNvY2tfZXh0ZW5kZWRfZXJyCit7CisgX191MzIgZWVfZXJybm87CisgX191OCBlZV9vcmlnaW47CisgX191OCBlZV90eXBlOworIF9fdTggZWVfY29kZTsKKyBfX3U4IGVlX3BhZDsKKyBfX3UzMiBlZV9pbmZvOworIF9fdTMyIGVlX2RhdGE7Cit9OworCisjZGVmaW5lIFNPX0VFX09SSUdJTl9OT05FIDAKKyNkZWZpbmUgU09fRUVfT1JJR0lOX0xPQ0FMIDEKKyNkZWZpbmUgU09fRUVfT1JJR0lOX0lDTVAgMgorI2RlZmluZSBTT19FRV9PUklHSU5fSUNNUDYgMworCisjZGVmaW5lIFNPX0VFX09GRkVOREVSKGVlKSAoKHN0cnVjdCBzb2NrYWRkciopKChlZSkrMSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V0aGVyZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXRoZXJkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMDg3ZThmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V0aGVyZGV2aWNlLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVRIRVJERVZJQ0VfSAorI2RlZmluZSBfTElOVVhfRVRIRVJERVZJQ0VfSAorCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0Ml9mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDJfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMjFiMDlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2V4dDJfZnMuaApAQCAtMCwwICsxLDM3OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRVhUMl9GU19ICisjZGVmaW5lIF9MSU5VWF9FWFQyX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyN1bmRlZiBFWFQyRlNfREVCVUcKKworI2RlZmluZSBFWFQyX1BSRUFMTE9DQVRFCisjZGVmaW5lIEVYVDJfREVGQVVMVF9QUkVBTExPQ19CTE9DS1MgOAorCisjZGVmaW5lIEVYVDJGU19EQVRFICI5NS8wOC8wOSIKKyNkZWZpbmUgRVhUMkZTX1ZFUlNJT04gIjAuNWIiCisKKyNpZmRlZiBFWFQyRlNfREVCVUcKKyNkZWZpbmUgZXh0Ml9kZWJ1ZyhmLCBhLi4uKSB7ICAgcHJpbnRrICgiRVhUMi1mcyBERUJVRyAoJXMsICVkKTogJXM6IiwgICBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVOQ1RJT05fXyk7ICAgcHJpbnRrIChmLCAjIyBhKTsgICB9CisjZWxzZQorI2RlZmluZSBleHQyX2RlYnVnKGYsIGEuLi4pICAKKyNlbmRpZgorCisjZGVmaW5lIEVYVDJfQkFEX0lOTyAxICAKKyNkZWZpbmUgRVhUMl9ST09UX0lOTyAyICAKKyNkZWZpbmUgRVhUMl9CT09UX0xPQURFUl9JTk8gNSAgCisjZGVmaW5lIEVYVDJfVU5ERUxfRElSX0lOTyA2ICAKKworI2RlZmluZSBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTyAxMQorCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMgMHhFRjUzCisKKyNkZWZpbmUgRVhUMl9TQihzYikgKHNiKQorCisjZGVmaW5lIEVYVDJfTElOS19NQVggMzIwMDAKKworI2RlZmluZSBFWFQyX01JTl9CTE9DS19TSVpFIDEwMjQKKyNkZWZpbmUgRVhUMl9NQVhfQkxPQ0tfU0laRSA0MDk2CisjZGVmaW5lIEVYVDJfTUlOX0JMT0NLX0xPR19TSVpFIDEwCisjZGVmaW5lIEVYVDJfQkxPQ0tfU0laRShzKSAoRVhUMl9NSU5fQkxPQ0tfU0laRSA8PCAocyktPnNfbG9nX2Jsb2NrX3NpemUpCisjZGVmaW5lIEVYVDJfQUREUl9QRVJfQkxPQ0socykgKEVYVDJfQkxPQ0tfU0laRShzKSAvIHNpemVvZiAoX191MzIpKQorI2RlZmluZSBFWFQyX0JMT0NLX1NJWkVfQklUUyhzKSAoKHMpLT5zX2xvZ19ibG9ja19zaXplICsgMTApCisjZGVmaW5lIEVYVDJfSU5PREVfU0laRShzKSAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gICBFWFQyX0dPT0RfT0xEX0lOT0RFX1NJWkUgOiAgIChzKS0+c19pbm9kZV9zaXplKQorI2RlZmluZSBFWFQyX0ZJUlNUX0lOTyhzKSAoKChzKS0+c19yZXZfbGV2ZWwgPT0gRVhUMl9HT09EX09MRF9SRVYpID8gICBFWFQyX0dPT0RfT0xEX0ZJUlNUX0lOTyA6ICAgKHMpLT5zX2ZpcnN0X2lubykKKworI2RlZmluZSBFWFQyX01JTl9GUkFHX1NJWkUgMTAyNAorI2RlZmluZSBFWFQyX01BWF9GUkFHX1NJWkUgNDA5NgorI2RlZmluZSBFWFQyX01JTl9GUkFHX0xPR19TSVpFIDEwCisjZGVmaW5lIEVYVDJfRlJBR19TSVpFKHMpIChFWFQyX01JTl9GUkFHX1NJWkUgPDwgKHMpLT5zX2xvZ19mcmFnX3NpemUpCisjZGVmaW5lIEVYVDJfRlJBR1NfUEVSX0JMT0NLKHMpIChFWFQyX0JMT0NLX1NJWkUocykgLyBFWFQyX0ZSQUdfU0laRShzKSkKKworc3RydWN0IGV4dDJfZ3JvdXBfZGVzYworeworIF9fbGUzMiBiZ19ibG9ja19iaXRtYXA7CisgX19sZTMyIGJnX2lub2RlX2JpdG1hcDsKKyBfX2xlMzIgYmdfaW5vZGVfdGFibGU7CisgX19sZTE2IGJnX2ZyZWVfYmxvY2tzX2NvdW50OworIF9fbGUxNiBiZ19mcmVlX2lub2Rlc19jb3VudDsKKyBfX2xlMTYgYmdfdXNlZF9kaXJzX2NvdW50OworIF9fbGUxNiBiZ19wYWQ7CisgX19sZTMyIGJnX3Jlc2VydmVkWzNdOworfTsKKworI2RlZmluZSBFWFQyX0JMT0NLU19QRVJfR1JPVVAocykgKChzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQorI2RlZmluZSBFWFQyX0RFU0NfUEVSX0JMT0NLKHMpIChFWFQyX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKHN0cnVjdCBleHQyX2dyb3VwX2Rlc2MpKQorI2RlZmluZSBFWFQyX0lOT0RFU19QRVJfR1JPVVAocykgKChzKS0+c19pbm9kZXNfcGVyX2dyb3VwKQorCisjZGVmaW5lIEVYVDJfTkRJUl9CTE9DS1MgMTIKKyNkZWZpbmUgRVhUMl9JTkRfQkxPQ0sgRVhUMl9ORElSX0JMT0NLUworI2RlZmluZSBFWFQyX0RJTkRfQkxPQ0sgKEVYVDJfSU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUMl9USU5EX0JMT0NLIChFWFQyX0RJTkRfQkxPQ0sgKyAxKQorI2RlZmluZSBFWFQyX05fQkxPQ0tTIChFWFQyX1RJTkRfQkxPQ0sgKyAxKQorCisjZGVmaW5lIEVYVDJfU0VDUk1fRkwgMHgwMDAwMDAwMSAgCisjZGVmaW5lIEVYVDJfVU5STV9GTCAweDAwMDAwMDAyICAKKyNkZWZpbmUgRVhUMl9DT01QUl9GTCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgRVhUMl9TWU5DX0ZMIDB4MDAwMDAwMDggIAorI2RlZmluZSBFWFQyX0lNTVVUQUJMRV9GTCAweDAwMDAwMDEwICAKKyNkZWZpbmUgRVhUMl9BUFBFTkRfRkwgMHgwMDAwMDAyMCAgCisjZGVmaW5lIEVYVDJfTk9EVU1QX0ZMIDB4MDAwMDAwNDAgIAorI2RlZmluZSBFWFQyX05PQVRJTUVfRkwgMHgwMDAwMDA4MCAgCisKKyNkZWZpbmUgRVhUMl9ESVJUWV9GTCAweDAwMDAwMTAwCisjZGVmaW5lIEVYVDJfQ09NUFJCTEtfRkwgMHgwMDAwMDIwMCAgCisjZGVmaW5lIEVYVDJfTk9DT01QX0ZMIDB4MDAwMDA0MDAgIAorI2RlZmluZSBFWFQyX0VDT01QUl9GTCAweDAwMDAwODAwICAKKworI2RlZmluZSBFWFQyX0JUUkVFX0ZMIDB4MDAwMDEwMDAgIAorI2RlZmluZSBFWFQyX0lOREVYX0ZMIDB4MDAwMDEwMDAgIAorI2RlZmluZSBFWFQyX0lNQUdJQ19GTCAweDAwMDAyMDAwICAKKyNkZWZpbmUgRVhUMl9KT1VSTkFMX0RBVEFfRkwgMHgwMDAwNDAwMCAgCisjZGVmaW5lIEVYVDJfTk9UQUlMX0ZMIDB4MDAwMDgwMDAgIAorI2RlZmluZSBFWFQyX0RJUlNZTkNfRkwgMHgwMDAxMDAwMCAgCisjZGVmaW5lIEVYVDJfVE9QRElSX0ZMIDB4MDAwMjAwMDAgIAorI2RlZmluZSBFWFQyX1JFU0VSVkVEX0ZMIDB4ODAwMDAwMDAgIAorCisjZGVmaW5lIEVYVDJfRkxfVVNFUl9WSVNJQkxFIDB4MDAwM0RGRkYgIAorI2RlZmluZSBFWFQyX0ZMX1VTRVJfTU9ESUZJQUJMRSAweDAwMDM4MEZGICAKKworI2RlZmluZSBFWFQyX0lPQ19HRVRGTEFHUyBfSU9SKCdmJywgMSwgbG9uZykKKyNkZWZpbmUgRVhUMl9JT0NfU0VURkxBR1MgX0lPVygnZicsIDIsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX0dFVFZFUlNJT04gX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDJfSU9DX1NFVFZFUlNJT04gX0lPVygndicsIDIsIGxvbmcpCisKK3N0cnVjdCBleHQyX2lub2RlIHsKKyBfX2xlMTYgaV9tb2RlOworIF9fbGUxNiBpX3VpZDsKKyBfX2xlMzIgaV9zaXplOworIF9fbGUzMiBpX2F0aW1lOworIF9fbGUzMiBpX2N0aW1lOworIF9fbGUzMiBpX210aW1lOworIF9fbGUzMiBpX2R0aW1lOworIF9fbGUxNiBpX2dpZDsKKyBfX2xlMTYgaV9saW5rc19jb3VudDsKKyBfX2xlMzIgaV9ibG9ja3M7CisgX19sZTMyIGlfZmxhZ3M7CisgdW5pb24geworIHN0cnVjdCB7CisgX19sZTMyIGxfaV9yZXNlcnZlZDE7CisgfSBsaW51eDE7Cisgc3RydWN0IHsKKyBfX2xlMzIgaF9pX3RyYW5zbGF0b3I7CisgfSBodXJkMTsKKyBzdHJ1Y3QgeworIF9fbGUzMiBtX2lfcmVzZXJ2ZWQxOworIH0gbWFzaXgxOworIH0gb3NkMTsKKyBfX2xlMzIgaV9ibG9ja1tFWFQyX05fQkxPQ0tTXTsKKyBfX2xlMzIgaV9nZW5lcmF0aW9uOworIF9fbGUzMiBpX2ZpbGVfYWNsOworIF9fbGUzMiBpX2Rpcl9hY2w7CisgX19sZTMyIGlfZmFkZHI7CisgdW5pb24geworIHN0cnVjdCB7CisgX191OCBsX2lfZnJhZzsKKyBfX3U4IGxfaV9mc2l6ZTsKKyBfX3UxNiBpX3BhZDE7CisgX19sZTE2IGxfaV91aWRfaGlnaDsKKyBfX2xlMTYgbF9pX2dpZF9oaWdoOworIF9fdTMyIGxfaV9yZXNlcnZlZDI7CisgfSBsaW51eDI7Cisgc3RydWN0IHsKKyBfX3U4IGhfaV9mcmFnOworIF9fdTggaF9pX2ZzaXplOworIF9fbGUxNiBoX2lfbW9kZV9oaWdoOworIF9fbGUxNiBoX2lfdWlkX2hpZ2g7CisgX19sZTE2IGhfaV9naWRfaGlnaDsKKyBfX2xlMzIgaF9pX2F1dGhvcjsKKyB9IGh1cmQyOworIHN0cnVjdCB7CisgX191OCBtX2lfZnJhZzsKKyBfX3U4IG1faV9mc2l6ZTsKKyBfX3UxNiBtX3BhZDE7CisgX191MzIgbV9pX3Jlc2VydmVkMlsyXTsKKyB9IG1hc2l4MjsKKyB9IG9zZDI7Cit9OworCisjZGVmaW5lIGlfc2l6ZV9oaWdoIGlfZGlyX2FjbAorCisjaWZkZWYgX19saW51eF9fCisjZGVmaW5lIGlfcmVzZXJ2ZWQxIG9zZDEubGludXgxLmxfaV9yZXNlcnZlZDEKKyNkZWZpbmUgaV9mcmFnIG9zZDIubGludXgyLmxfaV9mcmFnCisjZGVmaW5lIGlfZnNpemUgb3NkMi5saW51eDIubF9pX2ZzaXplCisjZGVmaW5lIGlfdWlkX2xvdyBpX3VpZAorI2RlZmluZSBpX2dpZF9sb3cgaV9naWQKKyNkZWZpbmUgaV91aWRfaGlnaCBvc2QyLmxpbnV4Mi5sX2lfdWlkX2hpZ2gKKyNkZWZpbmUgaV9naWRfaGlnaCBvc2QyLmxpbnV4Mi5sX2lfZ2lkX2hpZ2gKKyNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5saW51eDIubF9pX3Jlc2VydmVkMgorI2VuZGlmCisKKyNpZmRlZiBfX2h1cmRfXworI2RlZmluZSBpX3RyYW5zbGF0b3Igb3NkMS5odXJkMS5oX2lfdHJhbnNsYXRvcgorI2RlZmluZSBpX2ZyYWcgb3NkMi5odXJkMi5oX2lfZnJhZzsKKyNkZWZpbmUgaV9mc2l6ZSBvc2QyLmh1cmQyLmhfaV9mc2l6ZTsKKyNkZWZpbmUgaV91aWRfaGlnaCBvc2QyLmh1cmQyLmhfaV91aWRfaGlnaAorI2RlZmluZSBpX2dpZF9oaWdoIG9zZDIuaHVyZDIuaF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfYXV0aG9yIG9zZDIuaHVyZDIuaF9pX2F1dGhvcgorI2VuZGlmCisKKyNpZmRlZiBfX21hc2l4X18KKyNkZWZpbmUgaV9yZXNlcnZlZDEgb3NkMS5tYXNpeDEubV9pX3Jlc2VydmVkMQorI2RlZmluZSBpX2ZyYWcgb3NkMi5tYXNpeDIubV9pX2ZyYWcKKyNkZWZpbmUgaV9mc2l6ZSBvc2QyLm1hc2l4Mi5tX2lfZnNpemUKKyNkZWZpbmUgaV9yZXNlcnZlZDIgb3NkMi5tYXNpeDIubV9pX3Jlc2VydmVkMgorI2VuZGlmCisKKyNkZWZpbmUgRVhUMl9WQUxJRF9GUyAweDAwMDEgIAorI2RlZmluZSBFWFQyX0VSUk9SX0ZTIDB4MDAwMiAgCisKKyNkZWZpbmUgRVhUMl9NT1VOVF9DSEVDSyAweDAwMDAwMSAgCisjZGVmaW5lIEVYVDJfTU9VTlRfT0xEQUxMT0MgMHgwMDAwMDIgIAorI2RlZmluZSBFWFQyX01PVU5UX0dSUElEIDB4MDAwMDA0ICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9ERUJVRyAweDAwMDAwOCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX0NPTlQgMHgwMDAwMTAgIAorI2RlZmluZSBFWFQyX01PVU5UX0VSUk9SU19STyAweDAwMDAyMCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfRVJST1JTX1BBTklDIDB4MDAwMDQwICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9NSU5JWF9ERiAweDAwMDA4MCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9CSCAweDAwMDEwMCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9fVUlEMzIgMHgwMDAyMDAgIAorI2RlZmluZSBFWFQyX01PVU5UX1hBVFRSX1VTRVIgMHgwMDQwMDAgIAorI2RlZmluZSBFWFQyX01PVU5UX1BPU0lYX0FDTCAweDAwODAwMCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfWElQIDB4MDEwMDAwICAKKyNkZWZpbmUgRVhUMl9NT1VOVF9VU1JRVU9UQSAweDAyMDAwMCAgCisjZGVmaW5lIEVYVDJfTU9VTlRfR1JQUVVPVEEgMHgwNDAwMDAgIAorCisjZGVmaW5lIGNsZWFyX29wdChvLCBvcHQpIG8gJj0gfkVYVDJfTU9VTlRfIyNvcHQKKyNkZWZpbmUgc2V0X29wdChvLCBvcHQpIG8gfD0gRVhUMl9NT1VOVF8jI29wdAorI2RlZmluZSB0ZXN0X29wdChzYiwgb3B0KSAoRVhUMl9TQihzYiktPnNfbW91bnRfb3B0ICYgICBFWFQyX01PVU5UXyMjb3B0KQorCisjZGVmaW5lIEVYVDJfREZMX01BWF9NTlRfQ09VTlQgMjAgIAorI2RlZmluZSBFWFQyX0RGTF9DSEVDS0lOVEVSVkFMIDAgIAorCisjZGVmaW5lIEVYVDJfRVJST1JTX0NPTlRJTlVFIDEgIAorI2RlZmluZSBFWFQyX0VSUk9SU19STyAyICAKKyNkZWZpbmUgRVhUMl9FUlJPUlNfUEFOSUMgMyAgCisjZGVmaW5lIEVYVDJfRVJST1JTX0RFRkFVTFQgRVhUMl9FUlJPUlNfQ09OVElOVUUKKworc3RydWN0IGV4dDJfc3VwZXJfYmxvY2sgeworIF9fbGUzMiBzX2lub2Rlc19jb3VudDsKKyBfX2xlMzIgc19ibG9ja3NfY291bnQ7CisgX19sZTMyIHNfcl9ibG9ja3NfY291bnQ7CisgX19sZTMyIHNfZnJlZV9ibG9ja3NfY291bnQ7CisgX19sZTMyIHNfZnJlZV9pbm9kZXNfY291bnQ7CisgX19sZTMyIHNfZmlyc3RfZGF0YV9ibG9jazsKKyBfX2xlMzIgc19sb2dfYmxvY2tfc2l6ZTsKKyBfX2xlMzIgc19sb2dfZnJhZ19zaXplOworIF9fbGUzMiBzX2Jsb2Nrc19wZXJfZ3JvdXA7CisgX19sZTMyIHNfZnJhZ3NfcGVyX2dyb3VwOworIF9fbGUzMiBzX2lub2Rlc19wZXJfZ3JvdXA7CisgX19sZTMyIHNfbXRpbWU7CisgX19sZTMyIHNfd3RpbWU7CisgX19sZTE2IHNfbW50X2NvdW50OworIF9fbGUxNiBzX21heF9tbnRfY291bnQ7CisgX19sZTE2IHNfbWFnaWM7CisgX19sZTE2IHNfc3RhdGU7CisgX19sZTE2IHNfZXJyb3JzOworIF9fbGUxNiBzX21pbm9yX3Jldl9sZXZlbDsKKyBfX2xlMzIgc19sYXN0Y2hlY2s7CisgX19sZTMyIHNfY2hlY2tpbnRlcnZhbDsKKyBfX2xlMzIgc19jcmVhdG9yX29zOworIF9fbGUzMiBzX3Jldl9sZXZlbDsKKyBfX2xlMTYgc19kZWZfcmVzdWlkOworIF9fbGUxNiBzX2RlZl9yZXNnaWQ7CisKKyBfX2xlMzIgc19maXJzdF9pbm87CisgX19sZTE2IHNfaW5vZGVfc2l6ZTsKKyBfX2xlMTYgc19ibG9ja19ncm91cF9ucjsKKyBfX2xlMzIgc19mZWF0dXJlX2NvbXBhdDsKKyBfX2xlMzIgc19mZWF0dXJlX2luY29tcGF0OworIF9fbGUzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OworIF9fdTggc191dWlkWzE2XTsKKyBjaGFyIHNfdm9sdW1lX25hbWVbMTZdOworIGNoYXIgc19sYXN0X21vdW50ZWRbNjRdOworIF9fbGUzMiBzX2FsZ29yaXRobV91c2FnZV9iaXRtYXA7CisKKyBfX3U4IHNfcHJlYWxsb2NfYmxvY2tzOworIF9fdTggc19wcmVhbGxvY19kaXJfYmxvY2tzOworIF9fdTE2IHNfcGFkZGluZzE7CisKKyBfX3U4IHNfam91cm5hbF91dWlkWzE2XTsKKyBfX3UzMiBzX2pvdXJuYWxfaW51bTsKKyBfX3UzMiBzX2pvdXJuYWxfZGV2OworIF9fdTMyIHNfbGFzdF9vcnBoYW47CisgX191MzIgc19oYXNoX3NlZWRbNF07CisgX191OCBzX2RlZl9oYXNoX3ZlcnNpb247CisgX191OCBzX3Jlc2VydmVkX2NoYXJfcGFkOworIF9fdTE2IHNfcmVzZXJ2ZWRfd29yZF9wYWQ7CisgX19sZTMyIHNfZGVmYXVsdF9tb3VudF9vcHRzOworIF9fbGUzMiBzX2ZpcnN0X21ldGFfYmc7CisgX191MzIgc19yZXNlcnZlZFsxOTBdOworfTsKKworI2RlZmluZSBFWFQyX09TX0xJTlVYIDAKKyNkZWZpbmUgRVhUMl9PU19IVVJEIDEKKyNkZWZpbmUgRVhUMl9PU19NQVNJWCAyCisjZGVmaW5lIEVYVDJfT1NfRlJFRUJTRCAzCisjZGVmaW5lIEVYVDJfT1NfTElURVMgNAorCisjZGVmaW5lIEVYVDJfR09PRF9PTERfUkVWIDAgIAorI2RlZmluZSBFWFQyX0RZTkFNSUNfUkVWIDEgIAorCisjZGVmaW5lIEVYVDJfQ1VSUkVOVF9SRVYgRVhUMl9HT09EX09MRF9SRVYKKyNkZWZpbmUgRVhUMl9NQVhfU1VQUF9SRVYgRVhUMl9EWU5BTUlDX1JFVgorCisjZGVmaW5lIEVYVDJfR09PRF9PTERfSU5PREVfU0laRSAxMjgKKworI2RlZmluZSBFWFQyX0hBU19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDJfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgKCBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUMl9TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUMl9TRVRfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX1NFVF9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDJfQ0xFQVJfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUMl9DTEVBUl9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDJfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQyX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQyX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIDB4MDAwMQorI2RlZmluZSBFWFQyX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMgMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgMHgwMDA0CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIgMHgwMDA4CisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOTyAweDAwMTAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9ESVJfSU5ERVggMHgwMDIwCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9DT01QQVRfQU5ZIDB4ZmZmZmZmZmYKKworI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUiAweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFIDB4MDAwMgorI2RlZmluZSBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUiAweDAwMDQKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9BTlkgMHhmZmZmZmZmZgorCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9DT01QUkVTU0lPTiAweDAwMDEKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0ZJTEVUWVBFIDB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfUkVDT1ZFUiAweDAwMDQKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWIDB4MDAwOAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRyAweDAwMTAKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX0FOWSAweGZmZmZmZmZmCisKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0NPTVBBVF9TVVBQIEVYVDJfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX0lOQ09NUEFUX1NVUFAgKEVYVDJfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRXwgICBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfTUVUQV9CRykKKyNkZWZpbmUgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9TVVBQIChFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUnwgICBFWFQyX0ZFQVRVUkVfUk9fQ09NUEFUX0xBUkdFX0ZJTEV8ICAgRVhUMl9GRUFUVVJFX1JPX0NPTVBBVF9CVFJFRV9ESVIpCisjZGVmaW5lIEVYVDJfRkVBVFVSRV9ST19DT01QQVRfVU5TVVBQT1JURUQgfkVYVDJfRkVBVFVSRV9ST19DT01QQVRfU1VQUAorI2RlZmluZSBFWFQyX0ZFQVRVUkVfSU5DT01QQVRfVU5TVVBQT1JURUQgfkVYVDJfRkVBVFVSRV9JTkNPTVBBVF9TVVBQCisKKyNkZWZpbmUgRVhUMl9ERUZfUkVTVUlEIDAKKyNkZWZpbmUgRVhUMl9ERUZfUkVTR0lEIDAKKworI2RlZmluZSBFWFQyX0RFRk1fREVCVUcgMHgwMDAxCisjZGVmaW5lIEVYVDJfREVGTV9CU0RHUk9VUFMgMHgwMDAyCisjZGVmaW5lIEVYVDJfREVGTV9YQVRUUl9VU0VSIDB4MDAwNAorI2RlZmluZSBFWFQyX0RFRk1fQUNMIDB4MDAwOAorI2RlZmluZSBFWFQyX0RFRk1fVUlEMTYgMHgwMDEwCisKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFIDB4MDA2MCAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX0RBVEEgMHgwMDIwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9PUkRFUkVEIDB4MDA0MAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfV0JBQ0sgMHgwMDYwCisKKyNkZWZpbmUgRVhUMl9OQU1FX0xFTiAyNTUKKworc3RydWN0IGV4dDJfZGlyX2VudHJ5IHsKKyBfX2xlMzIgaW5vZGU7CisgX19sZTE2IHJlY19sZW47CisgX19sZTE2IG5hbWVfbGVuOworIGNoYXIgbmFtZVtFWFQyX05BTUVfTEVOXTsKK307CisKK3N0cnVjdCBleHQyX2Rpcl9lbnRyeV8yIHsKKyBfX2xlMzIgaW5vZGU7CisgX19sZTE2IHJlY19sZW47CisgX191OCBuYW1lX2xlbjsKKyBfX3U4IGZpbGVfdHlwZTsKKyBjaGFyIG5hbWVbRVhUMl9OQU1FX0xFTl07Cit9OworCitlbnVtIHsKKyBFWFQyX0ZUX1VOS05PV04sCisgRVhUMl9GVF9SRUdfRklMRSwKKyBFWFQyX0ZUX0RJUiwKKyBFWFQyX0ZUX0NIUkRFViwKKyBFWFQyX0ZUX0JMS0RFViwKKyBFWFQyX0ZUX0ZJRk8sCisgRVhUMl9GVF9TT0NLLAorIEVYVDJfRlRfU1lNTElOSywKKyBFWFQyX0ZUX01BWAorfTsKKworI2RlZmluZSBFWFQyX0RJUl9QQUQgNAorI2RlZmluZSBFWFQyX0RJUl9ST1VORCAoRVhUMl9ESVJfUEFEIC0gMSkKKyNkZWZpbmUgRVhUMl9ESVJfUkVDX0xFTihuYW1lX2xlbikgKCgobmFtZV9sZW4pICsgOCArIEVYVDJfRElSX1JPVU5EKSAmICAgfkVYVDJfRElSX1JPVU5EKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9leHQzX2ZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0M19mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgwMTZmZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZXh0M19mcy5oCkBAIC0wLDAgKzEsNDQ4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9FWFQzX0ZTX0gKKyNkZWZpbmUgX0xJTlVYX0VYVDNfRlNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI3VuZGVmIEVYVDNGU19ERUJVRworCisjZGVmaW5lIEVYVDNfREVGQVVMVF9SRVNFUlZFX0JMT0NLUyA4CisKKyNkZWZpbmUgRVhUM19NQVhfUkVTRVJWRV9CTE9DS1MgMTAyNworI2RlZmluZSBFWFQzX1JFU0VSVkVfV0lORE9XX05PVF9BTExPQ0FURUQgMAorCisjZGVmaW5lIENPTkZJR19FWFQzX0lOREVYCisKKyNpZmRlZiBFWFQzRlNfREVCVUcKKyNkZWZpbmUgZXh0M19kZWJ1ZyhmLCBhLi4uKSAgIGRvIHsgICBwcmludGsgKEtFUk5fREVCVUcgIkVYVDMtZnMgREVCVUcgKCVzLCAlZCk6ICVzOiIsICAgX19GSUxFX18sIF9fTElORV9fLCBfX0ZVTkNUSU9OX18pOyAgIHByaW50ayAoS0VSTl9ERUJVRyBmLCAjIyBhKTsgICB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgZXh0M19kZWJ1ZyhmLCBhLi4uKSBkbyB7fSB3aGlsZSAoMCkKKyNlbmRpZgorCisjZGVmaW5lIEVYVDNfQkFEX0lOTyAxICAKKyNkZWZpbmUgRVhUM19ST09UX0lOTyAyICAKKyNkZWZpbmUgRVhUM19CT09UX0xPQURFUl9JTk8gNSAgCisjZGVmaW5lIEVYVDNfVU5ERUxfRElSX0lOTyA2ICAKKyNkZWZpbmUgRVhUM19SRVNJWkVfSU5PIDcgIAorI2RlZmluZSBFWFQzX0pPVVJOQUxfSU5PIDggIAorCisjZGVmaW5lIEVYVDNfR09PRF9PTERfRklSU1RfSU5PIDExCisKKyNkZWZpbmUgRVhUM19TVVBFUl9NQUdJQyAweEVGNTMKKworI2RlZmluZSBFWFQzX0xJTktfTUFYIDMyMDAwCisKKyNkZWZpbmUgRVhUM19NSU5fQkxPQ0tfU0laRSAxMDI0CisjZGVmaW5lIEVYVDNfTUFYX0JMT0NLX1NJWkUgNDA5NgorI2RlZmluZSBFWFQzX01JTl9CTE9DS19MT0dfU0laRSAxMAorI2RlZmluZSBFWFQzX0JMT0NLX1NJWkUocykgKEVYVDNfTUlOX0JMT0NLX1NJWkUgPDwgKHMpLT5zX2xvZ19ibG9ja19zaXplKQorI2RlZmluZSBFWFQzX0FERFJfUEVSX0JMT0NLKHMpIChFWFQzX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKF9fdTMyKSkKKyNkZWZpbmUgRVhUM19CTE9DS19TSVpFX0JJVFMocykgKChzKS0+c19sb2dfYmxvY2tfc2l6ZSArIDEwKQorI2RlZmluZSBFWFQzX0lOT0RFX1NJWkUocykgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDNfR09PRF9PTERfUkVWKSA/ICAgRVhUM19HT09EX09MRF9JTk9ERV9TSVpFIDogICAocyktPnNfaW5vZGVfc2l6ZSkKKyNkZWZpbmUgRVhUM19GSVJTVF9JTk8ocykgKCgocyktPnNfcmV2X2xldmVsID09IEVYVDNfR09PRF9PTERfUkVWKSA/ICAgRVhUM19HT09EX09MRF9GSVJTVF9JTk8gOiAgIChzKS0+c19maXJzdF9pbm8pCisKKyNkZWZpbmUgRVhUM19NSU5fRlJBR19TSVpFIDEwMjQKKyNkZWZpbmUgRVhUM19NQVhfRlJBR19TSVpFIDQwOTYKKyNkZWZpbmUgRVhUM19NSU5fRlJBR19MT0dfU0laRSAxMAorI2RlZmluZSBFWFQzX0ZSQUdfU0laRShzKSAoRVhUM19NSU5fRlJBR19TSVpFIDw8IChzKS0+c19sb2dfZnJhZ19zaXplKQorI2RlZmluZSBFWFQzX0ZSQUdTX1BFUl9CTE9DSyhzKSAoRVhUM19CTE9DS19TSVpFKHMpIC8gRVhUM19GUkFHX1NJWkUocykpCisKK3N0cnVjdCBleHQzX2dyb3VwX2Rlc2MKK3sKKyBfX2xlMzIgYmdfYmxvY2tfYml0bWFwOworIF9fbGUzMiBiZ19pbm9kZV9iaXRtYXA7CisgX19sZTMyIGJnX2lub2RlX3RhYmxlOworIF9fbGUxNiBiZ19mcmVlX2Jsb2Nrc19jb3VudDsKKyBfX2xlMTYgYmdfZnJlZV9pbm9kZXNfY291bnQ7CisgX19sZTE2IGJnX3VzZWRfZGlyc19jb3VudDsKKyBfX3UxNiBiZ19wYWQ7CisgX19sZTMyIGJnX3Jlc2VydmVkWzNdOworfTsKKworI2RlZmluZSBFWFQzX0JMT0NLU19QRVJfR1JPVVAocykgKChzKS0+c19ibG9ja3NfcGVyX2dyb3VwKQorI2RlZmluZSBFWFQzX0RFU0NfUEVSX0JMT0NLKHMpIChFWFQzX0JMT0NLX1NJWkUocykgLyBzaXplb2YgKHN0cnVjdCBleHQzX2dyb3VwX2Rlc2MpKQorI2RlZmluZSBFWFQzX0lOT0RFU19QRVJfR1JPVVAocykgKChzKS0+c19pbm9kZXNfcGVyX2dyb3VwKQorCisjZGVmaW5lIEVYVDNfTkRJUl9CTE9DS1MgMTIKKyNkZWZpbmUgRVhUM19JTkRfQkxPQ0sgRVhUM19ORElSX0JMT0NLUworI2RlZmluZSBFWFQzX0RJTkRfQkxPQ0sgKEVYVDNfSU5EX0JMT0NLICsgMSkKKyNkZWZpbmUgRVhUM19USU5EX0JMT0NLIChFWFQzX0RJTkRfQkxPQ0sgKyAxKQorI2RlZmluZSBFWFQzX05fQkxPQ0tTIChFWFQzX1RJTkRfQkxPQ0sgKyAxKQorCisjZGVmaW5lIEVYVDNfU0VDUk1fRkwgMHgwMDAwMDAwMSAgCisjZGVmaW5lIEVYVDNfVU5STV9GTCAweDAwMDAwMDAyICAKKyNkZWZpbmUgRVhUM19DT01QUl9GTCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgRVhUM19TWU5DX0ZMIDB4MDAwMDAwMDggIAorI2RlZmluZSBFWFQzX0lNTVVUQUJMRV9GTCAweDAwMDAwMDEwICAKKyNkZWZpbmUgRVhUM19BUFBFTkRfRkwgMHgwMDAwMDAyMCAgCisjZGVmaW5lIEVYVDNfTk9EVU1QX0ZMIDB4MDAwMDAwNDAgIAorI2RlZmluZSBFWFQzX05PQVRJTUVfRkwgMHgwMDAwMDA4MCAgCisKKyNkZWZpbmUgRVhUM19ESVJUWV9GTCAweDAwMDAwMTAwCisjZGVmaW5lIEVYVDNfQ09NUFJCTEtfRkwgMHgwMDAwMDIwMCAgCisjZGVmaW5lIEVYVDNfTk9DT01QUl9GTCAweDAwMDAwNDAwICAKKyNkZWZpbmUgRVhUM19FQ09NUFJfRkwgMHgwMDAwMDgwMCAgCisKKyNkZWZpbmUgRVhUM19JTkRFWF9GTCAweDAwMDAxMDAwICAKKyNkZWZpbmUgRVhUM19JTUFHSUNfRkwgMHgwMDAwMjAwMCAgCisjZGVmaW5lIEVYVDNfSk9VUk5BTF9EQVRBX0ZMIDB4MDAwMDQwMDAgIAorI2RlZmluZSBFWFQzX05PVEFJTF9GTCAweDAwMDA4MDAwICAKKyNkZWZpbmUgRVhUM19ESVJTWU5DX0ZMIDB4MDAwMTAwMDAgIAorI2RlZmluZSBFWFQzX1RPUERJUl9GTCAweDAwMDIwMDAwICAKKyNkZWZpbmUgRVhUM19SRVNFUlZFRF9GTCAweDgwMDAwMDAwICAKKworI2RlZmluZSBFWFQzX0ZMX1VTRVJfVklTSUJMRSAweDAwMDNERkZGICAKKyNkZWZpbmUgRVhUM19GTF9VU0VSX01PRElGSUFCTEUgMHgwMDAzODBGRiAgCisKKyNkZWZpbmUgRVhUM19TVEFURV9KREFUQSAweDAwMDAwMDAxICAKKyNkZWZpbmUgRVhUM19TVEFURV9ORVcgMHgwMDAwMDAwMiAgCisjZGVmaW5lIEVYVDNfU1RBVEVfWEFUVFIgMHgwMDAwMDAwNCAgCisKK3N0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCB7CisgX191MzIgZ3JvdXA7CisgX191MzIgYmxvY2tfYml0bWFwOworIF9fdTMyIGlub2RlX2JpdG1hcDsKKyBfX3UzMiBpbm9kZV90YWJsZTsKKyBfX3UzMiBibG9ja3NfY291bnQ7CisgX191MTYgcmVzZXJ2ZWRfYmxvY2tzOworIF9fdTE2IHVudXNlZDsKK307CisKK3N0cnVjdCBleHQzX25ld19ncm91cF9kYXRhIHsKKyBfX3UzMiBncm91cDsKKyBfX3UzMiBibG9ja19iaXRtYXA7CisgX191MzIgaW5vZGVfYml0bWFwOworIF9fdTMyIGlub2RlX3RhYmxlOworIF9fdTMyIGJsb2Nrc19jb3VudDsKKyBfX3UxNiByZXNlcnZlZF9ibG9ja3M7CisgX191MTYgdW51c2VkOworIF9fdTMyIGZyZWVfYmxvY2tzX2NvdW50OworfTsKKworI2RlZmluZSBFWFQzX0lPQ19HRVRGTEFHUyBfSU9SKCdmJywgMSwgbG9uZykKKyNkZWZpbmUgRVhUM19JT0NfU0VURkxBR1MgX0lPVygnZicsIDIsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX0dFVFZFUlNJT04gX0lPUignZicsIDMsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX1NFVFZFUlNJT04gX0lPVygnZicsIDQsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX0dST1VQX0VYVEVORCBfSU9XKCdmJywgNywgdW5zaWduZWQgbG9uZykKKyNkZWZpbmUgRVhUM19JT0NfR1JPVVBfQUREIF9JT1coJ2YnLCA4LHN0cnVjdCBleHQzX25ld19ncm91cF9pbnB1dCkKKyNkZWZpbmUgRVhUM19JT0NfR0VUVkVSU0lPTl9PTEQgX0lPUigndicsIDEsIGxvbmcpCisjZGVmaW5lIEVYVDNfSU9DX1NFVFZFUlNJT05fT0xEIF9JT1coJ3YnLCAyLCBsb25nKQorI2RlZmluZSBFWFQzX0lPQ19HRVRSU1ZTWiBfSU9SKCdmJywgNSwgbG9uZykKKyNkZWZpbmUgRVhUM19JT0NfU0VUUlNWU1ogX0lPVygnZicsIDYsIGxvbmcpCisKK3N0cnVjdCBleHQzX21vdW50X29wdGlvbnMgeworIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CisgdWlkX3Qgc19yZXN1aWQ7CisgZ2lkX3Qgc19yZXNnaWQ7CisgdW5zaWduZWQgbG9uZyBzX2NvbW1pdF9pbnRlcnZhbDsKK307CisKK3N0cnVjdCBleHQzX2lub2RlIHsKKyBfX2xlMTYgaV9tb2RlOworIF9fbGUxNiBpX3VpZDsKKyBfX2xlMzIgaV9zaXplOworIF9fbGUzMiBpX2F0aW1lOworIF9fbGUzMiBpX2N0aW1lOworIF9fbGUzMiBpX210aW1lOworIF9fbGUzMiBpX2R0aW1lOworIF9fbGUxNiBpX2dpZDsKKyBfX2xlMTYgaV9saW5rc19jb3VudDsKKyBfX2xlMzIgaV9ibG9ja3M7CisgX19sZTMyIGlfZmxhZ3M7CisgdW5pb24geworIHN0cnVjdCB7CisgX191MzIgbF9pX3Jlc2VydmVkMTsKKyB9IGxpbnV4MTsKKyBzdHJ1Y3QgeworIF9fdTMyIGhfaV90cmFuc2xhdG9yOworIH0gaHVyZDE7Cisgc3RydWN0IHsKKyBfX3UzMiBtX2lfcmVzZXJ2ZWQxOworIH0gbWFzaXgxOworIH0gb3NkMTsKKyBfX2xlMzIgaV9ibG9ja1tFWFQzX05fQkxPQ0tTXTsKKyBfX2xlMzIgaV9nZW5lcmF0aW9uOworIF9fbGUzMiBpX2ZpbGVfYWNsOworIF9fbGUzMiBpX2Rpcl9hY2w7CisgX19sZTMyIGlfZmFkZHI7CisgdW5pb24geworIHN0cnVjdCB7CisgX191OCBsX2lfZnJhZzsKKyBfX3U4IGxfaV9mc2l6ZTsKKyBfX3UxNiBpX3BhZDE7CisgX19sZTE2IGxfaV91aWRfaGlnaDsKKyBfX2xlMTYgbF9pX2dpZF9oaWdoOworIF9fdTMyIGxfaV9yZXNlcnZlZDI7CisgfSBsaW51eDI7Cisgc3RydWN0IHsKKyBfX3U4IGhfaV9mcmFnOworIF9fdTggaF9pX2ZzaXplOworIF9fdTE2IGhfaV9tb2RlX2hpZ2g7CisgX191MTYgaF9pX3VpZF9oaWdoOworIF9fdTE2IGhfaV9naWRfaGlnaDsKKyBfX3UzMiBoX2lfYXV0aG9yOworIH0gaHVyZDI7Cisgc3RydWN0IHsKKyBfX3U4IG1faV9mcmFnOworIF9fdTggbV9pX2ZzaXplOworIF9fdTE2IG1fcGFkMTsKKyBfX3UzMiBtX2lfcmVzZXJ2ZWQyWzJdOworIH0gbWFzaXgyOworIH0gb3NkMjsKKyBfX2xlMTYgaV9leHRyYV9pc2l6ZTsKKyBfX2xlMTYgaV9wYWQxOworfTsKKworI2RlZmluZSBpX3NpemVfaGlnaCBpX2Rpcl9hY2wKKworI2lmZGVmIF9fbGludXhfXworI2RlZmluZSBpX3Jlc2VydmVkMSBvc2QxLmxpbnV4MS5sX2lfcmVzZXJ2ZWQxCisjZGVmaW5lIGlfZnJhZyBvc2QyLmxpbnV4Mi5sX2lfZnJhZworI2RlZmluZSBpX2ZzaXplIG9zZDIubGludXgyLmxfaV9mc2l6ZQorI2RlZmluZSBpX3VpZF9sb3cgaV91aWQKKyNkZWZpbmUgaV9naWRfbG93IGlfZ2lkCisjZGVmaW5lIGlfdWlkX2hpZ2ggb3NkMi5saW51eDIubF9pX3VpZF9oaWdoCisjZGVmaW5lIGlfZ2lkX2hpZ2ggb3NkMi5saW51eDIubF9pX2dpZF9oaWdoCisjZGVmaW5lIGlfcmVzZXJ2ZWQyIG9zZDIubGludXgyLmxfaV9yZXNlcnZlZDIKKworI2VsaWYgZGVmaW5lZChfX0dOVV9fKQorCisjZGVmaW5lIGlfdHJhbnNsYXRvciBvc2QxLmh1cmQxLmhfaV90cmFuc2xhdG9yCisjZGVmaW5lIGlfZnJhZyBvc2QyLmh1cmQyLmhfaV9mcmFnOworI2RlZmluZSBpX2ZzaXplIG9zZDIuaHVyZDIuaF9pX2ZzaXplOworI2RlZmluZSBpX3VpZF9oaWdoIG9zZDIuaHVyZDIuaF9pX3VpZF9oaWdoCisjZGVmaW5lIGlfZ2lkX2hpZ2ggb3NkMi5odXJkMi5oX2lfZ2lkX2hpZ2gKKyNkZWZpbmUgaV9hdXRob3Igb3NkMi5odXJkMi5oX2lfYXV0aG9yCisKKyNlbGlmIGRlZmluZWQoX19tYXNpeF9fKQorCisjZGVmaW5lIGlfcmVzZXJ2ZWQxIG9zZDEubWFzaXgxLm1faV9yZXNlcnZlZDEKKyNkZWZpbmUgaV9mcmFnIG9zZDIubWFzaXgyLm1faV9mcmFnCisjZGVmaW5lIGlfZnNpemUgb3NkMi5tYXNpeDIubV9pX2ZzaXplCisjZGVmaW5lIGlfcmVzZXJ2ZWQyIG9zZDIubWFzaXgyLm1faV9yZXNlcnZlZDIKKworI2VuZGlmCisKKyNkZWZpbmUgRVhUM19WQUxJRF9GUyAweDAwMDEgIAorI2RlZmluZSBFWFQzX0VSUk9SX0ZTIDB4MDAwMiAgCisjZGVmaW5lIEVYVDNfT1JQSEFOX0ZTIDB4MDAwNCAgCisKKyNkZWZpbmUgRVhUM19NT1VOVF9DSEVDSyAweDAwMDAxICAKKyNkZWZpbmUgRVhUM19NT1VOVF9PTERBTExPQyAweDAwMDAyICAKKyNkZWZpbmUgRVhUM19NT1VOVF9HUlBJRCAweDAwMDA0ICAKKyNkZWZpbmUgRVhUM19NT1VOVF9ERUJVRyAweDAwMDA4ICAKKyNkZWZpbmUgRVhUM19NT1VOVF9FUlJPUlNfQ09OVCAweDAwMDEwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9FUlJPUlNfUk8gMHgwMDAyMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfRVJST1JTX1BBTklDIDB4MDAwNDAgIAorI2RlZmluZSBFWFQzX01PVU5UX01JTklYX0RGIDB4MDAwODAgIAorI2RlZmluZSBFWFQzX01PVU5UX05PTE9BRCAweDAwMTAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9BQk9SVCAweDAwMjAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9EQVRBX0ZMQUdTIDB4MDBDMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX0pPVVJOQUxfREFUQSAweDAwNDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9PUkRFUkVEX0RBVEEgMHgwMDgwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfV1JJVEVCQUNLX0RBVEEgMHgwMEMwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfVVBEQVRFX0pPVVJOQUwgMHgwMTAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfTk9fVUlEMzIgMHgwMjAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfWEFUVFJfVVNFUiAweDA0MDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9QT1NJWF9BQ0wgMHgwODAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfUkVTRVJWQVRJT04gMHgxMDAwMCAgCisjZGVmaW5lIEVYVDNfTU9VTlRfQkFSUklFUiAweDIwMDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9OT0JIIDB4NDAwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1FVT1RBIDB4ODAwMDAgIAorI2RlZmluZSBFWFQzX01PVU5UX1VTUlFVT1RBIDB4MTAwMDAwICAKKyNkZWZpbmUgRVhUM19NT1VOVF9HUlBRVU9UQSAweDIwMDAwMCAgCisKKyNpZm5kZWYgX0xJTlVYX0VYVDJfRlNfSAorI2RlZmluZSBjbGVhcl9vcHQobywgb3B0KSBvICY9IH5FWFQzX01PVU5UXyMjb3B0CisjZGVmaW5lIHNldF9vcHQobywgb3B0KSBvIHw9IEVYVDNfTU9VTlRfIyNvcHQKKyNkZWZpbmUgdGVzdF9vcHQoc2IsIG9wdCkgKEVYVDNfU0Ioc2IpLT5zX21vdW50X29wdCAmICAgRVhUM19NT1VOVF8jI29wdCkKKyNlbHNlCisjZGVmaW5lIEVYVDJfTU9VTlRfTk9MT0FEIEVYVDNfTU9VTlRfTk9MT0FECisjZGVmaW5lIEVYVDJfTU9VTlRfQUJPUlQgRVhUM19NT1VOVF9BQk9SVAorI2RlZmluZSBFWFQyX01PVU5UX0RBVEFfRkxBR1MgRVhUM19NT1VOVF9EQVRBX0ZMQUdTCisjZW5kaWYKKworI2RlZmluZSBleHQzX3NldF9iaXQgZXh0Ml9zZXRfYml0CisjZGVmaW5lIGV4dDNfc2V0X2JpdF9hdG9taWMgZXh0Ml9zZXRfYml0X2F0b21pYworI2RlZmluZSBleHQzX2NsZWFyX2JpdCBleHQyX2NsZWFyX2JpdAorI2RlZmluZSBleHQzX2NsZWFyX2JpdF9hdG9taWMgZXh0Ml9jbGVhcl9iaXRfYXRvbWljCisjZGVmaW5lIGV4dDNfdGVzdF9iaXQgZXh0Ml90ZXN0X2JpdAorI2RlZmluZSBleHQzX2ZpbmRfZmlyc3RfemVyb19iaXQgZXh0Ml9maW5kX2ZpcnN0X3plcm9fYml0CisjZGVmaW5lIGV4dDNfZmluZF9uZXh0X3plcm9fYml0IGV4dDJfZmluZF9uZXh0X3plcm9fYml0CisKKyNkZWZpbmUgRVhUM19ERkxfTUFYX01OVF9DT1VOVCAyMCAgCisjZGVmaW5lIEVYVDNfREZMX0NIRUNLSU5URVJWQUwgMCAgCisKKyNkZWZpbmUgRVhUM19FUlJPUlNfQ09OVElOVUUgMSAgCisjZGVmaW5lIEVYVDNfRVJST1JTX1JPIDIgIAorI2RlZmluZSBFWFQzX0VSUk9SU19QQU5JQyAzICAKKyNkZWZpbmUgRVhUM19FUlJPUlNfREVGQVVMVCBFWFQzX0VSUk9SU19DT05USU5VRQorCitzdHJ1Y3QgZXh0M19zdXBlcl9ibG9jayB7CisgIF9fbGUzMiBzX2lub2Rlc19jb3VudDsKKyBfX2xlMzIgc19ibG9ja3NfY291bnQ7CisgX19sZTMyIHNfcl9ibG9ja3NfY291bnQ7CisgX19sZTMyIHNfZnJlZV9ibG9ja3NfY291bnQ7CisgIF9fbGUzMiBzX2ZyZWVfaW5vZGVzX2NvdW50OworIF9fbGUzMiBzX2ZpcnN0X2RhdGFfYmxvY2s7CisgX19sZTMyIHNfbG9nX2Jsb2NrX3NpemU7CisgX19sZTMyIHNfbG9nX2ZyYWdfc2l6ZTsKKyAgX19sZTMyIHNfYmxvY2tzX3Blcl9ncm91cDsKKyBfX2xlMzIgc19mcmFnc19wZXJfZ3JvdXA7CisgX19sZTMyIHNfaW5vZGVzX3Blcl9ncm91cDsKKyBfX2xlMzIgc19tdGltZTsKKyAgX19sZTMyIHNfd3RpbWU7CisgX19sZTE2IHNfbW50X2NvdW50OworIF9fbGUxNiBzX21heF9tbnRfY291bnQ7CisgX19sZTE2IHNfbWFnaWM7CisgX19sZTE2IHNfc3RhdGU7CisgX19sZTE2IHNfZXJyb3JzOworIF9fbGUxNiBzX21pbm9yX3Jldl9sZXZlbDsKKyAgX19sZTMyIHNfbGFzdGNoZWNrOworIF9fbGUzMiBzX2NoZWNraW50ZXJ2YWw7CisgX19sZTMyIHNfY3JlYXRvcl9vczsKKyBfX2xlMzIgc19yZXZfbGV2ZWw7CisgIF9fbGUxNiBzX2RlZl9yZXN1aWQ7CisgX19sZTE2IHNfZGVmX3Jlc2dpZDsKKworIF9fbGUzMiBzX2ZpcnN0X2lubzsKKyBfX2xlMTYgc19pbm9kZV9zaXplOworIF9fbGUxNiBzX2Jsb2NrX2dyb3VwX25yOworIF9fbGUzMiBzX2ZlYXR1cmVfY29tcGF0OworICBfX2xlMzIgc19mZWF0dXJlX2luY29tcGF0OworIF9fbGUzMiBzX2ZlYXR1cmVfcm9fY29tcGF0OworICBfX3U4IHNfdXVpZFsxNl07CisgIGNoYXIgc192b2x1bWVfbmFtZVsxNl07CisgIGNoYXIgc19sYXN0X21vdW50ZWRbNjRdOworICBfX2xlMzIgc19hbGdvcml0aG1fdXNhZ2VfYml0bWFwOworCisgX191OCBzX3ByZWFsbG9jX2Jsb2NrczsKKyBfX3U4IHNfcHJlYWxsb2NfZGlyX2Jsb2NrczsKKyBfX3UxNiBzX3Jlc2VydmVkX2dkdF9ibG9ja3M7CisKKyAgX191OCBzX2pvdXJuYWxfdXVpZFsxNl07CisgIF9fbGUzMiBzX2pvdXJuYWxfaW51bTsKKyBfX2xlMzIgc19qb3VybmFsX2RldjsKKyBfX2xlMzIgc19sYXN0X29ycGhhbjsKKyBfX2xlMzIgc19oYXNoX3NlZWRbNF07CisgX191OCBzX2RlZl9oYXNoX3ZlcnNpb247CisgX191OCBzX3Jlc2VydmVkX2NoYXJfcGFkOworIF9fdTE2IHNfcmVzZXJ2ZWRfd29yZF9wYWQ7CisgX19sZTMyIHNfZGVmYXVsdF9tb3VudF9vcHRzOworIF9fbGUzMiBzX2ZpcnN0X21ldGFfYmc7CisgX191MzIgc19yZXNlcnZlZFsxOTBdOworfTsKKworI2RlZmluZSBFWFQzX1NCKHNiKSAoc2IpCisKKyNkZWZpbmUgTkVYVF9PUlBIQU4oaW5vZGUpIEVYVDNfSShpbm9kZSktPmlfZHRpbWUKKworI2RlZmluZSBFWFQzX09TX0xJTlVYIDAKKyNkZWZpbmUgRVhUM19PU19IVVJEIDEKKyNkZWZpbmUgRVhUM19PU19NQVNJWCAyCisjZGVmaW5lIEVYVDNfT1NfRlJFRUJTRCAzCisjZGVmaW5lIEVYVDNfT1NfTElURVMgNAorCisjZGVmaW5lIEVYVDNfR09PRF9PTERfUkVWIDAgIAorI2RlZmluZSBFWFQzX0RZTkFNSUNfUkVWIDEgIAorCisjZGVmaW5lIEVYVDNfQ1VSUkVOVF9SRVYgRVhUM19HT09EX09MRF9SRVYKKyNkZWZpbmUgRVhUM19NQVhfU1VQUF9SRVYgRVhUM19EWU5BTUlDX1JFVgorCisjZGVmaW5lIEVYVDNfR09PRF9PTERfSU5PREVfU0laRSAxMjgKKworI2RlZmluZSBFWFQzX0hBU19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9jb21wYXQgJiBjcHVfdG9fbGUzMihtYXNrKSApCisjZGVmaW5lIEVYVDNfSEFTX1JPX0NPTVBBVF9GRUFUVVJFKHNiLG1hc2spICAgKCBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUM19IQVNfSU5DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgICggRVhUM19TQihzYiktPnNfZXMtPnNfZmVhdHVyZV9pbmNvbXBhdCAmIGNwdV90b19sZTMyKG1hc2spICkKKyNkZWZpbmUgRVhUM19TRVRfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCB8PSBjcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX1NFVF9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDNfU0VUX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0IHw9IGNwdV90b19sZTMyKG1hc2spCisjZGVmaW5lIEVYVDNfQ0xFQVJfQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2NvbXBhdCAmPSB+Y3B1X3RvX2xlMzIobWFzaykKKyNkZWZpbmUgRVhUM19DTEVBUl9ST19DT01QQVRfRkVBVFVSRShzYixtYXNrKSAgIEVYVDNfU0Ioc2IpLT5zX2VzLT5zX2ZlYXR1cmVfcm9fY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorI2RlZmluZSBFWFQzX0NMRUFSX0lOQ09NUEFUX0ZFQVRVUkUoc2IsbWFzaykgICBFWFQzX1NCKHNiKS0+c19lcy0+c19mZWF0dXJlX2luY29tcGF0ICY9IH5jcHVfdG9fbGUzMihtYXNrKQorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfRElSX1BSRUFMTE9DIDB4MDAwMQorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0lNQUdJQ19JTk9ERVMgMHgwMDAyCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfSEFTX0pPVVJOQUwgMHgwMDA0CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfRVhUX0FUVFIgMHgwMDA4CisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfUkVTSVpFX0lOT0RFIDB4MDAxMAorI2RlZmluZSBFWFQzX0ZFQVRVUkVfQ09NUEFUX0RJUl9JTkRFWCAweDAwMjAKKworI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX1NQQVJTRV9TVVBFUiAweDAwMDEKKyNkZWZpbmUgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFIDB4MDAwMgorI2RlZmluZSBFWFQzX0ZFQVRVUkVfUk9fQ09NUEFUX0JUUkVFX0RJUiAweDAwMDQKKworI2RlZmluZSBFWFQzX0ZFQVRVUkVfSU5DT01QQVRfQ09NUFJFU1NJT04gMHgwMDAxCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9GSUxFVFlQRSAweDAwMDIKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVIgMHgwMDA0ICAKKyNkZWZpbmUgRVhUM19GRUFUVVJFX0lOQ09NUEFUX0pPVVJOQUxfREVWIDB4MDAwOCAgCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9NRVRBX0JHIDB4MDAxMAorCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9DT01QQVRfU1VQUCBFWFQyX0ZFQVRVUkVfQ09NUEFUX0VYVF9BVFRSCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9JTkNPTVBBVF9TVVBQIChFWFQzX0ZFQVRVUkVfSU5DT01QQVRfRklMRVRZUEV8ICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX1JFQ09WRVJ8ICAgRVhUM19GRUFUVVJFX0lOQ09NUEFUX01FVEFfQkcpCisjZGVmaW5lIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfU1VQUCAoRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9TUEFSU0VfU1VQRVJ8ICAgRVhUM19GRUFUVVJFX1JPX0NPTVBBVF9MQVJHRV9GSUxFfCAgIEVYVDNfRkVBVFVSRV9ST19DT01QQVRfQlRSRUVfRElSKQorCisjZGVmaW5lIEVYVDNfREVGX1JFU1VJRCAwCisjZGVmaW5lIEVYVDNfREVGX1JFU0dJRCAwCisKKyNkZWZpbmUgRVhUM19ERUZNX0RFQlVHIDB4MDAwMQorI2RlZmluZSBFWFQzX0RFRk1fQlNER1JPVVBTIDB4MDAwMgorI2RlZmluZSBFWFQzX0RFRk1fWEFUVFJfVVNFUiAweDAwMDQKKyNkZWZpbmUgRVhUM19ERUZNX0FDTCAweDAwMDgKKyNkZWZpbmUgRVhUM19ERUZNX1VJRDE2IDB4MDAxMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREUgMHgwMDYwCisjZGVmaW5lIEVYVDNfREVGTV9KTU9ERV9EQVRBIDB4MDAyMAorI2RlZmluZSBFWFQzX0RFRk1fSk1PREVfT1JERVJFRCAweDAwNDAKKyNkZWZpbmUgRVhUM19ERUZNX0pNT0RFX1dCQUNLIDB4MDA2MAorCisjZGVmaW5lIEVYVDNfTkFNRV9MRU4gMjU1CisKK3N0cnVjdCBleHQzX2Rpcl9lbnRyeSB7CisgX19sZTMyIGlub2RlOworIF9fbGUxNiByZWNfbGVuOworIF9fbGUxNiBuYW1lX2xlbjsKKyBjaGFyIG5hbWVbRVhUM19OQU1FX0xFTl07Cit9OworCitzdHJ1Y3QgZXh0M19kaXJfZW50cnlfMiB7CisgX19sZTMyIGlub2RlOworIF9fbGUxNiByZWNfbGVuOworIF9fdTggbmFtZV9sZW47CisgX191OCBmaWxlX3R5cGU7CisgY2hhciBuYW1lW0VYVDNfTkFNRV9MRU5dOworfTsKKworI2RlZmluZSBFWFQzX0ZUX1VOS05PV04gMAorI2RlZmluZSBFWFQzX0ZUX1JFR19GSUxFIDEKKyNkZWZpbmUgRVhUM19GVF9ESVIgMgorI2RlZmluZSBFWFQzX0ZUX0NIUkRFViAzCisjZGVmaW5lIEVYVDNfRlRfQkxLREVWIDQKKyNkZWZpbmUgRVhUM19GVF9GSUZPIDUKKyNkZWZpbmUgRVhUM19GVF9TT0NLIDYKKyNkZWZpbmUgRVhUM19GVF9TWU1MSU5LIDcKKworI2RlZmluZSBFWFQzX0ZUX01BWCA4CisKKyNkZWZpbmUgRVhUM19ESVJfUEFEIDQKKyNkZWZpbmUgRVhUM19ESVJfUk9VTkQgKEVYVDNfRElSX1BBRCAtIDEpCisjZGVmaW5lIEVYVDNfRElSX1JFQ19MRU4obmFtZV9sZW4pICgoKG5hbWVfbGVuKSArIDggKyBFWFQzX0RJUl9ST1VORCkgJiAgIH5FWFQzX0RJUl9ST1VORCkKKworI2RlZmluZSBpc19keChkaXIpIDAKKyNkZWZpbmUgRVhUM19ESVJfTElOS19NQVgoZGlyKSAoKGRpciktPmlfbmxpbmsgPj0gRVhUM19MSU5LX01BWCkKKyNkZWZpbmUgRVhUM19ESVJfTElOS19FTVBUWShkaXIpICgoZGlyKS0+aV9ubGluayA9PSAyKQorCisjZGVmaW5lIERYX0hBU0hfTEVHQUNZIDAKKyNkZWZpbmUgRFhfSEFTSF9IQUxGX01ENCAxCisjZGVmaW5lIERYX0hBU0hfVEVBIDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmFkdmlzZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZhZHZpc2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWEwYTRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZhZHZpc2UuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIEZBRFZJU0VfSF9JTkNMVURFRAorI2RlZmluZSBGQURWSVNFX0hfSU5DTFVERUQKKworI2RlZmluZSBQT1NJWF9GQURWX05PUk1BTCAwICAKKyNkZWZpbmUgUE9TSVhfRkFEVl9SQU5ET00gMSAgCisjZGVmaW5lIFBPU0lYX0ZBRFZfU0VRVUVOVElBTCAyICAKKyNkZWZpbmUgUE9TSVhfRkFEVl9XSUxMTkVFRCAzICAKKworI2lmZGVmIF9fczM5MHhfXworI2RlZmluZSBQT1NJWF9GQURWX0RPTlRORUVEIDYgIAorI2RlZmluZSBQT1NJWF9GQURWX05PUkVVU0UgNyAgCisjZWxzZQorI2RlZmluZSBQT1NJWF9GQURWX0RPTlRORUVEIDQgIAorI2RlZmluZSBQT1NJWF9GQURWX05PUkVVU0UgNSAgCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMzNmM0MzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmIuaApAQCAtMCwwICsxLDM0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRkJfSAorI2RlZmluZSBfTElOVVhfRkJfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKKyNkZWZpbmUgRkJfTUFKT1IgMjkKKyNkZWZpbmUgRkJfTUFYIDMyICAKKworI2RlZmluZSBGQklPR0VUX1ZTQ1JFRU5JTkZPIDB4NDYwMAorI2RlZmluZSBGQklPUFVUX1ZTQ1JFRU5JTkZPIDB4NDYwMQorI2RlZmluZSBGQklPR0VUX0ZTQ1JFRU5JTkZPIDB4NDYwMgorI2RlZmluZSBGQklPR0VUQ01BUCAweDQ2MDQKKyNkZWZpbmUgRkJJT1BVVENNQVAgMHg0NjA1CisjZGVmaW5lIEZCSU9QQU5fRElTUExBWSAweDQ2MDYKKyNkZWZpbmUgRkJJT19DVVJTT1IgX0lPV1IoJ0YnLCAweDA4LCBzdHJ1Y3QgZmJfY3Vyc29yKQorCisjZGVmaW5lIEZCSU9HRVRfQ09OMkZCTUFQIDB4NDYwRgorI2RlZmluZSBGQklPUFVUX0NPTjJGQk1BUCAweDQ2MTAKKyNkZWZpbmUgRkJJT0JMQU5LIDB4NDYxMSAgCisjZGVmaW5lIEZCSU9HRVRfVkJMQU5LIF9JT1IoJ0YnLCAweDEyLCBzdHJ1Y3QgZmJfdmJsYW5rKQorI2RlZmluZSBGQklPX0FMTE9DIDB4NDYxMworI2RlZmluZSBGQklPX0ZSRUUgMHg0NjE0CisjZGVmaW5lIEZCSU9HRVRfR0xZUEggMHg0NjE1CisjZGVmaW5lIEZCSU9HRVRfSFdDSU5GTyAweDQ2MTYKKyNkZWZpbmUgRkJJT1BVVF9NT0RFSU5GTyAweDQ2MTcKKyNkZWZpbmUgRkJJT0dFVF9ESVNQSU5GTyAweDQ2MTgKKworI2RlZmluZSBGQl9UWVBFX1BBQ0tFRF9QSVhFTFMgMCAgCisjZGVmaW5lIEZCX1RZUEVfUExBTkVTIDEgIAorI2RlZmluZSBGQl9UWVBFX0lOVEVSTEVBVkVEX1BMQU5FUyAyICAKKyNkZWZpbmUgRkJfVFlQRV9URVhUIDMgIAorI2RlZmluZSBGQl9UWVBFX1ZHQV9QTEFORVMgNCAgCisKKyNkZWZpbmUgRkJfQVVYX1RFWFRfTURBIDAgIAorI2RlZmluZSBGQl9BVVhfVEVYVF9DR0EgMSAgCisjZGVmaW5lIEZCX0FVWF9URVhUX1MzX01NSU8gMiAgCisjZGVmaW5lIEZCX0FVWF9URVhUX01HQV9TVEVQMTYgMyAgCisjZGVmaW5lIEZCX0FVWF9URVhUX01HQV9TVEVQOCA0ICAKKworI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19WR0E0IDAgIAorI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19DRkI0IDEgIAorI2RlZmluZSBGQl9BVVhfVkdBX1BMQU5FU19DRkI4IDIgIAorCisjZGVmaW5lIEZCX1ZJU1VBTF9NT05PMDEgMCAgCisjZGVmaW5lIEZCX1ZJU1VBTF9NT05PMTAgMSAgCisjZGVmaW5lIEZCX1ZJU1VBTF9UUlVFQ09MT1IgMiAgCisjZGVmaW5lIEZCX1ZJU1VBTF9QU0VVRE9DT0xPUiAzICAKKyNkZWZpbmUgRkJfVklTVUFMX0RJUkVDVENPTE9SIDQgIAorI2RlZmluZSBGQl9WSVNVQUxfU1RBVElDX1BTRVVET0NPTE9SIDUgIAorCisjZGVmaW5lIEZCX0FDQ0VMX05PTkUgMCAgCisjZGVmaW5lIEZCX0FDQ0VMX0FUQVJJQkxJVFQgMSAgCisjZGVmaW5lIEZCX0FDQ0VMX0FNSUdBQkxJVFQgMiAgCisjZGVmaW5lIEZCX0FDQ0VMX1MzX1RSSU82NCAzICAKKyNkZWZpbmUgRkJfQUNDRUxfTkNSXzc3QzMyQkxUIDQgIAorI2RlZmluZSBGQl9BQ0NFTF9TM19WSVJHRSA1ICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NEdYIDYgIAorI2RlZmluZSBGQl9BQ0NFTF9ERUNfVEdBIDcgIAorI2RlZmluZSBGQl9BQ0NFTF9BVElfTUFDSDY0Q1QgOCAgCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9NQUNINjRWVCA5ICAKKyNkZWZpbmUgRkJfQUNDRUxfQVRJX01BQ0g2NEdUIDEwICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VOX0NSRUFUT1IgMTEgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ0dTSVggMTIgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fTEVPIDEzICAKKyNkZWZpbmUgRkJfQUNDRUxfSU1TX1RXSU5UVVJCTyAxNCAgCisjZGVmaW5lIEZCX0FDQ0VMXzNETEFCU19QRVJNRURJQTIgMTUgIAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMjA2NFcgMTYgIAorI2RlZmluZSBGQl9BQ0NFTF9NQVRST1hfTUdBMTA2NFNHIDE3ICAKKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTIxNjRXIDE4ICAKKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQTIxNjRXX0FHUCAxOSAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHMTAwIDIwICAKKyNkZWZpbmUgRkJfQUNDRUxfTUFUUk9YX01HQUcyMDAgMjEgIAorI2RlZmluZSBGQl9BQ0NFTF9TVU5fQ0cxNCAyMiAgCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9CV1RXTyAyMyAgCisjZGVmaW5lIEZCX0FDQ0VMX1NVTl9DR1RIUkVFIDI0ICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VOX1RDWCAyNSAgCisjZGVmaW5lIEZCX0FDQ0VMX01BVFJPWF9NR0FHNDAwIDI2ICAKKyNkZWZpbmUgRkJfQUNDRUxfTlYzIDI3ICAKKyNkZWZpbmUgRkJfQUNDRUxfTlY0IDI4ICAKKyNkZWZpbmUgRkJfQUNDRUxfTlY1IDI5ICAKKyNkZWZpbmUgRkJfQUNDRUxfQ1RfNjU1NXggMzAgIAorI2RlZmluZSBGQl9BQ0NFTF8zREZYX0JBTlNIRUUgMzEgIAorI2RlZmluZSBGQl9BQ0NFTF9BVElfUkFHRTEyOCAzMiAgCisjZGVmaW5lIEZCX0FDQ0VMX0lHU19DWUJFUjIwMDAgMzMgIAorI2RlZmluZSBGQl9BQ0NFTF9JR1NfQ1lCRVIyMDEwIDM0ICAKKyNkZWZpbmUgRkJfQUNDRUxfSUdTX0NZQkVSNTAwMCAzNSAgCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19HTEFNT1VSIDM2ICAKKyNkZWZpbmUgRkJfQUNDRUxfM0RMQUJTX1BFUk1FRElBMyAzNyAgCisjZGVmaW5lIEZCX0FDQ0VMX0FUSV9SQURFT04gMzggIAorI2RlZmluZSBGQl9BQ0NFTF9JODEwIDM5ICAKKyNkZWZpbmUgRkJfQUNDRUxfU0lTX0dMQU1PVVJfMiA0MCAgCisjZGVmaW5lIEZCX0FDQ0VMX1NJU19YQUJSRSA0MSAgCisjZGVmaW5lIEZCX0FDQ0VMX0k4MzAgNDIgIAorI2RlZmluZSBGQl9BQ0NFTF9OVl8xMCA0MyAgCisjZGVmaW5lIEZCX0FDQ0VMX05WXzIwIDQ0ICAKKyNkZWZpbmUgRkJfQUNDRUxfTlZfMzAgNDUgIAorI2RlZmluZSBGQl9BQ0NFTF9OVl80MCA0NiAgCisjZGVmaW5lIEZCX0FDQ0VMX1hHSV9WT0xBUklfViA0NyAgCisjZGVmaW5lIEZCX0FDQ0VMX1hHSV9WT0xBUklfWiA0OCAgCisjZGVmaW5lIEZCX0FDQ0VMX09NQVAxNjEwIDQ5ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDcwIDkwICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkwIDkxICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDkzIDkyICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMDk3IDkzICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMTYwIDk0ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjAwIDk1ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMjMwIDk2ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMzYwIDk3ICAKKyNkZWZpbmUgRkJfQUNDRUxfTkVPTUFHSUNfTk0yMzgwIDk4ICAKKworI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0U0IDB4ODAgIAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0UzRCAweDgxICAKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFM0RfTVYgMHg4MiAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRTIwMDAgMHg4MyAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9NWF9NViAweDg0ICAKKyNkZWZpbmUgRkJfQUNDRUxfU0FWQUdFX01YIDB4ODUgIAorI2RlZmluZSBGQl9BQ0NFTF9TQVZBR0VfSVhfTVYgMHg4NiAgCisjZGVmaW5lIEZCX0FDQ0VMX1NBVkFHRV9JWCAweDg3ICAKKyNkZWZpbmUgRkJfQUNDRUxfUFJPU0FWQUdFX1BNIDB4ODggIAorI2RlZmluZSBGQl9BQ0NFTF9QUk9TQVZBR0VfS00gMHg4OSAgCisjZGVmaW5lIEZCX0FDQ0VMX1MzVFdJU1RFUl9QIDB4OGEgIAorI2RlZmluZSBGQl9BQ0NFTF9TM1RXSVNURVJfSyAweDhiICAKKyNkZWZpbmUgRkJfQUNDRUxfU1VQRVJTQVZBR0UgMHg4YyAgCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFIgMHg4ZCAgCisjZGVmaW5lIEZCX0FDQ0VMX1BST1NBVkFHRV9ERFJLIDB4OGUgIAorCitzdHJ1Y3QgZmJfZml4X3NjcmVlbmluZm8geworIGNoYXIgaWRbMTZdOworIHVuc2lnbmVkIGxvbmcgc21lbV9zdGFydDsKKworIF9fdTMyIHNtZW1fbGVuOworIF9fdTMyIHR5cGU7CisgX191MzIgdHlwZV9hdXg7CisgX191MzIgdmlzdWFsOworIF9fdTE2IHhwYW5zdGVwOworIF9fdTE2IHlwYW5zdGVwOworIF9fdTE2IHl3cmFwc3RlcDsKKyBfX3UzMiBsaW5lX2xlbmd0aDsKKyB1bnNpZ25lZCBsb25nIG1taW9fc3RhcnQ7CisKKyBfX3UzMiBtbWlvX2xlbjsKKyBfX3UzMiBhY2NlbDsKKworIF9fdTE2IHJlc2VydmVkWzNdOworfTsKKworc3RydWN0IGZiX2JpdGZpZWxkIHsKKyBfX3UzMiBvZmZzZXQ7CisgX191MzIgbGVuZ3RoOworIF9fdTMyIG1zYl9yaWdodDsKKworfTsKKworI2RlZmluZSBGQl9OT05TVERfSEFNIDEgIAorCisjZGVmaW5lIEZCX0FDVElWQVRFX05PVyAwICAKKyNkZWZpbmUgRkJfQUNUSVZBVEVfTlhUT1BFTiAxICAKKyNkZWZpbmUgRkJfQUNUSVZBVEVfVEVTVCAyICAKKyNkZWZpbmUgRkJfQUNUSVZBVEVfTUFTSyAxNQorCisjZGVmaW5lIEZCX0FDVElWQVRFX1ZCTCAxNiAgCisjZGVmaW5lIEZCX0NIQU5HRV9DTUFQX1ZCTCAzMiAgCisjZGVmaW5lIEZCX0FDVElWQVRFX0FMTCA2NCAgCisjZGVmaW5lIEZCX0FDVElWQVRFX0ZPUkNFIDEyOCAgCisjZGVmaW5lIEZCX0FDVElWQVRFX0lOVl9NT0RFIDI1NiAgCisKKyNkZWZpbmUgRkJfQUNDRUxGX1RFWFQgMSAgCisKKyNkZWZpbmUgRkJfU1lOQ19IT1JfSElHSF9BQ1QgMSAgCisjZGVmaW5lIEZCX1NZTkNfVkVSVF9ISUdIX0FDVCAyICAKKyNkZWZpbmUgRkJfU1lOQ19FWFQgNCAgCisjZGVmaW5lIEZCX1NZTkNfQ09NUF9ISUdIX0FDVCA4ICAKKyNkZWZpbmUgRkJfU1lOQ19CUk9BRENBU1QgMTYgIAorCisjZGVmaW5lIEZCX1NZTkNfT05fR1JFRU4gMzIgIAorCisjZGVmaW5lIEZCX1ZNT0RFX05PTklOVEVSTEFDRUQgMCAgCisjZGVmaW5lIEZCX1ZNT0RFX0lOVEVSTEFDRUQgMSAgCisjZGVmaW5lIEZCX1ZNT0RFX0RPVUJMRSAyICAKKyNkZWZpbmUgRkJfVk1PREVfTUFTSyAyNTUKKworI2RlZmluZSBGQl9WTU9ERV9ZV1JBUCAyNTYgIAorI2RlZmluZSBGQl9WTU9ERV9TTU9PVEhfWFBBTiA1MTIgIAorI2RlZmluZSBGQl9WTU9ERV9DT05VUERBVEUgNTEyICAKKworI2RlZmluZSBGQl9ST1RBVEVfVVIgMAorI2RlZmluZSBGQl9ST1RBVEVfQ1cgMQorI2RlZmluZSBGQl9ST1RBVEVfVUQgMgorI2RlZmluZSBGQl9ST1RBVEVfQ0NXIDMKKworI2RlZmluZSBQSUNPUzJLSFooYSkgKDEwMDAwMDAwMDBVTC8oYSkpCisjZGVmaW5lIEtIWjJQSUNPUyhhKSAoMTAwMDAwMDAwMFVMLyhhKSkKKworc3RydWN0IGZiX3Zhcl9zY3JlZW5pbmZvIHsKKyBfX3UzMiB4cmVzOworIF9fdTMyIHlyZXM7CisgX191MzIgeHJlc192aXJ0dWFsOworIF9fdTMyIHlyZXNfdmlydHVhbDsKKyBfX3UzMiB4b2Zmc2V0OworIF9fdTMyIHlvZmZzZXQ7CisKKyBfX3UzMiBiaXRzX3Blcl9waXhlbDsKKyBfX3UzMiBncmF5c2NhbGU7CisKKyBzdHJ1Y3QgZmJfYml0ZmllbGQgcmVkOworIHN0cnVjdCBmYl9iaXRmaWVsZCBncmVlbjsKKyBzdHJ1Y3QgZmJfYml0ZmllbGQgYmx1ZTsKKyBzdHJ1Y3QgZmJfYml0ZmllbGQgdHJhbnNwOworCisgX191MzIgbm9uc3RkOworCisgX191MzIgYWN0aXZhdGU7CisKKyBfX3UzMiBoZWlnaHQ7CisgX191MzIgd2lkdGg7CisKKyBfX3UzMiBhY2NlbF9mbGFnczsKKworIF9fdTMyIHBpeGNsb2NrOworIF9fdTMyIGxlZnRfbWFyZ2luOworIF9fdTMyIHJpZ2h0X21hcmdpbjsKKyBfX3UzMiB1cHBlcl9tYXJnaW47CisgX191MzIgbG93ZXJfbWFyZ2luOworIF9fdTMyIGhzeW5jX2xlbjsKKyBfX3UzMiB2c3luY19sZW47CisgX191MzIgc3luYzsKKyBfX3UzMiB2bW9kZTsKKyBfX3UzMiByb3RhdGU7CisgX191MzIgcmVzZXJ2ZWRbNV07Cit9OworCitzdHJ1Y3QgZmJfY21hcCB7CisgX191MzIgc3RhcnQ7CisgX191MzIgbGVuOworIF9fdTE2ICpyZWQ7CisgX191MTYgKmdyZWVuOworIF9fdTE2ICpibHVlOworIF9fdTE2ICp0cmFuc3A7Cit9OworCitzdHJ1Y3QgZmJfY29uMmZibWFwIHsKKyBfX3UzMiBjb25zb2xlOworIF9fdTMyIGZyYW1lYnVmZmVyOworfTsKKworI2RlZmluZSBWRVNBX05PX0JMQU5LSU5HIDAKKyNkZWZpbmUgVkVTQV9WU1lOQ19TVVNQRU5EIDEKKyNkZWZpbmUgVkVTQV9IU1lOQ19TVVNQRU5EIDIKKyNkZWZpbmUgVkVTQV9QT1dFUkRPV04gMworCitlbnVtIHsKKworIEZCX0JMQU5LX1VOQkxBTksgPSBWRVNBX05PX0JMQU5LSU5HLAorCisgRkJfQkxBTktfTk9STUFMID0gVkVTQV9OT19CTEFOS0lORyArIDEsCisKKyBGQl9CTEFOS19WU1lOQ19TVVNQRU5EID0gVkVTQV9WU1lOQ19TVVNQRU5EICsgMSwKKworIEZCX0JMQU5LX0hTWU5DX1NVU1BFTkQgPSBWRVNBX0hTWU5DX1NVU1BFTkQgKyAxLAorCisgRkJfQkxBTktfUE9XRVJET1dOID0gVkVTQV9QT1dFUkRPV04gKyAxCit9OworCisjZGVmaW5lIEZCX1ZCTEFOS19WQkxBTktJTkcgMHgwMDEgIAorI2RlZmluZSBGQl9WQkxBTktfSEJMQU5LSU5HIDB4MDAyICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfVkJMQU5LIDB4MDA0ICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfSEJMQU5LIDB4MDA4ICAKKyNkZWZpbmUgRkJfVkJMQU5LX0hBVkVfQ09VTlQgMHgwMTAgIAorI2RlZmluZSBGQl9WQkxBTktfSEFWRV9WQ09VTlQgMHgwMjAgIAorI2RlZmluZSBGQl9WQkxBTktfSEFWRV9IQ09VTlQgMHgwNDAgIAorI2RlZmluZSBGQl9WQkxBTktfVlNZTkNJTkcgMHgwODAgIAorI2RlZmluZSBGQl9WQkxBTktfSEFWRV9WU1lOQyAweDEwMCAgCisKK3N0cnVjdCBmYl92YmxhbmsgeworIF9fdTMyIGZsYWdzOworIF9fdTMyIGNvdW50OworIF9fdTMyIHZjb3VudDsKKyBfX3UzMiBoY291bnQ7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFJPUF9DT1BZIDAKKyNkZWZpbmUgUk9QX1hPUiAxCisKK3N0cnVjdCBmYl9jb3B5YXJlYSB7CisgX191MzIgZHg7CisgX191MzIgZHk7CisgX191MzIgd2lkdGg7CisgX191MzIgaGVpZ2h0OworIF9fdTMyIHN4OworIF9fdTMyIHN5OworfTsKKworc3RydWN0IGZiX2ZpbGxyZWN0IHsKKyBfX3UzMiBkeDsKKyBfX3UzMiBkeTsKKyBfX3UzMiB3aWR0aDsKKyBfX3UzMiBoZWlnaHQ7CisgX191MzIgY29sb3I7CisgX191MzIgcm9wOworfTsKKworc3RydWN0IGZiX2ltYWdlIHsKKyBfX3UzMiBkeDsKKyBfX3UzMiBkeTsKKyBfX3UzMiB3aWR0aDsKKyBfX3UzMiBoZWlnaHQ7CisgX191MzIgZmdfY29sb3I7CisgX191MzIgYmdfY29sb3I7CisgX191OCBkZXB0aDsKKyBjb25zdCBjaGFyICpkYXRhOworIHN0cnVjdCBmYl9jbWFwIGNtYXA7Cit9OworCisjZGVmaW5lIEZCX0NVUl9TRVRJTUFHRSAweDAxCisjZGVmaW5lIEZCX0NVUl9TRVRQT1MgMHgwMgorI2RlZmluZSBGQl9DVVJfU0VUSE9UIDB4MDQKKyNkZWZpbmUgRkJfQ1VSX1NFVENNQVAgMHgwOAorI2RlZmluZSBGQl9DVVJfU0VUU0hBUEUgMHgxMAorI2RlZmluZSBGQl9DVVJfU0VUU0laRSAweDIwCisjZGVmaW5lIEZCX0NVUl9TRVRBTEwgMHhGRgorCitzdHJ1Y3QgZmJjdXJwb3MgeworIF9fdTE2IHgsIHk7Cit9OworCitzdHJ1Y3QgZmJfY3Vyc29yIHsKKyBfX3UxNiBzZXQ7CisgX191MTYgZW5hYmxlOworIF9fdTE2IHJvcDsKKyBjb25zdCBjaGFyICptYXNrOworIHN0cnVjdCBmYmN1cnBvcyBob3Q7Cisgc3RydWN0IGZiX2ltYWdlIGltYWdlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mY250bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyM2U4N2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmNudGwuaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9GQ05UTF9ICisjZGVmaW5lIF9MSU5VWF9GQ05UTF9ICisKKyNpbmNsdWRlIDxhc20vZmNudGwuaD4KKworI2RlZmluZSBGX1NFVExFQVNFIChGX0xJTlVYX1NQRUNJRklDX0JBU0UrMCkKKyNkZWZpbmUgRl9HRVRMRUFTRSAoRl9MSU5VWF9TUEVDSUZJQ19CQVNFKzEpCisKKyNkZWZpbmUgRl9OT1RJRlkgKEZfTElOVVhfU1BFQ0lGSUNfQkFTRSsyKQorCisjZGVmaW5lIEROX0FDQ0VTUyAweDAwMDAwMDAxICAKKyNkZWZpbmUgRE5fTU9ESUZZIDB4MDAwMDAwMDIgIAorI2RlZmluZSBETl9DUkVBVEUgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEROX0RFTEVURSAweDAwMDAwMDA4ICAKKyNkZWZpbmUgRE5fUkVOQU1FIDB4MDAwMDAwMTAgIAorI2RlZmluZSBETl9BVFRSSUIgMHgwMDAwMDAyMCAgCisjZGVmaW5lIEROX01VTFRJU0hPVCAweDgwMDAwMDAwICAKKworI2RlZmluZSBBVF9GRENXRCAtMTAwICAKKyNkZWZpbmUgQVRfU1lNTElOS19OT0ZPTExPVyAweDEwMCAgCisjZGVmaW5lIEFUX1JFTU9WRURJUiAweDIwMCAgCisjZGVmaW5lIEFUX1NZTUxJTktfRk9MTE9XIDB4NDAwICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzYmVkZDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmQuaApAQCAtMCwwICsxLDI1OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRkRfSAorI2RlZmluZSBfTElOVVhfRkRfSAorCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCitzdHJ1Y3QgZmxvcHB5X3N0cnVjdCB7CisgdW5zaWduZWQgaW50IHNpemUsCisgc2VjdCwKKyBoZWFkLAorIHRyYWNrLAorIHN0cmV0Y2g7CisjZGVmaW5lIEZEX1NUUkVUQ0ggMQorI2RlZmluZSBGRF9TV0FQU0lERVMgMgorI2RlZmluZSBGRF9aRVJPQkFTRUQgNAorCisgdW5zaWduZWQgY2hhciBnYXAsCisKKyByYXRlLAorI2RlZmluZSBGRF8yTSAweDQKKyNkZWZpbmUgRkRfU0laRUNPREVNQVNLIDB4MzgKKyNkZWZpbmUgRkRfU0laRUNPREUoZmxvcHB5KSAoKCgoKGZsb3BweSktPnJhdGUmRkRfU0laRUNPREVNQVNLKT4+IDMpKyAyKSAlOCkKKyNkZWZpbmUgRkRfU0VDVFNJWkUoZmxvcHB5KSAoIChmbG9wcHkpLT5yYXRlICYgRkRfMk0gPyAgIDUxMiA6IDEyOCA8PCBGRF9TSVpFQ09ERShmbG9wcHkpICkKKyNkZWZpbmUgRkRfUEVSUCAweDQwCisKKyBzcGVjMSwKKyBmbXRfZ2FwOworIGNvbnN0IGNoYXIgKiBuYW1lOworfTsKKworI2RlZmluZSBGRENMUlBSTSBfSU8oMiwgMHg0MSkKKworI2RlZmluZSBGRFNFVFBSTSBfSU9XKDIsIDB4NDIsIHN0cnVjdCBmbG9wcHlfc3RydWN0KSAKKyNkZWZpbmUgRkRTRVRNRURJQVBSTSBGRFNFVFBSTQorCisjZGVmaW5lIEZEREVGUFJNIF9JT1coMiwgMHg0Mywgc3RydWN0IGZsb3BweV9zdHJ1Y3QpIAorI2RlZmluZSBGREdFVFBSTSBfSU9SKDIsIDB4MDQsIHN0cnVjdCBmbG9wcHlfc3RydWN0KQorI2RlZmluZSBGRERFRk1FRElBUFJNIEZEREVGUFJNCisjZGVmaW5lIEZER0VUTUVESUFQUk0gRkRHRVRQUk0KKworI2RlZmluZSBGRE1TR09OIF9JTygyLDB4NDUpCisjZGVmaW5lIEZETVNHT0ZGIF9JTygyLDB4NDYpCisKKyNkZWZpbmUgRkRfRklMTF9CWVRFIDB4RjYgIAorCitzdHJ1Y3QgZm9ybWF0X2Rlc2NyIHsKKyB1bnNpZ25lZCBpbnQgZGV2aWNlLGhlYWQsdHJhY2s7Cit9OworCisjZGVmaW5lIEZERk1UQkVHIF9JTygyLDB4NDcpCisKKyNkZWZpbmUgRkRGTVRUUksgX0lPVygyLDB4NDgsIHN0cnVjdCBmb3JtYXRfZGVzY3IpCisKKyNkZWZpbmUgRkRGTVRFTkQgX0lPKDIsMHg0OSkKKworc3RydWN0IGZsb3BweV9tYXhfZXJyb3JzIHsKKyB1bnNpZ25lZCBpbnQKKyBhYm9ydCwKKyByZWFkX3RyYWNrLAorIHJlc2V0LAorIHJlY2FsLAorCisgcmVwb3J0aW5nOworCit9OworCisjZGVmaW5lIEZEU0VURU1TR1RSRVNIIF9JTygyLDB4NGEpCisKKyNkZWZpbmUgRkRGTFVTSCBfSU8oMiwweDRiKQorCisjZGVmaW5lIEZEU0VUTUFYRVJSUyBfSU9XKDIsIDB4NGMsIHN0cnVjdCBmbG9wcHlfbWF4X2Vycm9ycykKKyNkZWZpbmUgRkRHRVRNQVhFUlJTIF9JT1IoMiwgMHgwZSwgc3RydWN0IGZsb3BweV9tYXhfZXJyb3JzKQorCit0eXBlZGVmIGNoYXIgZmxvcHB5X2RyaXZlX25hbWVbMTZdOworI2RlZmluZSBGREdFVERSVlRZUCBfSU9SKDIsIDB4MGYsIGZsb3BweV9kcml2ZV9uYW1lKQorCitzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcyB7Cisgc2lnbmVkIGNoYXIgY21vczsKKworIHVuc2lnbmVkIGxvbmcgbWF4X2R0cjsKKyB1bnNpZ25lZCBsb25nIGhsdDsKKyB1bnNpZ25lZCBsb25nIGh1dDsKKyB1bnNpZ25lZCBsb25nIHNydDsKKworIHVuc2lnbmVkIGxvbmcgc3BpbnVwOworIHVuc2lnbmVkIGxvbmcgc3BpbmRvd247CisgdW5zaWduZWQgY2hhciBzcGluZG93bl9vZmZzZXQ7CisgdW5zaWduZWQgY2hhciBzZWxlY3RfZGVsYXk7CisgdW5zaWduZWQgY2hhciBycHM7CisgdW5zaWduZWQgY2hhciB0cmFja3M7CisgdW5zaWduZWQgbG9uZyB0aW1lb3V0OworCisgdW5zaWduZWQgY2hhciBpbnRlcmxlYXZlX3NlY3Q7CisKKyBzdHJ1Y3QgZmxvcHB5X21heF9lcnJvcnMgbWF4X2Vycm9yczsKKworIGNoYXIgZmxhZ3M7CisKKyNkZWZpbmUgRlREX01TRyAweDEwCisjZGVmaW5lIEZEX0JST0tFTl9EQ0wgMHgyMAorI2RlZmluZSBGRF9ERUJVRyAweDAyCisjZGVmaW5lIEZEX1NJTEVOVF9EQ0xfQ0xFQVIgMHg0CisjZGVmaW5lIEZEX0lOVkVSVEVEX0RDTCAweDgwICAKKworIGNoYXIgcmVhZF90cmFjazsKKworIHNob3J0IGF1dG9kZXRlY3RbOF07CisKKyBpbnQgY2hlY2tmcmVxOworIGludCBuYXRpdmVfZm9ybWF0OworfTsKKworZW51bSB7CisgRkRfTkVFRF9UV0FERExFX0JJVCwKKyBGRF9WRVJJRllfQklULAorIEZEX0RJU0tfTkVXQ0hBTkdFX0JJVCwKKyBGRF9VTlVTRURfQklULAorIEZEX0RJU0tfQ0hBTkdFRF9CSVQsCisgRkRfRElTS19XUklUQUJMRV9CSVQKK307CisKKyNkZWZpbmUgRkRTRVREUlZQUk0gX0lPVygyLCAweDkwLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKKyNkZWZpbmUgRkRHRVREUlZQUk0gX0lPUigyLCAweDExLCBzdHJ1Y3QgZmxvcHB5X2RyaXZlX3BhcmFtcykKKworc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyNkZWZpbmUgRkRfTkVFRF9UV0FERExFICgxIDw8IEZEX05FRURfVFdBRERMRV9CSVQpCisjZGVmaW5lIEZEX1ZFUklGWSAoMSA8PCBGRF9WRVJJRllfQklUKQorI2RlZmluZSBGRF9ESVNLX05FV0NIQU5HRSAoMSA8PCBGRF9ESVNLX05FV0NIQU5HRV9CSVQpCisjZGVmaW5lIEZEX0RJU0tfQ0hBTkdFRCAoMSA8PCBGRF9ESVNLX0NIQU5HRURfQklUKQorI2RlZmluZSBGRF9ESVNLX1dSSVRBQkxFICgxIDw8IEZEX0RJU0tfV1JJVEFCTEVfQklUKQorCisgdW5zaWduZWQgbG9uZyBzcGludXBfZGF0ZTsKKyB1bnNpZ25lZCBsb25nIHNlbGVjdF9kYXRlOworIHVuc2lnbmVkIGxvbmcgZmlyc3RfcmVhZF9kYXRlOworIHNob3J0IHByb2JlZF9mb3JtYXQ7Cisgc2hvcnQgdHJhY2s7Cisgc2hvcnQgbWF4YmxvY2s7Cisgc2hvcnQgbWF4dHJhY2s7CisgaW50IGdlbmVyYXRpb247CisKKyBpbnQga2VlcF9kYXRhOworCisgaW50IGZkX3JlZjsKKyBpbnQgZmRfZGV2aWNlOworIHVuc2lnbmVkIGxvbmcgbGFzdF9jaGVja2VkOworCisgY2hhciAqZG1hYnVmOworIGludCBidWZibG9ja3M7Cit9OworCisjZGVmaW5lIEZER0VURFJWU1RBVCBfSU9SKDIsIDB4MTIsIHN0cnVjdCBmbG9wcHlfZHJpdmVfc3RydWN0KQorI2RlZmluZSBGRFBPTExEUlZTVEFUIF9JT1IoMiwgMHgxMywgc3RydWN0IGZsb3BweV9kcml2ZV9zdHJ1Y3QpCisKK2VudW0gcmVzZXRfbW9kZSB7CisgRkRfUkVTRVRfSUZfTkVFREVELAorIEZEX1JFU0VUX0lGX1JBV0NNRCwKKyBGRF9SRVNFVF9BTFdBWVMKK307CisjZGVmaW5lIEZEUkVTRVQgX0lPKDIsIDB4NTQpCisKK3N0cnVjdCBmbG9wcHlfZmRjX3N0YXRlIHsKKyBpbnQgc3BlYzE7CisgaW50IHNwZWMyOworIGludCBkdHI7CisgdW5zaWduZWQgY2hhciB2ZXJzaW9uOworIHVuc2lnbmVkIGNoYXIgZG9yOworIHVuc2lnbmVkIGxvbmcgYWRkcmVzczsKKyB1bnNpZ25lZCBpbnQgcmF3Y21kOjI7CisgdW5zaWduZWQgaW50IHJlc2V0OjE7CisgdW5zaWduZWQgaW50IG5lZWRfY29uZmlndXJlOjE7CisgdW5zaWduZWQgaW50IHBlcnBfbW9kZToyOworIHVuc2lnbmVkIGludCBoYXNfZmlmbzoxOworIHVuc2lnbmVkIGludCBkcml2ZXJfdmVyc2lvbjsKKyNkZWZpbmUgRkRfRFJJVkVSX1ZFUlNJT04gMHgxMDAKKworIHVuc2lnbmVkIGNoYXIgdHJhY2tbNF07CisKK307CisKKyNkZWZpbmUgRkRHRVRGRENTVEFUIF9JT1IoMiwgMHgxNSwgc3RydWN0IGZsb3BweV9mZGNfc3RhdGUpCisKK3N0cnVjdCBmbG9wcHlfd3JpdGVfZXJyb3JzIHsKKworIHVuc2lnbmVkIGludCB3cml0ZV9lcnJvcnM7CisKKyB1bnNpZ25lZCBsb25nIGZpcnN0X2Vycm9yX3NlY3RvcjsKKyBpbnQgZmlyc3RfZXJyb3JfZ2VuZXJhdGlvbjsKKyB1bnNpZ25lZCBsb25nIGxhc3RfZXJyb3Jfc2VjdG9yOworIGludCBsYXN0X2Vycm9yX2dlbmVyYXRpb247CisKKyB1bnNpZ25lZCBpbnQgYmFkbmVzczsKK307CisKKyNkZWZpbmUgRkRXRVJST1JDTFIgX0lPKDIsIDB4NTYpCisKKyNkZWZpbmUgRkRXRVJST1JHRVQgX0lPUigyLCAweDE3LCBzdHJ1Y3QgZmxvcHB5X3dyaXRlX2Vycm9ycykKKworI2RlZmluZSBGREhBVkVCQVRDSEVEUkFXQ01ECisKK3N0cnVjdCBmbG9wcHlfcmF3X2NtZCB7CisgdW5zaWduZWQgaW50IGZsYWdzOworI2RlZmluZSBGRF9SQVdfUkVBRCAxCisjZGVmaW5lIEZEX1JBV19XUklURSAyCisjZGVmaW5lIEZEX1JBV19OT19NT1RPUiA0CisjZGVmaW5lIEZEX1JBV19ESVNLX0NIQU5HRSA0ICAKKyNkZWZpbmUgRkRfUkFXX0lOVFIgOCAgCisjZGVmaW5lIEZEX1JBV19TUElOIDB4MTAgIAorI2RlZmluZSBGRF9SQVdfTk9fTU9UT1JfQUZURVIgMHgyMCAgCisjZGVmaW5lIEZEX1JBV19ORUVEX0RJU0sgMHg0MCAgCisjZGVmaW5lIEZEX1JBV19ORUVEX1NFRUsgMHg4MCAgCisKKyNkZWZpbmUgRkRfUkFXX01PUkUgMHgxMDAgIAorI2RlZmluZSBGRF9SQVdfU1RPUF9JRl9GQUlMVVJFIDB4MjAwICAKKyNkZWZpbmUgRkRfUkFXX1NUT1BfSUZfU1VDQ0VTUyAweDQwMCAgCisjZGVmaW5lIEZEX1JBV19TT0ZURkFJTFVSRSAweDgwMCAgCisKKyNkZWZpbmUgRkRfUkFXX0ZBSUxVUkUgMHgxMDAwMCAgCisjZGVmaW5lIEZEX1JBV19IQVJERkFJTFVSRSAweDIwMDAwICAKKworIHZvaWQgX191c2VyICpkYXRhOworIGNoYXIgKmtlcm5lbF9kYXRhOworIHN0cnVjdCBmbG9wcHlfcmF3X2NtZCAqbmV4dDsKKyBsb25nIGxlbmd0aDsKKyBsb25nIHBoeXNfbGVuZ3RoOworIGludCBidWZmZXJfbGVuZ3RoOworCisgdW5zaWduZWQgY2hhciByYXRlOworIHVuc2lnbmVkIGNoYXIgY21kX2NvdW50OworIHVuc2lnbmVkIGNoYXIgY21kWzE2XTsKKyB1bnNpZ25lZCBjaGFyIHJlcGx5X2NvdW50OworIHVuc2lnbmVkIGNoYXIgcmVwbHlbMTZdOworIGludCB0cmFjazsKKyBpbnQgcmVzdWx0Y29kZTsKKworIGludCByZXNlcnZlZDE7CisgaW50IHJlc2VydmVkMjsKK307CisKKyNkZWZpbmUgRkRSQVdDTUQgX0lPKDIsIDB4NTgpCisKKyNkZWZpbmUgRkRUV0FERExFIF9JTygyLCAweDU5KQorCisjZGVmaW5lIEZERUpFQ1QgX0lPKDIsIDB4NWEpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ZpbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODdlNTcwYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWxlLmgKQEAgLTAsMCArMSw2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0ZJTEVfSAorI2RlZmluZSBfX0xJTlVYX0ZJTEVfSAorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3JjdXBkYXRlLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBOUl9PUEVOX0RFRkFVTFQgQklUU19QRVJfTE9ORworCitzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0IHsKKyB1bnNpZ25lZCBsb25nIGZkc19iaXRzWzFdOworfTsKKworI2RlZmluZSBFTUJFRERFRF9GRF9TRVRfU0laRSAoQklUU19QRVJfQllURSAqIHNpemVvZihzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0KSkKKworc3RydWN0IGZkdGFibGUgeworIHVuc2lnbmVkIGludCBtYXhfZmRzOworIGludCBtYXhfZmRzZXQ7Cisgc3RydWN0IGZpbGUgKiogZmQ7CisgZmRfc2V0ICpjbG9zZV9vbl9leGVjOworIGZkX3NldCAqb3Blbl9mZHM7Cisgc3RydWN0IHJjdV9oZWFkIHJjdTsKKyBzdHJ1Y3QgZmlsZXNfc3RydWN0ICpmcmVlX2ZpbGVzOworIHN0cnVjdCBmZHRhYmxlICpuZXh0OworfTsKKworc3RydWN0IGZpbGVzX3N0cnVjdCB7CisKKyBhdG9taWNfdCBjb3VudDsKKyBzdHJ1Y3QgZmR0YWJsZSAqZmR0OworIHN0cnVjdCBmZHRhYmxlIGZkdGFiOworCisgc3BpbmxvY2tfdCBmaWxlX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKyBpbnQgbmV4dF9mZDsKKyBzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0IGNsb3NlX29uX2V4ZWNfaW5pdDsKKyBzdHJ1Y3QgZW1iZWRkZWRfZmRfc2V0IG9wZW5fZmRzX2luaXQ7Cisgc3RydWN0IGZpbGUgKiBmZF9hcnJheVtOUl9PUEVOX0RFRkFVTFRdOworfTsKKworI2RlZmluZSBmaWxlc19mZHRhYmxlKGZpbGVzKSAocmN1X2RlcmVmZXJlbmNlKChmaWxlcyktPmZkdCkpCisKK3N0cnVjdCBrbWVtX2NhY2hlOworCisjZGVmaW5lIGZjaGVjayhmZCkgZmNoZWNrX2ZpbGVzKGN1cnJlbnQtPmZpbGVzLCBmZCkKKworc3RydWN0IHRhc2tfc3RydWN0OworCitzdHJ1Y3QgZmlsZXNfc3RydWN0ICpnZXRfZmlsZXNfc3RydWN0KHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsdGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTg1OGEwZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9maWx0ZXIuaApAQCAtMCwwICsxLDEwNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0ZJTFRFUl9IX18KKyNkZWZpbmUgX19MSU5VWF9GSUxURVJfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgQlBGX01BSk9SX1ZFUlNJT04gMQorI2RlZmluZSBCUEZfTUlOT1JfVkVSU0lPTiAxCisKK3N0cnVjdCBzb2NrX2ZpbHRlcgoreworIF9fdTE2IGNvZGU7CisgX191OCBqdDsKKyBfX3U4IGpmOworIF9fdTMyIGs7Cit9OworCitzdHJ1Y3Qgc29ja19mcHJvZworeworIHVuc2lnbmVkIHNob3J0IGxlbjsKKyBzdHJ1Y3Qgc29ja19maWx0ZXIgX191c2VyICpmaWx0ZXI7Cit9OworCisjZGVmaW5lIEJQRl9DTEFTUyhjb2RlKSAoKGNvZGUpICYgMHgwNykKKyNkZWZpbmUgQlBGX0xEIDB4MDAKKyNkZWZpbmUgQlBGX0xEWCAweDAxCisjZGVmaW5lIEJQRl9TVCAweDAyCisjZGVmaW5lIEJQRl9TVFggMHgwMworI2RlZmluZSBCUEZfQUxVIDB4MDQKKyNkZWZpbmUgQlBGX0pNUCAweDA1CisjZGVmaW5lIEJQRl9SRVQgMHgwNgorI2RlZmluZSBCUEZfTUlTQyAweDA3CisKKyNkZWZpbmUgQlBGX1NJWkUoY29kZSkgKChjb2RlKSAmIDB4MTgpCisjZGVmaW5lIEJQRl9XIDB4MDAKKyNkZWZpbmUgQlBGX0ggMHgwOAorI2RlZmluZSBCUEZfQiAweDEwCisjZGVmaW5lIEJQRl9NT0RFKGNvZGUpICgoY29kZSkgJiAweGUwKQorI2RlZmluZSBCUEZfSU1NIDB4MDAKKyNkZWZpbmUgQlBGX0FCUyAweDIwCisjZGVmaW5lIEJQRl9JTkQgMHg0MAorI2RlZmluZSBCUEZfTUVNIDB4NjAKKyNkZWZpbmUgQlBGX0xFTiAweDgwCisjZGVmaW5lIEJQRl9NU0ggMHhhMAorCisjZGVmaW5lIEJQRl9PUChjb2RlKSAoKGNvZGUpICYgMHhmMCkKKyNkZWZpbmUgQlBGX0FERCAweDAwCisjZGVmaW5lIEJQRl9TVUIgMHgxMAorI2RlZmluZSBCUEZfTVVMIDB4MjAKKyNkZWZpbmUgQlBGX0RJViAweDMwCisjZGVmaW5lIEJQRl9PUiAweDQwCisjZGVmaW5lIEJQRl9BTkQgMHg1MAorI2RlZmluZSBCUEZfTFNIIDB4NjAKKyNkZWZpbmUgQlBGX1JTSCAweDcwCisjZGVmaW5lIEJQRl9ORUcgMHg4MAorI2RlZmluZSBCUEZfSkEgMHgwMAorI2RlZmluZSBCUEZfSkVRIDB4MTAKKyNkZWZpbmUgQlBGX0pHVCAweDIwCisjZGVmaW5lIEJQRl9KR0UgMHgzMAorI2RlZmluZSBCUEZfSlNFVCAweDQwCisjZGVmaW5lIEJQRl9TUkMoY29kZSkgKChjb2RlKSAmIDB4MDgpCisjZGVmaW5lIEJQRl9LIDB4MDAKKyNkZWZpbmUgQlBGX1ggMHgwOAorCisjZGVmaW5lIEJQRl9SVkFMKGNvZGUpICgoY29kZSkgJiAweDE4KQorI2RlZmluZSBCUEZfQSAweDEwCisKKyNkZWZpbmUgQlBGX01JU0NPUChjb2RlKSAoKGNvZGUpICYgMHhmOCkKKyNkZWZpbmUgQlBGX1RBWCAweDAwCisjZGVmaW5lIEJQRl9UWEEgMHg4MAorCisjaWZuZGVmIEJQRl9NQVhJTlNOUworI2RlZmluZSBCUEZfTUFYSU5TTlMgNDA5NgorI2VuZGlmCisKKyNpZm5kZWYgQlBGX1NUTVQKKyNkZWZpbmUgQlBGX1NUTVQoY29kZSwgaykgeyAodW5zaWduZWQgc2hvcnQpKGNvZGUpLCAwLCAwLCBrIH0KKyNlbmRpZgorI2lmbmRlZiBCUEZfSlVNUAorI2RlZmluZSBCUEZfSlVNUChjb2RlLCBrLCBqdCwgamYpIHsgKHVuc2lnbmVkIHNob3J0KShjb2RlKSwganQsIGpmLCBrIH0KKyNlbmRpZgorCisjZGVmaW5lIEJQRl9NRU1XT1JEUyAxNgorCisjZGVmaW5lIFNLRl9BRF9PRkYgKC0weDEwMDApCisjZGVmaW5lIFNLRl9BRF9QUk9UT0NPTCAwCisjZGVmaW5lIFNLRl9BRF9QS1RUWVBFIDQKKyNkZWZpbmUgU0tGX0FEX0lGSU5ERVggOAorI2RlZmluZSBTS0ZfQURfTUFYIDEyCisjZGVmaW5lIFNLRl9ORVRfT0ZGICgtMHgxMDAwMDApCisjZGVmaW5lIFNLRl9MTF9PRkYgKC0weDIwMDAwMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkMzc1YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnMuaApAQCAtMCwwICsxLDE2MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfRlNfSAorI2RlZmluZSBfTElOVVhfRlNfSAorCisjaW5jbHVkZSA8bGludXgvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworI3VuZGVmIE5SX09QRU4KKyNkZWZpbmUgTlJfT1BFTiAoMTAyNCoxMDI0KSAgCisjZGVmaW5lIElOUl9PUEVOIDEwMjQgIAorCisjZGVmaW5lIEJMT0NLX1NJWkVfQklUUyAxMAorI2RlZmluZSBCTE9DS19TSVpFICgxPDxCTE9DS19TSVpFX0JJVFMpCisKKyNkZWZpbmUgU0VFS19TRVQgMCAgCisjZGVmaW5lIFNFRUtfQ1VSIDEgIAorI2RlZmluZSBTRUVLX0VORCAyICAKKworc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IHsKKyBpbnQgbnJfZmlsZXM7CisgaW50IG5yX2ZyZWVfZmlsZXM7CisgaW50IG1heF9maWxlczsKK307CisKK3N0cnVjdCBpbm9kZXNfc3RhdF90IHsKKyBpbnQgbnJfaW5vZGVzOworIGludCBucl91bnVzZWQ7CisgaW50IGR1bW15WzVdOworfTsKKworI2RlZmluZSBOUl9GSUxFIDgxOTIgIAorCisjZGVmaW5lIE1BWV9FWEVDIDEKKyNkZWZpbmUgTUFZX1dSSVRFIDIKKyNkZWZpbmUgTUFZX1JFQUQgNAorI2RlZmluZSBNQVlfQVBQRU5EIDgKKworI2RlZmluZSBGTU9ERV9SRUFEIDEKKyNkZWZpbmUgRk1PREVfV1JJVEUgMgorCisjZGVmaW5lIEZNT0RFX0xTRUVLIDQKKyNkZWZpbmUgRk1PREVfUFJFQUQgOAorI2RlZmluZSBGTU9ERV9QV1JJVEUgRk1PREVfUFJFQUQgIAorCisjZGVmaW5lIEZNT0RFX0VYRUMgMTYKKworI2RlZmluZSBSV19NQVNLIDEKKyNkZWZpbmUgUldBX01BU0sgMgorI2RlZmluZSBSRUFEIDAKKyNkZWZpbmUgV1JJVEUgMQorI2RlZmluZSBSRUFEQSAyICAKKyNkZWZpbmUgU1dSSVRFIDMgIAorI2RlZmluZSBTUEVDSUFMIDQgIAorI2RlZmluZSBSRUFEX1NZTkMgKFJFQUQgfCAoMSA8PCBCSU9fUldfU1lOQykpCisjZGVmaW5lIFdSSVRFX1NZTkMgKFdSSVRFIHwgKDEgPDwgQklPX1JXX1NZTkMpKQorI2RlZmluZSBXUklURV9CQVJSSUVSICgoMSA8PCBCSU9fUlcpIHwgKDEgPDwgQklPX1JXX0JBUlJJRVIpKQorCisjZGVmaW5lIFNFTF9JTiAxCisjZGVmaW5lIFNFTF9PVVQgMgorI2RlZmluZSBTRUxfRVggNAorCisjZGVmaW5lIEZTX1JFUVVJUkVTX0RFViAxIAorI2RlZmluZSBGU19CSU5BUllfTU9VTlREQVRBIDIKKyNkZWZpbmUgRlNfUkVWQUxfRE9UIDE2Mzg0ICAKKyNkZWZpbmUgRlNfT0REX1JFTkFNRSAzMjc2OCAgCisKKyNkZWZpbmUgTVNfUkRPTkxZIDEgIAorI2RlZmluZSBNU19OT1NVSUQgMiAgCisjZGVmaW5lIE1TX05PREVWIDQgIAorI2RlZmluZSBNU19OT0VYRUMgOCAgCisjZGVmaW5lIE1TX1NZTkNIUk9OT1VTIDE2ICAKKyNkZWZpbmUgTVNfUkVNT1VOVCAzMiAgCisjZGVmaW5lIE1TX01BTkRMT0NLIDY0ICAKKyNkZWZpbmUgTVNfRElSU1lOQyAxMjggIAorI2RlZmluZSBNU19OT0FUSU1FIDEwMjQgIAorI2RlZmluZSBNU19OT0RJUkFUSU1FIDIwNDggIAorI2RlZmluZSBNU19CSU5EIDQwOTYKKyNkZWZpbmUgTVNfTU9WRSA4MTkyCisjZGVmaW5lIE1TX1JFQyAxNjM4NAorI2RlZmluZSBNU19WRVJCT1NFIDMyNzY4ICAKKyNkZWZpbmUgTVNfU0lMRU5UIDMyNzY4CisjZGVmaW5lIE1TX1BPU0lYQUNMICgxPDwxNikgIAorI2RlZmluZSBNU19VTkJJTkRBQkxFICgxPDwxNykgIAorI2RlZmluZSBNU19QUklWQVRFICgxPDwxOCkgIAorI2RlZmluZSBNU19TTEFWRSAoMTw8MTkpICAKKyNkZWZpbmUgTVNfU0hBUkVEICgxPDwyMCkgIAorI2RlZmluZSBNU19BQ1RJVkUgKDE8PDMwKQorI2RlZmluZSBNU19OT1VTRVIgKDE8PDMxKQorCisjZGVmaW5lIE1TX1JNVF9NQVNLIChNU19SRE9OTFl8TVNfU1lOQ0hST05PVVN8TVNfTUFORExPQ0spCisKKyNkZWZpbmUgTVNfTUdDX1ZBTCAweEMwRUQwMDAwCisjZGVmaW5lIE1TX01HQ19NU0sgMHhmZmZmMDAwMAorCisjZGVmaW5lIFNfU1lOQyAxICAKKyNkZWZpbmUgU19OT0FUSU1FIDIgIAorI2RlZmluZSBTX0FQUEVORCA0ICAKKyNkZWZpbmUgU19JTU1VVEFCTEUgOCAgCisjZGVmaW5lIFNfREVBRCAxNiAgCisjZGVmaW5lIFNfTk9RVU9UQSAzMiAgCisjZGVmaW5lIFNfRElSU1lOQyA2NCAgCisjZGVmaW5lIFNfTk9DTVRJTUUgMTI4ICAKKyNkZWZpbmUgU19TV0FQRklMRSAyNTYgIAorI2RlZmluZSBTX1BSSVZBVEUgNTEyICAKKworI2RlZmluZSBfX0lTX0ZMRyhpbm9kZSxmbGcpICgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKGZsZykpCisKKyNkZWZpbmUgSVNfUkRPTkxZKGlub2RlKSAoKGlub2RlKS0+aV9zYi0+c19mbGFncyAmIE1TX1JET05MWSkKKyNkZWZpbmUgSVNfU1lOQyhpbm9kZSkgKF9fSVNfRkxHKGlub2RlLCBNU19TWU5DSFJPTk9VUykgfHwgICAoKGlub2RlKS0+aV9mbGFncyAmIFNfU1lOQykpCisjZGVmaW5lIElTX0RJUlNZTkMoaW5vZGUpIChfX0lTX0ZMRyhpbm9kZSwgTVNfU1lOQ0hST05PVVN8TVNfRElSU1lOQykgfHwgICAoKGlub2RlKS0+aV9mbGFncyAmIChTX1NZTkN8U19ESVJTWU5DKSkpCisjZGVmaW5lIElTX01BTkRMT0NLKGlub2RlKSBfX0lTX0ZMRyhpbm9kZSwgTVNfTUFORExPQ0spCisKKyNkZWZpbmUgSVNfTk9RVU9UQShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PUVVPVEEpCisjZGVmaW5lIElTX0FQUEVORChpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX0FQUEVORCkKKyNkZWZpbmUgSVNfSU1NVVRBQkxFKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfSU1NVVRBQkxFKQorI2RlZmluZSBJU19QT1NJWEFDTChpbm9kZSkgX19JU19GTEcoaW5vZGUsIE1TX1BPU0lYQUNMKQorCisjZGVmaW5lIElTX0RFQURESVIoaW5vZGUpICgoaW5vZGUpLT5pX2ZsYWdzICYgU19ERUFEKQorI2RlZmluZSBJU19OT0NNVElNRShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX05PQ01USU1FKQorI2RlZmluZSBJU19TV0FQRklMRShpbm9kZSkgKChpbm9kZSktPmlfZmxhZ3MgJiBTX1NXQVBGSUxFKQorI2RlZmluZSBJU19QUklWQVRFKGlub2RlKSAoKGlub2RlKS0+aV9mbGFncyAmIFNfUFJJVkFURSkKKworI2RlZmluZSBCTEtST1NFVCBfSU8oMHgxMiw5MykgIAorI2RlZmluZSBCTEtST0dFVCBfSU8oMHgxMiw5NCkgIAorI2RlZmluZSBCTEtSUlBBUlQgX0lPKDB4MTIsOTUpICAKKyNkZWZpbmUgQkxLR0VUU0laRSBfSU8oMHgxMiw5NikgIAorI2RlZmluZSBCTEtGTFNCVUYgX0lPKDB4MTIsOTcpICAKKyNkZWZpbmUgQkxLUkFTRVQgX0lPKDB4MTIsOTgpICAKKyNkZWZpbmUgQkxLUkFHRVQgX0lPKDB4MTIsOTkpICAKKyNkZWZpbmUgQkxLRlJBU0VUIF9JTygweDEyLDEwMCkgCisjZGVmaW5lIEJMS0ZSQUdFVCBfSU8oMHgxMiwxMDEpIAorI2RlZmluZSBCTEtTRUNUU0VUIF9JTygweDEyLDEwMikgCisjZGVmaW5lIEJMS1NFQ1RHRVQgX0lPKDB4MTIsMTAzKSAKKyNkZWZpbmUgQkxLU1NaR0VUIF9JTygweDEyLDEwNCkgCisKKyNkZWZpbmUgQkxLQlNaR0VUIF9JT1IoMHgxMiwxMTIsc2l6ZV90KQorI2RlZmluZSBCTEtCU1pTRVQgX0lPVygweDEyLDExMyxzaXplX3QpCisjZGVmaW5lIEJMS0dFVFNJWkU2NCBfSU9SKDB4MTIsMTE0LHNpemVfdCkgIAorI2RlZmluZSBCTEtUUkFDRVNFVFVQIF9JT1dSKDB4MTIsMTE1LHN0cnVjdCBibGtfdXNlcl90cmFjZV9zZXR1cCkKKyNkZWZpbmUgQkxLVFJBQ0VTVEFSVCBfSU8oMHgxMiwxMTYpCisjZGVmaW5lIEJMS1RSQUNFU1RPUCBfSU8oMHgxMiwxMTcpCisjZGVmaW5lIEJMS1RSQUNFVEVBUkRPV04gX0lPKDB4MTIsMTE4KQorCisjZGVmaW5lIEJNQVBfSU9DVEwgMSAgCisjZGVmaW5lIEZJQk1BUCBfSU8oMHgwMCwxKSAgCisjZGVmaW5lIEZJR0VUQlNaIF9JTygweDAwLDIpICAKKworI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9CRUZPUkUgMQorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV1JJVEUgMgorI2RlZmluZSBTWU5DX0ZJTEVfUkFOR0VfV0FJVF9BRlRFUiA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnRhcGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYjE1MjdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2Z0YXBlLmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfRlRBUEVfSAorI2RlZmluZSBfRlRBUEVfSAorCisjZGVmaW5lIEZUQVBFX1ZFUlNJT04gImZ0YXBlIHYzLjA0ZCAyNS8xMS85NyIKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbXRpby5oPgorCisjZGVmaW5lIEZUX1NFQ1RPUih4KSAoeCsxKSAgCisjZGVmaW5lIEZUX1NFQ1RPUl9TSVpFIDEwMjQKKyNkZWZpbmUgRlRfU0VDVE9SU19QRVJfU0VHTUVOVCAzMgorI2RlZmluZSBGVF9FQ0NfU0VDVE9SUyAzCisjZGVmaW5lIEZUX1NFR01FTlRfU0laRSAoKEZUX1NFQ1RPUlNfUEVSX1NFR01FTlQgLSBGVF9FQ0NfU0VDVE9SUykgKiBGVF9TRUNUT1JfU0laRSkKKyNkZWZpbmUgRlRfQlVGRl9TSVpFIChGVF9TRUNUT1JTX1BFUl9TRUdNRU5UICogRlRfU0VDVE9SX1NJWkUpCisKKyNkZWZpbmUgRlRBUEVfU0VMX0EgMAorI2RlZmluZSBGVEFQRV9TRUxfQiAxCisjZGVmaW5lIEZUQVBFX1NFTF9DIDIKKyNkZWZpbmUgRlRBUEVfU0VMX0QgMworI2RlZmluZSBGVEFQRV9TRUxfTUFTSyAzCisjZGVmaW5lIEZUQVBFX1NFTCh1bml0KSAoKHVuaXQpICYgRlRBUEVfU0VMX01BU0spCisjZGVmaW5lIEZUQVBFX05PX1JFV0lORCA0ICAKKwordHlwZWRlZiB1bmlvbiB7Cisgc3RydWN0IHsKKyBfX3U4IGVycm9yOworIF9fdTggY29tbWFuZDsKKyB9IGVycm9yOworIGxvbmcgc3BhY2U7Cit9IGZ0X2RyaXZlX2Vycm9yOwordHlwZWRlZiB1bmlvbiB7Cisgc3RydWN0IHsKKyBfX3U4IGRyaXZlX3N0YXR1czsKKyBfX3U4IGRyaXZlX2NvbmZpZzsKKyBfX3U4IHRhcGVfc3RhdHVzOworIH0gc3RhdHVzOworIGxvbmcgc3BhY2U7Cit9IGZ0X2RyaXZlX3N0YXR1czsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnV0ZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9mdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwZjllNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZnV0ZXguaApAQCAtMCwwICsxLDYxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9GVVRFWF9ICisjZGVmaW5lIF9MSU5VWF9GVVRFWF9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorCisjZGVmaW5lIEZVVEVYX1dBSVQgMAorI2RlZmluZSBGVVRFWF9XQUtFIDEKKyNkZWZpbmUgRlVURVhfRkQgMgorI2RlZmluZSBGVVRFWF9SRVFVRVVFIDMKKyNkZWZpbmUgRlVURVhfQ01QX1JFUVVFVUUgNAorI2RlZmluZSBGVVRFWF9XQUtFX09QIDUKKyNkZWZpbmUgRlVURVhfTE9DS19QSSA2CisjZGVmaW5lIEZVVEVYX1VOTE9DS19QSSA3CisjZGVmaW5lIEZVVEVYX1RSWUxPQ0tfUEkgOAorCitzdHJ1Y3Qgcm9idXN0X2xpc3QgeworIHN0cnVjdCByb2J1c3RfbGlzdCBfX3VzZXIgKm5leHQ7Cit9OworCitzdHJ1Y3Qgcm9idXN0X2xpc3RfaGVhZCB7CisKKyBzdHJ1Y3Qgcm9idXN0X2xpc3QgbGlzdDsKKworIGxvbmcgZnV0ZXhfb2Zmc2V0OworCisgc3RydWN0IHJvYnVzdF9saXN0IF9fdXNlciAqbGlzdF9vcF9wZW5kaW5nOworfTsKKworI2RlZmluZSBGVVRFWF9XQUlURVJTIDB4ODAwMDAwMDAKKworI2RlZmluZSBGVVRFWF9PV05FUl9ESUVEIDB4NDAwMDAwMDAKKworI2RlZmluZSBGVVRFWF9USURfTUFTSyAweDNmZmZmZmZmCisKKyNkZWZpbmUgUk9CVVNUX0xJU1RfTElNSVQgMjA0OAorCisjZGVmaW5lIEZVVEVYX09QX1NFVCAwICAKKyNkZWZpbmUgRlVURVhfT1BfQUREIDEgIAorI2RlZmluZSBGVVRFWF9PUF9PUiAyICAKKyNkZWZpbmUgRlVURVhfT1BfQU5ETiAzICAKKyNkZWZpbmUgRlVURVhfT1BfWE9SIDQgIAorI2RlZmluZSBGVVRFWF9PUF9PUEFSR19TSElGVCA4ICAKKyNkZWZpbmUgRlVURVhfT1BfQ01QX0VRIDAgIAorI2RlZmluZSBGVVRFWF9PUF9DTVBfTkUgMSAgCisjZGVmaW5lIEZVVEVYX09QX0NNUF9MVCAyICAKKyNkZWZpbmUgRlVURVhfT1BfQ01QX0xFIDMgIAorI2RlZmluZSBGVVRFWF9PUF9DTVBfR1QgNCAgCisjZGVmaW5lIEZVVEVYX09QX0NNUF9HRSA1ICAKKyNkZWZpbmUgRlVURVhfT1Aob3AsIG9wYXJnLCBjbXAsIGNtcGFyZykgICAoKChvcCAmIDB4ZikgPDwgMjgpIHwgKChjbXAgJiAweGYpIDw8IDI0KSAgIHwgKChvcGFyZyAmIDB4ZmZmKSA8PCAxMikgfCAoY21wYXJnICYgMHhmZmYpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2VuaGQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9nZW5oZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmEzYTM5MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2VuaGQuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9HRU5IRF9ICisjZGVmaW5lIF9MSU5VWF9HRU5IRF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIHsKKworIERPU19FWFRFTkRFRF9QQVJUSVRJT04gPSA1LAorIExJTlVYX0VYVEVOREVEX1BBUlRJVElPTiA9IDB4ODUsCisgV0lOOThfRVhURU5ERURfUEFSVElUSU9OID0gMHgwZiwKKworIExJTlVYX1NXQVBfUEFSVElUSU9OID0gMHg4MiwKKyBMSU5VWF9SQUlEX1BBUlRJVElPTiA9IDB4ZmQsCisKKyBTT0xBUklTX1g4Nl9QQVJUSVRJT04gPSBMSU5VWF9TV0FQX1BBUlRJVElPTiwKKyBORVdfU09MQVJJU19YODZfUEFSVElUSU9OID0gMHhiZiwKKworIERNNl9BVVgxUEFSVElUSU9OID0gMHg1MSwKKyBETTZfQVVYM1BBUlRJVElPTiA9IDB4NTMsCisgRE02X1BBUlRJVElPTiA9IDB4NTQsCisgRVpEX1BBUlRJVElPTiA9IDB4NTUsCisKKyBGUkVFQlNEX1BBUlRJVElPTiA9IDB4YTUsCisgT1BFTkJTRF9QQVJUSVRJT04gPSAweGE2LAorIE5FVEJTRF9QQVJUSVRJT04gPSAweGE5LAorIEJTRElfUEFSVElUSU9OID0gMHhiNywKKyBNSU5JWF9QQVJUSVRJT04gPSAweDgxLAorIFVOSVhXQVJFX1BBUlRJVElPTiA9IDB4NjMsCit9OworCitzdHJ1Y3QgcGFydGl0aW9uIHsKKyB1bnNpZ25lZCBjaGFyIGJvb3RfaW5kOworIHVuc2lnbmVkIGNoYXIgaGVhZDsKKyB1bnNpZ25lZCBjaGFyIHNlY3RvcjsKKyB1bnNpZ25lZCBjaGFyIGN5bDsKKyB1bnNpZ25lZCBjaGFyIHN5c19pbmQ7CisgdW5zaWduZWQgY2hhciBlbmRfaGVhZDsKKyB1bnNpZ25lZCBjaGFyIGVuZF9zZWN0b3I7CisgdW5zaWduZWQgY2hhciBlbmRfY3lsOworIHVuc2lnbmVkIGludCBzdGFydF9zZWN0OworIHVuc2lnbmVkIGludCBucl9zZWN0czsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dmcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2dmcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBhNTlmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvZ2ZwLmgKQEAgLTAsMCArMSw3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0dGUF9ICisjZGVmaW5lIF9fTElOVVhfR0ZQX0gKKworI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworc3RydWN0IHZtX2FyZWFfc3RydWN0OworCisjZGVmaW5lIF9fR0ZQX0RNQSAoKF9fZm9yY2UgZ2ZwX3QpMHgwMXUpCisjZGVmaW5lIF9fR0ZQX0hJR0hNRU0gKChfX2ZvcmNlIGdmcF90KTB4MDJ1KQorI2lmIEJJVFNfUEVSX0xPTkcgPCA2NAorI2RlZmluZSBfX0dGUF9ETUEzMiAoKF9fZm9yY2UgZ2ZwX3QpMHgwMCkgIAorI2Vsc2UKKyNkZWZpbmUgX19HRlBfRE1BMzIgKChfX2ZvcmNlIGdmcF90KTB4MDQpICAKKyNlbmRpZgorCisjZGVmaW5lIF9fR0ZQX1dBSVQgKChfX2ZvcmNlIGdmcF90KTB4MTB1KSAgCisjZGVmaW5lIF9fR0ZQX0hJR0ggKChfX2ZvcmNlIGdmcF90KTB4MjB1KSAgCisjZGVmaW5lIF9fR0ZQX0lPICgoX19mb3JjZSBnZnBfdCkweDQwdSkgIAorI2RlZmluZSBfX0dGUF9GUyAoKF9fZm9yY2UgZ2ZwX3QpMHg4MHUpICAKKyNkZWZpbmUgX19HRlBfQ09MRCAoKF9fZm9yY2UgZ2ZwX3QpMHgxMDB1KSAgCisjZGVmaW5lIF9fR0ZQX05PV0FSTiAoKF9fZm9yY2UgZ2ZwX3QpMHgyMDB1KSAgCisjZGVmaW5lIF9fR0ZQX1JFUEVBVCAoKF9fZm9yY2UgZ2ZwX3QpMHg0MDB1KSAgCisjZGVmaW5lIF9fR0ZQX05PRkFJTCAoKF9fZm9yY2UgZ2ZwX3QpMHg4MDB1KSAgCisjZGVmaW5lIF9fR0ZQX05PUkVUUlkgKChfX2ZvcmNlIGdmcF90KTB4MTAwMHUpIAorI2RlZmluZSBfX0dGUF9OT19HUk9XICgoX19mb3JjZSBnZnBfdCkweDIwMDB1KSAKKyNkZWZpbmUgX19HRlBfQ09NUCAoKF9fZm9yY2UgZ2ZwX3QpMHg0MDAwdSkgCisjZGVmaW5lIF9fR0ZQX1pFUk8gKChfX2ZvcmNlIGdmcF90KTB4ODAwMHUpIAorI2RlZmluZSBfX0dGUF9OT01FTUFMTE9DICgoX19mb3JjZSBnZnBfdCkweDEwMDAwdSkgIAorI2RlZmluZSBfX0dGUF9IQVJEV0FMTCAoKF9fZm9yY2UgZ2ZwX3QpMHgyMDAwMHUpICAKKworI2RlZmluZSBfX0dGUF9CSVRTX1NISUZUIDIwICAKKyNkZWZpbmUgX19HRlBfQklUU19NQVNLICgoX19mb3JjZSBnZnBfdCkoKDEgPDwgX19HRlBfQklUU19TSElGVCkgLSAxKSkKKworI2RlZmluZSBHRlBfTEVWRUxfTUFTSyAoX19HRlBfV0FJVHxfX0dGUF9ISUdIfF9fR0ZQX0lPfF9fR0ZQX0ZTfCAgIF9fR0ZQX0NPTER8X19HRlBfTk9XQVJOfF9fR0ZQX1JFUEVBVHwgICBfX0dGUF9OT0ZBSUx8X19HRlBfTk9SRVRSWXxfX0dGUF9OT19HUk9XfF9fR0ZQX0NPTVB8ICAgX19HRlBfTk9NRU1BTExPQ3xfX0dGUF9IQVJEV0FMTCkKKworI2RlZmluZSBHRlBfTk9XQUlUIChHRlBfQVRPTUlDICYgfl9fR0ZQX0hJR0gpCisKKyNkZWZpbmUgR0ZQX0FUT01JQyAoX19HRlBfSElHSCkKKyNkZWZpbmUgR0ZQX05PSU8gKF9fR0ZQX1dBSVQpCisjZGVmaW5lIEdGUF9OT0ZTIChfX0dGUF9XQUlUIHwgX19HRlBfSU8pCisjZGVmaW5lIEdGUF9LRVJORUwgKF9fR0ZQX1dBSVQgfCBfX0dGUF9JTyB8IF9fR0ZQX0ZTKQorI2RlZmluZSBHRlBfVVNFUiAoX19HRlBfV0FJVCB8IF9fR0ZQX0lPIHwgX19HRlBfRlMgfCBfX0dGUF9IQVJEV0FMTCkKKyNkZWZpbmUgR0ZQX0hJR0hVU0VSIChfX0dGUF9XQUlUIHwgX19HRlBfSU8gfCBfX0dGUF9GUyB8IF9fR0ZQX0hBUkRXQUxMIHwgICBfX0dGUF9ISUdITUVNKQorCisjZGVmaW5lIEdGUF9ETUEgX19HRlBfRE1BCisKKyNkZWZpbmUgR0ZQX0RNQTMyIF9fR0ZQX0RNQTMyCisKKyNpZm5kZWYgSEFWRV9BUkNIX0ZSRUVfUEFHRQorI2VuZGlmCisKKyNkZWZpbmUgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSAgIGFsbG9jX3BhZ2VzX25vZGUobnVtYV9ub2RlX2lkKCksIGdmcF9tYXNrLCBvcmRlcikKKyNkZWZpbmUgYWxsb2NfcGFnZV92bWEoZ2ZwX21hc2ssIHZtYSwgYWRkcikgYWxsb2NfcGFnZXMoZ2ZwX21hc2ssIDApCisjZGVmaW5lIGFsbG9jX3BhZ2UoZ2ZwX21hc2spIGFsbG9jX3BhZ2VzKGdmcF9tYXNrLCAwKQorCisjZGVmaW5lIF9fZ2V0X2ZyZWVfcGFnZShnZnBfbWFzaykgICBfX2dldF9mcmVlX3BhZ2VzKChnZnBfbWFzayksMCkKKworI2RlZmluZSBfX2dldF9kbWFfcGFnZXMoZ2ZwX21hc2ssIG9yZGVyKSAgIF9fZ2V0X2ZyZWVfcGFnZXMoKGdmcF9tYXNrKSB8IEdGUF9ETUEsKG9yZGVyKSkKKworI2RlZmluZSBfX2ZyZWVfcGFnZShwYWdlKSBfX2ZyZWVfcGFnZXMoKHBhZ2UpLCAwKQorI2RlZmluZSBmcmVlX3BhZ2UoYWRkcikgZnJlZV9wYWdlcygoYWRkciksMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGFyZGlycS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hhcmRpcnEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU2NmIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hhcmRpcnEuaApAQCAtMCwwICsxLDczIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX0hBUkRJUlFfSAorI2RlZmluZSBMSU5VWF9IQVJESVJRX0gKKworI2luY2x1ZGUgPGxpbnV4L3ByZWVtcHQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xvY2tkZXAuaD4KKyNpbmNsdWRlIDxhc20vaGFyZGlycS5oPgorI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KKworI2RlZmluZSBQUkVFTVBUX0JJVFMgOAorI2RlZmluZSBTT0ZUSVJRX0JJVFMgOAorCisjaWZuZGVmIEhBUkRJUlFfQklUUworI2RlZmluZSBIQVJESVJRX0JJVFMgMTIKKworI2lmIDEgPDwgSEFSRElSUV9CSVRTIDwgTlJfSVJRUworI2Vycm9yIEhBUkRJUlFfQklUUyBpcyB0b28gbG93IQorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBQUkVFTVBUX1NISUZUIDAKKyNkZWZpbmUgU09GVElSUV9TSElGVCAoUFJFRU1QVF9TSElGVCArIFBSRUVNUFRfQklUUykKKyNkZWZpbmUgSEFSRElSUV9TSElGVCAoU09GVElSUV9TSElGVCArIFNPRlRJUlFfQklUUykKKworI2RlZmluZSBfX0lSUV9NQVNLKHgpICgoMVVMIDw8ICh4KSktMSkKKworI2RlZmluZSBQUkVFTVBUX01BU0sgKF9fSVJRX01BU0soUFJFRU1QVF9CSVRTKSA8PCBQUkVFTVBUX1NISUZUKQorI2RlZmluZSBTT0ZUSVJRX01BU0sgKF9fSVJRX01BU0soU09GVElSUV9CSVRTKSA8PCBTT0ZUSVJRX1NISUZUKQorI2RlZmluZSBIQVJESVJRX01BU0sgKF9fSVJRX01BU0soSEFSRElSUV9CSVRTKSA8PCBIQVJESVJRX1NISUZUKQorCisjZGVmaW5lIFBSRUVNUFRfT0ZGU0VUICgxVUwgPDwgUFJFRU1QVF9TSElGVCkKKyNkZWZpbmUgU09GVElSUV9PRkZTRVQgKDFVTCA8PCBTT0ZUSVJRX1NISUZUKQorI2RlZmluZSBIQVJESVJRX09GRlNFVCAoMVVMIDw8IEhBUkRJUlFfU0hJRlQpCisKKyNpZiBQUkVFTVBUX0FDVElWRSA8IDEgPDwgSEFSRElSUV9TSElGVCArIEhBUkRJUlFfQklUUworI2Vycm9yIFBSRUVNUFRfQUNUSVZFIGlzIHRvbyBsb3chCisjZW5kaWYKKworI2RlZmluZSBoYXJkaXJxX2NvdW50KCkgKHByZWVtcHRfY291bnQoKSAmIEhBUkRJUlFfTUFTSykKKyNkZWZpbmUgc29mdGlycV9jb3VudCgpIChwcmVlbXB0X2NvdW50KCkgJiBTT0ZUSVJRX01BU0spCisjZGVmaW5lIGlycV9jb3VudCgpIChwcmVlbXB0X2NvdW50KCkgJiAoSEFSRElSUV9NQVNLIHwgU09GVElSUV9NQVNLKSkKKworI2RlZmluZSBpbl9pcnEoKSAoaGFyZGlycV9jb3VudCgpKQorI2RlZmluZSBpbl9zb2Z0aXJxKCkgKHNvZnRpcnFfY291bnQoKSkKKyNkZWZpbmUgaW5faW50ZXJydXB0KCkgKGlycV9jb3VudCgpKQorCisjZGVmaW5lIGluX2F0b21pYygpICgocHJlZW1wdF9jb3VudCgpICYgflBSRUVNUFRfQUNUSVZFKSAhPSAwKQorCisjZGVmaW5lIHByZWVtcHRpYmxlKCkgMAorI2RlZmluZSBJUlFfRVhJVF9PRkZTRVQgSEFSRElSUV9PRkZTRVQKKworI2RlZmluZSBzeW5jaHJvbml6ZV9pcnEoaXJxKSBiYXJyaWVyKCkKKworc3RydWN0IHRhc2tfc3RydWN0OworCisjZGVmaW5lIGlycV9lbnRlcigpICAgZG8geyAgIGFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOyAgIGFkZF9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKTsgICB0cmFjZV9oYXJkaXJxX2VudGVyKCk7ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19pcnFfZXhpdCgpICAgZG8geyAgIHRyYWNlX2hhcmRpcnFfZXhpdCgpOyAgIGFjY291bnRfc3lzdGVtX3Z0aW1lKGN1cnJlbnQpOyAgIHN1Yl9wcmVlbXB0X2NvdW50KEhBUkRJUlFfT0ZGU0VUKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIG5taV9lbnRlcigpIGRvIHsgbG9ja2RlcF9vZmYoKTsgaXJxX2VudGVyKCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIG5taV9leGl0KCkgZG8geyBfX2lycV9leGl0KCk7IGxvY2tkZXBfb24oKTsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRsYy9pb2N0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkbGMvaW9jdGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTVhNjdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkbGMvaW9jdGwuaApAQCAtMCwwICsxLDU3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fSERMQ19JT0NUTF9IX18KKyNkZWZpbmUgX19IRExDX0lPQ1RMX0hfXworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IGNsb2NrX3JhdGU7CisgdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7CisgdW5zaWduZWQgc2hvcnQgbG9vcGJhY2s7Cit9IHN5bmNfc2VyaWFsX3NldHRpbmdzOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IGNsb2NrX3JhdGU7CisgdW5zaWduZWQgaW50IGNsb2NrX3R5cGU7CisgdW5zaWduZWQgc2hvcnQgbG9vcGJhY2s7CisgdW5zaWduZWQgaW50IHNsb3RfbWFwOworfSB0ZTFfc2V0dGluZ3M7CisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBzaG9ydCBlbmNvZGluZzsKKyB1bnNpZ25lZCBzaG9ydCBwYXJpdHk7Cit9IHJhd19oZGxjX3Byb3RvOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IHQzOTE7CisgdW5zaWduZWQgaW50IHQzOTI7CisgdW5zaWduZWQgaW50IG4zOTE7CisgdW5zaWduZWQgaW50IG4zOTI7CisgdW5zaWduZWQgaW50IG4zOTM7CisgdW5zaWduZWQgc2hvcnQgbG1pOworIHVuc2lnbmVkIHNob3J0IGRjZTsKK30gZnJfcHJvdG87CisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBpbnQgZGxjaTsKK30gZnJfcHJvdG9fcHZjOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IGRsY2k7CisgY2hhciBtYXN0ZXJbSUZOQU1TSVpdOworfWZyX3Byb3RvX3B2Y19pbmZvOworCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgaW50IGludGVydmFsOworIHVuc2lnbmVkIGludCB0aW1lb3V0OworfSBjaXNjb19wcm90bzsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRyZWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHJlZy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ODRlZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGRyZWcuaApAQCAtMCwwICsxLDQzMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSERSRUdfSAorI2RlZmluZSBfTElOVVhfSERSRUdfSAorCisjZGVmaW5lIEhESU9fRFJJVkVfQ01EX0hEUl9TSVpFICg0ICogc2l6ZW9mKHU4KSkKKyNkZWZpbmUgSERJT19EUklWRV9IT0JfSERSX1NJWkUgKDggKiBzaXplb2YodTgpKQorI2RlZmluZSBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUgKDggKiBzaXplb2YodTgpKQorCisjZGVmaW5lIElERV9EUklWRV9UQVNLX0lOVkFMSUQgLTEKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfTk9fREFUQSAwCisjZGVmaW5lIElERV9EUklWRV9UQVNLX1NFVF9YRkVSIDEKKworI2RlZmluZSBJREVfRFJJVkVfVEFTS19JTiAyCisKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfT1VUIDMKKyNkZWZpbmUgSURFX0RSSVZFX1RBU0tfUkFXX1dSSVRFIDQKKworI2RlZmluZSBJREVfVEFTS0ZJTEVfU1REX0lOX0ZMQUdTIDB4RkUKKyNkZWZpbmUgSURFX0hPQl9TVERfSU5fRkxBR1MgMHgzQworI2RlZmluZSBJREVfVEFTS0ZJTEVfU1REX09VVF9GTEFHUyAweEZFCisjZGVmaW5lIElERV9IT0JfU1REX09VVF9GTEFHUyAweDNDCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciB0YXNrX2lvcmVnX3Q7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgc2F0YV9pb3JlZ190OworCit0eXBlZGVmIHVuaW9uIGlkZV9yZWdfdmFsaWRfcyB7CisgdW5zaWduZWQgYWxsIDogMTY7Cisgc3RydWN0IHsKKyB1bnNpZ25lZCBkYXRhIDogMTsKKyB1bnNpZ25lZCBlcnJvcl9mZWF0dXJlIDogMTsKKyB1bnNpZ25lZCBzZWN0b3IgOiAxOworIHVuc2lnbmVkIG5zZWN0b3IgOiAxOworIHVuc2lnbmVkIGxjeWwgOiAxOworIHVuc2lnbmVkIGhjeWwgOiAxOworIHVuc2lnbmVkIHNlbGVjdCA6IDE7CisgdW5zaWduZWQgc3RhdHVzX2NvbW1hbmQgOiAxOworCisgdW5zaWduZWQgZGF0YV9ob2IgOiAxOworIHVuc2lnbmVkIGVycm9yX2ZlYXR1cmVfaG9iIDogMTsKKyB1bnNpZ25lZCBzZWN0b3JfaG9iIDogMTsKKyB1bnNpZ25lZCBuc2VjdG9yX2hvYiA6IDE7CisgdW5zaWduZWQgbGN5bF9ob2IgOiAxOworIHVuc2lnbmVkIGhjeWxfaG9iIDogMTsKKyB1bnNpZ25lZCBzZWxlY3RfaG9iIDogMTsKKyB1bnNpZ25lZCBjb250cm9sX2hvYiA6IDE7CisgfSBiOworfSBpZGVfcmVnX3ZhbGlkX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlkZV90YXNrX3JlcXVlc3RfcyB7CisgdGFza19pb3JlZ190IGlvX3BvcnRzWzhdOworIHRhc2tfaW9yZWdfdCBob2JfcG9ydHNbOF07CisgaWRlX3JlZ192YWxpZF90IG91dF9mbGFnczsKKyBpZGVfcmVnX3ZhbGlkX3QgaW5fZmxhZ3M7CisgaW50IGRhdGFfcGhhc2U7CisgaW50IHJlcV9jbWQ7CisgdW5zaWduZWQgbG9uZyBvdXRfc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGluX3NpemU7Cit9IGlkZV90YXNrX3JlcXVlc3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgaWRlX2lvY3RsX3JlcXVlc3RfcyB7CisgaWRlX3Rhc2tfcmVxdWVzdF90ICp0YXNrX3JlcXVlc3Q7CisgdW5zaWduZWQgY2hhciAqb3V0X2J1ZmZlcjsKKyB1bnNpZ25lZCBjaGFyICppbl9idWZmZXI7Cit9IGlkZV9pb2N0bF9yZXF1ZXN0X3Q7CisKK3N0cnVjdCBoZF9kcml2ZV9jbWRfaGRyIHsKKyB0YXNrX2lvcmVnX3QgY29tbWFuZDsKKyB0YXNrX2lvcmVnX3Qgc2VjdG9yX251bWJlcjsKKyB0YXNrX2lvcmVnX3QgZmVhdHVyZTsKKyB0YXNrX2lvcmVnX3Qgc2VjdG9yX2NvdW50OworfTsKKwordHlwZWRlZiBzdHJ1Y3QgaGRfZHJpdmVfdGFza19oZHIgeworIHRhc2tfaW9yZWdfdCBkYXRhOworIHRhc2tfaW9yZWdfdCBmZWF0dXJlOworIHRhc2tfaW9yZWdfdCBzZWN0b3JfY291bnQ7CisgdGFza19pb3JlZ190IHNlY3Rvcl9udW1iZXI7CisgdGFza19pb3JlZ190IGxvd19jeWxpbmRlcjsKKyB0YXNrX2lvcmVnX3QgaGlnaF9jeWxpbmRlcjsKKyB0YXNrX2lvcmVnX3QgZGV2aWNlX2hlYWQ7CisgdGFza19pb3JlZ190IGNvbW1hbmQ7Cit9IHRhc2tfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGhkX2RyaXZlX2hvYl9oZHIgeworIHRhc2tfaW9yZWdfdCBkYXRhOworIHRhc2tfaW9yZWdfdCBmZWF0dXJlOworIHRhc2tfaW9yZWdfdCBzZWN0b3JfY291bnQ7CisgdGFza19pb3JlZ190IHNlY3Rvcl9udW1iZXI7CisgdGFza19pb3JlZ190IGxvd19jeWxpbmRlcjsKKyB0YXNrX2lvcmVnX3QgaGlnaF9jeWxpbmRlcjsKKyB0YXNrX2lvcmVnX3QgZGV2aWNlX2hlYWQ7CisgdGFza19pb3JlZ190IGNvbnRyb2w7Cit9IGhvYl9zdHJ1Y3RfdDsKKworI2RlZmluZSBUQVNLRklMRV9JTlZBTElEIDB4N2ZmZgorI2RlZmluZSBUQVNLRklMRV80OCAweDgwMDAKKworI2RlZmluZSBUQVNLRklMRV9OT19EQVRBIDB4MDAwMAorCisjZGVmaW5lIFRBU0tGSUxFX0lOIDB4MDAwMQorI2RlZmluZSBUQVNLRklMRV9NVUxUSV9JTiAweDAwMDIKKworI2RlZmluZSBUQVNLRklMRV9PVVQgMHgwMDA0CisjZGVmaW5lIFRBU0tGSUxFX01VTFRJX09VVCAweDAwMDgKKyNkZWZpbmUgVEFTS0ZJTEVfSU5fT1VUIDB4MDAxMAorCisjZGVmaW5lIFRBU0tGSUxFX0lOX0RNQSAweDAwMjAKKyNkZWZpbmUgVEFTS0ZJTEVfT1VUX0RNQSAweDAwNDAKKyNkZWZpbmUgVEFTS0ZJTEVfSU5fRE1BUSAweDAwODAKKyNkZWZpbmUgVEFTS0ZJTEVfT1VUX0RNQVEgMHgwMTAwCisKKyNkZWZpbmUgVEFTS0ZJTEVfUF9JTiAweDAyMDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9PVVQgMHgwNDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BIDB4MDgwMAorI2RlZmluZSBUQVNLRklMRV9QX09VVF9ETUEgMHgxMDAwCisjZGVmaW5lIFRBU0tGSUxFX1BfSU5fRE1BUSAweDIwMDAKKyNkZWZpbmUgVEFTS0ZJTEVfUF9PVVRfRE1BUSAweDQwMDAKKworI2RlZmluZSBXSU5fTk9QIDB4MDAKKworI2RlZmluZSBDRkFfUkVRX0VYVF9FUlJPUl9DT0RFIDB4MDMgIAorCisjZGVmaW5lIFdJTl9TUlNUIDB4MDggIAorI2RlZmluZSBXSU5fREVWSUNFX1JFU0VUIDB4MDgKKworI2RlZmluZSBXSU5fUkVDQUwgMHgxMAorI2RlZmluZSBXSU5fUkVTVE9SRSBXSU5fUkVDQUwKKworI2RlZmluZSBXSU5fUkVBRCAweDIwICAKKyNkZWZpbmUgV0lOX1JFQURfT05DRSAweDIxICAKKyNkZWZpbmUgV0lOX1JFQURfTE9ORyAweDIyICAKKyNkZWZpbmUgV0lOX1JFQURfTE9OR19PTkNFIDB4MjMgIAorI2RlZmluZSBXSU5fUkVBRF9FWFQgMHgyNCAgCisjZGVmaW5lIFdJTl9SRUFERE1BX0VYVCAweDI1ICAKKyNkZWZpbmUgV0lOX1JFQURETUFfUVVFVUVEX0VYVCAweDI2ICAKKyNkZWZpbmUgV0lOX1JFQURfTkFUSVZFX01BWF9FWFQgMHgyNyAgCisKKyNkZWZpbmUgV0lOX01VTFRSRUFEX0VYVCAweDI5ICAKKworI2RlZmluZSBXSU5fV1JJVEUgMHgzMCAgCisjZGVmaW5lIFdJTl9XUklURV9PTkNFIDB4MzEgIAorI2RlZmluZSBXSU5fV1JJVEVfTE9ORyAweDMyICAKKyNkZWZpbmUgV0lOX1dSSVRFX0xPTkdfT05DRSAweDMzICAKKyNkZWZpbmUgV0lOX1dSSVRFX0VYVCAweDM0ICAKKyNkZWZpbmUgV0lOX1dSSVRFRE1BX0VYVCAweDM1ICAKKyNkZWZpbmUgV0lOX1dSSVRFRE1BX1FVRVVFRF9FWFQgMHgzNiAgCisjZGVmaW5lIFdJTl9TRVRfTUFYX0VYVCAweDM3ICAKKyNkZWZpbmUgQ0ZBX1dSSVRFX1NFQ1RfV09fRVJBU0UgMHgzOCAgCisjZGVmaW5lIFdJTl9NVUxUV1JJVEVfRVhUIDB4MzkgIAorCisjZGVmaW5lIFdJTl9XUklURV9WRVJJRlkgMHgzQyAgCisKKyNkZWZpbmUgV0lOX1ZFUklGWSAweDQwICAKKyNkZWZpbmUgV0lOX1ZFUklGWV9PTkNFIDB4NDEgIAorI2RlZmluZSBXSU5fVkVSSUZZX0VYVCAweDQyICAKKworI2RlZmluZSBXSU5fRk9STUFUIDB4NTAKKworI2RlZmluZSBXSU5fSU5JVCAweDYwCisKKyNkZWZpbmUgV0lOX1NFRUsgMHg3MCAgCisKKyNkZWZpbmUgQ0ZBX1RSQU5TTEFURV9TRUNUT1IgMHg4NyAgCisjZGVmaW5lIFdJTl9ESUFHTk9TRSAweDkwCisjZGVmaW5lIFdJTl9TUEVDSUZZIDB4OTEgIAorI2RlZmluZSBXSU5fRE9XTkxPQURfTUlDUk9DT0RFIDB4OTIKKyNkZWZpbmUgV0lOX1NUQU5EQllOT1cyIDB4OTQKKyNkZWZpbmUgV0lOX1NUQU5EQlkyIDB4OTYKKyNkZWZpbmUgV0lOX1NFVElETEUyIDB4OTcKKyNkZWZpbmUgV0lOX0NIRUNLUE9XRVJNT0RFMiAweDk4CisjZGVmaW5lIFdJTl9TTEVFUE5PVzIgMHg5OQorCisjZGVmaW5lIFdJTl9QQUNLRVRDTUQgMHhBMCAgCisjZGVmaW5lIFdJTl9QSURFTlRJRlkgMHhBMSAgCisjZGVmaW5lIFdJTl9RVUVVRURfU0VSVklDRSAweEEyCisjZGVmaW5lIFdJTl9TTUFSVCAweEIwICAKKyNkZWZpbmUgQ0ZBX0VSQVNFX1NFQ1RPUlMgMHhDMAorI2RlZmluZSBXSU5fTVVMVFJFQUQgMHhDNCAgCisjZGVmaW5lIFdJTl9NVUxUV1JJVEUgMHhDNSAgCisjZGVmaW5lIFdJTl9TRVRNVUxUIDB4QzYgIAorI2RlZmluZSBXSU5fUkVBRERNQV9RVUVVRUQgMHhDNyAgCisjZGVmaW5lIFdJTl9SRUFERE1BIDB4QzggIAorI2RlZmluZSBXSU5fUkVBRERNQV9PTkNFIDB4QzkgIAorI2RlZmluZSBXSU5fV1JJVEVETUEgMHhDQSAgCisjZGVmaW5lIFdJTl9XUklURURNQV9PTkNFIDB4Q0IgIAorI2RlZmluZSBXSU5fV1JJVEVETUFfUVVFVUVEIDB4Q0MgIAorI2RlZmluZSBDRkFfV1JJVEVfTVVMVElfV09fRVJBU0UgMHhDRCAgCisjZGVmaW5lIFdJTl9HRVRNRURJQVNUQVRVUyAweERBCisjZGVmaW5lIFdJTl9BQ0tNRURJQUNIQU5HRSAweERCICAKKyNkZWZpbmUgV0lOX1BPU1RCT09UIDB4REMKKyNkZWZpbmUgV0lOX1BSRUJPT1QgMHhERAorI2RlZmluZSBXSU5fRE9PUkxPQ0sgMHhERSAgCisjZGVmaW5lIFdJTl9ET09SVU5MT0NLIDB4REYgIAorI2RlZmluZSBXSU5fU1RBTkRCWU5PVzEgMHhFMAorI2RlZmluZSBXSU5fSURMRUlNTUVESUFURSAweEUxICAKKyNkZWZpbmUgV0lOX1NUQU5EQlkgMHhFMiAgCisjZGVmaW5lIFdJTl9TRVRJRExFMSAweEUzCisjZGVmaW5lIFdJTl9SRUFEX0JVRkZFUiAweEU0ICAKKyNkZWZpbmUgV0lOX0NIRUNLUE9XRVJNT0RFMSAweEU1CisjZGVmaW5lIFdJTl9TTEVFUE5PVzEgMHhFNgorI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEUgMHhFNworI2RlZmluZSBXSU5fV1JJVEVfQlVGRkVSIDB4RTggIAorI2RlZmluZSBXSU5fV1JJVEVfU0FNRSAweEU5ICAKKworI2RlZmluZSBXSU5fRkxVU0hfQ0FDSEVfRVhUIDB4RUEgIAorI2RlZmluZSBXSU5fSURFTlRJRlkgMHhFQyAgCisjZGVmaW5lIFdJTl9NRURJQUVKRUNUIDB4RUQKKyNkZWZpbmUgV0lOX0lERU5USUZZX0RNQSAweEVFICAKKyNkZWZpbmUgV0lOX1NFVEZFQVRVUkVTIDB4RUYgIAorI2RlZmluZSBFWEFCWVRFX0VOQUJMRV9ORVNUIDB4RjAKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX1NFVF9QQVNTIDB4RjEKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX1VOTE9DSyAweEYyCisjZGVmaW5lIFdJTl9TRUNVUklUWV9FUkFTRV9QUkVQQVJFIDB4RjMKKyNkZWZpbmUgV0lOX1NFQ1VSSVRZX0VSQVNFX1VOSVQgMHhGNAorI2RlZmluZSBXSU5fU0VDVVJJVFlfRlJFRVpFX0xPQ0sgMHhGNQorI2RlZmluZSBXSU5fU0VDVVJJVFlfRElTQUJMRSAweEY2CisjZGVmaW5lIFdJTl9SRUFEX05BVElWRV9NQVggMHhGOCAgCisjZGVmaW5lIFdJTl9TRVRfTUFYIDB4RjkKKyNkZWZpbmUgRElTQUJMRV9TRUFHQVRFIDB4RkIKKworI2RlZmluZSBTTUFSVF9SRUFEX1ZBTFVFUyAweEQwCisjZGVmaW5lIFNNQVJUX1JFQURfVEhSRVNIT0xEUyAweEQxCisjZGVmaW5lIFNNQVJUX0FVVE9TQVZFIDB4RDIKKyNkZWZpbmUgU01BUlRfU0FWRSAweEQzCisjZGVmaW5lIFNNQVJUX0lNTUVESUFURV9PRkZMSU5FIDB4RDQKKyNkZWZpbmUgU01BUlRfUkVBRF9MT0dfU0VDVE9SIDB4RDUKKyNkZWZpbmUgU01BUlRfV1JJVEVfTE9HX1NFQ1RPUiAweEQ2CisjZGVmaW5lIFNNQVJUX1dSSVRFX1RIUkVTSE9MRFMgMHhENworI2RlZmluZSBTTUFSVF9FTkFCTEUgMHhEOAorI2RlZmluZSBTTUFSVF9ESVNBQkxFIDB4RDkKKyNkZWZpbmUgU01BUlRfU1RBVFVTIDB4REEKKyNkZWZpbmUgU01BUlRfQVVUT19PRkZMSU5FIDB4REIKKworI2RlZmluZSBTTUFSVF9MQ1lMX1BBU1MgMHg0RgorI2RlZmluZSBTTUFSVF9IQ1lMX1BBU1MgMHhDMgorCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOXzhCSVQgMHgwMSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1dDQUNIRSAweDAyICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0RFRkVDVCAweDA0ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fQVBNIDB4MDUgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TQU1FX1IgMHgyMiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19NU04gMHgzMSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19SRVRSWSAweDMzICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fQUFNIDB4NDIgIAorI2RlZmluZSBTRVRGRUFUVVJFU19SV19MT05HIDB4NDQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19TRVRfQ0FDSEUgMHg1NCAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19STEEgMHg1NSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX1JJIDB4NUQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TSSAweDVFICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JQT0QgMHg2NiAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19FQ0MgMHg3NyAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU184QklUIDB4ODEgIAorI2RlZmluZSBTRVRGRUFUVVJFU19ESVNfV0NBQ0hFIDB4ODIgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9ERUZFQ1QgMHg4NCAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19BUE0gMHg4NSAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0VOX0VDQyAweDg4ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fTVNOIDB4OTUgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9SRVRSWSAweDk5ICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkxBIDB4QUEgIAorI2RlZmluZSBTRVRGRUFUVVJFU19QUkVGRVRDSCAweEFCICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUkVTVCAweEFDICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfNEJfUldfTE9ORyAweEJCICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX0FBTSAweEMyICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRU5fUlBPRCAweENDICAKKyNkZWZpbmUgU0VURkVBVFVSRVNfRElTX1JJIDB4REQgIAorI2RlZmluZSBTRVRGRUFUVVJFU19FTl9TQU1FX00gMHhERCAgCisjZGVmaW5lIFNFVEZFQVRVUkVTX0RJU19TSSAweERFICAKKworI2RlZmluZSBTRUNVUklUWV9TRVRfUEFTU1dPUkQgMHhCQQorI2RlZmluZSBTRUNVUklUWV9VTkxPQ0sgMHhCQgorI2RlZmluZSBTRUNVUklUWV9FUkFTRV9QUkVQQVJFIDB4QkMKKyNkZWZpbmUgU0VDVVJJVFlfRVJBU0VfVU5JVCAweEJECisjZGVmaW5lIFNFQ1VSSVRZX0ZSRUVaRV9MT0NLIDB4QkUKKyNkZWZpbmUgU0VDVVJJVFlfRElTQUJMRV9QQVNTV09SRCAweEJGCisKK3N0cnVjdCBoZF9nZW9tZXRyeSB7CisgdW5zaWduZWQgY2hhciBoZWFkczsKKyB1bnNpZ25lZCBjaGFyIHNlY3RvcnM7CisgdW5zaWduZWQgc2hvcnQgY3lsaW5kZXJzOworIHVuc2lnbmVkIGxvbmcgc3RhcnQ7Cit9OworCisjZGVmaW5lIEhESU9fR0VUR0VPIDB4MDMwMSAgCisjZGVmaW5lIEhESU9fR0VUX1VOTUFTS0lOVFIgMHgwMzAyICAKKyNkZWZpbmUgSERJT19HRVRfTVVMVENPVU5UIDB4MDMwNCAgCisjZGVmaW5lIEhESU9fR0VUX1FETUEgMHgwMzA1ICAKKworI2RlZmluZSBIRElPX1NFVF9YRkVSIDB4MDMwNiAgCisKKyNkZWZpbmUgSERJT19PQlNPTEVURV9JREVOVElUWSAweDAzMDcgIAorI2RlZmluZSBIRElPX0dFVF9LRUVQU0VUVElOR1MgMHgwMzA4ICAKKyNkZWZpbmUgSERJT19HRVRfMzJCSVQgMHgwMzA5ICAKKyNkZWZpbmUgSERJT19HRVRfTk9XRVJSIDB4MDMwYSAgCisjZGVmaW5lIEhESU9fR0VUX0RNQSAweDAzMGIgIAorI2RlZmluZSBIRElPX0dFVF9OSUNFIDB4MDMwYyAgCisjZGVmaW5lIEhESU9fR0VUX0lERU5USVRZIDB4MDMwZCAgCisjZGVmaW5lIEhESU9fR0VUX1dDQUNIRSAweDAzMGUgIAorI2RlZmluZSBIRElPX0dFVF9BQ09VU1RJQyAweDAzMGYgIAorI2RlZmluZSBIRElPX0dFVF9BRERSRVNTIDB4MDMxMCAgCisKKyNkZWZpbmUgSERJT19HRVRfQlVTU1RBVEUgMHgwMzFhICAKKyNkZWZpbmUgSERJT19UUklTVEFURV9IV0lGIDB4MDMxYiAgCisjZGVmaW5lIEhESU9fRFJJVkVfUkVTRVQgMHgwMzFjICAKKyNkZWZpbmUgSERJT19EUklWRV9UQVNLRklMRSAweDAzMWQgIAorI2RlZmluZSBIRElPX0RSSVZFX1RBU0sgMHgwMzFlICAKKyNkZWZpbmUgSERJT19EUklWRV9DTUQgMHgwMzFmICAKKyNkZWZpbmUgSERJT19EUklWRV9DTURfQUVCIEhESU9fRFJJVkVfVEFTSworCisjZGVmaW5lIEhESU9fU0VUX01VTFRDT1VOVCAweDAzMjEgIAorI2RlZmluZSBIRElPX1NFVF9VTk1BU0tJTlRSIDB4MDMyMiAgCisjZGVmaW5lIEhESU9fU0VUX0tFRVBTRVRUSU5HUyAweDAzMjMgIAorI2RlZmluZSBIRElPX1NFVF8zMkJJVCAweDAzMjQgIAorI2RlZmluZSBIRElPX1NFVF9OT1dFUlIgMHgwMzI1ICAKKyNkZWZpbmUgSERJT19TRVRfRE1BIDB4MDMyNiAgCisjZGVmaW5lIEhESU9fU0VUX1BJT19NT0RFIDB4MDMyNyAgCisjZGVmaW5lIEhESU9fU0NBTl9IV0lGIDB4MDMyOCAgCisjZGVmaW5lIEhESU9fU0VUX05JQ0UgMHgwMzI5ICAKKyNkZWZpbmUgSERJT19VTlJFR0lTVEVSX0hXSUYgMHgwMzJhICAKKyNkZWZpbmUgSERJT19TRVRfV0NBQ0hFIDB4MDMyYiAgCisjZGVmaW5lIEhESU9fU0VUX0FDT1VTVElDIDB4MDMyYyAgCisjZGVmaW5lIEhESU9fU0VUX0JVU1NUQVRFIDB4MDMyZCAgCisjZGVmaW5lIEhESU9fU0VUX1FETUEgMHgwMzJlICAKKyNkZWZpbmUgSERJT19TRVRfQUREUkVTUyAweDAzMmYgIAorCitlbnVtIHsKKyBCVVNTVEFURV9PRkYgPSAwLAorIEJVU1NUQVRFX09OLAorIEJVU1NUQVRFX1RSSVNUQVRFCit9OworCisjZGVmaW5lIF9fTkVXX0hEX0RSSVZFX0lECisKK3N0cnVjdCBoZF9kcml2ZWlkIHsKKyB1bnNpZ25lZCBzaG9ydCBjb25maWc7CisgdW5zaWduZWQgc2hvcnQgY3lsczsKKyB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDI7CisgdW5zaWduZWQgc2hvcnQgaGVhZHM7CisgdW5zaWduZWQgc2hvcnQgdHJhY2tfYnl0ZXM7CisgdW5zaWduZWQgc2hvcnQgc2VjdG9yX2J5dGVzOworIHVuc2lnbmVkIHNob3J0IHNlY3RvcnM7CisgdW5zaWduZWQgc2hvcnQgdmVuZG9yMDsKKyB1bnNpZ25lZCBzaG9ydCB2ZW5kb3IxOworIHVuc2lnbmVkIHNob3J0IHZlbmRvcjI7CisgdW5zaWduZWQgY2hhciBzZXJpYWxfbm9bMjBdOworIHVuc2lnbmVkIHNob3J0IGJ1Zl90eXBlOworIHVuc2lnbmVkIHNob3J0IGJ1Zl9zaXplOworIHVuc2lnbmVkIHNob3J0IGVjY19ieXRlczsKKyB1bnNpZ25lZCBjaGFyIGZ3X3Jldls4XTsKKyB1bnNpZ25lZCBjaGFyIG1vZGVsWzQwXTsKKyB1bnNpZ25lZCBjaGFyIG1heF9tdWx0c2VjdDsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcjM7CisgdW5zaWduZWQgc2hvcnQgZHdvcmRfaW87CisgdW5zaWduZWQgY2hhciB2ZW5kb3I0OworIHVuc2lnbmVkIGNoYXIgY2FwYWJpbGl0eTsKKyB1bnNpZ25lZCBzaG9ydCByZXNlcnZlZDUwOworIHVuc2lnbmVkIGNoYXIgdmVuZG9yNTsKKyB1bnNpZ25lZCBjaGFyIHRQSU87CisgdW5zaWduZWQgY2hhciB2ZW5kb3I2OworIHVuc2lnbmVkIGNoYXIgdERNQTsKKyB1bnNpZ25lZCBzaG9ydCBmaWVsZF92YWxpZDsKKyB1bnNpZ25lZCBzaG9ydCBjdXJfY3lsczsKKyB1bnNpZ25lZCBzaG9ydCBjdXJfaGVhZHM7CisgdW5zaWduZWQgc2hvcnQgY3VyX3NlY3RvcnM7CisgdW5zaWduZWQgc2hvcnQgY3VyX2NhcGFjaXR5MDsKKyB1bnNpZ25lZCBzaG9ydCBjdXJfY2FwYWNpdHkxOworIHVuc2lnbmVkIGNoYXIgbXVsdHNlY3Q7CisgdW5zaWduZWQgY2hhciBtdWx0c2VjdF92YWxpZDsKKyB1bnNpZ25lZCBpbnQgbGJhX2NhcGFjaXR5OworIHVuc2lnbmVkIHNob3J0IGRtYV8xd29yZDsKKyB1bnNpZ25lZCBzaG9ydCBkbWFfbXdvcmQ7CisgdW5zaWduZWQgc2hvcnQgZWlkZV9waW9fbW9kZXM7CisgdW5zaWduZWQgc2hvcnQgZWlkZV9kbWFfbWluOworIHVuc2lnbmVkIHNob3J0IGVpZGVfZG1hX3RpbWU7CisgdW5zaWduZWQgc2hvcnQgZWlkZV9waW87CisgdW5zaWduZWQgc2hvcnQgZWlkZV9waW9faW9yZHk7CisgdW5zaWduZWQgc2hvcnQgd29yZHM2OV83MFsyXTsKKworIHVuc2lnbmVkIHNob3J0IHdvcmRzNzFfNzRbNF07CisgdW5zaWduZWQgc2hvcnQgcXVldWVfZGVwdGg7CisgdW5zaWduZWQgc2hvcnQgd29yZHM3Nl83OVs0XTsKKyB1bnNpZ25lZCBzaG9ydCBtYWpvcl9yZXZfbnVtOworIHVuc2lnbmVkIHNob3J0IG1pbm9yX3Jldl9udW07CisgdW5zaWduZWQgc2hvcnQgY29tbWFuZF9zZXRfMTsKKyB1bnNpZ25lZCBzaG9ydCBjb21tYW5kX3NldF8yOworIHVuc2lnbmVkIHNob3J0IGNmc3NlOworIHVuc2lnbmVkIHNob3J0IGNmc19lbmFibGVfMTsKKyB1bnNpZ25lZCBzaG9ydCBjZnNfZW5hYmxlXzI7CisgdW5zaWduZWQgc2hvcnQgY3NmX2RlZmF1bHQ7CisgdW5zaWduZWQgc2hvcnQgZG1hX3VsdHJhOworIHVuc2lnbmVkIHNob3J0IHRyc2V1YzsKKyB1bnNpZ25lZCBzaG9ydCB0cnNFdWM7CisgdW5zaWduZWQgc2hvcnQgQ3VyQVBNdmFsdWVzOworIHVuc2lnbmVkIHNob3J0IG1wcmM7CisgdW5zaWduZWQgc2hvcnQgaHdfY29uZmlnOworIHVuc2lnbmVkIHNob3J0IGFjb3VzdGljOworIHVuc2lnbmVkIHNob3J0IG1zcnFzOworIHVuc2lnbmVkIHNob3J0IHN4ZmVydDsKKyB1bnNpZ25lZCBzaG9ydCBzYWw7CisgdW5zaWduZWQgaW50IHNwZzsKKyB1bnNpZ25lZCBsb25nIGxvbmcgbGJhX2NhcGFjaXR5XzI7CisgdW5zaWduZWQgc2hvcnQgd29yZHMxMDRfMTI1WzIyXTsKKyB1bnNpZ25lZCBzaG9ydCBsYXN0X2x1bjsKKyB1bnNpZ25lZCBzaG9ydCB3b3JkMTI3OworIHVuc2lnbmVkIHNob3J0IGRsZjsKKyB1bnNpZ25lZCBzaG9ydCBjc2ZvOworIHVuc2lnbmVkIHNob3J0IHdvcmRzMTMwXzE1NVsyNl07CisgdW5zaWduZWQgc2hvcnQgd29yZDE1NjsKKyB1bnNpZ25lZCBzaG9ydCB3b3JkczE1N18xNTlbM107CisgdW5zaWduZWQgc2hvcnQgY2ZhX3Bvd2VyOworIHVuc2lnbmVkIHNob3J0IHdvcmRzMTYxXzE3NVsxNV07CisgdW5zaWduZWQgc2hvcnQgd29yZHMxNzZfMjA1WzMwXTsKKyB1bnNpZ25lZCBzaG9ydCB3b3JkczIwNl8yNTRbNDldOworIHVuc2lnbmVkIHNob3J0IGludGVncml0eV93b3JkOworfTsKKworI2RlZmluZSBJREVfTklDRV9EU0NfT1ZFUkxBUCAoMCkgIAorI2RlZmluZSBJREVfTklDRV9BVEFQSV9PVkVSTEFQICgxKSAgCisjZGVmaW5lIElERV9OSUNFXzAgKDIpICAKKyNkZWZpbmUgSURFX05JQ0VfMSAoMykgIAorI2RlZmluZSBJREVfTklDRV8yICg0KSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hkc21hcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHNtYXJ0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNiYzY1MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oZHNtYXJ0LmgKQEAgLTAsMCArMSwxMTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0hEU01BUlRfSAorI2RlZmluZSBfTElOVVhfSERTTUFSVF9ICisKKyNkZWZpbmUgT0ZGTElORV9GVUxMX1NDQU4gMAorI2RlZmluZSBTSE9SVF9TRUxGX1RFU1QgMQorI2RlZmluZSBFWFRFTkRfU0VMRl9URVNUIDIKKyNkZWZpbmUgU0hPUlRfQ0FQVElWRV9TRUxGX1RFU1QgMTI5CisjZGVmaW5lIEVYVEVORF9DQVBUSVZFX1NFTEZfVEVTVCAxMzAKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X2F0dHJpYnV0ZV9zIHsKKyB1bnNpZ25lZCBjaGFyIGlkOworIHVuc2lnbmVkIHNob3J0IHN0YXR1c19mbGFnOworIHVuc2lnbmVkIGNoYXIgbm9ybWFsaXplZDsKKyB1bnNpZ25lZCBjaGFyIHdvcnNlX25vcm1hbDsKKyB1bnNpZ25lZCBjaGFyIHJhd1s2XTsKKyB1bnNpZ25lZCBjaGFyIHJlc2VydjsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9hdHRyaWJ1dGVfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3ZhbHVlc19zIHsKKyB1bnNpZ25lZCBzaG9ydCByZXZudW1iZXI7CisgYXRhX3NtYXJ0X2F0dHJpYnV0ZV90IHZlbmRvcl9hdHRyaWJ1dGVzIFszMF07CisgdW5zaWduZWQgY2hhciBvZmZsaW5lX2RhdGFfY29sbGVjdGlvbl9zdGF0dXM7CisgdW5zaWduZWQgY2hhciBzZWxmX3Rlc3RfZXhlY19zdGF0dXM7CisgdW5zaWduZWQgc2hvcnQgdG90YWxfdGltZV90b19jb21wbGV0ZV9vZmZfbGluZTsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcl9zcGVjaWZpY18zNjY7CisgdW5zaWduZWQgY2hhciBvZmZsaW5lX2RhdGFfY29sbGVjdGlvbl9jYXBhYmlsaXR5OworIHVuc2lnbmVkIHNob3J0IHNtYXJ0X2NhcGFiaWxpdHk7CisgdW5zaWduZWQgY2hhciBlcnJvcmxvZ19jYXBhYmlsaXR5OworIHVuc2lnbmVkIGNoYXIgdmVuZG9yX3NwZWNpZmljXzM3MTsKKyB1bnNpZ25lZCBjaGFyIHNob3J0X3Rlc3RfY29tcGxldGlvbl90aW1lOworIHVuc2lnbmVkIGNoYXIgZXh0ZW5kX3Rlc3RfY29tcGxldGlvbl90aW1lOworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRfMzc0XzM4NSBbMTJdOworIHVuc2lnbmVkIGNoYXIgdmVuZG9yX3NwZWNpZmljXzM4Nl81MDkgWzEyNV07CisgdW5zaWduZWQgY2hhciBjaGtzdW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfdmFsdWVzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF90aHJlc2hvbGRfZW50cnlfcyB7CisgdW5zaWduZWQgY2hhciBpZDsKKyB1bnNpZ25lZCBjaGFyIG5vcm1hbGl6ZWRfdGhyZXNob2xkOworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTBdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X3RocmVzaG9sZF9lbnRyeV90OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfdGhyZXNob2xkc19zIHsKKyB1bnNpZ25lZCBzaG9ydCByZXZudW1iZXI7CisgYXRhX3NtYXJ0X3RocmVzaG9sZF9lbnRyeV90IHRocmVzX2VudHJpZXNbMzBdOworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbMTQ5XTsKKyB1bnNpZ25lZCBjaGFyIGNoa3N1bTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF90aHJlc2hvbGRzX3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF9zIHsKKyB1bnNpZ25lZCBjaGFyIGRldmljZWNvbnRyb2xyZWc7CisgdW5zaWduZWQgY2hhciBmZWF0dXJlc3JlZzsKKyB1bnNpZ25lZCBjaGFyIHNlY3Rvcl9jb3VudDsKKyB1bnNpZ25lZCBjaGFyIHNlY3Rvcl9udW1iZXI7CisgdW5zaWduZWQgY2hhciBjeWxpbmRlcl9sb3c7CisgdW5zaWduZWQgY2hhciBjeWxpbmRlcl9oaWdoOworIHVuc2lnbmVkIGNoYXIgZHJpdmVfaGVhZDsKKyB1bnNpZ25lZCBjaGFyIGNvbW1hbmRyZWc7CisgdW5zaWduZWQgaW50IHRpbWVzdGFtcDsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfZXJyb3Jfc3RydWN0X3MgeworIHVuc2lnbmVkIGNoYXIgZXJyb3JfY29uZGl0aW9uOworIHVuc2lnbmVkIGNoYXIgZXh0ZW5kZWRfZXJyb3JbMTRdOworIHVuc2lnbmVkIGNoYXIgc3RhdGU7CisgdW5zaWduZWQgc2hvcnQgdGltZXN0YW1wOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X2Vycm9ybG9nX2Vycm9yX3N0cnVjdF90OworCit0eXBlZGVmIHN0cnVjdCBhdGFfc21hcnRfZXJyb3Jsb2dfc3RydWN0X3MgeworIGF0YV9zbWFydF9lcnJvcmxvZ19jb21tYW5kX3N0cnVjdF90IGNvbW1hbmRzWzZdOworIGF0YV9zbWFydF9lcnJvcmxvZ19lcnJvcl9zdHJ1Y3RfdCBlcnJvcl9zdHJ1Y3Q7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfZXJyb3Jsb2dfc3RydWN0X3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9lcnJvcmxvZ19zIHsKKyB1bnNpZ25lZCBjaGFyIHJldm51bWJlcjsKKyB1bnNpZ25lZCBjaGFyIGVycm9yX2xvZ19wb2ludGVyOworIGF0YV9zbWFydF9lcnJvcmxvZ19zdHJ1Y3RfdCBlcnJvcmxvZ19zdHJ1Y3RbNV07CisgdW5zaWduZWQgc2hvcnQgYXRhX2Vycm9yX2NvdW50OworIHVuc2lnbmVkIHNob3J0IG5vbl9mYXRhbF9jb3VudDsKKyB1bnNpZ25lZCBzaG9ydCBkcml2ZV90aW1lb3V0X2NvdW50OworIHVuc2lnbmVkIGNoYXIgcmVzZXJ2ZWRbNTNdOworIHVuc2lnbmVkIGNoYXIgY2hrc3VtOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSkgYXRhX3NtYXJ0X2Vycm9ybG9nX3Q7CisKK3R5cGVkZWYgc3RydWN0IGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zdHJ1Y3RfcyB7CisgdW5zaWduZWQgY2hhciBzZWxmdGVzdG51bWJlcjsKKyB1bnNpZ25lZCBjaGFyIHNlbGZ0ZXN0c3RhdHVzOworIHVuc2lnbmVkIHNob3J0IHRpbWVzdGFtcDsKKyB1bnNpZ25lZCBjaGFyIHNlbGZ0ZXN0ZmFpbHVyZWNoZWNrcG9pbnQ7CisgdW5zaWduZWQgaW50IGxiYWZpcnN0ZmFpbHVyZTsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcnNwZWNpZmljWzE1XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpIGF0YV9zbWFydF9zZWxmdGVzdGxvZ19zdHJ1Y3RfdDsKKwordHlwZWRlZiBzdHJ1Y3QgYXRhX3NtYXJ0X3NlbGZ0ZXN0bG9nX3MgeworIHVuc2lnbmVkIHNob3J0IHJldm51bWJlcjsKKyBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfc3RydWN0X3Qgc2VsZnRlc3Rfc3RydWN0WzIxXTsKKyB1bnNpZ25lZCBjaGFyIHZlbmRvcnNwZWNpZmljWzJdOworIHVuc2lnbmVkIGNoYXIgbW9zdHJlY2VudHRlc3Q7CisgdW5zaWduZWQgY2hhciByZXNldmVyZWRbMl07CisgdW5zaWduZWQgY2hhciBjaGtzdW07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKSBhdGFfc21hcnRfc2VsZnRlc3Rsb2dfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlnaG1lbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZ2htZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNGEzNGNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2hpZ2htZW0uaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ISUdITUVNX0gKKyNkZWZpbmUgX0xJTlVYX0hJR0hNRU1fSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCisjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKworI2lmbmRlZiBBUkNIX0hBU19GTFVTSF9BTk9OX1BBR0UKKyNlbmRpZgorI2lmbmRlZiBBUkNIX0hBU19GTFVTSF9LRVJORUxfRENBQ0hFX1BBR0UKKyNlbmRpZgorI2RlZmluZSBrdW5tYXAocGFnZSkgZG8geyAodm9pZCkgKHBhZ2UpOyB9IHdoaWxlICgwKQorI2RlZmluZSBrbWFwX2F0b21pYyhwYWdlLCBpZHgpIHBhZ2VfYWRkcmVzcyhwYWdlKQorI2RlZmluZSBrdW5tYXBfYXRvbWljKGFkZHIsIGlkeCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBrbWFwX2F0b21pY19wZm4ocGZuLCBpZHgpIHBhZ2VfYWRkcmVzcyhwZm5fdG9fcGFnZShwZm4pKQorI2RlZmluZSBrbWFwX2F0b21pY190b19wYWdlKHB0cikgdmlydF90b19wYWdlKHB0cikKKyNpZm5kZWYgX19IQVZFX0FSQ0hfQUxMT0NfWkVST0VEX1VTRVJfSElHSFBBR0UKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaGlsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTBiM2I5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9oaWwuaApAQCAtMCwwICsxLDI1NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSElMX0hfCisjZGVmaW5lIF9ISUxfSF8KKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIEhJTF9DTE9DSyA4TUhaCisjZGVmaW5lIEhJTF9FSzFfQ0xPQ0sgMzBIWgorI2RlZmluZSBISUxfRUsyX0NMT0NLIDYwSFoKKworI2RlZmluZSBISUxfVElNRU9VVF9ERVYgNSAgCisjZGVmaW5lIEhJTF9USU1FT1VUX0RFVlMgMTAgIAorI2RlZmluZSBISUxfVElNRU9VVF9OT1JFU1AgMTAgIAorI2RlZmluZSBISUxfVElNRU9VVF9ERVZTX0RBVEEgMTYgIAorI2RlZmluZSBISUxfVElNRU9VVF9TRUxGVEVTVCAyMDAgIAorCisjZGVmaW5lIEhJTF9XSVJFX1BBQ0tFVF9MRU4gMTUKK2VudW0gaGlsX3dpcmVfYml0cG9zIHsKKyBISUxfV0lSRV9TVEFSVCA9IDAsCisgSElMX1dJUkVfQUREUjIsCisgSElMX1dJUkVfQUREUjEsCisgSElMX1dJUkVfQUREUjAsCisgSElMX1dJUkVfQ09NTUFORCwKKyBISUxfV0lSRV9EQVRBNywKKyBISUxfV0lSRV9EQVRBNiwKKyBISUxfV0lSRV9EQVRBNSwKKyBISUxfV0lSRV9EQVRBNCwKKyBISUxfV0lSRV9EQVRBMywKKyBISUxfV0lSRV9EQVRBMiwKKyBISUxfV0lSRV9EQVRBMSwKKyBISUxfV0lSRV9EQVRBMCwKKyBISUxfV0lSRV9QQVJJVFksCisgSElMX1dJUkVfU1RPUAorfTsKKworZW51bSBoaWxfcGt0X2JpdHBvcyB7CisgSElMX1BLVF9DTUQgPSAweDAwMDAwODAwLAorIEhJTF9QS1RfQUREUjIgPSAweDAwMDAwNDAwLAorIEhJTF9QS1RfQUREUjEgPSAweDAwMDAwMjAwLAorIEhJTF9QS1RfQUREUjAgPSAweDAwMDAwMTAwLAorIEhJTF9QS1RfQUREUl9NQVNLID0gMHgwMDAwMDcwMCwKKyBISUxfUEtUX0FERFJfU0hJRlQgPSA4LAorIEhJTF9QS1RfREFUQTcgPSAweDAwMDAwMDgwLAorIEhJTF9QS1RfREFUQTYgPSAweDAwMDAwMDQwLAorIEhJTF9QS1RfREFUQTUgPSAweDAwMDAwMDIwLAorIEhJTF9QS1RfREFUQTQgPSAweDAwMDAwMDEwLAorIEhJTF9QS1RfREFUQTMgPSAweDAwMDAwMDA4LAorIEhJTF9QS1RfREFUQTIgPSAweDAwMDAwMDA0LAorIEhJTF9QS1RfREFUQTEgPSAweDAwMDAwMDAyLAorIEhJTF9QS1RfREFUQTAgPSAweDAwMDAwMDAxLAorIEhJTF9QS1RfREFUQV9NQVNLID0gMHgwMDAwMDBGRiwKKyBISUxfUEtUX0RBVEFfU0hJRlQgPSAwCit9OworCitlbnVtIGhpbF9lcnJvcl9iaXRwb3MgeworIEhJTF9FUlJfT0IgPSAweDAwMDAwODAwLAorIEhJTF9FUlJfSU5UID0gMHgwMDAxMDAwMCwKKyBISUxfRVJSX05NSSA9IDB4MDAwMjAwMDAsCisgSElMX0VSUl9MRVJSID0gMHgwMDA0MDAwMCwKKyBISUxfRVJSX1BFUlIgPSAweDAxMDAwMDAwLAorIEhJTF9FUlJfRkVSUiA9IDB4MDIwMDAwMDAsCisgSElMX0VSUl9GT0YgPSAweDA0MDAwMDAwCit9OworCitlbnVtIGhpbF9jb250cm9sX2JpdHBvcyB7CisgSElMX0NUUkxfVEVTVCA9IDB4MDAwMTAwMDAsCisgSElMX0NUUkxfSVBGID0gMHgwMDA0MDAwMCwKKyBISUxfQ1RSTF9BUEUgPSAweDAyMDAwMDAwCit9OworCisjZGVmaW5lIEhJTF9ET19BTFRFUl9DVFJMIDB4NDAwMDAwMDAgIAorI2RlZmluZSBISUxfQ1RSTF9PTkxZIDB4YzAwMDAwMDAgIAorCit0eXBlZGVmIHUzMiBoaWxfcGFja2V0OworCitlbnVtIGhpbF9jb21tYW5kIHsKKyBISUxfQ01EX0lGQyA9IDB4MDAsCisgSElMX0NNRF9FUFQgPSAweDAxLAorIEhJTF9DTURfRUxCID0gMHgwMiwKKyBISUxfQ01EX0lERCA9IDB4MDMsCisgSElMX0NNRF9EU1IgPSAweDA0LAorIEhJTF9DTURfUFNUID0gMHgwNSwKKyBISUxfQ01EX1JSRyA9IDB4MDYsCisgSElMX0NNRF9XUkcgPSAweDA3LAorIEhJTF9DTURfQUNGID0gMHgwOCwKKyBISUxfQ01ESURfQUNGID0gMHgwNywKKyBISUxfQ01EX1BPTCA9IDB4MTAsCisgSElMX0NNRENUX1BPTCA9IDB4MGYsCisgSElMX0NNRF9SUEwgPSAweDIwLAorIEhJTF9DTURDVF9SUEwgPSAweDBmLAorIEhJTF9DTURfUk5NID0gMHgzMCwKKyBISUxfQ01EX1JTVCA9IDB4MzEsCisgSElMX0NNRF9FWEQgPSAweDMyLAorIEhJTF9DTURfUlNDID0gMHgzMywKKworIEhJTF9DTURfREtBID0gMHgzZCwKKyBISUxfQ01EX0VLMSA9IDB4M2UsCisgSElMX0NNRF9FSzIgPSAweDNmLAorIEhJTF9DTURfUFIxID0gMHg0MCwKKyBISUxfQ01EX1BSMiA9IDB4NDEsCisgSElMX0NNRF9QUjMgPSAweDQyLAorIEhJTF9DTURfUFI0ID0gMHg0MywKKyBISUxfQ01EX1BSNSA9IDB4NDQsCisgSElMX0NNRF9QUjYgPSAweDQ1LAorIEhJTF9DTURfUFI3ID0gMHg0NiwKKyBISUxfQ01EX1BSTSA9IDB4NDcsCisgSElMX0NNRF9BSzEgPSAweDQ4LAorIEhJTF9DTURfQUsyID0gMHg0OSwKKyBISUxfQ01EX0FLMyA9IDB4NGEsCisgSElMX0NNRF9BSzQgPSAweDRiLAorIEhJTF9DTURfQUs1ID0gMHg0YywKKyBISUxfQ01EX0FLNiA9IDB4NGQsCisgSElMX0NNRF9BSzcgPSAweDRlLAorIEhJTF9DTURfQUNLID0gMHg0ZiwKKworIEhJTF9DTURfUklPID0gMHhmYSwKKyBISUxfQ01EX1NIUiA9IDB4ZmIsCisgSElMX0NNRF9URVIgPSAweGZjLAorIEhJTF9DTURfQ0FFID0gMHhmZCwKKyBISUxfQ01EX0RIUiA9IDB4ZmUsCisKK307CisKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9NQVNLIDB4ZTAgIAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0lOVEVHUkFMIDB4YTAgIAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0lURiAweGMwICAKKyNkZWZpbmUgSElMX0lERF9ESURfVFlQRV9LQl9SU1ZEIDB4ZTAgIAorI2RlZmluZSBISUxfSUREX0RJRF9UWVBFX0tCX0xBTkdfTUFTSyAweDFmICAKKyNkZWZpbmUgSElMX0lERF9ESURfS0JMQU5HX1VTRV9FU0QgMHgwMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfQUJTIDB4ODAgIAorI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDFfTUFTSyAweGY4ICAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQxIDB4OTgKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1RBQkxFVF9NQVNLIDB4ZjggIAorI2RlZmluZSBISUxfSUREX0RJRF9BQlNfVEFCTEVUIDB4OTAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1RTQ1JFRU5fTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1RTQ1JFRU4gMHg4YworI2RlZmluZSBISUxfSUREX0RJRF9BQlNfUlNWRDJfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQyIDB4ODgKKyNkZWZpbmUgSElMX0lERF9ESURfQUJTX1JTVkQzX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0FCU19SU1ZEMyAweDgwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfUkVMIDB4NjAgIAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUlNWRDFfTUFTSyAweGYwICAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1JTVkQxIDB4NzAKKyNkZWZpbmUgSElMX0lERF9ESURfUkVMX1JTVkQyX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9SU1ZEMiAweDZjCisjZGVmaW5lIEhJTF9JRERfRElEX1JFTF9NT1VTRV9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfTU9VU0UgMHg2OAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUVVBRF9NQVNLIDB4ZjggIAorI2RlZmluZSBISUxfSUREX0RJRF9SRUxfUVVBRCAweDYwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfQ0hBUiAweDQwICAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9CQVJDT0RFX01BU0sgMHhmYyAgCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfQkFSQ09ERSAweDVjCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDFfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMSAweDU4CisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDJfTUFTSyAweGY4ICAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMiAweDUwCisjZGVmaW5lIEhJTF9JRERfRElEX0NIQVJfUlNWRDNfTUFTSyAweGYwICAKKyNkZWZpbmUgSElMX0lERF9ESURfQ0hBUl9SU1ZEMyAweDQwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfT1RIRVIgMHgyMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQxX01BU0sgMHhmMCAgCisjZGVmaW5lIEhJTF9JRERfRElEX09USEVSX1JTVkQxIDB4MzAKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfQkFSQ09ERV9NQVNLIDB4ZmMgIAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9CQVJDT0RFIDB4MmMKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDJfTUFTSyAweGZjICAKKyNkZWZpbmUgSElMX0lERF9ESURfT1RIRVJfUlNWRDIgMHgyOAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEM19NQVNLIDB4ZjggIAorI2RlZmluZSBISUxfSUREX0RJRF9PVEhFUl9SU1ZEMyAweDIwCisjZGVmaW5lIEhJTF9JRERfRElEX1RZUEVfS0VZUEFEIDB4MDAgIAorCisjZGVmaW5lIEhJTF9JRERfSEVBREVSX0FYU0VUX01BU0sgMHgwMyAgCisjZGVmaW5lIEhJTF9JRERfSEVBREVSX1JTQyAweDA0ICAKKyNkZWZpbmUgSElMX0lERF9IRUFERVJfRVhEIDB4MDggIAorI2RlZmluZSBISUxfSUREX0hFQURFUl9JT0QgMHgxMCAgCisjZGVmaW5lIEhJTF9JRERfSEVBREVSXzE2QklUIDB4MjAgIAorI2RlZmluZSBISUxfSUREX0hFQURFUl9BQlMgMHg0MCAgCisjZGVmaW5lIEhJTF9JRERfSEVBREVSXzJYX0FYSVMgMHg4MCAgCisKKyNkZWZpbmUgSElMX0lERF9JT0RfTkJVVFRPTl9NQVNLIDB4MDcgIAorI2RlZmluZSBISUxfSUREX0lPRF9QUk9YSU1JVFkgMHgwOCAgCisjZGVmaW5lIEhJTF9JRERfSU9EX1BST01QVF9NQVNLIDB4NzAgIAorI2RlZmluZSBISUxfSUREX0lPRF9QUk9NUFRfU0hJRlQgNAorI2RlZmluZSBISUxfSUREX0lPRF9QUk9NUFQgMHg4MCAgCisKKyNkZWZpbmUgSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKGhlYWRlcl9wYWNrZXQpICAoKGhlYWRlcl9wYWNrZXQpICYgSElMX0lERF9IRUFERVJfQVhTRVRfTUFTSykKKworI2RlZmluZSBISUxfSUREX05VTV9BWFNFVFMoaGVhZGVyX3BhY2tldCkgICgyIC0gISgoaGVhZGVyX3BhY2tldCkgJiBISUxfSUREX0hFQURFUl8yWF9BWElTKSkKKworI2RlZmluZSBISUxfSUREX0xFTihoZWFkZXJfcGFja2V0KSAgKCg0IC0gIShoZWFkZXJfcGFja2V0ICYgSElMX0lERF9IRUFERVJfSU9EKSAtICAgMiAqICEoSElMX0lERF9OVU1fQVhFU19QRVJfU0VUKGhlYWRlcl9wYWNrZXQpKSkgKyAgIDIgKiBISUxfSUREX05VTV9BWEVTX1BFUl9TRVQoaGVhZGVyX3BhY2tldCkgKiAgICEhKChoZWFkZXJfcGFja2V0KSAmIEhJTF9JRERfSEVBREVSX0FCUykpCisKKyNkZWZpbmUgSElMX0lERF9BWElTX0NPVU5UU19QRVJfTShoZWFkZXJfcHRyKSAgKCEoSElMX0lERF9OVU1fQVhTRVRTKCooaGVhZGVyX3B0cikpKSA/IC0xIDogICgoKCooaGVhZGVyX3B0ciArIDEpICYgSElMX1BLVF9EQVRBX01BU0spICsgICAoKCooaGVhZGVyX3B0ciArIDIpICYgSElMX1BLVF9EQVRBX01BU0spKSA8PCA4KSAgKiAoKCooaGVhZGVyX3B0cikgJiBISUxfSUREX0hFQURFUl8xNkJJVCkgPyAxMDAgOiAxKSkpCisKKyNkZWZpbmUgSElMX0lERF9BWElTX01BWChoZWFkZXJfcHRyLCBfX2F4bnVtKSAgKCghKCooaGVhZGVyX3B0cikgJiBISUxfSUREX0hFQURFUl9BQlMpIHx8ICAgKEhJTF9JRERfTlVNX0FYRVNfUEVSX1NFVCgqKGhlYWRlcl9wdHIpKSA8PSBfX2F4bnVtKSkgPyAwIDogICAoKEhJTF9QS1RfREFUQV9NQVNLICYgKigoaGVhZGVyX3B0cikgKyAzICsgMiAqIF9fYXhudW0pKSArICAgKChISUxfUEtUX0RBVEFfTUFTSyAmICooKGhlYWRlcl9wdHIpICsgNCArIDIgKiBfX2F4bnVtKSkgPDwgOCkpKQorCisjZGVmaW5lIEhJTF9JRERfSU9EKGhlYWRlcl9wdHIpICAoKihoZWFkZXJfcHRyICsgSElMX0lERF9MRU4oKCpoZWFkZXJfcHRyKSkgLSAxKSkKKworI2RlZmluZSBISUxfSUREX0hBU19HRU5fUFJPTVBUKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0lERF9IRUFERVJfSU9EKSAmJiAgIChISUxfSUREX0lPRChoZWFkZXJfcHRyKSAmIEhJTF9JRERfSU9EX1BST01QVCkpCisKKyNkZWZpbmUgSElMX0lERF9IQVNfR0VOX1BST1hJTUlUWShoZWFkZXJfcHRyKSAgKCgqaGVhZGVyX3B0ciAmIEhJTF9JRERfSEVBREVSX0lPRCkgJiYgICAoSElMX0lERF9JT0QoaGVhZGVyX3B0cikgJiBISUxfSUREX0lPRF9QUk9YSU1JVFkpKQorCisjZGVmaW5lIEhJTF9JRERfTlVNX0JVVFRPTlMoaGVhZGVyX3B0cikgICgoKmhlYWRlcl9wdHIgJiBISUxfSUREX0hFQURFUl9JT0QpID8gICAoSElMX0lERF9JT0QoaGVhZGVyX3B0cikgJiBISUxfSUREX0lPRF9OQlVUVE9OX01BU0spIDogMCkKKworI2RlZmluZSBISUxfSUREX05VTV9QUk9NUFRTKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0lERF9IRUFERVJfSU9EKSA/ICAgKChISUxfSUREX0lPRChoZWFkZXJfcHRyKSAmIEhJTF9JRERfSU9EX05QUk9NUFRfTUFTSykgICA+PiBISUxfSUREX0lPRF9QUk9NUFRfU0hJRlQpIDogMCkKKworI2RlZmluZSBISUxfRVhEX0hFQURFUl9XUkcgMHgwMyAgCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX1dSR19UWVBFMSAweDAxICAKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfV1JHX1RZUEUyIDB4MDIgIAorI2RlZmluZSBISUxfRVhEX0hFQURFUl9SUkcgMHgwNCAgCisjZGVmaW5lIEhJTF9FWERfSEVBREVSX1JOTSAweDEwICAKKyNkZWZpbmUgSElMX0VYRF9IRUFERVJfUlNUIDB4MjAgIAorI2RlZmluZSBISUxfRVhEX0hFQURFUl9MT0NBTEUgMHg0MCAgCisKKyNkZWZpbmUgSElMX0VYRF9OVU1fUlJHKGhlYWRlcl9wdHIpICAoKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfUlJHKSA/ICAgKCooaGVhZGVyX3B0ciArIDEpICYgSElMX1BLVF9EQVRBX01BU0spIDogMCkKKworI2RlZmluZSBISUxfRVhEX05VTV9XV0coaGVhZGVyX3B0cikgICgoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9XUkcpID8gICAoKihoZWFkZXJfcHRyICsgMiAtICEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9SUkcpKSAmICAgSElMX1BLVF9EQVRBX01BU0spIDogMCkKKworI2RlZmluZSBISUxfRVhEX0xFTihoZWFkZXJfcHRyKSAgKCEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfUlJHKSArICAgISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9XUkcpICsgICAhISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX0xPQ0FMRSkgKyAgIDIgKiAhISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1dSR19UWVBFMikgKyAxKQorCisjZGVmaW5lIEhJTF9FWERfTE9DQUxFKGhlYWRlcl9wdHIpICAoISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX0xPQ0FMRSkgPyAtMSA6ICAgKCooaGVhZGVyX3B0ciArIEhJTF9FWERfTEVOKGhlYWRlcl9wdHIpIC0gMSkgJiBISUxfUEtUX0RBVEFfTUFTSykpCisKKyNkZWZpbmUgSElMX0VYRF9XUkdfVFlQRTJfTEVOKGhlYWRlcl9wdHIpICAoISgqaGVhZGVyX3B0ciAmIEhJTF9FWERfSEVBREVSX1dSR19UWVBFMikgPyAtMSA6ICAgKCooaGVhZGVyX3B0ciArIEhJTF9FWERfTEVOKGhlYWRlcl9wdHIpIC0gMiAtICAgISEoKmhlYWRlcl9wdHIgJiBISUxfRVhEX0hFQURFUl9MT0NBTEUpKSAmIEhJTF9QS1RfREFUQV9NQVNLKSArICAgKCgqKGhlYWRlcl9wdHIgKyBISUxfRVhEX0xFTihoZWFkZXJfcHRyKSAtIDEgLSAgICEhKCpoZWFkZXJfcHRyICYgSElMX0VYRF9IRUFERVJfTE9DQUxFKSkgJiBISUxfUEtUX0RBVEFfTUFTSykgPDwgOCkpCisKKyNkZWZpbmUgSElMX0xPQ0FMRV9NQVggMHgxZgorCisjZGVmaW5lIEhJTF9MT0NBTEVfTUFQICAiIiwgICAgIiIsICAgICIiLCAgICAic3dpc3MuZnJlbmNoIiwgICAgInBvcnR1Z3Vlc2UiLCAgICAiYXJhYmljIiwgICAgImhlYnJldyIsICAgICJlbmdsaXNoLmNhbmFkaWFuIiwgICAgInR1cmtpc2giLCAgICAiZ3JlZWsiLCAgICAidGhhaSIsICAgICJpdGFsaWFuIiwgICAgImtvcmVhbiIsICAgICJkdXRjaCIsICAgICJzd2VkaXNoIiwgICAgImdlcm1hbiIsICAgICJjaGluZXNlIiwgICAgImNoaW5lc2UiLCAgICAic3dpc3MuZnJlbmNoIiwgICAgInNwYW5pc2giLCAgICAic3dpc3MuZ2VybWFuIiwgICAgImZsZW1pc2giLCAgICAiZmlubmlzaCIsICAgICJlbmdsaXNoLnVrIiwgICAgImZyZW5jaC5jYW5hZGlhbiIsICAgICJzd2lzcy5nZXJtYW4iLCAgICAibm9yd2VnaWFuIiwgICAgImZyZW5jaCIsICAgICJkYW5pc2giLCAgICAiamFwYW5lc2UiLCAgICAic3BhbmlzaCIsICAgImVuZ2xpc2gudXMiICAgIAorCisjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQxX1RCTFNJWkUgMTI4CisjZGVmaW5lIEhJTF9LRVlDT0RFU19TRVQxICAgS0VZXzUsIEtFWV9SRVNFUlZFRCwgS0VZX1JJR0hUQUxULCBLRVlfTEVGVEFMVCwgICBLRVlfUklHSFRTSElGVCwgS0VZX0xFRlRTSElGVCwgS0VZX0xFRlRDVFJMLCBLRVlfU1lTUlEsICAgS0VZX0tQNCwgS0VZX0tQOCwgS0VZX0tQNSwgS0VZX0tQOSwgICBLRVlfS1A2LCBLRVlfS1A3LCBLRVlfS1BDT01NQSwgS0VZX0tQRU5URVIsICAgS0VZX0tQMSwgS0VZX0tQU0xBU0gsIEtFWV9LUDIsIEtFWV9LUFBMVVMsICAgS0VZX0tQMywgS0VZX0tQQVNURVJJU0ssIEtFWV9LUDAsIEtFWV9LUE1JTlVTLCAgIEtFWV9CLCBLRVlfViwgS0VZX0MsIEtFWV9YLCAgIEtFWV9aLCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX0VTQywgICBLRVlfNiwgS0VZX0YxMCwgS0VZXzMsIEtFWV9GMTEsICAgS0VZX0tQRE9ULCBLRVlfRjksIEtFWV9UQUIgICwgS0VZX0YxMiwgICBLRVlfSCwgS0VZX0csIEtFWV9GLCBLRVlfRCwgICBLRVlfUywgS0VZX0EsIEtFWV9SRVNFUlZFRCwgS0VZX0NBUFNMT0NLLCAgIEtFWV9VLCBLRVlfWSwgS0VZX1QsIEtFWV9SLCAgIEtFWV9FLCBLRVlfVywgS0VZX1EsIEtFWV9UQUIsICAgS0VZXzcsIEtFWV82LCBLRVlfNSwgS0VZXzQsICAgS0VZXzMsIEtFWV8yLCBLRVlfMSwgS0VZX0dSQVZFLCAgIEtFWV9GMTMsIEtFWV9GMTQsIEtFWV9GMTUsIEtFWV9GMTYsICAgS0VZX0YxNywgS0VZX0YxOCwgS0VZX0YxOSwgS0VZX0YyMCwgICBLRVlfTUVOVSwgS0VZX0Y0LCBLRVlfRjMsIEtFWV9GMiwgICBLRVlfRjEsIEtFWV9WT0xVTUVVUCwgS0VZX1NUT1AsIEtFWV9TRU5ERklMRSwgICBLRVlfU1lTUlEsIEtFWV9GNSwgS0VZX0Y2LCBLRVlfRjcsICAgS0VZX0Y4LCBLRVlfVk9MVU1FRE9XTiwgS0VZX0RFTF9FT0wsIEtFWV9ERUxfRU9TLCAgIEtFWV84LCBLRVlfOSwgS0VZXzAsIEtFWV9NSU5VUywgICBLRVlfRVFVQUwsIEtFWV9CQUNLU1BBQ0UsIEtFWV9JTlNfTElORSwgS0VZX0RFTF9MSU5FLCAgIEtFWV9JLCBLRVlfTywgS0VZX1AsIEtFWV9MRUZUQlJBQ0UsICAgS0VZX1JJR0hUQlJBQ0UsIEtFWV9CQUNLU0xBU0gsIEtFWV9JTlNFUlQsIEtFWV9ERUxFVEUsICAgS0VZX0osIEtFWV9LLCBLRVlfTCwgS0VZX1NFTUlDT0xPTiwgICBLRVlfQVBPU1RST1BIRSwgS0VZX0VOVEVSLCBLRVlfSE9NRSwgS0VZX1BBR0VVUCwgICBLRVlfTSwgS0VZX0NPTU1BLCBLRVlfRE9ULCBLRVlfU0xBU0gsICAgS0VZX0JBQ0tTTEFTSCwgS0VZX1NFTEVDVCwgS0VZXzEwMk5ELCBLRVlfUEFHRURPV04sICAgS0VZX04sIEtFWV9TUEFDRSwgS0VZX05FWFQsIEtFWV9SRVNFUlZFRCwgICBLRVlfTEVGVCwgS0VZX0RPV04sIEtFWV9VUCwgS0VZX1JJR0hUCisKKyNkZWZpbmUgSElMX0tFWUNPREVTX1NFVDNfVEJMU0laRSAxMjgKKyNkZWZpbmUgSElMX0tFWUNPREVTX1NFVDMgICBLRVlfUkVTRVJWRUQsIEtFWV9FU0MsIEtFWV8xLCBLRVlfMiwgICBLRVlfMywgS0VZXzQsIEtFWV81LCBLRVlfNiwgICBLRVlfNywgS0VZXzgsIEtFWV85LCBLRVlfMCwgICBLRVlfTUlOVVMsIEtFWV9FUVVBTCwgS0VZX0JBQ0tTUEFDRSwgS0VZX1RBQiwgICBLRVlfUSwgS0VZX1csIEtFWV9FLCBLRVlfUiwgICBLRVlfVCwgS0VZX1ksIEtFWV9VLCBLRVlfSSwgICBLRVlfTywgS0VZX1AsIEtFWV9MRUZUQlJBQ0UsIEtFWV9SSUdIVEJSQUNFLCAgIEtFWV9FTlRFUiwgS0VZX0xFRlRDVFJMLCBLRVlfQSwgS0VZX1MsICAgS0VZX0QsIEtFWV9GLCBLRVlfRywgS0VZX0gsICAgS0VZX0osIEtFWV9LLCBLRVlfTCwgS0VZX1NFTUlDT0xPTiwgICBLRVlfQVBPU1RST1BIRSxLRVlfR1JBVkUsIEtFWV9MRUZUU0hJRlQsIEtFWV9CQUNLU0xBU0gsICAgS0VZX1osIEtFWV9YLCBLRVlfQywgS0VZX1YsICAgS0VZX0IsIEtFWV9OLCBLRVlfTSwgS0VZX0NPTU1BLCAgIEtFWV9ET1QsIEtFWV9TTEFTSCwgS0VZX1JJR0hUU0hJRlQsIEtFWV9LUEFTVEVSSVNLLCAgIEtFWV9MRUZUQUxULCBLRVlfU1BBQ0UsIEtFWV9DQVBTTE9DSywgS0VZX0YxLCAgIEtFWV9GMiwgS0VZX0YzLCBLRVlfRjQsIEtFWV9GNSwgICBLRVlfRjYsIEtFWV9GNywgS0VZX0Y4LCBLRVlfRjksICAgS0VZX0YxMCwgS0VZX05VTUxPQ0ssIEtFWV9TQ1JPTExMT0NLLCBLRVlfS1A3LCAgIEtFWV9LUDgsIEtFWV9LUDksIEtFWV9LUE1JTlVTLCBLRVlfS1A0LCAgIEtFWV9LUDUsIEtFWV9LUDYsIEtFWV9LUFBMVVMsIEtFWV9LUDEsICAgS0VZX0tQMiwgS0VZX0tQMywgS0VZX0tQMCwgS0VZX0tQRE9ULCAgIEtFWV9TWVNSUSwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgICBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCAgIEtFWV9VUCwgS0VZX0xFRlQsIEtFWV9ET1dOLCBLRVlfUklHSFQsICAgS0VZX0hPTUUsIEtFWV9QQUdFVVAsIEtFWV9FTkQsIEtFWV9QQUdFRE9XTiwgICBLRVlfSU5TRVJULCBLRVlfREVMRVRFLCBLRVlfMTAyTkQsIEtFWV9SRVNFUlZFRCwgICBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsICAgS0VZX0YxLCBLRVlfRjIsIEtFWV9GMywgS0VZX0Y0LCAgIEtFWV9GNSwgS0VZX0Y2LCBLRVlfRjcsIEtFWV9GOCwgICBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsICAgS0VZX1JFU0VSVkVELCBLRVlfUkVTRVJWRUQsIEtFWV9SRVNFUlZFRCwgS0VZX1JFU0VSVkVECisKKyNkZWZpbmUgSElMX1BPTF9OVU1fQVhFU19NQVNLIDB4MDMgIAorI2RlZmluZSBISUxfUE9MX0NUUyAweDA0ICAKKyNkZWZpbmUgSElMX1BPTF9TVEFUVVNfUEVORElORyAweDA4ICAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9NQVNLIDB4NzAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX05PTkUgMHgwMCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfUlNWRDEgMHgxMCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfQVNDSUkgMHgyMCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfQklOQVJZIDB4MzAgIAorI2RlZmluZSBISUxfUE9MX0NIQVJUWVBFX1NFVDEgMHg0MCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfUlNWRDIgMHg1MCAgCisjZGVmaW5lIEhJTF9QT0xfQ0hBUlRZUEVfU0VUMiAweDYwICAKKyNkZWZpbmUgSElMX1BPTF9DSEFSVFlQRV9TRVQzIDB4NzAgIAorI2RlZmluZSBISUxfUE9MX0FYSVNfQUxUIDB4ODAgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pMmMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pMmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NTEzZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2kyYy5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0kyQ19ICisjZGVmaW5lIF9MSU5VWF9JMkNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGkyY19tc2cgeworIF9fdTE2IGFkZHI7CisgX191MTYgZmxhZ3M7CisjZGVmaW5lIEkyQ19NX1RFTiAweDEwICAKKyNkZWZpbmUgSTJDX01fUkQgMHgwMQorI2RlZmluZSBJMkNfTV9OT1NUQVJUIDB4NDAwMAorI2RlZmluZSBJMkNfTV9SRVZfRElSX0FERFIgMHgyMDAwCisjZGVmaW5lIEkyQ19NX0lHTk9SRV9OQUsgMHgxMDAwCisjZGVmaW5lIEkyQ19NX05PX1JEX0FDSyAweDA4MDAKKyBfX3UxNiBsZW47CisgX191OCAqYnVmOworfTsKKworI2RlZmluZSBJMkNfRlVOQ19JMkMgMHgwMDAwMDAwMQorI2RlZmluZSBJMkNfRlVOQ18xMEJJVF9BRERSIDB4MDAwMDAwMDIKKyNkZWZpbmUgSTJDX0ZVTkNfUFJPVE9DT0xfTUFOR0xJTkcgMHgwMDAwMDAwNCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0hXUEVDX0NBTEMgMHgwMDAwMDAwOCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0JMT0NLX1BST0NfQ0FMTCAweDAwMDA4MDAwICAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUVVJQ0sgMHgwMDAxMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIDB4MDAwMjAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JZVEUgMHgwMDA0MDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFX0RBVEEgMHgwMDA4MDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQllURV9EQVRBIDB4MDAxMDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1JFQURfV09SRF9EQVRBIDB4MDAyMDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQSAweDAwNDAwMDAwIAorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19QUk9DX0NBTEwgMHgwMDgwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBIDB4MDEwMDAwMDAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0JMT0NLX0RBVEEgMHgwMjAwMDAwMCAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0sgMHgwNDAwMDAwMCAgCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dSSVRFX0kyQ19CTE9DSyAweDA4MDAwMDAwICAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfUkVBRF9JMkNfQkxPQ0tfMiAweDEwMDAwMDAwICAKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfV1JJVEVfSTJDX0JMT0NLXzIgMHgyMDAwMDAwMCAgCisKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQllURSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CWVRFIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEgKEkyQ19GVU5DX1NNQlVTX1JFQURfQllURV9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CWVRFX0RBVEEpCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX1dPUkRfREFUQSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9XT1JEX0RBVEEgfCAgIEkyQ19GVU5DX1NNQlVTX1dSSVRFX1dPUkRfREFUQSkKKyNkZWZpbmUgSTJDX0ZVTkNfU01CVVNfQkxPQ0tfREFUQSAoSTJDX0ZVTkNfU01CVVNfUkVBRF9CTE9DS19EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9CTE9DS19EQVRBKQorI2RlZmluZSBJMkNfRlVOQ19TTUJVU19JMkNfQkxPQ0sgKEkyQ19GVU5DX1NNQlVTX1JFQURfSTJDX0JMT0NLIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0spCisjZGVmaW5lIEkyQ19GVU5DX1NNQlVTX0kyQ19CTE9DS18yIChJMkNfRlVOQ19TTUJVU19SRUFEX0kyQ19CTE9DS18yIHwgICBJMkNfRlVOQ19TTUJVU19XUklURV9JMkNfQkxPQ0tfMikKKworI2RlZmluZSBJMkNfRlVOQ19TTUJVU19FTVVMIChJMkNfRlVOQ19TTUJVU19RVUlDSyB8ICAgSTJDX0ZVTkNfU01CVVNfQllURSB8ICAgSTJDX0ZVTkNfU01CVVNfQllURV9EQVRBIHwgICBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEgfCAgIEkyQ19GVU5DX1NNQlVTX1BST0NfQ0FMTCB8ICAgSTJDX0ZVTkNfU01CVVNfV1JJVEVfQkxPQ0tfREFUQSB8ICAgSTJDX0ZVTkNfU01CVVNfSTJDX0JMT0NLKQorCisjZGVmaW5lIEkyQ19TTUJVU19CTE9DS19NQVggMzIgICAKK3VuaW9uIGkyY19zbWJ1c19kYXRhIHsKKyBfX3U4IGJ5dGU7CisgX191MTYgd29yZDsKKyBfX3U4IGJsb2NrW0kyQ19TTUJVU19CTE9DS19NQVggKyAyXTsKKworfTsKKworI2RlZmluZSBJMkNfU01CVVNfUkVBRCAxCisjZGVmaW5lIEkyQ19TTUJVU19XUklURSAwCisKKyNkZWZpbmUgSTJDX1NNQlVTX1FVSUNLIDAKKyNkZWZpbmUgSTJDX1NNQlVTX0JZVEUgMQorI2RlZmluZSBJMkNfU01CVVNfQllURV9EQVRBIDIgCisjZGVmaW5lIEkyQ19TTUJVU19XT1JEX0RBVEEgMworI2RlZmluZSBJMkNfU01CVVNfUFJPQ19DQUxMIDQKKyNkZWZpbmUgSTJDX1NNQlVTX0JMT0NLX0RBVEEgNQorI2RlZmluZSBJMkNfU01CVVNfSTJDX0JMT0NLX0RBVEEgNgorI2RlZmluZSBJMkNfU01CVVNfQkxPQ0tfUFJPQ19DQUxMIDcgIAorCisjZGVmaW5lIEkyQ19SRVRSSUVTIDB4MDcwMSAgCisKKyNkZWZpbmUgSTJDX1RJTUVPVVQgMHgwNzAyICAKKworI2RlZmluZSBJMkNfU0xBVkUgMHgwNzAzICAKKworI2RlZmluZSBJMkNfU0xBVkVfRk9SQ0UgMHgwNzA2ICAKKworI2RlZmluZSBJMkNfVEVOQklUIDB4MDcwNCAgCisKKyNkZWZpbmUgSTJDX0ZVTkNTIDB4MDcwNSAgCisjZGVmaW5lIEkyQ19SRFdSIDB4MDcwNyAgCisjZGVmaW5lIEkyQ19QRUMgMHgwNzA4ICAKKworI2RlZmluZSBJMkNfU01CVVMgMHgwNzIwICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWNtcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ljbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNWI1OGJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ljbXAuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JQ01QX0gKKyNkZWZpbmUgX0xJTlVYX0lDTVBfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBJQ01QX0VDSE9SRVBMWSAwICAKKyNkZWZpbmUgSUNNUF9ERVNUX1VOUkVBQ0ggMyAgCisjZGVmaW5lIElDTVBfU09VUkNFX1FVRU5DSCA0ICAKKyNkZWZpbmUgSUNNUF9SRURJUkVDVCA1ICAKKyNkZWZpbmUgSUNNUF9FQ0hPIDggIAorI2RlZmluZSBJQ01QX1RJTUVfRVhDRUVERUQgMTEgIAorI2RlZmluZSBJQ01QX1BBUkFNRVRFUlBST0IgMTIgIAorI2RlZmluZSBJQ01QX1RJTUVTVEFNUCAxMyAgCisjZGVmaW5lIElDTVBfVElNRVNUQU1QUkVQTFkgMTQgIAorI2RlZmluZSBJQ01QX0lORk9fUkVRVUVTVCAxNSAgCisjZGVmaW5lIElDTVBfSU5GT19SRVBMWSAxNiAgCisjZGVmaW5lIElDTVBfQUREUkVTUyAxNyAgCisjZGVmaW5lIElDTVBfQUREUkVTU1JFUExZIDE4ICAKKyNkZWZpbmUgTlJfSUNNUF9UWVBFUyAxOAorCisjZGVmaW5lIElDTVBfTkVUX1VOUkVBQ0ggMCAgCisjZGVmaW5lIElDTVBfSE9TVF9VTlJFQUNIIDEgIAorI2RlZmluZSBJQ01QX1BST1RfVU5SRUFDSCAyICAKKyNkZWZpbmUgSUNNUF9QT1JUX1VOUkVBQ0ggMyAgCisjZGVmaW5lIElDTVBfRlJBR19ORUVERUQgNCAgCisjZGVmaW5lIElDTVBfU1JfRkFJTEVEIDUgIAorI2RlZmluZSBJQ01QX05FVF9VTktOT1dOIDYKKyNkZWZpbmUgSUNNUF9IT1NUX1VOS05PV04gNworI2RlZmluZSBJQ01QX0hPU1RfSVNPTEFURUQgOAorI2RlZmluZSBJQ01QX05FVF9BTk8gOQorI2RlZmluZSBJQ01QX0hPU1RfQU5PIDEwCisjZGVmaW5lIElDTVBfTkVUX1VOUl9UT1MgMTEKKyNkZWZpbmUgSUNNUF9IT1NUX1VOUl9UT1MgMTIKKyNkZWZpbmUgSUNNUF9QS1RfRklMVEVSRUQgMTMgIAorI2RlZmluZSBJQ01QX1BSRUNfVklPTEFUSU9OIDE0ICAKKyNkZWZpbmUgSUNNUF9QUkVDX0NVVE9GRiAxNSAgCisjZGVmaW5lIE5SX0lDTVBfVU5SRUFDSCAxNSAgCisKKyNkZWZpbmUgSUNNUF9SRURJUl9ORVQgMCAgCisjZGVmaW5lIElDTVBfUkVESVJfSE9TVCAxICAKKyNkZWZpbmUgSUNNUF9SRURJUl9ORVRUT1MgMiAgCisjZGVmaW5lIElDTVBfUkVESVJfSE9TVFRPUyAzICAKKworI2RlZmluZSBJQ01QX0VYQ19UVEwgMCAgCisjZGVmaW5lIElDTVBfRVhDX0ZSQUdUSU1FIDEgIAorCitzdHJ1Y3QgaWNtcGhkciB7CisgX191OCB0eXBlOworIF9fdTggY29kZTsKKyBfX3UxNiBjaGVja3N1bTsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyBfX3UxNiBpZDsKKyBfX3UxNiBzZXF1ZW5jZTsKKyB9IGVjaG87CisgX191MzIgZ2F0ZXdheTsKKyBzdHJ1Y3QgeworIF9fdTE2IF9fdW51c2VkX2ZpZWxkOworIF9fdTE2IG10dTsKKyB9IGZyYWc7CisgfSB1bjsKK307CisKKyNkZWZpbmUgSUNNUF9GSUxURVIgMQorCitzdHJ1Y3QgaWNtcF9maWx0ZXIgeworIF9fdTMyIGRhdGE7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDdjMjlkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZi5oCkBAIC0wLDAgKzEsMTc2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9ICisjZGVmaW5lIF9MSU5VWF9JRl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPiAgCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+ICAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAgCisKKyNkZWZpbmUgSUZOQU1TSVogMTYKKyNpbmNsdWRlIDxsaW51eC9oZGxjL2lvY3RsLmg+CisKKyNkZWZpbmUgSUZGX1VQIDB4MSAgCisjZGVmaW5lIElGRl9CUk9BRENBU1QgMHgyICAKKyNkZWZpbmUgSUZGX0RFQlVHIDB4NCAgCisjZGVmaW5lIElGRl9MT09QQkFDSyAweDggIAorI2RlZmluZSBJRkZfUE9JTlRPUE9JTlQgMHgxMCAgCisjZGVmaW5lIElGRl9OT1RSQUlMRVJTIDB4MjAgIAorI2RlZmluZSBJRkZfUlVOTklORyAweDQwICAKKyNkZWZpbmUgSUZGX05PQVJQIDB4ODAgIAorI2RlZmluZSBJRkZfUFJPTUlTQyAweDEwMCAgCisjZGVmaW5lIElGRl9BTExNVUxUSSAweDIwMCAgCisKKyNkZWZpbmUgSUZGX01BU1RFUiAweDQwMCAgCisjZGVmaW5lIElGRl9TTEFWRSAweDgwMCAgCisKKyNkZWZpbmUgSUZGX01VTFRJQ0FTVCAweDEwMDAgIAorCisjZGVmaW5lIElGRl9QT1JUU0VMIDB4MjAwMCAgCisjZGVmaW5lIElGRl9BVVRPTUVESUEgMHg0MDAwICAKKyNkZWZpbmUgSUZGX0RZTkFNSUMgMHg4MDAwICAKKworI2RlZmluZSBJRkZfTE9XRVJfVVAgMHgxMDAwMCAgCisjZGVmaW5lIElGRl9ET1JNQU5UIDB4MjAwMDAgIAorCisjZGVmaW5lIElGRl9WT0xBVElMRSAoSUZGX0xPT1BCQUNLfElGRl9QT0lOVE9QT0lOVHxJRkZfQlJPQURDQVNUfCAgSUZGX01BU1RFUnxJRkZfU0xBVkV8SUZGX1JVTk5JTkd8SUZGX0xPV0VSX1VQfElGRl9ET1JNQU5UKQorCisjZGVmaW5lIElGRl84MDJfMVFfVkxBTiAweDEgIAorI2RlZmluZSBJRkZfRUJSSURHRSAweDIgIAorI2RlZmluZSBJRkZfU0xBVkVfSU5BQ1RJVkUgMHg0ICAKKyNkZWZpbmUgSUZGX01BU1RFUl84MDIzQUQgMHg4ICAKKyNkZWZpbmUgSUZGX01BU1RFUl9BTEIgMHgxMCAgCisKKyNkZWZpbmUgSUZfR0VUX0lGQUNFIDB4MDAwMSAgCisjZGVmaW5lIElGX0dFVF9QUk9UTyAweDAwMDIKKworI2RlZmluZSBJRl9JRkFDRV9WMzUgMHgxMDAwICAKKyNkZWZpbmUgSUZfSUZBQ0VfVjI0IDB4MTAwMSAgCisjZGVmaW5lIElGX0lGQUNFX1gyMSAweDEwMDIgIAorI2RlZmluZSBJRl9JRkFDRV9UMSAweDEwMDMgIAorI2RlZmluZSBJRl9JRkFDRV9FMSAweDEwMDQgIAorI2RlZmluZSBJRl9JRkFDRV9TWU5DX1NFUklBTCAweDEwMDUgIAorI2RlZmluZSBJRl9JRkFDRV9YMjFEIDB4MTAwNiAgCisKKyNkZWZpbmUgSUZfUFJPVE9fSERMQyAweDIwMDAgIAorI2RlZmluZSBJRl9QUk9UT19QUFAgMHgyMDAxICAKKyNkZWZpbmUgSUZfUFJPVE9fQ0lTQ08gMHgyMDAyICAKKyNkZWZpbmUgSUZfUFJPVE9fRlIgMHgyMDAzICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfQUREX1BWQyAweDIwMDQgIAorI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfUFZDIDB4MjAwNSAgCisjZGVmaW5lIElGX1BST1RPX1gyNSAweDIwMDYgIAorI2RlZmluZSBJRl9QUk9UT19IRExDX0VUSCAweDIwMDcgIAorI2RlZmluZSBJRl9QUk9UT19GUl9BRERfRVRIX1BWQyAweDIwMDggIAorI2RlZmluZSBJRl9QUk9UT19GUl9ERUxfRVRIX1BWQyAweDIwMDkgIAorI2RlZmluZSBJRl9QUk9UT19GUl9QVkMgMHgyMDBBICAKKyNkZWZpbmUgSUZfUFJPVE9fRlJfRVRIX1BWQyAweDIwMEIKKyNkZWZpbmUgSUZfUFJPVE9fUkFXIDB4MjAwQyAgCisKK2VudW0geworIElGX09QRVJfVU5LTk9XTiwKKyBJRl9PUEVSX05PVFBSRVNFTlQsCisgSUZfT1BFUl9ET1dOLAorIElGX09QRVJfTE9XRVJMQVlFUkRPV04sCisgSUZfT1BFUl9URVNUSU5HLAorIElGX09QRVJfRE9STUFOVCwKKyBJRl9PUEVSX1VQLAorfTsKKworZW51bSB7CisgSUZfTElOS19NT0RFX0RFRkFVTFQsCisgSUZfTElOS19NT0RFX0RPUk1BTlQsCit9OworCitzdHJ1Y3QgaWZtYXAKK3sKKyB1bnNpZ25lZCBsb25nIG1lbV9zdGFydDsKKyB1bnNpZ25lZCBsb25nIG1lbV9lbmQ7CisgdW5zaWduZWQgc2hvcnQgYmFzZV9hZGRyOworIHVuc2lnbmVkIGNoYXIgaXJxOworIHVuc2lnbmVkIGNoYXIgZG1hOworIHVuc2lnbmVkIGNoYXIgcG9ydDsKKworfTsKKworc3RydWN0IGlmX3NldHRpbmdzCit7CisgdW5zaWduZWQgaW50IHR5cGU7CisgdW5zaWduZWQgaW50IHNpemU7CisgdW5pb24geworCisgcmF3X2hkbGNfcHJvdG8gX191c2VyICpyYXdfaGRsYzsKKyBjaXNjb19wcm90byBfX3VzZXIgKmNpc2NvOworIGZyX3Byb3RvIF9fdXNlciAqZnI7CisgZnJfcHJvdG9fcHZjIF9fdXNlciAqZnJfcHZjOworIGZyX3Byb3RvX3B2Y19pbmZvIF9fdXNlciAqZnJfcHZjX2luZm87CisKKyBzeW5jX3NlcmlhbF9zZXR0aW5ncyBfX3VzZXIgKnN5bmM7CisgdGUxX3NldHRpbmdzIF9fdXNlciAqdGUxOworIH0gaWZzX2lmc3U7Cit9OworCitzdHJ1Y3QgaWZyZXEKK3sKKyNkZWZpbmUgSUZIV0FERFJMRU4gNgorIHVuaW9uCisgeworIGNoYXIgaWZybl9uYW1lW0lGTkFNU0laXTsKKyB9IGlmcl9pZnJuOworCisgdW5pb24geworIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2FkZHI7Cisgc3RydWN0IHNvY2thZGRyIGlmcnVfZHN0YWRkcjsKKyBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9icm9hZGFkZHI7Cisgc3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKKyBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9od2FkZHI7Cisgc2hvcnQgaWZydV9mbGFnczsKKyBpbnQgaWZydV9pdmFsdWU7CisgaW50IGlmcnVfbXR1OworIHN0cnVjdCBpZm1hcCBpZnJ1X21hcDsKKyBjaGFyIGlmcnVfc2xhdmVbSUZOQU1TSVpdOworIGNoYXIgaWZydV9uZXduYW1lW0lGTkFNU0laXTsKKyB2b2lkIF9fdXNlciAqIGlmcnVfZGF0YTsKKyBzdHJ1Y3QgaWZfc2V0dGluZ3MgaWZydV9zZXR0aW5nczsKKyB9IGlmcl9pZnJ1OworfTsKKworI2RlZmluZSBpZnJfbmFtZSBpZnJfaWZybi5pZnJuX25hbWUgIAorI2RlZmluZSBpZnJfaHdhZGRyIGlmcl9pZnJ1LmlmcnVfaHdhZGRyICAKKyNkZWZpbmUgaWZyX2FkZHIgaWZyX2lmcnUuaWZydV9hZGRyICAKKyNkZWZpbmUgaWZyX2RzdGFkZHIgaWZyX2lmcnUuaWZydV9kc3RhZGRyICAKKyNkZWZpbmUgaWZyX2Jyb2FkYWRkciBpZnJfaWZydS5pZnJ1X2Jyb2FkYWRkciAgCisjZGVmaW5lIGlmcl9uZXRtYXNrIGlmcl9pZnJ1LmlmcnVfbmV0bWFzayAgCisjZGVmaW5lIGlmcl9mbGFncyBpZnJfaWZydS5pZnJ1X2ZsYWdzICAKKyNkZWZpbmUgaWZyX21ldHJpYyBpZnJfaWZydS5pZnJ1X2l2YWx1ZSAgCisjZGVmaW5lIGlmcl9tdHUgaWZyX2lmcnUuaWZydV9tdHUgIAorI2RlZmluZSBpZnJfbWFwIGlmcl9pZnJ1LmlmcnVfbWFwICAKKyNkZWZpbmUgaWZyX3NsYXZlIGlmcl9pZnJ1LmlmcnVfc2xhdmUgIAorI2RlZmluZSBpZnJfZGF0YSBpZnJfaWZydS5pZnJ1X2RhdGEgIAorI2RlZmluZSBpZnJfaWZpbmRleCBpZnJfaWZydS5pZnJ1X2l2YWx1ZSAgCisjZGVmaW5lIGlmcl9iYW5kd2lkdGggaWZyX2lmcnUuaWZydV9pdmFsdWUgIAorI2RlZmluZSBpZnJfcWxlbiBpZnJfaWZydS5pZnJ1X2l2YWx1ZSAgCisjZGVmaW5lIGlmcl9uZXduYW1lIGlmcl9pZnJ1LmlmcnVfbmV3bmFtZSAgCisjZGVmaW5lIGlmcl9zZXR0aW5ncyBpZnJfaWZydS5pZnJ1X3NldHRpbmdzICAKKworc3RydWN0IGlmY29uZgoreworIGludCBpZmNfbGVuOworIHVuaW9uCisgeworIGNoYXIgX191c2VyICppZmN1X2J1ZjsKKyBzdHJ1Y3QgaWZyZXEgX191c2VyICppZmN1X3JlcTsKKyB9IGlmY19pZmN1OworfTsKKyNkZWZpbmUgaWZjX2J1ZiBpZmNfaWZjdS5pZmN1X2J1ZiAgCisjZGVmaW5lIGlmY19yZXEgaWZjX2lmY3UuaWZjdV9yZXEgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcmNuZXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcmNuZXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMWFkODc3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FyY25ldC5oCkBAIC0wLDAgKzEsOTQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0FSQ05FVF9ICisjZGVmaW5lIF9MSU5VWF9JRl9BUkNORVRfSAorCisjaW5jbHVkZSA8bGludXgvaWZfZXRoZXIuaD4KKworI2RlZmluZSBBUkNfUF9JUCAyMTIgIAorI2RlZmluZSBBUkNfUF9JUFY2IDE5NiAgCisjZGVmaW5lIEFSQ19QX0FSUCAyMTMgIAorI2RlZmluZSBBUkNfUF9SQVJQIDIxNCAgCisjZGVmaW5lIEFSQ19QX0lQWCAyNTAgIAorI2RlZmluZSBBUkNfUF9OT1ZFTExfRUMgMjM2ICAKKworI2RlZmluZSBBUkNfUF9JUF9SRkMxMDUxIDI0MCAgCisjZGVmaW5lIEFSQ19QX0FSUF9SRkMxMDUxIDI0MSAgCisKKyNkZWZpbmUgQVJDX1BfRVRIRVIgMjMyICAKKworI2RlZmluZSBBUkNfUF9EQVRBUE9JTlRfQk9PVCAwICAKKyNkZWZpbmUgQVJDX1BfREFUQVBPSU5UX01PVU5UIDEKKyNkZWZpbmUgQVJDX1BfUE9XRVJMQU5fQkVBQ09OIDggIAorI2RlZmluZSBBUkNfUF9QT1dFUkxBTl9CRUFDT04yIDI0MyAgCisjZGVmaW5lIEFSQ19QX0xBTlNPRlQgMjUxICAKKyNkZWZpbmUgQVJDX1BfQVRBTEsgMHhERAorCisjZGVmaW5lIEFSQ05FVF9BTEVOIDEKKworc3RydWN0IGFyY19yZmMxMjAxCit7CisgdWludDhfdCBwcm90bzsKKyB1aW50OF90IHNwbGl0X2ZsYWc7CisgdWludDE2X3Qgc2VxdWVuY2U7CisgdWludDhfdCBwYXlsb2FkWzBdOworfTsKKyNkZWZpbmUgUkZDMTIwMV9IRFJfU0laRSA0CisKK3N0cnVjdCBhcmNfcmZjMTA1MQoreworIHVpbnQ4X3QgcHJvdG87CisgdWludDhfdCBwYXlsb2FkWzBdOworfTsKKyNkZWZpbmUgUkZDMTA1MV9IRFJfU0laRSAxCisKK3N0cnVjdCBhcmNfZXRoX2VuY2FwCit7CisgdWludDhfdCBwcm90bzsKKyBzdHJ1Y3QgZXRoaGRyIGV0aDsKKyB1aW50OF90IHBheWxvYWRbMF07Cit9OworI2RlZmluZSBFVEhfRU5DQVBfSERSX1NJWkUgMTQKKworc3RydWN0IGFyY19jYXAKK3sKKyB1aW50OF90IHByb3RvOworIHVpbnQ4X3QgY29va2llW3NpemVvZihpbnQpXTsKKyB1bmlvbiB7CisgdWludDhfdCBhY2s7CisgdWludDhfdCByYXdbMF07CisgfSBtZXM7Cit9OworCitzdHJ1Y3QgYXJjX2hhcmR3YXJlCit7CisgdWludDhfdCBzb3VyY2UsCisgZGVzdCwKKyBvZmZzZXRbMl07Cit9OworI2RlZmluZSBBUkNfSERSX1NJWkUgNAorCitzdHJ1Y3QgYXJjaGRyCit7CisKKyBzdHJ1Y3QgYXJjX2hhcmR3YXJlIGhhcmQ7CisKKyB1bmlvbiB7Cisgc3RydWN0IGFyY19yZmMxMjAxIHJmYzEyMDE7Cisgc3RydWN0IGFyY19yZmMxMDUxIHJmYzEwNTE7Cisgc3RydWN0IGFyY19ldGhfZW5jYXAgZXRoX2VuY2FwOworIHN0cnVjdCBhcmNfY2FwIGNhcDsKKyB1aW50OF90IHJhd1swXTsKKyB9IHNvZnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcnAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9hcnAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZGE1MGY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2FycC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9BUlBfSAorI2RlZmluZSBfTElOVVhfSUZfQVJQX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGRldmljZS5oPgorCisjZGVmaW5lIEFSUEhSRF9ORVRST00gMCAgCisjZGVmaW5lIEFSUEhSRF9FVEhFUiAxICAKKyNkZWZpbmUgQVJQSFJEX0VFVEhFUiAyICAKKyNkZWZpbmUgQVJQSFJEX0FYMjUgMyAgCisjZGVmaW5lIEFSUEhSRF9QUk9ORVQgNCAgCisjZGVmaW5lIEFSUEhSRF9DSEFPUyA1ICAKKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIgNiAgCisjZGVmaW5lIEFSUEhSRF9BUkNORVQgNyAgCisjZGVmaW5lIEFSUEhSRF9BUFBMRVRMSyA4ICAKKyNkZWZpbmUgQVJQSFJEX0RMQ0kgMTUgIAorI2RlZmluZSBBUlBIUkRfQVRNIDE5ICAKKyNkZWZpbmUgQVJQSFJEX01FVFJJQ09NIDIzICAKKyNkZWZpbmUgQVJQSFJEX0lFRUUxMzk0IDI0ICAKKyNkZWZpbmUgQVJQSFJEX0VVSTY0IDI3ICAKKyNkZWZpbmUgQVJQSFJEX0lORklOSUJBTkQgMzIgIAorCisjZGVmaW5lIEFSUEhSRF9TTElQIDI1NgorI2RlZmluZSBBUlBIUkRfQ1NMSVAgMjU3CisjZGVmaW5lIEFSUEhSRF9TTElQNiAyNTgKKyNkZWZpbmUgQVJQSFJEX0NTTElQNiAyNTkKKyNkZWZpbmUgQVJQSFJEX1JTUlZEIDI2MCAgCisjZGVmaW5lIEFSUEhSRF9BREFQVCAyNjQKKyNkZWZpbmUgQVJQSFJEX1JPU0UgMjcwCisjZGVmaW5lIEFSUEhSRF9YMjUgMjcxICAKKyNkZWZpbmUgQVJQSFJEX0hXWDI1IDI3MiAgCisjZGVmaW5lIEFSUEhSRF9QUFAgNTEyCisjZGVmaW5lIEFSUEhSRF9DSVNDTyA1MTMgIAorI2RlZmluZSBBUlBIUkRfSERMQyBBUlBIUkRfQ0lTQ08KKyNkZWZpbmUgQVJQSFJEX0xBUEIgNTE2ICAKKyNkZWZpbmUgQVJQSFJEX0REQ01QIDUxNyAgCisjZGVmaW5lIEFSUEhSRF9SQVdIRExDIDUxOCAgCisKKyNkZWZpbmUgQVJQSFJEX1RVTk5FTCA3NjggIAorI2RlZmluZSBBUlBIUkRfVFVOTkVMNiA3NjkgIAorI2RlZmluZSBBUlBIUkRfRlJBRCA3NzAgIAorI2RlZmluZSBBUlBIUkRfU0tJUCA3NzEgIAorI2RlZmluZSBBUlBIUkRfTE9PUEJBQ0sgNzcyICAKKyNkZWZpbmUgQVJQSFJEX0xPQ0FMVExLIDc3MyAgCisjZGVmaW5lIEFSUEhSRF9GRERJIDc3NCAgCisjZGVmaW5lIEFSUEhSRF9CSUYgNzc1ICAKKyNkZWZpbmUgQVJQSFJEX1NJVCA3NzYgIAorI2RlZmluZSBBUlBIUkRfSVBERFAgNzc3ICAKKyNkZWZpbmUgQVJQSFJEX0lQR1JFIDc3OCAgCisjZGVmaW5lIEFSUEhSRF9QSU1SRUcgNzc5ICAKKyNkZWZpbmUgQVJQSFJEX0hJUFBJIDc4MCAgCisjZGVmaW5lIEFSUEhSRF9BU0ggNzgxICAKKyNkZWZpbmUgQVJQSFJEX0VDT05FVCA3ODIgIAorI2RlZmluZSBBUlBIUkRfSVJEQSA3ODMgIAorCisjZGVmaW5lIEFSUEhSRF9GQ1BQIDc4NCAgCisjZGVmaW5lIEFSUEhSRF9GQ0FMIDc4NSAgCisjZGVmaW5lIEFSUEhSRF9GQ1BMIDc4NiAgCisjZGVmaW5lIEFSUEhSRF9GQ0ZBQlJJQyA3ODcgIAorCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyX1RSIDgwMCAgCisjZGVmaW5lIEFSUEhSRF9JRUVFODAyMTEgODAxICAKKyNkZWZpbmUgQVJQSFJEX0lFRUU4MDIxMV9QUklTTSA4MDIgIAorI2RlZmluZSBBUlBIUkRfSUVFRTgwMjExX1JBRElPVEFQIDgwMyAgCisKKyNkZWZpbmUgQVJQSFJEX1ZPSUQgMHhGRkZGICAKKyNkZWZpbmUgQVJQSFJEX05PTkUgMHhGRkZFICAKKworI2RlZmluZSBBUlBPUF9SRVFVRVNUIDEgIAorI2RlZmluZSBBUlBPUF9SRVBMWSAyICAKKyNkZWZpbmUgQVJQT1BfUlJFUVVFU1QgMyAgCisjZGVmaW5lIEFSUE9QX1JSRVBMWSA0ICAKKyNkZWZpbmUgQVJQT1BfSW5SRVFVRVNUIDggIAorI2RlZmluZSBBUlBPUF9JblJFUExZIDkgIAorI2RlZmluZSBBUlBPUF9OQUsgMTAgIAorCitzdHJ1Y3QgYXJwcmVxIHsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX3BhOworIHN0cnVjdCBzb2NrYWRkciBhcnBfaGE7CisgaW50IGFycF9mbGFnczsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX25ldG1hc2s7CisgY2hhciBhcnBfZGV2WzE2XTsKK307CisKK3N0cnVjdCBhcnByZXFfb2xkIHsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX3BhOworIHN0cnVjdCBzb2NrYWRkciBhcnBfaGE7CisgaW50IGFycF9mbGFnczsKKyBzdHJ1Y3Qgc29ja2FkZHIgYXJwX25ldG1hc2s7Cit9OworCisjZGVmaW5lIEFURl9DT00gMHgwMiAgCisjZGVmaW5lIEFURl9QRVJNIDB4MDQgIAorI2RlZmluZSBBVEZfUFVCTCAweDA4ICAKKyNkZWZpbmUgQVRGX1VTRVRSQUlMRVJTIDB4MTAgIAorI2RlZmluZSBBVEZfTkVUTUFTSyAweDIwICAKKyNkZWZpbmUgQVRGX0RPTlRQVUIgMHg0MCAgCisKK3N0cnVjdCBhcnBoZHIKK3sKKyB1bnNpZ25lZCBzaG9ydCBhcl9ocmQ7CisgdW5zaWduZWQgc2hvcnQgYXJfcHJvOworIHVuc2lnbmVkIGNoYXIgYXJfaGxuOworIHVuc2lnbmVkIGNoYXIgYXJfcGxuOworIHVuc2lnbmVkIHNob3J0IGFyX29wOworCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9icmlkZ2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9icmlkZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45M2Y5NDk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2JyaWRnZS5oCkBAIC0wLDAgKzEsMTAwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9CUklER0VfSAorI2RlZmluZSBfTElOVVhfSUZfQlJJREdFX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgU1lTRlNfQlJJREdFX0FUVFIgImJyaWRnZSIKKyNkZWZpbmUgU1lTRlNfQlJJREdFX0ZEQiAiYnJmb3J3YXJkIgorI2RlZmluZSBTWVNGU19CUklER0VfUE9SVF9TVUJESVIgImJyaWYiCisjZGVmaW5lIFNZU0ZTX0JSSURHRV9QT1JUX0FUVFIgImJycG9ydCIKKyNkZWZpbmUgU1lTRlNfQlJJREdFX1BPUlRfTElOSyAiYnJpZGdlIgorCisjZGVmaW5lIEJSQ1RMX1ZFUlNJT04gMQorCisjZGVmaW5lIEJSQ1RMX0dFVF9WRVJTSU9OIDAKKyNkZWZpbmUgQlJDVExfR0VUX0JSSURHRVMgMQorI2RlZmluZSBCUkNUTF9BRERfQlJJREdFIDIKKyNkZWZpbmUgQlJDVExfREVMX0JSSURHRSAzCisjZGVmaW5lIEJSQ1RMX0FERF9JRiA0CisjZGVmaW5lIEJSQ1RMX0RFTF9JRiA1CisjZGVmaW5lIEJSQ1RMX0dFVF9CUklER0VfSU5GTyA2CisjZGVmaW5lIEJSQ1RMX0dFVF9QT1JUX0xJU1QgNworI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0ZPUldBUkRfREVMQVkgOAorI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX0hFTExPX1RJTUUgOQorI2RlZmluZSBCUkNUTF9TRVRfQlJJREdFX01BWF9BR0UgMTAKKyNkZWZpbmUgQlJDVExfU0VUX0FHRUlOR19USU1FIDExCisjZGVmaW5lIEJSQ1RMX1NFVF9HQ19JTlRFUlZBTCAxMgorI2RlZmluZSBCUkNUTF9HRVRfUE9SVF9JTkZPIDEzCisjZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfU1RQX1NUQVRFIDE0CisjZGVmaW5lIEJSQ1RMX1NFVF9CUklER0VfUFJJT1JJVFkgMTUKKyNkZWZpbmUgQlJDVExfU0VUX1BPUlRfUFJJT1JJVFkgMTYKKyNkZWZpbmUgQlJDVExfU0VUX1BBVEhfQ09TVCAxNworI2RlZmluZSBCUkNUTF9HRVRfRkRCX0VOVFJJRVMgMTgKKworI2RlZmluZSBCUl9TVEFURV9ESVNBQkxFRCAwCisjZGVmaW5lIEJSX1NUQVRFX0xJU1RFTklORyAxCisjZGVmaW5lIEJSX1NUQVRFX0xFQVJOSU5HIDIKKyNkZWZpbmUgQlJfU1RBVEVfRk9SV0FSRElORyAzCisjZGVmaW5lIEJSX1NUQVRFX0JMT0NLSU5HIDQKKworc3RydWN0IF9fYnJpZGdlX2luZm8KK3sKKyBfX3U2NCBkZXNpZ25hdGVkX3Jvb3Q7CisgX191NjQgYnJpZGdlX2lkOworIF9fdTMyIHJvb3RfcGF0aF9jb3N0OworIF9fdTMyIG1heF9hZ2U7CisgX191MzIgaGVsbG9fdGltZTsKKyBfX3UzMiBmb3J3YXJkX2RlbGF5OworIF9fdTMyIGJyaWRnZV9tYXhfYWdlOworIF9fdTMyIGJyaWRnZV9oZWxsb190aW1lOworIF9fdTMyIGJyaWRnZV9mb3J3YXJkX2RlbGF5OworIF9fdTggdG9wb2xvZ3lfY2hhbmdlOworIF9fdTggdG9wb2xvZ3lfY2hhbmdlX2RldGVjdGVkOworIF9fdTggcm9vdF9wb3J0OworIF9fdTggc3RwX2VuYWJsZWQ7CisgX191MzIgYWdlaW5nX3RpbWU7CisgX191MzIgZ2NfaW50ZXJ2YWw7CisgX191MzIgaGVsbG9fdGltZXJfdmFsdWU7CisgX191MzIgdGNuX3RpbWVyX3ZhbHVlOworIF9fdTMyIHRvcG9sb2d5X2NoYW5nZV90aW1lcl92YWx1ZTsKKyBfX3UzMiBnY190aW1lcl92YWx1ZTsKK307CisKK3N0cnVjdCBfX3BvcnRfaW5mbworeworIF9fdTY0IGRlc2lnbmF0ZWRfcm9vdDsKKyBfX3U2NCBkZXNpZ25hdGVkX2JyaWRnZTsKKyBfX3UxNiBwb3J0X2lkOworIF9fdTE2IGRlc2lnbmF0ZWRfcG9ydDsKKyBfX3UzMiBwYXRoX2Nvc3Q7CisgX191MzIgZGVzaWduYXRlZF9jb3N0OworIF9fdTggc3RhdGU7CisgX191OCB0b3BfY2hhbmdlX2FjazsKKyBfX3U4IGNvbmZpZ19wZW5kaW5nOworIF9fdTggdW51c2VkMDsKKyBfX3UzMiBtZXNzYWdlX2FnZV90aW1lcl92YWx1ZTsKKyBfX3UzMiBmb3J3YXJkX2RlbGF5X3RpbWVyX3ZhbHVlOworIF9fdTMyIGhvbGRfdGltZXJfdmFsdWU7Cit9OworCitzdHJ1Y3QgX19mZGJfZW50cnkKK3sKKyBfX3U4IG1hY19hZGRyWzZdOworIF9fdTggcG9ydF9ubzsKKyBfX3U4IGlzX2xvY2FsOworIF9fdTMyIGFnZWluZ190aW1lcl92YWx1ZTsKKyBfX3UzMiB1bnVzZWQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2V0aGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmY4OWMzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9ldGhlci5oCkBAIC0wLDAgKzEsODEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lGX0VUSEVSX0gKKyNkZWZpbmUgX0xJTlVYX0lGX0VUSEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgRVRIX0FMRU4gNiAgCisjZGVmaW5lIEVUSF9ITEVOIDE0ICAKKyNkZWZpbmUgRVRIX1pMRU4gNjAgIAorI2RlZmluZSBFVEhfREFUQV9MRU4gMTUwMCAgCisjZGVmaW5lIEVUSF9GUkFNRV9MRU4gMTUxNCAgCisKKyNkZWZpbmUgRVRIX1BfTE9PUCAweDAwNjAgIAorI2RlZmluZSBFVEhfUF9QVVAgMHgwMjAwICAKKyNkZWZpbmUgRVRIX1BfUFVQQVQgMHgwMjAxICAKKyNkZWZpbmUgRVRIX1BfSVAgMHgwODAwICAKKyNkZWZpbmUgRVRIX1BfWDI1IDB4MDgwNSAgCisjZGVmaW5lIEVUSF9QX0FSUCAweDA4MDYgIAorI2RlZmluZSBFVEhfUF9CUFEgMHgwOEZGICAKKyNkZWZpbmUgRVRIX1BfSUVFRVBVUCAweDBhMDAgIAorI2RlZmluZSBFVEhfUF9JRUVFUFVQQVQgMHgwYTAxICAKKyNkZWZpbmUgRVRIX1BfREVDIDB4NjAwMCAgCisjZGVmaW5lIEVUSF9QX0ROQV9ETCAweDYwMDEgIAorI2RlZmluZSBFVEhfUF9ETkFfUkMgMHg2MDAyICAKKyNkZWZpbmUgRVRIX1BfRE5BX1JUIDB4NjAwMyAgCisjZGVmaW5lIEVUSF9QX0xBVCAweDYwMDQgIAorI2RlZmluZSBFVEhfUF9ESUFHIDB4NjAwNSAgCisjZGVmaW5lIEVUSF9QX0NVU1QgMHg2MDA2ICAKKyNkZWZpbmUgRVRIX1BfU0NBIDB4NjAwNyAgCisjZGVmaW5lIEVUSF9QX1JBUlAgMHg4MDM1ICAKKyNkZWZpbmUgRVRIX1BfQVRBTEsgMHg4MDlCICAKKyNkZWZpbmUgRVRIX1BfQUFSUCAweDgwRjMgIAorI2RlZmluZSBFVEhfUF84MDIxUSAweDgxMDAgIAorI2RlZmluZSBFVEhfUF9JUFggMHg4MTM3ICAKKyNkZWZpbmUgRVRIX1BfSVBWNiAweDg2REQgIAorI2RlZmluZSBFVEhfUF9TTE9XIDB4ODgwOSAgCisjZGVmaW5lIEVUSF9QX1dDQ1AgMHg4ODNFICAKKyNkZWZpbmUgRVRIX1BfUFBQX0RJU0MgMHg4ODYzICAKKyNkZWZpbmUgRVRIX1BfUFBQX1NFUyAweDg4NjQgIAorI2RlZmluZSBFVEhfUF9NUExTX1VDIDB4ODg0NyAgCisjZGVmaW5lIEVUSF9QX01QTFNfTUMgMHg4ODQ4ICAKKyNkZWZpbmUgRVRIX1BfQVRNTVBPQSAweDg4NGMgIAorI2RlZmluZSBFVEhfUF9BVE1GQVRFIDB4ODg4NCAgCisjZGVmaW5lIEVUSF9QX0FPRSAweDg4QTIgIAorI2RlZmluZSBFVEhfUF9USVBDIDB4ODhDQSAgCisKKyNkZWZpbmUgRVRIX1BfODAyXzMgMHgwMDAxICAKKyNkZWZpbmUgRVRIX1BfQVgyNSAweDAwMDIgIAorI2RlZmluZSBFVEhfUF9BTEwgMHgwMDAzICAKKyNkZWZpbmUgRVRIX1BfODAyXzIgMHgwMDA0ICAKKyNkZWZpbmUgRVRIX1BfU05BUCAweDAwMDUgIAorI2RlZmluZSBFVEhfUF9ERENNUCAweDAwMDYgIAorI2RlZmluZSBFVEhfUF9XQU5fUFBQIDB4MDAwNyAgCisjZGVmaW5lIEVUSF9QX1BQUF9NUCAweDAwMDggIAorI2RlZmluZSBFVEhfUF9MT0NBTFRBTEsgMHgwMDA5ICAKKyNkZWZpbmUgRVRIX1BfUFBQVEFMSyAweDAwMTAgIAorI2RlZmluZSBFVEhfUF9UUl84MDJfMiAweDAwMTEgIAorI2RlZmluZSBFVEhfUF9NT0JJVEVYIDB4MDAxNSAgCisjZGVmaW5lIEVUSF9QX0NPTlRST0wgMHgwMDE2ICAKKyNkZWZpbmUgRVRIX1BfSVJEQSAweDAwMTcgIAorI2RlZmluZSBFVEhfUF9FQ09ORVQgMHgwMDE4ICAKKyNkZWZpbmUgRVRIX1BfSERMQyAweDAwMTkgIAorI2RlZmluZSBFVEhfUF9BUkNORVQgMHgwMDFBICAKKworc3RydWN0IGV0aGhkciB7CisgdW5zaWduZWQgY2hhciBoX2Rlc3RbRVRIX0FMRU5dOworIHVuc2lnbmVkIGNoYXIgaF9zb3VyY2VbRVRIX0FMRU5dOworIF9fYmUxNiBoX3Byb3RvOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2YTQ3YjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfZmMuaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9GQ19ICisjZGVmaW5lIF9MSU5VWF9JRl9GQ19ICisKKyNkZWZpbmUgRkNfQUxFTiA2ICAKKyNkZWZpbmUgRkNfSExFTiAoc2l6ZW9mKHN0cnVjdCBmY2hfaGRyKStzaXplb2Yoc3RydWN0IGZjbGxjKSkKKyNkZWZpbmUgRkNfSURfTEVOIDMgIAorCisjZGVmaW5lIEVYVEVOREVEX1NBUCAweEFBCisjZGVmaW5lIFVJX0NNRCAweDAzCisKK3N0cnVjdCBmY2hfaGRyIHsKKyBfX3U4IGRhZGRyW0ZDX0FMRU5dOworIF9fdTggc2FkZHJbRkNfQUxFTl07Cit9OworCitzdHJ1Y3QgZmNsbGMgeworIF9fdTggZHNhcDsKKyBfX3U4IHNzYXA7CisgX191OCBsbGM7CisgX191OCBwcm90aWRbM107CisgX19iZTE2IGV0aGVydHlwZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX2ZkZGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mZGRpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjU5NDkyZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9mZGRpLmgKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSUZfRkRESV9ICisjZGVmaW5lIF9MSU5VWF9JRl9GRERJX0gKKworI2RlZmluZSBGRERJX0tfQUxFTiA2ICAKKyNkZWZpbmUgRkRESV9LXzgwMjJfSExFTiAxNiAgCisjZGVmaW5lIEZERElfS19TTkFQX0hMRU4gMjEgIAorI2RlZmluZSBGRERJX0tfODAyMl9aTEVOIDE2ICAKKyNkZWZpbmUgRkRESV9LX1NOQVBfWkxFTiAyMSAgCisjZGVmaW5lIEZERElfS184MDIyX0RMRU4gNDQ3NSAgCisjZGVmaW5lIEZERElfS19TTkFQX0RMRU4gNDQ3MCAgCisjZGVmaW5lIEZERElfS19MTENfWkxFTiAxMyAgCisjZGVmaW5lIEZERElfS19MTENfTEVOIDQ0OTEgIAorCisjZGVmaW5lIEZERElfRkNfS19WT0lEIDB4MDAgCisjZGVmaW5lIEZERElfRkNfS19OT05fUkVTVFJJQ1RFRF9UT0tFTiAweDgwIAorI2RlZmluZSBGRERJX0ZDX0tfUkVTVFJJQ1RFRF9UT0tFTiAweEMwIAorI2RlZmluZSBGRERJX0ZDX0tfU01UX01JTiAweDQxCisjZGVmaW5lIEZERElfRkNfS19TTVRfTUFYIDB4NEYKKyNkZWZpbmUgRkRESV9GQ19LX01BQ19NSU4gMHhDMQorI2RlZmluZSBGRERJX0ZDX0tfTUFDX01BWCAweENGIAorI2RlZmluZSBGRERJX0ZDX0tfQVNZTkNfTExDX01JTiAweDUwCisjZGVmaW5lIEZERElfRkNfS19BU1lOQ19MTENfREVGIDB4NTQKKyNkZWZpbmUgRkRESV9GQ19LX0FTWU5DX0xMQ19NQVggMHg1RgorI2RlZmluZSBGRERJX0ZDX0tfU1lOQ19MTENfTUlOIDB4RDAKKyNkZWZpbmUgRkRESV9GQ19LX1NZTkNfTExDX01BWCAweEQ3CisjZGVmaW5lIEZERElfRkNfS19JTVBMRU1FTlRPUl9NSU4gMHg2MAorI2RlZmluZSBGRERJX0ZDX0tfSU1QTEVNRU5UT1JfTUFYIDB4NkYKKyNkZWZpbmUgRkRESV9GQ19LX1JFU0VSVkVEX01JTiAweDcwCisjZGVmaW5lIEZERElfRkNfS19SRVNFUlZFRF9NQVggMHg3RgorCisjZGVmaW5lIEZERElfRVhURU5ERURfU0FQIDB4QUEKKyNkZWZpbmUgRkRESV9VSV9DTUQgMHgwMworCitzdHJ1Y3QgZmRkaV84MDIyXzFfaGRyCisgeworIF9fdTggZHNhcDsKKyBfX3U4IHNzYXA7CisgX191OCBjdHJsOworIH0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgZmRkaV84MDIyXzJfaGRyCisgeworIF9fdTggZHNhcDsKKyBfX3U4IHNzYXA7CisgX191OCBjdHJsXzE7CisgX191OCBjdHJsXzI7CisgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgRkRESV9LX09VSV9MRU4gMworc3RydWN0IGZkZGlfc25hcF9oZHIKKyB7CisgX191OCBkc2FwOworIF9fdTggc3NhcDsKKyBfX3U4IGN0cmw7CisgX191OCBvdWlbRkRESV9LX09VSV9MRU5dOworIF9fYmUxNiBldGhlcnR5cGU7CisgfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBmZGRpaGRyCisgeworIF9fdTggZmM7CisgX191OCBkYWRkcltGRERJX0tfQUxFTl07CisgX191OCBzYWRkcltGRERJX0tfQUxFTl07CisgdW5pb24KKyB7Cisgc3RydWN0IGZkZGlfODAyMl8xX2hkciBsbGNfODAyMl8xOworIHN0cnVjdCBmZGRpXzgwMjJfMl9oZHIgbGxjXzgwMjJfMjsKKyBzdHJ1Y3QgZmRkaV9zbmFwX2hkciBsbGNfc25hcDsKKyB9IGhkcjsKKyB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfaGlwcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9oaXBwaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZDM2ZjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfaGlwcGkuaApAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9ISVBQSV9ICisjZGVmaW5lIF9MSU5VWF9JRl9ISVBQSV9ICisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgSElQUElfQUxFTiA2ICAKKyNkZWZpbmUgSElQUElfSExFTiBzaXplb2Yoc3RydWN0IGhpcHBpX2hkcikKKyNkZWZpbmUgSElQUElfWkxFTiAwICAKKyNkZWZpbmUgSElQUElfREFUQV9MRU4gNjUyODAgIAorI2RlZmluZSBISVBQSV9GUkFNRV9MRU4gKEhJUFBJX0RBVEFfTEVOICsgSElQUElfSExFTikKKworI2RlZmluZSBISVBQSV9FWFRFTkRFRF9TQVAgMHhBQQorI2RlZmluZSBISVBQSV9VSV9DTUQgMHgwMworCitzdHJ1Y3QgaGlwbmV0X3N0YXRpc3RpY3MKK3sKKyBpbnQgcnhfcGFja2V0czsKKyBpbnQgdHhfcGFja2V0czsKKyBpbnQgcnhfZXJyb3JzOworIGludCB0eF9lcnJvcnM7CisgaW50IHJ4X2Ryb3BwZWQ7CisgaW50IHR4X2Ryb3BwZWQ7CisKKyBpbnQgcnhfbGVuZ3RoX2Vycm9yczsKKyBpbnQgcnhfb3Zlcl9lcnJvcnM7CisgaW50IHJ4X2NyY19lcnJvcnM7CisgaW50IHJ4X2ZyYW1lX2Vycm9yczsKKyBpbnQgcnhfZmlmb19lcnJvcnM7CisgaW50IHJ4X21pc3NlZF9lcnJvcnM7CisKKyBpbnQgdHhfYWJvcnRlZF9lcnJvcnM7CisgaW50IHR4X2NhcnJpZXJfZXJyb3JzOworIGludCB0eF9maWZvX2Vycm9yczsKKyBpbnQgdHhfaGVhcnRiZWF0X2Vycm9yczsKKyBpbnQgdHhfd2luZG93X2Vycm9yczsKK307CisKK3N0cnVjdCBoaXBwaV9mcF9oZHIKK3sKKyBfX2JlMzIgZml4ZWQ7CisgX19iZTMyIGQyX3NpemU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IGhpcHBpX2xlX2hkcgoreworI2lmZGVmIF9fQklHX0VORElBTl9CSVRGSUVMRAorIF9fdTggZmM6MzsKKyBfX3U4IGRvdWJsZV93aWRlOjE7CisgX191OCBtZXNzYWdlX3R5cGU6NDsKKyNlbGlmIGRlZmluZWQoX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTggbWVzc2FnZV90eXBlOjQ7CisgX191OCBkb3VibGVfd2lkZToxOworIF9fdTggZmM6MzsKKyNlbmRpZgorIF9fdTggZGVzdF9zd2l0Y2hfYWRkclszXTsKKyNpZmRlZiBfX0JJR19FTkRJQU5fQklURklFTEQKKyBfX3U4IGRlc3RfYWRkcl90eXBlOjQsCisgc3JjX2FkZHJfdHlwZTo0OworI2VsaWYgZGVmaW5lZChfX0xJVFRMRV9FTkRJQU5fQklURklFTEQpCisgX191OCBzcmNfYWRkcl90eXBlOjQsCisgZGVzdF9hZGRyX3R5cGU6NDsKKyNlbmRpZgorIF9fdTggc3JjX3N3aXRjaF9hZGRyWzNdOworIF9fdTE2IHJlc2VydmVkOworIF9fdTggZGFkZHJbSElQUElfQUxFTl07CisgX191MTYgbG9jYWxseV9hZG1pbmlzdGVyZWQ7CisgX191OCBzYWRkcltISVBQSV9BTEVOXTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIEhJUFBJX09VSV9MRU4gMworCitzdHJ1Y3QgaGlwcGlfc25hcF9oZHIKK3sKKyBfX3U4IGRzYXA7CisgX191OCBzc2FwOworIF9fdTggY3RybDsKKyBfX3U4IG91aVtISVBQSV9PVUlfTEVOXTsKKyBfX2JlMTYgZXRoZXJ0eXBlOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCBoaXBwaV9oZHIKK3sKKyBzdHJ1Y3QgaGlwcGlfZnBfaGRyIGZwOworIHN0cnVjdCBoaXBwaV9sZV9oZHIgbGU7Cisgc3RydWN0IGhpcHBpX3NuYXBfaGRyIHNuYXA7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcGFja2V0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcGFja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWFhM2JlYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9wYWNrZXQuaApAQCAtMCwwICsxLDk2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfSUZfUEFDS0VUX0gKKyNkZWZpbmUgX19MSU5VWF9JRl9QQUNLRVRfSAorCitzdHJ1Y3Qgc29ja2FkZHJfcGt0Cit7CisgdW5zaWduZWQgc2hvcnQgc3BrdF9mYW1pbHk7CisgdW5zaWduZWQgY2hhciBzcGt0X2RldmljZVsxNF07CisgdW5zaWduZWQgc2hvcnQgc3BrdF9wcm90b2NvbDsKK307CisKK3N0cnVjdCBzb2NrYWRkcl9sbAoreworIHVuc2lnbmVkIHNob3J0IHNsbF9mYW1pbHk7CisgdW5zaWduZWQgc2hvcnQgc2xsX3Byb3RvY29sOworIGludCBzbGxfaWZpbmRleDsKKyB1bnNpZ25lZCBzaG9ydCBzbGxfaGF0eXBlOworIHVuc2lnbmVkIGNoYXIgc2xsX3BrdHR5cGU7CisgdW5zaWduZWQgY2hhciBzbGxfaGFsZW47CisgdW5zaWduZWQgY2hhciBzbGxfYWRkcls4XTsKK307CisKKyNkZWZpbmUgUEFDS0VUX0hPU1QgMCAgCisjZGVmaW5lIFBBQ0tFVF9CUk9BRENBU1QgMSAgCisjZGVmaW5lIFBBQ0tFVF9NVUxUSUNBU1QgMiAgCisjZGVmaW5lIFBBQ0tFVF9PVEhFUkhPU1QgMyAgCisjZGVmaW5lIFBBQ0tFVF9PVVRHT0lORyA0ICAKKworI2RlZmluZSBQQUNLRVRfTE9PUEJBQ0sgNSAgCisjZGVmaW5lIFBBQ0tFVF9GQVNUUk9VVEUgNiAgCisKKyNkZWZpbmUgUEFDS0VUX0FERF9NRU1CRVJTSElQIDEKKyNkZWZpbmUgUEFDS0VUX0RST1BfTUVNQkVSU0hJUCAyCisjZGVmaW5lIFBBQ0tFVF9SRUNWX09VVFBVVCAzCisKKyNkZWZpbmUgUEFDS0VUX1JYX1JJTkcgNQorI2RlZmluZSBQQUNLRVRfU1RBVElTVElDUyA2CisjZGVmaW5lIFBBQ0tFVF9DT1BZX1RIUkVTSCA3CisKK3N0cnVjdCB0cGFja2V0X3N0YXRzCit7CisgdW5zaWduZWQgaW50IHRwX3BhY2tldHM7CisgdW5zaWduZWQgaW50IHRwX2Ryb3BzOworfTsKKworc3RydWN0IHRwYWNrZXRfaGRyCit7CisgdW5zaWduZWQgbG9uZyB0cF9zdGF0dXM7CisjZGVmaW5lIFRQX1NUQVRVU19LRVJORUwgMAorI2RlZmluZSBUUF9TVEFUVVNfVVNFUiAxCisjZGVmaW5lIFRQX1NUQVRVU19DT1BZIDIKKyNkZWZpbmUgVFBfU1RBVFVTX0xPU0lORyA0CisjZGVmaW5lIFRQX1NUQVRVU19DU1VNTk9UUkVBRFkgOAorIHVuc2lnbmVkIGludCB0cF9sZW47CisgdW5zaWduZWQgaW50IHRwX3NuYXBsZW47CisgdW5zaWduZWQgc2hvcnQgdHBfbWFjOworIHVuc2lnbmVkIHNob3J0IHRwX25ldDsKKyB1bnNpZ25lZCBpbnQgdHBfc2VjOworIHVuc2lnbmVkIGludCB0cF91c2VjOworfTsKKworI2RlZmluZSBUUEFDS0VUX0FMSUdOTUVOVCAxNgorI2RlZmluZSBUUEFDS0VUX0FMSUdOKHgpICgoKHgpK1RQQUNLRVRfQUxJR05NRU5ULTEpJn4oVFBBQ0tFVF9BTElHTk1FTlQtMSkpCisjZGVmaW5lIFRQQUNLRVRfSERSTEVOIChUUEFDS0VUX0FMSUdOKHNpemVvZihzdHJ1Y3QgdHBhY2tldF9oZHIpKSArIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfbGwpKQorCitzdHJ1Y3QgdHBhY2tldF9yZXEKK3sKKyB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfc2l6ZTsKKyB1bnNpZ25lZCBpbnQgdHBfYmxvY2tfbnI7CisgdW5zaWduZWQgaW50IHRwX2ZyYW1lX3NpemU7CisgdW5zaWduZWQgaW50IHRwX2ZyYW1lX25yOworfTsKKworc3RydWN0IHBhY2tldF9tcmVxCit7CisgaW50IG1yX2lmaW5kZXg7CisgdW5zaWduZWQgc2hvcnQgbXJfdHlwZTsKKyB1bnNpZ25lZCBzaG9ydCBtcl9hbGVuOworIHVuc2lnbmVkIGNoYXIgbXJfYWRkcmVzc1s4XTsKK307CisKKyNkZWZpbmUgUEFDS0VUX01SX01VTFRJQ0FTVCAwCisjZGVmaW5lIFBBQ0tFVF9NUl9QUk9NSVNDIDEKKyNkZWZpbmUgUEFDS0VUX01SX0FMTE1VTFRJIDIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcHBwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfcHBwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWYzNWM5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl9wcHAuaApAQCAtMCwwICsxLDExNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSUZfUFBQX0hfCisjZGVmaW5lIF9JRl9QUFBfSF8KKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKKyNkZWZpbmUgUFBQX01UVSAxNTAwICAKKyNkZWZpbmUgUFBQX01BWE1SVSA2NTAwMCAgCisjZGVmaW5lIFBST1RPX0lQWCAweDAwMmIgIAorI2RlZmluZSBQUk9UT19ETkFfUlQgMHgwMDI3ICAKKworI2RlZmluZSBTQ19DT01QX1BST1QgMHgwMDAwMDAwMSAgCisjZGVmaW5lIFNDX0NPTVBfQUMgMHgwMDAwMDAwMiAgCisjZGVmaW5lIFNDX0NPTVBfVENQIDB4MDAwMDAwMDQgIAorI2RlZmluZSBTQ19OT19UQ1BfQ0NJRCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgU0NfUkVKX0NPTVBfQUMgMHgwMDAwMDAxMCAgCisjZGVmaW5lIFNDX1JFSl9DT01QX1RDUCAweDAwMDAwMDIwICAKKyNkZWZpbmUgU0NfQ0NQX09QRU4gMHgwMDAwMDA0MCAgCisjZGVmaW5lIFNDX0NDUF9VUCAweDAwMDAwMDgwICAKKyNkZWZpbmUgU0NfRU5BQkxFX0lQIDB4MDAwMDAxMDAgIAorI2RlZmluZSBTQ19MT09QX1RSQUZGSUMgMHgwMDAwMDIwMCAgCisjZGVmaW5lIFNDX01VTFRJTElOSyAweDAwMDAwNDAwICAKKyNkZWZpbmUgU0NfTVBfU0hPUlRTRVEgMHgwMDAwMDgwMCAgCisjZGVmaW5lIFNDX0NPTVBfUlVOIDB4MDAwMDEwMDAgIAorI2RlZmluZSBTQ19ERUNPTVBfUlVOIDB4MDAwMDIwMDAgIAorI2RlZmluZSBTQ19NUF9YU0hPUlRTRVEgMHgwMDAwNDAwMCAgCisjZGVmaW5lIFNDX0RFQlVHIDB4MDAwMTAwMDAgIAorI2RlZmluZSBTQ19MT0dfSU5QS1QgMHgwMDAyMDAwMCAgCisjZGVmaW5lIFNDX0xPR19PVVRQS1QgMHgwMDA0MDAwMCAgCisjZGVmaW5lIFNDX0xPR19SQVdJTiAweDAwMDgwMDAwICAKKyNkZWZpbmUgU0NfTE9HX0ZMVVNIIDB4MDAxMDAwMDAgIAorI2RlZmluZSBTQ19TWU5DIDB4MDAyMDAwMDAgIAorI2RlZmluZSBTQ19NVVNUX0NPTVAgMHgwMDQwMDAwMCAgCisjZGVmaW5lIFNDX01BU0sgMHgwZjYwMGZmZiAgCisKKyNkZWZpbmUgU0NfWE1JVF9CVVNZIDB4MTAwMDAwMDAgIAorI2RlZmluZSBTQ19SQ1ZfT0REUCAweDA4MDAwMDAwICAKKyNkZWZpbmUgU0NfUkNWX0VWTlAgMHgwNDAwMDAwMCAgCisjZGVmaW5lIFNDX1JDVl9CN18xIDB4MDIwMDAwMDAgIAorI2RlZmluZSBTQ19SQ1ZfQjdfMCAweDAxMDAwMDAwICAKKyNkZWZpbmUgU0NfRENfRkVSUk9SIDB4MDA4MDAwMDAgIAorI2RlZmluZSBTQ19EQ19FUlJPUiAweDAwNDAwMDAwICAKKworc3RydWN0IG5waW9jdGwgeworIGludCBwcm90b2NvbDsKKyBlbnVtIE5QbW9kZSBtb2RlOworfTsKKworc3RydWN0IHBwcF9vcHRpb25fZGF0YSB7CisgX191OCBfX3VzZXIgKnB0cjsKKyBfX3UzMiBsZW5ndGg7CisgaW50IHRyYW5zbWl0OworfTsKKworc3RydWN0IGlmcHBwc3RhdHNyZXEgeworIHN0cnVjdCBpZnJlcSBiOworIHN0cnVjdCBwcHBfc3RhdHMgc3RhdHM7Cit9OworCitzdHJ1Y3QgaWZwcHBjc3RhdHNyZXEgeworIHN0cnVjdCBpZnJlcSBiOworIHN0cnVjdCBwcHBfY29tcF9zdGF0cyBzdGF0czsKK307CisKKyNkZWZpbmUgaWZyX19uYW1lIGIuaWZyX2lmcm4uaWZybl9uYW1lCisjZGVmaW5lIHN0YXRzX3B0ciBiLmlmcl9pZnJ1LmlmcnVfZGF0YQorCisjZGVmaW5lIFBQUElPQ0dGTEFHUyBfSU9SKCd0JywgOTAsIGludCkgIAorI2RlZmluZSBQUFBJT0NTRkxBR1MgX0lPVygndCcsIDg5LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR0FTWU5DTUFQIF9JT1IoJ3QnLCA4OCwgaW50KSAgCisjZGVmaW5lIFBQUElPQ1NBU1lOQ01BUCBfSU9XKCd0JywgODcsIGludCkgIAorI2RlZmluZSBQUFBJT0NHVU5JVCBfSU9SKCd0JywgODYsIGludCkgIAorI2RlZmluZSBQUFBJT0NHUkFTWU5DTUFQIF9JT1IoJ3QnLCA4NSwgaW50KSAgCisjZGVmaW5lIFBQUElPQ1NSQVNZTkNNQVAgX0lPVygndCcsIDg0LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR01SVSBfSU9SKCd0JywgODMsIGludCkgIAorI2RlZmluZSBQUFBJT0NTTVJVIF9JT1coJ3QnLCA4MiwgaW50KSAgCisjZGVmaW5lIFBQUElPQ1NNQVhDSUQgX0lPVygndCcsIDgxLCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR1hBU1lOQ01BUCBfSU9SKCd0JywgODAsIGV4dF9hY2NtKSAgCisjZGVmaW5lIFBQUElPQ1NYQVNZTkNNQVAgX0lPVygndCcsIDc5LCBleHRfYWNjbSkgIAorI2RlZmluZSBQUFBJT0NYRkVSVU5JVCBfSU8oJ3QnLCA3OCkgIAorI2RlZmluZSBQUFBJT0NTQ09NUFJFU1MgX0lPVygndCcsIDc3LCBzdHJ1Y3QgcHBwX29wdGlvbl9kYXRhKQorI2RlZmluZSBQUFBJT0NHTlBNT0RFIF9JT1dSKCd0JywgNzYsIHN0cnVjdCBucGlvY3RsKSAgCisjZGVmaW5lIFBQUElPQ1NOUE1PREUgX0lPVygndCcsIDc1LCBzdHJ1Y3QgbnBpb2N0bCkgIAorI2RlZmluZSBQUFBJT0NTUEFTUyBfSU9XKCd0JywgNzEsIHN0cnVjdCBzb2NrX2Zwcm9nKSAgCisjZGVmaW5lIFBQUElPQ1NBQ1RJVkUgX0lPVygndCcsIDcwLCBzdHJ1Y3Qgc29ja19mcHJvZykgIAorI2RlZmluZSBQUFBJT0NHREVCVUcgX0lPUigndCcsIDY1LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DU0RFQlVHIF9JT1coJ3QnLCA2NCwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0dJRExFIF9JT1IoJ3QnLCA2Mywgc3RydWN0IHBwcF9pZGxlKSAgCisjZGVmaW5lIFBQUElPQ05FV1VOSVQgX0lPV1IoJ3QnLCA2MiwgaW50KSAgCisjZGVmaW5lIFBQUElPQ0FUVEFDSCBfSU9XKCd0JywgNjEsIGludCkgIAorI2RlZmluZSBQUFBJT0NERVRBQ0ggX0lPVygndCcsIDYwLCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DU01SUlUgX0lPVygndCcsIDU5LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DQ09OTkVDVCBfSU9XKCd0JywgNTgsIGludCkgIAorI2RlZmluZSBQUFBJT0NESVNDT05OIF9JTygndCcsIDU3KSAgCisjZGVmaW5lIFBQUElPQ0FUVENIQU4gX0lPVygndCcsIDU2LCBpbnQpICAKKyNkZWZpbmUgUFBQSU9DR0NIQU4gX0lPUigndCcsIDU1LCBpbnQpICAKKworI2RlZmluZSBTSU9DR1BQUFNUQVRTIChTSU9DREVWUFJJVkFURSArIDApCisjZGVmaW5lIFNJT0NHUFBQVkVSIChTSU9DREVWUFJJVkFURSArIDEpICAKKyNkZWZpbmUgU0lPQ0dQUFBDU1RBVFMgKFNJT0NERVZQUklWQVRFICsgMikKKworI2lmbmRlZiBpZnJfbXR1CisjZGVmaW5lIGlmcl9tdHUgaWZyX2lmcnUuaWZydV9tZXRyaWMKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90ci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3RyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q2MzE5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pZl90ci5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lGX1RSX0gKKyNkZWZpbmUgX0xJTlVYX0lGX1RSX0gKKworI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4gIAorCisjZGVmaW5lIFRSX0FMRU4gNiAgCisjZGVmaW5lIFRSX0hMRU4gKHNpemVvZihzdHJ1Y3QgdHJoX2hkcikrc2l6ZW9mKHN0cnVjdCB0cmxsYykpCisjZGVmaW5lIEFDIDB4MTAKKyNkZWZpbmUgTExDX0ZSQU1FIDB4NDAKKworI2RlZmluZSBFWFRFTkRFRF9TQVAgMHhBQQorI2RlZmluZSBVSV9DTUQgMHgwMworCitzdHJ1Y3QgdHJoX2hkciB7CisgX191OCBhYzsKKyBfX3U4IGZjOworIF9fdTggZGFkZHJbVFJfQUxFTl07CisgX191OCBzYWRkcltUUl9BTEVOXTsKKyBfX2JlMTYgcmNmOworIF9fYmUxNiByc2VnWzhdOworfTsKKworc3RydWN0IHRybGxjIHsKKyBfX3U4IGRzYXA7CisgX191OCBzc2FwOworIF9fdTggbGxjOworIF9fdTggcHJvdGlkWzNdOworIF9fYmUxNiBldGhlcnR5cGU7Cit9OworCitzdHJ1Y3QgdHJfc3RhdGlzdGljcyB7CisgdW5zaWduZWQgbG9uZyByeF9wYWNrZXRzOworIHVuc2lnbmVkIGxvbmcgdHhfcGFja2V0czsKKyB1bnNpZ25lZCBsb25nIHJ4X2J5dGVzOworIHVuc2lnbmVkIGxvbmcgdHhfYnl0ZXM7CisgdW5zaWduZWQgbG9uZyByeF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0eF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9kcm9wcGVkOworIHVuc2lnbmVkIGxvbmcgdHhfZHJvcHBlZDsKKyB1bnNpZ25lZCBsb25nIG11bHRpY2FzdDsKKyB1bnNpZ25lZCBsb25nIHRyYW5zbWl0X2NvbGxpc2lvbjsKKworIHVuc2lnbmVkIGxvbmcgbGluZV9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyBpbnRlcm5hbF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyBidXJzdF9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyBBX0NfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgYWJvcnRfZGVsaW1pdGVyczsKKyB1bnNpZ25lZCBsb25nIGxvc3RfZnJhbWVzOworIHVuc2lnbmVkIGxvbmcgcmVjdl9jb25nZXN0X2NvdW50OworIHVuc2lnbmVkIGxvbmcgZnJhbWVfY29waWVkX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeV9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0b2tlbl9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyBkdW1teTE7Cit9OworCisjZGVmaW5lIFRSX1JJSSAweDgwCisjZGVmaW5lIFRSX1JDRl9ESVJfQklUIDB4ODAKKyNkZWZpbmUgVFJfUkNGX0xFTl9NQVNLIDB4MWYwMAorI2RlZmluZSBUUl9SQ0ZfQlJPQURDQVNUIDB4ODAwMCAgCisjZGVmaW5lIFRSX1JDRl9MSU1JVEVEX0JST0FEQ0FTVCAweEMwMDAgIAorI2RlZmluZSBUUl9SQ0ZfRlJBTUUySyAweDIwCisjZGVmaW5lIFRSX1JDRl9CUk9BRENBU1RfTUFTSyAweEMwMDAKKyNkZWZpbmUgVFJfTUFYUklGTEVOIDE4CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3R1bi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3R1bi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM1ZGI0ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdHVuLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0lGX1RVTl9ICisjZGVmaW5lIF9fSUZfVFVOX0gKKworI2RlZmluZSBUVU5fUkVBRFFfU0laRSA1MDAKKworI2RlZmluZSBUVU5fVFVOX0RFViAweDAwMDEgCisjZGVmaW5lIFRVTl9UQVBfREVWIDB4MDAwMgorI2RlZmluZSBUVU5fVFlQRV9NQVNLIDB4MDAwZgorCisjZGVmaW5lIFRVTl9GQVNZTkMgMHgwMDEwCisjZGVmaW5lIFRVTl9OT0NIRUNLU1VNIDB4MDAyMAorI2RlZmluZSBUVU5fTk9fUEkgMHgwMDQwCisjZGVmaW5lIFRVTl9PTkVfUVVFVUUgMHgwMDgwCisjZGVmaW5lIFRVTl9QRVJTSVNUIDB4MDEwMCAKKworI2RlZmluZSBUVU5TRVROT0NTVU0gX0lPVygnVCcsIDIwMCwgaW50KSAKKyNkZWZpbmUgVFVOU0VUREVCVUcgX0lPVygnVCcsIDIwMSwgaW50KSAKKyNkZWZpbmUgVFVOU0VUSUZGIF9JT1coJ1QnLCAyMDIsIGludCkgCisjZGVmaW5lIFRVTlNFVFBFUlNJU1QgX0lPVygnVCcsIDIwMywgaW50KSAKKyNkZWZpbmUgVFVOU0VUT1dORVIgX0lPVygnVCcsIDIwNCwgaW50KQorI2RlZmluZSBUVU5TRVRMSU5LIF9JT1coJ1QnLCAyMDUsIGludCkKKworI2RlZmluZSBJRkZfVFVOIDB4MDAwMQorI2RlZmluZSBJRkZfVEFQIDB4MDAwMgorI2RlZmluZSBJRkZfTk9fUEkgMHgxMDAwCisjZGVmaW5lIElGRl9PTkVfUVVFVUUgMHgyMDAwCisKK3N0cnVjdCB0dW5fcGkgeworIHVuc2lnbmVkIHNob3J0IGZsYWdzOworIHVuc2lnbmVkIHNob3J0IHByb3RvOworfTsKKyNkZWZpbmUgVFVOX1BLVF9TVFJJUCAweDAwMDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaWZfdmxhbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3ZsYW4uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2QyZGYyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lmX3ZsYW4uaApAQCAtMCwwICsxLDUyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JRl9WTEFOX0hfCisjZGVmaW5lIF9MSU5VWF9JRl9WTEFOX0hfCisKK2VudW0gdmxhbl9pb2N0bF9jbWRzIHsKKyBBRERfVkxBTl9DTUQsCisgREVMX1ZMQU5fQ01ELAorIFNFVF9WTEFOX0lOR1JFU1NfUFJJT1JJVFlfQ01ELAorIFNFVF9WTEFOX0VHUkVTU19QUklPUklUWV9DTUQsCisgR0VUX1ZMQU5fSU5HUkVTU19QUklPUklUWV9DTUQsCisgR0VUX1ZMQU5fRUdSRVNTX1BSSU9SSVRZX0NNRCwKKyBTRVRfVkxBTl9OQU1FX1RZUEVfQ01ELAorIFNFVF9WTEFOX0ZMQUdfQ01ELAorIEdFVF9WTEFOX1JFQUxERVZfTkFNRV9DTUQsCisgR0VUX1ZMQU5fVklEX0NNRAorfTsKKworZW51bSB2bGFuX25hbWVfdHlwZXMgeworIFZMQU5fTkFNRV9UWVBFX1BMVVNfVklELAorIFZMQU5fTkFNRV9UWVBFX1JBV19QTFVTX1ZJRCwKKyBWTEFOX05BTUVfVFlQRV9QTFVTX1ZJRF9OT19QQUQsCisgVkxBTl9OQU1FX1RZUEVfUkFXX1BMVVNfVklEX05PX1BBRCwKKyBWTEFOX05BTUVfVFlQRV9ISUdIRVNUCit9OworCitzdHJ1Y3Qgdmxhbl9pb2N0bF9hcmdzIHsKKyBpbnQgY21kOworIGNoYXIgZGV2aWNlMVsyNF07CisKKyB1bmlvbiB7CisgY2hhciBkZXZpY2UyWzI0XTsKKyBpbnQgVklEOworIHVuc2lnbmVkIGludCBza2JfcHJpb3JpdHk7CisgdW5zaWduZWQgaW50IG5hbWVfdHlwZTsKKyB1bnNpZ25lZCBpbnQgYmluZF90eXBlOworIHVuc2lnbmVkIGludCBmbGFnOworIH0gdTsKKworIHNob3J0IHZsYW5fcW9zOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg5NGUyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW4uaApAQCAtMCwwICsxLDIxMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSU5fSAorI2RlZmluZSBfTElOVVhfSU5fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4KKworZW51bSB7CisgSVBQUk9UT19JUCA9IDAsCisgSVBQUk9UT19JQ01QID0gMSwKKyBJUFBST1RPX0lHTVAgPSAyLAorIElQUFJPVE9fSVBJUCA9IDQsCisgSVBQUk9UT19UQ1AgPSA2LAorIElQUFJPVE9fRUdQID0gOCwKKyBJUFBST1RPX1BVUCA9IDEyLAorIElQUFJPVE9fVURQID0gMTcsCisgSVBQUk9UT19JRFAgPSAyMiwKKyBJUFBST1RPX0RDQ1AgPSAzMywKKyBJUFBST1RPX1JTVlAgPSA0NiwKKyBJUFBST1RPX0dSRSA9IDQ3LAorCisgSVBQUk9UT19JUFY2ID0gNDEsCisKKyBJUFBST1RPX0VTUCA9IDUwLAorIElQUFJPVE9fQUggPSA1MSwKKyBJUFBST1RPX1BJTSA9IDEwMywKKworIElQUFJPVE9fQ09NUCA9IDEwOCwKKyBJUFBST1RPX1NDVFAgPSAxMzIsCisKKyBJUFBST1RPX1JBVyA9IDI1NSwKKyBJUFBST1RPX01BWAorfTsKKworc3RydWN0IGluX2FkZHIgeworIF9fdTMyIHNfYWRkcjsKK307CisKKyNkZWZpbmUgSVBfVE9TIDEKKyNkZWZpbmUgSVBfVFRMIDIKKyNkZWZpbmUgSVBfSERSSU5DTCAzCisjZGVmaW5lIElQX09QVElPTlMgNAorI2RlZmluZSBJUF9ST1VURVJfQUxFUlQgNQorI2RlZmluZSBJUF9SRUNWT1BUUyA2CisjZGVmaW5lIElQX1JFVE9QVFMgNworI2RlZmluZSBJUF9QS1RJTkZPIDgKKyNkZWZpbmUgSVBfUEtUT1BUSU9OUyA5CisjZGVmaW5lIElQX01UVV9ESVNDT1ZFUiAxMAorI2RlZmluZSBJUF9SRUNWRVJSIDExCisjZGVmaW5lIElQX1JFQ1ZUVEwgMTIKKyNkZWZpbmUgSVBfUkVDVlRPUyAxMworI2RlZmluZSBJUF9NVFUgMTQKKyNkZWZpbmUgSVBfRlJFRUJJTkQgMTUKKyNkZWZpbmUgSVBfSVBTRUNfUE9MSUNZIDE2CisjZGVmaW5lIElQX1hGUk1fUE9MSUNZIDE3CisjZGVmaW5lIElQX1BBU1NTRUMgMTgKKworI2RlZmluZSBJUF9SRUNWUkVUT1BUUyBJUF9SRVRPUFRTCisKKyNkZWZpbmUgSVBfUE1UVURJU0NfRE9OVCAwICAKKyNkZWZpbmUgSVBfUE1UVURJU0NfV0FOVCAxICAKKyNkZWZpbmUgSVBfUE1UVURJU0NfRE8gMiAgCisKKyNkZWZpbmUgSVBfTVVMVElDQVNUX0lGIDMyCisjZGVmaW5lIElQX01VTFRJQ0FTVF9UVEwgMzMKKyNkZWZpbmUgSVBfTVVMVElDQVNUX0xPT1AgMzQKKyNkZWZpbmUgSVBfQUREX01FTUJFUlNISVAgMzUKKyNkZWZpbmUgSVBfRFJPUF9NRU1CRVJTSElQIDM2CisjZGVmaW5lIElQX1VOQkxPQ0tfU09VUkNFIDM3CisjZGVmaW5lIElQX0JMT0NLX1NPVVJDRSAzOAorI2RlZmluZSBJUF9BRERfU09VUkNFX01FTUJFUlNISVAgMzkKKyNkZWZpbmUgSVBfRFJPUF9TT1VSQ0VfTUVNQkVSU0hJUCA0MAorI2RlZmluZSBJUF9NU0ZJTFRFUiA0MQorI2RlZmluZSBNQ0FTVF9KT0lOX0dST1VQIDQyCisjZGVmaW5lIE1DQVNUX0JMT0NLX1NPVVJDRSA0MworI2RlZmluZSBNQ0FTVF9VTkJMT0NLX1NPVVJDRSA0NAorI2RlZmluZSBNQ0FTVF9MRUFWRV9HUk9VUCA0NQorI2RlZmluZSBNQ0FTVF9KT0lOX1NPVVJDRV9HUk9VUCA0NgorI2RlZmluZSBNQ0FTVF9MRUFWRV9TT1VSQ0VfR1JPVVAgNDcKKyNkZWZpbmUgTUNBU1RfTVNGSUxURVIgNDgKKworI2RlZmluZSBNQ0FTVF9FWENMVURFIDAKKyNkZWZpbmUgTUNBU1RfSU5DTFVERSAxCisKKyNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfVFRMIDEKKyNkZWZpbmUgSVBfREVGQVVMVF9NVUxUSUNBU1RfTE9PUCAxCisKK3N0cnVjdCBpcF9tcmVxCit7Cisgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKKyBzdHJ1Y3QgaW5fYWRkciBpbXJfaW50ZXJmYWNlOworfTsKKworc3RydWN0IGlwX21yZXFuCit7Cisgc3RydWN0IGluX2FkZHIgaW1yX211bHRpYWRkcjsKKyBzdHJ1Y3QgaW5fYWRkciBpbXJfYWRkcmVzczsKKyBpbnQgaW1yX2lmaW5kZXg7Cit9OworCitzdHJ1Y3QgaXBfbXJlcV9zb3VyY2UgeworIF9fdTMyIGltcl9tdWx0aWFkZHI7CisgX191MzIgaW1yX2ludGVyZmFjZTsKKyBfX3UzMiBpbXJfc291cmNlYWRkcjsKK307CisKK3N0cnVjdCBpcF9tc2ZpbHRlciB7CisgX191MzIgaW1zZl9tdWx0aWFkZHI7CisgX191MzIgaW1zZl9pbnRlcmZhY2U7CisgX191MzIgaW1zZl9mbW9kZTsKKyBfX3UzMiBpbXNmX251bXNyYzsKKyBfX3UzMiBpbXNmX3NsaXN0WzFdOworfTsKKworI2RlZmluZSBJUF9NU0ZJTFRFUl9TSVpFKG51bXNyYykgICAoc2l6ZW9mKHN0cnVjdCBpcF9tc2ZpbHRlcikgLSBzaXplb2YoX191MzIpICAgKyAobnVtc3JjKSAqIHNpemVvZihfX3UzMikpCisKK3N0cnVjdCBncm91cF9yZXEKK3sKKyBfX3UzMiBncl9pbnRlcmZhY2U7Cisgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3JfZ3JvdXA7Cit9OworCitzdHJ1Y3QgZ3JvdXBfc291cmNlX3JlcQoreworIF9fdTMyIGdzcl9pbnRlcmZhY2U7Cisgc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UgZ3NyX2dyb3VwOworIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdzcl9zb3VyY2U7Cit9OworCitzdHJ1Y3QgZ3JvdXBfZmlsdGVyCit7CisgX191MzIgZ2ZfaW50ZXJmYWNlOworIHN0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIGdmX2dyb3VwOworIF9fdTMyIGdmX2Ztb2RlOworIF9fdTMyIGdmX251bXNyYzsKKyBzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSBnZl9zbGlzdFsxXTsKK307CisKKyNkZWZpbmUgR1JPVVBfRklMVEVSX1NJWkUobnVtc3JjKSAgIChzaXplb2Yoc3RydWN0IGdyb3VwX2ZpbHRlcikgLSBzaXplb2Yoc3RydWN0IF9fa2VybmVsX3NvY2thZGRyX3N0b3JhZ2UpICAgKyAobnVtc3JjKSAqIHNpemVvZihzdHJ1Y3QgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZSkpCisKK3N0cnVjdCBpbl9wa3RpbmZvCit7CisgaW50IGlwaV9pZmluZGV4OworIHN0cnVjdCBpbl9hZGRyIGlwaV9zcGVjX2RzdDsKKyBzdHJ1Y3QgaW5fYWRkciBpcGlfYWRkcjsKK307CisKKyNkZWZpbmUgX19TT0NLX1NJWkVfXyAxNiAgCitzdHJ1Y3Qgc29ja2FkZHJfaW4geworIHNhX2ZhbWlseV90IHNpbl9mYW1pbHk7CisgdW5zaWduZWQgc2hvcnQgaW50IHNpbl9wb3J0OworIHN0cnVjdCBpbl9hZGRyIHNpbl9hZGRyOworCisgdW5zaWduZWQgY2hhciBfX3BhZFtfX1NPQ0tfU0laRV9fIC0gc2l6ZW9mKHNob3J0IGludCkgLQorIHNpemVvZih1bnNpZ25lZCBzaG9ydCBpbnQpIC0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKV07Cit9OworI2RlZmluZSBzaW5femVybyBfX3BhZCAgCisKKyNkZWZpbmUgSU5fQ0xBU1NBKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ODAwMDAwMDApID09IDApCisjZGVmaW5lIElOX0NMQVNTQV9ORVQgMHhmZjAwMDAwMAorI2RlZmluZSBJTl9DTEFTU0FfTlNISUZUIDI0CisjZGVmaW5lIElOX0NMQVNTQV9IT1NUICgweGZmZmZmZmZmICYgfklOX0NMQVNTQV9ORVQpCisjZGVmaW5lIElOX0NMQVNTQV9NQVggMTI4CisKKyNkZWZpbmUgSU5fQ0xBU1NCKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4YzAwMDAwMDApID09IDB4ODAwMDAwMDApCisjZGVmaW5lIElOX0NMQVNTQl9ORVQgMHhmZmZmMDAwMAorI2RlZmluZSBJTl9DTEFTU0JfTlNISUZUIDE2CisjZGVmaW5lIElOX0NMQVNTQl9IT1NUICgweGZmZmZmZmZmICYgfklOX0NMQVNTQl9ORVQpCisjZGVmaW5lIElOX0NMQVNTQl9NQVggNjU1MzYKKworI2RlZmluZSBJTl9DTEFTU0MoYSkgKCgoKGxvbmcgaW50KSAoYSkpICYgMHhlMDAwMDAwMCkgPT0gMHhjMDAwMDAwMCkKKyNkZWZpbmUgSU5fQ0xBU1NDX05FVCAweGZmZmZmZjAwCisjZGVmaW5lIElOX0NMQVNTQ19OU0hJRlQgOAorI2RlZmluZSBJTl9DTEFTU0NfSE9TVCAoMHhmZmZmZmZmZiAmIH5JTl9DTEFTU0NfTkVUKQorCisjZGVmaW5lIElOX0NMQVNTRChhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGYwMDAwMDAwKSA9PSAweGUwMDAwMDAwKQorI2RlZmluZSBJTl9NVUxUSUNBU1QoYSkgSU5fQ0xBU1NEKGEpCisjZGVmaW5lIElOX01VTFRJQ0FTVF9ORVQgMHhGMDAwMDAwMAorCisjZGVmaW5lIElOX0VYUEVSSU1FTlRBTChhKSAoKCgobG9uZyBpbnQpIChhKSkgJiAweGYwMDAwMDAwKSA9PSAweGYwMDAwMDAwKQorI2RlZmluZSBJTl9CQURDTEFTUyhhKSBJTl9FWFBFUklNRU5UQUwoKGEpKQorCisjZGVmaW5lIElOQUREUl9BTlkgKCh1bnNpZ25lZCBsb25nIGludCkgMHgwMDAwMDAwMCkKKworI2RlZmluZSBJTkFERFJfQlJPQURDQVNUICgodW5zaWduZWQgbG9uZyBpbnQpIDB4ZmZmZmZmZmYpCisKKyNkZWZpbmUgSU5BRERSX05PTkUgKCh1bnNpZ25lZCBsb25nIGludCkgMHhmZmZmZmZmZikKKworI2RlZmluZSBJTl9MT09QQkFDS05FVCAxMjcKKworI2RlZmluZSBJTkFERFJfTE9PUEJBQ0sgMHg3ZjAwMDAwMSAgCisjZGVmaW5lIElOX0xPT1BCQUNLKGEpICgoKChsb25nIGludCkgKGEpKSAmIDB4ZmYwMDAwMDApID09IDB4N2YwMDAwMDApCisKKyNkZWZpbmUgSU5BRERSX1VOU1BFQ19HUk9VUCAweGUwMDAwMDAwVSAgCisjZGVmaW5lIElOQUREUl9BTExIT1NUU19HUk9VUCAweGUwMDAwMDAxVSAgCisjZGVmaW5lIElOQUREUl9BTExSVFJTX0dST1VQIDB4ZTAwMDAwMDJVICAKKyNkZWZpbmUgSU5BRERSX01BWF9MT0NBTF9HUk9VUCAweGUwMDAwMGZmVSAgCisKKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+IAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbjYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZWFlYjdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2luNi5oCkBAIC0wLDAgKzEsMTU4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JTjZfSAorI2RlZmluZSBfTElOVVhfSU42X0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCBpbjZfYWRkcgoreworIHVuaW9uCisgeworIF9fdTggdTZfYWRkcjhbMTZdOworIF9fdTE2IHU2X2FkZHIxNls4XTsKKyBfX3UzMiB1Nl9hZGRyMzJbNF07CisgfSBpbjZfdTsKKyNkZWZpbmUgczZfYWRkciBpbjZfdS51Nl9hZGRyOAorI2RlZmluZSBzNl9hZGRyMTYgaW42X3UudTZfYWRkcjE2CisjZGVmaW5lIHM2X2FkZHIzMiBpbjZfdS51Nl9hZGRyMzIKK307CisKKyNkZWZpbmUgSU42QUREUl9MT09QQkFDS19JTklUIHsgeyB7IDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDEgfSB9IH0KKworc3RydWN0IHNvY2thZGRyX2luNiB7CisgdW5zaWduZWQgc2hvcnQgaW50IHNpbjZfZmFtaWx5OworIF9fdTE2IHNpbjZfcG9ydDsKKyBfX3UzMiBzaW42X2Zsb3dpbmZvOworIHN0cnVjdCBpbjZfYWRkciBzaW42X2FkZHI7CisgX191MzIgc2luNl9zY29wZV9pZDsKK307CisKK3N0cnVjdCBpcHY2X21yZXEgeworCisgc3RydWN0IGluNl9hZGRyIGlwdjZtcl9tdWx0aWFkZHI7CisKKyBpbnQgaXB2Nm1yX2lmaW5kZXg7Cit9OworCisjZGVmaW5lIGlwdjZtcl9hY2FkZHIgaXB2Nm1yX211bHRpYWRkcgorCitzdHJ1Y3QgaW42X2Zsb3dsYWJlbF9yZXEKK3sKKyBzdHJ1Y3QgaW42X2FkZHIgZmxyX2RzdDsKKyBfX3UzMiBmbHJfbGFiZWw7CisgX191OCBmbHJfYWN0aW9uOworIF9fdTggZmxyX3NoYXJlOworIF9fdTE2IGZscl9mbGFnczsKKyBfX3UxNiBmbHJfZXhwaXJlczsKKyBfX3UxNiBmbHJfbGluZ2VyOworIF9fdTMyIF9fZmxyX3BhZDsKKworfTsKKworI2RlZmluZSBJUFY2X0ZMX0FfR0VUIDAKKyNkZWZpbmUgSVBWNl9GTF9BX1BVVCAxCisjZGVmaW5lIElQVjZfRkxfQV9SRU5FVyAyCisKKyNkZWZpbmUgSVBWNl9GTF9GX0NSRUFURSAxCisjZGVmaW5lIElQVjZfRkxfRl9FWENMIDIKKworI2RlZmluZSBJUFY2X0ZMX1NfTk9ORSAwCisjZGVmaW5lIElQVjZfRkxfU19FWENMIDEKKyNkZWZpbmUgSVBWNl9GTF9TX1BST0NFU1MgMgorI2RlZmluZSBJUFY2X0ZMX1NfVVNFUiAzCisjZGVmaW5lIElQVjZfRkxfU19BTlkgMjU1CisKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19GTE9XTEFCRUwgMHgwMDBmZmZmZgorI2RlZmluZSBJUFY2X0ZMT1dJTkZPX1BSSU9SSVRZIDB4MGZmMDAwMDAKKworI2RlZmluZSBJUFY2X1BSSU9SSVRZX1VOQ0hBUkFDVEVSSVpFRCAweDAwMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9GSUxMRVIgMHgwMTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfVU5BVFRFTkRFRCAweDAyMDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9SRVNFUlZFRDEgMHgwMzAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfQlVMSyAweDA0MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV9SRVNFUlZFRDIgMHgwNTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfSU5URVJBQ1RJVkUgMHgwNjAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfQ09OVFJPTCAweDA3MDAKKyNkZWZpbmUgSVBWNl9QUklPUklUWV84IDB4MDgwMAorI2RlZmluZSBJUFY2X1BSSU9SSVRZXzkgMHgwOTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTAgMHgwYTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTEgMHgwYjAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTIgMHgwYzAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTMgMHgwZDAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTQgMHgwZTAwCisjZGVmaW5lIElQVjZfUFJJT1JJVFlfMTUgMHgwZjAwCisKKyNkZWZpbmUgSVBQUk9UT19IT1BPUFRTIDAgIAorI2RlZmluZSBJUFBST1RPX1JPVVRJTkcgNDMgIAorI2RlZmluZSBJUFBST1RPX0ZSQUdNRU5UIDQ0ICAKKyNkZWZpbmUgSVBQUk9UT19JQ01QVjYgNTggIAorI2RlZmluZSBJUFBST1RPX05PTkUgNTkgIAorI2RlZmluZSBJUFBST1RPX0RTVE9QVFMgNjAgIAorCisjZGVmaW5lIElQVjZfVExWX1BBRDAgMAorI2RlZmluZSBJUFY2X1RMVl9QQUROIDEKKyNkZWZpbmUgSVBWNl9UTFZfUk9VVEVSQUxFUlQgNQorI2RlZmluZSBJUFY2X1RMVl9KVU1CTyAxOTQKKworI2RlZmluZSBJUFY2X0FERFJGT1JNIDEKKyNkZWZpbmUgSVBWNl8yMjkyUEtUSU5GTyAyCisjZGVmaW5lIElQVjZfMjI5MkhPUE9QVFMgMworI2RlZmluZSBJUFY2XzIyOTJEU1RPUFRTIDQKKyNkZWZpbmUgSVBWNl8yMjkyUlRIRFIgNQorI2RlZmluZSBJUFY2XzIyOTJQS1RPUFRJT05TIDYKKyNkZWZpbmUgSVBWNl9DSEVDS1NVTSA3CisjZGVmaW5lIElQVjZfMjI5MkhPUExJTUlUIDgKKyNkZWZpbmUgSVBWNl9ORVhUSE9QIDkKKyNkZWZpbmUgSVBWNl9BVVRISERSIDEwICAKKyNkZWZpbmUgSVBWNl9GTE9XSU5GTyAxMQorCisjZGVmaW5lIElQVjZfVU5JQ0FTVF9IT1BTIDE2CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0lGIDE3CisjZGVmaW5lIElQVjZfTVVMVElDQVNUX0hPUFMgMTgKKyNkZWZpbmUgSVBWNl9NVUxUSUNBU1RfTE9PUCAxOQorI2RlZmluZSBJUFY2X0FERF9NRU1CRVJTSElQIDIwCisjZGVmaW5lIElQVjZfRFJPUF9NRU1CRVJTSElQIDIxCisjZGVmaW5lIElQVjZfUk9VVEVSX0FMRVJUIDIyCisjZGVmaW5lIElQVjZfTVRVX0RJU0NPVkVSIDIzCisjZGVmaW5lIElQVjZfTVRVIDI0CisjZGVmaW5lIElQVjZfUkVDVkVSUiAyNQorI2RlZmluZSBJUFY2X1Y2T05MWSAyNgorI2RlZmluZSBJUFY2X0pPSU5fQU5ZQ0FTVCAyNworI2RlZmluZSBJUFY2X0xFQVZFX0FOWUNBU1QgMjgKKworI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPTlQgMAorI2RlZmluZSBJUFY2X1BNVFVESVNDX1dBTlQgMQorI2RlZmluZSBJUFY2X1BNVFVESVNDX0RPIDIKKworI2RlZmluZSBJUFY2X0ZMT1dMQUJFTF9NR1IgMzIKKyNkZWZpbmUgSVBWNl9GTE9XSU5GT19TRU5EIDMzCisKKyNkZWZpbmUgSVBWNl9JUFNFQ19QT0xJQ1kgMzQKKyNkZWZpbmUgSVBWNl9YRlJNX1BPTElDWSAzNQorCisjZGVmaW5lIElQVjZfUkVDVlBLVElORk8gNDkKKyNkZWZpbmUgSVBWNl9QS1RJTkZPIDUwCisjZGVmaW5lIElQVjZfUkVDVkhPUExJTUlUIDUxCisjZGVmaW5lIElQVjZfSE9QTElNSVQgNTIKKyNkZWZpbmUgSVBWNl9SRUNWSE9QT1BUUyA1MworI2RlZmluZSBJUFY2X0hPUE9QVFMgNTQKKyNkZWZpbmUgSVBWNl9SVEhEUkRTVE9QVFMgNTUKKyNkZWZpbmUgSVBWNl9SRUNWUlRIRFIgNTYKKyNkZWZpbmUgSVBWNl9SVEhEUiA1NworI2RlZmluZSBJUFY2X1JFQ1ZEU1RPUFRTIDU4CisjZGVmaW5lIElQVjZfRFNUT1BUUyA1OQorCisjZGVmaW5lIElQVjZfUkVDVlRDTEFTUyA2NgorI2RlZmluZSBJUFY2X1RDTEFTUyA2NworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbml0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0NmM0ZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5pdC5oCkBAIC0wLDAgKzEsMTM3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JTklUX0gKKyNkZWZpbmUgX0xJTlVYX0lOSVRfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBfX2luaXQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLmluaXQudGV4dCIpKSkKKyNkZWZpbmUgX19pbml0ZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuaW5pdC5kYXRhIikpKQorI2RlZmluZSBfX2V4aXRkYXRhIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQuZGF0YSIpKSkKKyNkZWZpbmUgX19leGl0X2NhbGwgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5leGl0Y2FsbC5leGl0IikpKQorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZXhpdCBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18oIi5leGl0LnRleHQiKSkpCisjZWxzZQorI2RlZmluZSBfX2V4aXQgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXygiLmV4aXQudGV4dCIpKSkKKyNlbmRpZgorCisjZGVmaW5lIF9fSU5JVCAuc2VjdGlvbiAiLmluaXQudGV4dCIsImF4IgorI2RlZmluZSBfX0ZJTklUIC5wcmV2aW91cworI2RlZmluZSBfX0lOSVREQVRBIC5zZWN0aW9uICIuaW5pdC5kYXRhIiwiYXciCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK3R5cGVkZWYgaW50ICgqaW5pdGNhbGxfdCkodm9pZCk7Cit0eXBlZGVmIHZvaWQgKCpleGl0Y2FsbF90KSh2b2lkKTsKKworI2VuZGlmCisKKyNpZm5kZWYgTU9EVUxFCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKKyNkZWZpbmUgX19kZWZpbmVfaW5pdGNhbGwobGV2ZWwsZm4pICAgc3RhdGljIGluaXRjYWxsX3QgX19pbml0Y2FsbF8jI2ZuIF9fYXR0cmlidXRlX3VzZWRfXyAgIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuaW5pdGNhbGwiIGxldmVsICIuaW5pdCIpKSkgPSBmbgorCisjZGVmaW5lIGNvcmVfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCIxIixmbikKKyNkZWZpbmUgcG9zdGNvcmVfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCIyIixmbikKKyNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikgX19kZWZpbmVfaW5pdGNhbGwoIjMiLGZuKQorI2RlZmluZSBzdWJzeXNfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCI0IixmbikKKyNkZWZpbmUgZnNfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCI1IixmbikKKyNkZWZpbmUgZGV2aWNlX2luaXRjYWxsKGZuKSBfX2RlZmluZV9pbml0Y2FsbCgiNiIsZm4pCisjZGVmaW5lIGxhdGVfaW5pdGNhbGwoZm4pIF9fZGVmaW5lX2luaXRjYWxsKCI3IixmbikKKworI2RlZmluZSBfX2luaXRjYWxsKGZuKSBkZXZpY2VfaW5pdGNhbGwoZm4pCisKKyNkZWZpbmUgX19leGl0Y2FsbChmbikgICBzdGF0aWMgZXhpdGNhbGxfdCBfX2V4aXRjYWxsXyMjZm4gX19leGl0X2NhbGwgPSBmbgorCisjZGVmaW5lIGNvbnNvbGVfaW5pdGNhbGwoZm4pICAgc3RhdGljIGluaXRjYWxsX3QgX19pbml0Y2FsbF8jI2ZuICAgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuY29uX2luaXRjYWxsLmluaXQiKSkpPWZuCisKKyNkZWZpbmUgc2VjdXJpdHlfaW5pdGNhbGwoZm4pICAgc3RhdGljIGluaXRjYWxsX3QgX19pbml0Y2FsbF8jI2ZuICAgX19hdHRyaWJ1dGVfdXNlZF9fIF9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIuc2VjdXJpdHlfaW5pdGNhbGwuaW5pdCIpKSkgPSBmbgorCitzdHJ1Y3Qgb2JzX2tlcm5lbF9wYXJhbSB7CisgY29uc3QgY2hhciAqc3RyOworIGludCAoKnNldHVwX2Z1bmMpKGNoYXIgKik7CisgaW50IGVhcmx5OworfTsKKworI2RlZmluZSBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBmbiwgZWFybHkpICAgc3RhdGljIGNoYXIgX19zZXR1cF9zdHJfIyN1bmlxdWVfaWRbXSBfX2luaXRkYXRhID0gc3RyOyAgIHN0YXRpYyBzdHJ1Y3Qgb2JzX2tlcm5lbF9wYXJhbSBfX3NldHVwXyMjdW5pcXVlX2lkICAgX19hdHRyaWJ1dGVfdXNlZF9fICAgX19hdHRyaWJ1dGVfXygoX19zZWN0aW9uX18oIi5pbml0LnNldHVwIikpKSAgIF9fYXR0cmlidXRlX18oKGFsaWduZWQoKHNpemVvZihsb25nKSkpKSkgICA9IHsgX19zZXR1cF9zdHJfIyN1bmlxdWVfaWQsIGZuLCBlYXJseSB9CisKKyNkZWZpbmUgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgdW5pcXVlX2lkKSAgIF9fc2V0dXBfcGFyYW0oc3RyLCB1bmlxdWVfaWQsIE5VTEwsIDApCisKKyNkZWZpbmUgX19zZXR1cChzdHIsIGZuKSAgIF9fc2V0dXBfcGFyYW0oc3RyLCBmbiwgZm4sIDApCisKKyNkZWZpbmUgX19vYnNvbGV0ZV9zZXR1cChzdHIpICAgX19zZXR1cF9udWxsX3BhcmFtKHN0ciwgX19MSU5FX18pCisKKyNkZWZpbmUgZWFybHlfcGFyYW0oc3RyLCBmbikgICBfX3NldHVwX3BhcmFtKHN0ciwgZm4sIGZuLCAxKQorCisjZW5kaWYKKworI2RlZmluZSBtb2R1bGVfaW5pdCh4KSBfX2luaXRjYWxsKHgpOworCisjZGVmaW5lIG1vZHVsZV9leGl0KHgpIF9fZXhpdGNhbGwoeCk7CisKKyNlbHNlCisKKyNkZWZpbmUgY29yZV9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIHBvc3Rjb3JlX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgYXJjaF9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIHN1YnN5c19pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisjZGVmaW5lIGZzX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgZGV2aWNlX2luaXRjYWxsKGZuKSBtb2R1bGVfaW5pdChmbikKKyNkZWZpbmUgbGF0ZV9pbml0Y2FsbChmbikgbW9kdWxlX2luaXQoZm4pCisKKyNkZWZpbmUgc2VjdXJpdHlfaW5pdGNhbGwoZm4pIG1vZHVsZV9pbml0KGZuKQorCisjZGVmaW5lIG1vZHVsZV9pbml0KGluaXRmbikgICBzdGF0aWMgaW5saW5lIGluaXRjYWxsX3QgX19pbml0dGVzdCh2b2lkKSAgIHsgcmV0dXJuIGluaXRmbjsgfSAgIGludCBpbml0X21vZHVsZSh2b2lkKSBfX2F0dHJpYnV0ZV9fKChhbGlhcygjaW5pdGZuKSkpOworCisjZGVmaW5lIG1vZHVsZV9leGl0KGV4aXRmbikgICBzdGF0aWMgaW5saW5lIGV4aXRjYWxsX3QgX19leGl0dGVzdCh2b2lkKSAgIHsgcmV0dXJuIGV4aXRmbjsgfSAgIHZvaWQgY2xlYW51cF9tb2R1bGUodm9pZCkgX19hdHRyaWJ1dGVfXygoYWxpYXMoI2V4aXRmbikpKTsKKworI2RlZmluZSBfX3NldHVwX3BhcmFtKHN0ciwgdW5pcXVlX2lkLCBmbikgIAorI2RlZmluZSBfX3NldHVwX251bGxfcGFyYW0oc3RyLCB1bmlxdWVfaWQpICAKKyNkZWZpbmUgX19zZXR1cChzdHIsIGZ1bmMpICAKKyNkZWZpbmUgX19vYnNvbGV0ZV9zZXR1cChzdHIpICAKKyNlbmRpZgorCisjZGVmaW5lIF9fbm9zYXZlZGF0YSBfX2F0dHJpYnV0ZV9fICgoX19zZWN0aW9uX18gKCIuZGF0YS5ub3NhdmUiKSkpCisKKyNkZWZpbmUgX19pbml0X29yX21vZHVsZSBfX2luaXQKKyNkZWZpbmUgX19pbml0ZGF0YV9vcl9tb2R1bGUgX19pbml0ZGF0YQorCisjZGVmaW5lIF9fZGV2aW5pdCBfX2luaXQKKyNkZWZpbmUgX19kZXZpbml0ZGF0YSBfX2luaXRkYXRhCisjZGVmaW5lIF9fZGV2ZXhpdCBfX2V4aXQKKyNkZWZpbmUgX19kZXZleGl0ZGF0YSBfX2V4aXRkYXRhCisKKyNkZWZpbmUgX19jcHVpbml0IF9faW5pdAorI2RlZmluZSBfX2NwdWluaXRkYXRhIF9faW5pdGRhdGEKKyNkZWZpbmUgX19jcHVleGl0IF9fZXhpdAorI2RlZmluZSBfX2NwdWV4aXRkYXRhIF9fZXhpdGRhdGEKKworI2RlZmluZSBfX21lbWluaXQgX19pbml0CisjZGVmaW5lIF9fbWVtaW5pdGRhdGEgX19pbml0ZGF0YQorI2RlZmluZSBfX21lbWV4aXQgX19leGl0CisjZGVmaW5lIF9fbWVtZXhpdGRhdGEgX19leGl0ZGF0YQorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZGV2ZXhpdF9wKHgpIHgKKyNlbHNlCisjZGVmaW5lIF9fZGV2ZXhpdF9wKHgpIE5VTEwKKyNlbmRpZgorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fZXhpdF9wKHgpIHgKKyNlbHNlCisjZGVmaW5lIF9fZXhpdF9wKHgpIE5VTEwKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbm90aWZ5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5vdGlmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiNTM0MTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5vdGlmeS5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lOT1RJRllfSAorI2RlZmluZSBfTElOVVhfSU5PVElGWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgaW5vdGlmeV9ldmVudCB7CisgX19zMzIgd2Q7CisgX191MzIgbWFzazsKKyBfX3UzMiBjb29raWU7CisgX191MzIgbGVuOworIGNoYXIgbmFtZVswXTsKK307CisKKyNkZWZpbmUgSU5fQUNDRVNTIDB4MDAwMDAwMDEgIAorI2RlZmluZSBJTl9NT0RJRlkgMHgwMDAwMDAwMiAgCisjZGVmaW5lIElOX0FUVFJJQiAweDAwMDAwMDA0ICAKKyNkZWZpbmUgSU5fQ0xPU0VfV1JJVEUgMHgwMDAwMDAwOCAgCisjZGVmaW5lIElOX0NMT1NFX05PV1JJVEUgMHgwMDAwMDAxMCAgCisjZGVmaW5lIElOX09QRU4gMHgwMDAwMDAyMCAgCisjZGVmaW5lIElOX01PVkVEX0ZST00gMHgwMDAwMDA0MCAgCisjZGVmaW5lIElOX01PVkVEX1RPIDB4MDAwMDAwODAgIAorI2RlZmluZSBJTl9DUkVBVEUgMHgwMDAwMDEwMCAgCisjZGVmaW5lIElOX0RFTEVURSAweDAwMDAwMjAwICAKKyNkZWZpbmUgSU5fREVMRVRFX1NFTEYgMHgwMDAwMDQwMCAgCisjZGVmaW5lIElOX01PVkVfU0VMRiAweDAwMDAwODAwICAKKworI2RlZmluZSBJTl9VTk1PVU5UIDB4MDAwMDIwMDAgIAorI2RlZmluZSBJTl9RX09WRVJGTE9XIDB4MDAwMDQwMDAgIAorI2RlZmluZSBJTl9JR05PUkVEIDB4MDAwMDgwMDAgIAorCisjZGVmaW5lIElOX0NMT1NFIChJTl9DTE9TRV9XUklURSB8IElOX0NMT1NFX05PV1JJVEUpICAKKyNkZWZpbmUgSU5fTU9WRSAoSU5fTU9WRURfRlJPTSB8IElOX01PVkVEX1RPKSAgCisKKyNkZWZpbmUgSU5fT05MWURJUiAweDAxMDAwMDAwICAKKyNkZWZpbmUgSU5fRE9OVF9GT0xMT1cgMHgwMjAwMDAwMCAgCisjZGVmaW5lIElOX01BU0tfQUREIDB4MjAwMDAwMDAgIAorI2RlZmluZSBJTl9JU0RJUiAweDQwMDAwMDAwICAKKyNkZWZpbmUgSU5fT05FU0hPVCAweDgwMDAwMDAwICAKKworI2RlZmluZSBJTl9BTExfRVZFTlRTIChJTl9BQ0NFU1MgfCBJTl9NT0RJRlkgfCBJTl9BVFRSSUIgfCBJTl9DTE9TRV9XUklURSB8ICAgSU5fQ0xPU0VfTk9XUklURSB8IElOX09QRU4gfCBJTl9NT1ZFRF9GUk9NIHwgICBJTl9NT1ZFRF9UTyB8IElOX0RFTEVURSB8IElOX0NSRUFURSB8IElOX0RFTEVURV9TRUxGIHwgICBJTl9NT1ZFX1NFTEYpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lucHV0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW5wdXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NmRhZTE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lucHV0LmgKQEAgLTAsMCArMSw3MTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lOUFVUX0gKKyNkZWZpbmUgX0lOUFVUX0gKKworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisKK3N0cnVjdCBpbnB1dF9ldmVudCB7Cisgc3RydWN0IHRpbWV2YWwgdGltZTsKKyBfX3UxNiB0eXBlOworIF9fdTE2IGNvZGU7CisgX19zMzIgdmFsdWU7Cit9OworCisjZGVmaW5lIEVWX1ZFUlNJT04gMHgwMTAwMDAKKworc3RydWN0IGlucHV0X2lkIHsKKyBfX3UxNiBidXN0eXBlOworIF9fdTE2IHZlbmRvcjsKKyBfX3UxNiBwcm9kdWN0OworIF9fdTE2IHZlcnNpb247Cit9OworCitzdHJ1Y3QgaW5wdXRfYWJzaW5mbyB7CisgX19zMzIgdmFsdWU7CisgX19zMzIgbWluaW11bTsKKyBfX3MzMiBtYXhpbXVtOworIF9fczMyIGZ1eno7CisgX19zMzIgZmxhdDsKK307CisKKyNkZWZpbmUgRVZJT0NHVkVSU0lPTiBfSU9SKCdFJywgMHgwMSwgaW50KSAgCisjZGVmaW5lIEVWSU9DR0lEIF9JT1IoJ0UnLCAweDAyLCBzdHJ1Y3QgaW5wdXRfaWQpICAKKyNkZWZpbmUgRVZJT0NHUkVQIF9JT1IoJ0UnLCAweDAzLCBpbnRbMl0pICAKKyNkZWZpbmUgRVZJT0NTUkVQIF9JT1coJ0UnLCAweDAzLCBpbnRbMl0pICAKKyNkZWZpbmUgRVZJT0NHS0VZQ09ERSBfSU9SKCdFJywgMHgwNCwgaW50WzJdKSAgCisjZGVmaW5lIEVWSU9DU0tFWUNPREUgX0lPVygnRScsIDB4MDQsIGludFsyXSkgIAorCisjZGVmaW5lIEVWSU9DR05BTUUobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDA2LCBsZW4pICAKKyNkZWZpbmUgRVZJT0NHUEhZUyhsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MDcsIGxlbikgIAorI2RlZmluZSBFVklPQ0dVTklRKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgwOCwgbGVuKSAgCisKKyNkZWZpbmUgRVZJT0NHS0VZKGxlbikgX0lPQyhfSU9DX1JFQUQsICdFJywgMHgxOCwgbGVuKSAgCisjZGVmaW5lIEVWSU9DR0xFRChsZW4pIF9JT0MoX0lPQ19SRUFELCAnRScsIDB4MTksIGxlbikgIAorI2RlZmluZSBFVklPQ0dTTkQobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDFhLCBsZW4pICAKKyNkZWZpbmUgRVZJT0NHU1cobGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDFiLCBsZW4pICAKKworI2RlZmluZSBFVklPQ0dCSVQoZXYsbGVuKSBfSU9DKF9JT0NfUkVBRCwgJ0UnLCAweDIwICsgZXYsIGxlbikgIAorI2RlZmluZSBFVklPQ0dBQlMoYWJzKSBfSU9SKCdFJywgMHg0MCArIGFicywgc3RydWN0IGlucHV0X2Fic2luZm8pICAKKyNkZWZpbmUgRVZJT0NTQUJTKGFicykgX0lPVygnRScsIDB4YzAgKyBhYnMsIHN0cnVjdCBpbnB1dF9hYnNpbmZvKSAgCisKKyNkZWZpbmUgRVZJT0NTRkYgX0lPQyhfSU9DX1dSSVRFLCAnRScsIDB4ODAsIHNpemVvZihzdHJ1Y3QgZmZfZWZmZWN0KSkgIAorI2RlZmluZSBFVklPQ1JNRkYgX0lPVygnRScsIDB4ODEsIGludCkgIAorI2RlZmluZSBFVklPQ0dFRkZFQ1RTIF9JT1IoJ0UnLCAweDg0LCBpbnQpICAKKworI2RlZmluZSBFVklPQ0dSQUIgX0lPVygnRScsIDB4OTAsIGludCkgIAorCisjZGVmaW5lIEVWX1NZTiAweDAwCisjZGVmaW5lIEVWX0tFWSAweDAxCisjZGVmaW5lIEVWX1JFTCAweDAyCisjZGVmaW5lIEVWX0FCUyAweDAzCisjZGVmaW5lIEVWX01TQyAweDA0CisjZGVmaW5lIEVWX1NXIDB4MDUKKyNkZWZpbmUgRVZfTEVEIDB4MTEKKyNkZWZpbmUgRVZfU05EIDB4MTIKKyNkZWZpbmUgRVZfUkVQIDB4MTQKKyNkZWZpbmUgRVZfRkYgMHgxNQorI2RlZmluZSBFVl9QV1IgMHgxNgorI2RlZmluZSBFVl9GRl9TVEFUVVMgMHgxNworI2RlZmluZSBFVl9NQVggMHgxZgorCisjZGVmaW5lIFNZTl9SRVBPUlQgMAorI2RlZmluZSBTWU5fQ09ORklHIDEKKworI2RlZmluZSBLRVlfUkVTRVJWRUQgMAorI2RlZmluZSBLRVlfRVNDIDEKKyNkZWZpbmUgS0VZXzEgMgorI2RlZmluZSBLRVlfMiAzCisjZGVmaW5lIEtFWV8zIDQKKyNkZWZpbmUgS0VZXzQgNQorI2RlZmluZSBLRVlfNSA2CisjZGVmaW5lIEtFWV82IDcKKyNkZWZpbmUgS0VZXzcgOAorI2RlZmluZSBLRVlfOCA5CisjZGVmaW5lIEtFWV85IDEwCisjZGVmaW5lIEtFWV8wIDExCisjZGVmaW5lIEtFWV9NSU5VUyAxMgorI2RlZmluZSBLRVlfRVFVQUwgMTMKKyNkZWZpbmUgS0VZX0JBQ0tTUEFDRSAxNAorI2RlZmluZSBLRVlfVEFCIDE1CisjZGVmaW5lIEtFWV9RIDE2CisjZGVmaW5lIEtFWV9XIDE3CisjZGVmaW5lIEtFWV9FIDE4CisjZGVmaW5lIEtFWV9SIDE5CisjZGVmaW5lIEtFWV9UIDIwCisjZGVmaW5lIEtFWV9ZIDIxCisjZGVmaW5lIEtFWV9VIDIyCisjZGVmaW5lIEtFWV9JIDIzCisjZGVmaW5lIEtFWV9PIDI0CisjZGVmaW5lIEtFWV9QIDI1CisjZGVmaW5lIEtFWV9MRUZUQlJBQ0UgMjYKKyNkZWZpbmUgS0VZX1JJR0hUQlJBQ0UgMjcKKyNkZWZpbmUgS0VZX0VOVEVSIDI4CisjZGVmaW5lIEtFWV9MRUZUQ1RSTCAyOQorI2RlZmluZSBLRVlfQSAzMAorI2RlZmluZSBLRVlfUyAzMQorI2RlZmluZSBLRVlfRCAzMgorI2RlZmluZSBLRVlfRiAzMworI2RlZmluZSBLRVlfRyAzNAorI2RlZmluZSBLRVlfSCAzNQorI2RlZmluZSBLRVlfSiAzNgorI2RlZmluZSBLRVlfSyAzNworI2RlZmluZSBLRVlfTCAzOAorI2RlZmluZSBLRVlfU0VNSUNPTE9OIDM5CisjZGVmaW5lIEtFWV9BUE9TVFJPUEhFIDQwCisjZGVmaW5lIEtFWV9HUkFWRSA0MQorI2RlZmluZSBLRVlfTEVGVFNISUZUIDQyCisjZGVmaW5lIEtFWV9CQUNLU0xBU0ggNDMKKyNkZWZpbmUgS0VZX1ogNDQKKyNkZWZpbmUgS0VZX1ggNDUKKyNkZWZpbmUgS0VZX0MgNDYKKyNkZWZpbmUgS0VZX1YgNDcKKyNkZWZpbmUgS0VZX0IgNDgKKyNkZWZpbmUgS0VZX04gNDkKKyNkZWZpbmUgS0VZX00gNTAKKyNkZWZpbmUgS0VZX0NPTU1BIDUxCisjZGVmaW5lIEtFWV9ET1QgNTIKKyNkZWZpbmUgS0VZX1NMQVNIIDUzCisjZGVmaW5lIEtFWV9SSUdIVFNISUZUIDU0CisjZGVmaW5lIEtFWV9LUEFTVEVSSVNLIDU1CisjZGVmaW5lIEtFWV9MRUZUQUxUIDU2CisjZGVmaW5lIEtFWV9TUEFDRSA1NworI2RlZmluZSBLRVlfQ0FQU0xPQ0sgNTgKKyNkZWZpbmUgS0VZX0YxIDU5CisjZGVmaW5lIEtFWV9GMiA2MAorI2RlZmluZSBLRVlfRjMgNjEKKyNkZWZpbmUgS0VZX0Y0IDYyCisjZGVmaW5lIEtFWV9GNSA2MworI2RlZmluZSBLRVlfRjYgNjQKKyNkZWZpbmUgS0VZX0Y3IDY1CisjZGVmaW5lIEtFWV9GOCA2NgorI2RlZmluZSBLRVlfRjkgNjcKKyNkZWZpbmUgS0VZX0YxMCA2OAorI2RlZmluZSBLRVlfTlVNTE9DSyA2OQorI2RlZmluZSBLRVlfU0NST0xMTE9DSyA3MAorI2RlZmluZSBLRVlfS1A3IDcxCisjZGVmaW5lIEtFWV9LUDggNzIKKyNkZWZpbmUgS0VZX0tQOSA3MworI2RlZmluZSBLRVlfS1BNSU5VUyA3NAorI2RlZmluZSBLRVlfS1A0IDc1CisjZGVmaW5lIEtFWV9LUDUgNzYKKyNkZWZpbmUgS0VZX0tQNiA3NworI2RlZmluZSBLRVlfS1BQTFVTIDc4CisjZGVmaW5lIEtFWV9LUDEgNzkKKyNkZWZpbmUgS0VZX0tQMiA4MAorI2RlZmluZSBLRVlfS1AzIDgxCisjZGVmaW5lIEtFWV9LUDAgODIKKyNkZWZpbmUgS0VZX0tQRE9UIDgzCisKKyNkZWZpbmUgS0VZX1pFTktBS1VIQU5LQUtVIDg1CisjZGVmaW5lIEtFWV8xMDJORCA4NgorI2RlZmluZSBLRVlfRjExIDg3CisjZGVmaW5lIEtFWV9GMTIgODgKKyNkZWZpbmUgS0VZX1JPIDg5CisjZGVmaW5lIEtFWV9LQVRBS0FOQSA5MAorI2RlZmluZSBLRVlfSElSQUdBTkEgOTEKKyNkZWZpbmUgS0VZX0hFTktBTiA5MgorI2RlZmluZSBLRVlfS0FUQUtBTkFISVJBR0FOQSA5MworI2RlZmluZSBLRVlfTVVIRU5LQU4gOTQKKyNkZWZpbmUgS0VZX0tQSlBDT01NQSA5NQorI2RlZmluZSBLRVlfS1BFTlRFUiA5NgorI2RlZmluZSBLRVlfUklHSFRDVFJMIDk3CisjZGVmaW5lIEtFWV9LUFNMQVNIIDk4CisjZGVmaW5lIEtFWV9TWVNSUSA5OQorI2RlZmluZSBLRVlfUklHSFRBTFQgMTAwCisjZGVmaW5lIEtFWV9MSU5FRkVFRCAxMDEKKyNkZWZpbmUgS0VZX0hPTUUgMTAyCisjZGVmaW5lIEtFWV9VUCAxMDMKKyNkZWZpbmUgS0VZX1BBR0VVUCAxMDQKKyNkZWZpbmUgS0VZX0xFRlQgMTA1CisjZGVmaW5lIEtFWV9SSUdIVCAxMDYKKyNkZWZpbmUgS0VZX0VORCAxMDcKKyNkZWZpbmUgS0VZX0RPV04gMTA4CisjZGVmaW5lIEtFWV9QQUdFRE9XTiAxMDkKKyNkZWZpbmUgS0VZX0lOU0VSVCAxMTAKKyNkZWZpbmUgS0VZX0RFTEVURSAxMTEKKyNkZWZpbmUgS0VZX01BQ1JPIDExMgorI2RlZmluZSBLRVlfTVVURSAxMTMKKyNkZWZpbmUgS0VZX1ZPTFVNRURPV04gMTE0CisjZGVmaW5lIEtFWV9WT0xVTUVVUCAxMTUKKyNkZWZpbmUgS0VZX1BPV0VSIDExNgorI2RlZmluZSBLRVlfS1BFUVVBTCAxMTcKKyNkZWZpbmUgS0VZX0tQUExVU01JTlVTIDExOAorI2RlZmluZSBLRVlfUEFVU0UgMTE5CisKKyNkZWZpbmUgS0VZX0tQQ09NTUEgMTIxCisjZGVmaW5lIEtFWV9IQU5HRVVMIDEyMgorI2RlZmluZSBLRVlfSEFOR1VFTCBLRVlfSEFOR0VVTAorI2RlZmluZSBLRVlfSEFOSkEgMTIzCisjZGVmaW5lIEtFWV9ZRU4gMTI0CisjZGVmaW5lIEtFWV9MRUZUTUVUQSAxMjUKKyNkZWZpbmUgS0VZX1JJR0hUTUVUQSAxMjYKKyNkZWZpbmUgS0VZX0NPTVBPU0UgMTI3CisKKyNkZWZpbmUgS0VZX1NUT1AgMTI4CisjZGVmaW5lIEtFWV9BR0FJTiAxMjkKKyNkZWZpbmUgS0VZX1BST1BTIDEzMAorI2RlZmluZSBLRVlfVU5ETyAxMzEKKyNkZWZpbmUgS0VZX0ZST05UIDEzMgorI2RlZmluZSBLRVlfQ09QWSAxMzMKKyNkZWZpbmUgS0VZX09QRU4gMTM0CisjZGVmaW5lIEtFWV9QQVNURSAxMzUKKyNkZWZpbmUgS0VZX0ZJTkQgMTM2CisjZGVmaW5lIEtFWV9DVVQgMTM3CisjZGVmaW5lIEtFWV9IRUxQIDEzOAorI2RlZmluZSBLRVlfTUVOVSAxMzkKKyNkZWZpbmUgS0VZX0NBTEMgMTQwCisjZGVmaW5lIEtFWV9TRVRVUCAxNDEKKyNkZWZpbmUgS0VZX1NMRUVQIDE0MgorI2RlZmluZSBLRVlfV0FLRVVQIDE0MworI2RlZmluZSBLRVlfRklMRSAxNDQKKyNkZWZpbmUgS0VZX1NFTkRGSUxFIDE0NQorI2RlZmluZSBLRVlfREVMRVRFRklMRSAxNDYKKyNkZWZpbmUgS0VZX1hGRVIgMTQ3CisjZGVmaW5lIEtFWV9QUk9HMSAxNDgKKyNkZWZpbmUgS0VZX1BST0cyIDE0OQorI2RlZmluZSBLRVlfV1dXIDE1MAorI2RlZmluZSBLRVlfTVNET1MgMTUxCisjZGVmaW5lIEtFWV9DT0ZGRUUgMTUyCisjZGVmaW5lIEtFWV9ESVJFQ1RJT04gMTUzCisjZGVmaW5lIEtFWV9DWUNMRVdJTkRPV1MgMTU0CisjZGVmaW5lIEtFWV9NQUlMIDE1NQorI2RlZmluZSBLRVlfQk9PS01BUktTIDE1NgorI2RlZmluZSBLRVlfQ09NUFVURVIgMTU3CisjZGVmaW5lIEtFWV9CQUNLIDE1OAorI2RlZmluZSBLRVlfRk9SV0FSRCAxNTkKKyNkZWZpbmUgS0VZX0NMT1NFQ0QgMTYwCisjZGVmaW5lIEtFWV9FSkVDVENEIDE2MQorI2RlZmluZSBLRVlfRUpFQ1RDTE9TRUNEIDE2MgorI2RlZmluZSBLRVlfTkVYVFNPTkcgMTYzCisjZGVmaW5lIEtFWV9QTEFZUEFVU0UgMTY0CisjZGVmaW5lIEtFWV9QUkVWSU9VU1NPTkcgMTY1CisjZGVmaW5lIEtFWV9TVE9QQ0QgMTY2CisjZGVmaW5lIEtFWV9SRUNPUkQgMTY3CisjZGVmaW5lIEtFWV9SRVdJTkQgMTY4CisjZGVmaW5lIEtFWV9QSE9ORSAxNjkKKyNkZWZpbmUgS0VZX0lTTyAxNzAKKyNkZWZpbmUgS0VZX0NPTkZJRyAxNzEKKyNkZWZpbmUgS0VZX0hPTUVQQUdFIDE3MgorI2RlZmluZSBLRVlfUkVGUkVTSCAxNzMKKyNkZWZpbmUgS0VZX0VYSVQgMTc0CisjZGVmaW5lIEtFWV9NT1ZFIDE3NQorI2RlZmluZSBLRVlfRURJVCAxNzYKKyNkZWZpbmUgS0VZX1NDUk9MTFVQIDE3NworI2RlZmluZSBLRVlfU0NST0xMRE9XTiAxNzgKKyNkZWZpbmUgS0VZX0tQTEVGVFBBUkVOIDE3OQorI2RlZmluZSBLRVlfS1BSSUdIVFBBUkVOIDE4MAorI2RlZmluZSBLRVlfTkVXIDE4MQorI2RlZmluZSBLRVlfUkVETyAxODIKKworI2RlZmluZSBLRVlfRjEzIDE4MworI2RlZmluZSBLRVlfRjE0IDE4NAorI2RlZmluZSBLRVlfRjE1IDE4NQorI2RlZmluZSBLRVlfRjE2IDE4NgorI2RlZmluZSBLRVlfRjE3IDE4NworI2RlZmluZSBLRVlfRjE4IDE4OAorI2RlZmluZSBLRVlfRjE5IDE4OQorI2RlZmluZSBLRVlfRjIwIDE5MAorI2RlZmluZSBLRVlfRjIxIDE5MQorI2RlZmluZSBLRVlfRjIyIDE5MgorI2RlZmluZSBLRVlfRjIzIDE5MworI2RlZmluZSBLRVlfRjI0IDE5NAorCisjZGVmaW5lIEtFWV9QTEFZQ0QgMjAwCisjZGVmaW5lIEtFWV9QQVVTRUNEIDIwMQorI2RlZmluZSBLRVlfUFJPRzMgMjAyCisjZGVmaW5lIEtFWV9QUk9HNCAyMDMKKyNkZWZpbmUgS0VZX1NVU1BFTkQgMjA1CisjZGVmaW5lIEtFWV9DTE9TRSAyMDYKKyNkZWZpbmUgS0VZX1BMQVkgMjA3CisjZGVmaW5lIEtFWV9GQVNURk9SV0FSRCAyMDgKKyNkZWZpbmUgS0VZX0JBU1NCT09TVCAyMDkKKyNkZWZpbmUgS0VZX1BSSU5UIDIxMAorI2RlZmluZSBLRVlfSFAgMjExCisjZGVmaW5lIEtFWV9DQU1FUkEgMjEyCisjZGVmaW5lIEtFWV9TT1VORCAyMTMKKyNkZWZpbmUgS0VZX1FVRVNUSU9OIDIxNAorI2RlZmluZSBLRVlfRU1BSUwgMjE1CisjZGVmaW5lIEtFWV9DSEFUIDIxNgorI2RlZmluZSBLRVlfU0VBUkNIIDIxNworI2RlZmluZSBLRVlfQ09OTkVDVCAyMTgKKyNkZWZpbmUgS0VZX0ZJTkFOQ0UgMjE5CisjZGVmaW5lIEtFWV9TUE9SVCAyMjAKKyNkZWZpbmUgS0VZX1NIT1AgMjIxCisjZGVmaW5lIEtFWV9BTFRFUkFTRSAyMjIKKyNkZWZpbmUgS0VZX0NBTkNFTCAyMjMKKyNkZWZpbmUgS0VZX0JSSUdIVE5FU1NET1dOIDIyNAorI2RlZmluZSBLRVlfQlJJR0hUTkVTU1VQIDIyNQorI2RlZmluZSBLRVlfTUVESUEgMjI2CisKKyNkZWZpbmUgS0VZX1NUQVIgMjI3CisjZGVmaW5lIEtFWV9TSEFSUCAyMjgKKyNkZWZpbmUgS0VZX1NPRlQxIDIyOQorI2RlZmluZSBLRVlfU09GVDIgMjMwCisjZGVmaW5lIEtFWV9TRU5EIDIzMQorI2RlZmluZSBLRVlfQ0VOVEVSIDIzMgorI2RlZmluZSBLRVlfSEVBRFNFVEhPT0sgMjMzCisjZGVmaW5lIEtFWV8wXzUgMjM0CisjZGVmaW5lIEtFWV8yXzUgMjM1CisKKyNkZWZpbmUgS0VZX1NXSVRDSFZJREVPTU9ERSAyMzYKKyNkZWZpbmUgS0VZX0tCRElMTFVNVE9HR0xFIDIzNworI2RlZmluZSBLRVlfS0JESUxMVU1ET1dOIDIzOAorI2RlZmluZSBLRVlfS0JESUxMVU1VUCAyMzkKKworI2RlZmluZSBLRVlfU0VORCAyMzEKKyNkZWZpbmUgS0VZX1JFUExZIDIzMgorI2RlZmluZSBLRVlfRk9SV0FSRE1BSUwgMjMzCisjZGVmaW5lIEtFWV9TQVZFIDIzNAorI2RlZmluZSBLRVlfRE9DVU1FTlRTIDIzNQorCisjZGVmaW5lIEtFWV9CQVRURVJZIDIzNgorCisjZGVmaW5lIEtFWV9VTktOT1dOIDI0MAorCisjZGVmaW5lIEJUTl9NSVNDIDB4MTAwCisjZGVmaW5lIEJUTl8wIDB4MTAwCisjZGVmaW5lIEJUTl8xIDB4MTAxCisjZGVmaW5lIEJUTl8yIDB4MTAyCisjZGVmaW5lIEJUTl8zIDB4MTAzCisjZGVmaW5lIEJUTl80IDB4MTA0CisjZGVmaW5lIEJUTl81IDB4MTA1CisjZGVmaW5lIEJUTl82IDB4MTA2CisjZGVmaW5lIEJUTl83IDB4MTA3CisjZGVmaW5lIEJUTl84IDB4MTA4CisjZGVmaW5lIEJUTl85IDB4MTA5CisKKyNkZWZpbmUgQlROX01PVVNFIDB4MTEwCisjZGVmaW5lIEJUTl9MRUZUIDB4MTEwCisjZGVmaW5lIEJUTl9SSUdIVCAweDExMQorI2RlZmluZSBCVE5fTUlERExFIDB4MTEyCisjZGVmaW5lIEJUTl9TSURFIDB4MTEzCisjZGVmaW5lIEJUTl9FWFRSQSAweDExNAorI2RlZmluZSBCVE5fRk9SV0FSRCAweDExNQorI2RlZmluZSBCVE5fQkFDSyAweDExNgorI2RlZmluZSBCVE5fVEFTSyAweDExNworCisjZGVmaW5lIEJUTl9KT1lTVElDSyAweDEyMAorI2RlZmluZSBCVE5fVFJJR0dFUiAweDEyMAorI2RlZmluZSBCVE5fVEhVTUIgMHgxMjEKKyNkZWZpbmUgQlROX1RIVU1CMiAweDEyMgorI2RlZmluZSBCVE5fVE9QIDB4MTIzCisjZGVmaW5lIEJUTl9UT1AyIDB4MTI0CisjZGVmaW5lIEJUTl9QSU5LSUUgMHgxMjUKKyNkZWZpbmUgQlROX0JBU0UgMHgxMjYKKyNkZWZpbmUgQlROX0JBU0UyIDB4MTI3CisjZGVmaW5lIEJUTl9CQVNFMyAweDEyOAorI2RlZmluZSBCVE5fQkFTRTQgMHgxMjkKKyNkZWZpbmUgQlROX0JBU0U1IDB4MTJhCisjZGVmaW5lIEJUTl9CQVNFNiAweDEyYgorI2RlZmluZSBCVE5fREVBRCAweDEyZgorCisjZGVmaW5lIEJUTl9HQU1FUEFEIDB4MTMwCisjZGVmaW5lIEJUTl9BIDB4MTMwCisjZGVmaW5lIEJUTl9CIDB4MTMxCisjZGVmaW5lIEJUTl9DIDB4MTMyCisjZGVmaW5lIEJUTl9YIDB4MTMzCisjZGVmaW5lIEJUTl9ZIDB4MTM0CisjZGVmaW5lIEJUTl9aIDB4MTM1CisjZGVmaW5lIEJUTl9UTCAweDEzNgorI2RlZmluZSBCVE5fVFIgMHgxMzcKKyNkZWZpbmUgQlROX1RMMiAweDEzOAorI2RlZmluZSBCVE5fVFIyIDB4MTM5CisjZGVmaW5lIEJUTl9TRUxFQ1QgMHgxM2EKKyNkZWZpbmUgQlROX1NUQVJUIDB4MTNiCisjZGVmaW5lIEJUTl9NT0RFIDB4MTNjCisjZGVmaW5lIEJUTl9USFVNQkwgMHgxM2QKKyNkZWZpbmUgQlROX1RIVU1CUiAweDEzZQorCisjZGVmaW5lIEJUTl9ESUdJIDB4MTQwCisjZGVmaW5lIEJUTl9UT09MX1BFTiAweDE0MAorI2RlZmluZSBCVE5fVE9PTF9SVUJCRVIgMHgxNDEKKyNkZWZpbmUgQlROX1RPT0xfQlJVU0ggMHgxNDIKKyNkZWZpbmUgQlROX1RPT0xfUEVOQ0lMIDB4MTQzCisjZGVmaW5lIEJUTl9UT09MX0FJUkJSVVNIIDB4MTQ0CisjZGVmaW5lIEJUTl9UT09MX0ZJTkdFUiAweDE0NQorI2RlZmluZSBCVE5fVE9PTF9NT1VTRSAweDE0NgorI2RlZmluZSBCVE5fVE9PTF9MRU5TIDB4MTQ3CisjZGVmaW5lIEJUTl9UT1VDSCAweDE0YQorI2RlZmluZSBCVE5fU1RZTFVTIDB4MTRiCisjZGVmaW5lIEJUTl9TVFlMVVMyIDB4MTRjCisjZGVmaW5lIEJUTl9UT09MX0RPVUJMRVRBUCAweDE0ZAorI2RlZmluZSBCVE5fVE9PTF9UUklQTEVUQVAgMHgxNGUKKworI2RlZmluZSBCVE5fV0hFRUwgMHgxNTAKKyNkZWZpbmUgQlROX0dFQVJfRE9XTiAweDE1MAorI2RlZmluZSBCVE5fR0VBUl9VUCAweDE1MQorCisjZGVmaW5lIEtFWV9PSyAweDE2MAorI2RlZmluZSBLRVlfU0VMRUNUIDB4MTYxCisjZGVmaW5lIEtFWV9HT1RPIDB4MTYyCisjZGVmaW5lIEtFWV9DTEVBUiAweDE2MworI2RlZmluZSBLRVlfUE9XRVIyIDB4MTY0CisjZGVmaW5lIEtFWV9PUFRJT04gMHgxNjUKKyNkZWZpbmUgS0VZX0lORk8gMHgxNjYKKyNkZWZpbmUgS0VZX1RJTUUgMHgxNjcKKyNkZWZpbmUgS0VZX1ZFTkRPUiAweDE2OAorI2RlZmluZSBLRVlfQVJDSElWRSAweDE2OQorI2RlZmluZSBLRVlfUFJPR1JBTSAweDE2YQorI2RlZmluZSBLRVlfQ0hBTk5FTCAweDE2YgorI2RlZmluZSBLRVlfRkFWT1JJVEVTIDB4MTZjCisjZGVmaW5lIEtFWV9FUEcgMHgxNmQKKyNkZWZpbmUgS0VZX1BWUiAweDE2ZQorI2RlZmluZSBLRVlfTUhQIDB4MTZmCisjZGVmaW5lIEtFWV9MQU5HVUFHRSAweDE3MAorI2RlZmluZSBLRVlfVElUTEUgMHgxNzEKKyNkZWZpbmUgS0VZX1NVQlRJVExFIDB4MTcyCisjZGVmaW5lIEtFWV9BTkdMRSAweDE3MworI2RlZmluZSBLRVlfWk9PTSAweDE3NAorI2RlZmluZSBLRVlfTU9ERSAweDE3NQorI2RlZmluZSBLRVlfS0VZQk9BUkQgMHgxNzYKKyNkZWZpbmUgS0VZX1NDUkVFTiAweDE3NworI2RlZmluZSBLRVlfUEMgMHgxNzgKKyNkZWZpbmUgS0VZX1RWIDB4MTc5CisjZGVmaW5lIEtFWV9UVjIgMHgxN2EKKyNkZWZpbmUgS0VZX1ZDUiAweDE3YgorI2RlZmluZSBLRVlfVkNSMiAweDE3YworI2RlZmluZSBLRVlfU0FUIDB4MTdkCisjZGVmaW5lIEtFWV9TQVQyIDB4MTdlCisjZGVmaW5lIEtFWV9DRCAweDE3ZgorI2RlZmluZSBLRVlfVEFQRSAweDE4MAorI2RlZmluZSBLRVlfUkFESU8gMHgxODEKKyNkZWZpbmUgS0VZX1RVTkVSIDB4MTgyCisjZGVmaW5lIEtFWV9QTEFZRVIgMHgxODMKKyNkZWZpbmUgS0VZX1RFWFQgMHgxODQKKyNkZWZpbmUgS0VZX0RWRCAweDE4NQorI2RlZmluZSBLRVlfQVVYIDB4MTg2CisjZGVmaW5lIEtFWV9NUDMgMHgxODcKKyNkZWZpbmUgS0VZX0FVRElPIDB4MTg4CisjZGVmaW5lIEtFWV9WSURFTyAweDE4OQorI2RlZmluZSBLRVlfRElSRUNUT1JZIDB4MThhCisjZGVmaW5lIEtFWV9MSVNUIDB4MThiCisjZGVmaW5lIEtFWV9NRU1PIDB4MThjCisjZGVmaW5lIEtFWV9DQUxFTkRBUiAweDE4ZAorI2RlZmluZSBLRVlfUkVEIDB4MThlCisjZGVmaW5lIEtFWV9HUkVFTiAweDE4ZgorI2RlZmluZSBLRVlfWUVMTE9XIDB4MTkwCisjZGVmaW5lIEtFWV9CTFVFIDB4MTkxCisjZGVmaW5lIEtFWV9DSEFOTkVMVVAgMHgxOTIKKyNkZWZpbmUgS0VZX0NIQU5ORUxET1dOIDB4MTkzCisjZGVmaW5lIEtFWV9GSVJTVCAweDE5NAorI2RlZmluZSBLRVlfTEFTVCAweDE5NQorI2RlZmluZSBLRVlfQUIgMHgxOTYKKyNkZWZpbmUgS0VZX05FWFQgMHgxOTcKKyNkZWZpbmUgS0VZX1JFU1RBUlQgMHgxOTgKKyNkZWZpbmUgS0VZX1NMT1cgMHgxOTkKKyNkZWZpbmUgS0VZX1NIVUZGTEUgMHgxOWEKKyNkZWZpbmUgS0VZX0JSRUFLIDB4MTliCisjZGVmaW5lIEtFWV9QUkVWSU9VUyAweDE5YworI2RlZmluZSBLRVlfRElHSVRTIDB4MTlkCisjZGVmaW5lIEtFWV9URUVOIDB4MTllCisjZGVmaW5lIEtFWV9UV0VOIDB4MTlmCisKKyNkZWZpbmUgS0VZX0RFTF9FT0wgMHgxYzAKKyNkZWZpbmUgS0VZX0RFTF9FT1MgMHgxYzEKKyNkZWZpbmUgS0VZX0lOU19MSU5FIDB4MWMyCisjZGVmaW5lIEtFWV9ERUxfTElORSAweDFjMworCisjZGVmaW5lIEtFWV9GTiAweDFkMAorI2RlZmluZSBLRVlfRk5fRVNDIDB4MWQxCisjZGVmaW5lIEtFWV9GTl9GMSAweDFkMgorI2RlZmluZSBLRVlfRk5fRjIgMHgxZDMKKyNkZWZpbmUgS0VZX0ZOX0YzIDB4MWQ0CisjZGVmaW5lIEtFWV9GTl9GNCAweDFkNQorI2RlZmluZSBLRVlfRk5fRjUgMHgxZDYKKyNkZWZpbmUgS0VZX0ZOX0Y2IDB4MWQ3CisjZGVmaW5lIEtFWV9GTl9GNyAweDFkOAorI2RlZmluZSBLRVlfRk5fRjggMHgxZDkKKyNkZWZpbmUgS0VZX0ZOX0Y5IDB4MWRhCisjZGVmaW5lIEtFWV9GTl9GMTAgMHgxZGIKKyNkZWZpbmUgS0VZX0ZOX0YxMSAweDFkYworI2RlZmluZSBLRVlfRk5fRjEyIDB4MWRkCisjZGVmaW5lIEtFWV9GTl8xIDB4MWRlCisjZGVmaW5lIEtFWV9GTl8yIDB4MWRmCisjZGVmaW5lIEtFWV9GTl9EIDB4MWUwCisjZGVmaW5lIEtFWV9GTl9FIDB4MWUxCisjZGVmaW5lIEtFWV9GTl9GIDB4MWUyCisjZGVmaW5lIEtFWV9GTl9TIDB4MWUzCisjZGVmaW5lIEtFWV9GTl9CIDB4MWU0CisKKyNkZWZpbmUgS0VZX0JSTF9ET1QxIDB4MWYxCisjZGVmaW5lIEtFWV9CUkxfRE9UMiAweDFmMgorI2RlZmluZSBLRVlfQlJMX0RPVDMgMHgxZjMKKyNkZWZpbmUgS0VZX0JSTF9ET1Q0IDB4MWY0CisjZGVmaW5lIEtFWV9CUkxfRE9UNSAweDFmNQorI2RlZmluZSBLRVlfQlJMX0RPVDYgMHgxZjYKKyNkZWZpbmUgS0VZX0JSTF9ET1Q3IDB4MWY3CisjZGVmaW5lIEtFWV9CUkxfRE9UOCAweDFmOAorCisjZGVmaW5lIEtFWV9NSU5fSU5URVJFU1RJTkcgS0VZX01VVEUKKyNkZWZpbmUgS0VZX01BWCAweDFmZgorCisjZGVmaW5lIFJFTF9YIDB4MDAKKyNkZWZpbmUgUkVMX1kgMHgwMQorI2RlZmluZSBSRUxfWiAweDAyCisjZGVmaW5lIFJFTF9SWCAweDAzCisjZGVmaW5lIFJFTF9SWSAweDA0CisjZGVmaW5lIFJFTF9SWiAweDA1CisjZGVmaW5lIFJFTF9IV0hFRUwgMHgwNgorI2RlZmluZSBSRUxfRElBTCAweDA3CisjZGVmaW5lIFJFTF9XSEVFTCAweDA4CisjZGVmaW5lIFJFTF9NSVNDIDB4MDkKKyNkZWZpbmUgUkVMX01BWCAweDBmCisKKyNkZWZpbmUgQUJTX1ggMHgwMAorI2RlZmluZSBBQlNfWSAweDAxCisjZGVmaW5lIEFCU19aIDB4MDIKKyNkZWZpbmUgQUJTX1JYIDB4MDMKKyNkZWZpbmUgQUJTX1JZIDB4MDQKKyNkZWZpbmUgQUJTX1JaIDB4MDUKKyNkZWZpbmUgQUJTX1RIUk9UVExFIDB4MDYKKyNkZWZpbmUgQUJTX1JVRERFUiAweDA3CisjZGVmaW5lIEFCU19XSEVFTCAweDA4CisjZGVmaW5lIEFCU19HQVMgMHgwOQorI2RlZmluZSBBQlNfQlJBS0UgMHgwYQorI2RlZmluZSBBQlNfSEFUMFggMHgxMAorI2RlZmluZSBBQlNfSEFUMFkgMHgxMQorI2RlZmluZSBBQlNfSEFUMVggMHgxMgorI2RlZmluZSBBQlNfSEFUMVkgMHgxMworI2RlZmluZSBBQlNfSEFUMlggMHgxNAorI2RlZmluZSBBQlNfSEFUMlkgMHgxNQorI2RlZmluZSBBQlNfSEFUM1ggMHgxNgorI2RlZmluZSBBQlNfSEFUM1kgMHgxNworI2RlZmluZSBBQlNfUFJFU1NVUkUgMHgxOAorI2RlZmluZSBBQlNfRElTVEFOQ0UgMHgxOQorI2RlZmluZSBBQlNfVElMVF9YIDB4MWEKKyNkZWZpbmUgQUJTX1RJTFRfWSAweDFiCisjZGVmaW5lIEFCU19UT09MX1dJRFRIIDB4MWMKKyNkZWZpbmUgQUJTX1ZPTFVNRSAweDIwCisjZGVmaW5lIEFCU19NSVNDIDB4MjgKKyNkZWZpbmUgQUJTX01BWCAweDNmCisKKyNkZWZpbmUgU1dfTElEIDB4MDAgIAorI2RlZmluZSBTV19UQUJMRVRfTU9ERSAweDAxICAKKyNkZWZpbmUgU1dfSEVBRFBIT05FX0lOU0VSVCAweDAyICAKKyNkZWZpbmUgU1dfTUFYIDB4MGYKKworI2RlZmluZSBNU0NfU0VSSUFMIDB4MDAKKyNkZWZpbmUgTVNDX1BVTFNFTEVEIDB4MDEKKyNkZWZpbmUgTVNDX0dFU1RVUkUgMHgwMgorI2RlZmluZSBNU0NfUkFXIDB4MDMKKyNkZWZpbmUgTVNDX1NDQU4gMHgwNAorI2RlZmluZSBNU0NfTUFYIDB4MDcKKworI2RlZmluZSBMRURfTlVNTCAweDAwCisjZGVmaW5lIExFRF9DQVBTTCAweDAxCisjZGVmaW5lIExFRF9TQ1JPTExMIDB4MDIKKyNkZWZpbmUgTEVEX0NPTVBPU0UgMHgwMworI2RlZmluZSBMRURfS0FOQSAweDA0CisjZGVmaW5lIExFRF9TTEVFUCAweDA1CisjZGVmaW5lIExFRF9TVVNQRU5EIDB4MDYKKyNkZWZpbmUgTEVEX01VVEUgMHgwNworI2RlZmluZSBMRURfTUlTQyAweDA4CisjZGVmaW5lIExFRF9NQUlMIDB4MDkKKyNkZWZpbmUgTEVEX0NIQVJHSU5HIDB4MGEKKyNkZWZpbmUgTEVEX01BWCAweDBmCisKKyNkZWZpbmUgUkVQX0RFTEFZIDB4MDAKKyNkZWZpbmUgUkVQX1BFUklPRCAweDAxCisjZGVmaW5lIFJFUF9NQVggMHgwMQorCisjZGVmaW5lIFNORF9DTElDSyAweDAwCisjZGVmaW5lIFNORF9CRUxMIDB4MDEKKyNkZWZpbmUgU05EX1RPTkUgMHgwMgorI2RlZmluZSBTTkRfTUFYIDB4MDcKKworI2RlZmluZSBJRF9CVVMgMAorI2RlZmluZSBJRF9WRU5ET1IgMQorI2RlZmluZSBJRF9QUk9EVUNUIDIKKyNkZWZpbmUgSURfVkVSU0lPTiAzCisKKyNkZWZpbmUgQlVTX1BDSSAweDAxCisjZGVmaW5lIEJVU19JU0FQTlAgMHgwMgorI2RlZmluZSBCVVNfVVNCIDB4MDMKKyNkZWZpbmUgQlVTX0hJTCAweDA0CisjZGVmaW5lIEJVU19CTFVFVE9PVEggMHgwNQorCisjZGVmaW5lIEJVU19JU0EgMHgxMAorI2RlZmluZSBCVVNfSTgwNDIgMHgxMQorI2RlZmluZSBCVVNfWFRLQkQgMHgxMgorI2RlZmluZSBCVVNfUlMyMzIgMHgxMworI2RlZmluZSBCVVNfR0FNRVBPUlQgMHgxNAorI2RlZmluZSBCVVNfUEFSUE9SVCAweDE1CisjZGVmaW5lIEJVU19BTUlHQSAweDE2CisjZGVmaW5lIEJVU19BREIgMHgxNworI2RlZmluZSBCVVNfSTJDIDB4MTgKKyNkZWZpbmUgQlVTX0hPU1QgMHgxOQorI2RlZmluZSBCVVNfR1NDIDB4MUEKKworI2RlZmluZSBGRl9TVEFUVVNfU1RPUFBFRCAweDAwCisjZGVmaW5lIEZGX1NUQVRVU19QTEFZSU5HIDB4MDEKKyNkZWZpbmUgRkZfU1RBVFVTX01BWCAweDAxCisKK3N0cnVjdCBmZl9yZXBsYXkgeworIF9fdTE2IGxlbmd0aDsKKyBfX3UxNiBkZWxheTsKK307CisKK3N0cnVjdCBmZl90cmlnZ2VyIHsKKyBfX3UxNiBidXR0b247CisgX191MTYgaW50ZXJ2YWw7Cit9OworCitzdHJ1Y3QgZmZfZW52ZWxvcGUgeworIF9fdTE2IGF0dGFja19sZW5ndGg7CisgX191MTYgYXR0YWNrX2xldmVsOworIF9fdTE2IGZhZGVfbGVuZ3RoOworIF9fdTE2IGZhZGVfbGV2ZWw7Cit9OworCitzdHJ1Y3QgZmZfY29uc3RhbnRfZWZmZWN0IHsKKyBfX3MxNiBsZXZlbDsKKyBzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cit9OworCitzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgeworIF9fczE2IHN0YXJ0X2xldmVsOworIF9fczE2IGVuZF9sZXZlbDsKKyBzdHJ1Y3QgZmZfZW52ZWxvcGUgZW52ZWxvcGU7Cit9OworCitzdHJ1Y3QgZmZfY29uZGl0aW9uX2VmZmVjdCB7CisgX191MTYgcmlnaHRfc2F0dXJhdGlvbjsKKyBfX3UxNiBsZWZ0X3NhdHVyYXRpb247CisKKyBfX3MxNiByaWdodF9jb2VmZjsKKyBfX3MxNiBsZWZ0X2NvZWZmOworCisgX191MTYgZGVhZGJhbmQ7CisgX19zMTYgY2VudGVyOworCit9OworCitzdHJ1Y3QgZmZfcGVyaW9kaWNfZWZmZWN0IHsKKyBfX3UxNiB3YXZlZm9ybTsKKyBfX3UxNiBwZXJpb2Q7CisgX19zMTYgbWFnbml0dWRlOworIF9fczE2IG9mZnNldDsKKyBfX3UxNiBwaGFzZTsKKworIHN0cnVjdCBmZl9lbnZlbG9wZSBlbnZlbG9wZTsKKworIF9fdTMyIGN1c3RvbV9sZW47CisgX19zMTYgKmN1c3RvbV9kYXRhOworCit9OworCitzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCB7CisgX191MTYgc3Ryb25nX21hZ25pdHVkZTsKKyBfX3UxNiB3ZWFrX21hZ25pdHVkZTsKK307CisKK3N0cnVjdCBmZl9lZmZlY3QgeworIF9fdTE2IHR5cGU7CisKKyBfX3MxNiBpZDsKKworIF9fdTE2IGRpcmVjdGlvbjsKKworIHN0cnVjdCBmZl90cmlnZ2VyIHRyaWdnZXI7Cisgc3RydWN0IGZmX3JlcGxheSByZXBsYXk7CisKKyB1bmlvbiB7Cisgc3RydWN0IGZmX2NvbnN0YW50X2VmZmVjdCBjb25zdGFudDsKKyBzdHJ1Y3QgZmZfcmFtcF9lZmZlY3QgcmFtcDsKKyBzdHJ1Y3QgZmZfcGVyaW9kaWNfZWZmZWN0IHBlcmlvZGljOworIHN0cnVjdCBmZl9jb25kaXRpb25fZWZmZWN0IGNvbmRpdGlvblsyXTsKKyBzdHJ1Y3QgZmZfcnVtYmxlX2VmZmVjdCBydW1ibGU7CisgfSB1OworfTsKKworI2RlZmluZSBGRl9SVU1CTEUgMHg1MAorI2RlZmluZSBGRl9QRVJJT0RJQyAweDUxCisjZGVmaW5lIEZGX0NPTlNUQU5UIDB4NTIKKyNkZWZpbmUgRkZfU1BSSU5HIDB4NTMKKyNkZWZpbmUgRkZfRlJJQ1RJT04gMHg1NAorI2RlZmluZSBGRl9EQU1QRVIgMHg1NQorI2RlZmluZSBGRl9JTkVSVElBIDB4NTYKKyNkZWZpbmUgRkZfUkFNUCAweDU3CisKKyNkZWZpbmUgRkZfU1FVQVJFIDB4NTgKKyNkZWZpbmUgRkZfVFJJQU5HTEUgMHg1OQorI2RlZmluZSBGRl9TSU5FIDB4NWEKKyNkZWZpbmUgRkZfU0FXX1VQIDB4NWIKKyNkZWZpbmUgRkZfU0FXX0RPV04gMHg1YworI2RlZmluZSBGRl9DVVNUT00gMHg1ZAorCisjZGVmaW5lIEZGX0dBSU4gMHg2MAorI2RlZmluZSBGRl9BVVRPQ0VOVEVSIDB4NjEKKworI2RlZmluZSBGRl9NQVggMHg3ZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnRlcnJ1cHQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pbnRlcnJ1cHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNDg1OTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ludGVycnVwdC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JTlRFUlJVUFRfSAorI2RlZmluZSBfTElOVVhfSU5URVJSVVBUX0gKKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wcmVlbXB0Lmg+CisjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgorI2luY2x1ZGUgPGxpbnV4L2lycXJldHVybi5oPgorI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L2lycWZsYWdzLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgSVJRRl9UUklHR0VSX05PTkUgMHgwMDAwMDAwMAorI2RlZmluZSBJUlFGX1RSSUdHRVJfUklTSU5HIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVJRRl9UUklHR0VSX0ZBTExJTkcgMHgwMDAwMDAwMgorI2RlZmluZSBJUlFGX1RSSUdHRVJfSElHSCAweDAwMDAwMDA0CisjZGVmaW5lIElSUUZfVFJJR0dFUl9MT1cgMHgwMDAwMDAwOAorI2RlZmluZSBJUlFGX1RSSUdHRVJfTUFTSyAoSVJRRl9UUklHR0VSX0hJR0ggfCBJUlFGX1RSSUdHRVJfTE9XIHwgICBJUlFGX1RSSUdHRVJfUklTSU5HIHwgSVJRRl9UUklHR0VSX0ZBTExJTkcpCisjZGVmaW5lIElSUUZfVFJJR0dFUl9QUk9CRSAweDAwMDAwMDEwCisKKyNkZWZpbmUgSVJRRl9ESVNBQkxFRCAweDAwMDAwMDIwCisjZGVmaW5lIElSUUZfU0FNUExFX1JBTkRPTSAweDAwMDAwMDQwCisjZGVmaW5lIElSUUZfU0hBUkVEIDB4MDAwMDAwODAKKyNkZWZpbmUgSVJRRl9QUk9CRV9TSEFSRUQgMHgwMDAwMDEwMAorI2RlZmluZSBJUlFGX1RJTUVSIDB4MDAwMDAyMDAKKyNkZWZpbmUgSVJRRl9QRVJDUFUgMHgwMDAwMDQwMAorCisjZGVmaW5lIFNBX0lOVEVSUlVQVCBJUlFGX0RJU0FCTEVECisjZGVmaW5lIFNBX1NBTVBMRV9SQU5ET00gSVJRRl9TQU1QTEVfUkFORE9NCisjZGVmaW5lIFNBX1NISVJRIElSUUZfU0hBUkVECisjZGVmaW5lIFNBX1BST0JFSVJRIElSUUZfUFJPQkVfU0hBUkVECisjZGVmaW5lIFNBX1BFUkNQVSBJUlFGX1BFUkNQVQorCisjZGVmaW5lIFNBX1RSSUdHRVJfTE9XIElSUUZfVFJJR0dFUl9MT1cKKyNkZWZpbmUgU0FfVFJJR0dFUl9ISUdIIElSUUZfVFJJR0dFUl9ISUdICisjZGVmaW5lIFNBX1RSSUdHRVJfRkFMTElORyBJUlFGX1RSSUdHRVJfRkFMTElORworI2RlZmluZSBTQV9UUklHR0VSX1JJU0lORyBJUlFGX1RSSUdHRVJfUklTSU5HCisjZGVmaW5lIFNBX1RSSUdHRVJfTUFTSyBJUlFGX1RSSUdHRVJfTUFTSworCitzdHJ1Y3QgaXJxYWN0aW9uIHsKKyBpcnFyZXR1cm5fdCAoKmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKTsKKyB1bnNpZ25lZCBsb25nIGZsYWdzOworIGNwdW1hc2tfdCBtYXNrOworIGNvbnN0IGNoYXIgKm5hbWU7Cisgdm9pZCAqZGV2X2lkOworIHN0cnVjdCBpcnFhY3Rpb24gKm5leHQ7CisgaW50IGlycTsKKyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRpcjsKK307CisKKyNkZWZpbmUgbG9jYWxfaXJxX2VuYWJsZV9pbl9oYXJkaXJxKCkgbG9jYWxfaXJxX2VuYWJsZSgpCisKKyNkZWZpbmUgZGlzYWJsZV9pcnFfbm9zeW5jX2xvY2tkZXAoaXJxKSBkaXNhYmxlX2lycV9ub3N5bmMoaXJxKQorI2RlZmluZSBkaXNhYmxlX2lycV9sb2NrZGVwKGlycSkgZGlzYWJsZV9pcnEoaXJxKQorI2RlZmluZSBlbmFibGVfaXJxX2xvY2tkZXAoaXJxKSBlbmFibGVfaXJxKGlycSkKKworI2lmbmRlZiBfX0FSQ0hfU0VUX1NPRlRJUlFfUEVORElORworI2RlZmluZSBzZXRfc29mdGlycV9wZW5kaW5nKHgpIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSA9ICh4KSkKKyNkZWZpbmUgb3Jfc29mdGlycV9wZW5kaW5nKHgpIChsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSB8PSAoeCkpCisjZW5kaWYKKworI2RlZmluZSBzYXZlX2ZsYWdzKHgpIHNhdmVfZmxhZ3MoJngpCisjZGVmaW5lIHNhdmVfYW5kX2NsaSh4KSBzYXZlX2FuZF9jbGkoJngpCisKK2VudW0KK3sKKyBISV9TT0ZUSVJRPTAsCisgVElNRVJfU09GVElSUSwKKyBORVRfVFhfU09GVElSUSwKKyBORVRfUlhfU09GVElSUSwKKyBCTE9DS19TT0ZUSVJRLAorIFRBU0tMRVRfU09GVElSUQorfTsKKworc3RydWN0IHNvZnRpcnFfYWN0aW9uCit7Cisgdm9pZCAoKmFjdGlvbikoc3RydWN0IHNvZnRpcnFfYWN0aW9uICopOworIHZvaWQgKmRhdGE7Cit9OworCisjZGVmaW5lIF9fcmFpc2Vfc29mdGlycV9pcnFvZmYobnIpIGRvIHsgb3Jfc29mdGlycV9wZW5kaW5nKDFVTCA8PCAobnIpKTsgfSB3aGlsZSAoMCkKKworc3RydWN0IHRhc2tsZXRfc3RydWN0Cit7Cisgc3RydWN0IHRhc2tsZXRfc3RydWN0ICpuZXh0OworIHVuc2lnbmVkIGxvbmcgc3RhdGU7CisgYXRvbWljX3QgY291bnQ7Cisgdm9pZCAoKmZ1bmMpKHVuc2lnbmVkIGxvbmcpOworIHVuc2lnbmVkIGxvbmcgZGF0YTsKK307CisKKyNkZWZpbmUgREVDTEFSRV9UQVNLTEVUKG5hbWUsIGZ1bmMsIGRhdGEpICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgbmFtZSA9IHsgTlVMTCwgMCwgQVRPTUlDX0lOSVQoMCksIGZ1bmMsIGRhdGEgfQorCisjZGVmaW5lIERFQ0xBUkVfVEFTS0xFVF9ESVNBQkxFRChuYW1lLCBmdW5jLCBkYXRhKSAgc3RydWN0IHRhc2tsZXRfc3RydWN0IG5hbWUgPSB7IE5VTEwsIDAsIEFUT01JQ19JTklUKDEpLCBmdW5jLCBkYXRhIH0KKworZW51bQoreworIFRBU0tMRVRfU1RBVEVfU0NIRUQsCisgVEFTS0xFVF9TVEFURV9SVU4KK307CisKKyNkZWZpbmUgdGFza2xldF90cnlsb2NrKHQpIDEKKyNkZWZpbmUgdGFza2xldF91bmxvY2tfd2FpdCh0KSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRhc2tsZXRfdW5sb2NrKHQpIGRvIHsgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb2N0bC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjllZmJlYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaW9jdGwuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JT0NUTF9ICisjZGVmaW5lIF9MSU5VWF9JT0NUTF9ICisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3BvcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3BvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMjA4MWZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvcG9ydC5oCkBAIC0wLDAgKzEsOTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lPUE9SVF9ICisjZGVmaW5lIF9MSU5VWF9JT1BPUlRfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcmVzb3VyY2UgeworIHJlc291cmNlX3NpemVfdCBzdGFydDsKKyByZXNvdXJjZV9zaXplX3QgZW5kOworIGNvbnN0IGNoYXIgKm5hbWU7CisgdW5zaWduZWQgbG9uZyBmbGFnczsKKyBzdHJ1Y3QgcmVzb3VyY2UgKnBhcmVudCwgKnNpYmxpbmcsICpjaGlsZDsKK307CisKK3N0cnVjdCByZXNvdXJjZV9saXN0IHsKKyBzdHJ1Y3QgcmVzb3VyY2VfbGlzdCAqbmV4dDsKKyBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKyBzdHJ1Y3QgcGNpX2RldiAqZGV2OworfTsKKworI2RlZmluZSBJT1JFU09VUkNFX0JJVFMgMHgwMDAwMDBmZiAgCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9JTyAweDAwMDAwMTAwICAKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU0gMHgwMDAwMDIwMAorI2RlZmluZSBJT1JFU09VUkNFX0lSUSAweDAwMDAwNDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BIDB4MDAwMDA4MDAKKworI2RlZmluZSBJT1JFU09VUkNFX1BSRUZFVENIIDB4MDAwMDEwMDAgIAorI2RlZmluZSBJT1JFU09VUkNFX1JFQURPTkxZIDB4MDAwMDIwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9DQUNIRUFCTEUgMHgwMDAwNDAwMAorI2RlZmluZSBJT1JFU09VUkNFX1JBTkdFTEVOR1RIIDB4MDAwMDgwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9TSEFET1dBQkxFIDB4MDAwMTAwMDAKKyNkZWZpbmUgSU9SRVNPVVJDRV9CVVNfSEFTX1ZHQSAweDAwMDgwMDAwCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9ESVNBQkxFRCAweDEwMDAwMDAwCisjZGVmaW5lIElPUkVTT1VSQ0VfVU5TRVQgMHgyMDAwMDAwMAorI2RlZmluZSBJT1JFU09VUkNFX0FVVE8gMHg0MDAwMDAwMAorI2RlZmluZSBJT1JFU09VUkNFX0JVU1kgMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfSElHSEVER0UgKDE8PDApCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0xPV0VER0UgKDE8PDEpCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX0hJR0hMRVZFTCAoMTw8MikKKyNkZWZpbmUgSU9SRVNPVVJDRV9JUlFfTE9XTEVWRUwgKDE8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfSVJRX1NIQVJFQUJMRSAoMTw8NCkKKworI2RlZmluZSBJT1JFU09VUkNFX0RNQV9UWVBFX01BU0sgKDM8PDApCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BXzhCSVQgKDA8PDApCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BXzhBTkQxNkJJVCAoMTw8MCkKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfMTZCSVQgKDI8PDApCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfTUFTVEVSICgxPDwyKQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9CWVRFICgxPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9XT1JEICgxPDw0KQorCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1NQRUVEX01BU0sgKDM8PDYpCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX0NPTVBBVElCTEUgKDA8PDYpCisjZGVmaW5lIElPUkVTT1VSQ0VfRE1BX1RZUEVBICgxPDw2KQorI2RlZmluZSBJT1JFU09VUkNFX0RNQV9UWVBFQiAoMjw8NikKKyNkZWZpbmUgSU9SRVNPVVJDRV9ETUFfVFlQRUYgKDM8PDYpCisKKyNkZWZpbmUgSU9SRVNPVVJDRV9NRU1fV1JJVEVBQkxFICgxPDwwKSAgCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNX0NBQ0hFQUJMRSAoMTw8MSkgIAorI2RlZmluZSBJT1JFU09VUkNFX01FTV9SQU5HRUxFTkdUSCAoMTw8MikgIAorI2RlZmluZSBJT1JFU09VUkNFX01FTV9UWVBFX01BU0sgKDM8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNXzhCSVQgKDA8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNXzE2QklUICgxPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV84QU5EMTZCSVQgKDI8PDMpCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNXzMyQklUICgzPDwzKQorI2RlZmluZSBJT1JFU09VUkNFX01FTV9TSEFET1dBQkxFICgxPDw1KSAgCisjZGVmaW5lIElPUkVTT1VSQ0VfTUVNX0VYUEFOU0lPTlJPTSAoMTw8NikKKworI2RlZmluZSBJT1JFU09VUkNFX1JPTV9FTkFCTEUgKDE8PDApICAKKyNkZWZpbmUgSU9SRVNPVVJDRV9ST01fU0hBRE9XICgxPDwxKSAgCisjZGVmaW5lIElPUkVTT1VSQ0VfUk9NX0NPUFkgKDE8PDIpICAKKworI2RlZmluZSByZXF1ZXN0X3JlZ2lvbihzdGFydCxuLG5hbWUpIF9fcmVxdWVzdF9yZWdpb24oJmlvcG9ydF9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pLCAobmFtZSkpCisjZGVmaW5lIHJlcXVlc3RfbWVtX3JlZ2lvbihzdGFydCxuLG5hbWUpIF9fcmVxdWVzdF9yZWdpb24oJmlvbWVtX3Jlc291cmNlLCAoc3RhcnQpLCAobiksIChuYW1lKSkKKyNkZWZpbmUgcmVuYW1lX3JlZ2lvbihyZWdpb24sIG5ld25hbWUpIGRvIHsgKHJlZ2lvbiktPm5hbWUgPSAobmV3bmFtZSk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcmVsZWFzZV9yZWdpb24oc3RhcnQsbikgX19yZWxlYXNlX3JlZ2lvbigmaW9wb3J0X3Jlc291cmNlLCAoc3RhcnQpLCAobikpCisjZGVmaW5lIGNoZWNrX21lbV9yZWdpb24oc3RhcnQsbikgX19jaGVja19yZWdpb24oJmlvbWVtX3Jlc291cmNlLCAoc3RhcnQpLCAobikpCisjZGVmaW5lIHJlbGVhc2VfbWVtX3JlZ2lvbihzdGFydCxuKSBfX3JlbGVhc2VfcmVnaW9uKCZpb21lbV9yZXNvdXJjZSwgKHN0YXJ0KSwgKG4pKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3ByaW8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pb3ByaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMGE1ZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lvcHJpby5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgSU9QUklPX0gKKyNkZWZpbmUgSU9QUklPX0gKKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKKyNkZWZpbmUgSU9QUklPX0JJVFMgKDE2KQorI2RlZmluZSBJT1BSSU9fQ0xBU1NfU0hJRlQgKDEzKQorI2RlZmluZSBJT1BSSU9fUFJJT19NQVNLICgoMVVMIDw8IElPUFJJT19DTEFTU19TSElGVCkgLSAxKQorCisjZGVmaW5lIElPUFJJT19QUklPX0NMQVNTKG1hc2spICgobWFzaykgPj4gSU9QUklPX0NMQVNTX1NISUZUKQorI2RlZmluZSBJT1BSSU9fUFJJT19EQVRBKG1hc2spICgobWFzaykgJiBJT1BSSU9fUFJJT19NQVNLKQorI2RlZmluZSBJT1BSSU9fUFJJT19WQUxVRShjbGFzcywgZGF0YSkgKCgoY2xhc3MpIDw8IElPUFJJT19DTEFTU19TSElGVCkgfCBkYXRhKQorCisjZGVmaW5lIGlvcHJpb192YWxpZChtYXNrKSAoSU9QUklPX1BSSU9fQ0xBU1MoKG1hc2spKSAhPSBJT1BSSU9fQ0xBU1NfTk9ORSkKKworZW51bSB7CisgSU9QUklPX0NMQVNTX05PTkUsCisgSU9QUklPX0NMQVNTX1JULAorIElPUFJJT19DTEFTU19CRSwKKyBJT1BSSU9fQ0xBU1NfSURMRSwKK307CisKKyNkZWZpbmUgSU9QUklPX0JFX05SICg4KQorCitlbnVtIHsKKyBJT1BSSU9fV0hPX1BST0NFU1MgPSAxLAorIElPUFJJT19XSE9fUEdSUCwKKyBJT1BSSU9fV0hPX1VTRVIsCit9OworCisjZGVmaW5lIElPUFJJT19OT1JNICg0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQwNzg5ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcC5oCkBAIC0wLDAgKzEsMTE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JUF9ICisjZGVmaW5lIF9MSU5VWF9JUF9ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CisKKyNkZWZpbmUgSVBUT1NfVE9TX01BU0sgMHgxRQorI2RlZmluZSBJUFRPU19UT1ModG9zKSAoKHRvcykmSVBUT1NfVE9TX01BU0spCisjZGVmaW5lIElQVE9TX0xPV0RFTEFZIDB4MTAKKyNkZWZpbmUgSVBUT1NfVEhST1VHSFBVVCAweDA4CisjZGVmaW5lIElQVE9TX1JFTElBQklMSVRZIDB4MDQKKyNkZWZpbmUgSVBUT1NfTUlOQ09TVCAweDAyCisKKyNkZWZpbmUgSVBUT1NfUFJFQ19NQVNLIDB4RTAKKyNkZWZpbmUgSVBUT1NfUFJFQyh0b3MpICgodG9zKSZJUFRPU19QUkVDX01BU0spCisjZGVmaW5lIElQVE9TX1BSRUNfTkVUQ09OVFJPTCAweGUwCisjZGVmaW5lIElQVE9TX1BSRUNfSU5URVJORVRDT05UUk9MIDB4YzAKKyNkZWZpbmUgSVBUT1NfUFJFQ19DUklUSUNfRUNQIDB4YTAKKyNkZWZpbmUgSVBUT1NfUFJFQ19GTEFTSE9WRVJSSURFIDB4ODAKKyNkZWZpbmUgSVBUT1NfUFJFQ19GTEFTSCAweDYwCisjZGVmaW5lIElQVE9TX1BSRUNfSU1NRURJQVRFIDB4NDAKKyNkZWZpbmUgSVBUT1NfUFJFQ19QUklPUklUWSAweDIwCisjZGVmaW5lIElQVE9TX1BSRUNfUk9VVElORSAweDAwCisKKyNkZWZpbmUgSVBPUFRfQ09QWSAweDgwCisjZGVmaW5lIElQT1BUX0NMQVNTX01BU0sgMHg2MAorI2RlZmluZSBJUE9QVF9OVU1CRVJfTUFTSyAweDFmCisKKyNkZWZpbmUgSVBPUFRfQ09QSUVEKG8pICgobykmSVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfQ0xBU1MobykgKChvKSZJUE9QVF9DTEFTU19NQVNLKQorI2RlZmluZSBJUE9QVF9OVU1CRVIobykgKChvKSZJUE9QVF9OVU1CRVJfTUFTSykKKworI2RlZmluZSBJUE9QVF9DT05UUk9MIDB4MDAKKyNkZWZpbmUgSVBPUFRfUkVTRVJWRUQxIDB4MjAKKyNkZWZpbmUgSVBPUFRfTUVBU1VSRU1FTlQgMHg0MAorI2RlZmluZSBJUE9QVF9SRVNFUlZFRDIgMHg2MAorCisjZGVmaW5lIElQT1BUX0VORCAoMCB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfTk9PUCAoMSB8SVBPUFRfQ09OVFJPTCkKKyNkZWZpbmUgSVBPUFRfU0VDICgyIHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX0xTUlIgKDMgfElQT1BUX0NPTlRST0x8SVBPUFRfQ09QWSkKKyNkZWZpbmUgSVBPUFRfVElNRVNUQU1QICg0IHxJUE9QVF9NRUFTVVJFTUVOVCkKKyNkZWZpbmUgSVBPUFRfUlIgKDcgfElQT1BUX0NPTlRST0wpCisjZGVmaW5lIElQT1BUX1NJRCAoOCB8SVBPUFRfQ09OVFJPTHxJUE9QVF9DT1BZKQorI2RlZmluZSBJUE9QVF9TU1JSICg5IHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisjZGVmaW5lIElQT1BUX1JBICgyMHxJUE9QVF9DT05UUk9MfElQT1BUX0NPUFkpCisKKyNkZWZpbmUgSVBWRVJTSU9OIDQKKyNkZWZpbmUgTUFYVFRMIDI1NQorI2RlZmluZSBJUERFRlRUTCA2NAorCisjZGVmaW5lIElQT1BUX09QVFZBTCAwCisjZGVmaW5lIElQT1BUX09MRU4gMQorI2RlZmluZSBJUE9QVF9PRkZTRVQgMgorI2RlZmluZSBJUE9QVF9NSU5PRkYgNAorI2RlZmluZSBNQVhfSVBPUFRMRU4gNDAKKyNkZWZpbmUgSVBPUFRfTk9QIElQT1BUX05PT1AKKyNkZWZpbmUgSVBPUFRfRU9MIElQT1BUX0VORAorI2RlZmluZSBJUE9QVF9UUyBJUE9QVF9USU1FU1RBTVAKKworI2RlZmluZSBJUE9QVF9UU19UU09OTFkgMCAgCisjZGVmaW5lIElQT1BUX1RTX1RTQU5EQUREUiAxICAKKyNkZWZpbmUgSVBPUFRfVFNfUFJFU1BFQyAzICAKKworc3RydWN0IGlwaGRyIHsKKyNpZmRlZiBfX0xJVFRMRV9FTkRJQU5fQklURklFTEQKKyBfX3U4IGlobDo0LAorIHZlcnNpb246NDsKKyNlbGlmIGRlZmluZWQgKF9fQklHX0VORElBTl9CSVRGSUVMRCkKKyBfX3U4IHZlcnNpb246NCwKKyBpaGw6NDsKKyNlbHNlCisjZXJyb3IgIlBsZWFzZSBmaXggPGFzbS9ieXRlb3JkZXIuaD4iCisjZW5kaWYKKyBfX3U4IHRvczsKKyBfX2JlMTYgdG90X2xlbjsKKyBfX2JlMTYgaWQ7CisgX19iZTE2IGZyYWdfb2ZmOworIF9fdTggdHRsOworIF9fdTggcHJvdG9jb2w7CisgX191MTYgY2hlY2s7CisgX19iZTMyIHNhZGRyOworIF9fYmUzMiBkYWRkcjsKKworfTsKKworc3RydWN0IGlwX2F1dGhfaGRyIHsKKyBfX3U4IG5leHRoZHI7CisgX191OCBoZHJsZW47CisgX191MTYgcmVzZXJ2ZWQ7CisgX191MzIgc3BpOworIF9fdTMyIHNlcV9ubzsKKyBfX3U4IGF1dGhfZGF0YVswXTsKK307CisKK3N0cnVjdCBpcF9lc3BfaGRyIHsKKyBfX3UzMiBzcGk7CisgX191MzIgc2VxX25vOworIF9fdTggZW5jX2RhdGFbMF07Cit9OworCitzdHJ1Y3QgaXBfY29tcF9oZHIgeworIF9fdTggbmV4dGhkcjsKKyBfX3U4IGZsYWdzOworIF9fdTE2IGNwaTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0NzY2ZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBjLmgKQEAgLTAsMCArMSw0OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSVBDX0gKKyNkZWZpbmUgX0xJTlVYX0lQQ19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIElQQ19QUklWQVRFICgoX19rZXJuZWxfa2V5X3QpIDApIAorCitzdHJ1Y3QgaXBjX3Blcm0KK3sKKyBfX2tlcm5lbF9rZXlfdCBrZXk7CisgX19rZXJuZWxfdWlkX3QgdWlkOworIF9fa2VybmVsX2dpZF90IGdpZDsKKyBfX2tlcm5lbF91aWRfdCBjdWlkOworIF9fa2VybmVsX2dpZF90IGNnaWQ7CisgX19rZXJuZWxfbW9kZV90IG1vZGU7CisgdW5zaWduZWQgc2hvcnQgc2VxOworfTsKKworI2luY2x1ZGUgPGFzbS9pcGNidWYuaD4KKworI2RlZmluZSBJUENfQ1JFQVQgMDAwMDEwMDAgIAorI2RlZmluZSBJUENfRVhDTCAwMDAwMjAwMCAgCisjZGVmaW5lIElQQ19OT1dBSVQgMDAwMDQwMDAgIAorCisjZGVmaW5lIElQQ19ESVBDIDAwMDEwMDAwICAKKyNkZWZpbmUgSVBDX09XTiAwMDAyMDAwMCAgCisKKyNkZWZpbmUgSVBDX1JNSUQgMCAgCisjZGVmaW5lIElQQ19TRVQgMSAgCisjZGVmaW5lIElQQ19TVEFUIDIgIAorI2RlZmluZSBJUENfSU5GTyAzICAKKworI2RlZmluZSBJUENfT0xEIDAgIAorI2RlZmluZSBJUENfNjQgMHgwMTAwICAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX21zZ2RlZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX21zZ2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDdkNTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lwbWlfbXNnZGVmcy5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9JUE1JX01TR0RFRlNfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfTVNHREVGU19ICisKKyNkZWZpbmUgSVBNSV9ORVRGTl9TRU5TT1JfRVZFTlRfUkVRVUVTVCAweDA0CisjZGVmaW5lIElQTUlfTkVURk5fU0VOU09SX0VWRU5UX1JFU1BPTlNFIDB4MDUKKyNkZWZpbmUgSVBNSV9HRVRfRVZFTlRfUkVDRUlWRVJfQ01EIDB4MDEKKworI2RlZmluZSBJUE1JX05FVEZOX0FQUF9SRVFVRVNUIDB4MDYKKyNkZWZpbmUgSVBNSV9ORVRGTl9BUFBfUkVTUE9OU0UgMHgwNworI2RlZmluZSBJUE1JX0dFVF9ERVZJQ0VfSURfQ01EIDB4MDEKKyNkZWZpbmUgSVBNSV9DTEVBUl9NU0dfRkxBR1NfQ01EIDB4MzAKKyNkZWZpbmUgSVBNSV9HRVRfREVWSUNFX0dVSURfQ01EIDB4MDgKKyNkZWZpbmUgSVBNSV9HRVRfTVNHX0ZMQUdTX0NNRCAweDMxCisjZGVmaW5lIElQTUlfU0VORF9NU0dfQ01EIDB4MzQKKyNkZWZpbmUgSVBNSV9HRVRfTVNHX0NNRCAweDMzCisjZGVmaW5lIElQTUlfU0VUX0JNQ19HTE9CQUxfRU5BQkxFU19DTUQgMHgyZQorI2RlZmluZSBJUE1JX0dFVF9CTUNfR0xPQkFMX0VOQUJMRVNfQ01EIDB4MmYKKyNkZWZpbmUgSVBNSV9SRUFEX0VWRU5UX01TR19CVUZGRVJfQ01EIDB4MzUKKyNkZWZpbmUgSVBNSV9HRVRfQ0hBTk5FTF9JTkZPX0NNRCAweDQyCisKKyNkZWZpbmUgSVBNSV9ORVRGTl9TVE9SQUdFX1JFUVVFU1QgMHgwYQorI2RlZmluZSBJUE1JX05FVEZOX1NUT1JBR0VfUkVTUE9OU0UgMHgwYgorI2RlZmluZSBJUE1JX0FERF9TRUxfRU5UUllfQ01EIDB4NDQKKworI2RlZmluZSBJUE1JX0JNQ19TTEFWRV9BRERSIDB4MjAKKworI2RlZmluZSBJUE1JX01BWF9NU0dfTEVOR1RIIDI3MiAgCisKKyNkZWZpbmUgSVBNSV9DQ19OT19FUlJPUiAweDAwCisjZGVmaW5lIElQTUlfTk9ERV9CVVNZX0VSUiAweGMwCisjZGVmaW5lIElQTUlfSU5WQUxJRF9DT01NQU5EX0VSUiAweGMxCisjZGVmaW5lIElQTUlfRVJSX01TR19UUlVOQ0FURUQgMHhjNgorI2RlZmluZSBJUE1JX0xPU1RfQVJCSVRSQVRJT05fRVJSIDB4ODEKKyNkZWZpbmUgSVBNSV9FUlJfVU5TUEVDSUZJRUQgMHhmZgorCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9JUE1CIDEKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX0lDTUIgMgorI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfU01CVVMgNAorI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfS0NTIDUKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX1NNSUMgNgorI2RlZmluZSBJUE1JX0NIQU5ORUxfUFJPVE9DT0xfQlQxMCA3CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9QUk9UT0NPTF9CVDE1IDgKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX1BST1RPQ09MX1RNT0RFIDkKKworI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lQTUIgMQorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX0lDTUIxMCAyCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fSUNNQjA5IDMKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV84MDIzTEFOIDQKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9BU1lOQyA1CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fT1RIRVJfTEFOIDYKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9QQ0lfU01CVVMgNworI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NNQlVTMSA4CisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fU01CVVMyIDkKKyNkZWZpbmUgSVBNSV9DSEFOTkVMX01FRElVTV9VU0IxIDEwCisjZGVmaW5lIElQTUlfQ0hBTk5FTF9NRURJVU1fVVNCMiAxMQorI2RlZmluZSBJUE1JX0NIQU5ORUxfTUVESVVNX1NZU0lOVEYgMTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9zbWkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcG1pX3NtaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2Y2MyMTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXBtaV9zbWkuaApAQCAtMCwwICsxLDc5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfSVBNSV9TTUlfSAorI2RlZmluZSBfX0xJTlVYX0lQTUlfU01JX0gKKworI2luY2x1ZGUgPGxpbnV4L2lwbWlfbXNnZGVmcy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pcG1pX3NtaS5oPgorCit0eXBlZGVmIHN0cnVjdCBpcG1pX3NtaSAqaXBtaV9zbWlfdDsKKworc3RydWN0IGlwbWlfc21pX21zZworeworIHN0cnVjdCBsaXN0X2hlYWQgbGluazsKKworIGxvbmcgbXNnaWQ7Cisgdm9pZCAqdXNlcl9kYXRhOworCisgaW50IGRhdGFfc2l6ZTsKKyB1bnNpZ25lZCBjaGFyIGRhdGFbSVBNSV9NQVhfTVNHX0xFTkdUSF07CisKKyBpbnQgcnNwX3NpemU7CisgdW5zaWduZWQgY2hhciByc3BbSVBNSV9NQVhfTVNHX0xFTkdUSF07CisKKyB2b2lkICgqZG9uZSkoc3RydWN0IGlwbWlfc21pX21zZyAqbXNnKTsKK307CisKK3N0cnVjdCBpcG1pX3NtaV9oYW5kbGVycworeworIHN0cnVjdCBtb2R1bGUgKm93bmVyOworCisgaW50ICgqc3RhcnRfcHJvY2Vzc2luZykodm9pZCAqc2VuZF9pbmZvLAorIGlwbWlfc21pX3QgbmV3X2ludGYpOworCisgdm9pZCAoKnNlbmRlcikodm9pZCAqc2VuZF9pbmZvLAorIHN0cnVjdCBpcG1pX3NtaV9tc2cgKm1zZywKKyBpbnQgcHJpb3JpdHkpOworCisgdm9pZCAoKnJlcXVlc3RfZXZlbnRzKSh2b2lkICpzZW5kX2luZm8pOworCisgdm9pZCAoKnNldF9ydW5fdG9fY29tcGxldGlvbikodm9pZCAqc2VuZF9pbmZvLCBpbnQgcnVuX3RvX2NvbXBsZXRpb24pOworCisgdm9pZCAoKnBvbGwpKHZvaWQgKnNlbmRfaW5mbyk7CisKKyBpbnQgKCppbmNfdXNlY291bnQpKHZvaWQgKnNlbmRfaW5mbyk7Cisgdm9pZCAoKmRlY191c2Vjb3VudCkodm9pZCAqc2VuZF9pbmZvKTsKK307CisKK3N0cnVjdCBpcG1pX2RldmljZV9pZCB7CisgdW5zaWduZWQgY2hhciBkZXZpY2VfaWQ7CisgdW5zaWduZWQgY2hhciBkZXZpY2VfcmV2aXNpb247CisgdW5zaWduZWQgY2hhciBmaXJtd2FyZV9yZXZpc2lvbl8xOworIHVuc2lnbmVkIGNoYXIgZmlybXdhcmVfcmV2aXNpb25fMjsKKyB1bnNpZ25lZCBjaGFyIGlwbWlfdmVyc2lvbjsKKyB1bnNpZ25lZCBjaGFyIGFkZGl0aW9uYWxfZGV2aWNlX3N1cHBvcnQ7CisgdW5zaWduZWQgaW50IG1hbnVmYWN0dXJlcl9pZDsKKyB1bnNpZ25lZCBpbnQgcHJvZHVjdF9pZDsKKyB1bnNpZ25lZCBjaGFyIGF1eF9maXJtd2FyZV9yZXZpc2lvbls0XTsKKyB1bnNpZ25lZCBpbnQgYXV4X2Zpcm13YXJlX3JldmlzaW9uX3NldCA6IDE7Cit9OworCisjZGVmaW5lIGlwbWlfdmVyc2lvbl9tYWpvcih2KSAoKHYpLT5pcG1pX3ZlcnNpb24gJiAweGYpCisjZGVmaW5lIGlwbWlfdmVyc2lvbl9taW5vcih2KSAoKHYpLT5pcG1pX3ZlcnNpb24gPj4gNCkKKworc3RydWN0IGlwbWlfc21pX21zZyAqaXBtaV9hbGxvY19zbWlfbXNnKHZvaWQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcHguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjY3NWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lweC5oCkBAIC0wLDAgKzEsNzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQWF9IXworI2RlZmluZSBfSVBYX0hfCisjaW5jbHVkZSA8bGludXgvc29ja2lvcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2RlZmluZSBJUFhfTk9ERV9MRU4gNgorI2RlZmluZSBJUFhfTVRVIDU3NgorCitzdHJ1Y3Qgc29ja2FkZHJfaXB4IHsKKyBzYV9mYW1pbHlfdCBzaXB4X2ZhbWlseTsKKyBfX3UxNiBzaXB4X3BvcnQ7CisgX191MzIgc2lweF9uZXR3b3JrOworIHVuc2lnbmVkIGNoYXIgc2lweF9ub2RlW0lQWF9OT0RFX0xFTl07CisgX191OCBzaXB4X3R5cGU7CisgdW5zaWduZWQgY2hhciBzaXB4X3plcm87Cit9OworCisjZGVmaW5lIHNpcHhfc3BlY2lhbCBzaXB4X3BvcnQKKyNkZWZpbmUgc2lweF9hY3Rpb24gc2lweF96ZXJvCisjZGVmaW5lIElQWF9ETFRJVEYgMAorI2RlZmluZSBJUFhfQ1JUSVRGIDEKKworc3RydWN0IGlweF9yb3V0ZV9kZWZpbml0aW9uIHsKKyBfX3UzMiBpcHhfbmV0d29yazsKKyBfX3UzMiBpcHhfcm91dGVyX25ldHdvcms7CisgdW5zaWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKK307CisKK3N0cnVjdCBpcHhfaW50ZXJmYWNlX2RlZmluaXRpb24geworIF9fdTMyIGlweF9uZXR3b3JrOworIHVuc2lnbmVkIGNoYXIgaXB4X2RldmljZVsxNl07CisgdW5zaWduZWQgY2hhciBpcHhfZGxpbmtfdHlwZTsKKyNkZWZpbmUgSVBYX0ZSQU1FX05PTkUgMAorI2RlZmluZSBJUFhfRlJBTUVfU05BUCAxCisjZGVmaW5lIElQWF9GUkFNRV84MDIyIDIKKyNkZWZpbmUgSVBYX0ZSQU1FX0VUSEVSSUkgMworI2RlZmluZSBJUFhfRlJBTUVfODAyMyA0CisjZGVmaW5lIElQWF9GUkFNRV9UUl84MDIyIDUgIAorIHVuc2lnbmVkIGNoYXIgaXB4X3NwZWNpYWw7CisjZGVmaW5lIElQWF9TUEVDSUFMX05PTkUgMAorI2RlZmluZSBJUFhfUFJJTUFSWSAxCisjZGVmaW5lIElQWF9JTlRFUk5BTCAyCisgdW5zaWduZWQgY2hhciBpcHhfbm9kZVtJUFhfTk9ERV9MRU5dOworfTsKKworc3RydWN0IGlweF9jb25maWdfZGF0YSB7CisgdW5zaWduZWQgY2hhciBpcHhjZmdfYXV0b19zZWxlY3RfcHJpbWFyeTsKKyB1bnNpZ25lZCBjaGFyIGlweGNmZ19hdXRvX2NyZWF0ZV9pbnRlcmZhY2VzOworfTsKKworc3RydWN0IGlweF9yb3V0ZV9kZWYgeworIF9fdTMyIGlweF9uZXR3b3JrOworIF9fdTMyIGlweF9yb3V0ZXJfbmV0d29yazsKKyNkZWZpbmUgSVBYX1JPVVRFX05PX1JPVVRFUiAwCisgdW5zaWduZWQgY2hhciBpcHhfcm91dGVyX25vZGVbSVBYX05PREVfTEVOXTsKKyB1bnNpZ25lZCBjaGFyIGlweF9kZXZpY2VbMTZdOworIHVuc2lnbmVkIHNob3J0IGlweF9mbGFnczsKKyNkZWZpbmUgSVBYX1JUX1NOQVAgOAorI2RlZmluZSBJUFhfUlRfODAyMiA0CisjZGVmaW5lIElQWF9SVF9CTFVFQk9PSyAyCisjZGVmaW5lIElQWF9SVF9ST1VURUQgMQorfTsKKworI2RlZmluZSBTSU9DQUlQWElURkNSVCAoU0lPQ1BST1RPUFJJVkFURSkKKyNkZWZpbmUgU0lPQ0FJUFhQUklTTFQgKFNJT0NQUk9UT1BSSVZBVEUgKyAxKQorI2RlZmluZSBTSU9DSVBYQ0ZHREFUQSAoU0lPQ1BST1RPUFJJVkFURSArIDIpCisjZGVmaW5lIFNJT0NJUFhOQ1BDT05OIChTSU9DUFJPVE9QUklWQVRFICsgMykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4ZjVkYjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxLmgKQEAgLTAsMCArMSwxMDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0lSUV9ICisjZGVmaW5lIF9MSU5VWF9JUlFfSAorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvY2FjaGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKyNpbmNsdWRlIDxsaW51eC9pcnFyZXR1cm4uaD4KKworI2luY2x1ZGUgPGFzbS9pcnEuaD4KKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNkZWZpbmUgSVJRX1RZUEVfTk9ORSAweDAwMDAwMDAwICAKKyNkZWZpbmUgSVJRX1RZUEVfRURHRV9SSVNJTkcgMHgwMDAwMDAwMSAgCisjZGVmaW5lIElSUV9UWVBFX0VER0VfRkFMTElORyAweDAwMDAwMDAyICAKKyNkZWZpbmUgSVJRX1RZUEVfRURHRV9CT1RIIChJUlFfVFlQRV9FREdFX0ZBTExJTkcgfCBJUlFfVFlQRV9FREdFX1JJU0lORykKKyNkZWZpbmUgSVJRX1RZUEVfTEVWRUxfSElHSCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgSVJRX1RZUEVfTEVWRUxfTE9XIDB4MDAwMDAwMDggIAorI2RlZmluZSBJUlFfVFlQRV9TRU5TRV9NQVNLIDB4MDAwMDAwMGYgIAorI2RlZmluZSBJUlFfVFlQRV9QUk9CRSAweDAwMDAwMDEwICAKKworI2RlZmluZSBJUlFfSU5QUk9HUkVTUyAweDAwMDEwMDAwICAKKyNkZWZpbmUgSVJRX0RJU0FCTEVEIDB4MDAwMjAwMDAgIAorI2RlZmluZSBJUlFfUEVORElORyAweDAwMDQwMDAwICAKKyNkZWZpbmUgSVJRX1JFUExBWSAweDAwMDgwMDAwICAKKyNkZWZpbmUgSVJRX0FVVE9ERVRFQ1QgMHgwMDEwMDAwMCAgCisjZGVmaW5lIElSUV9XQUlUSU5HIDB4MDAyMDAwMDAgIAorI2RlZmluZSBJUlFfTEVWRUwgMHgwMDQwMDAwMCAgCisjZGVmaW5lIElSUV9NQVNLRUQgMHgwMDgwMDAwMCAgCisjZGVmaW5lIElSUV9QRVJfQ1BVIDB4MDEwMDAwMDAgIAorI2RlZmluZSBDSEVDS19JUlFfUEVSX0NQVSh2YXIpIDAKKworI2RlZmluZSBJUlFfTk9QUk9CRSAweDAyMDAwMDAwICAKKyNkZWZpbmUgSVJRX05PUkVRVUVTVCAweDA0MDAwMDAwICAKKyNkZWZpbmUgSVJRX05PQVVUT0VOIDB4MDgwMDAwMDAgIAorI2RlZmluZSBJUlFfREVMQVlFRF9ESVNBQkxFIDB4MTAwMDAwMDAgIAorI2RlZmluZSBJUlFfV0FLRVVQIDB4MjAwMDAwMDAgIAorCitzdHJ1Y3QgcHJvY19kaXJfZW50cnk7CisKK3N0cnVjdCBpcnFfY2hpcCB7CisgY29uc3QgY2hhciAqbmFtZTsKKyB1bnNpZ25lZCBpbnQgKCpzdGFydHVwKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqc2h1dGRvd24pKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCplbmFibGUpKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCpkaXNhYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKKworIHZvaWQgKCphY2spKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCptYXNrKSh1bnNpZ25lZCBpbnQgaXJxKTsKKyB2b2lkICgqbWFza19hY2spKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCp1bm1hc2spKHVuc2lnbmVkIGludCBpcnEpOworIHZvaWQgKCplb2kpKHVuc2lnbmVkIGludCBpcnEpOworCisgdm9pZCAoKmVuZCkodW5zaWduZWQgaW50IGlycSk7Cisgdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWduZWQgaW50IGlycSwgY3B1bWFza190IGRlc3QpOworIGludCAoKnJldHJpZ2dlcikodW5zaWduZWQgaW50IGlycSk7CisgaW50ICgqc2V0X3R5cGUpKHVuc2lnbmVkIGludCBpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpOworIGludCAoKnNldF93YWtlKSh1bnNpZ25lZCBpbnQgaXJxLCB1bnNpZ25lZCBpbnQgb24pOworCisgY29uc3QgY2hhciAqdHlwZW5hbWU7Cit9OworCitzdHJ1Y3QgaXJxX2Rlc2MgeworIHZvaWQgZmFzdGNhbGwgKCpoYW5kbGVfaXJxKSh1bnNpZ25lZCBpbnQgaXJxLAorIHN0cnVjdCBpcnFfZGVzYyAqZGVzYywKKyBzdHJ1Y3QgcHRfcmVncyAqcmVncyk7Cisgc3RydWN0IGlycV9jaGlwICpjaGlwOworIHZvaWQgKmhhbmRsZXJfZGF0YTsKKyB2b2lkICpjaGlwX2RhdGE7Cisgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9uOworIHVuc2lnbmVkIGludCBzdGF0dXM7CisKKyB1bnNpZ25lZCBpbnQgZGVwdGg7CisgdW5zaWduZWQgaW50IHdha2VfZGVwdGg7CisgdW5zaWduZWQgaW50IGlycV9jb3VudDsKKyB1bnNpZ25lZCBpbnQgaXJxc191bmhhbmRsZWQ7Cisgc3BpbmxvY2tfdCBsb2NrOworfSBfX19fY2FjaGVsaW5lX2FsaWduZWQ7CisKKyNkZWZpbmUgaHdfaW50ZXJydXB0X3R5cGUgaXJxX2NoaXAKK3R5cGVkZWYgc3RydWN0IGlycV9jaGlwIGh3X2lycV9jb250cm9sbGVyOworI2RlZmluZSBub19pcnFfdHlwZSBub19pcnFfY2hpcAordHlwZWRlZiBzdHJ1Y3QgaXJxX2Rlc2MgaXJxX2Rlc2NfdDsKKworI2luY2x1ZGUgPGFzbS9od19pcnEuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxX2NwdXN0YXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFfY3B1c3RhdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NDBhNGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxX2NwdXN0YXQuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9faXJxX2NwdXN0YXRfaAorI2RlZmluZSBfX2lycV9jcHVzdGF0X2gKKworI2lmbmRlZiBfX0FSQ0hfSVJRX1NUQVQKKworI2RlZmluZSBfX0lSUV9TVEFUKGNwdSwgbWVtYmVyKSAoaXJxX3N0YXRbY3B1XS5tZW1iZXIpCisjZW5kaWYKKworI2RlZmluZSBsb2NhbF9zb2Z0aXJxX3BlbmRpbmcoKSAgIF9fSVJRX1NUQVQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBfX3NvZnRpcnFfcGVuZGluZykKKworI2RlZmluZSBubWlfY291bnQoY3B1KSBfX0lSUV9TVEFUKChjcHUpLCBfX25taV9jb3VudCkgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2lycWZsYWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWJmM2Y5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFmbGFncy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RSQUNFX0lSUUZMQUdTX0gKKyNkZWZpbmUgX0xJTlVYX1RSQUNFX0lSUUZMQUdTX0gKKworI2RlZmluZSB0cmFjZV9oYXJkaXJxc19vbigpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdHJhY2VfaGFyZGlycXNfb2ZmKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19vbihpcCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0cmFjZV9zb2Z0aXJxc19vZmYoaXApIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgdHJhY2VfaGFyZGlycV9jb250ZXh0KHApIDAKKyNkZWZpbmUgdHJhY2Vfc29mdGlycV9jb250ZXh0KHApIDAKKyNkZWZpbmUgdHJhY2VfaGFyZGlycXNfZW5hYmxlZChwKSAwCisjZGVmaW5lIHRyYWNlX3NvZnRpcnFzX2VuYWJsZWQocCkgMAorI2RlZmluZSB0cmFjZV9oYXJkaXJxX2VudGVyKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSB0cmFjZV9oYXJkaXJxX2V4aXQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRyYWNlX3NvZnRpcnFfZW50ZXIoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHRyYWNlX3NvZnRpcnFfZXhpdCgpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgSU5JVF9UUkFDRV9JUlFGTEFHUworCisjZGVmaW5lIHJhd19sb2NhbF9pcnFfZGlzYWJsZSgpIGxvY2FsX2lycV9kaXNhYmxlKCkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9lbmFibGUoKSBsb2NhbF9pcnFfZW5hYmxlKCkKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKSBsb2NhbF9pcnFfc2F2ZShmbGFncykKKyNkZWZpbmUgcmF3X2xvY2FsX2lycV9yZXN0b3JlKGZsYWdzKSBsb2NhbF9pcnFfcmVzdG9yZShmbGFncykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxcmV0dXJuLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvaXJxcmV0dXJuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTM3ZjQzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9pcnFyZXR1cm4uaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9JUlFSRVRVUk5fSAorI2RlZmluZSBfTElOVVhfSVJRUkVUVVJOX0gKKwordHlwZWRlZiBpbnQgaXJxcmV0dXJuX3Q7CisKKyNkZWZpbmUgSVJRX05PTkUgKDApCisjZGVmaW5lIElSUV9IQU5ETEVEICgxKQorI2RlZmluZSBJUlFfUkVUVkFMKHgpICgoeCkgIT0gMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamJkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JhNzY2YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9qYmQuaApAQCAtMCwwICsxLDExOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSkJEX0gKKyNkZWZpbmUgX0xJTlVYX0pCRF9ICisKKyNpbmNsdWRlICJqZnNfY29tcGF0LmgiCisjZGVmaW5lIEpGU19ERUJVRworI2RlZmluZSBqZnNfZGVidWcgamJkX2RlYnVnCisKKyNkZWZpbmUgam91cm5hbF9vb21fcmV0cnkgMQorCisjdW5kZWYgSkJEX1BBUkFOT0lEX0lPRkFJTAorCisjZGVmaW5lIEpCRF9ERUZBVUxUX01BWF9DT01NSVRfQUdFIDUKKworI2RlZmluZSBqYmRfZGVidWcoZiwgYS4uLikgIAorCisjZGVmaW5lIGpiZF9rbWFsbG9jKHNpemUsIGZsYWdzKSAgIF9famJkX2ttYWxsb2MoX19GVU5DVElPTl9fLCAoc2l6ZSksIChmbGFncyksIGpvdXJuYWxfb29tX3JldHJ5KQorI2RlZmluZSBqYmRfcmVwX2ttYWxsb2Moc2l6ZSwgZmxhZ3MpICAgX19qYmRfa21hbGxvYyhfX0ZVTkNUSU9OX18sIChzaXplKSwgKGZsYWdzKSwgMSkKKworI2RlZmluZSBKRlNfTUlOX0pPVVJOQUxfQkxPQ0tTIDEwMjQKKworI2RlZmluZSBKRlNfTUFHSUNfTlVNQkVSIDB4YzAzYjM5OThVICAKKworI2RlZmluZSBKRlNfREVTQ1JJUFRPUl9CTE9DSyAxCisjZGVmaW5lIEpGU19DT01NSVRfQkxPQ0sgMgorI2RlZmluZSBKRlNfU1VQRVJCTE9DS19WMSAzCisjZGVmaW5lIEpGU19TVVBFUkJMT0NLX1YyIDQKKyNkZWZpbmUgSkZTX1JFVk9LRV9CTE9DSyA1CisKK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfaGVhZGVyX3MKK3sKKyBfX2JlMzIgaF9tYWdpYzsKKyBfX2JlMzIgaF9ibG9ja3R5cGU7CisgX19iZTMyIGhfc2VxdWVuY2U7Cit9IGpvdXJuYWxfaGVhZGVyX3Q7CisKK3R5cGVkZWYgc3RydWN0IGpvdXJuYWxfYmxvY2tfdGFnX3MKK3sKKyBfX2JlMzIgdF9ibG9ja25yOworIF9fYmUzMiB0X2ZsYWdzOworfSBqb3VybmFsX2Jsb2NrX3RhZ190OworCit0eXBlZGVmIHN0cnVjdCBqb3VybmFsX3Jldm9rZV9oZWFkZXJfcworeworIGpvdXJuYWxfaGVhZGVyX3Qgcl9oZWFkZXI7CisgX19iZTMyIHJfY291bnQ7Cit9IGpvdXJuYWxfcmV2b2tlX2hlYWRlcl90OworCisjZGVmaW5lIEpGU19GTEFHX0VTQ0FQRSAxICAKKyNkZWZpbmUgSkZTX0ZMQUdfU0FNRV9VVUlEIDIgIAorI2RlZmluZSBKRlNfRkxBR19ERUxFVEVEIDQgIAorI2RlZmluZSBKRlNfRkxBR19MQVNUX1RBRyA4ICAKKwordHlwZWRlZiBzdHJ1Y3Qgam91cm5hbF9zdXBlcmJsb2NrX3MKK3sKKworIGpvdXJuYWxfaGVhZGVyX3Qgc19oZWFkZXI7CisKKyBfX2JlMzIgc19ibG9ja3NpemU7CisgX19iZTMyIHNfbWF4bGVuOworIF9fYmUzMiBzX2ZpcnN0OworCisgX19iZTMyIHNfc2VxdWVuY2U7CisgX19iZTMyIHNfc3RhcnQ7CisKKyBfX2JlMzIgc19lcnJubzsKKworIF9fYmUzMiBzX2ZlYXR1cmVfY29tcGF0OworIF9fYmUzMiBzX2ZlYXR1cmVfaW5jb21wYXQ7CisgX19iZTMyIHNfZmVhdHVyZV9yb19jb21wYXQ7CisKKyBfX3U4IHNfdXVpZFsxNl07CisKKyBfX2JlMzIgc19ucl91c2VyczsKKworIF9fYmUzMiBzX2R5bnN1cGVyOworCisgX19iZTMyIHNfbWF4X3RyYW5zYWN0aW9uOworIF9fYmUzMiBzX21heF90cmFuc19kYXRhOworCisgX191MzIgc19wYWRkaW5nWzQ0XTsKKworIF9fdTggc191c2Vyc1sxNio0OF07CisKK30gam91cm5hbF9zdXBlcmJsb2NrX3Q7CisKKyNkZWZpbmUgSkZTX0hBU19DT01QQVRfRkVBVFVSRShqLG1hc2spICAgKChqKS0+al9mb3JtYXRfdmVyc2lvbiA+PSAyICYmICAgKChqKS0+al9zdXBlcmJsb2NrLT5zX2ZlYXR1cmVfY29tcGF0ICYgY3B1X3RvX2JlMzIoKG1hc2spKSkpCisjZGVmaW5lIEpGU19IQVNfUk9fQ09NUEFUX0ZFQVRVUkUoaixtYXNrKSAgICgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJiAgICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX3JvX2NvbXBhdCAmIGNwdV90b19iZTMyKChtYXNrKSkpKQorI2RlZmluZSBKRlNfSEFTX0lOQ09NUEFUX0ZFQVRVUkUoaixtYXNrKSAgICgoaiktPmpfZm9ybWF0X3ZlcnNpb24gPj0gMiAmJiAgICgoaiktPmpfc3VwZXJibG9jay0+c19mZWF0dXJlX2luY29tcGF0ICYgY3B1X3RvX2JlMzIoKG1hc2spKSkpCisKKyNkZWZpbmUgSkZTX0ZFQVRVUkVfSU5DT01QQVRfUkVWT0tFIDB4MDAwMDAwMDEKKworI2RlZmluZSBKRlNfS05PV05fQ09NUEFUX0ZFQVRVUkVTIDAKKyNkZWZpbmUgSkZTX0tOT1dOX1JPQ09NUEFUX0ZFQVRVUkVTIDAKKyNkZWZpbmUgSkZTX0tOT1dOX0lOQ09NUEFUX0ZFQVRVUkVTIEpGU19GRUFUVVJFX0lOQ09NUEFUX1JFVk9LRQorCisjZGVmaW5lIEJKX05vbmUgMCAgCisjZGVmaW5lIEJKX1N5bmNEYXRhIDEgIAorI2RlZmluZSBCSl9NZXRhZGF0YSAyICAKKyNkZWZpbmUgQkpfRm9yZ2V0IDMgIAorI2RlZmluZSBCSl9JTyA0ICAKKyNkZWZpbmUgQkpfU2hhZG93IDUgIAorI2RlZmluZSBCSl9Mb2dDdGwgNiAgCisjZGVmaW5lIEJKX1Jlc2VydmVkIDcgIAorI2RlZmluZSBCSl9Mb2NrZWQgOCAgCisjZGVmaW5lIEJKX1R5cGVzIDkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvamlmZmllcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ppZmZpZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NmI3MDViCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ppZmZpZXMuaApAQCAtMCwwICsxLDExNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfSklGRklFU19ICisjZGVmaW5lIF9MSU5VWF9KSUZGSUVTX0gKKworI2luY2x1ZGUgPGxpbnV4L2NhbGM2NC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWV4Lmg+CisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+ICAKKworI2lmIEhaID49ICgxMiAmJiBIWiA8IDI0KQorI2RlZmluZSBTSElGVF9IWiA0CisjZWxpZiBIWiA+PSAyNCAmJiBIWiA8IDQ4CisjZGVmaW5lIFNISUZUX0haIDUKKyNlbGlmIEhaID49IDQ4ICYmIEhaIDwgOTYKKyNkZWZpbmUgU0hJRlRfSFogNgorI2VsaWYgSFogPj0gOTYgJiYgSFogPCAxOTIKKyNkZWZpbmUgU0hJRlRfSFogNworI2VsaWYgSFogPj0gMTkyICYmIEhaIDwgMzg0CisjZGVmaW5lIFNISUZUX0haIDgKKyNlbGlmIEhaID49IDM4NCAmJiBIWiA8IDc2OAorI2RlZmluZSBTSElGVF9IWiA5CisjZWxpZiBIWiA+PSA3NjggJiYgSFogPCAxNTM2CisjZGVmaW5lIFNISUZUX0haIDEwCisjZWxzZQorI2Vycm9yIFlvdSBsb3NlLgorI2VuZGlmCisKKyNkZWZpbmUgTEFUQ0ggKChDTE9DS19USUNLX1JBVEUgKyBIWi8yKSAvIEhaKSAgCisKKyNkZWZpbmUgTEFUQ0hfSFBFVCAoKEhQRVRfVElDS19SQVRFICsgSFovMikgLyBIWikKKworI2RlZmluZSBTSF9ESVYoTk9NLERFTixMU0gpICggKCgoTk9NKSAvIChERU4pKSA8PCAoTFNIKSkgICArICgoKChOT00pICUgKERFTikpIDw8IChMU0gpKSArIChERU4pIC8gMikgLyAoREVOKSkKKworI2RlZmluZSBBQ1RIWiAoU0hfRElWIChDTE9DS19USUNLX1JBVEUsIExBVENILCA4KSkKKworI2RlZmluZSBBQ1RIWl9IUEVUIChTSF9ESVYgKEhQRVRfVElDS19SQVRFLCBMQVRDSF9IUEVULCA4KSkKKworI2RlZmluZSBUSUNLX05TRUMgKFNIX0RJViAoMTAwMDAwMFVMICogMTAwMCwgQUNUSFosIDgpKQorCisjZGVmaW5lIFRJQ0tfTlNFQ19IUEVUIChTSF9ESVYoMTAwMDAwMFVMICogMTAwMCwgQUNUSFpfSFBFVCwgOCkpCisKKyNkZWZpbmUgVElDS19VU0VDICgoMTAwMDAwMFVMICsgVVNFUl9IWi8yKSAvIFVTRVJfSFopCisKKyNkZWZpbmUgVElDS19VU0VDX1RPX05TRUMoVFVTRUMpIChTSF9ESVYgKFRVU0VDICogVVNFUl9IWiAqIDEwMDAsIEFDVEhaLCA4KSkKKworI2RlZmluZSBfX2ppZmZ5X2RhdGEgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLmRhdGEiKSkpCisKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKworI2Vsc2UKKyNlbmRpZgorI2RlZmluZSB0aW1lX2FmdGVyKGEsYikgICAodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGEpICYmICAgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGIpICYmICAgKChsb25nKShiKSAtIChsb25nKShhKSA8IDApKQorI2RlZmluZSB0aW1lX2JlZm9yZShhLGIpIHRpbWVfYWZ0ZXIoYixhKQorI2RlZmluZSB0aW1lX2FmdGVyX2VxKGEsYikgICAodHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGEpICYmICAgdHlwZWNoZWNrKHVuc2lnbmVkIGxvbmcsIGIpICYmICAgKChsb25nKShhKSAtIChsb25nKShiKSA+PSAwKSkKKyNkZWZpbmUgdGltZV9iZWZvcmVfZXEoYSxiKSB0aW1lX2FmdGVyX2VxKGIsYSkKKyNkZWZpbmUgSU5JVElBTF9KSUZGSUVTICgodW5zaWduZWQgbG9uZykodW5zaWduZWQgaW50KSAoLTMwMCpIWikpCisjZGVmaW5lIE1BWF9KSUZGWV9PRkZTRVQgKCh+MFVMID4+IDEpLTEpCisjZGVmaW5lIFNFQ19KSUZGSUVfU0MgKDMxIC0gU0hJRlRfSFopCisjaWYgISgoTlNFQ19QRVJfU0VDIDw8IDIpIC8gVElDS19OU0VDIDw8IFNFQ19KSUZGSUVfU0MgLSAyICYgMHg4MDAwMDAwMCkKKyN1bmRlZiBTRUNfSklGRklFX1NDCisjZGVmaW5lIFNFQ19KSUZGSUVfU0MgKDMyIC0gU0hJRlRfSFopCisjZW5kaWYKKyNkZWZpbmUgTlNFQ19KSUZGSUVfU0MgKFNFQ19KSUZGSUVfU0MgKyAyOSkKKyNkZWZpbmUgVVNFQ19KSUZGSUVfU0MgKFNFQ19KSUZGSUVfU0MgKyAxOSkKKyNkZWZpbmUgU0VDX0NPTlZFUlNJT04gKCh1bnNpZ25lZCBsb25nKSgoKCh1NjQpTlNFQ19QRVJfU0VDIDw8IFNFQ19KSUZGSUVfU0MpICsgIFRJQ0tfTlNFQyAtMSkgLyAodTY0KVRJQ0tfTlNFQykpCisjZGVmaW5lIE5TRUNfQ09OVkVSU0lPTiAoKHVuc2lnbmVkIGxvbmcpKCgoKHU2NCkxIDw8IE5TRUNfSklGRklFX1NDKSArICBUSUNLX05TRUMgLTEpIC8gKHU2NClUSUNLX05TRUMpKQorI2RlZmluZSBVU0VDX0NPTlZFUlNJT04gICAoKHVuc2lnbmVkIGxvbmcpKCgoKHU2NClOU0VDX1BFUl9VU0VDIDw8IFVTRUNfSklGRklFX1NDKSArICBUSUNLX05TRUMgLTEpIC8gKHU2NClUSUNLX05TRUMpKQorI2RlZmluZSBVU0VDX1JPVU5EICh1NjQpKCgodTY0KTEgPDwgVVNFQ19KSUZGSUVfU0MpIC0gMSkKKyNpZiBCSVRTX1BFUl9MT05HIDwgNjQKKyNkZWZpbmUgTUFYX1NFQ19JTl9KSUZGSUVTICAgKGxvbmcpKCh1NjQpKCh1NjQpTUFYX0pJRkZZX09GRlNFVCAqIFRJQ0tfTlNFQykgLyBOU0VDX1BFUl9TRUMpCisjZWxzZQorI2RlZmluZSBNQVhfU0VDX0lOX0pJRkZJRVMgICAoU0hfRElWKChNQVhfSklGRllfT0ZGU0VUID4+IFNFQ19KSUZGSUVfU0MpICogVElDS19OU0VDLCBOU0VDX1BFUl9TRUMsIDEpIC0gMSkKKyNlbmRpZgorI2lmIEhaIDw9IChNU0VDX1BFUl9TRUMgJiYgIShNU0VDX1BFUl9TRUMgJSBIWikpCisjZWxpZiBIWiA+IE1TRUNfUEVSX1NFQyAmJiAhKEhaICUgTVNFQ19QRVJfU0VDKQorI2Vsc2UKKyNlbmRpZgorI2lmIEhaIDw9IChVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikpCisjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQorI2Vsc2UKKyNlbmRpZgorI2lmIEhaIDw9IChNU0VDX1BFUl9TRUMgJiYgIShNU0VDX1BFUl9TRUMgJSBIWikpCisjZWxpZiBIWiA+IE1TRUNfUEVSX1NFQyAmJiAhKEhaICUgTVNFQ19QRVJfU0VDKQorI2Vsc2UKKyNlbmRpZgorI2lmIEhaIDw9IChVU0VDX1BFUl9TRUMgJiYgIShVU0VDX1BFUl9TRUMgJSBIWikpCisjZWxpZiBIWiA+IFVTRUNfUEVSX1NFQyAmJiAhKEhaICUgVVNFQ19QRVJfU0VDKQorI2Vsc2UKKyNlbmRpZgorI2lmIFRJQ0tfTlNFQyAlIE5TRUNfUEVSX1NFQyAvIFVTRVJfSFogPT0gMAorI2Vsc2UKKyNlbmRpZgorI2lmIEhaICUgVVNFUl9IWiA9PSAwCisjZWxzZQorI2VuZGlmCisjaWYgVElDS19OU0VDICUgTlNFQ19QRVJfU0VDIC8gVVNFUl9IWiA9PSAwCisjZWxzZQorI2VuZGlmCisjaWYgTlNFQ19QRVJfU0VDICUgVVNFUl9IWiA9PSAwCisjZWxpZiAoVVNFUl9IWiAlIDUxMikgPT0gMAorI2Vsc2UKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1NDFkZGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2QuaApAQCAtMCwwICsxLDE3NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfS0RfSAorI2RlZmluZSBfTElOVVhfS0RfSAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBHSU9fRk9OVCAweDRCNjAgIAorI2RlZmluZSBQSU9fRk9OVCAweDRCNjEgIAorCisjZGVmaW5lIEdJT19GT05UWCAweDRCNkIgIAorI2RlZmluZSBQSU9fRk9OVFggMHg0QjZDICAKK3N0cnVjdCBjb25zb2xlZm9udGRlc2MgeworIHVuc2lnbmVkIHNob3J0IGNoYXJjb3VudDsKKyB1bnNpZ25lZCBzaG9ydCBjaGFyaGVpZ2h0OworIGNoYXIgX191c2VyICpjaGFyZGF0YTsKK307CisKKyNkZWZpbmUgUElPX0ZPTlRSRVNFVCAweDRCNkQgIAorCisjZGVmaW5lIEdJT19DTUFQIDB4NEI3MCAgCisjZGVmaW5lIFBJT19DTUFQIDB4NEI3MSAgCisKKyNkZWZpbmUgS0lPQ1NPVU5EIDB4NEIyRiAgCisjZGVmaW5lIEtETUtUT05FIDB4NEIzMCAgCisKKyNkZWZpbmUgS0RHRVRMRUQgMHg0QjMxICAKKyNkZWZpbmUgS0RTRVRMRUQgMHg0QjMyICAKKyNkZWZpbmUgTEVEX1NDUiAweDAxICAKKyNkZWZpbmUgTEVEX05VTSAweDAyICAKKyNkZWZpbmUgTEVEX0NBUCAweDA0ICAKKworI2RlZmluZSBLREdLQlRZUEUgMHg0QjMzICAKKyNkZWZpbmUgS0JfODQgMHgwMQorI2RlZmluZSBLQl8xMDEgMHgwMiAgCisjZGVmaW5lIEtCX09USEVSIDB4MDMKKworI2RlZmluZSBLREFERElPIDB4NEIzNCAgCisjZGVmaW5lIEtEREVMSU8gMHg0QjM1ICAKKyNkZWZpbmUgS0RFTkFCSU8gMHg0QjM2ICAKKyNkZWZpbmUgS0RESVNBQklPIDB4NEIzNyAgCisKKyNkZWZpbmUgS0RTRVRNT0RFIDB4NEIzQSAgCisjZGVmaW5lIEtEX1RFWFQgMHgwMAorI2RlZmluZSBLRF9HUkFQSElDUyAweDAxCisjZGVmaW5lIEtEX1RFWFQwIDB4MDIgIAorI2RlZmluZSBLRF9URVhUMSAweDAzICAKKyNkZWZpbmUgS0RHRVRNT0RFIDB4NEIzQiAgCisKKyNkZWZpbmUgS0RNQVBESVNQIDB4NEIzQyAgCisjZGVmaW5lIEtEVU5NQVBESVNQIDB4NEIzRCAgCisKK3R5cGVkZWYgY2hhciBzY3JubWFwX3Q7CisjZGVmaW5lIEVfVEFCU1ogMjU2CisjZGVmaW5lIEdJT19TQ1JOTUFQIDB4NEI0MCAgCisjZGVmaW5lIFBJT19TQ1JOTUFQIDB4NEI0MSAgCisjZGVmaW5lIEdJT19VTklTQ1JOTUFQIDB4NEI2OSAgCisjZGVmaW5lIFBJT19VTklTQ1JOTUFQIDB4NEI2QSAgCisKKyNkZWZpbmUgR0lPX1VOSU1BUCAweDRCNjYgIAorc3RydWN0IHVuaXBhaXIgeworIHVuc2lnbmVkIHNob3J0IHVuaWNvZGU7CisgdW5zaWduZWQgc2hvcnQgZm9udHBvczsKK307CitzdHJ1Y3QgdW5pbWFwZGVzYyB7CisgdW5zaWduZWQgc2hvcnQgZW50cnlfY3Q7Cisgc3RydWN0IHVuaXBhaXIgX191c2VyICplbnRyaWVzOworfTsKKyNkZWZpbmUgUElPX1VOSU1BUCAweDRCNjcgIAorI2RlZmluZSBQSU9fVU5JTUFQQ0xSIDB4NEI2OCAgCitzdHJ1Y3QgdW5pbWFwaW5pdCB7CisgdW5zaWduZWQgc2hvcnQgYWR2aXNlZF9oYXNoc2l6ZTsKKyB1bnNpZ25lZCBzaG9ydCBhZHZpc2VkX2hhc2hzdGVwOworIHVuc2lnbmVkIHNob3J0IGFkdmlzZWRfaGFzaGxldmVsOworfTsKKworI2RlZmluZSBVTklfRElSRUNUX0JBU0UgMHhGMDAwICAKKyNkZWZpbmUgVU5JX0RJUkVDVF9NQVNLIDB4MDFGRiAgCisKKyNkZWZpbmUgS19SQVcgMHgwMAorI2RlZmluZSBLX1hMQVRFIDB4MDEKKyNkZWZpbmUgS19NRURJVU1SQVcgMHgwMgorI2RlZmluZSBLX1VOSUNPREUgMHgwMworI2RlZmluZSBLREdLQk1PREUgMHg0QjQ0ICAKKyNkZWZpbmUgS0RTS0JNT0RFIDB4NEI0NSAgCisKKyNkZWZpbmUgS19NRVRBQklUIDB4MDMKKyNkZWZpbmUgS19FU0NQUkVGSVggMHgwNAorI2RlZmluZSBLREdLQk1FVEEgMHg0QjYyICAKKyNkZWZpbmUgS0RTS0JNRVRBIDB4NEI2MyAgCisKKyNkZWZpbmUgS19TQ1JPTExMT0NLIDB4MDEKKyNkZWZpbmUgS19OVU1MT0NLIDB4MDIKKyNkZWZpbmUgS19DQVBTTE9DSyAweDA0CisjZGVmaW5lIEtER0tCTEVEIDB4NEI2NCAgCisjZGVmaW5lIEtEU0tCTEVEIDB4NEI2NSAgCisKK3N0cnVjdCBrYmVudHJ5IHsKKyB1bnNpZ25lZCBjaGFyIGtiX3RhYmxlOworIHVuc2lnbmVkIGNoYXIga2JfaW5kZXg7CisgdW5zaWduZWQgc2hvcnQga2JfdmFsdWU7Cit9OworI2RlZmluZSBLX05PUk1UQUIgMHgwMAorI2RlZmluZSBLX1NISUZUVEFCIDB4MDEKKyNkZWZpbmUgS19BTFRUQUIgMHgwMgorI2RlZmluZSBLX0FMVFNISUZUVEFCIDB4MDMKKworI2RlZmluZSBLREdLQkVOVCAweDRCNDYgIAorI2RlZmluZSBLRFNLQkVOVCAweDRCNDcgIAorCitzdHJ1Y3Qga2JzZW50cnkgeworIHVuc2lnbmVkIGNoYXIga2JfZnVuYzsKKyB1bnNpZ25lZCBjaGFyIGtiX3N0cmluZ1s1MTJdOworfTsKKyNkZWZpbmUgS0RHS0JTRU5UIDB4NEI0OCAgCisjZGVmaW5lIEtEU0tCU0VOVCAweDRCNDkgIAorCitzdHJ1Y3Qga2JkaWFjciB7CisgdW5zaWduZWQgY2hhciBkaWFjciwgYmFzZSwgcmVzdWx0OworfTsKK3N0cnVjdCBrYmRpYWNycyB7CisgdW5zaWduZWQgaW50IGtiX2NudDsKKyBzdHJ1Y3Qga2JkaWFjciBrYmRpYWNyWzI1Nl07Cit9OworI2RlZmluZSBLREdLQkRJQUNSIDB4NEI0QSAgCisjZGVmaW5lIEtEU0tCRElBQ1IgMHg0QjRCICAKKworc3RydWN0IGtia2V5Y29kZSB7CisgdW5zaWduZWQgaW50IHNjYW5jb2RlLCBrZXljb2RlOworfTsKKyNkZWZpbmUgS0RHRVRLRVlDT0RFIDB4NEI0QyAgCisjZGVmaW5lIEtEU0VUS0VZQ09ERSAweDRCNEQgIAorCisjZGVmaW5lIEtEU0lHQUNDRVBUIDB4NEI0RSAgCisKK3N0cnVjdCBrYmRfcmVwZWF0IHsKKyBpbnQgZGVsYXk7CisgaW50IHBlcmlvZDsKKworfTsKKworI2RlZmluZSBLREtCRFJFUCAweDRCNTIgIAorCisjZGVmaW5lIEtERk9OVE9QIDB4NEI3MiAgCisKK3N0cnVjdCBjb25zb2xlX2ZvbnRfb3AgeworIHVuc2lnbmVkIGludCBvcDsKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7CisgdW5zaWduZWQgaW50IHdpZHRoLCBoZWlnaHQ7CisgdW5zaWduZWQgaW50IGNoYXJjb3VudDsKKyB1bnNpZ25lZCBjaGFyIF9fdXNlciAqZGF0YTsKK307CisKK3N0cnVjdCBjb25zb2xlX2ZvbnQgeworIHVuc2lnbmVkIGludCB3aWR0aCwgaGVpZ2h0OworIHVuc2lnbmVkIGludCBjaGFyY291bnQ7CisgdW5zaWduZWQgY2hhciAqZGF0YTsKK307CisKKyNkZWZpbmUgS0RfRk9OVF9PUF9TRVQgMCAgCisjZGVmaW5lIEtEX0ZPTlRfT1BfR0VUIDEgIAorI2RlZmluZSBLRF9GT05UX09QX1NFVF9ERUZBVUxUIDIgIAorI2RlZmluZSBLRF9GT05UX09QX0NPUFkgMyAgCisKKyNkZWZpbmUgS0RfRk9OVF9GTEFHX0RPTlRfUkVDQUxDIDEgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZGV2X3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZGV2X3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTdmOWMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tkZXZfdC5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0tERVZfVF9ICisjZGVmaW5lIF9MSU5VWF9LREVWX1RfSAorCisjZGVmaW5lIE1BSk9SKGRldikgKChkZXYpPj44KQorI2RlZmluZSBNSU5PUihkZXYpICgoZGV2KSAmIDB4ZmYpCisjZGVmaW5lIE1LREVWKG1hLG1pKSAoKG1hKTw8OCB8IChtaSkpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjgyZTQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0tFUk5FTF9ICisjZGVmaW5lIF9MSU5VWF9LRVJORUxfSAorCisjZGVmaW5lIFNJX0xPQURfU0hJRlQgMTYKK3N0cnVjdCBzeXNpbmZvIHsKKyBsb25nIHVwdGltZTsKKyB1bnNpZ25lZCBsb25nIGxvYWRzWzNdOworIHVuc2lnbmVkIGxvbmcgdG90YWxyYW07CisgdW5zaWduZWQgbG9uZyBmcmVlcmFtOworIHVuc2lnbmVkIGxvbmcgc2hhcmVkcmFtOworIHVuc2lnbmVkIGxvbmcgYnVmZmVycmFtOworIHVuc2lnbmVkIGxvbmcgdG90YWxzd2FwOworIHVuc2lnbmVkIGxvbmcgZnJlZXN3YXA7CisgdW5zaWduZWQgc2hvcnQgcHJvY3M7CisgdW5zaWduZWQgc2hvcnQgcGFkOworIHVuc2lnbmVkIGxvbmcgdG90YWxoaWdoOworIHVuc2lnbmVkIGxvbmcgZnJlZWhpZ2g7CisgdW5zaWduZWQgaW50IG1lbV91bml0OworIGNoYXIgX2ZbMjAtMipzaXplb2YobG9uZyktc2l6ZW9mKGludCldOworfTsKKworI2RlZmluZSBCVUlMRF9CVUdfT04oY29uZGl0aW9uKSAoKHZvaWQpc2l6ZW9mKGNoYXJbMSAtIDIqISEoY29uZGl0aW9uKV0pKQorCisjZGVmaW5lIEJVSUxEX0JVR19PTl9aRVJPKGUpIChzaXplb2YoY2hhclsxIC0gMiAqICEhKGUpXSkgLSAxKQorCisjZGVmaW5lIF9fRlVOQ1RJT05fXyAoX19mdW5jX18pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbF9zdGF0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2VybmVsX3N0YXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzMzNzM2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbF9zdGF0LmgKQEAgLTAsMCArMSw0MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfS0VSTkVMX1NUQVRfSAorI2RlZmluZSBfTElOVVhfS0VSTkVMX1NUQVRfSAorCisjaW5jbHVkZSA8YXNtL2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8YXNtL2NwdXRpbWUuaD4KKworc3RydWN0IGNwdV91c2FnZV9zdGF0IHsKKyBjcHV0aW1lNjRfdCB1c2VyOworIGNwdXRpbWU2NF90IG5pY2U7CisgY3B1dGltZTY0X3Qgc3lzdGVtOworIGNwdXRpbWU2NF90IHNvZnRpcnE7CisgY3B1dGltZTY0X3QgaXJxOworIGNwdXRpbWU2NF90IGlkbGU7CisgY3B1dGltZTY0X3QgaW93YWl0OworIGNwdXRpbWU2NF90IHN0ZWFsOworfTsKKworc3RydWN0IGtlcm5lbF9zdGF0IHsKKyBzdHJ1Y3QgY3B1X3VzYWdlX3N0YXQgY3B1c3RhdDsKKyB1bnNpZ25lZCBpbnQgaXJxc1tOUl9JUlFTXTsKK307CisKKyNkZWZpbmUga3N0YXRfY3B1KGNwdSkgcGVyX2NwdShrc3RhdCwgY3B1KQorCisjZGVmaW5lIGtzdGF0X3RoaXNfY3B1IF9fZ2V0X2NwdV92YXIoa3N0YXQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tlcm5lbGNhcGkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxjYXBpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDYzOGIwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXJuZWxjYXBpLmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0tFUk5FTENBUElfSF9fCisjZGVmaW5lIF9fS0VSTkVMQ0FQSV9IX18KKworI2RlZmluZSBDQVBJX01BWEFQUEwgMjQwICAKKyNkZWZpbmUgQ0FQSV9NQVhDT05UUiAzMiAgCisjZGVmaW5lIENBUElfTUFYREFUQVdJTkRPVyA4CisKK3R5cGVkZWYgc3RydWN0IGtjYXBpX2ZsYWdkZWYgeworIGludCBjb250cjsKKyBpbnQgZmxhZzsKK30ga2NhcGlfZmxhZ2RlZjsKKwordHlwZWRlZiBzdHJ1Y3Qga2NhcGlfY2FyZGRlZiB7CisgY2hhciBkcml2ZXJbMzJdOworIHVuc2lnbmVkIGludCBwb3J0OworIHVuc2lnbmVkIGlycTsKKyB1bnNpZ25lZCBpbnQgbWVtYmFzZTsKKyBpbnQgY2FyZG5yOworfSBrY2FwaV9jYXJkZGVmOworCisjZGVmaW5lIEtDQVBJX0NNRF9UUkFDRSAxMAorI2RlZmluZSBLQ0FQSV9DTURfQUREQ0FSRCAxMSAgCisKKyNkZWZpbmUgS0NBUElfVFJBQ0VfT0ZGIDAKKyNkZWZpbmUgS0NBUElfVFJBQ0VfU0hPUlRfTk9fREFUQSAxCisjZGVmaW5lIEtDQVBJX1RSQUNFX0ZVTExfTk9fREFUQSAyCisjZGVmaW5lIEtDQVBJX1RSQUNFX1NIT1JUIDMKKyNkZWZpbmUgS0NBUElfVFJBQ0VfRlVMTCA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V4ZWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MDA0NjQ2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleGVjLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9LRVhFQ19ICisjZGVmaW5lIExJTlVYX0tFWEVDX0gKKworc3RydWN0IHB0X3JlZ3M7CitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41YzQ4NWQ3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0tFWV9ICisjZGVmaW5lIF9MSU5VWF9LRVlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvcmJ0cmVlLmg+CisjaW5jbHVkZSA8bGludXgvcmN1cGRhdGUuaD4KKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2V5Ym9hcmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNWUwOTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tleWJvYXJkLmgKQEAgLTAsMCArMSw0NDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9LRVlCT0FSRF9ICisjZGVmaW5lIF9fTElOVVhfS0VZQk9BUkRfSAorCisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorCisjZGVmaW5lIEtHX1NISUZUIDAKKyNkZWZpbmUgS0dfQ1RSTCAyCisjZGVmaW5lIEtHX0FMVCAzCisjZGVmaW5lIEtHX0FMVEdSIDEKKyNkZWZpbmUgS0dfU0hJRlRMIDQKKyNkZWZpbmUgS0dfS0FOQVNISUZUIDQKKyNkZWZpbmUgS0dfU0hJRlRSIDUKKyNkZWZpbmUgS0dfQ1RSTEwgNgorI2RlZmluZSBLR19DVFJMUiA3CisjZGVmaW5lIEtHX0NBUFNTSElGVCA4CisKKyNkZWZpbmUgTlJfU0hJRlQgOQorCisjZGVmaW5lIE5SX0tFWVMgMjU2CisjZGVmaW5lIE1BWF9OUl9LRVlNQVBTIDI1NgorCisjZGVmaW5lIE1BWF9OUl9PRl9VU0VSX0tFWU1BUFMgMjU2ICAKKworI2RlZmluZSBNQVhfTlJfRlVOQyAyNTYgIAorCisjZGVmaW5lIEtUX0xBVElOIDAgIAorI2RlZmluZSBLVF9MRVRURVIgMTEgIAorI2RlZmluZSBLVF9GTiAxCisjZGVmaW5lIEtUX1NQRUMgMgorI2RlZmluZSBLVF9QQUQgMworI2RlZmluZSBLVF9ERUFEIDQKKyNkZWZpbmUgS1RfQ09OUyA1CisjZGVmaW5lIEtUX0NVUiA2CisjZGVmaW5lIEtUX1NISUZUIDcKKyNkZWZpbmUgS1RfTUVUQSA4CisjZGVmaW5lIEtUX0FTQ0lJIDkKKyNkZWZpbmUgS1RfTE9DSyAxMAorI2RlZmluZSBLVF9TTE9DSyAxMgorI2RlZmluZSBLVF9CUkwgMTQKKworI2RlZmluZSBLKHQsdikgKCgodCk8PDgpfCh2KSkKKyNkZWZpbmUgS1RZUCh4KSAoKHgpID4+IDgpCisjZGVmaW5lIEtWQUwoeCkgKCh4KSAmIDB4ZmYpCisKKyNkZWZpbmUgS19GMSBLKEtUX0ZOLDApCisjZGVmaW5lIEtfRjIgSyhLVF9GTiwxKQorI2RlZmluZSBLX0YzIEsoS1RfRk4sMikKKyNkZWZpbmUgS19GNCBLKEtUX0ZOLDMpCisjZGVmaW5lIEtfRjUgSyhLVF9GTiw0KQorI2RlZmluZSBLX0Y2IEsoS1RfRk4sNSkKKyNkZWZpbmUgS19GNyBLKEtUX0ZOLDYpCisjZGVmaW5lIEtfRjggSyhLVF9GTiw3KQorI2RlZmluZSBLX0Y5IEsoS1RfRk4sOCkKKyNkZWZpbmUgS19GMTAgSyhLVF9GTiw5KQorI2RlZmluZSBLX0YxMSBLKEtUX0ZOLDEwKQorI2RlZmluZSBLX0YxMiBLKEtUX0ZOLDExKQorI2RlZmluZSBLX0YxMyBLKEtUX0ZOLDEyKQorI2RlZmluZSBLX0YxNCBLKEtUX0ZOLDEzKQorI2RlZmluZSBLX0YxNSBLKEtUX0ZOLDE0KQorI2RlZmluZSBLX0YxNiBLKEtUX0ZOLDE1KQorI2RlZmluZSBLX0YxNyBLKEtUX0ZOLDE2KQorI2RlZmluZSBLX0YxOCBLKEtUX0ZOLDE3KQorI2RlZmluZSBLX0YxOSBLKEtUX0ZOLDE4KQorI2RlZmluZSBLX0YyMCBLKEtUX0ZOLDE5KQorI2RlZmluZSBLX0ZJTkQgSyhLVF9GTiwyMCkKKyNkZWZpbmUgS19JTlNFUlQgSyhLVF9GTiwyMSkKKyNkZWZpbmUgS19SRU1PVkUgSyhLVF9GTiwyMikKKyNkZWZpbmUgS19TRUxFQ1QgSyhLVF9GTiwyMykKKyNkZWZpbmUgS19QR1VQIEsoS1RfRk4sMjQpICAKKyNkZWZpbmUgS19QR0ROIEsoS1RfRk4sMjUpICAKKyNkZWZpbmUgS19NQUNSTyBLKEtUX0ZOLDI2KQorI2RlZmluZSBLX0hFTFAgSyhLVF9GTiwyNykKKyNkZWZpbmUgS19ETyBLKEtUX0ZOLDI4KQorI2RlZmluZSBLX1BBVVNFIEsoS1RfRk4sMjkpCisjZGVmaW5lIEtfRjIxIEsoS1RfRk4sMzApCisjZGVmaW5lIEtfRjIyIEsoS1RfRk4sMzEpCisjZGVmaW5lIEtfRjIzIEsoS1RfRk4sMzIpCisjZGVmaW5lIEtfRjI0IEsoS1RfRk4sMzMpCisjZGVmaW5lIEtfRjI1IEsoS1RfRk4sMzQpCisjZGVmaW5lIEtfRjI2IEsoS1RfRk4sMzUpCisjZGVmaW5lIEtfRjI3IEsoS1RfRk4sMzYpCisjZGVmaW5lIEtfRjI4IEsoS1RfRk4sMzcpCisjZGVmaW5lIEtfRjI5IEsoS1RfRk4sMzgpCisjZGVmaW5lIEtfRjMwIEsoS1RfRk4sMzkpCisjZGVmaW5lIEtfRjMxIEsoS1RfRk4sNDApCisjZGVmaW5lIEtfRjMyIEsoS1RfRk4sNDEpCisjZGVmaW5lIEtfRjMzIEsoS1RfRk4sNDIpCisjZGVmaW5lIEtfRjM0IEsoS1RfRk4sNDMpCisjZGVmaW5lIEtfRjM1IEsoS1RfRk4sNDQpCisjZGVmaW5lIEtfRjM2IEsoS1RfRk4sNDUpCisjZGVmaW5lIEtfRjM3IEsoS1RfRk4sNDYpCisjZGVmaW5lIEtfRjM4IEsoS1RfRk4sNDcpCisjZGVmaW5lIEtfRjM5IEsoS1RfRk4sNDgpCisjZGVmaW5lIEtfRjQwIEsoS1RfRk4sNDkpCisjZGVmaW5lIEtfRjQxIEsoS1RfRk4sNTApCisjZGVmaW5lIEtfRjQyIEsoS1RfRk4sNTEpCisjZGVmaW5lIEtfRjQzIEsoS1RfRk4sNTIpCisjZGVmaW5lIEtfRjQ0IEsoS1RfRk4sNTMpCisjZGVmaW5lIEtfRjQ1IEsoS1RfRk4sNTQpCisjZGVmaW5lIEtfRjQ2IEsoS1RfRk4sNTUpCisjZGVmaW5lIEtfRjQ3IEsoS1RfRk4sNTYpCisjZGVmaW5lIEtfRjQ4IEsoS1RfRk4sNTcpCisjZGVmaW5lIEtfRjQ5IEsoS1RfRk4sNTgpCisjZGVmaW5lIEtfRjUwIEsoS1RfRk4sNTkpCisjZGVmaW5lIEtfRjUxIEsoS1RfRk4sNjApCisjZGVmaW5lIEtfRjUyIEsoS1RfRk4sNjEpCisjZGVmaW5lIEtfRjUzIEsoS1RfRk4sNjIpCisjZGVmaW5lIEtfRjU0IEsoS1RfRk4sNjMpCisjZGVmaW5lIEtfRjU1IEsoS1RfRk4sNjQpCisjZGVmaW5lIEtfRjU2IEsoS1RfRk4sNjUpCisjZGVmaW5lIEtfRjU3IEsoS1RfRk4sNjYpCisjZGVmaW5lIEtfRjU4IEsoS1RfRk4sNjcpCisjZGVmaW5lIEtfRjU5IEsoS1RfRk4sNjgpCisjZGVmaW5lIEtfRjYwIEsoS1RfRk4sNjkpCisjZGVmaW5lIEtfRjYxIEsoS1RfRk4sNzApCisjZGVmaW5lIEtfRjYyIEsoS1RfRk4sNzEpCisjZGVmaW5lIEtfRjYzIEsoS1RfRk4sNzIpCisjZGVmaW5lIEtfRjY0IEsoS1RfRk4sNzMpCisjZGVmaW5lIEtfRjY1IEsoS1RfRk4sNzQpCisjZGVmaW5lIEtfRjY2IEsoS1RfRk4sNzUpCisjZGVmaW5lIEtfRjY3IEsoS1RfRk4sNzYpCisjZGVmaW5lIEtfRjY4IEsoS1RfRk4sNzcpCisjZGVmaW5lIEtfRjY5IEsoS1RfRk4sNzgpCisjZGVmaW5lIEtfRjcwIEsoS1RfRk4sNzkpCisjZGVmaW5lIEtfRjcxIEsoS1RfRk4sODApCisjZGVmaW5lIEtfRjcyIEsoS1RfRk4sODEpCisjZGVmaW5lIEtfRjczIEsoS1RfRk4sODIpCisjZGVmaW5lIEtfRjc0IEsoS1RfRk4sODMpCisjZGVmaW5lIEtfRjc1IEsoS1RfRk4sODQpCisjZGVmaW5lIEtfRjc2IEsoS1RfRk4sODUpCisjZGVmaW5lIEtfRjc3IEsoS1RfRk4sODYpCisjZGVmaW5lIEtfRjc4IEsoS1RfRk4sODcpCisjZGVmaW5lIEtfRjc5IEsoS1RfRk4sODgpCisjZGVmaW5lIEtfRjgwIEsoS1RfRk4sODkpCisjZGVmaW5lIEtfRjgxIEsoS1RfRk4sOTApCisjZGVmaW5lIEtfRjgyIEsoS1RfRk4sOTEpCisjZGVmaW5lIEtfRjgzIEsoS1RfRk4sOTIpCisjZGVmaW5lIEtfRjg0IEsoS1RfRk4sOTMpCisjZGVmaW5lIEtfRjg1IEsoS1RfRk4sOTQpCisjZGVmaW5lIEtfRjg2IEsoS1RfRk4sOTUpCisjZGVmaW5lIEtfRjg3IEsoS1RfRk4sOTYpCisjZGVmaW5lIEtfRjg4IEsoS1RfRk4sOTcpCisjZGVmaW5lIEtfRjg5IEsoS1RfRk4sOTgpCisjZGVmaW5lIEtfRjkwIEsoS1RfRk4sOTkpCisjZGVmaW5lIEtfRjkxIEsoS1RfRk4sMTAwKQorI2RlZmluZSBLX0Y5MiBLKEtUX0ZOLDEwMSkKKyNkZWZpbmUgS19GOTMgSyhLVF9GTiwxMDIpCisjZGVmaW5lIEtfRjk0IEsoS1RfRk4sMTAzKQorI2RlZmluZSBLX0Y5NSBLKEtUX0ZOLDEwNCkKKyNkZWZpbmUgS19GOTYgSyhLVF9GTiwxMDUpCisjZGVmaW5lIEtfRjk3IEsoS1RfRk4sMTA2KQorI2RlZmluZSBLX0Y5OCBLKEtUX0ZOLDEwNykKKyNkZWZpbmUgS19GOTkgSyhLVF9GTiwxMDgpCisjZGVmaW5lIEtfRjEwMCBLKEtUX0ZOLDEwOSkKKyNkZWZpbmUgS19GMTAxIEsoS1RfRk4sMTEwKQorI2RlZmluZSBLX0YxMDIgSyhLVF9GTiwxMTEpCisjZGVmaW5lIEtfRjEwMyBLKEtUX0ZOLDExMikKKyNkZWZpbmUgS19GMTA0IEsoS1RfRk4sMTEzKQorI2RlZmluZSBLX0YxMDUgSyhLVF9GTiwxMTQpCisjZGVmaW5lIEtfRjEwNiBLKEtUX0ZOLDExNSkKKyNkZWZpbmUgS19GMTA3IEsoS1RfRk4sMTE2KQorI2RlZmluZSBLX0YxMDggSyhLVF9GTiwxMTcpCisjZGVmaW5lIEtfRjEwOSBLKEtUX0ZOLDExOCkKKyNkZWZpbmUgS19GMTEwIEsoS1RfRk4sMTE5KQorI2RlZmluZSBLX0YxMTEgSyhLVF9GTiwxMjApCisjZGVmaW5lIEtfRjExMiBLKEtUX0ZOLDEyMSkKKyNkZWZpbmUgS19GMTEzIEsoS1RfRk4sMTIyKQorI2RlZmluZSBLX0YxMTQgSyhLVF9GTiwxMjMpCisjZGVmaW5lIEtfRjExNSBLKEtUX0ZOLDEyNCkKKyNkZWZpbmUgS19GMTE2IEsoS1RfRk4sMTI1KQorI2RlZmluZSBLX0YxMTcgSyhLVF9GTiwxMjYpCisjZGVmaW5lIEtfRjExOCBLKEtUX0ZOLDEyNykKKyNkZWZpbmUgS19GMTE5IEsoS1RfRk4sMTI4KQorI2RlZmluZSBLX0YxMjAgSyhLVF9GTiwxMjkpCisjZGVmaW5lIEtfRjEyMSBLKEtUX0ZOLDEzMCkKKyNkZWZpbmUgS19GMTIyIEsoS1RfRk4sMTMxKQorI2RlZmluZSBLX0YxMjMgSyhLVF9GTiwxMzIpCisjZGVmaW5lIEtfRjEyNCBLKEtUX0ZOLDEzMykKKyNkZWZpbmUgS19GMTI1IEsoS1RfRk4sMTM0KQorI2RlZmluZSBLX0YxMjYgSyhLVF9GTiwxMzUpCisjZGVmaW5lIEtfRjEyNyBLKEtUX0ZOLDEzNikKKyNkZWZpbmUgS19GMTI4IEsoS1RfRk4sMTM3KQorI2RlZmluZSBLX0YxMjkgSyhLVF9GTiwxMzgpCisjZGVmaW5lIEtfRjEzMCBLKEtUX0ZOLDEzOSkKKyNkZWZpbmUgS19GMTMxIEsoS1RfRk4sMTQwKQorI2RlZmluZSBLX0YxMzIgSyhLVF9GTiwxNDEpCisjZGVmaW5lIEtfRjEzMyBLKEtUX0ZOLDE0MikKKyNkZWZpbmUgS19GMTM0IEsoS1RfRk4sMTQzKQorI2RlZmluZSBLX0YxMzUgSyhLVF9GTiwxNDQpCisjZGVmaW5lIEtfRjEzNiBLKEtUX0ZOLDE0NSkKKyNkZWZpbmUgS19GMTM3IEsoS1RfRk4sMTQ2KQorI2RlZmluZSBLX0YxMzggSyhLVF9GTiwxNDcpCisjZGVmaW5lIEtfRjEzOSBLKEtUX0ZOLDE0OCkKKyNkZWZpbmUgS19GMTQwIEsoS1RfRk4sMTQ5KQorI2RlZmluZSBLX0YxNDEgSyhLVF9GTiwxNTApCisjZGVmaW5lIEtfRjE0MiBLKEtUX0ZOLDE1MSkKKyNkZWZpbmUgS19GMTQzIEsoS1RfRk4sMTUyKQorI2RlZmluZSBLX0YxNDQgSyhLVF9GTiwxNTMpCisjZGVmaW5lIEtfRjE0NSBLKEtUX0ZOLDE1NCkKKyNkZWZpbmUgS19GMTQ2IEsoS1RfRk4sMTU1KQorI2RlZmluZSBLX0YxNDcgSyhLVF9GTiwxNTYpCisjZGVmaW5lIEtfRjE0OCBLKEtUX0ZOLDE1NykKKyNkZWZpbmUgS19GMTQ5IEsoS1RfRk4sMTU4KQorI2RlZmluZSBLX0YxNTAgSyhLVF9GTiwxNTkpCisjZGVmaW5lIEtfRjE1MSBLKEtUX0ZOLDE2MCkKKyNkZWZpbmUgS19GMTUyIEsoS1RfRk4sMTYxKQorI2RlZmluZSBLX0YxNTMgSyhLVF9GTiwxNjIpCisjZGVmaW5lIEtfRjE1NCBLKEtUX0ZOLDE2MykKKyNkZWZpbmUgS19GMTU1IEsoS1RfRk4sMTY0KQorI2RlZmluZSBLX0YxNTYgSyhLVF9GTiwxNjUpCisjZGVmaW5lIEtfRjE1NyBLKEtUX0ZOLDE2NikKKyNkZWZpbmUgS19GMTU4IEsoS1RfRk4sMTY3KQorI2RlZmluZSBLX0YxNTkgSyhLVF9GTiwxNjgpCisjZGVmaW5lIEtfRjE2MCBLKEtUX0ZOLDE2OSkKKyNkZWZpbmUgS19GMTYxIEsoS1RfRk4sMTcwKQorI2RlZmluZSBLX0YxNjIgSyhLVF9GTiwxNzEpCisjZGVmaW5lIEtfRjE2MyBLKEtUX0ZOLDE3MikKKyNkZWZpbmUgS19GMTY0IEsoS1RfRk4sMTczKQorI2RlZmluZSBLX0YxNjUgSyhLVF9GTiwxNzQpCisjZGVmaW5lIEtfRjE2NiBLKEtUX0ZOLDE3NSkKKyNkZWZpbmUgS19GMTY3IEsoS1RfRk4sMTc2KQorI2RlZmluZSBLX0YxNjggSyhLVF9GTiwxNzcpCisjZGVmaW5lIEtfRjE2OSBLKEtUX0ZOLDE3OCkKKyNkZWZpbmUgS19GMTcwIEsoS1RfRk4sMTc5KQorI2RlZmluZSBLX0YxNzEgSyhLVF9GTiwxODApCisjZGVmaW5lIEtfRjE3MiBLKEtUX0ZOLDE4MSkKKyNkZWZpbmUgS19GMTczIEsoS1RfRk4sMTgyKQorI2RlZmluZSBLX0YxNzQgSyhLVF9GTiwxODMpCisjZGVmaW5lIEtfRjE3NSBLKEtUX0ZOLDE4NCkKKyNkZWZpbmUgS19GMTc2IEsoS1RfRk4sMTg1KQorI2RlZmluZSBLX0YxNzcgSyhLVF9GTiwxODYpCisjZGVmaW5lIEtfRjE3OCBLKEtUX0ZOLDE4NykKKyNkZWZpbmUgS19GMTc5IEsoS1RfRk4sMTg4KQorI2RlZmluZSBLX0YxODAgSyhLVF9GTiwxODkpCisjZGVmaW5lIEtfRjE4MSBLKEtUX0ZOLDE5MCkKKyNkZWZpbmUgS19GMTgyIEsoS1RfRk4sMTkxKQorI2RlZmluZSBLX0YxODMgSyhLVF9GTiwxOTIpCisjZGVmaW5lIEtfRjE4NCBLKEtUX0ZOLDE5MykKKyNkZWZpbmUgS19GMTg1IEsoS1RfRk4sMTk0KQorI2RlZmluZSBLX0YxODYgSyhLVF9GTiwxOTUpCisjZGVmaW5lIEtfRjE4NyBLKEtUX0ZOLDE5NikKKyNkZWZpbmUgS19GMTg4IEsoS1RfRk4sMTk3KQorI2RlZmluZSBLX0YxODkgSyhLVF9GTiwxOTgpCisjZGVmaW5lIEtfRjE5MCBLKEtUX0ZOLDE5OSkKKyNkZWZpbmUgS19GMTkxIEsoS1RfRk4sMjAwKQorI2RlZmluZSBLX0YxOTIgSyhLVF9GTiwyMDEpCisjZGVmaW5lIEtfRjE5MyBLKEtUX0ZOLDIwMikKKyNkZWZpbmUgS19GMTk0IEsoS1RfRk4sMjAzKQorI2RlZmluZSBLX0YxOTUgSyhLVF9GTiwyMDQpCisjZGVmaW5lIEtfRjE5NiBLKEtUX0ZOLDIwNSkKKyNkZWZpbmUgS19GMTk3IEsoS1RfRk4sMjA2KQorI2RlZmluZSBLX0YxOTggSyhLVF9GTiwyMDcpCisjZGVmaW5lIEtfRjE5OSBLKEtUX0ZOLDIwOCkKKyNkZWZpbmUgS19GMjAwIEsoS1RfRk4sMjA5KQorI2RlZmluZSBLX0YyMDEgSyhLVF9GTiwyMTApCisjZGVmaW5lIEtfRjIwMiBLKEtUX0ZOLDIxMSkKKyNkZWZpbmUgS19GMjAzIEsoS1RfRk4sMjEyKQorI2RlZmluZSBLX0YyMDQgSyhLVF9GTiwyMTMpCisjZGVmaW5lIEtfRjIwNSBLKEtUX0ZOLDIxNCkKKyNkZWZpbmUgS19GMjA2IEsoS1RfRk4sMjE1KQorI2RlZmluZSBLX0YyMDcgSyhLVF9GTiwyMTYpCisjZGVmaW5lIEtfRjIwOCBLKEtUX0ZOLDIxNykKKyNkZWZpbmUgS19GMjA5IEsoS1RfRk4sMjE4KQorI2RlZmluZSBLX0YyMTAgSyhLVF9GTiwyMTkpCisjZGVmaW5lIEtfRjIxMSBLKEtUX0ZOLDIyMCkKKyNkZWZpbmUgS19GMjEyIEsoS1RfRk4sMjIxKQorI2RlZmluZSBLX0YyMTMgSyhLVF9GTiwyMjIpCisjZGVmaW5lIEtfRjIxNCBLKEtUX0ZOLDIyMykKKyNkZWZpbmUgS19GMjE1IEsoS1RfRk4sMjI0KQorI2RlZmluZSBLX0YyMTYgSyhLVF9GTiwyMjUpCisjZGVmaW5lIEtfRjIxNyBLKEtUX0ZOLDIyNikKKyNkZWZpbmUgS19GMjE4IEsoS1RfRk4sMjI3KQorI2RlZmluZSBLX0YyMTkgSyhLVF9GTiwyMjgpCisjZGVmaW5lIEtfRjIyMCBLKEtUX0ZOLDIyOSkKKyNkZWZpbmUgS19GMjIxIEsoS1RfRk4sMjMwKQorI2RlZmluZSBLX0YyMjIgSyhLVF9GTiwyMzEpCisjZGVmaW5lIEtfRjIyMyBLKEtUX0ZOLDIzMikKKyNkZWZpbmUgS19GMjI0IEsoS1RfRk4sMjMzKQorI2RlZmluZSBLX0YyMjUgSyhLVF9GTiwyMzQpCisjZGVmaW5lIEtfRjIyNiBLKEtUX0ZOLDIzNSkKKyNkZWZpbmUgS19GMjI3IEsoS1RfRk4sMjM2KQorI2RlZmluZSBLX0YyMjggSyhLVF9GTiwyMzcpCisjZGVmaW5lIEtfRjIyOSBLKEtUX0ZOLDIzOCkKKyNkZWZpbmUgS19GMjMwIEsoS1RfRk4sMjM5KQorI2RlZmluZSBLX0YyMzEgSyhLVF9GTiwyNDApCisjZGVmaW5lIEtfRjIzMiBLKEtUX0ZOLDI0MSkKKyNkZWZpbmUgS19GMjMzIEsoS1RfRk4sMjQyKQorI2RlZmluZSBLX0YyMzQgSyhLVF9GTiwyNDMpCisjZGVmaW5lIEtfRjIzNSBLKEtUX0ZOLDI0NCkKKyNkZWZpbmUgS19GMjM2IEsoS1RfRk4sMjQ1KQorI2RlZmluZSBLX0YyMzcgSyhLVF9GTiwyNDYpCisjZGVmaW5lIEtfRjIzOCBLKEtUX0ZOLDI0NykKKyNkZWZpbmUgS19GMjM5IEsoS1RfRk4sMjQ4KQorI2RlZmluZSBLX0YyNDAgSyhLVF9GTiwyNDkpCisjZGVmaW5lIEtfRjI0MSBLKEtUX0ZOLDI1MCkKKyNkZWZpbmUgS19GMjQyIEsoS1RfRk4sMjUxKQorI2RlZmluZSBLX0YyNDMgSyhLVF9GTiwyNTIpCisjZGVmaW5lIEtfRjI0NCBLKEtUX0ZOLDI1MykKKyNkZWZpbmUgS19GMjQ1IEsoS1RfRk4sMjU0KQorI2RlZmluZSBLX1VORE8gSyhLVF9GTiwyNTUpCisKKyNkZWZpbmUgS19IT0xFIEsoS1RfU1BFQywwKQorI2RlZmluZSBLX0VOVEVSIEsoS1RfU1BFQywxKQorI2RlZmluZSBLX1NIX1JFR1MgSyhLVF9TUEVDLDIpCisjZGVmaW5lIEtfU0hfTUVNIEsoS1RfU1BFQywzKQorI2RlZmluZSBLX1NIX1NUQVQgSyhLVF9TUEVDLDQpCisjZGVmaW5lIEtfQlJFQUsgSyhLVF9TUEVDLDUpCisjZGVmaW5lIEtfQ09OUyBLKEtUX1NQRUMsNikKKyNkZWZpbmUgS19DQVBTIEsoS1RfU1BFQyw3KQorI2RlZmluZSBLX05VTSBLKEtUX1NQRUMsOCkKKyNkZWZpbmUgS19IT0xEIEsoS1RfU1BFQyw5KQorI2RlZmluZSBLX1NDUk9MTEZPUlcgSyhLVF9TUEVDLDEwKQorI2RlZmluZSBLX1NDUk9MTEJBQ0sgSyhLVF9TUEVDLDExKQorI2RlZmluZSBLX0JPT1QgSyhLVF9TUEVDLDEyKQorI2RlZmluZSBLX0NBUFNPTiBLKEtUX1NQRUMsMTMpCisjZGVmaW5lIEtfQ09NUE9TRSBLKEtUX1NQRUMsMTQpCisjZGVmaW5lIEtfU0FLIEsoS1RfU1BFQywxNSkKKyNkZWZpbmUgS19ERUNSQ09OU09MRSBLKEtUX1NQRUMsMTYpCisjZGVmaW5lIEtfSU5DUkNPTlNPTEUgSyhLVF9TUEVDLDE3KQorI2RlZmluZSBLX1NQQVdOQ09OU09MRSBLKEtUX1NQRUMsMTgpCisjZGVmaW5lIEtfQkFSRU5VTUxPQ0sgSyhLVF9TUEVDLDE5KQorCisjZGVmaW5lIEtfQUxMT0NBVEVEIEsoS1RfU1BFQywxMjYpICAKKyNkZWZpbmUgS19OT1NVQ0hNQVAgSyhLVF9TUEVDLDEyNykgIAorCisjZGVmaW5lIEtfUDAgSyhLVF9QQUQsMCkKKyNkZWZpbmUgS19QMSBLKEtUX1BBRCwxKQorI2RlZmluZSBLX1AyIEsoS1RfUEFELDIpCisjZGVmaW5lIEtfUDMgSyhLVF9QQUQsMykKKyNkZWZpbmUgS19QNCBLKEtUX1BBRCw0KQorI2RlZmluZSBLX1A1IEsoS1RfUEFELDUpCisjZGVmaW5lIEtfUDYgSyhLVF9QQUQsNikKKyNkZWZpbmUgS19QNyBLKEtUX1BBRCw3KQorI2RlZmluZSBLX1A4IEsoS1RfUEFELDgpCisjZGVmaW5lIEtfUDkgSyhLVF9QQUQsOSkKKyNkZWZpbmUgS19QUExVUyBLKEtUX1BBRCwxMCkgIAorI2RlZmluZSBLX1BNSU5VUyBLKEtUX1BBRCwxMSkgIAorI2RlZmluZSBLX1BTVEFSIEsoS1RfUEFELDEyKSAgCisjZGVmaW5lIEtfUFNMQVNIIEsoS1RfUEFELDEzKSAgCisjZGVmaW5lIEtfUEVOVEVSIEsoS1RfUEFELDE0KSAgCisjZGVmaW5lIEtfUENPTU1BIEsoS1RfUEFELDE1KSAgCisjZGVmaW5lIEtfUERPVCBLKEtUX1BBRCwxNikgIAorI2RlZmluZSBLX1BQTFVTTUlOVVMgSyhLVF9QQUQsMTcpICAKKyNkZWZpbmUgS19QUEFSRU5MIEsoS1RfUEFELDE4KSAgCisjZGVmaW5lIEtfUFBBUkVOUiBLKEtUX1BBRCwxOSkgIAorCisjZGVmaW5lIE5SX1BBRCAyMAorCisjZGVmaW5lIEtfREdSQVZFIEsoS1RfREVBRCwwKQorI2RlZmluZSBLX0RBQ1VURSBLKEtUX0RFQUQsMSkKKyNkZWZpbmUgS19EQ0lSQ00gSyhLVF9ERUFELDIpCisjZGVmaW5lIEtfRFRJTERFIEsoS1RfREVBRCwzKQorI2RlZmluZSBLX0RESUVSRSBLKEtUX0RFQUQsNCkKKyNkZWZpbmUgS19EQ0VESUwgSyhLVF9ERUFELDUpCisKKyNkZWZpbmUgTlJfREVBRCA2CisKKyNkZWZpbmUgS19ET1dOIEsoS1RfQ1VSLDApCisjZGVmaW5lIEtfTEVGVCBLKEtUX0NVUiwxKQorI2RlZmluZSBLX1JJR0hUIEsoS1RfQ1VSLDIpCisjZGVmaW5lIEtfVVAgSyhLVF9DVVIsMykKKworI2RlZmluZSBLX1NISUZUIEsoS1RfU0hJRlQsS0dfU0hJRlQpCisjZGVmaW5lIEtfQ1RSTCBLKEtUX1NISUZULEtHX0NUUkwpCisjZGVmaW5lIEtfQUxUIEsoS1RfU0hJRlQsS0dfQUxUKQorI2RlZmluZSBLX0FMVEdSIEsoS1RfU0hJRlQsS0dfQUxUR1IpCisjZGVmaW5lIEtfU0hJRlRMIEsoS1RfU0hJRlQsS0dfU0hJRlRMKQorI2RlZmluZSBLX1NISUZUUiBLKEtUX1NISUZULEtHX1NISUZUUikKKyNkZWZpbmUgS19DVFJMTCBLKEtUX1NISUZULEtHX0NUUkxMKQorI2RlZmluZSBLX0NUUkxSIEsoS1RfU0hJRlQsS0dfQ1RSTFIpCisjZGVmaW5lIEtfQ0FQU1NISUZUIEsoS1RfU0hJRlQsS0dfQ0FQU1NISUZUKQorCisjZGVmaW5lIEtfQVNDMCBLKEtUX0FTQ0lJLDApCisjZGVmaW5lIEtfQVNDMSBLKEtUX0FTQ0lJLDEpCisjZGVmaW5lIEtfQVNDMiBLKEtUX0FTQ0lJLDIpCisjZGVmaW5lIEtfQVNDMyBLKEtUX0FTQ0lJLDMpCisjZGVmaW5lIEtfQVNDNCBLKEtUX0FTQ0lJLDQpCisjZGVmaW5lIEtfQVNDNSBLKEtUX0FTQ0lJLDUpCisjZGVmaW5lIEtfQVNDNiBLKEtUX0FTQ0lJLDYpCisjZGVmaW5lIEtfQVNDNyBLKEtUX0FTQ0lJLDcpCisjZGVmaW5lIEtfQVNDOCBLKEtUX0FTQ0lJLDgpCisjZGVmaW5lIEtfQVNDOSBLKEtUX0FTQ0lJLDkpCisjZGVmaW5lIEtfSEVYMCBLKEtUX0FTQ0lJLDEwKQorI2RlZmluZSBLX0hFWDEgSyhLVF9BU0NJSSwxMSkKKyNkZWZpbmUgS19IRVgyIEsoS1RfQVNDSUksMTIpCisjZGVmaW5lIEtfSEVYMyBLKEtUX0FTQ0lJLDEzKQorI2RlZmluZSBLX0hFWDQgSyhLVF9BU0NJSSwxNCkKKyNkZWZpbmUgS19IRVg1IEsoS1RfQVNDSUksMTUpCisjZGVmaW5lIEtfSEVYNiBLKEtUX0FTQ0lJLDE2KQorI2RlZmluZSBLX0hFWDcgSyhLVF9BU0NJSSwxNykKKyNkZWZpbmUgS19IRVg4IEsoS1RfQVNDSUksMTgpCisjZGVmaW5lIEtfSEVYOSBLKEtUX0FTQ0lJLDE5KQorI2RlZmluZSBLX0hFWGEgSyhLVF9BU0NJSSwyMCkKKyNkZWZpbmUgS19IRVhiIEsoS1RfQVNDSUksMjEpCisjZGVmaW5lIEtfSEVYYyBLKEtUX0FTQ0lJLDIyKQorI2RlZmluZSBLX0hFWGQgSyhLVF9BU0NJSSwyMykKKyNkZWZpbmUgS19IRVhlIEsoS1RfQVNDSUksMjQpCisjZGVmaW5lIEtfSEVYZiBLKEtUX0FTQ0lJLDI1KQorCisjZGVmaW5lIE5SX0FTQ0lJIDI2CisKKyNkZWZpbmUgS19TSElGVExPQ0sgSyhLVF9MT0NLLEtHX1NISUZUKQorI2RlZmluZSBLX0NUUkxMT0NLIEsoS1RfTE9DSyxLR19DVFJMKQorI2RlZmluZSBLX0FMVExPQ0sgSyhLVF9MT0NLLEtHX0FMVCkKKyNkZWZpbmUgS19BTFRHUkxPQ0sgSyhLVF9MT0NLLEtHX0FMVEdSKQorI2RlZmluZSBLX1NISUZUTExPQ0sgSyhLVF9MT0NLLEtHX1NISUZUTCkKKyNkZWZpbmUgS19TSElGVFJMT0NLIEsoS1RfTE9DSyxLR19TSElGVFIpCisjZGVmaW5lIEtfQ1RSTExMT0NLIEsoS1RfTE9DSyxLR19DVFJMTCkKKyNkZWZpbmUgS19DVFJMUkxPQ0sgSyhLVF9MT0NLLEtHX0NUUkxSKQorCisjZGVmaW5lIEtfU0hJRlRfU0xPQ0sgSyhLVF9TTE9DSyxLR19TSElGVCkKKyNkZWZpbmUgS19DVFJMX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQ1RSTCkKKyNkZWZpbmUgS19BTFRfU0xPQ0sgSyhLVF9TTE9DSyxLR19BTFQpCisjZGVmaW5lIEtfQUxUR1JfU0xPQ0sgSyhLVF9TTE9DSyxLR19BTFRHUikKKyNkZWZpbmUgS19TSElGVExfU0xPQ0sgSyhLVF9TTE9DSyxLR19TSElGVEwpCisjZGVmaW5lIEtfU0hJRlRSX1NMT0NLIEsoS1RfU0xPQ0ssS0dfU0hJRlRSKQorI2RlZmluZSBLX0NUUkxMX1NMT0NLIEsoS1RfU0xPQ0ssS0dfQ1RSTEwpCisjZGVmaW5lIEtfQ1RSTFJfU0xPQ0sgSyhLVF9TTE9DSyxLR19DVFJMUikKKworI2RlZmluZSBOUl9MT0NLIDgKKworI2RlZmluZSBLX0JSTF9CTEFOSyBLKEtUX0JSTCwgMCkKKyNkZWZpbmUgS19CUkxfRE9UMSBLKEtUX0JSTCwgMSkKKyNkZWZpbmUgS19CUkxfRE9UMiBLKEtUX0JSTCwgMikKKyNkZWZpbmUgS19CUkxfRE9UMyBLKEtUX0JSTCwgMykKKyNkZWZpbmUgS19CUkxfRE9UNCBLKEtUX0JSTCwgNCkKKyNkZWZpbmUgS19CUkxfRE9UNSBLKEtUX0JSTCwgNSkKKyNkZWZpbmUgS19CUkxfRE9UNiBLKEtUX0JSTCwgNikKKyNkZWZpbmUgS19CUkxfRE9UNyBLKEtUX0JSTCwgNykKKyNkZWZpbmUgS19CUkxfRE9UOCBLKEtUX0JSTCwgOCkKKworI2RlZmluZSBOUl9CUkwgOQorCisjZGVmaW5lIE1BWF9ESUFDUiAyNTYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tsaXN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva2xpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGYwMTRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tsaXN0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfS0xJU1RfSAorI2RlZmluZSBfTElOVVhfS0xJU1RfSAorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CisjaW5jbHVkZSA8bGludXgva3JlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKworc3RydWN0IGtsaXN0X25vZGU7CitzdHJ1Y3Qga2xpc3QgeworIHNwaW5sb2NrX3Qga19sb2NrOworIHN0cnVjdCBsaXN0X2hlYWQga19saXN0OworIHZvaWQgKCpnZXQpKHN0cnVjdCBrbGlzdF9ub2RlICopOworIHZvaWQgKCpwdXQpKHN0cnVjdCBrbGlzdF9ub2RlICopOworfTsKKworc3RydWN0IGtsaXN0X25vZGUgeworIHN0cnVjdCBrbGlzdCAqIG5fa2xpc3Q7Cisgc3RydWN0IGxpc3RfaGVhZCBuX25vZGU7Cisgc3RydWN0IGtyZWYgbl9yZWY7Cisgc3RydWN0IGNvbXBsZXRpb24gbl9yZW1vdmVkOworfTsKKworc3RydWN0IGtsaXN0X2l0ZXIgeworIHN0cnVjdCBrbGlzdCAqIGlfa2xpc3Q7Cisgc3RydWN0IGxpc3RfaGVhZCAqIGlfaGVhZDsKKyBzdHJ1Y3Qga2xpc3Rfbm9kZSAqIGlfY3VyOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva21vZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ttb2QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjQ0NTZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2ttb2QuaApAQCAtMCwwICsxLDIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfS01PRF9IX18KKyNkZWZpbmUgX19MSU5VWF9LTU9EX0hfXworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjZGVmaW5lIEtNT0RfUEFUSF9MRU4gMjU2CisKKyNkZWZpbmUgdHJ5X3RoZW5fcmVxdWVzdF9tb2R1bGUoeCwgbW9kLi4uKSAoKHgpID86IChyZXF1ZXN0X21vZHVsZShtb2QpLCAoeCkpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9rb2JqZWN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva29iamVjdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2MWE5NTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva29iamVjdC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0tPQkpFQ1RfSF8KKyNkZWZpbmUgX0tPQkpFQ1RfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3JlZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tyZWYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZTAyYjdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2tyZWYuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9LUkVGX0hfCisjZGVmaW5lIF9LUkVGX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2t0aW1lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgva3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNGY4ZjBmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2t0aW1lLmgKQEAgLTAsMCArMSw1MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfS1RJTUVfSAorI2RlZmluZSBfTElOVVhfS1RJTUVfSAorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KKwordHlwZWRlZiB1bmlvbiB7CisgczY0IHR2NjQ7CisjaWYgQklUU19QRVJfTE9ORyAhPSAoNjQgJiYgIWRlZmluZWQoQ09ORklHX0tUSU1FX1NDQUxBUikpCisgc3RydWN0IHsKKyNpZmRlZiBfX0JJR19FTkRJQU4KKyBzMzIgc2VjLCBuc2VjOworI2Vsc2UKKyBzMzIgbnNlYywgc2VjOworI2VuZGlmCisgfSB0djsKKyNlbmRpZgorfSBrdGltZV90OworCisjZGVmaW5lIEtUSU1FX01BWCAoKHM2NCl+KCh1NjQpMSA8PCA2MykpCisjZGVmaW5lIEtUSU1FX1NFQ19NQVggKEtUSU1FX01BWCAvIE5TRUNfUEVSX1NFQykKKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKworI2lmIEJJVFNfUEVSX0xPTkcgPT0gNjQKKyNlbmRpZgorI2RlZmluZSBrdGltZV9zdWIobGhzLCByaHMpICAgKHsgKGt0aW1lX3QpeyAudHY2NCA9IChsaHMpLnR2NjQgLSAocmhzKS50djY0IH07IH0pCisjZGVmaW5lIGt0aW1lX2FkZChsaHMsIHJocykgICAoeyAoa3RpbWVfdCl7IC50djY0ID0gKGxocykudHY2NCArIChyaHMpLnR2NjQgfTsgfSkKKyNkZWZpbmUga3RpbWVfYWRkX25zKGt0LCBuc3ZhbCkgICAoeyAoa3RpbWVfdCl7IC50djY0ID0gKGt0KS50djY0ICsgKG5zdmFsKSB9OyB9KQorI2RlZmluZSBrdGltZV90b190aW1lc3BlYyhrdCkgbnNfdG9fdGltZXNwZWMoKGt0KS50djY0KQorI2RlZmluZSBrdGltZV90b190aW1ldmFsKGt0KSBuc190b190aW1ldmFsKChrdCkudHY2NCkKKyNkZWZpbmUga3RpbWVfdG9fbnMoa3QpICgoa3QpLnR2NjQpCisjZWxzZQorCisjZW5kaWYKKyNkZWZpbmUgS1RJTUVfUkVBTFRJTUVfUkVTIChrdGltZV90KXsgLnR2NjQgPSBUSUNLX05TRUMgfQorI2RlZmluZSBLVElNRV9NT05PVE9OSUNfUkVTIChrdGltZV90KXsgLnR2NjQgPSBUSUNLX05TRUMgfQorCisjZGVmaW5lIGt0aW1lX2dldF9yZWFsX3RzKHRzKSBnZXRuc3RpbWVvZmRheSh0cykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGltaXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGltaXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU2NWUzMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saW1pdHMuaApAQCAtMCwwICsxLDMzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9MSU1JVFNfSAorI2RlZmluZSBfTElOVVhfTElNSVRTX0gKKworI2RlZmluZSBOUl9PUEVOIDEwMjQKKworI2RlZmluZSBOR1JPVVBTX01BWCA2NTUzNiAgCisjZGVmaW5lIEFSR19NQVggMTMxMDcyICAKKyNkZWZpbmUgQ0hJTERfTUFYIDk5OSAgCisjZGVmaW5lIE9QRU5fTUFYIDI1NiAgCisjZGVmaW5lIExJTktfTUFYIDEyNyAgCisjZGVmaW5lIE1BWF9DQU5PTiAyNTUgIAorI2RlZmluZSBNQVhfSU5QVVQgMjU1ICAKKyNkZWZpbmUgTkFNRV9NQVggMjU1ICAKKyNkZWZpbmUgUEFUSF9NQVggNDA5NiAgCisjZGVmaW5lIFBJUEVfQlVGIDQwOTYgIAorI2RlZmluZSBYQVRUUl9OQU1FX01BWCAyNTUgIAorI2RlZmluZSBYQVRUUl9TSVpFX01BWCA2NTUzNiAgCisjZGVmaW5lIFhBVFRSX0xJU1RfTUFYIDY1NTM2ICAKKworI2RlZmluZSBSVFNJR19NQVggMzIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlua2FnZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbmthZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDE5NGJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xpbmthZ2UuaApAQCAtMCwwICsxLDY2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9MSU5LQUdFX0gKKyNkZWZpbmUgX0xJTlVYX0xJTktBR0VfSAorCisjaW5jbHVkZSA8YXNtL2xpbmthZ2UuaD4KKworI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIENQUF9BU01MSU5LQUdFIGV4dGVybiAiQyIKKyNlbHNlCisjZGVmaW5lIENQUF9BU01MSU5LQUdFCisjZW5kaWYKKworI2lmbmRlZiBhc21saW5rYWdlCisjZGVmaW5lIGFzbWxpbmthZ2UgQ1BQX0FTTUxJTktBR0UKKyNlbmRpZgorCisjaWZuZGVmIHByZXZlbnRfdGFpbF9jYWxsCisjZGVmaW5lIHByZXZlbnRfdGFpbF9jYWxsKHJldCkgZG8geyB9IHdoaWxlICgwKQorI2VuZGlmCisKKyNpZm5kZWYgX19BTElHTgorI2RlZmluZSBfX0FMSUdOIC5hbGlnbiA0LDB4OTAKKyNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiA0LDB4OTAiCisjZW5kaWYKKworI2lmZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIEFMSUdOIF9fQUxJR04KKyNkZWZpbmUgQUxJR05fU1RSIF9fQUxJR05fU1RSCisKKyNpZm5kZWYgRU5UUlkKKyNkZWZpbmUgRU5UUlkobmFtZSkgICAuZ2xvYmwgbmFtZTsgICBBTElHTjsgICBuYW1lOgorI2VuZGlmCisKKyNkZWZpbmUgS1BST0JFX0VOVFJZKG5hbWUpICAgLnNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IjsgICBFTlRSWShuYW1lKQorCisjaWZuZGVmIEVORAorI2RlZmluZSBFTkQobmFtZSkgICAuc2l6ZSBuYW1lLCAuLW5hbWUKKyNlbmRpZgorCisjaWZuZGVmIEVORFBST0MKKyNkZWZpbmUgRU5EUFJPQyhuYW1lKSAgIC50eXBlIG5hbWUsIEBmdW5jdGlvbjsgICBFTkQobmFtZSkKKyNlbmRpZgorCisjZW5kaWYKKworI2RlZmluZSBOT1JFVF9UWVBFICAKKyNkZWZpbmUgQVRUUklCX05PUkVUIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNkZWZpbmUgTk9SRVRfQU5EIG5vcmV0dXJuLAorCisjaWZuZGVmIEZBU1RDQUxMCisjZGVmaW5lIEZBU1RDQUxMKHgpIHgKKyNkZWZpbmUgZmFzdGNhbGwKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9saXN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQxNzg3MWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbGlzdC5oCkBAIC0wLDAgKzEsMTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX0xJU1RfSAorI2RlZmluZSBfTElOVVhfTElTVF9ICisKKyN3YXJuaW5nICJkb24ndCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGluIHVzZXJzcGFjZSIKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL25sbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL25sbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZDQ0ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QvbmxtLmgKQEAgLTAsMCArMSw1MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9MT0NLRF9OTE1fSAorI2RlZmluZSBMSU5VWF9MT0NLRF9OTE1fSAorCisjZGVmaW5lIE5MTV9PRkZTRVRfTUFYICgoczMyKSAweDdmZmZmZmZmKQorI2RlZmluZSBOTE00X09GRlNFVF9NQVggKChzNjQpICgofih1NjQpMCkgPj4gMSkpCisKK2VudW0geworIE5MTV9MQ0tfR1JBTlRFRCA9IDAsCisgTkxNX0xDS19ERU5JRUQgPSAxLAorIE5MTV9MQ0tfREVOSUVEX05PTE9DS1MgPSAyLAorIE5MTV9MQ0tfQkxPQ0tFRCA9IDMsCisgTkxNX0xDS19ERU5JRURfR1JBQ0VfUEVSSU9EID0gNCwKK307CisKKyNkZWZpbmUgTkxNX1BST0dSQU0gMTAwMDIxCisKKyNkZWZpbmUgTkxNUFJPQ19OVUxMIDAKKyNkZWZpbmUgTkxNUFJPQ19URVNUIDEKKyNkZWZpbmUgTkxNUFJPQ19MT0NLIDIKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUwgMworI2RlZmluZSBOTE1QUk9DX1VOTE9DSyA0CisjZGVmaW5lIE5MTVBST0NfR1JBTlRFRCA1CisjZGVmaW5lIE5MTVBST0NfVEVTVF9NU0cgNgorI2RlZmluZSBOTE1QUk9DX0xPQ0tfTVNHIDcKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUxfTVNHIDgKKyNkZWZpbmUgTkxNUFJPQ19VTkxPQ0tfTVNHIDkKKyNkZWZpbmUgTkxNUFJPQ19HUkFOVEVEX01TRyAxMAorI2RlZmluZSBOTE1QUk9DX1RFU1RfUkVTIDExCisjZGVmaW5lIE5MTVBST0NfTE9DS19SRVMgMTIKKyNkZWZpbmUgTkxNUFJPQ19DQU5DRUxfUkVTIDEzCisjZGVmaW5lIE5MTVBST0NfVU5MT0NLX1JFUyAxNAorI2RlZmluZSBOTE1QUk9DX0dSQU5URURfUkVTIDE1CisjZGVmaW5lIE5MTVBST0NfTlNNX05PVElGWSAxNiAgCisjZGVmaW5lIE5MTVBST0NfU0hBUkUgMjAKKyNkZWZpbmUgTkxNUFJPQ19VTlNIQVJFIDIxCisjZGVmaW5lIE5MTVBST0NfTk1fTE9DSyAyMgorI2RlZmluZSBOTE1QUk9DX0ZSRUVfQUxMIDIzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL3hkci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvY2tkL3hkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc1ZDAzMDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2QveGRyLmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMT0NLRF9YRFJfSAorI2RlZmluZSBMT0NLRF9YRFJfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveGRyLmg+CisKKyNkZWZpbmUgTkxNX01BWENPT0tJRUxFTiAzMgorI2RlZmluZSBOTE1fTUFYU1RSTEVOIDEwMjQKKworI2RlZmluZSBubG1fZ3JhbnRlZCBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfR1JBTlRFRCkKKyNkZWZpbmUgbmxtX2xja19kZW5pZWQgX19jb25zdGFudF9odG9ubChOTE1fTENLX0RFTklFRCkKKyNkZWZpbmUgbmxtX2xja19kZW5pZWRfbm9sb2NrcyBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfREVOSUVEX05PTE9DS1MpCisjZGVmaW5lIG5sbV9sY2tfYmxvY2tlZCBfX2NvbnN0YW50X2h0b25sKE5MTV9MQ0tfQkxPQ0tFRCkKKyNkZWZpbmUgbmxtX2xja19kZW5pZWRfZ3JhY2VfcGVyaW9kIF9fY29uc3RhbnRfaHRvbmwoTkxNX0xDS19ERU5JRURfR1JBQ0VfUEVSSU9EKQorCitzdHJ1Y3QgbmxtX2xvY2sgeworIGNoYXIgKiBjYWxsZXI7CisgaW50IGxlbjsKKyBzdHJ1Y3QgbmZzX2ZoIGZoOworIHN0cnVjdCB4ZHJfbmV0b2JqIG9oOworIHUzMiBzdmlkOworIHN0cnVjdCBmaWxlX2xvY2sgZmw7Cit9OworCitzdHJ1Y3QgbmxtX2Nvb2tpZQoreworIHVuc2lnbmVkIGNoYXIgZGF0YVtOTE1fTUFYQ09PS0lFTEVOXTsKKyB1bnNpZ25lZCBpbnQgbGVuOworfTsKKworc3RydWN0IG5sbV9hcmdzIHsKKyBzdHJ1Y3QgbmxtX2Nvb2tpZSBjb29raWU7Cisgc3RydWN0IG5sbV9sb2NrIGxvY2s7CisgdTMyIGJsb2NrOworIHUzMiByZWNsYWltOworIHUzMiBzdGF0ZTsKKyB1MzIgbW9uaXRvcjsKKyB1MzIgZnNtX2FjY2VzczsKKyB1MzIgZnNtX21vZGU7Cit9OworCit0eXBlZGVmIHN0cnVjdCBubG1fYXJncyBubG1fYXJnczsKKworc3RydWN0IG5sbV9yZXMgeworIHN0cnVjdCBubG1fY29va2llIGNvb2tpZTsKKyB1MzIgc3RhdHVzOworIHN0cnVjdCBubG1fbG9jayBsb2NrOworfTsKKworc3RydWN0IG5sbV9yZWJvb3QgeworIGNoYXIgKiBtb247CisgaW50IGxlbjsKKyB1MzIgc3RhdGU7CisgdTMyIGFkZHI7CisgdTMyIHZlcnM7CisgdTMyIHByb3RvOworfTsKKworI2RlZmluZSBOTE1TVkNfWERSU0laRSBzaXplb2Yoc3RydWN0IG5sbV9hcmdzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb2NrZGVwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2RlcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZTg2MzQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbG9ja2RlcC5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9MT0NLREVQX0gKKyNkZWZpbmUgX19MSU5VWF9MT0NLREVQX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdfbG9ja3MuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGFja3RyYWNlLmg+CisKKyNkZWZpbmUgbG9ja19hY3F1aXJlKGwsIHMsIHQsIHIsIGMsIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja19yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgbG9ja2RlcF9pbml0KCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrZGVwX2luZm8oKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tkZXBfaW5pdF9tYXAobG9jaywgbmFtZSwga2V5KSBkbyB7ICh2b2lkKShrZXkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrZGVwX3NldF9jbGFzcyhsb2NrLCBrZXkpIGRvIHsgKHZvaWQpKGtleSk7IH0gd2hpbGUgKDApCisjZGVmaW5lIGxvY2tkZXBfc2V0X2NsYXNzX2FuZF9uYW1lKGxvY2ssIGtleSwgbmFtZSkgICBkbyB7ICh2b2lkKShrZXkpOyB9IHdoaWxlICgwKQorI2RlZmluZSBJTklUX0xPQ0tERVAKKyNkZWZpbmUgbG9ja2RlcF9yZXNldCgpIGRvIHsgZGVidWdfbG9ja3MgPSAxOyB9IHdoaWxlICgwKQorI2RlZmluZSBsb2NrZGVwX2ZyZWVfa2V5X3JhbmdlKHN0YXJ0LCBzaXplKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZWFybHlfaW5pdF9pcnFfbG9ja19jbGFzcygpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBlYXJseV9ib290X2lycXNfb2ZmKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBlYXJseV9ib290X2lycXNfb24oKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0lOR0xFX0RFUFRIX05FU1RJTkcgMQorCisjZGVmaW5lIHNwaW5fYWNxdWlyZShsLCBzLCB0LCBpKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHNwaW5fcmVsZWFzZShsLCBuLCBpKSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgcndsb2NrX2FjcXVpcmUobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSByd2xvY2tfYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcndsb2NrX3JlbGVhc2UobCwgbiwgaSkgZG8geyB9IHdoaWxlICgwKQorCisjZGVmaW5lIG11dGV4X2FjcXVpcmUobCwgcywgdCwgaSkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBtdXRleF9yZWxlYXNlKGwsIG4sIGkpIGRvIHsgfSB3aGlsZSAoMCkKKworI2RlZmluZSByd3NlbV9hY3F1aXJlKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcndzZW1fYWNxdWlyZV9yZWFkKGwsIHMsIHQsIGkpIGRvIHsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgcndzZW1fcmVsZWFzZShsLCBuLCBpKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L2xvb3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb29wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWNkZmQzOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9sb29wLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTE9PUF9ICisjZGVmaW5lIF9MSU5VWF9MT09QX0gKKworI2RlZmluZSBMT19OQU1FX1NJWkUgNjQKKyNkZWZpbmUgTE9fS0VZX1NJWkUgMzIKKworZW51bSB7CisgTE9fRkxBR1NfUkVBRF9PTkxZID0gMSwKKyBMT19GTEFHU19VU0VfQU9QUyA9IDIsCit9OworCisjaW5jbHVkZSA8YXNtL3Bvc2l4X3R5cGVzLmg+ICAKKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4gIAorCitzdHJ1Y3QgbG9vcF9pbmZvIHsKKyBpbnQgbG9fbnVtYmVyOworIF9fa2VybmVsX29sZF9kZXZfdCBsb19kZXZpY2U7CisgdW5zaWduZWQgbG9uZyBsb19pbm9kZTsKKyBfX2tlcm5lbF9vbGRfZGV2X3QgbG9fcmRldmljZTsKKyBpbnQgbG9fb2Zmc2V0OworIGludCBsb19lbmNyeXB0X3R5cGU7CisgaW50IGxvX2VuY3J5cHRfa2V5X3NpemU7CisgaW50IGxvX2ZsYWdzOworIGNoYXIgbG9fbmFtZVtMT19OQU1FX1NJWkVdOworIHVuc2lnbmVkIGNoYXIgbG9fZW5jcnlwdF9rZXlbTE9fS0VZX1NJWkVdOworIHVuc2lnbmVkIGxvbmcgbG9faW5pdFsyXTsKKyBjaGFyIHJlc2VydmVkWzRdOworfTsKKworc3RydWN0IGxvb3BfaW5mbzY0IHsKKyBfX3U2NCBsb19kZXZpY2U7CisgX191NjQgbG9faW5vZGU7CisgX191NjQgbG9fcmRldmljZTsKKyBfX3U2NCBsb19vZmZzZXQ7CisgX191NjQgbG9fc2l6ZWxpbWl0OworIF9fdTMyIGxvX251bWJlcjsKKyBfX3UzMiBsb19lbmNyeXB0X3R5cGU7CisgX191MzIgbG9fZW5jcnlwdF9rZXlfc2l6ZTsKKyBfX3UzMiBsb19mbGFnczsKKyBfX3U4IGxvX2ZpbGVfbmFtZVtMT19OQU1FX1NJWkVdOworIF9fdTggbG9fY3J5cHRfbmFtZVtMT19OQU1FX1NJWkVdOworIF9fdTggbG9fZW5jcnlwdF9rZXlbTE9fS0VZX1NJWkVdOworIF9fdTY0IGxvX2luaXRbMl07Cit9OworCisjZGVmaW5lIExPX0NSWVBUX05PTkUgMAorI2RlZmluZSBMT19DUllQVF9YT1IgMQorI2RlZmluZSBMT19DUllQVF9ERVMgMgorI2RlZmluZSBMT19DUllQVF9GSVNIMiAzICAKKyNkZWZpbmUgTE9fQ1JZUFRfQkxPVyA0CisjZGVmaW5lIExPX0NSWVBUX0NBU1QxMjggNQorI2RlZmluZSBMT19DUllQVF9JREVBIDYKKyNkZWZpbmUgTE9fQ1JZUFRfRFVNTVkgOQorI2RlZmluZSBMT19DUllQVF9TS0lQSkFDSyAxMAorI2RlZmluZSBMT19DUllQVF9DUllQVE9BUEkgMTgKKyNkZWZpbmUgTUFYX0xPX0NSWVBUIDIwCisKKyNkZWZpbmUgTE9PUF9TRVRfRkQgMHg0QzAwCisjZGVmaW5lIExPT1BfQ0xSX0ZEIDB4NEMwMQorI2RlZmluZSBMT09QX1NFVF9TVEFUVVMgMHg0QzAyCisjZGVmaW5lIExPT1BfR0VUX1NUQVRVUyAweDRDMDMKKyNkZWZpbmUgTE9PUF9TRVRfU1RBVFVTNjQgMHg0QzA0CisjZGVmaW5lIExPT1BfR0VUX1NUQVRVUzY0IDB4NEMwNQorI2RlZmluZSBMT09QX0NIQU5HRV9GRCAweDRDMDYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFnaWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWdpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5NGY5Y2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWFnaWMuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTUFHSUNfSF9fCisjZGVmaW5lIF9fTElOVVhfTUFHSUNfSF9fCisKKyNkZWZpbmUgQURGU19TVVBFUl9NQUdJQyAweGFkZjUKKyNkZWZpbmUgQUZGU19TVVBFUl9NQUdJQyAweGFkZmYKKyNkZWZpbmUgQUZTX1NVUEVSX01BR0lDIDB4NTM0NjQxNEYKKyNkZWZpbmUgQVVUT0ZTX1NVUEVSX01BR0lDIDB4MDE4NworI2RlZmluZSBDT0RBX1NVUEVSX01BR0lDIDB4NzM3NTcyNDUKKyNkZWZpbmUgRUZTX1NVUEVSX01BR0lDIDB4NDE0QTUzCisjZGVmaW5lIEVYVDJfU1VQRVJfTUFHSUMgMHhFRjUzCisjZGVmaW5lIEVYVDNfU1VQRVJfTUFHSUMgMHhFRjUzCisjZGVmaW5lIEVYVDRfU1VQRVJfTUFHSUMgMHhFRjUzCisjZGVmaW5lIEhQRlNfU1VQRVJfTUFHSUMgMHhmOTk1ZTg0OQorI2RlZmluZSBJU09GU19TVVBFUl9NQUdJQyAweDk2NjAKKyNkZWZpbmUgSkZGUzJfU1VQRVJfTUFHSUMgMHg3MmI2CisjZGVmaW5lIEFOT05fSU5PREVfRlNfTUFHSUMgMHgwOTA0MTkzNAorCisjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDIDB4MTM3RiAgCisjZGVmaW5lIE1JTklYX1NVUEVSX01BR0lDMiAweDEzOEYgIAorI2RlZmluZSBNSU5JWDJfU1VQRVJfTUFHSUMgMHgyNDY4ICAKKyNkZWZpbmUgTUlOSVgyX1NVUEVSX01BR0lDMiAweDI0NzggIAorI2RlZmluZSBNSU5JWDNfU1VQRVJfTUFHSUMgMHg0ZDVhICAKKworI2RlZmluZSBNU0RPU19TVVBFUl9NQUdJQyAweDRkNDQgIAorI2RlZmluZSBOQ1BfU1VQRVJfTUFHSUMgMHg1NjRjICAKKyNkZWZpbmUgTkZTX1NVUEVSX01BR0lDIDB4Njk2OQorI2RlZmluZSBPUEVOUFJPTV9TVVBFUl9NQUdJQyAweDlmYTEKKyNkZWZpbmUgUFJPQ19TVVBFUl9NQUdJQyAweDlmYTAKKyNkZWZpbmUgUU5YNF9TVVBFUl9NQUdJQyAweDAwMmYgIAorCisjZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDIDB4NTI2NTQ5NzMgIAorCisjZGVmaW5lIFJFSVNFUkZTX1NVUEVSX01BR0lDX1NUUklORyAiUmVJc0VyRnMiCisjZGVmaW5lIFJFSVNFUjJGU19TVVBFUl9NQUdJQ19TVFJJTkcgIlJlSXNFcjJGcyIKKyNkZWZpbmUgUkVJU0VSMkZTX0pSX1NVUEVSX01BR0lDX1NUUklORyAiUmVJc0VyM0ZzIgorCisjZGVmaW5lIFNNQl9TVVBFUl9NQUdJQyAweDUxN0IKKyNkZWZpbmUgVVNCREVWSUNFX1NVUEVSX01BR0lDIDB4OWZhMgorI2RlZmluZSBDR1JPVVBfU1VQRVJfTUFHSUMgMHgyN2UwZWIKKworI2RlZmluZSBGVVRFWEZTX1NVUEVSX01BR0lDIDB4QkFEMURFQQorI2RlZmluZSBJTk9USUZZRlNfU1VQRVJfTUFHSUMgMHgyQkFEMURFQQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWpvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21ham9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyZDY5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tYWpvci5oCkBAIC0wLDAgKzEsMTc1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NQUpPUl9ICisjZGVmaW5lIF9MSU5VWF9NQUpPUl9ICisKKyNkZWZpbmUgVU5OQU1FRF9NQUpPUiAwCisjZGVmaW5lIE1FTV9NQUpPUiAxCisjZGVmaW5lIFJBTURJU0tfTUFKT1IgMQorI2RlZmluZSBGTE9QUFlfTUFKT1IgMgorI2RlZmluZSBQVFlfTUFTVEVSX01BSk9SIDIKKyNkZWZpbmUgSURFMF9NQUpPUiAzCisjZGVmaW5lIEhEX01BSk9SIElERTBfTUFKT1IKKyNkZWZpbmUgUFRZX1NMQVZFX01BSk9SIDMKKyNkZWZpbmUgVFRZX01BSk9SIDQKKyNkZWZpbmUgVFRZQVVYX01BSk9SIDUKKyNkZWZpbmUgTFBfTUFKT1IgNgorI2RlZmluZSBWQ1NfTUFKT1IgNworI2RlZmluZSBMT09QX01BSk9SIDcKKyNkZWZpbmUgU0NTSV9ESVNLMF9NQUpPUiA4CisjZGVmaW5lIFNDU0lfVEFQRV9NQUpPUiA5CisjZGVmaW5lIE1EX01BSk9SIDkKKyNkZWZpbmUgTUlTQ19NQUpPUiAxMAorI2RlZmluZSBTQ1NJX0NEUk9NX01BSk9SIDExCisjZGVmaW5lIE1VWF9NQUpPUiAxMSAgCisjZGVmaW5lIFhUX0RJU0tfTUFKT1IgMTMKKyNkZWZpbmUgSU5QVVRfTUFKT1IgMTMKKyNkZWZpbmUgU09VTkRfTUFKT1IgMTQKKyNkZWZpbmUgQ0RVMzFBX0NEUk9NX01BSk9SIDE1CisjZGVmaW5lIEpPWVNUSUNLX01BSk9SIDE1CisjZGVmaW5lIEdPTERTVEFSX0NEUk9NX01BSk9SIDE2CisjZGVmaW5lIE9QVElDU19DRFJPTV9NQUpPUiAxNworI2RlZmluZSBTQU5ZT19DRFJPTV9NQUpPUiAxOAorI2RlZmluZSBDWUNMQURFU19NQUpPUiAxOQorI2RlZmluZSBDWUNMQURFU0FVWF9NQUpPUiAyMAorI2RlZmluZSBNSVRTVU1JX1hfQ0RST01fTUFKT1IgMjAKKyNkZWZpbmUgTUZNX0FDT1JOX01BSk9SIDIxICAKKyNkZWZpbmUgU0NTSV9HRU5FUklDX01BSk9SIDIxCisjZGVmaW5lIElERTFfTUFKT1IgMjIKKyNkZWZpbmUgRElHSUNVX01BSk9SIDIyCisjZGVmaW5lIERJR0lfTUFKT1IgMjMKKyNkZWZpbmUgTUlUU1VNSV9DRFJPTV9NQUpPUiAyMworI2RlZmluZSBDRFU1MzVfQ0RST01fTUFKT1IgMjQKKyNkZWZpbmUgU1RMX1NFUklBTE1BSk9SIDI0CisjZGVmaW5lIE1BVFNVU0hJVEFfQ0RST01fTUFKT1IgMjUKKyNkZWZpbmUgU1RMX0NBTExPVVRNQUpPUiAyNQorI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NMl9NQUpPUiAyNgorI2RlZmluZSBRSUMxMTdfVEFQRV9NQUpPUiAyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NM19NQUpPUiAyNworI2RlZmluZSBNQVRTVVNISVRBX0NEUk9NNF9NQUpPUiAyOAorI2RlZmluZSBTVExfU0lPTUVNTUFKT1IgMjgKKyNkZWZpbmUgQUNTSV9NQUpPUiAyOAorI2RlZmluZSBBWlRFQ0hfQ0RST01fTUFKT1IgMjkKKyNkZWZpbmUgR1JBUEhERVZfTUFKT1IgMjkgIAorI2RlZmluZSBDTTIwNl9DRFJPTV9NQUpPUiAzMgorI2RlZmluZSBJREUyX01BSk9SIDMzCisjZGVmaW5lIElERTNfTUFKT1IgMzQKKyNkZWZpbmUgWjg1MzBfTUFKT1IgMzQKKyNkZWZpbmUgWFBSQU1fTUFKT1IgMzUgIAorI2RlZmluZSBORVRMSU5LX01BSk9SIDM2CisjZGVmaW5lIFBTMkVTRElfTUFKT1IgMzYKKyNkZWZpbmUgSURFVEFQRV9NQUpPUiAzNworI2RlZmluZSBaMlJBTV9NQUpPUiAzNworI2RlZmluZSBBUEJMT0NLX01BSk9SIDM4ICAKKyNkZWZpbmUgRERWX01BSk9SIDM5ICAKKyNkZWZpbmUgTkJEX01BSk9SIDQzICAKKyNkZWZpbmUgUklTQ09NOF9OT1JNQUxfTUFKT1IgNDgKKyNkZWZpbmUgREFDOTYwX01BSk9SIDQ4ICAKKyNkZWZpbmUgUklTQ09NOF9DQUxMT1VUX01BSk9SIDQ5CisjZGVmaW5lIE1LSVNTX01BSk9SIDU1CisjZGVmaW5lIERTUDU2S19NQUpPUiA1NSAgCisKKyNkZWZpbmUgSURFNF9NQUpPUiA1NgorI2RlZmluZSBJREU1X01BSk9SIDU3CisKKyNkZWZpbmUgU0NTSV9ESVNLMV9NQUpPUiA2NQorI2RlZmluZSBTQ1NJX0RJU0syX01BSk9SIDY2CisjZGVmaW5lIFNDU0lfRElTSzNfTUFKT1IgNjcKKyNkZWZpbmUgU0NTSV9ESVNLNF9NQUpPUiA2OAorI2RlZmluZSBTQ1NJX0RJU0s1X01BSk9SIDY5CisjZGVmaW5lIFNDU0lfRElTSzZfTUFKT1IgNzAKKyNkZWZpbmUgU0NTSV9ESVNLN19NQUpPUiA3MQorCisjZGVmaW5lIENPTVBBUV9TTUFSVDJfTUFKT1IgNzIKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjEgNzMKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjIgNzQKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjMgNzUKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjQgNzYKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjUgNzcKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjYgNzgKKyNkZWZpbmUgQ09NUEFRX1NNQVJUMl9NQUpPUjcgNzkKKworI2RlZmluZSBTUEVDSUFMSVhfTk9STUFMX01BSk9SIDc1CisjZGVmaW5lIFNQRUNJQUxJWF9DQUxMT1VUX01BSk9SIDc2CisKKyNkZWZpbmUgQVVST1JBX01BSk9SIDc5CisKKyNkZWZpbmUgSTJPX01BSk9SIDgwICAKKworI2RlZmluZSBTSE1JUV9NQUpPUiA4NSAgCisjZGVmaW5lIFNDU0lfQ0hBTkdFUl9NQUpPUiA4NgorCisjZGVmaW5lIElERTZfTUFKT1IgODgKKyNkZWZpbmUgSURFN19NQUpPUiA4OQorI2RlZmluZSBJREU4X01BSk9SIDkwCisjZGVmaW5lIElERTlfTUFKT1IgOTEKKworI2RlZmluZSBEQVNEX01BSk9SIDk0CisKKyNkZWZpbmUgTURJU0tfTUFKT1IgOTUKKworI2RlZmluZSBVQkRfTUFKT1IgOTgKKworI2RlZmluZSBQUF9NQUpPUiA5OQorI2RlZmluZSBKU0ZEX01BSk9SIDk5CisKKyNkZWZpbmUgUEhPTkVfTUFKT1IgMTAwCisKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IgMTA0CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SMSAxMDUKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1IyIDEwNgorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjMgMTA3CisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNCAxMDgKKyNkZWZpbmUgQ09NUEFRX0NJU1NfTUFKT1I1IDEwOQorI2RlZmluZSBDT01QQVFfQ0lTU19NQUpPUjYgMTEwCisjZGVmaW5lIENPTVBBUV9DSVNTX01BSk9SNyAxMTEKKworI2RlZmluZSBWSU9EQVNEX01BSk9SIDExMgorI2RlZmluZSBWSU9DRF9NQUpPUiAxMTMKKworI2RlZmluZSBBVEFSQUlEX01BSk9SIDExNAorCisjZGVmaW5lIFNDU0lfRElTSzhfTUFKT1IgMTI4CisjZGVmaW5lIFNDU0lfRElTSzlfTUFKT1IgMTI5CisjZGVmaW5lIFNDU0lfRElTSzEwX01BSk9SIDEzMAorI2RlZmluZSBTQ1NJX0RJU0sxMV9NQUpPUiAxMzEKKyNkZWZpbmUgU0NTSV9ESVNLMTJfTUFKT1IgMTMyCisjZGVmaW5lIFNDU0lfRElTSzEzX01BSk9SIDEzMworI2RlZmluZSBTQ1NJX0RJU0sxNF9NQUpPUiAxMzQKKyNkZWZpbmUgU0NTSV9ESVNLMTVfTUFKT1IgMTM1CisKKyNkZWZpbmUgVU5JWDk4X1BUWV9NQVNURVJfTUFKT1IgMTI4CisjZGVmaW5lIFVOSVg5OF9QVFlfTUFKT1JfQ09VTlQgOAorI2RlZmluZSBVTklYOThfUFRZX1NMQVZFX01BSk9SIChVTklYOThfUFRZX01BU1RFUl9NQUpPUitVTklYOThfUFRZX01BSk9SX0NPVU5UKQorCisjZGVmaW5lIFJURl9NQUpPUiAxNTAKKyNkZWZpbmUgUkFXX01BSk9SIDE2MgorCisjZGVmaW5lIFVTQl9BQ01fTUFKT1IgMTY2CisjZGVmaW5lIFVTQl9BQ01fQVVYX01BSk9SIDE2NworI2RlZmluZSBVU0JfQ0hBUl9NQUpPUiAxODAKKworI2RlZmluZSBWWFZNX01BSk9SIDE5OSAgCisjZGVmaW5lIFZYU1BFQ19NQUpPUiAyMDAgIAorI2RlZmluZSBWWERNUF9NQUpPUiAyMDEgIAorCisjZGVmaW5lIE1TUl9NQUpPUiAyMDIKKyNkZWZpbmUgQ1BVSURfTUFKT1IgMjAzCisKKyNkZWZpbmUgT1NTVF9NQUpPUiAyMDYgIAorCisjZGVmaW5lIElCTV9UVFkzMjcwX01BSk9SIDIyNworI2RlZmluZSBJQk1fRlMzMjcwX01BSk9SIDIyOAorCisjZGVmaW5lIFZJT1RBUEVfTUFKT1IgMjMwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jMTQ2ODE4cnRjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWMxNDY4MThydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDQzNmVhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jMTQ2ODE4cnRjLmgKQEAgLTAsMCArMSw3OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTUMxNDY4MThSVENfSAorI2RlZmluZSBfTUMxNDY4MThSVENfSAorCisjaW5jbHVkZSA8YXNtL2lvLmg+CisjaW5jbHVkZSA8bGludXgvcnRjLmg+ICAKKyNpbmNsdWRlIDxhc20vbWMxNDY4MThydGMuaD4gIAorCisjZGVmaW5lIFJUQ19TRUNPTkRTIDAKKyNkZWZpbmUgUlRDX1NFQ09ORFNfQUxBUk0gMQorI2RlZmluZSBSVENfTUlOVVRFUyAyCisjZGVmaW5lIFJUQ19NSU5VVEVTX0FMQVJNIDMKKyNkZWZpbmUgUlRDX0hPVVJTIDQKKyNkZWZpbmUgUlRDX0hPVVJTX0FMQVJNIDUKKworI2RlZmluZSBSVENfQUxBUk1fRE9OVF9DQVJFIDB4QzAKKworI2RlZmluZSBSVENfREFZX09GX1dFRUsgNgorI2RlZmluZSBSVENfREFZX09GX01PTlRIIDcKKyNkZWZpbmUgUlRDX01PTlRIIDgKKyNkZWZpbmUgUlRDX1lFQVIgOQorCisjZGVmaW5lIFJUQ19SRUdfQSAxMAorI2RlZmluZSBSVENfUkVHX0IgMTEKKyNkZWZpbmUgUlRDX1JFR19DIDEyCisjZGVmaW5lIFJUQ19SRUdfRCAxMworCisjZGVmaW5lIFJUQ19GUkVRX1NFTEVDVCBSVENfUkVHX0EKKworI2RlZmluZSBSVENfVUlQIDB4ODAKKyNkZWZpbmUgUlRDX0RJVl9DVEwgMHg3MAorCisjZGVmaW5lIFJUQ19SRUZfQ0xDS180TUhaIDB4MDAKKyNkZWZpbmUgUlRDX1JFRl9DTENLXzFNSFogMHgxMAorI2RlZmluZSBSVENfUkVGX0NMQ0tfMzJLSFogMHgyMAorCisjZGVmaW5lIFJUQ19ESVZfUkVTRVQxIDB4NjAKKyNkZWZpbmUgUlRDX0RJVl9SRVNFVDIgMHg3MAorCisjZGVmaW5lIFJUQ19SQVRFX1NFTEVDVCAweDBGCisKKyNkZWZpbmUgUlRDX0NPTlRST0wgUlRDX1JFR19CCisjZGVmaW5lIFJUQ19TRVQgMHg4MCAgCisjZGVmaW5lIFJUQ19QSUUgMHg0MCAgCisjZGVmaW5lIFJUQ19BSUUgMHgyMCAgCisjZGVmaW5lIFJUQ19VSUUgMHgxMCAgCisjZGVmaW5lIFJUQ19TUVdFIDB4MDggIAorI2RlZmluZSBSVENfRE1fQklOQVJZIDB4MDQgIAorI2RlZmluZSBSVENfMjRIIDB4MDIgIAorI2RlZmluZSBSVENfRFNUX0VOIDB4MDEgIAorCisjZGVmaW5lIFJUQ19JTlRSX0ZMQUdTIFJUQ19SRUdfQworCisjZGVmaW5lIFJUQ19JUlFGIDB4ODAgIAorI2RlZmluZSBSVENfUEYgMHg0MAorI2RlZmluZSBSVENfQUYgMHgyMAorI2RlZmluZSBSVENfVUYgMHgxMAorCisjZGVmaW5lIFJUQ19WQUxJRCBSVENfUkVHX0QKKyNkZWZpbmUgUlRDX1ZSVCAweDgwICAKKworI2lmbmRlZiBBUkNIX1JUQ19MT0NBVElPTgorCisjZGVmaW5lIFJUQ19JT19FWFRFTlQgMHg4CisjZGVmaW5lIFJUQ19JT01BUFBFRCAxICAKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jYS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21jYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRmYmZjMmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWNhLmgKQEAgLTAsMCArMSw3NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTUNBX0gKKyNkZWZpbmUgX0xJTlVYX01DQV9ICisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2RlZmluZSBNQ0FfYnVzIDAKKwordHlwZWRlZiBpbnQgKCpNQ0FfUHJvY0ZuKShjaGFyKiBidWYsIGludCBzbG90LCB2b2lkKiBkZXYpOworCitlbnVtIE1DQV9BZGFwdGVyU3RhdHVzIHsKKyBNQ0FfQURBUFRFUl9OT1JNQUwgPSAwLAorIE1DQV9BREFQVEVSX05PTkUgPSAxLAorIE1DQV9BREFQVEVSX0RJU0FCTEVEID0gMiwKKyBNQ0FfQURBUFRFUl9FUlJPUiA9IDMKK307CisKK3N0cnVjdCBtY2FfZGV2aWNlIHsKKyB1NjQgZG1hX21hc2s7CisgaW50IHBvc19pZDsKKyBpbnQgc2xvdDsKKworIGludCBpbmRleDsKKworIGludCBkcml2ZXJfbG9hZGVkOworCisgdW5zaWduZWQgY2hhciBwb3NbOF07CisKKyBzaG9ydCBwb3NfcmVnaXN0ZXI7CisKKyBlbnVtIE1DQV9BZGFwdGVyU3RhdHVzIHN0YXR1czsKKyBzdHJ1Y3QgZGV2aWNlIGRldjsKKyBjaGFyIG5hbWVbMzJdOworfTsKKyNkZWZpbmUgdG9fbWNhX2RldmljZShtZGV2KSBjb250YWluZXJfb2YobWRldiwgc3RydWN0IG1jYV9kZXZpY2UsIGRldikKKworc3RydWN0IG1jYV9idXNfYWNjZXNzb3JfZnVuY3Rpb25zIHsKKyB1bnNpZ25lZCBjaGFyICgqbWNhX3JlYWRfcG9zKShzdHJ1Y3QgbWNhX2RldmljZSAqLCBpbnQgcmVnKTsKKyB2b2lkICgqbWNhX3dyaXRlX3Bvcykoc3RydWN0IG1jYV9kZXZpY2UgKiwgaW50IHJlZywKKyB1bnNpZ25lZCBjaGFyIGJ5dGUpOworIGludCAoKm1jYV90cmFuc2Zvcm1faXJxKShzdHJ1Y3QgbWNhX2RldmljZSAqLCBpbnQgaXJxKTsKKyBpbnQgKCptY2FfdHJhbnNmb3JtX2lvcG9ydCkoc3RydWN0IG1jYV9kZXZpY2UgKiwKKyBpbnQgcmVnaW9uKTsKKyB2b2lkICogKCptY2FfdHJhbnNmb3JtX21lbW9yeSkoc3RydWN0IG1jYV9kZXZpY2UgKiwKKyB2b2lkICptZW1vcnkpOworfTsKKworc3RydWN0IG1jYV9idXMgeworIHU2NCBkZWZhdWx0X2RtYV9tYXNrOworIGludCBudW1iZXI7Cisgc3RydWN0IG1jYV9idXNfYWNjZXNzb3JfZnVuY3Rpb25zIGY7Cisgc3RydWN0IGRldmljZSBkZXY7CisgY2hhciBuYW1lWzMyXTsKK307CisjZGVmaW5lIHRvX21jYV9idXMobWRldikgY29udGFpbmVyX29mKG1kZXYsIHN0cnVjdCBtY2FfYnVzLCBkZXYpCisKK3N0cnVjdCBtY2FfZHJpdmVyIHsKKyBjb25zdCBzaG9ydCAqaWRfdGFibGU7Cisgdm9pZCAqZHJpdmVyX2RhdGE7Cisgc3RydWN0IGRldmljZV9kcml2ZXIgZHJpdmVyOworfTsKKyNkZWZpbmUgdG9fbWNhX2RyaXZlcihtZHJpdmVyKSBjb250YWluZXJfb2YobWRyaXZlciwgc3RydWN0IG1jYV9kcml2ZXIsIGRyaXZlcikKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9saWN5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbWVtcG9saWN5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmI3YjJkNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb2xpY3kuaApAQCAtMCwwICsxLDMyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NRU1QT0xJQ1lfSAorI2RlZmluZSBfTElOVVhfTUVNUE9MSUNZX0ggMQorCisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKworI2RlZmluZSBNUE9MX0RFRkFVTFQgMAorI2RlZmluZSBNUE9MX1BSRUZFUlJFRCAxCisjZGVmaW5lIE1QT0xfQklORCAyCisjZGVmaW5lIE1QT0xfSU5URVJMRUFWRSAzCisKKyNkZWZpbmUgTVBPTF9NQVggTVBPTF9JTlRFUkxFQVZFCisKKyNkZWZpbmUgTVBPTF9GX05PREUgKDE8PDApICAKKyNkZWZpbmUgTVBPTF9GX0FERFIgKDE8PDEpICAKKworI2RlZmluZSBNUE9MX01GX1NUUklDVCAoMTw8MCkgIAorI2RlZmluZSBNUE9MX01GX01PVkUgKDE8PDEpICAKKyNkZWZpbmUgTVBPTF9NRl9NT1ZFX0FMTCAoMTw8MikgIAorI2RlZmluZSBNUE9MX01GX0lOVEVSTkFMICgxPDwzKSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21lbXBvb2wuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb29sLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmEyNDMyYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tZW1wb29sLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTUVNUE9PTF9ICisjZGVmaW5lIF9MSU5VWF9NRU1QT09MX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKworc3RydWN0IGttZW1fY2FjaGU7CisKK3R5cGVkZWYgdm9pZCAqIChtZW1wb29sX2FsbG9jX3QpKGdmcF90IGdmcF9tYXNrLCB2b2lkICpwb29sX2RhdGEpOwordHlwZWRlZiB2b2lkIChtZW1wb29sX2ZyZWVfdCkodm9pZCAqZWxlbWVudCwgdm9pZCAqcG9vbF9kYXRhKTsKKwordHlwZWRlZiBzdHJ1Y3QgbWVtcG9vbF9zIHsKKyBzcGlubG9ja190IGxvY2s7CisgaW50IG1pbl9ucjsKKyBpbnQgY3Vycl9ucjsKKyB2b2lkICoqZWxlbWVudHM7CisKKyB2b2lkICpwb29sX2RhdGE7CisgbWVtcG9vbF9hbGxvY190ICphbGxvYzsKKyBtZW1wb29sX2ZyZWVfdCAqZnJlZTsKKyB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OworfSBtZW1wb29sX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21pc2NkZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9taXNjZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3OTYwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9taXNjZGV2aWNlLmgKQEAgLTAsMCArMSw1NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTUlTQ0RFVklDRV9ICisjZGVmaW5lIF9MSU5VWF9NSVNDREVWSUNFX0gKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorCisjZGVmaW5lIFBTTU9VU0VfTUlOT1IgMQorI2RlZmluZSBNU19CVVNNT1VTRV9NSU5PUiAyCisjZGVmaW5lIEFUSVhMX0JVU01PVVNFX01JTk9SIDMKKworI2RlZmluZSBBVEFSSU1PVVNFX01JTk9SIDUKKyNkZWZpbmUgU1VOX01PVVNFX01JTk9SIDYKKyNkZWZpbmUgQVBPTExPX01PVVNFX01JTk9SIDcKKyNkZWZpbmUgUEMxMTBQQURfTUlOT1IgOQorCisjZGVmaW5lIFdBVENIRE9HX01JTk9SIDEzMCAgCisjZGVmaW5lIFRFTVBfTUlOT1IgMTMxICAKKyNkZWZpbmUgUlRDX01JTk9SIDEzNQorI2RlZmluZSBFRklfUlRDX01JTk9SIDEzNiAgCisjZGVmaW5lIFNVTl9PUEVOUFJPTV9NSU5PUiAxMzkKKyNkZWZpbmUgRE1BUElfTUlOT1IgMTQwICAKKyNkZWZpbmUgTlZSQU1fTUlOT1IgMTQ0CisjZGVmaW5lIFNHSV9NTVRJTUVSIDE1MworI2RlZmluZSBTVE9SRV9RVUVVRV9NSU5PUiAxNTUKKyNkZWZpbmUgSTJPX01JTk9SIDE2NgorI2RlZmluZSBNSUNST0NPREVfTUlOT1IgMTg0CisjZGVmaW5lIE1XQVZFX01JTk9SIDIxOSAgCisjZGVmaW5lIE1QVF9NSU5PUiAyMjAKKyNkZWZpbmUgTUlTQ19EWU5BTUlDX01JTk9SIDI1NQorCisjZGVmaW5lIFRVTl9NSU5PUiAyMDAKKyNkZWZpbmUgSFBFVF9NSU5PUiAyMjgKKworc3RydWN0IGRldmljZTsKK3N0cnVjdCBjbGFzc19kZXZpY2U7CisKK3N0cnVjdCBtaXNjZGV2aWNlIHsKKyBpbnQgbWlub3I7CisgY29uc3QgY2hhciAqbmFtZTsKKyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgZGV2aWNlICpkZXY7Cisgc3RydWN0IGNsYXNzX2RldmljZSAqY2xhc3M7Cit9OworCisjZGVmaW5lIE1PRFVMRV9BTElBU19NSVNDREVWKG1pbm9yKSAgIE1PRFVMRV9BTElBUygiY2hhci1tYWpvci0iIF9fc3RyaW5naWZ5KE1JU0NfTUFKT1IpICAgIi0iIF9fc3RyaW5naWZ5KG1pbm9yKSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZWEyOTNiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTU1fSAorI2RlZmluZSBfTElOVVhfTU1fSAorCisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2NhcGFiaWxpdHkuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2NhcmQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvY2FyZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0YWZlMjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL2NhcmQuaApAQCAtMCwwICsxLDEwMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9NTUNfQ0FSRF9ICisjZGVmaW5lIExJTlVYX01NQ19DQVJEX0gKKworI2luY2x1ZGUgPGxpbnV4L21tYy9tbWMuaD4KKworc3RydWN0IG1tY19jaWQgeworIHVuc2lnbmVkIGludCBtYW5maWQ7CisgY2hhciBwcm9kX25hbWVbOF07CisgdW5zaWduZWQgaW50IHNlcmlhbDsKKyB1bnNpZ25lZCBzaG9ydCBvZW1pZDsKKyB1bnNpZ25lZCBzaG9ydCB5ZWFyOworIHVuc2lnbmVkIGNoYXIgaHdyZXY7CisgdW5zaWduZWQgY2hhciBmd3JldjsKKyB1bnNpZ25lZCBjaGFyIG1vbnRoOworfTsKKworc3RydWN0IG1tY19jc2QgeworIHVuc2lnbmVkIGNoYXIgbW1jYV92c247CisgdW5zaWduZWQgc2hvcnQgY21kY2xhc3M7CisgdW5zaWduZWQgc2hvcnQgdGFjY19jbGtzOworIHVuc2lnbmVkIGludCB0YWNjX25zOworIHVuc2lnbmVkIGludCByMndfZmFjdG9yOworIHVuc2lnbmVkIGludCBtYXhfZHRyOworIHVuc2lnbmVkIGludCByZWFkX2Jsa2JpdHM7CisgdW5zaWduZWQgaW50IHdyaXRlX2Jsa2JpdHM7CisgdW5zaWduZWQgaW50IGNhcGFjaXR5OworIHVuc2lnbmVkIGludCByZWFkX3BhcnRpYWw6MSwKKyByZWFkX21pc2FsaWduOjEsCisgd3JpdGVfcGFydGlhbDoxLAorIHdyaXRlX21pc2FsaWduOjE7Cit9OworCitzdHJ1Y3Qgc2Rfc2NyIHsKKyB1bnNpZ25lZCBjaGFyIHNkYV92c247CisgdW5zaWduZWQgY2hhciBidXNfd2lkdGhzOworI2RlZmluZSBTRF9TQ1JfQlVTX1dJRFRIXzEgKDE8PDApCisjZGVmaW5lIFNEX1NDUl9CVVNfV0lEVEhfNCAoMTw8MikKK307CisKK3N0cnVjdCBtbWNfaG9zdDsKKworc3RydWN0IG1tY19jYXJkIHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7Cisgc3RydWN0IG1tY19ob3N0ICpob3N0OworIHN0cnVjdCBkZXZpY2UgZGV2OworIHVuc2lnbmVkIGludCByY2E7CisgdW5zaWduZWQgaW50IHN0YXRlOworI2RlZmluZSBNTUNfU1RBVEVfUFJFU0VOVCAoMTw8MCkgIAorI2RlZmluZSBNTUNfU1RBVEVfREVBRCAoMTw8MSkgIAorI2RlZmluZSBNTUNfU1RBVEVfQkFEICgxPDwyKSAgCisjZGVmaW5lIE1NQ19TVEFURV9TRENBUkQgKDE8PDMpICAKKyNkZWZpbmUgTU1DX1NUQVRFX1JFQURPTkxZICgxPDw0KSAgCisgdTMyIHJhd19jaWRbNF07CisgdTMyIHJhd19jc2RbNF07CisgdTMyIHJhd19zY3JbMl07Cisgc3RydWN0IG1tY19jaWQgY2lkOworIHN0cnVjdCBtbWNfY3NkIGNzZDsKKyBzdHJ1Y3Qgc2Rfc2NyIHNjcjsKK307CisKKyNkZWZpbmUgbW1jX2NhcmRfcHJlc2VudChjKSAoKGMpLT5zdGF0ZSAmIE1NQ19TVEFURV9QUkVTRU5UKQorI2RlZmluZSBtbWNfY2FyZF9kZWFkKGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX0RFQUQpCisjZGVmaW5lIG1tY19jYXJkX2JhZChjKSAoKGMpLT5zdGF0ZSAmIE1NQ19TVEFURV9CQUQpCisjZGVmaW5lIG1tY19jYXJkX3NkKGMpICgoYyktPnN0YXRlICYgTU1DX1NUQVRFX1NEQ0FSRCkKKyNkZWZpbmUgbW1jX2NhcmRfcmVhZG9ubHkoYykgKChjKS0+c3RhdGUgJiBNTUNfU1RBVEVfUkVBRE9OTFkpCisKKyNkZWZpbmUgbW1jX2NhcmRfc2V0X3ByZXNlbnQoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1BSRVNFTlQpCisjZGVmaW5lIG1tY19jYXJkX3NldF9kZWFkKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9ERUFEKQorI2RlZmluZSBtbWNfY2FyZF9zZXRfYmFkKGMpICgoYyktPnN0YXRlIHw9IE1NQ19TVEFURV9CQUQpCisjZGVmaW5lIG1tY19jYXJkX3NldF9zZChjKSAoKGMpLT5zdGF0ZSB8PSBNTUNfU1RBVEVfU0RDQVJEKQorI2RlZmluZSBtbWNfY2FyZF9zZXRfcmVhZG9ubHkoYykgKChjKS0+c3RhdGUgfD0gTU1DX1NUQVRFX1JFQURPTkxZKQorCisjZGVmaW5lIG1tY19jYXJkX25hbWUoYykgKChjKS0+Y2lkLnByb2RfbmFtZSkKKyNkZWZpbmUgbW1jX2NhcmRfaWQoYykgKChjKS0+ZGV2LmJ1c19pZCkKKworI2RlZmluZSBtbWNfbGlzdF90b19jYXJkKGwpIGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgbW1jX2NhcmQsIG5vZGUpCisjZGVmaW5lIG1tY19nZXRfZHJ2ZGF0YShjKSBkZXZfZ2V0X2RydmRhdGEoJihjKS0+ZGV2KQorI2RlZmluZSBtbWNfc2V0X2RydmRhdGEoYyxkKSBkZXZfc2V0X2RydmRhdGEoJihjKS0+ZGV2LCBkKQorCitzdHJ1Y3QgbW1jX2RyaXZlciB7Cisgc3RydWN0IGRldmljZV9kcml2ZXIgZHJ2OworIGludCAoKnByb2JlKShzdHJ1Y3QgbW1jX2NhcmQgKik7Cisgdm9pZCAoKnJlbW92ZSkoc3RydWN0IG1tY19jYXJkICopOworIGludCAoKnN1c3BlbmQpKHN0cnVjdCBtbWNfY2FyZCAqLCBwbV9tZXNzYWdlX3QpOworIGludCAoKnJlc3VtZSkoc3RydWN0IG1tY19jYXJkICopOworfTsKKworI2RlZmluZSBtbWNfY2FyZF9yZWxlYXNlX2hvc3QoYykgbW1jX3JlbGVhc2VfaG9zdCgoYyktPmhvc3QpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvaG9zdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21tYy9ob3N0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQzMzYyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvaG9zdC5oCkBAIC0wLDAgKzEsMTIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX01NQ19IT1NUX0gKKyNkZWZpbmUgTElOVVhfTU1DX0hPU1RfSAorCisjaW5jbHVkZSA8bGludXgvbW1jL21tYy5oPgorCitzdHJ1Y3QgbW1jX2lvcyB7CisgdW5zaWduZWQgaW50IGNsb2NrOworIHVuc2lnbmVkIHNob3J0IHZkZDsKKworI2RlZmluZSBNTUNfVkREXzE1MCAwCisjZGVmaW5lIE1NQ19WRERfMTU1IDEKKyNkZWZpbmUgTU1DX1ZERF8xNjAgMgorI2RlZmluZSBNTUNfVkREXzE2NSAzCisjZGVmaW5lIE1NQ19WRERfMTcwIDQKKyNkZWZpbmUgTU1DX1ZERF8xODAgNQorI2RlZmluZSBNTUNfVkREXzE5MCA2CisjZGVmaW5lIE1NQ19WRERfMjAwIDcKKyNkZWZpbmUgTU1DX1ZERF8yMTAgOAorI2RlZmluZSBNTUNfVkREXzIyMCA5CisjZGVmaW5lIE1NQ19WRERfMjMwIDEwCisjZGVmaW5lIE1NQ19WRERfMjQwIDExCisjZGVmaW5lIE1NQ19WRERfMjUwIDEyCisjZGVmaW5lIE1NQ19WRERfMjYwIDEzCisjZGVmaW5lIE1NQ19WRERfMjcwIDE0CisjZGVmaW5lIE1NQ19WRERfMjgwIDE1CisjZGVmaW5lIE1NQ19WRERfMjkwIDE2CisjZGVmaW5lIE1NQ19WRERfMzAwIDE3CisjZGVmaW5lIE1NQ19WRERfMzEwIDE4CisjZGVmaW5lIE1NQ19WRERfMzIwIDE5CisjZGVmaW5lIE1NQ19WRERfMzMwIDIwCisjZGVmaW5lIE1NQ19WRERfMzQwIDIxCisjZGVmaW5lIE1NQ19WRERfMzUwIDIyCisjZGVmaW5lIE1NQ19WRERfMzYwIDIzCisKKyB1bnNpZ25lZCBjaGFyIGJ1c19tb2RlOworCisjZGVmaW5lIE1NQ19CVVNNT0RFX09QRU5EUkFJTiAxCisjZGVmaW5lIE1NQ19CVVNNT0RFX1BVU0hQVUxMIDIKKworIHVuc2lnbmVkIGNoYXIgY2hpcF9zZWxlY3Q7CisKKyNkZWZpbmUgTU1DX0NTX0RPTlRDQVJFIDAKKyNkZWZpbmUgTU1DX0NTX0hJR0ggMQorI2RlZmluZSBNTUNfQ1NfTE9XIDIKKworIHVuc2lnbmVkIGNoYXIgcG93ZXJfbW9kZTsKKworI2RlZmluZSBNTUNfUE9XRVJfT0ZGIDAKKyNkZWZpbmUgTU1DX1BPV0VSX1VQIDEKKyNkZWZpbmUgTU1DX1BPV0VSX09OIDIKKworIHVuc2lnbmVkIGNoYXIgYnVzX3dpZHRoOworCisjZGVmaW5lIE1NQ19CVVNfV0lEVEhfMSAwCisjZGVmaW5lIE1NQ19CVVNfV0lEVEhfNCAyCit9OworCitzdHJ1Y3QgbW1jX2hvc3Rfb3BzIHsKKyB2b2lkICgqcmVxdWVzdCkoc3RydWN0IG1tY19ob3N0ICpob3N0LCBzdHJ1Y3QgbW1jX3JlcXVlc3QgKnJlcSk7Cisgdm9pZCAoKnNldF9pb3MpKHN0cnVjdCBtbWNfaG9zdCAqaG9zdCwgc3RydWN0IG1tY19pb3MgKmlvcyk7CisgaW50ICgqZ2V0X3JvKShzdHJ1Y3QgbW1jX2hvc3QgKmhvc3QpOworfTsKKworc3RydWN0IG1tY19jYXJkOworc3RydWN0IGRldmljZTsKKworc3RydWN0IG1tY19ob3N0IHsKKyBzdHJ1Y3QgZGV2aWNlICpkZXY7Cisgc3RydWN0IGNsYXNzX2RldmljZSBjbGFzc19kZXY7CisgaW50IGluZGV4OworIGNvbnN0IHN0cnVjdCBtbWNfaG9zdF9vcHMgKm9wczsKKyB1bnNpZ25lZCBpbnQgZl9taW47CisgdW5zaWduZWQgaW50IGZfbWF4OworIHUzMiBvY3JfYXZhaWw7CisKKyB1bnNpZ25lZCBsb25nIGNhcHM7CisKKyNkZWZpbmUgTU1DX0NBUF80X0JJVF9EQVRBICgxIDw8IDApICAKKworIHVuc2lnbmVkIGludCBtYXhfc2VnX3NpemU7CisgdW5zaWduZWQgc2hvcnQgbWF4X2h3X3NlZ3M7CisgdW5zaWduZWQgc2hvcnQgbWF4X3BoeXNfc2VnczsKKyB1bnNpZ25lZCBzaG9ydCBtYXhfc2VjdG9yczsKKyB1bnNpZ25lZCBzaG9ydCB1bnVzZWQ7CisKKyBzdHJ1Y3QgbW1jX2lvcyBpb3M7CisgdTMyIG9jcjsKKworIHVuc2lnbmVkIGludCBtb2RlOworI2RlZmluZSBNTUNfTU9ERV9NTUMgMAorI2RlZmluZSBNTUNfTU9ERV9TRCAxCisKKyBzdHJ1Y3QgbGlzdF9oZWFkIGNhcmRzOworCisgd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7Cisgc3BpbmxvY2tfdCBsb2NrOworIHN0cnVjdCBtbWNfY2FyZCAqY2FyZF9idXN5OworIHN0cnVjdCBtbWNfY2FyZCAqY2FyZF9zZWxlY3RlZDsKKworIHN0cnVjdCB3b3JrX3N0cnVjdCBkZXRlY3Q7CisKKyB1bnNpZ25lZCBsb25nIHByaXZhdGVbMF0gX19fX2NhY2hlbGluZV9hbGlnbmVkOworfTsKKworI2RlZmluZSBtbWNfZGV2KHgpICgoeCktPmRldikKKyNkZWZpbmUgbW1jX2hvc3RuYW1lKHgpICgoeCktPmNsYXNzX2Rldi5jbGFzc19pZCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbWMvbW1jLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL21tYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4OTcxNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW1jL21tYy5oCkBAIC0wLDAgKzEsOTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTU1DX0gKKyNkZWZpbmUgTU1DX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworc3RydWN0IHJlcXVlc3Q7CitzdHJ1Y3QgbW1jX2RhdGE7CitzdHJ1Y3QgbW1jX3JlcXVlc3Q7CisKK3N0cnVjdCBtbWNfY29tbWFuZCB7CisgdTMyIG9wY29kZTsKKyB1MzIgYXJnOworIHUzMiByZXNwWzRdOworIHVuc2lnbmVkIGludCBmbGFnczsKKyNkZWZpbmUgTU1DX1JTUF9QUkVTRU5UICgxIDw8IDApCisjZGVmaW5lIE1NQ19SU1BfMTM2ICgxIDw8IDEpICAKKyNkZWZpbmUgTU1DX1JTUF9DUkMgKDEgPDwgMikgIAorI2RlZmluZSBNTUNfUlNQX0JVU1kgKDEgPDwgMykgIAorI2RlZmluZSBNTUNfUlNQX09QQ09ERSAoMSA8PCA0KSAgCisjZGVmaW5lIE1NQ19DTURfTUFTSyAoMyA8PCA1KSAgCisjZGVmaW5lIE1NQ19DTURfQUMgKDAgPDwgNSkKKyNkZWZpbmUgTU1DX0NNRF9BRFRDICgxIDw8IDUpCisjZGVmaW5lIE1NQ19DTURfQkMgKDIgPDwgNSkKKyNkZWZpbmUgTU1DX0NNRF9CQ1IgKDMgPDwgNSkKKworI2RlZmluZSBNTUNfUlNQX05PTkUgKDApCisjZGVmaW5lIE1NQ19SU1BfUjEgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX09QQ09ERSkKKyNkZWZpbmUgTU1DX1JTUF9SMUIgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQX0NSQ3xNTUNfUlNQX09QQ09ERXxNTUNfUlNQX0JVU1kpCisjZGVmaW5lIE1NQ19SU1BfUjIgKE1NQ19SU1BfUFJFU0VOVHxNTUNfUlNQXzEzNnxNTUNfUlNQX0NSQykKKyNkZWZpbmUgTU1DX1JTUF9SMyAoTU1DX1JTUF9QUkVTRU5UKQorI2RlZmluZSBNTUNfUlNQX1I2IChNTUNfUlNQX1BSRVNFTlR8TU1DX1JTUF9DUkMpCisKKyNkZWZpbmUgbW1jX3Jlc3BfdHlwZShjbWQpICgoY21kKS0+ZmxhZ3MgJiAoTU1DX1JTUF9QUkVTRU5UfE1NQ19SU1BfMTM2fE1NQ19SU1BfQ1JDfE1NQ19SU1BfQlVTWXxNTUNfUlNQX09QQ09ERSkpCisKKyNkZWZpbmUgbW1jX2NtZF90eXBlKGNtZCkgKChjbWQpLT5mbGFncyAmIE1NQ19DTURfTUFTSykKKworIHVuc2lnbmVkIGludCByZXRyaWVzOworIHVuc2lnbmVkIGludCBlcnJvcjsKKworI2RlZmluZSBNTUNfRVJSX05PTkUgMAorI2RlZmluZSBNTUNfRVJSX1RJTUVPVVQgMQorI2RlZmluZSBNTUNfRVJSX0JBRENSQyAyCisjZGVmaW5lIE1NQ19FUlJfRklGTyAzCisjZGVmaW5lIE1NQ19FUlJfRkFJTEVEIDQKKyNkZWZpbmUgTU1DX0VSUl9JTlZBTElEIDUKKworIHN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKyBzdHJ1Y3QgbW1jX3JlcXVlc3QgKm1ycTsKK307CisKK3N0cnVjdCBtbWNfZGF0YSB7CisgdW5zaWduZWQgaW50IHRpbWVvdXRfbnM7CisgdW5zaWduZWQgaW50IHRpbWVvdXRfY2xrczsKKyB1bnNpZ25lZCBpbnQgYmxrc3pfYml0czsKKyB1bnNpZ25lZCBpbnQgYmxrc3o7CisgdW5zaWduZWQgaW50IGJsb2NrczsKKyB1bnNpZ25lZCBpbnQgZXJyb3I7CisgdW5zaWduZWQgaW50IGZsYWdzOworCisjZGVmaW5lIE1NQ19EQVRBX1dSSVRFICgxIDw8IDgpCisjZGVmaW5lIE1NQ19EQVRBX1JFQUQgKDEgPDwgOSkKKyNkZWZpbmUgTU1DX0RBVEFfU1RSRUFNICgxIDw8IDEwKQorI2RlZmluZSBNTUNfREFUQV9NVUxUSSAoMSA8PCAxMSkKKworIHVuc2lnbmVkIGludCBieXRlc194ZmVyZWQ7CisKKyBzdHJ1Y3QgbW1jX2NvbW1hbmQgKnN0b3A7Cisgc3RydWN0IG1tY19yZXF1ZXN0ICptcnE7CisKKyB1bnNpZ25lZCBpbnQgc2dfbGVuOworIHN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Cit9OworCitzdHJ1Y3QgbW1jX3JlcXVlc3QgeworIHN0cnVjdCBtbWNfY29tbWFuZCAqY21kOworIHN0cnVjdCBtbWNfZGF0YSAqZGF0YTsKKyBzdHJ1Y3QgbW1jX2NvbW1hbmQgKnN0b3A7CisKKyB2b2lkICpkb25lX2RhdGE7Cisgdm9pZCAoKmRvbmUpKHN0cnVjdCBtbWNfcmVxdWVzdCAqKTsKK307CisKK3N0cnVjdCBtbWNfaG9zdDsKK3N0cnVjdCBtbWNfY2FyZDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW16b25lLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW16b25lLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgxMzgyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tbXpvbmUuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NTVpPTkVfSAorI2RlZmluZSBfTElOVVhfTU1aT05FX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kX2RldmljZXRhYmxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kX2RldmljZXRhYmxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTNjMWRlOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2RfZGV2aWNldGFibGUuaApAQCAtMCwwICsxLDIwOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSAorI2RlZmluZSBMSU5VWF9NT0RfREVWSUNFVEFCTEVfSAorCisjZGVmaW5lIFBDSV9BTllfSUQgKH4wKQorCitzdHJ1Y3QgcGNpX2RldmljZV9pZCB7CisgX191MzIgdmVuZG9yLCBkZXZpY2U7CisgX191MzIgc3VidmVuZG9yLCBzdWJkZXZpY2U7CisgX191MzIgY2xhc3MsIGNsYXNzX21hc2s7Cisga2VybmVsX3Vsb25nX3QgZHJpdmVyX2RhdGE7Cit9OworCisjZGVmaW5lIElFRUUxMzk0X01BVENIX1ZFTkRPUl9JRCAweDAwMDEKKyNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfTU9ERUxfSUQgMHgwMDAyCisjZGVmaW5lIElFRUUxMzk0X01BVENIX1NQRUNJRklFUl9JRCAweDAwMDQKKyNkZWZpbmUgSUVFRTEzOTRfTUFUQ0hfVkVSU0lPTiAweDAwMDgKKworc3RydWN0IGllZWUxMzk0X2RldmljZV9pZCB7CisgX191MzIgbWF0Y2hfZmxhZ3M7CisgX191MzIgdmVuZG9yX2lkOworIF9fdTMyIG1vZGVsX2lkOworIF9fdTMyIHNwZWNpZmllcl9pZDsKKyBfX3UzMiB2ZXJzaW9uOworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhCisgX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2Yoa2VybmVsX3Vsb25nX3QpKSkpOworfTsKKworc3RydWN0IHVzYl9kZXZpY2VfaWQgeworCisgX191MTYgbWF0Y2hfZmxhZ3M7CisKKyBfX3UxNiBpZFZlbmRvcjsKKyBfX3UxNiBpZFByb2R1Y3Q7CisgX191MTYgYmNkRGV2aWNlX2xvOworIF9fdTE2IGJjZERldmljZV9oaTsKKworIF9fdTggYkRldmljZUNsYXNzOworIF9fdTggYkRldmljZVN1YkNsYXNzOworIF9fdTggYkRldmljZVByb3RvY29sOworCisgX191OCBiSW50ZXJmYWNlQ2xhc3M7CisgX191OCBiSW50ZXJmYWNlU3ViQ2xhc3M7CisgX191OCBiSW50ZXJmYWNlUHJvdG9jb2w7CisKKyBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfaW5mbzsKK307CisKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgMHgwMDAxCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCAweDAwMDIKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfTE8gMHgwMDA0CisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX0hJIDB4MDAwOAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0RFVl9DTEFTUyAweDAwMTAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZfU1VCQ0xBU1MgMHgwMDIwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWX1BST1RPQ09MIDB4MDA0MAorI2RlZmluZSBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9DTEFTUyAweDAwODAKKyNkZWZpbmUgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfU1VCQ0xBU1MgMHgwMTAwCisjZGVmaW5lIFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX1BST1RPQ09MIDB4MDIwMAorCitzdHJ1Y3QgY2N3X2RldmljZV9pZCB7CisgX191MTYgbWF0Y2hfZmxhZ3M7CisKKyBfX3UxNiBjdV90eXBlOworIF9fdTE2IGRldl90eXBlOworIF9fdTggY3VfbW9kZWw7CisgX191OCBkZXZfbW9kZWw7CisKKyBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfaW5mbzsKK307CisKKyNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9DVV9UWVBFIDB4MDEKKyNkZWZpbmUgQ0NXX0RFVklDRV9JRF9NQVRDSF9DVV9NT0RFTCAweDAyCisjZGVmaW5lIENDV19ERVZJQ0VfSURfTUFUQ0hfREVWSUNFX1RZUEUgMHgwNAorI2RlZmluZSBDQ1dfREVWSUNFX0lEX01BVENIX0RFVklDRV9NT0RFTCAweDA4CisKKyNkZWZpbmUgUE5QX0lEX0xFTiA4CisjZGVmaW5lIFBOUF9NQVhfREVWSUNFUyA4CisKK3N0cnVjdCBwbnBfZGV2aWNlX2lkIHsKKyBfX3U4IGlkW1BOUF9JRF9MRU5dOworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9kYXRhOworfTsKKworc3RydWN0IHBucF9jYXJkX2RldmljZV9pZCB7CisgX191OCBpZFtQTlBfSURfTEVOXTsKKyBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfZGF0YTsKKyBzdHJ1Y3QgeworIF9fdTggaWRbUE5QX0lEX0xFTl07CisgfSBkZXZzW1BOUF9NQVhfREVWSUNFU107Cit9OworCisjZGVmaW5lIFNFUklPX0FOWSAweGZmCisKK3N0cnVjdCBzZXJpb19kZXZpY2VfaWQgeworIF9fdTggdHlwZTsKKyBfX3U4IGV4dHJhOworIF9fdTggaWQ7CisgX191OCBwcm90bzsKK307CisKK3N0cnVjdCBvZl9kZXZpY2VfaWQKK3sKKyBjaGFyIG5hbWVbMzJdOworIGNoYXIgdHlwZVszMl07CisgY2hhciBjb21wYXRpYmxlWzEyOF07Cisga2VybmVsX3Vsb25nX3QgZGF0YTsKK307CisKK3N0cnVjdCB2aW9fZGV2aWNlX2lkIHsKKyBjaGFyIHR5cGVbMzJdOworIGNoYXIgY29tcGF0WzMyXTsKK307CisKK3N0cnVjdCBwY21jaWFfZGV2aWNlX2lkIHsKKyBfX3UxNiBtYXRjaF9mbGFnczsKKworIF9fdTE2IG1hbmZfaWQ7CisgX191MTYgY2FyZF9pZDsKKworIF9fdTggZnVuY19pZDsKKworIF9fdTggZnVuY3Rpb247CisKKyBfX3U4IGRldmljZV9ubzsKKworIF9fdTMyIHByb2RfaWRfaGFzaFs0XQorIF9fYXR0cmlidXRlX18oKGFsaWduZWQoc2l6ZW9mKF9fdTMyKSkpKTsKKworIGtlcm5lbF91bG9uZ190IHByb2RfaWRbNF0KKyBfX2F0dHJpYnV0ZV9fKChhbGlnbmVkKHNpemVvZihrZXJuZWxfdWxvbmdfdCkpKSk7CisKKyBrZXJuZWxfdWxvbmdfdCBkcml2ZXJfaW5mbzsKKyBrZXJuZWxfdWxvbmdfdCBjaXNmaWxlOworfTsKKworI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX01BTkZfSUQgMHgwMDAxCisjZGVmaW5lIFBDTUNJQV9ERVZfSURfTUFUQ0hfQ0FSRF9JRCAweDAwMDIKKyNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9GVU5DX0lEIDB4MDAwNAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0ZVTkNUSU9OIDB4MDAwOAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQxIDB4MDAxMAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQyIDB4MDAyMAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQzIDB4MDA0MAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX1BST0RfSUQ0IDB4MDA4MAorI2RlZmluZSBQQ01DSUFfREVWX0lEX01BVENIX0RFVklDRV9OTyAweDAxMDAKKyNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9GQUtFX0NJUyAweDAyMDAKKyNkZWZpbmUgUENNQ0lBX0RFVl9JRF9NQVRDSF9BTk9OWU1PVVMgMHgwNDAwCisKK3N0cnVjdCBpMmNfZGV2aWNlX2lkIHsKKyBfX3UxNiBpZDsKK307CisKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0VWX01BWCAweDFmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9LRVlfTUFYIDB4MWZmCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9SRUxfTUFYIDB4MGYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX0FCU19NQVggMHgzZgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCAweDA3CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9MRURfTUFYIDB4MGYKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1NORF9NQVggMHgwNworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfRkZfTUFYIDB4N2YKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX1NXX01BWCAweDBmCisKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0JVUyAxCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IgMgorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfUFJPRFVDVCA0CisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9WRVJTSU9OIDgKKworI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfRVZCSVQgMHgwMDEwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9LRVlCSVQgMHgwMDIwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9SRUxCSVQgMHgwMDQwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9BQlNCSVQgMHgwMDgwCisjZGVmaW5lIElOUFVUX0RFVklDRV9JRF9NQVRDSF9NU0NJVCAweDAxMDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0xFREJJVCAweDAyMDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX1NOREJJVCAweDA0MDAKKyNkZWZpbmUgSU5QVVRfREVWSUNFX0lEX01BVENIX0ZGQklUIDB4MDgwMAorI2RlZmluZSBJTlBVVF9ERVZJQ0VfSURfTUFUQ0hfU1dCSVQgMHgxMDAwCisKK3N0cnVjdCBpbnB1dF9kZXZpY2VfaWQgeworCisga2VybmVsX3Vsb25nX3QgZmxhZ3M7CisKKyBfX3UxNiBidXN0eXBlOworIF9fdTE2IHZlbmRvcjsKKyBfX3UxNiBwcm9kdWN0OworIF9fdTE2IHZlcnNpb247CisKKyBrZXJuZWxfdWxvbmdfdCBldmJpdFtJTlBVVF9ERVZJQ0VfSURfRVZfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworIGtlcm5lbF91bG9uZ190IGtleWJpdFtJTlBVVF9ERVZJQ0VfSURfS0VZX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKyBrZXJuZWxfdWxvbmdfdCByZWxiaXRbSU5QVVRfREVWSUNFX0lEX1JFTF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3QgYWJzYml0W0lOUFVUX0RFVklDRV9JRF9BQlNfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworIGtlcm5lbF91bG9uZ190IG1zY2JpdFtJTlBVVF9ERVZJQ0VfSURfTVNDX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKyBrZXJuZWxfdWxvbmdfdCBsZWRiaXRbSU5QVVRfREVWSUNFX0lEX0xFRF9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3Qgc25kYml0W0lOUFVUX0RFVklDRV9JRF9TTkRfTUFYIC8gQklUU19QRVJfTE9ORyArIDFdOworIGtlcm5lbF91bG9uZ190IGZmYml0W0lOUFVUX0RFVklDRV9JRF9GRl9NQVggLyBCSVRTX1BFUl9MT05HICsgMV07Cisga2VybmVsX3Vsb25nX3Qgc3diaXRbSU5QVVRfREVWSUNFX0lEX1NXX01BWCAvIEJJVFNfUEVSX0xPTkcgKyAxXTsKKworIGtlcm5lbF91bG9uZ190IGRyaXZlcl9pbmZvOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kdWxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW9kdWxlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2M0NDljNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGUuaApAQCAtMCwwICsxLDExNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTU9EVUxFX0gKKyNkZWZpbmUgX0xJTlVYX01PRFVMRV9ICisKKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2NhY2hlLmg+CisjaW5jbHVkZSA8bGludXgva21vZC5oPgorI2luY2x1ZGUgPGxpbnV4L2VsZi5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2tvYmplY3QuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGVwYXJhbS5oPgorI2luY2x1ZGUgPGFzbS9sb2NhbC5oPgorCisjaW5jbHVkZSA8YXNtL21vZHVsZS5oPgorCisjZGVmaW5lIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKG5hbWUpCisKKyNpZm5kZWYgTU9EVUxFX1NZTUJPTF9QUkVGSVgKKyNkZWZpbmUgTU9EVUxFX1NZTUJPTF9QUkVGSVggIiIKKyNlbmRpZgorCisjZGVmaW5lIE1PRFVMRV9OQU1FX0xFTiAoNjQgLSBzaXplb2YodW5zaWduZWQgbG9uZykpCisKK3N0cnVjdCBrZXJuZWxfc3ltYm9sCit7CisgdW5zaWduZWQgbG9uZyB2YWx1ZTsKKyBjb25zdCBjaGFyICpuYW1lOworfTsKKworc3RydWN0IG1vZHZlcnNpb25faW5mbworeworIHVuc2lnbmVkIGxvbmcgY3JjOworIGNoYXIgbmFtZVtNT0RVTEVfTkFNRV9MRU5dOworfTsKKworc3RydWN0IG1vZHVsZTsKKworc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgeworIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKyBzc2l6ZV90ICgqc2hvdykoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKiwgc3RydWN0IG1vZHVsZSAqLCBjaGFyICopOworIHNzaXplX3QgKCpzdG9yZSkoc3RydWN0IG1vZHVsZV9hdHRyaWJ1dGUgKiwgc3RydWN0IG1vZHVsZSAqLAorIGNvbnN0IGNoYXIgKiwgc2l6ZV90IGNvdW50KTsKKyB2b2lkICgqc2V0dXApKHN0cnVjdCBtb2R1bGUgKiwgY29uc3QgY2hhciAqKTsKKyBpbnQgKCp0ZXN0KShzdHJ1Y3QgbW9kdWxlICopOworIHZvaWQgKCpmcmVlKShzdHJ1Y3QgbW9kdWxlICopOworfTsKKworc3RydWN0IG1vZHVsZV9rb2JqZWN0Cit7Cisgc3RydWN0IGtvYmplY3Qga29iajsKKyBzdHJ1Y3QgbW9kdWxlICptb2Q7Cit9OworCitzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5OworCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIE1PRFVMRV9HRU5FUklDX1RBQkxFKGd0eXBlLG5hbWUpICBleHRlcm4gY29uc3Qgc3RydWN0IGd0eXBlIyNfaWQgX19tb2RfIyNndHlwZSMjX3RhYmxlICAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCwgYWxpYXMoX19zdHJpbmdpZnkobmFtZSkpKSkKKworI2RlZmluZSBUSElTX01PRFVMRSAoJl9fdGhpc19tb2R1bGUpCisjZWxzZQorI2RlZmluZSBNT0RVTEVfR0VORVJJQ19UQUJMRShndHlwZSxuYW1lKQorI2RlZmluZSBUSElTX01PRFVMRSAoKHN0cnVjdCBtb2R1bGUgKikwKQorI2VuZGlmCisKKyNkZWZpbmUgTU9EVUxFX0lORk8odGFnLCBpbmZvKSBfX01PRFVMRV9JTkZPKHRhZywgdGFnLCBpbmZvKQorCisjZGVmaW5lIE1PRFVMRV9BTElBUyhfYWxpYXMpIE1PRFVMRV9JTkZPKGFsaWFzLCBfYWxpYXMpCisKKyNkZWZpbmUgTU9EVUxFX0xJQ0VOU0UoX2xpY2Vuc2UpIE1PRFVMRV9JTkZPKGxpY2Vuc2UsIF9saWNlbnNlKQorCisjZGVmaW5lIE1PRFVMRV9BVVRIT1IoX2F1dGhvcikgTU9EVUxFX0lORk8oYXV0aG9yLCBfYXV0aG9yKQorCisjZGVmaW5lIE1PRFVMRV9ERVNDUklQVElPTihfZGVzY3JpcHRpb24pIE1PRFVMRV9JTkZPKGRlc2NyaXB0aW9uLCBfZGVzY3JpcHRpb24pCisKKyNkZWZpbmUgTU9EVUxFX1BBUk1fREVTQyhfcGFybSwgZGVzYykgICBfX01PRFVMRV9JTkZPKHBhcm0sIF9wYXJtLCAjX3Bhcm0gIjoiIGRlc2MpCisKKyNkZWZpbmUgTU9EVUxFX0RFVklDRV9UQUJMRSh0eXBlLG5hbWUpICAgTU9EVUxFX0dFTkVSSUNfVEFCTEUodHlwZSMjX2RldmljZSxuYW1lKQorCisjZGVmaW5lIE1PRFVMRV9WRVJTSU9OKF92ZXJzaW9uKSBNT0RVTEVfSU5GTyh2ZXJzaW9uLCBfdmVyc2lvbikKKworc3RydWN0IG5vdGlmaWVyX2Jsb2NrOworCisjZGVmaW5lIEVYUE9SVF9TWU1CT0woc3ltKQorI2RlZmluZSBFWFBPUlRfU1lNQk9MX0dQTChzeW0pCisjZGVmaW5lIEVYUE9SVF9TWU1CT0xfR1BMX0ZVVFVSRShzeW0pCisjZGVmaW5lIEVYUE9SVF9VTlVTRURfU1lNQk9MKHN5bSkKKyNkZWZpbmUgRVhQT1JUX1VOVVNFRF9TWU1CT0xfR1BMKHN5bSkKKworI2RlZmluZSBzeW1ib2xfZ2V0KHgpICh7IGV4dGVybiB0eXBlb2YoeCkgeCBfX2F0dHJpYnV0ZV9fKCh3ZWFrKSk7ICYoeCk7IH0pCisjZGVmaW5lIHN5bWJvbF9wdXQoeCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHN5bWJvbF9wdXRfYWRkcih4KSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgbW9kdWxlX25hbWUobW9kKSAia2VybmVsIgorI2RlZmluZSBfX3Vuc2FmZShtb2QpCisjZGVmaW5lIG1vZHVsZV9wdXRfYW5kX2V4aXQoY29kZSkgZG9fZXhpdChjb2RlKQorCitzdHJ1Y3QgbW9kdWxlOworCisjZGVmaW5lIHN5bWJvbF9yZXF1ZXN0KHgpIHRyeV90aGVuX3JlcXVlc3RfbW9kdWxlKHN5bWJvbF9nZXQoeCksICJzeW1ib2w6IiAjeCkKKyNkZWZpbmUgX19NT0RVTEVfU1RSSU5HKHgpIF9fc3RyaW5naWZ5KHgpCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGVwYXJhbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21vZHVsZXBhcmFtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQ2ZGRkNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb2R1bGVwYXJhbS5oCkBAIC0wLDAgKzEsMTAxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NT0RVTEVfUEFSQU1TX0gKKyNkZWZpbmUgX0xJTlVYX01PRFVMRV9QQVJBTVNfSAorCisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIE1PRFVMRV9QQVJBTV9QUkVGSVggIAorI2Vsc2UKKyNkZWZpbmUgTU9EVUxFX1BBUkFNX1BSRUZJWCBLQlVJTERfTU9ETkFNRSAiLiIKKyNlbmRpZgorCisjaWZkZWYgTU9EVUxFCisjZGVmaW5lIF9fX21vZHVsZV9jYXQoYSxiKSBfX21vZF8gIyMgYSAjIyBiCisjZGVmaW5lIF9fbW9kdWxlX2NhdChhLGIpIF9fX21vZHVsZV9jYXQoYSxiKQorI2RlZmluZSBfX01PRFVMRV9JTkZPKHRhZywgbmFtZSwgaW5mbykgIHN0YXRpYyBjb25zdCBjaGFyIF9fbW9kdWxlX2NhdChuYW1lLF9fTElORV9fKVtdICAgX19hdHRyaWJ1dGVfdXNlZF9fICAgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLm1vZGluZm8iKSx1bnVzZWQpKSA9IF9fc3RyaW5naWZ5KHRhZykgIj0iIGluZm8KKyNlbHNlCisjZGVmaW5lIF9fTU9EVUxFX0lORk8odGFnLCBuYW1lLCBpbmZvKQorI2VuZGlmCisjZGVmaW5lIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCBfdHlwZSkgICBfX01PRFVMRV9JTkZPKHBhcm10eXBlLCBuYW1lIyN0eXBlLCAjbmFtZSAiOiIgX3R5cGUpCisKK3N0cnVjdCBrZXJuZWxfcGFyYW07CisKK3R5cGVkZWYgaW50ICgqcGFyYW1fc2V0X2ZuKShjb25zdCBjaGFyICp2YWwsIHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKTsKKwordHlwZWRlZiBpbnQgKCpwYXJhbV9nZXRfZm4pKGNoYXIgKmJ1ZmZlciwgc3RydWN0IGtlcm5lbF9wYXJhbSAqa3ApOworCitzdHJ1Y3Qga2VybmVsX3BhcmFtIHsKKyBjb25zdCBjaGFyICpuYW1lOworIHVuc2lnbmVkIGludCBwZXJtOworIHBhcmFtX3NldF9mbiBzZXQ7CisgcGFyYW1fZ2V0X2ZuIGdldDsKKyB2b2lkICphcmc7Cit9OworCitzdHJ1Y3Qga3BhcmFtX3N0cmluZyB7CisgdW5zaWduZWQgaW50IG1heGxlbjsKKyBjaGFyICpzdHJpbmc7Cit9OworCitzdHJ1Y3Qga3BhcmFtX2FycmF5Cit7CisgdW5zaWduZWQgaW50IG1heDsKKyB1bnNpZ25lZCBpbnQgKm51bTsKKyBwYXJhbV9zZXRfZm4gc2V0OworIHBhcmFtX2dldF9mbiBnZXQ7CisgdW5zaWduZWQgaW50IGVsZW1zaXplOworIHZvaWQgKmVsZW07Cit9OworCisjZGVmaW5lIF9fbW9kdWxlX3BhcmFtX2NhbGwocHJlZml4LCBuYW1lLCBzZXQsIGdldCwgYXJnLCBwZXJtKSAgIHN0YXRpYyBjaGFyIF9fcGFyYW1fc3RyXyMjbmFtZVtdID0gcHJlZml4ICNuYW1lOyAgIHN0YXRpYyBzdHJ1Y3Qga2VybmVsX3BhcmFtIGNvbnN0IF9fcGFyYW1fIyNuYW1lICAgX19hdHRyaWJ1dGVfdXNlZF9fICAgX19hdHRyaWJ1dGVfXyAoKHVudXNlZCxfX3NlY3Rpb25fXyAoIl9fcGFyYW0iKSxhbGlnbmVkKHNpemVvZih2b2lkICopKSkpICAgPSB7IF9fcGFyYW1fc3RyXyMjbmFtZSwgcGVybSwgc2V0LCBnZXQsIGFyZyB9CisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgc2V0LCBnZXQsIGFyZywgcGVybSkgICBfX21vZHVsZV9wYXJhbV9jYWxsKE1PRFVMRV9QQVJBTV9QUkVGSVgsIG5hbWUsIHNldCwgZ2V0LCBhcmcsIHBlcm0pCisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtX25hbWVkKG5hbWUsIHZhbHVlLCB0eXBlLCBwZXJtKSAgIHBhcmFtX2NoZWNrXyMjdHlwZShuYW1lLCAmKHZhbHVlKSk7ICAgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgcGFyYW1fc2V0XyMjdHlwZSwgcGFyYW1fZ2V0XyMjdHlwZSwgJnZhbHVlLCBwZXJtKTsgICBfX01PRFVMRV9QQVJNX1RZUEUobmFtZSwgI3R5cGUpCisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtKG5hbWUsIHR5cGUsIHBlcm0pICAgbW9kdWxlX3BhcmFtX25hbWVkKG5hbWUsIG5hbWUsIHR5cGUsIHBlcm0pCisKKyNkZWZpbmUgbW9kdWxlX3BhcmFtX3N0cmluZyhuYW1lLCBzdHJpbmcsIGxlbiwgcGVybSkgICBzdGF0aWMgc3RydWN0IGtwYXJhbV9zdHJpbmcgX19wYXJhbV9zdHJpbmdfIyNuYW1lICAgPSB7IGxlbiwgc3RyaW5nIH07ICAgbW9kdWxlX3BhcmFtX2NhbGwobmFtZSwgcGFyYW1fc2V0X2NvcHlzdHJpbmcsIHBhcmFtX2dldF9zdHJpbmcsICAgJl9fcGFyYW1fc3RyaW5nXyMjbmFtZSwgcGVybSk7ICAgX19NT0RVTEVfUEFSTV9UWVBFKG5hbWUsICJzdHJpbmciKQorCisjZGVmaW5lIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgdHlwZSkgICBzdGF0aWMgaW5saW5lIHR5cGUgKl9fY2hlY2tfIyNuYW1lKHZvaWQpIHsgcmV0dXJuKHApOyB9CisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfYnl0ZShuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGNoYXIpCisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfc2hvcnQobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBzaG9ydCkKKworI2RlZmluZSBwYXJhbV9jaGVja191c2hvcnQobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCB1bnNpZ25lZCBzaG9ydCkKKworI2RlZmluZSBwYXJhbV9jaGVja19pbnQobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBpbnQpCisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfdWludChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBwYXJhbV9jaGVja19sb25nKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgbG9uZykKKworI2RlZmluZSBwYXJhbV9jaGVja191bG9uZyhuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIHVuc2lnbmVkIGxvbmcpCisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfY2hhcnAobmFtZSwgcCkgX19wYXJhbV9jaGVjayhuYW1lLCBwLCBjaGFyICopCisKKyNkZWZpbmUgcGFyYW1fY2hlY2tfYm9vbChuYW1lLCBwKSBfX3BhcmFtX2NoZWNrKG5hbWUsIHAsIGludCkKKworI2RlZmluZSBwYXJhbV9jaGVja19pbnZib29sKG5hbWUsIHApIF9fcGFyYW1fY2hlY2sobmFtZSwgcCwgaW50KQorCisjZGVmaW5lIG1vZHVsZV9wYXJhbV9hcnJheV9uYW1lZChuYW1lLCBhcnJheSwgdHlwZSwgbnVtcCwgcGVybSkgICBzdGF0aWMgc3RydWN0IGtwYXJhbV9hcnJheSBfX3BhcmFtX2Fycl8jI25hbWUgICA9IHsgQVJSQVlfU0laRShhcnJheSksIG51bXAsIHBhcmFtX3NldF8jI3R5cGUsIHBhcmFtX2dldF8jI3R5cGUsICBzaXplb2YoYXJyYXlbMF0pLCBhcnJheSB9OyAgIG1vZHVsZV9wYXJhbV9jYWxsKG5hbWUsIHBhcmFtX2FycmF5X3NldCwgcGFyYW1fYXJyYXlfZ2V0LCAgICZfX3BhcmFtX2Fycl8jI25hbWUsIHBlcm0pOyAgIF9fTU9EVUxFX1BBUk1fVFlQRShuYW1lLCAiYXJyYXkgb2YgIiAjdHlwZSkKKworI2RlZmluZSBtb2R1bGVfcGFyYW1fYXJyYXkobmFtZSwgdHlwZSwgbnVtcCwgcGVybSkgICBtb2R1bGVfcGFyYW1fYXJyYXlfbmFtZWQobmFtZSwgbmFtZSwgdHlwZSwgbnVtcCwgcGVybSkKKworc3RydWN0IG1vZHVsZTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW91bnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVlNDc2ZTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbW91bnQuaApAQCAtMCwwICsxLDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NT1VOVF9ICisjZGVmaW5lIF9MSU5VWF9NT1VOVF9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2Rvc19mcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZG9zX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWE0ZWIwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2Rvc19mcy5oCkBAIC0wLDAgKzEsMTgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NU0RPU19GU19ICisjZGVmaW5lIF9MSU5VWF9NU0RPU19GU19ICisKKyNpbmNsdWRlIDxsaW51eC9tYWdpYy5oPgorCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIFNFQ1RPUl9TSVpFIDUxMiAgCisjZGVmaW5lIFNFQ1RPUl9CSVRTIDkgIAorI2RlZmluZSBNU0RPU19EUEIgKE1TRE9TX0RQUykgIAorI2RlZmluZSBNU0RPU19EUEJfQklUUyA0ICAKKyNkZWZpbmUgTVNET1NfRFBTIChTRUNUT1JfU0laRSAvIHNpemVvZihzdHJ1Y3QgbXNkb3NfZGlyX2VudHJ5KSkKKyNkZWZpbmUgTVNET1NfRFBTX0JJVFMgNCAgCisjZGVmaW5lIENGX0xFX1codikgbGUxNl90b19jcHUodikKKyNkZWZpbmUgQ0ZfTEVfTCh2KSBsZTMyX3RvX2NwdSh2KQorI2RlZmluZSBDVF9MRV9XKHYpIGNwdV90b19sZTE2KHYpCisjZGVmaW5lIENUX0xFX0wodikgY3B1X3RvX2xlMzIodikKKworI2RlZmluZSBNU0RPU19ST09UX0lOTyAxICAKKyNkZWZpbmUgTVNET1NfRElSX0JJVFMgNSAgCisKKyNkZWZpbmUgRkFUX01BWF9ESVJfRU5UUklFUyAoNjU1MzYpCisjZGVmaW5lIEZBVF9NQVhfRElSX1NJWkUgKEZBVF9NQVhfRElSX0VOVFJJRVMgPDwgTVNET1NfRElSX0JJVFMpCisKKyNkZWZpbmUgQVRUUl9OT05FIDAgIAorI2RlZmluZSBBVFRSX1JPIDEgIAorI2RlZmluZSBBVFRSX0hJRERFTiAyICAKKyNkZWZpbmUgQVRUUl9TWVMgNCAgCisjZGVmaW5lIEFUVFJfVk9MVU1FIDggIAorI2RlZmluZSBBVFRSX0RJUiAxNiAgCisjZGVmaW5lIEFUVFJfQVJDSCAzMiAgCisKKyNkZWZpbmUgQVRUUl9VTlVTRUQgKEFUVFJfVk9MVU1FIHwgQVRUUl9BUkNIIHwgQVRUUl9TWVMgfCBBVFRSX0hJRERFTikKKworI2RlZmluZSBBVFRSX0VYVCAoQVRUUl9STyB8IEFUVFJfSElEREVOIHwgQVRUUl9TWVMgfCBBVFRSX1ZPTFVNRSkKKworI2RlZmluZSBDQVNFX0xPV0VSX0JBU0UgOCAgCisjZGVmaW5lIENBU0VfTE9XRVJfRVhUIDE2ICAKKworI2RlZmluZSBERUxFVEVEX0ZMQUcgMHhlNSAgCisjZGVmaW5lIElTX0ZSRUUobikgKCEqKG4pIHx8ICoobikgPT0gREVMRVRFRF9GTEFHKQorCisjZGVmaW5lIE1TRE9TX1ZBTElEX01PREUgKFNfSUZSRUcgfCBTX0lGRElSIHwgU19JUldYVSB8IFNfSVJXWEcgfCBTX0lSV1hPKQorCisjZGVmaW5lIE1TRE9TX01LTU9ERShhLCBtKSAobSAmIChhICYgQVRUUl9STyA/IFNfSVJVR098U19JWFVHTyA6IFNfSVJXWFVHTykpCisKKyNkZWZpbmUgTVNET1NfTkFNRSAxMSAgCisjZGVmaW5lIE1TRE9TX0xPTkdOQU1FIDI1NiAgCisjZGVmaW5lIE1TRE9TX1NMT1RTIDIxICAKKyNkZWZpbmUgTVNET1NfRE9UICIuICAgICAgICAgICIgIAorI2RlZmluZSBNU0RPU19ET1RET1QgIi4uICAgICAgICAgIiAgCisKKyNkZWZpbmUgRkFUX1ZBTElEX01FRElBKHgpICgoMHhGOCA8PSAoeCkgJiYgKHgpIDw9IDB4RkYpIHx8ICh4KSA9PSAweEYwKQorI2RlZmluZSBGQVRfRklSU1RfRU5UKHMsIHgpICgoTVNET1NfU0IocyktPmZhdF9iaXRzID09IDMyID8gMHgwRkZGRkYwMCA6ICAgTVNET1NfU0IocyktPmZhdF9iaXRzID09IDE2ID8gMHhGRjAwIDogMHhGMDApIHwgKHgpKQorCisjZGVmaW5lIEZBVF9TVEFSVF9FTlQgMgorCisjZGVmaW5lIE1BWF9GQVQxMiAweEZGNAorI2RlZmluZSBNQVhfRkFUMTYgMHhGRkY0CisjZGVmaW5lIE1BWF9GQVQzMiAweDBGRkZGRkY2CisjZGVmaW5lIE1BWF9GQVQocykgKE1TRE9TX1NCKHMpLT5mYXRfYml0cyA9PSAzMiA/IE1BWF9GQVQzMiA6ICAgTVNET1NfU0IocyktPmZhdF9iaXRzID09IDE2ID8gTUFYX0ZBVDE2IDogTUFYX0ZBVDEyKQorCisjZGVmaW5lIEJBRF9GQVQxMiAweEZGNworI2RlZmluZSBCQURfRkFUMTYgMHhGRkY3CisjZGVmaW5lIEJBRF9GQVQzMiAweDBGRkZGRkY3CisKKyNkZWZpbmUgRU9GX0ZBVDEyIDB4RkZGCisjZGVmaW5lIEVPRl9GQVQxNiAweEZGRkYKKyNkZWZpbmUgRU9GX0ZBVDMyIDB4MEZGRkZGRkYKKworI2RlZmluZSBGQVRfRU5UX0ZSRUUgKDApCisjZGVmaW5lIEZBVF9FTlRfQkFEIChCQURfRkFUMzIpCisjZGVmaW5lIEZBVF9FTlRfRU9GIChFT0ZfRkFUMzIpCisKKyNkZWZpbmUgRkFUX0ZTSU5GT19TSUcxIDB4NDE2MTUyNTIKKyNkZWZpbmUgRkFUX0ZTSU5GT19TSUcyIDB4NjE0MTcyNzIKKyNkZWZpbmUgSVNfRlNJTkZPKHgpIChsZTMyX3RvX2NwdSgoeCktPnNpZ25hdHVyZTEpID09IEZBVF9GU0lORk9fU0lHMSAgICYmIGxlMzJfdG9fY3B1KCh4KS0+c2lnbmF0dXJlMikgPT0gRkFUX0ZTSU5GT19TSUcyKQorCisjZGVmaW5lIFZGQVRfSU9DVExfUkVBRERJUl9CT1RIIF9JT1IoJ3InLCAxLCBzdHJ1Y3QgZGlyZW50IFsyXSkKKyNkZWZpbmUgVkZBVF9JT0NUTF9SRUFERElSX1NIT1JUIF9JT1IoJ3InLCAyLCBzdHJ1Y3QgZGlyZW50IFsyXSkKKworI2RlZmluZSBGQVRfSU9DVExfR0VUX0FUVFJJQlVURVMgX0lPUigncicsIDB4MTAsIF9fdTMyKQorI2RlZmluZSBGQVRfSU9DVExfU0VUX0FUVFJJQlVURVMgX0lPVygncicsIDB4MTEsIF9fdTMyKQorI2RlZmluZSBWRkFUX0lPQ1RMX0dFVF9WT0xVTUVfSUQgX0lPUigncicsIDB4MTIsIF9fdTMyKQorCisjZGVmaW5lIFZGQVRfU0ZOX0RJU1BMQVlfTE9XRVIgMHgwMDAxICAKKyNkZWZpbmUgVkZBVF9TRk5fRElTUExBWV9XSU45NSAweDAwMDIgIAorI2RlZmluZSBWRkFUX1NGTl9ESVNQTEFZX1dJTk5UIDB4MDAwNCAgCisjZGVmaW5lIFZGQVRfU0ZOX0NSRUFURV9XSU45NSAweDAxMDAgIAorI2RlZmluZSBWRkFUX1NGTl9DUkVBVEVfV0lOTlQgMHgwMjAwICAKKworc3RydWN0IGZhdF9ib290X3NlY3RvciB7CisgX191OCBpZ25vcmVkWzNdOworIF9fdTggc3lzdGVtX2lkWzhdOworIF9fdTggc2VjdG9yX3NpemVbMl07CisgX191OCBzZWNfcGVyX2NsdXM7CisgX19sZTE2IHJlc2VydmVkOworIF9fdTggZmF0czsKKyBfX3U4IGRpcl9lbnRyaWVzWzJdOworIF9fdTggc2VjdG9yc1syXTsKKyBfX3U4IG1lZGlhOworIF9fbGUxNiBmYXRfbGVuZ3RoOworIF9fbGUxNiBzZWNzX3RyYWNrOworIF9fbGUxNiBoZWFkczsKKyBfX2xlMzIgaGlkZGVuOworIF9fbGUzMiB0b3RhbF9zZWN0OworCisgX19sZTMyIGZhdDMyX2xlbmd0aDsKKyBfX2xlMTYgZmxhZ3M7CisgX191OCB2ZXJzaW9uWzJdOworIF9fbGUzMiByb290X2NsdXN0ZXI7CisgX19sZTE2IGluZm9fc2VjdG9yOworIF9fbGUxNiBiYWNrdXBfYm9vdDsKKyBfX2xlMTYgcmVzZXJ2ZWQyWzZdOworfTsKKworc3RydWN0IGZhdF9ib290X2ZzaW5mbyB7CisgX19sZTMyIHNpZ25hdHVyZTE7CisgX19sZTMyIHJlc2VydmVkMVsxMjBdOworIF9fbGUzMiBzaWduYXR1cmUyOworIF9fbGUzMiBmcmVlX2NsdXN0ZXJzOworIF9fbGUzMiBuZXh0X2NsdXN0ZXI7CisgX19sZTMyIHJlc2VydmVkMls0XTsKK307CisKK3N0cnVjdCBmYXRfYm9vdF9ic3ggeworIF9fdTggZHJpdmU7CisgX191OCByZXNlcnZlZDE7CisgX191OCBzaWduYXR1cmU7CisgX191OCB2b2xfaWRbNF07CisgX191OCB2b2xfbGFiZWxbMTFdOworIF9fdTggdHlwZVs4XTsKK307CisjZGVmaW5lIEZBVDE2X0JTWF9PRkZTRVQgMzYgIAorI2RlZmluZSBGQVQzMl9CU1hfT0ZGU0VUIDY0ICAKKworc3RydWN0IG1zZG9zX2Rpcl9lbnRyeSB7CisgX191OCBuYW1lW01TRE9TX05BTUVdOworIF9fdTggYXR0cjsKKyBfX3U4IGxjYXNlOworIF9fdTggY3RpbWVfY3M7CisgX19sZTE2IGN0aW1lOworIF9fbGUxNiBjZGF0ZTsKKyBfX2xlMTYgYWRhdGU7CisgX19sZTE2IHN0YXJ0aGk7CisgX19sZTE2IHRpbWUsZGF0ZSxzdGFydDsKKyBfX2xlMzIgc2l6ZTsKK307CisKK3N0cnVjdCBtc2Rvc19kaXJfc2xvdCB7CisgX191OCBpZDsKKyBfX3U4IG5hbWUwXzRbMTBdOworIF9fdTggYXR0cjsKKyBfX3U4IHJlc2VydmVkOworIF9fdTggYWxpYXNfY2hlY2tzdW07CisgX191OCBuYW1lNV8xMFsxMl07CisgX19sZTE2IHN0YXJ0OworIF9fdTggbmFtZTExXzEyWzRdOworfTsKKworc3RydWN0IGZhdF9zbG90X2luZm8geworIGxvZmZfdCBpX3BvczsKKyBsb2ZmX3Qgc2xvdF9vZmY7CisgaW50IG5yX3Nsb3RzOworIHN0cnVjdCBtc2Rvc19kaXJfZW50cnkgKmRlOworIHN0cnVjdCBidWZmZXJfaGVhZCAqYmg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc2cuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNTRmMWU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zZy5oCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX01TR19ICisjZGVmaW5lIF9MSU5VWF9NU0dfSAorCisjaW5jbHVkZSA8bGludXgvaXBjLmg+CisKKyNkZWZpbmUgTVNHX1NUQVQgMTEKKyNkZWZpbmUgTVNHX0lORk8gMTIKKworI2RlZmluZSBNU0dfTk9FUlJPUiAwMTAwMDAgIAorI2RlZmluZSBNU0dfRVhDRVBUIDAyMDAwMCAgCisKK3N0cnVjdCBtc3FpZF9kcyB7Cisgc3RydWN0IGlwY19wZXJtIG1zZ19wZXJtOworIHN0cnVjdCBtc2cgKm1zZ19maXJzdDsKKyBzdHJ1Y3QgbXNnICptc2dfbGFzdDsKKyBfX2tlcm5lbF90aW1lX3QgbXNnX3N0aW1lOworIF9fa2VybmVsX3RpbWVfdCBtc2dfcnRpbWU7CisgX19rZXJuZWxfdGltZV90IG1zZ19jdGltZTsKKyB1bnNpZ25lZCBsb25nIG1zZ19sY2J5dGVzOworIHVuc2lnbmVkIGxvbmcgbXNnX2xxYnl0ZXM7CisgdW5zaWduZWQgc2hvcnQgbXNnX2NieXRlczsKKyB1bnNpZ25lZCBzaG9ydCBtc2dfcW51bTsKKyB1bnNpZ25lZCBzaG9ydCBtc2dfcWJ5dGVzOworIF9fa2VybmVsX2lwY19waWRfdCBtc2dfbHNwaWQ7CisgX19rZXJuZWxfaXBjX3BpZF90IG1zZ19scnBpZDsKK307CisKKyNpbmNsdWRlIDxhc20vbXNnYnVmLmg+CisKK3N0cnVjdCBtc2didWYgeworIGxvbmcgbXR5cGU7CisgY2hhciBtdGV4dFsxXTsKK307CisKK3N0cnVjdCBtc2dpbmZvIHsKKyBpbnQgbXNncG9vbDsKKyBpbnQgbXNnbWFwOworIGludCBtc2dtYXg7CisgaW50IG1zZ21uYjsKKyBpbnQgbXNnbW5pOworIGludCBtc2dzc3o7CisgaW50IG1zZ3RxbDsKKyB1bnNpZ25lZCBzaG9ydCBtc2dzZWc7Cit9OworCisjZGVmaW5lIE1TR01OSSAxNiAgICAKKyNkZWZpbmUgTVNHTUFYIDgxOTIgICAgCisjZGVmaW5lIE1TR01OQiAxNjM4NCAgICAKKworI2RlZmluZSBNU0dQT09MIChNU0dNTkkqTVNHTU5CLzEwMjQpICAKKyNkZWZpbmUgTVNHVFFMIE1TR01OQiAgCisjZGVmaW5lIE1TR01BUCBNU0dNTkIgIAorI2RlZmluZSBNU0dTU1ogMTYgIAorI2RlZmluZSBfX01TR1NFRyAoKE1TR1BPT0wqMTAyNCkvIE1TR1NTWikgIAorI2RlZmluZSBNU0dTRUcgKF9fTVNHU0VHIDw9IDB4ZmZmZiA/IF9fTVNHU0VHIDogMHhmZmZmKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYWRzcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9hZHNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmYxMjcwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tc21fYWRzcC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NU01fQURTUF9ICisjZGVmaW5lIF9fTElOVVhfTVNNX0FEU1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjZGVmaW5lIEFEU1BfSU9DVExfTUFHSUMgJ3EnCisKK3N0cnVjdCBhZHNwX2NvbW1hbmRfdCB7CisgdWludDE2X3QgcXVldWU7CisgdWludDMyX3QgbGVuOworIHVpbnQ4X3QgKmRhdGE7Cit9OworCitzdHJ1Y3QgYWRzcF9ldmVudF90IHsKKyB1aW50MTZfdCB0eXBlOworIHVpbnQzMl90IHRpbWVvdXRfbXM7CisgdWludDE2X3QgbXNnX2lkOworIHVpbnQxNl90IGZsYWdzOworIHVpbnQzMl90IGxlbjsKKyB1aW50OF90ICpkYXRhOworfTsKKworc3RydWN0IGFkc3BfcG1lbV9pbmZvX3QgeworIGludCBmZDsKKyB2b2lkICp2YWRkcjsKK307CisKKyNkZWZpbmUgQURTUF9JT0NUTF9FTkFCTEUgICBfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDEsIHVuc2lnbmVkKQorCisjZGVmaW5lIEFEU1BfSU9DVExfRElTQUJMRSAgIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9ESVNBQkxFX0FDSyAgIF9JT1IoQURTUF9JT0NUTF9NQUdJQywgMywgdW5zaWduZWQpCisKKyNkZWZpbmUgQURTUF9JT0NUTF9XUklURV9DT01NQU5EICAgX0lPUihBRFNQX0lPQ1RMX01BR0lDLCA0LCBzdHJ1Y3QgYWRzcF9jb21tYW5kX3QgKikKKworI2RlZmluZSBBRFNQX0lPQ1RMX0dFVF9FVkVOVCAgIF9JT1dSKEFEU1BfSU9DVExfTUFHSUMsIDUsIHN0cnVjdCBhZHNwX2V2ZW50X2RhdGFfdCAqKQorCisjZGVmaW5lIEFEU1BfSU9DVExfRElTQUJMRV9FVkVOVF9SU1AgICBfSU9SKEFEU1BfSU9DVExfTUFHSUMsIDEwLCB1bnNpZ25lZCkKKworI2RlZmluZSBBRFNQX0lPQ1RMX1JFR0lTVEVSX1BNRU0gICBfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDEzLCBzdHJ1Y3QgYWRzcF9wbWVtX2luZm8gKikKKworI2RlZmluZSBBRFNQX0lPQ1RMX0FCT1JUX0VWRU5UX1JFQUQgICBfSU9XKEFEU1BfSU9DVExfTUFHSUMsIDE1LCB1bnNpZ25lZCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXNtX21kcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9tZHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDI1NmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L21zbV9tZHAuaApAQCAtMCwwICsxLDgxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NU01fTURQX0hfCisjZGVmaW5lIF9NU01fTURQX0hfCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE1TTUZCX0lPQ1RMX01BR0lDICdtJworI2RlZmluZSBNU01GQl9HUlBfRElTUCBfSU9XKE1TTUZCX0lPQ1RMX01BR0lDLCAxLCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIE1TTUZCX0JMSVQgX0lPVyhNU01GQl9JT0NUTF9NQUdJQywgMiwgdW5zaWduZWQgaW50KQorCitlbnVtIHsKKyBNRFBfUkdCXzU2NSwKKyBNRFBfWFJHQl84ODg4LAorIE1EUF9ZX0NCQ1JfSDJWMiwKKyBNRFBfQVJHQl84ODg4LAorIE1EUF9SR0JfODg4LAorIE1EUF9ZX0NSQ0JfSDJWMiwKKyBNRFBfWUNSWUNCX0gyVjEsCisgTURQX1lfQ1JDQl9IMlYxLAorIE1EUF9ZX0NCQ1JfSDJWMSwKKyBNRFBfUkdCQV84ODg4LAorIE1EUF9JTUdUWVBFX0xJTUlUCit9OworCitlbnVtIHsKKyBQTUVNX0lNRywKKyBGQl9JTUcsCit9OworCisjZGVmaW5lIE1EUF9ST1RfTk9QIDAKKyNkZWZpbmUgTURQX0ZMSVBfTFIgMHgxCisjZGVmaW5lIE1EUF9GTElQX1VEIDB4MgorI2RlZmluZSBNRFBfUk9UXzkwIDB4NAorI2RlZmluZSBNRFBfUk9UXzE4MCAoTURQX0ZMSVBfVUR8TURQX0ZMSVBfTFIpCisjZGVmaW5lIE1EUF9ST1RfMjcwIChNRFBfUk9UXzkwfE1EUF9GTElQX1VEfE1EUF9GTElQX0xSKQorI2RlZmluZSBNRFBfRElUSEVSIDB4OAorCisjZGVmaW5lIE1EUF9UUkFOU1BfTk9QIDB4ZmZmZmZmZmYKKyNkZWZpbmUgTURQX0FMUEhBX05PUCAweGZmCisKK3N0cnVjdCBtZHBfcmVjdCB7CisgdWludDMyX3QgeDsKKyB1aW50MzJfdCB5OworIHVpbnQzMl90IHc7CisgdWludDMyX3QgaDsKK307CisKK3N0cnVjdCBtZHBfaW1nIHsKKyB1aW50MzJfdCB3aWR0aDsKKyB1aW50MzJfdCBoZWlnaHQ7CisgdWludDMyX3QgZm9ybWF0OworIHVpbnQzMl90IG9mZnNldDsKKyBpbnQgbWVtb3J5X2lkOworfTsKKworc3RydWN0IG1kcF9ibGl0X3JlcSB7Cisgc3RydWN0IG1kcF9pbWcgc3JjOworIHN0cnVjdCBtZHBfaW1nIGRzdDsKKyBzdHJ1Y3QgbWRwX3JlY3Qgc3JjX3JlY3Q7Cisgc3RydWN0IG1kcF9yZWN0IGRzdF9yZWN0OworIHVpbnQzMl90IGFscGhhOworIHVpbnQzMl90IHRyYW5zcF9tYXNrOworIHVpbnQzMl90IGZsYWdzOworfTsKKworc3RydWN0IG1kcF9ibGl0X3JlcV9saXN0IHsKKyB1aW50MzJfdCBjb3VudDsKKyBzdHJ1Y3QgbWRwX2JsaXRfcmVxIHJlcVtdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXQ5dDAxMy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210OXQwMTMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMWRjNGIzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210OXQwMTMuaApAQCAtMCwwICsxLDExMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBDQU1FUkFfTVQ5VDAxM19ICisjZGVmaW5lIENBTUVSQV9NVDlUMDEzX0gKKyNpbmNsdWRlIDxsaW51eC9jZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGFzbS9zaXplcy5oPgorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDICdtJworCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1cgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAwLCB1bnNpZ25lZCkKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9SICAgX0lPUihNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMSwgdW5zaWduZWQpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQUZfVyAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDIsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NBTUlGX1BBRF9SRUdfUkVTRVQgICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDMpCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0FNSUZfUEFEX1JFR19SRVNFVF8yICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCA0KQorCisjZGVmaW5lIENBTUVSQV9DT05GSUdVUkVfR1BJT1MgICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDcpCisKKyNkZWZpbmUgQ0FNRVJBX1VOQ09ORklHVVJFX0dQSU9TICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCA4KQorCisjZGVmaW5lIENBTUVSQV9MRU5TX1BPV0VSX09OICAgX0lPKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCA5KQorCisjZGVmaW5lIENBTUVSQV9MRU5TX1BPV0VSX09GRiAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTApCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0FNSUZfQVBQU19SRVNFVCAgIF9JTyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTEpCisKKyNkZWZpbmUgQ0FNSU9fVkZFX01EQ19DTEsgMSAgCisjZGVmaW5lIENBTUlPX01EQ19DTEsgMiAgCisjZGVmaW5lIENBTUlPX1ZGRV9DTEsgMyAgCisKKyNkZWZpbmUgTVQ5VDAxM19JMkNfSU9DVExfQ0xLX0VOQUJMRSAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDEyLCB1bnNpZ25lZCkKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DTEtfRElTQUJMRSAgIF9JT1coTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDEzLCB1bnNpZ25lZCkKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9DTEtfU0VMRUNUICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTQsIHVuc2lnbmVkKQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0NMS19GUkVRX1BST0cgICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxNSwgdW5zaWduZWQpCisKKyNkZWZpbmUgQ0FNU0VOU09SX1JFR19JTklUIDA8PDAKKyNkZWZpbmUgQ0FNU0VOU09SX1JFR19VUERBVEVfUEVSSU9ESUMgMTw8MAorI2RlZmluZSBDQU1TRU5TT1JfVFlQRV9QUkVWSUVXIDA8PDEKKyNkZWZpbmUgQ0FNU0VOU09SX1RZUEVfU05BUFNIT1QgMTw8MQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1NFTlNPUl9TRVRUSU5HICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTYsIHVpbnQzMl90KQorCitzdHJ1Y3QgbXQ5dDAxM19yZWdfc3RydWN0Cit7CisgdWludDE2X3QgdnRfcGl4X2Nsa19kaXY7CisgdWludDE2X3QgdnRfc3lzX2Nsa19kaXY7CisgdWludDE2X3QgcHJlX3BsbF9jbGtfZGl2OworIHVpbnQxNl90IHBsbF9tdWx0aXBsaWVyOworIHVpbnQxNl90IG9wX3BpeF9jbGtfZGl2OworIHVpbnQxNl90IG9wX3N5c19jbGtfZGl2OworIHVpbnQxNl90IHNjYWxlX207CisgdWludDE2X3Qgcm93X3NwZWVkOworIHVpbnQxNl90IHhfYWRkcl9zdGFydDsKKyB1aW50MTZfdCB4X2FkZHJfZW5kOworIHVpbnQxNl90IHlfYWRkcl9zdGFydDsKKyB1aW50MTZfdCB5X2FkZHJfZW5kOworIHVpbnQxNl90IHJlYWRfbW9kZTsKKyB1aW50MTZfdCB4X291dHB1dF9zaXplIDsKKyB1aW50MTZfdCB5X291dHB1dF9zaXplOworIHVpbnQxNl90IGxpbmVfbGVuZ3RoX3BjazsKKyB1aW50MTZfdCBmcmFtZV9sZW5ndGhfbGluZXM7CisgdWludDE2X3QgY29hcnNlX2ludGVncmF0aW9uX3RpbWU7CisgdWludDE2X3QgZmluZV9pbnRlZ3JhdGlvbl90aW1lOworfTsKKworc3RydWN0IG10OXQwMTNfcmVnX3BhdCB7Cisgc3RydWN0IG10OXQwMTNfcmVnX3N0cnVjdCByZWdbMl07Cit9OworCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0dFVF9SRUdJU1RFUlMgICBfSU9SKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxNywgc3RydWN0IG10OXQwMTNfcmVnX3BhdCAqKQorCitzdHJ1Y3QgbXQ5dDAxM19leHBvc3VyZV9nYWluIHsKKyB1aW50MTZfdCBnYWluOworIHVpbnQxNl90IGxpbmU7Cit9OworCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0VYUE9TVVJFX0dBSU4gICBfSU9XKE1UOVQwMTNfSTJDX0lPQ1RMX01BR0lDLCAxOCwgc3RydWN0IGV4cG9zdXJlX2dhaW4gKikKKworI2RlZmluZSBNVDlUMDEzX0kyQ19JT0NUTF9NT1ZFX0ZPQ1VTICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMTksIHVpbnQzMl90KQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1NFVF9ERUZBVUxUX0ZPQ1VTICAgX0lPVyhNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMjAsIHVpbnQzMl90KQorCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX1BPV0VSX0RPV04gICBfSU8oTVQ5VDAxM19JMkNfSU9DVExfTUFHSUMsIDIxKQorCitzdHJ1Y3QgbXQ5dDAxM19pbml0IHsKKyBpbnQgcHJldmlldzsKKyB1aW50MTZfdCBjaGlwaWQ7Cit9OworCisjZGVmaW5lIE1UOVQwMTNfSTJDX0lPQ1RMX0lOSVQgICBfSU9XUihNVDlUMDEzX0kyQ19JT0NUTF9NQUdJQywgMjIsIHN0cnVjdCBtdDl0MDEzX2luaXQgKikKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvYmJtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2JibS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUzMTFiMjMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2JibS5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfQkJNX0gKKyNkZWZpbmUgX19MSU5VWF9NVERfQkJNX0gKKworI2RlZmluZSBOQU5EX01BWF9DSElQUyA4CisKK3N0cnVjdCBuYW5kX2JidF9kZXNjciB7CisgaW50IG9wdGlvbnM7CisgaW50IHBhZ2VzW05BTkRfTUFYX0NISVBTXTsKKyBpbnQgb2ZmczsKKyBpbnQgdmVyb2ZmczsKKyB1aW50OF90IHZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOworIGludCBsZW47CisgaW50IG1heGJsb2NrczsKKyBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZTsKKyB1aW50OF90ICpwYXR0ZXJuOworfTsKKworI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLIDB4MDAwMDAwMEYKKyNkZWZpbmUgTkFORF9CQlRfMUJJVCAweDAwMDAwMDAxCisjZGVmaW5lIE5BTkRfQkJUXzJCSVQgMHgwMDAwMDAwMgorI2RlZmluZSBOQU5EX0JCVF80QklUIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkFORF9CQlRfOEJJVCAweDAwMDAwMDA4CisKKyNkZWZpbmUgTkFORF9CQlRfTEFTVEJMT0NLIDB4MDAwMDAwMTAKKworI2RlZmluZSBOQU5EX0JCVF9BQlNQQUdFIDB4MDAwMDAwMjAKKworI2RlZmluZSBOQU5EX0JCVF9TRUFSQ0ggMHgwMDAwMDA0MAorCisjZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAgMHgwMDAwMDA4MAorCisjZGVmaW5lIE5BTkRfQkJUX1ZFUlNJT04gMHgwMDAwMDEwMAorCisjZGVmaW5lIE5BTkRfQkJUX0NSRUFURSAweDAwMDAwMjAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTkFMTFBBR0VTIDB4MDAwMDA0MDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FORU1QVFkgMHgwMDAwMDgwMAorCisjZGVmaW5lIE5BTkRfQkJUX1dSSVRFIDB4MDAwMDEwMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQVZFQ09OVEVOVCAweDAwMDAyMDAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTjJORFBBR0UgMHgwMDAwNDAwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5fTUFYQkxPQ0tTIDQKKworI2RlZmluZSBPTkVOQU5EX0JBREJMT0NLX1BPUyAwCisKK3N0cnVjdCBiYm1faW5mbyB7CisgaW50IGJidF9lcmFzZV9zaGlmdDsKKyBpbnQgYmFkYmxvY2twb3M7CisgaW50IG9wdGlvbnM7CisKKyB1aW50OF90ICpiYnQ7CisKKyBpbnQgKCppc2JhZF9iYnQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgYWxsb3diYnQpOworCisgc3RydWN0IG5hbmRfYmJ0X2Rlc2NyICpiYWRibG9ja19wYXR0ZXJuOworCisgdm9pZCAqcHJpdjsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9ibGt0cmFucy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9ibGt0cmFucy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjNDA3MjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2Jsa3RyYW5zLmgKQEAgLTAsMCArMSw2MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01URF9UUkFOU19IX18KKyNkZWZpbmUgX19NVERfVFJBTlNfSF9fCisKKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCitzdHJ1Y3QgaGRfZ2VvbWV0cnk7CitzdHJ1Y3QgbXRkX2luZm87CitzdHJ1Y3QgbXRkX2Jsa3RyYW5zX29wczsKK3N0cnVjdCBmaWxlOworc3RydWN0IGlub2RlOworCitzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiB7Cisgc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgbXRkX2luZm8gKm10ZDsKKyBzdHJ1Y3QgbXV0ZXggbG9jazsKKyBpbnQgZGV2bnVtOworIGludCBibGtzaXplOworIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyBpbnQgcmVhZG9ubHk7Cisgdm9pZCAqYmxrY29yZV9wcml2OworfTsKKworc3RydWN0IGJsa2NvcmVfcHJpdjsKKworc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgeworIGNoYXIgKm5hbWU7CisgaW50IG1ham9yOworIGludCBwYXJ0X2JpdHM7CisKKyBpbnQgKCpyZWFkc2VjdCkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwKKyB1bnNpZ25lZCBsb25nIGJsb2NrLCBjaGFyICpidWZmZXIpOworIGludCAoKndyaXRlc2VjdCkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldiwKKyB1bnNpZ25lZCBsb25nIGJsb2NrLCBjaGFyICpidWZmZXIpOworCisgaW50ICgqZ2V0Z2VvKShzdHJ1Y3QgbXRkX2Jsa3RyYW5zX2RldiAqZGV2LCBzdHJ1Y3QgaGRfZ2VvbWV0cnkgKmdlbyk7CisgaW50ICgqZmx1c2gpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOworCisgaW50ICgqb3Blbikoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisgaW50ICgqcmVsZWFzZSkoc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgKmRldik7CisKKyB2b2lkICgqYWRkX210ZCkoc3RydWN0IG10ZF9ibGt0cmFuc19vcHMgKnRyLCBzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7Cisgdm9pZCAoKnJlbW92ZV9kZXYpKHN0cnVjdCBtdGRfYmxrdHJhbnNfZGV2ICpkZXYpOworCisgc3RydWN0IGxpc3RfaGVhZCBkZXZzOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKworIHN0cnVjdCBtdGRfYmxrY29yZV9wcml2ICpibGtjb3JlX3ByaXY7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZjFiYTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaS5oCkBAIC0wLDAgKzEsMTg3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX0NGSV9IX18KKyNkZWZpbmUgX19NVERfQ0ZJX0hfXworCisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9mbGFzaGNoaXAuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvbWFwLmg+CisjaW5jbHVkZSA8bGludXgvbXRkL2NmaV9lbmRpYW4uaD4KKworI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc18xKGNmaSkgKDApCisKKyNkZWZpbmUgY2ZpX2ludGVybGVhdmVfaXNfMihjZmkpICgwKQorCisjZGVmaW5lIGNmaV9pbnRlcmxlYXZlX2lzXzQoY2ZpKSAoMCkKKworI2RlZmluZSBjZmlfaW50ZXJsZWF2ZV9pc184KGNmaSkgKDApCisKKyNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDggKDggLyA4KQorI2RlZmluZSBDRklfREVWSUNFVFlQRV9YMTYgKDE2IC8gOCkKKyNkZWZpbmUgQ0ZJX0RFVklDRVRZUEVfWDMyICgzMiAvIDgpCisjZGVmaW5lIENGSV9ERVZJQ0VUWVBFX1g2NCAoNjQgLyA4KQorCitzdHJ1Y3QgY2ZpX2V4dHF1ZXJ5IHsKKyB1aW50OF90IHByaVszXTsKKyB1aW50OF90IE1ham9yVmVyc2lvbjsKKyB1aW50OF90IE1pbm9yVmVyc2lvbjsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfcHJpX2ludGVsZXh0IHsKKyB1aW50OF90IHByaVszXTsKKyB1aW50OF90IE1ham9yVmVyc2lvbjsKKyB1aW50OF90IE1pbm9yVmVyc2lvbjsKKyB1aW50MzJfdCBGZWF0dXJlU3VwcG9ydDsKKyB1aW50OF90IFN1c3BlbmRDbWRTdXBwb3J0OworIHVpbnQxNl90IEJsa1N0YXR1c1JlZ01hc2s7CisgdWludDhfdCBWY2NPcHRpbWFsOworIHVpbnQ4X3QgVnBwT3B0aW1hbDsKKyB1aW50OF90IE51bVByb3RlY3Rpb25GaWVsZHM7CisgdWludDE2X3QgUHJvdFJlZ0FkZHI7CisgdWludDhfdCBGYWN0UHJvdFJlZ1NpemU7CisgdWludDhfdCBVc2VyUHJvdFJlZ1NpemU7CisgdWludDhfdCBleHRyYVswXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfaW50ZWxleHRfb3RwaW5mbyB7CisgdWludDMyX3QgUHJvdFJlZ0FkZHI7CisgdWludDE2X3QgRmFjdEdyb3VwczsKKyB1aW50OF90IEZhY3RQcm90UmVnU2l6ZTsKKyB1aW50MTZfdCBVc2VyR3JvdXBzOworIHVpbnQ4X3QgVXNlclByb3RSZWdTaXplOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9pbnRlbGV4dF9ibG9ja2luZm8geworIHVpbnQxNl90IE51bUlkZW50QmxvY2tzOworIHVpbnQxNl90IEJsb2NrU2l6ZTsKKyB1aW50MTZfdCBNaW5CbG9ja0VyYXNlQ3ljbGVzOworIHVpbnQ4X3QgQml0c1BlckNlbGw7CisgdWludDhfdCBCbG9ja0NhcDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfaW50ZWxleHRfcmVnaW9uaW5mbyB7CisgdWludDE2X3QgTnVtSWRlbnRQYXJ0aXRpb25zOworIHVpbnQ4X3QgTnVtT3BBbGxvd2VkOworIHVpbnQ4X3QgTnVtT3BBbGxvd2VkU2ltUHJvZ01vZGU7CisgdWludDhfdCBOdW1PcEFsbG93ZWRTaW1FcmFNb2RlOworIHVpbnQ4X3QgTnVtQmxvY2tUeXBlczsKKyBzdHJ1Y3QgY2ZpX2ludGVsZXh0X2Jsb2NraW5mbyBCbG9ja1R5cGVzWzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9pbnRlbGV4dF9wcm9ncmFtbWluZ19yZWdpb25pbmZvIHsKKyB1aW50OF90IFByb2dSZWdTaGlmdDsKKyB1aW50OF90IFJlc2VydmVkMTsKKyB1aW50OF90IENvbnRyb2xWYWxpZDsKKyB1aW50OF90IFJlc2VydmVkMjsKKyB1aW50OF90IENvbnRyb2xJbnZhbGlkOworIHVpbnQ4X3QgUmVzZXJ2ZWQzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IGNmaV9wcmlfYW1kc3RkIHsKKyB1aW50OF90IHByaVszXTsKKyB1aW50OF90IE1ham9yVmVyc2lvbjsKKyB1aW50OF90IE1pbm9yVmVyc2lvbjsKKyB1aW50OF90IFNpbGljb25SZXZpc2lvbjsKKyB1aW50OF90IEVyYXNlU3VzcGVuZDsKKyB1aW50OF90IEJsa1Byb3Q7CisgdWludDhfdCBUbXBCbGtVbnByb3RlY3Q7CisgdWludDhfdCBCbGtQcm90VW5wcm90OworIHVpbnQ4X3QgU2ltdWx0YW5lb3VzT3BzOworIHVpbnQ4X3QgQnVyc3RNb2RlOworIHVpbnQ4X3QgUGFnZU1vZGU7CisgdWludDhfdCBWcHBNaW47CisgdWludDhfdCBWcHBNYXg7CisgdWludDhfdCBUb3BCb3R0b207Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX3ByaV9hdG1lbCB7CisgdWludDhfdCBwcmlbM107CisgdWludDhfdCBNYWpvclZlcnNpb247CisgdWludDhfdCBNaW5vclZlcnNpb247CisgdWludDhfdCBGZWF0dXJlczsKKyB1aW50OF90IEJvdHRvbUJvb3Q7CisgdWludDhfdCBCdXJzdE1vZGU7CisgdWludDhfdCBQYWdlTW9kZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBjZmlfcHJpX3F1ZXJ5IHsKKyB1aW50OF90IE51bUZpZWxkczsKKyB1aW50MzJfdCBQcm90RmllbGRbMV07Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3QgY2ZpX2JyaV9xdWVyeSB7CisgdWludDhfdCBQYWdlTW9kZVJlYWRDYXA7CisgdWludDhfdCBOdW1GaWVsZHM7CisgdWludDMyX3QgQ29uZkZpZWxkWzFdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBQX0lEX05PTkUgMHgwMDAwCisjZGVmaW5lIFBfSURfSU5URUxfRVhUIDB4MDAwMQorI2RlZmluZSBQX0lEX0FNRF9TVEQgMHgwMDAyCisjZGVmaW5lIFBfSURfSU5URUxfU1REIDB4MDAwMworI2RlZmluZSBQX0lEX0FNRF9FWFQgMHgwMDA0CisjZGVmaW5lIFBfSURfV0lOQk9ORCAweDAwMDYKKyNkZWZpbmUgUF9JRF9TVF9BRFYgMHgwMDIwCisjZGVmaW5lIFBfSURfTUlUU1VCSVNISV9TVEQgMHgwMTAwCisjZGVmaW5lIFBfSURfTUlUU1VCSVNISV9FWFQgMHgwMTAxCisjZGVmaW5lIFBfSURfU1NUX1BBR0UgMHgwMTAyCisjZGVmaW5lIFBfSURfSU5URUxfUEVSRk9STUFOQ0UgMHgwMjAwCisjZGVmaW5lIFBfSURfSU5URUxfREFUQSAweDAyMTAKKyNkZWZpbmUgUF9JRF9SRVNFUlZFRCAweGZmZmYKKworI2RlZmluZSBDRklfTU9ERV9DRkkgMQorI2RlZmluZSBDRklfTU9ERV9KRURFQyAwCisKK3N0cnVjdCBjZmlfcHJpdmF0ZSB7CisgdWludDE2X3QgY21kc2V0OworIHZvaWQgKmNtZHNldF9wcml2OworIGludCBpbnRlcmxlYXZlOworIGludCBkZXZpY2VfdHlwZTsKKyBpbnQgY2ZpX21vZGU7CisgaW50IGFkZHJfdW5sb2NrMTsKKyBpbnQgYWRkcl91bmxvY2syOworIHN0cnVjdCBtdGRfaW5mbyAqKCpjbWRzZXRfc2V0dXApKHN0cnVjdCBtYXBfaW5mbyAqKTsKKyBzdHJ1Y3QgY2ZpX2lkZW50ICpjZmlxOworIGludCBtZnIsIGlkOworIGludCBudW1jaGlwczsKKyB1bnNpZ25lZCBsb25nIGNoaXBzaGlmdDsKKyBjb25zdCBjaGFyICppbV9uYW1lOworIHN0cnVjdCBmbGNoaXAgY2hpcHNbMF07Cit9OworCisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorI2VuZGlmCisjZGVmaW5lIENNRCh4KSBjZmlfYnVpbGRfY21kKCh4KSwgbWFwLCBjZmkpCisjaWYgQklUU19QRVJfTE9ORyA+PSA2NAorI2VuZGlmCisjZGVmaW5lIE1FUkdFU1RBVFVTKHgpIGNmaV9tZXJnZV9zdGF0dXMoKHgpLCBtYXAsIGNmaSkKKworc3RydWN0IGNmaV9maXh1cCB7CisgdWludDE2X3QgbWZyOworIHVpbnQxNl90IGlkOworIHZvaWQgKCpmaXh1cCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHZvaWQqIHBhcmFtKTsKKyB2b2lkKiBwYXJhbTsKK307CisKKyNkZWZpbmUgQ0ZJX01GUl9BTlkgMHhmZmZmCisjZGVmaW5lIENGSV9JRF9BTlkgMHhmZmZmCisKKyNkZWZpbmUgQ0ZJX01GUl9BTUQgMHgwMDAxCisjZGVmaW5lIENGSV9NRlJfQVRNRUwgMHgwMDFGCisjZGVmaW5lIENGSV9NRlJfU1QgMHgwMDIwICAKKwordHlwZWRlZiBpbnQgKCp2YXJzaXplX2Zyb2JfdCkoc3RydWN0IG1hcF9pbmZvICptYXAsIHN0cnVjdCBmbGNoaXAgKmNoaXAsCisgdW5zaWduZWQgbG9uZyBhZHIsIGludCBsZW4sIHZvaWQgKnRodW5rKTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaV9lbmRpYW4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY2ZpX2VuZGlhbi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1MjA5MWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NmaV9lbmRpYW4uaApAQCAtMCwwICsxLDQ1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaW5jbHVkZSA8YXNtL2J5dGVvcmRlci5oPgorCisjZGVmaW5lIENGSV9IT1NUX0VORElBTgorCisjaWZkZWYgQ0ZJX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgY3B1X3RvX2NmaTgoeCkgKHgpCisjZGVmaW5lIGNmaThfdG9fY3B1KHgpICh4KQorI2RlZmluZSBjcHVfdG9fY2ZpMTYoeCkgY3B1X3RvX2xlMTYoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTMyKHgpIGNwdV90b19sZTMyKHgpCisjZGVmaW5lIGNwdV90b19jZmk2NCh4KSBjcHVfdG9fbGU2NCh4KQorI2RlZmluZSBjZmkxNl90b19jcHUoeCkgbGUxNl90b19jcHUoeCkKKyNkZWZpbmUgY2ZpMzJfdG9fY3B1KHgpIGxlMzJfdG9fY3B1KHgpCisjZGVmaW5lIGNmaTY0X3RvX2NwdSh4KSBsZTY0X3RvX2NwdSh4KQorI2VsaWYgZGVmaW5lZCAoQ0ZJX0JJR19FTkRJQU4pCisjZGVmaW5lIGNwdV90b19jZmk4KHgpICh4KQorI2RlZmluZSBjZmk4X3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTE2KHgpIGNwdV90b19iZTE2KHgpCisjZGVmaW5lIGNwdV90b19jZmkzMih4KSBjcHVfdG9fYmUzMih4KQorI2RlZmluZSBjcHVfdG9fY2ZpNjQoeCkgY3B1X3RvX2JlNjQoeCkKKyNkZWZpbmUgY2ZpMTZfdG9fY3B1KHgpIGJlMTZfdG9fY3B1KHgpCisjZGVmaW5lIGNmaTMyX3RvX2NwdSh4KSBiZTMyX3RvX2NwdSh4KQorI2RlZmluZSBjZmk2NF90b19jcHUoeCkgYmU2NF90b19jcHUoeCkKKyNlbGlmIGRlZmluZWQgKENGSV9IT1NUX0VORElBTikKKyNkZWZpbmUgY3B1X3RvX2NmaTgoeCkgKHgpCisjZGVmaW5lIGNmaThfdG9fY3B1KHgpICh4KQorI2RlZmluZSBjcHVfdG9fY2ZpMTYoeCkgKHgpCisjZGVmaW5lIGNwdV90b19jZmkzMih4KSAoeCkKKyNkZWZpbmUgY3B1X3RvX2NmaTY0KHgpICh4KQorI2RlZmluZSBjZmkxNl90b19jcHUoeCkgKHgpCisjZGVmaW5lIGNmaTMyX3RvX2NwdSh4KSAoeCkKKyNkZWZpbmUgY2ZpNjRfdG9fY3B1KHgpICh4KQorI2Vsc2UKKyNlcnJvciBObyBDRkkgZW5kaWFubmVzcyBkZWZpbmVkCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvY29tcGF0bWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NvbXBhdG1hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0M2Y0NmEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL2NvbXBhdG1hYy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfQ09NUEFUTUFDX0hfXworI2RlZmluZSBfX0xJTlVYX01URF9DT01QQVRNQUNfSF9fCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9mbGFzaGNoaXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvZmxhc2hjaGlwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQ0MTA0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvZmxhc2hjaGlwLmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX01URF9GTEFTSENISVBfSF9fCisjZGVmaW5lIF9fTVREX0ZMQVNIQ0hJUF9IX18KKworI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisKK3R5cGVkZWYgZW51bSB7CisgRkxfUkVBRFksCisgRkxfU1RBVFVTLAorIEZMX0NGSV9RVUVSWSwKKyBGTF9KRURFQ19RVUVSWSwKKyBGTF9FUkFTSU5HLAorIEZMX0VSQVNFX1NVU1BFTkRJTkcsCisgRkxfRVJBU0VfU1VTUEVOREVELAorIEZMX1dSSVRJTkcsCisgRkxfV1JJVElOR19UT19CVUZGRVIsCisgRkxfT1RQX1dSSVRFLAorIEZMX1dSSVRFX1NVU1BFTkRJTkcsCisgRkxfV1JJVEVfU1VTUEVOREVELAorIEZMX1BNX1NVU1BFTkRFRCwKKyBGTF9TWU5DSU5HLAorIEZMX1VOTE9BRElORywKKyBGTF9MT0NLSU5HLAorIEZMX1VOTE9DS0lORywKKyBGTF9QT0lOVCwKKyBGTF9YSVBfV0hJTEVfRVJBU0lORywKKyBGTF9YSVBfV0hJTEVfV1JJVElORywKKyBGTF9VTktOT1dOCit9IGZsc3RhdGVfdDsKKworc3RydWN0IGZsY2hpcCB7CisgdW5zaWduZWQgbG9uZyBzdGFydDsKKworIGludCByZWZfcG9pbnRfY291bnRlcjsKKyBmbHN0YXRlX3Qgc3RhdGU7CisgZmxzdGF0ZV90IG9sZHN0YXRlOworCisgdW5zaWduZWQgaW50IHdyaXRlX3N1c3BlbmRlZDoxOworIHVuc2lnbmVkIGludCBlcmFzZV9zdXNwZW5kZWQ6MTsKKyB1bnNpZ25lZCBsb25nIGluX3Byb2dyZXNzX2Jsb2NrX2FkZHI7CisKKyBzcGlubG9ja190ICptdXRleDsKKyBzcGlubG9ja190IF9zcGlubG9jazsKKyB3YWl0X3F1ZXVlX2hlYWRfdCB3cTsKKyBpbnQgd29yZF93cml0ZV90aW1lOworIGludCBidWZmZXJfd3JpdGVfdGltZTsKKyBpbnQgZXJhc2VfdGltZTsKKworIHZvaWQgKnByaXY7Cit9OworCitzdHJ1Y3QgZmxjaGlwX3NoYXJlZCB7Cisgc3BpbmxvY2tfdCBsb2NrOworIHN0cnVjdCBmbGNoaXAgKndyaXRpbmc7Cisgc3RydWN0IGZsY2hpcCAqZXJhc2luZzsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9tYXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODcxMjRiYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbWFwLmgKQEAgLTAsMCArMSwxMDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9NVERfTUFQX0hfXworI2RlZmluZSBfX0xJTlVYX01URF9NQVBfSF9fCisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKworI2luY2x1ZGUgPGxpbnV4L210ZC9jb21wYXRtYWMuaD4KKworI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL2lvLmg+CisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18xKG1hcCkgKDApCisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18yKG1hcCkgKDApCisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc180KG1hcCkgKDApCisKKyNkZWZpbmUgbWFwX2NhbGNfd29yZHMobWFwKSAoKG1hcF9iYW5rd2lkdGgobWFwKSArIChzaXplb2YodW5zaWduZWQgbG9uZyktMSkpLyBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc184KG1hcCkgKDApCisKKyNkZWZpbmUgbWFwX2Jhbmt3aWR0aF9pc18xNihtYXApICgwKQorCisjZGVmaW5lIG1hcF9iYW5rd2lkdGhfaXNfMzIobWFwKSAoMCkKKworI2lmbmRlZiBtYXBfYmFua3dpZHRoCisjZXJyb3IgIk5vIGJ1cyB3aWR0aCBzdXBwb3J0ZWQuIFdoYXQncyB0aGUgcG9pbnQ/IgorI2VuZGlmCisKKyNkZWZpbmUgTUFYX01BUF9MT05HUyAoICgoTUFYX01BUF9CQU5LV0lEVEgqOCkgKyBCSVRTX1BFUl9MT05HIC0gMSkgLyBCSVRTX1BFUl9MT05HICkKKworc3RydWN0IG1hcF9pbmZvIHsKKyBjaGFyICpuYW1lOworIHVuc2lnbmVkIGxvbmcgc2l6ZTsKKyB1bnNpZ25lZCBsb25nIHBoeXM7CisjZGVmaW5lIE5PX1hJUCAoLTFVTCkKKworIHZvaWQgX19pb21lbSAqdmlydDsKKyB2b2lkICpjYWNoZWQ7CisKKyBpbnQgYmFua3dpZHRoOworCisgdm9pZCAoKmludmFsX2NhY2hlKShzdHJ1Y3QgbWFwX2luZm8gKiwgdW5zaWduZWQgbG9uZywgc3NpemVfdCk7CisKKyB2b2lkICgqc2V0X3ZwcCkoc3RydWN0IG1hcF9pbmZvICosIGludCk7CisKKyB1bnNpZ25lZCBsb25nIG1hcF9wcml2XzE7CisgdW5zaWduZWQgbG9uZyBtYXBfcHJpdl8yOworIHZvaWQgKmZsZHJ2X3ByaXY7Cisgc3RydWN0IG10ZF9jaGlwX2RyaXZlciAqZmxkcnY7Cit9OworCitzdHJ1Y3QgbXRkX2NoaXBfZHJpdmVyIHsKKyBzdHJ1Y3QgbXRkX2luZm8gKigqcHJvYmUpKHN0cnVjdCBtYXBfaW5mbyAqbWFwKTsKKyB2b2lkICgqZGVzdHJveSkoc3RydWN0IG10ZF9pbmZvICopOworIHN0cnVjdCBtb2R1bGUgKm1vZHVsZTsKKyBjaGFyICpuYW1lOworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKK307CisKK3N0cnVjdCBtdGRfaW5mbyAqZG9fbWFwX3Byb2JlKGNvbnN0IGNoYXIgKm5hbWUsIHN0cnVjdCBtYXBfaW5mbyAqbWFwKTsKKworI2RlZmluZSBFTkFCTEVfVlBQKG1hcCkgZG8geyBpZihtYXAtPnNldF92cHApIG1hcC0+c2V0X3ZwcChtYXAsIDEpOyB9IHdoaWxlKDApCisjZGVmaW5lIERJU0FCTEVfVlBQKG1hcCkgZG8geyBpZihtYXAtPnNldF92cHApIG1hcC0+c2V0X3ZwcChtYXAsIDApOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgSU5WQUxJREFURV9DQUNIRURfUkFOR0UobWFwLCBmcm9tLCBzaXplKSAgIGRvIHsgaWYobWFwLT5pbnZhbF9jYWNoZSkgbWFwLT5pbnZhbF9jYWNoZShtYXAsIGZyb20sIHNpemUpOyB9IHdoaWxlKDApCisKKyNkZWZpbmUgbWFwX3dvcmRfYW5kZXF1YWwobSwgYSwgYiwgeikgbWFwX3dvcmRfZXF1YWwobSwgeiwgbWFwX3dvcmRfYW5kKG0sIGEsIGIpKQorI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKyNlbmRpZgorI2lmZGVmIF9fTElUVExFX0VORElBTgorI2Vsc2UKKyNlbmRpZgorI2lmIEJJVFNfUEVSX0xPTkcgPCA2NAorI2RlZmluZSBNQVBfRkZfTElNSVQgNAorI2Vsc2UKKyNkZWZpbmUgTUFQX0ZGX0xJTUlUIDgKKyNlbmRpZgorI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKyNlbmRpZgorI2lmIEJJVFNfUEVSX0xPTkcgPj0gNjQKKyNlbmRpZgorI2RlZmluZSBtYXBfcmVhZChtYXAsIG9mcykgaW5saW5lX21hcF9yZWFkKG1hcCwgb2ZzKQorI2RlZmluZSBtYXBfY29weV9mcm9tKG1hcCwgdG8sIGZyb20sIGxlbikgaW5saW5lX21hcF9jb3B5X2Zyb20obWFwLCB0bywgZnJvbSwgbGVuKQorI2RlZmluZSBtYXBfd3JpdGUobWFwLCBkYXR1bSwgb2ZzKSBpbmxpbmVfbWFwX3dyaXRlKG1hcCwgZGF0dW0sIG9mcykKKyNkZWZpbmUgbWFwX2NvcHlfdG8obWFwLCB0bywgZnJvbSwgbGVuKSBpbmxpbmVfbWFwX2NvcHlfdG8obWFwLCB0bywgZnJvbSwgbGVuKQorI2RlZmluZSBzaW1wbGVfbWFwX2luaXQobWFwKSBCVUdfT04oIW1hcF9iYW5rd2lkdGhfc3VwcG9ydGVkKChtYXApLT5iYW5rd2lkdGgpKQorI2RlZmluZSBtYXBfaXNfbGluZWFyKG1hcCkgKHsgKHZvaWQpKG1hcCk7IDE7IH0pCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbXRkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL210ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwMDgxM2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL210ZC5oCkBAIC0wLDAgKzEsMTUzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX01URF9IX18KKyNkZWZpbmUgX19NVERfTVREX0hfXworCisjZXJyb3IgVGhpcyBpcyBhIGtlcm5lbCBoZWFkZXIuIFBlcmhhcHMgaW5jbHVkZSBtdGQtdXNlci5oIGluc3RlYWQ/CisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+CisKKyNpbmNsdWRlIDxsaW51eC9tdGQvY29tcGF0bWFjLmg+CisjaW5jbHVkZSA8bXRkL210ZC1hYmkuaD4KKworI2RlZmluZSBNVERfQ0hBUl9NQUpPUiA5MAorI2RlZmluZSBNVERfQkxPQ0tfTUFKT1IgMzEKKyNkZWZpbmUgTUFYX01URF9ERVZJQ0VTIDE2CisKKyNkZWZpbmUgTVREX0VSQVNFX1BFTkRJTkcgMHgwMQorI2RlZmluZSBNVERfRVJBU0lORyAweDAyCisjZGVmaW5lIE1URF9FUkFTRV9TVVNQRU5EIDB4MDQKKyNkZWZpbmUgTVREX0VSQVNFX0RPTkUgMHgwOAorI2RlZmluZSBNVERfRVJBU0VfRkFJTEVEIDB4MTAKKworc3RydWN0IGVyYXNlX2luZm8geworIHN0cnVjdCBtdGRfaW5mbyAqbXRkOworIHVfaW50MzJfdCBhZGRyOworIHVfaW50MzJfdCBsZW47CisgdV9pbnQzMl90IGZhaWxfYWRkcjsKKyB1X2xvbmcgdGltZTsKKyB1X2xvbmcgcmV0cmllczsKKyB1X2ludCBkZXY7CisgdV9pbnQgY2VsbDsKKyB2b2lkICgqY2FsbGJhY2spIChzdHJ1Y3QgZXJhc2VfaW5mbyAqc2VsZik7CisgdV9sb25nIHByaXY7CisgdV9jaGFyIHN0YXRlOworIHN0cnVjdCBlcmFzZV9pbmZvICpuZXh0OworfTsKKworc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyB7CisgdV9pbnQzMl90IG9mZnNldDsKKyB1X2ludDMyX3QgZXJhc2VzaXplOworIHVfaW50MzJfdCBudW1ibG9ja3M7Cit9OworCit0eXBlZGVmIGVudW0geworIE1URF9PT0JfUExBQ0UsCisgTVREX09PQl9BVVRPLAorIE1URF9PT0JfUkFXLAorfSBtdGRfb29iX21vZGVfdDsKKworc3RydWN0IG10ZF9vb2Jfb3BzIHsKKyBtdGRfb29iX21vZGVfdCBtb2RlOworIHNpemVfdCBsZW47Cisgc2l6ZV90IHJldGxlbjsKKyBzaXplX3Qgb29ibGVuOworIHVpbnQzMl90IG9vYm9mZnM7CisgdWludDhfdCAqZGF0YnVmOworIHVpbnQ4X3QgKm9vYmJ1ZjsKK307CisKK3N0cnVjdCBtdGRfaW5mbyB7CisgdV9jaGFyIHR5cGU7CisgdV9pbnQzMl90IGZsYWdzOworIHVfaW50MzJfdCBzaXplOworCisgdV9pbnQzMl90IGVyYXNlc2l6ZTsKKworIHVfaW50MzJfdCB3cml0ZXNpemU7CisKKyB1X2ludDMyX3Qgb29ic2l6ZTsKKyB1X2ludDMyX3QgZWNjdHlwZTsKKyB1X2ludDMyX3QgZWNjc2l6ZTsKKworI2RlZmluZSBNVERfUFJPR1JFR0lPTl9DVFJMTU9ERV9WQUxJRChtdGQpIChtdGQpLT5vb2JzaXplCisjZGVmaW5lIE1URF9QUk9HUkVHSU9OX0NUUkxNT0RFX0lOVkFMSUQobXRkKSAobXRkKS0+ZWNjdHlwZQorCisgY2hhciAqbmFtZTsKKyBpbnQgaW5kZXg7CisKKyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKKworIGludCBudW1lcmFzZXJlZ2lvbnM7Cisgc3RydWN0IG10ZF9lcmFzZV9yZWdpb25faW5mbyAqZXJhc2VyZWdpb25zOworCisgdV9pbnQzMl90IGJhbmtfc2l6ZTsKKworIGludCAoKmVyYXNlKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBlcmFzZV9pbmZvICppbnN0cik7CisKKyBpbnQgKCpwb2ludCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIHVfY2hhciAqKm10ZGJ1Zik7CisKKyB2b2lkICgqdW5wb2ludCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1X2NoYXIgKiBhZGRyLCBsb2ZmX3QgZnJvbSwgc2l6ZV90IGxlbik7CisKKyBpbnQgKCpyZWFkKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworIGludCAoKndyaXRlKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCB0bywgc2l6ZV90IGxlbiwgc2l6ZV90ICpyZXRsZW4sIGNvbnN0IHVfY2hhciAqYnVmKTsKKworIGludCAoKnJlYWRfb29iKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLAorIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKKyBpbnQgKCp3cml0ZV9vb2IpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IHRvLAorIHN0cnVjdCBtdGRfb29iX29wcyAqb3BzKTsKKworIGludCAoKmdldF9mYWN0X3Byb3RfaW5mbykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qgb3RwX2luZm8gKmJ1Ziwgc2l6ZV90IGxlbik7CisgaW50ICgqcmVhZF9mYWN0X3Byb3RfcmVnKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworIGludCAoKmdldF91c2VyX3Byb3RfaW5mbykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3Qgb3RwX2luZm8gKmJ1Ziwgc2l6ZV90IGxlbik7CisgaW50ICgqcmVhZF91c2VyX3Byb3RfcmVnKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuLCBzaXplX3QgKnJldGxlbiwgdV9jaGFyICpidWYpOworIGludCAoKndyaXRlX3VzZXJfcHJvdF9yZWcpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IGZyb20sIHNpemVfdCBsZW4sIHNpemVfdCAqcmV0bGVuLCB1X2NoYXIgKmJ1Zik7CisgaW50ICgqbG9ja191c2VyX3Byb3RfcmVnKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBmcm9tLCBzaXplX3QgbGVuKTsKKworIGludCAoKndyaXRldikgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCBzdHJ1Y3Qga3ZlYyAqdmVjcywgdW5zaWduZWQgbG9uZyBjb3VudCwgbG9mZl90IHRvLCBzaXplX3QgKnJldGxlbik7CisKKyB2b2lkICgqc3luYykgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKworIGludCAoKmxvY2spIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcywgc2l6ZV90IGxlbik7CisgaW50ICgqdW5sb2NrKSAoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMsIHNpemVfdCBsZW4pOworCisgaW50ICgqc3VzcGVuZCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyB2b2lkICgqcmVzdW1lKSAoc3RydWN0IG10ZF9pbmZvICptdGQpOworCisgaW50ICgqYmxvY2tfaXNiYWQpIChzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgbG9mZl90IG9mcyk7CisgaW50ICgqYmxvY2tfbWFya2JhZCkgKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzKTsKKworIHN0cnVjdCBub3RpZmllcl9ibG9jayByZWJvb3Rfbm90aWZpZXI7CisKKyBzdHJ1Y3QgbXRkX2VjY19zdGF0cyBlY2Nfc3RhdHM7CisKKyB2b2lkICpwcml2OworCisgc3RydWN0IG1vZHVsZSAqb3duZXI7CisgaW50IHVzZWNvdW50OworfTsKKworc3RydWN0IG10ZF9ub3RpZmllciB7Cisgdm9pZCAoKmFkZCkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHZvaWQgKCpyZW1vdmUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cit9OworCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDAgKDApICAKKyNkZWZpbmUgTVREX0RFQlVHX0xFVkVMMSAoMSkgIAorI2RlZmluZSBNVERfREVCVUdfTEVWRUwyICgyKSAgCisjZGVmaW5lIE1URF9ERUJVR19MRVZFTDMgKDMpICAKKyNkZWZpbmUgREVCVUcobiwgYXJncy4uLikgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uYW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzZlOWZiNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZC5oCkBAIC0wLDAgKzEsMzE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTVREX05BTkRfSAorI2RlZmluZSBfX0xJTlVYX01URF9OQU5EX0gKKworI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKworc3RydWN0IG10ZF9pbmZvOworCisjZGVmaW5lIE5BTkRfTUFYX0NISVBTIDgKKworI2RlZmluZSBOQU5EX01BWF9PT0JTSVpFIDY0CisjZGVmaW5lIE5BTkRfTUFYX1BBR0VTSVpFIDIwNDgKKworI2RlZmluZSBOQU5EX05DRSAweDAxCisKKyNkZWZpbmUgTkFORF9DTEUgMHgwMgorCisjZGVmaW5lIE5BTkRfQUxFIDB4MDQKKworI2RlZmluZSBOQU5EX0NUUkxfQ0xFIChOQU5EX05DRSB8IE5BTkRfQ0xFKQorI2RlZmluZSBOQU5EX0NUUkxfQUxFIChOQU5EX05DRSB8IE5BTkRfQUxFKQorI2RlZmluZSBOQU5EX0NUUkxfQ0hBTkdFIDB4ODAKKworI2RlZmluZSBOQU5EX0NNRF9SRUFEMCAwCisjZGVmaW5lIE5BTkRfQ01EX1JFQUQxIDEKKyNkZWZpbmUgTkFORF9DTURfUk5ET1VUIDUKKyNkZWZpbmUgTkFORF9DTURfUEFHRVBST0cgMHgxMAorI2RlZmluZSBOQU5EX0NNRF9SRUFET09CIDB4NTAKKyNkZWZpbmUgTkFORF9DTURfRVJBU0UxIDB4NjAKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTIDB4NzAKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJIDB4NzEKKyNkZWZpbmUgTkFORF9DTURfU0VRSU4gMHg4MAorI2RlZmluZSBOQU5EX0NNRF9STkRJTiAweDg1CisjZGVmaW5lIE5BTkRfQ01EX1JFQURJRCAweDkwCisjZGVmaW5lIE5BTkRfQ01EX0VSQVNFMiAweGQwCisjZGVmaW5lIE5BTkRfQ01EX1JFU0VUIDB4ZmYKKworI2RlZmluZSBOQU5EX0NNRF9SRUFEU1RBUlQgMHgzMAorI2RlZmluZSBOQU5EX0NNRF9STkRPVVRTVEFSVCAweEUwCisjZGVmaW5lIE5BTkRfQ01EX0NBQ0hFRFBST0cgMHgxNQorCisjZGVmaW5lIE5BTkRfQ01EX0RFUExFVEUxIDB4MTAwCisjZGVmaW5lIE5BTkRfQ01EX0RFUExFVEUyIDB4MzgKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX01VTFRJIDB4NzEKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SIDB4NzIKKworI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IwIDB4NzMKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0VSUk9SMSAweDc0CisjZGVmaW5lIE5BTkRfQ01EX1NUQVRVU19FUlJPUjIgMHg3NQorI2RlZmluZSBOQU5EX0NNRF9TVEFUVVNfRVJST1IzIDB4NzYKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX1JFU0VUIDB4N2YKKyNkZWZpbmUgTkFORF9DTURfU1RBVFVTX0NMRUFSIDB4ZmYKKworI2RlZmluZSBOQU5EX0NNRF9OT05FIC0xCisKKyNkZWZpbmUgTkFORF9TVEFUVVNfRkFJTCAweDAxCisjZGVmaW5lIE5BTkRfU1RBVFVTX0ZBSUxfTjEgMHgwMgorI2RlZmluZSBOQU5EX1NUQVRVU19UUlVFX1JFQURZIDB4MjAKKyNkZWZpbmUgTkFORF9TVEFUVVNfUkVBRFkgMHg0MAorI2RlZmluZSBOQU5EX1NUQVRVU19XUCAweDgwCisKK3R5cGVkZWYgZW51bSB7CisgTkFORF9FQ0NfTk9ORSwKKyBOQU5EX0VDQ19TT0ZULAorIE5BTkRfRUNDX0hXLAorIE5BTkRfRUNDX0hXX1NZTkRST01FLAorfSBuYW5kX2VjY19tb2Rlc190OworCisjZGVmaW5lIE5BTkRfRUNDX1JFQUQgMAorCisjZGVmaW5lIE5BTkRfRUNDX1dSSVRFIDEKKworI2RlZmluZSBOQU5EX0VDQ19SRUFEU1lOIDIKKworI2RlZmluZSBOQU5EX0dFVF9ERVZJQ0UgMHg4MAorCisjZGVmaW5lIE5BTkRfTk9fQVVUT0lOQ1IgMHgwMDAwMDAwMQorCisjZGVmaW5lIE5BTkRfQlVTV0lEVEhfMTYgMHgwMDAwMDAwMgorCisjZGVmaW5lIE5BTkRfTk9fUEFERElORyAweDAwMDAwMDA0CisKKyNkZWZpbmUgTkFORF9DQUNIRVBSRyAweDAwMDAwMDA4CisKKyNkZWZpbmUgTkFORF9DT1BZQkFDSyAweDAwMDAwMDEwCisKKyNkZWZpbmUgTkFORF9JU19BTkQgMHgwMDAwMDAyMAorCisjZGVmaW5lIE5BTkRfNFBBR0VfQVJSQVkgMHgwMDAwMDA0MAorCisjZGVmaW5lIEJCVF9BVVRPX1JFRlJFU0ggMHgwMDAwMDA4MAorCisjZGVmaW5lIE5BTkRfTk9fUkVBRFJEWSAweDAwMDAwMTAwCisKKyNkZWZpbmUgTkFORF9TQU1TVU5HX0xQX09QVElPTlMgICAoTkFORF9OT19QQURESU5HIHwgTkFORF9DQUNIRVBSRyB8IE5BTkRfQ09QWUJBQ0spCisKKyNkZWZpbmUgTkFORF9DQU5BVVRPSU5DUihjaGlwKSAoIShjaGlwLT5vcHRpb25zICYgTkFORF9OT19BVVRPSU5DUikpCisjZGVmaW5lIE5BTkRfTVVTVF9QQUQoY2hpcCkgKCEoY2hpcC0+b3B0aW9ucyAmIE5BTkRfTk9fUEFERElORykpCisjZGVmaW5lIE5BTkRfSEFTX0NBQ0hFUFJPRyhjaGlwKSAoKGNoaXAtPm9wdGlvbnMgJiBOQU5EX0NBQ0hFUFJHKSkKKyNkZWZpbmUgTkFORF9IQVNfQ09QWUJBQ0soY2hpcCkgKChjaGlwLT5vcHRpb25zICYgTkFORF9DT1BZQkFDSykpCisKKyNkZWZpbmUgTkFORF9DSElQT1BUSU9OU19NU0sgKDB4MDAwMGZmZmYgJiB+TkFORF9OT19BVVRPSU5DUikKKworI2RlZmluZSBOQU5EX1VTRV9GTEFTSF9CQlQgMHgwMDAxMDAwMAorCisjZGVmaW5lIE5BTkRfU0tJUF9CQlRTQ0FOIDB4MDAwMjAwMDAKKworI2RlZmluZSBOQU5EX0NPTlRST0xMRVJfQUxMT0MgMHg4MDAwMDAwMAorCit0eXBlZGVmIGVudW0geworIEZMX1JFQURZLAorIEZMX1JFQURJTkcsCisgRkxfV1JJVElORywKKyBGTF9FUkFTSU5HLAorIEZMX1NZTkNJTkcsCisgRkxfQ0FDSEVEUFJHLAorIEZMX1BNX1NVU1BFTkRFRCwKK30gbmFuZF9zdGF0ZV90OworCitzdHJ1Y3QgbmFuZF9jaGlwOworCitzdHJ1Y3QgbmFuZF9od19jb250cm9sIHsKKyBzcGlubG9ja190IGxvY2s7Cisgc3RydWN0IG5hbmRfY2hpcCAqYWN0aXZlOworIHdhaXRfcXVldWVfaGVhZF90IHdxOworfTsKKworc3RydWN0IG5hbmRfZWNjX2N0cmwgeworIG5hbmRfZWNjX21vZGVzX3QgbW9kZTsKKyBpbnQgc3RlcHM7CisgaW50IHNpemU7CisgaW50IGJ5dGVzOworIGludCB0b3RhbDsKKyBpbnQgcHJlcGFkOworIGludCBwb3N0cGFkOworIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqbGF5b3V0OworIHZvaWQgKCpod2N0bCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBtb2RlKTsKKyBpbnQgKCpjYWxjdWxhdGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorIGNvbnN0IHVpbnQ4X3QgKmRhdCwKKyB1aW50OF90ICplY2NfY29kZSk7CisgaW50ICgqY29ycmVjdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHVpbnQ4X3QgKmRhdCwKKyB1aW50OF90ICpyZWFkX2VjYywKKyB1aW50OF90ICpjYWxjX2VjYyk7CisgaW50ICgqcmVhZF9wYWdlKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwKKyBzdHJ1Y3QgbmFuZF9jaGlwICpjaGlwLAorIHVpbnQ4X3QgKmJ1Zik7Cisgdm9pZCAoKndyaXRlX3BhZ2UpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisgY29uc3QgdWludDhfdCAqYnVmKTsKKyBpbnQgKCpyZWFkX29vYikoc3RydWN0IG10ZF9pbmZvICptdGQsCisgc3RydWN0IG5hbmRfY2hpcCAqY2hpcCwKKyBpbnQgcGFnZSwKKyBpbnQgc25kY21kKTsKKyBpbnQgKCp3cml0ZV9vb2IpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLAorIHN0cnVjdCBuYW5kX2NoaXAgKmNoaXAsCisgaW50IHBhZ2UpOworfTsKKworc3RydWN0IG5hbmRfYnVmZmVycyB7CisgdWludDhfdCBlY2NjYWxjW05BTkRfTUFYX09PQlNJWkVdOworIHVpbnQ4X3QgZWNjY29kZVtOQU5EX01BWF9PT0JTSVpFXTsKKyB1aW50OF90IG9vYndidWZbTkFORF9NQVhfT09CU0laRV07CisgdWludDhfdCBkYXRhYnVmW05BTkRfTUFYX1BBR0VTSVpFXTsKKyB1aW50OF90IG9vYnJidWZbTkFORF9NQVhfT09CU0laRV07Cit9OworCitzdHJ1Y3QgbmFuZF9jaGlwIHsKKyB2b2lkIF9faW9tZW0gKklPX0FERFJfUjsKKyB2b2lkIF9faW9tZW0gKklPX0FERFJfVzsKKworIHVpbnQ4X3QgKCpyZWFkX2J5dGUpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyB1MTYgKCpyZWFkX3dvcmQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkKTsKKyB2b2lkICgqd3JpdGVfYnVmKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgY29uc3QgdWludDhfdCAqYnVmLCBpbnQgbGVuKTsKKyB2b2lkICgqcmVhZF9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCB1aW50OF90ICpidWYsIGludCBsZW4pOworIGludCAoKnZlcmlmeV9idWYpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBjb25zdCB1aW50OF90ICpidWYsIGludCBsZW4pOworIHZvaWQgKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKKyBpbnQgKCpibG9ja19iYWQpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBsb2ZmX3Qgb2ZzLCBpbnQgZ2V0Y2hpcCk7CisgaW50ICgqYmxvY2tfbWFya2JhZCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGxvZmZfdCBvZnMpOworIHZvaWQgKCpjbWRfY3RybCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBkYXQsCisgdW5zaWduZWQgaW50IGN0cmwpOworIGludCAoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHZvaWQgKCpjbWRmdW5jKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgdW5zaWduZWQgY29tbWFuZCwgaW50IGNvbHVtbiwgaW50IHBhZ2VfYWRkcik7CisgaW50ICgqd2FpdGZ1bmMpKHN0cnVjdCBtdGRfaW5mbyAqbXRkLCBzdHJ1Y3QgbmFuZF9jaGlwICp0aGlzKTsKKyB2b2lkICgqZXJhc2VfY21kKShzdHJ1Y3QgbXRkX2luZm8gKm10ZCwgaW50IHBhZ2UpOworIGludCAoKnNjYW5fYmJ0KShzdHJ1Y3QgbXRkX2luZm8gKm10ZCk7CisgaW50ICgqZXJyc3RhdCkoc3RydWN0IG10ZF9pbmZvICptdGQsIHN0cnVjdCBuYW5kX2NoaXAgKnRoaXMsIGludCBzdGF0ZSwgaW50IHN0YXR1cywgaW50IHBhZ2UpOworCisgaW50IGNoaXBfZGVsYXk7CisgdW5zaWduZWQgaW50IG9wdGlvbnM7CisKKyBpbnQgcGFnZV9zaGlmdDsKKyBpbnQgcGh5c19lcmFzZV9zaGlmdDsKKyBpbnQgYmJ0X2VyYXNlX3NoaWZ0OworIGludCBjaGlwX3NoaWZ0OworIGludCBudW1jaGlwczsKKyB1bnNpZ25lZCBsb25nIGNoaXBzaXplOworIGludCBwYWdlbWFzazsKKyBpbnQgcGFnZWJ1ZjsKKyBpbnQgYmFkYmxvY2twb3M7CisKKyBuYW5kX3N0YXRlX3Qgc3RhdGU7CisKKyB1aW50OF90ICpvb2JfcG9pOworIHN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgKmNvbnRyb2xsZXI7Cisgc3RydWN0IG5hbmRfZWNjbGF5b3V0ICplY2NsYXlvdXQ7CisKKyBzdHJ1Y3QgbmFuZF9lY2NfY3RybCBlY2M7Cisgc3RydWN0IG5hbmRfYnVmZmVycyBidWZmZXJzOworIHN0cnVjdCBuYW5kX2h3X2NvbnRyb2wgaHdjb250cm9sOworCisgc3RydWN0IG10ZF9vb2Jfb3BzIG9wczsKKworIHVpbnQ4X3QgKmJidDsKKyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJidF90ZDsKKyBzdHJ1Y3QgbmFuZF9iYnRfZGVzY3IgKmJidF9tZDsKKworIHN0cnVjdCBuYW5kX2JidF9kZXNjciAqYmFkYmxvY2tfcGF0dGVybjsKKworIHZvaWQgKnByaXY7Cit9OworCisjZGVmaW5lIE5BTkRfTUZSX1RPU0hJQkEgMHg5OAorI2RlZmluZSBOQU5EX01GUl9TQU1TVU5HIDB4ZWMKKyNkZWZpbmUgTkFORF9NRlJfRlVKSVRTVSAweDA0CisjZGVmaW5lIE5BTkRfTUZSX05BVElPTkFMIDB4OGYKKyNkZWZpbmUgTkFORF9NRlJfUkVORVNBUyAweDA3CisjZGVmaW5lIE5BTkRfTUZSX1NUTUlDUk8gMHgyMAorI2RlZmluZSBOQU5EX01GUl9IWU5JWCAweGFkCisKK3N0cnVjdCBuYW5kX2ZsYXNoX2RldiB7CisgY2hhciAqbmFtZTsKKyBpbnQgaWQ7CisgdW5zaWduZWQgbG9uZyBwYWdlc2l6ZTsKKyB1bnNpZ25lZCBsb25nIGNoaXBzaXplOworIHVuc2lnbmVkIGxvbmcgZXJhc2VzaXplOworIHVuc2lnbmVkIGxvbmcgb3B0aW9uczsKK307CisKK3N0cnVjdCBuYW5kX21hbnVmYWN0dXJlcnMgeworIGludCBpZDsKKyBjaGFyICogbmFtZTsKK307CisKK3N0cnVjdCBuYW5kX2JidF9kZXNjciB7CisgaW50IG9wdGlvbnM7CisgaW50IHBhZ2VzW05BTkRfTUFYX0NISVBTXTsKKyBpbnQgb2ZmczsKKyBpbnQgdmVyb2ZmczsKKyB1aW50OF90IHZlcnNpb25bTkFORF9NQVhfQ0hJUFNdOworIGludCBsZW47CisgaW50IG1heGJsb2NrczsKKyBpbnQgcmVzZXJ2ZWRfYmxvY2tfY29kZTsKKyB1aW50OF90ICpwYXR0ZXJuOworfTsKKworI2RlZmluZSBOQU5EX0JCVF9OUkJJVFNfTVNLIDB4MDAwMDAwMEYKKyNkZWZpbmUgTkFORF9CQlRfMUJJVCAweDAwMDAwMDAxCisjZGVmaW5lIE5BTkRfQkJUXzJCSVQgMHgwMDAwMDAwMgorI2RlZmluZSBOQU5EX0JCVF80QklUIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkFORF9CQlRfOEJJVCAweDAwMDAwMDA4CisKKyNkZWZpbmUgTkFORF9CQlRfTEFTVEJMT0NLIDB4MDAwMDAwMTAKKworI2RlZmluZSBOQU5EX0JCVF9BQlNQQUdFIDB4MDAwMDAwMjAKKworI2RlZmluZSBOQU5EX0JCVF9TRUFSQ0ggMHgwMDAwMDA0MAorCisjZGVmaW5lIE5BTkRfQkJUX1BFUkNISVAgMHgwMDAwMDA4MAorCisjZGVmaW5lIE5BTkRfQkJUX1ZFUlNJT04gMHgwMDAwMDEwMAorCisjZGVmaW5lIE5BTkRfQkJUX0NSRUFURSAweDAwMDAwMjAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTkFMTFBBR0VTIDB4MDAwMDA0MDAKKworI2RlZmluZSBOQU5EX0JCVF9TQ0FORU1QVFkgMHgwMDAwMDgwMAorCisjZGVmaW5lIE5BTkRfQkJUX1dSSVRFIDB4MDAwMDEwMDAKKworI2RlZmluZSBOQU5EX0JCVF9TQVZFQ09OVEVOVCAweDAwMDAyMDAwCisKKyNkZWZpbmUgTkFORF9CQlRfU0NBTjJORFBBR0UgMHgwMDAwNDAwMAorCisjZGVmaW5lIE5BTkRfQkJUX1NDQU5fTUFYQkxPQ0tTIDQKKworI2RlZmluZSBOQU5EX1NNQUxMX0JBREJMT0NLX1BPUyA1CisjZGVmaW5lIE5BTkRfTEFSR0VfQkFEQkxPQ0tfUE9TIDAKKworc3RydWN0IHBsYXRmb3JtX25hbmRfY2hpcCB7CisgaW50IG5yX2NoaXBzOworIGludCBjaGlwX29mZnNldDsKKyBpbnQgbnJfcGFydGl0aW9uczsKKyBzdHJ1Y3QgbXRkX3BhcnRpdGlvbiAqcGFydGl0aW9uczsKKyBzdHJ1Y3QgbmFuZF9lY2NsYXlvdXQgKmVjY2xheW91dDsKKyBpbnQgY2hpcF9kZWxheTsKKyB1bnNpZ25lZCBpbnQgb3B0aW9uczsKKyB2b2lkICpwcml2OworfTsKKworc3RydWN0IHBsYXRmb3JtX25hbmRfY3RybCB7Cisgdm9pZCAoKmh3Y29udHJvbCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjbWQpOworIGludCAoKmRldl9yZWFkeSkoc3RydWN0IG10ZF9pbmZvICptdGQpOworIHZvaWQgKCpzZWxlY3RfY2hpcCkoc3RydWN0IG10ZF9pbmZvICptdGQsIGludCBjaGlwKTsKKyB2b2lkICpwcml2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmRfZWNjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRkL25hbmRfZWNjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4MTdmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmFuZF9lY2MuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX05BTkRfRUNDX0hfXworI2RlZmluZSBfX01URF9OQU5EX0VDQ19IX18KKworc3RydWN0IG10ZF9pbmZvOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmZ0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9uZnRsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGE3MzIwZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvbmZ0bC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfTkZUTF9IX18KKyNkZWZpbmUgX19NVERfTkZUTF9IX18KKworI2luY2x1ZGUgPGxpbnV4L210ZC9tdGQuaD4KKyNpbmNsdWRlIDxsaW51eC9tdGQvYmxrdHJhbnMuaD4KKworI2luY2x1ZGUgPG10ZC9uZnRsLXVzZXIuaD4KKworI2RlZmluZSBCTE9DS19OSUwgMHhmZmZmICAKKyNkZWZpbmUgQkxPQ0tfRlJFRSAweGZmZmUgIAorI2RlZmluZSBCTE9DS19OT1RFWFBMT1JFRCAweGZmZmQgIAorI2RlZmluZSBCTE9DS19SRVNFUlZFRCAweGZmZmMgIAorCitzdHJ1Y3QgTkZUTHJlY29yZCB7Cisgc3RydWN0IG10ZF9ibGt0cmFuc19kZXYgbWJkOworIF9fdTE2IE1lZGlhVW5pdCwgU3BhcmVNZWRpYVVuaXQ7CisgX191MzIgRXJhc2VTaXplOworIHN0cnVjdCBORlRMTWVkaWFIZWFkZXIgTWVkaWFIZHI7CisgaW50IHVzZWNvdW50OworIHVuc2lnbmVkIGNoYXIgaGVhZHM7CisgdW5zaWduZWQgY2hhciBzZWN0b3JzOworIHVuc2lnbmVkIHNob3J0IGN5bGluZGVyczsKKyBfX3UxNiBudW12dW5pdHM7CisgX191MTYgbGFzdEVVTjsKKyBfX3UxNiBudW1mcmVlRVVOczsKKyBfX3UxNiBMYXN0RnJlZUVVTjsKKyBpbnQgaGVhZCxzZWN0LGN5bDsKKyBfX3UxNiAqRVVOdGFibGU7CisgX191MTYgKlJlcGxVbml0VGFibGU7CisgdW5zaWduZWQgaW50IG5iX2Jsb2NrczsKKyB1bnNpZ25lZCBpbnQgbmJfYm9vdF9ibG9ja3M7Cisgc3RydWN0IGVyYXNlX2luZm8gaW5zdHI7Cisgc3RydWN0IG5hbmRfZWNjbGF5b3V0IG9vYmluZm87Cit9OworCisjaWZuZGVmIE5GVExfTUFKT1IKKyNkZWZpbmUgTkZUTF9NQUpPUiA5MworI2VuZGlmCisKKyNkZWZpbmUgTUFYX05GVExTIDE2CisjZGVmaW5lIE1BWF9TRUNUT1JTX1BFUl9VTklUIDY0CisjZGVmaW5lIE5GVExfUEFSVE5fQklUUyA0CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9vbmVuYW5kX3JlZ3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTM5Yzc4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvb25lbmFuZF9yZWdzLmgKQEAgLTAsMCArMSwxNDMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19PTkVOQU5EX1JFR19ICisjZGVmaW5lIF9fT05FTkFORF9SRUdfSAorCisjZGVmaW5lIE9ORU5BTkRfTUVNT1JZX01BUCh4KSAoKHgpIDw8IDEpCisKKyNkZWZpbmUgT05FTkFORF9CT09UUkFNIE9ORU5BTkRfTUVNT1JZX01BUCgweDAwMDApCisjZGVmaW5lIE9ORU5BTkRfREFUQVJBTSBPTkVOQU5EX01FTU9SWV9NQVAoMHgwMjAwKQorI2RlZmluZSBPTkVOQU5EX1NQQVJFUkFNIE9ORU5BTkRfTUVNT1JZX01BUCgweDgwMTApCisKKyNkZWZpbmUgT05FTkFORF9SRUdfTUFOVUZBQ1RVUkVSX0lEIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDApCisjZGVmaW5lIE9ORU5BTkRfUkVHX0RFVklDRV9JRCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDAxKQorI2RlZmluZSBPTkVOQU5EX1JFR19WRVJTSU9OX0lEIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDIpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0RBVEFfQlVGRkVSX1NJWkUgT05FTkFORF9NRU1PUllfTUFQKDB4RjAwMykKKyNkZWZpbmUgT05FTkFORF9SRUdfQk9PVF9CVUZGRVJfU0laRSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDA0KQorI2RlZmluZSBPTkVOQU5EX1JFR19OVU1fQlVGRkVSUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMDA1KQorI2RlZmluZSBPTkVOQU5EX1JFR19URUNITk9MT0dZIE9ORU5BTkRfTUVNT1JZX01BUCgweEYwMDYpCisKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzEgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMCkKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzIgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMSkKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzMgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMikKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzQgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwMykKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzUgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwNCkKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzYgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwNSkKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzcgT05FTkFORF9NRU1PUllfTUFQKDB4RjEwNikKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQUREUkVTUzggT05FTkFORF9NRU1PUllfTUFQKDB4RjEwNykKKworI2RlZmluZSBPTkVOQU5EX1JFR19TVEFSVF9CVUZGRVIgT05FTkFORF9NRU1PUllfTUFQKDB4RjIwMCkKKyNkZWZpbmUgT05FTkFORF9SRUdfQ09NTUFORCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjIwKQorI2RlZmluZSBPTkVOQU5EX1JFR19TWVNfQ0ZHMSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjIxKQorI2RlZmluZSBPTkVOQU5EX1JFR19TWVNfQ0ZHMiBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjIyKQorI2RlZmluZSBPTkVOQU5EX1JFR19DVFJMX1NUQVRVUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjQwKQorI2RlZmluZSBPTkVOQU5EX1JFR19JTlRFUlJVUFQgT05FTkFORF9NRU1PUllfTUFQKDB4RjI0MSkKKyNkZWZpbmUgT05FTkFORF9SRUdfU1RBUlRfQkxPQ0tfQUREUkVTUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjRDKQorI2RlZmluZSBPTkVOQU5EX1JFR19FTkRfQkxPQ0tfQUREUkVTUyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGMjREKQorI2RlZmluZSBPTkVOQU5EX1JFR19XUF9TVEFUVVMgT05FTkFORF9NRU1PUllfTUFQKDB4RjI0RSkKKworI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfU1RBVFVTIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDApCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19NMCBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjAxKQorI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfUzAgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwMikKKyNkZWZpbmUgT05FTkFORF9SRUdfRUNDX00xIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDMpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19TMSBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA0KQorI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfTTIgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwNSkKKyNkZWZpbmUgT05FTkFORF9SRUdfRUNDX1MyIE9ORU5BTkRfTUVNT1JZX01BUCgweEZGMDYpCisjZGVmaW5lIE9ORU5BTkRfUkVHX0VDQ19NMyBPTkVOQU5EX01FTU9SWV9NQVAoMHhGRjA3KQorI2RlZmluZSBPTkVOQU5EX1JFR19FQ0NfUzMgT05FTkFORF9NRU1PUllfTUFQKDB4RkYwOCkKKworI2RlZmluZSBPTkVOQU5EX0RFVklDRV9ERU5TSVRZX1NISUZUICg0KQorI2RlZmluZSBPTkVOQU5EX0RFVklDRV9JU19ERFAgKDEgPDwgMykKKyNkZWZpbmUgT05FTkFORF9ERVZJQ0VfSVNfREVNVVggKDEgPDwgMikKKyNkZWZpbmUgT05FTkFORF9ERVZJQ0VfVkNDX01BU0sgKDB4MykKKworI2RlZmluZSBPTkVOQU5EX0RFVklDRV9ERU5TSVRZXzUxMk1iICgweDAwMikKKworI2RlZmluZSBPTkVOQU5EX1ZFUlNJT05fUFJPQ0VTU19TSElGVCAoOCkKKworI2RlZmluZSBPTkVOQU5EX0REUF9TSElGVCAoMTUpCisKKyNkZWZpbmUgT05FTkFORF9GUEFfTUFTSyAoMHgzZikKKyNkZWZpbmUgT05FTkFORF9GUEFfU0hJRlQgKDIpCisjZGVmaW5lIE9ORU5BTkRfRlNBX01BU0sgKDB4MDMpCisKKyNkZWZpbmUgT05FTkFORF9CU0FfTUFTSyAoMHgwMykKKyNkZWZpbmUgT05FTkFORF9CU0FfU0hJRlQgKDgpCisjZGVmaW5lIE9ORU5BTkRfQlNBX0JPT1RSQU0gKDAgPDwgMikKKyNkZWZpbmUgT05FTkFORF9CU0FfREFUQVJBTTAgKDIgPDwgMikKKyNkZWZpbmUgT05FTkFORF9CU0FfREFUQVJBTTEgKDMgPDwgMikKKyNkZWZpbmUgT05FTkFORF9CU0NfTUFTSyAoMHgwMykKKworI2RlZmluZSBPTkVOQU5EX0NNRF9SRUFEICgweDAwKQorI2RlZmluZSBPTkVOQU5EX0NNRF9SRUFET09CICgweDEzKQorI2RlZmluZSBPTkVOQU5EX0NNRF9QUk9HICgweDgwKQorI2RlZmluZSBPTkVOQU5EX0NNRF9QUk9HT09CICgweDFBKQorI2RlZmluZSBPTkVOQU5EX0NNRF9VTkxPQ0sgKDB4MjMpCisjZGVmaW5lIE9ORU5BTkRfQ01EX0xPQ0sgKDB4MkEpCisjZGVmaW5lIE9ORU5BTkRfQ01EX0xPQ0tfVElHSFQgKDB4MkMpCisjZGVmaW5lIE9ORU5BTkRfQ01EX0VSQVNFICgweDk0KQorI2RlZmluZSBPTkVOQU5EX0NNRF9SRVNFVCAoMHhGMCkKKyNkZWZpbmUgT05FTkFORF9DTURfT1RQX0FDQ0VTUyAoMHg2NSkKKyNkZWZpbmUgT05FTkFORF9DTURfUkVBRElEICgweDkwKQorCisjZGVmaW5lIE9ORU5BTkRfQ01EX0JVRkZFUlJBTSAoMHgxOTc4KQorCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfU1lOQ19SRUFEICgxIDw8IDE1KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF83ICg3IDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF82ICg2IDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF81ICg1IDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF80ICg0IDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF8zICgzIDw8IDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JSTF8xMCAoMiA8PCAxMikKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CUkxfOSAoMSA8PCAxMikKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CUkxfOCAoMCA8PCAxMikKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CUkxfU0hJRlQgKDEyKQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMXzMyICg0IDw8IDkpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfMTYgKDMgPDwgOSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF84ICgyIDw8IDkpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfQkxfNCAoMSA8PCA5KQorI2RlZmluZSBPTkVOQU5EX1NZU19DRkcxX0JMX0NPTlQgKDAgPDwgOSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9CTF9TSElGVCAoOSkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9OT19FQ0MgKDEgPDwgOCkKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9SRFkgKDEgPDwgNykKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JTlQgKDEgPDwgNikKKyNkZWZpbmUgT05FTkFORF9TWVNfQ0ZHMV9JT0JFICgxIDw8IDUpCisjZGVmaW5lIE9ORU5BTkRfU1lTX0NGRzFfUkRZX0NPTkYgKDEgPDwgNCkKKworI2RlZmluZSBPTkVOQU5EX0NUUkxfT05HTyAoMSA8PCAxNSkKKyNkZWZpbmUgT05FTkFORF9DVFJMX0xPQ0sgKDEgPDwgMTQpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9MT0FEICgxIDw8IDEzKQorI2RlZmluZSBPTkVOQU5EX0NUUkxfUFJPR1JBTSAoMSA8PCAxMikKKyNkZWZpbmUgT05FTkFORF9DVFJMX0VSQVNFICgxIDw8IDExKQorI2RlZmluZSBPTkVOQU5EX0NUUkxfRVJST1IgKDEgPDwgMTApCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9SU1RCICgxIDw8IDcpCisjZGVmaW5lIE9ORU5BTkRfQ1RSTF9PVFBfTCAoMSA8PCA2KQorI2RlZmluZSBPTkVOQU5EX0NUUkxfT1RQX0JMICgxIDw8IDUpCisKKyNkZWZpbmUgT05FTkFORF9JTlRfTUFTVEVSICgxIDw8IDE1KQorI2RlZmluZSBPTkVOQU5EX0lOVF9SRUFEICgxIDw8IDcpCisjZGVmaW5lIE9ORU5BTkRfSU5UX1dSSVRFICgxIDw8IDYpCisjZGVmaW5lIE9ORU5BTkRfSU5UX0VSQVNFICgxIDw8IDUpCisjZGVmaW5lIE9ORU5BTkRfSU5UX1JFU0VUICgxIDw8IDQpCisjZGVmaW5lIE9ORU5BTkRfSU5UX0NMRUFSICgwIDw8IDApCisKKyNkZWZpbmUgT05FTkFORF9XUF9VUyAoMSA8PCAyKQorI2RlZmluZSBPTkVOQU5EX1dQX0xTICgxIDw8IDEpCisjZGVmaW5lIE9ORU5BTkRfV1BfTFRTICgxIDw8IDApCisKKyNkZWZpbmUgT05FTkFORF9FQ0NfMUJJVCAoMSA8PCAwKQorI2RlZmluZSBPTkVOQU5EX0VDQ18yQklUICgxIDw8IDEpCisjZGVmaW5lIE9ORU5BTkRfRUNDXzJCSVRfQUxMICgweEFBQUEpCisKKyNkZWZpbmUgT05FTkFORF9PVFBfTE9DS19PRkZTRVQgKDE0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvcGFydGl0aW9ucy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L210ZC9wYXJ0aXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWViMTVlMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGQvcGFydGl0aW9ucy5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTVREX1BBUlRJVElPTlNfSAorI2RlZmluZSBNVERfUEFSVElUSU9OU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgbXRkX3BhcnRpdGlvbiB7CisgY2hhciAqbmFtZTsKKyB1X2ludDMyX3Qgc2l6ZTsKKyB1X2ludDMyX3Qgb2Zmc2V0OworIHVfaW50MzJfdCBtYXNrX2ZsYWdzOworIHN0cnVjdCBuYW5kX2VjY2xheW91dCAqZWNjbGF5b3V0OworIHN0cnVjdCBtdGRfaW5mbyAqKm10ZHA7Cit9OworCisjZGVmaW5lIE1URFBBUlRfT0ZTX05YVEJMSyAoLTIpCisjZGVmaW5lIE1URFBBUlRfT0ZTX0FQUEVORCAoLTEpCisjZGVmaW5lIE1URFBBUlRfU0laX0ZVTEwgKDApCisKK3N0cnVjdCBtdGRfcGFydF9wYXJzZXIgeworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgbW9kdWxlICpvd25lcjsKKyBjb25zdCBjaGFyICpuYW1lOworIGludCAoKnBhcnNlX2ZuKShzdHJ1Y3QgbXRkX2luZm8gKiwgc3RydWN0IG10ZF9wYXJ0aXRpb24gKiosIHVuc2lnbmVkIGxvbmcpOworfTsKKworI2RlZmluZSBwdXRfcGFydGl0aW9uX3BhcnNlcihwKSBkbyB7IG1vZHVsZV9wdXQoKHApLT5vd25lcik7IH0gd2hpbGUoMCkKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdGlvLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YTZlMmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXRpby5oCkBAIC0wLDAgKzEsMjU5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9NVElPX0gKKyNkZWZpbmUgX0xJTlVYX01USU9fSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorI2luY2x1ZGUgPGxpbnV4L3FpYzExNy5oPgorCitzdHJ1Y3QgbXRvcCB7Cisgc2hvcnQgbXRfb3A7CisgaW50IG10X2NvdW50OworfTsKKworI2RlZmluZSBNVFJFU0VUIDAgIAorI2RlZmluZSBNVEZTRiAxICAKKyNkZWZpbmUgTVRCU0YgMiAgCisjZGVmaW5lIE1URlNSIDMgIAorI2RlZmluZSBNVEJTUiA0ICAKKyNkZWZpbmUgTVRXRU9GIDUgIAorI2RlZmluZSBNVFJFVyA2ICAKKyNkZWZpbmUgTVRPRkZMIDcgIAorI2RlZmluZSBNVE5PUCA4ICAKKyNkZWZpbmUgTVRSRVRFTiA5ICAKKyNkZWZpbmUgTVRCU0ZNIDEwICAKKyNkZWZpbmUgTVRGU0ZNIDExICAKKyNkZWZpbmUgTVRFT00gMTIgIAorI2RlZmluZSBNVEVSQVNFIDEzICAKKworI2RlZmluZSBNVFJBUzEgMTQgIAorI2RlZmluZSBNVFJBUzIgMTUgIAorI2RlZmluZSBNVFJBUzMgMTYgIAorCisjZGVmaW5lIE1UU0VUQkxLIDIwICAKKyNkZWZpbmUgTVRTRVRERU5TSVRZIDIxICAKKyNkZWZpbmUgTVRTRUVLIDIyICAKKyNkZWZpbmUgTVRURUxMIDIzICAKKyNkZWZpbmUgTVRTRVREUlZCVUZGRVIgMjQgIAorCisjZGVmaW5lIE1URlNTIDI1ICAKKyNkZWZpbmUgTVRCU1MgMjYgIAorI2RlZmluZSBNVFdTTSAyNyAgCisKKyNkZWZpbmUgTVRMT0NLIDI4ICAKKyNkZWZpbmUgTVRVTkxPQ0sgMjkgIAorI2RlZmluZSBNVExPQUQgMzAgIAorI2RlZmluZSBNVFVOTE9BRCAzMSAgCisjZGVmaW5lIE1UQ09NUFJFU1NJT04gMzIgCisjZGVmaW5lIE1UU0VUUEFSVCAzMyAgCisjZGVmaW5lIE1UTUtQQVJUIDM0ICAKKworc3RydWN0IG10Z2V0IHsKKyBsb25nIG10X3R5cGU7CisgbG9uZyBtdF9yZXNpZDsKKworIGxvbmcgbXRfZHNyZWc7CisgbG9uZyBtdF9nc3RhdDsKKyBsb25nIG10X2VycmVnOworCisgX19rZXJuZWxfZGFkZHJfdCBtdF9maWxlbm87CisgX19rZXJuZWxfZGFkZHJfdCBtdF9ibGtubzsKK307CisKKyNkZWZpbmUgTVRfSVNVTktOT1dOIDB4MDEKKyNkZWZpbmUgTVRfSVNRSUMwMiAweDAyICAKKyNkZWZpbmUgTVRfSVNXVDUxNTAgMHgwMyAgCisjZGVmaW5lIE1UX0lTQVJDSElWRV81OTQ1TDIgMHgwNCAgCisjZGVmaW5lIE1UX0lTQ01TSjUwMCAweDA1ICAKKyNkZWZpbmUgTVRfSVNUREMzNjEwIDB4MDYgIAorI2RlZmluZSBNVF9JU0FSQ0hJVkVfVlA2MEkgMHgwNyAgCisjZGVmaW5lIE1UX0lTQVJDSElWRV8yMTUwTCAweDA4ICAKKyNkZWZpbmUgTVRfSVNBUkNISVZFXzIwNjBMIDB4MDkgIAorI2RlZmluZSBNVF9JU0FSQ0hJVkVTQzQ5OSAweDBBICAKKyNkZWZpbmUgTVRfSVNRSUMwMl9BTExfRkVBVFVSRVMgMHgwRiAgCisjZGVmaW5lIE1UX0lTV1Q1MDk5RUVOMjQgMHgxMSAgCisjZGVmaW5lIE1UX0lTVEVBQ19NVDJTVCAweDEyICAKKyNkZWZpbmUgTVRfSVNFVkVSRVhfRlQ0MEEgMHgzMiAgCisjZGVmaW5lIE1UX0lTRERTMSAweDUxICAKKyNkZWZpbmUgTVRfSVNERFMyIDB4NTIgIAorI2RlZmluZSBNVF9JU09OU1RSRUFNX1NDIDB4NjEgIAorI2RlZmluZSBNVF9JU1NDU0kxIDB4NzEgIAorI2RlZmluZSBNVF9JU1NDU0kyIDB4NzIgIAorCisjZGVmaW5lIE1UX0lTRlRBUEVfVU5LTk9XTiAweDgwMDAwMCAgCisjZGVmaW5lIE1UX0lTRlRBUEVfRkxBRyAweDgwMDAwMAorCitzdHJ1Y3QgbXRfdGFwZV9pbmZvIHsKKyBsb25nIHRfdHlwZTsKKyBjaGFyICp0X25hbWU7Cit9OworCisjZGVmaW5lIE1UX1RBUEVfSU5GTyB7ICAge01UX0lTVU5LTk9XTiwgIlVua25vd24gdHlwZSBvZiB0YXBlIGRldmljZSJ9LCAgIHtNVF9JU1FJQzAyLCAiR2VuZXJpYyBRSUMtMDIgdGFwZSBzdHJlYW1lciJ9LCAgIHtNVF9JU1dUNTE1MCwgIldhbmd0ZWsgNTE1MCwgUUlDLTE1MCJ9LCAgIHtNVF9JU0FSQ0hJVkVfNTk0NUwyLCAiQXJjaGl2ZSA1OTQ1TC0yIn0sICAge01UX0lTQ01TSjUwMCwgIkNNUyBKdW1ibyA1MDAifSwgICB7TVRfSVNUREMzNjEwLCAiVGFuZGJlcmcgVERDIDM2MTAsIFFJQy0yNCJ9LCAgIHtNVF9JU0FSQ0hJVkVfVlA2MEksICJBcmNoaXZlIFZQNjBpLCBRSUMtMDIifSwgICB7TVRfSVNBUkNISVZFXzIxNTBMLCAiQXJjaGl2ZSBWaXBlciAyMTUwTCJ9LCAgIHtNVF9JU0FSQ0hJVkVfMjA2MEwsICJBcmNoaXZlIFZpcGVyIDIwNjBMIn0sICAge01UX0lTQVJDSElWRVNDNDk5LCAiQXJjaGl2ZSBTQy00OTkgUUlDLTM2IGNvbnRyb2xsZXIifSwgICB7TVRfSVNRSUMwMl9BTExfRkVBVFVSRVMsICJHZW5lcmljIFFJQy0wMiB0YXBlLCBhbGwgZmVhdHVyZXMifSwgICB7TVRfSVNXVDUwOTlFRU4yNCwgIldhbmd0ZWsgNTA5OS1lZW4yNCwgNjBNQiJ9LCAgIHtNVF9JU1RFQUNfTVQyU1QsICJUZWFjIE1ULTJTVCAxNTVtYiBkYXRhIGNhc3NldHRlIGRyaXZlIn0sICAge01UX0lTRVZFUkVYX0ZUNDBBLCAiRXZlcmV4IEZUNDBBLCBRSUMtNDAifSwgICB7TVRfSVNPTlNUUkVBTV9TQywgIk9uU3RyZWFtIFNDLSwgREktLCBEUC0sIG9yIFVTQiB0YXBlIGRyaXZlIn0sICAge01UX0lTU0NTSTEsICJHZW5lcmljIFNDU0ktMSB0YXBlIn0sICAge01UX0lTU0NTSTIsICJHZW5lcmljIFNDU0ktMiB0YXBlIn0sICAgezAsIE5VTEx9ICB9CisKK3N0cnVjdCBtdHBvcyB7CisgbG9uZyBtdF9ibGtubzsKK307CisKK3N0cnVjdCBtdHZvbGluZm8geworIHVuc2lnbmVkIGludCBtdF92b2xubzsKKyB1bnNpZ25lZCBpbnQgbXRfYmxrc3o7CisgdW5zaWduZWQgaW50IG10X3Jhd3NpemU7CisgdW5zaWduZWQgaW50IG10X3NpemU7CisgdW5zaWduZWQgaW50IG10X2NtcHI6MTsKK307CisKKyNkZWZpbmUgTVRfRlRfUkRfU0lOR0xFIDAKKyNkZWZpbmUgTVRfRlRfUkRfQUhFQUQgMQorI2RlZmluZSBNVF9GVF9XUl9BU1lOQyAwICAKKyNkZWZpbmUgTVRfRlRfV1JfTVVMVEkgMSAgCisjZGVmaW5lIE1UX0ZUX1dSX1NJTkdMRSAyICAKKyNkZWZpbmUgTVRfRlRfV1JfREVMRVRFIDMgIAorCitzdHJ1Y3QgbXRmdHNlZworeworIHVuc2lnbmVkIG10X3NlZ25vOworIHVuc2lnbmVkIG10X21vZGU7CisgaW50IG10X3Jlc3VsdDsKKyB2b2lkIF9fdXNlciAqbXRfZGF0YTsKK307CisKK3N0cnVjdCBtdHRhcGVzaXplIHsKKyB1bnNpZ25lZCBsb25nIG10X2NhcGFjaXR5OworIHVuc2lnbmVkIGxvbmcgbXRfdXNlZDsKK307CisKKyNkZWZpbmUgRlRGTVRfU0VUX1BBUk1TIDEgIAorI2RlZmluZSBGVEZNVF9HRVRfUEFSTVMgMiAgCisjZGVmaW5lIEZURk1UX0ZPUk1BVF9UUkFDSyAzICAKKyNkZWZpbmUgRlRGTVRfU1RBVFVTIDQgIAorI2RlZmluZSBGVEZNVF9WRVJJRlkgNSAgCisKK3N0cnVjdCBmdGZtdHBhcm1zIHsKKyB1bnNpZ25lZCBjaGFyIGZ0X3FpY3N0ZDsKKyB1bnNpZ25lZCBjaGFyIGZ0X2ZtdGNvZGU7CisgdW5zaWduZWQgY2hhciBmdF9maG07CisgdW5zaWduZWQgY2hhciBmdF9mdG07CisgdW5zaWduZWQgc2hvcnQgZnRfc3B0OworIHVuc2lnbmVkIHNob3J0IGZ0X3RwYzsKK307CisKK3N0cnVjdCBmdGZtdHRyYWNrIHsKKyB1bnNpZ25lZCBpbnQgZnRfdHJhY2s7CisgdW5zaWduZWQgY2hhciBmdF9nYXAzOworfTsKKworc3RydWN0IGZ0Zm10c3RhdHVzIHsKKyB1bnNpZ25lZCBpbnQgZnRfc2VnbWVudDsKK307CisKK3N0cnVjdCBmdGZtdHZlcmlmeSB7CisgdW5zaWduZWQgaW50IGZ0X3NlZ21lbnQ7CisgdW5zaWduZWQgbG9uZyBmdF9ic207Cit9OworCitzdHJ1Y3QgbXRmdGZvcm1hdCB7CisgdW5zaWduZWQgaW50IGZtdF9vcDsKKyB1bmlvbiBmbXRfYXJnIHsKKyBzdHJ1Y3QgZnRmbXRwYXJtcyBmbXRfcGFybXM7Cisgc3RydWN0IGZ0Zm10dHJhY2sgZm10X3RyYWNrOworIHN0cnVjdCBmdGZtdHN0YXR1cyBmbXRfc3RhdHVzOworIHN0cnVjdCBmdGZtdHZlcmlmeSBmbXRfdmVyaWZ5OworIH0gZm10X2FyZzsKK307CisKK3N0cnVjdCBtdGZ0Y21kIHsKKyB1bnNpZ25lZCBpbnQgZnRfd2FpdF9iZWZvcmU7CisgcWljMTE3X2NtZF90IGZ0X2NtZDsKKyB1bnNpZ25lZCBjaGFyIGZ0X3Bhcm1fY250OworIHVuc2lnbmVkIGNoYXIgZnRfcGFybXNbM107CisgdW5zaWduZWQgaW50IGZ0X3Jlc3VsdF9iaXRzOworIHVuc2lnbmVkIGludCBmdF9yZXN1bHQ7CisgdW5zaWduZWQgaW50IGZ0X3dhaXRfYWZ0ZXI7CisgaW50IGZ0X3N0YXR1czsKKyBpbnQgZnRfZXJyb3I7Cit9OworCisjZGVmaW5lIE1USU9DVE9QIF9JT1coJ20nLCAxLCBzdHJ1Y3QgbXRvcCkgIAorI2RlZmluZSBNVElPQ0dFVCBfSU9SKCdtJywgMiwgc3RydWN0IG10Z2V0KSAgCisjZGVmaW5lIE1USU9DUE9TIF9JT1IoJ20nLCAzLCBzdHJ1Y3QgbXRwb3MpICAKKworI2RlZmluZSBNVElPQ0dFVENPTkZJRyBfSU9SKCdtJywgNCwgc3RydWN0IG10Y29uZmlnaW5mbykgIAorI2RlZmluZSBNVElPQ1NFVENPTkZJRyBfSU9XKCdtJywgNSwgc3RydWN0IG10Y29uZmlnaW5mbykgIAorCisjZGVmaW5lIE1USU9DUkRGVFNFRyBfSU9XUignbScsIDYsIHN0cnVjdCBtdGZ0c2VnKSAgCisjZGVmaW5lIE1USU9DV1JGVFNFRyBfSU9XUignbScsIDcsIHN0cnVjdCBtdGZ0c2VnKSAgCisjZGVmaW5lIE1USU9DVk9MSU5GTyBfSU9SKCdtJywgOCwgc3RydWN0IG10dm9saW5mbykgIAorI2RlZmluZSBNVElPQ0dFVFNJWkUgX0lPUignbScsIDksIHN0cnVjdCBtdHRhcGVzaXplKSAKKyNkZWZpbmUgTVRJT0NGVEZPUk1BVCBfSU9XUignbScsIDEwLCBzdHJ1Y3QgbXRmdGZvcm1hdCkgIAorI2RlZmluZSBNVElPQ0ZUQ01EIF9JT1dSKCdtJywgMTEsIHN0cnVjdCBtdGZ0Y21kKSAgCisKKyNkZWZpbmUgR01UX0VPRih4KSAoKHgpICYgMHg4MDAwMDAwMCkKKyNkZWZpbmUgR01UX0JPVCh4KSAoKHgpICYgMHg0MDAwMDAwMCkKKyNkZWZpbmUgR01UX0VPVCh4KSAoKHgpICYgMHgyMDAwMDAwMCkKKyNkZWZpbmUgR01UX1NNKHgpICgoeCkgJiAweDEwMDAwMDAwKSAgCisjZGVmaW5lIEdNVF9FT0QoeCkgKCh4KSAmIDB4MDgwMDAwMDApICAKKyNkZWZpbmUgR01UX1dSX1BST1QoeCkgKCh4KSAmIDB4MDQwMDAwMDApCisKKyNkZWZpbmUgR01UX09OTElORSh4KSAoKHgpICYgMHgwMTAwMDAwMCkKKyNkZWZpbmUgR01UX0RfNjI1MCh4KSAoKHgpICYgMHgwMDgwMDAwMCkKKyNkZWZpbmUgR01UX0RfMTYwMCh4KSAoKHgpICYgMHgwMDQwMDAwMCkKKyNkZWZpbmUgR01UX0RfODAwKHgpICgoeCkgJiAweDAwMjAwMDAwKQorCisjZGVmaW5lIEdNVF9EUl9PUEVOKHgpICgoeCkgJiAweDAwMDQwMDAwKSAgCisKKyNkZWZpbmUgR01UX0lNX1JFUF9FTih4KSAoKHgpICYgMHgwMDAxMDAwMCkgIAorI2RlZmluZSBHTVRfQ0xOKHgpICgoeCkgJiAweDAwMDA4MDAwKSAgCisKKyNkZWZpbmUgTVRfU1RfQkxLU0laRV9TSElGVCAwCisjZGVmaW5lIE1UX1NUX0JMS1NJWkVfTUFTSyAweGZmZmZmZgorI2RlZmluZSBNVF9TVF9ERU5TSVRZX1NISUZUIDI0CisjZGVmaW5lIE1UX1NUX0RFTlNJVFlfTUFTSyAweGZmMDAwMDAwCisKKyNkZWZpbmUgTVRfU1RfU09GVEVSUl9TSElGVCAwCisjZGVmaW5lIE1UX1NUX1NPRlRFUlJfTUFTSyAweGZmZmYKKworI2RlZmluZSBNVF9TVF9PUFRJT05TIDB4ZjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfQk9PTEVBTlMgMHgxMDAwMDAwMAorI2RlZmluZSBNVF9TVF9TRVRCT09MRUFOUyAweDMwMDAwMDAwCisjZGVmaW5lIE1UX1NUX0NMRUFSQk9PTEVBTlMgMHg0MDAwMDAwMAorI2RlZmluZSBNVF9TVF9XUklURV9USFJFU0hPTEQgMHgyMDAwMDAwMAorI2RlZmluZSBNVF9TVF9ERUZfQkxLU0laRSAweDUwMDAwMDAwCisjZGVmaW5lIE1UX1NUX0RFRl9PUFRJT05TIDB4NjAwMDAwMDAKKyNkZWZpbmUgTVRfU1RfVElNRU9VVFMgMHg3MDAwMDAwMAorI2RlZmluZSBNVF9TVF9TRVRfVElNRU9VVCAoTVRfU1RfVElNRU9VVFMgfCAweDAwMDAwMCkKKyNkZWZpbmUgTVRfU1RfU0VUX0xPTkdfVElNRU9VVCAoTVRfU1RfVElNRU9VVFMgfCAweDEwMDAwMCkKKyNkZWZpbmUgTVRfU1RfU0VUX0NMTiAweDgwMDAwMDAwCisKKyNkZWZpbmUgTVRfU1RfQlVGRkVSX1dSSVRFUyAweDEKKyNkZWZpbmUgTVRfU1RfQVNZTkNfV1JJVEVTIDB4MgorI2RlZmluZSBNVF9TVF9SRUFEX0FIRUFEIDB4NAorI2RlZmluZSBNVF9TVF9ERUJVR0dJTkcgMHg4CisjZGVmaW5lIE1UX1NUX1RXT19GTSAweDEwCisjZGVmaW5lIE1UX1NUX0ZBU1RfTVRFT00gMHgyMAorI2RlZmluZSBNVF9TVF9BVVRPX0xPQ0sgMHg0MAorI2RlZmluZSBNVF9TVF9ERUZfV1JJVEVTIDB4ODAKKyNkZWZpbmUgTVRfU1RfQ0FOX0JTUiAweDEwMAorI2RlZmluZSBNVF9TVF9OT19CTEtMSU1TIDB4MjAwCisjZGVmaW5lIE1UX1NUX0NBTl9QQVJUSVRJT05TIDB4NDAwCisjZGVmaW5lIE1UX1NUX1NDU0kyTE9HSUNBTCAweDgwMAorI2RlZmluZSBNVF9TVF9TWVNWIDB4MTAwMAorI2RlZmluZSBNVF9TVF9OT1dBSVQgMHgyMDAwCisKKyNkZWZpbmUgTVRfU1RfQ0xFQVJfREVGQVVMVCAweGZmZmZmCisjZGVmaW5lIE1UX1NUX0RFRl9ERU5TSVRZIChNVF9TVF9ERUZfT1BUSU9OUyB8IDB4MTAwMDAwKQorI2RlZmluZSBNVF9TVF9ERUZfQ09NUFJFU1NJT04gKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgyMDAwMDApCisjZGVmaW5lIE1UX1NUX0RFRl9EUlZCVUZGRVIgKE1UX1NUX0RFRl9PUFRJT05TIHwgMHgzMDAwMDApCisKKyNkZWZpbmUgTVRfU1RfSFBMT0FERVJfT0ZGU0VUIDEwMDAwCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LWRlYnVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXgtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDY1NjEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L211dGV4LWRlYnVnLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX01VVEVYX0RFQlVHX0gKKyNkZWZpbmUgX19MSU5VWF9NVVRFWF9ERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvbG9ja2RlcC5oPgorCisjZGVmaW5lIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpICAgLCAubWFnaWMgPSAmbG9ja25hbWUKKworI2RlZmluZSBtdXRleF9pbml0KG11dGV4KSAgZG8geyAgIHN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7ICAgICBfX211dGV4X2luaXQoKG11dGV4KSwgI211dGV4LCAmX19rZXkpOyAgfSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9tdXRleC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMzNhOGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbXV0ZXguaApAQCAtMCwwICsxLDQ2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTVVURVhfSAorI2RlZmluZSBfX0xJTlVYX01VVEVYX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisKKyNpbmNsdWRlIDxhc20vYXRvbWljLmg+CisKK3N0cnVjdCBtdXRleCB7CisKKyBhdG9taWNfdCBjb3VudDsKKyBzcGlubG9ja190IHdhaXRfbG9jazsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHdhaXRfbGlzdDsKK307CisKK3N0cnVjdCBtdXRleF93YWl0ZXIgeworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyBzdHJ1Y3QgdGFza19zdHJ1Y3QgKnRhc2s7Cit9OworCisjZGVmaW5lIF9fREVCVUdfTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpCisjZGVmaW5lIG11dGV4X2luaXQobXV0ZXgpICBkbyB7ICAgc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsgICAgIF9fbXV0ZXhfaW5pdCgobXV0ZXgpLCAjbXV0ZXgsICZfX2tleSk7ICB9IHdoaWxlICgwKQorI2RlZmluZSBtdXRleF9kZXN0cm95KG11dGV4KSBkbyB7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19ERVBfTUFQX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKQorCisjZGVmaW5lIF9fTVVURVhfSU5JVElBTElaRVIobG9ja25hbWUpICAgeyAuY291bnQgPSBBVE9NSUNfSU5JVCgxKSAgICwgLndhaXRfbG9jayA9IFNQSU5fTE9DS19VTkxPQ0tFRCAgICwgLndhaXRfbGlzdCA9IExJU1RfSEVBRF9JTklUKGxvY2tuYW1lLndhaXRfbGlzdCkgICBfX0RFQlVHX01VVEVYX0lOSVRJQUxJWkVSKGxvY2tuYW1lKSAgIF9fREVQX01BUF9NVVRFWF9JTklUSUFMSVpFUihsb2NrbmFtZSkgfQorCisjZGVmaW5lIERFRklORV9NVVRFWChtdXRleG5hbWUpICAgc3RydWN0IG11dGV4IG11dGV4bmFtZSA9IF9fTVVURVhfSU5JVElBTElaRVIobXV0ZXhuYW1lKQorCisjZGVmaW5lIG11dGV4X2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBtdXRleF9sb2NrKGxvY2spCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5MTIyMGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwLmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05DUF9ICisjZGVmaW5lIF9MSU5VWF9OQ1BfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBOQ1BfUFRZUEUgKDB4MTEpCisjZGVmaW5lIE5DUF9QT1JUICgweDA0NTEpCisKKyNkZWZpbmUgTkNQX0FMTE9DX1NMT1RfUkVRVUVTVCAoMHgxMTExKQorI2RlZmluZSBOQ1BfUkVRVUVTVCAoMHgyMjIyKQorI2RlZmluZSBOQ1BfREVBTExPQ19TTE9UX1JFUVVFU1QgKDB4NTU1NSkKKworc3RydWN0IG5jcF9yZXF1ZXN0X2hlYWRlciB7CisgX191MTYgdHlwZTsKKyBfX3U4IHNlcXVlbmNlOworIF9fdTggY29ubl9sb3c7CisgX191OCB0YXNrOworIF9fdTggY29ubl9oaWdoOworIF9fdTggZnVuY3Rpb247CisgX191OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBOQ1BfUkVQTFkgKDB4MzMzMykKKyNkZWZpbmUgTkNQX1dBVENIRE9HICgweDNFM0UpCisjZGVmaW5lIE5DUF9QT1NJVElWRV9BQ0sgKDB4OTk5OSkKKworc3RydWN0IG5jcF9yZXBseV9oZWFkZXIgeworIF9fdTE2IHR5cGU7CisgX191OCBzZXF1ZW5jZTsKKyBfX3U4IGNvbm5fbG93OworIF9fdTggdGFzazsKKyBfX3U4IGNvbm5faGlnaDsKKyBfX3U4IGNvbXBsZXRpb25fY29kZTsKKyBfX3U4IGNvbm5lY3Rpb25fc3RhdGU7CisgX191OCBkYXRhWzBdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBOQ1BfVk9MTkFNRV9MRU4gKDE2KQorI2RlZmluZSBOQ1BfTlVNQkVSX09GX1ZPTFVNRVMgKDI1NikKK3N0cnVjdCBuY3Bfdm9sdW1lX2luZm8geworIF9fdTMyIHRvdGFsX2Jsb2NrczsKKyBfX3UzMiBmcmVlX2Jsb2NrczsKKyBfX3UzMiBwdXJnZWFibGVfYmxvY2tzOworIF9fdTMyIG5vdF95ZXRfcHVyZ2VhYmxlX2Jsb2NrczsKKyBfX3UzMiB0b3RhbF9kaXJfZW50cmllczsKKyBfX3UzMiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CisgX191OCBzZWN0b3JzX3Blcl9ibG9jazsKKyBjaGFyIHZvbHVtZV9uYW1lW05DUF9WT0xOQU1FX0xFTiArIDFdOworfTsKKworI2RlZmluZSBBUl9SRUFEIChjcHVfdG9fbGUxNigxKSkKKyNkZWZpbmUgQVJfV1JJVEUgKGNwdV90b19sZTE2KDIpKQorI2RlZmluZSBBUl9FWENMVVNJVkUgKGNwdV90b19sZTE2KDB4MjApKQorCisjZGVmaW5lIE5DUF9GSUxFX0lEX0xFTiA2CisKKyNkZWZpbmUgTldfTlNfRE9TIDAKKyNkZWZpbmUgTldfTlNfTUFDIDEKKyNkZWZpbmUgTldfTlNfTkZTIDIKKyNkZWZpbmUgTldfTlNfRlRBTSAzCisjZGVmaW5lIE5XX05TX09TMiA0CisKKyNkZWZpbmUgUklNX05BTUUgKGNwdV90b19sZTMyKDEpKQorI2RlZmluZSBSSU1fU1BBQ0VfQUxMT0NBVEVEIChjcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgUklNX0FUVFJJQlVURVMgKGNwdV90b19sZTMyKDQpKQorI2RlZmluZSBSSU1fREFUQV9TSVpFIChjcHVfdG9fbGUzMig4KSkKKyNkZWZpbmUgUklNX1RPVEFMX1NJWkUgKGNwdV90b19sZTMyKDB4MTApKQorI2RlZmluZSBSSU1fRVhUX0FUVFJfSU5GTyAoY3B1X3RvX2xlMzIoMHgyMCkpCisjZGVmaW5lIFJJTV9BUkNISVZFIChjcHVfdG9fbGUzMigweDQwKSkKKyNkZWZpbmUgUklNX01PRElGWSAoY3B1X3RvX2xlMzIoMHg4MCkpCisjZGVmaW5lIFJJTV9DUkVBVElPTiAoY3B1X3RvX2xlMzIoMHgxMDApKQorI2RlZmluZSBSSU1fT1dOSU5HX05BTUVTUEFDRSAoY3B1X3RvX2xlMzIoMHgyMDApKQorI2RlZmluZSBSSU1fRElSRUNUT1JZIChjcHVfdG9fbGUzMigweDQwMCkpCisjZGVmaW5lIFJJTV9SSUdIVFMgKGNwdV90b19sZTMyKDB4ODAwKSkKKyNkZWZpbmUgUklNX0FMTCAoY3B1X3RvX2xlMzIoMHhGRkYpKQorI2RlZmluZSBSSU1fQ09NUFJFU1NFRF9JTkZPIChjcHVfdG9fbGUzMigweDgwMDAwMDAwKSkKKworI2RlZmluZSBOU0lCTV9ORlNfTkFNRSAweDAwMDEKKyNkZWZpbmUgTlNJQk1fTkZTX01PREUgMHgwMDAyCisjZGVmaW5lIE5TSUJNX05GU19HSUQgMHgwMDA0CisjZGVmaW5lIE5TSUJNX05GU19OTElOS1MgMHgwMDA4CisjZGVmaW5lIE5TSUJNX05GU19SREVWIDB4MDAxMAorI2RlZmluZSBOU0lCTV9ORlNfTElOSyAweDAwMjAKKyNkZWZpbmUgTlNJQk1fTkZTX0NSRUFURUQgMHgwMDQwCisjZGVmaW5lIE5TSUJNX05GU19VSUQgMHgwMDgwCisjZGVmaW5lIE5TSUJNX05GU19BQ1NGTEFHIDB4MDEwMAorI2RlZmluZSBOU0lCTV9ORlNfTVlGTEFHIDB4MDIwMAorCisjZGVmaW5lIE9DX01PREVfT1BFTiAweDAxCisjZGVmaW5lIE9DX01PREVfVFJVTkNBVEUgMHgwMgorI2RlZmluZSBPQ19NT0RFX1JFUExBQ0UgMHgwMgorI2RlZmluZSBPQ19NT0RFX0NSRUFURSAweDA4CisKKyNkZWZpbmUgT0NfQUNUSU9OX05PTkUgMHgwMAorI2RlZmluZSBPQ19BQ1RJT05fT1BFTiAweDAxCisjZGVmaW5lIE9DX0FDVElPTl9DUkVBVEUgMHgwMgorI2RlZmluZSBPQ19BQ1RJT05fVFJVTkNBVEUgMHgwNAorI2RlZmluZSBPQ19BQ1RJT05fUkVQTEFDRSAweDA0CisKKyNpZm5kZWYgQVJfUkVBRF9PTkxZCisjZGVmaW5lIEFSX1JFQURfT05MWSAweDAwMDEKKyNkZWZpbmUgQVJfV1JJVEVfT05MWSAweDAwMDIKKyNkZWZpbmUgQVJfREVOWV9SRUFEIDB4MDAwNAorI2RlZmluZSBBUl9ERU5ZX1dSSVRFIDB4MDAwOAorI2RlZmluZSBBUl9DT01QQVRJQklMSVRZIDB4MDAxMAorI2RlZmluZSBBUl9XUklURV9USFJPVUdIIDB4MDA0MAorI2RlZmluZSBBUl9PUEVOX0NPTVBSRVNTRUQgMHgwMTAwCisjZW5kaWYKKworc3RydWN0IG53X25mc19pbmZvIHsKKyBfX3UzMiBtb2RlOworIF9fdTMyIHJkZXY7Cit9OworCitzdHJ1Y3QgbndfaW5mb19zdHJ1Y3QgeworIF9fdTMyIHNwYWNlQWxsb2M7CisgX19sZTMyIGF0dHJpYnV0ZXM7CisgX191MTYgZmxhZ3M7CisgX19sZTMyIGRhdGFTdHJlYW1TaXplOworIF9fbGUzMiB0b3RhbFN0cmVhbVNpemU7CisgX191MTYgbnVtYmVyT2ZTdHJlYW1zOworIF9fbGUxNiBjcmVhdGlvblRpbWU7CisgX19sZTE2IGNyZWF0aW9uRGF0ZTsKKyBfX3UzMiBjcmVhdG9ySUQ7CisgX19sZTE2IG1vZGlmeVRpbWU7CisgX19sZTE2IG1vZGlmeURhdGU7CisgX191MzIgbW9kaWZpZXJJRDsKKyBfX2xlMTYgbGFzdEFjY2Vzc0RhdGU7CisgX191MTYgYXJjaGl2ZVRpbWU7CisgX191MTYgYXJjaGl2ZURhdGU7CisgX191MzIgYXJjaGl2ZXJJRDsKKyBfX3UxNiBpbmhlcml0ZWRSaWdodHNNYXNrOworIF9fbGUzMiBkaXJFbnROdW07CisgX19sZTMyIERvc0Rpck51bTsKKyBfX3UzMiB2b2xOdW1iZXI7CisgX191MzIgRUFEYXRhU2l6ZTsKKyBfX3UzMiBFQUtleUNvdW50OworIF9fdTMyIEVBS2V5U2l6ZTsKKyBfX3UzMiBOU0NyZWF0b3I7CisgX191OCBuYW1lTGVuOworIF9fdTggZW50cnlOYW1lWzI1Nl07CisKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNkZWZpbmUgRE1fQVRUUklCVVRFUyAoY3B1X3RvX2xlMzIoMHgwMikpCisjZGVmaW5lIERNX0NSRUFURV9EQVRFIChjcHVfdG9fbGUzMigweDA0KSkKKyNkZWZpbmUgRE1fQ1JFQVRFX1RJTUUgKGNwdV90b19sZTMyKDB4MDgpKQorI2RlZmluZSBETV9DUkVBVE9SX0lEIChjcHVfdG9fbGUzMigweDEwKSkKKyNkZWZpbmUgRE1fQVJDSElWRV9EQVRFIChjcHVfdG9fbGUzMigweDIwKSkKKyNkZWZpbmUgRE1fQVJDSElWRV9USU1FIChjcHVfdG9fbGUzMigweDQwKSkKKyNkZWZpbmUgRE1fQVJDSElWRVJfSUQgKGNwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBETV9NT0RJRllfREFURSAoY3B1X3RvX2xlMzIoMHgwMTAwKSkKKyNkZWZpbmUgRE1fTU9ESUZZX1RJTUUgKGNwdV90b19sZTMyKDB4MDIwMCkpCisjZGVmaW5lIERNX01PRElGSUVSX0lEIChjcHVfdG9fbGUzMigweDA0MDApKQorI2RlZmluZSBETV9MQVNUX0FDQ0VTU19EQVRFIChjcHVfdG9fbGUzMigweDA4MDApKQorI2RlZmluZSBETV9JTkhFUklURURfUklHSFRTX01BU0sgKGNwdV90b19sZTMyKDB4MTAwMCkpCisjZGVmaW5lIERNX01BWElNVU1fU1BBQ0UgKGNwdV90b19sZTMyKDB4MjAwMCkpCisKK3N0cnVjdCBud19tb2RpZnlfZG9zX2luZm8geworIF9fbGUzMiBhdHRyaWJ1dGVzOworIF9fbGUxNiBjcmVhdGlvbkRhdGU7CisgX19sZTE2IGNyZWF0aW9uVGltZTsKKyBfX3UzMiBjcmVhdG9ySUQ7CisgX19sZTE2IG1vZGlmeURhdGU7CisgX19sZTE2IG1vZGlmeVRpbWU7CisgX191MzIgbW9kaWZpZXJJRDsKKyBfX3UxNiBhcmNoaXZlRGF0ZTsKKyBfX3UxNiBhcmNoaXZlVGltZTsKKyBfX3UzMiBhcmNoaXZlcklEOworIF9fbGUxNiBsYXN0QWNjZXNzRGF0ZTsKKyBfX3UxNiBpbmhlcml0YW5jZUdyYW50TWFzazsKKyBfX3UxNiBpbmhlcml0YW5jZVJldm9rZU1hc2s7CisgX191MzIgbWF4aW11bVNwYWNlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IG53X3NlYXJjaF9zZXF1ZW5jZSB7CisgX191OCB2b2xOdW1iZXI7CisgX191MzIgZGlyQmFzZTsKKyBfX3UzMiBzZXF1ZW5jZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcF9tb3VudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25jcF9tb3VudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIwNDg2OWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX21vdW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkNQX01PVU5UX0gKKyNkZWZpbmUgX0xJTlVYX05DUF9NT1VOVF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25jcC5oPgorCisjZGVmaW5lIE5DUF9NT1VOVF9WRVJTSU9OIDMgIAorCisjZGVmaW5lIE5DUF9NT1VOVF9TT0ZUIDB4MDAwMQorI2RlZmluZSBOQ1BfTU9VTlRfSU5UUiAweDAwMDIKKyNkZWZpbmUgTkNQX01PVU5UX1NUUk9ORyAweDAwMDQgIAorI2RlZmluZSBOQ1BfTU9VTlRfTk9fT1MyIDB4MDAwOCAgCisjZGVmaW5lIE5DUF9NT1VOVF9OT19ORlMgMHgwMDEwICAKKyNkZWZpbmUgTkNQX01PVU5UX0VYVFJBUyAweDAwMjAKKyNkZWZpbmUgTkNQX01PVU5UX1NZTUxJTktTIDB4MDA0MCAgCisjZGVmaW5lIE5DUF9NT1VOVF9ORlNfRVhUUkFTIDB4MDA4MCAgCisKK3N0cnVjdCBuY3BfbW91bnRfZGF0YSB7CisgaW50IHZlcnNpb247CisgdW5zaWduZWQgaW50IG5jcF9mZDsKKyBfX2tlcm5lbF91aWRfdCBtb3VudGVkX3VpZDsKKyBfX2tlcm5lbF9waWRfdCB3ZG9nX3BpZDsKKworIHVuc2lnbmVkIGNoYXIgbW91bnRlZF92b2xbTkNQX1ZPTE5BTUVfTEVOICsgMV07CisgdW5zaWduZWQgaW50IHRpbWVfb3V0OworIHVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKKyB1bnNpZ25lZCBpbnQgZmxhZ3M7CisKKyBfX2tlcm5lbF91aWRfdCB1aWQ7CisgX19rZXJuZWxfZ2lkX3QgZ2lkOworIF9fa2VybmVsX21vZGVfdCBmaWxlX21vZGU7CisgX19rZXJuZWxfbW9kZV90IGRpcl9tb2RlOworfTsKKworI2RlZmluZSBOQ1BfTU9VTlRfVkVSU0lPTl9WNCAoNCkgIAorCitzdHJ1Y3QgbmNwX21vdW50X2RhdGFfdjQgeworIGludCB2ZXJzaW9uOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKyB1bnNpZ25lZCBsb25nIG1vdW50ZWRfdWlkOworCisgbG9uZyB3ZG9nX3BpZDsKKworIHVuc2lnbmVkIGludCBuY3BfZmQ7CisgdW5zaWduZWQgaW50IHRpbWVfb3V0OworIHVuc2lnbmVkIGludCByZXRyeV9jb3VudDsKKworIHVuc2lnbmVkIGxvbmcgdWlkOworIHVuc2lnbmVkIGxvbmcgZ2lkOworCisgdW5zaWduZWQgbG9uZyBmaWxlX21vZGU7CisgdW5zaWduZWQgbG9uZyBkaXJfbW9kZTsKK307CisKKyNkZWZpbmUgTkNQX01PVU5UX1ZFUlNJT05fVjUgKDUpICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX25vLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmNwX25vLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWFmZWQ2OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uY3Bfbm8uaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9OQ1BfTk8KKyNkZWZpbmUgX05DUF9OTworCisjZGVmaW5lIGFST05MWSAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxKSkKKyNkZWZpbmUgYUhJRERFTiAoX19jb25zdGFudF9jcHVfdG9fbGUzMigyKSkKKyNkZWZpbmUgYVNZU1RFTSAoX19jb25zdGFudF9jcHVfdG9fbGUzMig0KSkKKyNkZWZpbmUgYUVYRUNVVEUgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoOCkpCisjZGVmaW5lIGFESVIgKF9fY29uc3RhbnRfY3B1X3RvX2xlMzIoMHgxMCkpCisjZGVmaW5lIGFBUkNIIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4MjApKQorI2RlZmluZSBhU0hBUkVEIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDB4ODApKQorI2RlZmluZSBhRE9OVFNVQkFMTE9DQVRFIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxMSkpCisjZGVmaW5lIGFUUkFOU0FDVElPTkFMIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwxMikpCisjZGVmaW5lIGFQVVJHRSAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTYpKQorI2RlZmluZSBhUkVOQU1FSU5ISUJJVCAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTcpKQorI2RlZmluZSBhREVMRVRFSU5ISUJJVCAoX19jb25zdGFudF9jcHVfdG9fbGUzMigxTDw8MTgpKQorI2RlZmluZSBhRE9OVENPTVBSRVNTIChfX2NvbnN0YW50X2NwdV90b19sZTMyKDFMPDwyNykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI5ZmNhMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0LmgKQEAgLTAsMCArMSw1MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfTkVUX0gKKyNkZWZpbmUgX0xJTlVYX05FVF9ICisKKyNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CisjaW5jbHVkZSA8YXNtL3NvY2tldC5oPgorCitzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CitzdHJ1Y3QgaW5vZGU7CisKKyNkZWZpbmUgTlBST1RPIDMyICAKKworI2RlZmluZSBTWVNfU09DS0VUIDEgIAorI2RlZmluZSBTWVNfQklORCAyICAKKyNkZWZpbmUgU1lTX0NPTk5FQ1QgMyAgCisjZGVmaW5lIFNZU19MSVNURU4gNCAgCisjZGVmaW5lIFNZU19BQ0NFUFQgNSAgCisjZGVmaW5lIFNZU19HRVRTT0NLTkFNRSA2ICAKKyNkZWZpbmUgU1lTX0dFVFBFRVJOQU1FIDcgIAorI2RlZmluZSBTWVNfU09DS0VUUEFJUiA4ICAKKyNkZWZpbmUgU1lTX1NFTkQgOSAgCisjZGVmaW5lIFNZU19SRUNWIDEwICAKKyNkZWZpbmUgU1lTX1NFTkRUTyAxMSAgCisjZGVmaW5lIFNZU19SRUNWRlJPTSAxMiAgCisjZGVmaW5lIFNZU19TSFVURE9XTiAxMyAgCisjZGVmaW5lIFNZU19TRVRTT0NLT1BUIDE0ICAKKyNkZWZpbmUgU1lTX0dFVFNPQ0tPUFQgMTUgIAorI2RlZmluZSBTWVNfU0VORE1TRyAxNiAgCisjZGVmaW5lIFNZU19SRUNWTVNHIDE3ICAKKwordHlwZWRlZiBlbnVtIHsKKyBTU19GUkVFID0gMCwKKyBTU19VTkNPTk5FQ1RFRCwKKyBTU19DT05ORUNUSU5HLAorIFNTX0NPTk5FQ1RFRCwKKyBTU19ESVNDT05ORUNUSU5HCit9IHNvY2tldF9zdGF0ZTsKKworI2RlZmluZSBfX1NPX0FDQ0VQVENPTiAoMSA8PCAxNikgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRkZXZpY2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRkZXZpY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGI1OGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGRldmljZS5oCkBAIC0wLDAgKzEsNjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05FVERFVklDRV9ICisjZGVmaW5lIF9MSU5VWF9ORVRERVZJQ0VfSAorCisjaW5jbHVkZSA8bGludXgvaWYuaD4KKyNpbmNsdWRlIDxsaW51eC9pZl9ldGhlci5oPgorI2luY2x1ZGUgPGxpbnV4L2lmX3BhY2tldC5oPgorCisjZGVmaW5lIE1BWF9BRERSX0xFTiAzMiAgCisKKyNkZWZpbmUgTkVUREVWX1RYX09LIDAgIAorI2RlZmluZSBORVRERVZfVFhfQlVTWSAxICAKKyNkZWZpbmUgTkVUREVWX1RYX0xPQ0tFRCAtMSAgCisKKyNkZWZpbmUgTExfTUFYX0hFQURFUiAzMgorCisjZGVmaW5lIE1BWF9IRUFERVIgTExfTUFYX0hFQURFUgorCitzdHJ1Y3QgbmV0X2RldmljZV9zdGF0cworeworIHVuc2lnbmVkIGxvbmcgcnhfcGFja2V0czsKKyB1bnNpZ25lZCBsb25nIHR4X3BhY2tldHM7CisgdW5zaWduZWQgbG9uZyByeF9ieXRlczsKKyB1bnNpZ25lZCBsb25nIHR4X2J5dGVzOworIHVuc2lnbmVkIGxvbmcgcnhfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdHhfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgcnhfZHJvcHBlZDsKKyB1bnNpZ25lZCBsb25nIHR4X2Ryb3BwZWQ7CisgdW5zaWduZWQgbG9uZyBtdWx0aWNhc3Q7CisgdW5zaWduZWQgbG9uZyBjb2xsaXNpb25zOworCisgdW5zaWduZWQgbG9uZyByeF9sZW5ndGhfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgcnhfb3Zlcl9lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9jcmNfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgcnhfZnJhbWVfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgcnhfZmlmb19lcnJvcnM7CisgdW5zaWduZWQgbG9uZyByeF9taXNzZWRfZXJyb3JzOworCisgdW5zaWduZWQgbG9uZyB0eF9hYm9ydGVkX2Vycm9yczsKKyB1bnNpZ25lZCBsb25nIHR4X2NhcnJpZXJfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdHhfZmlmb19lcnJvcnM7CisgdW5zaWduZWQgbG9uZyB0eF9oZWFydGJlYXRfZXJyb3JzOworIHVuc2lnbmVkIGxvbmcgdHhfd2luZG93X2Vycm9yczsKKworIHVuc2lnbmVkIGxvbmcgcnhfY29tcHJlc3NlZDsKKyB1bnNpZ25lZCBsb25nIHR4X2NvbXByZXNzZWQ7Cit9OworCitlbnVtIHsKKyBJRl9QT1JUX1VOS05PV04gPSAwLAorIElGX1BPUlRfMTBCQVNFMiwKKyBJRl9QT1JUXzEwQkFTRVQsCisgSUZfUE9SVF9BVUksCisgSUZfUE9SVF8xMDBCQVNFVCwKKyBJRl9QT1JUXzEwMEJBU0VUWCwKKyBJRl9QT1JUXzEwMEJBU0VGWAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQ4ODM0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworI2RlZmluZSBORl9EUk9QIDAKKyNkZWZpbmUgTkZfQUNDRVBUIDEKKyNkZWZpbmUgTkZfU1RPTEVOIDIKKyNkZWZpbmUgTkZfUVVFVUUgMworI2RlZmluZSBORl9SRVBFQVQgNAorI2RlZmluZSBORl9TVE9QIDUKKyNkZWZpbmUgTkZfTUFYX1ZFUkRJQ1QgTkZfU1RPUAorCisjZGVmaW5lIE5GX1ZFUkRJQ1RfTUFTSyAweDAwMDBmZmZmCisjZGVmaW5lIE5GX1ZFUkRJQ1RfQklUUyAxNgorCisjZGVmaW5lIE5GX1ZFUkRJQ1RfUU1BU0sgMHhmZmZmMDAwMAorI2RlZmluZSBORl9WRVJESUNUX1FCSVRTIDE2CisKKyNkZWZpbmUgTkZfUVVFVUVfTlIoeCkgKCgoeCA8PCBORl9WRVJESUNUX1FCSVRTKSAmIE5GX1ZFUkRJQ1RfUU1BU0spIHwgTkZfUVVFVUUpCisKKyNkZWZpbmUgTkZDX1VOS05PV04gMHg0MDAwCisjZGVmaW5lIE5GQ19BTFRFUkVEIDB4ODAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjkxNzdmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2NvbW1vbi5oCkBAIC0wLDAgKzEsMTE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ORl9DT05OVFJBQ0tfQ09NTU9OX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19DT01NT05fSAorCitlbnVtIGlwX2Nvbm50cmFja19pbmZvCit7CisKKyBJUF9DVF9FU1RBQkxJU0hFRCwKKworIElQX0NUX1JFTEFURUQsCisKKyBJUF9DVF9ORVcsCisKKyBJUF9DVF9JU19SRVBMWSwKKworIElQX0NUX05VTUJFUiA9IElQX0NUX0lTX1JFUExZICogMiAtIDEKK307CisKK2VudW0gaXBfY29ubnRyYWNrX3N0YXR1cyB7CisKKyBJUFNfRVhQRUNURURfQklUID0gMCwKKyBJUFNfRVhQRUNURUQgPSAoMSA8PCBJUFNfRVhQRUNURURfQklUKSwKKworIElQU19TRUVOX1JFUExZX0JJVCA9IDEsCisgSVBTX1NFRU5fUkVQTFkgPSAoMSA8PCBJUFNfU0VFTl9SRVBMWV9CSVQpLAorCisgSVBTX0FTU1VSRURfQklUID0gMiwKKyBJUFNfQVNTVVJFRCA9ICgxIDw8IElQU19BU1NVUkVEX0JJVCksCisKKyBJUFNfQ09ORklSTUVEX0JJVCA9IDMsCisgSVBTX0NPTkZJUk1FRCA9ICgxIDw8IElQU19DT05GSVJNRURfQklUKSwKKworIElQU19TUkNfTkFUX0JJVCA9IDQsCisgSVBTX1NSQ19OQVQgPSAoMSA8PCBJUFNfU1JDX05BVF9CSVQpLAorCisgSVBTX0RTVF9OQVRfQklUID0gNSwKKyBJUFNfRFNUX05BVCA9ICgxIDw8IElQU19EU1RfTkFUX0JJVCksCisKKyBJUFNfTkFUX01BU0sgPSAoSVBTX0RTVF9OQVQgfCBJUFNfU1JDX05BVCksCisKKyBJUFNfU0VRX0FESlVTVF9CSVQgPSA2LAorIElQU19TRVFfQURKVVNUID0gKDEgPDwgSVBTX1NFUV9BREpVU1RfQklUKSwKKworIElQU19TUkNfTkFUX0RPTkVfQklUID0gNywKKyBJUFNfU1JDX05BVF9ET05FID0gKDEgPDwgSVBTX1NSQ19OQVRfRE9ORV9CSVQpLAorCisgSVBTX0RTVF9OQVRfRE9ORV9CSVQgPSA4LAorIElQU19EU1RfTkFUX0RPTkUgPSAoMSA8PCBJUFNfRFNUX05BVF9ET05FX0JJVCksCisKKyBJUFNfTkFUX0RPTkVfTUFTSyA9IChJUFNfRFNUX05BVF9ET05FIHwgSVBTX1NSQ19OQVRfRE9ORSksCisKKyBJUFNfRFlJTkdfQklUID0gOSwKKyBJUFNfRFlJTkcgPSAoMSA8PCBJUFNfRFlJTkdfQklUKSwKKworIElQU19GSVhFRF9USU1FT1VUX0JJVCA9IDEwLAorIElQU19GSVhFRF9USU1FT1VUID0gKDEgPDwgSVBTX0ZJWEVEX1RJTUVPVVRfQklUKSwKK307CisKK2VudW0gaXBfY29ubnRyYWNrX2V2ZW50cworeworCisgSVBDVF9ORVdfQklUID0gMCwKKyBJUENUX05FVyA9ICgxIDw8IElQQ1RfTkVXX0JJVCksCisKKyBJUENUX1JFTEFURURfQklUID0gMSwKKyBJUENUX1JFTEFURUQgPSAoMSA8PCBJUENUX1JFTEFURURfQklUKSwKKworIElQQ1RfREVTVFJPWV9CSVQgPSAyLAorIElQQ1RfREVTVFJPWSA9ICgxIDw8IElQQ1RfREVTVFJPWV9CSVQpLAorCisgSVBDVF9SRUZSRVNIX0JJVCA9IDMsCisgSVBDVF9SRUZSRVNIID0gKDEgPDwgSVBDVF9SRUZSRVNIX0JJVCksCisKKyBJUENUX1NUQVRVU19CSVQgPSA0LAorIElQQ1RfU1RBVFVTID0gKDEgPDwgSVBDVF9TVEFUVVNfQklUKSwKKworIElQQ1RfUFJPVE9JTkZPX0JJVCA9IDUsCisgSVBDVF9QUk9UT0lORk8gPSAoMSA8PCBJUENUX1BST1RPSU5GT19CSVQpLAorCisgSVBDVF9QUk9UT0lORk9fVk9MQVRJTEVfQklUID0gNiwKKyBJUENUX1BST1RPSU5GT19WT0xBVElMRSA9ICgxIDw8IElQQ1RfUFJPVE9JTkZPX1ZPTEFUSUxFX0JJVCksCisKKyBJUENUX0hFTFBFUl9CSVQgPSA3LAorIElQQ1RfSEVMUEVSID0gKDEgPDwgSVBDVF9IRUxQRVJfQklUKSwKKworIElQQ1RfSEVMUElORk9fQklUID0gOCwKKyBJUENUX0hFTFBJTkZPID0gKDEgPDwgSVBDVF9IRUxQSU5GT19CSVQpLAorCisgSVBDVF9IRUxQSU5GT19WT0xBVElMRV9CSVQgPSA5LAorIElQQ1RfSEVMUElORk9fVk9MQVRJTEUgPSAoMSA8PCBJUENUX0hFTFBJTkZPX1ZPTEFUSUxFX0JJVCksCisKKyBJUENUX05BVElORk9fQklUID0gMTAsCisgSVBDVF9OQVRJTkZPID0gKDEgPDwgSVBDVF9OQVRJTkZPX0JJVCksCisKKyBJUENUX0NPVU5URVJfRklMTElOR19CSVQgPSAxMSwKKyBJUENUX0NPVU5URVJfRklMTElORyA9ICgxIDw8IElQQ1RfQ09VTlRFUl9GSUxMSU5HX0JJVCksCit9OworCitlbnVtIGlwX2Nvbm50cmFja19leHBlY3RfZXZlbnRzIHsKKyBJUEVYUF9ORVdfQklUID0gMCwKKyBJUEVYUF9ORVcgPSAoMSA8PCBJUEVYUF9ORVdfQklUKSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19mdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZjgxNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfZnRwLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX0ZUUF9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfRlRQX0gKKworZW51bSBpcF9jdF9mdHBfdHlwZQoreworCisgSVBfQ1RfRlRQX1BPUlQsCisKKyBJUF9DVF9GVFBfUEFTViwKKworIElQX0NUX0ZUUF9FUFJULAorCisgSVBfQ1RfRlRQX0VQU1YsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3NjdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNTc2OGIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfc2N0cC5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX05GX0NPTk5UUkFDS19TQ1RQX0gKKyNkZWZpbmUgX05GX0NPTk5UUkFDS19TQ1RQX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CisKK2VudW0gc2N0cF9jb25udHJhY2sgeworIFNDVFBfQ09OTlRSQUNLX05PTkUsCisgU0NUUF9DT05OVFJBQ0tfQ0xPU0VELAorIFNDVFBfQ09OTlRSQUNLX0NPT0tJRV9XQUlULAorIFNDVFBfQ09OTlRSQUNLX0NPT0tJRV9FQ0hPRUQsCisgU0NUUF9DT05OVFJBQ0tfRVNUQUJMSVNIRUQsCisgU0NUUF9DT05OVFJBQ0tfU0hVVERPV05fU0VOVCwKKyBTQ1RQX0NPTk5UUkFDS19TSFVURE9XTl9SRUNELAorIFNDVFBfQ09OTlRSQUNLX1NIVVRET1dOX0FDS19TRU5ULAorIFNDVFBfQ09OTlRSQUNLX01BWAorfTsKKworc3RydWN0IGlwX2N0X3NjdHAKK3sKKyBlbnVtIHNjdHBfY29ubnRyYWNrIHN0YXRlOworCisgdV9pbnQzMl90IHZ0YWdbSVBfQ1RfRElSX01BWF07CisgdV9pbnQzMl90IHR0YWdbSVBfQ1RfRElSX01BWF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjI3ZjkwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX3RjcC5oCkBAIC0wLDAgKzEsMzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX05GX0NPTk5UUkFDS19UQ1BfSAorI2RlZmluZSBfTkZfQ09OTlRSQUNLX1RDUF9ICisKK2VudW0gdGNwX2Nvbm50cmFjayB7CisgVENQX0NPTk5UUkFDS19OT05FLAorIFRDUF9DT05OVFJBQ0tfU1lOX1NFTlQsCisgVENQX0NPTk5UUkFDS19TWU5fUkVDViwKKyBUQ1BfQ09OTlRSQUNLX0VTVEFCTElTSEVELAorIFRDUF9DT05OVFJBQ0tfRklOX1dBSVQsCisgVENQX0NPTk5UUkFDS19DTE9TRV9XQUlULAorIFRDUF9DT05OVFJBQ0tfTEFTVF9BQ0ssCisgVENQX0NPTk5UUkFDS19USU1FX1dBSVQsCisgVENQX0NPTk5UUkFDS19DTE9TRSwKKyBUQ1BfQ09OTlRSQUNLX0xJU1RFTiwKKyBUQ1BfQ09OTlRSQUNLX01BWCwKKyBUQ1BfQ09OTlRSQUNLX0lHTk9SRQorfTsKKworI2RlZmluZSBJUF9DVF9UQ1BfRkxBR19XSU5ET1dfU0NBTEUgMHgwMQorCisjZGVmaW5lIElQX0NUX1RDUF9GTEFHX1NBQ0tfUEVSTSAweDAyCisKKyNkZWZpbmUgSVBfQ1RfVENQX0ZMQUdfQ0xPU0VfSU5JVCAweDAzCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMjgyNTQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZfQ09OTlRSQUNLX1RVUExFX0NPTU1PTl9ICisjZGVmaW5lIF9ORl9DT05OVFJBQ0tfVFVQTEVfQ09NTU9OX0gKKworZW51bSBpcF9jb25udHJhY2tfZGlyCit7CisgSVBfQ1RfRElSX09SSUdJTkFMLAorIElQX0NUX0RJUl9SRVBMWSwKKyBJUF9DVF9ESVJfTUFYCit9OworCisjZGVmaW5lIENUSU5GTzJESVIoY3RpbmZvKSAoKGN0aW5mbykgPj0gSVBfQ1RfSVNfUkVQTFkgPyBJUF9DVF9ESVJfUkVQTFkgOiBJUF9DVF9ESVJfT1JJR0lOQUwpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci9uZm5ldGxpbmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU0NGNhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmgKQEAgLTAsMCArMSw4NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTkZORVRMSU5LX0gKKyNkZWZpbmUgX05GTkVUTElOS19ICisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19ORVcgMHgwMDAwMDAwMQorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19VUERBVEUgMHgwMDAwMDAwMgorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19ERVNUUk9ZIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkZfTkVUTElOS19DT05OVFJBQ0tfRVhQX05FVyAweDAwMDAwMDA4CisjZGVmaW5lIE5GX05FVExJTktfQ09OTlRSQUNLX0VYUF9VUERBVEUgMHgwMDAwMDAxMAorI2RlZmluZSBORl9ORVRMSU5LX0NPTk5UUkFDS19FWFBfREVTVFJPWSAweDAwMDAwMDIwCisKK2VudW0gbmZuZXRsaW5rX2dyb3VwcyB7CisgTkZOTEdSUF9OT05FLAorI2RlZmluZSBORk5MR1JQX05PTkUgTkZOTEdSUF9OT05FCisgTkZOTEdSUF9DT05OVFJBQ0tfTkVXLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19ORVcgTkZOTEdSUF9DT05OVFJBQ0tfTkVXCisgTkZOTEdSUF9DT05OVFJBQ0tfVVBEQVRFLAorI2RlZmluZSBORk5MR1JQX0NPTk5UUkFDS19VUERBVEUgTkZOTEdSUF9DT05OVFJBQ0tfVVBEQVRFCisgTkZOTEdSUF9DT05OVFJBQ0tfREVTVFJPWSwKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfREVTVFJPWSBORk5MR1JQX0NPTk5UUkFDS19ERVNUUk9ZCisgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVywKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX05FVyBORk5MR1JQX0NPTk5UUkFDS19FWFBfTkVXCisgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX1VQREFURSwKKyNkZWZpbmUgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX1VQREFURSBORk5MR1JQX0NPTk5UUkFDS19FWFBfVVBEQVRFCisgTkZOTEdSUF9DT05OVFJBQ0tfRVhQX0RFU1RST1ksCisjZGVmaW5lIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ERVNUUk9ZIE5GTkxHUlBfQ09OTlRSQUNLX0VYUF9ERVNUUk9ZCisgX19ORk5MR1JQX01BWCwKK307CisjZGVmaW5lIE5GTkxHUlBfTUFYIChfX05GTkxHUlBfTUFYIC0gMSkKKworc3RydWN0IG5mYXR0cgoreworIHVfaW50MTZfdCBuZmFfbGVuOworIHVfaW50MTZfdCBuZmFfdHlwZTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIE5GTkxfTkZBX05FU1QgMHg4MDAwCisjZGVmaW5lIE5GQV9UWVBFKGF0dHIpICgoYXR0ciktPm5mYV90eXBlICYgMHg3ZmZmKQorCisjZGVmaW5lIE5GQV9BTElHTlRPIDQKKyNkZWZpbmUgTkZBX0FMSUdOKGxlbikgKCgobGVuKSArIE5GQV9BTElHTlRPIC0gMSkgJiB+KE5GQV9BTElHTlRPIC0gMSkpCisjZGVmaW5lIE5GQV9PSyhuZmEsbGVuKSAoKGxlbikgPiAwICYmIChuZmEpLT5uZmFfbGVuID49IHNpemVvZihzdHJ1Y3QgbmZhdHRyKSAgICYmIChuZmEpLT5uZmFfbGVuIDw9IChsZW4pKQorI2RlZmluZSBORkFfTkVYVChuZmEsYXR0cmxlbikgKChhdHRybGVuKSAtPSBORkFfQUxJR04oKG5mYSktPm5mYV9sZW4pLCAgIChzdHJ1Y3QgbmZhdHRyICopKCgoY2hhciAqKShuZmEpKSArIE5GQV9BTElHTigobmZhKS0+bmZhX2xlbikpKQorI2RlZmluZSBORkFfTEVOR1RIKGxlbikgKE5GQV9BTElHTihzaXplb2Yoc3RydWN0IG5mYXR0cikpICsgKGxlbikpCisjZGVmaW5lIE5GQV9TUEFDRShsZW4pIE5GQV9BTElHTihORkFfTEVOR1RIKGxlbikpCisjZGVmaW5lIE5GQV9EQVRBKG5mYSkgKCh2b2lkICopKCgoY2hhciAqKShuZmEpKSArIE5GQV9MRU5HVEgoMCkpKQorI2RlZmluZSBORkFfUEFZTE9BRChuZmEpICgoaW50KSgobmZhKS0+bmZhX2xlbikgLSBORkFfTEVOR1RIKDApKQorI2RlZmluZSBORkFfTkVTVChza2IsIHR5cGUpICAoeyBzdHJ1Y3QgbmZhdHRyICpfX3N0YXJ0ID0gKHN0cnVjdCBuZmF0dHIgKikgKHNrYiktPnRhaWw7ICAgTkZBX1BVVChza2IsIChORk5MX05GQV9ORVNUIHwgdHlwZSksIDAsIE5VTEwpOyAgIF9fc3RhcnQ7IH0pCisjZGVmaW5lIE5GQV9ORVNUX0VORChza2IsIHN0YXJ0KSAgKHsgKHN0YXJ0KS0+bmZhX2xlbiA9ICgoc2tiKS0+dGFpbCAtICh1bnNpZ25lZCBjaGFyICopIChzdGFydCkpOyAgIChza2IpLT5sZW47IH0pCisjZGVmaW5lIE5GQV9ORVNUX0NBTkNFTChza2IsIHN0YXJ0KSAgKHsgaWYgKHN0YXJ0KSAgIHNrYl90cmltKHNrYiwgKHVuc2lnbmVkIGNoYXIgKikgKHN0YXJ0KSAtIChza2IpLT5kYXRhKTsgICAtMTsgfSkKKworc3RydWN0IG5mZ2VubXNnIHsKKyB1X2ludDhfdCBuZmdlbl9mYW1pbHk7CisgdV9pbnQ4X3QgdmVyc2lvbjsKKyB1X2ludDE2X3QgcmVzX2lkOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgTkZORVRMSU5LX1YwIDAKKworI2RlZmluZSBORk1fTkZBKG4pICgoc3RydWN0IG5mYXR0ciAqKSgoKGNoYXIgKikobikpICAgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IG5mZ2VubXNnKSkpKQorI2RlZmluZSBORk1fUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sIHNpemVvZihzdHJ1Y3QgbmZnZW5tc2cpKQorCisjZGVmaW5lIE5GTkxfU1VCU1lTX0lEKHgpICgoeCAmIDB4ZmYwMCkgPj4gOCkKKyNkZWZpbmUgTkZOTF9NU0dfVFlQRSh4KSAoeCAmIDB4MDBmZikKKworI2RlZmluZSBORk5MX1NVQlNZU19OT05FIDAKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LIDEKKyNkZWZpbmUgTkZOTF9TVUJTWVNfQ1RORVRMSU5LX0VYUCAyCisjZGVmaW5lIE5GTkxfU1VCU1lTX1FVRVVFIDMKKyNkZWZpbmUgTkZOTF9TVUJTWVNfVUxPRyA0CisjZGVmaW5lIE5GTkxfU1VCU1lTX0NPVU5UIDUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rX2Nvbm50cmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwNWRkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL25mbmV0bGlua19jb25udHJhY2suaApAQCAtMCwwICsxLDE0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBDT05OVFJBQ0tfTkVUTElOS19ICisjZGVmaW5lIF9JUENPTk5UUkFDS19ORVRMSU5LX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIvbmZuZXRsaW5rLmg+CisKK2VudW0gY250bF9tc2dfdHlwZXMgeworIElQQ1ROTF9NU0dfQ1RfTkVXLAorIElQQ1ROTF9NU0dfQ1RfR0VULAorIElQQ1ROTF9NU0dfQ1RfREVMRVRFLAorIElQQ1ROTF9NU0dfQ1RfR0VUX0NUUlpFUk8sCisKKyBJUENUTkxfTVNHX01BWAorfTsKKworZW51bSBjdG5sX2V4cF9tc2dfdHlwZXMgeworIElQQ1ROTF9NU0dfRVhQX05FVywKKyBJUENUTkxfTVNHX0VYUF9HRVQsCisgSVBDVE5MX01TR19FWFBfREVMRVRFLAorCisgSVBDVE5MX01TR19FWFBfTUFYCit9OworCitlbnVtIGN0YXR0cl90eXBlIHsKKyBDVEFfVU5TUEVDLAorIENUQV9UVVBMRV9PUklHLAorIENUQV9UVVBMRV9SRVBMWSwKKyBDVEFfU1RBVFVTLAorIENUQV9QUk9UT0lORk8sCisgQ1RBX0hFTFAsCisgQ1RBX05BVF9TUkMsCisjZGVmaW5lIENUQV9OQVQgQ1RBX05BVF9TUkMgIAorIENUQV9USU1FT1VULAorIENUQV9NQVJLLAorIENUQV9DT1VOVEVSU19PUklHLAorIENUQV9DT1VOVEVSU19SRVBMWSwKKyBDVEFfVVNFLAorIENUQV9JRCwKKyBDVEFfTkFUX0RTVCwKKyBfX0NUQV9NQVgKK307CisjZGVmaW5lIENUQV9NQVggKF9fQ1RBX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX3R1cGxlIHsKKyBDVEFfVFVQTEVfVU5TUEVDLAorIENUQV9UVVBMRV9JUCwKKyBDVEFfVFVQTEVfUFJPVE8sCisgX19DVEFfVFVQTEVfTUFYCit9OworI2RlZmluZSBDVEFfVFVQTEVfTUFYIChfX0NUQV9UVVBMRV9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9pcCB7CisgQ1RBX0lQX1VOU1BFQywKKyBDVEFfSVBfVjRfU1JDLAorIENUQV9JUF9WNF9EU1QsCisgQ1RBX0lQX1Y2X1NSQywKKyBDVEFfSVBfVjZfRFNULAorIF9fQ1RBX0lQX01BWAorfTsKKyNkZWZpbmUgQ1RBX0lQX01BWCAoX19DVEFfSVBfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfbDRwcm90byB7CisgQ1RBX1BST1RPX1VOU1BFQywKKyBDVEFfUFJPVE9fTlVNLAorIENUQV9QUk9UT19TUkNfUE9SVCwKKyBDVEFfUFJPVE9fRFNUX1BPUlQsCisgQ1RBX1BST1RPX0lDTVBfSUQsCisgQ1RBX1BST1RPX0lDTVBfVFlQRSwKKyBDVEFfUFJPVE9fSUNNUF9DT0RFLAorIENUQV9QUk9UT19JQ01QVjZfSUQsCisgQ1RBX1BST1RPX0lDTVBWNl9UWVBFLAorIENUQV9QUk9UT19JQ01QVjZfQ09ERSwKKyBfX0NUQV9QUk9UT19NQVgKK307CisjZGVmaW5lIENUQV9QUk9UT19NQVggKF9fQ1RBX1BST1RPX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX3Byb3RvaW5mbyB7CisgQ1RBX1BST1RPSU5GT19VTlNQRUMsCisgQ1RBX1BST1RPSU5GT19UQ1AsCisgX19DVEFfUFJPVE9JTkZPX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPSU5GT19NQVggKF9fQ1RBX1BST1RPSU5GT19NQVggLSAxKQorCitlbnVtIGN0YXR0cl9wcm90b2luZm9fdGNwIHsKKyBDVEFfUFJPVE9JTkZPX1RDUF9VTlNQRUMsCisgQ1RBX1BST1RPSU5GT19UQ1BfU1RBVEUsCisgX19DVEFfUFJPVE9JTkZPX1RDUF9NQVgKK307CisjZGVmaW5lIENUQV9QUk9UT0lORk9fVENQX01BWCAoX19DVEFfUFJPVE9JTkZPX1RDUF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9jb3VudGVycyB7CisgQ1RBX0NPVU5URVJTX1VOU1BFQywKKyBDVEFfQ09VTlRFUlNfUEFDS0VUUywKKyBDVEFfQ09VTlRFUlNfQllURVMsCisgQ1RBX0NPVU5URVJTMzJfUEFDS0VUUywKKyBDVEFfQ09VTlRFUlMzMl9CWVRFUywKKyBfX0NUQV9DT1VOVEVSU19NQVgKK307CisjZGVmaW5lIENUQV9DT1VOVEVSU19NQVggKF9fQ1RBX0NPVU5URVJTX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX25hdCB7CisgQ1RBX05BVF9VTlNQRUMsCisgQ1RBX05BVF9NSU5JUCwKKyBDVEFfTkFUX01BWElQLAorIENUQV9OQVRfUFJPVE8sCisgX19DVEFfTkFUX01BWAorfTsKKyNkZWZpbmUgQ1RBX05BVF9NQVggKF9fQ1RBX05BVF9NQVggLSAxKQorCitlbnVtIGN0YXR0cl9wcm90b25hdCB7CisgQ1RBX1BST1RPTkFUX1VOU1BFQywKKyBDVEFfUFJPVE9OQVRfUE9SVF9NSU4sCisgQ1RBX1BST1RPTkFUX1BPUlRfTUFYLAorIF9fQ1RBX1BST1RPTkFUX01BWAorfTsKKyNkZWZpbmUgQ1RBX1BST1RPTkFUX01BWCAoX19DVEFfUFJPVE9OQVRfTUFYIC0gMSkKKworZW51bSBjdGF0dHJfZXhwZWN0IHsKKyBDVEFfRVhQRUNUX1VOU1BFQywKKyBDVEFfRVhQRUNUX01BU1RFUiwKKyBDVEFfRVhQRUNUX1RVUExFLAorIENUQV9FWFBFQ1RfTUFTSywKKyBDVEFfRVhQRUNUX1RJTUVPVVQsCisgQ1RBX0VYUEVDVF9JRCwKKyBDVEFfRVhQRUNUX0hFTFBfTkFNRSwKKyBfX0NUQV9FWFBFQ1RfTUFYCit9OworI2RlZmluZSBDVEFfRVhQRUNUX01BWCAoX19DVEFfRVhQRUNUX01BWCAtIDEpCisKK2VudW0gY3RhdHRyX2hlbHAgeworIENUQV9IRUxQX1VOU1BFQywKKyBDVEFfSEVMUF9OQU1FLAorIF9fQ1RBX0hFTFBfTUFYCit9OworI2RlZmluZSBDVEFfSEVMUF9NQVggKF9fQ1RBX0hFTFBfTUFYIC0gMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0MTgxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveF90YWJsZXMuaApAQCAtMCwwICsxLDEyNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWF9UQUJMRVNfSAorI2RlZmluZSBfWF9UQUJMRVNfSAorCisjZGVmaW5lIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4gMzAKKyNkZWZpbmUgWFRfVEFCTEVfTUFYTkFNRUxFTiAzMgorCitzdHJ1Y3QgeHRfZW50cnlfbWF0Y2gKK3sKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgbWF0Y2hfc2l6ZTsKKworIGNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOworCisgdV9pbnQ4X3QgcmV2aXNpb247CisgfSB1c2VyOworIHN0cnVjdCB7CisgdV9pbnQxNl90IG1hdGNoX3NpemU7CisKKyBzdHJ1Y3QgeHRfbWF0Y2ggKm1hdGNoOworIH0ga2VybmVsOworCisgdV9pbnQxNl90IG1hdGNoX3NpemU7CisgfSB1OworCisgdW5zaWduZWQgY2hhciBkYXRhWzBdOworfTsKKworc3RydWN0IHh0X2VudHJ5X3RhcmdldAoreworIHVuaW9uIHsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCB0YXJnZXRfc2l6ZTsKKworIGNoYXIgbmFtZVtYVF9GVU5DVElPTl9NQVhOQU1FTEVOLTFdOworCisgdV9pbnQ4X3QgcmV2aXNpb247CisgfSB1c2VyOworIHN0cnVjdCB7CisgdV9pbnQxNl90IHRhcmdldF9zaXplOworCisgc3RydWN0IHh0X3RhcmdldCAqdGFyZ2V0OworIH0ga2VybmVsOworCisgdV9pbnQxNl90IHRhcmdldF9zaXplOworIH0gdTsKKworIHVuc2lnbmVkIGNoYXIgZGF0YVswXTsKK307CisKK3N0cnVjdCB4dF9zdGFuZGFyZF90YXJnZXQKK3sKKyBzdHJ1Y3QgeHRfZW50cnlfdGFyZ2V0IHRhcmdldDsKKyBpbnQgdmVyZGljdDsKK307CisKK3N0cnVjdCB4dF9nZXRfcmV2aXNpb24KK3sKKyBjaGFyIG5hbWVbWFRfRlVOQ1RJT05fTUFYTkFNRUxFTi0xXTsKKworIHVfaW50OF90IHJldmlzaW9uOworfTsKKworI2RlZmluZSBYVF9DT05USU5VRSAweEZGRkZGRkZGCisKKyNkZWZpbmUgWFRfUkVUVVJOICgtTkZfUkVQRUFUIC0gMSkKKworc3RydWN0IF94dF9hbGlnbgoreworIHVfaW50OF90IHU4OworIHVfaW50MTZfdCB1MTY7CisgdV9pbnQzMl90IHUzMjsKKyB1X2ludDY0X3QgdTY0OworfTsKKworI2RlZmluZSBYVF9BTElHTihzKSAoKChzKSArIChfX2FsaWdub2ZfXyhzdHJ1Y3QgX3h0X2FsaWduKS0xKSkgICAmIH4oX19hbGlnbm9mX18oc3RydWN0IF94dF9hbGlnbiktMSkpCisKKyNkZWZpbmUgWFRfU1RBTkRBUkRfVEFSR0VUICIiCisKKyNkZWZpbmUgWFRfRVJST1JfVEFSR0VUICJFUlJPUiIKKworI2RlZmluZSBYVF9CQVNFX0NUTCA2NCAgCisKKyNkZWZpbmUgWFRfU09fU0VUX1JFUExBQ0UgKFhUX0JBU0VfQ1RMKQorI2RlZmluZSBYVF9TT19TRVRfQUREX0NPVU5URVJTIChYVF9CQVNFX0NUTCArIDEpCisjZGVmaW5lIFhUX1NPX1NFVF9NQVggWFRfU09fU0VUX0FERF9DT1VOVEVSUworCisjZGVmaW5lIFhUX1NPX0dFVF9JTkZPIChYVF9CQVNFX0NUTCkKKyNkZWZpbmUgWFRfU09fR0VUX0VOVFJJRVMgKFhUX0JBU0VfQ1RMICsgMSkKKyNkZWZpbmUgWFRfU09fR0VUX1JFVklTSU9OX01BVENIIChYVF9CQVNFX0NUTCArIDIpCisjZGVmaW5lIFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgKFhUX0JBU0VfQ1RMICsgMykKKyNkZWZpbmUgWFRfU09fR0VUX01BWCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisKKyNkZWZpbmUgU0VUX0NPVU5URVIoYyxiLHApIGRvIHsgKGMpLmJjbnQgPSAoYik7IChjKS5wY250ID0gKHApOyB9IHdoaWxlKDApCisjZGVmaW5lIEFERF9DT1VOVEVSKGMsYixwKSBkbyB7IChjKS5iY250ICs9IChiKTsgKGMpLnBjbnQgKz0gKHApOyB9IHdoaWxlKDApCisKK3N0cnVjdCB4dF9jb3VudGVycworeworIHVfaW50NjRfdCBwY250LCBiY250OworfTsKKworc3RydWN0IHh0X2NvdW50ZXJzX2luZm8KK3sKKworIGNoYXIgbmFtZVtYVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnNbMF07Cit9OworCisjZGVmaW5lIFhUX0lOVl9QUk9UTyAweDQwICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NMQVNTSUZZLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5ZjYxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9DTEFTU0lGWV9ICisjZGVmaW5lIF9YVF9DTEFTU0lGWV9ICisKK3N0cnVjdCB4dF9jbGFzc2lmeV90YXJnZXRfaW5mbyB7CisgdV9pbnQzMl90IHByaW9yaXR5OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5NQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIzMGVlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTk1BUksuaApAQCAtMCwwICsxLDI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9DT05OTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfQ09OTk1BUktfSF90YXJnZXQKKworZW51bSB7CisgWFRfQ09OTk1BUktfU0VUID0gMCwKKyBYVF9DT05OTUFSS19TQVZFLAorIFhUX0NPTk5NQVJLX1JFU1RPUkUKK307CisKK3N0cnVjdCB4dF9jb25ubWFya190YXJnZXRfaW5mbyB7CisgdW5zaWduZWQgbG9uZyBtYXJrOworIHVuc2lnbmVkIGxvbmcgbWFzazsKKyB1X2ludDhfdCBtb2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X0NPTk5TRUNNQVJLLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWUxNmIyZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfQ09OTlNFQ01BUksuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9DT05OU0VDTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfQ09OTlNFQ01BUktfSF90YXJnZXQKKworZW51bSB7CisgQ09OTlNFQ01BUktfU0FWRSA9IDEsCisgQ09OTlNFQ01BUktfUkVTVE9SRSwKK307CisKK3N0cnVjdCB4dF9jb25uc2VjbWFya190YXJnZXRfaW5mbyB7CisgdV9pbnQ4X3QgbW9kZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNThjOTdjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9NQVJLLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfTUFSS19IX3RhcmdldAorCitzdHJ1Y3QgeHRfbWFya190YXJnZXRfaW5mbyB7CisgdW5zaWduZWQgbG9uZyBtYXJrOworfTsKKworZW51bSB7CisgWFRfTUFSS19TRVQ9MCwKKyBYVF9NQVJLX0FORCwKKyBYVF9NQVJLX09SLAorfTsKKworc3RydWN0IHh0X21hcmtfdGFyZ2V0X2luZm9fdjEgeworIHVuc2lnbmVkIGxvbmcgbWFyazsKKyB1X2ludDhfdCBtb2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfTkZRVUVVRS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFmMGNhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9ORlFfVEFSR0VUX0gKKyNkZWZpbmUgX1hUX05GUV9UQVJHRVRfSAorCitzdHJ1Y3QgeHRfTkZRX2luZm8geworIHVfaW50MTZfdCBxdWV1ZW51bTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X1NFQ01BUksuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hOTFkMzJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9TRUNNQVJLLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfU0VDTUFSS19IX3RhcmdldAorI2RlZmluZSBfWFRfU0VDTUFSS19IX3RhcmdldAorCisjZGVmaW5lIFNFQ01BUktfTU9ERV9TRUwgMHgwMSAgCisjZGVmaW5lIFNFQ01BUktfU0VMQ1RYX01BWCAyNTYKKworc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X3NlbGludXhfaW5mbyB7CisgdV9pbnQzMl90IHNlbHNpZDsKKyBjaGFyIHNlbGN0eFtTRUNNQVJLX1NFTENUWF9NQVhdOworfTsKKworc3RydWN0IHh0X3NlY21hcmtfdGFyZ2V0X2luZm8geworIHVfaW50OF90IG1vZGU7CisgdW5pb24geworIHN0cnVjdCB4dF9zZWNtYXJrX3RhcmdldF9zZWxpbnV4X2luZm8gc2VsOworIH0gdTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb21tZW50LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2NvbW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZWEyNmZjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb21tZW50LmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfQ09NTUVOVF9ICisjZGVmaW5lIF9YVF9DT01NRU5UX0gKKworI2RlZmluZSBYVF9NQVhfQ09NTUVOVF9MRU4gMjU2CisKK3N0cnVjdCB4dF9jb21tZW50X2luZm8geworIHVuc2lnbmVkIGNoYXIgY29tbWVudFtYVF9NQVhfQ09NTUVOVF9MRU5dOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm5ieXRlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44Y2M4MGUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25uYnl0ZXMuaApAQCAtMCwwICsxLDM2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9DT05OQllURVNfSAorI2RlZmluZSBfWFRfQ09OTkJZVEVTX0gKKworZW51bSB4dF9jb25uYnl0ZXNfd2hhdCB7CisgWFRfQ09OTkJZVEVTX1BLVFMsCisgWFRfQ09OTkJZVEVTX0JZVEVTLAorIFhUX0NPTk5CWVRFU19BVkdQS1QsCit9OworCitlbnVtIHh0X2Nvbm5ieXRlc19kaXJlY3Rpb24geworIFhUX0NPTk5CWVRFU19ESVJfT1JJR0lOQUwsCisgWFRfQ09OTkJZVEVTX0RJUl9SRVBMWSwKKyBYVF9DT05OQllURVNfRElSX0JPVEgsCit9OworCitzdHJ1Y3QgeHRfY29ubmJ5dGVzX2luZm8KK3sKKyBzdHJ1Y3QgeworIGFsaWduZWRfdTY0IGZyb207CisgYWxpZ25lZF91NjQgdG87CisgfSBjb3VudDsKKyB1X2ludDhfdCB3aGF0OworIHVfaW50OF90IGRpcmVjdGlvbjsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubm1hcmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjFlMDNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9jb25ubWFyay5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NPTk5NQVJLX0gKKyNkZWZpbmUgX1hUX0NPTk5NQVJLX0gKKworc3RydWN0IHh0X2Nvbm5tYXJrX2luZm8geworIHVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfY29ubnRyYWNrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhOWJkZTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2Nvbm50cmFjay5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0NPTk5UUkFDS19ICisjZGVmaW5lIF9YVF9DT05OVFJBQ0tfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL25mX2Nvbm50cmFja190dXBsZV9jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9CSVQoY3RpbmZvKSAoMSA8PCAoKGN0aW5mbyklSVBfQ1RfSVNfUkVQTFkrMSkpCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9JTlZBTElEICgxIDw8IDApCisKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRFX1NOQVQgKDEgPDwgKElQX0NUX05VTUJFUiArIDEpKQorI2RlZmluZSBYVF9DT05OVFJBQ0tfU1RBVEVfRE5BVCAoMSA8PCAoSVBfQ1RfTlVNQkVSICsgMikpCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURV9VTlRSQUNLRUQgKDEgPDwgKElQX0NUX05VTUJFUiArIDMpKQorCisjZGVmaW5lIFhUX0NPTk5UUkFDS19TVEFURSAweDAxCisjZGVmaW5lIFhUX0NPTk5UUkFDS19QUk9UTyAweDAyCisjZGVmaW5lIFhUX0NPTk5UUkFDS19PUklHU1JDIDB4MDQKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX09SSUdEU1QgMHgwOAorI2RlZmluZSBYVF9DT05OVFJBQ0tfUkVQTFNSQyAweDEwCisjZGVmaW5lIFhUX0NPTk5UUkFDS19SRVBMRFNUIDB4MjAKKyNkZWZpbmUgWFRfQ09OTlRSQUNLX1NUQVRVUyAweDQwCisjZGVmaW5lIFhUX0NPTk5UUkFDS19FWFBJUkVTIDB4ODAKKworc3RydWN0IGlwX2Nvbm50cmFja19vbGRfdHVwbGUKK3sKKyBzdHJ1Y3QgeworIF9fdTMyIGlwOworIHVuaW9uIHsKKyBfX3UxNiBhbGw7CisgfSB1OworIH0gc3JjOworCisgc3RydWN0IHsKKyBfX3UzMiBpcDsKKyB1bmlvbiB7CisgX191MTYgYWxsOworIH0gdTsKKworIF9fdTE2IHByb3RvbnVtOworIH0gZHN0OworfTsKKworc3RydWN0IHh0X2Nvbm50cmFja19pbmZvCit7CisgdW5zaWduZWQgaW50IHN0YXRlbWFzaywgc3RhdHVzbWFzazsKKworIHN0cnVjdCBpcF9jb25udHJhY2tfb2xkX3R1cGxlIHR1cGxlW0lQX0NUX0RJUl9NQVhdOworIHN0cnVjdCBpbl9hZGRyIHNpcG1za1tJUF9DVF9ESVJfTUFYXSwgZGlwbXNrW0lQX0NUX0RJUl9NQVhdOworCisgdW5zaWduZWQgbG9uZyBleHBpcmVzX21pbiwgZXhwaXJlc19tYXg7CisKKyB1X2ludDhfdCBmbGFnczsKKworIHVfaW50OF90IGludmZsYWdzOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2RjY3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44YTEwZTY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9kY2NwLmgKQEAgLTAsMCArMSwzNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfRENDUF9IXworI2RlZmluZSBfWFRfRENDUF9IXworCisjZGVmaW5lIFhUX0RDQ1BfU1JDX1BPUlRTIDB4MDEKKyNkZWZpbmUgWFRfRENDUF9ERVNUX1BPUlRTIDB4MDIKKyNkZWZpbmUgWFRfRENDUF9UWVBFIDB4MDQKKyNkZWZpbmUgWFRfRENDUF9PUFRJT04gMHgwOAorCisjZGVmaW5lIFhUX0RDQ1BfVkFMSURfRkxBR1MgMHgwZgorCitzdHJ1Y3QgeHRfZGNjcF9pbmZvIHsKKyB1X2ludDE2X3QgZHB0c1syXTsKKyB1X2ludDE2X3Qgc3B0c1syXTsKKworIHVfaW50MTZfdCBmbGFnczsKKyB1X2ludDE2X3QgaW52ZmxhZ3M7CisKKyB1X2ludDE2X3QgdHlwZW1hc2s7CisgdV9pbnQ4X3Qgb3B0aW9uOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfZXNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3NWM0N2UKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX0VTUF9ICisjZGVmaW5lIF9YVF9FU1BfSAorCitzdHJ1Y3QgeHRfZXNwCit7CisgdV9pbnQzMl90IHNwaXNbMl07CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIFhUX0VTUF9JTlZfU1BJIDB4MDEgIAorI2RlZmluZSBYVF9FU1BfSU5WX01BU0sgMHgwMSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZmYTQ1MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfaGVscGVyLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfSEVMUEVSX0gKKyNkZWZpbmUgX1hUX0hFTFBFUl9ICisKK3N0cnVjdCB4dF9oZWxwZXJfaW5mbyB7CisgaW50IGludmVydDsKKyBjaGFyIG5hbWVbMzBdOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9sZW5ndGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkYjZjNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfTEVOR1RIX0gKKyNkZWZpbmUgX1hUX0xFTkdUSF9ICisKK3N0cnVjdCB4dF9sZW5ndGhfaW5mbyB7CisgdV9pbnQxNl90IG1pbiwgbWF4OworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9saW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZmIzN2YKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X2xpbWl0LmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUkFURV9ICisjZGVmaW5lIF9YVF9SQVRFX0gKKworI2RlZmluZSBYVF9MSU1JVF9TQ0FMRSAxMDAwMAorCitzdHJ1Y3QgeHRfcmF0ZWluZm8geworIHVfaW50MzJfdCBhdmc7CisgdV9pbnQzMl90IGJ1cnN0OworCisgdW5zaWduZWQgbG9uZyBwcmV2OworIHVfaW50MzJfdCBjcmVkaXQ7CisgdV9pbnQzMl90IGNyZWRpdF9jYXAsIGNvc3Q7CisKKyBzdHJ1Y3QgeHRfcmF0ZWluZm8gKm1hc3RlcjsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFjLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X21hYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI0NzNhYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X21hYy5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX01BQ19ICisjZGVmaW5lIF9YVF9NQUNfSAorCitzdHJ1Y3QgeHRfbWFjX2luZm8geworIHVuc2lnbmVkIGNoYXIgc3JjYWRkcltFVEhfQUxFTl07CisgaW50IGludmVydDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9tYXJrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk2OTlkZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbWFyay5oCkBAIC0wLDAgKzEsMjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX01BUktfSAorI2RlZmluZSBfWFRfTUFSS19ICisKK3N0cnVjdCB4dF9tYXJrX2luZm8geworIHVuc2lnbmVkIGxvbmcgbWFyaywgbWFzazsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfbXVsdGlwb3J0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNzk3OWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X211bHRpcG9ydC5oCkBAIC0wLDAgKzEsNDAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX01VTFRJUE9SVF9ICisjZGVmaW5lIF9YVF9NVUxUSVBPUlRfSAorCitlbnVtIHh0X211bHRpcG9ydF9mbGFncworeworIFhUX01VTFRJUE9SVF9TT1VSQ0UsCisgWFRfTVVMVElQT1JUX0RFU1RJTkFUSU9OLAorIFhUX01VTFRJUE9SVF9FSVRIRVIKK307CisKKyNkZWZpbmUgWFRfTVVMVElfUE9SVFMgMTUKKworc3RydWN0IHh0X211bHRpcG9ydAoreworIHVfaW50OF90IGZsYWdzOworIHVfaW50OF90IGNvdW50OworIHVfaW50MTZfdCBwb3J0c1tYVF9NVUxUSV9QT1JUU107Cit9OworCitzdHJ1Y3QgeHRfbXVsdGlwb3J0X3YxCit7CisgdV9pbnQ4X3QgZmxhZ3M7CisgdV9pbnQ4X3QgY291bnQ7CisgdV9pbnQxNl90IHBvcnRzW1hUX01VTFRJX1BPUlRTXTsKKyB1X2ludDhfdCBwZmxhZ3NbWFRfTVVMVElfUE9SVFNdOworIHVfaW50OF90IGludmVydDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMGNhMDMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9waHlzZGV2LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUEhZU0RFVl9ICisjZGVmaW5lIF9YVF9QSFlTREVWX0gKKworI2RlZmluZSBYVF9QSFlTREVWX09QX0lOIDB4MDEKKyNkZWZpbmUgWFRfUEhZU0RFVl9PUF9PVVQgMHgwMgorI2RlZmluZSBYVF9QSFlTREVWX09QX0JSSURHRUQgMHgwNAorI2RlZmluZSBYVF9QSFlTREVWX09QX0lTSU4gMHgwOAorI2RlZmluZSBYVF9QSFlTREVWX09QX0lTT1VUIDB4MTAKKyNkZWZpbmUgWFRfUEhZU0RFVl9PUF9NQVNLICgweDIwIC0gMSkKKworc3RydWN0IHh0X3BoeXNkZXZfaW5mbyB7CisgY2hhciBwaHlzaW5kZXZbSUZOQU1TSVpdOworIGNoYXIgaW5fbWFza1tJRk5BTVNJWl07CisgY2hhciBwaHlzb3V0ZGV2W0lGTkFNU0laXTsKKyBjaGFyIG91dF9tYXNrW0lGTkFNU0laXTsKKyB1X2ludDhfdCBpbnZlcnQ7CisgdV9pbnQ4X3QgYml0bWFzazsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9wa3R0eXBlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMjUyN2I4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9wa3R0eXBlLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfUEtUVFlQRV9ICisjZGVmaW5lIF9YVF9QS1RUWVBFX0gKKworc3RydWN0IHh0X3BrdHR5cGVfaW5mbyB7CisgaW50IHBrdHR5cGU7CisgaW50IGludmVydDsKK307CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcXVvdGEuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMzQ3NTJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9xdW90YS5oCkBAIC0wLDAgKzEsMjcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1FVT1RBX0gKKyNkZWZpbmUgX1hUX1FVT1RBX0gKKworZW51bSB4dF9xdW90YV9mbGFncyB7CisgWFRfUVVPVEFfSU5WRVJUID0gMHgxLAorfTsKKyNkZWZpbmUgWFRfUVVPVEFfTUFTSyAweDEKKworc3RydWN0IHh0X3F1b3RhX2luZm8geworIHVfaW50MzJfdCBmbGFnczsKKyB1X2ludDMyX3QgcGFkOworIGFsaWduZWRfdTY0IHF1b3RhOworIHN0cnVjdCB4dF9xdW90YV9pbmZvICptYXN0ZXI7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfcmVhbG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYTJhM2NmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1JFQUxNX0gKKyNkZWZpbmUgX1hUX1JFQUxNX0gKKworc3RydWN0IHh0X3JlYWxtX2luZm8geworIHVfaW50MzJfdCBpZDsKKyB1X2ludDMyX3QgbWFzazsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjc5YzNiNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc2N0cC5oCkBAIC0wLDAgKzEsNjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1NDVFBfSF8KKyNkZWZpbmUgX1hUX1NDVFBfSF8KKworI2RlZmluZSBYVF9TQ1RQX1NSQ19QT1JUUyAweDAxCisjZGVmaW5lIFhUX1NDVFBfREVTVF9QT1JUUyAweDAyCisjZGVmaW5lIFhUX1NDVFBfQ0hVTktfVFlQRVMgMHgwNAorCisjZGVmaW5lIFhUX1NDVFBfVkFMSURfRkxBR1MgMHgwNworCisjZGVmaW5lIEVMRU1DT1VOVCh4KSAoc2l6ZW9mKHgpL3NpemVvZih4WzBdKSkKKworc3RydWN0IHh0X3NjdHBfZmxhZ19pbmZvIHsKKyB1X2ludDhfdCBjaHVua3R5cGU7CisgdV9pbnQ4X3QgZmxhZzsKKyB1X2ludDhfdCBmbGFnX21hc2s7Cit9OworCisjZGVmaW5lIFhUX05VTV9TQ1RQX0ZMQUdTIDQKKworc3RydWN0IHh0X3NjdHBfaW5mbyB7CisgdV9pbnQxNl90IGRwdHNbMl07CisgdV9pbnQxNl90IHNwdHNbMl07CisKKyB1X2ludDMyX3QgY2h1bmttYXBbMjU2IC8gc2l6ZW9mICh1X2ludDMyX3QpXTsKKworI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FOWSAweDAxICAKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9BTEwgMHgwMiAgCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfT05MWSAweDA0ICAKKworIHVfaW50MzJfdCBjaHVua19tYXRjaF90eXBlOworIHN0cnVjdCB4dF9zY3RwX2ZsYWdfaW5mbyBmbGFnX2luZm9bWFRfTlVNX1NDVFBfRkxBR1NdOworIGludCBmbGFnX2NvdW50OworCisgdV9pbnQzMl90IGZsYWdzOworIHVfaW50MzJfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgYnl0ZXModHlwZSkgKHNpemVvZih0eXBlKSAqIDgpCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVQoY2h1bmttYXAsIHR5cGUpICAgZG8geyAgIGNodW5rbWFwW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSB8PSAgIDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfQ0xFQVIoY2h1bmttYXAsIHR5cGUpICAgZG8geyAgIGNodW5rbWFwW3R5cGUgLyBieXRlcyh1X2ludDMyX3QpXSAmPSAgIH4oMSA8PCAodHlwZSAlIGJ5dGVzKHVfaW50MzJfdCkpKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfSVNfU0VUKGNodW5rbWFwLCB0eXBlKSAgKHsgICAoY2h1bmttYXBbdHlwZSAvIGJ5dGVzICh1X2ludDMyX3QpXSAmICAgKDEgPDwgKHR5cGUgJSBieXRlcyAodV9pbnQzMl90KSkpKSA/IDE6IDA7ICB9KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfUkVTRVQoY2h1bmttYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBFTEVNQ09VTlQoY2h1bmttYXApOyBpKyspICAgY2h1bmttYXBbaV0gPSAwOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9TRVRfQUxMKGNodW5rbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSAgIGNodW5rbWFwW2ldID0gfjA7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgRUxFTUNPVU5UKGNodW5rbWFwKTsgaSsrKSAgIGRlc3RtYXBbaV0gPSBzcmNtYXBbaV07ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0NMRUFSKGNodW5rbWFwKSAgKHsgICBpbnQgaTsgICBpbnQgZmxhZyA9IDE7ICAgZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgeyAgIGlmIChjaHVua21hcFtpXSkgeyAgIGZsYWcgPSAwOyAgIGJyZWFrOyAgIH0gICB9ICAgZmxhZzsgIH0pCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19BTExfU0VUKGNodW5rbWFwKSAgKHsgICBpbnQgaTsgICBpbnQgZmxhZyA9IDE7ICAgZm9yIChpID0gMDsgaSA8IEVMRU1DT1VOVChjaHVua21hcCk7IGkrKykgeyAgIGlmIChjaHVua21hcFtpXSAhPSB+MCkgeyAgIGZsYWcgPSAwOyAgIGJyZWFrOyAgIH0gICB9ICAgZmxhZzsgIH0pCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3N0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjc1NDc3NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGUuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9TVEFURV9ICisjZGVmaW5lIF9YVF9TVEFURV9ICisKKyNkZWZpbmUgWFRfU1RBVEVfQklUKGN0aW5mbykgKDEgPDwgKChjdGluZm8pJUlQX0NUX0lTX1JFUExZKzEpKQorI2RlZmluZSBYVF9TVEFURV9JTlZBTElEICgxIDw8IDApCisKKyNkZWZpbmUgWFRfU1RBVEVfVU5UUkFDS0VEICgxIDw8IChJUF9DVF9OVU1CRVIgKyAxKSkKKworc3RydWN0IHh0X3N0YXRlX2luZm8KK3sKKyB1bnNpZ25lZCBpbnQgc3RhdGVtYXNrOworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdGF0aXN0aWMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk5YjBhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RhdGlzdGljLmgKQEAgLTAsMCArMSw0MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfU1RBVElTVElDX0gKKyNkZWZpbmUgX1hUX1NUQVRJU1RJQ19ICisKK2VudW0geHRfc3RhdGlzdGljX21vZGUgeworIFhUX1NUQVRJU1RJQ19NT0RFX1JBTkRPTSwKKyBYVF9TVEFUSVNUSUNfTU9ERV9OVEgsCisgX19YVF9TVEFUSVNUSUNfTU9ERV9NQVgKK307CisjZGVmaW5lIFhUX1NUQVRJU1RJQ19NT0RFX01BWCAoX19YVF9TVEFUSVNUSUNfTU9ERV9NQVggLSAxKQorCitlbnVtIHh0X3N0YXRpc3RpY19mbGFncyB7CisgWFRfU1RBVElTVElDX0lOVkVSVCA9IDB4MSwKK307CisjZGVmaW5lIFhUX1NUQVRJU1RJQ19NQVNLIDB4MQorCitzdHJ1Y3QgeHRfc3RhdGlzdGljX2luZm8geworIHVfaW50MTZfdCBtb2RlOworIHVfaW50MTZfdCBmbGFnczsKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyB1X2ludDMyX3QgcHJvYmFiaWxpdHk7CisgfSByYW5kb207Cisgc3RydWN0IHsKKyB1X2ludDMyX3QgZXZlcnk7CisgdV9pbnQzMl90IHBhY2tldDsKKyB1X2ludDMyX3QgY291bnQ7CisgfSBudGg7CisgfSB1OworIHN0cnVjdCB4dF9zdGF0aXN0aWNfaW5mbyAqbWFzdGVyIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF9zdHJpbmcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTAxMDE4ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfc3RyaW5nLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfWFRfU1RSSU5HX0gKKyNkZWZpbmUgX1hUX1NUUklOR19ICisKKyNkZWZpbmUgWFRfU1RSSU5HX01BWF9QQVRURVJOX1NJWkUgMTI4CisjZGVmaW5lIFhUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkUgMTYKKworc3RydWN0IHh0X3N0cmluZ19pbmZvCit7CisgdV9pbnQxNl90IGZyb21fb2Zmc2V0OworIHVfaW50MTZfdCB0b19vZmZzZXQ7CisgY2hhciBhbGdvW1hUX1NUUklOR19NQVhfQUxHT19OQU1FX1NJWkVdOworIGNoYXIgcGF0dGVybltYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRV07CisgdV9pbnQ4X3QgcGF0bGVuOworIHVfaW50OF90IGludmVydDsKKyBzdHJ1Y3QgdHNfY29uZmlnIF9fYXR0cmlidXRlX18oKGFsaWduZWQoOCkpKSAqY29uZmlnOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcG1zcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2RlMGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlci94dF90Y3Btc3MuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9YVF9UQ1BNU1NfTUFUQ0hfSAorI2RlZmluZSBfWFRfVENQTVNTX01BVENIX0gKKworc3RydWN0IHh0X3RjcG1zc19tYXRjaF9pbmZvIHsKKyB1X2ludDE2X3QgbXNzX21pbiwgbXNzX21heDsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3NmZmZmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hUX1RDUFVEUF9ICisjZGVmaW5lIF9YVF9UQ1BVRFBfSAorCitzdHJ1Y3QgeHRfdGNwCit7CisgdV9pbnQxNl90IHNwdHNbMl07CisgdV9pbnQxNl90IGRwdHNbMl07CisgdV9pbnQ4X3Qgb3B0aW9uOworIHVfaW50OF90IGZsZ19tYXNrOworIHVfaW50OF90IGZsZ19jbXA7CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIFhUX1RDUF9JTlZfU1JDUFQgMHgwMSAgCisjZGVmaW5lIFhUX1RDUF9JTlZfRFNUUFQgMHgwMiAgCisjZGVmaW5lIFhUX1RDUF9JTlZfRkxBR1MgMHgwNCAgCisjZGVmaW5lIFhUX1RDUF9JTlZfT1BUSU9OIDB4MDggIAorI2RlZmluZSBYVF9UQ1BfSU5WX01BU0sgMHgwRiAgCisKK3N0cnVjdCB4dF91ZHAKK3sKKyB1X2ludDE2X3Qgc3B0c1syXTsKKyB1X2ludDE2X3QgZHB0c1syXTsKKyB1X2ludDhfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgWFRfVURQX0lOVl9TUkNQVCAweDAxICAKKyNkZWZpbmUgWFRfVURQX0lOVl9EU1RQVCAweDAyICAKKyNkZWZpbmUgWFRfVURQX0lOVl9NQVNLIDB4MDMgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA4NTY5ZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKyNkZWZpbmUgX19MSU5VWF9BUlBfTkVURklMVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorCisjZGVmaW5lIE5GX0FSUCAwCisKKyNkZWZpbmUgTkZfQVJQX0lOIDAKKyNkZWZpbmUgTkZfQVJQX09VVCAxCisjZGVmaW5lIE5GX0FSUF9GT1JXQVJEIDIKKyNkZWZpbmUgTkZfQVJQX05VTUhPT0tTIDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2FycC9hcnBfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjY1YTM0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYXJwL2FycF90YWJsZXMuaApAQCAtMCwwICsxLDE1OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfQVJQVEFCTEVTX0gKKyNkZWZpbmUgX0FSUFRBQkxFU19ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9hcnAuaD4KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94X3RhYmxlcy5oPgorCisjZGVmaW5lIEFSUFRfRlVOQ1RJT05fTUFYTkFNRUxFTiBYVF9GVU5DVElPTl9NQVhOQU1FTEVOCisjZGVmaW5lIEFSUFRfVEFCTEVfTUFYTkFNRUxFTiBYVF9UQUJMRV9NQVhOQU1FTEVOCisjZGVmaW5lIGFycHRfdGFyZ2V0IHh0X3RhcmdldAorI2RlZmluZSBhcnB0X3RhYmxlIHh0X3RhYmxlCisKKyNkZWZpbmUgQVJQVF9ERVZfQUREUl9MRU5fTUFYIDE2CisKK3N0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyB7CisgY2hhciBhZGRyW0FSUFRfREVWX0FERFJfTEVOX01BWF07CisgY2hhciBtYXNrW0FSUFRfREVWX0FERFJfTEVOX01BWF07Cit9OworCitzdHJ1Y3QgYXJwdF9hcnAgeworCisgc3RydWN0IGluX2FkZHIgc3JjLCB0Z3Q7CisKKyBzdHJ1Y3QgaW5fYWRkciBzbXNrLCB0bXNrOworCisgdV9pbnQ4X3QgYXJobG4sIGFyaGxuX21hc2s7Cisgc3RydWN0IGFycHRfZGV2YWRkcl9pbmZvIHNyY19kZXZhZGRyOworIHN0cnVjdCBhcnB0X2RldmFkZHJfaW5mbyB0Z3RfZGV2YWRkcjsKKworIHVfaW50MTZfdCBhcnBvcCwgYXJwb3BfbWFzazsKKworIHVfaW50MTZfdCBhcmhyZCwgYXJocmRfbWFzazsKKyB1X2ludDE2X3QgYXJwcm8sIGFycHJvX21hc2s7CisKKyBjaGFyIGluaWZhY2VbSUZOQU1TSVpdLCBvdXRpZmFjZVtJRk5BTVNJWl07CisgdW5zaWduZWQgY2hhciBpbmlmYWNlX21hc2tbSUZOQU1TSVpdLCBvdXRpZmFjZV9tYXNrW0lGTkFNU0laXTsKKworIHVfaW50OF90IGZsYWdzOworCisgdV9pbnQxNl90IGludmZsYWdzOworfTsKKworI2RlZmluZSBhcnB0X2VudHJ5X3RhcmdldCB4dF9lbnRyeV90YXJnZXQKKyNkZWZpbmUgYXJwdF9zdGFuZGFyZF90YXJnZXQgeHRfc3RhbmRhcmRfdGFyZ2V0CisKKyNkZWZpbmUgQVJQVF9GX01BU0sgMHgwMCAgCisKKyNkZWZpbmUgQVJQVF9JTlZfVklBX0lOIDB4MDAwMSAgCisjZGVmaW5lIEFSUFRfSU5WX1ZJQV9PVVQgMHgwMDAyICAKKyNkZWZpbmUgQVJQVF9JTlZfU1JDSVAgMHgwMDA0ICAKKyNkZWZpbmUgQVJQVF9JTlZfVEdUSVAgMHgwMDA4ICAKKyNkZWZpbmUgQVJQVF9JTlZfU1JDREVWQUREUiAweDAwMTAgIAorI2RlZmluZSBBUlBUX0lOVl9UR1RERVZBRERSIDB4MDAyMCAgCisjZGVmaW5lIEFSUFRfSU5WX0FSUE9QIDB4MDA0MCAgCisjZGVmaW5lIEFSUFRfSU5WX0FSUEhSRCAweDAwODAgIAorI2RlZmluZSBBUlBUX0lOVl9BUlBQUk8gMHgwMTAwICAKKyNkZWZpbmUgQVJQVF9JTlZfQVJQSExOIDB4MDIwMCAgCisjZGVmaW5lIEFSUFRfSU5WX01BU0sgMHgwM0ZGICAKKworc3RydWN0IGFycHRfZW50cnkKK3sKKyBzdHJ1Y3QgYXJwdF9hcnAgYXJwOworCisgdV9pbnQxNl90IHRhcmdldF9vZmZzZXQ7CisKKyB1X2ludDE2X3QgbmV4dF9vZmZzZXQ7CisKKyB1bnNpZ25lZCBpbnQgY29tZWZyb207CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgY291bnRlcnM7CisKKyB1bnNpZ25lZCBjaGFyIGVsZW1zWzBdOworfTsKKworI2RlZmluZSBBUlBUX0NUTF9PRkZTRVQgMzIKKyNkZWZpbmUgQVJQVF9CQVNFX0NUTCAoWFRfQkFTRV9DVEwrQVJQVF9DVExfT0ZGU0VUKQorCisjZGVmaW5lIEFSUFRfU09fU0VUX1JFUExBQ0UgKFhUX1NPX1NFVF9SRVBMQUNFK0FSUFRfQ1RMX09GRlNFVCkKKyNkZWZpbmUgQVJQVF9TT19TRVRfQUREX0NPVU5URVJTIChYVF9TT19TRVRfQUREX0NPVU5URVJTK0FSUFRfQ1RMX09GRlNFVCkKKyNkZWZpbmUgQVJQVF9TT19TRVRfTUFYIChYVF9TT19TRVRfTUFYK0FSUFRfQ1RMX09GRlNFVCkKKworI2RlZmluZSBBUlBUX1NPX0dFVF9JTkZPIChYVF9TT19HRVRfSU5GTytBUlBUX0NUTF9PRkZTRVQpCisjZGVmaW5lIEFSUFRfU09fR0VUX0VOVFJJRVMgKFhUX1NPX0dFVF9FTlRSSUVTK0FSUFRfQ1RMX09GRlNFVCkKKworI2RlZmluZSBBUlBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgKFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQrQVJQVF9DVExfT0ZGU0VUKQorI2RlZmluZSBBUlBUX1NPX0dFVF9NQVggKFhUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQrQVJQVF9DVExfT0ZGU0VUKQorCisjZGVmaW5lIEFSUFRfQ09OVElOVUUgWFRfQ09OVElOVUUKKworI2RlZmluZSBBUlBUX1JFVFVSTiBYVF9SRVRVUk4KKworc3RydWN0IGFycHRfZ2V0aW5mbworeworCisgY2hhciBuYW1lW0FSUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKyB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9BUlBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9BUlBfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisgdW5zaWduZWQgaW50IHNpemU7Cit9OworCitzdHJ1Y3QgYXJwdF9yZXBsYWNlCit7CisKKyBjaGFyIG5hbWVbQVJQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworIHVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworIHVuc2lnbmVkIGludCBzaXplOworCisgdW5zaWduZWQgaW50IGhvb2tfZW50cnlbTkZfQVJQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCB1bmRlcmZsb3dbTkZfQVJQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgX191c2VyICpjb3VudGVyczsKKworIHN0cnVjdCBhcnB0X2VudHJ5IGVudHJpZXNbMF07Cit9OworCisjZGVmaW5lIGFycHRfY291bnRlcnNfaW5mbyB4dF9jb3VudGVyc19pbmZvCisKK3N0cnVjdCBhcnB0X2dldF9lbnRyaWVzCit7CisKKyBjaGFyIG5hbWVbQVJQVF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCBzaXplOworCisgc3RydWN0IGFycHRfZW50cnkgZW50cnl0YWJsZVswXTsKK307CisKKyNkZWZpbmUgQVJQVF9TVEFOREFSRF9UQVJHRVQgWFRfU1RBTkRBUkRfVEFSR0VUCisKKyNkZWZpbmUgQVJQVF9FUlJPUl9UQVJHRVQgWFRfRVJST1JfVEFSR0VUCisKKyNkZWZpbmUgQVJQVF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSAgKHsgICB1bnNpZ25lZCBpbnQgX19pOyAgIGludCBfX3JldCA9IDA7ICAgc3RydWN0IGFycHRfZW50cnkgKl9fZW50cnk7ICAgICBmb3IgKF9faSA9IDA7IF9faSA8IChzaXplKTsgX19pICs9IF9fZW50cnktPm5leHRfb2Zmc2V0KSB7ICAgX19lbnRyeSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgX19yZXQgPSBmbihfX2VudHJ5ICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9icmlkZ2UuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjJjY2E1NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfYnJpZGdlLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSAorI2RlZmluZSBfX0xJTlVYX0JSSURHRV9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKyNkZWZpbmUgTkZfQlJfUFJFX1JPVVRJTkcgMAorCisjZGVmaW5lIE5GX0JSX0xPQ0FMX0lOIDEKKworI2RlZmluZSBORl9CUl9GT1JXQVJEIDIKKworI2RlZmluZSBORl9CUl9MT0NBTF9PVVQgMworCisjZGVmaW5lIE5GX0JSX1BPU1RfUk9VVElORyA0CisKKyNkZWZpbmUgTkZfQlJfQlJPVVRJTkcgNQorI2RlZmluZSBORl9CUl9OVU1IT09LUyA2CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2ZkNDUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0LmgKQEAgLTAsMCArMSw3MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0lQX05FVEZJTFRFUl9ICisjZGVmaW5lIF9fTElOVVhfSVBfTkVURklMVEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci5oPgorCisjZGVmaW5lIE5GQ19JUF9TUkMgMHgwMDAxCisKKyNkZWZpbmUgTkZDX0lQX0RTVCAweDAwMDIKKworI2RlZmluZSBORkNfSVBfSUZfSU4gMHgwMDA0CisKKyNkZWZpbmUgTkZDX0lQX0lGX09VVCAweDAwMDgKKworI2RlZmluZSBORkNfSVBfVE9TIDB4MDAxMAorCisjZGVmaW5lIE5GQ19JUF9QUk9UTyAweDAwMjAKKworI2RlZmluZSBORkNfSVBfT1BUSU9OUyAweDAwNDAKKworI2RlZmluZSBORkNfSVBfRlJBRyAweDAwODAKKworI2RlZmluZSBORkNfSVBfVENQRkxBR1MgMHgwMTAwCisKKyNkZWZpbmUgTkZDX0lQX1NSQ19QVCAweDAyMDAKKworI2RlZmluZSBORkNfSVBfRFNUX1BUIDB4MDQwMAorCisjZGVmaW5lIE5GQ19JUF9QUk9UT19VTktOT1dOIDB4MjAwMAorCisjZGVmaW5lIE5GX0lQX1BSRV9ST1VUSU5HIDAKKworI2RlZmluZSBORl9JUF9MT0NBTF9JTiAxCisKKyNkZWZpbmUgTkZfSVBfRk9SV0FSRCAyCisKKyNkZWZpbmUgTkZfSVBfTE9DQUxfT1VUIDMKKworI2RlZmluZSBORl9JUF9QT1NUX1JPVVRJTkcgNAorI2RlZmluZSBORl9JUF9OVU1IT09LUyA1CisKK2VudW0gbmZfaXBfaG9va19wcmlvcml0aWVzIHsKKyBORl9JUF9QUklfRklSU1QgPSBJTlRfTUlOLAorIE5GX0lQX1BSSV9DT05OVFJBQ0tfREVGUkFHID0gLTQwMCwKKyBORl9JUF9QUklfUkFXID0gLTMwMCwKKyBORl9JUF9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCisgTkZfSVBfUFJJX0NPTk5UUkFDSyA9IC0yMDAsCisgTkZfSVBfUFJJX0JSSURHRV9TQUJPVEFHRV9GT1JXQVJEID0gLTE3NSwKKyBORl9JUF9QUklfTUFOR0xFID0gLTE1MCwKKyBORl9JUF9QUklfTkFUX0RTVCA9IC0xMDAsCisgTkZfSVBfUFJJX0JSSURHRV9TQUJPVEFHRV9MT0NBTF9PVVQgPSAtNTAsCisgTkZfSVBfUFJJX0ZJTFRFUiA9IDAsCisgTkZfSVBfUFJJX05BVF9TUkMgPSAxMDAsCisgTkZfSVBfUFJJX1NFTElOVVhfTEFTVCA9IDIyNSwKKyBORl9JUF9QUklfQ09OTlRSQUNLX0hFTFBFUiA9IElOVF9NQVggLSAyLAorIE5GX0lQX1BSSV9OQVRfU0VRX0FESlVTVCA9IElOVF9NQVggLSAxLAorIE5GX0lQX1BSSV9DT05OVFJBQ0tfQ09ORklSTSA9IElOVF9NQVgsCisgTkZfSVBfUFJJX0xBU1QgPSBJTlRfTUFYLAorfTsKKworI2RlZmluZSBTT19PUklHSU5BTF9EU1QgODAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWY1NWE2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9jb25udHJhY2suaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUF9DT05OVFJBQ0tfSAorI2RlZmluZSBfSVBfQ09OTlRSQUNLX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29tbW9uLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFja190dXBsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBjOTZiYWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmgKQEAgLTAsMCArMSw4MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBfQ09OTlRSQUNLX1RVUExFX0gKKyNkZWZpbmUgX0lQX0NPTk5UUkFDS19UVVBMRV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci9uZl9jb25udHJhY2tfdHVwbGVfY29tbW9uLmg+CisKK3VuaW9uIGlwX2Nvbm50cmFja19tYW5pcF9wcm90bworeworCisgdV9pbnQxNl90IGFsbDsKKworIHN0cnVjdCB7CisgX19iZTE2IHBvcnQ7CisgfSB0Y3A7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgcG9ydDsKKyB9IHVkcDsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBpZDsKKyB9IGljbXA7Cisgc3RydWN0IHsKKyB1X2ludDE2X3QgcG9ydDsKKyB9IHNjdHA7Cisgc3RydWN0IHsKKyBfX2JlMTYga2V5OworIH0gZ3JlOworfTsKKworc3RydWN0IGlwX2Nvbm50cmFja19tYW5pcAoreworIHVfaW50MzJfdCBpcDsKKyB1bmlvbiBpcF9jb25udHJhY2tfbWFuaXBfcHJvdG8gdTsKK307CisKK3N0cnVjdCBpcF9jb25udHJhY2tfdHVwbGUKK3sKKyBzdHJ1Y3QgaXBfY29ubnRyYWNrX21hbmlwIHNyYzsKKworIHN0cnVjdCB7CisgdV9pbnQzMl90IGlwOworIHVuaW9uIHsKKworIHVfaW50MTZfdCBhbGw7CisKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBwb3J0OworIH0gdGNwOworIHN0cnVjdCB7CisgdV9pbnQxNl90IHBvcnQ7CisgfSB1ZHA7Cisgc3RydWN0IHsKKyB1X2ludDhfdCB0eXBlLCBjb2RlOworIH0gaWNtcDsKKyBzdHJ1Y3QgeworIHVfaW50MTZfdCBwb3J0OworIH0gc2N0cDsKKyBzdHJ1Y3QgeworIF9fYmUxNiBrZXk7CisgfSBncmU7CisgfSB1OworCisgdV9pbnQ4X3QgcHJvdG9udW07CisKKyB1X2ludDhfdCBkaXI7CisgfSBkc3Q7Cit9OworCisjZGVmaW5lIElQX0NUX1RVUExFX1VfQkxBTksodHVwbGUpICAgZG8geyAgICh0dXBsZSktPnNyYy51LmFsbCA9IDA7ICAgKHR1cGxlKS0+ZHN0LnUuYWxsID0gMDsgICB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9uYXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGI5ZGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQX05BVF9ICisjZGVmaW5lIF9JUF9OQVRfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0Lmg+CisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfY29ubnRyYWNrX3R1cGxlLmg+CisKKyNkZWZpbmUgSVBfTkFUX01BUFBJTkdfVFlQRV9NQVhfTkFNRUxFTiAxNgorCitlbnVtIGlwX25hdF9tYW5pcF90eXBlCit7CisgSVBfTkFUX01BTklQX1NSQywKKyBJUF9OQVRfTUFOSVBfRFNUCit9OworCisjZGVmaW5lIEhPT0syTUFOSVAoaG9va251bSkgKChob29rbnVtKSAhPSBORl9JUF9QT1NUX1JPVVRJTkcgJiYgKGhvb2tudW0pICE9IE5GX0lQX0xPQ0FMX0lOKQorCisjZGVmaW5lIElQX05BVF9SQU5HRV9NQVBfSVBTIDEKKyNkZWZpbmUgSVBfTkFUX1JBTkdFX1BST1RPX1NQRUNJRklFRCAyCisKK3N0cnVjdCBpcF9uYXRfc2VxIHsKKworIHVfaW50MzJfdCBjb3JyZWN0aW9uX3BvczsKKworIGludDE2X3Qgb2Zmc2V0X2JlZm9yZSwgb2Zmc2V0X2FmdGVyOworfTsKKworc3RydWN0IGlwX25hdF9yYW5nZQoreworCisgdW5zaWduZWQgaW50IGZsYWdzOworCisgdV9pbnQzMl90IG1pbl9pcCwgbWF4X2lwOworCisgdW5pb24gaXBfY29ubnRyYWNrX21hbmlwX3Byb3RvIG1pbiwgbWF4OworfTsKKworc3RydWN0IGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQKK3sKKyB1bnNpZ25lZCBpbnQgcmFuZ2VzaXplOworCisgc3RydWN0IGlwX25hdF9yYW5nZSByYW5nZVsxXTsKK307CisKKyNkZWZpbmUgaXBfbmF0X211bHRpX3JhbmdlIGlwX25hdF9tdWx0aV9yYW5nZV9jb21wYXQKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfbmF0X3J1bGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOWRiMGIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdF9ydWxlLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBfTkFUX1JVTEVfSAorI2RlZmluZSBfSVBfTkFUX1JVTEVfSAorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX2Nvbm50cmFjay5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3RhYmxlcy5oPgorI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlcl9pcHY0L2lwX25hdC5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwX3F1ZXVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQxN2E1NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF9xdWV1ZS5oCkBAIC0wLDAgKzEsNjUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQX1FVRVVFX0gKKyNkZWZpbmUgX0lQX1FVRVVFX0gKKworI2luY2x1ZGUgPG5ldC9pZi5oPgorCit0eXBlZGVmIHN0cnVjdCBpcHFfcGFja2V0X21zZyB7CisgdW5zaWduZWQgbG9uZyBwYWNrZXRfaWQ7CisgdW5zaWduZWQgbG9uZyBtYXJrOworIGxvbmcgdGltZXN0YW1wX3NlYzsKKyBsb25nIHRpbWVzdGFtcF91c2VjOworIHVuc2lnbmVkIGludCBob29rOworIGNoYXIgaW5kZXZfbmFtZVtJRk5BTVNJWl07CisgY2hhciBvdXRkZXZfbmFtZVtJRk5BTVNJWl07CisgdW5zaWduZWQgc2hvcnQgaHdfcHJvdG9jb2w7CisgdW5zaWduZWQgc2hvcnQgaHdfdHlwZTsKKyB1bnNpZ25lZCBjaGFyIGh3X2FkZHJsZW47CisgdW5zaWduZWQgY2hhciBod19hZGRyWzhdOworIHNpemVfdCBkYXRhX2xlbjsKKyB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07Cit9IGlwcV9wYWNrZXRfbXNnX3Q7CisKK3R5cGVkZWYgc3RydWN0IGlwcV9tb2RlX21zZyB7CisgdW5zaWduZWQgY2hhciB2YWx1ZTsKKyBzaXplX3QgcmFuZ2U7Cit9IGlwcV9tb2RlX21zZ190OworCit0eXBlZGVmIHN0cnVjdCBpcHFfdmVyZGljdF9tc2cgeworIHVuc2lnbmVkIGludCB2YWx1ZTsKKyB1bnNpZ25lZCBsb25nIGlkOworIHNpemVfdCBkYXRhX2xlbjsKKyB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07Cit9IGlwcV92ZXJkaWN0X21zZ190OworCit0eXBlZGVmIHN0cnVjdCBpcHFfcGVlcl9tc2cgeworIHVuaW9uIHsKKyBpcHFfdmVyZGljdF9tc2dfdCB2ZXJkaWN0OworIGlwcV9tb2RlX21zZ190IG1vZGU7CisgfSBtc2c7Cit9IGlwcV9wZWVyX21zZ190OworCitlbnVtIHsKKyBJUFFfQ09QWV9OT05FLAorIElQUV9DT1BZX01FVEEsCisgSVBRX0NPUFlfUEFDS0VUCit9OworI2RlZmluZSBJUFFfQ09QWV9NQVggSVBRX0NPUFlfUEFDS0VUCisKKyNkZWZpbmUgSVBRTV9CQVNFIDB4MTAgIAorI2RlZmluZSBJUFFNX01PREUgKElQUU1fQkFTRSArIDEpICAKKyNkZWZpbmUgSVBRTV9WRVJESUNUIChJUFFNX0JBU0UgKyAyKSAgIAorI2RlZmluZSBJUFFNX1BBQ0tFVCAoSVBRTV9CQVNFICsgMykgIAorI2RlZmluZSBJUFFNX01BWCAoSVBRTV9CQVNFICsgNCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXBfdGFibGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWE0ODMwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcF90YWJsZXMuaApAQCAtMCwwICsxLDE4MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUQUJMRVNfSAorI2RlZmluZSBfSVBUQUJMRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisKKyNkZWZpbmUgSVBUX0ZVTkNUSU9OX01BWE5BTUVMRU4gWFRfRlVOQ1RJT05fTUFYTkFNRUxFTgorI2RlZmluZSBJUFRfVEFCTEVfTUFYTkFNRUxFTiBYVF9GVU5DVElPTl9NQVhOQU1FTEVOCisjZGVmaW5lIGlwdF9tYXRjaCB4dF9tYXRjaAorI2RlZmluZSBpcHRfdGFyZ2V0IHh0X3RhcmdldAorI2RlZmluZSBpcHRfdGFibGUgeHRfdGFibGUKKyNkZWZpbmUgaXB0X2dldF9yZXZpc2lvbiB4dF9nZXRfcmV2aXNpb24KKworc3RydWN0IGlwdF9pcCB7CisKKyBzdHJ1Y3QgaW5fYWRkciBzcmMsIGRzdDsKKworIHN0cnVjdCBpbl9hZGRyIHNtc2ssIGRtc2s7CisgY2hhciBpbmlmYWNlW0lGTkFNU0laXSwgb3V0aWZhY2VbSUZOQU1TSVpdOworIHVuc2lnbmVkIGNoYXIgaW5pZmFjZV9tYXNrW0lGTkFNU0laXSwgb3V0aWZhY2VfbWFza1tJRk5BTVNJWl07CisKKyB1X2ludDE2X3QgcHJvdG87CisKKyB1X2ludDhfdCBmbGFnczsKKworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBpcHRfZW50cnlfbWF0Y2ggeHRfZW50cnlfbWF0Y2gKKyNkZWZpbmUgaXB0X2VudHJ5X3RhcmdldCB4dF9lbnRyeV90YXJnZXQKKyNkZWZpbmUgaXB0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKKworI2RlZmluZSBpcHRfY291bnRlcnMgeHRfY291bnRlcnMKKworI2RlZmluZSBJUFRfRl9GUkFHIDB4MDEgIAorI2RlZmluZSBJUFRfRl9HT1RPIDB4MDIgIAorI2RlZmluZSBJUFRfRl9NQVNLIDB4MDMgIAorCisjZGVmaW5lIElQVF9JTlZfVklBX0lOIDB4MDEgIAorI2RlZmluZSBJUFRfSU5WX1ZJQV9PVVQgMHgwMiAgCisjZGVmaW5lIElQVF9JTlZfVE9TIDB4MDQgIAorI2RlZmluZSBJUFRfSU5WX1NSQ0lQIDB4MDggIAorI2RlZmluZSBJUFRfSU5WX0RTVElQIDB4MTAgIAorI2RlZmluZSBJUFRfSU5WX0ZSQUcgMHgyMCAgCisjZGVmaW5lIElQVF9JTlZfUFJPVE8gWFRfSU5WX1BST1RPCisjZGVmaW5lIElQVF9JTlZfTUFTSyAweDdGICAKKworc3RydWN0IGlwdF9lbnRyeQoreworIHN0cnVjdCBpcHRfaXAgaXA7CisKKyB1bnNpZ25lZCBpbnQgbmZjYWNoZTsKKworIHVfaW50MTZfdCB0YXJnZXRfb2Zmc2V0OworCisgdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisgdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzOworCisgdW5zaWduZWQgY2hhciBlbGVtc1swXTsKK307CisKKyNkZWZpbmUgSVBUX0JBU0VfQ1RMIFhUX0JBU0VfQ1RMCisKKyNkZWZpbmUgSVBUX1NPX1NFVF9SRVBMQUNFIFhUX1NPX1NFVF9SRVBMQUNFCisjZGVmaW5lIElQVF9TT19TRVRfQUREX0NPVU5URVJTIFhUX1NPX1NFVF9BRERfQ09VTlRFUlMKKyNkZWZpbmUgSVBUX1NPX1NFVF9NQVggWFRfU09fU0VUX01BWAorCisjZGVmaW5lIElQVF9TT19HRVRfSU5GTyBYVF9TT19HRVRfSU5GTworI2RlZmluZSBJUFRfU09fR0VUX0VOVFJJRVMgWFRfU09fR0VUX0VOVFJJRVMKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9NQVRDSCBYVF9TT19HRVRfUkVWSVNJT05fTUFUQ0gKKyNkZWZpbmUgSVBUX1NPX0dFVF9SRVZJU0lPTl9UQVJHRVQgWFRfU09fR0VUX1JFVklTSU9OX1RBUkdFVAorI2RlZmluZSBJUFRfU09fR0VUX01BWCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisKKyNkZWZpbmUgSVBUX0NPTlRJTlVFIFhUX0NPTlRJTlVFCisjZGVmaW5lIElQVF9SRVRVUk4gWFRfUkVUVVJOCisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfdGNwdWRwLmg+CisjZGVmaW5lIGlwdF91ZHAgeHRfdWRwCisjZGVmaW5lIGlwdF90Y3AgeHRfdGNwCisKKyNkZWZpbmUgSVBUX1RDUF9JTlZfU1JDUFQgWFRfVENQX0lOVl9TUkNQVAorI2RlZmluZSBJUFRfVENQX0lOVl9EU1RQVCBYVF9UQ1BfSU5WX0RTVFBUCisjZGVmaW5lIElQVF9UQ1BfSU5WX0ZMQUdTIFhUX1RDUF9JTlZfRkxBR1MKKyNkZWZpbmUgSVBUX1RDUF9JTlZfT1BUSU9OIFhUX1RDUF9JTlZfT1BUSU9OCisjZGVmaW5lIElQVF9UQ1BfSU5WX01BU0sgWFRfVENQX0lOVl9NQVNLCisKKyNkZWZpbmUgSVBUX1VEUF9JTlZfU1JDUFQgWFRfVURQX0lOVl9TUkNQVAorI2RlZmluZSBJUFRfVURQX0lOVl9EU1RQVCBYVF9VRFBfSU5WX0RTVFBUCisjZGVmaW5lIElQVF9VRFBfSU5WX01BU0sgWFRfVURQX0lOVl9NQVNLCisKK3N0cnVjdCBpcHRfaWNtcAoreworIHVfaW50OF90IHR5cGU7CisgdV9pbnQ4X3QgY29kZVsyXTsKKyB1X2ludDhfdCBpbnZmbGFnczsKK307CisKKyNkZWZpbmUgSVBUX0lDTVBfSU5WIDB4MDEgIAorCitzdHJ1Y3QgaXB0X2dldGluZm8KK3sKKworIGNoYXIgbmFtZVtJUFRfVEFCTEVfTUFYTkFNRUxFTl07CisKKyB1bnNpZ25lZCBpbnQgdmFsaWRfaG9va3M7CisKKyB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUF9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCBudW1fZW50cmllczsKKworIHVuc2lnbmVkIGludCBzaXplOworfTsKKworc3RydWN0IGlwdF9yZXBsYWNlCit7CisKKyBjaGFyIG5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUF9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQX05VTUhPT0tTXTsKKworIHVuc2lnbmVkIGludCBudW1fY291bnRlcnM7CisKKyBzdHJ1Y3QgeHRfY291bnRlcnMgX191c2VyICpjb3VudGVyczsKKworIHN0cnVjdCBpcHRfZW50cnkgZW50cmllc1swXTsKK307CisKKyNkZWZpbmUgaXB0X2NvdW50ZXJzX2luZm8geHRfY291bnRlcnNfaW5mbworCitzdHJ1Y3QgaXB0X2dldF9lbnRyaWVzCit7CisKKyBjaGFyIG5hbWVbSVBUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyBzdHJ1Y3QgaXB0X2VudHJ5IGVudHJ5dGFibGVbMF07Cit9OworCisjZGVmaW5lIElQVF9TVEFOREFSRF9UQVJHRVQgWFRfU1RBTkRBUkRfVEFSR0VUCisKKyNkZWZpbmUgSVBUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKKworc3RhdGljIF9faW5saW5lX18gc3RydWN0IGlwdF9lbnRyeV90YXJnZXQgKgoraXB0X2dldF90YXJnZXQoc3RydWN0IGlwdF9lbnRyeSAqZSkKK3sKKyByZXR1cm4gKHZvaWQgKillICsgZS0+dGFyZ2V0X29mZnNldDsKK30KKworI2RlZmluZSBJUFRfTUFUQ0hfSVRFUkFURShlLCBmbiwgYXJncy4uLikgICh7ICAgdW5zaWduZWQgaW50IF9faTsgICBpbnQgX19yZXQgPSAwOyAgIHN0cnVjdCBpcHRfZW50cnlfbWF0Y2ggKl9fbWF0Y2g7ICAgICBmb3IgKF9faSA9IHNpemVvZihzdHJ1Y3QgaXB0X2VudHJ5KTsgICBfX2kgPCAoZSktPnRhcmdldF9vZmZzZXQ7ICAgX19pICs9IF9fbWF0Y2gtPnUubWF0Y2hfc2l6ZSkgeyAgIF9fbWF0Y2ggPSAodm9pZCAqKShlKSArIF9faTsgICAgIF9fcmV0ID0gZm4oX19tYXRjaCAsICMjIGFyZ3MpOyAgIGlmIChfX3JldCAhPSAwKSAgIGJyZWFrOyAgIH0gICBfX3JldDsgIH0pCisKKyNkZWZpbmUgSVBUX0VOVFJZX0lURVJBVEUoZW50cmllcywgc2l6ZSwgZm4sIGFyZ3MuLi4pICAoeyAgIHVuc2lnbmVkIGludCBfX2k7ICAgaW50IF9fcmV0ID0gMDsgICBzdHJ1Y3QgaXB0X2VudHJ5ICpfX2VudHJ5OyAgICAgZm9yIChfX2kgPSAwOyBfX2kgPCAoc2l6ZSk7IF9faSArPSBfX2VudHJ5LT5uZXh0X29mZnNldCkgeyAgIF9fZW50cnkgPSAodm9pZCAqKShlbnRyaWVzKSArIF9faTsgICAgIF9fcmV0ID0gZm4oX19lbnRyeSAsICMjIGFyZ3MpOyAgIGlmIChfX3JldCAhPSAwKSAgIGJyZWFrOyAgIH0gICBfX3JldDsgIH0pCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9DTEFTU0lGWS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3MzhlZGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0NMQVNTSUZZLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0NMQVNTSUZZX0gKKyNkZWZpbmUgX0lQVF9DTEFTU0lGWV9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfQ0xBU1NJRlkuaD4KKyNkZWZpbmUgaXB0X2NsYXNzaWZ5X3RhcmdldF9pbmZvIHh0X2NsYXNzaWZ5X3RhcmdldF9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0RTQ1AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMjcxZmIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9EU0NQLmgKQEAgLTAsMCArMSwyMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0RTQ1BfVEFSR0VUX0gKKyNkZWZpbmUgX0lQVF9EU0NQX1RBUkdFVF9ICisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RzY3AuaD4KKworc3RydWN0IGlwdF9EU0NQX2luZm8geworIHVfaW50OF90IGRzY3A7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRUNOLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3YzE2ZmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0VDTi5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9FQ05fVEFSR0VUX0gKKyNkZWZpbmUgX0lQVF9FQ05fVEFSR0VUX0gKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfRFNDUC5oPgorCisjZGVmaW5lIElQVF9FQ05fSVBfTUFTSyAofklQVF9EU0NQX01BU0spCisKKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfSVAgMHgwMSAgCisjZGVmaW5lIElQVF9FQ05fT1BfU0VUX0VDRSAweDEwICAKKyNkZWZpbmUgSVBUX0VDTl9PUF9TRVRfQ1dSIDB4MjAgIAorCisjZGVmaW5lIElQVF9FQ05fT1BfTUFTSyAweGNlCisKK3N0cnVjdCBpcHRfRUNOX2luZm8geworIHVfaW50OF90IG9wZXJhdGlvbjsKKyB1X2ludDhfdCBpcF9lY3Q7CisgdW5pb24geworIHN0cnVjdCB7CisgdV9pbnQ4X3QgZWNlOjEsIGN3cjoxOworIH0gdGNwOworIH0gcHJvdG87Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfTE9HLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRkNmZkMWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X0xPRy5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9MT0dfSAorI2RlZmluZSBfSVBUX0xPR19ICisKKyNkZWZpbmUgSVBUX0xPR19UQ1BTRVEgMHgwMSAgCisjZGVmaW5lIElQVF9MT0dfVENQT1BUIDB4MDIgIAorI2RlZmluZSBJUFRfTE9HX0lQT1BUIDB4MDQgIAorI2RlZmluZSBJUFRfTE9HX1VJRCAweDA4ICAKKyNkZWZpbmUgSVBUX0xPR19ORkxPRyAweDEwICAKKyNkZWZpbmUgSVBUX0xPR19NQVNLIDB4MWYKKworc3RydWN0IGlwdF9sb2dfaW5mbyB7CisgdW5zaWduZWQgY2hhciBsZXZlbDsKKyB1bnNpZ25lZCBjaGFyIGxvZ2ZsYWdzOworIGNoYXIgcHJlZml4WzMwXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X05GUVVFVUUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yN2FjNGE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9ORlFVRVVFLmgKQEAgLTAsMCArMSwxOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX05GUV9UQVJHRVRfSAorI2RlZmluZSBfSVBUX05GUV9UQVJHRVRfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X05GUVVFVUUuaD4KKworI2RlZmluZSBpcHRfTkZRX2luZm8geHRfTkZRX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1JFSkVDVC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kM2MzOTY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9SRUpFQ1QuaApAQCAtMCwwICsxLDMxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfUkVKRUNUX0gKKyNkZWZpbmUgX0lQVF9SRUpFQ1RfSAorCitlbnVtIGlwdF9yZWplY3Rfd2l0aCB7CisgSVBUX0lDTVBfTkVUX1VOUkVBQ0hBQkxFLAorIElQVF9JQ01QX0hPU1RfVU5SRUFDSEFCTEUsCisgSVBUX0lDTVBfUFJPVF9VTlJFQUNIQUJMRSwKKyBJUFRfSUNNUF9QT1JUX1VOUkVBQ0hBQkxFLAorIElQVF9JQ01QX0VDSE9SRVBMWSwKKyBJUFRfSUNNUF9ORVRfUFJPSElCSVRFRCwKKyBJUFRfSUNNUF9IT1NUX1BST0hJQklURUQsCisgSVBUX1RDUF9SRVNFVCwKKyBJUFRfSUNNUF9BRE1JTl9QUk9ISUJJVEVECit9OworCitzdHJ1Y3QgaXB0X3JlamVjdF9pbmZvIHsKKyBlbnVtIGlwdF9yZWplY3Rfd2l0aCB3aXRoOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RDUE1TUy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTI0ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UQ1BNU1MuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfVENQTVNTX0gKKyNkZWZpbmUgX0lQVF9UQ1BNU1NfSAorCitzdHJ1Y3QgaXB0X3RjcG1zc19pbmZvIHsKKyB1X2ludDE2X3QgbXNzOworfTsKKworI2RlZmluZSBJUFRfVENQTVNTX0NMQU1QX1BNVFUgMHhmZmZmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9UT1MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNjMjExNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVE9TLmgKQEAgLTAsMCArMSwyMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1RPU19IX3RhcmdldAorI2RlZmluZSBfSVBUX1RPU19IX3RhcmdldAorCisjaWZuZGVmIElQVE9TX05PUk1BTFNWQworI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAorI2VuZGlmCisKK3N0cnVjdCBpcHRfdG9zX3RhcmdldF9pbmZvIHsKKyB1X2ludDhfdCB0b3M7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVFRMLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5ZTk4YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X1RUTC5oCkBAIC0wLDAgKzEsMjggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9UVExfSAorI2RlZmluZSBfSVBUX1RUTF9ICisKK2VudW0geworIElQVF9UVExfU0VUID0gMCwKKyBJUFRfVFRMX0lOQywKKyBJUFRfVFRMX0RFQworfTsKKworI2RlZmluZSBJUFRfVFRMX01BWE1PREUgSVBUX1RUTF9ERUMKKworc3RydWN0IGlwdF9UVExfaW5mbyB7CisgdV9pbnQ4X3QgbW9kZTsKKyB1X2ludDhfdCB0dGw7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9VTE9HLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTUxMWNiOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfVUxPRy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9VTE9HX0gKKyNkZWZpbmUgX0lQVF9VTE9HX0gKKworI2lmbmRlZiBORVRMSU5LX05GTE9HCisjZGVmaW5lIE5FVExJTktfTkZMT0cgNQorI2VuZGlmCisKKyNkZWZpbmUgVUxPR19ERUZBVUxUX05MR1JPVVAgMQorI2RlZmluZSBVTE9HX0RFRkFVTFRfUVRIUkVTSE9MRCAxCisKKyNkZWZpbmUgVUxPR19NQUNfTEVOIDgwCisjZGVmaW5lIFVMT0dfUFJFRklYX0xFTiAzMgorCisjZGVmaW5lIFVMT0dfTUFYX1FMRU4gNTAKKworc3RydWN0IGlwdF91bG9nX2luZm8geworIHVuc2lnbmVkIGludCBubF9ncm91cDsKKyBzaXplX3QgY29weV9yYW5nZTsKKyBzaXplX3QgcXRocmVzaG9sZDsKKyBjaGFyIHByZWZpeFtVTE9HX1BSRUZJWF9MRU5dOworfTsKKwordHlwZWRlZiBzdHJ1Y3QgdWxvZ19wYWNrZXRfbXNnIHsKKyB1bnNpZ25lZCBsb25nIG1hcms7CisgbG9uZyB0aW1lc3RhbXBfc2VjOworIGxvbmcgdGltZXN0YW1wX3VzZWM7CisgdW5zaWduZWQgaW50IGhvb2s7CisgY2hhciBpbmRldl9uYW1lW0lGTkFNU0laXTsKKyBjaGFyIG91dGRldl9uYW1lW0lGTkFNU0laXTsKKyBzaXplX3QgZGF0YV9sZW47CisgY2hhciBwcmVmaXhbVUxPR19QUkVGSVhfTEVOXTsKKyB1bnNpZ25lZCBjaGFyIG1hY19sZW47CisgdW5zaWduZWQgY2hhciBtYWNbVUxPR19NQUNfTEVOXTsKKyB1bnNpZ25lZCBjaGFyIHBheWxvYWRbMF07Cit9IHVsb2dfcGFja2V0X21zZ190OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWRkcnR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjAzYjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9hZGRydHlwZS5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9BRERSVFlQRV9ICisjZGVmaW5lIF9JUFRfQUREUlRZUEVfSAorCitzdHJ1Y3QgaXB0X2FkZHJ0eXBlX2luZm8geworIHVfaW50MTZfdCBzb3VyY2U7CisgdV9pbnQxNl90IGRlc3Q7CisgdV9pbnQzMl90IGludmVydF9zb3VyY2U7CisgdV9pbnQzMl90IGludmVydF9kZXN0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2FoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTE5ODNlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfYWguaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfQUhfSAorI2RlZmluZSBfSVBUX0FIX0gKKworc3RydWN0IGlwdF9haAoreworIHVfaW50MzJfdCBzcGlzWzJdOworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBJUFRfQUhfSU5WX1NQSSAweDAxICAKKyNkZWZpbmUgSVBUX0FIX0lOVl9NQVNLIDB4MDEgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9jb21tZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGJkNzUwNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29tbWVudC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9DT01NRU5UX0gKKyNkZWZpbmUgX0lQVF9DT01NRU5UX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9jb21tZW50Lmg+CisKKyNkZWZpbmUgSVBUX01BWF9DT01NRU5UX0xFTiBYVF9NQVhfQ09NTUVOVF9MRU4KKworI2RlZmluZSBpcHRfY29tbWVudF9pbmZvIHh0X2NvbW1lbnRfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfY29ubmJ5dGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5ieXRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhhZTE5YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2Nvbm5ieXRlcy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9DT05OQllURVNfSAorI2RlZmluZSBfSVBUX0NPTk5CWVRFU19ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfY29ubmJ5dGVzLmg+CisjZGVmaW5lIGlwdF9jb25uYnl0ZXNfd2hhdCB4dF9jb25uYnl0ZXNfd2hhdAorCisjZGVmaW5lIElQVF9DT05OQllURVNfUEtUUyBYVF9DT05OQllURVNfUEtUUworI2RlZmluZSBJUFRfQ09OTkJZVEVTX0JZVEVTIFhUX0NPTk5CWVRFU19CWVRFUworI2RlZmluZSBJUFRfQ09OTkJZVEVTX0FWR1BLVCBYVF9DT05OQllURVNfQVZHUEtUCisKKyNkZWZpbmUgaXB0X2Nvbm5ieXRlc19kaXJlY3Rpb24geHRfY29ubmJ5dGVzX2RpcmVjdGlvbgorI2RlZmluZSBJUFRfQ09OTkJZVEVTX0RJUl9PUklHSU5BTCBYVF9DT05OQllURVNfRElSX09SSUdJTkFMCisjZGVmaW5lIElQVF9DT05OQllURVNfRElSX1JFUExZIFhUX0NPTk5CWVRFU19ESVJfUkVQTFkKKyNkZWZpbmUgSVBUX0NPTk5CWVRFU19ESVJfQk9USCBYVF9DT05OQllURVNfRElSX0JPVEgKKworI2RlZmluZSBpcHRfY29ubmJ5dGVzX2luZm8geHRfY29ubmJ5dGVzX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZGNjcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxMjEyYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2RjY3AuaApAQCAtMCwwICsxLDI2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfRENDUF9IXworI2RlZmluZSBfSVBUX0RDQ1BfSF8KKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9kY2NwLmg+CisjZGVmaW5lIElQVF9EQ0NQX1NSQ19QT1JUUyBYVF9EQ0NQX1NSQ19QT1JUUworI2RlZmluZSBJUFRfRENDUF9ERVNUX1BPUlRTIFhUX0RDQ1BfREVTVF9QT1JUUworI2RlZmluZSBJUFRfRENDUF9UWVBFIFhUX0RDQ1BfVFlQRQorI2RlZmluZSBJUFRfRENDUF9PUFRJT04gWFRfRENDUF9PUFRJT04KKworI2RlZmluZSBJUFRfRENDUF9WQUxJRF9GTEFHUyBYVF9EQ0NQX1ZBTElEX0ZMQUdTCisKKyNkZWZpbmUgaXB0X2RjY3BfaW5mbyB4dF9kY2NwX2luZm8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcF8uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfZHNjcF8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYmE4ODYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9kc2NwXy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9EU0NQX0gKKyNkZWZpbmUgX0lQVF9EU0NQX0gKKworI2RlZmluZSBJUFRfRFNDUF9NQVNLIDB4ZmMgIAorI2RlZmluZSBJUFRfRFNDUF9TSElGVCAyCisjZGVmaW5lIElQVF9EU0NQX01BWCAweDNmICAKKworc3RydWN0IGlwdF9kc2NwX2luZm8geworIHVfaW50OF90IGRzY3A7CisgdV9pbnQ4X3QgaW52ZXJ0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2VzcC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTQ3ZTdlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9lc3AuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfRVNQX0gKKyNkZWZpbmUgX0lQVF9FU1BfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgorCisjZGVmaW5lIGlwdF9lc3AgeHRfZXNwCisjZGVmaW5lIElQVF9FU1BfSU5WX1NQSSBYVF9FU1BfSU5WX1NQSQorI2RlZmluZSBJUFRfRVNQX0lOVl9NQVNLIFhUX0VTUF9JTlZfTUFTSworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGFzaGxpbWl0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkYzFmNDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2hhc2hsaW1pdC5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9IQVNITElNSVRfSAorI2RlZmluZSBfSVBUX0hBU0hMSU1JVF9ICisKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9TQ0FMRSAxMDAwMAorCitzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGU7CisKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RJUCAweDAwMDEKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX0RQVCAweDAwMDIKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NJUCAweDAwMDQKKyNkZWZpbmUgSVBUX0hBU0hMSU1JVF9IQVNIX1NQVCAweDAwMDgKKworc3RydWN0IGhhc2hsaW1pdF9jZmcgeworIHVfaW50MzJfdCBtb2RlOworIHVfaW50MzJfdCBhdmc7CisgdV9pbnQzMl90IGJ1cnN0OworCisgdV9pbnQzMl90IHNpemU7CisgdV9pbnQzMl90IG1heDsKKyB1X2ludDMyX3QgZ2NfaW50ZXJ2YWw7CisgdV9pbnQzMl90IGV4cGlyZTsKK307CisKK3N0cnVjdCBpcHRfaGFzaGxpbWl0X2luZm8geworIGNoYXIgbmFtZSBbSUZOQU1TSVpdOworIHN0cnVjdCBoYXNobGltaXRfY2ZnIGNmZzsKKyBzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9odGFibGUgKmhpbmZvOworCisgdW5pb24geworIHZvaWQgKnB0cjsKKyBzdHJ1Y3QgaXB0X2hhc2hsaW1pdF9pbmZvICptYXN0ZXI7CisgfSB1OworfTsKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9oZWxwZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTc2YWRkOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfaGVscGVyLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0hFTFBFUl9ICisjZGVmaW5lIF9JUFRfSEVMUEVSX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9oZWxwZXIuaD4KKyNkZWZpbmUgaXB0X2hlbHBlcl9pbmZvIHh0X2hlbHBlcl9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2lwcmFuZ2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNGRkNjAzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9pcHJhbmdlLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX0lQUkFOR0VfSAorI2RlZmluZSBfSVBUX0lQUkFOR0VfSAorCisjZGVmaW5lIElQUkFOR0VfU1JDIDB4MDEgIAorI2RlZmluZSBJUFJBTkdFX0RTVCAweDAyICAKKyNkZWZpbmUgSVBSQU5HRV9TUkNfSU5WIDB4MTAgIAorI2RlZmluZSBJUFJBTkdFX0RTVF9JTlYgMHgyMCAgCisKK3N0cnVjdCBpcHRfaXByYW5nZSB7CisKKyB1X2ludDMyX3QgbWluX2lwLCBtYXhfaXA7Cit9OworCitzdHJ1Y3QgaXB0X2lwcmFuZ2VfaW5mbworeworIHN0cnVjdCBpcHRfaXByYW5nZSBzcmM7Cisgc3RydWN0IGlwdF9pcHJhbmdlIGRzdDsKKworIHVfaW50OF90IGZsYWdzOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X2xlbmd0aC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjEwODU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9sZW5ndGguaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfTEVOR1RIX0gKKyNkZWZpbmUgX0lQVF9MRU5HVEhfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2xlbmd0aC5oPgorI2RlZmluZSBpcHRfbGVuZ3RoX2luZm8geHRfbGVuZ3RoX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X21hYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44OTM3OGEzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9tYWMuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfTUFDX0gKKyNkZWZpbmUgX0lQVF9NQUNfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X21hYy5oPgorI2RlZmluZSBpcHRfbWFjX2luZm8geHRfbWFjX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X293bmVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGI3NDJiMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfb3duZXIuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfT1dORVJfSAorI2RlZmluZSBfSVBUX09XTkVSX0gKKworI2RlZmluZSBJUFRfT1dORVJfVUlEIDB4MDEKKyNkZWZpbmUgSVBUX09XTkVSX0dJRCAweDAyCisjZGVmaW5lIElQVF9PV05FUl9QSUQgMHgwNAorI2RlZmluZSBJUFRfT1dORVJfU0lEIDB4MDgKKyNkZWZpbmUgSVBUX09XTkVSX0NPTU0gMHgxMAorCitzdHJ1Y3QgaXB0X293bmVyX2luZm8geworIHVpZF90IHVpZDsKKyBnaWRfdCBnaWQ7CisgcGlkX3QgcGlkOworIHBpZF90IHNpZDsKKyBjaGFyIGNvbW1bMTZdOworIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGh5c2Rldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9waHlzZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzkxY2YwMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcGh5c2Rldi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9QSFlTREVWX0gKKyNkZWZpbmUgX0lQVF9QSFlTREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9waHlzZGV2Lmg+CisKKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSU4gWFRfUEhZU0RFVl9PUF9JTgorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9PVVQgWFRfUEhZU0RFVl9PUF9PVVQKKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfQlJJREdFRCBYVF9QSFlTREVWX09QX0JSSURHRUQKKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSVNJTiBYVF9QSFlTREVWX09QX0lTSU4KKyNkZWZpbmUgSVBUX1BIWVNERVZfT1BfSVNPVVQgWFRfUEhZU0RFVl9PUF9JU09VVAorI2RlZmluZSBJUFRfUEhZU0RFVl9PUF9NQVNLIFhUX1BIWVNERVZfT1BfTUFTSworCisjZGVmaW5lIGlwdF9waHlzZGV2X2luZm8geHRfcGh5c2Rldl9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wa3R0eXBlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3BrdHR5cGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYmIyMGIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9wa3R0eXBlLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1BLVFRZUEVfSAorI2RlZmluZSBfSVBUX1BLVFRZUEVfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BrdHR5cGUuaD4KKyNkZWZpbmUgaXB0X3BrdHR5cGVfaW5mbyB4dF9wa3R0eXBlX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlYWxtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3JlYWxtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWI4MGZhYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVhbG0uaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfUkVBTE1fSAorI2RlZmluZSBfSVBUX1JFQUxNX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9yZWFsbS5oPgorI2RlZmluZSBpcHRfcmVhbG1faW5mbyB4dF9yZWFsbV9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9yZWNlbnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDUxNzJiZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfcmVjZW50LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVBUX1JFQ0VOVF9ICisjZGVmaW5lIF9JUFRfUkVDRU5UX0gKKworI2RlZmluZSBSRUNFTlRfTkFNRSAiaXB0X3JlY2VudCIKKyNkZWZpbmUgUkVDRU5UX1ZFUiAidjAuMy4xIgorCisjZGVmaW5lIElQVF9SRUNFTlRfQ0hFQ0sgMQorI2RlZmluZSBJUFRfUkVDRU5UX1NFVCAyCisjZGVmaW5lIElQVF9SRUNFTlRfVVBEQVRFIDQKKyNkZWZpbmUgSVBUX1JFQ0VOVF9SRU1PVkUgOAorI2RlZmluZSBJUFRfUkVDRU5UX1RUTCAxNgorCisjZGVmaW5lIElQVF9SRUNFTlRfU09VUkNFIDAKKyNkZWZpbmUgSVBUX1JFQ0VOVF9ERVNUIDEKKworI2RlZmluZSBJUFRfUkVDRU5UX05BTUVfTEVOIDIwMAorCitzdHJ1Y3QgaXB0X3JlY2VudF9pbmZvIHsKKyB1X2ludDMyX3Qgc2Vjb25kczsKKyB1X2ludDMyX3QgaGl0X2NvdW50OworIHVfaW50OF90IGNoZWNrX3NldDsKKyB1X2ludDhfdCBpbnZlcnQ7CisgY2hhciBuYW1lW0lQVF9SRUNFTlRfTkFNRV9MRU5dOworIHVfaW50OF90IHNpZGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc2N0cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zY3RwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMzAxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc2N0cC5oCkBAIC0wLDAgKzEsNjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9TQ1RQX0hfCisjZGVmaW5lIF9JUFRfU0NUUF9IXworCisjZGVmaW5lIElQVF9TQ1RQX1NSQ19QT1JUUyAweDAxCisjZGVmaW5lIElQVF9TQ1RQX0RFU1RfUE9SVFMgMHgwMgorI2RlZmluZSBJUFRfU0NUUF9DSFVOS19UWVBFUyAweDA0CisKKyNkZWZpbmUgSVBUX1NDVFBfVkFMSURfRkxBR1MgMHgwNworCitzdHJ1Y3QgaXB0X3NjdHBfZmxhZ19pbmZvIHsKKyB1X2ludDhfdCBjaHVua3R5cGU7CisgdV9pbnQ4X3QgZmxhZzsKKyB1X2ludDhfdCBmbGFnX21hc2s7Cit9OworCisjZGVmaW5lIElQVF9OVU1fU0NUUF9GTEFHUyA0CisKK3N0cnVjdCBpcHRfc2N0cF9pbmZvIHsKKyB1X2ludDE2X3QgZHB0c1syXTsKKyB1X2ludDE2X3Qgc3B0c1syXTsKKworIHVfaW50MzJfdCBjaHVua21hcFsyNTYgLyBzaXplb2YgKHVfaW50MzJfdCldOworCisjZGVmaW5lIFNDVFBfQ0hVTktfTUFUQ0hfQU5ZIDB4MDEgIAorI2RlZmluZSBTQ1RQX0NIVU5LX01BVENIX0FMTCAweDAyICAKKyNkZWZpbmUgU0NUUF9DSFVOS19NQVRDSF9PTkxZIDB4MDQgIAorCisgdV9pbnQzMl90IGNodW5rX21hdGNoX3R5cGU7Cisgc3RydWN0IGlwdF9zY3RwX2ZsYWdfaW5mbyBmbGFnX2luZm9bSVBUX05VTV9TQ1RQX0ZMQUdTXTsKKyBpbnQgZmxhZ19jb3VudDsKKworIHVfaW50MzJfdCBmbGFnczsKKyB1X2ludDMyX3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIGJ5dGVzKHR5cGUpIChzaXplb2YodHlwZSkgKiA4KQorCisjZGVmaW5lIFNDVFBfQ0hVTktNQVBfU0VUKGNodW5rbWFwLCB0eXBlKSAgIGRvIHsgICBjaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gfD0gICAxIDw8ICh0eXBlICUgYnl0ZXModV9pbnQzMl90KSk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NMRUFSKGNodW5rbWFwLCB0eXBlKSAgIGRvIHsgICBjaHVua21hcFt0eXBlIC8gYnl0ZXModV9pbnQzMl90KV0gJj0gICB+KDEgPDwgKHR5cGUgJSBieXRlcyh1X2ludDMyX3QpKSk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX1NFVChjaHVua21hcCwgdHlwZSkgICh7ICAgKGNodW5rbWFwW3R5cGUgLyBieXRlcyAodV9pbnQzMl90KV0gJiAgICgxIDw8ICh0eXBlICUgYnl0ZXMgKHVfaW50MzJfdCkpKSkgPyAxOiAwOyAgfSkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1JFU0VUKGNodW5rbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgICBjaHVua21hcFtpXSA9IDA7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX1NFVF9BTEwoY2h1bmttYXApICAgZG8geyAgIGludCBpOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSAgIGNodW5rbWFwW2ldID0gfjA7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0NPUFkoZGVzdG1hcCwgc3JjbWFwKSAgIGRvIHsgICBpbnQgaTsgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgICBkZXN0bWFwW2ldID0gc3JjbWFwW2ldOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgU0NUUF9DSFVOS01BUF9JU19DTEVBUihjaHVua21hcCkgICh7ICAgaW50IGk7ICAgaW50IGZsYWcgPSAxOyAgIGZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNodW5rbWFwKTsgaSsrKSB7ICAgaWYgKGNodW5rbWFwW2ldKSB7ICAgZmxhZyA9IDA7ICAgYnJlYWs7ICAgfSAgIH0gICBmbGFnOyAgfSkKKworI2RlZmluZSBTQ1RQX0NIVU5LTUFQX0lTX0FMTF9TRVQoY2h1bmttYXApICAoeyAgIGludCBpOyAgIGludCBmbGFnID0gMTsgICBmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjaHVua21hcCk7IGkrKykgeyAgIGlmIChjaHVua21hcFtpXSAhPSB+MCkgeyAgIGZsYWcgPSAwOyAgIGJyZWFrOyAgIH0gICB9ICAgZmxhZzsgIH0pCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmQ1MTk5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfc3RhdGUuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfU1RBVEVfSAorI2RlZmluZSBfSVBUX1NUQVRFX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9zdGF0ZS5oPgorCisjZGVmaW5lIElQVF9TVEFURV9CSVQgWFRfU1RBVEVfQklUCisjZGVmaW5lIElQVF9TVEFURV9JTlZBTElEIFhUX1NUQVRFX0lOVkFMSUQKKworI2RlZmluZSBJUFRfU1RBVEVfVU5UUkFDS0VEIFhUX1NUQVRFX1VOVFJBQ0tFRAorCisjZGVmaW5lIGlwdF9zdGF0ZV9pbmZvIHh0X3N0YXRlX2luZm8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjQvaXB0X3N0cmluZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDkyM2RkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF9zdHJpbmcuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUFRfU1RSSU5HX0gKKyNkZWZpbmUgX0lQVF9TVFJJTkdfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3N0cmluZy5oPgorCisjZGVmaW5lIElQVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRSBYVF9TVFJJTkdfTUFYX1BBVFRFUk5fU0laRQorI2RlZmluZSBJUFRfU1RSSU5HX01BWF9BTEdPX05BTUVfU0laRSBYVF9TVFJJTkdfTUFYX0FMR09fTkFNRV9TSVpFCisjZGVmaW5lIGlwdF9zdHJpbmdfaW5mbyB4dF9zdHJpbmdfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zXy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY0L2lwdF90b3NfLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzg5Y2UyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2NC9pcHRfdG9zXy5oCkBAIC0wLDAgKzEsMjQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQVF9UT1NfSAorI2RlZmluZSBfSVBUX1RPU19ICisKK3N0cnVjdCBpcHRfdG9zX2luZm8geworIHVfaW50OF90IHRvczsKKyB1X2ludDhfdCBpbnZlcnQ7Cit9OworCisjaWZuZGVmIElQVE9TX05PUk1BTFNWQworI2RlZmluZSBJUFRPU19OT1JNQUxTVkMgMAorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY4Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2LmgKQEAgLTAsMCArMSw2NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX0lQNl9ORVRGSUxURVJfSAorI2RlZmluZSBfX0xJTlVYX0lQNl9ORVRGSUxURVJfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyLmg+CisKKyNkZWZpbmUgTkZDX0lQNl9TUkMgMHgwMDAxCisKKyNkZWZpbmUgTkZDX0lQNl9EU1QgMHgwMDAyCisKKyNkZWZpbmUgTkZDX0lQNl9JRl9JTiAweDAwMDQKKworI2RlZmluZSBORkNfSVA2X0lGX09VVCAweDAwMDgKKworI2RlZmluZSBORkNfSVA2X1RPUyAweDAwMTAKKworI2RlZmluZSBORkNfSVA2X1BST1RPIDB4MDAyMAorCisjZGVmaW5lIE5GQ19JUDZfT1BUSU9OUyAweDAwNDAKKworI2RlZmluZSBORkNfSVA2X0ZSQUcgMHgwMDgwCisKKyNkZWZpbmUgTkZDX0lQNl9UQ1BGTEFHUyAweDAxMDAKKworI2RlZmluZSBORkNfSVA2X1NSQ19QVCAweDAyMDAKKworI2RlZmluZSBORkNfSVA2X0RTVF9QVCAweDA0MDAKKworI2RlZmluZSBORkNfSVA2X1BST1RPX1VOS05PV04gMHgyMDAwCisKKyNkZWZpbmUgTkZfSVA2X1BSRV9ST1VUSU5HIDAKKworI2RlZmluZSBORl9JUDZfTE9DQUxfSU4gMQorCisjZGVmaW5lIE5GX0lQNl9GT1JXQVJEIDIKKworI2RlZmluZSBORl9JUDZfTE9DQUxfT1VUIDMKKworI2RlZmluZSBORl9JUDZfUE9TVF9ST1VUSU5HIDQKKyNkZWZpbmUgTkZfSVA2X05VTUhPT0tTIDUKKworZW51bSBuZl9pcDZfaG9va19wcmlvcml0aWVzIHsKKyBORl9JUDZfUFJJX0ZJUlNUID0gSU5UX01JTiwKKyBORl9JUDZfUFJJX0NPTk5UUkFDS19ERUZSQUcgPSAtNDAwLAorIE5GX0lQNl9QUklfU0VMSU5VWF9GSVJTVCA9IC0yMjUsCisgTkZfSVA2X1BSSV9DT05OVFJBQ0sgPSAtMjAwLAorIE5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0ZPUldBUkQgPSAtMTc1LAorIE5GX0lQNl9QUklfTUFOR0xFID0gLTE1MCwKKyBORl9JUDZfUFJJX05BVF9EU1QgPSAtMTAwLAorIE5GX0lQNl9QUklfQlJJREdFX1NBQk9UQUdFX0xPQ0FMX09VVCA9IC01MCwKKyBORl9JUDZfUFJJX0ZJTFRFUiA9IDAsCisgTkZfSVA2X1BSSV9OQVRfU1JDID0gMTAwLAorIE5GX0lQNl9QUklfU0VMSU5VWF9MQVNUID0gMjI1LAorIE5GX0lQNl9QUklfTEFTVCA9IElOVF9NQVgsCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZfdGFibGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2ODdlNGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2X3RhYmxlcy5oCkBAIC0wLDAgKzEsMTc4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZfVEFCTEVTX0gKKyNkZWZpbmUgX0lQNl9UQUJMRVNfSAorCisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXJfaXB2Ni5oPgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3hfdGFibGVzLmg+CisKKyNkZWZpbmUgSVA2VF9GVU5DVElPTl9NQVhOQU1FTEVOIFhUX0ZVTkNUSU9OX01BWE5BTUVMRU4KKyNkZWZpbmUgSVA2VF9UQUJMRV9NQVhOQU1FTEVOIFhUX1RBQkxFX01BWE5BTUVMRU4KKworI2RlZmluZSBpcDZ0X21hdGNoIHh0X21hdGNoCisjZGVmaW5lIGlwNnRfdGFyZ2V0IHh0X3RhcmdldAorI2RlZmluZSBpcDZ0X3RhYmxlIHh0X3RhYmxlCisjZGVmaW5lIGlwNnRfZ2V0X3JldmlzaW9uIHh0X2dldF9yZXZpc2lvbgorCitzdHJ1Y3QgaXA2dF9pcDYgeworCisgc3RydWN0IGluNl9hZGRyIHNyYywgZHN0OworCisgc3RydWN0IGluNl9hZGRyIHNtc2ssIGRtc2s7CisgY2hhciBpbmlmYWNlW0lGTkFNU0laXSwgb3V0aWZhY2VbSUZOQU1TSVpdOworIHVuc2lnbmVkIGNoYXIgaW5pZmFjZV9tYXNrW0lGTkFNU0laXSwgb3V0aWZhY2VfbWFza1tJRk5BTVNJWl07CisKKyB1X2ludDE2X3QgcHJvdG87CisKKyB1X2ludDhfdCB0b3M7CisKKyB1X2ludDhfdCBmbGFnczsKKworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBpcDZ0X2VudHJ5X21hdGNoIHh0X2VudHJ5X21hdGNoCisjZGVmaW5lIGlwNnRfZW50cnlfdGFyZ2V0IHh0X2VudHJ5X3RhcmdldAorI2RlZmluZSBpcDZ0X3N0YW5kYXJkX3RhcmdldCB4dF9zdGFuZGFyZF90YXJnZXQKKworI2RlZmluZSBpcDZ0X2NvdW50ZXJzIHh0X2NvdW50ZXJzCisKKyNkZWZpbmUgSVA2VF9GX1BST1RPIDB4MDEgIAorI2RlZmluZSBJUDZUX0ZfVE9TIDB4MDIgIAorI2RlZmluZSBJUDZUX0ZfR09UTyAweDA0ICAKKyNkZWZpbmUgSVA2VF9GX01BU0sgMHgwNyAgCisKKyNkZWZpbmUgSVA2VF9JTlZfVklBX0lOIDB4MDEgIAorI2RlZmluZSBJUDZUX0lOVl9WSUFfT1VUIDB4MDIgIAorI2RlZmluZSBJUDZUX0lOVl9UT1MgMHgwNCAgCisjZGVmaW5lIElQNlRfSU5WX1NSQ0lQIDB4MDggIAorI2RlZmluZSBJUDZUX0lOVl9EU1RJUCAweDEwICAKKyNkZWZpbmUgSVA2VF9JTlZfRlJBRyAweDIwICAKKyNkZWZpbmUgSVA2VF9JTlZfUFJPVE8gWFRfSU5WX1BST1RPCisjZGVmaW5lIElQNlRfSU5WX01BU0sgMHg3RiAgCisKK3N0cnVjdCBpcDZ0X2VudHJ5Cit7Cisgc3RydWN0IGlwNnRfaXA2IGlwdjY7CisKKyB1bnNpZ25lZCBpbnQgbmZjYWNoZTsKKworIHVfaW50MTZfdCB0YXJnZXRfb2Zmc2V0OworCisgdV9pbnQxNl90IG5leHRfb2Zmc2V0OworCisgdW5zaWduZWQgaW50IGNvbWVmcm9tOworCisgc3RydWN0IHh0X2NvdW50ZXJzIGNvdW50ZXJzOworCisgdW5zaWduZWQgY2hhciBlbGVtc1swXTsKK307CisKKyNkZWZpbmUgSVA2VF9CQVNFX0NUTCBYVF9CQVNFX0NUTAorCisjZGVmaW5lIElQNlRfU09fU0VUX1JFUExBQ0UgWFRfU09fU0VUX1JFUExBQ0UKKyNkZWZpbmUgSVA2VF9TT19TRVRfQUREX0NPVU5URVJTIFhUX1NPX1NFVF9BRERfQ09VTlRFUlMKKyNkZWZpbmUgSVA2VF9TT19TRVRfTUFYIFhUX1NPX1NFVF9NQVgKKworI2RlZmluZSBJUDZUX1NPX0dFVF9JTkZPIFhUX1NPX0dFVF9JTkZPCisjZGVmaW5lIElQNlRfU09fR0VUX0VOVFJJRVMgWFRfU09fR0VUX0VOVFJJRVMKKyNkZWZpbmUgSVA2VF9TT19HRVRfUkVWSVNJT05fTUFUQ0ggWFRfU09fR0VUX1JFVklTSU9OX01BVENICisjZGVmaW5lIElQNlRfU09fR0VUX1JFVklTSU9OX1RBUkdFVCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisjZGVmaW5lIElQNlRfU09fR0VUX01BWCBYVF9TT19HRVRfUkVWSVNJT05fVEFSR0VUCisKKyNkZWZpbmUgSVA2VF9DT05USU5VRSBYVF9DT05USU5VRQorCisjZGVmaW5lIElQNlRfUkVUVVJOIFhUX1JFVFVSTgorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3RjcHVkcC5oPgorCisjZGVmaW5lIGlwNnRfdGNwIHh0X3RjcAorI2RlZmluZSBpcDZ0X3VkcCB4dF91ZHAKKworI2RlZmluZSBJUDZUX1RDUF9JTlZfU1JDUFQgWFRfVENQX0lOVl9TUkNQVAorI2RlZmluZSBJUDZUX1RDUF9JTlZfRFNUUFQgWFRfVENQX0lOVl9EU1RQVAorI2RlZmluZSBJUDZUX1RDUF9JTlZfRkxBR1MgWFRfVENQX0lOVl9GTEFHUworI2RlZmluZSBJUDZUX1RDUF9JTlZfT1BUSU9OIFhUX1RDUF9JTlZfT1BUSU9OCisjZGVmaW5lIElQNlRfVENQX0lOVl9NQVNLIFhUX1RDUF9JTlZfTUFTSworCisjZGVmaW5lIElQNlRfVURQX0lOVl9TUkNQVCBYVF9VRFBfSU5WX1NSQ1BUCisjZGVmaW5lIElQNlRfVURQX0lOVl9EU1RQVCBYVF9VRFBfSU5WX0RTVFBUCisjZGVmaW5lIElQNlRfVURQX0lOVl9NQVNLIFhUX1VEUF9JTlZfTUFTSworCitzdHJ1Y3QgaXA2dF9pY21wCit7CisgdV9pbnQ4X3QgdHlwZTsKKyB1X2ludDhfdCBjb2RlWzJdOworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBJUDZUX0lDTVBfSU5WIDB4MDEgIAorCitzdHJ1Y3QgaXA2dF9nZXRpbmZvCit7CisKKyBjaGFyIG5hbWVbSVA2VF9UQUJMRV9NQVhOQU1FTEVOXTsKKworIHVuc2lnbmVkIGludCB2YWxpZF9ob29rczsKKworIHVuc2lnbmVkIGludCBob29rX2VudHJ5W05GX0lQNl9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgdW5kZXJmbG93W05GX0lQNl9OVU1IT09LU107CisKKyB1bnNpZ25lZCBpbnQgbnVtX2VudHJpZXM7CisKKyB1bnNpZ25lZCBpbnQgc2l6ZTsKK307CisKK3N0cnVjdCBpcDZ0X3JlcGxhY2UKK3sKKworIGNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHZhbGlkX2hvb2tzOworCisgdW5zaWduZWQgaW50IG51bV9lbnRyaWVzOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyB1bnNpZ25lZCBpbnQgaG9va19lbnRyeVtORl9JUDZfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IHVuZGVyZmxvd1tORl9JUDZfTlVNSE9PS1NdOworCisgdW5zaWduZWQgaW50IG51bV9jb3VudGVyczsKKworIHN0cnVjdCB4dF9jb3VudGVycyBfX3VzZXIgKmNvdW50ZXJzOworCisgc3RydWN0IGlwNnRfZW50cnkgZW50cmllc1swXTsKK307CisKKyNkZWZpbmUgaXA2dF9jb3VudGVyc19pbmZvIHh0X2NvdW50ZXJzX2luZm8KKworc3RydWN0IGlwNnRfZ2V0X2VudHJpZXMKK3sKKworIGNoYXIgbmFtZVtJUDZUX1RBQkxFX01BWE5BTUVMRU5dOworCisgdW5zaWduZWQgaW50IHNpemU7CisKKyBzdHJ1Y3QgaXA2dF9lbnRyeSBlbnRyeXRhYmxlWzBdOworfTsKKworI2RlZmluZSBJUDZUX1NUQU5EQVJEX1RBUkdFVCBYVF9TVEFOREFSRF9UQVJHRVQKKworI2RlZmluZSBJUDZUX0VSUk9SX1RBUkdFVCBYVF9FUlJPUl9UQVJHRVQKKworI2RlZmluZSBJUDZUX01BVENIX0lURVJBVEUoZSwgZm4sIGFyZ3MuLi4pICAoeyAgIHVuc2lnbmVkIGludCBfX2k7ICAgaW50IF9fcmV0ID0gMDsgICBzdHJ1Y3QgaXA2dF9lbnRyeV9tYXRjaCAqX19tOyAgICAgZm9yIChfX2kgPSBzaXplb2Yoc3RydWN0IGlwNnRfZW50cnkpOyAgIF9faSA8IChlKS0+dGFyZ2V0X29mZnNldDsgICBfX2kgKz0gX19tLT51Lm1hdGNoX3NpemUpIHsgICBfX20gPSAodm9pZCAqKShlKSArIF9faTsgICAgIF9fcmV0ID0gZm4oX19tICwgIyMgYXJncyk7ICAgaWYgKF9fcmV0ICE9IDApICAgYnJlYWs7ICAgfSAgIF9fcmV0OyAgfSkKKyNkZWZpbmUgSVA2VF9FTlRSWV9JVEVSQVRFKGVudHJpZXMsIHNpemUsIGZuLCBhcmdzLi4uKSAgKHsgICB1bnNpZ25lZCBpbnQgX19pOyAgIGludCBfX3JldCA9IDA7ICAgc3RydWN0IGlwNnRfZW50cnkgKl9fZTsgICAgIGZvciAoX19pID0gMDsgX19pIDwgKHNpemUpOyBfX2kgKz0gX19lLT5uZXh0X29mZnNldCkgeyAgIF9fZSA9ICh2b2lkICopKGVudHJpZXMpICsgX19pOyAgICAgX19yZXQgPSBmbihfX2UgLCAjIyBhcmdzKTsgICBpZiAoX19yZXQgIT0gMCkgICBicmVhazsgICB9ICAgX19yZXQ7ICB9KQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9ITC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMDcxZmY5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfSEwuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX0hMX0gKKyNkZWZpbmUgX0lQNlRfSExfSAorCitlbnVtIHsKKyBJUDZUX0hMX1NFVCA9IDAsCisgSVA2VF9ITF9JTkMsCisgSVA2VF9ITF9ERUMKK307CisKKyNkZWZpbmUgSVA2VF9ITF9NQVhNT0RFIElQNlRfSExfREVDCisKK3N0cnVjdCBpcDZ0X0hMX2luZm8geworIHVfaW50OF90IG1vZGU7CisgdV9pbnQ4X3QgaG9wX2xpbWl0OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X0xPRy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM0NGMxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9MT0cuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX0xPR19ICisjZGVmaW5lIF9JUDZUX0xPR19ICisKKyNkZWZpbmUgSVA2VF9MT0dfVENQU0VRIDB4MDEgIAorI2RlZmluZSBJUDZUX0xPR19UQ1BPUFQgMHgwMiAgCisjZGVmaW5lIElQNlRfTE9HX0lQT1BUIDB4MDQgIAorI2RlZmluZSBJUDZUX0xPR19VSUQgMHgwOCAgCisjZGVmaW5lIElQNlRfTE9HX05GTE9HIDB4MTAgIAorI2RlZmluZSBJUDZUX0xPR19NQVNLIDB4MWYKKworc3RydWN0IGlwNnRfbG9nX2luZm8geworIHVuc2lnbmVkIGNoYXIgbGV2ZWw7CisgdW5zaWduZWQgY2hhciBsb2dmbGFnczsKKyBjaGFyIHByZWZpeFszMF07Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X1JFSkVDVC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfUkVKRUNULmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEwMWM4NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X1JFSkVDVC5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfUkVKRUNUX0gKKyNkZWZpbmUgX0lQNlRfUkVKRUNUX0gKKworZW51bSBpcDZ0X3JlamVjdF93aXRoIHsKKyBJUDZUX0lDTVA2X05PX1JPVVRFLAorIElQNlRfSUNNUDZfQURNX1BST0hJQklURUQsCisgSVA2VF9JQ01QNl9OT1RfTkVJR0hCT1VSLAorIElQNlRfSUNNUDZfQUREUl9VTlJFQUNILAorIElQNlRfSUNNUDZfUE9SVF9VTlJFQUNILAorIElQNlRfSUNNUDZfRUNIT1JFUExZLAorIElQNlRfVENQX1JFU0VUCit9OworCitzdHJ1Y3QgaXA2dF9yZWplY3RfaW5mbyB7CisgdV9pbnQzMl90IHdpdGg7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2FoLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9haC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTBkZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9haC5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfQUhfSAorI2RlZmluZSBfSVA2VF9BSF9ICisKK3N0cnVjdCBpcDZ0X2FoCit7CisgdV9pbnQzMl90IHNwaXNbMl07CisgdV9pbnQzMl90IGhkcmxlbjsKKyB1X2ludDhfdCBoZHJyZXM7CisgdV9pbnQ4X3QgaW52ZmxhZ3M7Cit9OworCisjZGVmaW5lIElQNlRfQUhfU1BJIDB4MDEKKyNkZWZpbmUgSVA2VF9BSF9MRU4gMHgwMgorI2RlZmluZSBJUDZUX0FIX1JFUyAweDA0CisKKyNkZWZpbmUgSVA2VF9BSF9JTlZfU1BJIDB4MDEgIAorI2RlZmluZSBJUDZUX0FIX0lOVl9MRU4gMHgwMiAgCisjZGVmaW5lIElQNlRfQUhfSU5WX01BU0sgMHgwMyAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9lc3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWE3NTU2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZXNwLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9FU1BfSAorI2RlZmluZSBfSVA2VF9FU1BfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X2VzcC5oPgorCisjZGVmaW5lIGlwNnRfZXNwIHh0X2VzcAorI2RlZmluZSBJUDZUX0VTUF9JTlZfU1BJIFhUX0VTUF9JTlZfU1BJCisjZGVmaW5lIElQNlRfRVNQX0lOVl9NQVNLIFhUX0VTUF9JTlZfTUFTSworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2ZyYWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2ZyYWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzRkNmJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfZnJhZy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfRlJBR19ICisjZGVmaW5lIF9JUDZUX0ZSQUdfSAorCitzdHJ1Y3QgaXA2dF9mcmFnCit7CisgdV9pbnQzMl90IGlkc1syXTsKKyB1X2ludDMyX3QgaGRybGVuOworIHVfaW50OF90IGZsYWdzOworIHVfaW50OF90IGludmZsYWdzOworfTsKKworI2RlZmluZSBJUDZUX0ZSQUdfSURTIDB4MDEKKyNkZWZpbmUgSVA2VF9GUkFHX0xFTiAweDAyCisjZGVmaW5lIElQNlRfRlJBR19SRVMgMHgwNAorI2RlZmluZSBJUDZUX0ZSQUdfRlNUIDB4MDgKKyNkZWZpbmUgSVA2VF9GUkFHX01GIDB4MTAKKyNkZWZpbmUgSVA2VF9GUkFHX05NRiAweDIwCisKKyNkZWZpbmUgSVA2VF9GUkFHX0lOVl9JRFMgMHgwMSAgCisjZGVmaW5lIElQNlRfRlJBR19JTlZfTEVOIDB4MDIgIAorI2RlZmluZSBJUDZUX0ZSQUdfSU5WX01BU0sgMHgwMyAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAxNDRkMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2hsLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9ITF9ICisjZGVmaW5lIF9JUDZUX0hMX0gKKworZW51bSB7CisgSVA2VF9ITF9FUSA9IDAsCisgSVA2VF9ITF9ORSwKKyBJUDZUX0hMX0xULAorIElQNlRfSExfR1QsCit9OworCitzdHJ1Y3QgaXA2dF9obF9pbmZvIHsKKyB1X2ludDhfdCBtb2RlOworIHVfaW50OF90IGhvcF9saW1pdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaXB2NmhlYWRlci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfaXB2NmhlYWRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlODNlYmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9pcHY2aGVhZGVyLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0lQVjZIRUFERVJfSAorI2RlZmluZSBfX0lQVjZIRUFERVJfSAorCitzdHJ1Y3QgaXA2dF9pcHY2aGVhZGVyX2luZm8KK3sKKyB1X2ludDhfdCBtYXRjaGZsYWdzOworIHVfaW50OF90IGludmZsYWdzOworIHVfaW50OF90IG1vZGVmbGFnOworfTsKKworI2RlZmluZSBNQVNLX0hPUE9QVFMgMTI4CisjZGVmaW5lIE1BU0tfRFNUT1BUUyA2NAorI2RlZmluZSBNQVNLX1JPVVRJTkcgMzIKKyNkZWZpbmUgTUFTS19GUkFHTUVOVCAxNgorI2RlZmluZSBNQVNLX0FIIDgKKyNkZWZpbmUgTUFTS19FU1AgNAorI2RlZmluZSBNQVNLX05PTkUgMgorI2RlZmluZSBNQVNLX1BST1RPIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X2xlbmd0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZkYzRjNWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9sZW5ndGguaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX0xFTkdUSF9ICisjZGVmaW5lIF9JUDZUX0xFTkdUSF9ICisKKyNpbmNsdWRlIDxsaW51eC9uZXRmaWx0ZXIveHRfbGVuZ3RoLmg+CisjZGVmaW5lIGlwNnRfbGVuZ3RoX2luZm8geHRfbGVuZ3RoX2luZm8KKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfbWFjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNThlNjAyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X21hYy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfTUFDX0gKKyNkZWZpbmUgX0lQNlRfTUFDX0gKKworI2luY2x1ZGUgPGxpbnV4L25ldGZpbHRlci94dF9tYWMuaD4KKyNkZWZpbmUgaXA2dF9tYWNfaW5mbyB4dF9tYWNfaW5mbworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X29wdHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X29wdHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZDlkYjljCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3B0cy5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfT1BUU19ICisjZGVmaW5lIF9JUDZUX09QVFNfSAorCisjZGVmaW5lIElQNlRfT1BUU19PUFRTTlIgMTYKKworc3RydWN0IGlwNnRfb3B0cworeworIHVfaW50MzJfdCBoZHJsZW47CisgdV9pbnQ4X3QgZmxhZ3M7CisgdV9pbnQ4X3QgaW52ZmxhZ3M7CisgdV9pbnQxNl90IG9wdHNbSVA2VF9PUFRTX09QVFNOUl07CisgdV9pbnQ4X3Qgb3B0c25yOworfTsKKworI2RlZmluZSBJUDZUX09QVFNfTEVOIDB4MDEKKyNkZWZpbmUgSVA2VF9PUFRTX09QVFMgMHgwMgorI2RlZmluZSBJUDZUX09QVFNfTlNUUklDVCAweDA0CisKKyNkZWZpbmUgSVA2VF9PUFRTX0lOVl9MRU4gMHgwMSAgCisjZGVmaW5lIElQNlRfT1BUU19JTlZfTUFTSyAweDAxICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0ZmlsdGVyX2lwdjYvaXA2dF9vd25lci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNjEyNmI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfb3duZXIuaApAQCAtMCwwICsxLDI4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9JUDZUX09XTkVSX0gKKyNkZWZpbmUgX0lQNlRfT1dORVJfSAorCisjZGVmaW5lIElQNlRfT1dORVJfVUlEIDB4MDEKKyNkZWZpbmUgSVA2VF9PV05FUl9HSUQgMHgwMgorI2RlZmluZSBJUDZUX09XTkVSX1BJRCAweDA0CisjZGVmaW5lIElQNlRfT1dORVJfU0lEIDB4MDgKKworc3RydWN0IGlwNnRfb3duZXJfaW5mbyB7CisgdWlkX3QgdWlkOworIGdpZF90IGdpZDsKKyBwaWRfdCBwaWQ7CisgcGlkX3Qgc2lkOworIHVfaW50OF90IG1hdGNoLCBpbnZlcnQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BoeXNkZXYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3BoeXNkZXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NTdlMmZiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcGh5c2Rldi5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0lQNlRfUEhZU0RFVl9ICisjZGVmaW5lIF9JUDZUX1BIWVNERVZfSAorCisjaW5jbHVkZSA8bGludXgvbmV0ZmlsdGVyL3h0X3BoeXNkZXYuaD4KKworI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSU4gWFRfUEhZU0RFVl9PUF9JTgorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfT1VUIFhUX1BIWVNERVZfT1BfT1VUCisjZGVmaW5lIElQNlRfUEhZU0RFVl9PUF9CUklER0VEIFhUX1BIWVNERVZfT1BfQlJJREdFRAorI2RlZmluZSBJUDZUX1BIWVNERVZfT1BfSVNJTiBYVF9QSFlTREVWX09QX0lTSU4KKyNkZWZpbmUgSVA2VF9QSFlTREVWX09QX0lTT1VUIFhUX1BIWVNERVZfT1BfSVNPVVQKKyNkZWZpbmUgSVA2VF9QSFlTREVWX09QX01BU0sgWFRfUEhZU0RFVl9PUF9NQVNLCisKKyNkZWZpbmUgaXA2dF9waHlzZGV2X2luZm8geHRfcGh5c2Rldl9pbmZvCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGZpbHRlcl9pcHY2L2lwNnRfcnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3J0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjc0YTdlZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZXRmaWx0ZXJfaXB2Ni9pcDZ0X3J0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfSVA2VF9SVF9ICisjZGVmaW5lIF9JUDZUX1JUX0gKKworI2RlZmluZSBJUDZUX1JUX0hPUFMgMTYKKworc3RydWN0IGlwNnRfcnQKK3sKKyB1X2ludDMyX3QgcnRfdHlwZTsKKyB1X2ludDMyX3Qgc2Vnc2xlZnRbMl07CisgdV9pbnQzMl90IGhkcmxlbjsKKyB1X2ludDhfdCBmbGFnczsKKyB1X2ludDhfdCBpbnZmbGFnczsKKyBzdHJ1Y3QgaW42X2FkZHIgYWRkcnNbSVA2VF9SVF9IT1BTXTsKKyB1X2ludDhfdCBhZGRybnI7Cit9OworCisjZGVmaW5lIElQNlRfUlRfVFlQIDB4MDEKKyNkZWZpbmUgSVA2VF9SVF9TR1MgMHgwMgorI2RlZmluZSBJUDZUX1JUX0xFTiAweDA0CisjZGVmaW5lIElQNlRfUlRfUkVTIDB4MDgKKyNkZWZpbmUgSVA2VF9SVF9GU1RfTUFTSyAweDMwCisjZGVmaW5lIElQNlRfUlRfRlNUIDB4MTAKKyNkZWZpbmUgSVA2VF9SVF9GU1RfTlNUUklDVCAweDIwCisKKyNkZWZpbmUgSVA2VF9SVF9JTlZfVFlQIDB4MDEgIAorI2RlZmluZSBJUDZUX1JUX0lOVl9TR1MgMHgwMiAgCisjZGVmaW5lIElQNlRfUlRfSU5WX0xFTiAweDA0ICAKKyNkZWZpbmUgSVA2VF9SVF9JTlZfTUFTSyAweDA3ICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmV0bGluay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNmYxYzA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25ldGxpbmsuaApAQCAtMCwwICsxLDExOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX05FVExJTktfSAorI2RlZmluZSBfX0xJTlVYX05FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvc29ja2V0Lmg+ICAKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjZGVmaW5lIE5FVExJTktfUk9VVEUgMCAgCisjZGVmaW5lIE5FVExJTktfVU5VU0VEIDEgIAorI2RlZmluZSBORVRMSU5LX1VTRVJTT0NLIDIgIAorI2RlZmluZSBORVRMSU5LX0ZJUkVXQUxMIDMgIAorI2RlZmluZSBORVRMSU5LX0lORVRfRElBRyA0ICAKKyNkZWZpbmUgTkVUTElOS19ORkxPRyA1ICAKKyNkZWZpbmUgTkVUTElOS19YRlJNIDYgIAorI2RlZmluZSBORVRMSU5LX1NFTElOVVggNyAgCisjZGVmaW5lIE5FVExJTktfSVNDU0kgOCAgCisjZGVmaW5lIE5FVExJTktfQVVESVQgOSAgCisjZGVmaW5lIE5FVExJTktfRklCX0xPT0tVUCAxMCAKKyNkZWZpbmUgTkVUTElOS19DT05ORUNUT1IgMTEKKyNkZWZpbmUgTkVUTElOS19ORVRGSUxURVIgMTIgIAorI2RlZmluZSBORVRMSU5LX0lQNl9GVyAxMworI2RlZmluZSBORVRMSU5LX0ROUlRNU0cgMTQgIAorI2RlZmluZSBORVRMSU5LX0tPQkpFQ1RfVUVWRU5UIDE1ICAKKyNkZWZpbmUgTkVUTElOS19HRU5FUklDIDE2CisKKyNkZWZpbmUgTUFYX0xJTktTIDMyIAorCitzdHJ1Y3Qgc29ja2FkZHJfbmwKK3sKKyBzYV9mYW1pbHlfdCBubF9mYW1pbHk7CisgdW5zaWduZWQgc2hvcnQgbmxfcGFkOworIF9fdTMyIG5sX3BpZDsKKyBfX3UzMiBubF9ncm91cHM7Cit9OworCitzdHJ1Y3Qgbmxtc2doZHIKK3sKKyBfX3UzMiBubG1zZ19sZW47CisgX191MTYgbmxtc2dfdHlwZTsKKyBfX3UxNiBubG1zZ19mbGFnczsKKyBfX3UzMiBubG1zZ19zZXE7CisgX191MzIgbmxtc2dfcGlkOworfTsKKworI2RlZmluZSBOTE1fRl9SRVFVRVNUIDEgIAorI2RlZmluZSBOTE1fRl9NVUxUSSAyICAKKyNkZWZpbmUgTkxNX0ZfQUNLIDQgIAorI2RlZmluZSBOTE1fRl9FQ0hPIDggIAorCisjZGVmaW5lIE5MTV9GX1JPT1QgMHgxMDAgIAorI2RlZmluZSBOTE1fRl9NQVRDSCAweDIwMCAgCisjZGVmaW5lIE5MTV9GX0FUT01JQyAweDQwMCAgCisjZGVmaW5lIE5MTV9GX0RVTVAgKE5MTV9GX1JPT1R8TkxNX0ZfTUFUQ0gpCisKKyNkZWZpbmUgTkxNX0ZfUkVQTEFDRSAweDEwMCAgCisjZGVmaW5lIE5MTV9GX0VYQ0wgMHgyMDAgIAorI2RlZmluZSBOTE1fRl9DUkVBVEUgMHg0MDAgIAorI2RlZmluZSBOTE1fRl9BUFBFTkQgMHg4MDAgIAorCisjZGVmaW5lIE5MTVNHX0FMSUdOVE8gNAorI2RlZmluZSBOTE1TR19BTElHTihsZW4pICggKChsZW4pK05MTVNHX0FMSUdOVE8tMSkgJiB+KE5MTVNHX0FMSUdOVE8tMSkgKQorI2RlZmluZSBOTE1TR19IRFJMRU4gKChpbnQpIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpKSkKKyNkZWZpbmUgTkxNU0dfTEVOR1RIKGxlbikgKChsZW4pK05MTVNHX0FMSUdOKE5MTVNHX0hEUkxFTikpCisjZGVmaW5lIE5MTVNHX1NQQUNFKGxlbikgTkxNU0dfQUxJR04oTkxNU0dfTEVOR1RIKGxlbikpCisjZGVmaW5lIE5MTVNHX0RBVEEobmxoKSAoKHZvaWQqKSgoKGNoYXIqKW5saCkgKyBOTE1TR19MRU5HVEgoMCkpKQorI2RlZmluZSBOTE1TR19ORVhUKG5saCxsZW4pICgobGVuKSAtPSBOTE1TR19BTElHTigobmxoKS0+bmxtc2dfbGVuKSwgICAoc3RydWN0IG5sbXNnaGRyKikoKChjaGFyKikobmxoKSkgKyBOTE1TR19BTElHTigobmxoKS0+bmxtc2dfbGVuKSkpCisjZGVmaW5lIE5MTVNHX09LKG5saCxsZW4pICgobGVuKSA+PSAoaW50KXNpemVvZihzdHJ1Y3Qgbmxtc2doZHIpICYmICAgKG5saCktPm5sbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSAmJiAgIChubGgpLT5ubG1zZ19sZW4gPD0gKGxlbikpCisjZGVmaW5lIE5MTVNHX1BBWUxPQUQobmxoLGxlbikgKChubGgpLT5ubG1zZ19sZW4gLSBOTE1TR19TUEFDRSgobGVuKSkpCisKKyNkZWZpbmUgTkxNU0dfTk9PUCAweDEgIAorI2RlZmluZSBOTE1TR19FUlJPUiAweDIgIAorI2RlZmluZSBOTE1TR19ET05FIDB4MyAgCisjZGVmaW5lIE5MTVNHX09WRVJSVU4gMHg0ICAKKworI2RlZmluZSBOTE1TR19NSU5fVFlQRSAweDEwICAKKworc3RydWN0IG5sbXNnZXJyCit7CisgaW50IGVycm9yOworIHN0cnVjdCBubG1zZ2hkciBtc2c7Cit9OworCisjZGVmaW5lIE5FVExJTktfQUREX01FTUJFUlNISVAgMQorI2RlZmluZSBORVRMSU5LX0RST1BfTUVNQkVSU0hJUCAyCisjZGVmaW5lIE5FVExJTktfUEtUSU5GTyAzCisKK3N0cnVjdCBubF9wa3RpbmZvCit7CisgX191MzIgZ3JvdXA7Cit9OworCisjZGVmaW5lIE5FVF9NQUpPUiAzNiAgCisKK2VudW0geworIE5FVExJTktfVU5DT05ORUNURUQgPSAwLAorIE5FVExJTktfQ09OTkVDVEVELAorfTsKKworc3RydWN0IG5sYXR0cgoreworIF9fdTE2IG5sYV9sZW47CisgX191MTYgbmxhX3R5cGU7Cit9OworCisjZGVmaW5lIE5MQV9BTElHTlRPIDQKKyNkZWZpbmUgTkxBX0FMSUdOKGxlbikgKCgobGVuKSArIE5MQV9BTElHTlRPIC0gMSkgJiB+KE5MQV9BTElHTlRPIC0gMSkpCisjZGVmaW5lIE5MQV9IRFJMRU4gKChpbnQpIE5MQV9BTElHTihzaXplb2Yoc3RydWN0IG5sYXR0cikpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTRkYzlmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mcy5oCkBAIC0wLDAgKzEsMTI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORlNfSAorI2RlZmluZSBfTElOVVhfTkZTX0gKKworI2RlZmluZSBORlNfUFJPR1JBTSAxMDAwMDMKKyNkZWZpbmUgTkZTX1BPUlQgMjA0OQorI2RlZmluZSBORlNfTUFYREFUQSA4MTkyCisjZGVmaW5lIE5GU19NQVhQQVRITEVOIDEwMjQKKyNkZWZpbmUgTkZTX01BWE5BTUxFTiAyNTUKKyNkZWZpbmUgTkZTX01BWEdST1VQUyAxNgorI2RlZmluZSBORlNfRkhTSVpFIDMyCisjZGVmaW5lIE5GU19DT09LSUVTSVpFIDQKKyNkZWZpbmUgTkZTX0ZJRk9fREVWICgtMSkKKyNkZWZpbmUgTkZTTU9ERV9GTVQgMDE3MDAwMAorI2RlZmluZSBORlNNT0RFX0RJUiAwMDQwMDAwCisjZGVmaW5lIE5GU01PREVfQ0hSIDAwMjAwMDAKKyNkZWZpbmUgTkZTTU9ERV9CTEsgMDA2MDAwMAorI2RlZmluZSBORlNNT0RFX1JFRyAwMTAwMDAwCisjZGVmaW5lIE5GU01PREVfTE5LIDAxMjAwMDAKKyNkZWZpbmUgTkZTTU9ERV9TT0NLIDAxNDAwMDAKKyNkZWZpbmUgTkZTTU9ERV9GSUZPIDAwMTAwMDAKKworI2RlZmluZSBORlNfTU5UX1BST0dSQU0gMTAwMDA1CisjZGVmaW5lIE5GU19NTlRfUE9SVCA2MjcKKworIGVudW0gbmZzX3N0YXQgeworIE5GU19PSyA9IDAsCisgTkZTRVJSX1BFUk0gPSAxLAorIE5GU0VSUl9OT0VOVCA9IDIsCisgTkZTRVJSX0lPID0gNSwKKyBORlNFUlJfTlhJTyA9IDYsCisgTkZTRVJSX0VBR0FJTiA9IDExLAorIE5GU0VSUl9BQ0NFUyA9IDEzLAorIE5GU0VSUl9FWElTVCA9IDE3LAorIE5GU0VSUl9YREVWID0gMTgsCisgTkZTRVJSX05PREVWID0gMTksCisgTkZTRVJSX05PVERJUiA9IDIwLAorIE5GU0VSUl9JU0RJUiA9IDIxLAorIE5GU0VSUl9JTlZBTCA9IDIyLAorIE5GU0VSUl9GQklHID0gMjcsCisgTkZTRVJSX05PU1BDID0gMjgsCisgTkZTRVJSX1JPRlMgPSAzMCwKKyBORlNFUlJfTUxJTksgPSAzMSwKKyBORlNFUlJfT1BOT1RTVVBQID0gNDUsCisgTkZTRVJSX05BTUVUT09MT05HID0gNjMsCisgTkZTRVJSX05PVEVNUFRZID0gNjYsCisgTkZTRVJSX0RRVU9UID0gNjksCisgTkZTRVJSX1NUQUxFID0gNzAsCisgTkZTRVJSX1JFTU9URSA9IDcxLAorIE5GU0VSUl9XRkxVU0ggPSA5OSwKKyBORlNFUlJfQkFESEFORExFID0gMTAwMDEsCisgTkZTRVJSX05PVF9TWU5DID0gMTAwMDIsCisgTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywKKyBORlNFUlJfTk9UU1VQUCA9IDEwMDA0LAorIE5GU0VSUl9UT09TTUFMTCA9IDEwMDA1LAorIE5GU0VSUl9TRVJWRVJGQVVMVCA9IDEwMDA2LAorIE5GU0VSUl9CQURUWVBFID0gMTAwMDcsCisgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOCwKKyBORlNFUlJfU0FNRSA9IDEwMDA5LAorIE5GU0VSUl9ERU5JRUQgPSAxMDAxMCwKKyBORlNFUlJfRVhQSVJFRCA9IDEwMDExLAorIE5GU0VSUl9MT0NLRUQgPSAxMDAxMiwKKyBORlNFUlJfR1JBQ0UgPSAxMDAxMywKKyBORlNFUlJfRkhFWFBJUkVEID0gMTAwMTQsCisgTkZTRVJSX1NIQVJFX0RFTklFRCA9IDEwMDE1LAorIE5GU0VSUl9XUk9OR1NFQyA9IDEwMDE2LAorIE5GU0VSUl9DTElEX0lOVVNFID0gMTAwMTcsCisgTkZTRVJSX1JFU09VUkNFID0gMTAwMTgsCisgTkZTRVJSX01PVkVEID0gMTAwMTksCisgTkZTRVJSX05PRklMRUhBTkRMRSA9IDEwMDIwLAorIE5GU0VSUl9NSU5PUl9WRVJTX01JU01BVENIID0gMTAwMjEsCisgTkZTRVJSX1NUQUxFX0NMSUVOVElEID0gMTAwMjIsCisgTkZTRVJSX1NUQUxFX1NUQVRFSUQgPSAxMDAyMywKKyBORlNFUlJfT0xEX1NUQVRFSUQgPSAxMDAyNCwKKyBORlNFUlJfQkFEX1NUQVRFSUQgPSAxMDAyNSwKKyBORlNFUlJfQkFEX1NFUUlEID0gMTAwMjYsCisgTkZTRVJSX05PVF9TQU1FID0gMTAwMjcsCisgTkZTRVJSX0xPQ0tfUkFOR0UgPSAxMDAyOCwKKyBORlNFUlJfU1lNTElOSyA9IDEwMDI5LAorIE5GU0VSUl9SRVNUT1JFRkggPSAxMDAzMCwKKyBORlNFUlJfTEVBU0VfTU9WRUQgPSAxMDAzMSwKKyBORlNFUlJfQVRUUk5PVFNVUFAgPSAxMDAzMiwKKyBORlNFUlJfTk9fR1JBQ0UgPSAxMDAzMywKKyBORlNFUlJfUkVDTEFJTV9CQUQgPSAxMDAzNCwKKyBORlNFUlJfUkVDTEFJTV9DT05GTElDVCA9IDEwMDM1LAorIE5GU0VSUl9CQURfWERSID0gMTAwMzYsCisgTkZTRVJSX0xPQ0tTX0hFTEQgPSAxMDAzNywKKyBORlNFUlJfT1BFTk1PREUgPSAxMDAzOCwKKyBORlNFUlJfQkFET1dORVIgPSAxMDAzOSwKKyBORlNFUlJfQkFEQ0hBUiA9IDEwMDQwLAorIE5GU0VSUl9CQUROQU1FID0gMTAwNDEsCisgTkZTRVJSX0JBRF9SQU5HRSA9IDEwMDQyLAorIE5GU0VSUl9MT0NLX05PVFNVUFAgPSAxMDA0MywKKyBORlNFUlJfT1BfSUxMRUdBTCA9IDEwMDQ0LAorIE5GU0VSUl9ERUFETE9DSyA9IDEwMDQ1LAorIE5GU0VSUl9GSUxFX09QRU4gPSAxMDA0NiwKKyBORlNFUlJfQURNSU5fUkVWT0tFRCA9IDEwMDQ3LAorIE5GU0VSUl9DQl9QQVRIX0RPV04gPSAxMDA0OCwKKyBORlNFUlJfUkVQTEFZX01FID0gMTAwNDkKK307CisKK2VudW0gbmZzX2Z0eXBlIHsKKyBORk5PTiA9IDAsCisgTkZSRUcgPSAxLAorIE5GRElSID0gMiwKKyBORkJMSyA9IDMsCisgTkZDSFIgPSA0LAorIE5GTE5LID0gNSwKKyBORlNPQ0sgPSA2LAorIE5GQkFEID0gNywKKyBORkZJRk8gPSA4Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiYjVkZjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMi5oCkBAIC0wLDAgKzEsNzUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GUzJfSAorI2RlZmluZSBfTElOVVhfTkZTMl9ICisKKyNkZWZpbmUgTkZTMl9QT1JUIDIwNDkKKyNkZWZpbmUgTkZTMl9NQVhEQVRBIDgxOTIKKyNkZWZpbmUgTkZTMl9NQVhQQVRITEVOIDEwMjQKKyNkZWZpbmUgTkZTMl9NQVhOQU1MRU4gMjU1CisjZGVmaW5lIE5GUzJfTUFYR1JPVVBTIDE2CisjZGVmaW5lIE5GUzJfRkhTSVpFIDMyCisjZGVmaW5lIE5GUzJfQ09PS0lFU0laRSA0CisjZGVmaW5lIE5GUzJfRklGT19ERVYgKC0xKQorI2RlZmluZSBORlMyTU9ERV9GTVQgMDE3MDAwMAorI2RlZmluZSBORlMyTU9ERV9ESVIgMDA0MDAwMAorI2RlZmluZSBORlMyTU9ERV9DSFIgMDAyMDAwMAorI2RlZmluZSBORlMyTU9ERV9CTEsgMDA2MDAwMAorI2RlZmluZSBORlMyTU9ERV9SRUcgMDEwMDAwMAorI2RlZmluZSBORlMyTU9ERV9MTksgMDEyMDAwMAorI2RlZmluZSBORlMyTU9ERV9TT0NLIDAxNDAwMDAKKyNkZWZpbmUgTkZTMk1PREVfRklGTyAwMDEwMDAwCisKK2VudW0gbmZzMl9mdHlwZSB7CisgTkYyTk9OID0gMCwKKyBORjJSRUcgPSAxLAorIE5GMkRJUiA9IDIsCisgTkYyQkxLID0gMywKKyBORjJDSFIgPSA0LAorIE5GMkxOSyA9IDUsCisgTkYyU09DSyA9IDYsCisgTkYyQkFEID0gNywKKyBORjJGSUZPID0gOAorfTsKKworc3RydWN0IG5mczJfZmggeworIGNoYXIgZGF0YVtORlMyX0ZIU0laRV07Cit9OworCisjZGVmaW5lIE5GUzJfVkVSU0lPTiAyCisjZGVmaW5lIE5GU1BST0NfTlVMTCAwCisjZGVmaW5lIE5GU1BST0NfR0VUQVRUUiAxCisjZGVmaW5lIE5GU1BST0NfU0VUQVRUUiAyCisjZGVmaW5lIE5GU1BST0NfUk9PVCAzCisjZGVmaW5lIE5GU1BST0NfTE9PS1VQIDQKKyNkZWZpbmUgTkZTUFJPQ19SRUFETElOSyA1CisjZGVmaW5lIE5GU1BST0NfUkVBRCA2CisjZGVmaW5lIE5GU1BST0NfV1JJVEVDQUNIRSA3CisjZGVmaW5lIE5GU1BST0NfV1JJVEUgOAorI2RlZmluZSBORlNQUk9DX0NSRUFURSA5CisjZGVmaW5lIE5GU1BST0NfUkVNT1ZFIDEwCisjZGVmaW5lIE5GU1BST0NfUkVOQU1FIDExCisjZGVmaW5lIE5GU1BST0NfTElOSyAxMgorI2RlZmluZSBORlNQUk9DX1NZTUxJTksgMTMKKyNkZWZpbmUgTkZTUFJPQ19NS0RJUiAxNAorI2RlZmluZSBORlNQUk9DX1JNRElSIDE1CisjZGVmaW5lIE5GU1BST0NfUkVBRERJUiAxNgorI2RlZmluZSBORlNQUk9DX1NUQVRGUyAxNworCisjZGVmaW5lIE5GU19NTlRfUFJPR1JBTSAxMDAwMDUKKyNkZWZpbmUgTkZTX01OVF9WRVJTSU9OIDEKKyNkZWZpbmUgTU5UUFJPQ19OVUxMIDAKKyNkZWZpbmUgTU5UUFJPQ19NTlQgMQorI2RlZmluZSBNTlRQUk9DX1VNTlQgMworI2RlZmluZSBNTlRQUk9DX1VNTlRBTEwgNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnMzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzMDM0NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzMy5oCkBAIC0wLDAgKzEsMTA4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORlMzX0gKKyNkZWZpbmUgX0xJTlVYX05GUzNfSAorCisjZGVmaW5lIE5GUzNfUE9SVCAyMDQ5CisjZGVmaW5lIE5GUzNfTUFYREFUQSAzMjc2OAorI2RlZmluZSBORlMzX01BWFBBVEhMRU4gUEFUSF9NQVgKKyNkZWZpbmUgTkZTM19NQVhOQU1MRU4gTkFNRV9NQVgKKyNkZWZpbmUgTkZTM19NQVhHUk9VUFMgMTYKKyNkZWZpbmUgTkZTM19GSFNJWkUgNjQKKyNkZWZpbmUgTkZTM19DT09LSUVTSVpFIDQKKyNkZWZpbmUgTkZTM19GSUZPX0RFViAoLTEpCisjZGVmaW5lIE5GUzNNT0RFX0ZNVCAwMTcwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0RJUiAwMDQwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0NIUiAwMDIwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0JMSyAwMDYwMDAwCisjZGVmaW5lIE5GUzNNT0RFX1JFRyAwMTAwMDAwCisjZGVmaW5lIE5GUzNNT0RFX0xOSyAwMTIwMDAwCisjZGVmaW5lIE5GUzNNT0RFX1NPQ0sgMDE0MDAwMAorI2RlZmluZSBORlMzTU9ERV9GSUZPIDAwMTAwMDAKKworI2RlZmluZSBORlMzX0FDQ0VTU19SRUFEIDB4MDAwMQorI2RlZmluZSBORlMzX0FDQ0VTU19MT09LVVAgMHgwMDAyCisjZGVmaW5lIE5GUzNfQUNDRVNTX01PRElGWSAweDAwMDQKKyNkZWZpbmUgTkZTM19BQ0NFU1NfRVhURU5EIDB4MDAwOAorI2RlZmluZSBORlMzX0FDQ0VTU19ERUxFVEUgMHgwMDEwCisjZGVmaW5lIE5GUzNfQUNDRVNTX0VYRUNVVEUgMHgwMDIwCisjZGVmaW5lIE5GUzNfQUNDRVNTX0ZVTEwgMHgwMDNmCisKK2VudW0gbmZzM19jcmVhdGVtb2RlIHsKKyBORlMzX0NSRUFURV9VTkNIRUNLRUQgPSAwLAorIE5GUzNfQ1JFQVRFX0dVQVJERUQgPSAxLAorIE5GUzNfQ1JFQVRFX0VYQ0xVU0lWRSA9IDIKK307CisKKyNkZWZpbmUgTkZTM19GU0ZfTElOSyAweDAwMDEKKyNkZWZpbmUgTkZTM19GU0ZfU1lNTElOSyAweDAwMDIKKyNkZWZpbmUgTkZTM19GU0ZfSE9NT0dFTkVPVVMgMHgwMDA4CisjZGVmaW5lIE5GUzNfRlNGX0NBTlNFVFRJTUUgMHgwMDEwCisKKyNkZWZpbmUgTkZTM19GU0ZfREVGQVVMVCAweDAwMUIKKyNkZWZpbmUgTkZTM19GU0ZfQklMTFlCT1kgMHgwMDE4CisjZGVmaW5lIE5GUzNfRlNGX1JFQURPTkxZIDB4MDAwOAorCitlbnVtIG5mczNfZnR5cGUgeworIE5GM05PTiA9IDAsCisgTkYzUkVHID0gMSwKKyBORjNESVIgPSAyLAorIE5GM0JMSyA9IDMsCisgTkYzQ0hSID0gNCwKKyBORjNMTksgPSA1LAorIE5GM1NPQ0sgPSA2LAorIE5GM0ZJRk8gPSA3LAorIE5GM0JBRCA9IDgKK307CisKK3N0cnVjdCBuZnMzX2ZoIHsKKyB1bnNpZ25lZCBzaG9ydCBzaXplOworIHVuc2lnbmVkIGNoYXIgZGF0YVtORlMzX0ZIU0laRV07Cit9OworCisjZGVmaW5lIE5GUzNfVkVSU0lPTiAzCisjZGVmaW5lIE5GUzNQUk9DX05VTEwgMAorI2RlZmluZSBORlMzUFJPQ19HRVRBVFRSIDEKKyNkZWZpbmUgTkZTM1BST0NfU0VUQVRUUiAyCisjZGVmaW5lIE5GUzNQUk9DX0xPT0tVUCAzCisjZGVmaW5lIE5GUzNQUk9DX0FDQ0VTUyA0CisjZGVmaW5lIE5GUzNQUk9DX1JFQURMSU5LIDUKKyNkZWZpbmUgTkZTM1BST0NfUkVBRCA2CisjZGVmaW5lIE5GUzNQUk9DX1dSSVRFIDcKKyNkZWZpbmUgTkZTM1BST0NfQ1JFQVRFIDgKKyNkZWZpbmUgTkZTM1BST0NfTUtESVIgOQorI2RlZmluZSBORlMzUFJPQ19TWU1MSU5LIDEwCisjZGVmaW5lIE5GUzNQUk9DX01LTk9EIDExCisjZGVmaW5lIE5GUzNQUk9DX1JFTU9WRSAxMgorI2RlZmluZSBORlMzUFJPQ19STURJUiAxMworI2RlZmluZSBORlMzUFJPQ19SRU5BTUUgMTQKKyNkZWZpbmUgTkZTM1BST0NfTElOSyAxNQorI2RlZmluZSBORlMzUFJPQ19SRUFERElSIDE2CisjZGVmaW5lIE5GUzNQUk9DX1JFQURESVJQTFVTIDE3CisjZGVmaW5lIE5GUzNQUk9DX0ZTU1RBVCAxOAorI2RlZmluZSBORlMzUFJPQ19GU0lORk8gMTkKKyNkZWZpbmUgTkZTM1BST0NfUEFUSENPTkYgMjAKKyNkZWZpbmUgTkZTM1BST0NfQ09NTUlUIDIxCisKKyNkZWZpbmUgTkZTX01OVDNfUFJPR1JBTSAxMDAwMDUKKyNkZWZpbmUgTkZTX01OVDNfVkVSU0lPTiAzCisjZGVmaW5lIE1PVU5UUFJPQzNfTlVMTCAwCisjZGVmaW5lIE1PVU5UUFJPQzNfTU5UIDEKKyNkZWZpbmUgTU9VTlRQUk9DM19VTU5UIDMKKyNkZWZpbmUgTU9VTlRQUk9DM19VTU5UQUxMIDQKKworI2lmZGVmIE5GU19ORUVEX0tFUk5FTF9UWVBFUworCisjZGVmaW5lIE5GUzNfUE9TVF9PUF9BVFRSX1dPUkRTIDIyCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzNC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZTk1ZTQ1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mczQuaApAQCAtMCwwICsxLDk5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORlM0X0gKKyNkZWZpbmUgX0xJTlVYX05GUzRfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBORlM0X1ZFUklGSUVSX1NJWkUgOAorI2RlZmluZSBORlM0X0ZIU0laRSAxMjgKKyNkZWZpbmUgTkZTNF9NQVhQQVRITEVOIFBBVEhfTUFYCisjZGVmaW5lIE5GUzRfTUFYTkFNTEVOIE5BTUVfTUFYCisKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfUkVBRCAweDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfTE9PS1VQIDB4MDAwMgorI2RlZmluZSBORlM0X0FDQ0VTU19NT0RJRlkgMHgwMDA0CisjZGVmaW5lIE5GUzRfQUNDRVNTX0VYVEVORCAweDAwMDgKKyNkZWZpbmUgTkZTNF9BQ0NFU1NfREVMRVRFIDB4MDAxMAorI2RlZmluZSBORlM0X0FDQ0VTU19FWEVDVVRFIDB4MDAyMAorCisjZGVmaW5lIE5GUzRfRkhfUEVSU0lTVEVOVCAweDAwMDAKKyNkZWZpbmUgTkZTNF9GSF9OT0VYUElSRV9XSVRIX09QRU4gMHgwMDAxCisjZGVmaW5lIE5GUzRfRkhfVk9MQVRJTEVfQU5ZIDB4MDAwMgorI2RlZmluZSBORlM0X0ZIX1ZPTF9NSUdSQVRJT04gMHgwMDA0CisjZGVmaW5lIE5GUzRfRkhfVk9MX1JFTkFNRSAweDAwMDgKKworI2RlZmluZSBORlM0X09QRU5fUkVTVUxUX0NPTkZJUk0gMHgwMDAyCisjZGVmaW5lIE5GUzRfT1BFTl9SRVNVTFRfTE9DS1RZUEVfUE9TSVggMHgwMDA0CisKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfUkVBRCAweDAwMDEKKyNkZWZpbmUgTkZTNF9TSEFSRV9BQ0NFU1NfV1JJVEUgMHgwMDAyCisjZGVmaW5lIE5GUzRfU0hBUkVfQUNDRVNTX0JPVEggMHgwMDAzCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9SRUFEIDB4MDAwMQorI2RlZmluZSBORlM0X1NIQVJFX0RFTllfV1JJVEUgMHgwMDAyCisjZGVmaW5lIE5GUzRfU0hBUkVfREVOWV9CT1RIIDB4MDAwMworCisjZGVmaW5lIE5GUzRfU0VUX1RPX1NFUlZFUl9USU1FIDAKKyNkZWZpbmUgTkZTNF9TRVRfVE9fQ0xJRU5UX1RJTUUgMQorCisjZGVmaW5lIE5GUzRfQUNFX0FDQ0VTU19BTExPV0VEX0FDRV9UWVBFIDAKKyNkZWZpbmUgTkZTNF9BQ0VfQUNDRVNTX0RFTklFRF9BQ0VfVFlQRSAxCisjZGVmaW5lIE5GUzRfQUNFX1NZU1RFTV9BVURJVF9BQ0VfVFlQRSAyCisjZGVmaW5lIE5GUzRfQUNFX1NZU1RFTV9BTEFSTV9BQ0VfVFlQRSAzCisKKyNkZWZpbmUgQUNMNF9TVVBQT1JUX0FMTE9XX0FDTCAweDAxCisjZGVmaW5lIEFDTDRfU1VQUE9SVF9ERU5ZX0FDTCAweDAyCisjZGVmaW5lIEFDTDRfU1VQUE9SVF9BVURJVF9BQ0wgMHgwNAorI2RlZmluZSBBQ0w0X1NVUFBPUlRfQUxBUk1fQUNMIDB4MDgKKworI2RlZmluZSBORlM0X0FDRV9GSUxFX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfRElSRUNUT1JZX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0VfTk9fUFJPUEFHQVRFX0lOSEVSSVRfQUNFIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkZTNF9BQ0VfSU5IRVJJVF9PTkxZX0FDRSAweDAwMDAwMDA4CisjZGVmaW5lIE5GUzRfQUNFX1NVQ0NFU1NGVUxfQUNDRVNTX0FDRV9GTEFHIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0VfRkFJTEVEX0FDQ0VTU19BQ0VfRkxBRyAweDAwMDAwMDIwCisjZGVmaW5lIE5GUzRfQUNFX0lERU5USUZJRVJfR1JPVVAgMHgwMDAwMDA0MAorI2RlZmluZSBORlM0X0FDRV9PV05FUiAweDAwMDAwMDgwCisjZGVmaW5lIE5GUzRfQUNFX0dST1VQIDB4MDAwMDAxMDAKKyNkZWZpbmUgTkZTNF9BQ0VfRVZFUllPTkUgMHgwMDAwMDIwMAorCisjZGVmaW5lIE5GUzRfQUNFX1JFQURfREFUQSAweDAwMDAwMDAxCisjZGVmaW5lIE5GUzRfQUNFX0xJU1RfRElSRUNUT1JZIDB4MDAwMDAwMDEKKyNkZWZpbmUgTkZTNF9BQ0VfV1JJVEVfREFUQSAweDAwMDAwMDAyCisjZGVmaW5lIE5GUzRfQUNFX0FERF9GSUxFIDB4MDAwMDAwMDIKKyNkZWZpbmUgTkZTNF9BQ0VfQVBQRU5EX0RBVEEgMHgwMDAwMDAwNAorI2RlZmluZSBORlM0X0FDRV9BRERfU1VCRElSRUNUT1JZIDB4MDAwMDAwMDQKKyNkZWZpbmUgTkZTNF9BQ0VfUkVBRF9OQU1FRF9BVFRSUyAweDAwMDAwMDA4CisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX05BTUVEX0FUVFJTIDB4MDAwMDAwMTAKKyNkZWZpbmUgTkZTNF9BQ0VfRVhFQ1VURSAweDAwMDAwMDIwCisjZGVmaW5lIE5GUzRfQUNFX0RFTEVURV9DSElMRCAweDAwMDAwMDQwCisjZGVmaW5lIE5GUzRfQUNFX1JFQURfQVRUUklCVVRFUyAweDAwMDAwMDgwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0FUVFJJQlVURVMgMHgwMDAwMDEwMAorI2RlZmluZSBORlM0X0FDRV9ERUxFVEUgMHgwMDAxMDAwMAorI2RlZmluZSBORlM0X0FDRV9SRUFEX0FDTCAweDAwMDIwMDAwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX0FDTCAweDAwMDQwMDAwCisjZGVmaW5lIE5GUzRfQUNFX1dSSVRFX09XTkVSIDB4MDAwODAwMDAKKyNkZWZpbmUgTkZTNF9BQ0VfU1lOQ0hST05JWkUgMHgwMDEwMDAwMAorI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX1JFQUQgMHgwMDEyMDA4MQorI2RlZmluZSBORlM0X0FDRV9HRU5FUklDX1dSSVRFIDB4MDAxNjAxMDYKKyNkZWZpbmUgTkZTNF9BQ0VfR0VORVJJQ19FWEVDVVRFIDB4MDAxMjAwQTAKKyNkZWZpbmUgTkZTNF9BQ0VfTUFTS19BTEwgMHgwMDFGMDFGRgorCitlbnVtIG5mczRfYWNsX3dob3R5cGUgeworIE5GUzRfQUNMX1dIT19OQU1FRCA9IDAsCisgTkZTNF9BQ0xfV0hPX09XTkVSLAorIE5GUzRfQUNMX1dIT19HUk9VUCwKKyBORlM0X0FDTF9XSE9fRVZFUllPTkUsCit9OworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc194ZHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNfeGRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDhmZTI2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNfeGRyLmgKQEAgLTAsMCArMSw1NTYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05GU19YRFJfSAorI2RlZmluZSBfTElOVVhfTkZTX1hEUl9ICisKKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMveHBydC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc2FjbC5oPgorCisjZGVmaW5lIE5GU19NQVhfRklMRV9JT19TSVpFICgxMDQ4NTc2VSkKKyNkZWZpbmUgTkZTX0RFRl9GSUxFX0lPX1NJWkUgKDQwOTZVKQorI2RlZmluZSBORlNfTUlOX0ZJTEVfSU9fU0laRSAoMTAyNFUpCisKK3N0cnVjdCBuZnNfZnNpZCB7CisgdWludDY0X3QgbWFqb3I7CisgdWludDY0X3QgbWlub3I7Cit9OworCisjZGVmaW5lIE5GU19BVFRSX1dDQyAweDAwMDEgIAorI2RlZmluZSBORlNfQVRUUl9GQVRUUiAweDAwMDIgIAorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WMyAweDAwMDQgIAorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNCAweDAwMDggIAorI2RlZmluZSBORlNfQVRUUl9GQVRUUl9WNF9SRUZFUlJBTCAweDAwMTAgIAorCitzdHJ1Y3QgbmZzX2ZzaW5mbyB7Cisgc3RydWN0IG5mc19mYXR0ciAqZmF0dHI7CisgX191MzIgcnRtYXg7CisgX191MzIgcnRwcmVmOworIF9fdTMyIHJ0bXVsdDsKKyBfX3UzMiB3dG1heDsKKyBfX3UzMiB3dHByZWY7CisgX191MzIgd3RtdWx0OworIF9fdTMyIGR0cHJlZjsKKyBfX3U2NCBtYXhmaWxlc2l6ZTsKKyBfX3UzMiBsZWFzZV90aW1lOworfTsKKworc3RydWN0IG5mc19mc3N0YXQgeworIHN0cnVjdCBuZnNfZmF0dHIgKmZhdHRyOworIF9fdTY0IHRieXRlczsKKyBfX3U2NCBmYnl0ZXM7CisgX191NjQgYWJ5dGVzOworIF9fdTY0IHRmaWxlczsKKyBfX3U2NCBmZmlsZXM7CisgX191NjQgYWZpbGVzOworfTsKKworc3RydWN0IG5mczJfZnNzdGF0IHsKKyBfX3UzMiB0c2l6ZTsKKyBfX3UzMiBic2l6ZTsKKyBfX3UzMiBibG9ja3M7CisgX191MzIgYmZyZWU7CisgX191MzIgYmF2YWlsOworfTsKKworc3RydWN0IG5mc19wYXRoY29uZiB7Cisgc3RydWN0IG5mc19mYXR0ciAqZmF0dHI7CisgX191MzIgbWF4X2xpbms7CisgX191MzIgbWF4X25hbWVsZW47Cit9OworCitzdHJ1Y3QgbmZzNF9jaGFuZ2VfaW5mbyB7CisgdTMyIGF0b21pYzsKKyB1NjQgYmVmb3JlOworIHU2NCBhZnRlcjsKK307CisKK3N0cnVjdCBuZnNfc2VxaWQ7CisKK3N0cnVjdCBuZnNfb3BlbmFyZ3MgeworIGNvbnN0IHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgbmZzX3NlcWlkICogc2VxaWQ7CisgaW50IG9wZW5fZmxhZ3M7CisgX191NjQgY2xpZW50aWQ7CisgX191MzIgaWQ7CisgdW5pb24geworIHN0cnVjdCBpYXR0ciAqIGF0dHJzOworIG5mczRfdmVyaWZpZXIgdmVyaWZpZXI7CisgbmZzNF9zdGF0ZWlkIGRlbGVnYXRpb247CisgaW50IGRlbGVnYXRpb25fdHlwZTsKKyB9IHU7CisgY29uc3Qgc3RydWN0IHFzdHIgKiBuYW1lOworIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICpzZXJ2ZXI7CisgY29uc3QgdTMyICogYml0bWFzazsKKyBfX3UzMiBjbGFpbTsKK307CisKK3N0cnVjdCBuZnNfb3BlbnJlcyB7CisgbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7Cisgc3RydWN0IG5mc19maCBmaDsKKyBzdHJ1Y3QgbmZzNF9jaGFuZ2VfaW5mbyBjaW5mbzsKKyBfX3UzMiByZmxhZ3M7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZfYXR0cjsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZGlyX2F0dHI7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKKyBpbnQgZGVsZWdhdGlvbl90eXBlOworIG5mczRfc3RhdGVpZCBkZWxlZ2F0aW9uOworIF9fdTMyIGRvX3JlY2FsbDsKKyBfX3U2NCBtYXhzaXplOworfTsKKworc3RydWN0IG5mc19vcGVuX2NvbmZpcm1hcmdzIHsKKyBjb25zdCBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgbmZzNF9zdGF0ZWlkICogc3RhdGVpZDsKKyBzdHJ1Y3QgbmZzX3NlcWlkICogc2VxaWQ7Cit9OworCitzdHJ1Y3QgbmZzX29wZW5fY29uZmlybXJlcyB7CisgbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7Cit9OworCitzdHJ1Y3QgbmZzX2Nsb3NlYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIG5mczRfc3RhdGVpZCAqIHN0YXRlaWQ7Cisgc3RydWN0IG5mc19zZXFpZCAqIHNlcWlkOworIGludCBvcGVuX2ZsYWdzOworIGNvbnN0IHUzMiAqIGJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzX2Nsb3NlcmVzIHsKKyBuZnM0X3N0YXRlaWQgc3RhdGVpZDsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKK307CisKK3N0cnVjdCBuZnNfbG93bmVyIHsKKyBfX3U2NCBjbGllbnRpZDsKKyB1MzIgaWQ7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2tfYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBmaWxlX2xvY2sgKiBmbDsKKyBzdHJ1Y3QgbmZzX3NlcWlkICogbG9ja19zZXFpZDsKKyBuZnM0X3N0YXRlaWQgKiBsb2NrX3N0YXRlaWQ7Cisgc3RydWN0IG5mc19zZXFpZCAqIG9wZW5fc2VxaWQ7CisgbmZzNF9zdGF0ZWlkICogb3Blbl9zdGF0ZWlkOworIHN0cnVjdCBuZnNfbG93bmVyIGxvY2tfb3duZXI7CisgdW5zaWduZWQgY2hhciBibG9jayA6IDE7CisgdW5zaWduZWQgY2hhciByZWNsYWltIDogMTsKKyB1bnNpZ25lZCBjaGFyIG5ld19sb2NrX293bmVyIDogMTsKK307CisKK3N0cnVjdCBuZnNfbG9ja19yZXMgeworIG5mczRfc3RhdGVpZCBzdGF0ZWlkOworfTsKKworc3RydWN0IG5mc19sb2NrdV9hcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IGZpbGVfbG9jayAqIGZsOworIHN0cnVjdCBuZnNfc2VxaWQgKiBzZXFpZDsKKyBuZnM0X3N0YXRlaWQgKiBzdGF0ZWlkOworfTsKKworc3RydWN0IG5mc19sb2NrdV9yZXMgeworIG5mczRfc3RhdGVpZCBzdGF0ZWlkOworfTsKKworc3RydWN0IG5mc19sb2NrdF9hcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IGZpbGVfbG9jayAqIGZsOworIHN0cnVjdCBuZnNfbG93bmVyIGxvY2tfb3duZXI7Cit9OworCitzdHJ1Y3QgbmZzX2xvY2t0X3JlcyB7Cisgc3RydWN0IGZpbGVfbG9jayAqIGRlbmllZDsKK307CisKK3N0cnVjdCBuZnM0X2RlbGVncmV0dXJuYXJncyB7CisgY29uc3Qgc3RydWN0IG5mc19maCAqZmhhbmRsZTsKKyBjb25zdCBuZnM0X3N0YXRlaWQgKnN0YXRlaWQ7CisgY29uc3QgdTMyICogYml0bWFzazsKK307CisKK3N0cnVjdCBuZnM0X2RlbGVncmV0dXJucmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKK307CisKK3N0cnVjdCBuZnNfcmVhZGFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgbmZzX29wZW5fY29udGV4dCAqY29udGV4dDsKKyBfX3U2NCBvZmZzZXQ7CisgX191MzIgY291bnQ7CisgdW5zaWduZWQgaW50IHBnYmFzZTsKKyBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKK307CisKK3N0cnVjdCBuZnNfcmVhZHJlcyB7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworIF9fdTMyIGNvdW50OworIGludCBlb2Y7Cit9OworCitzdHJ1Y3QgbmZzX3dyaXRlYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBuZnNfb3Blbl9jb250ZXh0ICpjb250ZXh0OworIF9fdTY0IG9mZnNldDsKKyBfX3UzMiBjb3VudDsKKyBlbnVtIG5mczNfc3RhYmxlX2hvdyBzdGFibGU7CisgdW5zaWduZWQgaW50IHBnYmFzZTsKKyBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKKyBjb25zdCB1MzIgKiBiaXRtYXNrOworfTsKKworc3RydWN0IG5mc193cml0ZXZlcmYgeworIGVudW0gbmZzM19zdGFibGVfaG93IGNvbW1pdHRlZDsKKyBfX3UzMiB2ZXJpZmllclsyXTsKK307CisKK3N0cnVjdCBuZnNfd3JpdGVyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKKyBzdHJ1Y3QgbmZzX3dyaXRldmVyZiAqIHZlcmY7CisgX191MzIgY291bnQ7CisgY29uc3Qgc3RydWN0IG5mc19zZXJ2ZXIgKnNlcnZlcjsKK307CisKK3N0cnVjdCBuZnNfZW50cnkgeworIF9fdTY0IGlubzsKKyBfX3U2NCBjb29raWUsCisgcHJldl9jb29raWU7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKKyBpbnQgZW9mOworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7Cit9OworCitzdHJ1Y3QgbmZzX3NhdHRyYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworfTsKKworc3RydWN0IG5mc19kaXJvcGFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBjb25zdCBjaGFyICogbmFtZTsKKyB1bnNpZ25lZCBpbnQgbGVuOworfTsKKworc3RydWN0IG5mc19jcmVhdGVhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKK307CisKK3N0cnVjdCBuZnNfcmVuYW1lYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZyb21maDsKKyBjb25zdCBjaGFyICogZnJvbW5hbWU7CisgdW5zaWduZWQgaW50IGZyb21sZW47Cisgc3RydWN0IG5mc19maCAqIHRvZmg7CisgY29uc3QgY2hhciAqIHRvbmFtZTsKKyB1bnNpZ25lZCBpbnQgdG9sZW47Cit9OworCitzdHJ1Y3QgbmZzX3NldGF0dHJhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgbmZzNF9zdGF0ZWlkIHN0YXRlaWQ7Cisgc3RydWN0IGlhdHRyICogaWFwOworIGNvbnN0IHN0cnVjdCBuZnNfc2VydmVyICogc2VydmVyOworIGNvbnN0IHUzMiAqIGJpdG1hc2s7Cit9OworCitzdHJ1Y3QgbmZzX3NldGFjbGFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzaXplX3QgYWNsX2xlbjsKKyB1bnNpZ25lZCBpbnQgYWNsX3BnYmFzZTsKKyBzdHJ1Y3QgcGFnZSAqKiBhY2xfcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzX2dldGFjbGFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBzaXplX3QgYWNsX2xlbjsKKyB1bnNpZ25lZCBpbnQgYWNsX3BnYmFzZTsKKyBzdHJ1Y3QgcGFnZSAqKiBhY2xfcGFnZXM7Cit9OworCitzdHJ1Y3QgbmZzX3NldGF0dHJyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKKyBjb25zdCBzdHJ1Y3QgbmZzX3NlcnZlciAqIHNlcnZlcjsKK307CisKK3N0cnVjdCBuZnNfbGlua2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7Cisgc3RydWN0IG5mc19maCAqIHRvZmg7CisgY29uc3QgY2hhciAqIHRvbmFtZTsKKyB1bnNpZ25lZCBpbnQgdG9sZW47Cit9OworCitzdHJ1Y3QgbmZzX3N5bWxpbmthcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOworIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKKyB1bnNpZ25lZCBpbnQgZnJvbWxlbjsKKyBjb25zdCBjaGFyICogdG9wYXRoOworIHVuc2lnbmVkIGludCB0b2xlbjsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKK307CisKK3N0cnVjdCBuZnNfcmVhZGRpcmFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBfX3UzMiBjb29raWU7CisgdW5zaWduZWQgaW50IGNvdW50OworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mczNfZ2V0YWNsYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIGludCBtYXNrOworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mczNfc2V0YWNsYXJncyB7Cisgc3RydWN0IGlub2RlICogaW5vZGU7CisgaW50IG1hc2s7Cisgc3RydWN0IHBvc2l4X2FjbCAqIGFjbF9hY2Nlc3M7Cisgc3RydWN0IHBvc2l4X2FjbCAqIGFjbF9kZWZhdWx0OworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mc19kaXJvcG9rIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworfTsKKworc3RydWN0IG5mc19yZWFkbGlua2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyB1bnNpZ25lZCBpbnQgcGdiYXNlOworIHVuc2lnbmVkIGludCBwZ2xlbjsKKyBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKK307CisKK3N0cnVjdCBuZnMzX3NhdHRyYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBpYXR0ciAqIHNhdHRyOworIHVuc2lnbmVkIGludCBndWFyZDsKKyBzdHJ1Y3QgdGltZXNwZWMgZ3VhcmR0aW1lOworfTsKKworc3RydWN0IG5mczNfZGlyb3BhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKK307CisKK3N0cnVjdCBuZnMzX2FjY2Vzc2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmaDsKKyBfX3UzMiBhY2Nlc3M7Cit9OworCitzdHJ1Y3QgbmZzM19jcmVhdGVhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKKyBlbnVtIG5mczNfY3JlYXRlbW9kZSBjcmVhdGVtb2RlOworIF9fdTMyIHZlcmlmaWVyWzJdOworfTsKKworc3RydWN0IG5mczNfbWtkaXJhcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZmg7CisgY29uc3QgY2hhciAqIG5hbWU7CisgdW5zaWduZWQgaW50IGxlbjsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX3N5bWxpbmthcmdzIHsKKyBzdHJ1Y3QgbmZzX2ZoICogZnJvbWZoOworIGNvbnN0IGNoYXIgKiBmcm9tbmFtZTsKKyB1bnNpZ25lZCBpbnQgZnJvbWxlbjsKKyBjb25zdCBjaGFyICogdG9wYXRoOworIHVuc2lnbmVkIGludCB0b2xlbjsKKyBzdHJ1Y3QgaWF0dHIgKiBzYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX21rbm9kYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIGNvbnN0IGNoYXIgKiBuYW1lOworIHVuc2lnbmVkIGludCBsZW47CisgZW51bSBuZnMzX2Z0eXBlIHR5cGU7Cisgc3RydWN0IGlhdHRyICogc2F0dHI7CisgZGV2X3QgcmRldjsKK307CisKK3N0cnVjdCBuZnMzX3JlbmFtZWFyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7CisgY29uc3QgY2hhciAqIGZyb21uYW1lOworIHVuc2lnbmVkIGludCBmcm9tbGVuOworIHN0cnVjdCBuZnNfZmggKiB0b2ZoOworIGNvbnN0IGNoYXIgKiB0b25hbWU7CisgdW5zaWduZWQgaW50IHRvbGVuOworfTsKKworc3RydWN0IG5mczNfbGlua2FyZ3MgeworIHN0cnVjdCBuZnNfZmggKiBmcm9tZmg7Cisgc3RydWN0IG5mc19maCAqIHRvZmg7CisgY29uc3QgY2hhciAqIHRvbmFtZTsKKyB1bnNpZ25lZCBpbnQgdG9sZW47Cit9OworCitzdHJ1Y3QgbmZzM19yZWFkZGlyYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIF9fdTY0IGNvb2tpZTsKKyBfX3UzMiB2ZXJmWzJdOworIGludCBwbHVzOworIHVuc2lnbmVkIGludCBjb3VudDsKKyBzdHJ1Y3QgcGFnZSAqKiBwYWdlczsKK307CisKK3N0cnVjdCBuZnMzX2Rpcm9wcmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZGlyX2F0dHI7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHN0cnVjdCBuZnNfZmF0dHIgKiBmYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX2FjY2Vzc3JlcyB7Cisgc3RydWN0IG5mc19mYXR0ciAqIGZhdHRyOworIF9fdTMyIGFjY2VzczsKK307CisKK3N0cnVjdCBuZnMzX3JlYWRsaW5rYXJncyB7Cisgc3RydWN0IG5mc19maCAqIGZoOworIHVuc2lnbmVkIGludCBwZ2Jhc2U7CisgdW5zaWduZWQgaW50IHBnbGVuOworIHN0cnVjdCBwYWdlICoqIHBhZ2VzOworfTsKKworc3RydWN0IG5mczNfcmVuYW1lcmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZnJvbWF0dHI7Cisgc3RydWN0IG5mc19mYXR0ciAqIHRvYXR0cjsKK307CisKK3N0cnVjdCBuZnMzX2xpbmtyZXMgeworIHN0cnVjdCBuZnNfZmF0dHIgKiBkaXJfYXR0cjsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7Cit9OworCitzdHJ1Y3QgbmZzM19yZWFkZGlycmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZGlyX2F0dHI7CisgX191MzIgKiB2ZXJmOworIGludCBwbHVzOworfTsKKworc3RydWN0IG5mczNfZ2V0YWNscmVzIHsKKyBzdHJ1Y3QgbmZzX2ZhdHRyICogZmF0dHI7CisgaW50IG1hc2s7CisgdW5zaWduZWQgaW50IGFjbF9hY2Nlc3NfY291bnQ7CisgdW5zaWduZWQgaW50IGFjbF9kZWZhdWx0X2NvdW50OworIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfYWNjZXNzOworIHN0cnVjdCBwb3NpeF9hY2wgKiBhY2xfZGVmYXVsdDsKK307CisKK3N0cnVjdCBuZnNfcGFnZTsKKworI2RlZmluZSBORlNfUEFHRVZFQ19TSVpFICg4VSkKKworc3RydWN0IG5mc19yZWFkX2RhdGEgeworIGludCBmbGFnczsKKyBzdHJ1Y3QgcnBjX3Rhc2sgdGFzazsKKyBzdHJ1Y3QgaW5vZGUgKmlub2RlOworIHN0cnVjdCBycGNfY3JlZCAqY3JlZDsKKyBzdHJ1Y3QgbmZzX2ZhdHRyIGZhdHRyOworIHN0cnVjdCBsaXN0X2hlYWQgcGFnZXM7Cisgc3RydWN0IG5mc19wYWdlICpyZXE7Cisgc3RydWN0IHBhZ2UgKipwYWdldmVjOworIHVuc2lnbmVkIGludCBucGFnZXM7Cisgc3RydWN0IG5mc19yZWFkYXJncyBhcmdzOworIHN0cnVjdCBuZnNfcmVhZHJlcyByZXM7Cisgc3RydWN0IHBhZ2UgKnBhZ2VfYXJyYXlbTkZTX1BBR0VWRUNfU0laRV07Cit9OworCitzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgeworIGludCBmbGFnczsKKyBzdHJ1Y3QgcnBjX3Rhc2sgdGFzazsKKyBzdHJ1Y3QgaW5vZGUgKmlub2RlOworIHN0cnVjdCBycGNfY3JlZCAqY3JlZDsKKyBzdHJ1Y3QgbmZzX2ZhdHRyIGZhdHRyOworIHN0cnVjdCBuZnNfd3JpdGV2ZXJmIHZlcmY7Cisgc3RydWN0IGxpc3RfaGVhZCBwYWdlczsKKyBzdHJ1Y3QgbmZzX3BhZ2UgKnJlcTsKKyBzdHJ1Y3QgcGFnZSAqKnBhZ2V2ZWM7CisgdW5zaWduZWQgaW50IG5wYWdlczsKKyBzdHJ1Y3QgbmZzX3dyaXRlYXJncyBhcmdzOworIHN0cnVjdCBuZnNfd3JpdGVyZXMgcmVzOworIHN0cnVjdCBwYWdlICpwYWdlX2FycmF5W05GU19QQUdFVkVDX1NJWkVdOworfTsKKworc3RydWN0IG5mc19hY2Nlc3NfZW50cnk7CisKK3N0cnVjdCBuZnNfcnBjX29wcyB7CisgaW50IHZlcnNpb247Cisgc3RydWN0IGRlbnRyeV9vcGVyYXRpb25zICpkZW50cnlfb3BzOworIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpkaXJfaW5vZGVfb3BzOworIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICpmaWxlX2lub2RlX29wczsKKworIGludCAoKmdldHJvb3QpIChzdHJ1Y3QgbmZzX3NlcnZlciAqLCBzdHJ1Y3QgbmZzX2ZoICosCisgc3RydWN0IG5mc19mc2luZm8gKik7CisgaW50ICgqZ2V0YXR0cikgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKKyBzdHJ1Y3QgbmZzX2ZhdHRyICopOworIGludCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBuZnNfZmF0dHIgKiwKKyBzdHJ1Y3QgaWF0dHIgKik7CisgaW50ICgqbG9va3VwKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICosCisgc3RydWN0IG5mc19maCAqLCBzdHJ1Y3QgbmZzX2ZhdHRyICopOworIGludCAoKmFjY2VzcykgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgbmZzX2FjY2Vzc19lbnRyeSAqKTsKKyBpbnQgKCpyZWFkbGluaykoc3RydWN0IGlub2RlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkIGludCwKKyB1bnNpZ25lZCBpbnQpOworIGludCAoKnJlYWQpIChzdHJ1Y3QgbmZzX3JlYWRfZGF0YSAqKTsKKyBpbnQgKCp3cml0ZSkgKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqKTsKKyBpbnQgKCpjb21taXQpIChzdHJ1Y3QgbmZzX3dyaXRlX2RhdGEgKik7CisgaW50ICgqY3JlYXRlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKiwKKyBzdHJ1Y3QgaWF0dHIgKiwgaW50LCBzdHJ1Y3QgbmFtZWlkYXRhICopOworIGludCAoKnJlbW92ZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcXN0ciAqKTsKKyBpbnQgKCp1bmxpbmtfc2V0dXApIChzdHJ1Y3QgcnBjX21lc3NhZ2UgKiwKKyBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBxc3RyICopOworIGludCAoKnVubGlua19kb25lKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcnBjX3Rhc2sgKik7CisgaW50ICgqcmVuYW1lKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICosCisgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworIGludCAoKmxpbmspIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlub2RlICosIHN0cnVjdCBxc3RyICopOworIGludCAoKnN5bWxpbmspIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKiwgc3RydWN0IHFzdHIgKiwKKyBzdHJ1Y3QgaWF0dHIgKiwgc3RydWN0IG5mc19maCAqLAorIHN0cnVjdCBuZnNfZmF0dHIgKik7CisgaW50ICgqbWtkaXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7CisgaW50ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHFzdHIgKik7CisgaW50ICgqcmVhZGRpcikgKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHJwY19jcmVkICosCisgdTY0LCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCBpbnQsIGludCk7CisgaW50ICgqbWtub2QpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKiwKKyBkZXZfdCk7CisgaW50ICgqc3RhdGZzKSAoc3RydWN0IG5mc19zZXJ2ZXIgKiwgc3RydWN0IG5mc19maCAqLAorIHN0cnVjdCBuZnNfZnNzdGF0ICopOworIGludCAoKmZzaW5mbykgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKKyBzdHJ1Y3QgbmZzX2ZzaW5mbyAqKTsKKyBpbnQgKCpwYXRoY29uZikgKHN0cnVjdCBuZnNfc2VydmVyICosIHN0cnVjdCBuZnNfZmggKiwKKyBzdHJ1Y3QgbmZzX3BhdGhjb25mICopOworIHUzMiAqICgqZGVjb2RlX2RpcmVudCkodTMyICosIHN0cnVjdCBuZnNfZW50cnkgKiwgaW50IHBsdXMpOworIHZvaWQgKCpyZWFkX3NldHVwKSAoc3RydWN0IG5mc19yZWFkX2RhdGEgKik7CisgaW50ICgqcmVhZF9kb25lKSAoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfcmVhZF9kYXRhICopOworIHZvaWQgKCp3cml0ZV9zZXR1cCkgKHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqLCBpbnQgaG93KTsKKyBpbnQgKCp3cml0ZV9kb25lKSAoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqKTsKKyB2b2lkICgqY29tbWl0X3NldHVwKSAoc3RydWN0IG5mc193cml0ZV9kYXRhICosIGludCBob3cpOworIGludCAoKmNvbW1pdF9kb25lKSAoc3RydWN0IHJwY190YXNrICosIHN0cnVjdCBuZnNfd3JpdGVfZGF0YSAqKTsKKyBpbnQgKCpmaWxlX29wZW4pIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CisgaW50ICgqZmlsZV9yZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOworIGludCAoKmxvY2spKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZpbGVfbG9jayAqKTsKKyB2b2lkICgqY2xlYXJfYWNsX2NhY2hlKShzdHJ1Y3QgaW5vZGUgKik7Cit9OworCisjZGVmaW5lIE5GU19DQUxMKG9wLCBpbm9kZSwgYXJncykgTkZTX1BST1RPKGlub2RlKS0+b3AgYXJncworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNhY2wuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNhY2wuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZGQ5NWFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2FjbC5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9ORlNBQ0xfSAorI2RlZmluZSBfX0xJTlVYX05GU0FDTF9ICisKKyNkZWZpbmUgTkZTX0FDTF9QUk9HUkFNIDEwMDIyNworCisjZGVmaW5lIEFDTFBST0MyX0dFVEFDTCAxCisjZGVmaW5lIEFDTFBST0MyX1NFVEFDTCAyCisjZGVmaW5lIEFDTFBST0MyX0dFVEFUVFIgMworI2RlZmluZSBBQ0xQUk9DMl9BQ0NFU1MgNAorCisjZGVmaW5lIEFDTFBST0MzX0dFVEFDTCAxCisjZGVmaW5lIEFDTFBST0MzX1NFVEFDTCAyCisKKyNkZWZpbmUgTkZTX0FDTCAweDAwMDEKKyNkZWZpbmUgTkZTX0FDTENOVCAweDAwMDIKKyNkZWZpbmUgTkZTX0RGQUNMIDB4MDAwNAorI2RlZmluZSBORlNfREZBQ0xDTlQgMHgwMDA4CisKKyNkZWZpbmUgTkZTX0FDTF9ERUZBVUxUIDB4MTAwMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2F1dGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2F1dGguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mODQwZjBlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvYXV0aC5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfTkZTRF9BVVRIX0gKKyNkZWZpbmUgTElOVVhfTkZTRF9BVVRIX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9jb25zdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvY29uc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzQ1NTA4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvY29uc3QuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORlNEX0NPTlNUX0gKKyNkZWZpbmUgX0xJTlVYX05GU0RfQ09OU1RfSAorCisjaW5jbHVkZSA8bGludXgvbmZzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzMi5oPgorI2luY2x1ZGUgPGxpbnV4L25mczMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnM0Lmg+CisKKyNkZWZpbmUgTkZTU1ZDX01BWFZFUlMgMworCisjZGVmaW5lIE5GU1NWQ19NQVhCTEtTSVpFICgzMioxMDI0KQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL2RlYnVnLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9kZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTBmMDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9kZWJ1Zy5oCkBAIC0wLDAgKzEsMzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfTkZTRF9ERUJVR19ICisjZGVmaW5lIExJTlVYX05GU0RfREVCVUdfSAorCisjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CisKKyNpZmRlZiBSUENfREVCVUcKKyNkZWZpbmUgTkZTRF9ERUJVRyAxCisjZW5kaWYKKworI2RlZmluZSBORlNEREJHX1NPQ0sgMHgwMDAxCisjZGVmaW5lIE5GU0REQkdfRkggMHgwMDAyCisjZGVmaW5lIE5GU0REQkdfRVhQT1JUIDB4MDAwNAorI2RlZmluZSBORlNEREJHX1NWQyAweDAwMDgKKyNkZWZpbmUgTkZTRERCR19QUk9DIDB4MDAxMAorI2RlZmluZSBORlNEREJHX0ZJTEVPUCAweDAwMjAKKyNkZWZpbmUgTkZTRERCR19BVVRIIDB4MDA0MAorI2RlZmluZSBORlNEREJHX1JFUENBQ0hFIDB4MDA4MAorI2RlZmluZSBORlNEREJHX1hEUiAweDAxMDAKKyNkZWZpbmUgTkZTRERCR19MT0NLRCAweDAyMDAKKyNkZWZpbmUgTkZTRERCR19BTEwgMHg3RkZGCisjZGVmaW5lIE5GU0REQkdfTk9DSEFOR0UgMHhGRkZGCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvZXhwb3J0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9leHBvcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MzIyNzRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvZXhwb3J0LmgKQEAgLTAsMCArMSwzOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBORlNEX0VYUE9SVF9ICisjZGVmaW5lIE5GU0RfRVhQT1JUX0gKKworI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjZGVmaW5lIE5GU0NMTlRfSURNQVggMTAyNAorI2RlZmluZSBORlNDTE5UX0FERFJNQVggMTYKKyNkZWZpbmUgTkZTQ0xOVF9LRVlNQVggMzIKKworI2RlZmluZSBORlNFWFBfUkVBRE9OTFkgMHgwMDAxCisjZGVmaW5lIE5GU0VYUF9JTlNFQ1VSRV9QT1JUIDB4MDAwMgorI2RlZmluZSBORlNFWFBfUk9PVFNRVUFTSCAweDAwMDQKKyNkZWZpbmUgTkZTRVhQX0FMTFNRVUFTSCAweDAwMDgKKyNkZWZpbmUgTkZTRVhQX0FTWU5DIDB4MDAxMAorI2RlZmluZSBORlNFWFBfR0FUSEVSRURfV1JJVEVTIDB4MDAyMAorCisjZGVmaW5lIE5GU0VYUF9OT0hJREUgMHgwMjAwCisjZGVmaW5lIE5GU0VYUF9OT1NVQlRSRUVDSEVDSyAweDA0MDAKKyNkZWZpbmUgTkZTRVhQX05PQVVUSE5MTSAweDA4MDAgIAorI2RlZmluZSBORlNFWFBfTVNORlMgMHgxMDAwICAKKyNkZWZpbmUgTkZTRVhQX0ZTSUQgMHgyMDAwCisjZGVmaW5lIE5GU0VYUF9DUk9TU01PVU5UIDB4NDAwMAorI2RlZmluZSBORlNFWFBfTk9BQ0wgMHg4MDAwICAKKyNkZWZpbmUgTkZTRVhQX0FMTEZMQUdTIDB4RkUzRgorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvaW50ZXJmYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9pbnRlcmZhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYzM5NDZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvaW50ZXJmYWNlLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBMSU5VWF9ORlNEX0lOVEVSRkFDRV9ICisjZGVmaW5lIExJTlVYX05GU0RfSU5URVJGQUNFX0gKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9uZnNmaC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvbmZzZmguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMzQ1MGQyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QvbmZzZmguaApAQCAtMCwwICsxLDYyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9ORlNEX0ZIX0gKKyNkZWZpbmUgX0xJTlVYX05GU0RfRkhfSAorCisjaW5jbHVkZSA8YXNtL3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvbmZzZC9jb25zdC5oPgorI2luY2x1ZGUgPGxpbnV4L25mc2QvZGVidWcuaD4KKworc3RydWN0IG5mc19maGJhc2Vfb2xkIHsKKyBfX3UzMiBmYl9kY29va2llOworIF9fdTMyIGZiX2lubzsKKyBfX3UzMiBmYl9kaXJpbm87CisgX191MzIgZmJfZGV2OworIF9fdTMyIGZiX3hkZXY7CisgX191MzIgZmJfeGlubzsKKyBfX3UzMiBmYl9nZW5lcmF0aW9uOworfTsKKworc3RydWN0IG5mc19maGJhc2VfbmV3IHsKKyBfX3U4IGZiX3ZlcnNpb247CisgX191OCBmYl9hdXRoX3R5cGU7CisgX191OCBmYl9mc2lkX3R5cGU7CisgX191OCBmYl9maWxlaWRfdHlwZTsKKyBfX3UzMiBmYl9hdXRoWzFdOworCit9OworCitzdHJ1Y3Qga25mc2RfZmggeworIHVuc2lnbmVkIGludCBmaF9zaXplOworIHVuaW9uIHsKKyBzdHJ1Y3QgbmZzX2ZoYmFzZV9vbGQgZmhfb2xkOworIF9fdTMyIGZoX3BhZFtORlM0X0ZIU0laRS80XTsKKyBzdHJ1Y3QgbmZzX2ZoYmFzZV9uZXcgZmhfbmV3OworIH0gZmhfYmFzZTsKK307CisKKyNkZWZpbmUgb2ZoX2Rjb29raWUgZmhfYmFzZS5maF9vbGQuZmJfZGNvb2tpZQorI2RlZmluZSBvZmhfaW5vIGZoX2Jhc2UuZmhfb2xkLmZiX2lubworI2RlZmluZSBvZmhfZGlyaW5vIGZoX2Jhc2UuZmhfb2xkLmZiX2RpcmlubworI2RlZmluZSBvZmhfZGV2IGZoX2Jhc2UuZmhfb2xkLmZiX2RldgorI2RlZmluZSBvZmhfeGRldiBmaF9iYXNlLmZoX29sZC5mYl94ZGV2CisjZGVmaW5lIG9maF94aW5vIGZoX2Jhc2UuZmhfb2xkLmZiX3hpbm8KKyNkZWZpbmUgb2ZoX2dlbmVyYXRpb24gZmhfYmFzZS5maF9vbGQuZmJfZ2VuZXJhdGlvbgorCisjZGVmaW5lIGZoX3ZlcnNpb24gZmhfYmFzZS5maF9uZXcuZmJfdmVyc2lvbgorI2RlZmluZSBmaF9mc2lkX3R5cGUgZmhfYmFzZS5maF9uZXcuZmJfZnNpZF90eXBlCisjZGVmaW5lIGZoX2F1dGhfdHlwZSBmaF9iYXNlLmZoX25ldy5mYl9hdXRoX3R5cGUKKyNkZWZpbmUgZmhfZmlsZWlkX3R5cGUgZmhfYmFzZS5maF9uZXcuZmJfZmlsZWlkX3R5cGUKKyNkZWZpbmUgZmhfYXV0aCBmaF9iYXNlLmZoX25ldy5mYl9hdXRoCisjZGVmaW5lIGZoX2ZzaWQgZmhfYmFzZS5maF9uZXcuZmJfYXV0aAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9uZnNkL3N0YXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY0N2U2NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC9zdGF0cy5oCkBAIC0wLDAgKzEsMzggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfTkZTRF9TVEFUU19ICisjZGVmaW5lIExJTlVYX05GU0RfU1RBVFNfSAorCisjaW5jbHVkZSA8bGludXgvbmZzNC5oPgorCitzdHJ1Y3QgbmZzZF9zdGF0cyB7CisgdW5zaWduZWQgaW50IHJjaGl0czsKKyB1bnNpZ25lZCBpbnQgcmNtaXNzZXM7CisgdW5zaWduZWQgaW50IHJjbm9jYWNoZTsKKyB1bnNpZ25lZCBpbnQgZmhfc3RhbGU7CisgdW5zaWduZWQgaW50IGZoX2xvb2t1cDsKKyB1bnNpZ25lZCBpbnQgZmhfYW5vbjsKKyB1bnNpZ25lZCBpbnQgZmhfbm9jYWNoZV9kaXI7CisgdW5zaWduZWQgaW50IGZoX25vY2FjaGVfbm9uZGlyOworIHVuc2lnbmVkIGludCBpb19yZWFkOworIHVuc2lnbmVkIGludCBpb193cml0ZTsKKyB1bnNpZ25lZCBpbnQgdGhfY250OworIHVuc2lnbmVkIGludCB0aF91c2FnZVsxMF07CisgdW5zaWduZWQgaW50IHRoX2Z1bGxjbnQ7CisgdW5zaWduZWQgaW50IHJhX3NpemU7CisgdW5zaWduZWQgaW50IHJhX2RlcHRoWzExXTsKKworfTsKKworI2RlZmluZSBORlNEX1VTQUdFX1dSQVAgKEhaKjEwMDAwMDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QveGRyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbmZzZC94ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOTQ5NjFkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25mc2QveGRyLmgKQEAgLTAsMCArMSwxNDEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgTElOVVhfTkZTRF9ICisjZGVmaW5lIExJTlVYX05GU0RfSAorCisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC92ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9uZnMuaD4KKworc3RydWN0IG5mc2RfZmhhbmRsZSB7Cisgc3RydWN0IHN2Y19maCBmaDsKK307CisKK3N0cnVjdCBuZnNkX3NhdHRyYXJncyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBzdHJ1Y3QgaWF0dHIgYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcGFyZ3MgeworIHN0cnVjdCBzdmNfZmggZmg7CisgY2hhciAqIG5hbWU7CisgaW50IGxlbjsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRhcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZoOworIF9fdTMyIG9mZnNldDsKKyBfX3UzMiBjb3VudDsKKyBzdHJ1Y3Qga3ZlYyB2ZWNbUlBDU1ZDX01BWFBBR0VTXTsKKyBpbnQgdmxlbjsKK307CisKK3N0cnVjdCBuZnNkX3dyaXRlYXJncyB7Cisgc3ZjX2ZoIGZoOworIF9fdTMyIG9mZnNldDsKKyBpbnQgbGVuOworIHN0cnVjdCBrdmVjIHZlY1tSUENTVkNfTUFYUEFHRVNdOworIGludCB2bGVuOworfTsKKworc3RydWN0IG5mc2RfY3JlYXRlYXJncyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBjaGFyICogbmFtZTsKKyBpbnQgbGVuOworIHN0cnVjdCBpYXR0ciBhdHRyczsKK307CisKK3N0cnVjdCBuZnNkX3JlbmFtZWFyZ3MgeworIHN0cnVjdCBzdmNfZmggZmZoOworIGNoYXIgKiBmbmFtZTsKKyBpbnQgZmxlbjsKKyBzdHJ1Y3Qgc3ZjX2ZoIHRmaDsKKyBjaGFyICogdG5hbWU7CisgaW50IHRsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkbGlua2FyZ3MgeworIHN0cnVjdCBzdmNfZmggZmg7CisgY2hhciAqIGJ1ZmZlcjsKK307CisKK3N0cnVjdCBuZnNkX2xpbmthcmdzIHsKKyBzdHJ1Y3Qgc3ZjX2ZoIGZmaDsKKyBzdHJ1Y3Qgc3ZjX2ZoIHRmaDsKKyBjaGFyICogdG5hbWU7CisgaW50IHRsZW47Cit9OworCitzdHJ1Y3QgbmZzZF9zeW1saW5rYXJncyB7Cisgc3RydWN0IHN2Y19maCBmZmg7CisgY2hhciAqIGZuYW1lOworIGludCBmbGVuOworIGNoYXIgKiB0bmFtZTsKKyBpbnQgdGxlbjsKKyBzdHJ1Y3QgaWF0dHIgYXR0cnM7Cit9OworCitzdHJ1Y3QgbmZzZF9yZWFkZGlyYXJncyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBfX3UzMiBjb29raWU7CisgX191MzIgY291bnQ7CisgdTMyICogYnVmZmVyOworfTsKKworc3RydWN0IG5mc2RfYXR0cnN0YXQgeworIHN0cnVjdCBzdmNfZmggZmg7Cisgc3RydWN0IGtzdGF0IHN0YXQ7Cit9OworCitzdHJ1Y3QgbmZzZF9kaXJvcHJlcyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyBzdHJ1Y3Qga3N0YXQgc3RhdDsKK307CisKK3N0cnVjdCBuZnNkX3JlYWRsaW5rcmVzIHsKKyBpbnQgbGVuOworfTsKKworc3RydWN0IG5mc2RfcmVhZHJlcyB7Cisgc3RydWN0IHN2Y19maCBmaDsKKyB1bnNpZ25lZCBsb25nIGNvdW50OworIHN0cnVjdCBrc3RhdCBzdGF0OworfTsKKworc3RydWN0IG5mc2RfcmVhZGRpcnJlcyB7CisgaW50IGNvdW50OworCisgc3RydWN0IHJlYWRkaXJfY2QgY29tbW9uOworIHUzMiAqIGJ1ZmZlcjsKKyBpbnQgYnVmbGVuOworIHUzMiAqIG9mZnNldDsKK307CisKK3N0cnVjdCBuZnNkX3N0YXRmc3JlcyB7Cisgc3RydWN0IGtzdGF0ZnMgc3RhdHM7Cit9OworCit1bmlvbiBuZnNkX3hkcnN0b3JlIHsKKyBzdHJ1Y3QgbmZzZF9zYXR0cmFyZ3Mgc2F0dHI7Cisgc3RydWN0IG5mc2RfZGlyb3BhcmdzIGRpcm9wOworIHN0cnVjdCBuZnNkX3JlYWRhcmdzIHJlYWQ7Cisgc3RydWN0IG5mc2Rfd3JpdGVhcmdzIHdyaXRlOworIHN0cnVjdCBuZnNkX2NyZWF0ZWFyZ3MgY3JlYXRlOworIHN0cnVjdCBuZnNkX3JlbmFtZWFyZ3MgcmVuYW1lOworIHN0cnVjdCBuZnNkX2xpbmthcmdzIGxpbms7Cisgc3RydWN0IG5mc2Rfc3ltbGlua2FyZ3Mgc3ltbGluazsKKyBzdHJ1Y3QgbmZzZF9yZWFkZGlyYXJncyByZWFkZGlyOworfTsKKworI2RlZmluZSBORlMyX1NWQ19YRFJTSVpFIHNpemVvZih1bmlvbiBuZnNkX3hkcnN0b3JlKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub2RlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzM2JmZmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05PREVfSF8KKyNkZWZpbmUgX0xJTlVYX05PREVfSF8KKworI2luY2x1ZGUgPGxpbnV4L3N5c2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdW1hc2suaD4KKworc3RydWN0IG5vZGUgeworIHN0cnVjdCBzeXNfZGV2aWNlIHN5c2RldjsKK307CisKKyNkZWZpbmUgdG9fbm9kZShzeXNfZGV2aWNlKSBjb250YWluZXJfb2Yoc3lzX2RldmljZSwgc3RydWN0IG5vZGUsIHN5c2RldikKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGVtYXNrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbm9kZW1hc2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZWM4NjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vZGVtYXNrLmgKQEAgLTAsMCArMSw4OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX05PREVNQVNLX0gKKyNkZWZpbmUgX19MSU5VWF9OT0RFTUFTS19ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90aHJlYWRzLmg+CisjaW5jbHVkZSA8bGludXgvYml0bWFwLmg+CisjaW5jbHVkZSA8bGludXgvbnVtYS5oPgorCit0eXBlZGVmIHN0cnVjdCB7IERFQ0xBUkVfQklUTUFQKGJpdHMsIE1BWF9OVU1OT0RFUyk7IH0gbm9kZW1hc2tfdDsKKworI2RlZmluZSBub2RlX3NldChub2RlLCBkc3QpIF9fbm9kZV9zZXQoKG5vZGUpLCAmKGRzdCkpCisjZGVmaW5lIG5vZGVfY2xlYXIobm9kZSwgZHN0KSBfX25vZGVfY2xlYXIoKG5vZGUpLCAmKGRzdCkpCisjZGVmaW5lIG5vZGVzX3NldGFsbChkc3QpIF9fbm9kZXNfc2V0YWxsKCYoZHN0KSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19jbGVhcihkc3QpIF9fbm9kZXNfY2xlYXIoJihkc3QpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVfaXNzZXQobm9kZSwgbm9kZW1hc2spIHRlc3RfYml0KChub2RlKSwgKG5vZGVtYXNrKS5iaXRzKQorI2RlZmluZSBub2RlX3Rlc3RfYW5kX3NldChub2RlLCBub2RlbWFzaykgICBfX25vZGVfdGVzdF9hbmRfc2V0KChub2RlKSwgJihub2RlbWFzaykpCisjZGVmaW5lIG5vZGVzX2FuZChkc3QsIHNyYzEsIHNyYzIpICAgX19ub2Rlc19hbmQoJihkc3QpLCAmKHNyYzEpLCAmKHNyYzIpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX29yKGRzdCwgc3JjMSwgc3JjMikgICBfX25vZGVzX29yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc194b3IoZHN0LCBzcmMxLCBzcmMyKSAgIF9fbm9kZXNfeG9yKCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19hbmRub3QoZHN0LCBzcmMxLCBzcmMyKSAgIF9fbm9kZXNfYW5kbm90KCYoZHN0KSwgJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19jb21wbGVtZW50KGRzdCwgc3JjKSAgIF9fbm9kZXNfY29tcGxlbWVudCgmKGRzdCksICYoc3JjKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19lcXVhbChzcmMxLCBzcmMyKSAgIF9fbm9kZXNfZXF1YWwoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19pbnRlcnNlY3RzKHNyYzEsIHNyYzIpICAgX19ub2Rlc19pbnRlcnNlY3RzKCYoc3JjMSksICYoc3JjMiksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZXNfc3Vic2V0KHNyYzEsIHNyYzIpICAgX19ub2Rlc19zdWJzZXQoJihzcmMxKSwgJihzcmMyKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19lbXB0eShzcmMpIF9fbm9kZXNfZW1wdHkoJihzcmMpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX2Z1bGwobm9kZW1hc2spIF9fbm9kZXNfZnVsbCgmKG5vZGVtYXNrKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc193ZWlnaHQobm9kZW1hc2spIF9fbm9kZXNfd2VpZ2h0KCYobm9kZW1hc2spLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX3NoaWZ0X3JpZ2h0KGRzdCwgc3JjLCBuKSAgIF9fbm9kZXNfc2hpZnRfcmlnaHQoJihkc3QpLCAmKHNyYyksIChuKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2Rlc19zaGlmdF9sZWZ0KGRzdCwgc3JjLCBuKSAgIF9fbm9kZXNfc2hpZnRfbGVmdCgmKGRzdCksICYoc3JjKSwgKG4pLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIGZpcnN0X25vZGUoc3JjKSBfX2ZpcnN0X25vZGUoJihzcmMpKQorI2RlZmluZSBuZXh0X25vZGUobiwgc3JjKSBfX25leHRfbm9kZSgobiksICYoc3JjKSkKKyNkZWZpbmUgbm9kZW1hc2tfb2Zfbm9kZShub2RlKSAgKHsgICB0eXBlb2YoX3VudXNlZF9ub2RlbWFza19hcmdfKSBtOyAgIGlmIChzaXplb2YobSkgPT0gc2l6ZW9mKHVuc2lnbmVkIGxvbmcpKSB7ICAgbS5iaXRzWzBdID0gMVVMPDwobm9kZSk7ICAgfSBlbHNlIHsgICBub2Rlc19jbGVhcihtKTsgICBub2RlX3NldCgobm9kZSksIG0pOyAgIH0gICBtOyAgfSkKKyNkZWZpbmUgZmlyc3RfdW5zZXRfbm9kZShtYXNrKSBfX2ZpcnN0X3Vuc2V0X25vZGUoJihtYXNrKSkKKyNkZWZpbmUgTk9ERV9NQVNLX0xBU1RfV09SRCBCSVRNQVBfTEFTVF9XT1JEX01BU0soTUFYX05VTU5PREVTKQorI2lmIE1BWF9OVU1OT0RFUyA8PSBCSVRTX1BFUl9MT05HCisjZGVmaW5lIE5PREVfTUFTS19BTEwgICgobm9kZW1hc2tfdCkgeyB7ICAgW0JJVFNfVE9fTE9OR1MoTUFYX05VTU5PREVTKS0xXSA9IE5PREVfTUFTS19MQVNUX1dPUkQgIH0gfSkKKyNlbHNlCisjZGVmaW5lIE5PREVfTUFTS19BTEwgICgobm9kZW1hc2tfdCkgeyB7ICAgWzAgLi4uIEJJVFNfVE9fTE9OR1MoTUFYX05VTU5PREVTKS0yXSA9IH4wVUwsICAgW0JJVFNfVE9fTE9OR1MoTUFYX05VTU5PREVTKS0xXSA9IE5PREVfTUFTS19MQVNUX1dPUkQgIH0gfSkKKyNlbmRpZgorI2RlZmluZSBOT0RFX01BU0tfTk9ORSAgKChub2RlbWFza190KSB7IHsgICBbMCAuLi4gQklUU19UT19MT05HUyhNQVhfTlVNTk9ERVMpLTFdID0gMFVMICB9IH0pCisjZGVmaW5lIG5vZGVzX2FkZHIoc3JjKSAoKHNyYykuYml0cykKKyNkZWZpbmUgbm9kZW1hc2tfc2NucHJpbnRmKGJ1ZiwgbGVuLCBzcmMpICAgX19ub2RlbWFza19zY25wcmludGYoKGJ1ZiksIChsZW4pLCAmKHNyYyksIE1BWF9OVU1OT0RFUykKKyNkZWZpbmUgbm9kZW1hc2tfcGFyc2UodWJ1ZiwgdWxlbiwgZHN0KSAgIF9fbm9kZW1hc2tfcGFyc2UoKHVidWYpLCAodWxlbiksICYoZHN0KSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2RlbGlzdF9zY25wcmludGYoYnVmLCBsZW4sIHNyYykgICBfX25vZGVsaXN0X3NjbnByaW50ZigoYnVmKSwgKGxlbiksICYoc3JjKSwgTUFYX05VTU5PREVTKQorI2RlZmluZSBub2RlbGlzdF9wYXJzZShidWYsIGRzdCkgX19ub2RlbGlzdF9wYXJzZSgoYnVmKSwgJihkc3QpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVfcmVtYXAob2xkYml0LCBvbGQsIG5ldykgICBfX25vZGVfcmVtYXAoKG9sZGJpdCksICYob2xkKSwgJihuZXcpLCBNQVhfTlVNTk9ERVMpCisjZGVmaW5lIG5vZGVzX3JlbWFwKGRzdCwgc3JjLCBvbGQsIG5ldykgICBfX25vZGVzX3JlbWFwKCYoZHN0KSwgJihzcmMpLCAmKG9sZCksICYobmV3KSwgTUFYX05VTU5PREVTKQorI2lmIE1BWF9OVU1OT0RFUyA+IDEKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1hc2spICAgZm9yICgobm9kZSkgPSBmaXJzdF9ub2RlKG1hc2spOyAgIChub2RlKSA8IE1BWF9OVU1OT0RFUzsgICAobm9kZSkgPSBuZXh0X25vZGUoKG5vZGUpLCAobWFzaykpKQorI2Vsc2UKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZV9tYXNrKG5vZGUsIG1hc2spICAgaWYgKCFub2Rlc19lbXB0eShtYXNrKSkgICBmb3IgKChub2RlKSA9IDA7IChub2RlKSA8IDE7IChub2RlKSsrKQorI2VuZGlmCisKKyNpZiBNQVhfTlVNTk9ERVMgPiAxCisjZGVmaW5lIG51bV9vbmxpbmVfbm9kZXMoKSBub2Rlc193ZWlnaHQobm9kZV9vbmxpbmVfbWFwKQorI2RlZmluZSBudW1fcG9zc2libGVfbm9kZXMoKSBub2Rlc193ZWlnaHQobm9kZV9wb3NzaWJsZV9tYXApCisjZGVmaW5lIG5vZGVfb25saW5lKG5vZGUpIG5vZGVfaXNzZXQoKG5vZGUpLCBub2RlX29ubGluZV9tYXApCisjZGVmaW5lIG5vZGVfcG9zc2libGUobm9kZSkgbm9kZV9pc3NldCgobm9kZSksIG5vZGVfcG9zc2libGVfbWFwKQorI2RlZmluZSBmaXJzdF9vbmxpbmVfbm9kZSBmaXJzdF9ub2RlKG5vZGVfb25saW5lX21hcCkKKyNkZWZpbmUgbmV4dF9vbmxpbmVfbm9kZShuaWQpIG5leHRfbm9kZSgobmlkKSwgbm9kZV9vbmxpbmVfbWFwKQorI2Vsc2UKKyNkZWZpbmUgbnVtX29ubGluZV9ub2RlcygpIDEKKyNkZWZpbmUgbnVtX3Bvc3NpYmxlX25vZGVzKCkgMQorI2RlZmluZSBub2RlX29ubGluZShub2RlKSAoKG5vZGUpID09IDApCisjZGVmaW5lIG5vZGVfcG9zc2libGUobm9kZSkgKChub2RlKSA9PSAwKQorI2RlZmluZSBmaXJzdF9vbmxpbmVfbm9kZSAwCisjZGVmaW5lIG5leHRfb25saW5lX25vZGUobmlkKSAoTUFYX05VTU5PREVTKQorI2VuZGlmCisKKyNkZWZpbmUgYW55X29ubGluZV9ub2RlKG1hc2spICAoeyAgIGludCBub2RlOyAgIGZvcl9lYWNoX25vZGVfbWFzayhub2RlLCAobWFzaykpICAgaWYgKG5vZGVfb25saW5lKG5vZGUpKSAgIGJyZWFrOyAgIG5vZGU7ICB9KQorCisjZGVmaW5lIG5vZGVfc2V0X29ubGluZShub2RlKSBzZXRfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCisjZGVmaW5lIG5vZGVfc2V0X29mZmxpbmUobm9kZSkgY2xlYXJfYml0KChub2RlKSwgbm9kZV9vbmxpbmVfbWFwLmJpdHMpCisKKyNkZWZpbmUgZm9yX2VhY2hfbm9kZShub2RlKSBmb3JfZWFjaF9ub2RlX21hc2soKG5vZGUpLCBub2RlX3Bvc3NpYmxlX21hcCkKKyNkZWZpbmUgZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgZm9yX2VhY2hfbm9kZV9tYXNrKChub2RlKSwgbm9kZV9vbmxpbmVfbWFwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub3RpZmllci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L25vdGlmaWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjFmYzQ2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ub3RpZmllci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05PVElGSUVSX0gKKyNkZWZpbmUgX0xJTlVYX05PVElGSUVSX0gKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKworc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHsKKyBpbnQgKCpub3RpZmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKiwgdW5zaWduZWQgbG9uZywgdm9pZCAqKTsKKyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5leHQ7CisgaW50IHByaW9yaXR5OworfTsKKworc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIHsKKyBzcGlubG9ja190IGxvY2s7Cisgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpoZWFkOworfTsKKworc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgeworIHN0cnVjdCByd19zZW1hcGhvcmUgcndzZW07Cisgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpoZWFkOworfTsKKworc3RydWN0IHJhd19ub3RpZmllcl9oZWFkIHsKKyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKmhlYWQ7Cit9OworCisjZGVmaW5lIEFUT01JQ19JTklUX05PVElGSUVSX0hFQUQobmFtZSkgZG8geyAgIHNwaW5fbG9ja19pbml0KCYobmFtZSktPmxvY2spOyAgIChuYW1lKS0+aGVhZCA9IE5VTEw7ICAgfSB3aGlsZSAoMCkKKyNkZWZpbmUgQkxPQ0tJTkdfSU5JVF9OT1RJRklFUl9IRUFEKG5hbWUpIGRvIHsgICBpbml0X3J3c2VtKCYobmFtZSktPnJ3c2VtKTsgICAobmFtZSktPmhlYWQgPSBOVUxMOyAgIH0gd2hpbGUgKDApCisjZGVmaW5lIFJBV19JTklUX05PVElGSUVSX0hFQUQobmFtZSkgZG8geyAgIChuYW1lKS0+aGVhZCA9IE5VTEw7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBBVE9NSUNfTk9USUZJRVJfSU5JVChuYW1lKSB7ICAgLmxvY2sgPSBfX1NQSU5fTE9DS19VTkxPQ0tFRChuYW1lLmxvY2spLCAgIC5oZWFkID0gTlVMTCB9CisjZGVmaW5lIEJMT0NLSU5HX05PVElGSUVSX0lOSVQobmFtZSkgeyAgIC5yd3NlbSA9IF9fUldTRU1fSU5JVElBTElaRVIoKG5hbWUpLnJ3c2VtKSwgICAuaGVhZCA9IE5VTEwgfQorI2RlZmluZSBSQVdfTk9USUZJRVJfSU5JVChuYW1lKSB7ICAgLmhlYWQgPSBOVUxMIH0KKworI2RlZmluZSBBVE9NSUNfTk9USUZJRVJfSEVBRChuYW1lKSAgIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBuYW1lID0gICBBVE9NSUNfTk9USUZJRVJfSU5JVChuYW1lKQorI2RlZmluZSBCTE9DS0lOR19OT1RJRklFUl9IRUFEKG5hbWUpICAgc3RydWN0IGJsb2NraW5nX25vdGlmaWVyX2hlYWQgbmFtZSA9ICAgQkxPQ0tJTkdfTk9USUZJRVJfSU5JVChuYW1lKQorI2RlZmluZSBSQVdfTk9USUZJRVJfSEVBRChuYW1lKSAgIHN0cnVjdCByYXdfbm90aWZpZXJfaGVhZCBuYW1lID0gICBSQVdfTk9USUZJRVJfSU5JVChuYW1lKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udW1hLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnVtYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZDY2ZjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnVtYS5oCkBAIC0wLDAgKzEsMTkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX05VTUFfSAorI2RlZmluZSBfTElOVVhfTlVNQV9ICisKKyNkZWZpbmUgTk9ERVNfU0hJRlQgMAorCisjZGVmaW5lIE1BWF9OVU1OT0RFUyAoMSA8PCBOT0RFU19TSElGVCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnZyYW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9udnJhbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIzNThiZGIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvbnZyYW0uaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9OVlJBTV9ICisjZGVmaW5lIF9MSU5VWF9OVlJBTV9ICisKKyNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgorCisjZGVmaW5lIE5WUkFNX0lOSVQgX0lPKCdwJywgMHg0MCkgIAorI2RlZmluZSBOVlJBTV9TRVRDS1MgX0lPKCdwJywgMHg0MSkgIAorCisjZGVmaW5lIE5WUkFNX0ZJUlNUX0JZVEUgMTQKKworI2RlZmluZSBOVlJBTV9PRkZTRVQoeCkgKCh4KS1OVlJBTV9GSVJTVF9CWVRFKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9vbWFwX2NzbWkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9vbWFwX2NzbWkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTI4ZDNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L29tYXBfY3NtaS5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX09NQVBfQ1NNSV9IXworI2RlZmluZSBfT01BUF9DU01JX0hfCisKKyNpbmNsdWRlIDxhc20vaW9jdGwuaD4KKworI2RlZmluZSBPTUFQX0NTTUlfVFRZX0VOQUJMRV9BQ0sgX0lPKCdjJywgMCkKKyNkZWZpbmUgT01BUF9DU01JX1RUWV9ESVNBQkxFX0FDSyBfSU8oJ2MnLCAxKQorI2RlZmluZSBPTUFQX0NTTUlfVFRZX1JFQURfVU5BQ0tFRCBfSU9SKCdjJywgMiwgaW50KQorI2RlZmluZSBPTUFQX0NTTUlfVFRZX0FDSyBfSU9XKCdjJywgMywgaW50KQorI2RlZmluZSBPTUFQX0NTTUlfVFRZX1dBS0VVUF9BTkRfQUNLIF9JT1coJ2MnLCA0LCBpbnQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhZ2VtYXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYWdlbWFwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGRkMzk3ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wYWdlbWFwLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUEFHRU1BUF9ICisjZGVmaW5lIF9MSU5VWF9QQUdFTUFQX0gKKworI2luY2x1ZGUgPGxpbnV4L21tLmg+CisjaW5jbHVkZSA8bGludXgvZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKyNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKworI2RlZmluZSBBU19FSU8gKF9fR0ZQX0JJVFNfU0hJRlQgKyAwKSAgCisjZGVmaW5lIEFTX0VOT1NQQyAoX19HRlBfQklUU19TSElGVCArIDEpICAKKworI2RlZmluZSBQQUdFX0NBQ0hFX1NISUZUIFBBR0VfU0hJRlQKKyNkZWZpbmUgUEFHRV9DQUNIRV9TSVpFIFBBR0VfU0laRQorI2RlZmluZSBQQUdFX0NBQ0hFX01BU0sgUEFHRV9NQVNLCisjZGVmaW5lIFBBR0VfQ0FDSEVfQUxJR04oYWRkcikgKCgoYWRkcikrUEFHRV9DQUNIRV9TSVpFLTEpJlBBR0VfQ0FDSEVfTUFTSykKKyNkZWZpbmUgcGFnZV9jYWNoZV9nZXQocGFnZSkgZ2V0X3BhZ2UocGFnZSkKKyNkZWZpbmUgcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpIHB1dF9wYWdlKHBhZ2UpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhcmFtLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGFyYW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTY2OTVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhcmFtLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUEFSQU1fSAorI2RlZmluZSBfTElOVVhfUEFSQU1fSAorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhdGNoa2V5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGF0Y2hrZXkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGY4NmNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BhdGNoa2V5LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUEFUQ0hLRVlfSF9JTkRJUkVDVAorI2Vycm9yICJwYXRjaGtleS5oIGluY2x1ZGVkIGRpcmVjdGx5IgorI2VuZGlmCisKKyNpZm5kZWYgX0xJTlVYX1BBVENIS0VZX0gKKyNkZWZpbmUgX0xJTlVYX1BBVENIS0VZX0gKKworI2luY2x1ZGUgPGVuZGlhbi5oPgorCisjaWZkZWYgX19CWVRFX09SREVSCisjaWYgX19CWVRFX09SREVSID09IF9fQklHX0VORElBTgorI2RlZmluZSBfUEFUQ0hLRVkoaWQpICgweGZkMDB8aWQpCisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIF9QQVRDSEtFWShpZCkgKChpZDw8OCl8MHgwMGZkKQorI2Vsc2UKKyNlcnJvciAiY291bGQgbm90IGRldGVybWluZSBieXRlIG9yZGVyIgorI2VuZGlmCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGNpLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY1ZGViNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2kuaApAQCAtMCwwICsxLDI5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX1BDSV9ICisjZGVmaW5lIExJTlVYX1BDSV9ICisKKyNpbmNsdWRlIDxsaW51eC9wY2lfcmVncy5oPgorCisjaW5jbHVkZSA8bGludXgvcGNpX2lkcy5oPgorCisjZGVmaW5lIFBDSV9ERVZGTihzbG90LGZ1bmMpICgoKChzbG90KSAmIDB4MWYpIDw8IDMpIHwgKChmdW5jKSAmIDB4MDcpKQorI2RlZmluZSBQQ0lfU0xPVChkZXZmbikgKCgoZGV2Zm4pID4+IDMpICYgMHgxZikKKyNkZWZpbmUgUENJX0ZVTkMoZGV2Zm4pICgoZGV2Zm4pICYgMHgwNykKKworI2RlZmluZSBQQ0lJT0NfQkFTRSAoJ1AnIDw8IDI0IHwgJ0MnIDw8IDE2IHwgJ0knIDw8IDgpCisjZGVmaW5lIFBDSUlPQ19DT05UUk9MTEVSIChQQ0lJT0NfQkFTRSB8IDB4MDApICAKKyNkZWZpbmUgUENJSU9DX01NQVBfSVNfSU8gKFBDSUlPQ19CQVNFIHwgMHgwMSkgIAorI2RlZmluZSBQQ0lJT0NfTU1BUF9JU19NRU0gKFBDSUlPQ19CQVNFIHwgMHgwMikgIAorI2RlZmluZSBQQ0lJT0NfV1JJVEVfQ09NQklORSAoUENJSU9DX0JBU0UgfCAweDAzKSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9pZHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfaWRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM1YWRmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfaWRzLmgKQEAgLTAsMCArMSwyMjcwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFBDSV9DTEFTU19OT1RfREVGSU5FRCAweDAwMDAKKyNkZWZpbmUgUENJX0NMQVNTX05PVF9ERUZJTkVEX1ZHQSAweDAwMDEKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TVE9SQUdFIDB4MDEKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfU0NTSSAweDAxMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfSURFIDB4MDEwMQorI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9GTE9QUFkgMHgwMTAyCisjZGVmaW5lIFBDSV9DTEFTU19TVE9SQUdFX0lQSSAweDAxMDMKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfUkFJRCAweDAxMDQKKyNkZWZpbmUgUENJX0NMQVNTX1NUT1JBR0VfU0FTIDB4MDEwNworI2RlZmluZSBQQ0lfQ0xBU1NfU1RPUkFHRV9PVEhFUiAweDAxODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19ORVRXT1JLIDB4MDIKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQgMHgwMjAwCisjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX1RPS0VOX1JJTkcgMHgwMjAxCisjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX0ZEREkgMHgwMjAyCisjZGVmaW5lIFBDSV9DTEFTU19ORVRXT1JLX0FUTSAweDAyMDMKKyNkZWZpbmUgUENJX0NMQVNTX05FVFdPUktfT1RIRVIgMHgwMjgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfRElTUExBWSAweDAzCisjZGVmaW5lIFBDSV9DTEFTU19ESVNQTEFZX1ZHQSAweDAzMDAKKyNkZWZpbmUgUENJX0NMQVNTX0RJU1BMQVlfWEdBIDB4MDMwMQorI2RlZmluZSBQQ0lfQ0xBU1NfRElTUExBWV8zRCAweDAzMDIKKyNkZWZpbmUgUENJX0NMQVNTX0RJU1BMQVlfT1RIRVIgMHgwMzgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfTVVMVElNRURJQSAweDA0CisjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX1ZJREVPIDB4MDQwMAorI2RlZmluZSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyAweDA0MDEKKyNkZWZpbmUgUENJX0NMQVNTX01VTFRJTUVESUFfUEhPTkUgMHgwNDAyCisjZGVmaW5lIFBDSV9DTEFTU19NVUxUSU1FRElBX09USEVSIDB4MDQ4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX01FTU9SWSAweDA1CisjZGVmaW5lIFBDSV9DTEFTU19NRU1PUllfUkFNIDB4MDUwMAorI2RlZmluZSBQQ0lfQ0xBU1NfTUVNT1JZX0ZMQVNIIDB4MDUwMQorI2RlZmluZSBQQ0lfQ0xBU1NfTUVNT1JZX09USEVSIDB4MDU4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0JSSURHRSAweDA2CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfSE9TVCAweDA2MDAKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9JU0EgMHgwNjAxCisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfRUlTQSAweDA2MDIKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9NQyAweDA2MDMKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9QQ0kgMHgwNjA0CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfUENNQ0lBIDB4MDYwNQorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX05VQlVTIDB4MDYwNgorI2RlZmluZSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMgMHgwNjA3CisjZGVmaW5lIFBDSV9DTEFTU19CUklER0VfUkFDRVdBWSAweDA2MDgKKyNkZWZpbmUgUENJX0NMQVNTX0JSSURHRV9PVEhFUiAweDA2ODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19DT01NVU5JQ0FUSU9OIDB4MDcKKyNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fU0VSSUFMIDB4MDcwMAorI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9QQVJBTExFTCAweDA3MDEKKyNkZWZpbmUgUENJX0NMQVNTX0NPTU1VTklDQVRJT05fTVVMVElTRVJJQUwgMHgwNzAyCisjZGVmaW5lIFBDSV9DTEFTU19DT01NVU5JQ0FUSU9OX01PREVNIDB4MDcwMworI2RlZmluZSBQQ0lfQ0xBU1NfQ09NTVVOSUNBVElPTl9PVEhFUiAweDA3ODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19TWVNURU0gMHgwOAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1BJQyAweDA4MDAKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9QSUNfSU9BUElDIDB4MDgwMDEwCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUElDX0lPWEFQSUMgMHgwODAwMjAKKyNkZWZpbmUgUENJX0NMQVNTX1NZU1RFTV9ETUEgMHgwODAxCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fVElNRVIgMHgwODAyCisjZGVmaW5lIFBDSV9DTEFTU19TWVNURU1fUlRDIDB4MDgwMworI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1BDSV9IT1RQTFVHIDB4MDgwNAorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX1NESENJIDB4MDgwNQorI2RlZmluZSBQQ0lfQ0xBU1NfU1lTVEVNX09USEVSIDB4MDg4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX0lOUFVUIDB4MDkKKyNkZWZpbmUgUENJX0NMQVNTX0lOUFVUX0tFWUJPQVJEIDB4MDkwMAorI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfUEVOIDB4MDkwMQorI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfTU9VU0UgMHgwOTAyCisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9TQ0FOTkVSIDB4MDkwMworI2RlZmluZSBQQ0lfQ0xBU1NfSU5QVVRfR0FNRVBPUlQgMHgwOTA0CisjZGVmaW5lIFBDSV9DTEFTU19JTlBVVF9PVEhFUiAweDA5ODAKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19ET0NLSU5HIDB4MGEKKyNkZWZpbmUgUENJX0NMQVNTX0RPQ0tJTkdfR0VORVJJQyAweDBhMDAKKyNkZWZpbmUgUENJX0NMQVNTX0RPQ0tJTkdfT1RIRVIgMHgwYTgwCisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfUFJPQ0VTU09SIDB4MGIKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl8zODYgMHgwYjAwCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfNDg2IDB4MGIwMQorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX1BFTlRJVU0gMHgwYjAyCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfQUxQSEEgMHgwYjEwCisjZGVmaW5lIFBDSV9DTEFTU19QUk9DRVNTT1JfUE9XRVJQQyAweDBiMjAKKyNkZWZpbmUgUENJX0NMQVNTX1BST0NFU1NPUl9NSVBTIDB4MGIzMAorI2RlZmluZSBQQ0lfQ0xBU1NfUFJPQ0VTU09SX0NPIDB4MGI0MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NFUklBTCAweDBjCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfRklSRVdJUkUgMHgwYzAwCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfQUNDRVNTIDB4MGMwMQorI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1NTQSAweDBjMDIKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0IgMHgwYzAzCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfVVNCX1VIQ0kgMHgwYzAzMDAKKyNkZWZpbmUgUENJX0NMQVNTX1NFUklBTF9VU0JfT0hDSSAweDBjMDMxMAorI2RlZmluZSBQQ0lfQ0xBU1NfU0VSSUFMX1VTQl9FSENJIDB4MGMwMzIwCisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfRklCRVIgMHgwYzA0CisjZGVmaW5lIFBDSV9DTEFTU19TRVJJQUxfU01CVVMgMHgwYzA1CisKKyNkZWZpbmUgUENJX0JBU0VfQ0xBU1NfSU5URUxMSUdFTlQgMHgwZQorI2RlZmluZSBQQ0lfQ0xBU1NfSU5URUxMSUdFTlRfSTJPIDB4MGUwMAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NBVEVMTElURSAweDBmCisjZGVmaW5lIFBDSV9DTEFTU19TQVRFTExJVEVfVFYgMHgwZjAwCisjZGVmaW5lIFBDSV9DTEFTU19TQVRFTExJVEVfQVVESU8gMHgwZjAxCisjZGVmaW5lIFBDSV9DTEFTU19TQVRFTExJVEVfVk9JQ0UgMHgwZjAzCisjZGVmaW5lIFBDSV9DTEFTU19TQVRFTExJVEVfREFUQSAweDBmMDQKKworI2RlZmluZSBQQ0lfQkFTRV9DTEFTU19DUllQVCAweDEwCisjZGVmaW5lIFBDSV9DTEFTU19DUllQVF9ORVRXT1JLIDB4MTAwMAorI2RlZmluZSBQQ0lfQ0xBU1NfQ1JZUFRfRU5URVJUQUlOTUVOVCAweDEwMDEKKyNkZWZpbmUgUENJX0NMQVNTX0NSWVBUX09USEVSIDB4MTA4MAorCisjZGVmaW5lIFBDSV9CQVNFX0NMQVNTX1NJR05BTF9QUk9DRVNTSU5HIDB4MTEKKyNkZWZpbmUgUENJX0NMQVNTX1NQX0RQSU8gMHgxMTAwCisjZGVmaW5lIFBDSV9DTEFTU19TUF9PVEhFUiAweDExODAKKworI2RlZmluZSBQQ0lfQ0xBU1NfT1RIRVJTIDB4ZmYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RZTkFMSU5LIDB4MDY3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RZTkFMSU5LX0lTNjRQSCAweDE3MDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JFUktPTSAweDA4NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CRVJLT01fQTFUIDB4ZmZhMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JFUktPTV9UX0NPTkNFUFQgMHhmZmEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkVSS09NX0E0VCAweGZmYTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CRVJLT01fU0NJVEVMX1FVQURSTyAweGZmYTgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBBUSAweDBlMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfVE9LRU5SSU5HIDB4MDUwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9UQUNIWU9OIDB4YTBmYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9TTUFSVDJQIDB4YWUxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMCAweGFlMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURUwxMCAweGFlMzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfVFJJRkxFWF9JREUgMHhhZTMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEZMRVgzSSAweGFlMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QQVFfTkVURUwxMDBEIDB4YWU0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMFBJIDB4YWU0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9ORVRFTDEwMEkgMHhiMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX0NJU1MgMHhiMDYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX0NJU1NCIDB4YjE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBBUV9DSVNTQyAweDQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX1RIVU5ERVIgMHhmMTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRX05FVEZMRVgzQiAweGYxNTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05DUiAweDEwMDAKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MU0lfTE9HSUMgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxMCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODIwIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4MjUgMHgwMDAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzgxNSAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDODEwQVAgMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg2MCAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNTNDMTUxMCAweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODk2IDB4MDAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0M4OTUgMHgwMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg4NSAweDAwMGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OQ1JfNTNDODc1IDB4MDAwZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05DUl81M0MxNTEwIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0M4OTVBIDB4MDAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0M4NzVBIDB4MDAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxMDEwXzMzIDB4MDAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxMDEwXzY2IDB4MDAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV81M0MxMDMwIDB4MDAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV8xMDMwXzUzQzEwMzUgMHgwMDMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJXzUzQzEwMzUgMHgwMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSXzUzQzg3NUogMHgwMDhmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTA5IDB4MDYyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkyOSAweDA2MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MjlfTEFOIDB4MDYyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkxOSAweDA2MjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5MTlfTEFOIDB4MDYyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkyOVggMHgwNjI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX0ZDOTM5WCAweDA2NDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfRkM5NDlYIDB4MDY0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzk0OUVTIDB4MDY0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9GQzkxOVggMHgwNjI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkNSX1lFTExPV0ZJTiAweDA3MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfNjFDMTAyIDB4MDkwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV82M0M4MTUgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjQgMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjRSIDB4MDQxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY2IDB4MDA1RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4IDB4MDA1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY0QSAweDAwNUMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA2NEUgMHgwMDU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTFNJX1NBUzEwNjZFIDB4MDA1QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xTSV9TQVMxMDY4RSAweDAwNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MU0lfU0FTMTA3OCAweDAwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUSSAweDEwMDIKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV82ODgwMCAweDQxNTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1Q1QyMjIgMHg0MzU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxMDg4OENYIDB4NDM1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVFVDIyMiAweDQ1NTQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHQiAweDQ3NDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R0QgMHg0NzQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNUdJIDB4NDc0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHUCAweDQ3NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R1EgMHg0NzUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNVhMIDB4NDc1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVHVCAweDQ3NTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1R1RCIDB4NDc1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfSVYgMHg0NzU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9JVyAweDQ3NTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0laIDB4NDc1QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTA4ODhHWCAweDQ3NTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xCIDB4NGM0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTEQgMHg0YzQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MRyAweDRjNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xJIDB4NGM0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTE0gMHg0YzRECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzIxNV9MTiAweDRjNEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjE1X0xSIDB4NGM1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yMTVfTFMgMHg0YzUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NF9MVCAweDRjNTQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV8yNjRWVCAweDU2NTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfMjY0VlUgMHg1NjU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJXzI2NFZWIDB4NTY1NgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUkUgMHg1MjQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUkYgMHg1MjQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUkcgMHg1MjQ3CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9SSyAweDUyNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9STCAweDUyNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRSAweDUzNDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRiAweDUzNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TRyAweDUzNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSCAweDUzNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TSyAweDUzNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTCAweDUzNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTSAweDUzNGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9TTiAweDUzNGUKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RGIDB4NTQ0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RMIDB4NTQ0YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RSIDB4NTQ1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RTIDB4NTQ1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RUIDB4NTQ1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1RVIDB4NTQ1NQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfTEUgMHg0YzQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfTEYgMHg0YzQ2CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NRiAweDRkNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFHRTEyOF9NTCAweDRkNGMKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BBIDB4NTA0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BCIDB4NTA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BDIDB4NTA0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BEIDB4NTA0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BFIDB4NTA0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQUdFMTI4X1BGIDB4NTA0NgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEcgMHg1MDQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEggMHg1MDQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEkgMHg1MDQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEogMHg1MDRBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEsgMHg1MDRCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUEwgMHg1MDRDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUE0gMHg1MDRECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUE4gMHg1MDRFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUE8gMHg1MDRGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFAgMHg1MDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFEgMHg1MDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFIgMHg1MDUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFMgMHg1MDUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFQgMHg1MDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFUgMHg1MDU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFYgMHg1MDU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFcgMHg1MDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBR0UxMjhfUFggMHg1MDU4CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FEIDB4NTE0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUUUgMHg1MTQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RRiAweDUxNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FHIDB4NTE0NworCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RWSAweDUxNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FaIDB4NTE1YQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTCAweDUxNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1FOIDB4NTE0ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUU8gMHg1MTRmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RbCAweDUxNmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0JCIDB4NDI0MgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RTSAweDUxNGQKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fUVcgMHg1MTU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9RWCAweDUxNTgKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWQgMHg0OTY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9JZSAweDQ5NjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0lmIDB4NDk2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fSWcgMHg0OTY3CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX1lhIDB4NTk2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fWWQgMHg1OTY0CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05EIDB4NGU0NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTkUgMHg0ZTQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9ORiAweDRlNDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX05HIDB4NGU0NworCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MWSAweDRjNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xaIDB4NGM1YQorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MVyAweDRjNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xYIDB4NGM1OAorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZCAweDRjNjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUkFERU9OX0xlIDB4NGM2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SQURFT05fTGYgMHg0YzY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JBREVPTl9MZyAweDRjNjcKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzEwMCAweGNhYjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMyMDAgMHhjYWIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjAwX0IgMHhjYmIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMjUwIDB4Y2FiMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8xMDAgMHg1ODMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzAwXzEzMyAweDU4MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzMDBfMTY2IDB4NTgzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzMwMF8yMDAgMHg1ODMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzUwXzEwMCAweDc4MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlMzNTBfMTMzIDB4NzgzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzM1MF8xNjYgMHg3ODMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTMzUwXzIwMCAweDc4MzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlM0MDBfMTAwIDB4NWEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQwMF8xMzMgMHg1YTMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX1JTNDAwXzE2NiAweDVhMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfUlM0MDBfMjAwIDB4NWEzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9SUzQ4MCAweDU5NTAKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAyMDBfSURFIDB4NDM0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FUSV9JWFAyMDBfU01CVVMgMHg0MzUzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDMwMF9TTUJVUyAweDQzNjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX0lERSAweDQzNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQMzAwX1NBVEEgMHg0MzZlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TTUJVUyAweDQzNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX0lERSAweDQzNzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNDAwX1NBVEEgMHg0Mzc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDQwMF9TQVRBMiAweDQzN2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX1NBVEEgMHg0MzgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRJX0lYUDYwMF9TUkFJRCAweDQzODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVElfSVhQNjAwX0lERSAweDQzOGMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZMU0kgMHgxMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTIgMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTMgMHgwMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTQgMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1OTcgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1NDEgMHgwMDBjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1NDMgMHgwMDBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1MzIgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1MzQgMHgwMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkM1MzUgMHgwMTA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV84MkMxNDcgMHgwMTA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVkxTSV9WQVM5NjAxMSAweDA3MDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FETCAweDEwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRExfMjMwMSAweDIzMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05TIDB4MTAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NDE1IDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TXzg3NTYwX0xJTyAweDAwMGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU184NzU2MF9VU0IgMHgwMDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODM4MTUgMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODM4MjAgMHgwMDIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0lTQSAweDAwMmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSURFIDB4MDAyZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9BVURJTyAweDAwMmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfVVNCIDB4MDAyZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX0NTNTUzNV9WSURFTyAweDAwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQVRVUk4gMHgwMDM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0JSSURHRSAweDA1MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfU01JIDB4MDUwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9JREUgMHgwNTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0N4MjAwX0FVRElPIDB4MDUwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDeDIwMF9WSURFTyAweDA1MDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQ3gyMDBfWEJVUyAweDA1MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19TQzExMDBfQlJJREdFIDB4MDUxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05TX1NDMTEwMF9TTUkgMHgwNTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfU0MxMTAwX1hCVVMgMHgwNTE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfODc0MTAgMHhkMDAxCisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OU19DUzU1MzVfSE9TVF9CUklER0UgMHgwMDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlNfQ1M1NTM1X0lTQV9CUklER0UgMHgwMDJiCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UU0VORyAweDEwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19XMzJQXzIgMHgzMjAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfVzMyUF9iIDB4MzIwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RTRU5HX1czMlBfYyAweDMyMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UU0VOR19XMzJQX2QgMHgzMjA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFNFTkdfRVQ2MDAwIDB4MzIwOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0VJVEVLIDB4MTAwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1dFSVRFS19QOTAwMCAweDkwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XRUlURUtfUDkxMDAgMHg5MTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ERUMgMHgxMDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX0JSRCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVFVMSVAgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDX1RHQSAweDAwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVFVMSVBfRkFTVCAweDAwMDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVEdBMiAweDAwMEQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfRkRESSAweDAwMEYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfVFVMSVBfUExVUyAweDAwMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNDIgMHgwMDE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMDUyIDB4MDAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE1MCAweDAwMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjExNTIgMHgwMDI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVDXzIxMTUzIDB4MDAyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RFQ18yMTE1NCAweDAwMjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUNfMjEyODUgMHgxMDY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEFRXzQyWFggMHgwMDQ2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DSVJSVVMgMHgxMDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzc1NDggMHgwMDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzAgMHgwMGEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ0lSUlVTXzU0MzRfNCAweDAwYTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DSVJSVVNfNTQzNF84IDB4MDBhOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDM2IDB4MDBhYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDQ2IDB4MDBiOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDgwIDB4MDBiYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDYyIDB4MDBkMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDY0IDB4MDBkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU181NDY1IDB4MDBkNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU182NzI5IDB4MTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU182ODMyIDB4MTExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU183NTQzIDB4MTIwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEwIDB4NjAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjEyIDB4NjAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NJUlJVU180NjE1IDB4NjAwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSUJNIDB4MTAxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9UUiAweDAwMTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fVFJfV0FLRSAweDAwM2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ1BDNzEwX1BDSTY0IDB4MDBmYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9TTklQRSAweDAxODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fQ0lUUklORSAweDAyOEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fR0VNU1RPTkUgMHhCMTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX09CU0lESUFOIDB4MDJCRAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8xIDB4MDAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX0RFVl9JRF8yIDB4MDIxOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lCTV9JQ09NX1YyX1RXT19QT1JUU19SVlggMHgwMjFBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSUJNX0lDT01fVjJfT05FX1BPUlRfUlZYX09ORV9QT1JUX01ETSAweDAyNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQk1fSUNPTV9GT1VSX1BPUlRfTU9ERUwgMHgyNTIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTVBFWDIgMHgxMDFhICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QRVgyXzEwMFZHIDB4MDAwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0QgMHgxMDFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0RfOTBDIDB4YzI0YQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU1JIDB4MTAxZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDMgMHgxOTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1JX01FR0FSQUlEIDB4OTAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNSV9NRUdBUkFJRDIgMHg5MDYwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTUQgMHgxMDIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0s4X05CIDB4MTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MQU5DRSAweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTEFOQ0VfSE9NRSAweDIwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0NTSSAweDIwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfU0VSRU5BREUgMHgzNmMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwNiAweDcwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfRkVfR0FURV83MDA3IDB4NzAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9GRV9HQVRFXzcwMEMgMHg3MDBDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0ZFX0dBVEVfNzAwRSAweDcwMEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ09CUkFfNzQwMSAweDc0MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwOSAweDc0MDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQwQiAweDc0MEIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMCAweDc0MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMSAweDc0MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQxMyAweDc0MTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfVklQRVJfNzQ0MCAweDc0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfT1BVU183NDQxIDB4NzQ0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9PUFVTXzc0NDMgMHg3NDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX1ZJUEVSXzc0NDMgMHg3NDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX09QVVNfNzQ0NSAweDc0NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9MUEMgMHg3NDY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EXzgxMTFfSURFIDB4NzQ2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTExX1NNQlVTMiAweDc0NmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9TTUJVUyAweDc0NmIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODExMV9BVURJTyAweDc0NmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODE1MV8wIDB4NzQ1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF84MTMxX0JSSURHRSAweDc0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfODEzMV9BUElDIDB4NzQ1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfSVNBIDB4MjA5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9DUzU1MzZfRkxBU0ggMHgyMDkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQU1EX0NTNTUzNl9BVURJTyAweDIwOTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X09IQyAweDIwOTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0VIQyAweDIwOTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VEQyAweDIwOTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X1VPQyAweDIwOTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfQ1M1NTM2X0lERSAweDIwOUEKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FNRF9MWF9WSURFTyAweDIwODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTURfTFhfQUVTIDB4MjA4MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFJJREVOVCAweDEwMjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9EWCAweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzREV0FWRV9OWCAweDIwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzkzMjAgMHg5MzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85Mzg4IDB4OTM4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTM5NyAweDkzOTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzkzOUEgMHg5MzlBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NTIwIDB4OTUyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTUyNSAweDk1MjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk0MjAgMHg5NDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85NDQwIDB4OTQ0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTY2MCAweDk2NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzk3NTAgMHg5NzUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF85ODUwIDB4OTg1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfOTg4MCAweDk4ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UUklERU5UXzg0MDAgMHg4NDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFJJREVOVF84NDIwIDB4ODQyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RSSURFTlRfODUwMCAweDg1MDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FJIDB4MTAyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FJX00xNDM1IDB4MTQzNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfREVMTCAweDEwMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUxMX1JBQ0lJSSAweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ERUxMX1JBQzQgMHgwMDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfREVMTF9QRVJDNSAweDAwMTUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01BVFJPWCAweDEwMkIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUdBXzIgMHgwNTE4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX01JTCAweDA1MTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTVlTIDB4MDUxQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NSUxfMiAweDA1MWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTVlTX0FHUCAweDA1MWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfTUlMXzJfQUdQIDB4MDUxZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9NR0FfSU1QIDB4MGQxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMTAwX01NIDB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HMTAwX0FHUCAweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVRST1hfRzIwMF9QQ0kgMHgwNTIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFUUk9YX0cyMDBfQUdQIDB4MDUyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HNDAwIDB4MDUyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9HNTUwIDB4MjUyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BVFJPWF9WSUEgMHg0NTM2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DVCAweDEwMmMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82OTAwMCAweDAwYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0NSAweDAwZDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU0OCAweDAwZGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1MCAweDAwZTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1NCAweDAwZTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DVF82NTU1NSAweDAwZTUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01JUk8gMHgxMDMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUlST18zNjA1MCAweDU2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSVJPX0RDMTBQTFVTIDB4N2VmZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JUk9fREMzMFBMVVMgMHhkODAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORUMgMHgxMDMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0NCVVNfMSAweDAwMDEgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19MT0NBTCAweDAwMDIgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19BVE0gMHgwMDAzICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUjQwMDAgMHgwMDA0ICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfNDg2IDB4MDAwNSAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0FDQ0VMXzEgMHgwMDA2ICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVVhCVVMgMHgwMDA3ICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQUNDRUxfMiAweDAwMDggIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19HUkFQSCAweDAwMDkgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19WTCAweDAwMTYgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19TVEFSQUxQSEEyIDB4MDAyYyAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX0NCVVNfMiAweDAwMmQgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19VU0IgMHgwMDM1ICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfQ0JVU18zIDB4MDAzYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19OQVBDQ0FSRCAweDAwM2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfUENYMiAweDAwNDYgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19OSUxFNCAweDAwNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNTQ3NiAweDAwOWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNDE3MyAweDAwYTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORUNfVlJDNTQ3N19BQzk3IDB4MDBhNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FQ19QQzk4MjFDUzAxIDB4ODAwYyAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVDX1BDOTgyMU5SQjA2IDB4ODAwZCAgCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GRCAweDEwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GRF8zNkM3MCAweDAwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJIDB4MTAzOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTFfQUdQIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYyMDIgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTAzIDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJX0FDUEkgMHgwMDA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfU01CVVMgMHgwMDE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfTFBDIDB4MDAxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTdfVkdBIDB4MDIwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYyMDUgMHgwMjA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTAxIDB4MDQwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzQ5NiAweDA0OTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMDAgMHgwMzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfMzE1SCAweDAzMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV8zMTUgMHgwMzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfMzE1UFJPIDB4MDMyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzUzMCAweDA1MzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NDAgMHgwNTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUwIDB4MDU1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU0MF9WR0EgMHg1MzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUwX1ZHQSAweDUzMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MjAgMHgwNjIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjMwIDB4MDYzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMyAweDA2MzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82MzUgMHgwNjM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQwIDB4MDY0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY0NSAweDA2NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NDYgMHgwNjQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjQ4IDB4MDY0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY1MCAweDA2NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV82NTEgMHgwNjUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNjU1IDB4MDY1NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzY2MSAweDA2NjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MzAgMHgwNzMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzMzIDB4MDczMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzYzMF9WR0EgMHg2MzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzM1IDB4MDczNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0MCAweDA3NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NDEgMHgwNzQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzQ1IDB4MDc0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzc0NiAweDA3NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83NTUgMHgwNzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzYwIDB4MDc2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzkwMCAweDA5MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjEgMHgwOTYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTYyIDB4MDk2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2MyAweDA5NjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV85NjUgMHgwOTY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfOTY2IDB4MDk2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzk2OCAweDA5NjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTExIDB4NTUxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1MTMgMHg1NTEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTUxNyAweDU1MTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTE4IDB4NTUxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1NzEgMHg1NTcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU4MSAweDU1ODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTgyIDB4NTU4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTEgMHg1NTkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTU5NiAweDU1OTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV81NTk3IDB4NTU5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzU1OTggMHg1NTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNTYwMCAweDU2MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDEyIDB4NzAxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJXzcwMTMgMHg3MDEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lfNzAxNiAweDcwMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSV83MDE4IDB4NzAxOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSFAgMHgxMDNjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0VHIDB4MTAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1ZJU1VBTElaRV9GWDYgMHgxMDA2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYNCAweDEwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9WSVNVQUxJWkVfRlgyIDB4MTAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1RBQ0hZT04gMHgxMDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVEFDSExJVEUgMHgxMDI5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI1ODVBIDB4MTAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0oyNTg1QiAweDEwMzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9KMjk3M0EgMHgxMDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfSjI5NzBBIDB4MTA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkEgMHgxMDQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9UT1NDQTEgMHgxMDQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9UT1NDQTIgMHgxMDRBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9NQUVTVFJPIDB4MTA0QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1JFT19JT0MgMHgxMGYxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfVklTVUFMSVpFX0ZYRSAweDEwOGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0hBTEZET01FIDB4MTIyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfS0VZU1RPTkUgMHgxMjI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9QT1dFUkJBUiAweDEyMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9aWDFfSU9DIDB4MTIyYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1BDSVhfTEJBIDB4MTIyZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX1NYMTAwMF9JT0MgMHgxMjdjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSFBfRElWQV9FVkVSRVNUIDB4MTI4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfQVVYIDB4MTI5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hQX0RJVkFfUk1QMyAweDEzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9ESVZBX0hVUlJJQ0FORSAweDEzMmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTQSAweDMyMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTQyAweDMyMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9DSVNTRCAweDMyMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9IUF9aWDJfSU9DIDB4NDAzMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUENURUNIIDB4MTA0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDVEVDSF9SWjEwMDAgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUENURUNIX1JaMTAwMSAweDEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQ1RFQ0hfU0FNVVJBSV9JREUgMHgzMDIwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BU1VTVEVLIDB4MTA0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FTVVNURUtfMDY3NSAweDA2NzUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RQVCAweDEwNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EUFQgMHhhNDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PUFRJIDB4MTA0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNTU4IDB4YzU1OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNjIxIDB4YzYyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDNzAwIDB4YzcwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09QVElfODJDODI1IDB4ZDU2OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUxTQSAweDEwNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTFNBX01JQ1JPTElOSyAweDEwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTFNBX1FTMzAwMCAweDMwMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JVU0xPR0lDIDB4MTA0QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JVU0xPR0lDX01VTFRJTUFTVEVSX05DIDB4MDE0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JVU0xPR0lDX01VTFRJTUFTVEVSIDB4MTA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JVU0xPR0lDX0ZMQVNIUE9JTlQgMHg4MTMwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USSAweDEwNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9UVlA0MDIwIDB4M2QwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0NTAgMHg4MDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfWFgyMV9YWDExIDB4ODAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMjFfWFgxMV9TRCAweDgwMzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YNTE1IDB4ODAzNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1hYMTIgMHg4MDM5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTEzMCAweGFjMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMDMxIDB4YWMxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzExMzEgMHhhYzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MCAweGFjMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjIwIDB4YWMxNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMjEgMHhhYzE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIxMCAweGFjMWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUwIDB4YWMxYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzEyMjUgMHhhYzFjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTI1MUEgMHhhYzFkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTIxMSAweGFjMWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xMjUxQiAweGFjMWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NDEwIDB4YWM0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzQ0NTEgMHhhYzQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNDUxMCAweGFjNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV80NTIwIDB4YWM0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzc1MTAgMHhhYzQ3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfNzYxMCAweGFjNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV83NDEwIDB4YWM0OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE0MTAgMHhhYzUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTQyMCAweGFjNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNDUxQSAweGFjNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV8xNjIwIDB4YWM1NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJXzE1MjAgMHhhYzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElfMTUxMCAweGFjNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USV9YNjIwIDB4YWM4ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJX1g0MjAgMHhhYzhlCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TT05ZIDB4MTA0ZAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0lOQk9ORDIgMHgxMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfV0lOQk9ORDJfODlDOTQwRiAweDVhNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EMl82NjkyIDB4NjY5MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQU5JR01BIDB4MTA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FOSUdNQV9NQzE0NTU3NSAweDAxMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VGQVIgMHgxMDU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZBUl9TTEM5MEU2Nl8xIDB4OTEzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VGQVJfU0xDOTBFNjZfMyAweDk0NjMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01PVE9ST0xBIDB4MTA1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX01QQzEwNSAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEMxMDYgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfTVBDMTA3IDB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX1JBVkVOIDB4NDgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX0ZBTENPTiAweDQ4MDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9IQVdLIDB4NDgwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PVE9ST0xBX0hBUlJJRVIgMHg0ODBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9UT1JPTEFfTVBDNTIwMCAweDU4MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1RPUk9MQV9NUEM1MjAwQiAweDU4MDkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BST01JU0UgMHgxMDVhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2NSAweDBkMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjY3IDB4NGQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNDYgMHg0ZDMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2MiAweDRkMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjYzIDB4MEQzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNjggMHg0ZDY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI2OSAweDRkNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjcwIDB4NjI2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzEgMHg2MjY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUFJPTUlTRV8yMDI3NSAweDEyNzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QUk9NSVNFXzIwMjc2IDB4NTI3NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BST01JU0VfMjAyNzcgMHg3Mjc1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9VTUMgMHgxMDYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODY3M0YgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVU1DX1VNODg4NkJGIDB4NjczYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VNQ19VTTg4ODZBIDB4ODg2YQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTVlMRVggMHgxMDY5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX1AgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX1BEIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9QRyAweDAwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfTEEgMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVlMRVhfREFDOTYwX0xQIDB4MDA1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01ZTEVYX0RBQzk2MF9CQSAweEJBNTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NWUxFWF9EQUM5NjBfR0VNIDB4QjE2NgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVBQTEUgMHgxMDZiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfQkFORElUIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0hZRFJBIDB4MDAwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0ZXIDB4MDAxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUCAweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9HTUFDIDB4MDAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUNQIDB4MDAyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUF9QIDB4MDAyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FHUDE1IDB4MDAyZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX1BDSTE1IDB4MDAyZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0dNQUMyIDB4MDAzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1VOSV9OX0FUQSAweDAwMzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VTklfTl9BR1AyIDB4MDAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSURfQVRBMTAwIDB4MDAzYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0syX0FUQTEwMCAweDAwNDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9VM19BR1AgMHgwMDRiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSzJfR01BQyAweDAwNGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9TSF9BVEEgMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfU0hfU1VOR0VNIDB4MDA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX1UzTF9BR1AgMHgwMDU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVTNIX0FHUCAweDAwNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMRV9JUElEMl9BR1AgMHgwMDY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfSVBJRDJfQVRBIDB4MDA2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSUQyX0ZXIDB4MDA2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExFX0lQSUQyX0dNQUMgMHgwMDZiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVBQTEVfVElHT04zIDB4MTY0NQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWUFNQUhBIDB4MTA3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83MjQgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzcyNEYgMHgwMDBkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWUFNQUhBXzc0MCAweDAwMGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQwQyAweDAwMGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ZQU1BSEFfNzQ0IDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1lBTUFIQV83NTQgMHgwMDEyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9RTE9HSUMgMHgxMDc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUUxPR0lDX0lTUDEwMTYwIDB4MTAxNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDIwIDB4MTAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMDgwIDB4MTA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FMT0dJQ19JU1AxMjE2MCAweDEyMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTI0MCAweDEyNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMTI4MCAweDEyODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjEwMCAweDIxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjIwMCAweDIyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMwMCAweDIzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMxMiAweDIzMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjMyMiAweDIzMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMxMiAweDYzMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNjMyMiAweDYzMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQyMiAweDI0MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjQzMiAweDI0MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjUxMiAweDI1MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQMjUyMiAweDI1MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNTQyMiAweDU0MjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RTE9HSUNfSVNQNTQzMiAweDU0MzIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NZUklYIDB4MTA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MTAgMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfUENJX01BU1RFUiAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWVJJWF81NTIwIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfTEVHQUNZIDB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfSURFIDB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZUklYXzU1MzBfQVVESU8gMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lSSVhfNTUzMF9WSURFTyAweDAxMDQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NPTlRBUSAweDEwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT05UQVFfODJDNjkzIDB4YzY5MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfT0xJQ09NIDB4MTA4ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX09MSUNPTV9PQzIzMjUgMHgwMDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT0xJQ09NX09DMjE4MyAweDAwMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PTElDT01fT0MyMzI2IDB4MDAxNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU1VOIDB4MTA4ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9FQlVTIDB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IQVBQWU1FQUwgMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1JJT19FQlVTIDB4MTEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9SSU9fR0VNIDB4MTEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9SSU9fMTM5NCAweDExMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUklPX1VTQiAweDExMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fR0VNIDB4MmJhZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9TSU1CQSAweDUwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fUEJNIDB4ODAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9TQ0hJWk8gMHg4MDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1VOX1NBQlJFIDB4YTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9IVU1NSU5HQklSRCAweGEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TVU5fVE9NQVRJTExPIDB4YTgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NVTl9DQVNTSU5JIDB4YWJiYQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ01EIDB4MTA5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRF82NDMgMHgwNjQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01EXzY0NiAweDA2NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTURfNjQ4IDB4MDY0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRF82NDkgMHgwNjQ5CisKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlfNjgwIDB4MDY4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSV8zMTEyIDB4MzExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSV8xMjEwU0EgMHgwMjQwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9CUk9PS1RSRUUgMHgxMDllCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQlJPT0tUUkVFXzg3OCAweDA4NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9CUk9PS1RSRUVfODc5IDB4MDg3OQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0dJIDB4MTBhOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHSV9JT0MzIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NHSV9JT0M0IDB4MTAwYQorI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NHSV9MSVRISVVNIDB4MTAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfV0lOQk9ORCAweDEwYWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EXzgyQzEwNSAweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9XSU5CT05EXzgzQzU1MyAweDA1NjUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BMWCAweDEwYjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUjY4NSAweDEwMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfUk9NVUxVUyAweDEwNmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfU1BDT004MDAgMHgxMDc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYXzEwNzcgMHgxMDc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1NQQ09NMjAwIDB4MTEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9ESklOTl9JVE9PIDB4MTE1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9SNzUzIDB4MTE1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BMWF9PTElURUMgMHgxMTg3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUExYX1BDSTIwMFNZTiAweDMxOTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA1MCAweDkwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfOTA4MCAweDkwODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QTFhfR1RFS19TRVJJQUwyIDB4YTAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFER0UgMHgxMGI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFER0VfTUsyIDB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0NPTSAweDEwYjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDOTg1IDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5NDAgMHgxNzAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQzMzOSAweDMzOTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDMzU5IDB4MzU5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0M5NDBCIDB4ODBlYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwIDB4OTkwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX1RYXzk1IDB4OTkwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwX1RYXzk3IDB4OTkwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwQiAweDk5MDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MF9GWCAweDk5MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zQ09NXzNDUjk5MFNWUjk1IDB4OTkwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNDT01fM0NSOTkwU1ZSOTcgMHg5OTA5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0NPTV8zQ1I5OTBTVlIgMHg5OTBhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTCAweDEwYjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTUzMyAweDE1MzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTUzNSAweDE1MzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTU0MSAweDE1NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTU2MyAweDE1NjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTYyMSAweDE2MjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTYzMSAweDE2MzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTYzMiAweDE2MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY0MSAweDE2NDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY0NCAweDE2NDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY0NyAweDE2NDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY1MSAweDE2NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY3MSAweDE2NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY4MSAweDE2ODEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY4MyAweDE2ODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NMTY4OSAweDE2ODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTIxOSAweDUyMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTIyOCAweDUyMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTIyOSAweDUyMjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNTQ1MSAweDU0NTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTF9NNzEwMSAweDcxMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX05FT01BR0lDIDB4MTBjOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FT01BR0lDX05NMjU2QVZfQVVESU8gMHg4MDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPTUFHSUNfTk0yNTZaWF9BVURJTyAweDgwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9NQUdJQ19OTTI1NlhMX1BMVVNfQVVESU8gMHg4MDE2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UQ09OUkFEIDB4MTBkYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RDT05SQURfVE9LRU5SSU5HIDB4MDUwOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTlZJRElBIDB4MTBkZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9UTlQgMHgwMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1ROVDIgMHgwMDI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1VUTlQyIDB4MDAyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9UTlRfVU5LTk9XTiAweDAwMmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfVlROVDIgMHgwMDJDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1VWVE5UMiAweDAwMkQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDA0X1NNQlVTIDB4MDAzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfSURFIDB4MDAzNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQMDRfU0FUQSAweDAwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEwIDB4MDAzNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTEgMHgwMDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1AwNF9TQVRBMiAweDAwM2UKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX1VMVFJBIDB4MDA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDAgMHgwMDQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjgwMF9MRSAweDAwNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX0dUIDB4MDA0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfNDAwMCAweDAwNEUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFNF9TTUJVUyAweDAwNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X0lERSAweDAwNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX0NLODA0X1NBVEEgMHgwMDU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9DSzgwNF9TQVRBMiAweDAwNTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzggMHgwMDU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF85IDB4MDA1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9DSzgwNF9BVURJTyAweDAwNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfQ0s4MDRfUENJRSAweDAwNWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMl9TTUJVUyAweDAwNjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMl9JREUgMHgwMDY1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yIDB4MDA2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX01PREVNIDB4MDA2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AyX0FVRElPIDB4MDA2YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyU19TTUJVUyAweDAwODQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFMlNfSURFIDB4MDA4NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfNCAweDAwODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTUNQMlNfTU9ERU0gMHgwMDg5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLOF9BVURJTyAweDAwOGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzUgMHgwMDhjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTJTX1NBVEEgMHgwMDhlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNzgwMF9HVCAweDAwOTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV83ODAwX0dUWCAweDAwOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT183ODAwIDB4MDA5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzc4MDBfR1RYIDB4MDA5OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9JVE5UMiAweDAwQTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9HRUZPUkNFXzY4MDBBIDB4MDBjMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfNjgwMEFfTEUgMHgwMGMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfR0VGT1JDRV9HT182ODAwIDB4MDBjOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0dFRk9SQ0VfR09fNjgwMF9VTFRSQSAweDAwYzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFEUk9fRlhfR08xNDAwIDB4MDBjYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1FVQURST19GWF8xNDAwIDB4MDBjZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzIDB4MDBkMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX1NNQlVTIDB4MDBkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzX0lERSAweDAwZDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzMgMHgwMGQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfTU9ERU0gMHgwMGQ5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDNfQVVESU8gMHgwMGRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF83IDB4MDBkZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UzUyAweDAwZTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU0FUQSAweDAwZTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFM1NfU01CVVMgMHgwMGU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX0lERSAweDAwZTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzYgMHgwMGU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0NLOFNfQVVESU8gMHgwMGVhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRTNTX1NBVEEyIDB4MDBlZQorI2RlZmluZSBQQ0lFX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwX0FMVDEgMHgwMGYwCisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY2MDBfQUxUMSAweDAwZjEKKyNkZWZpbmUgUENJRV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMF9BTFQyIDB4MDBmMgorI2RlZmluZSBQQ0lFX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82MjAwX0FMVDEgMHgwMGYzCisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY4MDBfR1QgMHgwMGY5CisjZGVmaW5lIFBDSUVfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fTlZTMjgwIDB4MDBmZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX1NEUiAweDAxMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9ERFIgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTyAweDAxMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfTVggMHgwMTEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX01YMiAweDAxMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR08gMHgwMTEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzJfTVhSIDB4MDExMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzY2MDBfR1QgMHgwMTQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfNjYwMCAweDAxNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82NjEwX1hMIDB4MDE0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfNTQwIDB4MDE0RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDAgMHgwMTRGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0UyX0dUUyAweDAxNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfR1RTMiAweDAxNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTJfVUxUUkEgMHgwMTUyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzJfUFJPIDB4MDE1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFXzYyMDBfVFVSQk9DQUNIRSAweDAxNjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9HT182MjAwIDB4MDE2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzYyNTAgMHgwMTY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfR09fNjIwMF8xIDB4MDE2NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0dPXzYyNTBfMSAweDAxNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDYwIDB4MDE3MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDAgMHgwMTcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQyMCAweDAxNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfTVhfNDQwX1NFIDB4MDE3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80NDBfR08gMHgwMTc0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQyMF9HTyAweDAxNzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDIwX0dPX00zMiAweDAxNzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDYwX0dPIDB4MDE3NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzUwMFhHTCAweDAxNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDQwX0dPX002NCAweDAxNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF8yMDAgMHgwMTdBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNTUwWEdMIDB4MDE3QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzUwMF9HT0dMIDB4MDE3QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF80MTBfR09fTTE2IDB4MDE3RAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80NDBfOFggMHgwMTgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQ0MFNFXzhYIDB4MDE4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9NWF80MjBfOFggMHgwMTgzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YXzQwMDAgMHgwMTg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQ0OF9HTyAweDAxODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfNDg4X0dPIDB4MDE4NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzU4MF9YR0wgMHgwMTg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0X01YX01BQyAweDAxODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF8yODBfTlZTIDB4MDE4QQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzM4MF9YR0wgMHgwMThCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0lHRUZPUkNFMiAweDAxYTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFIDB4MDFhNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9NQ1AxX0FVRElPIDB4MDFiMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfU01CVVMgMHgwMWI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9JREUgMHgwMWJjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX01DUDFfTU9ERU0gMHgwMWMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xIDB4MDFjMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0UyIDB4MDFlMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFMyAweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTNfMSAweDAyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTNfMiAweDAyMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0REQyAweDAyMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQiAweDAyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQl9MRSAweDAyMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV82ODAwQl9HVCAweDAyMTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDYwMCAweDAyNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDQwMCAweDAyNTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRTRfVElfNDIwMCAweDAyNTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF85MDBYR0wgMHgwMjU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfNzUwWEdMIDB4MDI1OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzcwMFhHTCAweDAyNUIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDUxX1NNQlVTIDB4MDI2NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfSURFIDB4MDI2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTFfU0FUQSAweDAyNjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDUxX1NBVEEyIDB4MDI2NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU01CVVMgMHgwMzY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9JREUgMHgwMzZFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A1NV9TQVRBIDB4MDM3RQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNTVfU0FUQTIgMHgwMzdGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xMiAweDAyNjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzEzIDB4MDI2OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80ODAwIDB4MDI4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80ODAwXzhYIDB4MDI4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFNF9USV80ODAwU0UgMHgwMjgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0U0XzQyMDBfR08gMHgwMjg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURSTzRfOTgwX1hHTCAweDAyODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPNF83ODBfWEdMIDB4MDI4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk80XzcwMF9HT0dMIDB4MDI4QworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU4MDBfVUxUUkEgMHgwMzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTgwMCAweDAzMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzIwMDAgMHgwMzA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF8xMDAwIDB4MDMwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU2MDBfVUxUUkEgMHgwMzExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTYwMCAweDAzMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NjAwU0UgMHgwMzE0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081NjAwIDB4MDMxQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTY1MCAweDAzMUIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYX0dPNzAwIDB4MDMxQworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzUyMDAgMHgwMzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMF9VTFRSQSAweDAzMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MjAwXzEgMHgwMzIyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTIwMFNFIDB4MDMyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTIwMCAweDAzMjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzUyNTAgMHgwMzI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTUwMCAweDAzMjYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81MTAwIDB4MDMyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTI1MF8zMiAweDAzMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HT181MjAwIDB4MDMyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fTlZTXzI4MF9QQ0kgMHgwMzJBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX1FVQURST19GWF81MDAgMHgwMzJCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfR081MzAwIDB4MDMyQworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYX0dPNTEwMCAweDAzMkQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81OTAwX1VMVFJBIDB4MDMzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU5MDAgMHgwMzMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTkwMFhUIDB4MDMzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU5NTBfVUxUUkEgMHgwMzMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTkwMFpUIDB4MDMzNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9RVUFEUk9fRlhfMzAwMCAweDAzMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzcwMCAweDAzM0YKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF81NzAwX1VMVFJBIDB4MDM0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU3MDAgMHgwMzQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX0dFRk9SQ0VfRlhfNTcwMExFIDB4MDM0MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9HRUZPUkNFX0ZYXzU3MDBWRSAweDAzNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMSAweDAzNDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfR0VGT1JDRV9GWF9HTzU3MDBfMiAweDAzNDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYX0dPMTAwMCAweDAzNEMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfUVVBRFJPX0ZYXzExMDAgMHgwMzRFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNCAweDAzNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE1IDB4MDM3MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMTYgMHgwM0U1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xNyAweDAzRTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDYxX1NBVEEgMHgwM0U3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9JREUgMHgwM0VDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8xOCAweDAzRUUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzE5IDB4MDNFRgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9ORk9SQ0VfTUNQNjFfU0FUQTIgMHgwM0Y2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05GT1JDRV9NQ1A2MV9TQVRBMyAweDAzRjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTkZPUkNFX01DUDY1X0lERSAweDA0NDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIwIDB4MDQ1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9OVkVORVRfMjEgMHgwNDUxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlZJRElBX05WRU5FVF8yMiAweDA0NTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OVklESUFfTlZFTkVUXzIzIDB4MDQ1MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU1TIDB4MTBlMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lNU19UVDEyOCAweDkxMjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTVNfVFQzRCAweDkxMzUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lOVEVSRyAweDEwZWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfMTY4MiAweDE2ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfMjAwMCAweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfMjAxMCAweDIwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfNTAwMCAweDUwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFUkdfNTA1MCAweDUwNTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1JFQUxURUsgMHgxMGVjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUkVBTFRFS184MTM5IDB4ODEzOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElMSU5YIDB4MTBlZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTYgMHgzZmMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84IDB4M2ZjMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JNRV9ESUdJOTZfOF9QUk8gMHgzZmMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0k5Nl84X1BBRF9PUl9QU1QgMHgzZmMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElMSU5YX0hBTU1FUkZBTExfRFNQIDB4M2ZjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJTElOWF9IQU1NRVJGQUxMX0RTUF9NQURJIDB4M2ZjNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5JVCAweDExMDEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NSRUFUSVZFIDB4MTEwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1JFQVRJVkVfRU1VMTBLMSAweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VDVElWQSAweDExMDIgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VDVElWQV9FVjE5MzggMHg4OTM4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UVEkgMHgxMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM0MyAweDAwMDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzY2IDB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzIgMHgwMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDMwMiAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UVElfSFBUMzcxIDB4MDAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUSV9IUFQzNzQgMHgwMDA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVFRJX0hQVDM3Mk4gMHgwMDA5ICAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1ZJQSAweDExMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODc2M18wIDB4MDE5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzgwXzAgMHgwMjA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyMzhfMCAweDAyMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfUFQ4ODAgMHgwMjU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BUODgwVUxUUkEgMHgwMzA4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBX1BYOFgwXzAgMHgwMjU5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyNjlfMCAweDAyNjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfSzhUODAwUFJPXzAgMHgwMjgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzMyOTZfMCAweDAyOTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2M18wIDB4MDMwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9QNE04MDBDRSAweDAzMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3MV8wIDB4MDM5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NTAxXzAgMHgwNTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU2MSAweDA1NjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzEgMHgwNTcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU3NiAweDA1NzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfU0FUQV9FSURFIDB4MDU4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1ODZfMCAweDA1ODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2IDB4MDU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTdfMCAweDA1OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk4XzAgMHgwNTk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg2MDFfMCAweDA2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYwNV8wIDB4MDYwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODYgMHgwNjg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzY5MV8wIDB4MDY5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1NzZfMSAweDE1NzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTg2XzIgMHgzMDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyQzU4Nl8zIDB4MzA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OTZfMyAweDMwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNTk2Ql8zIDB4MzA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM2ODZfNCAweDMwNTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODJDNjg2XzUgMHgzMDU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNfNSAweDMwNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzM18wIDB4MzA3NAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjMzXzAgMHgzMDkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzNjdfMCAweDMwOTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODY1M18wIDB4MzEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NjIyIDB4MzEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjM1X1VTQl8yIDB4MzEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MjMzQ18wIDB4MzEwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MzYxIDB4MzExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9YTTI2NiAweDMxMTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfNjEyWCAweDMxMTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODYyWF8wIDB4MzEyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzUzXzAgMHgzMTI4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzNBIDB4MzE0NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84NzAzXzUxXzAgMHgzMTQ4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzdfU0FUQSAweDMxNDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfWE4yNjYgMHgzMTU2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzY0MTAgMHgzMTY0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3NTRDXzAgMHgzMTY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzUgMHgzMTc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgzODVfMCAweDMxODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3N18wIDB4MzE4OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84Mzc4XzAgMHgzMjA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzg3ODNfMCAweDMyMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzNyAweDMyMjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODI1MSAweDMyODcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODIzN0EgMHgzMzM3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzEgMHg4MjMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVklBXzgyMzFfNCAweDgyMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM2NV8xIDB4ODMwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV9DWDcwMCAweDgzMjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM3MV8xIDB4ODM5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84MkM1OThfMSAweDg1OTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WSUFfODM4WF8xIDB4QjE4OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJQV84M184N1hYXzEgMHhCMTk4CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSUVNRU5TIDB4MTEwQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJRU1FTlNfRFNDQzQgMHgyMTAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WT1JURVggMHgxMTE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDYweDAgMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDYwMDBCIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDEwIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDIwIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTMwIDB4MDAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTUwIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDE3IDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDI3IDB4MDAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTM3IDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU3IDB4MDAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDE1IDB4MDAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDI1IDB4MDAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTM1IDB4MDAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU1IDB4MDAwZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2eDE3UlAgMHgwMTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MjdSUCAweDAxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNjUzN1JQIDB4MDEwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZPUlRFWF9HRFQ2NTU3UlAgMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVk9SVEVYX0dEVDZ4MTFSUCAweDAxMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WT1JURVhfR0RUNngyMVJQIDB4MDEwNQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUYgMHgxMTFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0ZQR0EgMHgwMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZfQVRNX0FTSUMgMHgwMDAyCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRUZfQVRNX0xBTkFJMiAweDAwMDMKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FRl9BVE1fTEFOQUlIQiAweDAwMDUKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lEVCAweDExMWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JRFRfSURUNzcyMDEgMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GT1JFIDB4MTEyNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0ZPUkVfUENBMjAwRSAweDAzMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BISUxJUFMgMHgxMTMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTQ2IDB4NzE0NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBOTczMCAweDk3MzAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VJQ09OIDB4MTEzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMCAweGUwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjBfVSAweGUwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9ESVZBMjAxIDB4ZTAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX0RJVkEyMDIgMHhlMDBiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUlDT05fTUFFU1RSQSAweGUwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUSAweGUwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FSUNPTl9NQUVTVFJBUV9VIDB4ZTAxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VJQ09OX01BRVNUUkFQIDB4ZTAxNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWklBVEVDSCAweDExMzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9aSUFURUNIXzU1NTBfSEMgMHg1NTUwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TWVNLT05ORUNUIDB4MTE0OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfVFIgMHg0MjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1lTS09OTkVDVF9HRSAweDQzMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUX1lVIDB4NDMyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZU0tPTk5FQ1RfOURYWCAweDQ0MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TWVNLT05ORUNUXzlNWFggMHg0NTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ESUdJIDB4MTE0ZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RJR0lfREZfTV9JT00yX0UgMHgwMDcwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0UgMHgwMDcxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRElHSV9ERl9NX0lPTTJfQSAweDAwNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ESUdJX0RGX01fQSAweDAwNzMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMkRCOSAweDAwQzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMkRCOVBSSSAweDAwQzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9ORU9fMlJKNDUgMHgwMENBCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVPXzJSSjQ1UFJJIDB4MDBDQgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWElSQ09NIDB4MTE1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1hJUkNPTV9SQk01NkcgMHgwMTAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWElSQ09NX1gzMjAxX01ETSAweDAxMDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NFUlZFUldPUktTIDB4MTE2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hFIDB4MDAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0xFIDB4MDAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0dDTkJfTEUgMHgwMDE3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfRVBCIDB4MDEwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjQgMHgwMjAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNSAweDAyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2IDB4MDIwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMFNCIDB4MDIwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX09TQjRJREUgMHgwMjExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VSVkVSV09SS1NfQ1NCNUlERSAweDAyMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFIDB4MDIxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFUlZFUldPUktTX0hUMTAwMElERSAweDAyMTQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2SURFMiAweDAyMTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRVJWRVJXT1JLU19DU0I2TFBDIDB4MDIyNworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0JFIDB4MTE3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NCRV9XQU5YTDEwMCAweDAzMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQkVfV0FOWEwyMDAgMHgwMzAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0JFX1dBTlhMNDAwIDB4MDEwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9TSElCQSAweDExNzkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1BJQ0NPTE8gMHgwMTAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9QSUNDT0xPXzEgMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9QSUNDT0xPXzIgMHgwMTA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9TSElCQV9UT1BJQzk1IDB4MDYwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVE9QSUM5NyAweDA2MGYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1RPUElDMTAwIDB4MDYxNworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9TSElCQV8yIDB4MTAyZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEMzNTgxNUNGIDB4MDAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RPU0hJQkFfVEM4NkMwMDFfTUlTQyAweDAxMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9UT1NISUJBX1NQSURFUl9ORVQgMHgwMWIzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SSUNPSCAweDExODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDY1IDB4MDQ2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NjYgMHgwNDY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUkw1QzQ3NSAweDA0NzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SSUNPSF9STDVDNDc2IDB4MDQ3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JJQ09IX1JMNUM0NzggMHgwNDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUklDT0hfUjVDODIyIDB4MDgyMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRExJTksgMHgxMTg2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRExJTktfREdFNTEwVCAweDRjMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FSVE9QIDB4MTE5MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg1MFVGIDB4MDAwNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2MCAweDAwMDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjBSIDB4MDAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FUUDg2NSAweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUlRPUF9BVFA4NjVSIDB4MDAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTAgMHg4MDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfQUVDNzYxMlVXIDB4ODAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTJVIDB4ODAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTJTIDB4ODAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTJEIDB4ODA0MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FSVE9QX0FFQzc2MTJTVVcgMHg4MDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVJUT1BfODA2MCAweDgwNjAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1pFSVRORVQgMHgxMTkzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWkVJVE5FVF8xMjIxIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pFSVRORVRfMTIyNSAweDAwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZVSklUU1VfTUUgMHgxMTllCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRlVKSVRTVV9GUzE1NSAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9GVUpJVFNVX0ZTNTAgMHgwMDAzCisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9LRVlTUEFOIDB4MTFhOQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0tFWVNQQU5fU1gyIDB4NTMzNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTUFSVkVMTCAweDExYWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX0dUNjQxMTEgMHg0MTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDY0MjYwIDB4NjQzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfTVY2NDM2MCAweDY0NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NQVJWRUxMX01WNjQ0NjAgMHg2NDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUFSVkVMTF9HVDk2MTAwIDB4OTY1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01BUlZFTExfR1Q5NjEwMEEgMHg5NjUzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WMyAweDExYjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WM19WOTYwIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1YzX1YzNTEgMHgwMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVFQgMHgxMWMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVRUX1ZFTlVTX01PREVNIDB4NDgwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TUEVDSUFMSVggMHgxMWNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU1BFQ0lBTElYX0lPOCAweDIwMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TUEVDSUFMSVhfUklPIDB4ODAwMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX1NQRUNJQUxJWF9TUEVFRDQgMHhhMDA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTkFMT0dfREVWSUNFUyAweDExZDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRDE4ODlKUyAweDE4ODkKKworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NFR0FfQkJBIDB4MTIzNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfWk9SQU4gMHgxMWRlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYwNTcgMHg2MDU3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfWk9SQU5fMzYxMjAgMHg2MTIwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9DT01QRVggMHgxMWY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ09NUEVYX0VORVQxMDBWRzQgMHgwMTEyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9SUCAweDExZmUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDMySU5URiAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhJTlRGIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMTZJTlRGIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQNFFVQUQgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA4T0NUQSAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDhKIDB4MDAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQNEogMHgwMDA3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA4U05JIDB4MDAwOCAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDE2U05JIDB4MDAwOSAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUFA0IDB4MDAwQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQUDggMHgwMDBCCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUlA0TSAweDAwMEQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SUDJfMjMyIDB4MDAwRQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JQMl80MjIgMHgwMDBGCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVJQMzJJTlRGIDB4MDgwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VSUDhJTlRGIDB4MDgwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1VSUDE2SU5URiAweDA4MDMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUlA4T0NUQSAweDA4MDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9VUENJX1JNM184UE9SVCAweDA4MEMgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVVBDSV9STTNfNFBPUlQgMHgwODBECisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1JQMTZJTlRGIDB4MDkwMyAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NZQ0xBREVTIDB4MTIwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0xvIDB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV9ZX0hpIDB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV80WV9MbyAweDAxMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fNFlfSGkgMHgwMTAzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ1lDTE9NXzhZX0xvIDB4MDEwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NZQ0xPTV84WV9IaSAweDAxMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fWl9MbyAweDAyMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DWUNMT01fWl9IaSAweDAyMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9SWF8yIDB4MDMwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1JYXzEgMHgwMzAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUEMzMDBfVEVfMiAweDAzMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9URV8xIDB4MDMxMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BDMzAwX1RFX01fMiAweDAzMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9QQzMwMF9URV9NXzEgMHgwMzIxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FU1NFTlRJQUwgMHgxMjBmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTRU5USUFMX1JPQURSVU5ORVIgMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PMiAweDEyMTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PMl82NzI5IDB4NjcyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX08yXzY3MzAgMHg2NzNhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTzJfNjgzMiAweDY4MzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PMl82ODM2IDB4NjgzNgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfM0RGWCAweDEyMWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTyAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzIgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM0RGWF9CQU5TSEVFIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNERlhfVk9PRE9PMyAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zREZYX1ZPT0RPTzUgMHgwMDA5CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BVk0gMHgxMjQ0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0IxIDB4MDcwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9DNCAweDA4MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fQTEgMHgwYTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVZNX0ExX1YyIDB4MGUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FWTV9DMiAweDExMDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVk1fVDEgMHgxMjAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TVEFMTElPTiAweDEyNGQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0FUIDB4MTI1OQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FUXzI3MDBGWCAweDI3MDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9BVF8yNzAxRlggMHgyNzAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FU1MgMHgxMjVkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NjggMHgxOTY4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NzggMHgxOTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0FMTEVHUk9fMSAweDE5ODgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQUxMRUdSTyAweDE5ODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfQ0FOWU9OM0RfMkxFIDB4MTk5MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19DQU5ZT04zRF8yIDB4MTk5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VTU19NQUVTVFJPMyAweDE5OTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfMSAweDE5OTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FU1NfTUFFU1RSTzNfSFcgMHgxOTlhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX01BRVNUUk8zXzIgMHgxOTliCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TQVRTQUdFTSAweDEyNjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQVRTQUdFTV9OSUNDWSAweDEwMTYKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VOU09OSVEgMHgxMjc0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9DVDU4ODAgMHg1ODgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzAgMHg1MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5TT05JUV9FUzEzNzEgMHgxMzcxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UUkFOU01FVEEgMHgxMjc5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRUZGSUNFT04gMHgwMDYwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ST0NLV0VMTCAweDEyN0EKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lURSAweDEyODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfSVQ4MTcyRyAweDgxNzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfSVQ4MTcyR19BVURJTyAweDA4MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfODIxMSAweDgyMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfODIxMiAweDgyMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfODg3MiAweDg4NzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JVEVfSVQ4MzMwR18wIDB4ZTg4NgorCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzAxMDAgMHgwMTAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTFRFT04gMHgxMmFlCisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9DT05ORUNUX1RFQ0ggMHgxMmM0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIOF8yMzIgMHgwMDAxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JINF8yMzIgMHgwMDAyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMl8yMzIgMHgwMDAzCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIOF80ODUgMHgwMDA0CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIOF80ODVfNF80IDB4MDAwNQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDRfNDg1IDB4MDAwNgorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9CSDRfNDg1XzJfMiAweDAwMDcKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyXzQ4NSAweDAwMDgKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkg4XzQ4NV8yXzYgMHgwMDA5CisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDgxMTAxVjEgMHgwMDBBCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMDQxMTAxVjEgMHgwMDBCCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX0JIMl8yME1IWiAweDAwMEMKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfQkgyX1BUTSAweDAwMEQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfTlQ5NjBQQ0kgMHgwMTAwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1RJVEFOXzIgMHgwMjAxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1RJVEFOXzQgMHgwMjAyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzJfMjMyIDB4MDMwMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF80XzIzMiAweDAzMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfOF8yMzIgMHgwMzAyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzFfMSAweDAzMTAKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfMl8yIDB4MDMxMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF80XzQgMHgwMzEyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzIgMHgwMzIwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzQgMHgwMzIxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzggMHgwMzIyCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09OTkVDVF9URUNIX1BDSV9VQVJUXzJfNDg1IDB4MDMzMAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTk5FQ1RfVEVDSF9QQ0lfVUFSVF80XzQ4NSAweDAzMzEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT05ORUNUX1RFQ0hfUENJX1VBUlRfOF80ODUgMHgwMzMyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9OVklESUFfU0dTIDB4MTJkMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05WSURJQV9TR1NfUklWQTEyOCAweDAwMTgKKworI2RlZmluZSBQQ0lfU1VCVkVORE9SX0lEX0NIQVNFX1BDSUZBU1QgMHgxMkUwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDQgMHgwMDMxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDggMHgwMDIxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJRkFTVDE2IDB4MDAxMQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NIQVNFX1BDSUZBU1QxNkZNQyAweDAwNDEKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9DSEFTRV9QQ0lSQVMgMHgxMjRECisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ0hBU0VfUENJUkFTNCAweEYwMDEKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DSEFTRV9QQ0lSQVM4IDB4RjAxMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQVVSRUFMIDB4MTJlYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FVUkVBTF9WT1JURVhfMSAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BVVJFQUxfVk9SVEVYXzIgMHgwMDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQVVSRUFMX0FEVkFOVEFHRSAweDAwMDMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0VMRUNUUk9OSUNERVNJR05HTUJIIDB4MTJmOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNTF8zM1IxMCAweDhhMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1NJSUcgMHgxMzFmCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfU0lJRyAweDEzMWYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzEweF81NTAgMHgxMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18xMHhfNjUwIDB4MTAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMTB4Xzg1MCAweDEwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMTB4XzU1MCAweDEwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMTB4XzY1MCAweDEwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMTB4Xzg1MCAweDEwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFQXzEweCAweDEwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQXzEweCAweDEwMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzEweF81NTAgMHgxMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18xMHhfNjUwIDB4MTAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMTB4Xzg1MCAweDEwMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMTB4XzU1MCAweDEwMzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMTB4XzY1MCAweDEwMzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMTB4Xzg1MCAweDEwMzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzEweF81NTAgMHgxMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18xMHhfNjUwIDB4MTA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMTB4Xzg1MCAweDEwNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTXzIweF81NTAgMHgyMDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18xU18yMHhfNjUwIDB4MjAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMVNfMjB4Xzg1MCAweDIwMDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFQXzIweCAweDIwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQXzIweCAweDIwMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTXzIweF81NTAgMHgyMDMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR18yU18yMHhfNjUwIDB4MjAzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfMlNfMjB4Xzg1MCAweDIwMzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQMVNfMjB4XzU1MCAweDIwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQMVNfMjB4XzY1MCAweDIwNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJQMVNfMjB4Xzg1MCAweDIwNDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMjB4XzU1MCAweDIwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMjB4XzY1MCAweDIwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzFTMVBfMjB4Xzg1MCAweDIwMTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzRTXzIweF81NTAgMHgyMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR180U18yMHhfNjUwIDB4MjA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfNFNfMjB4Xzg1MCAweDIwNTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4XzU1MCAweDIwNjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4XzY1MCAweDIwNjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzJTMVBfMjB4Xzg1MCAweDIwNjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TSUlHXzhTXzIweF81NTAgMHgyMDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0lJR184U18yMHhfNjUwIDB4MjA4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJSUdfOFNfMjB4Xzg1MCAweDIwODIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9TSUlHX1FVQVJURVRfU0VSSUFMIDB4MjA1MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUkFESVNZUyAweDEzMzEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RPTUVYIDB4MTM0YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RPTUVYX0RNWDMxOTFEIDB4MDAwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSU5UQVNISUVMRCAweDEzNWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRBU0hJRUxEX0lTMjAwIDB4MGQ4MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfUVVBVEVDSCAweDEzNUMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX1FTQzEwMCAweDAwMTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX0RTQzEwMCAweDAwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9RVUFURUNIX0VTQzEwMEQgMHgwMDUwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUVVBVEVDSF9FU0MxMDBNIDB4MDA2MAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0VBTEVWRUwgMHgxMzVlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVTUzMCAweDcxMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TRUFMRVZFTF9VQ09NTTIgMHg3MjAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVUNPTU00MjIgMHg3NDAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVUNPTU0yMzIgMHg3MjAyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfQ09NTTQgMHg3NDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfQ09NTTggMHg3ODAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfU0VBTEVWRUxfVUNPTU04IDB4NzgwNAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfSFlQRVJDT1BFIDB4MTM2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0hZUEVSQ09QRV9QTFggMHg5MDUwCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfSFlQRVJDT1BFX09MRF9FUkdPIDB4MDEwNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0hZUEVSQ09QRV9FUkdPIDB4MDEwNgorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0hZUEVSQ09QRV9NRVRSTyAweDAxMDcKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9IWVBFUkNPUEVfQ0hBTVAyIDB4MDEwOAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfS0FXQVNBS0kgMHgxMzZiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUNISVBfS0w1QTcyMDAyIDB4ZmYwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ05FVCAweDEzNzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DTkVUX0dJR0FDQVJEIDB4NDM0ZQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTE1DIDB4MTM3NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19IU1NJIDB4MDAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xNQ19EUzMgMHgwMDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTE1DX1NTSSAweDAwMDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MTUNfVDEgMHgwMDA2CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRHRUFSIDB4MTM4NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX05FVEdFQVJfR0E2MjAgMHg2MjBhCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BUFBMSUNPTSAweDEzODkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BUFBMSUNPTV9QQ0lHRU5FUklDIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExJQ09NX1BDSTIwMDBJQlNfQ0FOIDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FQUExJQ09NX1BDSTIwMDBQRkIgMHgwMDAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NT1hBIDB4MTM5MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfUkM3MDAwIDB4MDAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDIgMHgxMDIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEwMlVMIDB4MTAyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMDJVIDB4MTAyMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQzEwNCAweDEwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTA0VSAweDEwNDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTA0SlUgMHgxMDQyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DVDExNCAweDExNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NT1hBX0NQMTE0IDB4MTE0MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMThVIDB4MTE4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxMzIgMHgxMzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzMlUgMHgxMzIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DUDEzNFUgMHgxMzQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTU9YQV9DMTY4IDB4MTY4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01PWEFfQ1AxNjhVIDB4MTY4MQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ0NEIDB4MTM5NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF8yQkQwIDB4MmJkMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDAwIDB4YjAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA2IDB4YjAwNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA3IDB4YjAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA4IDB4YjAwOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDA5IDB4YjAwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBBIDB4YjAwYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBCIDB4YjAwYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMDBDIDB4YjAwYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CMTAwIDB4YjEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CNzAwIDB4YjcwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NDRF9CNzAxIDB4YjcwMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfRVhBUiAweDEzYTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FWEFSX1hSMTdDMTUyIDB4MDE1MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VYQVJfWFIxN0MxNTQgMHgwMTU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRVhBUl9YUjE3QzE1OCAweDAxNTgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01JQ1JPR0FURSAweDEzYzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NSUNST0dBVEVfVVNDIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01JQ1JPR0FURV9TQ0EgMHgwMDMwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF8zV0FSRSAweDEzQzEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zV0FSRV8xMDAwIDB4MTAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNXQVJFXzcwMDAgMHgxMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfM1dBUkVfOTAwMCAweDEwMDIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lPTUVHQSAweDEzY2EKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JT01FR0FfQlVaIDB4NDIzMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUJPQ09NIDB4MTNEMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FCT0NPTV8yQkQxIDB4MkJEMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ01FRElBIDB4MTNmNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhBIDB4MDEwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTgzMzhCIDB4MDEwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NNRURJQV9DTTg3MzggMHgwMTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQ01FRElBX0NNODczOEIgMHgwMTEyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9MQVZBIDB4MTQwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFNFUklBTCAweDAxMDAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUVVBVFJPX0EgMHgwMTAxICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQVRST19CIDB4MDEwMiAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9PQ1RPX0EgMHgwMTgwICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX09DVE9fQiAweDAxODEgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF9QTFVTIDB4MDIwMCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTEFWQV9RVUFEX0EgMHgwMjAxICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1FVQURfQiAweDAyMDIgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfU1NFUklBTCAweDA1MDAgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfUE9SVF82NTAgMHgwNjAwICAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9MQVZBX1BBUkFMTEVMIDB4ODAwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFVBTF9QQVJfQSAweDgwMDIgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfRFVBTF9QQVJfQiAweDgwMDMgIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0xBVkFfQk9DQV9JT1BQQVIgMHg4ODAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USU1FRElBIDB4MTQwOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJTUVESUFfMTg4OSAweDcxNjgKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0lDRSAweDE0MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JQ0VfMTcxMiAweDE3MTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9WVDE3MjQgMHgxNzI0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9PWFNFTUkgMHgxNDE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzEyUENJODQwIDB4ODQwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX09YU0VNSV8xNlBDSTk1NCAweDk1MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9PWFNFTUlfMTZQQ0k5NU4gMHg5NTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTU0UFAgMHg5NTEzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfT1hTRU1JXzE2UENJOTUyIDB4OTUyMQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0FNU1VORyAweDE0NGQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX01ZUklDT00gMHgxNGMxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USVRBTiAweDE0RDIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8wMTBMIDB4ODAwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzEwMEwgMHg4MDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fMTEwTCAweDgwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMDBMIDB4ODAyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzIxMEwgMHg4MDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fNDAwTCAweDgwNDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl84MDBMIDB4ODA4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzEwMCAweEEwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USVRBTl8yMDAgMHhBMDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElUQU5fNDAwIDB4QTAwMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJVEFOXzgwMEIgMHhBMDA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9QQU5BQ09NIDB4MTRkNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BBTkFDT01fUVVBRE1PREVNIDB4MDQwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1BBTkFDT01fRFVBTE1PREVNIDB4MDQwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUZBVkxBQiAweDE0ZGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BRkFWTEFCX1AwMjggMHgyMTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUZBVkxBQl9QMDMwIDB4MjE4MgorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0FGQVZMQUJfUDA2MSAweDIxNTAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0JST0FEQ09NIDB4MTRlNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUyIDB4MTYwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUyTSAweDE2MDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMCAweDE2NDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMSAweDE2NDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMiAweDE2NDYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMyAweDE2NDcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNCAweDE2NDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwNFNfMiAweDE2NDkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwNiAweDE2NGEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwOCAweDE2NGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMkZFIDB4MTY0ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1IDB4MTY1MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1XzIgMHgxNjU0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MjAgMHgxNjU4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MjEgMHgxNjU5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVNIDB4MTY1ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA1TV8yIDB4MTY1ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE0IDB4MTY2OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzE0UyAweDE2NjkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MCAweDE2NmEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MFMgMHgxNjZiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDVGIDB4MTY2ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0TSAweDE2NzIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1NU0gMHgxNjczCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTAgMHgxNjc2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTEgMHgxNjc3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTUgMHgxNjc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MTVTIDB4MTY3OQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU0IDB4MTY3YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzU1IDB4MTY3YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzUwTSAweDE2N2MKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MU0gMHgxNjdkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTFGIDB4MTY3ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181Nzg3TSAweDE2OTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MiAweDE2OTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4NiAweDE2OWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4NyAweDE2OWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4OCAweDE2OWMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4OSAweDE2OWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTcwMlggMHgxNmE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDNYIDB4MTZhNworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzA0UyAweDE2YTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9OWDJfNTcwNlMgMHgxNmFhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTlgyXzU3MDhTIDB4MTZhYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181NzAyQTMgMHgxNmM2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3MDNBMyAweDE2YzcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc4MSAweDE2ZGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1MyAweDE2ZjcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTc1M00gMHgxNmZkCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHT04zXzU3NTNGIDB4MTZmZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RJR09OM181OTAxIDB4MTcwZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTQ0MDFCMSAweDE3MGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdPTjNfNTkwMV8yIDB4MTcwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTQ0MDEgMHg0NDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQkNNNDQwMUIwIDB4NDQwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVE9QSUMgMHgxNTFmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVE9QSUNfVFA1NjAgMHgwMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9FTkUgMHgxNTI0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzEyMTEgMHgxMjExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzEyMjUgMHgxMjI1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzE0MTAgMHgxNDEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzcxMCAweDE0MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9FTkVfNzEyIDB4MTQxMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV8xNDIwIDB4MTQyMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0VORV83MjAgMHgxNDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRU5FXzcyMiAweDE0MjIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0NIRUxTSU8gMHgxNDI1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TWUJBIDB4MTU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMlBfRVBQIDB4MDc4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NZQkFfMVBfRUNQIDB4MDc4MworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfTU9SRVRPTiAweDE1YWEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9SQVNURUxfMlBPUlQgMHgyMDAwCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9aT0xUUklYIDB4MTViMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1pPTFRSSVhfMkJEMCAweDJiZDAgCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9NRUxMQU5PWCAweDE1YjMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUiAweDVhNDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9UQVZPUl9CUklER0UgMHg1YTQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTUVMTEFOT1hfQVJCRUxfQ09NUEFUIDB4NjI3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX0FSQkVMIDB4NjI4MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01FTExBTk9YX1NJTkFJX09MRCAweDVlOGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NRUxMQU5PWF9TSU5BSSAweDYyNzQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1BEQyAweDE1ZTkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0ZBUlNJVEUgMHgxNjE5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9UMlAgMHgwNDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9UNFAgMHgwNDQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9UMVUgMHgwNjEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9UMlUgMHgwNjIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9UNFUgMHgwNjQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9URTEgMHgxNjEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRkFSU0lURV9URTFDIDB4MTYxMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0lCWVRFIDB4MTY2ZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0JDTTEyNTBfSFQgMHgwMDAyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRDRUxMIDB4MTY5YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1JFVk9MVVRJT04gMHgwMDQ0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9WSVRFU1NFIDB4MTcyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1ZJVEVTU0VfVlNDNzE3NCAweDcxNzQKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0xJTktTWVMgMHgxNzM3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTElOS1NZU19FRzEwNjQgMHgxMDY0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9BTFRJTUEgMHgxNzNiCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMCAweDAzZTgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BTFRJTUFfQUMxMDAxIDB4MDNlOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FMVElNQV9BQzkxMDAgMHgwM2VhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQUxUSU1BX0FDMTAwMyAweDAzZWIKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1MySU8gMHgxN2Q1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzJJT19XSU4gMHg1NzMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzJJT19VTkkgMHg1ODMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVSQ19XSU4gMHg1NzMyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSEVSQ19VTkkgMHg1ODMyCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9TSVRFQ09NIDB4MTgyZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1NJVEVDT01fREMxMDVWMiAweDMwNjkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1RPUFNQSU4gMHgxODY3CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9UREkgMHgxOTJFCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgMHgwMTAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9KTUlDUk9OIDB4MTk3QgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYwIDB4MjM2MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYxIDB4MjM2MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzYzIDB4MjM2MworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY1IDB4MjM2NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY2IDB4MjM2NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0pNSUNST05fSk1CMzY4IDB4MjM2OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVEVLUkFNIDB4MWRlMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RFS1JBTV9EQzI5MCAweGRjMjkKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0hJTlQgMHgzMzg4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSElOVF9WWFBST0lJX0lERSAweDgwMTMKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEXzNETEFCUyAweDNkM2QKKyNkZWZpbmUgUENJX0RFVklDRV9JRF8zRExBQlNfUEVSTUVESUEyIDB4MDAwNworI2RlZmluZSBQQ0lfREVWSUNFX0lEXzNETEFCU19QRVJNRURJQTJWIDB4MDAwOQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQUtTIDB4NDE2YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FLU19BTEFERElOQ0FSRCAweDAxMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1MzIDB4NTMzMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1RSSU8gMHg4ODExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfODY4IDB4ODg4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzXzk2OCAweDg4ZjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TM19TQVZBR0U0IDB4OGEyNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX1MzX1BST1NBVkFHRTggMHg4ZDA0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUzNfU09OSUNWSUJFUyAweGNhMDAKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX0RVTk9SRCAweDU1NDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EVU5PUkRfSTMwMDAgMHgwMDAxCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9EQ0kgMHg2NjY2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfRENJX1BDQ09NNCAweDAwMDEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9EQ0lfUENDT004IDB4MDAwMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0RDSV9QQ0NPTTIgMHgwMDA0CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9JTlRFTCAweDgwODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FRVNTQyAweDAwMDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9QWEhEXzAgMHgwMzIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfUFhIRF8xIDB4MDMyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSF8wIDB4MDMyOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSF8xIDB4MDMyQQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1BYSFYgMHgwMzJDCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzUgMHgwNDgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0MjQgMHgwNDgzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzggMHgwNDg0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSTk2MCAweDA5NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JOTYwUk0gMHgwOTYyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfTUMgMHgxMTMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTVfQ0dDIDB4MTEzMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMDkyQUFfMCAweDEyMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF83NTA1XzAgMHgyNTUwIAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzcyMDVfMCAweDI1NWQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzNyAweDEyMmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MUZCXzAgMHgxMjJlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFGQl8xIDB4MTIzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxTVggMHgxMjM0CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDEgMHgxMjM3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzODBGQiAweDEyNGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzOSAweDEyNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MDk2MF9SUCAweDE5NjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0MF9IQiAweDFhMjEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NV9IQiAweDFhMzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JT0FUIDB4MWEzOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfMCAweDI0MTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzEgMHgyNDExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV8zIDB4MjQxMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUFfNSAweDI0MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFBXzYgMHgyNDE2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQV84IDB4MjQxOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfMCAweDI0MjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzEgMHgyNDIxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl8zIDB4MjQyMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQUJfNSAweDI0MjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUFCXzYgMHgyNDI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFBQl84IDB4MjQyOAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMCAweDI0NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzIgMHgyNDQzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV80IDB4MjQ0NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfNiAweDI0NDgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUJBXzggMHgyNDRhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV85IDB4MjQ0YgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQkFfMTAgMHgyNDRjCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFCQV8xMSAweDI0NGUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMCAweDI0NTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVfMTEgMHgyNDViCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8wIDB4MjQ4MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMyAweDI0ODMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzUgMHgyNDg1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV82IDB4MjQ4NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxQ0FfMTAgMHgyNDhhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFDQV8xMSAweDI0OGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUNBXzEyIDB4MjQ4YworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMCAweDI0YzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEgMHgyNGMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8zIDB4MjRjMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfNSAweDI0YzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzYgMHgyNGM2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl85IDB4MjRjOQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxREJfMTAgMHgyNGNhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFEQl8xMSAweDI0Y2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMURCXzEyIDB4MjRjYworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfMCAweDI0ZDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzEgMHgyNGQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8zIDB4MjRkMworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODAxRUJfNSAweDI0ZDUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzYgMHgyNGQ2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MDFFQl8xMSAweDI0ZGIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgwMUVCXzEzIDB4MjRkZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl8xIDB4MjVhMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl8yIDB4MjVhMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl80IDB4MjVhNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl81IDB4MjVhNgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQl85IDB4MjVhYgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODIwX0hCIDB4MjUwMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODIwX1VQX0hCIDB4MjUwMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODUwX0hCIDB4MjUzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODYwX0hCIDB4MjUzMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTAxX01DSCAweDI1NGMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjg0NUdfSEIgMHgyNTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NDVHX0lHIDB4MjU2MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODY1X0hCIDB4MjU3MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODY1X0lHIDB4MjU3MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODc1X0hCIDB4MjU3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTE1R19IQiAweDI1ODAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdfSUcgMHgyNTgyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5MTVHTV9IQiAweDI1OTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjkxNUdNX0lHIDB4MjU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyOTQ1R19IQiAweDI3NzAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdfSUcgMHgyNzcyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI5NDVHTV9IQiAweDI3QTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84Mjk0NUdNX0lHIDB4MjdBMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMCAweDI2NDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzEgMHgyNjQxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8yIDB4MjY0MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTYgMHgyNjZhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNINl8xNyAweDI2NmQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g2XzE4IDB4MjY2ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDZfMTkgMHgyNjZmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8wIDB4MjY3MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0VTQjJfMTQgMHgyNjk4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRVNCMl8xNyAweDI2OWIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FU0IyXzE4IDB4MjY5ZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMCAweDI3YjgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzEgMHgyN2I5CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18zMCAweDI3YjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzMxIDB4MjdiZAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMTcgMHgyN2RhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIN18xOSAweDI3ZGQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g3XzIwIDB4MjdkZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDdfMjEgMHgyN2RmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8wIDB4MjgxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfMSAweDI4MTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzIgMHgyODEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF8zIDB4MjgxNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lDSDhfNCAweDI4MTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JQ0g4XzUgMHgyODNlCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfSUNIOF82IDB4Mjg1MAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1UE1fSEIgMHgzMzQwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfSEIgMHgzNTc1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MzBfQ0dDIDB4MzU3NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODU1R01fSEIgMHgzNTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4NTVHTV9JRyAweDM1ODIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9FNzUyMF9NQ0ggMHgzNTkwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfRTczMjBfTUNIIDB4MzU5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQSAweDM1OTUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEExIDB4MzU5NgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQiAweDM1OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEIxIDB4MzU5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX01DSF9QQyAweDM1OTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9NQ0hfUEMxIDB4MzU5YQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0U3NTI1X01DSCAweDM1OWUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MVNCXzAgMHg3MDAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFTQl8xIDB4NzAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxU0JfMiAweDcwMjAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQzN1ZYIDB4NzAzMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDM5VFggMHg3MTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8wIDB4NzExMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUIgMHg3MTExCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODIzNzFBQl8yIDB4NzExMgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyMzcxQUJfMyAweDcxMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9NQzEgMHg3MTIwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBfSUcxIDB4NzEyMQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwX01DMyAweDcxMjIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjgxMF9JRzMgMHg3MTIzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI4MTBFX01DIDB4NzEyNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyODEwRV9JRyAweDcxMjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0xYXzAgMHg3MTgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNMWF8xIDB4NzE4MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzQlhfMCAweDcxOTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M0JYXzEgMHg3MTkxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNCWF8yIDB4NzE5MgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YIDB4NzE5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzQ0ME1YXzYgMHg3MTk2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNNWF8wIDB4NzE5OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzTVhfMSAweDcxOTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ0M01YXzMgMHg3MTliCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NDNHWF8wIDB4NzFhMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDQzR1hfMiAweDcxYTIKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjM3MkZCXzEgMHg3NjAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTRHWCAweDg0YzQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84MjQ1MEdYIDB4ODRjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMXzgyNDUxTlggMHg4NGNhCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSU5URUxfODI0NTROWCAweDg0Y2IKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF84NDQ2MEdYIDB4ODRlYQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX0lYUDRYWCAweDg1MDAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9JTlRFTF9JWFAyODAwIDB4OTAwNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0lOVEVMX1MyMTE1MkJCIDB4YjE1MgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfU0NBTEVNUCAweDg2ODYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9TQ0FMRU1QX1ZTTVBfQ1RMIDB4MTAxMAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQ09NUFVUT05FIDB4OGUwZQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0NPTVBVVE9ORV9JUDJFWCAweDAyOTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9DT01QVVRPTkVfUEcgMHgwMzAyCisjZGVmaW5lIFBDSV9TVUJWRU5ET1JfSURfQ09NUFVUT05FIDB4OGUwZQorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0NPTVBVVE9ORV9QRzQgMHgwMDAxCisjZGVmaW5lIFBDSV9TVUJERVZJQ0VfSURfQ09NUFVUT05FX1BHOCAweDAwMDIKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9DT01QVVRPTkVfUEc2IDB4MDAwMworCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfS1RJIDB4OGUyZQorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURBUFRFQyAweDkwMDQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4MTAgMHgxMDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODIxIDB4MjE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfMzg2MDIgMHgzODYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODUwIDB4NTA3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg1NSAweDU1NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzM4NjAgMHg2MDM4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ18xNDgwQSAweDYwNzUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NjAgMHg2MDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODYxIDB4NjE3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MCAweDcwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzEgMHg3MTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODcyIDB4NzI3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg3MyAweDczNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4NzQgMHg3NDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODk1IDB4Nzg5NQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MCAweDgwNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODEgMHg4MTc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODgyIDB4ODI3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4MyAweDgzNzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODQgMHg4NDc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg1IDB4ODU3OAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUNfNzg4NiAweDg2NzgKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDXzc4ODcgMHg4Nzc4CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQ183ODg4IDB4ODg3OAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfQURBUFRFQzIgMHg5MDA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfMjk0MFUyIDB4MDAxMAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzI5MzBVMiAweDAwMTEKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkwQiAweDAwMTMKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl83ODkwIDB4MDAxZgorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzM5NDBVMiAweDAwNTAKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9BREFQVEVDMl8zOTUwVTJEIDB4MDA1MQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX0FEQVBURUMyXzc4OTYgMHgwMDVmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MkEgMHgwMDgwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MkIgMHgwMDgxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MkQgMHgwMDgzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5MlAgMHgwMDhmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUEgMHgwMGMwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUIgMHgwMGMxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OUQgMHgwMGMzCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfNzg5OVAgMHgwMGNmCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfT0JTSURJQU4gMHgwNTAwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfQURBUFRFQzJfU0NBTVAgMHgwNTAzCisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9IT0xURUsgMHg5NDEyCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfSE9MVEVLXzY1NjUgMHg2NTY1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9ORVRNT1MgMHg5NzEwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MDUgMHg5NzA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MTUgMHg5NzE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3MzUgMHg5NzM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NDUgMHg5NzQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk3NTUgMHg5NzU1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MDUgMHg5ODA1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MTUgMHg5ODE1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4MzUgMHg5ODM1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NDUgMHg5ODQ1CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTkVUTU9TXzk4NTUgMHg5ODU1CisKKyNkZWZpbmUgUENJX1NVQlZFTkRPUl9JRF9FWFNZUyAweGQ4NGQKKyNkZWZpbmUgUENJX1NVQkRFVklDRV9JRF9FWFNZU180MDE0IDB4NDAxNAorI2RlZmluZSBQQ0lfU1VCREVWSUNFX0lEX0VYU1lTXzQwNTUgMHg0MDU1CisKKyNkZWZpbmUgUENJX1ZFTkRPUl9JRF9USUdFUkpFVCAweGUxNTkKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9USUdFUkpFVF8zMDAgMHgwMDAxCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVElHRVJKRVRfMTAwIDB4MDAwMgorCisjZGVmaW5lIFBDSV9WRU5ET1JfSURfVFRURUNIIDB4MDM1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX1RUVEVDSF9NQzMyMiAweDAwMEEKKworI2RlZmluZSBQQ0lfVkVORE9SX0lEX1hJTElOWF9STUUgMHhlYTYwCisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfUk1FX0RJR0kzMiAweDk4OTYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTMyX1BSTyAweDk4OTcKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9STUVfRElHSTMyXzggMHg5ODk4CisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfcmVncy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BjaV9yZWdzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTNhMjFiZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wY2lfcmVncy5oCkBAIC0wLDAgKzEsNDIyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX1BDSV9SRUdTX0gKKyNkZWZpbmUgTElOVVhfUENJX1JFR1NfSAorCisjZGVmaW5lIFBDSV9WRU5ET1JfSUQgMHgwMCAgCisjZGVmaW5lIFBDSV9ERVZJQ0VfSUQgMHgwMiAgCisjZGVmaW5lIFBDSV9DT01NQU5EIDB4MDQgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9JTyAweDEgIAorI2RlZmluZSBQQ0lfQ09NTUFORF9NRU1PUlkgMHgyICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfTUFTVEVSIDB4NCAgCisjZGVmaW5lIFBDSV9DT01NQU5EX1NQRUNJQUwgMHg4ICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfSU5WQUxJREFURSAweDEwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfVkdBX1BBTEVUVEUgMHgyMCAgCisjZGVmaW5lIFBDSV9DT01NQU5EX1BBUklUWSAweDQwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfV0FJVCAweDgwICAKKyNkZWZpbmUgUENJX0NPTU1BTkRfU0VSUiAweDEwMCAgCisjZGVmaW5lIFBDSV9DT01NQU5EX0ZBU1RfQkFDSyAweDIwMCAgCisjZGVmaW5lIFBDSV9DT01NQU5EX0lOVFhfRElTQUJMRSAweDQwMCAgCisKKyNkZWZpbmUgUENJX1NUQVRVUyAweDA2ICAKKyNkZWZpbmUgUENJX1NUQVRVU19DQVBfTElTVCAweDEwICAKKyNkZWZpbmUgUENJX1NUQVRVU182Nk1IWiAweDIwICAKKyNkZWZpbmUgUENJX1NUQVRVU19VREYgMHg0MCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfRkFTVF9CQUNLIDB4ODAgIAorI2RlZmluZSBQQ0lfU1RBVFVTX1BBUklUWSAweDEwMCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX01BU0sgMHg2MDAgIAorI2RlZmluZSBQQ0lfU1RBVFVTX0RFVlNFTF9GQVNUIDB4MDAwCisjZGVmaW5lIFBDSV9TVEFUVVNfREVWU0VMX01FRElVTSAweDIwMAorI2RlZmluZSBQQ0lfU1RBVFVTX0RFVlNFTF9TTE9XIDB4NDAwCisjZGVmaW5lIFBDSV9TVEFUVVNfU0lHX1RBUkdFVF9BQk9SVCAweDgwMCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfUkVDX1RBUkdFVF9BQk9SVCAweDEwMDAgIAorI2RlZmluZSBQQ0lfU1RBVFVTX1JFQ19NQVNURVJfQUJPUlQgMHgyMDAwICAKKyNkZWZpbmUgUENJX1NUQVRVU19TSUdfU1lTVEVNX0VSUk9SIDB4NDAwMCAgCisjZGVmaW5lIFBDSV9TVEFUVVNfREVURUNURURfUEFSSVRZIDB4ODAwMCAgCisKKyNkZWZpbmUgUENJX0NMQVNTX1JFVklTSU9OIDB4MDggIAorI2RlZmluZSBQQ0lfUkVWSVNJT05fSUQgMHgwOCAgCisjZGVmaW5lIFBDSV9DTEFTU19QUk9HIDB4MDkgIAorI2RlZmluZSBQQ0lfQ0xBU1NfREVWSUNFIDB4MGEgIAorCisjZGVmaW5lIFBDSV9DQUNIRV9MSU5FX1NJWkUgMHgwYyAgCisjZGVmaW5lIFBDSV9MQVRFTkNZX1RJTUVSIDB4MGQgIAorI2RlZmluZSBQQ0lfSEVBREVSX1RZUEUgMHgwZSAgCisjZGVmaW5lIFBDSV9IRUFERVJfVFlQRV9OT1JNQUwgMAorI2RlZmluZSBQQ0lfSEVBREVSX1RZUEVfQlJJREdFIDEKKyNkZWZpbmUgUENJX0hFQURFUl9UWVBFX0NBUkRCVVMgMgorCisjZGVmaW5lIFBDSV9CSVNUIDB4MGYgIAorI2RlZmluZSBQQ0lfQklTVF9DT0RFX01BU0sgMHgwZiAgCisjZGVmaW5lIFBDSV9CSVNUX1NUQVJUIDB4NDAgIAorI2RlZmluZSBQQ0lfQklTVF9DQVBBQkxFIDB4ODAgIAorCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMCAweDEwICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU18xIDB4MTQgIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzIgMHgxOCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfMyAweDFjICAKKyNkZWZpbmUgUENJX0JBU0VfQUREUkVTU180IDB4MjAgIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTXzUgMHgyNCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0UgMHgwMSAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfU1BBQ0VfSU8gMHgwMQorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX1NQQUNFX01FTU9SWSAweDAwCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfTUFTSyAweDA2CisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMzIgMHgwMCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfMU0gMHgwMiAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1RZUEVfNjQgMHgwNCAgCisjZGVmaW5lIFBDSV9CQVNFX0FERFJFU1NfTUVNX1BSRUZFVENIIDB4MDggIAorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX01FTV9NQVNLICh+MHgwZlVMKQorI2RlZmluZSBQQ0lfQkFTRV9BRERSRVNTX0lPX01BU0sgKH4weDAzVUwpCisKKyNkZWZpbmUgUENJX0NBUkRCVVNfQ0lTIDB4MjgKKyNkZWZpbmUgUENJX1NVQlNZU1RFTV9WRU5ET1JfSUQgMHgyYworI2RlZmluZSBQQ0lfU1VCU1lTVEVNX0lEIDB4MmUKKyNkZWZpbmUgUENJX1JPTV9BRERSRVNTIDB4MzAgIAorI2RlZmluZSBQQ0lfUk9NX0FERFJFU1NfRU5BQkxFIDB4MDEKKyNkZWZpbmUgUENJX1JPTV9BRERSRVNTX01BU0sgKH4weDdmZlVMKQorCisjZGVmaW5lIFBDSV9DQVBBQklMSVRZX0xJU1QgMHgzNCAgCisKKyNkZWZpbmUgUENJX0lOVEVSUlVQVF9MSU5FIDB4M2MgIAorI2RlZmluZSBQQ0lfSU5URVJSVVBUX1BJTiAweDNkICAKKyNkZWZpbmUgUENJX01JTl9HTlQgMHgzZSAgCisjZGVmaW5lIFBDSV9NQVhfTEFUIDB4M2YgIAorCisjZGVmaW5lIFBDSV9QUklNQVJZX0JVUyAweDE4ICAKKyNkZWZpbmUgUENJX1NFQ09OREFSWV9CVVMgMHgxOSAgCisjZGVmaW5lIFBDSV9TVUJPUkRJTkFURV9CVVMgMHgxYSAgCisjZGVmaW5lIFBDSV9TRUNfTEFURU5DWV9USU1FUiAweDFiICAKKyNkZWZpbmUgUENJX0lPX0JBU0UgMHgxYyAgCisjZGVmaW5lIFBDSV9JT19MSU1JVCAweDFkCisjZGVmaW5lIFBDSV9JT19SQU5HRV9UWVBFX01BU0sgMHgwZlVMICAKKyNkZWZpbmUgUENJX0lPX1JBTkdFX1RZUEVfMTYgMHgwMAorI2RlZmluZSBQQ0lfSU9fUkFOR0VfVFlQRV8zMiAweDAxCisjZGVmaW5lIFBDSV9JT19SQU5HRV9NQVNLICh+MHgwZlVMKQorI2RlZmluZSBQQ0lfU0VDX1NUQVRVUyAweDFlICAKKyNkZWZpbmUgUENJX01FTU9SWV9CQVNFIDB4MjAgIAorI2RlZmluZSBQQ0lfTUVNT1JZX0xJTUlUIDB4MjIKKyNkZWZpbmUgUENJX01FTU9SWV9SQU5HRV9UWVBFX01BU0sgMHgwZlVMCisjZGVmaW5lIFBDSV9NRU1PUllfUkFOR0VfTUFTSyAofjB4MGZVTCkKKyNkZWZpbmUgUENJX1BSRUZfTUVNT1JZX0JBU0UgMHgyNCAgCisjZGVmaW5lIFBDSV9QUkVGX01FTU9SWV9MSU1JVCAweDI2CisjZGVmaW5lIFBDSV9QUkVGX1JBTkdFX1RZUEVfTUFTSyAweDBmVUwKKyNkZWZpbmUgUENJX1BSRUZfUkFOR0VfVFlQRV8zMiAweDAwCisjZGVmaW5lIFBDSV9QUkVGX1JBTkdFX1RZUEVfNjQgMHgwMQorI2RlZmluZSBQQ0lfUFJFRl9SQU5HRV9NQVNLICh+MHgwZlVMKQorI2RlZmluZSBQQ0lfUFJFRl9CQVNFX1VQUEVSMzIgMHgyOCAgCisjZGVmaW5lIFBDSV9QUkVGX0xJTUlUX1VQUEVSMzIgMHgyYworI2RlZmluZSBQQ0lfSU9fQkFTRV9VUFBFUjE2IDB4MzAgIAorI2RlZmluZSBQQ0lfSU9fTElNSVRfVVBQRVIxNiAweDMyCisKKyNkZWZpbmUgUENJX1JPTV9BRERSRVNTMSAweDM4ICAKKworI2RlZmluZSBQQ0lfQlJJREdFX0NPTlRST0wgMHgzZQorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9QQVJJVFkgMHgwMSAgCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX1NFUlIgMHgwMiAgCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX05PX0lTQSAweDA0ICAKKyNkZWZpbmUgUENJX0JSSURHRV9DVExfVkdBIDB4MDggIAorI2RlZmluZSBQQ0lfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQgMHgyMCAgCisjZGVmaW5lIFBDSV9CUklER0VfQ1RMX0JVU19SRVNFVCAweDQwICAKKyNkZWZpbmUgUENJX0JSSURHRV9DVExfRkFTVF9CQUNLIDB4ODAgIAorCisjZGVmaW5lIFBDSV9DQl9DQVBBQklMSVRZX0xJU1QgMHgxNAorCisjZGVmaW5lIFBDSV9DQl9TRUNfU1RBVFVTIDB4MTYgIAorI2RlZmluZSBQQ0lfQ0JfUFJJTUFSWV9CVVMgMHgxOCAgCisjZGVmaW5lIFBDSV9DQl9DQVJEX0JVUyAweDE5ICAKKyNkZWZpbmUgUENJX0NCX1NVQk9SRElOQVRFX0JVUyAweDFhICAKKyNkZWZpbmUgUENJX0NCX0xBVEVOQ1lfVElNRVIgMHgxYiAgCisjZGVmaW5lIFBDSV9DQl9NRU1PUllfQkFTRV8wIDB4MWMKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9MSU1JVF8wIDB4MjAKKyNkZWZpbmUgUENJX0NCX01FTU9SWV9CQVNFXzEgMHgyNAorI2RlZmluZSBQQ0lfQ0JfTUVNT1JZX0xJTUlUXzEgMHgyOAorI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8wIDB4MmMKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMF9ISSAweDJlCisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8wIDB4MzAKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzBfSEkgMHgzMgorI2RlZmluZSBQQ0lfQ0JfSU9fQkFTRV8xIDB4MzQKKyNkZWZpbmUgUENJX0NCX0lPX0JBU0VfMV9ISSAweDM2CisjZGVmaW5lIFBDSV9DQl9JT19MSU1JVF8xIDB4MzgKKyNkZWZpbmUgUENJX0NCX0lPX0xJTUlUXzFfSEkgMHgzYQorI2RlZmluZSBQQ0lfQ0JfSU9fUkFOR0VfTUFTSyAofjB4MDNVTCkKKworI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NPTlRST0wgMHgzZQorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QQVJJVFkgMHgwMSAgCisjZGVmaW5lIFBDSV9DQl9CUklER0VfQ1RMX1NFUlIgMHgwMgorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9JU0EgMHgwNAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9WR0EgMHgwOAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9NQVNURVJfQUJPUlQgMHgyMAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9DQl9SRVNFVCAweDQwICAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfMTZCSVRfSU5UIDB4ODAgIAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QUkVGRVRDSF9NRU0wIDB4MTAwICAKKyNkZWZpbmUgUENJX0NCX0JSSURHRV9DVExfUFJFRkVUQ0hfTUVNMSAweDIwMAorI2RlZmluZSBQQ0lfQ0JfQlJJREdFX0NUTF9QT1NUX1dSSVRFUyAweDQwMAorI2RlZmluZSBQQ0lfQ0JfU1VCU1lTVEVNX1ZFTkRPUl9JRCAweDQwCisjZGVmaW5lIFBDSV9DQl9TVUJTWVNURU1fSUQgMHg0MgorI2RlZmluZSBQQ0lfQ0JfTEVHQUNZX01PREVfQkFTRSAweDQ0ICAKKworI2RlZmluZSBQQ0lfQ0FQX0xJU1RfSUQgMCAgCisjZGVmaW5lIFBDSV9DQVBfSURfUE0gMHgwMSAgCisjZGVmaW5lIFBDSV9DQVBfSURfQUdQIDB4MDIgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX1ZQRCAweDAzICAKKyNkZWZpbmUgUENJX0NBUF9JRF9TTE9USUQgMHgwNCAgCisjZGVmaW5lIFBDSV9DQVBfSURfTVNJIDB4MDUgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX0NIU1dQIDB4MDYgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX1BDSVggMHgwNyAgCisjZGVmaW5lIFBDSV9DQVBfSURfSFRfSVJRQ09ORiAweDA4ICAKKyNkZWZpbmUgUENJX0NBUF9JRF9WTkRSIDB4MDkgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX1NIUEMgMHgwQyAgCisjZGVmaW5lIFBDSV9DQVBfSURfRVhQIDB4MTAgIAorI2RlZmluZSBQQ0lfQ0FQX0lEX01TSVggMHgxMSAgCisjZGVmaW5lIFBDSV9DQVBfTElTVF9ORVhUIDEgIAorI2RlZmluZSBQQ0lfQ0FQX0ZMQUdTIDIgIAorI2RlZmluZSBQQ0lfQ0FQX1NJWkVPRiA0CisKKyNkZWZpbmUgUENJX1BNX1BNQyAyICAKKyNkZWZpbmUgUENJX1BNX0NBUF9WRVJfTUFTSyAweDAwMDcgIAorI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9DTE9DSyAweDAwMDggIAorI2RlZmluZSBQQ0lfUE1fQ0FQX1JFU0VSVkVEIDB4MDAxMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfRFNJIDB4MDAyMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfQVVYX1BPV0VSIDB4MDFDMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfRDEgMHgwMjAwICAKKyNkZWZpbmUgUENJX1BNX0NBUF9EMiAweDA0MDAgIAorI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRSAweDA4MDAgIAorI2RlZmluZSBQQ0lfUE1fQ0FQX1BNRV9NQVNLIDB4RjgwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QwIDB4MDgwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QxIDB4MTAwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QyIDB4MjAwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QzIDB4NDAwMCAgCisjZGVmaW5lIFBDSV9QTV9DQVBfUE1FX0QzY29sZCAweDgwMDAgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTCA0ICAKKyNkZWZpbmUgUENJX1BNX0NUUkxfU1RBVEVfTUFTSyAweDAwMDMgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTF9OT19TT0ZUX1JFU0VUIDB4MDAwNCAgCisjZGVmaW5lIFBDSV9QTV9DVFJMX1BNRV9FTkFCTEUgMHgwMTAwICAKKyNkZWZpbmUgUENJX1BNX0NUUkxfREFUQV9TRUxfTUFTSyAweDFlMDAgIAorI2RlZmluZSBQQ0lfUE1fQ1RSTF9EQVRBX1NDQUxFX01BU0sgMHg2MDAwICAKKyNkZWZpbmUgUENJX1BNX0NUUkxfUE1FX1NUQVRVUyAweDgwMDAgIAorI2RlZmluZSBQQ0lfUE1fUFBCX0VYVEVOU0lPTlMgNiAgCisjZGVmaW5lIFBDSV9QTV9QUEJfQjJfQjMgMHg0MCAgCisjZGVmaW5lIFBDSV9QTV9CUENDX0VOQUJMRSAweDgwICAKKyNkZWZpbmUgUENJX1BNX0RBVEFfUkVHSVNURVIgNyAgCisjZGVmaW5lIFBDSV9QTV9TSVpFT0YgOAorCisjZGVmaW5lIFBDSV9BR1BfVkVSU0lPTiAyICAKKyNkZWZpbmUgUENJX0FHUF9SRlUgMyAgCisjZGVmaW5lIFBDSV9BR1BfU1RBVFVTIDQgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19SUV9NQVNLIDB4ZmYwMDAwMDAgIAorI2RlZmluZSBQQ0lfQUdQX1NUQVRVU19TQkEgMHgwMjAwICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfNjRCSVQgMHgwMDIwICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfRlcgMHgwMDEwICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUkFURTQgMHgwMDA0ICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUkFURTIgMHgwMDAyICAKKyNkZWZpbmUgUENJX0FHUF9TVEFUVVNfUkFURTEgMHgwMDAxICAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EIDggIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfUlFfTUFTSyAweGZmMDAwMDAwICAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1NCQSAweDAyMDAgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfQUdQIDB4MDEwMCAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF82NEJJVCAweDAwMjAgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfRlcgMHgwMDEwICAKKyNkZWZpbmUgUENJX0FHUF9DT01NQU5EX1JBVEU0IDB4MDAwNCAgCisjZGVmaW5lIFBDSV9BR1BfQ09NTUFORF9SQVRFMiAweDAwMDIgIAorI2RlZmluZSBQQ0lfQUdQX0NPTU1BTkRfUkFURTEgMHgwMDAxICAKKyNkZWZpbmUgUENJX0FHUF9TSVpFT0YgMTIKKworI2RlZmluZSBQQ0lfVlBEX0FERFIgMiAgCisjZGVmaW5lIFBDSV9WUERfQUREUl9NQVNLIDB4N2ZmZiAgCisjZGVmaW5lIFBDSV9WUERfQUREUl9GIDB4ODAwMCAgCisjZGVmaW5lIFBDSV9WUERfREFUQSA0ICAKKworI2RlZmluZSBQQ0lfU0lEX0VTUiAyICAKKyNkZWZpbmUgUENJX1NJRF9FU1JfTlNMT1RTIDB4MWYgIAorI2RlZmluZSBQQ0lfU0lEX0VTUl9GSUMgMHgyMCAgCisjZGVmaW5lIFBDSV9TSURfQ0hBU1NJU19OUiAzICAKKworI2RlZmluZSBQQ0lfTVNJX0ZMQUdTIDIgIAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTXzY0QklUIDB4ODAgIAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX1FTSVpFIDB4NzAgIAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX1FNQVNLIDB4MGUgIAorI2RlZmluZSBQQ0lfTVNJX0ZMQUdTX0VOQUJMRSAweDAxICAKKyNkZWZpbmUgUENJX01TSV9GTEFHU19NQVNLQklUIDB4MTAwICAKKyNkZWZpbmUgUENJX01TSV9SRlUgMyAgCisjZGVmaW5lIFBDSV9NU0lfQUREUkVTU19MTyA0ICAKKyNkZWZpbmUgUENJX01TSV9BRERSRVNTX0hJIDggIAorI2RlZmluZSBQQ0lfTVNJX0RBVEFfMzIgOCAgCisjZGVmaW5lIFBDSV9NU0lfREFUQV82NCAxMiAgCisjZGVmaW5lIFBDSV9NU0lfTUFTS19CSVQgMTYgIAorCisjZGVmaW5lIFBDSV9DSFNXUF9DU1IgMiAgCisjZGVmaW5lIFBDSV9DSFNXUF9ESEEgMHgwMSAgCisjZGVmaW5lIFBDSV9DSFNXUF9FSU0gMHgwMiAgCisjZGVmaW5lIFBDSV9DSFNXUF9QSUUgMHgwNCAgCisjZGVmaW5lIFBDSV9DSFNXUF9MT08gMHgwOCAgCisjZGVmaW5lIFBDSV9DSFNXUF9QSSAweDMwICAKKyNkZWZpbmUgUENJX0NIU1dQX0VYVCAweDQwICAKKyNkZWZpbmUgUENJX0NIU1dQX0lOUyAweDgwICAKKworI2RlZmluZSBQQ0lfWF9DTUQgMiAgCisjZGVmaW5lIFBDSV9YX0NNRF9EUEVSUl9FIDB4MDAwMSAgCisjZGVmaW5lIFBDSV9YX0NNRF9FUk8gMHgwMDAyICAKKyNkZWZpbmUgUENJX1hfQ01EX01BWF9SRUFEIDB4MDAwYyAgCisjZGVmaW5lIFBDSV9YX0NNRF9NQVhfU1BMSVQgMHgwMDcwICAKKyNkZWZpbmUgUENJX1hfQ01EX1ZFUlNJT04oeCkgKCgoeCkgPj4gMTIpICYgMykgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVMgNCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19ERVZGTiAweDAwMDAwMGZmICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX0JVUyAweDAwMDBmZjAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTXzY0QklUIDB4MDAwMTAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfMTMzTUhaIDB4MDAwMjAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfU1BMX0RJU0MgMHgwMDA0MDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU19VTlhfU1BMIDB4MDAwODAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfQ09NUExFWCAweDAwMTAwMDAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX01BWF9SRUFEIDB4MDA2MDAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX1NQTElUIDB4MDM4MDAwMDAgIAorI2RlZmluZSBQQ0lfWF9TVEFUVVNfTUFYX0NVTSAweDFjMDAwMDAwICAKKyNkZWZpbmUgUENJX1hfU1RBVFVTX1NQTF9FUlIgMHgyMDAwMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU18yNjZNSFogMHg0MDAwMDAwMCAgCisjZGVmaW5lIFBDSV9YX1NUQVRVU181MzNNSFogMHg4MDAwMDAwMCAgCisKKyNkZWZpbmUgUENJX0VYUF9GTEFHUyAyICAKKyNkZWZpbmUgUENJX0VYUF9GTEFHU19WRVJTIDB4MDAwZiAgCisjZGVmaW5lIFBDSV9FWFBfRkxBR1NfVFlQRSAweDAwZjAgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfRU5EUE9JTlQgMHgwICAKKyNkZWZpbmUgUENJX0VYUF9UWVBFX0xFR19FTkQgMHgxICAKKyNkZWZpbmUgUENJX0VYUF9UWVBFX1JPT1RfUE9SVCAweDQgIAorI2RlZmluZSBQQ0lfRVhQX1RZUEVfVVBTVFJFQU0gMHg1ICAKKyNkZWZpbmUgUENJX0VYUF9UWVBFX0RPV05TVFJFQU0gMHg2ICAKKyNkZWZpbmUgUENJX0VYUF9UWVBFX1BDSV9CUklER0UgMHg3ICAKKyNkZWZpbmUgUENJX0VYUF9GTEFHU19TTE9UIDB4MDEwMCAgCisjZGVmaW5lIFBDSV9FWFBfRkxBR1NfSVJRIDB4M2UwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQIDQgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QQVlMT0FEIDB4MDcgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QSEFOVE9NIDB4MTggIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9FWFRfVEFHIDB4MjAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMFMgMHgxYzAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9MMSAweGUwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX0FUTl9CVVQgMHgxMDAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfQVROX0lORCAweDIwMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNBUF9QV1JfSU5EIDB4NDAwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ0FQX1BXUl9WQUwgMHgzZmMwMDAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDQVBfUFdSX1NDTCAweGMwMDAwMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTCA4ICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfQ0VSRSAweDAwMDEgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9ORkVSRSAweDAwMDIgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9GRVJFIDB4MDAwNCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1VSUkUgMHgwMDA4ICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfUkVMQVhfRU4gMHgwMDEwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfUEFZTE9BRCAweDAwZTAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9FWFRfVEFHIDB4MDEwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1BIQU5UT00gMHgwMjAwICAKKyNkZWZpbmUgUENJX0VYUF9ERVZDVExfQVVYX1BNRSAweDA0MDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVkNUTF9OT1NOT09QX0VOIDB4MDgwMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWQ1RMX1JFQURSUSAweDcwMDAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQSAxMCAgCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX0NFRCAweDAxICAKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfTkZFRCAweDAyICAKKyNkZWZpbmUgUENJX0VYUF9ERVZTVEFfRkVEIDB4MDQgIAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9VUkQgMHgwOCAgCisjZGVmaW5lIFBDSV9FWFBfREVWU1RBX0FVWFBEIDB4MTAgIAorI2RlZmluZSBQQ0lfRVhQX0RFVlNUQV9UUlBORCAweDIwICAKKyNkZWZpbmUgUENJX0VYUF9MTktDQVAgMTIgIAorI2RlZmluZSBQQ0lfRVhQX0xOS0NUTCAxNiAgCisjZGVmaW5lIFBDSV9FWFBfTE5LU1RBIDE4ICAKKyNkZWZpbmUgUENJX0VYUF9TTFRDQVAgMjAgIAorI2RlZmluZSBQQ0lfRVhQX1NMVENUTCAyNCAgCisjZGVmaW5lIFBDSV9FWFBfU0xUU1RBIDI2ICAKKyNkZWZpbmUgUENJX0VYUF9SVENUTCAyOCAgCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VDRUUgMHgwMSAgCisjZGVmaW5lIFBDSV9FWFBfUlRDVExfU0VORkVFIDB4MDIgIAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1NFRkVFIDB4MDQgIAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX1BNRUlFIDB4MDggIAorI2RlZmluZSBQQ0lfRVhQX1JUQ1RMX0NSU1NWRSAweDEwICAKKyNkZWZpbmUgUENJX0VYUF9SVENBUCAzMCAgCisjZGVmaW5lIFBDSV9FWFBfUlRTVEEgMzIgIAorCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEKGhlYWRlcikgKGhlYWRlciAmIDB4MDAwMGZmZmYpCisjZGVmaW5lIFBDSV9FWFRfQ0FQX1ZFUihoZWFkZXIpICgoaGVhZGVyID4+IDE2KSAmIDB4ZikKKyNkZWZpbmUgUENJX0VYVF9DQVBfTkVYVChoZWFkZXIpICgoaGVhZGVyID4+IDIwKSAmIDB4ZmZjKQorCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX0VSUiAxCisjZGVmaW5lIFBDSV9FWFRfQ0FQX0lEX1ZDIDIKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfRFNOIDMKKyNkZWZpbmUgUENJX0VYVF9DQVBfSURfUFdSIDQKKworI2RlZmluZSBQQ0lfRVJSX1VOQ09SX1NUQVRVUyA0ICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfVFJBSU4gMHgwMDAwMDAwMSAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX0RMUCAweDAwMDAwMDEwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfUE9JU09OX1RMUCAweDAwMDAxMDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfRkNQIDB4MDAwMDIwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19DT01QX1RJTUUgMHgwMDAwNDAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX0NPTVBfQUJPUlQgMHgwMDAwODAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DX1VOWF9DT01QIDB4MDAwMTAwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19SWF9PVkVSIDB4MDAwMjAwMDAgIAorI2RlZmluZSBQQ0lfRVJSX1VOQ19NQUxGX1RMUCAweDAwMDQwMDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfRUNSQyAweDAwMDgwMDAwICAKKyNkZWZpbmUgUENJX0VSUl9VTkNfVU5TVVAgMHgwMDEwMDAwMCAgCisjZGVmaW5lIFBDSV9FUlJfVU5DT1JfTUFTSyA4ICAKKworI2RlZmluZSBQQ0lfRVJSX1VOQ09SX1NFVkVSIDEyICAKKworI2RlZmluZSBQQ0lfRVJSX0NPUl9TVEFUVVMgMTYgIAorI2RlZmluZSBQQ0lfRVJSX0NPUl9SQ1ZSIDB4MDAwMDAwMDEgIAorI2RlZmluZSBQQ0lfRVJSX0NPUl9CQURfVExQIDB4MDAwMDAwNDAgIAorI2RlZmluZSBQQ0lfRVJSX0NPUl9CQURfRExMUCAweDAwMDAwMDgwICAKKyNkZWZpbmUgUENJX0VSUl9DT1JfUkVQX1JPTEwgMHgwMDAwMDEwMCAgCisjZGVmaW5lIFBDSV9FUlJfQ09SX1JFUF9USU1FUiAweDAwMDAxMDAwICAKKyNkZWZpbmUgUENJX0VSUl9DT1JfTUFTSyAyMCAgCisKKyNkZWZpbmUgUENJX0VSUl9DQVAgMjQgIAorI2RlZmluZSBQQ0lfRVJSX0NBUF9GRVAoeCkgKCh4KSAmIDMxKSAgCisjZGVmaW5lIFBDSV9FUlJfQ0FQX0VDUkNfR0VOQyAweDAwMDAwMDIwICAKKyNkZWZpbmUgUENJX0VSUl9DQVBfRUNSQ19HRU5FIDB4MDAwMDAwNDAgIAorI2RlZmluZSBQQ0lfRVJSX0NBUF9FQ1JDX0NIS0MgMHgwMDAwMDA4MCAgCisjZGVmaW5lIFBDSV9FUlJfQ0FQX0VDUkNfQ0hLRSAweDAwMDAwMTAwICAKKyNkZWZpbmUgUENJX0VSUl9IRUFERVJfTE9HIDI4ICAKKyNkZWZpbmUgUENJX0VSUl9ST09UX0NPTU1BTkQgNDQgIAorCisjZGVmaW5lIFBDSV9FUlJfUk9PVF9DTURfQ09SX0VOIDB4MDAwMDAwMDEKKworI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ01EX05PTkZBVEFMX0VOIDB4MDAwMDAwMDIKKworI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ01EX0ZBVEFMX0VOIDB4MDAwMDAwMDQKKyNkZWZpbmUgUENJX0VSUl9ST09UX1NUQVRVUyA0OAorI2RlZmluZSBQQ0lfRVJSX1JPT1RfQ09SX1JDViAweDAwMDAwMDAxICAKKworI2RlZmluZSBQQ0lfRVJSX1JPT1RfTVVMVElfQ09SX1JDViAweDAwMDAwMDAyCisKKyNkZWZpbmUgUENJX0VSUl9ST09UX1VOQ09SX1JDViAweDAwMDAwMDA0CisKKyNkZWZpbmUgUENJX0VSUl9ST09UX01VTFRJX1VOQ09SX1JDViAweDAwMDAwMDA4CisjZGVmaW5lIFBDSV9FUlJfUk9PVF9GSVJTVF9GQVRBTCAweDAwMDAwMDEwICAKKyNkZWZpbmUgUENJX0VSUl9ST09UX05PTkZBVEFMX1JDViAweDAwMDAwMDIwICAKKyNkZWZpbmUgUENJX0VSUl9ST09UX0ZBVEFMX1JDViAweDAwMDAwMDQwICAKKyNkZWZpbmUgUENJX0VSUl9ST09UX0NPUl9TUkMgNTIKKyNkZWZpbmUgUENJX0VSUl9ST09UX1NSQyA1NAorCisjZGVmaW5lIFBDSV9WQ19QT1JUX1JFRzEgNAorI2RlZmluZSBQQ0lfVkNfUE9SVF9SRUcyIDgKKyNkZWZpbmUgUENJX1ZDX1BPUlRfQ1RSTCAxMgorI2RlZmluZSBQQ0lfVkNfUE9SVF9TVEFUVVMgMTQKKyNkZWZpbmUgUENJX1ZDX1JFU19DQVAgMTYKKyNkZWZpbmUgUENJX1ZDX1JFU19DVFJMIDIwCisjZGVmaW5lIFBDSV9WQ19SRVNfU1RBVFVTIDI2CisKKyNkZWZpbmUgUENJX1BXUl9EU1IgNCAgCisjZGVmaW5lIFBDSV9QV1JfREFUQSA4ICAKKyNkZWZpbmUgUENJX1BXUl9EQVRBX0JBU0UoeCkgKCh4KSAmIDB4ZmYpICAKKyNkZWZpbmUgUENJX1BXUl9EQVRBX1NDQUxFKHgpICgoKHgpID4+IDgpICYgMykgIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfUE1fU1VCKHgpICgoKHgpID4+IDEwKSAmIDcpICAKKyNkZWZpbmUgUENJX1BXUl9EQVRBX1BNX1NUQVRFKHgpICgoKHgpID4+IDEzKSAmIDMpICAKKyNkZWZpbmUgUENJX1BXUl9EQVRBX1RZUEUoeCkgKCgoeCkgPj4gMTUpICYgNykgIAorI2RlZmluZSBQQ0lfUFdSX0RBVEFfUkFJTCh4KSAoKCh4KSA+PiAxOCkgJiA3KSAgCisjZGVmaW5lIFBDSV9QV1JfQ0FQIDEyICAKKyNkZWZpbmUgUENJX1BXUl9DQVBfQlVER0VUKHgpICgoeCkgJiAxKSAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcmNwdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMxOTU2MTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1LmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1BFUkNQVV9ICisjZGVmaW5lIF9fTElOVVhfUEVSQ1BVX0gKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPiAgCisjaW5jbHVkZSA8bGludXgvc2xhYi5oPiAgCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+ICAKKyNpbmNsdWRlIDxhc20vcGVyY3B1Lmg+CisKKyNpZm5kZWYgUEVSQ1BVX0VOT1VHSF9ST09NCisjZGVmaW5lIFBFUkNQVV9FTk9VR0hfUk9PTSAzMjc2OAorI2VuZGlmCisKKyNkZWZpbmUgZ2V0X2NwdV92YXIodmFyKSAoKih7IHByZWVtcHRfZGlzYWJsZSgpOyAmX19nZXRfY3B1X3Zhcih2YXIpOyB9KSkKKyNkZWZpbmUgcHV0X2NwdV92YXIodmFyKSBwcmVlbXB0X2VuYWJsZSgpCisKKyNkZWZpbmUgcGVyX2NwdV9wdHIocHRyLCBjcHUpICh7ICh2b2lkKShjcHUpOyAocHRyKTsgfSkKKworI2RlZmluZSBhbGxvY19wZXJjcHUodHlwZSkgKCh0eXBlICopKF9fYWxsb2NfcGVyY3B1KHNpemVvZih0eXBlKSkpKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1X2NvdW50ZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZXJjcHVfY291bnRlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjExMjM3NWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyY3B1X2NvdW50ZXIuaApAQCAtMCwwICsxLDI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICisjZGVmaW5lIF9MSU5VWF9QRVJDUFVfQ09VTlRFUl9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgeworIHM2NCBjb3VudDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcnNvbmFsaXR5LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGVyc29uYWxpdHkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjg0YjRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BlcnNvbmFsaXR5LmgKQEAgLTAsMCArMSw4MyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUEVSU09OQUxJVFlfSAorI2RlZmluZSBfTElOVVhfUEVSU09OQUxJVFlfSAorCitzdHJ1Y3QgZXhlY19kb21haW47CitzdHJ1Y3QgcHRfcmVnczsKKworZW51bSB7CisgQUREUl9OT19SQU5ET01JWkUgPSAweDAwNDAwMDAsCisgRkRQSUNfRlVOQ1BUUlMgPSAweDAwODAwMDAsCisgTU1BUF9QQUdFX1pFUk8gPSAweDAxMDAwMDAsCisgQUREUl9DT01QQVRfTEFZT1VUID0gMHgwMjAwMDAwLAorIFJFQURfSU1QTElFU19FWEVDID0gMHgwNDAwMDAwLAorIEFERFJfTElNSVRfMzJCSVQgPSAweDA4MDAwMDAsCisgU0hPUlRfSU5PREUgPSAweDEwMDAwMDAsCisgV0hPTEVfU0VDT05EUyA9IDB4MjAwMDAwMCwKKyBTVElDS1lfVElNRU9VVFMgPSAweDQwMDAwMDAsCisgQUREUl9MSU1JVF8zR0IgPSAweDgwMDAwMDAsCit9OworCisjZGVmaW5lIFBFUl9DTEVBUl9PTl9TRVRJRCAoUkVBRF9JTVBMSUVTX0VYRUN8QUREUl9OT19SQU5ET01JWkUpCisKK2VudW0geworIFBFUl9MSU5VWCA9IDB4MDAwMCwKKyBQRVJfTElOVVhfMzJCSVQgPSAweDAwMDAgfCBBRERSX0xJTUlUXzMyQklULAorIFBFUl9MSU5VWF9GRFBJQyA9IDB4MDAwMCB8IEZEUElDX0ZVTkNQVFJTLAorIFBFUl9TVlI0ID0gMHgwMDAxIHwgU1RJQ0tZX1RJTUVPVVRTIHwgTU1BUF9QQUdFX1pFUk8sCisgUEVSX1NWUjMgPSAweDAwMDIgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKyBQRVJfU0NPU1ZSMyA9IDB4MDAwMyB8IFNUSUNLWV9USU1FT1VUUyB8CisgV0hPTEVfU0VDT05EUyB8IFNIT1JUX0lOT0RFLAorIFBFUl9PU1I1ID0gMHgwMDAzIHwgU1RJQ0tZX1RJTUVPVVRTIHwgV0hPTEVfU0VDT05EUywKKyBQRVJfV1lTRVYzODYgPSAweDAwMDQgfCBTVElDS1lfVElNRU9VVFMgfCBTSE9SVF9JTk9ERSwKKyBQRVJfSVNDUjQgPSAweDAwMDUgfCBTVElDS1lfVElNRU9VVFMsCisgUEVSX0JTRCA9IDB4MDAwNiwKKyBQRVJfU1VOT1MgPSAweDAwMDYgfCBTVElDS1lfVElNRU9VVFMsCisgUEVSX1hFTklYID0gMHgwMDA3IHwgU1RJQ0tZX1RJTUVPVVRTIHwgU0hPUlRfSU5PREUsCisgUEVSX0xJTlVYMzIgPSAweDAwMDgsCisgUEVSX0xJTlVYMzJfM0dCID0gMHgwMDA4IHwgQUREUl9MSU1JVF8zR0IsCisgUEVSX0lSSVgzMiA9IDB4MDAwOSB8IFNUSUNLWV9USU1FT1VUUywKKyBQRVJfSVJJWE4zMiA9IDB4MDAwYSB8IFNUSUNLWV9USU1FT1VUUywKKyBQRVJfSVJJWDY0ID0gMHgwMDBiIHwgU1RJQ0tZX1RJTUVPVVRTLAorIFBFUl9SSVNDT1MgPSAweDAwMGMsCisgUEVSX1NPTEFSSVMgPSAweDAwMGQgfCBTVElDS1lfVElNRU9VVFMsCisgUEVSX1VXNyA9IDB4MDAwZSB8IFNUSUNLWV9USU1FT1VUUyB8IE1NQVBfUEFHRV9aRVJPLAorIFBFUl9PU0Y0ID0gMHgwMDBmLAorIFBFUl9IUFVYID0gMHgwMDEwLAorIFBFUl9NQVNLID0gMHgwMGZmLAorfTsKKwordHlwZWRlZiB2b2lkICgqaGFuZGxlcl90KShpbnQsIHN0cnVjdCBwdF9yZWdzICopOworCitzdHJ1Y3QgZXhlY19kb21haW4geworIGNvbnN0IGNoYXIgKm5hbWU7CisgaGFuZGxlcl90IGhhbmRsZXI7CisgdW5zaWduZWQgY2hhciBwZXJzX2xvdzsKKyB1bnNpZ25lZCBjaGFyIHBlcnNfaGlnaDsKKyB1bnNpZ25lZCBsb25nICpzaWduYWxfbWFwOworIHVuc2lnbmVkIGxvbmcgKnNpZ25hbF9pbnZtYXA7Cisgc3RydWN0IG1hcF9zZWdtZW50ICplcnJfbWFwOworIHN0cnVjdCBtYXBfc2VnbWVudCAqc29ja3R5cGVfbWFwOworIHN0cnVjdCBtYXBfc2VnbWVudCAqc29ja29wdF9tYXA7Cisgc3RydWN0IG1hcF9zZWdtZW50ICphZl9tYXA7Cisgc3RydWN0IG1vZHVsZSAqbW9kdWxlOworIHN0cnVjdCBleGVjX2RvbWFpbiAqbmV4dDsKK307CisKKyNkZWZpbmUgcGVyc29uYWxpdHkocGVycykgKHBlcnMgJiBQRVJfTUFTSykKKworI2RlZmluZSBnZXRfcGVyc29uYWxpdHkgKGN1cnJlbnQtPnBlcnNvbmFsaXR5KQorCisjZGVmaW5lIHNldF9wZXJzb25hbGl0eShwZXJzKSAgICgoY3VycmVudC0+cGVyc29uYWxpdHkgPT0gcGVycykgPyAwIDogX19zZXRfcGVyc29uYWxpdHkocGVycykpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bma2V5djIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZmtleXYyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2FjOTQ4OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wZmtleXYyLmgKQEAgLTAsMCArMSwzMDYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BGS0VZMl9ICisjZGVmaW5lIF9MSU5VWF9QRktFWTJfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2RlZmluZSBQRl9LRVlfVjIgMgorI2RlZmluZSBQRktFWVYyX1JFVklTSU9OIDE5OTgwNkwKKworc3RydWN0IHNhZGJfbXNnIHsKKyB1aW50OF90IHNhZGJfbXNnX3ZlcnNpb247CisgdWludDhfdCBzYWRiX21zZ190eXBlOworIHVpbnQ4X3Qgc2FkYl9tc2dfZXJybm87CisgdWludDhfdCBzYWRiX21zZ19zYXR5cGU7CisgdWludDE2X3Qgc2FkYl9tc2dfbGVuOworIHVpbnQxNl90IHNhZGJfbXNnX3Jlc2VydmVkOworIHVpbnQzMl90IHNhZGJfbXNnX3NlcTsKKyB1aW50MzJfdCBzYWRiX21zZ19waWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9leHQgeworIHVpbnQxNl90IHNhZGJfZXh0X2xlbjsKKyB1aW50MTZfdCBzYWRiX2V4dF90eXBlOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfc2EgeworIHVpbnQxNl90IHNhZGJfc2FfbGVuOworIHVpbnQxNl90IHNhZGJfc2FfZXh0dHlwZTsKKyB1aW50MzJfdCBzYWRiX3NhX3NwaTsKKyB1aW50OF90IHNhZGJfc2FfcmVwbGF5OworIHVpbnQ4X3Qgc2FkYl9zYV9zdGF0ZTsKKyB1aW50OF90IHNhZGJfc2FfYXV0aDsKKyB1aW50OF90IHNhZGJfc2FfZW5jcnlwdDsKKyB1aW50MzJfdCBzYWRiX3NhX2ZsYWdzOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfbGlmZXRpbWUgeworIHVpbnQxNl90IHNhZGJfbGlmZXRpbWVfbGVuOworIHVpbnQxNl90IHNhZGJfbGlmZXRpbWVfZXh0dHlwZTsKKyB1aW50MzJfdCBzYWRiX2xpZmV0aW1lX2FsbG9jYXRpb25zOworIHVpbnQ2NF90IHNhZGJfbGlmZXRpbWVfYnl0ZXM7CisgdWludDY0X3Qgc2FkYl9saWZldGltZV9hZGR0aW1lOworIHVpbnQ2NF90IHNhZGJfbGlmZXRpbWVfdXNldGltZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2FkZHJlc3MgeworIHVpbnQxNl90IHNhZGJfYWRkcmVzc19sZW47CisgdWludDE2X3Qgc2FkYl9hZGRyZXNzX2V4dHR5cGU7CisgdWludDhfdCBzYWRiX2FkZHJlc3NfcHJvdG87CisgdWludDhfdCBzYWRiX2FkZHJlc3NfcHJlZml4bGVuOworIHVpbnQxNl90IHNhZGJfYWRkcmVzc19yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2tleSB7CisgdWludDE2X3Qgc2FkYl9rZXlfbGVuOworIHVpbnQxNl90IHNhZGJfa2V5X2V4dHR5cGU7CisgdWludDE2X3Qgc2FkYl9rZXlfYml0czsKKyB1aW50MTZfdCBzYWRiX2tleV9yZXNlcnZlZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2lkZW50IHsKKyB1aW50MTZfdCBzYWRiX2lkZW50X2xlbjsKKyB1aW50MTZfdCBzYWRiX2lkZW50X2V4dHR5cGU7CisgdWludDE2X3Qgc2FkYl9pZGVudF90eXBlOworIHVpbnQxNl90IHNhZGJfaWRlbnRfcmVzZXJ2ZWQ7CisgdWludDY0X3Qgc2FkYl9pZGVudF9pZDsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3NlbnMgeworIHVpbnQxNl90IHNhZGJfc2Vuc19sZW47CisgdWludDE2X3Qgc2FkYl9zZW5zX2V4dHR5cGU7CisgdWludDMyX3Qgc2FkYl9zZW5zX2RwZDsKKyB1aW50OF90IHNhZGJfc2Vuc19zZW5zX2xldmVsOworIHVpbnQ4X3Qgc2FkYl9zZW5zX3NlbnNfbGVuOworIHVpbnQ4X3Qgc2FkYl9zZW5zX2ludGVnX2xldmVsOworIHVpbnQ4X3Qgc2FkYl9zZW5zX2ludGVnX2xlbjsKKyB1aW50MzJfdCBzYWRiX3NlbnNfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9wcm9wIHsKKyB1aW50MTZfdCBzYWRiX3Byb3BfbGVuOworIHVpbnQxNl90IHNhZGJfcHJvcF9leHR0eXBlOworIHVpbnQ4X3Qgc2FkYl9wcm9wX3JlcGxheTsKKyB1aW50OF90IHNhZGJfcHJvcF9yZXNlcnZlZFszXTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX2NvbWIgeworIHVpbnQ4X3Qgc2FkYl9jb21iX2F1dGg7CisgdWludDhfdCBzYWRiX2NvbWJfZW5jcnlwdDsKKyB1aW50MTZfdCBzYWRiX2NvbWJfZmxhZ3M7CisgdWludDE2X3Qgc2FkYl9jb21iX2F1dGhfbWluYml0czsKKyB1aW50MTZfdCBzYWRiX2NvbWJfYXV0aF9tYXhiaXRzOworIHVpbnQxNl90IHNhZGJfY29tYl9lbmNyeXB0X21pbmJpdHM7CisgdWludDE2X3Qgc2FkYl9jb21iX2VuY3J5cHRfbWF4Yml0czsKKyB1aW50MzJfdCBzYWRiX2NvbWJfcmVzZXJ2ZWQ7CisgdWludDMyX3Qgc2FkYl9jb21iX3NvZnRfYWxsb2NhdGlvbnM7CisgdWludDMyX3Qgc2FkYl9jb21iX2hhcmRfYWxsb2NhdGlvbnM7CisgdWludDY0X3Qgc2FkYl9jb21iX3NvZnRfYnl0ZXM7CisgdWludDY0X3Qgc2FkYl9jb21iX2hhcmRfYnl0ZXM7CisgdWludDY0X3Qgc2FkYl9jb21iX3NvZnRfYWRkdGltZTsKKyB1aW50NjRfdCBzYWRiX2NvbWJfaGFyZF9hZGR0aW1lOworIHVpbnQ2NF90IHNhZGJfY29tYl9zb2Z0X3VzZXRpbWU7CisgdWludDY0X3Qgc2FkYl9jb21iX2hhcmRfdXNldGltZTsKK30gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CisKK3N0cnVjdCBzYWRiX3N1cHBvcnRlZCB7CisgdWludDE2X3Qgc2FkYl9zdXBwb3J0ZWRfbGVuOworIHVpbnQxNl90IHNhZGJfc3VwcG9ydGVkX2V4dHR5cGU7CisgdWludDMyX3Qgc2FkYl9zdXBwb3J0ZWRfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9hbGcgeworIHVpbnQ4X3Qgc2FkYl9hbGdfaWQ7CisgdWludDhfdCBzYWRiX2FsZ19pdmxlbjsKKyB1aW50MTZfdCBzYWRiX2FsZ19taW5iaXRzOworIHVpbnQxNl90IHNhZGJfYWxnX21heGJpdHM7CisgdWludDE2X3Qgc2FkYl9hbGdfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl9zcGlyYW5nZSB7CisgdWludDE2X3Qgc2FkYl9zcGlyYW5nZV9sZW47CisgdWludDE2X3Qgc2FkYl9zcGlyYW5nZV9leHR0eXBlOworIHVpbnQzMl90IHNhZGJfc3BpcmFuZ2VfbWluOworIHVpbnQzMl90IHNhZGJfc3BpcmFuZ2VfbWF4OworIHVpbnQzMl90IHNhZGJfc3BpcmFuZ2VfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X2ttcHJpdmF0ZSB7CisgdWludDE2X3Qgc2FkYl94X2ttcHJpdmF0ZV9sZW47CisgdWludDE2X3Qgc2FkYl94X2ttcHJpdmF0ZV9leHR0eXBlOworIHVpbnQzMl90IHNhZGJfeF9rbXByaXZhdGVfcmVzZXJ2ZWQ7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X3NhMiB7CisgdWludDE2X3Qgc2FkYl94X3NhMl9sZW47CisgdWludDE2X3Qgc2FkYl94X3NhMl9leHR0eXBlOworIHVpbnQ4X3Qgc2FkYl94X3NhMl9tb2RlOworIHVpbnQ4X3Qgc2FkYl94X3NhMl9yZXNlcnZlZDE7CisgdWludDE2X3Qgc2FkYl94X3NhMl9yZXNlcnZlZDI7CisgdWludDMyX3Qgc2FkYl94X3NhMl9zZXF1ZW5jZTsKKyB1aW50MzJfdCBzYWRiX3hfc2EyX3JlcWlkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfeF9wb2xpY3kgeworIHVpbnQxNl90IHNhZGJfeF9wb2xpY3lfbGVuOworIHVpbnQxNl90IHNhZGJfeF9wb2xpY3lfZXh0dHlwZTsKKyB1aW50MTZfdCBzYWRiX3hfcG9saWN5X3R5cGU7CisgdWludDhfdCBzYWRiX3hfcG9saWN5X2RpcjsKKyB1aW50OF90IHNhZGJfeF9wb2xpY3lfcmVzZXJ2ZWQ7CisgdWludDMyX3Qgc2FkYl94X3BvbGljeV9pZDsKKyB1aW50MzJfdCBzYWRiX3hfcG9saWN5X3ByaW9yaXR5OworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfeF9pcHNlY3JlcXVlc3QgeworIHVpbnQxNl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfbGVuOworIHVpbnQxNl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfcHJvdG87CisgdWludDhfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X21vZGU7CisgdWludDhfdCBzYWRiX3hfaXBzZWNyZXF1ZXN0X2xldmVsOworIHVpbnQxNl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfcmVzZXJ2ZWQxOworIHVpbnQzMl90IHNhZGJfeF9pcHNlY3JlcXVlc3RfcmVxaWQ7CisgdWludDMyX3Qgc2FkYl94X2lwc2VjcmVxdWVzdF9yZXNlcnZlZDI7Cit9IF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOworCitzdHJ1Y3Qgc2FkYl94X25hdF90X3R5cGUgeworIHVpbnQxNl90IHNhZGJfeF9uYXRfdF90eXBlX2xlbjsKKyB1aW50MTZfdCBzYWRiX3hfbmF0X3RfdHlwZV9leHR0eXBlOworIHVpbnQ4X3Qgc2FkYl94X25hdF90X3R5cGVfdHlwZTsKKyB1aW50OF90IHNhZGJfeF9uYXRfdF90eXBlX3Jlc2VydmVkWzNdOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfeF9uYXRfdF9wb3J0IHsKKyB1aW50MTZfdCBzYWRiX3hfbmF0X3RfcG9ydF9sZW47CisgdWludDE2X3Qgc2FkYl94X25hdF90X3BvcnRfZXh0dHlwZTsKKyB1aW50MTZfdCBzYWRiX3hfbmF0X3RfcG9ydF9wb3J0OworIHVpbnQxNl90IHNhZGJfeF9uYXRfdF9wb3J0X3Jlc2VydmVkOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RydWN0IHNhZGJfeF9zZWNfY3R4IHsKKyB1aW50MTZfdCBzYWRiX3hfc2VjX2xlbjsKKyB1aW50MTZfdCBzYWRiX3hfc2VjX2V4dHR5cGU7CisgdWludDhfdCBzYWRiX3hfY3R4X2FsZzsKKyB1aW50OF90IHNhZGJfeF9jdHhfZG9pOworIHVpbnQxNl90IHNhZGJfeF9jdHhfbGVuOworfSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworI2RlZmluZSBTQURCX1JFU0VSVkVEIDAKKyNkZWZpbmUgU0FEQl9HRVRTUEkgMQorI2RlZmluZSBTQURCX1VQREFURSAyCisjZGVmaW5lIFNBREJfQUREIDMKKyNkZWZpbmUgU0FEQl9ERUxFVEUgNAorI2RlZmluZSBTQURCX0dFVCA1CisjZGVmaW5lIFNBREJfQUNRVUlSRSA2CisjZGVmaW5lIFNBREJfUkVHSVNURVIgNworI2RlZmluZSBTQURCX0VYUElSRSA4CisjZGVmaW5lIFNBREJfRkxVU0ggOQorI2RlZmluZSBTQURCX0RVTVAgMTAKKyNkZWZpbmUgU0FEQl9YX1BST01JU0MgMTEKKyNkZWZpbmUgU0FEQl9YX1BDSEFOR0UgMTIKKyNkZWZpbmUgU0FEQl9YX1NQRFVQREFURSAxMworI2RlZmluZSBTQURCX1hfU1BEQUREIDE0CisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUgMTUKKyNkZWZpbmUgU0FEQl9YX1NQREdFVCAxNgorI2RlZmluZSBTQURCX1hfU1BEQUNRVUlSRSAxNworI2RlZmluZSBTQURCX1hfU1BERFVNUCAxOAorI2RlZmluZSBTQURCX1hfU1BERkxVU0ggMTkKKyNkZWZpbmUgU0FEQl9YX1NQRFNFVElEWCAyMAorI2RlZmluZSBTQURCX1hfU1BERVhQSVJFIDIxCisjZGVmaW5lIFNBREJfWF9TUERERUxFVEUyIDIyCisjZGVmaW5lIFNBREJfWF9OQVRfVF9ORVdfTUFQUElORyAyMworI2RlZmluZSBTQURCX01BWCAyMworCisjZGVmaW5lIFNBREJfU0FGTEFHU19QRlMgMQorI2RlZmluZSBTQURCX1NBRkxBR1NfTk9QTVRVRElTQyAweDIwMDAwMDAwCisjZGVmaW5lIFNBREJfU0FGTEFHU19ERUNBUF9EU0NQIDB4NDAwMDAwMDAKKyNkZWZpbmUgU0FEQl9TQUZMQUdTX05PRUNOIDB4ODAwMDAwMDAKKworI2RlZmluZSBTQURCX1NBU1RBVEVfTEFSVkFMIDAKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX01BVFVSRSAxCisjZGVmaW5lIFNBREJfU0FTVEFURV9EWUlORyAyCisjZGVmaW5lIFNBREJfU0FTVEFURV9ERUFEIDMKKyNkZWZpbmUgU0FEQl9TQVNUQVRFX01BWCAzCisKKyNkZWZpbmUgU0FEQl9TQVRZUEVfVU5TUEVDIDAKKyNkZWZpbmUgU0FEQl9TQVRZUEVfQUggMgorI2RlZmluZSBTQURCX1NBVFlQRV9FU1AgMworI2RlZmluZSBTQURCX1NBVFlQRV9SU1ZQIDUKKyNkZWZpbmUgU0FEQl9TQVRZUEVfT1NQRlYyIDYKKyNkZWZpbmUgU0FEQl9TQVRZUEVfUklQVjIgNworI2RlZmluZSBTQURCX1NBVFlQRV9NSVAgOAorI2RlZmluZSBTQURCX1hfU0FUWVBFX0lQQ09NUCA5CisjZGVmaW5lIFNBREJfU0FUWVBFX01BWCA5CisKKyNkZWZpbmUgU0FEQl9BQUxHX05PTkUgMAorI2RlZmluZSBTQURCX0FBTEdfTUQ1SE1BQyAyCisjZGVmaW5lIFNBREJfQUFMR19TSEExSE1BQyAzCisjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfMjU2SE1BQyA1CisjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfMzg0SE1BQyA2CisjZGVmaW5lIFNBREJfWF9BQUxHX1NIQTJfNTEySE1BQyA3CisjZGVmaW5lIFNBREJfWF9BQUxHX1JJUEVNRDE2MEhNQUMgOAorI2RlZmluZSBTQURCX1hfQUFMR19OVUxMIDI1MSAgCisjZGVmaW5lIFNBREJfQUFMR19NQVggMjUxCisKKyNkZWZpbmUgU0FEQl9FQUxHX05PTkUgMAorI2RlZmluZSBTQURCX0VBTEdfREVTQ0JDIDIKKyNkZWZpbmUgU0FEQl9FQUxHXzNERVNDQkMgMworI2RlZmluZSBTQURCX1hfRUFMR19DQVNUQ0JDIDYKKyNkZWZpbmUgU0FEQl9YX0VBTEdfQkxPV0ZJU0hDQkMgNworI2RlZmluZSBTQURCX0VBTEdfTlVMTCAxMQorI2RlZmluZSBTQURCX1hfRUFMR19BRVNDQkMgMTIKKyNkZWZpbmUgU0FEQl9FQUxHX01BWCAyNTMgIAorCisjZGVmaW5lIFNBREJfWF9FQUxHX1NFUlBFTlRDQkMgMjUyICAKKyNkZWZpbmUgU0FEQl9YX0VBTEdfVFdPRklTSENCQyAyNTMgIAorCisjZGVmaW5lIFNBREJfWF9DQUxHX05PTkUgMAorI2RlZmluZSBTQURCX1hfQ0FMR19PVUkgMQorI2RlZmluZSBTQURCX1hfQ0FMR19ERUZMQVRFIDIKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTFpTIDMKKyNkZWZpbmUgU0FEQl9YX0NBTEdfTFpKSCA0CisjZGVmaW5lIFNBREJfWF9DQUxHX01BWCA0CisKKyNkZWZpbmUgU0FEQl9FWFRfUkVTRVJWRUQgMAorI2RlZmluZSBTQURCX0VYVF9TQSAxCisjZGVmaW5lIFNBREJfRVhUX0xJRkVUSU1FX0NVUlJFTlQgMgorI2RlZmluZSBTQURCX0VYVF9MSUZFVElNRV9IQVJEIDMKKyNkZWZpbmUgU0FEQl9FWFRfTElGRVRJTUVfU09GVCA0CisjZGVmaW5lIFNBREJfRVhUX0FERFJFU1NfU1JDIDUKKyNkZWZpbmUgU0FEQl9FWFRfQUREUkVTU19EU1QgNgorI2RlZmluZSBTQURCX0VYVF9BRERSRVNTX1BST1hZIDcKKyNkZWZpbmUgU0FEQl9FWFRfS0VZX0FVVEggOAorI2RlZmluZSBTQURCX0VYVF9LRVlfRU5DUllQVCA5CisjZGVmaW5lIFNBREJfRVhUX0lERU5USVRZX1NSQyAxMAorI2RlZmluZSBTQURCX0VYVF9JREVOVElUWV9EU1QgMTEKKyNkZWZpbmUgU0FEQl9FWFRfU0VOU0lUSVZJVFkgMTIKKyNkZWZpbmUgU0FEQl9FWFRfUFJPUE9TQUwgMTMKKyNkZWZpbmUgU0FEQl9FWFRfU1VQUE9SVEVEX0FVVEggMTQKKyNkZWZpbmUgU0FEQl9FWFRfU1VQUE9SVEVEX0VOQ1JZUFQgMTUKKyNkZWZpbmUgU0FEQl9FWFRfU1BJUkFOR0UgMTYKKyNkZWZpbmUgU0FEQl9YX0VYVF9LTVBSSVZBVEUgMTcKKyNkZWZpbmUgU0FEQl9YX0VYVF9QT0xJQ1kgMTgKKyNkZWZpbmUgU0FEQl9YX0VYVF9TQTIgMTkKKworI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX1RZUEUgMjAKKyNkZWZpbmUgU0FEQl9YX0VYVF9OQVRfVF9TUE9SVCAyMQorI2RlZmluZSBTQURCX1hfRVhUX05BVF9UX0RQT1JUIDIyCisjZGVmaW5lIFNBREJfWF9FWFRfTkFUX1RfT0EgMjMKKyNkZWZpbmUgU0FEQl9YX0VYVF9TRUNfQ1RYIDI0CisjZGVmaW5lIFNBREJfRVhUX01BWCAyNAorCisjZGVmaW5lIFNBREJfSURFTlRUWVBFX1JFU0VSVkVEIDAKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfUFJFRklYIDEKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfRlFETiAyCisjZGVmaW5lIFNBREJfSURFTlRUWVBFX1VTRVJGUUROIDMKKyNkZWZpbmUgU0FEQl9JREVOVFRZUEVfTUFYIDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGt0X2Nscy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9jbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDFhNjgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9jbHMuaApAQCAtMCwwICsxLDM3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1BLVF9DTFNfSAorI2RlZmluZSBfX0xJTlVYX1BLVF9DTFNfSAorCisjaW5jbHVkZSA8bGludXgvcGt0X3NjaGVkLmg+CisKKyNkZWZpbmUgX1RDX01BS0UzMih4KSAoKHgpKQorCisjZGVmaW5lIF9UQ19NQUtFTUFTSzEobikgKF9UQ19NQUtFMzIoMSkgPDwgX1RDX01BS0UzMihuKSkKKyNkZWZpbmUgX1RDX01BS0VNQVNLKHYsbikgKF9UQ19NQUtFMzIoKF9UQ19NQUtFMzIoMSk8PCh2KSktMSkgPDwgX1RDX01BS0UzMihuKSkKKyNkZWZpbmUgX1RDX01BS0VWQUxVRSh2LG4pIChfVENfTUFLRTMyKHYpIDw8IF9UQ19NQUtFMzIobikpCisjZGVmaW5lIF9UQ19HRVRWQUxVRSh2LG4sbSkgKChfVENfTUFLRTMyKHYpICYgX1RDX01BS0UzMihtKSkgPj4gX1RDX01BS0UzMihuKSkKKworI2RlZmluZSBUQ19NVU5HRUQgX1RDX01BS0VNQVNLMSgwKQorI2RlZmluZSBTRVRfVENfTVVOR0VEKHYpICggVENfTVVOR0VEIHwgKHYgJiB+VENfTVVOR0VEKSkKKyNkZWZpbmUgQ0xSX1RDX01VTkdFRCh2KSAoIHYgJiB+VENfTVVOR0VEKQorCisjZGVmaW5lIFRDX09LMk1VTkdFIF9UQ19NQUtFTUFTSzEoMSkKKyNkZWZpbmUgU0VUX1RDX09LMk1VTkdFKHYpICggVENfT0syTVVOR0UgfCAodiAmIH5UQ19PSzJNVU5HRSkpCisjZGVmaW5lIENMUl9UQ19PSzJNVU5HRSh2KSAoIHYgJiB+VENfT0syTVVOR0UpCisKKyNkZWZpbmUgU19UQ19WRVJEIF9UQ19NQUtFMzIoMikKKyNkZWZpbmUgTV9UQ19WRVJEIF9UQ19NQUtFTUFTSyg0LFNfVENfVkVSRCkKKyNkZWZpbmUgR19UQ19WRVJEKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfVkVSRCxNX1RDX1ZFUkQpCisjZGVmaW5lIFZfVENfVkVSRCh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19WRVJEKQorI2RlZmluZSBTRVRfVENfVkVSRCh2LG4pICgoVl9UQ19WRVJEKG4pKSB8ICh2ICYgfk1fVENfVkVSRCkpCisKKyNkZWZpbmUgU19UQ19GUk9NIF9UQ19NQUtFMzIoNikKKyNkZWZpbmUgTV9UQ19GUk9NIF9UQ19NQUtFTUFTSygyLFNfVENfRlJPTSkKKyNkZWZpbmUgR19UQ19GUk9NKHgpIF9UQ19HRVRWQUxVRSh4LFNfVENfRlJPTSxNX1RDX0ZST00pCisjZGVmaW5lIFZfVENfRlJPTSh4KSBfVENfTUFLRVZBTFVFKHgsU19UQ19GUk9NKQorI2RlZmluZSBTRVRfVENfRlJPTSh2LG4pICgoVl9UQ19GUk9NKG4pKSB8ICh2ICYgfk1fVENfRlJPTSkpCisjZGVmaW5lIEFUX1NUQUNLIDB4MAorI2RlZmluZSBBVF9JTkdSRVNTIDB4MQorI2RlZmluZSBBVF9FR1JFU1MgMHgyCisKKyNkZWZpbmUgVENfTkNMUyBfVENfTUFLRU1BU0sxKDgpCisjZGVmaW5lIFNFVF9UQ19OQ0xTKHYpICggVENfTkNMUyB8ICh2ICYgflRDX05DTFMpKQorI2RlZmluZSBDTFJfVENfTkNMUyh2KSAoIHYgJiB+VENfTkNMUykKKworI2RlZmluZSBTX1RDX1JUVEwgX1RDX01BS0UzMig5KQorI2RlZmluZSBNX1RDX1JUVEwgX1RDX01BS0VNQVNLKDMsU19UQ19SVFRMKQorI2RlZmluZSBHX1RDX1JUVEwoeCkgX1RDX0dFVFZBTFVFKHgsU19UQ19SVFRMLE1fVENfUlRUTCkKKyNkZWZpbmUgVl9UQ19SVFRMKHgpIF9UQ19NQUtFVkFMVUUoeCxTX1RDX1JUVEwpCisjZGVmaW5lIFNFVF9UQ19SVFRMKHYsbikgKChWX1RDX1JUVEwobikpIHwgKHYgJiB+TV9UQ19SVFRMKSkKKworI2RlZmluZSBTX1RDX0FUIF9UQ19NQUtFMzIoMTIpCisjZGVmaW5lIE1fVENfQVQgX1RDX01BS0VNQVNLKDIsU19UQ19BVCkKKyNkZWZpbmUgR19UQ19BVCh4KSBfVENfR0VUVkFMVUUoeCxTX1RDX0FULE1fVENfQVQpCisjZGVmaW5lIFZfVENfQVQoeCkgX1RDX01BS0VWQUxVRSh4LFNfVENfQVQpCisjZGVmaW5lIFNFVF9UQ19BVCh2LG4pICgoVl9UQ19BVChuKSkgfCAodiAmIH5NX1RDX0FUKSkKKworZW51bQoreworIFRDQV9BQ1RfVU5TUEVDLAorIFRDQV9BQ1RfS0lORCwKKyBUQ0FfQUNUX09QVElPTlMsCisgVENBX0FDVF9JTkRFWCwKKyBUQ0FfQUNUX1NUQVRTLAorIF9fVENBX0FDVF9NQVgKK307CisKKyNkZWZpbmUgVENBX0FDVF9NQVggX19UQ0FfQUNUX01BWAorI2RlZmluZSBUQ0FfT0xEX0NPTVBBVCAoVENBX0FDVF9NQVgrMSkKKyNkZWZpbmUgVENBX0FDVF9NQVhfUFJJTyAzMgorI2RlZmluZSBUQ0FfQUNUX0JJTkQgMQorI2RlZmluZSBUQ0FfQUNUX05PQklORCAwCisjZGVmaW5lIFRDQV9BQ1RfVU5CSU5EIDEKKyNkZWZpbmUgVENBX0FDVF9OT1VOQklORCAwCisjZGVmaW5lIFRDQV9BQ1RfUkVQTEFDRSAxCisjZGVmaW5lIFRDQV9BQ1RfTk9SRVBMQUNFIDAKKyNkZWZpbmUgTUFYX1JFQ19MT09QIDQKKyNkZWZpbmUgTUFYX1JFRF9MT09QIDQKKworI2RlZmluZSBUQ19BQ1RfVU5TUEVDICgtMSkKKyNkZWZpbmUgVENfQUNUX09LIDAKKyNkZWZpbmUgVENfQUNUX1JFQ0xBU1NJRlkgMQorI2RlZmluZSBUQ19BQ1RfU0hPVCAyCisjZGVmaW5lIFRDX0FDVF9QSVBFIDMKKyNkZWZpbmUgVENfQUNUX1NUT0xFTiA0CisjZGVmaW5lIFRDX0FDVF9RVUVVRUQgNQorI2RlZmluZSBUQ19BQ1RfUkVQRUFUIDYKKyNkZWZpbmUgVENfQUNUX0pVTVAgMHgxMDAwMDAwMAorCitlbnVtCit7CisgVENBX0lEX1VOU1BFQz0wLAorIFRDQV9JRF9QT0xJQ0U9MSwKKworIF9fVENBX0lEX01BWD0yNTUKK307CisKKyNkZWZpbmUgVENBX0lEX01BWCBfX1RDQV9JRF9NQVgKKworc3RydWN0IHRjX3BvbGljZQoreworIF9fdTMyIGluZGV4OworIGludCBhY3Rpb247CisjZGVmaW5lIFRDX1BPTElDRV9VTlNQRUMgVENfQUNUX1VOU1BFQworI2RlZmluZSBUQ19QT0xJQ0VfT0sgVENfQUNUX09LCisjZGVmaW5lIFRDX1BPTElDRV9SRUNMQVNTSUZZIFRDX0FDVF9SRUNMQVNTSUZZCisjZGVmaW5lIFRDX1BPTElDRV9TSE9UIFRDX0FDVF9TSE9UCisjZGVmaW5lIFRDX1BPTElDRV9QSVBFIFRDX0FDVF9QSVBFCisKKyBfX3UzMiBsaW1pdDsKKyBfX3UzMiBidXJzdDsKKyBfX3UzMiBtdHU7Cisgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7Cisgc3RydWN0IHRjX3JhdGVzcGVjIHBlYWtyYXRlOworIGludCByZWZjbnQ7CisgaW50IGJpbmRjbnQ7CisgX191MzIgY2FwYWI7Cit9OworCitzdHJ1Y3QgdGNmX3QKK3sKKyBfX3U2NCBpbnN0YWxsOworIF9fdTY0IGxhc3R1c2U7CisgX191NjQgZXhwaXJlczsKK307CisKK3N0cnVjdCB0Y19jbnQKK3sKKyBpbnQgcmVmY250OworIGludCBiaW5kY250OworfTsKKworI2RlZmluZSB0Y19nZW4gICBfX3UzMiBpbmRleDsgICBfX3UzMiBjYXBhYjsgICBpbnQgYWN0aW9uOyAgIGludCByZWZjbnQ7ICAgaW50IGJpbmRjbnQKKworZW51bQoreworIFRDQV9QT0xJQ0VfVU5TUEVDLAorIFRDQV9QT0xJQ0VfVEJGLAorIFRDQV9QT0xJQ0VfUkFURSwKKyBUQ0FfUE9MSUNFX1BFQUtSQVRFLAorIFRDQV9QT0xJQ0VfQVZSQVRFLAorIFRDQV9QT0xJQ0VfUkVTVUxULAorIF9fVENBX1BPTElDRV9NQVgKKyNkZWZpbmUgVENBX1BPTElDRV9SRVNVTFQgVENBX1BPTElDRV9SRVNVTFQKK307CisKKyNkZWZpbmUgVENBX1BPTElDRV9NQVggKF9fVENBX1BPTElDRV9NQVggLSAxKQorCisjZGVmaW5lIFRDX1UzMl9IVElEKGgpICgoaCkmMHhGRkYwMDAwMCkKKyNkZWZpbmUgVENfVTMyX1VTRVJIVElEKGgpIChUQ19VMzJfSFRJRChoKT4+MjApCisjZGVmaW5lIFRDX1UzMl9IQVNIKGgpICgoKGgpPj4xMikmMHhGRikKKyNkZWZpbmUgVENfVTMyX05PREUoaCkgKChoKSYweEZGRikKKyNkZWZpbmUgVENfVTMyX0tFWShoKSAoKGgpJjB4RkZGRkYpCisjZGVmaW5lIFRDX1UzMl9VTlNQRUMgMAorI2RlZmluZSBUQ19VMzJfUk9PVCAoMHhGRkYwMDAwMCkKKworZW51bQoreworIFRDQV9VMzJfVU5TUEVDLAorIFRDQV9VMzJfQ0xBU1NJRCwKKyBUQ0FfVTMyX0hBU0gsCisgVENBX1UzMl9MSU5LLAorIFRDQV9VMzJfRElWSVNPUiwKKyBUQ0FfVTMyX1NFTCwKKyBUQ0FfVTMyX1BPTElDRSwKKyBUQ0FfVTMyX0FDVCwKKyBUQ0FfVTMyX0lOREVWLAorIFRDQV9VMzJfUENOVCwKKyBUQ0FfVTMyX01BUkssCisgX19UQ0FfVTMyX01BWAorfTsKKworI2RlZmluZSBUQ0FfVTMyX01BWCAoX19UQ0FfVTMyX01BWCAtIDEpCisKK3N0cnVjdCB0Y191MzJfa2V5Cit7CisgX191MzIgbWFzazsKKyBfX3UzMiB2YWw7CisgaW50IG9mZjsKKyBpbnQgb2ZmbWFzazsKK307CisKK3N0cnVjdCB0Y191MzJfc2VsCit7CisgdW5zaWduZWQgY2hhciBmbGFnczsKKyB1bnNpZ25lZCBjaGFyIG9mZnNoaWZ0OworIHVuc2lnbmVkIGNoYXIgbmtleXM7CisKKyBfX3UxNiBvZmZtYXNrOworIF9fdTE2IG9mZjsKKyBzaG9ydCBvZmZvZmY7CisKKyBzaG9ydCBob2ZmOworIF9fdTMyIGhtYXNrOworIHN0cnVjdCB0Y191MzJfa2V5IGtleXNbMF07Cit9OworCitzdHJ1Y3QgdGNfdTMyX21hcmsKK3sKKyBfX3UzMiB2YWw7CisgX191MzIgbWFzazsKKyBfX3UzMiBzdWNjZXNzOworfTsKKworc3RydWN0IHRjX3UzMl9wY250Cit7CisgX191NjQgcmNudDsKKyBfX3U2NCByaGl0OworIF9fdTY0IGtjbnRzWzBdOworfTsKKworI2RlZmluZSBUQ19VMzJfVEVSTUlOQUwgMQorI2RlZmluZSBUQ19VMzJfT0ZGU0VUIDIKKyNkZWZpbmUgVENfVTMyX1ZBUk9GRlNFVCA0CisjZGVmaW5lIFRDX1UzMl9FQVQgOAorCisjZGVmaW5lIFRDX1UzMl9NQVhERVBUSCA4CisKK2VudW0KK3sKKyBUQ0FfUlNWUF9VTlNQRUMsCisgVENBX1JTVlBfQ0xBU1NJRCwKKyBUQ0FfUlNWUF9EU1QsCisgVENBX1JTVlBfU1JDLAorIFRDQV9SU1ZQX1BJTkZPLAorIFRDQV9SU1ZQX1BPTElDRSwKKyBUQ0FfUlNWUF9BQ1QsCisgX19UQ0FfUlNWUF9NQVgKK307CisKKyNkZWZpbmUgVENBX1JTVlBfTUFYIChfX1RDQV9SU1ZQX01BWCAtIDEgKQorCitzdHJ1Y3QgdGNfcnN2cF9ncGkKK3sKKyBfX3UzMiBrZXk7CisgX191MzIgbWFzazsKKyBpbnQgb2Zmc2V0OworfTsKKworc3RydWN0IHRjX3JzdnBfcGluZm8KK3sKKyBzdHJ1Y3QgdGNfcnN2cF9ncGkgZHBpOworIHN0cnVjdCB0Y19yc3ZwX2dwaSBzcGk7CisgX191OCBwcm90b2NvbDsKKyBfX3U4IHR1bm5lbGlkOworIF9fdTggdHVubmVsaGRyOworIF9fdTggcGFkOworfTsKKworZW51bQoreworIFRDQV9ST1VURTRfVU5TUEVDLAorIFRDQV9ST1VURTRfQ0xBU1NJRCwKKyBUQ0FfUk9VVEU0X1RPLAorIFRDQV9ST1VURTRfRlJPTSwKKyBUQ0FfUk9VVEU0X0lJRiwKKyBUQ0FfUk9VVEU0X1BPTElDRSwKKyBUQ0FfUk9VVEU0X0FDVCwKKyBfX1RDQV9ST1VURTRfTUFYCit9OworCisjZGVmaW5lIFRDQV9ST1VURTRfTUFYIChfX1RDQV9ST1VURTRfTUFYIC0gMSkKKworZW51bQoreworIFRDQV9GV19VTlNQRUMsCisgVENBX0ZXX0NMQVNTSUQsCisgVENBX0ZXX1BPTElDRSwKKyBUQ0FfRldfSU5ERVYsCisgVENBX0ZXX0FDVCwKKyBfX1RDQV9GV19NQVgKK307CisKKyNkZWZpbmUgVENBX0ZXX01BWCAoX19UQ0FfRldfTUFYIC0gMSkKKworZW51bQoreworIFRDQV9UQ0lOREVYX1VOU1BFQywKKyBUQ0FfVENJTkRFWF9IQVNILAorIFRDQV9UQ0lOREVYX01BU0ssCisgVENBX1RDSU5ERVhfU0hJRlQsCisgVENBX1RDSU5ERVhfRkFMTF9USFJPVUdILAorIFRDQV9UQ0lOREVYX0NMQVNTSUQsCisgVENBX1RDSU5ERVhfUE9MSUNFLAorIFRDQV9UQ0lOREVYX0FDVCwKKyBfX1RDQV9UQ0lOREVYX01BWAorfTsKKworI2RlZmluZSBUQ0FfVENJTkRFWF9NQVggKF9fVENBX1RDSU5ERVhfTUFYIC0gMSkKKworZW51bQoreworIFRDQV9CQVNJQ19VTlNQRUMsCisgVENBX0JBU0lDX0NMQVNTSUQsCisgVENBX0JBU0lDX0VNQVRDSEVTLAorIFRDQV9CQVNJQ19BQ1QsCisgVENBX0JBU0lDX1BPTElDRSwKKyBfX1RDQV9CQVNJQ19NQVgKK307CisKKyNkZWZpbmUgVENBX0JBU0lDX01BWCAoX19UQ0FfQkFTSUNfTUFYIC0gMSkKKworc3RydWN0IHRjZl9lbWF0Y2hfdHJlZV9oZHIKK3sKKyBfX3UxNiBubWF0Y2hlczsKKyBfX3UxNiBwcm9naWQ7Cit9OworCitlbnVtCit7CisgVENBX0VNQVRDSF9UUkVFX1VOU1BFQywKKyBUQ0FfRU1BVENIX1RSRUVfSERSLAorIFRDQV9FTUFUQ0hfVFJFRV9MSVNULAorIF9fVENBX0VNQVRDSF9UUkVFX01BWAorfTsKKyNkZWZpbmUgVENBX0VNQVRDSF9UUkVFX01BWCAoX19UQ0FfRU1BVENIX1RSRUVfTUFYIC0gMSkKKworc3RydWN0IHRjZl9lbWF0Y2hfaGRyCit7CisgX191MTYgbWF0Y2hpZDsKKyBfX3UxNiBraW5kOworIF9fdTE2IGZsYWdzOworIF9fdTE2IHBhZDsKK307CisKKyNkZWZpbmUgVENGX0VNX1JFTF9FTkQgMAorI2RlZmluZSBUQ0ZfRU1fUkVMX0FORCAoMTw8MCkKKyNkZWZpbmUgVENGX0VNX1JFTF9PUiAoMTw8MSkKKyNkZWZpbmUgVENGX0VNX0lOVkVSVCAoMTw8MikKKyNkZWZpbmUgVENGX0VNX1NJTVBMRSAoMTw8MykKKworI2RlZmluZSBUQ0ZfRU1fUkVMX01BU0sgMworI2RlZmluZSBUQ0ZfRU1fUkVMX1ZBTElEKHYpICgoKHYpICYgVENGX0VNX1JFTF9NQVNLKSAhPSBUQ0ZfRU1fUkVMX01BU0spCisKK2VudW0KK3sKKyBUQ0ZfTEFZRVJfTElOSywKKyBUQ0ZfTEFZRVJfTkVUV09SSywKKyBUQ0ZfTEFZRVJfVFJBTlNQT1JULAorIF9fVENGX0xBWUVSX01BWAorfTsKKyNkZWZpbmUgVENGX0xBWUVSX01BWCAoX19UQ0ZfTEFZRVJfTUFYIC0gMSkKKworZW51bQoreworIFRDRl9FTV9DT05UQUlORVIsCisgVENGX0VNX0NNUCwKKyBUQ0ZfRU1fTkJZVEUsCisgVENGX0VNX1UzMiwKKyBUQ0ZfRU1fTUVUQSwKKyBUQ0ZfRU1fVEVYVCwKKyBfX1RDRl9FTV9NQVgKK307CisKK2VudW0KK3sKKyBUQ0ZfRU1fUFJPR19UQworfTsKKworZW51bQoreworIFRDRl9FTV9PUE5EX0VRLAorIFRDRl9FTV9PUE5EX0dULAorIFRDRl9FTV9PUE5EX0xUCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3Rfc2NoZWQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wa3Rfc2NoZWQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZTE1ZDgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BrdF9zY2hlZC5oCkBAIC0wLDAgKzEsNDA1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUEtUX1NDSEVEX0gKKyNkZWZpbmUgX19MSU5VWF9QS1RfU0NIRURfSAorCisjZGVmaW5lIFRDX1BSSU9fQkVTVEVGRk9SVCAwCisjZGVmaW5lIFRDX1BSSU9fRklMTEVSIDEKKyNkZWZpbmUgVENfUFJJT19CVUxLIDIKKyNkZWZpbmUgVENfUFJJT19JTlRFUkFDVElWRV9CVUxLIDQKKyNkZWZpbmUgVENfUFJJT19JTlRFUkFDVElWRSA2CisjZGVmaW5lIFRDX1BSSU9fQ09OVFJPTCA3CisKKyNkZWZpbmUgVENfUFJJT19NQVggMTUKKworc3RydWN0IHRjX3N0YXRzCit7CisgX191NjQgYnl0ZXM7CisgX191MzIgcGFja2V0czsKKyBfX3UzMiBkcm9wczsKKyBfX3UzMiBvdmVybGltaXRzOworIF9fdTMyIGJwczsKKyBfX3UzMiBwcHM7CisgX191MzIgcWxlbjsKKyBfX3UzMiBiYWNrbG9nOworfTsKKworc3RydWN0IHRjX2VzdGltYXRvcgoreworIHNpZ25lZCBjaGFyIGludGVydmFsOworIHVuc2lnbmVkIGNoYXIgZXdtYV9sb2c7Cit9OworCisjZGVmaW5lIFRDX0hfTUFKX01BU0sgKDB4RkZGRjAwMDBVKQorI2RlZmluZSBUQ19IX01JTl9NQVNLICgweDAwMDBGRkZGVSkKKyNkZWZpbmUgVENfSF9NQUooaCkgKChoKSZUQ19IX01BSl9NQVNLKQorI2RlZmluZSBUQ19IX01JTihoKSAoKGgpJlRDX0hfTUlOX01BU0spCisjZGVmaW5lIFRDX0hfTUFLRShtYWosbWluKSAoKChtYWopJlRDX0hfTUFKX01BU0spfCgobWluKSZUQ19IX01JTl9NQVNLKSkKKworI2RlZmluZSBUQ19IX1VOU1BFQyAoMFUpCisjZGVmaW5lIFRDX0hfUk9PVCAoMHhGRkZGRkZGRlUpCisjZGVmaW5lIFRDX0hfSU5HUkVTUyAoMHhGRkZGRkZGMVUpCisKK3N0cnVjdCB0Y19yYXRlc3BlYworeworIHVuc2lnbmVkIGNoYXIgY2VsbF9sb2c7CisgdW5zaWduZWQgY2hhciBfX3Jlc2VydmVkOworIHVuc2lnbmVkIHNob3J0IGZlYXR1cmU7Cisgc2hvcnQgYWRkZW5kOworIHVuc2lnbmVkIHNob3J0IG1wdTsKKyBfX3UzMiByYXRlOworfTsKKworc3RydWN0IHRjX2ZpZm9fcW9wdAoreworIF9fdTMyIGxpbWl0OworfTsKKworI2RlZmluZSBUQ1FfUFJJT19CQU5EUyAxNgorI2RlZmluZSBUQ1FfTUlOX1BSSU9fQkFORFMgMgorCitzdHJ1Y3QgdGNfcHJpb19xb3B0Cit7CisgaW50IGJhbmRzOworIF9fdTggcHJpb21hcFtUQ19QUklPX01BWCsxXTsKK307CisKK3N0cnVjdCB0Y190YmZfcW9wdAoreworIHN0cnVjdCB0Y19yYXRlc3BlYyByYXRlOworIHN0cnVjdCB0Y19yYXRlc3BlYyBwZWFrcmF0ZTsKKyBfX3UzMiBsaW1pdDsKKyBfX3UzMiBidWZmZXI7CisgX191MzIgbXR1OworfTsKKworZW51bQoreworIFRDQV9UQkZfVU5TUEVDLAorIFRDQV9UQkZfUEFSTVMsCisgVENBX1RCRl9SVEFCLAorIFRDQV9UQkZfUFRBQiwKKyBfX1RDQV9UQkZfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfVEJGX01BWCAoX19UQ0FfVEJGX01BWCAtIDEpCisKK3N0cnVjdCB0Y19zZnFfcW9wdAoreworIHVuc2lnbmVkIHF1YW50dW07CisgaW50IHBlcnR1cmJfcGVyaW9kOworIF9fdTMyIGxpbWl0OworIHVuc2lnbmVkIGRpdmlzb3I7CisgdW5zaWduZWQgZmxvd3M7Cit9OworCitlbnVtCit7CisgVENBX1JFRF9VTlNQRUMsCisgVENBX1JFRF9QQVJNUywKKyBUQ0FfUkVEX1NUQUIsCisgX19UQ0FfUkVEX01BWCwKK307CisKKyNkZWZpbmUgVENBX1JFRF9NQVggKF9fVENBX1JFRF9NQVggLSAxKQorCitzdHJ1Y3QgdGNfcmVkX3FvcHQKK3sKKyBfX3UzMiBsaW1pdDsKKyBfX3UzMiBxdGhfbWluOworIF9fdTMyIHF0aF9tYXg7CisgdW5zaWduZWQgY2hhciBXbG9nOworIHVuc2lnbmVkIGNoYXIgUGxvZzsKKyB1bnNpZ25lZCBjaGFyIFNjZWxsX2xvZzsKKyB1bnNpZ25lZCBjaGFyIGZsYWdzOworI2RlZmluZSBUQ19SRURfRUNOIDEKKyNkZWZpbmUgVENfUkVEX0hBUkREUk9QIDIKK307CisKK3N0cnVjdCB0Y19yZWRfeHN0YXRzCit7CisgX191MzIgZWFybHk7CisgX191MzIgcGRyb3A7CisgX191MzIgb3RoZXI7CisgX191MzIgbWFya2VkOworfTsKKworI2RlZmluZSBNQVhfRFBzIDE2CisKK2VudW0KK3sKKyBUQ0FfR1JFRF9VTlNQRUMsCisgVENBX0dSRURfUEFSTVMsCisgVENBX0dSRURfU1RBQiwKKyBUQ0FfR1JFRF9EUFMsCisgX19UQ0FfR1JFRF9NQVgsCit9OworCisjZGVmaW5lIFRDQV9HUkVEX01BWCAoX19UQ0FfR1JFRF9NQVggLSAxKQorCitzdHJ1Y3QgdGNfZ3JlZF9xb3B0Cit7CisgX191MzIgbGltaXQ7CisgX191MzIgcXRoX21pbjsKKyBfX3UzMiBxdGhfbWF4OworIF9fdTMyIERQOworIF9fdTMyIGJhY2tsb2c7CisgX191MzIgcWF2ZTsKKyBfX3UzMiBmb3JjZWQ7CisgX191MzIgZWFybHk7CisgX191MzIgb3RoZXI7CisgX191MzIgcGRyb3A7CisgX191OCBXbG9nOworIF9fdTggUGxvZzsKKyBfX3U4IFNjZWxsX2xvZzsKKyBfX3U4IHByaW87CisgX191MzIgcGFja2V0czsKKyBfX3UzMiBieXRlc2luOworfTsKKworc3RydWN0IHRjX2dyZWRfc29wdAoreworIF9fdTMyIERQczsKKyBfX3UzMiBkZWZfRFA7CisgX191OCBncmlvOworIF9fdTggZmxhZ3M7CisgX191MTYgcGFkMTsKK307CisKKyNkZWZpbmUgVENfSFRCX05VTVBSSU8gOAorI2RlZmluZSBUQ19IVEJfTUFYREVQVEggOAorI2RlZmluZSBUQ19IVEJfUFJPVE9WRVIgMyAgCisKK3N0cnVjdCB0Y19odGJfb3B0Cit7Cisgc3RydWN0IHRjX3JhdGVzcGVjIHJhdGU7Cisgc3RydWN0IHRjX3JhdGVzcGVjIGNlaWw7CisgX191MzIgYnVmZmVyOworIF9fdTMyIGNidWZmZXI7CisgX191MzIgcXVhbnR1bTsKKyBfX3UzMiBsZXZlbDsKKyBfX3UzMiBwcmlvOworfTsKK3N0cnVjdCB0Y19odGJfZ2xvYgoreworIF9fdTMyIHZlcnNpb247CisgX191MzIgcmF0ZTJxdWFudHVtOworIF9fdTMyIGRlZmNsczsKKyBfX3UzMiBkZWJ1ZzsKKworIF9fdTMyIGRpcmVjdF9wa3RzOworfTsKK2VudW0KK3sKKyBUQ0FfSFRCX1VOU1BFQywKKyBUQ0FfSFRCX1BBUk1TLAorIFRDQV9IVEJfSU5JVCwKKyBUQ0FfSFRCX0NUQUIsCisgVENBX0hUQl9SVEFCLAorIF9fVENBX0hUQl9NQVgsCit9OworCisjZGVmaW5lIFRDQV9IVEJfTUFYIChfX1RDQV9IVEJfTUFYIC0gMSkKKworc3RydWN0IHRjX2h0Yl94c3RhdHMKK3sKKyBfX3UzMiBsZW5kczsKKyBfX3UzMiBib3Jyb3dzOworIF9fdTMyIGdpYW50czsKKyBfX3UzMiB0b2tlbnM7CisgX191MzIgY3Rva2VuczsKK307CisKK3N0cnVjdCB0Y19oZnNjX3FvcHQKK3sKKyBfX3UxNiBkZWZjbHM7Cit9OworCitzdHJ1Y3QgdGNfc2VydmljZV9jdXJ2ZQoreworIF9fdTMyIG0xOworIF9fdTMyIGQ7CisgX191MzIgbTI7Cit9OworCitzdHJ1Y3QgdGNfaGZzY19zdGF0cworeworIF9fdTY0IHdvcms7CisgX191NjQgcnR3b3JrOworIF9fdTMyIHBlcmlvZDsKKyBfX3UzMiBsZXZlbDsKK307CisKK2VudW0KK3sKKyBUQ0FfSEZTQ19VTlNQRUMsCisgVENBX0hGU0NfUlNDLAorIFRDQV9IRlNDX0ZTQywKKyBUQ0FfSEZTQ19VU0MsCisgX19UQ0FfSEZTQ19NQVgsCit9OworCisjZGVmaW5lIFRDQV9IRlNDX01BWCAoX19UQ0FfSEZTQ19NQVggLSAxKQorCisjZGVmaW5lIFRDX0NCUV9NQVhQUklPIDgKKyNkZWZpbmUgVENfQ0JRX01BWExFVkVMIDgKKyNkZWZpbmUgVENfQ0JRX0RFRl9FV01BIDUKKworc3RydWN0IHRjX2NicV9sc3NvcHQKK3sKKyB1bnNpZ25lZCBjaGFyIGNoYW5nZTsKKyB1bnNpZ25lZCBjaGFyIGZsYWdzOworI2RlZmluZSBUQ0ZfQ0JRX0xTU19CT1VOREVEIDEKKyNkZWZpbmUgVENGX0NCUV9MU1NfSVNPTEFURUQgMgorIHVuc2lnbmVkIGNoYXIgZXdtYV9sb2c7CisgdW5zaWduZWQgY2hhciBsZXZlbDsKKyNkZWZpbmUgVENGX0NCUV9MU1NfRkxBR1MgMQorI2RlZmluZSBUQ0ZfQ0JRX0xTU19FV01BIDIKKyNkZWZpbmUgVENGX0NCUV9MU1NfTUFYSURMRSA0CisjZGVmaW5lIFRDRl9DQlFfTFNTX01JTklETEUgOAorI2RlZmluZSBUQ0ZfQ0JRX0xTU19PRkZUSU1FIDB4MTAKKyNkZWZpbmUgVENGX0NCUV9MU1NfQVZQS1QgMHgyMAorIF9fdTMyIG1heGlkbGU7CisgX191MzIgbWluaWRsZTsKKyBfX3UzMiBvZmZ0aW1lOworIF9fdTMyIGF2cGt0OworfTsKKworc3RydWN0IHRjX2NicV93cnJvcHQKK3sKKyB1bnNpZ25lZCBjaGFyIGZsYWdzOworIHVuc2lnbmVkIGNoYXIgcHJpb3JpdHk7CisgdW5zaWduZWQgY2hhciBjcHJpb3JpdHk7CisgdW5zaWduZWQgY2hhciBfX3Jlc2VydmVkOworIF9fdTMyIGFsbG90OworIF9fdTMyIHdlaWdodDsKK307CisKK3N0cnVjdCB0Y19jYnFfb3ZsCit7CisgdW5zaWduZWQgY2hhciBzdHJhdGVneTsKKyNkZWZpbmUgVENfQ0JRX09WTF9DTEFTU0lDIDAKKyNkZWZpbmUgVENfQ0JRX09WTF9ERUxBWSAxCisjZGVmaW5lIFRDX0NCUV9PVkxfTE9XUFJJTyAyCisjZGVmaW5lIFRDX0NCUV9PVkxfRFJPUCAzCisjZGVmaW5lIFRDX0NCUV9PVkxfUkNMQVNTSUMgNAorIHVuc2lnbmVkIGNoYXIgcHJpb3JpdHkyOworIF9fdTE2IHBhZDsKKyBfX3UzMiBwZW5hbHR5OworfTsKKworc3RydWN0IHRjX2NicV9wb2xpY2UKK3sKKyB1bnNpZ25lZCBjaGFyIHBvbGljZTsKKyB1bnNpZ25lZCBjaGFyIF9fcmVzMTsKKyB1bnNpZ25lZCBzaG9ydCBfX3JlczI7Cit9OworCitzdHJ1Y3QgdGNfY2JxX2ZvcHQKK3sKKyBfX3UzMiBzcGxpdDsKKyBfX3UzMiBkZWZtYXA7CisgX191MzIgZGVmY2hhbmdlOworfTsKKworc3RydWN0IHRjX2NicV94c3RhdHMKK3sKKyBfX3UzMiBib3Jyb3dzOworIF9fdTMyIG92ZXJhY3Rpb25zOworIF9fczMyIGF2Z2lkbGU7CisgX19zMzIgdW5kZXJ0aW1lOworfTsKKworZW51bQoreworIFRDQV9DQlFfVU5TUEVDLAorIFRDQV9DQlFfTFNTT1BULAorIFRDQV9DQlFfV1JST1BULAorIFRDQV9DQlFfRk9QVCwKKyBUQ0FfQ0JRX09WTF9TVFJBVEVHWSwKKyBUQ0FfQ0JRX1JBVEUsCisgVENBX0NCUV9SVEFCLAorIFRDQV9DQlFfUE9MSUNFLAorIF9fVENBX0NCUV9NQVgsCit9OworCisjZGVmaW5lIFRDQV9DQlFfTUFYIChfX1RDQV9DQlFfTUFYIC0gMSkKKworZW51bSB7CisgVENBX0RTTUFSS19VTlNQRUMsCisgVENBX0RTTUFSS19JTkRJQ0VTLAorIFRDQV9EU01BUktfREVGQVVMVF9JTkRFWCwKKyBUQ0FfRFNNQVJLX1NFVF9UQ19JTkRFWCwKKyBUQ0FfRFNNQVJLX01BU0ssCisgVENBX0RTTUFSS19WQUxVRSwKKyBfX1RDQV9EU01BUktfTUFYLAorfTsKKworI2RlZmluZSBUQ0FfRFNNQVJLX01BWCAoX19UQ0FfRFNNQVJLX01BWCAtIDEpCisKK2VudW0geworIFRDQV9BVE1fVU5TUEVDLAorIFRDQV9BVE1fRkQsCisgVENBX0FUTV9QVFIsCisgVENBX0FUTV9IRFIsCisgVENBX0FUTV9FWENFU1MsCisgVENBX0FUTV9BRERSLAorIFRDQV9BVE1fU1RBVEUsCisgX19UQ0FfQVRNX01BWCwKK307CisKKyNkZWZpbmUgVENBX0FUTV9NQVggKF9fVENBX0FUTV9NQVggLSAxKQorCitlbnVtCit7CisgVENBX05FVEVNX1VOU1BFQywKKyBUQ0FfTkVURU1fQ09SUiwKKyBUQ0FfTkVURU1fREVMQVlfRElTVCwKKyBUQ0FfTkVURU1fUkVPUkRFUiwKKyBUQ0FfTkVURU1fQ09SUlVQVCwKKyBfX1RDQV9ORVRFTV9NQVgsCit9OworCisjZGVmaW5lIFRDQV9ORVRFTV9NQVggKF9fVENBX05FVEVNX01BWCAtIDEpCisKK3N0cnVjdCB0Y19uZXRlbV9xb3B0Cit7CisgX191MzIgbGF0ZW5jeTsKKyBfX3UzMiBsaW1pdDsKKyBfX3UzMiBsb3NzOworIF9fdTMyIGdhcDsKKyBfX3UzMiBkdXBsaWNhdGU7CisgX191MzIgaml0dGVyOworfTsKKworc3RydWN0IHRjX25ldGVtX2NvcnIKK3sKKyBfX3UzMiBkZWxheV9jb3JyOworIF9fdTMyIGxvc3NfY29ycjsKKyBfX3UzMiBkdXBfY29ycjsKK307CisKK3N0cnVjdCB0Y19uZXRlbV9yZW9yZGVyCit7CisgX191MzIgcHJvYmFiaWxpdHk7CisgX191MzIgY29ycmVsYXRpb247Cit9OworCitzdHJ1Y3QgdGNfbmV0ZW1fY29ycnVwdAoreworIF9fdTMyIHByb2JhYmlsaXR5OworIF9fdTMyIGNvcnJlbGF0aW9uOworfTsKKworI2RlZmluZSBORVRFTV9ESVNUX1NDQUxFIDgxOTIKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxhdGZvcm1fZGV2aWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxhdGZvcm1fZGV2aWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2MWI1YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbGF0Zm9ybV9kZXZpY2UuaApAQCAtMCwwICsxLDM5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9QTEFURk9STV9ERVZJQ0VfSF8KKyNkZWZpbmUgX1BMQVRGT1JNX0RFVklDRV9IXworCisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisKK3N0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgeworIGNvbnN0IGNoYXIgKiBuYW1lOworIHUzMiBpZDsKKyBzdHJ1Y3QgZGV2aWNlIGRldjsKKyB1MzIgbnVtX3Jlc291cmNlczsKKyBzdHJ1Y3QgcmVzb3VyY2UgKiByZXNvdXJjZTsKK307CisKKyNkZWZpbmUgdG9fcGxhdGZvcm1fZGV2aWNlKHgpIGNvbnRhaW5lcl9vZigoeCksIHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UsIGRldikKKworc3RydWN0IHBsYXRmb3JtX2RyaXZlciB7CisgaW50ICgqcHJvYmUpKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKik7CisgaW50ICgqcmVtb3ZlKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworIHZvaWQgKCpzaHV0ZG93bikoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqKTsKKyBpbnQgKCpzdXNwZW5kKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisgaW50ICgqcmVzdW1lKShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICopOworIHN0cnVjdCBkZXZpY2VfZHJpdmVyIGRyaXZlcjsKK307CisKKyNkZWZpbmUgcGxhdGZvcm1fZ2V0X2RydmRhdGEoX2RldikgZGV2X2dldF9kcnZkYXRhKCYoX2RldiktPmRldikKKyNkZWZpbmUgcGxhdGZvcm1fc2V0X2RydmRhdGEoX2RldixkYXRhKSBkZXZfc2V0X2RydmRhdGEoJihfZGV2KS0+ZGV2LCAoZGF0YSkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsaXN0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcGxpc3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZDY1NzgzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BsaXN0LmgKQEAgLTAsMCArMSw0NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUExJU1RfSF8KKyNkZWZpbmUgX0xJTlVYX1BMSVNUX0hfCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdHlwZXMuaD4KKworc3RydWN0IHBsaXN0X2hlYWQgeworIHN0cnVjdCBsaXN0X2hlYWQgcHJpb19saXN0OworIHN0cnVjdCBsaXN0X2hlYWQgbm9kZV9saXN0OworfTsKKworc3RydWN0IHBsaXN0X25vZGUgeworIGludCBwcmlvOworIHN0cnVjdCBwbGlzdF9oZWFkIHBsaXN0OworfTsKKworI2RlZmluZSBQTElTVF9IRUFEX0xPQ0tfSU5JVChfbG9jaykKKworI2RlZmluZSBQTElTVF9IRUFEX0lOSVQoaGVhZCwgX2xvY2spICB7ICAgLnByaW9fbGlzdCA9IExJU1RfSEVBRF9JTklUKChoZWFkKS5wcmlvX2xpc3QpLCAgIC5ub2RlX2xpc3QgPSBMSVNUX0hFQURfSU5JVCgoaGVhZCkubm9kZV9saXN0KSwgICBQTElTVF9IRUFEX0xPQ0tfSU5JVCgmKF9sb2NrKSkgIH0KKworI2RlZmluZSBQTElTVF9OT0RFX0lOSVQobm9kZSwgX19wcmlvKSAgeyAgIC5wcmlvID0gKF9fcHJpbyksICAgLnBsaXN0ID0gUExJU1RfSEVBRF9JTklUKChub2RlKS5wbGlzdCwgTlVMTCksICB9CisKKyNkZWZpbmUgcGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2hfZW50cnkocG9zLCAmKGhlYWQpLT5ub2RlX2xpc3QsIHBsaXN0Lm5vZGVfbGlzdCkKKworI2RlZmluZSBwbGlzdF9mb3JfZWFjaF9zYWZlKHBvcywgbiwgaGVhZCkgICBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCAmKGhlYWQpLT5ub2RlX2xpc3QsIHBsaXN0Lm5vZGVfbGlzdCkKKworI2RlZmluZSBwbGlzdF9mb3JfZWFjaF9lbnRyeShwb3MsIGhlYWQsIG1lbSkgICBsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcywgJihoZWFkKS0+bm9kZV9saXN0LCBtZW0ucGxpc3Qubm9kZV9saXN0KQorCisjZGVmaW5lIHBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocG9zLCBuLCBoZWFkLCBtKSAgIGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShwb3MsIG4sICYoaGVhZCktPm5vZGVfbGlzdCwgbS5wbGlzdC5ub2RlX2xpc3QpCisKKyNkZWZpbmUgcGxpc3RfZmlyc3RfZW50cnkoaGVhZCwgdHlwZSwgbWVtYmVyKSAgIGNvbnRhaW5lcl9vZihwbGlzdF9maXJzdChoZWFkKSwgdHlwZSwgbWVtYmVyKQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA1NDg3OTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG0uaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QTV9ICisjZGVmaW5lIF9MSU5VWF9QTV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BucC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BucC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMwYjBhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG5wLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUE5QX0gKKyNkZWZpbmUgX0xJTlVYX1BOUF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BvbGwuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb2xsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjgyMjUwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb2xsLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUE9MTF9ICisjZGVmaW5lIF9MSU5VWF9QT0xMX0gKKworI2luY2x1ZGUgPGFzbS9wb2xsLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bvc2l4X2FjbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Bvc2l4X2FjbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkYWVlNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfYWNsLmgKQEAgLTAsMCArMSw0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1BPU0lYX0FDTF9ICisjZGVmaW5lIF9fTElOVVhfUE9TSVhfQUNMX0gKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKworI2RlZmluZSBBQ0xfVU5ERUZJTkVEX0lEICgtMSkKKworI2RlZmluZSBBQ0xfVFlQRV9BQ0NFU1MgKDB4ODAwMCkKKyNkZWZpbmUgQUNMX1RZUEVfREVGQVVMVCAoMHg0MDAwKQorCisjZGVmaW5lIEFDTF9VU0VSX09CSiAoMHgwMSkKKyNkZWZpbmUgQUNMX1VTRVIgKDB4MDIpCisjZGVmaW5lIEFDTF9HUk9VUF9PQkogKDB4MDQpCisjZGVmaW5lIEFDTF9HUk9VUCAoMHgwOCkKKyNkZWZpbmUgQUNMX01BU0sgKDB4MTApCisjZGVmaW5lIEFDTF9PVEhFUiAoMHgyMCkKKworI2RlZmluZSBBQ0xfUkVBRCAoMHgwNCkKKyNkZWZpbmUgQUNMX1dSSVRFICgweDAyKQorI2RlZmluZSBBQ0xfRVhFQ1VURSAoMHgwMSkKKworc3RydWN0IHBvc2l4X2FjbF9lbnRyeSB7Cisgc2hvcnQgZV90YWc7CisgdW5zaWduZWQgc2hvcnQgZV9wZXJtOworIHVuc2lnbmVkIGludCBlX2lkOworfTsKKworc3RydWN0IHBvc2l4X2FjbCB7CisgYXRvbWljX3QgYV9yZWZjb3VudDsKKyB1bnNpZ25lZCBpbnQgYV9jb3VudDsKKyBzdHJ1Y3QgcG9zaXhfYWNsX2VudHJ5IGFfZW50cmllc1swXTsKK307CisKKyNkZWZpbmUgRk9SRUFDSF9BQ0xfRU5UUlkocGEsIGFjbCwgcGUpICAgZm9yKHBhPShhY2wpLT5hX2VudHJpZXMsIHBlPXBhKyhhY2wpLT5hX2NvdW50OyBwYTxwZTsgcGErKykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfdHlwZXMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wb3NpeF90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ3ZDBhZDIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcG9zaXhfdHlwZXMuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QT1NJWF9UWVBFU19ICisjZGVmaW5lIF9MSU5VWF9QT1NJWF9UWVBFU19ICisKKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKworI3VuZGVmIF9fTkZEQklUUworI2RlZmluZSBfX05GREJJVFMgKDggKiBzaXplb2YodW5zaWduZWQgbG9uZykpCisKKyN1bmRlZiBfX0ZEX1NFVFNJWkUKKyNkZWZpbmUgX19GRF9TRVRTSVpFIDEwMjQKKworI3VuZGVmIF9fRkRTRVRfTE9OR1MKKyNkZWZpbmUgX19GRFNFVF9MT05HUyAoX19GRF9TRVRTSVpFL19fTkZEQklUUykKKworI3VuZGVmIF9fRkRFTFQKKyNkZWZpbmUgX19GREVMVChkKSAoKGQpIC8gX19ORkRCSVRTKQorCisjdW5kZWYgX19GRE1BU0sKKyNkZWZpbmUgX19GRE1BU0soZCkgKDFVTCA8PCAoKGQpICUgX19ORkRCSVRTKSkKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgW19fRkRTRVRfTE9OR1NdOworfSBfX2tlcm5lbF9mZF9zZXQ7CisKK3R5cGVkZWYgdm9pZCAoKl9fa2VybmVsX3NpZ2hhbmRsZXJfdCkoaW50KTsKKwordHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5X3Q7Cit0eXBlZGVmIGludCBfX2tlcm5lbF9tcWRfdDsKKworI2luY2x1ZGUgPGFzbS9wb3NpeF90eXBlcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcGRldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BwZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQzZjhiOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcGRldi5oCkBAIC0wLDAgKzEsNzEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNkZWZpbmUgUFBfSU9DVEwgJ3AnCisKKyNkZWZpbmUgUFBTRVRNT0RFIF9JT1coUFBfSU9DVEwsIDB4ODAsIGludCkKKworI2RlZmluZSBQUFJTVEFUVVMgX0lPUihQUF9JT0NUTCwgMHg4MSwgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXU1RBVFVTIE9CU09MRVRFX19JT1coUFBfSU9DVEwsIDB4ODIsIHVuc2lnbmVkIGNoYXIpCisKKyNkZWZpbmUgUFBSQ09OVFJPTCBfSU9SKFBQX0lPQ1RMLCAweDgzLCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdDT05UUk9MIF9JT1coUFBfSU9DVEwsIDB4ODQsIHVuc2lnbmVkIGNoYXIpCisKK3N0cnVjdCBwcGRldl9mcm9iX3N0cnVjdCB7CisgdW5zaWduZWQgY2hhciBtYXNrOworIHVuc2lnbmVkIGNoYXIgdmFsOworfTsKKyNkZWZpbmUgUFBGQ09OVFJPTCBfSU9XKFBQX0lPQ1RMLCAweDhlLCBzdHJ1Y3QgcHBkZXZfZnJvYl9zdHJ1Y3QpCisKKyNkZWZpbmUgUFBSREFUQSBfSU9SKFBQX0lPQ1RMLCAweDg1LCB1bnNpZ25lZCBjaGFyKQorI2RlZmluZSBQUFdEQVRBIF9JT1coUFBfSU9DVEwsIDB4ODYsIHVuc2lnbmVkIGNoYXIpCisKKyNkZWZpbmUgUFBSRUNPTlRST0wgT0JTT0xFVEVfX0lPUihQUF9JT0NUTCwgMHg4NywgdW5zaWduZWQgY2hhcikKKyNkZWZpbmUgUFBXRUNPTlRST0wgT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4OCwgdW5zaWduZWQgY2hhcikKKworI2RlZmluZSBQUFJGSUZPIE9CU09MRVRFX19JT1IoUFBfSU9DVEwsIDB4ODksIHVuc2lnbmVkIGNoYXIpCisjZGVmaW5lIFBQV0ZJRk8gT0JTT0xFVEVfX0lPVyhQUF9JT0NUTCwgMHg4YSwgdW5zaWduZWQgY2hhcikKKworI2RlZmluZSBQUENMQUlNIF9JTyhQUF9JT0NUTCwgMHg4YikKKworI2RlZmluZSBQUFJFTEVBU0UgX0lPKFBQX0lPQ1RMLCAweDhjKQorCisjZGVmaW5lIFBQWUlFTEQgX0lPKFBQX0lPQ1RMLCAweDhkKQorCisjZGVmaW5lIFBQRVhDTCBfSU8oUFBfSU9DVEwsIDB4OGYpCisKKyNkZWZpbmUgUFBEQVRBRElSIF9JT1coUFBfSU9DVEwsIDB4OTAsIGludCkKKworI2RlZmluZSBQUE5FR09UIF9JT1coUFBfSU9DVEwsIDB4OTEsIGludCkKKworI2RlZmluZSBQUFdDVExPTklSUSBfSU9XKFBQX0lPQ1RMLCAweDkyLCB1bnNpZ25lZCBjaGFyKQorCisjZGVmaW5lIFBQQ0xSSVJRIF9JT1IoUFBfSU9DVEwsIDB4OTMsIGludCkKKworI2RlZmluZSBQUFNFVFBIQVNFIF9JT1coUFBfSU9DVEwsIDB4OTQsIGludCkKKworI2RlZmluZSBQUEdFVFRJTUUgX0lPUihQUF9JT0NUTCwgMHg5NSwgc3RydWN0IHRpbWV2YWwpCisjZGVmaW5lIFBQU0VUVElNRSBfSU9XKFBQX0lPQ1RMLCAweDk2LCBzdHJ1Y3QgdGltZXZhbCkKKworI2RlZmluZSBQUEdFVE1PREVTIF9JT1IoUFBfSU9DVEwsIDB4OTcsIHVuc2lnbmVkIGludCkKKworI2RlZmluZSBQUEdFVE1PREUgX0lPUihQUF9JT0NUTCwgMHg5OCwgaW50KQorI2RlZmluZSBQUEdFVFBIQVNFIF9JT1IoUFBfSU9DVEwsIDB4OTksIGludCkKKworI2RlZmluZSBQUEdFVEZMQUdTIF9JT1IoUFBfSU9DVEwsIDB4OWEsIGludCkKKyNkZWZpbmUgUFBTRVRGTEFHUyBfSU9XKFBQX0lPQ1RMLCAweDliLCBpbnQpCisKKyNkZWZpbmUgUFBfRkFTVFdSSVRFICgxPDwyKQorI2RlZmluZSBQUF9GQVNUUkVBRCAoMTw8MykKKyNkZWZpbmUgUFBfVzkxMjg0UElDICgxPDw0KQorCisjZGVmaW5lIFBQX0ZMQUdNQVNLIChQUF9GQVNUV1JJVEUgfCBQUF9GQVNUUkVBRCB8IFBQX1c5MTI4NFBJQykKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BwcF9kZWZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHBwX2RlZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTU0YWM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3BwcF9kZWZzLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1BQUF9ERUZTX0hfCisjZGVmaW5lIF9QUFBfREVGU19IXworCisjZGVmaW5lIFBQUF9IRFJMRU4gNCAgCisjZGVmaW5lIFBQUF9GQ1NMRU4gMiAgCisjZGVmaW5lIFBQUF9NUlUgMTUwMCAgCisKKyNkZWZpbmUgUFBQX0FERFJFU1MocCkgKCgoX191OCAqKShwKSlbMF0pCisjZGVmaW5lIFBQUF9DT05UUk9MKHApICgoKF9fdTggKikocCkpWzFdKQorI2RlZmluZSBQUFBfUFJPVE9DT0wocCkgKCgoKF9fdTggKikocCkpWzJdIDw8IDgpICsgKChfX3U4ICopKHApKVszXSkKKworI2RlZmluZSBQUFBfQUxMU1RBVElPTlMgMHhmZiAgCisjZGVmaW5lIFBQUF9VSSAweDAzICAKKyNkZWZpbmUgUFBQX0ZMQUcgMHg3ZSAgCisjZGVmaW5lIFBQUF9FU0NBUEUgMHg3ZCAgCisjZGVmaW5lIFBQUF9UUkFOUyAweDIwICAKKworI2RlZmluZSBQUFBfSVAgMHgyMSAgCisjZGVmaW5lIFBQUF9BVCAweDI5ICAKKyNkZWZpbmUgUFBQX0lQWCAweDJiICAKKyNkZWZpbmUgUFBQX1ZKQ19DT01QIDB4MmQgIAorI2RlZmluZSBQUFBfVkpDX1VOQ09NUCAweDJmICAKKyNkZWZpbmUgUFBQX01QIDB4M2QgIAorI2RlZmluZSBQUFBfSVBWNiAweDU3ICAKKyNkZWZpbmUgUFBQX0NPTVBGUkFHIDB4ZmIgIAorI2RlZmluZSBQUFBfQ09NUCAweGZkICAKKyNkZWZpbmUgUFBQX01QTFNfVUMgMHgwMjgxICAKKyNkZWZpbmUgUFBQX01QTFNfTUMgMHgwMjgzICAKKyNkZWZpbmUgUFBQX0lQQ1AgMHg4MDIxICAKKyNkZWZpbmUgUFBQX0FUQ1AgMHg4MDI5ICAKKyNkZWZpbmUgUFBQX0lQWENQIDB4ODAyYiAgCisjZGVmaW5lIFBQUF9JUFY2Q1AgMHg4MDU3ICAKKyNkZWZpbmUgUFBQX0NDUEZSQUcgMHg4MGZiICAKKyNkZWZpbmUgUFBQX0NDUCAweDgwZmQgIAorI2RlZmluZSBQUFBfTVBMU0NQIDB4ODBmZCAgCisjZGVmaW5lIFBQUF9MQ1AgMHhjMDIxICAKKyNkZWZpbmUgUFBQX1BBUCAweGMwMjMgIAorI2RlZmluZSBQUFBfTFFSIDB4YzAyNSAgCisjZGVmaW5lIFBQUF9DSEFQIDB4YzIyMyAgCisjZGVmaW5lIFBQUF9DQkNQIDB4YzAyOSAgCisKKyNkZWZpbmUgUFBQX0lOSVRGQ1MgMHhmZmZmICAKKyNkZWZpbmUgUFBQX0dPT0RGQ1MgMHhmMGI4ICAKKwordHlwZWRlZiBfX3UzMiBleHRfYWNjbVs4XTsKKworZW51bSBOUG1vZGUgeworIE5QTU9ERV9QQVNTLAorIE5QTU9ERV9EUk9QLAorIE5QTU9ERV9FUlJPUiwKKyBOUE1PREVfUVVFVUUKK307CisKK3N0cnVjdCBwcHBzdGF0IHsKKyBfX3UzMiBwcHBfZGlzY2FyZHM7CisKKyBfX3UzMiBwcHBfaWJ5dGVzOworIF9fdTMyIHBwcF9pb2N0ZWN0czsKKyBfX3UzMiBwcHBfaXBhY2tldHM7CisgX191MzIgcHBwX2llcnJvcnM7CisgX191MzIgcHBwX2lscXJzOworCisgX191MzIgcHBwX29ieXRlczsKKyBfX3UzMiBwcHBfb29jdGVjdHM7CisgX191MzIgcHBwX29wYWNrZXRzOworIF9fdTMyIHBwcF9vZXJyb3JzOworIF9fdTMyIHBwcF9vbHFyczsKK307CisKK3N0cnVjdCB2anN0YXQgeworIF9fdTMyIHZqc19wYWNrZXRzOworIF9fdTMyIHZqc19jb21wcmVzc2VkOworIF9fdTMyIHZqc19zZWFyY2hlczsKKyBfX3UzMiB2anNfbWlzc2VzOworIF9fdTMyIHZqc191bmNvbXByZXNzZWRpbjsKKyBfX3UzMiB2anNfY29tcHJlc3NlZGluOworIF9fdTMyIHZqc19lcnJvcmluOworIF9fdTMyIHZqc190b3NzZWQ7Cit9OworCitzdHJ1Y3QgY29tcHN0YXQgeworIF9fdTMyIHVuY19ieXRlczsKKyBfX3UzMiB1bmNfcGFja2V0czsKKyBfX3UzMiBjb21wX2J5dGVzOworIF9fdTMyIGNvbXBfcGFja2V0czsKKyBfX3UzMiBpbmNfYnl0ZXM7CisgX191MzIgaW5jX3BhY2tldHM7CisKKyBfX3UzMiBpbl9jb3VudDsKKyBfX3UzMiBieXRlc19vdXQ7CisKKyBkb3VibGUgcmF0aW87Cit9OworCitzdHJ1Y3QgcHBwX3N0YXRzIHsKKyBzdHJ1Y3QgcHBwc3RhdCBwOworIHN0cnVjdCB2anN0YXQgdmo7Cit9OworCitzdHJ1Y3QgcHBwX2NvbXBfc3RhdHMgeworIHN0cnVjdCBjb21wc3RhdCBjOworIHN0cnVjdCBjb21wc3RhdCBkOworfTsKKworc3RydWN0IHBwcF9pZGxlIHsKKyB0aW1lX3QgeG1pdF9pZGxlOworIHRpbWVfdCByZWN2X2lkbGU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmN0bC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTc2MzFhMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmN0bC5oCkBAIC0wLDAgKzEsNjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1BSQ1RMX0gKKyNkZWZpbmUgX0xJTlVYX1BSQ1RMX0gKKworI2RlZmluZSBQUl9TRVRfUERFQVRIU0lHIDEgIAorI2RlZmluZSBQUl9HRVRfUERFQVRIU0lHIDIgIAorCisjZGVmaW5lIFBSX0dFVF9EVU1QQUJMRSAzCisjZGVmaW5lIFBSX1NFVF9EVU1QQUJMRSA0CisKKyNkZWZpbmUgUFJfR0VUX1VOQUxJR04gNQorI2RlZmluZSBQUl9TRVRfVU5BTElHTiA2CisjZGVmaW5lIFBSX1VOQUxJR05fTk9QUklOVCAxICAKKyNkZWZpbmUgUFJfVU5BTElHTl9TSUdCVVMgMiAgCisKKyNkZWZpbmUgUFJfR0VUX0tFRVBDQVBTIDcKKyNkZWZpbmUgUFJfU0VUX0tFRVBDQVBTIDgKKworI2RlZmluZSBQUl9HRVRfRlBFTVUgOQorI2RlZmluZSBQUl9TRVRfRlBFTVUgMTAKKyNkZWZpbmUgUFJfRlBFTVVfTk9QUklOVCAxICAKKyNkZWZpbmUgUFJfRlBFTVVfU0lHRlBFIDIgIAorCisjZGVmaW5lIFBSX0dFVF9GUEVYQyAxMQorI2RlZmluZSBQUl9TRVRfRlBFWEMgMTIKKyNkZWZpbmUgUFJfRlBfRVhDX1NXX0VOQUJMRSAweDgwICAKKyNkZWZpbmUgUFJfRlBfRVhDX0RJViAweDAxMDAwMCAgCisjZGVmaW5lIFBSX0ZQX0VYQ19PVkYgMHgwMjAwMDAgIAorI2RlZmluZSBQUl9GUF9FWENfVU5EIDB4MDQwMDAwICAKKyNkZWZpbmUgUFJfRlBfRVhDX1JFUyAweDA4MDAwMCAgCisjZGVmaW5lIFBSX0ZQX0VYQ19JTlYgMHgxMDAwMDAgIAorI2RlZmluZSBQUl9GUF9FWENfRElTQUJMRUQgMCAgCisjZGVmaW5lIFBSX0ZQX0VYQ19OT05SRUNPViAxICAKKyNkZWZpbmUgUFJfRlBfRVhDX0FTWU5DIDIgIAorI2RlZmluZSBQUl9GUF9FWENfUFJFQ0lTRSAzICAKKworI2RlZmluZSBQUl9HRVRfVElNSU5HIDEzCisjZGVmaW5lIFBSX1NFVF9USU1JTkcgMTQKKyNkZWZpbmUgUFJfVElNSU5HX1NUQVRJU1RJQ0FMIDAgIAorI2RlZmluZSBQUl9USU1JTkdfVElNRVNUQU1QIDEgIAorCisjZGVmaW5lIFBSX1NFVF9OQU1FIDE1ICAKKyNkZWZpbmUgUFJfR0VUX05BTUUgMTYgIAorCisjZGVmaW5lIFBSX0dFVF9FTkRJQU4gMTkKKyNkZWZpbmUgUFJfU0VUX0VORElBTiAyMAorI2RlZmluZSBQUl9FTkRJQU5fQklHIDAKKyNkZWZpbmUgUFJfRU5ESUFOX0xJVFRMRSAxICAKKyNkZWZpbmUgUFJfRU5ESUFOX1BQQ19MSVRUTEUgMiAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ByZWVtcHQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmVlbXB0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjcwM2RkMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcmVlbXB0LmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1BSRUVNUFRfSAorI2RlZmluZSBfX0xJTlVYX1BSRUVNUFRfSAorCisjaW5jbHVkZSA8bGludXgvdGhyZWFkX2luZm8uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisKKyNkZWZpbmUgYWRkX3ByZWVtcHRfY291bnQodmFsKSBkbyB7IHByZWVtcHRfY291bnQoKSArPSAodmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgc3ViX3ByZWVtcHRfY291bnQodmFsKSBkbyB7IHByZWVtcHRfY291bnQoKSAtPSAodmFsKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBpbmNfcHJlZW1wdF9jb3VudCgpIGFkZF9wcmVlbXB0X2NvdW50KDEpCisjZGVmaW5lIGRlY19wcmVlbXB0X2NvdW50KCkgc3ViX3ByZWVtcHRfY291bnQoMSkKKworI2RlZmluZSBwcmVlbXB0X2NvdW50KCkgKGN1cnJlbnRfdGhyZWFkX2luZm8oKS0+cHJlZW1wdF9jb3VudCkKKworI2RlZmluZSBwcmVlbXB0X2Rpc2FibGUoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByZWVtcHRfZW5hYmxlX25vX3Jlc2NoZWQoKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByZWVtcHRfZW5hYmxlKCkgZG8geyB9IHdoaWxlICgwKQorI2RlZmluZSBwcmVlbXB0X2NoZWNrX3Jlc2NoZWQoKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Byb2NfZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcm9jX2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2NiMjJhYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wcm9jX2ZzLmgKQEAgLTAsMCArMSw3NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUFJPQ19GU19ICisjZGVmaW5lIF9MSU5VWF9QUk9DX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIEZJUlNUX1BST0NFU1NfRU5UUlkgMjU2CisKK2VudW0geworIFBST0NfUk9PVF9JTk8gPSAxLAorfTsKKworI2RlZmluZSBQUk9DX1NVUEVSX01BR0lDIDB4OWZhMAorCit0eXBlZGVmIGludCAocmVhZF9wcm9jX3QpKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAorIGludCBjb3VudCwgaW50ICplb2YsIHZvaWQgKmRhdGEpOwordHlwZWRlZiBpbnQgKHdyaXRlX3Byb2NfdCkoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCisgdW5zaWduZWQgbG9uZyBjb3VudCwgdm9pZCAqZGF0YSk7Cit0eXBlZGVmIGludCAoZ2V0X2luZm9fdCkoY2hhciAqLCBjaGFyICoqLCBvZmZfdCwgaW50KTsKKworc3RydWN0IHByb2NfZGlyX2VudHJ5IHsKKyB1bnNpZ25lZCBpbnQgbG93X2lubzsKKyB1bnNpZ25lZCBzaG9ydCBuYW1lbGVuOworIGNvbnN0IGNoYXIgKm5hbWU7CisgbW9kZV90IG1vZGU7CisgbmxpbmtfdCBubGluazsKKyB1aWRfdCB1aWQ7CisgZ2lkX3QgZ2lkOworIGxvZmZfdCBzaXplOworIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zICogcHJvY19pb3BzOworIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKiBwcm9jX2ZvcHM7CisgZ2V0X2luZm9fdCAqZ2V0X2luZm87Cisgc3RydWN0IG1vZHVsZSAqb3duZXI7Cisgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpuZXh0LCAqcGFyZW50LCAqc3ViZGlyOworIHZvaWQgKmRhdGE7CisgcmVhZF9wcm9jX3QgKnJlYWRfcHJvYzsKKyB3cml0ZV9wcm9jX3QgKndyaXRlX3Byb2M7CisgYXRvbWljX3QgY291bnQ7CisgaW50IGRlbGV0ZWQ7Cisgdm9pZCAqc2V0OworfTsKKworc3RydWN0IGtjb3JlX2xpc3QgeworIHN0cnVjdCBrY29yZV9saXN0ICpuZXh0OworIHVuc2lnbmVkIGxvbmcgYWRkcjsKKyBzaXplX3Qgc2l6ZTsKK307CisKK3N0cnVjdCB2bWNvcmUgeworIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKKyB1bnNpZ25lZCBsb25nIGxvbmcgcGFkZHI7CisgdW5zaWduZWQgbG9uZyBsb25nIHNpemU7CisgbG9mZl90IG9mZnNldDsKK307CisKKyNkZWZpbmUgcHJvY19yb290X2RyaXZlciBOVUxMCisjZGVmaW5lIHByb2NfbmV0IE5VTEwKKyNkZWZpbmUgcHJvY19idXMgTlVMTAorCisjZGVmaW5lIHByb2NfbmV0X2ZvcHNfY3JlYXRlKG5hbWUsIG1vZGUsIGZvcHMpICh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKKyNkZWZpbmUgcHJvY19uZXRfY3JlYXRlKG5hbWUsIG1vZGUsIGluZm8pICh7ICh2b2lkKShtb2RlKSwgTlVMTDsgfSkKKyNkZWZpbmUgcmVtb3ZlX3Byb2NfZW50cnkobmFtZSwgcGFyZW50KSBkbyB7fSB3aGlsZSAoMCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHRyYWNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcHRyYWNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc5YzBjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9wdHJhY2UuaApAQCAtMCwwICsxLDU1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9QVFJBQ0VfSAorI2RlZmluZSBfTElOVVhfUFRSQUNFX0gKKworI2RlZmluZSBQVFJBQ0VfVFJBQ0VNRSAwCisjZGVmaW5lIFBUUkFDRV9QRUVLVEVYVCAxCisjZGVmaW5lIFBUUkFDRV9QRUVLREFUQSAyCisjZGVmaW5lIFBUUkFDRV9QRUVLVVNSIDMKKyNkZWZpbmUgUFRSQUNFX1BPS0VURVhUIDQKKyNkZWZpbmUgUFRSQUNFX1BPS0VEQVRBIDUKKyNkZWZpbmUgUFRSQUNFX1BPS0VVU1IgNgorI2RlZmluZSBQVFJBQ0VfQ09OVCA3CisjZGVmaW5lIFBUUkFDRV9LSUxMIDgKKyNkZWZpbmUgUFRSQUNFX1NJTkdMRVNURVAgOQorCisjZGVmaW5lIFBUUkFDRV9BVFRBQ0ggMHgxMAorI2RlZmluZSBQVFJBQ0VfREVUQUNIIDB4MTEKKworI2RlZmluZSBQVFJBQ0VfU1lTQ0FMTCAyNAorCisjZGVmaW5lIFBUUkFDRV9TRVRPUFRJT05TIDB4NDIwMAorI2RlZmluZSBQVFJBQ0VfR0VURVZFTlRNU0cgMHg0MjAxCisjZGVmaW5lIFBUUkFDRV9HRVRTSUdJTkZPIDB4NDIwMgorI2RlZmluZSBQVFJBQ0VfU0VUU0lHSU5GTyAweDQyMDMKKworI2RlZmluZSBQVFJBQ0VfT19UUkFDRVNZU0dPT0QgMHgwMDAwMDAwMQorI2RlZmluZSBQVFJBQ0VfT19UUkFDRUZPUksgMHgwMDAwMDAwMgorI2RlZmluZSBQVFJBQ0VfT19UUkFDRVZGT1JLIDB4MDAwMDAwMDQKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VDTE9ORSAweDAwMDAwMDA4CisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFRVhFQyAweDAwMDAwMDEwCisjZGVmaW5lIFBUUkFDRV9PX1RSQUNFVkZPUktET05FIDB4MDAwMDAwMjAKKyNkZWZpbmUgUFRSQUNFX09fVFJBQ0VFWElUIDB4MDAwMDAwNDAKKworI2RlZmluZSBQVFJBQ0VfT19NQVNLIDB4MDAwMDAwN2YKKworI2RlZmluZSBQVFJBQ0VfRVZFTlRfRk9SSyAxCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9WRk9SSyAyCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9DTE9ORSAzCisjZGVmaW5lIFBUUkFDRV9FVkVOVF9FWEVDIDQKKyNkZWZpbmUgUFRSQUNFX0VWRU5UX1ZGT1JLX0RPTkUgNQorI2RlZmluZSBQVFJBQ0VfRVZFTlRfRVhJVCA2CisKKyNpbmNsdWRlIDxhc20vcHRyYWNlLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FpYzExNy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FpYzExNy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwNzcwOTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcWljMTE3LmgKQEAgLTAsMCArMSwxMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1FJQzExN19ICisjZGVmaW5lIF9RSUMxMTdfSAorCit0eXBlZGVmIGVudW0geworIFFJQ19OT19DT01NQU5EID0gMCwKKyBRSUNfUkVTRVQgPSAxLAorIFFJQ19SRVBPUlRfTkVYVF9CSVQgPSAyLAorIFFJQ19QQVVTRSA9IDMsCisgUUlDX01JQ1JPX1NURVBfUEFVU0UgPSA0LAorIFFJQ19BTFRFUk5BVEVfVElNRU9VVCA9IDUsCisgUUlDX1JFUE9SVF9EUklWRV9TVEFUVVMgPSA2LAorIFFJQ19SRVBPUlRfRVJST1JfQ09ERSA9IDcsCisgUUlDX1JFUE9SVF9EUklWRV9DT05GSUdVUkFUSU9OID0gOCwKKyBRSUNfUkVQT1JUX1JPTV9WRVJTSU9OID0gOSwKKyBRSUNfTE9HSUNBTF9GT1JXQVJEID0gMTAsCisgUUlDX1BIWVNJQ0FMX1JFVkVSU0UgPSAxMSwKKyBRSUNfUEhZU0lDQUxfRk9SV0FSRCA9IDEyLAorIFFJQ19TRUVLX0hFQURfVE9fVFJBQ0sgPSAxMywKKyBRSUNfU0VFS19MT0FEX1BPSU5UID0gMTQsCisgUUlDX0VOVEVSX0ZPUk1BVF9NT0RFID0gMTUsCisgUUlDX1dSSVRFX1JFRkVSRU5DRV9CVVJTVCA9IDE2LAorIFFJQ19FTlRFUl9WRVJJRllfTU9ERSA9IDE3LAorIFFJQ19TVE9QX1RBUEUgPSAxOCwKKworIFFJQ19NSUNST19TVEVQX0hFQURfVVAgPSAyMSwKKyBRSUNfTUlDUk9fU1RFUF9IRUFEX0RPV04gPSAyMiwKKyBRSUNfU09GVF9TRUxFQ1QgPSAyMywKKyBRSUNfU09GVF9ERVNFTEVDVCA9IDI0LAorIFFJQ19TS0lQX1JFVkVSU0UgPSAyNSwKKyBRSUNfU0tJUF9GT1JXQVJEID0gMjYsCisgUUlDX1NFTEVDVF9SQVRFID0gMjcsCisKKyBRSUNfRU5URVJfRElBR05PU1RJQ18xID0gMjgsCisgUUlDX0VOVEVSX0RJQUdOT1NUSUNfMiA9IDI5LAorIFFJQ19FTlRFUl9QUklNQVJZX01PREUgPSAzMCwKKworIFFJQ19SRVBPUlRfVkVORE9SX0lEID0gMzIsCisgUUlDX1JFUE9SVF9UQVBFX1NUQVRVUyA9IDMzLAorIFFJQ19TS0lQX0VYVEVOREVEX1JFVkVSU0UgPSAzNCwKKyBRSUNfU0tJUF9FWFRFTkRFRF9GT1JXQVJEID0gMzUsCisgUUlDX0NBTElCUkFURV9UQVBFX0xFTkdUSCA9IDM2LAorIFFJQ19SRVBPUlRfRk9STUFUX1NFR01FTlRTID0gMzcsCisgUUlDX1NFVF9GT1JNQVRfU0VHTUVOVFMgPSAzOCwKKworIFFJQ19QSEFOVE9NX1NFTEVDVCA9IDQ2LAorIFFJQ19QSEFOVE9NX0RFU0VMRUNUID0gNDcKK30gcWljMTE3X2NtZF90OworCit0eXBlZGVmIGVudW0geworIGRpc2NyZXRpb25hbCA9IDAsIHJlcXVpcmVkLCBjY3MxLCBjY3MyCit9IHFpY19jb21wYXRpYmlsaXR5OworCit0eXBlZGVmIGVudW0geworIHVudXNlZCwgbW9kZSwgbW90aW9uLCByZXBvcnQKK30gY29tbWFuZF90eXBlczsKKworc3RydWN0IHFpYzExN19jb21tYW5kX3RhYmxlIHsKKyBjaGFyICpuYW1lOworIF9fdTggbWFzazsKKyBfX3U4IHN0YXRlOworIF9fdTggY21kX3R5cGU7CisgX191OCBub25faW50cjsKKyBfX3U4IGxldmVsOworfTsKKworI2RlZmluZSBRSUMxMTdfQ09NTUFORFMgeyAgICAgICAgIHtOVUxMLCAweDAwLCAweDAwLCBtb2RlLCAwLCBkaXNjcmV0aW9uYWx9LCAgIHsic29mdCByZXNldCIsIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsicmVwb3J0IG5leHQgYml0IiwgMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJwYXVzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsibWljcm8gc3RlcCBwYXVzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsiYWx0ZXJuYXRlIGNvbW1hbmQgdGltZW91dCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCBkcml2ZSBzdGF0dXMiLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCBlcnJvciBjb2RlIiwgMHgwMSwgMHgwMSwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJyZXBvcnQgZHJpdmUgY29uZmlndXJhdGlvbiIsMHgwMCwgMHgwMCwgcmVwb3J0LCAwLCByZXF1aXJlZH0sICAgeyJyZXBvcnQgcm9tIHZlcnNpb24iLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7ImxvZ2ljYWwgZm9yd2FyZCIsIDB4MzcsIDB4MjUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsicGh5c2ljYWwgcmV2ZXJzZSIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsicGh5c2ljYWwgZm9yd2FyZCIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMCwgcmVxdWlyZWR9LCAgIHsic2VlayBoZWFkIHRvIHRyYWNrIiwgMHgzNywgMHgyNSwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJzZWVrIGxvYWQgcG9pbnQiLCAweDE3LCAweDA1LCBtb3Rpb24sIDEsIHJlcXVpcmVkfSwgICB7ImVudGVyIGZvcm1hdCBtb2RlIiwgMHgxZiwgMHgwNSwgbW9kZSwgMCwgcmVxdWlyZWR9LCAgIHsid3JpdGUgcmVmZXJlbmNlIGJ1cnN0IiwgMHgxZiwgMHgwNSwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJlbnRlciB2ZXJpZnkgbW9kZSIsIDB4MzcsIDB4MjUsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InN0b3AgdGFwZSIsIDB4MDAsIDB4MDAsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsicmVzZXJ2ZWQgKDE5KSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InJlc2VydmVkICgyMCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJtaWNybyBzdGVwIGhlYWQgdXAiLCAweDAyLCAweDAwLCBtb3Rpb24sIDAsIHJlcXVpcmVkfSwgICB7Im1pY3JvIHN0ZXAgaGVhZCBkb3duIiwgMHgwMiwgMHgwMCwgbW90aW9uLCAwLCByZXF1aXJlZH0sICAgeyJzb2Z0IHNlbGVjdCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJzb2Z0IGRlc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7InNraXAgc2VnbWVudHMgcmV2ZXJzZSIsIDB4MzYsIDB4MjQsIG1vdGlvbiwgMSwgcmVxdWlyZWR9LCAgIHsic2tpcCBzZWdtZW50cyBmb3J3YXJkIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCByZXF1aXJlZH0sICAgeyJzZWxlY3QgcmF0ZSBvciBmb3JtYXQiLCAweDAzLCAweDAxLCBtb2RlLCAwLCByZXF1aXJlZCAgfSwgICB7ImVudGVyIGRpYWcgbW9kZSAxIiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7ImVudGVyIGRpYWcgbW9kZSAyIiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgICB7ImVudGVyIHByaW1hcnkgbW9kZSIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIHJlcXVpcmVkfSwgICB7InZlbmRvciB1bmlxdWUgKDMxKSIsIDB4MDAsIDB4MDAsIHVudXNlZCwgMCwgZGlzY3JldGlvbmFsfSwgICB7InJlcG9ydCB2ZW5kb3IgaWQiLCAweDAwLCAweDAwLCByZXBvcnQsIDAsIHJlcXVpcmVkfSwgICB7InJlcG9ydCB0YXBlIHN0YXR1cyIsIDB4MDQsIDB4MDQsIHJlcG9ydCwgMCwgY2NzMX0sICAgeyJza2lwIGV4dGVuZGVkIHJldmVyc2UiLCAweDM2LCAweDI0LCBtb3Rpb24sIDEsIGNjczF9LCAgIHsic2tpcCBleHRlbmRlZCBmb3J3YXJkIiwgMHgzNiwgMHgyNCwgbW90aW9uLCAxLCBjY3MxfSwgICB7ImNhbGlicmF0ZSB0YXBlIGxlbmd0aCIsIDB4MTcsIDB4MDUsIG1vdGlvbiwgMSwgY2NzMn0sICAgeyJyZXBvcnQgZm9ybWF0IHNlZ21lbnRzIiwgMHgxNywgMHgwNSwgcmVwb3J0LCAwLCBjY3MyfSwgICB7InNldCBmb3JtYXQgc2VnbWVudHMiLCAweDE3LCAweDA1LCBtb2RlLCAwLCBjY3MyfSwgICB7InJlc2VydmVkICgzOSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MikiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0MykiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0NCkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJ2ZW5kb3IgdW5pcXVlICg0NSkiLCAweDAwLCAweDAwLCB1bnVzZWQsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJwaGFudG9tIHNlbGVjdCIsIDB4MDAsIDB4MDAsIG1vZGUsIDAsIGRpc2NyZXRpb25hbH0sICAgeyJwaGFudG9tIGRlc2VsZWN0IiwgMHgwMCwgMHgwMCwgbW9kZSwgMCwgZGlzY3JldGlvbmFsfSwgfQorCisjZGVmaW5lIFFJQ19TVEFUVVNfUkVBRFkgMHgwMSAgCisjZGVmaW5lIFFJQ19TVEFUVVNfRVJST1IgMHgwMiAgCisjZGVmaW5lIFFJQ19TVEFUVVNfQ0FSVFJJREdFX1BSRVNFTlQgMHgwNCAgCisjZGVmaW5lIFFJQ19TVEFUVVNfV1JJVEVfUFJPVEVDVCAweDA4ICAKKyNkZWZpbmUgUUlDX1NUQVRVU19ORVdfQ0FSVFJJREdFIDB4MTAgIAorI2RlZmluZSBRSUNfU1RBVFVTX1JFRkVSRU5DRUQgMHgyMCAgCisjZGVmaW5lIFFJQ19TVEFUVVNfQVRfQk9UIDB4NDAgIAorI2RlZmluZSBRSUNfU1RBVFVTX0FUX0VPVCAweDgwICAKKworI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfTUFTSyAweDE4CisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV9TSElGVCAzCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV8yNTAgMAorI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfNTAwIDIKKyNkZWZpbmUgUUlDX0NPTkZJR19SQVRFXzEwMDAgMworI2RlZmluZSBRSUNfQ09ORklHX1JBVEVfMjAwMCAxCisjZGVmaW5lIFFJQ19DT05GSUdfUkFURV80MDAwIDAgIAorCisjZGVmaW5lIFFJQ19DT05GSUdfTE9ORyAweDQwICAKKyNkZWZpbmUgUUlDX0NPTkZJR184MCAweDgwICAKKworI2RlZmluZSBRSUNfVEFQRV9TVERfTUFTSyAweDBmCisjZGVmaW5lIFFJQ19UQVBFX1FJQzQwIDB4MDEKKyNkZWZpbmUgUUlDX1RBUEVfUUlDODAgMHgwMgorI2RlZmluZSBRSUNfVEFQRV9RSUMzMDIwIDB4MDMKKyNkZWZpbmUgUUlDX1RBUEVfUUlDMzAxMCAweDA0CisKKyNkZWZpbmUgUUlDX1RBUEVfTEVOX01BU0sgMHg3MAorI2RlZmluZSBRSUNfVEFQRV8yMDVGVCAweDEwCisjZGVmaW5lIFFJQ19UQVBFXzMwN0ZUIDB4MjAKKyNkZWZpbmUgUUlDX1RBUEVfVkFSSUFCTEUgMHgzMAorI2RlZmluZSBRSUNfVEFQRV8xMTAwRlQgMHg0MAorI2RlZmluZSBRSUNfVEFQRV9GTEVYIDB4NjAKKworI2RlZmluZSBRSUNfVEFQRV9XSURFIDB4ODAKKworI2RlZmluZSBRSUNfVE9QX1RBUEVfTEVOIDE1MDAKKwordHlwZWRlZiBzdHJ1Y3QgeworIGNoYXIgKm1lc3NhZ2U7CisgdW5zaWduZWQgaW50IGZhdGFsOjE7Cit9IGZ0YXBlX2Vycm9yOworCisjZGVmaW5lIFFJQzExN19FUlJPUlMgeyAgICB7ICJObyBlcnJvciIsIDAsIH0sICAgIHsgIkNvbW1hbmQgUmVjZWl2ZWQgd2hpbGUgRHJpdmUgTm90IFJlYWR5IiwgMCwgfSwgICAgeyAiQ2FydHJpZGdlIE5vdCBQcmVzZW50IG9yIFJlbW92ZWQiLCAxLCB9LCAgICB7ICJNb3RvciBTcGVlZCBFcnJvciAobm90IHdpdGhpbiAxJSkiLCAxLCB9LCAgICB7ICJNb3RvciBTcGVlZCBGYXVsdCAoamFtbWVkLCBvciBncm9zcyBzcGVlZCBlcnJvciIsIDEsIH0sICAgIHsgIkNhcnRyaWRnZSBXcml0ZSBQcm90ZWN0ZWQiLCAxLCB9LCAgICB7ICJVbmRlZmluZWQgb3IgUmVzZXJ2ZWQgQ29tbWFuZCBDb2RlIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBUcmFjayBBZGRyZXNzIFNwZWNpZmllZCBmb3IgU2VlayIsIDEsIH0sICAgIHsgIklsbGVnYWwgQ29tbWFuZCBpbiBSZXBvcnQgU3ViY29udGV4dCIsIDAsIH0sICAgIHsgIklsbGVnYWwgRW50cnkgaW50byBhIERpYWdub3N0aWMgTW9kZSIsIDEsIH0sICAgIHsgIkJyb2tlbiBUYXBlIERldGVjdGVkIChiYXNlZCBvbiBob2xlIHNlbnNvcikiLCAxLCB9LCAgICB7ICJXYXJuaW5nLS1SZWFkIEdhaW4gU2V0dGluZyBFcnJvciIsIDEsIH0sICAgIHsgIkNvbW1hbmQgUmVjZWl2ZWQgV2hpbGUgRXJyb3IgU3RhdHVzIFBlbmRpbmcgKG9icykiLCAxLCB9LCAgICB7ICJDb21tYW5kIFJlY2VpdmVkIFdoaWxlIE5ldyBDYXJ0cmlkZ2UgUGVuZGluZyIsIDEsIH0sICAgIHsgIkNvbW1hbmQgSWxsZWdhbCBvciBVbmRlZmluZWQgaW4gUHJpbWFyeSBNb2RlIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIG9yIFVuZGVmaW5lZCBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sICAgIHsgIkNvbW1hbmQgSWxsZWdhbCBvciBVbmRlZmluZWQgaW4gVmVyaWZ5IE1vZGUiLCAxLCB9LCAgICB7ICJMb2dpY2FsIEZvcndhcmQgTm90IGF0IExvZ2ljYWwgQk9UIG9yIG5vIEZvcm1hdCBTZWdtZW50cyBpbiBGb3JtYXQgTW9kZSIsIDEsIH0sICAgIHsgIkxvZ2ljYWwgRU9UIEJlZm9yZSBBbGwgU2VnbWVudHMgZ2VuZXJhdGVkIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBJbGxlZ2FsIFdoZW4gQ2FydHJpZGdlIE5vdCBSZWZlcmVuY2VkIiwgMSwgfSwgICAgeyAiU2VsZi1EaWFnbm9zdGljIEZhaWxlZCAoY2Fubm90IGJlIGNsZWFyZWQpIiwgMSwgfSwgICAgeyAiV2FybmluZyBFRVBST00gTm90IEluaXRpYWxpemVkLCBEZWZhdWx0cyBTZXQiLCAxLCB9LCAgICB7ICJFRVBST00gQ29ycnVwdGVkIG9yIEhhcmR3YXJlIEZhaWx1cmUiLCAxLCB9LCAgICB7ICJNb3Rpb24gVGltZS1vdXQgRXJyb3IiLCAxLCB9LCAgICB7ICJEYXRhIFNlZ21lbnQgVG9vIExvbmcgLS0gTG9naWNhbCBGb3J3YXJkIG9yIFBhdXNlIiwgMSwgfSwgICAgeyAiVHJhbnNtaXQgT3ZlcnJ1biAob2JzKSIsIDEsIH0sICAgIHsgIlBvd2VyIE9uIFJlc2V0IE9jY3VycmVkIiwgMCwgfSwgICAgeyAiU29mdHdhcmUgUmVzZXQgT2NjdXJyZWQiLCAwLCB9LCAgICB7ICJEaWFnbm9zdGljIE1vZGUgMSBFcnJvciIsIDEsIH0sICAgIHsgIkRpYWdub3N0aWMgTW9kZSAyIEVycm9yIiwgMSwgfSwgICAgeyAiQ29tbWFuZCBSZWNlaXZlZCBEdXJpbmcgTm9uLUludGVycnVwdGlibGUgUHJvY2VzcyIsIDEsIH0sICAgIHsgIlJhdGUgb3IgRm9ybWF0IFNlbGVjdGlvbiBFcnJvciIsIDEsIH0sICAgIHsgIklsbGVnYWwgQ29tbWFuZCBXaGlsZSBpbiBIaWdoIFNwZWVkIE1vZGUiLCAxLCB9LCAgICB7ICJJbGxlZ2FsIFNlZWsgU2VnbWVudCBWYWx1ZSIsIDEsIH0sICAgIHsgIkludmFsaWQgTWVkaWEiLCAxLCB9LCAgICB7ICJIZWFkIFBvc2l0aW9uaW5nIEZhaWx1cmUiLCAxLCB9LCAgICB7ICJXcml0ZSBSZWZlcmVuY2UgQnVyc3QgRmFpbHVyZSIsIDEsIH0sICAgIHsgIlByb20gQ29kZSBNaXNzaW5nIiwgMSwgfSwgICAgeyAiSW52YWxpZCBGb3JtYXQiLCAxLCB9LCAgICB7ICJFT1QvQk9UIFN5c3RlbSBGYWlsdXJlIiwgMSwgfSwgICAgeyAiUHJvbSBBIENoZWNrc3VtIEVycm9yIiwgMSwgfSwgICAgeyAiRHJpdmUgV2FrZXVwIFJlc2V0IE9jY3VycmVkIiwgMSwgfSwgICAgeyAiUHJvbSBCIENoZWNrc3VtIEVycm9yIiwgMSwgfSwgICAgeyAiSWxsZWdhbCBFbnRyeSBpbnRvIEZvcm1hdCBNb2RlIiwgMSwgfSwgfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xbnh0eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3FueHR5cGVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNjZDIwYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xbnh0eXBlcy5oCkBAIC0wLDAgKzEsMjkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1FOWDRUWVBFU19ICisjZGVmaW5lIF9RTlg0VFlQRVNfSAorCit0eXBlZGVmIF9fbGUxNiBxbng0X254dG50X3Q7Cit0eXBlZGVmIF9fdTggcW54NF9mdHlwZV90OworCit0eXBlZGVmIHN0cnVjdCB7CisgX19sZTMyIHh0bnRfYmxrOworIF9fbGUzMiB4dG50X3NpemU7Cit9IHFueDRfeHRudF90OworCit0eXBlZGVmIF9fbGUxNiBxbng0X21vZGVfdDsKK3R5cGVkZWYgX19sZTE2IHFueDRfbXVpZF90OwordHlwZWRlZiBfX2xlMTYgcW54NF9tZ2lkX3Q7Cit0eXBlZGVmIF9fbGUzMiBxbng0X29mZl90OwordHlwZWRlZiBfX2xlMTYgcW54NF9ubGlua190OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xdW90YS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3F1b3RhLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDU0YWY1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9xdW90YS5oCkBAIC0wLDAgKzEsODcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1FVT1RBXworI2RlZmluZSBfTElOVVhfUVVPVEFfCisKKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgX19EUVVPVF9WRVJTSU9OX18gImRxdW90XzYuNS4xIgorI2RlZmluZSBfX0RRVU9UX05VTV9WRVJTSU9OX18gNioxMDAwMCs1KjEwMCsxCisKK3R5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCBxaWRfdDsKK3R5cGVkZWYgX191NjQgcXNpemVfdDsKKworI2RlZmluZSBRVU9UQUJMT0NLX0JJVFMgMTAKKyNkZWZpbmUgUVVPVEFCTE9DS19TSVpFICgxIDw8IFFVT1RBQkxPQ0tfQklUUykKKworI2RlZmluZSBxYjJrYih4KSAoKHgpIDw8IChRVU9UQUJMT0NLX0JJVFMtMTApKQorI2RlZmluZSBrYjJxYih4KSAoKHgpID4+IChRVU9UQUJMT0NLX0JJVFMtMTApKQorI2RlZmluZSB0b3FiKHgpICgoKHgpICsgUVVPVEFCTE9DS19TSVpFIC0gMSkgPj4gUVVPVEFCTE9DS19CSVRTKQorCisjZGVmaW5lIE1BWFFVT1RBUyAyCisjZGVmaW5lIFVTUlFVT1RBIDAgIAorI2RlZmluZSBHUlBRVU9UQSAxICAKKworI2RlZmluZSBJTklUUUZOQU1FUyB7ICAgInVzZXIiLCAgICAgImdyb3VwIiwgICAgICJ1bmRlZmluZWQiLCAgfTsKKworI2RlZmluZSBTVUJDTURNQVNLIDB4MDBmZgorI2RlZmluZSBTVUJDTURTSElGVCA4CisjZGVmaW5lIFFDTUQoY21kLCB0eXBlKSAoKChjbWQpIDw8IFNVQkNNRFNISUZUKSB8ICgodHlwZSkgJiBTVUJDTURNQVNLKSkKKworI2RlZmluZSBRX1NZTkMgMHg4MDAwMDEgIAorI2RlZmluZSBRX1FVT1RBT04gMHg4MDAwMDIgIAorI2RlZmluZSBRX1FVT1RBT0ZGIDB4ODAwMDAzICAKKyNkZWZpbmUgUV9HRVRGTVQgMHg4MDAwMDQgIAorI2RlZmluZSBRX0dFVElORk8gMHg4MDAwMDUgIAorI2RlZmluZSBRX1NFVElORk8gMHg4MDAwMDYgIAorI2RlZmluZSBRX0dFVFFVT1RBIDB4ODAwMDA3ICAKKyNkZWZpbmUgUV9TRVRRVU9UQSAweDgwMDAwOCAgCisKKyNkZWZpbmUgUUlGX0JMSU1JVFMgMQorI2RlZmluZSBRSUZfU1BBQ0UgMgorI2RlZmluZSBRSUZfSUxJTUlUUyA0CisjZGVmaW5lIFFJRl9JTk9ERVMgOAorI2RlZmluZSBRSUZfQlRJTUUgMTYKKyNkZWZpbmUgUUlGX0lUSU1FIDMyCisjZGVmaW5lIFFJRl9MSU1JVFMgKFFJRl9CTElNSVRTIHwgUUlGX0lMSU1JVFMpCisjZGVmaW5lIFFJRl9VU0FHRSAoUUlGX1NQQUNFIHwgUUlGX0lOT0RFUykKKyNkZWZpbmUgUUlGX1RJTUVTIChRSUZfQlRJTUUgfCBRSUZfSVRJTUUpCisjZGVmaW5lIFFJRl9BTEwgKFFJRl9MSU1JVFMgfCBRSUZfVVNBR0UgfCBRSUZfVElNRVMpCisKK3N0cnVjdCBpZl9kcWJsayB7CisgX191NjQgZHFiX2JoYXJkbGltaXQ7CisgX191NjQgZHFiX2Jzb2Z0bGltaXQ7CisgX191NjQgZHFiX2N1cnNwYWNlOworIF9fdTY0IGRxYl9paGFyZGxpbWl0OworIF9fdTY0IGRxYl9pc29mdGxpbWl0OworIF9fdTY0IGRxYl9jdXJpbm9kZXM7CisgX191NjQgZHFiX2J0aW1lOworIF9fdTY0IGRxYl9pdGltZTsKKyBfX3UzMiBkcWJfdmFsaWQ7Cit9OworCisjZGVmaW5lIElJRl9CR1JBQ0UgMQorI2RlZmluZSBJSUZfSUdSQUNFIDIKKyNkZWZpbmUgSUlGX0ZMQUdTIDQKKyNkZWZpbmUgSUlGX0FMTCAoSUlGX0JHUkFDRSB8IElJRl9JR1JBQ0UgfCBJSUZfRkxBR1MpCisKK3N0cnVjdCBpZl9kcWluZm8geworIF9fdTY0IGRxaV9iZ3JhY2U7CisgX191NjQgZHFpX2lncmFjZTsKKyBfX3UzMiBkcWlfZmxhZ3M7CisgX191MzIgZHFpX3ZhbGlkOworfTsKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ2MDljMDYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZC5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01EX0gKKyNkZWZpbmUgX01EX0gKKworI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPgorI2luY2x1ZGUgPGFzbS9zZW1hcGhvcmUuaD4KKyNpbmNsdWRlIDxsaW51eC9tYWpvci5oPgorI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgorI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcF9sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9yYW5kb20uaD4KKyNpbmNsdWRlIDxsaW51eC9rZXJuZWxfc3RhdC5oPgorI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBsZXRpb24uaD4KKyNpbmNsdWRlIDxsaW51eC9tZW1wb29sLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4KKyNpbmNsdWRlIDxsaW51eC9ibGtwZy5oPgorI2luY2x1ZGUgPGxpbnV4L2Jpby5oPgorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9wLmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF91Lmg+CisjaW5jbHVkZSA8bGludXgvcmFpZC9tZF9rLmg+CisKKyNkZWZpbmUgTURfTUFKT1JfVkVSU0lPTiAwCisjZGVmaW5lIE1EX01JTk9SX1ZFUlNJT04gOTAKKworI2RlZmluZSBNRF9QQVRDSExFVkVMX1ZFUlNJT04gMworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfay5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4Yjg1OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF9rLmgKQEAgLTAsMCArMSwxODQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01EX0tfSAorI2RlZmluZSBfTURfS19ICisKKyNpbmNsdWRlICIuLi8uLi8uLi9kcml2ZXJzL21kL2RtLWJpby1saXN0LmgiCisKKyNkZWZpbmUgTEVWRUxfTVVMVElQQVRIICgtNCkKKyNkZWZpbmUgTEVWRUxfTElORUFSICgtMSkKKyNkZWZpbmUgTEVWRUxfRkFVTFRZICgtNSkKKworI2RlZmluZSBMRVZFTF9OT05FICgtMTAwMDAwMCkKKworI2RlZmluZSBNYXhTZWN0b3IgKH4oc2VjdG9yX3QpMCkKKyNkZWZpbmUgTURfVEhSRUFEX05BTUVfTUFYIDE0CisKK3R5cGVkZWYgc3RydWN0IG1kZGV2X3MgbWRkZXZfdDsKK3R5cGVkZWYgc3RydWN0IG1ka19yZGV2X3MgbWRrX3JkZXZfdDsKKworI2RlZmluZSBNQVhfTURfREVWUyAyNTYgIAorCisjZGVmaW5lIE1BWF9DSFVOS19TSVpFICgxPDwzMCkKKworc3RydWN0IG1ka19yZGV2X3MKK3sKKyBzdHJ1Y3QgbGlzdF9oZWFkIHNhbWVfc2V0OworCisgc2VjdG9yX3Qgc2l6ZTsKKyBtZGRldl90ICptZGRldjsKKyB1bnNpZ25lZCBsb25nIGxhc3RfZXZlbnRzOworCisgc3RydWN0IGJsb2NrX2RldmljZSAqYmRldjsKKworIHN0cnVjdCBwYWdlICpzYl9wYWdlOworIGludCBzYl9sb2FkZWQ7CisgX191NjQgc2JfZXZlbnRzOworIHNlY3Rvcl90IGRhdGFfb2Zmc2V0OworIHNlY3Rvcl90IHNiX29mZnNldDsKKyBpbnQgc2Jfc2l6ZTsKKyBpbnQgcHJlZmVycmVkX21pbm9yOworCisgc3RydWN0IGtvYmplY3Qga29iajsKKworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisjZGVmaW5lIEZhdWx0eSAxICAKKyNkZWZpbmUgSW5fc3luYyAyICAKKyNkZWZpbmUgV3JpdGVNb3N0bHkgNCAgCisjZGVmaW5lIEJhcnJpZXJzTm90c3VwcCA1ICAKKworIGludCBkZXNjX25yOworIGludCByYWlkX2Rpc2s7CisgaW50IHNhdmVkX3JhaWRfZGlzazsKKyBzZWN0b3JfdCByZWNvdmVyeV9vZmZzZXQ7CisKKyBhdG9taWNfdCBucl9wZW5kaW5nOworIGF0b21pY190IHJlYWRfZXJyb3JzOworIGF0b21pY190IGNvcnJlY3RlZF9lcnJvcnM7Cit9OworCitzdHJ1Y3QgbWRkZXZfcworeworIHZvaWQgKnByaXZhdGU7Cisgc3RydWN0IG1ka19wZXJzb25hbGl0eSAqcGVyczsKKyBkZXZfdCB1bml0OworIGludCBtZF9taW5vcjsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRpc2tzOworIGludCBzYl9kaXJ0eTsKKyBpbnQgcm87CisKKyBzdHJ1Y3QgZ2VuZGlzayAqZ2VuZGlzazsKKworIHN0cnVjdCBrb2JqZWN0IGtvYmo7CisKKyBpbnQgbWFqb3JfdmVyc2lvbiwKKyBtaW5vcl92ZXJzaW9uLAorIHBhdGNoX3ZlcnNpb247CisgaW50IHBlcnNpc3RlbnQ7CisgaW50IGNodW5rX3NpemU7CisgdGltZV90IGN0aW1lLCB1dGltZTsKKyBpbnQgbGV2ZWwsIGxheW91dDsKKyBjaGFyIGNsZXZlbFsxNl07CisgaW50IHJhaWRfZGlza3M7CisgaW50IG1heF9kaXNrczsKKyBzZWN0b3JfdCBzaXplOworIHNlY3Rvcl90IGFycmF5X3NpemU7CisgX191NjQgZXZlbnRzOworCisgY2hhciB1dWlkWzE2XTsKKworIHNlY3Rvcl90IHJlc2hhcGVfcG9zaXRpb247CisgaW50IGRlbHRhX2Rpc2tzLCBuZXdfbGV2ZWwsIG5ld19sYXlvdXQsIG5ld19jaHVuazsKKworIHN0cnVjdCBtZGtfdGhyZWFkX3MgKnRocmVhZDsKKyBzdHJ1Y3QgbWRrX3RocmVhZF9zICpzeW5jX3RocmVhZDsKKyBzZWN0b3JfdCBjdXJyX3Jlc3luYzsKKyB1bnNpZ25lZCBsb25nIHJlc3luY19tYXJrOworIHNlY3Rvcl90IHJlc3luY19tYXJrX2NudDsKKyBzZWN0b3JfdCBjdXJyX21hcmtfY250OworCisgc2VjdG9yX3QgcmVzeW5jX21heF9zZWN0b3JzOworCisgc2VjdG9yX3QgcmVzeW5jX21pc21hdGNoZXM7CisKKyBzZWN0b3JfdCBzdXNwZW5kX2xvOworIHNlY3Rvcl90IHN1c3BlbmRfaGk7CisKKyBpbnQgc3luY19zcGVlZF9taW47CisgaW50IHN5bmNfc3BlZWRfbWF4OworCisgaW50IG9rX3N0YXJ0X2RlZ3JhZGVkOworCisjZGVmaW5lIE1EX1JFQ09WRVJZX1JVTk5JTkcgMAorI2RlZmluZSBNRF9SRUNPVkVSWV9TWU5DIDEKKyNkZWZpbmUgTURfUkVDT1ZFUllfRVJSIDIKKyNkZWZpbmUgTURfUkVDT1ZFUllfSU5UUiAzCisjZGVmaW5lIE1EX1JFQ09WRVJZX0RPTkUgNAorI2RlZmluZSBNRF9SRUNPVkVSWV9ORUVERUQgNQorI2RlZmluZSBNRF9SRUNPVkVSWV9SRVFVRVNURUQgNgorI2RlZmluZSBNRF9SRUNPVkVSWV9DSEVDSyA3CisjZGVmaW5lIE1EX1JFQ09WRVJZX1JFU0hBUEUgOAorI2RlZmluZSBNRF9SRUNPVkVSWV9GUk9aRU4gOQorCisgdW5zaWduZWQgbG9uZyByZWNvdmVyeTsKKworIGludCBpbl9zeW5jOworIHN0cnVjdCBtdXRleCByZWNvbmZpZ19tdXRleDsKKyBhdG9taWNfdCBhY3RpdmU7CisKKyBpbnQgY2hhbmdlZDsKKyBpbnQgZGVncmFkZWQ7CisgaW50IGJhcnJpZXJzX3dvcms7Cisgc3RydWN0IGJpbyAqYmlvbGlzdDsKKworIGF0b21pY190IHJlY292ZXJ5X2FjdGl2ZTsKKyB3YWl0X3F1ZXVlX2hlYWRfdCByZWNvdmVyeV93YWl0OworIHNlY3Rvcl90IHJlY292ZXJ5X2NwOworCisgc3BpbmxvY2tfdCB3cml0ZV9sb2NrOworIHdhaXRfcXVldWVfaGVhZF90IHNiX3dhaXQ7CisgYXRvbWljX3QgcGVuZGluZ193cml0ZXM7CisKKyB1bnNpZ25lZCBpbnQgc2FmZW1vZGU7CisgdW5zaWduZWQgaW50IHNhZmVtb2RlX2RlbGF5OworIHN0cnVjdCB0aW1lcl9saXN0IHNhZmVtb2RlX3RpbWVyOworIGF0b21pY190IHdyaXRlc19wZW5kaW5nOworIHJlcXVlc3RfcXVldWVfdCAqcXVldWU7CisKKyBhdG9taWNfdCB3cml0ZV9iZWhpbmQ7CisgdW5zaWduZWQgaW50IG1heF93cml0ZV9iZWhpbmQ7CisKKyBzdHJ1Y3QgYml0bWFwICpiaXRtYXA7Cisgc3RydWN0IGZpbGUgKmJpdG1hcF9maWxlOworIGxvbmcgYml0bWFwX29mZnNldDsKKyBsb25nIGRlZmF1bHRfYml0bWFwX29mZnNldDsKKworIHN0cnVjdCBsaXN0X2hlYWQgYWxsX21kZGV2czsKK307CisKK3N0cnVjdCBtZF9zeXNmc19lbnRyeSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShtZGRldl90ICosIGNoYXIgKik7Cisgc3NpemVfdCAoKnN0b3JlKShtZGRldl90ICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgSVRFUkFURV9SREVWX0dFTkVSSUMoaGVhZCxyZGV2LHRtcCkgICAgIGZvciAoKHRtcCkgPSAoaGVhZCkubmV4dDsgICAocmRldikgPSAobGlzdF9lbnRyeSgodG1wKSwgbWRrX3JkZXZfdCwgc2FtZV9zZXQpKSwgICAodG1wKSA9ICh0bXApLT5uZXh0LCAodG1wKS0+cHJldiAhPSAmKGhlYWQpICAgOyApCisjZGVmaW5lIElURVJBVEVfUkRFVihtZGRldixyZGV2LHRtcCkgICBJVEVSQVRFX1JERVZfR0VORVJJQygobWRkZXYpLT5kaXNrcyxyZGV2LHRtcCkKKyNkZWZpbmUgSVRFUkFURV9SREVWX1BFTkRJTkcocmRldix0bXApICAgSVRFUkFURV9SREVWX0dFTkVSSUMocGVuZGluZ19yYWlkX2Rpc2tzLHJkZXYsdG1wKQorCisjZGVmaW5lIFRIUkVBRF9XQUtFVVAgMAorCisjZGVmaW5lIF9fd2FpdF9ldmVudF9sb2NrX2lycSh3cSwgY29uZGl0aW9uLCBsb2NrLCBjbWQpICBkbyB7ICAgd2FpdF9xdWV1ZV90IF9fd2FpdDsgICBpbml0X3dhaXRxdWV1ZV9lbnRyeSgmX193YWl0LCBjdXJyZW50KTsgICAgIGFkZF93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICAgZm9yICg7OykgeyAgIHNldF9jdXJyZW50X3N0YXRlKFRBU0tfVU5JTlRFUlJVUFRJQkxFKTsgICBpZiAoY29uZGl0aW9uKSAgIGJyZWFrOyAgIHNwaW5fdW5sb2NrX2lycSgmbG9jayk7ICAgY21kOyAgIHNjaGVkdWxlKCk7ICAgc3Bpbl9sb2NrX2lycSgmbG9jayk7ICAgfSAgIGN1cnJlbnQtPnN0YXRlID0gVEFTS19SVU5OSU5HOyAgIHJlbW92ZV93YWl0X3F1ZXVlKCZ3cSwgJl9fd2FpdCk7ICB9IHdoaWxlICgwKQorCisjZGVmaW5lIHdhaXRfZXZlbnRfbG9ja19pcnEod3EsIGNvbmRpdGlvbiwgbG9jaywgY21kKSAgZG8geyAgIGlmIChjb25kaXRpb24pICAgYnJlYWs7ICAgX193YWl0X2V2ZW50X2xvY2tfaXJxKHdxLCBjb25kaXRpb24sIGxvY2ssIGNtZCk7ICB9IHdoaWxlICgwKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3AuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL21kX3AuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjg1NmE3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfcC5oCkBAIC0wLDAgKzEsMTM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9NRF9QX0gKKyNkZWZpbmUgX01EX1BfSAorCisjZGVmaW5lIE1EX1JFU0VSVkVEX0JZVEVTICg2NCAqIDEwMjQpCisjZGVmaW5lIE1EX1JFU0VSVkVEX1NFQ1RPUlMgKE1EX1JFU0VSVkVEX0JZVEVTIC8gNTEyKQorI2RlZmluZSBNRF9SRVNFUlZFRF9CTE9DS1MgKE1EX1JFU0VSVkVEX0JZVEVTIC8gQkxPQ0tfU0laRSkKKworI2RlZmluZSBNRF9ORVdfU0laRV9TRUNUT1JTKHgpICgoeCAmIH4oTURfUkVTRVJWRURfU0VDVE9SUyAtIDEpKSAtIE1EX1JFU0VSVkVEX1NFQ1RPUlMpCisjZGVmaW5lIE1EX05FV19TSVpFX0JMT0NLUyh4KSAoKHggJiB+KE1EX1JFU0VSVkVEX0JMT0NLUyAtIDEpKSAtIE1EX1JFU0VSVkVEX0JMT0NLUykKKworI2RlZmluZSBNRF9TQl9CWVRFUyA0MDk2CisjZGVmaW5lIE1EX1NCX1dPUkRTIChNRF9TQl9CWVRFUyAvIDQpCisjZGVmaW5lIE1EX1NCX0JMT0NLUyAoTURfU0JfQllURVMgLyBCTE9DS19TSVpFKQorI2RlZmluZSBNRF9TQl9TRUNUT1JTIChNRF9TQl9CWVRFUyAvIDUxMikKKworI2RlZmluZSBNRF9TQl9HRU5FUklDX09GRlNFVCAwCisjZGVmaW5lIE1EX1NCX1BFUlNPTkFMSVRZX09GRlNFVCA2NAorI2RlZmluZSBNRF9TQl9ESVNLU19PRkZTRVQgMTI4CisjZGVmaW5lIE1EX1NCX0RFU0NSSVBUT1JfT0ZGU0VUIDk5MgorCisjZGVmaW5lIE1EX1NCX0dFTkVSSUNfQ09OU1RBTlRfV09SRFMgMzIKKyNkZWZpbmUgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUyAzMgorI2RlZmluZSBNRF9TQl9HRU5FUklDX1dPUkRTIChNRF9TQl9HRU5FUklDX0NPTlNUQU5UX1dPUkRTICsgTURfU0JfR0VORVJJQ19TVEFURV9XT1JEUykKKyNkZWZpbmUgTURfU0JfUEVSU09OQUxJVFlfV09SRFMgNjQKKyNkZWZpbmUgTURfU0JfREVTQ1JJUFRPUl9XT1JEUyAzMgorI2RlZmluZSBNRF9TQl9ESVNLUyAyNworI2RlZmluZSBNRF9TQl9ESVNLU19XT1JEUyAoTURfU0JfRElTS1MqTURfU0JfREVTQ1JJUFRPUl9XT1JEUykKKyNkZWZpbmUgTURfU0JfUkVTRVJWRURfV09SRFMgKDEwMjQgLSBNRF9TQl9HRU5FUklDX1dPUkRTIC0gTURfU0JfUEVSU09OQUxJVFlfV09SRFMgLSBNRF9TQl9ESVNLU19XT1JEUyAtIE1EX1NCX0RFU0NSSVBUT1JfV09SRFMpCisjZGVmaW5lIE1EX1NCX0VRVUFMX1dPUkRTIChNRF9TQl9HRU5FUklDX1dPUkRTICsgTURfU0JfUEVSU09OQUxJVFlfV09SRFMgKyBNRF9TQl9ESVNLU19XT1JEUykKKworI2RlZmluZSBNRF9ESVNLX0ZBVUxUWSAwICAKKyNkZWZpbmUgTURfRElTS19BQ1RJVkUgMSAgCisjZGVmaW5lIE1EX0RJU0tfU1lOQyAyICAKKyNkZWZpbmUgTURfRElTS19SRU1PVkVEIDMgIAorCisjZGVmaW5lIE1EX0RJU0tfV1JJVEVNT1NUTFkgOSAgCisKK3R5cGVkZWYgc3RydWN0IG1kcF9kZXZpY2VfZGVzY3JpcHRvcl9zIHsKKyBfX3UzMiBudW1iZXI7CisgX191MzIgbWFqb3I7CisgX191MzIgbWlub3I7CisgX191MzIgcmFpZF9kaXNrOworIF9fdTMyIHN0YXRlOworIF9fdTMyIHJlc2VydmVkW01EX1NCX0RFU0NSSVBUT1JfV09SRFMgLSA1XTsKK30gbWRwX2Rpc2tfdDsKKworI2RlZmluZSBNRF9TQl9NQUdJQyAweGE5MmI0ZWZjCisKKyNkZWZpbmUgTURfU0JfQ0xFQU4gMAorI2RlZmluZSBNRF9TQl9FUlJPUlMgMQorCisjZGVmaW5lIE1EX1NCX0JJVE1BUF9QUkVTRU5UIDggIAorCit0eXBlZGVmIHN0cnVjdCBtZHBfc3VwZXJibG9ja19zIHsKKworIF9fdTMyIG1kX21hZ2ljOworIF9fdTMyIG1ham9yX3ZlcnNpb247CisgX191MzIgbWlub3JfdmVyc2lvbjsKKyBfX3UzMiBwYXRjaF92ZXJzaW9uOworIF9fdTMyIGd2YWxpZF93b3JkczsKKyBfX3UzMiBzZXRfdXVpZDA7CisgX191MzIgY3RpbWU7CisgX191MzIgbGV2ZWw7CisgX191MzIgc2l6ZTsKKyBfX3UzMiBucl9kaXNrczsKKyBfX3UzMiByYWlkX2Rpc2tzOworIF9fdTMyIG1kX21pbm9yOworIF9fdTMyIG5vdF9wZXJzaXN0ZW50OworIF9fdTMyIHNldF91dWlkMTsKKyBfX3UzMiBzZXRfdXVpZDI7CisgX191MzIgc2V0X3V1aWQzOworIF9fdTMyIGdzdGF0ZV9jcmVzZXJ2ZWRbTURfU0JfR0VORVJJQ19DT05TVEFOVF9XT1JEUyAtIDE2XTsKKworIF9fdTMyIHV0aW1lOworIF9fdTMyIHN0YXRlOworIF9fdTMyIGFjdGl2ZV9kaXNrczsKKyBfX3UzMiB3b3JraW5nX2Rpc2tzOworIF9fdTMyIGZhaWxlZF9kaXNrczsKKyBfX3UzMiBzcGFyZV9kaXNrczsKKyBfX3UzMiBzYl9jc3VtOworI2lmZGVmIF9fQklHX0VORElBTgorIF9fdTMyIGV2ZW50c19oaTsKKyBfX3UzMiBldmVudHNfbG87CisgX191MzIgY3BfZXZlbnRzX2hpOworIF9fdTMyIGNwX2V2ZW50c19sbzsKKyNlbHNlCisgX191MzIgZXZlbnRzX2xvOworIF9fdTMyIGV2ZW50c19oaTsKKyBfX3UzMiBjcF9ldmVudHNfbG87CisgX191MzIgY3BfZXZlbnRzX2hpOworI2VuZGlmCisgX191MzIgcmVjb3ZlcnlfY3A7CisKKyBfX3U2NCByZXNoYXBlX3Bvc2l0aW9uOworIF9fdTMyIG5ld19sZXZlbDsKKyBfX3UzMiBkZWx0YV9kaXNrczsKKyBfX3UzMiBuZXdfbGF5b3V0OworIF9fdTMyIG5ld19jaHVuazsKKyBfX3UzMiBnc3RhdGVfc3Jlc2VydmVkW01EX1NCX0dFTkVSSUNfU1RBVEVfV09SRFMgLSAxOF07CisKKyBfX3UzMiBsYXlvdXQ7CisgX191MzIgY2h1bmtfc2l6ZTsKKyBfX3UzMiByb290X3B2OworIF9fdTMyIHJvb3RfYmxvY2s7CisgX191MzIgcHN0YXRlX3Jlc2VydmVkW01EX1NCX1BFUlNPTkFMSVRZX1dPUkRTIC0gNF07CisKKyBtZHBfZGlza190IGRpc2tzW01EX1NCX0RJU0tTXTsKKworIF9fdTMyIHJlc2VydmVkW01EX1NCX1JFU0VSVkVEX1dPUkRTXTsKKworIG1kcF9kaXNrX3QgdGhpc19kaXNrOworCit9IG1kcF9zdXBlcl90OworCisjZGVmaW5lIFdyaXRlTW9zdGx5MSAxICAKKworI2RlZmluZSBNRF9GRUFUVVJFX0JJVE1BUF9PRkZTRVQgMQorI2RlZmluZSBNRF9GRUFUVVJFX1JFQ09WRVJZX09GRlNFVCAyICAKKyNkZWZpbmUgTURfRkVBVFVSRV9SRVNIQVBFX0FDVElWRSA0CisKKyNkZWZpbmUgTURfRkVBVFVSRV9BTEwgKDF8Mnw0KQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfdS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQvbWRfdS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2NzExODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFpZC9tZF91LmgKQEAgLTAsMCArMSwxMDQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX01EX1VfSAorI2RlZmluZSBfTURfVV9ICisKKyNkZWZpbmUgUkFJRF9WRVJTSU9OIF9JT1IgKE1EX01BSk9SLCAweDEwLCBtZHVfdmVyc2lvbl90KQorI2RlZmluZSBHRVRfQVJSQVlfSU5GTyBfSU9SIChNRF9NQUpPUiwgMHgxMSwgbWR1X2FycmF5X2luZm9fdCkKKyNkZWZpbmUgR0VUX0RJU0tfSU5GTyBfSU9SIChNRF9NQUpPUiwgMHgxMiwgbWR1X2Rpc2tfaW5mb190KQorI2RlZmluZSBQUklOVF9SQUlEX0RFQlVHIF9JTyAoTURfTUFKT1IsIDB4MTMpCisjZGVmaW5lIFJBSURfQVVUT1JVTiBfSU8gKE1EX01BSk9SLCAweDE0KQorI2RlZmluZSBHRVRfQklUTUFQX0ZJTEUgX0lPUiAoTURfTUFKT1IsIDB4MTUsIG1kdV9iaXRtYXBfZmlsZV90KQorCisjZGVmaW5lIENMRUFSX0FSUkFZIF9JTyAoTURfTUFKT1IsIDB4MjApCisjZGVmaW5lIEFERF9ORVdfRElTSyBfSU9XIChNRF9NQUpPUiwgMHgyMSwgbWR1X2Rpc2tfaW5mb190KQorI2RlZmluZSBIT1RfUkVNT1ZFX0RJU0sgX0lPIChNRF9NQUpPUiwgMHgyMikKKyNkZWZpbmUgU0VUX0FSUkFZX0lORk8gX0lPVyAoTURfTUFKT1IsIDB4MjMsIG1kdV9hcnJheV9pbmZvX3QpCisjZGVmaW5lIFNFVF9ESVNLX0lORk8gX0lPIChNRF9NQUpPUiwgMHgyNCkKKyNkZWZpbmUgV1JJVEVfUkFJRF9JTkZPIF9JTyAoTURfTUFKT1IsIDB4MjUpCisjZGVmaW5lIFVOUFJPVEVDVF9BUlJBWSBfSU8gKE1EX01BSk9SLCAweDI2KQorI2RlZmluZSBQUk9URUNUX0FSUkFZIF9JTyAoTURfTUFKT1IsIDB4MjcpCisjZGVmaW5lIEhPVF9BRERfRElTSyBfSU8gKE1EX01BSk9SLCAweDI4KQorI2RlZmluZSBTRVRfRElTS19GQVVMVFkgX0lPIChNRF9NQUpPUiwgMHgyOSkKKyNkZWZpbmUgSE9UX0dFTkVSQVRFX0VSUk9SIF9JTyAoTURfTUFKT1IsIDB4MmEpCisjZGVmaW5lIFNFVF9CSVRNQVBfRklMRSBfSU9XIChNRF9NQUpPUiwgMHgyYiwgaW50KQorCisjZGVmaW5lIFJVTl9BUlJBWSBfSU9XIChNRF9NQUpPUiwgMHgzMCwgbWR1X3BhcmFtX3QpCisjZGVmaW5lIFNUQVJUX0FSUkFZIF9JTyAoTURfTUFKT1IsIDB4MzEpCisjZGVmaW5lIFNUT1BfQVJSQVkgX0lPIChNRF9NQUpPUiwgMHgzMikKKyNkZWZpbmUgU1RPUF9BUlJBWV9STyBfSU8gKE1EX01BSk9SLCAweDMzKQorI2RlZmluZSBSRVNUQVJUX0FSUkFZX1JXIF9JTyAoTURfTUFKT1IsIDB4MzQpCisKK3R5cGVkZWYgc3RydWN0IG1kdV92ZXJzaW9uX3MgeworIGludCBtYWpvcjsKKyBpbnQgbWlub3I7CisgaW50IHBhdGNobGV2ZWw7Cit9IG1kdV92ZXJzaW9uX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9hcnJheV9pbmZvX3MgeworCisgaW50IG1ham9yX3ZlcnNpb247CisgaW50IG1pbm9yX3ZlcnNpb247CisgaW50IHBhdGNoX3ZlcnNpb247CisgaW50IGN0aW1lOworIGludCBsZXZlbDsKKyBpbnQgc2l6ZTsKKyBpbnQgbnJfZGlza3M7CisgaW50IHJhaWRfZGlza3M7CisgaW50IG1kX21pbm9yOworIGludCBub3RfcGVyc2lzdGVudDsKKworIGludCB1dGltZTsKKyBpbnQgc3RhdGU7CisgaW50IGFjdGl2ZV9kaXNrczsKKyBpbnQgd29ya2luZ19kaXNrczsKKyBpbnQgZmFpbGVkX2Rpc2tzOworIGludCBzcGFyZV9kaXNrczsKKworIGludCBsYXlvdXQ7CisgaW50IGNodW5rX3NpemU7CisKK30gbWR1X2FycmF5X2luZm9fdDsKKwordHlwZWRlZiBzdHJ1Y3QgbWR1X2Rpc2tfaW5mb19zIHsKKworIGludCBudW1iZXI7CisgaW50IG1ham9yOworIGludCBtaW5vcjsKKyBpbnQgcmFpZF9kaXNrOworIGludCBzdGF0ZTsKKworfSBtZHVfZGlza19pbmZvX3Q7CisKK3R5cGVkZWYgc3RydWN0IG1kdV9zdGFydF9pbmZvX3MgeworCisgaW50IG1ham9yOworIGludCBtaW5vcjsKKyBpbnQgcmFpZF9kaXNrOworIGludCBzdGF0ZTsKKworfSBtZHVfc3RhcnRfaW5mb190OworCit0eXBlZGVmIHN0cnVjdCBtZHVfYml0bWFwX2ZpbGVfcworeworIGNoYXIgcGF0aG5hbWVbNDA5Nl07Cit9IG1kdV9iaXRtYXBfZmlsZV90OworCit0eXBlZGVmIHN0cnVjdCBtZHVfcGFyYW1fcworeworIGludCBwZXJzb25hbGl0eTsKKyBpbnQgY2h1bmtfc2l6ZTsKKyBpbnQgbWF4X2ZhdWx0OworfSBtZHVfcGFyYW1fdDsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL3hvci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JhaWQveG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDFlOWY0NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYWlkL3hvci5oCkBAIC0wLDAgKzEsMzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1hPUl9ICisjZGVmaW5lIF9YT1JfSAorCisjaW5jbHVkZSA8bGludXgvcmFpZC9tZC5oPgorCisjZGVmaW5lIE1BWF9YT1JfQkxPQ0tTIDUKKworc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSB7Cisgc3RydWN0IHhvcl9ibG9ja190ZW1wbGF0ZSAqbmV4dDsKKyBjb25zdCBjaGFyICpuYW1lOworIGludCBzcGVlZDsKKyB2b2lkICgqZG9fMikodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworIHZvaWQgKCpkb18zKSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKyB1bnNpZ25lZCBsb25nICopOworIHZvaWQgKCpkb180KSh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKiwKKyB1bnNpZ25lZCBsb25nICosIHVuc2lnbmVkIGxvbmcgKik7Cisgdm9pZCAoKmRvXzUpKHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLAorIHVuc2lnbmVkIGxvbmcgKiwgdW5zaWduZWQgbG9uZyAqLCB1bnNpZ25lZCBsb25nICopOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFuZG9tLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmFuZG9tLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDJiZWY5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yYW5kb20uaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9SQU5ET01fSAorI2RlZmluZSBfTElOVVhfUkFORE9NX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgUk5ER0VURU5UQ05UIF9JT1IoICdSJywgMHgwMCwgaW50ICkKKworI2RlZmluZSBSTkRBRERUT0VOVENOVCBfSU9XKCAnUicsIDB4MDEsIGludCApCisKKyNkZWZpbmUgUk5ER0VUUE9PTCBfSU9SKCAnUicsIDB4MDIsIGludCBbMl0gKQorCisjZGVmaW5lIFJOREFEREVOVFJPUFkgX0lPVyggJ1InLCAweDAzLCBpbnQgWzJdICkKKworI2RlZmluZSBSTkRaQVBFTlRDTlQgX0lPKCAnUicsIDB4MDQgKQorCisjZGVmaW5lIFJORENMRUFSUE9PTCBfSU8oICdSJywgMHgwNiApCisKK3N0cnVjdCByYW5kX3Bvb2xfaW5mbyB7CisgaW50IGVudHJvcHlfY291bnQ7CisgaW50IGJ1Zl9zaXplOworIF9fdTMyIGJ1ZlswXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JidHJlZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JidHJlZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxNGZmZTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmJ0cmVlLmgKQEAgLTAsMCArMSw0NSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUkJUUkVFX0gKKyNkZWZpbmUgX0xJTlVYX1JCVFJFRV9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKworc3RydWN0IHJiX25vZGUKK3sKKyB1bnNpZ25lZCBsb25nIHJiX3BhcmVudF9jb2xvcjsKKyNkZWZpbmUgUkJfUkVEIDAKKyNkZWZpbmUgUkJfQkxBQ0sgMQorIHN0cnVjdCByYl9ub2RlICpyYl9yaWdodDsKKyBzdHJ1Y3QgcmJfbm9kZSAqcmJfbGVmdDsKK30gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzaXplb2YobG9uZykpKSk7CisKK3N0cnVjdCByYl9yb290Cit7Cisgc3RydWN0IHJiX25vZGUgKnJiX25vZGU7Cit9OworCisjZGVmaW5lIHJiX3BhcmVudChyKSAoKHN0cnVjdCByYl9ub2RlICopKChyKS0+cmJfcGFyZW50X2NvbG9yICYgfjMpKQorI2RlZmluZSByYl9jb2xvcihyKSAoKHIpLT5yYl9wYXJlbnRfY29sb3IgJiAxKQorI2RlZmluZSByYl9pc19yZWQocikgKCFyYl9jb2xvcihyKSkKKyNkZWZpbmUgcmJfaXNfYmxhY2socikgcmJfY29sb3IocikKKyNkZWZpbmUgcmJfc2V0X3JlZChyKSBkbyB7IChyKS0+cmJfcGFyZW50X2NvbG9yICY9IH4xOyB9IHdoaWxlICgwKQorI2RlZmluZSByYl9zZXRfYmxhY2socikgZG8geyAociktPnJiX3BhcmVudF9jb2xvciB8PSAxOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIFJCX1JPT1QgKHN0cnVjdCByYl9yb290KSB7IE5VTEwsIH0KKyNkZWZpbmUgcmJfZW50cnkocHRyLCB0eXBlLCBtZW1iZXIpIGNvbnRhaW5lcl9vZihwdHIsIHR5cGUsIG1lbWJlcikKKyNkZWZpbmUgUkJfRU1QVFlfUk9PVChyb290KSAoKHJvb3QpLT5yYl9ub2RlID09IE5VTEwpCisjZGVmaW5lIFJCX0VNUFRZX05PREUobm9kZSkgKHJiX3BhcmVudChub2RlKSAhPSBub2RlKQorI2RlZmluZSBSQl9DTEVBUl9OT0RFKG5vZGUpIChyYl9zZXRfcGFyZW50KG5vZGUsIG5vZGUpKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yY3VwZGF0ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JjdXBkYXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTU0N2E0ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yY3VwZGF0ZS5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9SQ1VQREFURV9ICisjZGVmaW5lIF9fTElOVVhfUkNVUERBVEVfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWJvb3QuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWJvb3QuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTBmZjE0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JlYm9vdC5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JFQk9PVF9ICisjZGVmaW5lIF9MSU5VWF9SRUJPT1RfSAorCisjZGVmaW5lIExJTlVYX1JFQk9PVF9NQUdJQzEgMHhmZWUxZGVhZAorI2RlZmluZSBMSU5VWF9SRUJPT1RfTUFHSUMyIDY3MjI3NDc5MworI2RlZmluZSBMSU5VWF9SRUJPT1RfTUFHSUMyQSA4NTA3MjI3OAorI2RlZmluZSBMSU5VWF9SRUJPT1RfTUFHSUMyQiAzNjkzNjc0NDgKKyNkZWZpbmUgTElOVVhfUkVCT09UX01BR0lDMkMgNTM3OTkzMjE2CisKKyNkZWZpbmUgTElOVVhfUkVCT09UX0NNRF9SRVNUQVJUIDB4MDEyMzQ1NjcKKyNkZWZpbmUgTElOVVhfUkVCT09UX0NNRF9IQUxUIDB4Q0RFRjAxMjMKKyNkZWZpbmUgTElOVVhfUkVCT09UX0NNRF9DQURfT04gMHg4OUFCQ0RFRgorI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0NBRF9PRkYgMHgwMDAwMDAwMAorI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX1BPV0VSX09GRiAweDQzMjFGRURDCisjZGVmaW5lIExJTlVYX1JFQk9PVF9DTURfUkVTVEFSVDIgMHhBMUIyQzNENAorI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX1NXX1NVU1BFTkQgMHhEMDAwRkNFMgorI2RlZmluZSBMSU5VWF9SRUJPT1RfQ01EX0tFWEVDIDB4NDU1ODQ1NDMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVsYXkuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yZWxheS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA5ZjcyMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVsYXkuaApAQCAtMCwwICsxLDkxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9SRUxBWV9ICisjZGVmaW5lIF9MSU5VWF9SRUxBWV9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BvbGwuaD4KKyNpbmNsdWRlIDxsaW51eC9rcmVmLmg+CisKKyNkZWZpbmUgRklYX1NJWkUoeCkgKCgoKHgpIC0gMSkgJiBQQUdFX01BU0spICsgUEFHRV9TSVpFKQorCisjZGVmaW5lIFJFTEFZRlNfQ0hBTk5FTF9WRVJTSU9OIDYKKworc3RydWN0IHJjaGFuX2J1ZgoreworIHZvaWQgKnN0YXJ0OworIHZvaWQgKmRhdGE7Cisgc2l6ZV90IG9mZnNldDsKKyBzaXplX3Qgc3ViYnVmc19wcm9kdWNlZDsKKyBzaXplX3Qgc3ViYnVmc19jb25zdW1lZDsKKyBzdHJ1Y3QgcmNoYW4gKmNoYW47Cisgd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OworIHN0cnVjdCB3b3JrX3N0cnVjdCB3YWtlX3JlYWRlcnM7Cisgc3RydWN0IGRlbnRyeSAqZGVudHJ5OworIHN0cnVjdCBrcmVmIGtyZWY7Cisgc3RydWN0IHBhZ2UgKipwYWdlX2FycmF5OworIHVuc2lnbmVkIGludCBwYWdlX2NvdW50OworIHVuc2lnbmVkIGludCBmaW5hbGl6ZWQ7Cisgc2l6ZV90ICpwYWRkaW5nOworIHNpemVfdCBwcmV2X3BhZGRpbmc7Cisgc2l6ZV90IGJ5dGVzX2NvbnN1bWVkOworIHVuc2lnbmVkIGludCBjcHU7Cit9IF9fX19jYWNoZWxpbmVfYWxpZ25lZDsKKworc3RydWN0IHJjaGFuCit7CisgdTMyIHZlcnNpb247Cisgc2l6ZV90IHN1YmJ1Zl9zaXplOworIHNpemVfdCBuX3N1YmJ1ZnM7Cisgc2l6ZV90IGFsbG9jX3NpemU7Cisgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyAqY2I7Cisgc3RydWN0IGtyZWYga3JlZjsKKyB2b2lkICpwcml2YXRlX2RhdGE7Cisgc2l6ZV90IGxhc3RfdG9vYmlnOworIHN0cnVjdCByY2hhbl9idWYgKmJ1ZltOUl9DUFVTXTsKK307CisKK3N0cnVjdCByY2hhbl9jYWxsYmFja3MKK3sKKworIGludCAoKnN1YmJ1Zl9zdGFydCkgKHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKyB2b2lkICpzdWJidWYsCisgdm9pZCAqcHJldl9zdWJidWYsCisgc2l6ZV90IHByZXZfcGFkZGluZyk7CisKKyB2b2lkICgqYnVmX21hcHBlZCkoc3RydWN0IHJjaGFuX2J1ZiAqYnVmLAorIHN0cnVjdCBmaWxlICpmaWxwKTsKKworIHZvaWQgKCpidWZfdW5tYXBwZWQpKHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKyBzdHJ1Y3QgZmlsZSAqZmlscCk7CisKKyBzdHJ1Y3QgZGVudHJ5ICooKmNyZWF0ZV9idWZfZmlsZSkoY29uc3QgY2hhciAqZmlsZW5hbWUsCisgc3RydWN0IGRlbnRyeSAqcGFyZW50LAorIGludCBtb2RlLAorIHN0cnVjdCByY2hhbl9idWYgKmJ1ZiwKKyBpbnQgKmlzX2dsb2JhbCk7CisKKyBpbnQgKCpyZW1vdmVfYnVmX2ZpbGUpKHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7Cit9OworCitzdHJ1Y3QgcmNoYW4gKnJlbGF5X29wZW4oY29uc3QgY2hhciAqYmFzZV9maWxlbmFtZSwKKyBzdHJ1Y3QgZGVudHJ5ICpwYXJlbnQsCisgc2l6ZV90IHN1YmJ1Zl9zaXplLAorIHNpemVfdCBuX3N1YmJ1ZnMsCisgc3RydWN0IHJjaGFuX2NhbGxiYWNrcyAqY2IpOworCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Jlc291cmNlLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvcmVzb3VyY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDdiNTI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Jlc291cmNlLmgKQEAgLTAsMCArMSw2MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfUkVTT1VSQ0VfSAorI2RlZmluZSBfTElOVVhfUkVTT1VSQ0VfSAorCisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCitzdHJ1Y3QgdGFza19zdHJ1Y3Q7CisKKyNkZWZpbmUgUlVTQUdFX1NFTEYgMAorI2RlZmluZSBSVVNBR0VfQ0hJTERSRU4gKC0xKQorI2RlZmluZSBSVVNBR0VfQk9USCAoLTIpICAKKworc3RydWN0IHJ1c2FnZSB7Cisgc3RydWN0IHRpbWV2YWwgcnVfdXRpbWU7Cisgc3RydWN0IHRpbWV2YWwgcnVfc3RpbWU7CisgbG9uZyBydV9tYXhyc3M7CisgbG9uZyBydV9peHJzczsKKyBsb25nIHJ1X2lkcnNzOworIGxvbmcgcnVfaXNyc3M7CisgbG9uZyBydV9taW5mbHQ7CisgbG9uZyBydV9tYWpmbHQ7CisgbG9uZyBydV9uc3dhcDsKKyBsb25nIHJ1X2luYmxvY2s7CisgbG9uZyBydV9vdWJsb2NrOworIGxvbmcgcnVfbXNnc25kOworIGxvbmcgcnVfbXNncmN2OworIGxvbmcgcnVfbnNpZ25hbHM7CisgbG9uZyBydV9udmNzdzsKKyBsb25nIHJ1X25pdmNzdzsKK307CisKK3N0cnVjdCBybGltaXQgeworIHVuc2lnbmVkIGxvbmcgcmxpbV9jdXI7CisgdW5zaWduZWQgbG9uZyBybGltX21heDsKK307CisKKyNkZWZpbmUgUFJJT19NSU4gKC0yMCkKKyNkZWZpbmUgUFJJT19NQVggMjAKKworI2RlZmluZSBQUklPX1BST0NFU1MgMAorI2RlZmluZSBQUklPX1BHUlAgMQorI2RlZmluZSBQUklPX1VTRVIgMgorCisjZGVmaW5lIF9TVEtfTElNICg4KjEwMjQqMTAyNCkKKworI2RlZmluZSBNTE9DS19MSU1JVCAoOCAqIFBBR0VfU0laRSkKKworI2luY2x1ZGUgPGFzbS9yZXNvdXJjZS5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yb3V0ZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3JvdXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2RiODc0NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yb3V0ZS5oCkBAIC0wLDAgKzEsNDkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JPVVRFX0gKKyNkZWZpbmUgX0xJTlVYX1JPVVRFX0gKKworI2luY2x1ZGUgPGxpbnV4L2lmLmg+CisjaW5jbHVkZSA8bGludXgvY29tcGlsZXIuaD4KKworc3RydWN0IHJ0ZW50cnkKK3sKKyB1bnNpZ25lZCBsb25nIHJ0X3BhZDE7Cisgc3RydWN0IHNvY2thZGRyIHJ0X2RzdDsKKyBzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2F0ZXdheTsKKyBzdHJ1Y3Qgc29ja2FkZHIgcnRfZ2VubWFzazsKKyB1bnNpZ25lZCBzaG9ydCBydF9mbGFnczsKKyBzaG9ydCBydF9wYWQyOworIHVuc2lnbmVkIGxvbmcgcnRfcGFkMzsKKyB2b2lkICpydF9wYWQ0OworIHNob3J0IHJ0X21ldHJpYzsKKyBjaGFyIF9fdXNlciAqcnRfZGV2OworIHVuc2lnbmVkIGxvbmcgcnRfbXR1OworI2RlZmluZSBydF9tc3MgcnRfbXR1ICAKKyB1bnNpZ25lZCBsb25nIHJ0X3dpbmRvdzsKKyB1bnNpZ25lZCBzaG9ydCBydF9pcnR0OworfTsKKworI2RlZmluZSBSVEZfVVAgMHgwMDAxICAKKyNkZWZpbmUgUlRGX0dBVEVXQVkgMHgwMDAyICAKKyNkZWZpbmUgUlRGX0hPU1QgMHgwMDA0ICAKKyNkZWZpbmUgUlRGX1JFSU5TVEFURSAweDAwMDggIAorI2RlZmluZSBSVEZfRFlOQU1JQyAweDAwMTAgIAorI2RlZmluZSBSVEZfTU9ESUZJRUQgMHgwMDIwICAKKyNkZWZpbmUgUlRGX01UVSAweDAwNDAgIAorI2RlZmluZSBSVEZfTVNTIFJURl9NVFUgIAorI2RlZmluZSBSVEZfV0lORE9XIDB4MDA4MCAgCisjZGVmaW5lIFJURl9JUlRUIDB4MDEwMCAgCisjZGVmaW5lIFJURl9SRUpFQ1QgMHgwMjAwICAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydGMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydGMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNTFiYzcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0Yy5oCkBAIC0wLDAgKzEsNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JUQ19IXworI2RlZmluZSBfTElOVVhfUlRDX0hfCisKK3N0cnVjdCBydGNfdGltZSB7CisgaW50IHRtX3NlYzsKKyBpbnQgdG1fbWluOworIGludCB0bV9ob3VyOworIGludCB0bV9tZGF5OworIGludCB0bV9tb247CisgaW50IHRtX3llYXI7CisgaW50IHRtX3dkYXk7CisgaW50IHRtX3lkYXk7CisgaW50IHRtX2lzZHN0OworfTsKKworc3RydWN0IHJ0Y193a2Fscm0geworIHVuc2lnbmVkIGNoYXIgZW5hYmxlZDsKKyB1bnNpZ25lZCBjaGFyIHBlbmRpbmc7Cisgc3RydWN0IHJ0Y190aW1lIHRpbWU7Cit9OworCitzdHJ1Y3QgcnRjX3BsbF9pbmZvIHsKKyBpbnQgcGxsX2N0cmw7CisgaW50IHBsbF92YWx1ZTsKKyBpbnQgcGxsX21heDsKKyBpbnQgcGxsX21pbjsKKyBpbnQgcGxsX3Bvc211bHQ7CisgaW50IHBsbF9uZWdtdWx0OworIGxvbmcgcGxsX2Nsb2NrOworfTsKKworI2RlZmluZSBSVENfQUlFX09OIF9JTygncCcsIDB4MDEpICAKKyNkZWZpbmUgUlRDX0FJRV9PRkYgX0lPKCdwJywgMHgwMikgIAorI2RlZmluZSBSVENfVUlFX09OIF9JTygncCcsIDB4MDMpICAKKyNkZWZpbmUgUlRDX1VJRV9PRkYgX0lPKCdwJywgMHgwNCkgIAorI2RlZmluZSBSVENfUElFX09OIF9JTygncCcsIDB4MDUpICAKKyNkZWZpbmUgUlRDX1BJRV9PRkYgX0lPKCdwJywgMHgwNikgIAorI2RlZmluZSBSVENfV0lFX09OIF9JTygncCcsIDB4MGYpICAKKyNkZWZpbmUgUlRDX1dJRV9PRkYgX0lPKCdwJywgMHgxMCkgIAorCisjZGVmaW5lIFJUQ19BTE1fU0VUIF9JT1coJ3AnLCAweDA3LCBzdHJ1Y3QgcnRjX3RpbWUpICAKKyNkZWZpbmUgUlRDX0FMTV9SRUFEIF9JT1IoJ3AnLCAweDA4LCBzdHJ1Y3QgcnRjX3RpbWUpICAKKyNkZWZpbmUgUlRDX1JEX1RJTUUgX0lPUigncCcsIDB4MDksIHN0cnVjdCBydGNfdGltZSkgIAorI2RlZmluZSBSVENfU0VUX1RJTUUgX0lPVygncCcsIDB4MGEsIHN0cnVjdCBydGNfdGltZSkgIAorI2RlZmluZSBSVENfSVJRUF9SRUFEIF9JT1IoJ3AnLCAweDBiLCB1bnNpZ25lZCBsb25nKSAgCisjZGVmaW5lIFJUQ19JUlFQX1NFVCBfSU9XKCdwJywgMHgwYywgdW5zaWduZWQgbG9uZykgIAorI2RlZmluZSBSVENfRVBPQ0hfUkVBRCBfSU9SKCdwJywgMHgwZCwgdW5zaWduZWQgbG9uZykgIAorI2RlZmluZSBSVENfRVBPQ0hfU0VUIF9JT1coJ3AnLCAweDBlLCB1bnNpZ25lZCBsb25nKSAgCisKKyNkZWZpbmUgUlRDX1dLQUxNX1NFVCBfSU9XKCdwJywgMHgwZiwgc3RydWN0IHJ0Y193a2Fscm0pIAorI2RlZmluZSBSVENfV0tBTE1fUkQgX0lPUigncCcsIDB4MTAsIHN0cnVjdCBydGNfd2thbHJtKSAKKworI2RlZmluZSBSVENfUExMX0dFVCBfSU9SKCdwJywgMHgxMSwgc3RydWN0IHJ0Y19wbGxfaW5mbykgIAorI2RlZmluZSBSVENfUExMX1NFVCBfSU9XKCdwJywgMHgxMiwgc3RydWN0IHJ0Y19wbGxfaW5mbykgIAorCisjZGVmaW5lIFJUQ19JUlFGIDB4ODAgIAorI2RlZmluZSBSVENfUEYgMHg0MAorI2RlZmluZSBSVENfQUYgMHgyMAorI2RlZmluZSBSVENfVUYgMHgxMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydG5ldGxpbmsuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9ydG5ldGxpbmsuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZGNmZmFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J0bmV0bGluay5oCkBAIC0wLDAgKzEsNzIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfUlRORVRMSU5LX0gKKyNkZWZpbmUgX19MSU5VWF9SVE5FVExJTktfSAorCisjaW5jbHVkZSA8bGludXgvbmV0bGluay5oPgorCitlbnVtIHsKKyBSVE1fQkFTRSA9IDE2LAorI2RlZmluZSBSVE1fQkFTRSBSVE1fQkFTRQorCisgUlRNX05FV0xJTksgPSAxNiwKKyNkZWZpbmUgUlRNX05FV0xJTksgUlRNX05FV0xJTksKKyBSVE1fREVMTElOSywKKyNkZWZpbmUgUlRNX0RFTExJTksgUlRNX0RFTExJTksKKyBSVE1fR0VUTElOSywKKyNkZWZpbmUgUlRNX0dFVExJTksgUlRNX0dFVExJTksKKyBSVE1fU0VUTElOSywKKyNkZWZpbmUgUlRNX1NFVExJTksgUlRNX1NFVExJTksKKworIFJUTV9ORVdBRERSID0gMjAsCisjZGVmaW5lIFJUTV9ORVdBRERSIFJUTV9ORVdBRERSCisgUlRNX0RFTEFERFIsCisjZGVmaW5lIFJUTV9ERUxBRERSIFJUTV9ERUxBRERSCisgUlRNX0dFVEFERFIsCisjZGVmaW5lIFJUTV9HRVRBRERSIFJUTV9HRVRBRERSCisKKyBSVE1fTkVXUk9VVEUgPSAyNCwKKyNkZWZpbmUgUlRNX05FV1JPVVRFIFJUTV9ORVdST1VURQorIFJUTV9ERUxST1VURSwKKyNkZWZpbmUgUlRNX0RFTFJPVVRFIFJUTV9ERUxST1VURQorIFJUTV9HRVRST1VURSwKKyNkZWZpbmUgUlRNX0dFVFJPVVRFIFJUTV9HRVRST1VURQorCisgUlRNX05FV05FSUdIID0gMjgsCisjZGVmaW5lIFJUTV9ORVdORUlHSCBSVE1fTkVXTkVJR0gKKyBSVE1fREVMTkVJR0gsCisjZGVmaW5lIFJUTV9ERUxORUlHSCBSVE1fREVMTkVJR0gKKyBSVE1fR0VUTkVJR0gsCisjZGVmaW5lIFJUTV9HRVRORUlHSCBSVE1fR0VUTkVJR0gKKworIFJUTV9ORVdSVUxFID0gMzIsCisjZGVmaW5lIFJUTV9ORVdSVUxFIFJUTV9ORVdSVUxFCisgUlRNX0RFTFJVTEUsCisjZGVmaW5lIFJUTV9ERUxSVUxFIFJUTV9ERUxSVUxFCisgUlRNX0dFVFJVTEUsCisjZGVmaW5lIFJUTV9HRVRSVUxFIFJUTV9HRVRSVUxFCisKKyBSVE1fTkVXUURJU0MgPSAzNiwKKyNkZWZpbmUgUlRNX05FV1FESVNDIFJUTV9ORVdRRElTQworIFJUTV9ERUxRRElTQywKKyNkZWZpbmUgUlRNX0RFTFFESVNDIFJUTV9ERUxRRElTQworIFJUTV9HRVRRRElTQywKKyNkZWZpbmUgUlRNX0dFVFFESVNDIFJUTV9HRVRRRElTQworCisgUlRNX05FV1RDTEFTUyA9IDQwLAorI2RlZmluZSBSVE1fTkVXVENMQVNTIFJUTV9ORVdUQ0xBU1MKKyBSVE1fREVMVENMQVNTLAorI2RlZmluZSBSVE1fREVMVENMQVNTIFJUTV9ERUxUQ0xBU1MKKyBSVE1fR0VUVENMQVNTLAorI2RlZmluZSBSVE1fR0VUVENMQVNTIFJUTV9HRVRUQ0xBU1MKKworIFJUTV9ORVdURklMVEVSID0gNDQsCisjZGVmaW5lIFJUTV9ORVdURklMVEVSIFJUTV9ORVdURklMVEVSCisgUlRNX0RFTFRGSUxURVIsCisjZGVmaW5lIFJUTV9ERUxURklMVEVSIFJUTV9ERUxURklMVEVSCisgUlRNX0dFVFRGSUxURVIsCisjZGVmaW5lIFJUTV9HRVRURklMVEVSIFJUTV9HRVRURklMVEVSCisKKyBSVE1fTkVXQUNUSU9OID0gNDgsCisjZGVmaW5lIFJUTV9ORVdBQ1RJT04gUlRNX05FV0FDVElPTgorIFJUTV9ERUxBQ1RJT04sCisjZGVmaW5lIFJUTV9ERUxBQ1RJT04gUlRNX0RFTEFDVElPTgorIFJUTV9HRVRBQ1RJT04sCisjZGVmaW5lIFJUTV9HRVRBQ1RJT04gUlRNX0dFVEFDVElPTgorCisgUlRNX05FV1BSRUZJWCA9IDUyLAorI2RlZmluZSBSVE1fTkVXUFJFRklYIFJUTV9ORVdQUkVGSVgKKyBSVE1fR0VUUFJFRklYID0gNTQsCisjZGVmaW5lIFJUTV9HRVRQUkVGSVggUlRNX0dFVFBSRUZJWAorCisgUlRNX0dFVE1VTFRJQ0FTVCA9IDU4LAorI2RlZmluZSBSVE1fR0VUTVVMVElDQVNUIFJUTV9HRVRNVUxUSUNBU1QKKworIFJUTV9HRVRBTllDQVNUID0gNjIsCisjZGVmaW5lIFJUTV9HRVRBTllDQVNUIFJUTV9HRVRBTllDQVNUCisKKyBSVE1fTkVXTkVJR0hUQkwgPSA2NCwKKyNkZWZpbmUgUlRNX05FV05FSUdIVEJMIFJUTV9ORVdORUlHSFRCTAorIFJUTV9HRVRORUlHSFRCTCA9IDY2LAorI2RlZmluZSBSVE1fR0VUTkVJR0hUQkwgUlRNX0dFVE5FSUdIVEJMCisgUlRNX1NFVE5FSUdIVEJMLAorI2RlZmluZSBSVE1fU0VUTkVJR0hUQkwgUlRNX1NFVE5FSUdIVEJMCisKKyBfX1JUTV9NQVgsCisjZGVmaW5lIFJUTV9NQVggKCgoX19SVE1fTUFYICsgMykgJiB+MykgLSAxKQorfTsKKworI2RlZmluZSBSVE1fTlJfTVNHVFlQRVMgKFJUTV9NQVggKyAxIC0gUlRNX0JBU0UpCisjZGVmaW5lIFJUTV9OUl9GQU1JTElFUyAoUlRNX05SX01TR1RZUEVTID4+IDIpCisjZGVmaW5lIFJUTV9GQU0oY21kKSAoKChjbWQpIC0gUlRNX0JBU0UpID4+IDIpCisKK3N0cnVjdCBydGF0dHIKK3sKKyB1bnNpZ25lZCBzaG9ydCBydGFfbGVuOworIHVuc2lnbmVkIHNob3J0IHJ0YV90eXBlOworfTsKKworI2RlZmluZSBSVEFfQUxJR05UTyA0CisjZGVmaW5lIFJUQV9BTElHTihsZW4pICggKChsZW4pK1JUQV9BTElHTlRPLTEpICYgfihSVEFfQUxJR05UTy0xKSApCisjZGVmaW5lIFJUQV9PSyhydGEsbGVuKSAoKGxlbikgPj0gKGludClzaXplb2Yoc3RydWN0IHJ0YXR0cikgJiYgICAocnRhKS0+cnRhX2xlbiA+PSBzaXplb2Yoc3RydWN0IHJ0YXR0cikgJiYgICAocnRhKS0+cnRhX2xlbiA8PSAobGVuKSkKKyNkZWZpbmUgUlRBX05FWFQocnRhLGF0dHJsZW4pICgoYXR0cmxlbikgLT0gUlRBX0FMSUdOKChydGEpLT5ydGFfbGVuKSwgICAoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHJ0YSkpICsgUlRBX0FMSUdOKChydGEpLT5ydGFfbGVuKSkpCisjZGVmaW5lIFJUQV9MRU5HVEgobGVuKSAoUlRBX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRhdHRyKSkgKyAobGVuKSkKKyNkZWZpbmUgUlRBX1NQQUNFKGxlbikgUlRBX0FMSUdOKFJUQV9MRU5HVEgobGVuKSkKKyNkZWZpbmUgUlRBX0RBVEEocnRhKSAoKHZvaWQqKSgoKGNoYXIqKShydGEpKSArIFJUQV9MRU5HVEgoMCkpKQorI2RlZmluZSBSVEFfUEFZTE9BRChydGEpICgoaW50KSgocnRhKS0+cnRhX2xlbikgLSBSVEFfTEVOR1RIKDApKQorCitzdHJ1Y3QgcnRtc2cKK3sKKyB1bnNpZ25lZCBjaGFyIHJ0bV9mYW1pbHk7CisgdW5zaWduZWQgY2hhciBydG1fZHN0X2xlbjsKKyB1bnNpZ25lZCBjaGFyIHJ0bV9zcmNfbGVuOworIHVuc2lnbmVkIGNoYXIgcnRtX3RvczsKKworIHVuc2lnbmVkIGNoYXIgcnRtX3RhYmxlOworIHVuc2lnbmVkIGNoYXIgcnRtX3Byb3RvY29sOworIHVuc2lnbmVkIGNoYXIgcnRtX3Njb3BlOworIHVuc2lnbmVkIGNoYXIgcnRtX3R5cGU7CisKKyB1bnNpZ25lZCBydG1fZmxhZ3M7Cit9OworCitlbnVtCit7CisgUlROX1VOU1BFQywKKyBSVE5fVU5JQ0FTVCwKKyBSVE5fTE9DQUwsCisgUlROX0JST0FEQ0FTVCwKKyBSVE5fQU5ZQ0FTVCwKKyBSVE5fTVVMVElDQVNULAorIFJUTl9CTEFDS0hPTEUsCisgUlROX1VOUkVBQ0hBQkxFLAorIFJUTl9QUk9ISUJJVCwKKyBSVE5fVEhST1csCisgUlROX05BVCwKKyBSVE5fWFJFU09MVkUsCisgX19SVE5fTUFYCit9OworCisjZGVmaW5lIFJUTl9NQVggKF9fUlROX01BWCAtIDEpCisKKyNkZWZpbmUgUlRQUk9UX1VOU1BFQyAwCisjZGVmaW5lIFJUUFJPVF9SRURJUkVDVCAxICAKKyNkZWZpbmUgUlRQUk9UX0tFUk5FTCAyICAKKyNkZWZpbmUgUlRQUk9UX0JPT1QgMyAgCisjZGVmaW5lIFJUUFJPVF9TVEFUSUMgNCAgCisKKyNkZWZpbmUgUlRQUk9UX0dBVEVEIDggIAorI2RlZmluZSBSVFBST1RfUkEgOSAgCisjZGVmaW5lIFJUUFJPVF9NUlQgMTAgIAorI2RlZmluZSBSVFBST1RfWkVCUkEgMTEgIAorI2RlZmluZSBSVFBST1RfQklSRCAxMiAgCisjZGVmaW5lIFJUUFJPVF9ETlJPVVRFRCAxMyAgCisjZGVmaW5lIFJUUFJPVF9YT1JQIDE0ICAKKyNkZWZpbmUgUlRQUk9UX05USyAxNSAgCisKK2VudW0gcnRfc2NvcGVfdAoreworIFJUX1NDT1BFX1VOSVZFUlNFPTAsCisKKyBSVF9TQ09QRV9TSVRFPTIwMCwKKyBSVF9TQ09QRV9MSU5LPTI1MywKKyBSVF9TQ09QRV9IT1NUPTI1NCwKKyBSVF9TQ09QRV9OT1dIRVJFPTI1NQorfTsKKworI2RlZmluZSBSVE1fRl9OT1RJRlkgMHgxMDAgIAorI2RlZmluZSBSVE1fRl9DTE9ORUQgMHgyMDAgIAorI2RlZmluZSBSVE1fRl9FUVVBTElaRSAweDQwMCAgCisjZGVmaW5lIFJUTV9GX1BSRUZJWCAweDgwMCAgCisKK2VudW0gcnRfY2xhc3NfdAoreworIFJUX1RBQkxFX1VOU1BFQz0wLAorCisgUlRfVEFCTEVfREVGQVVMVD0yNTMsCisgUlRfVEFCTEVfTUFJTj0yNTQsCisgUlRfVEFCTEVfTE9DQUw9MjU1LAorIF9fUlRfVEFCTEVfTUFYCit9OworI2RlZmluZSBSVF9UQUJMRV9NQVggKF9fUlRfVEFCTEVfTUFYIC0gMSkKKworZW51bSBydGF0dHJfdHlwZV90Cit7CisgUlRBX1VOU1BFQywKKyBSVEFfRFNULAorIFJUQV9TUkMsCisgUlRBX0lJRiwKKyBSVEFfT0lGLAorIFJUQV9HQVRFV0FZLAorIFJUQV9QUklPUklUWSwKKyBSVEFfUFJFRlNSQywKKyBSVEFfTUVUUklDUywKKyBSVEFfTVVMVElQQVRILAorIFJUQV9QUk9UT0lORk8sCisgUlRBX0ZMT1csCisgUlRBX0NBQ0hFSU5GTywKKyBSVEFfU0VTU0lPTiwKKyBSVEFfTVBfQUxHTywKKyBfX1JUQV9NQVgKK307CisKKyNkZWZpbmUgUlRBX01BWCAoX19SVEFfTUFYIC0gMSkKKworI2RlZmluZSBSVE1fUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRtc2cpKSkpCisjZGVmaW5lIFJUTV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHJ0bXNnKSkKKworc3RydWN0IHJ0bmV4dGhvcAoreworIHVuc2lnbmVkIHNob3J0IHJ0bmhfbGVuOworIHVuc2lnbmVkIGNoYXIgcnRuaF9mbGFnczsKKyB1bnNpZ25lZCBjaGFyIHJ0bmhfaG9wczsKKyBpbnQgcnRuaF9pZmluZGV4OworfTsKKworI2RlZmluZSBSVE5IX0ZfREVBRCAxICAKKyNkZWZpbmUgUlROSF9GX1BFUlZBU0lWRSAyICAKKyNkZWZpbmUgUlROSF9GX09OTElOSyA0ICAKKworI2RlZmluZSBSVE5IX0FMSUdOVE8gNAorI2RlZmluZSBSVE5IX0FMSUdOKGxlbikgKCAoKGxlbikrUlROSF9BTElHTlRPLTEpICYgfihSVE5IX0FMSUdOVE8tMSkgKQorI2RlZmluZSBSVE5IX09LKHJ0bmgsbGVuKSAoKHJ0bmgpLT5ydG5oX2xlbiA+PSBzaXplb2Yoc3RydWN0IHJ0bmV4dGhvcCkgJiYgICAoKGludCkocnRuaCktPnJ0bmhfbGVuKSA8PSAobGVuKSkKKyNkZWZpbmUgUlROSF9ORVhUKHJ0bmgpICgoc3RydWN0IHJ0bmV4dGhvcCopKCgoY2hhciopKHJ0bmgpKSArIFJUTkhfQUxJR04oKHJ0bmgpLT5ydG5oX2xlbikpKQorI2RlZmluZSBSVE5IX0xFTkdUSChsZW4pIChSVE5IX0FMSUdOKHNpemVvZihzdHJ1Y3QgcnRuZXh0aG9wKSkgKyAobGVuKSkKKyNkZWZpbmUgUlROSF9TUEFDRShsZW4pIFJUTkhfQUxJR04oUlROSF9MRU5HVEgobGVuKSkKKyNkZWZpbmUgUlROSF9EQVRBKHJ0bmgpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHJ0bmgpKSArIFJUTkhfTEVOR1RIKDApKSkKKworc3RydWN0IHJ0YV9jYWNoZWluZm8KK3sKKyBfX3UzMiBydGFfY2xudHJlZjsKKyBfX3UzMiBydGFfbGFzdHVzZTsKKyBfX3MzMiBydGFfZXhwaXJlczsKKyBfX3UzMiBydGFfZXJyb3I7CisgX191MzIgcnRhX3VzZWQ7CisKKyNkZWZpbmUgUlRORVRMSU5LX0hBVkVfUEVFUklORk8gMQorIF9fdTMyIHJ0YV9pZDsKKyBfX3UzMiBydGFfdHM7CisgX191MzIgcnRhX3RzYWdlOworfTsKKworZW51bQoreworIFJUQVhfVU5TUEVDLAorI2RlZmluZSBSVEFYX1VOU1BFQyBSVEFYX1VOU1BFQworIFJUQVhfTE9DSywKKyNkZWZpbmUgUlRBWF9MT0NLIFJUQVhfTE9DSworIFJUQVhfTVRVLAorI2RlZmluZSBSVEFYX01UVSBSVEFYX01UVQorIFJUQVhfV0lORE9XLAorI2RlZmluZSBSVEFYX1dJTkRPVyBSVEFYX1dJTkRPVworIFJUQVhfUlRULAorI2RlZmluZSBSVEFYX1JUVCBSVEFYX1JUVAorIFJUQVhfUlRUVkFSLAorI2RlZmluZSBSVEFYX1JUVFZBUiBSVEFYX1JUVFZBUgorIFJUQVhfU1NUSFJFU0gsCisjZGVmaW5lIFJUQVhfU1NUSFJFU0ggUlRBWF9TU1RIUkVTSAorIFJUQVhfQ1dORCwKKyNkZWZpbmUgUlRBWF9DV05EIFJUQVhfQ1dORAorIFJUQVhfQURWTVNTLAorI2RlZmluZSBSVEFYX0FEVk1TUyBSVEFYX0FEVk1TUworIFJUQVhfUkVPUkRFUklORywKKyNkZWZpbmUgUlRBWF9SRU9SREVSSU5HIFJUQVhfUkVPUkRFUklORworIFJUQVhfSE9QTElNSVQsCisjZGVmaW5lIFJUQVhfSE9QTElNSVQgUlRBWF9IT1BMSU1JVAorIFJUQVhfSU5JVENXTkQsCisjZGVmaW5lIFJUQVhfSU5JVENXTkQgUlRBWF9JTklUQ1dORAorIFJUQVhfRkVBVFVSRVMsCisjZGVmaW5lIFJUQVhfRkVBVFVSRVMgUlRBWF9GRUFUVVJFUworIF9fUlRBWF9NQVgKK307CisKKyNkZWZpbmUgUlRBWF9NQVggKF9fUlRBWF9NQVggLSAxKQorCisjZGVmaW5lIFJUQVhfRkVBVFVSRV9FQ04gMHgwMDAwMDAwMQorI2RlZmluZSBSVEFYX0ZFQVRVUkVfU0FDSyAweDAwMDAwMDAyCisjZGVmaW5lIFJUQVhfRkVBVFVSRV9USU1FU1RBTVAgMHgwMDAwMDAwNAorI2RlZmluZSBSVEFYX0ZFQVRVUkVfQUxMRlJBRyAweDAwMDAwMDA4CisKK3N0cnVjdCBydGFfc2Vzc2lvbgoreworIF9fdTggcHJvdG87CisgX191OCBwYWQxOworIF9fdTE2IHBhZDI7CisKKyB1bmlvbiB7Cisgc3RydWN0IHsKKyBfX3UxNiBzcG9ydDsKKyBfX3UxNiBkcG9ydDsKKyB9IHBvcnRzOworCisgc3RydWN0IHsKKyBfX3U4IHR5cGU7CisgX191OCBjb2RlOworIF9fdTE2IGlkZW50OworIH0gaWNtcHQ7CisKKyBfX3UzMiBzcGk7CisgfSB1OworfTsKKworc3RydWN0IGlmYWRkcm1zZworeworIHVuc2lnbmVkIGNoYXIgaWZhX2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIGlmYV9wcmVmaXhsZW47CisgdW5zaWduZWQgY2hhciBpZmFfZmxhZ3M7CisgdW5zaWduZWQgY2hhciBpZmFfc2NvcGU7CisgaW50IGlmYV9pbmRleDsKK307CisKK2VudW0KK3sKKyBJRkFfVU5TUEVDLAorIElGQV9BRERSRVNTLAorIElGQV9MT0NBTCwKKyBJRkFfTEFCRUwsCisgSUZBX0JST0FEQ0FTVCwKKyBJRkFfQU5ZQ0FTVCwKKyBJRkFfQ0FDSEVJTkZPLAorIElGQV9NVUxUSUNBU1QsCisgX19JRkFfTUFYCit9OworCisjZGVmaW5lIElGQV9NQVggKF9fSUZBX01BWCAtIDEpCisKKyNkZWZpbmUgSUZBX0ZfU0VDT05EQVJZIDB4MDEKKyNkZWZpbmUgSUZBX0ZfVEVNUE9SQVJZIElGQV9GX1NFQ09OREFSWQorCisjZGVmaW5lIElGQV9GX0RFUFJFQ0FURUQgMHgyMAorI2RlZmluZSBJRkFfRl9URU5UQVRJVkUgMHg0MAorI2RlZmluZSBJRkFfRl9QRVJNQU5FTlQgMHg4MAorCitzdHJ1Y3QgaWZhX2NhY2hlaW5mbworeworIF9fdTMyIGlmYV9wcmVmZXJlZDsKKyBfX3UzMiBpZmFfdmFsaWQ7CisgX191MzIgY3N0YW1wOworIF9fdTMyIHRzdGFtcDsKK307CisKKyNkZWZpbmUgSUZBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmYWRkcm1zZykpKSkKKyNkZWZpbmUgSUZBX1BBWUxPQUQobikgTkxNU0dfUEFZTE9BRChuLHNpemVvZihzdHJ1Y3QgaWZhZGRybXNnKSkKKworc3RydWN0IG5kbXNnCit7CisgdW5zaWduZWQgY2hhciBuZG1fZmFtaWx5OworIHVuc2lnbmVkIGNoYXIgbmRtX3BhZDE7CisgdW5zaWduZWQgc2hvcnQgbmRtX3BhZDI7CisgaW50IG5kbV9pZmluZGV4OworIF9fdTE2IG5kbV9zdGF0ZTsKKyBfX3U4IG5kbV9mbGFnczsKKyBfX3U4IG5kbV90eXBlOworfTsKKworZW51bQoreworIE5EQV9VTlNQRUMsCisgTkRBX0RTVCwKKyBOREFfTExBRERSLAorIE5EQV9DQUNIRUlORk8sCisgTkRBX1BST0JFUywKKyBfX05EQV9NQVgKK307CisKKyNkZWZpbmUgTkRBX01BWCAoX19OREFfTUFYIC0gMSkKKworI2RlZmluZSBOREFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgbmRtc2cpKSkpCisjZGVmaW5lIE5EQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IG5kbXNnKSkKKworI2RlZmluZSBOVEZfUFJPWFkgMHgwOCAgCisjZGVmaW5lIE5URl9ST1VURVIgMHg4MAorCisjZGVmaW5lIE5VRF9JTkNPTVBMRVRFIDB4MDEKKyNkZWZpbmUgTlVEX1JFQUNIQUJMRSAweDAyCisjZGVmaW5lIE5VRF9TVEFMRSAweDA0CisjZGVmaW5lIE5VRF9ERUxBWSAweDA4CisjZGVmaW5lIE5VRF9QUk9CRSAweDEwCisjZGVmaW5lIE5VRF9GQUlMRUQgMHgyMAorCisjZGVmaW5lIE5VRF9OT0FSUCAweDQwCisjZGVmaW5lIE5VRF9QRVJNQU5FTlQgMHg4MAorI2RlZmluZSBOVURfTk9ORSAweDAwCisKK3N0cnVjdCBuZGFfY2FjaGVpbmZvCit7CisgX191MzIgbmRtX2NvbmZpcm1lZDsKKyBfX3UzMiBuZG1fdXNlZDsKKyBfX3UzMiBuZG1fdXBkYXRlZDsKKyBfX3UzMiBuZG1fcmVmY250OworfTsKKworc3RydWN0IG5kdF9zdGF0cworeworIF9fdTY0IG5kdHNfYWxsb2NzOworIF9fdTY0IG5kdHNfZGVzdHJveXM7CisgX191NjQgbmR0c19oYXNoX2dyb3dzOworIF9fdTY0IG5kdHNfcmVzX2ZhaWxlZDsKKyBfX3U2NCBuZHRzX2xvb2t1cHM7CisgX191NjQgbmR0c19oaXRzOworIF9fdTY0IG5kdHNfcmN2X3Byb2Jlc19tY2FzdDsKKyBfX3U2NCBuZHRzX3Jjdl9wcm9iZXNfdWNhc3Q7CisgX191NjQgbmR0c19wZXJpb2RpY19nY19ydW5zOworIF9fdTY0IG5kdHNfZm9yY2VkX2djX3J1bnM7Cit9OworCitlbnVtIHsKKyBORFRQQV9VTlNQRUMsCisgTkRUUEFfSUZJTkRFWCwKKyBORFRQQV9SRUZDTlQsCisgTkRUUEFfUkVBQ0hBQkxFX1RJTUUsCisgTkRUUEFfQkFTRV9SRUFDSEFCTEVfVElNRSwKKyBORFRQQV9SRVRSQU5TX1RJTUUsCisgTkRUUEFfR0NfU1RBTEVUSU1FLAorIE5EVFBBX0RFTEFZX1BST0JFX1RJTUUsCisgTkRUUEFfUVVFVUVfTEVOLAorIE5EVFBBX0FQUF9QUk9CRVMsCisgTkRUUEFfVUNBU1RfUFJPQkVTLAorIE5EVFBBX01DQVNUX1BST0JFUywKKyBORFRQQV9BTllDQVNUX0RFTEFZLAorIE5EVFBBX1BST1hZX0RFTEFZLAorIE5EVFBBX1BST1hZX1FMRU4sCisgTkRUUEFfTE9DS1RJTUUsCisgX19ORFRQQV9NQVgKK307CisjZGVmaW5lIE5EVFBBX01BWCAoX19ORFRQQV9NQVggLSAxKQorCitzdHJ1Y3QgbmR0bXNnCit7CisgX191OCBuZHRtX2ZhbWlseTsKKyBfX3U4IG5kdG1fcGFkMTsKKyBfX3UxNiBuZHRtX3BhZDI7Cit9OworCitzdHJ1Y3QgbmR0X2NvbmZpZworeworIF9fdTE2IG5kdGNfa2V5X2xlbjsKKyBfX3UxNiBuZHRjX2VudHJ5X3NpemU7CisgX191MzIgbmR0Y19lbnRyaWVzOworIF9fdTMyIG5kdGNfbGFzdF9mbHVzaDsKKyBfX3UzMiBuZHRjX2xhc3RfcmFuZDsKKyBfX3UzMiBuZHRjX2hhc2hfcm5kOworIF9fdTMyIG5kdGNfaGFzaF9tYXNrOworIF9fdTMyIG5kdGNfaGFzaF9jaGFpbl9nYzsKKyBfX3UzMiBuZHRjX3Byb3h5X3FsZW47Cit9OworCitlbnVtIHsKKyBORFRBX1VOU1BFQywKKyBORFRBX05BTUUsCisgTkRUQV9USFJFU0gxLAorIE5EVEFfVEhSRVNIMiwKKyBORFRBX1RIUkVTSDMsCisgTkRUQV9DT05GSUcsCisgTkRUQV9QQVJNUywKKyBORFRBX1NUQVRTLAorIE5EVEFfR0NfSU5URVJWQUwsCisgX19ORFRBX01BWAorfTsKKyNkZWZpbmUgTkRUQV9NQVggKF9fTkRUQV9NQVggLSAxKQorCisjZGVmaW5lIE5EVEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArICAgTkxNU0dfQUxJR04oc2l6ZW9mKHN0cnVjdCBuZHRtc2cpKSkpCisjZGVmaW5lIE5EVEFfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCBuZHRtc2cpKQorCitzdHJ1Y3QgcnRnZW5tc2cKK3sKKyB1bnNpZ25lZCBjaGFyIHJ0Z2VuX2ZhbWlseTsKK307CisKK3N0cnVjdCBpZmluZm9tc2cKK3sKKyB1bnNpZ25lZCBjaGFyIGlmaV9mYW1pbHk7CisgdW5zaWduZWQgY2hhciBfX2lmaV9wYWQ7CisgdW5zaWduZWQgc2hvcnQgaWZpX3R5cGU7CisgaW50IGlmaV9pbmRleDsKKyB1bnNpZ25lZCBpZmlfZmxhZ3M7CisgdW5zaWduZWQgaWZpX2NoYW5nZTsKK307CisKK3N0cnVjdCBwcmVmaXhtc2cKK3sKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF9mYW1pbHk7CisgdW5zaWduZWQgY2hhciBwcmVmaXhfcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCBwcmVmaXhfcGFkMjsKKyBpbnQgcHJlZml4X2lmaW5kZXg7CisgdW5zaWduZWQgY2hhciBwcmVmaXhfdHlwZTsKKyB1bnNpZ25lZCBjaGFyIHByZWZpeF9sZW47CisgdW5zaWduZWQgY2hhciBwcmVmaXhfZmxhZ3M7CisgdW5zaWduZWQgY2hhciBwcmVmaXhfcGFkMzsKK307CisKK2VudW0KK3sKKyBQUkVGSVhfVU5TUEVDLAorIFBSRUZJWF9BRERSRVNTLAorIFBSRUZJWF9DQUNIRUlORk8sCisgX19QUkVGSVhfTUFYCit9OworCisjZGVmaW5lIFBSRUZJWF9NQVggKF9fUFJFRklYX01BWCAtIDEpCisKK3N0cnVjdCBwcmVmaXhfY2FjaGVpbmZvCit7CisgX191MzIgcHJlZmVycmVkX3RpbWU7CisgX191MzIgdmFsaWRfdGltZTsKK307CisKK3N0cnVjdCBydG5sX2xpbmtfc3RhdHMKK3sKKyBfX3UzMiByeF9wYWNrZXRzOworIF9fdTMyIHR4X3BhY2tldHM7CisgX191MzIgcnhfYnl0ZXM7CisgX191MzIgdHhfYnl0ZXM7CisgX191MzIgcnhfZXJyb3JzOworIF9fdTMyIHR4X2Vycm9yczsKKyBfX3UzMiByeF9kcm9wcGVkOworIF9fdTMyIHR4X2Ryb3BwZWQ7CisgX191MzIgbXVsdGljYXN0OworIF9fdTMyIGNvbGxpc2lvbnM7CisKKyBfX3UzMiByeF9sZW5ndGhfZXJyb3JzOworIF9fdTMyIHJ4X292ZXJfZXJyb3JzOworIF9fdTMyIHJ4X2NyY19lcnJvcnM7CisgX191MzIgcnhfZnJhbWVfZXJyb3JzOworIF9fdTMyIHJ4X2ZpZm9fZXJyb3JzOworIF9fdTMyIHJ4X21pc3NlZF9lcnJvcnM7CisKKyBfX3UzMiB0eF9hYm9ydGVkX2Vycm9yczsKKyBfX3UzMiB0eF9jYXJyaWVyX2Vycm9yczsKKyBfX3UzMiB0eF9maWZvX2Vycm9yczsKKyBfX3UzMiB0eF9oZWFydGJlYXRfZXJyb3JzOworIF9fdTMyIHR4X3dpbmRvd19lcnJvcnM7CisKKyBfX3UzMiByeF9jb21wcmVzc2VkOworIF9fdTMyIHR4X2NvbXByZXNzZWQ7Cit9OworCitzdHJ1Y3QgcnRubF9saW5rX2lmbWFwCit7CisgX191NjQgbWVtX3N0YXJ0OworIF9fdTY0IG1lbV9lbmQ7CisgX191NjQgYmFzZV9hZGRyOworIF9fdTE2IGlycTsKKyBfX3U4IGRtYTsKKyBfX3U4IHBvcnQ7Cit9OworCitlbnVtCit7CisgSUZMQV9VTlNQRUMsCisgSUZMQV9BRERSRVNTLAorIElGTEFfQlJPQURDQVNULAorIElGTEFfSUZOQU1FLAorIElGTEFfTVRVLAorIElGTEFfTElOSywKKyBJRkxBX1FESVNDLAorIElGTEFfU1RBVFMsCisgSUZMQV9DT1NULAorI2RlZmluZSBJRkxBX0NPU1QgSUZMQV9DT1NUCisgSUZMQV9QUklPUklUWSwKKyNkZWZpbmUgSUZMQV9QUklPUklUWSBJRkxBX1BSSU9SSVRZCisgSUZMQV9NQVNURVIsCisjZGVmaW5lIElGTEFfTUFTVEVSIElGTEFfTUFTVEVSCisgSUZMQV9XSVJFTEVTUywKKyNkZWZpbmUgSUZMQV9XSVJFTEVTUyBJRkxBX1dJUkVMRVNTCisgSUZMQV9QUk9USU5GTywKKyNkZWZpbmUgSUZMQV9QUk9USU5GTyBJRkxBX1BST1RJTkZPCisgSUZMQV9UWFFMRU4sCisjZGVmaW5lIElGTEFfVFhRTEVOIElGTEFfVFhRTEVOCisgSUZMQV9NQVAsCisjZGVmaW5lIElGTEFfTUFQIElGTEFfTUFQCisgSUZMQV9XRUlHSFQsCisjZGVmaW5lIElGTEFfV0VJR0hUIElGTEFfV0VJR0hUCisgSUZMQV9PUEVSU1RBVEUsCisgSUZMQV9MSU5LTU9ERSwKKyBfX0lGTEFfTUFYCit9OworCisjZGVmaW5lIElGTEFfTUFYIChfX0lGTEFfTUFYIC0gMSkKKworI2RlZmluZSBJRkxBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpKSkKKyNkZWZpbmUgSUZMQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IGlmaW5mb21zZykpCisKK2VudW0KK3sKKyBJRkxBX0lORVQ2X1VOU1BFQywKKyBJRkxBX0lORVQ2X0ZMQUdTLAorIElGTEFfSU5FVDZfQ09ORiwKKyBJRkxBX0lORVQ2X1NUQVRTLAorIElGTEFfSU5FVDZfTUNBU1QsCisgSUZMQV9JTkVUNl9DQUNIRUlORk8sCisgX19JRkxBX0lORVQ2X01BWAorfTsKKworI2RlZmluZSBJRkxBX0lORVQ2X01BWCAoX19JRkxBX0lORVQ2X01BWCAtIDEpCisKK3N0cnVjdCBpZmxhX2NhY2hlaW5mbworeworIF9fdTMyIG1heF9yZWFzbV9sZW47CisgX191MzIgdHN0YW1wOworIF9fdTMyIHJlYWNoYWJsZV90aW1lOworIF9fdTMyIHJldHJhbnNfdGltZTsKK307CisKK3N0cnVjdCB0Y21zZworeworIHVuc2lnbmVkIGNoYXIgdGNtX2ZhbWlseTsKKyB1bnNpZ25lZCBjaGFyIHRjbV9fcGFkMTsKKyB1bnNpZ25lZCBzaG9ydCB0Y21fX3BhZDI7CisgaW50IHRjbV9pZmluZGV4OworIF9fdTMyIHRjbV9oYW5kbGU7CisgX191MzIgdGNtX3BhcmVudDsKKyBfX3UzMiB0Y21faW5mbzsKK307CisKK2VudW0KK3sKKyBUQ0FfVU5TUEVDLAorIFRDQV9LSU5ELAorIFRDQV9PUFRJT05TLAorIFRDQV9TVEFUUywKKyBUQ0FfWFNUQVRTLAorIFRDQV9SQVRFLAorIFRDQV9GQ05ULAorIFRDQV9TVEFUUzIsCisgX19UQ0FfTUFYCit9OworCisjZGVmaW5lIFRDQV9NQVggKF9fVENBX01BWCAtIDEpCisKKyNkZWZpbmUgVENBX1JUQShyKSAoKHN0cnVjdCBydGF0dHIqKSgoKGNoYXIqKShyKSkgKyBOTE1TR19BTElHTihzaXplb2Yoc3RydWN0IHRjbXNnKSkpKQorI2RlZmluZSBUQ0FfUEFZTE9BRChuKSBOTE1TR19QQVlMT0FEKG4sc2l6ZW9mKHN0cnVjdCB0Y21zZykpCisKKyNkZWZpbmUgUlRNR1JQX0xJTksgMQorI2RlZmluZSBSVE1HUlBfTk9USUZZIDIKKyNkZWZpbmUgUlRNR1JQX05FSUdIIDQKKyNkZWZpbmUgUlRNR1JQX1RDIDgKKworI2RlZmluZSBSVE1HUlBfSVBWNF9JRkFERFIgMHgxMAorI2RlZmluZSBSVE1HUlBfSVBWNF9NUk9VVEUgMHgyMAorI2RlZmluZSBSVE1HUlBfSVBWNF9ST1VURSAweDQwCisjZGVmaW5lIFJUTUdSUF9JUFY0X1JVTEUgMHg4MAorCisjZGVmaW5lIFJUTUdSUF9JUFY2X0lGQUREUiAweDEwMAorI2RlZmluZSBSVE1HUlBfSVBWNl9NUk9VVEUgMHgyMDAKKyNkZWZpbmUgUlRNR1JQX0lQVjZfUk9VVEUgMHg0MDAKKyNkZWZpbmUgUlRNR1JQX0lQVjZfSUZJTkZPIDB4ODAwCisKKyNkZWZpbmUgUlRNR1JQX0RFQ25ldF9JRkFERFIgMHgxMDAwCisjZGVmaW5lIFJUTUdSUF9ERUNuZXRfUk9VVEUgMHg0MDAwCisKKyNkZWZpbmUgUlRNR1JQX0lQVjZfUFJFRklYIDB4MjAwMDAKKworZW51bSBydG5ldGxpbmtfZ3JvdXBzIHsKKyBSVE5MR1JQX05PTkUsCisjZGVmaW5lIFJUTkxHUlBfTk9ORSBSVE5MR1JQX05PTkUKKyBSVE5MR1JQX0xJTkssCisjZGVmaW5lIFJUTkxHUlBfTElOSyBSVE5MR1JQX0xJTksKKyBSVE5MR1JQX05PVElGWSwKKyNkZWZpbmUgUlROTEdSUF9OT1RJRlkgUlROTEdSUF9OT1RJRlkKKyBSVE5MR1JQX05FSUdILAorI2RlZmluZSBSVE5MR1JQX05FSUdIIFJUTkxHUlBfTkVJR0gKKyBSVE5MR1JQX1RDLAorI2RlZmluZSBSVE5MR1JQX1RDIFJUTkxHUlBfVEMKKyBSVE5MR1JQX0lQVjRfSUZBRERSLAorI2RlZmluZSBSVE5MR1JQX0lQVjRfSUZBRERSIFJUTkxHUlBfSVBWNF9JRkFERFIKKyBSVE5MR1JQX0lQVjRfTVJPVVRFLAorI2RlZmluZSBSVE5MR1JQX0lQVjRfTVJPVVRFIFJUTkxHUlBfSVBWNF9NUk9VVEUKKyBSVE5MR1JQX0lQVjRfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNF9ST1VURSBSVE5MR1JQX0lQVjRfUk9VVEUKKyBSVE5MR1JQX0lQVjRfUlVMRSwKKyNkZWZpbmUgUlROTEdSUF9JUFY0X1JVTEUgUlROTEdSUF9JUFY0X1JVTEUKKyBSVE5MR1JQX0lQVjZfSUZBRERSLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZBRERSIFJUTkxHUlBfSVBWNl9JRkFERFIKKyBSVE5MR1JQX0lQVjZfTVJPVVRFLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfTVJPVVRFIFJUTkxHUlBfSVBWNl9NUk9VVEUKKyBSVE5MR1JQX0lQVjZfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfSVBWNl9ST1VURSBSVE5MR1JQX0lQVjZfUk9VVEUKKyBSVE5MR1JQX0lQVjZfSUZJTkZPLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfSUZJTkZPIFJUTkxHUlBfSVBWNl9JRklORk8KKyBSVE5MR1JQX0RFQ25ldF9JRkFERFIsCisjZGVmaW5lIFJUTkxHUlBfREVDbmV0X0lGQUREUiBSVE5MR1JQX0RFQ25ldF9JRkFERFIKKyBSVE5MR1JQX05PUDIsCisgUlROTEdSUF9ERUNuZXRfUk9VVEUsCisjZGVmaW5lIFJUTkxHUlBfREVDbmV0X1JPVVRFIFJUTkxHUlBfREVDbmV0X1JPVVRFCisgUlROTEdSUF9OT1AzLAorIFJUTkxHUlBfTk9QNCwKKyBSVE5MR1JQX0lQVjZfUFJFRklYLAorI2RlZmluZSBSVE5MR1JQX0lQVjZfUFJFRklYIFJUTkxHUlBfSVBWNl9QUkVGSVgKKyBfX1JUTkxHUlBfTUFYCit9OworI2RlZmluZSBSVE5MR1JQX01BWCAoX19SVE5MR1JQX01BWCAtIDEpCisKK3N0cnVjdCB0Y2Ftc2cKK3sKKyB1bnNpZ25lZCBjaGFyIHRjYV9mYW1pbHk7CisgdW5zaWduZWQgY2hhciB0Y2FfX3BhZDE7CisgdW5zaWduZWQgc2hvcnQgdGNhX19wYWQyOworfTsKKyNkZWZpbmUgVEFfUlRBKHIpICgoc3RydWN0IHJ0YXR0ciopKCgoY2hhciopKHIpKSArIE5MTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgdGNhbXNnKSkpKQorI2RlZmluZSBUQV9QQVlMT0FEKG4pIE5MTVNHX1BBWUxPQUQobixzaXplb2Yoc3RydWN0IHRjYW1zZykpCisjZGVmaW5lIFRDQV9BQ1RfVEFCIDEgICAKKyNkZWZpbmUgVENBQV9NQVggMQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yd3NlbS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3J3c2VtLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY0YzRjOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9yd3NlbS5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1JXU0VNX0gKKyNkZWZpbmUgX0xJTlVYX1JXU0VNX0gKKworI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2NoZWQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZiNzgxZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2NoZWQuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TQ0hFRF9ICisjZGVmaW5lIF9MSU5VWF9TQ0hFRF9ICisKKyNpbmNsdWRlIDxsaW51eC9hdXh2ZWMuaD4gIAorCisjZGVmaW5lIENTSUdOQUwgMHgwMDAwMDBmZiAgCisjZGVmaW5lIENMT05FX1ZNIDB4MDAwMDAxMDAgIAorI2RlZmluZSBDTE9ORV9GUyAweDAwMDAwMjAwICAKKyNkZWZpbmUgQ0xPTkVfRklMRVMgMHgwMDAwMDQwMCAgCisjZGVmaW5lIENMT05FX1NJR0hBTkQgMHgwMDAwMDgwMCAgCisjZGVmaW5lIENMT05FX1BUUkFDRSAweDAwMDAyMDAwICAKKyNkZWZpbmUgQ0xPTkVfVkZPUksgMHgwMDAwNDAwMCAgCisjZGVmaW5lIENMT05FX1BBUkVOVCAweDAwMDA4MDAwICAKKyNkZWZpbmUgQ0xPTkVfVEhSRUFEIDB4MDAwMTAwMDAgIAorI2RlZmluZSBDTE9ORV9ORVdOUyAweDAwMDIwMDAwICAKKyNkZWZpbmUgQ0xPTkVfU1lTVlNFTSAweDAwMDQwMDAwICAKKyNkZWZpbmUgQ0xPTkVfU0VUVExTIDB4MDAwODAwMDAgIAorI2RlZmluZSBDTE9ORV9QQVJFTlRfU0VUVElEIDB4MDAxMDAwMDAgIAorI2RlZmluZSBDTE9ORV9DSElMRF9DTEVBUlRJRCAweDAwMjAwMDAwICAKKyNkZWZpbmUgQ0xPTkVfREVUQUNIRUQgMHgwMDQwMDAwMCAgCisjZGVmaW5lIENMT05FX1VOVFJBQ0VEIDB4MDA4MDAwMDAgIAorI2RlZmluZSBDTE9ORV9DSElMRF9TRVRUSUQgMHgwMTAwMDAwMCAgCisjZGVmaW5lIENMT05FX1NUT1BQRUQgMHgwMjAwMDAwMCAgCisKKyNkZWZpbmUgU0NIRURfTk9STUFMIDAKKyNkZWZpbmUgU0NIRURfRklGTyAxCisjZGVmaW5lIFNDSEVEX1JSIDIKKyNkZWZpbmUgU0NIRURfQkFUQ0ggMworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZW0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZW0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZmE1MzFiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlbS5oCkBAIC0wLDAgKzEsODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NFTV9ICisjZGVmaW5lIF9MSU5VWF9TRU1fSAorCisjaW5jbHVkZSA8bGludXgvaXBjLmg+CisKKyNkZWZpbmUgU0VNX1VORE8gMHgxMDAwICAKKworI2RlZmluZSBHRVRQSUQgMTEgIAorI2RlZmluZSBHRVRWQUwgMTIgIAorI2RlZmluZSBHRVRBTEwgMTMgIAorI2RlZmluZSBHRVROQ05UIDE0ICAKKyNkZWZpbmUgR0VUWkNOVCAxNSAgCisjZGVmaW5lIFNFVFZBTCAxNiAgCisjZGVmaW5lIFNFVEFMTCAxNyAgCisKKyNkZWZpbmUgU0VNX1NUQVQgMTgKKyNkZWZpbmUgU0VNX0lORk8gMTkKKworc3RydWN0IHNlbWlkX2RzIHsKKyBzdHJ1Y3QgaXBjX3Blcm0gc2VtX3Blcm07CisgX19rZXJuZWxfdGltZV90IHNlbV9vdGltZTsKKyBfX2tlcm5lbF90aW1lX3Qgc2VtX2N0aW1lOworIHN0cnVjdCBzZW0gKnNlbV9iYXNlOworIHN0cnVjdCBzZW1fcXVldWUgKnNlbV9wZW5kaW5nOworIHN0cnVjdCBzZW1fcXVldWUgKipzZW1fcGVuZGluZ19sYXN0OworIHN0cnVjdCBzZW1fdW5kbyAqdW5kbzsKKyB1bnNpZ25lZCBzaG9ydCBzZW1fbnNlbXM7Cit9OworCisjaW5jbHVkZSA8YXNtL3NlbWJ1Zi5oPgorCitzdHJ1Y3Qgc2VtYnVmIHsKKyB1bnNpZ25lZCBzaG9ydCBzZW1fbnVtOworIHNob3J0IHNlbV9vcDsKKyBzaG9ydCBzZW1fZmxnOworfTsKKwordW5pb24gc2VtdW4geworIGludCB2YWw7Cisgc3RydWN0IHNlbWlkX2RzIF9fdXNlciAqYnVmOworIHVuc2lnbmVkIHNob3J0IF9fdXNlciAqYXJyYXk7Cisgc3RydWN0IHNlbWluZm8gX191c2VyICpfX2J1ZjsKKyB2b2lkIF9fdXNlciAqX19wYWQ7Cit9OworCitzdHJ1Y3Qgc2VtaW5mbyB7CisgaW50IHNlbW1hcDsKKyBpbnQgc2VtbW5pOworIGludCBzZW1tbnM7CisgaW50IHNlbW1udTsKKyBpbnQgc2VtbXNsOworIGludCBzZW1vcG07CisgaW50IHNlbXVtZTsKKyBpbnQgc2VtdXN6OworIGludCBzZW12bXg7CisgaW50IHNlbWFlbTsKK307CisKKyNkZWZpbmUgU0VNTU5JIDEyOCAgCisjZGVmaW5lIFNFTU1TTCAyNTAgIAorI2RlZmluZSBTRU1NTlMgKFNFTU1OSSpTRU1NU0wpICAKKyNkZWZpbmUgU0VNT1BNIDMyICAKKyNkZWZpbmUgU0VNVk1YIDMyNzY3ICAKKyNkZWZpbmUgU0VNQUVNIFNFTVZNWCAgCisKKyNkZWZpbmUgU0VNVU1FIFNFTU9QTSAgCisjZGVmaW5lIFNFTU1OVSBTRU1NTlMgIAorI2RlZmluZSBTRU1NQVAgU0VNTU5TICAKKyNkZWZpbmUgU0VNVVNaIDIwICAKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VxX2ZpbGUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFfZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxZTMxNGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VxX2ZpbGUuaApAQCAtMCwwICsxLDE0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TRVFfRklMRV9ICisjZGVmaW5lIF9MSU5VWF9TRVFfRklMRV9ICisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXFsb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VxbG9jay5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExZTA1ZDQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VxbG9jay5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9TRVFMT0NLX0gKKyNkZWZpbmUgX19MSU5VWF9TRVFMT0NLX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgdW5zaWduZWQgc2VxdWVuY2U7Cisgc3BpbmxvY2tfdCBsb2NrOworfSBzZXFsb2NrX3Q7CisKKyNkZWZpbmUgX19TRVFMT0NLX1VOTE9DS0VEKGxvY2tuYW1lKSAgIHsgMCwgX19TUElOX0xPQ0tfVU5MT0NLRUQobG9ja25hbWUpIH0KKworI2RlZmluZSBTRVFMT0NLX1VOTE9DS0VEICAgX19TRVFMT0NLX1VOTE9DS0VEKG9sZF9zdHlsZV9zZXFsb2NrX2luaXQpCisKKyNkZWZpbmUgc2VxbG9ja19pbml0KHgpICAgZG8geyAqKHgpID0gKHNlcWxvY2tfdCkgX19TRVFMT0NLX1VOTE9DS0VEKHgpOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIERFRklORV9TRVFMT0NLKHgpICAgc2VxbG9ja190IHggPSBfX1NFUUxPQ0tfVU5MT0NLRUQoeCkKKworI2RlZmluZSBTRVFDTlRfWkVSTyB7IDAgfQorI2RlZmluZSBzZXFjb3VudF9pbml0KHgpIGRvIHsgKih4KSA9IChzZXFjb3VudF90KSBTRVFDTlRfWkVSTzsgfSB3aGlsZSAoMCkKKworI2RlZmluZSB3cml0ZV9zZXFsb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpICAgZG8geyBsb2NhbF9pcnFfc2F2ZShmbGFncyk7IHdyaXRlX3NlcWxvY2sobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHdyaXRlX3NlcWxvY2tfaXJxKGxvY2spICAgZG8geyBsb2NhbF9pcnFfZGlzYWJsZSgpOyB3cml0ZV9zZXFsb2NrKGxvY2spOyB9IHdoaWxlICgwKQorI2RlZmluZSB3cml0ZV9zZXFsb2NrX2JoKGxvY2spICAgZG8geyBsb2NhbF9iaF9kaXNhYmxlKCk7IHdyaXRlX3NlcWxvY2sobG9jayk7IH0gd2hpbGUgKDApCisjZGVmaW5lIHdyaXRlX3NlcXVubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSAgIGRvIHsgd3JpdGVfc2VxdW5sb2NrKGxvY2spOyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgd3JpdGVfc2VxdW5sb2NrX2lycShsb2NrKSAgIGRvIHsgd3JpdGVfc2VxdW5sb2NrKGxvY2spOyBsb2NhbF9pcnFfZW5hYmxlKCk7IH0gd2hpbGUoMCkKKyNkZWZpbmUgd3JpdGVfc2VxdW5sb2NrX2JoKGxvY2spICAgZG8geyB3cml0ZV9zZXF1bmxvY2sobG9jayk7IGxvY2FsX2JoX2VuYWJsZSgpOyB9IHdoaWxlKDApCisjZGVmaW5lIHJlYWRfc2VxYmVnaW5faXJxc2F2ZShsb2NrLCBmbGFncykgICAoeyBsb2NhbF9pcnFfc2F2ZShmbGFncyk7IHJlYWRfc2VxYmVnaW4obG9jayk7IH0pCisjZGVmaW5lIHJlYWRfc2VxcmV0cnlfaXJxcmVzdG9yZShsb2NrLCBpdiwgZmxhZ3MpICAgKHsgICBpbnQgcmV0ID0gcmVhZF9zZXFyZXRyeShsb2NrLCBpdik7ICAgbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOyAgIHJldDsgICB9KQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX2NvcmUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpYWxfY29yZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc5ZjAzNzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX2NvcmUuaApAQCAtMCwwICsxLDk1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIExJTlVYX1NFUklBTF9DT1JFX0gKKyNkZWZpbmUgTElOVVhfU0VSSUFMX0NPUkVfSAorCisjZGVmaW5lIFBPUlRfVU5LTk9XTiAwCisjZGVmaW5lIFBPUlRfODI1MCAxCisjZGVmaW5lIFBPUlRfMTY0NTAgMgorI2RlZmluZSBQT1JUXzE2NTUwIDMKKyNkZWZpbmUgUE9SVF8xNjU1MEEgNAorI2RlZmluZSBQT1JUX0NJUlJVUyA1CisjZGVmaW5lIFBPUlRfMTY2NTAgNgorI2RlZmluZSBQT1JUXzE2NjUwVjIgNworI2RlZmluZSBQT1JUXzE2NzUwIDgKKyNkZWZpbmUgUE9SVF9TVEFSVEVDSCA5CisjZGVmaW5lIFBPUlRfMTZDOTUwIDEwCisjZGVmaW5lIFBPUlRfMTY2NTQgMTEKKyNkZWZpbmUgUE9SVF8xNjg1MCAxMgorI2RlZmluZSBQT1JUX1JTQSAxMworI2RlZmluZSBQT1JUX05TMTY1NTBBIDE0CisjZGVmaW5lIFBPUlRfWFNDQUxFIDE1CisjZGVmaW5lIFBPUlRfTUFYXzgyNTAgMTUgIAorCisjZGVmaW5lIFBPUlRfUFhBIDMxCisjZGVmaW5lIFBPUlRfQU1CQSAzMgorI2RlZmluZSBQT1JUX0NMUFM3MTFYIDMzCisjZGVmaW5lIFBPUlRfU0ExMTAwIDM0CisjZGVmaW5lIFBPUlRfVUFSVDAwIDM1CisjZGVmaW5lIFBPUlRfMjEyODUgMzcKKworI2RlZmluZSBQT1JUX1NVTlpJTE9HIDM4CisjZGVmaW5lIFBPUlRfU1VOU0FCIDM5CisKKyNkZWZpbmUgUE9SVF9WODUwRV9VQVJUIDQwCisKKyNkZWZpbmUgUE9SVF9EWiA0NworCisjZGVmaW5lIFBPUlRfTVVYIDQ4CisKKyNkZWZpbmUgUE9SVF9BVDkxIDQ5CisKKyNkZWZpbmUgUE9SVF9NQUNfWklMT0cgNTAgIAorI2RlZmluZSBQT1JUX1BNQUNfWklMT0cgNTEKKworI2RlZmluZSBQT1JUX1NDSSA1MgorI2RlZmluZSBQT1JUX1NDSUYgNTMKKyNkZWZpbmUgUE9SVF9JUkRBIDU0CisKKyNkZWZpbmUgUE9SVF9TM0MyNDEwIDU1CisKKyNkZWZpbmUgUE9SVF9JUDIyWklMT0cgNTYKKworI2RlZmluZSBQT1JUX0xIN0E0MFggNTcKKworI2RlZmluZSBQT1JUX0NQTSA1OAorCisjZGVmaW5lIFBPUlRfTVBDNTJ4eCA1OQorCisjZGVmaW5lIFBPUlRfSUNPTSA2MAorCisjZGVmaW5lIFBPUlRfUzNDMjQ0MCA2MQorCisjZGVmaW5lIFBPUlRfSU1YIDYyCisKKyNkZWZpbmUgUE9SVF9NUFNDIDYzCisKKyNkZWZpbmUgUE9SVF9UWFg5IDY0CisKKyNkZWZpbmUgUE9SVF9WUjQxWFhfU0lVIDY1CisjZGVmaW5lIFBPUlRfVlI0MVhYX0RTSVUgNjYKKworI2RlZmluZSBQT1JUX1MzQzI0MDAgNjcKKworI2RlZmluZSBQT1JUX00zMlJfU0lPIDY4CisKKyNkZWZpbmUgUE9SVF9KU00gNjkKKworI2RlZmluZSBQT1JUX0lQMzEwNiA3MAorCisjZGVmaW5lIFBPUlRfTkVUWCA3MQorCisjZGVmaW5lIFBPUlRfU1VOSFYgNzIKKworI2RlZmluZSBQT1JUX1MzQzI0MTIgNzMKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2VyaWFsX3JlZy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlhbF9yZWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2IxNDlhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlhbF9yZWcuaApAQCAtMCwwICsxLDI0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0VSSUFMX1JFR19ICisjZGVmaW5lIF9MSU5VWF9TRVJJQUxfUkVHX0gKKworI2RlZmluZSBVQVJUX1JYIDAgIAorI2RlZmluZSBVQVJUX1RYIDAgIAorCisjZGVmaW5lIFVBUlRfSUVSIDEgIAorI2RlZmluZSBVQVJUX0lFUl9NU0kgMHgwOCAgCisjZGVmaW5lIFVBUlRfSUVSX1JMU0kgMHgwNCAgCisjZGVmaW5lIFVBUlRfSUVSX1RIUkkgMHgwMiAgCisjZGVmaW5lIFVBUlRfSUVSX1JESSAweDAxICAKKworI2RlZmluZSBVQVJUX0lFUlhfU0xFRVAgMHgxMCAgCisKKyNkZWZpbmUgVUFSVF9JSVIgMiAgCisjZGVmaW5lIFVBUlRfSUlSX05PX0lOVCAweDAxICAKKyNkZWZpbmUgVUFSVF9JSVJfSUQgMHgwNiAgCisjZGVmaW5lIFVBUlRfSUlSX01TSSAweDAwICAKKyNkZWZpbmUgVUFSVF9JSVJfVEhSSSAweDAyICAKKyNkZWZpbmUgVUFSVF9JSVJfUkRJIDB4MDQgIAorI2RlZmluZSBVQVJUX0lJUl9STFNJIDB4MDYgIAorCisjZGVmaW5lIFVBUlRfRkNSIDIgIAorI2RlZmluZSBVQVJUX0ZDUl9FTkFCTEVfRklGTyAweDAxICAKKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfUkNWUiAweDAyICAKKyNkZWZpbmUgVUFSVF9GQ1JfQ0xFQVJfWE1JVCAweDA0ICAKKyNkZWZpbmUgVUFSVF9GQ1JfRE1BX1NFTEVDVCAweDA4ICAKKworI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDAgMHgwMAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMDEgMHg0MAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMTAgMHg4MAorI2RlZmluZSBVQVJUX0ZDUl9SX1RSSUdfMTEgMHhjMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMDAgMHgwMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMDEgMHgxMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMTAgMHgyMAorI2RlZmluZSBVQVJUX0ZDUl9UX1RSSUdfMTEgMHgzMAorCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfTUFTSyAweEMwICAKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl8xIDB4MDAgIAorI2RlZmluZSBVQVJUX0ZDUl9UUklHR0VSXzQgMHg0MCAgCisjZGVmaW5lIFVBUlRfRkNSX1RSSUdHRVJfOCAweDgwICAKKyNkZWZpbmUgVUFSVF9GQ1JfVFJJR0dFUl8xNCAweEMwICAKKworI2RlZmluZSBVQVJUX0ZDUjZfUl9UUklHR0VSXzggMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfMTYgMHg0MCAgCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfMjQgMHg4MCAgCisjZGVmaW5lIFVBUlRfRkNSNl9SX1RSSUdHRVJfMjggMHhDMCAgCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfMTYgMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNSNl9UX1RSSUdHRVJfOCAweDEwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8yNCAweDIwICAKKyNkZWZpbmUgVUFSVF9GQ1I2X1RfVFJJR0dFUl8zMCAweDMwICAKKyNkZWZpbmUgVUFSVF9GQ1I3XzY0QllURSAweDIwICAKKworI2RlZmluZSBVQVJUX0xDUiAzICAKKworI2RlZmluZSBVQVJUX0xDUl9ETEFCIDB4ODAgIAorI2RlZmluZSBVQVJUX0xDUl9TQkMgMHg0MCAgCisjZGVmaW5lIFVBUlRfTENSX1NQQVIgMHgyMCAgCisjZGVmaW5lIFVBUlRfTENSX0VQQVIgMHgxMCAgCisjZGVmaW5lIFVBUlRfTENSX1BBUklUWSAweDA4ICAKKyNkZWZpbmUgVUFSVF9MQ1JfU1RPUCAweDA0ICAKKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjUgMHgwMCAgCisjZGVmaW5lIFVBUlRfTENSX1dMRU42IDB4MDEgIAorI2RlZmluZSBVQVJUX0xDUl9XTEVONyAweDAyICAKKyNkZWZpbmUgVUFSVF9MQ1JfV0xFTjggMHgwMyAgCisKKyNkZWZpbmUgVUFSVF9NQ1IgNCAgCisjZGVmaW5lIFVBUlRfTUNSX0NMS1NFTCAweDgwICAKKyNkZWZpbmUgVUFSVF9NQ1JfVENSVExSIDB4NDAgIAorI2RlZmluZSBVQVJUX01DUl9YT05BTlkgMHgyMCAgCisjZGVmaW5lIFVBUlRfTUNSX0FGRSAweDIwICAKKyNkZWZpbmUgVUFSVF9NQ1JfTE9PUCAweDEwICAKKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMiAweDA4ICAKKyNkZWZpbmUgVUFSVF9NQ1JfT1VUMSAweDA0ICAKKyNkZWZpbmUgVUFSVF9NQ1JfUlRTIDB4MDIgIAorI2RlZmluZSBVQVJUX01DUl9EVFIgMHgwMSAgCisKKyNkZWZpbmUgVUFSVF9MU1IgNSAgCisjZGVmaW5lIFVBUlRfTFNSX1RFTVQgMHg0MCAgCisjZGVmaW5lIFVBUlRfTFNSX1RIUkUgMHgyMCAgCisjZGVmaW5lIFVBUlRfTFNSX0JJIDB4MTAgIAorI2RlZmluZSBVQVJUX0xTUl9GRSAweDA4ICAKKyNkZWZpbmUgVUFSVF9MU1JfUEUgMHgwNCAgCisjZGVmaW5lIFVBUlRfTFNSX09FIDB4MDIgIAorI2RlZmluZSBVQVJUX0xTUl9EUiAweDAxICAKKworI2RlZmluZSBVQVJUX01TUiA2ICAKKyNkZWZpbmUgVUFSVF9NU1JfRENEIDB4ODAgIAorI2RlZmluZSBVQVJUX01TUl9SSSAweDQwICAKKyNkZWZpbmUgVUFSVF9NU1JfRFNSIDB4MjAgIAorI2RlZmluZSBVQVJUX01TUl9DVFMgMHgxMCAgCisjZGVmaW5lIFVBUlRfTVNSX0REQ0QgMHgwOCAgCisjZGVmaW5lIFVBUlRfTVNSX1RFUkkgMHgwNCAgCisjZGVmaW5lIFVBUlRfTVNSX0REU1IgMHgwMiAgCisjZGVmaW5lIFVBUlRfTVNSX0RDVFMgMHgwMSAgCisjZGVmaW5lIFVBUlRfTVNSX0FOWV9ERUxUQSAweDBGICAKKworI2RlZmluZSBVQVJUX1NDUiA3ICAKKworI2RlZmluZSBVQVJUX0RMTCAwICAKKyNkZWZpbmUgVUFSVF9ETE0gMSAgCisKKyNkZWZpbmUgVUFSVF9FRlIgMiAgCisjZGVmaW5lIFVBUlRfRUZSX0NUUyAweDgwICAKKyNkZWZpbmUgVUFSVF9FRlJfUlRTIDB4NDAgIAorI2RlZmluZSBVQVJUX0VGUl9TQ0QgMHgyMCAgCisjZGVmaW5lIFVBUlRfRUZSX0VDQiAweDEwICAKKworI2RlZmluZSBVQVJUX1hPTjEgNCAgCisjZGVmaW5lIFVBUlRfWE9OMiA1ICAKKyNkZWZpbmUgVUFSVF9YT0ZGMSA2ICAKKyNkZWZpbmUgVUFSVF9YT0ZGMiA3ICAKKworI2RlZmluZSBVQVJUX1RJNzUyX1RDUiA2ICAKKyNkZWZpbmUgVUFSVF9USTc1Ml9UTFIgNyAgCisKKyNkZWZpbmUgVUFSVF9UUkcgMCAgCisKKyNkZWZpbmUgVUFSVF9UUkdfMSAweDAxCisjZGVmaW5lIFVBUlRfVFJHXzQgMHgwNAorI2RlZmluZSBVQVJUX1RSR184IDB4MDgKKyNkZWZpbmUgVUFSVF9UUkdfMTYgMHgxMAorI2RlZmluZSBVQVJUX1RSR18zMiAweDIwCisjZGVmaW5lIFVBUlRfVFJHXzY0IDB4NDAKKyNkZWZpbmUgVUFSVF9UUkdfOTYgMHg2MAorI2RlZmluZSBVQVJUX1RSR18xMjAgMHg3OAorI2RlZmluZSBVQVJUX1RSR18xMjggMHg4MAorCisjZGVmaW5lIFVBUlRfRkNUUiAxICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1JUU19OT0RFTEFZIDB4MDAgIAorI2RlZmluZSBVQVJUX0ZDVFJfUlRTXzRERUxBWSAweDAxCisjZGVmaW5lIFVBUlRfRkNUUl9SVFNfNkRFTEFZIDB4MDIKKyNkZWZpbmUgVUFSVF9GQ1RSX1JUU184REVMQVkgMHgwMworI2RlZmluZSBVQVJUX0ZDVFJfSVJEQSAweDA0ICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1RYX0lOVCAweDA4ICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0EgMHgwMCAgCisjZGVmaW5lIFVBUlRfRkNUUl9UUkdCIDB4MTAgIAorI2RlZmluZSBVQVJUX0ZDVFJfVFJHQyAweDIwICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1RSR0QgMHgzMCAgCisjZGVmaW5lIFVBUlRfRkNUUl9TQ1JfU1dBUCAweDQwICAKKyNkZWZpbmUgVUFSVF9GQ1RSX1JYIDB4MDAgIAorI2RlZmluZSBVQVJUX0ZDVFJfVFggMHg4MCAgCisKKyNkZWZpbmUgVUFSVF9FTVNSIDcgIAorI2RlZmluZSBVQVJUX0VNU1JfRklGT19DT1VOVCAweDAxICAKKyNkZWZpbmUgVUFSVF9FTVNSX0FMVF9DT1VOVCAweDAyICAKKworI2RlZmluZSBVQVJUX0lFUl9ETUFFIDB4ODAgIAorI2RlZmluZSBVQVJUX0lFUl9VVUUgMHg0MCAgCisjZGVmaW5lIFVBUlRfSUVSX05SWkUgMHgyMCAgCisjZGVmaW5lIFVBUlRfSUVSX1JUT0lFIDB4MTAgIAorCisjZGVmaW5lIFVBUlRfSUlSX1RPRCAweDA4ICAKKworI2RlZmluZSBVQVJUX0ZDUl9QWEFSMSAweDAwICAKKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjggMHg0MCAgCisjZGVmaW5lIFVBUlRfRkNSX1BYQVIxNiAweDgwICAKKyNkZWZpbmUgVUFSVF9GQ1JfUFhBUjMyIDB4YzAgIAorCisjZGVmaW5lIFVBUlRfQVNSIDB4MDEgIAorI2RlZmluZSBVQVJUX1JGTCAweDAzICAKKyNkZWZpbmUgVUFSVF9URkwgMHgwNCAgCisjZGVmaW5lIFVBUlRfSUNSIDB4MDUgIAorCisjZGVmaW5lIFVBUlRfQUNSIDB4MDAgIAorI2RlZmluZSBVQVJUX0NQUiAweDAxICAKKyNkZWZpbmUgVUFSVF9UQ1IgMHgwMiAgCisjZGVmaW5lIFVBUlRfQ0tTIDB4MDMgIAorI2RlZmluZSBVQVJUX1RUTCAweDA0ICAKKyNkZWZpbmUgVUFSVF9SVEwgMHgwNSAgCisjZGVmaW5lIFVBUlRfRkNMIDB4MDYgIAorI2RlZmluZSBVQVJUX0ZDSCAweDA3ICAKKyNkZWZpbmUgVUFSVF9JRDEgMHgwOCAgCisjZGVmaW5lIFVBUlRfSUQyIDB4MDkgIAorI2RlZmluZSBVQVJUX0lEMyAweDBBICAKKyNkZWZpbmUgVUFSVF9SRVYgMHgwQiAgCisjZGVmaW5lIFVBUlRfQ1NSIDB4MEMgIAorI2RlZmluZSBVQVJUX05NUiAweDBEICAKKyNkZWZpbmUgVUFSVF9DVFIgMHhGRgorCisjZGVmaW5lIFVBUlRfQUNSX1JYRElTIDB4MDEgIAorI2RlZmluZSBVQVJUX0FDUl9UWERJUyAweDAyICAKKyNkZWZpbmUgVUFSVF9BQ1JfRFNSRkMgMHgwNCAgCisjZGVmaW5lIFVBUlRfQUNSX1RMRU5CIDB4MjAgIAorI2RlZmluZSBVQVJUX0FDUl9JQ1JSRCAweDQwICAKKyNkZWZpbmUgVUFSVF9BQ1JfQVNSRU4gMHg4MCAgCisKKyNkZWZpbmUgVUFSVF9SU0FfQkFTRSAoLTgpCisKKyNkZWZpbmUgVUFSVF9SU0FfTVNSICgoVUFSVF9SU0FfQkFTRSkgKyAwKSAgCisKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX1NXQVAgKDEgPDwgMCkgIAorI2RlZmluZSBVQVJUX1JTQV9NU1JfRklGTyAoMSA8PCAyKSAgCisjZGVmaW5lIFVBUlRfUlNBX01TUl9GTE9XICgxIDw8IDMpICAKKyNkZWZpbmUgVUFSVF9SU0FfTVNSX0lUWVAgKDEgPDwgNCkgIAorCisjZGVmaW5lIFVBUlRfUlNBX0lFUiAoKFVBUlRfUlNBX0JBU0UpICsgMSkgIAorCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9SeF9GSUZPX0ggKDEgPDwgMCkgIAorI2RlZmluZSBVQVJUX1JTQV9JRVJfVHhfRklGT19IICgxIDw8IDEpICAKKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1R4X0ZJRk9fRSAoMSA8PCAyKSAgCisjZGVmaW5lIFVBUlRfUlNBX0lFUl9SeF9UT1VUICgxIDw8IDMpICAKKyNkZWZpbmUgVUFSVF9SU0FfSUVSX1RJTUVSICgxIDw8IDQpICAKKworI2RlZmluZSBVQVJUX1JTQV9TUlIgKChVQVJUX1JTQV9CQVNFKSArIDIpICAKKworI2RlZmluZSBVQVJUX1JTQV9TUlJfVHhfRklGT19ORU1QICgxIDw8IDApICAKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1R4X0ZJRk9fTkhGTCAoMSA8PCAxKSAgCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9UeF9GSUZPX05GVUwgKDEgPDwgMikgIAorI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfRklGT19ORU1QICgxIDw8IDMpICAKKyNkZWZpbmUgVUFSVF9SU0FfU1JSX1J4X0ZJRk9fTkhGTCAoMSA8PCA0KSAgCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9SeF9GSUZPX05GVUwgKDEgPDwgNSkgIAorI2RlZmluZSBVQVJUX1JTQV9TUlJfUnhfVE9VVCAoMSA8PCA2KSAgCisjZGVmaW5lIFVBUlRfUlNBX1NSUl9USU1FUiAoMSA8PCA3KSAgCisKKyNkZWZpbmUgVUFSVF9SU0FfRlJSICgoVUFSVF9SU0FfQkFTRSkgKyAyKSAgCisKKyNkZWZpbmUgVUFSVF9SU0FfVElWU1IgKChVQVJUX1JTQV9CQVNFKSArIDMpICAKKworI2RlZmluZSBVQVJUX1JTQV9UQ1IgKChVQVJUX1JTQV9CQVNFKSArIDQpICAKKworI2RlZmluZSBVQVJUX1JTQV9UQ1JfU1dJVENIICgxIDw8IDApICAKKworI2RlZmluZSBTRVJJQUxfUlNBX0JBVURfQkFTRSAoOTIxNjAwKQorI2RlZmluZSBTRVJJQUxfUlNBX0JBVURfQkFTRV9MTyAoU0VSSUFMX1JTQV9CQVVEX0JBU0UgLyA4KQorCisjZGVmaW5lIFVBUlRfT01BUF9NRFIxIDB4MDggIAorI2RlZmluZSBVQVJUX09NQVBfTURSMiAweDA5ICAKKyNkZWZpbmUgVUFSVF9PTUFQX1NDUiAweDEwICAKKyNkZWZpbmUgVUFSVF9PTUFQX1NTUiAweDExICAKKyNkZWZpbmUgVUFSVF9PTUFQX0VCTFIgMHgxMiAgCisjZGVmaW5lIFVBUlRfT01BUF9PU0NfMTJNX1NFTCAweDEzICAKKyNkZWZpbmUgVUFSVF9PTUFQX01WRVIgMHgxNCAgCisjZGVmaW5lIFVBUlRfT01BUF9TWVNDIDB4MTUgIAorI2RlZmluZSBVQVJUX09NQVBfU1lTUyAweDE2ICAKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NlcmlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2YwNDk4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zZXJpby5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1NFUklPX0gKKyNkZWZpbmUgX1NFUklPX0gKKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNkZWZpbmUgU1BJT0NTVFlQRSBfSU9XKCdxJywgMHgwMSwgdW5zaWduZWQgbG9uZykKKworI2RlZmluZSBTRVJJT19USU1FT1VUIDEKKyNkZWZpbmUgU0VSSU9fUEFSSVRZIDIKKyNkZWZpbmUgU0VSSU9fRlJBTUUgNAorCisjZGVmaW5lIFNFUklPX1hUIDB4MDAKKyNkZWZpbmUgU0VSSU9fODA0MiAweDAxCisjZGVmaW5lIFNFUklPX1JTMjMyIDB4MDIKKyNkZWZpbmUgU0VSSU9fSElMX01MQyAweDAzCisjZGVmaW5lIFNFUklPX1BTX1BTVEhSVSAweDA1CisjZGVmaW5lIFNFUklPXzgwNDJfWEwgMHgwNgorCisjZGVmaW5lIFNFUklPX1VOS05PV04gMHgwMAorI2RlZmluZSBTRVJJT19NU0MgMHgwMQorI2RlZmluZSBTRVJJT19TVU4gMHgwMgorI2RlZmluZSBTRVJJT19NUyAweDAzCisjZGVmaW5lIFNFUklPX01QIDB4MDQKKyNkZWZpbmUgU0VSSU9fTVogMHgwNQorI2RlZmluZSBTRVJJT19NWlAgMHgwNgorI2RlZmluZSBTRVJJT19NWlBQIDB4MDcKKyNkZWZpbmUgU0VSSU9fVlNYWFhBQSAweDA4CisjZGVmaW5lIFNFUklPX1NVTktCRCAweDEwCisjZGVmaW5lIFNFUklPX1dBUlJJT1IgMHgxOAorI2RlZmluZSBTRVJJT19TUEFDRU9SQiAweDE5CisjZGVmaW5lIFNFUklPX01BR0VMTEFOIDB4MWEKKyNkZWZpbmUgU0VSSU9fU1BBQ0VCQUxMIDB4MWIKKyNkZWZpbmUgU0VSSU9fR1VOWkUgMHgxYworI2RlZmluZSBTRVJJT19JRk9SQ0UgMHgxZAorI2RlZmluZSBTRVJJT19TVElOR0VSIDB4MWUKKyNkZWZpbmUgU0VSSU9fTkVXVE9OIDB4MWYKKyNkZWZpbmUgU0VSSU9fU1RPV0FXQVkgMHgyMAorI2RlZmluZSBTRVJJT19IMzYwMCAweDIxCisjZGVmaW5lIFNFUklPX1BTMlNFUiAweDIyCisjZGVmaW5lIFNFUklPX1RXSURLQkQgMHgyMworI2RlZmluZSBTRVJJT19UV0lESk9ZIDB4MjQKKyNkZWZpbmUgU0VSSU9fSElMIDB4MjUKKyNkZWZpbmUgU0VSSU9fU05FUzIzMiAweDI2CisjZGVmaW5lIFNFUklPX1NFTVRFQ0ggMHgyNworI2RlZmluZSBTRVJJT19MS0tCRCAweDI4CisjZGVmaW5lIFNFUklPX0VMTyAweDI5CisjZGVmaW5lIFNFUklPX01JQ1JPVE9VQ0ggMHgzMAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaG0uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zaG0uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzA1NmRiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NobS5oCkBAIC0wLDAgKzEsNzQgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NITV9IXworI2RlZmluZSBfTElOVVhfU0hNX0hfCisKKyNpbmNsdWRlIDxsaW51eC9pcGMuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKKyNkZWZpbmUgU0hNTUFYIDB4MjAwMDAwMCAgCisjZGVmaW5lIFNITU1JTiAxICAKKyNkZWZpbmUgU0hNTU5JIDQwOTYgIAorI2RlZmluZSBTSE1BTEwgKFNITU1BWC9QQUdFX1NJWkUqKFNITU1OSS8xNikpICAKKyNkZWZpbmUgU0hNU0VHIFNITU1OSSAgCisKKyNpbmNsdWRlIDxhc20vc2htcGFyYW0uaD4KKworc3RydWN0IHNobWlkX2RzIHsKKyBzdHJ1Y3QgaXBjX3Blcm0gc2htX3Blcm07CisgaW50IHNobV9zZWdzejsKKyBfX2tlcm5lbF90aW1lX3Qgc2htX2F0aW1lOworIF9fa2VybmVsX3RpbWVfdCBzaG1fZHRpbWU7CisgX19rZXJuZWxfdGltZV90IHNobV9jdGltZTsKKyBfX2tlcm5lbF9pcGNfcGlkX3Qgc2htX2NwaWQ7CisgX19rZXJuZWxfaXBjX3BpZF90IHNobV9scGlkOworIHVuc2lnbmVkIHNob3J0IHNobV9uYXR0Y2g7CisgdW5zaWduZWQgc2hvcnQgc2htX3VudXNlZDsKKyB2b2lkICpzaG1fdW51c2VkMjsKKyB2b2lkICpzaG1fdW51c2VkMzsKK307CisKKyNpbmNsdWRlIDxhc20vc2htYnVmLmg+CisKKyNkZWZpbmUgU0hNX1IgMDQwMCAgCisjZGVmaW5lIFNITV9XIDAyMDAgIAorCisjZGVmaW5lIFNITV9SRE9OTFkgMDEwMDAwICAKKyNkZWZpbmUgU0hNX1JORCAwMjAwMDAgIAorI2RlZmluZSBTSE1fUkVNQVAgMDQwMDAwICAKKyNkZWZpbmUgU0hNX0VYRUMgMDEwMDAwMCAgCisKKyNkZWZpbmUgU0hNX0xPQ0sgMTEKKyNkZWZpbmUgU0hNX1VOTE9DSyAxMgorCisjZGVmaW5lIFNITV9TVEFUIDEzCisjZGVmaW5lIFNITV9JTkZPIDE0CisKK3N0cnVjdCBzaG1pbmZvIHsKKyBpbnQgc2htbWF4OworIGludCBzaG1taW47CisgaW50IHNobW1uaTsKKyBpbnQgc2htc2VnOworIGludCBzaG1hbGw7Cit9OworCitzdHJ1Y3Qgc2htX2luZm8geworIGludCB1c2VkX2lkczsKKyB1bnNpZ25lZCBsb25nIHNobV90b3Q7CisgdW5zaWduZWQgbG9uZyBzaG1fcnNzOworIHVuc2lnbmVkIGxvbmcgc2htX3N3cDsKKyB1bnNpZ25lZCBsb25nIHN3YXBfYXR0ZW1wdHM7CisgdW5zaWduZWQgbG9uZyBzd2FwX3N1Y2Nlc3NlczsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NpZ25hbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NpZ25hbC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ1NzdlNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2lnbmFsLmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0lHTkFMX0gKKyNkZWZpbmUgX0xJTlVYX1NJR05BTF9ICisKKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisjaW5jbHVkZSA8YXNtL3NpZ2luZm8uaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2tidWZmLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2tidWZmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODIxNDBhNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9za2J1ZmYuaApAQCAtMCwwICsxLDE2NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU0tCVUZGX0gKKyNkZWZpbmUgX0xJTlVYX1NLQlVGRl9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KKyNpbmNsdWRlIDxsaW51eC9jYWNoZS5oPgorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KKyNpbmNsdWRlIDxsaW51eC9oaWdobWVtLmg+CisjaW5jbHVkZSA8bGludXgvcG9sbC5oPgorI2luY2x1ZGUgPGxpbnV4L25ldC5oPgorI2luY2x1ZGUgPGxpbnV4L3RleHRzZWFyY2guaD4KKyNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KKyNpbmNsdWRlIDxsaW51eC9kbWFlbmdpbmUuaD4KKworI2RlZmluZSBIQVZFX0FMTE9DX1NLQiAgCisjZGVmaW5lIEhBVkVfQUxJR05BQkxFX1NLQiAgCisKKyNkZWZpbmUgQ0hFQ0tTVU1fTk9ORSAwCisjZGVmaW5lIENIRUNLU1VNX0hXIDEKKyNkZWZpbmUgQ0hFQ0tTVU1fVU5ORUNFU1NBUlkgMgorCisjZGVmaW5lIFNLQl9EQVRBX0FMSUdOKFgpICgoKFgpICsgKFNNUF9DQUNIRV9CWVRFUyAtIDEpKSAmICAgfihTTVBfQ0FDSEVfQllURVMgLSAxKSkKKyNkZWZpbmUgU0tCX01BWF9PUkRFUihYLCBPUkRFUikgKCgoUEFHRV9TSVpFIDw8IChPUkRFUikpIC0gKFgpIC0gICBzaXplb2Yoc3RydWN0IHNrYl9zaGFyZWRfaW5mbykpICYgICB+KFNNUF9DQUNIRV9CWVRFUyAtIDEpKQorI2RlZmluZSBTS0JfTUFYX0hFQUQoWCkgKFNLQl9NQVhfT1JERVIoKFgpLCAwKSkKKyNkZWZpbmUgU0tCX01BWF9BTExPQyAoU0tCX01BWF9PUkRFUigwLCAyKSkKKworc3RydWN0IG5ldF9kZXZpY2U7CisKK3N0cnVjdCBza19idWZmX2hlYWQgeworCisgc3RydWN0IHNrX2J1ZmYgKm5leHQ7Cisgc3RydWN0IHNrX2J1ZmYgKnByZXY7CisKKyBfX3UzMiBxbGVuOworIHNwaW5sb2NrX3QgbG9jazsKK307CisKK3N0cnVjdCBza19idWZmOworCisjZGVmaW5lIE1BWF9TS0JfRlJBR1MgKDY1NTM2L1BBR0VfU0laRSArIDIpCisKK3R5cGVkZWYgc3RydWN0IHNrYl9mcmFnX3N0cnVjdCBza2JfZnJhZ190OworCitzdHJ1Y3Qgc2tiX2ZyYWdfc3RydWN0IHsKKyBzdHJ1Y3QgcGFnZSAqcGFnZTsKKyBfX3UxNiBwYWdlX29mZnNldDsKKyBfX3UxNiBzaXplOworfTsKKworc3RydWN0IHNrYl9zaGFyZWRfaW5mbyB7CisgYXRvbWljX3QgZGF0YXJlZjsKKyB1bnNpZ25lZCBzaG9ydCBucl9mcmFnczsKKyB1bnNpZ25lZCBzaG9ydCBnc29fc2l6ZTsKKworIHVuc2lnbmVkIHNob3J0IGdzb19zZWdzOworIHVuc2lnbmVkIHNob3J0IGdzb190eXBlOworIHVuc2lnbmVkIGludCBpcDZfZnJhZ19pZDsKKyBzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19saXN0OworIHNrYl9mcmFnX3QgZnJhZ3NbTUFYX1NLQl9GUkFHU107Cit9OworCisjZGVmaW5lIFNLQl9EQVRBUkVGX1NISUZUIDE2CisjZGVmaW5lIFNLQl9EQVRBUkVGX01BU0sgKCgxIDw8IFNLQl9EQVRBUkVGX1NISUZUKSAtIDEpCisKK3N0cnVjdCBza2JfdGltZXZhbCB7CisgdTMyIG9mZl9zZWM7CisgdTMyIG9mZl91c2VjOworfTsKKworZW51bSB7CisgU0tCX0ZDTE9ORV9VTkFWQUlMQUJMRSwKKyBTS0JfRkNMT05FX09SSUcsCisgU0tCX0ZDTE9ORV9DTE9ORSwKK307CisKK2VudW0geworIFNLQl9HU09fVENQVjQgPSAxIDw8IDAsCisgU0tCX0dTT19VRFAgPSAxIDw8IDEsCisKKyBTS0JfR1NPX0RPREdZID0gMSA8PCAyLAorCisgU0tCX0dTT19UQ1BfRUNOID0gMSA8PCAzLAorCisgU0tCX0dTT19UQ1BWNiA9IDEgPDwgNCwKK307CisKK3N0cnVjdCBza19idWZmIHsKKworIHN0cnVjdCBza19idWZmICpuZXh0OworIHN0cnVjdCBza19idWZmICpwcmV2OworCisgc3RydWN0IHNvY2sgKnNrOworIHN0cnVjdCBza2JfdGltZXZhbCB0c3RhbXA7Cisgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKKyBzdHJ1Y3QgbmV0X2RldmljZSAqaW5wdXRfZGV2OworCisgdW5pb24geworIHN0cnVjdCB0Y3BoZHIgKnRoOworIHN0cnVjdCB1ZHBoZHIgKnVoOworIHN0cnVjdCBpY21waGRyICppY21waDsKKyBzdHJ1Y3QgaWdtcGhkciAqaWdtcGg7Cisgc3RydWN0IGlwaGRyICppcGlwaDsKKyBzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7CisgdW5zaWduZWQgY2hhciAqcmF3OworIH0gaDsKKworIHVuaW9uIHsKKyBzdHJ1Y3QgaXBoZHIgKmlwaDsKKyBzdHJ1Y3QgaXB2NmhkciAqaXB2Nmg7Cisgc3RydWN0IGFycGhkciAqYXJwaDsKKyB1bnNpZ25lZCBjaGFyICpyYXc7CisgfSBuaDsKKworIHVuaW9uIHsKKyB1bnNpZ25lZCBjaGFyICpyYXc7CisgfSBtYWM7CisKKyBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7Cisgc3RydWN0IHNlY19wYXRoICpzcDsKKworIGNoYXIgY2JbNDhdOworCisgdW5zaWduZWQgaW50IGxlbiwKKyBkYXRhX2xlbiwKKyBtYWNfbGVuLAorIGNzdW07CisgX191MzIgcHJpb3JpdHk7CisgX191OCBsb2NhbF9kZjoxLAorIGNsb25lZDoxLAorIGlwX3N1bW1lZDoyLAorIG5vaGRyOjEsCisgbmZjdGluZm86MzsKKyBfX3U4IHBrdF90eXBlOjMsCisgZmNsb25lOjIsCisgaXB2c19wcm9wZXJ0eToxOworIF9fYmUxNiBwcm90b2NvbDsKKworIHZvaWQgKCpkZXN0cnVjdG9yKShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKKworIHVuc2lnbmVkIGludCB0cnVlc2l6ZTsKKyBhdG9taWNfdCB1c2VyczsKKyB1bnNpZ25lZCBjaGFyICpoZWFkLAorICpkYXRhLAorICp0YWlsLAorICplbmQ7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbGFiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2xhYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNjVhOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc2xhYi5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NMQUJfSAorI2RlZmluZSBfTElOVVhfU0xBQl9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtYi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyYzg5NjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21iLmgKQEAgLTAsMCArMSw2MSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU01CX0gKKyNkZWZpbmUgX0xJTlVYX1NNQl9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitlbnVtIHNtYl9wcm90b2NvbCB7CisgU01CX1BST1RPQ09MX05PTkUsCisgU01CX1BST1RPQ09MX0NPUkUsCisgU01CX1BST1RPQ09MX0NPUkVQTFVTLAorIFNNQl9QUk9UT0NPTF9MQU5NQU4xLAorIFNNQl9QUk9UT0NPTF9MQU5NQU4yLAorIFNNQl9QUk9UT0NPTF9OVDEKK307CisKK2VudW0gc21iX2Nhc2VfaG5kbCB7CisgU01CX0NBU0VfREVGQVVMVCwKKyBTTUJfQ0FTRV9MT1dFUiwKKyBTTUJfQ0FTRV9VUFBFUgorfTsKKworc3RydWN0IHNtYl9kc2thdHRyIHsKKyBfX3UxNiB0b3RhbDsKKyBfX3UxNiBhbGxvY2Jsb2NrczsKKyBfX3UxNiBibG9ja3NpemU7CisgX191MTYgZnJlZTsKK307CisKK3N0cnVjdCBzbWJfY29ubl9vcHQgeworCisgdW5zaWduZWQgaW50IGZkOworCisgZW51bSBzbWJfcHJvdG9jb2wgcHJvdG9jb2w7CisgZW51bSBzbWJfY2FzZV9obmRsIGNhc2VfaGFuZGxpbmc7CisKKyBfX3UzMiBtYXhfeG1pdDsKKyBfX3UxNiBzZXJ2ZXJfdWlkOworIF9fdTE2IHRpZDsKKworIF9fdTE2IHNlY21vZGU7CisgX191MTYgbWF4bXV4OworIF9fdTE2IG1heHZjczsKKyBfX3UxNiByYXdtb2RlOworIF9fdTMyIHNlc3NrZXk7CisKKyBfX3UzMiBtYXhyYXc7CisgX191MzIgY2FwYWJpbGl0aWVzOworIF9fczE2IHNlcnZlcnpvbmU7Cit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbXAuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zbXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hYjQ5ODJkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcC5oCkBAIC0wLDAgKzEsMjYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9TTVBfSAorI2RlZmluZSBfX0xJTlVYX1NNUF9ICisKKyNkZWZpbmUgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKSAwCisjZGVmaW5lIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpIDAKKyNkZWZpbmUgc21wX2NhbGxfZnVuY3Rpb24oZnVuYyxpbmZvLHJldHJ5LHdhaXQpICh1cF9zbXBfY2FsbF9mdW5jdGlvbigpKQorI2RlZmluZSBvbl9lYWNoX2NwdShmdW5jLGluZm8scmV0cnksd2FpdCkgICAoeyAgIGxvY2FsX2lycV9kaXNhYmxlKCk7ICAgZnVuYyhpbmZvKTsgICBsb2NhbF9pcnFfZW5hYmxlKCk7ICAgMDsgICB9KQorI2RlZmluZSBudW1fYm9vdGluZ19jcHVzKCkgMQorI2RlZmluZSBzbXBfcHJlcGFyZV9ib290X2NwdSgpIGRvIHt9IHdoaWxlICgwKQorI2RlZmluZSBzbXBfcHJvY2Vzc29yX2lkKCkgcmF3X3NtcF9wcm9jZXNzb3JfaWQoKQorI2RlZmluZSBnZXRfY3B1KCkgKHsgcHJlZW1wdF9kaXNhYmxlKCk7IHNtcF9wcm9jZXNzb3JfaWQoKTsgfSkKKyNkZWZpbmUgcHV0X2NwdSgpIHByZWVtcHRfZW5hYmxlKCkKKyNkZWZpbmUgcHV0X2NwdV9ub19yZXNjaGVkKCkgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcF9sb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc21wX2xvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjNhOTcwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NtcF9sb2NrLmgKQEAgLTAsMCArMSwyMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NNUExPQ0tfSAorI2RlZmluZSBfX0xJTlVYX1NNUExPQ0tfSAorCisjZGVmaW5lIGxvY2tfa2VybmVsKCkgZG8geyB9IHdoaWxlKDApCisjZGVmaW5lIHVubG9ja19rZXJuZWwoKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmVsZWFzZV9rZXJuZWxfbG9jayh0YXNrKSBkbyB7IH0gd2hpbGUoMCkKKyNkZWZpbmUgcmVhY3F1aXJlX2tlcm5lbF9sb2NrKHRhc2spIDAKKyNkZWZpbmUga2VybmVsX2xvY2tlZCgpIDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2V0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2V0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjU3OGRmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb2NrZXQuaApAQCAtMCwwICsxLDIyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU09DS0VUX0gKKyNkZWZpbmUgX0xJTlVYX1NPQ0tFVF9ICisKKyNkZWZpbmUgX0tfU1NfTUFYU0laRSAxMjggIAorI2RlZmluZSBfS19TU19BTElHTlNJWkUgKF9fYWxpZ25vZl9fIChzdHJ1Y3Qgc29ja2FkZHIgKikpCisKK3N0cnVjdCBfX2tlcm5lbF9zb2NrYWRkcl9zdG9yYWdlIHsKKyB1bnNpZ25lZCBzaG9ydCBzc19mYW1pbHk7CisKKyBjaGFyIF9fZGF0YVtfS19TU19NQVhTSVpFIC0gc2l6ZW9mKHVuc2lnbmVkIHNob3J0KV07CisKK30gX19hdHRyaWJ1dGVfXyAoKGFsaWduZWQoX0tfU1NfQUxJR05TSVpFKSkpOworCisjaWYgIWRlZmluZWQoX19HTElCQ19fKSB8fCBfX0dMSUJDX18gPCAyCisKKyNpbmNsdWRlIDxhc20vc29ja2V0Lmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zb2NraW9zLmg+ICAKKyNpbmNsdWRlIDxsaW51eC91aW8uaD4gIAorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAgCisKK3R5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2FfZmFtaWx5X3Q7CisKK3N0cnVjdCBzb2NrYWRkciB7Cisgc2FfZmFtaWx5X3Qgc2FfZmFtaWx5OworIGNoYXIgc2FfZGF0YVsxNF07Cit9OworCitzdHJ1Y3QgbGluZ2VyIHsKKyBpbnQgbF9vbm9mZjsKKyBpbnQgbF9saW5nZXI7Cit9OworCisjZGVmaW5lIHNvY2thZGRyX3N0b3JhZ2UgX19rZXJuZWxfc29ja2FkZHJfc3RvcmFnZQorCitzdHJ1Y3QgbXNnaGRyIHsKKyB2b2lkICogbXNnX25hbWU7CisgaW50IG1zZ19uYW1lbGVuOworIHN0cnVjdCBpb3ZlYyAqIG1zZ19pb3Y7CisgX19rZXJuZWxfc2l6ZV90IG1zZ19pb3ZsZW47Cisgdm9pZCAqIG1zZ19jb250cm9sOworIF9fa2VybmVsX3NpemVfdCBtc2dfY29udHJvbGxlbjsKKyB1bnNpZ25lZCBtc2dfZmxhZ3M7Cit9OworCitzdHJ1Y3QgY21zZ2hkciB7CisgX19rZXJuZWxfc2l6ZV90IGNtc2dfbGVuOworIGludCBjbXNnX2xldmVsOworIGludCBjbXNnX3R5cGU7Cit9OworCisjZGVmaW5lIF9fQ01TR19OWFRIRFIoY3RsLCBsZW4sIGNtc2cpIF9fY21zZ19ueHRoZHIoKGN0bCksKGxlbiksKGNtc2cpKQorI2RlZmluZSBDTVNHX05YVEhEUihtaGRyLCBjbXNnKSBjbXNnX254dGhkcigobWhkciksIChjbXNnKSkKKworI2RlZmluZSBDTVNHX0FMSUdOKGxlbikgKCAoKGxlbikrc2l6ZW9mKGxvbmcpLTEpICYgfihzaXplb2YobG9uZyktMSkgKQorCisjZGVmaW5lIENNU0dfREFUQShjbXNnKSAoKHZvaWQgKikoKGNoYXIgKikoY21zZykgKyBDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpKSkKKyNkZWZpbmUgQ01TR19TUEFDRShsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgQ01TR19BTElHTihsZW4pKQorI2RlZmluZSBDTVNHX0xFTihsZW4pIChDTVNHX0FMSUdOKHNpemVvZihzdHJ1Y3QgY21zZ2hkcikpICsgKGxlbikpCisKKyNkZWZpbmUgX19DTVNHX0ZJUlNUSERSKGN0bCxsZW4pICgobGVuKSA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpID8gICAoc3RydWN0IGNtc2doZHIgKikoY3RsKSA6ICAgKHN0cnVjdCBjbXNnaGRyICopTlVMTCkKKyNkZWZpbmUgQ01TR19GSVJTVEhEUihtc2cpIF9fQ01TR19GSVJTVEhEUigobXNnKS0+bXNnX2NvbnRyb2wsIChtc2cpLT5tc2dfY29udHJvbGxlbikKKyNkZWZpbmUgQ01TR19PSyhtaGRyLCBjbXNnKSAoKGNtc2cpLT5jbXNnX2xlbiA+PSBzaXplb2Yoc3RydWN0IGNtc2doZHIpICYmICAgKGNtc2cpLT5jbXNnX2xlbiA8PSAodW5zaWduZWQgbG9uZykgICAoKG1oZHIpLT5tc2dfY29udHJvbGxlbiAtICAgKChjaGFyICopKGNtc2cpIC0gKGNoYXIgKikobWhkciktPm1zZ19jb250cm9sKSkpCisKKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljIF9faW5saW5lX18KKyNlbGlmIGRlZmluZWQoX19jcGx1c3BsdXMpCisjZGVmaW5lIF9fS0lOTElORSBzdGF0aWMgaW5saW5lCisjZWxzZQorI2RlZmluZSBfX0tJTkxJTkUgc3RhdGljCisjZW5kaWYKKworX19LSU5MSU5FIHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6ZV90IF9fc2l6ZSwKKyBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQoreworIHN0cnVjdCBjbXNnaGRyICogX19wdHI7CisKKyBfX3B0ciA9IChzdHJ1Y3QgY21zZ2hkciopKCgodW5zaWduZWQgY2hhciAqKSBfX2Ntc2cpICsgQ01TR19BTElHTihfX2Ntc2ctPmNtc2dfbGVuKSk7CisgaWYgKCh1bnNpZ25lZCBsb25nKSgoY2hhciopKF9fcHRyKzEpIC0gKGNoYXIgKikgX19jdGwpID4gX19zaXplKQorIHJldHVybiAoc3RydWN0IGNtc2doZHIgKikwOworCisgcmV0dXJuIF9fcHRyOworfQorCitfX0tJTkxJTkUgc3RydWN0IGNtc2doZHIgKiBjbXNnX254dGhkciAoc3RydWN0IG1zZ2hkciAqX19tc2csIHN0cnVjdCBjbXNnaGRyICpfX2Ntc2cpCit7CisgcmV0dXJuIF9fY21zZ19ueHRoZHIoX19tc2ctPm1zZ19jb250cm9sLCBfX21zZy0+bXNnX2NvbnRyb2xsZW4sIF9fY21zZyk7Cit9CisKKyNkZWZpbmUgU0NNX1JJR0hUUyAweDAxICAKKyNkZWZpbmUgU0NNX0NSRURFTlRJQUxTIDB4MDIgIAorI2RlZmluZSBTQ01fU0VDVVJJVFkgMHgwMyAgCisKK3N0cnVjdCB1Y3JlZCB7CisgX191MzIgcGlkOworIF9fdTMyIHVpZDsKKyBfX3UzMiBnaWQ7Cit9OworCisjZGVmaW5lIEFGX1VOU1BFQyAwCisjZGVmaW5lIEFGX1VOSVggMSAgCisjZGVmaW5lIEFGX0xPQ0FMIDEgIAorI2RlZmluZSBBRl9JTkVUIDIgIAorI2RlZmluZSBBRl9BWDI1IDMgIAorI2RlZmluZSBBRl9JUFggNCAgCisjZGVmaW5lIEFGX0FQUExFVEFMSyA1ICAKKyNkZWZpbmUgQUZfTkVUUk9NIDYgIAorI2RlZmluZSBBRl9CUklER0UgNyAgCisjZGVmaW5lIEFGX0FUTVBWQyA4ICAKKyNkZWZpbmUgQUZfWDI1IDkgIAorI2RlZmluZSBBRl9JTkVUNiAxMCAgCisjZGVmaW5lIEFGX1JPU0UgMTEgIAorI2RlZmluZSBBRl9ERUNuZXQgMTIgIAorI2RlZmluZSBBRl9ORVRCRVVJIDEzICAKKyNkZWZpbmUgQUZfU0VDVVJJVFkgMTQgIAorI2RlZmluZSBBRl9LRVkgMTUgIAorI2RlZmluZSBBRl9ORVRMSU5LIDE2CisjZGVmaW5lIEFGX1JPVVRFIEFGX05FVExJTksgIAorI2RlZmluZSBBRl9QQUNLRVQgMTcgIAorI2RlZmluZSBBRl9BU0ggMTggIAorI2RlZmluZSBBRl9FQ09ORVQgMTkgIAorI2RlZmluZSBBRl9BVE1TVkMgMjAgIAorI2RlZmluZSBBRl9TTkEgMjIgIAorI2RlZmluZSBBRl9JUkRBIDIzICAKKyNkZWZpbmUgQUZfUFBQT1ggMjQgIAorI2RlZmluZSBBRl9XQU5QSVBFIDI1ICAKKyNkZWZpbmUgQUZfTExDIDI2ICAKKyNkZWZpbmUgQUZfVElQQyAzMCAgCisjZGVmaW5lIEFGX0JMVUVUT09USCAzMSAgCisjZGVmaW5lIEFGX01BWCAzMiAgCisKKyNkZWZpbmUgUEZfVU5TUEVDIEFGX1VOU1BFQworI2RlZmluZSBQRl9VTklYIEFGX1VOSVgKKyNkZWZpbmUgUEZfTE9DQUwgQUZfTE9DQUwKKyNkZWZpbmUgUEZfSU5FVCBBRl9JTkVUCisjZGVmaW5lIFBGX0FYMjUgQUZfQVgyNQorI2RlZmluZSBQRl9JUFggQUZfSVBYCisjZGVmaW5lIFBGX0FQUExFVEFMSyBBRl9BUFBMRVRBTEsKKyNkZWZpbmUgUEZfTkVUUk9NIEFGX05FVFJPTQorI2RlZmluZSBQRl9CUklER0UgQUZfQlJJREdFCisjZGVmaW5lIFBGX0FUTVBWQyBBRl9BVE1QVkMKKyNkZWZpbmUgUEZfWDI1IEFGX1gyNQorI2RlZmluZSBQRl9JTkVUNiBBRl9JTkVUNgorI2RlZmluZSBQRl9ST1NFIEFGX1JPU0UKKyNkZWZpbmUgUEZfREVDbmV0IEFGX0RFQ25ldAorI2RlZmluZSBQRl9ORVRCRVVJIEFGX05FVEJFVUkKKyNkZWZpbmUgUEZfU0VDVVJJVFkgQUZfU0VDVVJJVFkKKyNkZWZpbmUgUEZfS0VZIEFGX0tFWQorI2RlZmluZSBQRl9ORVRMSU5LIEFGX05FVExJTksKKyNkZWZpbmUgUEZfUk9VVEUgQUZfUk9VVEUKKyNkZWZpbmUgUEZfUEFDS0VUIEFGX1BBQ0tFVAorI2RlZmluZSBQRl9BU0ggQUZfQVNICisjZGVmaW5lIFBGX0VDT05FVCBBRl9FQ09ORVQKKyNkZWZpbmUgUEZfQVRNU1ZDIEFGX0FUTVNWQworI2RlZmluZSBQRl9TTkEgQUZfU05BCisjZGVmaW5lIFBGX0lSREEgQUZfSVJEQQorI2RlZmluZSBQRl9QUFBPWCBBRl9QUFBPWAorI2RlZmluZSBQRl9XQU5QSVBFIEFGX1dBTlBJUEUKKyNkZWZpbmUgUEZfTExDIEFGX0xMQworI2RlZmluZSBQRl9USVBDIEFGX1RJUEMKKyNkZWZpbmUgUEZfQkxVRVRPT1RIIEFGX0JMVUVUT09USAorI2RlZmluZSBQRl9NQVggQUZfTUFYCisKKyNkZWZpbmUgU09NQVhDT05OIDEyOAorCisjZGVmaW5lIE1TR19PT0IgMQorI2RlZmluZSBNU0dfUEVFSyAyCisjZGVmaW5lIE1TR19ET05UUk9VVEUgNAorI2RlZmluZSBNU0dfVFJZSEFSRCA0ICAKKyNkZWZpbmUgTVNHX0NUUlVOQyA4CisjZGVmaW5lIE1TR19QUk9CRSAweDEwICAKKyNkZWZpbmUgTVNHX1RSVU5DIDB4MjAKKyNkZWZpbmUgTVNHX0RPTlRXQUlUIDB4NDAgIAorI2RlZmluZSBNU0dfRU9SIDB4ODAgIAorI2RlZmluZSBNU0dfV0FJVEFMTCAweDEwMCAgCisjZGVmaW5lIE1TR19GSU4gMHgyMDAKKyNkZWZpbmUgTVNHX1NZTiAweDQwMAorI2RlZmluZSBNU0dfQ09ORklSTSAweDgwMCAgCisjZGVmaW5lIE1TR19SU1QgMHgxMDAwCisjZGVmaW5lIE1TR19FUlJRVUVVRSAweDIwMDAgIAorI2RlZmluZSBNU0dfTk9TSUdOQUwgMHg0MDAwICAKKyNkZWZpbmUgTVNHX01PUkUgMHg4MDAwICAKKworI2RlZmluZSBNU0dfRU9GIE1TR19GSU4KKworI2RlZmluZSBNU0dfQ01TR19DT01QQVQgMCAgCisKKyNkZWZpbmUgU09MX0lQIDAKKworI2RlZmluZSBTT0xfVENQIDYKKyNkZWZpbmUgU09MX1VEUCAxNworI2RlZmluZSBTT0xfSVBWNiA0MQorI2RlZmluZSBTT0xfSUNNUFY2IDU4CisjZGVmaW5lIFNPTF9TQ1RQIDEzMgorI2RlZmluZSBTT0xfUkFXIDI1NQorI2RlZmluZSBTT0xfSVBYIDI1NgorI2RlZmluZSBTT0xfQVgyNSAyNTcKKyNkZWZpbmUgU09MX0FUQUxLIDI1OAorI2RlZmluZSBTT0xfTkVUUk9NIDI1OQorI2RlZmluZSBTT0xfUk9TRSAyNjAKKyNkZWZpbmUgU09MX0RFQ05FVCAyNjEKKyNkZWZpbmUgU09MX1gyNSAyNjIKKyNkZWZpbmUgU09MX1BBQ0tFVCAyNjMKKyNkZWZpbmUgU09MX0FUTSAyNjQgIAorI2RlZmluZSBTT0xfQUFMIDI2NSAgCisjZGVmaW5lIFNPTF9JUkRBIDI2NgorI2RlZmluZSBTT0xfTkVUQkVVSSAyNjcKKyNkZWZpbmUgU09MX0xMQyAyNjgKKyNkZWZpbmUgU09MX0RDQ1AgMjY5CisjZGVmaW5lIFNPTF9ORVRMSU5LIDI3MAorI2RlZmluZSBTT0xfVElQQyAyNzEKKworI2RlZmluZSBJUFhfVFlQRSAxCisKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc29ja2lvcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvY2tpb3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTExMzU5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NvY2tpb3MuaApAQCAtMCwwICsxLDEwNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU09DS0lPU19ICisjZGVmaW5lIF9MSU5VWF9TT0NLSU9TX0gKKworI2luY2x1ZGUgPGFzbS9zb2NraW9zLmg+CisKKyNkZWZpbmUgU0lPQ0lOUSBGSU9OUkVBRAorI2RlZmluZSBTSU9DT1VUUSBUSU9DT1VUUQorCisjZGVmaW5lIFNJT0NBRERSVCAweDg5MEIgIAorI2RlZmluZSBTSU9DREVMUlQgMHg4OTBDICAKKyNkZWZpbmUgU0lPQ1JUTVNHIDB4ODkwRCAgCisKKyNkZWZpbmUgU0lPQ0dJRk5BTUUgMHg4OTEwICAKKyNkZWZpbmUgU0lPQ1NJRkxJTksgMHg4OTExICAKKyNkZWZpbmUgU0lPQ0dJRkNPTkYgMHg4OTEyICAKKyNkZWZpbmUgU0lPQ0dJRkZMQUdTIDB4ODkxMyAgCisjZGVmaW5lIFNJT0NTSUZGTEFHUyAweDg5MTQgIAorI2RlZmluZSBTSU9DR0lGQUREUiAweDg5MTUgIAorI2RlZmluZSBTSU9DU0lGQUREUiAweDg5MTYgIAorI2RlZmluZSBTSU9DR0lGRFNUQUREUiAweDg5MTcgIAorI2RlZmluZSBTSU9DU0lGRFNUQUREUiAweDg5MTggIAorI2RlZmluZSBTSU9DR0lGQlJEQUREUiAweDg5MTkgIAorI2RlZmluZSBTSU9DU0lGQlJEQUREUiAweDg5MWEgIAorI2RlZmluZSBTSU9DR0lGTkVUTUFTSyAweDg5MWIgIAorI2RlZmluZSBTSU9DU0lGTkVUTUFTSyAweDg5MWMgIAorI2RlZmluZSBTSU9DR0lGTUVUUklDIDB4ODkxZCAgCisjZGVmaW5lIFNJT0NTSUZNRVRSSUMgMHg4OTFlICAKKyNkZWZpbmUgU0lPQ0dJRk1FTSAweDg5MWYgIAorI2RlZmluZSBTSU9DU0lGTUVNIDB4ODkyMCAgCisjZGVmaW5lIFNJT0NHSUZNVFUgMHg4OTIxICAKKyNkZWZpbmUgU0lPQ1NJRk1UVSAweDg5MjIgIAorI2RlZmluZSBTSU9DU0lGTkFNRSAweDg5MjMgIAorI2RlZmluZSBTSU9DU0lGSFdBRERSIDB4ODkyNCAgCisjZGVmaW5lIFNJT0NHSUZFTkNBUCAweDg5MjUgIAorI2RlZmluZSBTSU9DU0lGRU5DQVAgMHg4OTI2IAorI2RlZmluZSBTSU9DR0lGSFdBRERSIDB4ODkyNyAgCisjZGVmaW5lIFNJT0NHSUZTTEFWRSAweDg5MjkgIAorI2RlZmluZSBTSU9DU0lGU0xBVkUgMHg4OTMwCisjZGVmaW5lIFNJT0NBRERNVUxUSSAweDg5MzEgIAorI2RlZmluZSBTSU9DREVMTVVMVEkgMHg4OTMyCisjZGVmaW5lIFNJT0NHSUZJTkRFWCAweDg5MzMgIAorI2RlZmluZSBTSU9HSUZJTkRFWCBTSU9DR0lGSU5ERVggIAorI2RlZmluZSBTSU9DU0lGUEZMQUdTIDB4ODkzNCAgCisjZGVmaW5lIFNJT0NHSUZQRkxBR1MgMHg4OTM1CisjZGVmaW5lIFNJT0NESUZBRERSIDB4ODkzNiAgCisjZGVmaW5lIFNJT0NTSUZIV0JST0FEQ0FTVCAweDg5MzcgIAorI2RlZmluZSBTSU9DR0lGQ09VTlQgMHg4OTM4ICAKKyNkZWZpbmUgU0lPQ0tJTExBRERSIDB4ODkzOSAgCisKKyNkZWZpbmUgU0lPQ0dJRkJSIDB4ODk0MCAgCisjZGVmaW5lIFNJT0NTSUZCUiAweDg5NDEgIAorCisjZGVmaW5lIFNJT0NHSUZUWFFMRU4gMHg4OTQyICAKKyNkZWZpbmUgU0lPQ1NJRlRYUUxFTiAweDg5NDMgIAorCisjZGVmaW5lIFNJT0NFVEhUT09MIDB4ODk0NiAgCisKKyNkZWZpbmUgU0lPQ0dNSUlQSFkgMHg4OTQ3ICAKKyNkZWZpbmUgU0lPQ0dNSUlSRUcgMHg4OTQ4ICAKKyNkZWZpbmUgU0lPQ1NNSUlSRUcgMHg4OTQ5ICAKKworI2RlZmluZSBTSU9DV0FOREVWIDB4ODk0QSAgCisKKyNkZWZpbmUgU0lPQ0RBUlAgMHg4OTUzICAKKyNkZWZpbmUgU0lPQ0dBUlAgMHg4OTU0ICAKKyNkZWZpbmUgU0lPQ1NBUlAgMHg4OTU1ICAKKworI2RlZmluZSBTSU9DRFJBUlAgMHg4OTYwICAKKyNkZWZpbmUgU0lPQ0dSQVJQIDB4ODk2MSAgCisjZGVmaW5lIFNJT0NTUkFSUCAweDg5NjIgIAorCisjZGVmaW5lIFNJT0NHSUZNQVAgMHg4OTcwICAKKyNkZWZpbmUgU0lPQ1NJRk1BUCAweDg5NzEgIAorCisjZGVmaW5lIFNJT0NBRERETENJIDB4ODk4MCAgCisjZGVmaW5lIFNJT0NERUxETENJIDB4ODk4MSAgCisKKyNkZWZpbmUgU0lPQ0dJRlZMQU4gMHg4OTgyICAKKyNkZWZpbmUgU0lPQ1NJRlZMQU4gMHg4OTgzICAKKworI2RlZmluZSBTSU9DQk9OREVOU0xBVkUgMHg4OTkwICAKKyNkZWZpbmUgU0lPQ0JPTkRSRUxFQVNFIDB4ODk5MSAgCisjZGVmaW5lIFNJT0NCT05EU0VUSFdBRERSIDB4ODk5MiAgCisjZGVmaW5lIFNJT0NCT05EU0xBVkVJTkZPUVVFUlkgMHg4OTkzICAKKyNkZWZpbmUgU0lPQ0JPTkRJTkZPUVVFUlkgMHg4OTk0ICAKKyNkZWZpbmUgU0lPQ0JPTkRDSEFOR0VBQ1RJVkUgMHg4OTk1ICAKKworI2RlZmluZSBTSU9DQlJBRERCUiAweDg5YTAgIAorI2RlZmluZSBTSU9DQlJERUxCUiAweDg5YTEgIAorI2RlZmluZSBTSU9DQlJBRERJRiAweDg5YTIgIAorI2RlZmluZSBTSU9DQlJERUxJRiAweDg5YTMgIAorCisjZGVmaW5lIFNJT0NERVZQUklWQVRFIDB4ODlGMCAgCisKKyNkZWZpbmUgU0lPQ1BST1RPUFJJVkFURSAweDg5RTAgIAorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc291bmRjYXJkLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc291bmRjYXJkLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGM2OWMyOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zb3VuZGNhcmQuaApAQCAtMCwwICsxLDgzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBTT1VORENBUkRfSAorI2RlZmluZSBTT1VORENBUkRfSAorCisjZGVmaW5lIFNPVU5EX1ZFUlNJT04gMHgwMzA4MDIKKyNkZWZpbmUgT1BFTl9TT1VORF9TWVNURU0KKworI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKworI2RlZmluZSBTTkRDQVJEX0FETElCIDEKKyNkZWZpbmUgU05EQ0FSRF9TQiAyCisjZGVmaW5lIFNORENBUkRfUEFTIDMKKyNkZWZpbmUgU05EQ0FSRF9HVVMgNAorI2RlZmluZSBTTkRDQVJEX01QVTQwMSA1CisjZGVmaW5lIFNORENBUkRfU0IxNiA2CisjZGVmaW5lIFNORENBUkRfU0IxNk1JREkgNworI2RlZmluZSBTTkRDQVJEX1VBUlQ2ODUwIDgKKyNkZWZpbmUgU05EQ0FSRF9HVVMxNiA5CisjZGVmaW5lIFNORENBUkRfTVNTIDEwCisjZGVmaW5lIFNORENBUkRfUFNTIDExCisjZGVmaW5lIFNORENBUkRfU1NDQVBFIDEyCisjZGVmaW5lIFNORENBUkRfUFNTX01QVSAxMworI2RlZmluZSBTTkRDQVJEX1BTU19NU1MgMTQKKyNkZWZpbmUgU05EQ0FSRF9TU0NBUEVfTVNTIDE1CisjZGVmaW5lIFNORENBUkRfVFJYUFJPIDE2CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX1NCIDE3CisjZGVmaW5lIFNORENBUkRfVFJYUFJPX01QVSAxOAorI2RlZmluZSBTTkRDQVJEX01BRDE2IDE5CisjZGVmaW5lIFNORENBUkRfTUFEMTZfTVBVIDIwCisjZGVmaW5lIFNORENBUkRfQ1M0MjMyIDIxCisjZGVmaW5lIFNORENBUkRfQ1M0MjMyX01QVSAyMgorI2RlZmluZSBTTkRDQVJEX01BVUkgMjMKKyNkZWZpbmUgU05EQ0FSRF9QU0VVRE9fTVNTIDI0CisjZGVmaW5lIFNORENBUkRfR1VTUE5QIDI1CisjZGVmaW5lIFNORENBUkRfVUFSVDQwMSAyNgorCisjaWZuZGVmIF9TSU9XUgorI2lmIGRlZmluZWQoX0lPV1IpICYmIChkZWZpbmVkKF9BSVgpIHx8ICFkZWZpbmVkKHN1bikgJiYgIWRlZmluZWQoc3BhcmMpICYmICFkZWZpbmVkKF9fc3BhcmNfXykgJiYgIWRlZmluZWQoX19JTkNpb2N0bGgpICYmICFkZWZpbmVkKF9fTHlueF9fKSkKKworI2RlZmluZSBTSU9DUEFSTV9NQVNLIElPQ1BBUk1fTUFTSworI2RlZmluZSBTSU9DX1ZPSUQgSU9DX1ZPSUQKKyNkZWZpbmUgU0lPQ19PVVQgSU9DX09VVAorI2RlZmluZSBTSU9DX0lOIElPQ19JTgorI2RlZmluZSBTSU9DX0lOT1VUIElPQ19JTk9VVAorI2RlZmluZSBfU0lPQ19TSVpFIF9JT0NfU0laRQorI2RlZmluZSBfU0lPQ19ESVIgX0lPQ19ESVIKKyNkZWZpbmUgX1NJT0NfTk9ORSBfSU9DX05PTkUKKyNkZWZpbmUgX1NJT0NfUkVBRCBfSU9DX1JFQUQKKyNkZWZpbmUgX1NJT0NfV1JJVEUgX0lPQ19XUklURQorI2RlZmluZSBfU0lPIF9JTworI2RlZmluZSBfU0lPUiBfSU9SCisjZGVmaW5lIF9TSU9XIF9JT1cKKyNkZWZpbmUgX1NJT1dSIF9JT1dSCisjZWxzZQorCisjZGVmaW5lIFNJT0NQQVJNX01BU0sgMHgxZmZmICAKKyNkZWZpbmUgU0lPQ19WT0lEIDB4MDAwMDAwMDAgIAorI2RlZmluZSBTSU9DX09VVCAweDIwMDAwMDAwICAKKyNkZWZpbmUgU0lPQ19JTiAweDQwMDAwMDAwICAKKyNkZWZpbmUgU0lPQ19JTk9VVCAoU0lPQ19JTnxTSU9DX09VVCkKKworI2RlZmluZSBfU0lPKHgseSkgKChpbnQpKFNJT0NfVk9JRHwoeDw8OCl8eSkpCisjZGVmaW5lIF9TSU9SKHgseSx0KSAoKGludCkoU0lPQ19PVVR8KChzaXplb2YodCkmU0lPQ1BBUk1fTUFTSyk8PDE2KXwoeDw8OCl8eSkpCisjZGVmaW5lIF9TSU9XKHgseSx0KSAoKGludCkoU0lPQ19JTnwoKHNpemVvZih0KSZTSU9DUEFSTV9NQVNLKTw8MTYpfCh4PDw4KXx5KSkKKworI2RlZmluZSBfU0lPV1IoeCx5LHQpICgoaW50KShTSU9DX0lOT1VUfCgoc2l6ZW9mKHQpJlNJT0NQQVJNX01BU0spPDwxNil8KHg8PDgpfHkpKQorI2RlZmluZSBfU0lPQ19TSVpFKHgpICgoeD4+MTYpJlNJT0NQQVJNX01BU0spIAorI2RlZmluZSBfU0lPQ19ESVIoeCkgKHggJiAweGYwMDAwMDAwKQorI2RlZmluZSBfU0lPQ19OT05FIFNJT0NfVk9JRAorI2RlZmluZSBfU0lPQ19SRUFEIFNJT0NfT1VUCisjZGVmaW5lIF9TSU9DX1dSSVRFIFNJT0NfSU4KKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgU05EQ1RMX1NFUV9SRVNFVCBfU0lPICgnUScsIDApCisjZGVmaW5lIFNORENUTF9TRVFfU1lOQyBfU0lPICgnUScsIDEpCisjZGVmaW5lIFNORENUTF9TWU5USF9JTkZPIF9TSU9XUignUScsIDIsIHN0cnVjdCBzeW50aF9pbmZvKQorI2RlZmluZSBTTkRDVExfU0VRX0NUUkxSQVRFIF9TSU9XUignUScsIDMsIGludCkgIAorI2RlZmluZSBTTkRDVExfU0VRX0dFVE9VVENPVU5UIF9TSU9SICgnUScsIDQsIGludCkKKyNkZWZpbmUgU05EQ1RMX1NFUV9HRVRJTkNPVU5UIF9TSU9SICgnUScsIDUsIGludCkKKyNkZWZpbmUgU05EQ1RMX1NFUV9QRVJDTU9ERSBfU0lPVyAoJ1EnLCA2LCBpbnQpCisjZGVmaW5lIFNORENUTF9GTV9MT0FEX0lOU1RSIF9TSU9XICgnUScsIDcsIHN0cnVjdCBzYmlfaW5zdHJ1bWVudCkgIAorI2RlZmluZSBTTkRDVExfU0VRX1RFU1RNSURJIF9TSU9XICgnUScsIDgsIGludCkKKyNkZWZpbmUgU05EQ1RMX1NFUV9SRVNFVFNBTVBMRVMgX1NJT1cgKCdRJywgOSwgaW50KQorI2RlZmluZSBTTkRDVExfU0VRX05SU1lOVEhTIF9TSU9SICgnUScsMTAsIGludCkKKyNkZWZpbmUgU05EQ1RMX1NFUV9OUk1JRElTIF9TSU9SICgnUScsMTEsIGludCkKKyNkZWZpbmUgU05EQ1RMX01JRElfSU5GTyBfU0lPV1IoJ1EnLDEyLCBzdHJ1Y3QgbWlkaV9pbmZvKQorI2RlZmluZSBTTkRDVExfU0VRX1RIUkVTSE9MRCBfU0lPVyAoJ1EnLDEzLCBpbnQpCisjZGVmaW5lIFNORENUTF9TWU5USF9NRU1BVkwgX1NJT1dSKCdRJywxNCwgaW50KSAgCisjZGVmaW5lIFNORENUTF9GTV80T1BfRU5BQkxFIF9TSU9XICgnUScsMTUsIGludCkgIAorI2RlZmluZSBTTkRDVExfU0VRX1BBTklDIF9TSU8gKCdRJywxNykKKyNkZWZpbmUgU05EQ1RMX1NFUV9PVVRPRkJBTkQgX1NJT1cgKCdRJywxOCwgc3RydWN0IHNlcV9ldmVudF9yZWMpCisjZGVmaW5lIFNORENUTF9TRVFfR0VUVElNRSBfU0lPUiAoJ1EnLDE5LCBpbnQpCisjZGVmaW5lIFNORENUTF9TWU5USF9JRCBfU0lPV1IoJ1EnLDIwLCBzdHJ1Y3Qgc3ludGhfaW5mbykKKyNkZWZpbmUgU05EQ1RMX1NZTlRIX0NPTlRST0wgX1NJT1dSKCdRJywyMSwgc3RydWN0IHN5bnRoX2NvbnRyb2wpCisjZGVmaW5lIFNORENUTF9TWU5USF9SRU1PVkVTQU1QTEUgX1NJT1dSKCdRJywyMiwgc3RydWN0IHJlbW92ZV9zYW1wbGUpCisKK3R5cGVkZWYgc3RydWN0IHN5bnRoX2NvbnRyb2wKK3sKKyBpbnQgZGV2bm87CisgY2hhciBkYXRhWzQwMDBdOworfXN5bnRoX2NvbnRyb2w7CisKK3R5cGVkZWYgc3RydWN0IHJlbW92ZV9zYW1wbGUKK3sKKyBpbnQgZGV2bm87CisgaW50IGJhbmtubzsKKyBpbnQgaW5zdHJubzsKK30gcmVtb3ZlX3NhbXBsZTsKKwordHlwZWRlZiBzdHJ1Y3Qgc2VxX2V2ZW50X3JlYyB7CisgdW5zaWduZWQgY2hhciBhcnJbOF07Cit9IHNlcV9ldmVudF9yZWM7CisKKyNkZWZpbmUgU05EQ1RMX1RNUl9USU1FQkFTRSBfU0lPV1IoJ1QnLCAxLCBpbnQpCisjZGVmaW5lIFNORENUTF9UTVJfU1RBUlQgX1NJTyAoJ1QnLCAyKQorI2RlZmluZSBTTkRDVExfVE1SX1NUT1AgX1NJTyAoJ1QnLCAzKQorI2RlZmluZSBTTkRDVExfVE1SX0NPTlRJTlVFIF9TSU8gKCdUJywgNCkKKyNkZWZpbmUgU05EQ1RMX1RNUl9URU1QTyBfU0lPV1IoJ1QnLCA1LCBpbnQpCisjZGVmaW5lIFNORENUTF9UTVJfU09VUkNFIF9TSU9XUignVCcsIDYsIGludCkKKyNkZWZpbmUgVE1SX0lOVEVSTkFMIDB4MDAwMDAwMDEKKyNkZWZpbmUgVE1SX0VYVEVSTkFMIDB4MDAwMDAwMDIKKyNkZWZpbmUgVE1SX01PREVfTUlESSAweDAwMDAwMDEwCisjZGVmaW5lIFRNUl9NT0RFX0ZTSyAweDAwMDAwMDIwCisjZGVmaW5lIFRNUl9NT0RFX0NMUyAweDAwMDAwMDQwCisjZGVmaW5lIFRNUl9NT0RFX1NNUFRFIDB4MDAwMDAwODAKKyNkZWZpbmUgU05EQ1RMX1RNUl9NRVRST05PTUUgX1NJT1cgKCdUJywgNywgaW50KQorI2RlZmluZSBTTkRDVExfVE1SX1NFTEVDVCBfU0lPVyAoJ1QnLCA4LCBpbnQpCisKKyNkZWZpbmUgX0xJTlVYX1BBVENIS0VZX0hfSU5ESVJFQ1QKKyNpbmNsdWRlIDxsaW51eC9wYXRjaGtleS5oPgorI3VuZGVmIF9MSU5VWF9QQVRDSEtFWV9IX0lORElSRUNUCisKKyNpZmRlZiBfX0JZVEVfT1JERVIKKyNpZiBfX0JZVEVfT1JERVIgPT0gX19CSUdfRU5ESUFOCisjZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0JFCisjZWxpZiBfX0JZVEVfT1JERVIgPT0gX19MSVRUTEVfRU5ESUFOCisjZGVmaW5lIEFGTVRfUzE2X05FIEFGTVRfUzE2X0xFCisjZWxzZQorI2Vycm9yICJjb3VsZCBub3QgZGV0ZXJtaW5lIGJ5dGUgb3JkZXIiCisjZW5kaWYKKyNlbmRpZgorCitzdHJ1Y3QgcGF0Y2hfaW5mbyB7CisgdW5zaWduZWQgc2hvcnQga2V5OworI2RlZmluZSBXQVZFX1BBVENIIF9QQVRDSEtFWSgweDA0KQorI2RlZmluZSBHVVNfUEFUQ0ggV0FWRV9QQVRDSAorI2RlZmluZSBXQVZFRlJPTlRfUEFUQ0ggX1BBVENIS0VZKDB4MDYpCisKKyBzaG9ydCBkZXZpY2Vfbm87Cisgc2hvcnQgaW5zdHJfbm87CisKKyB1bnNpZ25lZCBpbnQgbW9kZTsKKworI2RlZmluZSBXQVZFXzE2X0JJVFMgMHgwMSAgCisjZGVmaW5lIFdBVkVfVU5TSUdORUQgMHgwMiAgCisjZGVmaW5lIFdBVkVfTE9PUElORyAweDA0ICAKKyNkZWZpbmUgV0FWRV9CSURJUl9MT09QIDB4MDggIAorI2RlZmluZSBXQVZFX0xPT1BfQkFDSyAweDEwICAKKyNkZWZpbmUgV0FWRV9TVVNUQUlOX09OIDB4MjAgIAorI2RlZmluZSBXQVZFX0VOVkVMT1BFUyAweDQwICAKKyNkZWZpbmUgV0FWRV9GQVNUX1JFTEVBU0UgMHg4MCAgCisKKyNkZWZpbmUgV0FWRV9WSUJSQVRPIDB4MDAwMTAwMDAgIAorI2RlZmluZSBXQVZFX1RSRU1PTE8gMHgwMDAyMDAwMCAgCisjZGVmaW5lIFdBVkVfU0NBTEUgMHgwMDA0MDAwMCAgCisjZGVmaW5lIFdBVkVfRlJBQ1RJT05TIDB4MDAwODAwMDAgIAorCisjZGVmaW5lIFdBVkVfUk9NIDB4NDAwMDAwMDAgIAorI2RlZmluZSBXQVZFX01VTEFXIDB4MjAwMDAwMDAgIAorCisgaW50IGxlbjsKKyBpbnQgbG9vcF9zdGFydCwgbG9vcF9lbmQ7CisKKyB1bnNpZ25lZCBpbnQgYmFzZV9mcmVxOworIHVuc2lnbmVkIGludCBiYXNlX25vdGU7CisgdW5zaWduZWQgaW50IGhpZ2hfbm90ZTsKKyB1bnNpZ25lZCBpbnQgbG93X25vdGU7CisgaW50IHBhbm5pbmc7CisgaW50IGRldHVuaW5nOworCisgdW5zaWduZWQgY2hhciBlbnZfcmF0ZVsgNiBdOworIHVuc2lnbmVkIGNoYXIgZW52X29mZnNldFsgNiBdOworCisgdW5zaWduZWQgY2hhciB0cmVtb2xvX3N3ZWVwOworIHVuc2lnbmVkIGNoYXIgdHJlbW9sb19yYXRlOworIHVuc2lnbmVkIGNoYXIgdHJlbW9sb19kZXB0aDsKKworIHVuc2lnbmVkIGNoYXIgdmlicmF0b19zd2VlcDsKKyB1bnNpZ25lZCBjaGFyIHZpYnJhdG9fcmF0ZTsKKyB1bnNpZ25lZCBjaGFyIHZpYnJhdG9fZGVwdGg7CisKKyBpbnQgc2NhbGVfZnJlcXVlbmN5OworIHVuc2lnbmVkIGludCBzY2FsZV9mYWN0b3I7CisKKyBpbnQgdm9sdW1lOworIGludCBmcmFjdGlvbnM7CisgaW50IHJlc2VydmVkMTsKKyBpbnQgc3BhcmVbMl07CisgY2hhciBkYXRhWzFdOworIH07CisKK3N0cnVjdCBzeXNleF9pbmZvIHsKKyBzaG9ydCBrZXk7CisjZGVmaW5lIFNZU0VYX1BBVENIIF9QQVRDSEtFWSgweDA1KQorI2RlZmluZSBNQVVJX1BBVENIIF9QQVRDSEtFWSgweDA2KQorIHNob3J0IGRldmljZV9ubzsKKyBpbnQgbGVuOworIHVuc2lnbmVkIGNoYXIgZGF0YVsxXTsKKyB9OworCisjZGVmaW5lIFNFUV9OT1RFT0ZGIDAKKyNkZWZpbmUgU0VRX0ZNTk9URU9GRiBTRVFfTk9URU9GRiAgCisjZGVmaW5lIFNFUV9OT1RFT04gMQorI2RlZmluZSBTRVFfRk1OT1RFT04gU0VRX05PVEVPTgorI2RlZmluZSBTRVFfV0FJVCBUTVJfV0FJVF9BQlMKKyNkZWZpbmUgU0VRX1BHTUNIQU5HRSAzCisjZGVmaW5lIFNFUV9GTVBHTUNIQU5HRSBTRVFfUEdNQ0hBTkdFCisjZGVmaW5lIFNFUV9TWU5DVElNRVIgVE1SX1NUQVJUCisjZGVmaW5lIFNFUV9NSURJUFVUQyA1CisjZGVmaW5lIFNFUV9EUlVNT04gNiAgCisjZGVmaW5lIFNFUV9EUlVNT0ZGIDcgIAorI2RlZmluZSBTRVFfRUNITyBUTVJfRUNITyAgCisjZGVmaW5lIFNFUV9BRlRFUlRPVUNIIDkKKyNkZWZpbmUgU0VRX0NPTlRST0xMRVIgMTAKKworI2RlZmluZSBDVExfQkFOS19TRUxFQ1QgMHgwMAorI2RlZmluZSBDVExfTU9EV0hFRUwgMHgwMQorI2RlZmluZSBDVExfQlJFQVRIIDB4MDIKKworI2RlZmluZSBDVExfRk9PVCAweDA0CisjZGVmaW5lIENUTF9QT1JUQU1FTlRPX1RJTUUgMHgwNQorI2RlZmluZSBDVExfREFUQV9FTlRSWSAweDA2CisjZGVmaW5lIENUTF9NQUlOX1ZPTFVNRSAweDA3CisjZGVmaW5lIENUTF9CQUxBTkNFIDB4MDgKKworI2RlZmluZSBDVExfUEFOIDB4MGEKKyNkZWZpbmUgQ1RMX0VYUFJFU1NJT04gMHgwYgorCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0UxIDB4MTAKKyNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTIgMHgxMQorI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFMyAweDEyCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U0IDB4MTMKKworI2RlZmluZSBDVExfREFNUEVSX1BFREFMIDB4NDAKKyNkZWZpbmUgQ1RMX1NVU1RBSU4gMHg0MCAgCisjZGVmaW5lIENUTF9IT0xEIDB4NDAgIAorI2RlZmluZSBDVExfUE9SVEFNRU5UTyAweDQxCisjZGVmaW5lIENUTF9TT1NURU5VVE8gMHg0MgorI2RlZmluZSBDVExfU09GVF9QRURBTCAweDQzCisKKyNkZWZpbmUgQ1RMX0hPTEQyIDB4NDUKKworI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFNSAweDUwCisjZGVmaW5lIENUTF9HRU5FUkFMX1BVUlBPU0U2IDB4NTEKKyNkZWZpbmUgQ1RMX0dFTkVSQUxfUFVSUE9TRTcgMHg1MgorI2RlZmluZSBDVExfR0VORVJBTF9QVVJQT1NFOCAweDUzCisKKyNkZWZpbmUgQ1RMX0VYVF9FRkZfREVQVEggMHg1YgorI2RlZmluZSBDVExfVFJFTU9MT19ERVBUSCAweDVjCisjZGVmaW5lIENUTF9DSE9SVVNfREVQVEggMHg1ZAorI2RlZmluZSBDVExfREVUVU5FX0RFUFRIIDB4NWUKKyNkZWZpbmUgQ1RMX0NFTEVTVEVfREVQVEggMHg1ZSAgCisjZGVmaW5lIENUTF9QSEFTRVJfREVQVEggMHg1ZgorI2RlZmluZSBDVExfREFUQV9JTkNSRU1FTlQgMHg2MAorI2RlZmluZSBDVExfREFUQV9ERUNSRU1FTlQgMHg2MQorI2RlZmluZSBDVExfTk9OUkVHX1BBUk1fTlVNX0xTQiAweDYyCisjZGVmaW5lIENUTF9OT05SRUdfUEFSTV9OVU1fTVNCIDB4NjMKKyNkZWZpbmUgQ1RMX1JFR0lTVF9QQVJNX05VTV9MU0IgMHg2NAorI2RlZmluZSBDVExfUkVHSVNUX1BBUk1fTlVNX01TQiAweDY1CisKKyNkZWZpbmUgQ1RSTF9QSVRDSF9CRU5ERVIgMjU1CisjZGVmaW5lIENUUkxfUElUQ0hfQkVOREVSX1JBTkdFIDI1NAorI2RlZmluZSBDVFJMX0VYUFJFU1NJT04gMjUzICAKKyNkZWZpbmUgQ1RSTF9NQUlOX1ZPTFVNRSAyNTIgIAorI2RlZmluZSBTRVFfQkFMQU5DRSAxMQorI2RlZmluZSBTRVFfVk9MTU9ERSAxMgorCisjZGVmaW5lIFZPTF9NRVRIT0RfQURBR0lPIDEKKyNkZWZpbmUgVk9MX01FVEhPRF9MSU5FQVIgMgorCisjZGVmaW5lIFNFUV9GVUxMU0laRSAweGZkICAKKworI2RlZmluZSBTRVFfUFJJVkFURSAweGZlICAKKyNkZWZpbmUgU0VRX0VYVEVOREVEIDB4ZmYgIAorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgc2JpX2luc3RyX2RhdGFbMzJdOworCitzdHJ1Y3Qgc2JpX2luc3RydW1lbnQgeworIHVuc2lnbmVkIHNob3J0IGtleTsKKyNkZWZpbmUgRk1fUEFUQ0ggX1BBVENIS0VZKDB4MDEpCisjZGVmaW5lIE9QTDNfUEFUQ0ggX1BBVENIS0VZKDB4MDMpCisgc2hvcnQgZGV2aWNlOworIGludCBjaGFubmVsOworIHNiaV9pbnN0cl9kYXRhIG9wZXJhdG9yczsKKyB9OworCitzdHJ1Y3Qgc3ludGhfaW5mbyB7CisgY2hhciBuYW1lWzMwXTsKKyBpbnQgZGV2aWNlOworIGludCBzeW50aF90eXBlOworI2RlZmluZSBTWU5USF9UWVBFX0ZNIDAKKyNkZWZpbmUgU1lOVEhfVFlQRV9TQU1QTEUgMQorI2RlZmluZSBTWU5USF9UWVBFX01JREkgMiAgCisKKyBpbnQgc3ludGhfc3VidHlwZTsKKyNkZWZpbmUgRk1fVFlQRV9BRExJQiAweDAwCisjZGVmaW5lIEZNX1RZUEVfT1BMMyAweDAxCisjZGVmaW5lIE1JRElfVFlQRV9NUFU0MDEgMHg0MDEKKworI2RlZmluZSBTQU1QTEVfVFlQRV9CQVNJQyAweDEwCisjZGVmaW5lIFNBTVBMRV9UWVBFX0dVUyBTQU1QTEVfVFlQRV9CQVNJQworI2RlZmluZSBTQU1QTEVfVFlQRV9XQVZFRlJPTlQgMHgxMQorCisgaW50IHBlcmNfbW9kZTsKKyBpbnQgbnJfdm9pY2VzOworIGludCBucl9kcnVtczsKKyBpbnQgaW5zdHJfYmFua19zaXplOworIHVuc2lnbmVkIGludCBjYXBhYmlsaXRpZXM7CisjZGVmaW5lIFNZTlRIX0NBUF9QRVJDTU9ERSAweDAwMDAwMDAxICAKKyNkZWZpbmUgU1lOVEhfQ0FQX09QTDMgMHgwMDAwMDAwMiAgCisjZGVmaW5lIFNZTlRIX0NBUF9JTlBVVCAweDAwMDAwMDA0ICAKKyBpbnQgZHVtbWllc1sxOV07CisgfTsKKworc3RydWN0IHNvdW5kX3RpbWVyX2luZm8geworIGNoYXIgbmFtZVszMl07CisgaW50IGNhcHM7CisgfTsKKworI2RlZmluZSBNSURJX0NBUF9NUFU0MDEgMSAgCisKK3N0cnVjdCBtaWRpX2luZm8geworIGNoYXIgbmFtZVszMF07CisgaW50IGRldmljZTsKKyB1bnNpZ25lZCBpbnQgY2FwYWJpbGl0aWVzOworIGludCBkZXZfdHlwZTsKKyBpbnQgZHVtbWllc1sxOF07CisgfTsKKwordHlwZWRlZiBzdHJ1Y3QgeworIHVuc2lnbmVkIGNoYXIgY21kOworIGNoYXIgbnJfYXJncywgbnJfcmV0dXJuczsKKyB1bnNpZ25lZCBjaGFyIGRhdGFbMzBdOworIH0gbXB1X2NvbW1hbmRfcmVjOworCisjZGVmaW5lIFNORENUTF9NSURJX1BSRVRJTUUgX1NJT1dSKCdtJywgMCwgaW50KQorI2RlZmluZSBTTkRDVExfTUlESV9NUFVNT0RFIF9TSU9XUignbScsIDEsIGludCkKKyNkZWZpbmUgU05EQ1RMX01JRElfTVBVQ01EIF9TSU9XUignbScsIDIsIG1wdV9jb21tYW5kX3JlYykKKworI2RlZmluZSBTTkRDVExfRFNQX1JFU0VUIF9TSU8gKCdQJywgMCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TWU5DIF9TSU8gKCdQJywgMSkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TUEVFRCBfU0lPV1IoJ1AnLCAyLCBpbnQpCisjZGVmaW5lIFNORENUTF9EU1BfU1RFUkVPIF9TSU9XUignUCcsIDMsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRCTEtTSVpFIF9TSU9XUignUCcsIDQsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TQU1QTEVTSVpFIFNORENUTF9EU1BfU0VURk1UCisjZGVmaW5lIFNORENUTF9EU1BfQ0hBTk5FTFMgX1NJT1dSKCdQJywgNiwgaW50KQorI2RlZmluZSBTT1VORF9QQ01fV1JJVEVfQ0hBTk5FTFMgU05EQ1RMX0RTUF9DSEFOTkVMUworI2RlZmluZSBTT1VORF9QQ01fV1JJVEVfRklMVEVSIF9TSU9XUignUCcsIDcsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9QT1NUIF9TSU8gKCdQJywgOCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9TVUJESVZJREUgX1NJT1dSKCdQJywgOSwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX1NFVEZSQUdNRU5UIF9TSU9XUignUCcsMTAsIGludCkKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVEZNVFMgX1NJT1IgKCdQJywxMSwgaW50KSAgCisjZGVmaW5lIFNORENUTF9EU1BfU0VURk1UIF9TSU9XUignUCcsNSwgaW50KSAgCisjZGVmaW5lIEFGTVRfUVVFUlkgMHgwMDAwMDAwMCAgCisjZGVmaW5lIEFGTVRfTVVfTEFXIDB4MDAwMDAwMDEKKyNkZWZpbmUgQUZNVF9BX0xBVyAweDAwMDAwMDAyCisjZGVmaW5lIEFGTVRfSU1BX0FEUENNIDB4MDAwMDAwMDQKKyNkZWZpbmUgQUZNVF9VOCAweDAwMDAwMDA4CisjZGVmaW5lIEFGTVRfUzE2X0xFIDB4MDAwMDAwMTAgIAorI2RlZmluZSBBRk1UX1MxNl9CRSAweDAwMDAwMDIwICAKKyNkZWZpbmUgQUZNVF9TOCAweDAwMDAwMDQwCisjZGVmaW5lIEFGTVRfVTE2X0xFIDB4MDAwMDAwODAgIAorI2RlZmluZSBBRk1UX1UxNl9CRSAweDAwMDAwMTAwICAKKyNkZWZpbmUgQUZNVF9NUEVHIDB4MDAwMDAyMDAgIAorI2RlZmluZSBBRk1UX0FDMyAweDAwMDAwNDAwICAKKwordHlwZWRlZiBzdHJ1Y3QgYXVkaW9fYnVmX2luZm8geworIGludCBmcmFnbWVudHM7CisgaW50IGZyYWdzdG90YWw7CisgaW50IGZyYWdzaXplOworCisgaW50IGJ5dGVzOworCisgfSBhdWRpb19idWZfaW5mbzsKKworI2RlZmluZSBTTkRDVExfRFNQX0dFVE9TUEFDRSBfU0lPUiAoJ1AnLDEyLCBhdWRpb19idWZfaW5mbykKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRJU1BBQ0UgX1NJT1IgKCdQJywxMywgYXVkaW9fYnVmX2luZm8pCisjZGVmaW5lIFNORENUTF9EU1BfTk9OQkxPQ0sgX1NJTyAoJ1AnLDE0KQorI2RlZmluZSBTTkRDVExfRFNQX0dFVENBUFMgX1NJT1IgKCdQJywxNSwgaW50KQorI2RlZmluZSBEU1BfQ0FQX1JFVklTSU9OIDB4MDAwMDAwZmYgIAorI2RlZmluZSBEU1BfQ0FQX0RVUExFWCAweDAwMDAwMTAwICAKKyNkZWZpbmUgRFNQX0NBUF9SRUFMVElNRSAweDAwMDAwMjAwICAKKyNkZWZpbmUgRFNQX0NBUF9CQVRDSCAweDAwMDAwNDAwICAKKworI2RlZmluZSBEU1BfQ0FQX0NPUFJPQyAweDAwMDAwODAwICAKKworI2RlZmluZSBEU1BfQ0FQX1RSSUdHRVIgMHgwMDAwMTAwMCAgCisjZGVmaW5lIERTUF9DQVBfTU1BUCAweDAwMDAyMDAwICAKKyNkZWZpbmUgRFNQX0NBUF9NVUxUSSAweDAwMDA0MDAwICAKKyNkZWZpbmUgRFNQX0NBUF9CSU5EIDB4MDAwMDgwMDAgIAorCisjZGVmaW5lIFNORENUTF9EU1BfR0VUVFJJR0dFUiBfU0lPUiAoJ1AnLDE2LCBpbnQpCisjZGVmaW5lIFNORENUTF9EU1BfU0VUVFJJR0dFUiBfU0lPVyAoJ1AnLDE2LCBpbnQpCisjZGVmaW5lIFBDTV9FTkFCTEVfSU5QVVQgMHgwMDAwMDAwMQorI2RlZmluZSBQQ01fRU5BQkxFX09VVFBVVCAweDAwMDAwMDAyCisKK3R5cGVkZWYgc3RydWN0IGNvdW50X2luZm8geworIGludCBieXRlczsKKyBpbnQgYmxvY2tzOworIGludCBwdHI7CisgfSBjb3VudF9pbmZvOworCisjZGVmaW5lIFNORENUTF9EU1BfR0VUSVBUUiBfU0lPUiAoJ1AnLDE3LCBjb3VudF9pbmZvKQorI2RlZmluZSBTTkRDVExfRFNQX0dFVE9QVFIgX1NJT1IgKCdQJywxOCwgY291bnRfaW5mbykKKwordHlwZWRlZiBzdHJ1Y3QgYnVmZm1lbV9kZXNjIHsKKyB1bnNpZ25lZCAqYnVmZmVyOworIGludCBzaXplOworIH0gYnVmZm1lbV9kZXNjOworI2RlZmluZSBTTkRDVExfRFNQX01BUElOQlVGIF9TSU9SICgnUCcsIDE5LCBidWZmbWVtX2Rlc2MpCisjZGVmaW5lIFNORENUTF9EU1BfTUFQT1VUQlVGIF9TSU9SICgnUCcsIDIwLCBidWZmbWVtX2Rlc2MpCisjZGVmaW5lIFNORENUTF9EU1BfU0VUU1lOQ1JPIF9TSU8gKCdQJywgMjEpCisjZGVmaW5lIFNORENUTF9EU1BfU0VURFVQTEVYIF9TSU8gKCdQJywgMjIpCisjZGVmaW5lIFNORENUTF9EU1BfR0VUT0RFTEFZIF9TSU9SICgnUCcsIDIzLCBpbnQpCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRDSEFOTkVMTUFTSyBfU0lPV1IoJ1AnLCA2NCwgaW50KQorI2RlZmluZSBTTkRDVExfRFNQX0JJTkRfQ0hBTk5FTCBfU0lPV1IoJ1AnLCA2NSwgaW50KQorI2RlZmluZSBEU1BfQklORF9RVUVSWSAweDAwMDAwMDAwCisjZGVmaW5lIERTUF9CSU5EX0ZST05UIDB4MDAwMDAwMDEKKyNkZWZpbmUgRFNQX0JJTkRfU1VSUiAweDAwMDAwMDAyCisjZGVmaW5lIERTUF9CSU5EX0NFTlRFUl9MRkUgMHgwMDAwMDAwNAorI2RlZmluZSBEU1BfQklORF9IQU5EU0VUIDB4MDAwMDAwMDgKKyNkZWZpbmUgRFNQX0JJTkRfTUlDIDB4MDAwMDAwMTAKKyNkZWZpbmUgRFNQX0JJTkRfTU9ERU0xIDB4MDAwMDAwMjAKKyNkZWZpbmUgRFNQX0JJTkRfTU9ERU0yIDB4MDAwMDAwNDAKKyNkZWZpbmUgRFNQX0JJTkRfSTJTIDB4MDAwMDAwODAKKyNkZWZpbmUgRFNQX0JJTkRfU1BESUYgMHgwMDAwMDEwMAorCisjZGVmaW5lIFNORENUTF9EU1BfU0VUU1BESUYgX1NJT1cgKCdQJywgNjYsIGludCkKKyNkZWZpbmUgU05EQ1RMX0RTUF9HRVRTUERJRiBfU0lPUiAoJ1AnLCA2NywgaW50KQorI2RlZmluZSBTUERJRl9QUk8gMHgwMDAxCisjZGVmaW5lIFNQRElGX05fQVVEIDB4MDAwMgorI2RlZmluZSBTUERJRl9DT1BZIDB4MDAwNAorI2RlZmluZSBTUERJRl9QUkUgMHgwMDA4CisjZGVmaW5lIFNQRElGX0NDIDB4MDdmMAorI2RlZmluZSBTUERJRl9MIDB4MDgwMAorI2RlZmluZSBTUERJRl9EUlMgMHg0MDAwCisjZGVmaW5lIFNQRElGX1YgMHg4MDAwCisKKyNkZWZpbmUgU05EQ1RMX0RTUF9QUk9GSUxFIF9TSU9XICgnUCcsIDIzLCBpbnQpCisjZGVmaW5lIEFQRl9OT1JNQUwgMCAgCisjZGVmaW5lIEFQRl9ORVRXT1JLIDEgIAorI2RlZmluZSBBUEZfQ1BVSU5URU5TIDIgIAorCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX1JBVEUgX1NJT1IgKCdQJywgMiwgaW50KQorI2RlZmluZSBTT1VORF9QQ01fUkVBRF9DSEFOTkVMUyBfU0lPUiAoJ1AnLCA2LCBpbnQpCisjZGVmaW5lIFNPVU5EX1BDTV9SRUFEX0JJVFMgX1NJT1IgKCdQJywgNSwgaW50KQorI2RlZmluZSBTT1VORF9QQ01fUkVBRF9GSUxURVIgX1NJT1IgKCdQJywgNywgaW50KQorCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9CSVRTIFNORENUTF9EU1BfU0VURk1UCisjZGVmaW5lIFNPVU5EX1BDTV9XUklURV9SQVRFIFNORENUTF9EU1BfU1BFRUQKKyNkZWZpbmUgU09VTkRfUENNX1BPU1QgU05EQ1RMX0RTUF9QT1NUCisjZGVmaW5lIFNPVU5EX1BDTV9SRVNFVCBTTkRDVExfRFNQX1JFU0VUCisjZGVmaW5lIFNPVU5EX1BDTV9TWU5DIFNORENUTF9EU1BfU1lOQworI2RlZmluZSBTT1VORF9QQ01fU1VCRElWSURFIFNORENUTF9EU1BfU1VCRElWSURFCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRGUkFHTUVOVCBTTkRDVExfRFNQX1NFVEZSQUdNRU5UCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRGTVRTIFNORENUTF9EU1BfR0VURk1UUworI2RlZmluZSBTT1VORF9QQ01fU0VURk1UIFNORENUTF9EU1BfU0VURk1UCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRPU1BBQ0UgU05EQ1RMX0RTUF9HRVRPU1BBQ0UKKyNkZWZpbmUgU09VTkRfUENNX0dFVElTUEFDRSBTTkRDVExfRFNQX0dFVElTUEFDRQorI2RlZmluZSBTT1VORF9QQ01fTk9OQkxPQ0sgU05EQ1RMX0RTUF9OT05CTE9DSworI2RlZmluZSBTT1VORF9QQ01fR0VUQ0FQUyBTTkRDVExfRFNQX0dFVENBUFMKKyNkZWZpbmUgU09VTkRfUENNX0dFVFRSSUdHRVIgU05EQ1RMX0RTUF9HRVRUUklHR0VSCisjZGVmaW5lIFNPVU5EX1BDTV9TRVRUUklHR0VSIFNORENUTF9EU1BfU0VUVFJJR0dFUgorI2RlZmluZSBTT1VORF9QQ01fU0VUU1lOQ1JPIFNORENUTF9EU1BfU0VUU1lOQ1JPCisjZGVmaW5lIFNPVU5EX1BDTV9HRVRJUFRSIFNORENUTF9EU1BfR0VUSVBUUgorI2RlZmluZSBTT1VORF9QQ01fR0VUT1BUUiBTTkRDVExfRFNQX0dFVE9QVFIKKyNkZWZpbmUgU09VTkRfUENNX01BUElOQlVGIFNORENUTF9EU1BfTUFQSU5CVUYKKyNkZWZpbmUgU09VTkRfUENNX01BUE9VVEJVRiBTTkRDVExfRFNQX01BUE9VVEJVRgorCit0eXBlZGVmIHN0cnVjdCBjb3ByX2J1ZmZlciB7CisgaW50IGNvbW1hbmQ7CisgaW50IGZsYWdzOworI2RlZmluZSBDUEZfTk9ORSAweDAwMDAKKyNkZWZpbmUgQ1BGX0ZJUlNUIDB4MDAwMSAgCisjZGVmaW5lIENQRl9MQVNUIDB4MDAwMiAgCisgaW50IGxlbjsKKyBpbnQgb2ZmczsKKworIHVuc2lnbmVkIGNoYXIgZGF0YVs0MDAwXTsKKyB9IGNvcHJfYnVmZmVyOworCit0eXBlZGVmIHN0cnVjdCBjb3ByX2RlYnVnX2J1ZiB7CisgaW50IGNvbW1hbmQ7CisgaW50IHBhcm0xOworIGludCBwYXJtMjsKKyBpbnQgZmxhZ3M7CisgaW50IGxlbjsKKyB9IGNvcHJfZGVidWdfYnVmOworCit0eXBlZGVmIHN0cnVjdCBjb3ByX21zZyB7CisgaW50IGxlbjsKKyB1bnNpZ25lZCBjaGFyIGRhdGFbNDAwMF07CisgfSBjb3ByX21zZzsKKworI2RlZmluZSBTTkRDVExfQ09QUl9SRVNFVCBfU0lPICgnQycsIDApCisjZGVmaW5lIFNORENUTF9DT1BSX0xPQUQgX1NJT1dSKCdDJywgMSwgY29wcl9idWZmZXIpCisjZGVmaW5lIFNORENUTF9DT1BSX1JEQVRBIF9TSU9XUignQycsIDIsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9SQ09ERSBfU0lPV1IoJ0MnLCAzLCBjb3ByX2RlYnVnX2J1ZikKKyNkZWZpbmUgU05EQ1RMX0NPUFJfV0RBVEEgX1NJT1cgKCdDJywgNCwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1dDT0RFIF9TSU9XICgnQycsIDUsIGNvcHJfZGVidWdfYnVmKQorI2RlZmluZSBTTkRDVExfQ09QUl9SVU4gX1NJT1dSKCdDJywgNiwgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX0hBTFQgX1NJT1dSKCdDJywgNywgY29wcl9kZWJ1Z19idWYpCisjZGVmaW5lIFNORENUTF9DT1BSX1NFTkRNU0cgX1NJT1dSKCdDJywgOCwgY29wcl9tc2cpCisjZGVmaW5lIFNORENUTF9DT1BSX1JDVk1TRyBfU0lPUiAoJ0MnLCA5LCBjb3ByX21zZykKKworI2RlZmluZSBTT1VORF9NSVhFUl9OUkRFVklDRVMgMjUKKyNkZWZpbmUgU09VTkRfTUlYRVJfVk9MVU1FIDAKKyNkZWZpbmUgU09VTkRfTUlYRVJfQkFTUyAxCisjZGVmaW5lIFNPVU5EX01JWEVSX1RSRUJMRSAyCisjZGVmaW5lIFNPVU5EX01JWEVSX1NZTlRIIDMKKyNkZWZpbmUgU09VTkRfTUlYRVJfUENNIDQKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1BFQUtFUiA1CisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUgNgorI2RlZmluZSBTT1VORF9NSVhFUl9NSUMgNworI2RlZmluZSBTT1VORF9NSVhFUl9DRCA4CisjZGVmaW5lIFNPVU5EX01JWEVSX0lNSVggOSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0FMVFBDTSAxMAorI2RlZmluZSBTT1VORF9NSVhFUl9SRUNMRVYgMTEgIAorI2RlZmluZSBTT1VORF9NSVhFUl9JR0FJTiAxMiAgCisjZGVmaW5lIFNPVU5EX01JWEVSX09HQUlOIDEzICAKKworI2RlZmluZSBTT1VORF9NSVhFUl9MSU5FMSAxNCAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0xJTkUyIDE1ICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfTElORTMgMTYgIAorI2RlZmluZSBTT1VORF9NSVhFUl9ESUdJVEFMMSAxNyAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0RJR0lUQUwyIDE4ICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfRElHSVRBTDMgMTkgIAorI2RlZmluZSBTT1VORF9NSVhFUl9QSE9ORUlOIDIwICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfUEhPTkVPVVQgMjEgIAorI2RlZmluZSBTT1VORF9NSVhFUl9WSURFTyAyMiAgCisjZGVmaW5lIFNPVU5EX01JWEVSX1JBRElPIDIzICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfTU9OSVRPUiAyNCAgCisKKyNkZWZpbmUgU09VTkRfT05PRkZfTUlOIDI4CisjZGVmaW5lIFNPVU5EX09OT0ZGX01BWCAzMAorCisjZGVmaW5lIFNPVU5EX01JWEVSX05PTkUgMzEKKworI2RlZmluZSBTT1VORF9NSVhFUl9FTkhBTkNFIFNPVU5EX01JWEVSX05PTkUKKyNkZWZpbmUgU09VTkRfTUlYRVJfTVVURSBTT1VORF9NSVhFUl9OT05FCisjZGVmaW5lIFNPVU5EX01JWEVSX0xPVUQgU09VTkRfTUlYRVJfTk9ORQorCisjZGVmaW5lIFNPVU5EX0RFVklDRV9MQUJFTFMgeyJWb2wgICIsICJCYXNzICIsICJUcmVibCIsICJTeW50aCIsICJQY20gICIsICJTcGtyICIsICJMaW5lICIsICAgIk1pYyAgIiwgIkNEICAgIiwgIk1peCAgIiwgIlBjbTIgIiwgIlJlYyAgIiwgIklHYWluIiwgIk9HYWluIiwgICAiTGluZTEiLCAiTGluZTIiLCAiTGluZTMiLCAiRGlnaXRhbDEiLCAiRGlnaXRhbDIiLCAiRGlnaXRhbDMiLCAgICJQaG9uZUluIiwgIlBob25lT3V0IiwgIlZpZGVvIiwgIlJhZGlvIiwgIk1vbml0b3IifQorCisjZGVmaW5lIFNPVU5EX0RFVklDRV9OQU1FUyB7InZvbCIsICJiYXNzIiwgInRyZWJsZSIsICJzeW50aCIsICJwY20iLCAic3BlYWtlciIsICJsaW5lIiwgICAibWljIiwgImNkIiwgIm1peCIsICJwY20yIiwgInJlYyIsICJpZ2FpbiIsICJvZ2FpbiIsICAgImxpbmUxIiwgImxpbmUyIiwgImxpbmUzIiwgImRpZzEiLCAiZGlnMiIsICJkaWczIiwgICAicGhpbiIsICJwaG91dCIsICJ2aWRlbyIsICJyYWRpbyIsICJtb25pdG9yIn0KKworI2RlZmluZSBTT1VORF9NSVhFUl9SRUNTUkMgMHhmZiAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0RFVk1BU0sgMHhmZSAgCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQ01BU0sgMHhmZCAgCisjZGVmaW5lIFNPVU5EX01JWEVSX0NBUFMgMHhmYworI2RlZmluZSBTT1VORF9DQVBfRVhDTF9JTlBVVCAweDAwMDAwMDAxICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfU1RFUkVPREVWUyAweGZiICAKKyNkZWZpbmUgU09VTkRfTUlYRVJfT1VUU1JDIDB4ZmEgIAorI2RlZmluZSBTT1VORF9NSVhFUl9PVVRNQVNLIDB4ZjkgIAorCisjZGVmaW5lIFNPVU5EX01BU0tfVk9MVU1FICgxIDw8IFNPVU5EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgU09VTkRfTUFTS19CQVNTICgxIDw8IFNPVU5EX01JWEVSX0JBU1MpCisjZGVmaW5lIFNPVU5EX01BU0tfVFJFQkxFICgxIDw8IFNPVU5EX01JWEVSX1RSRUJMRSkKKyNkZWZpbmUgU09VTkRfTUFTS19TWU5USCAoMSA8PCBTT1VORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgU09VTkRfTUFTS19QQ00gKDEgPDwgU09VTkRfTUlYRVJfUENNKQorI2RlZmluZSBTT1VORF9NQVNLX1NQRUFLRVIgKDEgPDwgU09VTkRfTUlYRVJfU1BFQUtFUikKKyNkZWZpbmUgU09VTkRfTUFTS19MSU5FICgxIDw8IFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01BU0tfTUlDICgxIDw8IFNPVU5EX01JWEVSX01JQykKKyNkZWZpbmUgU09VTkRfTUFTS19DRCAoMSA8PCBTT1VORF9NSVhFUl9DRCkKKyNkZWZpbmUgU09VTkRfTUFTS19JTUlYICgxIDw8IFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01BU0tfQUxUUENNICgxIDw8IFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUFTS19SRUNMRVYgKDEgPDwgU09VTkRfTUlYRVJfUkVDTEVWKQorI2RlZmluZSBTT1VORF9NQVNLX0lHQUlOICgxIDw8IFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX09HQUlOICgxIDw8IFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUxICgxIDw8IFNPVU5EX01JWEVSX0xJTkUxKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUyICgxIDw8IFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NQVNLX0xJTkUzICgxIDw8IFNPVU5EX01JWEVSX0xJTkUzKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwxICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwxKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwyICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwyKQorI2RlZmluZSBTT1VORF9NQVNLX0RJR0lUQUwzICgxIDw8IFNPVU5EX01JWEVSX0RJR0lUQUwzKQorI2RlZmluZSBTT1VORF9NQVNLX1BIT05FSU4gKDEgPDwgU09VTkRfTUlYRVJfUEhPTkVJTikKKyNkZWZpbmUgU09VTkRfTUFTS19QSE9ORU9VVCAoMSA8PCBTT1VORF9NSVhFUl9QSE9ORU9VVCkKKyNkZWZpbmUgU09VTkRfTUFTS19SQURJTyAoMSA8PCBTT1VORF9NSVhFUl9SQURJTykKKyNkZWZpbmUgU09VTkRfTUFTS19WSURFTyAoMSA8PCBTT1VORF9NSVhFUl9WSURFTykKKyNkZWZpbmUgU09VTkRfTUFTS19NT05JVE9SICgxIDw8IFNPVU5EX01JWEVSX01PTklUT1IpCisKKyNkZWZpbmUgU09VTkRfTUFTS19NVVRFICgxIDw8IFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01BU0tfRU5IQU5DRSAoMSA8PCBTT1VORF9NSVhFUl9FTkhBTkNFKQorI2RlZmluZSBTT1VORF9NQVNLX0xPVUQgKDEgPDwgU09VTkRfTUlYRVJfTE9VRCkKKworI2RlZmluZSBNSVhFUl9SRUFEKGRldikgX1NJT1IoJ00nLCBkZXYsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9WT0xVTUUgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9WT0xVTUUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQkFTUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0JBU1MpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfVFJFQkxFIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfVFJFQkxFKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1NZTlRIIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfU1lOVEgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUENNIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfUENNKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX1NQRUFLRVIgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX01JQyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01JQykKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9DRCBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NEKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0lNSVggTUlYRVJfUkVBRChTT1VORF9NSVhFUl9JTUlYKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0FMVFBDTSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0FMVFBDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNMRVYgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SRUNMRVYpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfSUdBSU4gTUlYRVJfUkVBRChTT1VORF9NSVhFUl9JR0FJTikKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9PR0FJTiBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX09HQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9SRUFEX0xJTkUxIE1JWEVSX1JFQUQoU09VTkRfTUlYRVJfTElORTEpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTElORTIgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9MSU5FMikKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9MSU5FMyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xJTkUzKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTVVURSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfRU5IQU5DRSBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0VOSEFOQ0UpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfTE9VRCBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0xPVUQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfUkVBRF9SRUNTUkMgTUlYRVJfUkVBRChTT1VORF9NSVhFUl9SRUNTUkMpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfREVWTUFTSyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0RFVk1BU0spCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfUkVDTUFTSyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1JFQ01BU0spCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfU1RFUkVPREVWUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX1NURVJFT0RFVlMpCisjZGVmaW5lIFNPVU5EX01JWEVSX1JFQURfQ0FQUyBNSVhFUl9SRUFEKFNPVU5EX01JWEVSX0NBUFMpCisKKyNkZWZpbmUgTUlYRVJfV1JJVEUoZGV2KSBfU0lPV1IoJ00nLCBkZXYsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfVk9MVU1FIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1ZPTFVNRSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfQkFTUyBNSVhFUl9XUklURShTT1VORF9NSVhFUl9CQVNTKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9UUkVCTEUgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfVFJFQkxFKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9TWU5USCBNSVhFUl9XUklURShTT1VORF9NSVhFUl9TWU5USCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfUENNIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX1BDTSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfU1BFQUtFUiBNSVhFUl9XUklURShTT1VORF9NSVhFUl9TUEVBS0VSKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX01JQyBNSVhFUl9XUklURShTT1VORF9NSVhFUl9NSUMpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0NEIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0NEKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9JTUlYIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lNSVgpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0FMVFBDTSBNSVhFUl9XUklURShTT1VORF9NSVhFUl9BTFRQQ00pCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1JFQ0xFViBNSVhFUl9XUklURShTT1VORF9NSVhFUl9SRUNMRVYpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0lHQUlOIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0lHQUlOKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9PR0FJTiBNSVhFUl9XUklURShTT1VORF9NSVhFUl9PR0FJTikKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTElORTEgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfTElORTEpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0xJTkUyIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX0xJTkUyKQorI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9MSU5FMyBNSVhFUl9XUklURShTT1VORF9NSVhFUl9MSU5FMykKKworI2RlZmluZSBTT1VORF9NSVhFUl9XUklURV9NVVRFIE1JWEVSX1dSSVRFKFNPVU5EX01JWEVSX01VVEUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX0VOSEFOQ0UgTUlYRVJfV1JJVEUoU09VTkRfTUlYRVJfRU5IQU5DRSkKKyNkZWZpbmUgU09VTkRfTUlYRVJfV1JJVEVfTE9VRCBNSVhFUl9XUklURShTT1VORF9NSVhFUl9MT1VEKQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1dSSVRFX1JFQ1NSQyBNSVhFUl9XUklURShTT1VORF9NSVhFUl9SRUNTUkMpCisKK3R5cGVkZWYgc3RydWN0IG1peGVyX2luZm8KK3sKKyBjaGFyIGlkWzE2XTsKKyBjaGFyIG5hbWVbMzJdOworIGludCBtb2RpZnlfY291bnRlcjsKKyBpbnQgZmlsbGVyc1sxMF07Cit9IG1peGVyX2luZm87CisKK3R5cGVkZWYgc3RydWN0IF9vbGRfbWl4ZXJfaW5mbworeworIGNoYXIgaWRbMTZdOworIGNoYXIgbmFtZVszMl07Cit9IF9vbGRfbWl4ZXJfaW5mbzsKKworI2RlZmluZSBTT1VORF9NSVhFUl9JTkZPIF9TSU9SICgnTScsIDEwMSwgbWl4ZXJfaW5mbykKKyNkZWZpbmUgU09VTkRfT0xEX01JWEVSX0lORk8gX1NJT1IgKCdNJywgMTAxLCBfb2xkX21peGVyX2luZm8pCisKK3R5cGVkZWYgdW5zaWduZWQgY2hhciBtaXhlcl9yZWNvcmRbMTI4XTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9BQ0NFU1MgX1NJT1dSKCdNJywgMTAyLCBtaXhlcl9yZWNvcmQpCisKKyNkZWZpbmUgU09VTkRfTUlYRVJfQUdDIF9TSU9XUignTScsIDEwMywgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl8zRFNFIF9TSU9XUignTScsIDEwNCwgaW50KQorCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEUxIF9TSU9XUignTScsIDExMSwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFMiBfU0lPV1IoJ00nLCAxMTIsIGludCkKKyNkZWZpbmUgU09VTkRfTUlYRVJfUFJJVkFURTMgX1NJT1dSKCdNJywgMTEzLCBpbnQpCisjZGVmaW5lIFNPVU5EX01JWEVSX1BSSVZBVEU0IF9TSU9XUignTScsIDExNCwgaW50KQorI2RlZmluZSBTT1VORF9NSVhFUl9QUklWQVRFNSBfU0lPV1IoJ00nLCAxMTUsIGludCkKKwordHlwZWRlZiBzdHJ1Y3QgbWl4ZXJfdm9sX3RhYmxlIHsKKyBpbnQgbnVtOworIGNoYXIgbmFtZVszMl07CisgaW50IGxldmVsc1szMl07Cit9IG1peGVyX3ZvbF90YWJsZTsKKworI2RlZmluZSBTT1VORF9NSVhFUl9HRVRMRVZFTFMgX1NJT1dSKCdNJywgMTE2LCBtaXhlcl92b2xfdGFibGUpCisjZGVmaW5lIFNPVU5EX01JWEVSX1NFVExFVkVMUyBfU0lPV1IoJ00nLCAxMTcsIG1peGVyX3ZvbF90YWJsZSkKKworI2RlZmluZSBPU1NfR0VUVkVSU0lPTiBfU0lPUiAoJ00nLCAxMTgsIGludCkKKworI2RlZmluZSBFVl9TRVFfTE9DQUwgMHg4MAorI2RlZmluZSBFVl9USU1JTkcgMHg4MQorI2RlZmluZSBFVl9DSE5fQ09NTU9OIDB4OTIKKyNkZWZpbmUgRVZfQ0hOX1ZPSUNFIDB4OTMKKyNkZWZpbmUgRVZfU1lTRVggMHg5NAorCisjZGVmaW5lIE1JRElfTk9URU9GRiAweDgwCisjZGVmaW5lIE1JRElfTk9URU9OIDB4OTAKKyNkZWZpbmUgTUlESV9LRVlfUFJFU1NVUkUgMHhBMAorCisjZGVmaW5lIE1JRElfQ1RMX0NIQU5HRSAweEIwCisjZGVmaW5lIE1JRElfUEdNX0NIQU5HRSAweEMwCisjZGVmaW5lIE1JRElfQ0hOX1BSRVNTVVJFIDB4RDAKKyNkZWZpbmUgTUlESV9QSVRDSF9CRU5EIDB4RTAKKworI2RlZmluZSBNSURJX1NZU1RFTV9QUkVGSVggMHhGMAorCisjZGVmaW5lIFRNUl9XQUlUX1JFTCAxICAKKyNkZWZpbmUgVE1SX1dBSVRfQUJTIDIgIAorI2RlZmluZSBUTVJfU1RPUCAzCisjZGVmaW5lIFRNUl9TVEFSVCA0CisjZGVmaW5lIFRNUl9DT05USU5VRSA1CisjZGVmaW5lIFRNUl9URU1QTyA2CisjZGVmaW5lIFRNUl9FQ0hPIDgKKyNkZWZpbmUgVE1SX0NMT0NLIDkgIAorI2RlZmluZSBUTVJfU1BQIDEwICAKKyNkZWZpbmUgVE1SX1RJTUVTSUcgMTEgIAorCisjZGVmaW5lIExPQ0xfU1RBUlRBVURJTyAxCisKKyNpZiAhZGVmaW5lZChfX0tFUk5FTF9fKSAmJiAhZGVmaW5lZChLRVJORUwpICYmICFkZWZpbmVkKElOS0VSTkVMKSAmJiAhZGVmaW5lZChfS0VSTkVMKSB8fCBkZWZpbmVkKFVTRV9TRVFfTUFDUk9TKQorCisjZGVmaW5lIFNFUV9ERUNMQVJFQlVGKCkgU0VRX1VTRV9FWFRCVUYoKQorCisjZGVmaW5lIFNFUV9QTV9ERUZJTkVTIGludCBfX2Zvb19iYXJfX18KKyNpZmRlZiBPU1NMSUIKKyNkZWZpbmUgU0VRX1VTRV9FWFRCVUYoKSAgIGV4dGVybiB1bnNpZ25lZCBjaGFyICpfc2VxYnVmOyAgIGV4dGVybiBpbnQgX3NlcWJ1ZmxlbjtleHRlcm4gaW50IF9zZXFidWZwdHIKKyNkZWZpbmUgU0VRX0RFRklORUJVRihsZW4pIFNFUV9VU0VfRVhUQlVGKCk7c3RhdGljIGludCBfcmVxdWVzdGVkX3NlcWJ1Zmxlbj1sZW4KKyNkZWZpbmUgX1NFUV9BRFZCVUYobGVuKSBPU1Nfc2VxX2FkdmJ1ZihsZW4sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQorI2RlZmluZSBfU0VRX05FRURCVUYobGVuKSBPU1Nfc2VxX25lZWRidWYobGVuLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKKyNkZWZpbmUgU0VRX0RVTVBCVUYoKSBPU1Nfc2VxYnVmX2R1bXAoc2VxZmQsIF9zZXFidWYsIF9zZXFidWZsZW4pCisKKyNkZWZpbmUgU0VRX0xPQURfR01JTlNUUihkZXYsIGluc3RyKSAgIE9TU19wYXRjaF9jYWNoaW5nKGRldiwgLTEsIGluc3RyLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1ZmxlbikKKyNkZWZpbmUgU0VRX0xPQURfR01EUlVNKGRldiwgZHJ1bSkgICBPU1NfZHJ1bV9jYWNoaW5nKGRldiwgLTEsIGRydW0sIHNlcWZkLCBfc2VxYnVmLCBfc2VxYnVmbGVuKQorI2Vsc2UKKworI2RlZmluZSBTRVFfTE9BRF9HTUlOU1RSKGRldiwgaW5zdHIpCisjZGVmaW5lIFNFUV9MT0FEX0dNRFJVTShkZXYsIGRydW0pCisKKyNkZWZpbmUgU0VRX1VTRV9FWFRCVUYoKSAgIGV4dGVybiB1bnNpZ25lZCBjaGFyIF9zZXFidWZbXTsgICBleHRlcm4gaW50IF9zZXFidWZsZW47ZXh0ZXJuIGludCBfc2VxYnVmcHRyCisKKyNpZm5kZWYgVVNFX1NJTVBMRV9NQUNST1MKKworI2RlZmluZSBTRVFfREVGSU5FQlVGKGxlbikgdW5zaWduZWQgY2hhciBfc2VxYnVmW2xlbl07IGludCBfc2VxYnVmbGVuID0gbGVuO2ludCBfc2VxYnVmcHRyID0gMAorI2RlZmluZSBfU0VRX05FRURCVUYobGVuKSBpZiAoKF9zZXFidWZwdHIrKGxlbikpID4gX3NlcWJ1Zmxlbikgc2VxYnVmX2R1bXAoKQorI2RlZmluZSBfU0VRX0FEVkJVRihsZW4pIF9zZXFidWZwdHIgKz0gbGVuCisjZGVmaW5lIFNFUV9EVU1QQlVGIHNlcWJ1Zl9kdW1wCisjZWxzZQorCisjZGVmaW5lIF9TRVFfTkVFREJVRihsZW4pICAKKyNlbmRpZgorI2VuZGlmCisKKyNkZWZpbmUgU0VRX1ZPTFVNRV9NT0RFKGRldiwgbW9kZSkge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBTRVFfRVhURU5ERUQ7ICBfc2VxYnVmW19zZXFidWZwdHIrMV0gPSBTRVFfVk9MTU9ERTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gKG1vZGUpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IDA7ICBfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAwOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDsgIF9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBfQ0hOX1ZPSUNFKGRldiwgZXZlbnQsIGNobiwgbm90ZSwgcGFybSkgICB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IEVWX0NITl9WT0lDRTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChkZXYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGV2ZW50KTsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IChjaG4pOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKG5vdGUpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKHBhcm0pOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzZdID0gKDApOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzddID0gMDsgIF9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfU1RBUlRfTk9URShkZXYsIGNobiwgbm90ZSwgdm9sKSAgIF9DSE5fVk9JQ0UoZGV2LCBNSURJX05PVEVPTiwgY2huLCBub3RlLCB2b2wpCisKKyNkZWZpbmUgU0VRX1NUT1BfTk9URShkZXYsIGNobiwgbm90ZSwgdm9sKSAgIF9DSE5fVk9JQ0UoZGV2LCBNSURJX05PVEVPRkYsIGNobiwgbm90ZSwgdm9sKQorCisjZGVmaW5lIFNFUV9LRVlfUFJFU1NVUkUoZGV2LCBjaG4sIG5vdGUsIHByZXNzdXJlKSAgIF9DSE5fVk9JQ0UoZGV2LCBNSURJX0tFWV9QUkVTU1VSRSwgY2huLCBub3RlLCBwcmVzc3VyZSkKKworI2RlZmluZSBfQ0hOX0NPTU1PTihkZXYsIGV2ZW50LCBjaG4sIHAxLCBwMiwgdzE0KSAgIHtfU0VRX05FRURCVUYoOCk7ICBfc2VxYnVmW19zZXFidWZwdHJdID0gRVZfQ0hOX0NPTU1PTjsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChkZXYpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGV2ZW50KTsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IChjaG4pOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKHAxKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis1XSA9IChwMik7ICAqKHNob3J0ICopJl9zZXFidWZbX3NlcWJ1ZnB0cis2XSA9ICh3MTQpOyAgX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9TWVNFWChkZXYsIGJ1ZiwgbGVuKSAgIHtpbnQgaWksIGxsPShsZW4pOyAgIHVuc2lnbmVkIGNoYXIgKmJ1ZnA9YnVmOyAgaWYgKGxsPjYpbGw9NjsgIF9TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0cl0gPSBFVl9TWVNFWDsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChkZXYpOyAgZm9yKGlpPTA7aWk8bGw7aWkrKykgIF9zZXFidWZbX3NlcWJ1ZnB0citpaSsyXSA9IGJ1ZnBbaWldOyAgZm9yKGlpPWxsO2lpPDY7aWkrKykgIF9zZXFidWZbX3NlcWJ1ZnB0citpaSsyXSA9IDB4ZmY7ICBfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX0NITl9QUkVTU1VSRShkZXYsIGNobiwgcHJlc3N1cmUpICAgX0NITl9DT01NT04oZGV2LCBNSURJX0NITl9QUkVTU1VSRSwgY2huLCBwcmVzc3VyZSwgMCwgMCkKKworI2RlZmluZSBTRVFfU0VUX1BBVENIIFNFUV9QR01fQ0hBTkdFCisjaWZkZWYgT1NTTElCCisjZGVmaW5lIFNFUV9QR01fQ0hBTkdFKGRldiwgY2huLCBwYXRjaCkgICB7T1NTX3BhdGNoX2NhY2hpbmcoZGV2LCBjaG4sIHBhdGNoLCBzZXFmZCwgX3NlcWJ1ZiwgX3NlcWJ1Zmxlbik7ICAgX0NITl9DT01NT04oZGV2LCBNSURJX1BHTV9DSEFOR0UsIGNobiwgcGF0Y2gsIDAsIDApO30KKyNlbHNlCisjZGVmaW5lIFNFUV9QR01fQ0hBTkdFKGRldiwgY2huLCBwYXRjaCkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUEdNX0NIQU5HRSwgY2huLCBwYXRjaCwgMCwgMCkKKyNlbmRpZgorCisjZGVmaW5lIFNFUV9DT05UUk9MKGRldiwgY2huLCBjb250cm9sbGVyLCB2YWx1ZSkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfQ1RMX0NIQU5HRSwgY2huLCBjb250cm9sbGVyLCAwLCB2YWx1ZSkKKworI2RlZmluZSBTRVFfQkVOREVSKGRldiwgY2huLCB2YWx1ZSkgICBfQ0hOX0NPTU1PTihkZXYsIE1JRElfUElUQ0hfQkVORCwgY2huLCAwLCAwLCB2YWx1ZSkKKworI2RlZmluZSBTRVFfVjJfWF9DT05UUk9MKGRldiwgdm9pY2UsIGNvbnRyb2xsZXIsIHZhbHVlKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9FWFRFTkRFRDsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IFNFUV9DT05UUk9MTEVSOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gKGRldik7ICBfc2VxYnVmW19zZXFidWZwdHIrM10gPSAodm9pY2UpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKGNvbnRyb2xsZXIpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzVdID0gKCh2YWx1ZSkmMHhmZik7ICBfc2VxYnVmW19zZXFidWZwdHIrNl0gPSAoKHZhbHVlPj44KSYweGZmKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cis3XSA9IDA7ICBfU0VRX0FEVkJVRig4KTt9CisKKyNkZWZpbmUgU0VRX1BJVENIQkVORChkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX1YyX1hfQ09OVFJPTChkZXYsIHZvaWNlLCBDVFJMX1BJVENIX0JFTkRFUiwgdmFsdWUpCisjZGVmaW5lIFNFUV9CRU5ERVJfUkFOR0UoZGV2LCB2b2ljZSwgdmFsdWUpIFNFUV9WMl9YX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RSTF9QSVRDSF9CRU5ERVJfUkFOR0UsIHZhbHVlKQorI2RlZmluZSBTRVFfRVhQUkVTU0lPTihkZXYsIHZvaWNlLCB2YWx1ZSkgU0VRX0NPTlRST0woZGV2LCB2b2ljZSwgQ1RMX0VYUFJFU1NJT04sIHZhbHVlKjEyOCkKKyNkZWZpbmUgU0VRX01BSU5fVk9MVU1FKGRldiwgdm9pY2UsIHZhbHVlKSBTRVFfQ09OVFJPTChkZXYsIHZvaWNlLCBDVExfTUFJTl9WT0xVTUUsICh2YWx1ZSoxNjM4MykvMTAwKQorI2RlZmluZSBTRVFfUEFOTklORyhkZXYsIHZvaWNlLCBwb3MpIFNFUV9DT05UUk9MKGRldiwgdm9pY2UsIENUTF9QQU4sIChwb3MrMTI4KSAvIDIpCisKKyNkZWZpbmUgX1RJTUVSX0VWRU5UKGV2LCBwYXJtKSB7X1NFUV9ORUVEQlVGKDgpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzBdID0gRVZfVElNSU5HOyAgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChldik7ICAgX3NlcWJ1Zltfc2VxYnVmcHRyKzJdID0gMDsgIF9zZXFidWZbX3NlcWJ1ZnB0ciszXSA9IDA7ICAqKHVuc2lnbmVkIGludCAqKSZfc2VxYnVmW19zZXFidWZwdHIrNF0gPSAocGFybSk7ICAgX1NFUV9BRFZCVUYoOCk7fQorCisjZGVmaW5lIFNFUV9TVEFSVF9USU1FUigpIF9USU1FUl9FVkVOVChUTVJfU1RBUlQsIDApCisjZGVmaW5lIFNFUV9TVE9QX1RJTUVSKCkgX1RJTUVSX0VWRU5UKFRNUl9TVE9QLCAwKQorI2RlZmluZSBTRVFfQ09OVElOVUVfVElNRVIoKSBfVElNRVJfRVZFTlQoVE1SX0NPTlRJTlVFLCAwKQorI2RlZmluZSBTRVFfV0FJVF9USU1FKHRpY2tzKSBfVElNRVJfRVZFTlQoVE1SX1dBSVRfQUJTLCB0aWNrcykKKyNkZWZpbmUgU0VRX0RFTFRBX1RJTUUodGlja3MpIF9USU1FUl9FVkVOVChUTVJfV0FJVF9SRUwsIHRpY2tzKQorI2RlZmluZSBTRVFfRUNIT19CQUNLKGtleSkgX1RJTUVSX0VWRU5UKFRNUl9FQ0hPLCBrZXkpCisjZGVmaW5lIFNFUV9TRVRfVEVNUE8odmFsdWUpIF9USU1FUl9FVkVOVChUTVJfVEVNUE8sIHZhbHVlKQorI2RlZmluZSBTRVFfU09OR1BPUyhwb3MpIF9USU1FUl9FVkVOVChUTVJfU1BQLCBwb3MpCisjZGVmaW5lIFNFUV9USU1FX1NJR05BVFVSRShzaWcpIF9USU1FUl9FVkVOVChUTVJfVElNRVNJRywgc2lnKQorCisjZGVmaW5lIF9MT0NBTF9FVkVOVChldiwgcGFybSkge19TRVFfTkVFREJVRig4KTsgIF9zZXFidWZbX3NlcWJ1ZnB0ciswXSA9IEVWX1NFUV9MT0NBTDsgICBfc2VxYnVmW19zZXFidWZwdHIrMV0gPSAoZXYpOyAgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IDA7ICBfc2VxYnVmW19zZXFidWZwdHIrM10gPSAwOyAgKih1bnNpZ25lZCBpbnQgKikmX3NlcWJ1Zltfc2VxYnVmcHRyKzRdID0gKHBhcm0pOyAgIF9TRVFfQURWQlVGKDgpO30KKworI2RlZmluZSBTRVFfUExBWUFVRElPKGRldm1hc2spIF9MT0NBTF9FVkVOVChMT0NMX1NUQVJUQVVESU8sIGRldm1hc2spCisKKyNkZWZpbmUgU0VRX01JRElPVVQoZGV2aWNlLCBieXRlKSB7X1NFUV9ORUVEQlVGKDQpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyXSA9IFNFUV9NSURJUFVUQzsgIF9zZXFidWZbX3NlcWJ1ZnB0cisxXSA9IChieXRlKTsgIF9zZXFidWZbX3NlcWJ1ZnB0cisyXSA9IChkZXZpY2UpOyAgX3NlcWJ1Zltfc2VxYnVmcHRyKzNdID0gMDsgIF9TRVFfQURWQlVGKDQpO30KKworI2lmZGVmIE9TU0xJQgorI2RlZmluZSBTRVFfV1JQQVRDSChwYXRjaHgsIGxlbikgICBPU1Nfd3JpdGVfcGF0Y2goc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKQorI2RlZmluZSBTRVFfV1JQQVRDSDIocGF0Y2h4LCBsZW4pICAgT1NTX3dyaXRlX3BhdGNoMihzZXFmZCwgKGNoYXIqKShwYXRjaHgpLCBsZW4pCisjZWxzZQorI2RlZmluZSBTRVFfV1JQQVRDSChwYXRjaHgsIGxlbikgICB7aWYgKF9zZXFidWZwdHIpIFNFUV9EVU1QQlVGKCk7ICBpZiAod3JpdGUoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKT09LTEpICAgcGVycm9yKCJXcml0ZSBwYXRjaDogL2Rldi9zZXF1ZW5jZXIiKTt9CisjZGVmaW5lIFNFUV9XUlBBVENIMihwYXRjaHgsIGxlbikgICAoU0VRX0RVTVBCVUYoKSwgd3JpdGUoc2VxZmQsIChjaGFyKikocGF0Y2h4KSwgbGVuKSkKKyNlbmRpZgorCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2suaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA0YzllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19ICisjZGVmaW5lIF9fTElOVVhfU1BJTkxPQ0tfSAorCisjaW5jbHVkZSA8bGludXgvcHJlZW1wdC5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZF9pbmZvLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisKKyNkZWZpbmUgTE9DS19TRUNUSU9OX05BTUUgIi50ZXh0LmxvY2suIktCVUlMRF9CQVNFTkFNRQorCisjZGVmaW5lIExPQ0tfU0VDVElPTl9TVEFSVChleHRyYSkgICAiLnN1YnNlY3Rpb24gMVxuXHQiICAgZXh0cmEgICAiLmlmbmRlZiAiIExPQ0tfU0VDVElPTl9OQU1FICJcblx0IiAgIExPQ0tfU0VDVElPTl9OQU1FICI6XG5cdCIgICAiLmVuZGlmXG4iCisKKyNkZWZpbmUgTE9DS19TRUNUSU9OX0VORCAgICIucHJldmlvdXNcblx0IgorCisjZGVmaW5lIF9fbG9ja2Z1bmMgZmFzdGNhbGwgX19hdHRyaWJ1dGVfXygoc2VjdGlvbigiLnNwaW5sb2NrLnRleHQiKSkpCisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlcy5oPgorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfdXAuaD4KKworI2RlZmluZSBzcGluX2xvY2tfaW5pdChsb2NrKSAgIGRvIHsgKihsb2NrKSA9IFNQSU5fTE9DS19VTkxPQ0tFRDsgfSB3aGlsZSAoMCkKKworI2RlZmluZSByd2xvY2tfaW5pdChsb2NrKSAgIGRvIHsgKihsb2NrKSA9IFJXX0xPQ0tfVU5MT0NLRUQ7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgc3Bpbl9pc19sb2NrZWQobG9jaykgX19yYXdfc3Bpbl9pc19sb2NrZWQoJihsb2NrKS0+cmF3X2xvY2spCisKKyNkZWZpbmUgc3Bpbl91bmxvY2tfd2FpdChsb2NrKSBfX3Jhd19zcGluX3VubG9ja193YWl0KCYobG9jayktPnJhd19sb2NrKQorCisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2tfYXBpX3VwLmg+CisKKyNkZWZpbmUgX3Jhd19zcGluX2xvY2sobG9jaykgX19yYXdfc3Bpbl9sb2NrKCYobG9jayktPnJhd19sb2NrKQorI2RlZmluZSBfcmF3X3NwaW5fbG9ja19mbGFncyhsb2NrLCBmbGFncykgICBfX3Jhd19zcGluX2xvY2tfZmxhZ3MoJihsb2NrKS0+cmF3X2xvY2ssICooZmxhZ3MpKQorI2RlZmluZSBfcmF3X3NwaW5fdHJ5bG9jayhsb2NrKSBfX3Jhd19zcGluX3RyeWxvY2soJihsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfc3Bpbl91bmxvY2sobG9jaykgX19yYXdfc3Bpbl91bmxvY2soJihsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfcmVhZF9sb2NrKHJ3bG9jaykgX19yYXdfcmVhZF9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfcmVhZF90cnlsb2NrKHJ3bG9jaykgX19yYXdfcmVhZF90cnlsb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfcmVhZF91bmxvY2socndsb2NrKSBfX3Jhd19yZWFkX3VubG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorI2RlZmluZSBfcmF3X3dyaXRlX2xvY2socndsb2NrKSBfX3Jhd193cml0ZV9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisjZGVmaW5lIF9yYXdfd3JpdGVfdHJ5bG9jayhyd2xvY2spIF9fcmF3X3dyaXRlX3RyeWxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKyNkZWZpbmUgX3Jhd193cml0ZV91bmxvY2socndsb2NrKSBfX3Jhd193cml0ZV91bmxvY2soJihyd2xvY2spLT5yYXdfbG9jaykKKworI2RlZmluZSByZWFkX2Nhbl9sb2NrKHJ3bG9jaykgX19yYXdfcmVhZF9jYW5fbG9jaygmKHJ3bG9jayktPnJhd19sb2NrKQorI2RlZmluZSB3cml0ZV9jYW5fbG9jayhyd2xvY2spIF9fcmF3X3dyaXRlX2Nhbl9sb2NrKCYocndsb2NrKS0+cmF3X2xvY2spCisKKyNkZWZpbmUgc3Bpbl90cnlsb2NrKGxvY2spIF9fY29uZF9sb2NrKF9zcGluX3RyeWxvY2sobG9jaykpCisjZGVmaW5lIHJlYWRfdHJ5bG9jayhsb2NrKSBfX2NvbmRfbG9jayhfcmVhZF90cnlsb2NrKGxvY2spKQorI2RlZmluZSB3cml0ZV90cnlsb2NrKGxvY2spIF9fY29uZF9sb2NrKF93cml0ZV90cnlsb2NrKGxvY2spKQorCisjZGVmaW5lIHNwaW5fbG9jayhsb2NrKSBfc3Bpbl9sb2NrKGxvY2spCisKKyNkZWZpbmUgc3Bpbl9sb2NrX25lc3RlZChsb2NrLCBzdWJjbGFzcykgX3NwaW5fbG9jayhsb2NrKQorCisjZGVmaW5lIHdyaXRlX2xvY2sobG9jaykgX3dyaXRlX2xvY2sobG9jaykKKyNkZWZpbmUgcmVhZF9sb2NrKGxvY2spIF9yZWFkX2xvY2sobG9jaykKKworI2RlZmluZSBzcGluX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgX3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQorI2RlZmluZSByZWFkX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgX3JlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKQorI2RlZmluZSB3cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpIF93cml0ZV9sb2NrX2lycXNhdmUobG9jaywgZmxhZ3MpCisKKyNkZWZpbmUgc3Bpbl9sb2NrX2lycShsb2NrKSBfc3Bpbl9sb2NrX2lycShsb2NrKQorI2RlZmluZSBzcGluX2xvY2tfYmgobG9jaykgX3NwaW5fbG9ja19iaChsb2NrKQorCisjZGVmaW5lIHJlYWRfbG9ja19pcnEobG9jaykgX3JlYWRfbG9ja19pcnEobG9jaykKKyNkZWZpbmUgcmVhZF9sb2NrX2JoKGxvY2spIF9yZWFkX2xvY2tfYmgobG9jaykKKworI2RlZmluZSB3cml0ZV9sb2NrX2lycShsb2NrKSBfd3JpdGVfbG9ja19pcnEobG9jaykKKyNkZWZpbmUgd3JpdGVfbG9ja19iaChsb2NrKSBfd3JpdGVfbG9ja19iaChsb2NrKQorCisjZGVmaW5lIHNwaW5fdW5sb2NrKGxvY2spIF9zcGluX3VubG9jayhsb2NrKQorI2RlZmluZSByZWFkX3VubG9jayhsb2NrKSBfcmVhZF91bmxvY2sobG9jaykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrKGxvY2spIF93cml0ZV91bmxvY2sobG9jaykKKyNkZWZpbmUgc3Bpbl91bmxvY2tfaXJxKGxvY2spIF9zcGluX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgcmVhZF91bmxvY2tfaXJxKGxvY2spIF9yZWFkX3VubG9ja19pcnEobG9jaykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrX2lycShsb2NrKSBfd3JpdGVfdW5sb2NrX2lycShsb2NrKQorCisjZGVmaW5lIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHNwaW5fdW5sb2NrX2JoKGxvY2spIF9zcGluX3VubG9ja19iaChsb2NrKQorCisjZGVmaW5lIHJlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpICAgX3JlYWRfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpCisjZGVmaW5lIHJlYWRfdW5sb2NrX2JoKGxvY2spIF9yZWFkX3VubG9ja19iaChsb2NrKQorCisjZGVmaW5lIHdyaXRlX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSAgIF93cml0ZV91bmxvY2tfaXJxcmVzdG9yZShsb2NrLCBmbGFncykKKyNkZWZpbmUgd3JpdGVfdW5sb2NrX2JoKGxvY2spIF93cml0ZV91bmxvY2tfYmgobG9jaykKKworI2RlZmluZSBzcGluX3RyeWxvY2tfYmgobG9jaykgX19jb25kX2xvY2soX3NwaW5fdHJ5bG9ja19iaChsb2NrKSkKKworI2RlZmluZSBzcGluX3RyeWxvY2tfaXJxKGxvY2spICAoeyAgIGxvY2FsX2lycV9kaXNhYmxlKCk7ICAgX3NwaW5fdHJ5bG9jayhsb2NrKSA/ICAgMSA6ICh7IGxvY2FsX2lycV9lbmFibGUoKTsgMDsgfSk7ICB9KQorCisjZGVmaW5lIHNwaW5fdHJ5bG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSAgKHsgICBsb2NhbF9pcnFfc2F2ZShmbGFncyk7ICAgX3NwaW5fdHJ5bG9jayhsb2NrKSA/ICAgMSA6ICh7IGxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsgMDsgfSk7ICB9KQorCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCisjZGVmaW5lIGF0b21pY19kZWNfYW5kX2xvY2soYXRvbWljLCBsb2NrKSAgIF9fY29uZF9sb2NrKF9hdG9taWNfZGVjX2FuZF9sb2NrKGF0b21pYywgbG9jaykpCisKKyNkZWZpbmUgc3Bpbl9jYW5fbG9jayhsb2NrKSAoIXNwaW5faXNfbG9ja2VkKGxvY2spKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zcGlubG9ja19hcGlfc21wLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc0ZDhjYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3NtcC5oCkBAIC0wLDAgKzEsMjEgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19BUElfU01QX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19BUElfU01QX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0gKKyNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKKyNkZWZpbmUgYXNzZXJ0X3NwaW5fbG9ja2VkKHgpIEJVR19PTighc3Bpbl9pc19sb2NrZWQoeCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX2FwaV91cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM5YTVjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfYXBpX3VwLmgKQEAgLTAsMCArMSw2OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0FQSV9VUF9ICisjZGVmaW5lIF9fTElOVVhfU1BJTkxPQ0tfQVBJX1VQX0gKKworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX0gKKyNlcnJvciAicGxlYXNlIGRvbid0IGluY2x1ZGUgdGhpcyBmaWxlIGRpcmVjdGx5IgorI2VuZGlmCisKKyNkZWZpbmUgaW5fbG9ja19mdW5jdGlvbnMoQUREUikgMAorCisjZGVmaW5lIGFzc2VydF9zcGluX2xvY2tlZChsb2NrKSBkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0xPQ0sobG9jaykgICBkbyB7IHByZWVtcHRfZGlzYWJsZSgpOyBfX2FjcXVpcmUobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0xPQ0tfQkgobG9jaykgICBkbyB7IGxvY2FsX2JoX2Rpc2FibGUoKTsgX19MT0NLKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fTE9DS19JUlEobG9jaykgICBkbyB7IGxvY2FsX2lycV9kaXNhYmxlKCk7IF9fTE9DSyhsb2NrKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykgICBkbyB7IGxvY2FsX2lycV9zYXZlKGZsYWdzKTsgX19MT0NLKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fVU5MT0NLKGxvY2spICAgZG8geyBwcmVlbXB0X2VuYWJsZSgpOyBfX3JlbGVhc2UobG9jayk7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKworI2RlZmluZSBfX1VOTE9DS19CSChsb2NrKSAgIGRvIHsgcHJlZW1wdF9lbmFibGVfbm9fcmVzY2hlZCgpOyBsb2NhbF9iaF9lbmFibGUoKTsgX19yZWxlYXNlKGxvY2spOyAodm9pZCkobG9jayk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgX19VTkxPQ0tfSVJRKGxvY2spICAgZG8geyBsb2NhbF9pcnFfZW5hYmxlKCk7IF9fVU5MT0NLKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpICAgZG8geyBsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7IF9fVU5MT0NLKGxvY2spOyB9IHdoaWxlICgwKQorCisjZGVmaW5lIF9zcGluX2xvY2sobG9jaykgX19MT0NLKGxvY2spCisjZGVmaW5lIF9zcGluX2xvY2tfbmVzdGVkKGxvY2ssIHN1YmNsYXNzKSBfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3JlYWRfbG9jayhsb2NrKSBfX0xPQ0sobG9jaykKKyNkZWZpbmUgX3dyaXRlX2xvY2sobG9jaykgX19MT0NLKGxvY2spCisjZGVmaW5lIF9zcGluX2xvY2tfYmgobG9jaykgX19MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9yZWFkX2xvY2tfYmgobG9jaykgX19MT0NLX0JIKGxvY2spCisjZGVmaW5lIF93cml0ZV9sb2NrX2JoKGxvY2spIF9fTE9DS19CSChsb2NrKQorI2RlZmluZSBfc3Bpbl9sb2NrX2lycShsb2NrKSBfX0xPQ0tfSVJRKGxvY2spCisjZGVmaW5lIF9yZWFkX2xvY2tfaXJxKGxvY2spIF9fTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxKGxvY2spIF9fTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3NwaW5fbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykKKyNkZWZpbmUgX3JlYWRfbG9ja19pcnFzYXZlKGxvY2ssIGZsYWdzKSBfX0xPQ0tfSVJRU0FWRShsb2NrLCBmbGFncykKKyNkZWZpbmUgX3dyaXRlX2xvY2tfaXJxc2F2ZShsb2NrLCBmbGFncykgX19MT0NLX0lSUVNBVkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9zcGluX3RyeWxvY2sobG9jaykgKHsgX19MT0NLKGxvY2spOyAxOyB9KQorI2RlZmluZSBfcmVhZF90cnlsb2NrKGxvY2spICh7IF9fTE9DSyhsb2NrKTsgMTsgfSkKKyNkZWZpbmUgX3dyaXRlX3RyeWxvY2sobG9jaykgKHsgX19MT0NLKGxvY2spOyAxOyB9KQorI2RlZmluZSBfc3Bpbl90cnlsb2NrX2JoKGxvY2spICh7IF9fTE9DS19CSChsb2NrKTsgMTsgfSkKKyNkZWZpbmUgX3NwaW5fdW5sb2NrKGxvY2spIF9fVU5MT0NLKGxvY2spCisjZGVmaW5lIF9yZWFkX3VubG9jayhsb2NrKSBfX1VOTE9DSyhsb2NrKQorI2RlZmluZSBfd3JpdGVfdW5sb2NrKGxvY2spIF9fVU5MT0NLKGxvY2spCisjZGVmaW5lIF9zcGluX3VubG9ja19iaChsb2NrKSBfX1VOTE9DS19CSChsb2NrKQorI2RlZmluZSBfd3JpdGVfdW5sb2NrX2JoKGxvY2spIF9fVU5MT0NLX0JIKGxvY2spCisjZGVmaW5lIF9yZWFkX3VubG9ja19iaChsb2NrKSBfX1VOTE9DS19CSChsb2NrKQorI2RlZmluZSBfc3Bpbl91bmxvY2tfaXJxKGxvY2spIF9fVU5MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfcmVhZF91bmxvY2tfaXJxKGxvY2spIF9fVU5MT0NLX0lSUShsb2NrKQorI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycShsb2NrKSBfX1VOTE9DS19JUlEobG9jaykKKyNkZWZpbmUgX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCisjZGVmaW5lIF9yZWFkX3VubG9ja19pcnFyZXN0b3JlKGxvY2ssIGZsYWdzKSBfX1VOTE9DS19JUlFSRVNUT1JFKGxvY2ssIGZsYWdzKQorI2RlZmluZSBfd3JpdGVfdW5sb2NrX2lycXJlc3RvcmUobG9jaywgZmxhZ3MpIF9fVU5MT0NLX0lSUVJFU1RPUkUobG9jaywgZmxhZ3MpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wOTM4YjUxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzLmgKQEAgLTAsMCArMSw0NiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19UWVBFU19ICisKKyNpbmNsdWRlIDxsaW51eC9sb2NrZGVwLmg+CisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9ja190eXBlc191cC5oPgorCit0eXBlZGVmIHN0cnVjdCB7CisgcmF3X3NwaW5sb2NrX3QgcmF3X2xvY2s7Cit9IHNwaW5sb2NrX3Q7CisKKyNkZWZpbmUgU1BJTkxPQ0tfTUFHSUMgMHhkZWFkNGVhZAorCit0eXBlZGVmIHN0cnVjdCB7CisgcmF3X3J3bG9ja190IHJhd19sb2NrOworfSByd2xvY2tfdDsKKworI2RlZmluZSBSV0xPQ0tfTUFHSUMgMHhkZWFmMWVlZAorCisjZGVmaW5lIFNQSU5MT0NLX09XTkVSX0lOSVQgKCh2b2lkICopLTFMKQorCisjZGVmaW5lIFNQSU5fREVQX01BUF9JTklUKGxvY2tuYW1lKQorCisjZGVmaW5lIFJXX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkKKworI2RlZmluZSBfX1NQSU5fTE9DS19VTkxPQ0tFRChsb2NrbmFtZSkgICAoc3BpbmxvY2tfdCkgeyAucmF3X2xvY2sgPSBfX1JBV19TUElOX0xPQ0tfVU5MT0NLRUQsICAgU1BJTl9ERVBfTUFQX0lOSVQobG9ja25hbWUpIH0KKyNkZWZpbmUgX19SV19MT0NLX1VOTE9DS0VEKGxvY2tuYW1lKSAgIChyd2xvY2tfdCkgeyAucmF3X2xvY2sgPSBfX1JBV19SV19MT0NLX1VOTE9DS0VELCAgIFJXX0RFUF9NQVBfSU5JVChsb2NrbmFtZSkgfQorCisjZGVmaW5lIFNQSU5fTE9DS19VTkxPQ0tFRCBfX1NQSU5fTE9DS19VTkxPQ0tFRChvbGRfc3R5bGVfc3Bpbl9pbml0KQorI2RlZmluZSBSV19MT0NLX1VOTE9DS0VEIF9fUldfTE9DS19VTkxPQ0tFRChvbGRfc3R5bGVfcndfaW5pdCkKKworI2RlZmluZSBERUZJTkVfU1BJTkxPQ0soeCkgc3BpbmxvY2tfdCB4ID0gX19TUElOX0xPQ0tfVU5MT0NLRUQoeCkKKyNkZWZpbmUgREVGSU5FX1JXTE9DSyh4KSByd2xvY2tfdCB4ID0gX19SV19MT0NLX1VOTE9DS0VEKHgpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdHlwZXNfdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIzMDM3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3R5cGVzX3VwLmgKQEAgLTAsMCArMSwyOSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1RZUEVTX1VQX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19UWVBFU19VUF9ICisKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19UWVBFU19ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCB7IH0gcmF3X3NwaW5sb2NrX3Q7CisKKyNkZWZpbmUgX19SQVdfU1BJTl9MT0NLX1VOTE9DS0VEIHsgfQorCit0eXBlZGVmIHN0cnVjdCB7CisKK30gcmF3X3J3bG9ja190OworCisjZGVmaW5lIF9fUkFXX1JXX0xPQ0tfVU5MT0NLRUQgeyB9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3VwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3BpbmxvY2tfdXAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDk1OGRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3NwaW5sb2NrX3VwLmgKQEAgLTAsMCArMSwzMCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NQSU5MT0NLX1VQX0gKKyNkZWZpbmUgX19MSU5VWF9TUElOTE9DS19VUF9ICisKKyNpZm5kZWYgX19MSU5VWF9TUElOTE9DS19ICisjZXJyb3IgInBsZWFzZSBkb24ndCBpbmNsdWRlIHRoaXMgZmlsZSBkaXJlY3RseSIKKyNlbmRpZgorCisjZGVmaW5lIF9fcmF3X3NwaW5faXNfbG9ja2VkKGxvY2spICgodm9pZCkobG9jayksIDApCisKKyNkZWZpbmUgX19yYXdfc3Bpbl9sb2NrKGxvY2spIGRvIHsgKHZvaWQpKGxvY2spOyB9IHdoaWxlICgwKQorI2RlZmluZSBfX3Jhd19zcGluX3VubG9jayhsb2NrKSBkbyB7ICh2b2lkKShsb2NrKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgX19yYXdfc3Bpbl90cnlsb2NrKGxvY2spICh7ICh2b2lkKShsb2NrKTsgMTsgfSkKKworI2RlZmluZSBfX3Jhd19yZWFkX2Nhbl9sb2NrKGxvY2spICgoKHZvaWQpKGxvY2spLCAxKSkKKyNkZWZpbmUgX19yYXdfd3JpdGVfY2FuX2xvY2sobG9jaykgKCgodm9pZCkobG9jayksIDEpKQorCisjZGVmaW5lIF9fcmF3X3NwaW5fdW5sb2NrX3dhaXQobG9jaykgICBkbyB7IGNwdV9yZWxheCgpOyB9IHdoaWxlIChfX3Jhd19zcGluX2lzX2xvY2tlZChsb2NrKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhY2t0cmFjZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YWNrdHJhY2UuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZjdlY2M4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YWNrdHJhY2UuaApAQCAtMCwwICsxLDE4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfU1RBQ0tUUkFDRV9ICisjZGVmaW5lIF9fTElOVVhfU1RBQ0tUUkFDRV9ICisKKyNkZWZpbmUgc2F2ZV9zdGFja190cmFjZSh0cmFjZSwgdGFzaywgYWxsLCBza2lwKSBkbyB7IH0gd2hpbGUgKDApCisjZGVmaW5lIHByaW50X3N0YWNrX3RyYWNlKHRyYWNlKSBkbyB7IH0gd2hpbGUgKDApCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGF0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQ3NTdmNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdGF0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1RBVF9ICisjZGVmaW5lIF9MSU5VWF9TVEFUX0gKKworI2lmICFkZWZpbmVkKF9fR0xJQkNfXykgfHwgX19HTElCQ19fIDwgMgorCisjZGVmaW5lIFNfSUZNVCAwMDE3MDAwMAorI2RlZmluZSBTX0lGU09DSyAwMTQwMDAwCisjZGVmaW5lIFNfSUZMTksgMDEyMDAwMAorI2RlZmluZSBTX0lGUkVHIDAxMDAwMDAKKyNkZWZpbmUgU19JRkJMSyAwMDYwMDAwCisjZGVmaW5lIFNfSUZESVIgMDA0MDAwMAorI2RlZmluZSBTX0lGQ0hSIDAwMjAwMDAKKyNkZWZpbmUgU19JRklGTyAwMDEwMDAwCisjZGVmaW5lIFNfSVNVSUQgMDAwNDAwMAorI2RlZmluZSBTX0lTR0lEIDAwMDIwMDAKKyNkZWZpbmUgU19JU1ZUWCAwMDAxMDAwCisKKyNkZWZpbmUgU19JU0xOSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkxOSykKKyNkZWZpbmUgU19JU1JFRyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRlJFRykKKyNkZWZpbmUgU19JU0RJUihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkRJUikKKyNkZWZpbmUgU19JU0NIUihtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkNIUikKKyNkZWZpbmUgU19JU0JMSyhtKSAoKChtKSAmIFNfSUZNVCkgPT0gU19JRkJMSykKKyNkZWZpbmUgU19JU0ZJRk8obSkgKCgobSkgJiBTX0lGTVQpID09IFNfSUZJRk8pCisjZGVmaW5lIFNfSVNTT0NLKG0pICgoKG0pICYgU19JRk1UKSA9PSBTX0lGU09DSykKKworI2RlZmluZSBTX0lSV1hVIDAwNzAwCisjZGVmaW5lIFNfSVJVU1IgMDA0MDAKKyNkZWZpbmUgU19JV1VTUiAwMDIwMAorI2RlZmluZSBTX0lYVVNSIDAwMTAwCisKKyNkZWZpbmUgU19JUldYRyAwMDA3MAorI2RlZmluZSBTX0lSR1JQIDAwMDQwCisjZGVmaW5lIFNfSVdHUlAgMDAwMjAKKyNkZWZpbmUgU19JWEdSUCAwMDAxMAorCisjZGVmaW5lIFNfSVJXWE8gMDAwMDcKKyNkZWZpbmUgU19JUk9USCAwMDAwNAorI2RlZmluZSBTX0lXT1RIIDAwMDAyCisjZGVmaW5lIFNfSVhPVEggMDAwMDEKKworI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXRmcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0YXRmcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQzYTVkNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RhdGZzLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1RBVEZTX0gKKyNkZWZpbmUgX0xJTlVYX1NUQVRGU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCisjaW5jbHVkZSA8YXNtL3N0YXRmcy5oPgorCitzdHJ1Y3Qga3N0YXRmcyB7CisgbG9uZyBmX3R5cGU7CisgbG9uZyBmX2JzaXplOworIHU2NCBmX2Jsb2NrczsKKyB1NjQgZl9iZnJlZTsKKyB1NjQgZl9iYXZhaWw7CisgdTY0IGZfZmlsZXM7CisgdTY0IGZfZmZyZWU7CisgX19rZXJuZWxfZnNpZF90IGZfZnNpZDsKKyBsb25nIGZfbmFtZWxlbjsKKyBsb25nIGZfZnJzaXplOworIGxvbmcgZl9zcGFyZVs1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0ZGRlZi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0ZGRlZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU0MTJmNDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RkZGVmLmgKQEAgLTAsMCArMSwzMSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1REREVGX0gKKyNkZWZpbmUgX0xJTlVYX1NURERFRl9ICisKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorCisjdW5kZWYgTlVMTAorI2lmZGVmIF9fY3BsdXNwbHVzCisjZGVmaW5lIE5VTEwgMAorI2Vsc2UKKyNkZWZpbmUgTlVMTCAoKHZvaWQgKikwKQorI2VuZGlmCisKKyN1bmRlZiBvZmZzZXRvZgorI2lmZGVmIF9fY29tcGlsZXJfb2Zmc2V0b2YKKyNkZWZpbmUgb2Zmc2V0b2YoVFlQRSxNRU1CRVIpIF9fY29tcGlsZXJfb2Zmc2V0b2YoVFlQRSxNRU1CRVIpCisjZWxzZQorI2RlZmluZSBvZmZzZXRvZihUWVBFLCBNRU1CRVIpICgoc2l6ZV90KSAmKChUWVBFICopMCktPk1FTUJFUikKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdHJpbmcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdHJpbmcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NzU5MDY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZy5oCkBAIC0wLDAgKzEsMTUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NUUklOR19IXworI2RlZmluZSBfTElOVVhfU1RSSU5HX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZ2lmeS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N0cmluZ2lmeS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNiYjllNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3RyaW5naWZ5LmgKQEAgLTAsMCArMSwxOCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1NUUklOR0lGWV9ICisjZGVmaW5lIF9fTElOVVhfU1RSSU5HSUZZX0gKKworI2RlZmluZSBfX3N0cmluZ2lmeV8xKHgpICN4CisjZGVmaW5lIF9fc3RyaW5naWZ5KHgpIF9fc3RyaW5naWZ5XzEoeCkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFlMGEzZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGguaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfQVVUSF9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfQVVUSF9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9hdXRoX2dzcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2NGYxZjgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2F1dGhfZ3NzLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0FVVEhfR1NTX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19BVVRIX0dTU19ICisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2NsbnQuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvY2xudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1NjJhZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2NsbnQuaApAQCAtMCwwICsxLDEwMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0NMTlRfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0NMTlRfSAorCisjaW5jbHVkZSA8bGludXgvc3VucnBjL21zZ19wcm90Lmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hwcnQuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9zdGF0cy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvdGltZXIuaD4KKyNpbmNsdWRlIDxhc20vc2lnbmFsLmg+CisKK3N0cnVjdCBycGNfcG9ydG1hcCB7CisgX191MzIgcG1fcHJvZzsKKyBfX3UzMiBwbV92ZXJzOworIF9fdTMyIHBtX3Byb3Q7CisgX191MTYgcG1fcG9ydDsKKyB1bnNpZ25lZCBjaGFyIHBtX2JpbmRpbmcgOiAxOworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSBwbV9iaW5kd2FpdDsKK307CisKK3N0cnVjdCBycGNfaW5vZGU7CisKK3N0cnVjdCBycGNfY2xudCB7CisgYXRvbWljX3QgY2xfY291bnQ7CisgYXRvbWljX3QgY2xfdXNlcnM7Cisgc3RydWN0IHJwY194cHJ0ICogY2xfeHBydDsKKyBzdHJ1Y3QgcnBjX3Byb2NpbmZvICogY2xfcHJvY2luZm87CisgdTMyIGNsX21heHByb2M7CisKKyBjaGFyICogY2xfc2VydmVyOworIGNoYXIgKiBjbF9wcm90bmFtZTsKKyBzdHJ1Y3QgcnBjX2F1dGggKiBjbF9hdXRoOworIHN0cnVjdCBycGNfc3RhdCAqIGNsX3N0YXRzOworIHN0cnVjdCBycGNfaW9zdGF0cyAqIGNsX21ldHJpY3M7CisKKyB1bnNpZ25lZCBpbnQgY2xfc29mdHJ0cnkgOiAxLAorIGNsX2ludHIgOiAxLAorIGNsX2F1dG9iaW5kIDogMSwKKyBjbF9vbmVzaG90IDogMSwKKyBjbF9kZWFkIDogMTsKKworIHN0cnVjdCBycGNfcnR0ICogY2xfcnR0OworIHN0cnVjdCBycGNfcG9ydG1hcCAqIGNsX3BtYXA7CisKKyBpbnQgY2xfbm9kZWxlbjsKKyBjaGFyIGNsX25vZGVuYW1lW1VOWF9NQVhOT0RFTkFNRV07CisgY2hhciBjbF9wYXRobmFtZVszMF07Cisgc3RydWN0IHZmc21vdW50ICogY2xfdmZzbW50OworIHN0cnVjdCBkZW50cnkgKiBjbF9kZW50cnk7Cisgc3RydWN0IHJwY19jbG50ICogY2xfcGFyZW50OworIHN0cnVjdCBycGNfcnR0IGNsX3J0dF9kZWZhdWx0OworIHN0cnVjdCBycGNfcG9ydG1hcCBjbF9wbWFwX2RlZmF1bHQ7CisgY2hhciBjbF9pbmxpbmVfbmFtZVszMl07Cit9OworI2RlZmluZSBjbF90aW1lb3V0IGNsX3hwcnQtPnRpbWVvdXQKKyNkZWZpbmUgY2xfcHJvZyBjbF9wbWFwLT5wbV9wcm9nCisjZGVmaW5lIGNsX3ZlcnMgY2xfcG1hcC0+cG1fdmVycworI2RlZmluZSBjbF9wb3J0IGNsX3BtYXAtPnBtX3BvcnQKKyNkZWZpbmUgY2xfcHJvdCBjbF9wbWFwLT5wbV9wcm90CisKKyNkZWZpbmUgUlBDX01BWFZFUlNJT04gNAorc3RydWN0IHJwY19wcm9ncmFtIHsKKyBjaGFyICogbmFtZTsKKyB1MzIgbnVtYmVyOworIHVuc2lnbmVkIGludCBucnZlcnM7Cisgc3RydWN0IHJwY192ZXJzaW9uICoqIHZlcnNpb247Cisgc3RydWN0IHJwY19zdGF0ICogc3RhdHM7CisgY2hhciAqIHBpcGVfZGlyX25hbWU7Cit9OworCitzdHJ1Y3QgcnBjX3ZlcnNpb24geworIHUzMiBudW1iZXI7CisgdW5zaWduZWQgaW50IG5ycHJvY3M7Cisgc3RydWN0IHJwY19wcm9jaW5mbyAqIHByb2NzOworfTsKKworc3RydWN0IHJwY19wcm9jaW5mbyB7CisgdTMyIHBfcHJvYzsKKyBreGRycHJvY190IHBfZW5jb2RlOworIGt4ZHJwcm9jX3QgcF9kZWNvZGU7CisgdW5zaWduZWQgaW50IHBfYnVmc2l6OworIHVuc2lnbmVkIGludCBwX2NvdW50OworIHVuc2lnbmVkIGludCBwX3RpbWVyOworIHUzMiBwX3N0YXRpZHg7CisgY2hhciAqIHBfbmFtZTsKK307CisKKyNkZWZpbmUgUlBDX0NPTkdFU1RFRChjbG50KSAoUlBDWFBSVF9DT05HRVNURUQoKGNsbnQpLT5jbF94cHJ0KSkKKyNkZWZpbmUgUlBDX1BFRVJBRERSKGNsbnQpICgmKGNsbnQpLT5jbF94cHJ0LT5hZGRyKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZGVidWcuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjY4OWYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9kZWJ1Zy5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19ERUJVR19IXworI2RlZmluZSBfTElOVVhfU1VOUlBDX0RFQlVHX0hfCisKKyNkZWZpbmUgUlBDREJHX1hQUlQgMHgwMDAxCisjZGVmaW5lIFJQQ0RCR19DQUxMIDB4MDAwMgorI2RlZmluZSBSUENEQkdfREVCVUcgMHgwMDA0CisjZGVmaW5lIFJQQ0RCR19ORlMgMHgwMDA4CisjZGVmaW5lIFJQQ0RCR19BVVRIIDB4MDAxMAorI2RlZmluZSBSUENEQkdfUE1BUCAweDAwMjAKKyNkZWZpbmUgUlBDREJHX1NDSEVEIDB4MDA0MAorI2RlZmluZSBSUENEQkdfVFJBTlMgMHgwMDgwCisjZGVmaW5lIFJQQ0RCR19TVkNTT0NLIDB4MDEwMAorI2RlZmluZSBSUENEQkdfU1ZDRFNQIDB4MDIwMAorI2RlZmluZSBSUENEQkdfTUlTQyAweDA0MDAKKyNkZWZpbmUgUlBDREJHX0NBQ0hFIDB4MDgwMAorI2RlZmluZSBSUENEQkdfQUxMIDB4N2ZmZgorCisjZGVmaW5lIENUTF9TVU5SUEMgNzI0OSAgCisKK2VudW0geworIENUTF9SUENERUJVRyA9IDEsCisgQ1RMX05GU0RFQlVHLAorIENUTF9ORlNEREVCVUcsCisgQ1RMX05MTURFQlVHLAorIENUTF9TTE9UVEFCTEVfVURQLAorIENUTF9TTE9UVEFCTEVfVENQLAorIENUTF9NSU5fUkVTVlBPUlQsCisgQ1RMX01BWF9SRVNWUE9SVCwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXBpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hcGkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYmM3N2MyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXBpLmgKQEAgLTAsMCArMSwxNiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX0dTU19BUElfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX0dTU19BUElfSAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXNuMS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9nc3NfYXNuMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMThiYTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19hc24xLmgKQEAgLTAsMCArMSwzNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy9nc3NfYXBpLmg+CisKKyNkZWZpbmUgU0laRU9GX0lOVCA0CisKKyNkZWZpbmUgR19CQURfU0VSVklDRV9OQU1FICgtMjA0NTAyMjk3NkwpCisjZGVmaW5lIEdfQkFEX1NUUklOR19VSUQgKC0yMDQ1MDIyOTc1TCkKKyNkZWZpbmUgR19OT1VTRVIgKC0yMDQ1MDIyOTc0TCkKKyNkZWZpbmUgR19WQUxJREFURV9GQUlMRUQgKC0yMDQ1MDIyOTczTCkKKyNkZWZpbmUgR19CVUZGRVJfQUxMT0MgKC0yMDQ1MDIyOTcyTCkKKyNkZWZpbmUgR19CQURfTVNHX0NUWCAoLTIwNDUwMjI5NzFMKQorI2RlZmluZSBHX1dST05HX1NJWkUgKC0yMDQ1MDIyOTcwTCkKKyNkZWZpbmUgR19CQURfVVNBR0UgKC0yMDQ1MDIyOTY5TCkKKyNkZWZpbmUgR19VTktOT1dOX1FPUCAoLTIwNDUwMjI5NjhMKQorI2RlZmluZSBHX05PX0hPU1ROQU1FICgtMjA0NTAyMjk2N0wpCisjZGVmaW5lIEdfQkFEX0hPU1ROQU1FICgtMjA0NTAyMjk2NkwpCisjZGVmaW5lIEdfV1JPTkdfTUVDSCAoLTIwNDUwMjI5NjVMKQorI2RlZmluZSBHX0JBRF9UT0tfSEVBREVSICgtMjA0NTAyMjk2NEwpCisjZGVmaW5lIEdfQkFEX0RJUkVDVElPTiAoLTIwNDUwMjI5NjNMKQorI2RlZmluZSBHX1RPS19UUlVOQyAoLTIwNDUwMjI5NjJMKQorI2RlZmluZSBHX1JFRkxFQ1QgKC0yMDQ1MDIyOTYxTCkKKyNkZWZpbmUgR19XUk9OR19UT0tJRCAoLTIwNDUwMjI5NjBMKQorCisjZGVmaW5lIGdfT0lEX2VxdWFsKG8xLG8yKSAgICgoKG8xKS0+bGVuID09IChvMiktPmxlbikgJiYgICAobWVtY21wKChvMSktPmRhdGEsKG8yKS0+ZGF0YSwoaW50KSAobzEpLT5sZW4pID09IDApKQorCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19lcnIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvZ3NzX2Vyci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxZmIxYjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL2dzc19lcnIuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfR1NTX0VSUl9ICisjZGVmaW5lIF9MSU5VWF9TVU5SUENfR1NTX0VSUl9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9tc2dfcHJvdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUyZjRlNzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL21zZ19wcm90LmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX01TR1BST1RfSF8KKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19NU0dQUk9UX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zY2hlZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zY2hlZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg1OWIyZDgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3NjaGVkLmgKQEAgLTAsMCArMSwxODIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19TQ0hFRF9IXworI2RlZmluZSBfTElOVVhfU1VOUlBDX1NDSEVEX0hfCisKKyNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvd2FpdC5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKworc3RydWN0IHJwY19wcm9jaW5mbzsKK3N0cnVjdCBycGNfbWVzc2FnZSB7Cisgc3RydWN0IHJwY19wcm9jaW5mbyAqIHJwY19wcm9jOworIHZvaWQgKiBycGNfYXJncDsKKyB2b2lkICogcnBjX3Jlc3A7Cisgc3RydWN0IHJwY19jcmVkICogcnBjX2NyZWQ7Cit9OworCitzdHJ1Y3QgcnBjX2NhbGxfb3BzOworc3RydWN0IHJwY193YWl0X3F1ZXVlOworc3RydWN0IHJwY193YWl0IHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7Cisgc3RydWN0IGxpc3RfaGVhZCBsaW5rczsKKyBzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgKiBycGNfd2FpdHE7Cit9OworCitzdHJ1Y3QgcnBjX3Rhc2sgeworI2lmZGVmIFJQQ19ERUJVRworIHVuc2lnbmVkIGxvbmcgdGtfbWFnaWM7CisjZW5kaWYKKyBhdG9taWNfdCB0a19jb3VudDsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHRrX3Rhc2s7Cisgc3RydWN0IHJwY19jbG50ICogdGtfY2xpZW50OworIHN0cnVjdCBycGNfcnFzdCAqIHRrX3Jxc3RwOworIGludCB0a19zdGF0dXM7CisKKyBzdHJ1Y3QgcnBjX21lc3NhZ2UgdGtfbXNnOworIF9fdTggdGtfZ2FyYl9yZXRyeTsKKyBfX3U4IHRrX2NyZWRfcmV0cnk7CisKKyB1bnNpZ25lZCBsb25nIHRrX2Nvb2tpZTsKKworIHZvaWQgKCp0a190aW1lb3V0X2ZuKShzdHJ1Y3QgcnBjX3Rhc2sgKik7Cisgdm9pZCAoKnRrX2NhbGxiYWNrKShzdHJ1Y3QgcnBjX3Rhc2sgKik7Cisgdm9pZCAoKnRrX2FjdGlvbikoc3RydWN0IHJwY190YXNrICopOworIGNvbnN0IHN0cnVjdCBycGNfY2FsbF9vcHMgKnRrX29wczsKKyB2b2lkICogdGtfY2FsbGRhdGE7CisKKyBzdHJ1Y3QgdGltZXJfbGlzdCB0a190aW1lcjsKKyB1bnNpZ25lZCBsb25nIHRrX3RpbWVvdXQ7CisgdW5zaWduZWQgc2hvcnQgdGtfZmxhZ3M7CisgdW5zaWduZWQgY2hhciB0a19wcmlvcml0eSA6IDI7CisgdW5zaWduZWQgbG9uZyB0a19ydW5zdGF0ZTsKKyBzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqdGtfd29ya3F1ZXVlOworIHVuaW9uIHsKKyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGtfd29yazsKKyBzdHJ1Y3QgcnBjX3dhaXQgdGtfd2FpdDsKKyB9IHU7CisKKyB1bnNpZ25lZCBzaG9ydCB0a190aW1lb3V0czsKKyBzaXplX3QgdGtfYnl0ZXNfc2VudDsKKyB1bnNpZ25lZCBsb25nIHRrX3N0YXJ0OworIGxvbmcgdGtfcnR0OworCisjaWZkZWYgUlBDX0RFQlVHCisgdW5zaWduZWQgc2hvcnQgdGtfcGlkOworI2VuZGlmCit9OworI2RlZmluZSB0a19hdXRoIHRrX2NsaWVudC0+Y2xfYXV0aAorI2RlZmluZSB0a194cHJ0IHRrX2NsaWVudC0+Y2xfeHBydAorCisjZGVmaW5lIHRhc2tfZm9yX2VhY2godGFzaywgcG9zLCBoZWFkKSAgIGxpc3RfZm9yX2VhY2gocG9zLCBoZWFkKSAgIGlmICgodGFzaz1saXN0X2VudHJ5KHBvcywgc3RydWN0IHJwY190YXNrLCB1LnRrX3dhaXQubGlzdCkpLDEpCisKKyNkZWZpbmUgdGFza19mb3JfZmlyc3QodGFzaywgaGVhZCkgICBpZiAoIWxpc3RfZW1wdHkoaGVhZCkgJiYgICAoKHRhc2s9bGlzdF9lbnRyeSgoaGVhZCktPm5leHQsIHN0cnVjdCBycGNfdGFzaywgdS50a193YWl0Lmxpc3QpKSwxKSkKKworI2RlZmluZSBhbGx0YXNrX2Zvcl9lYWNoKHRhc2ssIHBvcywgaGVhZCkgICBsaXN0X2Zvcl9lYWNoKHBvcywgaGVhZCkgICBpZiAoKHRhc2s9bGlzdF9lbnRyeShwb3MsIHN0cnVjdCBycGNfdGFzaywgdGtfdGFzaykpLDEpCisKK3R5cGVkZWYgdm9pZCAoKnJwY19hY3Rpb24pKHN0cnVjdCBycGNfdGFzayAqKTsKKworc3RydWN0IHJwY19jYWxsX29wcyB7Cisgdm9pZCAoKnJwY19jYWxsX3ByZXBhcmUpKHN0cnVjdCBycGNfdGFzayAqLCB2b2lkICopOworIHZvaWQgKCpycGNfY2FsbF9kb25lKShzdHJ1Y3QgcnBjX3Rhc2sgKiwgdm9pZCAqKTsKKyB2b2lkICgqcnBjX3JlbGVhc2UpKHZvaWQgKik7Cit9OworCisjZGVmaW5lIFJQQ19UQVNLX0FTWU5DIDB4MDAwMSAgCisjZGVmaW5lIFJQQ19UQVNLX1NXQVBQRVIgMHgwMDAyICAKKyNkZWZpbmUgUlBDX1RBU0tfQ0hJTEQgMHgwMDA4ICAKKyNkZWZpbmUgUlBDX0NBTExfTUFKT1JTRUVOIDB4MDAyMCAgCisjZGVmaW5lIFJQQ19UQVNLX1JPT1RDUkVEUyAweDAwNDAgIAorI2RlZmluZSBSUENfVEFTS19EWU5BTUlDIDB4MDA4MCAgCisjZGVmaW5lIFJQQ19UQVNLX0tJTExFRCAweDAxMDAgIAorI2RlZmluZSBSUENfVEFTS19TT0ZUIDB4MDIwMCAgCisjZGVmaW5lIFJQQ19UQVNLX05PSU5UUiAweDA0MDAgIAorCisjZGVmaW5lIFJQQ19JU19BU1lOQyh0KSAoKHQpLT50a19mbGFncyAmIFJQQ19UQVNLX0FTWU5DKQorI2RlZmluZSBSUENfSVNfQ0hJTEQodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19DSElMRCkKKyNkZWZpbmUgUlBDX0lTX1NXQVBQRVIodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TV0FQUEVSKQorI2RlZmluZSBSUENfRE9fUk9PVE9WRVJSSURFKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfUk9PVENSRURTKQorI2RlZmluZSBSUENfQVNTQVNTSU5BVEVEKHQpICgodCktPnRrX2ZsYWdzICYgUlBDX1RBU0tfS0lMTEVEKQorI2RlZmluZSBSUENfRE9fQ0FMTEJBQ0sodCkgKCh0KS0+dGtfY2FsbGJhY2sgIT0gTlVMTCkKKyNkZWZpbmUgUlBDX0lTX1NPRlQodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19TT0ZUKQorI2RlZmluZSBSUENfVEFTS19VTklOVEVSUlVQVElCTEUodCkgKCh0KS0+dGtfZmxhZ3MgJiBSUENfVEFTS19OT0lOVFIpCisKKyNkZWZpbmUgUlBDX1RBU0tfUlVOTklORyAwCisjZGVmaW5lIFJQQ19UQVNLX1FVRVVFRCAxCisjZGVmaW5lIFJQQ19UQVNLX1dBS0VVUCAyCisjZGVmaW5lIFJQQ19UQVNLX0hBU19USU1FUiAzCisjZGVmaW5lIFJQQ19UQVNLX0FDVElWRSA0CisKKyNkZWZpbmUgUlBDX0lTX1JVTk5JTkcodCkgKHRlc3RfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX3NldF9ydW5uaW5nKHQpIChzZXRfYml0KFJQQ19UQVNLX1JVTk5JTkcsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX3Rlc3RfYW5kX3NldF9ydW5uaW5nKHQpICAgKHRlc3RfYW5kX3NldF9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpKQorI2RlZmluZSBycGNfY2xlYXJfcnVubmluZyh0KSAgIGRvIHsgICBzbXBfbWJfX2JlZm9yZV9jbGVhcl9iaXQoKTsgICBjbGVhcl9iaXQoUlBDX1RBU0tfUlVOTklORywgJih0KS0+dGtfcnVuc3RhdGUpOyAgIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSUENfSVNfUVVFVUVEKHQpICh0ZXN0X2JpdChSUENfVEFTS19RVUVVRUQsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX3NldF9xdWV1ZWQodCkgKHNldF9iaXQoUlBDX1RBU0tfUVVFVUVELCAmKHQpLT50a19ydW5zdGF0ZSkpCisjZGVmaW5lIHJwY19jbGVhcl9xdWV1ZWQodCkgICBkbyB7ICAgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7ICAgY2xlYXJfYml0KFJQQ19UQVNLX1FVRVVFRCwgJih0KS0+dGtfcnVuc3RhdGUpOyAgIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBycGNfc3RhcnRfd2FrZXVwKHQpICAgKHRlc3RfYW5kX3NldF9iaXQoUlBDX1RBU0tfV0FLRVVQLCAmKHQpLT50a19ydW5zdGF0ZSkgPT0gMCkKKyNkZWZpbmUgcnBjX2ZpbmlzaF93YWtldXAodCkgICBkbyB7ICAgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7ICAgY2xlYXJfYml0KFJQQ19UQVNLX1dBS0VVUCwgJih0KS0+dGtfcnVuc3RhdGUpOyAgIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7ICAgfSB3aGlsZSAoMCkKKworI2RlZmluZSBSUENfSVNfQUNUSVZBVEVEKHQpICh0ZXN0X2JpdChSUENfVEFTS19BQ1RJVkUsICYodCktPnRrX3J1bnN0YXRlKSkKKyNkZWZpbmUgcnBjX3NldF9hY3RpdmUodCkgKHNldF9iaXQoUlBDX1RBU0tfQUNUSVZFLCAmKHQpLT50a19ydW5zdGF0ZSkpCisjZGVmaW5lIHJwY19jbGVhcl9hY3RpdmUodCkgICBkbyB7ICAgc21wX21iX19iZWZvcmVfY2xlYXJfYml0KCk7ICAgY2xlYXJfYml0KFJQQ19UQVNLX0FDVElWRSwgJih0KS0+dGtfcnVuc3RhdGUpOyAgIHNtcF9tYl9fYWZ0ZXJfY2xlYXJfYml0KCk7ICAgfSB3aGlsZSgwKQorCisjZGVmaW5lIFJQQ19QUklPUklUWV9MT1cgMAorI2RlZmluZSBSUENfUFJJT1JJVFlfTk9STUFMIDEKKyNkZWZpbmUgUlBDX1BSSU9SSVRZX0hJR0ggMgorI2RlZmluZSBSUENfTlJfUFJJT1JJVFkgKFJQQ19QUklPUklUWV9ISUdIKzEpCisKK3N0cnVjdCBycGNfd2FpdF9xdWV1ZSB7Cisgc3BpbmxvY2tfdCBsb2NrOworIHN0cnVjdCBsaXN0X2hlYWQgdGFza3NbUlBDX05SX1BSSU9SSVRZXTsKKyB1bnNpZ25lZCBsb25nIGNvb2tpZTsKKyB1bnNpZ25lZCBjaGFyIG1heHByaW9yaXR5OworIHVuc2lnbmVkIGNoYXIgcHJpb3JpdHk7CisgdW5zaWduZWQgY2hhciBjb3VudDsKKyB1bnNpZ25lZCBjaGFyIG5yOworIHVuc2lnbmVkIHNob3J0IHFsZW47CisjaWZkZWYgUlBDX0RFQlVHCisgY29uc3QgY2hhciAqIG5hbWU7CisjZW5kaWYKK307CisKKyNkZWZpbmUgUlBDX0JBVENIX0NPVU5UIDE2CisKKyNpZm5kZWYgUlBDX0RFQlVHCisjZGVmaW5lIFJQQ19XQUlUUV9JTklUKHZhcixxbmFtZSkgeyAgIC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VELCAgIC50YXNrcyA9IHsgICBbMF0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMF0pLCAgIFsxXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1sxXSksICAgWzJdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzJdKSwgICB9LCAgIH0KKyNlbHNlCisjZGVmaW5lIFJQQ19XQUlUUV9JTklUKHZhcixxbmFtZSkgeyAgIC5sb2NrID0gU1BJTl9MT0NLX1VOTE9DS0VELCAgIC50YXNrcyA9IHsgICBbMF0gPSBMSVNUX0hFQURfSU5JVCh2YXIudGFza3NbMF0pLCAgIFsxXSA9IExJU1RfSEVBRF9JTklUKHZhci50YXNrc1sxXSksICAgWzJdID0gTElTVF9IRUFEX0lOSVQodmFyLnRhc2tzWzJdKSwgICB9LCAgIC5uYW1lID0gcW5hbWUsICAgfQorI2VuZGlmCisjZGVmaW5lIFJQQ19XQUlUUSh2YXIscW5hbWUpIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSB2YXIgPSBSUENfV0FJVFFfSU5JVCh2YXIscW5hbWUpCisKKyNkZWZpbmUgUlBDX0lTX1BSSU9SSVRZKHEpICgocSktPm1heHByaW9yaXR5ID4gMCkKKworc3RydWN0IHJwY190YXNrICpycGNfbmV3X3Rhc2soc3RydWN0IHJwY19jbG50ICosIGludCBmbGFncywKKyBjb25zdCBzdHJ1Y3QgcnBjX2NhbGxfb3BzICpvcHMsIHZvaWQgKmRhdGEpOworc3RydWN0IHJwY190YXNrICpycGNfcnVuX3Rhc2soc3RydWN0IHJwY19jbG50ICpjbG50LCBpbnQgZmxhZ3MsCisgY29uc3Qgc3RydWN0IHJwY19jYWxsX29wcyAqb3BzLCB2b2lkICpkYXRhKTsKK3N0cnVjdCBycGNfdGFzayAqcnBjX25ld19jaGlsZChzdHJ1Y3QgcnBjX2NsbnQgKiwgc3RydWN0IHJwY190YXNrICpwYXJlbnQpOworCitzdHJ1Y3QgcnBjX3Rhc2sgKnJwY193YWtlX3VwX25leHQoc3RydWN0IHJwY193YWl0X3F1ZXVlICopOworCisjaWZkZWYgUlBDX0RFQlVHCisKKyNlbmRpZgorCisjaWZkZWYgUlBDX0RFQlVHCisjZW5kaWYKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdGF0cy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzZTczMzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N0YXRzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1NUQVRTX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19TVEFUU19ICisKKyNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CisKK3N0cnVjdCBycGNfc3RhdCB7Cisgc3RydWN0IHJwY19wcm9ncmFtICogcHJvZ3JhbTsKKworIHVuc2lnbmVkIGludCBuZXRjbnQsCisgbmV0dWRwY250LAorIG5ldHRjcGNudCwKKyBuZXR0Y3Bjb25uLAorIG5ldHJlY29ubjsKKyB1bnNpZ25lZCBpbnQgcnBjY250LAorIHJwY3JldHJhbnMsCisgcnBjYXV0aHJlZnJlc2gsCisgcnBjZ2FyYmFnZTsKK307CisKK3N0cnVjdCBzdmNfc3RhdCB7Cisgc3RydWN0IHN2Y19wcm9ncmFtICogcHJvZ3JhbTsKKworIHVuc2lnbmVkIGludCBuZXRjbnQsCisgbmV0dWRwY250LAorIG5ldHRjcGNudCwKKyBuZXR0Y3Bjb25uOworIHVuc2lnbmVkIGludCBycGNjbnQsCisgcnBjYmFkZm10LAorIHJwY2JhZGF1dGgsCisgcnBjYmFkY2xudDsKK307CisKKyNpZmRlZiBNT0RVTEUKKworI2VuZGlmCisKKyNkZWZpbmUgcHJvY19uZXRfcnBjIE5VTEwKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy9zdmMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2EwY2MyZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjLmgKQEAgLTAsMCArMSw4MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBTVU5SUENfU1ZDX0gKKyNkZWZpbmUgU1VOUlBDX1NWQ19ICisKKyNpbmNsdWRlIDxsaW51eC9pbi5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3N1bnJwYy94ZHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zdW5ycGMvc3ZjYXV0aC5oPgorI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tbS5oPgorCitzdHJ1Y3Qgc3ZjX3NlcnYgeworIHN0cnVjdCBsaXN0X2hlYWQgc3ZfdGhyZWFkczsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHN2X3NvY2tldHM7Cisgc3RydWN0IHN2Y19wcm9ncmFtICogc3ZfcHJvZ3JhbTsKKyBzdHJ1Y3Qgc3ZjX3N0YXQgKiBzdl9zdGF0czsKKyBzcGlubG9ja190IHN2X2xvY2s7CisgdW5zaWduZWQgaW50IHN2X25ydGhyZWFkczsKKyB1bnNpZ25lZCBpbnQgc3ZfYnVmc3o7CisgdW5zaWduZWQgaW50IHN2X3hkcnNpemU7CisKKyBzdHJ1Y3QgbGlzdF9oZWFkIHN2X3Blcm1zb2NrczsKKyBzdHJ1Y3QgbGlzdF9oZWFkIHN2X3RlbXBzb2NrczsKKyBpbnQgc3ZfdG1wY250OworCisgY2hhciAqIHN2X25hbWU7Cit9OworCisjZGVmaW5lIFJQQ1NWQ19NQVhQQVlMT0FEICg2NCoxMDI0dSkKKworI2RlZmluZSBSUENTVkNfTUFYUEFHRVMgKChSUENTVkNfTUFYUEFZTE9BRCtQQUdFX1NJWkUtMSkvUEFHRV9TSVpFICsgMikKKworc3RydWN0IHN2Y19wcm9ncmFtIHsKKyBzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiBwZ19uZXh0OworIHUzMiBwZ19wcm9nOworIHVuc2lnbmVkIGludCBwZ19sb3ZlcnM7CisgdW5zaWduZWQgaW50IHBnX2hpdmVyczsKKyB1bnNpZ25lZCBpbnQgcGdfbnZlcnM7Cisgc3RydWN0IHN2Y192ZXJzaW9uICoqIHBnX3ZlcnM7CisgY2hhciAqIHBnX25hbWU7CisgY2hhciAqIHBnX2NsYXNzOworIHN0cnVjdCBzdmNfc3RhdCAqIHBnX3N0YXRzOworIGludCAoKnBnX2F1dGhlbnRpY2F0ZSkoc3RydWN0IHN2Y19ycXN0ICopOworfTsKKworc3RydWN0IHN2Y192ZXJzaW9uIHsKKyB1MzIgdnNfdmVyczsKKyB1MzIgdnNfbnByb2M7Cisgc3RydWN0IHN2Y19wcm9jZWR1cmUgKiB2c19wcm9jOworIHUzMiB2c194ZHJzaXplOworCisgaW50ICgqdnNfZGlzcGF0Y2gpKHN0cnVjdCBzdmNfcnFzdCAqLCB1MzIgKik7Cit9OworCit0eXBlZGVmIGludCAoKnN2Y19wcm9jZnVuYykoc3RydWN0IHN2Y19ycXN0ICosIHZvaWQgKmFyZ3AsIHZvaWQgKnJlc3ApOworc3RydWN0IHN2Y19wcm9jZWR1cmUgeworIHN2Y19wcm9jZnVuYyBwY19mdW5jOworIGt4ZHJwcm9jX3QgcGNfZGVjb2RlOworIGt4ZHJwcm9jX3QgcGNfZW5jb2RlOworIGt4ZHJwcm9jX3QgcGNfcmVsZWFzZTsKKyB1bnNpZ25lZCBpbnQgcGNfYXJnc2l6ZTsKKyB1bnNpZ25lZCBpbnQgcGNfcmVzc2l6ZTsKKyB1bnNpZ25lZCBpbnQgcGNfY291bnQ7CisgdW5zaWduZWQgaW50IHBjX2NhY2hldHlwZTsKKyB1bnNpZ25lZCBpbnQgcGNfeGRycmVzc2l6ZTsKK307CisKK3R5cGVkZWYgdm9pZCAoKnN2Y190aHJlYWRfZm4pKHN0cnVjdCBzdmNfcnFzdCAqKTsKKworc3RydWN0IHN2Y19zZXJ2ICogc3ZjX2NyZWF0ZShzdHJ1Y3Qgc3ZjX3Byb2dyYW0gKiwgdW5zaWduZWQgaW50KTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N2Y2F1dGguaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvc3ZjYXV0aC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliNDE0ZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3N2Y2F1dGguaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfU1ZDQVVUSF9IXworI2RlZmluZSBfTElOVVhfU1VOUlBDX1NWQ0FVVEhfSF8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3RpbWVyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3RpbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZiNzhlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zdW5ycGMvdGltZXIuaApAQCAtMCwwICsxLDI0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9TVU5SUENfVElNRVJfSAorI2RlZmluZSBfTElOVVhfU1VOUlBDX1RJTUVSX0gKKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKworc3RydWN0IHJwY19ydHQgeworIHVuc2lnbmVkIGxvbmcgdGltZW87CisgdW5zaWduZWQgbG9uZyBzcnR0WzVdOworIHVuc2lnbmVkIGxvbmcgc2RydHRbNV07CisgaW50IG50aW1lb3V0c1s1XTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90eXBlcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy90eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlNTIwNTIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3R5cGVzLmgKQEAgLTAsMCArMSwyMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1VOUlBDX1RZUEVTX0hfCisjZGVmaW5lIF9MSU5VWF9TVU5SUENfVFlQRVNfSF8KKworI2luY2x1ZGUgPGxpbnV4L3RpbWVyLmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvbGlzdC5oPgorCisjZGVmaW5lIHNpZ25hbGxlZCgpIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hkci5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94ZHIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNTEzODQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94ZHIuaApAQCAtMCwwICsxLDE1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9TVU5SUENfWERSX0hfCisjZGVmaW5lIF9TVU5SUENfWERSX0hfCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94cHJ0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3VucnBjL3hwcnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDVhMjZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N1bnJwYy94cHJ0LmgKQEAgLTAsMCArMSwxNzIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NVTlJQQ19YUFJUX0gKKyNkZWZpbmUgX0xJTlVYX1NVTlJQQ19YUFJUX0gKKworI2luY2x1ZGUgPGxpbnV4L3Vpby5oPgorI2luY2x1ZGUgPGxpbnV4L3NvY2tldC5oPgorI2luY2x1ZGUgPGxpbnV4L2luLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3NjaGVkLmg+CisjaW5jbHVkZSA8bGludXgvc3VucnBjL3hkci5oPgorCisjZGVmaW5lIFJQQ19NSU5fU0xPVF9UQUJMRSAoMlUpCisjZGVmaW5lIFJQQ19ERUZfU0xPVF9UQUJMRSAoMTZVKQorI2RlZmluZSBSUENfTUFYX1NMT1RfVEFCTEUgKDEyOFUpCisKKyNkZWZpbmUgUlBDX0NBTExIRFJTSVpFIDYKKyNkZWZpbmUgUlBDX1JFUEhEUlNJWkUgNAorCisjZGVmaW5lIFJQQ19NSU5fUkVTVlBPUlQgKDFVKQorI2RlZmluZSBSUENfTUFYX1JFU1ZQT1JUICg2NTUzNVUpCisjZGVmaW5lIFJQQ19ERUZfTUlOX1JFU1ZQT1JUICg2NjVVKQorI2RlZmluZSBSUENfREVGX01BWF9SRVNWUE9SVCAoMTAyM1UpCisKK3N0cnVjdCBycGNfdGltZW91dCB7CisgdW5zaWduZWQgbG9uZyB0b19pbml0dmFsLAorIHRvX21heHZhbCwKKyB0b19pbmNyZW1lbnQ7CisgdW5zaWduZWQgaW50IHRvX3JldHJpZXM7CisgdW5zaWduZWQgY2hhciB0b19leHBvbmVudGlhbDsKK307CisKK3N0cnVjdCBycGNfdGFzazsKK3N0cnVjdCBycGNfeHBydDsKK3N0cnVjdCBzZXFfZmlsZTsKKworc3RydWN0IHJwY19ycXN0IHsKKworIHN0cnVjdCBycGNfeHBydCAqIHJxX3hwcnQ7Cisgc3RydWN0IHhkcl9idWYgcnFfc25kX2J1ZjsKKyBzdHJ1Y3QgeGRyX2J1ZiBycV9yY3ZfYnVmOworCisgc3RydWN0IHJwY190YXNrICogcnFfdGFzazsKKyBfX3UzMiBycV94aWQ7CisgaW50IHJxX2Nvbmc7CisgaW50IHJxX3JlY2VpdmVkOworIHUzMiBycV9zZXFubzsKKyBpbnQgcnFfZW5jX3BhZ2VzX251bTsKKyBzdHJ1Y3QgcGFnZSAqKnJxX2VuY19wYWdlczsKKyB2b2lkICgqcnFfcmVsZWFzZV9zbmRfYnVmKShzdHJ1Y3QgcnBjX3Jxc3QgKik7Cisgc3RydWN0IGxpc3RfaGVhZCBycV9saXN0OworCisgX191MzIgKiBycV9idWZmZXI7Cisgc2l6ZV90IHJxX2J1ZnNpemU7CisKKyBzdHJ1Y3QgeGRyX2J1ZiBycV9wcml2YXRlX2J1ZjsKKyB1bnNpZ25lZCBsb25nIHJxX21ham9ydGltZW87CisgdW5zaWduZWQgbG9uZyBycV90aW1lb3V0OworIHVuc2lnbmVkIGludCBycV9yZXRyaWVzOworCisgdTMyIHJxX2J5dGVzX3NlbnQ7CisKKyB1bnNpZ25lZCBsb25nIHJxX3h0aW1lOworIGludCBycV9udHJhbnM7Cit9OworI2RlZmluZSBycV9zdmVjIHJxX3NuZF9idWYuaGVhZAorI2RlZmluZSBycV9zbGVuIHJxX3NuZF9idWYubGVuCisKK3N0cnVjdCBycGNfeHBydF9vcHMgeworIHZvaWQgKCpzZXRfYnVmZmVyX3NpemUpKHN0cnVjdCBycGNfeHBydCAqeHBydCwgc2l6ZV90IHNuZHNpemUsIHNpemVfdCByY3ZzaXplKTsKKyBpbnQgKCpyZXNlcnZlX3hwcnQpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKnJlbGVhc2VfeHBydCkoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworIHZvaWQgKCpzZXRfcG9ydCkoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCB1bnNpZ25lZCBzaG9ydCBwb3J0KTsKKyB2b2lkICgqY29ubmVjdCkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyB2b2lkICogKCpidWZfYWxsb2MpKHN0cnVjdCBycGNfdGFzayAqdGFzaywgc2l6ZV90IHNpemUpOworIHZvaWQgKCpidWZfZnJlZSkoc3RydWN0IHJwY190YXNrICp0YXNrKTsKKyBpbnQgKCpzZW5kX3JlcXVlc3QpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKnNldF9yZXRyYW5zX3RpbWVvdXQpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKnRpbWVyKShzdHJ1Y3QgcnBjX3Rhc2sgKnRhc2spOworIHZvaWQgKCpyZWxlYXNlX3JlcXVlc3QpKHN0cnVjdCBycGNfdGFzayAqdGFzayk7Cisgdm9pZCAoKmNsb3NlKShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOworIHZvaWQgKCpkZXN0cm95KShzdHJ1Y3QgcnBjX3hwcnQgKnhwcnQpOworIHZvaWQgKCpwcmludF9zdGF0cykoc3RydWN0IHJwY194cHJ0ICp4cHJ0LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSk7Cit9OworCitzdHJ1Y3QgcnBjX3hwcnQgeworIHN0cnVjdCBycGNfeHBydF9vcHMgKiBvcHM7Cisgc3RydWN0IHNvY2tldCAqIHNvY2s7Cisgc3RydWN0IHNvY2sgKiBpbmV0OworCisgc3RydWN0IHJwY190aW1lb3V0IHRpbWVvdXQ7Cisgc3RydWN0IHNvY2thZGRyX2luIGFkZHI7CisgaW50IHByb3Q7CisKKyB1bnNpZ25lZCBsb25nIGNvbmc7CisgdW5zaWduZWQgbG9uZyBjd25kOworCisgc2l6ZV90IHJjdnNpemUsCisgc25kc2l6ZTsKKworIHNpemVfdCBtYXhfcGF5bG9hZDsKKyB1bnNpZ25lZCBpbnQgdHNoX3NpemU7CisKKyBzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgc2VuZGluZzsKKyBzdHJ1Y3QgcnBjX3dhaXRfcXVldWUgcmVzZW5kOworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSBwZW5kaW5nOworIHN0cnVjdCBycGNfd2FpdF9xdWV1ZSBiYWNrbG9nOworIHN0cnVjdCBsaXN0X2hlYWQgZnJlZTsKKyBzdHJ1Y3QgcnBjX3Jxc3QgKiBzbG90OworIHVuc2lnbmVkIGludCBtYXhfcmVxczsKKyB1bnNpZ25lZCBsb25nIHN0YXRlOworIHVuc2lnbmVkIGNoYXIgc2h1dGRvd24gOiAxLAorIHJlc3Zwb3J0IDogMTsKKworIF9fdTMyIHhpZDsKKworIHUzMiB0Y3BfcmVjbSwKKyB0Y3BfeGlkLAorIHRjcF9yZWNsZW4sCisgdGNwX29mZnNldDsKKyB1bnNpZ25lZCBsb25nIHRjcF9jb3BpZWQsCisgdGNwX2ZsYWdzOworCisgdW5zaWduZWQgbG9uZyBjb25uZWN0X3RpbWVvdXQsCisgYmluZF90aW1lb3V0LAorIHJlZXN0YWJsaXNoX3RpbWVvdXQ7Cisgc3RydWN0IHdvcmtfc3RydWN0IGNvbm5lY3Rfd29ya2VyOworIHVuc2lnbmVkIHNob3J0IHBvcnQ7CisKKyBzdHJ1Y3Qgd29ya19zdHJ1Y3QgdGFza19jbGVhbnVwOworIHN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworIHVuc2lnbmVkIGxvbmcgbGFzdF91c2VkLAorIGlkbGVfdGltZW91dDsKKworIHNwaW5sb2NrX3QgdHJhbnNwb3J0X2xvY2s7Cisgc3BpbmxvY2tfdCByZXNlcnZlX2xvY2s7Cisgc3RydWN0IHJwY190YXNrICogc25kX3Rhc2s7CisKKyBzdHJ1Y3QgbGlzdF9oZWFkIHJlY3Y7CisKKyBzdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgYmluZF9jb3VudCwKKyBjb25uZWN0X2NvdW50LAorIGNvbm5lY3Rfc3RhcnQsCisgY29ubmVjdF90aW1lLAorIHNlbmRzLAorIHJlY3ZzLAorIGJhZF94aWRzOworCisgdW5zaWduZWQgbG9uZyBsb25nIHJlcV91LAorIGJrbG9nX3U7CisgfSBzdGF0OworCisgdm9pZCAoKm9sZF9kYXRhX3JlYWR5KShzdHJ1Y3Qgc29jayAqLCBpbnQpOworIHZvaWQgKCpvbGRfc3RhdGVfY2hhbmdlKShzdHJ1Y3Qgc29jayAqKTsKKyB2b2lkICgqb2xkX3dyaXRlX3NwYWNlKShzdHJ1Y3Qgc29jayAqKTsKK307CisKKyNkZWZpbmUgWFBSVF9MQVNUX0ZSQUcgKDEgPDwgMCkKKyNkZWZpbmUgWFBSVF9DT1BZX1JFQ00gKDEgPDwgMSkKKyNkZWZpbmUgWFBSVF9DT1BZX1hJRCAoMSA8PCAyKQorI2RlZmluZSBYUFJUX0NPUFlfREFUQSAoMSA8PCAzKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zd2FwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dhcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjYzYmE1NTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3dhcC5oCkBAIC0wLDAgKzEsMzkgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1NXQVBfSAorI2RlZmluZSBfTElOVVhfU1dBUF9ICisKKyNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgorI2luY2x1ZGUgPGxpbnV4L2xpbmthZ2UuaD4KKyNpbmNsdWRlIDxsaW51eC9tbXpvbmUuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKworI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxhc20vcGFnZS5oPgorCisjZGVmaW5lIFNXQVBfRkxBR19QUkVGRVIgMHg4MDAwICAKKyNkZWZpbmUgU1dBUF9GTEFHX1BSSU9fTUFTSyAweDdmZmYKKyNkZWZpbmUgU1dBUF9GTEFHX1BSSU9fU0hJRlQgMAorCisjZGVmaW5lIE1BWF9TV0FQRklMRVNfU0hJRlQgNQorI2RlZmluZSBNQVhfU1dBUEZJTEVTICgxIDw8IE1BWF9TV0FQRklMRVNfU0hJRlQpCisKK3R5cGVkZWYgc3RydWN0IHsKKyB1bnNpZ25lZCBsb25nIHZhbDsKK30gc3dwX2VudHJ5X3Q7CisKK3N0cnVjdCByZWNsYWltX3N0YXRlIHsKKyB1bnNpZ25lZCBsb25nIHJlY2xhaW1lZF9zbGFiOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzY3RsLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzY3RsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI5ZTU2MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNjdGwuaApAQCAtMCwwICsxLDgyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfU1lTQ1RMX0gKKyNkZWZpbmUgX0xJTlVYX1NZU0NUTF9ICisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisKK3N0cnVjdCBmaWxlOworc3RydWN0IGNvbXBsZXRpb247CisKKyNkZWZpbmUgQ1RMX01BWE5BTUUgMTAgIAorCitzdHJ1Y3QgX19zeXNjdGxfYXJncyB7CisgaW50IF9fdXNlciAqbmFtZTsKKyBpbnQgbmxlbjsKKyB2b2lkIF9fdXNlciAqb2xkdmFsOworIHNpemVfdCBfX3VzZXIgKm9sZGxlbnA7Cisgdm9pZCBfX3VzZXIgKm5ld3ZhbDsKKyBzaXplX3QgbmV3bGVuOworIHVuc2lnbmVkIGxvbmcgX191bnVzZWRbNF07Cit9OworCitlbnVtCit7CisgQ1RMX0tFUk49MSwKKyBDVExfVk09MiwKKyBDVExfTkVUPTMsCisKKyBDVExfRlM9NSwKKyBDVExfREVCVUc9NiwKKyBDVExfREVWPTcsCisgQ1RMX0JVUz04LAorIENUTF9BQkk9OSwKKyBDVExfQ1BVPTEwCit9OworCitlbnVtCit7CisgQ1RMX0JVU19JU0E9MQorfTsKKworZW51bQoreworIElOT1RJRllfTUFYX1VTRVJfSU5TVEFOQ0VTPTEsCisgSU5PVElGWV9NQVhfVVNFUl9XQVRDSEVTPTIsCisgSU5PVElGWV9NQVhfUVVFVUVEX0VWRU5UUz0zCit9OworCitlbnVtCit7CisgS0VSTl9PU1RZUEU9MSwKKyBLRVJOX09TUkVMRUFTRT0yLAorIEtFUk5fT1NSRVY9MywKKyBLRVJOX1ZFUlNJT049NCwKKyBLRVJOX1NFQ1VSRU1BU0s9NSwKKyBLRVJOX1BST0Y9NiwKKyBLRVJOX05PREVOQU1FPTcsCisgS0VSTl9ET01BSU5OQU1FPTgsCisKKyBLRVJOX0NBUF9CU0VUPTE0LAorIEtFUk5fUEFOSUM9MTUsCisgS0VSTl9SRUFMUk9PVERFVj0xNiwKKworIEtFUk5fU1BBUkNfUkVCT09UPTIxLAorIEtFUk5fQ1RMQUxUREVMPTIyLAorIEtFUk5fUFJJTlRLPTIzLAorIEtFUk5fTkFNRVRSQU5TPTI0LAorIEtFUk5fUFBDX0hUQUJSRUNMQUlNPTI1LAorIEtFUk5fUFBDX1pFUk9QQUdFRD0yNiwKKyBLRVJOX1BQQ19QT1dFUlNBVkVfTkFQPTI3LAorIEtFUk5fTU9EUFJPQkU9MjgsCisgS0VSTl9TR19CSUdfQlVGRj0yOSwKKyBLRVJOX0FDQ1Q9MzAsCisgS0VSTl9QUENfTDJDUj0zMSwKKworIEtFUk5fUlRTSUdOUj0zMiwKKyBLRVJOX1JUU0lHTUFYPTMzLAorCisgS0VSTl9TSE1NQVg9MzQsCisgS0VSTl9NU0dNQVg9MzUsCisgS0VSTl9NU0dNTkI9MzYsCisgS0VSTl9NU0dQT09MPTM3LAorIEtFUk5fU1lTUlE9MzgsCisgS0VSTl9NQVhfVEhSRUFEUz0zOSwKKyBLRVJOX1JBTkRPTT00MCwKKyBLRVJOX1NITUFMTD00MSwKKyBLRVJOX01TR01OST00MiwKKyBLRVJOX1NFTT00MywKKyBLRVJOX1NQQVJDX1NUT1BfQT00NCwKKyBLRVJOX1NITU1OST00NSwKKyBLRVJOX09WRVJGTE9XVUlEPTQ2LAorIEtFUk5fT1ZFUkZMT1dHSUQ9NDcsCisgS0VSTl9TSE1QQVRIPTQ4LAorIEtFUk5fSE9UUExVRz00OSwKKyBLRVJOX0lFRUVfRU1VTEFUSU9OX1dBUk5JTkdTPTUwLAorIEtFUk5fUzM5MF9VU0VSX0RFQlVHX0xPR0dJTkc9NTEsCisgS0VSTl9DT1JFX1VTRVNfUElEPTUyLAorIEtFUk5fVEFJTlRFRD01MywKKyBLRVJOX0NBRFBJRD01NCwKKyBLRVJOX1BJRE1BWD01NSwKKyBLRVJOX0NPUkVfUEFUVEVSTj01NiwKKyBLRVJOX1BBTklDX09OX09PUFM9NTcsCisgS0VSTl9IUFBBX1BXUlNXPTU4LAorIEtFUk5fSFBQQV9VTkFMSUdORUQ9NTksCisgS0VSTl9QUklOVEtfUkFURUxJTUlUPTYwLAorIEtFUk5fUFJJTlRLX1JBVEVMSU1JVF9CVVJTVD02MSwKKyBLRVJOX1BUWT02MiwKKyBLRVJOX05HUk9VUFNfTUFYPTYzLAorIEtFUk5fU1BBUkNfU0NPTlNfUFdST0ZGPTY0LAorIEtFUk5fSFpfVElNRVI9NjUsCisgS0VSTl9VTktOT1dOX05NSV9QQU5JQz02NiwKKyBLRVJOX0JPT1RMT0FERVJfVFlQRT02NywKKyBLRVJOX1JBTkRPTUlaRT02OCwKKyBLRVJOX1NFVFVJRF9EVU1QQUJMRT02OSwKKyBLRVJOX1NQSU5fUkVUUlk9NzAsCisgS0VSTl9BQ1BJX1ZJREVPX0ZMQUdTPTcxLAorIEtFUk5fSUE2NF9VTkFMSUdORUQ9NzIsCisgS0VSTl9DT01QQVRfTE9HPTczLAorIEtFUk5fTUFYX0xPQ0tfREVQVEg9NzQsCit9OworCitlbnVtCit7CisgVk1fVU5VU0VEMT0xLAorIFZNX1VOVVNFRDI9MiwKKyBWTV9VTlVTRUQzPTMsCisgVk1fVU5VU0VEND00LAorIFZNX09WRVJDT01NSVRfTUVNT1JZPTUsCisgVk1fVU5VU0VENT02LAorIFZNX1VOVVNFRDc9NywKKyBWTV9VTlVTRUQ4PTgsCisgVk1fVU5VU0VEOT05LAorIFZNX1BBR0VfQ0xVU1RFUj0xMCwKKyBWTV9ESVJUWV9CQUNLR1JPVU5EPTExLAorIFZNX0RJUlRZX1JBVElPPTEyLAorIFZNX0RJUlRZX1dCX0NTPTEzLAorIFZNX0RJUlRZX0VYUElSRV9DUz0xNCwKKyBWTV9OUl9QREZMVVNIX1RIUkVBRFM9MTUsCisgVk1fT1ZFUkNPTU1JVF9SQVRJTz0xNiwKKyBWTV9QQUdFQlVGPTE3LAorIFZNX0hVR0VUTEJfUEFHRVM9MTgsCisgVk1fU1dBUFBJTkVTUz0xOSwKKyBWTV9MT1dNRU1fUkVTRVJWRV9SQVRJTz0yMCwKKyBWTV9NSU5fRlJFRV9LQllURVM9MjEsCisgVk1fTUFYX01BUF9DT1VOVD0yMiwKKyBWTV9MQVBUT1BfTU9ERT0yMywKKyBWTV9CTE9DS19EVU1QPTI0LAorIFZNX0hVR0VUTEJfR1JPVVA9MjUsCisgVk1fVkZTX0NBQ0hFX1BSRVNTVVJFPTI2LAorIFZNX0xFR0FDWV9WQV9MQVlPVVQ9MjcsCisgVk1fU1dBUF9UT0tFTl9USU1FT1VUPTI4LAorIFZNX0RST1BfUEFHRUNBQ0hFPTI5LAorIFZNX1BFUkNQVV9QQUdFTElTVF9GUkFDVElPTj0zMCwKKyBWTV9aT05FX1JFQ0xBSU1fTU9ERT0zMSwKKyBWTV9NSU5fVU5NQVBQRUQ9MzIsCisgVk1fUEFOSUNfT05fT09NPTMzLAorIFZNX1ZEU09fRU5BQkxFRD0zNCwKK307CisKK2VudW0KK3sKKyBORVRfQ09SRT0xLAorIE5FVF9FVEhFUj0yLAorIE5FVF84MDI9MywKKyBORVRfVU5JWD00LAorIE5FVF9JUFY0PTUsCisgTkVUX0lQWD02LAorIE5FVF9BVEFMSz03LAorIE5FVF9ORVRST009OCwKKyBORVRfQVgyNT05LAorIE5FVF9CUklER0U9MTAsCisgTkVUX1JPU0U9MTEsCisgTkVUX0lQVjY9MTIsCisgTkVUX1gyNT0xMywKKyBORVRfVFI9MTQsCisgTkVUX0RFQ05FVD0xNSwKKyBORVRfRUNPTkVUPTE2LAorIE5FVF9TQ1RQPTE3LAorIE5FVF9MTEM9MTgsCisgTkVUX05FVEZJTFRFUj0xOSwKKyBORVRfRENDUD0yMCwKK307CisKK2VudW0KK3sKKyBSQU5ET01fUE9PTFNJWkU9MSwKKyBSQU5ET01fRU5UUk9QWV9DT1VOVD0yLAorIFJBTkRPTV9SRUFEX1RIUkVTSD0zLAorIFJBTkRPTV9XUklURV9USFJFU0g9NCwKKyBSQU5ET01fQk9PVF9JRD01LAorIFJBTkRPTV9VVUlEPTYKK307CisKK2VudW0KK3sKKyBQVFlfTUFYPTEsCisgUFRZX05SPTIKK307CisKK2VudW0KK3sKKyBCVVNfSVNBX01FTV9CQVNFPTEsCisgQlVTX0lTQV9QT1JUX0JBU0U9MiwKKyBCVVNfSVNBX1BPUlRfU0hJRlQ9MworfTsKKworZW51bQoreworIE5FVF9DT1JFX1dNRU1fTUFYPTEsCisgTkVUX0NPUkVfUk1FTV9NQVg9MiwKKyBORVRfQ09SRV9XTUVNX0RFRkFVTFQ9MywKKyBORVRfQ09SRV9STUVNX0RFRkFVTFQ9NCwKKworIE5FVF9DT1JFX01BWF9CQUNLTE9HPTYsCisgTkVUX0NPUkVfRkFTVFJPVVRFPTcsCisgTkVUX0NPUkVfTVNHX0NPU1Q9OCwKKyBORVRfQ09SRV9NU0dfQlVSU1Q9OSwKKyBORVRfQ09SRV9PUFRNRU1fTUFYPTEwLAorIE5FVF9DT1JFX0hPVF9MSVNUX0xFTkdUSD0xMSwKKyBORVRfQ09SRV9ESVZFUlRfVkVSU0lPTj0xMiwKKyBORVRfQ09SRV9OT19DT05HX1RIUkVTSD0xMywKKyBORVRfQ09SRV9OT19DT05HPTE0LAorIE5FVF9DT1JFX0xPX0NPTkc9MTUsCisgTkVUX0NPUkVfTU9EX0NPTkc9MTYsCisgTkVUX0NPUkVfREVWX1dFSUdIVD0xNywKKyBORVRfQ09SRV9TT01BWENPTk49MTgsCisgTkVUX0NPUkVfQlVER0VUPTE5LAorIE5FVF9DT1JFX0FFVkVOVF9FVElNRT0yMCwKKyBORVRfQ09SRV9BRVZFTlRfUlNFUVRIPTIxLAorfTsKKworZW51bQoreworIE5FVF9VTklYX0RFU1RST1lfREVMQVk9MSwKKyBORVRfVU5JWF9ERUxFVEVfREVMQVk9MiwKKyBORVRfVU5JWF9NQVhfREdSQU1fUUxFTj0zLAorfTsKKworZW51bQoreworIE5FVF9ORl9DT05OVFJBQ0tfTUFYPTEsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9TWU5fU0VOVD0yLAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1Y9MywKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX0VTVEFCTElTSEVEPTQsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9GSU5fV0FJVD01LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVD02LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTEFTVF9BQ0s9NywKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9USU1FT1VUX1RJTUVfV0FJVD04LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0U9OSwKKyBORVRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUPTEwLAorIE5FVF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVRfU1RSRUFNPTExLAorIE5FVF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VUPTEyLAorIE5FVF9ORl9DT05OVFJBQ0tfR0VORVJJQ19USU1FT1VUPTEzLAorIE5FVF9ORl9DT05OVFJBQ0tfQlVDS0VUUz0xNCwKKyBORVRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElEPTE1LAorIE5FVF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfTUFYX1JFVFJBTlM9MTYsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfTE9PU0U9MTcsCisgTkVUX05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTD0xOCwKKyBORVRfTkZfQ09OTlRSQUNLX1RDUF9NQVhfUkVUUkFOUz0xOSwKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DTE9TRUQ9MjAsCisgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX1dBSVQ9MjEsCisgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX0VDSE9FRD0yMiwKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9FU1RBQkxJU0hFRD0yMywKKyBORVRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5UPTI0LAorIE5FVF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX1JFQ0Q9MjUsCisgTkVUX05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fQUNLX1NFTlQ9MjYsCisgTkVUX05GX0NPTk5UUkFDS19DT1VOVD0yNywKKyBORVRfTkZfQ09OTlRSQUNLX0lDTVBWNl9USU1FT1VUPTI4LAorIE5FVF9ORl9DT05OVFJBQ0tfRlJBRzZfVElNRU9VVD0yOSwKKyBORVRfTkZfQ09OTlRSQUNLX0ZSQUc2X0xPV19USFJFU0g9MzAsCisgTkVUX05GX0NPTk5UUkFDS19GUkFHNl9ISUdIX1RIUkVTSD0zMSwKKyBORVRfTkZfQ09OTlRSQUNLX0NIRUNLU1VNPTMyLAorfTsKKworZW51bQoreworCisgTkVUX0lQVjRfRk9SV0FSRD04LAorIE5FVF9JUFY0X0RZTkFERFI9OSwKKworIE5FVF9JUFY0X0NPTkY9MTYsCisgTkVUX0lQVjRfTkVJR0g9MTcsCisgTkVUX0lQVjRfUk9VVEU9MTgsCisgTkVUX0lQVjRfRklCX0hBU0g9MTksCisgTkVUX0lQVjRfTkVURklMVEVSPTIwLAorCisgTkVUX0lQVjRfVENQX1RJTUVTVEFNUFM9MzMsCisgTkVUX0lQVjRfVENQX1dJTkRPV19TQ0FMSU5HPTM0LAorIE5FVF9JUFY0X1RDUF9TQUNLPTM1LAorIE5FVF9JUFY0X1RDUF9SRVRSQU5TX0NPTExBUFNFPTM2LAorIE5FVF9JUFY0X0RFRkFVTFRfVFRMPTM3LAorIE5FVF9JUFY0X0FVVE9DT05GSUc9MzgsCisgTkVUX0lQVjRfTk9fUE1UVV9ESVNDPTM5LAorIE5FVF9JUFY0X1RDUF9TWU5fUkVUUklFUz00MCwKKyBORVRfSVBWNF9JUEZSQUdfSElHSF9USFJFU0g9NDEsCisgTkVUX0lQVjRfSVBGUkFHX0xPV19USFJFU0g9NDIsCisgTkVUX0lQVjRfSVBGUkFHX1RJTUU9NDMsCisgTkVUX0lQVjRfVENQX01BWF9LQV9QUk9CRVM9NDQsCisgTkVUX0lQVjRfVENQX0tFRVBBTElWRV9USU1FPTQ1LAorIE5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfUFJPQkVTPTQ2LAorIE5FVF9JUFY0X1RDUF9SRVRSSUVTMT00NywKKyBORVRfSVBWNF9UQ1BfUkVUUklFUzI9NDgsCisgTkVUX0lQVjRfVENQX0ZJTl9USU1FT1VUPTQ5LAorIE5FVF9JUFY0X0lQX01BU1FfREVCVUc9NTAsCisgTkVUX1RDUF9TWU5DT09LSUVTPTUxLAorIE5FVF9UQ1BfU1REVVJHPTUyLAorIE5FVF9UQ1BfUkZDMTMzNz01MywKKyBORVRfVENQX1NZTl9UQUlMRFJPUD01NCwKKyBORVRfVENQX01BWF9TWU5fQkFDS0xPRz01NSwKKyBORVRfSVBWNF9MT0NBTF9QT1JUX1JBTkdFPTU2LAorIE5FVF9JUFY0X0lDTVBfRUNIT19JR05PUkVfQUxMPTU3LAorIE5FVF9JUFY0X0lDTVBfRUNIT19JR05PUkVfQlJPQURDQVNUUz01OCwKKyBORVRfSVBWNF9JQ01QX1NPVVJDRVFVRU5DSF9SQVRFPTU5LAorIE5FVF9JUFY0X0lDTVBfREVTVFVOUkVBQ0hfUkFURT02MCwKKyBORVRfSVBWNF9JQ01QX1RJTUVFWENFRURfUkFURT02MSwKKyBORVRfSVBWNF9JQ01QX1BBUkFNUFJPQl9SQVRFPTYyLAorIE5FVF9JUFY0X0lDTVBfRUNIT1JFUExZX1JBVEU9NjMsCisgTkVUX0lQVjRfSUNNUF9JR05PUkVfQk9HVVNfRVJST1JfUkVTUE9OU0VTPTY0LAorIE5FVF9JUFY0X0lHTVBfTUFYX01FTUJFUlNISVBTPTY1LAorIE5FVF9UQ1BfVFdfUkVDWUNMRT02NiwKKyBORVRfSVBWNF9BTFdBWVNfREVGUkFHPTY3LAorIE5FVF9JUFY0X1RDUF9LRUVQQUxJVkVfSU5UVkw9NjgsCisgTkVUX0lQVjRfSU5FVF9QRUVSX1RIUkVTSE9MRD02OSwKKyBORVRfSVBWNF9JTkVUX1BFRVJfTUlOVFRMPTcwLAorIE5FVF9JUFY0X0lORVRfUEVFUl9NQVhUVEw9NzEsCisgTkVUX0lQVjRfSU5FVF9QRUVSX0dDX01JTlRJTUU9NzIsCisgTkVUX0lQVjRfSU5FVF9QRUVSX0dDX01BWFRJTUU9NzMsCisgTkVUX1RDUF9PUlBIQU5fUkVUUklFUz03NCwKKyBORVRfVENQX0FCT1JUX09OX09WRVJGTE9XPTc1LAorIE5FVF9UQ1BfU1lOQUNLX1JFVFJJRVM9NzYsCisgTkVUX1RDUF9NQVhfT1JQSEFOUz03NywKKyBORVRfVENQX01BWF9UV19CVUNLRVRTPTc4LAorIE5FVF9UQ1BfRkFDSz03OSwKKyBORVRfVENQX1JFT1JERVJJTkc9ODAsCisgTkVUX1RDUF9FQ049ODEsCisgTkVUX1RDUF9EU0FDSz04MiwKKyBORVRfVENQX01FTT04MywKKyBORVRfVENQX1dNRU09ODQsCisgTkVUX1RDUF9STUVNPTg1LAorIE5FVF9UQ1BfQVBQX1dJTj04NiwKKyBORVRfVENQX0FEVl9XSU5fU0NBTEU9ODcsCisgTkVUX0lQVjRfTk9OTE9DQUxfQklORD04OCwKKyBORVRfSVBWNF9JQ01QX1JBVEVMSU1JVD04OSwKKyBORVRfSVBWNF9JQ01QX1JBVEVNQVNLPTkwLAorIE5FVF9UQ1BfVFdfUkVVU0U9OTEsCisgTkVUX1RDUF9GUlRPPTkyLAorIE5FVF9UQ1BfTE9XX0xBVEVOQ1k9OTMsCisgTkVUX0lQVjRfSVBGUkFHX1NFQ1JFVF9JTlRFUlZBTD05NCwKKyBORVRfSVBWNF9JR01QX01BWF9NU0Y9OTYsCisgTkVUX1RDUF9OT19NRVRSSUNTX1NBVkU9OTcsCisgTkVUX1RDUF9ERUZBVUxUX1dJTl9TQ0FMRT0xMDUsCisgTkVUX1RDUF9NT0RFUkFURV9SQ1ZCVUY9MTA2LAorIE5FVF9UQ1BfVFNPX1dJTl9ESVZJU09SPTEwNywKKyBORVRfVENQX0JJQ19CRVRBPTEwOCwKKyBORVRfSVBWNF9JQ01QX0VSUk9SU19VU0VfSU5CT1VORF9JRkFERFI9MTA5LAorIE5FVF9UQ1BfQ09OR19DT05UUk9MPTExMCwKKyBORVRfVENQX0FCQz0xMTEsCisgTkVUX0lQVjRfSVBGUkFHX01BWF9ESVNUPTExMiwKKyBORVRfVENQX01UVV9QUk9CSU5HPTExMywKKyBORVRfVENQX0JBU0VfTVNTPTExNCwKKyBORVRfSVBWNF9UQ1BfV09SS0FST1VORF9TSUdORURfV0lORE9XUz0xMTUsCisgTkVUX1RDUF9ETUFfQ09QWUJSRUFLPTExNiwKKyBORVRfVENQX1NMT1dfU1RBUlRfQUZURVJfSURMRT0xMTcsCit9OworCitlbnVtIHsKKyBORVRfSVBWNF9ST1VURV9GTFVTSD0xLAorIE5FVF9JUFY0X1JPVVRFX01JTl9ERUxBWT0yLAorIE5FVF9JUFY0X1JPVVRFX01BWF9ERUxBWT0zLAorIE5FVF9JUFY0X1JPVVRFX0dDX1RIUkVTSD00LAorIE5FVF9JUFY0X1JPVVRFX01BWF9TSVpFPTUsCisgTkVUX0lQVjRfUk9VVEVfR0NfTUlOX0lOVEVSVkFMPTYsCisgTkVUX0lQVjRfUk9VVEVfR0NfVElNRU9VVD03LAorIE5FVF9JUFY0X1JPVVRFX0dDX0lOVEVSVkFMPTgsCisgTkVUX0lQVjRfUk9VVEVfUkVESVJFQ1RfTE9BRD05LAorIE5FVF9JUFY0X1JPVVRFX1JFRElSRUNUX05VTUJFUj0xMCwKKyBORVRfSVBWNF9ST1VURV9SRURJUkVDVF9TSUxFTkNFPTExLAorIE5FVF9JUFY0X1JPVVRFX0VSUk9SX0NPU1Q9MTIsCisgTkVUX0lQVjRfUk9VVEVfRVJST1JfQlVSU1Q9MTMsCisgTkVUX0lQVjRfUk9VVEVfR0NfRUxBU1RJQ0lUWT0xNCwKKyBORVRfSVBWNF9ST1VURV9NVFVfRVhQSVJFUz0xNSwKKyBORVRfSVBWNF9ST1VURV9NSU5fUE1UVT0xNiwKKyBORVRfSVBWNF9ST1VURV9NSU5fQURWTVNTPTE3LAorIE5FVF9JUFY0X1JPVVRFX1NFQ1JFVF9JTlRFUlZBTD0xOCwKKyBORVRfSVBWNF9ST1VURV9HQ19NSU5fSU5URVJWQUxfTVM9MTksCit9OworCitlbnVtCit7CisgTkVUX1BST1RPX0NPTkZfQUxMPS0yLAorIE5FVF9QUk9UT19DT05GX0RFRkFVTFQ9LTMKKworfTsKKworZW51bQoreworIE5FVF9JUFY0X0NPTkZfRk9SV0FSRElORz0xLAorIE5FVF9JUFY0X0NPTkZfTUNfRk9SV0FSRElORz0yLAorIE5FVF9JUFY0X0NPTkZfUFJPWFlfQVJQPTMsCisgTkVUX0lQVjRfQ09ORl9BQ0NFUFRfUkVESVJFQ1RTPTQsCisgTkVUX0lQVjRfQ09ORl9TRUNVUkVfUkVESVJFQ1RTPTUsCisgTkVUX0lQVjRfQ09ORl9TRU5EX1JFRElSRUNUUz02LAorIE5FVF9JUFY0X0NPTkZfU0hBUkVEX01FRElBPTcsCisgTkVUX0lQVjRfQ09ORl9SUF9GSUxURVI9OCwKKyBORVRfSVBWNF9DT05GX0FDQ0VQVF9TT1VSQ0VfUk9VVEU9OSwKKyBORVRfSVBWNF9DT05GX0JPT1RQX1JFTEFZPTEwLAorIE5FVF9JUFY0X0NPTkZfTE9HX01BUlRJQU5TPTExLAorIE5FVF9JUFY0X0NPTkZfVEFHPTEyLAorIE5FVF9JUFY0X0NPTkZfQVJQRklMVEVSPTEzLAorIE5FVF9JUFY0X0NPTkZfTUVESVVNX0lEPTE0LAorIE5FVF9JUFY0X0NPTkZfTk9YRlJNPTE1LAorIE5FVF9JUFY0X0NPTkZfTk9QT0xJQ1k9MTYsCisgTkVUX0lQVjRfQ09ORl9GT1JDRV9JR01QX1ZFUlNJT049MTcsCisgTkVUX0lQVjRfQ09ORl9BUlBfQU5OT1VOQ0U9MTgsCisgTkVUX0lQVjRfQ09ORl9BUlBfSUdOT1JFPTE5LAorIE5FVF9JUFY0X0NPTkZfUFJPTU9URV9TRUNPTkRBUklFUz0yMCwKKyBORVRfSVBWNF9DT05GX0FSUF9BQ0NFUFQ9MjEsCisgX19ORVRfSVBWNF9DT05GX01BWAorfTsKKworZW51bQoreworIE5FVF9JUFY0X05GX0NPTk5UUkFDS19NQVg9MSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1NFTlQ9MiwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfU1lOX1JFQ1Y9MywKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRVNUQUJMSVNIRUQ9NCwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfRklOX1dBSVQ9NSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0VfV0FJVD02LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9MQVNUX0FDSz03LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9USU1FX1dBSVQ9OCwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX1RJTUVPVVRfQ0xPU0U9OSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVURQX1RJTUVPVVQ9MTAsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1VEUF9USU1FT1VUX1NUUkVBTT0xMSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfSUNNUF9USU1FT1VUPTEyLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19HRU5FUklDX1RJTUVPVVQ9MTMsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0JVQ0tFVFM9MTQsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX0xPR19JTlZBTElEPTE1LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfVElNRU9VVF9NQVhfUkVUUkFOUz0xNiwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX0xPT1NFPTE3LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19UQ1BfQkVfTElCRVJBTD0xOCwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfVENQX01BWF9SRVRSQU5TPTE5LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ0xPU0VEPTIwLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfQ09PS0lFX1dBSVQ9MjEsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9DT09LSUVfRUNIT0VEPTIyLAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfRVNUQUJMSVNIRUQ9MjMsCisgTkVUX0lQVjRfTkZfQ09OTlRSQUNLX1NDVFBfVElNRU9VVF9TSFVURE9XTl9TRU5UPTI0LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19TQ1RQX1RJTUVPVVRfU0hVVERPV05fUkVDRD0yNSwKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfU0NUUF9USU1FT1VUX1NIVVRET1dOX0FDS19TRU5UPTI2LAorIE5FVF9JUFY0X05GX0NPTk5UUkFDS19DT1VOVD0yNywKKyBORVRfSVBWNF9ORl9DT05OVFJBQ0tfQ0hFQ0tTVU09MjgsCit9OworCitlbnVtIHsKKyBORVRfSVBWNl9DT05GPTE2LAorIE5FVF9JUFY2X05FSUdIPTE3LAorIE5FVF9JUFY2X1JPVVRFPTE4LAorIE5FVF9JUFY2X0lDTVA9MTksCisgTkVUX0lQVjZfQklORFY2T05MWT0yMCwKKyBORVRfSVBWNl9JUDZGUkFHX0hJR0hfVEhSRVNIPTIxLAorIE5FVF9JUFY2X0lQNkZSQUdfTE9XX1RIUkVTSD0yMiwKKyBORVRfSVBWNl9JUDZGUkFHX1RJTUU9MjMsCisgTkVUX0lQVjZfSVA2RlJBR19TRUNSRVRfSU5URVJWQUw9MjQsCisgTkVUX0lQVjZfTUxEX01BWF9NU0Y9MjUsCit9OworCitlbnVtIHsKKyBORVRfSVBWNl9ST1VURV9GTFVTSD0xLAorIE5FVF9JUFY2X1JPVVRFX0dDX1RIUkVTSD0yLAorIE5FVF9JUFY2X1JPVVRFX01BWF9TSVpFPTMsCisgTkVUX0lQVjZfUk9VVEVfR0NfTUlOX0lOVEVSVkFMPTQsCisgTkVUX0lQVjZfUk9VVEVfR0NfVElNRU9VVD01LAorIE5FVF9JUFY2X1JPVVRFX0dDX0lOVEVSVkFMPTYsCisgTkVUX0lQVjZfUk9VVEVfR0NfRUxBU1RJQ0lUWT03LAorIE5FVF9JUFY2X1JPVVRFX01UVV9FWFBJUkVTPTgsCisgTkVUX0lQVjZfUk9VVEVfTUlOX0FEVk1TUz05LAorIE5FVF9JUFY2X1JPVVRFX0dDX01JTl9JTlRFUlZBTF9NUz0xMAorfTsKKworZW51bSB7CisgTkVUX0lQVjZfRk9SV0FSRElORz0xLAorIE5FVF9JUFY2X0hPUF9MSU1JVD0yLAorIE5FVF9JUFY2X01UVT0zLAorIE5FVF9JUFY2X0FDQ0VQVF9SQT00LAorIE5FVF9JUFY2X0FDQ0VQVF9SRURJUkVDVFM9NSwKKyBORVRfSVBWNl9BVVRPQ09ORj02LAorIE5FVF9JUFY2X0RBRF9UUkFOU01JVFM9NywKKyBORVRfSVBWNl9SVFJfU09MSUNJVFM9OCwKKyBORVRfSVBWNl9SVFJfU09MSUNJVF9JTlRFUlZBTD05LAorIE5FVF9JUFY2X1JUUl9TT0xJQ0lUX0RFTEFZPTEwLAorIE5FVF9JUFY2X1VTRV9URU1QQUREUj0xMSwKKyBORVRfSVBWNl9URU1QX1ZBTElEX0xGVD0xMiwKKyBORVRfSVBWNl9URU1QX1BSRUZFUkVEX0xGVD0xMywKKyBORVRfSVBWNl9SRUdFTl9NQVhfUkVUUlk9MTQsCisgTkVUX0lQVjZfTUFYX0RFU1lOQ19GQUNUT1I9MTUsCisgTkVUX0lQVjZfTUFYX0FERFJFU1NFUz0xNiwKKyBORVRfSVBWNl9GT1JDRV9NTERfVkVSU0lPTj0xNywKKyBORVRfSVBWNl9BQ0NFUFRfUkFfREVGUlRSPTE4LAorIE5FVF9JUFY2X0FDQ0VQVF9SQV9QSU5GTz0xOSwKKyBORVRfSVBWNl9BQ0NFUFRfUkFfUlRSX1BSRUY9MjAsCisgTkVUX0lQVjZfUlRSX1BST0JFX0lOVEVSVkFMPTIxLAorIE5FVF9JUFY2X0FDQ0VQVF9SQV9SVF9JTkZPX01BWF9QTEVOPTIyLAorIF9fTkVUX0lQVjZfTUFYCit9OworCitlbnVtIHsKKyBORVRfSVBWNl9JQ01QX1JBVEVMSU1JVD0xCit9OworCitlbnVtIHsKKyBORVRfTkVJR0hfTUNBU1RfU09MSUNJVD0xLAorIE5FVF9ORUlHSF9VQ0FTVF9TT0xJQ0lUPTIsCisgTkVUX05FSUdIX0FQUF9TT0xJQ0lUPTMsCisgTkVUX05FSUdIX1JFVFJBTlNfVElNRT00LAorIE5FVF9ORUlHSF9SRUFDSEFCTEVfVElNRT01LAorIE5FVF9ORUlHSF9ERUxBWV9QUk9CRV9USU1FPTYsCisgTkVUX05FSUdIX0dDX1NUQUxFX1RJTUU9NywKKyBORVRfTkVJR0hfVU5SRVNfUUxFTj04LAorIE5FVF9ORUlHSF9QUk9YWV9RTEVOPTksCisgTkVUX05FSUdIX0FOWUNBU1RfREVMQVk9MTAsCisgTkVUX05FSUdIX1BST1hZX0RFTEFZPTExLAorIE5FVF9ORUlHSF9MT0NLVElNRT0xMiwKKyBORVRfTkVJR0hfR0NfSU5URVJWQUw9MTMsCisgTkVUX05FSUdIX0dDX1RIUkVTSDE9MTQsCisgTkVUX05FSUdIX0dDX1RIUkVTSDI9MTUsCisgTkVUX05FSUdIX0dDX1RIUkVTSDM9MTYsCisgTkVUX05FSUdIX1JFVFJBTlNfVElNRV9NUz0xNywKKyBORVRfTkVJR0hfUkVBQ0hBQkxFX1RJTUVfTVM9MTgsCisgX19ORVRfTkVJR0hfTUFYCit9OworCitlbnVtIHsKKyBORVRfRENDUF9ERUZBVUxUPTEsCit9OworCitlbnVtIHsKKyBORVRfRENDUF9ERUZBVUxUX1NFUV9XSU5ET1cgPSAxLAorIE5FVF9EQ0NQX0RFRkFVTFRfUlhfQ0NJRCA9IDIsCisgTkVUX0RDQ1BfREVGQVVMVF9UWF9DQ0lEID0gMywKKyBORVRfRENDUF9ERUZBVUxUX0FDS19SQVRJTyA9IDQsCisgTkVUX0RDQ1BfREVGQVVMVF9TRU5EX0FDS1ZFQyA9IDUsCisgTkVUX0RDQ1BfREVGQVVMVF9TRU5EX05EUCA9IDYsCit9OworCitlbnVtIHsKKyBORVRfSVBYX1BQUk9QX0JST0FEQ0FTVElORz0xLAorIE5FVF9JUFhfRk9SV0FSRElORz0yCit9OworCitlbnVtIHsKKyBORVRfTExDMj0xLAorIE5FVF9MTENfU1RBVElPTj0yLAorfTsKKworZW51bSB7CisgTkVUX0xMQzJfVElNRU9VVD0xLAorfTsKKworZW51bSB7CisgTkVUX0xMQ19TVEFUSU9OX0FDS19USU1FT1VUPTEsCit9OworCitlbnVtIHsKKyBORVRfTExDMl9BQ0tfVElNRU9VVD0xLAorIE5FVF9MTEMyX1BfVElNRU9VVD0yLAorIE5FVF9MTEMyX1JFSl9USU1FT1VUPTMsCisgTkVUX0xMQzJfQlVTWV9USU1FT1VUPTQsCit9OworCitlbnVtIHsKKyBORVRfQVRBTEtfQUFSUF9FWFBJUllfVElNRT0xLAorIE5FVF9BVEFMS19BQVJQX1RJQ0tfVElNRT0yLAorIE5FVF9BVEFMS19BQVJQX1JFVFJBTlNNSVRfTElNSVQ9MywKKyBORVRfQVRBTEtfQUFSUF9SRVNPTFZFX1RJTUU9NAorfTsKKworZW51bSB7CisgTkVUX05FVFJPTV9ERUZBVUxUX1BBVEhfUVVBTElUWT0xLAorIE5FVF9ORVRST01fT0JTT0xFU0NFTkNFX0NPVU5UX0lOSVRJQUxJU0VSPTIsCisgTkVUX05FVFJPTV9ORVRXT1JLX1RUTF9JTklUSUFMSVNFUj0zLAorIE5FVF9ORVRST01fVFJBTlNQT1JUX1RJTUVPVVQ9NCwKKyBORVRfTkVUUk9NX1RSQU5TUE9SVF9NQVhJTVVNX1RSSUVTPTUsCisgTkVUX05FVFJPTV9UUkFOU1BPUlRfQUNLTk9XTEVER0VfREVMQVk9NiwKKyBORVRfTkVUUk9NX1RSQU5TUE9SVF9CVVNZX0RFTEFZPTcsCisgTkVUX05FVFJPTV9UUkFOU1BPUlRfUkVRVUVTVEVEX1dJTkRPV19TSVpFPTgsCisgTkVUX05FVFJPTV9UUkFOU1BPUlRfTk9fQUNUSVZJVFlfVElNRU9VVD05LAorIE5FVF9ORVRST01fUk9VVElOR19DT05UUk9MPTEwLAorIE5FVF9ORVRST01fTElOS19GQUlMU19DT1VOVD0xMSwKKyBORVRfTkVUUk9NX1JFU0VUPTEyCit9OworCitlbnVtIHsKKyBORVRfQVgyNV9JUF9ERUZBVUxUX01PREU9MSwKKyBORVRfQVgyNV9ERUZBVUxUX01PREU9MiwKKyBORVRfQVgyNV9CQUNLT0ZGX1RZUEU9MywKKyBORVRfQVgyNV9DT05ORUNUX01PREU9NCwKKyBORVRfQVgyNV9TVEFOREFSRF9XSU5ET1c9NSwKKyBORVRfQVgyNV9FWFRFTkRFRF9XSU5ET1c9NiwKKyBORVRfQVgyNV9UMV9USU1FT1VUPTcsCisgTkVUX0FYMjVfVDJfVElNRU9VVD04LAorIE5FVF9BWDI1X1QzX1RJTUVPVVQ9OSwKKyBORVRfQVgyNV9JRExFX1RJTUVPVVQ9MTAsCisgTkVUX0FYMjVfTjI9MTEsCisgTkVUX0FYMjVfUEFDTEVOPTEyLAorIE5FVF9BWDI1X1BST1RPQ09MPTEzLAorIE5FVF9BWDI1X0RBTUFfU0xBVkVfVElNRU9VVD0xNAorfTsKKworZW51bSB7CisgTkVUX1JPU0VfUkVTVEFSVF9SRVFVRVNUX1RJTUVPVVQ9MSwKKyBORVRfUk9TRV9DQUxMX1JFUVVFU1RfVElNRU9VVD0yLAorIE5FVF9ST1NFX1JFU0VUX1JFUVVFU1RfVElNRU9VVD0zLAorIE5FVF9ST1NFX0NMRUFSX1JFUVVFU1RfVElNRU9VVD00LAorIE5FVF9ST1NFX0FDS19IT0xEX0JBQ0tfVElNRU9VVD01LAorIE5FVF9ST1NFX1JPVVRJTkdfQ09OVFJPTD02LAorIE5FVF9ST1NFX0xJTktfRkFJTF9USU1FT1VUPTcsCisgTkVUX1JPU0VfTUFYX1ZDUz04LAorIE5FVF9ST1NFX1dJTkRPV19TSVpFPTksCisgTkVUX1JPU0VfTk9fQUNUSVZJVFlfVElNRU9VVD0xMAorfTsKKworZW51bSB7CisgTkVUX1gyNV9SRVNUQVJUX1JFUVVFU1RfVElNRU9VVD0xLAorIE5FVF9YMjVfQ0FMTF9SRVFVRVNUX1RJTUVPVVQ9MiwKKyBORVRfWDI1X1JFU0VUX1JFUVVFU1RfVElNRU9VVD0zLAorIE5FVF9YMjVfQ0xFQVJfUkVRVUVTVF9USU1FT1VUPTQsCisgTkVUX1gyNV9BQ0tfSE9MRF9CQUNLX1RJTUVPVVQ9NQorfTsKKworZW51bQoreworIE5FVF9UUl9SSUZfVElNRU9VVD0xCit9OworCitlbnVtIHsKKyBORVRfREVDTkVUX05PREVfVFlQRSA9IDEsCisgTkVUX0RFQ05FVF9OT0RFX0FERFJFU1MgPSAyLAorIE5FVF9ERUNORVRfTk9ERV9OQU1FID0gMywKKyBORVRfREVDTkVUX0RFRkFVTFRfREVWSUNFID0gNCwKKyBORVRfREVDTkVUX1RJTUVfV0FJVCA9IDUsCisgTkVUX0RFQ05FVF9ETl9DT1VOVCA9IDYsCisgTkVUX0RFQ05FVF9ESV9DT1VOVCA9IDcsCisgTkVUX0RFQ05FVF9EUl9DT1VOVCA9IDgsCisgTkVUX0RFQ05FVF9EU1RfR0NfSU5URVJWQUwgPSA5LAorIE5FVF9ERUNORVRfQ09ORiA9IDEwLAorIE5FVF9ERUNORVRfTk9fRkNfTUFYX0NXTkQgPSAxMSwKKyBORVRfREVDTkVUX01FTSA9IDEyLAorIE5FVF9ERUNORVRfUk1FTSA9IDEzLAorIE5FVF9ERUNORVRfV01FTSA9IDE0LAorIE5FVF9ERUNORVRfREVCVUdfTEVWRUwgPSAyNTUKK307CisKK2VudW0geworIE5FVF9ERUNORVRfQ09ORl9MT09QQkFDSyA9IC0yLAorIE5FVF9ERUNORVRfQ09ORl9ERENNUCA9IC0zLAorIE5FVF9ERUNORVRfQ09ORl9QUFAgPSAtNCwKKyBORVRfREVDTkVUX0NPTkZfWDI1ID0gLTUsCisgTkVUX0RFQ05FVF9DT05GX0dSRSA9IC02LAorIE5FVF9ERUNORVRfQ09ORl9FVEhFUiA9IC03CisKK307CisKK2VudW0geworIE5FVF9ERUNORVRfQ09ORl9ERVZfUFJJT1JJVFkgPSAxLAorIE5FVF9ERUNORVRfQ09ORl9ERVZfVDEgPSAyLAorIE5FVF9ERUNORVRfQ09ORl9ERVZfVDIgPSAzLAorIE5FVF9ERUNORVRfQ09ORl9ERVZfVDMgPSA0LAorIE5FVF9ERUNORVRfQ09ORl9ERVZfRk9SV0FSRElORyA9IDUsCisgTkVUX0RFQ05FVF9DT05GX0RFVl9CTEtTSVpFID0gNiwKKyBORVRfREVDTkVUX0NPTkZfREVWX1NUQVRFID0gNworfTsKKworZW51bSB7CisgTkVUX1NDVFBfUlRPX0lOSVRJQUwgPSAxLAorIE5FVF9TQ1RQX1JUT19NSU4gPSAyLAorIE5FVF9TQ1RQX1JUT19NQVggPSAzLAorIE5FVF9TQ1RQX1JUT19BTFBIQSA9IDQsCisgTkVUX1NDVFBfUlRPX0JFVEEgPSA1LAorIE5FVF9TQ1RQX1ZBTElEX0NPT0tJRV9MSUZFID0gNiwKKyBORVRfU0NUUF9BU1NPQ0lBVElPTl9NQVhfUkVUUkFOUyA9IDcsCisgTkVUX1NDVFBfUEFUSF9NQVhfUkVUUkFOUyA9IDgsCisgTkVUX1NDVFBfTUFYX0lOSVRfUkVUUkFOU01JVFMgPSA5LAorIE5FVF9TQ1RQX0hCX0lOVEVSVkFMID0gMTAsCisgTkVUX1NDVFBfUFJFU0VSVkVfRU5BQkxFID0gMTEsCisgTkVUX1NDVFBfTUFYX0JVUlNUID0gMTIsCisgTkVUX1NDVFBfQURESVBfRU5BQkxFID0gMTMsCisgTkVUX1NDVFBfUFJTQ1RQX0VOQUJMRSA9IDE0LAorIE5FVF9TQ1RQX1NOREJVRl9QT0xJQ1kgPSAxNSwKKyBORVRfU0NUUF9TQUNLX1RJTUVPVVQgPSAxNiwKKyBORVRfU0NUUF9SQ1ZCVUZfUE9MSUNZID0gMTcsCit9OworCitlbnVtIHsKKyBORVRfQlJJREdFX05GX0NBTExfQVJQVEFCTEVTID0gMSwKKyBORVRfQlJJREdFX05GX0NBTExfSVBUQUJMRVMgPSAyLAorIE5FVF9CUklER0VfTkZfQ0FMTF9JUDZUQUJMRVMgPSAzLAorIE5FVF9CUklER0VfTkZfRklMVEVSX1ZMQU5fVEFHR0VEID0gNCwKK307CisKK2VudW0KK3sKKyBGU19OUklOT0RFPTEsCisgRlNfU1RBVElOT0RFPTIsCisgRlNfTUFYSU5PREU9MywKKyBGU19OUkRRVU9UPTQsCisgRlNfTUFYRFFVT1Q9NSwKKyBGU19OUkZJTEU9NiwKKyBGU19NQVhGSUxFPTcsCisgRlNfREVOVFJZPTgsCisgRlNfTlJTVVBFUj05LAorIEZTX01BWFNVUEVSPTEwLAorIEZTX09WRVJGTE9XVUlEPTExLAorIEZTX09WRVJGTE9XR0lEPTEyLAorIEZTX0xFQVNFUz0xMywKKyBGU19ESVJfTk9USUZZPTE0LAorIEZTX0xFQVNFX1RJTUU9MTUsCisgRlNfRFFTVEFUUz0xNiwKKyBGU19YRlM9MTcsCisgRlNfQUlPX05SPTE4LAorIEZTX0FJT19NQVhfTlI9MTksCisgRlNfSU5PVElGWT0yMCwKK307CisKK2VudW0geworIEZTX0RRX0xPT0tVUFMgPSAxLAorIEZTX0RRX0RST1BTID0gMiwKKyBGU19EUV9SRUFEUyA9IDMsCisgRlNfRFFfV1JJVEVTID0gNCwKKyBGU19EUV9DQUNIRV9ISVRTID0gNSwKKyBGU19EUV9BTExPQ0FURUQgPSA2LAorIEZTX0RRX0ZSRUUgPSA3LAorIEZTX0RRX1NZTkNTID0gOCwKKyBGU19EUV9XQVJOSU5HUyA9IDksCit9OworCitlbnVtIHsKKyBERVZfQ0RST009MSwKKyBERVZfSFdNT049MiwKKyBERVZfUEFSUE9SVD0zLAorIERFVl9SQUlEPTQsCisgREVWX01BQ19ISUQ9NSwKKyBERVZfU0NTST02LAorIERFVl9JUE1JPTcsCit9OworCitlbnVtIHsKKyBERVZfQ0RST01fSU5GTz0xLAorIERFVl9DRFJPTV9BVVRPQ0xPU0U9MiwKKyBERVZfQ0RST01fQVVUT0VKRUNUPTMsCisgREVWX0NEUk9NX0RFQlVHPTQsCisgREVWX0NEUk9NX0xPQ0s9NSwKKyBERVZfQ0RST01fQ0hFQ0tfTUVESUE9NgorfTsKKworZW51bSB7CisgREVWX1BBUlBPUlRfREVGQVVMVD0tMworfTsKKworZW51bSB7CisgREVWX1JBSURfU1BFRURfTElNSVRfTUlOPTEsCisgREVWX1JBSURfU1BFRURfTElNSVRfTUFYPTIKK307CisKK2VudW0geworIERFVl9QQVJQT1JUX0RFRkFVTFRfVElNRVNMSUNFPTEsCisgREVWX1BBUlBPUlRfREVGQVVMVF9TUElOVElNRT0yCit9OworCitlbnVtIHsKKyBERVZfUEFSUE9SVF9TUElOVElNRT0xLAorIERFVl9QQVJQT1JUX0JBU0VfQUREUj0yLAorIERFVl9QQVJQT1JUX0lSUT0zLAorIERFVl9QQVJQT1JUX0RNQT00LAorIERFVl9QQVJQT1JUX01PREVTPTUsCisgREVWX1BBUlBPUlRfREVWSUNFUz02LAorIERFVl9QQVJQT1JUX0FVVE9QUk9CRT0xNgorfTsKKworZW51bSB7CisgREVWX1BBUlBPUlRfREVWSUNFU19BQ1RJVkU9LTMsCit9OworCitlbnVtIHsKKyBERVZfUEFSUE9SVF9ERVZJQ0VfVElNRVNMSUNFPTEsCit9OworCitlbnVtIHsKKyBERVZfTUFDX0hJRF9LRVlCT0FSRF9TRU5EU19MSU5VWF9LRVlDT0RFUz0xLAorIERFVl9NQUNfSElEX0tFWUJPQVJEX0xPQ0tfS0VZQ09ERVM9MiwKKyBERVZfTUFDX0hJRF9NT1VTRV9CVVRUT05fRU1VTEFUSU9OPTMsCisgREVWX01BQ19ISURfTU9VU0VfQlVUVE9OMl9LRVlDT0RFPTQsCisgREVWX01BQ19ISURfTU9VU0VfQlVUVE9OM19LRVlDT0RFPTUsCisgREVWX01BQ19ISURfQURCX01PVVNFX1NFTkRTX0tFWUNPREVTPTYKK307CisKK2VudW0geworIERFVl9TQ1NJX0xPR0dJTkdfTEVWRUw9MSwKK307CisKK2VudW0geworIERFVl9JUE1JX1BPV0VST0ZGX1BPV0VSQ1lDTEU9MSwKK307CisKK2VudW0KK3sKKyBBQklfREVGSEFORExFUl9DT0ZGPTEsCisgQUJJX0RFRkhBTkRMRVJfRUxGPTIsCisgQUJJX0RFRkhBTkRMRVJfTENBTEw3PTMsCisgQUJJX0RFRkhBTkRMRVJfTElCQ1NPPTQsCisgQUJJX1RSQUNFPTUsCisgQUJJX0ZBS0VfVVRTTkFNRT02LAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzZGV2LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvc3lzZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmFlMmIyNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNkZXYuaApAQCAtMCwwICsxLDYwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9TWVNERVZfSF8KKyNkZWZpbmUgX1NZU0RFVl9IXworCisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BtLmg+CisKK3N0cnVjdCBzeXNfZGV2aWNlOworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzIHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGRyaXZlcnM7CisKKyBpbnQgKCpzaHV0ZG93bikoc3RydWN0IHN5c19kZXZpY2UgKik7CisgaW50ICgqc3VzcGVuZCkoc3RydWN0IHN5c19kZXZpY2UgKiwgcG1fbWVzc2FnZV90IHN0YXRlKTsKKyBpbnQgKCpyZXN1bWUpKHN0cnVjdCBzeXNfZGV2aWNlICopOworIHN0cnVjdCBrc2V0IGtzZXQ7Cit9OworCitzdHJ1Y3Qgc3lzZGV2X2NsYXNzX2F0dHJpYnV0ZSB7Cisgc3RydWN0IGF0dHJpYnV0ZSBhdHRyOworIHNzaXplX3QgKCpzaG93KShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosIGNoYXIgKik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qgc3lzZGV2X2NsYXNzICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgU1lTREVWX0NMQVNTX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IHN5c2Rldl9jbGFzc19hdHRyaWJ1dGUgYXR0cl8jI19uYW1lID0geyAgIC5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlIH0sICAgLnNob3cgPSBfc2hvdywgICAuc3RvcmUgPSBfc3RvcmUsICB9OworCitzdHJ1Y3Qgc3lzZGV2X2RyaXZlciB7Cisgc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKyBpbnQgKCphZGQpKHN0cnVjdCBzeXNfZGV2aWNlICopOworIGludCAoKnJlbW92ZSkoc3RydWN0IHN5c19kZXZpY2UgKik7CisgaW50ICgqc2h1dGRvd24pKHN0cnVjdCBzeXNfZGV2aWNlICopOworIGludCAoKnN1c3BlbmQpKHN0cnVjdCBzeXNfZGV2aWNlICosIHBtX21lc3NhZ2VfdCBzdGF0ZSk7CisgaW50ICgqcmVzdW1lKShzdHJ1Y3Qgc3lzX2RldmljZSAqKTsKK307CisKK3N0cnVjdCBzeXNfZGV2aWNlIHsKKyB1MzIgaWQ7Cisgc3RydWN0IHN5c2Rldl9jbGFzcyAqIGNsczsKKyBzdHJ1Y3Qga29iamVjdCBrb2JqOworfTsKKworc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgeworIHN0cnVjdCBhdHRyaWJ1dGUgYXR0cjsKKyBzc2l6ZV90ICgqc2hvdykoc3RydWN0IHN5c19kZXZpY2UgKiwgY2hhciAqKTsKKyBzc2l6ZV90ICgqc3RvcmUpKHN0cnVjdCBzeXNfZGV2aWNlICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKK307CisKKyNkZWZpbmUgU1lTREVWX0FUVFIoX25hbWUsX21vZGUsX3Nob3csX3N0b3JlKSAgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgYXR0cl8jI19uYW1lID0geyAgIC5hdHRyID0gey5uYW1lID0gX19zdHJpbmdpZnkoX25hbWUpLCAubW9kZSA9IF9tb2RlIH0sICAgLnNob3cgPSBfc2hvdywgICAuc3RvcmUgPSBfc3RvcmUsICB9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNmcy5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3N5c2ZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDBiNWY1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC9zeXNmcy5oCkBAIC0wLDAgKzEsNzYgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1NZU0ZTX0hfCisjZGVmaW5lIF9TWVNGU19IXworCisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorCitzdHJ1Y3Qga29iamVjdDsKK3N0cnVjdCBtb2R1bGU7CisKK3N0cnVjdCBhdHRyaWJ1dGUgeworIGNvbnN0IGNoYXIgKiBuYW1lOworIHN0cnVjdCBtb2R1bGUgKiBvd25lcjsKKyBtb2RlX3QgbW9kZTsKK307CisKK3N0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgeworIGNvbnN0IGNoYXIgKiBuYW1lOworIHN0cnVjdCBhdHRyaWJ1dGUgKiogYXR0cnM7Cit9OworCisjZGVmaW5lIF9fQVRUUihfbmFtZSxfbW9kZSxfc2hvdyxfc3RvcmUpIHsgICAuYXR0ciA9IHsubmFtZSA9IF9fc3RyaW5naWZ5KF9uYW1lKSwgLm1vZGUgPSBfbW9kZSwgLm93bmVyID0gVEhJU19NT0RVTEUgfSwgICAuc2hvdyA9IF9zaG93LCAgIC5zdG9yZSA9IF9zdG9yZSwgIH0KKworI2RlZmluZSBfX0FUVFJfUk8oX25hbWUpIHsgICAuYXR0ciA9IHsgLm5hbWUgPSBfX3N0cmluZ2lmeShfbmFtZSksIC5tb2RlID0gMDQ0NCwgLm93bmVyID0gVEhJU19NT0RVTEUgfSwgICAuc2hvdyA9IF9uYW1lIyNfc2hvdywgIH0KKworI2RlZmluZSBfX0FUVFJfTlVMTCB7IC5hdHRyID0geyAubmFtZSA9IE5VTEwgfSB9CisKKyNkZWZpbmUgYXR0cl9uYW1lKF9hdHRyKSAoX2F0dHIpLmF0dHIubmFtZQorCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKK3N0cnVjdCBiaW5fYXR0cmlidXRlIHsKKyBzdHJ1Y3QgYXR0cmlidXRlIGF0dHI7Cisgc2l6ZV90IHNpemU7Cisgdm9pZCAqcHJpdmF0ZTsKKyBzc2l6ZV90ICgqcmVhZCkoc3RydWN0IGtvYmplY3QgKiwgY2hhciAqLCBsb2ZmX3QsIHNpemVfdCk7Cisgc3NpemVfdCAoKndyaXRlKShzdHJ1Y3Qga29iamVjdCAqLCBjaGFyICosIGxvZmZfdCwgc2l6ZV90KTsKKyBpbnQgKCptbWFwKShzdHJ1Y3Qga29iamVjdCAqLCBzdHJ1Y3QgYmluX2F0dHJpYnV0ZSAqYXR0ciwKKyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7Cit9OworCitzdHJ1Y3Qgc3lzZnNfb3BzIHsKKyBzc2l6ZV90ICgqc2hvdykoc3RydWN0IGtvYmplY3QgKiwgc3RydWN0IGF0dHJpYnV0ZSAqLGNoYXIgKik7Cisgc3NpemVfdCAoKnN0b3JlKShzdHJ1Y3Qga29iamVjdCAqLHN0cnVjdCBhdHRyaWJ1dGUgKixjb25zdCBjaGFyICosIHNpemVfdCk7Cit9OworCitzdHJ1Y3Qgc3lzZnNfZGlyZW50IHsKKyBhdG9taWNfdCBzX2NvdW50OworIHN0cnVjdCBsaXN0X2hlYWQgc19zaWJsaW5nOworIHN0cnVjdCBsaXN0X2hlYWQgc19jaGlsZHJlbjsKKyB2b2lkICogc19lbGVtZW50OworIGludCBzX3R5cGU7CisgdW1vZGVfdCBzX21vZGU7Cisgc3RydWN0IGRlbnRyeSAqIHNfZGVudHJ5OworIHN0cnVjdCBpYXR0ciAqIHNfaWF0dHI7CisgYXRvbWljX3Qgc19ldmVudDsKK307CisKKyNkZWZpbmUgU1lTRlNfUk9PVCAweDAwMDEKKyNkZWZpbmUgU1lTRlNfRElSIDB4MDAwMgorI2RlZmluZSBTWVNGU19LT0JKX0FUVFIgMHgwMDA0CisjZGVmaW5lIFNZU0ZTX0tPQkpfQklOX0FUVFIgMHgwMDA4CisjZGVmaW5lIFNZU0ZTX0tPQkpfREVWSUNFIDB4MDAxMAorI2RlZmluZSBTWVNGU19LT0JKX0xJTksgMHgwMDIwCisjZGVmaW5lIFNZU0ZTX05PVF9QSU5ORUQgKFNZU0ZTX0tPQkpfQVRUUiB8IFNZU0ZTX0tPQkpfQklOX0FUVFIgfCBTWVNGU19LT0JKX0RFVklDRSB8IFNZU0ZTX0tPQkpfTElOSykKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U4YWU0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHMuaApAQCAtMCwwICsxLDcyIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UQVNLU1RBVFNfSAorI2RlZmluZSBfTElOVVhfVEFTS1NUQVRTX0gKKworI2RlZmluZSBUQVNLU1RBVFNfVkVSU0lPTiAxCisKK3N0cnVjdCB0YXNrc3RhdHMgeworCisgX191MTYgdmVyc2lvbjsKKyBfX3UxNiBwYWRkaW5nWzNdOworCisgX191NjQgY3B1X2NvdW50OworIF9fdTY0IGNwdV9kZWxheV90b3RhbDsKKworIF9fdTY0IGJsa2lvX2NvdW50OworIF9fdTY0IGJsa2lvX2RlbGF5X3RvdGFsOworCisgX191NjQgc3dhcGluX2NvdW50OworIF9fdTY0IHN3YXBpbl9kZWxheV90b3RhbDsKKworIF9fdTY0IGNwdV9ydW5fcmVhbF90b3RhbDsKKworIF9fdTY0IGNwdV9ydW5fdmlydHVhbF90b3RhbDsKKworfTsKKworZW51bSB7CisgVEFTS1NUQVRTX0NNRF9VTlNQRUMgPSAwLAorIFRBU0tTVEFUU19DTURfR0VULAorIFRBU0tTVEFUU19DTURfTkVXLAorIF9fVEFTS1NUQVRTX0NNRF9NQVgsCit9OworCisjZGVmaW5lIFRBU0tTVEFUU19DTURfTUFYIChfX1RBU0tTVEFUU19DTURfTUFYIC0gMSkKKworZW51bSB7CisgVEFTS1NUQVRTX1RZUEVfVU5TUEVDID0gMCwKKyBUQVNLU1RBVFNfVFlQRV9QSUQsCisgVEFTS1NUQVRTX1RZUEVfVEdJRCwKKyBUQVNLU1RBVFNfVFlQRV9TVEFUUywKKyBUQVNLU1RBVFNfVFlQRV9BR0dSX1BJRCwKKyBUQVNLU1RBVFNfVFlQRV9BR0dSX1RHSUQsCisgX19UQVNLU1RBVFNfVFlQRV9NQVgsCit9OworCisjZGVmaW5lIFRBU0tTVEFUU19UWVBFX01BWCAoX19UQVNLU1RBVFNfVFlQRV9NQVggLSAxKQorCitlbnVtIHsKKyBUQVNLU1RBVFNfQ01EX0FUVFJfVU5TUEVDID0gMCwKKyBUQVNLU1RBVFNfQ01EX0FUVFJfUElELAorIFRBU0tTVEFUU19DTURfQVRUUl9UR0lELAorIFRBU0tTVEFUU19DTURfQVRUUl9SRUdJU1RFUl9DUFVNQVNLLAorIFRBU0tTVEFUU19DTURfQVRUUl9ERVJFR0lTVEVSX0NQVU1BU0ssCisgX19UQVNLU1RBVFNfQ01EX0FUVFJfTUFYLAorfTsKKworI2RlZmluZSBUQVNLU1RBVFNfQ01EX0FUVFJfTUFYIChfX1RBU0tTVEFUU19DTURfQVRUUl9NQVggLSAxKQorCisjZGVmaW5lIFRBU0tTVEFUU19HRU5MX05BTUUgIlRBU0tTVEFUUyIKKyNkZWZpbmUgVEFTS1NUQVRTX0dFTkxfVkVSU0lPTiAweDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzX2tlcm4uaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90YXNrc3RhdHNfa2Vybi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5NDg0MTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGFza3N0YXRzX2tlcm4uaApAQCAtMCwwICsxLDE5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9UQVNLU1RBVFNfS0VSTl9ICisjZGVmaW5lIF9MSU5VWF9UQVNLU1RBVFNfS0VSTl9ICisKKyNpbmNsdWRlIDxsaW51eC90YXNrc3RhdHMuaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPG5ldC9nZW5ldGxpbmsuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGNwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGNwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2ZhOTVmOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90Y3AuaApAQCAtMCwwICsxLDE0NyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVENQX0gKKyNkZWZpbmUgX0xJTlVYX1RDUF9ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KKworc3RydWN0IHRjcGhkciB7CisgX191MTYgc291cmNlOworIF9fdTE2IGRlc3Q7CisgX191MzIgc2VxOworIF9fdTMyIGFja19zZXE7CisjaWZkZWYgX19MSVRUTEVfRU5ESUFOX0JJVEZJRUxECisgX191MTYgcmVzMTo0LAorIGRvZmY6NCwKKyBmaW46MSwKKyBzeW46MSwKKyByc3Q6MSwKKyBwc2g6MSwKKyBhY2s6MSwKKyB1cmc6MSwKKyBlY2U6MSwKKyBjd3I6MTsKKyNlbGlmIGRlZmluZWQoX19CSUdfRU5ESUFOX0JJVEZJRUxEKQorIF9fdTE2IGRvZmY6NCwKKyByZXMxOjQsCisgY3dyOjEsCisgZWNlOjEsCisgdXJnOjEsCisgYWNrOjEsCisgcHNoOjEsCisgcnN0OjEsCisgc3luOjEsCisgZmluOjE7CisjZWxzZQorI2Vycm9yICJBZGp1c3QgeW91ciA8YXNtL2J5dGVvcmRlci5oPiBkZWZpbmVzIgorI2VuZGlmCisgX191MTYgd2luZG93OworIF9fdTE2IGNoZWNrOworIF9fdTE2IHVyZ19wdHI7Cit9OworCit1bmlvbiB0Y3Bfd29yZF9oZHIgeworIHN0cnVjdCB0Y3BoZHIgaGRyOworIF9fdTMyIHdvcmRzWzVdOworfTsKKworI2RlZmluZSB0Y3BfZmxhZ193b3JkKHRwKSAoICgodW5pb24gdGNwX3dvcmRfaGRyICopKHRwKSktPndvcmRzIFszXSkgCisKK2VudW0geworIFRDUF9GTEFHX0NXUiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDgwMDAwMCksCisgVENQX0ZMQUdfRUNFID0gX19jb25zdGFudF9odG9ubCgweDAwNDAwMDAwKSwKKyBUQ1BfRkxBR19VUkcgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAyMDAwMDApLAorIFRDUF9GTEFHX0FDSyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDEwMDAwMCksCisgVENQX0ZMQUdfUFNIID0gX19jb25zdGFudF9odG9ubCgweDAwMDgwMDAwKSwKKyBUQ1BfRkxBR19SU1QgPSBfX2NvbnN0YW50X2h0b25sKDB4MDAwNDAwMDApLAorIFRDUF9GTEFHX1NZTiA9IF9fY29uc3RhbnRfaHRvbmwoMHgwMDAyMDAwMCksCisgVENQX0ZMQUdfRklOID0gX19jb25zdGFudF9odG9ubCgweDAwMDEwMDAwKSwKKyBUQ1BfUkVTRVJWRURfQklUUyA9IF9fY29uc3RhbnRfaHRvbmwoMHgwRjAwMDAwMCksCisgVENQX0RBVEFfT0ZGU0VUID0gX19jb25zdGFudF9odG9ubCgweEYwMDAwMDAwKQorfTsKKworI2RlZmluZSBUQ1BfTk9ERUxBWSAxICAKKyNkZWZpbmUgVENQX01BWFNFRyAyICAKKyNkZWZpbmUgVENQX0NPUksgMyAgCisjZGVmaW5lIFRDUF9LRUVQSURMRSA0ICAKKyNkZWZpbmUgVENQX0tFRVBJTlRWTCA1ICAKKyNkZWZpbmUgVENQX0tFRVBDTlQgNiAgCisjZGVmaW5lIFRDUF9TWU5DTlQgNyAgCisjZGVmaW5lIFRDUF9MSU5HRVIyIDggIAorI2RlZmluZSBUQ1BfREVGRVJfQUNDRVBUIDkgIAorI2RlZmluZSBUQ1BfV0lORE9XX0NMQU1QIDEwICAKKyNkZWZpbmUgVENQX0lORk8gMTEgIAorI2RlZmluZSBUQ1BfUVVJQ0tBQ0sgMTIgIAorI2RlZmluZSBUQ1BfQ09OR0VTVElPTiAxMyAgCisKKyNkZWZpbmUgVENQSV9PUFRfVElNRVNUQU1QUyAxCisjZGVmaW5lIFRDUElfT1BUX1NBQ0sgMgorI2RlZmluZSBUQ1BJX09QVF9XU0NBTEUgNAorI2RlZmluZSBUQ1BJX09QVF9FQ04gOAorCitlbnVtIHRjcF9jYV9zdGF0ZQoreworIFRDUF9DQV9PcGVuID0gMCwKKyNkZWZpbmUgVENQRl9DQV9PcGVuICgxPDxUQ1BfQ0FfT3BlbikKKyBUQ1BfQ0FfRGlzb3JkZXIgPSAxLAorI2RlZmluZSBUQ1BGX0NBX0Rpc29yZGVyICgxPDxUQ1BfQ0FfRGlzb3JkZXIpCisgVENQX0NBX0NXUiA9IDIsCisjZGVmaW5lIFRDUEZfQ0FfQ1dSICgxPDxUQ1BfQ0FfQ1dSKQorIFRDUF9DQV9SZWNvdmVyeSA9IDMsCisjZGVmaW5lIFRDUEZfQ0FfUmVjb3ZlcnkgKDE8PFRDUF9DQV9SZWNvdmVyeSkKKyBUQ1BfQ0FfTG9zcyA9IDQKKyNkZWZpbmUgVENQRl9DQV9Mb3NzICgxPDxUQ1BfQ0FfTG9zcykKK307CisKK3N0cnVjdCB0Y3BfaW5mbworeworIF9fdTggdGNwaV9zdGF0ZTsKKyBfX3U4IHRjcGlfY2Ffc3RhdGU7CisgX191OCB0Y3BpX3JldHJhbnNtaXRzOworIF9fdTggdGNwaV9wcm9iZXM7CisgX191OCB0Y3BpX2JhY2tvZmY7CisgX191OCB0Y3BpX29wdGlvbnM7CisgX191OCB0Y3BpX3NuZF93c2NhbGUgOiA0LCB0Y3BpX3Jjdl93c2NhbGUgOiA0OworCisgX191MzIgdGNwaV9ydG87CisgX191MzIgdGNwaV9hdG87CisgX191MzIgdGNwaV9zbmRfbXNzOworIF9fdTMyIHRjcGlfcmN2X21zczsKKworIF9fdTMyIHRjcGlfdW5hY2tlZDsKKyBfX3UzMiB0Y3BpX3NhY2tlZDsKKyBfX3UzMiB0Y3BpX2xvc3Q7CisgX191MzIgdGNwaV9yZXRyYW5zOworIF9fdTMyIHRjcGlfZmFja2V0czsKKworIF9fdTMyIHRjcGlfbGFzdF9kYXRhX3NlbnQ7CisgX191MzIgdGNwaV9sYXN0X2Fja19zZW50OworIF9fdTMyIHRjcGlfbGFzdF9kYXRhX3JlY3Y7CisgX191MzIgdGNwaV9sYXN0X2Fja19yZWN2OworCisgX191MzIgdGNwaV9wbXR1OworIF9fdTMyIHRjcGlfcmN2X3NzdGhyZXNoOworIF9fdTMyIHRjcGlfcnR0OworIF9fdTMyIHRjcGlfcnR0dmFyOworIF9fdTMyIHRjcGlfc25kX3NzdGhyZXNoOworIF9fdTMyIHRjcGlfc25kX2N3bmQ7CisgX191MzIgdGNwaV9hZHZtc3M7CisgX191MzIgdGNwaV9yZW9yZGVyaW5nOworCisgX191MzIgdGNwaV9yY3ZfcnR0OworIF9fdTMyIHRjcGlfcmN2X3NwYWNlOworCisgX191MzIgdGNwaV90b3RhbF9yZXRyYW5zOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVsZXBob255LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVsZXBob255LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGMxZDgzZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZWxlcGhvbnkuaApAQCAtMCwwICsxLDE3MiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBURUxFUEhPTllfSAorI2RlZmluZSBURUxFUEhPTllfSAorCisjZGVmaW5lIFRFTEVQSE9OWV9WRVJTSU9OIDMwMTMKKworI2RlZmluZSBQSE9ORV9WRU5ET1JfSVhKIDEKKyNkZWZpbmUgUEhPTkVfVkVORE9SX1FVSUNLTkVUIFBIT05FX1ZFTkRPUl9JWEoKKyNkZWZpbmUgUEhPTkVfVkVORE9SX1ZPSUNFVFJPTklYIDIKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0FDVUxBQiAzCisjZGVmaW5lIFBIT05FX1ZFTkRPUl9ESUdJIDQKKyNkZWZpbmUgUEhPTkVfVkVORE9SX0ZSQU5LTElOIDUKKworI2RlZmluZSBRVElfUEhPTkVKQUNLIDEwMAorI2RlZmluZSBRVElfTElORUpBQ0sgMzAwCisjZGVmaW5lIFFUSV9QSE9ORUpBQ0tfTElURSA0MDAKKyNkZWZpbmUgUVRJX1BIT05FSkFDS19QQ0kgNTAwCisjZGVmaW5lIFFUSV9QSE9ORUNBUkQgNjAwCisKK3R5cGVkZWYgZW51bSB7CisgdmVuZG9yID0gMCwKKyBkZXZpY2UsCisgcG9ydCwKKyBjb2RlYywKKyBkc3AKK30gcGhvbmVfY2FwOworCitzdHJ1Y3QgcGhvbmVfY2FwYWJpbGl0eSB7CisgY2hhciBkZXNjWzgwXTsKKyBwaG9uZV9jYXAgY2FwdHlwZTsKKyBpbnQgY2FwOworIGludCBoYW5kbGU7Cit9OworCit0eXBlZGVmIGVudW0geworIHBvdHMgPSAwLAorIHBzdG4sCisgaGFuZHNldCwKKyBzcGVha2VyCit9IHBob25lX3BvcnRzOworCisjZGVmaW5lIFBIT05FX0NBUEFCSUxJVElFUyBfSU8gKCdxJywgMHg4MCkKKyNkZWZpbmUgUEhPTkVfQ0FQQUJJTElUSUVTX0xJU1QgX0lPUiAoJ3EnLCAweDgxLCBzdHJ1Y3QgcGhvbmVfY2FwYWJpbGl0eSAqKQorI2RlZmluZSBQSE9ORV9DQVBBQklMSVRJRVNfQ0hFQ0sgX0lPVyAoJ3EnLCAweDgyLCBzdHJ1Y3QgcGhvbmVfY2FwYWJpbGl0eSAqKQorCit0eXBlZGVmIHN0cnVjdCB7CisgY2hhciBtb250aFszXTsKKyBjaGFyIGRheVszXTsKKyBjaGFyIGhvdXJbM107CisgY2hhciBtaW5bM107CisgaW50IG51bWxlbjsKKyBjaGFyIG51bWJlclsxMV07CisgaW50IG5hbWVsZW47CisgY2hhciBuYW1lWzgwXTsKK30gUEhPTkVfQ0lEOworCisjZGVmaW5lIFBIT05FX1JJTkcgX0lPICgncScsIDB4ODMpCisjZGVmaW5lIFBIT05FX0hPT0tTVEFURSBfSU8gKCdxJywgMHg4NCkKKyNkZWZpbmUgUEhPTkVfTUFYUklOR1MgX0lPVyAoJ3EnLCAweDg1LCBjaGFyKQorI2RlZmluZSBQSE9ORV9SSU5HX0NBREVOQ0UgX0lPVyAoJ3EnLCAweDg2LCBzaG9ydCkKKyNkZWZpbmUgT0xEX1BIT05FX1JJTkdfU1RBUlQgX0lPICgncScsIDB4ODcpCisjZGVmaW5lIFBIT05FX1JJTkdfU1RBUlQgX0lPVyAoJ3EnLCAweDg3LCBQSE9ORV9DSUQgKikKKyNkZWZpbmUgUEhPTkVfUklOR19TVE9QIF9JTyAoJ3EnLCAweDg4KQorCisjZGVmaW5lIFVTQV9SSU5HX0NBREVOQ0UgMHhDMEMwCisKKyNkZWZpbmUgUEhPTkVfUkVDX0NPREVDIF9JT1cgKCdxJywgMHg4OSwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfU1RBUlQgX0lPICgncScsIDB4OEEpCisjZGVmaW5lIFBIT05FX1JFQ19TVE9QIF9JTyAoJ3EnLCAweDhCKQorI2RlZmluZSBQSE9ORV9SRUNfREVQVEggX0lPVyAoJ3EnLCAweDhDLCBpbnQpCisjZGVmaW5lIFBIT05FX0ZSQU1FIF9JT1cgKCdxJywgMHg4RCwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfVk9MVU1FIF9JT1cgKCdxJywgMHg4RSwgaW50KQorI2RlZmluZSBQSE9ORV9SRUNfVk9MVU1FX0xJTkVBUiBfSU9XICgncScsIDB4REIsIGludCkKKyNkZWZpbmUgUEhPTkVfUkVDX0xFVkVMIF9JTyAoJ3EnLCAweDhGKQorCisjZGVmaW5lIFBIT05FX1BMQVlfQ09ERUMgX0lPVyAoJ3EnLCAweDkwLCBpbnQpCisjZGVmaW5lIFBIT05FX1BMQVlfU1RBUlQgX0lPICgncScsIDB4OTEpCisjZGVmaW5lIFBIT05FX1BMQVlfU1RPUCBfSU8gKCdxJywgMHg5MikKKyNkZWZpbmUgUEhPTkVfUExBWV9ERVBUSCBfSU9XICgncScsIDB4OTMsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9WT0xVTUUgX0lPVyAoJ3EnLCAweDk0LCBpbnQpCisjZGVmaW5lIFBIT05FX1BMQVlfVk9MVU1FX0xJTkVBUiBfSU9XICgncScsIDB4REMsIGludCkKKyNkZWZpbmUgUEhPTkVfUExBWV9MRVZFTCBfSU8gKCdxJywgMHg5NSkKKyNkZWZpbmUgUEhPTkVfRFRNRl9SRUFEWSBfSU9SICgncScsIDB4OTYsIGludCkKKyNkZWZpbmUgUEhPTkVfR0VUX0RUTUYgX0lPUiAoJ3EnLCAweDk3LCBpbnQpCisjZGVmaW5lIFBIT05FX0dFVF9EVE1GX0FTQ0lJIF9JT1IgKCdxJywgMHg5OCwgaW50KQorI2RlZmluZSBQSE9ORV9EVE1GX09PQiBfSU9XICgncScsIDB4OTksIGludCkKKyNkZWZpbmUgUEhPTkVfRVhDRVBUSU9OIF9JT1IgKCdxJywgMHg5QSwgaW50KQorI2RlZmluZSBQSE9ORV9QTEFZX1RPTkUgX0lPVyAoJ3EnLCAweDlCLCBjaGFyKQorI2RlZmluZSBQSE9ORV9TRVRfVE9ORV9PTl9USU1FIF9JT1cgKCdxJywgMHg5QywgaW50KQorI2RlZmluZSBQSE9ORV9TRVRfVE9ORV9PRkZfVElNRSBfSU9XICgncScsIDB4OUQsIGludCkKKyNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfT05fVElNRSBfSU8gKCdxJywgMHg5RSkKKyNkZWZpbmUgUEhPTkVfR0VUX1RPTkVfT0ZGX1RJTUUgX0lPICgncScsIDB4OUYpCisjZGVmaW5lIFBIT05FX0dFVF9UT05FX1NUQVRFIF9JTyAoJ3EnLCAweEEwKQorI2RlZmluZSBQSE9ORV9CVVNZIF9JTyAoJ3EnLCAweEExKQorI2RlZmluZSBQSE9ORV9SSU5HQkFDSyBfSU8gKCdxJywgMHhBMikKKyNkZWZpbmUgUEhPTkVfRElBTFRPTkUgX0lPICgncScsIDB4QTMpCisjZGVmaW5lIFBIT05FX0NQVF9TVE9QIF9JTyAoJ3EnLCAweEE0KQorCisjZGVmaW5lIFBIT05FX1BTVE5fU0VUX1NUQVRFIF9JT1cgKCdxJywgMHhBNCwgaW50KQorI2RlZmluZSBQSE9ORV9QU1ROX0dFVF9TVEFURSBfSU8gKCdxJywgMHhBNSkKKworI2RlZmluZSBQU1ROX09OX0hPT0sgMAorI2RlZmluZSBQU1ROX1JJTkdJTkcgMQorI2RlZmluZSBQU1ROX09GRl9IT09LIDIKKyNkZWZpbmUgUFNUTl9QVUxTRV9ESUFMIDMKKworI2RlZmluZSBQSE9ORV9XSU5LX0RVUkFUSU9OIF9JT1cgKCdxJywgMHhBNiwgaW50KQorI2RlZmluZSBQSE9ORV9XSU5LIF9JT1cgKCdxJywgMHhBQSwgaW50KQorCit0eXBlZGVmIGVudW0geworIEc3MjNfNjMgPSAxLAorIEc3MjNfNTMgPSAyLAorIFRTODUgPSAzLAorIFRTNDggPSA0LAorIFRTNDEgPSA1LAorIEc3MjggPSA2LAorIEc3MjkgPSA3LAorIFVMQVcgPSA4LAorIEFMQVcgPSA5LAorIExJTkVBUjE2ID0gMTAsCisgTElORUFSOCA9IDExLAorIFdTUyA9IDEyLAorIEc3MjlCID0gMTMKK30gcGhvbmVfY29kZWM7CisKK3N0cnVjdCBwaG9uZV9jb2RlY19kYXRhCit7CisgcGhvbmVfY29kZWMgdHlwZTsKKyB1bnNpZ25lZCBzaG9ydCBidWZfbWluLCBidWZfb3B0LCBidWZfbWF4OworfTsKKworI2RlZmluZSBQSE9ORV9RVUVSWV9DT0RFQyBfSU9XUiAoJ3EnLCAweEE3LCBzdHJ1Y3QgcGhvbmVfY29kZWNfZGF0YSAqKQorI2RlZmluZSBQSE9ORV9QU1ROX0xJTkVURVNUIF9JTyAoJ3EnLCAweEE4KQorCisjZGVmaW5lIFBIT05FX1ZBRCBfSU9XICgncScsIDB4QTksIGludCkKKworc3RydWN0IHBob25lX2V4Y2VwdAoreworIHVuc2lnbmVkIGludCBkdG1mX3JlYWR5OjE7CisgdW5zaWduZWQgaW50IGhvb2tzdGF0ZToxOworIHVuc2lnbmVkIGludCBwc3RuX3Jpbmc6MTsKKyB1bnNpZ25lZCBpbnQgY2FsbGVyX2lkOjE7CisgdW5zaWduZWQgaW50IHBzdG5fd2luazoxOworIHVuc2lnbmVkIGludCBmMDoxOworIHVuc2lnbmVkIGludCBmMToxOworIHVuc2lnbmVkIGludCBmMjoxOworIHVuc2lnbmVkIGludCBmMzoxOworIHVuc2lnbmVkIGludCBmbGFzaDoxOworIHVuc2lnbmVkIGludCBmYzA6MTsKKyB1bnNpZ25lZCBpbnQgZmMxOjE7CisgdW5zaWduZWQgaW50IGZjMjoxOworIHVuc2lnbmVkIGludCBmYzM6MTsKKyB1bnNpZ25lZCBpbnQgcmVzZXJ2ZWQ6MTg7Cit9OworCit1bmlvbiB0ZWxlcGhvbnlfZXhjZXB0aW9uIHsKKyBzdHJ1Y3QgcGhvbmVfZXhjZXB0IGJpdHM7CisgdW5zaWduZWQgaW50IGJ5dGVzOworfTsKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXJtaW9zLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVybWlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUyODQzOWQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGVybWlvcy5oCkBAIC0wLDAgKzEsMTggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RFUk1JT1NfSAorI2RlZmluZSBfTElOVVhfVEVSTUlPU19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS90ZXJtaW9zLmg+CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RleHRzZWFyY2guaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXh0c2VhcmNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTkyMWNkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90ZXh0c2VhcmNoLmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1RFWFRTRUFSQ0hfSAorI2RlZmluZSBfX0xJTlVYX1RFWFRTRUFSQ0hfSAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRfaW5mby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RocmVhZF9pbmZvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDc0YTFmOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRfaW5mby5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RIUkVBRF9JTkZPX0gKKyNkZWZpbmUgX0xJTlVYX1RIUkVBRF9JTkZPX0gKKworc3RydWN0IHJlc3RhcnRfYmxvY2sgeworIGxvbmcgKCpmbikoc3RydWN0IHJlc3RhcnRfYmxvY2sgKik7CisgdW5zaWduZWQgbG9uZyBhcmcwLCBhcmcxLCBhcmcyLCBhcmczOworfTsKKworI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgorI2luY2x1ZGUgPGFzbS90aHJlYWRfaW5mby5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aHJlYWRzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGhyZWFkcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVkODU4NzgKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGhyZWFkcy5oCkBAIC0wLDAgKzEsMjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RIUkVBRFNfSAorI2RlZmluZSBfTElOVVhfVEhSRUFEU19ICisKKyNkZWZpbmUgTlJfQ1BVUyAxCisKKyNkZWZpbmUgTUlOX1RIUkVBRFNfTEVGVF9GT1JfUk9PVCA0CisKKyNkZWZpbmUgUElEX01BWF9ERUZBVUxUIChDT05GSUdfQkFTRV9TTUFMTCA/IDB4MTAwMCA6IDB4ODAwMCkKKworI2RlZmluZSBQSURfTUFYX0xJTUlUIChDT05GSUdfQkFTRV9TTUFMTCA/IFBBR0VfU0laRSAqIDggOiAgIChzaXplb2YobG9uZykgPiA0ID8gNCAqIDEwMjQgKiAxMDI0IDogUElEX01BWF9ERUZBVUxUKSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZTZlNDQwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWUuaApAQCAtMCwwICsxLDY5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9USU1FX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworI2lmbmRlZiBfU1RSVUNUX1RJTUVTUEVDCisjZGVmaW5lIF9TVFJVQ1RfVElNRVNQRUMKK3N0cnVjdCB0aW1lc3BlYyB7CisgdGltZV90IHR2X3NlYzsKKyBsb25nIHR2X25zZWM7Cit9OworI2VuZGlmCisKK3N0cnVjdCB0aW1ldmFsIHsKKyB0aW1lX3QgdHZfc2VjOworIHN1c2Vjb25kc190IHR2X3VzZWM7Cit9OworCitzdHJ1Y3QgdGltZXpvbmUgeworIGludCB0el9taW51dGVzd2VzdDsKKyBpbnQgdHpfZHN0dGltZTsKK307CisKKyNkZWZpbmUgTkZEQklUUyBfX05GREJJVFMKKworI2RlZmluZSBGRF9TRVRTSVpFIF9fRkRfU0VUU0laRQorI2RlZmluZSBGRF9TRVQoZmQsZmRzZXRwKSBfX0ZEX1NFVChmZCxmZHNldHApCisjZGVmaW5lIEZEX0NMUihmZCxmZHNldHApIF9fRkRfQ0xSKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfSVNTRVQoZmQsZmRzZXRwKSBfX0ZEX0lTU0VUKGZkLGZkc2V0cCkKKyNkZWZpbmUgRkRfWkVSTyhmZHNldHApIF9fRkRfWkVSTyhmZHNldHApCisKKyNkZWZpbmUgSVRJTUVSX1JFQUwgMAorI2RlZmluZSBJVElNRVJfVklSVFVBTCAxCisjZGVmaW5lIElUSU1FUl9QUk9GIDIKKworc3RydWN0IGl0aW1lcnNwZWMgeworIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKKyBzdHJ1Y3QgdGltZXNwZWMgaXRfdmFsdWU7Cit9OworCitzdHJ1Y3QgaXRpbWVydmFsIHsKKyBzdHJ1Y3QgdGltZXZhbCBpdF9pbnRlcnZhbDsKKyBzdHJ1Y3QgdGltZXZhbCBpdF92YWx1ZTsKK307CisKKyNkZWZpbmUgQ0xPQ0tfUkVBTFRJTUUgMAorI2RlZmluZSBDTE9DS19NT05PVE9OSUMgMQorI2RlZmluZSBDTE9DS19QUk9DRVNTX0NQVVRJTUVfSUQgMgorI2RlZmluZSBDTE9DS19USFJFQURfQ1BVVElNRV9JRCAzCisKKyNkZWZpbmUgQ0xPQ0tfU0dJX0NZQ0xFIDEwCisjZGVmaW5lIE1BWF9DTE9DS1MgMTYKKyNkZWZpbmUgQ0xPQ0tTX01BU0sgKENMT0NLX1JFQUxUSU1FIHwgQ0xPQ0tfTU9OT1RPTklDKQorI2RlZmluZSBDTE9DS1NfTU9OTyBDTE9DS19NT05PVE9OSUMKKworI2RlZmluZSBUSU1FUl9BQlNUSU1FIDB4MDEKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3MWE3NTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXIuaApAQCAtMCwwICsxLDQxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9USU1FUl9ICisjZGVmaW5lIF9MSU5VWF9USU1FUl9ICisKKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KKyNpbmNsdWRlIDxsaW51eC9zdGRkZWYuaD4KKworc3RydWN0IHR2ZWNfdF9iYXNlX3M7CisKK3N0cnVjdCB0aW1lcl9saXN0IHsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworIHVuc2lnbmVkIGxvbmcgZXhwaXJlczsKKworIHZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyk7CisgdW5zaWduZWQgbG9uZyBkYXRhOworCisgc3RydWN0IHR2ZWNfdF9iYXNlX3MgKmJhc2U7Cit9OworCisjZGVmaW5lIFRJTUVSX0lOSVRJQUxJWkVSKF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKSB7ICAgLmZ1bmN0aW9uID0gKF9mdW5jdGlvbiksICAgLmV4cGlyZXMgPSAoX2V4cGlyZXMpLCAgIC5kYXRhID0gKF9kYXRhKSwgICAuYmFzZSA9ICZib290X3R2ZWNfYmFzZXMsICAgfQorCisjZGVmaW5lIERFRklORV9USU1FUihfbmFtZSwgX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpICAgc3RydWN0IHRpbWVyX2xpc3QgX25hbWUgPSAgIFRJTUVSX0lOSVRJQUxJWkVSKF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKQorCisjZGVmaW5lIHRyeV90b19kZWxfdGltZXJfc3luYyh0KSBkZWxfdGltZXIodCkKKyNkZWZpbmUgZGVsX3RpbWVyX3N5bmModCkgZGVsX3RpbWVyKHQpCisjZGVmaW5lIGRlbF9zaW5nbGVzaG90X3RpbWVyX3N5bmModCkgZGVsX3RpbWVyX3N5bmModCkKKworc3RydWN0IGhydGltZXI7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40YWU0MTVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWVzLmgKQEAgLTAsMCArMSwyNCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVElNRVNfSAorI2RlZmluZSBfTElOVVhfVElNRVNfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IHRtcyB7CisgY2xvY2tfdCB0bXNfdXRpbWU7CisgY2xvY2tfdCB0bXNfc3RpbWU7CisgY2xvY2tfdCB0bXNfY3V0aW1lOworIGNsb2NrX3QgdG1zX2NzdGltZTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWV4LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdGltZXguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDI0NzBiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RpbWV4LmgKQEAgLTAsMCArMSwxMDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RJTUVYX0gKKyNkZWZpbmUgX0xJTlVYX1RJTUVYX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdGltZS5oPgorCisjaW5jbHVkZSA8YXNtL3BhcmFtLmg+CisKKyNkZWZpbmUgU0hJRlRfS0cgNiAgCisjZGVmaW5lIFNISUZUX0tGIDE2ICAKKyNkZWZpbmUgU0hJRlRfS0ggMiAgCisjZGVmaW5lIE1BWFRDIDYgIAorCisjZGVmaW5lIFNISUZUX1NDQUxFIDIyICAKKyNkZWZpbmUgU0hJRlRfVVBEQVRFIChTSElGVF9LRyArIE1BWFRDKSAgCisjZGVmaW5lIFNISUZUX1VTRUMgMTYgIAorI2RlZmluZSBGSU5FTlNFQyAoMUwgPDwgKFNISUZUX1NDQUxFIC0gMTApKSAgCisKKyNkZWZpbmUgTUFYUEhBU0UgNTEyMDAwTCAgCisjZGVmaW5lIE1BWEZSRVEgKDUxMkwgPDwgU0hJRlRfVVNFQykgIAorI2RlZmluZSBNSU5TRUMgMTZMICAKKyNkZWZpbmUgTUFYU0VDIDEyMDBMICAKKyNkZWZpbmUgTlRQX1BIQVNFX0xJTUlUIChNQVhQSEFTRSA8PCA1KSAgCisKK3N0cnVjdCB0aW1leCB7CisgdW5zaWduZWQgaW50IG1vZGVzOworIGxvbmcgb2Zmc2V0OworIGxvbmcgZnJlcTsKKyBsb25nIG1heGVycm9yOworIGxvbmcgZXN0ZXJyb3I7CisgaW50IHN0YXR1czsKKyBsb25nIGNvbnN0YW50OworIGxvbmcgcHJlY2lzaW9uOworIGxvbmcgdG9sZXJhbmNlOworIHN0cnVjdCB0aW1ldmFsIHRpbWU7CisgbG9uZyB0aWNrOworCisgbG9uZyBwcHNmcmVxOworIGxvbmcgaml0dGVyOworIGludCBzaGlmdDsKKyBsb25nIHN0YWJpbDsKKyBsb25nIGppdGNudDsKKyBsb25nIGNhbGNudDsKKyBsb25nIGVycmNudDsKKyBsb25nIHN0YmNudDsKKworIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7CisgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsgaW50IDozMjsKKyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOworfTsKKworI2RlZmluZSBBREpfT0ZGU0VUIDB4MDAwMSAgCisjZGVmaW5lIEFESl9GUkVRVUVOQ1kgMHgwMDAyICAKKyNkZWZpbmUgQURKX01BWEVSUk9SIDB4MDAwNCAgCisjZGVmaW5lIEFESl9FU1RFUlJPUiAweDAwMDggIAorI2RlZmluZSBBREpfU1RBVFVTIDB4MDAxMCAgCisjZGVmaW5lIEFESl9USU1FQ09OU1QgMHgwMDIwICAKKyNkZWZpbmUgQURKX1RJQ0sgMHg0MDAwICAKKyNkZWZpbmUgQURKX09GRlNFVF9TSU5HTEVTSE9UIDB4ODAwMSAgCisKKyNkZWZpbmUgTU9EX09GRlNFVCBBREpfT0ZGU0VUCisjZGVmaW5lIE1PRF9GUkVRVUVOQ1kgQURKX0ZSRVFVRU5DWQorI2RlZmluZSBNT0RfTUFYRVJST1IgQURKX01BWEVSUk9SCisjZGVmaW5lIE1PRF9FU1RFUlJPUiBBREpfRVNURVJST1IKKyNkZWZpbmUgTU9EX1NUQVRVUyBBREpfU1RBVFVTCisjZGVmaW5lIE1PRF9USU1FQ09OU1QgQURKX1RJTUVDT05TVAorI2RlZmluZSBNT0RfQ0xLQiBBREpfVElDSworI2RlZmluZSBNT0RfQ0xLQSBBREpfT0ZGU0VUX1NJTkdMRVNIT1QgIAorCisjZGVmaW5lIFNUQV9QTEwgMHgwMDAxICAKKyNkZWZpbmUgU1RBX1BQU0ZSRVEgMHgwMDAyICAKKyNkZWZpbmUgU1RBX1BQU1RJTUUgMHgwMDA0ICAKKyNkZWZpbmUgU1RBX0ZMTCAweDAwMDggIAorCisjZGVmaW5lIFNUQV9JTlMgMHgwMDEwICAKKyNkZWZpbmUgU1RBX0RFTCAweDAwMjAgIAorI2RlZmluZSBTVEFfVU5TWU5DIDB4MDA0MCAgCisjZGVmaW5lIFNUQV9GUkVRSE9MRCAweDAwODAgIAorCisjZGVmaW5lIFNUQV9QUFNTSUdOQUwgMHgwMTAwICAKKyNkZWZpbmUgU1RBX1BQU0pJVFRFUiAweDAyMDAgIAorI2RlZmluZSBTVEFfUFBTV0FOREVSIDB4MDQwMCAgCisjZGVmaW5lIFNUQV9QUFNFUlJPUiAweDA4MDAgIAorCisjZGVmaW5lIFNUQV9DTE9DS0VSUiAweDEwMDAgIAorCisjZGVmaW5lIFNUQV9ST05MWSAoU1RBX1BQU1NJR05BTCB8IFNUQV9QUFNKSVRURVIgfCBTVEFfUFBTV0FOREVSIHwgICBTVEFfUFBTRVJST1IgfCBTVEFfQ0xPQ0tFUlIpICAKKworI2RlZmluZSBUSU1FX09LIDAgIAorI2RlZmluZSBUSU1FX0lOUyAxICAKKyNkZWZpbmUgVElNRV9ERUwgMiAgCisjZGVmaW5lIFRJTUVfT09QIDMgIAorI2RlZmluZSBUSU1FX1dBSVQgNCAgCisjZGVmaW5lIFRJTUVfRVJST1IgNSAgCisjZGVmaW5lIFRJTUVfQkFEIFRJTUVfRVJST1IgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW9jbC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Rpb2NsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxNWE4ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90aW9jbC5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1RJT0NMX0gKKyNkZWZpbmUgX0xJTlVYX1RJT0NMX0gKKworI2RlZmluZSBUSU9DTF9TRVRTRUwgMiAgCisjZGVmaW5lIFRJT0NMX1NFTENIQVIgMCAgCisjZGVmaW5lIFRJT0NMX1NFTFdPUkQgMSAgCisjZGVmaW5lIFRJT0NMX1NFTExJTkUgMiAgCisjZGVmaW5lIFRJT0NMX1NFTFBPSU5URVIgMyAgCisjZGVmaW5lIFRJT0NMX1NFTENMRUFSIDQgIAorI2RlZmluZSBUSU9DTF9TRUxNT1VTRVJFUE9SVCAxNiAgCisjZGVmaW5lIFRJT0NMX1NFTEJVVFRPTk1BU0sgMTUgIAorCitzdHJ1Y3QgdGlvY2xfc2VsZWN0aW9uIHsKKyB1bnNpZ25lZCBzaG9ydCB4czsKKyB1bnNpZ25lZCBzaG9ydCB5czsKKyB1bnNpZ25lZCBzaG9ydCB4ZTsKKyB1bnNpZ25lZCBzaG9ydCB5ZTsKKyB1bnNpZ25lZCBzaG9ydCBzZWxfbW9kZTsKK307CisKKyNkZWZpbmUgVElPQ0xfUEFTVEVTRUwgMyAgCisjZGVmaW5lIFRJT0NMX1VOQkxBTktTQ1JFRU4gNCAgCisKKyNkZWZpbmUgVElPQ0xfU0VMTE9BRExVVCA1CisKKyNkZWZpbmUgVElPQ0xfR0VUU0hJRlRTVEFURSA2ICAKKyNkZWZpbmUgVElPQ0xfR0VUTU9VU0VSRVBPUlRJTkcgNyAgCisjZGVmaW5lIFRJT0NMX1NFVFZFU0FCTEFOSyAxMCAgCisjZGVmaW5lIFRJT0NMX1NFVEtNU0dSRURJUkVDVCAxMSAgCisjZGVmaW5lIFRJT0NMX0dFVEZHQ09OU09MRSAxMiAgCisjZGVmaW5lIFRJT0NMX1NDUk9MTENPTlNPTEUgMTMgIAorI2RlZmluZSBUSU9DTF9CTEFOS1NDUkVFTiAxNCAgCisjZGVmaW5lIFRJT0NMX0JMQU5LRURTQ1JFRU4gMTUgIAorI2RlZmluZSBUSU9DTF9HRVRLTVNHUkVESVJFQ1QgMTcgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cmFuc3BvcnRfY2xhc3MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC90cmFuc3BvcnRfY2xhc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MWFkMDg0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3RyYW5zcG9ydF9jbGFzcy5oCkBAIC0wLDAgKzEsNDggQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX1RSQU5TUE9SVF9DTEFTU19IXworI2RlZmluZSBfVFJBTlNQT1JUX0NMQVNTX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9hdHRyaWJ1dGVfY29udGFpbmVyLmg+CisKK3N0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyOworCitzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzIHsKKyBzdHJ1Y3QgY2xhc3MgY2xhc3M7CisgaW50ICgqc2V0dXApKHN0cnVjdCB0cmFuc3BvcnRfY29udGFpbmVyICosIHN0cnVjdCBkZXZpY2UgKiwKKyBzdHJ1Y3QgY2xhc3NfZGV2aWNlICopOworIGludCAoKmNvbmZpZ3VyZSkoc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgKiwgc3RydWN0IGRldmljZSAqLAorIHN0cnVjdCBjbGFzc19kZXZpY2UgKik7CisgaW50ICgqcmVtb3ZlKShzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciAqLCBzdHJ1Y3QgZGV2aWNlICosCisgc3RydWN0IGNsYXNzX2RldmljZSAqKTsKK307CisKKyNkZWZpbmUgREVDTEFSRV9UUkFOU1BPUlRfQ0xBU1MoY2xzLCBubSwgc3UsIHJtLCBjZmcpICBzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzIGNscyA9IHsgICAuY2xhc3MgPSB7ICAgLm5hbWUgPSBubSwgICB9LCAgIC5zZXR1cCA9IHN1LCAgIC5yZW1vdmUgPSBybSwgICAuY29uZmlndXJlID0gY2ZnLCAgfQorCitzdHJ1Y3QgYW5vbl90cmFuc3BvcnRfY2xhc3MgeworIHN0cnVjdCB0cmFuc3BvcnRfY2xhc3MgdGNsYXNzOworIHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyIGNvbnRhaW5lcjsKK307CisKKyNkZWZpbmUgREVDTEFSRV9BTk9OX1RSQU5TUE9SVF9DTEFTUyhjbHMsIG10Y2gsIGNmZykgIHN0cnVjdCBhbm9uX3RyYW5zcG9ydF9jbGFzcyBjbHMgPSB7ICAgLnRjbGFzcyA9IHsgICAuY29uZmlndXJlID0gY2ZnLCAgIH0sICAgLiBjb250YWluZXIgPSB7ICAgLm1hdGNoID0gbXRjaCwgICB9LCAgfQorCisjZGVmaW5lIGNsYXNzX3RvX3RyYW5zcG9ydF9jbGFzcyh4KSAgIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdHJhbnNwb3J0X2NsYXNzLCBjbGFzcykKKworc3RydWN0IHRyYW5zcG9ydF9jb250YWluZXIgeworIHN0cnVjdCBhdHRyaWJ1dGVfY29udGFpbmVyIGFjOworIHN0cnVjdCBhdHRyaWJ1dGVfZ3JvdXAgKnN0YXRpc3RpY3M7Cit9OworCisjZGVmaW5lIGF0dHJpYnV0ZV9jb250YWluZXJfdG9fdHJhbnNwb3J0X2NvbnRhaW5lcih4KSAgIGNvbnRhaW5lcl9vZih4LCBzdHJ1Y3QgdHJhbnNwb3J0X2NvbnRhaW5lciwgYWMpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3R0eS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3R0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyODc5MWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHR5LmgKQEAgLTAsMCArMSwxNSBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVFRZX0gKKyNkZWZpbmUgX0xJTlVYX1RUWV9ICisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3R5cGVzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdHlwZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iMTE4ZGIwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3R5cGVzLmgKQEAgLTAsMCArMSwzNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVFlQRVNfSAorI2RlZmluZSBfTElOVVhfVFlQRVNfSAorCisjaW5jbHVkZSA8bGludXgvcG9zaXhfdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20vdHlwZXMuaD4KKworI2RlZmluZSBfX2JpdHdpc2VfXworI2RlZmluZSBfX2JpdHdpc2UKKwordHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19sZTE2OwordHlwZWRlZiBfX3UxNiBfX2JpdHdpc2UgX19iZTE2OwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX19sZTMyOwordHlwZWRlZiBfX3UzMiBfX2JpdHdpc2UgX19iZTMyOworI2lmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVkKF9fU1RSSUNUX0FOU0lfXykKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fbGU2NDsKK3R5cGVkZWYgX191NjQgX19iaXR3aXNlIF9fYmU2NDsKKyNlbmRpZgorCitzdHJ1Y3QgdXN0YXQgeworIF9fa2VybmVsX2RhZGRyX3QgZl90ZnJlZTsKKyBfX2tlcm5lbF9pbm9fdCBmX3Rpbm9kZTsKKyBjaGFyIGZfZm5hbWVbNl07CisgY2hhciBmX2ZwYWNrWzZdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWRwLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWRwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTRiZjg2NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZHAuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VRFBfSAorI2RlZmluZSBfTElOVVhfVURQX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKK3N0cnVjdCB1ZHBoZHIgeworIF9fdTE2IHNvdXJjZTsKKyBfX3UxNiBkZXN0OworIF9fdTE2IGxlbjsKKyBfX3UxNiBjaGVjazsKK307CisKKyNkZWZpbmUgVURQX0NPUksgMSAgCisjZGVmaW5lIFVEUF9FTkNBUCAxMDAgIAorCisjZGVmaW5lIFVEUF9FTkNBUF9FU1BJTlVEUF9OT05fSUtFIDEgIAorI2RlZmluZSBVRFBfRU5DQVBfRVNQSU5VRFAgMiAgCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vmc19mc19pLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX2kuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzFhZGI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vmc19mc19pLmgKQEAgLTAsMCArMSwzMyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVUZTX0ZTX0lfSAorI2RlZmluZSBfTElOVVhfVUZTX0ZTX0lfSAorCitzdHJ1Y3QgdWZzX2lub2RlX2luZm8geworIHVuaW9uIHsKKyBfX2ZzMzIgaV9kYXRhWzE1XTsKKyBfX3U4IGlfc3ltbGlua1s0KjE1XTsKKyBfX2ZzNjQgdTJfaV9kYXRhWzE1XTsKKyB9IGlfdTE7CisgX191MzIgaV9mbGFnczsKKyBfX3UzMiBpX2dlbjsKKyBfX3UzMiBpX3NoYWRvdzsKKyBfX3UzMiBpX3VudXNlZDE7CisgX191MzIgaV91bnVzZWQyOworIF9fdTMyIGlfb2VmdGZsYWc7CisgX191MTYgaV9vc3luYzsKKyBfX3UzMiBpX2xhc3RmcmFnOworIF9fdTMyIGlfZGlyX3N0YXJ0X2xvb2t1cDsKKyBzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX3NiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWZzX2ZzX3NiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWM3MjI2ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91ZnNfZnNfc2IuaApAQCAtMCwwICsxLDM1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVUZTX0ZTX1NCX0gKKyNkZWZpbmUgX19MSU5VWF9VRlNfRlNfU0JfSAorCisjZGVmaW5lIFVGU19NQVhfR1JPVVBfTE9BREVEIDgKKyNkZWZpbmUgVUZTX0NHTk9fRU1QVFkgKCh1bnNpZ25lZCktMSkKKworc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm87CitzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbzsKK3N0cnVjdCB1ZnNfY3N1bTsKKyNkZWZpbmUgVUZTX01BWENTQlVGUyAzMQorCitzdHJ1Y3QgdWZzX3NiX2luZm8geworIHN0cnVjdCB1ZnNfc2JfcHJpdmF0ZV9pbmZvICogc191c3BpOworIHN0cnVjdCB1ZnNfY3N1bSAqIHNfY3NwOworIHVuc2lnbmVkIHNfYnl0ZXNleDsKKyB1bnNpZ25lZCBzX2ZsYWdzOworIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBzX3VjZzsKKyBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHNfdWNwaVtVRlNfTUFYX0dST1VQX0xPQURFRF07CisgdW5zaWduZWQgc19jZ25vW1VGU19NQVhfR1JPVVBfTE9BREVEXTsKKyB1bnNpZ25lZCBzaG9ydCBzX2NnX2xvYWRlZDsKKyB1bnNpZ25lZCBzX21vdW50X29wdDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vpby5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Vpby5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIwODk1YWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdWlvLmgKQEAgLTAsMCArMSwyNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1VJT19ICisjZGVmaW5lIF9fTElOVVhfVUlPX0gKKworI2luY2x1ZGUgPGxpbnV4L2NvbXBpbGVyLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKworc3RydWN0IGlvdmVjCit7Cisgdm9pZCBfX3VzZXIgKmlvdl9iYXNlOworIF9fa2VybmVsX3NpemVfdCBpb3ZfbGVuOworfTsKKworI2RlZmluZSBVSU9fRkFTVElPViA4CisjZGVmaW5lIFVJT19NQVhJT1YgMTAyNAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWI1MWI3YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91bi5oCkBAIC0wLDAgKzEsMjIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1VOX0gKKyNkZWZpbmUgX0xJTlVYX1VOX0gKKworI2RlZmluZSBVTklYX1BBVEhfTUFYIDEwOAorCitzdHJ1Y3Qgc29ja2FkZHJfdW4geworIHNhX2ZhbWlseV90IHN1bl9mYW1pbHk7CisgY2hhciBzdW5fcGF0aFtVTklYX1BBVEhfTUFYXTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuaXN0ZC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VuaXN0ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhM2VjNGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdW5pc3RkLmgKQEAgLTAsMCArMSwxNyBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVU5JU1REX0hfCisjZGVmaW5lIF9MSU5VWF9VTklTVERfSF8KKworI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2VlZTE5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2IuaApAQCAtMCwwICsxLDIxIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVVNCX0gKKyNkZWZpbmUgX19MSU5VWF9VU0JfSAorCisjaW5jbHVkZSA8bGludXgvbW9kX2RldmljZXRhYmxlLmg+CisjaW5jbHVkZSA8bGludXgvdXNiX2NoOS5oPgorCisjZGVmaW5lIFVTQl9NQUpPUiAxODAKKyNkZWZpbmUgVVNCX0RFVklDRV9NQUpPUiAxODkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXNiX2NoOS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYl9jaDkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGUzMWU3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYl9jaDkuaApAQCAtMCwwICsxLDM4OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfX0xJTlVYX1VTQl9DSDlfSAorI2RlZmluZSBfX0xJTlVYX1VTQl9DSDlfSAorCisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4gIAorCisjZGVmaW5lIFVTQl9ESVJfT1VUIDAgIAorI2RlZmluZSBVU0JfRElSX0lOIDB4ODAgIAorCisjZGVmaW5lIFVTQl9UWVBFX01BU0sgKDB4MDMgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfU1RBTkRBUkQgKDB4MDAgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfQ0xBU1MgKDB4MDEgPDwgNSkKKyNkZWZpbmUgVVNCX1RZUEVfVkVORE9SICgweDAyIDw8IDUpCisjZGVmaW5lIFVTQl9UWVBFX1JFU0VSVkVEICgweDAzIDw8IDUpCisKKyNkZWZpbmUgVVNCX1JFQ0lQX01BU0sgMHgxZgorI2RlZmluZSBVU0JfUkVDSVBfREVWSUNFIDB4MDAKKyNkZWZpbmUgVVNCX1JFQ0lQX0lOVEVSRkFDRSAweDAxCisjZGVmaW5lIFVTQl9SRUNJUF9FTkRQT0lOVCAweDAyCisjZGVmaW5lIFVTQl9SRUNJUF9PVEhFUiAweDAzCisKKyNkZWZpbmUgVVNCX1JFQ0lQX1BPUlQgMHgwNAorI2RlZmluZSBVU0JfUkVDSVBfUlBJUEUgMHgwNQorCisjZGVmaW5lIFVTQl9SRVFfR0VUX1NUQVRVUyAweDAwCisjZGVmaW5lIFVTQl9SRVFfQ0xFQVJfRkVBVFVSRSAweDAxCisjZGVmaW5lIFVTQl9SRVFfU0VUX0ZFQVRVUkUgMHgwMworI2RlZmluZSBVU0JfUkVRX1NFVF9BRERSRVNTIDB4MDUKKyNkZWZpbmUgVVNCX1JFUV9HRVRfREVTQ1JJUFRPUiAweDA2CisjZGVmaW5lIFVTQl9SRVFfU0VUX0RFU0NSSVBUT1IgMHgwNworI2RlZmluZSBVU0JfUkVRX0dFVF9DT05GSUdVUkFUSU9OIDB4MDgKKyNkZWZpbmUgVVNCX1JFUV9TRVRfQ09ORklHVVJBVElPTiAweDA5CisjZGVmaW5lIFVTQl9SRVFfR0VUX0lOVEVSRkFDRSAweDBBCisjZGVmaW5lIFVTQl9SRVFfU0VUX0lOVEVSRkFDRSAweDBCCisjZGVmaW5lIFVTQl9SRVFfU1lOQ0hfRlJBTUUgMHgwQworCisjZGVmaW5lIFVTQl9SRVFfU0VUX0VOQ1JZUFRJT04gMHgwRCAgCisjZGVmaW5lIFVTQl9SRVFfR0VUX0VOQ1JZUFRJT04gMHgwRQorI2RlZmluZSBVU0JfUkVRX1JQSVBFX0FCT1JUIDB4MEUKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSEFORFNIQUtFIDB4MEYKKyNkZWZpbmUgVVNCX1JFUV9SUElQRV9SRVNFVCAweDBGCisjZGVmaW5lIFVTQl9SRVFfR0VUX0hBTkRTSEFLRSAweDEwCisjZGVmaW5lIFVTQl9SRVFfU0VUX0NPTk5FQ1RJT04gMHgxMQorI2RlZmluZSBVU0JfUkVRX1NFVF9TRUNVUklUWV9EQVRBIDB4MTIKKyNkZWZpbmUgVVNCX1JFUV9HRVRfU0VDVVJJVFlfREFUQSAweDEzCisjZGVmaW5lIFVTQl9SRVFfU0VUX1dVU0JfREFUQSAweDE0CisjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9XUklURSAweDE1CisjZGVmaW5lIFVTQl9SRVFfTE9PUEJBQ0tfREFUQV9SRUFEIDB4MTYKKyNkZWZpbmUgVVNCX1JFUV9TRVRfSU5URVJGQUNFX0RTIDB4MTcKKworI2RlZmluZSBVU0JfREVWSUNFX1NFTEZfUE9XRVJFRCAwICAKKyNkZWZpbmUgVVNCX0RFVklDRV9SRU1PVEVfV0FLRVVQIDEgIAorI2RlZmluZSBVU0JfREVWSUNFX1RFU1RfTU9ERSAyICAKKyNkZWZpbmUgVVNCX0RFVklDRV9CQVRURVJZIDIgIAorI2RlZmluZSBVU0JfREVWSUNFX0JfSE5QX0VOQUJMRSAzICAKKyNkZWZpbmUgVVNCX0RFVklDRV9XVVNCX0RFVklDRSAzICAKKyNkZWZpbmUgVVNCX0RFVklDRV9BX0hOUF9TVVBQT1JUIDQgIAorI2RlZmluZSBVU0JfREVWSUNFX0FfQUxUX0hOUF9TVVBQT1JUIDUgIAorI2RlZmluZSBVU0JfREVWSUNFX0RFQlVHX01PREUgNiAgCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX0hBTFQgMCAgCisKK3N0cnVjdCB1c2JfY3RybHJlcXVlc3QgeworIF9fdTggYlJlcXVlc3RUeXBlOworIF9fdTggYlJlcXVlc3Q7CisgX19sZTE2IHdWYWx1ZTsKKyBfX2xlMTYgd0luZGV4OworIF9fbGUxNiB3TGVuZ3RoOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0RFVklDRSAweDAxCisjZGVmaW5lIFVTQl9EVF9DT05GSUcgMHgwMgorI2RlZmluZSBVU0JfRFRfU1RSSU5HIDB4MDMKKyNkZWZpbmUgVVNCX0RUX0lOVEVSRkFDRSAweDA0CisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVCAweDA1CisjZGVmaW5lIFVTQl9EVF9ERVZJQ0VfUVVBTElGSUVSIDB4MDYKKyNkZWZpbmUgVVNCX0RUX09USEVSX1NQRUVEX0NPTkZJRyAweDA3CisjZGVmaW5lIFVTQl9EVF9JTlRFUkZBQ0VfUE9XRVIgMHgwOAorCisjZGVmaW5lIFVTQl9EVF9PVEcgMHgwOQorI2RlZmluZSBVU0JfRFRfREVCVUcgMHgwYQorI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX0FTU09DSUFUSU9OIDB4MGIKKworI2RlZmluZSBVU0JfRFRfU0VDVVJJVFkgMHgwYworI2RlZmluZSBVU0JfRFRfS0VZIDB4MGQKKyNkZWZpbmUgVVNCX0RUX0VOQ1JZUFRJT05fVFlQRSAweDBlCisjZGVmaW5lIFVTQl9EVF9CT1MgMHgwZgorI2RlZmluZSBVU0JfRFRfREVWSUNFX0NBUEFCSUxJVFkgMHgxMAorI2RlZmluZSBVU0JfRFRfV0lSRUxFU1NfRU5EUE9JTlRfQ09NUCAweDExCisjZGVmaW5lIFVTQl9EVF9XSVJFX0FEQVBURVIgMHgyMQorI2RlZmluZSBVU0JfRFRfUlBJUEUgMHgyMgorCisjZGVmaW5lIFVTQl9EVF9DU19ERVZJQ0UgMHgyMQorI2RlZmluZSBVU0JfRFRfQ1NfQ09ORklHIDB4MjIKKyNkZWZpbmUgVVNCX0RUX0NTX1NUUklORyAweDIzCisjZGVmaW5lIFVTQl9EVF9DU19JTlRFUkZBQ0UgMHgyNAorI2RlZmluZSBVU0JfRFRfQ1NfRU5EUE9JTlQgMHgyNQorCitzdHJ1Y3QgdXNiX2Rlc2NyaXB0b3JfaGVhZGVyIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHVzYl9kZXZpY2VfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX19sZTE2IGJjZFVTQjsKKyBfX3U4IGJEZXZpY2VDbGFzczsKKyBfX3U4IGJEZXZpY2VTdWJDbGFzczsKKyBfX3U4IGJEZXZpY2VQcm90b2NvbDsKKyBfX3U4IGJNYXhQYWNrZXRTaXplMDsKKyBfX2xlMTYgaWRWZW5kb3I7CisgX19sZTE2IGlkUHJvZHVjdDsKKyBfX2xlMTYgYmNkRGV2aWNlOworIF9fdTggaU1hbnVmYWN0dXJlcjsKKyBfX3U4IGlQcm9kdWN0OworIF9fdTggaVNlcmlhbE51bWJlcjsKKyBfX3U4IGJOdW1Db25maWd1cmF0aW9uczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9ERVZJQ0VfU0laRSAxOAorCisjZGVmaW5lIFVTQl9DTEFTU19QRVJfSU5URVJGQUNFIDAgIAorI2RlZmluZSBVU0JfQ0xBU1NfQVVESU8gMQorI2RlZmluZSBVU0JfQ0xBU1NfQ09NTSAyCisjZGVmaW5lIFVTQl9DTEFTU19ISUQgMworI2RlZmluZSBVU0JfQ0xBU1NfUEhZU0lDQUwgNQorI2RlZmluZSBVU0JfQ0xBU1NfU1RJTExfSU1BR0UgNgorI2RlZmluZSBVU0JfQ0xBU1NfUFJJTlRFUiA3CisjZGVmaW5lIFVTQl9DTEFTU19NQVNTX1NUT1JBR0UgOAorI2RlZmluZSBVU0JfQ0xBU1NfSFVCIDkKKyNkZWZpbmUgVVNCX0NMQVNTX0NEQ19EQVRBIDB4MGEKKyNkZWZpbmUgVVNCX0NMQVNTX0NTQ0lEIDB4MGIgIAorI2RlZmluZSBVU0JfQ0xBU1NfQ09OVEVOVF9TRUMgMHgwZCAgCisjZGVmaW5lIFVTQl9DTEFTU19WSURFTyAweDBlCisjZGVmaW5lIFVTQl9DTEFTU19XSVJFTEVTU19DT05UUk9MTEVSIDB4ZTAKKyNkZWZpbmUgVVNCX0NMQVNTX0FQUF9TUEVDIDB4ZmUKKyNkZWZpbmUgVVNCX0NMQVNTX1ZFTkRPUl9TUEVDIDB4ZmYKKworc3RydWN0IHVzYl9jb25maWdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX19sZTE2IHdUb3RhbExlbmd0aDsKKyBfX3U4IGJOdW1JbnRlcmZhY2VzOworIF9fdTggYkNvbmZpZ3VyYXRpb25WYWx1ZTsKKyBfX3U4IGlDb25maWd1cmF0aW9uOworIF9fdTggYm1BdHRyaWJ1dGVzOworIF9fdTggYk1heFBvd2VyOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX0RUX0NPTkZJR19TSVpFIDkKKworI2RlZmluZSBVU0JfQ09ORklHX0FUVF9PTkUgKDEgPDwgNykgIAorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9TRUxGUE9XRVIgKDEgPDwgNikgIAorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9XQUtFVVAgKDEgPDwgNSkgIAorI2RlZmluZSBVU0JfQ09ORklHX0FUVF9CQVRURVJZICgxIDw8IDQpICAKKworc3RydWN0IHVzYl9zdHJpbmdfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX19sZTE2IHdEYXRhWzFdOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB1c2JfaW50ZXJmYWNlX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYkludGVyZmFjZU51bWJlcjsKKyBfX3U4IGJBbHRlcm5hdGVTZXR0aW5nOworIF9fdTggYk51bUVuZHBvaW50czsKKyBfX3U4IGJJbnRlcmZhY2VDbGFzczsKKyBfX3U4IGJJbnRlcmZhY2VTdWJDbGFzczsKKyBfX3U4IGJJbnRlcmZhY2VQcm90b2NvbDsKKyBfX3U4IGlJbnRlcmZhY2U7Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBVU0JfRFRfSU5URVJGQUNFX1NJWkUgOQorCitzdHJ1Y3QgdXNiX2VuZHBvaW50X2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYkVuZHBvaW50QWRkcmVzczsKKyBfX3U4IGJtQXR0cmlidXRlczsKKyBfX2xlMTYgd01heFBhY2tldFNpemU7CisgX191OCBiSW50ZXJ2YWw7CisKKyBfX3U4IGJSZWZyZXNoOworIF9fdTggYlN5bmNoQWRkcmVzczsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCisjZGVmaW5lIFVTQl9EVF9FTkRQT0lOVF9TSVpFIDcKKyNkZWZpbmUgVVNCX0RUX0VORFBPSU5UX0FVRElPX1NJWkUgOSAgCisKKyNkZWZpbmUgVVNCX0VORFBPSU5UX05VTUJFUl9NQVNLIDB4MGYgIAorI2RlZmluZSBVU0JfRU5EUE9JTlRfRElSX01BU0sgMHg4MAorCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLIDB4MDMgIAorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9DT05UUk9MIDAKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1hGRVJfSVNPQyAxCisjZGVmaW5lIFVTQl9FTkRQT0lOVF9YRkVSX0JVTEsgMgorI2RlZmluZSBVU0JfRU5EUE9JTlRfWEZFUl9JTlQgMworI2RlZmluZSBVU0JfRU5EUE9JTlRfTUFYX0FESlVTVEFCTEUgMHg4MAorCitzdHJ1Y3QgdXNiX3F1YWxpZmllcl9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgYmNkVVNCOworIF9fdTggYkRldmljZUNsYXNzOworIF9fdTggYkRldmljZVN1YkNsYXNzOworIF9fdTggYkRldmljZVByb3RvY29sOworIF9fdTggYk1heFBhY2tldFNpemUwOworIF9fdTggYk51bUNvbmZpZ3VyYXRpb25zOworIF9fdTggYlJFU0VSVkVEOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB1c2Jfb3RnX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYm1BdHRyaWJ1dGVzOworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKKyNkZWZpbmUgVVNCX09UR19TUlAgKDEgPDwgMCkKKyNkZWZpbmUgVVNCX09UR19ITlAgKDEgPDwgMSkgIAorCitzdHJ1Y3QgdXNiX2RlYnVnX2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggYkRlYnVnSW5FbmRwb2ludDsKKyBfX3U4IGJEZWJ1Z091dEVuZHBvaW50OworfTsKKworc3RydWN0IHVzYl9pbnRlcmZhY2VfYXNzb2NfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX191OCBiRmlyc3RJbnRlcmZhY2U7CisgX191OCBiSW50ZXJmYWNlQ291bnQ7CisgX191OCBiRnVuY3Rpb25DbGFzczsKKyBfX3U4IGJGdW5jdGlvblN1YkNsYXNzOworIF9fdTggYkZ1bmN0aW9uUHJvdG9jb2w7CisgX191OCBpRnVuY3Rpb247Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworc3RydWN0IHVzYl9zZWN1cml0eV9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX2xlMTYgd1RvdGFsTGVuZ3RoOworIF9fdTggYk51bUVuY3J5cHRpb25UeXBlczsKK307CisKK3N0cnVjdCB1c2Jfa2V5X2Rlc2NyaXB0b3IgeworIF9fdTggYkxlbmd0aDsKKyBfX3U4IGJEZXNjcmlwdG9yVHlwZTsKKworIF9fdTggdFRLSURbM107CisgX191OCBiUmVzZXJ2ZWQ7CisgX191OCBiS2V5RGF0YVswXTsKK307CisKK3N0cnVjdCB1c2JfZW5jcnlwdGlvbl9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX3U4IGJFbmNyeXB0aW9uVHlwZTsKKyNkZWZpbmUgVVNCX0VOQ19UWVBFX1VOU0VDVVJFIDAKKyNkZWZpbmUgVVNCX0VOQ19UWVBFX1dJUkVEIDEgIAorI2RlZmluZSBVU0JfRU5DX1RZUEVfQ0NNXzEgMiAgCisjZGVmaW5lIFVTQl9FTkNfVFlQRV9SU0FfMSAzICAKKyBfX3U4IGJFbmNyeXB0aW9uVmFsdWU7CisgX191OCBiQXV0aEtleUluZGV4OworfTsKKworc3RydWN0IHVzYl9ib3NfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworCisgX19sZTE2IHdUb3RhbExlbmd0aDsKKyBfX3U4IGJOdW1EZXZpY2VDYXBzOworfTsKKworc3RydWN0IHVzYl9kZXZfY2FwX2hlYWRlciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggYkRldkNhcGFiaWxpdHlUeXBlOworfTsKKworI2RlZmluZSBVU0JfQ0FQX1RZUEVfV0lSRUxFU1NfVVNCIDEKKworc3RydWN0IHVzYl93aXJlbGVzc19jYXBfZGVzY3JpcHRvciB7CisgX191OCBiTGVuZ3RoOworIF9fdTggYkRlc2NyaXB0b3JUeXBlOworIF9fdTggYkRldkNhcGFiaWxpdHlUeXBlOworCisgX191OCBibUF0dHJpYnV0ZXM7CisjZGVmaW5lIFVTQl9XSVJFTEVTU19QMlBfRFJEICgxIDw8IDEpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19CRUFDT05fTUFTSyAoMyA8PCAyKQorI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX1NFTEYgKDEgPDwgMikKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX0JFQUNPTl9ESVJFQ1RFRCAoMiA8PCAyKQorI2RlZmluZSBVU0JfV0lSRUxFU1NfQkVBQ09OX05PTkUgKDMgPDwgMikKKyBfX2xlMTYgd1BIWVJhdGVzOworI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzUzICgxIDw8IDApICAKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV84MCAoMSA8PCAxKQorI2RlZmluZSBVU0JfV0lSRUxFU1NfUEhZXzEwNyAoMSA8PCAyKSAgCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMTYwICgxIDw8IDMpCisjZGVmaW5lIFVTQl9XSVJFTEVTU19QSFlfMjAwICgxIDw8IDQpICAKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV8zMjAgKDEgPDwgNSkKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV80MDAgKDEgPDwgNikKKyNkZWZpbmUgVVNCX1dJUkVMRVNTX1BIWV80ODAgKDEgPDwgNykKKyBfX3U4IGJtVEZJVFhQb3dlckluZm87CisgX191OCBibUZGSVRYUG93ZXJJbmZvOworIF9fbGUxNiBibUJhbmRHcm91cDsKKyBfX3U4IGJSZXNlcnZlZDsKK307CisKK3N0cnVjdCB1c2Jfd2lyZWxlc3NfZXBfY29tcF9kZXNjcmlwdG9yIHsKKyBfX3U4IGJMZW5ndGg7CisgX191OCBiRGVzY3JpcHRvclR5cGU7CisKKyBfX3U4IGJNYXhCdXJzdDsKKyBfX3U4IGJNYXhTZXF1ZW5jZTsKKyBfX2xlMTYgd01heFN0cmVhbURlbGF5OworIF9fbGUxNiB3T3ZlclRoZUFpclBhY2tldFNpemU7CisgX191OCBiT3ZlclRoZUFpckludGVydmFsOworIF9fdTggYm1Db21wQXR0cmlidXRlczsKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9NQVNLIDB4MDMgIAorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX05PIDAKKyNkZWZpbmUgVVNCX0VORFBPSU5UX1NXSVRDSF9TV0lUQ0ggMQorI2RlZmluZSBVU0JfRU5EUE9JTlRfU1dJVENIX1NDQUxFIDIKK307CisKK3N0cnVjdCB1c2JfaGFuZHNoYWtlIHsKKyBfX3U4IGJNZXNzYWdlTnVtYmVyOworIF9fdTggYlN0YXR1czsKKyBfX3U4IHRUS0lEWzNdOworIF9fdTggYlJlc2VydmVkOworIF9fdTggQ0RJRFsxNl07CisgX191OCBub25jZVsxNl07CisgX191OCBNSUNbOF07Cit9OworCitzdHJ1Y3QgdXNiX2Nvbm5lY3Rpb25fY29udGV4dCB7CisgX191OCBDSElEWzE2XTsKKyBfX3U4IENESURbMTZdOworIF9fdTggQ0tbMTZdOworfTsKKworZW51bSB1c2JfZGV2aWNlX3NwZWVkIHsKKyBVU0JfU1BFRURfVU5LTk9XTiA9IDAsCisgVVNCX1NQRUVEX0xPVywgVVNCX1NQRUVEX0ZVTEwsCisgVVNCX1NQRUVEX0hJR0gsCisgVVNCX1NQRUVEX1ZBUklBQkxFLAorfTsKKworZW51bSB1c2JfZGV2aWNlX3N0YXRlIHsKKworIFVTQl9TVEFURV9OT1RBVFRBQ0hFRCA9IDAsCisKKyBVU0JfU1RBVEVfQVRUQUNIRUQsCisgVVNCX1NUQVRFX1BPV0VSRUQsCisgVVNCX1NUQVRFX1VOQVVUSEVOVElDQVRFRCwKKyBVU0JfU1RBVEVfUkVDT05ORUNUSU5HLAorIFVTQl9TVEFURV9ERUZBVUxULAorIFVTQl9TVEFURV9BRERSRVNTLAorIFVTQl9TVEFURV9DT05GSUdVUkVELAorCisgVVNCX1NUQVRFX1NVU1BFTkRFRAorCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JkZXZpY2VfZnMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2JkZXZpY2VfZnMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMzZlZmRjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzYmRldmljZV9mcy5oCkBAIC0wLDAgKzEsMTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VU0JERVZJQ0VfRlNfSAorI2RlZmluZSBfTElOVVhfVVNCREVWSUNFX0ZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgVVNCREVWSUNFX1NVUEVSX01BR0lDIDB4OWZhMgorCitzdHJ1Y3QgdXNiZGV2ZnNfY3RybHRyYW5zZmVyIHsKKyBfX3U4IGJSZXF1ZXN0VHlwZTsKKyBfX3U4IGJSZXF1ZXN0OworIF9fdTE2IHdWYWx1ZTsKKyBfX3UxNiB3SW5kZXg7CisgX191MTYgd0xlbmd0aDsKKyBfX3UzMiB0aW1lb3V0OworIHZvaWQgX191c2VyICpkYXRhOworfTsKKworc3RydWN0IHVzYmRldmZzX2J1bGt0cmFuc2ZlciB7CisgdW5zaWduZWQgaW50IGVwOworIHVuc2lnbmVkIGludCBsZW47CisgdW5zaWduZWQgaW50IHRpbWVvdXQ7Cisgdm9pZCBfX3VzZXIgKmRhdGE7Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlIHsKKyB1bnNpZ25lZCBpbnQgaW50ZXJmYWNlOworIHVuc2lnbmVkIGludCBhbHRzZXR0aW5nOworfTsKKworc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwgeworIHVuc2lnbmVkIGludCBzaWducjsKKyB2b2lkIF9fdXNlciAqY29udGV4dDsKK307CisKKyNkZWZpbmUgVVNCREVWRlNfTUFYRFJJVkVSTkFNRSAyNTUKKworc3RydWN0IHVzYmRldmZzX2dldGRyaXZlciB7CisgdW5zaWduZWQgaW50IGludGVyZmFjZTsKKyBjaGFyIGRyaXZlcltVU0JERVZGU19NQVhEUklWRVJOQU1FICsgMV07Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfY29ubmVjdGluZm8geworIHVuc2lnbmVkIGludCBkZXZudW07CisgdW5zaWduZWQgY2hhciBzbG93OworfTsKKworI2RlZmluZSBVU0JERVZGU19VUkJfU0hPUlRfTk9UX09LIDEKKyNkZWZpbmUgVVNCREVWRlNfVVJCX0lTT19BU0FQIDIKKworI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9JU08gMAorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9JTlRFUlJVUFQgMQorI2RlZmluZSBVU0JERVZGU19VUkJfVFlQRV9DT05UUk9MIDIKKyNkZWZpbmUgVVNCREVWRlNfVVJCX1RZUEVfQlVMSyAzCisKK3N0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgeworIHVuc2lnbmVkIGludCBsZW5ndGg7CisgdW5zaWduZWQgaW50IGFjdHVhbF9sZW5ndGg7CisgdW5zaWduZWQgaW50IHN0YXR1czsKK307CisKK3N0cnVjdCB1c2JkZXZmc191cmIgeworIHVuc2lnbmVkIGNoYXIgdHlwZTsKKyB1bnNpZ25lZCBjaGFyIGVuZHBvaW50OworIGludCBzdGF0dXM7CisgdW5zaWduZWQgaW50IGZsYWdzOworIHZvaWQgX191c2VyICpidWZmZXI7CisgaW50IGJ1ZmZlcl9sZW5ndGg7CisgaW50IGFjdHVhbF9sZW5ndGg7CisgaW50IHN0YXJ0X2ZyYW1lOworIGludCBudW1iZXJfb2ZfcGFja2V0czsKKyBpbnQgZXJyb3JfY291bnQ7CisgdW5zaWduZWQgaW50IHNpZ25yOworIHZvaWQgKnVzZXJjb250ZXh0OworIHN0cnVjdCB1c2JkZXZmc19pc29fcGFja2V0X2Rlc2MgaXNvX2ZyYW1lX2Rlc2NbMF07Cit9OworCitzdHJ1Y3QgdXNiZGV2ZnNfaW9jdGwgeworIGludCBpZm5vOworIGludCBpb2N0bF9jb2RlOworIHZvaWQgX191c2VyICpkYXRhOworfTsKKworc3RydWN0IHVzYmRldmZzX2h1Yl9wb3J0aW5mbyB7CisgY2hhciBucG9ydHM7CisgY2hhciBwb3J0IFsxMjddOworfTsKKworI2RlZmluZSBVU0JERVZGU19DT05UUk9MIF9JT1dSKCdVJywgMCwgc3RydWN0IHVzYmRldmZzX2N0cmx0cmFuc2ZlcikKKyNkZWZpbmUgVVNCREVWRlNfQlVMSyBfSU9XUignVScsIDIsIHN0cnVjdCB1c2JkZXZmc19idWxrdHJhbnNmZXIpCisjZGVmaW5lIFVTQkRFVkZTX1JFU0VURVAgX0lPUignVScsIDMsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfU0VUSU5URVJGQUNFIF9JT1IoJ1UnLCA0LCBzdHJ1Y3QgdXNiZGV2ZnNfc2V0aW50ZXJmYWNlKQorI2RlZmluZSBVU0JERVZGU19TRVRDT05GSUdVUkFUSU9OIF9JT1IoJ1UnLCA1LCB1bnNpZ25lZCBpbnQpCisjZGVmaW5lIFVTQkRFVkZTX0dFVERSSVZFUiBfSU9XKCdVJywgOCwgc3RydWN0IHVzYmRldmZzX2dldGRyaXZlcikKKyNkZWZpbmUgVVNCREVWRlNfU1VCTUlUVVJCIF9JT1IoJ1UnLCAxMCwgc3RydWN0IHVzYmRldmZzX3VyYikKKyNkZWZpbmUgVVNCREVWRlNfU1VCTUlUVVJCMzIgX0lPUignVScsIDEwLCBzdHJ1Y3QgdXNiZGV2ZnNfdXJiMzIpCisjZGVmaW5lIFVTQkRFVkZTX0RJU0NBUkRVUkIgX0lPKCdVJywgMTEpCisjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIgX0lPVygnVScsIDEyLCB2b2lkICopCisjZGVmaW5lIFVTQkRFVkZTX1JFQVBVUkIzMiBfSU9XKCdVJywgMTIsIHUzMikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWSBfSU9XKCdVJywgMTMsIHZvaWQgKikKKyNkZWZpbmUgVVNCREVWRlNfUkVBUFVSQk5ERUxBWTMyIF9JT1coJ1UnLCAxMywgdTMyKQorI2RlZmluZSBVU0JERVZGU19ESVNDU0lHTkFMIF9JT1IoJ1UnLCAxNCwgc3RydWN0IHVzYmRldmZzX2Rpc2Nvbm5lY3RzaWduYWwpCisjZGVmaW5lIFVTQkRFVkZTX0NMQUlNSU5URVJGQUNFIF9JT1IoJ1UnLCAxNSwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19SRUxFQVNFSU5URVJGQUNFIF9JT1IoJ1UnLCAxNiwgdW5zaWduZWQgaW50KQorI2RlZmluZSBVU0JERVZGU19DT05ORUNUSU5GTyBfSU9XKCdVJywgMTcsIHN0cnVjdCB1c2JkZXZmc19jb25uZWN0aW5mbykKKyNkZWZpbmUgVVNCREVWRlNfSU9DVEwgX0lPV1IoJ1UnLCAxOCwgc3RydWN0IHVzYmRldmZzX2lvY3RsKQorI2RlZmluZSBVU0JERVZGU19JT0NUTDMyIF9JT1dSKCdVJywgMTgsIHN0cnVjdCB1c2JkZXZmc19pb2N0bDMyKQorI2RlZmluZSBVU0JERVZGU19IVUJfUE9SVElORk8gX0lPUignVScsIDE5LCBzdHJ1Y3QgdXNiZGV2ZnNfaHViX3BvcnRpbmZvKQorI2RlZmluZSBVU0JERVZGU19SRVNFVCBfSU8oJ1UnLCAyMCkKKyNkZWZpbmUgVVNCREVWRlNfQ0xFQVJfSEFMVCBfSU9SKCdVJywgMjEsIHVuc2lnbmVkIGludCkKKyNkZWZpbmUgVVNCREVWRlNfRElTQ09OTkVDVCBfSU8oJ1UnLCAyMikKKyNkZWZpbmUgVVNCREVWRlNfQ09OTkVDVCBfSU8oJ1UnLCAyMykKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3VzZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWMwYjljYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91c2VyLmgKQEAgLTAsMCArMSwxMiBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2luY2x1ZGUgPGFzbS91c2VyLmg+CmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRpbWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC91dGltZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiMWJhOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRpbWUuaApAQCAtMCwwICsxLDIwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VVElNRV9ICisjZGVmaW5lIF9MSU5VWF9VVElNRV9ICisKK3N0cnVjdCB1dGltYnVmIHsKKyB0aW1lX3QgYWN0aW1lOworIHRpbWVfdCBtb2R0aW1lOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdXRzbmFtZS5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3V0c25hbWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYTZlZTg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3V0c25hbWUuaApAQCAtMCwwICsxLDQ0IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9VVFNOQU1FX0gKKyNkZWZpbmUgX0xJTlVYX1VUU05BTUVfSAorCisjZGVmaW5lIF9fT0xEX1VUU19MRU4gOAorCitzdHJ1Y3Qgb2xkb2xkX3V0c25hbWUgeworIGNoYXIgc3lzbmFtZVs5XTsKKyBjaGFyIG5vZGVuYW1lWzldOworIGNoYXIgcmVsZWFzZVs5XTsKKyBjaGFyIHZlcnNpb25bOV07CisgY2hhciBtYWNoaW5lWzldOworfTsKKworI2RlZmluZSBfX05FV19VVFNfTEVOIDY0CisKK3N0cnVjdCBvbGRfdXRzbmFtZSB7CisgY2hhciBzeXNuYW1lWzY1XTsKKyBjaGFyIG5vZGVuYW1lWzY1XTsKKyBjaGFyIHJlbGVhc2VbNjVdOworIGNoYXIgdmVyc2lvbls2NV07CisgY2hhciBtYWNoaW5lWzY1XTsKK307CisKK3N0cnVjdCBuZXdfdXRzbmFtZSB7CisgY2hhciBzeXNuYW1lWzY1XTsKKyBjaGFyIG5vZGVuYW1lWzY1XTsKKyBjaGFyIHJlbGVhc2VbNjVdOworIGNoYXIgdmVyc2lvbls2NV07CisgY2hhciBtYWNoaW5lWzY1XTsKKyBjaGFyIGRvbWFpbm5hbWVbNjVdOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmVyc2lvbi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZlcnNpb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iZWZmMGVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZlcnNpb24uaApAQCAtMCwwICsxLDEzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIExJTlVYX1ZFUlNJT05fQ09ERSAxMzI2MjYKKyNkZWZpbmUgS0VSTkVMX1ZFUlNJT04oYSxiLGMpICgoKGEpIDw8IDE2KSArICgoYikgPDwgOCkgKyAoYykpCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmZzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmZzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzA2MzZlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92ZnMuaApAQCAtMCwwICsxLDE3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9WRlNfSAorI2RlZmluZSBfTElOVVhfVkZTX0gKKworI2luY2x1ZGUgPGxpbnV4L3N0YXRmcy5oPgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92aWRlb2Rldi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWYzN2ZkZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92aWRlb2Rldi5oCkBAIC0wLDAgKzEsMzI3IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTElOVVhfVklERU9ERVZfSAorI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWX0gKKworI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorCitzdHJ1Y3QgdmlkZW9fY2FwYWJpbGl0eQoreworIGNoYXIgbmFtZVszMl07CisgaW50IHR5cGU7CisgaW50IGNoYW5uZWxzOworIGludCBhdWRpb3M7CisgaW50IG1heHdpZHRoOworIGludCBtYXhoZWlnaHQ7CisgaW50IG1pbndpZHRoOworIGludCBtaW5oZWlnaHQ7Cit9OworCitzdHJ1Y3QgdmlkZW9fY2hhbm5lbAoreworIGludCBjaGFubmVsOworIGNoYXIgbmFtZVszMl07CisgaW50IHR1bmVyczsKKyBfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fVkNfVFVORVIgMSAgCisjZGVmaW5lIFZJREVPX1ZDX0FVRElPIDIgIAorIF9fdTE2IHR5cGU7CisjZGVmaW5lIFZJREVPX1RZUEVfVFYgMQorI2RlZmluZSBWSURFT19UWVBFX0NBTUVSQSAyCisgX191MTYgbm9ybTsKK307CisKK3N0cnVjdCB2aWRlb190dW5lcgoreworIGludCB0dW5lcjsKKyBjaGFyIG5hbWVbMzJdOworIHVuc2lnbmVkIGxvbmcgcmFuZ2Vsb3csIHJhbmdlaGlnaDsKKyBfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fVFVORVJfUEFMIDEKKyNkZWZpbmUgVklERU9fVFVORVJfTlRTQyAyCisjZGVmaW5lIFZJREVPX1RVTkVSX1NFQ0FNIDQKKyNkZWZpbmUgVklERU9fVFVORVJfTE9XIDggIAorI2RlZmluZSBWSURFT19UVU5FUl9OT1JNIDE2ICAKKyNkZWZpbmUgVklERU9fVFVORVJfU1RFUkVPX09OIDEyOCAgCisjZGVmaW5lIFZJREVPX1RVTkVSX1JEU19PTiAyNTYgIAorI2RlZmluZSBWSURFT19UVU5FUl9NQlNfT04gNTEyICAKKyBfX3UxNiBtb2RlOworI2RlZmluZSBWSURFT19NT0RFX1BBTCAwCisjZGVmaW5lIFZJREVPX01PREVfTlRTQyAxCisjZGVmaW5lIFZJREVPX01PREVfU0VDQU0gMgorI2RlZmluZSBWSURFT19NT0RFX0FVVE8gMworIF9fdTE2IHNpZ25hbDsKK307CisKK3N0cnVjdCB2aWRlb19waWN0dXJlCit7CisgX191MTYgYnJpZ2h0bmVzczsKKyBfX3UxNiBodWU7CisgX191MTYgY29sb3VyOworIF9fdTE2IGNvbnRyYXN0OworIF9fdTE2IHdoaXRlbmVzczsKKyBfX3UxNiBkZXB0aDsKKyBfX3UxNiBwYWxldHRlOworI2RlZmluZSBWSURFT19QQUxFVFRFX0dSRVkgMSAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfSEkyNDAgMiAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUkdCNTY1IDMgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjI0IDQgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjMyIDUgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1JHQjU1NSA2ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjIgNyAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVZViA4CisjZGVmaW5lIFZJREVPX1BBTEVUVEVfVVlWWSA5ICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MjAgMTAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9ZVVY0MTEgMTEgIAorI2RlZmluZSBWSURFT19QQUxFVFRFX1JBVyAxMiAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIyUCAxMyAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDExUCAxNCAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDIwUCAxNSAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfWVVWNDEwUCAxNiAgCisjZGVmaW5lIFZJREVPX1BBTEVUVEVfUExBTkFSIDEzICAKKyNkZWZpbmUgVklERU9fUEFMRVRURV9DT01QT05FTlQgNyAgCit9OworCitzdHJ1Y3QgdmlkZW9fYXVkaW8KK3sKKyBpbnQgYXVkaW87CisgX191MTYgdm9sdW1lOworIF9fdTE2IGJhc3MsIHRyZWJsZTsKKyBfX3UzMiBmbGFnczsKKyNkZWZpbmUgVklERU9fQVVESU9fTVVURSAxCisjZGVmaW5lIFZJREVPX0FVRElPX01VVEFCTEUgMgorI2RlZmluZSBWSURFT19BVURJT19WT0xVTUUgNAorI2RlZmluZSBWSURFT19BVURJT19CQVNTIDgKKyNkZWZpbmUgVklERU9fQVVESU9fVFJFQkxFIDE2CisjZGVmaW5lIFZJREVPX0FVRElPX0JBTEFOQ0UgMzIKKyBjaGFyIG5hbWVbMTZdOworI2RlZmluZSBWSURFT19TT1VORF9NT05PIDEKKyNkZWZpbmUgVklERU9fU09VTkRfU1RFUkVPIDIKKyNkZWZpbmUgVklERU9fU09VTkRfTEFORzEgNAorI2RlZmluZSBWSURFT19TT1VORF9MQU5HMiA4CisgX191MTYgbW9kZTsKKyBfX3UxNiBiYWxhbmNlOworIF9fdTE2IHN0ZXA7Cit9OworCitzdHJ1Y3QgdmlkZW9fY2xpcAoreworIF9fczMyIHgseTsKKyBfX3MzMiB3aWR0aCwgaGVpZ2h0OworIHN0cnVjdCB2aWRlb19jbGlwICpuZXh0OworfTsKKworc3RydWN0IHZpZGVvX3dpbmRvdworeworIF9fdTMyIHgseTsKKyBfX3UzMiB3aWR0aCxoZWlnaHQ7CisgX191MzIgY2hyb21ha2V5OworIF9fdTMyIGZsYWdzOworIHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqY2xpcHM7CisgaW50IGNsaXBjb3VudDsKKyNkZWZpbmUgVklERU9fV0lORE9XX0lOVEVSTEFDRSAxCisjZGVmaW5lIFZJREVPX1dJTkRPV19DSFJPTUFLRVkgMTYgIAorI2RlZmluZSBWSURFT19DTElQX0JJVE1BUCAtMQorCisjZGVmaW5lIFZJREVPX0NMSVBNQVBfU0laRSAoMTI4ICogNjI1KQorfTsKKworc3RydWN0IHZpZGVvX2NhcHR1cmUKK3sKKyBfX3UzMiB4LHk7CisgX191MzIgd2lkdGgsIGhlaWdodDsKKyBfX3UxNiBkZWNpbWF0aW9uOworIF9fdTE2IGZsYWdzOworI2RlZmluZSBWSURFT19DQVBUVVJFX09ERCAwICAKKyNkZWZpbmUgVklERU9fQ0FQVFVSRV9FVkVOIDEKK307CisKK3N0cnVjdCB2aWRlb19idWZmZXIKK3sKKyB2b2lkICpiYXNlOworIGludCBoZWlnaHQsd2lkdGg7CisgaW50IGRlcHRoOworIGludCBieXRlc3BlcmxpbmU7Cit9OworCitzdHJ1Y3QgdmlkZW9fbW1hcAoreworIHVuc2lnbmVkIGludCBmcmFtZTsKKyBpbnQgaGVpZ2h0LHdpZHRoOworIHVuc2lnbmVkIGludCBmb3JtYXQ7Cit9OworCitzdHJ1Y3QgdmlkZW9fa2V5Cit7CisgX191OCBrZXlbOF07CisgX191MzIgZmxhZ3M7Cit9OworCitzdHJ1Y3QgdmlkZW9fbWJ1ZgoreworIGludCBzaXplOworIGludCBmcmFtZXM7CisgaW50IG9mZnNldHNbVklERU9fTUFYX0ZSQU1FXTsKK307CisKKyNkZWZpbmUgVklERU9fTk9fVU5JVCAoLTEpCisKK3N0cnVjdCB2aWRlb191bml0Cit7CisgaW50IHZpZGVvOworIGludCB2Ymk7CisgaW50IHJhZGlvOworIGludCBhdWRpbzsKKyBpbnQgdGVsZXRleHQ7Cit9OworCitzdHJ1Y3QgdmJpX2Zvcm1hdCB7CisgX191MzIgc2FtcGxpbmdfcmF0ZTsKKyBfX3UzMiBzYW1wbGVzX3Blcl9saW5lOworIF9fdTMyIHNhbXBsZV9mb3JtYXQ7CisgX19zMzIgc3RhcnRbMl07CisgX191MzIgY291bnRbMl07CisgX191MzIgZmxhZ3M7CisjZGVmaW5lIFZCSV9VTlNZTkMgMSAgCisjZGVmaW5lIFZCSV9JTlRFUkxBQ0VEIDIgIAorfTsKKworc3RydWN0IHZpZGVvX2luZm8KK3sKKyBfX3UzMiBmcmFtZV9jb3VudDsKKyBfX3UzMiBoX3NpemU7CisgX191MzIgdl9zaXplOworIF9fdTMyIHNtcHRlX3RpbWVjb2RlOworIF9fdTMyIHBpY3R1cmVfdHlwZTsKKyBfX3UzMiB0ZW1wb3JhbF9yZWZlcmVuY2U7CisgX191OCB1c2VyX2RhdGFbMjU2XTsKKworfTsKKworc3RydWN0IHZpZGVvX3BsYXlfbW9kZQoreworIGludCBtb2RlOworIGludCBwMTsKKyBpbnQgcDI7Cit9OworCitzdHJ1Y3QgdmlkZW9fY29kZQoreworIGNoYXIgbG9hZHdoYXRbMTZdOworIGludCBkYXRhc2l6ZTsKKyBfX3U4ICpkYXRhOworfTsKKworI2RlZmluZSBWSURJT0NHQ0FQIF9JT1IoJ3YnLDEsc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkpICAKKyNkZWZpbmUgVklESU9DR0NIQU4gX0lPV1IoJ3YnLDIsc3RydWN0IHZpZGVvX2NoYW5uZWwpICAKKyNkZWZpbmUgVklESU9DU0NIQU4gX0lPVygndicsMyxzdHJ1Y3QgdmlkZW9fY2hhbm5lbCkgIAorI2RlZmluZSBWSURJT0NHVFVORVIgX0lPV1IoJ3YnLDQsc3RydWN0IHZpZGVvX3R1bmVyKSAgCisjZGVmaW5lIFZJRElPQ1NUVU5FUiBfSU9XKCd2Jyw1LHN0cnVjdCB2aWRlb190dW5lcikgIAorI2RlZmluZSBWSURJT0NHUElDVCBfSU9SKCd2Jyw2LHN0cnVjdCB2aWRlb19waWN0dXJlKSAgCisjZGVmaW5lIFZJRElPQ1NQSUNUIF9JT1coJ3YnLDcsc3RydWN0IHZpZGVvX3BpY3R1cmUpICAKKyNkZWZpbmUgVklESU9DQ0FQVFVSRSBfSU9XKCd2Jyw4LGludCkgIAorI2RlZmluZSBWSURJT0NHV0lOIF9JT1IoJ3YnLDksIHN0cnVjdCB2aWRlb193aW5kb3cpICAKKyNkZWZpbmUgVklESU9DU1dJTiBfSU9XKCd2JywxMCwgc3RydWN0IHZpZGVvX3dpbmRvdykgIAorI2RlZmluZSBWSURJT0NHRkJVRiBfSU9SKCd2JywxMSwgc3RydWN0IHZpZGVvX2J1ZmZlcikgIAorI2RlZmluZSBWSURJT0NTRkJVRiBfSU9XKCd2JywxMiwgc3RydWN0IHZpZGVvX2J1ZmZlcikgIAorI2RlZmluZSBWSURJT0NLRVkgX0lPUigndicsMTMsIHN0cnVjdCB2aWRlb19rZXkpICAKKyNkZWZpbmUgVklESU9DR0ZSRVEgX0lPUigndicsMTQsIHVuc2lnbmVkIGxvbmcpICAKKyNkZWZpbmUgVklESU9DU0ZSRVEgX0lPVygndicsMTUsIHVuc2lnbmVkIGxvbmcpICAKKyNkZWZpbmUgVklESU9DR0FVRElPIF9JT1IoJ3YnLDE2LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pICAKKyNkZWZpbmUgVklESU9DU0FVRElPIF9JT1coJ3YnLDE3LCBzdHJ1Y3QgdmlkZW9fYXVkaW8pICAKKyNkZWZpbmUgVklESU9DU1lOQyBfSU9XKCd2JywxOCwgaW50KSAgCisjZGVmaW5lIFZJRElPQ01DQVBUVVJFIF9JT1coJ3YnLDE5LCBzdHJ1Y3QgdmlkZW9fbW1hcCkgIAorI2RlZmluZSBWSURJT0NHTUJVRiBfSU9SKCd2JywyMCwgc3RydWN0IHZpZGVvX21idWYpICAKKyNkZWZpbmUgVklESU9DR1VOSVQgX0lPUigndicsMjEsIHN0cnVjdCB2aWRlb191bml0KSAgCisjZGVmaW5lIFZJRElPQ0dDQVBUVVJFIF9JT1IoJ3YnLDIyLCBzdHJ1Y3QgdmlkZW9fY2FwdHVyZSkgIAorI2RlZmluZSBWSURJT0NTQ0FQVFVSRSBfSU9XKCd2JywyMywgc3RydWN0IHZpZGVvX2NhcHR1cmUpICAKKyNkZWZpbmUgVklESU9DU1BMQVlNT0RFIF9JT1coJ3YnLDI0LCBzdHJ1Y3QgdmlkZW9fcGxheV9tb2RlKSAgCisjZGVmaW5lIFZJRElPQ1NXUklURU1PREUgX0lPVygndicsMjUsIGludCkgIAorI2RlZmluZSBWSURJT0NHUExBWUlORk8gX0lPUigndicsMjYsIHN0cnVjdCB2aWRlb19pbmZvKSAgCisjZGVmaW5lIFZJRElPQ1NNSUNST0NPREUgX0lPVygndicsMjcsIHN0cnVjdCB2aWRlb19jb2RlKSAgCisjZGVmaW5lIFZJRElPQ0dWQklGTVQgX0lPUigndicsMjgsIHN0cnVjdCB2YmlfZm9ybWF0KSAgCisjZGVmaW5lIFZJRElPQ1NWQklGTVQgX0lPVygndicsMjksIHN0cnVjdCB2YmlfZm9ybWF0KSAgCisKKyNkZWZpbmUgQkFTRV9WSURJT0NQUklWQVRFIDE5MiAgCisKKyNkZWZpbmUgVklEX1dSSVRFX01QRUdfQVVEIDAKKyNkZWZpbmUgVklEX1dSSVRFX01QRUdfVklEIDEKKyNkZWZpbmUgVklEX1dSSVRFX09TRCAyCisjZGVmaW5lIFZJRF9XUklURV9UVFggMworI2RlZmluZSBWSURfV1JJVEVfQ0MgNAorI2RlZmluZSBWSURfV1JJVEVfTUpQRUcgNQorCisjZGVmaW5lIFZJRF9QTEFZX1ZJRF9PVVRfTU9ERSAwCisKKyNkZWZpbmUgVklEX1BMQVlfR0VOTE9DSyAxCisKKyNkZWZpbmUgVklEX1BMQVlfTk9STUFMIDIKKyNkZWZpbmUgVklEX1BMQVlfUEFVU0UgMworI2RlZmluZSBWSURfUExBWV9TSU5HTEVfRlJBTUUgNAorI2RlZmluZSBWSURfUExBWV9GQVNUX0ZPUldBUkQgNQorI2RlZmluZSBWSURfUExBWV9TTE9XX01PVElPTiA2CisjZGVmaW5lIFZJRF9QTEFZX0lNTUVESUFURV9OT1JNQUwgNworI2RlZmluZSBWSURfUExBWV9TV0lUQ0hfQ0hBTk5FTFMgOAorI2RlZmluZSBWSURfUExBWV9GUkVFWkVfRlJBTUUgOQorI2RlZmluZSBWSURfUExBWV9TVElMTF9NT0RFIDEwCisjZGVmaW5lIFZJRF9QTEFZX01BU1RFUl9NT0RFIDExCisKKyNkZWZpbmUgVklEX1BMQVlfTUFTVEVSX05PTkUgMQorI2RlZmluZSBWSURfUExBWV9NQVNURVJfVklERU8gMgorI2RlZmluZSBWSURfUExBWV9NQVNURVJfQVVESU8gMworI2RlZmluZSBWSURfUExBWV9BQ1RJVkVfU0NBTkxJTkVTIDEyCisKKyNkZWZpbmUgVklEX1BMQVlfUkVTRVQgMTMKKyNkZWZpbmUgVklEX1BMQVlfRU5EX01BUksgMTQKKworI2RlZmluZSBWSURfSEFSRFdBUkVfQlQ4NDggMQorI2RlZmluZSBWSURfSEFSRFdBUkVfUUNBTV9CVyAyCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9QTVMgMworI2RlZmluZSBWSURfSEFSRFdBUkVfUUNBTV9DIDQKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1BTRVVETyA1CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TQUE1MjQ5IDYKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0FaVEVDSCA3CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TRjE2TUkgOAorI2RlZmluZSBWSURfSEFSRFdBUkVfUlRSQUNLIDkKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1pPTFRSSVggMTAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NBQTcxNDYgMTEKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1ZJREVVTSAxMiAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9SVFJBQ0syIDEzCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9QRVJNRURJQTIgMTQgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfUklWQTEyOCAxNSAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9QTEFOQiAxNiAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9CUk9BRFdBWSAxNyAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9HRU1URUsgMTgKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1RZUEhPT04gMTkKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1ZJTk8gMjAgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfQ0FERVQgMjEgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfVFJVU1QgMjIgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfVEVSUkFURUMgMjMgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfQ1BJQSAyNAorI2RlZmluZSBWSURfSEFSRFdBUkVfWlIzNjEyMCAyNSAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9aUjM2MDY3IDI2ICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX09WNTExIDI3CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9aUjM1NjcwMCAyOCAgCisjZGVmaW5lIFZJRF9IQVJEV0FSRV9XOTk2NiAyOQorI2RlZmluZSBWSURfSEFSRFdBUkVfU0U0MDEgMzAgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfUFdDIDMxICAKKyNkZWZpbmUgVklEX0hBUkRXQVJFX01FWUUgMzIgIAorI2RlZmluZSBWSURfSEFSRFdBUkVfQ1BJQTIgMzMKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1ZJQ0FNIDM0CisjZGVmaW5lIFZJRF9IQVJEV0FSRV9TRjE2Rk1SMiAzNQorI2RlZmluZSBWSURfSEFSRFdBUkVfVzk5NjhDRiAzNgorI2RlZmluZSBWSURfSEFSRFdBUkVfU0FBNzExNEggMzcKKyNkZWZpbmUgVklEX0hBUkRXQVJFX1NOOUMxMDIgMzgKKyNkZWZpbmUgVklEX0hBUkRXQVJFX0FSViAzOQorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZpZGVvZGV2Mi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZTRlOTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdmlkZW9kZXYyLmgKQEAgLTAsMCArMSw5NjMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19MSU5VWF9WSURFT0RFVjJfSAorI2RlZmluZSBfX0xJTlVYX1ZJREVPREVWMl9ICisjZGVmaW5lIF9fdXNlcgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNkZWZpbmUgVklERU9fTUFYX0ZSQU1FIDMyCisKKyNkZWZpbmUgVklEX1RZUEVfQ0FQVFVSRSAxICAKKyNkZWZpbmUgVklEX1RZUEVfVFVORVIgMiAgCisjZGVmaW5lIFZJRF9UWVBFX1RFTEVURVhUIDQgIAorI2RlZmluZSBWSURfVFlQRV9PVkVSTEFZIDggIAorI2RlZmluZSBWSURfVFlQRV9DSFJPTUFLRVkgMTYgIAorI2RlZmluZSBWSURfVFlQRV9DTElQUElORyAzMiAgCisjZGVmaW5lIFZJRF9UWVBFX0ZSQU1FUkFNIDY0ICAKKyNkZWZpbmUgVklEX1RZUEVfU0NBTEVTIDEyOCAgCisjZGVmaW5lIFZJRF9UWVBFX01PTk9DSFJPTUUgMjU2ICAKKyNkZWZpbmUgVklEX1RZUEVfU1VCQ0FQVFVSRSA1MTIgIAorI2RlZmluZSBWSURfVFlQRV9NUEVHX0RFQ09ERVIgMTAyNCAgCisjZGVmaW5lIFZJRF9UWVBFX01QRUdfRU5DT0RFUiAyMDQ4ICAKKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfREVDT0RFUiA0MDk2ICAKKyNkZWZpbmUgVklEX1RZUEVfTUpQRUdfRU5DT0RFUiA4MTkyICAKKworI2RlZmluZSB2NGwyX2ZvdXJjYyhhLGIsYyxkKSAgKCgoX191MzIpKGEpPDwwKXwoKF9fdTMyKShiKTw8OCl8KChfX3UzMikoYyk8PDE2KXwoKF9fdTMyKShkKTw8MjQpKQorCitlbnVtIHY0bDJfZmllbGQgeworIFY0TDJfRklFTERfQU5ZID0gMCwKKyBWNEwyX0ZJRUxEX05PTkUgPSAxLAorIFY0TDJfRklFTERfVE9QID0gMiwKKyBWNEwyX0ZJRUxEX0JPVFRPTSA9IDMsCisgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEID0gNCwKKyBWNEwyX0ZJRUxEX1NFUV9UQiA9IDUsCisgVjRMMl9GSUVMRF9TRVFfQlQgPSA2LAorIFY0TDJfRklFTERfQUxURVJOQVRFID0gNywKK307CisjZGVmaW5lIFY0TDJfRklFTERfSEFTX1RPUChmaWVsZCkgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX1RPUCB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVFRPTShmaWVsZCkgICAoKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0JPVFRPTSB8fCAgKGZpZWxkKSA9PSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfVEIgfHwgIChmaWVsZCkgPT0gVjRMMl9GSUVMRF9TRVFfQlQpCisjZGVmaW5lIFY0TDJfRklFTERfSEFTX0JPVEgoZmllbGQpICAgKChmaWVsZCkgPT0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX1RCIHx8ICAoZmllbGQpID09IFY0TDJfRklFTERfU0VRX0JUKQorCitlbnVtIHY0bDJfYnVmX3R5cGUgeworIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSA9IDEsCisgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgPSAyLAorIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWSA9IDMsCisgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSA9IDQsCisgVjRMMl9CVUZfVFlQRV9WQklfT1VUUFVUID0gNSwKKworIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFID0gNiwKKyBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUID0gNywKKyBWNEwyX0JVRl9UWVBFX1BSSVZBVEUgPSAweDgwLAorfTsKKworZW51bSB2NGwyX2N0cmxfdHlwZSB7CisgVjRMMl9DVFJMX1RZUEVfSU5URUdFUiA9IDEsCisgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiA9IDIsCisgVjRMMl9DVFJMX1RZUEVfTUVOVSA9IDMsCisgVjRMMl9DVFJMX1RZUEVfQlVUVE9OID0gNCwKKyBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSNjQgPSA1LAorIFY0TDJfQ1RSTF9UWVBFX0NUUkxfQ0xBU1MgPSA2LAorfTsKKworZW51bSB2NGwyX3R1bmVyX3R5cGUgeworIFY0TDJfVFVORVJfUkFESU8gPSAxLAorIFY0TDJfVFVORVJfQU5BTE9HX1RWID0gMiwKKyBWNEwyX1RVTkVSX0RJR0lUQUxfVFYgPSAzLAorfTsKKworZW51bSB2NGwyX21lbW9yeSB7CisgVjRMMl9NRU1PUllfTU1BUCA9IDEsCisgVjRMMl9NRU1PUllfVVNFUlBUUiA9IDIsCisgVjRMMl9NRU1PUllfT1ZFUkxBWSA9IDMsCit9OworCitlbnVtIHY0bDJfY29sb3JzcGFjZSB7CisKKyBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNID0gMSwKKworIFY0TDJfQ09MT1JTUEFDRV9TTVBURTI0ME0gPSAyLAorCisgVjRMMl9DT0xPUlNQQUNFX1JFQzcwOSA9IDMsCisKKyBWNEwyX0NPTE9SU1BBQ0VfQlQ4NzggPSA0LAorCisgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fTSA9IDUsCisgVjRMMl9DT0xPUlNQQUNFXzQ3MF9TWVNURU1fQkcgPSA2LAorCisgVjRMMl9DT0xPUlNQQUNFX0pQRUcgPSA3LAorCisgVjRMMl9DT0xPUlNQQUNFX1NSR0IgPSA4LAorfTsKKworZW51bSB2NGwyX3ByaW9yaXR5IHsKKyBWNEwyX1BSSU9SSVRZX1VOU0VUID0gMCwKKyBWNEwyX1BSSU9SSVRZX0JBQ0tHUk9VTkQgPSAxLAorIFY0TDJfUFJJT1JJVFlfSU5URVJBQ1RJVkUgPSAyLAorIFY0TDJfUFJJT1JJVFlfUkVDT1JEID0gMywKKyBWNEwyX1BSSU9SSVRZX0RFRkFVTFQgPSBWNEwyX1BSSU9SSVRZX0lOVEVSQUNUSVZFLAorfTsKKworc3RydWN0IHY0bDJfcmVjdCB7CisgX19zMzIgbGVmdDsKKyBfX3MzMiB0b3A7CisgX19zMzIgd2lkdGg7CisgX19zMzIgaGVpZ2h0OworfTsKKworc3RydWN0IHY0bDJfZnJhY3QgeworIF9fdTMyIG51bWVyYXRvcjsKKyBfX3UzMiBkZW5vbWluYXRvcjsKK307CisKK3N0cnVjdCB2NGwyX2NhcGFiaWxpdHkKK3sKKyBfX3U4IGRyaXZlclsxNl07CisgX191OCBjYXJkWzMyXTsKKyBfX3U4IGJ1c19pbmZvWzMyXTsKKyBfX3UzMiB2ZXJzaW9uOworIF9fdTMyIGNhcGFiaWxpdGllczsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fQ0FQVFVSRSAweDAwMDAwMDAxICAKKyNkZWZpbmUgVjRMMl9DQVBfVklERU9fT1VUUFVUIDB4MDAwMDAwMDIgIAorI2RlZmluZSBWNEwyX0NBUF9WSURFT19PVkVSTEFZIDB4MDAwMDAwMDQgIAorI2RlZmluZSBWNEwyX0NBUF9WQklfQ0FQVFVSRSAweDAwMDAwMDEwICAKKyNkZWZpbmUgVjRMMl9DQVBfVkJJX09VVFBVVCAweDAwMDAwMDIwICAKKyNkZWZpbmUgVjRMMl9DQVBfU0xJQ0VEX1ZCSV9DQVBUVVJFIDB4MDAwMDAwNDAgIAorI2RlZmluZSBWNEwyX0NBUF9TTElDRURfVkJJX09VVFBVVCAweDAwMDAwMDgwICAKKyNkZWZpbmUgVjRMMl9DQVBfUkRTX0NBUFRVUkUgMHgwMDAwMDEwMCAgCisKKyNkZWZpbmUgVjRMMl9DQVBfVFVORVIgMHgwMDAxMDAwMCAgCisjZGVmaW5lIFY0TDJfQ0FQX0FVRElPIDB4MDAwMjAwMDAgIAorI2RlZmluZSBWNEwyX0NBUF9SQURJTyAweDAwMDQwMDAwICAKKworI2RlZmluZSBWNEwyX0NBUF9SRUFEV1JJVEUgMHgwMTAwMDAwMCAgCisjZGVmaW5lIFY0TDJfQ0FQX0FTWU5DSU8gMHgwMjAwMDAwMCAgCisjZGVmaW5lIFY0TDJfQ0FQX1NUUkVBTUlORyAweDA0MDAwMDAwICAKKworc3RydWN0IHY0bDJfcGl4X2Zvcm1hdAoreworIF9fdTMyIHdpZHRoOworIF9fdTMyIGhlaWdodDsKKyBfX3UzMiBwaXhlbGZvcm1hdDsKKyBlbnVtIHY0bDJfZmllbGQgZmllbGQ7CisgX191MzIgYnl0ZXNwZXJsaW5lOworIF9fdTMyIHNpemVpbWFnZTsKKyBlbnVtIHY0bDJfY29sb3JzcGFjZSBjb2xvcnNwYWNlOworIF9fdTMyIHByaXY7Cit9OworCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0IzMzIgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJzEnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTUgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJ08nKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NjUgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJ1AnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9SR0I1NTVYIHY0bDJfZm91cmNjKCdSJywnRycsJ0InLCdRJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCNTY1WCB2NGwyX2ZvdXJjYygnUicsJ0cnLCdCJywnUicpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0JHUjI0IHY0bDJfZm91cmNjKCdCJywnRycsJ1InLCczJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfUkdCMjQgdjRsMl9mb3VyY2MoJ1InLCdHJywnQicsJzMnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9CR1IzMiB2NGwyX2ZvdXJjYygnQicsJ0cnLCdSJywnNCcpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1JHQjMyIHY0bDJfZm91cmNjKCdSJywnRycsJ0InLCc0JykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfR1JFWSB2NGwyX2ZvdXJjYygnRycsJ1InLCdFJywnWScpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQxMCB2NGwyX2ZvdXJjYygnWScsJ1YnLCdVJywnOScpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lWVTQyMCB2NGwyX2ZvdXJjYygnWScsJ1YnLCcxJywnMicpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVWVYgdjRsMl9mb3VyY2MoJ1knLCdVJywnWScsJ1YnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9VWVZZIHY0bDJfZm91cmNjKCdVJywnWScsJ1YnLCdZJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDIyUCB2NGwyX2ZvdXJjYygnNCcsJzInLCcyJywnUCcpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1lVVjQxMVAgdjRsMl9mb3VyY2MoJzQnLCcxJywnMScsJ1AnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZNDFQIHY0bDJfZm91cmNjKCdZJywnNCcsJzEnLCdQJykgIAorCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9OVjEyIHY0bDJfZm91cmNjKCdOJywnVicsJzEnLCcyJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfTlYyMSB2NGwyX2ZvdXJjYygnTicsJ1YnLCcyJywnMScpICAKKworI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDEwIHY0bDJfZm91cmNjKCdZJywnVScsJ1YnLCc5JykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVVWNDIwIHY0bDJfZm91cmNjKCdZJywnVScsJzEnLCcyJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfWVlVViB2NGwyX2ZvdXJjYygnWScsJ1knLCdVJywnVicpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0hJMjQwIHY0bDJfZm91cmNjKCdIJywnSScsJzInLCc0JykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfSE0xMiB2NGwyX2ZvdXJjYygnSCcsJ00nLCcxJywnMicpICAKKworI2RlZmluZSBWNEwyX1BJWF9GTVRfU0JHR1I4IHY0bDJfZm91cmNjKCdCJywnQScsJzgnLCcxJykgIAorCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9NSlBFRyB2NGwyX2ZvdXJjYygnTScsJ0onLCdQJywnRycpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX0pQRUcgdjRsMl9mb3VyY2MoJ0onLCdQJywnRScsJ0cnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9EViB2NGwyX2ZvdXJjYygnZCcsJ3YnLCdzJywnZCcpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01QRUcgdjRsMl9mb3VyY2MoJ00nLCdQJywnRScsJ0cnKSAgCisKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1dOVkEgdjRsMl9mb3VyY2MoJ1cnLCdOJywnVicsJ0EnKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TTjlDMTBYIHY0bDJfZm91cmNjKCdTJywnOScsJzEnLCcwJykgIAorI2RlZmluZSBWNEwyX1BJWF9GTVRfUFdDMSB2NGwyX2ZvdXJjYygnUCcsJ1cnLCdDJywnMScpICAKKyNkZWZpbmUgVjRMMl9QSVhfRk1UX1BXQzIgdjRsMl9mb3VyY2MoJ1AnLCdXJywnQycsJzInKSAgCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9FVDYxWDI1MSB2NGwyX2ZvdXJjYygnRScsJzYnLCcyJywnNScpICAKKworc3RydWN0IHY0bDJfZm10ZGVzYworeworIF9fdTMyIGluZGV4OworIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworIF9fdTMyIGZsYWdzOworIF9fdTggZGVzY3JpcHRpb25bMzJdOworIF9fdTMyIHBpeGVsZm9ybWF0OworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQgMHgwMDAxCisKK3N0cnVjdCB2NGwyX3RpbWVjb2RlCit7CisgX191MzIgdHlwZTsKKyBfX3UzMiBmbGFnczsKKyBfX3U4IGZyYW1lczsKKyBfX3U4IHNlY29uZHM7CisgX191OCBtaW51dGVzOworIF9fdTggaG91cnM7CisgX191OCB1c2VyYml0c1s0XTsKK307CisKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzI0RlBTIDEKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzI1RlBTIDIKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzMwRlBTIDMKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzUwRlBTIDQKKyNkZWZpbmUgVjRMMl9UQ19UWVBFXzYwRlBTIDUKKworI2RlZmluZSBWNEwyX1RDX0ZMQUdfRFJPUEZSQU1FIDB4MDAwMSAgCisjZGVmaW5lIFY0TDJfVENfRkxBR19DT0xPUkZSQU1FIDB4MDAwMgorI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX2ZpZWxkIDB4MDAwQworI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTX1VTRVJERUZJTkVEIDB4MDAwMAorI2RlZmluZSBWNEwyX1RDX1VTRVJCSVRTXzhCSVRDSEFSUyAweDAwMDgKKworc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uCit7CisgaW50IHF1YWxpdHk7CisKKyBpbnQgQVBQbjsKKyBpbnQgQVBQX2xlbjsKKyBjaGFyIEFQUF9kYXRhWzYwXTsKKworIGludCBDT01fbGVuOworIGNoYXIgQ09NX2RhdGFbNjBdOworCisgX191MzIganBlZ19tYXJrZXJzOworCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfREhUICgxPDwzKSAgCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFFUICgxPDw0KSAgCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfRFJJICgxPDw1KSAgCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQ09NICgxPDw2KSAgCisjZGVmaW5lIFY0TDJfSlBFR19NQVJLRVJfQVBQICgxPDw3KSAgCit9OworCitzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycworeworIF9fdTMyIGNvdW50OworIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworIGVudW0gdjRsMl9tZW1vcnkgbWVtb3J5OworIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworc3RydWN0IHY0bDJfYnVmZmVyCit7CisgX191MzIgaW5kZXg7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisgX191MzIgYnl0ZXN1c2VkOworIF9fdTMyIGZsYWdzOworIGVudW0gdjRsMl9maWVsZCBmaWVsZDsKKyBzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7Cisgc3RydWN0IHY0bDJfdGltZWNvZGUgdGltZWNvZGU7CisgX191MzIgc2VxdWVuY2U7CisKKyBlbnVtIHY0bDJfbWVtb3J5IG1lbW9yeTsKKyB1bmlvbiB7CisgX191MzIgb2Zmc2V0OworIHVuc2lnbmVkIGxvbmcgdXNlcnB0cjsKKyB9IG07CisgX191MzIgbGVuZ3RoOworIF9fdTMyIGlucHV0OworIF9fdTMyIHJlc2VydmVkOworfTsKKworI2RlZmluZSBWNEwyX0JVRl9GTEFHX01BUFBFRCAweDAwMDEgIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1FVRVVFRCAweDAwMDIgIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0RPTkUgMHgwMDA0ICAKKyNkZWZpbmUgVjRMMl9CVUZfRkxBR19LRVlGUkFNRSAweDAwMDggIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1BGUkFNRSAweDAwMTAgIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX0JGUkFNRSAweDAwMjAgIAorI2RlZmluZSBWNEwyX0JVRl9GTEFHX1RJTUVDT0RFIDB4MDEwMCAgCisjZGVmaW5lIFY0TDJfQlVGX0ZMQUdfSU5QVVQgMHgwMjAwICAKKworc3RydWN0IHY0bDJfZnJhbWVidWZmZXIKK3sKKyBfX3UzMiBjYXBhYmlsaXR5OworIF9fdTMyIGZsYWdzOworCisgdm9pZCogYmFzZTsKKyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IGZtdDsKK307CisKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9FWFRFUk5PVkVSTEFZIDB4MDAwMQorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0NIUk9NQUtFWSAweDAwMDIKKyNkZWZpbmUgVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HIDB4MDAwNAorI2RlZmluZSBWNEwyX0ZCVUZfQ0FQX0JJVE1BUF9DTElQUElORyAweDAwMDgKKworI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19QUklNQVJZIDB4MDAwMQorI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZIDB4MDAwMgorI2RlZmluZSBWNEwyX0ZCVUZfRkxBR19DSFJPTUFLRVkgMHgwMDA0CisKK3N0cnVjdCB2NGwyX2NsaXAKK3sKKyBzdHJ1Y3QgdjRsMl9yZWN0IGM7Cisgc3RydWN0IHY0bDJfY2xpcCBfX3VzZXIgKm5leHQ7Cit9OworCitzdHJ1Y3QgdjRsMl93aW5kb3cKK3sKKyBzdHJ1Y3QgdjRsMl9yZWN0IHc7CisgZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworIF9fdTMyIGNocm9tYWtleTsKKyBzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqY2xpcHM7CisgX191MzIgY2xpcGNvdW50OworIHZvaWQgX191c2VyICpiaXRtYXA7Cit9OworCitzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybQoreworIF9fdTMyIGNhcGFiaWxpdHk7CisgX191MzIgY2FwdHVyZW1vZGU7Cisgc3RydWN0IHY0bDJfZnJhY3QgdGltZXBlcmZyYW1lOworIF9fdTMyIGV4dGVuZGVkbW9kZTsKKyBfX3UzMiByZWFkYnVmZmVyczsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKKyNkZWZpbmUgVjRMMl9NT0RFX0hJR0hRVUFMSVRZIDB4MDAwMSAgCisjZGVmaW5lIFY0TDJfQ0FQX1RJTUVQRVJGUkFNRSAweDEwMDAgIAorCitzdHJ1Y3QgdjRsMl9vdXRwdXRwYXJtCit7CisgX191MzIgY2FwYWJpbGl0eTsKKyBfX3UzMiBvdXRwdXRtb2RlOworIHN0cnVjdCB2NGwyX2ZyYWN0IHRpbWVwZXJmcmFtZTsKKyBfX3UzMiBleHRlbmRlZG1vZGU7CisgX191MzIgd3JpdGVidWZmZXJzOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworc3RydWN0IHY0bDJfY3JvcGNhcCB7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7Cisgc3RydWN0IHY0bDJfcmVjdCBib3VuZHM7Cisgc3RydWN0IHY0bDJfcmVjdCBkZWZyZWN0OworIHN0cnVjdCB2NGwyX2ZyYWN0IHBpeGVsYXNwZWN0OworfTsKKworc3RydWN0IHY0bDJfY3JvcCB7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7Cisgc3RydWN0IHY0bDJfcmVjdCBjOworfTsKKwordHlwZWRlZiBfX3U2NCB2NGwyX3N0ZF9pZDsKKworI2RlZmluZSBWNEwyX1NURF9QQUxfQiAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDEpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9CMSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMDIpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9HICgodjRsMl9zdGRfaWQpMHgwMDAwMDAwNCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0ggKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDA4KQorI2RlZmluZSBWNEwyX1NURF9QQUxfSSAoKHY0bDJfc3RkX2lkKTB4MDAwMDAwMTApCisjZGVmaW5lIFY0TDJfU1REX1BBTF9EICgodjRsMl9zdGRfaWQpMHgwMDAwMDAyMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0QxICgodjRsMl9zdGRfaWQpMHgwMDAwMDA0MCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0sgKCh2NGwyX3N0ZF9pZCkweDAwMDAwMDgwKQorCisjZGVmaW5lIFY0TDJfU1REX1BBTF9NICgodjRsMl9zdGRfaWQpMHgwMDAwMDEwMCkKKyNkZWZpbmUgVjRMMl9TVERfUEFMX04gKCh2NGwyX3N0ZF9pZCkweDAwMDAwMjAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfTmMgKCh2NGwyX3N0ZF9pZCkweDAwMDAwNDAwKQorI2RlZmluZSBWNEwyX1NURF9QQUxfNjAgKCh2NGwyX3N0ZF9pZCkweDAwMDAwODAwKQorCisjZGVmaW5lIFY0TDJfU1REX05UU0NfTSAoKHY0bDJfc3RkX2lkKTB4MDAwMDEwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfTV9KUCAoKHY0bDJfc3RkX2lkKTB4MDAwMDIwMDApCisjZGVmaW5lIFY0TDJfU1REX05UU0NfNDQzICgodjRsMl9zdGRfaWQpMHgwMDAwNDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfTlRTQ19NX0tSICgodjRsMl9zdGRfaWQpMHgwMDAwODAwMCkKKworI2RlZmluZSBWNEwyX1NURF9TRUNBTV9CICgodjRsMl9zdGRfaWQpMHgwMDAxMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fRCAoKHY0bDJfc3RkX2lkKTB4MDAwMjAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0cgKCh2NGwyX3N0ZF9pZCkweDAwMDQwMDAwKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9IICgodjRsMl9zdGRfaWQpMHgwMDA4MDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fSyAoKHY0bDJfc3RkX2lkKTB4MDAxMDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0sxICgodjRsMl9zdGRfaWQpMHgwMDIwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfU0VDQU1fTCAoKHY0bDJfc3RkX2lkKTB4MDA0MDAwMDApCisjZGVmaW5lIFY0TDJfU1REX1NFQ0FNX0xDICgodjRsMl9zdGRfaWQpMHgwMDgwMDAwMCkKKworI2RlZmluZSBWNEwyX1NURF9BVFNDXzhfVlNCICgodjRsMl9zdGRfaWQpMHgwMTAwMDAwMCkKKyNkZWZpbmUgVjRMMl9TVERfQVRTQ18xNl9WU0IgKCh2NGwyX3N0ZF9pZCkweDAyMDAwMDAwKQorCisjZGVmaW5lIFY0TDJfU1REX01OIChWNEwyX1NURF9QQUxfTXxWNEwyX1NURF9QQUxfTnxWNEwyX1NURF9QQUxfTmN8VjRMMl9TVERfTlRTQykKKyNkZWZpbmUgVjRMMl9TVERfQiAoVjRMMl9TVERfUEFMX0J8VjRMMl9TVERfUEFMX0IxfFY0TDJfU1REX1NFQ0FNX0IpCisjZGVmaW5lIFY0TDJfU1REX0dIIChWNEwyX1NURF9QQUxfR3xWNEwyX1NURF9QQUxfSHxWNEwyX1NURF9TRUNBTV9HfFY0TDJfU1REX1NFQ0FNX0gpCisjZGVmaW5lIFY0TDJfU1REX0RLIChWNEwyX1NURF9QQUxfREt8VjRMMl9TVERfU0VDQU1fREspCisKKyNkZWZpbmUgVjRMMl9TVERfUEFMX0JHIChWNEwyX1NURF9QQUxfQiB8ICBWNEwyX1NURF9QQUxfQjEgfCAgVjRMMl9TVERfUEFMX0cpCisjZGVmaW5lIFY0TDJfU1REX1BBTF9ESyAoVjRMMl9TVERfUEFMX0QgfCAgVjRMMl9TVERfUEFMX0QxIHwgIFY0TDJfU1REX1BBTF9LKQorI2RlZmluZSBWNEwyX1NURF9QQUwgKFY0TDJfU1REX1BBTF9CRyB8ICBWNEwyX1NURF9QQUxfREsgfCAgVjRMMl9TVERfUEFMX0ggfCAgVjRMMl9TVERfUEFMX0kpCisjZGVmaW5lIFY0TDJfU1REX05UU0MgKFY0TDJfU1REX05UU0NfTSB8ICBWNEwyX1NURF9OVFNDX01fSlAgfCAgVjRMMl9TVERfTlRTQ19NX0tSKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTV9ESyAoVjRMMl9TVERfU0VDQU1fRCB8ICBWNEwyX1NURF9TRUNBTV9LIHwgIFY0TDJfU1REX1NFQ0FNX0sxKQorI2RlZmluZSBWNEwyX1NURF9TRUNBTSAoVjRMMl9TVERfU0VDQU1fQiB8ICBWNEwyX1NURF9TRUNBTV9HIHwgIFY0TDJfU1REX1NFQ0FNX0ggfCAgVjRMMl9TVERfU0VDQU1fREsgfCAgVjRMMl9TVERfU0VDQU1fTCB8ICBWNEwyX1NURF9TRUNBTV9MQykKKworI2RlZmluZSBWNEwyX1NURF81MjVfNjAgKFY0TDJfU1REX1BBTF9NIHwgIFY0TDJfU1REX1BBTF82MCB8ICBWNEwyX1NURF9OVFNDIHwgIFY0TDJfU1REX05UU0NfNDQzKQorI2RlZmluZSBWNEwyX1NURF82MjVfNTAgKFY0TDJfU1REX1BBTCB8ICBWNEwyX1NURF9QQUxfTiB8ICBWNEwyX1NURF9QQUxfTmMgfCAgVjRMMl9TVERfU0VDQU0pCisjZGVmaW5lIFY0TDJfU1REX0FUU0MgKFY0TDJfU1REX0FUU0NfOF9WU0IgfCAgVjRMMl9TVERfQVRTQ18xNl9WU0IpCisKKyNkZWZpbmUgVjRMMl9TVERfVU5LTk9XTiAwCisjZGVmaW5lIFY0TDJfU1REX0FMTCAoVjRMMl9TVERfNTI1XzYwIHwgIFY0TDJfU1REXzYyNV81MCkKKworc3RydWN0IHY0bDJfc3RhbmRhcmQKK3sKKyBfX3UzMiBpbmRleDsKKyB2NGwyX3N0ZF9pZCBpZDsKKyBfX3U4IG5hbWVbMjRdOworIHN0cnVjdCB2NGwyX2ZyYWN0IGZyYW1lcGVyaW9kOworIF9fdTMyIGZyYW1lbGluZXM7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCitzdHJ1Y3QgdjRsMl9pbnB1dAoreworIF9fdTMyIGluZGV4OworIF9fdTggbmFtZVszMl07CisgX191MzIgdHlwZTsKKyBfX3UzMiBhdWRpb3NldDsKKyBfX3UzMiB0dW5lcjsKKyB2NGwyX3N0ZF9pZCBzdGQ7CisgX191MzIgc3RhdHVzOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfVFVORVIgMQorI2RlZmluZSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBIDIKKworI2RlZmluZSBWNEwyX0lOX1NUX05PX1BPV0VSIDB4MDAwMDAwMDEgIAorI2RlZmluZSBWNEwyX0lOX1NUX05PX1NJR05BTCAweDAwMDAwMDAyCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQ09MT1IgMHgwMDAwMDAwNAorCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fSF9MT0NLIDB4MDAwMDAxMDAgIAorI2RlZmluZSBWNEwyX0lOX1NUX0NPTE9SX0tJTEwgMHgwMDAwMDIwMCAgCisKKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19TWU5DIDB4MDAwMTAwMDAgIAorI2RlZmluZSBWNEwyX0lOX1NUX05PX0VRVSAweDAwMDIwMDAwICAKKyNkZWZpbmUgVjRMMl9JTl9TVF9OT19DQVJSSUVSIDB4MDAwNDAwMDAgIAorCisjZGVmaW5lIFY0TDJfSU5fU1RfTUFDUk9WSVNJT04gMHgwMTAwMDAwMCAgCisjZGVmaW5lIFY0TDJfSU5fU1RfTk9fQUNDRVNTIDB4MDIwMDAwMDAgIAorI2RlZmluZSBWNEwyX0lOX1NUX1ZUUiAweDA0MDAwMDAwICAKKworc3RydWN0IHY0bDJfb3V0cHV0Cit7CisgX191MzIgaW5kZXg7CisgX191OCBuYW1lWzMyXTsKKyBfX3UzMiB0eXBlOworIF9fdTMyIGF1ZGlvc2V0OworIF9fdTMyIG1vZHVsYXRvcjsKKyB2NGwyX3N0ZF9pZCBzdGQ7CisgX191MzIgcmVzZXJ2ZWRbNF07Cit9OworCisjZGVmaW5lIFY0TDJfT1VUUFVUX1RZUEVfTU9EVUxBVE9SIDEKKyNkZWZpbmUgVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0cgMgorI2RlZmluZSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVkgMworCitzdHJ1Y3QgdjRsMl9jb250cm9sCit7CisgX191MzIgaWQ7CisgX19zMzIgdmFsdWU7Cit9OworCitzdHJ1Y3QgdjRsMl9leHRfY29udHJvbAoreworIF9fdTMyIGlkOworIF9fdTMyIHJlc2VydmVkMlsyXTsKKyB1bmlvbiB7CisgX19zMzIgdmFsdWU7CisgX19zNjQgdmFsdWU2NDsKKyB2b2lkICpyZXNlcnZlZDsKKyB9OworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2NGwyX2V4dF9jb250cm9scworeworIF9fdTMyIGN0cmxfY2xhc3M7CisgX191MzIgY291bnQ7CisgX191MzIgZXJyb3JfaWR4OworIF9fdTMyIHJlc2VydmVkWzJdOworIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjb250cm9sczsKK307CisKKyNkZWZpbmUgVjRMMl9DVFJMX0NMQVNTX1VTRVIgMHgwMDk4MDAwMCAgCisjZGVmaW5lIFY0TDJfQ1RSTF9DTEFTU19NUEVHIDB4MDA5OTAwMDAgIAorCisjZGVmaW5lIFY0TDJfQ1RSTF9JRF9NQVNLICgweDBmZmZmZmZmKQorI2RlZmluZSBWNEwyX0NUUkxfSUQyQ0xBU1MoaWQpICgoaWQpICYgMHgwZmZmMDAwMFVMKQorI2RlZmluZSBWNEwyX0NUUkxfRFJJVkVSX1BSSVYoaWQpICgoKGlkKSAmIDB4ZmZmZikgPj0gMHgxMDAwKQorCitzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwKK3sKKyBfX3UzMiBpZDsKKyBlbnVtIHY0bDJfY3RybF90eXBlIHR5cGU7CisgX191OCBuYW1lWzMyXTsKKyBfX3MzMiBtaW5pbXVtOworIF9fczMyIG1heGltdW07CisgX19zMzIgc3RlcDsKKyBfX3MzMiBkZWZhdWx0X3ZhbHVlOworIF9fdTMyIGZsYWdzOworIF9fdTMyIHJlc2VydmVkWzJdOworfTsKKworc3RydWN0IHY0bDJfcXVlcnltZW51Cit7CisgX191MzIgaWQ7CisgX191MzIgaW5kZXg7CisgX191OCBuYW1lWzMyXTsKKyBfX3UzMiByZXNlcnZlZDsKK307CisKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQgMHgwMDAxCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX0dSQUJCRUQgMHgwMDAyCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1JFQURfT05MWSAweDAwMDQKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfVVBEQVRFIDB4MDAwOAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSAweDAwMTAKKyNkZWZpbmUgVjRMMl9DVFJMX0ZMQUdfU0xJREVSIDB4MDAyMAorCisjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX05FWFRfQ1RSTCAweDgwMDAwMDAwCisKKyNkZWZpbmUgVjRMMl9DSURfQkFTRSAoVjRMMl9DVFJMX0NMQVNTX1VTRVIgfCAweDkwMCkKKyNkZWZpbmUgVjRMMl9DSURfVVNFUl9CQVNFIFY0TDJfQ0lEX0JBU0UKKworI2RlZmluZSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgMHgwODAwMDAwMAorCisjZGVmaW5lIFY0TDJfQ0lEX1VTRVJfQ0xBU1MgKFY0TDJfQ1RSTF9DTEFTU19VU0VSIHwgMSkKKyNkZWZpbmUgVjRMMl9DSURfQlJJR0hUTkVTUyAoVjRMMl9DSURfQkFTRSswKQorI2RlZmluZSBWNEwyX0NJRF9DT05UUkFTVCAoVjRMMl9DSURfQkFTRSsxKQorI2RlZmluZSBWNEwyX0NJRF9TQVRVUkFUSU9OIChWNEwyX0NJRF9CQVNFKzIpCisjZGVmaW5lIFY0TDJfQ0lEX0hVRSAoVjRMMl9DSURfQkFTRSszKQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19WT0xVTUUgKFY0TDJfQ0lEX0JBU0UrNSkKKyNkZWZpbmUgVjRMMl9DSURfQVVESU9fQkFMQU5DRSAoVjRMMl9DSURfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19CQVNTIChWNEwyX0NJRF9CQVNFKzcpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSAoVjRMMl9DSURfQkFTRSs4KQorI2RlZmluZSBWNEwyX0NJRF9BVURJT19NVVRFIChWNEwyX0NJRF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTIChWNEwyX0NJRF9CQVNFKzEwKQorI2RlZmluZSBWNEwyX0NJRF9CTEFDS19MRVZFTCAoVjRMMl9DSURfQkFTRSsxMSkKKyNkZWZpbmUgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzEyKQorI2RlZmluZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzEzKQorI2RlZmluZSBWNEwyX0NJRF9SRURfQkFMQU5DRSAoVjRMMl9DSURfQkFTRSsxNCkKKyNkZWZpbmUgVjRMMl9DSURfQkxVRV9CQUxBTkNFIChWNEwyX0NJRF9CQVNFKzE1KQorI2RlZmluZSBWNEwyX0NJRF9HQU1NQSAoVjRMMl9DSURfQkFTRSsxNikKKyNkZWZpbmUgVjRMMl9DSURfV0hJVEVORVNTIChWNEwyX0NJRF9HQU1NQSkgIAorI2RlZmluZSBWNEwyX0NJRF9FWFBPU1VSRSAoVjRMMl9DSURfQkFTRSsxNykKKyNkZWZpbmUgVjRMMl9DSURfQVVUT0dBSU4gKFY0TDJfQ0lEX0JBU0UrMTgpCisjZGVmaW5lIFY0TDJfQ0lEX0dBSU4gKFY0TDJfQ0lEX0JBU0UrMTkpCisjZGVmaW5lIFY0TDJfQ0lEX0hGTElQIChWNEwyX0NJRF9CQVNFKzIwKQorI2RlZmluZSBWNEwyX0NJRF9WRkxJUCAoVjRMMl9DSURfQkFTRSsyMSkKKyNkZWZpbmUgVjRMMl9DSURfSENFTlRFUiAoVjRMMl9DSURfQkFTRSsyMikKKyNkZWZpbmUgVjRMMl9DSURfVkNFTlRFUiAoVjRMMl9DSURfQkFTRSsyMykKKyNkZWZpbmUgVjRMMl9DSURfTEFTVFAxIChWNEwyX0NJRF9CQVNFKzI0KSAgCisKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19CQVNFIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDB4OTAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NMQVNTIChWNEwyX0NUUkxfQ0xBU1NfTVBFRyB8IDEpCisKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSAoVjRMMl9DSURfTVBFR19CQVNFKzApCitlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdHlwZSB7CisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTID0gMCwKKyBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMgPSAxLAorIFY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMV9TUyA9IDIsCisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX0RWRCA9IDMsCisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcxX1ZDRCA9IDQsCisgVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QgPSA1LAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVCAoVjRMMl9DSURfTVBFR19CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTyAoVjRMMl9DSURfTVBFR19CQVNFKzIpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTyAoVjRMMl9DSURfTVBFR19CQVNFKzMpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1IgKFY0TDJfQ0lEX01QRUdfQkFTRSs0KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfQVVESU8gKFY0TDJfQ0lEX01QRUdfQkFTRSs1KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QRVNfSURfVklERU8gKFY0TDJfQ0lEX01QRUdfQkFTRSs2KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UIChWNEwyX0NJRF9NUEVHX0JBU0UrNykKK2VudW0gdjRsMl9tcGVnX3N0cmVhbV92YmlfZm10IHsKKyBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSA9IDAsCisgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYgPSAxLAorfTsKKworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVEgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDApCitlbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIHsKKyBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMCA9IDAsCisgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDAgPSAxLAorIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDEpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19lbmNvZGluZyB7CisgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzEgPSAwLAorIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yID0gMSwKKyBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMyA9IDIsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wxX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDIpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19sMV9iaXRyYXRlIHsKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMksgPSAwLAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzY0SyA9IDEsCisgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfOTZLID0gMiwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xMjhLID0gMywKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xNjBLID0gNCwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8xOTJLID0gNSwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yMjRLID0gNiwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yNTZLID0gNywKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8yODhLID0gOCwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zMjBLID0gOSwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV8zNTJLID0gMTAsCisgVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzg0SyA9IDExLAorIFY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQxNksgPSAxMiwKKyBWNEwyX01QRUdfQVVESU9fTDFfQklUUkFURV80NDhLID0gMTMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDMpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19sMl9iaXRyYXRlIHsKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMksgPSAwLAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzQ4SyA9IDEsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfNTZLID0gMiwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV82NEsgPSAzLAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzgwSyA9IDQsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfOTZLID0gNSwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMTJLID0gNiwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xMjhLID0gNywKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xNjBLID0gOCwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8xOTJLID0gOSwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLID0gMTAsCisgVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SyA9IDExLAorIFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzMyMEsgPSAxMiwKKyBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLID0gMTMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wzX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDQpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19sM19iaXRyYXRlIHsKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMksgPSAwLAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzQwSyA9IDEsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfNDhLID0gMiwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV81NksgPSAzLAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzY0SyA9IDQsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfODBLID0gNSwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV85NksgPSA2LAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzExMksgPSA3LAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzEyOEsgPSA4LAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE2MEsgPSA5LAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MksgPSAxMCwKKyBWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8yMjRLID0gMTEsCisgVjRMMl9NUEVHX0FVRElPX0wzX0JJVFJBVEVfMjU2SyA9IDEyLAorIFY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMyMEsgPSAxMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERSAoVjRMMl9DSURfTVBFR19CQVNFKzEwNSkKK2VudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgeworIFY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyA9IDAsCisgVjRMMl9NUEVHX0FVRElPX01PREVfSk9JTlRfU1RFUkVPID0gMSwKKyBWNEwyX01QRUdfQVVESU9fTU9ERV9EVUFMID0gMiwKKyBWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PID0gMywKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsxMDYpCitlbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiB7CisgVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQgPSAwLAorIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF84ID0gMSwKKyBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTIgPSAyLAorIFY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF8xNiA9IDMsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA3KQorZW51bSB2NGwyX21wZWdfYXVkaW9fZW1waGFzaXMgeworIFY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FID0gMCwKKyBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfNTBfRElWXzE1X3VTID0gMSwKKyBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3ID0gMiwKK307CisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDIChWNEwyX0NJRF9NUEVHX0JBU0UrMTA4KQorZW51bSB2NGwyX21wZWdfYXVkaW9fY3JjIHsKKyBWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUgPSAwLAorIFY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYgPSAxLAorfTsKKworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HIChWNEwyX0NJRF9NUEVHX0JBU0UrMjAwKQorZW51bSB2NGwyX21wZWdfdmlkZW9fZW5jb2RpbmcgeworIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzEgPSAwLAorIFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIgPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDEpCitlbnVtIHY0bDJfbXBlZ192aWRlb19hc3BlY3QgeworIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMXgxID0gMCwKKyBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MyA9IDEsCisgVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5ID0gMiwKKyBWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAgPSAzLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUyAoVjRMMl9DSURfTVBFR19CQVNFKzIwMikKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfU0laRSAoVjRMMl9DSURfTVBFR19CQVNFKzIwMykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19HT1BfQ0xPU1VSRSAoVjRMMl9DSURfTVBFR19CQVNFKzIwNCkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTiAoVjRMMl9DSURfTVBFR19CQVNFKzIwNSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX01PREUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDYpCitlbnVtIHY0bDJfbXBlZ192aWRlb19iaXRyYXRlX21vZGUgeworIFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSID0gMCwKKyBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEUgKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDcpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLIChWNEwyX0NJRF9NUEVHX0JBU0UrMjA4KQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1RFTVBPUkFMX0RFQ0lNQVRJT04gKFY0TDJfQ0lEX01QRUdfQkFTRSsyMDkpCisKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UgKFY0TDJfQ1RSTF9DTEFTU19NUEVHIHwgMHgxMDAwKQorI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrMCkKK2VudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fc3BhdGlhbF9maWx0ZXJfbW9kZSB7CisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1NQQVRJQUxfRklMVEVSX01PREVfQVVUTyA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fU1BBVElBTF9GSUxURVIgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19MVU1BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzIpCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2x1bWFfc3BhdGlhbF9maWx0ZXJfdHlwZSB7CisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFX09GRiA9IDAsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX1ZFUlQgPSAyLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9IVl9TRVBBUkFCTEUgPSAzLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfU1BBVElBTF9GSUxURVJfVFlQRV8yRF9TWU1fTk9OX1NFUEFSQUJMRSA9IDQsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fQ0hST01BX1NQQVRJQUxfRklMVEVSX1RZUEUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzMpCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX2Nocm9tYV9zcGF0aWFsX2ZpbHRlcl90eXBlIHsKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfU1BBVElBTF9GSUxURVJfVFlQRV9PRkYgPSAwLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX0NIUk9NQV9TUEFUSUFMX0ZJTFRFUl9UWVBFXzFEX0hPUiA9IDEsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fVEVNUE9SQUxfRklMVEVSX01PREUgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzQpCitlbnVtIHY0bDJfbXBlZ19jeDIzNDF4X3ZpZGVvX3RlbXBvcmFsX2ZpbHRlcl9tb2RlIHsKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19URU1QT1JBTF9GSUxURVJfTU9ERV9NQU5VQUwgPSAwLAorIFY0TDJfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUl9NT0RFX0FVVE8gPSAxLAorfTsKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX1RFTVBPUkFMX0ZJTFRFUiAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNSkKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX01FRElBTl9GSUxURVJfVFlQRSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNikKK2VudW0gdjRsMl9tcGVnX2N4MjM0MXhfdmlkZW9fbWVkaWFuX2ZpbHRlcl90eXBlIHsKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfT0ZGID0gMCwKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfSE9SID0gMSwKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfVkVSVCA9IDIsCisgVjRMMl9NUEVHX0NYMjM0MVhfVklERU9fTUVESUFOX0ZJTFRFUl9UWVBFX0hPUl9WRVJUID0gMywKKyBWNEwyX01QRUdfQ1gyMzQxWF9WSURFT19NRURJQU5fRklMVEVSX1RZUEVfRElBRyA9IDQsCit9OworI2RlZmluZSBWNEwyX0NJRF9NUEVHX0NYMjM0MVhfVklERU9fTFVNQV9NRURJQU5fRklMVEVSX0JPVFRPTSAoVjRMMl9DSURfTVBFR19DWDIzNDFYX0JBU0UrNykKKyNkZWZpbmUgVjRMMl9DSURfTVBFR19DWDIzNDFYX1ZJREVPX0xVTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzgpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9CT1RUT00gKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzkpCisjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19DSFJPTUFfTUVESUFOX0ZJTFRFUl9UT1AgKFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9CQVNFKzEwKQorCitzdHJ1Y3QgdjRsMl90dW5lcgoreworIF9fdTMyIGluZGV4OworIF9fdTggbmFtZVszMl07CisgZW51bSB2NGwyX3R1bmVyX3R5cGUgdHlwZTsKKyBfX3UzMiBjYXBhYmlsaXR5OworIF9fdTMyIHJhbmdlbG93OworIF9fdTMyIHJhbmdlaGlnaDsKKyBfX3UzMiByeHN1YmNoYW5zOworIF9fdTMyIGF1ZG1vZGU7CisgX19zMzIgc2lnbmFsOworIF9fczMyIGFmYzsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKK3N0cnVjdCB2NGwyX21vZHVsYXRvcgoreworIF9fdTMyIGluZGV4OworIF9fdTggbmFtZVszMl07CisgX191MzIgY2FwYWJpbGl0eTsKKyBfX3UzMiByYW5nZWxvdzsKKyBfX3UzMiByYW5nZWhpZ2g7CisgX191MzIgdHhzdWJjaGFuczsKKyBfX3UzMiByZXNlcnZlZFs0XTsKK307CisKKyNkZWZpbmUgVjRMMl9UVU5FUl9DQVBfTE9XIDB4MDAwMQorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9OT1JNIDB4MDAwMgorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gMHgwMDEwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcyIDB4MDAyMAorI2RlZmluZSBWNEwyX1RVTkVSX0NBUF9TQVAgMHgwMDIwCisjZGVmaW5lIFY0TDJfVFVORVJfQ0FQX0xBTkcxIDB4MDA0MAorCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX01PTk8gMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NURVJFTyAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzIgMHgwMDA0CisjZGVmaW5lIFY0TDJfVFVORVJfU1VCX1NBUCAweDAwMDQKKyNkZWZpbmUgVjRMMl9UVU5FUl9TVUJfTEFORzEgMHgwMDA4CisKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX01PTk8gMHgwMDAwCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9TVEVSRU8gMHgwMDAxCisjZGVmaW5lIFY0TDJfVFVORVJfTU9ERV9MQU5HMiAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX1NBUCAweDAwMDIKKyNkZWZpbmUgVjRMMl9UVU5FUl9NT0RFX0xBTkcxIDB4MDAwMworI2RlZmluZSBWNEwyX1RVTkVSX01PREVfTEFORzFfTEFORzIgMHgwMDA0CisKK3N0cnVjdCB2NGwyX2ZyZXF1ZW5jeQoreworIF9fdTMyIHR1bmVyOworIGVudW0gdjRsMl90dW5lcl90eXBlIHR5cGU7CisgX191MzIgZnJlcXVlbmN5OworIF9fdTMyIHJlc2VydmVkWzhdOworfTsKKworc3RydWN0IHY0bDJfYXVkaW8KK3sKKyBfX3UzMiBpbmRleDsKKyBfX3U4IG5hbWVbMzJdOworIF9fdTMyIGNhcGFiaWxpdHk7CisgX191MzIgbW9kZTsKKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CisKKyNkZWZpbmUgVjRMMl9BVURDQVBfU1RFUkVPIDB4MDAwMDEKKyNkZWZpbmUgVjRMMl9BVURDQVBfQVZMIDB4MDAwMDIKKworI2RlZmluZSBWNEwyX0FVRE1PREVfQVZMIDB4MDAwMDEKKworc3RydWN0IHY0bDJfYXVkaW9vdXQKK3sKKyBfX3UzMiBpbmRleDsKKyBfX3U4IG5hbWVbMzJdOworIF9fdTMyIGNhcGFiaWxpdHk7CisgX191MzIgbW9kZTsKKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CisKK3N0cnVjdCB2NGwyX3ZiaV9mb3JtYXQKK3sKKyBfX3UzMiBzYW1wbGluZ19yYXRlOworIF9fdTMyIG9mZnNldDsKKyBfX3UzMiBzYW1wbGVzX3Blcl9saW5lOworIF9fdTMyIHNhbXBsZV9mb3JtYXQ7CisgX19zMzIgc3RhcnRbMl07CisgX191MzIgY291bnRbMl07CisgX191MzIgZmxhZ3M7CisgX191MzIgcmVzZXJ2ZWRbMl07Cit9OworCisjZGVmaW5lIFY0TDJfVkJJX1VOU1lOQyAoMTw8IDApCisjZGVmaW5lIFY0TDJfVkJJX0lOVEVSTEFDRUQgKDE8PCAxKQorCitzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdAoreworIF9fdTE2IHNlcnZpY2Vfc2V0OworCisgX191MTYgc2VydmljZV9saW5lc1syXVsyNF07CisgX191MzIgaW9fc2l6ZTsKKyBfX3UzMiByZXNlcnZlZFsyXTsKK307CisKKyNkZWZpbmUgVjRMMl9TTElDRURfVEVMRVRFWFRfQiAoMHgwMDAxKQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZQUyAoMHgwNDAwKQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1ICgweDEwMDApCisKKyNkZWZpbmUgVjRMMl9TTElDRURfV1NTXzYyNSAoMHg0MDAwKQorCisjZGVmaW5lIFY0TDJfU0xJQ0VEX1ZCSV81MjUgKFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1KQorI2RlZmluZSBWNEwyX1NMSUNFRF9WQklfNjI1IChWNEwyX1NMSUNFRF9URUxFVEVYVF9CIHwgVjRMMl9TTElDRURfVlBTIHwgVjRMMl9TTElDRURfV1NTXzYyNSkKKworc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAKK3sKKyBfX3UxNiBzZXJ2aWNlX3NldDsKKworIF9fdTE2IHNlcnZpY2VfbGluZXNbMl1bMjRdOworIF9fdTMyIHJlc2VydmVkWzRdOworfTsKKworc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhCit7CisgX191MzIgaWQ7CisgX191MzIgZmllbGQ7CisgX191MzIgbGluZTsKKyBfX3UzMiByZXNlcnZlZDsKKyBfX3U4IGRhdGFbNDhdOworfTsKKworc3RydWN0IHY0bDJfZm9ybWF0Cit7CisgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGU7CisgdW5pb24KKyB7Cisgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBwaXg7Cisgc3RydWN0IHY0bDJfd2luZG93IHdpbjsKKyBzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0IHZiaTsKKyBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCBzbGljZWQ7CisgX191OCByYXdfZGF0YVsyMDBdOworIH0gZm10OworfTsKKworc3RydWN0IHY0bDJfc3RyZWFtcGFybQoreworIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlOworIHVuaW9uCisgeworIHN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtIGNhcHR1cmU7Cisgc3RydWN0IHY0bDJfb3V0cHV0cGFybSBvdXRwdXQ7CisgX191OCByYXdfZGF0YVsyMDBdOworIH0gcGFybTsKK307CisKKyNkZWZpbmUgVklESU9DX1FVRVJZQ0FQIF9JT1IgKCdWJywgMCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSkKKyNkZWZpbmUgVklESU9DX1JFU0VSVkVEIF9JTyAoJ1YnLCAxKQorI2RlZmluZSBWSURJT0NfRU5VTV9GTVQgX0lPV1IgKCdWJywgMiwgc3RydWN0IHY0bDJfZm10ZGVzYykKKyNkZWZpbmUgVklESU9DX0dfRk1UIF9JT1dSICgnVicsIDQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKKyNkZWZpbmUgVklESU9DX1NfRk1UIF9JT1dSICgnVicsIDUsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKKyNkZWZpbmUgVklESU9DX1JFUUJVRlMgX0lPV1IgKCdWJywgOCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMpCisjZGVmaW5lIFZJRElPQ19RVUVSWUJVRiBfSU9XUiAoJ1YnLCA5LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCisjZGVmaW5lIFZJRElPQ19HX0ZCVUYgX0lPUiAoJ1YnLCAxMCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCisjZGVmaW5lIFZJRElPQ19TX0ZCVUYgX0lPVyAoJ1YnLCAxMSwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIpCisjZGVmaW5lIFZJRElPQ19PVkVSTEFZIF9JT1cgKCdWJywgMTQsIGludCkKKyNkZWZpbmUgVklESU9DX1FCVUYgX0lPV1IgKCdWJywgMTUsIHN0cnVjdCB2NGwyX2J1ZmZlcikKKyNkZWZpbmUgVklESU9DX0RRQlVGIF9JT1dSICgnVicsIDE3LCBzdHJ1Y3QgdjRsMl9idWZmZXIpCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PTiBfSU9XICgnVicsIDE4LCBpbnQpCisjZGVmaW5lIFZJRElPQ19TVFJFQU1PRkYgX0lPVyAoJ1YnLCAxOSwgaW50KQorI2RlZmluZSBWSURJT0NfR19QQVJNIF9JT1dSICgnVicsIDIxLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQorI2RlZmluZSBWSURJT0NfU19QQVJNIF9JT1dSICgnVicsIDIyLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtKQorI2RlZmluZSBWSURJT0NfR19TVEQgX0lPUiAoJ1YnLCAyMywgdjRsMl9zdGRfaWQpCisjZGVmaW5lIFZJRElPQ19TX1NURCBfSU9XICgnVicsIDI0LCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX0VOVU1TVEQgX0lPV1IgKCdWJywgMjUsIHN0cnVjdCB2NGwyX3N0YW5kYXJkKQorI2RlZmluZSBWSURJT0NfRU5VTUlOUFVUIF9JT1dSICgnVicsIDI2LCBzdHJ1Y3QgdjRsMl9pbnB1dCkKKyNkZWZpbmUgVklESU9DX0dfQ1RSTCBfSU9XUiAoJ1YnLCAyNywgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTCBfSU9XUiAoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX0dfVFVORVIgX0lPV1IgKCdWJywgMjksIHN0cnVjdCB2NGwyX3R1bmVyKQorI2RlZmluZSBWSURJT0NfU19UVU5FUiBfSU9XICgnVicsIDMwLCBzdHJ1Y3QgdjRsMl90dW5lcikKKyNkZWZpbmUgVklESU9DX0dfQVVESU8gX0lPUiAoJ1YnLCAzMywgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19TX0FVRElPIF9JT1cgKCdWJywgMzQsIHN0cnVjdCB2NGwyX2F1ZGlvKQorI2RlZmluZSBWSURJT0NfUVVFUllDVFJMIF9JT1dSICgnVicsIDM2LCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwpCisjZGVmaW5lIFZJRElPQ19RVUVSWU1FTlUgX0lPV1IgKCdWJywgMzcsIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSkKKyNkZWZpbmUgVklESU9DX0dfSU5QVVQgX0lPUiAoJ1YnLCAzOCwgaW50KQorI2RlZmluZSBWSURJT0NfU19JTlBVVCBfSU9XUiAoJ1YnLCAzOSwgaW50KQorI2RlZmluZSBWSURJT0NfR19PVVRQVVQgX0lPUiAoJ1YnLCA0NiwgaW50KQorI2RlZmluZSBWSURJT0NfU19PVVRQVVQgX0lPV1IgKCdWJywgNDcsIGludCkKKyNkZWZpbmUgVklESU9DX0VOVU1PVVRQVVQgX0lPV1IgKCdWJywgNDgsIHN0cnVjdCB2NGwyX291dHB1dCkKKyNkZWZpbmUgVklESU9DX0dfQVVET1VUIF9JT1IgKCdWJywgNDksIHN0cnVjdCB2NGwyX2F1ZGlvb3V0KQorI2RlZmluZSBWSURJT0NfU19BVURPVVQgX0lPVyAoJ1YnLCA1MCwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCisjZGVmaW5lIFZJRElPQ19HX01PRFVMQVRPUiBfSU9XUiAoJ1YnLCA1NCwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQorI2RlZmluZSBWSURJT0NfU19NT0RVTEFUT1IgX0lPVyAoJ1YnLCA1NSwgc3RydWN0IHY0bDJfbW9kdWxhdG9yKQorI2RlZmluZSBWSURJT0NfR19GUkVRVUVOQ1kgX0lPV1IgKCdWJywgNTYsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKKyNkZWZpbmUgVklESU9DX1NfRlJFUVVFTkNZIF9JT1cgKCdWJywgNTcsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSkKKyNkZWZpbmUgVklESU9DX0NST1BDQVAgX0lPV1IgKCdWJywgNTgsIHN0cnVjdCB2NGwyX2Nyb3BjYXApCisjZGVmaW5lIFZJRElPQ19HX0NST1AgX0lPV1IgKCdWJywgNTksIHN0cnVjdCB2NGwyX2Nyb3ApCisjZGVmaW5lIFZJRElPQ19TX0NST1AgX0lPVyAoJ1YnLCA2MCwgc3RydWN0IHY0bDJfY3JvcCkKKyNkZWZpbmUgVklESU9DX0dfSlBFR0NPTVAgX0lPUiAoJ1YnLCA2MSwgc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uKQorI2RlZmluZSBWSURJT0NfU19KUEVHQ09NUCBfSU9XICgnVicsIDYyLCBzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24pCisjZGVmaW5lIFZJRElPQ19RVUVSWVNURCBfSU9SICgnVicsIDYzLCB2NGwyX3N0ZF9pZCkKKyNkZWZpbmUgVklESU9DX1RSWV9GTVQgX0lPV1IgKCdWJywgNjQsIHN0cnVjdCB2NGwyX2Zvcm1hdCkKKyNkZWZpbmUgVklESU9DX0VOVU1BVURJTyBfSU9XUiAoJ1YnLCA2NSwgc3RydWN0IHY0bDJfYXVkaW8pCisjZGVmaW5lIFZJRElPQ19FTlVNQVVET1VUIF9JT1dSICgnVicsIDY2LCBzdHJ1Y3QgdjRsMl9hdWRpb291dCkKKyNkZWZpbmUgVklESU9DX0dfUFJJT1JJVFkgX0lPUiAoJ1YnLCA2NywgZW51bSB2NGwyX3ByaW9yaXR5KQorI2RlZmluZSBWSURJT0NfU19QUklPUklUWSBfSU9XICgnVicsIDY4LCBlbnVtIHY0bDJfcHJpb3JpdHkpCisjZGVmaW5lIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQIF9JT1IgKCdWJywgNjksIHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfY2FwKQorI2RlZmluZSBWSURJT0NfTE9HX1NUQVRVUyBfSU8gKCdWJywgNzApCisjZGVmaW5lIFZJRElPQ19HX0VYVF9DVFJMUyBfSU9XUiAoJ1YnLCA3MSwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzKQorI2RlZmluZSBWSURJT0NfU19FWFRfQ1RSTFMgX0lPV1IgKCdWJywgNzIsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKKyNkZWZpbmUgVklESU9DX1RSWV9FWFRfQ1RSTFMgX0lPV1IgKCdWJywgNzMsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scykKKworI2lmZGVmIF9fT0xEX1ZJRElPQ18KKworI2RlZmluZSBWSURJT0NfT1ZFUkxBWV9PTEQgX0lPV1IgKCdWJywgMTQsIGludCkKKyNkZWZpbmUgVklESU9DX1NfUEFSTV9PTEQgX0lPVyAoJ1YnLCAyMiwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSkKKyNkZWZpbmUgVklESU9DX1NfQ1RSTF9PTEQgX0lPVyAoJ1YnLCAyOCwgc3RydWN0IHY0bDJfY29udHJvbCkKKyNkZWZpbmUgVklESU9DX0dfQVVESU9fT0xEIF9JT1dSICgnVicsIDMzLCBzdHJ1Y3QgdjRsMl9hdWRpbykKKyNkZWZpbmUgVklESU9DX0dfQVVET1VUX09MRCBfSU9XUiAoJ1YnLCA0OSwgc3RydWN0IHY0bDJfYXVkaW9vdXQpCisjZGVmaW5lIFZJRElPQ19DUk9QQ0FQX09MRCBfSU9SICgnVicsIDU4LCBzdHJ1Y3QgdjRsMl9jcm9wY2FwKQorI2VuZGlmCisKKyNkZWZpbmUgQkFTRV9WSURJT0NfUFJJVkFURSAxOTIgIAorCisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3ZtYWxsb2MuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92bWFsbG9jLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzdmZDEwMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92bWFsbG9jLmgKQEAgLTAsMCArMSw0MCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVk1BTExPQ19ICisjZGVmaW5lIF9MSU5VWF9WTUFMTE9DX0gKKworI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4gIAorCitzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CisKKyNkZWZpbmUgVk1fSU9SRU1BUCAweDAwMDAwMDAxICAKKyNkZWZpbmUgVk1fQUxMT0MgMHgwMDAwMDAwMiAgCisjZGVmaW5lIFZNX01BUCAweDAwMDAwMDA0ICAKKyNkZWZpbmUgVk1fVVNFUk1BUCAweDAwMDAwMDA4ICAKKyNkZWZpbmUgVk1fVlBBR0VTIDB4MDAwMDAwMTAgIAorCisjaWZuZGVmIElPUkVNQVBfTUFYX09SREVSCisjZGVmaW5lIElPUkVNQVBfTUFYX09SREVSICg3ICsgUEFHRV9TSElGVCkgIAorI2VuZGlmCisKK3N0cnVjdCB2bV9zdHJ1Y3QgeworIHZvaWQgKmFkZHI7CisgdW5zaWduZWQgbG9uZyBzaXplOworIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Cisgc3RydWN0IHBhZ2UgKipwYWdlczsKKyB1bnNpZ25lZCBpbnQgbnJfcGFnZXM7CisgdW5zaWduZWQgbG9uZyBwaHlzX2FkZHI7Cisgc3RydWN0IHZtX3N0cnVjdCAqbmV4dDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0LmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvdnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTkyYjNhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0LmgKQEAgLTAsMCArMSw2OCBAQAorLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqCisgKioqICAgVGhpcyBoZWFkZXIgd2FzIGF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIGZyb20gYSBMaW51eCBrZXJuZWwgaGVhZGVyCisgKioqICAgb2YgdGhlIHNhbWUgbmFtZSwgdG8gbWFrZSBpbmZvcm1hdGlvbiBuZWNlc3NhcnkgZm9yIHVzZXJzcGFjZSB0bworICoqKiAgIGNhbGwgaW50byB0aGUga2VybmVsIGF2YWlsYWJsZSB0byBsaWJjLiAgSXQgY29udGFpbnMgb25seSBjb25zdGFudHMsCisgKioqICAgc3RydWN0dXJlcywgYW5kIG1hY3JvcyBnZW5lcmF0ZWQgZnJvbSB0aGUgb3JpZ2luYWwgaGVhZGVyLCBhbmQgdGh1cywKKyAqKiogICBjb250YWlucyBubyBjb3B5cmlnaHRhYmxlIGluZm9ybWF0aW9uLgorICoqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworI2lmbmRlZiBfTElOVVhfVlRfSAorI2RlZmluZSBfTElOVVhfVlRfSAorCisjZGVmaW5lIE1JTl9OUl9DT05TT0xFUyAxICAKKyNkZWZpbmUgTUFYX05SX0NPTlNPTEVTIDYzICAKKyNkZWZpbmUgTUFYX05SX1VTRVJfQ09OU09MRVMgNjMgIAorCisjZGVmaW5lIFZUX09QRU5RUlkgMHg1NjAwICAKKworc3RydWN0IHZ0X21vZGUgeworIGNoYXIgbW9kZTsKKyBjaGFyIHdhaXR2OworIHNob3J0IHJlbHNpZzsKKyBzaG9ydCBhY3FzaWc7Cisgc2hvcnQgZnJzaWc7Cit9OworI2RlZmluZSBWVF9HRVRNT0RFIDB4NTYwMSAgCisjZGVmaW5lIFZUX1NFVE1PREUgMHg1NjAyICAKKyNkZWZpbmUgVlRfQVVUTyAweDAwICAKKyNkZWZpbmUgVlRfUFJPQ0VTUyAweDAxICAKKyNkZWZpbmUgVlRfQUNLQUNRIDB4MDIgIAorCitzdHJ1Y3QgdnRfc3RhdCB7CisgdW5zaWduZWQgc2hvcnQgdl9hY3RpdmU7CisgdW5zaWduZWQgc2hvcnQgdl9zaWduYWw7CisgdW5zaWduZWQgc2hvcnQgdl9zdGF0ZTsKK307CisjZGVmaW5lIFZUX0dFVFNUQVRFIDB4NTYwMyAgCisjZGVmaW5lIFZUX1NFTkRTSUcgMHg1NjA0ICAKKworI2RlZmluZSBWVF9SRUxESVNQIDB4NTYwNSAgCisKKyNkZWZpbmUgVlRfQUNUSVZBVEUgMHg1NjA2ICAKKyNkZWZpbmUgVlRfV0FJVEFDVElWRSAweDU2MDcgIAorI2RlZmluZSBWVF9ESVNBTExPQ0FURSAweDU2MDggIAorCitzdHJ1Y3QgdnRfc2l6ZXMgeworIHVuc2lnbmVkIHNob3J0IHZfcm93czsKKyB1bnNpZ25lZCBzaG9ydCB2X2NvbHM7CisgdW5zaWduZWQgc2hvcnQgdl9zY3JvbGxzaXplOworfTsKKyNkZWZpbmUgVlRfUkVTSVpFIDB4NTYwOSAgCisKK3N0cnVjdCB2dF9jb25zaXplIHsKKyB1bnNpZ25lZCBzaG9ydCB2X3Jvd3M7CisgdW5zaWduZWQgc2hvcnQgdl9jb2xzOworIHVuc2lnbmVkIHNob3J0IHZfdmxpbjsKKyB1bnNpZ25lZCBzaG9ydCB2X2NsaW47CisgdW5zaWduZWQgc2hvcnQgdl92Y29sOworIHVuc2lnbmVkIHNob3J0IHZfY2NvbDsKK307CisjZGVmaW5lIFZUX1JFU0laRVggMHg1NjBBICAKKyNkZWZpbmUgVlRfTE9DS1NXSVRDSCAweDU2MEIgIAorI2RlZmluZSBWVF9VTkxPQ0tTV0lUQ0ggMHg1NjBDICAKKyNkZWZpbmUgVlRfR0VUSElGT05UTUFTSyAweDU2MEQgIAorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dF9idWZmZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC92dF9idWZmZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NmNlNzlkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3Z0X2J1ZmZlci5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1ZUX0JVRkZFUl9IXworI2RlZmluZSBfTElOVVhfVlRfQlVGRkVSX0hfCisKKyNpZm5kZWYgVlRfQlVGX0hBVkVfUlcKKyNkZWZpbmUgc2NyX3dyaXRldyh2YWwsIGFkZHIpICgqKGFkZHIpID0gKHZhbCkpCisjZGVmaW5lIHNjcl9yZWFkdyhhZGRyKSAoKihhZGRyKSkKKyNkZWZpbmUgc2NyX21lbWNweXcoZCwgcywgYykgbWVtY3B5KGQsIHMsIGMpCisjZGVmaW5lIHNjcl9tZW1tb3ZldyhkLCBzLCBjKSBtZW1tb3ZlKGQsIHMsIGMpCisjZGVmaW5lIFZUX0JVRl9IQVZFX01FTUNQWVcKKyNkZWZpbmUgVlRfQlVGX0hBVkVfTUVNTU9WRVcKKyNlbmRpZgorCisjaWZuZGVmIFZUX0JVRl9IQVZFX01FTVNFVFcKKyNlbmRpZgorI2lmbmRlZiBWVF9CVUZfSEFWRV9NRU1DUFlXCisjZW5kaWYKKyNpZm5kZWYgVlRfQlVGX0hBVkVfTUVNTU9WRVcKKyNlbmRpZgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2FpdC5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZDlhYTY4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhaXQuaApAQCAtMCwwICsxLDMwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9XQUlUX0gKKyNkZWZpbmUgX0xJTlVYX1dBSVRfSAorCisjZGVmaW5lIFdOT0hBTkcgMHgwMDAwMDAwMQorI2RlZmluZSBXVU5UUkFDRUQgMHgwMDAwMDAwMgorI2RlZmluZSBXU1RPUFBFRCBXVU5UUkFDRUQKKyNkZWZpbmUgV0VYSVRFRCAweDAwMDAwMDA0CisjZGVmaW5lIFdDT05USU5VRUQgMHgwMDAwMDAwOAorI2RlZmluZSBXTk9XQUlUIDB4MDEwMDAwMDAgIAorCisjZGVmaW5lIF9fV05PVEhSRUFEIDB4MjAwMDAwMDAgIAorI2RlZmluZSBfX1dBTEwgMHg0MDAwMDAwMCAgCisjZGVmaW5lIF9fV0NMT05FIDB4ODAwMDAwMDAgIAorCisjZGVmaW5lIFBfQUxMIDAKKyNkZWZpbmUgUF9QSUQgMQorI2RlZmluZSBQX1BHSUQgMgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YW5yb3V0ZXIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93YW5yb3V0ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI1YTg2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dhbnJvdXRlci5oCkBAIC0wLDAgKzEsMzU2IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9ST1VURVJfSAorI2RlZmluZSBfUk9VVEVSX0gKKworI2RlZmluZSBST1VURVJfTkFNRSAid2Fucm91dGVyIiAgCisjZGVmaW5lIFJPVVRFUl9WRVJTSU9OIDEgIAorI2RlZmluZSBST1VURVJfUkVMRUFTRSAxICAKKyNkZWZpbmUgUk9VVEVSX0lPQ1RMICdXJyAgCisjZGVmaW5lIFJPVVRFUl9NQUdJQyAweDUyNEQ0MTU3TCAgCisKK2VudW0gcm91dGVyX2lvY3RscworeworIFJPVVRFUl9TRVRVUCA9IFJPVVRFUl9JT0NUTDw8OCwKKyBST1VURVJfRE9XTiwKKyBST1VURVJfU1RBVCwKKyBST1VURVJfSUZORVcsCisgUk9VVEVSX0lGREVMLAorIFJPVVRFUl9JRlNUQVQsCisgUk9VVEVSX1VTRVIgPSAoUk9VVEVSX0lPQ1RMPDw4KSsxNiwKKyBST1VURVJfVVNFUl9NQVggPSAoUk9VVEVSX0lPQ1RMPDw4KSszMQorfTsKKworI2RlZmluZSBQUk9DX0RBVEFfUE9SVF8wIDB4ODAwMCAgCisjZGVmaW5lIFBST0NfREFUQV9QT1JUXzEgMHg4MDAxICAKKworI2RlZmluZSBOTFBJRF9JUCAweENDICAKKyNkZWZpbmUgTkxQSURfU05BUCAweDgwICAKKyNkZWZpbmUgTkxQSURfQ0xOUCAweDgxICAKKyNkZWZpbmUgTkxQSURfRVNJUyAweDgyICAKKyNkZWZpbmUgTkxQSURfSVNJUyAweDgzICAKKyNkZWZpbmUgTkxQSURfUTkzMyAweDA4ICAKKworI2RlZmluZSBXQU5fSUZOQU1FX1NaIDE1ICAKKyNkZWZpbmUgV0FOX0RSVk5BTUVfU1ogMTUgIAorI2RlZmluZSBXQU5fQUREUkVTU19TWiAzMSAgCisjZGVmaW5lIFVTRURfQllfRklFTEQgOCAgCisKKyNkZWZpbmUgVURQX1BUUElQRV9UWVBFIDB4MDEKKyNkZWZpbmUgVURQX0ZQSVBFX1RZUEUgMHgwMgorI2RlZmluZSBVRFBfQ1BJUEVfVFlQRSAweDAzCisjZGVmaW5lIFVEUF9EUlZTVEFUU19UWVBFIDB4MDQKKyNkZWZpbmUgVURQX0lOVkFMSURfVFlQRSAweDA1CisKKyNkZWZpbmUgQ01EX09LIDAgIAorI2RlZmluZSBDTURfVElNRU9VVCAweEZGICAKKworI2RlZmluZSBVRFBfUEtUX0ZSTV9TVEFDSyAweDAwCisjZGVmaW5lIFVEUF9QS1RfRlJNX05FVFdPUksgMHgwMQorCisjZGVmaW5lIE1BWF9JTlRSX1RFU1RfQ09VTlRFUiAxMDAKKworI2RlZmluZSBDUklUSUNBTF9JTl9JU1IgMHhBMQorI2RlZmluZSBDUklUSUNBTF9JTlRSX0hBTkRMRUQgMHhCMQorCit0eXBlZGVmIHN0cnVjdCB3YW5feDI1X2NvbmYKK3sKKyB1bnNpZ25lZCBsb19wdmM7CisgdW5zaWduZWQgaGlfcHZjOworIHVuc2lnbmVkIGxvX3N2YzsKKyB1bnNpZ25lZCBoaV9zdmM7CisgdW5zaWduZWQgaGRsY193aW5kb3c7CisgdW5zaWduZWQgcGt0X3dpbmRvdzsKKyB1bnNpZ25lZCB0MTsKKyB1bnNpZ25lZCB0MjsKKyB1bnNpZ25lZCB0NDsKKyB1bnNpZ25lZCBuMjsKKyB1bnNpZ25lZCB0MTBfdDIwOworIHVuc2lnbmVkIHQxMV90MjE7CisgdW5zaWduZWQgdDEyX3QyMjsKKyB1bnNpZ25lZCB0MTNfdDIzOworIHVuc2lnbmVkIHQxNl90MjY7CisgdW5zaWduZWQgdDI4OworIHVuc2lnbmVkIHIxMF9yMjA7CisgdW5zaWduZWQgcjEyX3IyMjsKKyB1bnNpZ25lZCByMTNfcjIzOworIHVuc2lnbmVkIGNjaXR0X2NvbXBhdDsKKyB1bnNpZ25lZCB4MjVfY29uZl9vcHQ7CisgdW5zaWduZWQgY2hhciBMQVBCX2hkbGNfb25seTsKKyB1bnNpZ25lZCBjaGFyIGxvZ2dpbmc7CisgdW5zaWduZWQgY2hhciBvb2Jfb25fbW9kZW07Cit9IHdhbl94MjVfY29uZl90OworCit0eXBlZGVmIHN0cnVjdCB3YW5fZnJfY29uZgoreworIHVuc2lnbmVkIHNpZ25hbGxpbmc7CisgdW5zaWduZWQgdDM5MTsKKyB1bnNpZ25lZCB0MzkyOworIHVuc2lnbmVkIG4zOTE7CisgdW5zaWduZWQgbjM5MjsKKyB1bnNpZ25lZCBuMzkzOworIHVuc2lnbmVkIGRsY2lfbnVtOworIHVuc2lnbmVkIGRsY2lbMTAwXTsKK30gd2FuX2ZyX2NvbmZfdDsKKwordHlwZWRlZiBzdHJ1Y3Qgd2FuX3BwcF9jb25mCit7CisgdW5zaWduZWQgcmVzdGFydF90bXI7CisgdW5zaWduZWQgYXV0aF9yc3J0X3RtcjsKKyB1bnNpZ25lZCBhdXRoX3dhaXRfdG1yOworIHVuc2lnbmVkIG1kbV9mYWlsX3RtcjsKKyB1bnNpZ25lZCBkdHJfZHJvcF90bXI7CisgdW5zaWduZWQgY29ubmVjdF90bW91dDsKKyB1bnNpZ25lZCBjb25mX3JldHJ5OworIHVuc2lnbmVkIHRlcm1fcmV0cnk7CisgdW5zaWduZWQgZmFpbF9yZXRyeTsKKyB1bnNpZ25lZCBhdXRoX3JldHJ5OworIHVuc2lnbmVkIGF1dGhfb3B0aW9uczsKKyB1bnNpZ25lZCBpcF9vcHRpb25zOworIGNoYXIgYXV0aGVudGljYXRvcjsKKyBjaGFyIGlwX21vZGU7Cit9IHdhbl9wcHBfY29uZl90OworCit0eXBlZGVmIHN0cnVjdCB3YW5fY2hkbGNfY29uZgoreworIHVuc2lnbmVkIGNoYXIgaWdub3JlX2RjZDsKKyB1bnNpZ25lZCBjaGFyIGlnbm9yZV9jdHM7CisgdW5zaWduZWQgY2hhciBpZ25vcmVfa2VlcGFsaXZlOworIHVuc2lnbmVkIGNoYXIgaGRsY19zdHJlYW1pbmc7CisgdW5zaWduZWQgY2hhciByZWNlaXZlX29ubHk7CisgdW5zaWduZWQga2VlcGFsaXZlX3R4X3RtcjsKKyB1bnNpZ25lZCBrZWVwYWxpdmVfcnhfdG1yOworIHVuc2lnbmVkIGtlZXBhbGl2ZV9lcnJfbWFyZ2luOworIHVuc2lnbmVkIHNsYXJwX3RpbWVyOworfSB3YW5fY2hkbGNfY29uZl90OworCit0eXBlZGVmIHN0cnVjdCB3YW5kZXZfY29uZgoreworIHVuc2lnbmVkIG1hZ2ljOworIHVuc2lnbmVkIGNvbmZpZ19pZDsKKworIHVuc2lnbmVkIGlvcG9ydDsKKyB1bnNpZ25lZCBsb25nIG1hZGRyOworIHVuc2lnbmVkIG1zaXplOworIGludCBpcnE7CisgaW50IGRtYTsKKyBjaGFyIFM1MTRfQ1BVX25vWzFdOworIHVuc2lnbmVkIFBDSV9zbG90X25vOworIGNoYXIgYXV0b19wY2lfY2ZnOworIGNoYXIgY29tbV9wb3J0OworIHVuc2lnbmVkIGJwczsKKyB1bnNpZ25lZCBtdHU7CisgdW5zaWduZWQgdWRwX3BvcnQ7CisgdW5zaWduZWQgY2hhciB0dGw7CisgdW5zaWduZWQgY2hhciBmdDE7CisgY2hhciBpbnRlcmZhY2U7CisgY2hhciBjbG9ja2luZzsKKyBjaGFyIGxpbmVfY29kaW5nOworIGNoYXIgc3RhdGlvbjsKKyBjaGFyIGNvbm5lY3Rpb247CisgY2hhciByZWFkX21vZGU7CisgY2hhciByZWNlaXZlX29ubHk7CisgY2hhciB0dHk7CisgdW5zaWduZWQgdHR5X21ham9yOworIHVuc2lnbmVkIHR0eV9taW5vcjsKKyB1bnNpZ25lZCB0dHlfbW9kZTsKKyBjaGFyIGJhY2t1cDsKKyB1bnNpZ25lZCBod19vcHRbNF07CisgdW5zaWduZWQgcmVzZXJ2ZWRbNF07CisKKyB1bnNpZ25lZCBkYXRhX3NpemU7Cisgdm9pZCogZGF0YTsKKyB1bmlvbgorIHsKKyB3YW5feDI1X2NvbmZfdCB4MjU7Cisgd2FuX3BwcF9jb25mX3QgcHBwOworIHdhbl9mcl9jb25mX3QgZnI7Cisgd2FuX2NoZGxjX2NvbmZfdCBjaGRsYzsKKyB9IHU7Cit9IHdhbmRldl9jb25mX3Q7CisKKyNkZWZpbmUgV0FOQ09ORklHX1gyNSAxMDEgIAorI2RlZmluZSBXQU5DT05GSUdfRlIgMTAyICAKKyNkZWZpbmUgV0FOQ09ORklHX1BQUCAxMDMgIAorI2RlZmluZSBXQU5DT05GSUdfQ0hETEMgMTA0ICAKKyNkZWZpbmUgV0FOQ09ORklHX0JTQyAxMDUgIAorI2RlZmluZSBXQU5DT05GSUdfSERMQyAxMDYgIAorI2RlZmluZSBXQU5DT05GSUdfTVBQUCAxMDcgIAorCisjZGVmaW5lIFdBTk9QVF9PRkYgMAorI2RlZmluZSBXQU5PUFRfT04gMQorI2RlZmluZSBXQU5PUFRfTk8gMAorI2RlZmluZSBXQU5PUFRfWUVTIDEKKworI2RlZmluZSBXQU5PUFRfUlMyMzIgMAorI2RlZmluZSBXQU5PUFRfVjM1IDEKKworI2RlZmluZSBXQU5PUFRfTlJaIDAKKyNkZWZpbmUgV0FOT1BUX05SWkkgMQorI2RlZmluZSBXQU5PUFRfRk0wIDIKKyNkZWZpbmUgV0FOT1BUX0ZNMSAzCisKKyNkZWZpbmUgV0FOT1BUX1BPSU5UVE9QT0lOVCAwICAKKyNkZWZpbmUgV0FOT1BUX01VTFRJRFJPUCAxICAKKworI2RlZmluZSBXQU5PUFRfRVhURVJOQUwgMAorI2RlZmluZSBXQU5PUFRfSU5URVJOQUwgMQorCisjZGVmaW5lIFdBTk9QVF9EVEUgMAorI2RlZmluZSBXQU5PUFRfRENFIDEKKyNkZWZpbmUgV0FOT1BUX0NQRSAwCisjZGVmaW5lIFdBTk9QVF9OT0RFIDEKKyNkZWZpbmUgV0FOT1BUX1NFQ09OREFSWSAwCisjZGVmaW5lIFdBTk9QVF9QUklNQVJZIDEKKworI2RlZmluZSBXQU5PUFRfUEVSTUFORU5UIDAgIAorI2RlZmluZSBXQU5PUFRfU1dJVENIRUQgMSAgCisjZGVmaW5lIFdBTk9QVF9PTkRFTUFORCAyICAKKworI2RlZmluZSBXQU5PUFRfRlJfQU5TSSAxICAKKyNkZWZpbmUgV0FOT1BUX0ZSX1E5MzMgMiAgCisjZGVmaW5lIFdBTk9QVF9GUl9MTUkgMyAgCisKKyNkZWZpbmUgV0FOT1BUX1BQUF9TVEFUSUMgMAorI2RlZmluZSBXQU5PUFRfUFBQX0hPU1QgMQorI2RlZmluZSBXQU5PUFRfUFBQX1BFRVIgMgorCisjZGVmaW5lIFdBTk9QVF9PTkUgMQorI2RlZmluZSBXQU5PUFRfVFdPIDIKKyNkZWZpbmUgV0FOT1BUX09ORV9BTkRfSEFMRiAzCisKKyNkZWZpbmUgV0FOT1BUX05PTkUgMAorI2RlZmluZSBXQU5PUFRfT0REIDEKKyNkZWZpbmUgV0FOT1BUX0VWRU4gMgorCisjZGVmaW5lIFdBTk9QVF9QUkkgMAorI2RlZmluZSBXQU5PUFRfU0VDIDEKKworI2RlZmluZSBXQU5PUFRfSU5UUiAwCisjZGVmaW5lIFdBTk9QVF9QT0xMIDEKKworI2RlZmluZSBXQU5PUFRfVFRZX1NZTkMgMAorI2RlZmluZSBXQU5PUFRfVFRZX0FTWU5DIDEKKwordHlwZWRlZiBzdHJ1Y3Qgd2FuZGV2X3N0YXQKK3sKKyB1bnNpZ25lZCBzdGF0ZTsKKyB1bnNpZ25lZCBuZGV2OworCisgdW5zaWduZWQgY29ubmVjdGlvbjsKKyB1bnNpZ25lZCBtZWRpYV90eXBlOworIHVuc2lnbmVkIG10dTsKKworIHVuc2lnbmVkIG1vZGVtX3N0YXR1czsKKyB1bnNpZ25lZCByeF9mcmFtZXM7CisgdW5zaWduZWQgcnhfb3ZlcnJ1bnM7CisgdW5zaWduZWQgcnhfY3JjX2VycjsKKyB1bnNpZ25lZCByeF9hYm9ydHM7CisgdW5zaWduZWQgcnhfYmFkX2xlbmd0aDsKKyB1bnNpZ25lZCByeF9kcm9wcGVkOworIHVuc2lnbmVkIHR4X2ZyYW1lczsKKyB1bnNpZ25lZCB0eF91bmRlcnJ1bnM7CisgdW5zaWduZWQgdHhfdGltZW91dHM7CisgdW5zaWduZWQgdHhfcmVqZWN0czsKKworIHVuc2lnbmVkIHJ4X2JhZF9mb3JtYXQ7CisgdW5zaWduZWQgcnhfYmFkX2FkZHI7CisgdW5zaWduZWQgdHhfcmV0cmllczsKKyB1bnNpZ25lZCByZXNlcnZlZFsxNl07Cit9IHdhbmRldl9zdGF0X3Q7CisKK2VudW0gd2FuX3N0YXRlcworeworIFdBTl9VTkNPTkZJR1VSRUQsCisgV0FOX0RJU0NPTk5FQ1RFRCwKKyBXQU5fQ09OTkVDVElORywKKyBXQU5fQ09OTkVDVEVELAorIFdBTl9MSU1JVCwKKyBXQU5fRFVBTFBPUlQsCisgV0FOX0RJU0NPTk5FQ1RJTkcsCisgV0FOX0ZUMV9SRUFEWQorfTsKKworZW51bSB7CisgV0FOX0xPQ0FMX0lQLAorIFdBTl9QT0lOVE9QT0lOVF9JUCwKKyBXQU5fTkVUTUFTS19JUCwKKyBXQU5fQlJPQURDQVNUX0lQCit9OworCisjZGVmaW5lIFdBTl9NT0RFTV9DVFMgMHgwMDAxICAKKyNkZWZpbmUgV0FOX01PREVNX0RDRCAweDAwMDIgIAorI2RlZmluZSBXQU5fTU9ERU1fRFRSIDB4MDAxMCAgCisjZGVmaW5lIFdBTl9NT0RFTV9SVFMgMHgwMDIwICAKKwordHlwZWRlZiBzdHJ1Y3Qgd2FuaWZfY29uZgoreworIHVuc2lnbmVkIG1hZ2ljOworIHVuc2lnbmVkIGNvbmZpZ19pZDsKKyBjaGFyIG5hbWVbV0FOX0lGTkFNRV9TWisxXTsKKyBjaGFyIGFkZHJbV0FOX0FERFJFU1NfU1orMV07CisgY2hhciB1c2VkYnlbVVNFRF9CWV9GSUVMRF07CisgdW5zaWduZWQgaWRsZV90aW1lb3V0OworIHVuc2lnbmVkIGhvbGRfdGltZW91dDsKKyB1bnNpZ25lZCBjaXI7CisgdW5zaWduZWQgYmM7CisgdW5zaWduZWQgYmU7CisgdW5zaWduZWQgY2hhciBlbmFibGVfSVBYOworIHVuc2lnbmVkIGNoYXIgaW5hcnA7CisgdW5zaWduZWQgaW5hcnBfaW50ZXJ2YWw7CisgdW5zaWduZWQgbG9uZyBuZXR3b3JrX251bWJlcjsKKyBjaGFyIG1jOworIGNoYXIgbG9jYWxfYWRkcltXQU5fQUREUkVTU19TWisxXTsKKyB1bnNpZ25lZCBjaGFyIHBvcnQ7CisgdW5zaWduZWQgY2hhciBwcm90b2NvbDsKKyBjaGFyIHBhcDsKKyBjaGFyIGNoYXA7CisgdW5zaWduZWQgY2hhciB1c2VyaWRbNTExXTsKKyB1bnNpZ25lZCBjaGFyIHBhc3N3ZFs1MTFdOworIHVuc2lnbmVkIGNoYXIgc3lzbmFtZVszMV07CisgdW5zaWduZWQgY2hhciBpZ25vcmVfZGNkOworIHVuc2lnbmVkIGNoYXIgaWdub3JlX2N0czsKKyB1bnNpZ25lZCBjaGFyIGlnbm9yZV9rZWVwYWxpdmU7CisgdW5zaWduZWQgY2hhciBoZGxjX3N0cmVhbWluZzsKKyB1bnNpZ25lZCBrZWVwYWxpdmVfdHhfdG1yOworIHVuc2lnbmVkIGtlZXBhbGl2ZV9yeF90bXI7CisgdW5zaWduZWQga2VlcGFsaXZlX2Vycl9tYXJnaW47CisgdW5zaWduZWQgc2xhcnBfdGltZXI7CisgdW5zaWduZWQgY2hhciB0dGw7CisgY2hhciBpbnRlcmZhY2U7CisgY2hhciBjbG9ja2luZzsKKyB1bnNpZ25lZCBicHM7CisgdW5zaWduZWQgbXR1OworIHVuc2lnbmVkIGNoYXIgaWZfZG93bjsKKyB1bnNpZ25lZCBjaGFyIGdhdGV3YXk7CisgdW5zaWduZWQgY2hhciB0cnVlX2lmX2VuY29kaW5nOworCisgdW5zaWduZWQgY2hhciBhc3lfZGF0YV90cmFuczsKKyB1bnNpZ25lZCBjaGFyIHJ0c19oc19mb3JfcmVjZWl2ZTsKKyB1bnNpZ25lZCBjaGFyIHhvbl94b2ZmX2hzX2Zvcl9yZWNlaXZlOworIHVuc2lnbmVkIGNoYXIgeG9uX3hvZmZfaHNfZm9yX3RyYW5zbWl0OworIHVuc2lnbmVkIGNoYXIgZGNkX2hzX2Zvcl90cmFuc21pdDsKKyB1bnNpZ25lZCBjaGFyIGN0c19oc19mb3JfdHJhbnNtaXQ7CisgdW5zaWduZWQgY2hhciBhc3luY19tb2RlOworIHVuc2lnbmVkIHR4X2JpdHNfcGVyX2NoYXI7CisgdW5zaWduZWQgcnhfYml0c19wZXJfY2hhcjsKKyB1bnNpZ25lZCBzdG9wX2JpdHM7CisgdW5zaWduZWQgY2hhciBwYXJpdHk7CisgdW5zaWduZWQgYnJlYWtfdGltZXI7CisgdW5zaWduZWQgaW50ZXJfY2hhcl90aW1lcjsKKyB1bnNpZ25lZCByeF9jb21wbGV0ZV9sZW5ndGg7CisgdW5zaWduZWQgeG9uX2NoYXI7CisgdW5zaWduZWQgeG9mZl9jaGFyOworIHVuc2lnbmVkIGNoYXIgcmVjZWl2ZV9vbmx5OworfSB3YW5pZl9jb25mX3Q7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dpcmVsZXNzLmggYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvd2lyZWxlc3MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWNlYjc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dpcmVsZXNzLmgKQEAgLTAsMCArMSw1NDIgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1dJUkVMRVNTX0gKKyNkZWZpbmUgX0xJTlVYX1dJUkVMRVNTX0gKKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ICAKKyNpbmNsdWRlIDxsaW51eC9zb2NrZXQuaD4gIAorI2luY2x1ZGUgPGxpbnV4L2lmLmg+ICAKKworI2RlZmluZSBXSVJFTEVTU19FWFQgMjAKKworI2RlZmluZSBTSU9DU0lXQ09NTUlUIDB4OEIwMCAgCisjZGVmaW5lIFNJT0NHSVdOQU1FIDB4OEIwMSAgCisKKyNkZWZpbmUgU0lPQ1NJV05XSUQgMHg4QjAyICAKKyNkZWZpbmUgU0lPQ0dJV05XSUQgMHg4QjAzICAKKyNkZWZpbmUgU0lPQ1NJV0ZSRVEgMHg4QjA0ICAKKyNkZWZpbmUgU0lPQ0dJV0ZSRVEgMHg4QjA1ICAKKyNkZWZpbmUgU0lPQ1NJV01PREUgMHg4QjA2ICAKKyNkZWZpbmUgU0lPQ0dJV01PREUgMHg4QjA3ICAKKyNkZWZpbmUgU0lPQ1NJV1NFTlMgMHg4QjA4ICAKKyNkZWZpbmUgU0lPQ0dJV1NFTlMgMHg4QjA5ICAKKworI2RlZmluZSBTSU9DU0lXUkFOR0UgMHg4QjBBICAKKyNkZWZpbmUgU0lPQ0dJV1JBTkdFIDB4OEIwQiAgCisjZGVmaW5lIFNJT0NTSVdQUklWIDB4OEIwQyAgCisjZGVmaW5lIFNJT0NHSVdQUklWIDB4OEIwRCAgCisjZGVmaW5lIFNJT0NTSVdTVEFUUyAweDhCMEUgIAorI2RlZmluZSBTSU9DR0lXU1RBVFMgMHg4QjBGICAKKworI2RlZmluZSBTSU9DU0lXU1BZIDB4OEIxMCAgCisjZGVmaW5lIFNJT0NHSVdTUFkgMHg4QjExICAKKyNkZWZpbmUgU0lPQ1NJV1RIUlNQWSAweDhCMTIgIAorI2RlZmluZSBTSU9DR0lXVEhSU1BZIDB4OEIxMyAgCisKKyNkZWZpbmUgU0lPQ1NJV0FQIDB4OEIxNCAgCisjZGVmaW5lIFNJT0NHSVdBUCAweDhCMTUgIAorI2RlZmluZSBTSU9DR0lXQVBMSVNUIDB4OEIxNyAgCisjZGVmaW5lIFNJT0NTSVdTQ0FOIDB4OEIxOCAgCisjZGVmaW5lIFNJT0NHSVdTQ0FOIDB4OEIxOSAgCisKKyNkZWZpbmUgU0lPQ1NJV0VTU0lEIDB4OEIxQSAgCisjZGVmaW5lIFNJT0NHSVdFU1NJRCAweDhCMUIgIAorI2RlZmluZSBTSU9DU0lXTklDS04gMHg4QjFDICAKKyNkZWZpbmUgU0lPQ0dJV05JQ0tOIDB4OEIxRCAgCisKKyNkZWZpbmUgU0lPQ1NJV1JBVEUgMHg4QjIwICAKKyNkZWZpbmUgU0lPQ0dJV1JBVEUgMHg4QjIxICAKKyNkZWZpbmUgU0lPQ1NJV1JUUyAweDhCMjIgIAorI2RlZmluZSBTSU9DR0lXUlRTIDB4OEIyMyAgCisjZGVmaW5lIFNJT0NTSVdGUkFHIDB4OEIyNCAgCisjZGVmaW5lIFNJT0NHSVdGUkFHIDB4OEIyNSAgCisjZGVmaW5lIFNJT0NTSVdUWFBPVyAweDhCMjYgIAorI2RlZmluZSBTSU9DR0lXVFhQT1cgMHg4QjI3ICAKKyNkZWZpbmUgU0lPQ1NJV1JFVFJZIDB4OEIyOCAgCisjZGVmaW5lIFNJT0NHSVdSRVRSWSAweDhCMjkgIAorCisjZGVmaW5lIFNJT0NTSVdFTkNPREUgMHg4QjJBICAKKyNkZWZpbmUgU0lPQ0dJV0VOQ09ERSAweDhCMkIgIAorCisjZGVmaW5lIFNJT0NTSVdQT1dFUiAweDhCMkMgIAorI2RlZmluZSBTSU9DR0lXUE9XRVIgMHg4QjJEICAKKworI2RlZmluZSBTSU9DU0lXR0VOSUUgMHg4QjMwICAKKyNkZWZpbmUgU0lPQ0dJV0dFTklFIDB4OEIzMSAgCisKKyNkZWZpbmUgU0lPQ1NJV01MTUUgMHg4QjE2ICAKKworI2RlZmluZSBTSU9DU0lXQVVUSCAweDhCMzIgIAorI2RlZmluZSBTSU9DR0lXQVVUSCAweDhCMzMgIAorCisjZGVmaW5lIFNJT0NTSVdFTkNPREVFWFQgMHg4QjM0ICAKKyNkZWZpbmUgU0lPQ0dJV0VOQ09ERUVYVCAweDhCMzUgIAorCisjZGVmaW5lIFNJT0NTSVdQTUtTQSAweDhCMzYgIAorCisjZGVmaW5lIFNJT0NJV0ZJUlNUUFJJViAweDhCRTAKKyNkZWZpbmUgU0lPQ0lXTEFTVFBSSVYgMHg4QkZGCisKKyNkZWZpbmUgU0lPQ0lXRklSU1QgMHg4QjAwCisjZGVmaW5lIFNJT0NJV0xBU1QgU0lPQ0lXTEFTVFBSSVYgIAorI2RlZmluZSBJV19JT0NUTF9JRFgoY21kKSAoKGNtZCkgLSBTSU9DSVdGSVJTVCkKKworI2RlZmluZSBJV19JU19TRVQoY21kKSAoISgoY21kKSAmIDB4MSkpCisjZGVmaW5lIElXX0lTX0dFVChjbWQpICgoY21kKSAmIDB4MSkKKworI2RlZmluZSBJV0VWVFhEUk9QIDB4OEMwMCAgCisjZGVmaW5lIElXRVZRVUFMIDB4OEMwMSAgCisjZGVmaW5lIElXRVZDVVNUT00gMHg4QzAyICAKKyNkZWZpbmUgSVdFVlJFR0lTVEVSRUQgMHg4QzAzICAKKyNkZWZpbmUgSVdFVkVYUElSRUQgMHg4QzA0ICAKKyNkZWZpbmUgSVdFVkdFTklFIDB4OEMwNSAgCisjZGVmaW5lIElXRVZNSUNIQUVMTUlDRkFJTFVSRSAweDhDMDYgIAorI2RlZmluZSBJV0VWQVNTT0NSRVFJRSAweDhDMDcgIAorI2RlZmluZSBJV0VWQVNTT0NSRVNQSUUgMHg4QzA4ICAKKyNkZWZpbmUgSVdFVlBNS0lEQ0FORCAweDhDMDkgIAorCisjZGVmaW5lIElXRVZGSVJTVCAweDhDMDAKKyNkZWZpbmUgSVdfRVZFTlRfSURYKGNtZCkgKChjbWQpIC0gSVdFVkZJUlNUKQorCisjZGVmaW5lIElXX1BSSVZfVFlQRV9NQVNLIDB4NzAwMCAgCisjZGVmaW5lIElXX1BSSVZfVFlQRV9OT05FIDB4MDAwMAorI2RlZmluZSBJV19QUklWX1RZUEVfQllURSAweDEwMDAgIAorI2RlZmluZSBJV19QUklWX1RZUEVfQ0hBUiAweDIwMDAgIAorI2RlZmluZSBJV19QUklWX1RZUEVfSU5UIDB4NDAwMCAgCisjZGVmaW5lIElXX1BSSVZfVFlQRV9GTE9BVCAweDUwMDAgIAorI2RlZmluZSBJV19QUklWX1RZUEVfQUREUiAweDYwMDAgIAorCisjZGVmaW5lIElXX1BSSVZfU0laRV9GSVhFRCAweDA4MDAgIAorCisjZGVmaW5lIElXX1BSSVZfU0laRV9NQVNLIDB4MDdGRiAgCisKKyNkZWZpbmUgSVdfTUFYX0ZSRVFVRU5DSUVTIDMyCisKKyNkZWZpbmUgSVdfTUFYX0JJVFJBVEVTIDMyCisKKyNkZWZpbmUgSVdfTUFYX1RYUE9XRVIgOAorCisjZGVmaW5lIElXX01BWF9TUFkgOAorCisjZGVmaW5lIElXX01BWF9BUCA2NAorCisjZGVmaW5lIElXX0VTU0lEX01BWF9TSVpFIDMyCisKKyNkZWZpbmUgSVdfTU9ERV9BVVRPIDAgIAorI2RlZmluZSBJV19NT0RFX0FESE9DIDEgIAorI2RlZmluZSBJV19NT0RFX0lORlJBIDIgIAorI2RlZmluZSBJV19NT0RFX01BU1RFUiAzICAKKyNkZWZpbmUgSVdfTU9ERV9SRVBFQVQgNCAgCisjZGVmaW5lIElXX01PREVfU0VDT05EIDUgIAorI2RlZmluZSBJV19NT0RFX01PTklUT1IgNiAgCisKKyNkZWZpbmUgSVdfUVVBTF9RVUFMX1VQREFURUQgMHgwMSAgCisjZGVmaW5lIElXX1FVQUxfTEVWRUxfVVBEQVRFRCAweDAyCisjZGVmaW5lIElXX1FVQUxfTk9JU0VfVVBEQVRFRCAweDA0CisjZGVmaW5lIElXX1FVQUxfQUxMX1VQREFURUQgMHgwNworI2RlZmluZSBJV19RVUFMX0RCTSAweDA4ICAKKyNkZWZpbmUgSVdfUVVBTF9RVUFMX0lOVkFMSUQgMHgxMCAgCisjZGVmaW5lIElXX1FVQUxfTEVWRUxfSU5WQUxJRCAweDIwCisjZGVmaW5lIElXX1FVQUxfTk9JU0VfSU5WQUxJRCAweDQwCisjZGVmaW5lIElXX1FVQUxfQUxMX0lOVkFMSUQgMHg3MAorCisjZGVmaW5lIElXX0ZSRVFfQVVUTyAweDAwICAKKyNkZWZpbmUgSVdfRlJFUV9GSVhFRCAweDAxICAKKworI2RlZmluZSBJV19NQVhfRU5DT0RJTkdfU0laRVMgOAorCisjZGVmaW5lIElXX0VOQ09ESU5HX1RPS0VOX01BWCA2NCAgCisKKyNkZWZpbmUgSVdfRU5DT0RFX0lOREVYIDB4MDBGRiAgCisjZGVmaW5lIElXX0VOQ09ERV9GTEFHUyAweEZGMDAgIAorI2RlZmluZSBJV19FTkNPREVfTU9ERSAweEYwMDAgIAorI2RlZmluZSBJV19FTkNPREVfRElTQUJMRUQgMHg4MDAwICAKKyNkZWZpbmUgSVdfRU5DT0RFX0VOQUJMRUQgMHgwMDAwICAKKyNkZWZpbmUgSVdfRU5DT0RFX1JFU1RSSUNURUQgMHg0MDAwICAKKyNkZWZpbmUgSVdfRU5DT0RFX09QRU4gMHgyMDAwICAKKyNkZWZpbmUgSVdfRU5DT0RFX05PS0VZIDB4MDgwMCAgCisjZGVmaW5lIElXX0VOQ09ERV9URU1QIDB4MDQwMCAgCisKKyNkZWZpbmUgSVdfUE9XRVJfT04gMHgwMDAwICAKKyNkZWZpbmUgSVdfUE9XRVJfVFlQRSAweEYwMDAgIAorI2RlZmluZSBJV19QT1dFUl9QRVJJT0QgMHgxMDAwICAKKyNkZWZpbmUgSVdfUE9XRVJfVElNRU9VVCAweDIwMDAgIAorI2RlZmluZSBJV19QT1dFUl9NT0RFIDB4MEYwMCAgCisjZGVmaW5lIElXX1BPV0VSX1VOSUNBU1RfUiAweDAxMDAgIAorI2RlZmluZSBJV19QT1dFUl9NVUxUSUNBU1RfUiAweDAyMDAgIAorI2RlZmluZSBJV19QT1dFUl9BTExfUiAweDAzMDAgIAorI2RlZmluZSBJV19QT1dFUl9GT1JDRV9TIDB4MDQwMCAgCisjZGVmaW5lIElXX1BPV0VSX1JFUEVBVEVSIDB4MDgwMCAgCisjZGVmaW5lIElXX1BPV0VSX01PRElGSUVSIDB4MDAwRiAgCisjZGVmaW5lIElXX1BPV0VSX01JTiAweDAwMDEgIAorI2RlZmluZSBJV19QT1dFUl9NQVggMHgwMDAyICAKKyNkZWZpbmUgSVdfUE9XRVJfUkVMQVRJVkUgMHgwMDA0ICAKKworI2RlZmluZSBJV19UWFBPV19UWVBFIDB4MDBGRiAgCisjZGVmaW5lIElXX1RYUE9XX0RCTSAweDAwMDAgIAorI2RlZmluZSBJV19UWFBPV19NV0FUVCAweDAwMDEgIAorI2RlZmluZSBJV19UWFBPV19SRUxBVElWRSAweDAwMDIgIAorI2RlZmluZSBJV19UWFBPV19SQU5HRSAweDEwMDAgIAorCisjZGVmaW5lIElXX1JFVFJZX09OIDB4MDAwMCAgCisjZGVmaW5lIElXX1JFVFJZX1RZUEUgMHhGMDAwICAKKyNkZWZpbmUgSVdfUkVUUllfTElNSVQgMHgxMDAwICAKKyNkZWZpbmUgSVdfUkVUUllfTElGRVRJTUUgMHgyMDAwICAKKyNkZWZpbmUgSVdfUkVUUllfTU9ESUZJRVIgMHgwMDBGICAKKyNkZWZpbmUgSVdfUkVUUllfTUlOIDB4MDAwMSAgCisjZGVmaW5lIElXX1JFVFJZX01BWCAweDAwMDIgIAorI2RlZmluZSBJV19SRVRSWV9SRUxBVElWRSAweDAwMDQgIAorCisjZGVmaW5lIElXX1NDQU5fREVGQVVMVCAweDAwMDAgIAorI2RlZmluZSBJV19TQ0FOX0FMTF9FU1NJRCAweDAwMDEgIAorI2RlZmluZSBJV19TQ0FOX1RISVNfRVNTSUQgMHgwMDAyICAKKyNkZWZpbmUgSVdfU0NBTl9BTExfRlJFUSAweDAwMDQgIAorI2RlZmluZSBJV19TQ0FOX1RISVNfRlJFUSAweDAwMDggIAorI2RlZmluZSBJV19TQ0FOX0FMTF9NT0RFIDB4MDAxMCAgCisjZGVmaW5lIElXX1NDQU5fVEhJU19NT0RFIDB4MDAyMCAgCisjZGVmaW5lIElXX1NDQU5fQUxMX1JBVEUgMHgwMDQwICAKKyNkZWZpbmUgSVdfU0NBTl9USElTX1JBVEUgMHgwMDgwICAKKworI2RlZmluZSBJV19TQ0FOX1RZUEVfQUNUSVZFIDAKKyNkZWZpbmUgSVdfU0NBTl9UWVBFX1BBU1NJVkUgMQorCisjZGVmaW5lIElXX1NDQU5fTUFYX0RBVEEgNDA5NiAgCisKKyNkZWZpbmUgSVdfQ1VTVE9NX01BWCAyNTYgIAorCisjZGVmaW5lIElXX0dFTkVSSUNfSUVfTUFYIDEwMjQKKworI2RlZmluZSBJV19NTE1FX0RFQVVUSCAwCisjZGVmaW5lIElXX01MTUVfRElTQVNTT0MgMQorCisjZGVmaW5lIElXX0FVVEhfSU5ERVggMHgwRkZGCisjZGVmaW5lIElXX0FVVEhfRkxBR1MgMHhGMDAwCisKKyNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTiAwCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1BBSVJXSVNFIDEKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfR1JPVVAgMgorI2RlZmluZSBJV19BVVRIX0tFWV9NR01UIDMKKyNkZWZpbmUgSVdfQVVUSF9US0lQX0NPVU5URVJNRUFTVVJFUyA0CisjZGVmaW5lIElXX0FVVEhfRFJPUF9VTkVOQ1JZUFRFRCA1CisjZGVmaW5lIElXX0FVVEhfODAyMTFfQVVUSF9BTEcgNgorI2RlZmluZSBJV19BVVRIX1dQQV9FTkFCTEVEIDcKKyNkZWZpbmUgSVdfQVVUSF9SWF9VTkVOQ1JZUFRFRF9FQVBPTCA4CisjZGVmaW5lIElXX0FVVEhfUk9BTUlOR19DT05UUk9MIDkKKyNkZWZpbmUgSVdfQVVUSF9QUklWQUNZX0lOVk9LRUQgMTAKKworI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX0RJU0FCTEVEIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfQVVUSF9XUEFfVkVSU0lPTl9XUEEgMHgwMDAwMDAwMgorI2RlZmluZSBJV19BVVRIX1dQQV9WRVJTSU9OX1dQQTIgMHgwMDAwMDAwNAorCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX05PTkUgMHgwMDAwMDAwMQorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9XRVA0MCAweDAwMDAwMDAyCisjZGVmaW5lIElXX0FVVEhfQ0lQSEVSX1RLSVAgMHgwMDAwMDAwNAorI2RlZmluZSBJV19BVVRIX0NJUEhFUl9DQ01QIDB4MDAwMDAwMDgKKyNkZWZpbmUgSVdfQVVUSF9DSVBIRVJfV0VQMTA0IDB4MDAwMDAwMTAKKworI2RlZmluZSBJV19BVVRIX0tFWV9NR01UXzgwMl8xWCAxCisjZGVmaW5lIElXX0FVVEhfS0VZX01HTVRfUFNLIDIKKworI2RlZmluZSBJV19BVVRIX0FMR19PUEVOX1NZU1RFTSAweDAwMDAwMDAxCisjZGVmaW5lIElXX0FVVEhfQUxHX1NIQVJFRF9LRVkgMHgwMDAwMDAwMgorI2RlZmluZSBJV19BVVRIX0FMR19MRUFQIDB4MDAwMDAwMDQKKworI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfRU5BQkxFIDAgIAorI2RlZmluZSBJV19BVVRIX1JPQU1JTkdfRElTQUJMRSAxICAKKworI2RlZmluZSBJV19FTkNPREVfU0VRX01BWF9TSVpFIDgKKworI2RlZmluZSBJV19FTkNPREVfQUxHX05PTkUgMAorI2RlZmluZSBJV19FTkNPREVfQUxHX1dFUCAxCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfVEtJUCAyCisjZGVmaW5lIElXX0VOQ09ERV9BTEdfQ0NNUCAzCisKKyNkZWZpbmUgSVdfRU5DT0RFX0VYVF9UWF9TRVFfVkFMSUQgMHgwMDAwMDAwMQorI2RlZmluZSBJV19FTkNPREVfRVhUX1JYX1NFUV9WQUxJRCAweDAwMDAwMDAyCisjZGVmaW5lIElXX0VOQ09ERV9FWFRfR1JPVVBfS0VZIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVdfRU5DT0RFX0VYVF9TRVRfVFhfS0VZIDB4MDAwMDAwMDgKKworI2RlZmluZSBJV19NSUNGQUlMVVJFX0tFWV9JRCAweDAwMDAwMDAzICAKKyNkZWZpbmUgSVdfTUlDRkFJTFVSRV9HUk9VUCAweDAwMDAwMDA0CisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfUEFJUldJU0UgMHgwMDAwMDAwOAorI2RlZmluZSBJV19NSUNGQUlMVVJFX1NUQUtFWSAweDAwMDAwMDEwCisjZGVmaW5lIElXX01JQ0ZBSUxVUkVfQ09VTlQgMHgwMDAwMDA2MCAgCisKKyNkZWZpbmUgSVdfRU5DX0NBUEFfV1BBIDB4MDAwMDAwMDEKKyNkZWZpbmUgSVdfRU5DX0NBUEFfV1BBMiAweDAwMDAwMDAyCisjZGVmaW5lIElXX0VOQ19DQVBBX0NJUEhFUl9US0lQIDB4MDAwMDAwMDQKKyNkZWZpbmUgSVdfRU5DX0NBUEFfQ0lQSEVSX0NDTVAgMHgwMDAwMDAwOAorCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfQkFTRShjbWQpICgoY21kID49IFNJT0NJV0ZJUlNUUFJJVikgPyAgIChjbWQgLSBTSU9DSVdGSVJTVFBSSVYgKyAweDYwKSA6ICAgKGNtZCAtIFNJT0NTSVdDT01NSVQpKQorI2RlZmluZSBJV19FVkVOVF9DQVBBX0lOREVYKGNtZCkgKElXX0VWRU5UX0NBUEFfQkFTRShjbWQpID4+IDUpCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfTUFTSyhjbWQpICgxIDw8IChJV19FVkVOVF9DQVBBX0JBU0UoY21kKSAmIDB4MUYpKQorCisjZGVmaW5lIElXX0VWRU5UX0NBUEFfS18wIChJV19FVkVOVF9DQVBBX01BU0soMHg4QjA0KSB8ICAgSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIwNikgfCAgIElXX0VWRU5UX0NBUEFfTUFTSygweDhCMUEpKQorI2RlZmluZSBJV19FVkVOVF9DQVBBX0tfMSAoSVdfRVZFTlRfQ0FQQV9NQVNLKDB4OEIyQSkpCisKKyNkZWZpbmUgSVdfRVZFTlRfQ0FQQV9TRVQoZXZlbnRfY2FwYSwgY21kKSAoZXZlbnRfY2FwYVtJV19FVkVOVF9DQVBBX0lOREVYKGNtZCldIHw9IElXX0VWRU5UX0NBUEFfTUFTSyhjbWQpKQorI2RlZmluZSBJV19FVkVOVF9DQVBBX1NFVF9LRVJORUwoZXZlbnRfY2FwYSkge2V2ZW50X2NhcGFbMF0gfD0gSVdfRVZFTlRfQ0FQQV9LXzA7IGV2ZW50X2NhcGFbMV0gfD0gSVdfRVZFTlRfQ0FQQV9LXzE7IH0KKworc3RydWN0IGl3X3BhcmFtCit7CisgX19zMzIgdmFsdWU7CisgX191OCBmaXhlZDsKKyBfX3U4IGRpc2FibGVkOworIF9fdTE2IGZsYWdzOworfTsKKworc3RydWN0IGl3X3BvaW50Cit7Cisgdm9pZCBfX3VzZXIgKnBvaW50ZXI7CisgX191MTYgbGVuZ3RoOworIF9fdTE2IGZsYWdzOworfTsKKworc3RydWN0IGl3X2ZyZXEKK3sKKyBfX3MzMiBtOworIF9fczE2IGU7CisgX191OCBpOworIF9fdTggZmxhZ3M7Cit9OworCitzdHJ1Y3QgaXdfcXVhbGl0eQoreworIF9fdTggcXVhbDsKKyBfX3U4IGxldmVsOworIF9fdTggbm9pc2U7CisgX191OCB1cGRhdGVkOworfTsKKworc3RydWN0IGl3X2Rpc2NhcmRlZAoreworIF9fdTMyIG53aWQ7CisgX191MzIgY29kZTsKKyBfX3UzMiBmcmFnbWVudDsKKyBfX3UzMiByZXRyaWVzOworIF9fdTMyIG1pc2M7Cit9OworCitzdHJ1Y3QgaXdfbWlzc2VkCit7CisgX191MzIgYmVhY29uOworfTsKKworc3RydWN0IGl3X3RocnNweQoreworIHN0cnVjdCBzb2NrYWRkciBhZGRyOworIHN0cnVjdCBpd19xdWFsaXR5IHF1YWw7Cisgc3RydWN0IGl3X3F1YWxpdHkgbG93OworIHN0cnVjdCBpd19xdWFsaXR5IGhpZ2g7Cit9OworCitzdHJ1Y3QgaXdfc2Nhbl9yZXEKK3sKKyBfX3U4IHNjYW5fdHlwZTsKKyBfX3U4IGVzc2lkX2xlbjsKKyBfX3U4IG51bV9jaGFubmVsczsKKyBfX3U4IGZsYWdzOworIHN0cnVjdCBzb2NrYWRkciBic3NpZDsKKworIF9fdTggZXNzaWRbSVdfRVNTSURfTUFYX1NJWkVdOworCisgX191MzIgbWluX2NoYW5uZWxfdGltZTsKKyBfX3UzMiBtYXhfY2hhbm5lbF90aW1lOworCisgc3RydWN0IGl3X2ZyZXEgY2hhbm5lbF9saXN0W0lXX01BWF9GUkVRVUVOQ0lFU107Cit9OworCitzdHJ1Y3QgaXdfZW5jb2RlX2V4dAoreworIF9fdTMyIGV4dF9mbGFnczsKKyBfX3U4IHR4X3NlcVtJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKyBfX3U4IHJ4X3NlcVtJV19FTkNPREVfU0VRX01BWF9TSVpFXTsKKyBzdHJ1Y3Qgc29ja2FkZHIgYWRkcjsKKyBfX3UxNiBhbGc7CisgX191MTYga2V5X2xlbjsKKyBfX3U4IGtleVswXTsKK307CisKK3N0cnVjdCBpd19tbG1lCit7CisgX191MTYgY21kOworIF9fdTE2IHJlYXNvbl9jb2RlOworIHN0cnVjdCBzb2NrYWRkciBhZGRyOworfTsKKworI2RlZmluZSBJV19QTUtTQV9BREQgMQorI2RlZmluZSBJV19QTUtTQV9SRU1PVkUgMgorI2RlZmluZSBJV19QTUtTQV9GTFVTSCAzCisKKyNkZWZpbmUgSVdfUE1LSURfTEVOIDE2CisKK3N0cnVjdCBpd19wbWtzYQoreworIF9fdTMyIGNtZDsKKyBzdHJ1Y3Qgc29ja2FkZHIgYnNzaWQ7CisgX191OCBwbWtpZFtJV19QTUtJRF9MRU5dOworfTsKKworc3RydWN0IGl3X21pY2hhZWxtaWNmYWlsdXJlCit7CisgX191MzIgZmxhZ3M7Cisgc3RydWN0IHNvY2thZGRyIHNyY19hZGRyOworIF9fdTggdHNjW0lXX0VOQ09ERV9TRVFfTUFYX1NJWkVdOworfTsKKworI2RlZmluZSBJV19QTUtJRF9DQU5EX1BSRUFVVEggMHgwMDAwMDAwMSAgCitzdHJ1Y3QgaXdfcG1raWRfY2FuZAoreworIF9fdTMyIGZsYWdzOworIF9fdTMyIGluZGV4OworIHN0cnVjdCBzb2NrYWRkciBic3NpZDsKK307CisKK3N0cnVjdCBpd19zdGF0aXN0aWNzCit7CisgX191MTYgc3RhdHVzOworCisgc3RydWN0IGl3X3F1YWxpdHkgcXVhbDsKKyBzdHJ1Y3QgaXdfZGlzY2FyZGVkIGRpc2NhcmQ7Cisgc3RydWN0IGl3X21pc3NlZCBtaXNzOworfTsKKwordW5pb24gaXdyZXFfZGF0YQoreworCisgY2hhciBuYW1lW0lGTkFNU0laXTsKKworIHN0cnVjdCBpd19wb2ludCBlc3NpZDsKKyBzdHJ1Y3QgaXdfcGFyYW0gbndpZDsKKyBzdHJ1Y3QgaXdfZnJlcSBmcmVxOworCisgc3RydWN0IGl3X3BhcmFtIHNlbnM7Cisgc3RydWN0IGl3X3BhcmFtIGJpdHJhdGU7Cisgc3RydWN0IGl3X3BhcmFtIHR4cG93ZXI7Cisgc3RydWN0IGl3X3BhcmFtIHJ0czsKKyBzdHJ1Y3QgaXdfcGFyYW0gZnJhZzsKKyBfX3UzMiBtb2RlOworIHN0cnVjdCBpd19wYXJhbSByZXRyeTsKKworIHN0cnVjdCBpd19wb2ludCBlbmNvZGluZzsKKyBzdHJ1Y3QgaXdfcGFyYW0gcG93ZXI7Cisgc3RydWN0IGl3X3F1YWxpdHkgcXVhbDsKKworIHN0cnVjdCBzb2NrYWRkciBhcF9hZGRyOworIHN0cnVjdCBzb2NrYWRkciBhZGRyOworCisgc3RydWN0IGl3X3BhcmFtIHBhcmFtOworIHN0cnVjdCBpd19wb2ludCBkYXRhOworfTsKKworc3RydWN0IGl3cmVxCit7CisgdW5pb24KKyB7CisgY2hhciBpZnJuX25hbWVbSUZOQU1TSVpdOworIH0gaWZyX2lmcm47CisKKyB1bmlvbiBpd3JlcV9kYXRhIHU7Cit9OworCitzdHJ1Y3QgaXdfcmFuZ2UKK3sKKworIF9fdTMyIHRocm91Z2hwdXQ7CisKKyBfX3UzMiBtaW5fbndpZDsKKyBfX3UzMiBtYXhfbndpZDsKKworIF9fdTE2IG9sZF9udW1fY2hhbm5lbHM7CisgX191OCBvbGRfbnVtX2ZyZXF1ZW5jeTsKKworIF9fdTMyIGV2ZW50X2NhcGFbNl07CisKKyBfX3MzMiBzZW5zaXRpdml0eTsKKworIHN0cnVjdCBpd19xdWFsaXR5IG1heF9xdWFsOworCisgc3RydWN0IGl3X3F1YWxpdHkgYXZnX3F1YWw7CisKKyBfX3U4IG51bV9iaXRyYXRlczsKKyBfX3MzMiBiaXRyYXRlW0lXX01BWF9CSVRSQVRFU107CisKKyBfX3MzMiBtaW5fcnRzOworIF9fczMyIG1heF9ydHM7CisKKyBfX3MzMiBtaW5fZnJhZzsKKyBfX3MzMiBtYXhfZnJhZzsKKworIF9fczMyIG1pbl9wbXA7CisgX19zMzIgbWF4X3BtcDsKKyBfX3MzMiBtaW5fcG10OworIF9fczMyIG1heF9wbXQ7CisgX191MTYgcG1wX2ZsYWdzOworIF9fdTE2IHBtdF9mbGFnczsKKyBfX3UxNiBwbV9jYXBhOworCisgX191MTYgZW5jb2Rpbmdfc2l6ZVtJV19NQVhfRU5DT0RJTkdfU0laRVNdOworIF9fdTggbnVtX2VuY29kaW5nX3NpemVzOworIF9fdTggbWF4X2VuY29kaW5nX3Rva2VuczsKKworIF9fdTggZW5jb2RpbmdfbG9naW5faW5kZXg7CisKKyBfX3UxNiB0eHBvd2VyX2NhcGE7CisgX191OCBudW1fdHhwb3dlcjsKKyBfX3MzMiB0eHBvd2VyW0lXX01BWF9UWFBPV0VSXTsKKworIF9fdTggd2VfdmVyc2lvbl9jb21waWxlZDsKKyBfX3U4IHdlX3ZlcnNpb25fc291cmNlOworCisgX191MTYgcmV0cnlfY2FwYTsKKyBfX3UxNiByZXRyeV9mbGFnczsKKyBfX3UxNiByX3RpbWVfZmxhZ3M7CisgX19zMzIgbWluX3JldHJ5OworIF9fczMyIG1heF9yZXRyeTsKKyBfX3MzMiBtaW5fcl90aW1lOworIF9fczMyIG1heF9yX3RpbWU7CisKKyBfX3UxNiBudW1fY2hhbm5lbHM7CisgX191OCBudW1fZnJlcXVlbmN5OworIHN0cnVjdCBpd19mcmVxIGZyZXFbSVdfTUFYX0ZSRVFVRU5DSUVTXTsKKworIF9fdTMyIGVuY19jYXBhOworfTsKKworc3RydWN0IGl3X3ByaXZfYXJncworeworIF9fdTMyIGNtZDsKKyBfX3UxNiBzZXRfYXJnczsKKyBfX3UxNiBnZXRfYXJnczsKKyBjaGFyIG5hbWVbSUZOQU1TSVpdOworfTsKKworc3RydWN0IGl3X2V2ZW50Cit7CisgX191MTYgbGVuOworIF9fdTE2IGNtZDsKKyB1bmlvbiBpd3JlcV9kYXRhIHU7Cit9OworCisjZGVmaW5lIElXX0VWX0xDUF9MRU4gKHNpemVvZihzdHJ1Y3QgaXdfZXZlbnQpIC0gc2l6ZW9mKHVuaW9uIGl3cmVxX2RhdGEpKQorCisjZGVmaW5lIElXX0VWX0NIQVJfTEVOIChJV19FVl9MQ1BfTEVOICsgSUZOQU1TSVopCisjZGVmaW5lIElXX0VWX1VJTlRfTEVOIChJV19FVl9MQ1BfTEVOICsgc2l6ZW9mKF9fdTMyKSkKKyNkZWZpbmUgSVdfRVZfRlJFUV9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X2ZyZXEpKQorI2RlZmluZSBJV19FVl9QQVJBTV9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BhcmFtKSkKKyNkZWZpbmUgSVdfRVZfQUREUl9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IHNvY2thZGRyKSkKKyNkZWZpbmUgSVdfRVZfUVVBTF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3F1YWxpdHkpKQorCisjZGVmaW5lIElXX0VWX1BPSU5UX09GRiAoKChjaGFyICopICYoKChzdHJ1Y3QgaXdfcG9pbnQgKikgTlVMTCktPmxlbmd0aCkpIC0gICAoY2hhciAqKSBOVUxMKQorI2RlZmluZSBJV19FVl9QT0lOVF9MRU4gKElXX0VWX0xDUF9MRU4gKyBzaXplb2Yoc3RydWN0IGl3X3BvaW50KSAtICAgSVdfRVZfUE9JTlRfT0ZGKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93b3JrcXVldWUuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC93b3JrcXVldWUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMmZhYjJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3dvcmtxdWV1ZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX0xJTlVYX1dPUktRVUVVRV9ICisjZGVmaW5lIF9MSU5VWF9XT1JLUVVFVUVfSAorCisjaW5jbHVkZSA8bGludXgvdGltZXIuaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CisjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisKK3N0cnVjdCB3b3JrcXVldWVfc3RydWN0OworCitzdHJ1Y3Qgd29ya19zdHJ1Y3QgeworIHVuc2lnbmVkIGxvbmcgcGVuZGluZzsKKyBzdHJ1Y3QgbGlzdF9oZWFkIGVudHJ5OworIHZvaWQgKCpmdW5jKSh2b2lkICopOworIHZvaWQgKmRhdGE7Cisgdm9pZCAqd3FfZGF0YTsKKyBzdHJ1Y3QgdGltZXJfbGlzdCB0aW1lcjsKK307CisKK3N0cnVjdCBleGVjdXRlX3dvcmsgeworIHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworI2RlZmluZSBfX1dPUktfSU5JVElBTElaRVIobiwgZiwgZCkgeyAgIC5lbnRyeSA9IHsgJihuKS5lbnRyeSwgJihuKS5lbnRyeSB9LCAgIC5mdW5jID0gKGYpLCAgIC5kYXRhID0gKGQpLCAgIC50aW1lciA9IFRJTUVSX0lOSVRJQUxJWkVSKE5VTEwsIDAsIDApLCAgIH0KKworI2RlZmluZSBERUNMQVJFX1dPUksobiwgZiwgZCkgICBzdHJ1Y3Qgd29ya19zdHJ1Y3QgbiA9IF9fV09SS19JTklUSUFMSVpFUihuLCBmLCBkKQorCisjZGVmaW5lIFBSRVBBUkVfV09SSyhfd29yaywgX2Z1bmMsIF9kYXRhKSAgIGRvIHsgICAoX3dvcmspLT5mdW5jID0gX2Z1bmM7ICAgKF93b3JrKS0+ZGF0YSA9IF9kYXRhOyAgIH0gd2hpbGUgKDApCisKKyNkZWZpbmUgSU5JVF9XT1JLKF93b3JrLCBfZnVuYywgX2RhdGEpICAgZG8geyAgIElOSVRfTElTVF9IRUFEKCYoX3dvcmspLT5lbnRyeSk7ICAgKF93b3JrKS0+cGVuZGluZyA9IDA7ICAgUFJFUEFSRV9XT1JLKChfd29yayksIChfZnVuYyksIChfZGF0YSkpOyAgIGluaXRfdGltZXIoJihfd29yayktPnRpbWVyKTsgICB9IHdoaWxlICgwKQorCisjZGVmaW5lIGNyZWF0ZV93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMCkKKyNkZWZpbmUgY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUobmFtZSkgX19jcmVhdGVfd29ya3F1ZXVlKChuYW1lKSwgMSkKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgveGF0dHIuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC94YXR0ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY1ZjY0MGQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgveGF0dHIuaApAQCAtMCwwICsxLDQzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9MSU5VWF9YQVRUUl9ICisjZGVmaW5lIF9MSU5VWF9YQVRUUl9ICisKKyNkZWZpbmUgWEFUVFJfQ1JFQVRFIDB4MSAgCisjZGVmaW5lIFhBVFRSX1JFUExBQ0UgMHgyICAKKworI2RlZmluZSBYQVRUUl9PUzJfUFJFRklYICJvczIuIgorI2RlZmluZSBYQVRUUl9PUzJfUFJFRklYX0xFTiAoc2l6ZW9mIChYQVRUUl9PUzJfUFJFRklYKSAtIDEpCisKKyNkZWZpbmUgWEFUVFJfU0VDVVJJVFlfUFJFRklYICJzZWN1cml0eS4iCisjZGVmaW5lIFhBVFRSX1NFQ1VSSVRZX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSAtIDEpCisKKyNkZWZpbmUgWEFUVFJfU1lTVEVNX1BSRUZJWCAic3lzdGVtLiIKKyNkZWZpbmUgWEFUVFJfU1lTVEVNX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfU1lTVEVNX1BSRUZJWCkgLSAxKQorCisjZGVmaW5lIFhBVFRSX1RSVVNURURfUFJFRklYICJ0cnVzdGVkLiIKKyNkZWZpbmUgWEFUVFJfVFJVU1RFRF9QUkVGSVhfTEVOIChzaXplb2YgKFhBVFRSX1RSVVNURURfUFJFRklYKSAtIDEpCisKKyNkZWZpbmUgWEFUVFJfVVNFUl9QUkVGSVggInVzZXIuIgorI2RlZmluZSBYQVRUUl9VU0VSX1BSRUZJWF9MRU4gKHNpemVvZiAoWEFUVFJfVVNFUl9QUkVGSVgpIC0gMSkKKworc3RydWN0IHhhdHRyX2hhbmRsZXIgeworIGNoYXIgKnByZWZpeDsKKyBzaXplX3QgKCpsaXN0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lX2xlbik7CisgaW50ICgqZ2V0KShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCisgc2l6ZV90IHNpemUpOworIGludCAoKnNldCkoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3Qgdm9pZCAqYnVmZmVyLAorIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemNvbmYuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96Y29uZi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE4ZWE3OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemNvbmYuaApAQCAtMCwwICsxLDM4IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9aQ09ORl9ICisjZGVmaW5lIF9aQ09ORl9ICisKKyNpZm5kZWYgTUFYX01FTV9MRVZFTAorI2RlZmluZSBNQVhfTUVNX0xFVkVMIDgKKyNlbmRpZgorCisjaWZuZGVmIE1BWF9XQklUUworI2RlZmluZSBNQVhfV0JJVFMgMTUgIAorI2VuZGlmCisKKyNpZm5kZWYgREVGX1dCSVRTCisjZGVmaW5lIERFRl9XQklUUyBNQVhfV0JJVFMKKyNlbmRpZgorCisjaWYgTUFYX01FTV9MRVZFTCA+PSA4CisjZGVmaW5lIERFRl9NRU1fTEVWRUwgOAorI2Vsc2UKKyNkZWZpbmUgREVGX01FTV9MRVZFTCBNQVhfTUVNX0xFVkVMCisjZW5kaWYKKwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIGludCB1SW50OwordHlwZWRlZiB1bnNpZ25lZCBsb25nIHVMb25nOwordHlwZWRlZiB2b2lkICp2b2lkcDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbGludXgvemxpYi5oIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3psaWIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wNTJhZGZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3psaWIuaApAQCAtMCwwICsxLDgwIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9aTElCX0gKKyNkZWZpbmUgX1pMSUJfSAorCisjaW5jbHVkZSA8bGludXgvemNvbmYuaD4KKworc3RydWN0IGludGVybmFsX3N0YXRlOworCit0eXBlZGVmIHN0cnVjdCB6X3N0cmVhbV9zIHsKKyBCeXRlICpuZXh0X2luOworIHVJbnQgYXZhaWxfaW47CisgdUxvbmcgdG90YWxfaW47CisKKyBCeXRlICpuZXh0X291dDsKKyB1SW50IGF2YWlsX291dDsKKyB1TG9uZyB0b3RhbF9vdXQ7CisKKyBjaGFyICptc2c7Cisgc3RydWN0IGludGVybmFsX3N0YXRlICpzdGF0ZTsKKworIHZvaWQgKndvcmtzcGFjZTsKKworIGludCBkYXRhX3R5cGU7CisgdUxvbmcgYWRsZXI7CisgdUxvbmcgcmVzZXJ2ZWQ7Cit9IHpfc3RyZWFtOworCit0eXBlZGVmIHpfc3RyZWFtICp6X3N0cmVhbXA7CisKKyNkZWZpbmUgWl9OT19GTFVTSCAwCisjZGVmaW5lIFpfUEFSVElBTF9GTFVTSCAxICAKKyNkZWZpbmUgWl9QQUNLRVRfRkxVU0ggMgorI2RlZmluZSBaX1NZTkNfRkxVU0ggMworI2RlZmluZSBaX0ZVTExfRkxVU0ggNAorI2RlZmluZSBaX0ZJTklTSCA1CisjZGVmaW5lIFpfQkxPQ0sgNiAgCisKKyNkZWZpbmUgWl9PSyAwCisjZGVmaW5lIFpfU1RSRUFNX0VORCAxCisjZGVmaW5lIFpfTkVFRF9ESUNUIDIKKyNkZWZpbmUgWl9FUlJOTyAoLTEpCisjZGVmaW5lIFpfU1RSRUFNX0VSUk9SICgtMikKKyNkZWZpbmUgWl9EQVRBX0VSUk9SICgtMykKKyNkZWZpbmUgWl9NRU1fRVJST1IgKC00KQorI2RlZmluZSBaX0JVRl9FUlJPUiAoLTUpCisjZGVmaW5lIFpfVkVSU0lPTl9FUlJPUiAoLTYpCisKKyNkZWZpbmUgWl9OT19DT01QUkVTU0lPTiAwCisjZGVmaW5lIFpfQkVTVF9TUEVFRCAxCisjZGVmaW5lIFpfQkVTVF9DT01QUkVTU0lPTiA5CisjZGVmaW5lIFpfREVGQVVMVF9DT01QUkVTU0lPTiAoLTEpCisKKyNkZWZpbmUgWl9GSUxURVJFRCAxCisjZGVmaW5lIFpfSFVGRk1BTl9PTkxZIDIKKyNkZWZpbmUgWl9ERUZBVUxUX1NUUkFURUdZIDAKKworI2RlZmluZSBaX0JJTkFSWSAwCisjZGVmaW5lIFpfQVNDSUkgMQorI2RlZmluZSBaX1VOS05PV04gMgorCisjZGVmaW5lIFpfREVGTEFURUQgOAorCisjZGVmaW5lIHpsaWJfZGVmbGF0ZUluaXQoc3RybSwgbGV2ZWwpICAgemxpYl9kZWZsYXRlSW5pdDIoKHN0cm0pLCAobGV2ZWwpLCBaX0RFRkxBVEVELCBNQVhfV0JJVFMsICAgREVGX01FTV9MRVZFTCwgWl9ERUZBVUxUX1NUUkFURUdZKQorI2RlZmluZSB6bGliX2luZmxhdGVJbml0KHN0cm0pICAgemxpYl9pbmZsYXRlSW5pdDIoKHN0cm0pLCBERUZfV0JJVFMpCisKKyNpZiAhZGVmaW5lZChfWl9VVElMX0gpICYmICFkZWZpbmVkKE5PX0RVTU1ZX0RFQ0wpCisgc3RydWN0IGludGVybmFsX3N0YXRlIHtpbnQgZHVtbXk7fTsKKyNlbmRpZgorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96b3Jyb19pZHMuaCBiL2xpYmMva2VybmVsL2NvbW1vbi9saW51eC96b3Jyb19pZHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNmIxZDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL2xpbnV4L3pvcnJvX2lkcy5oCkBAIC0wLDAgKzEsNTQ5IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjZGVmaW5lIFpPUlJPX01BTlVGX1BBQ0lGSUNfUEVSSVBIRVJBTFMgMHgwMEQzCisjZGVmaW5lIFpPUlJPX1BST0RfUEFDSUZJQ19QRVJJUEhFUkFMU19TRV8yMDAwX0E1MDAgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QQUNJRklDX1BFUklQSEVSQUxTX1NDU0kgWk9SUk9fSUQoUEFDSUZJQ19QRVJJUEhFUkFMUywgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfVVNBXzIgMHgwMTAwCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1dBUlBfRU5HSU5FIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19VU0FfMiwgMHgxMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8xIDB4MDBERAorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX1JBTV9CT1hfMk1CIFpPUlJPX0lEKEtVUEtFXzEsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUVNUEhJUyAweDAxMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NRU1QSElTX1NUT1JNQlJJTkdFUiBaT1JST19JRChNRU1QSElTLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGXzNfU1RBVEUgMHgwMjAwCisjZGVmaW5lIFpPUlJPX1BST0RfM19TVEFURV9NRUdBTUlYXzIwMDAgWk9SUk9fSUQoM19TVEFURSwgMHgwMiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01NT0RPUkVfQlJBVU5TQ0hXRUlHIDB4MDIwMQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjA4OF9BMjI4NiBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjI4NiBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNDA5MV8xIFpPUlJPX0lEKENPTU1PRE9SRV9CUkFVTlNDSFdFSUcsIDB4NTQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMzg2U1hfMSBaT1JST19JRChDT01NT0RPUkVfQlJBVU5TQ0hXRUlHLCAweDY3LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSAweDAyMDIKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwOTBBIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA5MV8xIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU5MF9BMjA5MV8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwOTBCIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNTkwX0EyMDUyX0EyMDU4X0EyMDkxIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTU2MF9SQU0gWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMl9QUk9UT1RZUEUgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDQ1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BMjIzMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyNjIwIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1MCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTI2MzAgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDUxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NCTV9BNDA5MV8yIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMSwgMHg1NCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwNjVfMSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NUEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX1JPTVVMQVRPUiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EzMDAwX1RFU1RfRklYVFVSRSBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMzg2U1hfMiBaT1JST19JRChDT01NT0RPUkVfV0VTVF9DSEVTVEVSXzEsIDB4NjcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyMDY1XzIgWk9SUk9fSUQoQ09NTU9ET1JFX1dFU1RfQ0hFU1RFUl8xLCAweDcwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTU1PRE9SRV9XRVNUX0NIRVNURVJfMiAweDAyMDMKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQk1fQTIwOTBBX0NNIFpPUlJPX0lEKENPTU1PRE9SRV9XRVNUX0NIRVNURVJfMiwgMHgwMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNU18yIDB4MDJGNAorI2RlZmluZSBaT1JST19QUk9EX1BQU19FWFA4MDAwIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TXzIsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS09MRkZfQ09NUFVURVJfU1VQUExJRVMgMHgwMkZGCisjZGVmaW5lIFpPUlJPX1BST0RfS0NTX1BPV0VSX1BDX0JPQVJEIFpPUlJPX0lEKEtPTEZGX0NPTVBVVEVSX1NVUFBMSUVTLCAweDAwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBUkRDT18xIDB4MDNFQworI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19LUk9OT1NfMjAwMF8xIFpPUlJPX0lEKENBUkRDT18xLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19BMTAwMF8xIFpPUlJPX0lEKENBUkRDT18xLCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19FU0NPUlQgWk9SUk9fSUQoQ0FSRENPXzEsIDB4MEUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQ0FSRENPX0EyNDEwIFpPUlJPX0lEKENBUkRDT18xLCAweEY1LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FfU1FVQVJFRCAweDAzRUQKKyNkZWZpbmUgWk9SUk9fUFJPRF9BX1NRVUFSRURfTElWRV8yMDAwIFpPUlJPX0lEKEFfU1FVQVJFRCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DT01TUEVDX0NPTU1VTklDQVRJT05TIDB4MDNFRQorI2RlZmluZSBaT1JST19QUk9EX0NPTVNQRUNfQ09NTVVOSUNBVElPTlNfQVgyMDAwIFpPUlJPX0lEKENPTVNQRUNfQ09NTVVOSUNBVElPTlMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQU5BS0lOX1JFU0VBUkNIIDB4MDNGMQorI2RlZmluZSBaT1JST19QUk9EX0FOQUtJTl9SRVNFQVJDSF9FQVNZTCBaT1JST19JRChBTkFLSU5fUkVTRUFSQ0gsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9CT1RJQ1MgMHgwM0YyCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfU1RBUkJPQVJEX0lJIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1NUQVJEUklWRSBaT1JST19JRChNSUNST0JPVElDUywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1VQX0EgWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfOF9VUF9aIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX0RFTFRBX1JBTSBaT1JST19JRChNSUNST0JPVElDUywgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU184X1NUQVJfUkFNIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTXzhfU1RBUiBaT1JST19JRChNSUNST0JPVElDUywgMHg0MSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19WWExfUkFNXzMyIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDQ0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX1ZYTF82ODAzMCBaT1JST19JRChNSUNST0JPVElDUywgMHg0NSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19ERUxUQSBaT1JST19JRChNSUNST0JPVElDUywgMHg2MCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19NQlhfMTIwMF8xMjAwWl9SQU0gWk9SUk9fSUQoTUlDUk9CT1RJQ1MsIDB4ODEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9CT1RJQ1NfSEFSREZSQU1FXzIwMDBfMSBaT1JST19JRChNSUNST0JPVElDUywgMHg5NiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NSUNST0JPVElDU19IQVJERlJBTUVfMjAwMF8yIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweDlFLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01JQ1JPQk9USUNTX01CWF8xMjAwXzEyMDBaIFpPUlJPX0lEKE1JQ1JPQk9USUNTLCAweEMxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FDQ0VTU19BU1NPQ0lBVEVTX0FMRUdSQSAweDAzRjQKKworI2RlZmluZSBaT1JST19NQU5VRl9FWFBBTlNJT05fVEVDSE5PTE9HSUVTIDB4MDNGNgorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FTREcgMHgwM0ZGCisjZGVmaW5lIFpPUlJPX1BST0RfQVNER19NRU1PUllfMSBaT1JST19JRChBU0RHLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FTREdfTUVNT1JZXzIgWk9SUk9fSUQoQVNERywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BU0RHX0VCOTIwX0xBTl9ST1ZFUiBaT1JST19JRChBU0RHLCAweEZFLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FTREdfR1BJQl9EVUFMSUVFRTQ4OF9UV0lOX1ggWk9SUk9fSUQoQVNERywgMHhGRiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMSAweDA0MDQKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMSBaT1JST19JRChJTVRST05JQ1NfMSwgMHgzOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMiBaT1JST19JRChJTVRST05JQ1NfMSwgMHg1NywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DQk1fVU5JVkVSU0lUWV9PRl9MT1dFTEwgMHgwNDA2CisjZGVmaW5lIFpPUlJPX1BST0RfQ0JNX0EyNDEwIFpPUlJPX0lEKENCTV9VTklWRVJTSVRZX09GX0xPV0VMTCwgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BTUVSSVNUQVIgMHgwNDFECisjZGVmaW5lIFpPUlJPX1BST0RfQU1FUklTVEFSX0EyMDY1IFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUVSSVNUQVJfQTU2MCBaT1JST19JRChBTUVSSVNUQVIsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQU1FUklTVEFSX0E0MDY2IFpPUlJPX0lEKEFNRVJJU1RBUiwgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9TVVBSQSAweDA0MjAKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV9TVVBSQURSSVZFXzR4NCBaT1JST19JRChTVVBSQSwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8xMDAwX1JBTSBaT1JST19JRChTVVBSQSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8yMDAwX0RNQSBaT1JST19JRChTVVBSQSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV81MDAgWk9SUk9fSUQoU1VQUkEsIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwX1NDU0kgWk9SUk9fSUQoU1VQUkEsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwWFBfMjAwMF9SQU0gWk9SUk9fSUQoU1VQUkEsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfNTAwUlhfMjAwMF9SQU0gWk9SUk9fSUQoU1VQUkEsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfMjQwMFpJIFpPUlJPX0lEKFNVUFJBLCAweDBCLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVUFJBXzUwMFhQX1NVUFJBRFJJVkVfV09SRFNZTkMgWk9SUk9fSUQoU1VQUkEsIDB4MEMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1VQUkFfU1VQUkFEUklWRV9XT1JEU1lOQ19JSSBaT1JST19JRChTVVBSQSwgMHgwRCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVVBSQV8yNDAwWklQTFVTIFpPUlJPX0lEKFNVUFJBLCAweDEwLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUyAweDA0MjIKKyNkZWZpbmUgWk9SUk9fUFJPRF9DU0FfTUFHTlVNIFpPUlJPX0lEKENPTVBVVEVSX1NZU1RFTVNfQVNTT0NJQVRFUywgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DU0FfMTJfR0FVR0UgWk9SUk9fSUQoQ09NUFVURVJfU1lTVEVNU19BU1NPQ0lBVEVTLCAweDE1LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX01BUkNfTUlDSEFFTF9HUk9USCAweDA0MzkKKworI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0ggMHgwNTAyCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19BVDUwMF8xIFpPUlJPX0lEKE1fVEVDSCwgMHgwMywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfMSAweDA2RTEKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18xLCAweDA4LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0JZVEVCT1ggMHgwN0RBCisjZGVmaW5lIFpPUlJPX1BST0RfQllURUJPWF9BNTAwIFpPUlJPX0lEKEJZVEVCT1gsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfREtCX1BPV0VSX0NPTVBVVElORyAweDA3REMKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX1NFQ1VSRUtFWSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDA5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfREtNXzMxMjggWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgwRSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX1JBUElEX0ZJUkUgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHgwRiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ES0JfUE9XRVJfQ09NUFVUSU5HX0RLTV8xMjAyIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19DT0JSQV9WSVBFUl9JSV82OEVDMDMwIFpPUlJPX0lEKERLQl9QT1dFUl9DT01QVVRJTkcsIDB4MTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfREtCX1BPV0VSX0NPTVBVVElOR19XSUxERklSRV8wNjBfMSBaT1JST19JRChES0JfUE9XRVJfQ09NUFVUSU5HLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0RLQl9QT1dFUl9DT01QVVRJTkdfV0lMREZJUkVfMDYwXzIgWk9SUk9fSUQoREtCX1BPV0VSX0NPTVBVVElORywgMHhGRiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9HUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiAweDA3RTEKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JXzRLIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfU0VSSUVTX0lfMTZLXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSV8xNktfMyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUXzMwMDFfSURFXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX1JBTSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU1QQUNUX1NFUklFU19JSV9SQU1fMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfRVBDX0JBU0UgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHgyMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfR0ZPUkNFXzA0MF9TQ1NJXzEgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4MzApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0ExMjkxIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDQwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjQgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4NjApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SNF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweDcwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9QSE9ORVBBSyBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHg3OCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfSU9fRVhURU5ERVIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4OTgpCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wMzAgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4YTApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wMzBfU0NTSSBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhiMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTUzMCBaT1JST19JRChHUkVBVF9WQUxMRVlfUFJPRFVDVFNfMiwgMHgwQiwgMHhjMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9HVlBfQTUzMF9TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGQwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9DT01CT18wMzBfUjMgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZTApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0NPTUJPXzAzMF9SM19TQ1NJIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBCLCAweGYwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9TRVJJRVNfSUkgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4MEIsIDB4ZjgpCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF8zMDAxX0lERV8yIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDBELCAwKQorCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0dGT1JDRV8wNDBfMDYwIFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDE2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9JTVBBQ1RfVklTSU9OXzI0IFpPUlJPX0lEKEdSRUFUX1ZBTExFWV9QUk9EVUNUU18yLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0dWUF9HRk9SQ0VfMDQwXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzIsIDB4RkYsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ0FMSUZPUk5JQV9BQ0NFU1NfU1lORVJHWSAweDA3RTUKKyNkZWZpbmUgWk9SUk9fUFJPRF9DQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZX01BTElCVSBaT1JST19JRChDQUxJRk9STklBX0FDQ0VTU19TWU5FUkdZLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1hFVEVDIDB4MDdFNgorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEIFpPUlJPX0lEKFhFVEVDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hFVEVDX0ZBU1RDQVJEX1JBTSBaT1JST19JRChYRVRFQywgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9YRVRFQ19GQVNUQ0FSRF9QTFVTIFpPUlJPX0lEKFhFVEVDLCAweDAzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TIDB4MDdFQQorI2RlZmluZSBaT1JST19QUk9EX1BQU19NRVJDVVJZIFpPUlJPX0lEKFBST0dSRVNTSVZFX1BFUklQSEVSQUxTX0FORF9TWVNURU1TLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BQU19BMzAwMF82ODA0MCBaT1JST19JRChQUk9HUkVTU0lWRV9QRVJJUEhFUkFMU19BTkRfU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QUFNfQTIwMDBfNjgwNDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4NjksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX1pFVVMgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4OTYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUFBTX0E1MDBfNjgwNDAgWk9SUk9fSUQoUFJPR1JFU1NJVkVfUEVSSVBIRVJBTFNfQU5EX1NZU1RFTVMsIDB4QkIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWEVCRUMgMHgwN0VDCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU1BJUklUX1RFQ0hOT0xPR1kgMHgwN0YyCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5TSURFUl9JTjEwMDAgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSU5TSURFUl9JTjUwMCBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9TSU41MDAgWk9SUk9fSUQoU1BJUklUX1RFQ0hOT0xPR1ksIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfU1BJUklUX1RFQ0hOT0xPR1lfSERBXzUwNiBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TUElSSVRfVEVDSE5PTE9HWV9BWF9TIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX09DVEFCWVRFIFpPUlJPX0lEKFNQSVJJVF9URUNITk9MT0dZLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NQSVJJVF9URUNITk9MT0dZX0lOTUFURSBaT1JST19JRChTUElSSVRfVEVDSE5PTE9HWSwgMHgwOCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9TUElSSVRfVEVDSE5PTE9HWV8yIDB4MDdGMworCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8xIDB4MDdGRQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfM18xIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8xLCAweDAzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0JTQ19BTEZBREFUQV8yIDB4MDgwMQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfMl8xIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfMl8yIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19BTEZfM18yIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8yLCAweDAzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NBUkRDT18yIDB4MDgwMgorI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19LUk9OT1NfMjAwMF8yIFpPUlJPX0lEKENBUkRDT18yLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0NBUkRDT19BMTAwMF8yIFpPUlJPX0lEKENBUkRDT18yLCAweDBDLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0pPQ0hIRUlNIDB4MDgwNAorI2RlZmluZSBaT1JST19QUk9EX0pPQ0hIRUlNX1JBTSBaT1JST19JRChKT0NISEVJTSwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFUyAweDA4MDcKKyNkZWZpbmUgWk9SUk9fUFJPRF9DSEVDS1BPSU5UX1RFQ0hOT0xPR0lFU19TRVJJQUxfU09MVVRJT04gWk9SUk9fSUQoQ0hFQ0tQT0lOVF9URUNITk9MT0dJRVMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfRURPVFJPTklLIDB4MDgxMAorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19JRUVFXzQ4OCBaT1JST19JRChFRE9UUk9OSUssIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLXzgwMzIgWk9SUk9fSUQoRURPVFJPTklLLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19NVUxUSVNFUklBTCBaT1JST19JRChFRE9UUk9OSUssIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1ZJREVPRElHSVRJWkVSIFpPUlJPX0lEKEVET1RST05JSywgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9FRE9UUk9OSUtfUEFSQUxMRUxfSU8gWk9SUk9fSUQoRURPVFJPTklLLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0VET1RST05JS19QSUNfUFJPVE9ZUElORyBaT1JST19JRChFRE9UUk9OSUssIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0FEQyBaT1JST19JRChFRE9UUk9OSUssIDB4MDcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX1ZNRSBaT1JST19JRChFRE9UUk9OSUssIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRURPVFJPTklLX0RTUDk2MDAwIFpPUlJPX0lEKEVET1RST05JSywgMHgwOSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9ORVNfSU5DIDB4MDgxMworI2RlZmluZSBaT1JST19QUk9EX05FU19JTkNfUkFNIFpPUlJPX0lEKE5FU19JTkMsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSUNEIDB4MDgxNworI2RlZmluZSBaT1JST19QUk9EX0lDRF9BRFZBTlRBR0VfMjAwMF9TQ1NJIFpPUlJPX0lEKElDRCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JQ0RfQURWQU5UQUdFX0lERSBaT1JST19JRChJQ0QsIDB4MDMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSUNEX0FEVkFOVEFHRV8yMDgwX1JBTSBaT1JST19JRChJQ0QsIDB4MDQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfS1VQS0VfMiAweDA4MTkKKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9PTVRJIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfS1VQS0VfU0NTSV9JSSBaT1JST19JRChLVVBLRV8yLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX0JPWCBaT1JST19JRChLVVBLRV8yLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFXzAzMF84ODIgWk9SUk9fSUQoS1VQS0VfMiwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9LVVBLRV9TQ1NJX0FUIFpPUlJPX0lEKEtVUEtFXzIsIDB4MDUsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMgMHgwODFECisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0EyMDAwX1JBTTggWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMsIDB4MDksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0lNUEFDVF9TRVJJRVNfSUlfUkFNXzIgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzMsIDB4MEEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSU5URVJXT1JLU19ORVRXT1JLIDB4MDgxRQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hBUkRJVEFMX1NZTlRIRVNJUyAweDA4MjAKKyNkZWZpbmUgWk9SUk9fUFJPRF9IQVJESVRBTF9TWU5USEVTSVNfVFFNXzY4MDMwXzY4ODgyIFpPUlJPX0lEKEhBUkRJVEFMX1NZTlRIRVNJUywgMHgxNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUFBMSUVEX0VOR0lORUVSSU5HIDB4MDgyOAorI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfRU5HSU5FRVJJTkdfREwyMDAwIFpPUlJPX0lEKEFQUExJRURfRU5HSU5FRVJJTkcsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQVBQTElFRF9FTkdJTkVFUklOR19SQU1fV09SS1MgWk9SUk9fSUQoQVBQTElFRF9FTkdJTkVFUklORywgMHhFMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9CU0NfQUxGQURBVEFfMyAweDA4MkMKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfT0tUQUdPTl8yMDA4IFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDA1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19UQU5ERU1fQVRfMjAwOF81MDggWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0FMRkFfUkFNXzEyMDAgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDcsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX09LVEFHT05fMjAwOF9SQU0gWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MDgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX01VTFRJRkFDRV9JIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDEwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19NVUxUSUZBQ0VfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX01VTFRJRkFDRV9JSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MTIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0ZSQU1FTUFTVEVSX0lJIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDIwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19HUkFGRklUSV9SQU0gWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfQlNDX0dSQUZGSVRJX1JFRyBaT1JST19JRChCU0NfQUxGQURBVEFfMywgMHgyMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9CU0NfSVNETl9NQVNURVJDQVJEIFpPUlJPX0lEKEJTQ19BTEZBREFUQV8zLCAweDQwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0JTQ19JU0ROX01BU1RFUkNBUkRfSUkgWk9SUk9fSUQoQlNDX0FMRkFEQVRBXzMsIDB4NDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEhPRU5JWCAweDA4MzUKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSE9FTklYX1NUNTA2IFpPUlJPX0lEKFBIT0VOSVgsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TQ1NJIFpPUlJPX0lEKFBIT0VOSVgsIDB4MjIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9SQU0gWk9SUk9fSUQoUEhPRU5JWCwgMHhCRSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVMgMHgwODM2CisjZGVmaW5lIFpPUlJPX1BST0RfQURWQU5DRURfU1RPUkFHRV9TWVNURU1TX05FWFVTIFpPUlJPX0lEKEFEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BRFZBTkNFRF9TVE9SQUdFX1NZU1RFTVNfTkVYVVNfUkFNIFpPUlJPX0lEKEFEVkFOQ0VEX1NUT1JBR0VfU1lTVEVNUywgMHgwOCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTVBVTFNFIDB4MDgzOAorI2RlZmluZSBaT1JST19QUk9EX0lNUFVMU0VfRklSRUNSQUNLRVJfMjQgWk9SUk9fSUQoSU1QVUxTRSwgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JVlMgMHgwODQwCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX0dSQU5EU0xBTV9QSUNfMiBaT1JST19JRChJVlMsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX0dSQU5EU0xBTV9QSUNfMSBaT1JST19JRChJVlMsIDB4MDQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX09WRVJEUklWRSBaT1JST19JRChJVlMsIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1RSVU1QQ0FSRF9DTEFTU0lDIFpPUlJPX0lEKElWUywgMHgzMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JVlNfVFJVTVBDQVJEX1BST19HUkFORFNMQU0gWk9SUk9fSUQoSVZTLCAweDM0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19NRVRBXzQgWk9SUk9fSUQoSVZTLCAweDQwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19XQVZFVE9PTFMgWk9SUk9fSUQoSVZTLCAweEJGLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lWU19WRUNUT1JfMSBaT1JST19JRChJVlMsIDB4RjMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSVZTX1ZFQ1RPUl8yIFpPUlJPX0lEKElWUywgMHhGNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WRUNUT1JfMSAweDA4NDEKKyNkZWZpbmUgWk9SUk9fUFJPRF9WRUNUT1JfQ09OTkVDVElPTl8xIFpPUlJPX0lEKFZFQ1RPUl8xLCAweEUzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1hQRVJUX1BST0RFViAweDA4NDUKKyNkZWZpbmUgWk9SUk9fUFJPRF9YUEVSVF9QUk9ERVZfVklTSU9OQV9SQU0gWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9WSVNJT05BX1JFRyBaT1JST19JRChYUEVSVF9QUk9ERVYsIDB4MDIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfWFBFUlRfUFJPREVWX01FUkxJTl9SQU0gWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzEgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1hQRVJUX1BST0RFVl9NRVJMSU5fUkVHXzIgWk9SUk9fSUQoWFBFUlRfUFJPREVWLCAweEM5LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hZRFJBX1NZU1RFTVMgMHgwODQ5CisjZGVmaW5lIFpPUlJPX1BST0RfSFlEUkFfU1lTVEVNU19BTUlHQU5FVCBaT1JST19JRChIWURSQV9TWVNURU1TLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1NVTlJJWkVfSU5EVVNUUklFUyAweDA4NEYKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfQUQxMDEyIFpPUlJPX0lEKFNVTlJJWkVfSU5EVVNUUklFUywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TVU5SSVpFX0lORFVTVFJJRVNfQUQ1MTYgWk9SUk9fSUQoU1VOUklaRV9JTkRVU1RSSUVTLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1NVTlJJWkVfSU5EVVNUUklFU19ERDUxMiBaT1JST19JRChTVU5SSVpFX0lORFVTVFJJRVMsIDB4MDMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVFJJQ0VSQVRPUFMgMHgwODUwCisjZGVmaW5lIFpPUlJPX1BST0RfVFJJQ0VSQVRPUFNfTVVMVElfSU8gWk9SUk9fSUQoVFJJQ0VSQVRPUFMsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBQTElFRF9NQUdJQyAweDA4NTEKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUFBMSUVEX01BR0lDX0RNSV9SRVNPTFZFUiBaT1JST19JRChBUFBMSUVEX01BR0lDLCAweDAxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FQUExJRURfTUFHSUNfRElHSVRBTF9CUk9BRENBU1RFUiBaT1JST19JRChBUFBMSUVEX01BR0lDLCAweDA2LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0dGWF9CQVNFIDB4MDg1RQorI2RlZmluZSBaT1JST19QUk9EX0dGWF9CQVNFX0dEQV8xX1ZSQU0gWk9SUk9fSUQoR0ZYX0JBU0UsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR0ZYX0JBU0VfR0RBXzEgWk9SUk9fSUQoR0ZYX0JBU0UsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUk9DVEVDIDB4MDg2MAorI2RlZmluZSBaT1JST19QUk9EX1JPQ1RFQ19SSF84MDBDIFpPUlJPX0lEKFJPQ1RFQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9ST0NURUNfUkhfODAwQ19SQU0gWk9SUk9fSUQoUk9DVEVDLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0tBVE8gMHgwODYxCisjZGVmaW5lIFpPUlJPX1BST0RfS0FUT19NRUxPRFkgWk9SUk9fSUQoS0FUTywgMHg4MCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9IRUxGUklDSF8xIDB4MDg2MQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1JBSU5CT1dfSUkgWk9SUk9fSUQoSEVMRlJJQ0hfMSwgMHgyMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9SQUlOQk9XX0lJSSBaT1JST19JRChIRUxGUklDSF8xLCAweDIxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FUTEFOVElTIDB4MDg2MgorCisjZGVmaW5lIFpPUlJPX01BTlVGX1BST1RBUiAweDA4NjQKKworI2RlZmluZSBaT1JST19NQU5VRl9BQ1MgMHgwODY1CisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU09GVFdBUkVfUkVTVUxUU19FTlRFUlBSSVNFUyAweDA4NjYKKyNkZWZpbmUgWk9SUk9fUFJPRF9TT0ZUV0FSRV9SRVNVTFRTX0VOVEVSUFJJU0VTX0dPTERFTl9HQVRFXzJfQlVTX1BMVVMgWk9SUk9fSUQoU09GVFdBUkVfUkVTVUxUU19FTlRFUlBSSVNFUywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQVNPQk9TSEkgMHgwODZECisjZGVmaW5lIFpPUlJPX1BST0RfTUFTT0JPU0hJX01BU1RFUl9DQVJEX1NDMjAxIFpPUlJPX0lEKE1BU09CT1NISSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQVNPQk9TSElfTUFTVEVSX0NBUkRfTUM3MDIgWk9SUk9fSUQoTUFTT0JPU0hJLCAweDA0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BU09CT1NISV9NVkRfODE5IFpPUlJPX0lEKE1BU09CT1NISSwgMHgwNywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQUlOSEFUVEFOX0RBVEEgMHgwODZGCisjZGVmaW5lIFpPUlJPX1BST0RfTUFJTkhBVFRBTl9EQVRBX0lERSBaT1JST19JRChNQUlOSEFUVEFOX0RBVEEsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVklMTEFHRV9UUk9OSUMgMHgwODc3CisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfRE9NSU5PX1JBTSBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19ET01JTk9fUkVHIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0RPTUlOT18xNk1fUFJPVE9UWVBFIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSUlfSUlfUExVU19SQU0gWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MEIsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JSV9JSV9QTFVTX1JFRyBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgwQywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lJX0lJX1BMVVNfU0VHTUVOVEVEX01PREUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4MEQsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfUElDQVNTT19JVl9aMl9NRU0xIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE1LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX1BJQ0FTU09fSVZfWjJfTUVNMiBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgxNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1oyX1JFRyBaT1JST19JRChWSUxMQUdFX1RST05JQywgMHgxNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WSUxMQUdFX1RST05JQ19QSUNBU1NPX0lWX1ozIFpPUlJPX0lEKFZJTExBR0VfVFJPTklDLCAweDE4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZJTExBR0VfVFJPTklDX0FSSUFETkUgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4QzksIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVklMTEFHRV9UUk9OSUNfQVJJQURORTIgWk9SUk9fSUQoVklMTEFHRV9UUk9OSUMsIDB4Q0EsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVVRJTElUSUVTX1VOTElNSVRFRCAweDA4N0IKKyNkZWZpbmUgWk9SUk9fUFJPRF9VVElMSVRJRVNfVU5MSU1JVEVEX0VNUExBTlRfREVMVVhFIFpPUlJPX0lEKFVUSUxJVElFU19VTkxJTUlURUQsIDB4MTUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVVRJTElUSUVTX1VOTElNSVRFRF9FTVBMQU5UX0RFTFVYRTIgWk9SUk9fSUQoVVRJTElUSUVTX1VOTElNSVRFRCwgMHgyMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BTUlUUklYIDB4MDg4MAorI2RlZmluZSBaT1JST19QUk9EX0FNSVRSSVhfTVVMVElfSU8gWk9SUk9fSUQoQU1JVFJJWCwgMHgwMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BTUlUUklYX0NEX1JBTSBaT1JST19JRChBTUlUUklYLCAweDAyLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0FSTUFYIDB4MDg4NQorI2RlZmluZSBaT1JST19QUk9EX0FSTUFYX09NTklCVVMgWk9SUk9fSUQoQVJNQVgsIDB4MDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfWkVVUyAweDA4OEQKKyNkZWZpbmUgWk9SUk9fUFJPRF9aRVVTX1NQSURFUiBaT1JST19JRChaRVVTLCAweDA0LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX05FV1RFSyAweDA4OEYKKyNkZWZpbmUgWk9SUk9fUFJPRF9ORVdURUtfVklERU9UT0FTVEVSIFpPUlJPX0lEKE5FV1RFSywgMHgwMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NX1RFQ0hfR0VSTUFOWSAweDA4OTAKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0FUNTAwXzIgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ182ODAzMCBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDXzY4MDIwSSBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDX0ExMjAwX1Q2ODAzMF9SVEMgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTVRFQ19WSVBFUl9NS19WX0VfTUFUUklYXzUzMCBaT1JST19JRChNX1RFQ0hfR0VSTUFOWSwgMHgyMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NVEVDXzhfTUJfUkFNIFpPUlJPX0lEKE1fVEVDSF9HRVJNQU5ZLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01URUNfVklQRVJfTUtfVl9FX01BVFJJWF81MzBfU0NTSV9JREUgWk9SUk9fSUQoTV9URUNIX0dFUk1BTlksIDB4MjQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQgMHgwODkxCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0VHU18yOF8yNF9TUEVDVFJVTV9SQU0gWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfR1ZQX0VHU18yOF8yNF9TUEVDVFJVTV9SRUcgWk9SUk9fSUQoR1JFQVRfVkFMTEVZX1BST0RVQ1RTXzQsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzEgMHgwODkyCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0ExMjAwIFpPUlJPX0lEKEFQT0xMT18xLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0hFTEZSSUNIXzIgMHgwODkzCisjZGVmaW5lIFpPUlJPX1BST0RfSEVMRlJJQ0hfUElDQ09MT19SQU0gWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwNSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9QSUNDT0xPX1JFRyBaT1JST19JRChIRUxGUklDSF8yLCAweDA2LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1BFR0dZX1BMVVNfTVBFRyBaT1JST19JRChIRUxGUklDSF8yLCAweDA3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1ZJREVPQ1JVTkNIRVIgWk9SUk9fSUQoSEVMRlJJQ0hfMiwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IRUxGUklDSF9TRDY0X1JBTSBaT1JST19JRChIRUxGUklDSF8yLCAweDBBLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0hFTEZSSUNIX1NENjRfUkVHIFpPUlJPX0lEKEhFTEZSSUNIXzIsIDB4MEIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUFDUk9TWVNURU1TX1VTQSAweDA4OUIKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfV0FSUF9FTkdJTkVfNDB4eCBaT1JST19JRChNQUNST1NZU1RFTVNfVVNBLCAweDEzLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0VMQk9YX0NPTVBVVEVSIDB4MDg5RQorI2RlZmluZSBaT1JST19QUk9EX0VMQk9YX0NPTVBVVEVSXzEyMDBfNCBaT1JST19JRChFTEJPWF9DT01QVVRFUiwgMHgwNiwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9IQVJNU19QUk9GRVNTSU9OQUwgMHgwQTAwCisjZGVmaW5lIFpPUlJPX1BST0RfSEFSTVNfUFJPRkVTU0lPTkFMXzAzMF9QTFVTIFpPUlJPX0lEKEhBUk1TX1BST0ZFU1NJT05BTCwgMHgxMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IQVJNU19QUk9GRVNTSU9OQUxfMzUwMCBaT1JST19JRChIQVJNU19QUk9GRVNTSU9OQUwsIDB4RDAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUlDUk9OSUsgMHgwQTUwCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9OSUtfUkNBXzEyMCBaT1JST19JRChNSUNST05JSywgMHgwQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NSUNST05JSzIgMHgwRjBGCisjZGVmaW5lIFpPUlJPX1BST0RfTUlDUk9OSUsyX1ozSSBaT1JST19JRChNSUNST05JSzIsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfTUVHQU1JQ1JPIDB4MTAwMAorI2RlZmluZSBaT1JST19QUk9EX01FR0FNSUNST19TQ1JBTV81MDAgWk9SUk9fSUQoTUVHQU1JQ1JPLCAweDAzLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01FR0FNSUNST19TQ1JBTV81MDBfUkFNIFpPUlJPX0lEKE1FR0FNSUNSTywgMHgwNCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTVRST05JQ1NfMiAweDEwMjgKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfMyBaT1JST19JRChJTVRST05JQ1NfMiwgMHgzOSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTVRST05JQ1NfSFVSUklDQU5FXzI4MDBfNCBaT1JST19JRChJTVRST05JQ1NfMiwgMHg1NywgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JTkRJVklEVUFMX0NPTVBVVEVSUyAweDEyMTIKKyNkZWZpbmUgWk9SUk9fUFJPRF9JTkRJVklEVUFMX0NPTVBVVEVSU19CVURESEEgWk9SUk9fSUQoSU5ESVZJRFVBTF9DT01QVVRFUlMsIDB4MDAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfSU5ESVZJRFVBTF9DT01QVVRFUlNfWF9TVVJGIFpPUlJPX0lEKElORElWSURVQUxfQ09NUFVURVJTLCAweDE3LCAwKQorI2RlZmluZSBaT1JST19QUk9EX0lORElWSURVQUxfQ09NUFVURVJTX0NBVFdFQVNFTCBaT1JST19JRChJTkRJVklEVUFMX0NPTVBVVEVSUywgMHgyQSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9LVVBLRV8zIDB4MTI0OAorI2RlZmluZSBaT1JST19QUk9EX0tVUEtFX0dPTEVNX0hEXzMwMDAgWk9SUk9fSUQoS1VQS0VfMywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9JVEggMHgxMzg4CisjZGVmaW5lIFpPUlJPX1BST0RfSVRIX0lTRE5fTUFTVEVSX0lJIFpPUlJPX0lEKElUSCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9WTUMgMHgxMzg5CisjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0lTRE5fQkxBU1RFUl9aMiBaT1JST19JRChWTUMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfVk1DX0hZUEVSQ09NXzQgWk9SUk9fSUQoVk1DLCAweDAyLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0lORk9STUFUSU9OIDB4MTU3QworI2RlZmluZSBaT1JST19QUk9EX0lORk9STUFUSU9OX0lTRE5fRU5HSU5FX0kgWk9SUk9fSUQoSU5GT1JNQVRJT04sIDB4NjQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfVk9SVEVYIDB4MjAxNworI2RlZmluZSBaT1JST19QUk9EX1ZPUlRFWF9HT0xERU5fR0FURV84MDM4NlNYIFpPUlJPX0lEKFZPUlRFWCwgMHgwNywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfUkFNIFpPUlJPX0lEKFZPUlRFWCwgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9WT1JURVhfR09MREVOX0dBVEVfODA0ODYgWk9SUk9fSUQoVk9SVEVYLCAweDA5LCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0VYUEFOU0lPTl9TWVNURU1TIDB4MjA2MgorI2RlZmluZSBaT1JST19QUk9EX0VYUEFOU0lPTl9TWVNURU1TX0RBVEFGTFlFUl80MDAwU1ggWk9SUk9fSUQoRVhQQU5TSU9OX1NZU1RFTVMsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfRVhQQU5TSU9OX1NZU1RFTVNfREFUQUZMWUVSXzQwMDBTWF9SQU0gWk9SUk9fSUQoRVhQQU5TSU9OX1NZU1RFTVMsIDB4MDIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUkVBRFlTT0ZUIDB4MjEwMAorI2RlZmluZSBaT1JST19QUk9EX1JFQURZU09GVF9BTUFYX0lJX0lWIFpPUlJPX0lEKFJFQURZU09GVCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9QSEFTRTUgMHgyMTQwCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEX1JBTSBaT1JST19JRChQSEFTRTUsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEIFpPUlJPX0lEKFBIQVNFNSwgMHgwMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIyMF9JViBaT1JST19JRChQSEFTRTUsIDB4MDYsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0ZBU1RMQU5FX1ozX1JBTSBaT1JST19JRChQSEFTRTUsIDB4MEEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0JMSVpaQVJEXzEyMzBfSUlfRkFTVExBTkVfWjNfQ1lCRVJTQ1NJX0NZQkVSU1RPUk0wNjAgWk9SUk9fSUQoUEhBU0U1LCAweDBCLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjIwX0NZQkVSU1RPUk0gWk9SUk9fSUQoUEhBU0U1LCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF8xMjMwIFpPUlJPX0lEKFBIQVNFNSwgMHgwRCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMTIzMF9JVl8xMjYwIFpPUlJPX0lEKFBIQVNFNSwgMHgxMSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQkxJWlpBUkRfMjA2MCBaT1JST19JRChQSEFTRTUsIDB4MTgsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhBU0U1X0NZQkVSU1RPUk1fTUtfSUkgWk9SUk9fSUQoUEhBU0U1LCAweDE5LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0IFpPUlJPX0lEKFBIQVNFNSwgMHgyMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJWSVNJT042NF8zRF9QUk9UT1RZUEUgWk9SUk9fSUQoUEhBU0U1LCAweDMyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9DWUJFUlZJU0lPTjY0XzNEIFpPUlJPX0lEKFBIQVNFNSwgMHg0MywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QSEFTRTVfQ1lCRVJTVE9STV9NS19JSUkgWk9SUk9fSUQoUEhBU0U1LCAweDY0LCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIQVNFNV9CTElaWkFSRF82MDNFX1BMVVMgWk9SUk9fSUQoUEhBU0U1LCAweDZlLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0RQUyAweDIxNjkKKyNkZWZpbmUgWk9SUk9fUFJPRF9EUFNfUEVSU09OQUxfQU5JTUFUSU9OX1JFQ09SREVSIFpPUlJPX0lEKERQUywgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9BUE9MTE9fMiAweDIyMDAKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fQTYyMF82ODAyMF8xIFpPUlJPX0lEKEFQT0xMT18yLCAweDAwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX0FQT0xMT19BNjIwXzY4MDIwXzIgWk9SUk9fSUQoQVBPTExPXzIsIDB4MDEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQVBPTExPXzMgMHgyMjIyCisjZGVmaW5lIFpPUlJPX1BST0RfQVBPTExPX0FUX0FQT0xMTyBaT1JST19JRChBUE9MTE9fMywgMHgyMiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9BUE9MTE9fMTIzMF8xMjQwXzEyNjBfMjAzMF80MDQwXzQwNjAgWk9SUk9fSUQoQVBPTExPXzMsIDB4MjMsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEVUU09GRl9MUCAweDM4QTUKKyNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkEgWk9SUk9fSUQoUEVUU09GRl9MUCwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9QRVRTT0ZGX0xQX0RFTEZJTkFfTElURSBaT1JST19JRChQRVRTT0ZGX0xQLCAweDAxLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX1VXRV9HRVJMQUNIIDB4M0ZGNworI2RlZmluZSBaT1JST19QUk9EX1VXRV9HRVJMQUNIX1JBTV9ST00gWk9SUk9fSUQoVVdFX0dFUkxBQ0gsIDB4ZDQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQUNUIDB4NDIzMQorI2RlZmluZSBaT1JST19QUk9EX0FDVF9QUkVMVURFIFpPUlJPX0lEKEFDVCwgMHgwMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9NQUNST1NZU1RFTVNfR0VSTUFOWSAweDQ3NTQKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTUFFU1RSTyBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwMywgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfVkxBQiBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTUFFU1RST19QUk8gWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MDUsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1JFVElOQSBaT1JST19JRChNQUNST1NZU1RFTVNfR0VSTUFOWSwgMHgwNiwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9NQUNST1NZU1RFTVNfTVVMVElfRVZPTFVUSU9OIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDA4LCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19UT0NDQVRBIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDBDLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19SRVRJTkFfWjMgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTAsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX1ZMQUJfTU9USU9OIFpPUlJPX0lEKE1BQ1JPU1lTVEVNU19HRVJNQU5ZLCAweDEyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX01BQ1JPU1lTVEVNU19BTFRBSVMgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4MTMsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfTUFDUk9TWVNURU1TX0ZBTENPTl8wNDAgWk9SUk9fSUQoTUFDUk9TWVNURU1TX0dFUk1BTlksIDB4RkQsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfQ09NQklURUMgMHg2NzY2CisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfU0tJX1BFUklQSEVSQUxTIDB4ODAwMAorI2RlZmluZSBaT1JST19QUk9EX1NLSV9QRVJJUEhFUkFMU19NQVNUX0ZJUkVCQUxMIFpPUlJPX0lEKFNLSV9QRVJJUEhFUkFMUywgMHgwOCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9TS0lfUEVSSVBIRVJBTFNfU0NTSV9EVUFMX1NFUklBTCBaT1JST19JRChTS0lfUEVSSVBIRVJBTFMsIDB4ODAsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUkVJU19XQVJFXzIgMHhBOUFECisjZGVmaW5lIFpPUlJPX1BST0RfUkVJU19XQVJFX1NDQU5fS0lORyBaT1JST19JRChSRUlTX1dBUkVfMiwgMHgxMSwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9DQU1FUk9OIDB4QUEwMQorI2RlZmluZSBaT1JST19QUk9EX0NBTUVST05fUEVSU09OQUxfQTQgWk9SUk9fSUQoQ0FNRVJPTiwgMHgxMCwgMCkKKworI2RlZmluZSBaT1JST19NQU5VRl9SRUlTX1dBUkUgMHhBQTExCisjZGVmaW5lIFpPUlJPX1BST0RfUkVJU19XQVJFX0hBTkRZU0NBTk5FUiBaT1JST19JRChSRUlTX1dBUkUsIDB4MTEsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfUEhPRU5JWF8yIDB4QjVBOAorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfU1Q1MDZfMiBaT1JST19JRChQSE9FTklYXzIsIDB4MjEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUEhPRU5JWF9TQ1NJXzIgWk9SUk9fSUQoUEhPRU5JWF8yLCAweDIyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1BIT0VOSVhfUkFNXzIgWk9SUk9fSUQoUEhPRU5JWF8yLCAweEJFLCAwKQorCisjZGVmaW5lIFpPUlJPX01BTlVGX0NPTUJJVEVDXzIgMHhDMDA4CisjZGVmaW5lIFpPUlJPX1BST0RfQ09NQklURUNfSEQgWk9SUk9fSUQoQ09NQklURUNfMiwgMHgyQSwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9DT01CSVRFQ19TUkFNIFpPUlJPX0lEKENPTUJJVEVDXzIsIDB4MkIsIDApCisKKyNkZWZpbmUgWk9SUk9fTUFOVUZfSEFDS0VSIDB4MDdEQgorI2RlZmluZSBaT1JST19QUk9EX0dFTkVSQUxfUFJPVE9UWVBFIFpPUlJPX0lEKEhBQ0tFUiwgMHgwMCwgMCkKKyNkZWZpbmUgWk9SUk9fUFJPRF9IQUNLRVJfU0NTSSBaT1JST19JRChIQUNLRVIsIDB4MDEsIDApCisjZGVmaW5lIFpPUlJPX1BST0RfUkVTT1VSQ0VfTUFOQUdFTUVOVF9GT1JDRV9RVUlDS05FVF9RTjIwMDAgWk9SUk9fSUQoSEFDS0VSLCAweDAyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzIgWk9SUk9fSUQoSEFDS0VSLCAweEUwLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzMgWk9SUk9fSUQoSEFDS0VSLCAweEUxLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzQgWk9SUk9fSUQoSEFDS0VSLCAweEUyLCAwKQorI2RlZmluZSBaT1JST19QUk9EX1ZFQ1RPUl9DT05ORUNUSU9OXzUgWk9SUk9fSUQoSEFDS0VSLCAweEUzLCAwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvY29tbW9uL210ZC9tdGQtYWJpLmggYi9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC1hYmkuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYWUyMjYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvY29tbW9uL210ZC9tdGQtYWJpLmgKQEAgLTAsMCArMSwxMzMgQEAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyNpZm5kZWYgX19NVERfQUJJX0hfXworI2RlZmluZSBfX01URF9BQklfSF9fCisKK3N0cnVjdCBlcmFzZV9pbmZvX3VzZXIgeworIHVpbnQzMl90IHN0YXJ0OworIHVpbnQzMl90IGxlbmd0aDsKK307CisKK3N0cnVjdCBtdGRfb29iX2J1ZiB7CisgdWludDMyX3Qgc3RhcnQ7CisgdWludDMyX3QgbGVuZ3RoOworIHVuc2lnbmVkIGNoYXIgX191c2VyICpwdHI7Cit9OworCisjZGVmaW5lIE1URF9BQlNFTlQgMAorI2RlZmluZSBNVERfUkFNIDEKKyNkZWZpbmUgTVREX1JPTSAyCisjZGVmaW5lIE1URF9OT1JGTEFTSCAzCisjZGVmaW5lIE1URF9OQU5ERkxBU0ggNAorI2RlZmluZSBNVERfREFUQUZMQVNIIDYKKworI2RlZmluZSBNVERfV1JJVEVBQkxFIDB4NDAwICAKKyNkZWZpbmUgTVREX0JJVF9XUklURUFCTEUgMHg4MDAgIAorI2RlZmluZSBNVERfTk9fRVJBU0UgMHgxMDAwICAKKyNkZWZpbmUgTVREX1NUVVBJRF9MT0NLIDB4MjAwMCAgCisKKyNkZWZpbmUgTVREX0NBUF9ST00gMAorI2RlZmluZSBNVERfQ0FQX1JBTSAoTVREX1dSSVRFQUJMRSB8IE1URF9CSVRfV1JJVEVBQkxFIHwgTVREX05PX0VSQVNFKQorI2RlZmluZSBNVERfQ0FQX05PUkZMQVNIIChNVERfV1JJVEVBQkxFIHwgTVREX0JJVF9XUklURUFCTEUpCisjZGVmaW5lIE1URF9DQVBfTkFOREZMQVNIIChNVERfV1JJVEVBQkxFKQorCisjZGVmaW5lIE1URF9OQU5ERUNDX09GRiAwIAorI2RlZmluZSBNVERfTkFOREVDQ19QTEFDRSAxIAorI2RlZmluZSBNVERfTkFOREVDQ19BVVRPUExBQ0UgMiAKKyNkZWZpbmUgTVREX05BTkRFQ0NfUExBQ0VPTkxZIDMgCisjZGVmaW5lIE1URF9OQU5ERUNDX0FVVE9QTF9VU1IgNCAKKworI2RlZmluZSBNVERfT1RQX09GRiAwCisjZGVmaW5lIE1URF9PVFBfRkFDVE9SWSAxCisjZGVmaW5lIE1URF9PVFBfVVNFUiAyCisKK3N0cnVjdCBtdGRfaW5mb191c2VyIHsKKyB1aW50OF90IHR5cGU7CisgdWludDMyX3QgZmxhZ3M7CisgdWludDMyX3Qgc2l6ZTsKKyB1aW50MzJfdCBlcmFzZXNpemU7CisgdWludDMyX3Qgd3JpdGVzaXplOworIHVpbnQzMl90IG9vYnNpemU7CisKKyB1aW50MzJfdCBlY2N0eXBlOworIHVpbnQzMl90IGVjY3NpemU7Cit9OworCitzdHJ1Y3QgcmVnaW9uX2luZm9fdXNlciB7CisgdWludDMyX3Qgb2Zmc2V0OworIHVpbnQzMl90IGVyYXNlc2l6ZTsKKyB1aW50MzJfdCBudW1ibG9ja3M7CisgdWludDMyX3QgcmVnaW9uaW5kZXg7Cit9OworCitzdHJ1Y3Qgb3RwX2luZm8geworIHVpbnQzMl90IHN0YXJ0OworIHVpbnQzMl90IGxlbmd0aDsKKyB1aW50MzJfdCBsb2NrZWQ7Cit9OworCisjZGVmaW5lIE1FTUdFVElORk8gX0lPUignTScsIDEsIHN0cnVjdCBtdGRfaW5mb191c2VyKQorI2RlZmluZSBNRU1FUkFTRSBfSU9XKCdNJywgMiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNV1JJVEVPT0IgX0lPV1IoJ00nLCAzLCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTVJFQURPT0IgX0lPV1IoJ00nLCA0LCBzdHJ1Y3QgbXRkX29vYl9idWYpCisjZGVmaW5lIE1FTUxPQ0sgX0lPVygnTScsIDUsIHN0cnVjdCBlcmFzZV9pbmZvX3VzZXIpCisjZGVmaW5lIE1FTVVOTE9DSyBfSU9XKCdNJywgNiwgc3RydWN0IGVyYXNlX2luZm9fdXNlcikKKyNkZWZpbmUgTUVNR0VUUkVHSU9OQ09VTlQgX0lPUignTScsIDcsIGludCkKKyNkZWZpbmUgTUVNR0VUUkVHSU9OSU5GTyBfSU9XUignTScsIDgsIHN0cnVjdCByZWdpb25faW5mb191c2VyKQorI2RlZmluZSBNRU1TRVRPT0JTRUwgX0lPVygnTScsIDksIHN0cnVjdCBuYW5kX29vYmluZm8pCisjZGVmaW5lIE1FTUdFVE9PQlNFTCBfSU9SKCdNJywgMTAsIHN0cnVjdCBuYW5kX29vYmluZm8pCisjZGVmaW5lIE1FTUdFVEJBREJMT0NLIF9JT1coJ00nLCAxMSwgbG9mZl90KQorI2RlZmluZSBNRU1TRVRCQURCTE9DSyBfSU9XKCdNJywgMTIsIGxvZmZfdCkKKyNkZWZpbmUgT1RQU0VMRUNUIF9JT1IoJ00nLCAxMywgaW50KQorI2RlZmluZSBPVFBHRVRSRUdJT05DT1VOVCBfSU9XKCdNJywgMTQsIGludCkKKyNkZWZpbmUgT1RQR0VUUkVHSU9OSU5GTyBfSU9XKCdNJywgMTUsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgT1RQTE9DSyBfSU9SKCdNJywgMTYsIHN0cnVjdCBvdHBfaW5mbykKKyNkZWZpbmUgRUNDR0VUTEFZT1VUIF9JT1IoJ00nLCAxNywgc3RydWN0IG5hbmRfZWNjbGF5b3V0KQorI2RlZmluZSBFQ0NHRVRTVEFUUyBfSU9SKCdNJywgMTgsIHN0cnVjdCBtdGRfZWNjX3N0YXRzKQorI2RlZmluZSBNVERGSUxFTU9ERSBfSU8oJ00nLCAxOSkKKworc3RydWN0IG5hbmRfb29iaW5mbyB7CisgdWludDMyX3QgdXNlZWNjOworIHVpbnQzMl90IGVjY2J5dGVzOworIHVpbnQzMl90IG9vYmZyZWVbOF1bMl07CisgdWludDMyX3QgZWNjcG9zWzMyXTsKK307CisKK3N0cnVjdCBuYW5kX29vYmZyZWUgeworIHVpbnQzMl90IG9mZnNldDsKKyB1aW50MzJfdCBsZW5ndGg7Cit9OworCisjZGVmaW5lIE1URF9NQVhfT09CRlJFRV9FTlRSSUVTIDgKKworc3RydWN0IG5hbmRfZWNjbGF5b3V0IHsKKyB1aW50MzJfdCBlY2NieXRlczsKKyB1aW50MzJfdCBlY2Nwb3NbNjRdOworIHVpbnQzMl90IG9vYmF2YWlsOworIHN0cnVjdCBuYW5kX29vYmZyZWUgb29iZnJlZVtNVERfTUFYX09PQkZSRUVfRU5UUklFU107Cit9OworCitzdHJ1Y3QgbXRkX2VjY19zdGF0cyB7CisgdWludDMyX3QgY29ycmVjdGVkOworIHVpbnQzMl90IGZhaWxlZDsKKyB1aW50MzJfdCBiYWRibG9ja3M7CisgdWludDMyX3QgYmJ0YmxvY2tzOworfTsKKworZW51bSBtdGRfZmlsZV9tb2RlcyB7CisgTVREX01PREVfTk9STUFMID0gTVREX09UUF9PRkYsCisgTVREX01PREVfT1RQX0ZBQ1RPUlkgPSBNVERfT1RQX0ZBQ1RPUlksCisgTVREX01PREVfT1RQX1VTRVIgPSBNVERfT1RQX1VTRVIsCisgTVREX01PREVfUkFXLAorfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC11c2VyLmggYi9saWJjL2tlcm5lbC9jb21tb24vbXRkL210ZC11c2VyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWQzN2RjMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL2NvbW1vbi9tdGQvbXRkLXVzZXIuaApAQCAtMCwwICsxLDI1IEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqKioKKyAqKiogICBUaGlzIGhlYWRlciB3YXMgYXV0b21hdGljYWxseSBnZW5lcmF0ZWQgZnJvbSBhIExpbnV4IGtlcm5lbCBoZWFkZXIKKyAqKiogICBvZiB0aGUgc2FtZSBuYW1lLCB0byBtYWtlIGluZm9ybWF0aW9uIG5lY2Vzc2FyeSBmb3IgdXNlcnNwYWNlIHRvCisgKioqICAgY2FsbCBpbnRvIHRoZSBrZXJuZWwgYXZhaWxhYmxlIHRvIGxpYmMuICBJdCBjb250YWlucyBvbmx5IGNvbnN0YW50cywKKyAqKiogICBzdHJ1Y3R1cmVzLCBhbmQgbWFjcm9zIGdlbmVyYXRlZCBmcm9tIHRoZSBvcmlnaW5hbCBoZWFkZXIsIGFuZCB0aHVzLAorICoqKiAgIGNvbnRhaW5zIG5vIGNvcHlyaWdodGFibGUgaW5mb3JtYXRpb24uCisgKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisjaWZuZGVmIF9fTVREX1VTRVJfSF9fCisjZGVmaW5lIF9fTVREX1VTRVJfSF9fCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2luY2x1ZGUgPG10ZC9tdGQtYWJpLmg+CisKK3R5cGVkZWYgc3RydWN0IG10ZF9pbmZvX3VzZXIgbXRkX2luZm9fdDsKK3R5cGVkZWYgc3RydWN0IGVyYXNlX2luZm9fdXNlciBlcmFzZV9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCByZWdpb25faW5mb191c2VyIHJlZ2lvbl9pbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBuYW5kX29vYmluZm8gbmFuZF9vb2JpbmZvX3Q7Cit0eXBlZGVmIHN0cnVjdCBuYW5kX2VjY2xheW91dCBuYW5kX2VjY2xheW91dF90OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2NsZWFuX2hlYWRlci5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5iZWQ5OTI2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvY2xlYW5faGVhZGVyLnB5CkBAIC0wLDAgKzEsMTQ3IEBACisjIS91c3IvYmluL2VudiBweXRob24KKyMKKworaW1wb3J0IHN5cywgY3BwLCBrZXJuZWwsIGdsb2IsIG9zLCByZSwgZ2V0b3B0Citmcm9tIGRlZmF1bHRzIGltcG9ydCAqCitmcm9tIHV0aWxzIGltcG9ydCAqCisKK25vVXBkYXRlID0gMQorCitkZWYgIGNsZWFudXBGaWxlKCBwYXRoICk6CisgICAgIiIicmVhZHMgYW4gb3JpZ2luYWwgaGVhZGVyIGFuZCBwZXJmb3JtIHRoZSBjbGVhbnVwIG9wZXJhdGlvbiBvbiBpdAorICAgICAgIHRoaXMgZnVuY3Rpb25zIHJldHVybnMgdGhlIGRlc3RpbmF0aW9uIHBhdGggYW5kIHRoZSBjbGVhbiBoZWFkZXIKKyAgICAgICBhcyBhIHNpbmdsZSBzdHJpbmciIiIKKyAgICAjIGNoZWNrIHRoZSBoZWFkZXIgcGF0aAorICAgIHNyY19wYXRoICAgID0gcGF0aAorCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHNyY19wYXRoKToKKyAgICAgICAgaWYgbm9VcGRhdGU6CisgICAgICAgICAgICBwYW5pYyggImZpbGUgZG9lcyBub3QgZXhpc3Q6ICclcydcbiIgJSBwYXRoICkKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIndhcm5pbmc6IGZpbGUgZG9lcyBub3QgZXhpdDogJXNcbiIgJSBwYXRoICkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgIGlmIG5vdCBvcy5wYXRoLmlzZmlsZShzcmNfcGF0aCk6CisgICAgICAgIGlmIG5vVXBkYXRlOgorICAgICAgICAgICAgcGFuaWMoICJwYXRoIGlzIG5vdCBhIGZpbGU6ICclcydcbiIgJSBwYXRoICkKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIndhcm5pbmc6IG5vdCBhIGZpbGU6ICVzXG4iICUgcGF0aCApCisgICAgICAgIHJldHVybiBOb25lLCBOb25lCisKKyAgICBvcmlnaW5hbF9wYXRoID0ga2VybmVsX29yaWdpbmFsX3BhdGgKKyAgICBpZiBvcy5wYXRoLmNvbW1vbnByZWZpeCggWyBzcmNfcGF0aCwgb3JpZ2luYWxfcGF0aCBdICkgIT0gb3JpZ2luYWxfcGF0aDoKKyAgICAgICAgaWYgbm9VcGRhdGU6CisgICAgICAgICAgICBwYW5pYyggImZpbGUgaXMgbm90IGluICdvcmlnaW5hbCcgZGlyZWN0b3J5OiAlc1xuIiAlIHBhdGggKTsKKyAgICAgICAgc3lzLnN0ZGVyci53cml0ZSggIndhcm5pbmc6IGZpbGUgbm90IGluICdvcmlnaW5hbCcgaWdub3JlZDogJXNcbiIgJSBwYXRoICkKKyAgICAgICAgcmV0dXJuIE5vbmUsIE5vbmUKKworICAgIHNyY19wYXRoID0gc3JjX3BhdGhbbGVuKG9yaWdpbmFsX3BhdGgpOl0KKyAgICBpZiBsZW4oc3JjX3BhdGgpID4gMCBhbmQgc3JjX3BhdGhbMF0gPT0gJy8nOgorICAgICAgICBzcmNfcGF0aCA9IHNyY19wYXRoWzE6XQorCisgICAgaWYgbGVuKHNyY19wYXRoKSA9PSAwOgorICAgICAgICBwYW5pYyggIm9vcHMsIGludGVybmFsIGVycm9yLCBjYW4ndCBleHRyYWN0IGNvcnJlY3QgcmVsYXRpdmUgcGF0aCIgKQorCisgICAgIyBjb252ZXJ0IGludG8gZGVzdGluYXRpb24gcGF0aCwgZXh0cmFjdGluZyBhcmNoaXRlY3R1cmUgaWYgbmVlZGVkCisgICAgIyBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgbGlzdCBvZiBrbm93biBzdGF0aWMgZnVuY3Rpb25zCisgICAgIworICAgIGFyY2ggPSBOb25lCisgICAgcmVfYXNtX2FyY2ggPSByZS5jb21waWxlKCByImFzbS0oW1x3XGRfXCtcLlwtXSspKC8uKikiICkKKyAgICBtID0gcmVfYXNtX2FyY2gubWF0Y2goc3JjX3BhdGgpCisgICAgc3RhdGljcyA9IGtlcm5lbF9rbm93bl9nZW5lcmljX3N0YXRpY3MKKyAgICBpZiBtIGFuZCBtLmdyb3VwKDEpICE9ICdnZW5lcmljJzoKKyAgICAgICAgZHN0X3BhdGggPSAiYXJjaC0lcy9hc20vJXMiICUgbS5ncm91cHMoKQorICAgICAgICBhcmNoICAgICA9IG0uZ3JvdXAoMSkKKyAgICAgICAgc3RhdGljcyAgPSBzdGF0aWNzLnVuaW9uKCBrZXJuZWxfa25vd25fc3RhdGljcy5nZXQoIGFyY2gsIHNldCgpICkgKQorICAgIGVsc2U6CisgICAgICAgIGRzdF9wYXRoID0gImNvbW1vbi8iICsgc3JjX3BhdGgKKworICAgIGRzdF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aCggb3JpZ2luYWxfcGF0aCArICIvLi4vIiArIGRzdF9wYXRoICkKKworICAgICMgbm93LCBsZXQncyBwYXJzZSB0aGUgZmlsZQorICAgICMKKyAgICBsaXN0ID0gY3BwLkJsb2NrUGFyc2VyKCkucGFyc2VGaWxlKHBhdGgpCisgICAgaWYgbm90IGxpc3Q6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogY2FuJ3QgcGFyc2UgJyVzJyIgJSBwYXRoICkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworCisgICAgbGlzdC5vcHRpbWl6ZU1hY3Jvcygga2VybmVsX2tub3duX21hY3JvcyApCisgICAgbGlzdC5vcHRpbWl6ZUlmMDEoKQorICAgIGxpc3QucmVtb3ZlVmFyc0FuZEZ1bmNzKCBzdGF0aWNzICkKKyAgICBsaXN0LnJlbW92ZUNvbW1lbnRzKCkKKyAgICBsaXN0LnJlbW92ZUVtcHR5TGluZXMoKQorICAgIGxpc3QuaW5zZXJ0RGlzY2xhaW1lcigga2VybmVsLmtlcm5lbF9kaXNjbGFpbWVyICkKKworICAgIG91dCA9IFN0cmluZ091dHB1dCgpCisgICAgbGlzdC53cml0ZShvdXQpCisgICAgcmV0dXJuIGRzdF9wYXRoLCBvdXQuZ2V0KCkKKworCitpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgorCisgICAgZGVmIHVzYWdlKCk6CisgICAgICAgIHByaW50ICIiIlwKKyAgICB1c2FnZTogICVzIFtvcHRpb25zXSA8aGVhZGVyX3BhdGg+CisKKyAgICAgICAgb3B0aW9uczoKKyAgICAgICAgICAgIC12ICAgIGVuYWJsZSB2ZXJib3NlIG1vZGUKKworICAgICAgICAgICAgLXUgICAgZW5hYmxlZCB1cGRhdGUgbW9kZQorICAgICAgICAgICAgICAgIHRoaXMgd2lsbCB0cnkgdG8gdXBkYXRlIHRoZSBjb3JyZXNwb25kaW5nICdjbGVhbiBoZWFkZXInCisgICAgICAgICAgICAgICAgaWYgdGhlIGNvbnRlbnQgaGFzIGNoYW5nZWQuIHdpdGggdGhpcywgeW91IGNhbiBwYXNzIG1vcmUKKyAgICAgICAgICAgICAgICB0aGFuIG9uZSBmaWxlIG9uIHRoZSBjb21tYW5kLWxpbmUKKworICAgICAgICA8aGVhZGVyX3BhdGg+IG11c3QgYmUgaW4gYSBzdWJkaXJlY3Rvcnkgb2YgJ29yaWdpbmFsJworICAgICIiIiAlIG9zLnBhdGguYmFzZW5hbWUoc3lzLmFyZ3ZbMF0pCisgICAgICAgIHN5cy5leGl0KDEpCisKKyAgICB0cnk6CisgICAgICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICd1dicgKQorICAgIGV4Y2VwdDoKKyAgICAgICAgIyB1bnJlY29nbml6ZWQgb3B0aW9uCisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvblxuIiApCisgICAgICAgIHVzYWdlKCkKKworICAgIGZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgICAgICBpZiBvcHQgPT0gJy11JzoKKyAgICAgICAgICAgIG5vVXBkYXRlID0gMAorICAgICAgICBlbGlmIG9wdCA9PSAnLXYnOgorICAgICAgICAgICAgdmVyYm9zZSA9IDEKKyAgICAgICAgICAgIERfc2V0bGV2ZWwoMSkKKworICAgIGlmIGxlbihhcmdzKSA9PSAwOgorICAgICAgICB1c2FnZSgpCisKKyAgICBpZiBub1VwZGF0ZToKKyAgICAgICAgZm9yIHBhdGggaW4gYXJnczoKKyAgICAgICAgICAgIGRzdF9wYXRoLCBuZXdkYXRhID0gY2xlYW51cEZpbGUocGF0aCkKKyAgICAgICAgICAgIHByaW50IG5ld2RhdGEKKworICAgICAgICBzeXMuZXhpdCgwKQorCisgICAgIyBub3cgbGV0J3MgdXBkYXRlIG91ciBmaWxlcy4KKworICAgIGIgPSBCYXRjaEZpbGVVcGRhdGVyKCkKKworICAgIGZvciBwYXRoIGluIGFyZ3M6CisgICAgICAgIGRzdF9wYXRoLCBuZXdkYXRhID0gY2xlYW51cEZpbGUocGF0aCkKKyAgICAgICAgaWYgbm90IGRzdF9wYXRoOgorICAgICAgICAgICAgY29udGludWUKKworICAgICAgICBiLnJlYWRGaWxlKCBkc3RfcGF0aCApCisgICAgICAgIHIgPSBiLmVkaXRGaWxlKCBkc3RfcGF0aCwgbmV3ZGF0YSApCisgICAgICAgIGlmIHIgPT0gMDoKKyAgICAgICAgICAgIHIgPSAidW5jaGFuZ2VkIgorICAgICAgICBlbGlmIHIgPT0gMToKKyAgICAgICAgICAgIHIgPSAiZWRpdGVkIgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgciA9ICJhZGRlZCIKKworICAgICAgICBwcmludCAiY2xlYW5pbmc6ICUtKnMgLT4gJS0qcyAoJXMpIiAlICggMzUsIHBhdGgsIDM1LCBkc3RfcGF0aCwgciApCisKKworICAgIGlmIG9zLmVudmlyb24uaGFzX2tleSgiQU5EUk9JRF9QUk9EVUNUX09VVCIpOgorICAgICAgICBiLnVwZGF0ZVA0RmlsZXMoKQorICAgIGVsc2U6CisgICAgICAgIGIudXBkYXRlRmlsZXMoKQorCisgICAgc3lzLmV4aXQoMCkKZGlmZiAtLWdpdCBhL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2NwcC5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zM2YxYTA2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvY3BwLnB5CkBAIC0wLDAgKzEsMjE1OSBAQAorIyBhIGdsb3JpZmllZCBDIHByZS1wcm9jZXNzb3IgcGFyc2VyCisKK2ltcG9ydCBzeXMsIHJlLCBzdHJpbmcKK2Zyb20gdXRpbHMgaW1wb3J0ICoKK2Zyb20gZGVmYXVsdHMgaW1wb3J0ICoKKworZGVidWdUb2tlbnMgICAgICAgICAgICAgPSBGYWxzZQorZGVidWdEaXJlY3RpdmVUb2tlbml6ZXIgPSBGYWxzZQorZGVidWdMaW5lUGFyc2luZyAgICAgICAgPSBGYWxzZQorZGVidWdDcHBFeHByICAgICAgICAgICAgPSBGYWxzZQorZGVidWdPcHRpbUlmMDEgICAgICAgICAgPSBGYWxzZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgQyBQIFAgICBUIE8gSyBFIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgdGhlIGxpc3Qgb2Ygc3VwcG9ydGVkIEMtcHJlcHJvY2Vzc29yIHRva2VucworIyBwbHVzIGEgY291cGxlIG9mIEMgdG9rZW5zIGFzIHdlbGwKK3Rva0VPRiAgICAgICA9ICJcMCIKK3Rva0xOICAgICAgICA9ICJcbiIKK3Rva1NUUklOR0lGWSA9ICIjIgordG9rQ09OQ0FUICAgID0gIiMjIgordG9rTE9HSUNBTkQgID0gIiYmIgordG9rTE9HSUNPUiAgID0gInx8IgordG9rU0hMICAgICAgID0gIjw8IgordG9rU0hSICAgICAgID0gIj4+IgordG9rRVFVQUwgICAgID0gIj09IgordG9rTkVRVUFMICAgID0gIiE9IgordG9rTFQgICAgICAgID0gIjwiCit0b2tMVEUgICAgICAgPSAiPD0iCit0b2tHVCAgICAgICAgPSAiPiIKK3Rva0dURSAgICAgICA9ICI+PSIKK3Rva0VMTElQU0lTICA9ICIuLi4iCit0b2tTUEFDRSAgICAgPSAiICIKK3Rva0RFRklORUQgICA9ICJkZWZpbmVkIgordG9rTFBBUkVOICAgID0gIigiCit0b2tSUEFSRU4gICAgPSAiKSIKK3Rva05PVCAgICAgICA9ICIhIgordG9rUExVUyAgICAgID0gIisiCit0b2tNSU5VUyAgICAgPSAiLSIKK3Rva01VTFRJUExZICA9ICIqIgordG9rRElWSURFICAgID0gIi8iCit0b2tNT0RVTFVTICAgPSAiJSIKK3Rva0JJTkFORCAgICA9ICImIgordG9rQklOT1IgICAgID0gInwiCit0b2tCSU5YT1IgICAgPSAiXiIKK3Rva0NPTU1BICAgICA9ICIsIgordG9rTEJSQUNFICAgID0gInsiCit0b2tSQlJBQ0UgICAgPSAifSIKK3Rva0FSUk9XICAgICA9ICItPiIKK3Rva0lOQ1JFTUVOVCA9ICIrKyIKK3Rva0RFQ1JFTUVOVCA9ICItLSIKK3Rva05VTUJFUiAgICA9ICI8bnVtYmVyPiIKK3Rva0lERU5UICAgICA9ICI8aWRlbnQ+IgordG9rU1RSSU5HICAgID0gIjxzdHJpbmc+IgorCitjbGFzcyBUb2tlbjoKKyAgICAiIiJhIHNpbXBsZSBjbGFzcyB0byBob2xkIGluZm9ybWF0aW9uIGFib3V0IGEgZ2l2ZW4gdG9rZW4uCisgICAgICAgZWFjaCB0b2tlbiBoYXMgYSBwb3NpdGlvbiBpbiB0aGUgc291cmNlIGNvZGUsIGFzIHdlbGwgYXMKKyAgICAgICBhbiAnaWQnIGFuZCBhICd2YWx1ZScuIHRoZSBpZCBpcyBhIHN0cmluZyB0aGF0IGlkZW50aWZpZXMKKyAgICAgICB0aGUgdG9rZW4ncyBjbGFzcywgd2hpbGUgdGhlIHZhbHVlIGlzIHRoZSBzdHJpbmcgb2YgdGhlCisgICAgICAgb3JpZ2luYWwgdG9rZW4gaXRzZWxmLgorCisgICAgICAgZm9yIGV4YW1wbGUsIHRoZSB0b2tlbml6ZXIgY29uY2F0ZW5hdGVzIGEgc2VyaWVzIG9mIHNwYWNlcworICAgICAgIGFuZCB0YWJzIGFzIGEgc2luZ2xlIHRva1NQQUNFIGlkLCB3aG9zZSB2YWx1ZSBpZiB0aGUgb3JpZ2luYWwKKyAgICAgICBzcGFjZXMrdGFicyBzZXF1ZW5jZS4iIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pZCAgICAgPSBOb25lCisgICAgICAgIHNlbGYudmFsdWUgID0gTm9uZQorICAgICAgICBzZWxmLmxpbmVubyA9IDAKKyAgICAgICAgc2VsZi5jb2xubyAgPSAwCisKKyAgICBkZWYgc2V0KHNlbGYsaWQsdmFsPU5vbmUpOgorICAgICAgICBzZWxmLmlkID0gaWQKKyAgICAgICAgaWYgdmFsOgorICAgICAgICAgICAgc2VsZi52YWx1ZSA9IHZhbAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi52YWx1ZSA9IGlkCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgY29weUZyb20oc2VsZixzcmMpOgorICAgICAgICBzZWxmLmlkICAgICA9IHNyYy5pZAorICAgICAgICBzZWxmLnZhbHVlICA9IHNyYy52YWx1ZQorICAgICAgICBzZWxmLmxpbmVubyA9IHNyYy5saW5lbm8KKyAgICAgICAgc2VsZi5jb2xubyAgPSBzcmMuY29sbm8KKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tJREVOVDoKKyAgICAgICAgICAgIHJldHVybiAiKGlkZW50ICVzKSIgJSBzZWxmLnZhbHVlCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rTlVNQkVSOgorICAgICAgICAgICAgcmV0dXJuICIobnVtYmVyICVzKSIgJSBzZWxmLnZhbHVlCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rU1RSSU5HOgorICAgICAgICAgICAgcmV0dXJuICIoc3RyaW5nICclcycpIiAlIHNlbGYudmFsdWUKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tMTjoKKyAgICAgICAgICAgIHJldHVybiAiPExOPiIKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tFT0Y6CisgICAgICAgICAgICByZXR1cm4gIjxFT0Y+IgorICAgICAgICBpZiBzZWxmLmlkID09IHRva1NQQUNFIGFuZCBzZWxmLnZhbHVlID09ICJcXCI6CisgICAgICAgICAgICAjIHRoaXMgY29ycmVzcG9uZHMgdG8gYSB0cmFpbGluZyBcIHRoYXQgd2FzIHRyYW5zZm9ybWVkIGludG8gYSB0b2tTUEFDRQorICAgICAgICAgICAgcmV0dXJuICI8XFw+IgorCisgICAgICAgIHJldHVybiBzZWxmLmlkCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tJREVOVDoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rTlVNQkVSOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudmFsdWUKKyAgICAgICAgaWYgc2VsZi5pZCA9PSB0b2tTVFJJTkc6CisgICAgICAgICAgICByZXR1cm4gc2VsZi52YWx1ZQorICAgICAgICBpZiBzZWxmLmlkID09IHRva0VPRjoKKyAgICAgICAgICAgIHJldHVybiAiPEVPRj4iCisgICAgICAgIGlmIHNlbGYuaWQgPT0gdG9rU1BBQ0U6CisgICAgICAgICAgICBpZiBzZWxmLnZhbHVlID09ICJcXCI6ICAjIHRyYWlsaW5nIFwKKyAgICAgICAgICAgICAgICByZXR1cm4gIlxcXG4iCisgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgIHJldHVybiBzZWxmLnZhbHVlCisKKyAgICAgICAgcmV0dXJuIHNlbGYuaWQKKworY2xhc3MgQmFkRXhwZWN0ZWRUb2tlbihFeGNlcHRpb24pOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG1zZyk6CisgICAgICAgIHByaW50IG1zZworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICBDIFAgUCAgIFQgTyBLIEUgTiAgIEMgVSBSIFMgTyBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIFRva2VuQ3Vyc29yOgorICAgICIiImEgc21hbGwgY2xhc3MgdG8gaXRlcmF0ZSBvdmVyIGEgbGlzdCBvZiBUb2tlbiBvYmplY3RzIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdG9rZW5zKToKKyAgICAgICAgc2VsZi50b2tlbnMgPSB0b2tlbnMKKyAgICAgICAgc2VsZi5uICAgICAgPSAwCisgICAgICAgIHNlbGYuY291bnQgID0gbGVuKHRva2VucykKKworICAgIGRlZiBzZXQoc2VsZixuKToKKyAgICAgICAgIiIic2V0IHRoZSBjdXJyZW50IHBvc2l0aW9uIiIiCisgICAgICAgIGlmIG4gPCAwOgorICAgICAgICAgICAgbiA9IDAKKyAgICAgICAgaWYgbiA+IHNlbGYuY291bnQ6CisgICAgICAgICAgICBuID0gc2VsZi5jb3VudAorICAgICAgICBzZWxmLm4gPSBuCisKKyAgICBkZWYgcGVla0lkKHNlbGYpOgorICAgICAgICAiIiJyZXRyaWV2ZSB0aGUgaWQgb2YgdGhlIGN1cnJlbnQgdG9rZW4iIiIKKyAgICAgICAgaWYgKHNlbGYubiA+PSBzZWxmLmNvdW50KToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisgICAgICAgIHJldHVybiBzZWxmLnRva2Vuc1tzZWxmLm5dLmlkCisKKyAgICBkZWYgcGVlayhzZWxmKToKKyAgICAgICAgIiIicmV0cmlldmUgdGhlIGN1cnJlbnQgdG9rZW4uIGRvZXMgbm90IGNoYW5nZSBwb3NpdGlvbiIiIgorICAgICAgICBpZiAoc2VsZi5uID49IHNlbGYuY291bnQpOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zW3NlbGYubl0KKworICAgIGRlZiBza2lwKHNlbGYpOgorICAgICAgICAiIiJpbmNyZWFzZSBjdXJyZW50IHRva2VuIHBvc2l0aW9uIiIiCisgICAgICAgIGlmIChzZWxmLm4gPCBzZWxmLmNvdW50KToKKyAgICAgICAgICAgIHNlbGYubiArPSAxCisKKyAgICBkZWYgc2tpcFNwYWNlcyhzZWxmKToKKyAgICAgICAgIiIic2tpcCBvdmVyIGFsbCBzcGFjZSB0b2tlbnMsIHRoaXMgaW5jbHVkZXMgdG9rU1BBQ0UgYW5kIHRva0xOIiIiCisgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICB0b2sgPSBzZWxmLnBlZWtJZCgpCisgICAgICAgICAgICBpZiB0b2sgIT0gdG9rU1BBQ0UgYW5kIHRvayAhPSB0b2tMTjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgc2VsZi5za2lwKCkKKworICAgIGRlZiBza2lwSWZJZChzZWxmLGlkKToKKyAgICAgICAgIiIic2tpcCBhbiBvcHRpb25hbCB0b2tlbiIiIgorICAgICAgICBpZiBzZWxmLnBlZWtJZCgpID09IGlkOgorICAgICAgICAgICAgc2VsZi5za2lwKCkKKworICAgIGRlZiBleHBlY3RJZChzZWxmLGlkKToKKyAgICAgICAgIiIicmFpc2UgYW4gZXhjZXB0aW9uIGlmIHRoZSBjdXJyZW50IHRva2VuIGhhc24ndCBhIGdpdmVuIGlkLgorICAgICAgICAgICBvdGhlcndpc2Ugc2tpcCBvdmVyIGl0IiIiCisgICAgICAgIHRvayA9IHNlbGYucGVlaygpCisgICAgICAgIGlmIHRvay5pZCAhPSBpZDoKKyAgICAgICAgICAgIHJhaXNlIEJhZEV4cGVjdGVkVG9rZW4sICIlZDolZDogJyVzJyBleHBlY3RlZCwgcmVjZWl2ZWQgJyVzJyIgJSAodG9rLmxpbmVubywgdG9rLmNvbG5vLCBpZCwgdG9rLmlkKQorICAgICAgICBzZWxmLnNraXAoKQorCisgICAgZGVmIHJlbWFpbihzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBsaXN0IG9mIHJlbWFpbmluZyB0b2tlbnMiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zW3NlbGYubjpdCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgIEMgUCBQICAgVCBPIEsgRSBOIEkgWiBFIFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisjIGxpc3Qgb2YgbG9uZyBzeW1ib2xzLCBpLmUuIHRob3NlIHRoYXQgdGFrZSBtb3JlIHRoYW4gb25lIGNoYXJhY3RlcnMKK2NwcExvbmdTeW1ib2xzID0gWyB0b2tDT05DQVQsIHRva0xPR0lDQU5ELCB0b2tMT0dJQ09SLCB0b2tTSEwsIHRva1NIUiwgdG9rRUxMSVBTSVMsIHRva0VRVUFMLFwKKyAgICAgICAgICAgICAgICAgICB0b2tORVFVQUwsIHRva0xURSwgdG9rR1RFLCB0b2tBUlJPVywgdG9rSU5DUkVNRU5ULCB0b2tERUNSRU1FTlQgXQorCitjbGFzcyBDcHBUb2tlbml6ZXI6CisgICAgIiIiYW4gYWJzdHJhY3QgY2xhc3MgdXNlZCB0byBjb252ZXJ0IHNvbWUgaW5wdXQgdGV4dCBpbnRvIGEgbGlzdAorICAgICAgIG9mIHRva2Vucy4gcmVhbCBpbXBsZW1lbnRhdGlvbnMgZm9sbG93IGFuZCBkaWZmZXIgaW4gdGhlIGZvcm1hdAorICAgICAgIG9mIHRoZSBpbnB1dCB0ZXh0IG9ubHkiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgIiIiaW5pdGlhbGl6ZSBhIG5ldyBDcHBUb2tlbml6ZXIgb2JqZWN0IiIiCisgICAgICAgIHNlbGYuZW9mICA9IEZhbHNlICAjIGVuZCBvZiBmaWxlIHJlYWNoZWQgPworICAgICAgICBzZWxmLnRleHQgPSBOb25lICAgIyBjb250ZW50IG9mIGN1cnJlbnQgbGluZSwgd2l0aCBmaW5hbCBcbiBzdHJpcHBlZAorICAgICAgICBzZWxmLmxpbmUgPSAwICAgICAgIyBudW1iZXIgb2YgY3VycmVudCBsaW5lCisgICAgICAgIHNlbGYucG9zICA9IDAgICAgICAjIGN1cnJlbnQgY2hhcmFjdGVyIHBvc2l0aW9uIGluIGN1cnJlbnQgbGluZQorICAgICAgICBzZWxmLmxlbiAgPSAwICAgICAgIyBsZW5ndGggb2YgY3VycmVudCBsaW5lIHRleHQKKyAgICAgICAgc2VsZi5oZWxkID0gVG9rZW4oKQorCisgICAgZGVmIHNldExpbmVUZXh0KHNlbGYsbGluZSk6CisgICAgICAgICIiInNldCB0aGUgY29udGVudCBvZiB0aGUgKG5leHQpIGN1cnJlbnQgbGluZS4gc2hvdWxkIGJlIGNhbGxlZAorICAgICAgICAgICBieSBmaWxsTGluZVRleHQoKSBpbiBkZXJpdmVkIGNsYXNzZXMiIiIKKyAgICAgICAgc2VsZi50ZXh0ID0gbGluZQorICAgICAgICBzZWxmLmxlbiAgPSBsZW4obGluZSkKKyAgICAgICAgc2VsZi5wb3MgID0gMAorCisgICAgZGVmIGZpbGxMaW5lVGV4dChzZWxmKToKKyAgICAgICAgIiIicmVmcmVzaCB0aGUgY29udGVudCBvZiAnbGluZScgd2l0aCBhIG5ldyBsaW5lIG9mIGlucHV0IiIiCisgICAgICAgICMgdG8gYmUgb3ZlcnJpZGVuCisgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQorCisgICAgZGVmIG1hcmtQb3Moc2VsZix0b2spOgorICAgICAgICAiIiJtYXJrIHRoZSBwb3NpdGlvbiBvZiB0aGUgY3VycmVudCB0b2tlbiBpbiB0aGUgc291cmNlIGZpbGUiIiIKKyAgICAgICAgaWYgc2VsZi5lb2Ygb3Igc2VsZi5wb3MgPiBzZWxmLmxlbjoKKyAgICAgICAgICAgIHRvay5saW5lbm8gPSBzZWxmLmxpbmUgKyAxCisgICAgICAgICAgICB0b2suY29sbm8gID0gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdG9rLmxpbmVubyA9IHNlbGYubGluZQorICAgICAgICAgICAgdG9rLmNvbG5vICA9IHNlbGYucG9zCisKKyAgICBkZWYgcGVla0NoYXIoc2VsZik6CisgICAgICAgICIiInJldHVybiB0aGUgY3VycmVudCB0b2tlbiB1bmRlciB0aGUgY3Vyc29yIHdpdGhvdXQgbW92aW5nIGl0IiIiCisgICAgICAgIGlmIHNlbGYuZW9mOgorICAgICAgICAgICAgcmV0dXJuIHRva0VPRgorCisgICAgICAgIGlmIHNlbGYucG9zID4gc2VsZi5sZW46CisgICAgICAgICAgICBzZWxmLnBvcyAgID0gMAorICAgICAgICAgICAgc2VsZi5saW5lICs9IDEKKyAgICAgICAgICAgIHNlbGYuZmlsbExpbmVUZXh0KCkKKyAgICAgICAgICAgIGlmIHNlbGYuZW9mOgorICAgICAgICAgICAgICAgIHJldHVybiB0b2tFT0YKKworICAgICAgICBpZiBzZWxmLnBvcyA9PSBzZWxmLmxlbjoKKyAgICAgICAgICAgIHJldHVybiB0b2tMTgorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmV0dXJuIHNlbGYudGV4dFtzZWxmLnBvc10KKworICAgIGRlZiBwZWVrTkNoYXIoc2VsZixuKToKKyAgICAgICAgIiIidHJ5IHRvIHBlZWsgdGhlIG5leHQgbiBjaGFycyBvbiB0aGUgc2FtZSBsaW5lIiIiCisgICAgICAgIGlmIHNlbGYucG9zICsgbiA+IHNlbGYubGVuOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKyAgICAgICAgcmV0dXJuIHNlbGYudGV4dFtzZWxmLnBvczpzZWxmLnBvcytuXQorCisgICAgZGVmIHNraXBDaGFyKHNlbGYpOgorICAgICAgICAiIiJpbmNyZW1lbnQgdGhlIHRva2VuIGN1cnNvciBwb3NpdGlvbiIiIgorICAgICAgICBpZiBub3Qgc2VsZi5lb2Y6CisgICAgICAgICAgICBzZWxmLnBvcyArPSAxCisKKyAgICBkZWYgc2tpcE5DaGFycyhzZWxmLG4pOgorICAgICAgICBpZiBzZWxmLnBvcyArIG4gPD0gc2VsZi5sZW46CisgICAgICAgICAgICBzZWxmLnBvcyArPSBuCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB3aGlsZSBuID4gMDoKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgICAgICBuIC09IDEKKworICAgIGRlZiBuZXh0Q2hhcihzZWxmKToKKyAgICAgICAgIiIicmV0cmlldmUgdGhlIHRva2VuIGF0IHRoZSBjdXJyZW50IGN1cnNvciBwb3NpdGlvbiwgdGhlbiBza2lwIGl0IiIiCisgICAgICAgIHJlc3VsdCA9IHNlbGYucGVla0NoYXIoKQorICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgcmV0dXJuICByZXN1bHQKKworICAgIGRlZiBnZXRFc2NhcGUoc2VsZik6CisgICAgICAgICMgdHJ5IHRvIGdldCBhbGwgY2hhcmFjdGVycyBhZnRlciBhIGJhY2tzbGFzaCAoXCkKKyAgICAgICAgcmVzdWx0ID0gc2VsZi5uZXh0Q2hhcigpCisgICAgICAgIGlmIHJlc3VsdCA9PSAiMCI6CisgICAgICAgICAgICAjIG9jdGFsIG51bWJlciA/CisgICAgICAgICAgICBudW0gPSBzZWxmLnBlZWtOQ2hhcigzKQorICAgICAgICAgICAgaWYgbnVtICE9IE5vbmU6CisgICAgICAgICAgICAgICAgaXNPY3RhbCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgZCBpbiBudW06CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkIGluICIwMTIzNDU2NyI6CisgICAgICAgICAgICAgICAgICAgICAgICBpc09jdGFsID0gRmFsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgaWYgaXNPY3RhbDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG51bQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBOQ2hhcnMoMykKKyAgICAgICAgZWxpZiByZXN1bHQgPT0gIngiIG9yIHJlc3VsdCA9PSAiWCI6CisgICAgICAgICAgICAjIGhleCBudW1iZXIgPworICAgICAgICAgICAgbnVtID0gc2VsZi5wZWVrTkNoYXIoMikKKyAgICAgICAgICAgIGlmIG51bSAhPSBOb25lOgorICAgICAgICAgICAgICAgIGlzSGV4ID0gVHJ1ZQorICAgICAgICAgICAgICAgIGZvciBkIGluIG51bToKKyAgICAgICAgICAgICAgICAgICAgaWYgbm90IGQgaW4gIjAxMjM0NTY3OGFiY2RlZkFCQ0RFRiI6CisgICAgICAgICAgICAgICAgICAgICAgICBpc0hleCA9IEZhbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGlmIGlzSGV4OgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gbnVtCisgICAgICAgICAgICAgICAgICAgIHNlbGYuc2tpcE5DaGFycygyKQorICAgICAgICBlbGlmIHJlc3VsdCA9PSAidSIgb3IgcmVzdWx0ID09ICJVIjoKKyAgICAgICAgICAgICMgdW5pY29kZSBjaGFyID8KKyAgICAgICAgICAgIG51bSA9IHNlbGYucGVla05DaGFyKDQpCisgICAgICAgICAgICBpZiBudW0gIT0gTm9uZToKKyAgICAgICAgICAgICAgICBpc0hleCA9IFRydWUKKyAgICAgICAgICAgICAgICBmb3IgZCBpbiBudW06CisgICAgICAgICAgICAgICAgICAgIGlmIG5vdCBkIGluICIwMTIzNDU2NzhhYmNkZWZBQkNERUYiOgorICAgICAgICAgICAgICAgICAgICAgICAgaXNIZXggPSBGYWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBpZiBpc0hleDoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IG51bQorICAgICAgICAgICAgICAgICAgICBzZWxmLnNraXBOQ2hhcnMoNCkKKworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgbmV4dFJlYWxUb2tlbihzZWxmLHRvayk6CisgICAgICAgICIiInJldHVybiBuZXh0IENQUCB0b2tlbiwgdXNlZCBpbnRlcm5hbGx5IGJ5IG5leHRUb2tlbigpIiIiCisgICAgICAgIGMgPSBzZWxmLm5leHRDaGFyKCkKKyAgICAgICAgaWYgYyA9PSB0b2tFT0Ygb3IgYyA9PSB0b2tMTjoKKyAgICAgICAgICAgIHJldHVybiB0b2suc2V0KGMpCisKKyAgICAgICAgaWYgYyA9PSAnLyc6CisgICAgICAgICAgICBjID0gc2VsZi5wZWVrQ2hhcigpCisgICAgICAgICAgICBpZiBjID09ICcvJzogICAjIEMrKyBjb21tZW50IGxpbmUKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICBjID0gc2VsZi5uZXh0Q2hhcigpCisgICAgICAgICAgICAgICAgICAgIGlmIGMgPT0gdG9rRU9GIG9yIGMgPT0gdG9rTE46CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva0xOKQorICAgICAgICAgICAgaWYgYyA9PSAnKic6ICAgIyBDIGNvbW1lbnQgc3RhcnQKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgICAgICB2YWx1ZSA9ICIvKiIKKyAgICAgICAgICAgICAgICBwcmV2X2MgPSBOb25lCisgICAgICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICAgICAgYyA9IHNlbGYubmV4dENoYXIoKQorICAgICAgICAgICAgICAgICAgICBpZiBjID09IHRva0VPRjoKKyAgICAgICAgICAgICAgICAgICAgICAgICNwcmludCAiIyMgRU9GIGFmdGVyICclcyciICUgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva0VPRix2YWx1ZSkKKyAgICAgICAgICAgICAgICAgICAgaWYgYyA9PSAnLycgYW5kIHByZXZfYyA9PSAnKic6CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgICAgICBwcmV2X2MgPSBjCisgICAgICAgICAgICAgICAgICAgIHZhbHVlICs9IGMKKworICAgICAgICAgICAgICAgIHZhbHVlICs9ICIvIgorICAgICAgICAgICAgICAgICNwcmludCAiIyMgQ09NTUVOVDogJyVzJyIgJSB2YWx1ZQorICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva1NQQUNFLHZhbHVlKQorICAgICAgICAgICAgYyA9ICcvJworCisgICAgICAgIGlmIGMuaXNzcGFjZSgpOgorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBjMiA9IHNlbGYucGVla0NoYXIoKQorICAgICAgICAgICAgICAgIGlmIGMyID09IHRva0xOIG9yIG5vdCBjMi5pc3NwYWNlKCk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrCisgICAgICAgICAgICAgICAgYyArPSBjMgorICAgICAgICAgICAgICAgIHNlbGYuc2tpcENoYXIoKQorICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rU1BBQ0UsYykKKworICAgICAgICBpZiBjID09ICdcXCc6CisgICAgICAgICAgICBpZiBkZWJ1Z1Rva2VuczoKKyAgICAgICAgICAgICAgICBwcmludCAibmV4dFJlYWxUb2tlbjogXFwgZm91bmQsIG5leHQgdG9rZW4gaXMgJyVzJyIgJSByZXByKHNlbGYucGVla0NoYXIoKSkKKyAgICAgICAgICAgIGlmIHNlbGYucGVla0NoYXIoKSA9PSB0b2tMTjogICAjIHRyYWlsaW5nIFwKKyAgICAgICAgICAgICAgICAjIGVhdCB0aGUgdG9rTE4KKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgICAgICAjIHdlIHJlcGxhY2UgYSB0cmFpbGluZyBcIGJ5IGEgdG9rU1BBQ0Ugd2hvc2UgdmFsdWUgaXMKKyAgICAgICAgICAgICAgICAjIHNpbXBseSAiXFwiLiB0aGlzIGFsbG93cyB1cyB0byBkZXRlY3QgdGhlbSBsYXRlciB3aGVuCisgICAgICAgICAgICAgICAgIyBuZWVkZWQuCisgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rU1BBQ0UsIlxcIikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgIyB0cmVhdCBhcyBhIHNpbmdsZSB0b2tlbiBoZXJlID8KKyAgICAgICAgICAgICAgICBjICs9c2VsZi5nZXRFc2NhcGUoKQorICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KGMpCisKKyAgICAgICAgaWYgYyA9PSAiJyI6ICAjIGNoYXJzCisgICAgICAgICAgICBjMiA9IHNlbGYubmV4dENoYXIoKQorICAgICAgICAgICAgYyArPSBjMgorICAgICAgICAgICAgaWYgYzIgPT0gJ1xcJzoKKyAgICAgICAgICAgICAgICBjICs9IHNlbGYuZ2V0RXNjYXBlKCkKKworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBjMiA9IHNlbGYubmV4dENoYXIoKQorICAgICAgICAgICAgICAgIGlmIGMyID09IHRva0VPRjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjICs9IGMyCisgICAgICAgICAgICAgICAgaWYgYzIgPT0gIiciOgorICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tTVFJJTkcsIGMpCisKKyAgICAgICAgaWYgYyA9PSAnIic6ICAjIHN0cmluZ3MKKyAgICAgICAgICAgIHF1b3RlID0gMAorICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBjMiAgPSBzZWxmLm5leHRDaGFyKCkKKyAgICAgICAgICAgICAgICBpZiBjMiA9PSB0b2tFT0Y6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0b2suc2V0KHRva1NUUklORyxjKQorCisgICAgICAgICAgICAgICAgYyArPSBjMgorICAgICAgICAgICAgICAgIGlmIG5vdCBxdW90ZToKKyAgICAgICAgICAgICAgICAgICAgaWYgYzIgPT0gJyInOgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQodG9rU1RSSU5HLGMpCisgICAgICAgICAgICAgICAgICAgIGlmIGMyID09ICJcXCI6CisgICAgICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IDEKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICBxdW90ZSA9IDAKKworICAgICAgICBpZiBjID49ICIwIiBhbmQgYyA8PSAiOSI6ICAjIGludGVnZXJzID8KKyAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgYzIgPSBzZWxmLnBlZWtDaGFyKCkKKyAgICAgICAgICAgICAgICBpZiBjMiA9PSB0b2tMTiBvciAobm90IGMyLmlzYWxudW0oKSBhbmQgYzIgIT0gIl8iKToKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBjICs9IGMyCisgICAgICAgICAgICAgICAgc2VsZi5za2lwQ2hhcigpCisgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tOVU1CRVIsYykKKworICAgICAgICBpZiBjLmlzYWxudW0oKSBvciBjID09ICJfIjogICMgaWRlbnRpZmllcnMgPworICAgICAgICAgICAgd2hpbGUgMToKKyAgICAgICAgICAgICAgICBjMiA9IHNlbGYucGVla0NoYXIoKQorICAgICAgICAgICAgICAgIGlmIGMyID09IHRva0xOIG9yIChub3QgYzIuaXNhbG51bSgpIGFuZCBjMiAhPSAiXyIpOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIGMgKz0gYzIKKyAgICAgICAgICAgICAgICBzZWxmLnNraXBDaGFyKCkKKyAgICAgICAgICAgIGlmIGMgPT0gdG9rREVGSU5FRDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tERUZJTkVEKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICByZXR1cm4gdG9rLnNldCh0b2tJREVOVCxjKQorCisgICAgICAgICMgY2hlY2sgc3BlY2lhbCBzeW1ib2xzCisgICAgICAgIGZvciBzayBpbiBjcHBMb25nU3ltYm9sczoKKyAgICAgICAgICAgIGlmIGMgPT0gc2tbMF06CisgICAgICAgICAgICAgICAgc2tsZW4gPSBsZW4oc2tbMTpdKQorICAgICAgICAgICAgICAgIGlmIHNlbGYucG9zICsgc2tsZW4gPD0gc2VsZi5sZW4gYW5kIFwKKyAgICAgICAgICAgICAgICAgICBzZWxmLnRleHRbc2VsZi5wb3M6c2VsZi5wb3Mrc2tsZW5dID09IHNrWzE6XToKKyAgICAgICAgICAgICAgICAgICAgc2VsZi5wb3MgKz0gc2tsZW4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvay5zZXQoc2spCisKKyAgICAgICAgcmV0dXJuIHRvay5zZXQoYykKKworICAgIGRlZiBuZXh0VG9rZW4oc2VsZix0b2spOgorICAgICAgICAiIiJyZXR1cm4gdGhlIG5leHQgdG9rZW4gZnJvbSB0aGUgaW5wdXQgdGV4dC4gdGhpcyBmdW5jdGlvbgorICAgICAgICAgICByZWFsbHkgdXBkYXRlcyAndG9rJywgYW5kIGRvZXMgbm90IHJldHVybiBhIG5ldyBvbmUiIiIKKyAgICAgICAgc2VsZi5tYXJrUG9zKHRvaykKKyAgICAgICAgc2VsZi5uZXh0UmVhbFRva2VuKHRvaykKKworICAgIGRlZiBnZXRUb2tlbihzZWxmKToKKyAgICAgICAgdG9rID0gVG9rZW4oKQorICAgICAgICBzZWxmLm5leHRUb2tlbih0b2spCisgICAgICAgIGlmIGRlYnVnVG9rZW5zOgorICAgICAgICAgICAgcHJpbnQgImdldFRva2VuczogJXMiICUgcmVwcih0b2spCisgICAgICAgIHJldHVybiB0b2sKKworICAgIGRlZiB0b1Rva2VuTGlzdChzZWxmKToKKyAgICAgICAgIiIiY29udmVydCB0aGUgaW5wdXQgdGV4dCBvZiBhIENwcFRva2VuaXplciBpbnRvIGEgZGlyZWN0CisgICAgICAgICAgIGxpc3Qgb2YgdG9rZW4gb2JqZWN0cy4gdG9rRU9GIGlzIHN0cmlwcGVkIGZyb20gdGhlIHJlc3VsdCIiIgorICAgICAgICByZXN1bHQgPSBbXQorICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdG9rID0gVG9rZW4oKQorICAgICAgICAgICAgc2VsZi5uZXh0VG9rZW4odG9rKQorICAgICAgICAgICAgaWYgdG9rLmlkID09IHRva0VPRjoKKyAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgcmVzdWx0LmFwcGVuZCh0b2spCisgICAgICAgIHJldHVybiByZXN1bHQKKworY2xhc3MgQ3BwTGluZVRva2VuaXplcihDcHBUb2tlbml6ZXIpOgorICAgICIiImEgQ3BwVG9rZW5pemVyIGRlcml2ZWQgY2xhc3MgdGhhdCBhY2NlcHRzIGEgc2luZ2xlIGxpbmUgb2YgdGV4dCBhcyBpbnB1dCIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGxpbmUsbGluZW5vPTEpOgorICAgICAgICBDcHBUb2tlbml6ZXIuX19pbml0X18oc2VsZikKKyAgICAgICAgc2VsZi5saW5lID0gbGluZW5vCisgICAgICAgIHNlbGYuc2V0TGluZVRleHQobGluZSkKKworCitjbGFzcyBDcHBMaW5lc1Rva2VuaXplcihDcHBUb2tlbml6ZXIpOgorICAgICIiImEgQ3BwVG9rZW5pemVyIGRlcml2ZWQgY2xhc3MgdGhhdCBhY2NlcHRzIGEgbGlzdCBvZiB0ZXhkdCBsaW5lcyBhcyBpbnB1dC4KKyAgICAgICB0aGUgbGluZXMgbXVzdCBub3QgaGF2ZSBhIHRyYWlsaW5nIFxuIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsbGluZXM9W10sbGluZW5vPTEpOgorICAgICAgICAiIiJpbml0aWFsaXplIGEgQ3BwTGluZXNUb2tlbml6ZXIuIHlvdSBjYW4gbGF0ZXIgYWRkIGxpbmVzIHVzaW5nIGFkZExpbmVzKCkiIiIKKyAgICAgICAgQ3BwVG9rZW5pemVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYubGluZSAgPSBsaW5lbm8KKyAgICAgICAgc2VsZi5saW5lcyA9IGxpbmVzCisgICAgICAgIHNlbGYuaW5kZXggPSAwCisgICAgICAgIHNlbGYuY291bnQgPSBsZW4obGluZXMpCisKKyAgICAgICAgaWYgc2VsZi5jb3VudCA+IDA6CisgICAgICAgICAgICBzZWxmLmZpbGxMaW5lVGV4dCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVvZiA9IFRydWUKKworICAgIGRlZiBhZGRMaW5lKHNlbGYsbGluZSk6CisgICAgICAgICIiImFkZCBhIGxpbmUgdG8gYSBDcHBMaW5lc1Rva2VuaXplci4gdGhpcyBjYW4gYmUgZG9uZSBhZnRlciB0b2tlbml6YXRpb24KKyAgICAgICAgICAgaGFwcGVucyIiIgorICAgICAgICBpZiBzZWxmLmNvdW50ID09IDA6CisgICAgICAgICAgICBzZWxmLnNldExpbmVUZXh0KGxpbmUpCisgICAgICAgICAgICBzZWxmLmluZGV4ID0gMQorICAgICAgICBzZWxmLmxpbmVzLmFwcGVuZChsaW5lKQorICAgICAgICBzZWxmLmNvdW50ICs9IDEKKyAgICAgICAgc2VsZi5lb2YgICAgPSBGYWxzZQorCisgICAgZGVmIGZpbGxMaW5lVGV4dChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pbmRleCA8IHNlbGYuY291bnQ6CisgICAgICAgICAgICBzZWxmLnNldExpbmVUZXh0KHNlbGYubGluZXNbc2VsZi5pbmRleF0pCisgICAgICAgICAgICBzZWxmLmluZGV4ICs9IDEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHNlbGYuZW9mID0gVHJ1ZQorCisKK2NsYXNzIENwcEZpbGVUb2tlbml6ZXIoQ3BwVG9rZW5pemVyKToKKyAgICBkZWYgX19pbml0X18oc2VsZixmaWxlLGxpbmVubz0xKToKKyAgICAgICAgQ3BwVG9rZW5pemVyLl9faW5pdF9fKHNlbGYpCisgICAgICAgIHNlbGYuZmlsZSA9IGZpbGUKKyAgICAgICAgc2VsZi5saW5lID0gbGluZW5vCisKKyAgICBkZWYgZmlsbExpbmVUZXh0KHNlbGYpOgorICAgICAgICBsaW5lID0gc2VsZi5maWxlLnJlYWRsaW5lKCkKKyAgICAgICAgaWYgbGVuKGxpbmUpID4gMDoKKyAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICdcbic6CisgICAgICAgICAgICAgICAgbGluZSA9IGxpbmVbOi0xXQorICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gIlxyIjoKKyAgICAgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgICAgICBzZWxmLnNldExpbmVUZXh0KGxpbmUpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLmVvZiA9IFRydWUKKworIyBVbml0IHRlc3RpbmcKKyMKK2NsYXNzIENwcFRva2VuaXplclRlc3RlcjoKKyAgICAiIiJhIGNsYXNzIHVzZWQgdG8gdGVzdCBDcHBUb2tlbml6ZXIgY2xhc3NlcyIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmLHRva2VuaXplcj1Ob25lKToKKyAgICAgICAgc2VsZi50b2tlbml6ZXIgPSB0b2tlbml6ZXIKKyAgICAgICAgc2VsZi50b2tlbiAgICAgPSBUb2tlbigpCisKKyAgICBkZWYgc2V0VG9rZW5pemVyKHNlbGYsdG9rZW5pemVyKToKKyAgICAgICAgc2VsZi50b2tlbml6ZXIgPSB0b2tlbml6ZXIKKworICAgIGRlZiBleHBlY3Qoc2VsZixpZCk6CisgICAgICAgIHNlbGYudG9rZW5pemVyLm5leHRUb2tlbihzZWxmLnRva2VuKQorICAgICAgICB0b2tpZCA9IHNlbGYudG9rZW4uaWQKKyAgICAgICAgaWYgdG9raWQgPT0gaWQ6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgaWYgc2VsZi50b2tlbi52YWx1ZSA9PSBpZCBhbmQgKHRva2lkID09IHRva0lERU5UIG9yIHRva2lkID09IHRva05VTUJFUik6CisgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgIiMjIyAgQkFEIFRPS0VOOiAnJXMnIGV4cGVjdGluZyAnJXMnIiAlIChzZWxmLnRva2VuLmlkLGlkKQorCisgICAgZGVmIGV4cGVjdFRva2VuKHNlbGYsaWQsbGluZSxjb2wpOgorICAgICAgICBzZWxmLmV4cGVjdChpZCkKKyAgICAgICAgaWYgc2VsZi50b2tlbi5saW5lbm8gIT0gbGluZToKKyAgICAgICAgICAgIHJhaXNlIEJhZEV4cGVjdGVkVG9rZW4sICIjIyMgIEJBRCBMSU5FTk86IHRva2VuICclcycgZ290ICclZCcgZXhwZWN0aW5nICclZCciICUgKGlkLHNlbGYudG9rZW4ubGluZW5vLGxpbmUpCisgICAgICAgIGlmIHNlbGYudG9rZW4uY29sbm8gIT0gY29sOgorICAgICAgICAgICAgcmFpc2UgQmFkRXhwZWN0ZWRUb2tlbiwgIiMjIyAgQkFEIENPTE5POiAnJWQnIGV4cGVjdGluZyAnJWQnIiAlIChzZWxmLnRva2VuLmNvbG5vLGNvbCkKKworICAgIGRlZiBleHBlY3RUb2tlblZhbChzZWxmLGlkLHZhbHVlLGxpbmUsY29sKToKKyAgICAgICAgc2VsZi5leHBlY3RUb2tlbihpZCxsaW5lLGNvbCkKKyAgICAgICAgaWYgc2VsZi50b2tlbi52YWx1ZSAhPSB2YWx1ZToKKyAgICAgICAgICAgIHJhaXNlIEJhZEV4cGVjdGVkVG9rZW4sICIjIyMgIEJBRCBWQUxVRTogJyVzJyBleHBlY3RpbmcgJyVzJyIgJSAoc2VsZi50b2tlbi52YWx1ZSx2YWx1ZSkKKworICAgIGRlZiBleHBlY3RMaXN0KHNlbGYsbGlzdCk6CisgICAgICAgIGZvciBpdGVtIGluIGxpc3Q6CisgICAgICAgICAgICBzZWxmLmV4cGVjdChpdGVtKQorCitkZWYgdGVzdF9DcHBUb2tlbml6ZXIoKToKKyAgICBwcmludCAicnVubmluZyBDcHBUb2tlbml6ZXIgdGVzdHMiCisgICAgdGVzdGVyID0gQ3BwVG9rZW5pemVyVGVzdGVyKCkKKworICAgIHRlc3Rlci5zZXRUb2tlbml6ZXIoIENwcExpbmVUb2tlbml6ZXIoIiNhbi9leGFtcGxlICAmJiAoMDE5MjNfeHkpIikgKQorICAgIHRlc3Rlci5leHBlY3RMaXN0KCBbIiMiLCAiYW4iLCAiLyIsICJleGFtcGxlIiwgdG9rU1BBQ0UsIHRva0xPR0lDQU5ELCB0b2tTUEFDRSwgdG9rTFBBUkVOLCAiMDE5MjNfeHkiLCBcCisgICAgICAgICAgICAgICAgICAgICAgIHRva1JQQVJFTiwgdG9rTE4sIHRva0VPRl0gKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZVRva2VuaXplcigiRk9PKEJBUikgJiYgZGVmaW5lZChCQVopIikgKQorICAgIHRlc3Rlci5leHBlY3RMaXN0KCBbIkZPTyIsIHRva0xQQVJFTiwgIkJBUiIsIHRva1JQQVJFTiwgdG9rU1BBQ0UsIHRva0xPR0lDQU5ELCB0b2tTUEFDRSwKKyAgICAgICAgICAgICAgICAgICAgICAgIHRva0RFRklORUQsIHRva0xQQVJFTiwgIkJBWiIsIHRva1JQQVJFTiwgdG9rTE4sIHRva0VPRl0gKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZXNUb2tlbml6ZXIoIFsiLyoiLCAiIyIsICIqLyJdICkgKQorICAgIHRlc3Rlci5leHBlY3RMaXN0KCBbIHRva1NQQUNFLCB0b2tMTiwgdG9rRU9GIF0gKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZXNUb2tlbml6ZXIoIFsiZmlyc3QiLCAic2Vjb25kIl0gKSApCisgICAgdGVzdGVyLmV4cGVjdExpc3QoIFsgImZpcnN0IiwgdG9rTE4sICJzZWNvbmQiLCB0b2tMTiwgdG9rRU9GIF0gKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZXNUb2tlbml6ZXIoIFsiZmlyc3Qgc2Vjb25kIiwgIiAgdGhpcmQiXSApICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oICJmaXJzdCIsIDEsIDAgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggdG9rU1BBQ0UsIDEsIDUgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggInNlY29uZCIsIDEsIDYgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggdG9rTE4sIDEsIDEyICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oIHRva1NQQUNFLCAyLCAwICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW4oICJ0aGlyZCIsIDIsIDIgKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZXNUb2tlbml6ZXIoIFsgImJvbyAvKiB3aGF0IHRoZSIsICJoZWxsICovIiBdICkgKQorICAgIHRlc3Rlci5leHBlY3RMaXN0KCBbICJib28iLCB0b2tTUEFDRSBdICkKKyAgICB0ZXN0ZXIuZXhwZWN0VG9rZW5WYWwoIHRva1NQQUNFLCAiLyogd2hhdCB0aGVcbmhlbGwgKi8iLCAxLCA0ICkKKyAgICB0ZXN0ZXIuZXhwZWN0TGlzdCggWyB0b2tMTiwgdG9rRU9GIF0gKQorCisgICAgdGVzdGVyLnNldFRva2VuaXplciggQ3BwTGluZXNUb2tlbml6ZXIoIFsgImFuIFxcIiwgIiBleGFtcGxlIiBdICkgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggImFuIiwgMSwgMCApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCB0b2tTUEFDRSwgMSwgMiApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuVmFsKCB0b2tTUEFDRSwgIlxcIiwgMSwgMyApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCB0b2tTUEFDRSwgMiwgMCApCisgICAgdGVzdGVyLmV4cGVjdFRva2VuKCAiZXhhbXBsZSIsIDIsIDEgKQorICAgIHRlc3Rlci5leHBlY3RUb2tlbiggdG9rTE4sIDIsIDggKQorCisgICAgcmV0dXJuIFRydWUKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgQyBQIFAgICBFIFggUCBSIEUgUyBTIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKyMgQ3BwIGV4cHJlc3Npb25zIGFyZSBtb2RlbGVkIGJ5IHR1cGxlcyBvZiB0aGUgZm9ybSAob3AsYXJnKSBvciAob3AsYXJnMSxhcmcyKSwgZXRjLi4KKyMgb3AgaXMgYW4gIm9wZXJhdG9yIiBzdHJpbmcKKworY2xhc3MgRXhwcjoKKyAgICAiIiJhIGNsYXNzIHVzZWQgdG8gbW9kZWwgYSBDUFAgZXhwcmVzc2lvbiIiIgorICAgIG9wSW50ZWdlciAgID0gImludCIKKyAgICBvcElkZW50ICAgICA9ICJpZGVudCIKKyAgICBvcENhbGwgICAgICA9ICJjYWxsIgorICAgIG9wRGVmaW5lZCAgID0gImRlZmluZWQiCisgICAgb3BUZXN0ICAgICAgPSAiPyIKKyAgICBvcExvZ2ljTm90ICA9ICIhIgorICAgIG9wTm90ICAgICAgID0gIn4iCisgICAgb3BOZWcgICAgICAgPSAiWy1dIgorICAgIG9wVW5hcnlQbHVzID0gIlsrXSIKKyAgICBvcEFkZCA9ICIrIgorICAgIG9wU3ViID0gIi0iCisgICAgb3BNdWwgPSAiKiIKKyAgICBvcERpdiA9ICIvIgorICAgIG9wTW9kID0gIiUiCisgICAgb3BBbmQgPSAiJiIKKyAgICBvcE9yICA9ICJ8IgorICAgIG9wWG9yID0gIl4iCisgICAgb3BMb2dpY0FuZCA9ICImJiIKKyAgICBvcExvZ2ljT3IgID0gInx8IgorICAgIG9wRXF1YWwgPSAiPT0iCisgICAgb3BOb3RFcXVhbCA9ICIhPSIKKyAgICBvcExlc3MgPSAiPCIKKyAgICBvcExlc3NFcSA9ICI8PSIKKyAgICBvcEdyZWF0ZXIgPSAiPiIKKyAgICBvcEdyZWF0ZXJFcSA9ICI+PSIKKyAgICBvcFNobCA9ICI8PCIKKyAgICBvcFNociA9ICI+PiIKKworICAgIHVuYXJpZXMgID0gWyBvcExvZ2ljTm90LCBvcE5vdCwgb3BOZWcsIG9wVW5hcnlQbHVzIF0KKyAgICBiaW5hcmllcyA9IFsgb3BBZGQsIG9wU3ViLCBvcE11bCwgb3BEaXYsIG9wTW9kLCBvcEFuZCwgb3BPciwgb3BYb3IsIG9wTG9naWNBbmQsIG9wTG9naWNPciwKKyAgICAgICAgICAgICAgICAgb3BFcXVhbCwgb3BOb3RFcXVhbCwgb3BMZXNzLCBvcExlc3NFcSwgb3BHcmVhdGVyLCBvcEdyZWF0ZXJFcSBdCisKKyAgICBwcmVjZWRlbmNlcyA9IHsKKyAgICAgICAgICAgICAgICAgICAgb3BUZXN0OiAwLAorICAgICAgICAgICAgICAgICAgICBvcExvZ2ljT3I6ICAxLAorICAgICAgICAgICAgICAgICAgICBvcExvZ2ljTm90OiAyLAorICAgICAgICAgICAgICAgICAgICBvcE9yIDogMywKKyAgICAgICAgICAgICAgICAgICAgb3BYb3I6IDQsCisgICAgICAgICAgICAgICAgICAgIG9wQW5kOiA1LAorICAgICAgICAgICAgICAgICAgICBvcEVxdWFsOiA2LCBvcE5vdEVxdWFsOiA2LAorICAgICAgICAgICAgICAgICAgICBvcExlc3M6Nywgb3BMZXNzRXE6Nywgb3BHcmVhdGVyOjcsIG9wR3JlYXRlckVxOjcsCisgICAgICAgICAgICAgICAgICAgIG9wU2hsOjgsIG9wU2hyOjgsCisgICAgICAgICAgICAgICAgICAgIG9wQWRkOjksIG9wU3ViOjksCisgICAgICAgICAgICAgICAgICAgIG9wTXVsOjEwLCBvcERpdjoxMCwgb3BNb2Q6MTAsCisgICAgICAgICAgICAgICAgICAgIG9wTG9naWNOb3Q6MTEsCisgICAgICAgICAgICAgICAgICAgIG9wTm90OiAxMiwKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsb3ApOgorICAgICAgICBzZWxmLm9wID0gb3AKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoJXMpIiAlIHNlbGYub3AKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIm9wZXJhdG9yKCVzKSIgJSBzZWxmLm9wCisKKyAgICBkZWYgcHJlY2VkZW5jZShzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBwcmVjZWRlbmNlIG9mIGEgZ2l2ZW4gb3BlcmF0b3IiIiIKKyAgICAgICAgcmV0dXJuIEV4cHIucHJlY2VkZW5jZXMuZ2V0KHNlbGYub3AsIDEwMDApCisKKyAgICBkZWYgaXNVbmFyeShzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYub3AgaW4gRXhwci51bmFyaWVzCisKKyAgICBkZWYgaXNCaW5hcnkoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9wIGluIEV4cHIuYmluYXJpZXMKKworICAgIGRlZiBpc0RlZmluZWQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLm9wIGlzIG9wRGVmaW5lZAorCisgICAgZGVmIHRvSW50KHNlbGYpOgorICAgICAgICAiIiJyZXR1cm4gdGhlIGludGVnZXIgdmFsdWUgb2YgYSBnaXZlbiBleHByZXNzaW9uLiBvbmx5IHZhbGlkIGZvciBpbnRlZ2VyIGV4cHJlc3Npb25zCisgICAgICAgICAgIHdpbGwgcmV0dXJuIE5vbmUgb3RoZXJ3aXNlIiIiCisgICAgICAgIHJldHVybiBOb25lCisKK2NsYXNzIEludEV4cHIoRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsdmFsdWUpOgorICAgICAgICBFeHByLl9faW5pdF9fKHNlbGYsb3BJbnRlZ2VyKQorICAgICAgICBzZWxmLmFyZyAgID0gdmFsdWUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoaW50ICVzKSIgJSBzZWxmLmFyZworCisgICAgZGVmIF9fc3RyX18oc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmFyZworCisgICAgZGVmIHRvSW50KHNlbGYpOgorICAgICAgICBzID0gc2VsZi5hcmcgICMgc3RyaW5nIHZhbHVlCisgICAgICAgICMgZ2V0IHJpZCBvZiBVIG9yIEwgc3VmZml4ZXMKKyAgICAgICAgd2hpbGUgbGVuKHMpID4gMCBhbmQgc1stMV0gaW4gIkxVbHUiOgorICAgICAgICAgICAgcyA9IHNbOi0xXQorICAgICAgICByZXR1cm4gc3RyaW5nLmF0b2kocykKKworY2xhc3MgSWRlbnRFeHByKEV4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG5hbWUpOgorICAgICAgICBFeHByLl9faW5pdF9fKHNlbGYsb3BJZGVudCkKKyAgICAgICAgc2VsZi5uYW1lID0gbmFtZQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIihpZGVudCAlcykiICUgc2VsZi5uYW1lCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubmFtZQorCitjbGFzcyBDYWxsRXhwcihFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZixmdW5jbmFtZSxwYXJhbXMpOgorICAgICAgICBFeHByLl9faW5pdF9fKHNlbGYsb3BDYWxsKQorICAgICAgICBzZWxmLmZ1bmNuYW1lID0gZnVuY25hbWUKKyAgICAgICAgc2VsZi5wYXJhbXMgICA9IHBhcmFtcworCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAiKGNhbGwgJXMgWyIgJSBzZWxmLmZ1bmNuYW1lCisgICAgICAgIGNvbW1hICA9ICIiCisgICAgICAgIGZvciBwYXJhbSBpbiBzZWxmLnBhcmFtczoKKyAgICAgICAgICAgIHJlc3VsdCArPSAiJXMlcyIgJSAoY29tbWEsIHJlcHIocGFyYW0pKQorICAgICAgICAgICAgY29tbWEgICA9ICIsIgorICAgICAgICByZXN1bHQgKz0gIl0pIgorICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmVzdWx0ID0gIiVzKCIgJSBzZWxmLmZ1bmNuYW1lCisgICAgICAgIGNvbW1hID0gIiIKKyAgICAgICAgZm9yIHBhcmFtIGluIHNlbGYucGFyYW1zOgorICAgICAgICAgICAgcmVzdWx0ICs9ICIlcyVzIiAlIChjb21tYSwgc3RyKHBhcmFtKSkKKyAgICAgICAgICAgIGNvbW1hID0gIiwiCisKKyAgICAgICAgcmVzdWx0ICs9ICIpIgorICAgICAgICByZXR1cm4gcmVzdWx0CisKK2NsYXNzIFRlc3RFeHByKEV4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLGNvbmQsaWZ0cnVlLGlmZmFsc2UpOgorICAgICAgICBFeHByLl9faW5pdF9fKHNlbGYsb3BUZXN0KQorICAgICAgICBzZWxmLmNvbmQgICAgPSBjb25kCisgICAgICAgIHNlbGYuaWZ0cnVlICA9IGlmdHJ1ZQorICAgICAgICBzZWxmLmlmZmFsc2UgPSBpZmZhbHNlCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiAiKD86ICVzICVzICVzKSIgJSAocmVwcihzZWxmLmNvbmQpLHJlcHIoc2VsZi5pZnRydWUpLHJlcHIoc2VsZi5pZmZhbHNlKSkKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gIiglcykgPyAoJXMpIDogKCVzKSIgJSAoc2VsZi5jb25kLCBzZWxmLmlmdHJ1ZSwgc2VsZi5pZmZhbHNlKQorCitjbGFzcyBTaW5nbGVBcmdFeHByKEV4cHIpOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG9wLGFyZyk6CisgICAgICAgIEV4cHIuX19pbml0X18oc2VsZixvcCkKKyAgICAgICAgc2VsZi5hcmcgPSBhcmcKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoJXMgJXMpIiAlIChzZWxmLm9wLCByZXByKHNlbGYuYXJnKSkKKworY2xhc3MgRGVmaW5lZEV4cHIoU2luZ2xlQXJnRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsb3AsbWFjcm9uYW1lKToKKyAgICAgICAgU2luZ2xlQXJnRXhwci5fX2luaXRfXyhzZWxmLm9wRGVmaW5lZCxtYWNyb25hbWUpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICJkZWZpbmVkKCVzKSIgJSBzZWxmLmFyZworCisKK2NsYXNzIFVuYXJ5RXhwcihTaW5nbGVBcmdFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZixvcCxhcmcsb3BzdHI9Tm9uZSk6CisgICAgICAgIFNpbmdsZUFyZ0V4cHIuX19pbml0X18oc2VsZixvcCxhcmcpCisgICAgICAgIGlmIG5vdCBvcHN0cjoKKyAgICAgICAgICAgIG9wc3RyID0gb3AKKyAgICAgICAgc2VsZi5vcHN0ciA9IG9wc3RyCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgYXJnX3MgICAgID0gc3RyKHNlbGYuYXJnKQorICAgICAgICBhcmdfcHJlYyAgPSBzZWxmLmFyZy5wcmVjZWRlbmNlKCkKKyAgICAgICAgc2VsZl9wcmVjID0gc2VsZi5wcmVjZWRlbmNlKCkKKyAgICAgICAgaWYgYXJnX3ByZWMgPCBzZWxmX3ByZWM6CisgICAgICAgICAgICByZXR1cm4gIiVzKCVzKSIgJSAoc2VsZi5vcHN0cixhcmdfcykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiAiJXMlcyIgJSAoc2VsZi5vcHN0ciwgYXJnX3MpCisKK2NsYXNzIFR3b0FyZ0V4cHIoRXhwcik6CisgICAgZGVmIF9faW5pdF9fKHNlbGYsb3AsYXJnMSxhcmcyKToKKyAgICAgICAgRXhwci5fX2luaXRfXyhzZWxmLG9wKQorICAgICAgICBzZWxmLmFyZzEgPSBhcmcxCisgICAgICAgIHNlbGYuYXJnMiA9IGFyZzIKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuICIoJXMgJXMgJXMpIiAlIChzZWxmLm9wLCByZXByKHNlbGYuYXJnMSksIHJlcHIoc2VsZi5hcmcyKSkKKworY2xhc3MgQmluYXJ5RXhwcihUd29BcmdFeHByKToKKyAgICBkZWYgX19pbml0X18oc2VsZixvcCxhcmcxLGFyZzIsb3BzdHI9Tm9uZSk6CisgICAgICAgIFR3b0FyZ0V4cHIuX19pbml0X18oc2VsZixvcCxhcmcxLGFyZzIpCisgICAgICAgIGlmIG5vdCBvcHN0cjoKKyAgICAgICAgICAgIG9wc3RyID0gb3AKKyAgICAgICAgc2VsZi5vcHN0ciA9IG9wc3RyCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgYXJnMV9zICAgID0gc3RyKHNlbGYuYXJnMSkKKyAgICAgICAgYXJnMl9zICAgID0gc3RyKHNlbGYuYXJnMikKKyAgICAgICAgYXJnMV9wcmVjID0gc2VsZi5hcmcxLnByZWNlZGVuY2UoKQorICAgICAgICBhcmcyX3ByZWMgPSBzZWxmLmFyZzIucHJlY2VkZW5jZSgpCisgICAgICAgIHNlbGZfcHJlYyA9IHNlbGYucHJlY2VkZW5jZSgpCisKKyAgICAgICAgcmVzdWx0ID0gIiIKKyAgICAgICAgaWYgYXJnMV9wcmVjIDwgc2VsZl9wcmVjOgorICAgICAgICAgICAgcmVzdWx0ICs9ICIoJXMpIiAlIGFyZzFfcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IGFyZzFfcworCisgICAgICAgIHJlc3VsdCArPSAiICVzICIgJSBzZWxmLm9wc3RyCisKKyAgICAgICAgaWYgYXJnMl9wcmVjIDwgc2VsZl9wcmVjOgorICAgICAgICAgICAgcmVzdWx0ICs9ICIoJXMpIiAlIGFyZzJfcworICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ICs9IGFyZzJfcworCisgICAgICAgIHJldHVybiByZXN1bHQKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgIEMgUCBQICAgRSBYIFAgUiBFIFMgUyBJIE8gTiAgIFAgQSBSIFMgRSBSICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK2NsYXNzIEV4cHJQYXJzZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIGNvbnZlcnQgYSBsaXN0IG9mIHRva2VucyBpbnRvIGEgY3BwIEV4cHIgb2JqZWN0IiIiCisKKyAgICByZV9vY3RhbCAgID0gcmUuY29tcGlsZShyIlxzKlwoMFswLTddK1wpLioiKQorICAgIHJlX2RlY2ltYWwgPSByZS5jb21waWxlKHIiXHMqXChcZCtbdWxVTF0qXCkuKiIpCisgICAgcmVfaGV4YWRlY2ltYWwgPSByZS5jb21waWxlKHIiXHMqXCgwW3hYXVswLTlhLWZBLUZdKlwpLioiKQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsdG9rZW5zKToKKyAgICAgICAgc2VsZi50b2sgPSB0b2tlbnMKKyAgICAgICAgc2VsZi5uICAgPSBsZW4oc2VsZi50b2spCisgICAgICAgIHNlbGYuaSAgID0gMAorCisgICAgZGVmIG1hcmsoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmkKKworICAgIGRlZiByZWxlYXNlKHNlbGYscG9zKToKKyAgICAgICAgc2VsZi5pID0gcG9zCisKKyAgICBkZWYgcGVla0lkKHNlbGYpOgorICAgICAgICBpZiBzZWxmLmkgPCBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gc2VsZi50b2tbc2VsZi5pXS5pZAorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIHBlZWsoc2VsZik6CisgICAgICAgIGlmIHNlbGYuaSA8IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBzZWxmLnRva1tzZWxmLmldCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgc2tpcChzZWxmKToKKyAgICAgICAgaWYgc2VsZi5pIDwgc2VsZi5uOgorICAgICAgICAgICAgc2VsZi5pICs9IDEKKworICAgIGRlZiBza2lwT3B0aW9uYWwoc2VsZixpZCk6CisgICAgICAgIGlmIHNlbGYuaSA8IHNlbGYubiBhbmQgc2VsZi50b2tbc2VsZi5pXS5pZCA9PSBpZDoKKyAgICAgICAgICAgIHNlbGYuaSArPSAxCisKKyAgICBkZWYgc2tpcFNwYWNlcyhzZWxmKToKKyAgICAgICAgaSAgID0gc2VsZi5pCisgICAgICAgIG4gICA9IHNlbGYubgorICAgICAgICB0b2sgPSBzZWxmLnRvaworICAgICAgICB3aGlsZSBpIDwgbiBhbmQgKHRva1tpXSA9PSB0b2tTUEFDRSBvciB0b2tbaV0gPT0gdG9rTE4pOgorICAgICAgICAgICAgaSArPSAxCisgICAgICAgIHNlbGYuaSA9IGkKKworICAgICMgYWxsIHRoZSBpc1hYWCBmdW5jdGlvbnMgcmV0dXJucyBhIChleHByLG5leHRwb3MpIHBhaXIgaWYgYSBtYXRjaCBpcyBmb3VuZAorICAgICMgb3IgTm9uZSBpZiBub3QKKworICAgIGRlZiBpc19pbnRlZ2VyKHNlbGYpOgorICAgICAgICBpZCA9IHNlbGYudG9rW3NlbGYuaV0uaWQKKyAgICAgICAgYyAgPSBpZFswXQorICAgICAgICBpZiBjIDwgJzAnIG9yIGMgPiAnOSc6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIG0gPSBFeHByUGFyc2VyLnJlX29jdGFsLm1hdGNoKGlkKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmV0dXJuIChJbnRFeHByKGlkKSwgbS5lbmQoMSkpCisKKyAgICAgICAgbSA9IEV4cHJQYXJzZXIucmVfZGVjaW1hbC5tYXRjaChpZCkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHJldHVybiAoSW50RXhwcihpZCksIG0uZW5kKDEpKQorCisgICAgICAgIG0gPSBFeHByUGFyc2VyLnJlX2hleGFkZWNpbWFsKGlkKQorICAgICAgICBpZiBtOgorICAgICAgICAgICAgcmV0dXJuIChJbnRFeHByKGlkKSwgbS5lbmQoMSkpCisKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpc19kZWZpbmVkKHNlbGYpOgorICAgICAgICBpZCA9IHNlbGYudG9rW3NlbGYuaV0uaWQKKyAgICAgICAgaWYgaWQgIT0gImRlZmluZWQiOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwb3MgPSBzZWxmLm1hcmsoKQorCisgICAgICAgIHVzZV9wYXJlbiA9IDAKKyAgICAgICAgaWYgc2VsZi5wZWVrSWQoKSA9PSB0b2tMUEFSRU46CisgICAgICAgICAgICBzZWxmLnNraXAoKQorICAgICAgICAgICAgdXNlX3BhcmVuID0gMQorCisgICAgICAgIGlmIHNlbGYucGVla0lkKCkgIT0gdG9rSURFTlQ6CisgICAgICAgICAgICBzZWxmLnRocm93KCBCYWRFeHBlY3RlZFRva2VuLCAiaWRlbnRpZmllciBleHBlY3RlZCIpCisKKyAgICAgICAgbWFjcm9uYW1lID0gc2VsZi5wZWVrKCkudmFsdWUKKyAgICAgICAgc2VsZi5za2lwKCkKKyAgICAgICAgaWYgdXNlX3BhcmVuOgorICAgICAgICAgICAgc2VsZi5za2lwU3BhY2VzKCkKKyAgICAgICAgICAgIGlmIHNlbGYucGVla0lkKCkgIT0gdG9rUlBBUkVOOgorICAgICAgICAgICAgICAgIHNlbGYudGhyb3coIEJhZEV4cGVjdGVkVG9rZW4sICJtaXNzaW5nIHJpZ2h0LXBhcmVuIGFmdGVyICdkZWZpbmVkJyBkaXJlY3RpdmUiKQorICAgICAgICAgICAgc2VsZi5za2lwKCkKKworICAgICAgICBpID0gc2VsZi5pCisgICAgICAgIHJldHVybiAoRGVmaW5lZEV4cHIobWFjcm9uYW1lKSxpKzEpCisKKyAgICBkZWYgaXNfY2FsbF9vcl9pZGVudChzZWxmKToKKyAgICAgICAgcGFzcworCisgICAgZGVmIHBhcnNlKHNlbGYsIGkpOgorICAgICAgICByZXR1cm4gTm9uZQorCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgQyBQIFAgICBFIFggUCBSIEUgUyBTIEkgTyBOIFMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIENwcEludmFsaWRFeHByZXNzaW9uKEV4Y2VwdGlvbik6CisgICAgIiIiYW4gZXhjZXB0aW9uIHJhaXNlZCB3aGVuIGFuIGludmFsaWQvdW5zdXBwb3J0ZWQgY3BwIGV4cHJlc3Npb24gaXMgZGV0ZWN0ZWQiIiIKKyAgICBwYXNzCisKK2NsYXNzIENwcEV4cHI6CisgICAgIiIiYSBjbGFzcyB0aGF0IG1vZGVscyB0aGUgY29uZGl0aW9uIG9mICNpZiBkaXJlY3RpdmVzIGludG8KKyAgICAgICAgYW4gZXhwcmVzc2lvbiB0cmVlLiBlYWNoIG5vZGUgaW4gdGhlIHRyZWUgaXMgb2YgdGhlIGZvcm0gKG9wLGFyZykgb3IgKG9wLGFyZzEsYXJnMikKKyAgICAgICAgd2hlcmUgIm9wIiBpcyBhIHN0cmluZyBkZXNjcmliaW5nIHRoZSBvcGVyYXRpb24iIiIKKworICAgIHVuYXJpZXMgID0gWyAiISIsICJ+IiBdCisgICAgYmluYXJpZXMgPSBbICIrIiwgIi0iLCAiPCIsICI8PSIsICI+PSIsICI+IiwgIiYmIiwgInx8IiwgIioiLCAiLyIsICIlIiwgIiYiLCAifCIsICJeIiwgIjw8IiwgIj4+IiwgIj09IiwgIiE9IiBdCisgICAgcHJlY2VkZW5jZXMgPSB7ICJ8fCI6IDEsCisgICAgICAgICAgICAgICAgICAgICImJiI6IDIsCisgICAgICAgICAgICAgICAgICAgICAifCI6IDMsCisgICAgICAgICAgICAgICAgICAgICAiXiI6IDQsCisgICAgICAgICAgICAgICAgICAgICAiJiI6IDUsCisgICAgICAgICAgICAgICAgICAgICAiPT0iOjYsICIhPSI6NiwKKyAgICAgICAgICAgICAgICAgICAgICI8Ijo3LCAiPD0iOjcsICI+Ijo3LCAiPj0iOjcsCisgICAgICAgICAgICAgICAgICAgICAiPDwiOjgsICI+PiI6OCwKKyAgICAgICAgICAgICAgICAgICAgICIrIjo5LCAiLSI6OSwKKyAgICAgICAgICAgICAgICAgICAgICIqIjoxMCwgIi8iOjEwLCAiJSI6MTAsCisgICAgICAgICAgICAgICAgICAgICAiISI6MTEsICJ+IjoxMgorICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgZGVmIF9faW5pdF9fKHNlbGYsIHRva2Vucyk6CisgICAgICAgICIiImluaXRpYWxpemUgYSBDcHBFeHByLiAndG9rZW5zJyBtdXN0IGJlIGEgQ3BwVG9rZW4gbGlzdCIiIgorICAgICAgICBzZWxmLnRvayAgPSB0b2tlbnMKKyAgICAgICAgc2VsZi5uICAgID0gbGVuKHRva2VucykKKyAgICAgICAgaWYgZGVidWdDcHBFeHByOgorICAgICAgICAgICAgcHJpbnQgIkNwcEV4cHI6IHRyeWluZyB0byBwYXJzZSAlcyIgJSByZXByKHRva2VucykKKyAgICAgICAgZXhwciAgICAgID0gc2VsZi5pc19leHByKDApCisgICAgICAgIGlmIGRlYnVnQ3BwRXhwcjoKKyAgICAgICAgICAgIHByaW50ICJDcHBFeHByOiBnb3QgIiArIHJlcHIoZXhwcikKKyAgICAgICAgc2VsZi5leHByID0gZXhwclswXQorCisgICAgcmVfY3BwX2NvbnN0YW50ID0gcmUuY29tcGlsZShyIigoXGR8XHd8XykrKSIpCisKKyAgICBkZWYgdGhyb3coc2VsZixleGNlcHRpb24saSxtc2cpOgorICAgICAgICBpZiBpIDwgc2VsZi5uOgorICAgICAgICAgICAgdG9rID0gc2VsZi50b2tbaV0KKyAgICAgICAgICAgIHByaW50ICIlZDolZDogJXMiICUgKHRvay5saW5lbm8sdG9rLmNvbG5vLG1zZykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHByaW50ICJFT0Y6ICVzIiAlIG1zZworICAgICAgICByYWlzZSBleGNlcHRpb24KKworICAgIGRlZiBza2lwX3NwYWNlcyhzZWxmLGkpOgorICAgICAgICAiIiJza2lwIHNwYWNlcyBpbiBpbnB1dCB0b2tlbiBsaXN0IiIiCisgICAgICAgIHdoaWxlIGkgPCBzZWxmLm46CisgICAgICAgICAgICB0ID0gc2VsZi50b2tbaV0KKyAgICAgICAgICAgIGlmIHQuaWQgIT0gdG9rU1BBQ0UgYW5kIHQuaWQgIT0gdG9rTE46CisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGkgKz0gMQorICAgICAgICByZXR1cm4gaQorCisgICAgZGVmIGV4cGVjdElkKHNlbGYsaSxpZCk6CisgICAgICAgICIiImNoZWNrIHRoYXQgYSBnaXZlbiB0b2tlbiBpZCBpcyBhdCB0aGUgY3VycmVudCBwb3NpdGlvbiwgdGhlbiBza2lwIG92ZXIgaXQiIiIKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm4gb3Igc2VsZi50b2tbaV0uaWQgIT0gaWQ6CisgICAgICAgICAgICBzZWxmLnRocm93KEJhZEV4cGVjdGVkVG9rZW4saSwiIyMjIGV4cGVjdGluZyAnJXMnIGluIGV4cHJlc3Npb24sIGdvdCAnJXMnIiAlIChpZCwgc2VsZi50b2tbaV0uaWQpKQorICAgICAgICByZXR1cm4gaSsxCisKKyAgICBkZWYgZXhwZWN0SWRlbnQoc2VsZixpKToKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm4gb3Igc2VsZi50b2tbaV0uaWQgIT0gdG9rSURFTlQ6CisgICAgICAgICAgICBzZWxmLnRocm93KEJhZEV4cGVjdGVkVG9rZW4saSwiIyMjIGV4cGVjdGluZyBpZGVudGlmaWVyIGluIGV4cHJlc3Npb24sIGdvdCAnJXMnIiAlIChpZCwgc2VsZi50b2tbaV0uaWQpKQorICAgICAgICByZXR1cm4gaSsxCisKKyAgICAjIHRoZSBpc194eHh4eCBmdW5jdGlvbiByZXR1cm5zIGVpdGhlciBOb25lIG9yIGEgcGFpciAoZSxuZXh0cG9zKQorICAgICMgd2hlcmUgJ2UnIGlzIGFuIGV4cHJlc3Npb24gdHVwbGUgKGUuZy4gKG9wLGFyZykpIGFuZCAnbmV4dHBvcycgaXMKKyAgICAjIHRoZSBjb3JyZXNwb25kaW5nIG5leHQgcG9zaXRpb24gaW4gdGhlIGlucHV0IHRva2VuIGxpc3QKKyAgICAjCisKKyAgICBkZWYgaXNfZGVjaW1hbChzZWxmLGkpOgorICAgICAgICB2ID0gc2VsZi50b2tbaV0udmFsdWVbOl0KKyAgICAgICAgd2hpbGUgbGVuKHYpID4gMCBhbmQgdlstMV0gaW4gIlVMdWwiOgorICAgICAgICAgICAgdiA9IHZbOi0xXQorICAgICAgICBmb3IgZGlnaXQgaW4gdjoKKyAgICAgICAgICAgIGlmIG5vdCBkaWdpdC5pc2RpZ2l0KCk6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjIGZvciBhbiBpbnRlZ2VyIGV4cHJlc3Npb24gdHVwbGUsIHRoZSBhcmd1bWVudAorICAgICAgICAjIGlzIHNpbXBseSB0aGUgdmFsdWUgYXMgYW4gaW50ZWdlcgorICAgICAgICB2YWwgPSBzdHJpbmcuYXRvaSh2KQorICAgICAgICByZXR1cm4gKCJpbnQiLCB2YWwpLCBpKzEKKworICAgIGRlZiBpc19oZXhhZGVjaW1hbChzZWxmLGkpOgorICAgICAgICB2ID0gc2VsZi50b2tbaV0udmFsdWVbOl0KKyAgICAgICAgd2hpbGUgbGVuKHYpID4gMCBhbmQgdlstMV0gaW4gIlVMdWwiOgorICAgICAgICAgICAgdiA9IHZbOi0xXQorICAgICAgICBpZiBsZW4odikgPiAyIGFuZCAodlswOjJdID09ICIweCIgb3IgdlswOjJdID09ICIwWCIpOgorICAgICAgICAgICAgZm9yIGRpZ2l0IGluIHZbMjpdOgorICAgICAgICAgICAgICAgIGlmIG5vdCBkaWdpdCBpbiAiMDEyMzQ1Njc4OWFiY2RlZkFCQ0RFRiI6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgICAgICMgZm9yIGFuIGhleCBleHByZXNzaW9uIHR1cGxlLCB0aGUgYXJndW1lbnQKKyAgICAgICAgICAgICMgaXMgdGhlIHZhbHVlIGFzIGFuIGludGVnZXIKKyAgICAgICAgICAgIHZhbCA9IGludCh2WzI6XSwgMTYpCisgICAgICAgICAgICByZXR1cm4gKCJoZXgiLCB2YWwpLCBpKzEKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzX2ludGVnZXIoc2VsZixpKToKKyAgICAgICAgaWYgc2VsZi50b2tbaV0uaWQgIT0gdG9rTlVNQkVSOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBjID0gc2VsZi5pc19kZWNpbWFsKGkpCisgICAgICAgIGlmIGM6IHJldHVybiBjCisKKyAgICAgICAgYyA9IHNlbGYuaXNfaGV4YWRlY2ltYWwoaSkKKyAgICAgICAgaWYgYzogcmV0dXJuIGMKKworICAgICAgICByZXR1cm4gTm9uZQorCisgICAgZGVmIGlzX251bWJlcihzZWxmLGkpOgorICAgICAgICB0ID0gc2VsZi50b2tbaV0KKyAgICAgICAgaWYgdC5pZCA9PSB0b2tNSU5VUyBhbmQgaSsxIDwgc2VsZi5uOgorICAgICAgICAgICAgYyA9IHNlbGYuaXNfaW50ZWdlcihpKzEpCisgICAgICAgICAgICBpZiBjOgorICAgICAgICAgICAgICAgIGUsIGkyID0gYworICAgICAgICAgICAgICAgIG9wLCB2YWwgID0gZQorICAgICAgICAgICAgICAgIHJldHVybiAob3AsIC12YWwpLCBpMgorICAgICAgICBpZiB0LmlkID09IHRva1BMVVMgYW5kIGkrMSA8IHNlbGYubjoKKyAgICAgICAgICAgIGMgPSBzZWxmLmlzX2ludGVnZXIoaSsxKQorICAgICAgICAgICAgaWYgYzogcmV0dXJuIGMKKworICAgICAgICByZXR1cm4gc2VsZi5pc19pbnRlZ2VyKGkpCisKKworICAgIGRlZiBpc19hbG51bShzZWxmLGkpOgorICAgICAgICAiIiJ0ZXN0IHdldGhlciBhIGdpdmVuIHRva2VuIGlzIGFscGhhLW51bWVyaWMiIiIKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICB0ID0gc2VsZi50b2tbaV0KKyAgICAgICAgbSA9IENwcEV4cHIucmVfY3BwX2NvbnN0YW50Lm1hdGNoKHQuaWQpCisgICAgICAgIGlmIG06CisgICAgICAgICAgICAjcHJpbnQgIi4uLiBhbG51bSAnJXMnIiAlIG0uZ3JvdXAoMSkKKyAgICAgICAgICAgIHIgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICByZXR1cm4gKCJpZGVudCIsIHIpLCBpKzEKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgIGRlZiBpc19kZWZpbmVkKHNlbGYsaSk6CisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBpZiB0LmlkICE9IHRva0RFRklORUQ6CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICMgd2UgaGF2ZSB0aGUgZGVmaW5lZCBrZXl3b3JkLCBjaGVjayB0aGUgcmVzdAorICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKzEpCisgICAgICAgIHVzZV9wYXJlbnMgPSAwCisgICAgICAgIGlmIGkgPCBzZWxmLm4gYW5kIHNlbGYudG9rW2ldLmlkID09IHRva0xQQVJFTjoKKyAgICAgICAgICAgIHVzZV9wYXJlbnMgPSAxCisgICAgICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKzEpCisKKyAgICAgICAgaWYgaSA+PSBzZWxmLm46CisgICAgICAgICAgICBzZWxmLnRocm93KENwcENvbnN0YW50RXhwZWN0ZWQsaSwiIyMjICdkZWZpbmVkJyBtdXN0IGJlIGZvbGxvd2VkICBieSBtYWNybyBuYW1lIG9yIGxlZnQgcGFyZW4iKQorCisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBpZiB0LmlkICE9IHRva0lERU5UOgorICAgICAgICAgICAgc2VsZi50aHJvdyhDcHBDb25zdGFudEV4cGVjdGVkLGksIiMjIyAnZGVmaW5lZCcgbXVzdCBiZSBmb2xsb3dlZCBieSBtYWNybyBuYW1lIikKKworICAgICAgICBpICs9IDEKKyAgICAgICAgaWYgdXNlX3BhcmVuczoKKyAgICAgICAgICAgIGkgPSBzZWxmLmV4cGVjdElkKGksdG9rUlBBUkVOKQorCisgICAgICAgIHJldHVybiAoImRlZmluZWQiLHQudmFsdWUpLCBpCisKKworICAgIGRlZiBpc19jYWxsX29yX2lkZW50KHNlbGYsaSk6CisgICAgICAgIGkgPSBzZWxmLnNraXBfc3BhY2VzKGkpCisgICAgICAgIGlmIGkgPj0gc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICB0ID0gc2VsZi50b2tbaV0KKyAgICAgICAgaWYgdC5pZCAhPSB0b2tJREVOVDoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgbmFtZSA9IHQudmFsdWUKKworICAgICAgICBpID0gc2VsZi5za2lwX3NwYWNlcyhpKzEpCisgICAgICAgIGlmIGkgPj0gc2VsZi5uIG9yIHNlbGYudG9rW2ldLmlkICE9IHRva0xQQVJFTjoKKyAgICAgICAgICAgIHJldHVybiAoImlkZW50IiwgbmFtZSksIGkKKworICAgICAgICBwYXJhbXMgICAgPSBbXQorICAgICAgICBkZXB0aCAgICAgPSAxCisgICAgICAgIGkgKz0gMQorICAgICAgICBqICA9IGkKKyAgICAgICAgd2hpbGUgaSA8IHNlbGYubjoKKyAgICAgICAgICAgIGlkID0gc2VsZi50b2tbaV0uaWQKKyAgICAgICAgICAgIGlmIGlkID09IHRva0xQQVJFTjoKKyAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisgICAgICAgICAgICBlbGlmIGRlcHRoID09IDEgYW5kIChpZCA9PSB0b2tDT01NQSBvciBpZCA9PSB0b2tSUEFSRU4pOgorICAgICAgICAgICAgICAgIHdoaWxlIGogPCBpIGFuZCBzZWxmLnRva1tqXS5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgayA9IGkKKyAgICAgICAgICAgICAgICB3aGlsZSBrID4gaiBhbmQgc2VsZi50b2tbay0xXS5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgayAtPSAxCisgICAgICAgICAgICAgICAgcGFyYW0gPSBzZWxmLnRva1tqOmtdCisgICAgICAgICAgICAgICAgcGFyYW1zLmFwcGVuZCggcGFyYW0gKQorICAgICAgICAgICAgICAgIGlmIGlkID09IHRva1JQQVJFTjoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICBqID0gaSsxCisgICAgICAgICAgICBlbGlmIGlkID09IHRva1JQQVJFTjoKKyAgICAgICAgICAgICAgICBkZXB0aCAtPSAxCisgICAgICAgICAgICBpICs9IDEKKworICAgICAgICBpZiBpID49IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcmV0dXJuICgiY2FsbCIsIChuYW1lLCBwYXJhbXMpKSwgaSsxCisKKyAgICBkZWYgaXNfdG9rZW4oc2VsZixpLHRva2VuKToKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm4gb3Igc2VsZi50b2tbaV0uaWQgIT0gdG9rZW46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorICAgICAgICByZXR1cm4gdG9rZW4sIGkrMQorCisKKyAgICBkZWYgaXNfdmFsdWUoc2VsZixpKToKKyAgICAgICAgdCA9IHNlbGYudG9rW2ldCisgICAgICAgIGlmIHQuaWQgPT0gdG9rU1RSSU5HOgorICAgICAgICAgICAgcmV0dXJuICgic3RyaW5nIiwgdC52YWx1ZSksIGkrMQorCisgICAgICAgIGMgPSBzZWxmLmlzX251bWJlcihpKQorICAgICAgICBpZiBjOiByZXR1cm4gYworCisgICAgICAgIGMgPSBzZWxmLmlzX2RlZmluZWQoaSkKKyAgICAgICAgaWYgYzogcmV0dXJuIGMKKworICAgICAgICBjID0gc2VsZi5pc19jYWxsX29yX2lkZW50KGkpCisgICAgICAgIGlmIGM6IHJldHVybiBjCisKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm4gb3Igc2VsZi50b2tbaV0uaWQgIT0gdG9rTFBBUkVOOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBwb3Bjb3VudCA9IDEKKyAgICAgICAgaTIgICAgICAgPSBpKzEKKyAgICAgICAgd2hpbGUgaTIgPCBzZWxmLm46CisgICAgICAgICAgICB0ID0gc2VsZi50b2tbaTJdCisgICAgICAgICAgICBpZiB0LmlkID09IHRva0xQQVJFTjoKKyAgICAgICAgICAgICAgICBwb3Bjb3VudCArPSAxCisgICAgICAgICAgICBlbGlmIHQuaWQgPT0gdG9rUlBBUkVOOgorICAgICAgICAgICAgICAgIHBvcGNvdW50IC09IDEKKyAgICAgICAgICAgICAgICBpZiBwb3Bjb3VudCA9PSAwOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgaTIgKz0gMQorCisgICAgICAgIGlmIHBvcGNvdW50ICE9IDA6CisgICAgICAgICAgICBzZWxmLnRocm93KENwcEludmFsaWRFeHByZXNzaW9uLCBpLCAiZXhwcmVzc2lvbiBtaXNzaW5nIGNsb3NpbmcgcGFyZW50aGVzaXMiKQorCisgICAgICAgIGlmIGRlYnVnQ3BwRXhwcjoKKyAgICAgICAgICAgIHByaW50ICJDcHBFeHByOiB0cnlpbmcgdG8gcGFyc2Ugc3ViLWV4cHJlc3Npb24gJXMiICUgcmVwcihzZWxmLnRva1tpKzE6aTJdKQorICAgICAgICBvbGRjb3VudCAgID0gc2VsZi5uCisgICAgICAgIHNlbGYubiAgICAgPSBpMgorICAgICAgICBjICAgICAgICAgID0gc2VsZi5pc19leHByKGkrMSkKKyAgICAgICAgc2VsZi5uICAgICA9IG9sZGNvdW50CisgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgc2VsZi50aHJvdyhDcHBJbnZhbGlkRXhwcmVzc2lvbiwgaSwgImludmFsaWQgZXhwcmVzc2lvbiB3aXRoaW4gcGFyZW50aGVzaXMiKQorCisgICAgICAgIGUsIGkgPSBjCisgICAgICAgIHJldHVybiBlLCBpMisxCisKKyAgICBkZWYgaXNfdW5hcnkoc2VsZixpKToKKyAgICAgICAgaSA9IHNlbGYuc2tpcF9zcGFjZXMoaSkKKyAgICAgICAgaWYgaSA+PSBzZWxmLm46CisgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgIHQgPSBzZWxmLnRva1tpXQorICAgICAgICBpZiB0LmlkIGluIENwcEV4cHIudW5hcmllczoKKyAgICAgICAgICAgIGMgPSBzZWxmLmlzX3VuYXJ5KGkrMSkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIHNlbGYudGhyb3coQ3BwSW52YWxpZEV4cHJlc3Npb24sIGksICIlcyBvcGVyYXRvciBtdXN0IGJlIGZvbGxvd2VkIGJ5IHZhbHVlIiAlIHQuaWQpCisgICAgICAgICAgICBlLCBpID0gYworICAgICAgICAgICAgcmV0dXJuICh0LmlkLCBlKSwgaQorCisgICAgICAgIHJldHVybiBzZWxmLmlzX3ZhbHVlKGkpCisKKyAgICBkZWYgaXNfYmluYXJ5KHNlbGYsaSk6CisgICAgICAgIGkgPSBzZWxmLnNraXBfc3BhY2VzKGkpCisgICAgICAgIGlmIGkgPj0gc2VsZi5uOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICBjID0gc2VsZi5pc191bmFyeShpKQorICAgICAgICBpZiBub3QgYzoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgZTEsIGkyID0gYworICAgICAgICBpMiA9IHNlbGYuc2tpcF9zcGFjZXMoaTIpCisgICAgICAgIGlmIGkyID49IHNlbGYubjoKKyAgICAgICAgICAgIHJldHVybiBjCisKKyAgICAgICAgdCA9IHNlbGYudG9rW2kyXQorICAgICAgICBpZiB0LmlkIGluIENwcEV4cHIuYmluYXJpZXM6CisgICAgICAgICAgICBjID0gc2VsZi5pc19iaW5hcnkoaTIrMSkKKyAgICAgICAgICAgIGlmIG5vdCBjOgorICAgICAgICAgICAgICAgIHNlbGYudGhyb3coQ3BwSW52YWxpZEV4cHJlc3Npb24sIGksIiMjIyAlcyBvcGVyYXRvciBtdXN0IGJlIGZvbGxvd2VkIGJ5IHZhbHVlIiAlIHQuaWQgKQorICAgICAgICAgICAgZTIsIGkzID0gYworICAgICAgICAgICAgcmV0dXJuICh0LmlkLCBlMSwgZTIpLCBpMworCisgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgaXNfZXhwcihzZWxmLGkpOgorICAgICAgICByZXR1cm4gc2VsZi5pc19iaW5hcnkoaSkKKworICAgIGRlZiBkdW1wX25vZGUoc2VsZixlKToKKyAgICAgICAgb3AgPSBlWzBdCisgICAgICAgIGxpbmUgPSAiKCIgKyBvcAorICAgICAgICBpZiBvcCA9PSAiaW50IjoKKyAgICAgICAgICAgIGxpbmUgKz0gIiAlZCkiICUgZVsxXQorICAgICAgICBlbGlmIG9wID09ICJoZXgiOgorICAgICAgICAgICAgbGluZSArPSAiIDB4JXgpIiAlIGVbMV0KKyAgICAgICAgZWxpZiBvcCA9PSAiaWRlbnQiOgorICAgICAgICAgICAgbGluZSArPSAiICVzKSIgJSBlWzFdCisgICAgICAgIGVsaWYgb3AgPT0gImRlZmluZWQiOgorICAgICAgICAgICAgbGluZSArPSAiICVzKSIgJSBlWzFdCisgICAgICAgIGVsaWYgb3AgPT0gImNhbGwiOgorICAgICAgICAgICAgYXJnID0gZVsxXQorICAgICAgICAgICAgbGluZSArPSAiICVzIFsiICUgYXJnWzBdCisgICAgICAgICAgICBwcmVmaXggPSAiIgorICAgICAgICAgICAgZm9yIHBhcmFtIGluIGFyZ1sxXToKKyAgICAgICAgICAgICAgICBwYXIgPSAiIgorICAgICAgICAgICAgICAgIGZvciB0b2sgaW4gcGFyYW06CisgICAgICAgICAgICAgICAgICAgIHBhciArPSBzdHIodG9rKQorICAgICAgICAgICAgICAgIGxpbmUgKz0gIiVzJXMiICUgKHByZWZpeCwgcGFyKQorICAgICAgICAgICAgICAgIHByZWZpeCA9ICIsIgorICAgICAgICAgICAgbGluZSArPSAiXSkiCisgICAgICAgIGVsaWYgb3AgaW4gQ3BwRXhwci51bmFyaWVzOgorICAgICAgICAgICAgbGluZSArPSAiICVzKSIgJSBzZWxmLmR1bXBfbm9kZShlWzFdKQorICAgICAgICBlbGlmIG9wIGluIENwcEV4cHIuYmluYXJpZXM6CisgICAgICAgICAgICBsaW5lICs9ICIgJXMgJXMpIiAlIChzZWxmLmR1bXBfbm9kZShlWzFdKSwgc2VsZi5kdW1wX25vZGUoZVsyXSkpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBsaW5lICs9ICIgPyVzKSIgJSByZXByKGVbMV0pCisKKyAgICAgICAgcmV0dXJuIGxpbmUKKworICAgIGRlZiBfX3JlcHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZHVtcF9ub2RlKHNlbGYuZXhwcikKKworICAgIGRlZiBzb3VyY2Vfbm9kZShzZWxmLGUpOgorICAgICAgICBvcCA9IGVbMF0KKyAgICAgICAgaWYgb3AgPT0gImludCI6CisgICAgICAgICAgICByZXR1cm4gIiVkIiAlIGVbMV0KKyAgICAgICAgaWYgb3AgPT0gImhleCI6CisgICAgICAgICAgICByZXR1cm4gIjB4JXgiICUgZVsxXQorICAgICAgICBpZiBvcCA9PSAiaWRlbnQiOgorICAgICAgICAgICAgIyBYWFg6IHNob3VsZCB0cnkgdG8gZXhwYW5kCisgICAgICAgICAgICByZXR1cm4gZVsxXQorICAgICAgICBpZiBvcCA9PSAiZGVmaW5lZCI6CisgICAgICAgICAgICByZXR1cm4gImRlZmluZWQoJXMpIiAlIGVbMV0KKworICAgICAgICBwcmVjID0gQ3BwRXhwci5wcmVjZWRlbmNlcy5nZXQob3AsMTAwMCkKKyAgICAgICAgYXJnICA9IGVbMV0KKyAgICAgICAgaWYgb3AgaW4gQ3BwRXhwci51bmFyaWVzOgorICAgICAgICAgICAgYXJnX3NyYyA9IHNlbGYuc291cmNlX25vZGUoYXJnKQorICAgICAgICAgICAgYXJnX29wICA9IGFyZ1swXQorICAgICAgICAgICAgYXJnX3ByZWMgPSBDcHBFeHByLnByZWNlZGVuY2VzLmdldChhcmdbMF0sMTAwMCkKKyAgICAgICAgICAgIGlmIGFyZ19wcmVjIDwgcHJlYzoKKyAgICAgICAgICAgICAgICByZXR1cm4gIiEoIiArIGFyZ19zcmMgKyAiKSIKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmV0dXJuICIhIiArIGFyZ19zcmMKKyAgICAgICAgaWYgb3AgaW4gQ3BwRXhwci5iaW5hcmllczoKKyAgICAgICAgICAgIGFyZzIgICAgID0gZVsyXQorICAgICAgICAgICAgYXJnMV9vcCAgPSBhcmdbMF0KKyAgICAgICAgICAgIGFyZzJfb3AgID0gYXJnMlswXQorICAgICAgICAgICAgYXJnMV9zcmMgPSBzZWxmLnNvdXJjZV9ub2RlKGFyZykKKyAgICAgICAgICAgIGFyZzJfc3JjID0gc2VsZi5zb3VyY2Vfbm9kZShhcmcyKQorICAgICAgICAgICAgaWYgQ3BwRXhwci5wcmVjZWRlbmNlcy5nZXQoYXJnMV9vcCwxMDAwKSA8IHByZWM6CisgICAgICAgICAgICAgICAgYXJnMV9zcmMgPSAiKCVzKSIgJSBhcmcxX3NyYworICAgICAgICAgICAgaWYgQ3BwRXhwci5wcmVjZWRlbmNlcy5nZXQoYXJnMl9vcCwxMDAwKSA8IHByZWM6CisgICAgICAgICAgICAgICAgYXJnMl9zcmMgPSAiKCVzKSIgJSBhcmcyX3NyYworCisgICAgICAgICAgICByZXR1cm4gIiVzICVzICVzIiAlIChhcmcxX3NyYywgb3AsIGFyZzJfc3JjKQorICAgICAgICByZXR1cm4gIj8/PyIKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5zb3VyY2Vfbm9kZShzZWxmLmV4cHIpCisKKyAgICBkZWYgaW50X25vZGUoc2VsZixlKToKKyAgICAgICAgaWYgZVswXSA9PSAiaW50IjoKKyAgICAgICAgICAgIHJldHVybiBlWzFdCisgICAgICAgIGVsaWYgZVsxXSA9PSAiaGV4IjoKKyAgICAgICAgICAgIHJldHVybiBpbnQoZVsxXSwxNikKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgdG9JbnQoc2VsZik6CisgICAgICAgIHJldHVybiBzZWxmLmludF9ub2RlKHNlbGYuZXhwcikKKworICAgIGRlZiBvcHRpbWl6ZV9ub2RlKHNlbGYsZSxtYWNyb3M9e30pOgorICAgICAgICBvcCA9IGVbMF0KKyAgICAgICAgaWYgb3AgPT0gImRlZmluZWQiOgorICAgICAgICAgICAgbmFtZSA9IGVbMV0KKyAgICAgICAgICAgIGlmIG1hY3Jvcy5oYXNfa2V5KG5hbWUpOgorICAgICAgICAgICAgICAgIGlmIG1hY3Jvc1tuYW1lXSA9PSBrQ3BwVW5kZWZpbmVkTWFjcm86CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDApCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiaW50IiwgMSkKKworICAgICAgICAgICAgaWYga2VybmVsX3JlbW92ZV9jb25maWdfbWFjcm9zIGFuZCBuYW1lLnN0YXJ0c3dpdGgoIkNPTkZJR18iKToKKyAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAwKQorCisgICAgICAgIGVsaWYgb3AgPT0gIiEiOgorICAgICAgICAgICAgb3AsIHYgPSBlCisgICAgICAgICAgICB2ID0gc2VsZi5vcHRpbWl6ZV9ub2RlKHYsIG1hY3JvcykKKyAgICAgICAgICAgIGlmIHZbMF0gPT0gImludCI6CisgICAgICAgICAgICAgICAgaWYgdlsxXSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAxKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDApCisKKyAgICAgICAgZWxpZiBvcCA9PSAiJiYiOgorICAgICAgICAgICAgb3AsIGwsIHIgPSBlCisgICAgICAgICAgICBsICA9IHNlbGYub3B0aW1pemVfbm9kZShsLCBtYWNyb3MpCisgICAgICAgICAgICByICA9IHNlbGYub3B0aW1pemVfbm9kZShyLCBtYWNyb3MpCisgICAgICAgICAgICBsaSA9IHNlbGYuaW50X25vZGUobCkKKyAgICAgICAgICAgIHJpID0gc2VsZi5pbnRfbm9kZShyKQorICAgICAgICAgICAgaWYgbGkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAwKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiByCisKKyAgICAgICAgZWxpZiBvcCA9PSAifHwiOgorICAgICAgICAgICAgb3AsIGwsIHIgPSBlCisgICAgICAgICAgICBsICA9IHNlbGYub3B0aW1pemVfbm9kZShsLCBtYWNyb3MpCisgICAgICAgICAgICByICA9IHNlbGYub3B0aW1pemVfbm9kZShyLCBtYWNyb3MpCisgICAgICAgICAgICBsaSA9IHNlbGYuaW50X25vZGUobCkKKyAgICAgICAgICAgIHJpID0gc2VsZi5pbnRfbm9kZShyKQorICAgICAgICAgICAgaWYgbGkgIT0gTm9uZToKKyAgICAgICAgICAgICAgICBpZiBsaSA9PSAwOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gcgorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoImludCIsIDEpCisgICAgICAgICAgICBlbGlmIHJpICE9IE5vbmU6CisgICAgICAgICAgICAgICAgaWYgcmkgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGwKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAxKQorICAgICAgICByZXR1cm4gZQorCisgICAgZGVmIG9wdGltaXplKHNlbGYsbWFjcm9zPXt9KToKKyAgICAgICAgc2VsZi5leHByID0gc2VsZi5vcHRpbWl6ZV9ub2RlKHNlbGYuZXhwcixtYWNyb3MpCisKKyAgICBkZWYgcmVtb3ZlUHJlZml4ZWROb2RlKHNlbGYsZSxwcmVmaXgsbmFtZXMpOgorICAgICAgICBvcCA9IGVbMF0KKyAgICAgICAgaWYgb3AgPT0gImRlZmluZWQiOgorICAgICAgICAgICAgbmFtZSA9IGVbMV0KKyAgICAgICAgICAgIGlmIG5hbWUuc3RhcnRzd2l0aChwcmVmaXgpOgorICAgICAgICAgICAgICAgIGlmIG5hbWVzLmhhc19rZXlbbmFtZV0gYW5kIG5hbWVzW25hbWVdID09ICJ5IjoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgiaW50IiwgMSkKKyAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCJpbnQiLCAwKQorCisgICAgICAgIGVsaWYgb3AgaW4gQ3BwRXhwci51bmFyaWVzOgorICAgICAgICAgICAgb3AsIHYgPSBlCisgICAgICAgICAgICB2ID0gc2VsZi5yZW1vdmVQcmVmaXhlZE5vZGUodixwcmVmaXgsbmFtZXMpCisgICAgICAgICAgICByZXR1cm4gKG9wLCB2KQorICAgICAgICBlbGlmIG9wIGluIENwcEV4cHIuYmluYXJpZXM6CisgICAgICAgICAgICBvcCwgdjEsIHYyID0gZQorICAgICAgICAgICAgdjEgPSBzZWxmLnJlbW92ZVByZWZpeGVkTm9kZSh2MSxwcmVmaXgsbmFtZXMpCisgICAgICAgICAgICB2MiA9IHNlbGYucmVtb3ZlUHJlZml4ZWROb2RlKHYyLHByZWZpeCxuYW1lcykKKyAgICAgICAgICAgIHJldHVybiAob3AsIHYxLCB2MikKKyAgICAgICAgZWxpZiBvcCA9PSAiY2FsbCI6CisgICAgICAgICAgICBmdW5jLCBwYXJhbXMgPSBlWzFdCisgICAgICAgICAgICBwYXJhbXMyID0gW10KKyAgICAgICAgICAgIGZvciBwYXJhbSBpbiBwYXJhbXM6CisgICAgICAgICAgICAgICAgcGFyYW1zMi5hcHBlbmQoIHNlbGYucmVtb3ZlUHJlZml4ZWROb2RlKHBhcmFtLHByZWZpeCxuYW1lcykgKQorICAgICAgICAgICAgcmV0dXJuIChvcCwgKGZ1bmMsIHBhcmFtczIpKQorCisgICAgICAgIHJldHVybiBlCisKKyAgICBkZWYgcmVtb3ZlUHJlZml4ZWQoc2VsZixwcmVmaXgsbmFtZXM9e30pOgorICAgICAgICBzZWxmLmV4cHIgPSBzZWxmLnJlbW92ZVByZWZpeGVkTm9kZShzZWxmLmV4cHIscHJlZml4LG5hbWVzKQorCisgICAgZGVmIGlzX2VxdWFsX25vZGUoc2VsZixlMSxlMik6CisgICAgICAgIGlmIGUxWzBdICE9IGUyWzBdIG9yIGxlbihlMSkgIT0gbGVuKGUyKToKKyAgICAgICAgICAgIHJldHVybiBGYWxzZQorCisgICAgICAgIG9wID0gZTFbMF0KKyAgICAgICAgaWYgb3AgPT0gImludCIgb3Igb3AgPT0gImhleCIgb3Igb3AgPT0gIiEiIG9yIG9wID09ICJkZWZpbmVkIjoKKyAgICAgICAgICAgIHJldHVybiBlMVswXSA9PSBlMlswXQorCisgICAgICAgIHJldHVybiBzZWxmLmlzX2VxdWFsX25vZGUoZTFbMV0sZTJbMV0pIGFuZCBzZWxmLmlzX2VxdWFsX25vZGUoZTFbMl0sZTJbMl0pCisKKyAgICBkZWYgaXNfZXF1YWwoc2VsZixvdGhlcik6CisgICAgICAgIHJldHVybiBzZWxmLmlzX2VxdWFsX25vZGUoc2VsZi5leHByLG90aGVyLmV4cHIpCisKK2RlZiB0ZXN0X2NwcF9leHByKGV4cHIsIGV4cGVjdGVkKToKKyAgICBlID0gQ3BwRXhwciggQ3BwTGluZVRva2VuaXplciggZXhwciApLnRvVG9rZW5MaXN0KCkgKQorICAgICNwcmludCByZXByKGUuZXhwcikKKyAgICBzMSA9IHJlcHIoZSkKKyAgICBpZiBzMSAhPSBleHBlY3RlZDoKKyAgICAgICAgcHJpbnQgIktPOiBleHByZXNzaW9uICclcycgZ2VuZXJhdGVzICclcycsIHNob3VsZCBiZSAnJXMnIiAlIChleHByLCBzMSwgZXhwZWN0ZWQpCisgICAgZWxzZToKKyAgICAgICAgI3ByaW50ICJPSzogZXhwcmVzc2lvbiAnJXMnIiAlIGV4cHIKKyAgICAgICAgcGFzcworCitkZWYgdGVzdF9jcHBfZXhwcl9vcHRpbShleHByLCBleHBlY3RlZCwgbWFjcm9zPXt9KToKKyAgICBlID0gQ3BwRXhwciggQ3BwTGluZVRva2VuaXplciggZXhwciApLnRvVG9rZW5MaXN0KCkgKQorICAgIGUub3B0aW1pemUobWFjcm9zKQorCisgICAgczEgPSByZXByKGUpCisgICAgaWYgczEgIT0gZXhwZWN0ZWQ6CisgICAgICAgIHByaW50ICJLTzogb3B0aW1pemVkIGV4cHJlc3Npb24gJyVzJyBnZW5lcmF0ZXMgJyVzJywgc2hvdWxkIGJlICclcyciICUgKGV4cHIsIHMxLCBleHBlY3RlZCkKKyAgICBlbHNlOgorICAgICAgICAjcHJpbnQgIk9LOiBvcHRtaXplZCBleHByZXNzaW9uICclcyciICUgZXhwcgorICAgICAgICBwYXNzCisKK2RlZiB0ZXN0X2NwcF9leHByX3NvdXJjZShleHByLCBleHBlY3RlZCk6CisgICAgZSA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIGV4cHIgKS50b1Rva2VuTGlzdCgpICkKKyAgICBzMSA9IHN0cihlKQorICAgIGlmIHMxICE9IGV4cGVjdGVkOgorICAgICAgICBwcmludCAiS086IHNvdXJjZSBleHByZXNzaW9uICclcycgZ2VuZXJhdGVzICclcycsIHNob3VsZCBiZSAnJXMnIiAlIChleHByLCBzMSwgZXhwZWN0ZWQpCisgICAgZWxzZToKKyAgICAgICAgI3ByaW50ICJPSzogc291cmNlIGV4cHJlc3Npb24gJyVzJyIgJSBleHByCisgICAgICAgIHBhc3MKKworZGVmIHRlc3RfQ3BwRXhwcigpOgorICAgIHByaW50ICJ0ZXN0aW5nIENwcEV4cHIiCisgICAgdGVzdF9jcHBfZXhwciggIjAiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICIxIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByKCAiMSAmJiAxIiwgIigmJiAoaW50IDEpIChpbnQgMSkpIiApCisgICAgdGVzdF9jcHBfZXhwciggIjEgJiYgMCIsICIoJiYgKGludCAxKSAoaW50IDApKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICJFWEFNUExFIiwgIihpZGVudCBFWEFNUExFKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICJFWEFNUExFIC0gMyIsICIoLSAoaWRlbnQgRVhBTVBMRSkgKGludCAzKSkiICkKKyAgICB0ZXN0X2NwcF9leHByKCAiZGVmaW5lZChFWEFNUExFKSIsICIoZGVmaW5lZCBFWEFNUExFKSIgKQorICAgIHRlc3RfY3BwX2V4cHIoICIhZGVmaW5lZChFWEFNUExFKSIsICIoISAoZGVmaW5lZCBFWEFNUExFKSkiICkKKyAgICB0ZXN0X2NwcF9leHByKCAiZGVmaW5lZChBQkMpIHx8IGRlZmluZWQoQklOR08pIiwgIih8fCAoZGVmaW5lZCBBQkMpIChkZWZpbmVkIEJJTkdPKSkiICkKKyAgICB0ZXN0X2NwcF9leHByKCAiRk9PKEJBUikiLCAiKGNhbGwgRk9PIFtCQVJdKSIgKQorCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggIjAiLCAiKGludCAwKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICIxIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMSAmJiAxIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMSAmJiAwIiwgIihpbnQgMCkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMCAmJiAxIiwgIihpbnQgMCkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMCAmJiAwIiwgIihpbnQgMCkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMSB8fCAxIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMSB8fCAwIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMCB8fCAxIiwgIihpbnQgMSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiMCB8fCAwIiwgIihpbnQgMCkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiRVhBTVBMRSIsICIoaWRlbnQgRVhBTVBMRSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiRVhBTVBMRSAtIDMiLCAiKC0gKGlkZW50IEVYQU1QTEUpIChpbnQgMykpIiApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggImRlZmluZWQoRVhBTVBMRSkiLCAiKGRlZmluZWQgRVhBTVBMRSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChFWEFNUExFKSIsICIoaW50IDEpIiwgeyAiRVhBTVBMRSI6ICJYT1dPRSIgfSApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggImRlZmluZWQoRVhBTVBMRSkiLCAiKGludCAwKSIsIHsgIkVYQU1QTEUiOiBrQ3BwVW5kZWZpbmVkTWFjcm99ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiIWRlZmluZWQoRVhBTVBMRSkiLCAiKCEgKGRlZmluZWQgRVhBTVBMRSkpIiApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggIiFkZWZpbmVkKEVYQU1QTEUpIiwgIihpbnQgMCkiLCB7ICJFWEFNUExFIiA6ICJYT1dPRSIgfSApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggIiFkZWZpbmVkKEVYQU1QTEUpIiwgIihpbnQgMSkiLCB7ICJFWEFNUExFIiA6IGtDcHBVbmRlZmluZWRNYWNybyB9ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChBQkMpIHx8IGRlZmluZWQoQklOR08pIiwgIih8fCAoZGVmaW5lZCBBQkMpIChkZWZpbmVkIEJJTkdPKSkiICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChBQkMpIHx8IGRlZmluZWQoQklOR08pIiwgIihpbnQgMSkiLCB7ICJBQkMiIDogIjEiIH0gKQorICAgIHRlc3RfY3BwX2V4cHJfb3B0aW0oICJkZWZpbmVkKEFCQykgfHwgZGVmaW5lZChCSU5HTykiLCAiKGludCAxKSIsIHsgIkJJTkdPIiA6ICIxIiB9ICkKKyAgICB0ZXN0X2NwcF9leHByX29wdGltKCAiZGVmaW5lZChBQkMpIHx8IGRlZmluZWQoQklOR08pIiwgIihkZWZpbmVkIEFCQykiLCB7ICJCSU5HTyIgOiBrQ3BwVW5kZWZpbmVkTWFjcm8gfSApCisgICAgdGVzdF9jcHBfZXhwcl9vcHRpbSggImRlZmluZWQoQUJDKSB8fCBkZWZpbmVkKEJJTkdPKSIsICIoaW50IDApIiwgeyAiQUJDIiA6IGtDcHBVbmRlZmluZWRNYWNybywgIkJJTkdPIiA6IGtDcHBVbmRlZmluZWRNYWNybyB9ICkKKworICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiMCIsICIwIiApCisgICAgdGVzdF9jcHBfZXhwcl9zb3VyY2UoICIxIiwgIjEiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjEgJiYgMSIsICIxICYmIDEiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjEgJiYgMCIsICIxICYmIDAiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjAgJiYgMSIsICIwICYmIDEiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjAgJiYgMCIsICIwICYmIDAiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjEgfHwgMSIsICIxIHx8IDEiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjEgfHwgMCIsICIxIHx8IDAiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjAgfHwgMSIsICIwIHx8IDEiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIjAgfHwgMCIsICIwIHx8IDAiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggIkVYQU1QTEUiLCAiRVhBTVBMRSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiRVhBTVBMRSAtIDMiLCAiRVhBTVBMRSAtIDMiICkKKyAgICB0ZXN0X2NwcF9leHByX3NvdXJjZSggImRlZmluZWQoRVhBTVBMRSkiLCAiZGVmaW5lZChFWEFNUExFKSIgKQorICAgIHRlc3RfY3BwX2V4cHJfc291cmNlKCAiZGVmaW5lZCBFWEFNUExFIiwgImRlZmluZWQoRVhBTVBMRSkiICkKKworCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICBDIFAgUCAgIEIgTCBPIEMgSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKK2NsYXNzIEJsb2NrOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBtb2RlbCBhIGJsb2NrIG9mIGlucHV0IHNvdXJjZSB0ZXh0LiB0aGVyZSBhcmUgdHdvIGJsb2NrIHR5cGVzOgorICAgICAgICAtIGRpcmVjaXZlIGJsb2NrczogY29udGFpbiB0aGUgdG9rZW5zIG9mIGEgc2luZ2xlIHByZS1wcm9jZXNzb3IgZGlyZWN0aXZlIChlLmcuICNpZikKKyAgICAgICAgLSB0ZXh0IGJsb2NrcywgY29udGFpbiB0aGUgdG9rZW5zIG9mIG5vbi1kaXJlY3RpdmUgYmxvY2tzCisKKyAgICAgICB0aGUgY3BwIHBhcnNlciBjbGFzcyBiZWxvdyB3aWxsIHRyYW5zZm9ybSBhbiBpbnB1dCBzb3VyY2UgZmlsZSBpbnRvIGEgbGlzdCBvZiBCbG9jaworICAgICAgIG9iamVjdHMgKGdyb3VwZWQgaW4gYSBCbG9ja0xpc3Qgb2JqZWN0IGZvciBjb252ZW5pZW5jZSkiIiIKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLHRva2VucyxkaXJlY3RpdmU9Tm9uZSxsaW5lbm89MCk6CisgICAgICAgICIiImluaXRpYWxpemUgYSBuZXcgYmxvY2ssIGlmICdkaXJlY3RpdmUnIGlzIE5vbmUsIHRoaXMgaXMgYSB0ZXh0IGJsb2NrCisgICAgICAgICAgIE5PVEU6IHRoaXMgYXV0b21hdGljYWxseSBjb252ZXJ0cyAnI2lmZGVmIE1BQ1JPJyBpbnRvICcjaWYgZGVmaW5lZChNQUNSTyknCisgICAgICAgICAgICAgICAgIGFuZCAnI2lmbmRlZiBNQUNSTycgaW50byAnI2lmICFkZWZpbmVkKE1BQ1JPKSciIiIKKyAgICAgICAgaWYgZGlyZWN0aXZlID09ICJpZmRlZiI6CisgICAgICAgICAgICB0b2sgPSBUb2tlbigpCisgICAgICAgICAgICB0b2suc2V0KHRva0RFRklORUQpCisgICAgICAgICAgICB0b2tlbnMgPSBbIHRvayBdICsgdG9rZW5zCisgICAgICAgICAgICBkaXJlY3RpdmUgPSAiaWYiCisKKyAgICAgICAgZWxpZiBkaXJlY3RpdmUgPT0gImlmbmRlZiI6CisgICAgICAgICAgICB0b2sxID0gVG9rZW4oKQorICAgICAgICAgICAgdG9rMiA9IFRva2VuKCkKKyAgICAgICAgICAgIHRvazEuc2V0KHRva05PVCkKKyAgICAgICAgICAgIHRvazIuc2V0KHRva0RFRklORUQpCisgICAgICAgICAgICB0b2tlbnMgPSBbIHRvazEsIHRvazIgXSArIHRva2VucworICAgICAgICAgICAgZGlyZWN0aXZlID0gImlmIgorCisgICAgICAgIHNlbGYudG9rZW5zICAgID0gdG9rZW5zCisgICAgICAgIHNlbGYuZGlyZWN0aXZlID0gZGlyZWN0aXZlCisgICAgICAgIGlmIGxpbmVubyA+IDA6CisgICAgICAgICAgICBzZWxmLmxpbmVubyA9IGxpbmVubworICAgICAgICBlbHNlOgorICAgICAgICAgICAgc2VsZi5saW5lbm8gPSBzZWxmLnRva2Vuc1swXS5saW5lbm8KKworICAgICAgICBpZiBzZWxmLmlzSWYoKToKKyAgICAgICAgICAgIHNlbGYuZXhwciA9IENwcEV4cHIoIHNlbGYudG9rZW5zICkKKworICAgIGRlZiBpc0RpcmVjdGl2ZShzZWxmKToKKyAgICAgICAgIiIicmV0dXJucyBUcnVlIGlmZiB0aGlzIGlzIGEgZGlyZWN0aXZlIGJsb2NrIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRpcmVjdGl2ZSAhPSBOb25lCisKKyAgICBkZWYgaXNDb25kaXRpb25hbChzZWxmKToKKyAgICAgICAgIiIicmV0dXJucyBUcnVlIGlmZiB0aGlzIGlzIGEgY29uZGl0aW9uYWwgZGlyZWN0aXZlIGJsb2NrIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRpcmVjdGl2ZSBpbiBbImlmIiwiaWZkZWYiLCJpZm5kZWYiLCJlbHNlIiwiZWxpZiIsImVuZGlmIl0KKworICAgIGRlZiBpc0lmKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIFRydWUgaWZmIHRoaXMgaXMgYW4gI2lmLWxpa2UgZGlyZWN0aXZlIGJsb2NrIiIiCisgICAgICAgIHJldHVybiBzZWxmLmRpcmVjdGl2ZSBpbiBbImlmIiwiaWZkZWYiLCJpZm5kZWYiLCJlbGlmIl0KKworICAgIGRlZiBpc0luY2x1ZGUoc2VsZik6CisgICAgICAgICIiImNoZWNrcyB3ZXRoZXIgdGhpcyBpcyBhICNpbmNsdWRlIGRpcmVjdGl2ZS4gaWYgdHJ1ZSwgdGhlbiByZXR1cm5zIHRoZQorICAgICAgICAgICBjb3JyZXNwb25kaW5nIGZpbGUgbmFtZSAod2l0aCBicmFja2V0cyBvciBkb3VibGUtcW91dGVzKS4gTm9uZSBvdGhlcndpc2UiIiIKKyAgICAgICAgaWYgc2VsZi5kaXJlY3RpdmUgIT0gImluY2x1ZGUiOgorICAgICAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICAgICAjcHJpbnQgImlpaSAiICsgcmVwcihzZWxmLnRva2VucykKKyAgICAgICAgaWYgc2VsZi50b2tlbnNbMF0uaWQgPT0gdG9rU1RSSU5HOgorICAgICAgICAgICAgIyBhIGRvdWJsZS1xdW90ZSBpbmNsdWRlLCB0aGF0J3MgZWFzeQorICAgICAgICAgICAgcmV0dXJuIHNlbGYudG9rZW5zWzBdLnZhbHVlCisKKyAgICAgICAgIyB3ZSBvbmx5IHdhbnQgdGhlIGJyYWNrZXQgcGFydCwgbm90IGFueSBjb21tZW50cyBvciBqdW5rIGFmdGVyIGl0CisgICAgICAgIGlmIHNlbGYudG9rZW5zWzBdLmlkID09ICI8IjoKKyAgICAgICAgICAgIGkgICA9IDAKKyAgICAgICAgICAgIHRvayA9IHNlbGYudG9rZW5zCisgICAgICAgICAgICBuICAgPSBsZW4odG9rKQorICAgICAgICAgICAgd2hpbGUgaSA8IG4gYW5kIHRva1tpXS5pZCAhPSAiPiI6CisgICAgICAgICAgICAgICAgaSArPSAxCisKKyAgICAgICAgICAgIGlmIGkgPj0gbjoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9uZQorCisgICAgICAgICAgICByZXR1cm4gc3RyaW5nLmpvaW4oWyBzdHIoeCkgZm9yIHggaW4gdG9rWzppKzFdIF0sIiIpCisKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgICIiImdlbmVyYXRlIHRoZSByZXByZXNlbnRhdGlvbiBvZiBhIGdpdmVuIGJsb2NrIiIiCisgICAgICAgIGlmIHNlbGYuZGlyZWN0aXZlOgorICAgICAgICAgICAgcmVzdWx0ID0gIiMlcyAiICUgc2VsZi5kaXJlY3RpdmUKKyAgICAgICAgICAgIGlmIHNlbGYuaXNJZigpOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSByZXByKHNlbGYuZXhwcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZm9yIHRvayBpbiBzZWxmLnRva2VuczoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJlcHIodG9rKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gIiIKKyAgICAgICAgICAgIGZvciB0b2sgaW4gc2VsZi50b2tlbnM6CisgICAgICAgICAgICAgICAgcmVzdWx0ICs9IHJlcHIodG9rKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICAiIiJnZW5lcmF0ZSB0aGUgc3RyaW5nIHJlcHJlc2VudGF0aW9uIG9mIGEgZ2l2ZW4gYmxvY2siIiIKKyAgICAgICAgaWYgc2VsZi5kaXJlY3RpdmU6CisgICAgICAgICAgICBpZiBzZWxmLmRpcmVjdGl2ZSA9PSAiaWYiOgorICAgICAgICAgICAgICAgICMgc21hbGwgb3B0aW1pemF0aW9uIHRvIHJlLWdlbmVyYXRlICNpZmRlZiBhbmQgI2lmbmRlZgorICAgICAgICAgICAgICAgIGUgPSBzZWxmLmV4cHIuZXhwcgorICAgICAgICAgICAgICAgIG9wID0gZVswXQorICAgICAgICAgICAgICAgIGlmIG9wID09ICJkZWZpbmVkIjoKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiNpZmRlZiAlcyIgJSBlWzFdCisgICAgICAgICAgICAgICAgZWxpZiBvcCA9PSAiISIgYW5kIGVbMV1bMF0gPT0gImRlZmluZWQiOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSAiI2lmbmRlZiAlcyIgJSBlWzFdWzFdCisgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiNpZiAiICsgc3RyKHNlbGYuZXhwcikKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gIiMlcyIgJSBzZWxmLmRpcmVjdGl2ZQorICAgICAgICAgICAgICAgIGlmIGxlbihzZWxmLnRva2Vucyk6CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCArPSAiICIKKyAgICAgICAgICAgICAgICBmb3IgdG9rIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgICAgICByZXN1bHQgKz0gc3RyKHRvaykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCA9ICIiCisgICAgICAgICAgICBmb3IgdG9rIGluIHNlbGYudG9rZW5zOgorICAgICAgICAgICAgICAgIHJlc3VsdCArPSBzdHIodG9rKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitjbGFzcyBCbG9ja0xpc3Q6CisgICAgIiIiYSBjb252ZW5pZW5jZSBjbGFzcyB1c2VkIHRvIGhvbGQgYW5kIHByb2Nlc3MgYSBsaXN0IG9mIGJsb2NrcyByZXR1cm5lZCBieQorICAgICAgIHRoZSBjcHAgcGFyc2VyIiIiCisgICAgZGVmIF9faW5pdF9fKHNlbGYsYmxvY2tzKToKKyAgICAgICAgc2VsZi5ibG9ja3MgPSBibG9ja3MKKworICAgIGRlZiBfX2xlbl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gbGVuKHNlbGYuYmxvY2tzKQorCisgICAgZGVmIF9fZ2V0aXRlbV9fKHNlbGYsbik6CisgICAgICAgIHJldHVybiBzZWxmLmJsb2Nrc1tuXQorCisgICAgZGVmIF9fcmVwcl9fKHNlbGYpOgorICAgICAgICByZXR1cm4gcmVwcihzZWxmLmJsb2NrcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgPSAiIgorICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2NrczoKKyAgICAgICAgICAgIHJlc3VsdCArPSBzdHIoYikKKyAgICAgICAgICAgIGlmIGIuaXNEaXJlY3RpdmUoKToKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gJ1xuJworICAgICAgICByZXR1cm4gcmVzdWx0CisKKyAgICBkZWYgIG9wdGltaXplSWYwMShzZWxmKToKKyAgICAgICAgIiIicmVtb3ZlIHRoZSBjb2RlIGJldHdlZW4gI2lmIDAgLi4gI2VuZGlmIGluIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIHNlbGYuYmxvY2tzID0gb3B0aW1pemVfaWYwMShzZWxmLmJsb2NrcykKKworICAgIGRlZiBvcHRpbWl6ZU1hY3JvcyhzZWxmLCBtYWNyb3MpOgorICAgICAgICAiIiJyZW1vdmUga25vd24gZGVmaW5lZCBhbmQgdW5kZWZpbmVkIG1hY3JvcyBmcm9tIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaWYgYi5pc0lmKCk6CisgICAgICAgICAgICAgICAgYi5leHByLm9wdGltaXplKG1hY3JvcykKKworICAgIGRlZiByZW1vdmVQcmVmaXhlZChzZWxmLHByZWZpeCxuYW1lcyk6CisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaWYgYi5pc0lmKCk6CisgICAgICAgICAgICAgICAgYi5leHByLnJlbW92ZVByZWZpeGVkKHByZWZpeCxuYW1lcykKKworICAgIGRlZiBvcHRpbWl6ZUFsbChzZWxmLG1hY3Jvcyk6CisgICAgICAgIHNlbGYub3B0aW1pemVNYWNyb3MobWFjcm9zKQorICAgICAgICBzZWxmLm9wdGltaXplSWYwMSgpCisgICAgICAgIHJldHVybgorCisgICAgZGVmIGZpbmRJbmNsdWRlcyhzZWxmKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBsaXN0IG9mIGluY2x1ZGVkIGZpbGVzIGluIGEgQmxvY2tMaXN0IiIiCisgICAgICAgIHJlc3VsdCA9IFtdCisgICAgICAgIGZvciBiIGluIHNlbGYuYmxvY2tzOgorICAgICAgICAgICAgaSA9IGIuaXNJbmNsdWRlKCkKKyAgICAgICAgICAgIGlmIGk6CisgICAgICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChpKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworCisgICAgZGVmIHdyaXRlKHNlbGYsb3V0KToKKyAgICAgICAgb3V0LndyaXRlKHN0cihzZWxmKSkKKworICAgIGRlZiByZW1vdmVDb21tZW50cyhzZWxmKToKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6CisgICAgICAgICAgICBmb3IgdG9rIGluIGIudG9rZW5zOgorICAgICAgICAgICAgICAgIGlmIHRvay5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgdG9rLnZhbHVlID0gIiAiCisKKyAgICBkZWYgcmVtb3ZlRW1wdHlMaW5lcyhzZWxmKToKKyAgICAgICAgIyBzdGF0ZSA9IDEgPT4gcHJldmlvdXMgbGluZSB3YXMgdG9rTE4KKyAgICAgICAgIyBzdGF0ZSA9IDAgPT4gcHJldmlvdXMgbGluZSB3YXMgZGlyZWN0aXZlCisgICAgICAgIHN0YXRlICA9IDEKKyAgICAgICAgZm9yIGIgaW4gc2VsZi5ibG9ja3M6CisgICAgICAgICAgICBpZiBiLmlzRGlyZWN0aXZlKCk6CisgICAgICAgICAgICAgICAgI3ByaW50ICIkJCQgZGlyZWN0aXZlICVzIiAlIHN0cihiKQorICAgICAgICAgICAgICAgIHN0YXRlID0gMAorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAjIGEgdG9rTE4gZm9sbG93ZWQgYnkgc3BhY2VzIGlzIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIHRva0xOCisgICAgICAgICAgICAgICAgIyBzZXZlcmFsIHN1Y2Nlc3NpdmUgdG9rTE4gYXJlIHJlcGxhY2VkIGJ5IGEgc2luZ2xlIG9uZQorICAgICAgICAgICAgICAgICMKKyAgICAgICAgICAgICAgICBkc3QgICA9IFtdCisgICAgICAgICAgICAgICAgc3JjICAgPSBiLnRva2VucworICAgICAgICAgICAgICAgIG4gICAgID0gbGVuKHNyYykKKyAgICAgICAgICAgICAgICBpICAgICA9IDAKKyAgICAgICAgICAgICAgICAjcHJpbnQgIiQkJCBwYXJzaW5nICVzIiAlIHJlcHIoc3JjKQorICAgICAgICAgICAgICAgIHdoaWxlIGkgPCBuOgorICAgICAgICAgICAgICAgICAgICAjIGZpbmQgZmluYWwgdG9rTE4KKyAgICAgICAgICAgICAgICAgICAgaiA9IGkKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgaiA8IG4gYW5kIHNyY1tqXS5pZCAhPSB0b2tMTjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGogKz0gMQorCisgICAgICAgICAgICAgICAgICAgIGlmIGogPj0gbjoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgdWhoaAorICAgICAgICAgICAgICAgICAgICAgICAgZHN0ICs9IHNyY1tpOl0KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgICAgICAgICAgICAgaWYgc3JjW2ldLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgayA9IGkrMQorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgc3JjW2tdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgKz0gMQorCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBrID09IGo6ICMgZW1wdHkgbGluZXMgd2l0aCBzcGFjZXMgaW4gaXQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpID0gaiAgIyByZW1vdmUgdGhlIHNwYWNlcworCisgICAgICAgICAgICAgICAgICAgIGlmIGkgPT0gajoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgYW4gZW1wdHkgbGluZQorICAgICAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUgPT0gMToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICs9IDEgICAjIHJlbW92ZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKHNyY1tpXSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpICAgKz0gMQorICAgICAgICAgICAgICAgICAgICBlbHNlOgorICAgICAgICAgICAgICAgICAgICAgICAgIyB0aGlzIGxpbmUgaXMgbm90IGVtcHR5LCByZW1vdmUgdHJhaWxpbmcgc3BhY2VzCisgICAgICAgICAgICAgICAgICAgICAgICBrID0gagorICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgayA+IGkgYW5kIHNyY1trLTFdLmlkID09IHRva1NQQUNFOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGsgLT0gMQorCisgICAgICAgICAgICAgICAgICAgICAgICBubiA9IGkKKyAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIG5uIDwgazoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkc3QuYXBwZW5kKHNyY1tubl0pCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm4gKz0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZHN0LmFwcGVuZChzcmNbal0pCisgICAgICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGkgPSBqKzEKKworICAgICAgICAgICAgICAgIGIudG9rZW5zID0gZHN0CisKKyAgICBkZWYgcmVtb3ZlVmFyc0FuZEZ1bmNzKHNlbGYsa25vd25TdGF0aWNzPXNldCgpKToKKyAgICAgICAgIiIicmVtb3ZlIGFsbCBleHRlcm4gYW5kIHN0YXRpYyBkZWNsYXJhdGlvbnMgY29ycmVzcG9uZGluZworICAgICAgICAgICB0byB2YXJpYWJsZSBhbmQgZnVuY3Rpb24gZGVjbGFyYXRpb25zLiB3ZSBvbmx5IGFjY2VwdCB0eXBlZGVmcworICAgICAgICAgICBhbmQgZW51bS9zdHJ1Y3RzL3VuaW9uIGRlY2xhcmF0aW9ucy4KKworICAgICAgICAgICBob3dldmVyLCB3ZSBrZWVwIHRoZSBkZWZpbml0aW9ucyBjb3JyZXNwb25kaW5nIHRvIHRoZSBzZXQKKyAgICAgICAgICAgb2Yga25vd24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgaW4gdGhlIHNldCAna25vd25TdGF0aWNzJywKKyAgICAgICAgICAgd2hpY2ggaXMgdXNlZnVsIGZvciBvcHRpbWl6ZWQgYnl0ZW9yZGVyIHN3YXAgZnVuY3Rpb25zIGFuZAorICAgICAgICAgICBzdHVmZiBsaWtlIHRoYXQuCisgICAgICAgICAgICIiIgorICAgICAgICAjIHN0YXRlID0gMSA9PiB0eXBlZGVmL3N0cnVjdCBlbmNvdW50ZXJlZAorICAgICAgICAjIHN0YXRlID0gMiA9PiB2YXJzIG9yIGZ1bmMgZGVjbGFyYXRpb24gZW5jb3VudGVyZWQsIHNraXBwaW5nIHVudGlsICI7IgorICAgICAgICAjIHN0YXRlID0gMCA9PiBub3JtYWwgKGkuZS4gTE4gKyBzcGFjZXMpCisgICAgICAgIHN0YXRlICAgICAgPSAwCisgICAgICAgIGRlcHRoICAgICAgPSAwCisgICAgICAgIGJsb2NrczIgICAgPSBbXQorICAgICAgICBmb3IgYiBpbiBzZWxmLmJsb2NrczoKKyAgICAgICAgICAgIGlmIGIuaXNEaXJlY3RpdmUoKToKKyAgICAgICAgICAgICAgICBibG9ja3MyLmFwcGVuZChiKQorICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICBuICAgICA9IGxlbihiLnRva2VucykKKyAgICAgICAgICAgICAgICBpICAgICA9IDAKKyAgICAgICAgICAgICAgICBmaXJzdCA9IDAKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAyOgorICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IG4KKyAgICAgICAgICAgICAgICB3aGlsZSBpIDwgbjoKKyAgICAgICAgICAgICAgICAgICAgdG9rID0gYi50b2tlbnNbaV0KKyAgICAgICAgICAgICAgICAgICAgaWYgc3RhdGUgPT0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGJhZCA9IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCBpbiBbdG9rTE4sIHRva1NQQUNFXToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRvay52YWx1ZSBpbiBbICdzdHJ1Y3QnLCAndHlwZWRlZicsICdlbnVtJywgJ3VuaW9uJyBdOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMQorICAgICAgICAgICAgICAgICAgICAgICAgZWxzZToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiB0b2sudmFsdWUgaW4gWyAnc3RhdGljJywgJ2V4dGVybicsICdfX0tJTkxJTkUnIF06CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGogPSBpKzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSAiIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSBqIDwgbiBhbmQgbm90IChiLnRva2Vuc1tqXS5pZCBpbiBbICcoJywgJzsnIF0pOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgYi50b2tlbnNbal0uaWQgPT0gdG9rSURFTlQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQgPSBiLnRva2Vuc1tqXS52YWx1ZQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaiArPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGogPCBuIGFuZCBpZGVudCBpbiBrbm93blN0YXRpY3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIHRoaXMgaXMgYSBrbm93biBzdGF0aWMsIHdlJ3JlIGdvaW5nIHRvIGtlZXAgaXRzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIGRlZmluaXRpb24gaW4gdGhlIGZpbmFsIG91dHB1dAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGUgPSAxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIiMjIyBza2lwIHN0YXRpYyAnJXMnIiAlIGlkZW50CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXNzCisKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBpID4gZmlyc3Q6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIiMjIyBpbnRlcm1lZGlhdGUgZnJvbSAnJXMnOiAnJXMnIiAlICh0b2sudmFsdWUsIHJlcHIoYi50b2tlbnNbZmlyc3Q6aV0pKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzMi5hcHBlbmQoIEJsb2NrKGIudG9rZW5zW2ZpcnN0OmldKSApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IG4KKworICAgICAgICAgICAgICAgICAgICBlbHNlOiAgIyBzdGF0ZSA+IDAKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCA9PSAneyc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVwdGggKz0gMQorCisgICAgICAgICAgICAgICAgICAgICAgICBlbGlmIHRvay5pZCA9PSAnfSc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZGVwdGggPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXB0aCAtPSAxCisKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsaWYgZGVwdGggPT0gMCBhbmQgdG9rLmlkID09ICc7JzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAyOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaXJzdCA9IGkrMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRlID0gMAorCisgICAgICAgICAgICAgICAgICAgIGkgKz0gMQorCisgICAgICAgICAgICAgICAgaWYgaSA+IGZpcnN0OgorICAgICAgICAgICAgICAgICAgICAjcHJpbnQgIiMjIyBmaW5hbCAnJXMnIiAlIHJlcHIoYi50b2tlbnNbZmlyc3Q6aV0pCisgICAgICAgICAgICAgICAgICAgIGJsb2NrczIuYXBwZW5kKCBCbG9jayhiLnRva2Vuc1tmaXJzdDppXSkgKQorCisgICAgICAgIHNlbGYuYmxvY2tzID0gYmxvY2tzMgorCisgICAgZGVmIGluc2VydERpc2NsYWltZXIoc2VsZixkaXNjbGFpbWVyPSIvKiBhdXRvLWdlbmVyYXRlZCBmaWxlLCBETyBOT1QgRURJVCAqLyIpOgorICAgICAgICAiIiJpbnNlcnQgeW91ciBzdGFuZGFyZCBpc3N1ZSBkaXNjbGFpbWVyIHRoYXQgdGhpcyBpcyBhbgorICAgICAgICAgICBhdXRvLWdlbmVyYXRlZCBmaWxlLCBldGMuLiIiIgorICAgICAgICB0b2tlbnMgPSBDcHBMaW5lVG9rZW5pemVyKCBkaXNjbGFpbWVyICkudG9Ub2tlbkxpc3QoKQorICAgICAgICB0b2tlbnMgPSB0b2tlbnNbOi0xXSAgIyByZW1vdmUgdHJhaWxpbmcgdG9rTE4KKyAgICAgICAgc2VsZi5ibG9ja3MgPSBbIEJsb2NrKHRva2VucykgXSArIHNlbGYuYmxvY2tzCisKK2NsYXNzIEJsb2NrUGFyc2VyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBjb252ZXJ0IGFuIGlucHV0IHNvdXJjZSBmaWxlIGludG8gYSBCbG9ja0xpc3Qgb2JqZWN0IiIiCisKKyAgICBkZWYgX19pbml0X18oc2VsZix0b2t6ZXI9Tm9uZSk6CisgICAgICAgICIiImluaXRpYWxpemUgYSBibG9jayBwYXJzZXIuIHRoZSBpbnB1dCBzb3VyY2UgaXMgcHJvdmlkZWQgdGhyb3VnaCBhIFRva2VuaXplcgorICAgICAgICAgICBvYmplY3QiIiIKKyAgICAgICAgc2VsZi5yZXNldCh0b2t6ZXIpCisKKyAgICBkZWYgcmVzZXQoc2VsZix0b2t6ZXIpOgorICAgICAgICBzZWxmLnN0YXRlICA9IDEKKyAgICAgICAgc2VsZi50b2t6ZXIgPSB0b2t6ZXIKKworICAgIGRlZiBnZXRCbG9ja3Moc2VsZix0b2t6ZXI9Tm9uZSk6CisgICAgICAgICIiInRva2VuaXplIGFuZCBwYXJzZSB0aGUgaW5wdXQgc291cmNlLCByZXR1cm4gYSBCbG9ja0xpc3Qgb2JqZWN0CisgICAgICAgICAgIE5PVEU6IGVtcHR5IGFuZCBsaW5lLW51bWJlcmluZyBkaXJlY3RpdmVzIGFyZSBpZ25vcmVkIGFuZCByZW1vdmVkCisgICAgICAgICAgICAgICAgIGZyb20gdGhlIHJlc3VsdC4gYXMgYSBjb25zZXF1ZW5jZSwgaXQgaXMgcG9zc2libGUgdG8gaGF2ZQorICAgICAgICAgICAgICAgICB0d28gc3VjY2Vzc2l2ZSB0ZXh0IGJsb2NrcyBpbiB0aGUgcmVzdWx0IiIiCisgICAgICAgICMgc3RhdGUgMCA9PiBpbiBzb3VyY2UgY29kZQorICAgICAgICAjIHN0YXRlIDEgPT4gaW4gc291cmNlIGNvZGUsIGFmdGVyIGEgTE4KKyAgICAgICAgIyBzdGF0ZSAyID0+IGluIHNvdXJjZSBjb2RlLCBhZnRlciBMTiB0aGVuIHNvbWUgc3BhY2UKKyAgICAgICAgc3RhdGUgICA9IDEKKyAgICAgICAgbGFzdExOICA9IDAKKyAgICAgICAgY3VycmVudCA9IFtdCisgICAgICAgIGJsb2NrcyAgPSBbXQorCisgICAgICAgIGlmIHRva3plciA9PSBOb25lOgorICAgICAgICAgICAgdG9remVyID0gc2VsZi50b2t6ZXIKKworICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgdG9rID0gdG9remVyLmdldFRva2VuKCkKKyAgICAgICAgICAgIGlmIHRvay5pZCA9PSB0b2tFT0Y6CisgICAgICAgICAgICAgICAgYnJlYWsKKworICAgICAgICAgICAgaWYgdG9rLmlkID09IHRva0xOOgorICAgICAgICAgICAgICAgIHN0YXRlICAgID0gMQorICAgICAgICAgICAgICAgIGN1cnJlbnQuYXBwZW5kKHRvaykKKyAgICAgICAgICAgICAgICBsYXN0TE4gICA9IGxlbihjdXJyZW50KQorCisgICAgICAgICAgICBlbGlmIHRvay5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA9PSAxOgorICAgICAgICAgICAgICAgICAgICBzdGF0ZSA9IDIKKyAgICAgICAgICAgICAgICBjdXJyZW50LmFwcGVuZCh0b2spCisKKyAgICAgICAgICAgIGVsaWYgdG9rLmlkID09ICIjIjoKKyAgICAgICAgICAgICAgICBpZiBzdGF0ZSA+IDA6CisgICAgICAgICAgICAgICAgICAgICMgdGhpcyBpcyB0aGUgc3RhcnQgb2YgYSBkaXJlY3RpdmUKKworICAgICAgICAgICAgICAgICAgICBpZiBsYXN0TE4gPiAwOgorICAgICAgICAgICAgICAgICAgICAgICAgIyByZWNvcmQgcHJldmlvdXMgdG9rZW5zIGFzIHRleHQgYmxvY2sKKyAgICAgICAgICAgICAgICAgICAgICAgIGJsb2NrICAgPSBCbG9jayhjdXJyZW50WzpsYXN0TE5dKQorICAgICAgICAgICAgICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jaykKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhc3RMTiAgPSAwCisKKyAgICAgICAgICAgICAgICAgICAgY3VycmVudCA9IFtdCisKKyAgICAgICAgICAgICAgICAgICAgIyBza2lwIHNwYWNlcyBhZnRlciB0aGUgIworICAgICAgICAgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgICAgICAgICAgdG9rID0gdG9remVyLmdldFRva2VuKCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCAhPSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaworCisgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCAhPSB0b2tJREVOVDoKKyAgICAgICAgICAgICAgICAgICAgICAgICMgZW1wdHkgb3IgbGluZS1udW1iZXJpbmcsIGlnbm9yZSBpdAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgdG9rLmlkICE9IHRva0xOIGFuZCB0b2suaWQgIT0gdG9rRU9GOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlIDE6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRva3plci5nZXRUb2tlbigpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIHRvay5pZCA9PSB0b2tMTiBvciB0b2suaWQgPT0gdG9rRU9GOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgICAgICAgICAgICAgZGlyZWN0aXZlID0gdG9rLnZhbHVlCisgICAgICAgICAgICAgICAgICAgIGxpbmVubyAgICA9IHRvay5saW5lbm8KKworICAgICAgICAgICAgICAgICAgICAjIHNraXAgc3BhY2VzCisgICAgICAgICAgICAgICAgICAgIHRvayA9IHRva3plci5nZXRUb2tlbigpCisgICAgICAgICAgICAgICAgICAgIHdoaWxlIHRvay5pZCA9PSB0b2tTUEFDRToKKyAgICAgICAgICAgICAgICAgICAgICAgIHRvayA9IHRva3plci5nZXRUb2tlbigpCisKKyAgICAgICAgICAgICAgICAgICAgIyB0aGVuIHJlY29yZCB0b2tlbnMgdW50aWwgTE4KKyAgICAgICAgICAgICAgICAgICAgZGlydG9rZW5zID0gW10KKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgdG9rLmlkICE9IHRva0xOIGFuZCB0b2suaWQgIT0gdG9rRU9GOgorICAgICAgICAgICAgICAgICAgICAgICAgZGlydG9rZW5zLmFwcGVuZCh0b2spCisgICAgICAgICAgICAgICAgICAgICAgICB0b2sgPSB0b2t6ZXIuZ2V0VG9rZW4oKQorCisgICAgICAgICAgICAgICAgICAgIGJsb2NrID0gQmxvY2soZGlydG9rZW5zLGRpcmVjdGl2ZSxsaW5lbm8pCisgICAgICAgICAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYmxvY2spCisgICAgICAgICAgICAgICAgICAgIHN0YXRlICAgPSAxCisKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgc3RhdGUgPSAwCisgICAgICAgICAgICAgICAgY3VycmVudC5hcHBlbmQodG9rKQorCisgICAgICAgIGlmIGxlbihjdXJyZW50KSA+IDA6CisgICAgICAgICAgICBibG9jayA9IEJsb2NrKGN1cnJlbnQpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKQorCisgICAgICAgIHJldHVybiBCbG9ja0xpc3QoYmxvY2tzKQorCisgICAgZGVmIHBhcnNlKHNlbGYsdG9remVyKToKKyAgICAgICAgcmV0dXJuIHNlbGYuZ2V0QmxvY2tzKCB0b2t6ZXIgKQorCisgICAgZGVmIHBhcnNlTGluZXMoc2VsZixsaW5lcyk6CisgICAgICAgICIiInBhcnNlIGEgbGlzdCBvZiB0ZXh0IGxpbmVzIGludG8gYSBCbG9ja0xpc3Qgb2JqZWN0IiIiCisgICAgICAgIHJldHVybiBzZWxmLmdldEJsb2NrcyggQ3BwTGluZXNUb2tlbml6ZXIobGluZXMpICkKKworICAgIGRlZiBwYXJzZUZpbGUoc2VsZixwYXRoKToKKyAgICAgICAgIiIicGFyc2UgYSBmaWxlIGludG8gYSBCbG9ja0xpc3Qgb2JqZWN0IiIiCisgICAgICAgIGZpbGUgPSBvcGVuKHBhdGgsICJydCIpCisgICAgICAgIHJlc3VsdCA9IHNlbGYuZ2V0QmxvY2tzKCBDcHBGaWxlVG9rZW5pemVyKGZpbGUpICkKKyAgICAgICAgZmlsZS5jbG9zZSgpCisgICAgICAgIHJldHVybiByZXN1bHQKKworCitkZWYgdGVzdF9ibG9ja19wYXJzaW5nKGxpbmVzLGV4cGVjdGVkKToKKyAgICBibG9ja3MgPSBCbG9ja1BhcnNlcigpLnBhcnNlKCBDcHBMaW5lc1Rva2VuaXplcihsaW5lcykgKQorICAgIGlmIGxlbihibG9ja3MpICE9IGxlbihleHBlY3RlZCk6CisgICAgICAgIHJhaXNlIEJhZEV4cGVjdGVkVG9rZW4sICJwYXJzZXIuYnVpbGRCbG9ja3MgcmV0dXJuZWQgJyVzJyBleHBlY3RpbmcgJyVzJyIgXAorICAgICAgICAgICAgICAlIChzdHIoYmxvY2tzKSwgcmVwcihleHBlY3RlZCkpCisgICAgZm9yIG4gaW4gcmFuZ2UobGVuKGJsb2NrcykpOgorICAgICAgICBpZiBzdHIoYmxvY2tzW25dKSAhPSBleHBlY3RlZFtuXToKKyAgICAgICAgICAgIHJhaXNlIEJhZEV4cGVjdGVkVG9rZW4sICJwYXJzZXIuYnVpbGRCbG9ja3MoKVslZF0gaXMgJyVzJywgZXhwZWN0aW5nICclcyciIFwKKyAgICAgICAgICAgICAgICAgICUgKG4sIHN0cihibG9ja3Nbbl0pLCBleHBlY3RlZFtuXSkKKyAgICAjZm9yIGJsb2NrIGluIGJsb2NrczoKKyAgICAjICAgIHByaW50IGJsb2NrCisKK2RlZiB0ZXN0X0Jsb2NrUGFyc2VyKCk6CisgICAgdGVzdF9ibG9ja19wYXJzaW5nKFsiI2Vycm9yIGhlbGxvIl0sWyIjZXJyb3IgaGVsbG8iXSkKKyAgICB0ZXN0X2Jsb2NrX3BhcnNpbmcoWyAiZm9vIiwgIiIsICJiYXIiIF0sIFsgImZvb1xuXG5iYXJcbiIgXSkKKyAgICB0ZXN0X2Jsb2NrX3BhcnNpbmcoWyAiZm9vIiwgIiAgIyAgIiwgImJhciIgXSwgWyAiZm9vXG4iLCJiYXJcbiIgXSkKKyAgICB0ZXN0X2Jsb2NrX3BhcnNpbmcoXAorICAgICAgICBbICJmb28iLCAiICAgIyAgIiwgIiAgIyAgLyogYWhhaCAqLyBpZiBkZWZpbmVkKF9fS0VSTkVMX18pICIsICJiYXIiLCAiI2VuZGlmIiBdLAorICAgICAgICBbICJmb29cbiIsICIjaWZkZWYgX19LRVJORUxfXyIsICJiYXJcbiIsICIjZW5kaWYiIF0gKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICBCIEwgTyBDIEsgICBMIEkgUyBUICAgTyBQIFQgSSBNIEkgWiBBIFQgSSBPIE4gICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKworZGVmICBmaW5kX21hdGNoaW5nX2VuZGlmKCBibG9ja3MsIGkgKToKKyAgICBuICAgICA9IGxlbihibG9ja3MpCisgICAgZGVwdGggPSAxCisgICAgd2hpbGUgaSA8IG46CisgICAgICAgIGlmIGJsb2Nrc1tpXS5pc0RpcmVjdGl2ZSgpOgorICAgICAgICAgICAgZGlyID0gYmxvY2tzW2ldLmRpcmVjdGl2ZQorICAgICAgICAgICAgaWYgZGlyIGluIFsgImlmIiwgImlmbmRlZiIsICJpZmRlZiIgXToKKyAgICAgICAgICAgICAgICBkZXB0aCArPSAxCisgICAgICAgICAgICBlbGlmIGRlcHRoID09IDEgYW5kIGRpciBpbiBbICJlbHNlIiwgImVsaWYiIF06CisgICAgICAgICAgICAgICAgcmV0dXJuIGkKKyAgICAgICAgICAgIGVsaWYgZGlyID09ICJlbmRpZiI6CisgICAgICAgICAgICAgICAgZGVwdGggLT0gMQorICAgICAgICAgICAgICAgIGlmIGRlcHRoID09IDA6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpCisgICAgICAgIGkgKz0gMQorICAgIHJldHVybiBpCisKK2RlZiAgb3B0aW1pemVfaWYwMSggYmxvY2tzICk6CisgICAgIiIicmVtb3ZlIHRoZSBjb2RlIGJldHdlZW4gI2lmIDAgLi4gI2VuZGlmIGluIGEgbGlzdCBvZiBDcHBCbG9ja3MiIiIKKyAgICBpID0gMAorICAgIG4gPSBsZW4oYmxvY2tzKQorICAgIHJlc3VsdCA9IFtdCisgICAgd2hpbGUgaSA8IG46CisgICAgICAgIGogPSBpCisgICAgICAgIHdoaWxlIGogPCBuIGFuZCBub3QgYmxvY2tzW2pdLmlzSWYoKToKKyAgICAgICAgICAgIGogKz0gMQorICAgICAgICBpZiBqID4gaToKKyAgICAgICAgICAgIEQyKCJhcHBlbmRpbmcgbGluZXMgJWQgdG8gJWQiICUgKGJsb2Nrc1tpXS5saW5lbm8sIGJsb2Nrc1tqLTFdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gYmxvY2tzW2k6al0KKyAgICAgICAgaWYgaiA+PSBuOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZXhwciA9IGJsb2Nrc1tqXS5leHByCisgICAgICAgIHIgICAgPSBleHByLnRvSW50KCkKKyAgICAgICAgaWYgciA9PSBOb25lOgorICAgICAgICAgICAgcmVzdWx0LmFwcGVuZChibG9ja3Nbal0pCisgICAgICAgICAgICBpID0gaiArIDEKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgaWYgciA9PSAwOgorICAgICAgICAgICAgIyBpZiAwID0+IHNraXAgZXZlcnl0aGluZyB1bnRpbCB0aGUgY29ycmVzcG9uZGluZyAjZW5kaWYKKyAgICAgICAgICAgIGogPSBmaW5kX21hdGNoaW5nX2VuZGlmKCBibG9ja3MsIGorMSApCisgICAgICAgICAgICBpZiBqID49IG46CisgICAgICAgICAgICAgICAgIyB1bnRlcm1pbmF0ZWQgI2lmIDAsIGZpbmlzaCBoZXJlCisgICAgICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgICAgIGRpciA9IGJsb2Nrc1tqXS5kaXJlY3RpdmUKKyAgICAgICAgICAgIGlmIGRpciA9PSAiZW5kaWYiOgorICAgICAgICAgICAgICAgIEQyKCJyZW1vdmUgJ2lmIDAnIC4uICdlbmRpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2ldLmxpbmVubywgYmxvY2tzW2pdLmxpbmVubykpCisgICAgICAgICAgICAgICAgaSA9IGogKyAxCisgICAgICAgICAgICBlbGlmIGRpciA9PSAiZWxzZSI6CisgICAgICAgICAgICAgICAgIyBjb252ZXJ0ICdlbHNlJyBpbnRvICdpZiAxJworICAgICAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAwJyAuLiAnZWxzZScgaW50byAnaWYgMScgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2ldLmxpbmVubywgYmxvY2tzW2otMV0ubGluZW5vKSkKKyAgICAgICAgICAgICAgICBibG9ja3Nbal0uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgICAgIGJsb2Nrc1tqXS5leHByICAgICAgPSBDcHBFeHByKCBDcHBMaW5lVG9rZW5pemVyKCIxIikudG9Ub2tlbkxpc3QoKSApCisgICAgICAgICAgICAgICAgaSA9IGoKKyAgICAgICAgICAgIGVsaWYgZGlyID09ICJlbGlmIjoKKyAgICAgICAgICAgICAgICAjIGNvbnZlcnQgJ2VsaWYnIGludG8gJ2lmJworICAgICAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAwJyAuLiAnZWxpZicgaW50byAnaWYnIikKKyAgICAgICAgICAgICAgICBibG9ja3Nbal0uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgICAgIGkgPSBqCisgICAgICAgICAgICBjb250aW51ZQorCisgICAgICAgICMgaWYgMSA9PiBmaW5kIGNvcnJlc3BvbmRpbmcgZW5kaWYgYW5kIHJlbW92ZS90cmFuc2Zvcm0gdGhlbQorICAgICAgICBrID0gZmluZF9tYXRjaGluZ19lbmRpZiggYmxvY2tzLCBqKzEgKQorICAgICAgICBpZiBrID49IG46CisgICAgICAgICAgICAjIHVudGVybWluYXRlZCAjaWYgMSwgZmluaXNoIGhlcmUKKyAgICAgICAgICAgIEQyKCJ1bnRlcm1pbmF0ZWQgJ2lmIDEnIikKKyAgICAgICAgICAgIHJlc3VsdCArPSBibG9ja3NbaisxOmtdCisgICAgICAgICAgICBicmVhaworCisgICAgICAgIGRpciA9IGJsb2Nrc1trXS5kaXJlY3RpdmUKKyAgICAgICAgaWYgZGlyID09ICJlbmRpZiI6CisgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMScgLi4gJ2VuZGlmJyAobGluZXMgJWQgdG8gJWQpIiAgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW1pemVfaWYwMShibG9ja3NbaisxOmtdKQorICAgICAgICAgICAgaSAgICAgICA9IGsrMQorICAgICAgICBlbGlmIGRpciA9PSAiZWxzZSI6CisgICAgICAgICAgICAjIGNvbnZlcnQgJ2Vsc2UnIGludG8gJ2lmIDAnCisgICAgICAgICAgICBEMigiY29udmVydCAnaWYgMScgLi4gJ2Vsc2UnIChsaW5lcyAlZCB0byAlZCkiICAlIChibG9ja3Nbal0ubGluZW5vLCBibG9ja3Nba10ubGluZW5vKSkKKyAgICAgICAgICAgIHJlc3VsdCArPSBvcHRpbWl6ZV9pZjAxKGJsb2Nrc1tqKzE6a10pCisgICAgICAgICAgICBibG9ja3Nba10uZGlyZWN0aXZlID0gImlmIgorICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKKyAgICAgICAgICAgIGkgPSBrCisgICAgICAgIGVsaWYgZGlyID09ICJlbGlmIjoKKyAgICAgICAgICAgICMgY29udmVydCAnZWxpZicgaW50byAnaWYgMCcKKyAgICAgICAgICAgIEQyKCJjb252ZXJ0ICdpZiAxJyAuLiAnZWxpZicgKGxpbmVzICVkIHRvICVkKSIgJSAoYmxvY2tzW2pdLmxpbmVubywgYmxvY2tzW2tdLmxpbmVubykpCisgICAgICAgICAgICByZXN1bHQgKz0gb3B0aW1pemVfaWYwMShibG9ja3NbaisxOmtdKQorICAgICAgICAgICAgYmxvY2tzW2tdLmV4cHIgICAgICA9IENwcEV4cHIoIENwcExpbmVUb2tlbml6ZXIoIjAiKS50b1Rva2VuTGlzdCgpICkKKyAgICAgICAgICAgIGkgPSBrCisgICAgcmV0dXJuIHJlc3VsdAorCitkZWYgIHRlc3Rfb3B0aW1pemVBbGwoKToKKyAgICB0ZXh0ID0gIiIiXAorI2lmIDEKKyNkZWZpbmUgIEdPT0RfMQorI2VuZGlmCisjaWYgMAorI2RlZmluZSAgQkFEXzIKKyNkZWZpbmUgIEJBRF8zCisjZW5kaWYKKworI2lmIDEKKyNkZWZpbmUgIEdPT0RfMgorI2Vsc2UKKyNkZWZpbmUgIEJBRF80CisjZW5kaWYKKworI2lmIDAKKyNkZWZpbmUgIEJBRF81CisjZWxzZQorI2RlZmluZSAgR09PRF8zCisjZW5kaWYKKworI2lmIDAKKyNpZiAxCisjZGVmaW5lICBCQURfNgorI2VuZGlmCisjZW5kaWZcCisiIiIKKworICAgIGV4cGVjdGVkID0gIiIiXAorI2RlZmluZSBHT09EXzEKKworI2RlZmluZSBHT09EXzIKKworI2RlZmluZSBHT09EXzMKKworIiIiCisKKyAgICBwcmludCAicnVubmluZyB0ZXN0X0Jsb2NrTGlzdC5vcHRpbWl6ZUFsbCIKKyAgICBvdXQgPSBTdHJpbmdPdXRwdXQoKQorICAgIGxpbmVzID0gc3RyaW5nLnNwbGl0KHRleHQsICdcbicpCisgICAgbGlzdCA9IEJsb2NrUGFyc2VyKCkucGFyc2UoIENwcExpbmVzVG9rZW5pemVyKGxpbmVzKSApCisgICAgI0Rfc2V0bGV2ZWwoMikKKyAgICBsaXN0Lm9wdGltaXplQWxsKCB7Il9fS0VSTkVMX18iOmtDcHBVbmRlZmluZWRNYWNyb30gKQorICAgICNwcmludCByZXByKGxpc3QpCisgICAgbGlzdC53cml0ZShvdXQpCisgICAgaWYgb3V0LmdldCgpICE9IGV4cGVjdGVkOgorICAgICAgICBwcmludCAiS086IG1hY3JvIG9wdGltaXphdGlvbiBmYWlsZWRcbiIKKyAgICAgICAgcHJpbnQgIjw8PDwgZXhwZWN0aW5nICciLAorICAgICAgICBwcmludCBleHBlY3RlZCwKKyAgICAgICAgcHJpbnQgIidcbj4+Pj4gcmVzdWx0ICciCisgICAgICAgIHByaW50IG91dC5nZXQoKSwKKyAgICAgICAgcHJpbnQgIidcbi0tLS0iCisKKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitkZWYgcnVuVW5pdFRlc3RzKCk6CisgICAgIiIicnVuIGFsbCB1bml0IHRlc3RzIGZvciB0aGlzIHByb2dyYW0iIiIKKyAgICBwcmludCAicnVubmluZyB1bml0IHRlc3RzIgorICAgIHRlc3RfQ3BwVG9rZW5pemVyKCkKKyAgICB0ZXN0X0NwcEV4cHIoKQorICAgIHRlc3Rfb3B0aW1pemVBbGwoKQorICAgIHRlc3RfQmxvY2tQYXJzZXIoKQorICAgIHByaW50ICJPSyIKKworaWYgX19uYW1lX18gPT0gIl9fbWFpbl9fIjoKKyAgICBydW5Vbml0VGVzdHMoKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkgYi9saWJjL2tlcm5lbC90b29scy9kZWZhdWx0cy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41OTJkOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvZGVmYXVsdHMucHkKQEAgLTAsMCArMSw4MyBAQAorIyB0aGlzIG1vZHVsZSBjb250YWlucyBhbGwgdGhlIGRlZmF1bHRzIHVzZWQgYnkgdGhlIGdlbmVyYXRpb24gb2YgY2xlYW5lZC11cCBoZWFkZXJzCisjIGZvciB0aGUgQmlvbmljIEMgbGlicmFyeQorIworCitpbXBvcnQgdGltZSwgb3MsIHN5cworZnJvbSB1dGlscyBpbXBvcnQgKgorCisjIHRoZSBsaXN0IG9mIHN1cHBvcnRlZCBhcmNoaXRlY3R1cmVzCisjCitrZXJuZWxfYXJjaHMgPSBbICdhcm0nLCAneDg2JyBdCisKKyMgdGhlIGxpc3Qgb2YgaW5jbHVkZSBkaXJlY3RvcmllcyB0aGF0IGJlbG9uZyB0byB0aGUga2VybmVsCisjIHRyZWUuIHVzZWQgd2hlbiBsb29raW5nIGZvciBzb3VyY2VzLi4uCisjCitrZXJuZWxfZGlycyA9IFsgImxpbnV4IiwgImFzbSIsICJhc20tZ2VuZXJpYyIsICJtdGQiIF0KKworIyBwYXRoIHRvIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUgb3JpZ2luYWwga2VybmVsIGhlYWRlcnMKKyMKK2tlcm5lbF9vcmlnaW5hbF9wYXRoID0gb3MucGF0aC5ub3JtcGF0aCggZmluZF9wcm9ncmFtX2RpcigpICsgJy8uLi9vcmlnaW5hbCcgKQorCisjIGEgc3BlY2lhbCB2YWx1ZSB0aGF0IGlzIHVzZWQgdG8gaW5kaWNhdGUgdGhhdCBhIGdpdmVuIG1hY3JvIGlzIGtub3duIHRvIGJlCisjIHVuZGVmaW5lZCBkdXJpbmcgb3B0aW1pemF0aW9uCitrQ3BwVW5kZWZpbmVkTWFjcm8gPSAiPDw8dW5kZWZpbmVkPj4+IgorCisjIHRoaXMgaXMgdGhlIHNldCBvZiBrbm93biBtYWNyb3Mgd2Ugd2FudCB0byB0b3RhbGx5IG9wdGltaXplIG91dCBmcm9tIHRoZQorIyBmaW5hbCBoZWFkZXJzCitrZXJuZWxfa25vd25fbWFjcm9zID0geworICAgICJfX0tFUk5FTF9fIjoga0NwcFVuZGVmaW5lZE1hY3JvLAorICAgICJfX0tFUk5FTF9TVFJJQ1RfTkFNRVMiOiIxIiwKKyAgICAiX19DSEVDS0VSX18iOiBrQ3BwVW5kZWZpbmVkTWFjcm8sCisgICAgIl9fQ0hFQ0tfRU5ESUFOX18iOiBrQ3BwVW5kZWZpbmVkTWFjcm8sCisgICAgfQorCisjIGRlZmluZSB0byB0cnVlIGlmIHlvdSB3YW50IHRvIHJlbW92ZSBhbGwgZGVmaW5lZChDT05GSUdfRk9PKSB0ZXN0cworIyBmcm9tIHRoZSBjbGVhbiBoZWFkZXJzLiB0ZXN0aW5nIHNob3dzIHRoYXQgdGhpcyBpcyBub3Qgc3RyaWN0bHkgbmVjZXNzYXJ5CisjIGJ1dCBqdXN0IGdlbmVyYXRlcyBjbGVhbmVyIHJlc3VsdHMKK2tlcm5lbF9yZW1vdmVfY29uZmlnX21hY3JvcyA9IFRydWUKKworIyB0aGlzIGlzIHRoZSBzZXQgb2Yga25vd24gc3RhdGljIGlubGluZSBmdW5jdGlvbnMgdGhhdCB3ZSB3YW50IHRvIGtlZXAKKyMgaW4gdGhlIGZpbmFsIEFSTSBoZWFkZXJzLiB0aGlzIGlzIG9ubHkgdXNlZCB0byBrZWVwIG9wdGltaXplZCBieXRlc3dhcHBpbmcKKyMgc3RhdGljIGZ1bmN0aW9ucyBhbmQgc3R1ZmYgbGlrZSB0aGF0Lgora2VybmVsX2tub3duX2FybV9zdGF0aWNzID0gc2V0KAorICAgICAgIFsgIl9fX2FyY2hfX3N3YWIzMiIsICAgICMgYXNtLWFybS9ieXRlb3JkZXIuaAorICAgICAgIF0KKyAgICApCisKK2tlcm5lbF9rbm93bl94ODZfc3RhdGljcyA9IHNldCgKKyAgICAgICAgWyAiX19fYXJjaF9fc3dhYjMyIiwgICMgYXNtLXg4Ni9ieXRlb3JkZXIuaAorICAgICAgICAgICJfX19hcmNoX19zd2FiNjQiLCAgIyBhc20teDg2L2J5dGVvcmRlci5oCisgICAgICAgIF0KKyAgICApCisKK2tlcm5lbF9rbm93bl9nZW5lcmljX3N0YXRpY3MgPSBzZXQoCisgICAgICAgIFsgIl9faW52YWxpZF9zaXplX2FyZ3VtZW50X2Zvcl9JT0MiLCAgIyBhc20tZ2VuZXJpYy9pb2N0bC5oCisgICAgICAgICAgIl9fY21zZ19ueHRoZHIiLCAgICAgICAgICAgICAgICAgICAgIyBsaW51eC9zb2NrZXQuaAorICAgICAgICAgICJjbXNnX254dGhkciIsICAgICAgICAgICAgICAgICAgICAgICMgbGludXgvc29ja2V0LmgKKyAgICAgICAgICAiaXB0X2dldF90YXJnZXQiLAorICAgICAgICBdCisgICAgKQorCisjIHRoaXMgbWFwcyBhbiBhcmNoaXRlY3R1cmUgdG8gdGhlIHNldCBvZiBzdGF0aWMgaW5saW5lIGZ1bmN0aW9ucyB0aGF0CisjIHdlIHdhbnQgdG8ga2VlcCBpbiB0aGUgZmluYWwgaGVhZGVycworIwora2VybmVsX2tub3duX3N0YXRpY3MgPSB7CisgICAgICAgICJhcm0iIDoga2VybmVsX2tub3duX2FybV9zdGF0aWNzLAorICAgICAgICAieDg2IiA6IGtlcm5lbF9rbm93bl94ODZfc3RhdGljcworICAgIH0KKworIyB0aGlzIGlzIHRoZSBzdGFuZGFyZCBkaXNjbGFpbWVyCisjCitrZXJuZWxfZGlzY2xhaW1lciA9ICIiIlwKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoqKgorICoqKiAgIFRoaXMgaGVhZGVyIHdhcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBmcm9tIGEgTGludXgga2VybmVsIGhlYWRlcgorICoqKiAgIG9mIHRoZSBzYW1lIG5hbWUsIHRvIG1ha2UgaW5mb3JtYXRpb24gbmVjZXNzYXJ5IGZvciB1c2Vyc3BhY2UgdG8KKyAqKiogICBjYWxsIGludG8gdGhlIGtlcm5lbCBhdmFpbGFibGUgdG8gbGliYy4gIEl0IGNvbnRhaW5zIG9ubHkgY29uc3RhbnRzLAorICoqKiAgIHN0cnVjdHVyZXMsIGFuZCBtYWNyb3MgZ2VuZXJhdGVkIGZyb20gdGhlIG9yaWdpbmFsIGhlYWRlciwgYW5kIHRodXMsCisgKioqICAgY29udGFpbnMgbm8gY29weXJpZ2h0YWJsZSBpbmZvcm1hdGlvbi4KKyAqKioKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKyIiIgpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZmluZF9oZWFkZXJzLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMvZmluZF9oZWFkZXJzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLjhlNzJiYjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC90b29scy9maW5kX2hlYWRlcnMucHkKQEAgLTAsMCArMSwxNzUgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworIyB0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBmaW5kIHNvdXJjZSBjb2RlIHRoYXQgaW5jbHVkZXMgbGludXgga2VybmVsIGhlYWRlcnMgZGlyZWN0bHkKKyMgKGUuZy4gd2l0aCAjaW5jbHVkZSA8bGludXgvLi4uPiBvciAjaW5jbHVkZSA8YXNtLy4uLj4pCisjCisjIHRoZW4gaXQgbGlzdHMKKworaW1wb3J0IHN5cywgY3BwLCBnbG9iLCBvcywgcmUsIGdldG9wdCwga2VybmVsCitmcm9tIHV0aWxzIGltcG9ydCAqCitmcm9tIGRlZmF1bHRzIGltcG9ydCAqCisKK3Byb2dyYW1fZGlyID0gZmluZF9wcm9ncmFtX2RpcigpCisKK3dhbnRlZF9hcmNocyAgID0ga2VybmVsX2FyY2hzCit3YW50ZWRfaW5jbHVkZSA9IG9zLnBhdGgubm9ybXBhdGgocHJvZ3JhbV9kaXIgKyAnLy4uL29yaWdpbmFsJykKK3dhbnRlZF9jb25maWcgID0gb3MucGF0aC5ub3JtcGF0aChwcm9ncmFtX2RpciArICcvLi4vb3JpZ2luYWwvY29uZmlnJykKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQgIiIiXAorICB1c2FnZTogIGZpbmRfaGVhZGVycy5weSBbb3B0aW9uc10gKGZpbGV8ZGlyZWN0b3J5fEBsaXN0ZmlsZSkrCisKKyAgICAgb3B0aW9uczoKKyAgICAgICAgLWQgPGluY2x1ZGUtZGlyPiAgIHNwZWNpZnkgYWx0ZXJuYXRlIGtlcm5lbCBoZWFkZXJzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAnaW5jbHVkZScgZGlyZWN0b3J5CisgICAgICAgICAgICAgICAgICAgICAgICAgICAoJyVzJyBieSBkZWZhdWx0KQorCisgICAgICAgIC1jIDxmaWxlPiAgICAgICAgICBzcGVjaWZ5IGFsdGVybmF0ZSAuY29uZmlnIGZpbGUKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJXMnIGJ5IGRlZmF1bHQpCisKKyAgICAgICAgLWEgPGFyY2hzPiAgICAgICAgIHVzZWQgdG8gc3BlY2lmeSBhbiBhbHRlcm5hdGl2ZSBsaXN0CisgICAgICAgICAgICAgICAgICAgICAgICAgICBvZiBhcmNoaXRlY3R1cmVzIHRvIHN1cHBvcnQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgnJXMnIGJ5IGRlZmF1bHQpCisKKyAgICAgICAgLXYgICAgICAgICAgICAgICAgIGVuYWJsZSB2ZXJib3NlIG1vZGUKKworICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGZpbmQgYWxsIHRoZSBrZXJuZWwgaGVhZGVycyB0aGF0IGFyZSB1c2VkCisgICAgYnkgYSBzZXQgb2Ygc291cmNlIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGNvbnRhaW5pbmcgdGhlbS4gdGhlIHNlYXJjaAorICAgIGlzIHJlY3Vyc2l2ZSB0byBmaW5kICphbGwqIHJlcXVpcmVkIGZpbGVzLgorCisiIiIgJSAoIHdhbnRlZF9pbmNsdWRlLCB3YW50ZWRfY29uZmlnLCBzdHJpbmcuam9pbihrZXJuZWxfYXJjaHMsIiwiKSApCisgICAgc3lzLmV4aXQoMSkKKworCit0cnk6CisgICAgb3B0bGlzdCwgYXJncyA9IGdldG9wdC5nZXRvcHQoIHN5cy5hcmd2WzE6XSwgJ3ZjOmQ6YTonICkKK2V4Y2VwdDoKKyAgICAjIHVucmVjb2duaXplZCBvcHRpb24KKyAgICBwcmludCAiZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb24iCisgICAgdXNhZ2UoKQorCitmb3Igb3B0LCBhcmcgaW4gb3B0bGlzdDoKKyAgICBpZiBvcHQgPT0gJy1hJzoKKyAgICAgICAgd2FudGVkX2FyY2hzID0gc3RyaW5nLnNwbGl0KGFyZywnLCcpCisgICAgZWxpZiBvcHQgPT0gJy1kJzoKKyAgICAgICAgd2FudGVkX2luY2x1ZGUgPSBhcmcKKyAgICBlbGlmIG9wdCA9PSAnLWMnOgorICAgICAgICB3YW50ZWRfY29uZmlnID0gYXJnCisgICAgZWxpZiBvcHQgPT0gJy12JzoKKyAgICAgICAga2VybmVsLnZlcmJvc2VTZWFyY2ggPSAxCisgICAgICAgIGtlcm5lbC52ZXJib3NlRmluZCAgID0gMQorICAgICAgICB2ZXJib3NlID0gMQorICAgIGVsc2U6CisgICAgICAgIHVzYWdlKCkKKworaWYgbGVuKGFyZ3MpIDwgMToKKyAgICB1c2FnZSgpCisKK2tlcm5lbF9yb290ID0gd2FudGVkX2luY2x1ZGUKK2lmIG5vdCBvcy5wYXRoLmV4aXN0cyhrZXJuZWxfcm9vdCk6CisgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBkaXJlY3RvcnkgJyVzJyBkb2VzIG5vdCBleGlzdFxuIiAlIGtlcm5lbF9yb290ICkKKyAgICBzeXMuZXhpdCgxKQorCitpZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfcm9vdCk6CisgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGlzIG5vdCBhIGRpcmVjdG9yeVxuIiAlIGtlcm5lbF9yb290ICkKKyAgICBzeXMuZXhpdCgxKQorCitpZiBub3Qgb3MucGF0aC5pc2RpcihrZXJuZWxfcm9vdCsiL2xpbnV4Iik6CisgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGRvZXMgbm90IGhhdmUgYSAnbGludXgnIGRpcmVjdG9yeVxuIiAlIGtlcm5lbF9yb290ICkKKyAgICBzeXMuZXhpdCgxKQorCitpZiBub3Qgb3MucGF0aC5leGlzdHMod2FudGVkX2NvbmZpZyk6CisgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiBmaWxlICclcycgZG9lcyBub3QgZXhpc3RcbiIgJSB3YW50ZWRfY29uZmlnICkKKyAgICBzeXMuZXhpdCgxKQorCitpZiBub3Qgb3MucGF0aC5pc2ZpbGUod2FudGVkX2NvbmZpZyk6CisgICAgc3lzLnN0ZGVyci53cml0ZSggImVycm9yOiAnJXMnIGlzIG5vdCBhIGZpbGVcbiIgJSB3YW50ZWRfY29uZmlnICkKKyAgICBzeXMuZXhpdCgxKQorCisjIGZpbmQgYWxsIGFyY2hpdGVjdHVyZXMgaW4gdGhlIGtlcm5lbCB0cmVlCityZV9hc21fID0gcmUuY29tcGlsZShyImFzbS0oXHcrKSIpCithcmNocyAgID0gW10KK2ZvciBkaXIgaW4gb3MubGlzdGRpcihrZXJuZWxfcm9vdCk6CisgICAgbSA9IHJlX2FzbV8ubWF0Y2goZGlyKQorICAgIGlmIG06CisgICAgICAgIGlmIHZlcmJvc2U6IHByaW50ICI+PiBmb3VuZCBrZXJuZWwgYXJjaCAnJXMnIiAlIG0uZ3JvdXAoMSkKKyAgICAgICAgYXJjaHMuYXBwZW5kKG0uZ3JvdXAoMSkpCisKKyMgaWYgd2UncmUgdXNpbmcgdGhlICdrZXJuZWxfaGVhZGVycycgZGlyZWN0b3J5LCB0aGVyZSBpcyBvbmx5IGFzbS8KKyMgYW5kIG5vIG90aGVyIGFzbS08YXJjaD4gZGlyZWN0b3JpZXMgKGFybSBpcyBhc3N1bWVkLCB3aGljaCBzdWNrcykKKyMKK2luX2tlcm5lbF9oZWFkZXJzID0gRmFsc2UKK2lmIGxlbihhcmNocykgPT0gMDoKKyAgICAjIHRoaXMgY2FuIGhhcHBlbiB3aGVuIHdlJ3JlIHVzaW5nIHRoZSAna2VybmVsX2hlYWRlcnMnIGRpcmVjdG9yeQorICAgIGlmIG9zLnBhdGguaXNkaXIoa2VybmVsX3Jvb3QrIi9hc20iKToKKyAgICAgICAgaW5fa2VybmVsX2hlYWRlcnMgPSBUcnVlCisgICAgICAgIGFyY2hzID0gWyAiYXJtIiBdCisKKyMgaWYgdGhlIHVzZXIgaGFzIHNwZWNpZmllZCBzb21lIGFyY2hpdGVjdHVyZXMgd2l0aCAtYSA8YXJjaHM+IGVuc3VyZSB0aGF0CisjIGFsbCB0aG9zZSBoZSB3YW50cyBhcmUgYXZhaWxhYmxlIGZyb20gdGhlIGtlcm5lbCBpbmNsdWRlIHRyZWUKK2lmIHdhbnRlZF9hcmNocyAhPSBOb25lOgorICAgIGlmIGluX2tlcm5lbF9oZWFkZXJzIGFuZCB3YW50ZWRfYXJjaHMgIT0gWyAiYXJtIiBdOgorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHdoZW4gcGFyc2luZyBrZXJuZWxfaGVhZGVycywgJ2FybScgYXJjaGl0ZWN0dXJlIG9ubHkgaXMgc3VwcG9ydGVkIGF0IHRoZSBtb21lbnRcbiIgKQorICAgICAgICBzeXMuZXhpdCgxKQorICAgIG1pc3NpbmcgPSBbXQorICAgIGZvciBhcmNoIGluIHdhbnRlZF9hcmNoczoKKyAgICAgICAgaWYgYXJjaCBub3QgaW4gYXJjaHM6CisgICAgICAgICAgICBtaXNzaW5nLmFwcGVuZChhcmNoKQorICAgIGlmIGxlbihtaXNzaW5nKSA+IDA6CisgICAgICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogdGhlIGZvbGxvd2luZyByZXF1ZXN0ZWQgYXJjaGl0ZWN0dXJlcyBhcmUgbm90IGluIHRoZSBrZXJuZWwgdHJlZTogIiApCisgICAgICAgIGZvciBhIGluIG1pc3Npbmc6CisgICAgICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiICVzIiAlIGEgKQorICAgICAgICBzeXMuc3RkZXJyLndyaXRlKCAiXG4iICkKKyAgICAgICAgc3lzLmV4aXQoMSkKKworICAgIGFyY2hzID0gd2FudGVkX2FyY2hzCisKKyMgaGVscGVyIGZ1bmN0aW9uIHVzZWQgdG8gd2FsayB0aGUgdXNlciBmaWxlcworZGVmIHBhcnNlX2ZpbGUocGF0aCwgcGFyc2VyKToKKyAgICBwYXJzZXIucGFyc2VGaWxlKHBhdGgpCisKKworIyByZW1vdmUgcHJldmlvdXMgZGVzdGluYXRpb24gZGlyZWN0b3J5CisjZGVzdGRpciA9ICIvdG1wL2Jpb25pYy1rZXJuZWwtaGVhZGVycy8iCisjY2xlYW51cF9kaXIoZGVzdGRpcikKKworIyB0cnkgdG8gcmVhZCB0aGUgY29uZmlnIGZpbGUKK3RyeToKKyAgICBjcGFyc2VyID0ga2VybmVsLkNvbmZpZ1BhcnNlcigpCisgICAgY3BhcnNlci5wYXJzZUZpbGUoIHdhbnRlZF9jb25maWcgKQorZXhjZXB0OgorICAgIHN5cy5zdGRlcnIud3JpdGUoICJlcnJvcjogY2FuJ3QgcGFyc2UgJyVzJyIgJSB3YW50ZWRfY29uZmlnICkKKyAgICBzeXMuZXhpdCgxKQorCitrZXJuZWxfY29uZmlnID0gY3BhcnNlci5nZXREZWZpbml0aW9ucygpCisKKyMgZmlyc3QsIG9idGFpbiB0aGUgbGlzdCBvZiBrZXJuZWwgZmlsZXMgdXNlZCBieSBvdXIgY2xpZW50cworZnBhcnNlciA9IGtlcm5lbC5IZWFkZXJTY2FubmVyKCkKK3dhbGtfc291cmNlX2ZpbGVzKCBhcmdzLCBwYXJzZV9maWxlLCBmcGFyc2VyLCBleGNsdWRlcz1bImtlcm5lbF9oZWFkZXJzIl0gKQoraGVhZGVycyA9IGZwYXJzZXIuZ2V0SGVhZGVycygpCitmaWxlcyAgID0gZnBhcnNlci5nZXRGaWxlcygpCisKKyMgbm93IHJlY3Vyc2l2ZWx5IHNjYW4gdGhlIGtlcm5lbCBoZWFkZXJzIGZvciBhZGRpdGlvbm5hbCBzdWItaW5jbHVkZWQgaGVhZGVycworaHBhcnNlciA9IGtlcm5lbC5LZXJuZWxIZWFkZXJGaW5kZXIoaGVhZGVycyxhcmNocyxrZXJuZWxfcm9vdCxrZXJuZWxfY29uZmlnKQoraGVhZGVycyA9IGhwYXJzZXIuc2NhbkZvckFsbEFyY2hzKCkKKworaWYgMDogICAgIyBqdXN0IGZvciBkZWJ1Z2dpbmcKKyAgICBkdW1wSGVhZGVyVXNlcnMgPSBGYWxzZQorCisgICAgcHJpbnQgInRoZSBmb2xsb3dpbmcgJWQgaGVhZGVyczoiICUgbGVuKGhlYWRlcnMpCisgICAgZm9yIGggaW4gc29ydGVkKGhlYWRlcnMpOgorICAgICAgICBpZiBkdW1wSGVhZGVyVXNlcnM6CisgICAgICAgICAgICBwcmludCAiICAlcyAoJXMpIiAlIChoLCByZXByKGhwYXJzZXIuZ2V0SGVhZGVyVXNlcnMoaCkpKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcHJpbnQgIiAgJXMiICUgaAorCisgICAgcHJpbnQgImFyZSB1c2VkIGJ5IHRoZSBmb2xsb3dpbmcgJWQgZmlsZXM6IiAlIGxlbihmaWxlcykKKyAgICBmb3IgZiBpbiBzb3J0ZWQoZmlsZXMpOgorICAgICAgICBwcmludCAiICAlcyIgJSBmCisKKyAgICBzeXMuZXhpdCgwKQorCitmb3IgaCBpbiBzb3J0ZWQoaGVhZGVycyk6CisgICAgcHJpbnQgaAorCitzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvZmluZF91c2Vycy5weSBiL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfdXNlcnMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNWVlMzA4YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL2ZpbmRfdXNlcnMucHkKQEAgLTAsMCArMSw2MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCisjIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIGZpbmQgc291cmNlIGNvZGUgdGhhdCBpbmNsdWRlcyBsaW51eCBrZXJuZWwgaGVhZGVycyBkaXJlY3RseQorIyAoZS5nLiB3aXRoICNpbmNsdWRlIDxsaW51eC8uLi4+IG9yICNpbmNsdWRlIDxhc20vLi4uPikKKyMKKyMgdGhlbiBpdCBsaXN0cworCitpbXBvcnQgc3lzLCBjcHAsIGdsb2IsIG9zLCByZSwgZ2V0b3B0CitpbXBvcnQga2VybmVsCitmcm9tIHV0aWxzIGltcG9ydCAqCitmcm9tIGRlZmF1bHRzIGltcG9ydCAqCisKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQgIiIiXAorICB1c2FnZTogIGZpbmRfdXNlcnMucHkgWy12XSAoZmlsZXxkaXJlY3Rvcnl8QGxpc3RmaWxlKSsKKworICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHNjYW4gYSBsaXN0IG9mIGZpbGVzIG9yIGRpcmVjdG9yaWVzIGZvcgorICAgIHNvdXJjZXMgdGhhdCBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIGRpcmVjdGx5LiB0aGUgcHJvZ3JhbSBwcmludHMKKyAgICB0aGUgbGlzdCBvZiBzYWlkIHNvdXJjZSBmaWxlcyB3aGVuIGl0J3MgZG9uZS4KKworICAgIHdoZW4gc2Nhbm5pbmcgZGlyZWN0b3JpZXMsIG9ubHkgZmlsZXMgbWF0Y2hpbmcgdGhlIGZvbGxvd2luZworICAgIGV4dGVuc2lvbiB3aWxsIGJlIHNlYXJjaGVkOiAuYyAuY3BwIC5TIC5oCisKKyAgICB1c2UgLXYgdG8gZW5hYmxlIHZlcmJvc2Ugb3V0cHV0CisiIiIKKyAgICBzeXMuZXhpdCgxKQorCisKK3RyeToKKyAgICBvcHRsaXN0LCBhcmdzID0gZ2V0b3B0LmdldG9wdCggc3lzLmFyZ3ZbMTpdLCAndicgKQorZXhjZXB0OgorICAgICMgdW5yZWNvZ25pemVkIG9wdGlvbgorICAgIHByaW50ICJlcnJvcjogdW5yZWNvZ25pemVkIG9wdGlvbiIKKyAgICB1c2FnZSgpCisKK2ZvciBvcHQsIGFyZyBpbiBvcHRsaXN0OgorICAgIGlmIG9wdCA9PSAnLXYnOgorICAgICAgICBrZXJuZWwudmVyYm9zZVNlYXJjaCA9IDEKKyAgICAgICAga2VybmVsLnZlcmJvc2VGaW5kICAgPSAxCisgICAgZWxzZToKKyAgICAgICAgdXNhZ2UoKQorCitpZiBsZW4oYXJncykgPCAxOgorICAgIHVzYWdlKCkKKworIyBoZWxwZXIgZnVuY3Rpb24gdXNlZCB0byB3YWxrIHRoZSB1c2VyIGZpbGVzCitkZWYgcGFyc2VfZmlsZShwYXRoLCBwYXJzZXIpOgorICAgIHBhcnNlci5wYXJzZUZpbGUocGF0aCkKKworCisjIGZpcnN0LCBvYnRhaW4gdGhlIGxpc3Qgb2Yga2VybmVsIGZpbGVzIHVzZWQgYnkgb3VyIGNsaWVudHMKKyMgYXZvaWQgcGFyc2luZyB0aGUgJ2tlcm5lbF9oZWFkZXJzJyBkaXJlY3RvcnkgaXRzZWxmIHNpbmNlIHdlCisjIHVzZSB0aGlzIHByb2dyYW0gd2l0aCB0aGUgQW5kcm9pZCBzb3VyY2UgdHJlZSBieSBkZWZhdWx0LgorIworZnBhcnNlciA9IGtlcm5lbC5IZWFkZXJTY2FubmVyKCkKK3dhbGtfc291cmNlX2ZpbGVzKCBhcmdzLCBwYXJzZV9maWxlLCBmcGFyc2VyLCBleGNsdWRlcz1bImtlcm5lbF9oZWFkZXJzIiwib3JpZ2luYWwiXSApCitmaWxlcyAgID0gZnBhcnNlci5nZXRGaWxlcygpCisKK2ZvciBmIGluIHNvcnRlZChmaWxlcyk6CisgICAgcHJpbnQgZgorCitzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMva2VybmVsLnB5IGIvbGliYy9rZXJuZWwvdG9vbHMva2VybmVsLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiYTkxNTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL2tlcm5lbC90b29scy9rZXJuZWwucHkKQEAgLTAsMCArMSwzMTQgQEAKKyMgdGhpcyBmaWxlIGNvbnRhaW5zIGRlZmluaXRpb25zIHJlbGF0ZWQgdG8gdGhlIExpbnV4IGtlcm5lbCBpdHNlbGYKKyMKKworIyBsaXN0IGhlcmUgdGhlIG1hY3JvcyB0aGF0IHlvdSBrbm93IGFyZSBhbHdheXMgZGVmaW5lZC91bmRlZmluZWQgd2hlbiBpbmNsdWRpbmcKKyMgdGhlIGtlcm5lbCBoZWFkZXJzCisjCitpbXBvcnQgc3lzLCBjcHAsIHJlLCBvcy5wYXRoLCBzdHJpbmcsIHRpbWUKK2Zyb20gZGVmYXVsdHMgaW1wb3J0ICoKKwordmVyYm9zZVNlYXJjaCA9IDAKK3ZlcmJvc2VGaW5kICAgPSAwCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICBIIEUgQSBEIEUgUiAgIFMgQyBBIE4gTiBFIFIgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCisKK2NsYXNzIEhlYWRlclNjYW5uZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIG5vbi1yZWN1cnNpdmVseSBkZXRlY3Qgd2hpY2ggTGludXgga2VybmVsIGhlYWRlcnMgYXJlCisgICAgICAgdXNlZCBieSBhIGdpdmVuIHNldCBvZiBpbnB1dCBzb3VyY2UgZmlsZXMiIiIKKworICAgICMgdG8gdXNlIHRoZSBIZWFkZXJTY2FubmVyLCBkbyB0aGUgZm9sbG93aW5nOgorICAgICMKKyAgICAjICAgIHNjYW5uZXIgPSBIZWFkZXJTY2FubmVyKCkKKyAgICAjICAgIGZvciBwYXRoIGluIDx5b3VyIGxpc3Qgb2YgZmlsZXM+OgorICAgICMgICAgICAgIHNjYW5uZXIucGFyc2VGaWxlKHBhdGgpCisgICAgIworICAgICMgICAgIyBnZXQgdGhlIHNldCBvZiBMaW51eCBoZWFkZXJzIGluY2x1ZGVkIGJ5IHlvdXIgZmlsZXMKKyAgICAjICAgIGhlYWRlcnMgPSBzY2FubmVyLmdldEhlYWRlcnMoKQorICAgICMKKyAgICAjICAgICMgZ2V0IHRoZSBzZXQgb2Ygb2YgaW5wdXQgZmlsZXMgdGhhdCBkbyBpbmNsdWRlIExpbnV4IGhlYWRlcnMKKyAgICAjICAgIGZpbGVzICAgPSBzY2FubmVyLmdldEZpbGVzKCkKKyAgICAjCisgICAgIyAgICBub3RlIHRoYXQgdGhlIHJlc3VsdCBvZiBnZXRIZWFkZXJzKCkgaXMgYSBzZXQgb2Ygc3RyaW5ncywgZWFjaCBvbmUKKyAgICAjICAgIGNvcnJlc3BvbmRpbmcgdG8gYSBub24tYnJhY2tldGVkIHBhdGggbmFtZSwgZS5nLjoKKyAgICAjCisgICAgIyAgICAgICAgc2V0KCJsaW51eC90eXBlcyIsImFzbS90eXBlcy5oIikKKyAgICAjCisKKyAgICAjIHRoZSBkZWZhdWx0IGFsZ29yaXRobSBpcyBwcmV0dHkgc21hcnQgYW5kIHdpbGwgYW5hbHl6ZSB0aGUgaW5wdXQKKyAgICAjIGZpbGVzIHdpdGggYSBjdXN0b20gQyBwcmUtcHJvY2Vzc29yIGluIG9yZGVyIHRvIG9wdGltaXplIG91dCBtYWNyb3MsCisgICAgIyBnZXQgcmlkIG9mIGNvbW1lbnRzLCBlbXB0eSBsaW5lcywgZXRjLi4KKyAgICAjCisgICAgIyB0aGlzIGF2b2lkcyBtYW55IGFubm95aW5nIGZhbHNlIHBvc2l0aXZlcy4uLiAhIQorICAgICMKKworICAgICMgdGhpcyByZWd1bGFyIGV4cHJlc3Npb24gaXMgdXNlZCB0byBkZXRlY3QgaW5jbHVkZSBwYXRocyB0aGF0IHJlbGF0ZSB0bworICAgICMgdGhlIGtlcm5lbCwgYnkgZGVmYXVsdCwgaXQgc2VsZWN0cyBvbmUgb2Y6CisgICAgIyAgICA8bGludXgvKj4KKyAgICAjICAgIDxhc20vKj4KKyAgICAjICAgIDxhc20tZ2VuZXJpYy8qPgorICAgICMgICAgPG10ZC8qPgorICAgICMKKyAgICByZV9jb21iaW5lZCA9XAorICAgICAgIHJlLmNvbXBpbGUociJeLio8KCglcykvW1xkXHdfXCtcLlwtL10qKT4uKiQiICUgc3RyaW5nLmpvaW4oa2VybmVsX2RpcnMsInwiKSApCisKKyAgICBkZWYgX19pbml0X18oc2VsZixjb25maWc9e30pOgorICAgICAgICAiIiJpbml0aWFsaXplIGEgSGVhZGVyU2Nhbm5lciIiIgorICAgICAgICBzZWxmLnJlc2V0KCkKKyAgICAgICAgc2VsZi5jb25maWcgPSBjb25maWcKKworICAgIGRlZiByZXNldChzZWxmLGNvbmZpZz17fSk6CisgICAgICAgIHNlbGYuZmlsZXMgICAgPSBzZXQoKSAgIyBzZXQgb2YgZmlsZXMgYmVpbmcgcGFyc2VkIGZvciBoZWFkZXJzCisgICAgICAgIHNlbGYuaGVhZGVycyAgPSB7fSAgICAgIyBtYXBzIGhlYWRlcnMgdG8gc2V0IG9mIHVzZXJzCisgICAgICAgIHNlbGYuY29uZmlnICAgPSBjb25maWcKKworICAgIGRlZiBjaGVja0luY2x1ZGUoc2VsZixsaW5lLGZyb21fZmlsZSk6CisgICAgICAgIG0gPSBIZWFkZXJTY2FubmVyLnJlX2NvbWJpbmVkLm1hdGNoKGxpbmUpCisgICAgICAgIGlmIG5vdCBtOiByZXR1cm4KKworICAgICAgICBoZWFkZXIgPSBtLmdyb3VwKDEpCisgICAgICAgIGlmIGZyb21fZmlsZToKKyAgICAgICAgICAgIHNlbGYuZmlsZXMuYWRkKGZyb21fZmlsZSkKKworICAgICAgICBpZiBub3QgaGVhZGVyIGluIHNlbGYuaGVhZGVyczoKKyAgICAgICAgICAgIHNlbGYuaGVhZGVyc1toZWFkZXJdID0gc2V0KCkKKworICAgICAgICBpZiBmcm9tX2ZpbGU6CisgICAgICAgICAgICBpZiB2ZXJib3NlRmluZDoKKyAgICAgICAgICAgICAgICBwcmludCAiPT09ICVzIHVzZXMgJXMiICUgKGZyb21fZmlsZSwgaGVhZGVyKQorICAgICAgICAgICAgc2VsZi5oZWFkZXJzW2hlYWRlcl0uYWRkKGZyb21fZmlsZSkKKworICAgIGRlZiBwYXJzZUZpbGUoc2VsZixwYXRoKToKKyAgICAgICAgIiIicGFyc2UgYSBnaXZlbiBmaWxlIGZvciBMaW51eCBoZWFkZXJzIiIiCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgICMgc2luY2UgdG9rZW5pemluZyB0aGUgZmlsZSBpcyB2ZXJ5IHNsb3csIHdlIGZpcnN0IHRyeSBhIHF1aWNrIGdyZXAKKyAgICAgICAgIyB0byBzZWUgaWYgdGhpcyByZXR1cm5zIGFueSBtZWFuaW5nZnVsIHJlc3VsdHMuIG9ubHkgaWYgdGhpcyBpcyB0cnVlCisgICAgICAgICMgZG8gd2UgZG8gdGhlIHRva2VuaXphdGlvbiIiIgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbihwYXRoLCAicnQiKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwcmludCAiISEhIGNhbid0IHJlYWQgJyVzJyIgJSBwYXRoCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBoYXNJbmNsdWRlcyA9IEZhbHNlCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBIZWFkZXJTY2FubmVyLnJlX2NvbWJpbmVkLm1hdGNoKGxpbmUpOgorICAgICAgICAgICAgICAgIGhhc0luY2x1ZGVzID0gVHJ1ZQorICAgICAgICAgICAgICAgIGJyZWFrCisKKyAgICAgICAgaWYgbm90IGhhc0luY2x1ZGVzOgorICAgICAgICAgICAgaWYgdmVyYm9zZVNlYXJjaDogcHJpbnQgIjo6OiAiICsgcGF0aAorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgaWYgdmVyYm9zZVNlYXJjaDogcHJpbnQgIioqKiAiICsgcGF0aAorCisgICAgICAgIGxpc3QgPSBjcHAuQmxvY2tQYXJzZXIoKS5wYXJzZUZpbGUocGF0aCkKKyAgICAgICAgaWYgbGlzdDoKKyAgICAgICAgICAgICNsaXN0LnJlbW92ZVByZWZpeGVkKCJDT05GSUdfIixzZWxmLmNvbmZpZykKKyAgICAgICAgICAgIGxpc3Qub3B0aW1pemVNYWNyb3Moa2VybmVsX2tub3duX21hY3JvcykKKyAgICAgICAgICAgIGxpc3Qub3B0aW1pemVJZjAxKCkKKyAgICAgICAgICAgIGluY2x1ZGVzID0gbGlzdC5maW5kSW5jbHVkZXMoKQorICAgICAgICAgICAgZm9yIGluYyBpbiBpbmNsdWRlczoKKyAgICAgICAgICAgICAgICBzZWxmLmNoZWNrSW5jbHVkZShpbmMscGF0aCkKKworICAgIGRlZiBnZXRIZWFkZXJzKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm4gdGhlIHNldCBvZiBhbGwgbmVlZGVkIGtlcm5lbCBoZWFkZXJzIiIiCisgICAgICAgIHJldHVybiBzZXQoc2VsZi5oZWFkZXJzLmtleXMoKSkKKworICAgIGRlZiBnZXRIZWFkZXJVc2VycyhzZWxmLGhlYWRlcik6CisgICAgICAgICIiInJldHVybiB0aGUgc2V0IG9mIGFsbCB1c2VycyBmb3IgYSBnaXZlbiBoZWFkZXIiIiIKKyAgICAgICAgcmV0dXJuIHNldChzZWxmLmhlYWRlcnMuZ2V0KGhlYWRlcikpCisKKyAgICBkZWYgZ2V0QWxsVXNlcnMoc2VsZik6CisgICAgICAgICIiInJldHVybiBhIGRpY3Rpb25hcnkgbWFwcGluZyBoZWFhZGVycyB0byB0aGVpciB1c2VyIHNldCIiIgorICAgICAgICByZXR1cm4gc2VsZi5oZWFkZXJzLmNvcHkoKQorCisgICAgZGVmIGdldEZpbGVzKHNlbGYpOgorICAgICAgICAiIiJyZXR1cm5zIHRoZSBzZXQgb2YgZmlsZXMgdGhhdCBkbyBpbmNsdWRlIGtlcm5lbCBoZWFkZXJzIiIiCisgICAgICAgIHJldHVybiBzZWxmLmZpbGVzLmNvcHkoKQorCisKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIyMjIyMKKyMjIyMjICAgICAgICAgICBIIEUgQSBEIEUgUiAgIEYgSSBOIEQgRSBSICAgICAgICAgICAgICAgICAgICAgICAgICAgICMjIyMjCisjIyMjIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKKyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCisKKworY2xhc3MgS2VybmVsSGVhZGVyRmluZGVyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBzY2FuIHRoZSBrZXJuZWwgaGVhZGVycyB0aGVtc2VsdmVzLiIiIgorCisgICAgIyB0aGlzIGlzIGRpZmZlcmVudAorICAgICMgIGZyb20gYSBIZWFkZXJTY2FubmVyIGJlY2F1c2Ugd2UgbmVlZCB0byB0cmFuc2xhdGUgdGhlIHBhdGggcmV0dXJuZWQgYnkKKyAgICAjICBIZWFkZXJTY2FubmVyLmdldEhlYWRlcnMoKSBpbnRvIHBvc3NpYmx5IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBvbmVzLgorICAgICMKKyAgICAjIGZvciBleGFtcGxlLCA8YXNtL1hYWFguaD4gbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCBpbiA8YXNtLUFSQ0gvWFhYWC5oPgorICAgICMgd2hlcmUgQVJDSCBpcyBhcHByb3ByaWF0ZWx5IGNob3NlbgorCisgICAgIyBoZXJlJ3MgaG93IHRvIHVzZSB0aGlzOgorICAgICMKKyAgICAjICAgIHNjYW5uZXIgPSBIZWFkZXJTY2FubmVyKCkKKyAgICAjICAgIGZvciBwYXRoIGluIDx5b3VyIGxpc3Qgb2YgdXNlciBzb3VyY2VzPjoKKyAgICAjICAgICAgICBzY2FubmVyLnBhcnNlRmlsZShwYXRoKQorICAgICMKKyAgICAjICAgIHVzZWRfaGVhZGVycyA9IHNjYW5uZXIuZ2V0SGVhZGVycygpCisgICAgIyAgICBmaW5kZXIgICAgICAgPSBLZXJuZWxIZWFkZXJGaW5kZXIodXNlZF9oZWFkZXJzLCBbICJhcm0iLCAieDg2IiBdLAorICAgICMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI8a2VybmVsX2luY2x1ZGVfcGF0aD4iKQorICAgICMgICAgYWxsX2hlYWRlcnMgID0gZmluZGVyLnNjYW5Gb3JBbGxBcmNocygpCisgICAgIworICAgICMgICBub3QgdGhhdCB0aGUgcmVzdWx0IG9mIHNjYW5Gb3JBbGxBcmNocygpIGlzIGEgbGlzdCBvZiByZWxhdGl2ZQorICAgICMgICBoZWFkZXIgcGF0aHMgdGhhdCBhcmUgbm90IGJyYWNrZXRlZAorICAgICMKKworICAgIGRlZiBfX2luaXRfXyhzZWxmLGhlYWRlcnMsYXJjaHMsa2VybmVsX3Jvb3Qsa2VybmVsX2NvbmZpZyk6CisgICAgICAgICIiImluaXQgYSBLZXJuZWxIZWFkZXJTY2FubmVyLAorCisgICAgICAgICAgICAnaGVhZGVycycgaXMgYSBsaXN0IG9yIHNldCBvZiBoZWFkZXJzLAorICAgICAgICAgICAgJ2FyY2hzJyBpcyBhIGxpc3Qgb2YgYXJjaGl0ZWN0dXJlcworICAgICAgICAgICAgJ2tlcm5lbF9yb290JyBpcyB0aGUgcGF0aCB0byB0aGUgJ2luY2x1ZGUnIGRpcmVjdG9yeQorICAgICAgICAgICAgIG9mIHlvdXIgb3JpZ2luYWwga2VybmVsIHNvdXJjZXMKKyAgICAgICAgIiIiCisKKyAgICAgICAgaWYgbGVuKGtlcm5lbF9yb290KSA+IDAgYW5kIGtlcm5lbF9yb290Wy0xXSAhPSAiLyI6CisgICAgICAgICAgICBrZXJuZWxfcm9vdCArPSAiLyIKKyAgICAgICAgI3ByaW50ICJ1c2luZyBrZXJuZWxfcm9vdCAlcyIgJSBrZXJuZWxfcm9vdAorICAgICAgICBzZWxmLmFyY2hzICAgICAgICAgPSBhcmNocworICAgICAgICBzZWxmLnNlYXJjaGVkICAgICAgPSBzZXQoaGVhZGVycykKKyAgICAgICAgc2VsZi5rZXJuZWxfcm9vdCAgID0ga2VybmVsX3Jvb3QKKyAgICAgICAgc2VsZi5rZXJuZWxfY29uZmlnID0ga2VybmVsX2NvbmZpZworICAgICAgICBzZWxmLm5lZWRlZCAgICAgICAgPSB7fQorCisgICAgZGVmIHNldEFyY2goc2VsZixhcmNoPU5vbmUpOgorICAgICAgICBpZiBhcmNoOgorICAgICAgICAgICAgc2VsZi5wcmVmaXggPSAiYXNtLSVzLyIgJSBhcmNoCisgICAgICAgICAgICBzZWxmLmFyY2hfaGVhZGVycyA9IHNldCgpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBzZWxmLnByZWZpeCA9IE5vbmUKKyAgICAgICAgICAgIHNlbGYuYXJjaF9oZWFkZXJzID0gc2V0KCkKKworICAgIGRlZiBwYXRoRnJvbUhlYWRlcihzZWxmLGhlYWRlcik6CisgICAgICAgIHBhdGggPSBoZWFkZXIKKyAgICAgICAgaWYgc2VsZi5wcmVmaXggYW5kIHBhdGguc3RhcnRzd2l0aCgiYXNtLyIpOgorICAgICAgICAgICAgcGF0aCA9ICIlcyVzIiAlIChzZWxmLnByZWZpeCwgcGF0aFs0Ol0pCisgICAgICAgIHJldHVybiBwYXRoCisKKyAgICBkZWYgcGF0aFRvSGVhZGVyKHNlbGYscGF0aCk6CisgICAgICAgIGlmIHNlbGYucHJlZml4IGFuZCBwYXRoLnN0YXJ0c3dpdGgoc2VsZi5wcmVmaXgpOgorICAgICAgICAgICAgcGF0aCA9ICJhc20vJXMiICUgcGF0aFtsZW4oc2VsZi5wcmVmaXgpOl0KKyAgICAgICAgcmV0dXJuICIlcyIgJSBwYXRoCisKKyAgICBkZWYgc2V0U2VhcmNoZWRIZWFkZXJzKHNlbGYsaGVhZGVycyk6CisgICAgICAgIHNlbGYuc2VhcmNoZWQgPSBzZXQoaGVhZGVycykKKworICAgIGRlZiBzY2FuRm9yQXJjaChzZWxmKToKKyAgICAgICAgZnBhcnNlciAgID0gSGVhZGVyU2Nhbm5lcihjb25maWc9c2VsZi5rZXJuZWxfY29uZmlnKQorICAgICAgICB3b3JrcXVldWUgPSBbXQorICAgICAgICBuZWVkZWQgICAgPSB7fQorICAgICAgICBmb3IgaCBpbiBzZWxmLnNlYXJjaGVkOgorICAgICAgICAgICAgcGF0aCA9IHNlbGYucGF0aEZyb21IZWFkZXIoaCkKKyAgICAgICAgICAgIGlmIG5vdCBwYXRoIGluIG5lZWRlZDoKKyAgICAgICAgICAgICAgICBuZWVkZWRbcGF0aF0gPSBzZXQoKQorICAgICAgICAgICAgd29ya3F1ZXVlLmFwcGVuZChwYXRoKQorCisgICAgICAgIGkgPSAwCisgICAgICAgIHdoaWxlIGkgPCBsZW4od29ya3F1ZXVlKToKKyAgICAgICAgICAgIHBhdGggPSB3b3JrcXVldWVbaV0KKyAgICAgICAgICAgIGkgICArPSAxCisgICAgICAgICAgICBmcGFyc2VyLnBhcnNlRmlsZShzZWxmLmtlcm5lbF9yb290ICsgcGF0aCkKKyAgICAgICAgICAgIGZvciB1c2VkIGluIGZwYXJzZXIuZ2V0SGVhZGVycygpOgorICAgICAgICAgICAgICAgIHBhdGggID0gc2VsZi5wYXRoRnJvbUhlYWRlcih1c2VkKQorICAgICAgICAgICAgICAgIGlmIG5vdCBwYXRoIGluIG5lZWRlZDoKKyAgICAgICAgICAgICAgICAgICAgbmVlZGVkW3BhdGhdID0gc2V0KCkKKyAgICAgICAgICAgICAgICAgICAgd29ya3F1ZXVlLmFwcGVuZChwYXRoKQorICAgICAgICAgICAgICAgIGZvciB1c2VyIGluIGZwYXJzZXIuZ2V0SGVhZGVyVXNlcnModXNlZCk6CisgICAgICAgICAgICAgICAgICAgIG5lZWRlZFtwYXRoXS5hZGQodXNlcikKKworICAgICAgICAjIG5vdyBjb3B5IHRoZSBhcmNoLXNwZWNpZmljIGhlYWRlcnMgaW50byB0aGUgZ2xvYmFsIGxpc3QKKyAgICAgICAgZm9yIGhlYWRlciBpbiBuZWVkZWQua2V5cygpOgorICAgICAgICAgICAgdXNlcnMgPSBuZWVkZWRbaGVhZGVyXQorICAgICAgICAgICAgaWYgbm90IGhlYWRlciBpbiBzZWxmLm5lZWRlZDoKKyAgICAgICAgICAgICAgICBzZWxmLm5lZWRlZFtoZWFkZXJdID0gc2V0KCkKKworICAgICAgICAgICAgZm9yIHVzZXIgaW4gdXNlcnM6CisgICAgICAgICAgICAgICAgc2VsZi5uZWVkZWRbaGVhZGVyXS5hZGQodXNlcikKKworICAgIGRlZiBzY2FuRm9yQWxsQXJjaHMoc2VsZik6CisgICAgICAgICIiInNjYW4gZm9yIGFsbCBhcmNoaXRlY3R1cmVzIGFuZCByZXR1cm4gdGhlIHNldCBvZiBhbGwgbmVlZGVkIGtlcm5lbCBoZWFkZXJzIiIiCisgICAgICAgIGZvciBhcmNoIGluIHNlbGYuYXJjaHM6CisgICAgICAgICAgICBzZWxmLnNldEFyY2goYXJjaCkKKyAgICAgICAgICAgIHNlbGYuc2NhbkZvckFyY2goKQorCisgICAgICAgIHJldHVybiBzZXQoc2VsZi5uZWVkZWQua2V5cygpKQorCisgICAgZGVmIGdldEhlYWRlclVzZXJzKHNlbGYsaGVhZGVyKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBzZXQgb2YgYWxsIHVzZXJzIGZvciBhIGdpdmVuIGhlYWRlciIiIgorICAgICAgICByZXR1cm4gc2V0KHNlbGYubmVlZGVkW2hlYWRlcl0pCisKKyAgICBkZWYgZ2V0QXJjaEhlYWRlcnMoc2VsZixhcmNoKToKKyAgICAgICAgIiIicmV0dXJuIHRoZSBzZXQgb2YgYWxsIDxhc20vLi4uPiBoZWFkZXJzIHJlcXVpcmVkIGJ5IGEgZ2l2ZW4gYXJjaGl0ZWN0dXJlIiIiCisgICAgICAgIHJldHVybiBzZXQoKSAgIyBYWFg6IFRPRE8KKworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgIEMgTyBOIEYgSSBHICAgUCBBIFIgUyBFIFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIworCitjbGFzcyBDb25maWdQYXJzZXI6CisgICAgIiIiYSBjbGFzcyB1c2VkIHRvIHBhcnNlIHRoZSBMaW51eCBrZXJuZWwgLmNvbmZpZyBmaWxlIiIiCisgICAgcmVfQ09ORklHXyA9IHJlLmNvbXBpbGUociJeKENPTkZJR19cdyspPSguKikkIikKKworICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5pdGVtcyA9IHt9CisgICAgICAgIHNlbGYuZHVwbGljYXRlcyA9IEZhbHNlCisKKyAgICBkZWYgcGFyc2VMaW5lKHNlbGYsbGluZSk6CisgICAgICAgIGxpbmUgPSBzdHJpbmcuc3RyaXAobGluZSkKKworICAgICAgICAjIHNraXAgZW1wdHkgYW5kIGNvbW1lbnQgbGluZXMKKyAgICAgICAgaWYgbGVuKGxpbmUpID09IDAgb3IgbGluZVswXSA9PSAiIyI6CisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBtID0gQ29uZmlnUGFyc2VyLnJlX0NPTkZJR18ubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbm90IG06IHJldHVybgorCisgICAgICAgIG5hbWUgID0gbS5ncm91cCgxKQorICAgICAgICB2YWx1ZSA9IG0uZ3JvdXAoMikKKworICAgICAgICBpZiBuYW1lIGluIHNlbGYuaXRlbXM6ICAjIGFhcmcsIGR1cGxpY2F0ZSB2YWx1ZQorICAgICAgICAgICAgc2VsZi5kdXBsaWNhdGVzID0gVHJ1ZQorCisgICAgICAgIHNlbGYuaXRlbXNbbmFtZV0gPSB2YWx1ZQorCisgICAgZGVmIHBhcnNlRmlsZShzZWxmLHBhdGgpOgorICAgICAgICBmID0gZmlsZShwYXRoLCAiciIpCisgICAgICAgIGZvciBsaW5lIGluIGY6CisgICAgICAgICAgICBpZiBsZW4obGluZSkgPiAwOgorICAgICAgICAgICAgICAgIGlmIGxpbmVbLTFdID09ICJcbiI6CisgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICAgICAgaWYgbGVuKGxpbmUpID4gMCBhbmQgbGluZVstMV0gPT0gIlxyIjoKKyAgICAgICAgICAgICAgICAgICAgICAgIGxpbmUgPSBsaW5lWzotMV0KKyAgICAgICAgICAgICAgICBzZWxmLnBhcnNlTGluZShsaW5lKQorICAgICAgICBmLmNsb3NlKCkKKworICAgIGRlZiBnZXREZWZpbml0aW9ucyhzZWxmKToKKyAgICAgICAgIiIicmV0cmlldmUgYSBkaWN0aW9uYXJ5IGNvbnRhaW5pbmcgZGVmaW5pdGlvbnMgZm9yIENPTkZJR19YWFgiIiIKKyAgICAgICAgcmV0dXJuIHNlbGYuaXRlbXMuY29weSgpCisKKyAgICBkZWYgX19yZXByX18oc2VsZik6CisgICAgICAgIHJldHVybiByZXByKHNlbGYuaXRlbXMpCisKKyAgICBkZWYgX19zdHJfXyhzZWxmKToKKyAgICAgICAgcmV0dXJuIHN0cihzZWxmLml0ZW1zKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXBkYXRlX2FsbC5weSBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNjI3MmZjZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMva2VybmVsL3Rvb2xzL3VwZGF0ZV9hbGwucHkKQEAgLTAsMCArMSw4MyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0aG9uCisjCitpbXBvcnQgc3lzLCBjcHAsIGtlcm5lbCwgZ2xvYiwgb3MsIHJlLCBnZXRvcHQsIGNsZWFuX2hlYWRlcgorZnJvbSBkZWZhdWx0cyBpbXBvcnQgKgorZnJvbSB1dGlscyBpbXBvcnQgKgorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAiIiJcCisgIHVzYWdlOiAlKHByb2duYW1lKXMKKworICAgIHRoaXMgcHJvZ3JhbSBpcyB1c2VkIHRvIHVwZGF0ZSBhbGwgdGhlIGF1dG8tZ2VuZXJhdGVkIGNsZWFuIGhlYWRlcnMKKyAgICB1c2VkIGJ5IHRoZSBCaW9uaWMgQyBsaWJyYXJ5LiBpdCBhc3N1bWVzIHRoZSBmb2xsb3dpbmc6CisKKyAgICAgIC0gYSBzZXQgb2Ygc291cmNlIGtlcm5lbCBoZWFkZXJzIGlzIGxvY2F0ZWQgaW4gJy4uL29yaWdpbmFsJywKKyAgICAgICAgcmVsYXRpdmUgdG8gdGhlIHByb2dyYW0ncyBkaXJlY3RvcnkKKworICAgICAgLSB0aGUgY2xlYW4gaGVhZGVycyB3aWxsIGJlIHBsYWNlZCBpbiAnLi4vYXJjaC08YXJjaD4vYXNtJywKKyAgICAgICAgJy4uL2NvbW1vbi9saW51eCcsICcuLi9jb21tb24vYXNtLWdlbmVyaWMnLCBldGMuLgorCisgICAgICAtIGlmIEFORFJPSURfUFJPRFVDVF9PVVQgaXMgZGVmaW5lZCBpbiB5b3VyIGVudmlyb25tZW50LCB5b3UncmUKKyAgICAgICAgdXNpbmcgdGhlIEFuZHJvaWQgYnVpbGQgc3lzdGVtLCBhbmQgdGhlIHByb2dyYW0gd2lsbCBpc3N1ZQorICAgICAgICBwNCBhZGQgLyBlZGl0IC8gZGVsZXRlIGNvbW1hbmRzIHRvIHVwZGF0ZSB0aGUgZGVwb3QgZm9yIHlvdS4KKyAgICAgICAgKHlvdSdsbCBuZWVkIHRvIHA0IHN1Ym1pdCBtYW51YWxseSB0aG91Z2gpCisiIiIgJSB7ICJwcm9nbmFtZSIgOiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKSB9CisgICAgc3lzLmV4aXQoMCkKKwordHJ5OgorICAgIG9wdGxpc3QsIGFyZ3MgPSBnZXRvcHQuZ2V0b3B0KCBzeXMuYXJndlsxOl0sICcnICkKK2V4Y2VwdDoKKyAgICAjIHVucmVjb2duaXplZCBvcHRpb24KKyAgICBzeXMuc3RkZXJyLndyaXRlKCAiZXJyb3I6IHVucmVjb2duaXplZCBvcHRpb25cbiIgKQorICAgIHVzYWdlKCkKKworaWYgbGVuKG9wdGxpc3QpID4gMCBvciBsZW4oYXJncykgPiAwOgorICAgIHVzYWdlKCkKKworcHJvZ2RpciA9IGZpbmRfcHJvZ3JhbV9kaXIoKQorb3JpZ2luYWxfZGlyID0gb3MucGF0aC5ub3JtcGF0aCggcHJvZ2RpciArICIvLi4vb3JpZ2luYWwiICkKK2lmIG5vdCBvcy5wYXRoLmlzZGlyKCBvcmlnaW5hbF9kaXIgKToKKyAgICBwYW5pYyggInJlcXVpcmVkIGRpcmVjdG9yeSBkb2VzIG5vdCBleGlzdHM6ICVzXG4iICUgb3JpZ2luYWxfZGlyICkKKworIyBmaW5kIGFsbCBzb3VyY2UgZmlsZXMgaW4gJ29yaWdpbmFsJworIworc291cmNlcyA9IFtdCitmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2Fsayggb3JpZ2luYWxfZGlyICk6CisgICAgZm9yIGZpbGUgaW4gZmlsZXM6CisgICAgICAgIGJhc2UsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZmlsZSkKKyAgICAgICAgaWYgZXh0ID09ICIuaCI6CisgICAgICAgICAgICBzb3VyY2VzLmFwcGVuZCggIiVzLyVzIiAlIChyb290LGZpbGUpICkKKworYiA9IEJhdGNoRmlsZVVwZGF0ZXIoKQorCitmb3IgYXJjaCBpbiBrZXJuZWxfYXJjaHM6CisgICAgYi5yZWFkRGlyKCBvcy5wYXRoLm5vcm1wYXRoKCBwcm9nZGlyICsgIi8uLi9hcmNoLSVzIiAlIGFyY2ggKSApCisKK2IucmVhZERpciggb3MucGF0aC5ub3JtcGF0aCggcHJvZ2RpciArICIvLi4vY29tbW9uIiApICkKKworI3ByaW50ICJPTEQgIiArIHJlcHIoYi5vbGRfZmlsZXMpCisKK2ZvciBwYXRoIGluIHNvdXJjZXM6CisgICAgZHN0X3BhdGgsIG5ld2RhdGEgPSBjbGVhbl9oZWFkZXIuY2xlYW51cEZpbGUocGF0aCkKKyAgICBpZiBub3QgZHN0X3BhdGg6CisgICAgICAgIGNvbnRpbnVlCisKKyAgICBiLnJlYWRGaWxlKCBkc3RfcGF0aCApCisgICAgciA9IGIuZWRpdEZpbGUoIGRzdF9wYXRoLCBuZXdkYXRhICkKKyAgICBpZiByID09IDA6CisgICAgICAgIHIgPSAidW5jaGFuZ2VkIgorICAgIGVsaWYgciA9PSAxOgorICAgICAgICByID0gImVkaXRlZCIKKyAgICBlbHNlOgorICAgICAgICByID0gImFkZGVkIgorCisgICAgcHJpbnQgImNsZWFuaW5nOiAlLSpzIC0+ICUtKnMgKCVzKSIgJSAoIDM1LCBwYXRoLCAzNSwgZHN0X3BhdGgsIHIgKQorCit1c2VQZXJmb3JjZSA9IG9zLmVudmlyb24uaGFzX2tleSgiQU5EUk9JRF9QUk9EVUNUX09VVCIpCisKK2lmIHVzZVBlcmZvcmNlOgorICAgIGIudXBkYXRlUDRGaWxlcygpCitlbHNlOgorICAgIGIudXBkYXRlRmlsZXMoKQorCitzeXMuZXhpdCgwKQpkaWZmIC0tZ2l0IGEvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkgYi9saWJjL2tlcm5lbC90b29scy91dGlscy5weQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjNjN2QyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9rZXJuZWwvdG9vbHMvdXRpbHMucHkKQEAgLTAsMCArMSwzOTcgQEAKKyMgY29tbW9uIHB5dGhvbiB1dGlsaXR5IHJvdXRpbmVzIGZvciB0aGUgQmlvbmljIHRvb2wgc2NyaXB0cworCitpbXBvcnQgc3lzLCBvcywgY29tbWFuZHMsIHN0cmluZywgY29tbWFuZHMKKworIyBiYXNpYyBkZWJ1Z2dpbmcgdHJhY2Ugc3VwcG9ydAorIyBjYWxsIERfc2V0bGV2ZWwgdG8gc2V0IHRoZSB2ZXJib3NpdHkgbGV2ZWwKKyMgYW5kIEQoKSwgRDIoKSwgRDMoKSwgRDQoKSB0byBhZGQgdHJhY2VzCisjCit2ZXJib3NlID0gMAorCitkZWYgcGFuaWMobXNnKToKKyAgICBzeXMuc3RkZXJyLndyaXRlKCBmaW5kX3Byb2dyYW1fbmFtZSgpICsgIjogZXJyb3I6ICIgKQorICAgIHN5cy5zdGRlcnIud3JpdGUoIG1zZyApCisgICAgc3lzLmV4aXQoMSkKKworZGVmIEQobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPiAwOgorICAgICAgICBwcmludCBtc2cKKworZGVmIEQyKG1zZyk6CisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlID49IDI6CisgICAgICAgIHByaW50IG1zZworCitkZWYgRDMobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPj0gMzoKKyAgICAgICAgcHJpbnQgbXNnCisKK2RlZiBENChtc2cpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgaWYgdmVyYm9zZSA+PSA0OgorICAgICAgICBwcmludCBtc2cKKworZGVmIERfc2V0bGV2ZWwobGV2ZWwpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGxldmVsCisKKworIyAgb3RoZXIgc3R1ZmYKKyMKKyMKK2RlZiBmaW5kX3Byb2dyYW1fbmFtZSgpOgorICAgIHJldHVybiBvcy5wYXRoLmJhc2VuYW1lKHN5cy5hcmd2WzBdKQorCitkZWYgZmluZF9wcm9ncmFtX2RpcigpOgorICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoc3lzLmFyZ3ZbMF0pCisKK2RlZiBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKGZyb21fcGF0aCx0YXJnZXRfZmlsZSk6CisgICAgIiIiZmluZCBhIGZpbGUgaW4gdGhlIGN1cnJlbnQgZGlyZWN0b3J5IG9yIGl0cyBwYXJlbnRzLiBpZiAnZnJvbV9wYXRoJyBpcyBOb25lLAorICAgICAgIHNlYWNoIGZyb20gdGhlIGN1cnJlbnQgcHJvZ3JhbSdzIGRpcmVjdG9yeSIiIgorICAgIHBhdGggPSBmcm9tX3BhdGgKKyAgICBpZiBwYXRoID09IE5vbmU6CisgICAgICAgIHBhdGggPSBvcy5wYXRoLnJlYWxwYXRoKHN5cy5hcmd2WzBdKQorICAgICAgICBwYXRoID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIEQoInRoaXMgc2NyaXB0IHNlZW1zIHRvIGJlIGxvY2F0ZWQgaW46ICVzIiAlIHBhdGgpCisKKyAgICB3aGlsZSAxOgorICAgICAgICBEKCJwcm9iaW5nICIrcGF0aCkKKyAgICAgICAgaWYgcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIGZpbGUgPSB0YXJnZXRfZmlsZQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZmlsZSA9IHBhdGggKyAiLyIgKyB0YXJnZXRfZmlsZQorCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgRCgiZm91bmQgJXMgaW4gJXMiICUgKHRhcmdldF9maWxlLCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmaWxlCisKKyAgICAgICAgaWYgcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIHJldHVybiBOb25lCisKKyAgICAgICAgcGF0aCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorCitkZWYgZmluZF9iaW9uaWNfcm9vdCgpOgorICAgIGZpbGUgPSBmaW5kX2ZpbGVfZnJvbV91cHdhcmRzKE5vbmUsICJTWVNDQUxMUy5UWFQiKQorICAgIGlmIGZpbGU6CisgICAgICAgIHJldHVybiBvcy5wYXRoLmRpcm5hbWUoZmlsZSkKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gTm9uZQorCitkZWYgZmluZF9rZXJuZWxfaGVhZGVycygpOgorICAgICIiInRyeSB0byBmaW5kIHRoZSBkaXJlY3RvcnkgY29udGFpbmluZyB0aGUga2VybmVsIGhlYWRlcnMgZm9yIHRoaXMgbWFjaGluZSIiIgorICAgIHN0YXR1cywgdmVyc2lvbiA9IGNvbW1hbmRzLmdldHN0YXR1c291dHB1dCggInVuYW1lIC1yIiApICAjIGdldCBMaW51eCBrZXJuZWwgdmVyc2lvbgorICAgIGlmIHN0YXR1cyAhPSAwOgorICAgICAgICBEKCJjb3VsZCBub3QgZXhlY3V0ZSAndW5hbWUgLXInIGNvbW1hbmQgcHJvcGVybHkiKQorICAgICAgICByZXR1cm4gTm9uZQorCisgICAgIyBnZXQgcmlkIG9mIHRoZSAiLXhlblUiIHN1ZmZpeCB0aGF0IGlzIGZvdW5kIGluIFhlbiB2aXJ0dWFsIG1hY2hpbmVzCisgICAgaWYgbGVuKHZlcnNpb24pID4gNSBhbmQgdmVyc2lvblstNTpdID09ICIteGVuVSI6CisgICAgICAgIHZlcnNpb24gPSB2ZXJzaW9uWzotNV0KKworICAgIHBhdGggPSAiL3Vzci9zcmMvbGludXgtaGVhZGVycy0iICsgdmVyc2lvbgorICAgIEQoInByb2JpbmcgJXMgZm9yIGtlcm5lbCBoZWFkZXJzIiAlIChwYXRoKyIvaW5jbHVkZSIpKQorICAgIHJldCA9IG9zLnBhdGguaXNkaXIoIHBhdGggKQorICAgIGlmIHJldDoKKyAgICAgICAgRCgiZm91bmQga2VybmVsIGhlYWRlcnMgaW46ICVzIiAlIChwYXRoICsgIi9pbmNsdWRlIikpCisgICAgICAgIHJldHVybiBwYXRoCisgICAgcmV0dXJuIE5vbmUKKworCisjIHBhcnNlciBmb3IgdGhlIFNZU0NBTExTLlRYVCBmaWxlCisjCitjbGFzcyBTeXNDYWxsc1R4dFBhcnNlcjoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYuc3lzY2FsbHMgPSBbXQorICAgICAgICBzZWxmLmxpbmVubyAgID0gMAorCisgICAgZGVmIEUobXNnKToKKyAgICAgICAgcHJpbnQgIiVkOiAlcyIgJSAoc2VsZi5saW5lbm8sIG1zZykKKworICAgIGRlZiBwYXJzZV9saW5lKHNlbGYsIGxpbmUpOgorICAgICAgICBwb3NfbHBhcmVuID0gbGluZS5maW5kKCcoJykKKyAgICAgICAgRSAgICAgICAgICA9IHNlbGYuRQorICAgICAgICBpZiBwb3NfbHBhcmVuIDwgMDoKKyAgICAgICAgICAgIEUoIm1pc3NpbmcgbGVmdCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBwb3NfcnBhcmVuID0gbGluZS5yZmluZCgnKScpCisgICAgICAgIGlmIHBvc19ycGFyZW4gPCAwIG9yIHBvc19ycGFyZW4gPD0gcG9zX2xwYXJlbjoKKyAgICAgICAgICAgIEUoIm1pc3Npbmcgb3IgbWlzcGxhY2VkIHJpZ2h0IHBhcmVudGhlc2lzIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHJldHVybl90eXBlID0gbGluZVs6cG9zX2xwYXJlbl0uc3RyaXAoKS5zcGxpdCgpCisgICAgICAgIGlmIGxlbihyZXR1cm5fdHlwZSkgPCAyOgorICAgICAgICAgICAgRSgibWlzc2luZyByZXR1cm4gdHlwZSBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICBzeXNjYWxsX2Z1bmMgPSByZXR1cm5fdHlwZVstMV0KKyAgICAgICAgcmV0dXJuX3R5cGUgID0gc3RyaW5nLmpvaW4ocmV0dXJuX3R5cGVbOi0xXSwnICcpCisKKyAgICAgICAgcG9zX2NvbG9uID0gc3lzY2FsbF9mdW5jLmZpbmQoJzonKQorICAgICAgICBpZiBwb3NfY29sb24gPCAwOgorICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBpZiBwb3NfY29sb24gPT0gMCBvciBwb3NfY29sb24rMSA+PSBsZW4oc3lzY2FsbF9mdW5jKToKKyAgICAgICAgICAgICAgICBFKCJtaXNwbGFjZWQgY29sb24gaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybgorICAgICAgICAgICAgc3lzY2FsbF9uYW1lID0gc3lzY2FsbF9mdW5jW3Bvc19jb2xvbisxOl0KKyAgICAgICAgICAgIHN5c2NhbGxfZnVuYyA9IHN5c2NhbGxfZnVuY1s6cG9zX2NvbG9uXQorCisgICAgICAgIGlmIHBvc19ycGFyZW4gPiBwb3NfbHBhcmVuKzE6CisgICAgICAgICAgICBzeXNjYWxsX3BhcmFtcyA9IGxpbmVbcG9zX2xwYXJlbisxOnBvc19ycGFyZW5dLnNwbGl0KCcsJykKKyAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gc3RyaW5nLmpvaW4oc3lzY2FsbF9wYXJhbXMsJywnKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBbXQorICAgICAgICAgICAgcGFyYW1zICAgICAgICAgPSAidm9pZCIKKworICAgICAgICBudW1iZXIgPSBsaW5lW3Bvc19ycGFyZW4rMTpdLnN0cmlwKCkKKyAgICAgICAgaWYgbnVtYmVyID09ICJzdHViIjoKKyAgICAgICAgICAgIHN5c2NhbGxfaWQgID0gLTEKKyAgICAgICAgICAgIHN5c2NhbGxfaWQyID0gLTEKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAgICBpZiBudW1iZXJbMF0gPT0gJyMnOgorICAgICAgICAgICAgICAgICAgICBudW1iZXIgPSBudW1iZXJbMTpdLnN0cmlwKCkKKyAgICAgICAgICAgICAgICBudW1iZXJzID0gc3RyaW5nLnNwbGl0KG51bWJlciwnLCcpCisgICAgICAgICAgICAgICAgc3lzY2FsbF9pZCAgPSBpbnQobnVtYmVyc1swXSkKKyAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IHN5c2NhbGxfaWQKKyAgICAgICAgICAgICAgICBpZiBsZW4obnVtYmVycykgPiAxOgorICAgICAgICAgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IGludChudW1iZXJzWzFdKQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIEUoImludmFsaWQgc3lzY2FsbCBudW1iZXIgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgICAgIHJldHVybgorCisgICAgICAgIHQgPSB7ICJpZCIgICAgIDogc3lzY2FsbF9pZCwKKyAgICAgICAgICAgICAgImlkMiIgICAgOiBzeXNjYWxsX2lkMiwKKyAgICAgICAgICAgICAgIm5hbWUiICAgOiBzeXNjYWxsX25hbWUsCisgICAgICAgICAgICAgICJmdW5jIiAgIDogc3lzY2FsbF9mdW5jLAorICAgICAgICAgICAgICAicGFyYW1zIiA6IHN5c2NhbGxfcGFyYW1zLAorICAgICAgICAgICAgICAiZGVjbCIgICA6ICIlLTE1cyAgJXMgKCVzKTsiICUgKHJldHVybl90eXBlLCBzeXNjYWxsX2Z1bmMsIHBhcmFtcykgfQorCisgICAgICAgIHNlbGYuc3lzY2FsbHMuYXBwZW5kKHQpCisKKyAgICBkZWYgcGFyc2VfZmlsZShzZWxmLCBmaWxlX3BhdGgpOgorICAgICAgICBmcCA9IG9wZW4oZmlsZV9wYXRoKQorICAgICAgICBmb3IgbGluZSBpbiBmcC54cmVhZGxpbmVzKCk6CisgICAgICAgICAgICBzZWxmLmxpbmVubyArPSAxCisgICAgICAgICAgICBsaW5lID0gbGluZS5zdHJpcCgpCisgICAgICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgICAgIGlmIGxpbmVbMF0gPT0gJyMnOiBjb250aW51ZQorICAgICAgICAgICAgc2VsZi5wYXJzZV9saW5lKGxpbmUpCisKKyAgICAgICAgZnAuY2xvc2UoKQorCisKK2NsYXNzIE91dHB1dDoKKyAgICBkZWYgIF9faW5pdF9fKHNlbGYsb3V0PXN5cy5zdGRvdXQpOgorICAgICAgICBzZWxmLm91dCA9IG91dAorCisgICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQorCisgICAgZGVmIHdyaXRlbG4oc2VsZixtc2cpOgorICAgICAgICBzZWxmLm91dC53cml0ZShtc2cpCisgICAgICAgIHNlbGYub3V0LndyaXRlKCJcbiIpCisKK2NsYXNzIFN0cmluZ091dHB1dDoKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYubGluZSA9ICIiCisKKyAgICBkZWYgd3JpdGUoc2VsZixtc2cpOgorICAgICAgICBzZWxmLmxpbmUgKz0gbXNnCisgICAgICAgIEQyKCJ3cml0ZSAnJXMnIiAlIG1zZykKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5saW5lICs9IG1zZyArICdcbicKKyAgICAgICAgRDIoIndyaXRlICclc1xcbiciJSBtc2cpCisKKyAgICBkZWYgZ2V0KHNlbGYpOgorICAgICAgICByZXR1cm4gc2VsZi5saW5lCisKKworZGVmIGNyZWF0ZV9maWxlX3BhdGgocGF0aCk6CisgICAgZGlycyA9IFtdCisgICAgd2hpbGUgMToKKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgICNwcmludCAicGFyZW50OiAlcyA8LSAlcyIgJSAocGFyZW50LCBwYXRoKQorICAgICAgICBpZiBwYXJlbnQgPT0gIi8iIG9yIHBhcmVudCA9PSAiIjoKKyAgICAgICAgICAgIGJyZWFrCisgICAgICAgIGRpcnMuYXBwZW5kKHBhcmVudCkKKyAgICAgICAgcGF0aCA9IHBhcmVudAorCisgICAgZGlycy5yZXZlcnNlKCkKKyAgICBmb3IgZGlyIGluIGRpcnM6CisgICAgICAgICNwcmludCAiZGlyICVzIiAlIGRpcgorICAgICAgICBpZiBvcy5wYXRoLmlzZGlyKGRpcik6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBvcy5ta2RpcihkaXIpCisKK2RlZiB3YWxrX3NvdXJjZV9maWxlcyhwYXRocyxjYWxsYmFjayxhcmdzLGV4Y2x1ZGVzPVtdKToKKyAgICAiIiJyZWN1cnNpdmVseSB3YWxrIGEgbGlzdCBvZiBwYXRocyBhbmQgZmlsZXMsIG9ubHkga2VlcGluZyB0aGUgc291cmNlIGZpbGVzIGluIGRpcmVjdG9yaWVzIiIiCisgICAgZm9yIHBhdGggaW4gcGF0aHM6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmlzZGlyKHBhdGgpOgorICAgICAgICAgICAgY2FsbGJhY2socGF0aCxhcmdzKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCk6CisgICAgICAgICAgICAgICAgI3ByaW50ICJ3LS0gJXMgKGV4OiAlcykiICUgKHJlcHIoKHJvb3QsZGlycykpLCByZXByKGV4Y2x1ZGVzKSkKKyAgICAgICAgICAgICAgICBpZiBsZW4oZXhjbHVkZXMpOgorICAgICAgICAgICAgICAgICAgICBmb3IgZCBpbiBkaXJzWzpdOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgZCBpbiBleGNsdWRlczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaXJzLnJlbW92ZShkKQorICAgICAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgICAgICByLCBleHQgPSBvcy5wYXRoLnNwbGl0ZXh0KGYpCisgICAgICAgICAgICAgICAgICAgIGlmIGV4dCBpbiBbICIuaCIsICIuYyIsICIuY3BwIiwgIi5TIiBdOgorICAgICAgICAgICAgICAgICAgICAgICAgY2FsbGJhY2soICIlcy8lcyIgJSAocm9vdCxmKSwgYXJncyApCisKK2RlZiBjbGVhbnVwX2RpcihwYXRoKToKKyAgICAiIiJjcmVhdGUgYSBkaXJlY3RvcnkgaWYgbmVlZGVkLCBhbmQgZW5zdXJlIHRoYXQgaXQgaXMgdG90YWxseSBlbXB0eQorICAgICAgIGJ5IHJlbW92aW5nIGFueSBleGlzdGluZyBjb250ZW50IGluIGl0IiIiCisgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKHBhdGgpOgorICAgICAgICBvcy5ta2RpcihwYXRoKQorICAgIGVsc2U6CisgICAgICAgIGZvciByb290LCBkaXJzLCBmaWxlcyBpbiBvcy53YWxrKHBhdGgsIHRvcGRvd249RmFsc2UpOgorICAgICAgICAgICAgaWYgcm9vdC5lbmRzd2l0aCgia2VybmVsX2hlYWRlcnMvIik6CisgICAgICAgICAgICAgICAgIyBza2lwICdrZXJuZWxfaGVhZGVycycKKyAgICAgICAgICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgb3MucmVtb3ZlKG9zLnBhdGguam9pbihyb290LCBuYW1lKSkKKyAgICAgICAgICAgIGZvciBuYW1lIGluIGRpcnM6CisgICAgICAgICAgICAgICAgb3Mucm1kaXIob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorCitkZWYgdXBkYXRlX2ZpbGUoIHBhdGgsIG5ld2RhdGEgKToKKyAgICAiIiJ1cGRhdGUgYSBmaWxlIG9uIGRpc2ssIG9ubHkgaWYgaXRzIGNvbnRlbnQgaGFzIGNoYW5nZWQiIiIKKyAgICBpZiBvcy5wYXRoLmV4aXN0cyggcGF0aCApOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBmID0gb3BlbiggcGF0aCwgInIiICkKKyAgICAgICAgICAgIG9sZGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIEQoInVwZGF0ZV9maWxlOiBjYW5ub3QgcmVhZCBleGlzdGluZyBmaWxlICclcyciICUgcGF0aCkKKyAgICAgICAgICAgIHJldHVybiAwCisKKyAgICAgICAgaWYgb2xkYXRhID09IG5ld2RhdGE6CisgICAgICAgICAgICBEMigidXBkYXRlX2ZpbGU6IG5vIGNoYW5nZSB0byBmaWxlICclcyciICUgcGF0aCApCisgICAgICAgICAgICByZXR1cm4gMAorCisgICAgICAgIHVwZGF0ZSA9IDEKKyAgICBlbHNlOgorICAgICAgICB0cnk6CisgICAgICAgICAgICBjcmVhdGVfZmlsZV9wYXRoKHBhdGgpCisgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgIEQoInVwZGF0ZV9maWxlOiBjYW5ub3QgY3JlYXRlIHBhdGggdG8gJyVzJyIgJSBwYXRoKQorICAgICAgICAgICAgcmV0dXJuIDAKKworICAgIGYgPSBvcGVuKCBwYXRoLCAidyIgKQorICAgIGYud3JpdGUoIG5ld2RhdGEgKQorICAgIGYuY2xvc2UoKQorCisgICAgcmV0dXJuIDEKKworCitjbGFzcyBCYXRjaEZpbGVVcGRhdGVyOgorICAgICIiImEgY2xhc3MgdXNlZCB0byBlZGl0IHNldmVyYWwgZmlsZXMgYXQgb25jZSIiIgorICAgIGRlZiBfX2luaXRfXyhzZWxmKToKKyAgICAgICAgc2VsZi5vbGRfZmlsZXMgPSBzZXQoKQorICAgICAgICBzZWxmLm5ld19maWxlcyA9IHNldCgpCisgICAgICAgIHNlbGYubmV3X2RhdGEgID0ge30KKworICAgIGRlZiByZWFkRmlsZShzZWxmLHBhdGgpOgorICAgICAgICAjcGF0aCA9IG9zLnBhdGgucmVhbHBhdGgocGF0aCkKKyAgICAgICAgaWYgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgICAgICBzZWxmLm9sZF9maWxlcy5hZGQocGF0aCkKKworICAgIGRlZiByZWFkRGlyKHNlbGYscGF0aCk6CisgICAgICAgICNwYXRoID0gb3MucGF0aC5yZWFscGF0aChwYXRoKQorICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgIGZvciBmIGluIGZpbGVzOgorICAgICAgICAgICAgICAgIGRzdCA9ICIlcy8lcyIgJSAocm9vdCxmKQorICAgICAgICAgICAgICAgIHNlbGYub2xkX2ZpbGVzLmFkZChkc3QpCisKKyAgICBkZWYgZWRpdEZpbGUoc2VsZixkc3QsZGF0YSk6CisgICAgICAgICIiImVkaXQgYSBkZXN0aW5hdGlvbiBmaWxlLiBpZiB0aGUgZmlsZSBpcyBub3QgbWFwcGVkIGZyb20gYSBzb3VyY2UsCisgICAgICAgICAgIGl0IHdpbGwgYmUgYWRkZWQuIHJldHVybiAwIGlmIHRoZSBmaWxlIGNvbnRlbnQgd2Fzbid0IGNoYW5nZWQsCisgICAgICAgICAgIDEgaWYgaXQgd2FzIGVkaXRlZCwgb3IgMiBpZiB0aGUgZmlsZSBpcyBuZXciIiIKKyAgICAgICAgI2RzdCA9IG9zLnBhdGgucmVhbHBhdGgoZHN0KQorICAgICAgICByZXN1bHQgPSAxCisgICAgICAgIGlmIG9zLnBhdGguZXhpc3RzKGRzdCk6CisgICAgICAgICAgICBmID0gb3Blbihkc3QsICJyIikKKyAgICAgICAgICAgIG9sZGRhdGEgPSBmLnJlYWQoKQorICAgICAgICAgICAgZi5jbG9zZSgpCisgICAgICAgICAgICBpZiBvbGRkYXRhID09IGRhdGE6CisgICAgICAgICAgICAgICAgc2VsZi5vbGRfZmlsZXMucmVtb3ZlKGRzdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMAorICAgICAgICBlbHNlOgorICAgICAgICAgICAgcmVzdWx0ID0gMgorCisgICAgICAgIHNlbGYubmV3X2RhdGFbZHN0XSA9IGRhdGEKKyAgICAgICAgc2VsZi5uZXdfZmlsZXMuYWRkKGRzdCkKKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisgICAgZGVmIGdldENoYW5nZXMoc2VsZik6CisgICAgICAgICIiImRldGVybWluZSBjaGFuZ2VzLCByZXR1cm5zIChhZGRzLCBkZWxldGVzLCBlZGl0cykiIiIKKyAgICAgICAgYWRkcyAgICA9IHNldCgpCisgICAgICAgIGVkaXRzICAgPSBzZXQoKQorICAgICAgICBkZWxldGVzID0gc2V0KCkKKworICAgICAgICBmb3IgZHN0IGluIHNlbGYubmV3X2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IChkc3QgaW4gc2VsZi5vbGRfZmlsZXMpOgorICAgICAgICAgICAgICAgIGFkZHMuYWRkKGRzdCkKKyAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgZWRpdHMuYWRkKGRzdCkKKworICAgICAgICBmb3IgZHN0IGluIHNlbGYub2xkX2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IGRzdCBpbiBzZWxmLm5ld19maWxlczoKKyAgICAgICAgICAgICAgICBkZWxldGVzLmFkZChkc3QpCisKKyAgICAgICAgcmV0dXJuIChhZGRzLCBkZWxldGVzLCBlZGl0cykKKworICAgIGRlZiBfd3JpdGVGaWxlKHNlbGYsZHN0LGRhdGE9Tm9uZSk6CisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhvcy5wYXRoLmRpcm5hbWUoZHN0KSk6CisgICAgICAgICAgICBjcmVhdGVfZmlsZV9wYXRoKGRzdCkKKyAgICAgICAgaWYgZGF0YSA9PSBOb25lOgorICAgICAgICAgICAgZGF0YSA9IHNlbGYubmV3X2RhdGFbZHN0XQorICAgICAgICBmID0gb3Blbihkc3QsICJ3IikKKyAgICAgICAgZi53cml0ZShzZWxmLm5ld19kYXRhW2RzdF0pCisgICAgICAgIGYuY2xvc2UoKQorCisgICAgZGVmIHVwZGF0ZUZpbGVzKHNlbGYpOgorICAgICAgICBhZGRzLCBkZWxldGVzLCBlZGl0cyA9IHNlbGYuZ2V0Q2hhbmdlcygpCisKKyAgICAgICAgZm9yIGRzdCBpbiBzb3J0ZWQoYWRkcyk6CisgICAgICAgICAgICBzZWxmLl93cml0ZUZpbGUoZHN0KQorCisgICAgICAgIGZvciBkc3QgaW4gc29ydGVkKGVkaXRzKToKKyAgICAgICAgICAgIHNlbGYuX3dyaXRlRmlsZShkc3QpCisKKyAgICAgICAgZm9yIGRzdCBpbiBzb3J0ZWQoZGVsZXRlcyk6CisgICAgICAgICAgICBvcy5yZW1vdmUoZHN0KQorCisgICAgZGVmIHVwZGF0ZVA0RmlsZXMoc2VsZik6CisgICAgICAgIGFkZHMsIGRlbGV0ZXMsIGVkaXRzID0gc2VsZi5nZXRDaGFuZ2VzKCkKKworICAgICAgICBpZiBsZW4oYWRkcyk6CisgICAgICAgICAgICBmaWxlcyA9IHN0cmluZy5qb2luKHNvcnRlZChhZGRzKSwiICIpCisgICAgICAgICAgICBEKCAiJWQgbmV3IGZpbGVzIHdpbGwgYmUgcDQgYWRkLWVkIiAlIGxlbihhZGRzKSApCisgICAgICAgICAgICBmb3IgZHN0IGluIGFkZHM6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVGaWxlKGRzdCkKKyAgICAgICAgICAgIEQyKCJQNCBBRERTOiAlcyIgJSBmaWxlcykKKyAgICAgICAgICAgIG8gPSBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBhZGQgIiArIGZpbGVzICkKKyAgICAgICAgICAgIEQyKCBvICkKKworICAgICAgICBpZiBsZW4oZWRpdHMpOgorICAgICAgICAgICAgZmlsZXMgPSBzdHJpbmcuam9pbihzb3J0ZWQoZWRpdHMpLCIgIikKKyAgICAgICAgICAgIEQoICIlZCBmaWxlcyB3aWxsIGJlIHA0IGVkaXQtZWQiICUgbGVuKGVkaXRzKSApCisgICAgICAgICAgICBEMigiUDQgRURJVFM6ICVzIiAlIGZpbGVzKQorICAgICAgICAgICAgbyA9IGNvbW1hbmRzLmdldG91dHB1dCggInA0IGVkaXQgIiArIGZpbGVzICkKKyAgICAgICAgICAgIEQyKCBvICkKKyAgICAgICAgICAgIGZvciBkc3QgaW4gZWRpdHM6CisgICAgICAgICAgICAgICAgc2VsZi5fd3JpdGVGaWxlKGRzdCkKKworICAgICAgICBpZiBsZW4oZGVsZXRlcyk6CisgICAgICAgICAgICBmaWxlcyA9IHN0cmluZy5qb2luKHNvcnRlZChkZWxldGVzKSwiICIpCisgICAgICAgICAgICBEKCAiJWQgZmlsZXMgd2lsbCBiZSBwNCBkZWxldGUtZCIgJSBsZW4oZGVsZXRlcykgKQorICAgICAgICAgICAgRDIoIlA0IERFTEVURVM6ICVzIiAlIGZpbGVzKQorICAgICAgICAgICAgbyA9IGNvbW1hbmRzLmdldG91dHB1dCggInA0IGRlbGV0ZSAiICsgZmlsZXMgKQorICAgICAgICAgICAgRDIoIG8gKQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvZ2V0aG5hbWFkZHIuYyBiL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZmOTE5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL2dldGhuYW1hZGRyLmMKQEAgLTAsMCArMSwxMjM1IEBACisvKgkkTmV0QlNEOiBnZXRobmFtYWRkci5jLHYgMS43MCAyMDA2LzAzLzIyIDAwOjAzOjUxIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiArK0NvcHlyaWdodCsrIDE5ODUsIDE5ODgsIDE5OTMKKyAqIC0KKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OCwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICogLQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqIC0KKyAqIC0tQ29weXJpZ2h0LS0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjaW5jbHVkZSAicmVzb2x2X2NhY2hlLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzeXNsb2cuaD4KKworI2lmbmRlZiBMT0dfQVVUSAorIyBkZWZpbmUgTE9HX0FVVEggMAorI2VuZGlmCisKKyNkZWZpbmUgTVVMVElfUFRSU19BUkVfQUxJQVNFUyAxCS8qIFhYWCAtIGV4cGVyaW1lbnRhbCAqLworCisjaW5jbHVkZSAibnNzd2l0Y2guaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworc3RhdGljIGNvbnN0IGNoYXIgY29uc3QgQXNrZWRGb3JHb3RbXSA9CisJCQkgICJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXNcIiwgZ290IFwiJXNcIiI7CisKKyNkZWZpbmUJTUFYUEFDS0VUCSg2NCoxMDI0KQorCit0eXBlZGVmIHVuaW9uIHsKKyAgICBIRUFERVIgaGRyOworICAgIHVfY2hhciBidWZbTUFYUEFDS0VUXTsKK30gcXVlcnlidWY7CisKK3R5cGVkZWYgdW5pb24geworICAgIGludDMyX3QgYWw7CisgICAgY2hhciBhYzsKK30gYWxpZ247CisKKyNpZmRlZiBERUJVRworc3RhdGljIHZvaWQgZHByaW50Zihjb25zdCBjaGFyICosIHJlc19zdGF0ZSwgLi4uKQorCV9fYXR0cmlidXRlX18oKF9fZm9ybWF0X18oX19wcmludGZfXywgMSwgMykpKTsKKyNlbmRpZgorc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRhbnN3ZXIoY29uc3QgcXVlcnlidWYgKiwgaW50LCBjb25zdCBjaGFyICosIGludCwKKyAgICByZXNfc3RhdGUpOworc3RhdGljIHZvaWQgbWFwX3Y0djZfYWRkcmVzcyhjb25zdCBjaGFyICosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBtYXBfdjR2Nl9ob3N0ZW50KHN0cnVjdCBob3N0ZW50ICosIGNoYXIgKiosIGNoYXIgKik7CitzdGF0aWMgdm9pZCBhZGRyc29ydChjaGFyICoqLCBpbnQsIHJlc19zdGF0ZSk7CisKK3ZvaWQgX3NldGh0ZW50KGludCk7Cit2b2lkIF9lbmRodGVudCh2b2lkKTsKK3N0cnVjdCBob3N0ZW50ICpfZ2V0aHRlbnQodm9pZCk7Cit2b2lkIGh0X3NldGhvc3RlbnQoaW50KTsKK3ZvaWQgaHRfZW5kaG9zdGVudCh2b2lkKTsKK3N0cnVjdCBob3N0ZW50ICpodF9nZXRob3N0YnluYW1lKGNoYXIgKik7CitzdHJ1Y3QgaG9zdGVudCAqaHRfZ2V0aG9zdGJ5YWRkcihjb25zdCBjaGFyICosIGludCwgaW50KTsKK3ZvaWQgZG5zX3NlcnZpY2Uodm9pZCk7CisjdW5kZWYgZG5fc2tpcG5hbWUKK2ludCBkbl9za2lwbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOworaW50IF9nZXRodGJ5YWRkcih2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CitpbnQgX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK3N0cnVjdCBob3N0ZW50ICpfZ2V0aHRieW5hbWUyKGNvbnN0IGNoYXIgKiwgaW50KTsKK2ludCBfZG5zX2dldGh0YnlhZGRyKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKK2ludCBfZG5zX2dldGh0YnluYW1lKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICpnZXRob3N0YnluYW1lX2ludGVybmFsKGNvbnN0IGNoYXIgKiwgaW50LCByZXNfc3RhdGUpOworCitzdGF0aWMgY29uc3QgbnNfc3JjIGRlZmF1bHRfZG5zX2ZpbGVzW10gPSB7CisJeyBOU1NSQ19GSUxFUywgCU5TX1NVQ0NFU1MgfSwKKwl7IE5TU1JDX0ROUywgCU5TX1NVQ0NFU1MgfSwKKwl7IDAsIDAgfQorfTsKKworCisjaWZkZWYgREVCVUcKK3N0YXRpYyB2b2lkCitkcHJpbnRmKGNvbnN0IGNoYXIgKm1zZywgcmVzX3N0YXRlIHJlcywgLi4uKQoreworCWFzc2VydChtc2cgIT0gTlVMTCk7CisKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKSB7CisJCWludCBzYXZlID0gZXJybm87CisJCXZhX2xpc3QgYXA7CisKKwkJdmFfc3RhcnQgKGFwLCByZXMpOworCQl2cHJpbnRmKG1zZywgYXApOworCQl2YV9lbmQgKGFwKTsKKworCQllcnJubyA9IHNhdmU7CisJfQorfQorI2Vsc2UKKyMgZGVmaW5lIGRwcmludGYobXNnLCByZXMsIG51bSkgKCh2b2lkKTApIC8qbmFkYSovCisjZW5kaWYKKworI2RlZmluZSBCT1VOREVEX0lOQ1IoeCkgXAorCWRvIHsgXAorCQljcCArPSAoeCk7IFwKKwkJaWYgKGNwID4gZW9tKSB7IFwKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsgXAorCQkJcmV0dXJuIE5VTEw7IFwKKwkJfSBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgQk9VTkRTX0NIRUNLKHB0ciwgY291bnQpIFwKKwlkbyB7IFwKKwkJaWYgKChwdHIpICsgKGNvdW50KSA+IGVvbSkgeyBcCisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7IFwKKwkJCXJldHVybiBOVUxMOyBcCisJCX0gXAorCX0gd2hpbGUgKC8qQ09OU1RDT05EKi8wKQorCitzdGF0aWMgc3RydWN0IGhvc3RlbnQgKgorZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICphbnN3ZXIsIGludCBhbnNsZW4sIGNvbnN0IGNoYXIgKnFuYW1lLCBpbnQgcXR5cGUsCisgICAgcmVzX3N0YXRlIHJlcykKK3sKKwljb25zdCBIRUFERVIgKmhwOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IG47CisJY29uc3QgdV9jaGFyICplb20sICplcmRhdGE7CisJY2hhciAqYnAsICoqYXAsICoqaGFwLCAqZXA7CisJaW50IHR5cGUsIGNsYXNzLCBhbmNvdW50LCBxZGNvdW50OworCWludCBoYXZlYW5zd2VyLCBoYWRfZXJyb3I7CisJaW50IHRvb2JpZyA9IDA7CisJY2hhciB0YnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICp0bmFtZTsKKwlpbnQgKCpuYW1lX29rKShjb25zdCBjaGFyICopOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KGFuc3dlciAhPSBOVUxMKTsKKwlhc3NlcnQocW5hbWUgIT0gTlVMTCk7CisKKwl0bmFtZSA9IHFuYW1lOworCXJzLT5ob3N0LmhfbmFtZSA9IE5VTEw7CisJZW9tID0gYW5zd2VyLT5idWYgKyBhbnNsZW47CisJc3dpdGNoIChxdHlwZSkgeworCWNhc2UgVF9BOgorCWNhc2UgVF9BQUFBOgorCQluYW1lX29rID0gcmVzX2hub2s7CisJCWJyZWFrOworCWNhc2UgVF9QVFI6CisJCW5hbWVfb2sgPSByZXNfZG5vazsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIE5VTEw7CS8qIFhYWCBzaG91bGQgYmUgYWJvcnQoKTsgKi8KKwl9CisJLyoKKwkgKiBmaW5kIGZpcnN0IHNhdGlzZmFjdG9yeSBhbnN3ZXIKKwkgKi8KKwlocCA9ICZhbnN3ZXItPmhkcjsKKwlhbmNvdW50ID0gbnRvaHMoaHAtPmFuY291bnQpOworCXFkY291bnQgPSBudG9ocyhocC0+cWRjb3VudCk7CisJYnAgPSBycy0+aG9zdGJ1ZjsKKwllcCA9IHJzLT5ob3N0YnVmICsgc2l6ZW9mIHJzLT5ob3N0YnVmOworCWNwID0gYW5zd2VyLT5idWY7CisJQk9VTkRFRF9JTkNSKEhGSVhFRFNaKTsKKwlpZiAocWRjb3VudCAhPSAxKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKShicCkpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gTlVMTDsKKwl9CisJQk9VTkRFRF9JTkNSKG4gKyBRRklYRURTWik7CisJaWYgKHF0eXBlID09IFRfQSB8fCBxdHlwZSA9PSBUX0FBQUEpIHsKKwkJLyogcmVzX3NlbmQoKSBoYXMgYWxyZWFkeSB2ZXJpZmllZCB0aGF0IHRoZSBxdWVyeSBuYW1lIGlzIHRoZQorCQkgKiBzYW1lIGFzIHRoZSBvbmUgd2Ugc2VudDsgdGhpcyBqdXN0IGdldHMgdGhlIGV4cGFuZGVkIG5hbWUKKwkJICogKGkuZS4sIHdpdGggdGhlIHN1Y2NlZWRpbmcgc2VhcmNoLWRvbWFpbiB0YWNrZWQgb24pLgorCQkgKi8KKwkJbiA9IHN0cmxlbihicCkgKyAxOwkJLyogZm9yIHRoZSBcMCAqLworCQlpZiAobiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIE5VTEw7CisJCX0KKwkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCWJwICs9IG47CisJCS8qIFRoZSBxbmFtZSBjYW4gYmUgYWJicmV2aWF0ZWQsIGJ1dCBoX25hbWUgaXMgbm93IGFic29sdXRlLiAqLworCQlxbmFtZSA9IHJzLT5ob3N0LmhfbmFtZTsKKwl9CisJYXAgPSBycy0+aG9zdF9hbGlhc2VzOworCSphcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwloYXAgPSBycy0+aF9hZGRyX3B0cnM7CisJKmhhcCA9IE5VTEw7CisJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJaGF2ZWFuc3dlciA9IDA7CisJaGFkX2Vycm9yID0gMDsKKwl3aGlsZSAoYW5jb3VudC0tID4gMCAmJiBjcCA8IGVvbSAmJiAhaGFkX2Vycm9yKSB7CisJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCQloYWRfZXJyb3IrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNwICs9IG47CQkJLyogbmFtZSAqLworCQlCT1VORFNfQ0hFQ0soY3AsIDMgKiBJTlQxNlNaICsgSU5UMzJTWik7CisJCXR5cGUgPSBfZ2V0c2hvcnQoY3ApOworIAkJY3AgKz0gSU5UMTZTWjsJCQkvKiB0eXBlICovCisJCWNsYXNzID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1ogKyBJTlQzMlNaOwkvKiBjbGFzcywgVFRMICovCisJCW4gPSBfZ2V0c2hvcnQoY3ApOworCQljcCArPSBJTlQxNlNaOwkJCS8qIGxlbiAqLworCQlCT1VORFNfQ0hFQ0soY3AsIG4pOworCQllcmRhdGEgPSBjcCArIG47CisJCWlmIChjbGFzcyAhPSBDX0lOKSB7CisJCQkvKiBYWFggLSBkZWJ1Zz8gc3lzbG9nPyAqLworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCWlmICgocXR5cGUgPT0gVF9BIHx8IHF0eXBlID09IFRfQUFBQSkgJiYgdHlwZSA9PSBUX0NOQU1FKSB7CisJCQlpZiAoYXAgPj0gJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQljb250aW51ZTsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmICgobiA8IDApIHx8ICEoKm5hbWVfb2spKHRidWYpKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCS8qIFN0b3JlIGFsaWFzLiAqLworCQkJKmFwKysgPSBicDsKKwkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWJwICs9IG47CisJCQkvKiBHZXQgY2Fub25pY2FsIG5hbWUuICovCisJCQluID0gc3RybGVuKHRidWYpICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJaWYgKG4gPiBlcCAtIGJwIHx8IG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCXN0cmxjcHkoYnAsIHRidWYsIChzaXplX3QpKGVwIC0gYnApKTsKKwkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChxdHlwZSA9PSBUX1BUUiAmJiB0eXBlID09IFRfQ05BTUUpIHsKKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIHRidWYsIHNpemVvZiB0YnVmKTsKKwkJCWlmIChuIDwgMCB8fCAhcmVzX2Rub2sodGJ1ZikpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJLyogR2V0IGNhbm9uaWNhbCBuYW1lLiAqLworCQkJbiA9IHN0cmxlbih0YnVmKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlzdHJsY3B5KGJwLCB0YnVmLCAoc2l6ZV90KShlcCAtIGJwKSk7CisJCQl0bmFtZSA9IGJwOworCQkJYnAgKz0gbjsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmICh0eXBlICE9IHF0eXBlKSB7CisJCQlpZiAodHlwZSAhPSBUX0tFWSAmJiB0eXBlICE9IFRfU0lHKQorCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCSAgICAgICAiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzICVzICVzXCIsIGdvdCB0eXBlIFwiJXNcIiIsCisJCQkJICAgICAgIHFuYW1lLCBwX2NsYXNzKENfSU4pLCBwX3R5cGUocXR5cGUpLAorCQkJCSAgICAgICBwX3R5cGUodHlwZSkpOworCQkJY3AgKz0gbjsKKwkJCWNvbnRpbnVlOwkJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQl9CisJCXN3aXRjaCAodHlwZSkgeworCQljYXNlIFRfUFRSOgorCQkJaWYgKHN0cmNhc2VjbXAodG5hbWUsIGJwKSAhPSAwKSB7CisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJCQkJICAgICAgIEFza2VkRm9yR290LCBxbmFtZSwgYnApOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJCX0KKwkJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJCWlmICgobiA8IDApIHx8ICFyZXNfaG5vayhicCkpIHsKKwkJCQloYWRfZXJyb3IrKzsKKwkJCQlicmVhazsKKwkJCX0KKyNpZiBNVUxUSV9QVFJTX0FSRV9BTElBU0VTCisJCQljcCArPSBuOworCQkJaWYgKGNwICE9IGVyZGF0YSkgeworCQkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikKKwkJCQlycy0+aG9zdC5oX25hbWUgPSBicDsKKwkJCWVsc2UgaWYgKGFwIDwgJnJzLT5ob3N0X2FsaWFzZXNbTUFYQUxJQVNFUy0xXSkKKwkJCQkqYXArKyA9IGJwOworCQkJZWxzZQorCQkJCW4gPSAtMTsKKwkJCWlmIChuICE9IC0xKSB7CisJCQkJbiA9IHN0cmxlbihicCkgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCQkJaGFkX2Vycm9yKys7CisJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlicCArPSBuOworCQkJfQorCQkJYnJlYWs7CisjZWxzZQorCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQkJCW4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJCWlmIChuID49IE1BWEhPU1ROQU1FTEVOKSB7CisJCQkJCWhhZF9lcnJvcisrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnAgKz0gbjsKKwkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7CisJCQl9CisJCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJCXJldHVybiAmcnMtPmhvc3Q7CisjZW5kaWYKKwkJY2FzZSBUX0E6CisJCWNhc2UgVF9BQUFBOgorCQkJaWYgKHN0cmNhc2VjbXAocnMtPmhvc3QuaF9uYW1lLCBicCkgIT0gMCkgeworCQkJCXN5c2xvZyhMT0dfTk9USUNFfExPR19BVVRILAorCQkJCSAgICAgICBBc2tlZEZvckdvdCwgcnMtPmhvc3QuaF9uYW1lLCBicCk7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsJLyogWFhYIC0gaGFkX2Vycm9yKysgPyAqLworCQkJfQorCQkJaWYgKG4gIT0gcnMtPmhvc3QuaF9sZW5ndGgpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKHR5cGUgPT0gVF9BQUFBKSB7CisJCQkJc3RydWN0IGluNl9hZGRyIGluNjsKKwkJCQltZW1jcHkoJmluNiwgY3AsIElONkFERFJTWik7CisJCQkJaWYgKElONl9JU19BRERSX1Y0TUFQUEVEKCZpbjYpKSB7CisJCQkJCWNwICs9IG47CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCX0KKwkJCWlmICghaGF2ZWFuc3dlcikgeworCQkJCWludCBubjsKKworCQkJCXJzLT5ob3N0LmhfbmFtZSA9IGJwOworCQkJCW5uID0gc3RybGVuKGJwKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCQlicCArPSBubjsKKwkJCX0KKworCQkJYnAgKz0gc2l6ZW9mKGFsaWduKSAtCisJCQkgICAgKHNpemVfdCkoKHVfbG9uZylicCAlIHNpemVvZihhbGlnbikpOworCisJCQlpZiAoYnAgKyBuID49ICZycy0+aG9zdGJ1ZltzaXplb2YgcnMtPmhvc3RidWZdKSB7CisJCQkJZHByaW50Zigic2l6ZSAoJWQpIHRvbyBiaWdcbiIsIHJlcywgbik7CisJCQkJaGFkX2Vycm9yKys7CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAoaGFwID49ICZycy0+aF9hZGRyX3B0cnNbTUFYQUREUlMtMV0pIHsKKwkJCQlpZiAoIXRvb2JpZysrKQorCQkJCQlkcHJpbnRmKCJUb28gbWFueSBhZGRyZXNzZXMgKCVkKVxuIiwKKwkJCQkJCXJlcywgTUFYQUREUlMpOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQkodm9pZCltZW1jcHkoKmhhcCsrID0gYnAsIGNwLCAoc2l6ZV90KW4pOworCQkJYnAgKz0gbjsKKwkJCWNwICs9IG47CisJCQlpZiAoY3AgIT0gZXJkYXRhKSB7CisJCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlhYm9ydCgpOworCQl9CisJCWlmICghaGFkX2Vycm9yKQorCQkJaGF2ZWFuc3dlcisrOworCX0KKwlpZiAoaGF2ZWFuc3dlcikgeworCQkqYXAgPSBOVUxMOworCQkqaGFwID0gTlVMTDsKKwkJLyoKKwkJICogTm90ZTogd2Ugc29ydCBldmVuIGlmIGhvc3QgY2FuIHRha2Ugb25seSBvbmUgYWRkcmVzcworCQkgKiBpbiBpdHMgcmV0dXJuIHN0cnVjdHVyZXMgLSBzaG91bGQgZ2l2ZSBpdCB0aGUgImJlc3QiCisJCSAqIGFkZHJlc3MgaW4gdGhhdCBjYXNlLCBub3Qgc29tZSByYW5kb20gb25lCisJCSAqLworCQlpZiAocmVzLT5uc29ydCAmJiBoYXZlYW5zd2VyID4gMSAmJiBxdHlwZSA9PSBUX0EpCisJCQlhZGRyc29ydChycy0+aF9hZGRyX3B0cnMsIGhhdmVhbnN3ZXIsIHJlcyk7CisJCWlmICghcnMtPmhvc3QuaF9uYW1lKSB7CisJCQluID0gc3RybGVuKHFuYW1lKSArIDE7CS8qIGZvciB0aGUgXDAgKi8KKwkJCWlmIChuID4gZXAgLSBicCB8fCBuID49IE1BWEhPU1ROQU1FTEVOKQorCQkJCWdvdG8gbm9fcmVjb3Zlcnk7CisJCQlzdHJsY3B5KGJwLCBxbmFtZSwgKHNpemVfdCkoZXAgLSBicCkpOworCQkJcnMtPmhvc3QuaF9uYW1lID0gYnA7CisJCQlicCArPSBuOworCQl9CisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJbWFwX3Y0djZfaG9zdGVudCgmcnMtPmhvc3QsICZicCwgZXApOworCQloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwkJcmV0dXJuICZycy0+aG9zdDsKKwl9Cisgbm9fcmVjb3Zlcnk6CisJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCXJldHVybiBOVUxMOworfQorCitpbnQKK2dldGhvc3RieW5hbWVfcihjb25zdCBjaGFyICpuYW1lLCBzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICBzdHJ1Y3QgaG9zdGVudCoqcmVzdWx0LCBpbnQgKmVycm9ycCkKK3sKKyAgICAgICAgc3RydWN0IGhvc3RlbnQgKnJlczsKKworICAgICAgICByZXMgPSBnZXRob3N0YnluYW1lKG5hbWUpOworICAgICAgICAqZXJyb3JwID0gaF9lcnJubzsKKyAgICAgICAgaWYgKHJlcyA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICB9CisgICAgICAgIG1lbWNweShocCwgcmVzLCBzaXplb2YgKmhwKTsKKyAgICAgICAgKnJlc3VsdCA9IGhwOworICAgICAgICByZXR1cm4gMDsKK30KKworc3RydWN0IGhvc3RlbnQgKgorZ2V0aG9zdGJ5bmFtZShjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCBob3N0ZW50ICpocDsKKwlyZXNfc3RhdGUgcmVzID0gX19yZXNfZ2V0X3N0YXRlKCk7CisKKwlpZiAocmVzID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJYXNzZXJ0KG5hbWUgIT0gTlVMTCk7CisKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX1VTRV9JTkVUNikgeworCQlocCA9IGdldGhvc3RieW5hbWVfaW50ZXJuYWwobmFtZSwgQUZfSU5FVDYsIHJlcyk7CisJCWlmIChocCkgeworCQkJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJCQlyZXR1cm4gaHA7CisJCX0KKwl9CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIEFGX0lORVQsIHJlcyk7CisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJcmV0dXJuIGhwOworfQorCitzdHJ1Y3QgaG9zdGVudCAqCitnZXRob3N0YnluYW1lMihjb25zdCBjaGFyICpuYW1lLCBpbnQgYWYpCit7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXJlc19zdGF0ZSByZXMgPSBfX3Jlc19nZXRfc3RhdGUoKTsKKworCWlmIChyZXMgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJaHAgPSBnZXRob3N0YnluYW1lX2ludGVybmFsKG5hbWUsIGFmLCByZXMpOworCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCXJldHVybiBocDsKK30KKworc3RhdGljIHN0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieW5hbWVfaW50ZXJuYWwoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmLCByZXNfc3RhdGUgcmVzKQoreworCWNvbnN0IGNoYXIgKmNwOworCWNoYXIgKmJwLCAqZXA7CisJaW50IHNpemU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworICAgICAgICBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGU7CisgICAgICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJc3RhdGljIGNvbnN0IG5zX2R0YWIgZHRhYltdID0geworCQlOU19GSUxFU19DQihfZ2V0aHRieW5hbWUsIE5VTEwpCisJCXsgTlNTUkNfRE5TLCBfZG5zX2dldGh0YnluYW1lLCBOVUxMIH0sCS8qIGZvcmNlIC1ESEVTSU9EICovCisJCXsgMCwgMCwgMCB9CisJfTsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJc2l6ZSA9IElOQUREUlNaOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlzaXplID0gSU42QUREUlNaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCWVycm5vID0gRUFGTk9TVVBQT1JUOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisJcnMtPmhvc3QuaF9sZW5ndGggPSBzaXplOworCisJLyoKKwkgKiBpZiB0aGVyZSBhcmVuJ3QgYW55IGRvdHMsIGl0IGNvdWxkIGJlIGEgdXNlci1sZXZlbCBhbGlhcy4KKwkgKiB0aGlzIGlzIGFsc28gZG9uZSBpbiByZXNfbnF1ZXJ5KCkgc2luY2Ugd2UgYXJlIG5vdCB0aGUgb25seQorCSAqIGZ1bmN0aW9uIHRoYXQgbG9va3MgdXAgaG9zdCBuYW1lcy4KKwkgKi8KKwlpZiAoIXN0cmNocihuYW1lLCAnLicpICYmIChjcCA9IF9faG9zdGFsaWFzKG5hbWUpKSkKKwkJbmFtZSA9IGNwOworCisJLyoKKwkgKiBkaXNhbGxvdyBuYW1lcyBjb25zaXN0aW5nIG9ubHkgb2YgZGlnaXRzL2RvdHMsIHVubGVzcworCSAqIHRoZXkgZW5kIGluIGEgZG90LgorCSAqLworCWlmIChpc2RpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pKQorCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKKwkJCWlmICghKmNwKSB7CisJCQkJaWYgKCotLWNwID09ICcuJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBBbGwtbnVtZXJpYywgbm8gZG90IGF0IHRoZSBlbmQuCisJCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQorCQkJCSAqIGRvbmUgYSBsb29rdXAuCisJCQkJICovCisJCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKKwkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKKwkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOworCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7CisJCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOworCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCQkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJCQltYXBfdjR2Nl9ob3N0ZW50KCZycy0+aG9zdCwgJmJwLCBlcCk7CisJCQkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCQkJcmV0dXJuICZycy0+aG9zdDsKKwkJCX0KKwkJCWlmICghaXNkaWdpdCgodV9jaGFyKSAqY3ApICYmICpjcCAhPSAnLicpCisJCQkJYnJlYWs7CisJCX0KKwlpZiAoKGlzeGRpZ2l0KCh1X2NoYXIpIG5hbWVbMF0pICYmIHN0cmNocihuYW1lLCAnOicpICE9IE5VTEwpIHx8CisJICAgIG5hbWVbMF0gPT0gJzonKQorCQlmb3IgKGNwID0gbmFtZTs7ICsrY3ApIHsKKwkJCWlmICghKmNwKSB7CisJCQkJaWYgKCotLWNwID09ICcuJykKKwkJCQkJYnJlYWs7CisJCQkJLyoKKwkJCQkgKiBBbGwtSVB2Ni1sZWdhbCwgbm8gZG90IGF0IHRoZSBlbmQuCisJCQkJICogRmFrZSB1cCBhIGhvc3RlbnQgYXMgaWYgd2UnZCBhY3R1YWxseQorCQkJCSAqIGRvbmUgYSBsb29rdXAuCisJCQkJICovCisJCQkJaWYgKGluZXRfcHRvbihhZiwgbmFtZSwKKwkJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpIDw9IDApIHsKKwkJCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQkJCQlyZXR1cm4gTlVMTDsKKwkJCQl9CisJCQkJc3RybmNweShycy0+aG9zdGJ1ZiwgbmFtZSwgTUFYRE5BTUUpOworCQkJCXJzLT5ob3N0YnVmW01BWEROQU1FXSA9ICdcMCc7CisJCQkJYnAgPSBycy0+aG9zdGJ1ZiArIE1BWEROQU1FOworCQkJCWVwID0gcnMtPmhvc3RidWYgKyBzaXplb2YgcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9uYW1lID0gcnMtPmhvc3RidWY7CisJCQkJcnMtPmhvc3QuaF9hbGlhc2VzID0gcnMtPmhvc3RfYWxpYXNlczsKKwkJCQlycy0+aG9zdF9hbGlhc2VzWzBdID0gTlVMTDsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwkJCQlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCQkJCXJzLT5ob3N0LmhfYWRkcl9saXN0ID0gcnMtPmhfYWRkcl9wdHJzOworCQkJCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCQkJCXJldHVybiAmcnMtPmhvc3Q7CisJCQl9CisJCQlpZiAoIWlzeGRpZ2l0KCh1X2NoYXIpICpjcCkgJiYgKmNwICE9ICc6JyAmJiAqY3AgIT0gJy4nKQorCQkJCWJyZWFrOworCQl9CisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyAgICAgICAgY2FjaGUgPSBfX2dldF9yZXNfY2FjaGUoKTsKKyAgICAgICAgaWYgKGNhY2hlICE9IE5VTEwpIHsKKyAgICAgICAgICAgIGhwID0gX3Jlc29sdl9jYWNoZV9sb29rdXAoIGNhY2hlLCBuYW1lLCBhZiApOworICAgICAgICAgICAgaWYgKGhwID09IF9SRVNPTFZfSE9TVEVOVF9OT05FKSB7CisgICAgICAgICAgICAgICAgaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworICAgICAgICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGhwICE9IE5VTEwpIHsKKyAgICAgICAgICAgICAgICBoX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKyAgICAgICAgICAgICAgICByZXR1cm4gaHA7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyNlbmRpZgorCisJaHAgPSBOVUxMOworCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwlpZiAobnNkaXNwYXRjaCgmaHAsIGR0YWIsIE5TREJfSE9TVFMsICJnZXRob3N0YnluYW1lIiwKKwkgICAgZGVmYXVsdF9kbnNfZmlsZXMsIG5hbWUsIHN0cmxlbihuYW1lKSwgYWYpICE9IE5TX1NVQ0NFU1MpIHsKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyAgICAgICAgICAgICAgICAvKiBjYWNoZSBuZWdhdGl2ZSBETlMgZW50cnkgKi8KKyAgICAgICAgICAgICAgICBpZiAoaF9lcnJubyA9PSBIT1NUX05PVF9GT1VORCAmJiBjYWNoZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBfcmVzb2x2X2NhY2hlX2FkZCggY2FjaGUsIG5hbWUsIGFmLCBfUkVTT0xWX0hPU1RFTlRfTk9ORSApOworI2VuZGlmCisJCXJldHVybiBOVUxMOworICAgICAgICB9CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisgICAgaWYgKGNhY2hlICE9IE5VTEwpIHsKKyAgICAgICAgX3Jlc29sdl9jYWNoZV9hZGQoIGNhY2hlLCBuYW1lLCBhZiwgaHAgKTsKKyAgICB9CisjZW5kaWYKKwloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwlyZXR1cm4gaHA7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RieWFkZHIoY29uc3QgY2hhciAqYWRkciwJLyogWFhYIHNob3VsZCBoYXZlIGJlZW4gZGVmJ2QgYXMgdV9jaGFyISAqLworICAgIHNvY2tsZW5fdCBsZW4sIGludCBhZikKK3sKKwljb25zdCB1X2NoYXIgKnVhZGRyID0gKGNvbnN0IHVfY2hhciAqKWFkZHI7CisJc29ja2xlbl90IHNpemU7CisJc3RydWN0IGhvc3RlbnQgKmhwOworCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKKwkJTlNfRklMRVNfQ0IoX2dldGh0YnlhZGRyLCBOVUxMKQorCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRodGJ5YWRkciwgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLworCQl7IDAsIDAsIDAgfQorCX07CisKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKworCWlmIChhZiA9PSBBRl9JTkVUNiAmJiBsZW4gPT0gSU42QUREUlNaICYmCisJICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpIHx8CisJICAgICBJTjZfSVNfQUREUl9TSVRFTE9DQUwoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpKSkgeworCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoYWYgPT0gQUZfSU5FVDYgJiYgbGVuID09IElONkFERFJTWiAmJgorCSAgICAoSU42X0lTX0FERFJfVjRNQVBQRUQoKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShjb25zdCB2b2lkICopdWFkZHIpIHx8CisJICAgICBJTjZfSVNfQUREUl9WNENPTVBBVCgoY29uc3Qgc3RydWN0IGluNl9hZGRyICopKGNvbnN0IHZvaWQgKil1YWRkcikpKSB7CisJCS8qIFVubWFwLiAqLworCQlhZGRyICs9IElONkFERFJTWiAtIElOQUREUlNaOworCQl1YWRkciArPSBJTjZBRERSU1ogLSBJTkFERFJTWjsKKwkJYWYgPSBBRl9JTkVUOworCQlsZW4gPSBJTkFERFJTWjsKKwl9CisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJc2l6ZSA9IElOQUREUlNaOworCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlzaXplID0gSU42QUREUlNaOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnJubyA9IEVBRk5PU1VQUE9SVDsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisJaWYgKHNpemUgIT0gbGVuKSB7CisJCWVycm5vID0gRUlOVkFMOworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOVUxMOworCX0KKwlocCA9IE5VTEw7CisJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCWlmIChuc2Rpc3BhdGNoKCZocCwgZHRhYiwgTlNEQl9IT1NUUywgImdldGhvc3RieWFkZHIiLAorCSAgICBkZWZhdWx0X2Ruc19maWxlcywgdWFkZHIsIGxlbiwgYWYpICE9IE5TX1NVQ0NFU1MpCisJCXJldHVybiBOVUxMOworCWhfZXJybm8gPSBORVREQl9TVUNDRVNTOworCXJldHVybiBocDsKK30KKwordm9pZAorX3NldGh0ZW50KGludCBmKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47CisJaWYgKCFycy0+aG9zdGYpCisJCXJzLT5ob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKTsKKwllbHNlCisJCXJld2luZChycy0+aG9zdGYpOworCXJzLT5zdGF5b3BlbiA9IGY7Cit9CisKK3ZvaWQKK19lbmRodGVudCh2b2lkKQoreworICAgIHJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIGlmIChycyA9PSBOVUxMKSByZXR1cm47CisKKwlpZiAocnMtPmhvc3RmICYmICFycy0+c3RheW9wZW4pIHsKKwkJKHZvaWQpIGZjbG9zZShycy0+aG9zdGYpOworCQlycy0+aG9zdGYgPSBOVUxMOworCX0KK30KKworc3RydWN0IGhvc3RlbnQgKgorX2dldGh0ZW50KHZvaWQpCit7CisJY2hhciAqcDsKKwljaGFyICpjcCwgKipxOworCWludCBhZiwgbGVuOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJaWYgKCFycy0+aG9zdGYgJiYgIShycy0+aG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICkpKSB7CisJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJcmV0dXJuIE5VTEw7CisJfQorIGFnYWluOgorCWlmICghKHAgPSBmZ2V0cyhycy0+aG9zdGJ1Ziwgc2l6ZW9mIHJzLT5ob3N0YnVmLCBycy0+aG9zdGYpKSkgeworCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCXJldHVybiBOVUxMOworCX0KKwlpZiAoKnAgPT0gJyMnKQorCQlnb3RvIGFnYWluOworCWlmICghKGNwID0gc3RycGJyayhwLCAiI1xuIikpKQorCQlnb3RvIGFnYWluOworCSpjcCA9ICdcMCc7CisJaWYgKCEoY3AgPSBzdHJwYnJrKHAsICIgXHQiKSkpCisJCWdvdG8gYWdhaW47CisJKmNwKysgPSAnXDAnOworCWlmIChpbmV0X3B0b24oQUZfSU5FVDYsIHAsIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA+IDApIHsKKwkJYWYgPSBBRl9JTkVUNjsKKwkJbGVuID0gSU42QUREUlNaOworCX0gZWxzZSBpZiAoaW5ldF9wdG9uKEFGX0lORVQsIHAsIChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyKSA+IDApIHsKKwkJcmVzX3N0YXRlIHJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCQlpZiAocmVzID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfSU5FVDYpIHsKKwkJCW1hcF92NHY2X2FkZHJlc3MoKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIsCisJCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpOworCQkJYWYgPSBBRl9JTkVUNjsKKwkJCWxlbiA9IElONkFERFJTWjsKKwkJfSBlbHNlIHsKKwkJCWFmID0gQUZfSU5FVDsKKwkJCWxlbiA9IElOQUREUlNaOworCQl9CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCX0gZWxzZSB7CisJCWdvdG8gYWdhaW47CisJfQorCS8qIGlmIHRoaXMgaXMgbm90IHNvbWV0aGluZyB3ZSdyZSBsb29raW5nIGZvciwgc2tpcCBpdC4gKi8KKwlpZiAocnMtPmhvc3QuaF9hZGRydHlwZSAhPSAwICYmIHJzLT5ob3N0LmhfYWRkcnR5cGUgIT0gYWYpCisJCWdvdG8gYWdhaW47CisJaWYgKHJzLT5ob3N0LmhfbGVuZ3RoICE9IDAgJiYgcnMtPmhvc3QuaF9sZW5ndGggIT0gbGVuKQorCQlnb3RvIGFnYWluOworCXJzLT5oX2FkZHJfcHRyc1swXSA9IChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyOworCXJzLT5oX2FkZHJfcHRyc1sxXSA9IE5VTEw7CisJcnMtPmhvc3QuaF9hZGRyX2xpc3QgPSBycy0+aF9hZGRyX3B0cnM7CisJcnMtPmhvc3QuaF9sZW5ndGggPSBsZW47CisJcnMtPmhvc3QuaF9hZGRydHlwZSA9IGFmOworCXdoaWxlICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKQorCQljcCsrOworCXJzLT5ob3N0LmhfbmFtZSA9IGNwOworCXEgPSBycy0+aG9zdC5oX2FsaWFzZXMgPSBycy0+aG9zdF9hbGlhc2VzOworCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCisJCSpjcCsrID0gJ1wwJzsKKwl3aGlsZSAoY3AgJiYgKmNwKSB7CisJCWlmICgqY3AgPT0gJyAnIHx8ICpjcCA9PSAnXHQnKSB7CisJCQljcCsrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHEgPCAmcnMtPmhvc3RfYWxpYXNlc1tNQVhBTElBU0VTIC0gMV0pCisJCQkqcSsrID0gY3A7CisJCWlmICgoY3AgPSBzdHJwYnJrKGNwLCAiIFx0IikpICE9IE5VTEwpCisJCQkqY3ArKyA9ICdcMCc7CisJfQorCSpxID0gTlVMTDsKKwloX2Vycm5vID0gTkVUREJfU1VDQ0VTUzsKKwlyZXR1cm4gJnJzLT5ob3N0OworfQorCisvKkFSR1NVU0VEKi8KK2ludAorX2dldGh0YnluYW1lKHZvaWQgKnJ2LCB2b2lkICpjYl9kYXRhLCB2YV9saXN0IGFwKQoreworCXN0cnVjdCBob3N0ZW50ICpocDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBhZjsKKworCWFzc2VydChydiAhPSBOVUxMKTsKKworCW5hbWUgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJLyogTk9TVFJJQ1Qgc2tpcCBsZW4gKi8odm9pZCl2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisKKwlocCA9IE5VTEw7CisjaWYgMAorCXsKKwkJcmVzX3N0YXRlIHJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCQlpZiAocmVzID09IE5VTEwpCisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KQorCQkJaHAgPSBfZ2V0aHRieW5hbWUyKG5hbWUsIEFGX0lORVQ2KTsKKwkJaWYgKGhwPT1OVUxMKQorCQkJaHAgPSBfZ2V0aHRieW5hbWUyKG5hbWUsIEFGX0lORVQpOworCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwl9CisjZWxzZQorCWhwID0gX2dldGh0YnluYW1lMihuYW1lLCBhZik7CisjZW5kaWYKKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBocDsKKwlpZiAoaHAgPT0gTlVMTCkgeworCQloX2Vycm5vID0gSE9TVF9OT1RfRk9VTkQ7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK19nZXRodGJ5bmFtZTIoY29uc3QgY2hhciAqbmFtZSwgaW50IGFmKQoreworCXN0cnVjdCBob3N0ZW50ICpwOworCWNoYXIgKnRtcGJ1ZiwgKnB0ciwgKipjcDsKKwlpbnQgbnVtOworCXNpemVfdCBsZW47CisJcmVzX3N0YXRpYyBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCisJX3NldGh0ZW50KHJzLT5zdGF5b3Blbik7CisJcHRyID0gdG1wYnVmID0gTlVMTDsKKwludW0gPSAwOworCXdoaWxlICgocCA9IF9nZXRodGVudCgpKSAhPSBOVUxMICYmIG51bSA8IE1BWEFERFJTKSB7CisJCWlmIChwLT5oX2FkZHJ0eXBlICE9IGFmKQorCQkJY29udGludWU7CisJCWlmIChzdHJjYXNlY21wKHAtPmhfbmFtZSwgbmFtZSkgIT0gMCkgeworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspCisJCQkJaWYgKHN0cmNhc2VjbXAoKmNwLCBuYW1lKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCWlmICgqY3AgPT0gTlVMTCkgY29udGludWU7CisJCX0KKworCQlpZiAobnVtID09IDApIHsKKwkJCXNpemVfdCBidWZzaXplOworCQkJY2hhciAqc3JjOworCisJCQlidWZzaXplID0gc3RybGVuKHAtPmhfbmFtZSkgKyAyICsKKwkJCQkgIE1BWEFERFJTICogcC0+aF9sZW5ndGggKworCQkJCSAgQUxJR05CWVRFUzsKKwkJCWZvciAoY3AgPSBwLT5oX2FsaWFzZXM7ICpjcCAhPSBOVUxMOyBjcCsrKQorCQkJCWJ1ZnNpemUgKz0gc3RybGVuKCpjcCkgKyAxOworCisJCQlpZiAoKHRtcGJ1ZiA9IG1hbGxvYyhidWZzaXplKSkgPT0gTlVMTCkgeworCQkJCWhfZXJybm8gPSBORVREQl9JTlRFUk5BTDsKKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKworCQkJcHRyID0gdG1wYnVmOworCQkJc3JjID0gcC0+aF9uYW1lOworCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOworCQkJZm9yIChjcCA9IHAtPmhfYWxpYXNlczsgKmNwICE9IE5VTEw7IGNwKyspIHsKKwkJCQlzcmMgPSAqY3A7CisJCQkJd2hpbGUgKCgqcHRyKysgPSAqc3JjKyspICE9ICdcMCcpOworCQkJfQorCQkJKnB0cisrID0gJ1wwJzsKKworCQkJcHRyID0gKGNoYXIgKikodm9pZCAqKUFMSUdOKHB0cik7CisJCX0KKworCQkodm9pZCltZW1jcHkocHRyLCBwLT5oX2FkZHJfbGlzdFswXSwgKHNpemVfdClwLT5oX2xlbmd0aCk7CisJCXB0ciArPSBwLT5oX2xlbmd0aDsKKwkJbnVtKys7CisJfQorCV9lbmRodGVudCgpOworCWlmIChudW0gPT0gMCkgcmV0dXJuIE5VTEw7CisKKwlsZW4gPSBwdHIgLSB0bXBidWY7CisJaWYgKGxlbiA+IChzaXplb2YocnMtPmhvc3RidWYpIC0gQUxJR05CWVRFUykpIHsKKwkJZnJlZSh0bXBidWYpOworCQllcnJubyA9IEVOT1NQQzsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlVMTDsKKwl9CisJcHRyID0gbWVtY3B5KCh2b2lkICopQUxJR04ocnMtPmhvc3RidWYpLCB0bXBidWYsIGxlbik7CisJZnJlZSh0bXBidWYpOworCisJcnMtPmhvc3QuaF9uYW1lID0gcHRyOworCXdoaWxlICgqcHRyKyspOworCisJY3AgPSBycy0+aG9zdF9hbGlhc2VzOworCXdoaWxlICgqcHRyKSB7CisJCSpjcCsrID0gcHRyOworCQl3aGlsZSAoKnB0cisrKTsKKwl9CisJcHRyKys7CisJKmNwID0gTlVMTDsKKworCXB0ciA9IChjaGFyICopKHZvaWQgKilBTElHTihwdHIpOworCWNwID0gcnMtPmhfYWRkcl9wdHJzOworCXdoaWxlIChudW0tLSkgeworCQkqY3ArKyA9IHB0cjsKKwkJcHRyICs9IHJzLT5ob3N0LmhfbGVuZ3RoOworCX0KKwkqY3AgPSBOVUxMOworCisJcmV0dXJuICZycy0+aG9zdDsKK30KKworLypBUkdTVVNFRCovCitpbnQKK19nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgaG9zdGVudCAqcDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICphZGRyOworCWludCBsZW4sIGFmOworCXJlc19zdGF0aWMgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJYWRkciA9IHZhX2FyZyhhcCwgdW5zaWduZWQgY2hhciAqKTsKKwlsZW4gPSB2YV9hcmcoYXAsIGludCk7CisJYWYgPSB2YV9hcmcoYXAsIGludCk7CisKKwlycy0+aG9zdC5oX2xlbmd0aCA9IGxlbjsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gYWY7CisKKwlfc2V0aHRlbnQocnMtPnN0YXlvcGVuKTsKKwl3aGlsZSAoKHAgPSBfZ2V0aHRlbnQoKSkgIT0gTlVMTCkKKwkJaWYgKHAtPmhfYWRkcnR5cGUgPT0gYWYgJiYgIW1lbWNtcChwLT5oX2FkZHIsIGFkZHIsCisJCSAgICAoc2l6ZV90KWxlbikpCisJCQlicmVhazsKKwlfZW5kaHRlbnQoKTsKKwkqKChzdHJ1Y3QgaG9zdGVudCAqKilydikgPSBwOworCWlmIChwPT1OVUxMKSB7CisJCWhfZXJybm8gPSBIT1NUX05PVF9GT1VORDsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlyZXR1cm4gTlNfU1VDQ0VTUzsKK30KKworc3RhdGljIHZvaWQKK21hcF92NHY2X2FkZHJlc3MoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QpCit7CisJdV9jaGFyICpwID0gKHVfY2hhciAqKWRzdDsKKwljaGFyIHRtcFtJTkFERFJTWl07CisJaW50IGk7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydChkc3QgIT0gTlVMTCk7CisKKwkvKiBTdGFzaCBhIHRlbXBvcmFyeSBjb3B5IHNvIG91ciBjYWxsZXIgY2FuIHVwZGF0ZSBpbiBwbGFjZS4gKi8KKwkodm9pZCltZW1jcHkodG1wLCBzcmMsIElOQUREUlNaKTsKKwkvKiBNYXJrIHRoaXMgaXB2NiBhZGRyIGFzIGEgbWFwcGVkIGlwdjQuICovCisJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCisJCSpwKysgPSAweDAwOworCSpwKysgPSAweGZmOworCSpwKysgPSAweGZmOworCS8qIFJldHJpZXZlIHRoZSBzYXZlZCBjb3B5IGFuZCB3ZSdyZSBkb25lLiAqLworCSh2b2lkKW1lbWNweSgodm9pZCAqKXAsIHRtcCwgSU5BRERSU1opOworfQorCitzdGF0aWMgdm9pZAorbWFwX3Y0djZfaG9zdGVudChzdHJ1Y3QgaG9zdGVudCAqaHAsIGNoYXIgKipicHAsIGNoYXIgKmVwKQoreworCWNoYXIgKiphcDsKKworCWFzc2VydChocCAhPSBOVUxMKTsKKwlhc3NlcnQoYnBwICE9IE5VTEwpOworCWFzc2VydChlcCAhPSBOVUxMKTsKKworCWlmIChocC0+aF9hZGRydHlwZSAhPSBBRl9JTkVUIHx8IGhwLT5oX2xlbmd0aCAhPSBJTkFERFJTWikKKwkJcmV0dXJuOworCWhwLT5oX2FkZHJ0eXBlID0gQUZfSU5FVDY7CisJaHAtPmhfbGVuZ3RoID0gSU42QUREUlNaOworCWZvciAoYXAgPSBocC0+aF9hZGRyX2xpc3Q7ICphcDsgYXArKykgeworCQlpbnQgaSA9IHNpemVvZihhbGlnbikgLSAoc2l6ZV90KSgodV9sb25nKSpicHAgJSBzaXplb2YoYWxpZ24pKTsKKworCQlpZiAoZXAgLSAqYnBwIDwgKGkgKyBJTjZBRERSU1opKSB7CisJCQkvKiBPdXQgb2YgbWVtb3J5LiAgVHJ1bmNhdGUgYWRkcmVzcyBsaXN0IGhlcmUuICBYWFggKi8KKwkJCSphcCA9IE5VTEw7CisJCQlyZXR1cm47CisJCX0KKwkJKmJwcCArPSBpOworCQltYXBfdjR2Nl9hZGRyZXNzKCphcCwgKmJwcCk7CisJCSphcCA9ICpicHA7CisJCSpicHAgKz0gSU42QUREUlNaOworCX0KK30KKworc3RhdGljIHZvaWQKK2FkZHJzb3J0KGNoYXIgKiphcCwgaW50IG51bSwgcmVzX3N0YXRlIHJlcykKK3sKKwlpbnQgaSwgajsKKwljaGFyICoqcDsKKwlzaG9ydCBhdmFsW01BWEFERFJTXTsKKwlpbnQgbmVlZHNvcnQgPSAwOworCisJYXNzZXJ0KGFwICE9IE5VTEwpOworCisJcCA9IGFwOworCWZvciAoaSA9IDA7IGkgPCBudW07IGkrKywgcCsrKSB7CisJICAgIGZvciAoaiA9IDAgOyAodW5zaWduZWQpaiA8IHJlcy0+bnNvcnQ7IGorKykKKwkJaWYgKHJlcy0+c29ydF9saXN0W2pdLmFkZHIuc19hZGRyID09CisJCSAgICAoKChzdHJ1Y3QgaW5fYWRkciAqKSh2b2lkICopKCpwKSktPnNfYWRkciAmCisJCSAgICByZXMtPnNvcnRfbGlzdFtqXS5tYXNrKSkKKwkJCWJyZWFrOworCSAgICBhdmFsW2ldID0gajsKKwkgICAgaWYgKG5lZWRzb3J0ID09IDAgJiYgaSA+IDAgJiYgaiA8IGF2YWxbaS0xXSkKKwkJbmVlZHNvcnQgPSBpOworCX0KKwlpZiAoIW5lZWRzb3J0KQorCSAgICByZXR1cm47CisKKwl3aGlsZSAobmVlZHNvcnQgPCBudW0pIHsKKwkgICAgZm9yIChqID0gbmVlZHNvcnQgLSAxOyBqID49IDA7IGotLSkgeworCQlpZiAoYXZhbFtqXSA+IGF2YWxbaisxXSkgeworCQkgICAgY2hhciAqaHA7CisKKwkJICAgIGkgPSBhdmFsW2pdOworCQkgICAgYXZhbFtqXSA9IGF2YWxbaisxXTsKKwkJICAgIGF2YWxbaisxXSA9IGk7CisKKwkJICAgIGhwID0gYXBbal07CisJCSAgICBhcFtqXSA9IGFwW2orMV07CisJCSAgICBhcFtqKzFdID0gaHA7CisJCX0gZWxzZQorCQkgICAgYnJlYWs7CisJICAgIH0KKwkgICAgbmVlZHNvcnQrKzsKKwl9Cit9CisKK3N0cnVjdCBob3N0ZW50ICoKK2dldGhvc3RlbnQodm9pZCkKK3sKKyAgICByZXNfc3RhdGljICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKwlycy0+aG9zdC5oX2FkZHJ0eXBlID0gMDsKKwlycy0+aG9zdC5oX2xlbmd0aCA9IDA7CisJcmV0dXJuIF9nZXRodGVudCgpOworfQorCisvKkFSR1NVU0VEKi8KK2ludAorX2Ruc19nZXRodGJ5bmFtZSh2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlxdWVyeWJ1ZiAqYnVmOworCWludCBuLCB0eXBlOworCXN0cnVjdCBob3N0ZW50ICpocDsKKwljb25zdCBjaGFyICpuYW1lOworCWludCBhZjsKKwlyZXNfc3RhdGUgcmVzOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwkvKiBOT1NUUklDVCBza2lwIGxlbiAqLyh2b2lkKXZhX2FyZyhhcCwgaW50KTsKKwlhZiA9IHZhX2FyZyhhcCwgaW50KTsKKworCXN3aXRjaCAoYWYpIHsKKwljYXNlIEFGX0lORVQ6CisJCXR5cGUgPSBUX0E7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXR5cGUgPSBUX0FBQUE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiBOU19VTkFWQUlMOworCX0KKwlidWYgPSBtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJbiA9IHJlc19uc2VhcmNoKHJlcywgbmFtZSwgQ19JTiwgdHlwZSwgYnVmLT5idWYsIHNpemVvZihidWYtPmJ1ZikpOworCWlmIChuIDwgMCkgeworCQlmcmVlKGJ1Zik7CisJCWRwcmludGYoInJlc19uc2VhcmNoIGZhaWxlZCAoJWQpXG4iLCByZXMsIG4pOworCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwkJcmV0dXJuIE5TX05PVEZPVU5EOworCX0KKwlocCA9IGdldGFuc3dlcihidWYsIG4sIG5hbWUsIHR5cGUsIHJlcyk7CisJZnJlZShidWYpOworCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCWlmIChocCA9PSBOVUxMKQorCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCSooKHN0cnVjdCBob3N0ZW50ICoqKXJ2KSA9IGhwOworCXJldHVybiBOU19TVUNDRVNTOworfQorCisvKkFSR1NVU0VEKi8KK2ludAorX2Ruc19nZXRodGJ5YWRkcih2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwljaGFyIHFidWZbTUFYRE5BTUUgKyAxXSwgKnFwLCAqZXA7CisJaW50IG47CisJcXVlcnlidWYgKmJ1ZjsKKwlzdHJ1Y3QgaG9zdGVudCAqaHA7CisJY29uc3QgdW5zaWduZWQgY2hhciAqdWFkZHI7CisJaW50IGxlbiwgYWYsIGFkdmFuY2U7CisJcmVzX3N0YXRlIHJlczsKKwlyZXNfc3RhdGljIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisJYXNzZXJ0KHJ2ICE9IE5VTEwpOworCisJdWFkZHIgPSB2YV9hcmcoYXAsIHVuc2lnbmVkIGNoYXIgKik7CisJbGVuID0gdmFfYXJnKGFwLCBpbnQpOworCWFmID0gdmFfYXJnKGFwLCBpbnQpOworCisJc3dpdGNoIChhZikgeworCWNhc2UgQUZfSU5FVDoKKwkJKHZvaWQpc25wcmludGYocWJ1Ziwgc2l6ZW9mKHFidWYpLCAiJXUuJXUuJXUuJXUuaW4tYWRkci5hcnBhIiwKKwkJICAgICh1YWRkclszXSAmIDB4ZmYpLCAodWFkZHJbMl0gJiAweGZmKSwKKwkJICAgICh1YWRkclsxXSAmIDB4ZmYpLCAodWFkZHJbMF0gJiAweGZmKSk7CisJCWJyZWFrOworCisJY2FzZSBBRl9JTkVUNjoKKwkJcXAgPSBxYnVmOworCQllcCA9IHFidWYgKyBzaXplb2YocWJ1ZikgLSAxOworCQlmb3IgKG4gPSBJTjZBRERSU1ogLSAxOyBuID49IDA7IG4tLSkgeworCQkJYWR2YW5jZSA9IHNucHJpbnRmKHFwLCAoc2l6ZV90KShlcCAtIHFwKSwgIiV4LiV4LiIsCisJCQkgICAgdWFkZHJbbl0gJiAweGYsCisJCQkgICAgKCh1bnNpZ25lZCBpbnQpdWFkZHJbbl0gPj4gNCkgJiAweGYpOworCQkJaWYgKGFkdmFuY2UgPiAwICYmIHFwICsgYWR2YW5jZSA8IGVwKQorCQkJCXFwICs9IGFkdmFuY2U7CisJCQllbHNlIHsKKwkJCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCQkJcmV0dXJuIE5TX05PVEZPVU5EOworCQkJfQorCQl9CisJCWlmIChzdHJsY2F0KHFidWYsICJpcDYuYXJwYSIsIHNpemVvZihxYnVmKSkgPj0gc2l6ZW9mKHFidWYpKSB7CisJCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYWJvcnQoKTsKKwl9CisKKwlidWYgPSBtYWxsb2Moc2l6ZW9mKCpidWYpKTsKKwlpZiAoYnVmID09IE5VTEwpIHsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlmcmVlKGJ1Zik7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJbiA9IHJlc19ucXVlcnkocmVzLCBxYnVmLCBDX0lOLCBUX1BUUiwgYnVmLT5idWYsIHNpemVvZihidWYtPmJ1ZikpOworCWlmIChuIDwgMCkgeworCQlmcmVlKGJ1Zik7CisJCWRwcmludGYoInJlc19ucXVlcnkgZmFpbGVkICglZClcbiIsIHJlcywgbik7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCWhwID0gZ2V0YW5zd2VyKGJ1ZiwgbiwgcWJ1ZiwgVF9QVFIsIHJlcyk7CisJZnJlZShidWYpOworCWlmIChocCA9PSBOVUxMKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCXJldHVybiBOU19OT1RGT1VORDsKKwkJY2FzZSBUUllfQUdBSU46CisJCQlyZXR1cm4gTlNfVFJZQUdBSU47CisJCWRlZmF1bHQ6CisJCQlyZXR1cm4gTlNfVU5BVkFJTDsKKwkJfQorCX0KKwlocC0+aF9hZGRydHlwZSA9IGFmOworCWhwLT5oX2xlbmd0aCA9IGxlbjsKKwkodm9pZCltZW1jcHkocnMtPmhvc3RfYWRkciwgdWFkZHIsIChzaXplX3QpbGVuKTsKKwlycy0+aF9hZGRyX3B0cnNbMF0gPSAoY2hhciAqKSh2b2lkICopcnMtPmhvc3RfYWRkcjsKKwlycy0+aF9hZGRyX3B0cnNbMV0gPSBOVUxMOworCWlmIChhZiA9PSBBRl9JTkVUICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfVVNFX0lORVQ2KSkgeworCQltYXBfdjR2Nl9hZGRyZXNzKChjaGFyICopKHZvaWQgKilycy0+aG9zdF9hZGRyLAorCQkgICAgKGNoYXIgKikodm9pZCAqKXJzLT5ob3N0X2FkZHIpOworCQlocC0+aF9hZGRydHlwZSA9IEFGX0lORVQ2OworCQlocC0+aF9sZW5ndGggPSBJTjZBRERSU1o7CisJfQorCisJX19yZXNfcHV0X3N0YXRlKHJlcyk7CisJKigoc3RydWN0IGhvc3RlbnQgKiopcnYpID0gaHA7CisJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9pbmV0L25zYXBfYWRkci5jIGIvbGliYy9uZXRic2QvaW5ldC9uc2FwX2FkZHIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMThiZDMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvaW5ldC9uc2FwX2FkZHIuYwpAQCAtMCwwICsxLDEyMSBAQAorLyoJJE5ldEJTRDogbnNhcF9hZGRyLmMsdiAxLjIgMjAwNC8wNS8yMCAyMzoxMjozMyBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zYXBfYWRkci5jLHYgMS4yLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6MzMgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc2FwX2FkZHIuYyx2IDEuMiAyMDA0LzA1LzIwIDIzOjEyOjMzIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisKK3N0YXRpYyBjaGFyCit4dG9iKGludCBjKSB7CisJcmV0dXJuIChjIC0gKCgoYyA+PSAnMCcpICYmIChjIDw9ICc5JykpID8gJzAnIDogJzcnKSk7Cit9CisKK3VfaW50CitpbmV0X25zYXBfYWRkcihjb25zdCBjaGFyICphc2NpaSwgdV9jaGFyICpiaW5hcnksIGludCBtYXhsZW4pIHsKKwl1X2NoYXIgYywgbmliOworCXVfaW50IGxlbiA9IDA7CisKKwlhc3NlcnQoYXNjaWkgIT0gTlVMTCk7CisJYXNzZXJ0KGJpbmFyeSAhPSBOVUxMKTsKKworCWlmIChhc2NpaVswXSAhPSAnMCcgfHwgKGFzY2lpWzFdICE9ICd4JyAmJiBhc2NpaVsxXSAhPSAnWCcpKQorCQlyZXR1cm4gKDApOworCWFzY2lpICs9IDI7CisKKwl3aGlsZSAoKGMgPSAqYXNjaWkrKykgIT0gJ1wwJyAmJiBsZW4gPCAodV9pbnQpbWF4bGVuKSB7CisJCWlmIChjID09ICcuJyB8fCBjID09ICcrJyB8fCBjID09ICcvJykKKwkJCWNvbnRpbnVlOworCQlpZiAoIWlzYXNjaWkoYykpCisJCQlyZXR1cm4gKDApOworCQlpZiAoaXNsb3dlcihjKSkKKwkJCWMgPSB0b3VwcGVyKGMpOworCQlpZiAoaXN4ZGlnaXQoYykpIHsKKwkJCW5pYiA9IHh0b2IoYyk7CisJCQljID0gKmFzY2lpKys7CisJCQlpZiAoYyAhPSAnXDAnKSB7CisJCQkJYyA9IHRvdXBwZXIoYyk7CisJCQkJaWYgKGlzeGRpZ2l0KGMpKSB7CisJCQkJCSpiaW5hcnkrKyA9IChuaWIgPDwgNCkgfCB4dG9iKGMpOworCQkJCQlsZW4rKzsKKwkJCQl9IGVsc2UKKwkJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJCWVsc2UKKwkJCQlyZXR1cm4gKDApOworCQl9CisJCWVsc2UKKwkJCXJldHVybiAoMCk7CisJfQorCXJldHVybiAobGVuKTsKK30KKworY2hhciAqCitpbmV0X25zYXBfbnRvYShpbnQgYmlubGVuLCBjb25zdCB1X2NoYXIgKmJpbmFyeSwgY2hhciAqYXNjaWkpIHsKKwlpbnQgbmliOworCWludCBpOworCXN0YXRpYyBjaGFyIHRtcGJ1ZlsyKzI1NSozXTsKKwljaGFyICpzdGFydDsKKworCWFzc2VydChiaW5hcnkgIT0gTlVMTCk7CisKKwlpZiAoYXNjaWkpCisJCXN0YXJ0ID0gYXNjaWk7CisJZWxzZSB7CisJCWFzY2lpID0gdG1wYnVmOworCQlzdGFydCA9IHRtcGJ1ZjsKKwl9CisKKwkqYXNjaWkrKyA9ICcwJzsKKwkqYXNjaWkrKyA9ICd4JzsKKworCWlmIChiaW5sZW4gPiAyNTUpCisJCWJpbmxlbiA9IDI1NTsKKworCWZvciAoaSA9IDA7IGkgPCBiaW5sZW47IGkrKykgeworCQluaWIgPSAodV9pbnQzMl90KSpiaW5hcnkgPj4gNDsKKwkJKmFzY2lpKysgPSBuaWIgKyAobmliIDwgMTAgPyAnMCcgOiAnNycpOworCQluaWIgPSAqYmluYXJ5KysgJiAweDBmOworCQkqYXNjaWkrKyA9IG5pYiArIChuaWIgPCAxMCA/ICcwJyA6ICc3Jyk7CisJCWlmICgoKGkgJSAyKSA9PSAwICYmIChpICsgMSkgPCBiaW5sZW4pKQorCQkJKmFzY2lpKysgPSAnLic7CisJfQorCSphc2NpaSA9ICdcMCc7CisJcmV0dXJuIChzdGFydCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9pc2MvZXZfc3RyZWFtcy5jIGIvbGliYy9uZXRic2QvaXNjL2V2X3N0cmVhbXMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZWVjYzNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvaXNjL2V2X3N0cmVhbXMuYwpAQCAtMCwwICsxLDMxMSBAQAorLyoJJE5ldEJTRDogZXZfc3RyZWFtcy5jLHYgMS4yIDIwMDQvMDUvMjAgMTk6NTI6MzEgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogZXZfc3RyZWFtcy5jIC0gaW1wbGVtZW50IGFzeW5jaCBzdHJlYW0gZmlsZSBJTyBmb3IgdGhlIGV2ZW50bGliCisgKiB2aXggMDRtYXI5NiBbaW5pdGlhbF0KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgIWRlZmluZWQoTElOVCkgJiYgIWRlZmluZWQoQ09ERUNFTlRFUikgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IGV2X3N0cmVhbXMuYyx2IDEuMi4yMDYuMiAyMDA0LzAzLzE3IDAwOjI5OjUxIG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogZXZfc3RyZWFtcy5jLHYgMS4yIDIwMDQvMDUvMjAgMTk6NTI6MzEgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8aXNjL2V2ZW50bGliLmg+CisjaW5jbHVkZSAiZXZlbnRsaWJfcC5oIgorCisjaWZuZGVmIF9MSUJDCitzdGF0aWMgaW50CWNvcHl2ZWMoZXZTdHJlYW0gKnN0ciwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb2NudCk7CitzdGF0aWMgdm9pZAljb25zdW1lKGV2U3RyZWFtICpzdHIsIHNpemVfdCBieXRlcyk7CitzdGF0aWMgdm9pZAlkb25lKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtICpzdHIpOworc3RhdGljIHZvaWQJd3JpdGFibGUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgdm9pZCAqdWFwLCBpbnQgZmQsIGludCBldm1hc2spOworc3RhdGljIHZvaWQJcmVhZGFibGUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgdm9pZCAqdWFwLCBpbnQgZmQsIGludCBldm1hc2spOworI2VuZGlmCisKK3N0cnVjdCBpb3ZlYworZXZDb25zSW92ZWModm9pZCAqYnVmLCBzaXplX3QgY250KSB7CisJc3RydWN0IGlvdmVjIHJldDsKKworCW1lbXNldCgmcmV0LCAweGY1LCBzaXplb2YgcmV0KTsKKwlyZXQuaW92X2Jhc2UgPSBidWY7CisJcmV0Lmlvdl9sZW4gPSBjbnQ7CisJcmV0dXJuIChyZXQpOworfQorCisjaWZuZGVmIF9MSUJDCitpbnQKK2V2V3JpdGUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgaW50IGZkLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGlvY250LAorCWV2U3RyZWFtRnVuYyBmdW5jLCB2b2lkICp1YXAsIGV2U3RyZWFtSUQgKmlkKQoreworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2U3RyZWFtICpuZXc7CisJaW50IHNhdmU7CisKKwlPS05FVyhuZXcpOworCW5ldy0+ZnVuYyA9IGZ1bmM7CisJbmV3LT51YXAgPSB1YXA7CisJbmV3LT5mZCA9IGZkOworCW5ldy0+ZmxhZ3MgPSAwOworCWlmIChldlNlbGVjdEZEKG9wYXF1ZUN0eCwgZmQsIEVWX1dSSVRFLCB3cml0YWJsZSwgbmV3LCAmbmV3LT5maWxlKSA8IDApCisJCWdvdG8gZnJlZTsKKwlpZiAoY29weXZlYyhuZXcsIGlvdiwgaW9jbnQpIDwgMCkKKwkJZ290byBmcmVlOworCW5ldy0+cHJldkRvbmUgPSBOVUxMOworCW5ldy0+bmV4dERvbmUgPSBOVUxMOworCWlmIChjdHgtPnN0cmVhbXMgIT0gTlVMTCkKKwkJY3R4LT5zdHJlYW1zLT5wcmV2ID0gbmV3OworCW5ldy0+cHJldiA9IE5VTEw7CisJbmV3LT5uZXh0ID0gY3R4LT5zdHJlYW1zOworCWN0eC0+c3RyZWFtcyA9IG5ldzsKKwlpZiAoaWQgIT0gTlVMTCkKKwkJaWQtPm9wYXF1ZSA9IG5ldzsKKwlyZXR1cm4gKDApOworIGZyZWU6CisJc2F2ZSA9IGVycm5vOworCUZSRUUobmV3KTsKKwllcnJubyA9IHNhdmU7CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorZXZSZWFkKGV2Q29udGV4dCBvcGFxdWVDdHgsIGludCBmZCwgY29uc3Qgc3RydWN0IGlvdmVjICppb3YsIGludCBpb2NudCwKKyAgICAgICBldlN0cmVhbUZ1bmMgZnVuYywgdm9pZCAqdWFwLCBldlN0cmVhbUlEICppZCkKK3sKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlN0cmVhbSAqbmV3OworCWludCBzYXZlOworCisJT0tORVcobmV3KTsKKwluZXctPmZ1bmMgPSBmdW5jOworCW5ldy0+dWFwID0gdWFwOworCW5ldy0+ZmQgPSBmZDsKKwluZXctPmZsYWdzID0gMDsKKwlpZiAoZXZTZWxlY3RGRChvcGFxdWVDdHgsIGZkLCBFVl9SRUFELCByZWFkYWJsZSwgbmV3LCAmbmV3LT5maWxlKSA8IDApCisJCWdvdG8gZnJlZTsKKwlpZiAoY29weXZlYyhuZXcsIGlvdiwgaW9jbnQpIDwgMCkKKwkJZ290byBmcmVlOworCW5ldy0+cHJldkRvbmUgPSBOVUxMOworCW5ldy0+bmV4dERvbmUgPSBOVUxMOworCWlmIChjdHgtPnN0cmVhbXMgIT0gTlVMTCkKKwkJY3R4LT5zdHJlYW1zLT5wcmV2ID0gbmV3OworCW5ldy0+cHJldiA9IE5VTEw7CisJbmV3LT5uZXh0ID0gY3R4LT5zdHJlYW1zOworCWN0eC0+c3RyZWFtcyA9IG5ldzsKKwlpZiAoaWQpCisJCWlkLT5vcGFxdWUgPSBuZXc7CisJcmV0dXJuICgwKTsKKyBmcmVlOgorCXNhdmUgPSBlcnJubzsKKwlGUkVFKG5ldyk7CisJZXJybm8gPSBzYXZlOworCXJldHVybiAoLTEpOworfQorCitpbnQKK2V2VGltZVJXKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2U3RyZWFtSUQgaWQsIGV2VGltZXJJRCB0aW1lcikgLypBUkdTVVNFRCovIHsKKwlldlN0cmVhbSAqc3RyID0gaWQub3BhcXVlOworCisJVU5VU0VEKG9wYXF1ZUN0eCk7CisKKwlzdHItPnRpbWVyID0gdGltZXI7CisJc3RyLT5mbGFncyB8PSBFVl9TVFJfVElNRVJPSzsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2VW50aW1lUlcoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW1JRCBpZCkgLypBUkdTVVNFRCovIHsKKwlldlN0cmVhbSAqc3RyID0gaWQub3BhcXVlOworCisJVU5VU0VEKG9wYXF1ZUN0eCk7CisKKwlzdHItPmZsYWdzICY9IH5FVl9TVFJfVElNRVJPSzsKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2Q2FuY2VsUlcoZXZDb250ZXh0IG9wYXF1ZUN0eCwgZXZTdHJlYW1JRCBpZCkgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2U3RyZWFtICpvbGQgPSBpZC5vcGFxdWU7CisKKwkvKgorCSAqIFRoZSBzdHJlYW1zIGxpc3QgaXMgZG91Ymx5IHRocmVhZGVkLiAgRmlyc3QsIHRoZXJlJ3MgY3R4LT5zdHJlYW1zCisJICogdGhhdCdzIHVzZWQgYnkgZXZEZXN0cm95KCkgdG8gZmluZCBhbmQgY2FuY2VsIGFsbCBzdHJlYW1zLiAgU2Vjb25kLAorCSAqIHRoZXJlJ3MgY3R4LT5zdHJEb25lIChoZWFkKSBhbmQgY3R4LT5zdHJMYXN0ICh0YWlsKSB3aGljaCB0aHJlYWQKKwkgKiB0aHJvdWdoIHRoZSBwb3RlbnRpYWxseSBzbWFsbGVyIG51bWJlciBvZiAiSU8gY29tcGxldGVkIiBzdHJlYW1zLAorCSAqIHVzZWQgaW4gZXZHZXROZXh0KCkgdG8gYXZvaWQgc2Nhbm5pbmcgdGhlIGVudGlyZSBsaXN0LgorCSAqLworCisJLyogVW5saW5rIGZyb20gY3R4LT5zdHJlYW1zLiAqLworCWlmIChvbGQtPnByZXYgIT0gTlVMTCkKKwkJb2xkLT5wcmV2LT5uZXh0ID0gb2xkLT5uZXh0OworCWVsc2UKKwkJY3R4LT5zdHJlYW1zID0gb2xkLT5uZXh0OworCWlmIChvbGQtPm5leHQgIT0gTlVMTCkKKwkJb2xkLT5uZXh0LT5wcmV2ID0gb2xkLT5wcmV2OworCisJLyoKKwkgKiBJZiAnb2xkJyBpcyBvbiB0aGUgY3R4LT5zdHJEb25lIGxpc3QsIHJlbW92ZSBpdC4gIFVwZGF0ZQorCSAqIGN0eC0+c3RyTGFzdCBpZiBuZWNlc3NhcnkuCisJICovCisJaWYgKG9sZC0+cHJldkRvbmUgPT0gTlVMTCAmJiBvbGQtPm5leHREb25lID09IE5VTEwpIHsKKwkJLyoKKwkJICogRWl0aGVyICdvbGQnIGlzIHRoZSBvbmx5IGl0ZW0gb24gdGhlIGRvbmUgbGlzdCwgb3IgaXQncworCQkgKiBub3Qgb24gdGhlIGRvbmUgbGlzdC4gIElmIHRoZSBmb3JtZXIsIHRoZW4gd2UgdW5saW5rIGl0CisJCSAqIGZyb20gdGhlIGxpc3QuICBJZiB0aGUgbGF0dGVyLCB3ZSBsZWF2ZSB0aGUgbGlzdCBhbG9uZS4KKwkJICovCisJCWlmIChjdHgtPnN0ckRvbmUgPT0gb2xkKSB7CisJCQljdHgtPnN0ckRvbmUgPSBOVUxMOworCQkJY3R4LT5zdHJMYXN0ID0gTlVMTDsKKwkJfQorCX0gZWxzZSB7CisJCWlmIChvbGQtPnByZXZEb25lICE9IE5VTEwpCisJCQlvbGQtPnByZXZEb25lLT5uZXh0RG9uZSA9IG9sZC0+bmV4dERvbmU7CisJCWVsc2UKKwkJCWN0eC0+c3RyRG9uZSA9IG9sZC0+bmV4dERvbmU7CisJCWlmIChvbGQtPm5leHREb25lICE9IE5VTEwpCisJCQlvbGQtPm5leHREb25lLT5wcmV2RG9uZSA9IG9sZC0+cHJldkRvbmU7CisJCWVsc2UKKwkJCWN0eC0+c3RyTGFzdCA9IG9sZC0+cHJldkRvbmU7CisJfQorCisJLyogRGVhbGxvY2F0ZSB0aGUgc3RyZWFtLiAqLworCWlmIChvbGQtPmZpbGUub3BhcXVlKQorCQlldkRlc2VsZWN0RkQob3BhcXVlQ3R4LCBvbGQtPmZpbGUpOworCW1lbXB1dChvbGQtPmlvdk9yaWcsIHNpemVvZiAoc3RydWN0IGlvdmVjKSAqIG9sZC0+aW92T3JpZ0NvdW50KTsKKwlGUkVFKG9sZCk7CisJcmV0dXJuICgwKTsKK30KKworLyogQ29weSBhIHNjYXR0ZXIvZ2F0aGVyIHZlY3RvciBhbmQgaW5pdGlhbGl6ZSBhIHN0cmVhbSBoYW5kbGVyJ3MgSU8uICovCitzdGF0aWMgaW50Citjb3B5dmVjKGV2U3RyZWFtICpzdHIsIGNvbnN0IHN0cnVjdCBpb3ZlYyAqaW92LCBpbnQgaW9jbnQpIHsKKwlpbnQgaTsKKworCXN0ci0+aW92T3JpZyA9IChzdHJ1Y3QgaW92ZWMgKiltZW1nZXQoc2l6ZW9mKHN0cnVjdCBpb3ZlYykgKiBpb2NudCk7CisJaWYgKHN0ci0+aW92T3JpZyA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RyLT5pb1RvdGFsID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgaW9jbnQ7IGkrKykgeworCQlzdHItPmlvdk9yaWdbaV0gPSBpb3ZbaV07CisJCXN0ci0+aW9Ub3RhbCArPSBpb3ZbaV0uaW92X2xlbjsKKwl9CisJc3RyLT5pb3ZPcmlnQ291bnQgPSBpb2NudDsKKwlzdHItPmlvdkN1ciA9IHN0ci0+aW92T3JpZzsKKwlzdHItPmlvdkN1ckNvdW50ID0gc3RyLT5pb3ZPcmlnQ291bnQ7CisJc3RyLT5pb0RvbmUgPSAwOworCXJldHVybiAoMCk7Cit9CisKKy8qIFB1bGwgb2ZmIG9yIHRydW5jYXRlIGxlYWQgaW92ZWMocykuICovCitzdGF0aWMgdm9pZAorY29uc3VtZShldlN0cmVhbSAqc3RyLCBzaXplX3QgYnl0ZXMpIHsKKwl3aGlsZSAoYnl0ZXMgPiAwVSkgeworCQlpZiAoYnl0ZXMgPCAoc2l6ZV90KXN0ci0+aW92Q3VyLT5pb3ZfbGVuKSB7CisJCQlzdHItPmlvdkN1ci0+aW92X2xlbiAtPSBieXRlczsKKwkJCXN0ci0+aW92Q3VyLT5pb3ZfYmFzZSA9ICh2b2lkICopCisJCQkJKCh1X2NoYXIgKilzdHItPmlvdkN1ci0+aW92X2Jhc2UgKyBieXRlcyk7CisJCQlzdHItPmlvRG9uZSArPSBieXRlczsKKwkJCWJ5dGVzID0gMDsKKwkJfSBlbHNlIHsKKwkJCWJ5dGVzIC09IHN0ci0+aW92Q3VyLT5pb3ZfbGVuOworCQkJc3RyLT5pb0RvbmUgKz0gc3RyLT5pb3ZDdXItPmlvdl9sZW47CisJCQlzdHItPmlvdkN1cisrOworCQkJc3RyLT5pb3ZDdXJDb3VudC0tOworCQl9CisJfQorfQorCisvKiBBZGQgYSBzdHJlYW0gdG8gRG9uZSBsaXN0IGFuZCBkZXNlbGVjdCB0aGUgRkQuICovCitzdGF0aWMgdm9pZAorZG9uZShldkNvbnRleHQgb3BhcXVlQ3R4LCBldlN0cmVhbSAqc3RyKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisKKwlpZiAoY3R4LT5zdHJMYXN0ICE9IE5VTEwpIHsKKwkJc3RyLT5wcmV2RG9uZSA9IGN0eC0+c3RyTGFzdDsKKwkJY3R4LT5zdHJMYXN0LT5uZXh0RG9uZSA9IHN0cjsKKwkJY3R4LT5zdHJMYXN0ID0gc3RyOworCX0gZWxzZSB7CisJCUlOU0lTVChjdHgtPnN0ckRvbmUgPT0gTlVMTCk7CisJCWN0eC0+c3RyRG9uZSA9IGN0eC0+c3RyTGFzdCA9IHN0cjsKKwl9CisJZXZEZXNlbGVjdEZEKG9wYXF1ZUN0eCwgc3RyLT5maWxlKTsKKwlzdHItPmZpbGUub3BhcXVlID0gTlVMTDsKKwkvKiBldkRyb3AoKSB3aWxsIGNhbGwgZXZDYW5jZWxSVygpIG9uIHVzLiAqLworfQorCisvKiBEcmliYmxlIG91dCBzb21lIGJ5dGVzIG9uIHRoZSBzdHJlYW0uICAoQ2FsbGVkIGJ5IGV2RGlzcGF0Y2goKS4pICovCitzdGF0aWMgdm9pZAord3JpdGFibGUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgdm9pZCAqdWFwLCBpbnQgZmQsIGludCBldm1hc2spIHsKKwlldlN0cmVhbSAqc3RyID0gdWFwOworCWludCBieXRlczsKKworCVVOVVNFRChldm1hc2spOworCisJYnl0ZXMgPSB3cml0ZXYoZmQsIHN0ci0+aW92Q3VyLCBzdHItPmlvdkN1ckNvdW50KTsKKwlpZiAoYnl0ZXMgPiAwKSB7CisJCWlmICgoc3RyLT5mbGFncyAmIEVWX1NUUl9USU1FUk9LKSAhPSAwKQorCQkJZXZUb3VjaElkbGVUaW1lcihvcGFxdWVDdHgsIHN0ci0+dGltZXIpOworCQljb25zdW1lKHN0ciwgYnl0ZXMpOworCX0gZWxzZSB7CisJCWlmIChieXRlcyA8IDAgJiYgZXJybm8gIT0gRUlOVFIpIHsKKwkJCXN0ci0+aW9Eb25lID0gLTE7CisJCQlzdHItPmlvRXJybm8gPSBlcnJubzsKKwkJfQorCX0KKwlpZiAoc3RyLT5pb0RvbmUgPT0gLTEgfHwgc3RyLT5pb0RvbmUgPT0gc3RyLT5pb1RvdGFsKQorCQlkb25lKG9wYXF1ZUN0eCwgc3RyKTsKK30KKworLyogU2Nvb3AgdXAgc29tZSBieXRlcyBmcm9tIHRoZSBzdHJlYW0uICAoQ2FsbGVkIGJ5IGV2RGlzcGF0Y2goKS4pICovCitzdGF0aWMgdm9pZAorcmVhZGFibGUoZXZDb250ZXh0IG9wYXF1ZUN0eCwgdm9pZCAqdWFwLCBpbnQgZmQsIGludCBldm1hc2spIHsKKwlldlN0cmVhbSAqc3RyID0gdWFwOworCWludCBieXRlczsKKworCVVOVVNFRChldm1hc2spOworCisJYnl0ZXMgPSByZWFkdihmZCwgc3RyLT5pb3ZDdXIsIHN0ci0+aW92Q3VyQ291bnQpOworCWlmIChieXRlcyA+IDApIHsKKwkJaWYgKChzdHItPmZsYWdzICYgRVZfU1RSX1RJTUVST0spICE9IDApCisJCQlldlRvdWNoSWRsZVRpbWVyKG9wYXF1ZUN0eCwgc3RyLT50aW1lcik7CisJCWNvbnN1bWUoc3RyLCBieXRlcyk7CisJfSBlbHNlIHsKKwkJaWYgKGJ5dGVzID09IDApCisJCQlzdHItPmlvRG9uZSA9IDA7CisJCWVsc2UgeworCQkJaWYgKGVycm5vICE9IEVJTlRSKSB7CisJCQkJc3RyLT5pb0RvbmUgPSAtMTsKKwkJCQlzdHItPmlvRXJybm8gPSBlcnJubzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoc3RyLT5pb0RvbmUgPD0gMCB8fCBzdHItPmlvRG9uZSA9PSBzdHItPmlvVG90YWwpCisJCWRvbmUob3BhcXVlQ3R4LCBzdHIpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9pc2MvZXZfdGltZXJzLmMgYi9saWJjL25ldGJzZC9pc2MvZXZfdGltZXJzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTY3NDY4NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL2lzYy9ldl90aW1lcnMuYwpAQCAtMCwwICsxLDUwNCBAQAorLyoJJE5ldEJTRDogZXZfdGltZXJzLmMsdiAxLjIgMjAwNC8wNS8yMCAxOTo1MjozMSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTUtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisvKiBldl90aW1lcnMuYyAtIGltcGxlbWVudCB0aW1lcnMgZm9yIHRoZSBldmVudGxpYgorICogdml4IDA5c2VwOTUgW2luaXRpYWxdCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmICFkZWZpbmVkKExJTlQpICYmICFkZWZpbmVkKENPREVDRU5URVIpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBldl90aW1lcnMuYyx2IDEuMi4yLjEuNC41IDIwMDQvMDMvMTcgMDI6Mzk6MTMgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBldl90aW1lcnMuYyx2IDEuMiAyMDA0LzA1LzIwIDE5OjUyOjMxIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorCisjaW5jbHVkZSA8aXNjL2Fzc2VydGlvbnMuaD4KKyNpbmNsdWRlIDxpc2MvZXZlbnRsaWIuaD4KKyNpbmNsdWRlICJldmVudGxpYl9wLmgiCisKKy8qIENvbnN0YW50cy4gKi8KKworI2RlZmluZQlNSUxMSU9OIDEwMDAwMDAKKyNkZWZpbmUgQklMTElPTiAxMDAwMDAwMDAwCisKKy8qIEZvcndhcmQuICovCisKKyNpZm5kZWYgX0xJQkMKK3N0YXRpYyBpbnQgZHVlX3Nvb25lcih2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZCBzZXRfaW5kZXgodm9pZCAqLCBpbnQpOworc3RhdGljIHZvaWQgZnJlZV90aW1lcih2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZCBwcmludF90aW1lcih2b2lkICosIHZvaWQgKik7CitzdGF0aWMgdm9pZCBpZGxlX3RpbWVvdXQoZXZDb250ZXh0LCB2b2lkICosIHN0cnVjdCB0aW1lc3BlYywgc3RydWN0IHRpbWVzcGVjKTsKKworLyogUHJpdmF0ZSB0eXBlLiAqLworCit0eXBlZGVmIHN0cnVjdCB7CisJZXZUaW1lckZ1bmMJZnVuYzsKKwl2b2lkICoJCXVhcDsKKwlzdHJ1Y3QgdGltZXNwZWMJbGFzdFRvdWNoZWQ7CisJc3RydWN0IHRpbWVzcGVjCW1heF9pZGxlOworCWV2VGltZXIgKgl0aW1lcjsKK30gaWRsZV90aW1lcjsKKyNlbmRpZgorCisvKiBQdWJsaWMuICovCisKK3N0cnVjdCB0aW1lc3BlYworZXZDb25zVGltZSh0aW1lX3Qgc2VjLCBsb25nIG5zZWMpIHsKKwlzdHJ1Y3QgdGltZXNwZWMgeDsKKworCXgudHZfc2VjID0gc2VjOworCXgudHZfbnNlYyA9IG5zZWM7CisJcmV0dXJuICh4KTsKK30KKworc3RydWN0IHRpbWVzcGVjCitldkFkZFRpbWUoc3RydWN0IHRpbWVzcGVjIGFkZGVuZDEsIHN0cnVjdCB0aW1lc3BlYyBhZGRlbmQyKSB7CisJc3RydWN0IHRpbWVzcGVjIHg7CisKKwl4LnR2X3NlYyA9IGFkZGVuZDEudHZfc2VjICsgYWRkZW5kMi50dl9zZWM7CisJeC50dl9uc2VjID0gYWRkZW5kMS50dl9uc2VjICsgYWRkZW5kMi50dl9uc2VjOworCWlmICh4LnR2X25zZWMgPj0gQklMTElPTikgeworCQl4LnR2X3NlYysrOworCQl4LnR2X25zZWMgLT0gQklMTElPTjsKKwl9CisJcmV0dXJuICh4KTsKK30KKworc3RydWN0IHRpbWVzcGVjCitldlN1YlRpbWUoc3RydWN0IHRpbWVzcGVjIG1pbnVlbmQsIHN0cnVjdCB0aW1lc3BlYyBzdWJ0cmFoZW5kKSB7CisJc3RydWN0IHRpbWVzcGVjIHg7CisKKwl4LnR2X3NlYyA9IG1pbnVlbmQudHZfc2VjIC0gc3VidHJhaGVuZC50dl9zZWM7CisJaWYgKG1pbnVlbmQudHZfbnNlYyA+PSBzdWJ0cmFoZW5kLnR2X25zZWMpCisJCXgudHZfbnNlYyA9IG1pbnVlbmQudHZfbnNlYyAtIHN1YnRyYWhlbmQudHZfbnNlYzsKKwllbHNlIHsKKwkJeC50dl9uc2VjID0gQklMTElPTiAtIHN1YnRyYWhlbmQudHZfbnNlYyArIG1pbnVlbmQudHZfbnNlYzsKKwkJeC50dl9zZWMtLTsKKwl9CisJcmV0dXJuICh4KTsKK30KKworaW50CitldkNtcFRpbWUoc3RydWN0IHRpbWVzcGVjIGEsIHN0cnVjdCB0aW1lc3BlYyBiKSB7CisJbG9uZyB4ID0gYS50dl9zZWMgLSBiLnR2X3NlYzsKKworCWlmICh4ID09IDBMKQorCQl4ID0gYS50dl9uc2VjIC0gYi50dl9uc2VjOworCXJldHVybiAoeCA8IDBMID8gKC0xKSA6IHggPiAwTCA/ICgxKSA6ICgwKSk7Cit9CisKK3N0cnVjdCB0aW1lc3BlYworZXZOb3dUaW1lKCkgeworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKyNpZmRlZiBDTE9DS19SRUFMVElNRQorCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKKwlpbnQgbSA9IENMT0NLX1JFQUxUSU1FOworCisjaWZkZWYgQ0xPQ0tfTU9OT1RPTklDCisJaWYgKF9fZXZPcHRNb25vVGltZSkKKwkJbSA9IENMT0NLX01PTk9UT05JQzsKKyNlbmRpZgorCWlmIChjbG9ja19nZXR0aW1lKG0sICZ0c25vdykgPT0gMCkKKwkJcmV0dXJuICh0c25vdyk7CisjZW5kaWYKKwlpZiAoZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpIDwgMCkKKwkJcmV0dXJuIChldkNvbnNUaW1lKDBMLCAwTCkpOworCXJldHVybiAoZXZUaW1lU3BlYyhub3cpKTsKK30KKworc3RydWN0IHRpbWVzcGVjCitldlVUQ1RpbWUodm9pZCkgeworCXN0cnVjdCB0aW1ldmFsIG5vdzsKKyNpZmRlZiBDTE9DS19SRUFMVElNRQorCXN0cnVjdCB0aW1lc3BlYyB0c25vdzsKKwlpZiAoY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJnRzbm93KSA9PSAwKQorCQlyZXR1cm4gKHRzbm93KTsKKyNlbmRpZgorCWlmIChnZXR0aW1lb2ZkYXkoJm5vdywgTlVMTCkgPCAwKQorCQlyZXR1cm4gKGV2Q29uc1RpbWUoMEwsIDBMKSk7CisJcmV0dXJuIChldlRpbWVTcGVjKG5vdykpOworfQorCisjaWZuZGVmIF9MSUJDCitzdHJ1Y3QgdGltZXNwZWMKK2V2TGFzdEV2ZW50VGltZShldkNvbnRleHQgb3BhcXVlQ3R4KSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisKKwlyZXR1cm4gKGN0eC0+bGFzdEV2ZW50VGltZSk7Cit9CisjZW5kaWYKKworc3RydWN0IHRpbWVzcGVjCitldlRpbWVTcGVjKHN0cnVjdCB0aW1ldmFsIHR2KSB7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCisJdHMudHZfc2VjID0gdHYudHZfc2VjOworCXRzLnR2X25zZWMgPSB0di50dl91c2VjICogMTAwMDsKKwlyZXR1cm4gKHRzKTsKK30KKworc3RydWN0IHRpbWV2YWwKK2V2VGltZVZhbChzdHJ1Y3QgdGltZXNwZWMgdHMpIHsKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKworCXR2LnR2X3NlYyA9IHRzLnR2X3NlYzsKKwl0di50dl91c2VjID0gdHMudHZfbnNlYyAvIDEwMDA7CisJcmV0dXJuICh0dik7Cit9CisKKyNpZm5kZWYgX0xJQkMKK2ludAorZXZTZXRUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LAorCSAgIGV2VGltZXJGdW5jIGZ1bmMsCisJICAgdm9pZCAqdWFwLAorCSAgIHN0cnVjdCB0aW1lc3BlYyBkdWUsCisJICAgc3RydWN0IHRpbWVzcGVjIGludGVyLAorCSAgIGV2VGltZXJJRCAqb3BhcXVlSUQKKykgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2VGltZXIgKmlkOworCisJcHJpbnRmKCJldlNldFRpbWVyKGN0eCAlcCwgZnVuYyAlcCwgdWFwICVwLCBkdWUgJWxkLiUwOWxkLCBpbnRlciAlbGQuJTA5bGQpXG4iLAorCQkgY3R4LCBmdW5jLCB1YXAsCisJCSAobG9uZylkdWUudHZfc2VjLCBkdWUudHZfbnNlYywKKwkJIChsb25nKWludGVyLnR2X3NlYywgaW50ZXIudHZfbnNlYyk7CisKKyNpZmRlZiBfX2hwdXgKKwkvKgorCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCisJICovCisJaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworCisJaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZWxzZQorCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworI2VuZGlmCisKKwkvKiBkdWU9ezAsMH0gaXMgYSBtYWdpYyBjb29raWUgbWVhbmluZyAibm93LiIgKi8KKwlpZiAoZHVlLnR2X3NlYyA9PSAodGltZV90KTAgJiYgZHVlLnR2X25zZWMgPT0gMEwpCisJCWR1ZSA9IGV2Tm93VGltZSgpOworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwuICovCisJT0tORVcoaWQpOworCWlkLT5mdW5jID0gZnVuYzsKKwlpZC0+dWFwID0gdWFwOworCWlkLT5kdWUgPSBkdWU7CisJaWQtPmludGVyID0gaW50ZXI7CisKKwlpZiAoaGVhcF9pbnNlcnQoY3R4LT50aW1lcnMsIGlkKSA8IDApCisJCXJldHVybiAoLTEpOworCisJLyogUmVtZW1iZXIgdGhlIElEIGlmIHRoZSBjYWxsZXIgcHJvdmlkZWQgdXMgYSBwbGFjZSBmb3IgaXQuICovCisJaWYgKG9wYXF1ZUlEKQorCQlvcGFxdWVJRC0+b3BhcXVlID0gaWQ7CisKKwlpZiAoY3R4LT5kZWJ1ZyA+IDcpIHsKKwkJcHJpbnRmKCJ0aW1lcnMgYWZ0ZXIgZXZTZXRUaW1lcjpcbiIpOworCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2Q2xlYXJUaW1lcihldkNvbnRleHQgb3BhcXVlQ3R4LCBldlRpbWVySUQgaWQpIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICpkZWwgPSBpZC5vcGFxdWU7CisKKwlpZiAoY3R4LT5jdXIgIT0gTlVMTCAmJgorCSAgICBjdHgtPmN1ci0+dHlwZSA9PSBUaW1lciAmJgorCSAgICBjdHgtPmN1ci0+dS50aW1lci50aGlzID09IGRlbCkgeworCQlwcmludGYoImRlZmVycmluZyBkZWxldGUgb2YgdGltZXIgKGV4ZWN1dGluZylcbiIpOworCQkvKgorCQkgKiBTZXR0aW5nIHRoZSBpbnRlcnZhbCB0byB6ZXJvIGVuc3VyZXMgdGhhdCBldkRyb3AoKSB3aWxsCisJCSAqIGNsZWFuIHVwIHRoZSB0aW1lci4KKwkJICovCisJCWRlbC0+aW50ZXIgPSBldkNvbnNUaW1lKDAsIDApOworCQlyZXR1cm4gKDApOworCX0KKworCWlmIChoZWFwX2VsZW1lbnQoY3R4LT50aW1lcnMsIGRlbC0+aW5kZXgpICE9IGRlbCkKKwkJRVZfRVJSKEVOT0VOVCk7CisKKwlpZiAoaGVhcF9kZWxldGUoY3R4LT50aW1lcnMsIGRlbC0+aW5kZXgpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJRlJFRShkZWwpOworCisJaWYgKGN0eC0+ZGVidWcgPiA3KSB7CisJCXByaW50ZigidGltZXJzIGFmdGVyIGV2Q2xlYXJUaW1lcjpcbiIpOworCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKKwl9CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK2V2Q29uZmlnVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkgICAgIGV2VGltZXJJRCBpZCwKKwkgICAgIGNvbnN0IGNoYXIgKnBhcmFtLAorCSAgICAgaW50IHZhbHVlCispIHsKKwlldkNvbnRleHRfcCAqY3R4ID0gb3BhcXVlQ3R4Lm9wYXF1ZTsKKwlldlRpbWVyICp0aW1lciA9IGlkLm9wYXF1ZTsKKwlpbnQgcmVzdWx0PTA7CisKKwlVTlVTRUQodmFsdWUpOworCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKKwkJRVZfRVJSKEVOT0VOVCk7CisKKwlpZiAoc3RyY21wKHBhcmFtLCAicmF0ZSIpID09IDApCisJCXRpbWVyLT5tb2RlIHw9IEVWX1RNUl9SQVRFOworCWVsc2UgaWYgKHN0cmNtcChwYXJhbSwgImludGVydmFsIikgPT0gMCkKKwkJdGltZXItPm1vZGUgJj0gfkVWX1RNUl9SQVRFOworCWVsc2UKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlyZXR1cm4gKHJlc3VsdCk7Cit9CisKK2ludAorZXZSZXNldFRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsCisJICAgICBldlRpbWVySUQgaWQsCisJICAgICBldlRpbWVyRnVuYyBmdW5jLAorCSAgICAgdm9pZCAqdWFwLAorCSAgICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKKwkgICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcgorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJZXZUaW1lciAqdGltZXIgPSBpZC5vcGFxdWU7CisJc3RydWN0IHRpbWVzcGVjIG9sZF9kdWU7CisJaW50IHJlc3VsdD0wOworCisJaWYgKGhlYXBfZWxlbWVudChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KSAhPSB0aW1lcikKKwkJRVZfRVJSKEVOT0VOVCk7CisKKyNpZmRlZiBfX2hwdXgKKwkvKgorCSAqIHR2X3NlYyBhbmQgdHZfbnNlYyBhcmUgdW5zaWduZWQuCisJICovCisJaWYgKGR1ZS50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworCisJaWYgKGludGVyLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisjZWxzZQorCWlmIChkdWUudHZfc2VjIDwgMCB8fCBkdWUudHZfbnNlYyA8IDAgfHwgZHVlLnR2X25zZWMgPj0gQklMTElPTikKKwkJRVZfRVJSKEVJTlZBTCk7CisKKwlpZiAoaW50ZXIudHZfc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjIDwgMCB8fCBpbnRlci50dl9uc2VjID49IEJJTExJT04pCisJCUVWX0VSUihFSU5WQUwpOworI2VuZGlmCisKKwlvbGRfZHVlID0gdGltZXItPmR1ZTsKKworCXRpbWVyLT5mdW5jID0gZnVuYzsKKwl0aW1lci0+dWFwID0gdWFwOworCXRpbWVyLT5kdWUgPSBkdWU7CisJdGltZXItPmludGVyID0gaW50ZXI7CisKKwlzd2l0Y2ggKGV2Q21wVGltZShkdWUsIG9sZF9kdWUpKSB7CisJY2FzZSAtMToKKwkJcmVzdWx0ID0gaGVhcF9pbmNyZWFzZWQoY3R4LT50aW1lcnMsIHRpbWVyLT5pbmRleCk7CisJCWJyZWFrOworCWNhc2UgMDoKKwkJcmVzdWx0ID0gMDsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlyZXN1bHQgPSBoZWFwX2RlY3JlYXNlZChjdHgtPnRpbWVycywgdGltZXItPmluZGV4KTsKKwkJYnJlYWs7CisJfQorCisJaWYgKGN0eC0+ZGVidWcgPiA3KSB7CisJCXByaW50ZigidGltZXJzIGFmdGVyIGV2UmVzZXRUaW1lcjpcbiIpOworCQkodm9pZCkgaGVhcF9mb3JfZWFjaChjdHgtPnRpbWVycywgcHJpbnRfdGltZXIsICh2b2lkICopY3R4KTsKKwl9CisKKwlyZXR1cm4gKHJlc3VsdCk7Cit9CisKK2ludAorZXZTZXRJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkJZXZUaW1lckZ1bmMgZnVuYywKKwkJdm9pZCAqdWFwLAorCQlzdHJ1Y3QgdGltZXNwZWMgbWF4X2lkbGUsCisJCWV2VGltZXJJRCAqb3BhcXVlSUQKKykgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWlkbGVfdGltZXIgKnR0OworCisJLyogQWxsb2NhdGUgYW5kIGZpbGwuICovCisJT0tORVcodHQpOworCXR0LT5mdW5jID0gZnVuYzsKKwl0dC0+dWFwID0gdWFwOworCXR0LT5sYXN0VG91Y2hlZCA9IGN0eC0+bGFzdEV2ZW50VGltZTsKKwl0dC0+bWF4X2lkbGUgPSBtYXhfaWRsZTsKKworCWlmIChldlNldFRpbWVyKG9wYXF1ZUN0eCwgaWRsZV90aW1lb3V0LCB0dCwKKwkJICAgICAgIGV2QWRkVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIG1heF9pZGxlKSwKKwkJICAgICAgIG1heF9pZGxlLCBvcGFxdWVJRCkgPCAwKSB7CisJCUZSRUUodHQpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwl0dC0+dGltZXIgPSBvcGFxdWVJRC0+b3BhcXVlOworCisJcmV0dXJuICgwKTsKK30KKworaW50CitldkNsZWFySWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2VGltZXJJRCBpZCkgeworCWV2VGltZXIgKmRlbCA9IGlkLm9wYXF1ZTsKKwlpZGxlX3RpbWVyICp0dCA9IGRlbC0+dWFwOworCisJRlJFRSh0dCk7CisJcmV0dXJuIChldkNsZWFyVGltZXIob3BhcXVlQ3R4LCBpZCkpOworfQorCitpbnQKK2V2UmVzZXRJZGxlVGltZXIoZXZDb250ZXh0IG9wYXF1ZUN0eCwKKwkJIGV2VGltZXJJRCBvcGFxdWVJRCwKKwkJIGV2VGltZXJGdW5jIGZ1bmMsCisJCSB2b2lkICp1YXAsCisJCSBzdHJ1Y3QgdGltZXNwZWMgbWF4X2lkbGUKKykgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2VGltZXIgKnRpbWVyID0gb3BhcXVlSUQub3BhcXVlOworCWlkbGVfdGltZXIgKnR0ID0gdGltZXItPnVhcDsKKworCXR0LT5mdW5jID0gZnVuYzsKKwl0dC0+dWFwID0gdWFwOworCXR0LT5sYXN0VG91Y2hlZCA9IGN0eC0+bGFzdEV2ZW50VGltZTsKKwl0dC0+bWF4X2lkbGUgPSBtYXhfaWRsZTsKKworCXJldHVybiAoZXZSZXNldFRpbWVyKG9wYXF1ZUN0eCwgb3BhcXVlSUQsIGlkbGVfdGltZW91dCwgdHQsCisJCQkgICAgIGV2QWRkVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIG1heF9pZGxlKSwKKwkJCSAgICAgbWF4X2lkbGUpKTsKK30KKworaW50CitldlRvdWNoSWRsZVRpbWVyKGV2Q29udGV4dCBvcGFxdWVDdHgsIGV2VGltZXJJRCBpZCkgeworCWV2Q29udGV4dF9wICpjdHggPSBvcGFxdWVDdHgub3BhcXVlOworCWV2VGltZXIgKnQgPSBpZC5vcGFxdWU7CisJaWRsZV90aW1lciAqdHQgPSB0LT51YXA7CisKKwl0dC0+bGFzdFRvdWNoZWQgPSBjdHgtPmxhc3RFdmVudFRpbWU7CisKKwlyZXR1cm4gKDApOworfQorCisvKiBQdWJsaWMgdG8gdGhlIHJlc3Qgb2YgZXZlbnRsaWIuICovCisKK2hlYXBfY29udGV4dAorZXZDcmVhdGVUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKmN0eCkgeworCisJVU5VU0VEKGN0eCk7CisKKwlyZXR1cm4gKGhlYXBfbmV3KGR1ZV9zb29uZXIsIHNldF9pbmRleCwgMjA0OCkpOworfQorCit2b2lkCitldkRlc3Ryb3lUaW1lcnMoY29uc3QgZXZDb250ZXh0X3AgKmN0eCkgeworCSh2b2lkKSBoZWFwX2Zvcl9lYWNoKGN0eC0+dGltZXJzLCBmcmVlX3RpbWVyLCBOVUxMKTsKKwkodm9pZCkgaGVhcF9mcmVlKGN0eC0+dGltZXJzKTsKK30KKworLyogUHJpdmF0ZS4gKi8KKworc3RhdGljIGludAorZHVlX3Nvb25lcih2b2lkICphLCB2b2lkICpiKSB7CisJZXZUaW1lciAqYV90aW1lciwgKmJfdGltZXI7CisKKwlhX3RpbWVyID0gYTsKKwliX3RpbWVyID0gYjsKKwlyZXR1cm4gKGV2Q21wVGltZShhX3RpbWVyLT5kdWUsIGJfdGltZXItPmR1ZSkgPCAwKTsKK30KKworc3RhdGljIHZvaWQKK3NldF9pbmRleCh2b2lkICp3aGF0LCBpbnQgaWR4KSB7CisJZXZUaW1lciAqdGltZXI7CisKKwl0aW1lciA9IHdoYXQ7CisJdGltZXItPmluZGV4ID0gaWR4OworfQorCitzdGF0aWMgdm9pZAorZnJlZV90aW1lcih2b2lkICp3aGF0LCB2b2lkICp1YXApIHsKKwlldlRpbWVyICp0ID0gd2hhdDsKKworCVVOVVNFRCh1YXApOworCisJRlJFRSh0KTsKK30KKworc3RhdGljIHZvaWQKK3ByaW50X3RpbWVyKHZvaWQgKndoYXQsIHZvaWQgKnVhcCkgeworCWV2VGltZXIgKmN1ciA9IHdoYXQ7CisJZXZDb250ZXh0X3AgKmN0eCA9IHVhcDsKKworCWN1ciA9IHdoYXQ7CisJZXZQcmludGYoY3R4LCA3LAorCSAgICAiICBmdW5jICVwLCB1YXAgJXAsIGR1ZSAlbGQuJTA5bGQsIGludGVyICVsZC4lMDlsZFxuIiwKKwkJIGN1ci0+ZnVuYywgY3VyLT51YXAsCisJCSAobG9uZyljdXItPmR1ZS50dl9zZWMsIGN1ci0+ZHVlLnR2X25zZWMsCisJCSAobG9uZyljdXItPmludGVyLnR2X3NlYywgY3VyLT5pbnRlci50dl9uc2VjKTsKK30KKworc3RhdGljIHZvaWQKK2lkbGVfdGltZW91dChldkNvbnRleHQgb3BhcXVlQ3R4LAorCSAgICAgdm9pZCAqdWFwLAorCSAgICAgc3RydWN0IHRpbWVzcGVjIGR1ZSwKKwkgICAgIHN0cnVjdCB0aW1lc3BlYyBpbnRlcgorKSB7CisJZXZDb250ZXh0X3AgKmN0eCA9IG9wYXF1ZUN0eC5vcGFxdWU7CisJaWRsZV90aW1lciAqdGhpcyA9IHVhcDsKKwlzdHJ1Y3QgdGltZXNwZWMgaWRsZTsKKworCVVOVVNFRChkdWUpOworCVVOVVNFRChpbnRlcik7CisJCisJaWRsZSA9IGV2U3ViVGltZShjdHgtPmxhc3RFdmVudFRpbWUsIHRoaXMtPmxhc3RUb3VjaGVkKTsKKwlpZiAoZXZDbXBUaW1lKGlkbGUsIHRoaXMtPm1heF9pZGxlKSA+PSAwKSB7CisJCSh0aGlzLT5mdW5jKShvcGFxdWVDdHgsIHRoaXMtPnVhcCwgdGhpcy0+dGltZXItPmR1ZSwKKwkJCSAgICAgdGhpcy0+bWF4X2lkbGUpOworCQkvKgorCQkgKiBTZXR0aW5nIHRoZSBpbnRlcnZhbCB0byB6ZXJvIHdpbGwgY2F1c2UgdGhlIHRpbWVyIHRvCisJCSAqIGJlIGNsZWFuZWQgdXAgaW4gZXZEcm9wKCkuCisJCSAqLworCQl0aGlzLT50aW1lci0+aW50ZXIgPSBldkNvbnNUaW1lKDBMLCAwTCk7CisJCUZSRUUodGhpcyk7CisJfSBlbHNlIHsKKwkJLyogZXZEcm9wKCkgd2lsbCByZXNjaGVkdWxlIHRoZSB0aW1lci4gKi8KKwkJdGhpcy0+dGltZXItPmludGVyID0gZXZTdWJUaW1lKHRoaXMtPm1heF9pZGxlLCBpZGxlKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL2lzYy9ldmVudGxpYl9wLmggYi9saWJjL25ldGJzZC9pc2MvZXZlbnRsaWJfcC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlZGM1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9pc2MvZXZlbnRsaWJfcC5oCkBAIC0wLDAgKzEsMjMzIEBACisvKgkkTmV0QlNEOiBldmVudGxpYl9wLmgsdiAxLjEuMS4xIDIwMDQvMDUvMjAgMTk6MzQ6MzIgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk1LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bQorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogZXZlbnRsaWJfcC5oIC0gcHJpdmF0ZSBpbnRlcmZhY2VzIGZvciBldmVudGxpYgorICogdml4IDA5c2VwOTUgW2luaXRpYWxdCisgKgorICogSWQ6IGV2ZW50bGliX3AuaCx2IDEuMy4yLjEuNC4xIDIwMDQvMDMvMDkgMDg6MzM6NDMgbWFya2EgRXhwCisgKi8KKworI2lmbmRlZiBfRVZFTlRMSUJfUF9ICisjZGVmaW5lIF9FVkVOVExJQl9QX0gKKworI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisKKyNkZWZpbmUgRVZFTlRMSUJfREVCVUcgMQorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxpc2MvaGVhcC5oPgorI2luY2x1ZGUgPGlzYy9saXN0Lmg+CisjaW5jbHVkZSA8aXNjL21lbWNsdXN0ZXIuaD4KKworCisjZGVmaW5lCUVWX01BU0tfQUxMCShFVl9SRUFEIHwgRVZfV1JJVEUgfCBFVl9FWENFUFQpCisjZGVmaW5lIEVWX0VSUihlKQkJcmV0dXJuIChlcnJubyA9IChlKSwgLTEpCisjZGVmaW5lIE9LKHgpCQlpZiAoKHgpIDwgMCkgRVZfRVJSKGVycm5vKTsgZWxzZSAodm9pZClOVUxMCisKKworI2lmIEhBVkVfTUVNX0dFVF9TRVQKKyNkZWZpbmUJTkVXKHApCQlpZiAoKChwKSA9IG1lbWdldChzaXplb2YgKihwKSkpICE9IE5VTEwpIFwKKwkJCQlGSUxMKHApOyBcCisJCQllbHNlIFwKKwkJCQkodm9pZClOVUxMOworI2RlZmluZSBPS05FVyhwKQlpZiAoISgocCkgPSBtZW1nZXQoc2l6ZW9mICoocCkpKSkgeyBcCisJCQkJZXJybm8gPSBFTk9NRU07IFwKKwkJCQlyZXR1cm4gKC0xKTsgXAorCQkJfSBlbHNlIFwKKwkJCQlGSUxMKHApCisjZGVmaW5lIEZSRUUocCkJCW1lbXB1dCgocCksIHNpemVvZiAqKHApKQorCisjaWYgRVZFTlRMSUJfREVCVUcKKyNkZWZpbmUgRklMTChwKQkJbWVtc2V0KChwKSwgMHhGNSwgc2l6ZW9mICoocCkpCisjZWxzZQorI2RlZmluZSBGSUxMKHApCisjZW5kaWYKKworI2Vsc2UKKworI2RlZmluZQlORVcocCkgCXAgPSBtYWxsb2Moc2l6ZW9mICoocCkpOworI2RlZmluZSBPS05FVyhwKSBpZiAoISgocCkgPSBtYWxsb2Moc2l6ZW9mICoocCkpKSkgeyBlcnJubyA9IEVOT01FTTsgcmV0dXJuICgtMSk7IH0KKyNkZWZpbmUgRlJFRShwKQlmcmVlKHApCisjZGVmaW5lIEZJTEwocCkKKworI2VuZGlmCisKKwordHlwZWRlZiBzdHJ1Y3QgZXZDb25uIHsKKwlldkNvbm5GdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJaW50CQlmZDsKKwlpbnQJCWZsYWdzOworI2RlZmluZSBFVl9DT05OX0xJU1RFTgkJMHgwMDAxCQkvKiBDb25uZWN0aW9uIGlzIGEgbGlzdGVuZXIuICovCisjZGVmaW5lIEVWX0NPTk5fU0VMRUNURUQJMHgwMDAyCQkvKiBldlNlbGVjdEZEKGNvbm4tPmZpbGUpLiAqLworI2RlZmluZSBFVl9DT05OX0JMT0NLCQkweDAwMDQJCS8qIExpc3RlbmVyIGZkIHdhcyBibG9ja2luZy4gKi8KKwlldkZpbGVJRAlmaWxlOworCXN0cnVjdCBldkNvbm4gKglwcmV2OworCXN0cnVjdCBldkNvbm4gKgluZXh0OworfSBldkNvbm47CisKK3R5cGVkZWYgc3RydWN0IGV2QWNjZXB0IHsKKwlpbnQJCWZkOworCXVuaW9uIHsKKwkJc3RydWN0IHNvY2thZGRyCQlzYTsKKwkJc3RydWN0IHNvY2thZGRyX2luCWluOworI2lmbmRlZiBOT19TT0NLQUREUl9VTgorCQlzdHJ1Y3Qgc29ja2FkZHJfdW4JdW47CisjZW5kaWYKKwl9CQlsYTsKKwlzb2NrbGVuX3QJbGFsZW47CisJdW5pb24geworCQlzdHJ1Y3Qgc29ja2FkZHIJCXNhOworCQlzdHJ1Y3Qgc29ja2FkZHJfaW4JaW47CisjaWZuZGVmIE5PX1NPQ0tBRERSX1VOCisJCXN0cnVjdCBzb2NrYWRkcl91bgl1bjsKKyNlbmRpZgorCX0JCXJhOworCXNvY2tsZW5fdAlyYWxlbjsKKwlpbnQJCWlvRXJybm87CisJZXZDb25uICoJY29ubjsKKwlMSU5LKHN0cnVjdCBldkFjY2VwdCkgbGluazsKK30gZXZBY2NlcHQ7CisKK3R5cGVkZWYgc3RydWN0IGV2RmlsZSB7CisJZXZGaWxlRnVuYwlmdW5jOworCXZvaWQgKgkJdWFwOworCWludAkJZmQ7CisJaW50CQlldmVudG1hc2s7CisJaW50CQlwcmVlbXB0aXZlOworCXN0cnVjdCBldkZpbGUgKglwcmV2OworCXN0cnVjdCBldkZpbGUgKgluZXh0OworCXN0cnVjdCBldkZpbGUgKglmZHByZXY7CisJc3RydWN0IGV2RmlsZSAqCWZkbmV4dDsKK30gZXZGaWxlOworCit0eXBlZGVmIHN0cnVjdCBldlN0cmVhbSB7CisJZXZTdHJlYW1GdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJZXZGaWxlSUQJZmlsZTsKKwlldlRpbWVySUQJdGltZXI7CisJaW50CQlmbGFnczsKKyNkZWZpbmUgRVZfU1RSX1RJTUVST0sJMHgwMDAxCS8qIElGRiB0aW1lciB2YWxpZC4gKi8KKwlpbnQJCWZkOworCXN0cnVjdCBpb3ZlYyAqCWlvdk9yaWc7CisJaW50CQlpb3ZPcmlnQ291bnQ7CisJc3RydWN0IGlvdmVjICoJaW92Q3VyOworCWludAkJaW92Q3VyQ291bnQ7CisJaW50CQlpb1RvdGFsOworCWludAkJaW9Eb25lOworCWludAkJaW9FcnJubzsKKwlzdHJ1Y3QgZXZTdHJlYW0JKnByZXZEb25lLCAqbmV4dERvbmU7CisJc3RydWN0IGV2U3RyZWFtCSpwcmV2LCAqbmV4dDsKK30gZXZTdHJlYW07CisKK3R5cGVkZWYgc3RydWN0IGV2VGltZXIgeworCWV2VGltZXJGdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJc3RydWN0IHRpbWVzcGVjCWR1ZSwgaW50ZXI7CisJaW50CQlpbmRleDsKKwlpbnQJCW1vZGU7CisjZGVmaW5lIEVWX1RNUl9SQVRFCTEKK30gZXZUaW1lcjsKKwordHlwZWRlZiBzdHJ1Y3QgZXZXYWl0IHsKKwlldldhaXRGdW5jCWZ1bmM7CisJdm9pZCAqCQl1YXA7CisJY29uc3Qgdm9pZCAqCXRhZzsKKwlzdHJ1Y3QgZXZXYWl0ICoJbmV4dDsKK30gZXZXYWl0OworCit0eXBlZGVmIHN0cnVjdCBldldhaXRMaXN0IHsKKwlldldhaXQgKgkJZmlyc3Q7CisJZXZXYWl0ICoJCWxhc3Q7CisJc3RydWN0IGV2V2FpdExpc3QgKglwcmV2OworCXN0cnVjdCBldldhaXRMaXN0ICoJbmV4dDsKK30gZXZXYWl0TGlzdDsKKwordHlwZWRlZiBzdHJ1Y3QgZXZFdmVudF9wIHsKKwllbnVtIHsgIEFjY2VwdCwgRmlsZSwgU3RyZWFtLCBUaW1lciwgV2FpdCwgRnJlZSwgTnVsbCAgfSB0eXBlOworCXVuaW9uIHsKKwkJc3RydWN0IHsgIGV2QWNjZXB0ICp0aGlzOyAgfQkJCWFjY2VwdDsKKwkJc3RydWN0IHsgIGV2RmlsZSAqdGhpczsgaW50IGV2ZW50bWFzazsgIH0JZmlsZTsKKwkJc3RydWN0IHsgIGV2U3RyZWFtICp0aGlzOyAgfQkJCXN0cmVhbTsKKwkJc3RydWN0IHsgIGV2VGltZXIgKnRoaXM7ICB9CQkJdGltZXI7CisJCXN0cnVjdCB7ICBldldhaXQgKnRoaXM7ICB9CQkJd2FpdDsKKwkJc3RydWN0IHsgIHN0cnVjdCBldkV2ZW50X3AgKm5leHQ7ICB9CQlmcmVlOworCQlzdHJ1Y3QgeyAgY29uc3Qgdm9pZCAqcGxhY2Vob2xkZXI7ICB9CQludWxsOworCX0gdTsKK30gZXZFdmVudF9wOworCit0eXBlZGVmIHN0cnVjdCB7CisJLyogR2xvYmFsLiAqLworCWNvbnN0IGV2RXZlbnRfcAkqY3VyOworCS8qIERlYnVnZ2luZy4gKi8KKwlpbnQJCWRlYnVnOworCUZJTEUJCSpvdXRwdXQ7CisJLyogQ29ubmVjdGlvbnMuICovCisJZXZDb25uCQkqY29ubnM7CisJTElTVChldkFjY2VwdCkJYWNjZXB0czsKKwkvKiBGaWxlcy4gKi8KKwlldkZpbGUJCSpmaWxlcywgKmZkTmV4dDsKKwlmZF9zZXQJCXJkTGFzdCwgcmROZXh0OworCWZkX3NldAkJd3JMYXN0LCB3ck5leHQ7CisJZmRfc2V0CQlleExhc3QsIGV4TmV4dDsKKwlmZF9zZXQJCW5vbmJsb2NrQmVmb3JlOworCWludAkJZmRNYXgsIGZkQ291bnQsIGhpZ2hlc3RGRDsKKwlldkZpbGUJCSpmZFRhYmxlW0ZEX1NFVFNJWkVdOworI2lmZGVmIEVWRU5UTElCX1RJTUVfQ0hFQ0tTCisJc3RydWN0IHRpbWVzcGVjCWxhc3RTZWxlY3RUaW1lOworCWludAkJbGFzdEZkQ291bnQ7CisjZW5kaWYKKwkvKiBTdHJlYW1zLiAqLworCWV2U3RyZWFtCSpzdHJlYW1zOworCWV2U3RyZWFtCSpzdHJEb25lLCAqc3RyTGFzdDsKKwkvKiBUaW1lcnMuICovCisJc3RydWN0IHRpbWVzcGVjCWxhc3RFdmVudFRpbWU7CisJaGVhcF9jb250ZXh0CXRpbWVyczsKKwkvKiBXYWl0cy4gKi8KKwlldldhaXRMaXN0CSp3YWl0TGlzdHM7CisJZXZXYWl0TGlzdAl3YWl0RG9uZTsKK30gZXZDb250ZXh0X3A7CisKKy8qIGV2ZW50bGliLmMgKi8KKyNkZWZpbmUgZXZQcmludGYgX19ldlByaW50Zgordm9pZCBldlByaW50Zihjb25zdCBldkNvbnRleHRfcCAqY3R4LCBpbnQgbGV2ZWwsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKworLyogZXZfdGltZXJzLmMgKi8KKyNkZWZpbmUgZXZDcmVhdGVUaW1lcnMgX19ldkNyZWF0ZVRpbWVycworaGVhcF9jb250ZXh0IGV2Q3JlYXRlVGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICopOworI2RlZmluZSBldkRlc3Ryb3lUaW1lcnMgX19ldkRlc3Ryb3lUaW1lcnMKK3ZvaWQgZXZEZXN0cm95VGltZXJzKGNvbnN0IGV2Q29udGV4dF9wICopOworCisvKiBldl93YWl0cy5jICovCisjZGVmaW5lIGV2RnJlZVdhaXQgX19ldkZyZWVXYWl0CitldldhaXQgKmV2RnJlZVdhaXQoZXZDb250ZXh0X3AgKmN0eCwgZXZXYWl0ICpvbGQpOworCisvKiBHbG9iYWwgb3B0aW9ucyAqLworaW50CQlfX2V2T3B0TW9ub1RpbWU7CisKKyNlbmRpZiAvKl9FVkVOVExJQl9QX0gqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmFtZXNlci9uc19uYW1lLmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NWQyZjYwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19uYW1lLmMKQEAgLTAsMCArMSw5NzAgQEAKKy8qCSROZXRCU0Q6IG5zX25hbWUuYyx2IDEuMyAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25hbWUuYyx2IDEuMy4yLjQuNC4yIDIwMDQvMDUvMDQgMDM6Mjc6NDcgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19uYW1lLmMsdiAxLjMgMjAwNC8xMS8wNyAwMjoxOTo0OSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKKyNpZmRlZiBTUFJJTlRGX0NIQVIKKyMgZGVmaW5lIFNQUklOVEYoeCkgc3RybGVuKHNwcmludGYvKioveCkKKyNlbHNlCisjIGRlZmluZSBTUFJJTlRGKHgpICgoc2l6ZV90KXNwcmludGYgeCkKKyNlbmRpZgorCisjZGVmaW5lIE5TX1RZUEVfRUxUCQkJMHg0MCAvKiBFRE5TMCBleHRlbmRlZCBsYWJlbCB0eXBlICovCisjZGVmaW5lIEROU19MQUJFTFRZUEVfQklUU1RSSU5HCQkweDQxCisKKy8qIERhdGEuICovCisKK3N0YXRpYyBjb25zdCBjaGFyCWRpZ2l0c1tdID0gIjAxMjM0NTY3ODkiOworCitzdGF0aWMgY29uc3QgY2hhciBkaWdpdHZhbHVlWzI1Nl0gPSB7CisJLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCS8qMTYqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjMyKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo0OCovCisJIDAsICAxLCAgMiwgIDMsICA0LCAgNSwgIDYsICA3LCAgOCwgIDksIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qNjQqLworCS0xLCAxMCwgMTEsIDEyLCAxMywgMTQsIDE1LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjgwKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyo5NiovCisJLTEsIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC8qMTEyKi8KKwktMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLyoxMjgqLworCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLAorCS0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAvKjI1NiovCit9OworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlzcGVjaWFsKGludCk7CitzdGF0aWMgaW50CQlwcmludGFibGUoaW50KTsKK3N0YXRpYyBpbnQJCWRuX2ZpbmQoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJCWNvbnN0IHVfY2hhciAqIGNvbnN0ICosCisJCQkJY29uc3QgdV9jaGFyICogY29uc3QgKik7CitzdGF0aWMgaW50CQllbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKiwgY29uc3QgY2hhciAqLAorCQkJCQl1bnNpZ25lZCBjaGFyICoqLCB1bnNpZ25lZCBjaGFyICoqLAorCQkJCQl1bnNpZ25lZCBjb25zdCBjaGFyICopOworc3RhdGljIGludAkJbGFiZWxsZW4oY29uc3QgdV9jaGFyICopOworc3RhdGljIGludAkJZGVjb2RlX2JpdHN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICoqLAorCQkJCQkgY2hhciAqLCBjb25zdCBjaGFyICopOworCisvKiBQdWJsaWMuICovCisKKy8qCisgKiBuc19uYW1lX250b3Aoc3JjLCBkc3QsIGRzdHNpeikKKyAqCUNvbnZlcnQgYW4gZW5jb2RlZCBkb21haW4gbmFtZSB0byBwcmludGFibGUgYXNjaWkgYXMgcGVyIFJGQzEwMzUuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKKyAqIG5vdGVzOgorICoJVGhlIHJvb3QgaXMgcmV0dXJuZWQgYXMgIi4iCisgKglBbGwgb3RoZXIgZG9tYWlucyBhcmUgcmV0dXJuZWQgaW4gbm9uIGFic29sdXRlIGZvcm0KKyAqLworaW50Cituc19uYW1lX250b3AoY29uc3QgdV9jaGFyICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKK3sKKwljb25zdCB1X2NoYXIgKmNwOworCWNoYXIgKmRuLCAqZW9tOworCXVfY2hhciBjOworCXVfaW50IG47CisJaW50IGw7CisKKwljcCA9IHNyYzsKKwlkbiA9IGRzdDsKKwllb20gPSBkc3QgKyBkc3RzaXo7CisKKwl3aGlsZSAoKG4gPSAqY3ArKykgIT0gMCkgeworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkJLyogU29tZSBraW5kIG9mIGNvbXByZXNzaW9uIHBvaW50ZXIuICovCisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKGRuICE9IGRzdCkgeworCQkJaWYgKGRuID49IGVvbSkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQkqZG4rKyA9ICcuJzsKKwkJfQorCQlpZiAoKGwgPSBsYWJlbGxlbihjcCAtIDEpKSA8IDApIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7IC8qIFhYWCAqLworCQkJcmV0dXJuKC0xKTsKKwkJfQorCQlpZiAoZG4gKyBsID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfVFlQRV9FTFQpIHsKKwkJCWludCBtOworCisJCQlpZiAobiAhPSBETlNfTEFCRUxUWVBFX0JJVFNUUklORykgeworCQkJCS8qIFhYWDogbGFiZWxsZW4gc2hvdWxkIHJlamVjdCB0aGlzIGNhc2UgKi8KKwkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQlyZXR1cm4oLTEpOworCQkJfQorCQkJaWYgKChtID0gZGVjb2RlX2JpdHN0cmluZygmY3AsIGRuLCBlb20pKSA8IDApCisJCQl7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4oLTEpOworCQkJfQorCQkJZG4gKz0gbTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWZvciAoOyBsID4gMDsgbC0tKSB7CisJCQljID0gKmNwKys7CisJCQlpZiAoc3BlY2lhbChjKSkgeworCQkJCWlmIChkbiArIDEgPj0gZW9tKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQkqZG4rKyA9ICdcXCc7CisJCQkJKmRuKysgPSAoY2hhciljOworCQkJfSBlbHNlIGlmICghcHJpbnRhYmxlKGMpKSB7CisJCQkJaWYgKGRuICsgMyA+PSBlb20pIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCSpkbisrID0gJ1xcJzsKKwkJCQkqZG4rKyA9IGRpZ2l0c1tjIC8gMTAwXTsKKwkJCQkqZG4rKyA9IGRpZ2l0c1soYyAlIDEwMCkgLyAxMF07CisJCQkJKmRuKysgPSBkaWdpdHNbYyAlIDEwXTsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGRuID49IGVvbSkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJKmRuKysgPSAoY2hhciljOworCQkJfQorCQl9CisJfQorCWlmIChkbiA9PSBkc3QpIHsKKwkJaWYgKGRuID49IGVvbSkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCSpkbisrID0gJy4nOworCX0KKwlpZiAoZG4gPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkqZG4rKyA9ICdcMCc7CisJcmV0dXJuIChkbiAtIGRzdCk7Cit9CisKKy8qCisgKiBuc19uYW1lX3B0b24oc3JjLCBkc3QsIGRzdHNpeikKKyAqCUNvbnZlcnQgYSBhc2NpaSBzdHJpbmcgaW50byBhbiBlbmNvZGVkIGRvbWFpbiBuYW1lIGFzIHBlciBSRkMxMDM1LgorICogcmV0dXJuOgorICoJLTEgaWYgaXQgZmFpbHMKKyAqCTEgaWYgc3RyaW5nIHdhcyBmdWxseSBxdWFsaWZpZWQKKyAqCTAgaXMgc3RyaW5nIHdhcyBub3QgZnVsbHkgcXVhbGlmaWVkCisgKiBub3RlczoKKyAqCUVuZm9yY2VzIGxhYmVsIGFuZCBkb21haW4gbGVuZ3RoIGxpbWl0cy4KKyAqLworCitpbnQKK25zX25hbWVfcHRvbihjb25zdCBjaGFyICpzcmMsIHVfY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6KQoreworCXVfY2hhciAqbGFiZWwsICpicCwgKmVvbTsKKwlpbnQgYywgbiwgZXNjYXBlZCwgZSA9IDA7CisJY2hhciAqY3A7CisKKwllc2NhcGVkID0gMDsKKwlicCA9IGRzdDsKKwllb20gPSBkc3QgKyBkc3RzaXo7CisJbGFiZWwgPSBicCsrOworCisJd2hpbGUgKChjID0gKnNyYysrKSAhPSAwKSB7CisJCWlmIChlc2NhcGVkKSB7CisJCQlpZiAoYyA9PSAnWycpIHsgLyogc3RhcnQgYSBiaXQgc3RyaW5nIGxhYmVsICovCisJCQkJaWYgKChjcCA9IHN0cmNocihzcmMsICddJykpID09IE5VTEwpIHsKKwkJCQkJZXJybm8gPSBFSU5WQUw7IC8qID8/PyAqLworCQkJCQlyZXR1cm4oLTEpOworCQkJCX0KKwkJCQlpZiAoKGUgPSBlbmNvZGVfYml0c3JpbmcoJnNyYywgY3AgKyAyLAorCQkJCQkJCSAmbGFiZWwsICZicCwgZW9tKSkKKwkJCQkgICAgIT0gMCkgeworCQkJCQllcnJubyA9IGU7CisJCQkJCXJldHVybigtMSk7CisJCQkJfQorCQkJCWVzY2FwZWQgPSAwOworCQkJCWxhYmVsID0gYnArKzsKKwkJCQlpZiAoKGMgPSAqc3JjKyspID09IDApCisJCQkJCWdvdG8gZG9uZTsKKwkJCQllbHNlIGlmIChjICE9ICcuJykgeworCQkJCQllcnJubyA9IEVJTlZBTDsKKwkJCQkJcmV0dXJuKC0xKTsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQl9CisJCQllbHNlIGlmICgoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgIT0gTlVMTCkgeworCQkJCW4gPSAoY3AgLSBkaWdpdHMpICogMTAwOworCQkJCWlmICgoYyA9ICpzcmMrKykgPT0gMCB8fAorCQkJCSAgICAoY3AgPSBzdHJjaHIoZGlnaXRzLCBjKSkgPT0gTlVMTCkgeworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQkJbiArPSAoY3AgLSBkaWdpdHMpICogMTA7CisJCQkJaWYgKChjID0gKnNyYysrKSA9PSAwIHx8CisJCQkJICAgIChjcCA9IHN0cmNocihkaWdpdHMsIGMpKSA9PSBOVUxMKSB7CisJCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJCXJldHVybiAoLTEpOworCQkJCX0KKwkJCQluICs9IChjcCAtIGRpZ2l0cyk7CisJCQkJaWYgKG4gPiAyNTUpIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCWMgPSBuOworCQkJfQorCQkJZXNjYXBlZCA9IDA7CisJCX0gZWxzZSBpZiAoYyA9PSAnXFwnKSB7CisJCQllc2NhcGVkID0gMTsKKwkJCWNvbnRpbnVlOworCQl9IGVsc2UgaWYgKGMgPT0gJy4nKSB7CisJCQljID0gKGJwIC0gbGFiZWwgLSAxKTsKKwkJCWlmICgoYyAmIE5TX0NNUFJTRkxHUykgIT0gMCkgewkvKiBMYWJlbCB0b28gYmlnLiAqLworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlpZiAobGFiZWwgPj0gZW9tKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCSpsYWJlbCA9IGM7CisJCQkvKiBGdWxseSBxdWFsaWZpZWQgPyAqLworCQkJaWYgKCpzcmMgPT0gJ1wwJykgeworCQkJCWlmIChjICE9IDApIHsKKwkJCQkJaWYgKGJwID49IGVvbSkgeworCQkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJCXJldHVybiAoLTEpOworCQkJCQl9CisJCQkJCSpicCsrID0gJ1wwJzsKKwkJCQl9CisJCQkJaWYgKChicCAtIGRzdCkgPiBNQVhDRE5BTUUpIHsKKwkJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJfQorCQkJCXJldHVybiAoMSk7CisJCQl9CisJCQlpZiAoYyA9PSAwIHx8ICpzcmMgPT0gJy4nKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWxhYmVsID0gYnArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChicCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqYnArKyA9ICh1X2NoYXIpYzsKKwl9CisJYyA9IChicCAtIGxhYmVsIC0gMSk7CisJaWYgKChjICYgTlNfQ01QUlNGTEdTKSAhPSAwKSB7CQkvKiBMYWJlbCB0b28gYmlnLiAqLworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisgIGRvbmU6CisJaWYgKGxhYmVsID49IGVvbSkgeworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJKmxhYmVsID0gYzsKKwlpZiAoYyAhPSAwKSB7CisJCWlmIChicCA+PSBlb20pIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqYnArKyA9IDA7CisJfQorCWlmICgoYnAgLSBkc3QpID4gTUFYQ0ROQU1FKSB7CS8qIHNyYyB0b28gYmlnICovCisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKDApOworfQorCisvKgorICogbnNfbmFtZV9udG9sKHNyYywgZHN0LCBkc3RzaXopCisgKglDb252ZXJ0IGEgbmV0d29yayBzdHJpbmdzIGxhYmVscyBpbnRvIGFsbCBsb3dlcmNhc2UuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgYnl0ZXMgd3JpdHRlbiB0byBidWZmZXIsIG9yIC0xICh3aXRoIGVycm5vIHNldCkKKyAqIG5vdGVzOgorICoJRW5mb3JjZXMgbGFiZWwgYW5kIGRvbWFpbiBsZW5ndGggbGltaXRzLgorICovCisKK2ludAorbnNfbmFtZV9udG9sKGNvbnN0IHVfY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKK3sKKwljb25zdCB1X2NoYXIgKmNwOworCXVfY2hhciAqZG4sICplb207CisJdV9jaGFyIGM7CisJdV9pbnQgbjsKKwlpbnQgbDsKKworCWNwID0gc3JjOworCWRuID0gZHN0OworCWVvbSA9IGRzdCArIGRzdHNpejsKKworCWlmIChkbiA+PSBlb20pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXdoaWxlICgobiA9ICpjcCsrKSAhPSAwKSB7CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQkvKiBTb21lIGtpbmQgb2YgY29tcHJlc3Npb24gcG9pbnRlci4gKi8KKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQkqZG4rKyA9IG47CisJCWlmICgobCA9IGxhYmVsbGVuKGNwIC0gMSkpIDwgMCkgeworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWlmIChkbiArIGwgPj0gZW9tKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJZm9yICg7IGwgPiAwOyBsLS0pIHsKKwkJCWMgPSAqY3ArKzsKKwkJCWlmIChpc3VwcGVyKGMpKQorCQkJCSpkbisrID0gdG9sb3dlcihjKTsKKwkJCWVsc2UKKwkJCQkqZG4rKyA9IGM7CisJCX0KKwl9CisJKmRuKysgPSAnXDAnOworCXJldHVybiAoZG4gLSBkc3QpOworfQorCisvKgorICogbnNfbmFtZV91bnBhY2sobXNnLCBlb20sIHNyYywgZHN0LCBkc3RzaXopCisgKglVbnBhY2sgYSBkb21haW4gbmFtZSBmcm9tIGEgbWVzc2FnZSwgc291cmNlIG1heSBiZSBjb21wcmVzc2VkLgorICogcmV0dXJuOgorICoJLTEgaWYgaXQgZmFpbHMsIG9yIGNvbnN1bWVkIG9jdGV0cyBpZiBpdCBzdWNjZWVkcy4KKyAqLworaW50Cituc19uYW1lX3VucGFjayhjb25zdCB1X2NoYXIgKm1zZywgY29uc3QgdV9jaGFyICplb20sIGNvbnN0IHVfY2hhciAqc3JjLAorCSAgICAgICB1X2NoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKK3sKKwljb25zdCB1X2NoYXIgKnNyY3AsICpkc3RsaW07CisJdV9jaGFyICpkc3RwOworCWludCBuLCBsZW4sIGNoZWNrZWQsIGw7CisKKwlsZW4gPSAtMTsKKwljaGVja2VkID0gMDsKKwlkc3RwID0gZHN0OworCXNyY3AgPSBzcmM7CisJZHN0bGltID0gZHN0ICsgZHN0c2l6OworCWlmIChzcmNwIDwgbXNnIHx8IHNyY3AgPj0gZW9tKSB7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwkvKiBGZXRjaCBuZXh0IGxhYmVsIGluIGRvbWFpbiBuYW1lLiAqLworCXdoaWxlICgobiA9ICpzcmNwKyspICE9IDApIHsKKwkJLyogQ2hlY2sgZm9yIGluZGlyZWN0aW9uLiAqLworCQlzd2l0Y2ggKG4gJiBOU19DTVBSU0ZMR1MpIHsKKwkJY2FzZSAwOgorCQljYXNlIE5TX1RZUEVfRUxUOgorCQkJLyogTGltaXQgY2hlY2tzLiAqLworCQkJaWYgKChsID0gbGFiZWxsZW4oc3JjcCAtIDEpKSA8IDApIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybigtMSk7CisJCQl9CisJCQlpZiAoZHN0cCArIGwgKyAxID49IGRzdGxpbSB8fCBzcmNwICsgbCA+PSBlb20pIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQkJY2hlY2tlZCArPSBsICsgMTsKKwkJCSpkc3RwKysgPSBuOworCQkJbWVtY3B5KGRzdHAsIHNyY3AsIChzaXplX3QpbCk7CisJCQlkc3RwICs9IGw7CisJCQlzcmNwICs9IGw7CisJCQlicmVhazsKKworCQljYXNlIE5TX0NNUFJTRkxHUzoKKwkJCWlmIChzcmNwID49IGVvbSkgeworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQlpZiAobGVuIDwgMCkKKwkJCQlsZW4gPSBzcmNwIC0gc3JjICsgMTsKKwkJCXNyY3AgPSBtc2cgKyAoKChuICYgMHgzZikgPDwgOCkgfCAoKnNyY3AgJiAweGZmKSk7CisJCQlpZiAoc3JjcCA8IG1zZyB8fCBzcmNwID49IGVvbSkgeyAgLyogT3V0IG9mIHJhbmdlLiAqLworCQkJCWVycm5vID0gRU1TR1NJWkU7CisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQljaGVja2VkICs9IDI7CisJCQkvKgorCQkJICogQ2hlY2sgZm9yIGxvb3BzIGluIHRoZSBjb21wcmVzc2VkIG5hbWU7CisJCQkgKiBpZiB3ZSd2ZSBsb29rZWQgYXQgdGhlIHdob2xlIG1lc3NhZ2UsCisJCQkgKiB0aGVyZSBtdXN0IGJlIGEgbG9vcC4KKwkJCSAqLworCQkJaWYgKGNoZWNrZWQgPj0gZW9tIC0gbXNnKSB7CisJCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJCWJyZWFrOworCisJCWRlZmF1bHQ6CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CQkJLyogZmxhZyBlcnJvciAqLworCQl9CisJfQorCSpkc3RwID0gJ1wwJzsKKwlpZiAobGVuIDwgMCkKKwkJbGVuID0gc3JjcCAtIHNyYzsKKwlyZXR1cm4gKGxlbik7Cit9CisKKy8qCisgKiBuc19uYW1lX3BhY2soc3JjLCBkc3QsIGRzdHNpeiwgZG5wdHJzLCBsYXN0ZG5wdHIpCisgKglQYWNrIGRvbWFpbiBuYW1lICdkb21haW4nIGludG8gJ2NvbXBfZG4nLgorICogcmV0dXJuOgorICoJU2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBuYW1lLCBvciAtMS4KKyAqIG5vdGVzOgorICoJJ2RucHRycycgaXMgYW4gYXJyYXkgb2YgcG9pbnRlcnMgdG8gcHJldmlvdXMgY29tcHJlc3NlZCBuYW1lcy4KKyAqCWRucHRyc1swXSBpcyBhIHBvaW50ZXIgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUgbWVzc2FnZS4gVGhlIGFycmF5CisgKgllbmRzIHdpdGggTlVMTC4KKyAqCSdsYXN0ZG5wdHInIGlzIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBhcnJheSBwb2ludGVkIHRvCisgKglieSAnZG5wdHJzJy4KKyAqIFNpZGUgZWZmZWN0czoKKyAqCVRoZSBsaXN0IG9mIHBvaW50ZXJzIGluIGRucHRycyBpcyB1cGRhdGVkIGZvciBsYWJlbHMgaW5zZXJ0ZWQgaW50bworICoJdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuICBJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0CisgKgl0cnkgdG8gY29tcHJlc3MgbmFtZXMuIElmICdsYXN0ZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUKKyAqCWxpc3QuCisgKi8KK2ludAorbnNfbmFtZV9wYWNrKGNvbnN0IHVfY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgaW50IGRzdHNpeiwKKwkgICAgIGNvbnN0IHVfY2hhciAqKmRucHRycywgY29uc3QgdV9jaGFyICoqbGFzdGRucHRyKQoreworCXVfY2hhciAqZHN0cDsKKwljb25zdCB1X2NoYXIgKipjcHAsICoqbHBwLCAqZW9iLCAqbXNnOworCWNvbnN0IHVfY2hhciAqc3JjcDsKKwlpbnQgbiwgbCwgZmlyc3QgPSAxOworCisJc3JjcCA9IHNyYzsKKwlkc3RwID0gZHN0OworCWVvYiA9IGRzdHAgKyBkc3RzaXo7CisJbHBwID0gY3BwID0gTlVMTDsKKwlpZiAoZG5wdHJzICE9IE5VTEwpIHsKKwkJaWYgKChtc2cgPSAqZG5wdHJzKyspICE9IE5VTEwpIHsKKwkJCWZvciAoY3BwID0gZG5wdHJzOyAqY3BwICE9IE5VTEw7IGNwcCsrKQorCQkJCTsKKwkJCWxwcCA9IGNwcDsJLyogZW5kIG9mIGxpc3QgdG8gc2VhcmNoICovCisJCX0KKwl9IGVsc2UKKwkJbXNnID0gTlVMTDsKKworCS8qIG1ha2Ugc3VyZSB0aGUgZG9tYWluIHdlIGFyZSBhYm91dCB0byBhZGQgaXMgbGVnYWwgKi8KKwlsID0gMDsKKwlkbyB7CisJCWludCBsMDsKKworCQluID0gKnNyY3A7CisJCWlmICgobiAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCQllcnJubyA9IEVNU0dTSVpFOworCQkJcmV0dXJuICgtMSk7CisJCX0KKwkJaWYgKChsMCA9IGxhYmVsbGVuKHNyY3ApKSA8IDApIHsKKwkJCWVycm5vID0gRUlOVkFMOworCQkJcmV0dXJuKC0xKTsKKwkJfQorCQlsICs9IGwwICsgMTsKKwkJaWYgKGwgPiBNQVhDRE5BTUUpIHsKKwkJCWVycm5vID0gRU1TR1NJWkU7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzcmNwICs9IGwwICsgMTsKKwl9IHdoaWxlIChuICE9IDApOworCisJLyogZnJvbSBoZXJlIG9uIHdlIG5lZWQgdG8gcmVzZXQgY29tcHJlc3Npb24gcG9pbnRlciBhcnJheSBvbiBlcnJvciAqLworCXNyY3AgPSBzcmM7CisJZG8geworCQkvKiBMb29rIHRvIHNlZSBpZiB3ZSBjYW4gdXNlIHBvaW50ZXJzLiAqLworCQluID0gKnNyY3A7CisJCWlmIChuICE9IDAgJiYgbXNnICE9IE5VTEwpIHsKKwkJCWwgPSBkbl9maW5kKHNyY3AsIG1zZywgKGNvbnN0IHVfY2hhciAqIGNvbnN0ICopZG5wdHJzLAorCQkJCSAgICAoY29uc3QgdV9jaGFyICogY29uc3QgKilscHApOworCQkJaWYgKGwgPj0gMCkgeworCQkJCWlmIChkc3RwICsgMSA+PSBlb2IpIHsKKwkJCQkJZ290byBjbGVhbnVwOworCQkJCX0KKwkJCQkqZHN0cCsrID0gKCh1X2ludDMyX3QpbCA+PiA4KSB8IE5TX0NNUFJTRkxHUzsKKwkJCQkqZHN0cCsrID0gbCAlIDI1NjsKKwkJCQlyZXR1cm4gKGRzdHAgLSBkc3QpOworCQkJfQorCQkJLyogTm90IGZvdW5kLCBzYXZlIGl0LiAqLworCQkJaWYgKGxhc3RkbnB0ciAhPSBOVUxMICYmIGNwcCA8IGxhc3RkbnB0ciAtIDEgJiYKKwkJCSAgICAoZHN0cCAtIG1zZykgPCAweDQwMDAgJiYgZmlyc3QpIHsKKwkJCQkqY3BwKysgPSBkc3RwOworCQkJCSpjcHAgPSBOVUxMOworCQkJCWZpcnN0ID0gMDsKKwkJCX0KKwkJfQorCQkvKiBjb3B5IGxhYmVsIHRvIGJ1ZmZlciAqLworCQlpZiAoKG4gJiBOU19DTVBSU0ZMR1MpID09IE5TX0NNUFJTRkxHUykgeworCQkJLyogU2hvdWxkIG5vdCBoYXBwZW4uICovCisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJbiA9IGxhYmVsbGVuKHNyY3ApOworCQlpZiAoZHN0cCArIDEgKyBuID49IGVvYikgeworCQkJZ290byBjbGVhbnVwOworCQl9CisJCW1lbWNweShkc3RwLCBzcmNwLCAoc2l6ZV90KShuICsgMSkpOworCQlzcmNwICs9IG4gKyAxOworCQlkc3RwICs9IG4gKyAxOworCX0gd2hpbGUgKG4gIT0gMCk7CisKKwlpZiAoZHN0cCA+IGVvYikgeworY2xlYW51cDoKKwkJaWYgKG1zZyAhPSBOVUxMKQorCQkJKmxwcCA9IE5VTEw7CisJCWVycm5vID0gRU1TR1NJWkU7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKGRzdHAgLSBkc3QpOworfQorCisvKgorICogbnNfbmFtZV91bmNvbXByZXNzKG1zZywgZW9tLCBzcmMsIGRzdCwgZHN0c2l6KQorICoJRXhwYW5kIGNvbXByZXNzZWQgZG9tYWluIG5hbWUgdG8gcHJlc2VudGF0aW9uIGZvcm1hdC4KKyAqIHJldHVybjoKKyAqCU51bWJlciBvZiBieXRlcyByZWFkIG91dCBvZiBgc3JjJywgb3IgLTEgKHdpdGggZXJybm8gc2V0KS4KKyAqIG5vdGU6CisgKglSb290IGRvbWFpbiByZXR1cm5zIGFzICIuIiBub3QgIiIuCisgKi8KK2ludAorbnNfbmFtZV91bmNvbXByZXNzKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJCSAgIGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpeikKK3sKKwl1X2NoYXIgdG1wW05TX01BWENETkFNRV07CisJaW50IG47CisKKwlpZiAoKG4gPSBuc19uYW1lX3VucGFjayhtc2csIGVvbSwgc3JjLCB0bXAsIHNpemVvZiB0bXApKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJaWYgKG5zX25hbWVfbnRvcCh0bXAsIGRzdCwgZHN0c2l6KSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqIG5zX25hbWVfY29tcHJlc3Moc3JjLCBkc3QsIGRzdHNpeiwgZG5wdHJzLCBsYXN0ZG5wdHIpCisgKglDb21wcmVzcyBhIGRvbWFpbiBuYW1lIGludG8gd2lyZSBmb3JtYXQsIHVzaW5nIGNvbXByZXNzaW9uIHBvaW50ZXJzLgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGJ5dGVzIGNvbnN1bWVkIGluIGBkc3QnIG9yIC0xICh3aXRoIGVycm5vIHNldCkuCisgKiBub3RlczoKKyAqCSdkbnB0cnMnIGlzIGFuIGFycmF5IG9mIHBvaW50ZXJzIHRvIHByZXZpb3VzIGNvbXByZXNzZWQgbmFtZXMuCisgKglkbnB0cnNbMF0gaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIG1lc3NhZ2UuCisgKglUaGUgbGlzdCBlbmRzIHdpdGggTlVMTC4gICdsYXN0ZG5wdHInIGlzIGEgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZQorICoJYXJyYXkgcG9pbnRlZCB0byBieSAnZG5wdHJzJy4gU2lkZSBlZmZlY3QgaXMgdG8gdXBkYXRlIHRoZSBsaXN0IG9mCisgKglwb2ludGVycyBmb3IgbGFiZWxzIGluc2VydGVkIGludG8gdGhlIG1lc3NhZ2UgYXMgd2UgY29tcHJlc3MgdGhlIG5hbWUuCisgKglJZiAnZG5wdHInIGlzIE5VTEwsIHdlIGRvbid0IHRyeSB0byBjb21wcmVzcyBuYW1lcy4gSWYgJ2xhc3RkbnB0cicKKyAqCWlzIE5VTEwsIHdlIGRvbid0IHVwZGF0ZSB0aGUgbGlzdC4KKyAqLworaW50Cituc19uYW1lX2NvbXByZXNzKGNvbnN0IGNoYXIgKnNyYywgdV9jaGFyICpkc3QsIHNpemVfdCBkc3RzaXosCisJCSBjb25zdCB1X2NoYXIgKipkbnB0cnMsIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKK3sKKwl1X2NoYXIgdG1wW05TX01BWENETkFNRV07CisKKwlpZiAobnNfbmFtZV9wdG9uKHNyYywgdG1wLCBzaXplb2YgdG1wKSA9PSAtMSkKKwkJcmV0dXJuICgtMSk7CisJcmV0dXJuIChuc19uYW1lX3BhY2sodG1wLCBkc3QsIChpbnQpZHN0c2l6LCBkbnB0cnMsIGxhc3RkbnB0cikpOworfQorCisvKgorICogUmVzZXQgZG5wdHJzIHNvIHRoYXQgdGhlcmUgYXJlIG5vIGFjdGl2ZSByZWZlcmVuY2VzIHRvIHBvaW50ZXJzIGF0IG9yCisgKiBhZnRlciBzcmMuCisgKi8KK3ZvaWQKK25zX25hbWVfcm9sbGJhY2soY29uc3QgdV9jaGFyICpzcmMsIGNvbnN0IHVfY2hhciAqKmRucHRycywKKwkJIGNvbnN0IHVfY2hhciAqKmxhc3RkbnB0cikKK3sKKwl3aGlsZSAoZG5wdHJzIDwgbGFzdGRucHRyICYmICpkbnB0cnMgIT0gTlVMTCkgeworCQlpZiAoKmRucHRycyA+PSBzcmMpIHsKKwkJCSpkbnB0cnMgPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKwkJZG5wdHJzKys7CisJfQorfQorCisvKgorICogbnNfbmFtZV9za2lwKHB0cnB0ciwgZW9tKQorICoJQWR2YW5jZSAqcHRycHRyIHRvIHNraXAgb3ZlciB0aGUgY29tcHJlc3NlZCBuYW1lIGl0IHBvaW50cyBhdC4KKyAqIHJldHVybjoKKyAqCTAgb24gc3VjY2VzcywgLTEgKHdpdGggZXJybm8gc2V0KSBvbiBmYWlsdXJlLgorICovCitpbnQKK25zX25hbWVfc2tpcChjb25zdCB1X2NoYXIgKipwdHJwdHIsIGNvbnN0IHVfY2hhciAqZW9tKQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJdV9pbnQgbjsKKwlpbnQgbDsKKworCWNwID0gKnB0cnB0cjsKKwl3aGlsZSAoY3AgPCBlb20gJiYgKG4gPSAqY3ArKykgIT0gMCkgeworCQkvKiBDaGVjayBmb3IgaW5kaXJlY3Rpb24uICovCisJCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgeworCQljYXNlIDA6CQkJLyogbm9ybWFsIGNhc2UsIG4gPT0gbGVuICovCisJCQljcCArPSBuOworCQkJY29udGludWU7CisJCWNhc2UgTlNfVFlQRV9FTFQ6IC8qIEVETlMwIGV4dGVuZGVkIGxhYmVsICovCisJCQlpZiAoKGwgPSBsYWJlbGxlbihjcCAtIDEpKSA8IDApIHsKKwkJCQllcnJubyA9IEVNU0dTSVpFOyAvKiBYWFggKi8KKwkJCQlyZXR1cm4oLTEpOworCQkJfQorCQkJY3AgKz0gbDsKKwkJCWNvbnRpbnVlOworCQljYXNlIE5TX0NNUFJTRkxHUzoJLyogaW5kaXJlY3Rpb24gKi8KKwkJCWNwKys7CisJCQlicmVhazsKKwkJZGVmYXVsdDoJCS8qIGlsbGVnYWwgdHlwZSAqLworCQkJZXJybm8gPSBFTVNHU0laRTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCWJyZWFrOworCX0KKwlpZiAoY3AgPiBlb20pIHsKKwkJZXJybm8gPSBFTVNHU0laRTsKKwkJcmV0dXJuICgtMSk7CisJfQorCSpwdHJwdHIgPSBjcDsKKwlyZXR1cm4gKDApOworfQorCisvKiBQcml2YXRlLiAqLworCisvKgorICogc3BlY2lhbChjaCkKKyAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAorICoJaXMgdGhpcyBjaGFyYWN0ZWQgc3BlY2lhbCAoImluIG5lZWQgb2YgcXVvdGluZyIpID8KKyAqIHJldHVybjoKKyAqCWJvb2xlYW4uCisgKi8KK3N0YXRpYyBpbnQKK3NwZWNpYWwoaW50IGNoKSB7CisJc3dpdGNoIChjaCkgeworCWNhc2UgMHgyMjogLyogJyInICovCisJY2FzZSAweDJFOiAvKiAnLicgKi8KKwljYXNlIDB4M0I6IC8qICc7JyAqLworCWNhc2UgMHg1QzogLyogJ1xcJyAqLworCWNhc2UgMHgyODogLyogJygnICovCisJY2FzZSAweDI5OiAvKiAnKScgKi8KKwkvKiBTcGVjaWFsIG1vZGlmaWVycyBpbiB6b25lIGZpbGVzLiAqLworCWNhc2UgMHg0MDogLyogJ0AnICovCisJY2FzZSAweDI0OiAvKiAnJCcgKi8KKwkJcmV0dXJuICgxKTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gKDApOworCX0KK30KKworLyoKKyAqIHByaW50YWJsZShjaCkKKyAqCVRoaW5raW5nIGluIG5vbmludGVybmF0aW9uYWxpemVkIFVTQVNDSUkgKHBlciB0aGUgRE5TIHNwZWMpLAorICoJaXMgdGhpcyBjaGFyYWN0ZXIgdmlzaWJsZSBhbmQgbm90IGEgc3BhY2Ugd2hlbiBwcmludGVkID8KKyAqIHJldHVybjoKKyAqCWJvb2xlYW4uCisgKi8KK3N0YXRpYyBpbnQKK3ByaW50YWJsZShpbnQgY2gpIHsKKwlyZXR1cm4gKGNoID4gMHgyMCAmJiBjaCA8IDB4N2YpOworfQorCisvKgorICoJVGhpbmtpbmcgaW4gbm9uaW50ZXJuYXRpb25hbGl6ZWQgVVNBU0NJSSAocGVyIHRoZSBETlMgc3BlYyksCisgKgljb252ZXJ0IHRoaXMgY2hhcmFjdGVyIHRvIGxvd2VyIGNhc2UgaWYgaXQncyB1cHBlciBjYXNlLgorICovCitzdGF0aWMgaW50Citta2xvd2VyKGludCBjaCkgeworCWlmIChjaCA+PSAweDQxICYmIGNoIDw9IDB4NUEpCisJCXJldHVybiAoY2ggKyAweDIwKTsKKwlyZXR1cm4gKGNoKTsKK30KKworLyoKKyAqIGRuX2ZpbmQoZG9tYWluLCBtc2csIGRucHRycywgbGFzdGRucHRyKQorICoJU2VhcmNoIGZvciB0aGUgY291bnRlZC1sYWJlbCBuYW1lIGluIGFuIGFycmF5IG9mIGNvbXByZXNzZWQgbmFtZXMuCisgKiByZXR1cm46CisgKglvZmZzZXQgZnJvbSBtc2cgaWYgZm91bmQsIG9yIC0xLgorICogbm90ZXM6CisgKglkbnB0cnMgaXMgdGhlIHBvaW50ZXIgdG8gdGhlIGZpcnN0IG5hbWUgb24gdGhlIGxpc3QsCisgKglub3QgdGhlIHBvaW50ZXIgdG8gdGhlIHN0YXJ0IG9mIHRoZSBtZXNzYWdlLgorICovCitzdGF0aWMgaW50Citkbl9maW5kKGNvbnN0IHVfY2hhciAqZG9tYWluLCBjb25zdCB1X2NoYXIgKm1zZywKKwljb25zdCB1X2NoYXIgKiBjb25zdCAqZG5wdHJzLAorCWNvbnN0IHVfY2hhciAqIGNvbnN0ICpsYXN0ZG5wdHIpCit7CisJY29uc3QgdV9jaGFyICpkbiwgKmNwLCAqc3A7CisJY29uc3QgdV9jaGFyICogY29uc3QgKmNwcDsKKwl1X2ludCBuOworCisJZm9yIChjcHAgPSBkbnB0cnM7IGNwcCA8IGxhc3RkbnB0cjsgY3BwKyspIHsKKwkJc3AgPSAqY3BwOworCQkvKgorCQkgKiB0ZXJtaW5hdGUgc2VhcmNoIG9uOgorCQkgKiByb290IGxhYmVsCisJCSAqIGNvbXByZXNzaW9uIHBvaW50ZXIKKwkJICogdW51c2FibGUgb2Zmc2V0CisJCSAqLworCQl3aGlsZSAoKnNwICE9IDAgJiYgKCpzcCAmIE5TX0NNUFJTRkxHUykgPT0gMCAmJgorCQkgICAgICAgKHNwIC0gbXNnKSA8IDB4NDAwMCkgeworCQkJZG4gPSBkb21haW47CisJCQljcCA9IHNwOworCQkJd2hpbGUgKChuID0gKmNwKyspICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIGNoZWNrIGZvciBpbmRpcmVjdGlvbgorCQkJCSAqLworCQkJCXN3aXRjaCAobiAmIE5TX0NNUFJTRkxHUykgeworCQkJCWNhc2UgMDoJCS8qIG5vcm1hbCBjYXNlLCBuID09IGxlbiAqLworCQkJCQluID0gbGFiZWxsZW4oY3AgLSAxKTsgLyogWFhYICovCisKKwkJCQkJaWYgKG4gIT0gKmRuKyspCisJCQkJCQlnb3RvIG5leHQ7CisKKwkJCQkJZm9yICg7IG4gPiAwOyBuLS0pCisJCQkJCQlpZiAobWtsb3dlcigqZG4rKykgIT0KKwkJCQkJCSAgICBta2xvd2VyKCpjcCsrKSkKKwkJCQkJCQlnb3RvIG5leHQ7CisJCQkJCS8qIElzIG5leHQgcm9vdCBmb3IgYm90aCA/ICovCisJCQkJCWlmICgqZG4gPT0gJ1wwJyAmJiAqY3AgPT0gJ1wwJykKKwkJCQkJCXJldHVybiAoc3AgLSBtc2cpOworCQkJCQlpZiAoKmRuKQorCQkJCQkJY29udGludWU7CisJCQkJCWdvdG8gbmV4dDsKKwkJCQljYXNlIE5TX0NNUFJTRkxHUzoJLyogaW5kaXJlY3Rpb24gKi8KKwkJCQkJY3AgPSBtc2cgKyAoKChuICYgMHgzZikgPDwgOCkgfCAqY3ApOworCQkJCQlicmVhazsKKworCQkJCWRlZmF1bHQ6CS8qIGlsbGVnYWwgdHlwZSAqLworCQkJCQllcnJubyA9IEVNU0dTSVpFOworCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl9CisJCQl9CisgbmV4dDogOworCQkJc3AgKz0gKnNwICsgMTsKKwkJfQorCX0KKwllcnJubyA9IEVOT0VOVDsKKwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorZGVjb2RlX2JpdHN0cmluZyhjb25zdCB1bnNpZ25lZCBjaGFyICoqY3BwLCBjaGFyICpkbiwgY29uc3QgY2hhciAqZW9tKQoreworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmNwID0gKmNwcDsKKwljaGFyICpiZWcgPSBkbiwgdGM7CisJaW50IGIsIGJsZW4sIHBsZW4sIGk7CisKKwlpZiAoKGJsZW4gPSAoKmNwICYgMHhmZikpID09IDApCisJCWJsZW4gPSAyNTY7CisJcGxlbiA9IChibGVuICsgMykgLyA0OworCXBsZW4gKz0gc2l6ZW9mKCJcXFt4L10iKSArIChibGVuID4gOTkgPyAzIDogKGJsZW4gPiA5KSA/IDIgOiAxKTsKKwlpZiAoZG4gKyBwbGVuID49IGVvbSkKKwkJcmV0dXJuKC0xKTsKKworCWNwKys7CisJaSA9IFNQUklOVEYoKGRuLCAiXFxbeCIpKTsKKwlpZiAoaSA8IDApCisJCXJldHVybiAoLTEpOworCWRuICs9IGk7CisJZm9yIChiID0gYmxlbjsgYiA+IDc7IGIgLT0gOCwgY3ArKykgeworCQlpID0gU1BSSU5URigoZG4sICIlMDJ4IiwgKmNwICYgMHhmZikpOworCQlpZiAoaSA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJZG4gKz0gaTsKKwl9CisJaWYgKGIgPiA0KSB7CisJCXRjID0gKmNwKys7CisJCWkgPSBTUFJJTlRGKChkbiwgIiUwMngiLCB0YyAmICgweGZmIDw8ICg4IC0gYikpKSk7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlkbiArPSBpOworCX0gZWxzZSBpZiAoYiA+IDApIHsKKwkJdGMgPSAqY3ArKzsKKwkJaSA9IFNQUklOVEYoKGRuLCAiJTF4IiwKKwkJCSAgICAgICAoKCh1X2ludDMyX3QpdGMgPj4gNCkgJiAweDBmKSAmICgweDBmIDw8ICg0IC0gYikpKSk7CisJCWlmIChpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQlkbiArPSBpOworCX0KKwlpID0gU1BSSU5URigoZG4sICIvJWRdIiwgYmxlbikpOworCWlmIChpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJZG4gKz0gaTsKKworCSpjcHAgPSBjcDsKKwlyZXR1cm4oZG4gLSBiZWcpOworfQorCitzdGF0aWMgaW50CitlbmNvZGVfYml0c3JpbmcoY29uc3QgY2hhciAqKmJwLCBjb25zdCBjaGFyICplbmQsIHVuc2lnbmVkIGNoYXIgKipsYWJlbHAsCisJICAgICAgICB1bnNpZ25lZCBjaGFyICoqIGRzdCwgdW5zaWduZWQgY29uc3QgY2hhciAqZW9tKQoreworCWludCBhZnRlcnNsYXNoID0gMDsKKwljb25zdCBjaGFyICpjcCA9ICpicDsKKwl1bnNpZ25lZCBjaGFyICp0cDsKKwljaGFyIGM7CisJY29uc3QgY2hhciAqYmVnX2JsZW47CisJY2hhciAqZW5kX2JsZW4gPSBOVUxMOworCWludCB2YWx1ZSA9IDAsIGNvdW50ID0gMCwgdGJjb3VudCA9IDAsIGJsZW4gPSAwOworCisJYmVnX2JsZW4gPSBlbmRfYmxlbiA9IE5VTEw7CisKKwkvKiBhIGJpdHN0cmluZyBtdXN0IGNvbnRhaW4gYXQgbGVhc3QgMiBjaGFyYWN0ZXJzICovCisJaWYgKGVuZCAtIGNwIDwgMikKKwkJcmV0dXJuKEVJTlZBTCk7CisKKwkvKiBYWFg6IGN1cnJlbnRseSwgb25seSBoZXggc3RyaW5ncyBhcmUgc3VwcG9ydGVkICovCisJaWYgKCpjcCsrICE9ICd4JykKKwkJcmV0dXJuKEVJTlZBTCk7CisJaWYgKCFpc3hkaWdpdCgoKmNwKSAmIDB4ZmYpKSAvKiByZWplY3QgJ1xbeC9CTEVOXScgKi8KKwkJcmV0dXJuKEVJTlZBTCk7CisKKwlmb3IgKHRwID0gKmRzdCArIDE7IGNwIDwgZW5kICYmIHRwIDwgZW9tOyBjcCsrKSB7CisJCXN3aXRjaCgoYyA9ICpjcCkpIHsKKwkJY2FzZSAnXSc6CS8qIGVuZCBvZiB0aGUgYml0c3RyaW5nICovCisJCQlpZiAoYWZ0ZXJzbGFzaCkgeworCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQlibGVuID0gKGludClzdHJ0b2woYmVnX2JsZW4sICZlbmRfYmxlbiwgMTApOworCQkJCWlmICgqZW5kX2JsZW4gIT0gJ10nKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCX0KKwkJCWlmIChjb3VudCkKKwkJCQkqdHArKyA9ICgodmFsdWUgPDwgNCkgJiAweGZmKTsKKwkJCWNwKys7CS8qIHNraXAgJ10nICovCisJCQlnb3RvIGRvbmU7CisJCWNhc2UgJy8nOgorCQkJYWZ0ZXJzbGFzaCA9IDE7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChhZnRlcnNsYXNoKSB7CisJCQkJaWYgKCFpc2RpZ2l0KGMmMHhmZikpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCWlmIChiZWdfYmxlbiA9PSBOVUxMKSB7CisKKwkJCQkJaWYgKGMgPT0gJzAnKSB7CisJCQkJCQkvKiBibGVuIG5ldmVyIGJlZ2luZ3Mgd2l0aCAwICovCisJCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQkJfQorCQkJCQliZWdfYmxlbiA9IGNwOworCQkJCX0KKwkJCX0gZWxzZSB7CisJCQkJaWYgKCFpc3hkaWdpdChjJjB4ZmYpKQorCQkJCQlyZXR1cm4oRUlOVkFMKTsKKwkJCQl2YWx1ZSA8PD0gNDsKKwkJCQl2YWx1ZSArPSBkaWdpdHZhbHVlWyhpbnQpY107CisJCQkJY291bnQgKz0gNDsKKwkJCQl0YmNvdW50ICs9IDQ7CisJCQkJaWYgKHRiY291bnQgPiAyNTYpCisJCQkJCXJldHVybihFSU5WQUwpOworCQkJCWlmIChjb3VudCA9PSA4KSB7CisJCQkJCSp0cCsrID0gdmFsdWU7CisJCQkJCWNvdW50ID0gMDsKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCX0KKyAgZG9uZToKKwlpZiAoY3AgPj0gZW5kIHx8IHRwID49IGVvbSkKKwkJcmV0dXJuKEVNU0dTSVpFKTsKKworCS8qCisJICogYml0IGxlbmd0aCB2YWxpZGF0aW9uOgorCSAqIElmIGEgPGxlbmd0aD4gaXMgcHJlc2VudCwgdGhlIG51bWJlciBvZiBkaWdpdHMgaW4gdGhlIDxiaXQtZGF0YT4KKwkgKiBNVVNUIGJlIGp1c3Qgc3VmZmljaWVudCB0byBjb250YWluIHRoZSBudW1iZXIgb2YgYml0cyBzcGVjaWZpZWQKKwkgKiBieSB0aGUgPGxlbmd0aD4uIElmIHRoZXJlIGFyZSBpbnNpZ25pZmljYW50IGJpdHMgaW4gYSBmaW5hbAorCSAqIGhleGFkZWNpbWFsIG9yIG9jdGFsIGRpZ2l0LCB0aGV5IE1VU1QgYmUgemVyby4KKwkgKiBSRkMgMjY3MywgU2VjdGlvbiAzLjIuCisJICovCisJaWYgKGJsZW4gPiAwKSB7CisJCWludCB0cmFpbGxlbjsKKworCQlpZiAoKChibGVuICsgMykgJiB+MykgIT0gdGJjb3VudCkKKwkJCXJldHVybihFSU5WQUwpOworCQl0cmFpbGxlbiA9IHRiY291bnQgLSBibGVuOyAvKiBiZXR3ZWVuIDAgYW5kIDMgKi8KKwkJaWYgKCgodmFsdWUgPDwgKDggLSB0cmFpbGxlbikpICYgMHhmZikgIT0gMCkKKwkJCXJldHVybihFSU5WQUwpOworCX0KKwllbHNlCisJCWJsZW4gPSB0YmNvdW50OworCWlmIChibGVuID09IDI1NikKKwkJYmxlbiA9IDA7CisKKwkvKiBlbmNvZGUgdGhlIHR5cGUgYW5kIHRoZSBzaWduaWZpY2FudCBiaXQgZmllbGRzICovCisJKipsYWJlbHAgPSBETlNfTEFCRUxUWVBFX0JJVFNUUklORzsKKwkqKmRzdCA9IGJsZW47CisKKwkqYnAgPSBjcDsKKwkqZHN0ID0gdHA7CisKKwlyZXR1cm4oMCk7Cit9CisKK3N0YXRpYyBpbnQKK2xhYmVsbGVuKGNvbnN0IHVfY2hhciAqbHApCit7CisJaW50IGJpdGxlbjsKKwl1X2NoYXIgbCA9ICpscDsKKworCWlmICgobCAmIE5TX0NNUFJTRkxHUykgPT0gTlNfQ01QUlNGTEdTKSB7CisJCS8qIHNob3VsZCBiZSBhdm9pZGVkIGJ5IHRoZSBjYWxsZXIgKi8KKwkJcmV0dXJuKC0xKTsKKwl9CisKKwlpZiAoKGwgJiBOU19DTVBSU0ZMR1MpID09IE5TX1RZUEVfRUxUKSB7CisJCWlmIChsID09IEROU19MQUJFTFRZUEVfQklUU1RSSU5HKSB7CisJCQlpZiAoKGJpdGxlbiA9ICoobHAgKyAxKSkgPT0gMCkKKwkJCQliaXRsZW4gPSAyNTY7CisJCQlyZXR1cm4oKGJpdGxlbiArIDcgKSAvIDggKyAxKTsKKwkJfQorCQlyZXR1cm4oLTEpOwkvKiB1bmtud29uIEVMVCAqLworCX0KKwlyZXR1cm4obCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX25ldGludC5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19uZXRpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYjI5NjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc19uZXRpbnQuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkTmV0QlNEOiBuc19uZXRpbnQuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjE5OjAwIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX25ldGludC5jLHYgMS4xLjIwNi4xIDIwMDQvMDMvMDkgMDg6MzM6NDQgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBuc19uZXRpbnQuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjE5OjAwIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworLyogUHVibGljLiAqLworCit1X2ludDE2X3QKK25zX2dldDE2KGNvbnN0IHVfY2hhciAqc3JjKSB7CisJdV9pbnQgZHN0OworCisJTlNfR0VUMTYoZHN0LCBzcmMpOworCXJldHVybiAoZHN0KTsKK30KKwordV9pbnQzMl90Cituc19nZXQzMihjb25zdCB1X2NoYXIgKnNyYykgeworCXVfbG9uZyBkc3Q7CisKKwlOU19HRVQzMihkc3QsIHNyYyk7CisJcmV0dXJuIChkc3QpOworfQorCit2b2lkCituc19wdXQxNih1X2ludDE2X3Qgc3JjLCB1X2NoYXIgKmRzdCkgeworCU5TX1BVVDE2KHNyYywgZHN0KTsKK30KKwordm9pZAorbnNfcHV0MzIodV9pbnQzMl90IHNyYywgdV9jaGFyICpkc3QpIHsKKwlOU19QVVQzMihzcmMsIGRzdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3BhcnNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmQ5NDg2MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcGFyc2UuYwpAQCAtMCwwICsxLDIwOSBAQAorLyoJJE5ldEJTRDogbnNfcGFyc2UuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NiwxOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3BhcnNlLmMsdiAxLjMuMi4xLjQuMSAyMDA0LzAzLzA5IDA4OjMzOjQ0IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfcGFyc2UuYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogRm9yd2FyZC4gKi8KKworc3RhdGljIHZvaWQJc2V0c2VjdGlvbihuc19tc2cgKm1zZywgbnNfc2VjdCBzZWN0KTsKKworLyogTWFjcm9zLiAqLworCisjZGVmaW5lIFJFVEVSUihlcnIpIGRvIHsgZXJybm8gPSAoZXJyKTsgcmV0dXJuICgtMSk7IH0gd2hpbGUgKC8qTk9UUkVBQ0hFRCovLypDT05TVENPTkQqLzApCisKKy8qIFB1YmxpYy4gKi8KKworLyogVGhlc2UgbmVlZCB0byBiZSBpbiB0aGUgc2FtZSBvcmRlciBhcyB0aGUgbnJlcy5oOm5zX2ZsYWcgZW51bS4gKi8KK2NvbnN0IHN0cnVjdCBfbnNfZmxhZ2RhdGEgX25zX2ZsYWdkYXRhWzE2XSA9IHsKKwl7IDB4ODAwMCwgMTUgfSwJCS8qIHFyLiAqLworCXsgMHg3ODAwLCAxMSB9LAkJLyogb3Bjb2RlLiAqLworCXsgMHgwNDAwLCAxMCB9LAkJLyogYWEuICovCisJeyAweDAyMDAsIDkgfSwJCS8qIHRjLiAqLworCXsgMHgwMTAwLCA4IH0sCQkvKiByZC4gKi8KKwl7IDB4MDA4MCwgNyB9LAkJLyogcmEuICovCisJeyAweDAwNDAsIDYgfSwJCS8qIHouICovCisJeyAweDAwMjAsIDUgfSwJCS8qIGFkLiAqLworCXsgMHgwMDEwLCA0IH0sCQkvKiBjZC4gKi8KKwl7IDB4MDAwZiwgMCB9LAkJLyogcmNvZGUuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoMS82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICgyLzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDMvNikuICovCisJeyAweDAwMDAsIDAgfSwJCS8qIGV4cGFuc2lvbiAoNC82KS4gKi8KKwl7IDB4MDAwMCwgMCB9LAkJLyogZXhwYW5zaW9uICg1LzYpLiAqLworCXsgMHgwMDAwLCAwIH0sCQkvKiBleHBhbnNpb24gKDYvNikuICovCit9OworCitpbnQgbnNfbXNnX2dldGZsYWcobnNfbXNnIGhhbmRsZSwgaW50IGZsYWcpIHsKKwlyZXR1cm4oKHVfaW50MzJfdCkoKGhhbmRsZSkuX2ZsYWdzICYgX25zX2ZsYWdkYXRhW2ZsYWddLm1hc2spID4+IF9uc19mbGFnZGF0YVtmbGFnXS5zaGlmdCk7Cit9CisKK2ludAorbnNfc2tpcHJyKGNvbnN0IHVfY2hhciAqcHRyLCBjb25zdCB1X2NoYXIgKmVvbSwgbnNfc2VjdCBzZWN0aW9uLCBpbnQgY291bnQpIHsKKwljb25zdCB1X2NoYXIgKm9wdHIgPSBwdHI7CisKKwlmb3IgKDsgY291bnQgPiAwOyBjb3VudC0tKSB7CisJCWludCBiLCByZGxlbmd0aDsKKworCQliID0gZG5fc2tpcG5hbWUocHRyLCBlb20pOworCQlpZiAoYiA8IDApCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlwdHIgKz0gYi8qTmFtZSovICsgTlNfSU5UMTZTWi8qVHlwZSovICsgTlNfSU5UMTZTWi8qQ2xhc3MqLzsKKwkJaWYgKHNlY3Rpb24gIT0gbnNfc19xZCkgeworCQkJaWYgKHB0ciArIE5TX0lOVDMyU1ogKyBOU19JTlQxNlNaID4gZW9tKQorCQkJCVJFVEVSUihFTVNHU0laRSk7CisJCQlwdHIgKz0gTlNfSU5UMzJTWi8qVFRMKi87CisJCQlOU19HRVQxNihyZGxlbmd0aCwgcHRyKTsKKwkJCXB0ciArPSByZGxlbmd0aC8qUkRhdGEqLzsKKwkJfQorCX0KKwlpZiAocHRyID4gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCXJldHVybiAocHRyIC0gb3B0cik7Cit9CisKK2ludAorbnNfaW5pdHBhcnNlKGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbXNnbGVuLCBuc19tc2cgKmhhbmRsZSkgeworCWNvbnN0IHVfY2hhciAqZW9tID0gbXNnICsgbXNnbGVuOworCWludCBpOworCisJbWVtc2V0KGhhbmRsZSwgMHg1ZSwgc2l6ZW9mICpoYW5kbGUpOworCWhhbmRsZS0+X21zZyA9IG1zZzsKKwloYW5kbGUtPl9lb20gPSBlb207CisJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYoaGFuZGxlLT5faWQsIG1zZyk7CisJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCVJFVEVSUihFTVNHU0laRSk7CisJTlNfR0VUMTYoaGFuZGxlLT5fZmxhZ3MsIG1zZyk7CisJZm9yIChpID0gMDsgaSA8IG5zX3NfbWF4OyBpKyspIHsKKwkJaWYgKG1zZyArIE5TX0lOVDE2U1ogPiBlb20pCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlOU19HRVQxNihoYW5kbGUtPl9jb3VudHNbaV0sIG1zZyk7CisJfQorCWZvciAoaSA9IDA7IGkgPCBuc19zX21heDsgaSsrKQorCQlpZiAoaGFuZGxlLT5fY291bnRzW2ldID09IDApCisJCQloYW5kbGUtPl9zZWN0aW9uc1tpXSA9IE5VTEw7CisJCWVsc2UgeworCQkJaW50IGIgPSBuc19za2lwcnIobXNnLCBlb20sIChuc19zZWN0KWksCisJCQkJCSAgaGFuZGxlLT5fY291bnRzW2ldKTsKKworCQkJaWYgKGIgPCAwKQorCQkJCXJldHVybiAoLTEpOworCQkJaGFuZGxlLT5fc2VjdGlvbnNbaV0gPSBtc2c7CisJCQltc2cgKz0gYjsKKwkJfQorCWlmIChtc2cgIT0gZW9tKQorCQlSRVRFUlIoRU1TR1NJWkUpOworCXNldHNlY3Rpb24oaGFuZGxlLCBuc19zX21heCk7CisJcmV0dXJuICgwKTsKK30KKworaW50Cituc19wYXJzZXJyKG5zX21zZyAqaGFuZGxlLCBuc19zZWN0IHNlY3Rpb24sIGludCBycm51bSwgbnNfcnIgKnJyKSB7CisJaW50IGI7CisKKwkvKiBNYWtlIHNlY3Rpb24gcmlnaHQuICovCisJaWYgKCh1bnNpZ25lZClzZWN0aW9uID49ICh1bnNpZ25lZCluc19zX21heCkKKwkJUkVURVJSKEVOT0RFVik7CisJaWYgKHNlY3Rpb24gIT0gaGFuZGxlLT5fc2VjdCkKKwkJc2V0c2VjdGlvbihoYW5kbGUsIHNlY3Rpb24pOworCisJLyogTWFrZSBycm51bSByaWdodC4gKi8KKwlpZiAocnJudW0gPT0gLTEpCisJCXJybnVtID0gaGFuZGxlLT5fcnJudW07CisJaWYgKHJybnVtIDwgMCB8fCBycm51bSA+PSBoYW5kbGUtPl9jb3VudHNbKGludClzZWN0aW9uXSkKKwkJUkVURVJSKEVOT0RFVik7CisJaWYgKHJybnVtIDwgaGFuZGxlLT5fcnJudW0pCisJCXNldHNlY3Rpb24oaGFuZGxlLCBzZWN0aW9uKTsKKwlpZiAocnJudW0gPiBoYW5kbGUtPl9ycm51bSkgeworCQliID0gbnNfc2tpcHJyKGhhbmRsZS0+X21zZ19wdHIsIGhhbmRsZS0+X2VvbSwgc2VjdGlvbiwKKwkJCSAgICAgIHJybnVtIC0gaGFuZGxlLT5fcnJudW0pOworCisJCWlmIChiIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQloYW5kbGUtPl9tc2dfcHRyICs9IGI7CisJCWhhbmRsZS0+X3JybnVtID0gcnJudW07CisJfQorCisJLyogRG8gdGhlIHBhcnNlLiAqLworCWIgPSBkbl9leHBhbmQoaGFuZGxlLT5fbXNnLCBoYW5kbGUtPl9lb20sCisJCSAgICAgIGhhbmRsZS0+X21zZ19wdHIsIHJyLT5uYW1lLCBOU19NQVhETkFNRSk7CisJaWYgKGIgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwloYW5kbGUtPl9tc2dfcHRyICs9IGI7CisJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyBOU19JTlQxNlNaICsgTlNfSU5UMTZTWiA+IGhhbmRsZS0+X2VvbSkKKwkJUkVURVJSKEVNU0dTSVpFKTsKKwlOU19HRVQxNihyci0+dHlwZSwgaGFuZGxlLT5fbXNnX3B0cik7CisJTlNfR0VUMTYocnItPnJyX2NsYXNzLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwlpZiAoc2VjdGlvbiA9PSBuc19zX3FkKSB7CisJCXJyLT50dGwgPSAwOworCQlyci0+cmRsZW5ndGggPSAwOworCQlyci0+cmRhdGEgPSBOVUxMOworCX0gZWxzZSB7CisJCWlmIChoYW5kbGUtPl9tc2dfcHRyICsgTlNfSU5UMzJTWiArIE5TX0lOVDE2U1ogPiBoYW5kbGUtPl9lb20pCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlOU19HRVQzMihyci0+dHRsLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwkJTlNfR0VUMTYocnItPnJkbGVuZ3RoLCBoYW5kbGUtPl9tc2dfcHRyKTsKKwkJaWYgKGhhbmRsZS0+X21zZ19wdHIgKyByci0+cmRsZW5ndGggPiBoYW5kbGUtPl9lb20pCisJCQlSRVRFUlIoRU1TR1NJWkUpOworCQlyci0+cmRhdGEgPSBoYW5kbGUtPl9tc2dfcHRyOworCQloYW5kbGUtPl9tc2dfcHRyICs9IHJyLT5yZGxlbmd0aDsKKwl9CisJaWYgKCsraGFuZGxlLT5fcnJudW0gPiBoYW5kbGUtPl9jb3VudHNbKGludClzZWN0aW9uXSkKKwkJc2V0c2VjdGlvbihoYW5kbGUsIChuc19zZWN0KSgoaW50KXNlY3Rpb24gKyAxKSk7CisKKwkvKiBBbGwgZG9uZS4gKi8KKwlyZXR1cm4gKDApOworfQorCisvKiBQcml2YXRlLiAqLworCitzdGF0aWMgdm9pZAorc2V0c2VjdGlvbihuc19tc2cgKm1zZywgbnNfc2VjdCBzZWN0KSB7CisJbXNnLT5fc2VjdCA9IHNlY3Q7CisJaWYgKHNlY3QgPT0gbnNfc19tYXgpIHsKKwkJbXNnLT5fcnJudW0gPSAtMTsKKwkJbXNnLT5fbXNnX3B0ciA9IE5VTEw7CisJfSBlbHNlIHsKKwkJbXNnLT5fcnJudW0gPSAwOworCQltc2ctPl9tc2dfcHRyID0gbXNnLT5fc2VjdGlvbnNbKGludClzZWN0XTsKKwl9Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3ByaW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzQ2NWU2MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfcHJpbnQuYwpAQCAtMCwwICsxLDkxNSBAQAorLyoJJE5ldEJTRDogbnNfcHJpbnQuYyx2IDEuNSAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWZuZGVmIGxpbnQKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IG5zX3ByaW50LmMsdiAxLjMuMi4xLjQuNSAyMDA0LzA3LzI4IDIwOjE2OjQ1IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfcHJpbnQuYyx2IDEuNSAyMDA0LzExLzA3IDAyOjE5OjQ5IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisvKiBJbXBvcnQuICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxpc2MvYXNzZXJ0aW9ucy5oPgorI2luY2x1ZGUgPGlzYy9kc3QuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxhc3NlcnQuaD4KKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQorI2VuZGlmCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lCU1JTih4LHkpCSgoeCk8KHkpPyh4KTooeSkpCisjZW5kaWYKKworLyogRm9yd2FyZC4gKi8KKworc3RhdGljIHNpemVfdAlwcnVuZV9vcmlnaW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3JpZ2luKTsKK3N0YXRpYyBpbnQJY2hhcnN0cihjb25zdCB1X2NoYXIgKnJkYXRhLCBjb25zdCB1X2NoYXIgKmVkYXRhLAorCQkJY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIGludAlhZGRuYW1lKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAorCQkJY29uc3QgdV9jaGFyICoqcCwgY29uc3QgY2hhciAqb3JpZ2luLAorCQkJY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pOworc3RhdGljIHZvaWQJYWRkbGVuKHNpemVfdCBsZW4sIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKK3N0YXRpYyBpbnQJYWRkc3RyKGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IGxlbiwKKwkJICAgICAgIGNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKTsKK3N0YXRpYyBpbnQJYWRkdGFiKHNpemVfdCBsZW4sIHNpemVfdCB0YXJnZXQsIGludCBzcGFjZWQsCisJCSAgICAgICBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CisKKy8qIE1hY3Jvcy4gKi8KKworI2RlZmluZQlUKHgpIFwKKwlkbyB7IFwKKwkJaWYgKCh4KSA8IDApIFwKKwkJCXJldHVybiAoLTEpOyBcCisJfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKy8qIFB1YmxpYy4gKi8KKworLyoKKyAqIGludAorICogbnNfc3ByaW50cnIoaGFuZGxlLCByciwgbmFtZV9jdHgsIG9yaWdpbiwgYnVmLCBidWZsZW4pCisgKglDb252ZXJ0IGFuIFJSIHRvIHByZXNlbnRhdGlvbiBmb3JtYXQuCisgKiByZXR1cm46CisgKglOdW1iZXIgb2YgY2hhcmFjdGVycyB3cml0dGVuIHRvIGJ1Ziwgb3IgLTEgKGNoZWNrIGVycm5vKS4KKyAqLworaW50Cituc19zcHJpbnRycihjb25zdCBuc19tc2cgKmhhbmRsZSwgY29uc3QgbnNfcnIgKnJyLAorCSAgICBjb25zdCBjaGFyICpuYW1lX2N0eCwgY29uc3QgY2hhciAqb3JpZ2luLAorCSAgICBjaGFyICpidWYsIHNpemVfdCBidWZsZW4pCit7CisJaW50IG47CisKKwluID0gbnNfc3ByaW50cnJmKG5zX21zZ19iYXNlKCpoYW5kbGUpLCBuc19tc2dfc2l6ZSgqaGFuZGxlKSwKKwkJCSBuc19ycl9uYW1lKCpyciksIG5zX3JyX2NsYXNzKCpyciksIG5zX3JyX3R5cGUoKnJyKSwKKwkJCSBuc19ycl90dGwoKnJyKSwgbnNfcnJfcmRhdGEoKnJyKSwgbnNfcnJfcmRsZW4oKnJyKSwKKwkJCSBuYW1lX2N0eCwgb3JpZ2luLCBidWYsIGJ1Zmxlbik7CisJcmV0dXJuIChuKTsKK30KKworLyoKKyAqIGludAorICogbnNfc3ByaW50cnJmKG1zZywgbXNnbGVuLCBuYW1lLCBjbGFzcywgdHlwZSwgdHRsLCByZGF0YSwgcmRsZW4sCisgKgkgICAgICAgbmFtZV9jdHgsIG9yaWdpbiwgYnVmLCBidWZsZW4pCisgKglDb252ZXJ0IHRoZSBmaWVsZHMgb2YgYW4gUlIgaW50byBwcmVzZW50YXRpb24gZm9ybWF0LgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgd3JpdHRlbiB0byBidWYsIG9yIC0xIChjaGVjayBlcnJubykuCisgKi8KK2ludAorbnNfc3ByaW50cnJmKGNvbnN0IHVfY2hhciAqbXNnLCBzaXplX3QgbXNnbGVuLAorCSAgICBjb25zdCBjaGFyICpuYW1lLCBuc19jbGFzcyBjbGFzcywgbnNfdHlwZSB0eXBlLAorCSAgICB1X2xvbmcgdHRsLCBjb25zdCB1X2NoYXIgKnJkYXRhLCBzaXplX3QgcmRsZW4sCisJICAgIGNvbnN0IGNoYXIgKm5hbWVfY3R4LCBjb25zdCBjaGFyICpvcmlnaW4sCisJICAgIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK3sKKwljb25zdCBjaGFyICpvYnVmID0gYnVmOworCWNvbnN0IHVfY2hhciAqZWRhdGEgPSByZGF0YSArIHJkbGVuOworCWludCBzcGFjZWQgPSAwOworCisJY29uc3QgY2hhciAqY29tbWVudDsKKwljaGFyIHRtcFsxMDBdOworCWludCBsZW4sIHg7CisKKwkvKgorCSAqIE93bmVyLgorCSAqLworCWlmIChuYW1lX2N0eCAhPSBOVUxMICYmIG5zX3NhbWVuYW1lKG5hbWVfY3R4LCBuYW1lKSA9PSAxKSB7CisJCVQoYWRkc3RyKCJcdFx0XHQiLCAoc2l6ZV90KTMsICZidWYsICZidWZsZW4pKTsKKwl9IGVsc2UgeworCQlsZW4gPSBwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKTsKKwkJaWYgKCpuYW1lID09ICdcMCcpIHsKKwkJCWdvdG8gcm9vdDsKKwkJfSBlbHNlIGlmIChsZW4gPT0gMCkgeworCQkJVChhZGRzdHIoIkBcdFx0XHQiLCAoc2l6ZV90KTQsICZidWYsICZidWZsZW4pKTsKKwkJfSBlbHNlIHsKKwkJCVQoYWRkc3RyKG5hbWUsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkvKiBPcmlnaW4gbm90IHVzZWQgb3Igbm90IHJvb3QsIGFuZCBubyB0cmFpbGluZyBkb3Q/ICovCisJCQlpZiAoKChvcmlnaW4gPT0gTlVMTCB8fCBvcmlnaW5bMF0gPT0gJ1wwJykgfHwKKwkJCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgorCQkJICAgIG5hbWVbbGVuXSA9PSAnXDAnKSkgJiYgbmFtZVtsZW4gLSAxXSAhPSAnLicpIHsKKyByb290OgorCQkJCVQoYWRkc3RyKCIuIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCQkJbGVuKys7CisJCQl9CisJCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgMjQsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJfQorCisJLyoKKwkgKiBUVEwsIENsYXNzLCBUeXBlLgorCSAqLworCVQoeCA9IG5zX2Zvcm1hdF90dGwodHRsLCBidWYsIGJ1ZmxlbikpOworCWFkZGxlbigoc2l6ZV90KXgsICZidWYsICZidWZsZW4pOworCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAlcyAlcyIsIHBfY2xhc3MoY2xhc3MpLCBwX3R5cGUodHlwZSkpKTsKKwlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdCkoeCArIGxlbiksIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJLyoKKwkgKiBSRGF0YS4KKwkgKi8KKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIG5zX3RfYToKKwkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU5BRERSU1opCisJCQlnb3RvIGZvcm1lcnI7CisJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgYnVmbGVuKTsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfY25hbWU6CisJY2FzZSBuc190X21iOgorCWNhc2UgbnNfdF9tZzoKKwljYXNlIG5zX3RfbXI6CisJY2FzZSBuc190X25zOgorCWNhc2UgbnNfdF9wdHI6CisJY2FzZSBuc190X2RuYW1lOgorCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCisJY2FzZSBuc190X2hpbmZvOgorCWNhc2UgbnNfdF9pc2RuOgorCQkvKiBGaXJzdCB3b3JkLiAqLworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisKKwkJLyogU2Vjb25kIHdvcmQsIG9wdGlvbmFsIGluIElTRE4gcmVjb3Jkcy4gKi8KKwkJaWYgKHR5cGUgPT0gbnNfdF9pc2RuICYmIHJkYXRhID09IGVkYXRhKQorCQkJYnJlYWs7CisKKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3Rfc29hOiB7CisJCXVfbG9uZyB0OworCisJCS8qIFNlcnZlciBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogQWRtaW5pc3RyYXRvciBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgKFxuIiwgKHNpemVfdCkzLCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJaWYgKChlZGF0YSAtIHJkYXRhKSAhPSA1Kk5TX0lOVDMyU1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogU2VyaWFsIG51bWJlci4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVsdSIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHNlcmlhbFxuIiwgKHNpemVfdCk5LCAmYnVmLCAmYnVmbGVuKSk7CisJCXNwYWNlZCA9IDA7CisKKwkJLyogUmVmcmVzaCBpbnRlcnZhbC4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHJlZnJlc2hcbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBSZXRyeSBpbnRlcnZhbC4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCVQoYWRkc3RyKCJcdFx0XHRcdFx0IiwgKHNpemVfdCk1LCAmYnVmLCAmYnVmbGVuKSk7CisJCVQobGVuID0gbnNfZm9ybWF0X3R0bCh0LCBidWYsIGJ1ZmxlbikpOworCQlhZGRsZW4oKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IHJldHJ5XG4iLCAoc2l6ZV90KTgsICZidWYsICZidWZsZW4pKTsKKwkJc3BhY2VkID0gMDsKKworCQkvKiBFeHBpcnkuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlUKGFkZHN0cigiXHRcdFx0XHRcdCIsIChzaXplX3QpNSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGxlbiA9IG5zX2Zvcm1hdF90dGwodCwgYnVmLCBidWZsZW4pKTsKKwkJYWRkbGVuKChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKTsKKwkJVChzcGFjZWQgPSBhZGR0YWIoKHNpemVfdClsZW4sIChzaXplX3QpMTYsIHNwYWNlZCwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiOyBleHBpcnlcbiIsIChzaXplX3QpOSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlzcGFjZWQgPSAwOworCisJCS8qIE1pbmltdW0gVFRMLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJVChhZGRzdHIoIlx0XHRcdFx0XHQiLCAoc2l6ZV90KTUsICZidWYsICZidWZsZW4pKTsKKwkJVChsZW4gPSBuc19mb3JtYXRfdHRsKHQsIGJ1ZiwgYnVmbGVuKSk7CisJCWFkZGxlbigoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1Zmxlbik7CisJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKHNwYWNlZCA9IGFkZHRhYigoc2l6ZV90KWxlbiwgKHNpemVfdCkxNiwgc3BhY2VkLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCI7IG1pbmltdW1cbiIsIChzaXplX3QpMTAsICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X214OgorCWNhc2UgbnNfdF9hZnNkYjoKKwljYXNlIG5zX3RfcnQ6IHsKKwkJdV9pbnQgdDsKKworCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogUHJpb3JpdHkuICovCisJCXQgPSBuc19nZXQxNihyZGF0YSk7CisJCXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFRhcmdldC4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfcHg6IHsKKwkJdV9pbnQgdDsKKworCQlpZiAocmRsZW4gPCAoc2l6ZV90KU5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogUHJpb3JpdHkuICovCisJCXQgPSBuc19nZXQxNihyZGF0YSk7CisJCXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICIsIHQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIE5hbWUxLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTmFtZTIuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3gyNToKKwkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobGVuID09IDApCisJCQlnb3RvIGZvcm1lcnI7CisJCXJkYXRhICs9IGxlbjsKKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfdHh0OgorCQl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQkJVChsZW4gPSBjaGFyc3RyKHJkYXRhLCBlZGF0YSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJaWYgKGxlbiA9PSAwKQorCQkJCWdvdG8gZm9ybWVycjsKKwkJCXJkYXRhICs9IGxlbjsKKwkJCWlmIChyZGF0YSA8IGVkYXRhKQorCQkJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIG5zX3RfbnNhcDogeworCQljaGFyIHRbMisyNTUqM107CisKKwkJKHZvaWQpIGluZXRfbnNhcF9udG9hKChpbnQpcmRsZW4sIHJkYXRhLCB0KTsKKwkJVChhZGRzdHIodCwgc3RybGVuKHQpLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfYWFhYToKKwkJaWYgKHJkbGVuICE9IChzaXplX3QpTlNfSU42QUREUlNaKQorCQkJZ290byBmb3JtZXJyOworCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCByZGF0YSwgYnVmLCBidWZsZW4pOworCQlhZGRsZW4oc3RybGVuKGJ1ZiksICZidWYsICZidWZsZW4pOworCQlicmVhazsKKworCWNhc2UgbnNfdF9sb2M6IHsKKwkJY2hhciB0WzI1NV07CisKKwkJLyogWFhYIHByb3RvY29sIGZvcm1hdCBjaGVja2luZz8gKi8KKwkJKHZvaWQpIGxvY19udG9hKHJkYXRhLCB0KTsKKwkJVChhZGRzdHIodCwgc3RybGVuKHQpLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfbmFwdHI6IHsKKwkJdV9pbnQgb3JkZXIsIHByZWZlcmVuY2U7CisJCWNoYXIgdFs1MF07CisKKwkJaWYgKHJkbGVuIDwgMlUqTlNfSU5UMTZTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBPcmRlciwgUHJlY2VkZW5jZS4gKi8KKwkJb3JkZXIgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXByZWZlcmVuY2UgPSBuc19nZXQxNihyZGF0YSk7CXJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHQsICIldSAldSAiLCBvcmRlciwgcHJlZmVyZW5jZSkpOworCQlUKGFkZHN0cih0LCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIEZsYWdzLiAqLworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNlcnZpY2UuICovCisJCVQobGVuID0gY2hhcnN0cihyZGF0YSwgZWRhdGEsICZidWYsICZidWZsZW4pKTsKKwkJaWYgKGxlbiA9PSAwKQorCQkJZ290byBmb3JtZXJyOworCQlyZGF0YSArPSBsZW47CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogUmVnZXhwLiAqLworCQlUKGxlbiA9IGNoYXJzdHIocmRhdGEsIGVkYXRhLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsZW4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWlmIChsZW4gPT0gMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJcmRhdGEgKz0gbGVuOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNlcnZlci4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X3NydjogeworCQl1X2ludCBwcmlvcml0eSwgd2VpZ2h0LCBwb3J0OworCQljaGFyIHRbNTBdOworCisJCWlmIChyZGxlbiA8IDNVKk5TX0lOVDE2U1opCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogUHJpb3JpdHksIFdlaWdodCwgUG9ydC4gKi8KKwkJcHJpb3JpdHkgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQl3ZWlnaHQgICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCXBvcnQgICAgID0gbnNfZ2V0MTYocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMTZTWjsKKwkJbGVuID0gU1BSSU5URigodCwgIiV1ICV1ICV1ICIsIHByaW9yaXR5LCB3ZWlnaHQsIHBvcnQpKTsKKwkJVChhZGRzdHIodCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTZXJ2ZXIuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9taW5mbzoKKwljYXNlIG5zX3RfcnA6CisJCS8qIE5hbWUxLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisJCVQoYWRkc3RyKCIgIiwgKHNpemVfdCkxLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTmFtZTIuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKworCWNhc2UgbnNfdF93a3M6IHsKKwkJaW50IG4sIGxjbnQ7CisKKwkJaWYgKHJkbGVuIDwgMVUgKyBOU19JTlQzMlNaKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIEFkZHJlc3MuICovCisJCSh2b2lkKSBpbmV0X250b3AoQUZfSU5FVCwgcmRhdGEsIGJ1ZiwgYnVmbGVuKTsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJcmRhdGEgKz0gTlNfSU5BRERSU1o7CisKKwkJLyogUHJvdG9jb2wuICovCisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiAldSAoICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhICs9IE5TX0lOVDhTWjsKKworCQkvKiBCaXQgbWFwLiAqLworCQluID0gMDsKKwkJbGNudCA9IDA7CisJCXdoaWxlIChyZGF0YSA8IGVkYXRhKSB7CisJCQl1X2ludCBjID0gKnJkYXRhKys7CisJCQlkbyB7CisJCQkJaWYgKGMgJiAwMjAwKSB7CisJCQkJCWlmIChsY250ID09IDApIHsKKwkJCQkJCVQoYWRkc3RyKCJcblx0XHRcdFx0IiwgKHNpemVfdCk1LAorCQkJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQkJCQlsY250ID0gMTA7CisJCQkJCQlzcGFjZWQgPSAwOworCQkJCQl9CisJCQkJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsIG4pKTsKKwkJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJCQlsY250LS07CisJCQkJfQorCQkJCWMgPDw9IDE7CisJCQl9IHdoaWxlICgrK24gJiAwNyk7CisJCX0KKwkJVChhZGRzdHIoIikiLCAoc2l6ZV90KTEsICZidWYsICZidWZsZW4pKTsKKworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2tleTogeworCQljaGFyIGJhc2U2NF9rZXlbTlNfTUQ1UlNBX01BWF9CQVNFNjRdOworCQl1X2ludCBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSwga2V5X2lkOworCQljb25zdCBjaGFyICpsZWFkZXI7CisJCWludCBuOworCisJCWlmIChyZGxlbiA8IDBVICsgTlNfSU5UMTZTWiArIE5TX0lOVDhTWiArIE5TX0lOVDhTWikKKwkJCWdvdG8gZm9ybWVycjsKKworCQkvKiBLZXkgZmxhZ3MsIFByb3RvY29sLCBBbGdvcml0aG0uICovCisjaWZuZGVmIF9MSUJDCisJCWtleV9pZCA9IGRzdF9zX2Ruc19rZXlfaWQocmRhdGEsIGVkYXRhLXJkYXRhKTsKKyNlbHNlCisJCWtleV9pZCA9IDA7CisjZW5kaWYKKwkJa2V5ZmxhZ3MgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlwcm90b2NvbCA9ICpyZGF0YSsrOworCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiMHglMDR4ICV1ICV1IiwKKwkJCSAgICAgICBrZXlmbGFncywgcHJvdG9jb2wsIGFsZ29yaXRobSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogUHVibGljIGtleSBkYXRhLiAqLworCQlsZW4gPSBiNjRfbnRvcChyZGF0YSwgKHNpemVfdCkoZWRhdGEgLSByZGF0YSksCisJCQkgICAgICAgYmFzZTY0X2tleSwgc2l6ZW9mIGJhc2U2NF9rZXkpOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJaWYgKGxlbiA+IDE1KSB7CisJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJCWxlYWRlciA9ICJcblx0XHQiOworCQkJc3BhY2VkID0gMDsKKwkJfSBlbHNlCisJCQlsZWFkZXIgPSAiICI7CisJCWZvciAobiA9IDA7IG4gPCBsZW47IG4gKz0gNDgpIHsKKwkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksICZidWYsICZidWZsZW4pKTsKKwkJCVQoYWRkc3RyKGJhc2U2NF9rZXkgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCisJCQkJICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlpZiAobGVuID4gMTUpCisJCQlUKGFkZHN0cigiICkiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJbiA9IFNQUklOVEYoKHRtcCwgIiA7IGtleV90YWc9ICV1Iiwga2V5X2lkKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdCluLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9zaWc6IHsKKwkJY2hhciBiYXNlNjRfa2V5W05TX01ENVJTQV9NQVhfQkFTRTY0XTsKKwkJdV9pbnQgdHlwLCBhbGdvcml0aG0sIGxhYmVscywgZm9vdHByaW50OworCQljb25zdCBjaGFyICpsZWFkZXI7CisJCXVfbG9uZyB0OworCQlpbnQgbjsKKworCQlpZiAocmRsZW4gPCAyMlUpCisJCQlnb3RvIGZvcm1lcnI7CisKKwkJLyogVHlwZSBjb3ZlcmVkLCBBbGdvcml0aG0sIExhYmVsIGNvdW50LCBPcmlnaW5hbCBUVEwuICovCisJICAgICAgICB0eXAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlhbGdvcml0aG0gPSAqcmRhdGErKzsKKwkJbGFiZWxzID0gKnJkYXRhKys7CisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAlZCAlZCAlbHUgIiwKKwkJCSAgICAgICBwX3R5cGUoKGludCl0eXApLCBhbGdvcml0aG0sIGxhYmVscywgdCkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCWlmIChsYWJlbHMgPiAodV9pbnQpZG5fY291bnRfbGFiZWxzKG5hbWUpKQorCQkJZ290byBmb3JtZXJyOworCisJCS8qIFNpZ25hdHVyZSBleHBpcnkuICovCisJCXQgPSBuc19nZXQzMihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQzMlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIlcyAiLCBwX3NlY3N0b2RhdGUodCkpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFRpbWUgc2lnbmVkLiAqLworCQl0ID0gbnNfZ2V0MzIocmRhdGEpOyAgcmRhdGEgKz0gTlNfSU5UMzJTWjsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXMgIiwgcF9zZWNzdG9kYXRlKHQpKSk7CisJCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTaWduYXR1cmUgRm9vdHByaW50LiAqLworCQlmb290cHJpbnQgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlsZW4gPSBTUFJJTlRGKCh0bXAsICIldSAiLCBmb290cHJpbnQpKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIFNpZ25lcidzIG5hbWUuICovCisJCVQoYWRkbmFtZShtc2csIG1zZ2xlbiwgJnJkYXRhLCBvcmlnaW4sICZidWYsICZidWZsZW4pKTsKKworCQkvKiBTaWduYXR1cmUuICovCisJCWxlbiA9IGI2NF9udG9wKHJkYXRhLCAoc2l6ZV90KShlZGF0YSAtIHJkYXRhKSwKKwkJCSAgICAgICBiYXNlNjRfa2V5LCBzaXplb2YgYmFzZTY0X2tleSk7CisJCWlmIChsZW4gPiAxNSkgeworCQkJVChhZGRzdHIoIiAoIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCQlsZWFkZXIgPSAiXG5cdFx0IjsKKwkJCXNwYWNlZCA9IDA7CisJCX0gZWxzZQorCQkJbGVhZGVyID0gIiAiOworCQlpZiAobGVuIDwgMCkKKwkJCWdvdG8gZm9ybWVycjsKKwkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJVChhZGRzdHIobGVhZGVyLCBzdHJsZW4obGVhZGVyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJVChhZGRzdHIoYmFzZTY0X2tleSArIG4sIChzaXplX3QpTUlOKGxlbiAtIG4sIDQ4KSwKKwkJCQkgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWlmIChsZW4gPiAxNSkKKwkJCVQoYWRkc3RyKCIgKSIsIChzaXplX3QpMiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X254dDogeworCQlpbnQgbiwgYzsKKworCQkvKiBOZXh0IGRvbWFpbiBuYW1lLiAqLworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogVHlwZSBiaXQgbWFwLiAqLworCQluID0gZWRhdGEgLSByZGF0YTsKKwkJZm9yIChjID0gMDsgYyA8IG4qODsgYysrKQorCQkJaWYgKE5TX05YVF9CSVRfSVNTRVQoYywgcmRhdGEpKSB7CisJCQkJbGVuID0gU1BSSU5URigodG1wLCAiICVzIiwgcF90eXBlKGMpKSk7CisJCQkJVChhZGRzdHIodG1wLCAoc2l6ZV90KWxlbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJfQorCQlicmVhazsKKwkgICAgfQorCisJY2FzZSBuc190X2NlcnQ6IHsKKwkJdV9pbnQgY190eXBlLCBrZXlfdGFnLCBhbGc7CisJCWludCBuOworCQl1bnNpZ25lZCBpbnQgc2l6OworCQljaGFyIGJhc2U2NF9jZXJ0WzgxOTJdLCB0bXAxWzQwXTsKKwkJY29uc3QgY2hhciAqbGVhZGVyOworCisJCWNfdHlwZSAgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWtleV90YWcgPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWFsZyA9ICh1X2ludCkgKnJkYXRhKys7CisKKwkJbGVuID0gU1BSSU5URigodG1wMSwgIiVkICVkICVkICIsIGNfdHlwZSwga2V5X3RhZywgYWxnKSk7CisJCVQoYWRkc3RyKHRtcDEsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXNpeiA9IChlZGF0YS1yZGF0YSkqNC8zICsgNDsgLyogIis0IiBhY2NvdW50cyBmb3IgdHJhaWxpbmcgXDAgKi8KKwkJaWYgKHNpeiA+IHNpemVvZihiYXNlNjRfY2VydCkgKiAzLzQpIHsKKwkJCWNvbnN0IGNoYXIgKnN0ciA9ICJyZWNvcmQgdG9vIGxvbmcgdG8gcHJpbnQiOworCQkJVChhZGRzdHIoc3RyLCBzdHJsZW4oc3RyKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQl9CisJCWVsc2UgeworCQkJbGVuID0gYjY0X250b3AocmRhdGEsIChzaXplX3QpKGVkYXRhLXJkYXRhKSwKKwkJCSAgICBiYXNlNjRfY2VydCwgc2l6KTsKKworCQkJaWYgKGxlbiA8IDApCisJCQkJZ290byBmb3JtZXJyOworCQkJZWxzZSBpZiAobGVuID4gMTUpIHsKKwkJCQlUKGFkZHN0cigiICgiLCAoc2l6ZV90KTIsICZidWYsICZidWZsZW4pKTsKKwkJCQlsZWFkZXIgPSAiXG5cdFx0IjsKKwkJCQlzcGFjZWQgPSAwOworCQkJfQorCQkJZWxzZQorCQkJCWxlYWRlciA9ICIgIjsKKworCQkJZm9yIChuID0gMDsgbiA8IGxlbjsgbiArPSA0OCkgeworCQkJCVQoYWRkc3RyKGxlYWRlciwgc3RybGVuKGxlYWRlciksCisJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQkJVChhZGRzdHIoYmFzZTY0X2NlcnQgKyBuLCAoc2l6ZV90KU1JTihsZW4gLSBuLCA0OCksCisJCQkJCSAmYnVmLCAmYnVmbGVuKSk7CisJCQl9CisJCQlpZiAobGVuID4gMTUpCisJCQkJVChhZGRzdHIoIiApIiwgKHNpemVfdCkyLCAmYnVmLCAmYnVmbGVuKSk7CisJCX0KKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF90a2V5OiB7CisJCS8qIEtKRCAtIG5lZWQgdG8gY29tcGxldGUgdGhpcyAqLworCQl1X2xvbmcgdDsKKwkJaW50IG1vZGUsIGVyciwga2V5c2l6ZTsKKworCQkvKiBBbGdvcml0aG0gbmFtZS4gKi8KKwkJVChhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCisJCS8qIEluY2VwdGlvbi4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogRXhwZXJhdGlvbi4gKi8KKwkJdCA9IG5zX2dldDMyKHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDMyU1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVzICIsIHBfc2Vjc3RvZGF0ZSh0KSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogTW9kZSAsIEVycm9yLCBLZXkgU2l6ZS4gKi8KKwkJLyogUHJpb3JpdHksIFdlaWdodCwgUG9ydC4gKi8KKwkJbW9kZSA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWVyciAgPSBuc19nZXQxNihyZGF0YSk7ICByZGF0YSArPSBOU19JTlQxNlNaOworCQlrZXlzaXplICA9IG5zX2dldDE2KHJkYXRhKTsgIHJkYXRhICs9IE5TX0lOVDE2U1o7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiV1ICV1ICV1ICIsIG1vZGUsIGVyciwga2V5c2l6ZSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJLyogWFhYIG5lZWQgdG8gZHVtcCBrZXksIHByaW50IG90aGVyZGF0YSBsZW5ndGggJiBvdGhlciBkYXRhICovCisJCWJyZWFrOworCSAgICB9CisKKwljYXNlIG5zX3RfdHNpZzogeworCQkvKiBCRVcgLSBuZWVkIHRvIGNvbXBsZXRlIHRoaXMgKi8KKwkJaW50IG47CisKKwkJVChsZW4gPSBhZGRuYW1lKG1zZywgbXNnbGVuLCAmcmRhdGEsIG9yaWdpbiwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlyZGF0YSArPSA4OyAvKiB0aW1lICovCisJCW4gPSBuc19nZXQxNihyZGF0YSk7IHJkYXRhICs9IElOVDE2U1o7CisJCXJkYXRhICs9IG47IC8qIHNpZyAqLworCQluID0gbnNfZ2V0MTYocmRhdGEpOyByZGF0YSArPSBJTlQxNlNaOyAvKiBvcmlnaW5hbCBpZCAqLworCQlzcHJpbnRmKGJ1ZiwgIiVkIiwgbnNfZ2V0MTYocmRhdGEpKTsKKwkJcmRhdGEgKz0gSU5UMTZTWjsKKwkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9hNjogeworCQlzdHJ1Y3QgaW42X2FkZHIgYTsKKwkJaW50IHBieXRlLCBwYml0OworCisJCS8qIHByZWZpeCBsZW5ndGggKi8KKwkJaWYgKHJkbGVuID09IDBVKSBnb3RvIGZvcm1lcnI7CisJCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkICIsICpyZGF0YSkpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCXBiaXQgPSAqcmRhdGE7CisJCWlmIChwYml0ID4gMTI4KSBnb3RvIGZvcm1lcnI7CisJCXBieXRlID0gKHBiaXQgJiB+NykgLyA4OworCQlyZGF0YSsrOworCisJCS8qIGFkZHJlc3Mgc3VmZml4OiBwcm92aWRlZCBvbmx5IHdoZW4gcHJlZml4IGxlbiAhPSAxMjggKi8KKwkJaWYgKHBiaXQgPCAxMjgpIHsKKwkJCWlmIChyZGF0YSArIHBieXRlID49IGVkYXRhKSBnb3RvIGZvcm1lcnI7CisJCQltZW1zZXQoJmEsIDAsIHNpemVvZihhKSk7CisJCQltZW1jcHkoJmEuczZfYWRkcltwYnl0ZV0sIHJkYXRhLCBzaXplb2YoYSkgLSBwYnl0ZSk7CisJCQkodm9pZCkgaW5ldF9udG9wKEFGX0lORVQ2LCAmYSwgYnVmLCBidWZsZW4pOworCQkJYWRkbGVuKHN0cmxlbihidWYpLCAmYnVmLCAmYnVmbGVuKTsKKwkJCXJkYXRhICs9IHNpemVvZihhKSAtIHBieXRlOworCQl9CisKKwkJLyogcHJlZml4IG5hbWU6IHByb3ZpZGVkIG9ubHkgd2hlbiBwcmVmaXggbGVuID4gMCAqLworCQlpZiAocGJpdCA9PSAwKQorCQkJYnJlYWs7CisJCWlmIChyZGF0YSA+PSBlZGF0YSkgZ290byBmb3JtZXJyOworCQlUKGFkZHN0cigiICIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlUKGFkZG5hbWUobXNnLCBtc2dsZW4sICZyZGF0YSwgb3JpZ2luLCAmYnVmLCAmYnVmbGVuKSk7CisKKwkJYnJlYWs7CisJICAgIH0KKworCWNhc2UgbnNfdF9vcHQ6IHsKKwkJbGVuID0gU1BSSU5URigodG1wLCAiJXUgYnl0ZXMiLCBjbGFzcykpOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpbGVuLCAmYnVmLCAmYnVmbGVuKSk7CisJCWJyZWFrOworCSAgICB9CisKKwlkZWZhdWx0OgorCQljb21tZW50ID0gInVua25vd24gUlIgdHlwZSI7CisJCWdvdG8gaGV4aWZ5OworCX0KKwlyZXR1cm4gKGJ1ZiAtIG9idWYpOworIGZvcm1lcnI6CisJY29tbWVudCA9ICJSUiBmb3JtYXQgZXJyb3IiOworIGhleGlmeTogeworCWludCBuLCBtOworCWNoYXIgKnA7CisKKwlsZW4gPSBTUFJJTlRGKCh0bXAsICJcXCMgJXR1JXNcdDsgJXMiLCBlZGF0YSAtIHJkYXRhLAorCQkgICAgICAgcmRsZW4gIT0gMCA/ICIgKCIgOiAiIiwgY29tbWVudCkpOworCVQoYWRkc3RyKHRtcCwgKHNpemVfdClsZW4sICZidWYsICZidWZsZW4pKTsKKwl3aGlsZSAocmRhdGEgPCBlZGF0YSkgeworCQlwID0gdG1wOworCQlwICs9IFNQUklOVEYoKHAsICJcblx0IikpOworCQlzcGFjZWQgPSAwOworCQluID0gTUlOKDE2LCBlZGF0YSAtIHJkYXRhKTsKKwkJZm9yIChtID0gMDsgbSA8IG47IG0rKykKKwkJCXAgKz0gU1BSSU5URigocCwgIiUwMnggIiwgcmRhdGFbbV0pKTsKKwkJVChhZGRzdHIodG1wLCAoc2l6ZV90KShwIC0gdG1wKSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQlpZiAobiA8IDE2KSB7CisJCQlUKGFkZHN0cigiKSIsIChzaXplX3QpMSwgJmJ1ZiwgJmJ1ZmxlbikpOworCQkJVChhZGR0YWIoKHNpemVfdCkocCAtIHRtcCArIDEpLCAoc2l6ZV90KTQ4LCBzcGFjZWQsICZidWYsICZidWZsZW4pKTsKKwkJfQorCQlwID0gdG1wOworCQlwICs9IFNQUklOVEYoKHAsICI7ICIpKTsKKwkJZm9yIChtID0gMDsgbSA8IG47IG0rKykKKwkJCSpwKysgPSAoaXNhc2NpaShyZGF0YVttXSkgJiYgaXNwcmludChyZGF0YVttXSkpCisJCQkJPyByZGF0YVttXQorCQkJCTogJy4nOworCQlUKGFkZHN0cih0bXAsIChzaXplX3QpKHAgLSB0bXApLCAmYnVmLCAmYnVmbGVuKSk7CisJCXJkYXRhICs9IG47CisJfQorCXJldHVybiAoYnVmIC0gb2J1Zik7CisgICAgfQorfQorCisvKiBQcml2YXRlLiAqLworCisvKgorICogc2l6ZV90CisgKiBwcnVuZV9vcmlnaW4obmFtZSwgb3JpZ2luKQorICoJRmluZCBvdXQgaWYgdGhlIG5hbWUgaXMgYXQgb3IgdW5kZXIgdGhlIGN1cnJlbnQgb3JpZ2luLgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIGNoYXJhY3RlcnMgaW4gbmFtZSBiZWZvcmUgc3RhcnQgb2Ygb3JpZ2luLAorICoJb3IgbGVuZ3RoIG9mIG5hbWUgaWYgb3JpZ2luIGRvZXMgbm90IG1hdGNoLgorICogbm90ZXM6CisgKglUaGlzIGZ1bmN0aW9uIHNob3VsZCBzaGFyZSBjb2RlIHdpdGggc2FtZWRvbWFpbigpLgorICovCitzdGF0aWMgc2l6ZV90CitwcnVuZV9vcmlnaW4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqb3JpZ2luKSB7CisJY29uc3QgY2hhciAqb25hbWUgPSBuYW1lOworCisJd2hpbGUgKCpuYW1lICE9ICdcMCcpIHsKKwkJaWYgKG9yaWdpbiAhPSBOVUxMICYmIG5zX3NhbWVuYW1lKG5hbWUsIG9yaWdpbikgPT0gMSkKKwkJCXJldHVybiAobmFtZSAtIG9uYW1lIC0gKG5hbWUgPiBvbmFtZSkpOworCQl3aGlsZSAoKm5hbWUgIT0gJ1wwJykgeworCQkJaWYgKCpuYW1lID09ICdcXCcpIHsKKwkJCQluYW1lKys7CisJCQkJLyogWFhYIG5lZWQgdG8gaGFuZGxlIFxubm4gZm9ybS4gKi8KKwkJCQlpZiAoKm5hbWUgPT0gJ1wwJykKKwkJCQkJYnJlYWs7CisJCQl9IGVsc2UgaWYgKCpuYW1lID09ICcuJykgeworCQkJCW5hbWUrKzsKKwkJCQlicmVhazsKKwkJCX0KKwkJCW5hbWUrKzsKKwkJfQorCX0KKwlyZXR1cm4gKG5hbWUgLSBvbmFtZSk7Cit9CisKKy8qCisgKiBpbnQKKyAqIGNoYXJzdHIocmRhdGEsIGVkYXRhLCBidWYsIGJ1ZmxlbikKKyAqCUZvcm1hdCBhIDxjaGFyYWN0ZXItc3RyaW5nPiBpbnRvIHRoZSBwcmVzZW50YXRpb24gYnVmZmVyLgorICogcmV0dXJuOgorICoJTnVtYmVyIG9mIHJkYXRhIG9jdGV0cyBjb25zdW1lZAorICoJMCBmb3IgcHJvdG9jb2wgZm9ybWF0IGVycm9yCisgKgktMSBmb3Igb3V0cHV0IGJ1ZmZlciBlcnJvcgorICogc2lkZSBlZmZlY3RzOgorICoJYnVmZmVyIGlzIGFkdmFuY2VkIG9uIHN1Y2Nlc3MuCisgKi8KK3N0YXRpYyBpbnQKK2NoYXJzdHIoY29uc3QgdV9jaGFyICpyZGF0YSwgY29uc3QgdV9jaGFyICplZGF0YSwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwljb25zdCB1X2NoYXIgKm9kYXRhID0gcmRhdGE7CisJc2l6ZV90IHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKKwljaGFyICpzYXZlX2J1ZiA9ICpidWY7CisKKwlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJZ290byBlbm9zcGM7CisJaWYgKHJkYXRhIDwgZWRhdGEpIHsKKwkJaW50IG4gPSAqcmRhdGE7CisKKwkJaWYgKHJkYXRhICsgMSArIG4gPD0gZWRhdGEpIHsKKwkJCXJkYXRhKys7CisJCQl3aGlsZSAobi0tID4gMCkgeworCQkJCWlmIChzdHJjaHIoIlxuXCJcXCIsICpyZGF0YSkgIT0gTlVMTCkKKwkJCQkJaWYgKGFkZHN0cigiXFwiLCAoc2l6ZV90KTEsIGJ1ZiwgYnVmbGVuKSA8IDApCisJCQkJCQlnb3RvIGVub3NwYzsKKwkJCQlpZiAoYWRkc3RyKChjb25zdCBjaGFyICopcmRhdGEsIChzaXplX3QpMSwKKwkJCQkJICAgYnVmLCBidWZsZW4pIDwgMCkKKwkJCQkJZ290byBlbm9zcGM7CisJCQkJcmRhdGErKzsKKwkJCX0KKwkJfQorCX0KKwlpZiAoYWRkc3RyKCJcIiIsIChzaXplX3QpMSwgYnVmLCBidWZsZW4pIDwgMCkKKwkJZ290byBlbm9zcGM7CisJcmV0dXJuIChyZGF0YSAtIG9kYXRhKTsKKyBlbm9zcGM6CisJZXJybm8gPSBFTk9TUEM7CisJKmJ1ZiA9IHNhdmVfYnVmOworCSpidWZsZW4gPSBzYXZlX2J1ZmxlbjsKKwlyZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorYWRkbmFtZShjb25zdCB1X2NoYXIgKm1zZywgc2l6ZV90IG1zZ2xlbiwKKwljb25zdCB1X2NoYXIgKipwcCwgY29uc3QgY2hhciAqb3JpZ2luLAorCWNoYXIgKipidWYsIHNpemVfdCAqYnVmbGVuKQoreworCXNpemVfdCBuZXdsZW4sIHNhdmVfYnVmbGVuID0gKmJ1ZmxlbjsKKwljaGFyICpzYXZlX2J1ZiA9ICpidWY7CisJaW50IG47CisKKwluID0gZG5fZXhwYW5kKG1zZywgbXNnICsgbXNnbGVuLCAqcHAsICpidWYsIChpbnQpKmJ1Zmxlbik7CisJaWYgKG4gPCAwKQorCQlnb3RvIGVub3NwYzsJLyogR3Vlc3MuICovCisJbmV3bGVuID0gcHJ1bmVfb3JpZ2luKCpidWYsIG9yaWdpbik7CisJaWYgKCoqYnVmID09ICdcMCcpIHsKKwkJZ290byByb290OworCX0gZWxzZSBpZiAobmV3bGVuID09IDBVKSB7CisJCS8qIFVzZSAiQCIgaW5zdGVhZCBvZiBuYW1lLiAqLworCQlpZiAobmV3bGVuICsgMiA+ICpidWZsZW4pCisJCQlnb3RvIGVub3NwYzsgICAgICAgIC8qIE5vIHJvb20gZm9yICJAXDAiLiAqLworCQkoKmJ1ZilbbmV3bGVuKytdID0gJ0AnOworCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7CisJfSBlbHNlIHsKKwkJaWYgKCgob3JpZ2luID09IE5VTEwgfHwgb3JpZ2luWzBdID09ICdcMCcpIHx8CisJCSAgICAob3JpZ2luWzBdICE9ICcuJyAmJiBvcmlnaW5bMV0gIT0gJ1wwJyAmJgorCQkgICAgKCpidWYpW25ld2xlbl0gPT0gJ1wwJykpICYmICgqYnVmKVtuZXdsZW4gLSAxXSAhPSAnLicpIHsKKwkJCS8qIE5vIHRyYWlsaW5nIGRvdC4gKi8KKyByb290OgorCQkJaWYgKG5ld2xlbiArIDIgPiAqYnVmbGVuKQorCQkJCWdvdG8gZW5vc3BjOwkvKiBObyByb29tIGZvciAiLlwwIi4gKi8KKwkJCSgqYnVmKVtuZXdsZW4rK10gPSAnLic7CisJCQkoKmJ1ZilbbmV3bGVuXSA9ICdcMCc7CisJCX0KKwl9CisJKnBwICs9IG47CisJYWRkbGVuKG5ld2xlbiwgYnVmLCBidWZsZW4pOworCSoqYnVmID0gJ1wwJzsKKwlyZXR1cm4gKG5ld2xlbik7CisgZW5vc3BjOgorCWVycm5vID0gRU5PU1BDOworCSpidWYgPSBzYXZlX2J1ZjsKKwkqYnVmbGVuID0gc2F2ZV9idWZsZW47CisJcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyB2b2lkCithZGRsZW4oc2l6ZV90IGxlbiwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwlhc3NlcnQobGVuIDw9ICpidWZsZW4pOworCSpidWYgKz0gbGVuOworCSpidWZsZW4gLT0gbGVuOworfQorCitzdGF0aWMgaW50CithZGRzdHIoY29uc3QgY2hhciAqc3JjLCBzaXplX3QgbGVuLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1ZmxlbikgeworCWlmIChsZW4gPj0gKmJ1ZmxlbikgeworCQllcnJubyA9IEVOT1NQQzsKKwkJcmV0dXJuICgtMSk7CisJfQorCW1lbWNweSgqYnVmLCBzcmMsIGxlbik7CisJYWRkbGVuKGxlbiwgYnVmLCBidWZsZW4pOworCSoqYnVmID0gJ1wwJzsKKwlyZXR1cm4gKDApOworfQorCitzdGF0aWMgaW50CithZGR0YWIoc2l6ZV90IGxlbiwgc2l6ZV90IHRhcmdldCwgaW50IHNwYWNlZCwgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwlzaXplX3Qgc2F2ZV9idWZsZW4gPSAqYnVmbGVuOworCWNoYXIgKnNhdmVfYnVmID0gKmJ1ZjsKKwlpbnQgdDsKKworCWlmIChzcGFjZWQgfHwgbGVuID49IHRhcmdldCAtIDEpIHsKKwkJVChhZGRzdHIoIiAgIiwgKHNpemVfdCkyLCBidWYsIGJ1ZmxlbikpOworCQlzcGFjZWQgPSAxOworCX0gZWxzZSB7CisJCWZvciAodCA9ICh0YXJnZXQgLSBsZW4gLSAxKSAvIDg7IHQgPj0gMDsgdC0tKQorCQkJaWYgKGFkZHN0cigiXHQiLCAoc2l6ZV90KTEsIGJ1ZiwgYnVmbGVuKSA8IDApIHsKKwkJCQkqYnVmbGVuID0gc2F2ZV9idWZsZW47CisJCQkJKmJ1ZiA9IHNhdmVfYnVmOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCQlzcGFjZWQgPSAwOworCX0KKwlyZXR1cm4gKHNwYWNlZCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYyBiL2xpYmMvbmV0YnNkL25hbWVzZXIvbnNfc2FtZWRvbWFpbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZmRiNjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uYW1lc2VyL25zX3NhbWVkb21haW4uYwpAQCAtMCwwICsxLDIxMSBAQAorLyoJJE5ldEJTRDogbnNfc2FtZWRvbWFpbi5jLHYgMS4yIDIwMDQvMDUvMjAgMjA6MzU6MDUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk1LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZm5kZWYgbGludAorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogbnNfc2FtZWRvbWFpbi5jLHYgMS4xLjIuMi40LjIgMjAwNC8wMy8xNiAxMjozNDoxNyBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IG5zX3NhbWVkb21haW4uYyx2IDEuMiAyMDA0LzA1LzIwIDIwOjM1OjA1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmbmRlZiBfTElCQworLyoKKyAqIGludAorICogbnNfc2FtZWRvbWFpbihhLCBiKQorICoJQ2hlY2sgd2hldGhlciBhIG5hbWUgYmVsb25ncyB0byBhIGRvbWFpbi4KKyAqIElucHV0czoKKyAqCWEgLSB0aGUgZG9tYWluIHdob3NlIGFuY2VzdG9yeSBpcyBiZWluZyB2ZXJpZmllZAorICoJYiAtIHRoZSBwb3RlbnRpYWwgYW5jZXN0b3Igd2UncmUgY2hlY2tpbmcgYWdhaW5zdAorICogUmV0dXJuOgorICoJYm9vbGVhbiAtIGlzIGEgYXQgb3IgYmVsb3cgYj8KKyAqIE5vdGVzOgorICoJVHJhaWxpbmcgZG90cyBhcmUgZmlyc3QgcmVtb3ZlZCBmcm9tIG5hbWUgYW5kIGRvbWFpbi4KKyAqCUFsd2F5cyBjb21wYXJlIGNvbXBsZXRlIHN1YmRvbWFpbnMsIG5vdCBvbmx5IHdoZXRoZXIgdGhlCisgKglkb21haW4gbmFtZSBpcyB0aGUgdHJhaWxpbmcgc3RyaW5nIG9mIHRoZSBnaXZlbiBuYW1lLgorICoKKyAqCSJob3N0LmZvb2Jhci50b3AiIGxpZXMgaW4gImZvb2Jhci50b3AiIGFuZCBpbiAidG9wIiBhbmQgaW4gIiIKKyAqCWJ1dCBOT1QgaW4gImJhci50b3AiCisgKi8KKworaW50Cituc19zYW1lZG9tYWluKGNvbnN0IGNoYXIgKmEsIGNvbnN0IGNoYXIgKmIpIHsKKwlzaXplX3QgbGEsIGxiOworCWludCBkaWZmLCBpLCBlc2NhcGVkOworCWNvbnN0IGNoYXIgKmNwOworCisJbGEgPSBzdHJsZW4oYSk7CisJbGIgPSBzdHJsZW4oYik7CisKKwkvKiBJZ25vcmUgYSB0cmFpbGluZyBsYWJlbCBzZXBhcmF0b3IgKGkuZS4gYW4gdW5lc2NhcGVkIGRvdCkgaW4gJ2EnLiAqLworCWlmIChsYSAhPSAwVSAmJiBhW2xhIC0gMV0gPT0gJy4nKSB7CisJCWVzY2FwZWQgPSAwOworCQkvKiBOb3RlIHRoaXMgbG9vcCBkb2Vzbid0IGdldCBleGVjdXRlZCBpZiBsYT09MS4gKi8KKwkJZm9yIChpID0gbGEgLSAyOyBpID49IDA7IGktLSkKKwkJCWlmIChhW2ldID09ICdcXCcpIHsKKwkJCQlpZiAoZXNjYXBlZCkKKwkJCQkJZXNjYXBlZCA9IDA7CisJCQkJZWxzZQorCQkJCQllc2NhcGVkID0gMTsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQlpZiAoIWVzY2FwZWQpCisJCQlsYS0tOworCX0KKworCS8qIElnbm9yZSBhIHRyYWlsaW5nIGxhYmVsIHNlcGFyYXRvciAoaS5lLiBhbiB1bmVzY2FwZWQgZG90KSBpbiAnYicuICovCisJaWYgKGxiICE9IDBVICYmIGJbbGIgLSAxXSA9PSAnLicpIHsKKwkJZXNjYXBlZCA9IDA7CisJCS8qIG5vdGUgdGhpcyBsb29wIGRvZXNuJ3QgZ2V0IGV4ZWN1dGVkIGlmIGxiPT0xICovCisJCWZvciAoaSA9IGxiIC0gMjsgaSA+PSAwOyBpLS0pCisJCQlpZiAoYltpXSA9PSAnXFwnKSB7CisJCQkJaWYgKGVzY2FwZWQpCisJCQkJCWVzY2FwZWQgPSAwOworCQkJCWVsc2UKKwkJCQkJZXNjYXBlZCA9IDE7CisJCQl9IGVsc2UKKwkJCQlicmVhazsKKwkJaWYgKCFlc2NhcGVkKQorCQkJbGItLTsKKwl9CisKKwkvKiBsYiA9PSAwIG1lYW5zICdiJyBpcyB0aGUgcm9vdCBkb21haW4sIHNvICdhJyBtdXN0IGJlIGluICdiJy4gKi8KKwlpZiAobGIgPT0gMFUpCisJCXJldHVybiAoMSk7CisKKwkvKiAnYicgbG9uZ2VyIHRoYW4gJ2EnIG1lYW5zICdhJyBjYW4ndCBiZSBpbiAnYicuICovCisJaWYgKGxiID4gbGEpCisJCXJldHVybiAoMCk7CisKKwkvKiAnYScgYW5kICdiJyBiZWluZyBlcXVhbCBhdCB0aGlzIHBvaW50IGluZGljYXRlcyBzYW1lbmVzcy4gKi8KKwlpZiAobGIgPT0gbGEpCisJCXJldHVybiAoc3RybmNhc2VjbXAoYSwgYiwgbGIpID09IDApOworCisJLyogT2ssIHdlIGtub3cgbGEgPiBsYi4gKi8KKworCWRpZmYgPSBsYSAtIGxiOworCisJLyoKKwkgKiBJZiAnYScgaXMgb25seSAxIGNoYXJhY3RlciBsb25nZXIgdGhhbiAnYicsIHRoZW4gaXQgY2FuJ3QgYmUKKwkgKiBhIHN1YmRvbWFpbiBvZiAnYicgKGJlY2F1c2Ugb2YgdGhlIG5lZWQgZm9yIHRoZSAnLicgbGFiZWwKKwkgKiBzZXBhcmF0b3IpLgorCSAqLworCWlmIChkaWZmIDwgMikKKwkJcmV0dXJuICgwKTsKKworCS8qCisJICogSWYgdGhlIGNoYXJhY3RlciBiZWZvcmUgdGhlIGxhc3QgJ2xiJyBjaGFyYWN0ZXJzIG9mICdiJworCSAqIGlzbid0ICcuJywgdGhlbiBpdCBjYW4ndCBiZSBhIG1hdGNoICh0aGlzIGxldHMgdXMgYXZvaWQKKwkgKiBoYXZpbmcgImZvb2Jhci5jb20iIG1hdGNoICJiYXIuY29tIikuCisJICovCisJaWYgKGFbZGlmZiAtIDFdICE9ICcuJykKKwkJcmV0dXJuICgwKTsKKworCS8qCisJICogV2UncmUgbm90IHN1cmUgYWJvdXQgdGhhdCAnLicsIGhvd2V2ZXIuICBJdCBjb3VsZCBiZSBlc2NhcGVkCisgICAgICAgICAqIGFuZCB0aHVzIG5vdCBhIHJlYWxseSBhIGxhYmVsIHNlcGFyYXRvci4KKwkgKi8KKwllc2NhcGVkID0gMDsKKwlmb3IgKGkgPSBkaWZmIC0gMjsgaSA+PSAwOyBpLS0pCisJCWlmIChhW2ldID09ICdcXCcpIHsKKwkJCWlmIChlc2NhcGVkKQorCQkJCWVzY2FwZWQgPSAwOworCQkJZWxzZQorCQkJCWVzY2FwZWQgPSAxOworCQl9IGVsc2UKKwkJCWJyZWFrOworCWlmIChlc2NhcGVkKQorCQlyZXR1cm4gKDApOworCisJLyogTm93IGNvbXBhcmUgYWxpZ25lZCB0cmFpbGluZyBzdWJzdHJpbmcuICovCisJY3AgPSBhICsgZGlmZjsKKwlyZXR1cm4gKHN0cm5jYXNlY21wKGNwLCBiLCBsYikgPT0gMCk7Cit9CisKKy8qCisgKiBpbnQKKyAqIG5zX3N1YmRvbWFpbihhLCBiKQorICoJaXMgImEiIGEgc3ViZG9tYWluIG9mICJiIj8KKyAqLworaW50Cituc19zdWJkb21haW4oY29uc3QgY2hhciAqYSwgY29uc3QgY2hhciAqYikgeworCXJldHVybiAobnNfc2FtZW5hbWUoYSwgYikgIT0gMSAmJiBuc19zYW1lZG9tYWluKGEsIGIpKTsKK30KKyNlbmRpZgorCisvKgorICogaW50CisgKiBuc19tYWtlY2Fub24oc3JjLCBkc3QsIGRzdHNpemUpCisgKgltYWtlIGEgY2Fub25pY2FsIGNvcHkgb2YgZG9tYWluIG5hbWUgInNyYyIKKyAqIG5vdGVzOgorICoJZm9vIC0+IGZvby4KKyAqCWZvby4gLT4gZm9vLgorICoJZm9vLi4gLT4gZm9vLgorICoJZm9vXC4gLT4gZm9vXC4uCisgKglmb29cXC4gLT4gZm9vXFwuCisgKi8KKworaW50Cituc19tYWtlY2Fub24oY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplKSB7CisJc2l6ZV90IG4gPSBzdHJsZW4oc3JjKTsKKworCWlmIChuICsgc2l6ZW9mICIuIiA+IGRzdHNpemUpIHsJCQkvKiBOb3RlOiBzaXplb2YgPT0gMiAqLworCQllcnJubyA9IEVNU0dTSVpFOworCQlyZXR1cm4gKC0xKTsKKwl9CisJc3RyY3B5KGRzdCwgc3JjKTsKKwl3aGlsZSAobiA+PSAxVSAmJiBkc3RbbiAtIDFdID09ICcuJykJCS8qIEVuZHMgaW4gIi4iICovCisJCWlmIChuID49IDJVICYmIGRzdFtuIC0gMl0gPT0gJ1xcJyAmJgkvKiBFbmRzIGluICJcLiIgKi8KKwkJICAgIChuIDwgM1UgfHwgZHN0W24gLSAzXSAhPSAnXFwnKSkJLyogQnV0IG5vdCAiXFwuIiAqLworCQkJYnJlYWs7CisJCWVsc2UKKwkJCWRzdFstLW5dID0gJ1wwJzsKKwlkc3RbbisrXSA9ICcuJzsKKwlkc3Rbbl0gPSAnXDAnOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBpbnQKKyAqIG5zX3NhbWVuYW1lKGEsIGIpCisgKglkZXRlcm1pbmUgd2hldGhlciBkb21haW4gbmFtZSAiYSIgaXMgdGhlIHNhbWUgYXMgZG9tYWluIG5hbWUgImIiCisgKiByZXR1cm46CisgKgktMSBvbiBlcnJvcgorICoJMCBpZiBuYW1lcyBkaWZmZXIKKyAqCTEgaWYgbmFtZXMgYXJlIHRoZSBzYW1lCisgKi8KKworaW50Cituc19zYW1lbmFtZShjb25zdCBjaGFyICphLCBjb25zdCBjaGFyICpiKSB7CisJY2hhciB0YVtOU19NQVhETkFNRV0sIHRiW05TX01BWEROQU1FXTsKKworCWlmIChuc19tYWtlY2Fub24oYSwgdGEsIHNpemVvZiB0YSkgPCAwIHx8CisJICAgIG5zX21ha2VjYW5vbihiLCB0Yiwgc2l6ZW9mIHRiKSA8IDApCisJCXJldHVybiAoLTEpOworCWlmIChzdHJjYXNlY21wKHRhLCB0YikgPT0gMCkKKwkJcmV0dXJuICgxKTsKKwllbHNlCisJCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uYW1lc2VyL25zX3R0bC5jIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc190dGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODc4MTk0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmFtZXNlci9uc190dGwuYwpAQCAtMCwwICsxLDE2NCBAQAorLyoJJE5ldEJTRDogbnNfdHRsLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmbmRlZiBsaW50CisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBuc190dGwuYyx2IDEuMS4yMDYuMSAyMDA0LzAzLzA5IDA4OjMzOjQ1IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogbnNfdHRsLmMsdiAxLjIgMjAwNC8wNS8yMCAyMDozNTowNSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYKKworLyogSW1wb3J0LiAqLworCisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgKChzaXplX3Qpc3ByaW50ZiB4KQorI2VuZGlmCisKKy8qIEZvcndhcmQuICovCisKK3N0YXRpYyBpbnQJZm10MShpbnQgdCwgY2hhciBzLCBjaGFyICoqYnVmLCBzaXplX3QgKmJ1Zmxlbik7CisKKy8qIE1hY3Jvcy4gKi8KKworI2RlZmluZSBUKHgpIGlmICgoeCkgPCAwKSByZXR1cm4gKC0xKTsgZWxzZQorCisvKiBQdWJsaWMuICovCisKK2ludAorbnNfZm9ybWF0X3R0bCh1X2xvbmcgc3JjLCBjaGFyICpkc3QsIHNpemVfdCBkc3RsZW4pIHsKKwljaGFyICpvZHN0ID0gZHN0OworCWludCBzZWNzLCBtaW5zLCBob3VycywgZGF5cywgd2Vla3MsIHg7CisJY2hhciAqcDsKKworCXNlY3MgPSBzcmMgJSA2MDsgICBzcmMgLz0gNjA7CisJbWlucyA9IHNyYyAlIDYwOyAgIHNyYyAvPSA2MDsKKwlob3VycyA9IHNyYyAlIDI0OyAgc3JjIC89IDI0OworCWRheXMgPSBzcmMgJSA3OyAgICBzcmMgLz0gNzsKKwl3ZWVrcyA9IHNyYzsgICAgICAgc3JjID0gMDsKKworCXggPSAwOworCWlmICh3ZWVrcykgeworCQlUKGZtdDEod2Vla3MsICdXJywgJmRzdCwgJmRzdGxlbikpOworCQl4Kys7CisJfQorCWlmIChkYXlzKSB7CisJCVQoZm10MShkYXlzLCAnRCcsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAoaG91cnMpIHsKKwkJVChmbXQxKGhvdXJzLCAnSCcsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKwlpZiAobWlucykgeworCQlUKGZtdDEobWlucywgJ00nLCAmZHN0LCAmZHN0bGVuKSk7CisJCXgrKzsKKwl9CisJaWYgKHNlY3MgfHwgISh3ZWVrcyB8fCBkYXlzIHx8IGhvdXJzIHx8IG1pbnMpKSB7CisJCVQoZm10MShzZWNzLCAnUycsICZkc3QsICZkc3RsZW4pKTsKKwkJeCsrOworCX0KKworCWlmICh4ID4gMSkgeworCQlpbnQgY2g7CisKKwkJZm9yIChwID0gb2RzdDsgKGNoID0gKnApICE9ICdcMCc7IHArKykKKwkJCWlmIChpc2FzY2lpKGNoKSAmJiBpc3VwcGVyKGNoKSkKKwkJCQkqcCA9IHRvbG93ZXIoY2gpOworCX0KKworCXJldHVybiAoZHN0IC0gb2RzdCk7Cit9CisKKyNpZm5kZWYgX0xJQkMKK2ludAorbnNfcGFyc2VfdHRsKGNvbnN0IGNoYXIgKnNyYywgdV9sb25nICpkc3QpIHsKKwl1X2xvbmcgdHRsLCB0bXA7CisJaW50IGNoLCBkaWdpdHMsIGRpcnR5OworCisJdHRsID0gMDsKKwl0bXAgPSAwOworCWRpZ2l0cyA9IDA7CisJZGlydHkgPSAwOworCXdoaWxlICgoY2ggPSAqc3JjKyspICE9ICdcMCcpIHsKKwkJaWYgKCFpc2FzY2lpKGNoKSB8fCAhaXNwcmludChjaCkpCisJCQlnb3RvIGVpbnZhbDsKKwkJaWYgKGlzZGlnaXQoY2gpKSB7CisJCQl0bXAgKj0gMTA7CisJCQl0bXAgKz0gKGNoIC0gJzAnKTsKKwkJCWRpZ2l0cysrOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGRpZ2l0cyA9PSAwKQorCQkJZ290byBlaW52YWw7CisJCWlmIChpc2xvd2VyKGNoKSkKKwkJCWNoID0gdG91cHBlcihjaCk7CisJCXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnVyc6ICB0bXAgKj0gNzsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ0QnOiAgdG1wICo9IDI0OwkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnSCc6ICB0bXAgKj0gNjA7CS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdNJzogIHRtcCAqPSA2MDsJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ1MnOiAgYnJlYWs7CisJCWRlZmF1bHQ6ICAgZ290byBlaW52YWw7CisJCX0KKwkJdHRsICs9IHRtcDsKKwkJdG1wID0gMDsKKwkJZGlnaXRzID0gMDsKKwkJZGlydHkgPSAxOworCX0KKwlpZiAoZGlnaXRzID4gMCkgeworCQlpZiAoZGlydHkpCisJCQlnb3RvIGVpbnZhbDsKKwkJZWxzZQorCQkJdHRsICs9IHRtcDsKKwl9CisJKmRzdCA9IHR0bDsKKwlyZXR1cm4gKDApOworCisgZWludmFsOgorCWVycm5vID0gRUlOVkFMOworCXJldHVybiAoLTEpOworfQorI2VuZGlmCisKKy8qIFByaXZhdGUuICovCisKK3N0YXRpYyBpbnQKK2ZtdDEoaW50IHQsIGNoYXIgcywgY2hhciAqKmJ1Ziwgc2l6ZV90ICpidWZsZW4pIHsKKwljaGFyIHRtcFs1MF07CisJc2l6ZV90IGxlbjsKKworCWxlbiA9IFNQUklOVEYoKHRtcCwgIiVkJWMiLCB0LCBzKSk7CisJaWYgKGxlbiArIDEgPiAqYnVmbGVuKQorCQlyZXR1cm4gKC0xKTsKKwlzdHJjcHkoKmJ1ZiwgdG1wKTsKKwkqYnVmICs9IGxlbjsKKwkqYnVmbGVuIC09IGxlbjsKKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2Jhc2U2NC5jIGIvbGliYy9uZXRic2QvbmV0L2Jhc2U2NC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwY2FhZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9uZXQvYmFzZTY0LmMKQEAgLTAsMCArMSwzNDAgQEAKKy8qCSROZXRCU0Q6IGJhc2U2NC5jLHYgMS44IDIwMDIvMTEvMTEgMDE6MTU6MTcgdGhvcnBlaiBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk2IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJTlRFUk5FVCBTT0ZUV0FSRSBDT05TT1JUSVVNIERJU0NMQUlNUworICogQUxMIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBJTlRFUk5FVCBTT0ZUV0FSRQorICogQ09OU09SVElVTSBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTUgYnkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLgorICoKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4gKGhlcmVpbmFmdGVyIGNhbGxlZCBJQk0pIGdyYW50cworICogcGVybWlzc2lvbiB1bmRlciBpdHMgY29weXJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogU29mdHdhcmUgd2l0aCBvciB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIGFsbCBwYXJhZ3JhcGhzIG9mIHRoaXMgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBJQk0KKyAqIG5vdCBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgbWFya2V0aW5nIG9mIGFueSBwcm9kdWN0IGluY29ycG9yYXRpbmcKKyAqIHRoZSBTb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YsIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uCisgKgorICogVG8gdGhlIGV4dGVudCBpdCBoYXMgYSByaWdodCB0byBkbyBzbywgSUJNIGdyYW50cyBhbiBpbW11bml0eSBmcm9tIHN1aXQKKyAqIHVuZGVyIGl0cyBwYXRlbnRzLCBpZiBhbnksIGZvciB0aGUgdXNlLCBzYWxlIG9yIG1hbnVmYWN0dXJlIG9mIHByb2R1Y3RzIHRvCisgKiB0aGUgZXh0ZW50IHRoYXQgc3VjaCBwcm9kdWN0cyBhcmUgdXNlZCBmb3IgcGVyZm9ybWluZyBEb21haW4gTmFtZSBTeXN0ZW0KKyAqIGR5bmFtaWMgdXBkYXRlcyBpbiBUQ1AvSVAgbmV0d29ya3MgYnkgbWVhbnMgb2YgdGhlIFNvZnR3YXJlLiAgTm8gaW1tdW5pdHkgaXMKKyAqIGdyYW50ZWQgZm9yIGFueSBwcm9kdWN0IHBlciBzZSBvciBmb3IgYW55IG90aGVyIGZ1bmN0aW9uIG9mIGFueSBwcm9kdWN0LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBBTkQgSUJNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsCisgKiBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBBUklTSU5HCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgSUJNIElTIEFQUFJJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogYmFzZTY0LmMsdiAxLjggMjAwMi8xMS8xMSAwMToxNToxNyB0aG9ycGVqIEV4cCAkIik7CisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3N0YXRpYyBjb25zdCBjaGFyIEJhc2U2NFtdID0KKwkiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CitzdGF0aWMgY29uc3QgY2hhciBQYWQ2NCA9ICc9JzsKKworLyogKEZyb20gUkZDMTUyMSBhbmQgZHJhZnQtaWV0Zi1kbnNzZWMtc2VjZXh0LTAzLnR4dCkKKyAgIFRoZSBmb2xsb3dpbmcgZW5jb2RpbmcgdGVjaG5pcXVlIGlzIHRha2VuIGZyb20gUkZDIDE1MjEgYnkgQm9yZW5zdGVpbgorICAgYW5kIEZyZWVkLiAgSXQgaXMgcmVwcm9kdWNlZCBoZXJlIGluIGEgc2xpZ2h0bHkgZWRpdGVkIGZvcm0gZm9yCisgICBjb252ZW5pZW5jZS4KKworICAgQSA2NS1jaGFyYWN0ZXIgc3Vic2V0IG9mIFVTLUFTQ0lJIGlzIHVzZWQsIGVuYWJsaW5nIDYgYml0cyB0byBiZQorICAgcmVwcmVzZW50ZWQgcGVyIHByaW50YWJsZSBjaGFyYWN0ZXIuIChUaGUgZXh0cmEgNjV0aCBjaGFyYWN0ZXIsICI9IiwKKyAgIGlzIHVzZWQgdG8gc2lnbmlmeSBhIHNwZWNpYWwgcHJvY2Vzc2luZyBmdW5jdGlvbi4pCisKKyAgIFRoZSBlbmNvZGluZyBwcm9jZXNzIHJlcHJlc2VudHMgMjQtYml0IGdyb3VwcyBvZiBpbnB1dCBiaXRzIGFzIG91dHB1dAorICAgc3RyaW5ncyBvZiA0IGVuY29kZWQgY2hhcmFjdGVycy4gUHJvY2VlZGluZyBmcm9tIGxlZnQgdG8gcmlnaHQsIGEKKyAgIDI0LWJpdCBpbnB1dCBncm91cCBpcyBmb3JtZWQgYnkgY29uY2F0ZW5hdGluZyAzIDgtYml0IGlucHV0IGdyb3Vwcy4KKyAgIFRoZXNlIDI0IGJpdHMgYXJlIHRoZW4gdHJlYXRlZCBhcyA0IGNvbmNhdGVuYXRlZCA2LWJpdCBncm91cHMsIGVhY2gKKyAgIG9mIHdoaWNoIGlzIHRyYW5zbGF0ZWQgaW50byBhIHNpbmdsZSBkaWdpdCBpbiB0aGUgYmFzZTY0IGFscGhhYmV0LgorCisgICBFYWNoIDYtYml0IGdyb3VwIGlzIHVzZWQgYXMgYW4gaW5kZXggaW50byBhbiBhcnJheSBvZiA2NCBwcmludGFibGUKKyAgIGNoYXJhY3RlcnMuIFRoZSBjaGFyYWN0ZXIgcmVmZXJlbmNlZCBieSB0aGUgaW5kZXggaXMgcGxhY2VkIGluIHRoZQorICAgb3V0cHV0IHN0cmluZy4KKworICAgICAgICAgICAgICAgICAgICAgICAgIFRhYmxlIDE6IFRoZSBCYXNlNjQgQWxwaGFiZXQKKworICAgICAgVmFsdWUgRW5jb2RpbmcgIFZhbHVlIEVuY29kaW5nICBWYWx1ZSBFbmNvZGluZyAgVmFsdWUgRW5jb2RpbmcKKyAgICAgICAgICAwIEEgICAgICAgICAgICAxNyBSICAgICAgICAgICAgMzQgaSAgICAgICAgICAgIDUxIHoKKyAgICAgICAgICAxIEIgICAgICAgICAgICAxOCBTICAgICAgICAgICAgMzUgaiAgICAgICAgICAgIDUyIDAKKyAgICAgICAgICAyIEMgICAgICAgICAgICAxOSBUICAgICAgICAgICAgMzYgayAgICAgICAgICAgIDUzIDEKKyAgICAgICAgICAzIEQgICAgICAgICAgICAyMCBVICAgICAgICAgICAgMzcgbCAgICAgICAgICAgIDU0IDIKKyAgICAgICAgICA0IEUgICAgICAgICAgICAyMSBWICAgICAgICAgICAgMzggbSAgICAgICAgICAgIDU1IDMKKyAgICAgICAgICA1IEYgICAgICAgICAgICAyMiBXICAgICAgICAgICAgMzkgbiAgICAgICAgICAgIDU2IDQKKyAgICAgICAgICA2IEcgICAgICAgICAgICAyMyBYICAgICAgICAgICAgNDAgbyAgICAgICAgICAgIDU3IDUKKyAgICAgICAgICA3IEggICAgICAgICAgICAyNCBZICAgICAgICAgICAgNDEgcCAgICAgICAgICAgIDU4IDYKKyAgICAgICAgICA4IEkgICAgICAgICAgICAyNSBaICAgICAgICAgICAgNDIgcSAgICAgICAgICAgIDU5IDcKKyAgICAgICAgICA5IEogICAgICAgICAgICAyNiBhICAgICAgICAgICAgNDMgciAgICAgICAgICAgIDYwIDgKKyAgICAgICAgIDEwIEsgICAgICAgICAgICAyNyBiICAgICAgICAgICAgNDQgcyAgICAgICAgICAgIDYxIDkKKyAgICAgICAgIDExIEwgICAgICAgICAgICAyOCBjICAgICAgICAgICAgNDUgdCAgICAgICAgICAgIDYyICsKKyAgICAgICAgIDEyIE0gICAgICAgICAgICAyOSBkICAgICAgICAgICAgNDYgdSAgICAgICAgICAgIDYzIC8KKyAgICAgICAgIDEzIE4gICAgICAgICAgICAzMCBlICAgICAgICAgICAgNDcgdgorICAgICAgICAgMTQgTyAgICAgICAgICAgIDMxIGYgICAgICAgICAgICA0OCB3ICAgICAgICAgKHBhZCkgPQorICAgICAgICAgMTUgUCAgICAgICAgICAgIDMyIGcgICAgICAgICAgICA0OSB4CisgICAgICAgICAxNiBRICAgICAgICAgICAgMzMgaCAgICAgICAgICAgIDUwIHkKKworICAgU3BlY2lhbCBwcm9jZXNzaW5nIGlzIHBlcmZvcm1lZCBpZiBmZXdlciB0aGFuIDI0IGJpdHMgYXJlIGF2YWlsYWJsZQorICAgYXQgdGhlIGVuZCBvZiB0aGUgZGF0YSBiZWluZyBlbmNvZGVkLiAgQSBmdWxsIGVuY29kaW5nIHF1YW50dW0gaXMKKyAgIGFsd2F5cyBjb21wbGV0ZWQgYXQgdGhlIGVuZCBvZiBhIHF1YW50aXR5LiAgV2hlbiBmZXdlciB0aGFuIDI0IGlucHV0CisgICBiaXRzIGFyZSBhdmFpbGFibGUgaW4gYW4gaW5wdXQgZ3JvdXAsIHplcm8gYml0cyBhcmUgYWRkZWQgKG9uIHRoZQorICAgcmlnaHQpIHRvIGZvcm0gYW4gaW50ZWdyYWwgbnVtYmVyIG9mIDYtYml0IGdyb3Vwcy4gIFBhZGRpbmcgYXQgdGhlCisgICBlbmQgb2YgdGhlIGRhdGEgaXMgcGVyZm9ybWVkIHVzaW5nIHRoZSAnPScgY2hhcmFjdGVyLgorCisgICBTaW5jZSBhbGwgYmFzZTY0IGlucHV0IGlzIGFuIGludGVncmFsIG51bWJlciBvZiBvY3RldHMsIG9ubHkgdGhlCisgICAgICAgICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgICBmb2xsb3dpbmcgY2FzZXMgY2FuIGFyaXNlOgorCisgICAgICAgKDEpIHRoZSBmaW5hbCBxdWFudHVtIG9mIGVuY29kaW5nIGlucHV0IGlzIGFuIGludGVncmFsCisgICAgICAgICAgIG11bHRpcGxlIG9mIDI0IGJpdHM7IGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQKKwkgICBvdXRwdXQgd2lsbCBiZSBhbiBpbnRlZ3JhbCBtdWx0aXBsZSBvZiA0IGNoYXJhY3RlcnMKKwkgICB3aXRoIG5vICI9IiBwYWRkaW5nLAorICAgICAgICgyKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBleGFjdGx5IDggYml0czsKKyAgICAgICAgICAgaGVyZSwgdGhlIGZpbmFsIHVuaXQgb2YgZW5jb2RlZCBvdXRwdXQgd2lsbCBiZSB0d28KKwkgICBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5IHR3byAiPSIgcGFkZGluZyBjaGFyYWN0ZXJzLCBvcgorICAgICAgICgzKSB0aGUgZmluYWwgcXVhbnR1bSBvZiBlbmNvZGluZyBpbnB1dCBpcyBleGFjdGx5IDE2IGJpdHM7CisgICAgICAgICAgIGhlcmUsIHRoZSBmaW5hbCB1bml0IG9mIGVuY29kZWQgb3V0cHV0IHdpbGwgYmUgdGhyZWUKKwkgICBjaGFyYWN0ZXJzIGZvbGxvd2VkIGJ5IG9uZSAiPSIgcGFkZGluZyBjaGFyYWN0ZXIuCisgICAqLworCitpbnQKK2I2NF9udG9wKHNyYywgc3JjbGVuZ3RoLCB0YXJnZXQsIHRhcmdzaXplKQorCXVfY2hhciBjb25zdCAqc3JjOworCXNpemVfdCBzcmNsZW5ndGg7CisJY2hhciAqdGFyZ2V0OworCXNpemVfdCB0YXJnc2l6ZTsKK3sKKwlzaXplX3QgZGF0YWxlbmd0aCA9IDA7CisJdV9jaGFyIGlucHV0WzNdOworCXVfY2hhciBvdXRwdXRbNF07CisJc2l6ZV90IGk7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7CisKKwl3aGlsZSAoMiA8IHNyY2xlbmd0aCkgeworCQlpbnB1dFswXSA9ICpzcmMrKzsKKwkJaW5wdXRbMV0gPSAqc3JjKys7CisJCWlucHV0WzJdID0gKnNyYysrOworCQlzcmNsZW5ndGggLT0gMzsKKworCQlvdXRwdXRbMF0gPSAodV9pbnQzMl90KWlucHV0WzBdID4+IDI7CisJCW91dHB1dFsxXSA9ICgodV9pbnQzMl90KShpbnB1dFswXSAmIDB4MDMpIDw8IDQpICsKKwkJICAgICgodV9pbnQzMl90KWlucHV0WzFdID4+IDQpOworCQlvdXRwdXRbMl0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMV0gJiAweDBmKSA8PCAyKSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsyXSA+PiA2KTsKKwkJb3V0cHV0WzNdID0gaW5wdXRbMl0gJiAweDNmOworCQlhc3NlcnQob3V0cHV0WzBdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzFdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzJdIDwgNjQpOworCQlhc3NlcnQob3V0cHV0WzNdIDwgNjQpOworCisJCWlmIChkYXRhbGVuZ3RoICsgNCA+IHRhcmdzaXplKQorCQkJcmV0dXJuICgtMSk7CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFswXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsxXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFsyXV07CisJCXRhcmdldFtkYXRhbGVuZ3RoKytdID0gQmFzZTY0W291dHB1dFszXV07CisJfQorCisJLyogTm93IHdlIHdvcnJ5IGFib3V0IHBhZGRpbmcuICovCisJaWYgKDAgIT0gc3JjbGVuZ3RoKSB7CisJCS8qIEdldCB3aGF0J3MgbGVmdC4gKi8KKwkJaW5wdXRbMF0gPSBpbnB1dFsxXSA9IGlucHV0WzJdID0gJ1wwJzsKKwkJZm9yIChpID0gMDsgaSA8IHNyY2xlbmd0aDsgaSsrKQorCQkJaW5wdXRbaV0gPSAqc3JjKys7CisKKwkJb3V0cHV0WzBdID0gKHVfaW50MzJfdClpbnB1dFswXSA+PiAyOworCQlvdXRwdXRbMV0gPSAoKHVfaW50MzJfdCkoaW5wdXRbMF0gJiAweDAzKSA8PCA0KSArCisJCSAgICAoKHVfaW50MzJfdClpbnB1dFsxXSA+PiA0KTsKKwkJb3V0cHV0WzJdID0gKCh1X2ludDMyX3QpKGlucHV0WzFdICYgMHgwZikgPDwgMikgKworCQkgICAgKCh1X2ludDMyX3QpaW5wdXRbMl0gPj4gNik7CisJCWFzc2VydChvdXRwdXRbMF0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMV0gPCA2NCk7CisJCWFzc2VydChvdXRwdXRbMl0gPCA2NCk7CisKKwkJaWYgKGRhdGFsZW5ndGggKyA0ID4gdGFyZ3NpemUpCisJCQlyZXR1cm4gKC0xKTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzBdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzFdXTsKKwkJaWYgKHNyY2xlbmd0aCA9PSAxKQorCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKKwkJZWxzZQorCQkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBCYXNlNjRbb3V0cHV0WzJdXTsKKwkJdGFyZ2V0W2RhdGFsZW5ndGgrK10gPSBQYWQ2NDsKKwl9CisJaWYgKGRhdGFsZW5ndGggPj0gdGFyZ3NpemUpCisJCXJldHVybiAoLTEpOworCXRhcmdldFtkYXRhbGVuZ3RoXSA9ICdcMCc7CS8qIFJldHVybmVkIHZhbHVlIGRvZXNuJ3QgY291bnQgXDAuICovCisJcmV0dXJuIChkYXRhbGVuZ3RoKTsKK30KKworLyogc2tpcHMgYWxsIHdoaXRlc3BhY2UgYW55d2hlcmUuCisgICBjb252ZXJ0cyBjaGFyYWN0ZXJzLCBmb3VyIGF0IGEgdGltZSwgc3RhcnRpbmcgYXQgKG9yIGFmdGVyKQorICAgc3JjIGZyb20gYmFzZSAtIDY0IG51bWJlcnMgaW50byB0aHJlZSA4IGJpdCBieXRlcyBpbiB0aGUgdGFyZ2V0IGFyZWEuCisgICBpdCByZXR1cm5zIHRoZSBudW1iZXIgb2YgZGF0YSBieXRlcyBzdG9yZWQgYXQgdGhlIHRhcmdldCwgb3IgLTEgb24gZXJyb3IuCisgKi8KKworaW50CitiNjRfcHRvbihzcmMsIHRhcmdldCwgdGFyZ3NpemUpCisJY2hhciBjb25zdCAqc3JjOworCXVfY2hhciAqdGFyZ2V0OworCXNpemVfdCB0YXJnc2l6ZTsKK3sKKwlzaXplX3QgdGFyaW5kZXg7CisJaW50IHN0YXRlLCBjaDsKKwljaGFyICpwb3M7CisKKwlhc3NlcnQoc3JjICE9IE5VTEwpOworCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7CisKKwlzdGF0ZSA9IDA7CisJdGFyaW5kZXggPSAwOworCisJd2hpbGUgKChjaCA9ICh1X2NoYXIpICpzcmMrKykgIT0gJ1wwJykgeworCQlpZiAoaXNzcGFjZShjaCkpCS8qIFNraXAgd2hpdGVzcGFjZSBhbnl3aGVyZS4gKi8KKwkJCWNvbnRpbnVlOworCisJCWlmIChjaCA9PSBQYWQ2NCkKKwkJCWJyZWFrOworCisJCXBvcyA9IHN0cmNocihCYXNlNjQsIGNoKTsKKwkJaWYgKHBvcyA9PSAwKSAJCS8qIEEgbm9uLWJhc2U2NCBjaGFyYWN0ZXIuICovCisJCQlyZXR1cm4gKC0xKTsKKworCQlzd2l0Y2ggKHN0YXRlKSB7CisJCWNhc2UgMDoKKwkJCWlmICh0YXJnZXQpIHsKKwkJCQlpZiAodGFyaW5kZXggPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gPSAocG9zIC0gQmFzZTY0KSA8PCAyOworCQkJfQorCQkJc3RhdGUgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgMToKKwkJCWlmICh0YXJnZXQpIHsKKwkJCQlpZiAodGFyaW5kZXggKyAxID49IHRhcmdzaXplKQorCQkJCQlyZXR1cm4gKC0xKTsKKwkJCQl0YXJnZXRbdGFyaW5kZXhdIHw9CisJCQkJICAgICh1X2ludDMyX3QpKHBvcyAtIEJhc2U2NCkgPj4gNDsKKwkJCQl0YXJnZXRbdGFyaW5kZXgrMV0gID0gKChwb3MgLSBCYXNlNjQpICYgMHgwZikKKwkJCQkJCQk8PCA0IDsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDI7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCArIDEgPj0gdGFyZ3NpemUpCisJCQkJCXJldHVybiAoLTEpOworCQkJCXRhcmdldFt0YXJpbmRleF0gfD0KKwkJCQkJKHVfaW50MzJfdCkocG9zIC0gQmFzZTY0KSA+PiAyOworCQkJCXRhcmdldFt0YXJpbmRleCsxXSA9ICgocG9zIC0gQmFzZTY0KSAmIDB4MDMpCisJCQkJCQkJPDwgNjsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDM7CisJCQlicmVhazsKKwkJY2FzZSAzOgorCQkJaWYgKHRhcmdldCkgeworCQkJCWlmICh0YXJpbmRleCA+PSB0YXJnc2l6ZSkKKwkJCQkJcmV0dXJuICgtMSk7CisJCQkJdGFyZ2V0W3RhcmluZGV4XSB8PSAocG9zIC0gQmFzZTY0KTsKKwkJCX0KKwkJCXRhcmluZGV4Kys7CisJCQlzdGF0ZSA9IDA7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWFib3J0KCk7CisJCX0KKwl9CisKKwkvKgorCSAqIFdlIGFyZSBkb25lIGRlY29kaW5nIEJhc2UtNjQgY2hhcnMuICBMZXQncyBzZWUgaWYgd2UgZW5kZWQKKwkgKiBvbiBhIGJ5dGUgYm91bmRhcnksIGFuZC9vciB3aXRoIGVycm9uZW91cyB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCisJaWYgKGNoID09IFBhZDY0KSB7CQkvKiBXZSBnb3QgYSBwYWQgY2hhci4gKi8KKwkJY2ggPSAqc3JjKys7CQkvKiBTa2lwIGl0LCBnZXQgbmV4dC4gKi8KKwkJc3dpdGNoIChzdGF0ZSkgeworCQljYXNlIDA6CQkvKiBJbnZhbGlkID0gaW4gZmlyc3QgcG9zaXRpb24gKi8KKwkJY2FzZSAxOgkJLyogSW52YWxpZCA9IGluIHNlY29uZCBwb3NpdGlvbiAqLworCQkJcmV0dXJuICgtMSk7CisKKwkJY2FzZSAyOgkJLyogVmFsaWQsIG1lYW5zIG9uZSBieXRlIG9mIGluZm8gKi8KKwkJCS8qIFNraXAgYW55IG51bWJlciBvZiBzcGFjZXMuICovCisJCQlmb3IgKDsgY2ggIT0gJ1wwJzsgY2ggPSAodV9jaGFyKSAqc3JjKyspCisJCQkJaWYgKCFpc3NwYWNlKGNoKSkKKwkJCQkJYnJlYWs7CisJCQkvKiBNYWtlIHN1cmUgdGhlcmUgaXMgYW5vdGhlciB0cmFpbGluZyA9IHNpZ24uICovCisJCQlpZiAoY2ggIT0gUGFkNjQpCisJCQkJcmV0dXJuICgtMSk7CisJCQljaCA9ICpzcmMrKzsJCS8qIFNraXAgdGhlID0gKi8KKwkJCS8qIEZhbGwgdGhyb3VnaCB0byAic2luZ2xlIHRyYWlsaW5nID0iIGNhc2UuICovCisJCQkvKiBGQUxMVEhST1VHSCAqLworCisJCWNhc2UgMzoJCS8qIFZhbGlkLCBtZWFucyB0d28gYnl0ZXMgb2YgaW5mbyAqLworCQkJLyoKKwkJCSAqIFdlIGtub3cgdGhpcyBjaGFyIGlzIGFuID0uICBJcyB0aGVyZSBhbnl0aGluZyBidXQKKwkJCSAqIHdoaXRlc3BhY2UgYWZ0ZXIgaXQ/CisJCQkgKi8KKwkJCWZvciAoOyBjaCAhPSAnXDAnOyBjaCA9ICh1X2NoYXIpICpzcmMrKykKKwkJCQlpZiAoIWlzc3BhY2UoY2gpKQorCQkJCQlyZXR1cm4gKC0xKTsKKworCQkJLyoKKwkJCSAqIE5vdyBtYWtlIHN1cmUgZm9yIGNhc2VzIDIgYW5kIDMgdGhhdCB0aGUgImV4dHJhIgorCQkJICogYml0cyB0aGF0IHNsb3BwZWQgcGFzdCB0aGUgbGFzdCBmdWxsIGJ5dGUgd2VyZQorCQkJICogemVyb3MuICBJZiB3ZSBkb24ndCBjaGVjayB0aGVtLCB0aGV5IGJlY29tZSBhCisJCQkgKiBzdWJsaW1pbmFsIGNoYW5uZWwuCisJCQkgKi8KKwkJCWlmICh0YXJnZXQgJiYgdGFyZ2V0W3RhcmluZGV4XSAhPSAwKQorCQkJCXJldHVybiAoLTEpOworCQl9CisJfSBlbHNlIHsKKwkJLyoKKwkJICogV2UgZW5kZWQgYnkgc2VlaW5nIHRoZSBlbmQgb2YgdGhlIHN0cmluZy4gIE1ha2Ugc3VyZSB3ZQorCQkgKiBoYXZlIG5vIHBhcnRpYWwgYnl0ZXMgbHlpbmcgYXJvdW5kLgorCQkgKi8KKwkJaWYgKHN0YXRlICE9IDApCisJCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHRhcmluZGV4KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jIGIvbGliYy9uZXRic2QvbmV0L2dldGFkZHJpbmZvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmRkM2Q5NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRhZGRyaW5mby5jCkBAIC0wLDAgKzEsMTc5MiBAQAorLyoJJE5ldEJTRDogZ2V0YWRkcmluZm8uYyx2IDEuODIgMjAwNi8wMy8yNSAxMjowOTo0MCBycGF1bG8gRXhwICQJKi8KKy8qCSRLQU1FOiBnZXRhZGRyaW5mby5jLHYgMS4yOSAyMDAwLzA4LzMxIDE3OjI2OjU3IGl0b2p1biBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChDKSAxOTk1LCAxOTk2LCAxOTk3LCBhbmQgMTk5OCBXSURFIFByb2plY3QuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgcHJvamVjdCBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUFJPSkVDVCBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFBST0pFQ1QgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogSXNzdWVzIHRvIGJlIGRpc2N1c3NlZDoKKyAqIC0gVGhyZWFkIHNhZmUtbmVzcyBtdXN0IGJlIGNoZWNrZWQuCisgKiAtIFJldHVybiB2YWx1ZXMuICBUaGVyZSBhcmUgbm9uc3RhbmRhcmQgcmV0dXJuIHZhbHVlcyBkZWZpbmVkIGFuZCB1c2VkCisgKiAgIGluIHRoZSBzb3VyY2UgY29kZS4gIFRoaXMgaXMgYmVjYXVzZSBSRkMyNTUzIGlzIHNpbGVudCBhYm91dCB3aGljaCBlcnJvcgorICogICBjb2RlIG11c3QgYmUgcmV0dXJuZWQgZm9yIHdoaWNoIHNpdHVhdGlvbi4KKyAqIC0gSVB2NCBjbGFzc2Z1bCAoc2hvcnRlbmVkKSBmb3JtLiAgUkZDMjU1MyBpcyBzaWxlbnQgYWJvdXQgaXQuICBYTkVUIDUuMgorICogICBzYXlzIHRvIHVzZSBpbmV0X2F0b24oKSB0byBjb252ZXJ0IElQdjQgbnVtZXJpYyB0byBiaW5hcnkgKGFsb3dzCisgKiAgIGNsYXNzZnVsIGZvcm0gYXMgYSByZXN1bHQpLgorICogICBjdXJyZW50IGNvZGUgLSBkaXNhbGxvdyBjbGFzc2Z1bCBmb3JtIGZvciBJUHY0IChkdWUgdG8gdXNlIG9mIGluZXRfcHRvbikuCisgKiAtIGZyZWVhZGRyaW5mbyhOVUxMKS4gIFJGQzI1NTMgaXMgc2lsZW50IGFib3V0IGl0LiAgWE5FVCA1LjIgc2F5cyBpdCBpcworICogICBpbnZhbGlkLgorICogICBjdXJyZW50IGNvZGUgLSBTRUdWIG9uIGZyZWVhZGRyaW5mbyhOVUxMKQorICogTm90ZToKKyAqIC0gV2UgdXNlIGdldGlwbm9kZWJ5bmFtZSgpIGp1c3QgZm9yIHRocmVhZC1zYWZlbmVzcy4gIFRoZXJlJ3Mgbm8gaW50ZW50CisgKiAgIHRvIGxldCBpdCBkbyBQRl9VTlNQRUMgKGFjdHVhbGx5IHdlIG5ldmVyIHBhc3MgUEZfVU5TUEVDIHRvCisgKiAgIGdldGlwbm9kZWJ5bmFtZSgpLgorICogLSBUaGUgY29kZSBmaWx0ZXJzIG91dCBBRnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsLAorICogICB3aGVuIGdsb2JiaW5nIE5VTEwgaG9zdG5hbWUgKHRvIGxvb3BiYWNrLCBvciB3aWxkY2FyZCkuICBJcyBpdCB0aGUgcmlnaHQKKyAqICAgdGhpbmcgdG8gZG8/ICBXaGF0IGlzIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBwb3N0LVJGQzI1NTMgQUlfQUREUkNPTkZJRworICogICBpbiBhaV9mbGFncz8KKyAqIC0gKHBvc3QtMjU1Mykgc2VtYW50aWNzIG9mIEFJX0FERFJDT05GSUcgaXRzZWxmIGlzIHRvbyB2YWd1ZS4KKyAqICAgKDEpIHdoYXQgc2hvdWxkIHdlIGRvIGFnYWluc3QgbnVtZXJpYyBob3N0bmFtZSAoMikgd2hhdCBzaG91bGQgd2UgZG8KKyAqICAgYWdhaW5zdCBOVUxMIGhvc3RuYW1lICgzKSB3aGF0IGlzIEFJX0FERFJDT05GSUcgaXRzZWxmLiAgQUYgbm90IHJlYWR5PworICogICBub24tbG9vcGJhY2sgYWRkcmVzcyBjb25maWd1cmVkPyAgZ2xvYmFsIGFkZHJlc3MgY29uZmlndXJlZD8KKyAqIC0gVG8gYXZvaWQgc2VhcmNoIG9yZGVyIGlzc3VlLCB3ZSBoYXZlIGEgYmlnIGFtb3VudCBvZiBjb2RlIGR1cGxpY2F0ZQorICogICBmcm9tIGdldGhuYW1hZGRyLmMgYW5kIHNvbWUgb3RoZXIgcGxhY2VzLiAgVGhlIGlzc3VlcyB0aGF0IHRoZXJlJ3Mgbm8KKyAqICAgbG93ZXIgbGF5ZXIgZnVuY3Rpb24gdG8gbG9va3VwICJJUHY0IG9yIElQdjYiIHJlY29yZC4gIENhbGxpbmcKKyAqICAgZ2V0aG9zdGJ5bmFtZTIgZnJvbSBnZXRhZGRyaW5mbyB3aWxsIGVuZCB1cCBpbiB3cm9uZyBzZWFyY2ggb3JkZXIsIGFzCisgKiAgIGZvbGxvd3M6CisgKgktIFRoZSBjb2RlIG1ha2VzIHVzZSBvZiBmb2xsb3dpbmcgY2FsbHMgd2hlbiBhc2tlZCB0byByZXNvbHZlciB3aXRoCisgKgkgIGFpX2ZhbWlseSAgPSBQRl9VTlNQRUM6CisgKgkJZ2V0aXBub2RlYnluYW1lKGhvc3QsIEFGX0lORVQ2KTsKKyAqCQlnZXRpcG5vZGVieW5hbWUoaG9zdCwgQUZfSU5FVCk7CisgKgkgIFRoaXMgd2lsbCByZXN1bHQgaW4gdGhlIGZvbGxvd2luZyBxdWVyaWVzIGlmIHRoZSBub2RlIGlzIGNvbmZpZ3VyZSB0bworICoJICBwcmVmZXIgL2V0Yy9ob3N0cyB0aGFuIEROUzoKKyAqCQlsb29rdXAgL2V0Yy9ob3N0cyBmb3IgSVB2NiBhZGRyZXNzCisgKgkJbG9va3VwIEROUyBmb3IgSVB2NiBhZGRyZXNzCisgKgkJbG9va3VwIC9ldGMvaG9zdHMgZm9yIElQdjQgYWRkcmVzcworICoJCWxvb2t1cCBETlMgZm9yIElQdjQgYWRkcmVzcworICoJICB3aGljaCBtYXkgbm90IG1lZXQgcGVvcGxlJ3MgcmVxdWlyZW1lbnQuCisgKgkgIFRoZSByaWdodCB0aGluZyB0byBoYXBwZW4gaXMgdG8gaGF2ZSB1bmRlcmx5aW5nIGxheWVyIHdoaWNoIGRvZXMKKyAqCSAgUEZfVU5TUEVDIGxvb2t1cCAobG9va3VwIGJvdGgpIGFuZCByZXR1cm4gY2hhaW4gb2YgYWRkcmluZm9zLgorICoJICBUaGlzIHdvdWxkIHJlc3VsdCBpbiBhIGJpdCBvZiBjb2RlIGR1cGxpY2F0ZSB3aXRoIF9kbnNfZ2hieW5hbWUoKSBhbmQKKyAqCSAgZnJpZW5kcy4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorI2luY2x1ZGUgPG5ldC9pZi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpbmNsdWRlIDxzeXNsb2cuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJuc3N3aXRjaC5oIgorCisjZGVmaW5lIFNVQ0NFU1MgMAorI2RlZmluZSBBTlkgMAorI2RlZmluZSBZRVMgMQorI2RlZmluZSBOTyAgMAorCitzdGF0aWMgY29uc3QgY2hhciBpbl9hZGRyYW55W10gPSB7IDAsIDAsIDAsIDAgfTsKK3N0YXRpYyBjb25zdCBjaGFyIGluX2xvb3BiYWNrW10gPSB7IDEyNywgMCwgMCwgMSB9OworI2lmZGVmIElORVQ2CitzdGF0aWMgY29uc3QgY2hhciBpbjZfYWRkcmFueVtdID0geworCTAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAKK307CitzdGF0aWMgY29uc3QgY2hhciBpbjZfbG9vcGJhY2tbXSA9IHsKKwkwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAxCit9OworI2VuZGlmCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWZkIHsKKwlpbnQgYV9hZjsKKwlpbnQgYV9hZGRybGVuOworCWludCBhX3NvY2tsZW47CisJaW50IGFfb2ZmOworCWNvbnN0IGNoYXIgKmFfYWRkcmFueTsKKwljb25zdCBjaGFyICphX2xvb3BiYWNrOworCWludCBhX3Njb3BlZDsKK30gYWZkbCBbXSA9IHsKKyNpZmRlZiBJTkVUNgorCXtQRl9JTkVUNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkciksCisJIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSwKKwkgb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luNiwgc2luNl9hZGRyKSwKKwkgaW42X2FkZHJhbnksIGluNl9sb29wYmFjaywgMX0sCisjZW5kaWYKKwl7UEZfSU5FVCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSwKKwkgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbiksCisJIG9mZnNldG9mKHN0cnVjdCBzb2NrYWRkcl9pbiwgc2luX2FkZHIpLAorCSBpbl9hZGRyYW55LCBpbl9sb29wYmFjaywgMH0sCisJezAsIDAsIDAsIDAsIE5VTEwsIE5VTEwsIDB9LAorfTsKKworc3RydWN0IGV4cGxvcmUgeworCWludCBlX2FmOworCWludCBlX3NvY2t0eXBlOworCWludCBlX3Byb3RvY29sOworCWNvbnN0IGNoYXIgKmVfcHJvdG9zdHI7CisJaW50IGVfd2lsZDsKKyNkZWZpbmUgV0lMRF9BRihleCkJCSgoZXgpLT5lX3dpbGQgJiAweDAxKQorI2RlZmluZSBXSUxEX1NPQ0tUWVBFKGV4KQkoKGV4KS0+ZV93aWxkICYgMHgwMikKKyNkZWZpbmUgV0lMRF9QUk9UT0NPTChleCkJKChleCktPmVfd2lsZCAmIDB4MDQpCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGV4cGxvcmUgZXhwbG9yZVtdID0geworI2lmIDAKKwl7IFBGX0xPQ0FMLCAwLCBBTlksIEFOWSwgTlVMTCwgMHgwMSB9LAorI2VuZGlmCisjaWZkZWYgSU5FVDYKKwl7IFBGX0lORVQ2LCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKKwl7IFBGX0lORVQ2LCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1AsICJ0Y3AiLCAweDA3IH0sCisJeyBQRl9JTkVUNiwgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAorI2VuZGlmCisJeyBQRl9JTkVULCBTT0NLX0RHUkFNLCBJUFBST1RPX1VEUCwgInVkcCIsIDB4MDcgfSwKKwl7IFBGX0lORVQsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKKwl7IFBGX0lORVQsIFNPQ0tfUkFXLCBBTlksIE5VTEwsIDB4MDUgfSwKKwl7IFBGX1VOU1BFQywgU09DS19ER1JBTSwgSVBQUk9UT19VRFAsICJ1ZHAiLCAweDA3IH0sCisJeyBQRl9VTlNQRUMsIFNPQ0tfU1RSRUFNLCBJUFBST1RPX1RDUCwgInRjcCIsIDB4MDcgfSwKKwl7IFBGX1VOU1BFQywgU09DS19SQVcsIEFOWSwgTlVMTCwgMHgwNSB9LAorCXsgLTEsIDAsIDAsIE5VTEwsIDAgfSwKK307CisKKyNpZmRlZiBJTkVUNgorI2RlZmluZSBQVE9OX01BWAkxNgorI2Vsc2UKKyNkZWZpbmUgUFRPTl9NQVgJNAorI2VuZGlmCisKK3N0YXRpYyBjb25zdCBuc19zcmMgZGVmYXVsdF9kbnNfZmlsZXNbXSA9IHsKKwl7IE5TU1JDX0ZJTEVTLCAJTlNfU1VDQ0VTUyB9LAorCXsgTlNTUkNfRE5TLCAJTlNfU1VDQ0VTUyB9LAorCXsgMCwgMCB9Cit9OworCisjZGVmaW5lIE1BWFBBQ0tFVAkoNjQqMTAyNCkKKwordHlwZWRlZiB1bmlvbiB7CisJSEVBREVSIGhkcjsKKwl1X2NoYXIgYnVmW01BWFBBQ0tFVF07Cit9IHF1ZXJ5YnVmOworCitzdHJ1Y3QgcmVzX3RhcmdldCB7CisJc3RydWN0IHJlc190YXJnZXQgKm5leHQ7CisJY29uc3QgY2hhciAqbmFtZTsJLyogZG9tYWluIG5hbWUgKi8KKwlpbnQgcWNsYXNzLCBxdHlwZTsJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwl1X2NoYXIgKmFuc3dlcjsJCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJaW50IGFuc2xlbjsJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLworCWludCBuOwkJCS8qIHJlc3VsdCBsZW5ndGggKi8KK307CisKK3N0YXRpYyBpbnQgc3RyMm51bWJlcihjb25zdCBjaGFyICopOworc3RhdGljIGludCBleHBsb3JlX2ZxZG4oY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVsbChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitzdGF0aWMgaW50IGV4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLAorCWNvbnN0IGNoYXIgKiwgc3RydWN0IGFkZHJpbmZvICoqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBleHBsb3JlX251bWVyaWNfc2NvcGUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKiwKKwljb25zdCBjaGFyICosIHN0cnVjdCBhZGRyaW5mbyAqKik7CitzdGF0aWMgaW50IGdldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJc3RydWN0IGFkZHJpbmZvICosIGNvbnN0IGNoYXIgKik7CitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICpnZXRfYWkoY29uc3Qgc3RydWN0IGFkZHJpbmZvICosCisJY29uc3Qgc3RydWN0IGFmZCAqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBnZXRfcG9ydG1hdGNoKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqLCBjb25zdCBjaGFyICopOworc3RhdGljIGludCBnZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKiwgY29uc3QgY2hhciAqLCBpbnQpOworc3RhdGljIGNvbnN0IHN0cnVjdCBhZmQgKmZpbmRfYWZkKGludCk7CisjaWZkZWYgSU5FVDYKK3N0YXRpYyBpbnQgaXA2X3N0cjJzY29wZWlkKGNoYXIgKiwgc3RydWN0IHNvY2thZGRyX2luNiAqLCB1X2ludDMyX3QgKik7CisjZW5kaWYKKworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqZ2V0YW5zd2VyKGNvbnN0IHF1ZXJ5YnVmICosIGludCwgY29uc3QgY2hhciAqLCBpbnQsCisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworc3RhdGljIHZvaWQgYWlzb3J0KHN0cnVjdCBhZGRyaW5mbyAqcywgcmVzX3N0YXRlIHJlcyk7CitzdGF0aWMgaW50IF9kbnNfZ2V0YWRkcmluZm8odm9pZCAqLCB2b2lkICosIHZhX2xpc3QpOworc3RhdGljIHZvaWQgX3NldGh0ZW50KEZJTEUgKiopOworc3RhdGljIHZvaWQgX2VuZGh0ZW50KEZJTEUgKiopOworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqX2dldGh0ZW50KEZJTEUgKiosIGNvbnN0IGNoYXIgKiwKKyAgICBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKik7CitzdGF0aWMgaW50IF9maWxlc19nZXRhZGRyaW5mbyh2b2lkICosIHZvaWQgKiwgdmFfbGlzdCk7CisKK3N0YXRpYyBpbnQgcmVzX3F1ZXJ5Tihjb25zdCBjaGFyICosIHN0cnVjdCByZXNfdGFyZ2V0ICosIHJlc19zdGF0ZSk7CitzdGF0aWMgaW50IHJlc19zZWFyY2hOKGNvbnN0IGNoYXIgKiwgc3RydWN0IHJlc190YXJnZXQgKiwgcmVzX3N0YXRlKTsKK3N0YXRpYyBpbnQgcmVzX3F1ZXJ5ZG9tYWluTihjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKKwlzdHJ1Y3QgcmVzX3RhcmdldCAqLCByZXNfc3RhdGUpOworCitzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0IGFpX2Vycmxpc3RbXSA9IHsKKwkiU3VjY2VzcyIsCisJIkFkZHJlc3MgZmFtaWx5IGZvciBob3N0bmFtZSBub3Qgc3VwcG9ydGVkIiwJLyogRUFJX0FERFJGQU1JTFkgKi8KKwkiVGVtcG9yYXJ5IGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwJCS8qIEVBSV9BR0FJTiAgICAgICovCisJIkludmFsaWQgdmFsdWUgZm9yIGFpX2ZsYWdzIiwJCSAgICAgICAJLyogRUFJX0JBREZMQUdTICAgKi8KKwkiTm9uLXJlY292ZXJhYmxlIGZhaWx1cmUgaW4gbmFtZSByZXNvbHV0aW9uIiwgCS8qIEVBSV9GQUlMICAgICAgICovCisJImFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkIiwJCQkvKiBFQUlfRkFNSUxZICAgICAqLworCSJNZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlIiwgCQkJLyogRUFJX01FTU9SWSAgICAgKi8KKwkiTm8gYWRkcmVzcyBhc3NvY2lhdGVkIHdpdGggaG9zdG5hbWUiLCAJCS8qIEVBSV9OT0RBVEEgICAgICovCisJImhvc3RuYW1lIG5vciBzZXJ2bmFtZSBwcm92aWRlZCwgb3Igbm90IGtub3duIiwJLyogRUFJX05PTkFNRSAgICAgKi8KKwkic2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUiLAkvKiBFQUlfU0VSVklDRSAgICAqLworCSJhaV9zb2NrdHlwZSBub3Qgc3VwcG9ydGVkIiwgCQkJLyogRUFJX1NPQ0tUWVBFICAgKi8KKwkiU3lzdGVtIGVycm9yIHJldHVybmVkIGluIGVycm5vIiwgCQkvKiBFQUlfU1lTVEVNICAgICAqLworCSJJbnZhbGlkIHZhbHVlIGZvciBoaW50cyIsCQkJLyogRUFJX0JBREhJTlRTCSAgKi8KKwkiUmVzb2x2ZWQgcHJvdG9jb2wgaXMgdW5rbm93biIsCQkJLyogRUFJX1BST1RPQ09MICAgKi8KKwkiQXJndW1lbnQgYnVmZmVyIG92ZXJmbG93IiwJCQkvKiBFQUlfT1ZFUkZMT1cgICAqLworCSJVbmtub3duIGVycm9yIiwgCQkJCS8qIEVBSV9NQVggICAgICAgICovCit9OworCisvKiBYWFggbWFjcm9zIHRoYXQgbWFrZSBleHRlcm5hbCByZWZlcmVuY2UgaXMgQkFELiAqLworCisjZGVmaW5lIEdFVF9BSShhaSwgYWZkLCBhZGRyKSAJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yLCBhbmQgbGFiZWwgZnJlZSAqLyAJXAorCShhaSkgPSBnZXRfYWkocGFpLCAoYWZkKSwgKGFkZHIpKTsgCQkJXAorCWlmICgoYWkpID09IE5VTEwpIHsgCQkJCQlcCisJCWVycm9yID0gRUFJX01FTU9SWTsgCQkJCVwKKwkJZ290byBmcmVlOyAJCQkJCVwKKwl9IAkJCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBHRVRfUE9SVChhaSwgc2VydikgCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IgYW5kIGxhYmVsIGZyZWUgKi8gCQlcCisJZXJyb3IgPSBnZXRfcG9ydCgoYWkpLCAoc2VydiksIDApOyAJCQlcCisJaWYgKGVycm9yICE9IDApIAkJCQkJXAorCQlnb3RvIGZyZWU7IAkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgR0VUX0NBTk9OTkFNRShhaSwgc3RyKSAJCQkJCVwKK2RvIHsgCQkJCQkJCQlcCisJLyogZXh0ZXJuYWwgcmVmZXJlbmNlOiBwYWksIGVycm9yIGFuZCBsYWJlbCBmcmVlICovIAlcCisJZXJyb3IgPSBnZXRfY2Fub25uYW1lKHBhaSwgKGFpKSwgKHN0cikpOyAJCVwKKwlpZiAoZXJyb3IgIT0gMCkgCQkJCQlcCisJCWdvdG8gZnJlZTsgCQkJCQlcCit9IHdoaWxlICgvKkNPTlNUQ09ORCovMCkKKworI2RlZmluZSBFUlIoZXJyKSAJCQkJCQlcCitkbyB7IAkJCQkJCQkJXAorCS8qIGV4dGVybmFsIHJlZmVyZW5jZTogZXJyb3IsIGFuZCBsYWJlbCBiYWQgKi8gCQlcCisJZXJyb3IgPSAoZXJyKTsgCQkJCQkJXAorCWdvdG8gYmFkOyAJCQkJCQlcCisJLypOT1RSRUFDSEVEKi8gCQkJCQkJXAorfSB3aGlsZSAoLypDT05TVENPTkQqLzApCisKKyNkZWZpbmUgTUFUQ0hfRkFNSUxZKHgsIHksIHcpIAkJCQkJCVwKKwkoKHgpID09ICh5KSB8fCAoLypDT05TVENPTkQqLyh3KSAmJiAoKHgpID09IFBGX1VOU1BFQyB8fCAJXAorCSAgICAoeSkgPT0gUEZfVU5TUEVDKSkpCisjZGVmaW5lIE1BVENIKHgsIHksIHcpIAkJCQkJCQlcCisJKCh4KSA9PSAoeSkgfHwgKC8qQ09OU1RDT05EKi8odykgJiYgKCh4KSA9PSBBTlkgfHwgKHkpID09IEFOWSkpKQorCitjb25zdCBjaGFyICoKK2dhaV9zdHJlcnJvcihpbnQgZWNvZGUpCit7CisJaWYgKGVjb2RlIDwgMCB8fCBlY29kZSA+IEVBSV9NQVgpCisJCWVjb2RlID0gRUFJX01BWDsKKwlyZXR1cm4gYWlfZXJybGlzdFtlY29kZV07Cit9CisKK3ZvaWQKK2ZyZWVhZGRyaW5mbyhzdHJ1Y3QgYWRkcmluZm8gKmFpKQoreworCXN0cnVjdCBhZGRyaW5mbyAqbmV4dDsKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKworCWRvIHsKKwkJbmV4dCA9IGFpLT5haV9uZXh0OworCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSkKKwkJCWZyZWUoYWktPmFpX2Nhbm9ubmFtZSk7CisJCS8qIG5vIG5lZWQgdG8gZnJlZShhaS0+YWlfYWRkcikgKi8KKwkJZnJlZShhaSk7CisJCWFpID0gbmV4dDsKKwl9IHdoaWxlIChhaSk7Cit9CisKK3N0YXRpYyBpbnQKK3N0cjJudW1iZXIoY29uc3QgY2hhciAqcCkKK3sKKwljaGFyICplcDsKKwl1bnNpZ25lZCBsb25nIHY7CisKKwlhc3NlcnQocCAhPSBOVUxMKTsKKworCWlmICgqcCA9PSAnXDAnKQorCQlyZXR1cm4gLTE7CisJZXAgPSBOVUxMOworCWVycm5vID0gMDsKKwl2ID0gc3RydG91bChwLCAmZXAsIDEwKTsKKwlpZiAoZXJybm8gPT0gMCAmJiBlcCAmJiAqZXAgPT0gJ1wwJyAmJiB2IDw9IFVJTlRfTUFYKQorCQlyZXR1cm4gdjsKKwllbHNlCisJCXJldHVybiAtMTsKK30KKworaW50CitnZXRhZGRyaW5mbyhjb25zdCBjaGFyICpob3N0bmFtZSwgY29uc3QgY2hhciAqc2Vydm5hbWUsCisgICAgY29uc3Qgc3RydWN0IGFkZHJpbmZvICpoaW50cywgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBhZGRyaW5mbyBhaTsKKwlzdHJ1Y3QgYWRkcmluZm8gYWkwOworCXN0cnVjdCBhZGRyaW5mbyAqcGFpOworCWNvbnN0IHN0cnVjdCBleHBsb3JlICpleDsKKworCS8qIGhvc3RuYW1lIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCS8qIHNlcnZuYW1lIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCS8qIGhpbnRzIGlzIGFsbG93ZWQgdG8gYmUgTlVMTCAqLworCWFzc2VydChyZXMgIT0gTlVMTCk7CisKKwltZW1zZXQoJnNlbnRpbmVsLCAwLCBzaXplb2Yoc2VudGluZWwpKTsKKwljdXIgPSAmc2VudGluZWw7CisJcGFpID0gJmFpOworCXBhaS0+YWlfZmxhZ3MgPSAwOworCXBhaS0+YWlfZmFtaWx5ID0gUEZfVU5TUEVDOworCXBhaS0+YWlfc29ja3R5cGUgPSBBTlk7CisJcGFpLT5haV9wcm90b2NvbCA9IEFOWTsKKwlwYWktPmFpX2FkZHJsZW4gPSAwOworCXBhaS0+YWlfY2Fub25uYW1lID0gTlVMTDsKKwlwYWktPmFpX2FkZHIgPSBOVUxMOworCXBhaS0+YWlfbmV4dCA9IE5VTEw7CisKKwlpZiAoaG9zdG5hbWUgPT0gTlVMTCAmJiBzZXJ2bmFtZSA9PSBOVUxMKQorCQlyZXR1cm4gRUFJX05PTkFNRTsKKwlpZiAoaGludHMpIHsKKwkJLyogZXJyb3IgY2hlY2sgZm9yIGhpbnRzICovCisJCWlmIChoaW50cy0+YWlfYWRkcmxlbiB8fCBoaW50cy0+YWlfY2Fub25uYW1lIHx8CisJCSAgICBoaW50cy0+YWlfYWRkciB8fCBoaW50cy0+YWlfbmV4dCkKKwkJCUVSUihFQUlfQkFESElOVFMpOyAvKiB4eHggKi8KKwkJaWYgKGhpbnRzLT5haV9mbGFncyAmIH5BSV9NQVNLKQorCQkJRVJSKEVBSV9CQURGTEFHUyk7CisJCXN3aXRjaCAoaGludHMtPmFpX2ZhbWlseSkgeworCQljYXNlIFBGX1VOU1BFQzoKKwkJY2FzZSBQRl9JTkVUOgorI2lmZGVmIElORVQ2CisJCWNhc2UgUEZfSU5FVDY6CisjZW5kaWYKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJRVJSKEVBSV9GQU1JTFkpOworCQl9CisJCW1lbWNweShwYWksIGhpbnRzLCBzaXplb2YoKnBhaSkpOworCisJCS8qCisJCSAqIGlmIGJvdGggc29ja3R5cGUvcHJvdG9jb2wgYXJlIHNwZWNpZmllZCwgY2hlY2sgaWYgdGhleQorCQkgKiBhcmUgbWVhbmluZ2Z1bCBjb21iaW5hdGlvbi4KKwkJICovCisJCWlmIChwYWktPmFpX3NvY2t0eXBlICE9IEFOWSAmJiBwYWktPmFpX3Byb3RvY29sICE9IEFOWSkgeworCQkJZm9yIChleCA9IGV4cGxvcmU7IGV4LT5lX2FmID49IDA7IGV4KyspIHsKKwkJCQlpZiAocGFpLT5haV9mYW1pbHkgIT0gZXgtPmVfYWYpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChleC0+ZV9zb2NrdHlwZSA9PSBBTlkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChleC0+ZV9wcm90b2NvbCA9PSBBTlkpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChwYWktPmFpX3NvY2t0eXBlID09IGV4LT5lX3NvY2t0eXBlCisJCQkJICYmIHBhaS0+YWlfcHJvdG9jb2wgIT0gZXgtPmVfcHJvdG9jb2wpIHsKKwkJCQkJRVJSKEVBSV9CQURISU5UUyk7CisJCQkJfQorCQkJfQorCQl9CisJfQorCisJLyoKKwkgKiBjaGVjayBmb3Igc3BlY2lhbCBjYXNlcy4gICgxKSBudW1lcmljIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQgaWYKKwkgKiBzb2NrdHlwZS9wcm90b2NvbCBhcmUgbGVmdCB1bnNwZWNpZmllZC4gKDIpIHNlcnZuYW1lIGlzIGRpc2FsbG93ZWQKKwkgKiBmb3IgcmF3IGFuZCBvdGhlciBpbmV0eyw2fSBzb2NrZXRzLgorCSAqLworCWlmIChNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIFBGX0lORVQsIDEpCisjaWZkZWYgUEZfSU5FVDYKKwkgfHwgTUFUQ0hfRkFNSUxZKHBhaS0+YWlfZmFtaWx5LCBQRl9JTkVUNiwgMSkKKyNlbmRpZgorCSAgICApIHsKKwkJYWkwID0gKnBhaTsJLyogYmFja3VwICpwYWkgKi8KKworCQlpZiAocGFpLT5haV9mYW1pbHkgPT0gUEZfVU5TUEVDKSB7CisjaWZkZWYgUEZfSU5FVDYKKwkJCXBhaS0+YWlfZmFtaWx5ID0gUEZfSU5FVDY7CisjZWxzZQorCQkJcGFpLT5haV9mYW1pbHkgPSBQRl9JTkVUOworI2VuZGlmCisJCX0KKwkJZXJyb3IgPSBnZXRfcG9ydG1hdGNoKHBhaSwgc2Vydm5hbWUpOworCQlpZiAoZXJyb3IpCisJCQlFUlIoZXJyb3IpOworCisJCSpwYWkgPSBhaTA7CisJfQorCisJYWkwID0gKnBhaTsKKworCS8qIE5VTEwgaG9zdG5hbWUsIG9yIG51bWVyaWMgaG9zdG5hbWUgKi8KKwlmb3IgKGV4ID0gZXhwbG9yZTsgZXgtPmVfYWYgPj0gMDsgZXgrKykgeworCQkqcGFpID0gYWkwOworCisJCS8qIFBGX1VOU1BFQyBlbnRyaWVzIGFyZSBwcmVwYXJlZCBmb3IgRE5TIHF1ZXJpZXMgb25seSAqLworCQlpZiAoZXgtPmVfYWYgPT0gUEZfVU5TUEVDKQorCQkJY29udGludWU7CisKKwkJaWYgKCFNQVRDSF9GQU1JTFkocGFpLT5haV9mYW1pbHksIGV4LT5lX2FmLCBXSUxEX0FGKGV4KSkpCisJCQljb250aW51ZTsKKwkJaWYgKCFNQVRDSChwYWktPmFpX3NvY2t0eXBlLCBleC0+ZV9zb2NrdHlwZSwgV0lMRF9TT0NLVFlQRShleCkpKQorCQkJY29udGludWU7CisJCWlmICghTUFUQ0gocGFpLT5haV9wcm90b2NvbCwgZXgtPmVfcHJvdG9jb2wsIFdJTERfUFJPVE9DT0woZXgpKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMpCisJCQlwYWktPmFpX2ZhbWlseSA9IGV4LT5lX2FmOworCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBBTlkgJiYgZXgtPmVfc29ja3R5cGUgIT0gQU5ZKQorCQkJcGFpLT5haV9zb2NrdHlwZSA9IGV4LT5lX3NvY2t0eXBlOworCQlpZiAocGFpLT5haV9wcm90b2NvbCA9PSBBTlkgJiYgZXgtPmVfcHJvdG9jb2wgIT0gQU5ZKQorCQkJcGFpLT5haV9wcm90b2NvbCA9IGV4LT5lX3Byb3RvY29sOworCisJCWlmIChob3N0bmFtZSA9PSBOVUxMKQorCQkJZXJyb3IgPSBleHBsb3JlX251bGwocGFpLCBzZXJ2bmFtZSwgJmN1ci0+YWlfbmV4dCk7CisJCWVsc2UKKwkJCWVycm9yID0gZXhwbG9yZV9udW1lcmljX3Njb3BlKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLAorCQkJICAgICZjdXItPmFpX25leHQpOworCisJCWlmIChlcnJvcikKKwkJCWdvdG8gZnJlZTsKKworCQl3aGlsZSAoY3VyLT5haV9uZXh0KQorCQkJY3VyID0gY3VyLT5haV9uZXh0OworCX0KKworCS8qCisJICogWFhYCisJICogSWYgbnVtZXJpYyByZXByZXNlbnRhdGlvbiBvZiBBRjEgY2FuIGJlIGludGVycHJldGVkIGFzIEZRRE4KKwkgKiByZXByZXNlbnRhdGlvbiBvZiBBRjIsIHdlIG5lZWQgdG8gdGhpbmsgYWdhaW4gYWJvdXQgdGhlIGNvZGUgYmVsb3cuCisJICovCisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWdvdG8gZ29vZDsKKworCWlmIChob3N0bmFtZSA9PSBOVUxMKQorCQlFUlIoRUFJX05PREFUQSk7CisJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9OVU1FUklDSE9TVCkKKwkJRVJSKEVBSV9OT05BTUUpOworCisJLyoKKwkgKiBob3N0bmFtZSBhcyBhbHBoYWJldGljYWwgbmFtZS4KKwkgKiB3ZSB3b3VsZCBsaWtlIHRvIHByZWZlciBBRl9JTkVUNiB0aGFuIEFGX0lORVQsIHNvIHdlJ2xsIG1ha2UgYQorCSAqIG91dGVyIGxvb3AgYnkgQUZzLgorCSAqLworCWZvciAoZXggPSBleHBsb3JlOyBleC0+ZV9hZiA+PSAwOyBleCsrKSB7CisJCSpwYWkgPSBhaTA7CisKKwkJLyogcmVxdWlyZSBleGFjdCBtYXRjaCBmb3IgZmFtaWx5IGZpZWxkICovCisJCWlmIChwYWktPmFpX2ZhbWlseSAhPSBleC0+ZV9hZikKKwkJCWNvbnRpbnVlOworCisJCWlmICghTUFUQ0gocGFpLT5haV9zb2NrdHlwZSwgZXgtPmVfc29ja3R5cGUsCisJCQkJV0lMRF9TT0NLVFlQRShleCkpKSB7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIU1BVENIKHBhaS0+YWlfcHJvdG9jb2wsIGV4LT5lX3Byb3RvY29sLAorCQkJCVdJTERfUFJPVE9DT0woZXgpKSkgeworCQkJY29udGludWU7CisJCX0KKworCQlpZiAocGFpLT5haV9zb2NrdHlwZSA9PSBBTlkgJiYgZXgtPmVfc29ja3R5cGUgIT0gQU5ZKQorCQkJcGFpLT5haV9zb2NrdHlwZSA9IGV4LT5lX3NvY2t0eXBlOworCQlpZiAocGFpLT5haV9wcm90b2NvbCA9PSBBTlkgJiYgZXgtPmVfcHJvdG9jb2wgIT0gQU5ZKQorCQkJcGFpLT5haV9wcm90b2NvbCA9IGV4LT5lX3Byb3RvY29sOworCisJCWVycm9yID0gZXhwbG9yZV9mcWRuKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLAorCQkJJmN1ci0+YWlfbmV4dCk7CisKKwkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQljdXIgPSBjdXItPmFpX25leHQ7CisJfQorCisJLyogWFhYICovCisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWVycm9yID0gMDsKKworCWlmIChlcnJvcikKKwkJZ290byBmcmVlOworCWlmIChlcnJvciA9PSAwKSB7CisJCWlmIChzZW50aW5lbC5haV9uZXh0KSB7CisgZ29vZDoKKwkJCSpyZXMgPSBzZW50aW5lbC5haV9uZXh0OworCQkJcmV0dXJuIFNVQ0NFU1M7CisJCX0gZWxzZQorCQkJZXJyb3IgPSBFQUlfRkFJTDsKKwl9CisgZnJlZToKKyBiYWQ6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwkqcmVzID0gTlVMTDsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBGUUROIGhvc3RuYW1lLCBETlMgbG9va3VwCisgKi8KK3N0YXRpYyBpbnQKK2V4cGxvcmVfZnFkbihjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcykKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKnJlc3VsdDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgZXJyb3IgPSAwOworCXN0YXRpYyBjb25zdCBuc19kdGFiIGR0YWJbXSA9IHsKKwkJTlNfRklMRVNfQ0IoX2ZpbGVzX2dldGFkZHJpbmZvLCBOVUxMKQorCQl7IE5TU1JDX0ROUywgX2Ruc19nZXRhZGRyaW5mbywgTlVMTCB9LAkvKiBmb3JjZSAtREhFU0lPRCAqLworCQlOU19OSVNfQ0IoX3lwX2dldGFkZHJpbmZvLCBOVUxMKQorCQl7IDAsIDAsIDAgfQorCX07CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJcmVzdWx0ID0gTlVMTDsKKworCS8qCisJICogaWYgdGhlIHNlcnZuYW1lIGRvZXMgbm90IG1hdGNoIHNvY2t0eXBlL3Byb3RvY29sLCBpZ25vcmUgaXQuCisJICovCisJaWYgKGdldF9wb3J0bWF0Y2gocGFpLCBzZXJ2bmFtZSkgIT0gMCkKKwkJcmV0dXJuIDA7CisKKwlzd2l0Y2ggKG5zZGlzcGF0Y2goJnJlc3VsdCwgZHRhYiwgTlNEQl9IT1NUUywgImdldGFkZHJpbmZvIiwKKwkJCWRlZmF1bHRfZG5zX2ZpbGVzLCBob3N0bmFtZSwgcGFpKSkgeworCWNhc2UgTlNfVFJZQUdBSU46CisJCWVycm9yID0gRUFJX0FHQUlOOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19VTkFWQUlMOgorCQllcnJvciA9IEVBSV9GQUlMOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19OT1RGT1VORDoKKwkJZXJyb3IgPSBFQUlfTk9EQVRBOworCQlnb3RvIGZyZWU7CisJY2FzZSBOU19TVUNDRVNTOgorCQllcnJvciA9IDA7CisJCWZvciAoY3VyID0gcmVzdWx0OyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworCQkJR0VUX1BPUlQoY3VyLCBzZXJ2bmFtZSk7CisJCQkvKiBjYW5vbm5hbWUgc2hvdWxkIGJlIGZpbGxlZCBhbHJlYWR5ICovCisJCX0KKwkJYnJlYWs7CisJfQorCisJKnJlcyA9IHJlc3VsdDsKKworCXJldHVybiAwOworCitmcmVlOgorCWlmIChyZXN1bHQpCisJCWZyZWVhZGRyaW5mbyhyZXN1bHQpOworCXJldHVybiBlcnJvcjsKK30KKworLyoKKyAqIGhvc3RuYW1lID09IE5VTEwuCisgKiBwYXNzaXZlIHNvY2tldCAtPiBhbnlhZGRyICgwLjAuMC4wIG9yIDo6KQorICogbm9uLXBhc3NpdmUgc29ja2V0IC0+IGxvY2FsaG9zdCAoMTI3LjAuMC4xIG9yIDo6MSkKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udWxsKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwKKyAgICBzdHJ1Y3QgYWRkcmluZm8gKipyZXMpCit7CisJaW50IHM7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCXN0cnVjdCBhZGRyaW5mbyAqY3VyOworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbDsKKwlpbnQgZXJyb3I7CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIHNlcnZuYW1lIG1heSBiZSBOVUxMICovCisJYXNzZXJ0KHJlcyAhPSBOVUxMKTsKKworCSpyZXMgPSBOVUxMOworCXNlbnRpbmVsLmFpX25leHQgPSBOVUxMOworCWN1ciA9ICZzZW50aW5lbDsKKworCS8qCisJICogZmlsdGVyIG91dCBBRnMgdGhhdCBhcmUgbm90IHN1cHBvcnRlZCBieSB0aGUga2VybmVsCisJICogWFhYIGVycm5vPworCSAqLworCXMgPSBzb2NrZXQocGFpLT5haV9mYW1pbHksIFNPQ0tfREdSQU0sIDApOworCWlmIChzIDwgMCkgeworCQlpZiAoZXJybm8gIT0gRU1GSUxFKQorCQkJcmV0dXJuIDA7CisJfSBlbHNlCisJCWNsb3NlKHMpOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9QQVNTSVZFKSB7CisJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgYWZkLT5hX2FkZHJhbnkpOworCQkvKiB4eHggbWVhbmluZ2xlc3M/CisJCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAiYW55YWRkciIpOworCQkgKi8KKwkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJfSBlbHNlIHsKKwkJR0VUX0FJKGN1ci0+YWlfbmV4dCwgYWZkLCBhZmQtPmFfbG9vcGJhY2spOworCQkvKiB4eHggbWVhbmluZ2xlc3M/CisJCSAqIEdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCAibG9jYWxob3N0Iik7CisJCSAqLworCQlHRVRfUE9SVChjdXItPmFpX25leHQsIHNlcnZuYW1lKTsKKwl9CisJY3VyID0gY3VyLT5haV9uZXh0OworCisJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7CisJcmV0dXJuIDA7CisKK2ZyZWU6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBudW1lcmljIGhvc3RuYW1lCisgKi8KK3N0YXRpYyBpbnQKK2V4cGxvcmVfbnVtZXJpYyhjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3QgY2hhciAqaG9zdG5hbWUsCisgICAgY29uc3QgY2hhciAqc2Vydm5hbWUsIHN0cnVjdCBhZGRyaW5mbyAqKnJlcywgY29uc3QgY2hhciAqY2Fub25uYW1lKQoreworCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlzdHJ1Y3QgYWRkcmluZm8gc2VudGluZWw7CisJaW50IGVycm9yOworCWNoYXIgcHRvbltQVE9OX01BWF07CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJKnJlcyA9IE5VTEw7CisJc2VudGluZWwuYWlfbmV4dCA9IE5VTEw7CisJY3VyID0gJnNlbnRpbmVsOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJc3dpdGNoIChhZmQtPmFfYWYpIHsKKyNpZiAwIC8qWC9PcGVuIHNwZWMqLworCWNhc2UgQUZfSU5FVDoKKwkJaWYgKGluZXRfYXRvbihob3N0bmFtZSwgKHN0cnVjdCBpbl9hZGRyICopcHRvbikgPT0gMSkgeworCQkJaWYgKHBhaS0+YWlfZmFtaWx5ID09IGFmZC0+YV9hZiB8fAorCQkJICAgIHBhaS0+YWlfZmFtaWx5ID09IFBGX1VOU1BFQyAvKj8qLykgeworCQkJCUdFVF9BSShjdXItPmFpX25leHQsIGFmZCwgcHRvbik7CisJCQkJR0VUX1BPUlQoY3VyLT5haV9uZXh0LCBzZXJ2bmFtZSk7CisJCQkJaWYgKChwYWktPmFpX2ZsYWdzICYgQUlfQ0FOT05OQU1FKSkgeworCQkJCQkvKgorCQkJCQkgKiBTZXQgdGhlIG51bWVyaWMgYWRkcmVzcyBpdHNlbGYgYXMKKwkJCQkJICogdGhlIGNhbm9uaWNhbCBuYW1lLCBiYXNlZCBvbiBhCisJCQkJCSAqIGNsYXJpZmljYXRpb24gaW4gcmZjMjU1M2Jpcy0wMy4KKwkJCQkJICovCisJCQkJCUdFVF9DQU5PTk5BTUUoY3VyLT5haV9uZXh0LCBjYW5vbm5hbWUpOworCQkJCX0KKwkJCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKKwkJCQkJY3VyID0gY3VyLT5haV9uZXh0OworCQkJfSBlbHNlCisJCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCisJCX0KKwkJYnJlYWs7CisjZW5kaWYKKwlkZWZhdWx0OgorCQlpZiAoaW5ldF9wdG9uKGFmZC0+YV9hZiwgaG9zdG5hbWUsIHB0b24pID09IDEpIHsKKwkJCWlmIChwYWktPmFpX2ZhbWlseSA9PSBhZmQtPmFfYWYgfHwKKwkJCSAgICBwYWktPmFpX2ZhbWlseSA9PSBQRl9VTlNQRUMgLyo/Ki8pIHsKKwkJCQlHRVRfQUkoY3VyLT5haV9uZXh0LCBhZmQsIHB0b24pOworCQkJCUdFVF9QT1JUKGN1ci0+YWlfbmV4dCwgc2Vydm5hbWUpOworCQkJCWlmICgocGFpLT5haV9mbGFncyAmIEFJX0NBTk9OTkFNRSkpIHsKKwkJCQkJLyoKKwkJCQkJICogU2V0IHRoZSBudW1lcmljIGFkZHJlc3MgaXRzZWxmIGFzCisJCQkJCSAqIHRoZSBjYW5vbmljYWwgbmFtZSwgYmFzZWQgb24gYQorCQkJCQkgKiBjbGFyaWZpY2F0aW9uIGluIHJmYzI1NTNiaXMtMDMuCisJCQkJCSAqLworCQkJCQlHRVRfQ0FOT05OQU1FKGN1ci0+YWlfbmV4dCwgY2Fub25uYW1lKTsKKwkJCQl9CisJCQkJd2hpbGUgKGN1ci0+YWlfbmV4dCkKKwkJCQkJY3VyID0gY3VyLT5haV9uZXh0OworCQkJfSBlbHNlCisJCQkJRVJSKEVBSV9GQU1JTFkpOwkvKnh4eCovCisJCX0KKwkJYnJlYWs7CisJfQorCisJKnJlcyA9IHNlbnRpbmVsLmFpX25leHQ7CisJcmV0dXJuIDA7CisKK2ZyZWU6CitiYWQ6CisJaWYgKHNlbnRpbmVsLmFpX25leHQpCisJCWZyZWVhZGRyaW5mbyhzZW50aW5lbC5haV9uZXh0KTsKKwlyZXR1cm4gZXJyb3I7Cit9CisKKy8qCisgKiBudW1lcmljIGhvc3RuYW1lIHdpdGggc2NvcGUKKyAqLworc3RhdGljIGludAorZXhwbG9yZV9udW1lcmljX3Njb3BlKGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpLCBjb25zdCBjaGFyICpob3N0bmFtZSwKKyAgICBjb25zdCBjaGFyICpzZXJ2bmFtZSwgc3RydWN0IGFkZHJpbmZvICoqcmVzKQoreworI2lmICFkZWZpbmVkKFNDT1BFX0RFTElNSVRFUikgfHwgIWRlZmluZWQoSU5FVDYpCisJcmV0dXJuIGV4cGxvcmVfbnVtZXJpYyhwYWksIGhvc3RuYW1lLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7CisjZWxzZQorCWNvbnN0IHN0cnVjdCBhZmQgKmFmZDsKKwlzdHJ1Y3QgYWRkcmluZm8gKmN1cjsKKwlpbnQgZXJyb3I7CisJY2hhciAqY3AsICpob3N0bmFtZTIgPSBOVUxMLCAqc2NvcGUsICphZGRyOworCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7CisKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCS8qIGhvc3RuYW1lIG1heSBiZSBOVUxMICovCisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKwlhc3NlcnQocmVzICE9IE5VTEwpOworCisJLyoKKwkgKiBpZiB0aGUgc2Vydm5hbWUgZG9lcyBub3QgbWF0Y2ggc29ja3R5cGUvcHJvdG9jb2wsIGlnbm9yZSBpdC4KKwkgKi8KKwlpZiAoZ2V0X3BvcnRtYXRjaChwYWksIHNlcnZuYW1lKSAhPSAwKQorCQlyZXR1cm4gMDsKKworCWFmZCA9IGZpbmRfYWZkKHBhaS0+YWlfZmFtaWx5KTsKKwlpZiAoYWZkID09IE5VTEwpCisJCXJldHVybiAwOworCisJaWYgKCFhZmQtPmFfc2NvcGVkKQorCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKworCWNwID0gc3RyY2hyKGhvc3RuYW1lLCBTQ09QRV9ERUxJTUlURVIpOworCWlmIChjcCA9PSBOVUxMKQorCQlyZXR1cm4gZXhwbG9yZV9udW1lcmljKHBhaSwgaG9zdG5hbWUsIHNlcnZuYW1lLCByZXMsIGhvc3RuYW1lKTsKKworCS8qCisJICogSGFuZGxlIHNwZWNpYWwgY2FzZSBvZiA8c2NvcGVkX2FkZHJlc3M+PGRlbGltaXRlcj48c2NvcGUgaWQ+CisJICovCisJaG9zdG5hbWUyID0gc3RyZHVwKGhvc3RuYW1lKTsKKwlpZiAoaG9zdG5hbWUyID09IE5VTEwpCisJCXJldHVybiBFQUlfTUVNT1JZOworCS8qIHRlcm1pbmF0ZSBhdCB0aGUgZGVsaW1pdGVyICovCisJaG9zdG5hbWUyW2NwIC0gaG9zdG5hbWVdID0gJ1wwJzsKKwlhZGRyID0gaG9zdG5hbWUyOworCXNjb3BlID0gY3AgKyAxOworCisJZXJyb3IgPSBleHBsb3JlX251bWVyaWMocGFpLCBhZGRyLCBzZXJ2bmFtZSwgcmVzLCBob3N0bmFtZSk7CisJaWYgKGVycm9yID09IDApIHsKKwkJdV9pbnQzMl90IHNjb3BlaWQ7CisKKwkJZm9yIChjdXIgPSAqcmVzOyBjdXI7IGN1ciA9IGN1ci0+YWlfbmV4dCkgeworCQkJaWYgKGN1ci0+YWlfZmFtaWx5ICE9IEFGX0lORVQ2KQorCQkJCWNvbnRpbnVlOworCQkJc2luNiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKHZvaWQgKiljdXItPmFpX2FkZHI7CisJCQlpZiAoaXA2X3N0cjJzY29wZWlkKHNjb3BlLCBzaW42LCAmc2NvcGVpZCkgPT0gLTEpIHsKKwkJCQlmcmVlKGhvc3RuYW1lMik7CisJCQkJcmV0dXJuKEVBSV9OT0RBVEEpOyAvKiBYWFg6IGlzIHJldHVybiBPSz8gKi8KKwkJCX0KKwkJCXNpbjYtPnNpbjZfc2NvcGVfaWQgPSBzY29wZWlkOworCQl9CisJfQorCisJZnJlZShob3N0bmFtZTIpOworCisJcmV0dXJuIGVycm9yOworI2VuZGlmCit9CisKK3N0YXRpYyBpbnQKK2dldF9jYW5vbm5hbWUoY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWksIHN0cnVjdCBhZGRyaW5mbyAqYWksIGNvbnN0IGNoYXIgKnN0cikKK3sKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJYXNzZXJ0KGFpICE9IE5VTEwpOworCWFzc2VydChzdHIgIT0gTlVMTCk7CisKKwlpZiAoKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpICE9IDApIHsKKwkJYWktPmFpX2Nhbm9ubmFtZSA9IHN0cmR1cChzdHIpOworCQlpZiAoYWktPmFpX2Nhbm9ubmFtZSA9PSBOVUxMKQorCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKK2dldF9haShjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSwgY29uc3Qgc3RydWN0IGFmZCAqYWZkLCBjb25zdCBjaGFyICphZGRyKQoreworCWNoYXIgKnA7CisJc3RydWN0IGFkZHJpbmZvICphaTsKKworCWFzc2VydChwYWkgIT0gTlVMTCk7CisJYXNzZXJ0KGFmZCAhPSBOVUxMKTsKKwlhc3NlcnQoYWRkciAhPSBOVUxMKTsKKworCWFpID0gKHN0cnVjdCBhZGRyaW5mbyAqKW1hbGxvYyhzaXplb2Yoc3RydWN0IGFkZHJpbmZvKQorCQkrIChhZmQtPmFfc29ja2xlbikpOworCWlmIChhaSA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsKKworCW1lbWNweShhaSwgcGFpLCBzaXplb2Yoc3RydWN0IGFkZHJpbmZvKSk7CisJYWktPmFpX2FkZHIgPSAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikoYWkgKyAxKTsKKwltZW1zZXQoYWktPmFpX2FkZHIsIDAsIChzaXplX3QpYWZkLT5hX3NvY2tsZW4pOworCisjaWZkZWYgSEFWRV9TQV9MRU4KKwlhaS0+YWlfYWRkci0+c2FfbGVuID0gYWZkLT5hX3NvY2tsZW47CisjZW5kaWYKKworCWFpLT5haV9hZGRybGVuID0gYWZkLT5hX3NvY2tsZW47CisjaWYgZGVmaW5lZCAoX19hbHBoYV9fKSB8fCAoZGVmaW5lZChfX2kzODZfXykgJiYgZGVmaW5lZChfTFA2NCkpIHx8IGRlZmluZWQoX19zcGFyYzY0X18pCisJYWktPl9fYWlfcGFkMCA9IDA7CisjZW5kaWYKKwlhaS0+YWlfYWRkci0+c2FfZmFtaWx5ID0gYWktPmFpX2ZhbWlseSA9IGFmZC0+YV9hZjsKKwlwID0gKGNoYXIgKikodm9pZCAqKShhaS0+YWlfYWRkcik7CisJbWVtY3B5KHAgKyBhZmQtPmFfb2ZmLCBhZGRyLCAoc2l6ZV90KWFmZC0+YV9hZGRybGVuKTsKKwlyZXR1cm4gYWk7Cit9CisKK3N0YXRpYyBpbnQKK2dldF9wb3J0bWF0Y2goY29uc3Qgc3RydWN0IGFkZHJpbmZvICphaSwgY29uc3QgY2hhciAqc2Vydm5hbWUpCit7CisKKwlhc3NlcnQoYWkgIT0gTlVMTCk7CisJLyogc2Vydm5hbWUgbWF5IGJlIE5VTEwgKi8KKworCXJldHVybiBnZXRfcG9ydChhaSwgc2Vydm5hbWUsIDEpOworfQorCitzdGF0aWMgaW50CitnZXRfcG9ydChjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKmFpLCBjb25zdCBjaGFyICpzZXJ2bmFtZSwgaW50IG1hdGNob25seSkKK3sKKwljb25zdCBjaGFyICpwcm90bzsKKwlzdHJ1Y3Qgc2VydmVudCAqc3A7CisJaW50IHBvcnQ7CisJaW50IGFsbG93bnVtZXJpYzsKKworCWFzc2VydChhaSAhPSBOVUxMKTsKKwkvKiBzZXJ2bmFtZSBtYXkgYmUgTlVMTCAqLworCisJaWYgKHNlcnZuYW1lID09IE5VTEwpCisJCXJldHVybiAwOworCXN3aXRjaCAoYWktPmFpX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKyNpZmRlZiBBRl9JTkVUNgorCWNhc2UgQUZfSU5FVDY6CisjZW5kaWYKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorCisJc3dpdGNoIChhaS0+YWlfc29ja3R5cGUpIHsKKwljYXNlIFNPQ0tfUkFXOgorCQlyZXR1cm4gRUFJX1NFUlZJQ0U7CisJY2FzZSBTT0NLX0RHUkFNOgorCWNhc2UgU09DS19TVFJFQU06CisJCWFsbG93bnVtZXJpYyA9IDE7CisJCWJyZWFrOworCWNhc2UgQU5ZOgorCQlhbGxvd251bWVyaWMgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gRUFJX1NPQ0tUWVBFOworCX0KKworCXBvcnQgPSBzdHIybnVtYmVyKHNlcnZuYW1lKTsKKwlpZiAocG9ydCA+PSAwKSB7CisJCWlmICghYWxsb3dudW1lcmljKQorCQkJcmV0dXJuIEVBSV9TRVJWSUNFOworCQlpZiAocG9ydCA8IDAgfHwgcG9ydCA+IDY1NTM1KQorCQkJcmV0dXJuIEVBSV9TRVJWSUNFOworCQlwb3J0ID0gaHRvbnMocG9ydCk7CisJfSBlbHNlIHsKKwkJaWYgKGFpLT5haV9mbGFncyAmIEFJX05VTUVSSUNTRVJWKQorCQkJcmV0dXJuIEVBSV9OT05BTUU7CisKKwkJc3dpdGNoIChhaS0+YWlfc29ja3R5cGUpIHsKKwkJY2FzZSBTT0NLX0RHUkFNOgorCQkJcHJvdG8gPSAidWRwIjsKKwkJCWJyZWFrOworCQljYXNlIFNPQ0tfU1RSRUFNOgorCQkJcHJvdG8gPSAidGNwIjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJcHJvdG8gPSBOVUxMOworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKHNwID0gZ2V0c2VydmJ5bmFtZShzZXJ2bmFtZSwgcHJvdG8pKSA9PSBOVUxMKQorCQkJcmV0dXJuIEVBSV9TRVJWSUNFOworCQlwb3J0ID0gc3AtPnNfcG9ydDsKKwl9CisKKwlpZiAoIW1hdGNob25seSkgeworCQlzd2l0Y2ggKGFpLT5haV9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKQorCQkJICAgIGFpLT5haV9hZGRyKS0+c2luX3BvcnQgPSBwb3J0OworCQkJYnJlYWs7CisjaWZkZWYgSU5FVDYKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCSgoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopCisJCQkgICAgYWktPmFpX2FkZHIpLT5zaW42X3BvcnQgPSBwb3J0OworCQkJYnJlYWs7CisjZW5kaWYKKwkJfQorCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmZCAqCitmaW5kX2FmZChpbnQgYWYpCit7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCisJaWYgKGFmID09IFBGX1VOU1BFQykKKwkJcmV0dXJuIE5VTEw7CisJZm9yIChhZmQgPSBhZmRsOyBhZmQtPmFfYWY7IGFmZCsrKSB7CisJCWlmIChhZmQtPmFfYWYgPT0gYWYpCisJCQlyZXR1cm4gYWZkOworCX0KKwlyZXR1cm4gTlVMTDsKK30KKworI2lmZGVmIElORVQ2CisvKiBjb252ZXJ0IGEgc3RyaW5nIHRvIGEgc2NvcGUgaWRlbnRpZmllci4gWFhYOiBJUHY2IHNwZWNpZmljICovCitzdGF0aWMgaW50CitpcDZfc3RyMnNjb3BlaWQoY2hhciAqc2NvcGUsIHN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjYsIHVfaW50MzJfdCAqc2NvcGVpZCkKK3sKKwl1X2xvbmcgbHNjb3BlaWQ7CisJc3RydWN0IGluNl9hZGRyICphNjsKKwljaGFyICplcDsKKworCWFzc2VydChzY29wZSAhPSBOVUxMKTsKKwlhc3NlcnQoc2luNiAhPSBOVUxMKTsKKwlhc3NlcnQoc2NvcGVpZCAhPSBOVUxMKTsKKworCWE2ID0gJnNpbjYtPnNpbjZfYWRkcjsKKworCS8qIGVtcHR5IHNjb3BlaWQgcG9ydGlvbiBpcyBpbnZhbGlkICovCisJaWYgKCpzY29wZSA9PSAnXDAnKQorCQlyZXR1cm4gLTE7CisKKwlpZiAoSU42X0lTX0FERFJfTElOS0xPQ0FMKGE2KSB8fCBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYTYpKSB7CisJCS8qCisJCSAqIFdlIGN1cnJlbnRseSBhc3N1bWUgYSBvbmUtdG8tb25lIG1hcHBpbmcgYmV0d2VlbiBsaW5rcworCQkgKiBhbmQgaW50ZXJmYWNlcywgc28gd2Ugc2ltcGx5IHVzZSBpbnRlcmZhY2UgaW5kaWNlcyBmb3IKKwkJICogbGlrZS1sb2NhbCBzY29wZXMuCisJCSAqLworCQkqc2NvcGVpZCA9IGlmX25hbWV0b2luZGV4KHNjb3BlKTsKKwkJaWYgKCpzY29wZWlkID09IDApCisJCQlnb3RvIHRyeW51bWVyaWM7CisJCXJldHVybiAwOworCX0KKworCS8qIHN0aWxsIHVuY2xlYXIgYWJvdXQgbGl0ZXJhbCwgYWxsb3cgbnVtZXJpYyBvbmx5IC0gcGxhY2Vob2xkZXIgKi8KKwlpZiAoSU42X0lTX0FERFJfU0lURUxPQ0FMKGE2KSB8fCBJTjZfSVNfQUREUl9NQ19TSVRFTE9DQUwoYTYpKQorCQlnb3RvIHRyeW51bWVyaWM7CisJaWYgKElONl9JU19BRERSX01DX09SR0xPQ0FMKGE2KSkKKwkJZ290byB0cnludW1lcmljOworCWVsc2UKKwkJZ290byB0cnludW1lcmljOwkvKiBnbG9iYWwgKi8KKworCS8qIHRyeSB0byBjb252ZXJ0IHRvIGEgbnVtZXJpYyBpZCBhcyBhIGxhc3QgcmVzb3J0ICovCisgIHRyeW51bWVyaWM6CisJZXJybm8gPSAwOworCWxzY29wZWlkID0gc3RydG91bChzY29wZSwgJmVwLCAxMCk7CisJKnNjb3BlaWQgPSAodV9pbnQzMl90KShsc2NvcGVpZCAmIDB4ZmZmZmZmZmZVTCk7CisJaWYgKGVycm5vID09IDAgJiYgZXAgJiYgKmVwID09ICdcMCcgJiYgKnNjb3BlaWQgPT0gbHNjb3BlaWQpCisJCXJldHVybiAwOworCWVsc2UKKwkJcmV0dXJuIC0xOworfQorI2VuZGlmCisKKy8qIGNvZGUgZHVwbGljYXRlIHdpdGggZ2V0aG5hbWFkZHIuYyAqLworCitzdGF0aWMgY29uc3QgY2hhciBBc2tlZEZvckdvdFtdID0KKwkiZ2V0aG9zdGJ5Ki5nZXRhbnN3ZXI6IGFza2VkIGZvciBcIiVzXCIsIGdvdCBcIiVzXCIiOworCitzdGF0aWMgc3RydWN0IGFkZHJpbmZvICoKK2dldGFuc3dlcihjb25zdCBxdWVyeWJ1ZiAqYW5zd2VyLCBpbnQgYW5zbGVuLCBjb25zdCBjaGFyICpxbmFtZSwgaW50IHF0eXBlLAorICAgIGNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpKQoreworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbCwgKmN1cjsKKwlzdHJ1Y3QgYWRkcmluZm8gYWk7CisJY29uc3Qgc3RydWN0IGFmZCAqYWZkOworCWNoYXIgKmNhbm9ubmFtZTsKKwljb25zdCBIRUFERVIgKmhwOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IG47CisJY29uc3QgdV9jaGFyICplb207CisJY2hhciAqYnAsICplcDsKKwlpbnQgdHlwZSwgY2xhc3MsIGFuY291bnQsIHFkY291bnQ7CisJaW50IGhhdmVhbnN3ZXIsIGhhZF9lcnJvcjsKKwljaGFyIHRidWZbTUFYRE5BTUVdOworCWludCAoKm5hbWVfb2spIChjb25zdCBjaGFyICopOworCWNoYXIgaG9zdGJ1Zls4KjEwMjRdOworCisJYXNzZXJ0KGFuc3dlciAhPSBOVUxMKTsKKwlhc3NlcnQocW5hbWUgIT0gTlVMTCk7CisJYXNzZXJ0KHBhaSAhPSBOVUxMKTsKKworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCWNhbm9ubmFtZSA9IE5VTEw7CisJZW9tID0gYW5zd2VyLT5idWYgKyBhbnNsZW47CisJc3dpdGNoIChxdHlwZSkgeworCWNhc2UgVF9BOgorCWNhc2UgVF9BQUFBOgorCWNhc2UgVF9BTlk6CS8qdXNlIFRfQU5ZIG9ubHkgZm9yIFRfQS9UX0FBQUEgbG9va3VwKi8KKwkJbmFtZV9vayA9IHJlc19obm9rOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gTlVMTDsJLyogWFhYIHNob3VsZCBiZSBhYm9ydCgpOyAqLworCX0KKwkvKgorCSAqIGZpbmQgZmlyc3Qgc2F0aXNmYWN0b3J5IGFuc3dlcgorCSAqLworCWhwID0gJmFuc3dlci0+aGRyOworCWFuY291bnQgPSBudG9ocyhocC0+YW5jb3VudCk7CisJcWRjb3VudCA9IG50b2hzKGhwLT5xZGNvdW50KTsKKwlicCA9IGhvc3RidWY7CisJZXAgPSBob3N0YnVmICsgc2l6ZW9mIGhvc3RidWY7CisJY3AgPSBhbnN3ZXItPmJ1ZiArIEhGSVhFRFNaOworCWlmIChxZGNvdW50ICE9IDEpIHsKKwkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCBicCwgZXAgLSBicCk7CisJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisJY3AgKz0gbiArIFFGSVhFRFNaOworCWlmIChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBIHx8IHF0eXBlID09IFRfQU5ZKSB7CisJCS8qIHJlc19zZW5kKCkgaGFzIGFscmVhZHkgdmVyaWZpZWQgdGhhdCB0aGUgcXVlcnkgbmFtZSBpcyB0aGUKKwkJICogc2FtZSBhcyB0aGUgb25lIHdlIHNlbnQ7IHRoaXMganVzdCBnZXRzIHRoZSBleHBhbmRlZCBuYW1lCisJCSAqIChpLmUuLCB3aXRoIHRoZSBzdWNjZWVkaW5nIHNlYXJjaC1kb21haW4gdGFja2VkIG9uKS4KKwkJICovCisJCW4gPSBzdHJsZW4oYnApICsgMTsJCS8qIGZvciB0aGUgXDAgKi8KKwkJaWYgKG4gPj0gTUFYSE9TVE5BTUVMRU4pIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0KKwkJY2Fub25uYW1lID0gYnA7CisJCWJwICs9IG47CisJCS8qIFRoZSBxbmFtZSBjYW4gYmUgYWJicmV2aWF0ZWQsIGJ1dCBoX25hbWUgaXMgbm93IGFic29sdXRlLiAqLworCQlxbmFtZSA9IGNhbm9ubmFtZTsKKwl9CisJaGF2ZWFuc3dlciA9IDA7CisJaGFkX2Vycm9yID0gMDsKKwl3aGlsZSAoYW5jb3VudC0tID4gMCAmJiBjcCA8IGVvbSAmJiAhaGFkX2Vycm9yKSB7CisJCW4gPSBkbl9leHBhbmQoYW5zd2VyLT5idWYsIGVvbSwgY3AsIGJwLCBlcCAtIGJwKTsKKwkJaWYgKChuIDwgMCkgfHwgISgqbmFtZV9vaykoYnApKSB7CisJCQloYWRfZXJyb3IrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWNwICs9IG47CQkJLyogbmFtZSAqLworCQl0eXBlID0gX2dldHNob3J0KGNwKTsKKyAJCWNwICs9IElOVDE2U1o7CQkJLyogdHlwZSAqLworCQljbGFzcyA9IF9nZXRzaG9ydChjcCk7CisgCQljcCArPSBJTlQxNlNaICsgSU5UMzJTWjsJLyogY2xhc3MsIFRUTCAqLworCQluID0gX2dldHNob3J0KGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsJCQkvKiBsZW4gKi8KKwkJaWYgKGNsYXNzICE9IENfSU4pIHsKKwkJCS8qIFhYWCAtIGRlYnVnPyBzeXNsb2c/ICovCisJCQljcCArPSBuOworCQkJY29udGludWU7CQkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCisJCX0KKwkJaWYgKChxdHlwZSA9PSBUX0EgfHwgcXR5cGUgPT0gVF9BQUFBIHx8IHF0eXBlID09IFRfQU5ZKSAmJgorCQkgICAgdHlwZSA9PSBUX0NOQU1FKSB7CisJCQluID0gZG5fZXhwYW5kKGFuc3dlci0+YnVmLCBlb20sIGNwLCB0YnVmLCBzaXplb2YgdGJ1Zik7CisJCQlpZiAoKG4gPCAwKSB8fCAhKCpuYW1lX29rKSh0YnVmKSkgeworCQkJCWhhZF9lcnJvcisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJY3AgKz0gbjsKKwkJCS8qIEdldCBjYW5vbmljYWwgbmFtZS4gKi8KKwkJCW4gPSBzdHJsZW4odGJ1ZikgKyAxOwkvKiBmb3IgdGhlIFwwICovCisJCQlpZiAobiA+IGVwIC0gYnAgfHwgbiA+PSBNQVhIT1NUTkFNRUxFTikgeworCQkJCWhhZF9lcnJvcisrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJc3RybGNweShicCwgdGJ1ZiwgKHNpemVfdCkoZXAgLSBicCkpOworCQkJY2Fub25uYW1lID0gYnA7CisJCQlicCArPSBuOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHF0eXBlID09IFRfQU5ZKSB7CisJCQlpZiAoISh0eXBlID09IFRfQSB8fCB0eXBlID09IFRfQUFBQSkpIHsKKwkJCQljcCArPSBuOworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9IGVsc2UgaWYgKHR5cGUgIT0gcXR5cGUpIHsKKwkJCWlmICh0eXBlICE9IFRfS0VZICYmIHR5cGUgIT0gVF9TSUcpCisJCQkJc3lzbG9nKExPR19OT1RJQ0V8TE9HX0FVVEgsCisJICAgICAgICJnZXRob3N0YnkqLmdldGFuc3dlcjogYXNrZWQgZm9yIFwiJXMgJXMgJXNcIiwgZ290IHR5cGUgXCIlc1wiIiwKKwkJCQkgICAgICAgcW5hbWUsIHBfY2xhc3MoQ19JTiksIHBfdHlwZShxdHlwZSksCisJCQkJICAgICAgIHBfdHlwZSh0eXBlKSk7CisJCQljcCArPSBuOworCQkJY29udGludWU7CQkvKiBYWFggLSBoYWRfZXJyb3IrKyA/ICovCisJCX0KKwkJc3dpdGNoICh0eXBlKSB7CisJCWNhc2UgVF9BOgorCQljYXNlIFRfQUFBQToKKwkJCWlmIChzdHJjYXNlY21wKGNhbm9ubmFtZSwgYnApICE9IDApIHsKKwkJCQlzeXNsb2coTE9HX05PVElDRXxMT0dfQVVUSCwKKwkJCQkgICAgICAgQXNrZWRGb3JHb3QsIGNhbm9ubmFtZSwgYnApOworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CS8qIFhYWCAtIGhhZF9lcnJvcisrID8gKi8KKwkJCX0KKwkJCWlmICh0eXBlID09IFRfQSAmJiBuICE9IElOQUREUlNaKSB7CisJCQkJY3AgKz0gbjsKKwkJCQljb250aW51ZTsKKwkJCX0KKwkJCWlmICh0eXBlID09IFRfQUFBQSAmJiBuICE9IElONkFERFJTWikgeworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQlpZiAodHlwZSA9PSBUX0FBQUEpIHsKKwkJCQlzdHJ1Y3QgaW42X2FkZHIgaW42OworCQkJCW1lbWNweSgmaW42LCBjcCwgSU42QUREUlNaKTsKKwkJCQlpZiAoSU42X0lTX0FERFJfVjRNQVBQRUQoJmluNikpIHsKKwkJCQkJY3AgKz0gbjsKKwkJCQkJY29udGludWU7CisJCQkJfQorCQkJfQorCQkJaWYgKCFoYXZlYW5zd2VyKSB7CisJCQkJaW50IG5uOworCisJCQkJY2Fub25uYW1lID0gYnA7CisJCQkJbm4gPSBzdHJsZW4oYnApICsgMTsJLyogZm9yIHRoZSBcMCAqLworCQkJCWJwICs9IG5uOworCQkJfQorCisJCQkvKiBkb24ndCBvdmVyd3JpdGUgcGFpICovCisJCQlhaSA9ICpwYWk7CisJCQlhaS5haV9mYW1pbHkgPSAodHlwZSA9PSBUX0EpID8gQUZfSU5FVCA6IEFGX0lORVQ2OworCQkJYWZkID0gZmluZF9hZmQoYWkuYWlfZmFtaWx5KTsKKwkJCWlmIChhZmQgPT0gTlVMTCkgeworCQkJCWNwICs9IG47CisJCQkJY29udGludWU7CisJCQl9CisJCQljdXItPmFpX25leHQgPSBnZXRfYWkoJmFpLCBhZmQsIChjb25zdCBjaGFyICopY3ApOworCQkJaWYgKGN1ci0+YWlfbmV4dCA9PSBOVUxMKQorCQkJCWhhZF9lcnJvcisrOworCQkJd2hpbGUgKGN1ciAmJiBjdXItPmFpX25leHQpCisJCQkJY3VyID0gY3VyLT5haV9uZXh0OworCQkJY3AgKz0gbjsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYWJvcnQoKTsKKwkJfQorCQlpZiAoIWhhZF9lcnJvcikKKwkJCWhhdmVhbnN3ZXIrKzsKKwl9CisJaWYgKGhhdmVhbnN3ZXIpIHsKKwkJaWYgKCFjYW5vbm5hbWUpCisJCQkodm9pZClnZXRfY2Fub25uYW1lKHBhaSwgc2VudGluZWwuYWlfbmV4dCwgcW5hbWUpOworCQllbHNlCisJCQkodm9pZClnZXRfY2Fub25uYW1lKHBhaSwgc2VudGluZWwuYWlfbmV4dCwgY2Fub25uYW1lKTsKKwkJaF9lcnJubyA9IE5FVERCX1NVQ0NFU1M7CisJCXJldHVybiBzZW50aW5lbC5haV9uZXh0OworCX0KKworCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwlyZXR1cm4gTlVMTDsKK30KKworI2RlZmluZSBTT1JURURBRERSKHApCSgoKHN0cnVjdCBzb2NrYWRkcl9pbiAqKSh2b2lkICopKHAtPmFpX25leHQtPmFpX2FkZHIpKS0+c2luX2FkZHIuc19hZGRyKQorI2RlZmluZSBTT1JUTUFUQ0gocCwgcykgKChTT1JURURBRERSKHApICYgKHMpLm1hc2spID09IChzKS5hZGRyLnNfYWRkcikKKworc3RhdGljIHZvaWQKK2Fpc29ydChzdHJ1Y3QgYWRkcmluZm8gKnMsIHJlc19zdGF0ZSByZXMpCit7CisJc3RydWN0IGFkZHJpbmZvIGhlYWQsICp0LCAqcDsKKwlpbnQgaTsKKworCWhlYWQuYWlfbmV4dCA9IE5VTEw7CisJdCA9ICZoZWFkOworCisJZm9yIChpID0gMDsgaSA8IHJlcy0+bnNvcnQ7IGkrKykgeworCQlwID0gczsKKwkJd2hpbGUgKHAtPmFpX25leHQpIHsKKwkJCWlmICgocC0+YWlfbmV4dC0+YWlfZmFtaWx5ICE9IEFGX0lORVQpCisJCQl8fCBTT1JUTUFUQ0gocCwgcmVzLT5zb3J0X2xpc3RbaV0pKSB7CisJCQkJdC0+YWlfbmV4dCA9IHAtPmFpX25leHQ7CisJCQkJdCA9IHQtPmFpX25leHQ7CisJCQkJcC0+YWlfbmV4dCA9IHAtPmFpX25leHQtPmFpX25leHQ7CisJCQl9IGVsc2UgeworCQkJCXAgPSBwLT5haV9uZXh0OworCQkJfQorCQl9CisJfQorCisJLyogYWRkIHJlc3Qgb2YgbGlzdCBhbmQgcmVzZXQgcyB0byB0aGUgbmV3IGxpc3QqLworCXQtPmFpX25leHQgPSBzLT5haV9uZXh0OworCXMtPmFpX25leHQgPSBoZWFkLmFpX25leHQ7Cit9CisKKy8qQVJHU1VTRUQqLworc3RhdGljIGludAorX2Ruc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZAkqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwlzdHJ1Y3QgYWRkcmluZm8gKmFpOworCXF1ZXJ5YnVmICpidWYsICpidWYyOworCWNvbnN0IGNoYXIgKm5hbWU7CisJY29uc3Qgc3RydWN0IGFkZHJpbmZvICpwYWk7CisJc3RydWN0IGFkZHJpbmZvIHNlbnRpbmVsLCAqY3VyOworCXN0cnVjdCByZXNfdGFyZ2V0IHEsIHEyOworCXJlc19zdGF0ZSByZXM7CisKKwluYW1lID0gdmFfYXJnKGFwLCBjaGFyICopOworCXBhaSA9IHZhX2FyZyhhcCwgY29uc3Qgc3RydWN0IGFkZHJpbmZvICopOworCisJZnByaW50ZihzdGRlcnIsICJfZG5zX2dldGFkZHJpbmZvKCkgbmFtZSA9ICclcydcbiIsIG5hbWUpOworCisJbWVtc2V0KCZxLCAwLCBzaXplb2YocSkpOworCW1lbXNldCgmcTIsIDAsIHNpemVvZihxMikpOworCW1lbXNldCgmc2VudGluZWwsIDAsIHNpemVvZihzZW50aW5lbCkpOworCWN1ciA9ICZzZW50aW5lbDsKKworCWJ1ZiA9IG1hbGxvYyhzaXplb2YoKmJ1ZikpOworCWlmIChidWYgPT0gTlVMTCkgeworCQloX2Vycm5vID0gTkVUREJfSU5URVJOQUw7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJYnVmMiA9IG1hbGxvYyhzaXplb2YoKmJ1ZjIpKTsKKwlpZiAoYnVmMiA9PSBOVUxMKSB7CisJCWZyZWUoYnVmKTsKKwkJaF9lcnJubyA9IE5FVERCX0lOVEVSTkFMOworCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJfQorCisJc3dpdGNoIChwYWktPmFpX2ZhbWlseSkgeworCWNhc2UgQUZfVU5TUEVDOgorCQkvKiBwcmVmZXIgSVB2NiAqLworCQlxLm5hbWUgPSBuYW1lOworCQlxLnFjbGFzcyA9IENfSU47CisJCXEucXR5cGUgPSBUX0FBQUE7CisJCXEuYW5zd2VyID0gYnVmLT5idWY7CisJCXEuYW5zbGVuID0gc2l6ZW9mKGJ1Zi0+YnVmKTsKKwkJcS5uZXh0ID0gJnEyOworCQlxMi5uYW1lID0gbmFtZTsKKwkJcTIucWNsYXNzID0gQ19JTjsKKwkJcTIucXR5cGUgPSBUX0E7CisJCXEyLmFuc3dlciA9IGJ1ZjItPmJ1ZjsKKwkJcTIuYW5zbGVuID0gc2l6ZW9mKGJ1ZjItPmJ1Zik7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDoKKwkJcS5uYW1lID0gbmFtZTsKKwkJcS5xY2xhc3MgPSBDX0lOOworCQlxLnF0eXBlID0gVF9BOworCQlxLmFuc3dlciA9IGJ1Zi0+YnVmOworCQlxLmFuc2xlbiA9IHNpemVvZihidWYtPmJ1Zik7CisJCWJyZWFrOworCWNhc2UgQUZfSU5FVDY6CisJCXEubmFtZSA9IG5hbWU7CisJCXEucWNsYXNzID0gQ19JTjsKKwkJcS5xdHlwZSA9IFRfQUFBQTsKKwkJcS5hbnN3ZXIgPSBidWYtPmJ1ZjsKKwkJcS5hbnNsZW4gPSBzaXplb2YoYnVmLT5idWYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmcmVlKGJ1Zik7CisJCWZyZWUoYnVmMik7CisJCXJldHVybiBOU19VTkFWQUlMOworCX0KKworCXJlcyA9IF9fcmVzX2dldF9zdGF0ZSgpOworCWlmIChyZXMgPT0gTlVMTCkgeworCQlmcmVlKGJ1Zik7CisJCWZyZWUoYnVmMik7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisKKwlpZiAocmVzX3NlYXJjaE4obmFtZSwgJnEsIHJlcykgPCAwKSB7CisJCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCQlmcmVlKGJ1Zik7CisJCWZyZWUoYnVmMik7CisJCXJldHVybiBOU19OT1RGT1VORDsKKwl9CisJYWkgPSBnZXRhbnN3ZXIoYnVmLCBxLm4sIHEubmFtZSwgcS5xdHlwZSwgcGFpKTsKKwlpZiAoYWkpIHsKKwkJY3VyLT5haV9uZXh0ID0gYWk7CisJCXdoaWxlIChjdXIgJiYgY3VyLT5haV9uZXh0KQorCQkJY3VyID0gY3VyLT5haV9uZXh0OworCX0KKwlpZiAocS5uZXh0KSB7CisJCWFpID0gZ2V0YW5zd2VyKGJ1ZjIsIHEyLm4sIHEyLm5hbWUsIHEyLnF0eXBlLCBwYWkpOworCQlpZiAoYWkpCisJCQljdXItPmFpX25leHQgPSBhaTsKKwl9CisJZnJlZShidWYpOworCWZyZWUoYnVmMik7CisJaWYgKHNlbnRpbmVsLmFpX25leHQgPT0gTlVMTCkgeworCQlfX3Jlc19wdXRfc3RhdGUocmVzKTsKKwkJc3dpdGNoIChoX2Vycm5vKSB7CisJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJCWNhc2UgVFJZX0FHQUlOOgorCQkJcmV0dXJuIE5TX1RSWUFHQUlOOworCQlkZWZhdWx0OgorCQkJcmV0dXJuIE5TX1VOQVZBSUw7CisJCX0KKwl9CisKKwlpZiAocmVzLT5uc29ydCkKKwkJYWlzb3J0KCZzZW50aW5lbCwgcmVzKTsKKworCV9fcmVzX3B1dF9zdGF0ZShyZXMpOworCisJKigoc3RydWN0IGFkZHJpbmZvICoqKXJ2KSA9IHNlbnRpbmVsLmFpX25leHQ7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKK3N0YXRpYyB2b2lkCitfc2V0aHRlbnQoRklMRSAqKmhvc3RmKQoreworCisJaWYgKCEqaG9zdGYpCisJCSpob3N0ZiA9IGZvcGVuKF9QQVRIX0hPU1RTLCAiciIgKTsKKwllbHNlCisJCXJld2luZCgqaG9zdGYpOworfQorCitzdGF0aWMgdm9pZAorX2VuZGh0ZW50KEZJTEUgKipob3N0ZikKK3sKKworCWlmICgqaG9zdGYpIHsKKwkJKHZvaWQpIGZjbG9zZSgqaG9zdGYpOworCQkqaG9zdGYgPSBOVUxMOworCX0KK30KKworc3RhdGljIHN0cnVjdCBhZGRyaW5mbyAqCitfZ2V0aHRlbnQoRklMRSAqKmhvc3RmLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBzdHJ1Y3QgYWRkcmluZm8gKnBhaSkKK3sKKwljaGFyICpwOworCWNoYXIgKmNwLCAqdG5hbWUsICpjbmFtZTsKKwlzdHJ1Y3QgYWRkcmluZm8gaGludHMsICpyZXMwLCAqcmVzOworCWludCBlcnJvcjsKKwljb25zdCBjaGFyICphZGRyOworCWNoYXIgaG9zdGJ1Zls4KjEwMjRdOworCisvLwlmcHJpbnRmKHN0ZGVyciwgIl9nZXRodGVudCgpIG5hbWUgPSAnJXMnXG4iLCBuYW1lKTsKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwlhc3NlcnQocGFpICE9IE5VTEwpOworCisJaWYgKCEqaG9zdGYgJiYgISgqaG9zdGYgPSBmb3BlbihfUEFUSF9IT1NUUywgInIiICkpKQorCQlyZXR1cm4gKE5VTEwpOworIGFnYWluOgorCWlmICghKHAgPSBmZ2V0cyhob3N0YnVmLCBzaXplb2YgaG9zdGJ1ZiwgKmhvc3RmKSkpCisJCXJldHVybiAoTlVMTCk7CisJaWYgKCpwID09ICcjJykKKwkJZ290byBhZ2FpbjsKKwlpZiAoIShjcCA9IHN0cnBicmsocCwgIiNcbiIpKSkKKwkJZ290byBhZ2FpbjsKKwkqY3AgPSAnXDAnOworCWlmICghKGNwID0gc3RycGJyayhwLCAiIFx0IikpKQorCQlnb3RvIGFnYWluOworCSpjcCsrID0gJ1wwJzsKKwlhZGRyID0gcDsKKwkvKiBpZiB0aGlzIGlzIG5vdCBzb21ldGhpbmcgd2UncmUgbG9va2luZyBmb3IsIHNraXAgaXQuICovCisJY25hbWUgPSBOVUxMOworCXdoaWxlIChjcCAmJiAqY3ApIHsKKwkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCWNwKys7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoIWNuYW1lKQorCQkJY25hbWUgPSBjcDsKKwkJdG5hbWUgPSBjcDsKKwkJaWYgKChjcCA9IHN0cnBicmsoY3AsICIgXHQiKSkgIT0gTlVMTCkKKwkJCSpjcCsrID0gJ1wwJzsKKy8vCQlmcHJpbnRmKHN0ZGVyciwgIlx0dG5hbWUgPSAnJXMnIiwgdG5hbWUpOworCQlpZiAoc3RyY2FzZWNtcChuYW1lLCB0bmFtZSkgPT0gMCkKKwkJCWdvdG8gZm91bmQ7CisJfQorCWdvdG8gYWdhaW47CisKK2ZvdW5kOgorCWhpbnRzID0gKnBhaTsKKwloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCWVycm9yID0gZ2V0YWRkcmluZm8oYWRkciwgTlVMTCwgJmhpbnRzLCAmcmVzMCk7CisJaWYgKGVycm9yKQorCQlnb3RvIGFnYWluOworCWZvciAocmVzID0gcmVzMDsgcmVzOyByZXMgPSByZXMtPmFpX25leHQpIHsKKwkJLyogY292ZXIgaXQgdXAgKi8KKwkJcmVzLT5haV9mbGFncyA9IHBhaS0+YWlfZmxhZ3M7CisKKwkJaWYgKHBhaS0+YWlfZmxhZ3MgJiBBSV9DQU5PTk5BTUUpIHsKKwkJCWlmIChnZXRfY2Fub25uYW1lKHBhaSwgcmVzLCBjbmFtZSkgIT0gMCkgeworCQkJCWZyZWVhZGRyaW5mbyhyZXMwKTsKKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQl9CisJfQorCXJldHVybiByZXMwOworfQorCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBpbnQKK19maWxlc19nZXRhZGRyaW5mbyh2b2lkICpydiwgdm9pZCAqY2JfZGF0YSwgdmFfbGlzdCBhcCkKK3sKKwljb25zdCBjaGFyICpuYW1lOworCWNvbnN0IHN0cnVjdCBhZGRyaW5mbyAqcGFpOworCXN0cnVjdCBhZGRyaW5mbyBzZW50aW5lbCwgKmN1cjsKKwlzdHJ1Y3QgYWRkcmluZm8gKnA7CisJRklMRSAqaG9zdGYgPSBOVUxMOworCisJbmFtZSA9IHZhX2FyZyhhcCwgY2hhciAqKTsKKwlwYWkgPSB2YV9hcmcoYXAsIHN0cnVjdCBhZGRyaW5mbyAqKTsKKworLy8JZnByaW50ZihzdGRlcnIsICJfZmlsZXNfZ2V0YWRkcmluZm8oKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7CisJbWVtc2V0KCZzZW50aW5lbCwgMCwgc2l6ZW9mKHNlbnRpbmVsKSk7CisJY3VyID0gJnNlbnRpbmVsOworCisJX3NldGh0ZW50KCZob3N0Zik7CisJd2hpbGUgKChwID0gX2dldGh0ZW50KCZob3N0ZiwgbmFtZSwgcGFpKSkgIT0gTlVMTCkgeworCQljdXItPmFpX25leHQgPSBwOworCQl3aGlsZSAoY3VyICYmIGN1ci0+YWlfbmV4dCkKKwkJCWN1ciA9IGN1ci0+YWlfbmV4dDsKKwl9CisJX2VuZGh0ZW50KCZob3N0Zik7CisKKwkqKChzdHJ1Y3QgYWRkcmluZm8gKiopcnYpID0gc2VudGluZWwuYWlfbmV4dDsKKwlpZiAoc2VudGluZWwuYWlfbmV4dCA9PSBOVUxMKQorCQlyZXR1cm4gTlNfTk9URk9VTkQ7CisJcmV0dXJuIE5TX1NVQ0NFU1M7Cit9CisKKy8qIHJlc29sdmVyIGxvZ2ljICovCisKKy8qCisgKiBGb3JtdWxhdGUgYSBub3JtYWwgcXVlcnksIHNlbmQsIGFuZCBhd2FpdCBhbnN3ZXIuCisgKiBSZXR1cm5lZCBhbnN3ZXIgaXMgcGxhY2VkIGluIHN1cHBsaWVkIGJ1ZmZlciAiYW5zd2VyIi4KKyAqIFBlcmZvcm0gcHJlbGltaW5hcnkgY2hlY2sgb2YgYW5zd2VyLCByZXR1cm5pbmcgc3VjY2VzcyBvbmx5CisgKiBpZiBubyBlcnJvciBpcyBpbmRpY2F0ZWQgYW5kIHRoZSBhbnN3ZXIgY291bnQgaXMgbm9uemVyby4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKiBFcnJvciBudW1iZXIgaXMgbGVmdCBpbiBoX2Vycm5vLgorICoKKyAqIENhbGxlciBtdXN0IHBhcnNlIGFuc3dlciBhbmQgZGV0ZXJtaW5lIHdoZXRoZXIgaXQgYW5zd2VycyB0aGUgcXVlc3Rpb24uCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19xdWVyeU4oY29uc3QgY2hhciAqbmFtZSwgLyogZG9tYWluIG5hbWUgKi8gc3RydWN0IHJlc190YXJnZXQgKnRhcmdldCwKKyAgICByZXNfc3RhdGUgcmVzKQoreworCXVfY2hhciBidWZbTUFYUEFDS0VUXTsKKwlIRUFERVIgKmhwOworCWludCBuOworCXN0cnVjdCByZXNfdGFyZ2V0ICp0OworCWludCByY29kZTsKKwlpbnQgYW5jb3VudDsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCS8qIFhYWDogdGFyZ2V0IG1heSBiZSBOVUxMPz8/ICovCisKKwlyY29kZSA9IE5PRVJST1I7CisJYW5jb3VudCA9IDA7CisKKwlmb3IgKHQgPSB0YXJnZXQ7IHQ7IHQgPSB0LT5uZXh0KSB7CisJCWludCBjbGFzcywgdHlwZTsKKwkJdV9jaGFyICphbnN3ZXI7CisJCWludCBhbnNsZW47CisKKwkJaHAgPSAoSEVBREVSICopKHZvaWQgKil0LT5hbnN3ZXI7CisJCWhwLT5yY29kZSA9IE5PRVJST1I7CS8qIGRlZmF1bHQgKi8KKworCQkvKiBtYWtlIGl0IGVhc2llci4uLiAqLworCQljbGFzcyA9IHQtPnFjbGFzczsKKwkJdHlwZSA9IHQtPnF0eXBlOworCQlhbnN3ZXIgPSB0LT5hbnN3ZXI7CisJCWFuc2xlbiA9IHQtPmFuc2xlbjsKKyNpZmRlZiBERUJVRworCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5KCVzLCAlZCwgJWQpXG4iLCBuYW1lLCBjbGFzcywgdHlwZSk7CisjZW5kaWYKKworCQluID0gcmVzX25ta3F1ZXJ5KHJlcywgUVVFUlksIG5hbWUsIGNsYXNzLCB0eXBlLCBOVUxMLCAwLCBOVUxMLAorCQkgICAgYnVmLCBzaXplb2YoYnVmKSk7CisjaWZkZWYgUkVTX1VTRV9FRE5TMAorCQlpZiAobiA+IDAgJiYgKHJlcy0+b3B0aW9ucyAmIFJFU19VU0VfRUROUzApICE9IDApCisJCQluID0gcmVzX25vcHQocmVzLCBuLCBidWYsIHNpemVvZihidWYpLCBhbnNsZW4pOworI2VuZGlmCisJCWlmIChuIDw9IDApIHsKKyNpZmRlZiBERUJVRworCQkJaWYgKHJlcy0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7IHJlc19ucXVlcnk6IG1rcXVlcnkgZmFpbGVkXG4iKTsKKyNlbmRpZgorCQkJaF9lcnJubyA9IE5PX1JFQ09WRVJZOworCQkJcmV0dXJuIG47CisJCX0KKwkJbiA9IHJlc19uc2VuZChyZXMsIGJ1ZiwgbiwgYW5zd2VyLCBhbnNsZW4pOworI2lmIDAKKwkJaWYgKG4gPCAwKSB7CisjaWZkZWYgREVCVUcKKwkJCWlmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7OyByZXNfcXVlcnk6IHNlbmQgZXJyb3JcbiIpOworI2VuZGlmCisJCQloX2Vycm5vID0gVFJZX0FHQUlOOworCQkJcmV0dXJuIG47CisJCX0KKyNlbmRpZgorCisJCWlmIChuIDwgMCB8fCBocC0+cmNvZGUgIT0gTk9FUlJPUiB8fCBudG9ocyhocC0+YW5jb3VudCkgPT0gMCkgeworCQkJcmNvZGUgPSBocC0+cmNvZGU7CS8qIHJlY29yZCBtb3N0IHJlY2VudCBlcnJvciAqLworI2lmZGVmIERFQlVHCisJCQlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJCXByaW50ZigiOzsgcmNvZGUgPSAldSwgYW5jb3VudD0ldVxuIiwgaHAtPnJjb2RlLAorCQkJCSAgICBudG9ocyhocC0+YW5jb3VudCkpOworI2VuZGlmCisJCQljb250aW51ZTsKKwkJfQorCisJCWFuY291bnQgKz0gbnRvaHMoaHAtPmFuY291bnQpOworCisJCXQtPm4gPSBuOworCX0KKworCWlmIChhbmNvdW50ID09IDApIHsKKwkJc3dpdGNoIChyY29kZSkgeworCQljYXNlIE5YRE9NQUlOOgorCQkJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOworCQkJYnJlYWs7CisJCWNhc2UgU0VSVkZBSUw6CisJCQloX2Vycm5vID0gVFJZX0FHQUlOOworCQkJYnJlYWs7CisJCWNhc2UgTk9FUlJPUjoKKwkJCWhfZXJybm8gPSBOT19EQVRBOworCQkJYnJlYWs7CisJCWNhc2UgRk9STUVSUjoKKwkJY2FzZSBOT1RJTVA6CisJCWNhc2UgUkVGVVNFRDoKKwkJZGVmYXVsdDoKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAtMTsKKwl9CisJcmV0dXJuIGFuY291bnQ7Cit9CisKKy8qCisgKiBGb3JtdWxhdGUgYSBub3JtYWwgcXVlcnksIHNlbmQsIGFuZCByZXRyaWV2ZSBhbnN3ZXIgaW4gc3VwcGxpZWQgYnVmZmVyLgorICogUmV0dXJuIHRoZSBzaXplIG9mIHRoZSByZXNwb25zZSBvbiBzdWNjZXNzLCAtMSBvbiBlcnJvci4KKyAqIElmIGVuYWJsZWQsIGltcGxlbWVudCBzZWFyY2ggcnVsZXMgdW50aWwgYW5zd2VyIG9yIHVucmVjb3ZlcmFibGUgZmFpbHVyZQorICogaXMgZGV0ZWN0ZWQuICBFcnJvciBjb2RlLCBpZiBhbnksIGlzIGxlZnQgaW4gaF9lcnJuby4KKyAqLworc3RhdGljIGludAorcmVzX3NlYXJjaE4oY29uc3QgY2hhciAqbmFtZSwgc3RydWN0IHJlc190YXJnZXQgKnRhcmdldCwgcmVzX3N0YXRlIHJlcykKK3sKKwljb25zdCBjaGFyICpjcCwgKiBjb25zdCAqZG9tYWluOworCUhFQURFUiAqaHA7CisJdV9pbnQgZG90czsKKwlpbnQgdHJhaWxpbmdfZG90LCByZXQsIHNhdmVkX2hlcnJubzsKKwlpbnQgZ290X25vZGF0YSA9IDAsIGdvdF9zZXJ2ZmFpbCA9IDAsIHRyaWVkX2FzX2lzID0gMDsKKworCWFzc2VydChuYW1lICE9IE5VTEwpOworCWFzc2VydCh0YXJnZXQgIT0gTlVMTCk7CisKKwlocCA9IChIRUFERVIgKikodm9pZCAqKXRhcmdldC0+YW5zd2VyOwkvKlhYWCovCisKKwllcnJubyA9IDA7CisJaF9lcnJubyA9IEhPU1RfTk9UX0ZPVU5EOwkvKiBkZWZhdWx0LCBpZiB3ZSBuZXZlciBxdWVyeSAqLworCWRvdHMgPSAwOworCWZvciAoY3AgPSBuYW1lOyAqY3A7IGNwKyspCisJCWRvdHMgKz0gKCpjcCA9PSAnLicpOworCXRyYWlsaW5nX2RvdCA9IDA7CisJaWYgKGNwID4gbmFtZSAmJiAqLS1jcCA9PSAnLicpCisJCXRyYWlsaW5nX2RvdCsrOworCisKK2ZwcmludGYoc3RkZXJyLCAicmVzX3NlYXJjaE4oKSBuYW1lID0gJyVzJ1xuIiwgbmFtZSk7CisKKwkvKgorCSAqIGlmIHRoZXJlIGFyZW4ndCBhbnkgZG90cywgaXQgY291bGQgYmUgYSB1c2VyLWxldmVsIGFsaWFzCisJICovCisJaWYgKCFkb3RzICYmIChjcCA9IF9faG9zdGFsaWFzKG5hbWUpKSAhPSBOVUxMKSB7CisJCXJldCA9IHJlc19xdWVyeU4oY3AsIHRhcmdldCwgcmVzKTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIElmIHRoZXJlIGFyZSBkb3RzIGluIHRoZSBuYW1lIGFscmVhZHksIGxldCdzIGp1c3QgZ2l2ZSBpdCBhIHRyeQorCSAqICdhcyBpcycuICBUaGUgdGhyZXNob2xkIGNhbiBiZSBzZXQgd2l0aCB0aGUgIm5kb3RzIiBvcHRpb24uCisJICovCisJc2F2ZWRfaGVycm5vID0gLTE7CisJaWYgKGRvdHMgPj0gcmVzLT5uZG90cykgeworCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsIE5VTEwsIHRhcmdldCwgcmVzKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gKHJldCk7CisJCXNhdmVkX2hlcnJubyA9IGhfZXJybm87CisJCXRyaWVkX2FzX2lzKys7CisJfQorCisJLyoKKwkgKiBXZSBkbyBhdCBsZWFzdCBvbmUgbGV2ZWwgb2Ygc2VhcmNoIGlmCisJICoJLSB0aGVyZSBpcyBubyBkb3QgYW5kIFJFU19ERUZOQU1FIGlzIHNldCwgb3IKKwkgKgktIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBkb3QsIHRoZXJlIGlzIG5vIHRyYWlsaW5nIGRvdCwKKwkgKgkgIGFuZCBSRVNfRE5TUkNIIGlzIHNldC4KKwkgKi8KKwlpZiAoKCFkb3RzICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfREVGTkFNRVMpKSB8fAorCSAgICAoZG90cyAmJiAhdHJhaWxpbmdfZG90ICYmIChyZXMtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSkpIHsKKwkJaW50IGRvbmUgPSAwOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXJlcy0+ZG5zcmNoOworCQkgICAqZG9tYWluICYmICFkb25lOworCQkgICBkb21haW4rKykgeworCisJCQlyZXQgPSByZXNfcXVlcnlkb21haW5OKG5hbWUsICpkb21haW4sIHRhcmdldCwgcmVzKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiByZXQ7CisKKwkJCS8qCisJCQkgKiBJZiBubyBzZXJ2ZXIgcHJlc2VudCwgZ2l2ZSB1cC4KKwkJCSAqIElmIG5hbWUgaXNuJ3QgZm91bmQgaW4gdGhpcyBkb21haW4sCisJCQkgKiBrZWVwIHRyeWluZyBoaWdoZXIgZG9tYWlucyBpbiB0aGUgc2VhcmNoIGxpc3QKKwkJCSAqIChpZiB0aGF0J3MgZW5hYmxlZCkuCisJCQkgKiBPbiBhIE5PX0RBVEEgZXJyb3IsIGtlZXAgdHJ5aW5nLCBvdGhlcndpc2UKKwkJCSAqIGEgd2lsZGNhcmQgZW50cnkgb2YgYW5vdGhlciB0eXBlIGNvdWxkIGtlZXAgdXMKKwkJCSAqIGZyb20gZmluZGluZyB0aGlzIGVudHJ5IGhpZ2hlciBpbiB0aGUgZG9tYWluLgorCQkJICogSWYgd2UgZ2V0IHNvbWUgb3RoZXIgZXJyb3IgKG5lZ2F0aXZlIGFuc3dlciBvcgorCQkJICogc2VydmVyIGZhaWx1cmUpLCB0aGVuIHN0b3Agc2VhcmNoaW5nIHVwLAorCQkJICogYnV0IHRyeSB0aGUgaW5wdXQgbmFtZSBiZWxvdyBpbiBjYXNlIGl0J3MKKwkJCSAqIGZ1bGx5LXF1YWxpZmllZC4KKwkJCSAqLworCQkJaWYgKGVycm5vID09IEVDT05OUkVGVVNFRCkgeworCQkJCWhfZXJybm8gPSBUUllfQUdBSU47CisJCQkJcmV0dXJuIC0xOworCQkJfQorCisJCQlzd2l0Y2ggKGhfZXJybm8pIHsKKwkJCWNhc2UgTk9fREFUQToKKwkJCQlnb3Rfbm9kYXRhKys7CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWNhc2UgSE9TVF9OT1RfRk9VTkQ6CisJCQkJLyoga2VlcCB0cnlpbmcgKi8KKwkJCQlicmVhazsKKwkJCWNhc2UgVFJZX0FHQUlOOgorCQkJCWlmIChocC0+cmNvZGUgPT0gU0VSVkZBSUwpIHsKKwkJCQkJLyogdHJ5IG5leHQgc2VhcmNoIGVsZW1lbnQsIGlmIGFueSAqLworCQkJCQlnb3Rfc2VydmZhaWwrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQlkZWZhdWx0OgorCQkJCS8qIGFueXRoaW5nIGVsc2UgaW1wbGllcyB0aGF0IHdlJ3JlIGRvbmUgKi8KKwkJCQlkb25lKys7CisJCQl9CisJCQkvKgorCQkJICogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKCEocmVzLT5vcHRpb25zICYgUkVTX0ROU1JDSCkpCisJCQkgICAgICAgIGRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogaWYgd2UgaGF2ZSBub3QgYWxyZWFkeSB0cmllZCB0aGUgbmFtZSAiYXMgaXMiLCBkbyB0aGF0IG5vdy4KKwkgKiBub3RlIHRoYXQgd2UgZG8gdGhpcyByZWdhcmRsZXNzIG9mIGhvdyBtYW55IGRvdHMgd2VyZSBpbiB0aGUKKwkgKiBuYW1lIG9yIHdoZXRoZXIgaXQgZW5kcyB3aXRoIGEgZG90LgorCSAqLworCWlmICghdHJpZWRfYXNfaXMpIHsKKwkJcmV0ID0gcmVzX3F1ZXJ5ZG9tYWluTihuYW1lLCBOVUxMLCB0YXJnZXQsIHJlcyk7CisJCWlmIChyZXQgPiAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwkvKgorCSAqIGlmIHdlIGdvdCBoZXJlLCB3ZSBkaWRuJ3Qgc2F0aXNmeSB0aGUgc2VhcmNoLgorCSAqIGlmIHdlIGRpZCBhbiBpbml0aWFsIGZ1bGwgcXVlcnksIHJldHVybiB0aGF0IHF1ZXJ5J3MgaF9lcnJubworCSAqIChub3RlIHRoYXQgd2Ugd291bGRuJ3QgYmUgaGVyZSBpZiB0aGF0IHF1ZXJ5IGhhZCBzdWNjZWVkZWQpLgorCSAqIGVsc2UgaWYgd2UgZXZlciBnb3QgYSBub2RhdGEsIHNlbmQgdGhhdCBiYWNrIGFzIHRoZSByZWFzb24uCisJICogZWxzZSBzZW5kIGJhY2sgbWVhbmluZ2xlc3MgaF9lcnJubywgdGhhdCBiZWluZyB0aGUgb25lIGZyb20KKwkgKiB0aGUgbGFzdCBETlNSQ0ggd2UgZGlkLgorCSAqLworCWlmIChzYXZlZF9oZXJybm8gIT0gLTEpCisJCWhfZXJybm8gPSBzYXZlZF9oZXJybm87CisJZWxzZSBpZiAoZ290X25vZGF0YSkKKwkJaF9lcnJubyA9IE5PX0RBVEE7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQloX2Vycm5vID0gVFJZX0FHQUlOOworCXJldHVybiAtMTsKK30KKworLyoKKyAqIFBlcmZvcm0gYSBjYWxsIG9uIHJlc19xdWVyeSBvbiB0aGUgY29uY2F0ZW5hdGlvbiBvZiBuYW1lIGFuZCBkb21haW4sCisgKiByZW1vdmluZyBhIHRyYWlsaW5nIGRvdCBmcm9tIG5hbWUgaWYgZG9tYWluIGlzIE5VTEwuCisgKi8KK3N0YXRpYyBpbnQKK3Jlc19xdWVyeWRvbWFpbk4oY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqZG9tYWluLAorICAgIHN0cnVjdCByZXNfdGFyZ2V0ICp0YXJnZXQsIHJlc19zdGF0ZSByZXMpCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJc2l6ZV90IG4sIGQ7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBYWFg6IHRhcmdldCBtYXkgYmUgTlVMTD8/PyAqLworCisjaWZkZWYgREVCVUcKKwlpZiAocmVzLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQlwcmludGYoIjs7IHJlc19xdWVyeWRvbWFpbiglcywgJXMpXG4iLAorCQkJbmFtZSwgZG9tYWluP2RvbWFpbjoiPE5pbD4iKTsKKyNlbmRpZgorCWlmIChkb21haW4gPT0gTlVMTCkgeworCQkvKgorCQkgKiBDaGVjayBmb3IgdHJhaWxpbmcgJy4nOworCQkgKiBjb3B5IHdpdGhvdXQgJy4nIGlmIHByZXNlbnQuCisJCSAqLworCQluID0gc3RybGVuKG5hbWUpOworCQlpZiAobiArIDEgPiBzaXplb2YobmJ1ZikpIHsKKwkJCWhfZXJybm8gPSBOT19SRUNPVkVSWTsKKwkJCXJldHVybiAtMTsKKwkJfQorCQlpZiAobiA+IDAgJiYgbmFtZVstLW5dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCBuKTsKKwkJCW5idWZbbl0gPSAnXDAnOworCQl9IGVsc2UKKwkJCWxvbmduYW1lID0gbmFtZTsKKwl9IGVsc2UgeworCQluID0gc3RybGVuKG5hbWUpOworCQlkID0gc3RybGVuKGRvbWFpbik7CisJCWlmIChuICsgMSArIGQgKyAxID4gc2l6ZW9mKG5idWYpKSB7CisJCQloX2Vycm5vID0gTk9fUkVDT1ZFUlk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwkJc25wcmludGYobmJ1Ziwgc2l6ZW9mKG5idWYpLCAiJXMuJXMiLCBuYW1lLCBkb21haW4pOworCX0KKwlyZXR1cm4gcmVzX3F1ZXJ5Tihsb25nbmFtZSwgdGFyZ2V0LCByZXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldG5hbWVpbmZvLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0bmFtZWluZm8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWZmYTYzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldG5hbWVpbmZvLmMKQEAgLTAsMCArMSw1MTkgQEAKKy8qCSROZXRCU0Q6IGdldG5hbWVpbmZvLmMsdiAxLjQzIDIwMDYvMDIvMTcgMTU6NTg6MjYgZ2luc2JhY2ggRXhwICQJKi8KKy8qCSRLQU1FOiBnZXRuYW1laW5mby5jLHYgMS40NSAyMDAwLzA5LzI1IDIyOjQzOjU2IGl0b2p1biBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAwIEJlbiBIYXJyaXMuCisgKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgorICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAorICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKKyAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQorICogICBtb2RpZmllZCkuICBpcG5nd2cgcm91Z2ggY29uc2Vuc3VzIHNlZW1zIHRvIGZvbGxvdyBSRkMyNTUzLgorICogLSBXaGF0IGlzICJsb2NhbCIgaW4gTklfRlFETj8KKyAqIC0gTklfTkFNRVJFUUQgYW5kIE5JX05VTUVSSUNIT1NUIGNvbmZsaWN0IHdpdGggZWFjaCBvdGhlci4KKyAqIC0gKEtBTUUgZXh0ZW5zaW9uKSBhbHdheXMgYXR0YWNoIHRleHR1YWwgc2NvcGVpZCAoZmU4MDo6MSVsbzApLCBpZgorICogICBzaW42X3Njb3BlX2lkIGlzIGZpbGxlZCAtIHN0YW5kYXJkaXphdGlvbiBzdGF0dXM/CisgKiAgIFhYWCBicmVha3MgYmFja3dhcmQgY29tcGF0IGZvciBjb2RlIHRoYXQgZXhwZWN0cyBubyBzY29wZWlkLgorICogICBiZXdhcmUgb24gbWVyZ2UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogZ2V0bmFtZWluZm8uYyx2IDEuNDMgMjAwNi8wMi8xNyAxNTo1ODoyNiBnaW5zYmFjaCBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxuZXQvaWYuaD4KKyNpbmNsdWRlIDxuZXQvaWZfZGwuaD4KKyNpbmNsdWRlIDxuZXQvaWZfaWVlZTEzOTQuaD4KKyNpbmNsdWRlIDxuZXQvaWZfdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitzdGF0aWMgY29uc3Qgc3RydWN0IGFmZCB7CisJaW50CQlhX2FmOworCXNvY2tsZW5fdAlhX2FkZHJsZW47CisJc29ja2xlbl90CWFfc29ja2xlbjsKKwlpbnQJCWFfb2ZmOworfSBhZmRsIFtdID0geworI2lmZGVmIElORVQ2CisJe1BGX0lORVQ2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAorCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW42LCBzaW42X2FkZHIpfSwKKyNlbmRpZgorCXtQRl9JTkVULCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwKKwkJb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luLCBzaW5fYWRkcil9LAorCXswLCAwLCAwLCAwfSwKK307CisKK3N0cnVjdCBzb2NraW5ldCB7CisJdV9jaGFyCXNpX2xlbjsKKwl1X2NoYXIJc2lfZmFtaWx5OworCXVfc2hvcnQJc2lfcG9ydDsKK307CisKK3N0YXRpYyBpbnQgZ2V0bmFtZWluZm9faW5ldCBfX1AoKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpKTsKKyNpZmRlZiBJTkVUNgorc3RhdGljIGludCBpcDZfcGFyc2VudW1lcmljIF9fUCgoY29uc3Qgc3RydWN0IHNvY2thZGRyICosIGNvbnN0IGNoYXIgKiwgY2hhciAqLAorCQkJCSBzb2NrbGVuX3QsIGludCkpOworc3RhdGljIGludCBpcDZfc2Eyc3RyIF9fUCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqLCBjaGFyICosIHNpemVfdCwKKwkJCQkgaW50KSk7CisjZW5kaWYKK3N0YXRpYyBpbnQgZ2V0bmFtZWluZm9fbGluayBfX1AoKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqLCBzb2NrbGVuX3QsIGNoYXIgKiwKKyAgICBzb2NrbGVuX3QsIGNoYXIgKiwgc29ja2xlbl90LCBpbnQpKTsKK3N0YXRpYyBpbnQgaGV4bmFtZSBfX1AoKGNvbnN0IHVfaW50OF90ICosIHNpemVfdCwgY2hhciAqLCBzb2NrbGVuX3QpKTsKKworLyoKKyAqIFRvcC1sZXZlbCBnZXRuYW1laW5mbygpIGNvZGUuICBMb29rIGF0IHRoZSBhZGRyZXNzIGZhbWlseSwgYW5kIHBpY2sgYW4KKyAqIGFwcHJvcHJpYXRlIGZ1bmN0aW9uIHRvIGNhbGwuCisgKi8KK2ludCBnZXRuYW1laW5mbyhjb25zdCBzdHJ1Y3Qgc29ja2FkZHIqIHNhLCBzb2NrbGVuX3Qgc2FsZW4sIGNoYXIqIGhvc3QsIHNpemVfdCBob3N0bGVuLCBjaGFyKiBzZXJ2LCBzaXplX3Qgc2VydmxlbiwgaW50IGZsYWdzKQoreworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwljYXNlIEFGX0lORVQ2OgorCQlyZXR1cm4gZ2V0bmFtZWluZm9faW5ldChzYSwgc2FsZW4sIGhvc3QsIGhvc3RsZW4sCisJCSAgICBzZXJ2LCBzZXJ2bGVuLCBmbGFncyk7CisjaWYgMAorCWNhc2UgQUZfTElOSzoKKwkJcmV0dXJuIGdldG5hbWVpbmZvX2xpbmsoc2EsIHNhbGVuLCBob3N0LCBob3N0bGVuLAorCQkgICAgc2Vydiwgc2VydmxlbiwgZmxhZ3MpOworI2VuZGlmCisJZGVmYXVsdDoKKwkJcmV0dXJuIEVBSV9GQU1JTFk7CisJfQorfQorCisKKy8qCisgKiBnZXRuYW1laW5mb19pbmV0KCk6CisgKiBGb3JtYXQgYW4gSVB2NCBvciBJUHY2IHNvY2thZGRyIGludG8gYSBwcmludGFibGUgc3RyaW5nLgorICovCitzdGF0aWMgaW50CitnZXRuYW1laW5mb19pbmV0KHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwgc2Vydiwgc2VydmxlbiwgZmxhZ3MpCisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTsKKwlzb2NrbGVuX3Qgc2FsZW47CisJY2hhciAqaG9zdDsKKwlzb2NrbGVuX3QgaG9zdGxlbjsKKwljaGFyICpzZXJ2OworCXNvY2tsZW5fdCBzZXJ2bGVuOworCWludCBmbGFnczsKK3sKKwljb25zdCBzdHJ1Y3QgYWZkICphZmQ7CisJc3RydWN0IHNlcnZlbnQgKnNwOworCXN0cnVjdCBob3N0ZW50ICpocDsKKwl1X3Nob3J0IHBvcnQ7CisJaW50IGZhbWlseSwgaTsKKwljb25zdCBjaGFyICphZGRyOworCXVfaW50MzJfdCB2NGE7CisJY2hhciBudW1zZXJ2WzUxMl07CisJY2hhciBudW1hZGRyWzUxMl07CisKKwkvKiBzYSBpcyBjaGVja2VkIGJlbG93ICovCisJLyogaG9zdCBtYXkgYmUgTlVMTCAqLworCS8qIHNlcnYgbWF5IGJlIE5VTEwgKi8KKworCWlmIChzYSA9PSBOVUxMKQorCQlyZXR1cm4gRUFJX0ZBSUw7CisKKyNpZmRlZiBCU0Q0XzQKKwlpZiAoc2EtPnNhX2xlbiAhPSBzYWxlbikKKwkJcmV0dXJuIEVBSV9GQUlMOworI2VuZGlmCisKKwlmYW1pbHkgPSBzYS0+c2FfZmFtaWx5OworCWZvciAoaSA9IDA7IGFmZGxbaV0uYV9hZjsgaSsrKQorCQlpZiAoYWZkbFtpXS5hX2FmID09IGZhbWlseSkgeworCQkJYWZkID0gJmFmZGxbaV07CisJCQlnb3RvIGZvdW5kOworCQl9CisJcmV0dXJuIEVBSV9GQU1JTFk7CisKKyBmb3VuZDoKKwlpZiAoc2FsZW4gIT0gYWZkLT5hX3NvY2tsZW4pCisJCXJldHVybiBFQUlfRkFJTDsKKworCS8qIG5ldHdvcmsgYnl0ZSBvcmRlciAqLworCXBvcnQgPSAoKGNvbnN0IHN0cnVjdCBzb2NraW5ldCAqKShjb25zdCB2b2lkICopc2EpLT5zaV9wb3J0OworCWFkZHIgPSAoY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopc2EgKyBhZmQtPmFfb2ZmOworCisJaWYgKHNlcnYgPT0gTlVMTCB8fCBzZXJ2bGVuID09IDApIHsKKwkJLyoKKwkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCisJCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgorCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IHNlcnYgPT0gTlVMTCBPUgorCQkgKiBzZXJ2bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KKwkJICovCisJfSBlbHNlIHsKKwkJaWYgKGZsYWdzICYgTklfTlVNRVJJQ1NFUlYpCisJCQlzcCA9IE5VTEw7CisJCWVsc2UgeworCQkJc3AgPSBnZXRzZXJ2Ynlwb3J0KHBvcnQsCisJCQkJKGZsYWdzICYgTklfREdSQU0pID8gInVkcCIgOiAidGNwIik7CisJCX0KKwkJaWYgKHNwKSB7CisJCQlpZiAoc3RybGVuKHNwLT5zX25hbWUpICsgMSA+IChzaXplX3Qpc2VydmxlbikKKwkJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJCXN0cmxjcHkoc2Vydiwgc3AtPnNfbmFtZSwgc2Vydmxlbik7CisJCX0gZWxzZSB7CisJCQlzbnByaW50ZihudW1zZXJ2LCBzaXplb2YobnVtc2VydiksICIldSIsIG50b2hzKHBvcnQpKTsKKwkJCWlmIChzdHJsZW4obnVtc2VydikgKyAxID4gKHNpemVfdClzZXJ2bGVuKQorCQkJCXJldHVybiBFQUlfTUVNT1JZOworCQkJc3RybGNweShzZXJ2LCBudW1zZXJ2LCBzZXJ2bGVuKTsKKwkJfQorCX0KKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJdjRhID0gKHVfaW50MzJfdCkKKwkJICAgIG50b2hsKCgoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopCisJCSAgICAoY29uc3Qgdm9pZCAqKXNhKS0+c2luX2FkZHIuc19hZGRyKTsKKwkJaWYgKElOX01VTFRJQ0FTVCh2NGEpIHx8IElOX0VYUEVSSU1FTlRBTCh2NGEpKQorCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7CisJCXY0YSA+Pj0gSU5fQ0xBU1NBX05TSElGVDsKKwkJaWYgKHY0YSA9PSAwKQorCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7CisJCWJyZWFrOworI2lmZGVmIElORVQ2CisJY2FzZSBBRl9JTkVUNjoKKwkgICAgeworCQljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzaW42OworCQlzaW42ID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOworCQlzd2l0Y2ggKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyWzBdKSB7CisJCWNhc2UgMHgwMDoKKwkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCQk7CisJCQllbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSkKKwkJCQk7CisJCQllbHNlCisJCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKKwkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJCX0KKwkJCWVsc2UgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRyKSkKKwkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKKwkJCWJyZWFrOworCQl9CisJICAgIH0KKwkJYnJlYWs7CisjZW5kaWYKKwl9CisJaWYgKGhvc3QgPT0gTlVMTCB8fCBob3N0bGVuID09IDApIHsKKwkJLyoKKwkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCisJCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgorCQkgKiAifHwiIGhlcmU6IHJmYzI1NTNiaXMtMDMgc2F5cyB0aGF0IGhvc3QgPT0gTlVMTCBvcgorCQkgKiBob3N0bGVuID09IDAgbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KKwkJICovCisJfSBlbHNlIGlmIChmbGFncyAmIE5JX05VTUVSSUNIT1NUKSB7CisJCXNpemVfdCBudW1hZGRybGVuOworCisJCS8qIE5VTUVSSUNIT1NUIGFuZCBOQU1FUkVRRCBjb25mbGljdHMgd2l0aCBlYWNoIG90aGVyICovCisJCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQorCQkJcmV0dXJuIEVBSV9OT05BTUU7CisKKwkJc3dpdGNoKGFmZC0+YV9hZikgeworI2lmZGVmIElORVQ2CisJCWNhc2UgQUZfSU5FVDY6CisJCXsKKwkJCWludCBlcnJvcjsKKworCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCisJCQkJCQkgICAgICBob3N0bGVuLCBmbGFncykpICE9IDApCisJCQkJcmV0dXJuKGVycm9yKTsKKwkJCWJyZWFrOworCQl9CisjZW5kaWYKKwkJZGVmYXVsdDoKKwkJCWlmIChpbmV0X250b3AoYWZkLT5hX2FmLCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpCisJCQkgICAgPT0gTlVMTCkKKwkJCQlyZXR1cm4gRUFJX1NZU1RFTTsKKwkJCW51bWFkZHJsZW4gPSBzdHJsZW4obnVtYWRkcik7CisJCQlpZiAobnVtYWRkcmxlbiArIDEgPiAoc2l6ZV90KWhvc3RsZW4pIC8qIGRvbid0IGZvcmdldCB0ZXJtaW5hdG9yICovCisJCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCQlzdHJsY3B5KGhvc3QsIG51bWFkZHIsIGhvc3RsZW4pOworCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlocCA9IGdldGhvc3RieWFkZHIoYWRkciwgYWZkLT5hX2FkZHJsZW4sIGFmZC0+YV9hZik7CisKKwkJaWYgKGhwKSB7CisjaWYgMAorCQkJLyoKKwkJCSAqIGNvbW1lbnRlZCBvdXQsIHNpbmNlICJmb3IgbG9jYWwgaG9zdCIgaXMgbm90CisJCQkgKiBpbXBsZW1lbnRlZCBoZXJlIC0gc2VlIFJGQzI1NTMgcDMwCisJCQkgKi8KKwkJCWlmIChmbGFncyAmIE5JX05PRlFETikgeworCQkJCWNoYXIgKnA7CisJCQkJcCA9IHN0cmNocihocC0+aF9uYW1lLCAnLicpOworCQkJCWlmIChwKQorCQkJCQkqcCA9ICdcMCc7CisJCQl9CisjZW5kaWYKKwkJCWlmIChzdHJsZW4oaHAtPmhfbmFtZSkgKyAxID4gKHNpemVfdClob3N0bGVuKSB7CisJCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCQl9CisJCQlzdHJsY3B5KGhvc3QsIGhwLT5oX25hbWUsIGhvc3RsZW4pOworCQl9IGVsc2UgeworCQkJaWYgKGZsYWdzICYgTklfTkFNRVJFUUQpCisJCQkJcmV0dXJuIEVBSV9OT05BTUU7CisJCQlzd2l0Y2goYWZkLT5hX2FmKSB7CisjaWZkZWYgSU5FVDYKKwkJCWNhc2UgQUZfSU5FVDY6CisJCQl7CisJCQkJaW50IGVycm9yOworCisJCQkJaWYgKChlcnJvciA9IGlwNl9wYXJzZW51bWVyaWMoc2EsIGFkZHIsIGhvc3QsCisJCQkJCQkJICAgICAgaG9zdGxlbiwKKwkJCQkJCQkgICAgICBmbGFncykpICE9IDApCisJCQkJCXJldHVybihlcnJvcik7CisJCQkJYnJlYWs7CisJCQl9CisjZW5kaWYKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGluZXRfbnRvcChhZmQtPmFfYWYsIGFkZHIsIGhvc3QsCisJCQkJICAgIGhvc3RsZW4pID09IE5VTEwpCisJCQkJCXJldHVybiBFQUlfU1lTVEVNOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCXJldHVybigwKTsKK30KKworI2lmZGVmIElORVQ2CitzdGF0aWMgaW50CitpcDZfcGFyc2VudW1lcmljKHNhLCBhZGRyLCBob3N0LCBob3N0bGVuLCBmbGFncykKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKnNhOworCWNvbnN0IGNoYXIgKmFkZHI7CisJY2hhciAqaG9zdDsKKwlzb2NrbGVuX3QgaG9zdGxlbjsKKwlpbnQgZmxhZ3M7Cit7CisJc2l6ZV90IG51bWFkZHJsZW47CisJY2hhciBudW1hZGRyWzUxMl07CisKKwlfRElBR0FTU0VSVChzYSAhPSBOVUxMKTsKKwlfRElBR0FTU0VSVChhZGRyICE9IE5VTEwpOworCV9ESUFHQVNTRVJUKGhvc3QgIT0gTlVMTCk7CisKKwlpZiAoaW5ldF9udG9wKEFGX0lORVQ2LCBhZGRyLCBudW1hZGRyLCBzaXplb2YobnVtYWRkcikpID09IE5VTEwpCisJCXJldHVybiBFQUlfU1lTVEVNOworCisJbnVtYWRkcmxlbiA9IHN0cmxlbihudW1hZGRyKTsKKwlpZiAobnVtYWRkcmxlbiArIDEgPiBob3N0bGVuKSAvKiBkb24ndCBmb3JnZXQgdGVybWluYXRvciAqLworCQlyZXR1cm4gRUFJX09WRVJGTE9XOworCXN0cmxjcHkoaG9zdCwgbnVtYWRkciwgaG9zdGxlbik7CisKKwlpZiAoKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICopKGNvbnN0IHZvaWQgKilzYSktPnNpbjZfc2NvcGVfaWQpIHsKKwkJY2hhciB6b25lYnVmW01BWEhPU1ROQU1FTEVOXTsKKwkJaW50IHpvbmVsZW47CisKKwkJem9uZWxlbiA9IGlwNl9zYTJzdHIoCisJCSAgICAoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luNiAqKShjb25zdCB2b2lkICopc2EsCisJCSAgICB6b25lYnVmLCBzaXplb2Yoem9uZWJ1ZiksIGZsYWdzKTsKKwkJaWYgKHpvbmVsZW4gPCAwKQorCQkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwkJaWYgKChzaXplX3QpIHpvbmVsZW4gKyAxICsgbnVtYWRkcmxlbiArIDEgPiBob3N0bGVuKQorCQkJcmV0dXJuIEVBSV9PVkVSRkxPVzsKKwkJLyogY29uc3RydWN0IDxudW1lcmljLWFkZHI+PGRlbGltPjx6b25laWQ+ICovCisJCW1lbWNweShob3N0ICsgbnVtYWRkcmxlbiArIDEsIHpvbmVidWYsCisJCSAgICAoc2l6ZV90KXpvbmVsZW4pOworCQlob3N0W251bWFkZHJsZW5dID0gU0NPUEVfREVMSU1JVEVSOworCQlob3N0W251bWFkZHJsZW4gKyAxICsgem9uZWxlbl0gPSAnXDAnOworCX0KKworCXJldHVybiAwOworfQorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAoraXA2X3NhMnN0cihzYTYsIGJ1ZiwgYnVmc2l6LCBmbGFncykKKwljb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW42ICpzYTY7CisJY2hhciAqYnVmOworCXNpemVfdCBidWZzaXo7CisJaW50IGZsYWdzOworeworCXVuc2lnbmVkIGludCBpZmluZGV4OworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYTY7CisJaW50IG47CisKKwlfRElBR0FTU0VSVChzYTYgIT0gTlVMTCk7CisJX0RJQUdBU1NFUlQoYnVmICE9IE5VTEwpOworCisJaWZpbmRleCA9ICh1bnNpZ25lZCBpbnQpc2E2LT5zaW42X3Njb3BlX2lkOworCWE2ID0gJnNhNi0+c2luNl9hZGRyOworCisjaWZkZWYgTklfTlVNRVJJQ1NDT1BFCisJaWYgKChmbGFncyAmIE5JX05VTUVSSUNTQ09QRSkgIT0gMCkgeworCQluID0gc25wcmludGYoYnVmLCBidWZzaXosICIldSIsIHNhNi0+c2luNl9zY29wZV9pZCk7CisJCWlmIChuIDwgMCB8fCBuID49IGJ1ZnNpeikKKwkJCXJldHVybiAtMTsKKwkJZWxzZQorCQkJcmV0dXJuIG47CisJfQorI2VuZGlmCisKKwkvKiBpZl9pbmRleHRvbmFtZSgpIGRvZXMgbm90IHRha2UgYnVmZmVyIHNpemUuICBub3QgYSBnb29kIGFwaS4uLiAqLworCWlmICgoSU42X0lTX0FERFJfTElOS0xPQ0FMKGE2KSB8fCBJTjZfSVNfQUREUl9NQ19MSU5LTE9DQUwoYTYpKSAmJgorCSAgICBidWZzaXogPj0gSUZfTkFNRVNJWkUpIHsKKwkJY2hhciAqcCA9IGlmX2luZGV4dG9uYW1lKGlmaW5kZXgsIGJ1Zik7CisJCWlmIChwKSB7CisJCQlyZXR1cm4oc3RybGVuKHApKTsKKwkJfQorCX0KKworCS8qIGxhc3QgcmVzb3J0ICovCisJbiA9IHNucHJpbnRmKGJ1ZiwgYnVmc2l6LCAiJXUiLCBzYTYtPnNpbjZfc2NvcGVfaWQpOworCWlmIChuIDwgMCB8fCAoc2l6ZV90KSBuID49IGJ1ZnNpeikKKwkJcmV0dXJuIC0xOworCWVsc2UKKwkJcmV0dXJuIG47Cit9CisjZW5kaWYgLyogSU5FVDYgKi8KKworCisvKgorICogZ2V0bmFtZWluZm9fbGluaygpOgorICogRm9ybWF0IGEgbGluay1sYXllciBhZGRyZXNzIGludG8gYSBwcmludGFibGUgZm9ybWF0LCBwYXlpbmcgYXR0ZW50aW9uIHRvCisgKiB0aGUgaW50ZXJmYWNlIHR5cGUuCisgKi8KKy8qIEFSR1NVU0VEICovCitzdGF0aWMgaW50CitnZXRuYW1laW5mb19saW5rKGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EsIHNvY2tsZW5fdCBzYWxlbiwKKyAgICBjaGFyICpob3N0LCBzb2NrbGVuX3QgaG9zdGxlbiwgY2hhciAqc2Vydiwgc29ja2xlbl90IHNlcnZsZW4sCisgICAgaW50IGZsYWdzKQoreworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9kbCAqc2RsID0KKwkgICAgKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9kbCAqKShjb25zdCB2b2lkICopc2E7CisJY29uc3Qgc3RydWN0IGllZWUxMzk0X2h3YWRkciAqaWhhOworCWludCBuOworCisJaWYgKHNlcnYgIT0gTlVMTCAmJiBzZXJ2bGVuID4gMCkKKwkJKnNlcnYgPSAnXDAnOworCisJaWYgKHNkbC0+c2RsX25sZW4gPT0gMCAmJiBzZGwtPnNkbF9hbGVuID09IDAgJiYgc2RsLT5zZGxfc2xlbiA9PSAwKSB7CisJCW4gPSBzbnByaW50Zihob3N0LCBob3N0bGVuLCAibGluayMldSIsIHNkbC0+c2RsX2luZGV4KTsKKwkJaWYgKG4gPCAwIHx8IChzb2NrbGVuX3QpIG4gPiBob3N0bGVuKSB7CisJCQkqaG9zdCA9ICdcMCc7CisJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJfQorCQlyZXR1cm4gMDsKKwl9CisKKwlzd2l0Y2ggKHNkbC0+c2RsX3R5cGUpIHsKKyNpZmRlZiBJRlRfRUNPTkVUCisJY2FzZSBJRlRfRUNPTkVUOgorCQlpZiAoc2RsLT5zZGxfYWxlbiA8IDIpCisJCQlyZXR1cm4gRUFJX0ZBTUlMWTsKKwkJaWYgKENMTEFERFIoc2RsKVsxXSA9PSAwKQorCQkJbiA9IHNucHJpbnRmKGhvc3QsIGhvc3RsZW4sICIldSIsIENMTEFERFIoc2RsKVswXSk7CisJCWVsc2UKKwkJCW4gPSBzbnByaW50Zihob3N0LCBob3N0bGVuLCAiJXUuJXUiLAorCQkJICAgIENMTEFERFIoc2RsKVsxXSwgQ0xMQUREUihzZGwpWzBdKTsKKwkJaWYgKG4gPCAwIHx8IChzb2NrbGVuX3QpIG4gPj0gaG9zdGxlbikgeworCQkJKmhvc3QgPSAnXDAnOworCQkJcmV0dXJuIEVBSV9NRU1PUlk7CisJCX0gZWxzZQorCQkJcmV0dXJuIDA7CisjZW5kaWYKKwljYXNlIElGVF9JRUVFMTM5NDoKKwkJaWYgKHNkbC0+c2RsX2FsZW4gPCBzaXplb2YoaWhhLT5paGFfdWlkKSkKKwkJCXJldHVybiBFQUlfRkFNSUxZOworCQlpaGEgPQorCQkgICAgKGNvbnN0IHN0cnVjdCBpZWVlMTM5NF9od2FkZHIgKikoY29uc3Qgdm9pZCAqKUNMTEFERFIoc2RsKTsKKwkJcmV0dXJuIGhleG5hbWUoaWhhLT5paGFfdWlkLCBzaXplb2YoaWhhLT5paGFfdWlkKSwKKwkJICAgIGhvc3QsIGhvc3RsZW4pOworCS8qCisJICogVGhlIGZvbGxvd2luZyBoYXZlIHplcm8tbGVuZ3RoIGFkZHJlc3Nlcy4KKwkgKiBJRlRfQVRNCShuZXQvaWZfYXRtc3Vici5jKQorCSAqIElGVF9GQUlUSAkobmV0L2lmX2ZhaXRoLmMpCisJICogSUZUX0dJRgkobmV0L2lmX2dpZi5jKQorCSAqIElGVF9MT09QCShuZXQvaWZfbG9vcC5jKQorCSAqIElGVF9QUFAJKG5ldC9pZl9wcHAuYywgbmV0L2lmX3NwcHBzdWJyLmMpCisJICogSUZUX1NMSVAJKG5ldC9pZl9zbC5jLCBuZXQvaWZfc3RyaXAuYykKKwkgKiBJRlRfU1RGCShuZXQvaWZfc3RmLmMpCisJICogSUZUX0wyVkxBTgkobmV0L2lmX3ZsYW4uYykKKwkgKiBJRlRfUFJPUFZJUlRVQUwgKG5ldC9pZl9icmlkZ2UuaD4KKwkgKi8KKwkvKgorCSAqIFRoZSBmb2xsb3dpbmcgdXNlIElQdjQgYWRkcmVzc2VzIGFzIGxpbmstbGF5ZXIgYWRkcmVzc2VzOgorCSAqIElGVF9PVEhFUgkobmV0L2lmX2dyZS5jKQorCSAqLworCWNhc2UgSUZUX0FSQ05FVDogLyogZGVmYXVsdCBiZWxvdyBpcyBiZWxpZXZlZCBjb3JyZWN0IGZvciBhbGwgdGhlc2UuICovCisJY2FzZSBJRlRfRVRIRVI6CisJY2FzZSBJRlRfRkRESToKKwljYXNlIElGVF9ISVBQSToKKwljYXNlIElGVF9JU084ODAyNToKKwlkZWZhdWx0OgorCQlyZXR1cm4gaGV4bmFtZSgoY29uc3QgdV9pbnQ4X3QgKilDTExBRERSKHNkbCksCisJCSAgICAoc2l6ZV90KXNkbC0+c2RsX2FsZW4sIGhvc3QsIGhvc3RsZW4pOworCX0KK30KKworc3RhdGljIGludAoraGV4bmFtZShjcCwgbGVuLCBob3N0LCBob3N0bGVuKQorCWNvbnN0IHVfaW50OF90ICpjcDsKKwljaGFyICpob3N0OworCXNpemVfdCBsZW47CisJc29ja2xlbl90IGhvc3RsZW47Cit7CisJaW50IG47CisJc2l6ZV90IGk7CisJY2hhciAqb3V0cCA9IGhvc3Q7CisKKwkqb3V0cCA9ICdcMCc7CisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCW4gPSBzbnByaW50ZihvdXRwLCBob3N0bGVuLCAiJXMlMDJ4IiwKKwkJICAgIGkgPyAiOiIgOiAiIiwgY3BbaV0pOworCQlpZiAobiA8IDAgfHwgKHNvY2tsZW5fdCkgbiA+PSBob3N0bGVuKSB7CisJCQkqaG9zdCA9ICdcMCc7CisJCQlyZXR1cm4gRUFJX01FTU9SWTsKKwkJfQorCQlvdXRwICs9IG47CisJCWhvc3RsZW4gLT0gbjsKKwl9CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5bmFtZS5jIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWE1MjhlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieW5hbWUuYwpAQCAtMCwwICsxLDU0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJzZXJ2ZW50LmgiCisKK3N0cnVjdCBzZXJ2ZW50ICoKK2dldHNlcnZieW5hbWUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJvdG8pCit7CisgICAgcmVzX3N0YXRpYyAgICAgICBycyA9IF9fcmVzX2dldF9zdGF0aWMoKTsKKyAgICBzdHJ1Y3Qgc2VydmVudCogIHM7CisKKyAgICBpZiAocnMgPT0gTlVMTCB8fCBwcm90byA9PSBOVUxMIHx8IG5hbWUgPT0gTlVMTCkgeworICAgICAgICBlcnJubyA9IEVJTlZBTDsKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgfQorCisgICAgcnMtPnNlcnZlbnRfcHRyID0gTlVMTDsKKyAgICB3aGlsZSAoMSkgeworICAgICAgICBzdHJ1Y3Qgc2VydmVudCogIHMgPSBnZXRzZXJ2ZW50X3IocnMpOworICAgICAgICBpZiAocyA9PSBOVUxMKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmICggIXN0cmNtcCggcy0+c19uYW1lLCBuYW1lICkgJiYgIXN0cmNtcCggcy0+c19wcm90bywgcHJvdG8gKSApCisgICAgICAgICAgICByZXR1cm4gczsKKyAgICB9CisKKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lX3IuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2YnluYW1lX3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mYjZkYzUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieW5hbWVfci5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCSROZXRCU0Q6IGdldHNlcnZieW5hbWVfci5jLHYgMS4zIDIwMDUvMDQvMTggMTk6Mzk6NDUga2xlaW5rIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWYgMAorc3RhdGljIGNoYXIgc2Njc2lkW10gPSAiQCgjKWdldHNlcnZieW5hbWUuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IGdldHNlcnZieW5hbWVfci5jLHYgMS4zIDIwMDUvMDQvMTggMTk6Mzk6NDUga2xlaW5rIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxhc3NlcnQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAic2VydmVudC5oIgorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2YnluYW1lX3IoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqcHJvdG8sIHN0cnVjdCBzZXJ2ZW50ICpzcCwKKyAgICBzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKK3sKKwlzdHJ1Y3Qgc2VydmVudCAqczsKKwljaGFyICoqY3A7CisKKwlhc3NlcnQobmFtZSAhPSBOVUxMKTsKKwkvKiBwcm90byBtYXkgYmUgTlVMTCAqLworCisJc2V0c2VydmVudF9yKHNkLT5zdGF5b3Blbiwgc2QpOworCXdoaWxlICgocyA9IGdldHNlcnZlbnRfcihzcCwgc2QpKSAhPSBOVUxMKSB7CisJCWlmIChzdHJjbXAobmFtZSwgcy0+c19uYW1lKSA9PSAwKQorCQkJZ290byBnb3RuYW1lOworCQlmb3IgKGNwID0gcy0+c19hbGlhc2VzOyAqY3A7IGNwKyspCisJCQlpZiAoc3RyY21wKG5hbWUsICpjcCkgPT0gMCkKKwkJCQlnb3RvIGdvdG5hbWU7CisJCWNvbnRpbnVlOworZ290bmFtZToKKwkJaWYgKHByb3RvID09IE5VTEwgfHwgc3RyY21wKHMtPnNfcHJvdG8sIHByb3RvKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmICghc2QtPnN0YXlvcGVuKQorCQlpZiAoc2QtPmZwICE9IE5VTEwpIHsKKwkJCSh2b2lkKWZjbG9zZShzZC0+ZnApOworCQkJc2QtPmZwID0gTlVMTDsKKwkJfQorCXJldHVybiBzOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L2dldHNlcnZieXBvcnQuYyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFkN2UyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0LmMKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAic2VydmVudC5oIgorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2Ynlwb3J0KGludCBwb3J0LCBjb25zdCBjaGFyICpwcm90bykKK3sKKyAgICByZXNfc3RhdGljICAgICAgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworICAgIHN0cnVjdCBzZXJ2ZW50KiAgczsKKworICAgIGlmIChycyA9PSBOVUxMIHx8IHByb3RvID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7CisgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgc3RydWN0IHNlcnZlbnQqICBzID0gZ2V0c2VydmVudF9yKHJzKTsKKyAgICAgICAgaWYgKHMgPT0gTlVMTCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAoIHMtPnNfcG9ydCA9PSBwb3J0ICYmICFzdHJjbXAoIHMtPnNfcHJvdG8sIHByb3RvICkgKQorICAgICAgICAgICAgcmV0dXJuIHM7CisgICAgfQorCisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydF9yLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmJ5cG9ydF9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmZlNDI5MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2Ynlwb3J0X3IuYwpAQCAtMCwwICsxLDY1IEBACisvKgkkTmV0QlNEOiBnZXRzZXJ2Ynlwb3J0X3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRzZXJ2Ynlwb3J0LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBnZXRzZXJ2Ynlwb3J0X3IuYyx2IDEuMyAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgInNlcnZlbnQuaCIKKworc3RydWN0IHNlcnZlbnQgKgorZ2V0c2VydmJ5cG9ydF9yKGludCBwb3J0LCBjb25zdCBjaGFyICpwcm90bywgc3RydWN0IHNlcnZlbnQgKnNwLAorICAgIHN0cnVjdCBzZXJ2ZW50X2RhdGEgKnNkKQoreworCXN0cnVjdCBzZXJ2ZW50ICpzOworCisJc2V0c2VydmVudF9yKHNkLT5zdGF5b3Blbiwgc2QpOworCXdoaWxlICgocyA9IGdldHNlcnZlbnRfcihzcCwgc2QpKSAhPSBOVUxMKSB7CisJCWlmIChzLT5zX3BvcnQgIT0gcG9ydCkKKwkJCWNvbnRpbnVlOworCQlpZiAocHJvdG8gPT0gTlVMTCB8fCBzdHJjbXAocy0+c19wcm90bywgcHJvdG8pID09IDApCisJCQlicmVhazsKKwl9CisJaWYgKCFzZC0+c3RheW9wZW4pCisJCWlmIChzZC0+ZnAgIT0gTlVMTCkgeworCQkJKHZvaWQpZmNsb3NlKHNkLT5mcCk7CisJCQlzZC0+ZnAgPSBOVUxMOworCQl9CisJcmV0dXJuIHM7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudC5jIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40NTIwN2RmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L2dldHNlcnZlbnQuYwpAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSAic2VydmVudC5oIgorI2luY2x1ZGUgInNlcnZpY2VzLmgiCisKK3ZvaWQKK3NldHNlcnZlbnQoaW50IGYpCit7CisgICAgcmVzX3N0YXRpYyAgcnMgPSBfX3Jlc19nZXRfc3RhdGljKCk7CisgICAgaWYgKHJzKSB7CisgICAgICAgIHJzLT5zZXJ2ZW50X3B0ciA9IE5VTEw7CisgICAgfQorfQorCit2b2lkCitlbmRzZXJ2ZW50KHZvaWQpCit7CisgICAgLyogbm90aGluZyB0byBkbyAqLworfQorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2ZW50X3IoIHJlc19zdGF0aWMgIHJzICkKK3sKKyAgICBjb25zdCBjaGFyKiAgcDsKKyAgICBjb25zdCBjaGFyKiAgcTsKKyAgICBpbnQgICAgICAgICAgbmFtZWxlbjsKKyAgICBpbnQgICAgICAgICAgbm4sY291bnQ7CisgICAgaW50ICAgICAgICAgIHRvdGFsID0gMDsKKyAgICBjaGFyKiAgICAgICAgcDI7CisKKyAgICBwID0gcnMtPnNlcnZlbnRfcHRyOworICAgIGlmIChwID09IE5VTEwpCisgICAgICAgIHAgPSBfc2VydmljZXM7CisgICAgZWxzZSBpZiAocFswXSA9PSAwKQorICAgICAgICByZXR1cm4gTlVMTDsKKworICAgIC8qIGZpcnN0IGNvbXB1dGUgdGhlIHRvdGFsIHNpemUgKi8KKyAgICBuYW1lbGVuID0gcFswXTsKKyAgICB0b3RhbCAgKz0gbmFtZWxlbiArIDE7CisgICAgcSAgICAgICA9IHAgKyAxICsgbmFtZWxlbiArIDM7ICAvKiBza2lwIG5hbWUgKyBwb3J0ICsgcHJvdG8gKi8KKyAgICBjb3VudCAgID0gcVswXTsgICAvKiBnZXQgYWxpYXNjb3VudCAqLworICAgIHEgICAgICArPSAxOworCisgICAgdG90YWwgKz0gKGNvdW50KzEpKnNpemVvZihjaGFyKik7CisgICAgZm9yIChubiA9IDA7IG5uIDwgY291bnQ7IG5uKyspIHsKKyAgICAgICAgaW50ICBsZW4yID0gcVswXTsKKyAgICAgICAgdG90YWwgKz0gMSArIGxlbjI7CisgICAgICAgIHEgICAgICs9IDEgKyBsZW4yOworICAgIH0KKworICAgIC8qIHJlYWxsb2NhdGUgdGhlIHRocmVhZC1zcGVjaWZpYyBzZXJ2ZW50IHN0cnVjdCAqLworICAgIHAyID0gcmVhbGxvYyggKGNoYXIqKXJzLT5zZXJ2ZW50LnNfYWxpYXNlcywgdG90YWwgKTsKKyAgICBpZiAocDIgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICAvKiBub3cgd3JpdGUgdG8gaXQgKi8KKyAgICBycy0+c2VydmVudC5zX2FsaWFzZXMgPSAoY2hhcioqKSBwMjsKKyAgICBwMiAgICAgICAgICAgICAgICAgICArPSAoY291bnQrMSkqc2l6ZW9mKGNoYXIqKTsKKyAgICBycy0+c2VydmVudC5zX25hbWUgICAgPSBwMjsKKyAgICBwMiAgICAgICAgICAgICAgICAgICArPSBuYW1lbGVuICsgMTsKKyAgICBycy0+c2VydmVudC5zX3Byb3RvICAgPSBwMjsKKworICAgIC8qIGNvcHkgbmFtZSArIHBvcnQgKyBzZXR1cCBwcm90b2NvbCAqLworICAgIG1lbWNweSggcnMtPnNlcnZlbnQuc19uYW1lLCBwKzEsIG5hbWVsZW4gKTsKKyAgICBycy0+c2VydmVudC5zX25hbWVbbmFtZWxlbl0gPSAwOworICAgIHAgKz0gMSArIG5hbWVsZW47CisgICAgcnMtPnNlcnZlbnQuc19wb3J0ID0gKCgoKHVuc2lnbmVkIGNoYXIqKXApWzBdIDw8IDgpIHwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICgodW5zaWduZWQgY2hhciopcClbMV0pOworCisgICAgcnMtPnNlcnZlbnQuc19wcm90byA9IHBbMl0gPT0gJ3QnID8gInRjcCIgOiAidWRwIjsKKyAgICBwICs9IDQ7ICAvKiBza2lwIHBvcnQoMikgKyBwcm90bygxKSArIGFsaWFzY291bnQoMSkgKi8KKworICAgIGZvciAobm4gPSAwOyBubiA8IGNvdW50OyBubisrKSB7CisgICAgICAgIGludCAgbGVuMiA9IHBbMF07CisgICAgICAgIHJzLT5zZXJ2ZW50LnNfYWxpYXNlc1tubl0gPSBwMjsKKyAgICAgICAgbWVtY3B5KCBwMiwgcCsxLCBsZW4yICk7CisgICAgICAgIHAyW2xlbjJdID0gMDsKKyAgICAgICAgcDIgKz0gbGVuMiArIDE7CisgICAgICAgIHAgICs9IGxlbjIgKyAxOworICAgIH0KKyAgICBycy0+c2VydmVudC5zX2FsaWFzZXNbbm5dID0gTlVMTDsKKworICAgIHJzLT5zZXJ2ZW50X3B0ciA9IHA7CisKKyAgICByZXR1cm4gJnJzLT5zZXJ2ZW50OworfQorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2ZW50KHZvaWQpCit7CisgICAgcmVzX3N0YXRpYyAgIHJzID0gX19yZXNfZ2V0X3N0YXRpYygpOworCisgICAgaWYgKHJzID09IE5VTEwpIHJldHVybiBOVUxMOworCisgICAgcmV0dXJuIGdldHNlcnZlbnRfcihycyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudF9yLmMgYi9saWJjL25ldGJzZC9uZXQvZ2V0c2VydmVudF9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTY2ODc1OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9nZXRzZXJ2ZW50X3IuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoJJE5ldEJTRDogZ2V0c2VydmVudF9yLmMsdiAxLjUgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MywgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmIDAKK3N0YXRpYyBjaGFyIHNjY3NpZFtdID0gIkAoIylnZXRzZXJ2ZW50LmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiBnZXRzZXJ2ZW50X3IuYyx2IDEuNSAyMDA1LzA0LzE4IDE5OjM5OjQ1IGtsZWluayBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorCisjaW5jbHVkZSAic2VydmVudC5oIgorCit2b2lkCitzZXRzZXJ2ZW50X3IoaW50IGYsIHN0cnVjdCBzZXJ2ZW50X2RhdGEgKnNkKQoreworCWlmIChzZC0+ZnAgPT0gTlVMTCkKKwkJc2QtPmZwID0gZm9wZW4oX1BBVEhfU0VSVklDRVMsICJyIik7CisJZWxzZQorCQlyZXdpbmQoc2QtPmZwKTsKKwlzZC0+c3RheW9wZW4gfD0gZjsKK30KKwordm9pZAorZW5kc2VydmVudF9yKHN0cnVjdCBzZXJ2ZW50X2RhdGEgKnNkKQoreworCWlmIChzZC0+ZnApIHsKKwkJKHZvaWQpZmNsb3NlKHNkLT5mcCk7CisJCXNkLT5mcCA9IE5VTEw7CisJfQorCWlmIChzZC0+YWxpYXNlcykgeworCQlmcmVlKHNkLT5hbGlhc2VzKTsKKwkJc2QtPmFsaWFzZXMgPSBOVUxMOworCQlzZC0+bWF4YWxpYXNlcyA9IDA7CisJfQorCWlmIChzZC0+bGluZSkgeworCQlmcmVlKHNkLT5saW5lKTsKKwkJc2QtPmxpbmUgPSBOVUxMOworCX0KKwlzZC0+c3RheW9wZW4gPSAwOworfQorCitzdHJ1Y3Qgc2VydmVudCAqCitnZXRzZXJ2ZW50X3Ioc3RydWN0IHNlcnZlbnQgKnNwLCBzdHJ1Y3Qgc2VydmVudF9kYXRhICpzZCkKK3sKKwljaGFyICpwLCAqY3AsICoqcTsKKwlzaXplX3QgaSA9IDA7CisJaW50IG9lcnJubzsKKworCWlmIChzZC0+ZnAgPT0gTlVMTCAmJiAoc2QtPmZwID0gZm9wZW4oX1BBVEhfU0VSVklDRVMsICJyIikpID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJZm9yICg7OykgeworCQlpZiAoc2QtPmxpbmUpCisJCQlmcmVlKHNkLT5saW5lKTsKKy8vCQlzZC0+bGluZSA9IGZwYXJzZWxuKHNkLT5mcCwgTlVMTCwgTlVMTCwgTlVMTCwgRlBBUlNFTE5fVU5FU0NBTEwpOworCQlmcHJpbnRmKHN0ZGVyciwgIioqKiBGSVggTUUhIGdldHNlcnZlbnRfcigpIGlzIGdvaW5nIHRvIGZhaWwhISFcbiIpOworCQlzZC0+bGluZSA9IE5VTEw7CisJCWlmIChzZC0+bGluZSA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCXNwLT5zX25hbWUgPSBwID0gc2QtPmxpbmU7CisJCXAgPSBzdHJwYnJrKHAsICIgXHQiKTsKKwkJaWYgKHAgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCQkqcCsrID0gJ1wwJzsKKwkJd2hpbGUgKCpwID09ICcgJyB8fCAqcCA9PSAnXHQnKQorCQkJcCsrOworCQljcCA9IHN0cnBicmsocCwgIiwvIik7CisJCWlmIChjcCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCSpjcCsrID0gJ1wwJzsKKwkJc3AtPnNfcG9ydCA9IGh0b25zKCh1X3Nob3J0KWF0b2kocCkpOworCQlzcC0+c19wcm90byA9IGNwOworCQlpZiAoc2QtPmFsaWFzZXMgPT0gTlVMTCkgeworCQkJc2QtPm1heGFsaWFzZXMgPSAxMDsKKwkJCXNkLT5hbGlhc2VzID0gbWFsbG9jKHNkLT5tYXhhbGlhc2VzICogc2l6ZW9mKGNoYXIgKikpOworCQkJaWYgKHNkLT5hbGlhc2VzID09IE5VTEwpIHsKKwkJCQlvZXJybm8gPSBlcnJubzsKKwkJCQllbmRzZXJ2ZW50X3Ioc2QpOworCQkJCWVycm5vID0gb2Vycm5vOworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9CisJCXEgPSBzcC0+c19hbGlhc2VzID0gc2QtPmFsaWFzZXM7CisJCWNwID0gc3RycGJyayhjcCwgIiBcdCIpOworCQlpZiAoY3AgIT0gTlVMTCkKKwkJCSpjcCsrID0gJ1wwJzsKKwkJd2hpbGUgKGNwICYmICpjcCkgeworCQkJaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCQljcCsrOworCQkJCWNvbnRpbnVlOworCQkJfQorCQkJaWYgKGkgPT0gc2QtPm1heGFsaWFzZXMgLSAyKSB7CisJCQkJc2QtPm1heGFsaWFzZXMgKj0gMjsKKwkJCQlxID0gcmVhbGxvYyhxLAorCQkJCSAgICBzZC0+bWF4YWxpYXNlcyAqIHNpemVvZihjaGFyICopKTsKKwkJCQlpZiAocSA9PSBOVUxMKSB7CisJCQkJCW9lcnJubyA9IGVycm5vOworCQkJCQllbmRzZXJ2ZW50X3Ioc2QpOworCQkJCQllcnJubyA9IG9lcnJubzsKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQkJfQorCQkJCXNwLT5zX2FsaWFzZXMgPSBzZC0+YWxpYXNlcyA9IHE7CisJCQl9CisJCQlxW2krK10gPSBjcDsKKwkJCWNwID0gc3RycGJyayhjcCwgIiBcdCIpOworCQkJaWYgKGNwICE9IE5VTEwpCisJCQkJKmNwKysgPSAnXDAnOworCQl9CisJCXFbaV0gPSBOVUxMOworCQlyZXR1cm4gc3A7CisJfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvbmV0L25zZGlzcGF0Y2guYyBiL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmE5OTM2NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9uc2Rpc3BhdGNoLmMKQEAgLTAsMCArMSwxNTIgQEAKKy8qCSROZXRCU0Q6IG5zZGlzcGF0Y2guYyx2IDEuMzAgMjAwNS8xMS8yOSAwMzoxMTo1OSBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybjsgYW5kIGJ5IEphc29uIFIuIFRob3JwZS4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDMgTmV0d29ya3MgQXNzb2NpYXRlcyBUZWNobm9sb2d5LCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFBvcnRpb25zIG9mIHRoaXMgc29mdHdhcmUgd2VyZSBkZXZlbG9wZWQgZm9yIHRoZSBGcmVlQlNEIFByb2plY3QgYnkKKyAqIEphY3F1ZXMgQS4gVmlkcmluZSwgU2FmZXBvcnQgTmV0d29yayBTZXJ2aWNlcywgYW5kIE5ldHdvcmsKKyAqIEFzc29jaWF0ZXMgTGFib3JhdG9yaWVzLCB0aGUgU2VjdXJpdHkgUmVzZWFyY2ggRGl2aXNpb24gb2YgTmV0d29yaworICogQXNzb2NpYXRlcywgSW5jLiB1bmRlciBEQVJQQS9TUEFXQVIgY29udHJhY3QgTjY2MDAxLTAxLUMtODAzNQorICogKCJDQk9TUyIpLCBhcyBwYXJ0IG9mIHRoZSBEQVJQQSBDSEFUUyByZXNlYXJjaCBwcm9ncmFtLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorCisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaWZkZWYgX19FTEZfXworI2luY2x1ZGUgPGRsZmNuLmg+CisjZW5kaWYgLyogX19FTEZfXyAqLworI2luY2x1ZGUgPGZjbnRsLmg+CisjZGVmaW5lIF9OU19QUklWQVRFCisjaW5jbHVkZSA8bnNzd2l0Y2guaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgbnNzX21ldGhvZAorX25zbWV0aG9kKGNvbnN0IGNoYXIgKnNvdXJjZSwgY29uc3QgY2hhciAqZGF0YWJhc2UsIGNvbnN0IGNoYXIgKm1ldGhvZCwKKyAgICBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIHZvaWQgKipjYl9kYXRhKQoreworCWludAljdXJkaXNwOworCisJaWYgKGRpc3BfdGFiICE9IE5VTEwpIHsKKwkJZm9yIChjdXJkaXNwID0gMDsgZGlzcF90YWJbY3VyZGlzcF0uc3JjICE9IE5VTEw7IGN1cmRpc3ArKykgeworCQkJaWYgKHN0cmNhc2VjbXAoc291cmNlLCBkaXNwX3RhYltjdXJkaXNwXS5zcmMpID09IDApIHsKKwkJCQkqY2JfZGF0YSA9IGRpc3BfdGFiW2N1cmRpc3BdLmNiX2RhdGE7CisJCQkJcmV0dXJuIChkaXNwX3RhYltjdXJkaXNwXS5jYWxsYmFjayk7CisJCQl9CisJCX0KKwl9CisKKwkqY2JfZGF0YSA9IE5VTEw7CisJcmV0dXJuIChOVUxMKTsKK30KKworaW50CisvKkFSR1NVU0VEKi8KK25zZGlzcGF0Y2godm9pZCAqcmV0dmFsLCBjb25zdCBuc19kdGFiIGRpc3BfdGFiW10sIGNvbnN0IGNoYXIgKmRhdGFiYXNlLAorCSAgICBjb25zdCBjaGFyICptZXRob2QsIGNvbnN0IG5zX3NyYyBkZWZhdWx0c1tdLCAuLi4pCit7CisJdmFfbGlzdAkJIGFwOworCWludAkJIGksIHJlc3VsdDsKKwljb25zdCBuc19zcmMJKnNyY2xpc3Q7CisJaW50CQkgc3JjbGlzdHNpemU7CisJbnNzX21ldGhvZAkgY2I7CisJdm9pZAkJKmNiX2RhdGE7CisKKwkvKiByZXR2YWwgbWF5IGJlIE5VTEwgKi8KKwkvKiBkaXNwX3RhYiBtYXkgYmUgTlVMTCAqLworCWFzc2VydChkYXRhYmFzZSAhPSBOVUxMKTsKKwlhc3NlcnQobWV0aG9kICE9IE5VTEwpOworCWFzc2VydChkZWZhdWx0cyAhPSBOVUxMKTsKKwlpZiAoZGF0YWJhc2UgPT0gTlVMTCB8fCBtZXRob2QgPT0gTlVMTCB8fCBkZWZhdWx0cyA9PSBOVUxMKQorCQlyZXR1cm4gKE5TX1VOQVZBSUwpOworCisgICAgICAgIHNyY2xpc3QgPSBkZWZhdWx0czsKKyAgICAgICAgc3JjbGlzdHNpemUgPSAwOworICAgICAgICB3aGlsZSAoc3JjbGlzdFtzcmNsaXN0c2l6ZV0ubmFtZSAhPSBOVUxMKQorICAgICAgICAgICAgICAgIHNyY2xpc3RzaXplKys7CisKKwlyZXN1bHQgPSAwOworCisJZm9yIChpID0gMDsgaSA8IHNyY2xpc3RzaXplOyBpKyspIHsKKwkJY2IgPSBfbnNtZXRob2Qoc3JjbGlzdFtpXS5uYW1lLCBkYXRhYmFzZSwgbWV0aG9kLAorCQkgICAgZGlzcF90YWIsICZjYl9kYXRhKTsKKwkJcmVzdWx0ID0gMDsKKwkJaWYgKGNiICE9IE5VTEwpIHsKKwkJCXZhX3N0YXJ0KGFwLCBkZWZhdWx0cyk7CisJCQlyZXN1bHQgPSAoKmNiKShyZXR2YWwsIGNiX2RhdGEsIGFwKTsKKwkJCXZhX2VuZChhcCk7CisJCQlpZiAoZGVmYXVsdHNbMF0uZmxhZ3MgJiBOU19GT1JDRUFMTCkKKwkJCQljb250aW51ZTsKKwkJCWlmIChyZXN1bHQgJiBzcmNsaXN0W2ldLmZsYWdzKQorCQkJCWJyZWFrOworCQl9CisJfQorCXJlc3VsdCAmPSBOU19TVEFUVVNNQVNLOwkvKiBjbGVhciBwcml2YXRlIGZsYWdzIGluIHJlc3VsdCAqLworCisJcmV0dXJuIChyZXN1bHQgPyByZXN1bHQgOiBOU19OT1RGT1VORCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmggYi9saWJjL25ldGJzZC9uZXQvcmVlbnRyYW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU1MDdlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9yZWVudHJhbnQuaApAQCAtMCwwICsxLDI2OCBAQAorLyoJJE5ldEJTRDogcmVlbnRyYW50LmgsdiAxLjEwIDIwMDQvMTIvMTQgMDA6MjM6MTkgbmF0aGFudyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMjAwMyBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEouVC4gQ29ua2xpbiwgYnkgTmF0aGFuIEouIFdpbGxpYW1zLCBhbmQgYnkgSmFzb24gUi4gVGhvcnBlLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAgICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgTmV0QlNECisgKiAgICAgICAgRm91bmRhdGlvbiwgSW5jLiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgVGhlIE5ldEJTRCBGb3VuZGF0aW9uIG5vciB0aGUgbmFtZXMgb2YgaXRzCisgKiAgICBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBORVRCU0QgRk9VTkRBVElPTiwgSU5DLiBBTkQgQ09OVFJJQlVUT1JTCisgKiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEZPVU5EQVRJT04gT1IgQ09OVFJJQlVUT1JTCisgKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCisgKiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgorICogU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTCisgKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgorICogQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKKyAqIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUmVxdWlyZW1lbnRzOgorICogCisgKiAxLiBUaGUgdGhyZWFkIHNhZmUgbWVjaGFuaXNtIHNob3VsZCBiZSBsaWdodHdlaWdodCBzbyB0aGUgbGlicmFyeSBjYW4KKyAqICAgIGJlIHVzZWQgYnkgbm9uLXRocmVhZGVkIGFwcGxpY2F0aW9ucyB3aXRob3V0IHVucmVhc29uYWJsZSBvdmVyaGVhZC4KKyAqIAorICogMi4gVGhlcmUgc2hvdWxkIGJlIG5vIGRlcGVuZGVuY3kgb24gYSB0aHJlYWQgZW5naW5lIGZvciBub24tdGhyZWFkZWQKKyAqICAgIGFwcGxpY2F0aW9ucy4KKyAqIAorICogMy4gVGhlcmUgc2hvdWxkIGJlIG5vIGRlcGVuZGVuY3kgb24gYW55IHBhcnRpY3VsYXIgdGhyZWFkIGVuZ2luZS4KKyAqIAorICogNC4gVGhlIGxpYnJhcnkgc2hvdWxkIGJlIGFibGUgdG8gYmUgY29tcGlsZWQgd2l0aG91dCBzdXBwb3J0IGZvciB0aHJlYWQKKyAqICAgIHNhZmV0eS4KKyAqIAorICogCisgKiBSYXRpb25hbGU6CisgKiAKKyAqIE9uZSBhcHByb2FjaCBmb3IgdGhyZWFkIHNhZmV0eSBpcyB0byBwcm92aWRlIGRpc2NyZXRlIHZlcnNpb25zIG9mIHRoZQorICogbGlicmFyeTogb25lIHRocmVhZCBzYWZlLCB0aGUgb3RoZXIgbm90LiAgVGhlIGRpc2FkdmFudGFnZSBvZiB0aGlzIGlzCisgKiB0aGF0IGxpYmMgaXMgcmF0aGVyIGxhcmdlLCBhbmQgdHdvIGNvcGllcyBvZiBhIGxpYnJhcnkgd2hpY2ggYXJlIDk5JSsKKyAqIGlkZW50aWNhbCBpcyBub3QgYW4gZWZmaWNlbnQgdXNlIG9mIHJlc291cmNlcy4KKyAqIAorICogQW5vdGhlciBhcHByb2FjaCBpcyB0byBwcm92aWRlIGEgc2luZ2xlIHRocmVhZCBzYWZlIGxpYnJhcnkuICBIb3dldmVyLAorICogaXQgc2hvdWxkIG5vdCBhZGQgc2lnbmlmaWNhbnQgcnVuIHRpbWUgb3IgY29kZSBzaXplIG92ZXJoZWFkIHRvIG5vbi0KKyAqIHRocmVhZGVkIGFwcGxpY2F0aW9ucy4KKyAqIAorICogU2luY2UgdGhlIE5ldEJTRCBDIGxpYnJhcnkgaXMgdXNlZCBpbiBvdGhlciBwcm9qZWN0cywgaXQgc2hvdWxkIGJlCisgKiBlYXN5IHRvIHJlcGxhY2UgdGhlIG11dHVhbCBleGNsdXNpb24gcHJpbWl0aXZlcyB3aXRoIG9uZXMgcHJvdmlkZWQgYnkKKyAqIGFub3RoZXIgc3lzdGVtLiAgU2ltaWxhcmx5LCBpdCBzaG91bGQgYWxzbyBiZSBlYXN5IHRvIHJlbW92ZSBhbGwKKyAqIHN1cHBvcnQgZm9yIHRocmVhZCBzYWZldHkgY29tcGxldGVseSBpZiB0aGUgdGFyZ2V0IGVudmlyb25tZW50IGRvZXMKKyAqIG5vdCBzdXBwb3J0IHRocmVhZHMuCisgKiAKKyAqIAorICogSW1wbGVtZW50YXRpb24gRGV0YWlsczoKKyAqIAorICogVGhlIHRocmVhZCBwcmltaXRpdmVzIHVzZWQgYnkgdGhlIGxpYnJhcnkgKG11dGV4X3QsIG11dGV4X2xvY2ssIGV0Yy4pCisgKiBhcmUgbWFjcm9zIHdoaWNoIGV4cGFuZCB0byB0aGUgY29vcmVzcG9uZGluZyBwcmltaXRpdmVzIHByb3ZpZGVkIGJ5CisgKiB0aGUgdGhyZWFkIGVuZ2luZSBvciB0byBub3RoaW5nLiAgVGhlIGxhdHRlciBpcyB1c2VkIHNvIHRoYXQgY29kZSBpcworICogbm90IHVucmVhc29uYWJseSBjbHV0dGVyZWQgd2l0aCAjaWZkZWZzIHdoZW4gYWxsIHRocmVhZCBzYWZlIHN1cHBvcnQKKyAqIGlzIHJlbW92ZWQuCisgKiAKKyAqIFRoZSB0aHJlYWQgbWFjcm9zIGNhbiBiZSBkaXJlY3RseSBtYXBwZWQgdG8gdGhlIG11dGV4IHByaW1pdGl2ZXMgZnJvbQorICogcHRocmVhZHMsIGhvd2V2ZXIgaXQgc2hvdWxkIGJlIHJlYXNvbmFibHkgZWFzeSB0byB3cmFwIGFub3RoZXIgbXV0ZXgKKyAqIGltcGxlbWVudGF0aW9uIHNvIGl0IHByZXNlbnRzIGEgc2ltaWxhciBpbnRlcmZhY2UuCisgKiAKKyAqIFRoZSB0aHJlYWQgZnVuY3Rpb25zIG9wZXJhdGUgYnkgZGlzcGF0Y2hpbmcgdG8gc3ltYm9scyB3aGljaCBhcmUsIGJ5CisgKiBkZWZhdWx0LCB3ZWFrLWFsaWFzZWQgdG8gbm8tb3AgZnVuY3Rpb25zIGluIHRocmVhZC1zdHViL3RocmVhZC1zdHViLmMKKyAqIChzb21lIHVzZXMgb2YgdGhyZWFkIG9wZXJhdGlvbnMgYXJlIGNvbmRpdGlvbmFsIG9uIF9faXN0aHJlYWRlZCwgYnV0CisgKiBub3QgYWxsIG9mIHRoZW0gYXJlKS4KKyAqCisgKiBXaGVuIHRoZSB0aHJlYWQgbGlicmFyeSBpcyBsaW5rZWQgaW4sIGl0IHByb3ZpZGVzIHN0cm9uZy1hbGlhcyB2ZXJzaW9ucworICogb2YgdGhvc2Ugc3ltYm9scyB3aGljaCBkaXNwYXRjaCB0byBpdHMgb3duIHJlYWwgdGhyZWFkIG9wZXJhdGlvbnMuCisgKgorICovCisKKyNpZmRlZiBfUkVFTlRSQU5UCisKKy8qCisgKiBBYnRyYWN0IHRocmVhZCBpbnRlcmZhY2UgZm9yIHRocmVhZC1zYWZlIGxpYnJhcmllcy4gIFRoZXNlIHJvdXRpbmVzCisgKiB3aWxsIHVzZSBzdHVicyBpbiBsaWJjIGlmIHRoZSBhcHBsaWNhdGlvbiBpcyBub3QgbGlua2VkIGFnYWluc3QgdGhlCisgKiBwdGhyZWFkIGxpYnJhcnksIGFuZCB0aGUgcmVhbCBmdW5jdGlvbiBpbiB0aGUgcHRocmVhZCBsaWJyYXJ5IGlmIGl0CisgKiBpcy4KKyAqLworCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorCisjZGVmaW5lCW11dGV4X3QJCQlwdGhyZWFkX211dGV4X3QKKyNkZWZpbmUJTVVURVhfSU5JVElBTElaRVIJUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUgorCisjZGVmaW5lCW11dGV4YXR0cl90CQlwdGhyZWFkX211dGV4YXR0cl90CisKKyNkZWZpbmUJTVVURVhfVFlQRV9OT1JNQUwJUFRIUkVBRF9NVVRFWF9OT1JNQUwKKyNkZWZpbmUJTVVURVhfVFlQRV9FUlJPUkNIRUNLCVBUSFJFQURfTVVURVhfRVJST1JDSEVDSworI2RlZmluZQlNVVRFWF9UWVBFX1JFQ1VSU0lWRQlQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRQorCisjZGVmaW5lCWNvbmRfdAkJCXB0aHJlYWRfY29uZF90CisjZGVmaW5lCUNPTkRfSU5JVElBTElaRVIJUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSCisKKyNkZWZpbmUJY29uZGF0dHJfdAkJcHRocmVhZF9jb25kYXR0cl90CisKKyNkZWZpbmUJcndsb2NrX3QJCXB0aHJlYWRfcndsb2NrX3QKKyNkZWZpbmUJUldMT0NLX0lOSVRJQUxJWkVSCVBUSFJFQURfUldMT0NLX0lOSVRJQUxJWkVSCisKKyNkZWZpbmUJcndsb2NrYXR0cl90CQlwdGhyZWFkX3J3bG9ja2F0dHJfdAorCisjZGVmaW5lCXRocmVhZF9rZXlfdAkJcHRocmVhZF9rZXlfdAorCisjZGVmaW5lCXRocl90CQkJcHRocmVhZF90CisKKyNkZWZpbmUJdGhyYXR0cl90CQlwdGhyZWFkX2F0dHJfdAorCisjZGVmaW5lCW9uY2VfdAkJCXB0aHJlYWRfb25jZV90CisjZGVmaW5lCU9OQ0VfSU5JVElBTElaRVIJUFRIUkVBRF9PTkNFX0lOSVQKKworI2lmbmRlZiBfX0xJQkNfVEhSRUFEX1NUVUJTCisKK19fQkVHSU5fREVDTFMKK2ludAlfX2xpYmNfbXV0ZXhfaW5pdChtdXRleF90ICosIGNvbnN0IG11dGV4YXR0cl90ICopOworaW50CV9fbGliY19tdXRleF9sb2NrKG11dGV4X3QgKik7CitpbnQJX19saWJjX211dGV4X3RyeWxvY2sobXV0ZXhfdCAqKTsKK2ludAlfX2xpYmNfbXV0ZXhfdW5sb2NrKG11dGV4X3QgKik7CitpbnQJX19saWJjX211dGV4X2Rlc3Ryb3kobXV0ZXhfdCAqKTsKKworaW50CV9fbGliY19tdXRleGF0dHJfaW5pdChtdXRleGF0dHJfdCAqKTsKK2ludAlfX2xpYmNfbXV0ZXhhdHRyX3NldHR5cGUobXV0ZXhhdHRyX3QgKiwgaW50KTsKK2ludAlfX2xpYmNfbXV0ZXhhdHRyX2Rlc3Ryb3kobXV0ZXhhdHRyX3QgKik7CitfX0VORF9ERUNMUworCisjZGVmaW5lCW11dGV4X2luaXQobSwgYSkJX19saWJjX211dGV4X2luaXQoKG0pLCAoYSkpCisjZGVmaW5lCW11dGV4X2xvY2sobSkJCV9fbGliY19tdXRleF9sb2NrKChtKSkKKyNkZWZpbmUJbXV0ZXhfdHJ5bG9jayhtKQlfX2xpYmNfbXV0ZXhfdHJ5bG9jaygobSkpCisjZGVmaW5lCW11dGV4X3VubG9jayhtKQkJX19saWJjX211dGV4X3VubG9jaygobSkpCisjZGVmaW5lCW11dGV4X2Rlc3Ryb3kobSkJX19saWJjX211dGV4X2Rlc3Ryb3koKG0pKQorCisjZGVmaW5lCW11dGV4YXR0cl9pbml0KG1hKQlfX2xpYmNfbXV0ZXhhdHRyX2luaXQoKG1hKSkKKyNkZWZpbmUJbXV0ZXhhdHRyX3NldHR5cGUobWEsIHQpIF9fbGliY19tdXRleGF0dHJfc2V0dHlwZSgobWEpLCAodCkpCisjZGVmaW5lCW11dGV4YXR0cl9kZXN0cm95KG1hKQlfX2xpYmNfbXV0ZXhhdHRyX2Rlc3Ryb3koKG1hKSkKKworX19CRUdJTl9ERUNMUworaW50CV9fbGliY19jb25kX2luaXQoY29uZF90ICosIGNvbnN0IGNvbmRhdHRyX3QgKik7CitpbnQJX19saWJjX2NvbmRfc2lnbmFsKGNvbmRfdCAqKTsKK2ludAlfX2xpYmNfY29uZF9icm9hZGNhc3QoY29uZF90ICopOworaW50CV9fbGliY19jb25kX3dhaXQoY29uZF90ICosIG11dGV4X3QgKik7CitpbnQJX19saWJjX2NvbmRfdGltZWR3YWl0KGNvbmRfdCAqLCBtdXRleF90ICosIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqKTsKK2ludAlfX2xpYmNfY29uZF9kZXN0cm95KGNvbmRfdCAqKTsKK19fRU5EX0RFQ0xTCisKKyNkZWZpbmUJY29uZF9pbml0KGMsIHQsIGEpICAgICAJX19saWJjX2NvbmRfaW5pdCgoYyksIChhKSkKKyNkZWZpbmUJY29uZF9zaWduYWwoYykJCV9fbGliY19jb25kX3NpZ25hbCgoYykpCisjZGVmaW5lCWNvbmRfYnJvYWRjYXN0KGMpCV9fbGliY19jb25kX2Jyb2FkY2FzdCgoYykpCisjZGVmaW5lCWNvbmRfd2FpdChjLCBtKQkJX19saWJjX2NvbmRfd2FpdCgoYyksIChtKSkKKyNkZWZpbmUJY29uZF90aW1lZHdhaXQoYywgbSwgdCkJX19saWJjX2NvbmRfdGltZWR3YWl0KChjKSwgKG0pLCAodCkpCisjZGVmaW5lCWNvbmRfZGVzdHJveShjKQkJX19saWJjX2NvbmRfZGVzdHJveSgoYykpCisKK19fQkVHSU5fREVDTFMKK2ludAlfX2xpYmNfcndsb2NrX2luaXQocndsb2NrX3QgKiwgY29uc3Qgcndsb2NrYXR0cl90ICopOworaW50CV9fbGliY19yd2xvY2tfcmRsb2NrKHJ3bG9ja190ICopOworaW50CV9fbGliY19yd2xvY2tfd3Jsb2NrKHJ3bG9ja190ICopOworaW50CV9fbGliY19yd2xvY2tfdHJ5cmRsb2NrKHJ3bG9ja190ICopOworaW50CV9fbGliY19yd2xvY2tfdHJ5d3Jsb2NrKHJ3bG9ja190ICopOworaW50CV9fbGliY19yd2xvY2tfdW5sb2NrKHJ3bG9ja190ICopOworaW50CV9fbGliY19yd2xvY2tfZGVzdHJveShyd2xvY2tfdCAqKTsKK19fRU5EX0RFQ0xTCisKKyNkZWZpbmUJcndsb2NrX2luaXQobCwgYSkJX19saWJjX3J3bG9ja19pbml0KChsKSwgKGEpKQorI2RlZmluZQlyd2xvY2tfcmRsb2NrKGwpCV9fbGliY19yd2xvY2tfcmRsb2NrKChsKSkKKyNkZWZpbmUJcndsb2NrX3dybG9jayhsKQlfX2xpYmNfcndsb2NrX3dybG9jaygobCkpCisjZGVmaW5lCXJ3bG9ja190cnlyZGxvY2sobCkJX19saWJjX3J3bG9ja190cnlyZGxvY2soKGwpKQorI2RlZmluZQlyd2xvY2tfdHJ5d3Jsb2NrKGwpCV9fbGliY19yd2xvY2tfdHJ5d3Jsb2NrKChsKSkKKyNkZWZpbmUJcndsb2NrX3VubG9jayhsKQlfX2xpYmNfcndsb2NrX3VubG9jaygobCkpCisjZGVmaW5lCXJ3bG9ja19kZXN0cm95KGwpCV9fbGliY19yd2xvY2tfZGVzdHJveSgobCkpCisKK19fQkVHSU5fREVDTFMKK2ludAlfX2xpYmNfdGhyX2tleWNyZWF0ZSh0aHJlYWRfa2V5X3QgKiwgdm9pZCAoKikodm9pZCAqKSk7CitpbnQJX19saWJjX3Rocl9zZXRzcGVjaWZpYyh0aHJlYWRfa2V5X3QsIGNvbnN0IHZvaWQgKik7Cit2b2lkCSpfX2xpYmNfdGhyX2dldHNwZWNpZmljKHRocmVhZF9rZXlfdCk7CitpbnQJX19saWJjX3Rocl9rZXlkZWxldGUodGhyZWFkX2tleV90KTsKK19fRU5EX0RFQ0xTCisKKyNkZWZpbmUJdGhyX2tleWNyZWF0ZShrLCBkKQlfX2xpYmNfdGhyX2tleWNyZWF0ZSgoayksIChkKSkKKyNkZWZpbmUJdGhyX3NldHNwZWNpZmljKGssIHApCV9fbGliY190aHJfc2V0c3BlY2lmaWMoKGspLCAocCkpCisjZGVmaW5lCXRocl9nZXRzcGVjaWZpYyhrKQlfX2xpYmNfdGhyX2dldHNwZWNpZmljKChrKSkKKyNkZWZpbmUJdGhyX2tleWRlbGV0ZShrKQlfX2xpYmNfdGhyX2tleWRlbGV0ZSgoaykpCisKK19fQkVHSU5fREVDTFMKK2ludAlfX2xpYmNfdGhyX29uY2Uob25jZV90ICosIHZvaWQgKCopKHZvaWQpKTsKK2ludAlfX2xpYmNfdGhyX3NpZ3NldG1hc2soaW50LCBjb25zdCBzaWdzZXRfdCAqLCBzaWdzZXRfdCAqKTsKK3Rocl90CV9fbGliY190aHJfc2VsZih2b2lkKTsKK2ludAlfX2xpYmNfdGhyX3lpZWxkKHZvaWQpOwordm9pZAlfX2xpYmNfdGhyX2NyZWF0ZSh0aHJfdCAqLCBjb25zdCB0aHJhdHRyX3QgKiwKKwkgICAgdm9pZCAqKCopKHZvaWQgKiksIHZvaWQgKik7Cit2b2lkCV9fbGliY190aHJfZXhpdCh2b2lkICopIF9fYXR0cmlidXRlX18oKF9fbm9yZXR1cm5fXykpOworaW50CSpfX2xpYmNfdGhyX2Vycm5vKHZvaWQpOworaW50CV9fbGliY190aHJfc2V0Y2FuY2Vsc3RhdGUoaW50LCBpbnQgKik7CisKK2V4dGVybiBpbnQgX19pc3RocmVhZGVkOworX19FTkRfREVDTFMKKworI2RlZmluZQl0aHJfb25jZShvLCBmKQkJX19saWJjX3Rocl9vbmNlKChvKSwgKGYpKQorI2RlZmluZQl0aHJfc2lnc2V0bWFzayhmLCBuLCBvKQlfX2xpYmNfdGhyX3NpZ3NldG1hc2soKGYpLCAobiksIChvKSkKKyNkZWZpbmUJdGhyX3NlbGYoKQkJX19saWJjX3Rocl9zZWxmKCkKKyNkZWZpbmUJdGhyX3lpZWxkKCkJCV9fbGliY190aHJfeWllbGQoKQorI2RlZmluZQl0aHJfY3JlYXRlKHRwLCB0YSwgZiwgYSkgX19saWJjX3Rocl9jcmVhdGUoKHRwKSwgKHRhKSwgKGYpLCAoYSkpCisjZGVmaW5lCXRocl9leGl0KHYpCQlfX2xpYmNfdGhyX2V4aXQoKHYpKQorI2RlZmluZQl0aHJfZXJybm8oKQkJX19saWJjX3Rocl9lcnJubygpCisjZGVmaW5lCXRocl9lbmFibGVkKCkJCShfX2lzdGhyZWFkZWQpCisjZGVmaW5lIHRocl9zZXRjYW5jZWxzdGF0ZShuLCBvKSBfX2xpYmNfdGhyX3NldGNhbmNlbHN0YXRlKChuKSwobykpCisjZW5kaWYgLyogX19MSUJDX1RIUkVBRF9TVFVCUyAqLworCisjZGVmaW5lCUZMT0NLRklMRShmcCkJCV9fZmxvY2tmaWxlX2ludGVybmFsKGZwLCAxKQorI2RlZmluZQlGVU5MT0NLRklMRShmcCkJCV9fZnVubG9ja2ZpbGVfaW50ZXJuYWwoZnAsIDEpCisKKyNlbHNlIC8qIF9SRUVOVFJBTlQgKi8KKworI2RlZmluZQltdXRleF9pbml0KG0sIGEpCisjZGVmaW5lCW11dGV4X2xvY2sobSkKKyNkZWZpbmUJbXV0ZXhfdHJ5bG9jayhtKQorI2RlZmluZQltdXRleF91bmxvY2sobSkKKyNkZWZpbmUJbXV0ZXhfZGVzdHJveShtKQorCisjZGVmaW5lCWNvbmRfaW5pdChjLCB0LCBhKQorI2RlZmluZQljb25kX3NpZ25hbChjKQorI2RlZmluZQljb25kX2Jyb2FkY2FzdChjKQorI2RlZmluZQljb25kX3dhaXQoYywgbSkKKyNkZWZpbmUJY29uZF90aW1lZHdhaXQoYywgbSwgdCkKKyNkZWZpbmUJY29uZF9kZXN0cm95KGMpCisKKyNkZWZpbmUJcndsb2NrX2luaXQobCwgYSkKKyNkZWZpbmUJcndsb2NrX3JkbG9jayhsKQorI2RlZmluZQlyd2xvY2tfd3Jsb2NrKGwpCisjZGVmaW5lCXJ3bG9ja190cnlyZGxvY2sobCkKKyNkZWZpbmUJcndsb2NrX3RyeXdybG9jayhsKQorI2RlZmluZQlyd2xvY2tfdW5sb2NrKGwpCisjZGVmaW5lCXJ3bG9ja19kZXN0cm95KGwpCisKKyNkZWZpbmUJdGhyX2tleWNyZWF0ZShrLCBkKQorI2RlZmluZQl0aHJfc2V0c3BlY2lmaWMoaywgcCkKKyNkZWZpbmUJdGhyX2dldHNwZWNpZmljKGspCisjZGVmaW5lCXRocl9rZXlkZWxldGUoaykKKworI2RlZmluZQl0aHJfb25jZShvLCBmKQorI2RlZmluZQl0aHJfc2lnc2V0bWFzayhmLCBuLCBvKQorI2RlZmluZQl0aHJfc2VsZigpCisjZGVmaW5lCXRocl9lcnJubygpCisKKyNkZWZpbmUJRkxPQ0tGSUxFKGZwKQkJCisjZGVmaW5lCUZVTkxPQ0tGSUxFKGZwKQkJCisKKyNlbmRpZiAvKiBfUkVFTlRSQU5UICovCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9uZXQvc2VydmVudC5oIGIvbGliYy9uZXRic2QvbmV0L3NlcnZlbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjJiMzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvbmV0L3NlcnZlbnQuaApAQCAtMCwwICsxLDQ0IEBACisvKgkkTmV0QlNEOiBzZXJ2ZW50LmgsdiAxLjEgMjAwNS8wNC8xOCAxOTozOTo0NSBrbGVpbmsgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBDaHJpc3RvcyBab3VsYXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAicmVzb2x2X3N0YXRpYy5oIgorCitzdHJ1Y3Qgc2VydmVudCogIGdldHNlcnZlbnRfcihyZXNfc3RhdGljIHJzKTsKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL25ldC9zZXJ2aWNlcy5oIGIvbGliYy9uZXRic2QvbmV0L3NlcnZpY2VzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmExOTlkMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL25ldC9zZXJ2aWNlcy5oCkBAIC0wLDAgKzEsNDgwIEBACisvKiBnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSAtIGRvIG5vdCBlZGl0ICovCitzdGF0aWMgY29uc3QgY2hhciAgX3NlcnZpY2VzW10gPSAiXAorXDZ0Y3BtdXhcMFwxdFwwXAorXDRlY2hvXDBcN3RcMFwKK1w0ZWNob1wwXDd1XDBcCitcN2Rpc2NhcmRcMFwxMXRcMlw0c2lua1w0bnVsbFwKK1w3ZGlzY2FyZFwwXDExdVwyXDRzaW5rXDRudWxsXAorXDZzeXN0YXRcMFwxM3RcMVw1dXNlcnNcCitcN2RheXRpbWVcMFwxNXRcMFwKK1w3ZGF5dGltZVwwXDE1dVwwXAorXDduZXRzdGF0XDBcMTd0XDBcCitcNHFvdGRcMFwyMXRcMVw1cXVvdGVcCitcM21zcFwwXDIydFwwXAorXDNtc3BcMFwyMnVcMFwKK1w3Y2hhcmdlblwwXDIzdFwyXDZ0dHl0c3RcNnNvdXJjZVwKK1w3Y2hhcmdlblwwXDIzdVwyXDZ0dHl0c3RcNnNvdXJjZVwKK1wxMGZ0cC1kYXRhXDBcMjR0XDBcCitcM2Z0cFwwXDI1dFwwXAorXDNmc3BcMFwyNXVcMVw0ZnNwZFwKK1wzc3NoXDBcMjZ0XDBcCitcM3NzaFwwXDI2dVwwXAorXDZ0ZWxuZXRcMFwyN3RcMFwKK1w0c210cFwwXDMxdFwxXDRtYWlsXAorXDR0aW1lXDBcNDV0XDFcMTF0aW1zZXJ2ZXJcCitcNHRpbWVcMFw0NXVcMVwxMXRpbXNlcnZlclwKK1wzcmxwXDBcNDd1XDFcMTByZXNvdXJjZVwKK1wxMm5hbWVzZXJ2ZXJcMFw1MnRcMVw0bmFtZVwKK1w1d2hvaXNcMFw1M3RcMVw3bmljbmFtZVwKK1w2dGFjYWNzXDBcNjF0XDBcCitcNnRhY2Fjc1wwXDYxdVwwXAorXDEycmUtbWFpbC1ja1wwXDYydFwwXAorXDEycmUtbWFpbC1ja1wwXDYydVwwXAorXDZkb21haW5cMFw2NXRcMVwxMm5hbWVzZXJ2ZXJcCitcNmRvbWFpblwwXDY1dVwxXDEybmFtZXNlcnZlclwKK1wzbXRwXDBcNzF0XDBcCitcMTF0YWNhY3MtZHNcMFwxMDF0XDBcCitcMTF0YWNhY3MtZHNcMFwxMDF1XDBcCitcNmJvb3Rwc1wwXDEwM3RcMFwKK1w2Ym9vdHBzXDBcMTAzdVwwXAorXDZib290cGNcMFwxMDR0XDBcCitcNmJvb3RwY1wwXDEwNHVcMFwKK1w0dGZ0cFwwXDEwNXVcMFwKK1w2Z29waGVyXDBcMTA2dFwwXAorXDZnb3BoZXJcMFwxMDZ1XDBcCitcM3JqZVwwXDExNXRcMVw2bmV0cmpzXAorXDZmaW5nZXJcMFwxMTd0XDBcCitcM3d3d1wwXDEyMHRcMVw0aHR0cFwKK1wzd3d3XDBcMTIwdVwwXAorXDRsaW5rXDBcMTI3dFwxXDd0dHlsaW5rXAorXDEwa2VyYmVyb3NcMFwxMzB0XDNcMTFrZXJiZXJvczVcNGtyYjVcMTRrZXJiZXJvcy1zZWNcCitcMTBrZXJiZXJvc1wwXDEzMHVcM1wxMWtlcmJlcm9zNVw0a3JiNVwxNGtlcmJlcm9zLXNlY1wKK1w2c3VwZHVwXDBcMTM3dFwwXAorXDExaG9zdG5hbWVzXDBcMTQ1dFwxXDEwaG9zdG5hbWVcCitcMTBpc28tdHNhcFwwXDE0NnRcMVw0dHNhcFwKK1wxMGFjci1uZW1hXDBcMTUwdFwxXDVkaWNvbVwKK1wxMGFjci1uZW1hXDBcMTUwdVwxXDVkaWNvbVwKK1wxMGNzbmV0LW5zXDBcMTUxdFwxXDZjc28tbnNcCitcMTBjc25ldC1uc1wwXDE1MXVcMVw2Y3NvLW5zXAorXDdydGVsbmV0XDBcMTUzdFwwXAorXDdydGVsbmV0XDBcMTUzdVwwXAorXDRwb3AyXDBcMTU1dFwyXDEycG9zdG9mZmljZVw1cG9wLTJcCitcNHBvcDJcMFwxNTV1XDFcNXBvcC0yXAorXDRwb3AzXDBcMTU2dFwxXDVwb3AtM1wKK1w0cG9wM1wwXDE1NnVcMVw1cG9wLTNcCitcNnN1bnJwY1wwXDE1N3RcMVwxMnBvcnRtYXBwZXJcCitcNnN1bnJwY1wwXDE1N3VcMVwxMnBvcnRtYXBwZXJcCitcNGF1dGhcMFwxNjF0XDNcMTZhdXRoZW50aWNhdGlvblwzdGFwXDVpZGVudFwKK1w0c2Z0cFwwXDE2M3RcMFwKK1wxMXV1Y3AtcGF0aFwwXDE2NXRcMFwKK1w0bm50cFwwXDE2N3RcMlwxMHJlYWRuZXdzXDR1bnRwXAorXDNudHBcMFwxNzN0XDBcCitcM250cFwwXDE3M3VcMFwKK1w2cHdkZ2VuXDBcMjAxdFwwXAorXDZwd2RnZW5cMFwyMDF1XDBcCitcN2xvYy1zcnZcMFwyMDd0XDFcNWVwbWFwXAorXDdsb2Mtc3J2XDBcMjA3dVwxXDVlcG1hcFwKK1wxMm5ldGJpb3MtbnNcMFwyMTF0XDBcCitcMTJuZXRiaW9zLW5zXDBcMjExdVwwXAorXDEzbmV0Ymlvcy1kZ21cMFwyMTJ0XDBcCitcMTNuZXRiaW9zLWRnbVwwXDIxMnVcMFwKK1wxM25ldGJpb3Mtc3NuXDBcMjEzdFwwXAorXDEzbmV0Ymlvcy1zc25cMFwyMTN1XDBcCitcNWltYXAyXDBcMjE3dFwxXDRpbWFwXAorXDVpbWFwMlwwXDIxN3VcMVw0aW1hcFwKK1w0c25tcFwwXDI0MXRcMFwKK1w0c25tcFwwXDI0MXVcMFwKK1wxMXNubXAtdHJhcFwwXDI0MnRcMVwxMHNubXB0cmFwXAorXDExc25tcC10cmFwXDBcMjQydVwxXDEwc25tcHRyYXBcCitcMTBjbWlwLW1hblwwXDI0M3RcMFwKK1wxMGNtaXAtbWFuXDBcMjQzdVwwXAorXDEyY21pcC1hZ2VudFwwXDI0NHRcMFwKK1wxMmNtaXAtYWdlbnRcMFwyNDR1XDBcCitcNW1haWxxXDBcMjU2dFwwXAorXDVtYWlscVwwXDI1NnVcMFwKK1w1eGRtY3BcMFwyNjF0XDBcCitcNXhkbWNwXDBcMjYxdVwwXAorXDEwbmV4dHN0ZXBcMFwyNjJ0XDJcMTBOZVhUU3RlcFwxME5leHRTdGVwXAorXDEwbmV4dHN0ZXBcMFwyNjJ1XDJcMTBOZVhUU3RlcFwxME5leHRTdGVwXAorXDNiZ3BcMFwyNjN0XDBcCitcM2JncFwwXDI2M3VcMFwKK1wxMHByb3NwZXJvXDBcMjc3dFwwXAorXDEwcHJvc3Blcm9cMFwyNzd1XDBcCitcM2lyY1wwXDMwMnRcMFwKK1wzaXJjXDBcMzAydVwwXAorXDRzbXV4XDBcMzA3dFwwXAorXDRzbXV4XDBcMzA3dVwwXAorXDdhdC1ydG1wXDBcMzExdFwwXAorXDdhdC1ydG1wXDBcMzExdVwwXAorXDZhdC1uYnBcMFwzMTJ0XDBcCitcNmF0LW5icFwwXDMxMnVcMFwKK1w3YXQtZWNob1wwXDMxNHRcMFwKK1w3YXQtZWNob1wwXDMxNHVcMFwKK1w2YXQtemlzXDBcMzE2dFwwXAorXDZhdC16aXNcMFwzMTZ1XDBcCitcNHFtdHBcMFwzMjF0XDBcCitcNHFtdHBcMFwzMjF1XDBcCitcNXozOTUwXDBcMzIydFwxXDR3YWlzXAorXDV6Mzk1MFwwXDMyMnVcMVw0d2Fpc1wKK1wzaXB4XDBcMzI1dFwwXAorXDNpcHhcMFwzMjV1XDBcCitcNWltYXAzXDBcMzM0dFwwXAorXDVpbWFwM1wwXDMzNHVcMFwKK1w3cGF3c2VydlwxXDEzMXRcMFwKK1w3cGF3c2VydlwxXDEzMXVcMFwKK1w1enNlcnZcMVwxMzJ0XDBcCitcNXpzZXJ2XDFcMTMydVwwXAorXDdmYXRzZXJ2XDFcMTMzdFwwXAorXDdmYXRzZXJ2XDFcMTMzdVwwXAorXDEzcnBjMnBvcnRtYXBcMVwxNjF0XDBcCitcMTNycGMycG9ydG1hcFwxXDE2MXVcMFwKK1wxMWNvZGFhdXRoMlwxXDE2MnRcMFwKK1wxMWNvZGFhdXRoMlwxXDE2MnVcMFwKK1wxMWNsZWFyY2FzZVwxXDE2M3RcMVwxMUNsZWFyY2FzZVwKK1wxMWNsZWFyY2FzZVwxXDE2M3VcMVwxMUNsZWFyY2FzZVwKK1wxMXVsaXN0c2VydlwxXDE2NHRcMFwKK1wxMXVsaXN0c2VydlwxXDE2NHVcMFwKK1w0bGRhcFwxXDIwNXRcMFwKK1w0bGRhcFwxXDIwNXVcMFwKK1w0aW1zcFwxXDIyNnRcMFwKK1w0aW1zcFwxXDIyNnVcMFwKK1w1aHR0cHNcMVwyNzN0XDBcCitcNWh0dHBzXDFcMjczdVwwXAorXDRzbnBwXDFcMjc0dFwwXAorXDRzbnBwXDFcMjc0dVwwXAorXDE0bWljcm9zb2Z0LWRzXDFcMjc1dFwwXAorXDE0bWljcm9zb2Z0LWRzXDFcMjc1dVwwXAorXDRzYWZ0XDFcMzQ3dFwwXAorXDRzYWZ0XDFcMzQ3dVwwXAorXDZpc2FrbXBcMVwzNjR0XDBcCitcNmlzYWttcFwxXDM2NHVcMFwKK1w0cnRzcFwyXDUydFwwXAorXDRydHNwXDJcNTJ1XDBcCitcM25xc1wyXDEzN3RcMFwKK1wzbnFzXDJcMTM3dVwwXAorXDEybnBtcC1sb2NhbFwyXDE0MnRcMVwxNmRxczMxM19xbWFzdGVyXAorXDEybnBtcC1sb2NhbFwyXDE0MnVcMVwxNmRxczMxM19xbWFzdGVyXAorXDEwbnBtcC1ndWlcMlwxNDN0XDFcMTRkcXMzMTNfZXhlY2RcCitcMTBucG1wLWd1aVwyXDE0M3VcMVwxNGRxczMxM19leGVjZFwKK1wxMGhtbXAtaW5kXDJcMTQ0dFwxXDIwZHFzMzEzX2ludGVyY2VsbFwKK1wxMGhtbXAtaW5kXDJcMTQ0dVwxXDIwZHFzMzEzX2ludGVyY2VsbFwKK1wzaXBwXDJcMTY3dFwwXAorXDNpcHBcMlwxNjd1XDBcCitcNGV4ZWNcMlwwdFwwXAorXDRiaWZmXDJcMHVcMVw2Y29tc2F0XAorXDVsb2dpblwyXDF0XDBcCitcM3dob1wyXDF1XDFcNHdob2RcCitcNXNoZWxsXDJcMnRcMVwzY21kXAorXDZzeXNsb2dcMlwydVwwXAorXDdwcmludGVyXDJcM3RcMVw3c3Bvb2xlclwKK1w0dGFsa1wyXDV1XDBcCitcNW50YWxrXDJcNnVcMFwKK1w1cm91dGVcMlwxMHVcMlw2cm91dGVyXDZyb3V0ZWRcCitcNXRpbWVkXDJcMTV1XDFcMTJ0aW1lc2VydmVyXAorXDV0ZW1wb1wyXDE2dFwxXDduZXdkYXRlXAorXDdjb3VyaWVyXDJcMjJ0XDFcM3JwY1wKK1wxMmNvbmZlcmVuY2VcMlwyM3RcMVw0Y2hhdFwKK1w3bmV0bmV3c1wyXDI0dFwxXDEwcmVhZG5ld3NcCitcN25ldHdhbGxcMlwyNXVcMFwKK1w2Z2RvbWFwXDJcMzJ0XDBcCitcNmdkb21hcFwyXDMydVwwXAorXDR1dWNwXDJcMzR0XDFcNXV1Y3BkXAorXDZrbG9naW5cMlwzN3RcMFwKK1w2a3NoZWxsXDJcNDB0XDFcNWtyY21kXAorXDEyYWZwb3ZlcnRjcFwyXDQ0dFwwXAorXDEyYWZwb3ZlcnRjcFwyXDQ0dVwwXAorXDEwcmVtb3RlZnNcMlw1NHRcMlwxMnJmc19zZXJ2ZXJcM3Jmc1wKK1w1bm50cHNcMlw2M3RcMVw1c25udHBcCitcNW5udHBzXDJcNjN1XDFcNXNubnRwXAorXDEyc3VibWlzc2lvblwyXDExM3RcMFwKK1wxMnN1Ym1pc3Npb25cMlwxMTN1XDBcCitcNWxkYXBzXDJcMTc0dFwwXAorXDVsZGFwc1wyXDE3NHVcMFwKK1w0dGluY1wyXDIxN3RcMFwKK1w0dGluY1wyXDIxN3VcMFwKK1w0c2lsY1wyXDMwMnRcMFwKK1w0c2lsY1wyXDMwMnVcMFwKK1wxNGtlcmJlcm9zLWFkbVwyXDM1NXRcMFwKK1w3d2Vic3RlclwyXDM3NXRcMFwKK1w3d2Vic3RlclwyXDM3NXVcMFwKK1w1cnN5bmNcM1wxNTF0XDBcCitcNXJzeW5jXDNcMTUxdVwwXAorXDExZnRwcy1kYXRhXDNcMzM1dFwwXAorXDRmdHBzXDNcMzM2dFwwXAorXDd0ZWxuZXRzXDNcMzQwdFwwXAorXDd0ZWxuZXRzXDNcMzQwdVwwXAorXDVpbWFwc1wzXDM0MXRcMFwKK1w1aW1hcHNcM1wzNDF1XDBcCitcNGlyY3NcM1wzNDJ0XDBcCitcNGlyY3NcM1wzNDJ1XDBcCitcNXBvcDNzXDNcMzQzdFwwXAorXDVwb3Azc1wzXDM0M3VcMFwKK1w1c29ja3NcNFw3MHRcMFwKK1w1c29ja3NcNFw3MHVcMFwKK1w2cHJvb2ZkXDRcMTA1dFwwXAorXDZwcm9vZmRcNFwxMDV1XDBcCitcNXJvb3RkXDRcMTA2dFwwXAorXDVyb290ZFw0XDEwNnVcMFwKK1w3b3BlbnZwblw0XDI1MnRcMFwKK1w3b3BlbnZwblw0XDI1MnVcMFwKK1wxM3JtaXJlZ2lzdHJ5XDRcMTEzdFwwXAorXDEzcm1pcmVnaXN0cnlcNFwxMTN1XDBcCitcNWthemFhXDRcMjc2dFwwXAorXDVrYXphYVw0XDI3NnVcMFwKK1w2bmVzc3VzXDRcMzMxdFwwXAorXDZuZXNzdXNcNFwzMzF1XDBcCitcMTFsb3R1c25vdGVcNVwxMTB0XDFcMTJsb3R1c25vdGVzXAorXDExbG90dXNub3RlXDVcMTEwdVwxXDEybG90dXNub3Rlc1wKK1wxMG1zLXNxbC1zXDVcMjMxdFwwXAorXDEwbXMtc3FsLXNcNVwyMzF1XDBcCitcMTBtcy1zcWwtbVw1XDIzMnRcMFwKK1wxMG1zLXNxbC1tXDVcMjMydVwwXAorXDEyaW5ncmVzbG9ja1w1XDM2NHRcMFwKK1wxMmluZ3Jlc2xvY2tcNVwzNjR1XDBcCitcMTNwcm9zcGVyby1ucFw1XDM2NXRcMFwKK1wxM3Byb3NwZXJvLW5wXDVcMzY1dVwwXAorXDEzZGF0YW1ldHJpY3NcNlwxNTV0XDFcMTJvbGQtcmFkaXVzXAorXDEzZGF0YW1ldHJpY3NcNlwxNTV1XDFcMTJvbGQtcmFkaXVzXAorXDEzc2EtbXNnLXBvcnRcNlwxNTZ0XDFcMTNvbGQtcmFkYWNjdFwKK1wxM3NhLW1zZy1wb3J0XDZcMTU2dVwxXDEzb2xkLXJhZGFjY3RcCitcNmtlcm1pdFw2XDE2MXRcMFwKK1w2a2VybWl0XDZcMTYxdVwwXAorXDNsMmZcNlwyNDV0XDFcNGwydHBcCitcM2wyZlw2XDI0NXVcMVw0bDJ0cFwKK1w2cmFkaXVzXDdcMjR0XDBcCitcNnJhZGl1c1w3XDI0dVwwXAorXDEzcmFkaXVzLWFjY3RcN1wyNXRcMVw3cmFkYWNjdFwKK1wxM3JhZGl1cy1hY2N0XDdcMjV1XDFcN3JhZGFjY3RcCitcMTN1bml4LXN0YXR1c1w3XDI0NXRcMFwKK1wxMmxvZy1zZXJ2ZXJcN1wyNDZ0XDBcCitcMTJyZW1vdGVwaW5nXDdcMjQ3dFwwXAorXDNuZnNcMTBcMXRcMFwKK1wzbmZzXDEwXDF1XDBcCitcMTJydGNtLXNjMTA0XDEwXDY1dFwwXAorXDEycnRjbS1zYzEwNFwxMFw2NXVcMFwKK1wxMmN2c3BzZXJ2ZXJcMTFcMTQxdFwwXAorXDEyY3ZzcHNlcnZlclwxMVwxNDF1XDBcCitcNXZlbnVzXDExXDE3NnRcMFwKK1w1dmVudXNcMTFcMTc2dVwwXAorXDEwdmVudXMtc2VcMTFcMTc3dFwwXAorXDEwdmVudXMtc2VcMTFcMTc3dVwwXAorXDdjb2Rhc3J2XDExXDIwMHRcMFwKK1w3Y29kYXNydlwxMVwyMDB1XDBcCitcMTJjb2Rhc3J2LXNlXDExXDIwMXRcMFwKK1wxMmNvZGFzcnYtc2VcMTFcMjAxdVwwXAorXDNtb25cMTJcMjd0XDBcCitcM21vblwxMlwyN3VcMFwKK1w0ZGljdFwxMlwxMDR0XDBcCitcNGRpY3RcMTJcMTA0dVwwXAorXDRncHNkXDEzXDIwM3RcMFwKK1w0Z3BzZFwxM1wyMDN1XDBcCitcNmdkc19kYlwxM1wzNTJ0XDBcCitcNmdkc19kYlwxM1wzNTJ1XDBcCitcNWljcHYyXDE0XDcydFwxXDNpY3BcCitcNWljcHYyXDE0XDcydVwxXDNpY3BcCitcNW15c3FsXDE0XDM1MnRcMFwKK1w1bXlzcWxcMTRcMzUydVwwXAorXDNudXRcMTVcMjQ1dFwwXAorXDNudXRcMTVcMjQ1dVwwXAorXDZkaXN0Y2NcMTZcNjB0XDBcCitcNmRpc3RjY1wxNlw2MHVcMFwKK1w0ZGFhcFwxNlwxNTF0XDBcCitcNGRhYXBcMTZcMTUxdVwwXAorXDNzdm5cMTZcMTUydFwxXDEyc3VidmVyc2lvblwKK1wzc3ZuXDE2XDE1MnVcMVwxMnN1YnZlcnNpb25cCitcM2lheFwyMVwzMzF0XDBcCitcM2lheFwyMVwzMzF1XDBcCitcMTNyYWRtaW4tcG9ydFwyM1w0M3RcMFwKK1wxM3JhZG1pbi1wb3J0XDIzXDQzdVwwXAorXDNyZmVcMjNcMjEydVwwXAorXDNyZmVcMjNcMjEydFwwXAorXDNzaXBcMjNcMzA0dFwwXAorXDNzaXBcMjNcMzA0dVwwXAorXDdzaXAtdGxzXDIzXDMwNXRcMFwKK1w3c2lwLXRsc1wyM1wzMDV1XDBcCitcMTN4bXBwLWNsaWVudFwyNFwxNDZ0XDFcMTVqYWJiZXItY2xpZW50XAorXDEzeG1wcC1jbGllbnRcMjRcMTQ2dVwxXDE1amFiYmVyLWNsaWVudFwKK1wxM3htcHAtc2VydmVyXDI0XDIyNXRcMVwxNWphYmJlci1zZXJ2ZXJcCitcMTN4bXBwLXNlcnZlclwyNFwyMjV1XDFcMTVqYWJiZXItc2VydmVyXAorXDEwY2ZlbmdpbmVcMjRcMjc0dFwwXAorXDEwY2ZlbmdpbmVcMjRcMjc0dVwwXAorXDEycG9zdGdyZXNxbFwyNVw3MHRcMVwxMHBvc3RncmVzXAorXDEycG9zdGdyZXNxbFwyNVw3MHVcMVwxMHBvc3RncmVzXAorXDN4MTFcMjdcMTYwdFwxXDV4MTEtMFwKK1wzeDExXDI3XDE2MHVcMVw1eDExLTBcCitcNXgxMS0xXDI3XDE2MXRcMFwKK1w1eDExLTFcMjdcMTYxdVwwXAorXDV4MTEtMlwyN1wxNjJ0XDBcCitcNXgxMS0yXDI3XDE2MnVcMFwKK1w1eDExLTNcMjdcMTYzdFwwXAorXDV4MTEtM1wyN1wxNjN1XDBcCitcNXgxMS00XDI3XDE2NHRcMFwKK1w1eDExLTRcMjdcMTY0dVwwXAorXDV4MTEtNVwyN1wxNjV0XDBcCitcNXgxMS01XDI3XDE2NXVcMFwKK1w1eDExLTZcMjdcMTY2dFwwXAorXDV4MTEtNlwyN1wxNjZ1XDBcCitcNXgxMS03XDI3XDE2N3RcMFwKK1w1eDExLTdcMjdcMTY3dVwwXAorXDE0Z251dGVsbGEtc3ZjXDMwXDMxMnRcMFwKK1wxNGdudXRlbGxhLXN2Y1wzMFwzMTJ1XDBcCitcMTRnbnV0ZWxsYS1ydHJcMzBcMzEzdFwwXAorXDE0Z251dGVsbGEtcnRyXDMwXDMxM3VcMFwKK1wxN2FmczMtZmlsZXNlcnZlclwzM1wxMzB0XDFcM2Jic1wKK1wxN2FmczMtZmlsZXNlcnZlclwzM1wxMzB1XDFcM2Jic1wKK1wxNWFmczMtY2FsbGJhY2tcMzNcMTMxdFwwXAorXDE1YWZzMy1jYWxsYmFja1wzM1wxMzF1XDBcCitcMTVhZnMzLXByc2VydmVyXDMzXDEzMnRcMFwKK1wxNWFmczMtcHJzZXJ2ZXJcMzNcMTMydVwwXAorXDE1YWZzMy12bHNlcnZlclwzM1wxMzN0XDBcCitcMTVhZnMzLXZsc2VydmVyXDMzXDEzM3VcMFwKK1wxNWFmczMta2FzZXJ2ZXJcMzNcMTM0dFwwXAorXDE1YWZzMy1rYXNlcnZlclwzM1wxMzR1XDBcCitcMTNhZnMzLXZvbHNlclwzM1wxMzV0XDBcCitcMTNhZnMzLXZvbHNlclwzM1wxMzV1XDBcCitcMTNhZnMzLWVycm9yc1wzM1wxMzZ0XDBcCitcMTNhZnMzLWVycm9yc1wzM1wxMzZ1XDBcCitcMTBhZnMzLWJvc1wzM1wxMzd0XDBcCitcMTBhZnMzLWJvc1wzM1wxMzd1XDBcCitcMTNhZnMzLXVwZGF0ZVwzM1wxNDB0XDBcCitcMTNhZnMzLXVwZGF0ZVwzM1wxNDB1XDBcCitcMTNhZnMzLXJtdHN5c1wzM1wxNDF0XDBcCitcMTNhZnMzLXJtdHN5c1wzM1wxNDF1XDBcCitcMTRmb250LXNlcnZpY2VcMzNcMjc0dFwxXDN4ZnNcCitcMTRmb250LXNlcnZpY2VcMzNcMjc0dVwxXDN4ZnNcCitcMTJiYWN1bGEtZGlyXDQzXDIxNXRcMFwKK1wxMmJhY3VsYS1kaXJcNDNcMjE1dVwwXAorXDExYmFjdWxhLWZkXDQzXDIxNnRcMFwKK1wxMWJhY3VsYS1mZFw0M1wyMTZ1XDBcCitcMTFiYWN1bGEtc2RcNDNcMjE3dFwwXAorXDExYmFjdWxhLXNkXDQzXDIxN3VcMFwKK1w2YW1hbmRhXDQ3XDE0MHRcMFwKK1w2YW1hbmRhXDQ3XDE0MHVcMFwKK1wzaGtwXDU0XDE1M3RcMFwKK1wzaGtwXDU0XDE1M3VcMFwKK1w0YnByZFw2NVwyMzB0XDBcCitcNGJwcmRcNjVcMjMwdVwwXAorXDVicGRibVw2NVwyMzF0XDBcCitcNWJwZGJtXDY1XDIzMXVcMFwKK1wxM2JwamF2YS1tc3ZjXDY1XDIzMnRcMFwKK1wxM2JwamF2YS1tc3ZjXDY1XDIzMnVcMFwKK1w1dm5ldGRcNjVcMjM0dFwwXAorXDV2bmV0ZFw2NVwyMzR1XDBcCitcNGJwY2RcNjVcMzI2dFwwXAorXDRicGNkXDY1XDMyNnVcMFwKK1w2dm9waWVkXDY1XDMyN3RcMFwKK1w2dm9waWVkXDY1XDMyN3VcMFwKK1w0d25uNlwxMjdcMXRcMFwKK1w0d25uNlwxMjdcMXVcMFwKK1wxMWtlcmJlcm9zNFwyXDM1NnVcMlwxM2tlcmJlcm9zLWl2XDNrZGNcCitcMTFrZXJiZXJvczRcMlwzNTZ0XDJcMTNrZXJiZXJvcy1pdlwza2RjXAorXDE3a2VyYmVyb3NfbWFzdGVyXDJcMzU3dVwwXAorXDE3a2VyYmVyb3NfbWFzdGVyXDJcMzU3dFwwXAorXDE1cGFzc3dkX3NlcnZlclwyXDM2MHVcMFwKK1wxMGtyYl9wcm9wXDJcMzYydFwyXDExa3JiNV9wcm9wXDVocHJvcFwKK1wxMWtyYnVwZGF0ZVwyXDM3MHRcMVw0a3JlZ1wKK1w3a3Bhc3N3ZFwyXDM3MXRcMVw0a3B3ZFwKK1w0c3dhdFwzXDIwNXRcMFwKK1w0a3BvcFw0XDEyNXRcMFwKK1w1a25ldGRcMTBcNXRcMFwKK1wxMnplcGh5ci1zcnZcMTBcNjZ1XDBcCitcMTJ6ZXBoeXItY2x0XDEwXDY3dVwwXAorXDExemVwaHlyLWhtXDEwXDcwdVwwXAorXDdla2xvZ2luXDEwXDcxdFwwXAorXDJreFwxMFw3N3RcMFwKK1w1aXByb3BcMTBcMTExdFwwXAorXDEyc3VwZmlsZXNydlwzXDE0N3RcMFwKK1wxMnN1cGZpbGVkYmdcNFwxNDd0XDBcCitcMTFsaW51eGNvbmZcMFwxNDJ0XDBcCitcMTBwb3BwYXNzZFwwXDE1MnRcMFwKK1wxMHBvcHBhc3NkXDBcMTUydVwwXAorXDVzc210cFwxXDMyMXRcMVw1c210cHNcCitcMTBtb2lyYV9kYlwzXDd0XDBcCitcMTRtb2lyYV91cGRhdGVcM1wxMXRcMFwKK1wxMm1vaXJhX3VyZWdcM1wxM3VcMFwKK1w1c3BhbWRcM1wxN3RcMFwKK1w1b21pcnJcM1w1MHRcMVw2b21pcnJkXAorXDVvbWlyclwzXDUwdVwxXDZvbWlycmRcCitcN2N1c3RvbXNcM1wzNTF0XDBcCitcN2N1c3RvbXNcM1wzNTF1XDBcCitcN3Nra3NlcnZcNFwyMzJ0XDBcCitcN3ByZWRpY3RcNFwyNzJ1XDBcCitcNnJtdGNmZ1w0XDMyNHRcMFwKK1w1d2lwbGRcNVwyNHRcMFwKK1w0eHRlbFw1XDQxdFwwXAorXDV4dGVsd1w1XDQydFwwXAorXDdzdXBwb3J0XDVcMzcxdFwwXAorXDVzaWV2ZVw3XDMyMHRcMFwKK1w3Y2Zpbmdlclw3XDMyM3RcMFwKK1w0bmR0cFw3XDMzMnRcMFwKK1w0ZnJveFwxMFwxMTF0XDBcCitcMTBuaW5zdGFsbFwxMFwxNDZ0XDBcCitcMTBuaW5zdGFsbFwxMFwxNDZ1XDBcCitcMTB6ZWJyYXNydlwxMlw1MHRcMFwKK1w1emVicmFcMTJcNTF0XDBcCitcNHJpcGRcMTJcNTJ0XDBcCitcNnJpcG5nZFwxMlw1M3RcMFwKK1w1b3NwZmRcMTJcNTR0XDBcCitcNGJncGRcMTJcNTV0XDBcCitcNm9zcGY2ZFwxMlw1NnRcMFwKK1w3b3NwZmFwaVwxMlw1N3RcMFwKK1w1aXNpc2RcMTJcNjB0XDBcCitcMTBhZmJhY2t1cFwxM1wyNTR0XDBcCitcMTBhZmJhY2t1cFwxM1wyNTR1XDBcCitcMTFhZm1iYWNrdXBcMTNcMjU1dFwwXAorXDExYWZtYmFja3VwXDEzXDI1NXVcMFwKK1w1eHRlbGxcMjBcMjAwdFwwXAorXDNmYXhcMjFcMzE1dFwwXAorXDdoeWxhZmF4XDIxXDMxN3RcMFwKK1w3ZGlzdG1wM1wyMVwzNzB0XDBcCitcNW11bmluXDIzXDEyNXRcMVw0bHJyZFwKK1wxM2VuYmQtY3N0YXRkXDIzXDI3M3RcMFwKK1wxM2VuYmQtc3N0YXRkXDIzXDI3NHRcMFwKK1w0cGNyZFwyNFwzN3RcMFwKK1w2bm9jbG9nXDI0XDM1MnRcMFwKK1w2bm9jbG9nXDI0XDM1MnVcMFwKK1w3aG9zdG1vblwyNFwzNTN0XDBcCitcN2hvc3Rtb25cMjRcMzUzdVwwXAorXDVycGxheVwyNVwyNjN1XDBcCitcNXJwbGF5XDI1XDI2M3RcMFwKK1w0cnB0cFwyNVwyNjR1XDBcCitcNHJwdHBcMjVcMjY0dFwwXAorXDRuc2NhXDI2XDQzdFwwXAorXDRtcnRkXDI2XDUydFwwXAorXDZiZ3BzaW1cMjZcNTN0XDBcCitcNWNhbm5hXDI2XDYwdFwwXAorXDExc2FuZS1wb3J0XDMxXDI0NnRcMlw0c2FuZVw1c2FuZWRcCitcNGlyY2RcMzJcMTN0XDBcCitcMTB6b3BlLWZ0cFwzN1wxMjV0XDBcCitcMTB3ZWJjYWNoZVwzN1wyMjB0XDBcCitcNnRwcm94eVwzN1wyMjF0XDBcCitcN29tbmlvcmJcMzdcMjMwdFwwXAorXDdvbW5pb3JiXDM3XDIzMHVcMFwKK1wyMGNsYy1idWlsZC1kYWVtb25cNDNcMzZ0XDBcCitcNnhpbmV0ZFw0M1wyMTJ0XDBcCitcMTNtYW5kZWxzcGF3blw0NFwyMTd1XDFcMTJtYW5kZWxicm90XAorXDR6b3BlXDQ1XDMxMXRcMFwKK1w3a2FtYW5kYVw0N1wxNDF0XDBcCitcN2thbWFuZGFcNDdcMTQxdVwwXAorXDExYW1hbmRhaWR4XDQ3XDE0MnRcMFwKK1wxMWFtaWR4dGFwZVw0N1wxNDN0XDBcCitcNXNtc3FwXDUzXDMwMXRcMFwKK1w1c21zcXBcNTNcMzAxdVwwXAorXDZ4cGlsb3RcNzNcMzYxdFwwXAorXDZ4cGlsb3RcNzNcMzYxdVwwXAorXDEwc2dpLWNtc2RcMTAyXDE1MXVcMFwKK1wxMHNnaS1jcnNkXDEwMlwxNTJ1XDBcCitcN3NnaS1nY2RcMTAyXDE1M3VcMFwKK1w3c2dpLWNhZFwxMDJcMTU0dFwwXAorXDdpc2RubG9nXDExNlw1M3RcMFwKK1w3aXNkbmxvZ1wxMTZcNTN1XDBcCitcNXZib3hkXDExNlw1NHRcMFwKK1w1dmJveGRcMTE2XDU0dVwwXAorXDViaW5rcFwxMzdcMzUydFwwXAorXDNhc3BcMTUyXDM1NnRcMFwKK1wzYXNwXDE1MlwzNTZ1XDBcCitcMTFkaXJjcHJveHlcMzM2XDI1MHRcMFwKK1w1dGZpZG9cMzUzXDIxdFwwXAorXDRmaWRvXDM1M1wyM3RcMFwKK1wwIjsKKwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L19fZG5fY29tcC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L19fZG5fY29tcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzZDNmMTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvX19kbl9jb21wLmMKQEAgLTAsMCArMSwzOCBAQAorLyoJJE5ldEJTRDogX19kbl9jb21wLmMsdiAxLjQgMjAwNS8wOS8xMyAwMTo0NDoxMCBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogd3JpdHRlbiBieSBtYXR0aGV3IGdyZWVuLCAyMi8wNC85Ny4KKyAqIHB1YmxpYyBkb21haW4uCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorX19SQ1NJRCgiJE5ldEJTRDogX19kbl9jb21wLmMsdiAxLjQgMjAwNS8wOS8xMyAwMTo0NDoxMCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2lmIGRlZmluZWQoX19pbmRyX3JlZmVyZW5jZSkKK19faW5kcl9yZWZlcmVuY2UoX19kbl9jb21wLGRuX2NvbXApCisjZWxzZQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisKKy8qIFhYWCBUSElTIElTIEEgTUVTUyEgIFNFRSA8cmVzb2x2Lmg+IFhYWCAqLworCisjdW5kZWYgZG5fY29tcAoraW50CWRuX2NvbXAoY29uc3QgY2hhciAqLCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiosIHVfY2hhciAqKik7CisKK2ludAorZG5fY29tcChjb25zdCBjaGFyICpleHBfZG4sIHVfY2hhciAqY29tcF9kbiwgdV9jaGFyICoqZG5wdHJzLAorICAgIHVfY2hhciAqKmxhc3RkbnB0ciwgaW50IGxlbmd0aCkKK3sKKworCXJldHVybiBfX2RuX2NvbXAoZXhwX2RuLCBjb21wX2RuLCBsZW5ndGgsIGRucHRycywgbGFzdGRucHRyKTsKK30KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19jbG9zZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNhZjUwYjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvX19yZXNfY2xvc2UuYwpAQCAtMCwwICsxLDMzIEBACisvKgkkTmV0QlNEOiBfX3Jlc19jbG9zZS5jLHYgMS40IDIwMDUvMDkvMTMgMDE6NDQ6MTAgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIHdyaXR0ZW4gYnkgbWF0dGhldyBncmVlbiwgMjIvMDQvOTcuCisgKiBwdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IF9fcmVzX2Nsb3NlLmMsdiAxLjQgMjAwNS8wOS8xMyAwMTo0NDoxMCBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2lmIGRlZmluZWQoX19pbmRyX3JlZmVyZW5jZSkKK19faW5kcl9yZWZlcmVuY2UoX19yZXNfY2xvc2UsIHJlc19jbG9zZSkKKyNlbHNlCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKworLyogWFhYIFRISVMgSVMgQSBNRVNTISAgU0VFIDxyZXNvbHYuaD4gWFhYICovCisKKyN1bmRlZiByZXNfY2xvc2UKK3ZvaWQJcmVzX2Nsb3NlKHZvaWQpOworCit2b2lkCityZXNfY2xvc2Uodm9pZCkKK3sKKworCV9fcmVzX2Nsb3NlKCk7Cit9CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L19fcmVzX3NlbmQuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTk4YjA1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9fX3Jlc19zZW5kLmMKQEAgLTAsMCArMSwzNyBAQAorLyoJJE5ldEJTRDogX19yZXNfc2VuZC5jLHYgMS40IDIwMDUvMDkvMTMgMDE6NDQ6MTAgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIHdyaXR0ZW4gYnkgbWF0dGhldyBncmVlbiwgMjIvMDQvOTcuCisgKiBwdWJsaWMgZG9tYWluLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IF9fcmVzX3NlbmQuYyx2IDEuNCAyMDA1LzA5LzEzIDAxOjQ0OjEwIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKworI2lmIGRlZmluZWQoX19pbmRyX3JlZmVyZW5jZSkKK19faW5kcl9yZWZlcmVuY2UoX19yZXNfc2VuZCwgcmVzX3NlbmQpCisjZWxzZQorCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisKKy8qIFhYWCBUSElTIElTIEEgTUVTUyEgIFNFRSA8cmVzb2x2Lmg+IFhYWCAqLworCisjdW5kZWYgcmVzX3NlbmQKK2ludAlyZXNfc2VuZChjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50KTsKKworaW50CityZXNfc2VuZChjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisKKwlyZXR1cm4gX19yZXNfc2VuZChidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXopOworfQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9oZXJyb3IuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9oZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOTBlNjQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L2hlcnJvci5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgkkTmV0QlNEOiBoZXJyb3IuYyx2IDEuNCAyMDA0LzA1LzIzIDA1OjA5OjUyIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKWhlcnJvci5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiBoZXJyb3IuYyx2IDEuMi4yMDYuMSAyMDA0LzAzLzA5IDA4OjMzOjU0IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogaGVycm9yLmMsdiAxLjQgMjAwNC8wNS8yMyAwNTowOTo1MiBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaWZuZGVmIERFX0NPTlNUCisjZGVmaW5lIERFX0NPTlNUKGMsdikgICB2ID0gKChjKSA/IFwKKyAgICBzdHJjaHIoKGNvbnN0IHZvaWQgKikoYyksICooY29uc3QgY2hhciAqKShjb25zdCB2b2lkICopKGMpKSA6IE5VTEwpCisjZW5kaWYKKworY29uc3QgY2hhciAqIGNvbnN0IGhfZXJybGlzdFtdID0geworCSJSZXNvbHZlciBFcnJvciAwIChubyBlcnJvcikiLAorCSJVbmtub3duIGhvc3QiLAkJCQkvKiAxIEhPU1RfTk9UX0ZPVU5EICovCisJIkhvc3QgbmFtZSBsb29rdXAgZmFpbHVyZSIsCQkvKiAyIFRSWV9BR0FJTiAqLworCSJVbmtub3duIHNlcnZlciBlcnJvciIsCQkJLyogMyBOT19SRUNPVkVSWSAqLworCSJObyBhZGRyZXNzIGFzc29jaWF0ZWQgd2l0aCBuYW1lIiwJLyogNCBOT19BRERSRVNTICovCit9OworY29uc3QgaW50CWhfbmVyciA9IHsgc2l6ZW9mIGhfZXJybGlzdCAvIHNpemVvZiBoX2Vycmxpc3RbMF0gfTsKKworLyoKKyAqIGhlcnJvciAtLQorICoJcHJpbnQgdGhlIGVycm9yIGluZGljYXRlZCBieSB0aGUgaF9lcnJubyB2YWx1ZS4KKyAqLwordm9pZAoraGVycm9yKGNvbnN0IGNoYXIgKnMpIHsKKwlzdHJ1Y3QgaW92ZWMgaW92WzRdLCAqdiA9IGlvdjsKKwljaGFyICp0OworCisJaWYgKHMgIT0gTlVMTCAmJiAqcyAhPSAnXDAnKSB7CisJCURFX0NPTlNUKHMsIHQpOworCQl2LT5pb3ZfYmFzZSA9IHQ7CisJCXYtPmlvdl9sZW4gPSBzdHJsZW4odCk7CisJCXYrKzsKKwkJREVfQ09OU1QoIjogIiwgdCk7CisJCXYtPmlvdl9iYXNlID0gdDsKKwkJdi0+aW92X2xlbiA9IDI7CisJCXYrKzsKKwl9CisJREVfQ09OU1QoaHN0cmVycm9yKGhfZXJybm8pLCB0KTsKKwl2LT5pb3ZfYmFzZSA9IHQ7CisJdi0+aW92X2xlbiA9IHN0cmxlbih2LT5pb3ZfYmFzZSk7CisJdisrOworCURFX0NPTlNUKCJcbiIsIHQpOworCXYtPmlvdl9iYXNlID0gdDsKKwl2LT5pb3ZfbGVuID0gMTsKKwl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAodiAtIGlvdikgKyAxKTsKK30KKworLyoKKyAqIGhzdHJlcnJvciAtLQorICoJcmV0dXJuIHRoZSBzdHJpbmcgYXNzb2NpYXRlZCB3aXRoIGEgZ2l2ZW4gImhvc3QiIGVycm5vIHZhbHVlLgorICovCitjb25zdCBjaGFyICoKK2hzdHJlcnJvcihpbnQgZXJyKSB7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAoIlJlc29sdmVyIGludGVybmFsIGVycm9yIik7CisJZWxzZSBpZiAoZXJyIDwgaF9uZXJyKQorCQlyZXR1cm4gKGhfZXJybGlzdFtlcnJdKTsKKwlyZXR1cm4gKCJVbmtub3duIHJlc29sdmVyIGVycm9yIik7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2NhY2hlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjEwZGZkZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY2FjaGUuYwpAQCAtMCwwICsxLDUzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAicmVzb2x2X2NhY2hlLmgiCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgInB0aHJlYWQuaCIKKworLyogdGhpcyBjb2RlIGltcGxlbWVudHMgYSBzbWFsbCBETlMgcmVzb2x2ZXIgY2FjaGUgZm9yIGFsbCBnZXRob3N0YnluYW1lKiBmdW5jdGlvbnMKKyAqCisgKiB0aGUgY2FjaGUgaXMgc2hhcmVkIGJldHdlZW4gYWxsIHRocmVhZHMgb2YgdGhlIGN1cnJlbnQgcHJvY2VzcywgYnV0IHRoZSByZXN1bHQgb2YKKyAqIGEgc3VjY2VzZnVsIGxvb2t1cCBpcyBhbHdheXMgY29waWVkIHRvIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlIHRvIGhvbm9yIHRoZSBwZXJzaXN0ZW5jZQorICogcnVsZXMgb2YgdGhlIGdldGhvc3RieW5hbWUqKCkgQVBJcy4KKyAqLworCisvKiB0aGUgbmFtZSBvZiBhbiBlbnZpcm9ubWVudCB2YXJpYWJsZSB0aGF0IHdpbGwgYmUgY2hlY2tlZCB0aGUgZmlyc3QgdGltZSB0aGlzIGNvZGUgaXMgY2FsbGVkCisgKiBpZiBpdHMgdmFsdWUgaXMgIjAiLCB0aGVuIHRoZSByZXNvbHZlciBjYWNoZSBpcyBkaXNhYmxlZC4KKyAqLworI2RlZmluZSAgQ09ORklHX0VOViAgIkJJT05JQ19ETlNDQUNIRSIKKworLyogZW50cmllcyBvbGRlciB0aGFuIENPTkZJR19TRUNPTkRTIHNlY29uZHMgYXJlIGFsd2F5cyBkaXNjYXJkZWQuIG90aGVyd2lzZSB3ZSBjb3VsZCBrZWVwCisgKiBzdGFsZSBhZGRyZXNzZXMgaW4gdGhlIGNhY2hlIGFuZCBiZSBvYmxpdmlvdXMgdG8gRE5TIHNlcnZlciBjaGFuZ2VzCisgKi8KKyNkZWZpbmUgIENPTkZJR19TRUNPTkRTICAgICg2MCoxMCkgICAgLyogMTAgbWludXRlcyAqLworCisvKiBtYXhpbXVtIG51bWJlciBvZiBlbnRyaWVzIGtlcHQgaW4gdGhlIGNhY2hlLiBiZSBmcnVnYWwsIHRoaXMgaXMgdGhlIEMgbGlicmFyeQorICogdGhpcyBNVVNUIEJFIEEgUE9XRVIgT0YgMgorICovCisjZGVmaW5lICBDT05GSUdfTUFYX0VOVFJJRVMgICAxMjgKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgIERFQlVHICAwCisKKyNpZiBERUJVRworI2luY2x1ZGUgPGZjbnRsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorc3RhdGljIHZvaWQKK3hsb2coIGNvbnN0IGNoYXIqICBmbXQsIC4uLiApCit7CisgICAgc3RhdGljIGludCAgZmQgPSAtMjsKKyAgICBpbnQgICAgICAgICByZXQ7CisKKyAgICBpZiAoZmQgPT0gLTIpIHsKKyAgICAgICAgZG8geworICAgICAgICAgICAgZmQgPSBvcGVuKCAiL2RhdGEvZG5zLmxvZyIsIE9fQ1JFQVQgfCBPX0FQUEVORCB8IE9fV1JPTkxZLCAwNjY2ICk7CisgICAgICAgIH0gd2hpbGUgKGZkIDwgMCAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgfQorCisgICAgaWYgKGZkID49IDApIHsKKyAgICAgICAgY2hhciAgdGVtcFsxMjhdOworICAgICAgICB2YV9saXN0ICBhcmdzOworICAgICAgICB2YV9zdGFydChhcmdzLCBmbXQpOworICAgICAgICB2c25wcmludGYoIHRlbXAsIHNpemVvZih0ZW1wKSwgZm10LCBhcmdzKTsKKyAgICAgICAgdmFfZW5kKGFyZ3MpOworCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHJldCA9IHdyaXRlKCBmZCwgdGVtcCwgc3RybGVuKHRlbXApICk7CisgICAgICAgIH0gd2hpbGUgKHJldCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisgICAgfQorfQorI2RlZmluZSAgWExPRyguLi4pICAgeGxvZyhfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVmaW5lICBYTE9HKC4uLikgICAoKHZvaWQpMCkKKyNlbmRpZgorCisKK3N0YXRpYyB0aW1lX3QKK190aW1lX25vdyggdm9pZCApCit7CisgICAgc3RydWN0IHRpbWV2YWwgIHR2OworCisgICAgZ2V0dGltZW9mZGF5KCAmdHYsIE5VTEwgKTsKKyAgICByZXR1cm4gdHYudHZfc2VjOworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogdXNlZCB0byBkZWZpbmUgdGhlIGNvbnRlbnQgb2YgX1JFU09MVl9IT1NURU5UX05PTkUKKyAqLworY29uc3Qgc3RydWN0IGhvc3RlbnQgIF9yZXNvbHZfaG9zdGVudF9ub25lX2NzdCA9IHsKKyAgICBOVUxMLAorICAgIE5VTEwsCisgICAgQUZfSU5FVCwKKyAgICA0LAorICAgIE5VTEwKK307CisKK3N0cnVjdCBob3N0ZW50KgorX3Jlc29sdl9ob3N0ZW50X2NvcHkoIHN0cnVjdCBob3N0ZW50KiAgaHAgKQoreworICAgIHN0cnVjdCBob3N0ZW50KiAgZHN0OworICAgIGludCAgICAgICAgICAgICAgbm4sIGxlbjsKKyAgICBjaGFyKiAgICAgICAgICAgIHA7CisgICAgaW50ICAgICAgICAgICAgICBudW1fYWxpYXNlcyA9IDAsIG51bV9hZGRyZXNzZXMgPSAwOworCisgICAgaWYgKGhwID09IE5VTEwpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKGhwID09IF9SRVNPTFZfSE9TVEVOVF9OT05FKQorICAgICAgICByZXR1cm4gaHA7CisKKyAgICBsZW4gID0gc2l6ZW9mKCpocCk7CisgICAgbGVuICs9IHN0cmxlbihocC0+aF9uYW1lKSArIDE7CisKKyAgICBpZiAoaHAtPmhfYWxpYXNlcyAhPSBOVUxMKSB7CisgICAgICAgIGZvciAobm4gPSAwOyBocC0+aF9hbGlhc2VzW25uXSAhPSBOVUxMOyBubisrKQorICAgICAgICAgICAgbGVuICs9IHNpemVvZihjaGFyKikgKyBzdHJsZW4oaHAtPmhfYWxpYXNlc1tubl0pICsgMTsKKyAgICAgICAgbnVtX2FsaWFzZXMgPSBubjsKKyAgICB9CisgICAgbGVuICs9IHNpemVvZihjaGFyKik7CisKKyAgICBmb3IgKG5uID0gMDsgaHAtPmhfYWRkcl9saXN0W25uXSAhPSBOVUxMOyBubisrKSB7CisgICAgICAgIGxlbiArPSBzaXplb2YoY2hhciopICsgaHAtPmhfbGVuZ3RoOworICAgIH0KKyAgICBudW1fYWRkcmVzc2VzID0gbm47CisgICAgbGVuICs9IHNpemVvZihjaGFyKik7CisKKyAgICBkc3QgPSBtYWxsb2MoIGxlbiApOworICAgIGlmIChkc3QgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBkc3QtPmhfYWxpYXNlcyAgID0gKGNoYXIqKikoZHN0ICsgMSk7CisgICAgZHN0LT5oX2FkZHJfbGlzdCA9IGRzdC0+aF9hbGlhc2VzICsgbnVtX2FsaWFzZXMgKyAxOworICAgIGRzdC0+aF9sZW5ndGggICAgPSBocC0+aF9sZW5ndGg7CisgICAgZHN0LT5oX2FkZHJ0eXBlICA9IGhwLT5oX2FkZHJ0eXBlOworCisgICAgcCA9IChjaGFyKikoZHN0LT5oX2FkZHJfbGlzdCArIG51bV9hZGRyZXNzZXMgKyAxKTsKKworICAgIC8qIHdyaXRlIHRoZSBhZGRyZXNzZXMgZmlyc3QsIHRvIGhlbHAgd2l0aCBhbGlnbm1lbnQgaXNzdWVzICovCisgICAgZm9yIChubiA9IDA7IG5uIDwgbnVtX2FkZHJlc3Nlczsgbm4rKykgeworICAgICAgICBkc3QtPmhfYWRkcl9saXN0W25uXSA9IHA7CisgICAgICAgIGxlbiA9IGhwLT5oX2xlbmd0aDsKKyAgICAgICAgbWVtY3B5KCBwLCBocC0+aF9hZGRyX2xpc3Rbbm5dLCBsZW4gKTsKKyAgICAgICAgcCArPSBsZW47CisgICAgfQorICAgIGRzdC0+aF9hZGRyX2xpc3Rbbm5dID0gTlVMTDsKKworICAgIGZvciAobm4gPSAwOyBubiA8IG51bV9hbGlhc2VzOyBubisrKSB7CisgICAgICAgIGRzdC0+aF9hbGlhc2VzW25uXSA9IHA7CisgICAgICAgIGxlbiA9IHN0cmxlbihocC0+aF9hbGlhc2VzW25uXSkgKyAxOworICAgICAgICBtZW1jcHkoIHAsIGhwLT5oX2FsaWFzZXNbbm5dLCBsZW4gKTsKKyAgICAgICAgcCArPSBsZW47CisgICAgfQorICAgIGRzdC0+aF9hbGlhc2VzW25uXSA9IE5VTEw7CisKKyAgICBkc3QtPmhfbmFtZSAgICAgID0gcDsKKyAgICBsZW4gPSBzdHJsZW4oaHAtPmhfbmFtZSkgKyAxOworICAgIG1lbWNweShwLCBocC0+aF9uYW1lLCBsZW4pOworICAgIHAgKz0gbGVuOworCisgICAgcmV0dXJuIGRzdDsKK30KKworCit2b2lkCitfcmVzb2x2X2hvc3RlbnRfZnJlZSggc3RydWN0IGhvc3RlbnQqICBocCApCit7CisgICAgaWYgKGhwICYmIGhwICE9IF9SRVNPTFZfSE9TVEVOVF9OT05FKQorICAgICAgICBmcmVlKGhwKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKK3R5cGVkZWYgc3RydWN0IEVudHJ5IHsKKyAgICB1bnNpZ25lZCBpbnQgICAgIGhhc2g7CisgICAgY29uc3QgY2hhciogICAgICBuYW1lOworICAgIHNob3J0ICAgICAgICAgICAgYWY7CisgICAgc2hvcnQgICAgICAgICAgICBpbmRleDsKKyAgICBzdHJ1Y3QgRW50cnkqICAgIG1ydV9wcmV2OworICAgIHN0cnVjdCBFbnRyeSogICAgbXJ1X25leHQ7CisgICAgdGltZV90ICAgICAgICAgICB3aGVuOworICAgIHN0cnVjdCBob3N0ZW50KiAgaHA7Cit9IEVudHJ5OworCisKK3N0YXRpYyB2b2lkCitlbnRyeV9mcmVlKCBFbnRyeSogIGUgKQoreworICAgIC8qIGV2ZXJ5dGhpbmcgaXMgYWxsb2NhdGVkIGluIGEgc2luZ2xlIG1lbW9yeSBibG9jayAqLworICAgIGlmIChlKSB7CisgICAgICAgIF9yZXNvbHZfaG9zdGVudF9mcmVlKGUtPmhwKTsKKyAgICAgICAgZnJlZShlKTsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitlbnRyeV9pbml0X2tleSggRW50cnkqICBlLCBjb25zdCBjaGFyKiAgbmFtZSwgaW50ICBhZiApCit7CisgICAgdW5zaWduZWQgICAgIGggPSAwOworICAgIGNvbnN0IGNoYXIqICBwID0gbmFtZTsKKworICAgIC8qIGNvbXB1dGUgaGFzaCAqLworICAgIHAgPSBuYW1lOworICAgIHdoaWxlICgqcCkgeworICAgICAgICBoID0gaCozMyArICpwKys7CisgICAgfQorICAgIGggKz0gYWYqMTc7CisKKyAgICBlLT5oYXNoID0gaDsKKyAgICBlLT5uYW1lID0gbmFtZTsKKyAgICBlLT5hZiAgID0gKHNob3J0KSBhZjsKK30KKworCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfcmVtb3ZlKCBFbnRyeSogIGUgKQoreworICAgIGUtPm1ydV9wcmV2LT5tcnVfbmV4dCA9IGUtPm1ydV9uZXh0OworICAgIGUtPm1ydV9uZXh0LT5tcnVfcHJldiA9IGUtPm1ydV9wcmV2OworfQorCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkCitlbnRyeV9tcnVfYWRkKCBFbnRyeSogIGUsIEVudHJ5KiAgbGlzdCApCit7CisgICAgRW50cnkqICBmaXJzdCA9IGxpc3QtPm1ydV9uZXh0OworCisgICAgZS0+bXJ1X25leHQgPSBmaXJzdDsKKyAgICBlLT5tcnVfcHJldiA9IGxpc3Q7CisKKyAgICBsaXN0LT5tcnVfbmV4dCAgPSBlOworICAgIGZpcnN0LT5tcnVfcHJldiA9IGU7Cit9CisKKworc3RhdGljIEVudHJ5KgorZW50cnlfYWxsb2MoIGNvbnN0IGNoYXIqICBuYW1lLCBpbnQgIGFmLCBpbnQgIGluZGV4LCBzdHJ1Y3QgaG9zdGVudCogIGhwICkKK3sKKyAgICBFbnRyeSogIGU7CisgICAgaW50ICAgICBudW1fYWxpYXNlcyAgID0gMDsKKyAgICBpbnQgICAgIG51bV9hZGRyZXNzZXMgPSAwOworICAgIGNoYXIqKiAgYWxpYXNlczsKKyAgICBjaGFyKiogIGFkZHJlc3NlczsKKworICAgIC8qIGNvbXB1dGUgdGhlIGxlbmd0aCBvZiB0aGUgbWVtb3J5IGJsb2NrIHRoYXQgd2lsbCBjb250YWluIGV2ZXJ5dGhpbmcgKi8KKyAgICBpbnQgICBsZW4gPSBzaXplb2YoKmUpICsgc3RybGVuKG5hbWUpKzE7CisKKyAgICBlID0gbWFsbG9jKGxlbik7CisgICAgaWYgKGUgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIGU7CisKKyAgICBlbnRyeV9pbml0X2tleShlLCBuYW1lLCBhZik7CisKKyAgICBlLT5tcnVfbmV4dCA9IGUtPm1ydV9wcmV2ID0gZTsKKyAgICBlLT5pbmRleCAgICA9IChzaG9ydCkgaW5kZXg7CisgICAgZS0+d2hlbiAgICAgPSBfdGltZV9ub3coKTsKKyAgICBlLT5ocCAgICAgICA9IF9yZXNvbHZfaG9zdGVudF9jb3B5KGhwKTsKKworICAgIGlmIChlLT5ocCA9PSBOVUxMKSB7CisgICAgICAgIGZyZWUoZSk7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGUtPm5hbWUgPSAoY2hhciopKGUrMSk7CisgICAgbGVuICAgICA9IHN0cmxlbihuYW1lKSsxOworICAgIG1lbWNweSggKGNoYXIqKWUtPm5hbWUsIG5hbWUsIGxlbiApOworICAgIHJldHVybiBlOworfQorCisKK3N0YXRpYyBfX2lubGluZV9fIGludAorZW50cnlfZXF1YWxzKCBjb25zdCBFbnRyeSogIGUxLCBjb25zdCBFbnRyeSogIGUyICkKK3sKKyAgICByZXR1cm4gZTEtPmhhc2ggPT0gZTItPmhhc2ggJiYgZTEtPmFmID09IGUyLT5hZiAmJiAhc3RyY21wKCBlMS0+bmFtZSwgZTItPm5hbWUgKTsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgIE1BWF9IQVNIX0VOVFJJRVMgICAoMipDT05GSUdfTUFYX0VOVFJJRVMpCisKK3R5cGVkZWYgc3RydWN0IHJlc29sdl9jYWNoZSB7CisgICAgaW50ICAgICAgICAgICAgICAgbnVtX2VudHJpZXM7CisgICAgRW50cnkgICAgICAgICAgICAgbXJ1X2xpc3Q7CisgICAgcHRocmVhZF9tdXRleF90ICAgbG9jazsKKyAgICBpbnQgICAgICAgICAgICAgICBkaXNhYmxlZDsKKyAgICBFbnRyeSogICAgICAgICAgICBlbnRyaWVzWyBNQVhfSEFTSF9FTlRSSUVTIF07ICAgICAgLyogaGFzaC10YWJsZSBvZiBwb2ludGVycyB0byBlbnRyaWVzICovCit9IENhY2hlOworCisKK3ZvaWQKK19yZXNvbHZfY2FjaGVfZGVzdHJveSggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlICkKK3sKKyAgICBpZiAoY2FjaGUgIT0gTlVMTCkgeworICAgICAgICBpbnQgIG5uOworICAgICAgICBmb3IgKG5uID0gMDsgbm4gPCBNQVhfSEFTSF9FTlRSSUVTOyBubisrKSB7CisgICAgICAgICAgICBlbnRyeV9mcmVlKGNhY2hlLT5lbnRyaWVzW25uXSk7CisgICAgICAgIH0KKyAgICAgICAgcHRocmVhZF9tdXRleF9kZXN0cm95KCZjYWNoZS0+bG9jayk7CisgICAgICAgIGZyZWUoY2FjaGUpOworICAgIH0KK30KKworCitzdHJ1Y3QgcmVzb2x2X2NhY2hlKgorX3Jlc29sdl9jYWNoZV9jcmVhdGUoIHZvaWQgKQoreworICAgIHN0cnVjdCByZXNvbHZfY2FjaGUqICBjYWNoZTsKKworICAgIGNhY2hlID0gY2FsbG9jKHNpemVvZigqY2FjaGUpLCAxKTsKKyAgICBpZiAoY2FjaGUpIHsKKyAgICAgICAgY29uc3QgY2hhciogIGVudiA9IGdldGVudihDT05GSUdfRU5WKTsKKworICAgICAgICBpZiAoZW52ICYmIGF0b2koZW52KSA9PSAwKQorICAgICAgICAgICAgY2FjaGUtPmRpc2FibGVkID0gMTsKKworICAgICAgICBwdGhyZWFkX211dGV4X2luaXQoICZjYWNoZS0+bG9jaywgTlVMTCApOworICAgICAgICBjYWNoZS0+bXJ1X2xpc3QubXJ1X3ByZXYgPSBjYWNoZS0+bXJ1X2xpc3QubXJ1X25leHQgPSAmY2FjaGUtPm1ydV9saXN0OworICAgICAgICBYTE9HKCIlczogY2FjaGU9JXAgJXNcbiIsIF9fRlVOQ1RJT05fXywgY2FjaGUsIGNhY2hlLT5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiZW5hYmxlZCIgKTsKKyAgICB9CisgICAgcmV0dXJuIGNhY2hlOworfQorCisKK3N0YXRpYyBpbnQKK19yZXNvbHZfY2FjaGVfZmluZF9pbmRleCggQ2FjaGUqICAgICAgIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyKiAgbmFtZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgIGFmICkKK3sKKyAgICBFbnRyeSAga2V5OworICAgIGludCAgICBubiwgc3RlcCwgdHJpZXM7CisKKyAgICBlbnRyeV9pbml0X2tleSggJmtleSwgbmFtZSwgYWYgKTsKKworICAgIHRyaWVzID0gTUFYX0hBU0hfRU5UUklFUzsKKyAgICBubiAgICA9IGtleS5oYXNoICUgTUFYX0hBU0hfRU5UUklFUzsKKyAgICBzdGVwICA9IDU7CisKKyAgICB3aGlsZSAodHJpZXMgPiAwKSB7CisgICAgICAgIEVudHJ5KiAga2V5MiA9IGNhY2hlLT5lbnRyaWVzW25uXTsKKworICAgICAgICBpZiAoa2V5MiA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gLShubiArIDEpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGVudHJ5X2VxdWFscyggJmtleSwga2V5MiApICkgeworICAgICAgICAgICAgcmV0dXJuIG5uOworICAgICAgICB9CisKKyAgICAgICAgbm4gICAgID0gKG5uICsgc3RlcCkgJSBNQVhfSEFTSF9FTlRSSUVTOworICAgICAgICB0cmllcyAtPSAxOworICAgIH0KKyAgICByZXR1cm4gLShNQVhfSEFTSF9FTlRSSUVTKzEpOworfQorCisKK3N0YXRpYyB2b2lkCitfcmVzb2x2X2NhY2hlX3JlbW92ZSggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgIEVudHJ5KiAgICAgICAgICAgICAgICBlICkKK3sKKyAgICBYTE9HKCIlczogbmFtZT0nJXMnIGFmPSVkXG4iLCBfX0ZVTkNUSU9OX18sIGUtPm5hbWUsIGUtPmFmKTsKKyAgICBjYWNoZS0+ZW50cmllc1sgZS0+aW5kZXggXSA9IE5VTEw7ICAvKiByZW1vdmUgZnJvbSBoYXNoIHRhYmxlICovCisgICAgZW50cnlfbXJ1X3JlbW92ZSggZSApOworICAgIGVudHJ5X2ZyZWUoIGUgKTsKKyAgICBjYWNoZS0+bnVtX2VudHJpZXMgLT0gMTsKK30KKworCitzdHJ1Y3QgaG9zdGVudCoKK19yZXNvbHZfY2FjaGVfbG9va3VwKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFmICkKK3sKKyAgICBpbnQgICAgICAgICAgICAgICBpbmRleDsKKyAgICBzdHJ1Y3QgaG9zdGVudCogICByZXN1bHQgPSBOVUxMOworCisgICAgaWYgKGNhY2hlLT5kaXNhYmxlZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZjYWNoZS0+bG9jayApOworCisgICAgWExPRyggIiVzOiBjYWNoZT0lcCBuYW1lPSclcycgYWY9JWQgIiwgX19GVU5DVElPTl9fLCBjYWNoZSwgbmFtZSwgYWYgKTsKKyAgICBpbmRleCA9IF9yZXNvbHZfY2FjaGVfZmluZF9pbmRleCggY2FjaGUsIG5hbWUsIGFmICk7CisgICAgaWYgKGluZGV4ID49IDApIHsKKyAgICAgICAgRW50cnkqICBlICAgPSBjYWNoZS0+ZW50cmllc1tpbmRleF07CisgICAgICAgIHRpbWVfdCAgbm93ID0gX3RpbWVfbm93KCk7CisgICAgICAgIHN0cnVjdCBob3N0ZW50KiogIHBodDsKKworICAgICAgICAvKiBpZ25vcmUgc3RhbGUgZW50cmllcywgdGhleSB3aWxsIGJlIGRpc2NhcmRlZCBpbiBfcmVzb2x2X2NhY2hlX2FkZCAqLworICAgICAgICBpZiAoICh1bnNpZ25lZCkobm93IC0gZS0+d2hlbikgPj0gQ09ORklHX1NFQ09ORFMgKSB7CisgICAgICAgICAgICBYTE9HKCAiIE9MRFxuIiApOworICAgICAgICAgICAgZ290byBFeGl0OworICAgICAgICB9CisKKyAgICAgICAgLyogYnVtcCB1cCB0aGlzIGVudHJ5IHRvIHRoZSB0b3Agb2YgdGhlIE1SVSBsaXN0ICovCisgICAgICAgIGlmIChlICE9IGNhY2hlLT5tcnVfbGlzdC5tcnVfbmV4dCkgeworICAgICAgICAgICAgZW50cnlfbXJ1X3JlbW92ZSggZSApOworICAgICAgICAgICAgZW50cnlfbXJ1X2FkZCggZSwgJmNhY2hlLT5tcnVfbGlzdCApOworICAgICAgICB9CisKKyAgICAgICAgLyogbm93IGNvcHkgdGhlIHJlc3VsdCBpbnRvIGEgdGhyZWFkLWxvY2FsIHZhcmlhYmxlICovCisgICAgICAgIHBodCA9IF9fZ2V0X3Jlc19jYWNoZV9ob3N0ZW50X3AoKTsKKyAgICAgICAgaWYgKHBodCA9PSBOVUxMKSB7CisgICAgICAgICAgICBYTE9HKCAiIE5PVExTXG4iICk7ICAvKiBzaG91bGRuJ3QgaGFwcGVuICovCisgICAgICAgICAgICBnb3RvIEV4aXQ7CisgICAgICAgIH0KKworICAgICAgICBpZiAocGh0WzBdKSB7CisgICAgICAgICAgICBfcmVzb2x2X2hvc3RlbnRfZnJlZSggcGh0WzBdICk7ICAvKiBjbGVhciBwcmV2aW91cyB2YWx1ZSAqLworICAgICAgICAgICAgcGh0WzBdID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICByZXN1bHQgPSBfcmVzb2x2X2hvc3RlbnRfY29weSggZS0+aHAgKTsKKyAgICAgICAgaWYgKHJlc3VsdCA9PSBOVUxMKSB7CisgICAgICAgICAgICBYTE9HKCAiIE5PTUVNXG4iICk7ICAvKiBidW1tZXIgKi8KKyAgICAgICAgICAgIGdvdG8gRXhpdDsKKyAgICAgICAgfQorICAgICAgICBYTE9HKCAiIE9LXG4iICk7CisgICAgICAgIHBodFswXSA9IHJlc3VsdDsKKyAgICAgICAgZ290byBFeGl0OworICAgIH0KKyAgICBYTE9HKCAiIEtPXG4iICk7CitFeGl0OgorICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmY2FjaGUtPmxvY2sgKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisKK3ZvaWQKK19yZXNvbHZfY2FjaGVfYWRkKCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUsCisgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgICAgIGFmLAorICAgICAgICAgICAgICAgICAgIHN0cnVjdCBob3N0ZW50KiAgICAgICBocCApCit7CisgICAgRW50cnkqICAgZTsKKyAgICBpbnQgICAgICBpbmRleDsKKworICAgIGlmIChjYWNoZS0+ZGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayggJmNhY2hlLT5sb2NrICk7CisKKyAgICBYTE9HKCAiJXM6IGNhY2hlPSVwIG5hbWU9JyVzJyBhZj0lZFxuIiwgX19GVU5DVElPTl9fLCBjYWNoZSwgbmFtZSwgYWYpOworCisgICAgLyogZ2V0IHJpZCBvZiB0aGUgb2xkZXN0IGVudHJ5IGlmIG5lZWRlZCAqLworICAgIGlmIChjYWNoZS0+bnVtX2VudHJpZXMgPj0gQ09ORklHX01BWF9FTlRSSUVTKSB7CisgICAgICAgIEVudHJ5KiAgb2xkZXN0ID0gY2FjaGUtPm1ydV9saXN0Lm1ydV9wcmV2OworICAgICAgICBfcmVzb2x2X2NhY2hlX3JlbW92ZSggY2FjaGUsIG9sZGVzdCApOworICAgIH0KKworICAgIGluZGV4ID0gX3Jlc29sdl9jYWNoZV9maW5kX2luZGV4KCBjYWNoZSwgbmFtZSwgYWYgKTsKKyAgICBpZiAoaW5kZXggPj0gMCkgeworICAgICAgICAvKiBkaXNjYXJkIHN0YWxlIGVudHJ5ICovCisgICAgICAgIF9yZXNvbHZfY2FjaGVfcmVtb3ZlKCBjYWNoZSwgY2FjaGUtPmVudHJpZXNbaW5kZXhdICk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaW5kZXggPSAtKGluZGV4KzEpOworICAgICAgICBpZiAoaW5kZXggPj0gTUFYX0hBU0hfRU5UUklFUykKKyAgICAgICAgICAgIGdvdG8gRXhpdDsgIC8qIHNob3VsZCBub3QgaGFwcGVuICovCisgICAgfQorCisgICAgZSA9IGVudHJ5X2FsbG9jKCBuYW1lLCBhZiwgaW5kZXgsIGhwICk7CisgICAgaWYgKGUgIT0gTlVMTCkgeworICAgICAgICBlbnRyeV9tcnVfYWRkKCBlLCAmY2FjaGUtPm1ydV9saXN0ICk7CisgICAgICAgIGNhY2hlLT5lbnRyaWVzW2luZGV4XSA9IGU7CisgICAgICAgIGNhY2hlLT5udW1fZW50cmllcyAgICs9IDE7CisgICAgfQorRXhpdDoKKyAgICBwdGhyZWFkX211dGV4X3VubG9jayggJmNhY2hlLT5sb2NrICk7Cit9CisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKioqKiogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKioqKi8KKy8qKioqKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoqKioqLworLyoqKioqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKioqKiovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitzdGF0aWMgc3RydWN0IHJlc29sdl9jYWNoZSogIF9yZXNfY2FjaGU7CitzdGF0aWMgcHRocmVhZF9vbmNlX3QgICAgICAgIF9yZXNfY2FjaGVfb25jZTsKKworc3RhdGljIHZvaWQKK19yZXNfY2FjaGVfaW5pdCggdm9pZCApCit7CisgICAgX3Jlc19jYWNoZSA9IF9yZXNvbHZfY2FjaGVfY3JlYXRlKCk7Cit9CisKKworc3RydWN0IHJlc29sdl9jYWNoZSoKK19fZ2V0X3Jlc19jYWNoZSggdm9pZCApCit7CisgICAgcHRocmVhZF9vbmNlKCAmX3Jlc19jYWNoZV9vbmNlLCBfcmVzX2NhY2hlX2luaXQgKTsKKyAgICByZXR1cm4gX3Jlc19jYWNoZTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjk5MWU4YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcC5jCkBAIC0wLDAgKzEsMjU5IEBACisvKgkkTmV0QlNEOiByZXNfY29tcC5jLHYgMS42IDIwMDQvMDUvMjIgMjM6NDc6MDkgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19jb21wLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19jb21wLmMsdiAxLjEuMi4xLjQuMSAyMDA0LzAzLzA5IDA4OjMzOjU0IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX2NvbXAuYyx2IDEuNiAyMDA0LzA1LzIyIDIzOjQ3OjA5IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2Vsc2UKKyNpbmNsdWRlIDxyZXNvbHYuaD4KKyNlbmRpZgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKy8qCisgKiBFeHBhbmQgY29tcHJlc3NlZCBkb21haW4gbmFtZSAnc3JjJyB0byBmdWxsIGRvbWFpbiBuYW1lLgorICogJ21zZycgaXMgYSBwb2ludGVyIHRvIHRoZSBiZWdpbmluZyBvZiB0aGUgbWVzc2FnZSwKKyAqICdlb20nIHBvaW50cyB0byB0aGUgZmlyc3QgbG9jYXRpb24gYWZ0ZXIgdGhlIG1lc3NhZ2UsCisgKiAnZHN0JyBpcyBhIHBvaW50ZXIgdG8gYSBidWZmZXIgb2Ygc2l6ZSAnZHN0c2l6JyBmb3IgdGhlIHJlc3VsdC4KKyAqIFJldHVybiBzaXplIG9mIGNvbXByZXNzZWQgbmFtZSBvciAtMSBpZiB0aGVyZSB3YXMgYW4gZXJyb3IuCisgKi8KK2ludAorZG5fZXhwYW5kKGNvbnN0IHVfY2hhciAqbXNnLCBjb25zdCB1X2NoYXIgKmVvbSwgY29uc3QgdV9jaGFyICpzcmMsCisJICBjaGFyICpkc3QsIGludCBkc3RzaXopCit7CisJaW50IG4gPSBuc19uYW1lX3VuY29tcHJlc3MobXNnLCBlb20sIHNyYywgZHN0LCAoc2l6ZV90KWRzdHNpeik7CisKKwlpZiAobiA+IDAgJiYgZHN0WzBdID09ICcuJykKKwkJZHN0WzBdID0gJ1wwJzsKKwlyZXR1cm4gKG4pOworfQorCisvKgorICogUGFjayBkb21haW4gbmFtZSAnZXhwX2RuJyBpbiBwcmVzZW50YXRpb24gZm9ybSBpbnRvICdjb21wX2RuJy4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgY29tcHJlc3NlZCBuYW1lIG9yIC0xLgorICogJ2xlbmd0aCcgaXMgdGhlIHNpemUgb2YgdGhlIGFycmF5IHBvaW50ZWQgdG8gYnkgJ2NvbXBfZG4nLgorICovCitpbnQKK2RuX2NvbXAoY29uc3QgY2hhciAqc3JjLCB1X2NoYXIgKmRzdCwgaW50IGRzdHNpeiwKKwl1X2NoYXIgKipkbnB0cnMsIHVfY2hhciAqKmxhc3RkbnB0cikKK3sKKwlyZXR1cm4gKG5zX25hbWVfY29tcHJlc3Moc3JjLCBkc3QsIChzaXplX3QpZHN0c2l6LAorCQkJCSAoY29uc3QgdV9jaGFyICoqKWRucHRycywKKwkJCQkgKGNvbnN0IHVfY2hhciAqKilsYXN0ZG5wdHIpKTsKK30KKworLyoKKyAqIFNraXAgb3ZlciBhIGNvbXByZXNzZWQgZG9tYWluIG5hbWUuIFJldHVybiB0aGUgc2l6ZSBvciAtMS4KKyAqLworaW50Citkbl9za2lwbmFtZShjb25zdCB1X2NoYXIgKnB0ciwgY29uc3QgdV9jaGFyICplb20pIHsKKwljb25zdCB1X2NoYXIgKnNhdmVwdHIgPSBwdHI7CisKKwlpZiAobnNfbmFtZV9za2lwKCZwdHIsIGVvbSkgPT0gLTEpCisJCXJldHVybiAoLTEpOworCXJldHVybiAocHRyIC0gc2F2ZXB0cik7Cit9CisKKy8qCisgKiBWZXJpZnkgdGhhdCBhIGRvbWFpbiBuYW1lIHVzZXMgYW4gYWNjZXB0YWJsZSBjaGFyYWN0ZXIgc2V0LgorICovCisKKy8qCisgKiBOb3RlIHRoZSBjb25zcGljdW91cyBhYnNlbmNlIG9mIGN0eXBlIG1hY3JvcyBpbiB0aGVzZSBkZWZpbml0aW9ucy4gIE9uCisgKiBub24tQVNDSUkgaG9zdHMsIHdlIGNhbid0IGRlcGVuZCBvbiBzdHJpbmcgbGl0ZXJhbHMgb3IgY3R5cGUgbWFjcm9zIHRvCisgKiB0ZWxsIHVzIGFueXRoaW5nIGFib3V0IG5ldHdvcmstZm9ybWF0IGRhdGEuICBUaGUgcmVzdCBvZiB0aGUgQklORCBzeXN0ZW0KKyAqIGlzIG5vdCBjYXJlZnVsIGFib3V0IHRoaXMsIGJ1dCBmb3Igc29tZSByZWFzb24sIHdlJ3JlIGRvaW5nIGl0IHJpZ2h0IGhlcmUuCisgKi8KKyNkZWZpbmUgUEVSSU9EIDB4MmUKKyNkZWZpbmUJaHlwaGVuY2hhcihjKSAoKGMpID09IDB4MmQpCisjZGVmaW5lIGJzbGFzaGNoYXIoYykgKChjKSA9PSAweDVjKQorI2RlZmluZSBwZXJpb2RjaGFyKGMpICgoYykgPT0gUEVSSU9EKQorI2RlZmluZSBhc3RlcmNoYXIoYykgKChjKSA9PSAweDJhKQorI2RlZmluZSBhbHBoYWNoYXIoYykgKCgoYykgPj0gMHg0MSAmJiAoYykgPD0gMHg1YSkgXAorCQkgICB8fCAoKGMpID49IDB4NjEgJiYgKGMpIDw9IDB4N2EpKQorI2RlZmluZSBkaWdpdGNoYXIoYykgKChjKSA+PSAweDMwICYmIChjKSA8PSAweDM5KQorCisjZGVmaW5lIGJvcmRlcmNoYXIoYykgKGFscGhhY2hhcihjKSB8fCBkaWdpdGNoYXIoYykpCisjZGVmaW5lIG1pZGRsZWNoYXIoYykgKGJvcmRlcmNoYXIoYykgfHwgaHlwaGVuY2hhcihjKSkKKyNkZWZpbmUJZG9tYWluY2hhcihjKSAoKGMpID4gMHgyMCAmJiAoYykgPCAweDdmKQorCitpbnQKK3Jlc19obm9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaW50IHBjaCA9IFBFUklPRCwgY2ggPSAqZG4rKzsKKworCXdoaWxlIChjaCAhPSAnXDAnKSB7CisJCWludCBuY2ggPSAqZG4rKzsKKworCQlpZiAocGVyaW9kY2hhcihjaCkpIHsKKwkJCTsKKwkJfSBlbHNlIGlmIChwZXJpb2RjaGFyKHBjaCkpIHsKKwkJCWlmICghYm9yZGVyY2hhcihjaCkpCisJCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIGlmIChwZXJpb2RjaGFyKG5jaCkgfHwgbmNoID09ICdcMCcpIHsKKwkJCWlmICghYm9yZGVyY2hhcihjaCkpCisJCQkJcmV0dXJuICgwKTsKKwkJfSBlbHNlIHsKKwkJCWlmICghbWlkZGxlY2hhcihjaCkpCisJCQkJcmV0dXJuICgwKTsKKwkJfQorCQlwY2ggPSBjaCwgY2ggPSBuY2g7CisJfQorCXJldHVybiAoMSk7Cit9CisKKy8qCisgKiBob3N0bmFtZS1saWtlIChBLCBNWCwgV0tTKSBvd25lcnMgY2FuIGhhdmUgIioiIGFzIHRoZWlyIGZpcnN0IGxhYmVsCisgKiBidXQgbXVzdCBvdGhlcndpc2UgYmUgYXMgYSBob3N0IG5hbWUuCisgKi8KK2ludAorcmVzX293bm9rKGNvbnN0IGNoYXIgKmRuKSB7CisJaWYgKGFzdGVyY2hhcihkblswXSkpIHsKKwkJaWYgKHBlcmlvZGNoYXIoZG5bMV0pKQorCQkJcmV0dXJuIChyZXNfaG5vayhkbisyKSk7CisJCWlmIChkblsxXSA9PSAnXDAnKQorCQkJcmV0dXJuICgxKTsKKwl9CisJcmV0dXJuIChyZXNfaG5vayhkbikpOworfQorCisvKgorICogU09BIFJOQU1FcyBhbmQgUlAgUk5BTUVzIGNhbiBoYXZlIGFueSBwcmludGFibGUgY2hhcmFjdGVyIGluIHRoZWlyIGZpcnN0CisgKiBsYWJlbCwgYnV0IHRoZSByZXN0IG9mIHRoZSBuYW1lIGhhcyB0byBsb29rIGxpa2UgYSBob3N0IG5hbWUuCisgKi8KK2ludAorcmVzX21haWxvayhjb25zdCBjaGFyICpkbikgeworCWludCBjaCwgZXNjYXBlZCA9IDA7CisKKwkvKiAiLiIgaXMgYSB2YWxpZCBtaXNzaW5nIHJlcHJlc2VudGF0aW9uICovCisJaWYgKCpkbiA9PSAnXDAnKQorCQlyZXR1cm4gKDEpOworCisJLyogb3RoZXJ3aXNlIDxsYWJlbD4uPGhvc3RuYW1lPiAqLworCXdoaWxlICgoY2ggPSAqZG4rKykgIT0gJ1wwJykgeworCQlpZiAoIWRvbWFpbmNoYXIoY2gpKQorCQkJcmV0dXJuICgwKTsKKwkJaWYgKCFlc2NhcGVkICYmIHBlcmlvZGNoYXIoY2gpKQorCQkJYnJlYWs7CisJCWlmIChlc2NhcGVkKQorCQkJZXNjYXBlZCA9IDA7CisJCWVsc2UgaWYgKGJzbGFzaGNoYXIoY2gpKQorCQkJZXNjYXBlZCA9IDE7CisJfQorCWlmIChwZXJpb2RjaGFyKGNoKSkKKwkJcmV0dXJuIChyZXNfaG5vayhkbikpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBUaGlzIGZ1bmN0aW9uIGlzIHF1aXRlIGxpYmVyYWwsIHNpbmNlIFJGQyAxMDM0J3MgY2hhcmFjdGVyIHNldHMgYXJlIG9ubHkKKyAqIHJlY29tbWVuZGF0aW9ucy4KKyAqLworaW50CityZXNfZG5vayhjb25zdCBjaGFyICpkbikgeworCWludCBjaDsKKworCXdoaWxlICgoY2ggPSAqZG4rKykgIT0gJ1wwJykKKwkJaWYgKCFkb21haW5jaGFyKGNoKSkKKwkJCXJldHVybiAoMCk7CisJcmV0dXJuICgxKTsKK30KKworI2lmZGVmIEJJTkRfNF9DT01QQVQKKy8qCisgKiBUaGlzIG1vZHVsZSBtdXN0IGV4cG9ydCB0aGUgZm9sbG93aW5nIGV4dGVybmFsbHktdmlzaWJsZSBzeW1ib2xzOgorICoJX19fcHV0bG9uZworICoJX19fcHV0c2hvcnQKKyAqCV9fZ2V0bG9uZworICoJX19nZXRzaG9ydAorICogTm90ZSB0aGF0IG9uZSBfIGNvbWVzIGZyb20gQyBhbmQgdGhlIG90aGVycyBjb21lIGZyb20gdXMuCisgKi8KK3ZvaWQgX19wdXRsb25nKHVfaW50MzJfdCBzcmMsIHVfY2hhciAqZHN0KSB7IG5zX3B1dDMyKHNyYywgZHN0KTsgfQordm9pZCBfX3B1dHNob3J0KHVfaW50MTZfdCBzcmMsIHVfY2hhciAqZHN0KSB7IG5zX3B1dDE2KHNyYywgZHN0KTsgfQorI2lmbmRlZiBfX3VsdHJpeF9fCit1X2ludDMyX3QgX2dldGxvbmcoY29uc3QgdV9jaGFyICpzcmMpIHsgcmV0dXJuIChuc19nZXQzMihzcmMpKTsgfQordV9pbnQxNl90IF9nZXRzaG9ydChjb25zdCB1X2NoYXIgKnNyYykgeyByZXR1cm4gKG5zX2dldDE2KHNyYykpOyB9CisjZW5kaWYgLypfX3VsdHJpeF9fKi8KKyNlbmRpZiAvKkJJTkRfNF9DT01QQVQqLwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19jb21wYXQuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcGF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlhMWQ1ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfY29tcGF0LmMKQEAgLTAsMCArMSw4NyBAQAorLyoJJE5ldEJTRDogcmVzX2NvbXBhdC5jLHYgMS4xIDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgVGhlIE5ldEJTRCBGb3VuZGF0aW9uLCBJbmMuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gVGhlIE5ldEJTRCBGb3VuZGF0aW9uCisgKiBieSBDaHJpc3RvcyBab3VsYXMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19jb21wYXQuYyx2IDEuMSAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjZGVmaW5lIF9fT0xEX1JFU19TVEFURQorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgInJlc29sdi5oIgorI2VuZGlmCisKKyN1bmRlZiBfcmVzCisKKy8qCisgKiBCaW5hcnkgQ29tcGF0aWJpbGl0eTsgdGhpcyBzeW1ib2wgZG9lcyBub3QgYXBwZWFyIGluIGEgaGVhZGVyIGZpbGUKKyAqIE1vc3QgdXNlcmxhbmQgcHJvZ3JhbXMgdXNlIHRoaXMgdG8gc2V0IHJlc19vcHRpb25zIGJlZm9yZSByZXNfaW5pdCgpCisgKiBpcyBjYWxsZWQuIFRoZXJlIGFyZSBob29rcyB0byByZXNfaW5pdCgpIHRvIGNvbnN1bHQgdGhlIGRhdGEgaW4gdGhpcworICogc3RydWN0dXJlLiBUaGUgaG9va3MgYXJlIHByb3ZpZGVkIGluZGlyZWN0bHkgYnkgdGhlIHR3byBmdW5jdGlvbnMgYmVsb3cuCisgKiBXZSBkZXBlbmQgb24gdGhlIGZhY3QgdGhlIHRoZSBmaXJzdCA0NDAgWzMyIGJpdCBtYWNoaW5lc10gYnl0ZXMgYXJlCisgKiBzaGFyZWQgYmV0d2VlbiB0aGUgdHdvIHN0cnVjdHVyZXMuCisgKi8KKyNpZm5kZWYgX19CSU5EX05PU1RBVElDCitzdHJ1Y3QgX19yZXNfc3RhdGUgX3JlcworI2lmIGRlZmluZWQoX19CSU5EX1JFU19URVhUKQorCT0geyBSRVNfVElNRU9VVCwgfSAgICAgIC8qIE1vdG9yb2xhLCBldCBhbC4gKi8KKyMgZW5kaWYKKzsKKwordm9pZCAqX19yZXNfZ2V0X29sZF9zdGF0ZSh2b2lkKTsKK3ZvaWQgX19yZXNfcHV0X29sZF9zdGF0ZSh2b2lkICopOworCit2b2lkICoKK19fcmVzX2dldF9vbGRfc3RhdGUodm9pZCkKK3sKKwlyZXR1cm4gJl9yZXM7Cit9CisKK3ZvaWQKK19fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqcmVzKQoreworCSh2b2lkKW1lbWNweSgmX3JlcywgcmVzLCBzaXplb2YoX3JlcykpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGF0YS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU2MGVjZmQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RhdGEuYwpAQCAtMCwwICsxLDMzMiBAQAorLyoJJE5ldEJTRDogcmVzX2RhdGEuYyx2IDEuOCAyMDA0LzA2LzA5IDE4OjA3OjAzIGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIENvcHlyaWdodCAoYykgMTk5NS0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfZGF0YS5jLHYgMS4xLjIwNi4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfZGF0YS5jLHYgMS44IDIwMDQvMDYvMDkgMTg6MDc6MDMgY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKworY29uc3QgY2hhciAqIGNvbnN0IF9yZXNfb3Bjb2Rlc1tdID0geworCSJRVUVSWSIsCisJIklRVUVSWSIsCisJIkNRVUVSWU0iLAorCSJDUVVFUllVIiwJLyogZXhwZXJpbWVudGFsICovCisJIk5PVElGWSIsCS8qIGV4cGVyaW1lbnRhbCAqLworCSJVUERBVEUiLAorCSI2IiwKKwkiNyIsCisJIjgiLAorCSI5IiwKKwkiMTAiLAorCSIxMSIsCisJIjEyIiwKKwkiMTMiLAorCSJaT05FSU5JVCIsCisJIlpPTkVSRUYiLAorfTsKKworI2lmZGVmIEJJTkRfVVBEQVRFCitjb25zdCBjaGFyICogY29uc3QgX3Jlc19zZWN0aW9uY29kZXNbXSA9IHsKKwkiWk9ORSIsCisJIlBSRVJFUVVJU0lURVMiLAorCSJVUERBVEUiLAorCSJBRERJVElPTkFMIiwKK307CisjZW5kaWYKKworI2lmbmRlZiBfX0JJTkRfTk9TVEFUSUMKK2V4dGVybiBzdHJ1Y3QgX19yZXNfc3RhdGUgX25yZXM7CisKKy8qIFByb3RvLiAqLworCitpbnQgIHJlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqKTsKKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworaW50IHJlc19uZWVkX2luaXQoKSB7CisJcmV0dXJuICgoX25yZXMub3B0aW9ucyAmIFJFU19JTklUKSA9PSAwVSkgfHwgcmVzX2dldF9kbnNfY2hhbmdlZCgpOworfQorI2Vsc2UKKyNkZWZpbmUgcmVzX25lZWRfaW5pdCgpICAgKChfbnJlcy5vcHRpb25zICYgUkVTX0lOSVQpID09IDBVKQorI2VuZGlmCisKK2ludAorcmVzX2luaXQodm9pZCkgeworCWludCBydjsKKwlleHRlcm4gaW50IF9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKKyNpZmRlZiBDT01QQVRfX1JFUworCS8qCisJICogQ29tcGF0aWJpbGl0eSB3aXRoIHByb2dyYW0gdGhhdCB3ZXJlIGFjY2Vzc2luZyBfcmVzIGRpcmVjdGx5CisJICogdG8gc2V0IG9wdGlvbnMuIFdlIGtlZXAgYW5vdGhlciBzdHJ1Y3QgcmVzIHRoYXQgaXMgdGhlIHNhbWUKKwkgKiBzaXplIGFzIHRoZSBvcmlnaW5hbCByZXMgc3RydWN0dXJlLCBhbmQgdGhlbiBjb3B5IGZpZWxkcyB0bworCSAqIGl0IHNvIHRoYXQgd2UgYWNoaWV2ZSB0aGUgc2FtZSBpbml0aWFsaXphdGlvbgorCSAqLworCWV4dGVybiB2b2lkICpfX3Jlc19nZXRfb2xkX3N0YXRlKHZvaWQpOworCWV4dGVybiB2b2lkIF9fcmVzX3B1dF9vbGRfc3RhdGUodm9pZCAqKTsKKwlyZXNfc3RhdGUgb3JlcyA9IF9fcmVzX2dldF9vbGRfc3RhdGUoKTsKKworCWlmIChvcmVzLT5vcHRpb25zICE9IDApCisJCV9ucmVzLm9wdGlvbnMgPSBvcmVzLT5vcHRpb25zOworCWlmIChvcmVzLT5yZXRyYW5zICE9IDApCisJCV9ucmVzLnJldHJhbnMgPSBvcmVzLT5yZXRyYW5zOworCWlmIChvcmVzLT5yZXRyeSAhPSAwKQorCQlfbnJlcy5yZXRyeSA9IG9yZXMtPnJldHJ5OworI2VuZGlmCisKKwkvKgorCSAqIFRoZXNlIHRocmVlIGZpZWxkcyB1c2VkIHRvIGJlIHN0YXRpY2FsbHkgaW5pdGlhbGl6ZWQuICBUaGlzIG1hZGUKKwkgKiBpdCBoYXJkIHRvIHVzZSB0aGlzIGNvZGUgaW4gYSBzaGFyZWQgbGlicmFyeS4gIEl0IGlzIG5lY2Vzc2FyeSwKKwkgKiBub3cgdGhhdCB3ZSdyZSBkb2luZyBkeW5hbWljIGluaXRpYWxpemF0aW9uIGhlcmUsIHRoYXQgd2UgcHJlc2VydmUKKwkgKiB0aGUgb2xkIHNlbWFudGljczogaWYgYW4gYXBwbGljYXRpb24gbW9kaWZpZXMgb25lIG9mIHRoZXNlIHRocmVlCisJICogZmllbGRzIG9mIF9yZXMgYmVmb3JlIHJlc19pbml0KCkgaXMgY2FsbGVkLCByZXNfaW5pdCgpIHdpbGwgbm90CisJICogYWx0ZXIgdGhlbS4gIE9mIGNvdXJzZSwgaWYgYW4gYXBwbGljYXRpb24gaXMgc2V0dGluZyB0aGVtIHRvCisJICogX3plcm9fIGJlZm9yZSBjYWxsaW5nIHJlc19pbml0KCksIGhvcGluZyB0byBvdmVycmlkZSB3aGF0IHVzZWQKKwkgKiB0byBiZSB0aGUgc3RhdGljIGRlZmF1bHQsIHdlIGNhbid0IGRldGVjdCBpdCBhbmQgdW5leHBlY3RlZCByZXN1bHRzCisJICogd2lsbCBmb2xsb3cuICBaZXJvIGZvciBhbnkgb2YgdGhlc2UgZmllbGRzIHdvdWxkIG1ha2Ugbm8gc2Vuc2UsCisJICogc28gb25lIGNhbiBzYWZlbHkgYXNzdW1lIHRoYXQgdGhlIGFwcGxpY2F0aW9ucyB3ZXJlIGFscmVhZHkgZ2V0dGluZworCSAqIHVuZXhwZWN0ZWQgcmVzdWx0cy4KKwkgKgorCSAqIF9ucmVzLm9wdGlvbnMgaXMgdHJpY2t5IHNpbmNlIHNvbWUgYXBwcyB3ZXJlIGtub3duIHRvIGRpZGRsZSB0aGUgYml0cworCSAqIGJlZm9yZSByZXNfaW5pdCgpIHdhcyBmaXJzdCBjYWxsZWQuIFdlIGNhbid0IHJlcGxpY2F0ZSB0aGF0IHNlbWFudGljCisJICogd2l0aCBkeW5hbWljIGluaXRpYWxpemF0aW9uICh0aGV5IG1heSBoYXZlIHR1cm5lZCBiaXRzIG9mZiB0aGF0IGFyZQorCSAqIHNldCBpbiBSRVNfREVGQVVMVCkuICBPdXIgc29sdXRpb24gaXMgdG8gZGVjbGFyZSBzdWNoIGFwcGxpY2F0aW9ucworCSAqICJicm9rZW4iLiAgVGhleSBjb3VsZCBmb29sIHVzIGJ5IHNldHRpbmcgUkVTX0lOSVQgYnV0IG5vbmUgZG8gKHlldCkuCisJICovCisJaWYgKCFfbnJlcy5yZXRyYW5zKQorCQlfbnJlcy5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7CisJaWYgKCFfbnJlcy5yZXRyeSkKKwkJX25yZXMucmV0cnkgPSA0OworCWlmICghKF9ucmVzLm9wdGlvbnMgJiBSRVNfSU5JVCkpCisJCV9ucmVzLm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKKworCS8qCisJICogVGhpcyBvbmUgdXNlZCB0byBpbml0aWFsaXplIGltcGxpY2l0bHkgdG8gemVybywgc28gdW5sZXNzIHRoZSBhcHAKKwkgKiBoYXMgc2V0IGl0IHRvIHNvbWV0aGluZyBpbiBwYXJ0aWN1bGFyLCB3ZSBjYW4gcmFuZG9taXplIGl0IG5vdy4KKwkgKi8KKwlpZiAoIV9ucmVzLmlkKQorCQlfbnJlcy5pZCA9IHJlc19yYW5kb21pZCgpOworCisJcnYgPSBfX3Jlc192aW5pdCgmX25yZXMsIDEpOworI2lmZGVmIENPTVBBVF9fUkVTCisJX19yZXNfcHV0X29sZF9zdGF0ZSgmX25yZXMpOworI2VuZGlmCisJcmV0dXJuIHJ2OworfQorCit2b2lkCitwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnKSB7CisJZnBfcXVlcnkobXNnLCBzdGRvdXQpOworfQorCit2b2lkCitmcF9xdWVyeShjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgeworCWZwX25xdWVyeShtc2csIFBBQ0tFVFNaLCBmaWxlKTsKK30KKwordm9pZAorZnBfbnF1ZXJ5KGNvbnN0IHVfY2hhciAqbXNnLCBpbnQgbGVuLCBGSUxFICpmaWxlKSB7CisJaWYgKHJlc19uZWVkX2luaXQoKSAmJiByZXNfaW5pdCgpID09IC0xKQorCQlyZXR1cm47CisKKwlyZXNfcHF1ZXJ5KCZfbnJlcywgbXNnLCBsZW4sIGZpbGUpOworfQorCitpbnQKK3Jlc19ta3F1ZXJ5KGludCBvcCwJCQkvKiBvcGNvZGUgb2YgcXVlcnkgKi8KKwkgICAgY29uc3QgY2hhciAqZG5hbWUsCQkvKiBkb21haW4gbmFtZSAqLworCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgICBjb25zdCB1X2NoYXIgKmRhdGEsCQkvKiByZXNvdXJjZSByZWNvcmQgZGF0YSAqLworCSAgICBpbnQgZGF0YWxlbiwJCS8qIGxlbmd0aCBvZiBkYXRhICovCisJICAgIGNvbnN0IHVfY2hhciAqbmV3cnJfaW4sCS8qIG5ldyByciBmb3IgbW9kaWZ5IG9yIGFwcGVuZCAqLworCSAgICB1X2NoYXIgKmJ1ZiwJCS8qIGJ1ZmZlciB0byBwdXQgcXVlcnkgKi8KKwkgICAgaW50IGJ1ZmxlbikJCQkvKiBzaXplIG9mIGJ1ZmZlciAqLworeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKHJlc19ubWtxdWVyeSgmX25yZXMsIG9wLCBkbmFtZSwgY2xhc3MsIHR5cGUsCisJCQkgICAgIGRhdGEsIGRhdGFsZW4sCisJCQkgICAgIG5ld3JyX2luLCBidWYsIGJ1ZmxlbikpOworfQorCisjaWZkZWYgX0xJQlJFU09MVgoraW50CityZXNfbWt1cGRhdGUobnNfdXBkcmVjICpycmVjcF9pbiwgdV9jaGFyICpidWYsIGludCBidWZsZW4pIHsKKwlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKKwkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19ubWt1cGRhdGUoJl9ucmVzLCBycmVjcF9pbiwgYnVmLCBidWZsZW4pKTsKK30KKyNlbmRpZgorCitpbnQKK3Jlc19xdWVyeShjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCSAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyIGJ1ZmZlciAqLworeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKHJlc19ucXVlcnkoJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKK30KKwordm9pZAorcmVzX3NlbmRfc2V0cWhvb2socmVzX3NlbmRfcWhvb2sgaG9vaykgeworCV9ucmVzLnFob29rID0gaG9vazsKK30KKwordm9pZAorcmVzX3NlbmRfc2V0cmhvb2socmVzX3NlbmRfcmhvb2sgaG9vaykgeworCV9ucmVzLnJob29rID0gaG9vazsKK30KKworaW50CityZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICppbnApIHsKKwlyZXR1cm4gKHJlc19vdXJzZXJ2ZXJfcCgmX25yZXMsIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikoY29uc3Qgdm9pZCAqKWlucCkpOworfQorCitpbnQKK3Jlc19zZW5kKGNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeikgeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnNlbmQoJl9ucmVzLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXopKTsKK30KKworI2lmZGVmIF9MSUJSRVNPTFYKK2ludAorcmVzX3NlbmRzaWduZWQoY29uc3QgdV9jaGFyICpidWYsIGludCBidWZsZW4sIG5zX3RzaWdfa2V5ICprZXksCisJICAgICAgIHVfY2hhciAqYW5zLCBpbnQgYW5zc2l6KQoreworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQkvKiBlcnJubyBzaG91bGQgaGF2ZSBiZWVuIHNldCBieSByZXNfaW5pdCgpIGluIHRoaXMgY2FzZS4gKi8KKwkJcmV0dXJuICgtMSk7CisJfQorCisJcmV0dXJuIChyZXNfbnNlbmRzaWduZWQoJl9ucmVzLCBidWYsIGJ1Zmxlbiwga2V5LCBhbnMsIGFuc3NpeikpOworfQorI2VuZGlmCisKK3ZvaWQKK3Jlc19jbG9zZSh2b2lkKSB7CisJcmVzX25jbG9zZSgmX25yZXMpOworfQorCisjaWZkZWYgX0xJQlJFU09MVgoraW50CityZXNfdXBkYXRlKG5zX3VwZHJlYyAqcnJlY3BfaW4pIHsKKwlpZiAocmVzX25lZWRfaW5pdCgpICYmIHJlc19pbml0KCkgPT0gLTEpIHsKKwkJUkVTX1NFVF9IX0VSUk5PKCZfbnJlcywgTkVUREJfSU5URVJOQUwpOworCQlyZXR1cm4gKC0xKTsKKwl9CisKKwlyZXR1cm4gKHJlc19udXBkYXRlKCZfbnJlcywgcnJlY3BfaW4sIE5VTEwpKTsKK30KKyNlbmRpZgorCitpbnQKK3Jlc19zZWFyY2goY29uc3QgY2hhciAqbmFtZSwJLyogZG9tYWluIG5hbWUgKi8KKwkgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgIHVfY2hhciAqYW5zd2VyLAkvKiBidWZmZXIgdG8gcHV0IGFuc3dlciAqLworCSAgIGludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLworeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX25zZWFyY2goJl9ucmVzLCBuYW1lLCBjbGFzcywgdHlwZSwgYW5zd2VyLCBhbnNsZW4pKTsKK30KKworaW50CityZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqbmFtZSwKKwkJY29uc3QgY2hhciAqZG9tYWluLAorCQlpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCQl1X2NoYXIgKmFuc3dlciwJCS8qIGJ1ZmZlciB0byBwdXQgYW5zd2VyICovCisJCWludCBhbnNsZW4pCQkvKiBzaXplIG9mIGFuc3dlciAqLworeworCWlmIChyZXNfbmVlZF9pbml0KCkgJiYgcmVzX2luaXQoKSA9PSAtMSkgeworCQlSRVNfU0VUX0hfRVJSTk8oJl9ucmVzLCBORVREQl9JTlRFUk5BTCk7CisJCXJldHVybiAoLTEpOworCX0KKworCXJldHVybiAocmVzX25xdWVyeWRvbWFpbigmX25yZXMsIG5hbWUsIGRvbWFpbiwKKwkJCQkgY2xhc3MsIHR5cGUsCisJCQkJIGFuc3dlciwgYW5zbGVuKSk7Cit9CisKK2ludAorcmVzX29wdChpbnQgYSwgdV9jaGFyICpiLCBpbnQgYywgaW50IGQpCit7CisJcmV0dXJuIHJlc19ub3B0KCZfbnJlcywgYSwgYiwgYywgZCk7Cit9CisKK2NvbnN0IGNoYXIgKgoraG9zdGFsaWFzKGNvbnN0IGNoYXIgKm5hbWUpIHsKKwlyZXR1cm4gTlVMTDsKK30KKworI2lmZGVmIHVsdHJpeAoraW50Citsb2NhbF9ob3N0bmFtZV9sZW5ndGgoY29uc3QgY2hhciAqaG9zdG5hbWUpIHsKKwlpbnQgbGVuX2hvc3QsIGxlbl9kb21haW47CisKKwlpZiAoISpfbnJlcy5kZWZkbmFtZSkKKwkJcmVzX2luaXQoKTsKKwlsZW5faG9zdCA9IHN0cmxlbihob3N0bmFtZSk7CisJbGVuX2RvbWFpbiA9IHN0cmxlbihfbnJlcy5kZWZkbmFtZSk7CisJaWYgKGxlbl9ob3N0ID4gbGVuX2RvbWFpbiAmJgorCSAgICAhc3RyY2FzZWNtcChob3N0bmFtZSArIGxlbl9ob3N0IC0gbGVuX2RvbWFpbiwgX25yZXMuZGVmZG5hbWUpICYmCisJICAgIGhvc3RuYW1lW2xlbl9ob3N0IC0gbGVuX2RvbWFpbiAtIDFdID09ICcuJykKKwkJcmV0dXJuIChsZW5faG9zdCAtIGxlbl9kb21haW4gLSAxKTsKKwlyZXR1cm4gKDApOworfQorI2VuZGlmIC8qdWx0cml4Ki8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODRjNmFmYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuYwpAQCAtMCwwICsxLDExNzQgQEAKKy8qCSROZXRCU0Q6IHJlc19kZWJ1Zy5jLHYgMS43IDIwMDQvMTEvMDcgMDI6MjU6MDEgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NQorICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTUgYnkgSW50ZXJuYXRpb25hbCBCdXNpbmVzcyBNYWNoaW5lcywgSW5jLgorICoKKyAqIEludGVybmF0aW9uYWwgQnVzaW5lc3MgTWFjaGluZXMsIEluYy4gKGhlcmVpbmFmdGVyIGNhbGxlZCBJQk0pIGdyYW50cworICogcGVybWlzc2lvbiB1bmRlciBpdHMgY29weXJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcworICogU29mdHdhcmUgd2l0aCBvciB3aXRob3V0IGZlZSwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIGFsbCBwYXJhZ3JhcGhzIG9mIHRoaXMgbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdCB0aGUgbmFtZSBvZiBJQk0KKyAqIG5vdCBiZSB1c2VkIGluIGNvbm5lY3Rpb24gd2l0aCB0aGUgbWFya2V0aW5nIG9mIGFueSBwcm9kdWN0IGluY29ycG9yYXRpbmcKKyAqIHRoZSBTb2Z0d2FyZSBvciBtb2RpZmljYXRpb25zIHRoZXJlb2YsIHdpdGhvdXQgc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IKKyAqIHBlcm1pc3Npb24uCisgKgorICogVG8gdGhlIGV4dGVudCBpdCBoYXMgYSByaWdodCB0byBkbyBzbywgSUJNIGdyYW50cyBhbiBpbW11bml0eSBmcm9tIHN1aXQKKyAqIHVuZGVyIGl0cyBwYXRlbnRzLCBpZiBhbnksIGZvciB0aGUgdXNlLCBzYWxlIG9yIG1hbnVmYWN0dXJlIG9mIHByb2R1Y3RzIHRvCisgKiB0aGUgZXh0ZW50IHRoYXQgc3VjaCBwcm9kdWN0cyBhcmUgdXNlZCBmb3IgcGVyZm9ybWluZyBEb21haW4gTmFtZSBTeXN0ZW0KKyAqIGR5bmFtaWMgdXBkYXRlcyBpbiBUQ1AvSVAgbmV0d29ya3MgYnkgbWVhbnMgb2YgdGhlIFNvZnR3YXJlLiAgTm8gaW1tdW5pdHkgaXMKKyAqIGdyYW50ZWQgZm9yIGFueSBwcm9kdWN0IHBlciBzZSBvciBmb3IgYW55IG90aGVyIGZ1bmN0aW9uIG9mIGFueSBwcm9kdWN0LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBBTkQgSUJNIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUywKKyAqIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFLiAgSU4gTk8gRVZFTlQgU0hBTEwgSUJNIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsCisgKiBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBBUklTSU5HCisgKiBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTgorICogSUYgSUJNIElTIEFQUFJJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRVMuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfZGVidWcuYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2RlYnVnLmMsdiAxLjMuMi41LjQuNSAyMDA0LzA3LzI4IDIwOjE2OjQ2IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX2RlYnVnLmMsdiAxLjcgMjAwNC8xMS8wNyAwMjoyNTowMSBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorCisKKworI2lmZGVmIFNQUklOVEZfQ0hBUgorIyBkZWZpbmUgU1BSSU5URih4KSBzdHJsZW4oc3ByaW50Zi8qKi94KQorI2Vsc2UKKyMgZGVmaW5lIFNQUklOVEYoeCkgc3ByaW50ZiB4CisjZW5kaWYKKworc3RhdGljIGNvbnN0IGNoYXIgKnByZWNzaXplX250b2EodV9pbnQzMl90KTsKKworZXh0ZXJuIGNvbnN0IGNoYXIgKiBjb25zdCBfcmVzX29wY29kZXNbXTsKK2V4dGVybiBjb25zdCBjaGFyICogY29uc3QgX3Jlc19zZWN0aW9uY29kZXNbXTsKKworI2lmbmRlZiBfTElCQworLyoKKyAqIFByaW50IHRoZSBjdXJyZW50IG9wdGlvbnMuCisgKi8KK3ZvaWQKK2ZwX3Jlc3N0YXQoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBGSUxFICpmaWxlKSB7CisJdV9sb25nIG1hc2s7CisKKwlmcHJpbnRmKGZpbGUsICI7OyByZXMgb3B0aW9uczoiKTsKKwlmb3IgKG1hc2sgPSAxOyAgbWFzayAhPSAwVTsgIG1hc2sgPDw9IDEpCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIG1hc2spCisJCQlmcHJpbnRmKGZpbGUsICIgJXMiLCBwX29wdGlvbihtYXNrKSk7CisJcHV0YygnXG4nLCBmaWxlKTsKK30KKyNlbmRpZgorCitzdGF0aWMgdm9pZAorZG9fc2VjdGlvbihjb25zdCByZXNfc3RhdGUgc3RhdHAsCisJICAgbnNfbXNnICpoYW5kbGUsIG5zX3NlY3Qgc2VjdGlvbiwKKwkgICBpbnQgcGZsYWcsIEZJTEUgKmZpbGUpCit7CisJaW50IG4sIHNmbGFnLCBycm51bTsKKwlpbnQgYnVmbGVuID0gMjA0ODsKKwljaGFyICpidWY7CisJbnNfb3Bjb2RlIG9wY29kZTsKKwluc19yciBycjsKKworCS8qCisJICogUHJpbnQgYW5zd2VyIHJlY29yZHMuCisJICovCisJc2ZsYWcgPSAoc3RhdHAtPnBmY29kZSAmIHBmbGFnKTsKKwlpZiAoc3RhdHAtPnBmY29kZSAmJiAhc2ZsYWcpCisJCXJldHVybjsKKworCWJ1ZiA9IG1hbGxvYygoc2l6ZV90KWJ1Zmxlbik7CisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWZwcmludGYoZmlsZSwgIjs7IG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmVcbiIpOworCQlyZXR1cm47CisJfQorCisJb3Bjb2RlID0gKG5zX29wY29kZSkgbnNfbXNnX2dldGZsYWcoKmhhbmRsZSwgbnNfZl9vcGNvZGUpOworCXJybnVtID0gMDsKKwlmb3IgKDs7KSB7CisJCWlmIChuc19wYXJzZXJyKGhhbmRsZSwgc2VjdGlvbiwgcnJudW0sICZycikpIHsKKwkJCWlmIChlcnJubyAhPSBFTk9ERVYpCisJCQkJZnByaW50ZihmaWxlLCAiOzsgbnNfcGFyc2VycjogJXNcbiIsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQllbHNlIGlmIChycm51bSA+IDAgJiYgc2ZsYWcgIT0gMCAmJgorCQkJCSAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJCXB1dGMoJ1xuJywgZmlsZSk7CisJCQlnb3RvIGNsZWFudXA7CisJCX0KKwkJaWYgKHJybnVtID09IDAgJiYgc2ZsYWcgIT0gMCAmJiAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDEpKQorCQkJZnByaW50ZihmaWxlLCAiOzsgJXMgU0VDVElPTjpcbiIsCisJCQkJcF9zZWN0aW9uKHNlY3Rpb24sIG9wY29kZSkpOworCQlpZiAoc2VjdGlvbiA9PSBuc19zX3FkKQorCQkJZnByaW50ZihmaWxlLCAiOztcdCVzLCB0eXBlID0gJXMsIGNsYXNzID0gJXNcbiIsCisJCQkJbnNfcnJfbmFtZShyciksCisJCQkJcF90eXBlKG5zX3JyX3R5cGUocnIpKSwKKwkJCQlwX2NsYXNzKG5zX3JyX2NsYXNzKHJyKSkpOworCQllbHNlIGlmIChzZWN0aW9uID09IG5zX3NfYXIgJiYgbnNfcnJfdHlwZShycikgPT0gbnNfdF9vcHQpIHsKKwkJCXVfaW50MzJfdCB0dGwgPSBuc19ycl90dGwocnIpOworCQkJZnByaW50ZihmaWxlLAorCQkJCSI7IEVETlM6IHZlcnNpb246ICV1LCB1ZHA9JXUsIGZsYWdzPSUwNHhcbiIsCisJCQkJKHR0bD4+MTYpJjB4ZmYsIG5zX3JyX2NsYXNzKHJyKSwgdHRsJjB4ZmZmZik7CisJCX0gZWxzZSB7CisJCQluID0gbnNfc3ByaW50cnIoaGFuZGxlLCAmcnIsIE5VTEwsIE5VTEwsCisJCQkJCWJ1ZiwgKHVfaW50KWJ1Zmxlbik7CisJCQlpZiAobiA8IDApIHsKKwkJCQlpZiAoZXJybm8gPT0gRU5PU1BDKSB7CisJCQkJCWZyZWUoYnVmKTsKKwkJCQkJYnVmID0gTlVMTDsKKwkJCQkJaWYgKGJ1ZmxlbiA8IDEzMTA3MikKKwkJCQkJCWJ1ZiA9IG1hbGxvYygoc2l6ZV90KShidWZsZW4gKz0gMTAyNCkpOworCQkJCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCQkJCWZwcmludGYoZmlsZSwKKwkJCQkgICAgICAgICAgICAgICI7OyBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlXG4iKTsKKwkJCQkJICAgICAgcmV0dXJuOworCQkJCQl9CisJCQkJCWNvbnRpbnVlOworCQkJCX0KKwkJCQlmcHJpbnRmKGZpbGUsICI7OyBuc19zcHJpbnRycjogJXNcbiIsCisJCQkJCXN0cmVycm9yKGVycm5vKSk7CisJCQkJZ290byBjbGVhbnVwOworCQkJfQorCQkJZnB1dHMoYnVmLCBmaWxlKTsKKwkJCWZwdXRjKCdcbicsIGZpbGUpOworCQl9CisJCXJybnVtKys7CisJfQorIGNsZWFudXA6CisJaWYgKGJ1ZiAhPSBOVUxMKQorCQlmcmVlKGJ1Zik7Cit9CisKKy8qCisgKiBQcmludCB0aGUgY29udGVudHMgb2YgYSBxdWVyeS4KKyAqIFRoaXMgaXMgaW50ZW5kZWQgdG8gYmUgcHJpbWFyaWx5IGEgZGVidWdnaW5nIHJvdXRpbmUuCisgKi8KK3ZvaWQKK3Jlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCB1X2NoYXIgKm1zZywgaW50IGxlbiwgRklMRSAqZmlsZSkgeworCW5zX21zZyBoYW5kbGU7CisJaW50IHFkY291bnQsIGFuY291bnQsIG5zY291bnQsIGFyY291bnQ7CisJdV9pbnQgb3Bjb2RlLCByY29kZSwgaWQ7CisKKwlpZiAobnNfaW5pdHBhcnNlKG1zZywgbGVuLCAmaGFuZGxlKSA8IDApIHsKKwkJZnByaW50ZihmaWxlLCAiOzsgbnNfaW5pdHBhcnNlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJcmV0dXJuOworCX0KKwlvcGNvZGUgPSBuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2Zfb3Bjb2RlKTsKKwlyY29kZSA9IG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9yY29kZSk7CisJaWQgPSBuc19tc2dfaWQoaGFuZGxlKTsKKwlxZGNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19xZCk7CisJYW5jb3VudCA9IG5zX21zZ19jb3VudChoYW5kbGUsIG5zX3NfYW4pOworCW5zY291bnQgPSBuc19tc2dfY291bnQoaGFuZGxlLCBuc19zX25zKTsKKwlhcmNvdW50ID0gbnNfbXNnX2NvdW50KGhhbmRsZSwgbnNfc19hcik7CisKKwkvKgorCSAqIFByaW50IGhlYWRlciBmaWVsZHMuCisJICovCisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQURYKSB8fCByY29kZSkKKwkJZnByaW50ZihmaWxlLAorCQkJIjs7IC0+PkhFQURFUjw8LSBvcGNvZGU6ICVzLCBzdGF0dXM6ICVzLCBpZDogJWRcbiIsCisJCQlfcmVzX29wY29kZXNbb3Bjb2RlXSwgcF9yY29kZSgoaW50KXJjb2RlKSwgaWQpOworCWlmICgoIXN0YXRwLT5wZmNvZGUpIHx8IChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEWCkpCisJCXB1dGMoJzsnLCBmaWxlKTsKKwlpZiAoKCFzdGF0cC0+cGZjb2RlKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfSEVBRDIpKSB7CisJCWZwcmludGYoZmlsZSwgIjsgZmxhZ3M6Iik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfcXIpKQorCQkJZnByaW50ZihmaWxlLCAiIHFyIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfYWEpKQorCQkJZnByaW50ZihmaWxlLCAiIGFhIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfdGMpKQorCQkJZnByaW50ZihmaWxlLCAiIHRjIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfcmQpKQorCQkJZnByaW50ZihmaWxlLCAiIHJkIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfcmEpKQorCQkJZnByaW50ZihmaWxlLCAiIHJhIik7CisJCWlmIChuc19tc2dfZ2V0ZmxhZyhoYW5kbGUsIG5zX2ZfeikpCisJCQlmcHJpbnRmKGZpbGUsICIgPz8iKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9hZCkpCisJCQlmcHJpbnRmKGZpbGUsICIgYWQiKTsKKwkJaWYgKG5zX21zZ19nZXRmbGFnKGhhbmRsZSwgbnNfZl9jZCkpCisJCQlmcHJpbnRmKGZpbGUsICIgY2QiKTsKKwl9CisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX0hFQUQxKSkgeworCQlmcHJpbnRmKGZpbGUsICI7ICVzOiAlZCIsCisJCQlwX3NlY3Rpb24obnNfc19xZCwgKGludClvcGNvZGUpLCBxZGNvdW50KTsKKwkJZnByaW50ZihmaWxlLCAiLCAlczogJWQiLAorCQkJcF9zZWN0aW9uKG5zX3NfYW4sIChpbnQpb3Bjb2RlKSwgYW5jb3VudCk7CisJCWZwcmludGYoZmlsZSwgIiwgJXM6ICVkIiwKKwkJCXBfc2VjdGlvbihuc19zX25zLCAoaW50KW9wY29kZSksIG5zY291bnQpOworCQlmcHJpbnRmKGZpbGUsICIsICVzOiAlZCIsCisJCQlwX3NlY3Rpb24obnNfc19hciwgKGludClvcGNvZGUpLCBhcmNvdW50KTsKKwl9CisJaWYgKCghc3RhdHAtPnBmY29kZSkgfHwgKHN0YXRwLT5wZmNvZGUgJgorCQkoUkVTX1BSRl9IRUFEWCB8IFJFU19QUkZfSEVBRDIgfCBSRVNfUFJGX0hFQUQxKSkpIHsKKwkJcHV0YygnXG4nLGZpbGUpOworCX0KKwkvKgorCSAqIFByaW50IHRoZSB2YXJpb3VzIHNlY3Rpb25zLgorCSAqLworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfcWQsIFJFU19QUkZfUVVFUywgZmlsZSk7CisJZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19hbiwgUkVTX1BSRl9BTlMsIGZpbGUpOworCWRvX3NlY3Rpb24oc3RhdHAsICZoYW5kbGUsIG5zX3NfbnMsIFJFU19QUkZfQVVUSCwgZmlsZSk7CisJZG9fc2VjdGlvbihzdGF0cCwgJmhhbmRsZSwgbnNfc19hciwgUkVTX1BSRl9BREQsIGZpbGUpOworCWlmIChxZGNvdW50ID09IDAgJiYgYW5jb3VudCA9PSAwICYmCisJICAgIG5zY291bnQgPT0gMCAmJiBhcmNvdW50ID09IDApCisJCXB1dGMoJ1xuJywgZmlsZSk7Cit9CisKK2NvbnN0IHVfY2hhciAqCitwX2Nkbm5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIGludCBsZW4sIEZJTEUgKmZpbGUpIHsKKwljaGFyIG5hbWVbTUFYRE5BTUVdOworCWludCBuOworCisJaWYgKChuID0gZG5fZXhwYW5kKG1zZywgbXNnICsgbGVuLCBjcCwgbmFtZSwgc2l6ZW9mIG5hbWUpKSA8IDApCisJCXJldHVybiAoTlVMTCk7CisJaWYgKG5hbWVbMF0gPT0gJ1wwJykKKwkJcHV0YygnLicsIGZpbGUpOworCWVsc2UKKwkJZnB1dHMobmFtZSwgZmlsZSk7CisJcmV0dXJuIChjcCArIG4pOworfQorCitjb25zdCB1X2NoYXIgKgorcF9jZG5hbWUoY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICptc2csIEZJTEUgKmZpbGUpIHsKKwlyZXR1cm4gKHBfY2RubmFtZShjcCwgbXNnLCBQQUNLRVRTWiwgZmlsZSkpOworfQorCisvKiBSZXR1cm4gYSBmdWxseS1xdWFsaWZpZWQgZG9tYWluIG5hbWUgZnJvbSBhIGNvbXByZXNzZWQgbmFtZSAod2l0aAorICAgbGVuZ3RoIHN1cHBsaWVkKS4gICovCisKK2NvbnN0IHVfY2hhciAqCitwX2Zxbm5hbWUoY3AsIG1zZywgbXNnbGVuLCBuYW1lLCBuYW1lbGVuKQorCWNvbnN0IHVfY2hhciAqY3AsICptc2c7CisJaW50IG1zZ2xlbjsKKwljaGFyICpuYW1lOworCWludCBuYW1lbGVuOworeworCWludCBuLCBuZXdsZW47CisKKwlpZiAoKG4gPSBkbl9leHBhbmQobXNnLCBjcCArIG1zZ2xlbiwgY3AsIG5hbWUsIG5hbWVsZW4pKSA8IDApCisJCXJldHVybiAoTlVMTCk7CisJbmV3bGVuID0gc3RybGVuKG5hbWUpOworCWlmIChuZXdsZW4gPT0gMCB8fCBuYW1lW25ld2xlbiAtIDFdICE9ICcuJykgeworCQlpZiAobmV3bGVuICsgMSA+PSBuYW1lbGVuKQkvKiBMYWNrIHNwYWNlIGZvciBmaW5hbCBkb3QgKi8KKwkJCXJldHVybiAoTlVMTCk7CisJCWVsc2UKKwkJCXN0cmNweShuYW1lICsgbmV3bGVuLCAiLiIpOworCX0KKwlyZXR1cm4gKGNwICsgbik7Cit9CisKKy8qIFhYWDoJdGhlIHJlc3Qgb2YgdGhlc2UgZnVuY3Rpb25zIG5lZWQgdG8gYmVjb21lIGxlbmd0aC1saW1pdGVkLCB0b28uICovCisKK2NvbnN0IHVfY2hhciAqCitwX2ZxbmFtZShjb25zdCB1X2NoYXIgKmNwLCBjb25zdCB1X2NoYXIgKm1zZywgRklMRSAqZmlsZSkgeworCWNoYXIgbmFtZVtNQVhETkFNRV07CisJY29uc3QgdV9jaGFyICpuOworCisJbiA9IHBfZnFubmFtZShjcCwgbXNnLCBNQVhDRE5BTUUsIG5hbWUsIHNpemVvZiBuYW1lKTsKKwlpZiAobiA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWZwdXRzKG5hbWUsIGZpbGUpOworCXJldHVybiAobik7Cit9CisKKy8qCisgKiBOYW1lcyBvZiBSUiBjbGFzc2VzIGFuZCBxY2xhc3Nlcy4gIENsYXNzZXMgYW5kIHFjbGFzc2VzIGFyZSB0aGUgc2FtZSwgZXhjZXB0CisgKiB0aGF0IENfQU5ZIGlzIGEgcWNsYXNzIGJ1dCBub3QgYSBjbGFzcy4gIChZb3UgY2FuIGFzayBmb3IgcmVjb3JkcyBvZiBjbGFzcworICogQ19BTlksIGJ1dCB5b3UgY2FuJ3QgaGF2ZSBhbnkgcmVjb3JkcyBvZiB0aGF0IGNsYXNzIGluIHRoZSBkYXRhYmFzZS4pCisgKi8KK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW10gPSB7CisJe0NfSU4sCQkiSU4iLAkJKGNoYXIgKikwfSwKKwl7Q19DSEFPUywJIkNIIiwJCShjaGFyICopMH0sCisJe0NfQ0hBT1MsCSJDSEFPUyIsCShjaGFyICopMH0sCisJe0NfSFMsCQkiSFMiLAkJKGNoYXIgKikwfSwKKwl7Q19IUywJCSJIRVNJT0QiLAkoY2hhciAqKTB9LAorCXtDX0FOWSwJCSJBTlkiLAkJKGNoYXIgKikwfSwKKwl7Q19OT05FLAkiTk9ORSIsCQkoY2hhciAqKTB9LAorCXtDX0lOLCAJCShjaGFyICopMCwJKGNoYXIgKikwfQorfTsKKworLyoKKyAqIE5hbWVzIG9mIG1lc3NhZ2Ugc2VjdGlvbnMuCisgKi8KK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9kZWZhdWx0X3NlY3Rpb25fc3ltc1tdID0geworCXtuc19zX3FkLAkiUVVFUlkiLAkoY2hhciAqKTB9LAorCXtuc19zX2FuLAkiQU5TV0VSIiwJKGNoYXIgKikwfSwKKwl7bnNfc19ucywJIkFVVEhPUklUWSIsCShjaGFyICopMH0sCisJe25zX3NfYXIsCSJBRERJVElPTkFMIiwJKGNoYXIgKikwfSwKKwl7MCwgICAgICAgICAgICAgKGNoYXIgKikwLAkoY2hhciAqKTB9Cit9OworCitjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3BfdXBkYXRlX3NlY3Rpb25fc3ltc1tdID0geworCXtTX1pPTkUsCSJaT05FIiwJCShjaGFyICopMH0sCisJe1NfUFJFUkVRLAkiUFJFUkVRVUlTSVRFIiwJKGNoYXIgKikwfSwKKwl7U19VUERBVEUsCSJVUERBVEUiLAkoY2hhciAqKTB9LAorCXtTX0FERFQsCSJBRERJVElPTkFMIiwJKGNoYXIgKikwfSwKKwl7MCwgICAgICAgICAgICAgKGNoYXIgKikwLAkoY2hhciAqKTB9Cit9OworCitjb25zdCBzdHJ1Y3QgcmVzX3N5bSBfX3Bfa2V5X3N5bXNbXSA9IHsKKwl7TlNfQUxHX01ENVJTQSwJCSJSU0EiLAkJIlJTQSBLRVkgd2l0aCBNRDUgaGFzaCJ9LAorCXtOU19BTEdfREgsCQkiREgiLAkJIkRpZmZpZSBIZWxsbWFuIn0sCisJe05TX0FMR19EU0EsCQkiRFNBIiwJCSJEaWdpdGFsIFNpZ25hdHVyZSBBbGdvcml0aG0ifSwKKwl7TlNfQUxHX0VYUElSRV9PTkxZLAkiRVhQSVJFT05MWSIsCSJObyBhbGdvcml0aG0ifSwKKwl7TlNfQUxHX1BSSVZBVEVfT0lELAkiUFJJVkFURSIsCSJBbGdvcml0aG0gb2J0YWluZWQgZnJvbSBPSUQifSwKKwl7MCwJCQlOVUxMLAkJTlVMTH0KK307CisKK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jZXJ0X3N5bXNbXSA9IHsKKwl7Y2VydF90X3BraXgsCSJQS0lYIiwJCSJQS0lYIChYLjUwOXYzKSBDZXJ0aWZpY2F0ZSJ9LAorCXtjZXJ0X3Rfc3BraSwJIlNQS0kiLAkJIlNQS0kgY2VydGlmaWNhdGUifSwKKwl7Y2VydF90X3BncCwJIlBHUCIsCQkiUEdQIGNlcnRpZmljYXRlIn0sCisJe2NlcnRfdF91cmwsCSJVUkwiLAkJIlVSTCBQcml2YXRlIn0sCisJe2NlcnRfdF9vaWQsCSJPSUQiLAkJIk9JRCBQcml2YXRlIn0sCisJezAsCQlOVUxMLAkJTlVMTH0KK307CisKKy8qCisgKiBOYW1lcyBvZiBSUiB0eXBlcyBhbmQgcXR5cGVzLiAgVHlwZXMgYW5kIHF0eXBlcyBhcmUgdGhlIHNhbWUsIGV4Y2VwdAorICogdGhhdCBUX0FOWSBpcyBhIHF0eXBlIGJ1dCBub3QgYSB0eXBlLiAgKFlvdSBjYW4gYXNrIGZvciByZWNvcmRzIG9mIHR5cGUKKyAqIFRfQU5ZLCBidXQgeW91IGNhbid0IGhhdmUgYW55IHJlY29yZHMgb2YgdGhhdCB0eXBlIGluIHRoZSBkYXRhYmFzZS4pCisgKi8KK2NvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF90eXBlX3N5bXNbXSA9IHsKKwl7bnNfdF9hLAkiQSIsCQkiYWRkcmVzcyJ9LAorCXtuc190X25zLAkiTlMiLAkJIm5hbWUgc2VydmVyIn0sCisJe25zX3RfbWQsCSJNRCIsCQkibWFpbCBkZXN0aW5hdGlvbiAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9tZiwJIk1GIiwJCSJtYWlsIGZvcndhcmRlciAoZGVwcmVjYXRlZCkifSwKKwl7bnNfdF9jbmFtZSwJIkNOQU1FIiwJImNhbm9uaWNhbCBuYW1lIn0sCisJe25zX3Rfc29hLAkiU09BIiwJCSJzdGFydCBvZiBhdXRob3JpdHkifSwKKwl7bnNfdF9tYiwJIk1CIiwJCSJtYWlsYm94In0sCisJe25zX3RfbWcsCSJNRyIsCQkibWFpbCBncm91cCBtZW1iZXIifSwKKwl7bnNfdF9tciwJIk1SIiwJCSJtYWlsIHJlbmFtZSJ9LAorCXtuc190X251bGwsCSJOVUxMIiwJCSJudWxsIn0sCisJe25zX3Rfd2tzLAkiV0tTIiwJCSJ3ZWxsLWtub3duIHNlcnZpY2UgKGRlcHJlY2F0ZWQpIn0sCisJe25zX3RfcHRyLAkiUFRSIiwJCSJkb21haW4gbmFtZSBwb2ludGVyIn0sCisJe25zX3RfaGluZm8sCSJISU5GTyIsCSJob3N0IGluZm9ybWF0aW9uIn0sCisJe25zX3RfbWluZm8sCSJNSU5GTyIsCSJtYWlsYm94IGluZm9ybWF0aW9uIn0sCisJe25zX3RfbXgsCSJNWCIsCQkibWFpbCBleGNoYW5nZXIifSwKKwl7bnNfdF90eHQsCSJUWFQiLAkJInRleHQifSwKKwl7bnNfdF9ycCwJIlJQIiwJCSJyZXNwb25zaWJsZSBwZXJzb24ifSwKKwl7bnNfdF9hZnNkYiwJIkFGU0RCIiwJIkRDRSBvciBBRlMgc2VydmVyIn0sCisJe25zX3RfeDI1LAkiWDI1IiwJCSJYMjUgYWRkcmVzcyJ9LAorCXtuc190X2lzZG4sCSJJU0ROIiwJCSJJU0ROIGFkZHJlc3MifSwKKwl7bnNfdF9ydCwJIlJUIiwJCSJyb3V0ZXIifSwKKwl7bnNfdF9uc2FwLAkiTlNBUCIsCQkibnNhcCBhZGRyZXNzIn0sCisJe25zX3RfbnNhcF9wdHIsCSJOU0FQX1BUUiIsCSJkb21haW4gbmFtZSBwb2ludGVyIn0sCisJe25zX3Rfc2lnLAkiU0lHIiwJCSJzaWduYXR1cmUifSwKKwl7bnNfdF9rZXksCSJLRVkiLAkJImtleSJ9LAorCXtuc190X3B4LAkiUFgiLAkJIm1hcHBpbmcgaW5mb3JtYXRpb24ifSwKKwl7bnNfdF9ncG9zLAkiR1BPUyIsCQkiZ2VvZ3JhcGhpY2FsIHBvc2l0aW9uICh3aXRoZHJhd24pIn0sCisJe25zX3RfYWFhYSwJIkFBQUEiLAkJIklQdjYgYWRkcmVzcyJ9LAorCXtuc190X2xvYywJIkxPQyIsCQkibG9jYXRpb24ifSwKKwl7bnNfdF9ueHQsCSJOWFQiLAkJIm5leHQgdmFsaWQgbmFtZSAodW5pbXBsZW1lbnRlZCkifSwKKwl7bnNfdF9laWQsCSJFSUQiLAkJImVuZHBvaW50IGlkZW50aWZpZXIgKHVuaW1wbGVtZW50ZWQpIn0sCisJe25zX3RfbmltbG9jLAkiTklNTE9DIiwJIk5JTVJPRCBsb2NhdG9yICh1bmltcGxlbWVudGVkKSJ9LAorCXtuc190X3NydiwJIlNSViIsCQkic2VydmVyIHNlbGVjdGlvbiJ9LAorCXtuc190X2F0bWEsCSJBVE1BIiwJCSJBVE0gYWRkcmVzcyAodW5pbXBsZW1lbnRlZCkifSwKKwl7bnNfdF90a2V5LAkiVEtFWSIsCQkidGtleSJ9LAorCXtuc190X3RzaWcsCSJUU0lHIiwJCSJ0cmFuc2FjdGlvbiBzaWduYXR1cmUifSwKKwl7bnNfdF9peGZyLAkiSVhGUiIsCQkiaW5jcmVtZW50YWwgem9uZSB0cmFuc2ZlciJ9LAorCXtuc190X2F4ZnIsCSJBWEZSIiwJCSJ6b25lIHRyYW5zZmVyIn0sCisJe25zX3RfenhmciwJIlpYRlIiLAkJImNvbXByZXNzZWQgem9uZSB0cmFuc2ZlciJ9LAorCXtuc190X21haWxiLAkiTUFJTEIiLAkibWFpbGJveC1yZWxhdGVkIGRhdGEgKGRlcHJlY2F0ZWQpIn0sCisJe25zX3RfbWFpbGEsCSJNQUlMQSIsCSJtYWlsIGFnZW50IChkZXByZWNhdGVkKSJ9LAorCXtuc190X25hcHRyLAkiTkFQVFIiLAkiVVJOIE5hbWluZyBBdXRob3JpdHkifSwKKwl7bnNfdF9reCwJIktYIiwJCSJLZXkgRXhjaGFuZ2UifSwKKwl7bnNfdF9jZXJ0LAkiQ0VSVCIsCQkiQ2VydGlmaWNhdGUifSwKKwl7bnNfdF9hNiwJIkE2IiwJCSJJUHY2IEFkZHJlc3MifSwKKwl7bnNfdF9kbmFtZSwJIkROQU1FIiwJImRuYW1lIn0sCisJe25zX3Rfc2luaywJIlNJTksiLAkJIktpdGNoZW4gU2luayAoZXhwZXJpbWVudGFsKSJ9LAorCXtuc190X29wdCwJIk9QVCIsCQkiRUROUyBPcHRpb25zIn0sCisJe25zX3RfYW55LAkiQU5ZIiwJCSJcImFueVwiIn0sCisJezAsIAkJTlVMTCwJCU5VTEx9Cit9OworCisvKgorICogTmFtZXMgb2YgRE5TIHJjb2Rlcy4KKyAqLworY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3Jjb2RlX3N5bXNbXSA9IHsKKwl7bnNfcl9ub2Vycm9yLAkiTk9FUlJPUiIsCQkibm8gZXJyb3IifSwKKwl7bnNfcl9mb3JtZXJyLAkiRk9STUVSUiIsCQkiZm9ybWF0IGVycm9yIn0sCisJe25zX3Jfc2VydmZhaWwsCSJTRVJWRkFJTCIsCQkic2VydmVyIGZhaWxlZCJ9LAorCXtuc19yX254ZG9tYWluLAkiTlhET01BSU4iLAkJIm5vIHN1Y2ggZG9tYWluIG5hbWUifSwKKwl7bnNfcl9ub3RpbXBsLAkiTk9USU1QIiwJCSJub3QgaW1wbGVtZW50ZWQifSwKKwl7bnNfcl9yZWZ1c2VkLAkiUkVGVVNFRCIsCQkicmVmdXNlZCJ9LAorCXtuc19yX3l4ZG9tYWluLAkiWVhET01BSU4iLAkJImRvbWFpbiBuYW1lIGV4aXN0cyJ9LAorCXtuc19yX3l4cnJzZXQsCSJZWFJSU0VUIiwJCSJycnNldCBleGlzdHMifSwKKwl7bnNfcl9ueHJyc2V0LAkiTlhSUlNFVCIsCQkicnJzZXQgZG9lc24ndCBleGlzdCJ9LAorCXtuc19yX25vdGF1dGgsCSJOT1RBVVRIIiwJCSJub3QgYXV0aG9yaXRhdGl2ZSJ9LAorCXtuc19yX25vdHpvbmUsCSJOT1RaT05FIiwJCSJOb3QgaW4gem9uZSJ9LAorCXtuc19yX21heCwJIiIsCQkJIiJ9LAorCXtuc19yX2JhZHNpZywJIkJBRFNJRyIsCQkiYmFkIHNpZ25hdHVyZSJ9LAorCXtuc19yX2JhZGtleSwJIkJBREtFWSIsCQkiYmFkIGtleSJ9LAorCXtuc19yX2JhZHRpbWUsCSJCQURUSU1FIiwJCSJiYWQgdGltZSJ9LAorCXswLCAJCU5VTEwsCQkJTlVMTH0KK307CisKK2ludAorc3ltX3N0b24oY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bXMsIGNvbnN0IGNoYXIgKm5hbWUsIGludCAqc3VjY2VzcykgeworCWZvciAoOyBzeW1zLT5uYW1lICE9IDA7IHN5bXMrKykgeworCQlpZiAoc3RyY2FzZWNtcCAobmFtZSwgc3ltcy0+bmFtZSkgPT0gMCkgeworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJKnN1Y2Nlc3MgPSAxOworCQkJcmV0dXJuIChzeW1zLT5udW1iZXIpOworCQl9CisJfQorCWlmIChzdWNjZXNzKQorCQkqc3VjY2VzcyA9IDA7CisJcmV0dXJuIChzeW1zLT5udW1iZXIpOwkJLyogVGhlIGRlZmF1bHQgdmFsdWUuICovCit9CisKK2NvbnN0IGNoYXIgKgorc3ltX250b3MoY29uc3Qgc3RydWN0IHJlc19zeW0gKnN5bXMsIGludCBudW1iZXIsIGludCAqc3VjY2VzcykgeworCXN0YXRpYyBjaGFyIHVubmFtZVsyMF07CisKKwlmb3IgKDsgc3ltcy0+bmFtZSAhPSAwOyBzeW1zKyspIHsKKwkJaWYgKG51bWJlciA9PSBzeW1zLT5udW1iZXIpIHsKKwkJCWlmIChzdWNjZXNzKQorCQkJCSpzdWNjZXNzID0gMTsKKwkJCXJldHVybiAoc3ltcy0+bmFtZSk7CisJCX0KKwl9CisKKwlzcHJpbnRmKHVubmFtZSwgIiVkIiwgbnVtYmVyKTsJCS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwlpZiAoc3VjY2VzcykKKwkJKnN1Y2Nlc3MgPSAwOworCXJldHVybiAodW5uYW1lKTsKK30KKworY29uc3QgY2hhciAqCitzeW1fbnRvcChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqc3ltcywgaW50IG51bWJlciwgaW50ICpzdWNjZXNzKSB7CisJc3RhdGljIGNoYXIgdW5uYW1lWzIwXTsKKworCWZvciAoOyBzeW1zLT5uYW1lICE9IDA7IHN5bXMrKykgeworCQlpZiAobnVtYmVyID09IHN5bXMtPm51bWJlcikgeworCQkJaWYgKHN1Y2Nlc3MpCisJCQkJKnN1Y2Nlc3MgPSAxOworCQkJcmV0dXJuIChzeW1zLT5odW1hbm5hbWUpOworCQl9CisJfQorCXNwcmludGYodW5uYW1lLCAiJWQiLCBudW1iZXIpOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLworCWlmIChzdWNjZXNzKQorCQkqc3VjY2VzcyA9IDA7CisJcmV0dXJuICh1bm5hbWUpOworfQorCisvKgorICogUmV0dXJuIGEgc3RyaW5nIGZvciB0aGUgdHlwZS4KKyAqLworY29uc3QgY2hhciAqCitwX3R5cGUoaW50IHR5cGUpIHsKKwlpbnQgc3VjY2VzczsKKwljb25zdCBjaGFyICpyZXN1bHQ7CisJc3RhdGljIGNoYXIgdHlwZWJ1ZlsyMF07CisKKwlyZXN1bHQgPSBzeW1fbnRvcyhfX3BfdHlwZV9zeW1zLCB0eXBlLCAmc3VjY2Vzcyk7CisJaWYgKHN1Y2Nlc3MpCisJCXJldHVybiAocmVzdWx0KTsKKwlpZiAodHlwZSA8IDAgfHwgdHlwZSA+IDB4ZmZmZikKKwkJcmV0dXJuICgiQkFEVFlQRSIpOworCXNwcmludGYodHlwZWJ1ZiwgIlRZUEUlZCIsIHR5cGUpOworCXJldHVybiAodHlwZWJ1Zik7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgZm9yIHRoZSB0eXBlLgorICovCitjb25zdCBjaGFyICoKK3Bfc2VjdGlvbihpbnQgc2VjdGlvbiwgaW50IG9wY29kZSkgeworCWNvbnN0IHN0cnVjdCByZXNfc3ltICpzeW1ib2xzOworCisJc3dpdGNoIChvcGNvZGUpIHsKKwljYXNlIG5zX29fdXBkYXRlOgorCQlzeW1ib2xzID0gX19wX3VwZGF0ZV9zZWN0aW9uX3N5bXM7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXN5bWJvbHMgPSBfX3BfZGVmYXVsdF9zZWN0aW9uX3N5bXM7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gKHN5bV9udG9zKHN5bWJvbHMsIHNlY3Rpb24sIChpbnQgKikwKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBtbmVtb25pYyBmb3IgY2xhc3MuCisgKi8KK2NvbnN0IGNoYXIgKgorcF9jbGFzcyhpbnQgY2xhc3MpIHsKKwlpbnQgc3VjY2VzczsKKwljb25zdCBjaGFyICpyZXN1bHQ7CisJc3RhdGljIGNoYXIgY2xhc3NidWZbMjBdOworCisJcmVzdWx0ID0gc3ltX250b3MoX19wX2NsYXNzX3N5bXMsIGNsYXNzLCAmc3VjY2Vzcyk7CisJaWYgKHN1Y2Nlc3MpCisJCXJldHVybiAocmVzdWx0KTsKKwlpZiAoY2xhc3MgPCAwIHx8IGNsYXNzID4gMHhmZmZmKQorCQlyZXR1cm4gKCJCQURDTEFTUyIpOworCXNwcmludGYoY2xhc3NidWYsICJDTEFTUyVkIiwgY2xhc3MpOworCXJldHVybiAoY2xhc3NidWYpOworfQorCisvKgorICogUmV0dXJuIGEgbW5lbW9uaWMgZm9yIGFuIG9wdGlvbgorICovCitjb25zdCBjaGFyICoKK3Bfb3B0aW9uKHVfbG9uZyBvcHRpb24pIHsKKwlzdGF0aWMgY2hhciBuYnVmWzQwXTsKKworCXN3aXRjaCAob3B0aW9uKSB7CisJY2FzZSBSRVNfSU5JVDoJCXJldHVybiAiaW5pdCI7CisJY2FzZSBSRVNfREVCVUc6CQlyZXR1cm4gImRlYnVnIjsKKwljYXNlIFJFU19BQU9OTFk6CXJldHVybiAiYWFvbmx5KHVuaW1wbCkiOworCWNhc2UgUkVTX1VTRVZDOgkJcmV0dXJuICJ1c2V2YyI7CisJY2FzZSBSRVNfUFJJTUFSWToJcmV0dXJuICJwcmltcnkodW5pbXBsKSI7CisJY2FzZSBSRVNfSUdOVEM6CQlyZXR1cm4gImlnbnRjIjsKKwljYXNlIFJFU19SRUNVUlNFOglyZXR1cm4gInJlY3VycyI7CisJY2FzZSBSRVNfREVGTkFNRVM6CXJldHVybiAiZGVmbmFtIjsKKwljYXNlIFJFU19TVEFZT1BFTjoJcmV0dXJuICJzdHlvcG4iOworCWNhc2UgUkVTX0ROU1JDSDoJcmV0dXJuICJkbnNyY2giOworCWNhc2UgUkVTX0lOU0VDVVJFMToJcmV0dXJuICJpbnNlY3VyZTEiOworCWNhc2UgUkVTX0lOU0VDVVJFMjoJcmV0dXJuICJpbnNlY3VyZTIiOworCWNhc2UgUkVTX05PQUxJQVNFUzoJcmV0dXJuICJub2FsaWFzZXMiOworCWNhc2UgUkVTX1VTRV9JTkVUNjoJcmV0dXJuICJpbmV0NiI7CisjaWZkZWYgUkVTX1VTRV9FRE5TMAkvKiBLQU1FIGV4dGVuc2lvbiAqLworCWNhc2UgUkVTX1VTRV9FRE5TMDoJcmV0dXJuICJlZG5zMCI7CisjZW5kaWYKKyNpZmRlZiBSRVNfVVNFX0ROQU1FCisJY2FzZSBSRVNfVVNFX0ROQU1FOglyZXR1cm4gImRuYW1lIjsKKyNlbmRpZgorI2lmZGVmIFJFU19VU0VfRE5TU0VDCisJY2FzZSBSRVNfVVNFX0ROU1NFQzoJcmV0dXJuICJkbnNzZWMiOworI2VuZGlmCisjaWZkZWYgUkVTX05PVExEUVVFUlkKKwljYXNlIFJFU19OT1RMRFFVRVJZOglyZXR1cm4gIm5vLXRsZC1xdWVyeSI7CisjZW5kaWYKKyNpZmRlZiBSRVNfTk9fTklCQkxFMgorCWNhc2UgUkVTX05PX05JQkJMRTI6CXJldHVybiAibm8tbmliYmxlMiI7CisjZW5kaWYKKwkJCQkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJZGVmYXVsdDoJCXNwcmludGYobmJ1ZiwgIj8weCVseD8iLCAodV9sb25nKW9wdGlvbik7CisJCQkJcmV0dXJuIChuYnVmKTsKKwl9Cit9CisKKy8qCisgKiBSZXR1cm4gYSBtbmVtb25pYyBmb3IgYSB0aW1lIHRvIGxpdmUuCisgKi8KK2NvbnN0IGNoYXIgKgorcF90aW1lKHVfaW50MzJfdCB2YWx1ZSkgeworCXN0YXRpYyBjaGFyIG5idWZbNDBdOwkJLyogWFhYIG5vbnJlZW50cmFudCAqLworCisJaWYgKG5zX2Zvcm1hdF90dGwoKHVfbG9uZyl2YWx1ZSwgbmJ1Ziwgc2l6ZW9mIG5idWYpIDwgMCkKKwkJc3ByaW50ZihuYnVmLCAiJXUiLCB2YWx1ZSk7CisJcmV0dXJuIChuYnVmKTsKK30KKworLyoKKyAqIFJldHVybiBhIHN0cmluZyBmb3IgdGhlIHJjb2RlLgorICovCitjb25zdCBjaGFyICoKK3BfcmNvZGUoaW50IHJjb2RlKSB7CisJcmV0dXJuIChzeW1fbnRvcyhfX3BfcmNvZGVfc3ltcywgcmNvZGUsIChpbnQgKikwKSk7Cit9CisKKy8qCisgKiBSZXR1cm4gYSBzdHJpbmcgZm9yIGEgcmVzX3NvY2thZGRyX3VuaW9uLgorICovCitjb25zdCBjaGFyICoKK3Bfc29ja3VuKHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiB1LCBjaGFyICpidWYsIHNpemVfdCBzaXplKSB7CisJY2hhciByZXRbc2l6ZW9mICJmZmZmOmZmZmY6ZmZmZjpmZmZmOmZmZmY6ZmZmZjoxMjMuMTIzLjEyMy4xMjMiXTsKKworCXN3aXRjaCAodS5zaW4uc2luX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaW5ldF9udG9wKEFGX0lORVQsICZ1LnNpbi5zaW5fYWRkciwgcmV0LCBzaXplb2YgcmV0KTsKKwkJYnJlYWs7CisjaWZkZWYgSEFTX0lORVQ2X1NUUlVDVFMKKwljYXNlIEFGX0lORVQ2OgorCQlpbmV0X250b3AoQUZfSU5FVDYsICZ1LnNpbjYuc2luNl9hZGRyLCByZXQsIHNpemVvZiByZXQpOworCQlicmVhazsKKyNlbmRpZgorCWRlZmF1bHQ6CisJCXNwcmludGYocmV0LCAiW2FmJWRdIiwgdS5zaW4uc2luX2ZhbWlseSk7CisJCWJyZWFrOworCX0KKwlpZiAoc2l6ZSA+IDBVKSB7CisJCXN0cm5jcHkoYnVmLCByZXQsIHNpemUgLSAxKTsKKwkJYnVmW3NpemUgLSAxXSA9ICcwJzsKKwl9CisJcmV0dXJuIChidWYpOworfQorCisvKgorICogcm91dGluZXMgdG8gY29udmVydCBiZXR3ZWVuIG9uLXRoZS13aXJlIFJSIGZvcm1hdCBhbmQgem9uZSBmaWxlIGZvcm1hdC4KKyAqIERvZXMgbm90IGNvbnRhaW4gY29udmVyc2lvbiB0by9mcm9tIGRlY2ltYWwgZGVncmVlczsgZGl2aWRlIG9yIG11bHRpcGx5CisgKiBieSA2MCo2MCoxMDAwIGZvciB0aGF0LgorICovCisKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgcG93ZXJvZnRlblsxMF0gPSB7MSwgMTAsIDEwMCwgMTAwMCwgMTAwMDAsIDEwMDAwMCwKKwkJCQkgICAgICAxMDAwMDAwLDEwMDAwMDAwLDEwMDAwMDAwMCwxMDAwMDAwMDAwfTsKKworLyogdGFrZXMgYW4gWGVZIHByZWNpc2lvbi9zaXplIHZhbHVlLCByZXR1cm5zIGEgc3RyaW5nIHJlcHJlc2VudGF0aW9uLiAqLworc3RhdGljIGNvbnN0IGNoYXIgKgorcHJlY3NpemVfbnRvYShwcmVjKQorCXVfaW50MzJfdCBwcmVjOworeworCXN0YXRpYyBjaGFyIHJldGJ1ZltzaXplb2YgIjkwMDAwMDAwLjAwIl07CS8qIFhYWCBub25yZWVudHJhbnQgKi8KKwl1bnNpZ25lZCBsb25nIHZhbDsKKwlpbnQgbWFudGlzc2EsIGV4cG9uZW50OworCisJbWFudGlzc2EgPSAoaW50KSgocHJlYyA+PiA0KSAmIDB4MGYpICUgMTA7CisJZXhwb25lbnQgPSAoaW50KSgocHJlYyA+PiAwKSAmIDB4MGYpICUgMTA7CisKKwl2YWwgPSBtYW50aXNzYSAqIHBvd2Vyb2Z0ZW5bZXhwb25lbnRdOworCisJKHZvaWQpIHNwcmludGYocmV0YnVmLCAiJWx1LiUuMmx1IiwgdmFsLzEwMCwgdmFsJTEwMCk7CisJcmV0dXJuIChyZXRidWYpOworfQorCisvKiBjb252ZXJ0cyBhc2NpaSBzaXplL3ByZWNpc2lvbiBYICogMTAqKlkoY20pIHRvIDB4WFkuICBtb3ZlcyBwb2ludGVyLiAqLworc3RhdGljIHVfaW50OF90CitwcmVjc2l6ZV9hdG9uKGNvbnN0IGNoYXIgKipzdHJwdHIpIHsKKwl1bnNpZ25lZCBpbnQgbXZhbCA9IDAsIGNtdmFsID0gMDsKKwl1X2ludDhfdCByZXR2YWwgPSAwOworCWNvbnN0IGNoYXIgKmNwOworCWludCBleHBvbmVudDsKKwlpbnQgbWFudGlzc2E7CisKKwljcCA9ICpzdHJwdHI7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQltdmFsID0gbXZhbCAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCWlmICgqY3AgPT0gJy4nKSB7CQkvKiBjZW50aW1ldGVycyAqLworCQljcCsrOworCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQljbXZhbCA9ICgqY3ArKyAtICcwJykgKiAxMDsKKwkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCQljbXZhbCArPSAoKmNwKysgLSAnMCcpOworCQkJfQorCQl9CisJfQorCWNtdmFsID0gKG12YWwgKiAxMDApICsgY212YWw7CisKKwlmb3IgKGV4cG9uZW50ID0gMDsgZXhwb25lbnQgPCA5OyBleHBvbmVudCsrKQorCQlpZiAoY212YWwgPCBwb3dlcm9mdGVuW2V4cG9uZW50KzFdKQorCQkJYnJlYWs7CisKKwltYW50aXNzYSA9IGNtdmFsIC8gcG93ZXJvZnRlbltleHBvbmVudF07CisJaWYgKG1hbnRpc3NhID4gOSkKKwkJbWFudGlzc2EgPSA5OworCisJcmV0dmFsID0gKG1hbnRpc3NhIDw8IDQpIHwgZXhwb25lbnQ7CisKKwkqc3RycHRyID0gY3A7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKKy8qIGNvbnZlcnRzIGFzY2lpIGxhdC9sb24gdG8gdW5zaWduZWQgZW5jb2RlZCAzMi1iaXQgbnVtYmVyLiAgbW92ZXMgcG9pbnRlci4gKi8KK3N0YXRpYyB1X2ludDMyX3QKK2xhdGxvbjJ1bChjb25zdCBjaGFyICoqbGF0bG9uc3RycHRyLCBpbnQgKndoaWNoKSB7CisJY29uc3QgY2hhciAqY3A7CisJdV9pbnQzMl90IHJldHZhbDsKKwlpbnQgZGVnID0gMCwgbWluID0gMCwgc2VjcyA9IDAsIHNlY3NmcmFjID0gMDsKKworCWNwID0gKmxhdGxvbnN0cnB0cjsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWRlZyA9IGRlZyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCXdoaWxlIChpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWNwKys7CisKKwlpZiAoIShpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpKQorCQlnb3RvIGZuZGhlbWk7CisKKwl3aGlsZSAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKQorCQltaW4gPSBtaW4gKiAxMCArICgqY3ArKyAtICcwJyk7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQorCQljcCsrOworCisJaWYgKCEoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSkKKwkJZ290byBmbmRoZW1pOworCisJd2hpbGUgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJc2VjcyA9IHNlY3MgKiAxMCArICgqY3ArKyAtICcwJyk7CisKKwlpZiAoKmNwID09ICcuJykgewkJLyogZGVjaW1hbCBzZWNvbmRzICovCisJCWNwKys7CisJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCXNlY3NmcmFjID0gKCpjcCsrIC0gJzAnKSAqIDEwMDsKKwkJCWlmIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpIHsKKwkJCQlzZWNzZnJhYyArPSAoKmNwKysgLSAnMCcpICogMTA7CisJCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCQlzZWNzZnJhYyArPSAoKmNwKysgLSAnMCcpOworCQkJCX0KKwkJCX0KKwkJfQorCX0KKworCXdoaWxlICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQkvKiBpZiBhbnkgdHJhaWxpbmcgZ2FyYmFnZSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJY3ArKzsKKworIGZuZGhlbWk6CisJc3dpdGNoICgqY3ApIHsKKwljYXNlICdOJzogY2FzZSAnbic6CisJY2FzZSAnRSc6IGNhc2UgJ2UnOgorCQlyZXR2YWwgPSAoKHVuc2lnbmVkKTE8PDMxKQorCQkJKyAoKCgoKGRlZyAqIDYwKSArIG1pbikgKiA2MCkgKyBzZWNzKSAqIDEwMDApCisJCQkrIHNlY3NmcmFjOworCQlicmVhazsKKwljYXNlICdTJzogY2FzZSAncyc6CisJY2FzZSAnVyc6IGNhc2UgJ3cnOgorCQlyZXR2YWwgPSAoKHVuc2lnbmVkKTE8PDMxKQorCQkJLSAoKCgoKGRlZyAqIDYwKSArIG1pbikgKiA2MCkgKyBzZWNzKSAqIDEwMDApCisJCQktIHNlY3NmcmFjOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR2YWwgPSAwOwkvKiBpbnZhbGlkIHZhbHVlIC0tIGluZGljYXRlcyBlcnJvciAqLworCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKCpjcCkgeworCWNhc2UgJ04nOiBjYXNlICduJzoKKwljYXNlICdTJzogY2FzZSAncyc6CisJCSp3aGljaCA9IDE7CS8qIGxhdGl0dWRlICovCisJCWJyZWFrOworCWNhc2UgJ0UnOiBjYXNlICdlJzoKKwljYXNlICdXJzogY2FzZSAndyc6CisJCSp3aGljaCA9IDI7CS8qIGxvbmdpdHVkZSAqLworCQlicmVhazsKKwlkZWZhdWx0OgorCQkqd2hpY2ggPSAwOwkvKiBlcnJvciAqLworCQlicmVhazsKKwl9CisKKwljcCsrOwkJCS8qIHNraXAgdGhlIGhlbWlzcGhlcmUgKi8KKworCXdoaWxlICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApKQkvKiBpZiBhbnkgdHJhaWxpbmcgZ2FyYmFnZSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkJLyogbW92ZSB0byBuZXh0IGZpZWxkICovCisJCWNwKys7CisKKwkqbGF0bG9uc3RycHRyID0gY3A7CisKKwlyZXR1cm4gKHJldHZhbCk7Cit9CisKKy8qIGNvbnZlcnRzIGEgem9uZSBmaWxlIHJlcHJlc2VudGF0aW9uIGluIGEgc3RyaW5nIHRvIGFuIFJEQVRBIG9uLXRoZS13aXJlCisgKiByZXByZXNlbnRhdGlvbi4gKi8KK2ludAorbG9jX2F0b24oYXNjaWksIGJpbmFyeSkKKwljb25zdCBjaGFyICphc2NpaTsKKwl1X2NoYXIgKmJpbmFyeTsKK3sKKwljb25zdCBjaGFyICpjcCwgKm1heGNwOworCXVfY2hhciAqYmNwOworCisJdV9pbnQzMl90IGxhdGl0ID0gMCwgbG9uZ2l0ID0gMCwgYWx0ID0gMDsKKwl1X2ludDMyX3QgbGx0ZW1wMSA9IDAsIGxsdGVtcDIgPSAwOworCWludCBhbHRtZXRlcnMgPSAwLCBhbHRmcmFjID0gMCwgYWx0c2lnbiA9IDE7CisJdV9pbnQ4X3QgaHAgPSAweDE2OwkvKiBkZWZhdWx0ID0gMWU2IGNtID0gMTAwMDAuMDBtID0gMTBrbSAqLworCXVfaW50OF90IHZwID0gMHgxMzsJLyogZGVmYXVsdCA9IDFlMyBjbSA9IDEwLjAwbSAqLworCXVfaW50OF90IHNpeiA9IDB4MTI7CS8qIGRlZmF1bHQgPSAxZTIgY20gPSAxLjAwbSAqLworCWludCB3aGljaDEgPSAwLCB3aGljaDIgPSAwOworCisJY3AgPSBhc2NpaTsKKwltYXhjcCA9IGNwICsgc3RybGVuKGFzY2lpKTsKKworCWxsdGVtcDEgPSBsYXRsb24ydWwoJmNwLCAmd2hpY2gxKTsKKworCWxsdGVtcDIgPSBsYXRsb24ydWwoJmNwLCAmd2hpY2gyKTsKKworCXN3aXRjaCAod2hpY2gxICsgd2hpY2gyKSB7CisJY2FzZSAzOgkJCS8qIDEgKyAyLCB0aGUgb25seSB2YWxpZCBjb21iaW5hdGlvbiAqLworCQlpZiAoKHdoaWNoMSA9PSAxKSAmJiAod2hpY2gyID09IDIpKSB7IC8qIG5vcm1hbCBjYXNlICovCisJCQlsYXRpdCA9IGxsdGVtcDE7CisJCQlsb25naXQgPSBsbHRlbXAyOworCQl9IGVsc2UgaWYgKCh3aGljaDEgPT0gMikgJiYgKHdoaWNoMiA9PSAxKSkgeyAvKiByZXZlcnNlZCAqLworCQkJbG9uZ2l0ID0gbGx0ZW1wMTsKKwkJCWxhdGl0ID0gbGx0ZW1wMjsKKwkJfSBlbHNlIHsJLyogc29tZSBraW5kIG9mIGJyb2tlbm5lc3MgKi8KKwkJCXJldHVybiAoMCk7CisJCX0KKwkJYnJlYWs7CisJZGVmYXVsdDoJCS8qIHdlIGRpZG4ndCBnZXQgb25lIG9mIGVhY2ggKi8KKwkJcmV0dXJuICgwKTsKKwl9CisKKwkvKiBhbHRpdHVkZSAqLworCWlmICgqY3AgPT0gJy0nKSB7CisJCWFsdHNpZ24gPSAtMTsKKwkJY3ArKzsKKwl9CisKKwlpZiAoKmNwID09ICcrJykKKwkJY3ArKzsKKworCXdoaWxlIChpc2RpZ2l0KCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCWFsdG1ldGVycyA9IGFsdG1ldGVycyAqIDEwICsgKCpjcCsrIC0gJzAnKTsKKworCWlmICgqY3AgPT0gJy4nKSB7CQkvKiBkZWNpbWFsIG1ldGVycyAqLworCQljcCsrOworCQlpZiAoaXNkaWdpdCgodW5zaWduZWQgY2hhcikqY3ApKSB7CisJCQlhbHRmcmFjID0gKCpjcCsrIC0gJzAnKSAqIDEwOworCQkJaWYgKGlzZGlnaXQoKHVuc2lnbmVkIGNoYXIpKmNwKSkgeworCQkJCWFsdGZyYWMgKz0gKCpjcCsrIC0gJzAnKTsKKwkJCX0KKwkJfQorCX0KKworCWFsdCA9ICgxMDAwMDAwMCArIChhbHRzaWduICogKGFsdG1ldGVycyAqIDEwMCArIGFsdGZyYWMpKSk7CisKKwl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpIC8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisJCWNwKys7CisKKwlpZiAoY3AgPj0gbWF4Y3ApCisJCWdvdG8gZGVmYXVsdHM7CisKKwlzaXogPSBwcmVjc2l6ZV9hdG9uKCZjcCk7CisKKwl3aGlsZSAoIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCS8qIGlmIHRyYWlsaW5nIGdhcmJhZ2Ugb3IgbSAqLworCQljcCsrOworCisJd2hpbGUgKGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSAmJiAoY3AgPCBtYXhjcCkpCisJCWNwKys7CisKKwlpZiAoY3AgPj0gbWF4Y3ApCisJCWdvdG8gZGVmYXVsdHM7CisKKwlocCA9IHByZWNzaXplX2F0b24oJmNwKTsKKworCXdoaWxlICghaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkJLyogaWYgdHJhaWxpbmcgZ2FyYmFnZSBvciBtICovCisJCWNwKys7CisKKwl3aGlsZSAoaXNzcGFjZSgodW5zaWduZWQgY2hhcikqY3ApICYmIChjcCA8IG1heGNwKSkKKwkJY3ArKzsKKworCWlmIChjcCA+PSBtYXhjcCkKKwkJZ290byBkZWZhdWx0czsKKworCXZwID0gcHJlY3NpemVfYXRvbigmY3ApOworCisgZGVmYXVsdHM6CisKKwliY3AgPSBiaW5hcnk7CisJKmJjcCsrID0gKHVfaW50OF90KSAwOwkvKiB2ZXJzaW9uIGJ5dGUgKi8KKwkqYmNwKysgPSBzaXo7CisJKmJjcCsrID0gaHA7CisJKmJjcCsrID0gdnA7CisJUFVUTE9ORyhsYXRpdCxiY3ApOworCVBVVExPTkcobG9uZ2l0LGJjcCk7CisJUFVUTE9ORyhhbHQsYmNwKTsKKworCXJldHVybiAoMTYpOwkJLyogc2l6ZSBvZiBSUiBpbiBvY3RldHMgKi8KK30KKworLyogdGFrZXMgYW4gb24tdGhlLXdpcmUgTE9DIFJSIGFuZCBmb3JtYXRzIGl0IGluIGEgaHVtYW4gcmVhZGFibGUgZm9ybWF0LiAqLworY29uc3QgY2hhciAqCitsb2NfbnRvYShiaW5hcnksIGFzY2lpKQorCWNvbnN0IHVfY2hhciAqYmluYXJ5OworCWNoYXIgKmFzY2lpOworeworCXN0YXRpYyBjb25zdCBjaGFyICplcnJvciA9ICI/IjsKKwlzdGF0aWMgY2hhciB0bXBidWZbc2l6ZW9mCisiMTAwMCA2MCA2MC4wMDAgTiAxMDAwIDYwIDYwLjAwMCBXIC0xMjM0NTY3OC4wMG0gOTAwMDAwMDAuMDBtIDkwMDAwMDAwLjAwbSA5MDAwMDAwMC4wMG0iXTsKKwljb25zdCB1X2NoYXIgKmNwID0gYmluYXJ5OworCisJaW50IGxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWM7CisJaW50IGxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjOworCWNoYXIgbm9ydGhzb3V0aCwgZWFzdHdlc3Q7CisJY29uc3QgY2hhciAqYWx0c2lnbjsKKwlpbnQgYWx0bWV0ZXJzLCBhbHRmcmFjOworCisJY29uc3QgdV9pbnQzMl90IHJlZmVyZW5jZWFsdCA9IDEwMDAwMCAqIDEwMDsKKworCWludDMyX3QgbGF0dmFsLCBsb25ndmFsLCBhbHR2YWw7CisJdV9pbnQzMl90IHRlbXBsOworCXVfaW50OF90IHNpemV2YWwsIGhwdmFsLCB2cHZhbCwgdmVyc2lvbnZhbDsKKworCWNoYXIgKnNpemVzdHIsICpocHN0ciwgKnZwc3RyOworCisJdmVyc2lvbnZhbCA9ICpjcCsrOworCisJaWYgKGFzY2lpID09IE5VTEwpCisJCWFzY2lpID0gdG1wYnVmOworCisJaWYgKHZlcnNpb252YWwpIHsKKwkJKHZvaWQpIHNwcmludGYoYXNjaWksICI7IGVycm9yOiB1bmtub3duIExPQyBSUiB2ZXJzaW9uIik7CisJCXJldHVybiAoYXNjaWkpOworCX0KKworCXNpemV2YWwgPSAqY3ArKzsKKworCWhwdmFsID0gKmNwKys7CisJdnB2YWwgPSAqY3ArKzsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlsYXR2YWwgPSAodGVtcGwgLSAoKHVuc2lnbmVkKTE8PDMxKSk7CisKKwlHRVRMT05HKHRlbXBsLCBjcCk7CisJbG9uZ3ZhbCA9ICh0ZW1wbCAtICgodW5zaWduZWQpMTw8MzEpKTsKKworCUdFVExPTkcodGVtcGwsIGNwKTsKKwlpZiAodGVtcGwgPCByZWZlcmVuY2VhbHQpIHsgLyogYmVsb3cgV0dTIDg0IHNwaGVyb2lkICovCisJCWFsdHZhbCA9IHJlZmVyZW5jZWFsdCAtIHRlbXBsOworCQlhbHRzaWduID0gIi0iOworCX0gZWxzZSB7CisJCWFsdHZhbCA9IHRlbXBsIC0gcmVmZXJlbmNlYWx0OworCQlhbHRzaWduID0gIiI7CisJfQorCisJaWYgKGxhdHZhbCA8IDApIHsKKwkJbm9ydGhzb3V0aCA9ICdTJzsKKwkJbGF0dmFsID0gLWxhdHZhbDsKKwl9IGVsc2UKKwkJbm9ydGhzb3V0aCA9ICdOJzsKKworCWxhdHNlY2ZyYWMgPSBsYXR2YWwgJSAxMDAwOworCWxhdHZhbCA9IGxhdHZhbCAvIDEwMDA7CisJbGF0c2VjID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0bWluID0gbGF0dmFsICUgNjA7CisJbGF0dmFsID0gbGF0dmFsIC8gNjA7CisJbGF0ZGVnID0gbGF0dmFsOworCisJaWYgKGxvbmd2YWwgPCAwKSB7CisJCWVhc3R3ZXN0ID0gJ1cnOworCQlsb25ndmFsID0gLWxvbmd2YWw7CisJfSBlbHNlCisJCWVhc3R3ZXN0ID0gJ0UnOworCisJbG9uZ3NlY2ZyYWMgPSBsb25ndmFsICUgMTAwMDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDEwMDA7CisJbG9uZ3NlYyA9IGxvbmd2YWwgJSA2MDsKKwlsb25ndmFsID0gbG9uZ3ZhbCAvIDYwOworCWxvbmdtaW4gPSBsb25ndmFsICUgNjA7CisJbG9uZ3ZhbCA9IGxvbmd2YWwgLyA2MDsKKwlsb25nZGVnID0gbG9uZ3ZhbDsKKworCWFsdGZyYWMgPSBhbHR2YWwgJSAxMDA7CisJYWx0bWV0ZXJzID0gKGFsdHZhbCAvIDEwMCk7CisKKwlzaXplc3RyID0gc3RyZHVwKHByZWNzaXplX250b2EoKHVfaW50MzJfdClzaXpldmFsKSk7CisJaHBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KWhwdmFsKSk7CisJdnBzdHIgPSBzdHJkdXAocHJlY3NpemVfbnRvYSgodV9pbnQzMl90KXZwdmFsKSk7CisKKwlzcHJpbnRmKGFzY2lpLAorCSAgICAiJWQgJS4yZCAlLjJkLiUuM2QgJWMgJWQgJS4yZCAlLjJkLiUuM2QgJWMgJXMlZC4lLjJkbSAlc20gJXNtICVzbSIsCisJCWxhdGRlZywgbGF0bWluLCBsYXRzZWMsIGxhdHNlY2ZyYWMsIG5vcnRoc291dGgsCisJCWxvbmdkZWcsIGxvbmdtaW4sIGxvbmdzZWMsIGxvbmdzZWNmcmFjLCBlYXN0d2VzdCwKKwkJYWx0c2lnbiwgYWx0bWV0ZXJzLCBhbHRmcmFjLAorCQkoc2l6ZXN0ciAhPSBOVUxMKSA/IHNpemVzdHIgOiBlcnJvciwKKwkJKGhwc3RyICE9IE5VTEwpID8gaHBzdHIgOiBlcnJvciwKKwkJKHZwc3RyICE9IE5VTEwpID8gdnBzdHIgOiBlcnJvcik7CisKKwlpZiAoc2l6ZXN0ciAhPSBOVUxMKQorCQlmcmVlKHNpemVzdHIpOworCWlmIChocHN0ciAhPSBOVUxMKQorCQlmcmVlKGhwc3RyKTsKKwlpZiAodnBzdHIgIT0gTlVMTCkKKwkJZnJlZSh2cHN0cik7CisKKwlyZXR1cm4gKGFzY2lpKTsKK30KKworCisvKiBSZXR1cm4gdGhlIG51bWJlciBvZiBETlMgaGllcmFyY2h5IGxldmVscyBpbiB0aGUgbmFtZS4gKi8KK2ludAorZG5fY291bnRfbGFiZWxzKGNvbnN0IGNoYXIgKm5hbWUpIHsKKwlpbnQgaSwgbGVuLCBjb3VudDsKKworCWxlbiA9IHN0cmxlbihuYW1lKTsKKwlmb3IgKGkgPSAwLCBjb3VudCA9IDA7IGkgPCBsZW47IGkrKykgeworCQkvKiBYWFggbmVlZCB0byBjaGVjayBmb3IgXC4gb3IgdXNlIG5hbWVkJ3MgbmxhYmVscygpLiAqLworCQlpZiAobmFtZVtpXSA9PSAnLicpCisJCQljb3VudCsrOworCX0KKworCS8qIGRvbid0IGNvdW50IGluaXRpYWwgd2lsZGNhcmQgKi8KKwlpZiAobmFtZVswXSA9PSAnKicpCisJCWlmIChjb3VudCkKKwkJCWNvdW50LS07CisKKwkvKiBkb24ndCBjb3VudCB0aGUgbnVsbCBsYWJlbCBmb3Igcm9vdC4gKi8KKwkvKiBpZiB0ZXJtaW5hdGluZyAnLicgbm90IGZvdW5kLCBtdXN0IGFkanVzdCAqLworCS8qIGNvdW50IHRvIGluY2x1ZGUgbGFzdCBsYWJlbCAqLworCWlmIChsZW4gPiAwICYmIG5hbWVbbGVuLTFdICE9ICcuJykKKwkJY291bnQrKzsKKwlyZXR1cm4gKGNvdW50KTsKK30KKworCisvKgorICogTWFrZSBkYXRlcyBleHByZXNzZWQgaW4gc2Vjb25kcy1zaW5jZS1KYW4tMS0xOTcwIGVhc3kgdG8gcmVhZC4KKyAqIFNJRyByZWNvcmRzIGFyZSByZXF1aXJlZCB0byBiZSBwcmludGVkIGxpa2UgdGhpcywgYnkgdGhlIFNlY3VyZSBETlMgUkZDLgorICovCitjaGFyICoKK3Bfc2Vjc3RvZGF0ZSAodV9sb25nIHNlY3MpIHsKKwkvKiBYWFggbm9ucmVlbnRyYW50ICovCisJc3RhdGljIGNoYXIgb3V0cHV0WzE1XTsJCS8qIFlZWVlNTURESEhNTVNTIGFuZCBudWxsICovCisJdGltZV90IG15Y2xvY2sgPSBzZWNzOworCXN0cnVjdCB0bSAqbXl0aW1lOworI2lmZGVmIEhBVkVfVElNRV9SCisJc3RydWN0IHRtIHJlczsKKworCW15dGltZSA9IGdtdGltZV9yKCZteWNsb2NrLCAmcmVzKTsKKyNlbHNlCisJbXl0aW1lID0gZ210aW1lKCZteWNsb2NrKTsKKyNlbmRpZgorCW15dGltZS0+dG1feWVhciArPSAxOTAwOworCW15dGltZS0+dG1fbW9uICs9IDE7CisJc3ByaW50ZihvdXRwdXQsICIlMDRkJTAyZCUwMmQlMDJkJTAyZCUwMmQiLAorCQlteXRpbWUtPnRtX3llYXIsIG15dGltZS0+dG1fbW9uLCBteXRpbWUtPnRtX21kYXksCisJCW15dGltZS0+dG1faG91ciwgbXl0aW1lLT50bV9taW4sIG15dGltZS0+dG1fc2VjKTsKKwlyZXR1cm4gKG91dHB1dCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b2NsYXNzKGNvbnN0IGNoYXIgKmJ1ZiwgaW50ICpzdWNjZXNzcCkgeworCXVuc2lnbmVkIGxvbmcgcmVzdWx0OworCWNoYXIgKmVuZHB0cjsKKwlpbnQgc3VjY2VzczsKKworCXJlc3VsdCA9IHN5bV9zdG9uKF9fcF9jbGFzc19zeW1zLCBidWYsICZzdWNjZXNzKTsKKwlpZiAoc3VjY2VzcykKKwkJZ290byBkb25lOworCisJaWYgKHN0cm5jYXNlY21wKGJ1ZiwgIkNMQVNTIiwgNSkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNV0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNSwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CisKK3VfaW50MTZfdAorcmVzX25hbWV0b3R5cGUoY29uc3QgY2hhciAqYnVmLCBpbnQgKnN1Y2Nlc3NwKSB7CisJdW5zaWduZWQgbG9uZyByZXN1bHQ7CisJY2hhciAqZW5kcHRyOworCWludCBzdWNjZXNzOworCisJcmVzdWx0ID0gc3ltX3N0b24oX19wX3R5cGVfc3ltcywgYnVmLCAmc3VjY2Vzcyk7CisJaWYgKHN1Y2Nlc3MpCisJCWdvdG8gZG9uZTsKKworCWlmIChzdHJuY2FzZWNtcChidWYsICJ0eXBlIiwgNCkgIT0gMCB8fAorCSAgICAhaXNkaWdpdCgodW5zaWduZWQgY2hhcilidWZbNF0pKQorCQlnb3RvIGRvbmU7CisJZXJybm8gPSAwOworCXJlc3VsdCA9IHN0cnRvdWwoYnVmICsgNCwgJmVuZHB0ciwgMTApOworCWlmIChlcnJubyA9PSAwICYmICplbmRwdHIgPT0gJ1wwJyAmJiByZXN1bHQgPD0gMHhmZmZmVSkKKwkJc3VjY2VzcyA9IDE7CisgZG9uZToKKwlpZiAoc3VjY2Vzc3ApCisJCSpzdWNjZXNzcCA9IHN1Y2Nlc3M7CisJcmV0dXJuICh1X2ludDE2X3QpKHJlc3VsdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmggYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX2RlYnVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDM0MWM1YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfZGVidWcuaApAQCAtMCwwICsxLDM2IEBACisvKgkkTmV0QlNEOiByZXNfZGVidWcuaCx2IDEuMS4xLjEgMjAwNC8wNS8yMCAxNzoxODo1NSBjaHJpc3RvcyBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgX1JFU19ERUJVR19IXworI2RlZmluZSBfUkVTX0RFQlVHX0hfCisKKyNpZm5kZWYgREVCVUcKKyMgICBkZWZpbmUgRHByaW50KGNvbmQsIGFyZ3MpIC8qZW1wdHkqLworIyAgIGRlZmluZSBEcHJpbnRRKGNvbmQsIGFyZ3MsIHF1ZXJ5LCBzaXplKSAvKmVtcHR5Ki8KKyMgICBkZWZpbmUgQWVycm9yKHN0YXRwLCBmaWxlLCBzdHJpbmcsIGVycm9yLCBhZGRyZXNzKSAvKmVtcHR5Ki8KKyMgICBkZWZpbmUgUGVycm9yKHN0YXRwLCBmaWxlLCBzdHJpbmcsIGVycm9yKSAvKmVtcHR5Ki8KKyNlbHNlCisjICAgZGVmaW5lIERwcmludChjb25kLCBhcmdzKSBpZiAoY29uZCkge2ZwcmludGYgYXJnczt9IGVsc2Uge30KKyMgICBkZWZpbmUgRHByaW50UShjb25kLCBhcmdzLCBxdWVyeSwgc2l6ZSkgaWYgKGNvbmQpIHtcCisJCQlmcHJpbnRmIGFyZ3M7XAorCQkJcmVzX3BxdWVyeShzdGF0cCwgcXVlcnksIHNpemUsIHN0ZG91dCk7XAorCQl9IGVsc2Uge30KKyNlbmRpZgorCisjZW5kaWYgLyogX1JFU19ERUJVR19IXyAqLyAKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmMwMjcyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfaW5pdC5jCkBAIC0wLDAgKzEsODYzIEBACisvKgkkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NSwgMTk4OSwgMTk5MworICogICAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIAlUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mCisgKiAJQ2FsaWZvcm5pYSwgQmVya2VsZXkgYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTMgYnkgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLCBhbmQgdGhhdAorICogdGhlIG5hbWUgb2YgRGlnaXRhbCBFcXVpcG1lbnQgQ29ycG9yYXRpb24gbm90IGJlIHVzZWQgaW4gYWR2ZXJ0aXNpbmcgb3IKKyAqIHB1YmxpY2l0eSBwZXJ0YWluaW5nIHRvIGRpc3RyaWJ1dGlvbiBvZiB0aGUgZG9jdW1lbnQgb3Igc29mdHdhcmUgd2l0aG91dAorICogc3BlY2lmaWMsIHdyaXR0ZW4gcHJpb3IgcGVybWlzc2lvbi4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgRElHSVRBTCBFUVVJUE1FTlQgQ09SUC4gRElTQ0xBSU1TIEFMTAorICogV0FSUkFOVElFUyBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFLCBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUworICogT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgIElOIE5PIEVWRU5UIFNIQUxMIERJR0lUQUwgRVFVSVBNRU5UCisgKiBDT1JQT1JBVElPTiBCRSBMSUFCTEUgRk9SIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IKKyAqIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTCisgKiBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLgorICovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDQgYnkgSW50ZXJuZXQgU3lzdGVtcyBDb25zb3J0aXVtLCBJbmMuICgiSVNDIikKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0xOTk5IGJ5IEludGVybmV0IFNvZnR3YXJlIENvbnNvcnRpdW0uCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBJU0MgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICBJTiBOTyBFVkVOVCBTSEFMTCBJU0MgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVAorICogT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCisjaWZkZWYgbm90ZGVmCitzdGF0aWMgY29uc3QgY2hhciBzY2NzaWRbXSA9ICJAKCMpcmVzX2luaXQuYwk4LjEgKEJlcmtlbGV5KSA2LzcvOTMiOworc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSA9ICJJZDogcmVzX2luaXQuYyx2IDEuOS4yLjUuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTggbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfaW5pdC5jLHYgMS44IDIwMDYvMDMvMTkgMDM6MTA6MDggY2hyaXN0b3MgRXhwICQiKTsKKyNlbmRpZgorI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKworI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlIDxhcnBhL2luZXQuaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisjZW5kaWYgLyogQU5EUk9JRF9DSEFOR0VTICovCisKKyNpZm5kZWYgTUlOCisjZGVmaW5lCU1JTih4LHkpCSgoeCk8KHkpPyh4KTooeSkpCisjZW5kaWYKKworLyogZW5zdXJlIHRoYXQgc29ja2FkZHJfaW42IGFuZCBJTjZBRERSX0FOWV9JTklUIGFyZSBkZWNsYXJlZCAvIGRlZmluZWQgKi8KKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2RlZmluZSBNQVhfRE5TX1BST1BFUlRJRVMgOAorI2RlZmluZSBETlNfUFJPUF9OQU1FX1BSRUZJWCAibmV0LmRucyIKKyNkZWZpbmUgRE5TX0NIQU5HRV9QUk9QX05BTUUgIm5ldC5kbnNjaGFuZ2UiCitjb25zdCBwcm9wX2luZm8gKmRuc19jaGFuZ2VfcHJvcDsKK2ludCBkbnNfbGFzdF9jaGFuZ2VfY291bnRlcjsKK3N0YXRpYyBpbnQgX2dldF9kbnNfY2hhbmdlX2NvdW50KCk7CisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisKKyNpbmNsdWRlICJyZXNfcHJpdmF0ZS5oIgorCisvKiBPcHRpb25zLiAgU2hvdWxkIGFsbCBiZSBsZWZ0IGFsb25lLiAqLworI2lmbmRlZiBERUJVRworI2RlZmluZSBERUJVRworI2VuZGlmCisKK3N0YXRpYyB2b2lkIHJlc19zZXRvcHRpb25zIF9fUCgocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKikpOworCitzdGF0aWMgY29uc3QgY2hhciBzb3J0X21hc2tbXSA9ICIvJiI7CisjZGVmaW5lIElTU09SVE1BU0soY2gpIChzdHJjaHIoc29ydF9tYXNrLCBjaCkgIT0gTlVMTCkKK3N0YXRpYyB1X2ludDMyX3QgbmV0X21hc2sgX19QKChzdHJ1Y3QgaW5fYWRkcikpOworCisjaWYgIWRlZmluZWQoaXNhc2NpaSkJLyogWFhYIC0gY291bGQgYmUgYSBmdW5jdGlvbiAqLworIyBkZWZpbmUgaXNhc2NpaShjKSAoIShjICYgMDIwMCkpCisjZW5kaWYKKworLyoKKyAqIFJlc29sdmVyIHN0YXRlIGRlZmF1bHQgc2V0dGluZ3MuCisgKi8KKworLyoKKyAqIFNldCB1cCBkZWZhdWx0IHNldHRpbmdzLiAgSWYgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBleGlzdCwgdGhlIHZhbHVlcworICogdGhlcmUgd2lsbCBoYXZlIHByZWNlZGVuY2UuICBPdGhlcndpc2UsIHRoZSBzZXJ2ZXIgYWRkcmVzcyBpcyBzZXQgdG8KKyAqIElOQUREUl9BTlkgYW5kIHRoZSBkZWZhdWx0IGRvbWFpbiBuYW1lIGNvbWVzIGZyb20gdGhlIGdldGhvc3RuYW1lKCkuCisgKgorICogQW4gaW50ZXJyaW0gdmVyc2lvbiBvZiB0aGlzIGNvZGUgKEJJTkQgNC45LCBwcmUtNC40QlNEKSB1c2VkIDEyNy4wLjAuMQorICogcmF0aGVyIHRoYW4gSU5BRERSX0FOWSAoIjAuMC4wLjAiKSBhcyB0aGUgZGVmYXVsdCBuYW1lIHNlcnZlciBhZGRyZXNzCisgKiBzaW5jZSBpdCB3YXMgbm90ZWQgdGhhdCBJTkFERFJfQU5ZIGFjdHVhbGx5IG1lYW50IGBgdGhlIGZpcnN0IGludGVyZmFjZQorICogeW91ICJpZmNvbmZpZyInZCBhdCBib290IHRpbWUnJyBhbmQgaWYgdGhpcyB3YXMgYSBTTElQIG9yIFBQUCBpbnRlcmZhY2UsCisgKiBpdCBoYWQgdG8gYmUgInVwIiBpbiBvcmRlciBmb3IgeW91IHRvIHJlYWNoIHlvdXIgb3duIG5hbWUgc2VydmVyLiAgSXQKKyAqIHdhcyBsYXRlciBkZWNpZGVkIHRoYXQgc2luY2UgdGhlIHJlY29tbWVuZGVkIHByYWN0aWNlIGlzIHRvIGFsd2F5cworICogaW5zdGFsbCBsb2NhbCBzdGF0aWMgcm91dGVzIHRocm91Z2ggMTI3LjAuMC4xIGZvciBhbGwgeW91ciBuZXR3b3JrCisgKiBpbnRlcmZhY2VzLCB0aGF0IHdlIGNvdWxkIHNvbHZlIHRoaXMgcHJvYmxlbSB3aXRob3V0IGEgY29kZSBjaGFuZ2UuCisgKgorICogVGhlIGNvbmZpZ3VyYXRpb24gZmlsZSBzaG91bGQgYWx3YXlzIGJlIHVzZWQsIHNpbmNlIGl0IGlzIHRoZSBvbmx5IHdheQorICogdG8gc3BlY2lmeSBhIGRlZmF1bHQgZG9tYWluLiAgSWYgeW91IGFyZSBydW5uaW5nIGEgc2VydmVyIG9uIHlvdXIgbG9jYWwKKyAqIG1hY2hpbmUsIHlvdSBzaG91bGQgc2F5ICJuYW1lc2VydmVyIDAuMC4wLjAiIG9yICJuYW1lc2VydmVyIDEyNy4wLjAuMSIKKyAqIGluIHRoZSBjb25maWd1cmF0aW9uIGZpbGUuCisgKgorICogUmV0dXJuIDAgaWYgY29tcGxldGVzIHN1Y2Nlc3NmdWxseSwgLTEgb24gZXJyb3IKKyAqLworaW50CityZXNfbmluaXQocmVzX3N0YXRlIHN0YXRwKSB7CisJZXh0ZXJuIGludCBfX3Jlc192aW5pdChyZXNfc3RhdGUsIGludCk7CisKKwlyZXR1cm4gKF9fcmVzX3Zpbml0KHN0YXRwLCAwKSk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaGFzIHRvIGJlIHJlYWNoYWJsZSBieSByZXNfZGF0YS5jIGJ1dCBub3QgcHVibGljbHkuICovCitpbnQKK19fcmVzX3Zpbml0KHJlc19zdGF0ZSBzdGF0cCwgaW50IHByZWluaXQpIHsKKwlyZWdpc3RlciBGSUxFICpmcDsKKwlyZWdpc3RlciBjaGFyICpjcCwgKipwcDsKKwlyZWdpc3RlciBpbnQgbjsKKwljaGFyIGJ1ZltCVUZTSVpdOworCWludCBuc2VydiA9IDA7ICAgIC8qIG51bWJlciBvZiBuYW1lc2VydmVyIHJlY29yZHMgcmVhZCBmcm9tIGZpbGUgKi8KKwlpbnQgaGF2ZWVudiA9IDA7CisJaW50IGhhdmVzZWFyY2ggPSAwOworCWludCBuc29ydCA9IDA7CisJY2hhciAqbmV0OworCWludCBkb3RzOworCXVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiB1WzJdOworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworICAgICAgICBwaWRfdCBteXBpZCA9IGdldHBpZCgpOworICAgICAgICBpbnQgdXNlX3Byb2NfcHJvcHMgPSAwOworICAgICAgICBpbnQgZm91bmRfcHJvcDsKKwljaGFyIGRuc1Byb3BlcnR5W1BST1BfVkFMVUVfTUFYXTsKKyNlbmRpZgorCisJaWYgKCFwcmVpbml0KSB7CisJCXN0YXRwLT5yZXRyYW5zID0gUkVTX1RJTUVPVVQ7CisJCXN0YXRwLT5yZXRyeSA9IFJFU19ERkxSRVRSWTsKKwkJc3RhdHAtPm9wdGlvbnMgPSBSRVNfREVGQVVMVDsKKwkJc3RhdHAtPmlkID0gcmVzX3JhbmRvbWlkKCk7CisJfQorCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19JTklUKSAhPSAwVSkKKwkJcmVzX25kZXN0cm95KHN0YXRwKTsKKworCW1lbXNldCh1LCAwLCBzaXplb2YodSkpOworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luLnNpbl9hZGRyID0gaW5ldF9tYWtlYWRkcihJTl9MT09QQkFDS05FVCwgMSk7CisjZWxzZQorCXVbbnNlcnZdLnNpbi5zaW5fYWRkci5zX2FkZHIgPSBJTkFERFJfQU5ZOworI2VuZGlmCisJdVtuc2Vydl0uc2luLnNpbl9mYW1pbHkgPSBBRl9JTkVUOworCXVbbnNlcnZdLnNpbi5zaW5fcG9ydCA9IGh0b25zKE5BTUVTRVJWRVJfUE9SVCk7CisjaWZkZWYgSEFWRV9TQV9MRU4KKwl1W25zZXJ2XS5zaW4uc2luX2xlbiA9IHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pOworI2VuZGlmCisJbnNlcnYrKzsKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworI2lmZGVmIFVTRUxPT1BCQUNLCisJdVtuc2Vydl0uc2luNi5zaW42X2FkZHIgPSBpbjZhZGRyX2xvb3BiYWNrOworI2Vsc2UKKwl1W25zZXJ2XS5zaW42LnNpbjZfYWRkciA9IGluNmFkZHJfYW55OworI2VuZGlmCisJdVtuc2Vydl0uc2luNi5zaW42X2ZhbWlseSA9IEFGX0lORVQ2OworCXVbbnNlcnZdLnNpbjYuc2luNl9wb3J0ID0gaHRvbnMoTkFNRVNFUlZFUl9QT1JUKTsKKyNpZmRlZiBIQVZFX1NBX0xFTgorCXVbbnNlcnZdLnNpbjYuc2luNl9sZW4gPSBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luNik7CisjZW5kaWYKKwluc2VydisrOworI2VuZGlmCisJc3RhdHAtPm5zY291bnQgPSAwOworCXN0YXRwLT5uZG90cyA9IDE7CisJc3RhdHAtPnBmY29kZSA9IDA7CisJc3RhdHAtPl92Y3NvY2sgPSAtMTsKKwlzdGF0cC0+X2ZsYWdzID0gMDsKKwlzdGF0cC0+cWhvb2sgPSBOVUxMOworCXN0YXRwLT5yaG9vayA9IE5VTEw7CisJc3RhdHAtPl91Ll9leHQubnNjb3VudCA9IDA7CisJc3RhdHAtPl91Ll9leHQuZXh0ID0gbWFsbG9jKHNpemVvZigqc3RhdHAtPl91Ll9leHQuZXh0KSk7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCAhPSBOVUxMKSB7CisJICAgICAgICBtZW1zZXQoc3RhdHAtPl91Ll9leHQuZXh0LCAwLCBzaXplb2YoKnN0YXRwLT5fdS5fZXh0LmV4dCkpOworCQlzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0uc2luID0gc3RhdHAtPm5zYWRkcjsKKwkJc3RyY3B5KHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeCwgImlwNi5hcnBhIik7CisJCXN0cmNweShzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyLCAiaXA2LmludCIpOworCX0KKwlzdGF0cC0+bnNvcnQgPSAwOworCXJlc19zZXRzZXJ2ZXJzKHN0YXRwLCB1LCBuc2Vydik7CisKKyNpZiAwIC8qIElHTk9SRSBUSEUgRU5WSVJPTk1FTlQgKi8KKwkvKiBBbGxvdyB1c2VyIHRvIG92ZXJyaWRlIHRoZSBsb2NhbCBkb21haW4gZGVmaW5pdGlvbiAqLworCWlmICgoY3AgPSBnZXRlbnYoIkxPQ0FMRE9NQUlOIikpICE9IE5VTEwpIHsKKwkJKHZvaWQpc3RybmNweShzdGF0cC0+ZGVmZG5hbWUsIGNwLCBzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDEpOworCQlzdGF0cC0+ZGVmZG5hbWVbc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxXSA9ICdcMCc7CisJCWhhdmVlbnYrKzsKKworCQkvKgorCQkgKiBTZXQgc2VhcmNoIGxpc3QgdG8gYmUgYmxhbmstc2VwYXJhdGVkIHN0cmluZ3MKKwkJICogZnJvbSByZXN0IG9mIGVudiB2YWx1ZS4gIFBlcm1pdHMgdXNlcnMgb2YgTE9DQUxET01BSU4KKwkJICogdG8gc3RpbGwgaGF2ZSBhIHNlYXJjaCBsaXN0LCBhbmQgYW55b25lIHRvIHNldCB0aGUKKwkJICogb25lIHRoYXQgdGhleSB3YW50IHRvIHVzZSBhcyBhbiBpbmRpdmlkdWFsIChldmVuIG1vcmUKKwkJICogaW1wb3J0YW50IG5vdyB0aGF0IHRoZSByZmMxNTM1IHN0dWZmIHJlc3RyaWN0cyBzZWFyY2hlcykKKwkJICovCisJCWNwID0gc3RhdHAtPmRlZmRuYW1lOworCQlwcCA9IHN0YXRwLT5kbnNyY2g7CisJCSpwcCsrID0gY3A7CisJCWZvciAobiA9IDA7ICpjcCAmJiBwcCA8IHN0YXRwLT5kbnNyY2ggKyBNQVhETlNSQ0g7IGNwKyspIHsKKwkJCWlmICgqY3AgPT0gJ1xuJykJLyogc2lsbHkgYmFja3dhcmRzIGNvbXBhdCAqLworCQkJCWJyZWFrOworCQkJZWxzZSBpZiAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykgeworCQkJCSpjcCA9IDA7CisJCQkJbiA9IDE7CisJCQl9IGVsc2UgaWYgKG4pIHsKKwkJCQkqcHArKyA9IGNwOworCQkJCW4gPSAwOworCQkJCWhhdmVzZWFyY2ggPSAxOworCQkJfQorCQl9CisJCS8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KKwkJd2hpbGUgKCpjcCAhPSAnXDAnICYmICpjcCAhPSAnICcgJiYgKmNwICE9ICdcdCcgJiYgKmNwICE9ICdcbicpCisJCQljcCsrOworCQkqY3AgPSAnXDAnOworCQkqcHArKyA9IDA7CisJfQorCWlmIChuc2VydiA+IDApCisJCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CisjZW5kaWYKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMgLyogUkVBRCBGUk9NIFNZU1RFTSBQUk9QRVJUSUVTICovCisJZG5zX2xhc3RfY2hhbmdlX2NvdW50ZXIgPSBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKTsKKworCW5zZXJ2ID0gMDsKKwlmb3IobiA9IDE7IG4gPD0gTUFYX0ROU19QUk9QRVJUSUVTICYmIG5zZXJ2IDwgTUFYTlM7IG4rKykgeworCQljaGFyIHByb3BuYW1lW1BST1BfTkFNRV9NQVhdOworCQljaGFyIHByb3B2YWx1ZVtQUk9QX1ZBTFVFX01BWF07CisKKwkJc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7CisJCWNoYXIgc2J1ZltOSV9NQVhTRVJWXTsKKwkJY29uc3Qgc2l6ZV90IG1pbnNpeiA9IHNpemVvZihzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbMF0pOworCisJCS8qCisJCSAqIENoZWNrIGZpcnN0IGZvciBwcm9jZXNzLXNwZWNpZmljIHByb3BlcnRpZXMsIGFuZCBpZiB0aG9zZSBkb24ndAorCQkgKiBleGlzdCwgdHJ5IHRoZSBnZW5lcmljIHByb3BlcnRpZXMuCisJCSAqLworCQlmb3VuZF9wcm9wID0gMDsKKwkJaWYgKG4gPT0gMSB8fCB1c2VfcHJvY19wcm9wcykgeworCQkJc25wcmludGYocHJvcG5hbWUsIHNpemVvZihwcm9wbmFtZSksICIlcyVkLiVkIiwgRE5TX1BST1BfTkFNRV9QUkVGSVgsIG4sIG15cGlkKTsKKwkJCWlmKF9fc3lzdGVtX3Byb3BlcnR5X2dldChwcm9wbmFtZSwgcHJvcHZhbHVlKSA8IDEpIHsKKwkJCQlpZiAodXNlX3Byb2NfcHJvcHMpIHsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfSBlbHNlIHsKKwkJCQlmb3VuZF9wcm9wID0gMTsKKwkJCQl1c2VfcHJvY19wcm9wcyA9IDE7CisJCQl9CisJCX0KKwkJaWYgKCFmb3VuZF9wcm9wKSB7CisJCQlzbnByaW50Zihwcm9wbmFtZSwgc2l6ZW9mKHByb3BuYW1lKSwgIiVzJWQiLCBETlNfUFJPUF9OQU1FX1BSRUZJWCwgbik7CisJCQlpZihfX3N5c3RlbV9wcm9wZXJ0eV9nZXQocHJvcG5hbWUsIHByb3B2YWx1ZSkgPCAxKSB7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQljcCA9IHByb3B2YWx1ZTsKKworCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCWNwKys7CisJCWNwW3N0cmNzcG4oY3AsICI7IyBcdFxuIildID0gJ1wwJzsKKwkJaWYgKCgqY3AgIT0gJ1wwJykgJiYgKCpjcCAhPSAnXG4nKSkgeworCQkJbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7CisJCQloaW50cy5haV9mYW1pbHkgPSBQRl9VTlNQRUM7CisJCQloaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfREdSQU07CS8qZHVtbXkqLworCQkJaGludHMuYWlfZmxhZ3MgPSBBSV9OVU1FUklDSE9TVDsKKwkJCXNwcmludGYoc2J1ZiwgIiV1IiwgTkFNRVNFUlZFUl9QT1JUKTsKKwkJCWlmIChnZXRhZGRyaW5mbyhjcCwgc2J1ZiwgJmhpbnRzLCAmYWkpID09IDAgJiYKKwkJCSAgICAoc2l6ZV90KWFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgeworCQkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworCQkJCQltZW1jcHkoJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tuc2Vydl0sCisJCQkJCSAgICAgICBhaS0+YWlfYWRkciwgYWktPmFpX2FkZHJsZW4pOworCQkJCX0KKwkJCQlpZiAoKHNpemVfdClhaS0+YWlfYWRkcmxlbiA8PQorCQkJCSAgICBzaXplb2Yoc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSkpIHsKKwkJCQkJbWVtY3B5KCZzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLAorCQkJCQkgICAgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOworCQkJCX0KKwkJCQlmcmVlYWRkcmluZm8oYWkpOworCQkJCW5zZXJ2Kys7CisJCQl9CisJCX0KKwl9CisjZWxzZSAvKiBJR05PUkUgcmVzb2x2LmNvbmYgKi8KKyNkZWZpbmUJTUFUQ0gobGluZSwgbmFtZSkgXAorCSghc3RybmNtcChsaW5lLCBuYW1lLCBzaXplb2YobmFtZSkgLSAxKSAmJiBcCisJKGxpbmVbc2l6ZW9mKG5hbWUpIC0gMV0gPT0gJyAnIHx8IFwKKwkgbGluZVtzaXplb2YobmFtZSkgLSAxXSA9PSAnXHQnKSkKKworCW5zZXJ2ID0gMDsKKwlpZiAoKGZwID0gZm9wZW4oX1BBVEhfUkVTQ09ORiwgInIiKSkgIT0gTlVMTCkgeworCSAgICAvKiByZWFkIHRoZSBjb25maWcgZmlsZSAqLworCSAgICB3aGlsZSAoZmdldHMoYnVmLCBzaXplb2YoYnVmKSwgZnApICE9IE5VTEwpIHsKKwkJLyogc2tpcCBjb21tZW50cyAqLworCQlpZiAoKmJ1ZiA9PSAnOycgfHwgKmJ1ZiA9PSAnIycpCisJCQljb250aW51ZTsKKwkJLyogcmVhZCBkZWZhdWx0IGRvbWFpbiBuYW1lICovCisJCWlmIChNQVRDSChidWYsICJkb21haW4iKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJkb21haW4iKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJwYnJrKHN0YXRwLT5kZWZkbmFtZSwgIiBcdFxuIikpICE9IE5VTEwpCisJCQkgICAgKmNwID0gJ1wwJzsKKwkJICAgIGhhdmVzZWFyY2ggPSAwOworCQkgICAgY29udGludWU7CisJCX0KKwkJLyogc2V0IHNlYXJjaCBsaXN0ICovCisJCWlmIChNQVRDSChidWYsICJzZWFyY2giKSkgeworCQkgICAgaWYgKGhhdmVlbnYpCS8qIHNraXAgaWYgaGF2ZSBmcm9tIGVudmlyb24gKi8KKwkJCSAgICBjb250aW51ZTsKKwkJICAgIGNwID0gYnVmICsgc2l6ZW9mKCJzZWFyY2giKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkgICAgaWYgKCgqY3AgPT0gJ1wwJykgfHwgKCpjcCA9PSAnXG4nKSkKKwkJCSAgICBjb250aW51ZTsKKwkJICAgIHN0cm5jcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCwgc2l6ZW9mKHN0YXRwLT5kZWZkbmFtZSkgLSAxKTsKKwkJICAgIHN0YXRwLT5kZWZkbmFtZVtzaXplb2Yoc3RhdHAtPmRlZmRuYW1lKSAtIDFdID0gJ1wwJzsKKwkJICAgIGlmICgoY3AgPSBzdHJjaHIoc3RhdHAtPmRlZmRuYW1lLCAnXG4nKSkgIT0gTlVMTCkKKwkJCSAgICAqY3AgPSAnXDAnOworCQkgICAgLyoKKwkJICAgICAqIFNldCBzZWFyY2ggbGlzdCB0byBiZSBibGFuay1zZXBhcmF0ZWQgc3RyaW5ncworCQkgICAgICogb24gcmVzdCBvZiBsaW5lLgorCQkgICAgICovCisJCSAgICBjcCA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJICAgIHBwID0gc3RhdHAtPmRuc3JjaDsKKwkJICAgICpwcCsrID0gY3A7CisJCSAgICBmb3IgKG4gPSAwOyAqY3AgJiYgcHAgPCBzdGF0cC0+ZG5zcmNoICsgTUFYRE5TUkNIOyBjcCsrKSB7CisJCQkgICAgaWYgKCpjcCA9PSAnICcgfHwgKmNwID09ICdcdCcpIHsKKwkJCQkgICAgKmNwID0gMDsKKwkJCQkgICAgbiA9IDE7CisJCQkgICAgfSBlbHNlIGlmIChuKSB7CisJCQkJICAgICpwcCsrID0gY3A7CisJCQkJICAgIG4gPSAwOworCQkJICAgIH0KKwkJICAgIH0KKwkJICAgIC8qIG51bGwgdGVybWluYXRlIGxhc3QgZG9tYWluIGlmIHRoZXJlIGFyZSBleGNlc3MgKi8KKwkJICAgIHdoaWxlICgqY3AgIT0gJ1wwJyAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQorCQkJICAgIGNwKys7CisJCSAgICAqY3AgPSAnXDAnOworCQkgICAgKnBwKysgPSAwOworCQkgICAgaGF2ZXNlYXJjaCA9IDE7CisJCSAgICBjb250aW51ZTsKKwkJfQorCQkvKiByZWFkIG5hbWVzZXJ2ZXJzIHRvIHF1ZXJ5ICovCisJCWlmIChNQVRDSChidWYsICJuYW1lc2VydmVyIikgJiYgbnNlcnYgPCBNQVhOUykgeworCQkgICAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWk7CisJCSAgICBjaGFyIHNidWZbTklfTUFYU0VSVl07CisJCSAgICBjb25zdCBzaXplX3QgbWluc2l6ID0KKwkJICAgICAgICBzaXplb2Yoc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzWzBdKTsKKworCQkgICAgY3AgPSBidWYgKyBzaXplb2YoIm5hbWVzZXJ2ZXIiKSAtIDE7CisJCSAgICB3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCWNwKys7CisJCSAgICBjcFtzdHJjc3BuKGNwLCAiOyMgXHRcbiIpXSA9ICdcMCc7CisJCSAgICBpZiAoKCpjcCAhPSAnXDAnKSAmJiAoKmNwICE9ICdcbicpKSB7CisJCQltZW1zZXQoJmhpbnRzLCAwLCBzaXplb2YoaGludHMpKTsKKwkJCWhpbnRzLmFpX2ZhbWlseSA9IFBGX1VOU1BFQzsKKwkJCWhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19ER1JBTTsJLypkdW1teSovCisJCQloaW50cy5haV9mbGFncyA9IEFJX05VTUVSSUNIT1NUOworCQkJc3ByaW50ZihzYnVmLCAiJXUiLCBOQU1FU0VSVkVSX1BPUlQpOworCQkJaWYgKGdldGFkZHJpbmZvKGNwLCBzYnVmLCAmaGludHMsICZhaSkgPT0gMCAmJgorCQkJICAgIGFpLT5haV9hZGRybGVuIDw9IG1pbnNpeikgeworCQkJICAgIGlmIChzdGF0cC0+X3UuX2V4dC5leHQgIT0gTlVMTCkgeworCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9CisJCQkgICAgaWYgKGFpLT5haV9hZGRybGVuIDw9CisJCQkgICAgICAgIHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkgeworCQkJCW1lbWNweSgmc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XSwKKwkJCQkgICAgYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuKTsKKwkJCSAgICB9IGVsc2UKKwkJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdLnNpbl9mYW1pbHkgPSAwOworCQkJICAgIGZyZWVhZGRyaW5mbyhhaSk7CisJCQkgICAgbnNlcnYrKzsKKwkJCX0KKwkJICAgIH0KKwkJICAgIGNvbnRpbnVlOworCQl9CisJCWlmIChNQVRDSChidWYsICJzb3J0bGlzdCIpKSB7CisJCSAgICBzdHJ1Y3QgaW5fYWRkciBhOworCisJCSAgICBjcCA9IGJ1ZiArIHNpemVvZigic29ydGxpc3QiKSAtIDE7CisJCSAgICB3aGlsZSAobnNvcnQgPCBNQVhSRVNPTFZTT1JUKSB7CisJCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCSAgICBjcCsrOworCQkJaWYgKCpjcCA9PSAnXDAnIHx8ICpjcCA9PSAnXG4nIHx8ICpjcCA9PSAnOycpCisJCQkgICAgYnJlYWs7CisJCQluZXQgPSBjcDsKKwkJCXdoaWxlICgqY3AgJiYgIUlTU09SVE1BU0soKmNwKSAmJiAqY3AgIT0gJzsnICYmCisJCQkgICAgICAgaXNhc2NpaSgqY3ApICYmICFpc3NwYWNlKCh1bnNpZ25lZCBjaGFyKSpjcCkpCisJCQkJY3ArKzsKKwkJCW4gPSAqY3A7CisJCQkqY3AgPSAwOworCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJICAgIHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIgPSBhOworCQkJICAgIGlmIChJU1NPUlRNQVNLKG4pKSB7CisJCQkJKmNwKysgPSBuOworCQkJCW5ldCA9IGNwOworCQkJCXdoaWxlICgqY3AgJiYgKmNwICE9ICc7JyAmJgorCQkJCQlpc2FzY2lpKCpjcCkgJiYKKwkJCQkJIWlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpKmNwKSkKKwkJCQkgICAgY3ArKzsKKwkJCQluID0gKmNwOworCQkJCSpjcCA9IDA7CisJCQkJaWYgKGluZXRfYXRvbihuZXQsICZhKSkgeworCQkJCSAgICBzdGF0cC0+c29ydF9saXN0W25zb3J0XS5tYXNrID0gYS5zX2FkZHI7CisJCQkJfSBlbHNlIHsKKwkJCQkgICAgc3RhdHAtPnNvcnRfbGlzdFtuc29ydF0ubWFzayA9CisJCQkJCW5ldF9tYXNrKHN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLmFkZHIpOworCQkJCX0KKwkJCSAgICB9IGVsc2UgeworCQkJCXN0YXRwLT5zb3J0X2xpc3RbbnNvcnRdLm1hc2sgPQorCQkJCSAgICBuZXRfbWFzayhzdGF0cC0+c29ydF9saXN0W25zb3J0XS5hZGRyKTsKKwkJCSAgICB9CisJCQkgICAgbnNvcnQrKzsKKwkJCX0KKwkJCSpjcCA9IG47CisJCSAgICB9CisJCSAgICBjb250aW51ZTsKKwkJfQorCQlpZiAoTUFUQ0goYnVmLCAib3B0aW9ucyIpKSB7CisJCSAgICByZXNfc2V0b3B0aW9ucyhzdGF0cCwgYnVmICsgc2l6ZW9mKCJvcHRpb25zIikgLSAxLCAiY29uZiIpOworCQkgICAgY29udGludWU7CisJCX0KKwkgICAgfQorCSAgICBpZiAobnNlcnYgPiAwKQorCQlzdGF0cC0+bnNjb3VudCA9IG5zZXJ2OworCSAgICBzdGF0cC0+bnNvcnQgPSBuc29ydDsKKwkgICAgKHZvaWQpIGZjbG9zZShmcCk7CisJfQorI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLworLyoKKyAqIExhc3QgY2hhbmNlIHRvIGdldCBhIG5hbWVzZXJ2ZXIuICBUaGlzIHNob3VsZCBub3Qgbm9ybWFsbHkKKyAqIGJlIG5lY2Vzc2FyeQorICovCisjaWZkZWYgTk9fUkVTT0xWX0NPTkYKKwlpZihuc2VydiA9PSAwKQorCQluc2VydiA9IGdldF9uYW1lc2VydmVycyhzdGF0cCk7CisjZW5kaWYKKworCWlmIChzdGF0cC0+ZGVmZG5hbWVbMF0gPT0gMCAmJgorCSAgICBnZXRob3N0bmFtZShidWYsIHNpemVvZihzdGF0cC0+ZGVmZG5hbWUpIC0gMSkgPT0gMCAmJgorCSAgICAoY3AgPSBzdHJjaHIoYnVmLCAnLicpKSAhPSBOVUxMKQorCQlzdHJjcHkoc3RhdHAtPmRlZmRuYW1lLCBjcCArIDEpOworCisJLyogZmluZCBjb21wb25lbnRzIG9mIGxvY2FsIGRvbWFpbiB0aGF0IG1pZ2h0IGJlIHNlYXJjaGVkICovCisJaWYgKGhhdmVzZWFyY2ggPT0gMCkgeworCQlwcCA9IHN0YXRwLT5kbnNyY2g7CisJCSpwcCsrID0gc3RhdHAtPmRlZmRuYW1lOworCQkqcHAgPSBOVUxMOworCisJCWRvdHMgPSAwOworCQlmb3IgKGNwID0gc3RhdHAtPmRlZmRuYW1lOyAqY3A7IGNwKyspCisJCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKKworCQljcCA9IHN0YXRwLT5kZWZkbmFtZTsKKwkJd2hpbGUgKHBwIDwgc3RhdHAtPmRuc3JjaCArIE1BWERGTFNSQ0gpIHsKKwkJCWlmIChkb3RzIDwgTE9DQUxET01BSU5QQVJUUykKKwkJCQlicmVhazsKKwkJCWNwID0gc3RyY2hyKGNwLCAnLicpICsgMTsgICAgLyogd2Uga25vdyB0aGVyZSBpcyBvbmUgKi8KKwkJCSpwcCsrID0gY3A7CisJCQlkb3RzLS07CisJCX0KKwkJKnBwID0gTlVMTDsKKyNpZmRlZiBERUJVRworCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHsKKwkJCXByaW50ZigiOzsgcmVzX2luaXQoKS4uLiBkZWZhdWx0IGRuc3JjaCBsaXN0OlxuIik7CisJCQlmb3IgKHBwID0gc3RhdHAtPmRuc3JjaDsgKnBwOyBwcCsrKQorCQkJCXByaW50ZigiOztcdCVzXG4iLCAqcHApOworCQkJcHJpbnRmKCI7O1x0Li5FTkQuLlxuIik7CisJCX0KKyNlbmRpZgorCX0KKworCWlmICgoY3AgPSBnZXRlbnYoIlJFU19PUFRJT05TIikpICE9IE5VTEwpCisJCXJlc19zZXRvcHRpb25zKHN0YXRwLCBjcCwgImVudiIpOworCWlmIChuc2VydiA+IDApIHsKKwkJc3RhdHAtPm5zY291bnQgPSBuc2VydjsKKwkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX0lOSVQ7CisJfQorCXJldHVybiAoMCk7Cit9CisKK3N0YXRpYyB2b2lkCityZXNfc2V0b3B0aW9ucyhyZXNfc3RhdGUgc3RhdHAsIGNvbnN0IGNoYXIgKm9wdGlvbnMsIGNvbnN0IGNoYXIgKnNvdXJjZSkKK3sKKwljb25zdCBjaGFyICpjcCA9IG9wdGlvbnM7CisJaW50IGk7CisJc3RydWN0IF9fcmVzX3N0YXRlX2V4dCAqZXh0ID0gc3RhdHAtPl91Ll9leHQuZXh0OworCisjaWZkZWYgREVCVUcKKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCXByaW50ZigiOzsgcmVzX3NldG9wdGlvbnMoXCIlc1wiLCBcIiVzXCIpLi4uXG4iLAorCQkgICAgICAgb3B0aW9ucywgc291cmNlKTsKKyNlbmRpZgorCXdoaWxlICgqY3ApIHsKKwkJLyogc2tpcCBsZWFkaW5nIGFuZCBpbm5lciBydW5zIG9mIHNwYWNlcyAqLworCQl3aGlsZSAoKmNwID09ICcgJyB8fCAqY3AgPT0gJ1x0JykKKwkJCWNwKys7CisJCS8qIHNlYXJjaCBmb3IgYW5kIHByb2Nlc3MgaW5kaXZpZHVhbCBvcHRpb25zICovCisJCWlmICghc3RybmNtcChjcCwgIm5kb3RzOiIsIHNpemVvZigibmRvdHM6IikgLSAxKSkgeworCQkJaSA9IGF0b2koY3AgKyBzaXplb2YoIm5kb3RzOiIpIC0gMSk7CisJCQlpZiAoaSA8PSBSRVNfTUFYTkRPVFMpCisJCQkJc3RhdHAtPm5kb3RzID0gaTsKKwkJCWVsc2UKKwkJCQlzdGF0cC0+bmRvdHMgPSBSRVNfTUFYTkRPVFM7CisjaWZkZWYgREVCVUcKKwkJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7XHRuZG90cz0lZFxuIiwgc3RhdHAtPm5kb3RzKTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAidGltZW91dDoiLCBzaXplb2YoInRpbWVvdXQ6IikgLSAxKSkgeworCQkJaSA9IGF0b2koY3AgKyBzaXplb2YoInRpbWVvdXQ6IikgLSAxKTsKKwkJCWlmIChpIDw9IFJFU19NQVhSRVRSQU5TKQorCQkJCXN0YXRwLT5yZXRyYW5zID0gaTsKKwkJCWVsc2UKKwkJCQlzdGF0cC0+cmV0cmFucyA9IFJFU19NQVhSRVRSQU5TOworI2lmZGVmIERFQlVHCisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7O1x0dGltZW91dD0lZFxuIiwgc3RhdHAtPnJldHJhbnMpOworI2VuZGlmCisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJhdHRlbXB0czoiLCBzaXplb2YoImF0dGVtcHRzOiIpIC0gMSkpeworCQkJaSA9IGF0b2koY3AgKyBzaXplb2YoImF0dGVtcHRzOiIpIC0gMSk7CisJCQlpZiAoaSA8PSBSRVNfTUFYUkVUUlkpCisJCQkJc3RhdHAtPnJldHJ5ID0gaTsKKwkJCWVsc2UKKwkJCQlzdGF0cC0+cmV0cnkgPSBSRVNfTUFYUkVUUlk7CisjaWZkZWYgREVCVUcKKwkJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCQlwcmludGYoIjs7XHRhdHRlbXB0cz0lZFxuIiwgc3RhdHAtPnJldHJ5KTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAiZGVidWciLCBzaXplb2YoImRlYnVnIikgLSAxKSkgeworI2lmZGVmIERFQlVHCisJCQlpZiAoIShzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykpIHsKKwkJCQlwcmludGYoIjs7IHJlc19zZXRvcHRpb25zKFwiJXNcIiwgXCIlc1wiKS4uXG4iLAorCQkJCSAgICAgICBvcHRpb25zLCBzb3VyY2UpOworCQkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19ERUJVRzsKKwkJCX0KKwkJCXByaW50ZigiOztcdGRlYnVnXG4iKTsKKyNlbmRpZgorCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAibm9fdGxkX3F1ZXJ5IiwKKwkJCQkgICAgc2l6ZW9mKCJub190bGRfcXVlcnkiKSAtIDEpIHx8CisJCQkgICAhc3RybmNtcChjcCwgIm5vLXRsZC1xdWVyeSIsCisJCQkJICAgIHNpemVvZigibm8tdGxkLXF1ZXJ5IikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PVExEUVVFUlk7CisJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJpbmV0NiIsIHNpemVvZigiaW5ldDYiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfVVNFX0lORVQ2OworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAicm90YXRlIiwgc2l6ZW9mKCJyb3RhdGUiKSAtIDEpKSB7CisJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfUk9UQVRFOworCQl9IGVsc2UgaWYgKCFzdHJuY21wKGNwLCAibm8tY2hlY2stbmFtZXMiLAorCQkJCSAgICBzaXplb2YoIm5vLWNoZWNrLW5hbWVzIikgLSAxKSkgeworCQkJc3RhdHAtPm9wdGlvbnMgfD0gUkVTX05PQ0hFQ0tOQU1FOworCQl9CisjaWZkZWYgUkVTX1VTRV9FRE5TMAorCQllbHNlIGlmICghc3RybmNtcChjcCwgImVkbnMwIiwgc2l6ZW9mKCJlZG5zMCIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19VU0VfRUROUzA7CisJCX0KKyNlbmRpZgorCQllbHNlIGlmICghc3RybmNtcChjcCwgImRuYW1lIiwgc2l6ZW9mKCJkbmFtZSIpIC0gMSkpIHsKKwkJCXN0YXRwLT5vcHRpb25zIHw9IFJFU19VU0VfRE5BTUU7CisJCX0KKwkJZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJuaWJibGU6Iiwgc2l6ZW9mKCJuaWJibGU6IikgLSAxKSkgeworCQkJaWYgKGV4dCA9PSBOVUxMKQorCQkJCWdvdG8gc2tpcDsKKwkJCWNwICs9IHNpemVvZigibmliYmxlOiIpIC0gMTsKKwkJCWkgPSBNSU4oc3RyY3NwbihjcCwgIiBcdCIpLCBzaXplb2YoZXh0LT5uc3VmZml4KSAtIDEpOworCQkJc3RybmNweShleHQtPm5zdWZmaXgsIGNwLCAoc2l6ZV90KWkpOworCQkJZXh0LT5uc3VmZml4W2ldID0gJ1wwJzsKKwkJfQorCQllbHNlIGlmICghc3RybmNtcChjcCwgIm5pYmJsZTI6Iiwgc2l6ZW9mKCJuaWJibGUyOiIpIC0gMSkpIHsKKwkJCWlmIChleHQgPT0gTlVMTCkKKwkJCQlnb3RvIHNraXA7CisJCQljcCArPSBzaXplb2YoIm5pYmJsZTI6IikgLSAxOworCQkJaSA9IE1JTihzdHJjc3BuKGNwLCAiIFx0IiksIHNpemVvZihleHQtPm5zdWZmaXgyKSAtIDEpOworCQkJc3RybmNweShleHQtPm5zdWZmaXgyLCBjcCwgKHNpemVfdClpKTsKKwkJCWV4dC0+bnN1ZmZpeDJbaV0gPSAnXDAnOworCQl9CisJCWVsc2UgaWYgKCFzdHJuY21wKGNwLCAidjZyZXZtb2RlOiIsIHNpemVvZigidjZyZXZtb2RlOiIpIC0gMSkpIHsKKwkJCWNwICs9IHNpemVvZigidjZyZXZtb2RlOiIpIC0gMTsKKwkJCS8qICJuaWJibGUiIGFuZCAiYml0c3RyaW5nIiB1c2VkIHRvIGJlIHZhbGlkICovCisJCQlpZiAoIXN0cm5jbXAoY3AsICJzaW5nbGUiLCBzaXplb2YoInNpbmdsZSIpIC0gMSkpIHsKKwkJCQlzdGF0cC0+b3B0aW9ucyB8PSBSRVNfTk9fTklCQkxFMjsKKwkJCX0gZWxzZSBpZiAoIXN0cm5jbXAoY3AsICJib3RoIiwgc2l6ZW9mKCJib3RoIikgLSAxKSkgeworCQkJCXN0YXRwLT5vcHRpb25zICY9CisJCQkJCSB+UkVTX05PX05JQkJMRTI7CisJCQl9CisJCX0KKwkJZWxzZSB7CisJCQkvKiBYWFggLSBwcmludCBhIHdhcm5pbmcgaGVyZT8gKi8KKwkJfQorICAgc2tpcDoKKwkJLyogc2tpcCB0byBuZXh0IHJ1biBvZiBzcGFjZXMgKi8KKwkJd2hpbGUgKCpjcCAmJiAqY3AgIT0gJyAnICYmICpjcCAhPSAnXHQnKQorCQkJY3ArKzsKKwl9Cit9CisKKy8qIFhYWCAtIHNob3VsZCByZWFsbHkgc3VwcG9ydCBDSURSIHdoaWNoIG1lYW5zIGV4cGxpY2l0IG1hc2tzIGFsd2F5cy4gKi8KK3N0YXRpYyB1X2ludDMyX3QKK25ldF9tYXNrKGluKQkJLyogWFhYIC0gc2hvdWxkIHJlYWxseSB1c2Ugc3lzdGVtJ3MgdmVyc2lvbiBvZiB0aGlzICovCisJc3RydWN0IGluX2FkZHIgaW47Cit7CisJcmVnaXN0ZXIgdV9pbnQzMl90IGkgPSBudG9obChpbi5zX2FkZHIpOworCisJaWYgKElOX0NMQVNTQShpKSkKKwkJcmV0dXJuIChodG9ubChJTl9DTEFTU0FfTkVUKSk7CisJZWxzZSBpZiAoSU5fQ0xBU1NCKGkpKQorCQlyZXR1cm4gKGh0b25sKElOX0NMQVNTQl9ORVQpKTsKKwlyZXR1cm4gKGh0b25sKElOX0NMQVNTQ19ORVQpKTsKK30KKwordV9pbnQKK3Jlc19yYW5kb21pZCh2b2lkKSB7CisJc3RydWN0IHRpbWV2YWwgbm93OworCisJZ2V0dGltZW9mZGF5KCZub3csIE5VTEwpOworCXJldHVybiAoMHhmZmZmICYgKG5vdy50dl9zZWMgXiBub3cudHZfdXNlYyBeIGdldHBpZCgpKSk7Cit9CisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgZm9yIGNsb3NpbmcgdGhlIHNvY2tldCBpZiBhIHZpcnR1YWwgY2lyY3VpdCBpcyB1c2VkIGFuZAorICogdGhlIHByb2dyYW0gd2FudHMgdG8gY2xvc2UgaXQuICBUaGlzIHByb3ZpZGVzIHN1cHBvcnQgZm9yIGVuZGhvc3RlbnQoKQorICogd2hpY2ggZXhwZWN0cyB0byBjbG9zZSB0aGUgc29ja2V0LgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBub3QgZXhwZWN0ZWQgdG8gYmUgdXNlciB2aXNpYmxlLgorICovCit2b2lkCityZXNfbmNsb3NlKHJlc19zdGF0ZSBzdGF0cCkgeworCWludCBuczsKKworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwKSB7CisJCSh2b2lkKSBjbG9zZShzdGF0cC0+X3Zjc29jayk7CisJCXN0YXRwLT5fdmNzb2NrID0gLTE7CisJCXN0YXRwLT5fZmxhZ3MgJj0gfihSRVNfRl9WQyB8IFJFU19GX0NPTk4pOworCX0KKwlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+X3UuX2V4dC5uc2NvdW50OyBucysrKSB7CisJCWlmIChzdGF0cC0+X3UuX2V4dC5uc3NvY2tzW25zXSAhPSAtMSkgeworCQkJKHZvaWQpIGNsb3NlKHN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdKTsKKwkJCXN0YXRwLT5fdS5fZXh0Lm5zc29ja3NbbnNdID0gLTE7CisJCX0KKwl9Cit9CisKK3ZvaWQKK3Jlc19uZGVzdHJveShyZXNfc3RhdGUgc3RhdHApIHsKKwlyZXNfbmNsb3NlKHN0YXRwKTsKKwlpZiAoc3RhdHAtPl91Ll9leHQuZXh0ICE9IE5VTEwpCisJCWZyZWUoc3RhdHAtPl91Ll9leHQuZXh0KTsKKwlzdGF0cC0+b3B0aW9ucyAmPSB+UkVTX0lOSVQ7CisJc3RhdHAtPl91Ll9leHQuZXh0ID0gTlVMTDsKK30KKworY29uc3QgY2hhciAqCityZXNfZ2V0X25pYmJsZXN1ZmZpeChyZXNfc3RhdGUgc3RhdHApIHsKKwlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQlyZXR1cm4gKHN0YXRwLT5fdS5fZXh0LmV4dC0+bnN1ZmZpeCk7CisJcmV0dXJuICgiaXA2LmFycGEiKTsKK30KKworY29uc3QgY2hhciAqCityZXNfZ2V0X25pYmJsZXN1ZmZpeDIocmVzX3N0YXRlIHN0YXRwKSB7CisJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJcmV0dXJuIChzdGF0cC0+X3UuX2V4dC5leHQtPm5zdWZmaXgyKTsKKwlyZXR1cm4gKCJpcDYuaW50Iik7Cit9CisKK3ZvaWQKK3Jlc19zZXRzZXJ2ZXJzKHJlc19zdGF0ZSBzdGF0cCwgY29uc3QgdW5pb24gcmVzX3NvY2thZGRyX3VuaW9uICpzZXQsIGludCBjbnQpIHsKKwlpbnQgaSwgbnNlcnY7CisJc2l6ZV90IHNpemU7CisKKwkvKiBjbG9zZSBvcGVuIHNlcnZlcnMgKi8KKwlyZXNfbmNsb3NlKHN0YXRwKTsKKworCS8qIGNhdXNlIHJ0dCB0aW1lcyB0byBiZSBmb3Jnb3R0ZW4gKi8KKwlzdGF0cC0+X3UuX2V4dC5uc2NvdW50ID0gMDsKKworCW5zZXJ2ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgY250ICYmIG5zZXJ2IDwgTUFYTlM7IGkrKykgeworCQlzd2l0Y2ggKHNldC0+c2luLnNpbl9mYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbik7CisJCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJCW1lbWNweSgmc3RhdHAtPl91Ll9leHQuZXh0LT5uc2FkZHJzW25zZXJ2XSwKKwkJCQkJJnNldC0+c2luLCBzaXplKTsKKwkJCWlmIChzaXplIDw9IHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkKKwkJCQltZW1jcHkoJnN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0sCisJCQkJCSZzZXQtPnNpbiwgc2l6ZSk7CisjaWZkZWYgbm90ZGVmCisJCQllbHNlCisJCQkJc3RhdHAtPm5zYWRkcl9saXN0W25zZXJ2XS5zaW5fZmFtaWx5ID0gMDsKKyNlbmRpZgorCQkJbnNlcnYrKzsKKwkJCWJyZWFrOworCisjaWZkZWYgSEFTX0lORVQ2X1NUUlVDVFMKKwkJY2FzZSBBRl9JTkVUNjoKKwkJCXNpemUgPSBzaXplb2Yoc2V0LT5zaW42KTsKKwkJCWlmIChzdGF0cC0+X3UuX2V4dC5leHQpCisJCQkJbWVtY3B5KCZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbbnNlcnZdLAorCQkJCQkmc2V0LT5zaW42LCBzaXplKTsKKwkJCWlmIChzaXplIDw9IHNpemVvZihzdGF0cC0+bnNhZGRyX2xpc3RbbnNlcnZdKSkKKwkJCQltZW1jcHkoJnN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0sCisJCQkJCSZzZXQtPnNpbjYsIHNpemUpOworCQkJZWxzZQorCQkJCXN0YXRwLT5uc2FkZHJfbGlzdFtuc2Vydl0uc2luX2ZhbWlseSA9IDA7CisJCQluc2VydisrOworCQkJYnJlYWs7CisjZW5kaWYKKworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKwkJc2V0Kys7CisJfQorCXN0YXRwLT5uc2NvdW50ID0gbnNlcnY7CisKK30KKworaW50CityZXNfZ2V0c2VydmVycyhyZXNfc3RhdGUgc3RhdHAsIHVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiAqc2V0LCBpbnQgY250KSB7CisJaW50IGk7CisJc2l6ZV90IHNpemU7CisJdV9pbnQxNl90IGZhbWlseTsKKworCWZvciAoaSA9IDA7IGkgPCBzdGF0cC0+bnNjb3VudCAmJiBpIDwgY250OyBpKyspIHsKKwkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCWZhbWlseSA9IHN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXS5zaW4uc2luX2ZhbWlseTsKKwkJZWxzZQorCQkJZmFtaWx5ID0gc3RhdHAtPm5zYWRkcl9saXN0W2ldLnNpbl9mYW1pbHk7CisKKwkJc3dpdGNoIChmYW1pbHkpIHsKKwkJY2FzZSBBRl9JTkVUOgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbik7CisJCQlpZiAoc3RhdHAtPl91Ll9leHQuZXh0KQorCQkJCW1lbWNweSgmc2V0LT5zaW4sCisJCQkJICAgICAgICZzdGF0cC0+X3UuX2V4dC5leHQtPm5zYWRkcnNbaV0sCisJCQkJICAgICAgIHNpemUpOworCQkJZWxzZQorCQkJCW1lbWNweSgmc2V0LT5zaW4sICZzdGF0cC0+bnNhZGRyX2xpc3RbaV0sCisJCQkJICAgICAgIHNpemUpOworCQkJYnJlYWs7CisKKyNpZmRlZiBIQVNfSU5FVDZfU1RSVUNUUworCQljYXNlIEFGX0lORVQ2OgorCQkJc2l6ZSA9IHNpemVvZihzZXQtPnNpbjYpOworCQkJaWYgKHN0YXRwLT5fdS5fZXh0LmV4dCkKKwkJCQltZW1jcHkoJnNldC0+c2luNiwKKwkJCQkgICAgICAgJnN0YXRwLT5fdS5fZXh0LmV4dC0+bnNhZGRyc1tpXSwKKwkJCQkgICAgICAgc2l6ZSk7CisJCQllbHNlCisJCQkJbWVtY3B5KCZzZXQtPnNpbjYsICZzdGF0cC0+bnNhZGRyX2xpc3RbaV0sCisJCQkJICAgICAgIHNpemUpOworCQkJYnJlYWs7CisjZW5kaWYKKworCQlkZWZhdWx0OgorCQkJc2V0LT5zaW4uc2luX2ZhbWlseSA9IDA7CisJCQlicmVhazsKKwkJfQorCQlzZXQrKzsKKwl9CisJcmV0dXJuIChzdGF0cC0+bnNjb3VudCk7Cit9CisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKK3N0YXRpYyBpbnQgX2dldF9kbnNfY2hhbmdlX2NvdW50KCkKK3sKKwlpZiAoZG5zX2NoYW5nZV9wcm9wID09IE5VTEwpIHsKKwkJZG5zX2NoYW5nZV9wcm9wID0gX19zeXN0ZW1fcHJvcGVydHlfZmluZChETlNfQ0hBTkdFX1BST1BfTkFNRSk7CisJfQorCWlmIChkbnNfY2hhbmdlX3Byb3AgIT0gTlVMTCkgeworCQljaGFyIHByb3B2YWx1ZVtQUk9QX1ZBTFVFX01BWF07CisJCWlmIChfX3N5c3RlbV9wcm9wZXJ0eV9yZWFkKGRuc19jaGFuZ2VfcHJvcCwgTlVMTCwgcHJvcHZhbHVlKSA+PSAxKSB7CisJCQlyZXR1cm4gYXRvaShwcm9wdmFsdWUpOworCQl9CisJfQorCXJldHVybiAtMTsKK30KKworaW50IHJlc19nZXRfZG5zX2NoYW5nZWQoKQoreworCWludCBjaGFuZ2VfY291bnQ7CisKKwljaGFuZ2VfY291bnQgPSBfZ2V0X2Ruc19jaGFuZ2VfY291bnQoKTsKKwlpZiAoY2hhbmdlX2NvdW50ICE9IGRuc19sYXN0X2NoYW5nZV9jb3VudGVyKSB7CisJCWlmIChjaGFuZ2VfY291bnQgIT0gLTEpIHsKKwkJCWRuc19sYXN0X2NoYW5nZV9jb3VudGVyID0gY2hhbmdlX2NvdW50OworCQl9CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCXJldHVybiAwOworCX0KK30KKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfbWtxdWVyeS5jIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19ta3F1ZXJ5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI0ZGU3ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfbWtxdWVyeS5jCkBAIC0wLDAgKzEsMjc2IEBACisvKgkkTmV0QlNEOiByZXNfbWtxdWVyeS5jLHYgMS42IDIwMDYvMDEvMjQgMTc6NDA6MzIgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwOCAgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0IChxdWVyeSBpZCByYW5kb21pemF0aW9uKQorICogQ29weXJpZ2h0IChjKSAxOTg1LCAxOTkzCisgKiAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogCVRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YKKyAqIAlDYWxpZm9ybmlhLCBCZXJrZWxleSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5MyBieSBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbi4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMsIGFuZCB0aGF0CisgKiB0aGUgbmFtZSBvZiBEaWdpdGFsIEVxdWlwbWVudCBDb3Jwb3JhdGlvbiBub3QgYmUgdXNlZCBpbiBhZHZlcnRpc2luZyBvcgorICogcHVibGljaXR5IHBlcnRhaW5pbmcgdG8gZGlzdHJpYnV0aW9uIG9mIHRoZSBkb2N1bWVudCBvciBzb2Z0d2FyZSB3aXRob3V0CisgKiBzcGVjaWZpYywgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBESUdJVEFMIEVRVUlQTUVOVCBDT1JQLiBESVNDTEFJTVMgQUxMCisgKiBXQVJSQU5USUVTIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUsIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTCisgKiBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuICAgSU4gTk8gRVZFTlQgU0hBTEwgRElHSVRBTCBFUVVJUE1FTlQKKyAqIENPUlBPUkFUSU9OIEJFIExJQUJMRSBGT1IgQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMgV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUgorICogUFJPRklUUywgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMKKyAqIEFDVElPTiwgQVJJU0lORyBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUworICogU09GVFdBUkUuCisgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk2LTE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKyNpZiBkZWZpbmVkKExJQkNfU0NDUykgJiYgIWRlZmluZWQobGludCkKKyNpZmRlZiBub3RkZWYKK3N0YXRpYyBjb25zdCBjaGFyIHNjY3NpZFtdID0gIkAoIylyZXNfbWtxdWVyeS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfbWtxdWVyeS5jLHYgMS4xLjIuMi40LjIgMjAwNC8wMy8xNiAxMjozNDoxOCBtYXJrYSBFeHAiOworI2Vsc2UKK19fUkNTSUQoIiROZXRCU0Q6IHJlc19ta3F1ZXJ5LmMsdiAxLjYgMjAwNi8wMS8yNCAxNzo0MDozMiBjaHJpc3RvcyBFeHAgJCIpOworI2VuZGlmCisjZW5kaWYgLyogTElCQ19TQ0NTIGFuZCBub3QgbGludCAqLworCisKKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9wYXJhbS5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KKyNpbmNsdWRlICJhcnBhX25hbWVzZXIuaCIKKyNpbmNsdWRlIDxuZXRkYi5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyogT3B0aW9ucy4gIExlYXZlIHRoZW0gb24uICovCisjaWZuZGVmIERFQlVHCisjZGVmaW5lIERFQlVHCisjZW5kaWYKKworI2lmbmRlZiBsaW50CisjZGVmaW5lIFVOVVNFRChhKQkodm9pZCkmYQorI2Vsc2UKKyNkZWZpbmUgVU5VU0VEKGEpCWEgPSBhCisjZW5kaWYKKworZXh0ZXJuIGNvbnN0IGNoYXIgKl9yZXNfb3Bjb2Rlc1tdOworCisvKgorICogRm9ybSBhbGwgdHlwZXMgb2YgcXVlcmllcy4KKyAqIFJldHVybnMgdGhlIHNpemUgb2YgdGhlIHJlc3VsdCBvciAtMS4KKyAqLworaW50CityZXNfbm1rcXVlcnkocmVzX3N0YXRlIHN0YXRwLAorCSAgICAgaW50IG9wLAkJCS8qIG9wY29kZSBvZiBxdWVyeSAqLworCSAgICAgY29uc3QgY2hhciAqZG5hbWUsCQkvKiBkb21haW4gbmFtZSAqLworCSAgICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgICAgIGNvbnN0IHVfY2hhciAqZGF0YSwJLyogcmVzb3VyY2UgcmVjb3JkIGRhdGEgKi8KKwkgICAgIGludCBkYXRhbGVuLAkJLyogbGVuZ3RoIG9mIGRhdGEgKi8KKwkgICAgIGNvbnN0IHVfY2hhciAqbmV3cnJfaW4sCS8qIG5ldyByciBmb3IgbW9kaWZ5IG9yIGFwcGVuZCAqLworCSAgICAgdV9jaGFyICpidWYsCQkvKiBidWZmZXIgdG8gcHV0IHF1ZXJ5ICovCisJICAgICBpbnQgYnVmbGVuKQkJLyogc2l6ZSBvZiBidWZmZXIgKi8KK3sKKwlyZWdpc3RlciBIRUFERVIgKmhwOworCXJlZ2lzdGVyIHVfY2hhciAqY3AsICplcDsKKwlyZWdpc3RlciBpbnQgbjsKKwl1X2NoYXIgKmRucHRyc1syMF0sICoqZHBwLCAqKmxhc3RkbnB0cjsKKworCVVOVVNFRChuZXdycl9pbik7CisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfbm1rcXVlcnkoJXMsICVzLCAlcywgJXMpXG4iLAorCQkgICAgICAgX3Jlc19vcGNvZGVzW29wXSwgZG5hbWUsIHBfY2xhc3MoY2xhc3MpLCBwX3R5cGUodHlwZSkpOworI2VuZGlmCisJLyoKKwkgKiBJbml0aWFsaXplIGhlYWRlciBmaWVsZHMuCisJICovCisJaWYgKChidWYgPT0gTlVMTCkgfHwgKGJ1ZmxlbiA8IEhGSVhFRFNaKSkKKwkJcmV0dXJuICgtMSk7CisJbWVtc2V0KGJ1ZiwgMCwgSEZJWEVEU1opOworCWhwID0gKEhFQURFUiAqKSh2b2lkICopYnVmOworCWhwLT5pZCA9IGh0b25zKHJlc19yYW5kb21pZCgpKTsKKwlocC0+b3Bjb2RlID0gb3A7CisJaHAtPnJkID0gKHN0YXRwLT5vcHRpb25zICYgUkVTX1JFQ1VSU0UpICE9IDBVOworCWhwLT5yY29kZSA9IE5PRVJST1I7CisJY3AgPSBidWYgKyBIRklYRURTWjsKKwllcCA9IGJ1ZiArIGJ1ZmxlbjsKKwlkcHAgPSBkbnB0cnM7CisJKmRwcCsrID0gYnVmOworCSpkcHArKyA9IE5VTEw7CisJbGFzdGRucHRyID0gZG5wdHJzICsgc2l6ZW9mIGRucHRycyAvIHNpemVvZiBkbnB0cnNbMF07CisJLyoKKwkgKiBwZXJmb3JtIG9wY29kZSBzcGVjaWZpYyBwcm9jZXNzaW5nCisJICovCisJc3dpdGNoIChvcCkgeworCWNhc2UgUVVFUlk6CS8qRkFMTFRIUk9VR0gqLworCWNhc2UgTlNfTk9USUZZX09QOgorCQlpZiAoZXAgLSBjcCA8IFFGSVhFRFNaKQorCQkJcmV0dXJuICgtMSk7CisJCWlmICgobiA9IGRuX2NvbXAoZG5hbWUsIGNwLCBlcCAtIGNwIC0gUUZJWEVEU1osIGRucHRycywKKwkJICAgIGxhc3RkbnB0cikpIDwgMCkKKwkJCXJldHVybiAoLTEpOworCQljcCArPSBuOworCQluc19wdXQxNih0eXBlLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCW5zX3B1dDE2KGNsYXNzLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCWhwLT5xZGNvdW50ID0gaHRvbnMoMSk7CisJCWlmIChvcCA9PSBRVUVSWSB8fCBkYXRhID09IE5VTEwpCisJCQlicmVhazsKKwkJLyoKKwkJICogTWFrZSBhbiBhZGRpdGlvbmFsIHJlY29yZCBmb3IgY29tcGxldGlvbiBkb21haW4uCisJCSAqLworCQlpZiAoKGVwIC0gY3ApIDwgUlJGSVhFRFNaKQorCQkJcmV0dXJuICgtMSk7CisJCW4gPSBkbl9jb21wKChjb25zdCBjaGFyICopZGF0YSwgY3AsIGVwIC0gY3AgLSBSUkZJWEVEU1osCisJCQkgICAgZG5wdHJzLCBsYXN0ZG5wdHIpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJY3AgKz0gbjsKKwkJbnNfcHV0MTYoVF9OVUxMLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCW5zX3B1dDE2KGNsYXNzLCBjcCk7CisJCWNwICs9IElOVDE2U1o7CisJCW5zX3B1dDMyKDAsIGNwKTsKKwkJY3AgKz0gSU5UMzJTWjsKKwkJbnNfcHV0MTYoMCwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQlocC0+YXJjb3VudCA9IGh0b25zKDEpOworCQlicmVhazsKKworCWNhc2UgSVFVRVJZOgorCQkvKgorCQkgKiBJbml0aWFsaXplIGFuc3dlciBzZWN0aW9uCisJCSAqLworCQlpZiAoZXAgLSBjcCA8IDEgKyBSUkZJWEVEU1ogKyBkYXRhbGVuKQorCQkJcmV0dXJuICgtMSk7CisJCSpjcCsrID0gJ1wwJzsJLyogbm8gZG9tYWluIG5hbWUgKi8KKwkJbnNfcHV0MTYodHlwZSwgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQxNihjbGFzcywgY3ApOworCQljcCArPSBJTlQxNlNaOworCQluc19wdXQzMigwLCBjcCk7CisJCWNwICs9IElOVDMyU1o7CisJCW5zX3B1dDE2KGRhdGFsZW4sIGNwKTsKKwkJY3AgKz0gSU5UMTZTWjsKKwkJaWYgKGRhdGFsZW4pIHsKKwkJCW1lbWNweShjcCwgZGF0YSwgKHNpemVfdClkYXRhbGVuKTsKKwkJCWNwICs9IGRhdGFsZW47CisJCX0KKwkJaHAtPmFuY291bnQgPSBodG9ucygxKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gKC0xKTsKKwl9CisJcmV0dXJuIChjcCAtIGJ1Zik7Cit9CisKKyNpZmRlZiBSRVNfVVNFX0VETlMwCisvKiBhdHRhY2ggT1BUIHBzZXVkby1SUiwgYXMgZG9jdW1lbnRlZCBpbiBSRkMyNjcxIChFRE5TMCkuICovCisjaWZuZGVmIFRfT1BUCisjZGVmaW5lIFRfT1BUCTQxCisjZW5kaWYKKworaW50CityZXNfbm9wdChyZXNfc3RhdGUgc3RhdHAsCisJIGludCBuMCwJCS8qIGN1cnJlbnQgb2Zmc2V0IGluIGJ1ZmZlciAqLworCSB1X2NoYXIgKmJ1ZiwJCS8qIGJ1ZmZlciB0byBwdXQgcXVlcnkgKi8KKwkgaW50IGJ1ZmxlbiwJCS8qIHNpemUgb2YgYnVmZmVyICovCisJIGludCBhbnNsZW4pCQkvKiBVRFAgYW5zd2VyIGJ1ZmZlciBzaXplICovCit7CisJcmVnaXN0ZXIgSEVBREVSICpocDsKKwlyZWdpc3RlciB1X2NoYXIgKmNwLCAqZXA7CisJdV9pbnQxNl90IGZsYWdzID0gMDsKKworI2lmZGVmIERFQlVHCisJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgIT0gMFUpCisJCXByaW50ZigiOzsgcmVzX25vcHQoKVxuIik7CisjZW5kaWYKKworCWhwID0gKEhFQURFUiAqKSh2b2lkICopYnVmOworCWNwID0gYnVmICsgbjA7CisJZXAgPSBidWYgKyBidWZsZW47CisKKwlpZiAoKGVwIC0gY3ApIDwgMSArIFJSRklYRURTWikKKwkJcmV0dXJuICgtMSk7CisKKwkqY3ArKyA9IDA7CS8qICIuIiAqLworCisJbnNfcHV0MTYoVF9PUFQsIGNwKTsJLyogVFlQRSAqLworCWNwICs9IElOVDE2U1o7CisJbnNfcHV0MTYoYW5zbGVuICYgMHhmZmZmLCBjcCk7CS8qIENMQVNTID0gVURQIHBheWxvYWQgc2l6ZSAqLworCWNwICs9IElOVDE2U1o7CisJKmNwKysgPSBOT0VSUk9SOwkvKiBleHRlbmRlZCBSQ09ERSAqLworCSpjcCsrID0gMDsJCS8qIEVETlMgdmVyc2lvbiAqLworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19VU0VfRE5TU0VDKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJcHJpbnRmKCI7OyByZXNfb3B0KCkuLi4gRU5EUzAgRE5TU0VDXG4iKTsKKyNlbmRpZgorCQlmbGFncyB8PSBOU19PUFRfRE5TU0VDX09LOworCX0KKwluc19wdXQxNihmbGFncywgY3ApOworCWNwICs9IElOVDE2U1o7CisJbnNfcHV0MTYoMCwgY3ApOwkvKiBSRExFTiAqLworCWNwICs9IElOVDE2U1o7CisJaHAtPmFyY291bnQgPSBodG9ucyhudG9ocyhocC0+YXJjb3VudCkgKyAxKTsKKworCXJldHVybiAoY3AgLSBidWYpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3ByaXZhdGUuaCBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzNDE5MTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3ByaXZhdGUuaApAQCAtMCwwICsxLDIyIEBACisvKgkkTmV0QlNEOiByZXNfcHJpdmF0ZS5oLHYgMS4xLjEuMSAyMDA0LzA1LzIwIDE3OjE4OjU0IGNocmlzdG9zIEV4cCAkCSovCisKKyNpZm5kZWYgcmVzX3ByaXZhdGVfaAorI2RlZmluZSByZXNfcHJpdmF0ZV9oCisKK3N0cnVjdCBfX3Jlc19zdGF0ZV9leHQgeworCXVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiBuc2FkZHJzW01BWE5TXTsKKwlzdHJ1Y3Qgc29ydF9saXN0IHsKKwkJaW50ICAgICBhZjsKKwkJdW5pb24geworCQkJc3RydWN0IGluX2FkZHIgIGluYTsKKwkJCXN0cnVjdCBpbjZfYWRkciBpbjZhOworCQl9IGFkZHIsIG1hc2s7CisJfSBzb3J0X2xpc3RbTUFYUkVTT0xWU09SVF07CisJY2hhciBuc3VmZml4WzY0XTsKKwljaGFyIG5zdWZmaXgyWzY0XTsKK307CisKK2V4dGVybiBpbnQKK3Jlc19vdXJzZXJ2ZXJfcChjb25zdCByZXNfc3RhdGUgc3RhdHAsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2EpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcXVlcnkuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcXVlcnkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZTEzMjFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19xdWVyeS5jCkBAIC0wLDAgKzEsNDE1IEBACisvKgkkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19xdWVyeS5jCTguMSAoQmVya2VsZXkpIDYvNC85MyI7CitzdGF0aWMgY29uc3QgY2hhciByY3NpZFtdID0gIklkOiByZXNfcXVlcnkuYyx2IDEuMi4yLjMuNC4yIDIwMDQvMDMvMTYgMTI6MzQ6MTkgbWFya2EgRXhwIjsKKyNlbHNlCitfX1JDU0lEKCIkTmV0QlNEOiByZXNfcXVlcnkuYyx2IDEuNyAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPGFycGEvaW5ldC5oPgorI2luY2x1ZGUgImFycGFfbmFtZXNlci5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxuZXRkYi5oPgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2luY2x1ZGUgInJlc29sdl9wcml2YXRlLmgiCisjZWxzZQorI2luY2x1ZGUgPHJlc29sdi5oPgorI2VuZGlmCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2RlZmluZSBESVNBQkxFX0hPU1RfQUxJQVMgMQorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorCisjaWYgUEFDS0VUU1ogPiAxMDI0CisjZGVmaW5lIE1BWFBBQ0tFVAlQQUNLRVRTWgorI2Vsc2UKKyNkZWZpbmUgTUFYUEFDS0VUCTEwMjQKKyNlbmRpZgorCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgYXdhaXQgYW5zd2VyLgorICogUmV0dXJuZWQgYW5zd2VyIGlzIHBsYWNlZCBpbiBzdXBwbGllZCBidWZmZXIgImFuc3dlciIuCisgKiBQZXJmb3JtIHByZWxpbWluYXJ5IGNoZWNrIG9mIGFuc3dlciwgcmV0dXJuaW5nIHN1Y2Nlc3Mgb25seQorICogaWYgbm8gZXJyb3IgaXMgaW5kaWNhdGVkIGFuZCB0aGUgYW5zd2VyIGNvdW50IGlzIG5vbnplcm8uCisgKiBSZXR1cm4gdGhlIHNpemUgb2YgdGhlIHJlc3BvbnNlIG9uIHN1Y2Nlc3MsIC0xIG9uIGVycm9yLgorICogRXJyb3IgbnVtYmVyIGlzIGxlZnQgaW4gSF9FUlJOTy4KKyAqCisgKiBDYWxsZXIgbXVzdCBwYXJzZSBhbnN3ZXIgYW5kIGRldGVybWluZSB3aGV0aGVyIGl0IGFuc3dlcnMgdGhlIHF1ZXN0aW9uLgorICovCitpbnQKK3Jlc19ucXVlcnkocmVzX3N0YXRlIHN0YXRwLAorCSAgIGNvbnN0IGNoYXIgKm5hbWUsCS8qIGRvbWFpbiBuYW1lICovCisJICAgaW50IGNsYXNzLCBpbnQgdHlwZSwJLyogY2xhc3MgYW5kIHR5cGUgb2YgcXVlcnkgKi8KKwkgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkgICBpbnQgYW5zbGVuKQkJLyogc2l6ZSBvZiBhbnN3ZXIgYnVmZmVyICovCit7CisJdV9jaGFyIGJ1ZltNQVhQQUNLRVRdOworCUhFQURFUiAqaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnN3ZXI7CisJaW50IG47CisJdV9pbnQgb2ZsYWdzOworCisJb2ZsYWdzID0gc3RhdHAtPl9mbGFnczsKKworYWdhaW46CisJaHAtPnJjb2RlID0gTk9FUlJPUjsJLyogZGVmYXVsdCAqLworCisjaWZkZWYgREVCVUcKKwlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCXByaW50ZigiOzsgcmVzX3F1ZXJ5KCVzLCAlZCwgJWQpXG4iLCBuYW1lLCBjbGFzcywgdHlwZSk7CisjZW5kaWYKKworCW4gPSByZXNfbm1rcXVlcnkoc3RhdHAsIFFVRVJZLCBuYW1lLCBjbGFzcywgdHlwZSwgTlVMTCwgMCwgTlVMTCwKKwkJCSBidWYsIHNpemVvZihidWYpKTsKKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJaWYgKG4gPiAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfRUROUzBFUlIpID09IDAgJiYKKwkgICAgKHN0YXRwLT5vcHRpb25zICYgKFJFU19VU0VfRUROUzB8UkVTX1VTRV9ETlNTRUMpKSAhPSAwVSkKKwkJbiA9IHJlc19ub3B0KHN0YXRwLCBuLCBidWYsIHNpemVvZihidWYpLCBhbnNsZW4pOworI2VuZGlmCisJaWYgKG4gPD0gMCkgeworI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBta3F1ZXJ5IGZhaWxlZFxuIik7CisjZW5kaWYKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCXJldHVybiAobik7CisJfQorCW4gPSByZXNfbnNlbmQoc3RhdHAsIGJ1ZiwgbiwgYW5zd2VyLCBhbnNsZW4pOworCWlmIChuIDwgMCkgeworI2lmZGVmIFJFU19VU0VfRUROUzAKKwkJLyogaWYgdGhlIHF1ZXJ5IGNob2tlZCB3aXRoIEVETlMwLCByZXRyeSB3aXRob3V0IEVETlMwICovCisJCWlmICgoc3RhdHAtPm9wdGlvbnMgJiAoUkVTX1VTRV9FRE5TMHxSRVNfVVNFX0ROU1NFQykpICE9IDBVICYmCisJCSAgICAoKG9mbGFncyBeIHN0YXRwLT5fZmxhZ3MpICYgUkVTX0ZfRUROUzBFUlIpICE9IDApIHsKKwkJCXN0YXRwLT5fZmxhZ3MgfD0gUkVTX0ZfRUROUzBFUlI7CisJCQlpZiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpCisJCQkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5OiByZXRyeSB3aXRob3V0IEVETlMwXG4iKTsKKwkJCWdvdG8gYWdhaW47CisJCX0KKyNlbmRpZgorI2lmZGVmIERFQlVHCisJCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJCXByaW50ZigiOzsgcmVzX3F1ZXJ5OiBzZW5kIGVycm9yXG4iKTsKKyNlbmRpZgorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJCXJldHVybiAobik7CisJfQorCisJaWYgKGhwLT5yY29kZSAhPSBOT0VSUk9SIHx8IG50b2hzKGhwLT5hbmNvdW50KSA9PSAwKSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKQorCQkJcHJpbnRmKCI7OyByY29kZSA9ICglcyksIGNvdW50cyA9IGFuOiVkIG5zOiVkIGFyOiVkXG4iLAorCQkJICAgICAgIHBfcmNvZGUoaHAtPnJjb2RlKSwKKwkJCSAgICAgICBudG9ocyhocC0+YW5jb3VudCksCisJCQkgICAgICAgbnRvaHMoaHAtPm5zY291bnQpLAorCQkJICAgICAgIG50b2hzKGhwLT5hcmNvdW50KSk7CisjZW5kaWYKKwkJc3dpdGNoIChocC0+cmNvZGUpIHsKKwkJY2FzZSBOWERPTUFJTjoKKwkJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgSE9TVF9OT1RfRk9VTkQpOworCQkJYnJlYWs7CisJCWNhc2UgU0VSVkZBSUw6CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJCQlicmVhazsKKwkJY2FzZSBOT0VSUk9SOgorCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19EQVRBKTsKKwkJCWJyZWFrOworCQljYXNlIEZPUk1FUlI6CisJCWNhc2UgTk9USU1QOgorCQljYXNlIFJFRlVTRUQ6CisJCWRlZmF1bHQ6CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJCWJyZWFrOworCQl9CisJCXJldHVybiAoLTEpOworCX0KKwlyZXR1cm4gKG4pOworfQorCisvKgorICogRm9ybXVsYXRlIGEgbm9ybWFsIHF1ZXJ5LCBzZW5kLCBhbmQgcmV0cmlldmUgYW5zd2VyIGluIHN1cHBsaWVkIGJ1ZmZlci4KKyAqIFJldHVybiB0aGUgc2l6ZSBvZiB0aGUgcmVzcG9uc2Ugb24gc3VjY2VzcywgLTEgb24gZXJyb3IuCisgKiBJZiBlbmFibGVkLCBpbXBsZW1lbnQgc2VhcmNoIHJ1bGVzIHVudGlsIGFuc3dlciBvciB1bnJlY292ZXJhYmxlIGZhaWx1cmUKKyAqIGlzIGRldGVjdGVkLiAgRXJyb3IgY29kZSwgaWYgYW55LCBpcyBsZWZ0IGluIEhfRVJSTk8uCisgKi8KK2ludAorcmVzX25zZWFyY2gocmVzX3N0YXRlIHN0YXRwLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAkvKiBkb21haW4gbmFtZSAqLworCSAgICBpbnQgY2xhc3MsIGludCB0eXBlLAkvKiBjbGFzcyBhbmQgdHlwZSBvZiBxdWVyeSAqLworCSAgICB1X2NoYXIgKmFuc3dlciwJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJY29uc3QgY2hhciAqY3AsICogY29uc3QgKmRvbWFpbjsKKwlIRUFERVIgKmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zd2VyOworCWNoYXIgdG1wW05TX01BWEROQU1FXTsKKwl1X2ludCBkb3RzOworCWludCB0cmFpbGluZ19kb3QsIHJldCwgc2F2ZWRfaGVycm5vOworCWludCBnb3Rfbm9kYXRhID0gMCwgZ290X3NlcnZmYWlsID0gMCwgcm9vdF9vbl9saXN0ID0gMDsKKwlpbnQgdHJpZWRfYXNfaXMgPSAwOworCWludCBzZWFyY2hlZCA9IDA7CisKKwllcnJubyA9IDA7CisJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBIT1NUX05PVF9GT1VORCk7ICAvKiBUcnVlIGlmIHdlIG5ldmVyIHF1ZXJ5LiAqLworCisJZG90cyA9IDA7CisJZm9yIChjcCA9IG5hbWU7ICpjcCAhPSAnXDAnOyBjcCsrKQorCQlkb3RzICs9ICgqY3AgPT0gJy4nKTsKKwl0cmFpbGluZ19kb3QgPSAwOworCWlmIChjcCA+IG5hbWUgJiYgKi0tY3AgPT0gJy4nKQorCQl0cmFpbGluZ19kb3QrKzsKKworCS8qIElmIHRoZXJlIGFyZW4ndCBhbnkgZG90cywgaXQgY291bGQgYmUgYSB1c2VyLWxldmVsIGFsaWFzLiAqLworCWlmICghZG90cyAmJiAoY3AgPSByZXNfaG9zdGFsaWFzKHN0YXRwLCBuYW1lLCB0bXAsIHNpemVvZiB0bXApKSE9IE5VTEwpCisJCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgY3AsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworCisJLyoKKwkgKiBJZiB0aGVyZSBhcmUgZW5vdWdoIGRvdHMgaW4gdGhlIG5hbWUsIGxldCdzIGp1c3QgZ2l2ZSBpdCBhCisJICogdHJ5ICdhcyBpcycuIFRoZSB0aHJlc2hvbGQgY2FuIGJlIHNldCB3aXRoIHRoZSAibmRvdHMiIG9wdGlvbi4KKwkgKiBBbHNvLCBxdWVyeSAnYXMgaXMnLCBpZiB0aGVyZSBpcyBhIHRyYWlsaW5nIGRvdCBpbiB0aGUgbmFtZS4KKwkgKi8KKwlzYXZlZF9oZXJybm8gPSAtMTsKKwlpZiAoZG90cyA+PSBzdGF0cC0+bmRvdHMgfHwgdHJhaWxpbmdfZG90KSB7CisJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsIE5VTEwsIGNsYXNzLCB0eXBlLAorCQkJCQkgYW5zd2VyLCBhbnNsZW4pOworCQlpZiAocmV0ID4gMCB8fCB0cmFpbGluZ19kb3QpCisJCQlyZXR1cm4gKHJldCk7CisJCXNhdmVkX2hlcnJubyA9IHN0YXRwLT5yZXNfaF9lcnJubzsKKwkJdHJpZWRfYXNfaXMrKzsKKwl9CisKKwkvKgorCSAqIFdlIGRvIGF0IGxlYXN0IG9uZSBsZXZlbCBvZiBzZWFyY2ggaWYKKwkgKgktIHRoZXJlIGlzIG5vIGRvdCBhbmQgUkVTX0RFRk5BTUUgaXMgc2V0LCBvcgorCSAqCS0gdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGRvdCwgdGhlcmUgaXMgbm8gdHJhaWxpbmcgZG90LAorCSAqCSAgYW5kIFJFU19ETlNSQ0ggaXMgc2V0LgorCSAqLworCWlmICgoIWRvdHMgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFRk5BTUVTKSAhPSAwVSkgfHwKKwkgICAgKGRvdHMgJiYgIXRyYWlsaW5nX2RvdCAmJiAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfRE5TUkNIKSAhPSAwVSkpIHsKKwkJaW50IGRvbmUgPSAwOworCisJCWZvciAoZG9tYWluID0gKGNvbnN0IGNoYXIgKiBjb25zdCAqKXN0YXRwLT5kbnNyY2g7CisJCSAgICAgKmRvbWFpbiAmJiAhZG9uZTsKKwkJICAgICBkb21haW4rKykgeworCQkJc2VhcmNoZWQgPSAxOworCisJCQlpZiAoZG9tYWluWzBdWzBdID09ICdcMCcgfHwKKwkJCSAgICAoZG9tYWluWzBdWzBdID09ICcuJyAmJiBkb21haW5bMF1bMV0gPT0gJ1wwJykpCisJCQkJcm9vdF9vbl9saXN0Kys7CisKKwkJCXJldCA9IHJlc19ucXVlcnlkb21haW4oc3RhdHAsIG5hbWUsICpkb21haW4sCisJCQkJCSAgICAgICBjbGFzcywgdHlwZSwKKwkJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJCWlmIChyZXQgPiAwKQorCQkJCXJldHVybiAocmV0KTsKKworCQkJLyoKKwkJCSAqIElmIG5vIHNlcnZlciBwcmVzZW50LCBnaXZlIHVwLgorCQkJICogSWYgbmFtZSBpc24ndCBmb3VuZCBpbiB0aGlzIGRvbWFpbiwKKwkJCSAqIGtlZXAgdHJ5aW5nIGhpZ2hlciBkb21haW5zIGluIHRoZSBzZWFyY2ggbGlzdAorCQkJICogKGlmIHRoYXQncyBlbmFibGVkKS4KKwkJCSAqIE9uIGEgTk9fREFUQSBlcnJvciwga2VlcCB0cnlpbmcsIG90aGVyd2lzZQorCQkJICogYSB3aWxkY2FyZCBlbnRyeSBvZiBhbm90aGVyIHR5cGUgY291bGQga2VlcCB1cworCQkJICogZnJvbSBmaW5kaW5nIHRoaXMgZW50cnkgaGlnaGVyIGluIHRoZSBkb21haW4uCisJCQkgKiBJZiB3ZSBnZXQgc29tZSBvdGhlciBlcnJvciAobmVnYXRpdmUgYW5zd2VyIG9yCisJCQkgKiBzZXJ2ZXIgZmFpbHVyZSksIHRoZW4gc3RvcCBzZWFyY2hpbmcgdXAsCisJCQkgKiBidXQgdHJ5IHRoZSBpbnB1dCBuYW1lIGJlbG93IGluIGNhc2UgaXQncworCQkJICogZnVsbHktcXVhbGlmaWVkLgorCQkJICovCisJCQlpZiAoZXJybm8gPT0gRUNPTk5SRUZVU0VEKSB7CisJCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBUUllfQUdBSU4pOworCQkJCXJldHVybiAoLTEpOworCQkJfQorCisJCQlzd2l0Y2ggKHN0YXRwLT5yZXNfaF9lcnJubykgeworCQkJY2FzZSBOT19EQVRBOgorCQkJCWdvdF9ub2RhdGErKzsKKwkJCQkvKiBGQUxMVEhST1VHSCAqLworCQkJY2FzZSBIT1NUX05PVF9GT1VORDoKKwkJCQkvKiBrZWVwIHRyeWluZyAqLworCQkJCWJyZWFrOworCQkJY2FzZSBUUllfQUdBSU46CisJCQkJaWYgKGhwLT5yY29kZSA9PSBTRVJWRkFJTCkgeworCQkJCQkvKiB0cnkgbmV4dCBzZWFyY2ggZWxlbWVudCwgaWYgYW55ICovCisJCQkJCWdvdF9zZXJ2ZmFpbCsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJCWRlZmF1bHQ6CisJCQkJLyogYW55dGhpbmcgZWxzZSBpbXBsaWVzIHRoYXQgd2UncmUgZG9uZSAqLworCQkJCWRvbmUrKzsKKwkJCX0KKworCQkJLyogaWYgd2UgZ290IGhlcmUgZm9yIHNvbWUgcmVhc29uIG90aGVyIHRoYW4gRE5TUkNILAorCQkJICogd2Ugb25seSB3YW50ZWQgb25lIGl0ZXJhdGlvbiBvZiB0aGUgbG9vcCwgc28gc3RvcC4KKwkJCSAqLworCQkJaWYgKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ETlNSQ0gpID09IDBVKQorCQkJCWRvbmUrKzsKKwkJfQorCX0KKworCS8qCisJICogSWYgdGhlIHF1ZXJ5IGhhcyBub3QgYWxyZWFkeSBiZWVuIHRyaWVkIGFzIGlzIHRoZW4gdHJ5IGl0CisJICogdW5sZXNzIFJFU19OT1RMRFFVRVJZIGlzIHNldCBhbmQgdGhlcmUgd2VyZSBubyBkb3RzLgorCSAqLworCWlmICgoZG90cyB8fCAhc2VhcmNoZWQgfHwgKHN0YXRwLT5vcHRpb25zICYgUkVTX05PVExEUVVFUlkpID09IDBVKSAmJgorCSAgICAhKHRyaWVkX2FzX2lzIHx8IHJvb3Rfb25fbGlzdCkpIHsKKwkJcmV0ID0gcmVzX25xdWVyeWRvbWFpbihzdGF0cCwgbmFtZSwgTlVMTCwgY2xhc3MsIHR5cGUsCisJCQkJICAgICAgIGFuc3dlciwgYW5zbGVuKTsKKwkJaWYgKHJldCA+IDApCisJCQlyZXR1cm4gKHJldCk7CisJfQorCisJLyogaWYgd2UgZ290IGhlcmUsIHdlIGRpZG4ndCBzYXRpc2Z5IHRoZSBzZWFyY2guCisJICogaWYgd2UgZGlkIGFuIGluaXRpYWwgZnVsbCBxdWVyeSwgcmV0dXJuIHRoYXQgcXVlcnkncyBIX0VSUk5PCisJICogKG5vdGUgdGhhdCB3ZSB3b3VsZG4ndCBiZSBoZXJlIGlmIHRoYXQgcXVlcnkgaGFkIHN1Y2NlZWRlZCkuCisJICogZWxzZSBpZiB3ZSBldmVyIGdvdCBhIG5vZGF0YSwgc2VuZCB0aGF0IGJhY2sgYXMgdGhlIHJlYXNvbi4KKwkgKiBlbHNlIHNlbmQgYmFjayBtZWFuaW5nbGVzcyBIX0VSUk5PLCB0aGF0IGJlaW5nIHRoZSBvbmUgZnJvbQorCSAqIHRoZSBsYXN0IEROU1JDSCB3ZSBkaWQuCisJICovCisJaWYgKHNhdmVkX2hlcnJubyAhPSAtMSkKKwkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBzYXZlZF9oZXJybm8pOworCWVsc2UgaWYgKGdvdF9ub2RhdGEpCisJCVJFU19TRVRfSF9FUlJOTyhzdGF0cCwgTk9fREFUQSk7CisJZWxzZSBpZiAoZ290X3NlcnZmYWlsKQorCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIFRSWV9BR0FJTik7CisJcmV0dXJuICgtMSk7Cit9CisKKy8qCisgKiBQZXJmb3JtIGEgY2FsbCBvbiByZXNfcXVlcnkgb24gdGhlIGNvbmNhdGVuYXRpb24gb2YgbmFtZSBhbmQgZG9tYWluLAorICogcmVtb3ZpbmcgYSB0cmFpbGluZyBkb3QgZnJvbSBuYW1lIGlmIGRvbWFpbiBpcyBOVUxMLgorICovCitpbnQKK3Jlc19ucXVlcnlkb21haW4ocmVzX3N0YXRlIHN0YXRwLAorCSAgICBjb25zdCBjaGFyICpuYW1lLAorCSAgICBjb25zdCBjaGFyICpkb21haW4sCisJICAgIGludCBjbGFzcywgaW50IHR5cGUsCS8qIGNsYXNzIGFuZCB0eXBlIG9mIHF1ZXJ5ICovCisJICAgIHVfY2hhciAqYW5zd2VyLAkJLyogYnVmZmVyIHRvIHB1dCBhbnN3ZXIgKi8KKwkgICAgaW50IGFuc2xlbikJCS8qIHNpemUgb2YgYW5zd2VyICovCit7CisJY2hhciBuYnVmW01BWEROQU1FXTsKKwljb25zdCBjaGFyICpsb25nbmFtZSA9IG5idWY7CisJaW50IG4sIGQ7CisKKyNpZmRlZiBERUJVRworCWlmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykKKwkJcHJpbnRmKCI7OyByZXNfbnF1ZXJ5ZG9tYWluKCVzLCAlcywgJWQsICVkKVxuIiwKKwkJICAgICAgIG5hbWUsIGRvbWFpbj9kb21haW46IjxOaWw+IiwgY2xhc3MsIHR5cGUpOworI2VuZGlmCisJaWYgKGRvbWFpbiA9PSBOVUxMKSB7CisJCS8qCisJCSAqIENoZWNrIGZvciB0cmFpbGluZyAnLic7CisJCSAqIGNvcHkgd2l0aG91dCAnLicgaWYgcHJlc2VudC4KKwkJICovCisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWlmIChuID49IE1BWEROQU1FKSB7CisJCQlSRVNfU0VUX0hfRVJSTk8oc3RhdHAsIE5PX1JFQ09WRVJZKTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJCW4tLTsKKwkJaWYgKG4gPj0gMCAmJiBuYW1lW25dID09ICcuJykgeworCQkJc3RybmNweShuYnVmLCBuYW1lLCAoc2l6ZV90KW4pOworCQkJbmJ1ZltuXSA9ICdcMCc7CisJCX0gZWxzZQorCQkJbG9uZ25hbWUgPSBuYW1lOworCX0gZWxzZSB7CisJCW4gPSBzdHJsZW4obmFtZSk7CisJCWQgPSBzdHJsZW4oZG9tYWluKTsKKwkJaWYgKG4gKyBkICsgMSA+PSBNQVhETkFNRSkgeworCQkJUkVTX1NFVF9IX0VSUk5PKHN0YXRwLCBOT19SRUNPVkVSWSk7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlzcHJpbnRmKG5idWYsICIlcy4lcyIsIG5hbWUsIGRvbWFpbik7CisJfQorCXJldHVybiAocmVzX25xdWVyeShzdGF0cCwgbG9uZ25hbWUsIGNsYXNzLCB0eXBlLCBhbnN3ZXIsIGFuc2xlbikpOworfQorCitjb25zdCBjaGFyICoKK3Jlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBjb25zdCBjaGFyICpuYW1lLCBjaGFyICpkc3QsIHNpemVfdCBzaXopIHsKKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19yYW5kb20uYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcmFuZG9tLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDU3MGM0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfcmFuZG9tLmMKQEAgLTAsMCArMSwyNzUgQEAKKy8qICRPcGVuQlNEOiByZXNfcmFuZG9tLmMsdiAxLjE3IDIwMDgvMDQvMTMgMDA6Mjg6MzUgZGptIEV4cCAkICovCisKKy8qCisgKiBDb3B5cmlnaHQgMTk5NyBOaWVscyBQcm92b3MgPHByb3Zvc0BwaHlzbmV0LnVuaS1oYW1idXJnLmRlPgorICogQ29weXJpZ2h0IDIwMDggRGFtaWVuIE1pbGxlciA8ZGptQG9wZW5ic2Qub3JnPgorICogQ29weXJpZ2h0IDIwMDggQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0ICh0aHJlYWQtc2FmZXR5KQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGVvIGRlIFJhYWR0IDxkZXJhYWR0QG9wZW5ic2Qub3JnPiBjYW1lIHVwIHdpdGggdGhlIGlkZWEgb2YgdXNpbmcKKyAqIHN1Y2ggYSBtYXRoZW1hdGljYWwgc3lzdGVtIHRvIGdlbmVyYXRlIG1vcmUgcmFuZG9tICh5ZXQgbm9uLXJlcGVhdGluZykKKyAqIGlkcyB0byBzb2x2ZSB0aGUgcmVzb2x2ZXIvbmFtZWQgcHJvYmxlbS4gIEJ1dCBOaWVscyBkZXNpZ25lZCB0aGUKKyAqIGFjdHVhbCBzeXN0ZW0gYmFzZWQgb24gdGhlIGNvbnN0cmFpbnRzLgorICoKKyAqIExhdGVyIG1vZGlmaWVkIGJ5IERhbWllbiBNaWxsZXIgdG8gd3JhcCB0aGUgTENHIG91dHB1dCBpbiBhIDE1LWJpdAorICogcGVybXV0YXRpb24gZ2VuZXJhdG9yIGJhc2VkIG9uIGEgTHVieS1SYWNrb2ZmIGJsb2NrIGNpcGhlci4gVGhpcworICogZW5zdXJlcyB0aGUgb3V0cHV0IGlzIG5vbi1yZXBlYXRpbmcgYW5kIHByZXNlcnZlcyB0aGUgTVNCIHR3aWRkbGUKKyAqIHRyaWNrLCBidXQgbWFrZXMgaXQgbW9yZSByZXNpc3RhbnQgdG8gTENHIHByZWRpY3Rpb24uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuCisgKiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQKKyAqIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBzZWVkID0gcmFuZG9tIDE1Yml0CisgKiBuID0gcHJpbWUsIGcwID0gZ2VuZXJhdG9yIHRvIG4sCisgKiBqID0gcmFuZG9tIHNvIHRoYXQgZ2NkKGosbi0xKSA9PSAxCisgKiBnID0gZzBeaiBtb2QgbiB3aWxsIGJlIGEgZ2VuZXJhdG9yIGFnYWluLgorICoKKyAqIFhbMF0gPSByYW5kb20gc2VlZC4KKyAqIFhbbl0gPSBhKlhbbi0xXStiIG1vZCBtIGlzIGEgTGluZWFyIENvbmdydWVudGlhbCBHZW5lcmF0b3IKKyAqIHdpdGggYSA9IDdeKGV2ZW4gcmFuZG9tKSBtb2QgbSwKKyAqICAgICAgYiA9IHJhbmRvbSB3aXRoIGdjZChiLG0pID09IDEKKyAqICAgICAgbSA9IDMxMTA0IGFuZCBhIG1heGltYWwgcGVyaW9kIG9mIG0tMS4KKyAqCisgKiBUaGUgdHJhbnNhY3Rpb24gaWQgaXMgZGV0ZXJtaW5lZCBieToKKyAqIGlkW25dID0gc2VlZCB4b3IgKGdeWFtuXSBtb2QgbikKKyAqCisgKiBFZmZlY3Rpdmx5IHRoZSBpZCBpcyByZXN0cmljdGVkIHRvIHRoZSBsb3dlciAxNSBiaXRzLCB0aHVzCisgKiB5aWVsZGluZyB0d28gZGlmZmVyZW50IGN5Y2xlcyBieSB0b2dnbGluZyB0aGUgbXNiIG9uIGFuZCBvZmYuCisgKiBUaGlzIGF2b2lkcyByZXVzZSBpc3N1ZXMgY2F1c2VkIGJ5IHJlc2VlZGluZy4KKyAqCisgKiBUaGUgb3V0cHV0IG9mIHRoaXMgZ2VuZXJhdG9yIGlzIHRoZW4gcmFuZG9tbHkgcGVybXV0ZWQgdGhvdWdoIGEKKyAqIGN1c3RvbSAxNSBiaXQgTHVieS1SYWNrb2ZmIGJsb2NrIGNpcGhlci4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKiBCSU9OSUMtQkVHSU4gKi8KK3N0YXRpYyBwdGhyZWFkX211dGV4X3QgICAgICAgICBfcmVzX3JhbmRvbV9sb2NrID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyNkZWZpbmUgIF9SRVNfUkFORE9NX0xPQ0soKSAgICBwdGhyZWFkX211dGV4X2xvY2soJl9yZXNfcmFuZG9tX2xvY2spCisjZGVmaW5lICBfUkVTX1JBTkRPTV9VTkxPQ0soKSAgcHRocmVhZF9tdXRleF91bmxvY2soJl9yZXNfcmFuZG9tX2xvY2spCisvKiBCSU9OSUMtRU5EICovCisKKyNkZWZpbmUgUlVfT1VUICAJMTgwCS8qIFRpbWUgYWZ0ZXIgd2ljaCB3aWxsIGJlIHJlc2VlZGVkICovCisjZGVmaW5lIFJVX01BWAkJMzAwMDAJLyogVW5pcSBjeWNsZSwgYXZvaWQgYmxhY2tqYWNrIHByZWRpY3Rpb24gKi8KKyNkZWZpbmUgUlVfR0VOCQkyCS8qIFN0YXJ0aW5nIGdlbmVyYXRvciAqLworI2RlZmluZSBSVV9OCQkzMjc0OQkvKiBSVV9OLTEgPSAyKjIqMyoyNzI5ICovCisjZGVmaW5lIFJVX0FHRU4JCTcJLyogZGV0ZXJtaW5lIHJ1X2EgYXMgUlVfQUdFTl4oMipyYW5kKSAqLworI2RlZmluZSBSVV9NCQkzMTEwNAkvKiBSVV9NID0gMl43KjNeNSAtIGRvbid0IGNoYW5nZSAqLworI2RlZmluZSBSVV9ST1VORFMJMTEJLyogTnVtYmVyIG9mIHJvdW5kcyBmb3IgcGVybXV0ZSAob2RkKSAqLworCitzdHJ1Y3QgcHJmX2N0eCB7CisJLyogUFJGIGxvb2t1cCB0YWJsZSBmb3Igb2RkIHJvdW5kcyAoNyBiaXRzIGlucHV0IHRvIDggYml0cyBvdXRwdXQpICovCisJdV9jaGFyIHByZjdbKFJVX1JPVU5EUyAvIDIpICogKDEgPDwgNyldOworCisJLyogUFJGIGxvb2t1cCB0YWJsZSBmb3IgZXZlbiByb3VuZHMgKDggYml0cyBpbnB1dCB0byA3IGJpdHMgb3V0cHV0KSAqLworCXVfY2hhciBwcmY4WygoUlVfUk9VTkRTICsgMSkgLyAyKSAqICgxIDw8IDgpXTsKK307CisKKyNkZWZpbmUgUEZBQ19OIDMKK2NvbnN0IHN0YXRpYyB1X2ludDE2X3QgcGZhY3RzW1BGQUNfTl0gPSB7CisJMiwKKwkzLAorCTI3MjkKK307CisKK3N0YXRpYyB1X2ludDE2X3QgcnVfeDsKK3N0YXRpYyB1X2ludDE2X3QgcnVfc2VlZCwgcnVfc2VlZDI7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2EsIHJ1X2I7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2c7CitzdGF0aWMgdV9pbnQxNl90IHJ1X2NvdW50ZXIgPSAwOworc3RhdGljIHVfaW50MTZfdCBydV9tc2IgPSAwOworc3RhdGljIHN0cnVjdCBwcmZfY3R4ICpydV9wcmYgPSBOVUxMOworc3RhdGljIGxvbmcgcnVfcmVzZWVkOworCitzdGF0aWMgdV9pbnQxNl90IHBtb2QodV9pbnQxNl90LCB1X2ludDE2X3QsIHVfaW50MTZfdCk7CitzdGF0aWMgdm9pZCByZXNfaW5pdGlkKHZvaWQpOworCisvKgorICogRG8gYSBmYXN0IG1vZHVsYXIgZXhwb25hdGlvbiwgcmV0dXJuZWQgdmFsdWUgd2lsbCBiZSBpbiB0aGUgcmFuZ2UKKyAqIG9mIDAgLSAobW9kLTEpCisgKi8KK3N0YXRpYyB1X2ludDE2X3QKK3Btb2QodV9pbnQxNl90IGdlbiwgdV9pbnQxNl90IGV4cCwgdV9pbnQxNl90IG1vZCkKK3sKKwl1X2ludDE2X3QgcywgdCwgdTsKKworCXMgPSAxOworCXQgPSBnZW47CisJdSA9IGV4cDsKKworCXdoaWxlICh1KSB7CisJCWlmICh1ICYgMSkKKwkJCXMgPSAocyAqIHQpICUgbW9kOworCQl1ID4+PSAxOworCQl0ID0gKHQgKiB0KSAlIG1vZDsKKwl9CisJcmV0dXJuIChzKTsKK30KKworLyoKKyAqIDE1LWJpdCBwZXJtdXRhdGlvbiBiYXNlZCBvbiBMdWJ5LVJhY2tvZmYgYmxvY2sgY2lwaGVyCisgKi8KK3VfaW50CitwZXJtdXRlMTUodV9pbnQgaW4pCit7CisJaW50IGk7CisJdV9pbnQgbGVmdCwgcmlnaHQsIHRtcDsKKworCWlmIChydV9wcmYgPT0gTlVMTCkKKwkJcmV0dXJuIGluOworCisJbGVmdCA9IChpbiA+PiA4KSAmIDB4N2Y7CisJcmlnaHQgPSBpbiAmIDB4ZmY7CisKKwkvKgorCSAqIEVhY2ggcm91bmQgc3dhcHMgdGhlIHdpZHRoIG9mIGxlZnQgYW5kIHJpZ2h0LiBFdmVuIHJvdW5kcyBoYXZlCisJICogYSA3LWJpdCBsZWZ0LCBvZGQgcm91bmRzIGhhdmUgYW4gOC1iaXQgbGVmdC4JU2luY2UgdGhpcyB1c2VzIGFuCisJICogb2RkIG51bWJlciBvZiByb3VuZHMsIGxlZnQgaXMgYWx3YXlzIDggYml0cyB3aWRlIGF0IHRoZSBlbmQuCisJICovCisJZm9yIChpID0gMDsgaSA8IFJVX1JPVU5EUzsgaSsrKSB7CisJCWlmICgoaSAmIDEpID09IDApCisJCQl0bXAgPSBydV9wcmYtPnByZjhbKGkgPDwgKDggLSAxKSkgfCByaWdodF0gJiAweDdmOworCQllbHNlCisJCQl0bXAgPSBydV9wcmYtPnByZjdbKChpIC0gMSkgPDwgKDcgLSAxKSkgfCByaWdodF07CisJCXRtcCBePSBsZWZ0OworCQlsZWZ0ID0gcmlnaHQ7CisJCXJpZ2h0ID0gdG1wOworCX0KKworCXJldHVybiAocmlnaHQgPDwgOCkgfCBsZWZ0OworfQorCisvKgorICogSW5pdGlhbGl6ZXMgdGhlIHNlZWQgYW5kIGNob29zZXMgYSBzdWl0YWJsZSBnZW5lcmF0b3IuIEFsc28gdG9nZ2xlcworICogdGhlIG1zYiBmbGFnLiBUaGUgbXNiIGZsYWcgaXMgdXNlZCB0byBnZW5lcmF0ZSB0d28gZGlzdGluY3QKKyAqIGN5Y2xlcyBvZiByYW5kb20gbnVtYmVycyBhbmQgdGh1cyBhdm9pZGluZyByZXVzZSBvZiBpZHMuCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSByZXNfcmFuZG9taWQoKSB3aGVuIG5lZWRlZCwgYW4KKyAqIGFwcGxpY2F0aW9uIGRvZXMgbm90IGhhdmUgdG8gd29ycnkgYWJvdXQgaXQuCisgKi8KK3N0YXRpYyB2b2lkCityZXNfaW5pdGlkKHZvaWQpCit7CisJdV9pbnQxNl90IGosIGk7CisJdV9pbnQzMl90IHRtcDsKKwlpbnQgbm9wcmltZSA9IDE7CisJc3RydWN0IHRpbWV2YWwgdHY7CisKKwlydV94ID0gYXJjNHJhbmRvbV91bmlmb3JtKFJVX00pOworCisJLyogMTUgYml0cyBvZiByYW5kb20gc2VlZCAqLworCXRtcCA9IGFyYzRyYW5kb20oKTsKKwlydV9zZWVkID0gKHRtcCA+PiAxNikgJiAweDdGRkY7CisJcnVfc2VlZDIgPSB0bXAgJiAweDdGRkY7CisKKwkvKiBEZXRlcm1pbmUgdGhlIExDRyB3ZSB1c2UgKi8KKwl0bXAgPSBhcmM0cmFuZG9tKCk7CisJcnVfYiA9ICh0bXAgJiAweGZmZmUpIHwgMTsKKwlydV9hID0gcG1vZChSVV9BR0VOLCAodG1wID4+IDE2KSAmIDB4ZmZmZSwgUlVfTSk7CisJd2hpbGUgKHJ1X2IgJSAzID09IDApCisJCXJ1X2IgKz0gMjsKKworCWogPSBhcmM0cmFuZG9tX3VuaWZvcm0oUlVfTik7CisKKwkvKgorCSAqIERvIGEgZmFzdCBnY2QoaixSVV9OLTEpLCBzbyB3ZSBjYW4gZmluZCBhIGogd2l0aAorCSAqIGdjZChqLCBSVV9OLTEpID09IDEsIGdpdmluZyBhIG5ldyBnZW5lcmF0b3IgZm9yCisJICogUlVfR0VOXmogbW9kIFJVX04KKwkgKi8KKworCXdoaWxlIChub3ByaW1lKSB7CisJCWZvciAoaSA9IDA7IGkgPCBQRkFDX047IGkrKykKKwkJCWlmIChqICUgcGZhY3RzW2ldID09IDApCisJCQkJYnJlYWs7CisKKwkJaWYgKGkgPj0gUEZBQ19OKQorCQkJbm9wcmltZSA9IDA7CisJCWVsc2UKKwkJCWogPSAoaiArIDEpICUgUlVfTjsKKwl9CisKKwlydV9nID0gcG1vZChSVV9HRU4sIGosIFJVX04pOworCXJ1X2NvdW50ZXIgPSAwOworCisJLyogSW5pdGlhbGlzZSBQUkYgZm9yIEx1YnktUmFja29mZiBwZXJtdXRhdGlvbiAqLworCWlmIChydV9wcmYgPT0gTlVMTCkKKwkJcnVfcHJmID0gbWFsbG9jKHNpemVvZigqcnVfcHJmKSk7CisJaWYgKHJ1X3ByZiAhPSBOVUxMKQorCQlhcmM0cmFuZG9tX2J1ZihydV9wcmYsIHNpemVvZigqcnVfcHJmKSk7CisKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlydV9yZXNlZWQgPSB0di50dl9zZWMgKyBSVV9PVVQ7CisJcnVfbXNiID0gcnVfbXNiID09IDB4ODAwMCA/IDAgOiAweDgwMDA7Cit9CisKK3VfaW50CityZXNfcmFuZG9taWQodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0djsKKyAgICAgICAgdV9pbnQgIHJlc3VsdDsKKworICAgICAgICBfUkVTX1JBTkRPTV9MT0NLKCkKKwlnZXR0aW1lb2ZkYXkoJnR2LCBOVUxMKTsKKwlpZiAocnVfY291bnRlciA+PSBSVV9NQVggfHwgdHYudHZfc2VjID4gcnVfcmVzZWVkKQorCQlyZXNfaW5pdGlkKCk7CisKKwkvKiBMaW5lYXIgQ29uZ3J1ZW50aWFsIEdlbmVyYXRvciAqLworCXJ1X3ggPSAocnVfYSAqIHJ1X3ggKyBydV9iKSAlIFJVX007CisJcnVfY291bnRlcisrOworCisJcmVzdWx0ID0gcGVybXV0ZTE1KHJ1X3NlZWQgXiBwbW9kKHJ1X2csIHJ1X3NlZWQyICsgcnVfeCwgUlVfTikpIHwgcnVfbXNiOworICAgICAgICBfUkVTX1JBTkRPTV9VTkxPQ0soKQorICAgICAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgMAoraW50CittYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKK3sKKwlpbnQgaSwgbjsKKwl1X2ludDE2X3Qgd2VydDsKKworCXJlc19pbml0aWQoKTsKKworCXByaW50ZigiR2VuZXJhdG9yOiAldVxuIiwgcnVfZyk7CisJcHJpbnRmKCJTZWVkOiAldVxuIiwgcnVfc2VlZCk7CisJcHJpbnRmKCJSZXNlZWQgYXQgJWxkXG4iLCBydV9yZXNlZWQpOworCXByaW50ZigiUnVfWDogJXVcbiIsIHJ1X3gpOworCXByaW50ZigiUnVfQTogJXVcbiIsIHJ1X2EpOworCXByaW50ZigiUnVfQjogJXVcbiIsIHJ1X2IpOworCisJbiA9IGFyZ2MgPiAxID8gYXRvaShhcmd2WzFdKSA6IDYwMDAxOworCWZvciAoaT0wO2k8bjtpKyspIHsKKwkJd2VydCA9IHJlc19yYW5kb21pZCgpOworCQlwcmludGYoIiV1XG4iLCB3ZXJ0KTsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKwpkaWZmIC0tZ2l0IGEvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMgYi9saWJjL25ldGJzZC9yZXNvbHYvcmVzX3NlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGI3NDBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zZW5kLmMKQEAgLTAsMCArMSwxMTM2IEBACisvKgkkTmV0QlNEOiByZXNfc2VuZC5jLHYgMS45IDIwMDYvMDEvMjQgMTc6NDE6MjUgY2hyaXN0b3MgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAyMDA4ICBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QgKHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24pCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUsIDE5ODksIDE5OTMKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCisgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiAJVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZgorICogCUNhbGlmb3JuaWEsIEJlcmtlbGV5IGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTkzIGJ5IERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcywgYW5kIHRoYXQKKyAqIHRoZSBuYW1lIG9mIERpZ2l0YWwgRXF1aXBtZW50IENvcnBvcmF0aW9uIG5vdCBiZSB1c2VkIGluIGFkdmVydGlzaW5nIG9yCisgKiBwdWJsaWNpdHkgcGVydGFpbmluZyB0byBkaXN0cmlidXRpb24gb2YgdGhlIGRvY3VtZW50IG9yIHNvZnR3YXJlIHdpdGhvdXQKKyAqIHNwZWNpZmljLCB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIERJR0lUQUwgRVFVSVBNRU5UIENPUlAuIERJU0NMQUlNUyBBTEwKKyAqIFdBUlJBTlRJRVMgV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSwgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMKKyAqIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gICBJTiBOTyBFVkVOVCBTSEFMTCBESUdJVEFMIEVRVUlQTUVOVAorICogQ09SUE9SQVRJT04gQkUgTElBQkxFIEZPUiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyBPUiBBTlkgREFNQUdFUyBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SCisgKiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUworICogQUNUSU9OLCBBUklTSU5HIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTCisgKiBTT0ZUV0FSRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorI2lmIGRlZmluZWQoTElCQ19TQ0NTKSAmJiAhZGVmaW5lZChsaW50KQorI2lmZGVmIG5vdGRlZgorc3RhdGljIGNvbnN0IGNoYXIgc2Njc2lkW10gPSAiQCgjKXJlc19zZW5kLmMJOC4xIChCZXJrZWxleSkgNi80LzkzIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJjc2lkW10gPSAiSWQ6IHJlc19zZW5kLmMsdiAxLjUuMi4yLjQuNSAyMDA0LzA4LzEwIDAyOjE5OjU2IG1hcmthIEV4cCI7CisjZWxzZQorX19SQ1NJRCgiJE5ldEJTRDogcmVzX3NlbmQuYyx2IDEuOSAyMDA2LzAxLzI0IDE3OjQxOjI1IGNocmlzdG9zIEV4cCAkIik7CisjZW5kaWYKKyNlbmRpZiAvKiBMSUJDX1NDQ1MgYW5kIG5vdCBsaW50ICovCisKKy8qCisgKiBTZW5kIHF1ZXJ5IHRvIG5hbWUgc2VydmVyIGFuZCB3YWl0IGZvciByZXBseS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3RpbWUuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorCisjaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgorI2luY2x1ZGUgPG5ldGluZXQvaW42Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPG5ldGRiLmg+CisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSAicmVzb2x2X3ByaXZhdGUuaCIKKyNlbHNlCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjZW5kaWYKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCisjaW5jbHVkZSA8aXNjL2V2ZW50bGliLmg+CisKKyNpZm5kZWYgREVfQ09OU1QKKyNkZWZpbmUgREVfQ09OU1QoYyx2KSAgIHYgPSAoKGMpID8gXAorICAgIHN0cmNocigoY29uc3Qgdm9pZCAqKShjKSwgKihjb25zdCBjaGFyICopKGNvbnN0IHZvaWQgKikoYykpIDogTlVMTCkKKyNlbmRpZgorCisvKiBPcHRpb25zLiAgTGVhdmUgdGhlbSBvbi4gKi8KKyNpZm5kZWYgREVCVUcKKyNkZWZpbmUgREVCVUcKKyNlbmRpZgorI2luY2x1ZGUgInJlc19kZWJ1Zy5oIgorI2luY2x1ZGUgInJlc19wcml2YXRlLmgiCisKKyNkZWZpbmUgRVhUKHJlcykgKChyZXMpLT5fdS5fZXh0KQorCitzdGF0aWMgY29uc3QgaW50IGhpZ2hlc3RGRCA9IEZEX1NFVFNJWkUgLSAxOworCisvKiBGb3J3YXJkLiAqLworCitzdGF0aWMgaW50CQlnZXRfc2FsZW4gX19QKChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKikpOworc3RhdGljIHN0cnVjdCBzb2NrYWRkciAqIGdldF9uc2FkZHIgX19QKChyZXNfc3RhdGUsIHNpemVfdCkpOworc3RhdGljIGludAkJc2VuZF92YyhyZXNfc3RhdGUsIGNvbnN0IHVfY2hhciAqLCBpbnQsCisJCQkJdV9jaGFyICosIGludCwgaW50ICosIGludCk7CitzdGF0aWMgaW50CQlzZW5kX2RnKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQl1X2NoYXIgKiwgaW50LCBpbnQgKiwgaW50LAorCQkJCWludCAqLCBpbnQgKik7CitzdGF0aWMgdm9pZAkJQWVycm9yKGNvbnN0IHJlc19zdGF0ZSwgRklMRSAqLCBjb25zdCBjaGFyICosIGludCwKKwkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgaW50KTsKK3N0YXRpYyB2b2lkCQlQZXJyb3IoY29uc3QgcmVzX3N0YXRlLCBGSUxFICosIGNvbnN0IGNoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQJCXNvY2tfZXEoc3RydWN0IHNvY2thZGRyICosIHN0cnVjdCBzb2NrYWRkciAqKTsKKyNpZmRlZiBORUVEX1BTRUxFQ1QKK3N0YXRpYyBpbnQJCXBzZWxlY3QoaW50LCB2b2lkICosIHZvaWQgKiwgdm9pZCAqLAorCQkJCXN0cnVjdCB0aW1lc3BlYyAqLAorCQkJCWNvbnN0IHNpZ3NldF90ICopOworI2VuZGlmCit2b2lkIHJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworCisKKy8qIEJJT05JQy1CRUdJTjogaW1wbGVtZW50IHNvdXJjZSBwb3J0IHJhbmRvbWl6YXRpb24gKi8KK3R5cGVkZWYgdW5pb24geworICAgIHN0cnVjdCBzb2NrYWRkciAgICAgIHNhOworICAgIHN0cnVjdCBzb2NrYWRkcl9pbiAgIHNpbjsKKyAgICBzdHJ1Y3Qgc29ja2FkZHJfaW42ICBzaW42OworfSBfc29ja2FkZHJfdW5pb247CisKK3N0YXRpYyBpbnQKK3JhbmRvbV9iaW5kKCBpbnQgIHMsIGludCAgZmFtaWx5ICkKK3sKKyAgICBfc29ja2FkZHJfdW5pb24gIHU7CisgICAgaW50ICAgICAgICAgICAgICBqOworICAgIHNvY2tsZW5fdCAgICAgICAgc2xlbjsKKworICAgIC8qIGNsZWFyIGFsbCwgdGhpcyBhbHNvIHNldHMgdGhlIElQNC82IGFkZHJlc3MgdG8gJ2FueScgKi8KKyAgICBtZW1zZXQoICZ1LCAwLCBzaXplb2YgdSApOworCisgICAgc3dpdGNoIChmYW1pbHkpIHsKKyAgICAgICAgY2FzZSBBRl9JTkVUOgorICAgICAgICAgICAgdS5zaW4uc2luX2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgPSBzaXplb2YgdS5zaW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBBRl9JTkVUNjoKKyAgICAgICAgICAgIHUuc2luNi5zaW42X2ZhbWlseSA9IGZhbWlseTsKKyAgICAgICAgICAgIHNsZW4gICAgICAgICAgICAgICA9IHNpemVvZiB1LnNpbjY7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGVycm5vID0gRVBST1RPOworICAgICAgICAgICAgcmV0dXJuIC0xOworICAgIH0KKworICAgIC8qIGZpcnN0IHRyeSB0byBiaW5kIHRvIGEgcmFuZG9tIHNvdXJjZSBwb3J0IGEgZmV3IHRpbWVzICovCisgICAgZm9yIChqID0gMDsgaiA8IDEwOyBqKyspIHsKKyAgICAgICAgLyogZmluZCBhIHJhbmRvbSBwb3J0IGJldHdlZW4gMTAyNSAuLiA2NTUzNCAqLworICAgICAgICBpbnQgIHBvcnQgPSAxMDI1ICsgKHJlc19yYW5kb21pZCgpICUgKDY1NTM1LTEwMjUpKTsKKyAgICAgICAgaWYgKGZhbWlseSA9PSBBRl9JTkVUKQorICAgICAgICAgICAgdS5zaW4uc2luX3BvcnQgPSBodG9ucyhwb3J0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgdS5zaW42LnNpbjZfcG9ydCA9IGh0b25zKHBvcnQpOworCisgICAgICAgIGlmICggIWJpbmQoIHMsICZ1LnNhLCBzbGVuICkgKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgLyogbm90aGluZyBhZnRlciAxMCB0cmllcywgb3VyIG5ldHdvcmsgdGFibGUgaXMgcHJvYmFibHkgYnVzeSAqLworICAgIC8qIGxldCB0aGUgc3lzdGVtIGRlY2lkZSB3aGljaCBwb3J0IGlzIGJlc3QgKi8KKyAgICBpZiAoZmFtaWx5ID09IEFGX0lORVQpCisgICAgICAgIHUuc2luLnNpbl9wb3J0ID0gMDsKKyAgICBlbHNlCisgICAgICAgIHUuc2luNi5zaW42X3BvcnQgPSAwOworCisgICAgcmV0dXJuIGJpbmQoIHMsICZ1LnNhLCBzbGVuICk7Cit9CisvKiBCSU9OSUMtRU5EICovCisKK3N0YXRpYyBjb25zdCBpbnQgbmlmbGFncyA9IE5JX05VTUVSSUNIT1NUIHwgTklfTlVNRVJJQ1NFUlY7CisKKy8qIFB1YmxpYy4gKi8KKworLyogaW50CisgKiByZXNfaXNvdXJzZXJ2ZXIoaW5hKQorICoJbG9va3MgdXAgImluYSIgaW4gX3Jlcy5uc19hZGRyX2xpc3RbXQorICogcmV0dXJuczoKKyAqCTAgIDogbm90IGZvdW5kCisgKgk+MCA6IGZvdW5kCisgKiBhdXRob3I6CisgKglwYXVsIHZpeGllLCAyOW1heTk0CisgKi8KK2ludAorcmVzX291cnNlcnZlcl9wKGNvbnN0IHJlc19zdGF0ZSBzdGF0cCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYSkgeworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqaW5wLCAqc3J2OworCWNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKmluNnAsICpzcnY2OworCWludCBuczsKKworCXN3aXRjaCAoc2EtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJaW5wID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbiAqKShjb25zdCB2b2lkICopc2E7CisJCWZvciAobnMgPSAwOyAgbnMgPCBzdGF0cC0+bnNjb3VudDsgIG5zKyspIHsKKwkJCXNydiA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCQkJaWYgKHNydi0+c2luX2ZhbWlseSA9PSBpbnAtPnNpbl9mYW1pbHkgJiYKKwkJCSAgICBzcnYtPnNpbl9wb3J0ID09IGlucC0+c2luX3BvcnQgJiYKKwkJCSAgICAoc3J2LT5zaW5fYWRkci5zX2FkZHIgPT0gSU5BRERSX0FOWSB8fAorCQkJICAgICBzcnYtPnNpbl9hZGRyLnNfYWRkciA9PSBpbnAtPnNpbl9hZGRyLnNfYWRkcikpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCQlicmVhazsKKwljYXNlIEFGX0lORVQ2OgorCQlpZiAoRVhUKHN0YXRwKS5leHQgPT0gTlVMTCkKKwkJCWJyZWFrOworCQlpbjZwID0gKGNvbnN0IHN0cnVjdCBzb2NrYWRkcl9pbjYgKikoY29uc3Qgdm9pZCAqKXNhOworCQlmb3IgKG5zID0gMDsgIG5zIDwgc3RhdHAtPm5zY291bnQ7ICBucysrKSB7CisJCQlzcnY2ID0gKHN0cnVjdCBzb2NrYWRkcl9pbjYgKikodm9pZCAqKWdldF9uc2FkZHIoc3RhdHAsIChzaXplX3QpbnMpOworCQkJaWYgKHNydjYtPnNpbjZfZmFtaWx5ID09IGluNnAtPnNpbjZfZmFtaWx5ICYmCisJCQkgICAgc3J2Ni0+c2luNl9wb3J0ID09IGluNnAtPnNpbjZfcG9ydCAmJgorI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAorCQkJICAgIChzcnY2LT5zaW42X3Njb3BlX2lkID09IDAgfHwKKwkJCSAgICAgc3J2Ni0+c2luNl9zY29wZV9pZCA9PSBpbjZwLT5zaW42X3Njb3BlX2lkKSAmJgorI2VuZGlmCisJCQkgICAgKElONl9JU19BRERSX1VOU1BFQ0lGSUVEKCZzcnY2LT5zaW42X2FkZHIpIHx8CisJCQkgICAgIElONl9BUkVfQUREUl9FUVVBTCgmc3J2Ni0+c2luNl9hZGRyLCAmaW42cC0+c2luNl9hZGRyKSkpCisJCQkJcmV0dXJuICgxKTsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisJcmV0dXJuICgwKTsKK30KKworLyogaW50CisgKiByZXNfbmFtZWlucXVlcnkobmFtZSwgdHlwZSwgY2xhc3MsIGJ1ZiwgZW9tKQorICoJbG9vayBmb3IgKG5hbWUsdHlwZSxjbGFzcykgaW4gdGhlIHF1ZXJ5IHNlY3Rpb24gb2YgcGFja2V0IChidWYsZW9tKQorICogcmVxdWlyZXM6CisgKglidWYgKyBIRklYRURTWiA8PSBlb20KKyAqIHJldHVybnM6CisgKgktMSA6IGZvcm1hdCBlcnJvcgorICoJMCAgOiBub3QgZm91bmQKKyAqCT4wIDogZm91bmQKKyAqIGF1dGhvcjoKKyAqCXBhdWwgdml4aWUsIDI5bWF5OTQKKyAqLworaW50CityZXNfbmFtZWlucXVlcnkoY29uc3QgY2hhciAqbmFtZSwgaW50IHR5cGUsIGludCBjbGFzcywKKwkJY29uc3QgdV9jaGFyICpidWYsIGNvbnN0IHVfY2hhciAqZW9tKQoreworCWNvbnN0IHVfY2hhciAqY3AgPSBidWYgKyBIRklYRURTWjsKKwlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZiktPnFkY291bnQpOworCisJd2hpbGUgKHFkY291bnQtLSA+IDApIHsKKwkJY2hhciB0bmFtZVtNQVhETkFNRSsxXTsKKwkJaW50IG4sIHR0eXBlLCB0Y2xhc3M7CisKKwkJbiA9IGRuX2V4cGFuZChidWYsIGVvbSwgY3AsIHRuYW1lLCBzaXplb2YgdG5hbWUpOworCQlpZiAobiA8IDApCisJCQlyZXR1cm4gKC0xKTsKKwkJY3AgKz0gbjsKKwkJaWYgKGNwICsgMiAqIElOVDE2U1ogPiBlb20pCisJCQlyZXR1cm4gKC0xKTsKKwkJdHR5cGUgPSBuc19nZXQxNihjcCk7IGNwICs9IElOVDE2U1o7CisJCXRjbGFzcyA9IG5zX2dldDE2KGNwKTsgY3AgKz0gSU5UMTZTWjsKKwkJaWYgKHR0eXBlID09IHR5cGUgJiYgdGNsYXNzID09IGNsYXNzICYmCisJCSAgICBuc19zYW1lbmFtZSh0bmFtZSwgbmFtZSkgPT0gMSkKKwkJCXJldHVybiAoMSk7CisJfQorCXJldHVybiAoMCk7Cit9CisKKy8qIGludAorICogcmVzX3F1ZXJpZXNtYXRjaChidWYxLCBlb20xLCBidWYyLCBlb20yKQorICoJaXMgdGhlcmUgYSAxOjEgbWFwcGluZyBvZiAobmFtZSx0eXBlLGNsYXNzKQorICoJaW4gKGJ1ZjEsZW9tMSkgYW5kIChidWYyLGVvbTIpPworICogcmV0dXJuczoKKyAqCS0xIDogZm9ybWF0IGVycm9yCisgKgkwICA6IG5vdCBhIDE6MSBtYXBwaW5nCisgKgk+MCA6IGlzIGEgMToxIG1hcHBpbmcKKyAqIGF1dGhvcjoKKyAqCXBhdWwgdml4aWUsIDI5bWF5OTQKKyAqLworaW50CityZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqYnVmMSwgY29uc3QgdV9jaGFyICplb20xLAorCQkgY29uc3QgdV9jaGFyICpidWYyLCBjb25zdCB1X2NoYXIgKmVvbTIpCit7CisJY29uc3QgdV9jaGFyICpjcCA9IGJ1ZjEgKyBIRklYRURTWjsKKwlpbnQgcWRjb3VudCA9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjEpLT5xZGNvdW50KTsKKworCWlmIChidWYxICsgSEZJWEVEU1ogPiBlb20xIHx8IGJ1ZjIgKyBIRklYRURTWiA+IGVvbTIpCisJCXJldHVybiAoLTEpOworCisJLyoKKwkgKiBPbmx5IGhlYWRlciBzZWN0aW9uIHByZXNlbnQgaW4gcmVwbGllcyB0bworCSAqIGR5bmFtaWMgdXBkYXRlIHBhY2tldHMuCisJICovCisJaWYgKCgoKGNvbnN0IEhFQURFUiAqKShjb25zdCB2b2lkICopYnVmMSktPm9wY29kZSA9PSBuc19vX3VwZGF0ZSkgJiYKKwkgICAgKCgoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWYyKS0+b3Bjb2RlID09IG5zX29fdXBkYXRlKSkKKwkJcmV0dXJuICgxKTsKKworCWlmIChxZGNvdW50ICE9IG50b2hzKCgoY29uc3QgSEVBREVSKikoY29uc3Qgdm9pZCAqKWJ1ZjIpLT5xZGNvdW50KSkKKwkJcmV0dXJuICgwKTsKKwl3aGlsZSAocWRjb3VudC0tID4gMCkgeworCQljaGFyIHRuYW1lW01BWEROQU1FKzFdOworCQlpbnQgbiwgdHR5cGUsIHRjbGFzczsKKworCQluID0gZG5fZXhwYW5kKGJ1ZjEsIGVvbTEsIGNwLCB0bmFtZSwgc2l6ZW9mIHRuYW1lKTsKKwkJaWYgKG4gPCAwKQorCQkJcmV0dXJuICgtMSk7CisJCWNwICs9IG47CisJCWlmIChjcCArIDIgKiBJTlQxNlNaID4gZW9tMSkKKwkJCXJldHVybiAoLTEpOworCQl0dHlwZSA9IG5zX2dldDE2KGNwKTsJY3AgKz0gSU5UMTZTWjsKKwkJdGNsYXNzID0gbnNfZ2V0MTYoY3ApOyBjcCArPSBJTlQxNlNaOworCQlpZiAoIXJlc19uYW1laW5xdWVyeSh0bmFtZSwgdHR5cGUsIHRjbGFzcywgYnVmMiwgZW9tMikpCisJCQlyZXR1cm4gKDApOworCX0KKwlyZXR1cm4gKDEpOworfQorCitpbnQKK3Jlc19uc2VuZChyZXNfc3RhdGUgc3RhdHAsCisJICBjb25zdCB1X2NoYXIgKmJ1ZiwgaW50IGJ1ZmxlbiwgdV9jaGFyICphbnMsIGludCBhbnNzaXopCit7CisJaW50IGdvdHNvbWV3aGVyZSwgdGVycm5vLCB0cnksIHZfY2lyY3VpdCwgcmVzcGxlbiwgbnMsIG47CisJY2hhciBhYnVmW05JX01BWEhPU1RdOworCisJaWYgKHN0YXRwLT5uc2NvdW50ID09IDApIHsKKwkJZXJybm8gPSBFU1JDSDsKKwkJcmV0dXJuICgtMSk7CisJfQorCWlmIChhbnNzaXogPCBIRklYRURTWikgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuICgtMSk7CisJfQorCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fCAoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUVVFUlkpLAorCQkoc3Rkb3V0LCAiOzsgcmVzX3NlbmQoKVxuIiksIGJ1ZiwgYnVmbGVuKTsKKwl2X2NpcmN1aXQgPSAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfVVNFVkMpIHx8IGJ1ZmxlbiA+IFBBQ0tFVFNaOworCWdvdHNvbWV3aGVyZSA9IDA7CisJdGVycm5vID0gRVRJTUVET1VUOworCisJLyoKKwkgKiBJZiB0aGUgbnNfYWRkcl9saXN0IGluIHRoZSByZXNvbHZlciBjb250ZXh0IGhhcyBjaGFuZ2VkLCB0aGVuCisJICogaW52YWxpZGF0ZSBvdXIgY2FjaGVkIGNvcHkgYW5kIHRoZSBhc3NvY2lhdGVkIHRpbWluZyBkYXRhLgorCSAqLworCWlmIChFWFQoc3RhdHApLm5zY291bnQgIT0gMCkgeworCQlpbnQgbmVlZGNsb3NlID0gMDsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKKwkJc29ja2xlbl90IHBlZXJsZW47CisKKwkJaWYgKEVYVChzdGF0cCkubnNjb3VudCAhPSBzdGF0cC0+bnNjb3VudCkKKwkJCW5lZWRjbG9zZSsrOworCQllbHNlCisJCQlmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+bnNjb3VudDsgbnMrKykgeworCQkJCWlmIChzdGF0cC0+bnNhZGRyX2xpc3RbbnNdLnNpbl9mYW1pbHkgJiYKKwkJCQkgICAgIXNvY2tfZXEoKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnN0YXRwLT5uc2FkZHJfbGlzdFtuc10sCisJCQkJCSAgICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJkVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25zXSkpIHsKKwkJCQkJbmVlZGNsb3NlKys7CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdID09IC0xKQorCQkJCQljb250aW51ZTsKKwkJCQlwZWVybGVuID0gc2l6ZW9mKHBlZXIpOworCQkJCWlmIChnZXRzb2NrbmFtZShFWFQoc3RhdHApLm5zc29ja3NbbnNdLAorCQkJCSAgICAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmcGVlciwgJnBlZXJsZW4pIDwgMCkgeworCQkJCQluZWVkY2xvc2UrKzsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWlmICghc29ja19lcSgoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmcGVlciwKKwkJCQkgICAgZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucykpKSB7CisJCQkJCW5lZWRjbG9zZSsrOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCWlmIChuZWVkY2xvc2UpIHsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJRVhUKHN0YXRwKS5uc2NvdW50ID0gMDsKKwkJfQorCX0KKworCS8qCisJICogTWF5YmUgaW5pdGlhbGl6ZSBvdXIgcHJpdmF0ZSBjb3B5IG9mIHRoZSBuc19hZGRyX2xpc3QuCisJICovCisJaWYgKEVYVChzdGF0cCkubnNjb3VudCA9PSAwKSB7CisJCWZvciAobnMgPSAwOyBucyA8IHN0YXRwLT5uc2NvdW50OyBucysrKSB7CisJCQlFWFQoc3RhdHApLm5zdGltZXNbbnNdID0gUkVTX01BWFRJTUU7CisJCQlFWFQoc3RhdHApLm5zc29ja3NbbnNdID0gLTE7CisJCQlpZiAoIXN0YXRwLT5uc2FkZHJfbGlzdFtuc10uc2luX2ZhbWlseSkKKwkJCQljb250aW51ZTsKKwkJCUVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25zXS5zaW4gPQorCQkJCSBzdGF0cC0+bnNhZGRyX2xpc3RbbnNdOworCQl9CisJCUVYVChzdGF0cCkubnNjb3VudCA9IHN0YXRwLT5uc2NvdW50OworCX0KKworCS8qCisJICogU29tZSByZXNvbHZlcnMgd2FudCB0byBldmVuIG91dCB0aGUgbG9hZCBvbiB0aGVpciBuYW1lc2VydmVycy4KKwkgKiBOb3RlIHRoYXQgUkVTX0JMQVNUIG92ZXJyaWRlcyBSRVNfUk9UQVRFLgorCSAqLworCWlmICgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfUk9UQVRFKSAhPSAwVSAmJgorCSAgICAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfQkxBU1QpID09IDBVKSB7CisJCXVuaW9uIHJlc19zb2NrYWRkcl91bmlvbiBpbnU7CisJCXN0cnVjdCBzb2NrYWRkcl9pbiBpbmE7CisJCWludCBsYXN0bnMgPSBzdGF0cC0+bnNjb3VudCAtIDE7CisJCWludCBmZDsKKwkJdV9pbnQxNl90IG5zdGltZTsKKworCQlpZiAoRVhUKHN0YXRwKS5leHQgIT0gTlVMTCkKKwkJCWludSA9IEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzWzBdOworCQlpbmEgPSBzdGF0cC0+bnNhZGRyX2xpc3RbMF07CisJCWZkID0gRVhUKHN0YXRwKS5uc3NvY2tzWzBdOworCQluc3RpbWUgPSBFWFQoc3RhdHApLm5zdGltZXNbMF07CisJCWZvciAobnMgPSAwOyBucyA8IGxhc3RuczsgbnMrKykgeworCQkJaWYgKEVYVChzdGF0cCkuZXh0ICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25zXSA9CisJCQkJCUVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25zICsgMV07CisJCQlzdGF0cC0+bnNhZGRyX2xpc3RbbnNdID0gc3RhdHAtPm5zYWRkcl9saXN0W25zICsgMV07CisJCQlFWFQoc3RhdHApLm5zc29ja3NbbnNdID0gRVhUKHN0YXRwKS5uc3NvY2tzW25zICsgMV07CisJCQlFWFQoc3RhdHApLm5zdGltZXNbbnNdID0gRVhUKHN0YXRwKS5uc3RpbWVzW25zICsgMV07CisJCX0KKwkJaWYgKEVYVChzdGF0cCkuZXh0ICE9IE5VTEwpCisJCQlFWFQoc3RhdHApLmV4dC0+bnNhZGRyc1tsYXN0bnNdID0gaW51OworCQlzdGF0cC0+bnNhZGRyX2xpc3RbbGFzdG5zXSA9IGluYTsKKwkJRVhUKHN0YXRwKS5uc3NvY2tzW2xhc3Ruc10gPSBmZDsKKwkJRVhUKHN0YXRwKS5uc3RpbWVzW2xhc3Ruc10gPSBuc3RpbWU7CisJfQorCisJLyoKKwkgKiBTZW5kIHJlcXVlc3QsIFJFVFJZIHRpbWVzLCBvciB1bnRpbCBzdWNjZXNzZnVsLgorCSAqLworCWZvciAodHJ5ID0gMDsgdHJ5IDwgc3RhdHAtPnJldHJ5OyB0cnkrKykgeworCSAgICBmb3IgKG5zID0gMDsgbnMgPCBzdGF0cC0+bnNjb3VudDsgbnMrKykgeworCQlzdHJ1Y3Qgc29ja2FkZHIgKm5zYXA7CisJCWludCBuc2FwbGVuOworCQluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJCW5zYXBsZW4gPSBnZXRfc2FsZW4obnNhcCk7CisJCXN0YXRwLT5fZmxhZ3MgJj0gflJFU19GX0xBU1RNQVNLOworCQlzdGF0cC0+X2ZsYWdzIHw9IChucyA8PCBSRVNfRl9MQVNUU0hJRlQpOworIHNhbWVfbnM6CisJCWlmIChzdGF0cC0+cWhvb2spIHsKKwkJCWludCBkb25lID0gMCwgbG9vcHMgPSAwOworCisJCQlkbyB7CisJCQkJcmVzX3NlbmRob29rYWN0IGFjdDsKKworCQkJCWFjdCA9ICgqc3RhdHAtPnFob29rKSgmbnNhcCwgJmJ1ZiwgJmJ1ZmxlbiwKKwkJCQkJCSAgICAgIGFucywgYW5zc2l6LCAmcmVzcGxlbik7CisJCQkJc3dpdGNoIChhY3QpIHsKKwkJCQljYXNlIHJlc19nb2FoZWFkOgorCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSByZXNfbmV4dG5zOgorCQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCQkJZ290byBuZXh0X25zOworCQkJCWNhc2UgcmVzX2RvbmU6CisJCQkJCXJldHVybiAocmVzcGxlbik7CisJCQkJY2FzZSByZXNfbW9kaWZpZWQ6CisJCQkJCS8qIGdpdmUgdGhlIGhvb2sgYW5vdGhlciB0cnkgKi8KKwkJCQkJaWYgKCsrbG9vcHMgPCA0MikgLypkb3VnIGFkYW1zKi8KKwkJCQkJCWJyZWFrOworCQkJCQkvKkZBTExUSFJPVUdIKi8KKwkJCQljYXNlIHJlc19lcnJvcjoKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJZGVmYXVsdDoKKwkJCQkJZ290byBmYWlsOworCQkJCX0KKwkJCX0gd2hpbGUgKCFkb25lKTsKKwkJfQorCisJCURwcmludCgoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAmJgorCQkJZ2V0bmFtZWluZm8obnNhcCwgKHNvY2tsZW5fdCluc2FwbGVuLCBhYnVmLCBzaXplb2YoYWJ1ZiksCisJCQkJICAgIE5VTEwsIDAsIG5pZmxhZ3MpID09IDApLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IFF1ZXJ5aW5nIHNlcnZlciAoIyAlZCkgYWRkcmVzcyA9ICVzXG4iLAorCQkJbnMgKyAxLCBhYnVmKSk7CisKKworCQlpZiAodl9jaXJjdWl0KSB7CisJCQkvKiBVc2UgVkM7IGF0IG1vc3Qgb25lIGF0dGVtcHQgcGVyIHNlcnZlci4gKi8KKwkJCXRyeSA9IHN0YXRwLT5yZXRyeTsKKwkJCW4gPSBzZW5kX3ZjKHN0YXRwLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXosICZ0ZXJybm8sCisJCQkJICAgIG5zKTsKKwkJCWlmIChuIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlpZiAobiA9PSAwKQorCQkJCWdvdG8gbmV4dF9uczsKKwkJCXJlc3BsZW4gPSBuOworCQl9IGVsc2UgeworCQkJLyogVXNlIGRhdGFncmFtcy4gKi8KKwkJCW4gPSBzZW5kX2RnKHN0YXRwLCBidWYsIGJ1ZmxlbiwgYW5zLCBhbnNzaXosICZ0ZXJybm8sCisJCQkJICAgIG5zLCAmdl9jaXJjdWl0LCAmZ290c29tZXdoZXJlKTsKKwkJCWlmIChuIDwgMCkKKwkJCQlnb3RvIGZhaWw7CisJCQlpZiAobiA9PSAwKQorCQkJCWdvdG8gbmV4dF9uczsKKwkJCWlmICh2X2NpcmN1aXQpCisJCQkJZ290byBzYW1lX25zOworCQkJcmVzcGxlbiA9IG47CisJCX0KKworCQlEcHJpbnQoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkgICAgICAgKChzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSkgJiYKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9IRUFEMSkpLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IGdvdCBhbnN3ZXI6XG4iKSk7CisKKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIiVzIiwgIiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKworCQkvKgorCQkgKiBJZiB3ZSBoYXZlIHRlbXBvcmFyaWx5IG9wZW5lZCBhIHZpcnR1YWwgY2lyY3VpdCwKKwkJICogb3IgaWYgd2UgaGF2ZW4ndCBiZWVuIGFza2VkIHRvIGtlZXAgYSBzb2NrZXQgb3BlbiwKKwkJICogY2xvc2UgdGhlIHNvY2tldC4KKwkJICovCisJCWlmICgodl9jaXJjdWl0ICYmIChzdGF0cC0+b3B0aW9ucyAmIFJFU19VU0VWQykgPT0gMFUpIHx8CisJCSAgICAoc3RhdHAtPm9wdGlvbnMgJiBSRVNfU1RBWU9QRU4pID09IDBVKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJfQorCQlpZiAoc3RhdHAtPnJob29rKSB7CisJCQlpbnQgZG9uZSA9IDAsIGxvb3BzID0gMDsKKworCQkJZG8geworCQkJCXJlc19zZW5kaG9va2FjdCBhY3Q7CisKKwkJCQlhY3QgPSAoKnN0YXRwLT5yaG9vaykobnNhcCwgYnVmLCBidWZsZW4sCisJCQkJCQkgICAgICBhbnMsIGFuc3NpeiwgJnJlc3BsZW4pOworCQkJCXN3aXRjaCAoYWN0KSB7CisJCQkJY2FzZSByZXNfZ29haGVhZDoKKwkJCQljYXNlIHJlc19kb25lOgorCQkJCQlkb25lID0gMTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSByZXNfbmV4dG5zOgorCQkJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCQkJZ290byBuZXh0X25zOworCQkJCWNhc2UgcmVzX21vZGlmaWVkOgorCQkJCQkvKiBnaXZlIHRoZSBob29rIGFub3RoZXIgdHJ5ICovCisJCQkJCWlmICgrK2xvb3BzIDwgNDIpIC8qZG91ZyBhZGFtcyovCisJCQkJCQlicmVhazsKKwkJCQkJLypGQUxMVEhST1VHSCovCisJCQkJY2FzZSByZXNfZXJyb3I6CisJCQkJCS8qRkFMTFRIUk9VR0gqLworCQkJCWRlZmF1bHQ6CisJCQkJCWdvdG8gZmFpbDsKKwkJCQl9CisJCQl9IHdoaWxlICghZG9uZSk7CisKKwkJfQorCQlyZXR1cm4gKHJlc3BsZW4pOworIG5leHRfbnM6IDsKKwkgICB9IC8qZm9yZWFjaCBucyovCisJfSAvKmZvcmVhY2ggcmV0cnkqLworCXJlc19uY2xvc2Uoc3RhdHApOworCWlmICghdl9jaXJjdWl0KSB7CisJCWlmICghZ290c29tZXdoZXJlKQorCQkJZXJybm8gPSBFQ09OTlJFRlVTRUQ7CS8qIG5vIG5hbWVzZXJ2ZXJzIGZvdW5kICovCisJCWVsc2UKKwkJCWVycm5vID0gRVRJTUVET1VUOwkvKiBubyBhbnN3ZXIgb2J0YWluZWQgKi8KKwl9IGVsc2UKKwkJZXJybm8gPSB0ZXJybm87CisJcmV0dXJuICgtMSk7CisgZmFpbDoKKwlyZXNfbmNsb3NlKHN0YXRwKTsKKwlyZXR1cm4gKC0xKTsKK30KKworLyogUHJpdmF0ZSAqLworCitzdGF0aWMgaW50CitnZXRfc2FsZW4oc2EpCisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTsKK3sKKworI2lmZGVmIEhBVkVfU0FfTEVOCisJLyogVGhlcmUgYXJlIHBlb3BsZSBkbyBub3Qgc2V0IHNhX2xlbi4gIEJlIGZvcmdpdmluZyB0byB0aGVtLiAqLworCWlmIChzYS0+c2FfbGVuKQorCQlyZXR1cm4gKHNhLT5zYV9sZW4pOworI2VuZGlmCisKKwlpZiAoc2EtPnNhX2ZhbWlseSA9PSBBRl9JTkVUKQorCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW4pKTsKKwllbHNlIGlmIChzYS0+c2FfZmFtaWx5ID09IEFGX0lORVQ2KQorCQlyZXR1cm4gKHNpemVvZihzdHJ1Y3Qgc29ja2FkZHJfaW42KSk7CisJZWxzZQorCQlyZXR1cm4gKDApOwkvKiB1bmtub3duLCBkaWUgb24gY29ubmVjdCAqLworfQorCisvKgorICogcGljayBhcHByb3ByaWF0ZSBuc2FkZHJfbGlzdCBmb3IgdXNlLiAgc2VlIHJlc19pbml0KCkgZm9yIGluaXRpYWxpemF0aW9uLgorICovCitzdGF0aWMgc3RydWN0IHNvY2thZGRyICoKK2dldF9uc2FkZHIoc3RhdHAsIG4pCisJcmVzX3N0YXRlIHN0YXRwOworCXNpemVfdCBuOworeworCisJaWYgKCFzdGF0cC0+bnNhZGRyX2xpc3Rbbl0uc2luX2ZhbWlseSAmJiBFWFQoc3RhdHApLmV4dCkgeworCQkvKgorCQkgKiAtIEVYVChzdGF0cCkuZXh0LT5uc2FkZHJzW25dIGhvbGRzIGFuIGFkZHJlc3MgdGhhdCBpcyBsYXJnZXIKKwkJICogICB0aGFuIHN0cnVjdCBzb2NrYWRkciwgYW5kCisJCSAqIC0gdXNlciBjb2RlIGRpZCBub3QgdXBkYXRlIHN0YXRwLT5uc2FkZHJfbGlzdFtuXS4KKwkJICovCisJCXJldHVybiAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl07CisJfSBlbHNlIHsKKwkJLyoKKwkJICogLSB1c2VyIGNvZGUgdXBkYXRlZCBzdGF0cC0+bnNhZGRyX2xpc3Rbbl0sIG9yCisJCSAqIC0gc3RhdHAtPm5zYWRkcl9saXN0W25dIGhhcyB0aGUgc2FtZSBjb250ZW50IGFzCisJCSAqICAgRVhUKHN0YXRwKS5leHQtPm5zYWRkcnNbbl0uCisJCSAqLworCQlyZXR1cm4gKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnN0YXRwLT5uc2FkZHJfbGlzdFtuXTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfdmMocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zKQoreworCWNvbnN0IEhFQURFUiAqaHAgPSAoY29uc3QgSEVBREVSICopKGNvbnN0IHZvaWQgKilidWY7CisJSEVBREVSICphbmhwID0gKEhFQURFUiAqKSh2b2lkICopYW5zOworCXN0cnVjdCBzb2NrYWRkciAqbnNhcDsKKwlpbnQgbnNhcGxlbjsKKwlpbnQgdHJ1bmNhdGluZywgY29ubnJlc2V0LCByZXNwbGVuLCBuOworCXN0cnVjdCBpb3ZlYyBpb3ZbMl07CisJdV9zaG9ydCBsZW47CisJdV9jaGFyICpjcDsKKwl2b2lkICp0bXA7CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKworCWNvbm5yZXNldCA9IDA7Cisgc2FtZV9uczoKKwl0cnVuY2F0aW5nID0gMDsKKworCS8qIEFyZSB3ZSBzdGlsbCB0YWxraW5nIHRvIHdob20gd2Ugd2FudCB0byB0YWxrIHRvPyAqLworCWlmIChzdGF0cC0+X3Zjc29jayA+PSAwICYmIChzdGF0cC0+X2ZsYWdzICYgUkVTX0ZfVkMpICE9IDApIHsKKwkJc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgcGVlcjsKKwkJc29ja2xlbl90IHNpemUgPSBzaXplb2YgcGVlcjsKKworCQlpZiAoZ2V0cGVlcm5hbWUoc3RhdHAtPl92Y3NvY2ssCisJCQkJKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJnBlZXIsICZzaXplKSA8IDAgfHwKKwkJICAgICFzb2NrX2VxKChzdHJ1Y3Qgc29ja2FkZHIgKikodm9pZCAqKSZwZWVyLCBuc2FwKSkgeworCQkJcmVzX25jbG9zZShzdGF0cCk7CisJCQlzdGF0cC0+X2ZsYWdzICY9IH5SRVNfRl9WQzsKKwkJfQorCX0KKworCWlmIChzdGF0cC0+X3Zjc29jayA8IDAgfHwgKHN0YXRwLT5fZmxhZ3MgJiBSRVNfRl9WQykgPT0gMCkgeworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPj0gMCkKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCisJCXN0YXRwLT5fdmNzb2NrID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19TVFJFQU0sIDApOworCQlpZiAoc3RhdHAtPl92Y3NvY2sgPiBoaWdoZXN0RkQpIHsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZXJybm8gPSBFTk9UU09DSzsKKwkJfQorCQlpZiAoc3RhdHAtPl92Y3NvY2sgPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldCh2YykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KHZjKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorCQllcnJubyA9IDA7CisJCWlmIChyYW5kb21fYmluZChzdGF0cC0+X3Zjc29jayxuc2FwLT5zYV9mYW1pbHkpIDwgMCkgeworCQkJKnRlcnJubyA9IGVycm5vOworCQkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJiaW5kL3ZjIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKGNvbm5lY3Qoc3RhdHAtPl92Y3NvY2ssIG5zYXAsIChzb2NrbGVuX3QpbnNhcGxlbikgPCAwKSB7CisJCQkqdGVycm5vID0gZXJybm87CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImNvbm5lY3QvdmMiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorCQlzdGF0cC0+X2ZsYWdzIHw9IFJFU19GX1ZDOworCX0KKworCS8qCisJICogU2VuZCBsZW5ndGggJiBtZXNzYWdlCisJICovCisJbnNfcHV0MTYoKHVfc2hvcnQpYnVmbGVuLCAodV9jaGFyKikodm9pZCAqKSZsZW4pOworCWlvdlswXSA9IGV2Q29uc0lvdmVjKCZsZW4sIElOVDE2U1opOworCURFX0NPTlNUKGJ1ZiwgdG1wKTsKKwlpb3ZbMV0gPSBldkNvbnNJb3ZlYyh0bXAsIChzaXplX3QpYnVmbGVuKTsKKwlpZiAod3JpdGV2KHN0YXRwLT5fdmNzb2NrLCBpb3YsIDIpICE9IChJTlQxNlNaICsgYnVmbGVuKSkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAid3JpdGUgZmFpbGVkIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJLyoKKwkgKiBSZWNlaXZlIGxlbmd0aCAmIHJlc3BvbnNlCisJICovCisgcmVhZF9sZW46CisJY3AgPSBhbnM7CisJbGVuID0gSU5UMTZTWjsKKwl3aGlsZSAoKG4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCAoY2hhciAqKWNwLCAoc2l6ZV90KWxlbikpID4gMCkgeworCQljcCArPSBuOworCQlpZiAoKGxlbiAtPSBuKSA9PSAwKQorCQkJYnJlYWs7CisJfQorCWlmIChuIDw9IDApIHsKKwkJKnRlcnJubyA9IGVycm5vOworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInJlYWQgZmFpbGVkIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyoKKwkJICogQSBsb25nIHJ1bm5pbmcgcHJvY2VzcyBtaWdodCBnZXQgaXRzIFRDUAorCQkgKiBjb25uZWN0aW9uIHJlc2V0IGlmIHRoZSByZW1vdGUgc2VydmVyIHdhcworCQkgKiByZXN0YXJ0ZWQuICBSZXF1ZXJ5IHRoZSBzZXJ2ZXIgaW5zdGVhZCBvZgorCQkgKiB0cnlpbmcgYSBuZXcgb25lLiAgV2hlbiB0aGVyZSBpcyBvbmx5IG9uZQorCQkgKiBzZXJ2ZXIsIHRoaXMgbWVhbnMgdGhhdCBhIHF1ZXJ5IG1pZ2h0IHdvcmsKKwkJICogaW5zdGVhZCBvZiBmYWlsaW5nLiAgV2Ugb25seSBhbGxvdyBvbmUgcmVzZXQKKwkJICogcGVyIHF1ZXJ5IHRvIHByZXZlbnQgbG9vcGluZy4KKwkJICovCisJCWlmICgqdGVycm5vID09IEVDT05OUkVTRVQgJiYgIWNvbm5yZXNldCkgeworCQkJY29ubnJlc2V0ID0gMTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJZ290byBzYW1lX25zOworCQl9CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwlyZXNwbGVuID0gbnNfZ2V0MTYoYW5zKTsKKwlpZiAocmVzcGxlbiA+IGFuc3NpeikgeworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgcmVzcG9uc2UgdHJ1bmNhdGVkXG4iKQorCQkgICAgICAgKTsKKwkJdHJ1bmNhdGluZyA9IDE7CisJCWxlbiA9IGFuc3NpejsKKwl9IGVsc2UKKwkJbGVuID0gcmVzcGxlbjsKKwlpZiAobGVuIDwgSEZJWEVEU1opIHsKKwkJLyoKKwkJICogVW5kZXJzaXplZCBtZXNzYWdlLgorCQkgKi8KKwkJRHByaW50KHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHLAorCQkgICAgICAgKHN0ZG91dCwgIjs7IHVuZGVyc2l6ZWQ6ICVkXG4iLCBsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJY3AgPSBhbnM7CisJd2hpbGUgKGxlbiAhPSAwICYmIChuID0gcmVhZChzdGF0cC0+X3Zjc29jaywgKGNoYXIgKiljcCwgKHNpemVfdClsZW4pKSA+IDApeworCQljcCArPSBuOworCQlsZW4gLT0gbjsKKwl9CisJaWYgKG4gPD0gMCkgeworCQkqdGVycm5vID0gZXJybm87CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVhZCh2YykiLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAodHJ1bmNhdGluZykgeworCQkvKgorCQkgKiBGbHVzaCByZXN0IG9mIGFuc3dlciBzbyBjb25uZWN0aW9uIHN0YXlzIGluIHN5bmNoLgorCQkgKi8KKwkJYW5ocC0+dGMgPSAxOworCQlsZW4gPSByZXNwbGVuIC0gYW5zc2l6OworCQl3aGlsZSAobGVuICE9IDApIHsKKwkJCWNoYXIganVua1tQQUNLRVRTWl07CisKKwkJCW4gPSByZWFkKHN0YXRwLT5fdmNzb2NrLCBqdW5rLAorCQkJCSAobGVuID4gc2l6ZW9mIGp1bmspID8gc2l6ZW9mIGp1bmsgOiBsZW4pOworCQkJaWYgKG4gPiAwKQorCQkJCWxlbiAtPSBuOworCQkJZWxzZQorCQkJCWJyZWFrOworCQl9CisJfQorCS8qCisJICogSWYgdGhlIGNhbGxpbmcgYXBwbGljYXRpbmcgaGFzIGJhaWxlZCBvdXQgb2YKKwkgKiBhIHByZXZpb3VzIGNhbGwgYW5kIGZhaWxlZCB0byBhcnJhbmdlIHRvIGhhdmUKKwkgKiB0aGUgY2lyY3VpdCBjbG9zZWQgb3IgdGhlIHNlcnZlciBoYXMgZ290CisJICogaXRzZWxmIGNvbmZ1c2VkLCB0aGVuIGRyb3AgdGhlIHBhY2tldCBhbmQKKwkgKiB3YWl0IGZvciB0aGUgY29ycmVjdCBvbmUuCisJICovCisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQlEcHJpbnRRKChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRykgfHwKKwkJCShzdGF0cC0+cGZjb2RlICYgUkVTX1BSRl9SRVBMWSksCisJCQkoc3Rkb3V0LCAiOzsgb2xkIGFuc3dlciAodW5leHBlY3RlZCk6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6OiByZXNwbGVuKTsKKwkJZ290byByZWFkX2xlbjsKKwl9CisKKwkvKgorCSAqIEFsbCBpcyB3ZWxsLCBvciB0aGUgZXJyb3IgaXMgZmF0YWwuICBTaWduYWwgdGhhdCB0aGUKKwkgKiBuZXh0IG5hbWVzZXJ2ZXIgb3VnaHQgbm90IGJlIHRyaWVkLgorCSAqLworCXJldHVybiAocmVzcGxlbik7Cit9CisKK3N0YXRpYyBpbnQKK3NlbmRfZGcocmVzX3N0YXRlIHN0YXRwLAorCWNvbnN0IHVfY2hhciAqYnVmLCBpbnQgYnVmbGVuLCB1X2NoYXIgKmFucywgaW50IGFuc3NpeiwKKwlpbnQgKnRlcnJubywgaW50IG5zLCBpbnQgKnZfY2lyY3VpdCwgaW50ICpnb3Rzb21ld2hlcmUpCit7CisJY29uc3QgSEVBREVSICpocCA9IChjb25zdCBIRUFERVIgKikoY29uc3Qgdm9pZCAqKWJ1ZjsKKwlIRUFERVIgKmFuaHAgPSAoSEVBREVSICopKHZvaWQgKilhbnM7CisJY29uc3Qgc3RydWN0IHNvY2thZGRyICpuc2FwOworCWludCBuc2FwbGVuOworCXN0cnVjdCB0aW1lc3BlYyBub3csIHRpbWVvdXQsIGZpbmlzaDsKKwlmZF9zZXQgZHNtYXNrOworCXN0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIGZyb207CisJc29ja2xlbl90IGZyb21sZW47CisJaW50IHJlc3BsZW4sIHNlY29uZHMsIG4sIHM7CisKKwluc2FwID0gZ2V0X25zYWRkcihzdGF0cCwgKHNpemVfdClucyk7CisJbnNhcGxlbiA9IGdldF9zYWxlbihuc2FwKTsKKwlpZiAoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSA9PSAtMSkgeworCQlFWFQoc3RhdHApLm5zc29ja3NbbnNdID0gc29ja2V0KG5zYXAtPnNhX2ZhbWlseSwgU09DS19ER1JBTSwgMCk7CisJCWlmIChFWFQoc3RhdHApLm5zc29ja3NbbnNdID4gaGlnaGVzdEZEKSB7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCWVycm5vID0gRU5PVFNPQ0s7CisJCX0KKwkJaWYgKEVYVChzdGF0cCkubnNzb2Nrc1tuc10gPCAwKSB7CisJCQlzd2l0Y2ggKGVycm5vKSB7CisJCQljYXNlIEVQUk9UT05PU1VQUE9SVDoKKyNpZmRlZiBFUEZOT1NVUFBPUlQKKwkJCWNhc2UgRVBGTk9TVVBQT1JUOgorI2VuZGlmCisJCQljYXNlIEVBRk5PU1VQUE9SVDoKKwkJCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNvY2tldChkZykiLCBlcnJubyk7CisJCQkJcmV0dXJuICgwKTsKKwkJCWRlZmF1bHQ6CisJCQkJKnRlcnJubyA9IGVycm5vOworCQkJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAic29ja2V0KGRnKSIsIGVycm5vKTsKKwkJCQlyZXR1cm4gKC0xKTsKKwkJCX0KKwkJfQorI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCQkvKgorCQkgKiBPbiBhIDQuM0JTRCsgbWFjaGluZSAoY2xpZW50IGFuZCBzZXJ2ZXIsCisJCSAqIGFjdHVhbGx5KSwgc2VuZGluZyB0byBhIG5hbWVzZXJ2ZXIgZGF0YWdyYW0KKwkJICogcG9ydCB3aXRoIG5vIG5hbWVzZXJ2ZXIgd2lsbCBjYXVzZSBhbgorCQkgKiBJQ01QIHBvcnQgdW5yZWFjaGFibGUgbWVzc2FnZSB0byBiZSByZXR1cm5lZC4KKwkJICogSWYgb3VyIGRhdGFncmFtIHNvY2tldCBpcyAiY29ubmVjdGVkIiB0byB0aGUKKwkJICogc2VydmVyLCB3ZSBnZXQgYW4gRUNPTk5SRUZVU0VEIGVycm9yIG9uIHRoZSBuZXh0CisJCSAqIHNvY2tldCBvcGVyYXRpb24sIGFuZCBzZWxlY3QgcmV0dXJucyBpZiB0aGUKKwkJICogZXJyb3IgbWVzc2FnZSBpcyByZWNlaXZlZC4gIFdlIGNhbiB0aHVzIGRldGVjdAorCQkgKiB0aGUgYWJzZW5jZSBvZiBhIG5hbWVzZXJ2ZXIgd2l0aG91dCB0aW1pbmcgb3V0LgorCQkgKi8KKwkJaWYgKHJhbmRvbV9iaW5kKEVYVChzdGF0cCkubnNzb2Nrc1tuc10sIG5zYXAtPnNhX2ZhbWlseSkgPCAwKSB7CisJCQlBZXJyb3Ioc3RhdHAsIHN0ZGVyciwgImJpbmQoZGcpIiwgZXJybm8sIG5zYXAsCisJCQkgICAgbnNhcGxlbik7CisJCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJCXJldHVybiAoMCk7CisJCX0KKwkJaWYgKGNvbm5lY3QoRVhUKHN0YXRwKS5uc3NvY2tzW25zXSwgbnNhcCwgKHNvY2tsZW5fdCluc2FwbGVuKSA8IDApIHsKKwkJCUFlcnJvcihzdGF0cCwgc3RkZXJyLCAiY29ubmVjdChkZykiLCBlcnJubywgbnNhcCwKKwkJCSAgICBuc2FwbGVuKTsKKwkJCXJlc19uY2xvc2Uoc3RhdHApOworCQkJcmV0dXJuICgwKTsKKwkJfQorI2VuZGlmIC8qICFDQU5OT1RfQ09OTkVDVF9ER1JBTSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgbmV3IERHIHNvY2tldFxuIikpCisJfQorCXMgPSBFWFQoc3RhdHApLm5zc29ja3NbbnNdOworI2lmbmRlZiBDQU5OT1RfQ09OTkVDVF9ER1JBTQorCWlmIChzZW5kKHMsIChjb25zdCBjaGFyKilidWYsIChzaXplX3QpYnVmbGVuLCAwKSAhPSBidWZsZW4pIHsKKwkJUGVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kIiwgZXJybm8pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisjZWxzZSAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KKwlpZiAoc2VuZHRvKHMsIChjb25zdCBjaGFyKilidWYsIGJ1ZmxlbiwgMCwgbnNhcCwgbnNhcGxlbikgIT0gYnVmbGVuKQorCXsKKwkJQWVycm9yKHN0YXRwLCBzdGRlcnIsICJzZW5kdG8iLCBlcnJubywgbnNhcCwgbnNhcGxlbik7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKyNlbmRpZiAvKiAhQ0FOTk9UX0NPTk5FQ1RfREdSQU0gKi8KKworCS8qCisJICogV2FpdCBmb3IgcmVwbHkuCisJICovCisJc2Vjb25kcyA9IChzdGF0cC0+cmV0cmFucyA8PCBucyk7CisJaWYgKG5zID4gMCkKKwkJc2Vjb25kcyAvPSBzdGF0cC0+bnNjb3VudDsKKwlpZiAoc2Vjb25kcyA8PSAwKQorCQlzZWNvbmRzID0gMTsKKwlub3cgPSBldk5vd1RpbWUoKTsKKwl0aW1lb3V0ID0gZXZDb25zVGltZSgobG9uZylzZWNvbmRzLCAwTCk7CisJZmluaXNoID0gZXZBZGRUaW1lKG5vdywgdGltZW91dCk7CisJZ290byBub25vdzsKKyB3YWl0OgorCW5vdyA9IGV2Tm93VGltZSgpOworIG5vbm93OgorCUZEX1pFUk8oJmRzbWFzayk7CisJRkRfU0VUKHMsICZkc21hc2spOworCWlmIChldkNtcFRpbWUoZmluaXNoLCBub3cpID4gMCkKKwkJdGltZW91dCA9IGV2U3ViVGltZShmaW5pc2gsIG5vdyk7CisJZWxzZQorCQl0aW1lb3V0ID0gZXZDb25zVGltZSgwTCwgMEwpOworCW4gPSBwc2VsZWN0KHMgKyAxLCAmZHNtYXNrLCBOVUxMLCBOVUxMLCAmdGltZW91dCwgTlVMTCk7CisJaWYgKG4gPT0gMCkgeworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsIChzdGRvdXQsICI7OyB0aW1lb3V0XG4iKSk7CisJCSpnb3Rzb21ld2hlcmUgPSAxOworCQlyZXR1cm4gKDApOworCX0KKwlpZiAobiA8IDApIHsKKwkJaWYgKGVycm5vID09IEVJTlRSKQorCQkJZ290byB3YWl0OworCQlQZXJyb3Ioc3RhdHAsIHN0ZGVyciwgInNlbGVjdCIsIGVycm5vKTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorCWVycm5vID0gMDsKKwlmcm9tbGVuID0gc2l6ZW9mKGZyb20pOworCXJlc3BsZW4gPSByZWN2ZnJvbShzLCAoY2hhciopYW5zLCAoc2l6ZV90KWFuc3NpeiwwLAorCQkJICAgKHN0cnVjdCBzb2NrYWRkciAqKSh2b2lkICopJmZyb20sICZmcm9tbGVuKTsKKwlpZiAocmVzcGxlbiA8PSAwKSB7CisJCVBlcnJvcihzdGF0cCwgc3RkZXJyLCAicmVjdmZyb20iLCBlcnJubyk7CisJCXJlc19uY2xvc2Uoc3RhdHApOworCQlyZXR1cm4gKDApOworCX0KKwkqZ290c29tZXdoZXJlID0gMTsKKwlpZiAocmVzcGxlbiA8IEhGSVhFRFNaKSB7CisJCS8qCisJCSAqIFVuZGVyc2l6ZWQgbWVzc2FnZS4KKwkJICovCisJCURwcmludChzdGF0cC0+b3B0aW9ucyAmIFJFU19ERUJVRywKKwkJICAgICAgIChzdGRvdXQsICI7OyB1bmRlcnNpemVkOiAlZFxuIiwKKwkJCXJlc3BsZW4pKTsKKwkJKnRlcnJubyA9IEVNU0dTSVpFOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJcmV0dXJuICgwKTsKKwl9CisJaWYgKGhwLT5pZCAhPSBhbmhwLT5pZCkgeworCQkvKgorCQkgKiByZXNwb25zZSBmcm9tIG9sZCBxdWVyeSwgaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IG9sZCBhbnN3ZXI6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCWdvdG8gd2FpdDsKKwl9CisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUxKSAmJgorCSAgICAhcmVzX291cnNlcnZlcl9wKHN0YXRwLCAoc3RydWN0IHNvY2thZGRyICopKHZvaWQgKikmZnJvbSkpIHsKKwkJLyoKKwkJICogcmVzcG9uc2UgZnJvbSB3cm9uZyBzZXJ2ZXI/IGlnbm9yZSBpdC4KKwkJICogWFhYIC0gcG90ZW50aWFsIHNlY3VyaXR5IGhhemFyZCBjb3VsZAorCQkgKgkgYmUgZGV0ZWN0ZWQgaGVyZS4KKwkJICovCisJCURwcmludFEoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSB8fAorCQkJKHN0YXRwLT5wZmNvZGUgJiBSRVNfUFJGX1JFUExZKSwKKwkJCShzdGRvdXQsICI7OyBub3Qgb3VyIHNlcnZlcjpcbiIpLAorCQkJYW5zLCAocmVzcGxlbiA+IGFuc3NpeikgPyBhbnNzaXogOiByZXNwbGVuKTsKKwkJZ290byB3YWl0OworCX0KKyNpZmRlZiBSRVNfVVNFX0VETlMwCisJaWYgKGFuaHAtPnJjb2RlID09IEZPUk1FUlIgJiYgKHN0YXRwLT5vcHRpb25zICYgUkVTX1VTRV9FRE5TMCkgIT0gMFUpIHsKKwkJLyoKKwkJICogRG8gbm90IHJldHJ5IGlmIHRoZSBzZXJ2ZXIgZG8gbm90IHVuZGVyc3RhbmQgRUROUzAuCisJCSAqIFRoZSBjYXNlIGhhcyB0byBiZSBjYXB0dXJlZCBoZXJlLCBhcyBGT1JNRVJSIHBhY2tldCBkbyBub3QKKwkJICogY2FycnkgcXVlcnkgc2VjdGlvbiwgaGVuY2UgcmVzX3F1ZXJpZXNtYXRjaCgpIHJldHVybnMgMC4KKwkJICovCisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5IHdpdGggRUROUzA6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCS8qIHJlY29yZCB0aGUgZXJyb3IgKi8KKwkJc3RhdHAtPl9mbGFncyB8PSBSRVNfRl9FRE5TMEVSUjsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMCk7CisJfQorI2VuZGlmCisJaWYgKCEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfSU5TRUNVUkUyKSAmJgorCSAgICAhcmVzX3F1ZXJpZXNtYXRjaChidWYsIGJ1ZiArIGJ1ZmxlbiwKKwkJCSAgICAgIGFucywgYW5zICsgYW5zc2l6KSkgeworCQkvKgorCQkgKiByZXNwb25zZSBjb250YWlucyB3cm9uZyBxdWVyeT8gaWdub3JlIGl0LgorCQkgKiBYWFggLSBwb3RlbnRpYWwgc2VjdXJpdHkgaGF6YXJkIGNvdWxkCisJCSAqCSBiZSBkZXRlY3RlZCBoZXJlLgorCQkgKi8KKwkJRHByaW50USgoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcpIHx8CisJCQkoc3RhdHAtPnBmY29kZSAmIFJFU19QUkZfUkVQTFkpLAorCQkJKHN0ZG91dCwgIjs7IHdyb25nIHF1ZXJ5IG5hbWU6XG4iKSwKKwkJCWFucywgKHJlc3BsZW4gPiBhbnNzaXopID8gYW5zc2l6IDogcmVzcGxlbik7CisJCWdvdG8gd2FpdDsKKwl9CisJaWYgKGFuaHAtPnJjb2RlID09IFNFUlZGQUlMIHx8CisJICAgIGFuaHAtPnJjb2RlID09IE5PVElNUCB8fAorCSAgICBhbmhwLT5yY29kZSA9PSBSRUZVU0VEKSB7CisJCURwcmludFEoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCQkoc3Rkb3V0LCAic2VydmVyIHJlamVjdGVkIHF1ZXJ5OlxuIiksCisJCQlhbnMsIChyZXNwbGVuID4gYW5zc2l6KSA/IGFuc3NpeiA6IHJlc3BsZW4pOworCQlyZXNfbmNsb3NlKHN0YXRwKTsKKwkJLyogZG9uJ3QgcmV0cnkgaWYgY2FsbGVkIGZyb20gZGlnICovCisJCWlmICghc3RhdHAtPnBmY29kZSkKKwkJCXJldHVybiAoMCk7CisJfQorCWlmICghKHN0YXRwLT5vcHRpb25zICYgUkVTX0lHTlRDKSAmJiBhbmhwLT50YykgeworCQkvKgorCQkgKiBUbyBnZXQgdGhlIHJlc3Qgb2YgYW5zd2VyLAorCQkgKiB1c2UgVENQIHdpdGggc2FtZSBzZXJ2ZXIuCisJCSAqLworCQlEcHJpbnQoc3RhdHAtPm9wdGlvbnMgJiBSRVNfREVCVUcsCisJCSAgICAgICAoc3Rkb3V0LCAiOzsgdHJ1bmNhdGVkIGFuc3dlclxuIikpOworCQkqdl9jaXJjdWl0ID0gMTsKKwkJcmVzX25jbG9zZShzdGF0cCk7CisJCXJldHVybiAoMSk7CisJfQorCS8qCisJICogQWxsIGlzIHdlbGwsIG9yIHRoZSBlcnJvciBpcyBmYXRhbC4gIFNpZ25hbCB0aGF0IHRoZQorCSAqIG5leHQgbmFtZXNlcnZlciBvdWdodCBub3QgYmUgdHJpZWQuCisJICovCisJcmV0dXJuIChyZXNwbGVuKTsKK30KKworc3RhdGljIHZvaWQKK0FlcnJvcihjb25zdCByZXNfc3RhdGUgc3RhdHAsIEZJTEUgKmZpbGUsIGNvbnN0IGNoYXIgKnN0cmluZywgaW50IGVycm9yLAorICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgaW50IGFsZW4pCit7CisJaW50IHNhdmUgPSBlcnJubzsKKwljaGFyIGhidWZbTklfTUFYSE9TVF07CisJY2hhciBzYnVmW05JX01BWFNFUlZdOworCisJYWxlbiA9IGFsZW47CisKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAhPSAwVSkgeworCQlpZiAoZ2V0bmFtZWluZm8oYWRkcmVzcywgKHNvY2tsZW5fdClhbGVuLCBoYnVmLCBzaXplb2YoaGJ1ZiksCisJCSAgICBzYnVmLCBzaXplb2Yoc2J1ZiksIG5pZmxhZ3MpKSB7CisJCQlzdHJuY3B5KGhidWYsICI/Iiwgc2l6ZW9mKGhidWYpIC0gMSk7CisJCQloYnVmW3NpemVvZihoYnVmKSAtIDFdID0gJ1wwJzsKKwkJCXN0cm5jcHkoc2J1ZiwgIj8iLCBzaXplb2Yoc2J1ZikgLSAxKTsKKwkJCXNidWZbc2l6ZW9mKHNidWYpIC0gMV0gPSAnXDAnOworCQl9CisJCWZwcmludGYoZmlsZSwgInJlc19zZW5kOiAlcyAoWyVzXS4lcyk6ICVzXG4iLAorCQkJc3RyaW5nLCBoYnVmLCBzYnVmLCBzdHJlcnJvcihlcnJvcikpOworCX0KKwllcnJubyA9IHNhdmU7Cit9CisKK3N0YXRpYyB2b2lkCitQZXJyb3IoY29uc3QgcmVzX3N0YXRlIHN0YXRwLCBGSUxFICpmaWxlLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBlcnJvcikgeworCWludCBzYXZlID0gZXJybm87CisKKwlpZiAoKHN0YXRwLT5vcHRpb25zICYgUkVTX0RFQlVHKSAhPSAwVSkKKwkJZnByaW50ZihmaWxlLCAicmVzX3NlbmQ6ICVzOiAlc1xuIiwKKwkJCXN0cmluZywgc3RyZXJyb3IoZXJyb3IpKTsKKwllcnJubyA9IHNhdmU7Cit9CisKK3N0YXRpYyBpbnQKK3NvY2tfZXEoc3RydWN0IHNvY2thZGRyICphLCBzdHJ1Y3Qgc29ja2FkZHIgKmIpIHsKKwlzdHJ1Y3Qgc29ja2FkZHJfaW4gKmE0LCAqYjQ7CisJc3RydWN0IHNvY2thZGRyX2luNiAqYTYsICpiNjsKKworCWlmIChhLT5zYV9mYW1pbHkgIT0gYi0+c2FfZmFtaWx5KQorCQlyZXR1cm4gMDsKKwlzd2l0Y2ggKGEtPnNhX2ZhbWlseSkgeworCWNhc2UgQUZfSU5FVDoKKwkJYTQgPSAoc3RydWN0IHNvY2thZGRyX2luICopKHZvaWQgKilhOworCQliNCA9IChzdHJ1Y3Qgc29ja2FkZHJfaW4gKikodm9pZCAqKWI7CisJCXJldHVybiBhNC0+c2luX3BvcnQgPT0gYjQtPnNpbl9wb3J0ICYmCisJCSAgICBhNC0+c2luX2FkZHIuc19hZGRyID09IGI0LT5zaW5fYWRkci5zX2FkZHI7CisJY2FzZSBBRl9JTkVUNjoKKwkJYTYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopYTsKKwkJYjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKSh2b2lkICopYjsKKwkJcmV0dXJuIGE2LT5zaW42X3BvcnQgPT0gYjYtPnNpbjZfcG9ydCAmJgorI2lmZGVmIEhBVkVfU0lONl9TQ09QRV9JRAorCQkgICAgYTYtPnNpbjZfc2NvcGVfaWQgPT0gYjYtPnNpbjZfc2NvcGVfaWQgJiYKKyNlbmRpZgorCQkgICAgSU42X0FSRV9BRERSX0VRVUFMKCZhNi0+c2luNl9hZGRyLCAmYjYtPnNpbjZfYWRkcik7CisJZGVmYXVsdDoKKwkJcmV0dXJuIDA7CisJfQorfQorCisjaWZkZWYgTkVFRF9QU0VMRUNUCisvKiBYWFggbmVlZHMgdG8gbW92ZSB0byB0aGUgcG9ydGluZyBsaWJyYXJ5LiAqLworc3RhdGljIGludAorcHNlbGVjdChpbnQgbmZkcywgdm9pZCAqcmZkcywgdm9pZCAqd2Zkcywgdm9pZCAqZWZkcywKKwlzdHJ1Y3QgdGltZXNwZWMgKnRzcCwgY29uc3Qgc2lnc2V0X3QgKnNpZ21hc2spCit7CisJc3RydWN0IHRpbWV2YWwgdHYsICp0dnA7CisJc2lnc2V0X3Qgc2lnczsKKwlpbnQgbjsKKworCWlmICh0c3ApIHsKKwkJdHZwID0gJnR2OworCQl0diA9IGV2VGltZVZhbCgqdHNwKTsKKwl9IGVsc2UKKwkJdHZwID0gTlVMTDsKKwlpZiAoc2lnbWFzaykKKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssIHNpZ21hc2ssICZzaWdzKTsKKwluID0gc2VsZWN0KG5mZHMsIHJmZHMsIHdmZHMsIGVmZHMsIHR2cCk7CisJaWYgKHNpZ21hc2spCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmc2lncywgTlVMTCk7CisJaWYgKHRzcCkKKwkJKnRzcCA9IGV2VGltZVNwZWModHYpOworCXJldHVybiAobik7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYyBiL2xpYmMvbmV0YnNkL3Jlc29sdi9yZXNfc3RhdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZjI4NTFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9uZXRic2QvcmVzb2x2L3Jlc19zdGF0ZS5jCkBAIC0wLDAgKzEsMTk0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXJwYS9pbmV0Lmg+CisjaW5jbHVkZSAiYXJwYV9uYW1lc2VyLmgiCisjaW5jbHVkZSA8bmV0ZGIuaD4KKyNpbmNsdWRlICJyZXNvbHZfcHJpdmF0ZS5oIgorI2luY2x1ZGUgInJlc29sdl9jYWNoZS5oIgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2RlZmluZSBfUkVBTExZX0lOQ0xVREVfU1lTX19TWVNURU1fUFJPUEVSVElFU19IXworI2luY2x1ZGUgPHN5cy9fc3lzdGVtX3Byb3BlcnRpZXMuaD4KKworc3RhdGljIHB0aHJlYWRfa2V5X3QgICBfcmVzX2tleTsKK3N0YXRpYyBwdGhyZWFkX29uY2VfdCAgX3Jlc19vbmNlOworCit0eXBlZGVmIHN0cnVjdCB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICBfaF9lcnJubzsKKyAgICBzdHJ1Y3QgX19yZXNfc3RhdGUgICAgIF9ucmVzWzFdOworICAgIHVuc2lnbmVkICAgICAgICAgICAgICAgX3NlcmlhbDsKKyAgICBzdHJ1Y3QgcHJvcF9pbmZvKiAgICAgIF9waTsKKyAgICBzdHJ1Y3QgaG9zdGVudCogICAgICAgIF9ob3N0ZW50OworICAgIHN0cnVjdCByZXNfc3RhdGljICAgICAgX3JzdGF0aWNbMV07Cit9IF9yZXNfdGhyZWFkOworCitzdGF0aWMgX3Jlc190aHJlYWQqCitfcmVzX3RocmVhZF9hbGxvYyh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBtYWxsb2Moc2l6ZW9mKCpydCkpOworCisgICAgaWYgKHJ0KSB7CisgICAgICAgIHJ0LT5faF9lcnJubyA9IDA7CisgICAgICAgIC8qIFNwZWNpYWwgc3lzdGVtIHByb3BlcnR5IHdoaWNoIHRyYWNrcyBhbnkgY2hhbmdlcyB0byAnbmV0LionLiAqLworICAgICAgICBydC0+X3NlcmlhbCA9IDA7CisgICAgICAgIHJ0LT5fcGkgPSAoc3RydWN0IHByb3BfaW5mbyopIF9fc3lzdGVtX3Byb3BlcnR5X2ZpbmQoIm5ldC5jaGFuZ2UiKTsKKyAgICAgICAgaWYgKHJ0LT5fcGkpIHsKKyAgICAgICAgICAgIHJ0LT5fc2VyaWFsID0gcnQtPl9waS0+c2VyaWFsOworICAgICAgICB9CisgICAgICAgIGlmICggcmVzX25pbml0KCBydC0+X25yZXMgKSA8IDAgKSB7CisgICAgICAgICAgICBmcmVlKHJ0KTsKKyAgICAgICAgICAgIHJ0ID0gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBydC0+X2hvc3RlbnQgPSBOVUxMOworICAgICAgICBtZW1zZXQocnQtPl9yc3RhdGljLCAwLCBzaXplb2YgcnQtPl9yc3RhdGljKTsKKyAgICB9CisgICAgcmV0dXJuIHJ0OworfQorCitzdGF0aWMgdm9pZAorX3Jlc19zdGF0aWNfZG9uZSggcmVzX3N0YXRpYyAgcnMgKQoreworICAgIC8qIGZvcnR1bmF0ZWx5LCB0aGVyZSBpcyBub3RoaW5nIHRvIGRvIGhlcmUsIHNpbmNlIHRoZQorICAgICAqIHBvaW50cyBpbiBoX2FkZHJfcHRycyBhbmQgaG9zdF9hbGlhc2VzIHNob3VsZCBhbGwKKyAgICAgKiBwb2ludCB0byAnaG9zdGJ1ZicKKyAgICAgKi8KKyAgICBpZiAocnMtPmhvc3RmKSB7ICAvKiBzaG91bGQgbm90IGhhcHBlbiBpbiB0aGVvcnksIGJ1dCBqdXN0IGJlIHNhZmUgKi8KKyAgICAgICAgZmNsb3NlKHJzLT5ob3N0Zik7CisgICAgICAgIHJzLT5ob3N0ZiA9IE5VTEw7CisgICAgfQorICAgIGZyZWUocnMtPnNlcnZlbnQuc19hbGlhc2VzKTsKK30KKworc3RhdGljIHZvaWQKK19yZXNfdGhyZWFkX2ZyZWUoIHZvaWQqICBfcnQgKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcnQ7CisKKyAgICBfcmVzX3N0YXRpY19kb25lKHJ0LT5fcnN0YXRpYyk7CisgICAgX3Jlc29sdl9ob3N0ZW50X2ZyZWUocnQtPl9ob3N0ZW50KTsKKyAgICByZXNfbmRlc3Ryb3kocnQtPl9ucmVzKTsKKyAgICBmcmVlKHJ0KTsKK30KKworc3RhdGljIHZvaWQKK19yZXNfaW5pdF9rZXkoIHZvaWQgKQoreworICAgIHB0aHJlYWRfa2V5X2NyZWF0ZSggJl9yZXNfa2V5LCBfcmVzX3RocmVhZF9mcmVlICk7Cit9CisKK3N0YXRpYyBfcmVzX3RocmVhZCoKK19yZXNfdGhyZWFkX2dldCh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQ7CisgICAgcHRocmVhZF9vbmNlKCAmX3Jlc19vbmNlLCBfcmVzX2luaXRfa2V5ICk7CisgICAgcnQgPSBwdGhyZWFkX2dldHNwZWNpZmljKCBfcmVzX2tleSApOworICAgIGlmIChydCA9PSBOVUxMKSB7CisgICAgICAgIGlmICgocnQgPSBfcmVzX3RocmVhZF9hbGxvYygpKSA9PSBOVUxMKSB7CisgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgfQorICAgICAgICBydC0+X2hfZXJybm8gPSAwOworICAgICAgICBydC0+X3NlcmlhbCA9IDA7CisgICAgICAgIHB0aHJlYWRfc2V0c3BlY2lmaWMoIF9yZXNfa2V5LCBydCApOworICAgIH0KKyAgICAvKiBDaGVjayB0aGUgc2VyaWFsIHZhbHVlIGZvciBhbnkgY2hhbmVzIHRvIG5ldC4qIHByb3BlcnRpZXMuICovCisgICAgaWYgKHJ0LT5fcGkgPT0gTlVMTCkgeworICAgICAgICBydC0+X3BpID0gKHN0cnVjdCBwcm9wX2luZm8qKSBfX3N5c3RlbV9wcm9wZXJ0eV9maW5kKCJuZXQuY2hhbmdlIik7CisgICAgfQorICAgIGlmIChydC0+X3BpID09IE5VTEwgfHwgcnQtPl9zZXJpYWwgPT0gcnQtPl9waS0+c2VyaWFsKSB7CisgICAgICAgIHJldHVybiBydDsKKyAgICB9CisgICAgcnQtPl9zZXJpYWwgPSBydC0+X3BpLT5zZXJpYWw7CisgICAgLyogUmVsb2FkIGZyb20gc3lzdGVtIHByb3BlcnRpZXMuICovCisgICAgaWYgKCByZXNfbmluaXQoIHJ0LT5fbnJlcyApIDwgMCApIHsKKyAgICAgICAgZnJlZShydCk7CisgICAgICAgIHJ0ID0gTlVMTDsKKyAgICAgICAgcHRocmVhZF9zZXRzcGVjaWZpYyggX3Jlc19rZXksIHJ0ICk7CisgICAgfQorICAgIHJldHVybiBydDsKK30KKworc3RydWN0IF9fcmVzX3N0YXRlIF9ucmVzOworCisjaWYgMAorc3RydWN0IHJlc29sdl9jYWNoZSoKK19fZ2V0X3Jlc19jYWNoZSh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcmVzX3RocmVhZF9nZXQoKTsKKworICAgIGlmICghcnQpCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKCFydC0+X2NhY2hlKSB7CisgICAgICAgIHJ0LT5fY2FjaGUgPSBfcmVzb2x2X2NhY2hlX2NyZWF0ZSgpOworICAgIH0KKyAgICByZXR1cm4gcnQtPl9jYWNoZTsKK30KKyNlbmRpZgorCitpbnQqCitfX2dldF9oX2Vycm5vKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCAgICA9IF9yZXNfdGhyZWFkX2dldCgpOworICAgIHN0YXRpYyBpbnQgICAgcGFuaWMgPSBORVREQl9JTlRFUk5BTDsKKworICAgIHJldHVybiBydCA/ICZydC0+X2hfZXJybm8gOiAmcGFuaWM7Cit9CisKK3Jlc19zdGF0ZQorX19yZXNfZ2V0X3N0YXRlKHZvaWQpCit7CisgICAgX3Jlc190aHJlYWQqICBydCA9IF9yZXNfdGhyZWFkX2dldCgpOworCisgICAgcmV0dXJuIHJ0ID8gcnQtPl9ucmVzIDogTlVMTDsKK30KKwordm9pZAorX19yZXNfcHV0X3N0YXRlKHJlc19zdGF0ZSByZXMpCit7CisgICAgLyogbm90aGluZyB0byBkbyAqLworICAgIHJlcz1yZXM7Cit9CisKK3N0cnVjdCBob3N0ZW50KioKK19fZ2V0X3Jlc19jYWNoZV9ob3N0ZW50X3Aodm9pZCkKK3sKKyAgICBfcmVzX3RocmVhZCogIHJ0ID0gX3Jlc190aHJlYWRfZ2V0KCk7CisKKyAgICByZXR1cm4gcnQgPyAmcnQtPl9ob3N0ZW50IDogTlVMTDsKK30KKworcmVzX3N0YXRpYworX19yZXNfZ2V0X3N0YXRpYyh2b2lkKQoreworICAgIF9yZXNfdGhyZWFkKiAgcnQgPSBfcmVzX3RocmVhZF9nZXQoKTsKKworICAgIHJldHVybiBydCA/IHJ0LT5fcnN0YXRpYyA6IE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL25zc3dpdGNoLmggYi9saWJjL25zc3dpdGNoLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTAzODQ0YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvbnNzd2l0Y2guaApAQCAtMCwwICsxLDIzNyBAQAorLyoJJE5ldEJTRDogbnNzd2l0Y2guaCx2IDEuMTggMjAwNS8xMS8yOSAwMzoxMjo1OCBjaHJpc3RvcyBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5NywgMTk5OCwgMTk5OSwgMjAwNCBUaGUgTmV0QlNEIEZvdW5kYXRpb24sIEluYy4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBUaGUgTmV0QlNEIEZvdW5kYXRpb24KKyAqIGJ5IEx1a2UgTWV3YnVybi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBfTlNTV0lUQ0hfSAorI2RlZmluZSBfTlNTV0lUQ0hfSAkxCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworI2RlZmluZQlOU1NfTU9EVUxFX0lOVEVSRkFDRV9WRVJTSU9OCTAKKworI2lmbmRlZiBfUEFUSF9OU19DT05GCisjZGVmaW5lIF9QQVRIX05TX0NPTkYJIi9ldGMvbnNzd2l0Y2guY29uZiIKKyNlbmRpZgorCisjZGVmaW5lCU5TX0NPTlRJTlVFCTAKKyNkZWZpbmUJTlNfUkVUVVJOCTEKKworLyoKKyAqIExheW91dCBvZjoKKyAqCXVpbnQzMl90IG5zX3NyYy5mbGFncworICovCisJLyogbnNzd2l0Y2guY29uZiBzdGF0dXMgY29kZXMgYW5kIG5zZGlzcGF0Y2goMykgcmV0dXJuIHZhbHVlcyAqLworI2RlZmluZQlOU19TVUNDRVNTCSgxPDwwKQkJLyogZW50cnkgd2FzIGZvdW5kICovCisjZGVmaW5lCU5TX1VOQVZBSUwJKDE8PDEpCQkvKiBzb3VyY2Ugbm90IHJlc3BvbmRpbmcsIG9yIGNvcnJ1cHQgKi8KKyNkZWZpbmUJTlNfTk9URk9VTkQJKDE8PDIpCQkvKiBzb3VyY2UgcmVzcG9uZGVkICdubyBzdWNoIGVudHJ5JyAqLworI2RlZmluZQlOU19UUllBR0FJTgkoMTw8MykJCS8qIHNvdXJjZSBidXN5LCBtYXkgcmVzcG9uZCB0byByZXRyeXMgKi8KKyNkZWZpbmUJTlNfU1RBVFVTTUFTSwkweDAwMDAwMGZmCS8qIGJpdG1hc2sgdG8gZ2V0IHRoZSBzdGF0dXMgZmxhZ3MgKi8KKworCS8qIGludGVybmFsIG5zZGlzcGF0Y2goMykgZmxhZ3M7IG5vdCBzZXR0YWJsZSBpbiBuc3N3aXRjaC5jb25mKDUpICAqLworI2RlZmluZQlOU19GT1JDRUFMTAkoMTw8OCkJCS8qIGZvcmNlIGFsbCBtZXRob2RzIHRvIGJlIGludm9rZWQ7ICovCisKKy8qCisgKiBDdXJyZW50bHkgaW1wbGVtZW50ZWQgc291cmNlcy4KKyAqLworI2RlZmluZSBOU1NSQ19GSUxFUwkiZmlsZXMiCQkvKiBsb2NhbCBmaWxlcyAqLworI2RlZmluZQlOU1NSQ19ETlMJImRucyIJCS8qIEROUzsgSU4gZm9yIGhvc3RzLCBIUyBmb3Igb3RoZXJzICovCisjZGVmaW5lCU5TU1JDX05JUwkibmlzIgkJLyogWVAvTklTICovCisjZGVmaW5lCU5TU1JDX0NPTVBBVAkiY29tcGF0IgkvKiBwYXNzd2QsZ3JvdXAgaW4gWVAgY29tcGF0IG1vZGUgKi8KKworLyoKKyAqIEN1cnJlbnRseSBpbXBsZW1lbnRlZCBkYXRhYmFzZXMuCisgKi8KKyNkZWZpbmUgTlNEQl9IT1NUUwkJImhvc3RzIgorI2RlZmluZSBOU0RCX0dST1VQCQkiZ3JvdXAiCisjZGVmaW5lIE5TREJfR1JPVVBfQ09NUEFUCSJncm91cF9jb21wYXQiCisjZGVmaW5lIE5TREJfTkVUR1JPVVAJCSJuZXRncm91cCIKKyNkZWZpbmUgTlNEQl9ORVRXT1JLUwkJIm5ldHdvcmtzIgorI2RlZmluZSBOU0RCX1BBU1NXRAkJInBhc3N3ZCIKKyNkZWZpbmUgTlNEQl9QQVNTV0RfQ09NUEFUCSJwYXNzd2RfY29tcGF0IgorI2RlZmluZSBOU0RCX1NIRUxMUwkJInNoZWxscyIKKworLyoKKyAqIFN1Z2dlc3RlZCBkYXRhYmFzZXMgdG8gaW1wbGVtZW50LgorICovCisjZGVmaW5lIE5TREJfQUxJQVNFUwkJImFsaWFzZXMiCisjZGVmaW5lIE5TREJfQVVUSAkJImF1dGgiCisjZGVmaW5lIE5TREJfQVVUT01PVU5UCQkiYXV0b21vdW50IgorI2RlZmluZSBOU0RCX0JPT1RQQVJBTVMJCSJib290cGFyYW1zIgorI2RlZmluZSBOU0RCX0VUSEVSUwkJImV0aGVycyIKKyNkZWZpbmUgTlNEQl9FWFBPUlRTCQkiZXhwb3J0cyIKKyNkZWZpbmUgTlNEQl9ORVRNQVNLUwkJIm5ldG1hc2tzIgorI2RlZmluZSBOU0RCX1BIT05FUwkJInBob25lcyIKKyNkZWZpbmUgTlNEQl9QUklOVENBUAkJInByaW50Y2FwIgorI2RlZmluZSBOU0RCX1BST1RPQ09MUwkJInByb3RvY29scyIKKyNkZWZpbmUgTlNEQl9SRU1PVEUJCSJyZW1vdGUiCisjZGVmaW5lIE5TREJfUlBDCQkicnBjIgorI2RlZmluZSBOU0RCX1NFTkRNQUlMVkFSUwkic2VuZG1haWx2YXJzIgorI2RlZmluZSBOU0RCX1NFUlZJQ0VTCQkic2VydmljZXMiCisjZGVmaW5lIE5TREJfVEVSTUNBUAkJInRlcm1jYXAiCisjZGVmaW5lIE5TREJfVFRZUwkJInR0eXMiCisKKy8qCisgKiBuc19kdGFiIGBjYWxsYmFjaycgZnVuY3Rpb24gc2lnbmF0dXJlLgorICovCit0eXBlZGVmCWludCAoKm5zc19tZXRob2QpKHZvaWQgKiwgdm9pZCAqLCB2YV9saXN0KTsKKworLyoKKyAqIG5zX2R0YWIgLSBgbnNzd2l0Y2ggZGlzcGF0Y2ggdGFibGUnCisgKiBDb250YWlucyBhbiBlbnRyeSBmb3IgZWFjaCBzb3VyY2UgYW5kIHRoZSBhcHByb3ByaWF0ZSBmdW5jdGlvbiB0byBjYWxsLgorICovCit0eXBlZGVmIHN0cnVjdCB7CisJY29uc3QgY2hhcgkgKnNyYzsKKwluc3NfbWV0aG9kCSBjYWxsYmFjazsKKwl2b2lkCQkgKmNiX2RhdGE7Cit9IG5zX2R0YWI7CisKKy8qCisgKiBNYWNyb3MgdG8gaGVscCBidWlsZCBhbiBuc19kdGFiW10KKyAqLworI2RlZmluZSBOU19GSUxFU19DQihGLEMpCXsgTlNTUkNfRklMRVMsCUYsCV9fVU5DT05TVChDKSB9LAorI2RlZmluZSBOU19DT01QQVRfQ0IoRixDKQl7IE5TU1JDX0NPTVBBVCwJRiwJX19VTkNPTlNUKEMpIH0sCisKKyNpZmRlZiBIRVNJT0QKKyMgICBkZWZpbmUgTlNfRE5TX0NCKEYsQykJeyBOU1NSQ19ETlMsCUYsCV9fVU5DT05TVChDKSB9LAorI2Vsc2UKKyMgICBkZWZpbmUgTlNfRE5TX0NCKEYsQykKKyNlbmRpZgorCisjaWZkZWYgWVAKKyMgICBkZWZpbmUgTlNfTklTX0NCKEYsQykJeyBOU1NSQ19OSVMsCUYsCV9fVU5DT05TVChDKSB9LAorI2Vsc2UKKyMgICBkZWZpbmUgTlNfTklTX0NCKEYsQykKKyNlbmRpZgorCisvKgorICogbnNfc3JjIC0gYG5zc3dpdGNoIHNvdXJjZScKKyAqIFVzZWQgYnkgdGhlIG5zcGFyc2VyIHJvdXRpbmVzIHRvIHN0b3JlIGEgbWFwcGluZyBiZXR3ZWVuIGEgc291cmNlCisgKiBhbmQgaXRzIGRpc3BhdGNoIGNvbnRyb2wgZmxhZ3MgZm9yIGEgZ2l2ZW4gZGF0YWJhc2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOworCXVpbnQzMl90CSBmbGFnczsKK30gbnNfc3JjOworCisKKyNpZiAwCisvKgorICogRGVmYXVsdCBzb3VyY2VsaXN0cyAoaWYgbnNzd2l0Y2guY29uZiBpcyBtaXNzaW5nLCBjb3JydXB0LAorICogb3IgdGhlIHJlcXVlc3RlZCBkYXRhYmFzZSBkb2Vzbid0IGhhdmUgYW4gZW50cnkpCisgKi8KK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRzcmNbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRjb21wYXRbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRjb21wYXRfZm9yY2VhbGxbXTsKK2V4dGVybiBjb25zdCBuc19zcmMgX19uc2RlZmF1bHRmaWxlc1tdOworZXh0ZXJuIGNvbnN0IG5zX3NyYyBfX25zZGVmYXVsdGZpbGVzX2ZvcmNlYWxsW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0bmlzW107CitleHRlcm4gY29uc3QgbnNfc3JjIF9fbnNkZWZhdWx0bmlzX2ZvcmNlYWxsW107CisjZW5kaWYKKworLyoKKyAqIG5zX210YWIgLSBgbnNzd2l0Y2ggbWV0aG9kIHRhYmxlJworICogQW4gbnNzd2l0Y2ggbW9kdWxlIHByb3ZpZGVzIGEgbWFwcGluZyBmcm9tIChkYXRhYmFzZSBuYW1lLCBtZXRob2QgbmFtZSkKKyAqIHR1cGxlcyB0byB0aGUgbnNzX21ldGhvZCBhbmQgYXNzb2NpYXRlZCBjYWxsYmFjayBkYXRhLiAgRWZmZWN0aXZlbHksCisgKiBuc19kdGFiLCBidXQgdXNlZCBmb3IgZHluYW1pY2FsbHkgbG9hZGVkIG1vZHVsZXMuCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpkYXRhYmFzZTsKKwljb25zdCBjaGFyCSpuYW1lOworCW5zc19tZXRob2QJIG1ldGhvZDsKKwl2b2lkCQkqbWRhdGE7Cit9IG5zX210YWI7CisKKy8qCisgKiBuc3NfbW9kdWxlX3JlZ2lzdGVyX2ZuIC0gbW9kdWxlIHJlZ2lzdHJhdGlvbiBmdW5jdGlvbgorICoJY2FsbGVkIGF0IG1vZHVsZSBsb2FkCisgKiBuc3NfbW9kdWxlX3VucmVnaXN0ZXJfZm4gLSBtb2R1bGUgdW4tcmVnaXN0cmF0aW9uIGZ1bmN0aW9uCisgKgljYWxsZWQgYXQgbW9kdWxlIHVubG9hZAorICovCit0eXBlZGVmCXZvaWQgKCpuc3NfbW9kdWxlX3VucmVnaXN0ZXJfZm4pKG5zX210YWIgKiwgdV9pbnQpOwordHlwZWRlZgluc19tdGFiICooKm5zc19tb2R1bGVfcmVnaXN0ZXJfZm4pKGNvbnN0IGNoYXIgKiwgdV9pbnQgKiwKKwkJCQkJICAgbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuICopOworCisjaWZkZWYgX05TX1BSSVZBVEUKKworLyoKKyAqIFByaXZhdGUgZGF0YSBzdHJ1Y3R1cmVzIGZvciBiYWNrLWVuZCBuc3N3aXRjaCBpbXBsZW1lbnRhdGlvbi4KKyAqLworCisvKgorICogbnNfZGJ0IC0gYG5zc3dpdGNoIGRhdGFiYXNlIHRoYW5nJworICogRm9yIGVhY2ggZGF0YWJhc2UgaW4gL2V0Yy9uc3N3aXRjaC5jb25mIHRoZXJlIGlzIGEgbnNfZGJ0LCB3aXRoIGl0cworICogbmFtZSBhbmQgYSBsaXN0IG9mIG5zX3NyYydzIGNvbnRhaW5pbmcgdGhlIHNvdXJjZSBpbmZvcm1hdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCWNvbnN0IGNoYXIJKm5hbWU7CQkvKiBuYW1lIG9mIGRhdGFiYXNlICovCisJbnNfc3JjCQkqc3JjbGlzdDsJLyogbGlzdCBvZiBzb3VyY2VzICovCisJdV9pbnQJCSBzcmNsaXN0c2l6ZTsJLyogc2l6ZSBvZiBzcmNsaXN0ICovCit9IG5zX2RidDsKKworLyoKKyAqIG5zX21vZCAtIGBuc3N3aXRjaCBtb2R1bGUnCisgKi8KK3R5cGVkZWYgc3RydWN0IHsKKwljb25zdCBjaGFyCSpuYW1lOwkJLyogbW9kdWxlIG5hbWUgKi8KKwl2b2lkCQkqaGFuZGxlOwkvKiBoYW5kbGUgZnJvbSBkbG9wZW4oKSAqLworCW5zX210YWIJCSptdGFiOwkJLyogbWV0aG9kIHRhYmxlICovCisJdV9pbnQJCSBtdGFic2l6ZTsJLyogc2l6ZSBvZiBtdGFiICovCisJCQkJCS8qIGNhbGxlZCB0byB1bmxvYWQgbW9kdWxlICovCisJbnNzX21vZHVsZV91bnJlZ2lzdGVyX2ZuIHVucmVnaXN0ZXI7Cit9IG5zX21vZDsKKworI2VuZGlmIC8qIF9OU19QUklWQVRFICovCisKKworI2luY2x1ZGUgPHN5cy9jZGVmcy5oPgorCitfX0JFR0lOX0RFQ0xTCitpbnQJbnNkaXNwYXRjaCh2b2lkICosIGNvbnN0IG5zX2R0YWIgW10sIGNvbnN0IGNoYXIgKiwKKwkJCWNvbnN0IGNoYXIgKiwgY29uc3QgbnNfc3JjIFtdLCAuLi4pOworCisjaWZkZWYgX05TX1BSSVZBVEUKK2ludAkJIF9uc2RidGFkZHNyYyhuc19kYnQgKiwgY29uc3QgbnNfc3JjICopOwordm9pZAkJIF9uc2RidGR1bXAoY29uc3QgbnNfZGJ0ICopOworaW50CQkgX25zZGJ0cHV0KGNvbnN0IG5zX2RidCAqKTsKK3ZvaWQJCSBfbnN5eWVycm9yKGNvbnN0IGNoYXIgKik7CitpbnQJCSBfbnN5eWxleCh2b2lkKTsKKyNlbmRpZiAvKiBfTlNfUFJJVkFURSAqLworCitfX0VORF9ERUNMUworCisjZW5kaWYgLyogIV9OU1NXSVRDSF9IICovCmRpZmYgLS1naXQgYS9saWJjL3JhbmQ0OC5oIGIvbGliYy9yYW5kNDguaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmE0OWY2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9yYW5kNDguaApAQCAtMCwwICsxLDMyIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKgorICoJJE9wZW5CU0Q6IHJhbmQ0OC5oLHYgMS4zIDIwMDIvMDIvMTYgMjE6Mjc6MjQgbWlsbGVydCBFeHAgJAorICovCisKKyNpZm5kZWYgX1JBTkQ0OF9IXworI2RlZmluZSBfUkFORDQ4X0hfCisKKyNpbmNsdWRlIDxtYXRoLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3ZvaWQJCV9fZG9yYW5kNDgodW5zaWduZWQgc2hvcnRbM10pOworCisjZGVmaW5lCVJBTkQ0OF9TRUVEXzAJKDB4MzMwZSkKKyNkZWZpbmUJUkFORDQ4X1NFRURfMQkoMHhhYmNkKQorI2RlZmluZQlSQU5ENDhfU0VFRF8yCSgweDEyMzQpCisjZGVmaW5lCVJBTkQ0OF9NVUxUXzAJKDB4ZTY2ZCkKKyNkZWZpbmUJUkFORDQ4X01VTFRfMQkoMHhkZWVjKQorI2RlZmluZQlSQU5ENDhfTVVMVF8yCSgweDAwMDUpCisjZGVmaW5lCVJBTkQ0OF9BREQJKDB4MDAwYikKKworI2VuZGlmIC8qIF9SQU5ENDhfSF8gKi8KZGlmZiAtLWdpdCBhL2xpYmMvcmVzb2x2X2NhY2hlLmggYi9saWJjL3Jlc29sdl9jYWNoZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjMjU1ODMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Jlc29sdl9jYWNoZS5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpZm5kZWYgX1JFU09MVl9DQUNIRV9IXworI2RlZmluZSBfUkVTT0xWX0NBQ0hFX0hfCisKKyNpbmNsdWRlIDxuZXRkYi5oPgorCitjb25zdCBzdHJ1Y3QgaG9zdGVudCAgX3Jlc29sdl9ob3N0ZW50X25vbmU7CisjZGVmaW5lIF9SRVNPTFZfSE9TVEVOVF9OT05FICAoKHN0cnVjdCBob3N0ZW50KikmX3Jlc29sdl9ob3N0ZW50X25vbmUpCisKK3N0cnVjdCByZXNvbHZfY2FjaGU7ICAvKiBmb3J3YXJkICovCitleHRlcm4gc3RydWN0IHJlc29sdl9jYWNoZSogIF9fZ2V0X3Jlc19jYWNoZSh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgaG9zdGVudCoqICAgICAgX19nZXRfcmVzX2NhY2hlX2hvc3RlbnRfcCh2b2lkKTsKKworZXh0ZXJuIHN0cnVjdCByZXNvbHZfY2FjaGUqICBfcmVzb2x2X2NhY2hlX2dldCggdm9pZCApOworCitleHRlcm4gc3RydWN0IHJlc29sdl9jYWNoZSogIF9yZXNvbHZfY2FjaGVfY3JlYXRlKCB2b2lkICk7CisKK2V4dGVybiB2b2lkICAgICAgICAgICAgICAgICAgX3Jlc29sdl9jYWNoZV9kZXN0cm95KCBzdHJ1Y3QgcmVzb2x2X2NhY2hlKiAgY2FjaGUgKTsKKworZXh0ZXJuIHN0cnVjdCBob3N0ZW50KiAgICAgICBfcmVzb2x2X2NhY2hlX2xvb2t1cCggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYWYgKTsKKworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgICAgICBfcmVzb2x2X2NhY2hlX2FkZCggc3RydWN0IHJlc29sdl9jYWNoZSogIGNhY2hlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogICAgICAgICAgIG5hbWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgYWYsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaG9zdGVudCogICAgICAgaHAgKTsKKworZXh0ZXJuIHN0cnVjdCBob3N0ZW50KiAgICAgICBfcmVzb2x2X2hvc3RlbnRfY29weSggc3RydWN0IGhvc3RlbnQqICBocCApOworZXh0ZXJuIHZvaWQgICAgICAgICAgICAgICAgICBfcmVzb2x2X2hvc3RlbnRfZnJlZSggc3RydWN0IGhvc3RlbnQqICBocCApOworCisjZW5kaWYgLyogX1JFU09MVl9DQUNIRV9IXyAqLwpkaWZmIC0tZ2l0IGEvbGliYy9yZXNvbHZfcHJpdmF0ZS5oIGIvbGliYy9yZXNvbHZfcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmM2M2YzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Jlc29sdl9wcml2YXRlLmgKQEAgLTAsMCArMSw0OTkgQEAKKy8qCSROZXRCU0Q6IHJlc29sdi5oLHYgMS4zMSAyMDA1LzEyLzI2IDE5OjAxOjQ3IHBlcnJ5IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5ODcsIDE5ODkKKyAqICAgIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyoKKyAqCUAoIylyZXNvbHYuaAk4LjEgKEJlcmtlbGV5KSA2LzIvOTMKKyAqCUlkOiByZXNvbHYuaCx2IDEuNy4yLjExLjQuMiAyMDA0LzA2LzI1IDAwOjQxOjA1IG1hcmthIEV4cAorICovCisKKyNpZm5kZWYgX1JFU09MVl9QUklWQVRFX0hfCisjZGVmaW5lCV9SRVNPTFZfUFJJVkFURV9IXworCisjaW5jbHVkZSA8cmVzb2x2Lmg+CisjaW5jbHVkZSAicmVzb2x2X3N0YXRpYy5oIgorCisvKgorICogUmV2aXNpb24gaW5mb3JtYXRpb24uICBUaGlzIGlzIHRoZSByZWxlYXNlIGRhdGUgaW4gWVlZWU1NREQgZm9ybWF0LgorICogSXQgY2FuIGNoYW5nZSBldmVyeSBkYXkgc28gdGhlIHJpZ2h0IHRoaW5nIHRvIGRvIHdpdGggaXQgaXMgdXNlIGl0CisgKiBpbiBwcmVwcm9jZXNzb3IgY29tbWFuZHMgc3VjaCBhcyAiI2lmIChfX1JFUyA+IDE5OTMxMTA0KSIuICBEbyBub3QKKyAqIGNvbXBhcmUgZm9yIGVxdWFsaXR5OyByYXRoZXIsIHVzZSBpdCB0byBkZXRlcm1pbmUgd2hldGhlciB5b3VyIHJlc29sdmVyCisgKiBpcyBuZXcgZW5vdWdoIHRvIGNvbnRhaW4gYSBjZXJ0YWluIGZlYXR1cmUuCisgKi8KKworI2RlZmluZQlfX1JFUwkyMDAzMDEyNAorCisvKgorICogVGhpcyB1c2VkIHRvIGJlIGRlZmluZWQgaW4gcmVzX3F1ZXJ5LmMsIG5vdyBpdCdzIGluIGhlcnJvci5jLgorICogW1hYWCBubyBpdCdzIG5vdC4gIEl0J3MgaW4gaXJzL2lyc19kYXRhLmNdCisgKiBJdCB3YXMKKyAqIG5ldmVyIGV4dGVybidkIGJ5IGFueSAqLmggZmlsZSBiZWZvcmUgaXQgd2FzIHBsYWNlZCBoZXJlLiAgRm9yIHRocmVhZAorICogYXdhcmUgcHJvZ3JhbXMsIHRoZSBsYXN0IGhfZXJybm8gdmFsdWUgc2V0IGlzIHN0b3JlZCBpbiByZXMtPmhfZXJybm8uCisgKgorICogWFhYOglUaGVyZSBkb2Vzbid0IHNlZW0gdG8gYmUgYSBnb29kIHJlYXNvbiBmb3IgZXhwb3NpbmcgUkVTX1NFVF9IX0VSUk5PCisgKgkoYW5kIF9faF9lcnJub19zZXQpIHRvIHRoZSBwdWJsaWMgdmlhIDxyZXNvbHYuaD4uCisgKiBYWFg6CV9faF9lcnJub19zZXQgaXMgcmVhbGx5IHBhcnQgb2YgSVJTLCBub3QgcGFydCBvZiB0aGUgcmVzb2x2ZXIuCisgKglJZiBzb21lYm9keSB3YW50cyB0byBidWlsZCBhbmQgdXNlIGEgcmVzb2x2ZXIgdGhhdCBkb2Vzbid0IHVzZSBJUlMsCisgKgl3aGF0IGRvIHRoZXkgZG8/ICBQZXJoYXBzIHNvbWV0aGluZyBsaWtlCisgKgkJI2lmZGVmIFdBTlRfSVJTCisgKgkJIyBkZWZpbmUgUkVTX1NFVF9IX0VSUk5PKHIseCkgX19oX2Vycm5vX3NldChyLHgpCisgKgkJI2Vsc2UKKyAqCQkjIGRlZmluZSBSRVNfU0VUX0hfRVJSTk8ocix4KSAoaF9lcnJubyA9IChyKS0+cmVzX2hfZXJybm8gPSAoeCkpCisgKgkJI2VuZGlmCisgKi8KKworI2RlZmluZSBSRVNfU0VUX0hfRVJSTk8ocix4KSAoaF9lcnJubyA9IChyKS0+cmVzX2hfZXJybm8gPSAoeCkpCitzdHJ1Y3QgX19yZXNfc3RhdGU7IC8qIGZvcndhcmQgKi8KKworLyoKKyAqIFJlc29sdmVyIGNvbmZpZ3VyYXRpb24gZmlsZS4KKyAqIE5vcm1hbGx5IG5vdCBwcmVzZW50LCBidXQgbWF5IGNvbnRhaW4gdGhlIGFkZHJlc3Mgb2YgdGhlCisgKiBpbml0aWFsIG5hbWUgc2VydmVyKHMpIHRvIHF1ZXJ5IGFuZCB0aGUgZG9tYWluIHNlYXJjaCBsaXN0LgorICovCisKKyNpZm5kZWYgX1BBVEhfUkVTQ09ORgorI2lmZGVmIEFORFJPSURfQ0hBTkdFUworI2RlZmluZSBfUEFUSF9SRVNDT05GICAgICAgICAiL2V0Yy9wcHAvcmVzb2x2LmNvbmYiCisjZWxzZQorI2RlZmluZSBfUEFUSF9SRVNDT05GICAgICAgICAiL2V0Yy9yZXNvbHYuY29uZiIKKyNlbmRpZgorI2VuZGlmCisKK3R5cGVkZWYgZW51bSB7IHJlc19nb2FoZWFkLCByZXNfbmV4dG5zLCByZXNfbW9kaWZpZWQsIHJlc19kb25lLCByZXNfZXJyb3IgfQorCXJlc19zZW5kaG9va2FjdDsKKwordHlwZWRlZiByZXNfc2VuZGhvb2thY3QgKCpyZXNfc2VuZF9xaG9vaykoc3RydWN0IHNvY2thZGRyICogY29uc3QgKiwKKwkJCQkJICAgICAgY29uc3QgdV9jaGFyICoqLCBpbnQgKiwKKwkJCQkJICAgICAgdV9jaGFyICosIGludCwgaW50ICopOworCit0eXBlZGVmIHJlc19zZW5kaG9va2FjdCAoKnJlc19zZW5kX3Job29rKShjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwKKwkJCQkJICAgICAgY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosCisJCQkJCSAgICAgIGludCwgaW50ICopOworCitzdHJ1Y3QgcmVzX3N5bSB7CisJaW50CQludW1iZXI7CSAgIC8qIElkZW50aWZ5aW5nIG51bWJlciwgbGlrZSBUX01YICovCisJY29uc3QgY2hhciAqCW5hbWU7CSAgIC8qIEl0cyBzeW1ib2xpYyBuYW1lLCBsaWtlICJNWCIgKi8KKwljb25zdCBjaGFyICoJaHVtYW5uYW1lOyAvKiBJdHMgZnVuIG5hbWUsIGxpa2UgIm1haWwgZXhjaGFuZ2VyIiAqLworfTsKKworLyoKKyAqIEdsb2JhbCBkZWZpbmVzIGFuZCB2YXJpYWJsZXMgZm9yIHJlc29sdmVyIHN0dWIuCisgKi8KKyNkZWZpbmUJTUFYTlMJCQkzCS8qIG1heCAjIG5hbWUgc2VydmVycyB3ZSdsbCB0cmFjayAqLworI2RlZmluZQlNQVhERkxTUkNICQkzCS8qICMgZGVmYXVsdCBkb21haW4gbGV2ZWxzIHRvIHRyeSAqLworI2RlZmluZQlNQVhETlNSQ0gJCTYJLyogbWF4ICMgZG9tYWlucyBpbiBzZWFyY2ggcGF0aCAqLworI2RlZmluZQlMT0NBTERPTUFJTlBBUlRTCTIJLyogbWluIGxldmVscyBpbiBuYW1lIHRoYXQgaXMgImxvY2FsIiAqLworCisjZGVmaW5lCVJFU19USU1FT1VUCQk1CS8qIG1pbi4gc2Vjb25kcyBiZXR3ZWVuIHJldHJpZXMgKi8KKyNkZWZpbmUJTUFYUkVTT0xWU09SVAkJMTAJLyogbnVtYmVyIG9mIG5ldCB0byBzb3J0IG9uICovCisjZGVmaW5lCVJFU19NQVhORE9UUwkJMTUJLyogc2hvdWxkIHJlZmxlY3QgYml0IGZpZWxkIHNpemUgKi8KKyNkZWZpbmUJUkVTX01BWFJFVFJBTlMJCTMwCS8qIG9ubHkgZm9yIHJlc29sdi5jb25mL1JFU19PUFRJT05TICovCisjZGVmaW5lCVJFU19NQVhSRVRSWQkJNQkvKiBvbmx5IGZvciByZXNvbHYuY29uZi9SRVNfT1BUSU9OUyAqLworI2RlZmluZQlSRVNfREZMUkVUUlkJCTIJLyogRGVmYXVsdCAjL3RyaWVzLiAqLworI2RlZmluZQlSRVNfTUFYVElNRQkJNjU1MzUJLyogSW5maW5pdHksIGluIG1pbGxpc2Vjb25kcy4gKi8KKworc3RydWN0IF9fcmVzX3N0YXRlX2V4dDsKKworc3RydWN0IF9fcmVzX3N0YXRlIHsKKwlpbnQJcmV0cmFuczsJIAkvKiByZXRyYW5zbWlzc2lvbiB0aW1lIGludGVydmFsICovCisJaW50CXJldHJ5OwkJCS8qIG51bWJlciBvZiB0aW1lcyB0byByZXRyYW5zbWl0ICovCisjaWZkZWYgc3VuCisJdV9pbnQJb3B0aW9uczsJCS8qIG9wdGlvbiBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbHNlCisJdV9sb25nCW9wdGlvbnM7CQkvKiBvcHRpb24gZmxhZ3MgLSBzZWUgYmVsb3cuICovCisjZW5kaWYKKwlpbnQJbnNjb3VudDsJCS8qIG51bWJlciBvZiBuYW1lIHNlcnZlcnMgKi8KKwlzdHJ1Y3Qgc29ja2FkZHJfaW4KKwkJbnNhZGRyX2xpc3RbTUFYTlNdOwkvKiBhZGRyZXNzIG9mIG5hbWUgc2VydmVyICovCisjZGVmaW5lCW5zYWRkcgluc2FkZHJfbGlzdFswXQkJLyogZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KKwl1X3Nob3J0CWlkOwkJCS8qIGN1cnJlbnQgbWVzc2FnZSBpZCAqLworCWNoYXIJKmRuc3JjaFtNQVhETlNSQ0grMV07CS8qIGNvbXBvbmVudHMgb2YgZG9tYWluIHRvIHNlYXJjaCAqLworCWNoYXIJZGVmZG5hbWVbMjU2XTsJCS8qIGRlZmF1bHQgZG9tYWluIChkZXByZWNhdGVkKSAqLworI2lmZGVmIHN1bgorCXVfaW50CXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbHNlCisJdV9sb25nCXBmY29kZTsJCQkvKiBSRVNfUFJGXyBmbGFncyAtIHNlZSBiZWxvdy4gKi8KKyNlbmRpZgorCXVuc2lnbmVkIG5kb3RzOjQ7CQkvKiB0aHJlc2hvbGQgZm9yIGluaXRpYWwgYWJzLiBxdWVyeSAqLworCXVuc2lnbmVkIG5zb3J0OjQ7CQkvKiBudW1iZXIgb2YgZWxlbWVudHMgaW4gc29ydF9saXN0W10gKi8KKwljaGFyCXVudXNlZFszXTsKKwlzdHJ1Y3QgeworCQlzdHJ1Y3QgaW5fYWRkcglhZGRyOworCQl1aW50MzJfdAltYXNrOworCX0gc29ydF9saXN0W01BWFJFU09MVlNPUlRdOworI2lmZGVmIF9fT0xEX1JFU19TVEFURQorCWNoYXIgbG9va3Vwc1s0XTsKKyNlbHNlCisJcmVzX3NlbmRfcWhvb2sgcWhvb2s7CQkvKiBxdWVyeSBob29rICovCisJcmVzX3NlbmRfcmhvb2sgcmhvb2s7CQkvKiByZXNwb25zZSBob29rICovCisJaW50CXJlc19oX2Vycm5vOwkJLyogbGFzdCBvbmUgc2V0IGZvciB0aGlzIGNvbnRleHQgKi8KKwlpbnQJX3Zjc29jazsJCS8qIFBSSVZBVEU6IGZvciByZXNfc2VuZCBWQyBpL28gKi8KKwl1X2ludAlfZmxhZ3M7CQkJLyogUFJJVkFURTogc2VlIGJlbG93ICovCisJdV9pbnQJX3BhZDsJCQkvKiBtYWtlIF91IDY0IGJpdCBhbGlnbmVkICovCisJdW5pb24geworCQkvKiBPbiBhbiAzMi1iaXQgYXJjaCB0aGlzIG1lYW5zIDUxMmIgdG90YWwuICovCisJCWNoYXIJcGFkWzcyIC0gNCpzaXplb2YgKGludCkgLSAyKnNpemVvZiAodm9pZCAqKV07CisJCXN0cnVjdCB7CisJCQl1aW50MTZfdAkJbnNjb3VudDsKKwkJCXVpbnQxNl90CQluc3RpbWVzW01BWE5TXTsJLyogbXMuICovCisJCQlpbnQJCQluc3NvY2tzW01BWE5TXTsKKwkJCXN0cnVjdCBfX3Jlc19zdGF0ZV9leHQgKmV4dDsJLyogZXh0ZW50aW9uIGZvciBJUHY2ICovCisJCX0gX2V4dDsKKwl9IF91OworI2VuZGlmCisgICAgICAgIHN0cnVjdCByZXNfc3RhdGljICAgcnN0YXRpY1sxXTsKK307CisKK3R5cGVkZWYgc3RydWN0IF9fcmVzX3N0YXRlICpyZXNfc3RhdGU7CisKK3VuaW9uIHJlc19zb2NrYWRkcl91bmlvbiB7CisJc3RydWN0IHNvY2thZGRyX2luCXNpbjsKKyNpZmRlZiBJTjZBRERSX0FOWV9JTklUCisJc3RydWN0IHNvY2thZGRyX2luNglzaW42OworI2VuZGlmCisjaWZkZWYgSVNDX0FMSUdONjQKKwlpbnQ2NF90CQkJX19hbGlnbjY0OwkvKiA2NGJpdCBhbGlnbm1lbnQgKi8KKyNlbHNlCisJaW50MzJfdAkJCV9fYWxpZ24zMjsJLyogMzJiaXQgYWxpZ25tZW50ICovCisjZW5kaWYKKwljaGFyCQkJX19zcGFjZVsxMjhdOyAgIC8qIG1heCBzaXplICovCit9OworCisvKgorICogUmVzb2x2ZXIgZmxhZ3MgKHVzZWQgdG8gYmUgZGlzY3JldGUgcGVyLW1vZHVsZSBzdGF0aWNzIGludHMpLgorICovCisjZGVmaW5lCVJFU19GX1ZDCTB4MDAwMDAwMDEJLyogc29ja2V0IGlzIFRDUCAqLworI2RlZmluZQlSRVNfRl9DT05OCTB4MDAwMDAwMDIJLyogc29ja2V0IGlzIGNvbm5lY3RlZCAqLworI2RlZmluZQlSRVNfRl9FRE5TMEVSUgkweDAwMDAwMDA0CS8qIEVETlMwIGNhdXNlZCBlcnJvcnMgKi8KKyNkZWZpbmUJUkVTX0ZfX1VOVVNFRAkweDAwMDAwMDA4CS8qICh1bnVzZWQpICovCisjZGVmaW5lCVJFU19GX0xBU1RNQVNLCTB4MDAwMDAwRjAJLyogb3JkaW5hbCBzZXJ2ZXIgb2YgbGFzdCByZXNfbnNlbmQgKi8KKyNkZWZpbmUJUkVTX0ZfTEFTVFNISUZUCTQJCS8qIGJpdCBwb3NpdGlvbiBvZiBMQVNUTUFTSyAiZmxhZyIgKi8KKyNkZWZpbmUJUkVTX0dFVExBU1QocmVzKSAoKChyZXMpLl9mbGFncyAmIFJFU19GX0xBU1RNQVNLKSA+PiBSRVNfRl9MQVNUU0hJRlQpCisKKy8qIHJlc19maW5kem9uZWN1dDIoKSBvcHRpb25zICovCisjZGVmaW5lCVJFU19FWEhBVVNUSVZFCTB4MDAwMDAwMDEJLyogYWx3YXlzIGRvIGFsbCBxdWVyaWVzICovCisjZGVmaW5lCVJFU19JUFY0T05MWQkweDAwMDAwMDAyCS8qIElQdjQgb25seSAqLworI2RlZmluZQlSRVNfSVBWNk9OTFkJMHgwMDAwMDAwNAkvKiBJUHY2IG9ubHkgKi8KKworLyoKKyAqIFJlc29sdmVyIG9wdGlvbnMgKGtlZXAgdGhlc2UgaW4gc3luY2ggd2l0aCByZXNfZGVidWcuYywgcGxlYXNlKQorICovCisjZGVmaW5lIFJFU19JTklUCTB4MDAwMDAwMDEJLyogYWRkcmVzcyBpbml0aWFsaXplZCAqLworI2RlZmluZSBSRVNfREVCVUcJMHgwMDAwMDAwMgkvKiBwcmludCBkZWJ1ZyBtZXNzYWdlcyAqLworI2RlZmluZSBSRVNfQUFPTkxZCTB4MDAwMDAwMDQJLyogYXV0aG9yaXRhdGl2ZSBhbnN3ZXJzIG9ubHkgKCFJTVBMKSovCisjZGVmaW5lIFJFU19VU0VWQwkweDAwMDAwMDA4CS8qIHVzZSB2aXJ0dWFsIGNpcmN1aXQgKi8KKyNkZWZpbmUgUkVTX1BSSU1BUlkJMHgwMDAwMDAxMAkvKiBxdWVyeSBwcmltYXJ5IHNlcnZlciBvbmx5ICghSU1QTCkgKi8KKyNkZWZpbmUgUkVTX0lHTlRDCTB4MDAwMDAwMjAJLyogaWdub3JlIHRydWNhdGlvbiBlcnJvcnMgKi8KKyNkZWZpbmUgUkVTX1JFQ1VSU0UJMHgwMDAwMDA0MAkvKiByZWN1cnNpb24gZGVzaXJlZCAqLworI2RlZmluZSBSRVNfREVGTkFNRVMJMHgwMDAwMDA4MAkvKiB1c2UgZGVmYXVsdCBkb21haW4gbmFtZSAqLworI2RlZmluZSBSRVNfU1RBWU9QRU4JMHgwMDAwMDEwMAkvKiBLZWVwIFRDUCBzb2NrZXQgb3BlbiAqLworI2RlZmluZSBSRVNfRE5TUkNICTB4MDAwMDAyMDAJLyogc2VhcmNoIHVwIGxvY2FsIGRvbWFpbiB0cmVlICovCisjZGVmaW5lCVJFU19JTlNFQ1VSRTEJMHgwMDAwMDQwMAkvKiB0eXBlIDEgc2VjdXJpdHkgZGlzYWJsZWQgKi8KKyNkZWZpbmUJUkVTX0lOU0VDVVJFMgkweDAwMDAwODAwCS8qIHR5cGUgMiBzZWN1cml0eSBkaXNhYmxlZCAqLworI2RlZmluZQlSRVNfTk9BTElBU0VTCTB4MDAwMDEwMDAJLyogc2h1dHMgb2ZmIEhPU1RBTElBU0VTIGZlYXR1cmUgKi8KKyNkZWZpbmUJUkVTX1VTRV9JTkVUNgkweDAwMDAyMDAwCS8qIHVzZS9tYXAgSVB2NiBpbiBnZXRob3N0YnluYW1lKCkgKi8KKyNkZWZpbmUgUkVTX1JPVEFURQkweDAwMDA0MDAwCS8qIHJvdGF0ZSBucyBsaXN0IGFmdGVyIGVhY2ggcXVlcnkgKi8KKyNkZWZpbmUJUkVTX05PQ0hFQ0tOQU1FCTB4MDAwMDgwMDAJLyogZG8gbm90IGNoZWNrIG5hbWVzIGZvciBzYW5pdHkuICovCisjZGVmaW5lCVJFU19LRUVQVFNJRwkweDAwMDEwMDAwCS8qIGRvIG5vdCBzdHJpcCBUU0lHIHJlY29yZHMgKi8KKyNkZWZpbmUJUkVTX0JMQVNUCTB4MDAwMjAwMDAJLyogYmxhc3QgYWxsIHJlY3Vyc2l2ZSBzZXJ2ZXJzICovCisjZGVmaW5lIFJFU19OT1RMRFFVRVJZCTB4MDAxMDAwMDAJLyogZG9uJ3QgdW5xdWFsaWZpZWQgbmFtZSBhcyBhIHRsZCAqLworI2RlZmluZSBSRVNfVVNFX0ROU1NFQwkweDAwMjAwMDAwCS8qIHVzZSBETlNTRUMgdXNpbmcgT0sgYml0IGluIE9QVCAqLworLyogI2RlZmluZSBSRVNfREVCVUcyCTB4MDA0MDAwMDAgKi8JLyogbnNsb29rdXAgaW50ZXJuYWwgKi8KKy8qIEtBTUUgZXh0ZW5zaW9uczogdXNlIGhpZ2hlciBiaXQgdG8gYXZvaWQgY29uZmxpY3Qgd2l0aCBJU0MgdXNlICovCisjZGVmaW5lIFJFU19VU0VfRE5BTUUJMHgxMDAwMDAwMAkvKiB1c2UgRE5BTUUgKi8KKyNkZWZpbmUgUkVTX1VTRV9FRE5TMAkweDQwMDAwMDAwCS8qIHVzZSBFRE5TMCBpZiBjb25maWd1cmVkICovCisjZGVmaW5lIFJFU19OT19OSUJCTEUyCTB4ODAwMDAwMDAJLyogZGlzYWJsZSBhbHRlcm5hdGUgbmliYmxlIGxvb2t1cCAqLworCisjZGVmaW5lIFJFU19ERUZBVUxUCShSRVNfUkVDVVJTRSB8IFJFU19ERUZOQU1FUyB8IFwKKwkJCSBSRVNfRE5TUkNIIHwgUkVTX05PX05JQkJMRTIpCisKKy8qCisgKiBSZXNvbHZlciAicGZjb2RlIiB2YWx1ZXMuICBVc2VkIGJ5IGRpZy4KKyAqLworI2RlZmluZSBSRVNfUFJGX1NUQVRTCTB4MDAwMDAwMDEKKyNkZWZpbmUgUkVTX1BSRl9VUERBVEUJMHgwMDAwMDAwMgorI2RlZmluZSBSRVNfUFJGX0NMQVNTICAgMHgwMDAwMDAwNAorI2RlZmluZSBSRVNfUFJGX0NNRAkweDAwMDAwMDA4CisjZGVmaW5lIFJFU19QUkZfUVVFUwkweDAwMDAwMDEwCisjZGVmaW5lIFJFU19QUkZfQU5TCTB4MDAwMDAwMjAKKyNkZWZpbmUgUkVTX1BSRl9BVVRICTB4MDAwMDAwNDAKKyNkZWZpbmUgUkVTX1BSRl9BREQJMHgwMDAwMDA4MAorI2RlZmluZSBSRVNfUFJGX0hFQUQxCTB4MDAwMDAxMDAKKyNkZWZpbmUgUkVTX1BSRl9IRUFEMgkweDAwMDAwMjAwCisjZGVmaW5lIFJFU19QUkZfVFRMSUQJMHgwMDAwMDQwMAorI2RlZmluZSBSRVNfUFJGX0hFQURYCTB4MDAwMDA4MDAKKyNkZWZpbmUgUkVTX1BSRl9RVUVSWQkweDAwMDAxMDAwCisjZGVmaW5lIFJFU19QUkZfUkVQTFkJMHgwMDAwMjAwMAorI2RlZmluZSBSRVNfUFJGX0lOSVQJMHgwMDAwNDAwMAorI2RlZmluZSBSRVNfUFJGX1RSVU5DCTB4MDAwMDgwMDAKKy8qCQkJMHgwMDAxMDAwMAkqLworCisvKiBUaGluZ3MgaW52b2x2aW5nIGFuIGludGVybmFsIChzdGF0aWMpIHJlc29sdmVyIGNvbnRleHQuICovCitfX0JFR0lOX0RFQ0xTCitleHRlcm4gc3RydWN0IF9fcmVzX3N0YXRlICpfX3Jlc19nZXRfc3RhdGUodm9pZCk7CitleHRlcm4gdm9pZCBfX3Jlc19wdXRfc3RhdGUoc3RydWN0IF9fcmVzX3N0YXRlICopOworCisjaWZuZGVmIEFORFJPSURfQ0hBTkdFUworLyoKKyAqIFNvdXJjZSBhbmQgQmluYXJ5IGNvbXBhdGliaWxpdHk7IF9yZXMgd2lsbCBub3Qgd29yayBwcm9wZXJseQorICogd2l0aCBtdWx0aS10aHJlYWRlZCBwcm9ncmFtcy4KKyAqLworZXh0ZXJuIHN0cnVjdCBfX3Jlc19zdGF0ZSAqX19yZXNfc3RhdGUodm9pZCk7CisjZGVmaW5lIF9yZXMgKCpfX3Jlc19zdGF0ZSgpKQorI2VuZGlmCisKK19fRU5EX0RFQ0xTCisKKyNpZm5kZWYgX19CSU5EX05PU1RBVElDCisjZGVmaW5lIGZwX25xdWVyeQkJX19mcF9ucXVlcnkKKyNkZWZpbmUgZnBfcXVlcnkJCV9fZnBfcXVlcnkKKyNkZWZpbmUgaG9zdGFsaWFzCQlfX2hvc3RhbGlhcworI2RlZmluZSBwX3F1ZXJ5CQkJX19wX3F1ZXJ5CisjZGVmaW5lIHJlc19jbG9zZQkJX19yZXNfY2xvc2UKKyNkZWZpbmUgcmVzX29wdAkJCV9fcmVzX29wdAorI2RlZmluZSByZXNfaXNvdXJzZXJ2ZXIJCV9fcmVzX2lzb3Vyc2VydmVyCisjZGVmaW5lCXJlc19xdWVyeWRvbWFpbgkJX19yZXNfcXVlcnlkb21haW4KKyNkZWZpbmUgcmVzX3NlbmQJCV9fcmVzX3NlbmQKKyNkZWZpbmUgcmVzX3NlbmRzaWduZWQJCV9fcmVzX3NlbmRzaWduZWQKKworI2lmZGVmIEJJTkRfUkVTX1BPU0lYMworI2RlZmluZQlkbl9leHBhbmQJX19kbl9leHBhbmQKKyNkZWZpbmUJcmVzX2luaXQJX19yZXNfaW5pdAorI2RlZmluZQlyZXNfcXVlcnkJX19yZXNfcXVlcnkKKyNkZWZpbmUJcmVzX3NlYXJjaAlfX3Jlc19zZWFyY2gKKyNkZWZpbmUJcmVzX21rcXVlcnkJX19yZXNfbWtxdWVyeQorI2VuZGlmCisKK19fQkVHSU5fREVDTFMKK3ZvaWQJCWZwX25xdWVyeShjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOwordm9pZAkJZnBfcXVlcnkoY29uc3QgdV9jaGFyICosIEZJTEUgKik7Citjb25zdCBjaGFyICoJaG9zdGFsaWFzKGNvbnN0IGNoYXIgKik7Cit2b2lkCQlwX3F1ZXJ5KGNvbnN0IHVfY2hhciAqKTsKK3ZvaWQJCXJlc19jbG9zZSh2b2lkKTsKK2ludAkJcmVzX2luaXQodm9pZCk7CitpbnQJCXJlc19vcHQoaW50LCB1X2NoYXIgKiwgaW50LCBpbnQpOworaW50CQlyZXNfaXNvdXJzZXJ2ZXIoY29uc3Qgc3RydWN0IHNvY2thZGRyX2luICopOworaW50CQlyZXNfbWtxdWVyeShpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqLCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3F1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfcXVlcnlkb21haW4oY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3NlYXJjaChjb25zdCBjaGFyICosIGludCwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX3NlbmQoY29uc3QgdV9jaGFyICosIGludCwgdV9jaGFyICosIGludCk7CitpbnQJCXJlc19zZW5kc2lnbmVkKGNvbnN0IHVfY2hhciAqLCBpbnQsIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOworX19FTkRfREVDTFMKKyNlbmRpZgorCisjaWYgIWRlZmluZWQoU0hBUkVEX0xJQkJJTkQpIHx8IGRlZmluZWQoTElCKQorLyoKKyAqIElmIGxpYmJpbmQgaXMgYSBzaGFyZWQgb2JqZWN0ICh3ZWxsLCBETEwgYW55d2F5KQorICogdGhlc2UgZXh0ZXJucyBicmVhayB0aGUgbGlua2VyIHdoZW4gcmVzb2x2LmggaXMKKyAqIGluY2x1ZGVkIGJ5IGEgbGliIGNsaWVudCAobGlrZSBuYW1lZCkKKyAqIE1ha2UgdGhlbSBnbyBhd2F5IGlmIGEgY2xpZW50IGlzIGluY2x1ZGluZyB0aGlzCisgKgorICovCitleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2tleV9zeW1zW107CitleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX2NlcnRfc3ltc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9jbGFzc19zeW1zW107CitleHRlcm4gY29uc3Qgc3RydWN0IHJlc19zeW0gX19wX3R5cGVfc3ltc1tdOworZXh0ZXJuIGNvbnN0IHN0cnVjdCByZXNfc3ltIF9fcF9yY29kZV9zeW1zW107CisjZW5kaWYgLyogU0hBUkVEX0xJQkJJTkQgKi8KKworI2lmbmRlZiBBRE5ST0lEX0NIQU5HRVMKKyNkZWZpbmUgYjY0X250b3AJCV9fYjY0X250b3AKKyNkZWZpbmUgYjY0X3B0b24JCV9fYjY0X3B0b24KKyNlbmRpZgorCisjZGVmaW5lIGRuX2NvbXAJCQlfX2RuX2NvbXAKKyNkZWZpbmUgZG5fY291bnRfbGFiZWxzCQlfX2RuX2NvdW50X2xhYmVscworI2RlZmluZSBkbl9za2lwbmFtZQkJX19kbl9za2lwbmFtZQorI2RlZmluZSBmcF9yZXNzdGF0CQlfX2ZwX3Jlc3N0YXQKKyNkZWZpbmUgbG9jX2F0b24JCV9fbG9jX2F0b24KKyNkZWZpbmUgbG9jX250b2EJCV9fbG9jX250b2EKKyNkZWZpbmUgcF9jZG5hbWUJCV9fcF9jZG5hbWUKKyNkZWZpbmUgcF9jZG5uYW1lCQlfX3BfY2RubmFtZQorI2RlZmluZSBwX2NsYXNzCQkJX19wX2NsYXNzCisjZGVmaW5lIHBfZnFuYW1lCQlfX3BfZnFuYW1lCisjZGVmaW5lIHBfZnFubmFtZQkJX19wX2Zxbm5hbWUKKyNkZWZpbmUgcF9vcHRpb24JCV9fcF9vcHRpb24KKyNkZWZpbmUgcF9zZWNzdG9kYXRlCQlfX3Bfc2Vjc3RvZGF0ZQorI2RlZmluZSBwX3NlY3Rpb24JCV9fcF9zZWN0aW9uCisjZGVmaW5lIHBfdGltZQkJCV9fcF90aW1lCisjZGVmaW5lIHBfdHlwZQkJCV9fcF90eXBlCisjZGVmaW5lIHBfcmNvZGUJCQlfX3BfcmNvZGUKKyNkZWZpbmUgcF9zb2NrdW4JCV9fcF9zb2NrdW4KKyNkZWZpbmUgcHV0bG9uZwkJCV9fcHV0bG9uZworI2RlZmluZSBwdXRzaG9ydAkJX19wdXRzaG9ydAorI2RlZmluZSByZXNfZG5vawkJX19yZXNfZG5vaworI2RlZmluZSByZXNfZmluZHpvbmVjdXQJCV9fcmVzX2ZpbmR6b25lY3V0CisjZGVmaW5lIHJlc19maW5kem9uZWN1dDIJX19yZXNfZmluZHpvbmVjdXQyCisjZGVmaW5lIHJlc19obm9rCQlfX3Jlc19obm9rCisjZGVmaW5lIHJlc19ob3N0YWxpYXMJCV9fcmVzX2hvc3RhbGlhcworI2RlZmluZSByZXNfbWFpbG9rCQlfX3Jlc19tYWlsb2sKKyNkZWZpbmUgcmVzX25hbWVpbnF1ZXJ5CQlfX3Jlc19uYW1laW5xdWVyeQorI2RlZmluZSByZXNfbmNsb3NlCQlfX3Jlc19uY2xvc2UKKyNkZWZpbmUgcmVzX25pbml0CQlfX3Jlc19uaW5pdAorI2RlZmluZSByZXNfbm1rcXVlcnkJCV9fcmVzX25ta3F1ZXJ5CisjZGVmaW5lIHJlc19wcXVlcnkJCV9fcmVzX3BxdWVyeQorI2RlZmluZSByZXNfbnF1ZXJ5CQlfX3Jlc19ucXVlcnkKKyNkZWZpbmUgcmVzX25xdWVyeWRvbWFpbglfX3Jlc19ucXVlcnlkb21haW4KKyNkZWZpbmUgcmVzX25zZWFyY2gJCV9fcmVzX25zZWFyY2gKKyNkZWZpbmUgcmVzX25zZW5kCQlfX3Jlc19uc2VuZAorI2RlZmluZSByZXNfbnNlbmRzaWduZWQJCV9fcmVzX25zZW5kc2lnbmVkCisjZGVmaW5lIHJlc19uaXNvdXJzZXJ2ZXIJX19yZXNfbmlzb3Vyc2VydmVyCisjZGVmaW5lIHJlc19vd25vawkJX19yZXNfb3dub2sKKyNkZWZpbmUgcmVzX3F1ZXJpZXNtYXRjaAlfX3Jlc19xdWVyaWVzbWF0Y2gKKyNkZWZpbmUgcmVzX3JhbmRvbWlkCQlfX3Jlc19yYW5kb21pZAorI2RlZmluZSBzeW1fbnRvcAkJX19zeW1fbnRvcAorI2RlZmluZSBzeW1fbnRvcwkJX19zeW1fbnRvcworI2RlZmluZSBzeW1fc3RvbgkJX19zeW1fc3RvbgorI2RlZmluZSByZXNfbm9wdAkJX19yZXNfbm9wdAorI2RlZmluZSByZXNfbmRlc3Ryb3kJCV9fcmVzX25kZXN0cm95CisjZGVmaW5lCXJlc19uYW1ldG9jbGFzcwkJX19yZXNfbmFtZXRvY2xhc3MKKyNkZWZpbmUJcmVzX25hbWV0b3R5cGUJCV9fcmVzX25hbWV0b3R5cGUKKyNkZWZpbmUJcmVzX3NldHNlcnZlcnMJCV9fcmVzX3NldHNlcnZlcnMKKyNkZWZpbmUJcmVzX2dldHNlcnZlcnMJCV9fcmVzX2dldHNlcnZlcnMKKyNkZWZpbmUJcmVzX2J1aWxkcHJvdG9saXN0CV9fcmVzX2J1aWxkcHJvdG9saXN0CisjZGVmaW5lCXJlc19kZXN0cm95cHJvdG9saXN0CV9fcmVzX2Rlc3Ryb3lwcm90b2xpc3QKKyNkZWZpbmUJcmVzX2Rlc3Ryb3lzZXJ2aWNlbGlzdAlfX3Jlc19kZXN0cm95c2VydmljZWxpc3QKKyNkZWZpbmUJcmVzX2dldF9uaWJibGVzdWZmaXgJX19yZXNfZ2V0X25pYmJsZXN1ZmZpeAorI2RlZmluZQlyZXNfZ2V0X25pYmJsZXN1ZmZpeDIJX19yZXNfZ2V0X25pYmJsZXN1ZmZpeDIKKyNkZWZpbmUJcmVzX291cnNlcnZlcl9wCQlfX3Jlc19vdXJzZXJ2ZXJfcAorI2RlZmluZQlyZXNfcHJvdG9jb2xuYW1lCV9fcmVzX3Byb3RvY29sbmFtZQorI2RlZmluZQlyZXNfcHJvdG9jb2xudW1iZXIJX19yZXNfcHJvdG9jb2xudW1iZXIKKyNkZWZpbmUJcmVzX3NlbmRfc2V0cWhvb2sJX19yZXNfc2VuZF9zZXRxaG9vaworI2RlZmluZQlyZXNfc2VuZF9zZXRyaG9vawlfX3Jlc19zZW5kX3NldHJob29rCisjZGVmaW5lCXJlc19zZXJ2aWNlbmFtZQkJX19yZXNfc2VydmljZW5hbWUKKyNkZWZpbmUJcmVzX3NlcnZpY2VudW1iZXIJX19yZXNfc2VydmljZW51bWJlcgorX19CRUdJTl9ERUNMUworaW50CQlyZXNfaG5vayhjb25zdCBjaGFyICopOworaW50CQlyZXNfb3dub2soY29uc3QgY2hhciAqKTsKK2ludAkJcmVzX21haWxvayhjb25zdCBjaGFyICopOworaW50CQlyZXNfZG5vayhjb25zdCBjaGFyICopOworaW50CQlzeW1fc3Rvbihjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBjb25zdCBjaGFyICosIGludCAqKTsKK2NvbnN0IGNoYXIgKglzeW1fbnRvcyhjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKTsKK2NvbnN0IGNoYXIgKglzeW1fbnRvcChjb25zdCBzdHJ1Y3QgcmVzX3N5bSAqLCBpbnQsIGludCAqKTsKKyNpZm5kZWYgQU5EUk9JRF9DSEFOR0VTCitpbnQJCWI2NF9udG9wKHVfY2hhciBjb25zdCAqLCBzaXplX3QsIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJYjY0X3B0b24oY2hhciBjb25zdCAqLCB1X2NoYXIgKiwgc2l6ZV90KTsKKyNlbmRpZgoraW50CQlsb2NfYXRvbihjb25zdCBjaGFyICosIHVfY2hhciAqKTsKK2NvbnN0IGNoYXIgKglsb2NfbnRvYShjb25zdCB1X2NoYXIgKiwgY2hhciAqKTsKK2ludAkJZG5fc2tpcG5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKK3ZvaWQJCXB1dGxvbmcodWludDMyX3QsIHVfY2hhciAqKTsKK3ZvaWQJCXB1dHNob3J0KHVpbnQxNl90LCB1X2NoYXIgKik7CisjaWZuZGVmIF9fdWx0cml4X18KK3VpbnQxNl90CV9nZXRzaG9ydChjb25zdCB1X2NoYXIgKik7Cit1aW50MzJfdAlfZ2V0bG9uZyhjb25zdCB1X2NoYXIgKik7CisjZW5kaWYKK2NvbnN0IGNoYXIgKglwX2NsYXNzKGludCk7Citjb25zdCBjaGFyICoJcF90aW1lKHVpbnQzMl90KTsKK2NvbnN0IGNoYXIgKglwX3R5cGUoaW50KTsKK2NvbnN0IGNoYXIgKglwX3Jjb2RlKGludCk7Citjb25zdCBjaGFyICoJcF9zb2NrdW4odW5pb24gcmVzX3NvY2thZGRyX3VuaW9uLCBjaGFyICosIHNpemVfdCk7Citjb25zdCB1X2NoYXIgKglwX2Nkbm5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBpbnQsIEZJTEUgKik7Citjb25zdCB1X2NoYXIgKglwX2NkbmFtZShjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosIEZJTEUgKik7Citjb25zdCB1X2NoYXIgKglwX2Zxbm5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLAorCQkJICAgICAgIGludCwgY2hhciAqLCBpbnQpOworY29uc3QgdV9jaGFyICoJcF9mcW5hbWUoY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCBGSUxFICopOworY29uc3QgY2hhciAqCXBfb3B0aW9uKHVfbG9uZyk7CitjaGFyICoJCXBfc2Vjc3RvZGF0ZSh1X2xvbmcpOworaW50CQlkbl9jb3VudF9sYWJlbHMoY29uc3QgY2hhciAqKTsKK2ludAkJZG5fY29tcChjb25zdCBjaGFyICosIHVfY2hhciAqLCBpbnQsIHVfY2hhciAqKiwgdV9jaGFyICoqKTsKK2ludAkJZG5fZXhwYW5kKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICosCisJCQkgICAgICAgY2hhciAqLCBpbnQpOwordV9pbnQJCXJlc19yYW5kb21pZCh2b2lkKTsKK2ludAkJcmVzX25hbWVpbnF1ZXJ5KGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqLAorCQkJCSAgICAgY29uc3QgdV9jaGFyICopOworaW50CQlyZXNfcXVlcmllc21hdGNoKGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgICAgICBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOworY29uc3QgY2hhciAqCXBfc2VjdGlvbihpbnQsIGludCk7CisvKiBUaGluZ3MgaW52b2x2aW5nIGEgcmVzb2x2ZXIgY29udGV4dC4gKi8KK2ludAkJcmVzX25pbml0KHJlc19zdGF0ZSk7CitpbnQJCXJlc19uaXNvdXJzZXJ2ZXIoY29uc3QgcmVzX3N0YXRlLCBjb25zdCBzdHJ1Y3Qgc29ja2FkZHJfaW4gKik7Cit2b2lkCQlmcF9yZXNzdGF0KGNvbnN0IHJlc19zdGF0ZSwgRklMRSAqKTsKK3ZvaWQJCXJlc19wcXVlcnkoY29uc3QgcmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCBGSUxFICopOworY29uc3QgY2hhciAqCXJlc19ob3N0YWxpYXMoY29uc3QgcmVzX3N0YXRlLCBjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKK2ludAkJcmVzX25xdWVyeShyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnNlYXJjaChyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnF1ZXJ5ZG9tYWluKHJlc19zdGF0ZSwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQkJICAgICAgaW50LCBpbnQsIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbm1rcXVlcnkocmVzX3N0YXRlLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LCBpbnQsCisJCQkJICBjb25zdCB1X2NoYXIgKiwgaW50LCBjb25zdCB1X2NoYXIgKiwKKwkJCQkgIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfbnNlbmQocmVzX3N0YXRlLCBjb25zdCB1X2NoYXIgKiwgaW50LCB1X2NoYXIgKiwgaW50KTsKK2ludAkJcmVzX25zZW5kc2lnbmVkKHJlc19zdGF0ZSwgY29uc3QgdV9jaGFyICosIGludCwKKwkJCQkgICAgIG5zX3RzaWdfa2V5ICosIHVfY2hhciAqLCBpbnQpOworaW50CQlyZXNfZmluZHpvbmVjdXQocmVzX3N0YXRlLCBjb25zdCBjaGFyICosIG5zX2NsYXNzLCBpbnQsCisJCQkJICAgICBjaGFyICosIHNpemVfdCwgc3RydWN0IGluX2FkZHIgKiwgaW50KTsKK2ludAkJcmVzX2ZpbmR6b25lY3V0MihyZXNfc3RhdGUsIGNvbnN0IGNoYXIgKiwgbnNfY2xhc3MsIGludCwKKwkJCQkgICAgICBjaGFyICosIHNpemVfdCwKKwkJCQkgICAgICB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKiwgaW50KTsKK3ZvaWQJCXJlc19uY2xvc2UocmVzX3N0YXRlKTsKK2ludAkJcmVzX25vcHQocmVzX3N0YXRlLCBpbnQsIHVfY2hhciAqLCBpbnQsIGludCk7Cit2b2lkCQlyZXNfc2VuZF9zZXRxaG9vayhyZXNfc2VuZF9xaG9vayk7Cit2b2lkCQlyZXNfc2VuZF9zZXRyaG9vayhyZXNfc2VuZF9yaG9vayk7CitpbnQJCV9fcmVzX3Zpbml0KHJlc19zdGF0ZSwgaW50KTsKK3ZvaWQJCXJlc19kZXN0cm95c2VydmljZWxpc3Qodm9pZCk7Citjb25zdCBjaGFyICoJcmVzX3NlcnZpY2VuYW1lKHVpbnQxNl90LCBjb25zdCBjaGFyICopOworY29uc3QgY2hhciAqCXJlc19wcm90b2NvbG5hbWUoaW50KTsKK3ZvaWQJCXJlc19kZXN0cm95cHJvdG9saXN0KHZvaWQpOwordm9pZAkJcmVzX2J1aWxkcHJvdG9saXN0KHZvaWQpOworY29uc3QgY2hhciAqCXJlc19nZXRfbmliYmxlc3VmZml4KHJlc19zdGF0ZSk7Citjb25zdCBjaGFyICoJcmVzX2dldF9uaWJibGVzdWZmaXgyKHJlc19zdGF0ZSk7Cit2b2lkCQlyZXNfbmRlc3Ryb3kocmVzX3N0YXRlKTsKK3VpbnQxNl90CXJlc19uYW1ldG9jbGFzcyhjb25zdCBjaGFyICosIGludCAqKTsKK3VpbnQxNl90CXJlc19uYW1ldG90eXBlKGNvbnN0IGNoYXIgKiwgaW50ICopOwordm9pZAkJcmVzX3NldHNlcnZlcnMocmVzX3N0YXRlLAorCQkJCSAgICBjb25zdCB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKiwgaW50KTsKK2ludAkJcmVzX2dldHNlcnZlcnMocmVzX3N0YXRlLAorCQkJCSAgICB1bmlvbiByZXNfc29ja2FkZHJfdW5pb24gKiwgaW50KTsKKworaW50IHJlc19nZXRfZG5zX2NoYW5nZWQoKTsKK3VfaW50ICByZXNfcmFuZG9taWQodm9pZCk7CisKK19fRU5EX0RFQ0xTCisKKyNlbmRpZiAvKiAhX1JFU09MVl9QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3Jlc29sdl9zdGF0aWMuaCBiL2xpYmMvcmVzb2x2X3N0YXRpYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmMmEwOTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Jlc29sdl9zdGF0aWMuaApAQCAtMCwwICsxLDMyIEBACisjaWZuZGVmIF9SRVNPTFZfU1RBVElDX0gKKyNkZWZpbmUgX1JFU09MVl9TVEFUSUNfSAorCisjaW5jbHVkZSA8bmV0ZGIuaD4KKworLyogdGhpcyBzdHJ1Y3R1cmUgY29udGFpbnMgYWxsIHRoZSB2YXJpYWJsZXMgdGhhdCB3ZXJlIGRlY2xhcmVkCisgKiAnc3RhdGljJyBpbiB0aGUgb3JpZ2luYWwgTmV0QlNEIHJlc29sdmVyIGNvZGUuCisgKgorICogdGhpcyBjYXVzZWQgdmFzdCBhbW91bnRzIG9mIGNyYXNoZXMgYW5kIG1lbW9yeSBjb3JydXB0aW9ucworICogd2hlbiB0aGUgcmVzb2x2ZXIgd2FzIGJlaW5nIHVzZWQgYnkgbXVsdGlwbGUgdGhyZWFkcy4KKyAqCisgKiAobm90ZTogdGhlIE9wZW5CU0QvRnJlZUJTRCByZXNvbHZlciBoYXMgc2ltaWxhciAnaXNzdWVzJykKKyAqLworCisjZGVmaW5lCU1BWEFMSUFTRVMJMzUKKyNkZWZpbmUJTUFYQUREUlMJMzUKKwordHlwZWRlZiBzdHJ1Y3QgcmVzX3N0YXRpYyB7CisgICAgY2hhciogICAgICAgICAgIGhfYWRkcl9wdHJzW01BWEFERFJTICsgMV07CisgICAgY2hhciogICAgICAgICAgIGhvc3RfYWxpYXNlc1tNQVhBTElBU0VTXTsKKyAgICBjaGFyICAgICAgICAgICAgaG9zdGJ1Zls4KjEwMjRdOworICAgIHVfaW50MzJfdCAgICAgICBob3N0X2FkZHJbMTYgLyBzaXplb2YodV9pbnQzMl90KV07ICAvKiBJUHY0IG9yIElQdjYgKi8KKyAgICBGSUxFKiAgICAgICAgICAgaG9zdGY7CisgICAgaW50ICAgICAgICAgICAgIHN0YXlvcGVuOworICAgIGNvbnN0IGNoYXIqICAgICBzZXJ2ZW50X3B0cjsKKyAgICBzdHJ1Y3Qgc2VydmVudCAgc2VydmVudDsKKyAgICBzdHJ1Y3QgaG9zdGVudCAgaG9zdDsKK30gKnJlc19zdGF0aWM7CisKK2V4dGVybiByZXNfc3RhdGljIF9fcmVzX2dldF9zdGF0aWModm9pZCk7CisKKyNlbmRpZiAvKiBfUkVTT0xWX1NUQVRJQ19IICovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2FzcHJpbnRmLmMgYi9saWJjL3N0ZGlvL2FzcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzM3OTE0MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vYXNwcmludGYuYwpAQCAtMCwwICsxLDYwIEBACisvKgkkT3BlbkJTRDogYXNwcmludGYuYyx2IDEuMTUgMjAwNS8xMC8xMCAxMjowMDo1MiBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Cithc3ByaW50ZihjaGFyICoqc3RyLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisJRklMRSBmOworCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFIgfCBfX1NBTEM7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKiltYWxsb2MoMTI4KTsKKwlpZiAoZi5fYmYuX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gMTI3OwkJLyogTGVhdmUgcm9vbSBmb3IgdGhlIE5VTCAqLworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXJldCA9IHZmcHJpbnRmKCZmLCBmbXQsIGFwKTsKKyAgdmFfZW5kKGFwKTsKKwlpZiAocmV0ID09IC0xKQorCQlnb3RvIGVycjsKKwkqZi5fcCA9ICdcMCc7CisJX2Jhc2UgPSByZWFsbG9jKGYuX2JmLl9iYXNlLCByZXQgKyAxKTsKKwlpZiAoX2Jhc2UgPT0gTlVMTCkKKwkJZ290byBlcnI7CisJKnN0ciA9IChjaGFyICopX2Jhc2U7CisJcmV0dXJuIChyZXQpOworCitlcnI6CisJaWYgKGYuX2JmLl9iYXNlKSB7CisJCWZyZWUoZi5fYmYuX2Jhc2UpOworCQlmLl9iZi5fYmFzZSA9IE5VTEw7CisJfQorCSpzdHIgPSBOVUxMOworCWVycm5vID0gRU5PTUVNOworCXJldHVybiAoLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9jbHJlcnIuYyBiL2xpYmMvc3RkaW8vY2xyZXJyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmMTk5NAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vY2xyZXJyLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IGNscmVyci5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjdW5kZWYJY2xlYXJlcnIKKwordm9pZAorY2xlYXJlcnIoRklMRSAqZnApCit7CisJZmxvY2tmaWxlKGZwKTsKKwlfX3NjbGVhcmVycihmcCk7CisJZnVubG9ja2ZpbGUoZnApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mY2xvc2UuYyBiL2xpYmMvc3RkaW8vZmNsb3NlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmRmNmU1MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmNsb3NlLmMKQEAgLTAsMCArMSw2MSBAQAorLyoJJE9wZW5CU0Q6IGZjbG9zZS5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitpbnQKK2ZjbG9zZShGSUxFICpmcCkKK3sKKwlpbnQgcjsKKworCWlmIChmcC0+X2ZsYWdzID09IDApIHsJLyogbm90IG9wZW4hICovCisJCWVycm5vID0gRUJBREY7CisJCXJldHVybiAoRU9GKTsKKwl9CisJV0NJT19GUkVFKGZwKTsKKwlyID0gZnAtPl9mbGFncyAmIF9fU1dSID8gX19zZmx1c2goZnApIDogMDsKKwlpZiAoZnAtPl9jbG9zZSAhPSBOVUxMICYmICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpIDwgMCkKKwkJciA9IEVPRjsKKwlpZiAoZnAtPl9mbGFncyAmIF9fU01CRikKKwkJZnJlZSgoY2hhciAqKWZwLT5fYmYuX2Jhc2UpOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJaWYgKEhBU0xCKGZwKSkKKwkJRlJFRUxCKGZwKTsKKwlmcC0+X2ZsYWdzID0gMDsJCS8qIFJlbGVhc2UgdGhpcyBGSUxFIGZvciByZXVzZS4gKi8KKwlmcC0+X3IgPSBmcC0+X3cgPSAwOwkvKiBNZXNzIHVwIGlmIHJlYWNjZXNzZWQuICovCisJcmV0dXJuIChyKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmRvcGVuLmMgYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFkZjYwOWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2Zkb3Blbi5jCkBAIC0wLDAgKzEsNzYgQEAKKy8qCSRPcGVuQlNEOiBmZG9wZW4uYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCitGSUxFICoKK2Zkb3BlbihpbnQgZmQsIGNvbnN0IGNoYXIgKm1vZGUpCit7CisJRklMRSAqZnA7CisJaW50IGZsYWdzLCBvZmxhZ3MsIGZkZmxhZ3MsIHRtcDsKKworCWlmICgoZmxhZ3MgPSBfX3NmbGFncyhtb2RlLCAmb2ZsYWdzKSkgPT0gMCkKKwkJcmV0dXJuIChOVUxMKTsKKworCS8qIE1ha2Ugc3VyZSB0aGUgbW9kZSB0aGUgdXNlciB3YW50cyBpcyBhIHN1YnNldCBvZiB0aGUgYWN0dWFsIG1vZGUuICovCisJaWYgKChmZGZsYWdzID0gZmNudGwoZmQsIEZfR0VURkwsIDApKSA8IDApCisJCXJldHVybiAoTlVMTCk7CisJdG1wID0gZmRmbGFncyAmIE9fQUNDTU9ERTsKKwlpZiAodG1wICE9IE9fUkRXUiAmJiAodG1wICE9IChvZmxhZ3MgJiBPX0FDQ01PREUpKSkgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKGZwID0gX19zZnAoKSkgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlmcC0+X2ZsYWdzID0gZmxhZ3M7CisJLyoKKwkgKiBJZiBvcGVuZWQgZm9yIGFwcGVuZGluZywgYnV0IHVuZGVybHlpbmcgZGVzY3JpcHRvciBkb2VzIG5vdCBoYXZlCisJICogT19BUFBFTkQgYml0IHNldCwgYXNzZXJ0IF9fU0FQUCBzbyB0aGF0IF9fc3dyaXRlKCkgd2lsbCBsc2VlayB0bworCSAqIGVuZCBiZWZvcmUgZWFjaCB3cml0ZS4KKwkgKi8KKwlpZiAoKG9mbGFncyAmIE9fQVBQRU5EKSAmJiAhKGZkZmxhZ3MgJiBPX0FQUEVORCkpCisJCWZwLT5fZmxhZ3MgfD0gX19TQVBQOworCWZwLT5fZmlsZSA9IGZkOworCWZwLT5fY29va2llID0gZnA7CisJZnAtPl9yZWFkID0gX19zcmVhZDsKKwlmcC0+X3dyaXRlID0gX19zd3JpdGU7CisJZnAtPl9zZWVrID0gX19zc2VlazsKKwlmcC0+X2Nsb3NlID0gX19zY2xvc2U7CisJcmV0dXJuIChmcCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Zlb2YuYyBiL2xpYmMvc3RkaW8vZmVvZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViNzQyZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2Zlb2YuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogZmVvZi5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVvZi4KKyAqLworI3VuZGVmIGZlb2YKKworaW50CitmZW9mKEZJTEUgKmZwKQoreworCXJldHVybiAoX19zZmVvZihmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZXJyb3IuYyBiL2xpYmMvc3RkaW8vZmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGQyY2YwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmVycm9yLmMKQEAgLTAsMCArMSw0NSBAQAorLyoJJE9wZW5CU0Q6IGZlcnJvci5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZmVycm9yLgorICovCisjdW5kZWYgZmVycm9yCisKK2ludAorZmVycm9yKEZJTEUgKmZwKQoreworCXJldHVybiAoX19zZmVycm9yKGZwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZmbHVzaC5jIGIvbGliYy9zdGRpby9mZmx1c2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjcyYWQ4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mZmx1c2guYwpAQCAtMCwwICsxLDgyIEBACisvKgkkT3BlbkJTRDogZmZsdXNoLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qIEZsdXNoIGEgc2luZ2xlIGZpbGUsIG9yIChpZiBmcCBpcyBOVUxMKSBhbGwgZmlsZXMuICAqLworaW50CitmZmx1c2goRklMRSAqZnApCit7CisKKwlpZiAoZnAgPT0gTlVMTCkKKwkJcmV0dXJuIChfZndhbGsoX19zZmx1c2gpKTsKKwlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TV1IgfCBfX1NSVykpID09IDApIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKwlyZXR1cm4gKF9fc2ZsdXNoKGZwKSk7Cit9CisKK2ludAorX19zZmx1c2goRklMRSAqZnApCit7CisJdW5zaWduZWQgY2hhciAqcDsKKwlpbnQgbiwgdDsKKworCXQgPSBmcC0+X2ZsYWdzOworCWlmICgodCAmIF9fU1dSKSA9PSAwKQorCQlyZXR1cm4gKDApOworCisJaWYgKChwID0gZnAtPl9iZi5fYmFzZSkgPT0gTlVMTCkKKwkJcmV0dXJuICgwKTsKKworCW4gPSBmcC0+X3AgLSBwOwkJLyogd3JpdGUgdGhpcyBtdWNoICovCisKKwkvKgorCSAqIFNldCB0aGVzZSBpbW1lZGlhdGVseSB0byBhdm9pZCBwcm9ibGVtcyB3aXRoIGxvbmdqbXAgYW5kIHRvIGFsbG93CisJICogZXhjaGFuZ2UgYnVmZmVyaW5nICh2aWEgc2V0dmJ1ZikgaW4gdXNlciB3cml0ZSBmdW5jdGlvbi4KKwkgKi8KKwlmcC0+X3AgPSBwOworCWZwLT5fdyA9IHQgJiAoX19TTEJGfF9fU05CRikgPyAwIDogZnAtPl9iZi5fc2l6ZTsKKworCWZvciAoOyBuID4gMDsgbiAtPSB0LCBwICs9IHQpIHsKKwkJdCA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIChjaGFyICopcCwgbik7CisJCWlmICh0IDw9IDApIHsKKwkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJcmV0dXJuIChFT0YpOworCQl9CisJfQorCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZnZXRjLmMgYi9saWJjL3N0ZGlvL2ZnZXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTNlMjk0OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmdldGMuYwpAQCAtMCwwICsxLDQwIEBACisvKgkkT3BlbkJTRDogZmdldGMuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK2ZnZXRjKEZJTEUgKmZwKQoreworCXJldHVybiAoX19zZ2V0YyhmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZ2V0bG4uYyBiL2xpYmMvc3RkaW8vZmdldGxuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTQ2ZTFiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmdldGxuLmMKQEAgLTAsMCArMSwxNTAgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0bG4uYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBFeHBhbmQgdGhlIGxpbmUgYnVmZmVyLiAgUmV0dXJuIC0xIG9uIGVycm9yLgorI2lmZGVmIG5vdGRlZgorICogVGhlIGBuZXcgc2l6ZScgZG9lcyBub3QgYWNjb3VudCBmb3IgYSB0ZXJtaW5hdGluZyAnXDAnLAorICogc28gd2UgYWRkIDEgaGVyZS4KKyNlbmRpZgorICovCitpbnQKK19fc2xiZXhwYW5kKEZJTEUgKmZwLCBzaXplX3QgbmV3c2l6ZSkKK3sKKwl2b2lkICpwOworCisjaWZkZWYgbm90ZGVmCisJKytuZXdzaXplOworI2VuZGlmCisJaWYgKChzaXplX3QpZnAtPl9sYi5fc2l6ZSA+PSBuZXdzaXplKQorCQlyZXR1cm4gKDApOworCWlmICgocCA9IHJlYWxsb2MoZnAtPl9sYi5fYmFzZSwgbmV3c2l6ZSkpID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCWZwLT5fbGIuX2Jhc2UgPSBwOworCWZwLT5fbGIuX3NpemUgPSBuZXdzaXplOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBHZXQgYW4gaW5wdXQgbGluZS4gIFRoZSByZXR1cm5lZCBwb2ludGVyIG9mdGVuIChidXQgbm90IGFsd2F5cykKKyAqIHBvaW50cyBpbnRvIGEgc3RkaW8gYnVmZmVyLiAgRmdldGxpbmUgZG9lcyBub3QgYWx0ZXIgdGhlIHRleHQgb2YKKyAqIHRoZSByZXR1cm5lZCBsaW5lICh3aGljaCBpcyB0aHVzIG5vdCBhIEMgc3RyaW5nIGJlY2F1c2UgaXQgd2lsbAorICogbm90IG5lY2Vzc2FyaWx5IGVuZCB3aXRoICdcMCcpLCBidXQgZG9lcyBhbGxvdyBjYWxsZXJzIHRvIG1vZGlmeQorICogaXQgaWYgdGhleSB3aXNoLiAgVGh1cywgd2Ugc2V0IF9fU01PRCBpbiBjYXNlIHRoZSBjYWxsZXIgZG9lcy4KKyAqLworY2hhciAqCitmZ2V0bG4oRklMRSAqZnAsIHNpemVfdCAqbGVucCkKK3sKKwl1bnNpZ25lZCBjaGFyICpwOworCXNpemVfdCBsZW47CisJc2l6ZV90IG9mZjsKKworCS8qIG1ha2Ugc3VyZSB0aGVyZSBpcyBpbnB1dCAqLworCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKSB7CisJCSpsZW5wID0gMDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwkvKiBsb29rIGZvciBhIG5ld2xpbmUgaW4gdGhlIGlucHV0ICovCisJaWYgKChwID0gbWVtY2hyKCh2b2lkICopZnAtPl9wLCAnXG4nLCBmcC0+X3IpKSAhPSBOVUxMKSB7CisJCWNoYXIgKnJldDsKKworCQkvKgorCQkgKiBGb3VuZCBvbmUuICBGbGFnIGJ1ZmZlciBhcyBtb2RpZmllZCB0byBrZWVwIGZzZWVrIGZyb20KKwkJICogYG9wdGltaXNpbmcnIGEgYmFja3dhcmQgc2VlaywgaW4gY2FzZSB0aGUgdXNlciBzdG9tcHMgb24KKwkJICogdGhlIHRleHQuCisJCSAqLworCQlwKys7CQkvKiBhZHZhbmNlIG92ZXIgaXQgKi8KKwkJcmV0ID0gKGNoYXIgKilmcC0+X3A7CisJCSpsZW5wID0gbGVuID0gcCAtIGZwLT5fcDsKKwkJZnAtPl9mbGFncyB8PSBfX1NNT0Q7CisJCWZwLT5fciAtPSBsZW47CisJCWZwLT5fcCA9IHA7CisJCXJldHVybiAocmV0KTsKKwl9CisKKwkvKgorCSAqIFdlIGhhdmUgdG8gY29weSB0aGUgY3VycmVudCBidWZmZXJlZCBkYXRhIHRvIHRoZSBsaW5lIGJ1ZmZlci4KKwkgKiBBcyBhIGJvbnVzLCB0aG91Z2gsIHdlIGNhbiBsZWF2ZSBvZmYgdGhlIF9fU01PRC4KKwkgKgorCSAqIE9QVElNSVNUSUMgaXMgbGVuZ3RoIHRoYXQgd2UgKG9wdGltaXN0aWNhbGx5KSBleHBlY3Qgd2lsbAorCSAqIGFjY29tbW9kYXRlIHRoZSBgcmVzdCcgb2YgdGhlIHN0cmluZywgb24gZWFjaCB0cmlwIHRocm91Z2ggdGhlCisJICogbG9vcCBiZWxvdy4KKwkgKi8KKyNkZWZpbmUgT1BUSU1JU1RJQyA4MAorCisJZm9yIChsZW4gPSBmcC0+X3IsIG9mZiA9IDA7OyBsZW4gKz0gZnAtPl9yKSB7CisJCXNpemVfdCBkaWZmOworCisJCS8qCisJCSAqIE1ha2Ugc3VyZSB0aGVyZSBpcyByb29tIGZvciBtb3JlIGJ5dGVzLiAgQ29weSBkYXRhIGZyb20KKwkJICogZmlsZSBidWZmZXIgdG8gbGluZSBidWZmZXIsIHJlZmlsbCBmaWxlIGFuZCBsb29rIGZvcgorCQkgKiBuZXdsaW5lLiAgVGhlIGxvb3Agc3RvcHMgb25seSB3aGVuIHdlIGZpbmQgYSBuZXdsaW5lLgorCQkgKi8KKwkJaWYgKF9fc2xiZXhwYW5kKGZwLCBsZW4gKyBPUFRJTUlTVElDKSkKKwkJCWdvdG8gZXJyb3I7CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKShmcC0+X2xiLl9iYXNlICsgb2ZmKSwgKHZvaWQgKilmcC0+X3AsCisJCSAgICBsZW4gLSBvZmYpOworCQlvZmYgPSBsZW47CisJCWlmIChfX3NyZWZpbGwoZnApKQorCQkJYnJlYWs7CS8qIEVPRiBvciBlcnJvcjogcmV0dXJuIHBhcnRpYWwgbGluZSAqLworCQlpZiAoKHAgPSBtZW1jaHIoKHZvaWQgKilmcC0+X3AsICdcbicsIGZwLT5fcikpID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQkvKiBnb3QgaXQ6IGZpbmlzaCB1cCB0aGUgbGluZSAobGlrZSBjb2RlIGFib3ZlKSAqLworCQlwKys7CisJCWRpZmYgPSBwIC0gZnAtPl9wOworCQlsZW4gKz0gZGlmZjsKKwkJaWYgKF9fc2xiZXhwYW5kKGZwLCBsZW4pKQorCQkJZ290byBlcnJvcjsKKwkJKHZvaWQpbWVtY3B5KCh2b2lkICopKGZwLT5fbGIuX2Jhc2UgKyBvZmYpLCAodm9pZCAqKWZwLT5fcCwKKwkJICAgIGRpZmYpOworCQlmcC0+X3IgLT0gZGlmZjsKKwkJZnAtPl9wID0gcDsKKwkJYnJlYWs7CisJfQorCSpsZW5wID0gbGVuOworI2lmZGVmIG5vdGRlZgorCWZwLT5fbGIuX2Jhc2VbbGVuXSA9ICdcMCc7CisjZW5kaWYKKwlyZXR1cm4gKChjaGFyICopZnAtPl9sYi5fYmFzZSk7CisKK2Vycm9yOgorCSpsZW5wID0gMDsJCS8qID8/PyAqLworCXJldHVybiAoTlVMTCk7CQkvKiA/Pz8gKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmdldHBvcy5jIGIvbGliYy9zdGRpby9mZ2V0cG9zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTYxODhlNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmdldHBvcy5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBmZ2V0cG9zLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIGZnZXRwb3M6IGxpa2UgZnRlbGxvLgorICovCitpbnQKK2ZnZXRwb3MoRklMRSAqZnAsIGZwb3NfdCAqcG9zKQoreworCXJldHVybigoKnBvcyA9IGZ0ZWxsbyhmcCkpID09IChmcG9zX3QpLTEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mZ2V0cy5jIGIvbGliYy9zdGRpby9mZ2V0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5YmRhYzkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZnZXRzLmMKQEAgLTAsMCArMSw5NyBAQAorLyoJJE9wZW5CU0Q6IGZnZXRzLmMsdiAxLjEwIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFJlYWQgYXQgbW9zdCBuLTEgY2hhcmFjdGVycyBmcm9tIHRoZSBnaXZlbiBmaWxlLgorICogU3RvcCB3aGVuIGEgbmV3bGluZSBoYXMgYmVlbiByZWFkLCBvciB0aGUgY291bnQgcnVucyBvdXQuCisgKiBSZXR1cm4gZmlyc3QgYXJndW1lbnQsIG9yIE5VTEwgaWYgbm8gY2hhcmFjdGVycyB3ZXJlIHJlYWQuCisgKiBEbyBub3QgcmV0dXJuIE5VTEwgaWYgbiA9PSAxLgorICovCitjaGFyICoKK2ZnZXRzKGNoYXIgKmJ1ZiwgaW50IG4sIEZJTEUgKmZwKQoreworCXNpemVfdCBsZW47CisJY2hhciAqczsKKwl1bnNpZ25lZCBjaGFyICpwLCAqdDsKKworCWlmIChuIDw9IDApCQkvKiBzYW5pdHkgY2hlY2sgKi8KKwkJcmV0dXJuIChOVUxMKTsKKworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlzID0gYnVmOworCW4tLTsJCQkvKiBsZWF2ZSBzcGFjZSBmb3IgTlVMICovCisJd2hpbGUgKG4gIT0gMCkgeworCQkvKgorCQkgKiBJZiB0aGUgYnVmZmVyIGlzIGVtcHR5LCByZWZpbGwgaXQuCisJCSAqLworCQlpZiAoZnAtPl9yIDw9IDApIHsKKwkJCWlmIChfX3NyZWZpbGwoZnApKSB7CisJCQkJLyogRU9GL2Vycm9yOiBzdG9wIHdpdGggcGFydGlhbCBvciBubyBsaW5lICovCisJCQkJaWYgKHMgPT0gYnVmKQorCQkJCQlyZXR1cm4gKE5VTEwpOworICAgICAgYnJlYWs7CisgIH0KKwkJfQorCQlsZW4gPSBmcC0+X3I7CisJCXAgPSBmcC0+X3A7CisgIAorCQkvKgorCQkgKiBTY2FuIHRocm91Z2ggYXQgbW9zdCBuIGJ5dGVzIG9mIHRoZSBjdXJyZW50IGJ1ZmZlciwKKwkJICogbG9va2luZyBmb3IgJ1xuJy4gIElmIGZvdW5kLCBjb3B5IHVwIHRvIGFuZCBpbmNsdWRpbmcKKwkJICogbmV3bGluZSwgYW5kIHN0b3AuICBPdGhlcndpc2UsIGNvcHkgZW50aXJlIGNodW5rCisJCSAqIGFuZCBsb29wLgorCQkgKi8KKwkJaWYgKChpbnQpbGVuID4gbikKKwkJCWxlbiA9IG47CisJCXQgPSBtZW1jaHIoKHZvaWQgKilwLCAnXG4nLCBsZW4pOworCQlpZiAodCAhPSBOVUxMKSB7CisJCQlsZW4gPSArK3QgLSBwOworCQkJZnAtPl9yIC09IGxlbjsKKwkJCWZwLT5fcCA9IHQ7CisJCQkodm9pZCltZW1jcHkoKHZvaWQgKilzLCAodm9pZCAqKXAsIGxlbik7CisJCQlzW2xlbl0gPSAnXDAnOworCQkJcmV0dXJuIChidWYpOworCQl9CisJCWZwLT5fciAtPSBsZW47CisJCWZwLT5fcCArPSBsZW47CisJCSh2b2lkKW1lbWNweSgodm9pZCAqKXMsICh2b2lkICopcCwgbGVuKTsKKwkJcyArPSBsZW47CisJCW4gLT0gbGVuOworCX0KKwkqcyA9ICdcMCc7CisJcmV0dXJuIChidWYpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9maWxlZXh0LmggYi9saWJjL3N0ZGlvL2ZpbGVleHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZDA3MDQzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9maWxlZXh0LmgKQEAgLTAsMCArMSw1NCBAQAorLyoJJE9wZW5CU0Q6IGZpbGVleHQuaCx2IDEuMiAyMDA1LzA2LzE3IDIwOjQwOjMyIGVzcGllIEV4cCAkCSovCisvKiAkTmV0QlNEOiBmaWxlZXh0LmgsdiAxLjUgMjAwMy8wNy8xOCAyMTo0Njo0MSBuYXRoYW53IEV4cCAkICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKTIwMDEgQ2l0cnVzIFByb2plY3QsCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICoKKyAqICRDaXRydXMkCisgKi8KKworLyoKKyAqIGZpbGUgZXh0ZW5zaW9uCisgKi8KK3N0cnVjdCBfX3NmaWxlZXh0IHsKKwlzdHJ1Y3QJX19zYnVmIF91YjsgLyogdW5nZXRjIGJ1ZmZlciAqLworCXN0cnVjdCB3Y2hhcl9pb19kYXRhIF93Y2lvOwkvKiB3aWRlIGNoYXIgaW8gc3RhdHVzICovCit9OworCisjZGVmaW5lIF9FWFQoZnApICgoc3RydWN0IF9fc2ZpbGVleHQgKikoKGZwKS0+X2V4dC5fYmFzZSkpCisjZGVmaW5lIF9VQihmcCkgX0VYVChmcCktPl91YgorCisjZGVmaW5lIF9GSUxFRVhUX0lOSVQoZnApIFwKK2RvIHsgXAorCV9VQihmcCkuX2Jhc2UgPSBOVUxMOyBcCisJX1VCKGZwKS5fc2l6ZSA9IDA7IFwKKwlXQ0lPX0lOSVQoZnApOyBcCit9IHdoaWxlICgwKQorCisjZGVmaW5lIF9GSUxFRVhUX1NFVFVQKGYsIGZleHQpIFwKK2RvIHsgXAorCShmKS0+X2V4dC5fYmFzZSA9ICh1bnNpZ25lZCBjaGFyICopKGZleHQpOyBcCisJX0ZJTEVFWFRfSU5JVChmKTsgXAorfSB3aGlsZSAoMCkKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmlsZW5vLmMgYi9saWJjL3N0ZGlvL2ZpbGVuby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBmZDk4NWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZpbGVuby5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCSRPcGVuQlNEOiBmaWxlbm8uYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGZpbGVuby4KKyAqLworI3VuZGVmIGZpbGVubworCitpbnQKK2ZpbGVubyhGSUxFICpmcCkKK3sKKwlyZXR1cm4gKF9fc2ZpbGVubyhmcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9maW5kZnAuYyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTU1YTY1ZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmluZGZwLmMKQEAgLTAsMCArMSwxODEgQEAKKy8qCSRPcGVuQlNEOiBmaW5kZnAuYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJnbHVlLmgiCisKK2ludAlfX3NkaWRpbml0OworCisjZGVmaW5lCU5EWU5BTUlDIDEwCQkvKiBhZGQgdGVuIG1vcmUgd2hlbmV2ZXIgbmVjZXNzYXJ5ICovCisKKyNkZWZpbmUJc3RkKGZsYWdzLCBmaWxlKSBcCisJezAsMCwwLGZsYWdzLGZpbGUsezAsMH0sMCxfX3NGK2ZpbGUsX19zY2xvc2UsX19zcmVhZCxfX3NzZWVrLF9fc3dyaXRlLCBcCisJIHsodW5zaWduZWQgY2hhciAqKShfX3NGZXh0K2ZpbGUpLCAwfSxOVUxMLDAsezAsMCwwfSx7MH0sezAsMH0sMCwwfQorLyoJIHAgciB3IGZsYWdzIGZpbGUgX2JmIHogIGNvb2tpZSAgICAgIGNsb3NlICAgIHJlYWQgICAgc2VlayAgICB3cml0ZQorCSBleHQgKi8KKworCQkJCS8qIHRoZSB1c3VhbCAtIChzdGRpbiArIHN0ZG91dCArIHN0ZGVycikgKi8KK3N0YXRpYyBGSUxFIHVzdWFsW0ZPUEVOX01BWCAtIDNdOworc3RhdGljIHN0cnVjdCBfX3NmaWxlZXh0IHVzdWFsZXh0W0ZPUEVOX01BWCAtIDNdOworc3RhdGljIHN0cnVjdCBnbHVlIHVnbHVlID0geyAwLCBGT1BFTl9NQVggLSAzLCB1c3VhbCB9OworCitzdHJ1Y3QgX19zZmlsZWV4dCBfX3NGZXh0WzNdOworRklMRSBfX3NGWzNdID0geworCXN0ZChfX1NSRCwgU1RESU5fRklMRU5PKSwJCS8qIHN0ZGluICovCisJc3RkKF9fU1dSLCBTVERPVVRfRklMRU5PKSwJCS8qIHN0ZG91dCAqLworCXN0ZChfX1NXUnxfX1NOQkYsIFNUREVSUl9GSUxFTk8pCS8qIHN0ZGVyciAqLworfTsKK3N0cnVjdCBnbHVlIF9fc2dsdWUgPSB7ICZ1Z2x1ZSwgMywgX19zRiB9OworCitzdGF0aWMgc3RydWN0IGdsdWUgKgorbW9yZWdsdWUoaW50IG4pCit7CisJc3RydWN0IGdsdWUgKmc7CisJRklMRSAqcDsKKwlzdHJ1Y3QgX19zZmlsZWV4dCAqcGV4dDsKKwlzdGF0aWMgRklMRSBlbXB0eTsKKwljaGFyICpkYXRhOworCisJZGF0YSA9IG1hbGxvYyhzaXplb2YoKmcpICsgQUxJR05CWVRFUyArIG4gKiBzaXplb2YoRklMRSkKKwkgICAgKyBuICogc2l6ZW9mKHN0cnVjdCBfX3NmaWxlZXh0KSk7CisJaWYgKGRhdGEgPT0gTlVMTCkKKwkJcmV0dXJuIChOVUxMKTsKKwlnID0gKHN0cnVjdCBnbHVlICopZGF0YTsKKwlwID0gKEZJTEUgKilBTElHTihkYXRhICsgc2l6ZW9mKCpnKSk7CisJcGV4dCA9IChzdHJ1Y3QgX19zZmlsZWV4dCAqKQorCSAgICAoQUxJR04oZGF0YSArIHNpemVvZigqZykpICsgbiAqIHNpemVvZihGSUxFKSk7CisJZy0+bmV4dCA9IE5VTEw7CisJZy0+bmlvYnMgPSBuOworCWctPmlvYnMgPSBwOworCXdoaWxlICgtLW4gPj0gMCkgeworCQkqcCA9IGVtcHR5OworCQlfRklMRUVYVF9TRVRVUChwLCBwZXh0KTsKKwkJcCsrOworCQlwZXh0Kys7CisJfQorCXJldHVybiAoZyk7Cit9CisKKy8qCisgKiBGaW5kIGEgZnJlZSBGSUxFIGZvciBmb3BlbiBldCBhbC4KKyAqLworRklMRSAqCitfX3NmcCh2b2lkKQoreworCUZJTEUgKmZwOworCWludCBuOworCXN0cnVjdCBnbHVlICpnOworCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisJZm9yIChnID0gJl9fc2dsdWU7OyBnID0gZy0+bmV4dCkgeworCQlmb3IgKGZwID0gZy0+aW9icywgbiA9IGctPm5pb2JzOyAtLW4gPj0gMDsgZnArKykKKwkJCWlmIChmcC0+X2ZsYWdzID09IDApCisJCQkJZ290byBmb3VuZDsKKwkJaWYgKGctPm5leHQgPT0gTlVMTCAmJiAoZy0+bmV4dCA9IG1vcmVnbHVlKE5EWU5BTUlDKSkgPT0gTlVMTCkKKwkJCWJyZWFrOworCX0KKwlyZXR1cm4gKE5VTEwpOworZm91bmQ6CisJZnAtPl9mbGFncyA9IDE7CQkvKiByZXNlcnZlIHRoaXMgc2xvdDsgY2FsbGVyIHNldHMgcmVhbCBmbGFncyAqLworCWZwLT5fcCA9IE5VTEw7CQkvKiBubyBjdXJyZW50IHBvaW50ZXIgKi8KKwlmcC0+X3cgPSAwOwkJLyogbm90aGluZyB0byByZWFkIG9yIHdyaXRlICovCisJZnAtPl9yID0gMDsKKwlmcC0+X2JmLl9iYXNlID0gTlVMTDsJLyogbm8gYnVmZmVyICovCisJZnAtPl9iZi5fc2l6ZSA9IDA7CisJZnAtPl9sYmZzaXplID0gMDsJLyogbm90IGxpbmUgYnVmZmVyZWQgKi8KKwlmcC0+X2ZpbGUgPSAtMTsJCS8qIG5vIGZpbGUgKi8KKy8qCWZwLT5fY29va2llID0gPGFueT47ICovCS8qIGNhbGxlciBzZXRzIGNvb2tpZSwgX3JlYWQvX3dyaXRlIGV0YyAqLworCWZwLT5fbGIuX2Jhc2UgPSBOVUxMOwkvKiBubyBsaW5lIGJ1ZmZlciAqLworCWZwLT5fbGIuX3NpemUgPSAwOworCV9GSUxFRVhUX0lOSVQoZnApOworCXJldHVybiAoZnApOworfQorCisjaWYgMAorI2RlZmluZSBnZXRkdGFibGVzaXplKCkJc3lzY29uZihfU0NfT1BFTl9NQVgpCisKKy8qCisgKiBYWFguICBGb3JjZSBpbW1lZGlhdGUgYWxsb2NhdGlvbiBvZiBpbnRlcm5hbCBtZW1vcnkuICBOb3QgdXNlZCBieSBzdGRpbywKKyAqIGJ1dCBkb2N1bWVudGVkIGhpc3RvcmljYWxseSBmb3IgY2VydGFpbiBhcHBsaWNhdGlvbnMuICBCYWQgYXBwbGljYXRpb25zLgorICovCit2b2lkCitmX3ByZWFsbG9jKHZvaWQpCit7CisJc3RydWN0IGdsdWUgKmc7CisJaW50IG47CisKKwluID0gZ2V0ZHRhYmxlc2l6ZSgpIC0gRk9QRU5fTUFYICsgMjA7CQkvKiAyMCBmb3Igc2xvcC4gKi8KKwlmb3IgKGcgPSAmX19zZ2x1ZTsgKG4gLT0gZy0+bmlvYnMpID4gMCAmJiBnLT5uZXh0OyBnID0gZy0+bmV4dCkKKwkJLyogdm9pZCAqLzsKKwlpZiAobiA+IDApCisJCWctPm5leHQgPSBtb3JlZ2x1ZShuKTsKK30KKyNlbmRpZgorCisvKgorICogZXhpdCgpIGFuZCBhYm9ydCgpIGNhbGwgX2NsZWFudXAoKSB0aHJvdWdoIHRoZSBjYWxsYmFjayByZWdpc3RlcmVkCisgKiB3aXRoIF9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoKSwgc2V0IHdoZW5ldmVyIHdlIG9wZW4gb3IgYnVmZmVyIGEKKyAqIGZpbGUuIFRoaXMgY2hpY2FuZXJ5IGlzIGRvbmUgc28gdGhhdCBwcm9ncmFtcyB0aGF0IGRvIG5vdCB1c2Ugc3RkaW8KKyAqIG5lZWQgbm90IGxpbmsgaXQgYWxsIGluLgorICoKKyAqIFRoZSBuYW1lIGBfY2xlYW51cCcgaXMsIGFsYXMsIGZhaXJseSB3ZWxsIGtub3duIG91dHNpZGUgc3RkaW8uCisgKi8KK3ZvaWQKK19jbGVhbnVwKHZvaWQpCit7CisJLyogKHZvaWQpIF9md2FsayhmY2xvc2UpOyAqLworCSh2b2lkKSBfZndhbGsoX19zZmx1c2gpOwkJLyogYGNoZWF0aW5nJyAqLworfQorCisvKgorICogX19zaW5pdCgpIGlzIGNhbGxlZCB3aGVuZXZlciBzdGRpbydzIGludGVybmFsIHZhcmlhYmxlcyBtdXN0IGJlIHNldCB1cC4KKyAqLwordm9pZAorX19zaW5pdCh2b2lkKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IEZPUEVOX01BWCAtIDM7IGkrKykgeworCQlfRklMRUVYVF9TRVRVUCh1c3VhbCtpLCB1c3VhbGV4dCtpKTsKKwl9CisJLyogbWFrZSBzdXJlIHdlIGNsZWFuIHVwIG9uIGV4aXQgKi8KKwlfX2F0ZXhpdF9yZWdpc3Rlcl9jbGVhbnVwKF9jbGVhbnVwKTsgLyogY29uc2VydmF0aXZlICovCisJX19zZGlkaW5pdCA9IDE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZsYWdzLmMgYi9saWJjL3N0ZGlvL2ZsYWdzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGRlMDQ0NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmxhZ3MuYwpAQCAtMCwwICsxLDgyIEBACisvKgkkT3BlbkJTRDogZmxhZ3MuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvZmlsZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCisvKgorICogUmV0dXJuIHRoZSAoc3RkaW8pIGZsYWdzIGZvciBhIGdpdmVuIG1vZGUuICBTdG9yZSB0aGUgZmxhZ3MKKyAqIHRvIGJlIHBhc3NlZCB0byBhbiBvcGVuKCkgc3lzY2FsbCB0aHJvdWdoICpvcHRyLgorICogUmV0dXJuIDAgb24gZXJyb3IuCisgKi8KK2ludAorX19zZmxhZ3MoY29uc3QgY2hhciAqbW9kZSwgaW50ICpvcHRyKQoreworCWludCByZXQsIG0sIG87CisKKwlzd2l0Y2ggKCptb2RlKyspIHsKKworCWNhc2UgJ3InOgkvKiBvcGVuIGZvciByZWFkaW5nICovCisJCXJldCA9IF9fU1JEOworCQltID0gT19SRE9OTFk7CisJCW8gPSAwOworCQlicmVhazsKKworCWNhc2UgJ3cnOgkvKiBvcGVuIGZvciB3cml0aW5nICovCisJCXJldCA9IF9fU1dSOworCQltID0gT19XUk9OTFk7CisJCW8gPSBPX0NSRUFUIHwgT19UUlVOQzsKKwkJYnJlYWs7CisKKwljYXNlICdhJzoJLyogb3BlbiBmb3IgYXBwZW5kaW5nICovCisJCXJldCA9IF9fU1dSOworCQltID0gT19XUk9OTFk7CisJCW8gPSBPX0NSRUFUIHwgT19BUFBFTkQ7CisJCWJyZWFrOworCisJZGVmYXVsdDoJLyogaWxsZWdhbCBtb2RlICovCisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKDApOworCX0KKworCS8qIFtyd2FdXCsgb3IgW3J3YV1iXCsgbWVhbnMgcmVhZCBhbmQgd3JpdGUgKi8KKwlpZiAoKm1vZGUgPT0gJysnIHx8ICgqbW9kZSA9PSAnYicgJiYgbW9kZVsxXSA9PSAnKycpKSB7CisJCXJldCA9IF9fU1JXOworCQltID0gT19SRFdSOworCX0KKwkqb3B0ciA9IG0gfCBvOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZmxvYXRpby5oIGIvbGliYy9zdGRpby9mbG9hdGlvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBmOTgwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZmxvYXRpby5oCkBAIC0wLDAgKzEsNDIgQEAKKy8qCSRPcGVuQlNEOiBmbG9hdGlvLmgsdiAxLjMgMjAwMy8wNi8wMiAyMDoxODozNyBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEZsb2F0aW5nIHBvaW50IHNjYW5mL3ByaW50ZiAoaW5wdXQvb3V0cHV0KSBkZWZpbml0aW9ucy4KKyAqLworCisvKiAxMS1iaXQgZXhwb25lbnQgKFZBWCBHIGZsb2F0aW5nIHBvaW50KSBpcyAzMDggZGVjaW1hbCBkaWdpdHMgKi8KKyNkZWZpbmUJTUFYRVhQCQkzMDgKKy8qIDEyOCBiaXQgZnJhY3Rpb24gdGFrZXMgdXAgMzkgZGVjaW1hbCBkaWdpdHM7IG1heCByZWFzb25hYmxlIHByZWNpc2lvbiAqLworI2RlZmluZQlNQVhGUkFDVAkzOQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mb3Blbi5jIGIvbGliYy9zdGRpby9mb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlMTVkYzMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZvcGVuLmMKQEAgLTAsMCArMSw3NiBAQAorLyoJJE9wZW5CU0Q6IGZvcGVuLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKworRklMRSAqCitmb3Blbihjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICptb2RlKQoreworCUZJTEUgKmZwOworCWludCBmOworCWludCBmbGFncywgb2ZsYWdzOworCisJaWYgKChmbGFncyA9IF9fc2ZsYWdzKG1vZGUsICZvZmxhZ3MpKSA9PSAwKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgoZnAgPSBfX3NmcCgpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCWlmICgoZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSkpIDwgMCkgeworCQlmcC0+X2ZsYWdzID0gMDsJCQkvKiByZWxlYXNlICovCisJCXJldHVybiAoTlVMTCk7CisgIH0KKwlmcC0+X2ZpbGUgPSBmOworCWZwLT5fZmxhZ3MgPSBmbGFnczsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCisJLyoKKwkgKiBXaGVuIG9wZW5pbmcgaW4gYXBwZW5kIG1vZGUsIGV2ZW4gdGhvdWdoIHdlIHVzZSBPX0FQUEVORCwKKwkgKiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGVuZCBzbyB0aGF0IGZ0ZWxsKCkgZ2V0cyB0aGUgcmlnaHQKKwkgKiBhbnN3ZXIuICBJZiB0aGUgdXNlciB0aGVuIGFsdGVycyB0aGUgc2VlayBwb2ludGVyLCBvcgorCSAqIHRoZSBmaWxlIGV4dGVuZHMsIHRoaXMgd2lsbCBmYWlsLCBidXQgdGhlcmUgaXMgbm90IG11Y2gKKwkgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcy4gIChXZSBjb3VsZCBzZXQgX19TQVBQIGFuZCBjaGVjayBpbgorCSAqIGZzZWVrIGFuZCBmdGVsbC4pCisJICovCisJaWYgKG9mbGFncyAmIE9fQVBQRU5EKQorCQkodm9pZCkgX19zc2Vlaygodm9pZCAqKWZwLCAoZnBvc190KTAsIFNFRUtfRU5EKTsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnByaW50Zi5jIGIvbGliYy9zdGRpby9mcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODA5ZDhkYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnByaW50Zi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBmcHJpbnRmLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50CitmcHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworICB2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoZnAsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnB1cmdlLmMgYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZhMDIxM2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZwdXJnZS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCSRPcGVuQlNEOiBmcHVyZ2UuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIGZwdXJnZTogbGlrZSBmZmx1c2gsIGJ1dCB3aXRob3V0IHdyaXRpbmcgYW55dGhpbmc6IGxlYXZlIHRoZQorICogZ2l2ZW4gRklMRSdzIGJ1ZmZlciBlbXB0eS4KKyAqLworaW50CitmcHVyZ2UoRklMRSAqZnApCit7CisJaWYgKCFmcC0+X2ZsYWdzKSB7CisJCWVycm5vID0gRUJBREY7CisJCXJldHVybihFT0YpOworCX0KKworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJV0NJT19GUkVFKGZwKTsKKwlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWZwLT5fciA9IDA7CisJZnAtPl93ID0gZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TTkJGKSA/IDAgOiBmcC0+X2JmLl9zaXplOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZwdXRjLmMgYi9saWJjL3N0ZGlvL2ZwdXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmE2ZTdiNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnB1dGMuYwpAQCAtMCwwICsxLDQ2IEBACisvKgkkT3BlbkJTRDogZnB1dGMuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50CitmcHV0YyhpbnQgYywgRklMRSAqZnApCit7CisJaWYgKGNhbnR3cml0ZShmcCkpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKwlyZXR1cm4gKHB1dGMoYywgZnApKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnB1dHMuYyBiL2xpYmMvc3RkaW8vZnB1dHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NDM0Y2E4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mcHV0cy5jCkBAIC0wLDAgKzEsNTQgQEAKKy8qCSRPcGVuQlNEOiBmcHV0cy5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSB0aGUgZ2l2ZW4gc3RyaW5nIHRvIHRoZSBnaXZlbiBmaWxlLgorICovCitpbnQKK2ZwdXRzKGNvbnN0IGNoYXIgKnMsIEZJTEUgKmZwKQoreworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilzOworCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHN0cmxlbihzKTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlyZXR1cm4gKF9fc2Z2d3JpdGUoZnAsICZ1aW8pKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnJlYWQuYyBiL2xpYmMvc3RkaW8vZnJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45Zjk5NzdmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mcmVhZC5jCkBAIC0wLDAgKzEsMTU4IEBACisvKgkkT3BlbkJTRDogZnJlYWQuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludAorbGZsdXNoKEZJTEUgKmZwKQoreworCisgICAgaWYgKChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NXUikpID09IChfX1NMQkZ8X19TV1IpKQorICAgICAgICByZXR1cm4gKF9fc2ZsdXNoKGZwKSk7CisgICAgcmV0dXJuICgwKTsKK30KKworc2l6ZV90CitmcmVhZCh2b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKmZwKQoreworCXNpemVfdCByZXNpZDsKKwljaGFyICpwOworCWludCByOworCXNpemVfdCB0b3RhbDsKKworCS8qCisJICogVGhlIEFOU0kgc3RhbmRhcmQgcmVxdWlyZXMgYSByZXR1cm4gdmFsdWUgb2YgMCBmb3IgYSBjb3VudAorCSAqIG9yIGEgc2l6ZSBvZiAwLiAgUGVjdWxpYXJpbHksIGl0IGltcG9zZXMgbm8gc3VjaCByZXF1aXJlbWVudHMKKwkgKiBvbiBmd3JpdGU7IGl0IG9ubHkgcmVxdWlyZXMgZnJlYWQgdG8gYmUgYnJva2VuLgorCSAqLworCWlmICgocmVzaWQgPSBjb3VudCAqIHNpemUpID09IDApCisJCXJldHVybiAoMCk7CisJaWYgKGZwLT5fciA8IDApCisJCWZwLT5fciA9IDA7CisJdG90YWwgPSByZXNpZDsKKwlwID0gYnVmOworCisjaWYgMSAgLyogQklPTklDOiBvcHRpbWl6ZSB1bmJ1ZmZlcmVkIHJlYWRzICovCisgICAgaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYgJiYgZnAtPl91ciA9PSAwKQorICAgIHsKKyAgICAgICAvKiB0aGUgZm9sbG93aW5nIGNvbWVzIG1haW5seSBmcm9tIF9fc3JlZmlsbCgpLCB3aXRoIHNsaWdodAorICAgICAgICAqIG1vZGlmaWNhdGlvbnMKKyAgICAgICAgKi8KKworICAgICAgICAvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCisgICAgICAgIGlmICghX19zZGlkaW5pdCkKKyAgICAgICAgICAgIF9fc2luaXQoKTsKKworICAgICAgICBmcC0+X3IgPSAwOyAgICAgLyogbGFyZ2VseSBhIGNvbnZlbmllbmNlIGZvciBjYWxsZXJzICovCisKKyAgICAgICAgLyogU3lzViBkb2VzIG5vdCBtYWtlIHRoaXMgdGVzdDsgdGFrZSBpdCBvdXQgZm9yIGNvbXBhdGliaWxpdHkgKi8KKyAgICAgICAgaWYgKGZwLT5fZmxhZ3MgJiBfX1NFT0YpCisgICAgICAgICAgICByZXR1cm4gKEVPRik7CisKKyAgICAgICAgLyogaWYgbm90IGFscmVhZHkgcmVhZGluZywgaGF2ZSB0byBiZSByZWFkaW5nIGFuZCB3cml0aW5nICovCisgICAgICAgIGlmICgoZnAtPl9mbGFncyAmIF9fU1JEKSA9PSAwKSB7CisgICAgICAgICAgICBpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgeworICAgICAgICAgICAgICAgIGVycm5vID0gRUJBREY7CisgICAgICAgICAgICAgICAgZnAtPl9mbGFncyB8PSBfX1NFUlI7CisgICAgICAgICAgICAgICAgcmV0dXJuIChFT0YpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgLyogc3dpdGNoIHRvIHJlYWRpbmcgKi8KKyAgICAgICAgICAgIGlmIChmcC0+X2ZsYWdzICYgX19TV1IpIHsKKyAgICAgICAgICAgICAgICBpZiAoX19zZmx1c2goZnApKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gKEVPRik7CisgICAgICAgICAgICAgICAgZnAtPl9mbGFncyAmPSB+X19TV1I7CisgICAgICAgICAgICAgICAgZnAtPl93ID0gMDsKKyAgICAgICAgICAgICAgICBmcC0+X2xiZnNpemUgPSAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZnAtPl9mbGFncyB8PSBfX1NSRDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgLyoKKyAgICAgICAgICAgICogV2Ugd2VyZSByZWFkaW5nLiAgSWYgdGhlcmUgaXMgYW4gdW5nZXRjIGJ1ZmZlciwKKyAgICAgICAgICAgICogd2UgbXVzdCBoYXZlIGJlZW4gcmVhZGluZyBmcm9tIHRoYXQuICBEcm9wIGl0LAorICAgICAgICAgICAgKiByZXN0b3JpbmcgdGhlIHByZXZpb3VzIGJ1ZmZlciAoaWYgYW55KS4gIElmIHRoZXJlCisgICAgICAgICAgICAqIGlzIGFueXRoaW5nIGluIHRoYXQgYnVmZmVyLCByZXR1cm4uCisgICAgICAgICAgICAqLworICAgICAgICAgICAgaWYgKEhBU1VCKGZwKSkgeworICAgICAgICAgICAgICAgIEZSRUVVQihmcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgIC8qCisgICAgICAgICogQmVmb3JlIHJlYWRpbmcgZnJvbSBhIGxpbmUgYnVmZmVyZWQgb3IgdW5idWZmZXJlZCBmaWxlLAorICAgICAgICAqIGZsdXNoIGFsbCBsaW5lIGJ1ZmZlcmVkIG91dHB1dCBmaWxlcywgcGVyIHRoZSBBTlNJIEMKKyAgICAgICAgKiBzdGFuZGFyZC4KKyAgICAgICAgKi8KKworICAgICAgICBpZiAoZnAtPl9mbGFncyAmIChfX1NMQkZ8X19TTkJGKSkKKyAgICAgICAgICAgICh2b2lkKSBfZndhbGsobGZsdXNoKTsKKworICAgICAgICB3aGlsZSAocmVzaWQgPiAwKSB7CisgICAgICAgICAgICBpbnQgICBsZW4gPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIHAsIHJlc2lkICk7CisgICAgICAgICAgICBmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7CisgICAgICAgICAgICBpZiAobGVuIDw9IDApIHsKKyAgICAgICAgICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICAgICAgICAgIGZwLT5fZmxhZ3MgfD0gX19TRU9GOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuICgodG90YWwgLSByZXNpZCkgLyBzaXplKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHAgICAgICs9IGxlbjsKKyAgICAgICAgICAgIHJlc2lkIC09IGxlbjsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gKGNvdW50KTsKKyAgICB9CisgICAgZWxzZQorI2VuZGlmCisgICAgeworICAgICAgICB3aGlsZSAocmVzaWQgPiAoc2l6ZV90KShyID0gZnAtPl9yKSkgeworICAgICAgICAgICAgKHZvaWQpbWVtY3B5KCh2b2lkICopcCwgKHZvaWQgKilmcC0+X3AsIChzaXplX3Qpcik7CisgICAgICAgICAgICBmcC0+X3AgKz0gcjsKKyAgICAgICAgICAgIC8qIGZwLT5fciA9IDAgLi4uIGRvbmUgaW4gX19zcmVmaWxsICovCisgICAgICAgICAgICBwICs9IHI7CisgICAgICAgICAgICByZXNpZCAtPSByOworICAgICAgICAgICAgaWYgKF9fc3JlZmlsbChmcCkpIHsKKyAgICAgICAgICAgICAgICAvKiBubyBtb3JlIGlucHV0OiByZXR1cm4gcGFydGlhbCByZXN1bHQgKi8KKyAgICAgICAgICAgICAgICByZXR1cm4gKCh0b3RhbCAtIHJlc2lkKSAvIHNpemUpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisJKHZvaWQpbWVtY3B5KCh2b2lkICopcCwgKHZvaWQgKilmcC0+X3AsIHJlc2lkKTsKKwlmcC0+X3IgLT0gcmVzaWQ7CisJZnAtPl9wICs9IHJlc2lkOworCXJldHVybiAoY291bnQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mcmVvcGVuLmMgYi9saWJjL3N0ZGlvL2ZyZW9wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MTRkODEwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mcmVvcGVuLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCSRPcGVuQlNEOiBmcmVvcGVuLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiAKKyAqIFJlLWRpcmVjdCBhbiBleGlzdGluZywgb3BlbiAocHJvYmFibHkpIGZpbGUgdG8gc29tZSBvdGhlciBmaWxlLiAKKyAqIEFOU0kgaXMgd3JpdHRlbiBzdWNoIHRoYXQgdGhlIG9yaWdpbmFsIGZpbGUgZ2V0cyBjbG9zZWQgaWYgYXQKKyAqIGFsbCBwb3NzaWJsZSwgbm8gbWF0dGVyIHdoYXQuCisgKi8KK0ZJTEUgKgorZnJlb3Blbihjb25zdCBjaGFyICpmaWxlLCBjb25zdCBjaGFyICptb2RlLCBGSUxFICpmcCkKK3sKKwlpbnQgZjsKKwlpbnQgZmxhZ3MsIGlzb3Blbiwgb2ZsYWdzLCBzdmVycm5vLCB3YW50ZmQ7CisKKwlpZiAoKGZsYWdzID0gX19zZmxhZ3MobW9kZSwgJm9mbGFncykpID09IDApIHsKKwkJKHZvaWQpIGZjbG9zZShmcCk7CisJCXJldHVybiAoTlVMTCk7CisJfQorCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwkvKgorCSAqIFRoZXJlIGFyZSBhY3R1YWxseSBwcm9ncmFtcyB0aGF0IGRlcGVuZCBvbiBiZWluZyBhYmxlIHRvICJmcmVvcGVuIgorCSAqIGRlc2NyaXB0b3JzIHRoYXQgd2VyZW4ndCBvcmlnaW5hbGx5IG9wZW4uICBLZWVwIHRoaXMgZnJvbSBicmVha2luZy4KKwkgKiBSZW1lbWJlciB3aGV0aGVyIHRoZSBzdHJlYW0gd2FzIG9wZW4gdG8gYmVnaW4gd2l0aCwgYW5kIHdoaWNoIGZpbGUKKwkgKiBkZXNjcmlwdG9yIChpZiBhbnkpIHdhcyBhc3NvY2lhdGVkIHdpdGggaXQuICBJZiBpdCB3YXMgYXR0YWNoZWQgdG8KKwkgKiBhIGRlc2NyaXB0b3IsIGRlZmVyIGNsb3NpbmcgaXQ7IGZyZW9wZW4oIi9kZXYvc3RkaW4iLCAiciIsIHN0ZGluKQorCSAqIHNob3VsZCB3b3JrLiAgVGhpcyBpcyB1bm5lY2Vzc2FyeSBpZiBpdCB3YXMgbm90IGEgVW5peCBmaWxlLgorCSAqLworCWlmIChmcC0+X2ZsYWdzID09IDApIHsKKwkJZnAtPl9mbGFncyA9IF9fU0VPRjsJLyogaG9sZCBvbiB0byBpdCAqLworCQlpc29wZW4gPSAwOworCQl3YW50ZmQgPSAtMTsKKwl9IGVsc2UgeworCQkvKiBmbHVzaCB0aGUgc3RyZWFtOyBBTlNJIGRvZXNuJ3QgcmVxdWlyZSB0aGlzLiAqLworCQlpZiAoZnAtPl9mbGFncyAmIF9fU1dSKQorCQkJKHZvaWQpIF9fc2ZsdXNoKGZwKTsKKwkJLyogaWYgY2xvc2UgaXMgTlVMTCwgY2xvc2luZyBpcyBhIG5vLW9wLCBoZW5jZSBwb2ludGxlc3MgKi8KKwkJaXNvcGVuID0gZnAtPl9jbG9zZSAhPSBOVUxMOworCQlpZiAoKHdhbnRmZCA9IGZwLT5fZmlsZSkgPCAwICYmIGlzb3BlbikgeworCQkJKHZvaWQpICgqZnAtPl9jbG9zZSkoZnAtPl9jb29raWUpOworCQkJaXNvcGVuID0gMDsKKwkJfQorCX0KKworCS8qIEdldCBhIG5ldyBkZXNjcmlwdG9yIHRvIHJlZmVyIHRvIHRoZSBuZXcgZmlsZS4gKi8KKwlmID0gb3BlbihmaWxlLCBvZmxhZ3MsIERFRkZJTEVNT0RFKTsKKwlpZiAoZiA8IDAgJiYgaXNvcGVuKSB7CisJCS8qIElmIG91dCBvZiBmZCdzIGNsb3NlIHRoZSBvbGQgb25lIGFuZCB0cnkgYWdhaW4uICovCisJCWlmIChlcnJubyA9PSBFTkZJTEUgfHwgZXJybm8gPT0gRU1GSUxFKSB7CisJCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7CisJCQlpc29wZW4gPSAwOworCQkJZiA9IG9wZW4oZmlsZSwgb2ZsYWdzLCBERUZGSUxFTU9ERSk7CisJCX0KKwl9CisJc3ZlcnJubyA9IGVycm5vOworCisJLyoKKwkgKiBGaW5pc2ggY2xvc2luZyBmcC4gIEV2ZW4gaWYgdGhlIG9wZW4gc3VjY2VlZGVkIGFib3ZlLCB3ZSBjYW5ub3QKKwkgKiBrZWVwIGZwLT5fYmFzZTogaXQgbWF5IGJlIHRoZSB3cm9uZyBzaXplLiAgVGhpcyBsb3NlcyB0aGUgZWZmZWN0CisJICogb2YgYW55IHNldGJ1ZmZlciBjYWxscywgYnV0IHN0ZGlvIGhhcyBhbHdheXMgZG9uZSB0aGlzIGJlZm9yZS4KKwkgKi8KKwlpZiAoaXNvcGVuICYmIGYgIT0gd2FudGZkKQorCQkodm9pZCkgKCpmcC0+X2Nsb3NlKShmcC0+X2Nvb2tpZSk7CisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NNQkYpCisJCWZyZWUoKGNoYXIgKilmcC0+X2JmLl9iYXNlKTsKKwlmcC0+X3cgPSAwOworCWZwLT5fciA9IDA7CisJZnAtPl9wID0gTlVMTDsKKwlmcC0+X2JmLl9iYXNlID0gTlVMTDsKKwlmcC0+X2JmLl9zaXplID0gMDsKKwlmcC0+X2xiZnNpemUgPSAwOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJX1VCKGZwKS5fc2l6ZSA9IDA7CisJV0NJT19GUkVFKGZwKTsKKwlpZiAoSEFTTEIoZnApKQorCQlGUkVFTEIoZnApOworCWZwLT5fbGIuX3NpemUgPSAwOworCisJaWYgKGYgPCAwKSB7CQkJLyogZGlkIG5vdCBnZXQgaXQgYWZ0ZXIgYWxsICovCisJCWZwLT5fZmxhZ3MgPSAwOwkJLyogc2V0IGl0IGZyZWUgKi8KKwkJZXJybm8gPSBzdmVycm5vOwkvKiByZXN0b3JlIGluIGNhc2UgX2Nsb3NlIGNsb2JiZXJlZCAqLworCQlyZXR1cm4gKE5VTEwpOworCX0KKworCS8qCisJICogSWYgcmVvcGVuaW5nIHNvbWV0aGluZyB0aGF0IHdhcyBvcGVuIGJlZm9yZSBvbiBhIHJlYWwgZmlsZSwgdHJ5CisJICogdG8gbWFpbnRhaW4gdGhlIGRlc2NyaXB0b3IuICBWYXJpb3VzIEMgbGlicmFyeSByb3V0aW5lcyAocGVycm9yKQorCSAqIGFzc3VtZSBzdGRlcnIgaXMgYWx3YXlzIGZkIFNUREVSUl9GSUxFTk8sIGV2ZW4gaWYgYmVpbmcgZnJlb3BlbidkLgorCSAqLworCWlmICh3YW50ZmQgPj0gMCAmJiBmICE9IHdhbnRmZCkgeworCQlpZiAoZHVwMihmLCB3YW50ZmQpID49IDApIHsKKwkJCSh2b2lkKSBjbG9zZShmKTsKKwkJCWYgPSB3YW50ZmQ7CisJCX0KKwl9CisKKwlmcC0+X2ZsYWdzID0gZmxhZ3M7CisJZnAtPl9maWxlID0gZjsKKwlmcC0+X2Nvb2tpZSA9IGZwOworCWZwLT5fcmVhZCA9IF9fc3JlYWQ7CisJZnAtPl93cml0ZSA9IF9fc3dyaXRlOworCWZwLT5fc2VlayA9IF9fc3NlZWs7CisJZnAtPl9jbG9zZSA9IF9fc2Nsb3NlOworCisJLyoKKwkgKiBXaGVuIG9wZW5pbmcgaW4gYXBwZW5kIG1vZGUsIGV2ZW4gdGhvdWdoIHdlIHVzZSBPX0FQUEVORCwKKwkgKiB3ZSBuZWVkIHRvIHNlZWsgdG8gdGhlIGVuZCBzbyB0aGF0IGZ0ZWxsKCkgZ2V0cyB0aGUgcmlnaHQKKwkgKiBhbnN3ZXIuICBJZiB0aGUgdXNlciB0aGVuIGFsdGVycyB0aGUgc2VlayBwb2ludGVyLCBvcgorCSAqIHRoZSBmaWxlIGV4dGVuZHMsIHRoaXMgd2lsbCBmYWlsLCBidXQgdGhlcmUgaXMgbm90IG11Y2gKKwkgKiB3ZSBjYW4gZG8gYWJvdXQgdGhpcy4gIChXZSBjb3VsZCBzZXQgX19TQVBQIGFuZCBjaGVjayBpbgorCSAqIGZzZWVrIGFuZCBmdGVsbC4pCisJICovCisJaWYgKG9mbGFncyAmIE9fQVBQRU5EKQorCQkodm9pZCkgX19zc2Vlaygodm9pZCAqKWZwLCAoZnBvc190KTAsIFNFRUtfRU5EKTsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnNjYW5mLmMgYi9saWJjL3N0ZGlvL2ZzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmM2ZjZWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2ZzY2FuZi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBmc2NhbmYuYyx2IDEuOSAyMDA1LzEwLzEwIDE3OjM3OjQ0IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitpbnQKK2ZzY2FuZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKwl2YV9saXN0IGFwOworCisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZzY2FuZihmcCwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2ZzZWVrLmMgYi9saWJjL3N0ZGlvL2ZzZWVrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGFjMjVlMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnNlZWsuYwpAQCAtMCwwICsxLDI1MiBAQAorLyoJJE9wZW5CU0Q6IGZzZWVrLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisjZGVmaW5lCVBPU19FUlIJKC0oZnBvc190KTEpCisKKy8qCisgKiBTZWVrIHRoZSBnaXZlbiBmaWxlIHRvIHRoZSBnaXZlbiBvZmZzZXQuCisgKiBgV2hlbmNlJyBtdXN0IGJlIG9uZSBvZiB0aGUgdGhyZWUgU0VFS18qIG1hY3Jvcy4KKyAqLworaW50Citmc2Vla28oRklMRSAqZnAsIG9mZl90IG9mZnNldCwgaW50IHdoZW5jZSkKK3sKKwlmcG9zX3QgKCpzZWVrZm4pKHZvaWQgKiwgZnBvc190LCBpbnQpOworCWZwb3NfdCB0YXJnZXQsIGN1cm9mZjsKKwlzaXplX3QgbjsKKwlzdHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgaGF2ZXBvczsKKworCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCS8qCisJICogSGF2ZSB0byBiZSBhYmxlIHRvIHNlZWsuCisJICovCisJaWYgKChzZWVrZm4gPSBmcC0+X3NlZWspID09IE5VTEwpIHsKKwkJZXJybm8gPSBFU1BJUEU7CQkJLyogaGlzdG9yaWMgcHJhY3RpY2UgKi8KKwkJcmV0dXJuIChFT0YpOworCX0KKworCS8qCisJICogQ2hhbmdlIGFueSBTRUVLX0NVUiB0byBTRUVLX1NFVCwgYW5kIGNoZWNrIGB3aGVuY2UnIGFyZ3VtZW50LgorCSAqIEFmdGVyIHRoaXMsIHdoZW5jZSBpcyBlaXRoZXIgU0VFS19TRVQgb3IgU0VFS19FTkQuCisJICovCisJc3dpdGNoICh3aGVuY2UpIHsKKworCWNhc2UgU0VFS19DVVI6CisJCS8qCisJCSAqIEluIG9yZGVyIHRvIHNlZWsgcmVsYXRpdmUgdG8gdGhlIGN1cnJlbnQgc3RyZWFtIG9mZnNldCwKKwkJICogd2UgaGF2ZSB0byBmaXJzdCBmaW5kIHRoZSBjdXJyZW50IHN0cmVhbSBvZmZzZXQgYSBsYQorCQkgKiBmdGVsbCAoc2VlIGZ0ZWxsIGZvciBkZXRhaWxzKS4KKwkJICovCisJCV9fc2ZsdXNoKGZwKTsJLyogbWF5IGFkanVzdCBzZWVrIG9mZnNldCBvbiBhcHBlbmQgc3RyZWFtICovCisJCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7CisJCWVsc2UgeworCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJCWlmIChjdXJvZmYgPT0gKGZwb3NfdCktMSkKKwkJCQlyZXR1cm4gKEVPRik7CisJCX0KKwkJaWYgKGZwLT5fZmxhZ3MgJiBfX1NSRCkgeworCQkJY3Vyb2ZmIC09IGZwLT5fcjsKKwkJCWlmIChIQVNVQihmcCkpCisJCQkJY3Vyb2ZmIC09IGZwLT5fdXI7CisJCX0gZWxzZSBpZiAoZnAtPl9mbGFncyAmIF9fU1dSICYmIGZwLT5fcCAhPSBOVUxMKQorCQkJY3Vyb2ZmICs9IGZwLT5fcCAtIGZwLT5fYmYuX2Jhc2U7CisKKwkJb2Zmc2V0ICs9IGN1cm9mZjsKKwkJd2hlbmNlID0gU0VFS19TRVQ7CisJCWhhdmVwb3MgPSAxOworCQlicmVhazsKKworCWNhc2UgU0VFS19TRVQ6CisJY2FzZSBTRUVLX0VORDoKKwkJY3Vyb2ZmID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIHF1aWV0ICovCisJCWhhdmVwb3MgPSAwOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWVycm5vID0gRUlOVkFMOworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyoKKwkgKiBDYW4gb25seSBvcHRpbWlzZSBpZjoKKwkgKglyZWFkaW5nIChhbmQgbm90IHJlYWRpbmctYW5kLXdyaXRpbmcpOworCSAqCW5vdCB1bmJ1ZmZlcmVkOyBhbmQKKwkgKgl0aGlzIGlzIGEgYHJlZ3VsYXInIFVuaXggZmlsZSAoYW5kIGhlbmNlIHNlZWtmbj09X19zc2VlaykuCisJICogV2UgbXVzdCBjaGVjayBfX05CRiBmaXJzdCwgYmVjYXVzZSBpdCBpcyBwb3NzaWJsZSB0byBoYXZlIF9fTkJGCisJICogYW5kIF9fU09QVCBib3RoIHNldC4KKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSA9PSBOVUxMKQorCQlfX3NtYWtlYnVmKGZwKTsKKwlpZiAoZnAtPl9mbGFncyAmIChfX1NXUiB8IF9fU1JXIHwgX19TTkJGIHwgX19TTlBUKSkKKwkJZ290byBkdW1iOworCWlmICgoZnAtPl9mbGFncyAmIF9fU09QVCkgPT0gMCkgeworCQlpZiAoc2Vla2ZuICE9IF9fc3NlZWsgfHwKKwkJICAgIGZwLT5fZmlsZSA8IDAgfHwgZnN0YXQoZnAtPl9maWxlLCAmc3QpIHx8CisJCSAgICAoc3Quc3RfbW9kZSAmIFNfSUZNVCkgIT0gU19JRlJFRykgeworCQkJZnAtPl9mbGFncyB8PSBfX1NOUFQ7CisJCQlnb3RvIGR1bWI7CisJCX0KKwkJZnAtPl9ibGtzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwkJZnAtPl9mbGFncyB8PSBfX1NPUFQ7CisJfQorCisJLyoKKwkgKiBXZSBhcmUgcmVhZGluZzsgd2UgY2FuIHRyeSB0byBvcHRpbWlzZS4KKwkgKiBGaWd1cmUgb3V0IHdoZXJlIHdlIGFyZSBnb2luZyBhbmQgd2hlcmUgd2UgYXJlIG5vdy4KKwkgKi8KKwlpZiAod2hlbmNlID09IFNFRUtfU0VUKQorCQl0YXJnZXQgPSBvZmZzZXQ7CisJZWxzZSB7CisJCWlmIChmc3RhdChmcC0+X2ZpbGUsICZzdCkpCisJCQlnb3RvIGR1bWI7CisJCXRhcmdldCA9IHN0LnN0X3NpemUgKyBvZmZzZXQ7CisJfQorCisJaWYgKCFoYXZlcG9zKSB7CisJCWlmIChmcC0+X2ZsYWdzICYgX19TT0ZGKQorCQkJY3Vyb2ZmID0gZnAtPl9vZmZzZXQ7CisJCWVsc2UgeworCQkJY3Vyb2ZmID0gKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KTAsIFNFRUtfQ1VSKTsKKwkJCWlmIChjdXJvZmYgPT0gUE9TX0VSUikKKwkJCQlnb3RvIGR1bWI7CisJCX0KKwkJY3Vyb2ZmIC09IGZwLT5fcjsKKwkJaWYgKEhBU1VCKGZwKSkKKwkJCWN1cm9mZiAtPSBmcC0+X3VyOworCX0KKworCS8qCisJICogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIGJ5dGVzIGluIHRoZSBpbnB1dCBidWZmZXIgKHByZXRlbmRpbmcKKwkgKiB0aGF0IGFueSB1bmdldGMoKSBpbnB1dCBoYXMgYmVlbiBkaXNjYXJkZWQpLiAgQWRqdXN0IGN1cnJlbnQKKwkgKiBvZmZzZXQgYmFja3dhcmRzIGJ5IHRoaXMgY291bnQgc28gdGhhdCBpdCByZXByZXNlbnRzIHRoZQorCSAqIGZpbGUgb2Zmc2V0IGZvciB0aGUgZmlyc3QgYnl0ZSBpbiB0aGUgY3VycmVudCBpbnB1dCBidWZmZXIuCisJICovCisJaWYgKEhBU1VCKGZwKSkgeworCQljdXJvZmYgKz0gZnAtPl9yOwkvKiBraWxsIG9mZiB1bmdldGMgKi8KKwkJbiA9IGZwLT5fdXAgLSBmcC0+X2JmLl9iYXNlOworCQljdXJvZmYgLT0gbjsKKwkJbiArPSBmcC0+X3VyOworCX0gZWxzZSB7CisJCW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCQljdXJvZmYgLT0gbjsKKwkJbiArPSBmcC0+X3I7CisJfQorCisJLyoKKwkgKiBJZiB0aGUgdGFyZ2V0IG9mZnNldCBpcyB3aXRoaW4gdGhlIGN1cnJlbnQgYnVmZmVyLAorCSAqIHNpbXBseSBhZGp1c3QgdGhlIHBvaW50ZXJzLCBjbGVhciBFT0YsIHVuZG8gdW5nZXRjKCksCisJICogYW5kIHJldHVybi4gIChJZiB0aGUgYnVmZmVyIHdhcyBtb2RpZmllZCwgd2UgaGF2ZSB0bworCSAqIHNraXAgdGhpczsgc2VlIGZnZXRsbi5jLikKKwkgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NNT0QpID09IDAgJiYKKwkgICAgdGFyZ2V0ID49IGN1cm9mZiAmJiB0YXJnZXQgPCAoZnBvc190KShjdXJvZmYgKyBuKSkgeworCQlpbnQgbyA9IHRhcmdldCAtIGN1cm9mZjsKKworCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlICsgbzsKKwkJZnAtPl9yID0gbiAtIG87CisJCWlmIChIQVNVQihmcCkpCisJCQlGUkVFVUIoZnApOworCQlmcC0+X2ZsYWdzICY9IH5fX1NFT0Y7CisJCXJldHVybiAoMCk7CisJfQorCisJLyoKKwkgKiBUaGUgcGxhY2Ugd2Ugd2FudCB0byBnZXQgdG8gaXMgbm90IHdpdGhpbiB0aGUgY3VycmVudCBidWZmZXIsCisJICogYnV0IHdlIGNhbiBzdGlsbCBiZSBraW5kIHRvIHRoZSBrZXJuZWwgY29weW91dCBtZWNoYW5pc20uCisJICogQnkgYWxpZ25pbmcgdGhlIGZpbGUgb2Zmc2V0IHRvIGEgYmxvY2sgYm91bmRhcnksIHdlIGNhbiBsZXQKKwkgKiB0aGUga2VybmVsIHVzZSB0aGUgVk0gaGFyZHdhcmUgdG8gbWFwIHBhZ2VzIGluc3RlYWQgb2YKKwkgKiBjb3B5aW5nIGJ5dGVzIGxhYm9yaW91c2x5LiAgVXNpbmcgYSBibG9jayBib3VuZGFyeSBhbHNvCisJICogZW5zdXJlcyB0aGF0IHdlIG9ubHkgcmVhZCBvbmUgYmxvY2ssIHJhdGhlciB0aGFuIHR3by4KKwkgKi8KKwljdXJvZmYgPSB0YXJnZXQgJiB+KGZwLT5fYmxrc2l6ZSAtIDEpOworCWlmICgoKnNlZWtmbikoZnAtPl9jb29raWUsIGN1cm9mZiwgU0VFS19TRVQpID09IFBPU19FUlIpCisJCWdvdG8gZHVtYjsKKwlmcC0+X3IgPSAwOworIAlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWlmIChIQVNVQihmcCkpCisJCUZSRUVVQihmcCk7CisJZnAtPl9mbGFncyAmPSB+X19TRU9GOworCW4gPSB0YXJnZXQgLSBjdXJvZmY7CisJaWYgKG4pIHsKKwkJaWYgKF9fc3JlZmlsbChmcCkgfHwgKHNpemVfdClmcC0+X3IgPCBuKQorCQkJZ290byBkdW1iOworCQlmcC0+X3AgKz0gbjsKKwkJZnAtPl9yIC09IG47CisJfQorCXJldHVybiAoMCk7CisKKwkvKgorCSAqIFdlIGdldCBoZXJlIGlmIHdlIGNhbm5vdCBvcHRpbWlzZSB0aGUgc2VlayAuLi4ganVzdAorCSAqIGRvIGl0LiAgQWxsb3cgdGhlIHNlZWsgZnVuY3Rpb24gdG8gY2hhbmdlIGZwLT5fYmYuX2Jhc2UuCisJICovCitkdW1iOgorCWlmIChfX3NmbHVzaChmcCkgfHwKKwkgICAgKCpzZWVrZm4pKGZwLT5fY29va2llLCAoZnBvc190KW9mZnNldCwgd2hlbmNlKSA9PSBQT1NfRVJSKSB7CisJCXJldHVybiAoRU9GKTsKKwl9CisJLyogc3VjY2VzczogY2xlYXIgRU9GIGluZGljYXRvciBhbmQgZGlzY2FyZCB1bmdldGMoKSBkYXRhICovCisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCWZwLT5fciA9IDA7CisJLyogZnAtPl93ID0gMDsgKi8JLyogdW5uZWNlc3NhcnkgKEkgdGhpbmsuLi4pICovCisJZnAtPl9mbGFncyAmPSB+X19TRU9GOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBmc2VlaygpJ3Mgb2Zmc2V0IGlzIGEgbG9uZyBhbmQgc2l6ZW9mKG9mZl90KSAhPSBzaXplb2YobG9uZykgb24gYWxsIGFyY2hlcworICovCisjaWYgZGVmaW5lZChfX2FscGhhX18pICYmIGRlZmluZWQoX19pbmRyX3JlZmVyZW5jZSkKK19faW5kcl9yZWZlcmVuY2UoZnNlZWtvLCBmc2Vlayk7CisjZWxzZQoraW50Citmc2VlayhGSUxFICpmcCwgbG9uZyBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJb2ZmX3Qgb2ZmID0gb2Zmc2V0OworCisJcmV0dXJuKGZzZWVrbyhmcCwgb2ZmLCB3aGVuY2UpKTsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9mc2V0cG9zLmMgYi9saWJjL3N0ZGlvL2ZzZXRwb3MuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjI0ZmU1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9mc2V0cG9zLmMKQEAgLTAsMCArMSw0MyBAQAorLyoJJE9wZW5CU0Q6IGZzZXRwb3MuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogZnNldHBvczogbGlrZSBmc2Vla28uCisgKi8KK2ludAorZnNldHBvcyhGSUxFICppb3AsIGNvbnN0IGZwb3NfdCAqcG9zKQoreworCXJldHVybiAoZnNlZWtvKGlvcCwgKG9mZl90KSpwb3MsIFNFRUtfU0VUKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2Z0ZWxsLmMgYi9saWJjL3N0ZGlvL2Z0ZWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjdkNDQ5ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnRlbGwuYwpAQCAtMCwwICsxLDk3IEBACisvKgkkT3BlbkJTRDogZnRlbGwuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIGZ0ZWxsbzogcmV0dXJuIGN1cnJlbnQgb2Zmc2V0LgorICovCitvZmZfdAorZnRlbGxvKEZJTEUgKmZwKQoreworCWZwb3NfdCBwb3M7CisKKwlpZiAoZnAtPl9zZWVrID09IE5VTEwpIHsKKwkJZXJybm8gPSBFU1BJUEU7CQkJLyogaGlzdG9yaWMgcHJhY3RpY2UgKi8KKwkJcmV0dXJuICgob2ZmX3QpLTEpOworCX0KKworCS8qCisJICogRmluZCBvZmZzZXQgb2YgdW5kZXJseWluZyBJL08gb2JqZWN0LCB0aGVuCisJICogYWRqdXN0IGZvciBidWZmZXJlZCBieXRlcy4KKwkgKi8KKwlfX3NmbHVzaChmcCk7CQkvKiBtYXkgYWRqdXN0IHNlZWsgb2Zmc2V0IG9uIGFwcGVuZCBzdHJlYW0gKi8KKwlpZiAoZnAtPl9mbGFncyAmIF9fU09GRikKKwkJcG9zID0gZnAtPl9vZmZzZXQ7CisJZWxzZSB7CisJCXBvcyA9ICgqZnAtPl9zZWVrKShmcC0+X2Nvb2tpZSwgKGZwb3NfdCkwLCBTRUVLX0NVUik7CisJCWlmIChwb3MgPT0gLTFMKQorCQkJcmV0dXJuIChwb3MpOworCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU1JEKSB7CisJCS8qCisJCSAqIFJlYWRpbmcuICBBbnkgdW5yZWFkIGNoYXJhY3RlcnMgKGluY2x1ZGluZworCQkgKiB0aG9zZSBmcm9tIHVuZ2V0YykgY2F1c2UgdGhlIHBvc2l0aW9uIHRvIGJlCisJCSAqIHNtYWxsZXIgdGhhbiB0aGF0IGluIHRoZSB1bmRlcmx5aW5nIG9iamVjdC4KKwkJICovCisJCXBvcyAtPSBmcC0+X3I7CisJCWlmIChIQVNVQihmcCkpCisJCQlwb3MgLT0gZnAtPl91cjsKKwl9IGVsc2UgaWYgKGZwLT5fZmxhZ3MgJiBfX1NXUiAmJiBmcC0+X3AgIT0gTlVMTCkgeworCQkvKgorCQkgKiBXcml0aW5nLiAgQW55IGJ1ZmZlcmVkIGNoYXJhY3RlcnMgY2F1c2UgdGhlCisJCSAqIHBvc2l0aW9uIHRvIGJlIGdyZWF0ZXIgdGhhbiB0aGF0IGluIHRoZQorCQkgKiB1bmRlcmx5aW5nIG9iamVjdC4KKwkJICovCisJCXBvcyArPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCX0KKwlyZXR1cm4gKHBvcyk7Cit9CisKKy8qCisgKiBmdGVsbCgpIHJldHVybnMgYSBsb25nIGFuZCBzaXplb2Yob2ZmX3QpICE9IHNpemVvZihsb25nKSBvbiBhbGwgYXJjaGVzCisgKi8KKyNpZiBkZWZpbmVkKF9fYWxwaGFfXykgJiYgZGVmaW5lZChfX2luZHJfcmVmZXJlbmNlKQorX19pbmRyX3JlZmVyZW5jZShmdGVsbG8sIGZ0ZWxsKTsKKyNlbHNlCitsb25nCitmdGVsbChGSUxFICpmcCkKK3sKKwlsb25nIHBvczsKKworCXBvcyA9IChsb25nKWZ0ZWxsbyhmcCk7CisJcmV0dXJuKHBvcyk7Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnVub3Blbi5jIGIvbGliYy9zdGRpby9mdW5vcGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg1ZWU5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnVub3Blbi5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCSRPcGVuQlNEOiBmdW5vcGVuLmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK0ZJTEUgKgorZnVub3Blbihjb25zdCB2b2lkICpjb29raWUsIGludCAoKnJlYWRmbikodm9pZCAqLCBjaGFyICosIGludCksCisJaW50ICgqd3JpdGVmbikodm9pZCAqLCBjb25zdCBjaGFyICosIGludCksCisJZnBvc190ICgqc2Vla2ZuKSh2b2lkICosIGZwb3NfdCwgaW50KSwgaW50ICgqY2xvc2Vmbikodm9pZCAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgZmxhZ3M7CisKKwlpZiAocmVhZGZuID09IE5VTEwpIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkgewkJLyogaWxsZWdhbCAqLworCQkJZXJybm8gPSBFSU5WQUw7CisJCQlyZXR1cm4gKE5VTEwpOworCQl9IGVsc2UKKwkJCWZsYWdzID0gX19TV1I7CQkvKiB3cml0ZSBvbmx5ICovCisJfSBlbHNlIHsKKwkJaWYgKHdyaXRlZm4gPT0gTlVMTCkKKwkJCWZsYWdzID0gX19TUkQ7CQkvKiByZWFkIG9ubHkgKi8KKwkJZWxzZQorCQkJZmxhZ3MgPSBfX1NSVzsJCS8qIHJlYWQtd3JpdGUgKi8KKwl9CisJaWYgKChmcCA9IF9fc2ZwKCkpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fZmlsZSA9IC0xOworCWZwLT5fY29va2llID0gKHZvaWQgKiljb29raWU7CQkvKiBTQUZFOiBjb29raWUgbm90IG1vZGlmaWVkICovCisJZnAtPl9yZWFkID0gcmVhZGZuOworCWZwLT5fd3JpdGUgPSB3cml0ZWZuOworCWZwLT5fc2VlayA9IHNlZWtmbjsKKwlmcC0+X2Nsb3NlID0gY2xvc2VmbjsKKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5jIGIvbGliYy9zdGRpby9mdndyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmJlYTY3MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnZ3cml0ZS5jCkBAIC0wLDAgKzEsMjA4IEBACisvKgkkT3BlbkJTRDogZnZ3cml0ZS5jLHYgMS4xNCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSBzb21lIG1lbW9yeSByZWdpb25zLiAgUmV0dXJuIHplcm8gb24gc3VjY2VzcywgRU9GIG9uIGVycm9yLgorICoKKyAqIFRoaXMgcm91dGluZSBpcyBsYXJnZSBhbmQgdW5zaWdodGx5LCBidXQgbW9zdCBvZiB0aGUgdWdsaW5lc3MgZHVlCisgKiB0byB0aGUgdGhyZWUgZGlmZmVyZW50IGtpbmRzIG9mIG91dHB1dCBidWZmZXJpbmcgaXMgaGFuZGxlZCBoZXJlLgorICovCitpbnQKK19fc2Z2d3JpdGUoRklMRSAqZnAsIHN0cnVjdCBfX3N1aW8gKnVpbykKK3sKKwlzaXplX3QgbGVuOworCWNoYXIgKnA7CisJc3RydWN0IF9fc2lvdiAqaW92OworCWludCB3LCBzOworCWNoYXIgKm5sOworCWludCBubGtub3duLCBubGRpc3Q7CisKKwlpZiAoKGxlbiA9IHVpby0+dWlvX3Jlc2lkKSA9PSAwKQorCQlyZXR1cm4gKDApOworCS8qIG1ha2Ugc3VyZSB3ZSBjYW4gd3JpdGUgKi8KKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCisjZGVmaW5lCU1JTihhLCBiKSAoKGEpIDwgKGIpID8gKGEpIDogKGIpKQorI2RlZmluZQlDT1BZKG4pCSAgKHZvaWQpbWVtY3B5KCh2b2lkICopZnAtPl9wLCAodm9pZCAqKXAsIChzaXplX3QpKG4pKQorCisJaW92ID0gdWlvLT51aW9faW92OworCXAgPSBpb3YtPmlvdl9iYXNlOworCWxlbiA9IGlvdi0+aW92X2xlbjsKKwlpb3YrKzsKKyNkZWZpbmUgR0VUSU9WKGV4dHJhX3dvcmspIFwKKwl3aGlsZSAobGVuID09IDApIHsgXAorCQlleHRyYV93b3JrOyBcCisJCXAgPSBpb3YtPmlvdl9iYXNlOyBcCisJCWxlbiA9IGlvdi0+aW92X2xlbjsgXAorCQlpb3YrKzsgXAorCX0KKwlpZiAoZnAtPl9mbGFncyAmIF9fU05CRikgeworCQkvKgorCQkgKiBVbmJ1ZmZlcmVkOiB3cml0ZSB1cCB0byBCVUZTSVogYnl0ZXMgYXQgYSB0aW1lLgorCQkgKi8KKwkJZG8geworCQkJR0VUSU9WKDspOworI2lmIDEgIC8qIEJJT05JQzogZG9uJ3QgbGltaXQgdG8gMUtCIHdyaXRlcyAqLworICAgICAgICAgICAgdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIGxlbik7CisjZWxzZQorCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIE1JTihsZW4sIEJVRlNJWjIpKTsKKyNlbmRpZgorCQkJaWYgKHcgPD0gMCkKKwkJCQlnb3RvIGVycjsKKwkJCXAgKz0gdzsKKwkJCWxlbiAtPSB3OworCQl9IHdoaWxlICgodWlvLT51aW9fcmVzaWQgLT0gdykgIT0gMCk7CisJfSBlbHNlIGlmICgoZnAtPl9mbGFncyAmIF9fU0xCRikgPT0gMCkgeworCQkvKgorCQkgKiBGdWxseSBidWZmZXJlZDogZmlsbCBwYXJ0aWFsbHkgZnVsbCBidWZmZXIsIGlmIGFueSwKKwkJICogYW5kIHRoZW4gZmx1c2guICBJZiB0aGVyZSBpcyBubyBwYXJ0aWFsIGJ1ZmZlciwgd3JpdGUKKwkJICogb25lIF9iZi5fc2l6ZSBieXRlIGNodW5rIGRpcmVjdGx5ICh3aXRob3V0IGNvcHlpbmcpLgorCQkgKgorCQkgKiBTdHJpbmcgb3V0cHV0IGlzIGEgc3BlY2lhbCBjYXNlOiB3cml0ZSBhcyBtYW55IGJ5dGVzCisJCSAqIGFzIGZpdCwgYnV0IHByZXRlbmQgd2Ugd3JvdGUgZXZlcnl0aGluZy4gIFRoaXMgbWFrZXMKKwkJICogc25wcmludGYoKSByZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyBuZWVkZWQsIHJhdGhlcgorCQkgKiB0aGFuIHRoZSBudW1iZXIgdXNlZCwgYW5kIGF2b2lkcyBpdHMgd3JpdGUgZnVuY3Rpb24KKwkJICogKHNvIHRoYXQgdGhlIHdyaXRlIGZ1bmN0aW9uIGNhbiBiZSBpbnZhbGlkKS4KKwkJICovCisJCWRvIHsKKwkJCUdFVElPVig7KTsKKwkJCWlmICgoZnAtPl9mbGFncyAmIChfX1NBTEMgfCBfX1NTVFIpKSA9PQorCQkJICAgIChfX1NBTEMgfCBfX1NTVFIpICYmIGZwLT5fdyA8IChpbnQpbGVuKSB7CisJCQkJc2l6ZV90IGJsZW4gPSBmcC0+X3AgLSBmcC0+X2JmLl9iYXNlOworCQkJCXVuc2lnbmVkIGNoYXIgKl9iYXNlOworCQkJCWludCBfc2l6ZTsKKworCQkJCS8qIEFsbG9jYXRlIHNwYWNlIGV4cG9uZW50aWFsbHkuICovCisJCQkJX3NpemUgPSBmcC0+X2JmLl9zaXplOworCQkJCWRvIHsKKwkJCQkJX3NpemUgPSAoX3NpemUgPDwgMSkgKyAxOworCQkJCX0gd2hpbGUgKF9zaXplIDwgKGludCkoYmxlbiArIGxlbikpOworCQkJCV9iYXNlID0gcmVhbGxvYyhmcC0+X2JmLl9iYXNlLCBfc2l6ZSArIDEpOworCQkJCWlmIChfYmFzZSA9PSBOVUxMKQorCQkJCQlnb3RvIGVycjsKKwkJCQlmcC0+X3cgKz0gX3NpemUgLSBmcC0+X2JmLl9zaXplOworCQkJCWZwLT5fYmYuX2Jhc2UgPSBfYmFzZTsKKwkJCQlmcC0+X2JmLl9zaXplID0gX3NpemU7CisJCQkJZnAtPl9wID0gX2Jhc2UgKyBibGVuOworCQkJfQorCQkJdyA9IGZwLT5fdzsKKwkJCWlmIChmcC0+X2ZsYWdzICYgX19TU1RSKSB7CisJCQkJaWYgKChpbnQpbGVuIDwgdykKKwkJCQkJdyA9IGxlbjsKKwkJCQlDT1BZKHcpOwkvKiBjb3B5IE1JTihmcC0+X3csbGVuKSwgKi8KKwkJCQlmcC0+X3cgLT0gdzsKKwkJCQlmcC0+X3AgKz0gdzsKKwkJCQl3ID0gbGVuOwkvKiBidXQgcHJldGVuZCBjb3BpZWQgYWxsICovCisJCQl9IGVsc2UgaWYgKGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYgKGludClsZW4gPiB3KSB7CisJCQkJLyogZmlsbCBhbmQgZmx1c2ggKi8KKwkJCQlDT1BZKHcpOworCQkJCS8qIGZwLT5fdyAtPSB3OyAqLyAvKiB1bm5lZWRlZCAqLworCQkJCWZwLT5fcCArPSB3OworCQkJCWlmIChmZmx1c2goZnApKQorCQkJCQlnb3RvIGVycjsKKwkJCX0gZWxzZSBpZiAoKGludClsZW4gPj0gKHcgPSBmcC0+X2JmLl9zaXplKSkgeworCQkJCS8qIHdyaXRlIGRpcmVjdGx5ICovCisJCQkJdyA9ICgqZnAtPl93cml0ZSkoZnAtPl9jb29raWUsIHAsIHcpOworCQkJCWlmICh3IDw9IDApCisJCQkJCWdvdG8gZXJyOworCQkJfSBlbHNlIHsKKwkJCQkvKiBmaWxsIGFuZCBkb25lICovCisJCQkJdyA9IGxlbjsKKwkJCQlDT1BZKHcpOworCQkJCWZwLT5fdyAtPSB3OworCQkJCWZwLT5fcCArPSB3OworCQkJfQorCQkJcCArPSB3OworCQkJbGVuIC09IHc7CisJCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBMaW5lIGJ1ZmZlcmVkOiBsaWtlIGZ1bGx5IGJ1ZmZlcmVkLCBidXQgd2UKKwkJICogbXVzdCBjaGVjayBmb3IgbmV3bGluZXMuICBDb21wdXRlIHRoZSBkaXN0YW5jZQorCQkgKiB0byB0aGUgZmlyc3QgbmV3bGluZSAoaW5jbHVkaW5nIHRoZSBuZXdsaW5lKSwKKwkJICogb3IgYGluZmluaXR5JyBpZiB0aGVyZSBpcyBub25lLCB0aGVuIHByZXRlbmQKKwkJICogdGhhdCB0aGUgYW1vdW50IHRvIHdyaXRlIGlzIE1JTihsZW4sbmxkaXN0KS4KKwkJICovCisJCW5sa25vd24gPSAwOworCQlubGRpc3QgPSAwOwkvKiBYWFgganVzdCB0byBrZWVwIGdjYyBoYXBweSAqLworCQlkbyB7CisJCQlHRVRJT1Yobmxrbm93biA9IDApOworCQkJaWYgKCFubGtub3duKSB7CisJCQkJbmwgPSBtZW1jaHIoKHZvaWQgKilwLCAnXG4nLCBsZW4pOworCQkJCW5sZGlzdCA9IG5sID8gbmwgKyAxIC0gcCA6IChpbnQpbGVuICsgMTsKKwkJCQlubGtub3duID0gMTsKKwkJCX0KKwkJCXMgPSBNSU4oKGludClsZW4sIG5sZGlzdCk7CisJCQl3ID0gZnAtPl93ICsgZnAtPl9iZi5fc2l6ZTsKKwkJCWlmIChmcC0+X3AgPiBmcC0+X2JmLl9iYXNlICYmIHMgPiB3KSB7CisJCQkJQ09QWSh3KTsKKwkJCQkvKiBmcC0+X3cgLT0gdzsgKi8KKwkJCQlmcC0+X3AgKz0gdzsKKwkJCQlpZiAoZmZsdXNoKGZwKSkKKwkJCQkJZ290byBlcnI7CisJCQl9IGVsc2UgaWYgKHMgPj0gKHcgPSBmcC0+X2JmLl9zaXplKSkgeworCQkJCXcgPSAoKmZwLT5fd3JpdGUpKGZwLT5fY29va2llLCBwLCB3KTsKKwkJCQlpZiAodyA8PSAwKQorCQkJCSAJZ290byBlcnI7CisJCQl9IGVsc2UgeworCQkJCXcgPSBzOworCQkJCUNPUFkodyk7CisJCQkJZnAtPl93IC09IHc7CisJCQkJZnAtPl9wICs9IHc7CisJCQl9CisJCQlpZiAoKG5sZGlzdCAtPSB3KSA9PSAwKSB7CisJCQkJLyogY29waWVkIHRoZSBuZXdsaW5lOiBmbHVzaCBhbmQgZm9yZ2V0ICovCisJCQkJaWYgKGZmbHVzaChmcCkpCisJCQkJCWdvdG8gZXJyOworCQkJCW5sa25vd24gPSAwOworCQkJfQorCQkJcCArPSB3OworCQkJbGVuIC09IHc7CisJCX0gd2hpbGUgKCh1aW8tPnVpb19yZXNpZCAtPSB3KSAhPSAwKTsKKwl9CisJcmV0dXJuICgwKTsKKworZXJyOgorCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCXJldHVybiAoRU9GKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZnZ3cml0ZS5oIGIvbGliYy9zdGRpby9mdndyaXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjM0NGU0MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZnZ3cml0ZS5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCSRPcGVuQlNEOiBmdndyaXRlLmgsdiAxLjUgMjAwMy8wNi8wMiAyMDoxODozNyBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIEkvTyBkZXNjcmlwdG9ycyBmb3IgX19zZnZ3cml0ZSgpLgorICovCitzdHJ1Y3QgX19zaW92IHsKKwl2b2lkCSppb3ZfYmFzZTsKKwlzaXplX3QJaW92X2xlbjsKK307CitzdHJ1Y3QgX19zdWlvIHsKKwlzdHJ1Y3QJX19zaW92ICp1aW9faW92OworCWludAl1aW9faW92Y250OworCWludAl1aW9fcmVzaWQ7Cit9OworCitleHRlcm4gaW50IF9fc2Z2d3JpdGUoRklMRSAqLCBzdHJ1Y3QgX19zdWlvICopOwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9md2Fsay5jIGIvbGliYy9zdGRpby9md2Fsay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU2MDZjZjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2Z3YWxrLmMKQEAgLTAsMCArMSw1MiBAQAorLyoJJE9wZW5CU0Q6IGZ3YWxrLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisjaW5jbHVkZSAiZ2x1ZS5oIgorCitpbnQKK19md2FsayhpbnQgKCpmdW5jdGlvbikoRklMRSAqKSkKK3sKKwlGSUxFICpmcDsKKwlpbnQgbiwgcmV0OworCXN0cnVjdCBnbHVlICpnOworCisJcmV0ID0gMDsKKwlmb3IgKGcgPSAmX19zZ2x1ZTsgZyAhPSBOVUxMOyBnID0gZy0+bmV4dCkKKwkJZm9yIChmcCA9IGctPmlvYnMsIG4gPSBnLT5uaW9iczsgLS1uID49IDA7IGZwKyspCisJCQlpZiAoZnAtPl9mbGFncyAhPSAwKQorCQkJCXJldCB8PSAoKmZ1bmN0aW9uKShmcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9md3JpdGUuYyBiL2xpYmMvc3RkaW8vZndyaXRlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGE1MDhkYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZndyaXRlLmMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IGZ3cml0ZS5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKKy8qCisgKiBXcml0ZSBgY291bnQnIG9iamVjdHMgKGVhY2ggc2l6ZSBgc2l6ZScpIGZyb20gbWVtb3J5IHRvIHRoZSBnaXZlbiBmaWxlLgorICogUmV0dXJuIHRoZSBudW1iZXIgb2Ygd2hvbGUgb2JqZWN0cyB3cml0dGVuLgorICovCitzaXplX3QKK2Z3cml0ZShjb25zdCB2b2lkICpidWYsIHNpemVfdCBzaXplLCBzaXplX3QgY291bnQsIEZJTEUgKmZwKQoreworCXNpemVfdCBuOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92OworCisJaW92Lmlvdl9iYXNlID0gKHZvaWQgKilidWY7CisJdWlvLnVpb19yZXNpZCA9IGlvdi5pb3ZfbGVuID0gbiA9IGNvdW50ICogc2l6ZTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCisJLyoKKwkgKiBUaGUgdXN1YWwgY2FzZSBpcyBzdWNjZXNzIChfX3NmdndyaXRlIHJldHVybnMgMCk7CisJICogc2tpcCB0aGUgZGl2aWRlIGlmIHRoaXMgaGFwcGVucywgc2luY2UgZGl2aWRlcyBhcmUKKwkgKiBnZW5lcmFsbHkgc2xvdyBhbmQgc2luY2UgdGhpcyBvY2N1cnMgd2hlbmV2ZXIgc2l6ZT09MC4KKwkgKi8KKwlpZiAoX19zZnZ3cml0ZShmcCwgJnVpbykgPT0gMCkKKwkJcmV0dXJuIChjb3VudCk7CisJcmV0dXJuICgobiAtIHVpby51aW9fcmVzaWQpIC8gc2l6ZSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2dldGMuYyBiL2xpYmMvc3RkaW8vZ2V0Yy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkZDU3MjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL2dldGMuYwpAQCAtMCwwICsxLDYxIEBACisvKgkkT3BlbkJTRDogZ2V0Yy5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y191bmxvY2tlZC4KKyAqLworI3VuZGVmIGdldGNfdW5sb2NrZWQKKworaW50CitnZXRjX3VubG9ja2VkKEZJTEUgKmZwKQoreworCXJldHVybiAoX19zZ2V0YyhmcCkpOworfQorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGMuCisgKi8KKyN1bmRlZiBnZXRjCisKK2ludAorZ2V0YyhGSUxFICpmcCkKK3sKKwlpbnQgYzsKKworCWZsb2NrZmlsZShmcCk7CisJYyA9IF9fc2dldGMoZnApOworCWZ1bmxvY2tmaWxlKGZwKTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9nZXRjaGFyLmMgYi9saWJjL3N0ZGlvL2dldGNoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTA4MTdkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9nZXRjaGFyLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IGdldGNoYXIuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIGdldGNoYXJfdW5sb2NrZWQuCisgKi8KKyN1bmRlZiBnZXRjaGFyX3VubG9ja2VkCisKK2ludAorZ2V0Y2hhcl91bmxvY2tlZCh2b2lkKQoreworCXJldHVybiAoZ2V0Y191bmxvY2tlZChzdGRpbikpOworfQorCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gZ2V0Y2hhci4KKyAqLworCisjdW5kZWYgZ2V0Y2hhcgorCitpbnQKK2dldGNoYXIodm9pZCkKK3sKKwlyZXR1cm4gKGdldGMoc3RkaW4pKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2V0cy5jIGIvbGliYy9zdGRpby9nZXRzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDA0ZWI5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZ2V0cy5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiBnZXRzLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworX193YXJuX3JlZmVyZW5jZXMoZ2V0cywKKyAgICAid2FybmluZzogZ2V0cygpIGlzIHZlcnkgdW5zYWZlOyBjb25zaWRlciB1c2luZyBmZ2V0cygpIik7CisKK2NoYXIgKgorZ2V0cyhjaGFyICpidWYpCit7CisJaW50IGM7CisJY2hhciAqczsKKworCWZvciAocyA9IGJ1ZjsgKGMgPSBnZXRjaGFyKCkpICE9ICdcbic7KQorCQlpZiAoYyA9PSBFT0YpCisJCQlpZiAocyA9PSBidWYpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWVsc2UKKwkJCQlicmVhazsKKwkJZWxzZQorCQkJKnMrKyA9IGM7CisJKnMgPSAnXDAnOworCXJldHVybiAoYnVmKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vZ2x1ZS5oIGIvbGliYy9zdGRpby9nbHVlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzNjZWY2MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vZ2x1ZS5oCkBAIC0wLDAgKzEsNDUgQEAKKy8qCSRPcGVuQlNEOiBnbHVlLmgsdiAxLjQgMjAwNC8wMS8xMSAyMTozOTo1MSBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyoKKyAqIFRoZSBmaXJzdCBmZXcgRklMRXMgYXJlIHN0YXRpY2FsbHkgYWxsb2NhdGVkOyBvdGhlcnMgYXJlIGR5bmFtaWNhbGx5CisgKiBhbGxvY2F0ZWQgYW5kIGxpbmtlZCBpbiB2aWEgdGhpcyBnbHVlIHN0cnVjdHVyZS4KKyAqLworc3RydWN0IGdsdWUgeworCXN0cnVjdAlnbHVlICpuZXh0OworCWludAluaW9iczsKKwlGSUxFCSppb2JzOworfTsKKworZXh0ZXJuIHN0cnVjdCBnbHVlIF9fc2dsdWU7CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL2xvY2FsLmggYi9saWJjL3N0ZGlvL2xvY2FsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2RiMWZjNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vbG9jYWwuaApAQCAtMCwwICsxLDkxIEBACisvKgkkT3BlbkJTRDogbG9jYWwuaCx2IDEuMTIgMjAwNS8xMC8xMCAxNzozNzo0NCBlc3BpZSBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJ3Y2lvLmgiCisjaW5jbHVkZSAiZmlsZWV4dC5oIgorCisjaWZuZGVmIERFRkZJTEVNT0RFCisjZGVmaW5lIERFRkZJTEVNT0RFICAoU19JUlVTUnxTX0lXVVNSfFNfSVJHUlB8U19JV0dSUHxTX0lST1RIfFNfSVdPVEgpCisjZW5kaWYKKworCisvKgorICogSW5mb3JtYXRpb24gbG9jYWwgdG8gdGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBzdGRpbywKKyAqIGluIHBhcnRpY3VsYXIsIG1hY3JvcyBhbmQgcHJpdmF0ZSB2YXJpYWJsZXMuCisgKi8KKworaW50CV9fc2ZsdXNoKEZJTEUgKik7CitGSUxFCSpfX3NmcCh2b2lkKTsKK2ludAlfX3NyZWZpbGwoRklMRSAqKTsKK2ludAlfX3NyZWFkKHZvaWQgKiwgY2hhciAqLCBpbnQpOworaW50CV9fc3dyaXRlKHZvaWQgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZnBvc190CV9fc3NlZWsodm9pZCAqLCBmcG9zX3QsIGludCk7CitpbnQJX19zY2xvc2Uodm9pZCAqKTsKK3ZvaWQJX19zaW5pdCh2b2lkKTsKK3ZvaWQJX2NsZWFudXAodm9pZCk7Cit2b2lkCV9fc21ha2VidWYoRklMRSAqKTsKK2ludAlfX3N3aGF0YnVmKEZJTEUgKiwgc2l6ZV90ICosIGludCAqKTsKK2ludAlfZndhbGsoaW50ICgqKShGSUxFICopKTsKK2ludAlfX3N3c2V0dXAoRklMRSAqKTsKK2ludAlfX3NmbGFncyhjb25zdCBjaGFyICosIGludCAqKTsKKworZXh0ZXJuIHZvaWQgX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cCh2b2lkICgqKSh2b2lkKSk7CitleHRlcm4gaW50IF9fc2RpZGluaXQ7CisKKy8qCisgKiBSZXR1cm4gdHJ1ZSBpZiB0aGUgZ2l2ZW4gRklMRSBjYW5ub3QgYmUgd3JpdHRlbiBub3cuCisgKi8KKyNkZWZpbmUJY2FudHdyaXRlKGZwKSBcCisJKCgoKGZwKS0+X2ZsYWdzICYgX19TV1IpID09IDAgfHwgKGZwKS0+X2JmLl9iYXNlID09IE5VTEwpICYmIFwKKwkgX19zd3NldHVwKGZwKSkKKworLyoKKyAqIFRlc3Qgd2hldGhlciB0aGUgZ2l2ZW4gc3RkaW8gZmlsZSBoYXMgYW4gYWN0aXZlIHVuZ2V0YyBidWZmZXI7CisgKiByZWxlYXNlIHN1Y2ggYSBidWZmZXIsIHdpdGhvdXQgcmVzdG9yaW5nIG9yZGluYXJ5IHVucmVhZCBkYXRhLgorICovCisjZGVmaW5lCUhBU1VCKGZwKSAoX1VCKGZwKS5fYmFzZSAhPSBOVUxMKQorI2RlZmluZQlGUkVFVUIoZnApIHsgXAorCWlmIChfVUIoZnApLl9iYXNlICE9IChmcCktPl91YnVmKSBcCisJCWZyZWUoX1VCKGZwKS5fYmFzZSk7IFwKKwlfVUIoZnApLl9iYXNlID0gTlVMTDsgXAorfQorCisvKgorICogdGVzdCBmb3IgYW4gZmdldGxuKCkgYnVmZmVyLgorICovCisjZGVmaW5lCUhBU0xCKGZwKSAoKGZwKS0+X2xiLl9iYXNlICE9IE5VTEwpCisjZGVmaW5lCUZSRUVMQihmcCkgeyBcCisJZnJlZSgoY2hhciAqKShmcCktPl9sYi5fYmFzZSk7IFwKKwkoZnApLT5fbGIuX2Jhc2UgPSBOVUxMOyBcCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL21ha2VidWYuYyBiL2xpYmMvc3RkaW8vbWFrZWJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ0N2UyN2MKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL21ha2VidWYuYwpAQCAtMCwwICsxLDEwNyBAQAorLyoJJE9wZW5CU0Q6IG1ha2VidWYuYyx2IDEuOCAyMDA1LzEyLzI4IDE4OjUwOjIyIG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogQWxsb2NhdGUgYSBmaWxlIGJ1ZmZlciwgb3Igc3dpdGNoIHRvIHVuYnVmZmVyZWQgSS9PLgorICogUGVyIHRoZSBBTlNJIEMgc3RhbmRhcmQsIEFMTCB0dHkgZGV2aWNlcyBkZWZhdWx0IHRvIGxpbmUgYnVmZmVyZWQuCisgKgorICogQXMgYSBzaWRlIGVmZmVjdCwgd2Ugc2V0IF9fU09QVCBvciBfX1NOUFQgKGVuL2Rpcy1hYmxlIGZzZWVrCisgKiBvcHRpbWlzYXRpb24pIHJpZ2h0IGFmdGVyIHRoZSBmc3RhdCgpIHRoYXQgZmluZHMgdGhlIGJ1ZmZlciBzaXplLgorICovCit2b2lkCitfX3NtYWtlYnVmKEZJTEUgKmZwKQoreworCXZvaWQgKnA7CisJaW50IGZsYWdzOworCXNpemVfdCBzaXplOworCWludCBjb3VsZGJldHR5OworCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NOQkYpIHsKKwkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKKwkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCXJldHVybjsKKwl9CisJZmxhZ3MgPSBfX3N3aGF0YnVmKGZwLCAmc2l6ZSwgJmNvdWxkYmV0dHkpOworCWlmICgocCA9IG1hbGxvYyhzaXplKSkgPT0gTlVMTCkgeworCQlmcC0+X2ZsYWdzIHw9IF9fU05CRjsKKwkJZnAtPl9iZi5fYmFzZSA9IGZwLT5fcCA9IGZwLT5fbmJ1ZjsKKwkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCXJldHVybjsKKwl9CisJX19hdGV4aXRfcmVnaXN0ZXJfY2xlYW51cChfY2xlYW51cCk7CisJZmxhZ3MgfD0gX19TTUJGOworCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSBwOworCWZwLT5fYmYuX3NpemUgPSBzaXplOworCWlmIChjb3VsZGJldHR5ICYmIGlzYXR0eShmcC0+X2ZpbGUpKQorCQlmbGFncyB8PSBfX1NMQkY7CisJZnAtPl9mbGFncyB8PSBmbGFnczsKK30KKworLyoKKyAqIEludGVybmFsIHJvdXRpbmUgdG8gZGV0ZXJtaW5lIGBwcm9wZXInIGJ1ZmZlcmluZyBmb3IgYSBmaWxlLgorICovCitpbnQKK19fc3doYXRidWYoRklMRSAqZnAsIHNpemVfdCAqYnVmc2l6ZSwgaW50ICpjb3VsZGJldHR5KQoreworCXN0cnVjdCBzdGF0IHN0OworCisJaWYgKGZwLT5fZmlsZSA8IDAgfHwgZnN0YXQoZnAtPl9maWxlLCAmc3QpIDwgMCkgeworCQkqY291bGRiZXR0eSA9IDA7CisJCSpidWZzaXplID0gQlVGU0laOworCQlyZXR1cm4gKF9fU05QVCk7CisJfQorCisJLyogY291bGQgYmUgYSB0dHkgaWZmIGl0IGlzIGEgY2hhcmFjdGVyIGRldmljZSAqLworCSpjb3VsZGJldHR5ID0gU19JU0NIUihzdC5zdF9tb2RlKTsKKwlpZiAoc3Quc3RfYmxrc2l6ZSA9PSAwKSB7CisJCSpidWZzaXplID0gQlVGU0laOworCQlyZXR1cm4gKF9fU05QVCk7CisJfQorCisJLyoKKwkgKiBPcHRpbWlzZSBmc2VlaygpIG9ubHkgaWYgaXQgaXMgYSByZWd1bGFyIGZpbGUuICAoVGhlIHRlc3QgZm9yCisJICogX19zc2VlayBpcyBtYWlubHkgcGFyYW5vaWEuKSAgSXQgaXMgc2FmZSB0byBzZXQgX2Jsa3NpemUKKwkgKiB1bmNvbmRpdGlvbmFsbHk7IGl0IHdpbGwgb25seSBiZSB1c2VkIGlmIF9fU09QVCBpcyBhbHNvIHNldC4KKwkgKi8KKwkqYnVmc2l6ZSA9IHN0LnN0X2Jsa3NpemU7CisJZnAtPl9ibGtzaXplID0gc3Quc3RfYmxrc2l6ZTsKKwlyZXR1cm4gKChzdC5zdF9tb2RlICYgU19JRk1UKSA9PSBTX0lGUkVHICYmIGZwLT5fc2VlayA9PSBfX3NzZWVrID8KKwkgICAgX19TT1BUIDogX19TTlBUKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vbWt0ZW1wLmMgYi9saWJjL3N0ZGlvL21rdGVtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1MWY4MDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL21rdGVtcC5jCkBAIC0wLDAgKzEsMTg0IEBACisvKgkkT3BlbkJTRDogbWt0ZW1wLmMsdiAxLjE5IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitzdGF0aWMgaW50IF9nZXR0ZW1wKGNoYXIgKiwgaW50ICosIGludCwgaW50KTsKKworZXh0ZXJuIHVpbnQzMl90ICBhcmM0cmFuZG9tKCk7CisKK2ludAorbWtzdGVtcHMoY2hhciAqcGF0aCwgaW50IHNsZW4pCit7CisJaW50IGZkOworCisJcmV0dXJuIChfZ2V0dGVtcChwYXRoLCAmZmQsIDAsIHNsZW4pID8gZmQgOiAtMSk7Cit9CisKK2ludAorbWtzdGVtcChjaGFyICpwYXRoKQoreworCWludCBmZDsKKworCXJldHVybiAoX2dldHRlbXAocGF0aCwgJmZkLCAwLCAwKSA/IGZkIDogLTEpOworfQorCitjaGFyICoKK21rZHRlbXAoY2hhciAqcGF0aCkKK3sKKwlyZXR1cm4oX2dldHRlbXAocGF0aCwgKGludCAqKU5VTEwsIDEsIDApID8gcGF0aCA6IChjaGFyICopTlVMTCk7Cit9CisKK2NoYXIgKl9ta3RlbXAoY2hhciAqKTsKKworY2hhciAqCitfbWt0ZW1wKGNoYXIgKnBhdGgpCit7CisJcmV0dXJuKF9nZXR0ZW1wKHBhdGgsIChpbnQgKilOVUxMLCAwLCAwKSA/IHBhdGggOiAoY2hhciAqKU5VTEwpOworfQorCitfX3dhcm5fcmVmZXJlbmNlcyhta3RlbXAsCisgICAgIndhcm5pbmc6IG1rdGVtcCgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitjaGFyICoKK21rdGVtcChjaGFyICpwYXRoKQoreworCXJldHVybihfbWt0ZW1wKHBhdGgpKTsKK30KKworCitzdGF0aWMgaW50CitfZ2V0dGVtcChjaGFyICpwYXRoLCBpbnQgKmRvb3BlbiwgaW50IGRvbWtkaXIsIGludCBzbGVuKQoreworCWNoYXIgKnN0YXJ0LCAqdHJ2LCAqc3VmZnA7CisJc3RydWN0IHN0YXQgc2J1ZjsKKwlpbnQgcnZhbDsKKwlwaWRfdCBwaWQ7CisKKwlpZiAoZG9vcGVuICYmIGRvbWtkaXIpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybigwKTsKKwl9CisKKwlmb3IgKHRydiA9IHBhdGg7ICp0cnY7ICsrdHJ2KQorCQk7CisJdHJ2IC09IHNsZW47CisJc3VmZnAgPSB0cnY7CisJLS10cnY7CisJaWYgKHRydiA8IHBhdGgpIHsKKwkJZXJybm8gPSBFSU5WQUw7CisJCXJldHVybiAoMCk7CisJfQorCXBpZCA9IGdldHBpZCgpOworCXdoaWxlICh0cnYgPj0gcGF0aCAmJiAqdHJ2ID09ICdYJyAmJiBwaWQgIT0gMCkgeworCQkqdHJ2LS0gPSAocGlkICUgMTApICsgJzAnOworCQlwaWQgLz0gMTA7CisJfQorCXdoaWxlICh0cnYgPj0gcGF0aCAmJiAqdHJ2ID09ICdYJykgeworCQljaGFyIGM7CisKKwkJcGlkID0gKGFyYzRyYW5kb20oKSAmIDB4ZmZmZikgJSAoMjYrMjYpOworCQlpZiAocGlkIDwgMjYpCisJCQljID0gcGlkICsgJ0EnOworCQllbHNlCisJCQljID0gKHBpZCAtIDI2KSArICdhJzsKKwkJKnRydi0tID0gYzsKKwl9CisJc3RhcnQgPSB0cnYgKyAxOworCisJLyoKKwkgKiBjaGVjayB0aGUgdGFyZ2V0IGRpcmVjdG9yeTsgaWYgeW91IGhhdmUgc2l4IFgncyBhbmQgaXQKKwkgKiBkb2Vzbid0IGV4aXN0IHRoaXMgcnVucyBmb3IgYSAqdmVyeSogbG9uZyB0aW1lLgorCSAqLworCWlmIChkb29wZW4gfHwgZG9ta2RpcikgeworCQlmb3IgKDs7IC0tdHJ2KSB7CisJCQlpZiAodHJ2IDw9IHBhdGgpCisJCQkJYnJlYWs7CisJCQlpZiAoKnRydiA9PSAnLycpIHsKKwkJCQkqdHJ2ID0gJ1wwJzsKKwkJCQlydmFsID0gc3RhdChwYXRoLCAmc2J1Zik7CisJCQkJKnRydiA9ICcvJzsKKwkJCQlpZiAocnZhbCAhPSAwKQorCQkJCQlyZXR1cm4oMCk7CisJCQkJaWYgKCFTX0lTRElSKHNidWYuc3RfbW9kZSkpIHsKKwkJCQkJZXJybm8gPSBFTk9URElSOworCQkJCQlyZXR1cm4oMCk7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJZm9yICg7OykgeworCQlpZiAoZG9vcGVuKSB7CisJCQlpZiAoKCpkb29wZW4gPQorCQkJICAgIG9wZW4ocGF0aCwgT19DUkVBVHxPX0VYQ0x8T19SRFdSLCAwNjAwKSkgPj0gMCkKKwkJCQlyZXR1cm4oMSk7CisJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCXJldHVybigwKTsKKwkJfSBlbHNlIGlmIChkb21rZGlyKSB7CisJCQlpZiAobWtkaXIocGF0aCwgMDcwMCkgPT0gMCkKKwkJCQlyZXR1cm4oMSk7CisJCQlpZiAoZXJybm8gIT0gRUVYSVNUKQorCQkJCXJldHVybigwKTsKKwkJfSBlbHNlIGlmIChsc3RhdChwYXRoLCAmc2J1ZikpCisJCQlyZXR1cm4oZXJybm8gPT0gRU5PRU5UID8gMSA6IDApOworCisJCS8qIHRyaWNreSBsaXR0bGUgYWxnb3JpdGhtIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5ICovCisJCWZvciAodHJ2ID0gc3RhcnQ7OykgeworCQkJaWYgKCEqdHJ2KQorCQkJCXJldHVybiAoMCk7CisJCQlpZiAoKnRydiA9PSAnWicpIHsKKwkJCQlpZiAodHJ2ID09IHN1ZmZwKQorCQkJCQlyZXR1cm4gKDApOworCQkJCSp0cnYrKyA9ICdhJzsKKwkJCX0gZWxzZSB7CisJCQkJaWYgKGlzZGlnaXQoKnRydikpCisJCQkJCSp0cnYgPSAnYSc7CisJCQkJZWxzZSBpZiAoKnRydiA9PSAneicpCS8qIGluYyBmcm9tIHogdG8gQSAqLworCQkJCQkqdHJ2ID0gJ0EnOworCQkJCWVsc2UgeworCQkJCQlpZiAodHJ2ID09IHN1ZmZwKQorCQkJCQkJcmV0dXJuICgwKTsKKwkJCQkJKysqdHJ2OworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKwkvKk5PVFJFQUNIRUQqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wcmludGYuYyBiL2xpYmMvc3RkaW8vcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGFjYzE5YgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcHJpbnRmLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IHByaW50Zi5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisKK2ludAorcHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCWludCByZXQ7CisgIHZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcHV0Yy5jIGIvbGliYy9zdGRpby9wdXRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTI1MDIxNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcHV0Yy5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCSRPcGVuQlNEOiBwdXRjLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBBIHN1YnJvdXRpbmUgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y191bmxvY2tlZC4KKyAqLworI3VuZGVmIHB1dGNfdW5sb2NrZWQKKworaW50CitwdXRjX3VubG9ja2VkKGludCBjLCBGSUxFICpmcCkKK3sKKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCXJldHVybiAoX19zcHV0YyhjLCBmcCkpOworfQorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGMuCisgKi8KKyN1bmRlZiBwdXRjCisKK2ludAorcHV0YyhpbnQgYywgRklMRSAqZnApCit7CisJaW50IHJldDsKKworCWZsb2NrZmlsZShmcCk7CisJcmV0ID0gcHV0Y191bmxvY2tlZChjLCBmcCk7CisJZnVubG9ja2ZpbGUoZnApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcHV0Y2hhci5jIGIvbGliYy9zdGRpby9wdXRjaGFyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjMzY2RmZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcHV0Y2hhci5jCkBAIC0wLDAgKzEsNTkgQEAKKy8qCSRPcGVuQlNEOiBwdXRjaGFyLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworI3VuZGVmIHB1dGNoYXJfdW5sb2NrZWQKKy8qCisgKiBBIHN1YnJvdXRpbmcgdmVyc2lvbiBvZiB0aGUgbWFjcm8gcHV0Y2hhcl91bmxvY2tlZAorICovCitpbnQKK3B1dGNoYXJfdW5sb2NrZWQoaW50IGMpCit7CisJRklMRSAqc28gPSBzdGRvdXQ7CisKKwlyZXR1cm4gKHB1dGNfdW5sb2NrZWQoYyxzbykpOworfQorCisjdW5kZWYgcHV0Y2hhcgorCisvKgorICogQSBzdWJyb3V0aW5lIHZlcnNpb24gb2YgdGhlIG1hY3JvIHB1dGNoYXIKKyAqLworaW50CitwdXRjaGFyKGludCBjKQoreworCUZJTEUgKnNvID0gc3Rkb3V0OworCisJcmV0dXJuIChwdXRjKGMsIHNvKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3B1dHMuYyBiL2xpYmMvc3RkaW8vcHV0cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2ZWNjMjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3B1dHMuYwpAQCAtMCwwICsxLDU2IEBACisvKgkkT3BlbkJTRDogcHV0cy5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAiZnZ3cml0ZS5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIHN0cmluZyB0byBzdGRvdXQsIGFwcGVuZGluZyBhIG5ld2xpbmUuCisgKi8KK2ludAorcHV0cyhjb25zdCBjaGFyICpzKQoreworCXNpemVfdCBjID0gc3RybGVuKHMpOworCXN0cnVjdCBfX3N1aW8gdWlvOworCXN0cnVjdCBfX3Npb3YgaW92WzJdOworCisJaW92WzBdLmlvdl9iYXNlID0gKHZvaWQgKilzOworCWlvdlswXS5pb3ZfbGVuID0gYzsKKwlpb3ZbMV0uaW92X2Jhc2UgPSAiXG4iOworCWlvdlsxXS5pb3ZfbGVuID0gMTsKKwl1aW8udWlvX3Jlc2lkID0gYyArIDE7CisJdWlvLnVpb19pb3YgPSAmaW92WzBdOworCXVpby51aW9faW92Y250ID0gMjsKKwlyZXR1cm4gKF9fc2Z2d3JpdGUoc3Rkb3V0LCAmdWlvKSA/IEVPRiA6ICdcbicpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9wdXR3LmMgYi9saWJjL3N0ZGlvL3B1dHcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjk1NWZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby9wdXR3LmMKQEAgLTAsMCArMSw0OCBAQAorLyoJJE9wZW5CU0Q6IHB1dHcuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImZ2d3JpdGUuaCIKKworaW50CitwdXR3KGludCB3LCBGSUxFICpmcCkKK3sKKwlzdHJ1Y3QgX19zdWlvIHVpbzsKKwlzdHJ1Y3QgX19zaW92IGlvdjsKKworCWlvdi5pb3ZfYmFzZSA9ICZ3OworCWlvdi5pb3ZfbGVuID0gdWlvLnVpb19yZXNpZCA9IHNpemVvZih3KTsKKwl1aW8udWlvX2lvdiA9ICZpb3Y7CisJdWlvLnVpb19pb3ZjbnQgPSAxOworCXJldHVybiAoX19zZnZ3cml0ZShmcCwgJnVpbykpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9yZWZpbGwuYyBiL2xpYmMvc3RkaW8vcmVmaWxsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzRiMzc4ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vcmVmaWxsLmMKQEAgLTAsMCArMSwxMjEgQEAKKy8qCSRPcGVuQlNEOiByZWZpbGwuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludAorbGZsdXNoKEZJTEUgKmZwKQoreworCisJaWYgKChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NXUikpID09IChfX1NMQkZ8X19TV1IpKQorCQlyZXR1cm4gKF9fc2ZsdXNoKGZwKSk7CisJcmV0dXJuICgwKTsKK30KKworLyoKKyAqIFJlZmlsbCBhIHN0ZGlvIGJ1ZmZlci4KKyAqIFJldHVybiBFT0Ygb24gZW9mIG9yIGVycm9yLCAwIG90aGVyd2lzZS4KKyAqLworaW50CitfX3NyZWZpbGwoRklMRSAqZnApCit7CisKKwkvKiBtYWtlIHN1cmUgc3RkaW8gaXMgc2V0IHVwICovCisJaWYgKCFfX3NkaWRpbml0KQorCQlfX3Npbml0KCk7CisKKwlmcC0+X3IgPSAwOwkJLyogbGFyZ2VseSBhIGNvbnZlbmllbmNlIGZvciBjYWxsZXJzICovCisKKwkvKiBTeXNWIGRvZXMgbm90IG1ha2UgdGhpcyB0ZXN0OyB0YWtlIGl0IG91dCBmb3IgY29tcGF0aWJpbGl0eSAqLworCWlmIChmcC0+X2ZsYWdzICYgX19TRU9GKQorCQlyZXR1cm4gKEVPRik7CisKKwkvKiBpZiBub3QgYWxyZWFkeSByZWFkaW5nLCBoYXZlIHRvIGJlIHJlYWRpbmcgYW5kIHdyaXRpbmcgKi8KKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSRCkgPT0gMCkgeworCQlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSVykgPT0gMCkgeworCQkJZXJybm8gPSBFQkFERjsKKwkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQkJcmV0dXJuIChFT0YpOworCQl9CisJCS8qIHN3aXRjaCB0byByZWFkaW5nICovCisJCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpIHsKKwkJCWlmIChfX3NmbHVzaChmcCkpCisJCQkJcmV0dXJuIChFT0YpOworCQkJZnAtPl9mbGFncyAmPSB+X19TV1I7CisJCQlmcC0+X3cgPSAwOworCQkJZnAtPl9sYmZzaXplID0gMDsKKwkJfQorCQlmcC0+X2ZsYWdzIHw9IF9fU1JEOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdlIHdlcmUgcmVhZGluZy4gIElmIHRoZXJlIGlzIGFuIHVuZ2V0YyBidWZmZXIsCisJCSAqIHdlIG11c3QgaGF2ZSBiZWVuIHJlYWRpbmcgZnJvbSB0aGF0LiAgRHJvcCBpdCwKKwkJICogcmVzdG9yaW5nIHRoZSBwcmV2aW91cyBidWZmZXIgKGlmIGFueSkuICBJZiB0aGVyZQorCQkgKiBpcyBhbnl0aGluZyBpbiB0aGF0IGJ1ZmZlciwgcmV0dXJuLgorCQkgKi8KKwkJaWYgKEhBU1VCKGZwKSkgeworCQkJRlJFRVVCKGZwKTsKKwkJCWlmICgoZnAtPl9yID0gZnAtPl91cikgIT0gMCkgeworCQkJCWZwLT5fcCA9IGZwLT5fdXA7CisJCQkJcmV0dXJuICgwKTsKKwkJCX0KKwkJfQorCX0KKworCWlmIChmcC0+X2JmLl9iYXNlID09IE5VTEwpCisJCV9fc21ha2VidWYoZnApOworCisJLyoKKwkgKiBCZWZvcmUgcmVhZGluZyBmcm9tIGEgbGluZSBidWZmZXJlZCBvciB1bmJ1ZmZlcmVkIGZpbGUsCisJICogZmx1c2ggYWxsIGxpbmUgYnVmZmVyZWQgb3V0cHV0IGZpbGVzLCBwZXIgdGhlIEFOU0kgQworCSAqIHN0YW5kYXJkLgorCSAqLworCWlmIChmcC0+X2ZsYWdzICYgKF9fU0xCRnxfX1NOQkYpKQorCQkodm9pZCkgX2Z3YWxrKGxmbHVzaCk7CisJZnAtPl9wID0gZnAtPl9iZi5fYmFzZTsKKwlmcC0+X3IgPSAoKmZwLT5fcmVhZCkoZnAtPl9jb29raWUsIChjaGFyICopZnAtPl9wLCBmcC0+X2JmLl9zaXplKTsKKwlmcC0+X2ZsYWdzICY9IH5fX1NNT0Q7CS8qIGJ1ZmZlciBjb250ZW50cyBhcmUgYWdhaW4gcHJpc3RpbmUgKi8KKwlpZiAoZnAtPl9yIDw9IDApIHsKKwkJaWYgKGZwLT5fciA9PSAwKQorCQkJZnAtPl9mbGFncyB8PSBfX1NFT0Y7CisJCWVsc2UgeworCQkJZnAtPl9yID0gMDsKKwkJCWZwLT5fZmxhZ3MgfD0gX19TRVJSOworCQl9CisJCXJldHVybiAoRU9GKTsKKwl9CisJcmV0dXJuICgwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcmVtb3ZlLmMgYi9saWJjL3N0ZGlvL3JlbW92ZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQwOWQ3NmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3JlbW92ZS5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSRPcGVuQlNEOiByZW1vdmUuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N0YXQuaD4KKworaW50CityZW1vdmUoY29uc3QgY2hhciAqZmlsZSkKK3sKKwlzdHJ1Y3Qgc3RhdCBzdDsKKworCWlmIChsc3RhdChmaWxlLCAmc3QpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKFNfSVNESVIoc3Quc3RfbW9kZSkpCisJCXJldHVybiAocm1kaXIoZmlsZSkpOworCXJldHVybiAodW5saW5rKGZpbGUpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vcmV3aW5kLmMgYi9saWJjL3N0ZGlvL3Jld2luZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MTE5YjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3Jld2luZC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiByZXdpbmQuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKK3ZvaWQKK3Jld2luZChGSUxFICpmcCkKK3sKKwkodm9pZCkgZnNlZWsoZnAsIDBMLCBTRUVLX1NFVCk7CisJY2xlYXJlcnIoZnApOworCWVycm5vID0gMDsgICAgICAvKiBub3QgcmVxdWlyZWQsIGJ1dCBzZWVtcyByZWFzb25hYmxlICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3JnZXQuYyBiL2xpYmMvc3RkaW8vcmdldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDk3Y2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3JnZXQuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogcmdldC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIEhhbmRsZSBnZXRjKCkgd2hlbiB0aGUgYnVmZmVyIHJhbiBvdXQ6CisgKiBSZWZpbGwsIHRoZW4gcmV0dXJuIHRoZSBmaXJzdCBjaGFyYWN0ZXIKKyAqIGluIHRoZSBuZXdseS1maWxsZWQgYnVmZmVyLgorICovCitpbnQKK19fc3JnZXQoRklMRSAqZnApCit7CisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCWlmIChfX3NyZWZpbGwoZnApID09IDApIHsKKwkJZnAtPl9yLS07CisJCXJldHVybiAoKmZwLT5fcCsrKTsKKwl9CisJcmV0dXJuIChFT0YpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zY2FuZi5jIGIvbGliYy9zdGRpby9zY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxMTk0ZDAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NjYW5mLmMKQEAgLTAsMCArMSw0NyBAQAorLyoJJE9wZW5CU0Q6IHNjYW5mLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKworaW50CitzY2FuZihjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwlpbnQgcmV0OworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnNjYW5mKHN0ZGluLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2V0YnVmLmMgYi9saWJjL3N0ZGlvL3NldGJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4M2I4OTUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NldGJ1Zi5jCkBAIC0wLDAgKzEsNDEgQEAKKy8qCSRPcGVuQlNEOiBzZXRidWYuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK3ZvaWQKK3NldGJ1ZihGSUxFICpmcCwgY2hhciAqYnVmKQoreworCSh2b2lkKSBzZXR2YnVmKGZwLCBidWYsIGJ1ZiA/IF9JT0ZCRiA6IF9JT05CRiwgQlVGU0laKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc2V0YnVmZmVyLmMgYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3MjVmZjcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NldGJ1ZmZlci5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBzZXRidWZmZXIuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCit2b2lkCitzZXRidWZmZXIoRklMRSAqZnAsIGNoYXIgKmJ1ZiwgaW50IHNpemUpCit7CisKKwkodm9pZClzZXR2YnVmKGZwLCBidWYsIGJ1ZiA/IF9JT0ZCRiA6IF9JT05CRiwgc2l6ZSk7Cit9CisKKy8qCisgKiBzZXQgbGluZSBidWZmZXJpbmcKKyAqLworaW50CitzZXRsaW5lYnVmKEZJTEUgKmZwKQoreworCisJcmV0dXJuIChzZXR2YnVmKGZwLCAoY2hhciAqKU5VTEwsIF9JT0xCRiwgKHNpemVfdCkwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3NldHZidWYuYyBiL2xpYmMvc3RkaW8vc2V0dmJ1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliOTJiZjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NldHZidWYuYwpAQCAtMCwwICsxLDE1MSBAQAorLyoJJE9wZW5CU0Q6IHNldHZidWYuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBTZXQgb25lIG9mIHRoZSB0aHJlZSBraW5kcyBvZiBidWZmZXJpbmcsIG9wdGlvbmFsbHkgaW5jbHVkaW5nCisgKiBhIGJ1ZmZlci4KKyAqLworaW50CitzZXR2YnVmKEZJTEUgKmZwLCBjaGFyICpidWYsIGludCBtb2RlLCBzaXplX3Qgc2l6ZSkKK3sKKwlpbnQgcmV0LCBmbGFnczsKKwlzaXplX3QgaW9zaXplOworCWludCB0dHlmbGFnOworCisJLyoKKwkgKiBWZXJpZnkgYXJndW1lbnRzLiAgVGhlIGBpbnQnIGxpbWl0IG9uIGBzaXplJyBpcyBkdWUgdG8gdGhpcworCSAqIHBhcnRpY3VsYXIgaW1wbGVtZW50YXRpb24uICBOb3RlLCBidWYgYW5kIHNpemUgYXJlIGlnbm9yZWQKKwkgKiB3aGVuIHNldHRpbmcgX0lPTkJGLgorCSAqLworCWlmIChtb2RlICE9IF9JT05CRikKKwkJaWYgKChtb2RlICE9IF9JT0ZCRiAmJiBtb2RlICE9IF9JT0xCRikgfHwgKGludClzaXplIDwgMCkKKwkJCXJldHVybiAoRU9GKTsKKworCS8qCisJICogV3JpdGUgY3VycmVudCBidWZmZXIsIGlmIGFueS4gIERpc2NhcmQgdW5yZWFkIGlucHV0IChpbmNsdWRpbmcKKwkgKiB1bmdldGMgZGF0YSksIGNhbmNlbCBsaW5lIGJ1ZmZlcmluZywgYW5kIGZyZWUgb2xkIGJ1ZmZlciBpZgorCSAqIG1hbGxvYygpZWQuICBXZSBhbHNvIGNsZWFyIGFueSBlb2YgY29uZGl0aW9uLCBhcyBpZiB0aGlzIHdlcmUKKwkgKiBhIHNlZWsuCisJICovCisJcmV0ID0gMDsKKwkodm9pZClfX3NmbHVzaChmcCk7CisJaWYgKEhBU1VCKGZwKSkKKwkJRlJFRVVCKGZwKTsKKwlXQ0lPX0ZSRUUoZnApOworCWZwLT5fciA9IGZwLT5fbGJmc2l6ZSA9IDA7CisJZmxhZ3MgPSBmcC0+X2ZsYWdzOworCWlmIChmbGFncyAmIF9fU01CRikKKwkJZnJlZSgodm9pZCAqKWZwLT5fYmYuX2Jhc2UpOworCWZsYWdzICY9IH4oX19TTEJGIHwgX19TTkJGIHwgX19TTUJGIHwgX19TT1BUIHwgX19TTlBUIHwgX19TRU9GKTsKKworCS8qIElmIHNldHRpbmcgdW5idWZmZXJlZCBtb2RlLCBza2lwIGFsbCB0aGUgaGFyZCB3b3JrLiAqLworCWlmIChtb2RlID09IF9JT05CRikKKwkJZ290byBuYmY7CisKKwkvKgorCSAqIEZpbmQgb3B0aW1hbCBJL08gc2l6ZSBmb3Igc2VlayBvcHRpbWl6YXRpb24uICBUaGlzIGFsc28gcmV0dXJucworCSAqIGEgYHR0eSBmbGFnJyB0byBzdWdnZXN0IHRoYXQgd2UgY2hlY2sgaXNhdHR5KGZkKSwgYnV0IHdlIGRvIG5vdAorCSAqIGNhcmUgc2luY2Ugb3VyIGNhbGxlciB0b2xkIHVzIGhvdyB0byBidWZmZXIuCisJICovCisJZmxhZ3MgfD0gX19zd2hhdGJ1ZihmcCwgJmlvc2l6ZSwgJnR0eWZsYWcpOworCWlmIChzaXplID09IDApIHsKKwkJYnVmID0gTlVMTDsJLyogZm9yY2UgbG9jYWwgYWxsb2NhdGlvbiAqLworCQlzaXplID0gaW9zaXplOworCX0KKworCS8qIEFsbG9jYXRlIGJ1ZmZlciBpZiBuZWVkZWQuICovCisJaWYgKGJ1ZiA9PSBOVUxMKSB7CisJCWlmICgoYnVmID0gbWFsbG9jKHNpemUpKSA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogVW5hYmxlIHRvIGhvbm9yIHVzZXIncyByZXF1ZXN0LiAgV2Ugd2lsbCByZXR1cm4KKwkJCSAqIGZhaWx1cmUsIGJ1dCB0cnkgYWdhaW4gd2l0aCBmaWxlIHN5c3RlbSBzaXplLgorCQkJICovCisJCQlyZXQgPSBFT0Y7CisJCQlpZiAoc2l6ZSAhPSBpb3NpemUpIHsKKwkJCQlzaXplID0gaW9zaXplOworCQkJCWJ1ZiA9IG1hbGxvYyhzaXplKTsKKwkJCX0KKwkJfQorCQlpZiAoYnVmID09IE5VTEwpIHsKKwkJCS8qIE5vIGx1Y2s7IHN3aXRjaCB0byB1bmJ1ZmZlcmVkIEkvTy4gKi8KK25iZjoKKwkJCWZwLT5fZmxhZ3MgPSBmbGFncyB8IF9fU05CRjsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2JmLl9iYXNlID0gZnAtPl9wID0gZnAtPl9uYnVmOworCQkJZnAtPl9iZi5fc2l6ZSA9IDE7CisJCQlyZXR1cm4gKHJldCk7CisJCX0KKwkJZmxhZ3MgfD0gX19TTUJGOworCX0KKworCS8qCisJICogS2lsbCBhbnkgc2VlayBvcHRpbWl6YXRpb24gaWYgdGhlIGJ1ZmZlciBpcyBub3QgdGhlCisJICogcmlnaHQgc2l6ZS4KKwkgKgorCSAqIFNIT1VMRCBXRSBBTExPVyBNVUxUSVBMRVMgSEVSRSAoaS5lLiwgb2sgaWZmIChzaXplICUgaW9zaXplKSA9PSAwKT8KKwkgKi8KKwlpZiAoc2l6ZSAhPSBpb3NpemUpCisJCWZsYWdzIHw9IF9fU05QVDsKKworCS8qCisJICogRml4IHVwIHRoZSBGSUxFIGZpZWxkcywgYW5kIHNldCBfX2NsZWFudXAgZm9yIG91dHB1dCBmbHVzaCBvbgorCSAqIGV4aXQgKHNpbmNlIHdlIGFyZSBidWZmZXJlZCBpbiBzb21lIHdheSkuCisJICovCisJaWYgKG1vZGUgPT0gX0lPTEJGKQorCQlmbGFncyB8PSBfX1NMQkY7CisJZnAtPl9mbGFncyA9IGZsYWdzOworCWZwLT5fYmYuX2Jhc2UgPSBmcC0+X3AgPSAodW5zaWduZWQgY2hhciAqKWJ1ZjsKKwlmcC0+X2JmLl9zaXplID0gc2l6ZTsKKwkvKiBmcC0+X2xiZnNpemUgaXMgc3RpbGwgMCAqLworCWlmIChmbGFncyAmIF9fU1dSKSB7CisJCS8qCisJCSAqIEJlZ2luIG9yIGNvbnRpbnVlIHdyaXRpbmc6IHNlZSBfX3N3c2V0dXAoKS4gIE5vdGUKKwkJICogdGhhdCBfX1NOQkYgaXMgaW1wb3NzaWJsZSAoaXQgd2FzIGhhbmRsZWQgZWFybGllcikuCisJCSAqLworCQlpZiAoZmxhZ3MgJiBfX1NMQkYpIHsKKwkJCWZwLT5fdyA9IDA7CisJCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKKwkJfSBlbHNlCisJCQlmcC0+X3cgPSBzaXplOworCX0gZWxzZSB7CisJCS8qIGJlZ2luL2NvbnRpbnVlIHJlYWRpbmcsIG9yIHN0YXkgaW4gaW50ZXJtZWRpYXRlIHN0YXRlICovCisJCWZwLT5fdyA9IDA7CisJfQorCV9fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAoX2NsZWFudXApOworCisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zbnByaW50Zi5jIGIvbGliYy9zdGRpby9zbnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU4MzBjMGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NucHJpbnRmLmMKQEAgLTAsMCArMSw2NyBAQAorLyoJJE9wZW5CU0Q6IHNucHJpbnRmLmMsdiAxLjE0IDIwMDUvMTAvMTAgMTI6MDA6NTIgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50CitzbnByaW50ZihjaGFyICpzdHIsIHNpemVfdCBuLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKyAgdmFfbGlzdCBhcDsKKwlpbnQgcmV0OworCWNoYXIgZHVtbXk7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisKKwkvKiBXaGlsZSBzbnByaW50ZigzKSBzcGVjaWZpZXMgc2l6ZV90IHN0ZGlvIHVzZXMgYW4gaW50IGludGVybmFsbHkgKi8KKwlpZiAobiA+IElOVF9NQVgpCisJCW4gPSBJTlRfTUFYOworCS8qIFN0ZGlvIGludGVybmFscyBkbyBub3QgZGVhbCBjb3JyZWN0bHkgd2l0aCB6ZXJvIGxlbmd0aCBidWZmZXIgKi8KKwlpZiAobiA9PSAwKSB7CisJCXN0ciA9ICZkdW1teTsKKwkJbiA9IDE7CisJfQorCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gbiAtIDE7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZwcmludGYoJmYsIGZtdCwgYXApOworICB2YV9lbmQoYXApOworCSpmLl9wID0gJ1wwJzsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3NwcmludGYuYyBiL2xpYmMvc3RkaW8vc3ByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjczOWNkZTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NwcmludGYuYwpAQCAtMCwwICsxLDYzIEBACisvKgkkT3BlbkJTRDogc3ByaW50Zi5jLHYgMS4xMyAyMDA1LzEwLzEwIDEyOjAwOjUyIGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyhzcHJpbnRmLAorICAgICJ3YXJuaW5nOiBzcHJpbnRmKCkgaXMgb2Z0ZW4gbWlzdXNlZCwgcGxlYXNlIHVzZSBzbnByaW50ZigpIik7CisjZW5kaWYKKworaW50CitzcHJpbnRmKGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKyAgdmFfbGlzdCBhcDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gSU5UX01BWDsKKwl2YV9zdGFydChhcCwgZm10KTsKKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJKmYuX3AgPSAnXDAnOworCXJldHVybiAocmV0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vc3NjYW5mLmMgYi9saWJjL3N0ZGlvL3NzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUxNDFlZWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3NzY2FuZi5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCSRPcGVuQlNEOiBzc2NhbmYuYyx2IDEuMTIgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKiBBUkdTVVNFRCAqLworc3RhdGljIGludAorZW9mcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IGxlbikKK3sKKworCXJldHVybiAoMCk7Cit9CisKK2ludAorc3NjYW5mKGNvbnN0IGNoYXIgKnN0ciwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJaW50IHJldDsKKyAgdmFfbGlzdCBhcDsKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmxhZ3MgPSBfX1NSRDsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKKwlmLl9yZWFkID0gZW9mcmVhZDsKKwlmLl9sYi5fYmFzZSA9IE5VTEw7CisJdmFfc3RhcnQoYXAsIGZtdCk7CisJcmV0ID0gdmZzY2FuZigmZiwgZm10LCBhcCk7CisgIHZhX2VuZChhcCk7CisJcmV0dXJuIChyZXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby9zdGRpby5jIGIvbGliYy9zdGRpby9zdGRpby5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE0YTI3YjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3N0ZGlvLmMKQEAgLTAsMCArMSw4OSBAQAorLyoJJE9wZW5CU0Q6IHN0ZGlvLmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKy8qCisgKiBTbWFsbCBzdGFuZGFyZCBJL08vc2Vlay9jbG9zZSBmdW5jdGlvbnMuCisgKiBUaGVzZSBtYWludGFpbiB0aGUgYGtub3duIHNlZWsgb2Zmc2V0JyBmb3Igc2VlayBvcHRpbWlzYXRpb24uCisgKi8KK2ludAorX19zcmVhZCh2b2lkICpjb29raWUsIGNoYXIgKmJ1ZiwgaW50IG4pCit7CisJRklMRSAqZnAgPSBjb29raWU7CisJaW50IHJldDsKKwkKKwlyZXQgPSByZWFkKGZwLT5fZmlsZSwgYnVmLCBuKTsKKwkvKiBpZiB0aGUgcmVhZCBzdWNjZWVkZWQsIHVwZGF0ZSB0aGUgY3VycmVudCBvZmZzZXQgKi8KKwlpZiAocmV0ID49IDApCisJCWZwLT5fb2Zmc2V0ICs9IHJldDsKKwllbHNlCisJCWZwLT5fZmxhZ3MgJj0gfl9fU09GRjsJLyogcGFyYW5vaWEgKi8KKwlyZXR1cm4gKHJldCk7Cit9CisKK2ludAorX19zd3JpdGUodm9pZCAqY29va2llLCBjb25zdCBjaGFyICpidWYsIGludCBuKQoreworCUZJTEUgKmZwID0gY29va2llOworCisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NBUFApCisJCSh2b2lkKSBsc2VlayhmcC0+X2ZpbGUsIChvZmZfdCkwLCBTRUVLX0VORCk7CisJZnAtPl9mbGFncyAmPSB+X19TT0ZGOwkvKiBpbiBjYXNlIEZBUFBFTkQgbW9kZSBpcyBzZXQgKi8KKwlyZXR1cm4gKHdyaXRlKGZwLT5fZmlsZSwgYnVmLCBuKSk7Cit9CisKK2Zwb3NfdAorX19zc2Vlayh2b2lkICpjb29raWUsIGZwb3NfdCBvZmZzZXQsIGludCB3aGVuY2UpCit7CisJRklMRSAqZnAgPSBjb29raWU7CisJb2ZmX3QgcmV0OworCQorCXJldCA9IGxzZWVrKGZwLT5fZmlsZSwgKG9mZl90KW9mZnNldCwgd2hlbmNlKTsKKwlpZiAocmV0ID09IChvZmZfdCktMSkKKwkJZnAtPl9mbGFncyAmPSB+X19TT0ZGOworCWVsc2UgeworCQlmcC0+X2ZsYWdzIHw9IF9fU09GRjsKKwkJZnAtPl9vZmZzZXQgPSByZXQ7CisJfQorCXJldHVybiAocmV0KTsKK30KKworaW50CitfX3NjbG9zZSh2b2lkICpjb29raWUpCit7CisJcmV0dXJuIChjbG9zZSgoKEZJTEUgKiljb29raWUpLT5fZmlsZSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby90ZW1wbmFtLmMgYi9saWJjL3N0ZGlvL3RlbXBuYW0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zYjdlYzc1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby90ZW1wbmFtLmMKQEAgLTAsMCArMSw4NCBAQAorLyoJJE9wZW5CU0Q6IHRlbXBuYW0uYyx2IDEuMTQgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKworX193YXJuX3JlZmVyZW5jZXModGVtcG5hbSwKKyAgICAid2FybmluZzogdGVtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitleHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK3RlbXBuYW0oY29uc3QgY2hhciAqZGlyLCBjb25zdCBjaGFyICpwZngpCit7CisJaW50IHN2ZXJybm87CisJY2hhciAqZiwgKm5hbWU7CisKKwlpZiAoIShuYW1lID0gbWFsbG9jKE1BWFBBVEhMRU4pKSkKKwkJcmV0dXJuKE5VTEwpOworCisJaWYgKCFwZngpCisJCXBmeCA9ICJ0bXAuIjsKKworCWlmIChpc3NldHVnaWQoKSA9PSAwICYmIChmID0gZ2V0ZW52KCJUTVBESVIiKSkpIHsKKwkJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXMlc1hYWFhYWFhYWFgiLCBmLAorCQkgICAgKihmICsgc3RybGVuKGYpIC0gMSkgPT0gJy8nPyAiIjogIi8iLCBwZngpOworCQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJCXJldHVybihmKTsKKwl9CisKKwlpZiAoKGYgPSAoY2hhciAqKWRpcikpIHsKKwkJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXMlc1hYWFhYWFhYWFgiLCBmLAorCQkgICAgKihmICsgc3RybGVuKGYpIC0gMSkgPT0gJy8nPyAiIjogIi8iLCBwZngpOworCQlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJCXJldHVybihmKTsKKwl9CisKKwlmID0gUF90bXBkaXI7CisJKHZvaWQpc25wcmludGYobmFtZSwgTUFYUEFUSExFTiwgIiVzJXNYWFhYWFhYWFgiLCBmLCBwZngpOworCWlmICgoZiA9IF9ta3RlbXAobmFtZSkpKQorCQlyZXR1cm4oZik7CisKKwlmID0gX1BBVEhfVE1QOworCSh2b2lkKXNucHJpbnRmKG5hbWUsIE1BWFBBVEhMRU4sICIlcyVzWFhYWFhYWFhYIiwgZiwgcGZ4KTsKKwlpZiAoKGYgPSBfbWt0ZW1wKG5hbWUpKSkKKwkJcmV0dXJuKGYpOworCisJc3ZlcnJubyA9IGVycm5vOworCWZyZWUobmFtZSk7CisJZXJybm8gPSBzdmVycm5vOworCXJldHVybihOVUxMKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdG1wZmlsZS5jIGIvbGliYy9zdGRpby90bXBmaWxlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlmN2U5MgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdG1wZmlsZS5jCkBAIC0wLDAgKzEsODEgQEAKKy8qCSRPcGVuQlNEOiB0bXBmaWxlLmMsdiAxLjEwIDIwMDUvMTAvMTAgMTI6MDA6NTIgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisKK0ZJTEUgKgordG1wZmlsZSh2b2lkKQoreworCXNpZ3NldF90IHNldCwgb3NldDsKKwlGSUxFICpmcDsKKwlpbnQgZmQsIHN2ZXJybm87CisjZGVmaW5lCVRSQUlMRVIJInRtcC5YWFhYWFhYWFhYIgorCWNoYXIgYnVmW3NpemVvZihfUEFUSF9UTVApICsgc2l6ZW9mKFRSQUlMRVIpXTsKKworCSh2b2lkKW1lbWNweShidWYsIF9QQVRIX1RNUCwgc2l6ZW9mKF9QQVRIX1RNUCkgLSAxKTsKKwkodm9pZCltZW1jcHkoYnVmICsgc2l6ZW9mKF9QQVRIX1RNUCkgLSAxLCBUUkFJTEVSLCBzaXplb2YoVFJBSUxFUikpOworCisJc2lnZmlsbHNldCgmc2V0KTsKKwkodm9pZClzaWdwcm9jbWFzayhTSUdfQkxPQ0ssICZzZXQsICZvc2V0KTsKKworCWZkID0gbWtzdGVtcChidWYpOworCWlmIChmZCAhPSAtMSkgeworCQltb2RlX3QgdTsKKworCQkodm9pZCl1bmxpbmsoYnVmKTsKKwkJdSA9IHVtYXNrKDApOworCQkodm9pZCl1bWFzayh1KTsKKwkJKHZvaWQpZmNobW9kKGZkLCAwNjY2ICYgfnUpOworCX0KKworCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb3NldCwgTlVMTCk7CisKKwlpZiAoZmQgPT0gLTEpCisJCXJldHVybiAoTlVMTCk7CisKKwlpZiAoKGZwID0gZmRvcGVuKGZkLCAidysiKSkgPT0gTlVMTCkgeworCQlzdmVycm5vID0gZXJybm87CisJCSh2b2lkKWNsb3NlKGZkKTsKKwkJZXJybm8gPSBzdmVycm5vOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwlyZXR1cm4gKGZwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdG1wbmFtLmMgYi9saWJjL3N0ZGlvL3RtcG5hbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyZTBhMjIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3RtcG5hbS5jCkBAIC0wLDAgKzEsNTUgQEAKKy8qCSRPcGVuQlNEOiB0bXBuYW0uYyx2IDEuMTAgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMsIDE5OTQKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitfX3dhcm5fcmVmZXJlbmNlcyh0bXBuYW0sCisgICAgIndhcm5pbmc6IHRtcG5hbSgpIHBvc3NpYmx5IHVzZWQgdW5zYWZlbHk7IGNvbnNpZGVyIHVzaW5nIG1rc3RlbXAoKSIpOworCitleHRlcm4gY2hhciAqX21rdGVtcChjaGFyICopOworCitjaGFyICoKK3RtcG5hbShjaGFyICpzKQoreworCXN0YXRpYyB1X2xvbmcgdG1wY291bnQ7CisJc3RhdGljIGNoYXIgYnVmW0xfdG1wbmFtXTsKKworCWlmIChzID09IE5VTEwpCisJCXMgPSBidWY7CisJKHZvaWQpc25wcmludGYocywgTF90bXBuYW0sICIlc3RtcC4lbHUuWFhYWFhYWFhYIiwgUF90bXBkaXIsIHRtcGNvdW50KTsKKwkrK3RtcGNvdW50OworCXJldHVybiAoX21rdGVtcChzKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3VuZ2V0Yy5jIGIvbGliYy9zdGRpby91bmdldGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZTA1MjU4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby91bmdldGMuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoJJE9wZW5CU0Q6IHVuZ2V0Yy5jLHYgMS45IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworc3RhdGljIGludCBfX3N1Ym1vcmUoRklMRSAqKTsKKy8qCisgKiBFeHBhbmQgdGhlIHVuZ2V0YyBidWZmZXIgYGluIHBsYWNlJy4gIFRoYXQgaXMsIGFkanVzdCBmcC0+X3Agd2hlbgorICogdGhlIGJ1ZmZlciBtb3Zlcywgc28gdGhhdCBpdCBwb2ludHMgdGhlIHNhbWUgZGlzdGFuY2UgZnJvbSB0aGUgZW5kLAorICogYW5kIG1vdmUgdGhlIGJ5dGVzIGluIHRoZSBidWZmZXIgYXJvdW5kIGFzIG5lY2Vzc2FyeSBzbyB0aGF0IHRoZXkKKyAqIGFyZSBhbGwgYXQgdGhlIGVuZCAoc3RhY2stc3R5bGUpLgorICovCitzdGF0aWMgaW50CitfX3N1Ym1vcmUoRklMRSAqZnApCit7CisJaW50IGk7CisJdW5zaWduZWQgY2hhciAqcDsKKworCWlmIChfVUIoZnApLl9iYXNlID09IGZwLT5fdWJ1ZikgeworCQkvKgorCQkgKiBHZXQgYSBuZXcgYnVmZmVyIChyYXRoZXIgdGhhbiBleHBhbmRpbmcgdGhlIG9sZCBvbmUpLgorCQkgKi8KKwkJaWYgKChwID0gbWFsbG9jKChzaXplX3QpQlVGU0laKSkgPT0gTlVMTCkKKwkJCXJldHVybiAoRU9GKTsKKwkJX1VCKGZwKS5fYmFzZSA9IHA7CisJCV9VQihmcCkuX3NpemUgPSBCVUZTSVo7CisJCXAgKz0gQlVGU0laIC0gc2l6ZW9mKGZwLT5fdWJ1Zik7CisJCWZvciAoaSA9IHNpemVvZihmcC0+X3VidWYpOyAtLWkgPj0gMDspCisJCQlwW2ldID0gZnAtPl91YnVmW2ldOworCQlmcC0+X3AgPSBwOworCQlyZXR1cm4gKDApOworCX0KKwlpID0gX1VCKGZwKS5fc2l6ZTsKKwlwID0gcmVhbGxvYyhfVUIoZnApLl9iYXNlLCBpIDw8IDEpOworCWlmIChwID09IE5VTEwpCisJCXJldHVybiAoRU9GKTsKKwkvKiBubyBvdmVybGFwIChoZW5jZSBjYW4gdXNlIG1lbWNweSkgYmVjYXVzZSB3ZSBkb3VibGVkIHRoZSBzaXplICovCisJKHZvaWQpbWVtY3B5KCh2b2lkICopKHAgKyBpKSwgKHZvaWQgKilwLCAoc2l6ZV90KWkpOworCWZwLT5fcCA9IHAgKyBpOworCV9VQihmcCkuX2Jhc2UgPSBwOworCV9VQihmcCkuX3NpemUgPSBpIDw8IDE7CisJcmV0dXJuICgwKTsKK30KKworaW50Cit1bmdldGMoaW50IGMsIEZJTEUgKmZwKQoreworCWlmIChjID09IEVPRikKKwkJcmV0dXJuIChFT0YpOworCWlmICghX19zZGlkaW5pdCkKKwkJX19zaW5pdCgpOworCV9TRVRfT1JJRU5UQVRJT04oZnAsIC0xKTsKKwlpZiAoKGZwLT5fZmxhZ3MgJiBfX1NSRCkgPT0gMCkgeworCQkvKgorCQkgKiBOb3QgYWxyZWFkeSByZWFkaW5nOiBubyBnb29kIHVubGVzcyByZWFkaW5nLWFuZC13cml0aW5nLgorCQkgKiBPdGhlcndpc2UsIGZsdXNoIGFueSBjdXJyZW50IHdyaXRlIHN0dWZmLgorCQkgKi8KKwkJaWYgKChmcC0+X2ZsYWdzICYgX19TUlcpID09IDApCisJCQlyZXR1cm4gKEVPRik7CisJCWlmIChmcC0+X2ZsYWdzICYgX19TV1IpIHsKKwkJCWlmIChfX3NmbHVzaChmcCkpCisJCQkJcmV0dXJuIChFT0YpOworCQkJZnAtPl9mbGFncyAmPSB+X19TV1I7CisJCQlmcC0+X3cgPSAwOworCQkJZnAtPl9sYmZzaXplID0gMDsKKwkJfQorCQlmcC0+X2ZsYWdzIHw9IF9fU1JEOworCX0KKwljID0gKHVuc2lnbmVkIGNoYXIpYzsKKworCS8qCisJICogSWYgd2UgYXJlIGluIHRoZSBtaWRkbGUgb2YgdW5nZXRjJ2luZywganVzdCBjb250aW51ZS4KKwkgKiBUaGlzIG1heSByZXF1aXJlIGV4cGFuZGluZyB0aGUgY3VycmVudCB1bmdldGMgYnVmZmVyLgorCSAqLworCWlmIChIQVNVQihmcCkpIHsKKwkJaWYgKGZwLT5fciA+PSBfVUIoZnApLl9zaXplICYmIF9fc3VibW9yZShmcCkpCisJCQlyZXR1cm4gKEVPRik7CisJCSotLWZwLT5fcCA9IGM7CisJCWZwLT5fcisrOworCQlyZXR1cm4gKGMpOworCX0KKwlmcC0+X2ZsYWdzICY9IH5fX1NFT0Y7CisKKwkvKgorCSAqIElmIHdlIGNhbiBoYW5kbGUgdGhpcyBieSBzaW1wbHkgYmFja2luZyB1cCwgZG8gc28sCisJICogYnV0IG5ldmVyIHJlcGxhY2UgdGhlIG9yaWdpbmFsIGNoYXJhY3Rlci4KKwkgKiAoVGhpcyBtYWtlcyBzc2NhbmYoKSB3b3JrIHdoZW4gc2Nhbm5pbmcgYGNvbnN0JyBkYXRhLikKKwkgKi8KKwlpZiAoZnAtPl9iZi5fYmFzZSAhPSBOVUxMICYmIGZwLT5fcCA+IGZwLT5fYmYuX2Jhc2UgJiYKKwkgICAgZnAtPl9wWy0xXSA9PSBjKSB7CisJCWZwLT5fcC0tOworCQlmcC0+X3IrKzsKKwkJcmV0dXJuIChjKTsKKwl9CisKKwkvKgorCSAqIENyZWF0ZSBhbiB1bmdldGMgYnVmZmVyLgorCSAqIEluaXRpYWxseSwgd2Ugd2lsbCB1c2UgdGhlIGByZXNlcnZlJyBidWZmZXIuCisJICovCisJZnAtPl91ciA9IGZwLT5fcjsKKwlmcC0+X3VwID0gZnAtPl9wOworCV9VQihmcCkuX2Jhc2UgPSBmcC0+X3VidWY7CisJX1VCKGZwKS5fc2l6ZSA9IHNpemVvZihmcC0+X3VidWYpOworCWZwLT5fdWJ1ZltzaXplb2YoZnAtPl91YnVmKSAtIDFdID0gYzsKKwlmcC0+X3AgPSAmZnAtPl91YnVmW3NpemVvZihmcC0+X3VidWYpIC0gMV07CisJZnAtPl9yID0gMTsKKwlyZXR1cm4gKGMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92YXNwcmludGYuYyBiL2xpYmMvc3RkaW8vdmFzcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzMyODBjOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdmFzcHJpbnRmLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IHZhc3ByaW50Zi5jLHYgMS4xMyAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5NyBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKK2ludAordmFzcHJpbnRmKGNoYXIgKipzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisJdW5zaWduZWQgY2hhciAqX2Jhc2U7CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSIHwgX19TQUxDOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopbWFsbG9jKDEyOCk7CisJaWYgKGYuX2JmLl9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IDEyNzsJCS8qIExlYXZlIHJvb20gZm9yIHRoZSBOVUwgKi8KKwlyZXQgPSB2ZnByaW50ZigmZiwgZm10LCBhcCk7CisJaWYgKHJldCA9PSAtMSkKKwkJZ290byBlcnI7CisJKmYuX3AgPSAnXDAnOworCV9iYXNlID0gcmVhbGxvYyhmLl9iZi5fYmFzZSwgcmV0ICsgMSk7CisJaWYgKF9iYXNlID09IE5VTEwpCisJCWdvdG8gZXJyOworCSpzdHIgPSAoY2hhciAqKV9iYXNlOworCXJldHVybiAocmV0KTsKKworZXJyOgorCWlmIChmLl9iZi5fYmFzZSkgeworCQlmcmVlKGYuX2JmLl9iYXNlKTsKKwkJZi5fYmYuX2Jhc2UgPSBOVUxMOworCX0KKwkqc3RyID0gTlVMTDsKKwllcnJubyA9IEVOT01FTTsKKwlyZXR1cm4gKC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vdmZwcmludGYuYyBiL2xpYmMvc3RkaW8vdmZwcmludGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yY2UwMzYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92ZnByaW50Zi5jCkBAIC0wLDAgKzEsMTMxMyBAQAorLyoJJE9wZW5CU0Q6IHZmcHJpbnRmLmMsdiAxLjM3IDIwMDYvMDEvMTMgMTc6NTY6MTggbWlsbGVydCBFeHAgJAkqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBBY3R1YWwgcHJpbnRmIGlubmFyZHMuCisgKgorICogVGhpcyBjb2RlIGlzIGxhcmdlIGFuZCBjb21wbGljYXRlZC4uLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorCisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibG9jYWwuaCIKKyNpbmNsdWRlICJmdndyaXRlLmgiCisKK3N0YXRpYyB2b2lkIF9fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAorICAgIHNpemVfdCAqYXJndGFibGVzaXopOworc3RhdGljIGludCBfX2dyb3dfdHlwZV90YWJsZSh1bnNpZ25lZCBjaGFyICoqdHlwZXRhYmxlLCBpbnQgKnRhYmxlc2l6ZSk7CisKKy8qCisgKiBGbHVzaCBvdXQgYWxsIHRoZSB2ZWN0b3JzIGRlZmluZWQgYnkgdGhlIGdpdmVuIHVpbywKKyAqIHRoZW4gcmVzZXQgaXQgc28gdGhhdCBpdCBjYW4gYmUgcmV1c2VkLgorICovCitzdGF0aWMgaW50CitfX3NwcmludChGSUxFICpmcCwgc3RydWN0IF9fc3VpbyAqdWlvKQoreworCWludCBlcnI7CisKKwlpZiAodWlvLT51aW9fcmVzaWQgPT0gMCkgeworCQl1aW8tPnVpb19pb3ZjbnQgPSAwOworCQlyZXR1cm4gKDApOworCX0KKwllcnIgPSBfX3NmdndyaXRlKGZwLCB1aW8pOworCXVpby0+dWlvX3Jlc2lkID0gMDsKKwl1aW8tPnVpb19pb3ZjbnQgPSAwOworCXJldHVybiAoZXJyKTsKK30KKworLyoKKyAqIEhlbHBlciBmdW5jdGlvbiBmb3IgYGZwcmludGYgdG8gdW5idWZmZXJlZCB1bml4IGZpbGUnOiBjcmVhdGVzIGEKKyAqIHRlbXBvcmFyeSBidWZmZXIuICBXZSBvbmx5IHdvcmsgb24gd3JpdGUtb25seSBmaWxlczsgdGhpcyBhdm9pZHMKKyAqIHdvcnJpZXMgYWJvdXQgdW5nZXRjIGJ1ZmZlcnMgYW5kIHNvIGZvcnRoLgorICovCitzdGF0aWMgaW50CitfX3NicHJpbnRmKEZJTEUgKmZwLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwlGSUxFIGZha2U7CisJc3RydWN0IF9fc2ZpbGVleHQgZmFrZWV4dDsKKwl1bnNpZ25lZCBjaGFyIGJ1ZltCVUZTSVpdOworCisJX0ZJTEVFWFRfU0VUVVAoJmZha2UsICZmYWtlZXh0KTsKKwkvKiBjb3B5IHRoZSBpbXBvcnRhbnQgdmFyaWFibGVzICovCisJZmFrZS5fZmxhZ3MgPSBmcC0+X2ZsYWdzICYgfl9fU05CRjsKKwlmYWtlLl9maWxlID0gZnAtPl9maWxlOworCWZha2UuX2Nvb2tpZSA9IGZwLT5fY29va2llOworCWZha2UuX3dyaXRlID0gZnAtPl93cml0ZTsKKworCS8qIHNldCB1cCB0aGUgYnVmZmVyICovCisJZmFrZS5fYmYuX2Jhc2UgPSBmYWtlLl9wID0gYnVmOworCWZha2UuX2JmLl9zaXplID0gZmFrZS5fdyA9IHNpemVvZihidWYpOworCWZha2UuX2xiZnNpemUgPSAwOwkvKiBub3QgYWN0dWFsbHkgdXNlZCwgYnV0IEp1c3QgSW4gQ2FzZSAqLworCisJLyogZG8gdGhlIHdvcmssIHRoZW4gY29weSBhbnkgZXJyb3Igc3RhdHVzICovCisJcmV0ID0gdmZwcmludGYoJmZha2UsIGZtdCwgYXApOworCWlmIChyZXQgPj0gMCAmJiBmZmx1c2goJmZha2UpKQorCQlyZXQgPSBFT0Y7CisJaWYgKGZha2UuX2ZsYWdzICYgX19TRVJSKQorCQlmcC0+X2ZsYWdzIHw9IF9fU0VSUjsKKwlyZXR1cm4gKHJldCk7Cit9CisKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8bWF0aC5oPgorI2luY2x1ZGUgImZsb2F0aW8uaCIKKworI2RlZmluZQlCVUYJCShNQVhFWFArTUFYRlJBQ1QrMSkJLyogKyBkZWNpbWFsIHBvaW50ICovCisjZGVmaW5lCURFRlBSRUMJCTYKKworc3RhdGljIGNoYXIgKmN2dChkb3VibGUsIGludCwgaW50LCBjaGFyICosIGludCAqLCBpbnQsIGludCAqKTsKK3N0YXRpYyBpbnQgZXhwb25lbnQoY2hhciAqLCBpbnQsIGludCk7CisjZWxzZSAvKiBubyBGTE9BVElOR19QT0lOVCAqLworI2RlZmluZQlCVUYJCTQwCisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKworI2RlZmluZSBTVEFUSUNfQVJHX1RCTF9TSVpFIDgJLyogU2l6ZSBvZiBzdGF0aWMgYXJndW1lbnQgdGFibGUuICovCisKKy8qIEJJT05JQzogZG8gbm90IGxpbmsgbGlibSBmb3Igb25seSB0d28gcmF0aGVyIHNpbXBsZSBmdW5jdGlvbnMgKi8KKyNpZmRlZiBGTE9BVElOR19QT0lOVAorc3RhdGljICBpbnQgIF9teV9pc2luZihkb3VibGUpOworc3RhdGljICBpbnQgIF9teV9pc25hbihkb3VibGUpOworI2VuZGlmCisKKy8qCisgKiBNYWNyb3MgZm9yIGNvbnZlcnRpbmcgZGlnaXRzIHRvIGxldHRlcnMgYW5kIHZpY2UgdmVyc2EKKyAqLworI2RlZmluZQl0b19kaWdpdChjKQkoKGMpIC0gJzAnKQorI2RlZmluZSBpc19kaWdpdChjKQkoKHVuc2lnbmVkKXRvX2RpZ2l0KGMpIDw9IDkpCisjZGVmaW5lCXRvX2NoYXIobikJKChuKSArICcwJykKKworLyoKKyAqIEZsYWdzIHVzZWQgZHVyaW5nIGNvbnZlcnNpb24uCisgKi8KKyNkZWZpbmUJQUxUCQkweDAwMDEJCS8qIGFsdGVybmF0ZSBmb3JtICovCisjZGVmaW5lCUhFWFBSRUZJWAkweDAwMDIJCS8qIGFkZCAweCBvciAwWCBwcmVmaXggKi8KKyNkZWZpbmUJTEFESlVTVAkJMHgwMDA0CQkvKiBsZWZ0IGFkanVzdG1lbnQgKi8KKyNkZWZpbmUJTE9OR0RCTAkJMHgwMDA4CQkvKiBsb25nIGRvdWJsZTsgdW5pbXBsZW1lbnRlZCAqLworI2RlZmluZQlMT05HSU5UCQkweDAwMTAJCS8qIGxvbmcgaW50ZWdlciAqLworI2RlZmluZQlMTE9OR0lOVAkweDAwMjAJCS8qIGxvbmcgbG9uZyBpbnRlZ2VyICovCisjZGVmaW5lCVNIT1JUSU5UCTB4MDA0MAkJLyogc2hvcnQgaW50ZWdlciAqLworI2RlZmluZQlaRVJPUEFECQkweDAwODAJCS8qIHplcm8gKGFzIG9wcG9zZWQgdG8gYmxhbmspIHBhZCAqLworI2RlZmluZSBGUFQJCTB4MDEwMAkJLyogRmxvYXRpbmcgcG9pbnQgbnVtYmVyICovCisjZGVmaW5lIFBUUklOVAkJMHgwMjAwCQkvKiAodW5zaWduZWQpIHB0cmRpZmZfdCAqLworI2RlZmluZSBTSVpFSU5UCQkweDA0MDAJCS8qIChzaWduZWQpIHNpemVfdCAqLworI2RlZmluZSBDSEFSSU5UCQkweDA4MDAJCS8qIDggYml0IGludGVnZXIgKi8KKyNkZWZpbmUgTUFYSU5UCQkweDEwMDAJCS8qIGxhcmdlc3QgaW50ZWdlciBzaXplIChpbnRtYXhfdCkgKi8KKworaW50Cit2ZnByaW50ZihGSUxFICpmcCwgY29uc3QgY2hhciAqZm10MCwgX192YV9saXN0IGFwKQoreworCWNoYXIgKmZtdDsJLyogZm9ybWF0IHN0cmluZyAqLworCWludCBjaDsJLyogY2hhcmFjdGVyIGZyb20gZm10ICovCisJaW50IG4sIG0sIG4yOwkvKiBoYW5keSBpbnRlZ2VycyAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwljaGFyICpjcDsJLyogaGFuZHkgY2hhciBwb2ludGVyIChzaG9ydCB0ZXJtIHVzYWdlKSAqLworCWNoYXIgKmNwX2ZyZWUgPSBOVUxMOyAgLyogQklPTklDOiBjb3B5IG9mIGNwIHRvIGJlIGZyZWVkIGFmdGVyIHVzYWdlICovCisJc3RydWN0IF9fc2lvdiAqaW92cDsvKiBmb3IgUFJJTlQgbWFjcm8gKi8KKwlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGFib3ZlICovCisJaW50IHJldDsJCS8qIHJldHVybiB2YWx1ZSBhY2N1bXVsYXRvciAqLworCWludCB3aWR0aDsJCS8qIHdpZHRoIGZyb20gZm9ybWF0ICglOGQpLCBvciAwICovCisJaW50IHByZWM7CQkvKiBwcmVjaXNpb24gZnJvbSBmb3JtYXQgKCUuM2QpLCBvciAtMSAqLworCWNoYXIgc2lnbjsJCS8qIHNpZ24gcHJlZml4ICgnICcsICcrJywgJy0nLCBvciBcMCkgKi8KKwl3Y2hhcl90IHdjOworCXZvaWQqIHBzOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJY2hhciAqZGVjaW1hbF9wb2ludCA9ICIuIjsKKwljaGFyIHNvZnRzaWduOwkJLyogdGVtcG9yYXJ5IG5lZ2F0aXZlIHNpZ24gZm9yIGZsb2F0cyAqLworCWRvdWJsZSBfZG91YmxlID0gMC47CS8qIGRvdWJsZSBwcmVjaXNpb24gYXJndW1lbnRzICVbZUVmZ0ddICovCisJaW50IGV4cHQ7CQkvKiBpbnRlZ2VyIHZhbHVlIG9mIGV4cG9uZW50ICovCisJaW50IGV4cHNpemUgPSAwOwkvKiBjaGFyYWN0ZXIgY291bnQgZm9yIGV4cHN0ciAqLworCWludCBuZGlnOwkJLyogYWN0dWFsIG51bWJlciBvZiBkaWdpdHMgcmV0dXJuZWQgYnkgY3Z0ICovCisJY2hhciBleHBzdHJbN107CQkvKiBidWZmZXIgZm9yIGV4cG9uZW50IHN0cmluZyAqLworI2VuZGlmCisKKwl1aW50bWF4X3QgX3VtYXg7CS8qIGludGVnZXIgYXJndW1lbnRzICVbZGlvdXhYXSAqLworCWVudW0geyBPQ1QsIERFQywgSEVYIH0gYmFzZTsvKiBiYXNlIGZvciBbZGlvdXhYXSBjb252ZXJzaW9uICovCisJaW50IGRwcmVjOwkJLyogYSBjb3B5IG9mIHByZWMgaWYgW2Rpb3V4WF0sIDAgb3RoZXJ3aXNlICovCisJaW50IHJlYWxzejsJCS8qIGZpZWxkIHNpemUgZXhwYW5kZWQgYnkgZHByZWMgKi8KKwlpbnQgc2l6ZTsJCS8qIHNpemUgb2YgY29udmVydGVkIGZpZWxkIG9yIHN0cmluZyAqLworCWNoYXIqIHhkaWdzID0gTlVMTDsJCS8qIGRpZ2l0cyBmb3IgW3hYXSBjb252ZXJzaW9uICovCisjZGVmaW5lIE5JT1YgOAorCXN0cnVjdCBfX3N1aW8gdWlvOwkvKiBvdXRwdXQgaW5mb3JtYXRpb246IHN1bW1hcnkgKi8KKwlzdHJ1Y3QgX19zaW92IGlvdltOSU9WXTsvKiAuLi4gYW5kIGluZGl2aWR1YWwgaW8gdmVjdG9ycyAqLworCWNoYXIgYnVmW0JVRl07CQkvKiBzcGFjZSBmb3IgJWMsICVbZGlvdXhYXSwgJVtlRWZnR10gKi8KKwljaGFyIG94WzJdOwkJLyogc3BhY2UgZm9yIDB4IGhleC1wcmVmaXggKi8KKwl2YV9saXN0ICphcmd0YWJsZTsJLyogYXJncywgYnVpbHQgZHVlIHRvIHBvc2l0aW9uYWwgYXJnICovCisJdmFfbGlzdCBzdGF0YXJndGFibGVbU1RBVElDX0FSR19UQkxfU0laRV07CisJc2l6ZV90IGFyZ3RhYmxlc2l6OworCWludCBuZXh0YXJnOwkJLyogMS1iYXNlZCBhcmd1bWVudCBpbmRleCAqLworCXZhX2xpc3Qgb3JnYXA7CQkvKiBvcmlnaW5hbCBhcmd1bWVudCBwb2ludGVyICovCisJLyoKKwkgKiBDaG9vc2UgUEFEU0laRSB0byB0cmFkZSBlZmZpY2llbmN5IHZzLiBzaXplLiAgSWYgbGFyZ2VyIHByaW50ZgorCSAqIGZpZWxkcyBvY2N1ciBmcmVxdWVudGx5LCBpbmNyZWFzZSBQQURTSVpFIGFuZCBtYWtlIHRoZSBpbml0aWFsaXNlcnMKKwkgKiBiZWxvdyBsb25nZXIuCisJICovCisjZGVmaW5lCVBBRFNJWkUJMTYJCS8qIHBhZCBjaHVuayBzaXplICovCisJc3RhdGljIGNoYXIgYmxhbmtzW1BBRFNJWkVdID0KKwkgeycgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJywnICcsJyAnLCcgJ307CisJc3RhdGljIGNoYXIgemVyb2VzW1BBRFNJWkVdID0KKwkgeycwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJywnMCcsJzAnLCcwJ307CisKKwkvKgorCSAqIEJFV0FSRSwgdGhlc2UgYGdvdG8gZXJyb3InIG9uIGVycm9yLCBhbmQgUEFEIHVzZXMgYG4nLgorCSAqLworI2RlZmluZQlQUklOVChwdHIsIGxlbikgZG8geyBcCisJaW92cC0+aW92X2Jhc2UgPSAocHRyKTsgXAorCWlvdnAtPmlvdl9sZW4gPSAobGVuKTsgXAorCXVpby51aW9fcmVzaWQgKz0gKGxlbik7IFwKKwlpb3ZwKys7IFwKKwlpZiAoKyt1aW8udWlvX2lvdmNudCA+PSBOSU9WKSB7IFwKKwkJaWYgKF9fc3ByaW50KGZwLCAmdWlvKSkgXAorCQkJZ290byBlcnJvcjsgXAorCQlpb3ZwID0gaW92OyBcCisJfSBcCit9IHdoaWxlICgwKQorI2RlZmluZQlQQUQoaG93bWFueSwgd2l0aCkgZG8geyBcCisJaWYgKChuID0gKGhvd21hbnkpKSA+IDApIHsgXAorCQl3aGlsZSAobiA+IFBBRFNJWkUpIHsgXAorCQkJUFJJTlQod2l0aCwgUEFEU0laRSk7IFwKKwkJCW4gLT0gUEFEU0laRTsgXAorCQl9IFwKKwkJUFJJTlQod2l0aCwgbik7IFwKKwl9IFwKK30gd2hpbGUgKDApCisjZGVmaW5lCUZMVVNIKCkgZG8geyBcCisJaWYgKHVpby51aW9fcmVzaWQgJiYgX19zcHJpbnQoZnAsICZ1aW8pKSBcCisJCWdvdG8gZXJyb3I7IFwKKwl1aW8udWlvX2lvdmNudCA9IDA7IFwKKwlpb3ZwID0gaW92OyBcCit9IHdoaWxlICgwKQorCisJLyoKKwkgKiBUbyBleHRlbmQgc2hvcnRzIHByb3Blcmx5LCB3ZSBuZWVkIGJvdGggc2lnbmVkIGFuZCB1bnNpZ25lZAorCSAqIGFyZ3VtZW50IGV4dHJhY3Rpb24gbWV0aG9kcy4KKwkgKi8KKyNkZWZpbmUJU0FSRygpIFwKKwkoKGludG1heF90KShmbGFncyZNQVhJTlQgPyBHRVRBUkcoaW50bWF4X3QpIDogXAorCSAgICBmbGFncyZMTE9OR0lOVCA/IEdFVEFSRyhsb25nIGxvbmcpIDogXAorCSAgICBmbGFncyZMT05HSU5UID8gR0VUQVJHKGxvbmcpIDogXAorCSAgICBmbGFncyZQVFJJTlQgPyBHRVRBUkcocHRyZGlmZl90KSA6IFwKKwkgICAgZmxhZ3MmU0laRUlOVCA/IEdFVEFSRyhzc2l6ZV90KSA6IFwKKwkgICAgZmxhZ3MmU0hPUlRJTlQgPyAoc2hvcnQpR0VUQVJHKGludCkgOiBcCisJICAgIGZsYWdzJkNIQVJJTlQgPyAoX19zaWduZWQgY2hhcilHRVRBUkcoaW50KSA6IFwKKwkgICAgR0VUQVJHKGludCkpKQorI2RlZmluZQlVQVJHKCkgXAorCSgodWludG1heF90KShmbGFncyZNQVhJTlQgPyBHRVRBUkcodWludG1heF90KSA6IFwKKwkgICAgZmxhZ3MmTExPTkdJTlQgPyBHRVRBUkcodW5zaWduZWQgbG9uZyBsb25nKSA6IFwKKwkgICAgZmxhZ3MmTE9OR0lOVCA/IEdFVEFSRyh1bnNpZ25lZCBsb25nKSA6IFwKKwkgICAgZmxhZ3MmUFRSSU5UID8gKHVpbnRwdHJfdClHRVRBUkcocHRyZGlmZl90KSA6IC8qIFhYWCAqLyBcCisJICAgIGZsYWdzJlNJWkVJTlQgPyBHRVRBUkcoc2l6ZV90KSA6IFwKKwkgICAgZmxhZ3MmU0hPUlRJTlQgPyAodW5zaWduZWQgc2hvcnQpR0VUQVJHKGludCkgOiBcCisJICAgIGZsYWdzJkNIQVJJTlQgPyAodW5zaWduZWQgY2hhcilHRVRBUkcoaW50KSA6IFwKKwkgICAgR0VUQVJHKHVuc2lnbmVkIGludCkpKQorCisJIC8qCisJICAqIEdldCAqIGFyZ3VtZW50cywgaW5jbHVkaW5nIHRoZSBmb3JtICpubiQuICBQcmVzZXJ2ZSB0aGUgbmV4dGFyZworCSAgKiB0aGF0IHRoZSBhcmd1bWVudCBjYW4gYmUgZ290dGVuIG9uY2UgdGhlIHR5cGUgaXMgZGV0ZXJtaW5lZC4KKwkgICovCisjZGVmaW5lIEdFVEFTVEVSKHZhbCkgXAorCW4yID0gMDsgXAorCWNwID0gZm10OyBcCisJd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAorCQluMiA9IDEwICogbjIgKyB0b19kaWdpdCgqY3ApOyBcCisJCWNwKys7IFwKKwl9IFwKKwlpZiAoKmNwID09ICckJykgeyBcCisJCWludCBob2xkID0gbmV4dGFyZzsgXAorCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeyBcCisJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsgXAorCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwgJmFyZ3RhYmxlLCAmYXJndGFibGVzaXopOyBcCisJCX0gXAorCQluZXh0YXJnID0gbjI7IFwKKwkJdmFsID0gR0VUQVJHKGludCk7IFwKKwkJbmV4dGFyZyA9IGhvbGQ7IFwKKwkJZm10ID0gKytjcDsgXAorCX0gZWxzZSB7IFwKKwkJdmFsID0gR0VUQVJHKGludCk7IFwKKwl9CisKKy8qCisqIEdldCB0aGUgYXJndW1lbnQgaW5kZXhlZCBieSBuZXh0YXJnLiAgIElmIHRoZSBhcmd1bWVudCB0YWJsZSBpcworKiBidWlsdCwgdXNlIGl0IHRvIGdldCB0aGUgYXJndW1lbnQuICBJZiBpdHMgbm90LCBnZXQgdGhlIG5leHQKKyogYXJndW1lbnQgKGFuZCBhcmd1bWVudHMgbXVzdCBiZSBnb3R0ZW4gc2VxdWVudGlhbGx5KS4KKyovCisjZGVmaW5lIEdFVEFSRyh0eXBlKSBcCisJKCgoYXJndGFibGUgIT0gTlVMTCkgPyAodm9pZCkoYXAgPSBhcmd0YWJsZVtuZXh0YXJnXSkgOiAodm9pZCkwKSwgXAorCSBuZXh0YXJnKyssIHZhX2FyZyhhcCwgdHlwZSkpCisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisJLyogc29ycnksIGZwcmludGYocmVhZF9vbmx5X2ZpbGUsICIiKSByZXR1cm5zIEVPRiwgbm90IDAgKi8KKwlpZiAoY2FudHdyaXRlKGZwKSkgeworCQllcnJubyA9IEVCQURGOworCQlyZXR1cm4gKEVPRik7CisJfQorCisJLyogb3B0aW1pc2UgZnByaW50ZihzdGRlcnIpIChhbmQgb3RoZXIgdW5idWZmZXJlZCBVbml4IGZpbGVzKSAqLworCWlmICgoZnAtPl9mbGFncyAmIChfX1NOQkZ8X19TV1J8X19TUlcpKSA9PSAoX19TTkJGfF9fU1dSKSAmJgorCSAgICBmcC0+X2ZpbGUgPj0gMCkKKwkJcmV0dXJuIChfX3NicHJpbnRmKGZwLCBmbXQwLCBhcCkpOworCisJZm10ID0gKGNoYXIgKilmbXQwOworCWFyZ3RhYmxlID0gTlVMTDsKKwluZXh0YXJnID0gMTsKKwl2YV9jb3B5KG9yZ2FwLCBhcCk7CisJdWlvLnVpb19pb3YgPSBpb3ZwID0gaW92OworCXVpby51aW9fcmVzaWQgPSAwOworCXVpby51aW9faW92Y250ID0gMDsKKwlyZXQgPSAwOworCisJbWVtc2V0KCZwcywgMCwgc2l6ZW9mKHBzKSk7CisJLyoKKwkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWNwID0gZm10OworI2lmIDEgIC8qIEJJT05JQyAqLworICAgICAgICAgICAgICAgIG4gPSAtMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoICh3YyA9ICpmbXQpICE9IDAgKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICh3YyA9PSAnJScpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG4gPSAxOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZm10Kys7CisgICAgICAgICAgICAgICAgfQorI2Vsc2UKKwkJd2hpbGUgKChuID0gbWJydG93Yygmd2MsIGZtdCwgTUJfQ1VSX01BWCwgJnBzKSkgPiAwKSB7CisJCQlmbXQgKz0gbjsKKwkJCWlmICh3YyA9PSAnJScpIHsKKwkJCQlmbXQtLTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorI2VuZGlmCisJCWlmICgobSA9IGZtdCAtIGNwKSAhPSAwKSB7CisJCQlQUklOVChjcCwgbSk7CisJCQlyZXQgKz0gbTsKKwkJfQorCQlpZiAobiA8PSAwKQorCQkJZ290byBkb25lOworCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KKworCQlmbGFncyA9IDA7CisJCWRwcmVjID0gMDsKKwkJd2lkdGggPSAwOworCQlwcmVjID0gLTE7CisJCXNpZ24gPSAnXDAnOworCityZmxhZzoJCWNoID0gKmZtdCsrOworcmVzd2l0Y2g6CXN3aXRjaCAoY2gpIHsKKwkJY2FzZSAnICc6CisJCQkvKgorCQkJICogYGBJZiB0aGUgc3BhY2UgYW5kICsgZmxhZ3MgYm90aCBhcHBlYXIsIHRoZSBzcGFjZQorCQkJICogZmxhZyB3aWxsIGJlIGlnbm9yZWQuJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJaWYgKCFzaWduKQorCQkJCXNpZ24gPSAnICc7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcjJzoKKwkJCWZsYWdzIHw9IEFMVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJyonOgorCQkJLyoKKwkJCSAqIGBgQSBuZWdhdGl2ZSBmaWVsZCB3aWR0aCBhcmd1bWVudCBpcyB0YWtlbiBhcyBhCisJCQkgKiAtIGZsYWcgZm9sbG93ZWQgYnkgYSBwb3NpdGl2ZSBmaWVsZCB3aWR0aC4nJworCQkJICoJLS0gQU5TSSBYM0oxMQorCQkJICogVGhleSBkb24ndCBleGNsdWRlIGZpZWxkIHdpZHRocyByZWFkIGZyb20gYXJncy4KKwkJCSAqLworCQkJR0VUQVNURVIod2lkdGgpOworCQkJaWYgKHdpZHRoID49IDApCisJCQkJZ290byByZmxhZzsKKwkJCXdpZHRoID0gLXdpZHRoOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnLSc6CisJCQlmbGFncyB8PSBMQURKVVNUOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnKyc6CisJCQlzaWduID0gJysnOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnLic6CisJCQlpZiAoKGNoID0gKmZtdCsrKSA9PSAnKicpIHsKKwkJCQlHRVRBU1RFUihuKTsKKwkJCQlwcmVjID0gbiA8IDAgPyAtMSA6IG47CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCW4gPSAwOworCQkJd2hpbGUgKGlzX2RpZ2l0KGNoKSkgeworCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9CisJCQlpZiAoY2ggPT0gJyQnKSB7CisJCQkJbmV4dGFyZyA9IG47CisJCQkJaWYgKGFyZ3RhYmxlID09IE5VTEwpIHsKKwkJCQkJYXJndGFibGUgPSBzdGF0YXJndGFibGU7CisJCQkJCV9fZmluZF9hcmd1bWVudHMoZm10MCwgb3JnYXAsCisJCQkJCSAgICAmYXJndGFibGUsICZhcmd0YWJsZXNpeik7CisJCQkJfQorCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQlwcmVjID0gbiA8IDAgPyAtMSA6IG47CisJCQlnb3RvIHJlc3dpdGNoOworCQljYXNlICcwJzoKKwkJCS8qCisJCQkgKiBgYE5vdGUgdGhhdCAwIGlzIHRha2VuIGFzIGEgZmxhZywgbm90IGFzIHRoZQorCQkJICogYmVnaW5uaW5nIG9mIGEgZmllbGQgd2lkdGguJycKKwkJCSAqCS0tIEFOU0kgWDNKMTEKKwkJCSAqLworCQkJZmxhZ3MgfD0gWkVST1BBRDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJzEnOiBjYXNlICcyJzogY2FzZSAnMyc6IGNhc2UgJzQnOgorCQljYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOiBjYXNlICc4JzogY2FzZSAnOSc6CisJCQluID0gMDsKKwkJCWRvIHsKKwkJCQluID0gMTAgKiBuICsgdG9fZGlnaXQoY2gpOworCQkJCWNoID0gKmZtdCsrOworCQkJfSB3aGlsZSAoaXNfZGlnaXQoY2gpKTsKKwkJCWlmIChjaCA9PSAnJCcpIHsKKwkJCQluZXh0YXJnID0gbjsKKwkJCQlpZiAoYXJndGFibGUgPT0gTlVMTCkgeworCQkJCQlhcmd0YWJsZSA9IHN0YXRhcmd0YWJsZTsKKwkJCQkJX19maW5kX2FyZ3VtZW50cyhmbXQwLCBvcmdhcCwKKwkJCQkJICAgICZhcmd0YWJsZSwgJmFyZ3RhYmxlc2l6KTsKKwkJCQl9CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXdpZHRoID0gbjsKKwkJCWdvdG8gcmVzd2l0Y2g7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnTCc6CisJCQlmbGFncyB8PSBMT05HREJMOworCQkJZ290byByZmxhZzsKKyNlbmRpZgorCQljYXNlICdoJzoKKwkJCWZsYWdzIHw9IFNIT1JUSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnaic6CisJCQlmbGFncyB8PSBNQVhJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HSU5UOworCQkJfQorCQkJZ290byByZmxhZzsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9OR0lOVDsKKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAnYyc6CisJCQkqKGNwID0gYnVmKSA9IEdFVEFSRyhpbnQpOworCQkJc2l6ZSA9IDE7CisJCQlzaWduID0gJ1wwJzsKKwkJCWJyZWFrOworCQljYXNlICdEJzoKKwkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQkvKkZBTExUSFJPVUdIKi8KKwkJY2FzZSAnZCc6CisJCWNhc2UgJ2knOgorCQkJX3VtYXggPSBTQVJHKCk7CisJCQlpZiAoKGludG1heF90KV91bWF4IDwgMCkgeworCQkJCV91bWF4ID0gLV91bWF4OworCQkJCXNpZ24gPSAnLSc7CisJCQl9CisJCQliYXNlID0gREVDOworCQkJZ290byBudW1iZXI7CisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnZSc6CisJCWNhc2UgJ0UnOgorCQljYXNlICdmJzoKKwkJY2FzZSAnZyc6CisJCWNhc2UgJ0cnOgorCQkJaWYgKHByZWMgPT0gLTEpIHsKKwkJCQlwcmVjID0gREVGUFJFQzsKKwkJCX0gZWxzZSBpZiAoKGNoID09ICdnJyB8fCBjaCA9PSAnRycpICYmIHByZWMgPT0gMCkgeworCQkJCXByZWMgPSAxOworCQkJfQorCisJCQlpZiAoZmxhZ3MgJiBMT05HREJMKSB7CisJCQkJX2RvdWJsZSA9IChkb3VibGUpIEdFVEFSRyhsb25nIGRvdWJsZSk7CisJCQl9IGVsc2UgeworCQkJCV9kb3VibGUgPSBHRVRBUkcoZG91YmxlKTsKKwkJCX0KKworCQkJLyogZG8gdGhpcyBiZWZvcmUgdHJpY2t5IHByZWNpc2lvbiBjaGFuZ2VzICovCisJCQlpZiAoX215X2lzaW5mKF9kb3VibGUpKSB7CisJCQkJaWYgKF9kb3VibGUgPCAwKQorCQkJCQlzaWduID0gJy0nOworCQkJCWNwID0gIkluZiI7CisJCQkJc2l6ZSA9IDM7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoX215X2lzbmFuKF9kb3VibGUpKSB7CisJCQkJY3AgPSAiTmFOIjsKKwkJCQlzaXplID0gMzsKKwkJCQlicmVhazsKKwkJCX0KKworCQkJZmxhZ3MgfD0gRlBUOworCQkJY3AgPSBjdnQoX2RvdWJsZSwgcHJlYywgZmxhZ3MsICZzb2Z0c2lnbiwKKwkJCQkmZXhwdCwgY2gsICZuZGlnKTsKKwkJICAgIGNwX2ZyZWUgPSBjcDsKKwkJCWlmIChjaCA9PSAnZycgfHwgY2ggPT0gJ0cnKSB7CisJCQkJaWYgKGV4cHQgPD0gLTQgfHwgZXhwdCA+IHByZWMpCisJCQkJCWNoID0gKGNoID09ICdnJykgPyAnZScgOiAnRSc7CisJCQkJZWxzZQorCQkJCQljaCA9ICdnJzsKKwkJCX0KKwkJCWlmIChjaCA8PSAnZScpIHsJLyogJ2UnIG9yICdFJyBmbXQgKi8KKwkJCQktLWV4cHQ7CisJCQkJZXhwc2l6ZSA9IGV4cG9uZW50KGV4cHN0ciwgZXhwdCwgY2gpOworCQkJCXNpemUgPSBleHBzaXplICsgbmRpZzsKKwkJCQlpZiAobmRpZyA+IDEgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCSsrc2l6ZTsKKwkJCX0gZWxzZSBpZiAoY2ggPT0gJ2YnKSB7CQkvKiBmIGZtdCAqLworCQkJCWlmIChleHB0ID4gMCkgeworCQkJCQlzaXplID0gZXhwdDsKKwkJCQkJaWYgKHByZWMgfHwgZmxhZ3MgJiBBTFQpCisJCQkJCQlzaXplICs9IHByZWMgKyAxOworCQkJCX0gZWxzZQkvKiAiMC5YIiAqLworCQkJCQlzaXplID0gcHJlYyArIDI7CisJCQl9IGVsc2UgaWYgKGV4cHQgPj0gbmRpZykgewkvKiBmaXhlZCBnIGZtdCAqLworCQkJCXNpemUgPSBleHB0OworCQkJCWlmIChmbGFncyAmIEFMVCkKKwkJCQkJKytzaXplOworCQkJfSBlbHNlCisJCQkJc2l6ZSA9IG5kaWcgKyAoZXhwdCA+IDAgPworCQkJCQkxIDogMiAtIGV4cHQpOworCisJCQlpZiAoc29mdHNpZ24pCisJCQkJc2lnbiA9ICctJzsKKwkJCWJyZWFrOworI2VuZGlmIC8qIEZMT0FUSU5HX1BPSU5UICovCisvKiB0aGUgQW5kcm9pZCBzZWN1cml0eSB0ZWFtIHN1Z2dlc3RzIHJlbW92aW5nIHN1cHBvcnQgZm9yICVuCisgKiBzaW5jZSBpdCBoYXMgbm8gcmVhbCBwcmFjdGljYWwgdmFsdWUsIGFuZCBjb3VsZCBsZWFkIHRvCisgKiBydW5uaW5nIG1hbGljaW91cyBjb2RlIChmb3IgcmVhbGx5IGJ1Z3kgcHJvZ3JhbXMgdGhhdAorICogc2VuZCB0byBwcmludGYoKSB1c2VyLWdlbmVyYXRlZCBmb3JtYXR0aW5nIHN0cmluZ3MpLgorICovCisjaWYgMAorCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIExMT05HSU5UKQorCQkJCSpHRVRBUkcobG9uZyBsb25nICopID0gcmV0OworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCSpHRVRBUkcobG9uZyAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRJTlQpCisJCQkJKkdFVEFSRyhzaG9ydCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgQ0hBUklOVCkKKwkJCQkqR0VUQVJHKF9fc2lnbmVkIGNoYXIgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIFBUUklOVCkKKwkJCQkqR0VUQVJHKHB0cmRpZmZfdCAqKSA9IHJldDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgU0laRUlOVCkKKwkJCQkqR0VUQVJHKHNzaXplX3QgKikgPSByZXQ7CisJCQllbHNlIGlmIChmbGFncyAmIE1BWElOVCkKKwkJCQkqR0VUQVJHKGludG1heF90ICopID0gcmV0OworCQkJZWxzZQorCQkJCSpHRVRBUkcoaW50ICopID0gcmV0OworCQkJY29udGludWU7CS8qIG5vIG91dHB1dCAqLworI2VuZGlmCisJCWNhc2UgJ08nOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdvJzoKKwkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IE9DVDsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdwJzoKKwkJCS8qCisJCQkgKiBgYFRoZSBhcmd1bWVudCBzaGFsbCBiZSBhIHBvaW50ZXIgdG8gdm9pZC4gIFRoZQorCQkJICogdmFsdWUgb2YgdGhlIHBvaW50ZXIgaXMgY29udmVydGVkIHRvIGEgc2VxdWVuY2UKKwkJCSAqIG9mIHByaW50YWJsZSBjaGFyYWN0ZXJzLCBpbiBhbiBpbXBsZW1lbnRhdGlvbi0KKwkJCSAqIGRlZmluZWQgbWFubmVyLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KKwkJCS8qIE5PU1RSSUNUICovCisJCQlfdW1heCA9ICh1X2xvbmcpR0VUQVJHKHZvaWQgKik7CisJCQliYXNlID0gSEVYOworCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CisJCQlmbGFncyB8PSBIRVhQUkVGSVg7CisJCQljaCA9ICd4JzsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdzJzoKKwkJCWlmICgoY3AgPSBHRVRBUkcoY2hhciAqKSkgPT0gTlVMTCkKKwkJCQljcCA9ICIobnVsbCkiOworCQkJaWYgKHByZWMgPj0gMCkgeworCQkJCS8qCisJCQkJICogY2FuJ3QgdXNlIHN0cmxlbjsgY2FuIG9ubHkgbG9vayBmb3IgdGhlCisJCQkJICogTlVMIGluIHRoZSBmaXJzdCBgcHJlYycgY2hhcmFjdGVycywgYW5kCisJCQkJICogc3RybGVuKCkgd2lsbCBnbyBmdXJ0aGVyLgorCQkJCSAqLworCQkJCWNoYXIgKnAgPSBtZW1jaHIoY3AsIDAsIHByZWMpOworCisJCQkJaWYgKHAgIT0gTlVMTCkgeworCQkJCQlzaXplID0gcCAtIGNwOworCQkJCQlpZiAoc2l6ZSA+IHByZWMpCisJCQkJCQlzaXplID0gcHJlYzsKKwkJCQl9IGVsc2UKKwkJCQkJc2l6ZSA9IHByZWM7CisJCQl9IGVsc2UKKwkJCQlzaXplID0gc3RybGVuKGNwKTsKKwkJCXNpZ24gPSAnXDAnOworCQkJYnJlYWs7CisJCWNhc2UgJ1UnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICd1JzoKKwkJCV91bWF4ID0gVUFSRygpOworCQkJYmFzZSA9IERFQzsKKwkJCWdvdG8gbm9zaWduOworCQljYXNlICdYJzoKKwkJCXhkaWdzID0gIjAxMjM0NTY3ODlBQkNERUYiOworCQkJZ290byBoZXg7CisJCWNhc2UgJ3gnOgorCQkJeGRpZ3MgPSAiMDEyMzQ1Njc4OWFiY2RlZiI7CitoZXg6CQkJX3VtYXggPSBVQVJHKCk7CisJCQliYXNlID0gSEVYOworCQkJLyogbGVhZGluZyAweC9YIG9ubHkgaWYgbm9uLXplcm8gKi8KKwkJCWlmIChmbGFncyAmIEFMVCAmJiBfdW1heCAhPSAwKQorCQkJCWZsYWdzIHw9IEhFWFBSRUZJWDsKKworCQkJLyogdW5zaWduZWQgY29udmVyc2lvbnMgKi8KK25vc2lnbjoJCQlzaWduID0gJ1wwJzsKKwkJCS8qCisJCQkgKiBgYC4uLiBkaW91WHggY29udmVyc2lvbnMgLi4uIGlmIGEgcHJlY2lzaW9uIGlzCisJCQkgKiBzcGVjaWZpZWQsIHRoZSAwIGZsYWcgd2lsbCBiZSBpZ25vcmVkLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KK251bWJlcjoJCQlpZiAoKGRwcmVjID0gcHJlYykgPj0gMCkKKwkJCQlmbGFncyAmPSB+WkVST1BBRDsKKworCQkJLyoKKwkJCSAqIGBgVGhlIHJlc3VsdCBvZiBjb252ZXJ0aW5nIGEgemVybyB2YWx1ZSB3aXRoIGFuCisJCQkgKiBleHBsaWNpdCBwcmVjaXNpb24gb2YgemVybyBpcyBubyBjaGFyYWN0ZXJzLicnCisJCQkgKgktLSBBTlNJIFgzSjExCisJCQkgKi8KKwkJCWNwID0gYnVmICsgQlVGOworCQkJaWYgKF91bWF4ICE9IDAgfHwgcHJlYyAhPSAwKSB7CisJCQkJLyoKKwkJCQkgKiBVbnNpZ25lZCBtb2QgaXMgaGFyZCwgYW5kIHVuc2lnbmVkIG1vZAorCQkJCSAqIGJ5IGEgY29uc3RhbnQgaXMgZWFzaWVyIHRoYW4gdGhhdCBieQorCQkJCSAqIGEgdmFyaWFibGU7IGhlbmNlIHRoaXMgc3dpdGNoLgorCQkJCSAqLworCQkJCXN3aXRjaCAoYmFzZSkgeworCQkJCWNhc2UgT0NUOgorCQkJCQlkbyB7CisJCQkJCQkqLS1jcCA9IHRvX2NoYXIoX3VtYXggJiA3KTsKKwkJCQkJCV91bWF4ID4+PSAzOworCQkJCQl9IHdoaWxlIChfdW1heCk7CisJCQkJCS8qIGhhbmRsZSBvY3RhbCBsZWFkaW5nIDAgKi8KKwkJCQkJaWYgKGZsYWdzICYgQUxUICYmICpjcCAhPSAnMCcpCisJCQkJCQkqLS1jcCA9ICcwJzsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIERFQzoKKwkJCQkJLyogbWFueSBudW1iZXJzIGFyZSAxIGRpZ2l0ICovCisJCQkJCXdoaWxlIChfdW1heCA+PSAxMCkgeworCQkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4ICUgMTApOworCQkJCQkJX3VtYXggLz0gMTA7CisJCQkJCX0KKwkJCQkJKi0tY3AgPSB0b19jaGFyKF91bWF4KTsKKwkJCQkJYnJlYWs7CisKKwkJCQljYXNlIEhFWDoKKwkJCQkJZG8geworCQkJCQkJKi0tY3AgPSB4ZGlnc1tfdW1heCAmIDE1XTsKKwkJCQkJCV91bWF4ID4+PSA0OworCQkJCQl9IHdoaWxlIChfdW1heCk7CisJCQkJCWJyZWFrOworCisJCQkJZGVmYXVsdDoKKwkJCQkJY3AgPSAiYnVnIGluIHZmcHJpbnRmOiBiYWQgYmFzZSI7CisJCQkJCXNpemUgPSBzdHJsZW4oY3ApOworCQkJCQlnb3RvIHNraXBzaXplOworCQkJCX0KKwkJCX0KKwkJCXNpemUgPSBidWYgKyBCVUYgLSBjcDsKKwkJc2tpcHNpemU6CisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCisJCQlpZiAoY2ggPT0gJ1wwJykKKwkJCQlnb3RvIGRvbmU7CisJCQkvKiBwcmV0ZW5kIGl0IHdhcyAlYyB3aXRoIGFyZ3VtZW50IGNoICovCisJCQljcCA9IGJ1ZjsKKwkJCSpjcCA9IGNoOworCQkJc2l6ZSA9IDE7CisJCQlzaWduID0gJ1wwJzsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQWxsIHJlYXNvbmFibGUgZm9ybWF0cyB3aW5kIHVwIGhlcmUuICBBdCB0aGlzIHBvaW50LCBgY3AnCisJCSAqIHBvaW50cyB0byBhIHN0cmluZyB3aGljaCAoaWYgbm90IGZsYWdzJkxBREpVU1QpIHNob3VsZCBiZQorCQkgKiBwYWRkZWQgb3V0IHRvIGB3aWR0aCcgcGxhY2VzLiAgSWYgZmxhZ3MmWkVST1BBRCwgaXQgc2hvdWxkCisJCSAqIGZpcnN0IGJlIHByZWZpeGVkIGJ5IGFueSBzaWduIG9yIG90aGVyIHByZWZpeDsgb3RoZXJ3aXNlLAorCQkgKiBpdCBzaG91bGQgYmUgYmxhbmsgcGFkZGVkIGJlZm9yZSB0aGUgcHJlZml4IGlzIGVtaXR0ZWQuCisJCSAqIEFmdGVyIGFueSBsZWZ0LWhhbmQgcGFkZGluZyBhbmQgcHJlZml4aW5nLCBlbWl0IHplcm9lcworCQkgKiByZXF1aXJlZCBieSBhIGRlY2ltYWwgW2Rpb3V4WF0gcHJlY2lzaW9uLCB0aGVuIHByaW50IHRoZQorCQkgKiBzdHJpbmcgcHJvcGVyLCB0aGVuIGVtaXQgemVyb2VzIHJlcXVpcmVkIGJ5IGFueSBsZWZ0b3ZlcgorCQkgKiBmbG9hdGluZyBwcmVjaXNpb247IGZpbmFsbHksIGlmIExBREpVU1QsIHBhZCB3aXRoIGJsYW5rcy4KKwkJICoKKwkJICogQ29tcHV0ZSBhY3R1YWwgc2l6ZSwgc28gd2Uga25vdyBob3cgbXVjaCB0byBwYWQuCisJCSAqIHNpemUgZXhjbHVkZXMgZGVjaW1hbCBwcmVjOyByZWFsc3ogaW5jbHVkZXMgaXQuCisJCSAqLworCQlyZWFsc3ogPSBkcHJlYyA+IHNpemUgPyBkcHJlYyA6IHNpemU7CisJCWlmIChzaWduKQorCQkJcmVhbHN6Kys7CisJCWVsc2UgaWYgKGZsYWdzICYgSEVYUFJFRklYKQorCQkJcmVhbHN6Kz0gMjsKKworCQkvKiByaWdodC1hZGp1c3RpbmcgYmxhbmsgcGFkZGluZyAqLworCQlpZiAoKGZsYWdzICYgKExBREpVU1R8WkVST1BBRCkpID09IDApCisJCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7CisKKwkJLyogcHJlZml4ICovCisJCWlmIChzaWduKSB7CisJCQlQUklOVCgmc2lnbiwgMSk7CisJCX0gZWxzZSBpZiAoZmxhZ3MgJiBIRVhQUkVGSVgpIHsKKwkJCW94WzBdID0gJzAnOworCQkJb3hbMV0gPSBjaDsKKwkJCVBSSU5UKG94LCAyKTsKKwkJfQorCisJCS8qIHJpZ2h0LWFkanVzdGluZyB6ZXJvIHBhZGRpbmcgKi8KKwkJaWYgKChmbGFncyAmIChMQURKVVNUfFpFUk9QQUQpKSA9PSBaRVJPUEFEKQorCQkJUEFEKHdpZHRoIC0gcmVhbHN6LCB6ZXJvZXMpOworCisJCS8qIGxlYWRpbmcgemVyb2VzIGZyb20gZGVjaW1hbCBwcmVjaXNpb24gKi8KKwkJUEFEKGRwcmVjIC0gc2l6ZSwgemVyb2VzKTsKKworCQkvKiB0aGUgc3RyaW5nIG9yIG51bWJlciBwcm9wZXIgKi8KKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQlpZiAoKGZsYWdzICYgRlBUKSA9PSAwKSB7CisJCQlQUklOVChjcCwgc2l6ZSk7CisJCX0gZWxzZSB7CS8qIGdsdWUgdG9nZXRoZXIgZl9wIGZyYWdtZW50cyAqLworCQkJaWYgKGNoID49ICdmJykgewkvKiAnZicgb3IgJ2cnICovCisJCQkJaWYgKF9kb3VibGUgPT0gMCkgeworCQkJCQkvKiBrbHVkZ2UgZm9yIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KKwkJCQkJUFJJTlQoIjAiLCAxKTsKKwkJCQkJaWYgKGV4cHQgPCBuZGlnIHx8IChmbGFncyAmIEFMVCkgIT0gMCkgeworCQkJCQkJUFJJTlQoZGVjaW1hbF9wb2ludCwgMSk7CisJCQkJCQlQQUQobmRpZyAtIDEsIHplcm9lcyk7CisJCQkJCX0KKwkJCQl9IGVsc2UgaWYgKGV4cHQgPD0gMCkgeworCQkJCQlQUklOVCgiMCIsIDEpOworCQkJCQlQUklOVChkZWNpbWFsX3BvaW50LCAxKTsKKwkJCQkJUEFEKC1leHB0LCB6ZXJvZXMpOworCQkJCQlQUklOVChjcCwgbmRpZyk7CisJCQkJfSBlbHNlIGlmIChleHB0ID49IG5kaWcpIHsKKwkJCQkJUFJJTlQoY3AsIG5kaWcpOworCQkJCQlQQUQoZXhwdCAtIG5kaWcsIHplcm9lcyk7CisJCQkJCWlmIChmbGFncyAmIEFMVCkKKwkJCQkJCVBSSU5UKCIuIiwgMSk7CisJCQkJfSBlbHNlIHsKKwkJCQkJUFJJTlQoY3AsIGV4cHQpOworCQkJCQljcCArPSBleHB0OworCQkJCQlQUklOVCgiLiIsIDEpOworCQkJCQlQUklOVChjcCwgbmRpZy1leHB0KTsKKwkJCQl9CisJCQl9IGVsc2UgewkvKiAnZScgb3IgJ0UnICovCisJCQkJaWYgKG5kaWcgPiAxIHx8IGZsYWdzICYgQUxUKSB7CisJCQkJCW94WzBdID0gKmNwKys7CisJCQkJCW94WzFdID0gJy4nOworCQkJCQlQUklOVChveCwgMik7CisJCQkJCWlmIChfZG91YmxlKSB7CisJCQkJCQlQUklOVChjcCwgbmRpZy0xKTsKKwkJCQkJfSBlbHNlCS8qIDAuWzAuLl0gKi8KKwkJCQkJCS8qIF9fZHRvYSBpcnJlZ3VsYXJpdHkgKi8KKwkJCQkJCVBBRChuZGlnIC0gMSwgemVyb2VzKTsKKwkJCQl9IGVsc2UJLyogWGVZWVkgKi8KKwkJCQkJUFJJTlQoY3AsIDEpOworCQkJCVBSSU5UKGV4cHN0ciwgZXhwc2l6ZSk7CisJCQl9CisJCX0KKyNlbHNlCisJCVBSSU5UKGNwLCBzaXplKTsKKyNlbmRpZgorCQkvKiBsZWZ0LWFkanVzdGluZyBwYWRkaW5nIChhbHdheXMgYmxhbmspICovCisJCWlmIChmbGFncyAmIExBREpVU1QpCisJCQlQQUQod2lkdGggLSByZWFsc3osIGJsYW5rcyk7CisKKwkJLyogZmluYWxseSwgYWRqdXN0IHJldCAqLworCQlyZXQgKz0gd2lkdGggPiByZWFsc3ogPyB3aWR0aCA6IHJlYWxzejsKKworCQlGTFVTSCgpOwkvKiBjb3B5IG91dCB0aGUgSS9PIHZlY3RvcnMgKi8KKyNpZiAxICAgLyogQklPTklDOiByZW1vdmUgbWVtb3J5IGxlYWsgd2hlbiBwcmludGluZyBkb3VibGVzICovCisJCWlmIChjcF9mcmVlKSB7CisJCSAgZnJlZShjcF9mcmVlKTsKKwkJICBjcF9mcmVlID0gTlVMTDsKKwkJfQorI2VuZGlmCisJfQorZG9uZToKKwlGTFVTSCgpOworZXJyb3I6CisjaWYgMSAgIC8qIEJJT05JQzogcmVtb3ZlIG1lbW9yeSBsZWFrIHdoZW4gcHJpbnRpbmcgZG91YmxlcyAqLworICAgIGlmIChjcF9mcmVlKSB7CisgICAgICAgIGZyZWUoY3BfZnJlZSk7CisgICAgICAgIGNwX2ZyZWUgPSBOVUxMOworICAgIH0KKyNlbmRpZgorCWlmIChhcmd0YWJsZSAhPSBOVUxMICYmIGFyZ3RhYmxlICE9IHN0YXRhcmd0YWJsZSkgeworCQltdW5tYXAoYXJndGFibGUsIGFyZ3RhYmxlc2l6KTsKKwkJYXJndGFibGUgPSBOVUxMOworCX0KKwlyZXR1cm4gKF9fc2ZlcnJvcihmcCkgPyBFT0YgOiByZXQpOworCS8qIE5PVFJFQUNIRUQgKi8KK30KKworLyoKKyAqIFR5cGUgaWRzIGZvciBhcmd1bWVudCB0eXBlIHRhYmxlLgorICovCisjZGVmaW5lIFRfVU5VU0VECTAKKyNkZWZpbmUgVF9TSE9SVAkJMQorI2RlZmluZSBUX1VfU0hPUlQJMgorI2RlZmluZSBUUF9TSE9SVAkzCisjZGVmaW5lIFRfSU5UCQk0CisjZGVmaW5lIFRfVV9JTlQJCTUKKyNkZWZpbmUgVFBfSU5UCQk2CisjZGVmaW5lIFRfTE9ORwkJNworI2RlZmluZSBUX1VfTE9ORwk4CisjZGVmaW5lIFRQX0xPTkcJCTkKKyNkZWZpbmUgVF9MTE9ORwkJMTAKKyNkZWZpbmUgVF9VX0xMT05HCTExCisjZGVmaW5lIFRQX0xMT05HCTEyCisjZGVmaW5lIFRfRE9VQkxFCTEzCisjZGVmaW5lIFRfTE9OR19ET1VCTEUJMTQKKyNkZWZpbmUgVFBfQ0hBUgkJMTUKKyNkZWZpbmUgVFBfVk9JRAkJMTYKKyNkZWZpbmUgVF9QVFJJTlQJMTcKKyNkZWZpbmUgVFBfUFRSSU5UCTE4CisjZGVmaW5lIFRfU0laRUlOVAkxOQorI2RlZmluZSBUX1NTSVpFSU5UCTIwCisjZGVmaW5lIFRQX1NTSVpFSU5UCTIxCisjZGVmaW5lIFRfTUFYSU5UCTIyCisjZGVmaW5lIFRfTUFYVUlOVAkyMworI2RlZmluZSBUUF9NQVhJTlQJMjQKKworLyoKKyAqIEZpbmQgYWxsIGFyZ3VtZW50cyB3aGVuIGEgcG9zaXRpb25hbCBwYXJhbWV0ZXIgaXMgZW5jb3VudGVyZWQuICBSZXR1cm5zIGEKKyAqIHRhYmxlLCBpbmRleGVkIGJ5IGFyZ3VtZW50IG51bWJlciwgb2YgcG9pbnRlcnMgdG8gZWFjaCBhcmd1bWVudHMuICBUaGUKKyAqIGluaXRpYWwgYXJndW1lbnQgdGFibGUgc2hvdWxkIGJlIGFuIGFycmF5IG9mIFNUQVRJQ19BUkdfVEJMX1NJWkUgZW50cmllcy4KKyAqIEl0IHdpbGwgYmUgcmVwbGFjZWQgd2l0aCBhIG1tYXAtZWQgb25lIGlmIGl0IG92ZXJmbG93cyAobWFsbG9jIGNhbm5vdCBiZQorICogdXNlZCBzaW5jZSB3ZSBhcmUgYXR0ZW1wdGluZyB0byBtYWtlIHNucHJpbnRmIHRocmVhZCBzYWZlLCBhbmQgYWxsb2NhIGlzCisgKiBwcm9ibGVtYXRpYyBzaW5jZSB3ZSBoYXZlIG5lc3RlZCBmdW5jdGlvbnMuLikKKyAqLworc3RhdGljIHZvaWQKK19fZmluZF9hcmd1bWVudHMoY29uc3QgY2hhciAqZm10MCwgdmFfbGlzdCBhcCwgdmFfbGlzdCAqKmFyZ3RhYmxlLAorICAgIHNpemVfdCAqYXJndGFibGVzaXopCit7CisJY2hhciAqZm10OwkvKiBmb3JtYXQgc3RyaW5nICovCisJaW50IGNoOwkvKiBjaGFyYWN0ZXIgZnJvbSBmbXQgKi8KKwlpbnQgbiwgbjI7CS8qIGhhbmR5IGludGVnZXIgKHNob3J0IHRlcm0gdXNhZ2UpICovCisJY2hhciAqY3A7CS8qIGhhbmR5IGNoYXIgcG9pbnRlciAoc2hvcnQgdGVybSB1c2FnZSkgKi8KKwlpbnQgZmxhZ3M7CS8qIGZsYWdzIGFzIGFib3ZlICovCisJdW5zaWduZWQgY2hhciAqdHlwZXRhYmxlOyAvKiB0YWJsZSBvZiB0eXBlcyAqLworCXVuc2lnbmVkIGNoYXIgc3RhdHR5cGV0YWJsZVtTVEFUSUNfQVJHX1RCTF9TSVpFXTsKKwlpbnQgdGFibGVzaXplOwkJLyogY3VycmVudCBzaXplIG9mIHR5cGUgdGFibGUgKi8KKwlpbnQgdGFibGVtYXg7CQkvKiBsYXJnZXN0IHVzZWQgaW5kZXggaW4gdGFibGUgKi8KKwlpbnQgbmV4dGFyZzsJCS8qIDEtYmFzZWQgYXJndW1lbnQgaW5kZXggKi8KKwl3Y2hhcl90IHdjOworCXZvaWQqIHBzOworCisJLyoKKwkgKiBBZGQgYW4gYXJndW1lbnQgdHlwZSB0byB0aGUgdGFibGUsIGV4cGFuZGluZyBpZiBuZWNlc3NhcnkuCisJICovCisjZGVmaW5lIEFERFRZUEUodHlwZSkgXAorCSgobmV4dGFyZyA+PSB0YWJsZXNpemUpID8gXAorCQlfX2dyb3dfdHlwZV90YWJsZSgmdHlwZXRhYmxlLCAmdGFibGVzaXplKSA6IDAsIFwKKwkobmV4dGFyZyA+IHRhYmxlbWF4KSA/IHRhYmxlbWF4ID0gbmV4dGFyZyA6IDAsIFwKKwl0eXBldGFibGVbbmV4dGFyZysrXSA9IHR5cGUpCisKKyNkZWZpbmUJQUREU0FSRygpIFwKKyAgICAgICAgKChmbGFncyZNQVhJTlQpID8gQUREVFlQRShUX01BWElOVCkgOiBcCisJICAgICgoZmxhZ3MmUFRSSU5UKSA/IEFERFRZUEUoVF9QVFJJTlQpIDogXAorCSAgICAoKGZsYWdzJlNJWkVJTlQpID8gQUREVFlQRShUX1NTSVpFSU5UKSA6IFwKKwkgICAgKChmbGFncyZMTE9OR0lOVCkgPyBBRERUWVBFKFRfTExPTkcpIDogXAorCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX0xPTkcpIDogXAorCSAgICAoKGZsYWdzJlNIT1JUSU5UKSA/IEFERFRZUEUoVF9TSE9SVCkgOiBBRERUWVBFKFRfSU5UKSkpKSkpKQorCisjZGVmaW5lCUFERFVBUkcoKSBcCisgICAgICAgICgoZmxhZ3MmTUFYSU5UKSA/IEFERFRZUEUoVF9NQVhVSU5UKSA6IFwKKwkgICAgKChmbGFncyZQVFJJTlQpID8gQUREVFlQRShUX1BUUklOVCkgOiBcCisJICAgICgoZmxhZ3MmU0laRUlOVCkgPyBBRERUWVBFKFRfU0laRUlOVCkgOiBcCisJICAgICgoZmxhZ3MmTExPTkdJTlQpID8gQUREVFlQRShUX1VfTExPTkcpIDogXAorCSAgICAoKGZsYWdzJkxPTkdJTlQpID8gQUREVFlQRShUX1VfTE9ORykgOiBcCisJICAgICgoZmxhZ3MmU0hPUlRJTlQpID8gQUREVFlQRShUX1VfU0hPUlQpIDogQUREVFlQRShUX1VfSU5UKSkpKSkpKQorCisJLyoKKwkgKiBBZGQgKiBhcmd1bWVudHMgdG8gdGhlIHR5cGUgYXJyYXkuCisJICovCisjZGVmaW5lIEFEREFTVEVSKCkgXAorCW4yID0gMDsgXAorCWNwID0gZm10OyBcCisJd2hpbGUgKGlzX2RpZ2l0KCpjcCkpIHsgXAorCQluMiA9IDEwICogbjIgKyB0b19kaWdpdCgqY3ApOyBcCisJCWNwKys7IFwKKwl9IFwKKwlpZiAoKmNwID09ICckJykgeyBcCisJCWludCBob2xkID0gbmV4dGFyZzsgXAorCQluZXh0YXJnID0gbjI7IFwKKwkJQUREVFlQRShUX0lOVCk7IFwKKwkJbmV4dGFyZyA9IGhvbGQ7IFwKKwkJZm10ID0gKytjcDsgXAorCX0gZWxzZSB7IFwKKwkJQUREVFlQRShUX0lOVCk7IFwKKwl9CisJZm10ID0gKGNoYXIgKilmbXQwOworCXR5cGV0YWJsZSA9IHN0YXR0eXBldGFibGU7CisJdGFibGVzaXplID0gU1RBVElDX0FSR19UQkxfU0laRTsKKwl0YWJsZW1heCA9IDA7CisJbmV4dGFyZyA9IDE7CisJbWVtc2V0KHR5cGV0YWJsZSwgVF9VTlVTRUQsIFNUQVRJQ19BUkdfVEJMX1NJWkUpOworCW1lbXNldCgmcHMsIDAsIHNpemVvZihwcykpOworCisJLyoKKwkgKiBTY2FuIHRoZSBmb3JtYXQgZm9yIGNvbnZlcnNpb25zIChgJScgY2hhcmFjdGVyKS4KKwkgKi8KKwlmb3IgKDs7KSB7CisJCWNwID0gZm10OworI2lmIDEgIC8qIEJJT05JQyAqLworICAgICAgICAgICAgICAgIG4gPSAtMTsKKyAgICAgICAgICAgICAgICB3aGlsZSAoKHdjID0gKmZtdCkgIT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpZiAod2MgPT0gJyUnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gMTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZtdCsrOworICAgICAgICAgICAgICAgIH0KKyNlbHNlCisJCXdoaWxlICgobiA9IG1icnRvd2MoJndjLCBmbXQsIE1CX0NVUl9NQVgsICZwcykpID4gMCkgeworCQkJZm10ICs9IG47CisJCQlpZiAod2MgPT0gJyUnKSB7CisJCQkJZm10LS07CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKyNlbmRpZgorCQlpZiAobiA8PSAwKQorCQkJZ290byBkb25lOworCQlmbXQrKzsJCS8qIHNraXAgb3ZlciAnJScgKi8KKworCQlmbGFncyA9IDA7CisKK3JmbGFnOgkJY2ggPSAqZm10Kys7CityZXN3aXRjaDoJc3dpdGNoIChjaCkgeworCQljYXNlICcgJzoKKwkJY2FzZSAnIyc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcqJzoKKwkJCUFEREFTVEVSKCk7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICctJzoKKwkJY2FzZSAnKyc6CisJCQlnb3RvIHJmbGFnOworCQljYXNlICcuJzoKKwkJCWlmICgoY2ggPSAqZm10KyspID09ICcqJykgeworCQkJCUFEREFTVEVSKCk7CisJCQkJZ290byByZmxhZzsKKwkJCX0KKwkJCXdoaWxlIChpc19kaWdpdChjaCkpIHsKKwkJCQljaCA9ICpmbXQrKzsKKwkJCX0KKwkJCWdvdG8gcmVzd2l0Y2g7CisJCWNhc2UgJzAnOgorCQkJZ290byByZmxhZzsKKwkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCW4gPSAwOworCQkJZG8geworCQkJCW4gPSAxMCAqIG4gKyB0b19kaWdpdChjaCk7CisJCQkJY2ggPSAqZm10Kys7CisJCQl9IHdoaWxlIChpc19kaWdpdChjaCkpOworCQkJaWYgKGNoID09ICckJykgeworCQkJCW5leHRhcmcgPSBuOworCQkJCWdvdG8gcmZsYWc7CisJCQl9CisJCQlnb3RvIHJlc3dpdGNoOworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgJ0wnOgorCQkJZmxhZ3MgfD0gTE9OR0RCTDsKKwkJCWdvdG8gcmZsYWc7CisjZW5kaWYKKwkJY2FzZSAnaCc6CisJCQlpZiAoKmZtdCA9PSAnaCcpIHsKKwkJCQlmbXQrKzsKKwkJCQlmbGFncyB8PSBDSEFSSU5UOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBTSE9SVElOVDsKKwkJCX0KKwkJCWdvdG8gcmZsYWc7CisJCWNhc2UgJ2wnOgorCQkJaWYgKCpmbXQgPT0gJ2wnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gTExPTkdJTlQ7CisJCQl9IGVsc2UgeworCQkJCWZsYWdzIHw9IExPTkdJTlQ7CisJCQl9CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdxJzoKKwkJCWZsYWdzIHw9IExMT05HSU5UOworCQkJZ290byByZmxhZzsKKwkJY2FzZSAndCc6CisJCQlmbGFncyB8PSBQVFJJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICd6JzoKKwkJCWZsYWdzIHw9IFNJWkVJTlQ7CisJCQlnb3RvIHJmbGFnOworCQljYXNlICdjJzoKKwkJCUFERFRZUEUoVF9JTlQpOworCQkJYnJlYWs7CisJCWNhc2UgJ0QnOgorCQkJZmxhZ3MgfD0gTE9OR0lOVDsKKwkJCS8qRkFMTFRIUk9VR0gqLworCQljYXNlICdkJzoKKwkJY2FzZSAnaSc6CisJCQlBRERTQVJHKCk7CisJCQlicmVhazsKKyNpZmRlZiBGTE9BVElOR19QT0lOVAorCQljYXNlICdlJzoKKwkJY2FzZSAnRSc6CisJCWNhc2UgJ2YnOgorCQljYXNlICdnJzoKKwkJY2FzZSAnRyc6CisJCQlpZiAoZmxhZ3MgJiBMT05HREJMKQorCQkJCUFERFRZUEUoVF9MT05HX0RPVUJMRSk7CisJCQllbHNlCisJCQkJQUREVFlQRShUX0RPVUJMRSk7CisJCQlicmVhazsKKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLworCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIExMT05HSU5UKQorCQkJCUFERFRZUEUoVFBfTExPTkcpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HSU5UKQorCQkJCUFERFRZUEUoVFBfTE9ORyk7CisJCQllbHNlIGlmIChmbGFncyAmIFNIT1JUSU5UKQorCQkJCUFERFRZUEUoVFBfU0hPUlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBQVFJJTlQpCisJCQkJQUREVFlQRShUUF9QVFJJTlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCUFERFRZUEUoVFBfU1NJWkVJTlQpOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBNQVhJTlQpCisJCQkJQUREVFlQRShUUF9NQVhJTlQpOworCQkJZWxzZQorCQkJCUFERFRZUEUoVFBfSU5UKTsKKwkJCWNvbnRpbnVlOwkvKiBubyBvdXRwdXQgKi8KKwkJY2FzZSAnTyc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ28nOgorCQkJQUREVUFSRygpOworCQkJYnJlYWs7CisJCWNhc2UgJ3AnOgorCQkJQUREVFlQRShUUF9WT0lEKTsKKwkJCWJyZWFrOworCQljYXNlICdzJzoKKwkJCUFERFRZUEUoVFBfQ0hBUik7CisJCQlicmVhazsKKwkJY2FzZSAnVSc6CisJCQlmbGFncyB8PSBMT05HSU5UOworCQkJLypGQUxMVEhST1VHSCovCisJCWNhc2UgJ3UnOgorCQljYXNlICdYJzoKKwkJY2FzZSAneCc6CisJCQlBRERVQVJHKCk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoJLyogIiU/IiBwcmludHMgPywgdW5sZXNzID8gaXMgTlVMICovCisJCQlpZiAoY2ggPT0gJ1wwJykKKwkJCQlnb3RvIGRvbmU7CisJCQlicmVhazsKKwkJfQorCX0KK2RvbmU6CisJLyoKKwkgKiBCdWlsZCB0aGUgYXJndW1lbnQgdGFibGUuCisJICovCisJaWYgKHRhYmxlbWF4ID49IFNUQVRJQ19BUkdfVEJMX1NJWkUpIHsKKwkJKmFyZ3RhYmxlc2l6ID0gc2l6ZW9mICh2YV9saXN0KSAqICh0YWJsZW1heCArIDEpOworCQkqYXJndGFibGUgPSAodmFfbGlzdCAqKW1tYXAoTlVMTCwgKmFyZ3RhYmxlc2l6LAorCQkgICAgUFJPVF9XUklURXxQUk9UX1JFQUQsIE1BUF9BTk9OfE1BUF9QUklWQVRFLCAtMSwgMCk7CisJfQorCisjaWYgMAorCS8qIFhYWCBpcyB0aGlzIHJlcXVpcmVkPyAqLworCSgqYXJndGFibGUpIFswXSA9IE5VTEw7CisjZW5kaWYKKwlmb3IgKG4gPSAxOyBuIDw9IHRhYmxlbWF4OyBuKyspIHsKKwkJdmFfY29weSgoKmFyZ3RhYmxlKVtuXSwgYXApOworCQlzd2l0Y2ggKHR5cGV0YWJsZVtuXSkgeworCQljYXNlIFRfVU5VU0VEOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRfU0hPUlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBpbnQpOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX1NIT1JUOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1NIT1JUOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgc2hvcnQgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0lOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgdW5zaWduZWQgaW50KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0lOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGludCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVF9VX0xPTkc6CisJCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nKTsKKwkJCWJyZWFrOworCQljYXNlIFRQX0xPTkc6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nICopOworCQkJYnJlYWs7CisJCWNhc2UgVF9MTE9ORzoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGxvbmcgbG9uZyk7CisJCQlicmVhazsKKwkJY2FzZSBUX1VfTExPTkc6CisJCQkodm9pZCkgdmFfYXJnKGFwLCB1bnNpZ25lZCBsb25nIGxvbmcpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfTExPTkc6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBsb25nIGxvbmcgKik7CisJCQlicmVhazsKKwkJY2FzZSBUX0RPVUJMRToKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGRvdWJsZSk7CisJCQlicmVhazsKKwkJY2FzZSBUX0xPTkdfRE9VQkxFOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgbG9uZyBkb3VibGUpOworCQkJYnJlYWs7CisJCWNhc2UgVFBfQ0hBUjoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQlicmVhazsKKwkJY2FzZSBUUF9WT0lEOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgdm9pZCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfUFRSSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgcHRyZGlmZl90KTsKKwkJCWJyZWFrOworCQljYXNlIFRQX1BUUklOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKTsKKwkJCWJyZWFrOworCQljYXNlIFRfU0laRUlOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIHNpemVfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUX1NTSVpFSU5UOgorCQkJKHZvaWQpIHZhX2FyZyhhcCwgc3NpemVfdCk7CisJCQlicmVhazsKKwkJY2FzZSBUUF9TU0laRUlOVDoKKwkJCSh2b2lkKSB2YV9hcmcoYXAsIHNzaXplX3QgKik7CisJCQlicmVhazsKKwkJY2FzZSBUUF9NQVhJTlQ6CisJCQkodm9pZCkgdmFfYXJnKGFwLCBpbnRtYXhfdCAqKTsKKwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKHR5cGV0YWJsZSAhPSBOVUxMICYmIHR5cGV0YWJsZSAhPSBzdGF0dHlwZXRhYmxlKSB7CisJCW11bm1hcCh0eXBldGFibGUsICphcmd0YWJsZXNpeik7CisJCXR5cGV0YWJsZSA9IE5VTEw7CisJfQorfQorCisvKgorICogSW5jcmVhc2UgdGhlIHNpemUgb2YgdGhlIHR5cGUgdGFibGUuCisgKi8KK3N0YXRpYyBpbnQKK19fZ3Jvd190eXBlX3RhYmxlKHVuc2lnbmVkIGNoYXIgKip0eXBldGFibGUsIGludCAqdGFibGVzaXplKQoreworCXVuc2lnbmVkIGNoYXIgKm9sZHRhYmxlID0gKnR5cGV0YWJsZTsKKwlpbnQgbmV3c2l6ZSA9ICp0YWJsZXNpemUgKiAyOworCisJaWYgKCp0YWJsZXNpemUgPT0gU1RBVElDX0FSR19UQkxfU0laRSkgeworCQkqdHlwZXRhYmxlID0gKHVuc2lnbmVkIGNoYXIgKiltbWFwKE5VTEwsCisJCSAgICBzaXplb2YgKHVuc2lnbmVkIGNoYXIpICogbmV3c2l6ZSwgUFJPVF9XUklURXxQUk9UX1JFQUQsCisJCSAgICBNQVBfQU5PTnxNQVBfUFJJVkFURSwgLTEsIDApOworCQkvKiBYWFggdW5jaGVja2VkICovCisJCW1lbWNweSggKnR5cGV0YWJsZSwgb2xkdGFibGUsICp0YWJsZXNpemUpOworCX0gZWxzZSB7CisJCXVuc2lnbmVkIGNoYXIgKm5ldyA9ICh1bnNpZ25lZCBjaGFyICopbW1hcChOVUxMLAorCQkgICAgc2l6ZW9mICh1bnNpZ25lZCBjaGFyKSAqIG5ld3NpemUsIFBST1RfV1JJVEV8UFJPVF9SRUFELAorCQkgICAgTUFQX0FOT058TUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJbWVtbW92ZShuZXcsICp0eXBldGFibGUsICp0YWJsZXNpemUpOworCQltdW5tYXAoKnR5cGV0YWJsZSwgKnRhYmxlc2l6ZSk7CisJCSp0eXBldGFibGUgPSBuZXc7CisJCS8qIFhYWCB1bmNoZWNrZWQgKi8KKwl9CisJbWVtc2V0KCp0eXBldGFibGUgKyAqdGFibGVzaXplLCBUX1VOVVNFRCwgKG5ld3NpemUgLSAqdGFibGVzaXplKSk7CisKKwkqdGFibGVzaXplID0gbmV3c2l6ZTsKKwlyZXR1cm4oMCk7Cit9CisKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisKK2V4dGVybiBjaGFyICpfX2R0b2EoZG91YmxlLCBpbnQsIGludCwgaW50ICosIGludCAqLCBjaGFyICoqKTsKKworc3RhdGljIGNoYXIgKgorY3Z0KGRvdWJsZSB2YWx1ZSwgaW50IG5kaWdpdHMsIGludCBmbGFncywgY2hhciAqc2lnbiwgaW50ICpkZWNwdCwgaW50IGNoLAorICAgIGludCAqbGVuZ3RoKQoreworCWludCBtb2RlLCBkc2duOworCWNoYXIgKmRpZ2l0cywgKmJwLCAqcnZlOworCXN0YXRpYyAgY2hhciAgdGVtcFs2NF07CisKKwlpZiAoY2ggPT0gJ2YnKSB7CisJCW1vZGUgPSAzOwkJLyogbmRpZ2l0cyBhZnRlciB0aGUgZGVjaW1hbCBwb2ludCAqLworCX0gZWxzZSB7CisJCS8qIFRvIG9idGFpbiBuZGlnaXRzIGFmdGVyIHRoZSBkZWNpbWFsIHBvaW50IGZvciB0aGUgJ2UnCisJCSAqIGFuZCAnRScgZm9ybWF0cywgcm91bmQgdG8gbmRpZ2l0cyArIDEgc2lnbmlmaWNhbnQKKwkJICogZmlndXJlcy4KKwkJICovCisJCWlmIChjaCA9PSAnZScgfHwgY2ggPT0gJ0UnKSB7CisJCQluZGlnaXRzKys7CisJCX0KKwkJbW9kZSA9IDI7CQkvKiBuZGlnaXRzIHNpZ25pZmljYW50IGRpZ2l0cyAqLworCX0KKworCWlmICh2YWx1ZSA8IDApIHsKKwkJdmFsdWUgPSAtdmFsdWU7CisJCSpzaWduID0gJy0nOworCX0gZWxzZQorCQkqc2lnbiA9ICdcMDAwJzsKKwlkaWdpdHMgPSBfX2R0b2EodmFsdWUsIG1vZGUsIG5kaWdpdHMsIGRlY3B0LCAmZHNnbiwgJnJ2ZSk7CisJaWYgKChjaCAhPSAnZycgJiYgY2ggIT0gJ0cnKSB8fCBmbGFncyAmIEFMVCkgewkvKiBQcmludCB0cmFpbGluZyB6ZXJvcyAqLworCQlicCA9IGRpZ2l0cyArIG5kaWdpdHM7CisJCWlmIChjaCA9PSAnZicpIHsKKwkJCWlmICgqZGlnaXRzID09ICcwJyAmJiB2YWx1ZSkKKwkJCQkqZGVjcHQgPSAtbmRpZ2l0cyArIDE7CisJCQlicCArPSAqZGVjcHQ7CisJCX0KKwkJaWYgKHZhbHVlID09IDApCS8qIGtsdWRnZSBmb3IgX19kdG9hIGlycmVndWxhcml0eSAqLworCQkJcnZlID0gYnA7CisJCXdoaWxlIChydmUgPCBicCkKKwkJCSpydmUrKyA9ICcwJzsKKwl9CisJKmxlbmd0aCA9IHJ2ZSAtIGRpZ2l0czsKKwlyZXR1cm4gKGRpZ2l0cyk7Cit9CisKK3N0YXRpYyBpbnQKK2V4cG9uZW50KGNoYXIgKnAwLCBpbnQgZXhwLCBpbnQgZm10Y2gpCit7CisJY2hhciAqcCwgKnQ7CisJY2hhciBleHBidWZbTUFYRVhQXTsKKworCXAgPSBwMDsKKwkqcCsrID0gZm10Y2g7CisJaWYgKGV4cCA8IDApIHsKKwkJZXhwID0gLWV4cDsKKwkJKnArKyA9ICctJzsKKwl9CisJZWxzZQorCQkqcCsrID0gJysnOworCXQgPSBleHBidWYgKyBNQVhFWFA7CisJaWYgKGV4cCA+IDkpIHsKKwkJZG8geworCQkJKi0tdCA9IHRvX2NoYXIoZXhwICUgMTApOworCQl9IHdoaWxlICgoZXhwIC89IDEwKSA+IDkpOworCQkqLS10ID0gdG9fY2hhcihleHApOworCQlmb3IgKDsgdCA8IGV4cGJ1ZiArIE1BWEVYUDsgKnArKyA9ICp0KyspOworCX0KKwllbHNlIHsKKwkJKnArKyA9ICcwJzsKKwkJKnArKyA9IHRvX2NoYXIoZXhwKTsKKwl9CisJcmV0dXJuIChwIC0gcDApOworfQorCisKKy8qIEJJT05JQyAqLworI2luY2x1ZGUgPG1hY2hpbmUvaWVlZS5oPgordHlwZWRlZiB1bmlvbiB7CisgICAgZG91YmxlICAgICAgICAgICAgICBkOworICAgIHN0cnVjdCBpZWVlX2RvdWJsZSAgaTsKK30gaWVlZV91OworCitzdGF0aWMgaW50CitfbXlfaXNpbmYgKGRvdWJsZSAgdmFsdWUpCit7CisgICAgaWVlZV91ICAgdTsKKworICAgIHUuZCA9IHZhbHVlOworICAgIHJldHVybiAodS5pLmRibF9leHAgPT0gMjA0NyAmJiB1LmkuZGJsX2ZyYWNoID09IDAgJiYgdS5pLmRibF9mcmFjbCA9PSAwKTsKK30KKworc3RhdGljIGludAorX215X2lzbmFuIChkb3VibGUgIHZhbHVlKQoreworICAgIGllZWVfdSAgIHU7CisKKyAgICB1LmQgPSB2YWx1ZTsKKyAgICByZXR1cm4gKHUuaS5kYmxfZXhwID09IDIwNDcgJiYgKHUuaS5kYmxfZnJhY2ggIT0gMCB8fCB1LmkuZGJsX2ZyYWNsICE9IDApKTsKK30KKyNlbmRpZiAvKiBGTE9BVElOR19QT0lOVCAqLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92ZnNjYW5mLmMgYi9saWJjL3N0ZGlvL3Zmc2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmQwYThiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92ZnNjYW5mLmMKQEAgLTAsMCArMSw3OTEgQEAKKy8qCSRPcGVuQlNEOiB2ZnNjYW5mLmMsdiAxLjIxIDIwMDYvMDEvMTMgMjE6MzM6MjggbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisjaW5jbHVkZSAiZmxvYXRpby5oIgorI2VuZGlmCisKKyNkZWZpbmUJQlVGCQk1MTMJLyogTWF4aW11bSBsZW5ndGggb2YgbnVtZXJpYyBzdHJpbmcuICovCisKKy8qCisgKiBGbGFncyB1c2VkIGR1cmluZyBjb252ZXJzaW9uLgorICovCisjZGVmaW5lCUxPTkcJCTB4MDAwMDEJLyogbDogbG9uZyBvciBkb3VibGUgKi8KKyNkZWZpbmUJTE9OR0RCTAkJMHgwMDAwMgkvKiBMOiBsb25nIGRvdWJsZTsgdW5pbXBsZW1lbnRlZCAqLworI2RlZmluZQlTSE9SVAkJMHgwMDAwNAkvKiBoOiBzaG9ydCAqLworI2RlZmluZQlTSE9SVFNIT1JUCTB4MDAwMDgJLyogaGg6IDggYml0IGludGVnZXIgKi8KKyNkZWZpbmUgTExPTkcJCTB4MDAwMTAJLyogbGw6IGxvbmcgbG9uZyAoKyBkZXByZWNhdGVkIHE6IHF1YWQpICovCisjZGVmaW5lCVBPSU5URVIJCTB4MDAwMjAJLyogcDogdm9pZCAqIChhcyBoZXgpICovCisjZGVmaW5lCVNJWkVJTlQJCTB4MDAwNDAJLyogejogKHNpZ25lZCkgc2l6ZV90ICovCisjZGVmaW5lCU1BWElOVAkJMHgwMDA4MAkvKiBqOiBpbnRtYXhfdCAqLworI2RlZmluZQlQVFJJTlQJCTB4MDAxMDAJLyogdDogcHRyZGlmZl90ICovCisjZGVmaW5lCU5PU0tJUAkJMHgwMDIwMAkvKiBbIG9yIGM6IGRvIG5vdCBza2lwIGJsYW5rcyAqLworI2RlZmluZQlTVVBQUkVTUwkweDAwNDAwCS8qICo6IHN1cHByZXNzIGFzc2lnbm1lbnQgKi8KKyNkZWZpbmUJVU5TSUdORUQJMHgwMDgwMAkvKiAlW291cHhYXSBjb252ZXJzaW9ucyAqLworCisvKgorICogVGhlIGZvbGxvd2luZyBhcmUgdXNlZCBpbiBudW1lcmljIGNvbnZlcnNpb25zIG9ubHk6CisgKiBTSUdOT0ssIEhBVkVTSUdOLCBORElHSVRTLCBEUFRPSywgYW5kIEVYUE9LIGFyZSBmb3IgZmxvYXRpbmcgcG9pbnQ7CisgKiBTSUdOT0ssIEhBVkVTSUdOLCBORElHSVRTLCBQRlhPSywgYW5kIE5aRElHSVRTIGFyZSBmb3IgaW50ZWdyYWwuCisgKi8KKyNkZWZpbmUJU0lHTk9LCQkweDAxMDAwCS8qICsvLSBpcyAoc3RpbGwpIGxlZ2FsICovCisjZGVmaW5lCUhBVkVTSUdOCTB4MDIwMDAJLyogc2lnbiBkZXRlY3RlZCAqLworI2RlZmluZQlORElHSVRTCQkweDA0MDAwCS8qIG5vIGRpZ2l0cyBkZXRlY3RlZCAqLworCisjZGVmaW5lCURQVE9LCQkweDA4MDAwCS8qIChmbG9hdCkgZGVjaW1hbCBwb2ludCBpcyBzdGlsbCBsZWdhbCAqLworI2RlZmluZQlFWFBPSwkJMHgxMDAwMAkvKiAoZmxvYXQpIGV4cG9uZW50IChlKzMsIGV0Yykgc3RpbGwgbGVnYWwgKi8KKworI2RlZmluZQlQRlhPSwkJMHgwODAwMAkvKiAweCBwcmVmaXggaXMgKHN0aWxsKSBsZWdhbCAqLworI2RlZmluZQlOWkRJR0lUUwkweDEwMDAwCS8qIG5vIHplcm8gZGlnaXRzIGRldGVjdGVkICovCisKKy8qCisgKiBDb252ZXJzaW9uIHR5cGVzLgorICovCisjZGVmaW5lCUNUX0NIQVIJCTAJLyogJWMgY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9DQ0wJCTEJLyogJVsuLi5dIGNvbnZlcnNpb24gKi8KKyNkZWZpbmUJQ1RfU1RSSU5HCTIJLyogJXMgY29udmVyc2lvbiAqLworI2RlZmluZQlDVF9JTlQJCTMJLyogaW50ZWdlciwgaS5lLiwgc3RydG9pbWF4IG9yIHN0cnRvdW1heCAqLworI2RlZmluZQlDVF9GTE9BVAk0CS8qIGZsb2F0aW5nLCBpLmUuLCBzdHJ0b2QgKi8KKworI2RlZmluZSB1X2NoYXIgdW5zaWduZWQgY2hhcgorI2RlZmluZSB1X2xvbmcgdW5zaWduZWQgbG9uZworCitzdGF0aWMgdV9jaGFyICpfX3NjY2woY2hhciAqLCB1X2NoYXIgKik7CisKKyNpZiAhZGVmaW5lZChWRlNDQU5GKQorI2RlZmluZSBWRlNDQU5GCXZmc2NhbmYKKyNlbmRpZgorCisvKgorICogdmZzY2FuZgorICovCitpbnQKK1ZGU0NBTkYoRklMRSAqZnAsIGNvbnN0IGNoYXIgKmZtdDAsIF9fdmFfbGlzdCBhcCkKK3sKKwl1X2NoYXIgKmZtdCA9ICh1X2NoYXIgKilmbXQwOworCWludCBjOwkJLyogY2hhcmFjdGVyIGZyb20gZm9ybWF0LCBvciBjb252ZXJzaW9uICovCisJc2l6ZV90IHdpZHRoOwkvKiBmaWVsZCB3aWR0aCwgb3IgMCAqLworCWNoYXIgKnA7CS8qIHBvaW50cyBpbnRvIGFsbCBraW5kcyBvZiBzdHJpbmdzICovCisJaW50IG47CQkvKiBoYW5keSBpbnRlZ2VyICovCisJaW50IGZsYWdzOwkvKiBmbGFncyBhcyBkZWZpbmVkIGFib3ZlICovCisJY2hhciAqcDA7CS8qIHNhdmVzIG9yaWdpbmFsIHZhbHVlIG9mIHAgd2hlbiBuZWNlc3NhcnkgKi8KKwlpbnQgbmFzc2lnbmVkOwkJLyogbnVtYmVyIG9mIGZpZWxkcyBhc3NpZ25lZCAqLworCWludCBucmVhZDsJCS8qIG51bWJlciBvZiBjaGFyYWN0ZXJzIGNvbnN1bWVkIGZyb20gZnAgKi8KKwlpbnQgYmFzZTsJCS8qIGJhc2UgYXJndW1lbnQgdG8gc3RydG9pbWF4L3N0cnRvdWltYXggKi8KKwljaGFyIGNjbHRhYlsyNTZdOwkvKiBjaGFyYWN0ZXIgY2xhc3MgdGFibGUgZm9yICVbLi4uXSAqLworCWNoYXIgYnVmW0JVRl07CQkvKiBidWZmZXIgZm9yIG51bWVyaWMgY29udmVyc2lvbnMgKi8KKworCS8qIGBiYXNlZml4JyBpcyB1c2VkIHRvIGF2b2lkIGBpZicgdGVzdHMgaW4gdGhlIGludGVnZXIgc2Nhbm5lciAqLworCXN0YXRpYyBzaG9ydCBiYXNlZml4WzE3XSA9CisJCXsgMTAsIDEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2IH07CisKKwlfU0VUX09SSUVOVEFUSU9OKGZwLCAtMSk7CisKKwluYXNzaWduZWQgPSAwOworCW5yZWFkID0gMDsKKwliYXNlID0gMDsJCS8qIFhYWCBqdXN0IHRvIGtlZXAgZ2NjIGhhcHB5ICovCisJZm9yICg7OykgeworCQljID0gKmZtdCsrOworCQlpZiAoYyA9PSAwKQorCQkJcmV0dXJuIChuYXNzaWduZWQpOworCQlpZiAoaXNzcGFjZShjKSkgeworCQkJd2hpbGUgKChmcC0+X3IgPiAwIHx8IF9fc3JlZmlsbChmcCkgPT0gMCkgJiYKKwkJCSAgICBpc3NwYWNlKCpmcC0+X3ApKQorCQkJCW5yZWFkKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCWlmIChjICE9ICclJykKKwkJCWdvdG8gbGl0ZXJhbDsKKwkJd2lkdGggPSAwOworCQlmbGFncyA9IDA7CisJCS8qCisJCSAqIHN3aXRjaCBvbiB0aGUgZm9ybWF0LiAgY29udGludWUgaWYgZG9uZTsKKwkJICogYnJlYWsgb25jZSBmb3JtYXQgdHlwZSBpcyBkZXJpdmVkLgorCQkgKi8KK2FnYWluOgkJYyA9ICpmbXQrKzsKKwkJc3dpdGNoIChjKSB7CisJCWNhc2UgJyUnOgorbGl0ZXJhbDoKKwkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJCWdvdG8gaW5wdXRfZmFpbHVyZTsKKwkJCWlmICgqZnAtPl9wICE9IGMpCisJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJZnAtPl9yLS0sIGZwLT5fcCsrOworCQkJbnJlYWQrKzsKKwkJCWNvbnRpbnVlOworCisJCWNhc2UgJyonOgorCQkJZmxhZ3MgfD0gU1VQUFJFU1M7CisJCQlnb3RvIGFnYWluOworCQljYXNlICdqJzoKKwkJCWZsYWdzIHw9IE1BWElOVDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ0wnOgorCQkJZmxhZ3MgfD0gTE9OR0RCTDsKKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ2gnOgorCQkJaWYgKCpmbXQgPT0gJ2gnKSB7CisJCQkJZm10Kys7CisJCQkJZmxhZ3MgfD0gU0hPUlRTSE9SVDsKKwkJCX0gZWxzZSB7CisJCQkJZmxhZ3MgfD0gU0hPUlQ7CisJCQl9CisJCQlnb3RvIGFnYWluOworCQljYXNlICdsJzoKKwkJCWlmICgqZm10ID09ICdsJykgeworCQkJCWZtdCsrOworCQkJCWZsYWdzIHw9IExMT05HOworCQkJfSBlbHNlIHsKKwkJCQlmbGFncyB8PSBMT05HOworCQkJfQorCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAncSc6CisJCQlmbGFncyB8PSBMTE9ORzsJCS8qIGRlcHJlY2F0ZWQgKi8KKwkJCWdvdG8gYWdhaW47CisJCWNhc2UgJ3QnOgorCQkJZmxhZ3MgfD0gUFRSSU5UOworCQkJZ290byBhZ2FpbjsKKwkJY2FzZSAneic6CisJCQlmbGFncyB8PSBTSVpFSU5UOworCQkJZ290byBhZ2FpbjsKKworCQljYXNlICcwJzogY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzogY2FzZSAnNCc6CisJCWNhc2UgJzUnOiBjYXNlICc2JzogY2FzZSAnNyc6IGNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCXdpZHRoID0gd2lkdGggKiAxMCArIGMgLSAnMCc7CisJCQlnb3RvIGFnYWluOworCisJCS8qCisJCSAqIENvbnZlcnNpb25zLgorCQkgKiBUaG9zZSBtYXJrZWQgYGNvbXBhdCcgYXJlIGZvciA0LlsxMjNdQlNEIGNvbXBhdGliaWxpdHkuCisJCSAqCisJCSAqIChBY2NvcmRpbmcgdG8gQU5TSSwgRSBhbmQgWCBmb3JtYXRzIGFyZSBzdXBwb3NlZAorCQkgKiB0byB0aGUgc2FtZSBhcyBlIGFuZCB4LiAgU29ycnkgYWJvdXQgdGhhdC4pCisJCSAqLworCQljYXNlICdEJzoJLyogY29tcGF0ICovCisJCQlmbGFncyB8PSBMT05HOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnZCc6CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisKKwkJY2FzZSAnaSc6CisJCQljID0gQ1RfSU5UOworCQkJYmFzZSA9IDA7CisJCQlicmVhazsKKworCQljYXNlICdPJzoJLyogY29tcGF0ICovCisJCQlmbGFncyB8PSBMT05HOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnbyc6CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gODsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3UnOgorCQkJYyA9IENUX0lOVDsKKwkJCWZsYWdzIHw9IFVOU0lHTkVEOworCQkJYmFzZSA9IDEwOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWCc6CisJCWNhc2UgJ3gnOgorCQkJZmxhZ3MgfD0gUEZYT0s7CS8qIGVuYWJsZSAweCBwcmVmaXhpbmcgKi8KKwkJCWMgPSBDVF9JTlQ7CisJCQlmbGFncyB8PSBVTlNJR05FRDsKKwkJCWJhc2UgPSAxNjsKKwkJCWJyZWFrOworCisjaWZkZWYgRkxPQVRJTkdfUE9JTlQKKwkJY2FzZSAnRSc6CisJCWNhc2UgJ0cnOgorCQljYXNlICdlJzogCisJCWNhc2UgJ2YnOiAKKwkJY2FzZSAnZyc6CisJCQljID0gQ1RfRkxPQVQ7CisJCQlicmVhazsKKyNlbmRpZgorCisJCWNhc2UgJ3MnOgorCQkJYyA9IENUX1NUUklORzsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1snOgorCQkJZm10ID0gX19zY2NsKGNjbHRhYiwgZm10KTsKKwkJCWZsYWdzIHw9IE5PU0tJUDsKKwkJCWMgPSBDVF9DQ0w7CisJCQlicmVhazsKKworCQljYXNlICdjJzoKKwkJCWZsYWdzIHw9IE5PU0tJUDsKKwkJCWMgPSBDVF9DSEFSOworCQkJYnJlYWs7CisKKwkJY2FzZSAncCc6CS8qIHBvaW50ZXIgZm9ybWF0IGlzIGxpa2UgaGV4ICovCisJCQlmbGFncyB8PSBQT0lOVEVSIHwgUEZYT0s7CisJCQljID0gQ1RfSU5UOworCQkJZmxhZ3MgfD0gVU5TSUdORUQ7CisJCQliYXNlID0gMTY7CisJCQlicmVhazsKKworCQljYXNlICduJzoKKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKQorCQkJCWNvbnRpbnVlOworCQkJaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkqdmFfYXJnKGFwLCBfX3NpZ25lZCBjaGFyICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIFNIT1JUKQorCQkJCSp2YV9hcmcoYXAsIHNob3J0ICopID0gbnJlYWQ7CisJCQllbHNlIGlmIChmbGFncyAmIExPTkcpCisJCQkJKnZhX2FyZyhhcCwgbG9uZyAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCSp2YV9hcmcoYXAsIHNzaXplX3QgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCSp2YV9hcmcoYXAsIHB0cmRpZmZfdCAqKSA9IG5yZWFkOworCQkJZWxzZSBpZiAoZmxhZ3MgJiBMTE9ORykKKwkJCQkqdmFfYXJnKGFwLCBsb25nIGxvbmcgKikgPSBucmVhZDsKKwkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCSp2YV9hcmcoYXAsIGludG1heF90ICopID0gbnJlYWQ7CisJCQllbHNlCisJCQkJKnZhX2FyZyhhcCwgaW50ICopID0gbnJlYWQ7CisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBEaXNndXN0aW5nIGJhY2t3YXJkcyBjb21wYXRpYmlsaXR5IGhhY2tzLglYWFgKKwkJICovCisJCWNhc2UgJ1wwJzoJLyogY29tcGF0ICovCisJCQlyZXR1cm4gKEVPRik7CisKKwkJZGVmYXVsdDoJLyogY29tcGF0ICovCisJCQlpZiAoaXN1cHBlcihjKSkKKwkJCQlmbGFncyB8PSBMT05HOworCQkJYyA9IENUX0lOVDsKKwkJCWJhc2UgPSAxMDsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogV2UgaGF2ZSBhIGNvbnZlcnNpb24gdGhhdCByZXF1aXJlcyBpbnB1dC4KKwkJICovCisJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJZ290byBpbnB1dF9mYWlsdXJlOworCisJCS8qCisJCSAqIENvbnN1bWUgbGVhZGluZyB3aGl0ZSBzcGFjZSwgZXhjZXB0IGZvciBmb3JtYXRzCisJCSAqIHRoYXQgc3VwcHJlc3MgdGhpcy4KKwkJICovCisJCWlmICgoZmxhZ3MgJiBOT1NLSVApID09IDApIHsKKwkJCXdoaWxlIChpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJbnJlYWQrKzsKKwkJCQlpZiAoLS1mcC0+X3IgPiAwKQorCQkJCQlmcC0+X3ArKzsKKwkJCQllbHNlIGlmIChfX3NyZWZpbGwoZnApKQorCQkJCQlnb3RvIGlucHV0X2ZhaWx1cmU7CisJCQl9CisJCQkvKgorCQkJICogTm90ZSB0aGF0IHRoZXJlIGlzIGF0IGxlYXN0IG9uZSBjaGFyYWN0ZXIgaW4KKwkJCSAqIHRoZSBidWZmZXIsIHNvIGNvbnZlcnNpb25zIHRoYXQgZG8gbm90IHNldCBOT1NLSVAKKwkJCSAqIGNhIG5vIGxvbmdlciByZXN1bHQgaW4gYW4gaW5wdXQgZmFpbHVyZS4KKwkJCSAqLworCQl9CisKKwkJLyoKKwkJICogRG8gdGhlIGNvbnZlcnNpb24uCisJCSAqLworCQlzd2l0Y2ggKGMpIHsKKworCQljYXNlIENUX0NIQVI6CisJCQkvKiBzY2FuIGFyYml0cmFyeSBjaGFyYWN0ZXJzIChzZXRzIE5PU0tJUCkgKi8KKwkJCWlmICh3aWR0aCA9PSAwKQorCQkJCXdpZHRoID0gMTsKKwkJCWlmIChmbGFncyAmIFNVUFBSRVNTKSB7CisJCQkJc2l6ZV90IHN1bSA9IDA7CisJCQkJZm9yICg7OykgeworCQkJCQlpZiAoKG4gPSBmcC0+X3IpIDwgKGludCl3aWR0aCkgeworCQkJCQkJc3VtICs9IG47CisJCQkJCQl3aWR0aCAtPSBuOworCQkJCQkJZnAtPl9wICs9IG47CisJCQkJCQlpZiAoX19zcmVmaWxsKGZwKSkgeworCQkJCQkJCWlmIChzdW0gPT0gMCkKKwkJCQkJCQkgICAgZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJCWJyZWFrOworCQkJCQkJfQorCQkJCQl9IGVsc2UgeworCQkJCQkJc3VtICs9IHdpZHRoOworCQkJCQkJZnAtPl9yIC09IHdpZHRoOworCQkJCQkJZnAtPl9wICs9IHdpZHRoOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJbnJlYWQgKz0gc3VtOworCQkJfSBlbHNlIHsKKwkJCQlzaXplX3QgciA9IGZyZWFkKCh2b2lkICopdmFfYXJnKGFwLCBjaGFyICopLCAxLAorCQkJCSAgICB3aWR0aCwgZnApOworCisJCQkJaWYgKHIgPT0gMCkKKwkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCW5yZWFkICs9IHI7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlicmVhazsKKworCQljYXNlIENUX0NDTDoKKwkJCS8qIHNjYW4gYSAobm9uZW1wdHkpIGNoYXJhY3RlciBjbGFzcyAoc2V0cyBOT1NLSVApICovCisJCQlpZiAod2lkdGggPT0gMCkKKwkJCQl3aWR0aCA9IChzaXplX3QpfjA7CS8qIGBpbmZpbml0eScgKi8KKwkJCS8qIHRha2Ugb25seSB0aG9zZSB0aGluZ3MgaW4gdGhlIGNsYXNzICovCisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykgeworCQkJCW4gPSAwOworCQkJCXdoaWxlIChjY2x0YWJbKmZwLT5fcF0pIHsKKwkJCQkJbisrLCBmcC0+X3ItLSwgZnAtPl9wKys7CisJCQkJCWlmICgtLXdpZHRoID09IDApCisJCQkJCQlicmVhazsKKwkJCQkJaWYgKGZwLT5fciA8PSAwICYmIF9fc3JlZmlsbChmcCkpIHsKKwkJCQkJCWlmIChuID09IDApCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJaWYgKG4gPT0gMCkKKwkJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJfSBlbHNlIHsKKwkJCQlwMCA9IHAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJd2hpbGUgKGNjbHRhYlsqZnAtPl9wXSkgeworCQkJCQlmcC0+X3ItLTsKKwkJCQkJKnArKyA9ICpmcC0+X3ArKzsKKwkJCQkJaWYgKC0td2lkdGggPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkgeworCQkJCQkJaWYgKHAgPT0gcDApCisJCQkJCQkJZ290byBpbnB1dF9mYWlsdXJlOworCQkJCQkJYnJlYWs7CisJCQkJCX0KKwkJCQl9CisJCQkJbiA9IHAgLSBwMDsKKwkJCQlpZiAobiA9PSAwKQorCQkJCQlnb3RvIG1hdGNoX2ZhaWx1cmU7CisJCQkJKnAgPSAnXDAnOworCQkJCW5hc3NpZ25lZCsrOworCQkJfQorCQkJbnJlYWQgKz0gbjsKKwkJCWJyZWFrOworCisJCWNhc2UgQ1RfU1RSSU5HOgorCQkJLyogbGlrZSBDQ0wsIGJ1dCB6ZXJvLWxlbmd0aCBzdHJpbmcgT0ssICYgbm8gTk9TS0lQICovCisJCQlpZiAod2lkdGggPT0gMCkKKwkJCQl3aWR0aCA9IChzaXplX3QpfjA7CisJCQlpZiAoZmxhZ3MgJiBTVVBQUkVTUykgeworCQkJCW4gPSAwOworCQkJCXdoaWxlICghaXNzcGFjZSgqZnAtPl9wKSkgeworCQkJCQluKyssIGZwLT5fci0tLCBmcC0+X3ArKzsKKwkJCQkJaWYgKC0td2lkdGggPT0gMCkKKwkJCQkJCWJyZWFrOworCQkJCQlpZiAoZnAtPl9yIDw9IDAgJiYgX19zcmVmaWxsKGZwKSkKKwkJCQkJCWJyZWFrOworCQkJCX0KKwkJCQlucmVhZCArPSBuOworCQkJfSBlbHNlIHsKKwkJCQlwMCA9IHAgPSB2YV9hcmcoYXAsIGNoYXIgKik7CisJCQkJd2hpbGUgKCFpc3NwYWNlKCpmcC0+X3ApKSB7CisJCQkJCWZwLT5fci0tOworCQkJCQkqcCsrID0gKmZwLT5fcCsrOworCQkJCQlpZiAoLS13aWR0aCA9PSAwKQorCQkJCQkJYnJlYWs7CisJCQkJCWlmIChmcC0+X3IgPD0gMCAmJiBfX3NyZWZpbGwoZnApKQorCQkJCQkJYnJlYWs7CisJCQkJfQorCQkJCSpwID0gJ1wwJzsKKwkJCQlucmVhZCArPSBwIC0gcDA7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQljb250aW51ZTsKKworCQljYXNlIENUX0lOVDoKKwkJCS8qIHNjYW4gYW4gaW50ZWdlciBhcyBpZiBieSBzdHJ0b2ltYXgvc3RydG91bWF4ICovCisjaWZkZWYgaGFyZHdheQorCQkJaWYgKHdpZHRoID09IDAgfHwgd2lkdGggPiBzaXplb2YoYnVmKSAtIDEpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDE7CisjZWxzZQorCQkJLyogc2l6ZV90IGlzIHVuc2lnbmVkLCBoZW5jZSB0aGlzIG9wdGltaXNhdGlvbiAqLworCQkJaWYgKC0td2lkdGggPiBzaXplb2YoYnVmKSAtIDIpCisJCQkJd2lkdGggPSBzaXplb2YoYnVmKSAtIDI7CisJCQl3aWR0aCsrOworI2VuZGlmCisJCQlmbGFncyB8PSBTSUdOT0sgfCBORElHSVRTIHwgTlpESUdJVFM7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9ICpmcC0+X3A7CisJCQkJLyoKKwkJCQkgKiBTd2l0Y2ggb24gdGhlIGNoYXJhY3RlcjsgYGdvdG8gb2snCisJCQkJICogaWYgd2UgYWNjZXB0IGl0IGFzIGEgcGFydCBvZiBudW1iZXIuCisJCQkJICovCisJCQkJc3dpdGNoIChjKSB7CisKKwkJCQkvKgorCQkJCSAqIFRoZSBkaWdpdCAwIGlzIGFsd2F5cyBsZWdhbCwgYnV0IGlzCisJCQkJICogc3BlY2lhbC4gIEZvciAlaSBjb252ZXJzaW9ucywgaWYgbm8KKwkJCQkgKiBkaWdpdHMgKHplcm8gb3Igbm9uemVybykgaGF2ZSBiZWVuCisJCQkJICogc2Nhbm5lZCAob25seSBzaWducyksIHdlIHdpbGwgaGF2ZQorCQkJCSAqIGJhc2U9PTAuICBJbiB0aGF0IGNhc2UsIHdlIHNob3VsZCBzZXQKKwkJCQkgKiBpdCB0byA4IGFuZCBlbmFibGUgMHggcHJlZml4aW5nLgorCQkJCSAqIEFsc28sIGlmIHdlIGhhdmUgbm90IHNjYW5uZWQgemVybyBkaWdpdHMKKwkJCQkgKiBiZWZvcmUgdGhpcywgZG8gbm90IHR1cm4gb2ZmIHByZWZpeGluZworCQkJCSAqIChzb21lb25lIGVsc2Ugd2lsbCB0dXJuIGl0IG9mZiBpZiB3ZQorCQkJCSAqIGhhdmUgc2Nhbm5lZCBhbnkgbm9uemVybyBkaWdpdHMpLgorCQkJCSAqLworCQkJCWNhc2UgJzAnOgorCQkJCQlpZiAoYmFzZSA9PSAwKSB7CisJCQkJCQliYXNlID0gODsKKwkJCQkJCWZsYWdzIHw9IFBGWE9LOworCQkJCQl9CisJCQkJCWlmIChmbGFncyAmIE5aRElHSVRTKQorCQkJCQkgICAgZmxhZ3MgJj0gfihTSUdOT0t8TlpESUdJVFN8TkRJR0lUUyk7CisJCQkJCWVsc2UKKwkJCQkJICAgIGZsYWdzICY9IH4oU0lHTk9LfFBGWE9LfE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogMSB0aHJvdWdoIDcgYWx3YXlzIGxlZ2FsICovCisJCQkJY2FzZSAnMSc6IGNhc2UgJzInOiBjYXNlICczJzoKKwkJCQljYXNlICc0JzogY2FzZSAnNSc6IGNhc2UgJzYnOiBjYXNlICc3JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIGRpZ2l0cyA4IGFuZCA5IG9rIGlmZiBkZWNpbWFsIG9yIGhleCAqLworCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJYmFzZSA9IGJhc2VmaXhbYmFzZV07CisJCQkJCWlmIChiYXNlIDw9IDgpCisJCQkJCQlicmVhazsJLyogbm90IGxlZ2FsIGhlcmUgKi8KKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBQRlhPSyB8IE5ESUdJVFMpOworCQkJCQlnb3RvIG9rOworCisJCQkJLyogbGV0dGVycyBvayBpZmYgaGV4ICovCisJCQkJY2FzZSAnQSc6IGNhc2UgJ0InOiBjYXNlICdDJzoKKwkJCQljYXNlICdEJzogY2FzZSAnRSc6IGNhc2UgJ0YnOgorCQkJCWNhc2UgJ2EnOiBjYXNlICdiJzogY2FzZSAnYyc6CisJCQkJY2FzZSAnZCc6IGNhc2UgJ2UnOiBjYXNlICdmJzoKKwkJCQkJLyogbm8gbmVlZCB0byBmaXggYmFzZSBoZXJlICovCisJCQkJCWlmIChiYXNlIDw9IDEwKQorCQkJCQkJYnJlYWs7CS8qIG5vdCBsZWdhbCBoZXJlICovCisJCQkJCWZsYWdzICY9IH4oU0lHTk9LIHwgUEZYT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBvazsKKworCQkJCS8qIHNpZ24gb2sgb25seSBhcyBmaXJzdCBjaGFyYWN0ZXIgKi8KKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWZsYWdzIHw9IEhBVkVTSUdOOworCQkJCQkJZ290byBvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKworCQkJCS8qCisJCQkJICogeCBvayBpZmYgZmxhZyBzdGlsbCBzZXQgYW5kIDJuZCBjaGFyIChvcgorCQkJCSAqIDNyZCBjaGFyIGlmIHdlIGhhdmUgYSBzaWduKS4KKwkJCQkgKi8KKwkJCQljYXNlICd4JzogY2FzZSAnWCc6CisJCQkJCWlmICgoZmxhZ3MgJiBQRlhPSykgJiYgcCA9PQorCQkJCQkgICAgYnVmICsgMSArICEhKGZsYWdzICYgSEFWRVNJR04pKSB7CisJCQkJCQliYXNlID0gMTY7CS8qIGlmICVpICovCisJCQkJCQlmbGFncyAmPSB+UEZYT0s7CisJCQkJCQlnb3RvIG9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCX0KKworCQkJCS8qCisJCQkJICogSWYgd2UgZ290IGhlcmUsIGMgaXMgbm90IGEgbGVnYWwgY2hhcmFjdGVyCisJCQkJICogZm9yIGEgbnVtYmVyLiAgU3RvcCBhY2N1bXVsYXRpbmcgZGlnaXRzLgorCQkJCSAqLworCQkJCWJyZWFrOworCQlvazoKKwkJCQkvKgorCQkJCSAqIGMgaXMgbGVnYWw6IHN0b3JlIGl0IGFuZCBsb29rIGF0IHRoZSBuZXh0LgorCQkJCSAqLworCQkJCSpwKysgPSBjOworCQkJCWlmICgtLWZwLT5fciA+IDApCisJCQkJCWZwLT5fcCsrOworCQkJCWVsc2UgaWYgKF9fc3JlZmlsbChmcCkpCisJCQkJCWJyZWFrOwkJLyogRU9GICovCisJCQl9CisJCQkvKgorCQkJICogSWYgd2UgaGFkIG9ubHkgYSBzaWduLCBpdCBpcyBubyBnb29kOyBwdXNoCisJCQkgKiBiYWNrIHRoZSBzaWduLiAgSWYgdGhlIG51bWJlciBlbmRzIGluIGB4JywKKwkJCSAqIGl0IHdhcyBbc2lnbl0gJzAnICd4Jywgc28gcHVzaCBiYWNrIHRoZSB4CisJCQkgKiBhbmQgdHJlYXQgaXQgYXMgW3NpZ25dICcwJy4KKwkJCSAqLworCQkJaWYgKGZsYWdzICYgTkRJR0lUUykgeworCQkJCWlmIChwID4gYnVmKQorCQkJCQkodm9pZCkgdW5nZXRjKCoodV9jaGFyICopLS1wLCBmcCk7CisJCQkJZ290byBtYXRjaF9mYWlsdXJlOworCQkJfQorCQkJYyA9ICgodV9jaGFyICopcClbLTFdOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKSB7CisJCQkJLS1wOworCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOworCQkJfQorCQkJaWYgKChmbGFncyAmIFNVUFBSRVNTKSA9PSAwKSB7CisJCQkJdWludG1heF90IHJlczsKKworCQkJCSpwID0gJ1wwJzsKKwkJCQlpZiAoZmxhZ3MgJiBVTlNJR05FRCkKKwkJCQkJcmVzID0gc3RydG91bWF4KGJ1ZiwgTlVMTCwgYmFzZSk7CisJCQkJZWxzZQorCQkJCQlyZXMgPSBzdHJ0b2ltYXgoYnVmLCBOVUxMLCBiYXNlKTsKKwkJCQlpZiAoZmxhZ3MgJiBQT0lOVEVSKQorCQkJCQkqdmFfYXJnKGFwLCB2b2lkICoqKSA9CisJCQkJCSAgICAodm9pZCAqKSh1aW50cHRyX3QpcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTUFYSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBpbnRtYXhfdCAqKSA9IHJlczsKKwkJCQllbHNlIGlmIChmbGFncyAmIExMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nIGxvbmcgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBTSVpFSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBzc2l6ZV90ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgUFRSSU5UKQorCQkJCQkqdmFfYXJnKGFwLCBwdHJkaWZmX3QgKikgPSByZXM7CisJCQkJZWxzZSBpZiAoZmxhZ3MgJiBMT05HKQorCQkJCQkqdmFfYXJnKGFwLCBsb25nICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlQpCisJCQkJCSp2YV9hcmcoYXAsIHNob3J0ICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgU0hPUlRTSE9SVCkKKwkJCQkJKnZhX2FyZyhhcCwgX19zaWduZWQgY2hhciAqKSA9IHJlczsKKwkJCQllbHNlCisJCQkJCSp2YV9hcmcoYXAsIGludCAqKSA9IHJlczsKKwkJCQluYXNzaWduZWQrKzsKKwkJCX0KKwkJCW5yZWFkICs9IHAgLSBidWY7CisJCQlicmVhazsKKworI2lmZGVmIEZMT0FUSU5HX1BPSU5UCisJCWNhc2UgQ1RfRkxPQVQ6CisJCQkvKiBzY2FuIGEgZmxvYXRpbmcgcG9pbnQgbnVtYmVyIGFzIGlmIGJ5IHN0cnRvZCAqLworI2lmZGVmIGhhcmR3YXkKKwkJCWlmICh3aWR0aCA9PSAwIHx8IHdpZHRoID4gc2l6ZW9mKGJ1ZikgLSAxKQorCQkJCXdpZHRoID0gc2l6ZW9mKGJ1ZikgLSAxOworI2Vsc2UKKwkJCS8qIHNpemVfdCBpcyB1bnNpZ25lZCwgaGVuY2UgdGhpcyBvcHRpbWlzYXRpb24gKi8KKwkJCWlmICgtLXdpZHRoID4gc2l6ZW9mKGJ1ZikgLSAyKQorCQkJCXdpZHRoID0gc2l6ZW9mKGJ1ZikgLSAyOworCQkJd2lkdGgrKzsKKyNlbmRpZgorCQkJZmxhZ3MgfD0gU0lHTk9LIHwgTkRJR0lUUyB8IERQVE9LIHwgRVhQT0s7CisJCQlmb3IgKHAgPSBidWY7IHdpZHRoOyB3aWR0aC0tKSB7CisJCQkJYyA9ICpmcC0+X3A7CisJCQkJLyoKKwkJCQkgKiBUaGlzIGNvZGUgbWltaWNrcyB0aGUgaW50ZWdlciBjb252ZXJzaW9uCisJCQkJICogY29kZSwgYnV0IGlzIG11Y2ggc2ltcGxlci4KKwkJCQkgKi8KKwkJCQlzd2l0Y2ggKGMpIHsKKworCQkJCWNhc2UgJzAnOiBjYXNlICcxJzogY2FzZSAnMic6IGNhc2UgJzMnOgorCQkJCWNhc2UgJzQnOiBjYXNlICc1JzogY2FzZSAnNic6IGNhc2UgJzcnOgorCQkJCWNhc2UgJzgnOiBjYXNlICc5JzoKKwkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBORElHSVRTKTsKKwkJCQkJZ290byBmb2s7CisKKwkJCQljYXNlICcrJzogY2FzZSAnLSc6CisJCQkJCWlmIChmbGFncyAmIFNJR05PSykgeworCQkJCQkJZmxhZ3MgJj0gflNJR05PSzsKKwkJCQkJCWdvdG8gZm9rOworCQkJCQl9CisJCQkJCWJyZWFrOworCQkJCWNhc2UgJy4nOgorCQkJCQlpZiAoZmxhZ3MgJiBEUFRPSykgeworCQkJCQkJZmxhZ3MgJj0gfihTSUdOT0sgfCBEUFRPSyk7CisJCQkJCQlnb3RvIGZvazsKKwkJCQkJfQorCQkJCQlicmVhazsKKwkJCQljYXNlICdlJzogY2FzZSAnRSc6CisJCQkJCS8qIG5vIGV4cG9uZW50IHdpdGhvdXQgc29tZSBkaWdpdHMgKi8KKwkJCQkJaWYgKChmbGFncyYoTkRJR0lUU3xFWFBPSykpID09IEVYUE9LKSB7CisJCQkJCQlmbGFncyA9CisJCQkJCQkgICAgKGZsYWdzICYgfihFWFBPS3xEUFRPSykpIHwKKwkJCQkJCSAgICBTSUdOT0sgfCBORElHSVRTOworCQkJCQkJZ290byBmb2s7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQlmb2s6CisJCQkJKnArKyA9IGM7CisJCQkJaWYgKC0tZnAtPl9yID4gMCkKKwkJCQkJZnAtPl9wKys7CisJCQkJZWxzZSBpZiAoX19zcmVmaWxsKGZwKSkKKwkJCQkJYnJlYWs7CS8qIEVPRiAqLworCQkJfQorCQkJLyoKKwkJCSAqIElmIG5vIGRpZ2l0cywgbWlnaHQgYmUgbWlzc2luZyBleHBvbmVudCBkaWdpdHMKKwkJCSAqIChqdXN0IGdpdmUgYmFjayB0aGUgZXhwb25lbnQpIG9yIG1pZ2h0IGJlIG1pc3NpbmcKKwkJCSAqIHJlZ3VsYXIgZGlnaXRzLCBidXQgaGFkIHNpZ24gYW5kL29yIGRlY2ltYWwgcG9pbnQuCisJCQkgKi8KKwkJCWlmIChmbGFncyAmIE5ESUdJVFMpIHsKKwkJCQlpZiAoZmxhZ3MgJiBFWFBPSykgeworCQkJCQkvKiBubyBkaWdpdHMgYXQgYWxsICovCisJCQkJCXdoaWxlIChwID4gYnVmKQorCQkJCQkJdW5nZXRjKCoodV9jaGFyICopLS1wLCBmcCk7CisJCQkJCWdvdG8gbWF0Y2hfZmFpbHVyZTsKKwkJCQl9CisJCQkJLyoganVzdCBhIGJhZCBleHBvbmVudCAoZSBhbmQgbWF5YmUgc2lnbikgKi8KKwkJCQljID0gKih1X2NoYXIgKiktLXA7CisJCQkJaWYgKGMgIT0gJ2UnICYmIGMgIT0gJ0UnKSB7CisJCQkJCSh2b2lkKSB1bmdldGMoYywgZnApOy8qIHNpZ24gKi8KKwkJCQkJYyA9ICoodV9jaGFyICopLS1wOworCQkJCX0KKwkJCQkodm9pZCkgdW5nZXRjKGMsIGZwKTsKKwkJCX0KKwkJCWlmICgoZmxhZ3MgJiBTVVBQUkVTUykgPT0gMCkgeworCQkJCWRvdWJsZSByZXM7CisKKwkJCQkqcCA9ICdcMCc7CisJCQkJcmVzID0gc3RydG9kKGJ1ZiwgKGNoYXIgKiopIE5VTEwpOworCQkJCWlmIChmbGFncyAmIExPTkdEQkwpCisJCQkJCSp2YV9hcmcoYXAsIGxvbmcgZG91YmxlICopID0gcmVzOworCQkJCWVsc2UgaWYgKGZsYWdzICYgTE9ORykKKwkJCQkJKnZhX2FyZyhhcCwgZG91YmxlICopID0gcmVzOworCQkJCWVsc2UKKwkJCQkJKnZhX2FyZyhhcCwgZmxvYXQgKikgPSByZXM7CisJCQkJbmFzc2lnbmVkKys7CisJCQl9CisJCQlucmVhZCArPSBwIC0gYnVmOworCQkJYnJlYWs7CisjZW5kaWYgLyogRkxPQVRJTkdfUE9JTlQgKi8KKwkJfQorCX0KK2lucHV0X2ZhaWx1cmU6CisJcmV0dXJuIChuYXNzaWduZWQgPyBuYXNzaWduZWQgOiAtMSk7CittYXRjaF9mYWlsdXJlOgorCXJldHVybiAobmFzc2lnbmVkKTsKK30KKworLyoKKyAqIEZpbGwgaW4gdGhlIGdpdmVuIHRhYmxlIGZyb20gdGhlIHNjYW5zZXQgYXQgdGhlIGdpdmVuIGZvcm1hdAorICogKGp1c3QgYWZ0ZXIgYFsnKS4gIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGNoYXJhY3RlciBwYXN0IHRoZQorICogY2xvc2luZyBgXScuICBUaGUgdGFibGUgaGFzIGEgMSB3aGVyZXZlciBjaGFyYWN0ZXJzIHNob3VsZCBiZQorICogY29uc2lkZXJlZCBwYXJ0IG9mIHRoZSBzY2Fuc2V0LgorICovCitzdGF0aWMgdV9jaGFyICoKK19fc2NjbChjaGFyICp0YWIsIHVfY2hhciAqZm10KQoreworCWludCBjLCBuLCB2OworCisJLyogZmlyc3QgYGNsZWFyJyB0aGUgd2hvbGUgdGFibGUgKi8KKwljID0gKmZtdCsrOwkJLyogZmlyc3QgY2hhciBoYXQgPT4gbmVnYXRlZCBzY2Fuc2V0ICovCisJaWYgKGMgPT0gJ14nKSB7CisJCXYgPSAxOwkJLyogZGVmYXVsdCA9PiBhY2NlcHQgKi8KKwkJYyA9ICpmbXQrKzsJLyogZ2V0IG5ldyBmaXJzdCBjaGFyICovCisJfSBlbHNlCisJCXYgPSAwOwkJLyogZGVmYXVsdCA9PiByZWplY3QgKi8KKwkvKiBzaG91bGQgcHJvYmFibHkgdXNlIG1lbXNldCBoZXJlICovCisJZm9yIChuID0gMDsgbiA8IDI1NjsgbisrKQorCQl0YWJbbl0gPSB2OworCWlmIChjID09IDApCisJCXJldHVybiAoZm10IC0gMSk7LyogZm9ybWF0IGVuZGVkIGJlZm9yZSBjbG9zaW5nIF0gKi8KKworCS8qCisJICogTm93IHNldCB0aGUgZW50cmllcyBjb3JyZXNwb25kaW5nIHRvIHRoZSBhY3R1YWwgc2NhbnNldAorCSAqIHRvIHRoZSBvcHBvc2l0ZSBvZiB0aGUgYWJvdmUuCisJICoKKwkgKiBUaGUgZmlyc3QgY2hhcmFjdGVyIG1heSBiZSAnXScgKG9yICctJykgd2l0aG91dCBiZWluZyBzcGVjaWFsOworCSAqIHRoZSBsYXN0IGNoYXJhY3RlciBtYXkgYmUgJy0nLgorCSAqLworCXYgPSAxIC0gdjsKKwlmb3IgKDs7KSB7CisJCXRhYltjXSA9IHY7CQkvKiB0YWtlIGNoYXJhY3RlciBjICovCitkb3N3aXRjaDoKKwkJbiA9ICpmbXQrKzsJCS8qIGFuZCBleGFtaW5lIHRoZSBuZXh0ICovCisJCXN3aXRjaCAobikgeworCisJCWNhc2UgMDoJCQkvKiBmb3JtYXQgZW5kZWQgdG9vIHNvb24gKi8KKwkJCXJldHVybiAoZm10IC0gMSk7CisKKwkJY2FzZSAnLSc6CisJCQkvKgorCQkJICogQSBzY2Fuc2V0IG9mIHRoZSBmb3JtCisJCQkgKglbMDErLV0KKwkJCSAqIGlzIGRlZmluZWQgYXMgYHRoZSBkaWdpdCAwLCB0aGUgZGlnaXQgMSwKKwkJCSAqIHRoZSBjaGFyYWN0ZXIgKywgdGhlIGNoYXJhY3RlciAtJywgYnV0CisJCQkgKiB0aGUgZWZmZWN0IG9mIGEgc2NhbnNldCBzdWNoIGFzCisJCQkgKglbYS16QS1aMC05XQorCQkJICogaXMgaW1wbGVtZW50YXRpb24gZGVmaW5lZC4gIFRoZSBWNyBVbml4CisJCQkgKiBzY2FuZiB0cmVhdHMgYGEteicgYXMgYHRoZSBsZXR0ZXJzIGEgdGhyb3VnaAorCQkJICogeicsIGJ1dCB0cmVhdHMgYGEtYScgYXMgYHRoZSBsZXR0ZXIgYSwgdGhlCisJCQkgKiBjaGFyYWN0ZXIgLSwgYW5kIHRoZSBsZXR0ZXIgYScuCisJCQkgKgorCQkJICogRm9yIGNvbXBhdGliaWxpdHksIHRoZSBgLScgaXMgbm90IGNvbnNpZGVyZAorCQkJICogdG8gZGVmaW5lIGEgcmFuZ2UgaWYgdGhlIGNoYXJhY3RlciBmb2xsb3dpbmcKKwkJCSAqIGl0IGlzIGVpdGhlciBhIGNsb3NlIGJyYWNrZXQgKHJlcXVpcmVkIGJ5IEFOU0kpCisJCQkgKiBvciBpcyBub3QgbnVtZXJpY2FsbHkgZ3JlYXRlciB0aGFuIHRoZSBjaGFyYWN0ZXIKKwkJCSAqIHdlIGp1c3Qgc3RvcmVkIGluIHRoZSB0YWJsZSAoYykuCisJCQkgKi8KKwkJCW4gPSAqZm10OworCQkJaWYgKG4gPT0gJ10nIHx8IG4gPCBjKSB7CisJCQkJYyA9ICctJzsKKwkJCQlicmVhazsJLyogcmVzdW1lIHRoZSBmb3IoOzspICovCisJCQl9CisJCQlmbXQrKzsKKwkJCWRvIHsJCS8qIGZpbGwgaW4gdGhlIHJhbmdlICovCisJCQkJdGFiWysrY10gPSB2OworCQkJfSB3aGlsZSAoYyA8IG4pOworI2lmIDEJLyogWFhYIGFub3RoZXIgZGlzZ3VzdGluZyBjb21wYXRpYmlsaXR5IGhhY2sgKi8KKwkJCS8qCisJCQkgKiBBbGFzLCB0aGUgVjcgVW5peCBzY2FuZiBhbHNvIHRyZWF0cyBmb3JtYXRzCisJCQkgKiBzdWNoIGFzIFthLWMtZV0gYXMgYHRoZSBsZXR0ZXJzIGEgdGhyb3VnaCBlJy4KKwkJCSAqIFRoaXMgdG9vIGlzIHBlcm1pdHRlZCBieSB0aGUgc3RhbmRhcmQuLi4uCisJCQkgKi8KKwkJCWdvdG8gZG9zd2l0Y2g7CisjZWxzZQorCQkJYyA9ICpmbXQrKzsKKwkJCWlmIChjID09IDApCisJCQkJcmV0dXJuIChmbXQgLSAxKTsKKwkJCWlmIChjID09ICddJykKKwkJCQlyZXR1cm4gKGZtdCk7CisjZW5kaWYKKwkJCWJyZWFrOworCisJCWNhc2UgJ10nOgkJLyogZW5kIG9mIHNjYW5zZXQgKi8KKwkJCXJldHVybiAoZm10KTsKKworCQlkZWZhdWx0OgkJLyoganVzdCBhbm90aGVyIGNoYXJhY3RlciAqLworCQkJYyA9IG47CisJCQlicmVhazsKKwkJfQorCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZwcmludGYuYyBiL2xpYmMvc3RkaW8vdnByaW50Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZjYzYyMmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3ZwcmludGYuYwpAQCAtMCwwICsxLDQwIEBACisvKgkkT3BlbkJTRDogdnByaW50Zi5jLHYgMS44IDIwMDYvMDEvMDYgMTg6NTM6MDQgbWlsbGVydCBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKworaW50Cit2cHJpbnRmKGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCXJldHVybiAodmZwcmludGYoc3Rkb3V0LCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZzY2FuZi5jIGIvbGliYy9zdGRpby92c2NhbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMjg0OThlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRpby92c2NhbmYuYwpAQCAtMCwwICsxLDQxIEBACisvKgkkT3BlbkJTRDogdnNjYW5mLmMsdiAxLjggMjAwNi8wMS8wNiAxODo1MzowNCBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogRG9ubiBTZWVsZXkgYXQgVVVORVQgVGVjaG5vbG9naWVzLCBJbmMuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCitpbnQKK3ZzY2FuZihjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKworCXJldHVybiAodmZzY2FuZihzdGRpbiwgZm10LCBhcCkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby92c25wcmludGYuYyBiL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTZkZDAwOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdnNucHJpbnRmLmMKQEAgLTAsMCArMSw2NCBAQAorLyoJJE9wZW5CU0Q6IHZzbnByaW50Zi5jLHYgMS4xMiAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworaW50Cit2c25wcmludGYoY2hhciAqc3RyLCBzaXplX3QgbiwgY29uc3QgY2hhciAqZm10LCBfX3ZhX2xpc3QgYXApCit7CisJaW50IHJldDsKKwljaGFyIGR1bW15OworCUZJTEUgZjsKKwlzdHJ1Y3QgX19zZmlsZWV4dCBmZXh0OworCisJX0ZJTEVFWFRfU0VUVVAoJmYsICZmZXh0KTsKKworCS8qIFdoaWxlIHNucHJpbnRmKDMpIHNwZWNpZmllcyBzaXplX3Qgc3RkaW8gdXNlcyBhbiBpbnQgaW50ZXJuYWxseSAqLworCWlmIChuID4gSU5UX01BWCkKKwkJbiA9IElOVF9NQVg7CisJLyogU3RkaW8gaW50ZXJuYWxzIGRvIG5vdCBkZWFsIGNvcnJlY3RseSB3aXRoIHplcm8gbGVuZ3RoIGJ1ZmZlciAqLworCWlmIChuID09IDApIHsKKwkJc3RyID0gJmR1bW15OworCQluID0gMTsKKwl9CisJZi5fZmlsZSA9IC0xOworCWYuX2ZsYWdzID0gX19TV1IgfCBfX1NTVFI7CisJZi5fYmYuX2Jhc2UgPSBmLl9wID0gKHVuc2lnbmVkIGNoYXIgKilzdHI7CisJZi5fYmYuX3NpemUgPSBmLl93ID0gbiAtIDE7CisJcmV0ID0gdmZwcmludGYoJmYsIGZtdCwgYXApOworCSpmLl9wID0gJ1wwJzsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3ZzcHJpbnRmLmMgYi9saWJjL3N0ZGlvL3ZzcHJpbnRmLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjdhNTNhMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vdnNwcmludGYuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkT3BlbkJTRDogdnNwcmludGYuYyx2IDEuMTMgMjAwNi8wMS8wNiAxODo1MzowNCBtaWxsZXJ0IEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgImxvY2FsLmgiCisKKyNpZiBkZWZpbmVkKEFQSVdBUk4pCitfX3dhcm5fcmVmZXJlbmNlcyh2c3ByaW50ZiwKKyAgICAid2FybmluZzogdnNwcmludGYoKSBpcyBvZnRlbiBtaXN1c2VkLCBwbGVhc2UgdXNlIHZzbnByaW50ZigpIik7CisjZW5kaWYKKworaW50Cit2c3ByaW50ZihjaGFyICpzdHIsIGNvbnN0IGNoYXIgKmZtdCwgX192YV9saXN0IGFwKQoreworCWludCByZXQ7CisJRklMRSBmOworCXN0cnVjdCBfX3NmaWxlZXh0IGZleHQ7CisKKwlfRklMRUVYVF9TRVRVUCgmZiwgJmZleHQpOworCWYuX2ZpbGUgPSAtMTsKKwlmLl9mbGFncyA9IF9fU1dSIHwgX19TU1RSOworCWYuX2JmLl9iYXNlID0gZi5fcCA9ICh1bnNpZ25lZCBjaGFyICopc3RyOworCWYuX2JmLl9zaXplID0gZi5fdyA9IElOVF9NQVg7CisJcmV0ID0gdmZwcmludGYoJmYsIGZtdCwgYXApOworCSpmLl9wID0gJ1wwJzsKKwlyZXR1cm4gKHJldCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3Zzc2NhbmYuYyBiL2xpYmMvc3RkaW8vdnNzY2FuZi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YzFhZTYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3Zzc2NhbmYuYwpAQCAtMCwwICsxLDU5IEBACisvKgkkT3BlbkJTRDogdnNzY2FuZi5jLHYgMS4xMSAyMDA2LzAxLzA2IDE4OjUzOjA0IG1pbGxlcnQgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBEb25uIFNlZWxleSBhdCBVVU5FVCBUZWNobm9sb2dpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyogQVJHU1VTRUQgKi8KK3N0YXRpYyBpbnQKK2VvZnJlYWQodm9pZCAqY29va2llLCBjaGFyICpidWYsIGludCBsZW4pCit7CisKKwlyZXR1cm4gKDApOworfQorCitpbnQKK3Zzc2NhbmYoY29uc3QgY2hhciAqc3RyLCBjb25zdCBjaGFyICpmbXQsIF9fdmFfbGlzdCBhcCkKK3sKKwlGSUxFIGY7CisJc3RydWN0IF9fc2ZpbGVleHQgZmV4dDsKKworCV9GSUxFRVhUX1NFVFVQKCZmLCAmZmV4dCk7CisJZi5fZmxhZ3MgPSBfX1NSRDsKKwlmLl9iZi5fYmFzZSA9IGYuX3AgPSAodW5zaWduZWQgY2hhciAqKXN0cjsKKwlmLl9iZi5fc2l6ZSA9IGYuX3IgPSBzdHJsZW4oc3RyKTsKKwlmLl9yZWFkID0gZW9mcmVhZDsKKwlmLl9sYi5fYmFzZSA9IE5VTEw7CisJcmV0dXJuICh2ZnNjYW5mKCZmLCBmbXQsIGFwKSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGlvL3didWYuYyBiL2xpYmMvc3RkaW8vd2J1Zi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3NTc3OTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGlvL3didWYuYwpAQCAtMCwwICsxLDg0IEBACisvKgkkT3BlbkJTRDogd2J1Zi5jLHYgMS45IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlICJsb2NhbC5oIgorCisvKgorICogV3JpdGUgdGhlIGdpdmVuIGNoYXJhY3RlciBpbnRvIHRoZSAocHJvYmFibHkgZnVsbCkgYnVmZmVyIGZvcgorICogdGhlIGdpdmVuIGZpbGUuICBGbHVzaCB0aGUgYnVmZmVyIG91dCBpZiBpdCBpcyBvciBiZWNvbWVzIGZ1bGwsCisgKiBvciBpZiBjPT0nXG4nIGFuZCB0aGUgZmlsZSBpcyBsaW5lIGJ1ZmZlcmVkLgorICovCitpbnQKK19fc3didWYoaW50IGMsIEZJTEUgKmZwKQoreworCWludCBuOworCisJX1NFVF9PUklFTlRBVElPTihmcCwgLTEpOworCS8qCisJICogSW4gY2FzZSB3ZSBjYW5ub3Qgd3JpdGUsIG9yIGxvbmdqbXAgdGFrZXMgdXMgb3V0IGVhcmx5LAorCSAqIG1ha2Ugc3VyZSBfdyBpcyAwIChpZiBmdWxseS0gb3IgdW4tYnVmZmVyZWQpIG9yIC1fYmYuX3NpemUKKwkgKiAoaWYgbGluZSBidWZmZXJlZCkgc28gdGhhdCB3ZSB3aWxsIGdldCBjYWxsZWQgYWdhaW4uCisJICogSWYgd2UgZGlkIG5vdCBkbyB0aGlzLCBhIHN1ZmZpY2llbnQgbnVtYmVyIG9mIHB1dGMoKQorCSAqIGNhbGxzIG1pZ2h0IHdyYXAgX3cgZnJvbSBuZWdhdGl2ZSB0byBwb3NpdGl2ZS4KKwkgKi8KKwlmcC0+X3cgPSBmcC0+X2xiZnNpemU7CisJaWYgKGNhbnR3cml0ZShmcCkpIHsKKwkJZXJybm8gPSBFQkFERjsKKwkJcmV0dXJuIChFT0YpOworCX0KKwljID0gKHVuc2lnbmVkIGNoYXIpYzsKKworCS8qCisJICogSWYgaXQgaXMgY29tcGxldGVseSBmdWxsLCBmbHVzaCBpdCBvdXQuICBUaGVuLCBpbiBhbnkgY2FzZSwKKwkgKiBzdHVmZiBjIGludG8gdGhlIGJ1ZmZlci4gIElmIHRoaXMgY2F1c2VzIHRoZSBidWZmZXIgdG8gZmlsbAorCSAqIGNvbXBsZXRlbHksIG9yIGlmIGMgaXMgJ1xuJyBhbmQgdGhlIGZpbGUgaXMgbGluZSBidWZmZXJlZCwKKwkgKiBmbHVzaCBpdCAocGVyaGFwcyBhIHNlY29uZCB0aW1lKS4gIFRoZSBzZWNvbmQgZmx1c2ggd2lsbCBhbHdheXMKKwkgKiBoYXBwZW4gb24gdW5idWZmZXJlZCBzdHJlYW1zLCB3aGVyZSBfYmYuX3NpemU9PTE7IGZmbHVzaCgpCisJICogZ3VhcmFudGVlcyB0aGF0IHB1dGMoKSB3aWxsIGFsd2F5cyBjYWxsIHdidWYoKSBieSBzZXR0aW5nIF93CisJICogdG8gMCwgc28gd2UgbmVlZCBub3QgZG8gYW55dGhpbmcgZWxzZS4KKwkgKi8KKwluID0gZnAtPl9wIC0gZnAtPl9iZi5fYmFzZTsKKwlpZiAobiA+PSBmcC0+X2JmLl9zaXplKSB7CisJCWlmIChmZmx1c2goZnApKQorCQkJcmV0dXJuIChFT0YpOworCQluID0gMDsKKwl9CisJZnAtPl93LS07CisJKmZwLT5fcCsrID0gYzsKKwlpZiAoKytuID09IGZwLT5fYmYuX3NpemUgfHwgKGZwLT5fZmxhZ3MgJiBfX1NMQkYgJiYgYyA9PSAnXG4nKSkKKwkJaWYgKGZmbHVzaChmcCkpCisJCQlyZXR1cm4gKEVPRik7CisJcmV0dXJuIChjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkaW8vd2Npby5oIGIvbGliYy9zdGRpby93Y2lvLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhYzFiMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vd2Npby5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworLyogdGhpcyBmaWxlIGlzIG9ubHkgdXNlZCB0byBxdWlldCB0aGUgQlNEIHN0ZGlvIGltcGxlbWVudGF0aW9uCisgKiBzaW5jZSB3ZSBkb24ndCBpbXBsZW1lbnQgd2NoYXIgc3VwcG9ydCBhdCBhbGwKKyAqLworI2lmbmRlZiBfV0NJT19IXworI2RlZmluZSBfV0NJT19IXworCisvKiBtaW5pbWFsIHJlcXVpcmVtZW50IG9mIFNVU3YyICovCisjZGVmaW5lIFdDSU9fVU5HRVRXQ19CVUZTSVpFIDEKKworc3RydWN0IHdjaGFyX2lvX2RhdGEgeworICAgICAgICBpbnQgZHVtbXk7Cit9OworCisvKiBCSU9OSUM6IGRpc2FibGUgd2NoYXIgc3VwcG9ydCAqLworI2RlZmluZSBXQ0lPX0dFVChmcCkgXAorCSgoc3RydWN0IHdoY2FyX2lvX2RhdGEqKSAwKQorCisjZGVmaW5lIF9TRVRfT1JJRU5UQVRJT04oZnAsIG1vZGUpICgodm9pZCkwKQorCisvKgorICogV0NJT19GUkVFIHNob3VsZCBiZSBjYWxsZWQgYnkgZmNsb3NlCisgKi8KKyNkZWZpbmUgV0NJT19GUkVFKGZwKSAoKHZvaWQpKDApKQorCisjZGVmaW5lIFdDSU9fRlJFRVVCKGZwKSAoKHZvaWQpMCkKKworI2RlZmluZSBXQ0lPX0lOSVQoZnApICAoKHZvaWQpMCkKKworI2VuZGlmIC8qX1dDSU9fSF8qLwpkaWZmIC0tZ2l0IGEvbGliYy9zdGRpby93c2V0dXAuYyBiL2xpYmMvc3RkaW8vd3NldHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDgzNDIyMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkaW8vd3NldHVwLmMKQEAgLTAsMCArMSw4NiBAQAorLyoJJE9wZW5CU0Q6IHdzZXR1cC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSAibG9jYWwuaCIKKworLyoKKyAqIFZhcmlvdXMgb3V0cHV0IHJvdXRpbmVzIGNhbGwgd3NldHVwIHRvIGJlIHN1cmUgaXQgaXMgc2FmZSB0byB3cml0ZSwKKyAqIGJlY2F1c2UgZWl0aGVyIF9mbGFncyBkb2VzIG5vdCBpbmNsdWRlIF9fU1dSLCBvciBfYnVmIGlzIE5VTEwuCisgKiBfd3NldHVwIHJldHVybnMgMCBpZiBPSyB0byB3cml0ZSwgbm9uemVybyBvdGhlcndpc2UuCisgKi8KK2ludAorX19zd3NldHVwKEZJTEUgKmZwKQoreworCS8qIG1ha2Ugc3VyZSBzdGRpbyBpcyBzZXQgdXAgKi8KKwlpZiAoIV9fc2RpZGluaXQpCisJCV9fc2luaXQoKTsKKworCS8qCisJICogSWYgd2UgYXJlIG5vdCB3cml0aW5nLCB3ZSBoYWQgYmV0dGVyIGJlIHJlYWRpbmcgYW5kIHdyaXRpbmcuCisJICovCisJaWYgKChmcC0+X2ZsYWdzICYgX19TV1IpID09IDApIHsKKwkJaWYgKChmcC0+X2ZsYWdzICYgX19TUlcpID09IDApCisJCQlyZXR1cm4gKEVPRik7CisJCWlmIChmcC0+X2ZsYWdzICYgX19TUkQpIHsKKwkJCS8qIGNsb2JiZXIgYW55IHVuZ2V0YyBkYXRhICovCisJCQlpZiAoSEFTVUIoZnApKQorCQkJCUZSRUVVQihmcCk7CisJCQlmcC0+X2ZsYWdzICY9IH4oX19TUkR8X19TRU9GKTsKKwkJCWZwLT5fciA9IDA7CisJCQlmcC0+X3AgPSBmcC0+X2JmLl9iYXNlOworCQl9CisJCWZwLT5fZmxhZ3MgfD0gX19TV1I7CisJfQorCisJLyoKKwkgKiBNYWtlIGEgYnVmZmVyIGlmIG5lY2Vzc2FyeSwgdGhlbiBzZXQgX3cuCisJICovCisJaWYgKGZwLT5fYmYuX2Jhc2UgPT0gTlVMTCkgeworCQlpZiAoKGZwLT5fZmxhZ3MgJiAoX19TU1RSIHwgX19TQUxDKSkgPT0gX19TU1RSKQorCQkJcmV0dXJuIChFT0YpOworCQlfX3NtYWtlYnVmKGZwKTsKKwl9CisJaWYgKGZwLT5fZmxhZ3MgJiBfX1NMQkYpIHsKKwkJLyoKKwkJICogSXQgaXMgbGluZSBidWZmZXJlZCwgc28gbWFrZSBfbGJmc2l6ZSBiZSAtX2J1ZnNpemUKKwkJICogZm9yIHRoZSBwdXRjKCkgbWFjcm8uICBXZSB3aWxsIGNoYW5nZSBfbGJmc2l6ZSBiYWNrCisJCSAqIHRvIDAgd2hlbmV2ZXIgd2UgdHVybiBvZmYgX19TV1IuCisJCSAqLworCQlmcC0+X3cgPSAwOworCQlmcC0+X2xiZnNpemUgPSAtZnAtPl9iZi5fc2l6ZTsKKwl9IGVsc2UKKwkJZnAtPl93ID0gZnAtPl9mbGFncyAmIF9fU05CRiA/IDAgOiBmcC0+X2JmLl9zaXplOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMgYi9saWJjL3N0ZGxpYi9fcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2M5NTBmNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL19yYW5kNDguYwpAQCAtMCwwICsxLDQ3IEBACisvKgkkT3BlbkJTRDogX3JhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK3Vuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM10gPSB7CisJUkFORDQ4X1NFRURfMCwKKwlSQU5ENDhfU0VFRF8xLAorCVJBTkQ0OF9TRUVEXzIKK307Cit1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9tdWx0WzNdID0geworCVJBTkQ0OF9NVUxUXzAsCisJUkFORDQ4X01VTFRfMSwKKwlSQU5ENDhfTVVMVF8yCit9OwordW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkID0gUkFORDQ4X0FERDsKKwordm9pZAorX19kb3JhbmQ0OCh1bnNpZ25lZCBzaG9ydCB4c2VlZFszXSkKK3sKKwl1bnNpZ25lZCBsb25nIGFjY3U7CisJdW5zaWduZWQgc2hvcnQgdGVtcFsyXTsKKworCWFjY3UgPSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfbXVsdFswXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFswXSArCisJICh1bnNpZ25lZCBsb25nKSBfX3JhbmQ0OF9hZGQ7CisJdGVtcFswXSA9ICh1bnNpZ25lZCBzaG9ydCkgYWNjdTsJLyogbG93ZXIgMTYgYml0cyAqLworCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OworCWFjY3UgKz0gKHVuc2lnbmVkIGxvbmcpIF9fcmFuZDQ4X211bHRbMF0gKiAodW5zaWduZWQgbG9uZykgeHNlZWRbMV0gKworCSAodW5zaWduZWQgbG9uZykgX19yYW5kNDhfbXVsdFsxXSAqICh1bnNpZ25lZCBsb25nKSB4c2VlZFswXTsKKwl0ZW1wWzFdID0gKHVuc2lnbmVkIHNob3J0KSBhY2N1OwkvKiBtaWRkbGUgMTYgYml0cyAqLworCWFjY3UgPj49IHNpemVvZih1bnNpZ25lZCBzaG9ydCkgKiA4OworCWFjY3UgKz0gX19yYW5kNDhfbXVsdFswXSAqIHhzZWVkWzJdICsgX19yYW5kNDhfbXVsdFsxXSAqIHhzZWVkWzFdICsgX19yYW5kNDhfbXVsdFsyXSAqIHhzZWVkWzBdOworCXhzZWVkWzBdID0gdGVtcFswXTsKKwl4c2VlZFsxXSA9IHRlbXBbMV07CisJeHNlZWRbMl0gPSAodW5zaWduZWQgc2hvcnQpIGFjY3U7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hc3NlcnQuYyBiL2xpYmMvc3RkbGliL2Fzc2VydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI0MzlkOGUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hc3NlcnQuYwpAQCAtMCwwICsxLDU0IEBACisvKgkkT3BlbkJTRDogYXNzZXJ0LmMsdiAxLjggMjAwNS8wOC8wOCAwODowNTozMyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8YXNzZXJ0Lmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwordm9pZAorX19hc3NlcnQoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZhaWxlZGV4cHIpCit7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsCisJICAgICJhc3NlcnRpb24gXCIlc1wiIGZhaWxlZDogZmlsZSBcIiVzXCIsIGxpbmUgJWRcbiIsCisJICAgIGZhaWxlZGV4cHIsIGZpbGUsIGxpbmUpOworCWFib3J0KCk7CisJLyogTk9UUkVBQ0hFRCAqLworfQorCit2b2lkCitfX2Fzc2VydDIoY29uc3QgY2hhciAqZmlsZSwgaW50IGxpbmUsIGNvbnN0IGNoYXIgKmZ1bmMsIGNvbnN0IGNoYXIgKmZhaWxlZGV4cHIpCit7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsCisJICAgICJhc3NlcnRpb24gXCIlc1wiIGZhaWxlZDogZmlsZSBcIiVzXCIsIGxpbmUgJWQsIGZ1bmN0aW9uIFwiJXNcIlxuIiwKKwkgICAgZmFpbGVkZXhwciwgZmlsZSwgbGluZSwgZnVuYyk7CisgIGFib3J0KCk7CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYXRleGl0LmMgYi9saWJjL3N0ZGxpYi9hdGV4aXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45N2VhYzRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvYXRleGl0LmMKQEAgLTAsMCArMSwxMzMgQEAKKy8qCSRPcGVuQlNEOiBhdGV4aXQuYyx2IDEuMTIgMjAwNi8wMi8yMiAwNzoxNjozMiBvdHRvIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIERhbmllbCBIYXJ0bWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorCitpbnQgX19hdGV4aXRfaW52YWxpZCA9IDE7CitzdHJ1Y3QgYXRleGl0ICpfX2F0ZXhpdDsKKworLyoKKyAqIEZ1bmN0aW9uIHBvaW50ZXJzIGFyZSBzdG9yZWQgaW4gYSBsaW5rZWQgbGlzdCBvZiBwYWdlcy4gVGhlIGxpc3QKKyAqIGlzIGluaXRpYWxseSBlbXB0eSwgYW5kIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgb24gZGVtYW5kLiBUaGUgZmlyc3QKKyAqIGZ1bmN0aW9uIHBvaW50ZXIgaW4gdGhlIGZpcnN0IGFsbG9jYXRlZCBwYWdlICh0aGUgbGFzdCBvbmUgaW4KKyAqIHRoZSBsaW5rZWQgbGlzdCkgaXMgcmVzZXJ2ZWQgZm9yIHRoZSBjbGVhbnVwIGZ1bmN0aW9uLgorICoKKyAqIE91dHNpZGUgdGhlIGZvbGxvd2luZyB0d28gZnVuY3Rpb25zLCBhbGwgcGFnZXMgYXJlIG1wcm90ZWN0KCknZWQKKyAqIHRvIHByZXZlbnQgdW5pbnRlbnRpb25hbC9tYWxpY2lvdXMgY29ycnVwdGlvbi4KKyAqLworCisvKgorICogUmVnaXN0ZXIgYSBmdW5jdGlvbiB0byBiZSBwZXJmb3JtZWQgYXQgZXhpdC4KKyAqLworaW50CithdGV4aXQodm9pZCAoKmZuKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgYXRleGl0ICpwOworCWludCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCWludCByZXQgPSAtMTsKKworCWlmIChwZ3NpemUgPCAoaW50KXNpemVvZigqcCkpCisJCXJldHVybiAoLTEpOworCV9BVEVYSVRfTE9DSygpOworCXAgPSBfX2F0ZXhpdDsKKwlpZiAocCAhPSBOVUxMKSB7CisJCWlmIChwLT5pbmQgKyAxID49IHAtPm1heCkKKwkJCXAgPSBOVUxMOworCQllbHNlIGlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCQkJZ290byB1bmxvY2s7CisJfQorCWlmIChwID09IE5VTEwpIHsKKwkJcCA9IG1tYXAoTlVMTCwgcGdzaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAorCQkgICAgTUFQX0FOT05ZTU9VUyB8IE1BUF9QUklWQVRFLCAtMSwgMCk7CisJCWlmIChwID09IE1BUF9GQUlMRUQpCisJCQlnb3RvIHVubG9jazsKKwkJaWYgKF9fYXRleGl0ID09IE5VTEwpIHsKKwkJCXAtPmZuc1swXSA9IE5VTEw7CisJCQlwLT5pbmQgPSAxOworCQl9IGVsc2UKKwkJCXAtPmluZCA9IDA7CisJCXAtPm1heCA9IChwZ3NpemUgLSAoKGNoYXIgKikmcC0+Zm5zWzBdIC0gKGNoYXIgKilwKSkgLworCQkgICAgc2l6ZW9mKHAtPmZuc1swXSk7CisJCXAtPm5leHQgPSBfX2F0ZXhpdDsKKwkJX19hdGV4aXQgPSBwOworCQlpZiAoX19hdGV4aXRfaW52YWxpZCkKKwkJCV9fYXRleGl0X2ludmFsaWQgPSAwOworCX0KKwlwLT5mbnNbcC0+aW5kKytdID0gZm47CisJaWYgKG1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKSkKKwkJZ290byB1bmxvY2s7CisJcmV0ID0gMDsKK3VubG9jazoKKwlfQVRFWElUX1VOTE9DSygpOworCXJldHVybiAocmV0KTsKK30KKworLyoKKyAqIFJlZ2lzdGVyIHRoZSBjbGVhbnVwIGZ1bmN0aW9uCisgKi8KK3ZvaWQKK19fYXRleGl0X3JlZ2lzdGVyX2NsZWFudXAodm9pZCAoKmZuKSh2b2lkKSkKK3sKKwlzdHJ1Y3QgYXRleGl0ICpwOworCWludCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCisJaWYgKHBnc2l6ZSA8IChpbnQpc2l6ZW9mKCpwKSkKKwkJcmV0dXJuOworCV9BVEVYSVRfTE9DSygpOworCXAgPSBfX2F0ZXhpdDsKKwl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gTlVMTCkKKwkJcCA9IHAtPm5leHQ7CisJaWYgKHAgPT0gTlVMTCkgeworCQlwID0gbW1hcChOVUxMLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsCisJCSAgICBNQVBfQU5PTllNT1VTIHwgTUFQX1BSSVZBVEUsIC0xLCAwKTsKKwkJaWYgKHAgPT0gTUFQX0ZBSUxFRCkKKwkJCWdvdG8gdW5sb2NrOworCQlwLT5pbmQgPSAxOworCQlwLT5tYXggPSAocGdzaXplIC0gKChjaGFyICopJnAtPmZuc1swXSAtIChjaGFyICopcCkpIC8KKwkJICAgIHNpemVvZihwLT5mbnNbMF0pOworCQlwLT5uZXh0ID0gTlVMTDsKKwkJX19hdGV4aXQgPSBwOworCQlpZiAoX19hdGV4aXRfaW52YWxpZCkKKwkJCV9fYXRleGl0X2ludmFsaWQgPSAwOworCX0gZWxzZSB7CisJCWlmIChtcHJvdGVjdChwLCBwZ3NpemUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUpKQorCQkJZ290byB1bmxvY2s7CisJfQorCXAtPmZuc1swXSA9IGZuOworCW1wcm90ZWN0KHAsIHBnc2l6ZSwgUFJPVF9SRUFEKTsKK3VubG9jazoKKwlfQVRFWElUX1VOTE9DSygpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvYXRleGl0LmggYi9saWJjL3N0ZGxpYi9hdGV4aXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWIwYzJlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvYXRleGl0LmgKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IGF0ZXhpdC5oLHYgMS42IDIwMDMvMDcvMzEgMDc6MDg6NDIgZGVyYWFkdCBFeHAgJCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAyMDAyIERhbmllbCBIYXJ0bWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogICAgLSBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUKKyAqICAgICAgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcKKyAqICAgICAgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkCisgKiAgICAgIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSCisgKiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCisgKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICoKKyAqLworCitzdHJ1Y3QgYXRleGl0IHsKKwlzdHJ1Y3QgYXRleGl0ICpuZXh0OwkJLyogbmV4dCBpbiBsaXN0ICovCisJaW50IGluZDsJCQkvKiBuZXh0IGluZGV4IGluIHRoaXMgdGFibGUgKi8KKwlpbnQgbWF4OwkJCS8qIG1heCBlbnRyaWVzID49IEFURVhJVF9TSVpFICovCisJdm9pZCAoKmZuc1sxXSkodm9pZCk7CQkvKiB0aGUgdGFibGUgaXRzZWxmICovCit9OworCitleHRlcm4gaW50IF9fYXRleGl0X2ludmFsaWQ7CitleHRlcm4gc3RydWN0IGF0ZXhpdCAqX19hdGV4aXQ7CQkvKiBwb2ludHMgdG8gaGVhZCBvZiBMSUZPIHN0YWNrICovCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9pLmMgYi9saWJjL3N0ZGxpYi9hdG9pLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWE2NTU0MwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2F0b2kuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworaW50ICBhdG9pKGNvbnN0IGNoYXIqICBzKQoreworICAgIHJldHVybiAoaW50KXN0cnRvaW1heChzLCBOVUxMLCAxMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9hdG9sLmMgYi9saWJjL3N0ZGxpYi9hdG9sLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNkYzA1YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL2F0b2wuYwpAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworbG9uZyAgYXRvbChjb25zdCBjaGFyKiAgcykKK3sKKyAgICByZXR1cm4gKGxvbmcpc3RydG9pbWF4KHMsIE5VTEwsIDEwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2F0b2xsLmMgYi9saWJjL3N0ZGxpYi9hdG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk1Mzg3OGYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9hdG9sbC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCitsb25nIGxvbmcgYXRvbGwoY29uc3QgY2hhciogIHMpCit7CisgICAgcmV0dXJuIChsb25nIGxvbmcpc3RydG9pbWF4KHMsIE5VTEwsIDEwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2JzZWFyY2guYyBiL2xpYmMvc3RkbGliL2JzZWFyY2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTkzZDI3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvYnNlYXJjaC5jCkBAIC0wLDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisvKgorICogUGVyZm9ybSBhIGJpbmFyeSBzZWFyY2guCisgKgorICogVGhlIGNvZGUgYmVsb3cgaXMgYSBiaXQgc25lYWt5LiAgQWZ0ZXIgYSBjb21wYXJpc29uIGZhaWxzLCB3ZQorICogZGl2aWRlIHRoZSB3b3JrIGluIGhhbGYgYnkgbW92aW5nIGVpdGhlciBsZWZ0IG9yIHJpZ2h0LiBJZiBsaW0KKyAqIGlzIG9kZCwgbW92aW5nIGxlZnQgc2ltcGx5IGludm9sdmVzIGhhbHZpbmcgbGltOiBlLmcuLCB3aGVuIGxpbQorICogaXMgNSB3ZSBsb29rIGF0IGl0ZW0gMiwgc28gd2UgY2hhbmdlIGxpbSB0byAyIHNvIHRoYXQgd2Ugd2lsbAorICogbG9vayBhdCBpdGVtcyAwICYgMS4gIElmIGxpbSBpcyBldmVuLCB0aGUgc2FtZSBhcHBsaWVzLiAgSWYgbGltCisgKiBpcyBvZGQsIG1vdmluZyByaWdodCBhZ2FpbiBpbnZvbGVzIGhhbHZpbmcgbGltLCB0aGlzIHRpbWUgbW92aW5nCisgKiB0aGUgYmFzZSB1cCBvbmUgaXRlbSBwYXN0IHA6IGUuZy4sIHdoZW4gbGltIGlzIDUgd2UgY2hhbmdlIGJhc2UKKyAqIHRvIGl0ZW0gMyBhbmQgbWFrZSBsaW0gMiBzbyB0aGF0IHdlIHdpbGwgbG9vayBhdCBpdGVtcyAzIGFuZCA0LgorICogSWYgbGltIGlzIGV2ZW4sIGhvd2V2ZXIsIHdlIGhhdmUgdG8gc2hyaW5rIGl0IGJ5IG9uZSBiZWZvcmUKKyAqIGhhbHZpbmc6IGUuZy4sIHdoZW4gbGltIGlzIDQsIHdlIHN0aWxsIGxvb2tlZCBhdCBpdGVtIDIsIHNvIHdlCisgKiBoYXZlIHRvIG1ha2UgbGltIDMsIHRoZW4gaGFsdmUsIG9idGFpbmluZyAxLCBzbyB0aGF0IHdlIHdpbGwgb25seQorICogbG9vayBhdCBpdGVtIDMuCisgKi8KK3ZvaWQgKgorYnNlYXJjaChjb25zdCB2b2lkICprZXksIGNvbnN0IHZvaWQgKmJhc2UwLCBzaXplX3Qgbm1lbWIsIHNpemVfdCBzaXplLAorICAgIGludCAoKmNvbXBhcikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKQoreworCWNvbnN0IGNoYXIgKmJhc2UgPSBiYXNlMDsKKwlpbnQgbGltLCBjbXA7CisJY29uc3Qgdm9pZCAqcDsKKworCWZvciAobGltID0gbm1lbWI7IGxpbSAhPSAwOyBsaW0gPj49IDEpIHsKKwkJcCA9IGJhc2UgKyAobGltID4+IDEpICogc2l6ZTsKKwkJY21wID0gKCpjb21wYXIpKGtleSwgcCk7CisJCWlmIChjbXAgPT0gMCkKKwkJCXJldHVybiAoKHZvaWQgKilwKTsKKwkJaWYgKGNtcCA+IDApIHsJLyoga2V5ID4gcDogbW92ZSByaWdodCAqLworCQkJYmFzZSA9IChjaGFyICopcCArIHNpemU7CisJCQlsaW0tLTsKKwkJfSAvKiBlbHNlIG1vdmUgbGVmdCAqLworCX0KKwlyZXR1cm4gKE5VTEwpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvY3R5cGVfLmMgYi9saWJjL3N0ZGxpYi9jdHlwZV8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNTlhZjNlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvY3R5cGVfLmMKQEAgLTAsMCArMSwxNTggQEAKKy8qCSRPcGVuQlNEOiBjdHlwZV8uYyx2IDEuOSAyMDA1LzA4LzA4IDA4OjA1OjMzIGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg5IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogKGMpIFVOSVggU3lzdGVtIExhYm9yYXRvcmllcywgSW5jLgorICogQWxsIG9yIHNvbWUgcG9ydGlvbnMgb2YgdGhpcyBmaWxlIGFyZSBkZXJpdmVkIGZyb20gbWF0ZXJpYWwgbGljZW5zZWQKKyAqIHRvIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEgYnkgQW1lcmljYW4gVGVsZXBob25lIGFuZCBUZWxlZ3JhcGgKKyAqIENvLiBvciBVbml4IFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4gYW5kIGFyZSByZXByb2R1Y2VkIGhlcmVpbiB3aXRoCisgKiB0aGUgcGVybWlzc2lvbiBvZiBVTklYIFN5c3RlbSBMYWJvcmF0b3JpZXMsIEluYy4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSAiY3R5cGVfcHJpdmF0ZS5oIgorCitjb25zdCBjaGFyIF9DX2N0eXBlX1sxICsgQ1RZUEVfTlVNX0NIQVJTXSA9IHsKKwkwLAorCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywKKwlfQywJX0N8X1MsCV9DfF9TLAlfQ3xfUywJX0N8X1MsCV9DfF9TLAlfQywJX0MsCisJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAorCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywKKyAgIF9TfChjaGFyKV9CLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwKKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX04sCV9OLAlfTiwJX04sCV9OLAlfTiwJX04sCV9OLAorCV9OLAlfTiwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwKKwlfUCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1V8X1gsCV9VfF9YLAlfVXxfWCwJX1UsCisJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAorCV9VLAlfVSwJX1UsCV9VLAlfVSwJX1UsCV9VLAlfVSwKKwlfVSwJX1UsCV9VLAlfUCwJX1AsCV9QLAlfUCwJX1AsCisJX1AsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MfF9YLAlfTHxfWCwJX0x8X1gsCV9MLAorCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwKKwlfTCwJX0wsCV9MLAlfTCwJX0wsCV9MLAlfTCwJX0wsCisvKiBkZXRlcm1pbmUgcHJpbnRhYmlsaXR5IGJhc2VkIG9uIHRoZSBJUzAgODg1OSA4LWJpdCBzdGFuZGFyZCAqLworCV9MLAlfTCwJX0wsCV9QLAlfUCwJX1AsCV9QLAlfQywKKworCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogODAgKi8KKwlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsIC8qIDg4ICovCisJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLCAvKiA5MCAqLworCV9DLAlfQywJX0MsCV9DLAlfQywJX0MsCV9DLAlfQywgLyogOTggKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEEwICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBBOCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQjAgKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEI4ICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBDMCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogQzggKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEQwICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBEOCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwgLyogRTAgKi8KKwlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsIC8qIEU4ICovCisJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLCAvKiBGMCAqLworCV9QLAlfUCwJX1AsCV9QLAlfUCwJX1AsCV9QLAlfUCAgLyogRjggKi8KK307CisKK2NvbnN0IGNoYXIgKl9jdHlwZV8gPSBfQ19jdHlwZV87CisKKworI2lmIDEgLyogbmRlZiBOREVCVUcgKi8KK2ludCBpc2FsbnVtKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfVXxfTHxfTikpKTsKK30KKworaW50IGlzYWxwaGEoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgKF9VfF9MKSkpOworfQorCitpbnQgaXNjbnRybChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfQykpOworfQorCitpbnQgaXNkaWdpdChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiBfTikpOworfQorCitpbnQgaXNncmFwaChpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gLTEgPyAwIDogKChfY3R5cGVfICsgMSlbKHVuc2lnbmVkIGNoYXIpY10gJiAoX1B8X1V8X0x8X04pKSk7Cit9CisKK2ludCBpc2xvd2VyKGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIF9MKSk7Cit9CisKK2ludCBpc3ByaW50KGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfUHxfVXxfTHxfTnxfQikpKTsKK30KKworaW50IGlzcHVuY3QoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1ApKTsKK30KKworaW50IGlzc3BhY2UoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1MpKTsKK30KKworaW50IGlzdXBwZXIoaW50IGMpCit7CisJcmV0dXJuIChjID09IC0xID8gMCA6ICgoX2N0eXBlXyArIDEpWyh1bnNpZ25lZCBjaGFyKWNdICYgX1UpKTsKK30KKworaW50IGlzeGRpZ2l0KGludCBjKQoreworCXJldHVybiAoYyA9PSAtMSA/IDAgOiAoKF9jdHlwZV8gKyAxKVsodW5zaWduZWQgY2hhciljXSAmIChfTnxfWCkpKTsKK30KKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19JU09fQ19WSVNJQkxFID49IDE5OTkgfHwgX19QT1NJWF9WSVNJQkxFID4gMjAwMTEyIFwKKyAgICB8fCBfX1hQR19WSVNJQkxFID4gNjAwCitpbnQgaXNibGFuayhpbnQgYykKK3sKKwlyZXR1cm4gKGMgPT0gJyAnIHx8IGMgPT0gJ1x0Jyk7Cit9CisjZW5kaWYKKworI2lmIF9fQlNEX1ZJU0lCTEUgfHwgX19YUEdfVklTSUJMRQoraW50IGlzYXNjaWkoaW50IGMpCit7CisJcmV0dXJuICgodW5zaWduZWQgaW50KWMgPD0gMDE3Nyk7Cit9CisKK2ludCB0b2FzY2lpKGludCBjKQoreworCXJldHVybiAoYyAmIDAxNzcpOworfQorCisjZW5kaWYgLyogX19CU0RfVklTSUJMRSB8fCBfX1hQR19WSVNJQkxFICovCisKKyNlbmRpZiAvKiAhTkRCRVVHICovCisKZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2V4aXQuYyBiL2xpYmMvc3RkbGliL2V4aXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44ZmFmY2Y1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvZXhpdC5jCkBAIC0wLDAgKzEsNjkgQEAKKy8qCSRPcGVuQlNEOiBleGl0LmMsdiAxLjExIDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJhdGV4aXQuaCIKKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorCisvKgorICogVGhpcyB2YXJpYWJsZSBpcyB6ZXJvIHVudGlsIGEgcHJvY2VzcyBoYXMgY3JlYXRlZCBhIHRocmVhZC4KKyAqIEl0IGlzIHVzZWQgdG8gYXZvaWQgY2FsbGluZyBsb2NraW5nIGZ1bmN0aW9ucyBpbiBsaWJjIHdoZW4gdGhleQorICogYXJlIG5vdCByZXF1aXJlZC4gQnkgZGVmYXVsdCwgbGliYyBpcyBpbnRlbmRlZCB0byBiZShjb21lKQorICogdGhyZWFkLXNhZmUsIGJ1dCB3aXRob3V0IGEgKHNpZ25pZmljYW50KSBwZW5hbHR5IHRvIG5vbi10aHJlYWRlZAorICogcHJvY2Vzc2VzLgorICovCitpbnQgICAgIF9faXN0aHJlYWRlZCAgICA9IDA7CisKKy8qCisgKiBFeGl0LCBmbHVzaGluZyBzdGRpbyBidWZmZXJzIGlmIG5lY2Vzc2FyeS4KKyAqLwordm9pZAorZXhpdChpbnQgc3RhdHVzKQoreworCXN0cnVjdCBhdGV4aXQgKnAsICpxOworCWludCBuLCBwZ3NpemUgPSBnZXRwYWdlc2l6ZSgpOworCisJaWYgKCFfX2F0ZXhpdF9pbnZhbGlkKSB7CisJCXAgPSBfX2F0ZXhpdDsKKwkJd2hpbGUgKHAgIT0gTlVMTCkgeworCQkJZm9yIChuID0gcC0+aW5kOyAtLW4gPj0gMDspCisJCQkJaWYgKHAtPmZuc1tuXSAhPSBOVUxMKQorCQkJCQkoKnAtPmZuc1tuXSkoKTsKKwkJCXEgPSBwOworCQkJcCA9IHAtPm5leHQ7CisJCQltdW5tYXAocSwgcGdzaXplKTsKKyAgfQorCX0KKwkvKiBjbGVhbnVwLCBpZiByZWdpc3RlcmVkLCB3YXMgY2FsbGVkIHRocm91Z2ggZm5zWzBdIGluIHRoZSBsYXN0IHBhZ2UgKi8KKwlfZXhpdChzdGF0dXMpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvZ2V0ZW52LmMgYi9saWJjL3N0ZGxpYi9nZXRlbnYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xM2FiZTMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvZ2V0ZW52LmMKQEAgLTAsMCArMSw4MCBAQAorLyoJJE9wZW5CU0Q6IGdldGVudi5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzYgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODcsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKl9fZmluZGVudihjb25zdCBjaGFyICpuYW1lLCBpbnQgKm9mZnNldCk7CisKKy8qCisgKiBfX2ZpbmRlbnYgLS0KKyAqCVJldHVybnMgcG9pbnRlciB0byB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggbmFtZSwgaWYgYW55LCBlbHNlIE5VTEwuCisgKglTZXRzIG9mZnNldCB0byBiZSB0aGUgb2Zmc2V0IG9mIHRoZSBuYW1lL3ZhbHVlIGNvbWJpbmF0aW9uIGluIHRoZQorICoJZW52aXJvbm1lbnRhbCBhcnJheSwgZm9yIHVzZSBieSBzZXRlbnYoMykgYW5kIHVuc2V0ZW52KDMpLgorICoJRXhwbGljaXRseSByZW1vdmVzICc9JyBpbiBhcmd1bWVudCBuYW1lLgorICoKKyAqCVRoaXMgcm91dGluZSAqc2hvdWxkKiBiZSBhIHN0YXRpYzsgZG9uJ3QgdXNlIGl0LgorICovCitjaGFyICoKK19fZmluZGVudihjb25zdCBjaGFyICpuYW1lLCBpbnQgKm9mZnNldCkKK3sKKwlleHRlcm4gY2hhciAqKmVudmlyb247CisJaW50IGxlbiwgaTsKKwljb25zdCBjaGFyICpucDsKKwljaGFyICoqcCwgKmNwOworCisJaWYgKG5hbWUgPT0gTlVMTCB8fCBlbnZpcm9uID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZm9yIChucCA9IG5hbWU7ICpucCAmJiAqbnAgIT0gJz0nOyArK25wKQorCQk7CisJbGVuID0gbnAgLSBuYW1lOworCWZvciAocCA9IGVudmlyb247IChjcCA9ICpwKSAhPSBOVUxMOyArK3ApIHsKKwkJZm9yIChucCA9IG5hbWUsIGkgPSBsZW47IGkgJiYgKmNwOyBpLS0pCisJCQlpZiAoKmNwKysgIT0gKm5wKyspCisJCQkJYnJlYWs7CisJCWlmIChpID09IDAgJiYgKmNwKysgPT0gJz0nKSB7CisJCQkqb2Zmc2V0ID0gcCAtIGVudmlyb247CisJCQlyZXR1cm4gKGNwKTsKKyAgICB9CisgIH0KKwlyZXR1cm4gKE5VTEwpOworfQorCisvKgorICogZ2V0ZW52IC0tCisgKglSZXR1cm5zIHB0ciB0byB2YWx1ZSBhc3NvY2lhdGVkIHdpdGggbmFtZSwgaWYgYW55LCBlbHNlIE5VTEwuCisgKi8KK2NoYXIgKgorZ2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJaW50IG9mZnNldDsKKworCXJldHVybiAoX19maW5kZW52KG5hbWUsICZvZmZzZXQpKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL2pyYW5kNDguYyBiL2xpYmMvc3RkbGliL2pyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jYjhjNTkyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvanJhbmQ0OC5jCkBAIC0wLDAgKzEsMjIgQEAKKy8qCSRPcGVuQlNEOiBqcmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNiBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworbG9uZworanJhbmQ0OCh1bnNpZ25lZCBzaG9ydCB4c2VlZFszXSkKK3sKKwlfX2RvcmFuZDQ4KHhzZWVkKTsKKwlyZXR1cm4gKChsb25nKSB4c2VlZFsyXSA8PCAxNikgKyAobG9uZykgeHNlZWRbMV07Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9sb2NhbGUuYyBiL2xpYmMvc3RkbGliL2xvY2FsZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYWJiZTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9sb2NhbGUuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8bG9jYWxlLmg+CisKK2NoYXIqIHNldGxvY2FsZSAoaW50IGNhdGVnb3J5LCBjaGFyIGNvbnN0ICpsb2NhbGUpCit7CisgICAgLyogSU5URU5USU9OQUw6IHRoZXJlIGlzIG5vIGxvY2FsZSBzdXBwb3J0IGluIEJpb25pYyAqLworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbHJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvbHJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIxYmViODUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9scmFuZDQ4LmMKQEAgLTAsMCArMSwyNCBAQAorLyoJJE9wZW5CU0Q6IGxyYW5kNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfc2VlZFszXTsKKworbG9uZworbHJhbmQ0OCh2b2lkKQoreworCV9fZG9yYW5kNDgoX19yYW5kNDhfc2VlZCk7CisJcmV0dXJuICgobG9uZykgX19yYW5kNDhfc2VlZFsyXSA8PCAxNSkgKyAoKGxvbmcpIF9fcmFuZDQ4X3NlZWRbMV0gPj4gMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMgYi9saWJjL3N0ZGxpYi9tcmFuZDQ4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTc3MjY0YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL21yYW5kNDguYwpAQCAtMCwwICsxLDI0IEBACisvKgkkT3BlbkJTRDogbXJhbmQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9zZWVkWzNdOworCitsb25nCittcmFuZDQ4KHZvaWQpCit7CisJX19kb3JhbmQ0OChfX3JhbmQ0OF9zZWVkKTsKKwlyZXR1cm4gKChsb25nKSBfX3JhbmQ0OF9zZWVkWzJdIDw8IDE2KSArIChsb25nKSBfX3JhbmQ0OF9zZWVkWzFdOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvbnJhbmQ0OC5jIGIvbGliYy9zdGRsaWIvbnJhbmQ0OC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxZjU0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9ucmFuZDQ4LmMKQEAgLTAsMCArMSwyMiBAQAorLyoJJE9wZW5CU0Q6IG5yYW5kNDguYyx2IDEuMyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkzIE1hcnRpbiBCaXJnbWVpZXIKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogWW91IG1heSByZWRpc3RyaWJ1dGUgdW5tb2RpZmllZCBvciBtb2RpZmllZCB2ZXJzaW9ucyBvZiB0aGlzIHNvdXJjZQorICogY29kZSBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIGFuZCB0aGUKKyAqIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSByZXRhaW5lZC4KKyAqCisgKiBUaGlzIHNvZnR3YXJlIGlzIHByb3ZpZGVkIGBgYXMgaXMnJywgYW5kIGNvbWVzIHdpdGggbm8gd2FycmFudGllcworICogb2YgYW55IGtpbmQuIEkgc2hhbGwgaW4gbm8gZXZlbnQgYmUgbGlhYmxlIGZvciBhbnl0aGluZyB0aGF0IGhhcHBlbnMKKyAqIHRvIGFueW9uZS9hbnl0aGluZyB3aGVuIHVzaW5nIHRoaXMgc29mdHdhcmUuCisgKi8KKworI2luY2x1ZGUgInJhbmQ0OC5oIgorCitsb25nCitucmFuZDQ4KHVuc2lnbmVkIHNob3J0IHhzZWVkWzNdKQoreworCV9fZG9yYW5kNDgoeHNlZWQpOworCXJldHVybiAoKGxvbmcpIHhzZWVkWzJdIDw8IDE1KSArICgobG9uZykgeHNlZWRbMV0gPj4gMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9wdXRlbnYuYyBiL2xpYmMvc3RkbGliL3B1dGVudi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMzYmVkYWUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9wdXRlbnYuYwpAQCAtMCwwICsxLDUwIEBACisvKgkkT3BlbkJTRDogcHV0ZW52LmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQKK3B1dGVudihjb25zdCBjaGFyICpzdHIpCit7CisJY2hhciAqcCwgKmVxdWFsOworCWludCBydmFsOworCisJaWYgKChwID0gc3RyZHVwKHN0cikpID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCWlmICgoZXF1YWwgPSBzdHJjaHIocCwgJz0nKSkgPT0gTlVMTCkgeworCQkodm9pZClmcmVlKHApOworCQlyZXR1cm4gKC0xKTsKKyAgfQorCSplcXVhbCA9ICdcMCc7CisJcnZhbCA9IHNldGVudihwLCBlcXVhbCArIDEsIDEpOworCSh2b2lkKWZyZWUocCk7CisJcmV0dXJuIChydmFsKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3Fzb3J0LmMgYi9saWJjL3N0ZGxpYi9xc29ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNkNjY5NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9xc29ydC5jCkBAIC0wLDAgKzEsMTYxIEBACisvKgkkT3BlbkJTRDogcXNvcnQuYyx2IDEuMTAgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTIsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKK3N0YXRpYyBfX2lubGluZSBjaGFyCSptZWQzKGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGludCAoKikoY29uc3Qgdm9pZCAqLCBjb25zdCB2b2lkICopKTsKK3N0YXRpYyBfX2lubGluZSB2b2lkCSBzd2FwZnVuYyhjaGFyICosIGNoYXIgKiwgaW50LCBpbnQpOworCisjZGVmaW5lIG1pbihhLCBiKQkoYSkgPCAoYikgPyBhIDogYgorCisvKgorICogUXNvcnQgcm91dGluZSBmcm9tIEJlbnRsZXkgJiBNY0lscm95J3MgIkVuZ2luZWVyaW5nIGEgU29ydCBGdW5jdGlvbiIuCisgKi8KKyNkZWZpbmUgc3dhcGNvZGUoVFlQRSwgcGFybWksIHBhcm1qLCBuKSB7IAkJXAorCWxvbmcgaSA9IChuKSAvIHNpemVvZiAoVFlQRSk7IAkJCVwKKwlUWVBFICpwaSA9IChUWVBFICopIChwYXJtaSk7IAkJCVwKKwlUWVBFICpwaiA9IChUWVBFICopIChwYXJtaik7IAkJCVwKKwlkbyB7IAkJCQkJCVwKKwkJVFlQRQl0ID0gKnBpOwkJCVwKKwkJKnBpKysgPSAqcGo7CQkJCVwKKwkJKnBqKysgPSB0OwkJCQlcCisgICAgICAgIH0gd2hpbGUgKC0taSA+IDApOwkJCQlcCit9CisKKyNkZWZpbmUgU1dBUElOSVQoYSwgZXMpIHN3YXB0eXBlID0gKChjaGFyICopYSAtIChjaGFyICopMCkgJSBzaXplb2YobG9uZykgfHwgXAorCWVzICUgc2l6ZW9mKGxvbmcpID8gMiA6IGVzID09IHNpemVvZihsb25nKT8gMCA6IDE7CisKK3N0YXRpYyBfX2lubGluZSB2b2lkCitzd2FwZnVuYyhjaGFyICphLCBjaGFyICpiLCBpbnQgbiwgaW50IHN3YXB0eXBlKQoreworCWlmIChzd2FwdHlwZSA8PSAxKSAKKwkJc3dhcGNvZGUobG9uZywgYSwgYiwgbikKKwllbHNlCisJCXN3YXBjb2RlKGNoYXIsIGEsIGIsIG4pCit9CisKKyNkZWZpbmUgc3dhcChhLCBiKQkJCQkJXAorCWlmIChzd2FwdHlwZSA9PSAwKSB7CQkJCVwKKwkJbG9uZyB0ID0gKihsb25nICopKGEpOwkJCVwKKwkJKihsb25nICopKGEpID0gKihsb25nICopKGIpOwkJXAorCQkqKGxvbmcgKikoYikgPSB0OwkJCVwKKwl9IGVsc2UJCQkJCQlcCisJCXN3YXBmdW5jKGEsIGIsIGVzLCBzd2FwdHlwZSkKKworI2RlZmluZSB2ZWNzd2FwKGEsIGIsIG4pIAlpZiAoKG4pID4gMCkgc3dhcGZ1bmMoYSwgYiwgbiwgc3dhcHR5cGUpCisKK3N0YXRpYyBfX2lubGluZSBjaGFyICoKK21lZDMoY2hhciAqYSwgY2hhciAqYiwgY2hhciAqYywgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJcmV0dXJuIGNtcChhLCBiKSA8IDAgPworCSAgICAgICAoY21wKGIsIGMpIDwgMCA/IGIgOiAoY21wKGEsIGMpIDwgMCA/IGMgOiBhICkpCisgICAgICAgICAgICAgIDooY21wKGIsIGMpID4gMCA/IGIgOiAoY21wKGEsIGMpIDwgMCA/IGEgOiBjICkpOworfQorCit2b2lkCitxc29ydCh2b2lkICphYSwgc2l6ZV90IG4sIHNpemVfdCBlcywgaW50ICgqY21wKShjb25zdCB2b2lkICosIGNvbnN0IHZvaWQgKikpCit7CisJY2hhciAqcGEsICpwYiwgKnBjLCAqcGQsICpwbCwgKnBtLCAqcG47CisJaW50IGQsIHIsIHN3YXB0eXBlLCBzd2FwX2NudDsKKwljaGFyICphID0gYWE7CisKK2xvb3A6CVNXQVBJTklUKGEsIGVzKTsKKwlzd2FwX2NudCA9IDA7CisJaWYgKG4gPCA3KSB7CisJCWZvciAocG0gPSAoY2hhciAqKWEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKKwkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCkgPiAwOworCQkJICAgICBwbCAtPSBlcykKKwkJCQlzd2FwKHBsLCBwbCAtIGVzKTsKKwkJcmV0dXJuOworCX0KKwlwbSA9IChjaGFyICopYSArIChuIC8gMikgKiBlczsKKwlpZiAobiA+IDcpIHsKKwkJcGwgPSAoY2hhciAqKWE7CisJCXBuID0gKGNoYXIgKilhICsgKG4gLSAxKSAqIGVzOworCQlpZiAobiA+IDQwKSB7CisJCQlkID0gKG4gLyA4KSAqIGVzOworCQkJcGwgPSBtZWQzKHBsLCBwbCArIGQsIHBsICsgMiAqIGQsIGNtcCk7CisJCQlwbSA9IG1lZDMocG0gLSBkLCBwbSwgcG0gKyBkLCBjbXApOworCQkJcG4gPSBtZWQzKHBuIC0gMiAqIGQsIHBuIC0gZCwgcG4sIGNtcCk7CisJCX0KKwkJcG0gPSBtZWQzKHBsLCBwbSwgcG4sIGNtcCk7CisJfQorCXN3YXAoYSwgcG0pOworCXBhID0gcGIgPSAoY2hhciAqKWEgKyBlczsKKyAgICAKKwlwYyA9IHBkID0gKGNoYXIgKilhICsgKG4gLSAxKSAqIGVzOworCWZvciAoOzspIHsKKwkJd2hpbGUgKHBiIDw9IHBjICYmIChyID0gY21wKHBiLCBhKSkgPD0gMCkgeworCQkJaWYgKHIgPT0gMCkgeworCQkJCXN3YXBfY250ID0gMTsKKwkJCQlzd2FwKHBhLCBwYik7CisJCQkJcGEgKz0gZXM7CisgICAgICB9CisJCQlwYiArPSBlczsKKwkJfQorCQl3aGlsZSAocGIgPD0gcGMgJiYgKHIgPSBjbXAocGMsIGEpKSA+PSAwKSB7CisJCQlpZiAociA9PSAwKSB7CisJCQkJc3dhcF9jbnQgPSAxOworCQkJCXN3YXAocGMsIHBkKTsKKwkJCQlwZCAtPSBlczsKKwkJCX0KKwkJCXBjIC09IGVzOworCQl9CisJCWlmIChwYiA+IHBjKQorCQkJYnJlYWs7CisJCXN3YXAocGIsIHBjKTsKKwkJc3dhcF9jbnQgPSAxOworCQlwYiArPSBlczsKKwkJcGMgLT0gZXM7CisJfQorCWlmIChzd2FwX2NudCA9PSAwKSB7ICAvKiBTd2l0Y2ggdG8gaW5zZXJ0aW9uIHNvcnQgKi8KKwkJZm9yIChwbSA9IChjaGFyICopIGEgKyBlczsgcG0gPCAoY2hhciAqKSBhICsgbiAqIGVzOyBwbSArPSBlcykKKwkJCWZvciAocGwgPSBwbTsgcGwgPiAoY2hhciAqKSBhICYmIGNtcChwbCAtIGVzLCBwbCkgPiAwOyAKKwkJCSAgICAgcGwgLT0gZXMpCisJCQkJc3dhcChwbCwgcGwgLSBlcyk7CisJCXJldHVybjsKKyAgICB9CisKKwlwbiA9IChjaGFyICopYSArIG4gKiBlczsKKwlyID0gbWluKHBhIC0gKGNoYXIgKilhLCBwYiAtIHBhKTsKKwl2ZWNzd2FwKGEsIHBiIC0gciwgcik7CisJciA9IG1pbihwZCAtIHBjLCBwbiAtIHBkIC0gKGludCllcyk7CisJdmVjc3dhcChwYiwgcG4gLSByLCByKTsKKwlpZiAoKHIgPSBwYiAtIHBhKSA+IChpbnQpZXMpCisJCXFzb3J0KGEsIHIgLyBlcywgZXMsIGNtcCk7CisJaWYgKChyID0gcGQgLSBwYykgPiAoaW50KWVzKSB7IAorCQkvKiBJdGVyYXRlIHJhdGhlciB0aGFuIHJlY3Vyc2UgdG8gc2F2ZSBzdGFjayBzcGFjZSAqLworCQlhID0gcG4gLSByOworCQluID0gciAvIGVzOworCQlnb3RvIGxvb3A7CisJfQorLyoJCXFzb3J0KHBuIC0gciwgciAvIGVzLCBlcywgY21wKTsqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc2VlZDQ4LmMgYi9saWJjL3N0ZGxpYi9zZWVkNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZmQ1ZjU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc2VlZDQ4LmMKQEAgLTAsMCArMSwzNyBAQAorLyoJJE9wZW5CU0Q6IHNlZWQ0OC5jLHYgMS4zIDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5OTMgTWFydGluIEJpcmdtZWllcgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBZb3UgbWF5IHJlZGlzdHJpYnV0ZSB1bm1vZGlmaWVkIG9yIG1vZGlmaWVkIHZlcnNpb25zIG9mIHRoaXMgc291cmNlCisgKiBjb2RlIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgYW5kIHRoZQorICogZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIHJldGFpbmVkLgorICoKKyAqIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgYGBhcyBpcycnLCBhbmQgY29tZXMgd2l0aCBubyB3YXJyYW50aWVzCisgKiBvZiBhbnkga2luZC4gSSBzaGFsbCBpbiBubyBldmVudCBiZSBsaWFibGUgZm9yIGFueXRoaW5nIHRoYXQgaGFwcGVucworICogdG8gYW55b25lL2FueXRoaW5nIHdoZW4gdXNpbmcgdGhpcyBzb2Z0d2FyZS4KKyAqLworCisjaW5jbHVkZSAicmFuZDQ4LmgiCisKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9zZWVkWzNdOworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X211bHRbM107CitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfYWRkOworCit1bnNpZ25lZCBzaG9ydCAqCitzZWVkNDgodW5zaWduZWQgc2hvcnQgeHNlZWRbM10pCit7CisJc3RhdGljIHVuc2lnbmVkIHNob3J0IHNzZWVkWzNdOworICAKKwlzc2VlZFswXSA9IF9fcmFuZDQ4X3NlZWRbMF07CisJc3NlZWRbMV0gPSBfX3JhbmQ0OF9zZWVkWzFdOworCXNzZWVkWzJdID0gX19yYW5kNDhfc2VlZFsyXTsKKwlfX3JhbmQ0OF9zZWVkWzBdID0geHNlZWRbMF07CisJX19yYW5kNDhfc2VlZFsxXSA9IHhzZWVkWzFdOworCV9fcmFuZDQ4X3NlZWRbMl0gPSB4c2VlZFsyXTsKKwlfX3JhbmQ0OF9tdWx0WzBdID0gUkFORDQ4X01VTFRfMDsKKwlfX3JhbmQ0OF9tdWx0WzFdID0gUkFORDQ4X01VTFRfMTsKKwlfX3JhbmQ0OF9tdWx0WzJdID0gUkFORDQ4X01VTFRfMjsKKwlfX3JhbmQ0OF9hZGQgPSBSQU5ENDhfQUREOworCXJldHVybiBzc2VlZDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3NldGVudi5jIGIvbGliYy9zdGRsaWIvc2V0ZW52LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODU2ZGI1ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3NldGVudi5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgkkT3BlbkJTRDogc2V0ZW52LmMsdiAxLjkgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4NyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKl9fZmluZGVudihjb25zdCBjaGFyICpuYW1lLCBpbnQgKm9mZnNldCk7CisKK2V4dGVybiBjaGFyICoqZW52aXJvbjsKKworLyoKKyAqIHNldGVudiAtLQorICoJU2V0IHRoZSB2YWx1ZSBvZiB0aGUgZW52aXJvbm1lbnRhbCB2YXJpYWJsZSAibmFtZSIgdG8gYmUKKyAqCSJ2YWx1ZSIuICBJZiByZXdyaXRlIGlzIHNldCwgcmVwbGFjZSBhbnkgY3VycmVudCB2YWx1ZS4KKyAqLworaW50CitzZXRlbnYoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqdmFsdWUsIGludCByZXdyaXRlKQoreworCXN0YXRpYyBjaGFyICoqbGFzdGVudjsJCQkvKiBsYXN0IHZhbHVlIG9mIGVudmlyb24gKi8KKwljaGFyICpDOworCWludCBsX3ZhbHVlLCBvZmZzZXQ7CisKKwlpZiAoKnZhbHVlID09ICc9JykJCQkvKiBubyBgPScgaW4gdmFsdWUgKi8KKwkJKyt2YWx1ZTsKKwlsX3ZhbHVlID0gc3RybGVuKHZhbHVlKTsKKwlpZiAoKEMgPSBfX2ZpbmRlbnYobmFtZSwgJm9mZnNldCkpKSB7CS8qIGZpbmQgaWYgYWxyZWFkeSBleGlzdHMgKi8KKwkJaWYgKCFyZXdyaXRlKQorCQkJcmV0dXJuICgwKTsKKwkJaWYgKChpbnQpc3RybGVuKEMpID49IGxfdmFsdWUpIHsJLyogb2xkIGxhcmdlcjsgY29weSBvdmVyICovCisJCQl3aGlsZSAoKCpDKysgPSAqdmFsdWUrKykpCisJCQkJOworCQkJcmV0dXJuICgwKTsKKwkJfQorCX0gZWxzZSB7CQkJCQkvKiBjcmVhdGUgbmV3IHNsb3QgKi8KKwkJc2l6ZV90IGNudDsKKwkJY2hhciAqKlA7CisKKwkJZm9yIChQID0gZW52aXJvbjsgKlAgIT0gTlVMTDsgUCsrKQorCQkJOworCQljbnQgPSBQIC0gZW52aXJvbjsKKyAgICAgICAgUCA9IChjaGFyICoqKXJlYWxsb2MobGFzdGVudiwgc2l6ZW9mKGNoYXIgKikgKiAoY250ICsgMikpOworCQlpZiAoIVApCisJCQlyZXR1cm4gKC0xKTsKKwkJaWYgKGxhc3RlbnYgIT0gZW52aXJvbikKKwkJCW1lbWNweShQLCBlbnZpcm9uLCBjbnQgKiBzaXplb2YoY2hhciAqKSk7CisJCWxhc3RlbnYgPSBlbnZpcm9uID0gUDsKKwkJb2Zmc2V0ID0gY250OworCQllbnZpcm9uW2NudCArIDFdID0gTlVMTDsKKwl9CisJZm9yIChDID0gKGNoYXIgKiluYW1lOyAqQyAmJiAqQyAhPSAnPSc7ICsrQykKKwkJOwkJCQkvKiBubyBgPScgaW4gbmFtZSAqLworCWlmICghKGVudmlyb25bb2Zmc2V0XSA9CQkJLyogbmFtZSArIGA9JyArIHZhbHVlICovCisJICAgIG1hbGxvYygoc2l6ZV90KSgoaW50KShDIC0gbmFtZSkgKyBsX3ZhbHVlICsgMikpKSkKKwkJcmV0dXJuICgtMSk7CisJZm9yIChDID0gZW52aXJvbltvZmZzZXRdOyAoKkMgPSAqbmFtZSsrKSAmJiAqQyAhPSAnPSc7ICsrQykKKwkJOworCWZvciAoKkMrKyA9ICc9JzsgKCpDKysgPSAqdmFsdWUrKyk7ICkKKwkJOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiB1bnNldGVudihuYW1lKSAtLQorICoJRGVsZXRlIGVudmlyb25tZW50YWwgdmFyaWFibGUgIm5hbWUiLgorICovCitpbnQKK3Vuc2V0ZW52KGNvbnN0IGNoYXIgKm5hbWUpCit7CisJY2hhciAqKlA7CisJaW50IG9mZnNldDsKKworCXdoaWxlIChfX2ZpbmRlbnYobmFtZSwgJm9mZnNldCkpCS8qIGlmIHNldCBtdWx0aXBsZSB0aW1lcyAqLworCQlmb3IgKFAgPSAmZW52aXJvbltvZmZzZXRdOzsgKytQKQorCQkJaWYgKCEoKlAgPSAqKFAgKyAxKSkpCisJCQkJYnJlYWs7CisKKyAgICAgICAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zZXRqbXBlcnIuYyBiL2xpYmMvc3RkbGliL3NldGptcGVyci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMDZjZGMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zZXRqbXBlcnIuYwpAQCAtMCwwICsxLDQ2IEBACisvKgkkT3BlbkJTRDogc2V0am1wZXJyLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qCisgKiBUaGlzIHJvdXRpbmUgaXMgY2FsbGVkIGZyb20gbG9uZ2ptcCgpIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogUHJvZ3JhbXMgdGhhdCB3aXNoIHRvIGV4aXQgZ3JhY2VmdWxseSBmcm9tIHRoaXMgZXJyb3IgbWF5CisgKiB3cml0ZSB0aGVpciBvd24gdmVyc2lvbnMuCisgKiBJZiB0aGlzIHJvdXRpbmUgcmV0dXJucywgdGhlIHByb2dyYW0gaXMgYWJvcnRlZC4KKyAqLworCisjaW5jbHVkZSA8c2V0am1wLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3ZvaWQKK2xvbmdqbXBlcnJvcih2b2lkKQoreworI2RlZmluZQlFUlJNU0cJImxvbmdqbXAgYm90Y2guXG4iCisJKHZvaWQpd3JpdGUoU1RERVJSX0ZJTEVOTywgRVJSTVNHLCBzaXplb2YoRVJSTVNHKSAtIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc2hhMWhhc2guYyBiL2xpYmMvc3RkbGliL3NoYTFoYXNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjhlMzM5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3NoYTFoYXNoLmMKQEAgLTAsMCArMSwzMTcgQEAKKy8qCitTSEEtMSBpbiBDCitCeSBTdGV2ZSBSZWlkIDxzcmVpZEBzZWEtdG8tc2t5Lm5ldD4KKzEwMCUgUHVibGljIERvbWFpbgorCistLS0tLS0tLS0tLS0tLS0tLQorTW9kaWZpZWQgNy85OCAKK0J5IEphbWVzIEguIEJyb3duIDxqYnJvd25AYnVyZ295bmUuY29tPgorU3RpbGwgMTAwJSBQdWJsaWMgRG9tYWluCisKK0NvcnJlY3RlZCBhIHByb2JsZW0gd2hpY2ggZ2VuZXJhdGVkIGltcHJvcGVyIGhhc2ggdmFsdWVzIG9uIDE2IGJpdCBtYWNoaW5lcworUm91dGluZSBTSEExVXBkYXRlIGNoYW5nZWQgZnJvbQorCXZvaWQgU0hBMVVwZGF0ZShTSEExX0NUWCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQgaW50CitsZW4pCit0bworCXZvaWQgU0hBMVVwZGF0ZShTSEExX0NUWCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGF0YSwgdW5zaWduZWQKK2xvbmcgbGVuKQorCitUaGUgJ2xlbicgcGFyYW1ldGVyIHdhcyBkZWNsYXJlZCBhbiBpbnQgd2hpY2ggd29ya3MgZmluZSBvbiAzMiBiaXQgbWFjaGluZXMuCitIb3dldmVyLCBvbiAxNiBiaXQgbWFjaGluZXMgYW4gaW50IGlzIHRvbyBzbWFsbCBmb3IgdGhlIHNoaWZ0cyBiZWluZyBkb25lCithZ2FpbnN0CitpdC4gIFRoaXMgY2F1c2VkIHRoZSBoYXNoIGZ1bmN0aW9uIHRvIGdlbmVyYXRlIGluY29ycmVjdCB2YWx1ZXMgaWYgbGVuIHdhcworZ3JlYXRlciB0aGFuIDgxOTEgKDhLIC0gMSkgZHVlIHRvIHRoZSAnbGVuIDw8IDMnIG9uIGxpbmUgMyBvZiBTSEExVXBkYXRlKCkuCisKK1NpbmNlIHRoZSBmaWxlIElPIGluIG1haW4oKSByZWFkcyAxNksgYXQgYSB0aW1lLCBhbnkgZmlsZSA4SyBvciBsYXJnZXIgd291bGQKK2JlIGd1YXJhbnRlZWQgdG8gZ2VuZXJhdGUgdGhlIHdyb25nIGhhc2ggKGUuZy4gVGVzdCBWZWN0b3IgIzMsIGEgbWlsbGlvbgorImEicykuCisKK0kgYWxzbyBjaGFuZ2VkIHRoZSBkZWNsYXJhdGlvbiBvZiB2YXJpYWJsZXMgaSAmIGogaW4gU0hBMVVwZGF0ZSB0byAKK3Vuc2lnbmVkIGxvbmcgZnJvbSB1bnNpZ25lZCBpbnQgZm9yIHRoZSBzYW1lIHJlYXNvbi4KKworVGhlc2UgY2hhbmdlcyBzaG91bGQgbWFrZSBubyBkaWZmZXJlbmNlIHRvIGFueSAzMiBiaXQgaW1wbGVtZW50YXRpb25zIHNpbmNlCithbgoraW50IGFuZCBhIGxvbmcgYXJlIHRoZSBzYW1lIHNpemUgaW4gdGhvc2UgZW52aXJvbm1lbnRzLgorCistLQorSSBhbHNvIGNvcnJlY3RlZCBhIGZldyBjb21waWxlciB3YXJuaW5ncyBnZW5lcmF0ZWQgYnkgQm9ybGFuZCBDLgorMS4gQWRkZWQgI2luY2x1ZGUgPHByb2Nlc3MuaD4gZm9yIGV4aXQoKSBwcm90b3R5cGUKKzIuIFJlbW92ZWQgdW51c2VkIHZhcmlhYmxlICdqJyBpbiBTSEExRmluYWwKKzMuIENoYW5nZWQgZXhpdCgwKSB0byByZXR1cm4oMCkgYXQgZW5kIG9mIG1haW4uCisKK0FMTCBjaGFuZ2VzIEkgbWFkZSBjYW4gYmUgbG9jYXRlZCBieSBzZWFyY2hpbmcgZm9yIGNvbW1lbnRzIGNvbnRhaW5pbmcgJ0pIQicKKy0tLS0tLS0tLS0tLS0tLS0tCitNb2RpZmllZCA4Lzk4CitCeSBTdGV2ZSBSZWlkIDxzcmVpZEBzZWEtdG8tc2t5Lm5ldD4KK1N0aWxsIDEwMCUgcHVibGljIGRvbWFpbgorCisxLSBSZW1vdmVkICNpbmNsdWRlIDxwcm9jZXNzLmg+IGFuZCB1c2VkIHJldHVybigpIGluc3RlYWQgb2YgZXhpdCgpCisyLSBGaXhlZCBvdmVyd3JpdGluZyBvZiBmaW5hbGNvdW50IGluIFNIQTFGaW5hbCgpIChkaXNjb3ZlcmVkIGJ5IENocmlzIEhhbGwpCiszLSBDaGFuZ2VkIGVtYWlsIGFkZHJlc3MgZnJvbSBzdGV2ZUBlZG13ZWIuY29tIHRvIHNyZWlkQHNlYS10by1za3kubmV0CisKKy0tLS0tLS0tLS0tLS0tLS0tCitNb2RpZmllZCA0LzAxCitCeSBTYXVsIEtyYXZpdHogPFNhdWwuS3Jhdml0ekBjZWxlcmEuY29tPgorU3RpbGwgMTAwJSBQRAorTW9kaWZpZWQgdG8gcnVuIG9uIENvbXBhcSBBbHBoYSBoYXJkd2FyZS4gIAorCistLS0tLS0tLS0tLS0tLS0tLQorTW9kaWZpZWQgMi8wMworQnkgSC4gUGV0ZXIgQW52aW4gPGhwYUB6eXRvci5jb20+CitTdGlsbCAxMDAlIFBECitNb2RpZmllZCB0byBydW4gb24gYW55IGhhcmR3YXJlIHdpdGggPGludHR5cGVzLmg+IGFuZCA8bmV0aW5ldC9pbi5oPgorQ2hhbmdlZCB0aGUgZHJpdmVyIHByb2dyYW0KKworKi8KKworLyoKK1Rlc3QgVmVjdG9ycyAoZnJvbSBGSVBTIFBVQiAxODAtMSkKKyJhYmMiCisgIEE5OTkzRTM2IDQ3MDY4MTZBIEJBM0UyNTcxIDc4NTBDMjZDIDlDRDBEODlECisiYWJjZGJjZGVjZGVmZGVmZ2VmZ2hmZ2hpZ2hpamhpamtpamtsamtsbWtsbW5sbW5vbW5vcG5vcHEiCisgIDg0OTgzRTQ0IDFDM0JEMjZFIEJBQUU0QUExIEY5NTEyOUU1IEU1NDY3MEYxCitBIG1pbGxpb24gcmVwZXRpdGlvbnMgb2YgImEiCisgIDM0QUE5NzNDIEQ0QzREQUE0IEY2MUVFQjJCIERCQUQyNzMxIDY1MzQwMTZGCisqLworCisvKiAjZGVmaW5lIFNIQTFIQU5EU09GRiAgKi8KKworI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CQkvKiBGb3IgaHRvbmwvbnRvaGwvaHRvbnMvbnRvaHMgKi8KKworLyogI2luY2x1ZGUgPHByb2Nlc3MuaD4gKi8JLyogcHJvdG90eXBlIGZvciBleGl0KCkgLSBKSEIgKi8KKy8qIFVzaW5nIHJldHVybigpIGluc3RlYWQgb2YgZXhpdCgpIC0gU1dSICovCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICB1aW50MzJfdCBzdGF0ZVs1XTsKKyAgICB1aW50MzJfdCBjb3VudFsyXTsKKyAgICB1bnNpZ25lZCBjaGFyIGJ1ZmZlcls2NF07Cit9IFNIQTFfQ1RYOworCit2b2lkIFNIQTFUcmFuc2Zvcm0odWludDMyX3Qgc3RhdGVbNV0sIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XSk7Cit2b2lkIFNIQTFJbml0KFNIQTFfQ1RYKiBjb250ZXh0KTsKK3ZvaWQgU0hBMVVwZGF0ZShTSEExX0NUWCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGF0YSwgdWludDMyX3QgbGVuKTsJLyoKK0pIQiAqLwordm9pZCBTSEExRmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMjBdLCBTSEExX0NUWCogY29udGV4dCk7CisKKyNkZWZpbmUgcm9sKHZhbHVlLCBiaXRzKSAoKCh2YWx1ZSkgPDwgKGJpdHMpKSB8ICgodmFsdWUpID4+ICgzMiAtIChiaXRzKSkpKQorCisvKiBibGswKCkgYW5kIGJsaygpIHBlcmZvcm0gdGhlIGluaXRpYWwgZXhwYW5kLiAqLworLyogSSBnb3QgdGhlIGlkZWEgb2YgZXhwYW5kaW5nIGR1cmluZyB0aGUgcm91bmQgZnVuY3Rpb24gZnJvbSBTU0xlYXkgKi8KKyNkZWZpbmUgYmxrMChpKSAoYmxvY2stPmxbaV0gPSBudG9obChibG9jay0+bFtpXSkpCisjZGVmaW5lIGJsayhpKSAoYmxvY2stPmxbaSYxNV0gPSByb2woYmxvY2stPmxbKGkrMTMpJjE1XV5ibG9jay0+bFsoaSs4KSYxNV0gXAorICAgIF5ibG9jay0+bFsoaSsyKSYxNV1eYmxvY2stPmxbaSYxNV0sMSkpCisKKy8qIChSMCtSMSksIFIyLCBSMywgUjQgYXJlIHRoZSBkaWZmZXJlbnQgb3BlcmF0aW9ucyB1c2VkIGluIFNIQTEgKi8KKyNkZWZpbmUgUjAodix3LHgseSx6LGkpIHorPSgodyYoeF55KSleeSkrYmxrMChpKSsweDVBODI3OTk5K3JvbCh2LDUpO3c9cm9sKHcsMzApOworI2RlZmluZSBSMSh2LHcseCx5LHosaSkgeis9KCh3Jih4XnkpKV55KStibGsoaSkrMHg1QTgyNzk5OStyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjIodix3LHgseSx6LGkpIHorPSh3XnheeSkrYmxrKGkpKzB4NkVEOUVCQTErcm9sKHYsNSk7dz1yb2wodywzMCk7CisjZGVmaW5lIFIzKHYsdyx4LHkseixpKSB6Kz0oKCh3fHgpJnkpfCh3JngpKStibGsoaSkrMHg4RjFCQkNEQytyb2wodiw1KTt3PXJvbCh3LDMwKTsKKyNkZWZpbmUgUjQodix3LHgseSx6LGkpIHorPSh3XnheeSkrYmxrKGkpKzB4Q0E2MkMxRDYrcm9sKHYsNSk7dz1yb2wodywzMCk7CisKKworI2lmZGVmIFZFUkJPU0UgIC8qIFNBSyAqLwordm9pZCBTSEFQcmludENvbnRleHQoU0hBMV9DVFggKmNvbnRleHQsIGNoYXIgKm1zZyl7CisgIHByaW50ZigiJXMgKCVkLCVkKSAleCAleCAleCAleCAleFxuIiwKKwkgbXNnLAorCSBjb250ZXh0LT5jb3VudFswXSwgY29udGV4dC0+Y291bnRbMV0sIAorCSBjb250ZXh0LT5zdGF0ZVswXSwKKwkgY29udGV4dC0+c3RhdGVbMV0sCisJIGNvbnRleHQtPnN0YXRlWzJdLAorCSBjb250ZXh0LT5zdGF0ZVszXSwKKwkgY29udGV4dC0+c3RhdGVbNF0pOworfQorI2VuZGlmCisKKy8qIEhhc2ggYSBzaW5nbGUgNTEyLWJpdCBibG9jay4gVGhpcyBpcyB0aGUgY29yZSBvZiB0aGUgYWxnb3JpdGhtLiAqLworCit2b2lkIFNIQTFUcmFuc2Zvcm0odWludDMyX3Qgc3RhdGVbNV0sIHVuc2lnbmVkIGNoYXIgYnVmZmVyWzY0XSkKK3sKK3VpbnQzMl90IGEsIGIsIGMsIGQsIGU7Cit0eXBlZGVmIHVuaW9uIHsKKyAgICB1bnNpZ25lZCBjaGFyIGNbNjRdOworICAgIHVpbnQzMl90IGxbMTZdOworfSBDSEFSNjRMT05HMTY7CitDSEFSNjRMT05HMTYqIGJsb2NrOworI2lmZGVmIFNIQTFIQU5EU09GRgorc3RhdGljIHVuc2lnbmVkIGNoYXIgd29ya3NwYWNlWzY0XTsKKyAgICBibG9jayA9IChDSEFSNjRMT05HMTYqKXdvcmtzcGFjZTsKKyAgICBtZW1jcHkoYmxvY2ssIGJ1ZmZlciwgNjQpOworI2Vsc2UKKyAgICBibG9jayA9IChDSEFSNjRMT05HMTYqKWJ1ZmZlcjsKKyNlbmRpZgorICAgIC8qIENvcHkgY29udGV4dC0+c3RhdGVbXSB0byB3b3JraW5nIHZhcnMgKi8KKyAgICBhID0gc3RhdGVbMF07CisgICAgYiA9IHN0YXRlWzFdOworICAgIGMgPSBzdGF0ZVsyXTsKKyAgICBkID0gc3RhdGVbM107CisgICAgZSA9IHN0YXRlWzRdOworICAgIC8qIDQgcm91bmRzIG9mIDIwIG9wZXJhdGlvbnMgZWFjaC4gTG9vcCB1bnJvbGxlZC4gKi8KKyAgICBSMChhLGIsYyxkLGUsIDApOyBSMChlLGEsYixjLGQsIDEpOyBSMChkLGUsYSxiLGMsIDIpOyBSMChjLGQsZSxhLGIsIDMpOworICAgIFIwKGIsYyxkLGUsYSwgNCk7IFIwKGEsYixjLGQsZSwgNSk7IFIwKGUsYSxiLGMsZCwgNik7IFIwKGQsZSxhLGIsYywgNyk7CisgICAgUjAoYyxkLGUsYSxiLCA4KTsgUjAoYixjLGQsZSxhLCA5KTsgUjAoYSxiLGMsZCxlLDEwKTsgUjAoZSxhLGIsYyxkLDExKTsKKyAgICBSMChkLGUsYSxiLGMsMTIpOyBSMChjLGQsZSxhLGIsMTMpOyBSMChiLGMsZCxlLGEsMTQpOyBSMChhLGIsYyxkLGUsMTUpOworICAgIFIxKGUsYSxiLGMsZCwxNik7IFIxKGQsZSxhLGIsYywxNyk7IFIxKGMsZCxlLGEsYiwxOCk7IFIxKGIsYyxkLGUsYSwxOSk7CisgICAgUjIoYSxiLGMsZCxlLDIwKTsgUjIoZSxhLGIsYyxkLDIxKTsgUjIoZCxlLGEsYixjLDIyKTsgUjIoYyxkLGUsYSxiLDIzKTsKKyAgICBSMihiLGMsZCxlLGEsMjQpOyBSMihhLGIsYyxkLGUsMjUpOyBSMihlLGEsYixjLGQsMjYpOyBSMihkLGUsYSxiLGMsMjcpOworICAgIFIyKGMsZCxlLGEsYiwyOCk7IFIyKGIsYyxkLGUsYSwyOSk7IFIyKGEsYixjLGQsZSwzMCk7IFIyKGUsYSxiLGMsZCwzMSk7CisgICAgUjIoZCxlLGEsYixjLDMyKTsgUjIoYyxkLGUsYSxiLDMzKTsgUjIoYixjLGQsZSxhLDM0KTsgUjIoYSxiLGMsZCxlLDM1KTsKKyAgICBSMihlLGEsYixjLGQsMzYpOyBSMihkLGUsYSxiLGMsMzcpOyBSMihjLGQsZSxhLGIsMzgpOyBSMihiLGMsZCxlLGEsMzkpOworICAgIFIzKGEsYixjLGQsZSw0MCk7IFIzKGUsYSxiLGMsZCw0MSk7IFIzKGQsZSxhLGIsYyw0Mik7IFIzKGMsZCxlLGEsYiw0Myk7CisgICAgUjMoYixjLGQsZSxhLDQ0KTsgUjMoYSxiLGMsZCxlLDQ1KTsgUjMoZSxhLGIsYyxkLDQ2KTsgUjMoZCxlLGEsYixjLDQ3KTsKKyAgICBSMyhjLGQsZSxhLGIsNDgpOyBSMyhiLGMsZCxlLGEsNDkpOyBSMyhhLGIsYyxkLGUsNTApOyBSMyhlLGEsYixjLGQsNTEpOworICAgIFIzKGQsZSxhLGIsYyw1Mik7IFIzKGMsZCxlLGEsYiw1Myk7IFIzKGIsYyxkLGUsYSw1NCk7IFIzKGEsYixjLGQsZSw1NSk7CisgICAgUjMoZSxhLGIsYyxkLDU2KTsgUjMoZCxlLGEsYixjLDU3KTsgUjMoYyxkLGUsYSxiLDU4KTsgUjMoYixjLGQsZSxhLDU5KTsKKyAgICBSNChhLGIsYyxkLGUsNjApOyBSNChlLGEsYixjLGQsNjEpOyBSNChkLGUsYSxiLGMsNjIpOyBSNChjLGQsZSxhLGIsNjMpOworICAgIFI0KGIsYyxkLGUsYSw2NCk7IFI0KGEsYixjLGQsZSw2NSk7IFI0KGUsYSxiLGMsZCw2Nik7IFI0KGQsZSxhLGIsYyw2Nyk7CisgICAgUjQoYyxkLGUsYSxiLDY4KTsgUjQoYixjLGQsZSxhLDY5KTsgUjQoYSxiLGMsZCxlLDcwKTsgUjQoZSxhLGIsYyxkLDcxKTsKKyAgICBSNChkLGUsYSxiLGMsNzIpOyBSNChjLGQsZSxhLGIsNzMpOyBSNChiLGMsZCxlLGEsNzQpOyBSNChhLGIsYyxkLGUsNzUpOworICAgIFI0KGUsYSxiLGMsZCw3Nik7IFI0KGQsZSxhLGIsYyw3Nyk7IFI0KGMsZCxlLGEsYiw3OCk7IFI0KGIsYyxkLGUsYSw3OSk7CisgICAgLyogQWRkIHRoZSB3b3JraW5nIHZhcnMgYmFjayBpbnRvIGNvbnRleHQuc3RhdGVbXSAqLworICAgIHN0YXRlWzBdICs9IGE7CisgICAgc3RhdGVbMV0gKz0gYjsKKyAgICBzdGF0ZVsyXSArPSBjOworICAgIHN0YXRlWzNdICs9IGQ7CisgICAgc3RhdGVbNF0gKz0gZTsKKyAgICAvKiBXaXBlIHZhcmlhYmxlcyAqLworICAgIGEgPSBiID0gYyA9IGQgPSBlID0gMDsKK30KKworCisvKiBTSEExSW5pdCAtIEluaXRpYWxpemUgbmV3IGNvbnRleHQgKi8KKwordm9pZCBTSEExSW5pdChTSEExX0NUWCogY29udGV4dCkKK3sKKyAgICAvKiBTSEExIGluaXRpYWxpemF0aW9uIGNvbnN0YW50cyAqLworICAgIGNvbnRleHQtPnN0YXRlWzBdID0gMHg2NzQ1MjMwMTsKKyAgICBjb250ZXh0LT5zdGF0ZVsxXSA9IDB4RUZDREFCODk7CisgICAgY29udGV4dC0+c3RhdGVbMl0gPSAweDk4QkFEQ0ZFOworICAgIGNvbnRleHQtPnN0YXRlWzNdID0gMHgxMDMyNTQ3NjsKKyAgICBjb250ZXh0LT5zdGF0ZVs0XSA9IDB4QzNEMkUxRjA7CisgICAgY29udGV4dC0+Y291bnRbMF0gPSBjb250ZXh0LT5jb3VudFsxXSA9IDA7Cit9CisKKworLyogUnVuIHlvdXIgZGF0YSB0aHJvdWdoIHRoaXMuICovCisKK3ZvaWQgU0hBMVVwZGF0ZShTSEExX0NUWCogY29udGV4dCwgdW5zaWduZWQgY2hhciogZGF0YSwgdWludDMyX3QgbGVuKQkvKgorSkhCICovCit7Cit1aW50MzJfdCBpLCBqOwkvKiBKSEIgKi8KKworI2lmZGVmIFZFUkJPU0UKKyAgICBTSEFQcmludENvbnRleHQoY29udGV4dCwgImJlZm9yZSIpOworI2VuZGlmCisgICAgaiA9IChjb250ZXh0LT5jb3VudFswXSA+PiAzKSAmIDYzOworICAgIGlmICgoY29udGV4dC0+Y291bnRbMF0gKz0gbGVuIDw8IDMpIDwgKGxlbiA8PCAzKSkgY29udGV4dC0+Y291bnRbMV0rKzsKKyAgICBjb250ZXh0LT5jb3VudFsxXSArPSAobGVuID4+IDI5KTsKKyAgICBpZiAoKGogKyBsZW4pID4gNjMpIHsKKyAgICAgICAgbWVtY3B5KCZjb250ZXh0LT5idWZmZXJbal0sIGRhdGEsIChpID0gNjQtaikpOworICAgICAgICBTSEExVHJhbnNmb3JtKGNvbnRleHQtPnN0YXRlLCBjb250ZXh0LT5idWZmZXIpOworICAgICAgICBmb3IgKCA7IGkgKyA2MyA8IGxlbjsgaSArPSA2NCkgeworICAgICAgICAgICAgU0hBMVRyYW5zZm9ybShjb250ZXh0LT5zdGF0ZSwgJmRhdGFbaV0pOworICAgICAgICB9CisgICAgICAgIGogPSAwOworICAgIH0KKyAgICBlbHNlIGkgPSAwOworICAgIG1lbWNweSgmY29udGV4dC0+YnVmZmVyW2pdLCAmZGF0YVtpXSwgbGVuIC0gaSk7CisjaWZkZWYgVkVSQk9TRQorICAgIFNIQVByaW50Q29udGV4dChjb250ZXh0LCAiYWZ0ZXIgIik7CisjZW5kaWYKK30KKworCisvKiBBZGQgcGFkZGluZyBhbmQgcmV0dXJuIHRoZSBtZXNzYWdlIGRpZ2VzdC4gKi8KKwordm9pZCBTSEExRmluYWwodW5zaWduZWQgY2hhciBkaWdlc3RbMjBdLCBTSEExX0NUWCogY29udGV4dCkKK3sKK3VpbnQzMl90IGk7CS8qIEpIQiAqLwordW5zaWduZWQgY2hhciBmaW5hbGNvdW50WzhdOworCisgICAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeworICAgICAgICBmaW5hbGNvdW50W2ldID0gKHVuc2lnbmVkIGNoYXIpKChjb250ZXh0LT5jb3VudFsoaSA+PSA0ID8gMCA6IDEpXQorICAgICAgICAgPj4gKCgzLShpICYgMykpICogOCkgKSAmIDI1NSk7ICAvKiBFbmRpYW4gaW5kZXBlbmRlbnQgKi8KKyAgICB9CisgICAgU0hBMVVwZGF0ZShjb250ZXh0LCAodW5zaWduZWQgY2hhciAqKSJcMjAwIiwgMSk7CisgICAgd2hpbGUgKChjb250ZXh0LT5jb3VudFswXSAmIDUwNCkgIT0gNDQ4KSB7CisgICAgICAgIFNIQTFVcGRhdGUoY29udGV4dCwgKHVuc2lnbmVkIGNoYXIgKikiXDAiLCAxKTsKKyAgICB9CisgICAgU0hBMVVwZGF0ZShjb250ZXh0LCBmaW5hbGNvdW50LCA4KTsgIC8qIFNob3VsZCBjYXVzZSBhIFNIQTFUcmFuc2Zvcm0oKQorKi8KKyAgICBmb3IgKGkgPSAwOyBpIDwgMjA7IGkrKykgeworICAgICAgICBkaWdlc3RbaV0gPSAodW5zaWduZWQgY2hhcikKKyAgICAgICAgICgoY29udGV4dC0+c3RhdGVbaT4+Ml0gPj4gKCgzLShpICYgMykpICogOCkgKSAmIDI1NSk7CisgICAgfQorICAgIC8qIFdpcGUgdmFyaWFibGVzICovCisgICAgaSA9IDA7CS8qIEpIQiAqLworICAgIG1lbXNldChjb250ZXh0LT5idWZmZXIsIDAsIDY0KTsKKyAgICBtZW1zZXQoY29udGV4dC0+c3RhdGUsIDAsIDIwKTsKKyAgICBtZW1zZXQoY29udGV4dC0+Y291bnQsIDAsIDgpOworICAgIG1lbXNldChmaW5hbGNvdW50LCAwLCA4KTsJLyogU1dSICovCisjaWZkZWYgU0hBMUhBTkRTT0ZGICAvKiBtYWtlIFNIQTFUcmFuc2Zvcm0gb3ZlcndyaXRlIGl0J3Mgb3duIHN0YXRpYyB2YXJzICovCisgICAgU0hBMVRyYW5zZm9ybShjb250ZXh0LT5zdGF0ZSwgY29udGV4dC0+YnVmZmVyKTsKKyNlbmRpZgorfQorICAKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisvKiBUaGlzIGlzIG5vdCBxdWl0ZSB0aGUgTUlNRSBiYXNlNjQgYWxnb3JpdGhtOiBpdCB1c2VzIF8gaW5zdGVhZCBvZiAvLAorICAgYW5kIGluc3RlYWQgb2YgcGFkZGluZyB0aGUgb3V0cHV0IHdpdGggPSBjaGFyYWN0ZXJzIHdlIGp1c3QgbWFrZSB0aGUKKyAgIG91dHB1dCBzaG9ydGVyLiAqLworY2hhciAqbXliYXNlNjQodWludDhfdCBkaWdlc3RbMjBdKQoreworICBzdGF0aWMgY29uc3QgY2hhciBjaGFyeltdID0KKyAgICAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODktXyI7CisgIHVpbnQ4X3QgaW5wdXRbMjFdOworICBzdGF0aWMgY2hhciBvdXRwdXRbMjhdOworICBpbnQgaSwgajsKKyAgdWludDhfdCAqcDsKKyAgY2hhciAqcTsKKyAgdWludDMyX3QgYnY7CisKKyAgbWVtY3B5KGlucHV0LCBkaWdlc3QsIDIwKTsKKyAgaW5wdXRbMjBdID0gMDsJCS8qIFBhZCB0byBtdWx0aXBsZSBvZiAzIGJ5dGVzICovCisKKyAgcCA9IGlucHV0OyAgcSA9IG91dHB1dDsKKyAgZm9yICggaSA9IDAgOyBpIDwgNyA7IGkrKyApIHsKKyAgICBidiA9IChwWzBdIDw8IDE2KSB8IChwWzFdIDw8IDgpIHwgcFsyXTsKKyAgICBwICs9IDM7CisgICAgZm9yICggaiA9IDAgOyBqIDwgNCA7IGorKyApIHsKKyAgICAgICpxKysgPSBjaGFyelsoYnYgPj4gMTgpICYgMHgzZl07CisgICAgICBidiA8PD0gNjsKKyAgICB9CisgIH0KKyAgKi0tcSA9ICdcMCc7CQkJLyogVGhlIGxhc3QgY2hhcmFjdGVyIGlzIG5vdCBzaWduaWZpY2FudCAqLworICByZXR1cm4gb3V0cHV0OworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hhcioqIGFyZ3YpCit7CisgIGludCBpOworICBTSEExX0NUWCBjb250ZXh0OworICB1aW50OF90IGRpZ2VzdFsyMF0sIGJ1ZmZlclsxNjM4NF07CisgIEZJTEUqIGZpbGU7CisKKyAgaWYgKGFyZ2MgPCAyKSB7CisgICAgZmlsZSA9IHN0ZGluOworICB9CisgIGVsc2UgeworICAgIGlmICghKGZpbGUgPSBmb3Blbihhcmd2WzFdLCAicmIiKSkpIHsKKyAgICAgIGZwdXRzKCJVbmFibGUgdG8gb3BlbiBmaWxlLiIsIHN0ZGVycik7CisgICAgICByZXR1cm4oLTEpOworICAgIH0KKyAgfSAKKyAgU0hBMUluaXQoJmNvbnRleHQpOworICB3aGlsZSAoIWZlb2YoZmlsZSkpIHsgIC8qIG5vdGU6IHdoYXQgaWYgZmVycm9yKGZpbGUpICovCisgICAgaSA9IGZyZWFkKGJ1ZmZlciwgMSwgMTYzODQsIGZpbGUpOworICAgIFNIQTFVcGRhdGUoJmNvbnRleHQsIGJ1ZmZlciwgaSk7CisgIH0KKyAgU0hBMUZpbmFsKGRpZ2VzdCwgJmNvbnRleHQpOworICBmY2xvc2UoZmlsZSk7CisKKyAgcHV0cyhteWJhc2U2NChkaWdlc3QpKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3NyYW5kNDguYyBiL2xpYmMvc3RkbGliL3NyYW5kNDguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzZiNmNjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3JhbmQ0OC5jCkBAIC0wLDAgKzEsMzEgQEAKKy8qCSRPcGVuQlNEOiBzcmFuZDQ4LmMsdiAxLjMgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5MyBNYXJ0aW4gQmlyZ21laWVyCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFlvdSBtYXkgcmVkaXN0cmlidXRlIHVubW9kaWZpZWQgb3IgbW9kaWZpZWQgdmVyc2lvbnMgb2YgdGhpcyBzb3VyY2UKKyAqIGNvZGUgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBhbmQgdGhlCisgKiBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgcmV0YWluZWQuCisgKgorICogVGhpcyBzb2Z0d2FyZSBpcyBwcm92aWRlZCBgYGFzIGlzJycsIGFuZCBjb21lcyB3aXRoIG5vIHdhcnJhbnRpZXMKKyAqIG9mIGFueSBraW5kLiBJIHNoYWxsIGluIG5vIGV2ZW50IGJlIGxpYWJsZSBmb3IgYW55dGhpbmcgdGhhdCBoYXBwZW5zCisgKiB0byBhbnlvbmUvYW55dGhpbmcgd2hlbiB1c2luZyB0aGlzIHNvZnR3YXJlLgorICovCisKKyNpbmNsdWRlICJyYW5kNDguaCIKKworZXh0ZXJuIHVuc2lnbmVkIHNob3J0IF9fcmFuZDQ4X3NlZWRbM107CitleHRlcm4gdW5zaWduZWQgc2hvcnQgX19yYW5kNDhfbXVsdFszXTsKK2V4dGVybiB1bnNpZ25lZCBzaG9ydCBfX3JhbmQ0OF9hZGQ7CisKK3ZvaWQKK3NyYW5kNDgobG9uZyBzZWVkKQoreworCV9fcmFuZDQ4X3NlZWRbMF0gPSBSQU5ENDhfU0VFRF8wOworCV9fcmFuZDQ4X3NlZWRbMV0gPSAodW5zaWduZWQgc2hvcnQpIHNlZWQ7CisJX19yYW5kNDhfc2VlZFsyXSA9ICh1bnNpZ25lZCBzaG9ydCkgKHNlZWQgPj4gMTYpOworCV9fcmFuZDQ4X211bHRbMF0gPSBSQU5ENDhfTVVMVF8wOworCV9fcmFuZDQ4X211bHRbMV0gPSBSQU5ENDhfTVVMVF8xOworCV9fcmFuZDQ4X211bHRbMl0gPSBSQU5ENDhfTVVMVF8yOworCV9fcmFuZDQ4X2FkZCA9IFJBTkQ0OF9BREQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJudG9pbWF4LmMgYi9saWJjL3N0ZGxpYi9zdHJudG9pbWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMmYzY2Q5YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cm50b2ltYXguYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKworaW50bWF4X3Qgc3RybnRvaW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSwgc2l6ZV90IG4pCit7CisgIHJldHVybiAoaW50bWF4X3QpIHN0cm50b3VtYXgobnB0ciwgZW5kcHRyLCBiYXNlLCBuKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cm50b3VtYXguYyBiL2xpYmMvc3RkbGliL3N0cm50b3VtYXguYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTUxZWY1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RybnRvdW1heC5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCitzdGF0aWMgaW5saW5lIGludCBkaWdpdHZhbChpbnQgY2gpCit7CisgICAgdW5zaWduZWQgIGQ7CisKKyAgICBkID0gKHVuc2lnbmVkKShjaCAtICcwJyk7CisgICAgaWYgKGQgPCAxMCkgcmV0dXJuIChpbnQpZDsKKworICAgIGQgPSAodW5zaWduZWQpKGNoIC0gJ2EnKTsKKyAgICBpZiAoZCA8IDYpIHJldHVybiAoaW50KShkKzEwKTsKKworICAgIGQgPSAodW5zaWduZWQpKGNoIC0gJ0EnKTsKKyAgICBpZiAoZCA8IDYpIHJldHVybiAoaW50KShkKzEwKTsKKworICAgIHJldHVybiAtMTsKK30KKwordWludG1heF90CitzdHJudG91bWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlLCBzaXplX3QgbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcCAgID0gbnB0cjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kID0gcCArIG47CisgICAgaW50ICAgICAgICAgICAgICAgICAgIG1pbnVzID0gMDsKKyAgICB1aW50bWF4X3QgICAgICAgICAgICAgdiA9IDA7CisgICAgaW50ICAgICAgICAgICAgICAgICAgIGQ7CisKKyAgICAvKiBza2lwIGxlYWRpbmcgc3BhY2UgKi8KKyAgICB3aGlsZSAocCA8IGVuZCAmJiBpc3NwYWNlKCpwKSkKKyAgICAgICAgcCsrOworCisgICAgLyogU2luZ2xlIG9wdGlvbmFsICsgb3IgLSAqLworICAgIGlmIChwIDwgZW5kKSB7CisgICAgICAgIGNoYXIgYyA9IHBbMF07CisgICAgICAgIGlmICggYyA9PSAnLScgfHwgYyA9PSAnKycgKSB7CisgICAgICAgICAgICBtaW51cyA9IChjID09ICctJyk7CisgICAgICAgICAgICBwKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoIGJhc2UgPT0gMCApIHsKKyAgICAgICAgaWYgKCBwKzIgPCBlbmQgJiYgcFswXSA9PSAnMCcgJiYgKHBbMV0gPT0gJ3gnIHx8IHBbMV0gPT0gJ1gnKSApIHsKKyAgICAgICAgICAgIHAgKz0gMjsKKyAgICAgICAgICAgIGJhc2UgPSAxNjsKKyAgICAgICAgfSBlbHNlIGlmICggcCsxIDwgZW5kICYmIHBbMF0gPT0gJzAnICkgeworICAgICAgICAgICAgcCAgICs9IDE7CisgICAgICAgICAgICBiYXNlID0gODsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJhc2UgPSAxMDsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAoIGJhc2UgPT0gMTYgKSB7CisgICAgICAgIGlmICggcCsyIDwgZW5kICYmIHBbMF0gPT0gJzAnICYmIChwWzFdID09ICd4JyB8fCBwWzFdID09ICdYJykgKSB7CisgICAgICAgICAgICBwICs9IDI7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB3aGlsZSAoIHAgPCBlbmQgJiYgKGQgPSBkaWdpdHZhbCgqcCkpID49IDAgJiYgZCA8IGJhc2UgKSB7CisgICAgICAgIHYgPSB2KmJhc2UgKyBkOworICAgICAgICBwICs9IDE7CisgICAgfQorCisgICAgaWYgKCBlbmRwdHIgKQorICAgICAgICAqZW5kcHRyID0gKGNoYXIgKilwOworCisgICAgcmV0dXJuIG1pbnVzID8gLXYgOiB2OworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9kLmMgYi9saWJjL3N0ZGxpYi9zdHJ0b2QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZmI3MTEyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RydG9kLmMKQEAgLTAsMCArMSwyNTkwIEBACisvKgkkTmV0QlNEOiBzdHJ0b2QuYyx2IDEuNDUuMi4xIDIwMDUvMDQvMTkgMTM6MzU6NTQgdHJvbiBFeHAgJAkqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICoKKyAqIFRoZSBhdXRob3Igb2YgdGhpcyBzb2Z0d2FyZSBpcyBEYXZpZCBNLiBHYXkuCisgKgorICogQ29weXJpZ2h0IChjKSAxOTkxIGJ5IEFUJlQuCisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoaXMgZW50aXJlIG5vdGljZQorICogaXMgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvZiBhbnkgc29mdHdhcmUgd2hpY2ggaXMgb3IgaW5jbHVkZXMgYSBjb3B5CisgKiBvciBtb2RpZmljYXRpb24gb2YgdGhpcyBzb2Z0d2FyZSBhbmQgaW4gYWxsIGNvcGllcyBvZiB0aGUgc3VwcG9ydGluZworICogZG9jdW1lbnRhdGlvbiBmb3Igc3VjaCBzb2Z0d2FyZS4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIEJFSU5HIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVFkuICBJTiBQQVJUSUNVTEFSLCBORUlUSEVSIFRIRSBBVVRIT1IgTk9SIEFUJlQgTUFLRVMgQU5ZCisgKiBSRVBSRVNFTlRBVElPTiBPUiBXQVJSQU5UWSBPRiBBTlkgS0lORCBDT05DRVJOSU5HIFRIRSBNRVJDSEFOVEFCSUxJVFkKKyAqIE9GIFRISVMgU09GVFdBUkUgT1IgSVRTIEZJVE5FU1MgRk9SIEFOWSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyogUGxlYXNlIHNlbmQgYnVnIHJlcG9ydHMgdG8KKwlEYXZpZCBNLiBHYXkKKwlBVCZUIEJlbGwgTGFib3JhdG9yaWVzLCBSb29tIDJDLTQ2MworCTYwMCBNb3VudGFpbiBBdmVudWUKKwlNdXJyYXkgSGlsbCwgTkogMDc5NzQtMjA3MAorCVUuUy5BLgorCWRtZ0ByZXNlYXJjaC5hdHQuY29tIG9yIHJlc2VhcmNoIWRtZworICovCisKKy8qIHN0cnRvZCBmb3IgSUVFRS0sIFZBWC0sIGFuZCBJQk0tYXJpdGhtZXRpYyBtYWNoaW5lcy4KKyAqCisgKiBUaGlzIHN0cnRvZCByZXR1cm5zIGEgbmVhcmVzdCBtYWNoaW5lIG51bWJlciB0byB0aGUgaW5wdXQgZGVjaW1hbAorICogc3RyaW5nIChvciBzZXRzIGVycm5vIHRvIEVSQU5HRSkuICBXaXRoIElFRUUgYXJpdGhtZXRpYywgdGllcyBhcmUKKyAqIGJyb2tlbiBieSB0aGUgSUVFRSByb3VuZC1ldmVuIHJ1bGUuICBPdGhlcndpc2UgdGllcyBhcmUgYnJva2VuIGJ5CisgKiBiaWFzZWQgcm91bmRpbmcgKGFkZCBoYWxmIGFuZCBjaG9wKS4KKyAqCisgKiBJbnNwaXJlZCBsb29zZWx5IGJ5IFdpbGxpYW0gRC4gQ2xpbmdlcidzIHBhcGVyICJIb3cgdG8gUmVhZCBGbG9hdGluZworICogUG9pbnQgTnVtYmVycyBBY2N1cmF0ZWx5IiBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gOTItMTAxXS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoKKyAqCTEuIFdlIG9ubHkgcmVxdWlyZSBJRUVFLCBJQk0sIG9yIFZBWCBkb3VibGUtcHJlY2lzaW9uCisgKgkJYXJpdGhtZXRpYyAobm90IElFRUUgZG91YmxlLWV4dGVuZGVkKS4KKyAqCTIuIFdlIGdldCBieSB3aXRoIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgaW4gYSBjYXNlIHRoYXQKKyAqCQlDbGluZ2VyIG1pc3NlZCAtLSB3aGVuIHdlJ3JlIGNvbXB1dGluZyBkICogMTBebgorICoJCWZvciBhIHNtYWxsIGludGVnZXIgZCBhbmQgdGhlIGludGVnZXIgbiBpcyBub3QgdG9vCisgKgkJbXVjaCBsYXJnZXIgdGhhbiAyMiAodGhlIG1heGltdW0gaW50ZWdlciBrIGZvciB3aGljaAorICoJCXdlIGNhbiByZXByZXNlbnQgMTBeayBleGFjdGx5KSwgd2UgbWF5IGJlIGFibGUgdG8KKyAqCQljb21wdXRlIChkKjEwXmspICogMTBeKGUtaykgd2l0aCBqdXN0IG9uZSByb3VuZG9mZi4KKyAqCTMuIFJhdGhlciB0aGFuIGEgYml0LWF0LWEtdGltZSBhZGp1c3RtZW50IG9mIHRoZSBiaW5hcnkKKyAqCQlyZXN1bHQgaW4gdGhlIGhhcmQgY2FzZSwgd2UgdXNlIGZsb2F0aW5nLXBvaW50CisgKgkJYXJpdGhtZXRpYyB0byBkZXRlcm1pbmUgdGhlIGFkanVzdG1lbnQgdG8gd2l0aGluCisgKgkJb25lIGJpdDsgb25seSBpbiByZWFsbHkgaGFyZCBjYXNlcyBkbyB3ZSBuZWVkIHRvCisgKgkJY29tcHV0ZSBhIHNlY29uZCByZXNpZHVhbC4KKyAqCTQuIEJlY2F1c2Ugb2YgMy4sIHdlIGRvbid0IG5lZWQgYSBsYXJnZSB0YWJsZSBvZiBwb3dlcnMgb2YgMTAKKyAqCQlmb3IgdGVuLXRvLWUgKGp1c3Qgc29tZSBzbWFsbCB0YWJsZXMsIGUuZy4gb2YgMTBeaworICoJCWZvciAwIDw9IGsgPD0gMjIpLgorICovCisKKy8qCisgKiAjZGVmaW5lIElFRUVfTElUVExFX0VORElBTiBmb3IgSUVFRS1hcml0aG1ldGljIG1hY2hpbmVzIHdoZXJlIHRoZSBsZWFzdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2VzdCBhZGRyZXNzLgorICogI2RlZmluZSBJRUVFX0JJR19FTkRJQU4gZm9yIElFRUUtYXJpdGhtZXRpYyBtYWNoaW5lcyB3aGVyZSB0aGUgbW9zdAorICoJc2lnbmlmaWNhbnQgYnl0ZSBoYXMgdGhlIGxvd2VzdCBhZGRyZXNzLgorICogI2RlZmluZSBMb25nIGludCBvbiBtYWNoaW5lcyB3aXRoIDMyLWJpdCBpbnRzIGFuZCA2NC1iaXQgbG9uZ3MuCisgKiAjZGVmaW5lIFN1ZGRlbl9VbmRlcmZsb3cgZm9yIElFRUUtZm9ybWF0IG1hY2hpbmVzIHdpdGhvdXQgZ3JhZHVhbAorICoJdW5kZXJmbG93IChpLmUuLCB0aGF0IGZsdXNoIHRvIHplcm8gb24gdW5kZXJmbG93KS4KKyAqICNkZWZpbmUgSUJNIGZvciBJQk0gbWFpbmZyYW1lLXN0eWxlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisgKiAjZGVmaW5lIFZBWCBmb3IgVkFYLXN0eWxlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMuCisgKiAjZGVmaW5lIFVuc2lnbmVkX1NoaWZ0cyBpZiA+PiBkb2VzIHRyZWF0cyBpdHMgbGVmdCBvcGVyYW5kIGFzIHVuc2lnbmVkLgorICogI2RlZmluZSBOb19sZWZ0cmlnaHQgdG8gb21pdCBsZWZ0LXJpZ2h0IGxvZ2ljIGluIGZhc3QgZmxvYXRpbmctcG9pbnQKKyAqCWNvbXB1dGF0aW9uIG9mIGR0b2EuCisgKiAjZGVmaW5lIENoZWNrX0ZMVF9ST1VORFMgaWYgRkxUX1JPVU5EUyBjYW4gYXNzdW1lIHRoZSB2YWx1ZXMgMiBvciAzLgorICogI2RlZmluZSBSTkRfUFJPRFFVT1QgdG8gdXNlIHJuZF9wcm9kIGFuZCBybmRfcXVvdCAoYXNzZW1ibHkgcm91dGluZXMKKyAqCXRoYXQgdXNlIGV4dGVuZGVkLXByZWNpc2lvbiBpbnN0cnVjdGlvbnMgdG8gY29tcHV0ZSByb3VuZGVkCisgKglwcm9kdWN0cyBhbmQgcXVvdGllbnRzKSB3aXRoIElCTS4KKyAqICNkZWZpbmUgUk9VTkRfQklBU0VEIGZvciBJRUVFLWZvcm1hdCB3aXRoIGJpYXNlZCByb3VuZGluZy4KKyAqICNkZWZpbmUgSW5hY2N1cmF0ZV9EaXZpZGUgZm9yIElFRUUtZm9ybWF0IHdpdGggY29ycmVjdGx5IHJvdW5kZWQKKyAqCXByb2R1Y3RzIGJ1dCBpbmFjY3VyYXRlIHF1b3RpZW50cywgZS5nLiwgZm9yIEludGVsIGk4NjAuCisgKiAjZGVmaW5lIEp1c3RfMTYgdG8gc3RvcmUgMTYgYml0cyBwZXIgMzItYml0IExvbmcgd2hlbiBkb2luZyBoaWdoLXByZWNpc2lvbgorICoJaW50ZWdlciBhcml0aG1ldGljLiAgV2hldGhlciB0aGlzIHNwZWVkcyB0aGluZ3MgdXAgb3Igc2xvd3MgdGhpbmdzCisgKglkb3duIGRlcGVuZHMgb24gdGhlIG1hY2hpbmUgYW5kIHRoZSBudW1iZXIgYmVpbmcgY29udmVydGVkLgorICogI2RlZmluZSBLUl9oZWFkZXJzIGZvciBvbGQtc3R5bGUgQyBmdW5jdGlvbiBoZWFkZXJzLgorICogI2RlZmluZSBCYWRfZmxvYXRfaCBpZiB5b3VyIHN5c3RlbSBsYWNrcyBhIGZsb2F0Lmggb3IgaWYgaXQgZG9lcyBub3QKKyAqCWRlZmluZSBzb21lIG9yIGFsbCBvZiBEQkxfRElHLCBEQkxfTUFYXzEwX0VYUCwgREJMX01BWF9FWFAsCisgKglGTFRfUkFESVgsIEZMVF9ST1VORFMsIGFuZCBEQkxfTUFYLgorICogI2RlZmluZSBNQUxMT0MgeW91cl9tYWxsb2MsIHdoZXJlIHlvdXJfbWFsbG9jKG4pIGFjdHMgbGlrZSBtYWxsb2MobikKKyAqCWlmIG1lbW9yeSBpcyBhdmFpbGFibGUgYW5kIG90aGVyd2lzZSBkb2VzIHNvbWV0aGluZyB5b3UgZGVlbQorICoJYXBwcm9wcmlhdGUuICBJZiBNQUxMT0MgaXMgdW5kZWZpbmVkLCBtYWxsb2Mgd2lsbCBiZSBpbnZva2VkCisgKglkaXJlY3RseSAtLSBhbmQgYXNzdW1lZCBhbHdheXMgdG8gc3VjY2VlZC4KKyAqLworCisjaWZkZWYgQU5EUk9JRF9DSEFOR0VTCisjaW5jbHVkZSA8cHRocmVhZC5oPgorI2RlZmluZSBtdXRleF9sb2NrKHgpIHB0aHJlYWRfbXV0ZXhfbG9jayh4KQorI2RlZmluZSBtdXRleF91bmxvY2soeCkgcHRocmVhZF9tdXRleF91bmxvY2soeCkKKyNlbmRpZgorCisjaW5jbHVkZSA8c3lzL2NkZWZzLmg+CisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitfX1JDU0lEKCIkTmV0QlNEOiBzdHJ0b2QuYyx2IDEuNDUuMi4xIDIwMDUvMDQvMTkgMTM6MzU6NTQgdHJvbiBFeHAgJCIpOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKworI2RlZmluZSBVbnNpZ25lZF9TaGlmdHMKKyNpZiBkZWZpbmVkKF9fbTY4a19fKSB8fCBkZWZpbmVkKF9fc3BhcmNfXykgfHwgZGVmaW5lZChfX2kzODZfXykgfHwgXAorICAgIGRlZmluZWQoX19taXBzX18pIHx8IGRlZmluZWQoX19uczMya19fKSB8fCBkZWZpbmVkKF9fYWxwaGFfXykgfHwgXAorICAgIGRlZmluZWQoX19wb3dlcnBjX18pIHx8IGRlZmluZWQoX19zaF9fKSB8fCBkZWZpbmVkKF9feDg2XzY0X18pIHx8IFwKKyAgICBkZWZpbmVkKF9faHBwYV9fKSB8fCBcCisgICAgKGRlZmluZWQoX19hcm1fXykgJiYgZGVmaW5lZChfX1ZGUF9GUF9fKSkKKyNpbmNsdWRlIDxlbmRpYW4uaD4KKyNpZiBCWVRFX09SREVSID09IEJJR19FTkRJQU4KKyNkZWZpbmUgSUVFRV9CSUdfRU5ESUFOCisjZWxzZQorI2RlZmluZSBJRUVFX0xJVFRMRV9FTkRJQU4KKyNlbmRpZgorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fYXJtX18pICYmICFkZWZpbmVkKF9fVkZQX0ZQX18pCisvKgorICogQWx0aG91Z2ggdGhlIENQVSBpcyBsaXR0bGUgZW5kaWFuIHRoZSBGUCBoYXMgZGlmZmVyZW50CisgKiBieXRlIGFuZCB3b3JkIGVuZGlhbm5lc3MuIFRoZSBieXRlIG9yZGVyIGlzIHN0aWxsIGxpdHRsZSBlbmRpYW4KKyAqIGJ1dCB0aGUgd29yZCBvcmRlciBpcyBiaWcgZW5kaWFuLgorICovCisjZGVmaW5lIElFRUVfQklHX0VORElBTgorI2VuZGlmCisKKyNpZmRlZiBfX3ZheF9fCisjZGVmaW5lIFZBWAorI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9faHBwYV9fKSB8fCBkZWZpbmVkKF9fbWlwc19fKSB8fCBkZWZpbmVkKF9fc2hfXykKKyNkZWZpbmUJTkFOX1dPUkQwCTB4N2ZmNDAwMDAKKyNlbHNlCisjZGVmaW5lCU5BTl9XT1JEMAkweDdmZjgwMDAwCisjZW5kaWYKKyNkZWZpbmUJTkFOX1dPUkQxCTAKKworI2RlZmluZSBMb25nCWludDMyX3QKKyNkZWZpbmUgVUxvbmcJdV9pbnQzMl90CisKKyNpZmRlZiBERUJVRworI2luY2x1ZGUgInN0ZGlvLmgiCisjZGVmaW5lIEJ1Zyh4KSB7ZnByaW50ZihzdGRlcnIsICIlc1xuIiwgeCk7IGV4aXQoMSk7fQorI2VuZGlmCisKKyNpZmRlZiBfX2NwbHVzcGx1cworI2luY2x1ZGUgIm1hbGxvYy5oIgorI2luY2x1ZGUgIm1lbW9yeS5oIgorI2Vsc2UKKyNpZm5kZWYgS1JfaGVhZGVycworI2luY2x1ZGUgInN0ZGxpYi5oIgorI2luY2x1ZGUgInN0cmluZy5oIgorI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJsb2NhbGUuaCIKKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKyNlbHNlCisjaW5jbHVkZSAibWFsbG9jLmgiCisjaW5jbHVkZSAibWVtb3J5LmgiCisjZW5kaWYKKyNlbmRpZgorI2lmbmRlZiBBTkRST0lEX0NIQU5HRVMKKyNpbmNsdWRlICJleHRlcm4uaCIKKyNpbmNsdWRlICJyZWVudHJhbnQuaCIKKyNlbmRpZiAvKiBBTkRST0lEX0NIQU5HRVMgKi8KKworI2lmZGVmIE1BTExPQworI2lmZGVmIEtSX2hlYWRlcnMKK2V4dGVybiBjaGFyICpNQUxMT0MoKTsKKyNlbHNlCitleHRlcm4gdm9pZCAqTUFMTE9DKHNpemVfdCk7CisjZW5kaWYKKyNlbHNlCisjZGVmaW5lIE1BTExPQyBtYWxsb2MKKyNlbmRpZgorCisjaW5jbHVkZSAiY3R5cGUuaCIKKyNpbmNsdWRlICJlcnJuby5oIgorI2luY2x1ZGUgImZsb2F0LmgiCisKKyNpZm5kZWYgX19NQVRIX0hfXworI2luY2x1ZGUgIm1hdGguaCIKKyNlbmRpZgorCisjaWZkZWYgX19jcGx1c3BsdXMKK2V4dGVybiAiQyIgeworI2VuZGlmCisKKyNpZm5kZWYgQ09OU1QKKyNpZmRlZiBLUl9oZWFkZXJzCisjZGVmaW5lIENPTlNUIC8qIGJsYW5rICovCisjZWxzZQorI2RlZmluZSBDT05TVCBjb25zdAorI2VuZGlmCisjZW5kaWYKKworI2lmZGVmIFVuc2lnbmVkX1NoaWZ0cworI2RlZmluZSBTaWduX0V4dGVuZChhLGIpIGlmIChiIDwgMCkgYSB8PSAweGZmZmYwMDAwOworI2Vsc2UKKyNkZWZpbmUgU2lnbl9FeHRlbmQoYSxiKSAvKm5vLW9wKi8KKyNlbmRpZgorCisjaWYgZGVmaW5lZChJRUVFX0xJVFRMRV9FTkRJQU4pICsgZGVmaW5lZChJRUVFX0JJR19FTkRJQU4pICsgZGVmaW5lZChWQVgpICsgXAorICAgIGRlZmluZWQoSUJNKSAhPSAxCitFeGFjdGx5IG9uZSBvZiBJRUVFX0xJVFRMRV9FTkRJQU4gSUVFRV9CSUdfRU5ESUFOLCBWQVgsIG9yCitJQk0gc2hvdWxkIGJlIGRlZmluZWQuCisjZW5kaWYKKwordHlwZWRlZiB1bmlvbiB7CisJZG91YmxlIGQ7CisJVUxvbmcgdWxbMl07Cit9IF9kb3VibGU7CisjZGVmaW5lIHZhbHVlKHgpICgoeCkuZCkKKyNpZmRlZiBJRUVFX0xJVFRMRV9FTkRJQU4KKyNkZWZpbmUgd29yZDAoeCkgKCh4KS51bFsxXSkKKyNkZWZpbmUgd29yZDEoeCkgKCh4KS51bFswXSkKKyNlbHNlCisjZGVmaW5lIHdvcmQwKHgpICgoeCkudWxbMF0pCisjZGVmaW5lIHdvcmQxKHgpICgoeCkudWxbMV0pCisjZW5kaWYKKworLyogVGhlIGZvbGxvd2luZyBkZWZpbml0aW9uIG9mIFN0b3JlaW5jIGlzIGFwcHJvcHJpYXRlIGZvciBNSVBTIHByb2Nlc3NvcnMuCisgKiBBbiBhbHRlcm5hdGl2ZSB0aGF0IG1pZ2h0IGJlIGJldHRlciBvbiBzb21lIG1hY2hpbmVzIGlzCisgKiAjZGVmaW5lIFN0b3JlaW5jKGEsYixjKSAoKmErKyA9IGIgPDwgMTYgfCBjICYgMHhmZmZmKQorICovCisjaWYgZGVmaW5lZChJRUVFX0xJVFRMRV9FTkRJQU4pICsgZGVmaW5lZChWQVgpICsgZGVmaW5lZChfX2FybV9fKQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgXAorICAgICgoKHVfc2hvcnQgKikodm9pZCAqKWEpWzFdID0gXAorCSh1X3Nob3J0KWIsICgodV9zaG9ydCAqKSh2b2lkICopYSlbMF0gPSAodV9zaG9ydCljLCBhKyspCisjZWxzZQorI2RlZmluZSBTdG9yZWluYyhhLGIsYykgXAorICAgICgoKHVfc2hvcnQgKikodm9pZCAqKWEpWzBdID0gXAorCSh1X3Nob3J0KWIsICgodV9zaG9ydCAqKSh2b2lkICopYSlbMV0gPSAodV9zaG9ydCljLCBhKyspCisjZW5kaWYKKworLyogI2RlZmluZSBQIERCTF9NQU5UX0RJRyAqLworLyogVGVuX3BtYXggPSBmbG9vcihQKmxvZygyKS9sb2coNSkpICovCisvKiBCbGV0Y2ggPSAoaGlnaGVzdCBwb3dlciBvZiAyIDwgREJMX01BWF8xMF9FWFApIC8gMTYgKi8KKy8qIFF1aWNrX21heCA9IGZsb29yKChQLTEpKmxvZyhGTFRfUkFESVgpL2xvZygxMCkgLSAxKSAqLworLyogSW50X21heCA9IGZsb29yKFAqbG9nKEZMVF9SQURJWCkvbG9nKDEwKSAtIDEpICovCisKKyNpZiBkZWZpbmVkKElFRUVfTElUVExFX0VORElBTikgKyBkZWZpbmVkKElFRUVfQklHX0VORElBTikKKyNkZWZpbmUgRXhwX3NoaWZ0ICAyMAorI2RlZmluZSBFeHBfc2hpZnQxIDIwCisjZGVmaW5lIEV4cF9tc2sxICAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tc2sxMSAgIDB4MTAwMDAwCisjZGVmaW5lIEV4cF9tYXNrICAweDdmZjAwMDAwCisjZGVmaW5lIFAgNTMKKyNkZWZpbmUgQmlhcyAxMDIzCisjZGVmaW5lIElFRUVfQXJpdGgKKyNkZWZpbmUgRW1pbiAoLTEwMjIpCisjZGVmaW5lIEV4cF8xICAweDNmZjAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDNmZjAwMDAwCisjZGVmaW5lIEViaXRzIDExCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZgorI2RlZmluZSBGcmFjX21hc2sxIDB4ZmZmZmYKKyNkZWZpbmUgVGVuX3BtYXggMjIKKyNkZWZpbmUgQmxldGNoIDB4MTAKKyNkZWZpbmUgQm5kcnlfbWFzayAgMHhmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmZmCisjZGVmaW5lIExTQiAxCisjZGVmaW5lIFNpZ25fYml0IDB4ODAwMDAwMDAKKyNkZWZpbmUgTG9nMlAgMQorI2RlZmluZSBUaW55MCAwCisjZGVmaW5lIFRpbnkxIDEKKyNkZWZpbmUgUXVpY2tfbWF4IDE0CisjZGVmaW5lIEludF9tYXggMTQKKyNkZWZpbmUgSW5maW5pdGUoeCkgKHdvcmQwKHgpID09IDB4N2ZmMDAwMDApIC8qIHN1ZmZpY2llbnQgdGVzdCBmb3IgaGVyZSAqLworI2Vsc2UKKyN1bmRlZiAgU3VkZGVuX1VuZGVyZmxvdworI2RlZmluZSBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisjZGVmaW5lIEV4cF9zaGlmdCAgMjQKKyNkZWZpbmUgRXhwX3NoaWZ0MSAyNAorI2RlZmluZSBFeHBfbXNrMSAgIDB4MTAwMDAwMAorI2RlZmluZSBFeHBfbXNrMTEgIDB4MTAwMDAwMAorI2RlZmluZSBFeHBfbWFzayAgMHg3ZjAwMDAwMAorI2RlZmluZSBQIDE0CisjZGVmaW5lIEJpYXMgNjUKKyNkZWZpbmUgRXhwXzEgIDB4NDEwMDAwMDAKKyNkZWZpbmUgRXhwXzExIDB4NDEwMDAwMDAKKyNkZWZpbmUgRWJpdHMgOAkvKiBleHBvbmVudCBoYXMgNyBiaXRzLCBidXQgOCBpcyB0aGUgcmlnaHQgdmFsdWUgaW4gYjJkICovCisjZGVmaW5lIEZyYWNfbWFzayAgMHhmZmZmZmYKKyNkZWZpbmUgRnJhY19tYXNrMSAweGZmZmZmZgorI2RlZmluZSBCbGV0Y2ggNAorI2RlZmluZSBUZW5fcG1heCAyMgorI2RlZmluZSBCbmRyeV9tYXNrICAweGVmZmZmZgorI2RlZmluZSBCbmRyeV9tYXNrMSAweGZmZmZmZgorI2RlZmluZSBMU0IgMQorI2RlZmluZSBTaWduX2JpdCAweDgwMDAwMDAwCisjZGVmaW5lIExvZzJQIDQKKyNkZWZpbmUgVGlueTAgMHgxMDAwMDAKKyNkZWZpbmUgVGlueTEgMAorI2RlZmluZSBRdWlja19tYXggMTQKKyNkZWZpbmUgSW50X21heCAxNQorI2Vsc2UgLyogVkFYICovCisjZGVmaW5lIEV4cF9zaGlmdCAgMjMKKyNkZWZpbmUgRXhwX3NoaWZ0MSA3CisjZGVmaW5lIEV4cF9tc2sxICAgIDB4ODAKKyNkZWZpbmUgRXhwX21zazExICAgMHg4MDAwMDAKKyNkZWZpbmUgRXhwX21hc2sgIDB4N2Y4MAorI2RlZmluZSBQIDU2CisjZGVmaW5lIEJpYXMgMTI5CisjZGVmaW5lIEV4cF8xICAweDQwODAwMDAwCisjZGVmaW5lIEV4cF8xMSAweDQwODAKKyNkZWZpbmUgRWJpdHMgOAorI2RlZmluZSBGcmFjX21hc2sgIDB4N2ZmZmZmCisjZGVmaW5lIEZyYWNfbWFzazEgMHhmZmZmMDA3ZgorI2RlZmluZSBUZW5fcG1heCAyNAorI2RlZmluZSBCbGV0Y2ggMgorI2RlZmluZSBCbmRyeV9tYXNrICAweGZmZmYwMDdmCisjZGVmaW5lIEJuZHJ5X21hc2sxIDB4ZmZmZjAwN2YKKyNkZWZpbmUgTFNCIDB4MTAwMDAKKyNkZWZpbmUgU2lnbl9iaXQgMHg4MDAwCisjZGVmaW5lIExvZzJQIDEKKyNkZWZpbmUgVGlueTAgMHg4MAorI2RlZmluZSBUaW55MSAwCisjZGVmaW5lIFF1aWNrX21heCAxNQorI2RlZmluZSBJbnRfbWF4IDE1CisjZW5kaWYKKyNlbmRpZgorCisjaWZuZGVmIElFRUVfQXJpdGgKKyNkZWZpbmUgUk9VTkRfQklBU0VECisjZW5kaWYKKworI2lmZGVmIFJORF9QUk9EUVVPVAorI2RlZmluZSByb3VuZGVkX3Byb2R1Y3QoYSxiKSBhID0gcm5kX3Byb2QoYSwgYikKKyNkZWZpbmUgcm91bmRlZF9xdW90aWVudChhLGIpIGEgPSBybmRfcXVvdChhLCBiKQorI2lmZGVmIEtSX2hlYWRlcnMKK2V4dGVybiBkb3VibGUgcm5kX3Byb2QoKSwgcm5kX3F1b3QoKTsKKyNlbHNlCitleHRlcm4gZG91YmxlIHJuZF9wcm9kKGRvdWJsZSwgZG91YmxlKSwgcm5kX3F1b3QoZG91YmxlLCBkb3VibGUpOworI2VuZGlmCisjZWxzZQorI2RlZmluZSByb3VuZGVkX3Byb2R1Y3QoYSxiKSBhICo9IGIKKyNkZWZpbmUgcm91bmRlZF9xdW90aWVudChhLGIpIGEgLz0gYgorI2VuZGlmCisKKyNkZWZpbmUgQmlnMCAoRnJhY19tYXNrMSB8IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEpKQorI2RlZmluZSBCaWcxIDB4ZmZmZmZmZmYKKworI2lmbmRlZiBKdXN0XzE2CisvKiBXaGVuIFBhY2tfMzIgaXMgbm90IGRlZmluZWQsIHdlIHN0b3JlIDE2IGJpdHMgcGVyIDMyLWJpdCBMb25nLgorICogVGhpcyBtYWtlcyBzb21lIGlubmVyIGxvb3BzIHNpbXBsZXIgYW5kIHNvbWV0aW1lcyBzYXZlcyB3b3JrCisgKiBkdXJpbmcgbXVsdGlwbGljYXRpb25zLCBidXQgaXQgb2Z0ZW4gc2VlbXMgdG8gbWFrZSB0aGluZ3Mgc2xpZ2h0bHkKKyAqIHNsb3dlci4gIEhlbmNlIHRoZSBkZWZhdWx0IGlzIG5vdyB0byBzdG9yZSAzMiBiaXRzIHBlciBMb25nLgorICovCisjaWZuZGVmIFBhY2tfMzIKKyNkZWZpbmUgUGFja18zMgorI2VuZGlmCisjZW5kaWYKKworI2RlZmluZSBLbWF4IDE1CisKKyNpZmRlZiBfX2NwbHVzcGx1cworZXh0ZXJuICJDIiBkb3VibGUgc3RydG9kKGNvbnN0IGNoYXIgKnMwMCwgY2hhciAqKnNlKTsKK2V4dGVybiAiQyIgY2hhciAqX19kdG9hKGRvdWJsZSBkLCBpbnQgbW9kZSwgaW50IG5kaWdpdHMsCisJCQlpbnQgKmRlY3B0LCBpbnQgKnNpZ24sIGNoYXIgKipydmUpOworI2VuZGlmCisKKyBzdHJ1Y3QKK0JpZ2ludCB7CisJc3RydWN0IEJpZ2ludCAqbmV4dDsKKwlpbnQgaywgbWF4d2RzLCBzaWduLCB3ZHM7CisJVUxvbmcgeFsxXTsKKwl9OworCisgdHlwZWRlZiBzdHJ1Y3QgQmlnaW50IEJpZ2ludDsKKworIHN0YXRpYyBCaWdpbnQgKmZyZWVsaXN0W0ttYXgrMV07CisKKyNpZmRlZiBBTkRST0lEX0NIQU5HRVMKKyBzdGF0aWMgcHRocmVhZF9tdXRleF90IGZyZWVsaXN0X211dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjsKKyNlbHNlCisjaWZkZWYgX1JFRU5UUkFOVAorIHN0YXRpYyBtdXRleF90IGZyZWVsaXN0X211dGV4ID0gTVVURVhfSU5JVElBTElaRVI7CisjZW5kaWYKKyNlbmRpZgorCisgc3RhdGljIEJpZ2ludCAqCitCYWxsb2MKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGspIGludCBrOworI2Vsc2UKKwkoaW50IGspCisjZW5kaWYKK3sKKwlpbnQgeDsKKwlCaWdpbnQgKnJ2OworCisJbXV0ZXhfbG9jaygmZnJlZWxpc3RfbXV0ZXgpOworCisJaWYgKChydiA9IGZyZWVsaXN0W2tdKSAhPSBOVUxMKSB7CisJCWZyZWVsaXN0W2tdID0gcnYtPm5leHQ7CisJCX0KKwllbHNlIHsKKwkJeCA9IDEgPDwgazsKKwkJcnYgPSAoQmlnaW50ICopTUFMTE9DKHNpemVvZihCaWdpbnQpICsgKHgtMSkqc2l6ZW9mKExvbmcpKTsKKwkJcnYtPmsgPSBrOworCQlydi0+bWF4d2RzID0geDsKKwkJfQorCXJ2LT5zaWduID0gcnYtPndkcyA9IDA7CisKKwltdXRleF91bmxvY2soJmZyZWVsaXN0X211dGV4KTsKKworCXJldHVybiBydjsKKwl9CisKKyBzdGF0aWMgdm9pZAorQmZyZWUKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHYpIEJpZ2ludCAqdjsKKyNlbHNlCisJKEJpZ2ludCAqdikKKyNlbmRpZgoreworCWlmICh2KSB7CisJCW11dGV4X2xvY2soJmZyZWVsaXN0X211dGV4KTsKKworCQl2LT5uZXh0ID0gZnJlZWxpc3Rbdi0+a107CisJCWZyZWVsaXN0W3YtPmtdID0gdjsKKworCQltdXRleF91bmxvY2soJmZyZWVsaXN0X211dGV4KTsKKwkJfQorCX0KKworI2RlZmluZSBCY29weSh4LHkpIG1lbWNweSgmeC0+c2lnbiwgJnktPnNpZ24sIFwKKyAgICB5LT53ZHMqc2l6ZW9mKExvbmcpICsgMipzaXplb2YoaW50KSkKKworIHN0YXRpYyBCaWdpbnQgKgorbXVsdGFkZAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgbSwgYSkgQmlnaW50ICpiOyBpbnQgbSwgYTsKKyNlbHNlCisJKEJpZ2ludCAqYiwgaW50IG0sIGludCBhKQkvKiBtdWx0aXBseSBieSBtIGFuZCBhZGQgYSAqLworI2VuZGlmCit7CisJaW50IGksIHdkczsKKwlVTG9uZyAqeCwgeTsKKyNpZmRlZiBQYWNrXzMyCisJVUxvbmcgeGksIHo7CisjZW5kaWYKKwlCaWdpbnQgKmIxOworCisJd2RzID0gYi0+d2RzOworCXggPSBiLT54OworCWkgPSAwOworCWRvIHsKKyNpZmRlZiBQYWNrXzMyCisJCXhpID0gKng7CisJCXkgPSAoeGkgJiAweGZmZmYpICogbSArIGE7CisJCXogPSAoeGkgPj4gMTYpICogbSArICh5ID4+IDE2KTsKKwkJYSA9IChpbnQpKHogPj4gMTYpOworCQkqeCsrID0gKHogPDwgMTYpICsgKHkgJiAweGZmZmYpOworI2Vsc2UKKwkJeSA9ICp4ICogbSArIGE7CisJCWEgPSAoaW50KSh5ID4+IDE2KTsKKwkJKngrKyA9IHkgJiAweGZmZmY7CisjZW5kaWYKKwkJfQorCQl3aGlsZSgrK2kgPCB3ZHMpOworCWlmIChhKSB7CisJCWlmICh3ZHMgPj0gYi0+bWF4d2RzKSB7CisJCQliMSA9IEJhbGxvYyhiLT5rKzEpOworCQkJQmNvcHkoYjEsIGIpOworCQkJQmZyZWUoYik7CisJCQliID0gYjE7CisJCQl9CisJCWItPnhbd2RzKytdID0gYTsKKwkJYi0+d2RzID0gd2RzOworCQl9CisJcmV0dXJuIGI7CisJfQorCisgc3RhdGljIEJpZ2ludCAqCitzMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHMsIG5kMCwgbmQsIHk5KSBDT05TVCBjaGFyICpzOyBpbnQgbmQwLCBuZDsgVUxvbmcgeTk7CisjZWxzZQorCShDT05TVCBjaGFyICpzLCBpbnQgbmQwLCBpbnQgbmQsIFVMb25nIHk5KQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCWludCBpLCBrOworCUxvbmcgeCwgeTsKKworCXggPSAobmQgKyA4KSAvIDk7CisJZm9yKGsgPSAwLCB5ID0gMTsgeCA+IHk7IHkgPDw9IDEsIGsrKykgOworI2lmZGVmIFBhY2tfMzIKKwliID0gQmFsbG9jKGspOworCWItPnhbMF0gPSB5OTsKKwliLT53ZHMgPSAxOworI2Vsc2UKKwliID0gQmFsbG9jKGsrMSk7CisJYi0+eFswXSA9IHk5ICYgMHhmZmZmOworCWItPndkcyA9IChiLT54WzFdID0geTkgPj4gMTYpID8gMiA6IDE7CisjZW5kaWYKKworCWkgPSA5OworCWlmICg5IDwgbmQwKSB7CisJCXMgKz0gOTsKKwkJZG8gYiA9IG11bHRhZGQoYiwgMTAsICpzKysgLSAnMCcpOworCQkJd2hpbGUoKytpIDwgbmQwKTsKKwkJcysrOworCQl9CisJZWxzZQorCQlzICs9IDEwOworCWZvcig7IGkgPCBuZDsgaSsrKQorCQliID0gbXVsdGFkZChiLCAxMCwgKnMrKyAtICcwJyk7CisJcmV0dXJuIGI7CisJfQorCisgc3RhdGljIGludAoraGkwYml0cworI2lmZGVmIEtSX2hlYWRlcnMKKwkoeCkgVUxvbmcgeDsKKyNlbHNlCisJKFVMb25nIHgpCisjZW5kaWYKK3sKKwlpbnQgayA9IDA7CisKKwlpZiAoISh4ICYgMHhmZmZmMDAwMCkpIHsKKwkJayA9IDE2OworCQl4IDw8PSAxNjsKKwkJfQorCWlmICghKHggJiAweGZmMDAwMDAwKSkgeworCQlrICs9IDg7CisJCXggPDw9IDg7CisJCX0KKwlpZiAoISh4ICYgMHhmMDAwMDAwMCkpIHsKKwkJayArPSA0OworCQl4IDw8PSA0OworCQl9CisJaWYgKCEoeCAmIDB4YzAwMDAwMDApKSB7CisJCWsgKz0gMjsKKwkJeCA8PD0gMjsKKwkJfQorCWlmICghKHggJiAweDgwMDAwMDAwKSkgeworCQlrKys7CisJCWlmICghKHggJiAweDQwMDAwMDAwKSkKKwkJCXJldHVybiAzMjsKKwkJfQorCXJldHVybiBrOworCX0KKworIHN0YXRpYyBpbnQKK2xvMGJpdHMKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHkpIFVMb25nICp5OworI2Vsc2UKKwkoVUxvbmcgKnkpCisjZW5kaWYKK3sKKwlpbnQgazsKKwlVTG9uZyB4ID0gKnk7CisKKwlpZiAoeCAmIDcpIHsKKwkJaWYgKHggJiAxKQorCQkJcmV0dXJuIDA7CisJCWlmICh4ICYgMikgeworCQkJKnkgPSB4ID4+IDE7CisJCQlyZXR1cm4gMTsKKwkJCX0KKwkJKnkgPSB4ID4+IDI7CisJCXJldHVybiAyOworCQl9CisJayA9IDA7CisJaWYgKCEoeCAmIDB4ZmZmZikpIHsKKwkJayA9IDE2OworCQl4ID4+PSAxNjsKKwkJfQorCWlmICghKHggJiAweGZmKSkgeworCQlrICs9IDg7CisJCXggPj49IDg7CisJCX0KKwlpZiAoISh4ICYgMHhmKSkgeworCQlrICs9IDQ7CisJCXggPj49IDQ7CisJCX0KKwlpZiAoISh4ICYgMHgzKSkgeworCQlrICs9IDI7CisJCXggPj49IDI7CisJCX0KKwlpZiAoISh4ICYgMSkpIHsKKwkJaysrOworCQl4ID4+PSAxOworCQlpZiAoIXggJiAxKQorCQkJcmV0dXJuIDMyOworCQl9CisJKnkgPSB4OworCXJldHVybiBrOworCX0KKworIHN0YXRpYyBCaWdpbnQgKgoraTJiCisjaWZkZWYgS1JfaGVhZGVycworCShpKSBpbnQgaTsKKyNlbHNlCisJKGludCBpKQorI2VuZGlmCit7CisJQmlnaW50ICpiOworCisJYiA9IEJhbGxvYygxKTsKKwliLT54WzBdID0gaTsKKwliLT53ZHMgPSAxOworCXJldHVybiBiOworCX0KKworIHN0YXRpYyBCaWdpbnQgKgorbXVsdAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJQmlnaW50ICpjOworCWludCBrLCB3YSwgd2IsIHdjOworCVVMb25nIGNhcnJ5LCB5LCB6OworCVVMb25nICp4LCAqeGEsICp4YWUsICp4YiwgKnhiZSwgKnhjLCAqeGMwOworI2lmZGVmIFBhY2tfMzIKKwlVTG9uZyB6MjsKKyNlbmRpZgorCisJaWYgKGEtPndkcyA8IGItPndkcykgeworCQljID0gYTsKKwkJYSA9IGI7CisJCWIgPSBjOworCQl9CisJayA9IGEtPms7CisJd2EgPSBhLT53ZHM7CisJd2IgPSBiLT53ZHM7CisJd2MgPSB3YSArIHdiOworCWlmICh3YyA+IGEtPm1heHdkcykKKwkJaysrOworCWMgPSBCYWxsb2Moayk7CisJZm9yKHggPSBjLT54LCB4YSA9IHggKyB3YzsgeCA8IHhhOyB4KyspCisJCSp4ID0gMDsKKwl4YSA9IGEtPng7CisJeGFlID0geGEgKyB3YTsKKwl4YiA9IGItPng7CisJeGJlID0geGIgKyB3YjsKKwl4YzAgPSBjLT54OworI2lmZGVmIFBhY2tfMzIKKwlmb3IoOyB4YiA8IHhiZTsgeGIrKywgeGMwKyspIHsKKwkJaWYgKCh5ID0gKnhiICYgMHhmZmZmKSAhPSAwKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCWRvIHsKKwkJCQl6ID0gKCp4ICYgMHhmZmZmKSAqIHkgKyAoKnhjICYgMHhmZmZmKSArIGNhcnJ5OworCQkJCWNhcnJ5ID0geiA+PiAxNjsKKwkJCQl6MiA9ICgqeCsrID4+IDE2KSAqIHkgKyAoKnhjID4+IDE2KSArIGNhcnJ5OworCQkJCWNhcnJ5ID0gejIgPj4gMTY7CisJCQkJU3RvcmVpbmMoeGMsIHoyLCB6KTsKKwkJCQl9CisJCQkJd2hpbGUoeCA8IHhhZSk7CisJCQkqeGMgPSBjYXJyeTsKKwkJCX0KKwkJaWYgKCh5ID0gKnhiID4+IDE2KSAhPSAwKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCXoyID0gKnhjOworCQkJZG8geworCQkJCXogPSAoKnggJiAweGZmZmYpICogeSArICgqeGMgPj4gMTYpICsgY2Fycnk7CisJCQkJY2FycnkgPSB6ID4+IDE2OworCQkJCVN0b3JlaW5jKHhjLCB6LCB6Mik7CisJCQkJejIgPSAoKngrKyA+PiAxNikgKiB5ICsgKCp4YyAmIDB4ZmZmZikgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHoyID4+IDE2OworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsKKwkJCSp4YyA9IHoyOworCQkJfQorCQl9CisjZWxzZQorCWZvcig7IHhiIDwgeGJlOyB4YzArKykgeworCQlpZiAoeSA9ICp4YisrKSB7CisJCQl4ID0geGE7CisJCQl4YyA9IHhjMDsKKwkJCWNhcnJ5ID0gMDsKKwkJCWRvIHsKKwkJCQl6ID0gKngrKyAqIHkgKyAqeGMgKyBjYXJyeTsKKwkJCQljYXJyeSA9IHogPj4gMTY7CisJCQkJKnhjKysgPSB6ICYgMHhmZmZmOworCQkJCX0KKwkJCQl3aGlsZSh4IDwgeGFlKTsKKwkJCSp4YyA9IGNhcnJ5OworCQkJfQorCQl9CisjZW5kaWYKKwlmb3IoeGMwID0gYy0+eCwgeGMgPSB4YzAgKyB3Yzsgd2MgPiAwICYmICEqLS14YzsgLS13YykgOworCWMtPndkcyA9IHdjOworCXJldHVybiBjOworCX0KKworIHN0YXRpYyBCaWdpbnQgKnA1czsKKworIHN0YXRpYyBCaWdpbnQgKgorcG93NW11bHQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGIsIGspIEJpZ2ludCAqYjsgaW50IGs7CisjZWxzZQorCShCaWdpbnQgKmIsIGludCBrKQorI2VuZGlmCit7CisJQmlnaW50ICpiMSwgKnA1LCAqcDUxOworCWludCBpOworCXN0YXRpYyBjb25zdCBpbnQgcDA1WzNdID0geyA1LCAyNSwgMTI1IH07CisKKwlpZiAoKGkgPSBrICYgMykgIT0gMCkKKwkJYiA9IG11bHRhZGQoYiwgcDA1W2ktMV0sIDApOworCisJaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMikpCisJCXJldHVybiBiOworCWlmICghKHA1ID0gcDVzKSkgeworCQkvKiBmaXJzdCB0aW1lICovCisJCXA1ID0gcDVzID0gaTJiKDYyNSk7CisJCXA1LT5uZXh0ID0gMDsKKwkJfQorCWZvcig7OykgeworCQlpZiAoayAmIDEpIHsKKwkJCWIxID0gbXVsdChiLCBwNSk7CisJCQlCZnJlZShiKTsKKwkJCWIgPSBiMTsKKwkJCX0KKwkJaWYgKCEoayA9ICh1bnNpZ25lZCBpbnQpIGsgPj4gMSkpCisJCQlicmVhazsKKwkJaWYgKCEocDUxID0gcDUtPm5leHQpKSB7CisJCQlwNTEgPSBwNS0+bmV4dCA9IG11bHQocDUscDUpOworCQkJcDUxLT5uZXh0ID0gMDsKKwkJCX0KKwkJcDUgPSBwNTE7CisJCX0KKwlyZXR1cm4gYjsKKwl9CisKKyBzdGF0aWMgQmlnaW50ICoKK2xzaGlmdAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYiwgaykgQmlnaW50ICpiOyBpbnQgazsKKyNlbHNlCisJKEJpZ2ludCAqYiwgaW50IGspCisjZW5kaWYKK3sKKwlpbnQgaSwgazEsIG4sIG4xOworCUJpZ2ludCAqYjE7CisJVUxvbmcgKngsICp4MSwgKnhlLCB6OworCisjaWZkZWYgUGFja18zMgorCW4gPSAodW5zaWduZWQgaW50KWsgPj4gNTsKKyNlbHNlCisJbiA9ICh1bnNpZ25lZCBpbnQpayA+PiA0OworI2VuZGlmCisJazEgPSBiLT5rOworCW4xID0gbiArIGItPndkcyArIDE7CisJZm9yKGkgPSBiLT5tYXh3ZHM7IG4xID4gaTsgaSA8PD0gMSkKKwkJazErKzsKKwliMSA9IEJhbGxvYyhrMSk7CisJeDEgPSBiMS0+eDsKKwlmb3IoaSA9IDA7IGkgPCBuOyBpKyspCisJCSp4MSsrID0gMDsKKwl4ID0gYi0+eDsKKwl4ZSA9IHggKyBiLT53ZHM7CisjaWZkZWYgUGFja18zMgorCWlmIChrICY9IDB4MWYpIHsKKwkJazEgPSAzMiAtIGs7CisJCXogPSAwOworCQlkbyB7CisJCQkqeDErKyA9ICp4IDw8IGsgfCB6OworCQkJeiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUpOworCQlpZiAoKCp4MSA9IHopICE9IDApCisJCQkrK24xOworCQl9CisjZWxzZQorCWlmIChrICY9IDB4ZikgeworCQlrMSA9IDE2IC0gazsKKwkJeiA9IDA7CisJCWRvIHsKKwkJCSp4MSsrID0gKnggPDwgayAgJiAweGZmZmYgfCB6OworCQkJeiA9ICp4KysgPj4gazE7CisJCQl9CisJCQl3aGlsZSh4IDwgeGUpOworCQlpZiAoKngxID0geikKKwkJCSsrbjE7CisJCX0KKyNlbmRpZgorCWVsc2UgZG8KKwkJKngxKysgPSAqeCsrOworCQl3aGlsZSh4IDwgeGUpOworCWIxLT53ZHMgPSBuMSAtIDE7CisJQmZyZWUoYik7CisJcmV0dXJuIGIxOworCX0KKworIHN0YXRpYyBpbnQKK2NtcAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJVUxvbmcgKnhhLCAqeGEwLCAqeGIsICp4YjA7CisJaW50IGksIGo7CisKKwlpID0gYS0+d2RzOworCWogPSBiLT53ZHM7CisjaWZkZWYgREVCVUcKKwlpZiAoaSA+IDEgJiYgIWEtPnhbaS0xXSkKKwkJQnVnKCJjbXAgY2FsbGVkIHdpdGggYS0+eFthLT53ZHMtMV0gPT0gMCIpOworCWlmIChqID4gMSAmJiAhYi0+eFtqLTFdKQorCQlCdWcoImNtcCBjYWxsZWQgd2l0aCBiLT54W2ItPndkcy0xXSA9PSAwIik7CisjZW5kaWYKKwlpZiAoaSAtPSBqKQorCQlyZXR1cm4gaTsKKwl4YTAgPSBhLT54OworCXhhID0geGEwICsgajsKKwl4YjAgPSBiLT54OworCXhiID0geGIwICsgajsKKwlmb3IoOzspIHsKKwkJaWYgKCotLXhhICE9ICotLXhiKQorCQkJcmV0dXJuICp4YSA8ICp4YiA/IC0xIDogMTsKKwkJaWYgKHhhIDw9IHhhMCkKKwkJCWJyZWFrOworCQl9CisJcmV0dXJuIDA7CisJfQorCisgc3RhdGljIEJpZ2ludCAqCitkaWZmCisjaWZkZWYgS1JfaGVhZGVycworCShhLCBiKSBCaWdpbnQgKmEsICpiOworI2Vsc2UKKwkoQmlnaW50ICphLCBCaWdpbnQgKmIpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmM7CisJaW50IGksIHdhLCB3YjsKKwlMb25nIGJvcnJvdywgeTsJLyogV2UgbmVlZCBzaWduZWQgc2hpZnRzIGhlcmUuICovCisJVUxvbmcgKnhhLCAqeGFlLCAqeGIsICp4YmUsICp4YzsKKyNpZmRlZiBQYWNrXzMyCisJTG9uZyB6OworI2VuZGlmCisKKwlpID0gY21wKGEsYik7CisJaWYgKCFpKSB7CisJCWMgPSBCYWxsb2MoMCk7CisJCWMtPndkcyA9IDE7CisJCWMtPnhbMF0gPSAwOworCQlyZXR1cm4gYzsKKwkJfQorCWlmIChpIDwgMCkgeworCQljID0gYTsKKwkJYSA9IGI7CisJCWIgPSBjOworCQlpID0gMTsKKwkJfQorCWVsc2UKKwkJaSA9IDA7CisJYyA9IEJhbGxvYyhhLT5rKTsKKwljLT5zaWduID0gaTsKKwl3YSA9IGEtPndkczsKKwl4YSA9IGEtPng7CisJeGFlID0geGEgKyB3YTsKKwl3YiA9IGItPndkczsKKwl4YiA9IGItPng7CisJeGJlID0geGIgKyB3YjsKKwl4YyA9IGMtPng7CisJYm9ycm93ID0gMDsKKyNpZmRlZiBQYWNrXzMyCisJZG8geworCQl5ID0gKCp4YSAmIDB4ZmZmZikgLSAoKnhiICYgMHhmZmZmKSArIGJvcnJvdzsKKwkJYm9ycm93ID0gKFVMb25nKXkgPj4gMTY7CisJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCXogPSAoKnhhKysgPj4gMTYpIC0gKCp4YisrID4+IDE2KSArIGJvcnJvdzsKKwkJYm9ycm93ID0gKFVMb25nKXogPj4gMTY7CisJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeik7CisJCVN0b3JlaW5jKHhjLCB6LCB5KTsKKwkJfQorCQl3aGlsZSh4YiA8IHhiZSk7CisJd2hpbGUoeGEgPCB4YWUpIHsKKwkJeSA9ICgqeGEgJiAweGZmZmYpICsgYm9ycm93OworCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKKwkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKKwkJeiA9ICgqeGErKyA+PiAxNikgKyBib3Jyb3c7CisJCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OworCQlTaWduX0V4dGVuZChib3Jyb3csIHopOworCQlTdG9yZWluYyh4YywgeiwgeSk7CisJCX0KKyNlbHNlCisJZG8geworCQl5ID0gKnhhKysgLSAqeGIrKyArIGJvcnJvdzsKKwkJYm9ycm93ID0geSA+PiAxNjsKKwkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKKwkJKnhjKysgPSB5ICYgMHhmZmZmOworCQl9CisJCXdoaWxlKHhiIDwgeGJlKTsKKwl3aGlsZSh4YSA8IHhhZSkgeworCQl5ID0gKnhhKysgKyBib3Jyb3c7CisJCWJvcnJvdyA9IHkgPj4gMTY7CisJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCSp4YysrID0geSAmIDB4ZmZmZjsKKwkJfQorI2VuZGlmCisJd2hpbGUoISotLXhjKQorCQl3YS0tOworCWMtPndkcyA9IHdhOworCXJldHVybiBjOworCX0KKworIHN0YXRpYyBkb3VibGUKK3VscAorI2lmZGVmIEtSX2hlYWRlcnMKKwkoX3gpIGRvdWJsZSBfeDsKKyNlbHNlCisJKGRvdWJsZSBfeCkKKyNlbmRpZgoreworCV9kb3VibGUgeDsKKwlMb25nIEw7CisJX2RvdWJsZSBhOworCisJdmFsdWUoeCkgPSBfeDsKKwlMID0gKHdvcmQwKHgpICYgRXhwX21hc2spIC0gKFAtMSkqRXhwX21zazE7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlpZiAoTCA+IDApIHsKKyNlbmRpZgorI2lmZGVmIElCTQorCQlMIHw9IEV4cF9tc2sxID4+IDQ7CisjZW5kaWYKKwkJd29yZDAoYSkgPSBMOworCQl3b3JkMShhKSA9IDA7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJfQorCWVsc2UgeworCQlMID0gKFVMb25nKS1MID4+IEV4cF9zaGlmdDsKKwkJaWYgKEwgPCBFeHBfc2hpZnQpIHsKKwkJCXdvcmQwKGEpID0gMHg4MDAwMCA+PiBMOworCQkJd29yZDEoYSkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXdvcmQwKGEpID0gMDsKKwkJCUwgLT0gRXhwX3NoaWZ0OworCQkJd29yZDEoYSkgPSBMID49IDMxID8gMSA6IDEgPDwgKDMxIC0gTCk7CisJCQl9CisJCX0KKyNlbmRpZgorCXJldHVybiB2YWx1ZShhKTsKKwl9CisKKyBzdGF0aWMgZG91YmxlCitiMmQKKyNpZmRlZiBLUl9oZWFkZXJzCisJKGEsIGUpIEJpZ2ludCAqYTsgaW50ICplOworI2Vsc2UKKwkoQmlnaW50ICphLCBpbnQgKmUpCisjZW5kaWYKK3sKKwlVTG9uZyAqeGEsICp4YTAsIHcsIHksIHo7CisJaW50IGs7CisJX2RvdWJsZSBkOworI2lmZGVmIFZBWAorCVVMb25nIGQwLCBkMTsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKGQpCisjZGVmaW5lIGQxIHdvcmQxKGQpCisjZW5kaWYKKworCXhhMCA9IGEtPng7CisJeGEgPSB4YTAgKyBhLT53ZHM7CisJeSA9ICotLXhhOworI2lmZGVmIERFQlVHCisJaWYgKCF5KSBCdWcoInplcm8geSBpbiBiMmQiKTsKKyNlbmRpZgorCWsgPSBoaTBiaXRzKHkpOworCSplID0gMzIgLSBrOworI2lmZGVmIFBhY2tfMzIKKwlpZiAoayA8IEViaXRzKSB7CisJCWQwID0gRXhwXzEgfCB5ID4+IChFYml0cyAtIGspOworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCWQxID0geSA8PCAoKDMyLUViaXRzKSArIGspIHwgdyA+PiAoRWJpdHMgLSBrKTsKKwkJZ290byByZXRfZDsKKwkJfQorCXogPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlpZiAoayAtPSBFYml0cykgeworCQlkMCA9IEV4cF8xIHwgeSA8PCBrIHwgeiA+PiAoMzIgLSBrKTsKKwkJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMSA9IHogPDwgayB8IHkgPj4gKDMyIC0gayk7CisJCX0KKwllbHNlIHsKKwkJZDAgPSBFeHBfMSB8IHk7CisJCWQxID0gejsKKwkJfQorI2Vsc2UKKwlpZiAoayA8IEViaXRzICsgMTYpIHsKKwkJeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworCQlkMCA9IEV4cF8xIHwgeSA8PCBrIC0gRWJpdHMgfCB6ID4+IEViaXRzICsgMTYgLSBrOworCQl3ID0geGEgPiB4YTAgPyAqLS14YSA6IDA7CisJCXkgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwkJZDEgPSB6IDw8IGsgKyAxNiAtIEViaXRzIHwgdyA8PCBrIC0gRWJpdHMgfCB5ID4+IDE2ICsgRWJpdHMgLSBrOworCQlnb3RvIHJldF9kOworCQl9CisJeiA9IHhhID4geGEwID8gKi0teGEgOiAwOworCXcgPSB4YSA+IHhhMCA/ICotLXhhIDogMDsKKwlrIC09IEViaXRzICsgMTY7CisJZDAgPSBFeHBfMSB8IHkgPDwgayArIDE2IHwgeiA8PCBrIHwgdyA+PiAxNiAtIGs7CisJeSA9IHhhID4geGEwID8gKi0teGEgOiAwOworCWQxID0gdyA8PCBrICsgMTYgfCB5IDw8IGs7CisjZW5kaWYKKyByZXRfZDoKKyNpZmRlZiBWQVgKKwl3b3JkMChkKSA9IGQwID4+IDE2IHwgZDAgPDwgMTY7CisJd29yZDEoZCkgPSBkMSA+PiAxNiB8IGQxIDw8IDE2OworI2Vsc2UKKyN1bmRlZiBkMAorI3VuZGVmIGQxCisjZW5kaWYKKwlyZXR1cm4gdmFsdWUoZCk7CisJfQorCisgc3RhdGljIEJpZ2ludCAqCitkMmIKKyNpZmRlZiBLUl9oZWFkZXJzCisJKF9kLCBlLCBiaXRzKSBkb3VibGUgZDsgaW50ICplLCAqYml0czsKKyNlbHNlCisJKGRvdWJsZSBfZCwgaW50ICplLCBpbnQgKmJpdHMpCisjZW5kaWYKK3sKKwlCaWdpbnQgKmI7CisJaW50IGRlLCBpLCBrOworCVVMb25nICp4LCB5LCB6OworCV9kb3VibGUgZDsKKyNpZmRlZiBWQVgKKwlVTG9uZyBkMCwgZDE7CisjZW5kaWYKKworCXZhbHVlKGQpID0gX2Q7CisjaWZkZWYgVkFYCisJZDAgPSB3b3JkMChkKSA+PiAxNiB8IHdvcmQwKGQpIDw8IDE2OworCWQxID0gd29yZDEoZCkgPj4gMTYgfCB3b3JkMShkKSA8PCAxNjsKKyNlbHNlCisjZGVmaW5lIGQwIHdvcmQwKGQpCisjZGVmaW5lIGQxIHdvcmQxKGQpCisjZW5kaWYKKworI2lmZGVmIFBhY2tfMzIKKwliID0gQmFsbG9jKDEpOworI2Vsc2UKKwliID0gQmFsbG9jKDIpOworI2VuZGlmCisJeCA9IGItPng7CisKKwl6ID0gZDAgJiBGcmFjX21hc2s7CisJZDAgJj0gMHg3ZmZmZmZmZjsJLyogY2xlYXIgc2lnbiBiaXQsIHdoaWNoIHdlIGlnbm9yZSAqLworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwlkZSA9IChpbnQpKGQwID4+IEV4cF9zaGlmdCk7CisjaWZuZGVmIElCTQorCXogfD0gRXhwX21zazExOworI2VuZGlmCisjZWxzZQorCWlmICgoZGUgPSAoaW50KShkMCA+PiBFeHBfc2hpZnQpKSAhPSAwKQorCQl6IHw9IEV4cF9tc2sxOworI2VuZGlmCisjaWZkZWYgUGFja18zMgorCWlmICgoeSA9IGQxKSAhPSAwKSB7CisJCWlmICgoayA9IGxvMGJpdHMoJnkpKSAhPSAwKSB7CisJCQl4WzBdID0geSB8IHogPDwgKDMyIC0gayk7CisJCQl6ID4+PSBrOworCQkJfQorCQllbHNlCisJCQl4WzBdID0geTsKKwkJaSA9IGItPndkcyA9ICh4WzFdID0geikgPyAyIDogMTsKKwkJfQorCWVsc2UgeworI2lmZGVmIERFQlVHCisJCWlmICgheikKKwkJCUJ1ZygiWmVybyBwYXNzZWQgdG8gZDJiIik7CisjZW5kaWYKKwkJayA9IGxvMGJpdHMoJnopOworCQl4WzBdID0gejsKKwkJaSA9IGItPndkcyA9IDE7CisJCWsgKz0gMzI7CisJCX0KKyNlbHNlCisJaWYgKHkgPSBkMSkgeworCQlpZiAoayA9IGxvMGJpdHMoJnkpKQorCQkJaWYgKGsgPj0gMTYpIHsKKwkJCQl4WzBdID0geSB8IHogPDwgMzIgLSBrICYgMHhmZmZmOworCQkJCXhbMV0gPSB6ID4+IGsgLSAxNiAmIDB4ZmZmZjsKKwkJCQl4WzJdID0geiA+PiBrOworCQkJCWkgPSAyOworCQkJCX0KKwkJCWVsc2UgeworCQkJCXhbMF0gPSB5ICYgMHhmZmZmOworCQkJCXhbMV0gPSB5ID4+IDE2IHwgeiA8PCAxNiAtIGsgJiAweGZmZmY7CisJCQkJeFsyXSA9IHogPj4gayAmIDB4ZmZmZjsKKwkJCQl4WzNdID0geiA+PiBrKzE2OworCQkJCWkgPSAzOworCQkJCX0KKwkJZWxzZSB7CisJCQl4WzBdID0geSAmIDB4ZmZmZjsKKwkJCXhbMV0gPSB5ID4+IDE2OworCQkJeFsyXSA9IHogJiAweGZmZmY7CisJCQl4WzNdID0geiA+PiAxNjsKKwkJCWkgPSAzOworCQkJfQorCQl9CisJZWxzZSB7CisjaWZkZWYgREVCVUcKKwkJaWYgKCF6KQorCQkJQnVnKCJaZXJvIHBhc3NlZCB0byBkMmIiKTsKKyNlbmRpZgorCQlrID0gbG8wYml0cygmeik7CisJCWlmIChrID49IDE2KSB7CisJCQl4WzBdID0gejsKKwkJCWkgPSAwOworCQkJfQorCQllbHNlIHsKKwkJCXhbMF0gPSB6ICYgMHhmZmZmOworCQkJeFsxXSA9IHogPj4gMTY7CisJCQlpID0gMTsKKwkJCX0KKwkJayArPSAzMjsKKwkJfQorCXdoaWxlKCF4W2ldKQorCQktLWk7CisJYi0+d2RzID0gaSArIDE7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWlmIChkZSkgeworI2VuZGlmCisjaWZkZWYgSUJNCisJCSplID0gKGRlIC0gQmlhcyAtIChQLTEpIDw8IDIpICsgazsKKwkJKmJpdHMgPSA0KlAgKyA4IC0gayAtIGhpMGJpdHMod29yZDAoZCkgJiBGcmFjX21hc2spOworI2Vsc2UKKwkJKmUgPSBkZSAtIEJpYXMgLSAoUC0xKSArIGs7CisJCSpiaXRzID0gUCAtIGs7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQl9CisJZWxzZSB7CisJCSplID0gZGUgLSBCaWFzIC0gKFAtMSkgKyAxICsgazsKKyNpZmRlZiBQYWNrXzMyCisJCSpiaXRzID0gMzIqaSAtIGhpMGJpdHMoeFtpLTFdKTsKKyNlbHNlCisJCSpiaXRzID0gKGkrMikqMTYgLSBoaTBiaXRzKHhbaV0pOworI2VuZGlmCisJCX0KKyNlbmRpZgorCXJldHVybiBiOworCX0KKyN1bmRlZiBkMAorI3VuZGVmIGQxCisKKyBzdGF0aWMgZG91YmxlCityYXRpbworI2lmZGVmIEtSX2hlYWRlcnMKKwkoYSwgYikgQmlnaW50ICphLCAqYjsKKyNlbHNlCisJKEJpZ2ludCAqYSwgQmlnaW50ICpiKQorI2VuZGlmCit7CisJX2RvdWJsZSBkYSwgZGI7CisJaW50IGssIGthLCBrYjsKKworCXZhbHVlKGRhKSA9IGIyZChhLCAma2EpOworCXZhbHVlKGRiKSA9IGIyZChiLCAma2IpOworI2lmZGVmIFBhY2tfMzIKKwlrID0ga2EgLSBrYiArIDMyKihhLT53ZHMgLSBiLT53ZHMpOworI2Vsc2UKKwlrID0ga2EgLSBrYiArIDE2KihhLT53ZHMgLSBiLT53ZHMpOworI2VuZGlmCisjaWZkZWYgSUJNCisJaWYgKGsgPiAwKSB7CisJCXdvcmQwKGRhKSArPSAoayA+PiAyKSpFeHBfbXNrMTsKKwkJaWYgKGsgJj0gMykKKwkJCWRhICo9IDEgPDwgazsKKwkJfQorCWVsc2UgeworCQlrID0gLWs7CisJCXdvcmQwKGRiKSArPSAoayA+PiAyKSpFeHBfbXNrMTsKKwkJaWYgKGsgJj0gMykKKwkJCWRiICo9IDEgPDwgazsKKwkJfQorI2Vsc2UKKwlpZiAoayA+IDApCisJCXdvcmQwKGRhKSArPSBrKkV4cF9tc2sxOworCWVsc2UgeworCQlrID0gLWs7CisJCXdvcmQwKGRiKSArPSBrKkV4cF9tc2sxOworCQl9CisjZW5kaWYKKwlyZXR1cm4gdmFsdWUoZGEpIC8gdmFsdWUoZGIpOworCX0KKworc3RhdGljIENPTlNUIGRvdWJsZQordGVuc1tdID0geworCQkxZTAsIDFlMSwgMWUyLCAxZTMsIDFlNCwgMWU1LCAxZTYsIDFlNywgMWU4LCAxZTksCisJCTFlMTAsIDFlMTEsIDFlMTIsIDFlMTMsIDFlMTQsIDFlMTUsIDFlMTYsIDFlMTcsIDFlMTgsIDFlMTksCisJCTFlMjAsIDFlMjEsIDFlMjIKKyNpZmRlZiBWQVgKKwkJLCAxZTIzLCAxZTI0CisjZW5kaWYKKwkJfTsKKworI2lmZGVmIElFRUVfQXJpdGgKK3N0YXRpYyBDT05TVCBkb3VibGUgYmlndGVuc1tdID0geyAxZTE2LCAxZTMyLCAxZTY0LCAxZTEyOCwgMWUyNTYgfTsKK3N0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyLCAxZS02NCwgMWUtMTI4LCAxZS0yNTYgfTsKKyNkZWZpbmUgbl9iaWd0ZW5zIDUKKyNlbHNlCisjaWZkZWYgSUJNCitzdGF0aWMgQ09OU1QgZG91YmxlIGJpZ3RlbnNbXSA9IHsgMWUxNiwgMWUzMiwgMWU2NCB9Oworc3RhdGljIENPTlNUIGRvdWJsZSB0aW55dGVuc1tdID0geyAxZS0xNiwgMWUtMzIsIDFlLTY0IH07CisjZGVmaW5lIG5fYmlndGVucyAzCisjZWxzZQorc3RhdGljIENPTlNUIGRvdWJsZSBiaWd0ZW5zW10gPSB7IDFlMTYsIDFlMzIgfTsKK3N0YXRpYyBDT05TVCBkb3VibGUgdGlueXRlbnNbXSA9IHsgMWUtMTYsIDFlLTMyIH07CisjZGVmaW5lIG5fYmlndGVucyAyCisjZW5kaWYKKyNlbmRpZgorCisgZG91YmxlCitzdHJ0b2QKKyNpZmRlZiBLUl9oZWFkZXJzCisJKHMwMCwgc2UpIENPTlNUIGNoYXIgKnMwMDsgY2hhciAqKnNlOworI2Vsc2UKKwkoQ09OU1QgY2hhciAqczAwLCBjaGFyICoqc2UpCisjZW5kaWYKK3sKKwlpbnQgYmIyLCBiYjUsIGJiZSwgYmQyLCBiZDUsIGJiYml0cywgYnMyLCBjLCBkc2lnbiwKKwkJIGUsIGUxLCBlc2lnbiwgaSwgaiwgaywgbmQsIG5kMCwgbmYsIG56LCBuejAsIHNpZ247CisJQ09OU1QgY2hhciAqcywgKnMwLCAqczE7CisJZG91YmxlIGFhZGosIGFhZGoxLCBhZGo7CisJX2RvdWJsZSBydiwgcnYwOworCUxvbmcgTDsKKwlVTG9uZyB5LCB6OworCUJpZ2ludCAqYmIxLCAqYmQwOworCUJpZ2ludCAqYmIgPSBOVUxMLCAqYmQgPSBOVUxMLCAqYnMgPSBOVUxMLCAqZGVsdGEgPSBOVUxMOy8qIHBhY2lmeSBnY2MgKi8KKworI2lmZGVmIEFORFJPSURfQ0hBTkdFUworCUNPTlNUIGNoYXIgZGVjaW1hbF9wb2ludCA9ICcuJzsKKyNlbHNlIC8qIEFORFJPSURfQ0hBTkdFUyAqLworI2lmbmRlZiBLUl9oZWFkZXJzCisJQ09OU1QgY2hhciBkZWNpbWFsX3BvaW50ID0gbG9jYWxlY29udigpLT5kZWNpbWFsX3BvaW50WzBdOworI2Vsc2UKKwlDT05TVCBjaGFyIGRlY2ltYWxfcG9pbnQgPSAnLic7CisjZW5kaWYKKworI2VuZGlmIC8qIEFORFJPSURfQ0hBTkdFUyAqLworCisJc2lnbiA9IG56MCA9IG56ID0gMDsKKwl2YWx1ZShydikgPSAwLjsKKworCisJZm9yKHMgPSBzMDA7IGlzc3BhY2UoKHVuc2lnbmVkIGNoYXIpICpzKTsgcysrKQorCQk7CisKKwlpZiAoKnMgPT0gJy0nKSB7CisJCXNpZ24gPSAxOworCQlzKys7CisJfSBlbHNlIGlmICgqcyA9PSAnKycpIHsKKwkJcysrOworCX0KKworCWlmICgqcyA9PSAnXDAnKSB7CisJCXMgPSBzMDA7CisJCWdvdG8gcmV0OworCX0KKworCS8qICJJTkYiIG9yICJJTkZJTklUWSIgKi8KKwlpZiAodG9sb3dlcigodW5zaWduZWQgY2hhcikqcykgPT0gJ2knICYmIHN0cm5jYXNlY21wKHMsICJpbmYiLCAzKSA9PSAwKSB7CisJCWlmIChzdHJuY2FzZWNtcChzICsgMywgImluaXR5IiwgNSkgPT0gMCkKKwkJCXMgKz0gODsKKwkJZWxzZQorCQkJcyArPSAzOworCisJCXZhbHVlKHJ2KSA9IEhVR0VfVkFMOworCQlnb3RvIHJldDsKKwl9CisKKyNpZmRlZiBJRUVFX0FyaXRoCisJLyogIk5BTiIgb3IgIk5BTihuLWNoYXItc2VxdWVuY2Utb3B0KSIgKi8KKwlpZiAodG9sb3dlcigodW5zaWduZWQgY2hhcikqcykgPT0gJ24nICYmIHN0cm5jYXNlY21wKHMsICJuYW4iLCAzKSA9PSAwKSB7CisJCS8qIEJ1aWxkIGEgcXVpZXQgTmFOLiAqLworCQl3b3JkMChydikgPSBOQU5fV09SRDA7CisJCXdvcmQxKHJ2KSA9IE5BTl9XT1JEMTsKKwkJcys9IDM7CisKKwkJLyogRG9uJ3QgaW50ZXJwcmV0IChuLWNoYXItc2VxdWVuY2Utb3B0KSwgZm9yIG5vdy4gKi8KKwkJaWYgKCpzID09ICcoJykgeworCQkJczAgPSBzOworCQkJZm9yIChzKys7ICpzICE9ICcpJyAmJiAqcyAhPSAnXDAnOyBzKyspCisJCQkJOworCQkJaWYgKCpzID09ICcpJykKKwkJCQlzKys7CS8qIFNraXAgb3ZlciBjbG9zaW5nIHBhcmVuIC4uLiAqLworCQkJZWxzZQorCQkJCXMgPSBzMDsJLyogLi4uIG90aGVyd2lzZSBnbyBiYWNrLiAqLworCQl9CisKKwkJZ290byByZXQ7CisJfQorI2VuZGlmCisKKwlpZiAoKnMgPT0gJzAnKSB7CisJCW56MCA9IDE7CisJCXdoaWxlKCorK3MgPT0gJzAnKSA7CisJCWlmICghKnMpCisJCQlnb3RvIHJldDsKKwkJfQorCXMwID0gczsKKwl5ID0geiA9IDA7CisJZm9yKG5kID0gbmYgPSAwOyAoYyA9ICpzKSA+PSAnMCcgJiYgYyA8PSAnOSc7IG5kKyssIHMrKykKKwkJaWYgKG5kIDwgOSkKKwkJCXkgPSAxMCp5ICsgYyAtICcwJzsKKwkJZWxzZSBpZiAobmQgPCAxNikKKwkJCXogPSAxMCp6ICsgYyAtICcwJzsKKwluZDAgPSBuZDsKKwlpZiAoYyA9PSBkZWNpbWFsX3BvaW50KSB7CisJCWMgPSAqKytzOworCQlpZiAoIW5kKSB7CisJCQlmb3IoOyBjID09ICcwJzsgYyA9ICorK3MpCisJCQkJbnorKzsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJczAgPSBzOworCQkJCW5mICs9IG56OworCQkJCW56ID0gMDsKKwkJCQlnb3RvIGhhdmVfZGlnOworCQkJCX0KKwkJCWdvdG8gZGlnX2RvbmU7CisJCQl9CisJCWZvcig7IGMgPj0gJzAnICYmIGMgPD0gJzknOyBjID0gKisrcykgeworIGhhdmVfZGlnOgorCQkJbnorKzsKKwkJCWlmIChjIC09ICcwJykgeworCQkJCW5mICs9IG56OworCQkJCWZvcihpID0gMTsgaSA8IG56OyBpKyspCisJCQkJCWlmIChuZCsrIDwgOSkKKwkJCQkJCXkgKj0gMTA7CisJCQkJCWVsc2UgaWYgKG5kIDw9IERCTF9ESUcgKyAxKQorCQkJCQkJeiAqPSAxMDsKKwkJCQlpZiAobmQrKyA8IDkpCisJCQkJCXkgPSAxMCp5ICsgYzsKKwkJCQllbHNlIGlmIChuZCA8PSBEQkxfRElHICsgMSkKKwkJCQkJeiA9IDEwKnogKyBjOworCQkJCW56ID0gMDsKKwkJCQl9CisJCQl9CisJCX0KKyBkaWdfZG9uZToKKwllID0gMDsKKwlpZiAoYyA9PSAnZScgfHwgYyA9PSAnRScpIHsKKwkJaWYgKCFuZCAmJiAhbnogJiYgIW56MCkgeworCQkJcyA9IHMwMDsKKwkJCWdvdG8gcmV0OworCQkJfQorCQlzMDAgPSBzOworCQllc2lnbiA9IDA7CisJCXN3aXRjaChjID0gKisrcykgeworCQkJY2FzZSAnLSc6CisJCQkJZXNpZ24gPSAxOworCQkJCS8qIEZBTExUSFJPVUdIICovCisJCQljYXNlICcrJzoKKwkJCQljID0gKisrczsKKwkJCX0KKwkJaWYgKGMgPj0gJzAnICYmIGMgPD0gJzknKSB7CisJCQl3aGlsZShjID09ICcwJykKKwkJCQljID0gKisrczsKKwkJCWlmIChjID4gJzAnICYmIGMgPD0gJzknKSB7CisJCQkJTCA9IGMgLSAnMCc7CisJCQkJczEgPSBzOworCQkJCXdoaWxlKChjID0gKisrcykgPj0gJzAnICYmIGMgPD0gJzknKQorCQkJCQlMID0gMTAqTCArIGMgLSAnMCc7CisJCQkJaWYgKHMgLSBzMSA+IDggfHwgTCA+IDE5OTk5KQorCQkJCQkvKiBBdm9pZCBjb25mdXNpb24gZnJvbSBleHBvbmVudHMKKwkJCQkJICogc28gbGFyZ2UgdGhhdCBlIG1pZ2h0IG92ZXJmbG93LgorCQkJCQkgKi8KKwkJCQkJZSA9IDE5OTk5OyAvKiBzYWZlIGZvciAxNiBiaXQgaW50cyAqLworCQkJCWVsc2UKKwkJCQkJZSA9IChpbnQpTDsKKwkJCQlpZiAoZXNpZ24pCisJCQkJCWUgPSAtZTsKKwkJCQl9CisJCQllbHNlCisJCQkJZSA9IDA7CisJCQl9CisJCWVsc2UKKwkJCXMgPSBzMDA7CisJCX0KKwlpZiAoIW5kKSB7CisJCWlmICghbnogJiYgIW56MCkKKwkJCXMgPSBzMDA7CisJCWdvdG8gcmV0OworCQl9CisJZTEgPSBlIC09IG5mOworCisJLyogTm93IHdlIGhhdmUgbmQwIGRpZ2l0cywgc3RhcnRpbmcgYXQgczAsIGZvbGxvd2VkIGJ5IGEKKwkgKiBkZWNpbWFsIHBvaW50LCBmb2xsb3dlZCBieSBuZC1uZDAgZGlnaXRzLiAgVGhlIG51bWJlciB3ZSdyZQorCSAqIGFmdGVyIGlzIHRoZSBpbnRlZ2VyIHJlcHJlc2VudGVkIGJ5IHRob3NlIGRpZ2l0cyB0aW1lcworCSAqIDEwKiplICovCisKKwlpZiAoIW5kMCkKKwkJbmQwID0gbmQ7CisJayA9IG5kIDwgREJMX0RJRyArIDEgPyBuZCA6IERCTF9ESUcgKyAxOworCXZhbHVlKHJ2KSA9IHk7CisJaWYgKGsgPiA5KQorCQl2YWx1ZShydikgPSB0ZW5zW2sgLSA5XSAqIHZhbHVlKHJ2KSArIHo7CisJYmQwID0gMDsKKwlpZiAobmQgPD0gREJMX0RJRworI2lmbmRlZiBSTkRfUFJPRFFVT1QKKwkJJiYgRkxUX1JPVU5EUyA9PSAxCisjZW5kaWYKKwkJCSkgeworCQlpZiAoIWUpCisJCQlnb3RvIHJldDsKKwkJaWYgKGUgPiAwKSB7CisJCQlpZiAoZSA8PSBUZW5fcG1heCkgeworI2lmZGVmIFZBWAorCQkJCWdvdG8gdmF4X292ZmxfY2hlY2s7CisjZWxzZQorCQkJCS8qIHZhbHVlKHJ2KSA9ICovIHJvdW5kZWRfcHJvZHVjdCh2YWx1ZShydiksCisJCQkJICAgIHRlbnNbZV0pOworCQkJCWdvdG8gcmV0OworI2VuZGlmCisJCQkJfQorCQkJaSA9IERCTF9ESUcgLSBuZDsKKwkJCWlmIChlIDw9IFRlbl9wbWF4ICsgaSkgeworCQkJCS8qIEEgZmFuY2llciB0ZXN0IHdvdWxkIHNvbWV0aW1lcyBsZXQgdXMgZG8KKwkJCQkgKiB0aGlzIGZvciBsYXJnZXIgaSB2YWx1ZXMuCisJCQkJICovCisJCQkJZSAtPSBpOworCQkJCXZhbHVlKHJ2KSAqPSB0ZW5zW2ldOworI2lmZGVmIFZBWAorCQkJCS8qIFZBWCBleHBvbmVudCByYW5nZSBpcyBzbyBuYXJyb3cgd2UgbXVzdAorCQkJCSAqIHdvcnJ5IGFib3V0IG92ZXJmbG93IGhlcmUuLi4KKwkJCQkgKi8KKyB2YXhfb3ZmbF9jaGVjazoKKwkJCQl3b3JkMChydikgLT0gUCpFeHBfbXNrMTsKKwkJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3Byb2R1Y3QodmFsdWUocnYpLAorCQkJCSAgICB0ZW5zW2VdKTsKKwkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKQorCQkJCSA+IEV4cF9tc2sxKihEQkxfTUFYX0VYUCtCaWFzLTEtUCkpCisJCQkJCWdvdG8gb3ZmbDsKKwkJCQl3b3JkMChydikgKz0gUCpFeHBfbXNrMTsKKyNlbHNlCisJCQkJLyogdmFsdWUocnYpID0gKi8gcm91bmRlZF9wcm9kdWN0KHZhbHVlKHJ2KSwKKwkJCQkgICAgdGVuc1tlXSk7CisjZW5kaWYKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisJCQl9CisjaWZuZGVmIEluYWNjdXJhdGVfRGl2aWRlCisJCWVsc2UgaWYgKGUgPj0gLVRlbl9wbWF4KSB7CisJCQkvKiB2YWx1ZShydikgPSAqLyByb3VuZGVkX3F1b3RpZW50KHZhbHVlKHJ2KSwKKwkJCSAgICB0ZW5zWy1lXSk7CisJCQlnb3RvIHJldDsKKwkJCX0KKyNlbmRpZgorCQl9CisJZTEgKz0gbmQgLSBrOworCisJLyogR2V0IHN0YXJ0aW5nIGFwcHJveGltYXRpb24gPSBydiAqIDEwKiplMSAqLworCisJaWYgKGUxID4gMCkgeworCQlpZiAoKGkgPSBlMSAmIDE1KSAhPSAwKQorCQkJdmFsdWUocnYpICo9IHRlbnNbaV07CisJCWlmIChlMSAmPSB+MTUpIHsKKwkJCWlmIChlMSA+IERCTF9NQVhfMTBfRVhQKSB7Cisgb3ZmbDoKKwkJCQllcnJubyA9IEVSQU5HRTsKKwkJCQl2YWx1ZShydikgPSBIVUdFX1ZBTDsKKwkJCQlpZiAoYmQwKQorCQkJCQlnb3RvIHJldGZyZWU7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKChlMSA9ICh1bnNpZ25lZCBpbnQpZTEgPj4gNCkgIT0gMCkgeworCQkJCWZvcihqID0gMDsgZTEgPiAxOyBqKyssCisJCQkJICAgIGUxID0gKHVuc2lnbmVkIGludCllMSA+PiAxKQorCQkJCQlpZiAoZTEgJiAxKQorCQkJCQkJdmFsdWUocnYpICo9IGJpZ3RlbnNbal07CisJCQkvKiBUaGUgbGFzdCBtdWx0aXBsaWNhdGlvbiBjb3VsZCBvdmVyZmxvdy4gKi8KKwkJCQl3b3JkMChydikgLT0gUCpFeHBfbXNrMTsKKwkJCQl2YWx1ZShydikgKj0gYmlndGVuc1tqXTsKKwkJCQlpZiAoKHogPSB3b3JkMChydikgJiBFeHBfbWFzaykKKwkJCQkgPiBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy1QKSkKKwkJCQkJZ290byBvdmZsOworCQkJCWlmICh6ID4gRXhwX21zazEqKERCTF9NQVhfRVhQK0JpYXMtMS1QKSkgeworCQkJCQkvKiBzZXQgdG8gbGFyZ2VzdCBudW1iZXIgKi8KKwkJCQkJLyogKENhbid0IHRydXN0IERCTF9NQVgpICovCisJCQkJCXdvcmQwKHJ2KSA9IEJpZzA7CisJCQkJCXdvcmQxKHJ2KSA9IEJpZzE7CisJCQkJCX0KKwkJCQllbHNlCisJCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOworCQkJCX0KKworCQkJfQorCQl9CisJZWxzZSBpZiAoZTEgPCAwKSB7CisJCWUxID0gLWUxOworCQlpZiAoKGkgPSBlMSAmIDE1KSAhPSAwKQorCQkJdmFsdWUocnYpIC89IHRlbnNbaV07CisJCWlmIChlMSAmPSB+MTUpIHsKKwkJCWUxID0gKHVuc2lnbmVkIGludCllMSA+PiA0OworCQkJaWYgKGUxID49IDEgPDwgbl9iaWd0ZW5zKQorCQkJCWdvdG8gdW5kZmw7CisJCQlmb3IoaiA9IDA7IGUxID4gMTsgaisrLAorCQkJICAgIGUxID0gKHVuc2lnbmVkIGludCllMSA+PiAxKQorCQkJCWlmIChlMSAmIDEpCisJCQkJCXZhbHVlKHJ2KSAqPSB0aW55dGVuc1tqXTsKKwkJCS8qIFRoZSBsYXN0IG11bHRpcGxpY2F0aW9uIGNvdWxkIHVuZGVyZmxvdy4gKi8KKwkJCXZhbHVlKHJ2MCkgPSB2YWx1ZShydik7CisJCQl2YWx1ZShydikgKj0gdGlueXRlbnNbal07CisJCQlpZiAoIXZhbHVlKHJ2KSkgeworCQkJCXZhbHVlKHJ2KSA9IDIuKnZhbHVlKHJ2MCk7CisJCQkJdmFsdWUocnYpICo9IHRpbnl0ZW5zW2pdOworCQkJCWlmICghdmFsdWUocnYpKSB7CisgdW5kZmw6CisJCQkJCXZhbHVlKHJ2KSA9IDAuOworCQkJCQllcnJubyA9IEVSQU5HRTsKKwkJCQkJaWYgKGJkMCkKKwkJCQkJCWdvdG8gcmV0ZnJlZTsKKwkJCQkJZ290byByZXQ7CisJCQkJCX0KKwkJCQl3b3JkMChydikgPSBUaW55MDsKKwkJCQl3b3JkMShydikgPSBUaW55MTsKKwkJCQkvKiBUaGUgcmVmaW5lbWVudCBiZWxvdyB3aWxsIGNsZWFuCisJCQkJICogdGhpcyBhcHByb3hpbWF0aW9uIHVwLgorCQkJCSAqLworCQkJCX0KKwkJCX0KKwkJfQorCisJLyogTm93IHRoZSBoYXJkIHBhcnQgLS0gYWRqdXN0aW5nIHJ2IHRvIHRoZSBjb3JyZWN0IHZhbHVlLiovCisKKwkvKiBQdXQgZGlnaXRzIGludG8gYmQ6IHRydWUgdmFsdWUgPSBiZCAqIDEwXmUgKi8KKworCWJkMCA9IHMyYihzMCwgbmQwLCBuZCwgeSk7CisKKwlmb3IoOzspIHsKKwkJYmQgPSBCYWxsb2MoYmQwLT5rKTsKKwkJQmNvcHkoYmQsIGJkMCk7CisJCWJiID0gZDJiKHZhbHVlKHJ2KSwgJmJiZSwgJmJiYml0cyk7CS8qIHJ2ID0gYmIgKiAyXmJiZSAqLworCQlicyA9IGkyYigxKTsKKworCQlpZiAoZSA+PSAwKSB7CisJCQliYjIgPSBiYjUgPSAwOworCQkJYmQyID0gYmQ1ID0gZTsKKwkJCX0KKwkJZWxzZSB7CisJCQliYjIgPSBiYjUgPSAtZTsKKwkJCWJkMiA9IGJkNSA9IDA7CisJCQl9CisJCWlmIChiYmUgPj0gMCkKKwkJCWJiMiArPSBiYmU7CisJCWVsc2UKKwkJCWJkMiAtPSBiYmU7CisJCWJzMiA9IGJiMjsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisjaWZkZWYgSUJNCisJCWogPSAxICsgNCpQIC0gMyAtIGJiYml0cyArICgoYmJlICsgYmJiaXRzIC0gMSkgJiAzKTsKKyNlbHNlCisJCWogPSBQICsgMSAtIGJiYml0czsKKyNlbmRpZgorI2Vsc2UKKwkJaSA9IGJiZSArIGJiYml0cyAtIDE7CS8qIGxvZ2IocnYpICovCisJCWlmIChpIDwgRW1pbikJLyogZGVub3JtYWwgKi8KKwkJCWogPSBiYmUgKyAoUC1FbWluKTsKKwkJZWxzZQorCQkJaiA9IFAgKyAxIC0gYmJiaXRzOworI2VuZGlmCisJCWJiMiArPSBqOworCQliZDIgKz0gajsKKwkJaSA9IGJiMiA8IGJkMiA/IGJiMiA6IGJkMjsKKwkJaWYgKGkgPiBiczIpCisJCQlpID0gYnMyOworCQlpZiAoaSA+IDApIHsKKwkJCWJiMiAtPSBpOworCQkJYmQyIC09IGk7CisJCQliczIgLT0gaTsKKwkJCX0KKwkJaWYgKGJiNSA+IDApIHsKKwkJCWJzID0gcG93NW11bHQoYnMsIGJiNSk7CisJCQliYjEgPSBtdWx0KGJzLCBiYik7CisJCQlCZnJlZShiYik7CisJCQliYiA9IGJiMTsKKwkJCX0KKwkJaWYgKGJiMiA+IDApCisJCQliYiA9IGxzaGlmdChiYiwgYmIyKTsKKwkJaWYgKGJkNSA+IDApCisJCQliZCA9IHBvdzVtdWx0KGJkLCBiZDUpOworCQlpZiAoYmQyID4gMCkKKwkJCWJkID0gbHNoaWZ0KGJkLCBiZDIpOworCQlpZiAoYnMyID4gMCkKKwkJCWJzID0gbHNoaWZ0KGJzLCBiczIpOworCQlkZWx0YSA9IGRpZmYoYmIsIGJkKTsKKwkJZHNpZ24gPSBkZWx0YS0+c2lnbjsKKwkJZGVsdGEtPnNpZ24gPSAwOworCQlpID0gY21wKGRlbHRhLCBicyk7CisJCWlmIChpIDwgMCkgeworCQkJLyogRXJyb3IgaXMgbGVzcyB0aGFuIGhhbGYgYW4gdWxwIC0tIGNoZWNrIGZvcgorCQkJICogc3BlY2lhbCBjYXNlIG9mIG1hbnRpc3NhIGEgcG93ZXIgb2YgdHdvLgorCQkJICovCisJCQlpZiAoZHNpZ24gfHwgd29yZDEocnYpIHx8IHdvcmQwKHJ2KSAmIEJuZHJ5X21hc2spCisJCQkJYnJlYWs7CisJCQlkZWx0YSA9IGxzaGlmdChkZWx0YSxMb2cyUCk7CisJCQlpZiAoY21wKGRlbHRhLCBicykgPiAwKQorCQkJCWdvdG8gZHJvcF9kb3duOworCQkJYnJlYWs7CisJCQl9CisJCWlmIChpID09IDApIHsKKwkJCS8qIGV4YWN0bHkgaGFsZi13YXkgYmV0d2VlbiAqLworCQkJaWYgKGRzaWduKSB7CisJCQkJaWYgKCh3b3JkMChydikgJiBCbmRyeV9tYXNrMSkgPT0gQm5kcnlfbWFzazEKKwkJCQkgJiYgIHdvcmQxKHJ2KSA9PSAweGZmZmZmZmZmKSB7CisJCQkJCS8qYm91bmRhcnkgY2FzZSAtLSBpbmNyZW1lbnQgZXhwb25lbnQqLworCQkJCQl3b3JkMChydikgPSAod29yZDAocnYpICYgRXhwX21hc2spCisJCQkJCQkrIEV4cF9tc2sxCisjaWZkZWYgSUJNCisJCQkJCQl8IEV4cF9tc2sxID4+IDQKKyNlbmRpZgorCQkJCQkJOworCQkJCQl3b3JkMShydikgPSAwOworCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKwkJCWVsc2UgaWYgKCEod29yZDAocnYpICYgQm5kcnlfbWFzaykgJiYgIXdvcmQxKHJ2KSkgeworIGRyb3BfZG93bjoKKwkJCQkvKiBib3VuZGFyeSBjYXNlIC0tIGRlY3JlbWVudCBleHBvbmVudCAqLworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQlMID0gd29yZDAocnYpICYgRXhwX21hc2s7CisjaWZkZWYgSUJNCisJCQkJaWYgKEwgPCAgRXhwX21zazEpCisjZWxzZQorCQkJCWlmIChMIDw9IEV4cF9tc2sxKQorI2VuZGlmCisJCQkJCWdvdG8gdW5kZmw7CisJCQkJTCAtPSBFeHBfbXNrMTsKKyNlbHNlCisJCQkJTCA9ICh3b3JkMChydikgJiBFeHBfbWFzaykgLSBFeHBfbXNrMTsKKyNlbmRpZgorCQkJCXdvcmQwKHJ2KSA9IEwgfCBCbmRyeV9tYXNrMTsKKwkJCQl3b3JkMShydikgPSAweGZmZmZmZmZmOworI2lmZGVmIElCTQorCQkJCWdvdG8gY29udDsKKyNlbHNlCisJCQkJYnJlYWs7CisjZW5kaWYKKwkJCQl9CisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJaWYgKCEod29yZDEocnYpICYgTFNCKSkKKwkJCQlicmVhazsKKyNlbmRpZgorCQkJaWYgKGRzaWduKQorCQkJCXZhbHVlKHJ2KSArPSB1bHAodmFsdWUocnYpKTsKKyNpZm5kZWYgUk9VTkRfQklBU0VECisJCQllbHNlIHsKKwkJCQl2YWx1ZShydikgLT0gdWxwKHZhbHVlKHJ2KSk7CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQlpZiAoIXZhbHVlKHJ2KSkKKwkJCQkJZ290byB1bmRmbDsKKyNlbmRpZgorCQkJCX0KKyNlbmRpZgorCQkJYnJlYWs7CisJCQl9CisJCWlmICgoYWFkaiA9IHJhdGlvKGRlbHRhLCBicykpIDw9IDIuKSB7CisJCQlpZiAoZHNpZ24pCisJCQkJYWFkaiA9IGFhZGoxID0gMS47CisJCQllbHNlIGlmICh3b3JkMShydikgfHwgd29yZDAocnYpICYgQm5kcnlfbWFzaykgeworI2lmbmRlZiBTdWRkZW5fVW5kZXJmbG93CisJCQkJaWYgKHdvcmQxKHJ2KSA9PSBUaW55MSAmJiAhd29yZDAocnYpKQorCQkJCQlnb3RvIHVuZGZsOworI2VuZGlmCisJCQkJYWFkaiA9IDEuOworCQkJCWFhZGoxID0gLTEuOworCQkJCX0KKwkJCWVsc2UgeworCQkJCS8qIHNwZWNpYWwgY2FzZSAtLSBwb3dlciBvZiBGTFRfUkFESVggdG8gYmUgKi8KKwkJCQkvKiByb3VuZGVkIGRvd24uLi4gKi8KKworCQkJCWlmIChhYWRqIDwgMi4vRkxUX1JBRElYKQorCQkJCQlhYWRqID0gMS4vRkxUX1JBRElYOworCQkJCWVsc2UKKwkJCQkJYWFkaiAqPSAwLjU7CisJCQkJYWFkajEgPSAtYWFkajsKKwkJCQl9CisJCQl9CisJCWVsc2UgeworCQkJYWFkaiAqPSAwLjU7CisJCQlhYWRqMSA9IGRzaWduID8gYWFkaiA6IC1hYWRqOworI2lmZGVmIENoZWNrX0ZMVF9ST1VORFMKKwkJCXN3aXRjaChGTFRfUk9VTkRTKSB7CisJCQkJY2FzZSAyOiAvKiB0b3dhcmRzICtpbmZpbml0eSAqLworCQkJCQlhYWRqMSAtPSAwLjU7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgMDogLyogdG93YXJkcyAwICovCisJCQkJY2FzZSAzOiAvKiB0b3dhcmRzIC1pbmZpbml0eSAqLworCQkJCQlhYWRqMSArPSAwLjU7CisJCQkJfQorI2Vsc2UKKwkJCWlmIChGTFRfUk9VTkRTID09IDApCisJCQkJYWFkajEgKz0gMC41OworI2VuZGlmCisJCQl9CisJCXkgPSB3b3JkMChydikgJiBFeHBfbWFzazsKKworCQkvKiBDaGVjayBmb3Igb3ZlcmZsb3cgKi8KKworCQlpZiAoeSA9PSBFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy0xKSkgeworCQkJdmFsdWUocnYwKSA9IHZhbHVlKHJ2KTsKKwkJCXdvcmQwKHJ2KSAtPSBQKkV4cF9tc2sxOworCQkJYWRqID0gYWFkajEgKiB1bHAodmFsdWUocnYpKTsKKwkJCXZhbHVlKHJ2KSArPSBhZGo7CisJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA+PQorCQkJCQlFeHBfbXNrMSooREJMX01BWF9FWFArQmlhcy1QKSkgeworCQkJCWlmICh3b3JkMChydjApID09IEJpZzAgJiYgd29yZDEocnYwKSA9PSBCaWcxKQorCQkJCQlnb3RvIG92Zmw7CisJCQkJd29yZDAocnYpID0gQmlnMDsKKwkJCQl3b3JkMShydikgPSBCaWcxOworCQkJCWdvdG8gY29udDsKKwkJCQl9CisJCQllbHNlCisJCQkJd29yZDAocnYpICs9IFAqRXhwX21zazE7CisJCQl9CisJCWVsc2UgeworI2lmZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCWlmICgod29yZDAocnYpICYgRXhwX21hc2spIDw9IFAqRXhwX21zazEpIHsKKwkJCQl2YWx1ZShydjApID0gdmFsdWUocnYpOworCQkJCXdvcmQwKHJ2KSArPSBQKkV4cF9tc2sxOworCQkJCWFkaiA9IGFhZGoxICogdWxwKHZhbHVlKHJ2KSk7CisJCQkJdmFsdWUocnYpICs9IGFkajsKKyNpZmRlZiBJQk0KKwkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8ICBQKkV4cF9tc2sxKQorI2Vsc2UKKwkJCQlpZiAoKHdvcmQwKHJ2KSAmIEV4cF9tYXNrKSA8PSBQKkV4cF9tc2sxKQorI2VuZGlmCisJCQkJCXsKKwkJCQkJaWYgKHdvcmQwKHJ2MCkgPT0gVGlueTAKKwkJCQkJICYmIHdvcmQxKHJ2MCkgPT0gVGlueTEpCisJCQkJCQlnb3RvIHVuZGZsOworCQkJCQl3b3JkMChydikgPSBUaW55MDsKKwkJCQkJd29yZDEocnYpID0gVGlueTE7CisJCQkJCWdvdG8gY29udDsKKwkJCQkJfQorCQkJCWVsc2UKKwkJCQkJd29yZDAocnYpIC09IFAqRXhwX21zazE7CisJCQkJfQorCQkJZWxzZSB7CisJCQkJYWRqID0gYWFkajEgKiB1bHAodmFsdWUocnYpKTsKKwkJCQl2YWx1ZShydikgKz0gYWRqOworCQkJCX0KKyNlbHNlCisJCQkvKiBDb21wdXRlIGFkaiBzbyB0aGF0IHRoZSBJRUVFIHJvdW5kaW5nIHJ1bGVzIHdpbGwKKwkJCSAqIGNvcnJlY3RseSByb3VuZCBydiArIGFkaiBpbiBzb21lIGhhbGYtd2F5IGNhc2VzLgorCQkJICogSWYgcnYgKiB1bHAocnYpIGlzIGRlbm9ybWFsaXplZCAoaS5lLiwKKwkJCSAqIHkgPD0gKFAtMSkqRXhwX21zazEpLCB3ZSBtdXN0IGFkanVzdCBhYWRqIHRvIGF2b2lkCisJCQkgKiB0cm91YmxlIGZyb20gYml0cyBsb3N0IHRvIGRlbm9ybWFsaXphdGlvbjsKKwkJCSAqIGV4YW1wbGU6IDEuMmUtMzA3IC4KKwkJCSAqLworCQkJaWYgKHkgPD0gKFAtMSkqRXhwX21zazEgJiYgYWFkaiA+PSAxLikgeworCQkJCWFhZGoxID0gKGRvdWJsZSkoaW50KShhYWRqICsgMC41KTsKKwkJCQlpZiAoIWRzaWduKQorCQkJCQlhYWRqMSA9IC1hYWRqMTsKKwkJCQl9CisJCQlhZGogPSBhYWRqMSAqIHVscCh2YWx1ZShydikpOworCQkJdmFsdWUocnYpICs9IGFkajsKKyNlbmRpZgorCQkJfQorCQl6ID0gd29yZDAocnYpICYgRXhwX21hc2s7CisJCWlmICh5ID09IHopIHsKKwkJCS8qIENhbiB3ZSBzdG9wIG5vdz8gKi8KKwkJCUwgPSBhYWRqOworCQkJYWFkaiAtPSBMOworCQkJLyogVGhlIHRvbGVyYW5jZXMgYmVsb3cgYXJlIGNvbnNlcnZhdGl2ZS4gKi8KKwkJCWlmIChkc2lnbiB8fCB3b3JkMShydikgfHwgd29yZDAocnYpICYgQm5kcnlfbWFzaykgeworCQkJCWlmIChhYWRqIDwgLjQ5OTk5OTkgfHwgYWFkaiA+IC41MDAwMDAxKQorCQkJCQlicmVhazsKKwkJCQl9CisJCQllbHNlIGlmIChhYWRqIDwgLjQ5OTk5OTkvRkxUX1JBRElYKQorCQkJCWJyZWFrOworCQkJfQorIGNvbnQ6CisJCUJmcmVlKGJiKTsKKwkJQmZyZWUoYmQpOworCQlCZnJlZShicyk7CisJCUJmcmVlKGRlbHRhKTsKKwkJfQorIHJldGZyZWU6CisJQmZyZWUoYmIpOworCUJmcmVlKGJkKTsKKwlCZnJlZShicyk7CisJQmZyZWUoYmQwKTsKKwlCZnJlZShkZWx0YSk7CisgcmV0OgorCWlmIChzZSkKKwkJLyogTElOVEVEIGludGVyZmFjZSBzcGVjaWZpY2F0aW9uICovCisJCSpzZSA9IChjaGFyICopczsKKwlyZXR1cm4gc2lnbiA/IC12YWx1ZShydikgOiB2YWx1ZShydik7CisJfQorCisgc3RhdGljIGludAorcXVvcmVtCisjaWZkZWYgS1JfaGVhZGVycworCShiLCBTKSBCaWdpbnQgKmIsICpTOworI2Vsc2UKKwkoQmlnaW50ICpiLCBCaWdpbnQgKlMpCisjZW5kaWYKK3sKKwlpbnQgbjsKKwlMb25nIGJvcnJvdywgeTsKKwlVTG9uZyBjYXJyeSwgcSwgeXM7CisJVUxvbmcgKmJ4LCAqYnhlLCAqc3gsICpzeGU7CisjaWZkZWYgUGFja18zMgorCUxvbmcgejsKKwlVTG9uZyBzaSwgenM7CisjZW5kaWYKKworCW4gPSBTLT53ZHM7CisjaWZkZWYgREVCVUcKKwkvKmRlYnVnKi8gaWYgKGItPndkcyA+IG4pCisJLypkZWJ1ZyovCUJ1Zygib3ZlcnNpemUgYiBpbiBxdW9yZW0iKTsKKyNlbmRpZgorCWlmIChiLT53ZHMgPCBuKQorCQlyZXR1cm4gMDsKKwlzeCA9IFMtPng7CisJc3hlID0gc3ggKyAtLW47CisJYnggPSBiLT54OworCWJ4ZSA9IGJ4ICsgbjsKKwlxID0gKmJ4ZSAvICgqc3hlICsgMSk7CS8qIGVuc3VyZSBxIDw9IHRydWUgcXVvdGllbnQgKi8KKyNpZmRlZiBERUJVRworCS8qZGVidWcqLyBpZiAocSA+IDkpCisJLypkZWJ1ZyovCUJ1Zygib3ZlcnNpemVkIHF1b3RpZW50IGluIHF1b3JlbSIpOworI2VuZGlmCisJaWYgKHEpIHsKKwkJYm9ycm93ID0gMDsKKwkJY2FycnkgPSAwOworCQlkbyB7CisjaWZkZWYgUGFja18zMgorCQkJc2kgPSAqc3grKzsKKwkJCXlzID0gKHNpICYgMHhmZmZmKSAqIHEgKyBjYXJyeTsKKwkJCXpzID0gKHNpID4+IDE2KSAqIHEgKyAoeXMgPj4gMTYpOworCQkJY2FycnkgPSB6cyA+PiAxNjsKKwkJCXkgPSAoKmJ4ICYgMHhmZmZmKSAtICh5cyAmIDB4ZmZmZikgKyBib3Jyb3c7CisJCQlib3Jyb3cgPSAoVUxvbmcpeSA+PiAxNjsKKwkJCVNpZ25fRXh0ZW5kKGJvcnJvdywgeSk7CisJCQl6ID0gKCpieCA+PiAxNikgLSAoenMgJiAweGZmZmYpICsgYm9ycm93OworCQkJYm9ycm93ID0gKFVMb25nKXogPj4gMTY7CisJCQlTaWduX0V4dGVuZChib3Jyb3csIHopOworCQkJU3RvcmVpbmMoYngsIHosIHkpOworI2Vsc2UKKwkJCXlzID0gKnN4KysgKiBxICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgKyBib3Jyb3c7CisJCQlib3Jyb3cgPSB5ID4+IDE2OworCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKKwkJCSpieCsrID0geSAmIDB4ZmZmZjsKKyNlbmRpZgorCQkJfQorCQkJd2hpbGUoc3ggPD0gc3hlKTsKKwkJaWYgKCEqYnhlKSB7CisJCQlieCA9IGItPng7CisJCQl3aGlsZSgtLWJ4ZSA+IGJ4ICYmICEqYnhlKQorCQkJCS0tbjsKKwkJCWItPndkcyA9IG47CisJCQl9CisJCX0KKwlpZiAoY21wKGIsIFMpID49IDApIHsKKwkJcSsrOworCQlib3Jyb3cgPSAwOworCQljYXJyeSA9IDA7CisJCWJ4ID0gYi0+eDsKKwkJc3ggPSBTLT54OworCQlkbyB7CisjaWZkZWYgUGFja18zMgorCQkJc2kgPSAqc3grKzsKKwkJCXlzID0gKHNpICYgMHhmZmZmKSArIGNhcnJ5OworCQkJenMgPSAoc2kgPj4gMTYpICsgKHlzID4+IDE2KTsKKwkJCWNhcnJ5ID0genMgPj4gMTY7CisJCQl5ID0gKCpieCAmIDB4ZmZmZikgLSAoeXMgJiAweGZmZmYpICsgYm9ycm93OworCQkJYm9ycm93ID0gKFVMb25nKXkgPj4gMTY7CisJCQlTaWduX0V4dGVuZChib3Jyb3csIHkpOworCQkJeiA9ICgqYnggPj4gMTYpIC0gKHpzICYgMHhmZmZmKSArIGJvcnJvdzsKKwkJCWJvcnJvdyA9IChVTG9uZyl6ID4+IDE2OworCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB6KTsKKwkJCVN0b3JlaW5jKGJ4LCB6LCB5KTsKKyNlbHNlCisJCQl5cyA9ICpzeCsrICsgY2Fycnk7CisJCQljYXJyeSA9IHlzID4+IDE2OworCQkJeSA9ICpieCAtICh5cyAmIDB4ZmZmZikgKyBib3Jyb3c7CisJCQlib3Jyb3cgPSB5ID4+IDE2OworCQkJU2lnbl9FeHRlbmQoYm9ycm93LCB5KTsKKwkJCSpieCsrID0geSAmIDB4ZmZmZjsKKyNlbmRpZgorCQkJfQorCQkJd2hpbGUoc3ggPD0gc3hlKTsKKwkJYnggPSBiLT54OworCQlieGUgPSBieCArIG47CisJCWlmICghKmJ4ZSkgeworCQkJd2hpbGUoLS1ieGUgPiBieCAmJiAhKmJ4ZSkKKwkJCQktLW47CisJCQliLT53ZHMgPSBuOworCQkJfQorCQl9CisJcmV0dXJuIHE7CisJfQorCisvKiBmcmVlZHRvYShzKSBtdXN0IGJlIHVzZWQgdG8gZnJlZSB2YWx1ZXMgcyByZXR1cm5lZCBieSBkdG9hCisgKiB3aGVuIE1VTFRJUExFX1RIUkVBRFMgaXMgI2RlZmluZWQuICBJdCBzaG91bGQgYmUgdXNlZCBpbiBhbGwgY2FzZXMsCisgKiBidXQgZm9yIGNvbnNpc3RlbmN5IHdpdGggZWFybGllciB2ZXJzaW9ucyBvZiBkdG9hLCBpdCBpcyBvcHRpb25hbAorICogd2hlbiBNVUxUSVBMRV9USFJFQURTIGlzIG5vdCBkZWZpbmVkLgorICovCisKK3ZvaWQKKyNpZmRlZiBLUl9oZWFkZXJzCitmcmVlZHRvYShzKSBjaGFyICpzOworI2Vsc2UKK2ZyZWVkdG9hKGNoYXIgKnMpCisjZW5kaWYKK3sKKwlmcmVlKHMpOworfQorCisKKworLyogZHRvYSBmb3IgSUVFRSBhcml0aG1ldGljIChkbWcpOiBjb252ZXJ0IGRvdWJsZSB0byBBU0NJSSBzdHJpbmcuCisgKgorICogSW5zcGlyZWQgYnkgIkhvdyB0byBQcmludCBGbG9hdGluZy1Qb2ludCBOdW1iZXJzIEFjY3VyYXRlbHkiIGJ5CisgKiBHdXkgTC4gU3RlZWxlLCBKci4gYW5kIEpvbiBMLiBXaGl0ZSBbUHJvYy4gQUNNIFNJR1BMQU4gJzkwLCBwcC4gOTItMTAxXS4KKyAqCisgKiBNb2RpZmljYXRpb25zOgorICoJMS4gUmF0aGVyIHRoYW4gaXRlcmF0aW5nLCB3ZSB1c2UgYSBzaW1wbGUgbnVtZXJpYyBvdmVyZXN0aW1hdGUKKyAqCSAgIHRvIGRldGVybWluZSBrID0gZmxvb3IobG9nMTAoZCkpLiAgV2Ugc2NhbGUgcmVsZXZhbnQKKyAqCSAgIHF1YW50aXRpZXMgdXNpbmcgTyhsb2cyKGspKSByYXRoZXIgdGhhbiBPKGspIG11bHRpcGxpY2F0aW9ucy4KKyAqCTIuIEZvciBzb21lIG1vZGVzID4gMiAoY29ycmVzcG9uZGluZyB0byBlY3Z0IGFuZCBmY3Z0KSwgd2UgZG9uJ3QKKyAqCSAgIHRyeSB0byBnZW5lcmF0ZSBkaWdpdHMgc3RyaWN0bHkgbGVmdCB0byByaWdodC4gIEluc3RlYWQsIHdlCisgKgkgICBjb21wdXRlIHdpdGggZmV3ZXIgYml0cyBhbmQgcHJvcGFnYXRlIHRoZSBjYXJyeSBpZiBuZWNlc3NhcnkKKyAqCSAgIHdoZW4gcm91bmRpbmcgdGhlIGZpbmFsIGRpZ2l0IHVwLiAgVGhpcyBpcyBvZnRlbiBmYXN0ZXIuCisgKgkzLiBVbmRlciB0aGUgYXNzdW1wdGlvbiB0aGF0IGlucHV0IHdpbGwgYmUgcm91bmRlZCBuZWFyZXN0LAorICoJICAgbW9kZSAwIHJlbmRlcnMgMWUyMyBhcyAxZTIzIHJhdGhlciB0aGFuIDkuOTk5OTk5OTk5OTk5OTk5ZTIyLgorICoJICAgVGhhdCBpcywgd2UgYWxsb3cgZXF1YWxpdHkgaW4gc3RvcHBpbmcgdGVzdHMgd2hlbiB0aGUKKyAqCSAgIHJvdW5kLW5lYXJlc3QgcnVsZSB3aWxsIGdpdmUgdGhlIHNhbWUgZmxvYXRpbmctcG9pbnQgdmFsdWUKKyAqCSAgIGFzIHdvdWxkIHNhdGlzZmFjdGlvbiBvZiB0aGUgc3RvcHBpbmcgdGVzdCB3aXRoIHN0cmljdAorICoJICAgaW5lcXVhbGl0eS4KKyAqCTQuIFdlIHJlbW92ZSBjb21tb24gZmFjdG9ycyBvZiBwb3dlcnMgb2YgMiBmcm9tIHJlbGV2YW50CisgKgkgICBxdWFudGl0aWVzLgorICoJNS4gV2hlbiBjb252ZXJ0aW5nIGZsb2F0aW5nLXBvaW50IGludGVnZXJzIGxlc3MgdGhhbiAxZTE2LAorICoJICAgd2UgdXNlIGZsb2F0aW5nLXBvaW50IGFyaXRobWV0aWMgcmF0aGVyIHRoYW4gcmVzb3J0aW5nCisgKgkgICB0byBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlcnMuCisgKgk2LiBXaGVuIGFza2VkIHRvIHByb2R1Y2UgZmV3ZXIgdGhhbiAxNSBkaWdpdHMsIHdlIGZpcnN0IHRyeQorICoJICAgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYzsgd2UgcmVzb3J0IHRvCisgKgkgICBtdWx0aXBsZS1wcmVjaXNpb24gaW50ZWdlciBhcml0aG1ldGljIG9ubHkgaWYgd2UgY2Fubm90CisgKgkgICBndWFyYW50ZWUgdGhhdCB0aGUgZmxvYXRpbmctcG9pbnQgY2FsY3VsYXRpb24gaGFzIGdpdmVuCisgKgkgICB0aGUgY29ycmVjdGx5IHJvdW5kZWQgcmVzdWx0LiAgRm9yIGsgcmVxdWVzdGVkIGRpZ2l0cyBhbmQKKyAqCSAgICJ1bmlmb3JtbHkiIGRpc3RyaWJ1dGVkIGlucHV0LCB0aGUgcHJvYmFiaWxpdHkgaXMKKyAqCSAgIHNvbWV0aGluZyBsaWtlIDEwXihrLTE1KSB0aGF0IHdlIG11c3QgcmVzb3J0IHRvIHRoZSBMb25nCisgKgkgICBjYWxjdWxhdGlvbi4KKyAqLworCisgY2hhciAqCitfX2R0b2EKKyNpZmRlZiBLUl9oZWFkZXJzCisJKF9kLCBtb2RlLCBuZGlnaXRzLCBkZWNwdCwgc2lnbiwgcnZlKQorCWRvdWJsZSBfZDsgaW50IG1vZGUsIG5kaWdpdHMsICpkZWNwdCwgKnNpZ247IGNoYXIgKipydmU7CisjZWxzZQorCShkb3VibGUgX2QsIGludCBtb2RlLCBpbnQgbmRpZ2l0cywgaW50ICpkZWNwdCwgaW50ICpzaWduLCBjaGFyICoqcnZlKQorI2VuZGlmCit7CisgLyoJQXJndW1lbnRzIG5kaWdpdHMsIGRlY3B0LCBzaWduIGFyZSBzaW1pbGFyIHRvIHRob3NlCisJb2YgZWN2dCBhbmQgZmN2dDsgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQgZnJvbQorCXRoZSByZXR1cm5lZCBzdHJpbmcuICBJZiBub3QgbnVsbCwgKnJ2ZSBpcyBzZXQgdG8gcG9pbnQKKwl0byB0aGUgZW5kIG9mIHRoZSByZXR1cm4gdmFsdWUuICBJZiBkIGlzICstSW5maW5pdHkgb3IgTmFOLAorCXRoZW4gKmRlY3B0IGlzIHNldCB0byA5OTk5LgorCisJbW9kZToKKwkJMCA9PT4gc2hvcnRlc3Qgc3RyaW5nIHRoYXQgeWllbGRzIGQgd2hlbiByZWFkIGluCisJCQlhbmQgcm91bmRlZCB0byBuZWFyZXN0LgorCQkxID09PiBsaWtlIDAsIGJ1dCB3aXRoIFN0ZWVsZSAmIFdoaXRlIHN0b3BwaW5nIHJ1bGU7CisJCQllLmcuIHdpdGggSUVFRSBQNzU0IGFyaXRobWV0aWMgLCBtb2RlIDAgZ2l2ZXMKKwkJCTFlMjMgd2hlcmVhcyBtb2RlIDEgZ2l2ZXMgOS45OTk5OTk5OTk5OTk5OTllMjIuCisJCTIgPT0+IG1heCgxLG5kaWdpdHMpIHNpZ25pZmljYW50IGRpZ2l0cy4gIFRoaXMgZ2l2ZXMgYQorCQkJcmV0dXJuIHZhbHVlIHNpbWlsYXIgdG8gdGhhdCBvZiBlY3Z0LCBleGNlcHQKKwkJCXRoYXQgdHJhaWxpbmcgemVyb3MgYXJlIHN1cHByZXNzZWQuCisJCTMgPT0+IHRocm91Z2ggbmRpZ2l0cyBwYXN0IHRoZSBkZWNpbWFsIHBvaW50LiAgVGhpcworCQkJZ2l2ZXMgYSByZXR1cm4gdmFsdWUgc2ltaWxhciB0byB0aGF0IGZyb20gZmN2dCwKKwkJCWV4Y2VwdCB0aGF0IHRyYWlsaW5nIHplcm9zIGFyZSBzdXBwcmVzc2VkLCBhbmQKKwkJCW5kaWdpdHMgY2FuIGJlIG5lZ2F0aXZlLgorCQk0LTkgc2hvdWxkIGdpdmUgdGhlIHNhbWUgcmV0dXJuIHZhbHVlcyBhcyAyLTMsIGkuZS4sCisJCQk0IDw9IG1vZGUgPD0gOSA9PT4gc2FtZSByZXR1cm4gYXMgbW9kZQorCQkJMiArIChtb2RlICYgMSkuICBUaGVzZSBtb2RlcyBhcmUgbWFpbmx5IGZvcgorCQkJZGVidWdnaW5nOyBvZnRlbiB0aGV5IHJ1biBzbG93ZXIgYnV0IHNvbWV0aW1lcworCQkJZmFzdGVyIHRoYW4gbW9kZXMgMi0zLgorCQk0LDUsOCw5ID09PiBsZWZ0LXRvLXJpZ2h0IGRpZ2l0IGdlbmVyYXRpb24uCisJCTYtOSA9PT4gZG9uJ3QgdHJ5IGZhc3QgZmxvYXRpbmctcG9pbnQgZXN0aW1hdGUKKwkJCShpZiBhcHBsaWNhYmxlKS4KKworCQlWYWx1ZXMgb2YgbW9kZSBvdGhlciB0aGFuIDAtOSBhcmUgdHJlYXRlZCBhcyBtb2RlIDAuCisKKwkJU3VmZmljaWVudCBzcGFjZSBpcyBhbGxvY2F0ZWQgdG8gdGhlIHJldHVybiB2YWx1ZQorCQl0byBob2xkIHRoZSBzdXBwcmVzc2VkIHRyYWlsaW5nIHplcm9zLgorCSovCisKKwlpbnQgYmJpdHMsIGIyLCBiNSwgYmUsIGRpZywgaSwgaWVwcywgaWxpbTAsCisJCWosIGpqMSwgaywgazAsIGtfY2hlY2ssIGxlZnRyaWdodCwgbTIsIG01LCBzMiwgczUsCisJCXRyeV9xdWljazsKKwlpbnQgaWxpbSA9IDAsIGlsaW0xID0gMCwgc3BlY19jYXNlID0gMDsJLyogcGFjaWZ5IGdjYyAqLworCUxvbmcgTDsKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCWludCBkZW5vcm07CisJVUxvbmcgeDsKKyNlbmRpZgorCUJpZ2ludCAqYiwgKmIxLCAqZGVsdGEsICptaGksICpTOworCUJpZ2ludCAqbWxvID0gTlVMTDsgLyogcGFjaWZ5IGdjYyAqLworCWRvdWJsZSBkczsKKwljaGFyICpzLCAqczA7CisJQmlnaW50ICpyZXN1bHQgPSBOVUxMOworCWludCByZXN1bHRfayA9IDA7CisJX2RvdWJsZSBkLCBkMiwgZXBzOworCisJdmFsdWUoZCkgPSBfZDsKKworCWlmICh3b3JkMChkKSAmIFNpZ25fYml0KSB7CisJCS8qIHNldCBzaWduIGZvciBldmVyeXRoaW5nLCBpbmNsdWRpbmcgMCdzIGFuZCBOYU5zICovCisJCSpzaWduID0gMTsKKwkJd29yZDAoZCkgJj0gflNpZ25fYml0OwkvKiBjbGVhciBzaWduIGJpdCAqLworCQl9CisJZWxzZQorCQkqc2lnbiA9IDA7CisKKyNpZiBkZWZpbmVkKElFRUVfQXJpdGgpICsgZGVmaW5lZChWQVgpCisjaWZkZWYgSUVFRV9Bcml0aAorCWlmICgod29yZDAoZCkgJiBFeHBfbWFzaykgPT0gRXhwX21hc2spCisjZWxzZQorCWlmICh3b3JkMChkKSAgPT0gMHg4MDAwKQorI2VuZGlmCisJCXsKKwkJLyogSW5maW5pdHkgb3IgTmFOICovCisJCSpkZWNwdCA9IDk5OTk7CisJCXMgPQorI2lmZGVmIElFRUVfQXJpdGgKKwkJCSF3b3JkMShkKSAmJiAhKHdvcmQwKGQpICYgMHhmZmZmZikgPyAiSW5maW5pdHkiIDoKKyNlbmRpZgorCQkJCSJOYU4iOworICAgICAgICByZXN1bHQgPSBCYWxsb2Moc3RybGVuKHMpKzEpOworICAgICAgICBzMCA9IChjaGFyICopKHZvaWQgKilyZXN1bHQ7CisgICAgICAgIHN0cmNweShzMCwgcyk7CisgICAgICAgIGlmIChydmUpCisgICAgICAgICAgICAqcnZlID0KKyNpZmRlZiBJRUVFX0FyaXRoCisgICAgICAgICAgICAgICAgczBbM10gPyBzMCArIDggOgorI2VuZGlmCisgICAgICAgICAgICAgICAgICAgICAgICBzMCArIDM7CisJCXJldHVybiBzMDsKKwkJfQorI2VuZGlmCisjaWZkZWYgSUJNCisJdmFsdWUoZCkgKz0gMDsgLyogbm9ybWFsaXplICovCisjZW5kaWYKKwlpZiAoIXZhbHVlKGQpKSB7CisJCSpkZWNwdCA9IDE7CisgICAgICAgIHJlc3VsdCA9IEJhbGxvYygyKTsKKyAgICAgICAgczAgPSAoY2hhciAqKSh2b2lkICopcmVzdWx0OworICAgICAgICBzdHJjcHkoczAsICIwIik7CisgICAgICAgIGlmIChydmUpCisgICAgICAgICAgICAqcnZlID0gczAgKyAxOworICAgICAgICByZXR1cm4gczA7CisJCX0KKworCWIgPSBkMmIodmFsdWUoZCksICZiZSwgJmJiaXRzKTsKKyNpZmRlZiBTdWRkZW5fVW5kZXJmbG93CisJaSA9IChpbnQpKHdvcmQwKGQpID4+IEV4cF9zaGlmdDEgJiAoRXhwX21hc2s+PkV4cF9zaGlmdDEpKTsKKyNlbHNlCisJaWYgKChpID0gKGludCkod29yZDAoZCkgPj4gRXhwX3NoaWZ0MSAmIChFeHBfbWFzaz4+RXhwX3NoaWZ0MSkpKSAhPSAwKSB7CisjZW5kaWYKKwkJdmFsdWUoZDIpID0gdmFsdWUoZCk7CisJCXdvcmQwKGQyKSAmPSBGcmFjX21hc2sxOworCQl3b3JkMChkMikgfD0gRXhwXzExOworI2lmZGVmIElCTQorCQlpZiAoaiA9IDExIC0gaGkwYml0cyh3b3JkMChkMikgJiBGcmFjX21hc2spKQorCQkJdmFsdWUoZDIpIC89IDEgPDwgajsKKyNlbmRpZgorCisJCS8qIGxvZyh4KQl+PX4gbG9nKDEuNSkgKyAoeC0xLjUpLzEuNQorCQkgKiBsb2cxMCh4KQkgPSAgbG9nKHgpIC8gbG9nKDEwKQorCQkgKgkJfj1+IGxvZygxLjUpL2xvZygxMCkgKyAoeC0xLjUpLygxLjUqbG9nKDEwKSkKKwkJICogbG9nMTAoZCkgPSAoaS1CaWFzKSpsb2coMikvbG9nKDEwKSArIGxvZzEwKGQyKQorCQkgKgorCQkgKiBUaGlzIHN1Z2dlc3RzIGNvbXB1dGluZyBhbiBhcHByb3hpbWF0aW9uIGsgdG8gbG9nMTAoZCkgYnkKKwkJICoKKwkJICogayA9IChpIC0gQmlhcykqMC4zMDEwMjk5OTU2NjM5ODEKKwkJICoJKyAoIChkMi0xLjUpKjAuMjg5NTI5NjU0NjAyMTY4ICsgMC4xNzYwOTEyNTkwNTU2ODEgKTsKKwkJICoKKwkJICogV2Ugd2FudCBrIHRvIGJlIHRvbyBsYXJnZSByYXRoZXIgdGhhbiB0b28gc21hbGwuCisJCSAqIFRoZSBlcnJvciBpbiB0aGUgZmlyc3Qtb3JkZXIgVGF5bG9yIHNlcmllcyBhcHByb3hpbWF0aW9uCisJCSAqIGlzIGluIG91ciBmYXZvciwgc28gd2UganVzdCByb3VuZCB1cCB0aGUgY29uc3RhbnQgZW5vdWdoCisJCSAqIHRvIGNvbXBlbnNhdGUgZm9yIGFueSBlcnJvciBpbiB0aGUgbXVsdGlwbGljYXRpb24gb2YKKwkJICogKGkgLSBCaWFzKSBieSAwLjMwMTAyOTk5NTY2Mzk4MTsgc2luY2UgfGkgLSBCaWFzfCA8PSAxMDc3LAorCQkgKiBhbmQgMTA3NyAqIDAuMzAxMDMgKiAyXi01MiB+PX4gNy4yZS0xNCwKKwkJICogYWRkaW5nIDFlLTEzIHRvIHRoZSBjb25zdGFudCB0ZXJtIG1vcmUgdGhhbiBzdWZmaWNlcy4KKwkJICogSGVuY2Ugd2UgYWRqdXN0IHRoZSBjb25zdGFudCB0ZXJtIHRvIDAuMTc2MDkxMjU5MDU1OC4KKwkJICogKFdlIGNvdWxkIGdldCBhIG1vcmUgYWNjdXJhdGUgayBieSBpbnZva2luZyBsb2cxMCwKKwkJICogIGJ1dCB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aHdoaWxlLikKKwkJICovCisKKwkJaSAtPSBCaWFzOworI2lmZGVmIElCTQorCQlpIDw8PSAyOworCQlpICs9IGo7CisjZW5kaWYKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQlkZW5vcm0gPSAwOworCQl9CisJZWxzZSB7CisJCS8qIGQgaXMgZGVub3JtYWxpemVkICovCisKKwkJaSA9IGJiaXRzICsgYmUgKyAoQmlhcyArIChQLTEpIC0gMSk7CisJCXggPSBpID4gMzIgID8gd29yZDAoZCkgPDwgKDY0IC0gaSkgfCB3b3JkMShkKSA+PiAoaSAtIDMyKQorCQkJICAgIDogd29yZDEoZCkgPDwgKDMyIC0gaSk7CisJCXZhbHVlKGQyKSA9IHg7CisJCXdvcmQwKGQyKSAtPSAzMSpFeHBfbXNrMTsgLyogYWRqdXN0IGV4cG9uZW50ICovCisJCWkgLT0gKEJpYXMgKyAoUC0xKSAtIDEpICsgMTsKKwkJZGVub3JtID0gMTsKKwkJfQorI2VuZGlmCisJZHMgPSAodmFsdWUoZDIpLTEuNSkqMC4yODk1Mjk2NTQ2MDIxNjggKyAwLjE3NjA5MTI1OTA1NTggKworCSAgICBpKjAuMzAxMDI5OTk1NjYzOTgxOworCWsgPSAoaW50KWRzOworCWlmIChkcyA8IDAuICYmIGRzICE9IGspCisJCWstLTsJLyogd2FudCBrID0gZmxvb3IoZHMpICovCisJa19jaGVjayA9IDE7CisJaWYgKGsgPj0gMCAmJiBrIDw9IFRlbl9wbWF4KSB7CisJCWlmICh2YWx1ZShkKSA8IHRlbnNba10pCisJCQlrLS07CisJCWtfY2hlY2sgPSAwOworCQl9CisJaiA9IGJiaXRzIC0gaSAtIDE7CisJaWYgKGogPj0gMCkgeworCQliMiA9IDA7CisJCXMyID0gajsKKwkJfQorCWVsc2UgeworCQliMiA9IC1qOworCQlzMiA9IDA7CisJCX0KKwlpZiAoayA+PSAwKSB7CisJCWI1ID0gMDsKKwkJczUgPSBrOworCQlzMiArPSBrOworCQl9CisJZWxzZSB7CisJCWIyIC09IGs7CisJCWI1ID0gLWs7CisJCXM1ID0gMDsKKwkJfQorCWlmIChtb2RlIDwgMCB8fCBtb2RlID4gOSkKKwkJbW9kZSA9IDA7CisJdHJ5X3F1aWNrID0gMTsKKwlpZiAobW9kZSA+IDUpIHsKKwkJbW9kZSAtPSA0OworCQl0cnlfcXVpY2sgPSAwOworCQl9CisJbGVmdHJpZ2h0ID0gMTsKKwlzd2l0Y2gobW9kZSkgeworCQljYXNlIDA6CisJCWNhc2UgMToKKwkJCWlsaW0gPSBpbGltMSA9IC0xOworCQkJaSA9IDE4OworCQkJbmRpZ2l0cyA9IDA7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJbGVmdHJpZ2h0ID0gMDsKKwkJCS8qIEZBTExUSFJPVUdIICovCisJCWNhc2UgNDoKKwkJCWlmIChuZGlnaXRzIDw9IDApCisJCQkJbmRpZ2l0cyA9IDE7CisJCQlpbGltID0gaWxpbTEgPSBpID0gbmRpZ2l0czsKKwkJCWJyZWFrOworCQljYXNlIDM6CisJCQlsZWZ0cmlnaHQgPSAwOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSA1OgorCQkJaSA9IG5kaWdpdHMgKyBrICsgMTsKKwkJCWlsaW0gPSBpOworCQkJaWxpbTEgPSBpIC0gMTsKKwkJCWlmIChpIDw9IDApCisJCQkJaSA9IDE7CisJCX0KKwlqID0gc2l6ZW9mKFVMb25nKTsKKyAgICAgICAgZm9yKHJlc3VsdF9rID0gMDsgKGludCkoc2l6ZW9mKEJpZ2ludCkgLSBzaXplb2YoVUxvbmcpKSArIGogPD0gaTsKKwkJaiA8PD0gMSkgcmVzdWx0X2srKzsKKyAgICAgICAgLy8gdGhpcyBpcyByZWFsbHkgYSB1Z2x5IGhhY2ssIHRoZSBjb2RlIHVzZXMgQmFsbG9jCisgICAgICAgIC8vIGluc3RlYWQgb2YgbWFsbG9jLCBidXQgY2FzdHMgdGhlIHJlc3VsdCBpbnRvIGEgY2hhcioKKyAgICAgICAgLy8gaXQgc2VlbXMgdGhlIG9ubHkgcmVhc29uIHRvIGRvIHRoYXQgaXMgZHVlIHRvIHRoZQorICAgICAgICAvLyBjb21wbGljYXRlZCB3YXkgdGhlIGJsb2NrIHNpemUgbmVlZCB0byBiZSBjb21wdXRlZAorICAgICAgICAvLyBidXV1cmsuLi4uCisJcmVzdWx0ID0gQmFsbG9jKHJlc3VsdF9rKTsKKwlzID0gczAgPSAoY2hhciAqKSh2b2lkICopcmVzdWx0OworCisJaWYgKGlsaW0gPj0gMCAmJiBpbGltIDw9IFF1aWNrX21heCAmJiB0cnlfcXVpY2spIHsKKworCQkvKiBUcnkgdG8gZ2V0IGJ5IHdpdGggZmxvYXRpbmctcG9pbnQgYXJpdGhtZXRpYy4gKi8KKworCQlpID0gMDsKKwkJdmFsdWUoZDIpID0gdmFsdWUoZCk7CisJCWswID0gazsKKwkJaWxpbTAgPSBpbGltOworCQlpZXBzID0gMjsgLyogY29uc2VydmF0aXZlICovCisJCWlmIChrID4gMCkgeworCQkJZHMgPSB0ZW5zW2smMHhmXTsKKwkJCWogPSAodW5zaWduZWQgaW50KWsgPj4gNDsKKwkJCWlmIChqICYgQmxldGNoKSB7CisJCQkJLyogcHJldmVudCBvdmVyZmxvd3MgKi8KKwkJCQlqICY9IEJsZXRjaCAtIDE7CisJCQkJdmFsdWUoZCkgLz0gYmlndGVuc1tuX2JpZ3RlbnMtMV07CisJCQkJaWVwcysrOworCQkJCX0KKwkJCWZvcig7IGo7IGogPSAodW5zaWduZWQgaW50KWogPj4gMSwgaSsrKQorCQkJCWlmIChqICYgMSkgeworCQkJCQlpZXBzKys7CisJCQkJCWRzICo9IGJpZ3RlbnNbaV07CisJCQkJCX0KKwkJCXZhbHVlKGQpIC89IGRzOworCQkJfQorCQllbHNlIGlmICgoamoxID0gLWspICE9IDApIHsKKwkJCXZhbHVlKGQpICo9IHRlbnNbamoxICYgMHhmXTsKKwkJCWZvcihqID0gKHVuc2lnbmVkIGludClqajEgPj4gNDsgajsKKwkJCSAgICBqID0gKHVuc2lnbmVkIGludClqID4+IDEsIGkrKykKKwkJCQlpZiAoaiAmIDEpIHsKKwkJCQkJaWVwcysrOworCQkJCQl2YWx1ZShkKSAqPSBiaWd0ZW5zW2ldOworCQkJCQl9CisJCQl9CisJCWlmIChrX2NoZWNrICYmIHZhbHVlKGQpIDwgMS4gJiYgaWxpbSA+IDApIHsKKwkJCWlmIChpbGltMSA8PSAwKQorCQkJCWdvdG8gZmFzdF9mYWlsZWQ7CisJCQlpbGltID0gaWxpbTE7CisJCQlrLS07CisJCQl2YWx1ZShkKSAqPSAxMC47CisJCQlpZXBzKys7CisJCQl9CisJCXZhbHVlKGVwcykgPSBpZXBzKnZhbHVlKGQpICsgNy47CisJCXdvcmQwKGVwcykgLT0gKFAtMSkqRXhwX21zazE7CisJCWlmIChpbGltID09IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJdmFsdWUoZCkgLT0gNS47CisJCQlpZiAodmFsdWUoZCkgPiB2YWx1ZShlcHMpKQorCQkJCWdvdG8gb25lX2RpZ2l0OworCQkJaWYgKHZhbHVlKGQpIDwgLXZhbHVlKGVwcykpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIGZhc3RfZmFpbGVkOworCQkJfQorI2lmbmRlZiBOb19sZWZ0cmlnaHQKKwkJaWYgKGxlZnRyaWdodCkgeworCQkJLyogVXNlIFN0ZWVsZSAmIFdoaXRlIG1ldGhvZCBvZiBvbmx5CisJCQkgKiBnZW5lcmF0aW5nIGRpZ2l0cyBuZWVkZWQuCisJCQkgKi8KKwkJCXZhbHVlKGVwcykgPSAwLjUvdGVuc1tpbGltLTFdIC0gdmFsdWUoZXBzKTsKKwkJCWZvcihpID0gMDs7KSB7CisJCQkJTCA9IHZhbHVlKGQpOworCQkJCXZhbHVlKGQpIC09IEw7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAodmFsdWUoZCkgPCB2YWx1ZShlcHMpKQorCQkJCQlnb3RvIHJldDE7CisJCQkJaWYgKDEuIC0gdmFsdWUoZCkgPCB2YWx1ZShlcHMpKQorCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJaWYgKCsraSA+PSBpbGltKQorCQkJCQlicmVhazsKKwkJCQl2YWx1ZShlcHMpICo9IDEwLjsKKwkJCQl2YWx1ZShkKSAqPSAxMC47CisJCQkJfQorCQkJfQorCQllbHNlIHsKKyNlbmRpZgorCQkJLyogR2VuZXJhdGUgaWxpbSBkaWdpdHMsIHRoZW4gZml4IHRoZW0gdXAuICovCisJCQl2YWx1ZShlcHMpICo9IHRlbnNbaWxpbS0xXTsKKwkJCWZvcihpID0gMTs7IGkrKywgdmFsdWUoZCkgKj0gMTAuKSB7CisJCQkJTCA9IHZhbHVlKGQpOworCQkJCXZhbHVlKGQpIC09IEw7CisJCQkJKnMrKyA9ICcwJyArIChpbnQpTDsKKwkJCQlpZiAoaSA9PSBpbGltKSB7CisJCQkJCWlmICh2YWx1ZShkKSA+IDAuNSArIHZhbHVlKGVwcykpCisJCQkJCQlnb3RvIGJ1bXBfdXA7CisJCQkJCWVsc2UgaWYgKHZhbHVlKGQpIDwgMC41IC0gdmFsdWUoZXBzKSkgeworCQkJCQkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQkJCQkJcysrOworCQkJCQkJZ290byByZXQxOworCQkJCQkJfQorCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0KKyNpZm5kZWYgTm9fbGVmdHJpZ2h0CisJCQl9CisjZW5kaWYKKyBmYXN0X2ZhaWxlZDoKKwkJcyA9IHMwOworCQl2YWx1ZShkKSA9IHZhbHVlKGQyKTsKKwkJayA9IGswOworCQlpbGltID0gaWxpbTA7CisJCX0KKworCS8qIERvIHdlIGhhdmUgYSAic21hbGwiIGludGVnZXI/ICovCisKKwlpZiAoYmUgPj0gMCAmJiBrIDw9IEludF9tYXgpIHsKKwkJLyogWWVzLiAqLworCQlkcyA9IHRlbnNba107CisJCWlmIChuZGlnaXRzIDwgMCAmJiBpbGltIDw9IDApIHsKKwkJCVMgPSBtaGkgPSAwOworCQkJaWYgKGlsaW0gPCAwIHx8IHZhbHVlKGQpIDw9IDUqZHMpCisJCQkJZ290byBub19kaWdpdHM7CisJCQlnb3RvIG9uZV9kaWdpdDsKKwkJCX0KKwkJZm9yKGkgPSAxOzsgaSsrKSB7CisJCQlMID0gdmFsdWUoZCkgLyBkczsKKwkJCXZhbHVlKGQpIC09IEwqZHM7CisjaWZkZWYgQ2hlY2tfRkxUX1JPVU5EUworCQkJLyogSWYgRkxUX1JPVU5EUyA9PSAyLCBMIHdpbGwgdXN1YWxseSBiZSBoaWdoIGJ5IDEgKi8KKwkJCWlmICh2YWx1ZShkKSA8IDApIHsKKwkJCQlMLS07CisJCQkJdmFsdWUoZCkgKz0gZHM7CisJCQkJfQorI2VuZGlmCisJCQkqcysrID0gJzAnICsgKGludClMOworCQkJaWYgKGkgPT0gaWxpbSkgeworCQkJCXZhbHVlKGQpICs9IHZhbHVlKGQpOworCQkJCWlmICh2YWx1ZShkKSA+IGRzIHx8ICh2YWx1ZShkKSA9PSBkcyAmJiBMICYgMSkpIHsKKyBidW1wX3VwOgorCQkJCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCQkJCWlmIChzID09IHMwKSB7CisJCQkJCQkJaysrOworCQkJCQkJCSpzID0gJzAnOworCQkJCQkJCWJyZWFrOworCQkJCQkJCX0KKwkJCQkJKysqcysrOworCQkJCQl9CisJCQkJYnJlYWs7CisJCQkJfQorCQkJaWYgKCEodmFsdWUoZCkgKj0gMTAuKSkKKwkJCQlicmVhazsKKwkJCX0KKwkJZ290byByZXQxOworCQl9CisKKwltMiA9IGIyOworCW01ID0gYjU7CisJbWhpID0gbWxvID0gMDsKKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtb2RlIDwgMikgeworCQkJaSA9CisjaWZuZGVmIFN1ZGRlbl9VbmRlcmZsb3cKKwkJCQlkZW5vcm0gPyBiZSArIChCaWFzICsgKFAtMSkgLSAxICsgMSkgOgorI2VuZGlmCisjaWZkZWYgSUJNCisJCQkJMSArIDQqUCAtIDMgLSBiYml0cyArICgoYmJpdHMgKyBiZSAtIDEpICYgMyk7CisjZWxzZQorCQkJCTEgKyBQIC0gYmJpdHM7CisjZW5kaWYKKwkJCX0KKwkJZWxzZSB7CisJCQlqID0gaWxpbSAtIDE7CisJCQlpZiAobTUgPj0gaikKKwkJCQltNSAtPSBqOworCQkJZWxzZSB7CisJCQkJczUgKz0gaiAtPSBtNTsKKwkJCQliNSArPSBqOworCQkJCW01ID0gMDsKKwkJCQl9CisJCQlpZiAoKGkgPSBpbGltKSA8IDApIHsKKwkJCQltMiAtPSBpOworCQkJCWkgPSAwOworCQkJCX0KKwkJCX0KKwkJYjIgKz0gaTsKKwkJczIgKz0gaTsKKwkJbWhpID0gaTJiKDEpOworCQl9CisJaWYgKG0yID4gMCAmJiBzMiA+IDApIHsKKwkJaSA9IG0yIDwgczIgPyBtMiA6IHMyOworCQliMiAtPSBpOworCQltMiAtPSBpOworCQlzMiAtPSBpOworCQl9CisJaWYgKGI1ID4gMCkgeworCQlpZiAobGVmdHJpZ2h0KSB7CisJCQlpZiAobTUgPiAwKSB7CisJCQkJbWhpID0gcG93NW11bHQobWhpLCBtNSk7CisJCQkJYjEgPSBtdWx0KG1oaSwgYik7CisJCQkJQmZyZWUoYik7CisJCQkJYiA9IGIxOworCQkJCX0KKwkJCWlmICgoaiA9IGI1IC0gbTUpICE9IDApCisJCQkJYiA9IHBvdzVtdWx0KGIsIGopOworCQkJfQorCQllbHNlCisJCQliID0gcG93NW11bHQoYiwgYjUpOworCQl9CisJUyA9IGkyYigxKTsKKwlpZiAoczUgPiAwKQorCQlTID0gcG93NW11bHQoUywgczUpOworCisJLyogQ2hlY2sgZm9yIHNwZWNpYWwgY2FzZSB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuICovCisKKwlpZiAobW9kZSA8IDIpIHsKKwkJaWYgKCF3b3JkMShkKSAmJiAhKHdvcmQwKGQpICYgQm5kcnlfbWFzaykKKyNpZm5kZWYgU3VkZGVuX1VuZGVyZmxvdworCQkgJiYgd29yZDAoZCkgJiBFeHBfbWFzaworI2VuZGlmCisJCQkJKSB7CisJCQkvKiBUaGUgc3BlY2lhbCBjYXNlICovCisJCQliMiArPSBMb2cyUDsKKwkJCXMyICs9IExvZzJQOworCQkJc3BlY19jYXNlID0gMTsKKwkJCX0KKwkJZWxzZQorCQkJc3BlY19jYXNlID0gMDsKKwkJfQorCisJLyogQXJyYW5nZSBmb3IgY29udmVuaWVudCBjb21wdXRhdGlvbiBvZiBxdW90aWVudHM6CisJICogc2hpZnQgbGVmdCBpZiBuZWNlc3Nhcnkgc28gZGl2aXNvciBoYXMgNCBsZWFkaW5nIDAgYml0cy4KKwkgKgorCSAqIFBlcmhhcHMgd2Ugc2hvdWxkIGp1c3QgY29tcHV0ZSBsZWFkaW5nIDI4IGJpdHMgb2YgUyBvbmNlCisJICogYW5kIGZvciBhbGwgYW5kIHBhc3MgdGhlbSBhbmQgYSBzaGlmdCB0byBxdW9yZW0sIHNvIGl0CisJICogY2FuIGRvIHNoaWZ0cyBhbmQgb3JzIHRvIGNvbXB1dGUgdGhlIG51bWVyYXRvciBmb3IgcS4KKwkgKi8KKyNpZmRlZiBQYWNrXzMyCisJaWYgKChpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4MWYpICE9IDApCisJCWkgPSAzMiAtIGk7CisjZWxzZQorCWlmIChpID0gKChzNSA/IDMyIC0gaGkwYml0cyhTLT54W1MtPndkcy0xXSkgOiAxKSArIHMyKSAmIDB4ZikKKwkJaSA9IDE2IC0gaTsKKyNlbmRpZgorCWlmIChpID4gNCkgeworCQlpIC09IDQ7CisJCWIyICs9IGk7CisJCW0yICs9IGk7CisJCXMyICs9IGk7CisJCX0KKwllbHNlIGlmIChpIDwgNCkgeworCQlpICs9IDI4OworCQliMiArPSBpOworCQltMiArPSBpOworCQlzMiArPSBpOworCQl9CisJaWYgKGIyID4gMCkKKwkJYiA9IGxzaGlmdChiLCBiMik7CisJaWYgKHMyID4gMCkKKwkJUyA9IGxzaGlmdChTLCBzMik7CisJaWYgKGtfY2hlY2spIHsKKwkJaWYgKGNtcChiLFMpIDwgMCkgeworCQkJay0tOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOwkvKiB3ZSBib3RjaGVkIHRoZSBrIGVzdGltYXRlICovCisJCQlpZiAobGVmdHJpZ2h0KQorCQkJCW1oaSA9IG11bHRhZGQobWhpLCAxMCwgMCk7CisJCQlpbGltID0gaWxpbTE7CisJCQl9CisJCX0KKwlpZiAoaWxpbSA8PSAwICYmIG1vZGUgPiAyKSB7CisJCWlmIChpbGltIDwgMCB8fCBjbXAoYixTID0gbXVsdGFkZChTLDUsMCkpIDw9IDApIHsKKwkJCS8qIG5vIGRpZ2l0cywgZmN2dCBzdHlsZSAqLworIG5vX2RpZ2l0czoKKwkJCWsgPSAtMSAtIG5kaWdpdHM7CisJCQlnb3RvIHJldDsKKwkJCX0KKyBvbmVfZGlnaXQ6CisJCSpzKysgPSAnMSc7CisJCWsrKzsKKwkJZ290byByZXQ7CisJCX0KKwlpZiAobGVmdHJpZ2h0KSB7CisJCWlmIChtMiA+IDApCisJCQltaGkgPSBsc2hpZnQobWhpLCBtMik7CisKKwkJLyogQ29tcHV0ZSBtbG8gLS0gY2hlY2sgZm9yIHNwZWNpYWwgY2FzZQorCQkgKiB0aGF0IGQgaXMgYSBub3JtYWxpemVkIHBvd2VyIG9mIDIuCisJCSAqLworCisJCW1sbyA9IG1oaTsKKwkJaWYgKHNwZWNfY2FzZSkgeworCQkJbWhpID0gQmFsbG9jKG1oaS0+ayk7CisJCQlCY29weShtaGksIG1sbyk7CisJCQltaGkgPSBsc2hpZnQobWhpLCBMb2cyUCk7CisJCQl9CisKKwkJZm9yKGkgPSAxOztpKyspIHsKKwkJCWRpZyA9IHF1b3JlbShiLFMpICsgJzAnOworCQkJLyogRG8gd2UgeWV0IGhhdmUgdGhlIHNob3J0ZXN0IGRlY2ltYWwgc3RyaW5nCisJCQkgKiB0aGF0IHdpbGwgcm91bmQgdG8gZD8KKwkJCSAqLworCQkJaiA9IGNtcChiLCBtbG8pOworCQkJZGVsdGEgPSBkaWZmKFMsIG1oaSk7CisJCQlqajEgPSBkZWx0YS0+c2lnbiA/IDEgOiBjbXAoYiwgZGVsdGEpOworCQkJQmZyZWUoZGVsdGEpOworI2lmbmRlZiBST1VORF9CSUFTRUQKKwkJCWlmIChqajEgPT0gMCAmJiAhbW9kZSAmJiAhKHdvcmQxKGQpICYgMSkpIHsKKwkJCQlpZiAoZGlnID09ICc5JykKKwkJCQkJZ290byByb3VuZF85X3VwOworCQkJCWlmIChqID4gMCkKKwkJCQkJZGlnKys7CisJCQkJKnMrKyA9IGRpZzsKKwkJCQlnb3RvIHJldDsKKwkJCQl9CisjZW5kaWYKKwkJCWlmIChqIDwgMCB8fCAoaiA9PSAwICYmICFtb2RlCisjaWZuZGVmIFJPVU5EX0JJQVNFRAorCQkJCQkJCSYmICEod29yZDEoZCkgJiAxKQorI2VuZGlmCisJCQkJCSkpIHsKKwkJCQlpZiAoamoxID4gMCkgeworCQkJCQliID0gbHNoaWZ0KGIsIDEpOworCQkJCQlqajEgPSBjbXAoYiwgUyk7CisJCQkJCWlmICgoamoxID4gMCB8fCAoamoxID09IDAgJiYgZGlnICYgMSkpCisJCQkJCSYmIGRpZysrID09ICc5JykKKwkJCQkJCWdvdG8gcm91bmRfOV91cDsKKwkJCQkJfQorCQkJCSpzKysgPSBkaWc7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJaWYgKGpqMSA+IDApIHsKKwkJCQlpZiAoZGlnID09ICc5JykgeyAvKiBwb3NzaWJsZSBpZiBpID09IDEgKi8KKyByb3VuZF85X3VwOgorCQkJCQkqcysrID0gJzknOworCQkJCQlnb3RvIHJvdW5kb2ZmOworCQkJCQl9CisJCQkJKnMrKyA9IGRpZyArIDE7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkJKnMrKyA9IGRpZzsKKwkJCWlmIChpID09IGlsaW0pCisJCQkJYnJlYWs7CisJCQliID0gbXVsdGFkZChiLCAxMCwgMCk7CisJCQlpZiAobWxvID09IG1oaSkKKwkJCQltbG8gPSBtaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJZWxzZSB7CisJCQkJbWxvID0gbXVsdGFkZChtbG8sIDEwLCAwKTsKKwkJCQltaGkgPSBtdWx0YWRkKG1oaSwgMTAsIDApOworCQkJCX0KKwkJCX0KKwkJfQorCWVsc2UKKwkJZm9yKGkgPSAxOzsgaSsrKSB7CisJCQkqcysrID0gZGlnID0gcXVvcmVtKGIsUykgKyAnMCc7CisJCQlpZiAoaSA+PSBpbGltKQorCQkJCWJyZWFrOworCQkJYiA9IG11bHRhZGQoYiwgMTAsIDApOworCQkJfQorCisJLyogUm91bmQgb2ZmIGxhc3QgZGlnaXQgKi8KKworCWIgPSBsc2hpZnQoYiwgMSk7CisJaiA9IGNtcChiLCBTKTsKKwlpZiAoaiA+IDAgfHwgKGogPT0gMCAmJiBkaWcgJiAxKSkgeworIHJvdW5kb2ZmOgorCQl3aGlsZSgqLS1zID09ICc5JykKKwkJCWlmIChzID09IHMwKSB7CisJCQkJaysrOworCQkJCSpzKysgPSAnMSc7CisJCQkJZ290byByZXQ7CisJCQkJfQorCQkrKypzKys7CisJCX0KKwllbHNlIHsKKwkJd2hpbGUoKi0tcyA9PSAnMCcpOworCQlzKys7CisJCX0KKyByZXQ6CisJQmZyZWUoUyk7CisJaWYgKG1oaSkgeworCQlpZiAobWxvICYmIG1sbyAhPSBtaGkpCisJCQlCZnJlZShtbG8pOworCQlCZnJlZShtaGkpOworCQl9CisgcmV0MToKKwlCZnJlZShiKTsKKwlpZiAocyA9PSBzMCkgewkJCQkvKiBkb24ndCByZXR1cm4gZW1wdHkgc3RyaW5nICovCisJCSpzKysgPSAnMCc7CisJCWsgPSAwOworCX0KKwkqcyA9IDA7CisJKmRlY3B0ID0gayArIDE7CisJaWYgKHJ2ZSkKKwkJKnJ2ZSA9IHM7CisJcmV0dXJuIHMwOworCX0KKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYyBiL2xpYmMvc3RkbGliL3N0cnRvaW1heC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NDJlYjkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zdHJ0b2ltYXguYwpAQCAtMCwwICsxLDE3MSBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvaW1heC5jLHYgMS4xIDIwMDYvMDEvMTMgMTc6NTg6MDkgbWlsbGVydCBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxpbnR0eXBlcy5oPgorCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhbiBpbnRtYXhfdAorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCitpbnRtYXhfdAorc3RydG9pbWF4KGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJaW50bWF4X3QgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNraXAgd2hpdGUgc3BhY2UgYW5kIHBpY2sgdXAgbGVhZGluZyArLy0gc2lnbiBpZiBhbnkuCisJICogSWYgYmFzZSBpcyAwLCBhbGxvdyAweCBmb3IgaGV4IGFuZCAwIGZvciBvY3RhbCwgZWxzZQorCSAqIGFzc3VtZSBkZWNpbWFsOyBpZiBiYXNlIGlzIGFscmVhZHkgMTYsIGFsbG93IDB4LgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJLyoKKwkgKiBDb21wdXRlIHRoZSBjdXRvZmYgdmFsdWUgYmV0d2VlbiBsZWdhbCBudW1iZXJzIGFuZCBpbGxlZ2FsCisJICogbnVtYmVycy4gIFRoYXQgaXMgdGhlIGxhcmdlc3QgbGVnYWwgdmFsdWUsIGRpdmlkZWQgYnkgdGhlCisJICogYmFzZS4gIEFuIGlucHV0IG51bWJlciB0aGF0IGlzIGdyZWF0ZXIgdGhhbiB0aGlzIHZhbHVlLCBpZgorCSAqIGZvbGxvd2VkIGJ5IGEgbGVnYWwgaW5wdXQgY2hhcmFjdGVyLCBpcyB0b28gYmlnLiAgT25lIHRoYXQKKwkgKiBpcyBlcXVhbCB0byB0aGlzIHZhbHVlIG1heSBiZSB2YWxpZCBvciBub3Q7IHRoZSBsaW1pdAorCSAqIGJldHdlZW4gdmFsaWQgYW5kIGludmFsaWQgbnVtYmVycyBpcyB0aGVuIGJhc2VkIG9uIHRoZSBsYXN0CisJICogZGlnaXQuICBGb3IgaW5zdGFuY2UsIGlmIHRoZSByYW5nZSBmb3IgaW50bWF4X3QgaXMKKwkgKiBbLTkyMjMzNzIwMzY4NTQ3NzU4MDguLjkyMjMzNzIwMzY4NTQ3NzU4MDddIGFuZCB0aGUgaW5wdXQgYmFzZQorCSAqIGlzIDEwLCBjdXRvZmYgd2lsbCBiZSBzZXQgdG8gOTIyMzM3MjAzNjg1NDc3NTgwIGFuZCBjdXRsaW0gdG8KKwkgKiBlaXRoZXIgNyAobmVnPT0wKSBvciA4IChuZWc9PTEpLCBtZWFuaW5nIHRoYXQgaWYgd2UgaGF2ZQorCSAqIGFjY3VtdWxhdGVkIGEgdmFsdWUgPiA5MjIzMzcyMDM2ODU0Nzc1ODAsIG9yIGVxdWFsIGJ1dCB0aGUKKwkgKiBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksIHRoZSBudW1iZXIgaXMgdG9vIGJpZywgYW5kIHdlIHdpbGwKKwkgKiByZXR1cm4gYSByYW5nZSBlcnJvci4KKwkgKgorCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCisJICogb3ZlcmZsb3cuCisJICovCisKKwkvKiBCSU9OSUM6IGF2b2lkIGRpdmlzaW9uIGFuZCBtb2R1bGUgZm9yIGNvbW1vbiBjYXNlcyAqLworI2RlZmluZSAgQ0FTRV9CQVNFKHgpIFwKKyAgICAgICAgICAgIGNhc2UgeDogIFwKKwkgICAgICAgIGlmIChuZWcpIHsgXAorICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSBJTlRNQVhfTUlOICUgeDsgXAorCQkgICAgY3V0b2ZmID0gSU5UTUFYX01JTiAvIHg7IFwKKwkgICAgICAgIH0gZWxzZSB7IFwKKwkJICAgIGN1dGxpbSA9IElOVE1BWF9NQVggJSB4OyBcCisJCSAgICBjdXRvZmYgPSBJTlRNQVhfTUFYIC8geDsgXAorCQkgfTsgXAorCQkgYnJlYWsKKwkJIAorCXN3aXRjaCAoYmFzZSkgeworICAgICAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgICAgIGlmIChuZWcpIHsKKyAgICAgICAgICAgICAgICAgICAgY3V0bGltID0gKGludCkoSU5UTUFYX01JTiAlIDQpOworICAgICAgICAgICAgICAgICAgICBjdXRvZmYgPSBJTlRNQVhfTUlOIC8gNDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBjdXRsaW0gPSAoaW50KShJTlRNQVhfTUFYICUgNCk7CisgICAgICAgICAgICAgICAgICAgIGN1dG9mZiA9IElOVE1BWF9NQVggLyA0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworCSAgICBDQVNFX0JBU0UoOCk7CisJICAgIENBU0VfQkFTRSgxMCk7CisJICAgIENBU0VfQkFTRSgxNik7CisJICAgIGRlZmF1bHQ6ICAKKwkgICAgICAgICAgICAgIGN1dG9mZiAgPSBuZWcgPyBJTlRNQVhfTUlOIDogSU5UTUFYX01BWDsKKwkJICAgICAgY3V0bGltICA9IGN1dG9mZiAlIGJhc2U7CisJICAgICAgICAgICAgICBjdXRvZmYgLz0gYmFzZTsKKwl9CisjdW5kZWYgQ0FTRV9CQVNFCisJCisJaWYgKG5lZykgeworCQlpZiAoY3V0bGltID4gMCkgeworCQkJY3V0bGltIC09IGJhc2U7CisJCQljdXRvZmYgKz0gMTsKKwkJfQorCQljdXRsaW0gPSAtY3V0bGltOworCX0KKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChuZWcpIHsKKwkJCWlmIChhY2MgPCBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCQlhbnkgPSAtMTsKKwkJCQlhY2MgPSBJTlRNQVhfTUlOOworCQkJCWVycm5vID0gRVJBTkdFOworCQkJfSBlbHNlIHsKKwkJCQlhbnkgPSAxOworCQkJCWFjYyAqPSBiYXNlOworCQkJCWFjYyAtPSBjOworCQkJfQorCQl9IGVsc2UgeworCQkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJCWFueSA9IC0xOworCQkJCWFjYyA9IElOVE1BWF9NQVg7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjICs9IGM7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9sLmMgYi9saWJjL3N0ZGxpYi9zdHJ0b2wuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hM2NkYmNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RydG9sLmMKQEAgLTAsMCArMSwxNDAgQEAKKy8qCSRPcGVuQlNEOiBzdHJ0b2wuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworCisvKgorICogQ29udmVydCBhIHN0cmluZyB0byBhIGxvbmcgaW50ZWdlci4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLworbG9uZworc3RydG9sKGNvbnN0IGNoYXIgKm5wdHIsIGNoYXIgKiplbmRwdHIsIGludCBiYXNlKQoreworCWNvbnN0IGNoYXIgKnM7CisJbG9uZyBhY2MsIGN1dG9mZjsKKwlpbnQgYzsKKwlpbnQgbmVnLCBhbnksIGN1dGxpbTsKKworCS8qCisJICogU2tpcCB3aGl0ZSBzcGFjZSBhbmQgcGljayB1cCBsZWFkaW5nICsvLSBzaWduIGlmIGFueS4KKwkgKiBJZiBiYXNlIGlzIDAsIGFsbG93IDB4IGZvciBoZXggYW5kIDAgZm9yIG9jdGFsLCBlbHNlCisJICogYXNzdW1lIGRlY2ltYWw7IGlmIGJhc2UgaXMgYWxyZWFkeSAxNiwgYWxsb3cgMHguCisJICovCisJcyA9IG5wdHI7CisJZG8geworCQljID0gKHVuc2lnbmVkIGNoYXIpICpzKys7CisJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJaWYgKGMgPT0gJy0nKSB7CisJCW5lZyA9IDE7CisJCWMgPSAqcysrOworCX0gZWxzZSB7CisJCW5lZyA9IDA7CisJCWlmIChjID09ICcrJykKKwkJCWMgPSAqcysrOworCX0KKwlpZiAoKGJhc2UgPT0gMCB8fCBiYXNlID09IDE2KSAmJgorCSAgICBjID09ICcwJyAmJiAoKnMgPT0gJ3gnIHx8ICpzID09ICdYJykpIHsKKwkJYyA9IHNbMV07CisJCXMgKz0gMjsKKwkJYmFzZSA9IDE2OworCX0KKwlpZiAoYmFzZSA9PSAwKQorCQliYXNlID0gYyA9PSAnMCcgPyA4IDogMTA7CisKKwkvKgorCSAqIENvbXB1dGUgdGhlIGN1dG9mZiB2YWx1ZSBiZXR3ZWVuIGxlZ2FsIG51bWJlcnMgYW5kIGlsbGVnYWwKKwkgKiBudW1iZXJzLiAgVGhhdCBpcyB0aGUgbGFyZ2VzdCBsZWdhbCB2YWx1ZSwgZGl2aWRlZCBieSB0aGUKKwkgKiBiYXNlLiAgQW4gaW5wdXQgbnVtYmVyIHRoYXQgaXMgZ3JlYXRlciB0aGFuIHRoaXMgdmFsdWUsIGlmCisJICogZm9sbG93ZWQgYnkgYSBsZWdhbCBpbnB1dCBjaGFyYWN0ZXIsIGlzIHRvbyBiaWcuICBPbmUgdGhhdAorCSAqIGlzIGVxdWFsIHRvIHRoaXMgdmFsdWUgbWF5IGJlIHZhbGlkIG9yIG5vdDsgdGhlIGxpbWl0CisJICogYmV0d2VlbiB2YWxpZCBhbmQgaW52YWxpZCBudW1iZXJzIGlzIHRoZW4gYmFzZWQgb24gdGhlIGxhc3QKKwkgKiBkaWdpdC4gIEZvciBpbnN0YW5jZSwgaWYgdGhlIHJhbmdlIGZvciBsb25ncyBpcworCSAqIFstMjE0NzQ4MzY0OC4uMjE0NzQ4MzY0N10gYW5kIHRoZSBpbnB1dCBiYXNlIGlzIDEwLAorCSAqIGN1dG9mZiB3aWxsIGJlIHNldCB0byAyMTQ3NDgzNjQgYW5kIGN1dGxpbSB0byBlaXRoZXIKKwkgKiA3IChuZWc9PTApIG9yIDggKG5lZz09MSksIG1lYW5pbmcgdGhhdCBpZiB3ZSBoYXZlIGFjY3VtdWxhdGVkCisJICogYSB2YWx1ZSA+IDIxNDc0ODM2NCwgb3IgZXF1YWwgYnV0IHRoZSBuZXh0IGRpZ2l0IGlzID4gNyAob3IgOCksCisJICogdGhlIG51bWJlciBpcyB0b28gYmlnLCBhbmQgd2Ugd2lsbCByZXR1cm4gYSByYW5nZSBlcnJvci4KKwkgKgorCSAqIFNldCBhbnkgaWYgYW55IGBkaWdpdHMnIGNvbnN1bWVkOyBtYWtlIGl0IG5lZ2F0aXZlIHRvIGluZGljYXRlCisJICogb3ZlcmZsb3cuCisJICovCisJY3V0b2ZmID0gbmVnID8gTE9OR19NSU4gOiBMT05HX01BWDsKKwljdXRsaW0gPSBjdXRvZmYgJSBiYXNlOworCWN1dG9mZiAvPSBiYXNlOworCWlmIChuZWcpIHsKKwkJaWYgKGN1dGxpbSA+IDApIHsKKwkJCWN1dGxpbSAtPSBiYXNlOworCQkJY3V0b2ZmICs9IDE7CisJCX0KKwkJY3V0bGltID0gLWN1dGxpbTsKKwl9CisJZm9yIChhY2MgPSAwLCBhbnkgPSAwOzsgYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrKSB7CisJCWlmIChpc2RpZ2l0KGMpKQorCQkJYyAtPSAnMCc7CisJCWVsc2UgaWYgKGlzYWxwaGEoYykpCisJCQljIC09IGlzdXBwZXIoYykgPyAnQScgLSAxMCA6ICdhJyAtIDEwOworCQllbHNlCisJCQlicmVhazsKKwkJaWYgKGMgPj0gYmFzZSkKKwkJCWJyZWFrOworCQlpZiAoYW55IDwgMCkKKwkJCWNvbnRpbnVlOworCQlpZiAobmVnKSB7CisJCQlpZiAoYWNjIDwgY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gTE9OR19NSU47CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjIC09IGM7CisJCQl9CisJCX0gZWxzZSB7CisJCQlpZiAoYWNjID4gY3V0b2ZmIHx8IChhY2MgPT0gY3V0b2ZmICYmIGMgPiBjdXRsaW0pKSB7CisJCQkJYW55ID0gLTE7CisJCQkJYWNjID0gTE9OR19NQVg7CisJCQkJZXJybm8gPSBFUkFOR0U7CisJCQl9IGVsc2UgeworCQkJCWFueSA9IDE7CisJCQkJYWNjICo9IGJhc2U7CisJCQkJYWNjICs9IGM7CisJCQl9CisJCX0KKwl9CisJaWYgKGVuZHB0ciAhPSAwKQorCQkqZW5kcHRyID0gKGNoYXIgKikgKGFueSA/IHMgLSAxIDogbnB0cik7CisJcmV0dXJuIChhY2MpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvc3RydG9sbC5jIGIvbGliYy9zdGRsaWIvc3RydG9sbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjNzUyNzEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi9zdHJ0b2xsLmMKQEAgLTAsMCArMSw1MCBAQAorLyogJE9wZW5CU0Q6IHN0cnRvbGwuYyx2IDEuNiAyMDA1LzExLzEwIDEwOjAwOjE3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgbG9uZyBsb25nLgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCitsb25nIGxvbmcKK3N0cnRvbGwoY29uc3QgY2hhciAqbnB0ciwgY2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisgICAgcmV0dXJuIHN0cnRvaW1heChucHRyLCBlbmRwdHIsIGJhc2UpOworfQorCmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMgYi9saWJjL3N0ZGxpYi9zdHJ0b3VsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjFkYmI2ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cnRvdWwuYwpAQCAtMCwwICsxLDEwMiBAQAorLyoJJE9wZW5CU0Q6IHN0cnRvdWwuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTkwIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgaW50ZWdlci4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLwordW5zaWduZWQgbG9uZworc3RydG91bChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCXVuc2lnbmVkIGxvbmcgYWNjLCBjdXRvZmY7CisJaW50IGM7CisJaW50IG5lZywgYW55LCBjdXRsaW07CisKKwkvKgorCSAqIFNlZSBzdHJ0b2wgZm9yIGNvbW1lbnRzIGFzIHRvIHRoZSBsb2dpYyB1c2VkLgorCSAqLworCXMgPSBucHRyOworCWRvIHsKKwkJYyA9ICh1bnNpZ25lZCBjaGFyKSAqcysrOworCX0gd2hpbGUgKGlzc3BhY2UoYykpOworCWlmIChjID09ICctJykgeworCQluZWcgPSAxOworCQljID0gKnMrKzsKKwl9IGVsc2UgeworCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisJY3V0b2ZmID0gVUxPTkdfTUFYIC8gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwljdXRsaW0gPSBVTE9OR19NQVggJSAodW5zaWduZWQgbG9uZyliYXNlOworCWZvciAoYWNjID0gMCwgYW55ID0gMDs7IGMgPSAodW5zaWduZWQgY2hhcikgKnMrKykgeworCQlpZiAoaXNkaWdpdChjKSkKKwkJCWMgLT0gJzAnOworCQllbHNlIGlmIChpc2FscGhhKGMpKQorCQkJYyAtPSBpc3VwcGVyKGMpID8gJ0EnIC0gMTAgOiAnYScgLSAxMDsKKwkJZWxzZQorCQkJYnJlYWs7CisJCWlmIChjID49IGJhc2UpCisJCQlicmVhazsKKwkJaWYgKGFueSA8IDApCisJCQljb250aW51ZTsKKwkJaWYgKGFjYyA+IGN1dG9mZiB8fCAoYWNjID09IGN1dG9mZiAmJiBjID4gY3V0bGltKSkgeworCQkJYW55ID0gLTE7CisJCQlhY2MgPSBVTE9OR19NQVg7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFueSA9IDE7CisJCQlhY2MgKj0gKHVuc2lnbmVkIGxvbmcpYmFzZTsKKwkJCWFjYyArPSBjOworCQl9CisJfQorCWlmIChuZWcgJiYgYW55ID4gMCkKKwkJYWNjID0gLWFjYzsKKwlpZiAoZW5kcHRyICE9IDApCisJCSplbmRwdHIgPSAoY2hhciAqKSAoYW55ID8gcyAtIDEgOiBucHRyKTsKKwlyZXR1cm4gKGFjYyk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi9zdHJ0b3VsbC5jIGIvbGliYy9zdGRsaWIvc3RydG91bGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNjY5OGFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvc3RydG91bGwuYwpAQCAtMCwwICsxLDQ5IEBACisvKgkkT3BlbkJTRDogc3RydG91bGwuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MiBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGxpbWl0cy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIHVuc2lnbmVkIGxvbmcgbG9uZy4KKyAqCisgKiBJZ25vcmVzIGBsb2NhbGUnIHN0dWZmLiAgQXNzdW1lcyB0aGF0IHRoZSB1cHBlciBhbmQgbG93ZXIgY2FzZQorICogYWxwaGFiZXRzIGFuZCBkaWdpdHMgYXJlIGVhY2ggY29udGlndW91cy4KKyAqLwordW5zaWduZWQgbG9uZyBsb25nCitzdHJ0b3VsbChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKyAgICByZXR1cm4gKHVuc2lnbmVkIGxvbmcgbG9uZylzdHJ0b3VtYXgobnB0ciwgZW5kcHRyLCBiYXNlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jIGIvbGliYy9zdGRsaWIvc3RydG91bWF4LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWM0NTM3NwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3N0cnRvdW1heC5jCkBAIC0wLDAgKzEsMTE1IEBACisvKgkkT3BlbkJTRDogc3RydG91bWF4LmMsdiAxLjEgMjAwNi8wMS8xMyAxNzo1ODowOSBtaWxsZXJ0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkyIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGludHR5cGVzLmg+CisKKy8qCisgKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGEgdWludG1heF90LgorICoKKyAqIElnbm9yZXMgYGxvY2FsZScgc3R1ZmYuICBBc3N1bWVzIHRoYXQgdGhlIHVwcGVyIGFuZCBsb3dlciBjYXNlCisgKiBhbHBoYWJldHMgYW5kIGRpZ2l0cyBhcmUgZWFjaCBjb250aWd1b3VzLgorICovCit1aW50bWF4X3QKK3N0cnRvdW1heChjb25zdCBjaGFyICpucHRyLCBjaGFyICoqZW5kcHRyLCBpbnQgYmFzZSkKK3sKKwljb25zdCBjaGFyICpzOworCXVpbnRtYXhfdCBhY2MsIGN1dG9mZjsKKwlpbnQgYzsKKwlpbnQgbmVnLCBhbnksIGN1dGxpbTsKKworCS8qCisJICogU2VlIHN0cnRvcSBmb3IgY29tbWVudHMgYXMgdG8gdGhlIGxvZ2ljIHVzZWQuCisJICovCisJcyA9IG5wdHI7CisJZG8geworCQljID0gKHVuc2lnbmVkIGNoYXIpICpzKys7CisJfSB3aGlsZSAoaXNzcGFjZShjKSk7CisJaWYgKGMgPT0gJy0nKSB7CisJCW5lZyA9IDE7CisJCWMgPSAqcysrOworCX0gZWxzZSB7IAorCQluZWcgPSAwOworCQlpZiAoYyA9PSAnKycpCisJCQljID0gKnMrKzsKKwl9CisJaWYgKChiYXNlID09IDAgfHwgYmFzZSA9PSAxNikgJiYKKwkgICAgYyA9PSAnMCcgJiYgKCpzID09ICd4JyB8fCAqcyA9PSAnWCcpKSB7CisJCWMgPSBzWzFdOworCQlzICs9IDI7CisJCWJhc2UgPSAxNjsKKwl9CisJaWYgKGJhc2UgPT0gMCkKKwkJYmFzZSA9IGMgPT0gJzAnID8gOCA6IDEwOworCisgICAgICAgIC8qIEJJT05JQzogYXZvaWQgZGl2aXNpb24gYW5kIG1vZHVsbyBmb3IgY29tbW9uIGNhc2VzICovCisjZGVmaW5lICBDQVNFX0JBU0UoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgY2FzZSB4OiBjdXRvZmYgPSBVSU5UTUFYX01BWCAvIHg7ICAgIFwKKwkgICAgICAgICAgICBjdXRsaW0gPSBVSU5UTUFYX01BWCAlIHg7ICAgIFwKKwkJICAgIGJyZWFrCisJCSAgICAJCisgICAgICAgIHN3aXRjaCAoYmFzZSkgeworICAgICAgICBDQVNFX0JBU0UoOCk7CisJQ0FTRV9CQVNFKDEwKTsKKwlDQVNFX0JBU0UoMTYpOworCWRlZmF1bHQ6CisJICAgIGN1dG9mZiA9IFVJTlRNQVhfTUFYIC8gYmFzZTsKKwkgICAgY3V0bGltID0gVUlOVE1BWF9NQVggJSBiYXNlOworCX0KKwkKKwlmb3IgKGFjYyA9IDAsIGFueSA9IDA7OyBjID0gKHVuc2lnbmVkIGNoYXIpICpzKyspIHsKKwkJaWYgKGlzZGlnaXQoYykpCisJCQljIC09ICcwJzsKKwkJZWxzZSBpZiAoaXNhbHBoYShjKSkKKwkJCWMgLT0gaXN1cHBlcihjKSA/ICdBJyAtIDEwIDogJ2EnIC0gMTA7CisJCWVsc2UKKwkJCWJyZWFrOworCQlpZiAoYyA+PSBiYXNlKQorCQkJYnJlYWs7CisJCWlmIChhbnkgPCAwKQorCQkJY29udGludWU7CisJCWlmIChhY2MgPiBjdXRvZmYgfHwgKGFjYyA9PSBjdXRvZmYgJiYgYyA+IGN1dGxpbSkpIHsKKwkJCWFueSA9IC0xOworCQkJYWNjID0gVUlOVE1BWF9NQVg7CisJCQllcnJubyA9IEVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCWFueSA9IDE7CisJCQlhY2MgKj0gKHVpbnRtYXhfdCliYXNlOworCQkJYWNjICs9IGM7CisJCX0KKwl9CisJaWYgKG5lZyAmJiBhbnkgPiAwKQorCQlhY2MgPSAtYWNjOworCWlmIChlbmRwdHIgIT0gMCkKKwkJKmVuZHB0ciA9IChjaGFyICopIChhbnkgPyBzIC0gMSA6IG5wdHIpOworCXJldHVybiAoYWNjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RkbGliL3RvbG93ZXJfLmMgYi9saWJjL3N0ZGxpYi90b2xvd2VyXy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjUwZGNjN2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0ZGxpYi90b2xvd2VyXy5jCkBAIC0wLDAgKzEsNTcgQEAKKy8qCSRPcGVuQlNEOiB0b2xvd2VyXy5jLHYgMS45IDIwMDUvMDgvMDggMDg6MDU6MzQgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjZGVmaW5lIF9BTlNJX0xJQlJBUlkKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSAiY3R5cGVfcHJpdmF0ZS5oIgorCitjb25zdCBzaG9ydCBfQ190b2xvd2VyX1sxICsgQ1RZUEVfTlVNX0NIQVJTXSA9IHsKKwlFT0YsCisJMHgwMCwJMHgwMSwJMHgwMiwJMHgwMywJMHgwNCwJMHgwNSwJMHgwNiwJMHgwNywKKwkweDA4LAkweDA5LAkweDBhLAkweDBiLAkweDBjLAkweDBkLAkweDBlLAkweDBmLAorCTB4MTAsCTB4MTEsCTB4MTIsCTB4MTMsCTB4MTQsCTB4MTUsCTB4MTYsCTB4MTcsCisJMHgxOCwJMHgxOSwJMHgxYSwJMHgxYiwJMHgxYywJMHgxZCwJMHgxZSwJMHgxZiwKKwkweDIwLAkweDIxLAkweDIyLAkweDIzLAkweDI0LAkweDI1LAkweDI2LAkweDI3LAorCTB4MjgsCTB4MjksCTB4MmEsCTB4MmIsCTB4MmMsCTB4MmQsCTB4MmUsCTB4MmYsCisJMHgzMCwJMHgzMSwJMHgzMiwJMHgzMywJMHgzNCwJMHgzNSwJMHgzNiwJMHgzNywKKwkweDM4LAkweDM5LAkweDNhLAkweDNiLAkweDNjLAkweDNkLAkweDNlLAkweDNmLAorCTB4NDAsCSdhJywJJ2InLAknYycsCSdkJywJJ2UnLAknZicsCSdnJywKKwknaCcsCSdpJywJJ2onLAknaycsCSdsJywJJ20nLAknbicsCSdvJywKKwkncCcsCSdxJywJJ3InLAkncycsCSd0JywJJ3UnLAkndicsCSd3JywKKwkneCcsCSd5JywJJ3onLAkweDViLAkweDVjLAkweDVkLAkweDVlLAkweDVmLAorCTB4NjAsCTB4NjEsCTB4NjIsCTB4NjMsCTB4NjQsCTB4NjUsCTB4NjYsCTB4NjcsCisJMHg2OCwJMHg2OSwJMHg2YSwJMHg2YiwJMHg2YywJMHg2ZCwJMHg2ZSwJMHg2ZiwKKwkweDcwLAkweDcxLAkweDcyLAkweDczLAkweDc0LAkweDc1LAkweDc2LAkweDc3LAorCTB4NzgsCTB4NzksCTB4N2EsCTB4N2IsCTB4N2MsCTB4N2QsCTB4N2UsCTB4N2YsCisJMHg4MCwJMHg4MSwJMHg4MiwJMHg4MywJMHg4NCwJMHg4NSwJMHg4NiwJMHg4NywKKwkweDg4LAkweDg5LAkweDhhLAkweDhiLAkweDhjLAkweDhkLAkweDhlLAkweDhmLAorCTB4OTAsCTB4OTEsCTB4OTIsCTB4OTMsCTB4OTQsCTB4OTUsCTB4OTYsCTB4OTcsCisJMHg5OCwJMHg5OSwJMHg5YSwJMHg5YiwJMHg5YywJMHg5ZCwJMHg5ZSwJMHg5ZiwKKwkweGEwLAkweGExLAkweGEyLAkweGEzLAkweGE0LAkweGE1LAkweGE2LAkweGE3LAorCTB4YTgsCTB4YTksCTB4YWEsCTB4YWIsCTB4YWMsCTB4YWQsCTB4YWUsCTB4YWYsCisJMHhiMCwJMHhiMSwJMHhiMiwJMHhiMywJMHhiNCwJMHhiNSwJMHhiNiwJMHhiNywKKwkweGI4LAkweGI5LAkweGJhLAkweGJiLAkweGJjLAkweGJkLAkweGJlLAkweGJmLAorCTB4YzAsCTB4YzEsCTB4YzIsCTB4YzMsCTB4YzQsCTB4YzUsCTB4YzYsCTB4YzcsCisJMHhjOCwJMHhjOSwJMHhjYSwJMHhjYiwJMHhjYywJMHhjZCwJMHhjZSwJMHhjZiwKKwkweGQwLAkweGQxLAkweGQyLAkweGQzLAkweGQ0LAkweGQ1LAkweGQ2LAkweGQ3LAorCTB4ZDgsCTB4ZDksCTB4ZGEsCTB4ZGIsCTB4ZGMsCTB4ZGQsCTB4ZGUsCTB4ZGYsCisJMHhlMCwJMHhlMSwJMHhlMiwJMHhlMywJMHhlNCwJMHhlNSwJMHhlNiwJMHhlNywKKwkweGU4LAkweGU5LAkweGVhLAkweGViLAkweGVjLAkweGVkLAkweGVlLAkweGVmLAorCTB4ZjAsCTB4ZjEsCTB4ZjIsCTB4ZjMsCTB4ZjQsCTB4ZjUsCTB4ZjYsCTB4ZjcsCisJMHhmOCwJMHhmOSwJMHhmYSwJMHhmYiwJMHhmYywJMHhmZCwJMHhmZSwJMHhmZgorfTsKKworY29uc3Qgc2hvcnQgKl90b2xvd2VyX3RhYl8gPSBfQ190b2xvd2VyXzsKKworI3VuZGVmIHRvbG93ZXIKK2ludAordG9sb3dlcihpbnQgYykKK3sKKwlpZiAoKHVuc2lnbmVkIGludCljID4gMjU1KQorCQlyZXR1cm4oYyk7CisJcmV0dXJuKChfdG9sb3dlcl90YWJfICsgMSlbY10pOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdGRsaWIvdG91cHBlcl8uYyBiL2xpYmMvc3RkbGliL3RvdXBwZXJfLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDA5MzE5OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RkbGliL3RvdXBwZXJfLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IHRvdXBwZXJfLmMsdiAxLjEwIDIwMDUvMDgvMDkgMDg6MzY6NDgga2V2bG8gRXhwICQgKi8KKy8qCisgKiBXcml0dGVuIGJ5IEouVC4gQ29ua2xpbiA8anRjQG5ldGJzZC5vcmc+LgorICogUHVibGljIGRvbWFpbi4KKyAqLworCisjZGVmaW5lIF9BTlNJX0xJQlJBUlkKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNpbmNsdWRlICJjdHlwZV9wcml2YXRlLmgiCisKK2NvbnN0IHNob3J0IF9DX3RvdXBwZXJfWzEgKyBDVFlQRV9OVU1fQ0hBUlNdID0geworCUVPRiwKKwkweDAwLAkweDAxLAkweDAyLAkweDAzLAkweDA0LAkweDA1LAkweDA2LAkweDA3LAorCTB4MDgsCTB4MDksCTB4MGEsCTB4MGIsCTB4MGMsCTB4MGQsCTB4MGUsCTB4MGYsCisJMHgxMCwJMHgxMSwJMHgxMiwJMHgxMywJMHgxNCwJMHgxNSwJMHgxNiwJMHgxNywKKwkweDE4LAkweDE5LAkweDFhLAkweDFiLAkweDFjLAkweDFkLAkweDFlLAkweDFmLAorCTB4MjAsCTB4MjEsCTB4MjIsCTB4MjMsCTB4MjQsCTB4MjUsCTB4MjYsCTB4MjcsCisJMHgyOCwJMHgyOSwJMHgyYSwJMHgyYiwJMHgyYywJMHgyZCwJMHgyZSwJMHgyZiwKKwkweDMwLAkweDMxLAkweDMyLAkweDMzLAkweDM0LAkweDM1LAkweDM2LAkweDM3LAorCTB4MzgsCTB4MzksCTB4M2EsCTB4M2IsCTB4M2MsCTB4M2QsCTB4M2UsCTB4M2YsCisJMHg0MCwJMHg0MSwJMHg0MiwJMHg0MywJMHg0NCwJMHg0NSwJMHg0NiwJMHg0NywKKwkweDQ4LAkweDQ5LAkweDRhLAkweDRiLAkweDRjLAkweDRkLAkweDRlLAkweDRmLAorCTB4NTAsCTB4NTEsCTB4NTIsCTB4NTMsCTB4NTQsCTB4NTUsCTB4NTYsCTB4NTcsCisJMHg1OCwJMHg1OSwJMHg1YSwJMHg1YiwJMHg1YywJMHg1ZCwJMHg1ZSwJMHg1ZiwKKwkweDYwLAknQScsCSdCJywJJ0MnLAknRCcsCSdFJywJJ0YnLAknRycsCisJJ0gnLAknSScsCSdKJywJJ0snLAknTCcsCSdNJywJJ04nLAknTycsCisJJ1AnLAknUScsCSdSJywJJ1MnLAknVCcsCSdVJywJJ1YnLAknVycsCisJJ1gnLAknWScsCSdaJywJMHg3YiwJMHg3YywJMHg3ZCwJMHg3ZSwJMHg3ZiwKKwkweDgwLAkweDgxLAkweDgyLAkweDgzLAkweDg0LAkweDg1LAkweDg2LAkweDg3LAorCTB4ODgsCTB4ODksCTB4OGEsCTB4OGIsCTB4OGMsCTB4OGQsCTB4OGUsCTB4OGYsCisJMHg5MCwJMHg5MSwJMHg5MiwJMHg5MywJMHg5NCwJMHg5NSwJMHg5NiwJMHg5NywKKwkweDk4LAkweDk5LAkweDlhLAkweDliLAkweDljLAkweDlkLAkweDllLAkweDlmLAorCTB4YTAsCTB4YTEsCTB4YTIsCTB4YTMsCTB4YTQsCTB4YTUsCTB4YTYsCTB4YTcsCisJMHhhOCwJMHhhOSwJMHhhYSwJMHhhYiwJMHhhYywJMHhhZCwJMHhhZSwJMHhhZiwKKwkweGIwLAkweGIxLAkweGIyLAkweGIzLAkweGI0LAkweGI1LAkweGI2LAkweGI3LAorCTB4YjgsCTB4YjksCTB4YmEsCTB4YmIsCTB4YmMsCTB4YmQsCTB4YmUsCTB4YmYsCisJMHhjMCwJMHhjMSwJMHhjMiwJMHhjMywJMHhjNCwJMHhjNSwJMHhjNiwJMHhjNywKKwkweGM4LAkweGM5LAkweGNhLAkweGNiLAkweGNjLAkweGNkLAkweGNlLAkweGNmLAorCTB4ZDAsCTB4ZDEsCTB4ZDIsCTB4ZDMsCTB4ZDQsCTB4ZDUsCTB4ZDYsCTB4ZDcsCisJMHhkOCwJMHhkOSwJMHhkYSwJMHhkYiwJMHhkYywJMHhkZCwJMHhkZSwJMHhkZiwKKwkweGUwLAkweGUxLAkweGUyLAkweGUzLAkweGU0LAkweGU1LAkweGU2LAkweGU3LAorCTB4ZTgsCTB4ZTksCTB4ZWEsCTB4ZWIsCTB4ZWMsCTB4ZWQsCTB4ZWUsCTB4ZWYsCisJMHhmMCwJMHhmMSwJMHhmMiwJMHhmMywJMHhmNCwJMHhmNSwJMHhmNiwJMHhmNywKKwkweGY4LAkweGY5LAkweGZhLAkweGZiLAkweGZjLAkweGZkLAkweGZlLAkweGZmCit9OworCitjb25zdCBzaG9ydCAqX3RvdXBwZXJfdGFiXyA9IF9DX3RvdXBwZXJfOworCisjdW5kZWYgdG91cHBlcgoraW50Cit0b3VwcGVyKGludCBjKQoreworCWlmICgodW5zaWduZWQgaW50KWMgPiAyNTUpCisJCXJldHVybihjKTsKKwlyZXR1cm4oKF90b3VwcGVyX3RhYl8gKyAxKVtjXSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0ZGxpYi93Y2hhci5jIGIvbGliYy9zdGRsaWIvd2NoYXIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kODA1MzMzCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdGRsaWIvd2NoYXIuYwpAQCAtMCwwICsxLDQzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworLyogc3R1YnMgZm9yIHdpZGUtY2hhciBmdW5jdGlvbnMgKi8KK3dpbnRfdCAgYnRvd2MoaW50IGMpCit7CisgIHJldHVybiAoYyA9PSBFT0YpID8gV0VPRiA6IGM7Cit9CisKK2ludCBmd3ByaW50ZihGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uKQoreworICAgIHZhX2xpc3QgIGFyZ3M7CisgICAgaW50ICAgICAgcmVzdWx0OworCisgICAgdmFfc3RhcnQoYXJncywgZm9ybWF0KTsKKyAgICByZXN1bHQgPSB2ZndwcmludGYoc3RyZWFtLCBmb3JtYXQsIGFyZ3MpOworICAgIHZhX2VuZChhcmdzKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitpbnQgd3ByaW50Zihjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIGludCAgICAgIHJlc3VsdDsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgcmVzdWx0ID0gdndwcmludGYoZm9ybWF0LCBhcmdzKTsKKyAgICB2YV9lbmQoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHN3cHJpbnRmKHdjaGFyX3QgKnMsIHNpemVfdCBuLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLikKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIGludCAgICAgIHJlc3VsdDsKKworICAgIHZhX3N0YXJ0KGFyZ3MsIGZvcm1hdCk7CisgICAgcmVzdWx0ID0gdnN3cHJpbnRmKHMsIG4sIGZvcm1hdCwgYXJncyk7CisgICAgdmFfZW5kKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCB2d3ByaW50Zihjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJnKQoreworICAgIHJldHVybiB2cHJpbnRmKChjb25zdCBjaGFyKilmb3JtYXQsIGFyZyk7Cit9CisKK2ludCB2ZndwcmludGYoRklMRSAqc3RyZWFtLCBjb25zdCB3Y2hhcl90ICpmb3JtYXQsIHZhX2xpc3QgYXJnKQoreworICAgIHJldHVybiB2ZnByaW50ZihzdHJlYW0sIChjb25zdCBjaGFyKilmb3JtYXQsIGFyZyk7Cit9CisKK2ludCB2c3dwcmludGYod2NoYXJfdCAqcywgc2l6ZV90IG4sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgdmFfbGlzdCBhcmcpCit7CisgICAgcmV0dXJuIHZzbnByaW50ZiggKGNoYXIqKXMsIG4sIChjb25zdCBjaGFyKilmb3JtYXQsIGFyZyApOworfQorCitpbnQgZndzY2FuZihGSUxFICpzdHJlYW0sIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uICkKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIGludCAgICAgIHJlc3VsdDsKKworICAgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICAgIHJlc3VsdCA9IHZmc2NhbmYoIHN0cmVhbSwgKGNvbnN0IGNoYXIqKWZvcm1hdCwgYXJncyApOworICAgIHZhX2VuZCAoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IHdzY2FuZihjb25zdCB3Y2hhcl90ICpmb3JtYXQsIC4uLiApCit7CisgICAgdmFfbGlzdCAgYXJnczsKKyAgICBpbnQgICAgICByZXN1bHQ7CisKKyAgICB2YV9zdGFydCAoYXJncywgZm9ybWF0KTsKKyAgICByZXN1bHQgPSB2c2NhbmYoIChjb25zdCBjaGFyKilmb3JtYXQsIGFyZ3MgKTsKKyAgICB2YV9lbmQgKGFyZ3MpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ludCBzd3NjYW5mKGNvbnN0IHdjaGFyX3QgKnMsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgLi4uICkKK3sKKyAgICB2YV9saXN0ICBhcmdzOworICAgIGludCAgICAgIHJlc3VsdDsKKworICAgIHZhX3N0YXJ0IChhcmdzLCBmb3JtYXQpOworICAgIHJlc3VsdCA9IHZzY2FuZiggKGNvbnN0IGNoYXIqKWZvcm1hdCwgYXJncyApOworICAgIHZhX2VuZCAoYXJncyk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworaW50IGlzd2FsbnVtKHdpbnRfdCB3YykgeyByZXR1cm4gaXNhbG51bSh3Yyk7IH0KK2ludCBpc3dhbHBoYSh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzYWxwaGEod2MpOyB9CitpbnQgaXN3Y250cmwod2ludF90IHdjKSB7IHJldHVybiBpc2NudHJsKHdjKTsgfQoraW50IGlzd2RpZ2l0KHdpbnRfdCB3YykgeyByZXR1cm4gaXNkaWdpdCh3Yyk7IH0KK2ludCBpc3dncmFwaCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzZ3JhcGgod2MpOyB9CitpbnQgaXN3bG93ZXIod2ludF90IHdjKSB7IHJldHVybiBpc2xvd2VyKHdjKTsgfQoraW50IGlzd3ByaW50KHdpbnRfdCB3YykgeyByZXR1cm4gaXNwcmludCh3Yyk7IH0KK2ludCBpc3dwdW5jdCh3aW50X3Qgd2MpIHsgcmV0dXJuIGlzcHVuY3Qod2MpOyB9CitpbnQgaXN3c3BhY2Uod2ludF90IHdjKSB7IHJldHVybiBpc3NwYWNlKHdjKTsgfQoraW50IGlzd3VwcGVyKHdpbnRfdCB3YykgeyByZXR1cm4gaXN1cHBlcih3Yyk7IH0KK2ludCBpc3d4ZGlnaXQod2ludF90IHdjKSB7IHJldHVybiBpc3hkaWdpdCh3Yyk7IH0KKworaW50IGlzd2N0eXBlKHdpbnRfdCB3Yywgd2N0eXBlX3QgY2hhcmNsYXNzKQoreworICAgIHN3aXRjaCAoY2hhcmNsYXNzKSB7CisgICAgICAgIGNhc2UgV0NfVFlQRV9BTE5VTTogcmV0dXJuIGlzYWxudW0od2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfQUxQSEE6IHJldHVybiBpc2FscGhhKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX0JMQU5LOiByZXR1cm4gaXNibGFuayh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9DTlRSTDogcmV0dXJuIGlzY250cmwod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfRElHSVQ6IHJldHVybiBpc2RpZ2l0KHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX0dSQVBIOiByZXR1cm4gaXNncmFwaCh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9MT1dFUjogcmV0dXJuIGlzbG93ZXIod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfUFJJTlQ6IHJldHVybiBpc3ByaW50KHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX1BVTkNUOiByZXR1cm4gaXNwdW5jdCh3Yyk7CisgICAgICAgIGNhc2UgV0NfVFlQRV9TUEFDRTogcmV0dXJuIGlzc3BhY2Uod2MpOworICAgICAgICBjYXNlIFdDX1RZUEVfVVBQRVI6IHJldHVybiBpc3VwcGVyKHdjKTsKKyAgICAgICAgY2FzZSBXQ19UWVBFX1hESUdJVDogcmV0dXJuIGlzeGRpZ2l0KHdjKTsKKyAgICAgICAgZGVmYXVsdDogcmV0dXJuIDA7CisgICAgfTsKK30KKword2ludF90IGZnZXR3YyhGSUxFICpzdHJlYW0pCit7CisgICAgcmV0dXJuIGZnZXRjKHN0cmVhbSk7Cit9CisKK3djaGFyX3QgKmZnZXR3cyh3Y2hhcl90ICp3cywgaW50IG4sIEZJTEUgKnN0cmVhbSkKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBmZ2V0cygoY2hhciopd3MsIG4sIHN0cmVhbSk7Cit9CisKK3dpbnRfdCAgIGZwdXR3Yyh3Y2hhcl90IHdjLCBGSUxFICpzdHJlYW0pCit7CisgICAgcmV0dXJuICh3aW50X3QpZnB1dGMoKGNoYXIpd2MsIHN0cmVhbSk7Cit9CisKK2ludCAgZnB1dHdzKGNvbnN0IHdjaGFyX3QgKnN0ciwgRklMRSAqc3RyZWFtKQoreworICAgIHJldHVybiBmcHV0cyggKGNvbnN0IGNoYXIqKXN0ciwgc3RyZWFtICk7Cit9CisKK2ludCAgZndpZGUoRklMRSAqc3RyZWFtLCBpbnQgIG1vZGUpCit7CisgICAgc3RyZWFtPXN0cmVhbTsKKyAgICByZXR1cm4gKG1vZGUpOworfQorCit3aW50X3QgIGdldHdjKEZJTEUgKnN0cmVhbSkKK3sKKyAgICByZXR1cm4gZ2V0YyhzdHJlYW0pOworfQorCit3aW50X3QgIGdldHdjaGFyKHZvaWQpCit7CisgICAgcmV0dXJuIGdldGNoYXIoKTsKK30KKworaW50IG1ic2luaXQoY29uc3QgbWJzdGF0ZV90ICpwcykKK3sKKyAgICBwcz1wczsKKyAgICByZXR1cm4gMTsKK30KKworc2l6ZV90IG1icmxlbihjb25zdCBjaGFyICpzLCBzaXplX3QgbiwgbWJzdGF0ZV90ICpwcykKK3sKKyAgICByZXR1cm4gKG4gIT0gMCk7Cit9CisKK3NpemVfdCBtYnJ0b3djKHdjaGFyX3QgKnB3YywgY29uc3QgY2hhciAqcywgc2l6ZV90IG4sIG1ic3RhdGVfdCAqcHMpCit7CisgICAgaWYgKHMgPT0gTlVMTCkgeworICAgICAgICBzICAgPSAiIjsKKyAgICAgICAgcHdjID0gTlVMTDsKKyAgICB9CisgICAgaWYgKG4gPT0gMCkgeworICAgICAgICBpZiAocHdjKQorICAgICAgICAgICAgKnB3YyA9IDA7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBpZiAocHdjKQorICAgICAgICAqcHdjID0gKnM7CisKKyAgICByZXR1cm4gKCpzICE9IDApOworfQorCitzaXplX3QgbWJzcnRvd2NzKHdjaGFyX3QgKmRzdCwgY29uc3QgY2hhciAqKnNyYywgc2l6ZV90IGxlbiwgbWJzdGF0ZV90ICpwcykKK3sKKyAgICBjb25zdCBjaGFyKiAgcyAgPSAqc3JjOworICAgIGNvbnN0IGNoYXIqICBzMiA9IG1lbWNociggcywgMCwgbGVuICk7CisKKyAgICBpZiAoczIgIT0gTlVMTCkKKyAgICAgICAgbGVuID0gKHNpemVfdCkoczIgLSBzKSArIDFVOworCisgICAgaWYgKGRzdCkKKyAgICAgICAgbWVtY3B5KCAoY2hhciopZHN0LCBzLCBsZW4gKTsKKworICAgICpzcmMgPSBzICsgbGVuOworICAgIHJldHVybiBsZW47Cit9CisKK3dpbnRfdCAgcHV0d2Mod2NoYXJfdCB3YywgRklMRSAqc3RyZWFtKQoreworICAgIHJldHVybiBmcHV0YygoY2hhcil3Yywgc3RyZWFtKTsKK30KKword2ludF90ICBwdXR3Y2hhcih3Y2hhcl90IHdjKQoreworICAgIHJldHVybiAgcHV0Y2hhcigoY2hhcil3Yyk7Cit9CisKK3dpbnRfdCAgdG93bG93ZXIod2ludF90IHdjKQoreworICAgIHJldHVybiB0b2xvd2VyKHdjKTsKK30KKword2ludF90ICB0b3d1cHBlcih3aW50X3QgIHdjKQoreworICAgIHJldHVybiB0b3VwcGVyKHdjKTsKK30KKword2ludF90ICB1bmdldHdjKHdpbnRfdCB3YywgRklMRSAqc3RyZWFtKQoreworICAgIHJldHVybiB1bmdldGMoKGNoYXIpd2MsIHN0cmVhbSk7Cit9CisKK3NpemVfdCB3Y3J0b21iKGNoYXIgKnMsIHdjaGFyX3Qgd2MsIG1ic3RhdGVfdCAqcHMpCit7CisgICAgaWYgKHMgIT0gTlVMTCkKKyAgICAgICAgKnMgPSAxOworICAgIHJldHVybiAxOworfQorCit3Y2hhcl90ICp3Y3NjYXQod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIpCit7CisgICAgcmV0dXJuICh3Y2hhcl90Kikgc3RyY2F0KChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIpOworfQorCit3Y2hhcl90ICp3Y3NjaHIoY29uc3Qgd2NoYXJfdCAqd3MsIHdjaGFyX3Qgd2MpCit7CisgICAgcmV0dXJuICh3Y2hhcl90KilzdHJjaHIoIChjb25zdCBjaGFyKil3cywgKGNoYXIpd2MgKTsKK30KKworaW50IHdjc2NtcChjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gc3RyY21wKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyICk7Cit9CisKK2ludCB3Y3Njb2xsKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiBzdHJjbXAoIChjb25zdCBjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKK30KKword2NoYXJfdCAqd2NzY3B5KHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cmNweSggKGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCitzaXplX3Qgd2NzY3Nwbihjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gc3Ryc3BuKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyICk7Cit9CisKK3NpemVfdCB3Y3NsZW4oY29uc3Qgd2NoYXJfdCAqd3MpCit7CisgICAgcmV0dXJuIChzaXplX3Qpc3RybGVuKCAoY29uc3QgY2hhciopd3MgKTsKK30KKworc2l6ZV90IHdjc2Z0aW1lKHdjaGFyX3QgKndjcywgc2l6ZV90IG1heHNpemUsIGNvbnN0IHdjaGFyX3QgKmZvcm1hdCwgIGNvbnN0IHN0cnVjdCB0bSAqdGltcHRyKQoreworICAgIHJldHVybiBzdHJmdGltZSggKGNoYXIqKXdjcywgbWF4c2l6ZSwgKGNvbnN0IGNoYXIqKWZvcm1hdCwgdGltcHRyICk7Cit9CisKK3djaGFyX3QgKndjc25jYXQod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cm5jYXQoIChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIsIG4gKTsKK30KKworaW50IHdjc25jbXAoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiBzdHJuY21wKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7Cit9CisKK3djaGFyX3QgKndjc25jcHkod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cm5jcHkoIChjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIsIG4gKTsKK30KKword2NoYXJfdCAqd2NzcGJyayhjb25zdCB3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJwYnJrKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyICk7Cit9CisKK3djaGFyX3QgKndjc3JjaHIoY29uc3Qgd2NoYXJfdCAqd3MsIHdjaGFyX3Qgd2MpCit7CisgICAgcmV0dXJuICh3Y2hhcl90Kikgc3RycmNociggKGNvbnN0IGNoYXIqKXdzLCAoaW50KXdjICk7Cit9CisKK3NpemVfdCB3Y3NydG9tYnMoY2hhciAqZHN0LCBjb25zdCB3Y2hhcl90ICoqc3JjLCBzaXplX3QgbGVuLCBtYnN0YXRlX3QgKnBzKQoreworICAgIGNvbnN0IGNoYXIqICBzID0gKGNvbnN0IGNoYXIqKSpzcmM7CisgICAgY29uc3QgY2hhciogIHMyID0gbWVtY2hyKCBzLCAwLCBsZW4gKTsKKworICAgIGlmIChzMiAhPSBOVUxMKQorICAgICAgICBsZW4gPSAoczIgLSBzKSsxOworCisgICAgaWYgKGRzdCAhPSBOVUxMKQorICAgICAgICBtZW1jcHkoIGRzdCwgcywgbGVuICk7CisKKyAgICAqc3JjID0gKHdjaGFyX3QqKShzICsgbGVuKTsKKyAgICByZXR1cm4gbGVuOworfQorCitzaXplX3Qgd2Nzc3BuKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiBzdHJzcG4oIChjb25zdCBjaGFyKil3czEsIChjb25zdCBjaGFyKil3czIgKTsKK30KKword2NoYXJfdCAqd2Nzc3RyKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cnN0ciggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCitkb3VibGUgd2NzdG9kKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIpCit7CisgICAgcmV0dXJuIHN0cnRvZCggKGNvbnN0IGNoYXIqKW5wdHIsIChjaGFyKiopZW5kcHRyICk7Cit9CisKK3djaGFyX3QgKndjc3Rvayh3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMiwgd2NoYXJfdCAqKnB0cikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSBzdHJ0b2tfciggKGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgKGNoYXIqKilwdHIgKTsKK30KKworbG9uZyBpbnQgd2NzdG9sKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIsIGludCBiYXNlKQoreworICAgIHJldHVybiBzdHJ0b2woIChjb25zdCBjaGFyKilucHRyLCAoY2hhcioqKWVuZHB0ciwgYmFzZSApOworfQorCit1bnNpZ25lZCBsb25nIGludCB3Y3N0b3VsKGNvbnN0IHdjaGFyX3QgKm5wdHIsIHdjaGFyX3QgKiplbmRwdHIsIGludCBiYXNlKQoreworICAgIHJldHVybiBzdHJ0b3VsKCAoY29uc3QgY2hhciopbnB0ciwgKGNoYXIqKillbmRwdHIsIGJhc2UgKTsKK30KKword2NoYXJfdCAqd2Nzd2NzKGNvbnN0IHdjaGFyX3QgKndzMSwgY29uc3Qgd2NoYXJfdCAqd3MyKQoreworICAgIHJldHVybiAod2NoYXJfdCopIHN0cnN0ciggKGNvbnN0IGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiApOworfQorCitpbnQgd2Nzd2lkdGgoY29uc3Qgd2NoYXJfdCAqcHdjcywgc2l6ZV90IG4pCit7CisgICAgcmV0dXJuICBzdHJubGVuKCAoY29uc3QgY2hhciopcHdjcywgbiApOworfQorCitzaXplX3Qgd2NzeGZybSh3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMiwgc2l6ZV90IG4pCit7CisgICAgbWVtY3B5KCAoY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7CisgICAgcmV0dXJuIG47Cit9CisKK2ludCB3Y3RvYih3aW50X3QgYykKK3sKKyAgcmV0dXJuIGM7Cit9CisKK3djdHlwZV90IHdjdHlwZShjb25zdCBjaGFyICpwcm9wZXJ0eSkKK3sKKyAgICBzdGF0aWMgY29uc3QgY2hhciogY29uc3QgIHByb3BlcnRpZXNbV0NfVFlQRV9NQVhdID0KKyAgICB7CisgICAgICAgICI8aW52YWxpZD4iLAorICAgICAgICAiYWxudW0iLCAiYWxwaGEiLCAiYmxhbmsiLCAiY250cmwiLCAiZGlnaXQiLCAiZ3JhcGgiLAorICAgICAgICAibG93ZXIiLCAicHJpbnQiLCAicHVuY3QiLCAic3BhY2UiLCAidXBwZXIiLCAieGRpZ2l0IgorICAgIH07CisgICAgaW50ICBubjsKKworICAgIGZvciAoIG5uID0gMDsgbm4gPCBXQ19UWVBFX01BWDsgbm4rKyApCisgICAgICAgIGlmICggIXN0cmNtcCggcHJvcGVydGllc1tubl0sIHByb3BlcnR5ICkgKQorICAgICAgICAgICAgcmV0dXJuICh3Y3R5cGVfdCkobm4pOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCB3Y3dpZHRoKHdjaGFyX3Qgd2MpCit7CisgICAgcmV0dXJuICh3YyA+IDApOworfQorCit3Y2hhcl90ICp3bWVtY2hyKGNvbnN0IHdjaGFyX3QgKndzLCB3Y2hhcl90IHdjLCBzaXplX3QgbikKK3sKKyAgICByZXR1cm4gKHdjaGFyX3QqKSAgbWVtY2hyKCAoY29uc3QgY2hhciopd3MsIChpbnQpd2MsIG4gKTsKK30KKworaW50IHdtZW1jbXAoY29uc3Qgd2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiAgbWVtY21wKCAoY29uc3QgY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7Cit9CisKK3djaGFyX3QgKndtZW1jcHkod2NoYXJfdCAqd3MxLCBjb25zdCB3Y2hhcl90ICp3czIsIHNpemVfdCBuKQoreworICAgIHJldHVybiAod2NoYXJfdCopIG1lbWNweSggKGNoYXIqKXdzMSwgKGNvbnN0IGNoYXIqKXdzMiwgbiApOworfQorCit3Y2hhcl90ICp3bWVtbW92ZSh3Y2hhcl90ICp3czEsIGNvbnN0IHdjaGFyX3QgKndzMiwgc2l6ZV90IG4pCit7CisgICAgcmV0dXJuICh3Y2hhcl90KiltZW1tb3ZlKCAoY2hhciopd3MxLCAoY29uc3QgY2hhciopd3MyLCBuICk7Cit9CisKK3djaGFyX3QgKndtZW1zZXQod2NoYXJfdCAqd3MsIHdjaGFyX3Qgd2MsIHNpemVfdCBuKQoreworICAgIHJldHVybiAod2NoYXJfdCopIG1lbXNldCggKGNoYXIqKXdzLCAoaW50KXdjLCBuICk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9iY29weS5jIGIvbGliYy9zdHJpbmcvYmNvcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MzA4YzY0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvYmNvcHkuYwpAQCAtMCwwICsxLDEyOCBAQAorLyoJJE9wZW5CU0Q6IGJjb3B5LmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIHNpemVvZih3b3JkKSBNVVNUIEJFIEEgUE9XRVIgT0YgVFdPCisgKiBTTyBUSEFUIHdtYXNrIEJFTE9XIElTIEFMTCBPTkVTCisgKi8KK3R5cGVkZWYJbG9uZyB3b3JkOwkJLyogIndvcmQiIHVzZWQgZm9yIG9wdGltYWwgY29weSBzcGVlZCAqLworCisjZGVmaW5lCXdzaXplCXNpemVvZih3b3JkKQorI2RlZmluZQl3bWFzawkod3NpemUgLSAxKQorCisvKgorICogQ29weSBhIGJsb2NrIG9mIG1lbW9yeSwgaGFuZGxpbmcgb3ZlcmxhcC4KKyAqIFRoaXMgaXMgdGhlIHJvdXRpbmUgdGhhdCBhY3R1YWxseSBpbXBsZW1lbnRzCisgKiAodGhlIHBvcnRhYmxlIHZlcnNpb25zIG9mKSBiY29weSwgbWVtY3B5LCBhbmQgbWVtbW92ZS4KKyAqLworI2lmZGVmIE1FTUNPUFkKK3ZvaWQgKgorbWVtY3B5KHZvaWQgKmRzdDAsIGNvbnN0IHZvaWQgKnNyYzAsIHNpemVfdCBsZW5ndGgpCisjZWxzZQorI2lmZGVmIE1FTU1PVkUKK3ZvaWQgKgorbWVtbW92ZSh2b2lkICpkc3QwLCBjb25zdCB2b2lkICpzcmMwLCBzaXplX3QgbGVuZ3RoKQorI2Vsc2UKK3ZvaWQKK2Jjb3B5KGNvbnN0IHZvaWQgKnNyYzAsIHZvaWQgKmRzdDAsIHNpemVfdCBsZW5ndGgpCisjZW5kaWYKKyNlbmRpZgoreworCWNoYXIgKmRzdCA9IGRzdDA7CisJY29uc3QgY2hhciAqc3JjID0gc3JjMDsKKwlzaXplX3QgdDsKKworCWlmIChsZW5ndGggPT0gMCB8fCBkc3QgPT0gc3JjKQkJLyogbm90aGluZyB0byBkbyAqLworCQlnb3RvIGRvbmU7CisKKwkvKgorCSAqIE1hY3JvczogbG9vcC10LXRpbWVzOyBhbmQgbG9vcC10LXRpbWVzLCB0PjAKKwkgKi8KKyNkZWZpbmUJVExPT1AocykgaWYgKHQpIFRMT09QMShzKQorI2RlZmluZQlUTE9PUDEocykgZG8geyBzOyB9IHdoaWxlICgtLXQpCisKKwlpZiAoKHVuc2lnbmVkIGxvbmcpZHN0IDwgKHVuc2lnbmVkIGxvbmcpc3JjKSB7CisJCS8qCisJCSAqIENvcHkgZm9yd2FyZC4KKwkJICovCisJCXQgPSAobG9uZylzcmM7CS8qIG9ubHkgbmVlZCBsb3cgYml0cyAqLworCQlpZiAoKHQgfCAobG9uZylkc3QpICYgd21hc2spIHsKKwkJCS8qCisJCQkgKiBUcnkgdG8gYWxpZ24gb3BlcmFuZHMuICBUaGlzIGNhbm5vdCBiZSBkb25lCisJCQkgKiB1bmxlc3MgdGhlIGxvdyBiaXRzIG1hdGNoLgorCQkJICovCisJCQlpZiAoKHQgXiAobG9uZylkc3QpICYgd21hc2sgfHwgbGVuZ3RoIDwgd3NpemUpCisJCQkJdCA9IGxlbmd0aDsKKwkJCWVsc2UKKwkJCQl0ID0gd3NpemUgLSAodCAmIHdtYXNrKTsKKwkJCWxlbmd0aCAtPSB0OworCQkJVExPT1AxKCpkc3QrKyA9ICpzcmMrKyk7CisJCX0KKwkJLyoKKwkJICogQ29weSB3aG9sZSB3b3JkcywgdGhlbiBtb3AgdXAgYW55IHRyYWlsaW5nIGJ5dGVzLgorCQkgKi8KKwkJdCA9IGxlbmd0aCAvIHdzaXplOworCQlUTE9PUCgqKHdvcmQgKilkc3QgPSAqKHdvcmQgKilzcmM7IHNyYyArPSB3c2l6ZTsgZHN0ICs9IHdzaXplKTsKKwkJdCA9IGxlbmd0aCAmIHdtYXNrOworCQlUTE9PUCgqZHN0KysgPSAqc3JjKyspOworCX0gZWxzZSB7CisJCS8qCisJCSAqIENvcHkgYmFja3dhcmRzLiAgT3RoZXJ3aXNlIGVzc2VudGlhbGx5IHRoZSBzYW1lLgorCQkgKiBBbGlnbm1lbnQgd29ya3MgYXMgYmVmb3JlLCBleGNlcHQgdGhhdCBpdCB0YWtlcworCQkgKiAodCZ3bWFzaykgYnl0ZXMgdG8gYWxpZ24sIG5vdCB3c2l6ZS0odCZ3bWFzaykuCisJCSAqLworCQlzcmMgKz0gbGVuZ3RoOworCQlkc3QgKz0gbGVuZ3RoOworCQl0ID0gKGxvbmcpc3JjOworCQlpZiAoKHQgfCAobG9uZylkc3QpICYgd21hc2spIHsKKwkJCWlmICgodCBeIChsb25nKWRzdCkgJiB3bWFzayB8fCBsZW5ndGggPD0gd3NpemUpCisJCQkJdCA9IGxlbmd0aDsKKwkJCWVsc2UKKwkJCQl0ICY9IHdtYXNrOworCQkJbGVuZ3RoIC09IHQ7CisJCQlUTE9PUDEoKi0tZHN0ID0gKi0tc3JjKTsKKwkJfQorCQl0ID0gbGVuZ3RoIC8gd3NpemU7CisJCVRMT09QKHNyYyAtPSB3c2l6ZTsgZHN0IC09IHdzaXplOyAqKHdvcmQgKilkc3QgPSAqKHdvcmQgKilzcmMpOworCQl0ID0gbGVuZ3RoICYgd21hc2s7CisJCVRMT09QKCotLWRzdCA9ICotLXNyYyk7CisJfQorZG9uZToKKyNpZiBkZWZpbmVkKE1FTUNPUFkpIHx8IGRlZmluZWQoTUVNTU9WRSkKKwlyZXR1cm4gKGRzdDApOworI2Vsc2UKKwlyZXR1cm47CisjZW5kaWYKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL2luZGV4LmMgYi9saWJjL3N0cmluZy9pbmRleC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZiMDQ5MmYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9pbmRleC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBpbmRleC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgoraW5kZXgoY29uc3QgY2hhciAqcCwgaW50IGNoKQoreworCWZvciAoOzsgKytwKSB7CisJCWlmICgqcCA9PSBjaCkKKwkJCXJldHVybigoY2hhciAqKXApOworCQlpZiAoISpwKQorCQkJcmV0dXJuKChjaGFyICopTlVMTCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbWNjcHkuYyBiL2xpYmMvc3RyaW5nL21lbWNjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNjg5ZTgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtY2NweS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCAqbWVtY2NweSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgaW50IGMsIHNpemVfdCBuKQoreworICAgIGNoYXIqICAgICAgICBxICAgICA9IGRzdDsKKyAgICBjb25zdCBjaGFyKiAgcCAgICAgPSBzcmM7CisgICAgY29uc3QgY2hhciogIHBfZW5kID0gcCArIG47CisgICAgY2hhciAgICAgICAgIGNoICAgID0gfihjaGFyKWM7ICAvKiBlbnN1cmUgY2ggIT0gYyAqLworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAoY2ggPT0gYyB8fCBwID49IHBfZW5kKSBicmVhazsKKyAgICAgICAgKnErKyA9IGNoID0gKnArKzsKKworICAgICAgICBpZiAoY2ggPT0gYyB8fCBwID49IHBfZW5kKSBicmVhazsKKyAgICAgICAgKnErKyA9IGNoID0gKnArKzsKKworICAgICAgICBpZiAoY2ggPT0gYyB8fCBwID49IHBfZW5kKSBicmVhazsKKyAgICAgICAgKnErKyA9IGNoID0gKnArKzsKKworICAgICAgICBpZiAoY2ggPT0gYyB8fCBwID49IHBfZW5kKSBicmVhazsKKyAgICAgICAgKnErKyA9IGNoID0gKnArKzsKKyAgICB9CisKKyAgICBpZiAocCA+PSBwX2VuZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICByZXR1cm4gcTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbWNoci5jIGIvbGliYy9zdHJpbmcvbWVtY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjE0MTY3YQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbWNoci5jCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCAqbWVtY2hyKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcCAgID0gczsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kID0gcCArIG47CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChwID49IGVuZCB8fCBwWzBdID09IGMpIGJyZWFrOyBwKys7CisgICAgICAgIGlmIChwID49IGVuZCB8fCBwWzBdID09IGMpIGJyZWFrOyBwKys7CisgICAgICAgIGlmIChwID49IGVuZCB8fCBwWzBdID09IGMpIGJyZWFrOyBwKys7CisgICAgICAgIGlmIChwID49IGVuZCB8fCBwWzBdID09IGMpIGJyZWFrOyBwKys7CisgICAgfQorICAgIGlmIChwID49IGVuZCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgZWxzZQorICAgICAgICByZXR1cm4gKHZvaWQqKSBwOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtY21wLmMgYi9saWJjL3N0cmluZy9tZW1jbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NjQwOTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtY21wLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitpbnQgbWVtY21wKGNvbnN0IHZvaWQgKnMxLCBjb25zdCB2b2lkICpzMiwgc2l6ZV90IG4pCit7CisgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHAxICAgPSBzMTsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgZW5kMSA9IHAxICsgbjsKKyAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgcDIgICA9IHMyOworICAgIGludCAgICAgICAgICAgICAgICAgICBkID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKGQgfHwgcDEgPj0gZW5kMSkgYnJlYWs7CisgICAgICAgIGQgPSAoaW50KSpwMSsrIC0gKGludCkqcDIrKzsKKworICAgICAgICBpZiAoZCB8fCBwMSA+PSBlbmQxKSBicmVhazsKKyAgICAgICAgZCA9IChpbnQpKnAxKysgLSAoaW50KSpwMisrOworCisgICAgICAgIGlmIChkIHx8IHAxID49IGVuZDEpIGJyZWFrOworICAgICAgICBkID0gKGludCkqcDErKyAtIChpbnQpKnAyKys7CisKKyAgICAgICAgaWYgKGQgfHwgcDEgPj0gZW5kMSkgYnJlYWs7CisgICAgICAgIGQgPSAoaW50KSpwMSsrIC0gKGludCkqcDIrKzsKKyAgICB9CisgICAgcmV0dXJuIGQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1jcHkuYyBiL2xpYmMvc3RyaW5nL21lbWNweS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjZDRhODAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9tZW1jcHkuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjZGVmaW5lIE1FTV9DT1BZCisjaW5jbHVkZSAiYmNvcHkuYyIKZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbW1lbS5jIGIvbGliYy9zdHJpbmcvbWVtbWVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTcyNTAxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL21lbW1lbS5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKy8qCisgKiBUaGlzIHVzZXMgdGhlICJOb3QgU28gTmFpdmUiIGFsZ29yaXRobSwgYSB2ZXJ5IHNpbXBsZSBidXQKKyAqIHVzdWFsbHkgZWZmZWN0aXZlIGFsZ29yaXRobSwgc2VlOgorICogaHR0cDovL3d3dy1pZ20udW5pdi1tbHYuZnIvfmxlY3JvcS9zdHJpbmcvCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCAqbWVtbWVtKGNvbnN0IHZvaWQgKmhheXN0YWNrLCBzaXplX3QgbiwgY29uc3Qgdm9pZCAqbmVlZGxlLCBzaXplX3QgbSkKK3sKKyAgICBpZiAobSA+IG4gfHwgIW0gfHwgIW4pCisgICAgICAgIHJldHVybiBOVUxMOworCisgICAgaWYgKF9fYnVpbHRpbl9leHBlY3QoKG0gPiAxKSwgMSkpIHsKKyAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogIHkgPSAoY29uc3QgdW5zaWduZWQgY2hhciopIGhheXN0YWNrOworICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyKiAgeCA9IChjb25zdCB1bnNpZ25lZCBjaGFyKikgbmVlZGxlOworICAgICAgICBzaXplX3QgICAgICAgICAgICAgICAgaiA9IDA7CisgICAgICAgIHNpemVfdCAgICAgICAgICAgICAgICBrID0gMSwgbCA9IDI7CisKKyAgICAgICAgaWYgKHhbMF0gPT0geFsxXSkgeworICAgICAgICAgICAgayA9IDI7CisgICAgICAgICAgICBsID0gMTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoaiA8PSBuLW0pIHsKKyAgICAgICAgICAgIGlmICh4WzFdICE9IHlbaisxXSkgeworICAgICAgICAgICAgICAgIGogKz0gazsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgaWYgKCFtZW1jbXAoeCsyLCB5K2orMiwgbS0yKSAmJiB4WzBdID09IHlbal0pCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAodm9pZCopICZ5W2pdOworICAgICAgICAgICAgICAgIGogKz0gbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIC8qIGRlZ2VuZXJhdGUgY2FzZSAqLworICAgICAgICByZXR1cm4gbWVtY2hyKGhheXN0YWNrLCAoKHVuc2lnbmVkIGNoYXIqKW5lZWRsZSlbMF0sIG4pOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbW1vdmUuYyBiL2xpYmMvc3RyaW5nL21lbW1vdmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mY2FmNGVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtbW92ZS5jCkBAIC0wLDAgKzEsNzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCAqbWVtbW92ZSh2b2lkICpkc3QsIGNvbnN0IHZvaWQgKnNyYywgc2l6ZV90IG4pCit7CisgIGNvbnN0IGNoYXIgKnAgPSBzcmM7CisgIGNoYXIgKnEgPSBkc3Q7CisgIGlmIChfX2J1aWx0aW5fZXhwZWN0KHEgPCBwLCAxKSkgeworICAgIHJldHVybiBtZW1jcHkoZHN0LCBzcmMsIG4pOworICB9IGVsc2UgeworI2RlZmluZSBQUkVMT0FEX0RJU1RBTkNFIDY0CisgICAgICAvKiBhIHNlbWktb3B0aW1pemVkIG1lbW1vdmUoKS4gd2UncmUgcHJlbG9hZGluZyB0aGUgc3JjIGFuZCBkc3QgYnVmZmVycworICAgICAgICogYXMgd2UgZ28gKi8KKyAgICBzaXplX3QgYzAsIGMxLCBpOworICAgIHAgKz0gbjsKKyAgICBxICs9IG47CisgICAgLyogbm90ZTogd2UgcHJlbG9hZCB0aGUgZGVzdGluYXRpb24gYXMgd2VsbCwgYmVjYXVzZSB0aGUgMS1ieXRlIGF0IGEgdGltZQorICAgICAqIGNvcHkgYmVsb3cgZG9lc24ndCB0YWtlIGFkdmFudGFnZSBvZiB0aGUgd3JpdGUtYnVmZmVyLCB3ZSBuZWVkCisgICAgICogdG8gdXNlIHRoZSBjYWNoZSBpbnN0ZWFkIGFzIGEgcG9vciBtYW4ncyB3cml0ZS1jb21iaW5lciAqLworICAgIF9fYnVpbHRpbl9wcmVmZXRjaChwLTEpOworICAgIF9fYnVpbHRpbl9wcmVmZXRjaChxLTEpOworICAgIGlmIChQUkVMT0FEX0RJU1RBTkNFID4gMzIpIHsKKyAgICAgICAgX19idWlsdGluX3ByZWZldGNoKHAtKDMyKzEpKTsKKyAgICAgICAgX19idWlsdGluX3ByZWZldGNoKHEtKDMyKzEpKTsKKyAgICB9CisgICAgLyogZG8gdGhlIHByZWZldGVjaCBhcyBzb29uIGFzIHBvc3NpYmxlLCBwcmV2ZW50IHRoZSBjb21waWxlciB0bworICAgICAqIHJlb3JkZXIgdGhlIGluc3RydWN0aW9ucyBhYm92ZSB0aGUgcHJlZmV0Y2ggKi8KKyAgICBhc20gdm9sYXRpbGUoIiI6OjoibWVtb3J5Iik7CisgICAgYzAgPSBuICYgMHgxRjsgLyogY2FjaGUtbGluZSBpcyAzMiBieXRlcyAqLworICAgIGMxID0gbiA+PiA1OworICAgIHdoaWxlICggYzEtLSApIHsKKyAgICAgICAgLyogQVJNdjYgY2FuIGhhdmUgdXAgdG8gMyBtZW1vcnkgYWNjZXNzIG91dHN0YW5kaW5nICovCisgICAgICBfX2J1aWx0aW5fcHJlZmV0Y2gocCAtIChQUkVMT0FEX0RJU1RBTkNFKzEpKTsKKyAgICAgIF9fYnVpbHRpbl9wcmVmZXRjaChxIC0gKFBSRUxPQURfRElTVEFOQ0UrMSkpOworICAgICAgYXNtIHZvbGF0aWxlKCIiOjo6Im1lbW9yeSIpOworICAgICAgZm9yIChpPTAgOyBpPDMyIDsgaSsrKSB7CisgICAgICAgICotLXEgPSAqLS1wOworICAgICAgfQorICAgIH0KKyAgICB3aGlsZSAoIGMwLS0gKSB7CisgICAgICAqLS1xID0gKi0tcDsKKyAgICB9CisgIH0KKworICByZXR1cm4gZHN0OworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvbWVtcmNoci5jIGIvbGliYy9zdHJpbmcvbWVtcmNoci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE1MzNmZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9tZW1yY2hyLmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCit2b2lkICptZW1yY2hyKGNvbnN0IHZvaWQgKnMsIGludCBjLCBzaXplX3QgbikKK3sKKyAgICBpZiAobiA+IDApIHsKKyAgICAgICAgY29uc3QgY2hhciogIHAgPSAoY29uc3QgY2hhciopIHM7CisgICAgICAgIGNvbnN0IGNoYXIqICBxID0gcCArIG47CisKKyAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgIHEtLTsgaWYgKHEgPCBwIHx8IHFbMF0gPT0gYykgYnJlYWs7CisgICAgICAgICAgICBxLS07IGlmIChxIDwgcCB8fCBxWzBdID09IGMpIGJyZWFrOworICAgICAgICAgICAgcS0tOyBpZiAocSA8IHAgfHwgcVswXSA9PSBjKSBicmVhazsKKyAgICAgICAgICAgIHEtLTsgaWYgKHEgPCBwIHx8IHFbMF0gPT0gYykgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHEgPj0gcCkKKyAgICAgICAgICAgIHJldHVybiAodm9pZCopcTsKKyAgICB9CisgICAgcmV0dXJuIE5VTEw7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9tZW1zZXQuYyBiL2xpYmMvc3RyaW5nL21lbXNldC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVkOWNkZDcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9tZW1zZXQuYwpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3ZvaWQqICBtZW1zZXQodm9pZCogIGRzdCwgaW50IGMsIHNpemVfdCBuKQoreworICAgIGNoYXIqICBxICAgPSBkc3Q7CisgICAgY2hhciogIGVuZCA9IHEgKyBuOworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAocSA8IGVuZCkgYnJlYWs7ICpxKysgPSAoY2hhcikgYzsKKyAgICAgICAgaWYgKHEgPCBlbmQpIGJyZWFrOyAqcSsrID0gKGNoYXIpIGM7CisgICAgICAgIGlmIChxIDwgZW5kKSBicmVhazsgKnErKyA9IChjaGFyKSBjOworICAgICAgICBpZiAocSA8IGVuZCkgYnJlYWs7ICpxKysgPSAoY2hhcikgYzsKKyAgICB9CisKKyAgcmV0dXJuIGRzdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL21lbXN3YXAuYyBiL2xpYmMvc3RyaW5nL21lbXN3YXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNWIwYjMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvbWVtc3dhcC5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKwordm9pZCBtZW1zd2FwKHZvaWQgKm0xLCB2b2lkICptMiwgc2l6ZV90IG4pCit7CisgICAgY2hhciogIHAgICAgID0gbTE7CisgICAgY2hhciogIHBfZW5kID0gcCArIG47CisgICAgY2hhciogIHEgICAgID0gbTI7CisKKyAgICB3aGlsZSAocCA8IHBfZW5kKSB7CisgICAgICAgIGNoYXIgIHRtcCA9ICpwOworICAgICAgICAqcCA9ICpxOworICAgICAgICAqcSA9IHRtcDsKKyAgICAgICAgcCsrOworICAgICAgICBxKys7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jIGIvbGliYy9zdHJpbmcvc3RyY2FzZWNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEyZjNhMDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJjYXNlY21wLmMKQEAgLTAsMCArMSwxMDUgQEAKKy8qCSRPcGVuQlNEOiBzdHJjYXNlY21wLmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9jaGFyOworCisvKgorICogVGhpcyBhcnJheSBpcyBkZXNpZ25lZCBmb3IgbWFwcGluZyB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXIKKyAqIHRvZ2V0aGVyIGZvciBhIGNhc2UgaW5kZXBlbmRlbnQgY29tcGFyaXNvbi4gIFRoZSBtYXBwaW5ncyBhcmUKKyAqIGJhc2VkIHVwb24gYXNjaWkgY2hhcmFjdGVyIHNlcXVlbmNlcy4KKyAqLworc3RhdGljIGNvbnN0IHVfY2hhciBjaGFybWFwW10gPSB7CisJJ1wwMDAnLCAnXDAwMScsICdcMDAyJywgJ1wwMDMnLCAnXDAwNCcsICdcMDA1JywgJ1wwMDYnLCAnXDAwNycsCisJJ1wwMTAnLCAnXDAxMScsICdcMDEyJywgJ1wwMTMnLCAnXDAxNCcsICdcMDE1JywgJ1wwMTYnLCAnXDAxNycsCisJJ1wwMjAnLCAnXDAyMScsICdcMDIyJywgJ1wwMjMnLCAnXDAyNCcsICdcMDI1JywgJ1wwMjYnLCAnXDAyNycsCisJJ1wwMzAnLCAnXDAzMScsICdcMDMyJywgJ1wwMzMnLCAnXDAzNCcsICdcMDM1JywgJ1wwMzYnLCAnXDAzNycsCisJJ1wwNDAnLCAnXDA0MScsICdcMDQyJywgJ1wwNDMnLCAnXDA0NCcsICdcMDQ1JywgJ1wwNDYnLCAnXDA0NycsCisJJ1wwNTAnLCAnXDA1MScsICdcMDUyJywgJ1wwNTMnLCAnXDA1NCcsICdcMDU1JywgJ1wwNTYnLCAnXDA1NycsCisJJ1wwNjAnLCAnXDA2MScsICdcMDYyJywgJ1wwNjMnLCAnXDA2NCcsICdcMDY1JywgJ1wwNjYnLCAnXDA2NycsCisJJ1wwNzAnLCAnXDA3MScsICdcMDcyJywgJ1wwNzMnLCAnXDA3NCcsICdcMDc1JywgJ1wwNzYnLCAnXDA3NycsCisJJ1wxMDAnLCAnXDE0MScsICdcMTQyJywgJ1wxNDMnLCAnXDE0NCcsICdcMTQ1JywgJ1wxNDYnLCAnXDE0NycsCisJJ1wxNTAnLCAnXDE1MScsICdcMTUyJywgJ1wxNTMnLCAnXDE1NCcsICdcMTU1JywgJ1wxNTYnLCAnXDE1NycsCisJJ1wxNjAnLCAnXDE2MScsICdcMTYyJywgJ1wxNjMnLCAnXDE2NCcsICdcMTY1JywgJ1wxNjYnLCAnXDE2NycsCisJJ1wxNzAnLCAnXDE3MScsICdcMTcyJywgJ1wxMzMnLCAnXDEzNCcsICdcMTM1JywgJ1wxMzYnLCAnXDEzNycsCisJJ1wxNDAnLCAnXDE0MScsICdcMTQyJywgJ1wxNDMnLCAnXDE0NCcsICdcMTQ1JywgJ1wxNDYnLCAnXDE0NycsCisJJ1wxNTAnLCAnXDE1MScsICdcMTUyJywgJ1wxNTMnLCAnXDE1NCcsICdcMTU1JywgJ1wxNTYnLCAnXDE1NycsCisJJ1wxNjAnLCAnXDE2MScsICdcMTYyJywgJ1wxNjMnLCAnXDE2NCcsICdcMTY1JywgJ1wxNjYnLCAnXDE2NycsCisJJ1wxNzAnLCAnXDE3MScsICdcMTcyJywgJ1wxNzMnLCAnXDE3NCcsICdcMTc1JywgJ1wxNzYnLCAnXDE3NycsCisJJ1wyMDAnLCAnXDIwMScsICdcMjAyJywgJ1wyMDMnLCAnXDIwNCcsICdcMjA1JywgJ1wyMDYnLCAnXDIwNycsCisJJ1wyMTAnLCAnXDIxMScsICdcMjEyJywgJ1wyMTMnLCAnXDIxNCcsICdcMjE1JywgJ1wyMTYnLCAnXDIxNycsCisJJ1wyMjAnLCAnXDIyMScsICdcMjIyJywgJ1wyMjMnLCAnXDIyNCcsICdcMjI1JywgJ1wyMjYnLCAnXDIyNycsCisJJ1wyMzAnLCAnXDIzMScsICdcMjMyJywgJ1wyMzMnLCAnXDIzNCcsICdcMjM1JywgJ1wyMzYnLCAnXDIzNycsCisJJ1wyNDAnLCAnXDI0MScsICdcMjQyJywgJ1wyNDMnLCAnXDI0NCcsICdcMjQ1JywgJ1wyNDYnLCAnXDI0NycsCisJJ1wyNTAnLCAnXDI1MScsICdcMjUyJywgJ1wyNTMnLCAnXDI1NCcsICdcMjU1JywgJ1wyNTYnLCAnXDI1NycsCisJJ1wyNjAnLCAnXDI2MScsICdcMjYyJywgJ1wyNjMnLCAnXDI2NCcsICdcMjY1JywgJ1wyNjYnLCAnXDI2NycsCisJJ1wyNzAnLCAnXDI3MScsICdcMjcyJywgJ1wyNzMnLCAnXDI3NCcsICdcMjc1JywgJ1wyNzYnLCAnXDI3NycsCisJJ1wzMDAnLCAnXDMwMScsICdcMzAyJywgJ1wzMDMnLCAnXDMwNCcsICdcMzA1JywgJ1wzMDYnLCAnXDMwNycsCisJJ1wzMTAnLCAnXDMxMScsICdcMzEyJywgJ1wzMTMnLCAnXDMxNCcsICdcMzE1JywgJ1wzMTYnLCAnXDMxNycsCisJJ1wzMjAnLCAnXDMyMScsICdcMzIyJywgJ1wzMjMnLCAnXDMyNCcsICdcMzI1JywgJ1wzMjYnLCAnXDMyNycsCisJJ1wzMzAnLCAnXDMzMScsICdcMzMyJywgJ1wzMzMnLCAnXDMzNCcsICdcMzM1JywgJ1wzMzYnLCAnXDMzNycsCisJJ1wzNDAnLCAnXDM0MScsICdcMzQyJywgJ1wzNDMnLCAnXDM0NCcsICdcMzQ1JywgJ1wzNDYnLCAnXDM0NycsCisJJ1wzNTAnLCAnXDM1MScsICdcMzUyJywgJ1wzNTMnLCAnXDM1NCcsICdcMzU1JywgJ1wzNTYnLCAnXDM1NycsCisJJ1wzNjAnLCAnXDM2MScsICdcMzYyJywgJ1wzNjMnLCAnXDM2NCcsICdcMzY1JywgJ1wzNjYnLCAnXDM2NycsCisJJ1wzNzAnLCAnXDM3MScsICdcMzcyJywgJ1wzNzMnLCAnXDM3NCcsICdcMzc1JywgJ1wzNzYnLCAnXDM3NycsCit9OworCitpbnQKK3N0cmNhc2VjbXAoY29uc3QgY2hhciAqczEsIGNvbnN0IGNoYXIgKnMyKQoreworCWNvbnN0IHVfY2hhciAqY20gPSBjaGFybWFwOworCWNvbnN0IHVfY2hhciAqdXMxID0gKGNvbnN0IHVfY2hhciAqKXMxOworCWNvbnN0IHVfY2hhciAqdXMyID0gKGNvbnN0IHVfY2hhciAqKXMyOworCisJd2hpbGUgKGNtWyp1czFdID09IGNtWyp1czIrK10pCisJCWlmICgqdXMxKysgPT0gJ1wwJykKKwkJCXJldHVybiAoMCk7CisJcmV0dXJuIChjbVsqdXMxXSAtIGNtWyotLXVzMl0pOworfQorCitpbnQKK3N0cm5jYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMiwgc2l6ZV90IG4pCit7CisJaWYgKG4gIT0gMCkgeworCQljb25zdCB1X2NoYXIgKmNtID0gY2hhcm1hcDsKKwkJY29uc3QgdV9jaGFyICp1czEgPSAoY29uc3QgdV9jaGFyICopczE7CisJCWNvbnN0IHVfY2hhciAqdXMyID0gKGNvbnN0IHVfY2hhciAqKXMyOworCisJCWRvIHsKKwkJCWlmIChjbVsqdXMxXSAhPSBjbVsqdXMyKytdKQorCQkJCXJldHVybiAoY21bKnVzMV0gLSBjbVsqLS11czJdKTsKKwkJCWlmICgqdXMxKysgPT0gJ1wwJykKKyAgICAgIGJyZWFrOworCQl9IHdoaWxlICgtLW4gIT0gMCk7CisgIH0KKwlyZXR1cm4gKDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jIGIvbGliYy9zdHJpbmcvc3RyY2FzZXN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhNzRjMDEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJjYXNlc3RyLmMKQEAgLTAsMCArMSw2MCBAQAorLyoJJE9wZW5CU0Q6IHN0cmNhc2VzdHIuYyx2IDEuMyAyMDA2LzAzLzMxIDA1OjM0OjU1IGRlcmFhZHQgRXhwICQJKi8KKy8qCSROZXRCU0Q6IHN0cmNhc2VzdHIuYyx2IDEuMiAyMDA1LzAyLzA5IDIxOjM1OjQ3IGtsZWluayBFeHAgJAkqLworCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxjdHlwZS5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBvZiBmaW5kIGluIHMsIGlnbm9yZSBjYXNlLgorICovCitjaGFyICoKK3N0cmNhc2VzdHIoY29uc3QgY2hhciAqcywgY29uc3QgY2hhciAqZmluZCkKK3sKKwljaGFyIGMsIHNjOworCXNpemVfdCBsZW47CisKKwlpZiAoKGMgPSAqZmluZCsrKSAhPSAwKSB7CisJCWMgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpOworCQlsZW4gPSBzdHJsZW4oZmluZCk7CisJCWRvIHsKKwkJCWRvIHsKKwkJCQlpZiAoKHNjID0gKnMrKykgPT0gMCkKKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCX0gd2hpbGUgKChjaGFyKXRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpc2MpICE9IGMpOworCQl9IHdoaWxlIChzdHJuY2FzZWNtcChzLCBmaW5kLCBsZW4pICE9IDApOworCQlzLS07CisJfQorCXJldHVybiAoKGNoYXIgKilzKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNhdC5jIGIvbGliYy9zdHJpbmcvc3RyY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2NlYTUyMgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmNhdC5jCkBAIC0wLDAgKzEsNTEgQEAKKy8qCSRPcGVuQlNEOiBzdHJjYXQuYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKF9TVEFOREFMT05FKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaWIvbGlia2Vybi9saWJrZXJuLmg+CisjZW5kaWYKKworI2lmIGRlZmluZWQoQVBJV0FSTikKK19fd2Fybl9yZWZlcmVuY2VzKHN0cmNhdCwKKyAgICAid2FybmluZzogc3RyY2F0KCkgaXMgYWxtb3N0IGFsd2F5cyBtaXN1c2VkLCBwbGVhc2UgdXNlIHN0cmxjYXQoKSIpOworI2VuZGlmCisKK2NoYXIgKgorc3RyY2F0KGNoYXIgKnMsIGNvbnN0IGNoYXIgKmFwcGVuZCkKK3sKKwljaGFyICpzYXZlID0gczsKKworCWZvciAoOyAqczsgKytzKTsKKwl3aGlsZSAoKCpzKysgPSAqYXBwZW5kKyspICE9ICdcMCcpOworCXJldHVybihzYXZlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmNoci5jIGIvbGliYy9zdHJpbmcvc3RyY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTMzNjk0YwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmNoci5jCkBAIC0wLDAgKzEsNDMgQEAKKy8qCSRPcGVuQlNEOiBpbmRleC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RyY2hyKGNvbnN0IGNoYXIgKnAsIGludCBjaCkKK3sKKwlmb3IgKDs7ICsrcCkgeworCQlpZiAoKnAgPT0gY2gpCisJCQlyZXR1cm4oKGNoYXIgKilwKTsKKwkJaWYgKCEqcCkKKwkJCXJldHVybigoY2hhciAqKU5VTEwpOworICB9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY21wLmMgYi9saWJjL3N0cmluZy9zdHJjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MTZmZDExCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY21wLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHN0cmNtcC5jLHYgMS43IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2VuZGlmCisKKy8qCisgKiBDb21wYXJlIHN0cmluZ3MuCisgKi8KK2ludAorc3RyY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwl3aGlsZSAoKnMxID09ICpzMisrKQorCQlpZiAoKnMxKysgPT0gMCkKKwkJCXJldHVybiAoMCk7CisJcmV0dXJuICgqKHVuc2lnbmVkIGNoYXIgKilzMSAtICoodW5zaWduZWQgY2hhciAqKS0tczIpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY3B5LmMgYi9saWJjL3N0cmluZy9zdHJjcHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjIxZDY3Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RyY3B5LmMKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IHN0cmNweS5jLHYgMS44IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RyY3B5KGNoYXIgKnRvLCBjb25zdCBjaGFyICpmcm9tKQoreworCWNoYXIgKnNhdmUgPSB0bzsKKworCWZvciAoOyAoKnRvID0gKmZyb20pICE9ICdcMCc7ICsrZnJvbSwgKyt0byk7CisJcmV0dXJuKHNhdmUpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyY3Nwbi5jIGIvbGliYy9zdHJpbmcvc3RyY3Nwbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlYjIzMzYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJjc3BuLmMKQEAgLTAsMCArMSw1OCBAQAorLyoJJE9wZW5CU0Q6IHN0cmNzcG4uYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKi0KKyAqIENvcHlyaWdodCAoYykgMTk5MCBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBDaHJpcyBUb3Jlay4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogU3BhbiB0aGUgY29tcGxlbWVudCBvZiBzdHJpbmcgczIuCisgKi8KK3NpemVfdAorc3RyY3Nwbihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJY29uc3QgY2hhciAqcCwgKnNwYW5wOworCWNoYXIgYywgc2M7CisKKwkvKgorCSAqIFN0b3AgYXMgc29vbiBhcyB3ZSBmaW5kIGFueSBjaGFyYWN0ZXIgZnJvbSBzMi4gIE5vdGUgdGhhdCB0aGVyZQorCSAqIG11c3QgYmUgYSBOVUwgaW4gczI7IGl0IHN1ZmZpY2VzIHRvIHN0b3Agd2hlbiB3ZSBmaW5kIHRoYXQsIHRvby4KKwkgKi8KKwlmb3IgKHAgPSBzMTs7KSB7CisJCWMgPSAqcCsrOworCQlzcGFucCA9IHMyOworCQlkbyB7CisJCQlpZiAoKHNjID0gKnNwYW5wKyspID09IGMpCisJCQkJcmV0dXJuIChwIC0gMSAtIHMxKTsKKwkJfSB3aGlsZSAoc2MgIT0gMCk7CisJfQorCS8qIE5PVFJFQUNIRUQgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmR1cC5jIGIvbGliYy9zdHJpbmcvc3RyZHVwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZhYTFlMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmR1cC5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCSRPcGVuQlNEOiBzdHJkdXAuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworY2hhciAqCitzdHJkdXAoY29uc3QgY2hhciAqc3RyKQoreworCXNpemVfdCBzaXo7CisJY2hhciAqY29weTsKKworCXNpeiA9IHN0cmxlbihzdHIpICsgMTsKKwlpZiAoKGNvcHkgPSBtYWxsb2Moc2l6KSkgPT0gTlVMTCkKKwkJcmV0dXJuKE5VTEwpOworCSh2b2lkKW1lbWNweShjb3B5LCBzdHIsIHNpeik7CisJcmV0dXJuKGNvcHkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RyZXJyb3IuYyBiL2xpYmMvc3RyaW5nL3N0cmVycm9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjJhZTAwMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmVycm9yLmMKQEAgLTAsMCArMSw0MSBAQAorLyoJJE9wZW5CU0Q6IHN0cmVycm9yLmMsdiAxLjcgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisKK2NoYXIgKgorc3RyZXJyb3IoaW50IG51bSkKK3sKKwlzdGF0aWMgY2hhciBidWZbMjU2XTsKKworCSh2b2lkKXN0cmVycm9yX3IobnVtLCBidWYsIHNpemVvZihidWYpKTsKKwlyZXR1cm4gKGJ1Zik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJlcnJvcl9yLmMgYi9saWJjL3N0cmluZy9zdHJlcnJvcl9yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQzZDQxNwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmVycm9yX3IuYwpAQCAtMCwwICsxLDE2MyBAQAorLyogJE9wZW5CU0Q6IHN0cmVycm9yX3IuYyx2IDEuNiAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKiBQdWJsaWMgRG9tYWluIDxtYXJjQHNuYWZ1Lm9yZz4gKi8KKworI2RlZmluZSBzeXNfc2lnbGlzdAlfc3lzX3NpZ2xpc3QKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgaW50ICAgICAgICAgICBjb2RlOworICBjb25zdCBjaGFyKiAgIG1zZzsKK30gQ29kZVN0cmluZzsKKworc3RhdGljIGNvbnN0IGNoYXIqCitfX2NvZGVfc3RyaW5nX2xvb2t1cCggY29uc3QgQ29kZVN0cmluZyogIHN0cmluZ3MsCisgICAgICAgICAgICAgICAgICAgICAgaW50ICAgICAgICAgICAgICAgIGNvZGUgKQoreworICAgIGludCAgbm4gPSAwOworCisgICAgZm9yICg7OykKKyAgICB7CisgICAgICAgIGlmIChzdHJpbmdzW25uXS5jb2RlID09IDApCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAoc3RyaW5nc1tubl0uY29kZSA9PSBjb2RlKQorICAgICAgICAgICAgcmV0dXJuIHN0cmluZ3Nbbm5dLm1zZzsKKworICAgICAgICBubisrOworICAgIH0KKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdGF0aWMgY29uc3QgQ29kZVN0cmluZyAgX3N5c19lcnJvcl9zdHJpbmdzW10gPQoreworI2RlZmluZSAgX19CSU9OSUNfRVJSREVGKHgseSx6KSAgeyB5LCB6IH0sCisjaW5jbHVkZSA8c3lzL19lcnJkZWZzLmg+CisgICAgeyAwLCBOVUxMIH0KK307CisKK3N0YXRpYyBzaXplX3QKK19fZGlnaXRzMTAodW5zaWduZWQgaW50IG51bSkKK3sKKwlzaXplX3QgaSA9IDA7CisKKwlkbyB7CisJCW51bSAvPSAxMDsKKwkJaSsrOworCX0gd2hpbGUgKG51bSAhPSAwKTsKKworCXJldHVybiBpOworfQorCitzdGF0aWMgaW50CitfX2l0b2EoaW50IG51bSwgaW50IHNpZ24sIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHN0YXJ0LCBzaXplX3QgZW5kKQoreworCXNpemVfdCBwb3M7CisJdW5zaWduZWQgaW50IGE7CisJaW50IG5lZzsKKworCWlmIChzaWduICYmIG51bSA8IDApIHsKKwkJYSA9IC1udW07CisJCW5lZyA9IDE7CisJfQorCWVsc2UgeworCQlhID0gbnVtOworCQluZWcgPSAwOworCX0KKworCXBvcyA9IHN0YXJ0ICsgX19kaWdpdHMxMChhKTsKKwlpZiAobmVnKQorCSAgICBwb3MrKzsKKworCWlmIChwb3MgPCBlbmQpCisJCWJ1ZmZlcltwb3NdID0gJ1wwJzsKKwllbHNlCisJCXJldHVybiBFUkFOR0U7CisJcG9zLS07CisJZG8geworCQlidWZmZXJbcG9zXSA9IChhICUgMTApICsgJzAnOworCQlwb3MtLTsKKwkJYSAvPSAxMDsKKwl9IHdoaWxlIChhICE9IDApOworCWlmIChuZWcpCisJCWJ1ZmZlcltwb3NdID0gJy0nOworCXJldHVybiAwOworfQorCisKK2ludAorc3RyZXJyb3JfcihpbnQgZXJybnVtLCBjaGFyICpzdHJlcnJidWYsIHNpemVfdCBidWZsZW4pCit7CisgICAgaW50ICAgICAgICAgIHNhdmVfZXJybm87CisgICAgaW50ICAgICAgICAgIGxlbiwgcmV0ID0gMDsKKyAgICBjb25zdCBjaGFyKiAgbXNnOworCisgICAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgIG1zZyAgICAgICAgPSBfX2NvZGVfc3RyaW5nX2xvb2t1cCggX3N5c19lcnJvcl9zdHJpbmdzLCBlcnJudW0gKTsKKyAgICBpZiAobXNnICE9IE5VTEwpIHsKKyAgICAgICAgbGVuID0gc3RybGNweShzdHJlcnJidWYsIG1zZywgYnVmbGVuKTsKKyAgICAgICAgaWYgKChzaXplX3QpbGVuID49IGJ1ZmxlbikKKyAgICAgICAgICAgIHJldCA9IEVSQU5HRTsKKyAgICB9IGVsc2UgeworICAgICAgICBsZW4gPSBzdHJsY3B5KHN0cmVycmJ1ZiwgIlVua25vd24gZXJyb3I6ICIsIGJ1Zmxlbik7CisgICAgICAgIGlmICgoc2l6ZV90KWxlbiA+PSBidWZsZW4pCisgICAgICAgICAgICByZXQgPSBFUkFOR0U7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgaW50ICByZXQgPSBfX2l0b2EoZXJybnVtLCAxLCBzdHJlcnJidWYsIGxlbiwgYnVmbGVuKTsKKworICAgICAgICAgICAgaWYgKHJldCA9PSAwKQorICAgICAgICAgICAgICAgIHJldCA9IEVJTlZBTDsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gcmV0OworfQorCisjaWYgMAorc3RhdGljIGNvbnN0IENvZGVTdHJpbmcgIF9zeXNfc2lnbmFsX3N0cmluZ3NbXSA9Cit7CisjZGVmaW5lICBTSUdERUYoeCx5LHopICB7IHksIHogfSwKKyNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KK307CisKKworc3RhdGljIGludAorX19udW0yc3RyaW5nKGludCBudW0sIGludCBzaWduLCBpbnQgc2V0aWQsIGNoYXIgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbiwKKyAgICBjaGFyICogbGlzdFtdLCBzaXplX3QgbWF4LCBjb25zdCBjaGFyICpkZWYpCit7CisJaW50IHJldCA9IDA7CisJc2l6ZV90IGxlbjsKKworCWlmICgwIDw9IG51bSAmJiBudW0gPCBtYXgpIHsKKwkJbGVuID0gc3RybGNweShidWYsIGRlZiwgYnVmbGVuKTsKKwkJaWYgKGxlbiA+PSBidWZsZW4pCisJCQlyZXQgPSBFUkFOR0U7CisJfSBlbHNlIHsKKwkJbGVuID0gc3RybGNweShidWYsIGRlZiwgYnVmbGVuKTsKKwkJaWYgKGxlbiA+PSBidWZsZW4pCisJCQlyZXQgPSBFUkFOR0U7CisJCWVsc2UgeworCQkJcmV0ID0gX19pdG9hKG51bSwgc2lnbiwgYnVmLCBsZW4sIGJ1Zmxlbik7CisJCQlpZiAocmV0ID09IDApCisJCQkJcmV0ID0gRUlOVkFMOworCQl9CisJfQorCisJcmV0dXJuIHJldDsKK30KKworCisKKyNkZWZpbmUgVVNJR1BSRUZJWCAiVW5rbm93biBzaWduYWw6ICIKKworY2hhciAqCitfX3N0cnNpZ25hbChpbnQgbnVtLCBjaGFyICpidWYpCit7CisJX19udW0yc3RyaW5nKG51bSwgMCwgMiwgYnVmLCBOTF9URVhUTUFYLCAoY2hhciAqKilzeXNfc2lnbGlzdCwgTlNJRywKKwkgICAgVVNJR1BSRUZJWCk7CisJcmV0dXJuIGJ1ZjsKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybGNhdC5jIGIvbGliYy9zdHJpbmcvc3RybGNhdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFkMjIxNWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJsY2F0LmMKQEAgLTAsMCArMSw1NSBAQAorLyoJJE9wZW5CU0Q6IHN0cmxjYXQuYyx2IDEuMTMgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJAkqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk4IFRvZGQgQy4gTWlsbGVyIDxUb2RkLk1pbGxlckBjb3VydGVzYW4uY29tPgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgVEhFIEFVVEhPUiBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUIE9GCisgKiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIEFwcGVuZHMgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXogKHVubGlrZSBzdHJuY2F0LCBzaXogaXMgdGhlCisgKiBmdWxsIHNpemUgb2YgZHN0LCBub3Qgc3BhY2UgbGVmdCkuICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKKyAqIHdpbGwgYmUgY29waWVkLiAgQWx3YXlzIE5VTCB0ZXJtaW5hdGVzICh1bmxlc3Mgc2l6IDw9IHN0cmxlbihkc3QpKS4KKyAqIFJldHVybnMgc3RybGVuKHNyYykgKyBNSU4oc2l6LCBzdHJsZW4oaW5pdGlhbCBkc3QpKS4KKyAqIElmIHJldHZhbCA+PSBzaXosIHRydW5jYXRpb24gb2NjdXJyZWQuCisgKi8KK3NpemVfdAorc3RybGNhdChjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeikKK3sKKwljaGFyICpkID0gZHN0OworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisJc2l6ZV90IG4gPSBzaXo7CisJc2l6ZV90IGRsZW47CisKKwkvKiBGaW5kIHRoZSBlbmQgb2YgZHN0IGFuZCBhZGp1c3QgYnl0ZXMgbGVmdCBidXQgZG9uJ3QgZ28gcGFzdCBlbmQgKi8KKwl3aGlsZSAobi0tICE9IDAgJiYgKmQgIT0gJ1wwJykKKwkJZCsrOworCWRsZW4gPSBkIC0gZHN0OworCW4gPSBzaXogLSBkbGVuOworCisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuKGRsZW4gKyBzdHJsZW4ocykpOworCXdoaWxlICgqcyAhPSAnXDAnKSB7CisJCWlmIChuICE9IDEpIHsKKwkJCSpkKysgPSAqczsKKwkJCW4tLTsKKyAgfQorCQlzKys7CisgIH0KKwkqZCA9ICdcMCc7CisKKwlyZXR1cm4oZGxlbiArIChzIC0gc3JjKSk7CS8qIGNvdW50IGRvZXMgbm90IGluY2x1ZGUgTlVMICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJsY3B5LmMgYi9saWJjL3N0cmluZy9zdHJsY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzgyNzdlYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmxjcHkuYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogc3RybGNweS5jLHYgMS4xMSAyMDA2LzA1LzA1IDE1OjI3OjM4IG1pbGxlcnQgRXhwICQJKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk5OCBUb2RkIEMuIE1pbGxlciA8VG9kZC5NaWxsZXJAY291cnRlc2FuLmNvbT4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIFRIRSBBVVRIT1IgRElTQ0xBSU1TIEFMTCBXQVJSQU5USUVTCisgKiBXSVRIIFJFR0FSRCBUTyBUSElTIFNPRlRXQVJFIElOQ0xVRElORyBBTEwgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUgorICogQU5ZIFNQRUNJQUwsIERJUkVDVCwgSU5ESVJFQ1QsIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyBPUiBBTlkgREFNQUdFUworICogV0hBVFNPRVZFUiBSRVNVTFRJTkcgRlJPTSBMT1NTIE9GIFVTRSwgREFUQSBPUiBQUk9GSVRTLCBXSEVUSEVSIElOIEFOCisgKiBBQ1RJT04gT0YgQ09OVFJBQ1QsIE5FR0xJR0VOQ0UgT1IgT1RIRVIgVE9SVElPVVMgQUNUSU9OLCBBUklTSU5HIE9VVCBPRgorICogT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBVU0UgT1IgUEVSRk9STUFOQ0UgT0YgVEhJUyBTT0ZUV0FSRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBDb3B5IHNyYyB0byBzdHJpbmcgZHN0IG9mIHNpemUgc2l6LiAgQXQgbW9zdCBzaXotMSBjaGFyYWN0ZXJzCisgKiB3aWxsIGJlIGNvcGllZC4gIEFsd2F5cyBOVUwgdGVybWluYXRlcyAodW5sZXNzIHNpeiA9PSAwKS4KKyAqIFJldHVybnMgc3RybGVuKHNyYyk7IGlmIHJldHZhbCA+PSBzaXosIHRydW5jYXRpb24gb2NjdXJyZWQuCisgKi8KK3NpemVfdAorc3RybGNweShjaGFyICpkc3QsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNpeikKK3sKKwljaGFyICpkID0gZHN0OworCWNvbnN0IGNoYXIgKnMgPSBzcmM7CisJc2l6ZV90IG4gPSBzaXo7CisKKwkvKiBDb3B5IGFzIG1hbnkgYnl0ZXMgYXMgd2lsbCBmaXQgKi8KKwlpZiAobiAhPSAwKSB7CisJCXdoaWxlICgtLW4gIT0gMCkgeworCQkJaWYgKCgqZCsrID0gKnMrKykgPT0gJ1wwJykKKwkJCQlicmVhazsKKwkJfQorICB9CisKKwkvKiBOb3QgZW5vdWdoIHJvb20gaW4gZHN0LCBhZGQgTlVMIGFuZCB0cmF2ZXJzZSByZXN0IG9mIHNyYyAqLworCWlmIChuID09IDApIHsKKwkJaWYgKHNpeiAhPSAwKQorCQkJKmQgPSAnXDAnOwkJLyogTlVMLXRlcm1pbmF0ZSBkc3QgKi8KKwkJd2hpbGUgKCpzKyspCisJCQk7CisJfQorCisJcmV0dXJuKHMgLSBzcmMgLSAxKTsJLyogY291bnQgZG9lcyBub3QgaW5jbHVkZSBOVUwgKi8KK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cmxlbi5jIGIvbGliYy9zdHJpbmcvc3RybGVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTJkOWVjNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cmxlbi5jCkBAIC0wLDAgKzEsNDcgQEAKKy8qCSRPcGVuQlNEOiBzdHJsZW4uYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2lmICFkZWZpbmVkKF9LRVJORUwpICYmICFkZWZpbmVkKF9TVEFOREFMT05FKQorI2luY2x1ZGUgPHN0cmluZy5oPgorI2Vsc2UKKyNpbmNsdWRlIDxsaWIvbGlia2Vybi9saWJrZXJuLmg+CisjZW5kaWYKKworc2l6ZV90CitzdHJsZW4oY29uc3QgY2hhciAqc3RyKQoreworCWNvbnN0IGNoYXIgKnM7CisKKwlmb3IgKHMgPSBzdHI7ICpzOyArK3MpCisJCTsKKwlyZXR1cm4gKHMgLSBzdHIpOworfQorCmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuY2F0LmMgYi9saWJjL3N0cmluZy9zdHJuY2F0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNiOTQwNQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cm5jYXQuYwpAQCAtMCwwICsxLDU3IEBACisvKgkkT3BlbkJTRDogc3RybmNhdC5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTkwIFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFRoaXMgY29kZSBpcyBkZXJpdmVkIGZyb20gc29mdHdhcmUgY29udHJpYnV0ZWQgdG8gQmVya2VsZXkgYnkKKyAqIENocmlzIFRvcmVrLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKy8qCisgKiBDb25jYXRlbmF0ZSBzcmMgb24gdGhlIGVuZCBvZiBkc3QuICBBdCBtb3N0IHN0cmxlbihkc3QpK24rMSBieXRlcworICogYXJlIHdyaXR0ZW4gYXQgZHN0IChhdCBtb3N0IG4rMSBieXRlcyBiZWluZyBhcHBlbmRlZCkuICBSZXR1cm4gZHN0LgorICovCitjaGFyICoKK3N0cm5jYXQoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworCWlmIChuICE9IDApIHsKKwkJY2hhciAqZCA9IGRzdDsKKwkJY29uc3QgY2hhciAqcyA9IHNyYzsKKworCQl3aGlsZSAoKmQgIT0gMCkKKwkJCWQrKzsKKwkJZG8geworCQkJaWYgKCgqZCA9ICpzKyspID09IDApCisJCQkJYnJlYWs7CisJCQlkKys7CisJCX0gd2hpbGUgKC0tbiAhPSAwKTsKKwkJKmQgPSAwOworICB9CisJcmV0dXJuIChkc3QpOworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RybmNtcC5jIGIvbGliYy9zdHJpbmcvc3RybmNtcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkYTQxYWIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJuY21wLmMKQEAgLTAsMCArMSw1MSBAQAorLyoJJE9wZW5CU0Q6IHN0cm5jbXAuYyx2IDEuNyAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2VuZGlmCisKK2ludAorc3RybmNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHNpemVfdCBuKQoreworCisJaWYgKG4gPT0gMCkKKwkJcmV0dXJuICgwKTsKKwlkbyB7CisJCWlmICgqczEgIT0gKnMyKyspCisJCQlyZXR1cm4gKCoodW5zaWduZWQgY2hhciAqKXMxIC0gKih1bnNpZ25lZCBjaGFyICopLS1zMik7CisJCWlmICgqczErKyA9PSAwKQorICAgICAgYnJlYWs7CisJfSB3aGlsZSAoLS1uICE9IDApOworCXJldHVybiAoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJuY3B5LmMgYi9saWJjL3N0cmluZy9zdHJuY3B5LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjkxMDkxYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cm5jcHkuYwpAQCAtMCwwICsxLDYyIEBACisvKgkkT3BlbkJTRDogc3RybmNweS5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpZiAhZGVmaW5lZChfS0VSTkVMKSAmJiAhZGVmaW5lZChfU1RBTkRBTE9ORSkKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNlbHNlCisjaW5jbHVkZSA8bGliL2xpYmtlcm4vbGlia2Vybi5oPgorI2VuZGlmCisKKy8qCisgKiBDb3B5IHNyYyB0byBkc3QsIHRydW5jYXRpbmcgb3IgbnVsbC1wYWRkaW5nIHRvIGFsd2F5cyBjb3B5IG4gYnl0ZXMuCisgKiBSZXR1cm4gZHN0LgorICovCitjaGFyICoKK3N0cm5jcHkoY2hhciAqZHN0LCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBuKQoreworCWlmIChuICE9IDApIHsKKwkJY2hhciAqZCA9IGRzdDsKKwkJY29uc3QgY2hhciAqcyA9IHNyYzsKKworCQlkbyB7CisJCQlpZiAoKCpkKysgPSAqcysrKSA9PSAwKSB7CisJCQkJLyogTlVMIHBhZCB0aGUgcmVtYWluaW5nIG4tMSBieXRlcyAqLworCQkJCXdoaWxlICgtLW4gIT0gMCkKKwkJCQkJKmQrKyA9IDA7CisgICAgICBicmVhazsKKyAgfQorCQl9IHdoaWxlICgtLW4gIT0gMCk7CisJfQorCXJldHVybiAoZHN0KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cm5kdXAuYyBiL2xpYmMvc3RyaW5nL3N0cm5kdXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYTlhNTVmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RybmR1cC5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworY2hhciogIHN0cm5kdXAoY29uc3QgY2hhciogIHMsIHNpemVfdCBuKQoreworICAgIHNpemVfdCAgc2xlbiA9IChzaXplX3Qpc3RybGVuKHMpOworICAgIGludCAgICAgbGVuICA9IHNsZW4gPCBuID8gc2xlbiA6IG47CisgICAgY2hhciogICBjb3B5ID0gbWFsbG9jKGxlbisxKTsKKworICAgIGlmIChjb3B5KSB7CisgICAgICAgIG1lbWNweSggY29weSwgcywgbGVuICk7CisgICAgICAgIGNvcHlbbGVuXSA9IDA7CisgICAgfQorICAgIHJldHVybiBjb3B5OworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Rybmxlbi5jIGIvbGliYy9zdHJpbmcvc3Rybmxlbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJjNmY2MGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJubGVuLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN0cmluZy5oPgorCitzaXplX3QgIHN0cm5sZW4oY29uc3QgY2hhciogIHN0ciwgc2l6ZV90ICBtYXhsZW4pCit7CisgICAgY2hhciogIHAgPSBtZW1jaHIoc3RyLCAwLCBtYXhsZW4pOworCisgICAgaWYgKHAgPT0gTlVMTCkKKyAgICAgICAgcmV0dXJuIG1heGxlbjsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAocCAtIHN0cik7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJwYnJrLmMgYi9saWJjL3N0cmluZy9zdHJwYnJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJhMzc5NgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cnBicmsuYwpAQCAtMCwwICsxLDQ4IEBACisvKgkkT3BlbkJTRDogc3RycGJyay5jLHYgMS41IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQgKi8KKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogRmluZCB0aGUgZmlyc3Qgb2NjdXJyZW5jZSBpbiBzMSBvZiBhIGNoYXJhY3RlciBpbiBzMiAoZXhjbHVkaW5nIE5VTCkuCisgKi8KK2NoYXIgKgorc3RycGJyayhjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJY29uc3QgY2hhciAqc2NhbnA7CisJaW50IGMsIHNjOworICAKKwl3aGlsZSAoKGMgPSAqczErKykgIT0gMCkgeworCQlmb3IgKHNjYW5wID0gczI7IChzYyA9ICpzY2FucCsrKSAhPSAwOykKKwkJCWlmIChzYyA9PSBjKQorCQkJCXJldHVybiAoKGNoYXIgKikoczEgLSAxKSk7CisJfQorCXJldHVybiAoTlVMTCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJyY2hyLmMgYi9saWJjL3N0cmluZy9zdHJyY2hyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjgwMDc4MQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cnJjaHIuYwpAQCAtMCwwICsxLDQ1IEBACisvKgkkT3BlbkJTRDogcmluZGV4LmMsdiAxLjYgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK2NoYXIgKgorc3RycmNocihjb25zdCBjaGFyICpwLCBpbnQgY2gpCit7CisJY2hhciAqc2F2ZTsKKyAgCisJZm9yIChzYXZlID0gTlVMTDs7ICsrcCkgeworCQlpZiAoKnAgPT0gY2gpCisJCQlzYXZlID0gKGNoYXIgKilwOworCQlpZiAoISpwKQorCQkJcmV0dXJuKHNhdmUpOworICB9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3Ryc2VwLmMgYi9saWJjL3N0cmluZy9zdHJzZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iY2NhNjgxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3Ryc2VwLmMKQEAgLTAsMCArMSw3MSBAQAorLyoJJE9wZW5CU0Q6IHN0cnNlcC5jLHYgMS42IDIwMDUvMDgvMDggMDg6MDU6MzcgZXNwaWUgRXhwICQJKi8KKworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworLyoKKyAqIEdldCBuZXh0IHRva2VuIGZyb20gc3RyaW5nICpzdHJpbmdwLCB3aGVyZSB0b2tlbnMgYXJlIHBvc3NpYmx5LWVtcHR5CisgKiBzdHJpbmdzIHNlcGFyYXRlZCBieSBjaGFyYWN0ZXJzIGZyb20gZGVsaW0uICAKKyAqCisgKiBXcml0ZXMgTlVMcyBpbnRvIHRoZSBzdHJpbmcgYXQgKnN0cmluZ3AgdG8gZW5kIHRva2Vucy4KKyAqIGRlbGltIG5lZWQgbm90IHJlbWFpbiBjb25zdGFudCBmcm9tIGNhbGwgdG8gY2FsbC4KKyAqIE9uIHJldHVybiwgKnN0cmluZ3AgcG9pbnRzIHBhc3QgdGhlIGxhc3QgTlVMIHdyaXR0ZW4gKGlmIHRoZXJlIG1pZ2h0CisgKiBiZSBmdXJ0aGVyIHRva2VucyksIG9yIGlzIE5VTEwgKGlmIHRoZXJlIGFyZSBkZWZpbml0ZWx5IG5vIG1vcmUgdG9rZW5zKS4KKyAqCisgKiBJZiAqc3RyaW5ncCBpcyBOVUxMLCBzdHJzZXAgcmV0dXJucyBOVUxMLgorICovCitjaGFyICoKK3N0cnNlcChjaGFyICoqc3RyaW5ncCwgY29uc3QgY2hhciAqZGVsaW0pCit7CisJY2hhciAqczsKKwljb25zdCBjaGFyICpzcGFucDsKKwlpbnQgYywgc2M7CisJY2hhciAqdG9rOworCisJaWYgKChzID0gKnN0cmluZ3ApID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJZm9yICh0b2sgPSBzOzspIHsKKwkJYyA9ICpzKys7CisJCXNwYW5wID0gZGVsaW07CisJCWRvIHsKKwkJCWlmICgoc2MgPSAqc3BhbnArKykgPT0gYykgeworCQkJCWlmIChjID09IDApCisJCQkJCXMgPSBOVUxMOworCQkJCWVsc2UKKwkJCQkJc1stMV0gPSAwOworCQkJCSpzdHJpbmdwID0gczsKKwkJCQlyZXR1cm4gKHRvayk7CisJCQl9CisJCX0gd2hpbGUgKHNjICE9IDApOworCX0KKwkvKiBOT1RSRUFDSEVEICovCit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJzcG4uYyBiL2xpYmMvc3RyaW5nL3N0cnNwbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4NTY0OWMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJzcG4uYwpAQCAtMCwwICsxLDUxIEBACisvKgkkT3BlbkJTRDogc3Ryc3BuLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCisvKgorICogU3BhbiB0aGUgc3RyaW5nIHMyIChza2lwIGNoYXJhY3RlcnMgdGhhdCBhcmUgaW4gczIpLgorICovCitzaXplX3QKK3N0cnNwbihjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIpCit7CisJY29uc3QgY2hhciAqcCA9IHMxLCAqc3BhbnA7CisJY2hhciBjLCBzYzsKKworCS8qCisJICogU2tpcCBhbnkgY2hhcmFjdGVycyBpbiBzMiwgZXhjbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBcMC4KKwkgKi8KK2NvbnQ6CisJYyA9ICpwKys7CisJZm9yIChzcGFucCA9IHMyOyAoc2MgPSAqc3BhbnArKykgIT0gMDspCisJCWlmIChzYyA9PSBjKQorCQkJZ290byBjb250OworCXJldHVybiAocCAtIDEgLSBzMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N0cmluZy9zdHJzdHIuYyBiL2xpYmMvc3RyaW5nL3N0cnN0ci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRlYmU5NmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3N0cmluZy9zdHJzdHIuYwpAQCAtMCwwICsxLDU2IEBACisvKgkkT3BlbkJTRDogc3Ryc3RyLmMsdiAxLjUgMjAwNS8wOC8wOCAwODowNTozNyBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTAgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSBjb250cmlidXRlZCB0byBCZXJrZWxleSBieQorICogQ2hyaXMgVG9yZWsuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworLyoKKyAqIEZpbmQgdGhlIGZpcnN0IG9jY3VycmVuY2Ugb2YgZmluZCBpbiBzLgorICovCitjaGFyICoKK3N0cnN0cihjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpmaW5kKQoreworCWNoYXIgYywgc2M7CisJc2l6ZV90IGxlbjsKKworCWlmICgoYyA9ICpmaW5kKyspICE9IDApIHsKKwkJbGVuID0gc3RybGVuKGZpbmQpOworCQlkbyB7CisJCQlkbyB7CisJCQkJaWYgKChzYyA9ICpzKyspID09IDApCisJCQkJCXJldHVybiAoTlVMTCk7CisJCQl9IHdoaWxlIChzYyAhPSBjKTsKKwkJfSB3aGlsZSAoc3RybmNtcChzLCBmaW5kLCBsZW4pICE9IDApOworCQlzLS07CisgICAgfQorCXJldHVybiAoKGNoYXIgKilzKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvc3RyaW5nL3N0cnRvay5jIGIvbGliYy9zdHJpbmcvc3RydG9rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGU5NjNhMAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvc3RyaW5nL3N0cnRvay5jCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODggUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyICoKK3N0cnRvayhjaGFyICpzLCBjb25zdCBjaGFyICpkZWxpbSkKK3sKKwlzdGF0aWMgY2hhciAqbGFzdDsKKworCXJldHVybiBzdHJ0b2tfcihzLCBkZWxpbSwgJmxhc3QpOworfQorCitjaGFyICoKK3N0cnRva19yKGNoYXIgKnMsIGNvbnN0IGNoYXIgKmRlbGltLCBjaGFyICoqbGFzdCkKK3sKKwljaGFyICpzcGFucDsKKwlpbnQgYywgc2M7CisJY2hhciAqdG9rOworCisKKwlpZiAocyA9PSBOVUxMICYmIChzID0gKmxhc3QpID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisKKwkvKgorCSAqIFNraXAgKHNwYW4pIGxlYWRpbmcgZGVsaW1pdGVycyAocyArPSBzdHJzcG4ocywgZGVsaW0pLCBzb3J0IG9mKS4KKwkgKi8KK2NvbnQ6CisJYyA9ICpzKys7CisJZm9yIChzcGFucCA9IChjaGFyICopZGVsaW07IChzYyA9ICpzcGFucCsrKSAhPSAwOykgeworCQlpZiAoYyA9PSBzYykKKwkJCWdvdG8gY29udDsKKwl9CisKKwlpZiAoYyA9PSAwKSB7CQkvKiBubyBub24tZGVsaW1pdGVyIGNoYXJhY3RlcnMgKi8KKwkJKmxhc3QgPSBOVUxMOworCQlyZXR1cm4gKE5VTEwpOworCX0KKwl0b2sgPSBzIC0gMTsKKworCS8qCisJICogU2NhbiB0b2tlbiAoc2NhbiBmb3IgZGVsaW1pdGVyczogcyArPSBzdHJjc3BuKHMsIGRlbGltKSwgc29ydCBvZikuCisJICogTm90ZSB0aGF0IGRlbGltIG11c3QgaGF2ZSBvbmUgTlVMOyB3ZSBzdG9wIGlmIHdlIHNlZSB0aGF0LCB0b28uCisJICovCisJZm9yICg7OykgeworCQljID0gKnMrKzsKKwkJc3BhbnAgPSAoY2hhciAqKWRlbGltOworCQlkbyB7CisJCQlpZiAoKHNjID0gKnNwYW5wKyspID09IGMpIHsKKwkJCQlpZiAoYyA9PSAwKQorCQkJCQlzID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCXNbLTFdID0gMDsKKwkJCQkqbGFzdCA9IHM7CisJCQkJcmV0dXJuICh0b2spOworCQkJfQorCQl9IHdoaWxlIChzYyAhPSAwKTsKKwl9CisJLyogTk9UUkVBQ0hFRCAqLworfQpkaWZmIC0tZ2l0IGEvbGliYy9zdHJpbmcvc3RydG90aW1ldmFsLmMgYi9saWJjL3N0cmluZy9zdHJ0b3RpbWV2YWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzEzMmVjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zdHJpbmcvc3RydG90aW1ldmFsLmMKQEAgLTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8aW50dHlwZXMuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzeXMvdGltZS5oPgorCitjaGFyICogc3RydG90aW1ldmFsIChjb25zdCBjaGFyICpzdHIsIHN0cnVjdCB0aW1ldmFsICp0cykKK3sKKyAgICBpbnQgbjsKKyAgICBjaGFyICpzLCAqczA7CisgICAgbG9uZyAgZnM7CS8qIEZyYWN0aW9uYWwgc2Vjb25kcyAqLworCisgICAgdHMtPnR2X3NlYyA9IHN0cnRvdW1heChzdHIsICZzLCAxMCk7CisgICAgZnMgPSAwOworCisgICAgaWYgKCAqcyA9PSAnLicgKSB7CisJaW50ICBjb3VudDsKKworICAgICAgICBzMCA9IHMrMTsKKworCS8qIHJlYWQgdXAgdG8gNiBkaWdpdHMgKi8KKwlmcyAgICA9IDA7CisJY291bnQgPSAwOworCXdoaWxlICggKnMgJiYgaXNkaWdpdCgqcykgKQorCXsKKyAgICAgICAgICAgIGlmICggKytjb3VudCA8IDcgKQorCSAgICAgICAgZnMgPSBmcyoxMCArICgqcyAtICcwJyk7CisJICAgIHMrKzsKKwl9CisKKwlmb3IgKCA7IGNvdW50IDwgNjsgY291bnQrKyApCisJICAgIGZzICo9IDEwOworICAgIH0KKworICAgIHRzLT50dl91c2VjID0gZnM7CisgICAgcmV0dXJuIHM7Cit9CmRpZmYgLS1naXQgYS9saWJjL3N5c2NvbW1vbi5oIGIvbGliYy9zeXNjb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MjkwMjUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy9zeXNjb21tb24uaApAQCAtMCwwICsxLDMyIEBACisvKgorICogc3lzY29tbW9uLmgKKyAqCisgKiBDb21tb24gaGVhZGVyIGZpbGUgZm9yIHN5c3RlbSBjYWxsIHN0dWJzCisgKi8KKworI2RlZmluZSBfX0lOX1NZU19DT01NT04KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zeXNjYWxsLmg+CisKKyNpbmNsdWRlIDxwb2xsLmg+CisjaW5jbHVkZSA8c2NoZWQuaD4KKyNpbmNsdWRlIDxzeXMvZGlyZW50Lmg+CisjaW5jbHVkZSA8c3lzL2tsb2cuaD4KKyNpbmNsdWRlIDxzeXMvbW1hbi5oPgorI2luY2x1ZGUgPHN5cy9yZXNvdXJjZS5oPgorI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzeXMvc3RhdC5oPgorI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8c3lzL3RpbWVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPHN5cy91dGltZS5oPgorI2luY2x1ZGUgPHN5cy91dHNuYW1lLmg+CisjaW5jbHVkZSA8c3lzL3Zmcy5oPgorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNpZmRlZiBfX2kzODZfXworIyBpbmNsdWRlIDxzeXMvdm04Ni5oPgorI2VuZGlmCmRpZmYgLS1naXQgYS9saWJjL3RocmVhZF9wcml2YXRlLmggYi9saWJjL3RocmVhZF9wcml2YXRlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzAzZjBhYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdGhyZWFkX3ByaXZhdGUuaApAQCAtMCwwICsxLDE2MiBAQAorLyogJE9wZW5CU0Q6IHRocmVhZF9wcml2YXRlLmgsdiAxLjE4IDIwMDYvMDIvMjIgMDc6MTY6MzEgb3R0byBFeHAgJCAqLworCisvKiBQVUJMSUMgRE9NQUlOOiBObyBSaWdodHMgUmVzZXJ2ZWQuIE1hcmNvIFMgSHltYW4gPG1hcmNAc25hZnUub3JnPiAqLworCisjaWZuZGVmIF9USFJFQURfUFJJVkFURV9IXworI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfSF8KKworI2luY2x1ZGUgPHB0aHJlYWQuaD4KKworLyoKKyAqIFRoaXMgZmlsZSBkZWZpbmVzIHRoZSB0aHJlYWQgbGlicmFyeSBpbnRlcmZhY2UgdG8gbGliYy4gIFRocmVhZAorICogbGlicmFyaWVzIG11c3QgaW1wbGVtZW50IHRoZSBmdW5jdGlvbnMgZGVzY3JpYmVkIGhlcmUgZm9yIHByb3BlcgorICogaW50ZXItb3BlcmF0aW9uIHdpdGggbGliYy4gICBsaWJjIGNvbnRhaW5zIHdlYWsgdmVyc2lvbnMgb2YgdGhlCisgKiBkZXNjcmliZWQgZnVuY3Rpb25zIGZvciBvcGVyYXRpb24gaW4gYSBub24tdGhyZWFkZWQgZW52aXJvbm1lbnQuCisgKi8KKworLyoKKyAqIFRoaXMgdmFyaWFibGUgaXMgMCB1bnRpbCBhIHNlY29uZCB0aHJlYWQgaXMgY3JlYXRlZC4KKyAqLworZXh0ZXJuIGludCBfX2lzdGhyZWFkZWQ7CisKKy8qCisgKiBXZWFrIHN5bWJvbHMgYXJlIHVzZWQgaW4gbGliYyBzbyB0aGF0IHRoZSB0aHJlYWQgbGlicmFyeSBjYW4KKyAqIGVmZmljaWVudGx5IHdyYXAgbGliYyBmdW5jdGlvbnMuCisgKiAKKyAqIFVzZSBXRUFLX05BTUUobikgdG8gZ2V0IGEgbGliYy1wcml2YXRlIG5hbWUgZm9yIG4gKF93ZWFrX24pLAorICogICAgIFdFQUtfQUxJQVMobikgdG8gZ2VuZXJhdGUgdGhlIHdlYWsgc3ltYm9sIG4gcG9pbnRpbmcgdG8gX3dlYWtfbiwKKyAqICAgICBXRUFLX1BST1RPVFlQRShuKSB0byBnZW5lcmF0ZSBhIHByb3RvdHlwZSBmb3IgX3dlYWtfbiAoYmFzZWQgb24gbikuCisgKi8KKyNkZWZpbmUgV0VBS19OQU1FKG5hbWUpCQlfX0NPTkNBVChfd2Vha18sbmFtZSkKKyNkZWZpbmUgV0VBS19BTElBUyhuYW1lKQlfX3dlYWtfYWxpYXMobmFtZSwgV0VBS19OQU1FKG5hbWUpKQorI2lmZGVmIF9fR05VQ19fCisjZGVmaW5lIFdFQUtfUFJPVE9UWVBFKG5hbWUpCV9fdHlwZW9mX18obmFtZSkgV0VBS19OQU1FKG5hbWUpCisjZWxzZQorI2RlZmluZSBXRUFLX1BST1RPVFlQRShuYW1lKQkvKiB0eXBlb2YoKSBvbmx5IGluIGdjYyAqLworI2VuZGlmCisKKy8qCisgKiBoZWxwZXIgbWFjcm8gdG8gbWFrZSB1bmlxdWUgbmFtZXMgaW4gdGhlIHRocmVhZCBuYW1lc3BhY2UKKyAqLworI2RlZmluZSBfX1RIUkVBRF9OQU1FKG5hbWUpCV9fQ09OQ0FUKF90aHJlYWRfdGFnbmFtZV8sbmFtZSkKKworc3RydWN0IF9fdGhyZWFkX3ByaXZhdGVfdGFnX3QgeworICAgIHB0aHJlYWRfbXV0ZXhfdCAgICBfcHJpdmF0ZV9sb2NrOworICAgIHB0aHJlYWRfa2V5X3QgICAgICBfcHJpdmF0ZV9rZXk7Cit9OworCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWChuYW1lKSAgXAorCXN0YXRpYyBzdHJ1Y3QgX190aHJlYWRfcHJpdmF0ZV90YWdfdCAgX19USFJFQURfTkFNRShuYW1lKSA9IHsgUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUiwgLTEgfQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfTVVURVhfTE9DSyhuYW1lKSAgXAorCXB0aHJlYWRfbXV0ZXhfbG9jayggJl9fVEhSRUFEX05BTUUobmFtZSkuX3ByaXZhdGVfbG9jayApCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkgXAorCXB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmX19USFJFQURfTkFNRShuYW1lKS5fcHJpdmF0ZV9sb2NrICkKKworI2RlZmluZSBfVEhSRUFEX1BSSVZBVEVfS0VZKG5hbWUpICAgIFwKKwlzdGF0aWMgc3RydWN0IF9fdGhyZWFkX3ByaXZhdGVfdGFnX3QgIF9fVEhSRUFEX05BTUUobmFtZSkgPSB7IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVIsIC0xIH0KKworZXh0ZXJuIHZvaWQqICBfX2Jpb25pY190aHJlYWRfcHJpdmF0ZV9zdG9yYWdlKCBzdHJ1Y3QgX190aHJlYWRfcHJpdmF0ZV90YWdfdCogIHB0YWcsIHZvaWQqICBzdG9yYWdlLCBzaXplX3QgIG9ianNpemUsIHZvaWQqICBlcnJvciApOworCisjZGVmaW5lIF9USFJFQURfUFJJVkFURShuYW1lLCBzdG9yYWdlLCBlcnJvcikgICAgXAorCV9fYmlvbmljX3RocmVhZF9wcml2YXRlX3N0b3JhZ2UoICZfX1RIUkVBRF9OQU1FKG5hbWUpLCAmKHN0b3JhZ2UpLHNpemVvZihzdG9yYWdlKSwgZXJyb3IpCisJCisjaWYgMAorLyoKKyAqIGhlbHBlciBmdW5jdGlvbnMgdGhhdCBleGlzdCBhcyAod2VhaykgbnVsbCBmdW5jdGlvbnMgaW4gbGliYyBhbmQKKyAqIChzdHJvbmcpIGZ1bmN0aW9ucyBpbiB0aGUgdGhyZWFkIGxpYnJhcnkuICAgVGhlc2UgZnVuY3Rpb25zOgorICoKKyAqIF90aHJlYWRfdGFnX2xvY2s6CisgKglsb2NrIHRoZSBtdXRleCBhc3NvY2lhdGVkIHdpdGggdGhlIGdpdmVuIHRhZy4gICBJZiB0aGUgZ2l2ZW4KKyAqCXRhZyBpcyBOVUxMIGEgdGFnIGlzIGZpcnN0IGFsbG9jYXRlZC4KKyAqCisgKiBfdGhyZWFkX3RhZ191bmxvY2s6CisgKgl1bmxvY2sgdGhlIG11dGV4IGFzc29jaWF0ZWQgd2l0aCB0aGUgZ2l2ZW4gdGFnLiAgIElmIHRoZSBnaXZlbgorICoJdGFnIGlzIE5VTEwgYSB0YWcgaXMgZmlyc3QgYWxsb2NhdGVkLgorICoKKyAqIF90aHJlYWRfdGFnX3N0b3JhZ2U6CisgKglyZXR1cm4gYSBwb2ludGVyIHRvIHBlciB0aHJlYWQgaW5zdGFuY2Ugb2YgZGF0YSBhc3NvY2lhdGVkCisgKgl3aXRoIHRoZSBnaXZlbiB0YWcuICBJZiB0aGUgZ2l2ZW4gdGFnIGlzIE5VTEwgYSB0YWcgaXMgZmlyc3QKKyAqCWFsbG9jYXRlZC4KKyAqLwordm9pZAlfdGhyZWFkX3RhZ19sb2NrKHZvaWQgKiopOwordm9pZAlfdGhyZWFkX3RhZ191bmxvY2sodm9pZCAqKik7Cit2b2lkICAgKl90aHJlYWRfdGFnX3N0b3JhZ2Uodm9pZCAqKiwgdm9pZCAqLCBzaXplX3QsIHZvaWQgKik7CisKKy8qCisgKiBNYWNyb3MgdXNlZCBpbiBsaWJjIHRvIGFjY2VzcyB0aHJlYWQgbXV0ZXgsIGtleXMsIGFuZCBwZXIgdGhyZWFkIHN0b3JhZ2UuCisgKiBfVEhSRUFEX1BSSVZBVEVfS0VZIGFuZCBfVEhSRUFEX1BSSVZBVEVfTVVURVggYXJlIGRpZmZlcmVudCBtYWNyb3MgZm9yCisgKiBoaXN0b3JpY2FsIHJlYXNvbnMuICAgVGhleSBkbyB0aGUgc2FtZSB0aGluZywgZGVmaW5lIGEgc3RhdGljIHZhcmlhYmxlCisgKiBrZXllZCBieSAnbmFtZScgdGhhdCBpZGVudGlmaWVzIGEgbXV0ZXggYW5kIGEga2V5IHRvIGlkZW50aWZ5IHBlciB0aHJlYWQKKyAqIGRhdGEuCisgKi8KKyNkZWZpbmUgX1RIUkVBRF9QUklWQVRFX0tFWShuYW1lKQkJCQkJXAorCXN0YXRpYyB2b2lkICpfX1RIUkVBRF9OQU1FKG5hbWUpCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWChuYW1lKQkJCQkJXAorCXN0YXRpYyB2b2lkICpfX1RIUkVBRF9OQU1FKG5hbWUpCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9MT0NLKG5hbWUpCQkJCVwKKwlfdGhyZWFkX3RhZ19sb2NrKCYoX19USFJFQURfTkFNRShuYW1lKSkpCisjZGVmaW5lIF9USFJFQURfUFJJVkFURV9NVVRFWF9VTkxPQ0sobmFtZSkJCQkJXAorCV90aHJlYWRfdGFnX3VubG9jaygmKF9fVEhSRUFEX05BTUUobmFtZSkpKQorI2RlZmluZSBfVEhSRUFEX1BSSVZBVEUoa2V5bmFtZSwgc3RvcmFnZSwgZXJyb3IpCQkJXAorCV90aHJlYWRfdGFnX3N0b3JhZ2UoJihfX1RIUkVBRF9OQU1FKGtleW5hbWUpKSwgJihzdG9yYWdlKSwJXAorCQkJICAgIHNpemVvZiAoc3RvcmFnZSksIGVycm9yKQorLyoKKyAqIFJlc29sdmVyIGNvZGUgaXMgc3BlY2lhbCBjYXNlZCBpbiB0aGF0IGl0IHVzZXMgZ2xvYmFsIGtleXMuCisgKi8KK2V4dGVybiB2b2lkICpfX1RIUkVBRF9OQU1FKF9yZXMpOworZXh0ZXJuIHZvaWQgKl9fVEhSRUFEX05BTUUoX3Jlc19leHQpOworZXh0ZXJuIHZvaWQgKl9fVEhSRUFEX05BTUUoc2Vydl9tdXRleCk7CisjZW5kaWYKKworLyoKKyAqIEZpbGUgZGVzY3JpcHRvciBsb2NraW5nIGRlZmluaXRpb25zLgorICovCisjZGVmaW5lIEZEX1JFQUQJCTB4MQorI2RlZmluZSBGRF9XUklURQkweDIKKyNkZWZpbmUgRkRfUkRXUgkJKEZEX1JFQUQgfCBGRF9XUklURSkKKworc3RydWN0IHRpbWVzcGVjOworaW50CV90aHJlYWRfZmRfbG9jayhpbnQsIGludCwgc3RydWN0IHRpbWVzcGVjICopOwordm9pZAlfdGhyZWFkX2ZkX3VubG9jayhpbnQsIGludCk7CisKKy8qCisgKiBNYWNyb3MgYXJlIHVzZWQgaW4gbGliYyBjb2RlIGZvciBoaXN0b3JpY2FsIChkZWJ1ZykgcmVhc29ucy4KKyAqIERlZmluZSB0aGVtIGhlcmUuCisgKi8KKyNkZWZpbmUgX0ZEX0xPQ0soX2ZkLF90eXBlLF90cykJX3RocmVhZF9mZF9sb2NrKF9mZCwgX3R5cGUsIF90cykKKyNkZWZpbmUgX0ZEX1VOTE9DSyhfZmQsX3R5cGUpCV90aHJlYWRfZmRfdW5sb2NrKF9mZCwgX3R5cGUpCisKKworLyoKKyAqIG1hbGxvYyBsb2NrL3VubG9jayBwcm90b3R5cGVzIGFuZCBkZWZpbml0aW9ucworICovCit2b2lkCV90aHJlYWRfbWFsbG9jX2luaXQodm9pZCk7Cit2b2lkCV90aHJlYWRfbWFsbG9jX2xvY2sodm9pZCk7Cit2b2lkCV90aHJlYWRfbWFsbG9jX3VubG9jayh2b2lkKTsKKworI2RlZmluZSBfTUFMTE9DX0xPQ0soKQkJZG8gewkJCQkJXAorCQkJCQlpZiAoX19pc3RocmVhZGVkKQkJXAorCQkJCQkJX3RocmVhZF9tYWxsb2NfbG9jaygpOwlcCisJCQkJfSB3aGlsZSAoMCkKKyNkZWZpbmUgX01BTExPQ19VTkxPQ0soKQlkbyB7CQkJCQlcCisJCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCisJCQkJCQlfdGhyZWFkX21hbGxvY191bmxvY2soKTtcCisJCQkJfSB3aGlsZSAoMCkKKyNkZWZpbmUgX01BTExPQ19MT0NLX0lOSVQoKQlkbyB7CQkJCQlcCisJCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCisJCQkJCQlfdGhyZWFkX21hbGxvY19pbml0KCk7XAorCQkJCX0gd2hpbGUgKDApCisKK3ZvaWQJX3RocmVhZF9hdGV4aXRfbG9jayh2b2lkKTsKK3ZvaWQJX3RocmVhZF9hdGV4aXRfdW5sb2NrKHZvaWQpOworCisjZGVmaW5lIF9BVEVYSVRfTE9DSygpCQlkbyB7CQkJCQlcCisJCQkJCWlmIChfX2lzdGhyZWFkZWQpCQlcCisJCQkJCQlfdGhyZWFkX2F0ZXhpdF9sb2NrKCk7CVwKKwkJCQl9IHdoaWxlICgwKQorI2RlZmluZSBfQVRFWElUX1VOTE9DSygpCWRvIHsJCQkJCVwKKwkJCQkJaWYgKF9faXN0aHJlYWRlZCkJCVwKKwkJCQkJCV90aHJlYWRfYXRleGl0X3VubG9jaygpO1wKKwkJCQl9IHdoaWxlICgwKQorCisjZW5kaWYgLyogX1RIUkVBRF9QUklWQVRFX0hfICovCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2Jpb25pY191dGlscy5weSBiL2xpYmMvdG9vbHMvYmlvbmljX3V0aWxzLnB5Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlYjE1NjEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3Rvb2xzL2Jpb25pY191dGlscy5weQpAQCAtMCwwICsxLDI4NyBAQAorIyBjb21tb24gcHl0aG9uIHV0aWxpdHkgcm91dGluZXMgZm9yIHRoZSBCaW9uaWMgdG9vbCBzY3JpcHRzCisKK2ltcG9ydCBzeXMsIG9zLCBjb21tYW5kcywgc3RyaW5nCisKKyMgc3VwcG9ydCBCaW9uaWMgYXJjaGl0ZWN0dXJlcywgYWRkIG5ldyBvbmVzIGFzIGFwcHJvcHJpYXRlCisjCitiaW9uaWNfYXJjaHMgPSBbICJhcm0iLCAieDg2IiBdCisKKyMgYmFzaWMgZGVidWdnaW5nIHRyYWNlIHN1cHBvcnQKKyMgY2FsbCBEX3NldGxldmVsIHRvIHNldCB0aGUgdmVyYm9zaXR5IGxldmVsCisjIGFuZCBEKCksIEQyKCksIEQzKCksIEQ0KCkgdG8gYWRkIHRyYWNlcworIwordmVyYm9zZSA9IDEKKworZGVmIEQobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPiAwOgorICAgICAgICBwcmludCBtc2cKKworZGVmIEQyKG1zZyk6CisgICAgZ2xvYmFsIHZlcmJvc2UKKyAgICBpZiB2ZXJib3NlID49IDI6CisgICAgICAgIHByaW50IG1zZworCitkZWYgRDMobXNnKToKKyAgICBnbG9iYWwgdmVyYm9zZQorICAgIGlmIHZlcmJvc2UgPj0gMzoKKyAgICAgICAgcHJpbnQgbXNnCisKK2RlZiBENChtc2cpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgaWYgdmVyYm9zZSA+PSA0OgorICAgICAgICBwcmludCBtc2cKKworZGVmIERfc2V0bGV2ZWwobGV2ZWwpOgorICAgIGdsb2JhbCB2ZXJib3NlCisgICAgdmVyYm9zZSA9IGxldmVsCisKKworZGVmIGZpbmRfZGlyX29mKHBhdGgpOgorICAgICcnJ3JldHVybiB0aGUgZGlyZWN0b3J5IG5hbWUgb2YgJ3BhdGgnLCBvciAiLiIgaWYgdGhlcmUgaXMgbm9uZScnJworICAgICMgcmVtb3ZlIHRyYWlsaW5nIHNsYXNoCisgICAgaWYgbGVuKHBhdGgpID4gMSBhbmQgcGF0aFstMV0gPT0gJy8nOgorICAgICAgICBwYXRoID0gcGF0aFs6LTFdCisKKyAgICAjIGZpbmQgcGFyZW50IGRpcmVjdG9yeSBuYW1lCisgICAgZCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorICAgIGlmIGQgPT0gIiI6CisgICAgICAgIHJldHVybiAiLiIKKyAgICBlbHNlOgorICAgICAgICByZXR1cm4gZAorCisjICBvdGhlciBzdHVmZgorIworIworZGVmIGZpbmRfZmlsZV9mcm9tX3Vwd2FyZHMoZnJvbV9wYXRoLHRhcmdldF9maWxlKToKKyAgICAiIiJmaW5kIGEgZmlsZSBpbiB0aGUgY3VycmVudCBkaXJlY3Rvcnkgb3IgaXRzIHBhcmVudHMuIGlmICdmcm9tX3BhdGgnIGlzIE5vbmUsCisgICAgICAgc2VhY2ggZnJvbSB0aGUgY3VycmVudCBwcm9ncmFtJ3MgZGlyZWN0b3J5IiIiCisgICAgcGF0aCA9IGZyb21fcGF0aAorICAgIGlmIHBhdGggPT0gTm9uZToKKyAgICAgICAgcGF0aCA9IGZpbmRfZGlyX29mKHN5cy5hcmd2WzBdKQorICAgICAgICBEKCJ0aGlzIHNjcmlwdCBzZWVtcyB0byBiZSBsb2NhdGVkIGluOiAlcyIgJSBwYXRoKQorCisgICAgd2hpbGUgMToKKyAgICAgICAgaWYgcGF0aCA9PSAiIjoKKyAgICAgICAgICAgIHBhdGggPSAiLiIKKworICAgICAgICBmaWxlID0gcGF0aCArICIvIiArIHRhcmdldF9maWxlCisgICAgICAgIEQoInByb2JpbmcgIitmaWxlKQorCisgICAgICAgIGlmIG9zLnBhdGguaXNmaWxlKGZpbGUpOgorICAgICAgICAgICAgRCgiZm91bmQgJXMgaW4gJXMiICUgKHRhcmdldF9maWxlLCBwYXRoKSkKKyAgICAgICAgICAgIHJldHVybiBmaWxlCisKKyAgICAgICAgaWYgcGF0aCA9PSAiLiI6CisgICAgICAgICAgICBicmVhaworCisgICAgICAgIHBhdGggPSBvcy5wYXRoLmRpcm5hbWUocGF0aCkKKworICAgIHBhdGggPSAiIgorICAgIHdoaWxlIDE6CisgICAgICAgIHBhdGggPSAiLi4vIiArIHBhdGgKKyAgICAgICAgZmlsZSA9IHBhdGggKyB0YXJnZXRfZmlsZQorICAgICAgICBEKCJwcm9iaW5nICIrZmlsZSkKKworICAgICAgICBpZiBvcy5wYXRoLmlzZmlsZShmaWxlKToKKyAgICAgICAgICAgIEQoImZvdW5kICVzIGluICVzIiAlICh0YXJnZXRfZmlsZSwgcGF0aCkpCisgICAgICAgICAgICByZXR1cm4gZmlsZQorCisKKyAgICByZXR1cm4gTm9uZQorCitkZWYgZmluZF9iaW9uaWNfcm9vdCgpOgorICAgICcnJ2ZpbmQgdGhlIHJvb3Qgb2YgdGhlIEJpb25pYyBzb3VyY2UgdHJlZS4gd2UgY2hlY2sgZm9yIHRoZSBTWVNDQUxMUy5UWFQgZmlsZQorICAgICAgIGZyb20gdGhlIGxvY2F0aW9uIG9mIHRoZSBjdXJyZW50IHByb2dyYW0ncyBkaXJlY3RvcnkuJycnCisKKyAgICAjIG5vdGUgdGhhdCB3ZSBjYW4ndCB1c2UgZmluZF9maWxlX2Zyb21fdXB3YXJkcygpIHNpbmNlIHdlIGNhbid0IHVzZSBvcy5wYXRoLmFic3BhdGgKKyAgICAjIHRoYXQncyBiZWNhdXNlIGluIHNvbWUgY2FzZXMgdGhlIHA0IGNsaWVudCBpcyBpbiBhIHN5bWxpbmtlZCBkaXJlY3RvcnksIGFuZCB0aGlzCisgICAgIyBmdW5jdGlvbiB3aWxsIHJldHVybiB0aGUgcmVhbCBwYXRoIGluc3RlYWQsIHdoaWNoIGxhdGVyIGNyZWF0ZXMgcHJvYmxlbXMgd2hlbgorICAgICMgcDQgY29tbWFuZHMgYXJlIGlzc3VlZAorICAgICMKKyAgICBmaWxlID0gZmluZF9maWxlX2Zyb21fdXB3YXJkcyhOb25lLCAiU1lTQ0FMTFMuVFhUIikKKyAgICBpZiBmaWxlOgorICAgICAgICByZXR1cm4gb3MucGF0aC5kaXJuYW1lKGZpbGUpCisgICAgZWxzZToKKyAgICAgICAgcmV0dXJuIE5vbmUKKworZGVmIGZpbmRfa2VybmVsX2hlYWRlcnMoKToKKyAgICAiIiJ0cnkgdG8gZmluZCB0aGUgZGlyZWN0b3J5IGNvbnRhaW5pbmcgdGhlIGtlcm5lbCBoZWFkZXJzIGZvciB0aGlzIG1hY2hpbmUiIiIKKyAgICBzdGF0dXMsIHZlcnNpb24gPSBjb21tYW5kcy5nZXRzdGF0dXNvdXRwdXQoICJ1bmFtZSAtciIgKSAgIyBnZXQgTGludXgga2VybmVsIHZlcnNpb24KKyAgICBpZiBzdGF0dXMgIT0gMDoKKyAgICAgICAgRCgiY291bGQgbm90IGV4ZWN1dGUgJ3VuYW1lIC1yJyBjb21tYW5kIHByb3Blcmx5IikKKyAgICAgICAgcmV0dXJuIE5vbmUKKworICAgICMgZ2V0IHJpZCBvZiB0aGUgIi14ZW5VIiBzdWZmaXggdGhhdCBpcyBmb3VuZCBpbiBYZW4gdmlydHVhbCBtYWNoaW5lcworICAgIGlmIGxlbih2ZXJzaW9uKSA+IDUgYW5kIHZlcnNpb25bLTU6XSA9PSAiLXhlblUiOgorICAgICAgICB2ZXJzaW9uID0gdmVyc2lvbls6LTVdCisKKyAgICBwYXRoID0gIi91c3Ivc3JjL2xpbnV4LWhlYWRlcnMtIiArIHZlcnNpb24KKyAgICBEKCJwcm9iaW5nICVzIGZvciBrZXJuZWwgaGVhZGVycyIgJSAocGF0aCsiL2luY2x1ZGUiKSkKKyAgICByZXQgPSBvcy5wYXRoLmlzZGlyKCBwYXRoICkKKyAgICBpZiByZXQ6CisgICAgICAgIEQoImZvdW5kIGtlcm5lbCBoZWFkZXJzIGluOiAlcyIgJSAocGF0aCArICIvaW5jbHVkZSIpKQorICAgICAgICByZXR1cm4gcGF0aAorICAgIHJldHVybiBOb25lCisKKworIyBwYXJzZXIgZm9yIHRoZSBTWVNDQUxMUy5UWFQgZmlsZQorIworY2xhc3MgU3lzQ2FsbHNUeHRQYXJzZXI6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLnN5c2NhbGxzID0gW10KKyAgICAgICAgc2VsZi5saW5lbm8gICA9IDAKKworICAgIGRlZiBFKG1zZyk6CisgICAgICAgIHByaW50ICIlZDogJXMiICUgKHNlbGYubGluZW5vLCBtc2cpCisKKyAgICBkZWYgcGFyc2VfbGluZShzZWxmLCBsaW5lKToKKyAgICAgICAgcG9zX2xwYXJlbiA9IGxpbmUuZmluZCgnKCcpCisgICAgICAgIEUgICAgICAgICAgPSBzZWxmLkUKKyAgICAgICAgaWYgcG9zX2xwYXJlbiA8IDA6CisgICAgICAgICAgICBFKCJtaXNzaW5nIGxlZnQgcGFyZW50aGVzaXMgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgcG9zX3JwYXJlbiA9IGxpbmUucmZpbmQoJyknKQorICAgICAgICBpZiBwb3NfcnBhcmVuIDwgMCBvciBwb3NfcnBhcmVuIDw9IHBvc19scGFyZW46CisgICAgICAgICAgICBFKCJtaXNzaW5nIG9yIG1pc3BsYWNlZCByaWdodCBwYXJlbnRoZXNpcyBpbiAnJXMnIiAlIGxpbmUpCisgICAgICAgICAgICByZXR1cm4KKworICAgICAgICByZXR1cm5fdHlwZSA9IGxpbmVbOnBvc19scGFyZW5dLnN0cmlwKCkuc3BsaXQoKQorICAgICAgICBpZiBsZW4ocmV0dXJuX3R5cGUpIDwgMjoKKyAgICAgICAgICAgIEUoIm1pc3NpbmcgcmV0dXJuIHR5cGUgaW4gJyVzJyIgJSBsaW5lKQorICAgICAgICAgICAgcmV0dXJuCisKKyAgICAgICAgc3lzY2FsbF9mdW5jID0gcmV0dXJuX3R5cGVbLTFdCisgICAgICAgIHJldHVybl90eXBlICA9IHN0cmluZy5qb2luKHJldHVybl90eXBlWzotMV0sJyAnKQorCisgICAgICAgIHBvc19jb2xvbiA9IHN5c2NhbGxfZnVuYy5maW5kKCc6JykKKyAgICAgICAgaWYgcG9zX2NvbG9uIDwgMDoKKyAgICAgICAgICAgIHN5c2NhbGxfbmFtZSA9IHN5c2NhbGxfZnVuYworICAgICAgICBlbHNlOgorICAgICAgICAgICAgaWYgcG9zX2NvbG9uID09IDAgb3IgcG9zX2NvbG9uKzEgPj0gbGVuKHN5c2NhbGxfZnVuYyk6CisgICAgICAgICAgICAgICAgRSgibWlzcGxhY2VkIGNvbG9uIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKyAgICAgICAgICAgIHN5c2NhbGxfbmFtZSA9IHN5c2NhbGxfZnVuY1twb3NfY29sb24rMTpdCisgICAgICAgICAgICBzeXNjYWxsX2Z1bmMgPSBzeXNjYWxsX2Z1bmNbOnBvc19jb2xvbl0KKworICAgICAgICBpZiBwb3NfcnBhcmVuID4gcG9zX2xwYXJlbisxOgorICAgICAgICAgICAgc3lzY2FsbF9wYXJhbXMgPSBsaW5lW3Bvc19scGFyZW4rMTpwb3NfcnBhcmVuXS5zcGxpdCgnLCcpCisgICAgICAgICAgICBwYXJhbXMgICAgICAgICA9IHN0cmluZy5qb2luKHN5c2NhbGxfcGFyYW1zLCcsJykKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHN5c2NhbGxfcGFyYW1zID0gW10KKyAgICAgICAgICAgIHBhcmFtcyAgICAgICAgID0gInZvaWQiCisKKyAgICAgICAgbnVtYmVyID0gbGluZVtwb3NfcnBhcmVuKzE6XS5zdHJpcCgpCisgICAgICAgIGlmIG51bWJlciA9PSAic3R1YiI6CisgICAgICAgICAgICBzeXNjYWxsX2lkICA9IC0xCisgICAgICAgICAgICBzeXNjYWxsX2lkMiA9IC0xCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICB0cnk6CisgICAgICAgICAgICAgICAgaWYgbnVtYmVyWzBdID09ICcjJzoKKyAgICAgICAgICAgICAgICAgICAgbnVtYmVyID0gbnVtYmVyWzE6XS5zdHJpcCgpCisgICAgICAgICAgICAgICAgbnVtYmVycyA9IHN0cmluZy5zcGxpdChudW1iZXIsJywnKQorICAgICAgICAgICAgICAgIHN5c2NhbGxfaWQgID0gaW50KG51bWJlcnNbMF0pCisgICAgICAgICAgICAgICAgc3lzY2FsbF9pZDIgPSBzeXNjYWxsX2lkCisgICAgICAgICAgICAgICAgaWYgbGVuKG51bWJlcnMpID4gMToKKyAgICAgICAgICAgICAgICAgICAgc3lzY2FsbF9pZDIgPSBpbnQobnVtYmVyc1sxXSkKKyAgICAgICAgICAgIGV4Y2VwdDoKKyAgICAgICAgICAgICAgICBFKCJpbnZhbGlkIHN5c2NhbGwgbnVtYmVyIGluICclcyciICUgbGluZSkKKyAgICAgICAgICAgICAgICByZXR1cm4KKworICAgICAgICB0ID0geyAiaWQiICAgICA6IHN5c2NhbGxfaWQsCisgICAgICAgICAgICAgICJpZDIiICAgIDogc3lzY2FsbF9pZDIsCisgICAgICAgICAgICAgICJuYW1lIiAgIDogc3lzY2FsbF9uYW1lLAorICAgICAgICAgICAgICAiZnVuYyIgICA6IHN5c2NhbGxfZnVuYywKKyAgICAgICAgICAgICAgInBhcmFtcyIgOiBzeXNjYWxsX3BhcmFtcywKKyAgICAgICAgICAgICAgImRlY2wiICAgOiAiJS0xNXMgICVzICglcyk7IiAlIChyZXR1cm5fdHlwZSwgc3lzY2FsbF9mdW5jLCBwYXJhbXMpIH0KKworICAgICAgICBzZWxmLnN5c2NhbGxzLmFwcGVuZCh0KQorCisgICAgZGVmIHBhcnNlX2ZpbGUoc2VsZiwgZmlsZV9wYXRoKToKKyAgICAgICAgRDIoInBhcnNlX2ZpbGU6ICVzIiAlIGZpbGVfcGF0aCkKKyAgICAgICAgZnAgPSBvcGVuKGZpbGVfcGF0aCkKKyAgICAgICAgZm9yIGxpbmUgaW4gZnAueHJlYWRsaW5lcygpOgorICAgICAgICAgICAgc2VsZi5saW5lbm8gKz0gMQorICAgICAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICAgICAgaWYgbm90IGxpbmU6IGNvbnRpbnVlCisgICAgICAgICAgICBpZiBsaW5lWzBdID09ICcjJzogY29udGludWUKKyAgICAgICAgICAgIHNlbGYucGFyc2VfbGluZShsaW5lKQorCisgICAgICAgIGZwLmNsb3NlKCkKKworCitjbGFzcyBPdXRwdXQ6CisgICAgZGVmICBfX2luaXRfXyhzZWxmLG91dD1zeXMuc3Rkb3V0KToKKyAgICAgICAgc2VsZi5vdXQgPSBvdXQKKworICAgIGRlZiB3cml0ZShzZWxmLG1zZyk6CisgICAgICAgIHNlbGYub3V0LndyaXRlKG1zZykKKworICAgIGRlZiB3cml0ZWxuKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5vdXQud3JpdGUobXNnKQorICAgICAgICBzZWxmLm91dC53cml0ZSgiXG4iKQorCitjbGFzcyBTdHJpbmdPdXRwdXQ6CisgICAgZGVmIF9faW5pdF9fKHNlbGYpOgorICAgICAgICBzZWxmLmxpbmUgPSAiIgorCisgICAgZGVmIHdyaXRlKHNlbGYsbXNnKToKKyAgICAgICAgc2VsZi5saW5lICs9IG1zZworICAgICAgICBEMigid3JpdGUgJyVzJyIgJSBtc2cpCisKKyAgICBkZWYgd3JpdGVsbihzZWxmLG1zZyk6CisgICAgICAgIHNlbGYubGluZSArPSBtc2cgKyAnXG4nCisgICAgICAgIEQyKCJ3cml0ZSAnJXNcXG4nIiUgbXNnKQorCisgICAgZGVmIGdldChzZWxmKToKKyAgICAgICAgcmV0dXJuIHNlbGYubGluZQorCisKK2RlZiBjcmVhdGVfZmlsZV9wYXRoKHBhdGgpOgorICAgIGRpcnMgPSBbXQorICAgIHdoaWxlIDE6CisgICAgICAgIHBhcmVudCA9IG9zLnBhdGguZGlybmFtZShwYXRoKQorICAgICAgICBpZiBwYXJlbnQgPT0gIi8iOgorICAgICAgICAgICAgYnJlYWsKKyAgICAgICAgZGlycy5hcHBlbmQocGFyZW50KQorICAgICAgICBwYXRoID0gcGFyZW50CisKKyAgICBkaXJzLnJldmVyc2UoKQorICAgIGZvciBkaXIgaW4gZGlyczoKKyAgICAgICAgI3ByaW50ICJkaXIgJXMiICUgZGlyCisgICAgICAgIGlmIG9zLnBhdGguaXNkaXIoZGlyKToKKyAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgIG9zLm1rZGlyKGRpcikKKworZGVmIHdhbGtfc291cmNlX2ZpbGVzKHBhdGhzLGNhbGxiYWNrLGFyZ3MsZXhjbHVkZXM9W10pOgorICAgICIiInJlY3Vyc2l2ZWx5IHdhbGsgYSBsaXN0IG9mIHBhdGhzIGFuZCBmaWxlcywgb25seSBrZWVwaW5nIHRoZSBzb3VyY2UgZmlsZXMgaW4gZGlyZWN0b3JpZXMiIiIKKyAgICBmb3IgcGF0aCBpbiBwYXRoczoKKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIocGF0aCk6CisgICAgICAgICAgICBjYWxsYmFjayhwYXRoLGFyZ3MpCisgICAgICAgIGVsc2U6CisgICAgICAgICAgICBmb3Igcm9vdCwgZGlycywgZmlsZXMgaW4gb3Mud2FsayhwYXRoKToKKyAgICAgICAgICAgICAgICAjcHJpbnQgInctLSAlcyAoZXg6ICVzKSIgJSAocmVwcigocm9vdCxkaXJzKSksIHJlcHIoZXhjbHVkZXMpKQorICAgICAgICAgICAgICAgIGlmIGxlbihleGNsdWRlcyk6CisgICAgICAgICAgICAgICAgICAgIGZvciBkIGluIGRpcnNbOl06CisgICAgICAgICAgICAgICAgICAgICAgICBpZiBkIGluIGV4Y2x1ZGVzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpcnMucmVtb3ZlKGQpCisgICAgICAgICAgICAgICAgZm9yIGYgaW4gZmlsZXM6CisgICAgICAgICAgICAgICAgICAgIHIsIGV4dCA9IG9zLnBhdGguc3BsaXRleHQoZikKKyAgICAgICAgICAgICAgICAgICAgaWYgZXh0IGluIFsgIi5oIiwgIi5jIiwgIi5jcHAiLCAiLlMiIF06CisgICAgICAgICAgICAgICAgICAgICAgICBjYWxsYmFjayggIiVzLyVzIiAlIChyb290LGYpLCBhcmdzICkKKworZGVmIGNsZWFudXBfZGlyKHBhdGgpOgorICAgICIiImNyZWF0ZSBhIGRpcmVjdG9yeSBpZiBuZWVkZWQsIGFuZCBlbnN1cmUgdGhhdCBpdCBpcyB0b3RhbGx5IGVtcHR5CisgICAgICAgYnkgcmVtb3ZpbmcgYW55IGV4aXN0aW5nIGNvbnRlbnQgaW4gaXQiIiIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMocGF0aCk6CisgICAgICAgIG9zLm1rZGlyKHBhdGgpCisgICAgZWxzZToKKyAgICAgICAgZm9yIHJvb3QsIGRpcnMsIGZpbGVzIGluIG9zLndhbGsocGF0aCwgdG9wZG93bj1GYWxzZSk6CisgICAgICAgICAgICBpZiByb290LmVuZHN3aXRoKCJrZXJuZWxfaGVhZGVycy8iKToKKyAgICAgICAgICAgICAgICAjIHNraXAgJ2tlcm5lbF9oZWFkZXJzJworICAgICAgICAgICAgICAgIGNvbnRpbnVlCisgICAgICAgICAgICBmb3IgbmFtZSBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBvcy5yZW1vdmUob3MucGF0aC5qb2luKHJvb3QsIG5hbWUpKQorICAgICAgICAgICAgZm9yIG5hbWUgaW4gZGlyczoKKyAgICAgICAgICAgICAgICBvcy5ybWRpcihvcy5wYXRoLmpvaW4ocm9vdCwgbmFtZSkpCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2NoZWNrc3lzY2FsbHMucHkgYi9saWJjL3Rvb2xzL2NoZWNrc3lzY2FsbHMucHkKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uOWVkYjM5MAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdG9vbHMvY2hlY2tzeXNjYWxscy5weQpAQCAtMCwwICsxLDE3NSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMKKyMgdGhpcyB0b29sIGlzIHVzZWQgdG8gY2hlY2sgdGhhdCB0aGUgc3lzY2FsbCBudW1iZXJzIHRoYXQgYXJlIGluCisjIFNZU0NBTExTLlRYVCBjb3JyZXNwb25kIHRvIHRob3NlIGZvdW5kIGluIHRoZSBMaW51eCBrZXJuZWwgc291cmNlcworIyBmb3IgdGhlIGFybSBhbmQgaTM4NiBhcmNoaXRlY3R1cmVzCisjCisKK2ltcG9ydCBzeXMsIHJlLCBzdHJpbmcsIG9zLCBjb21tYW5kcworZnJvbSAgIGJpb25pY191dGlscyBpbXBvcnQgKgorCisjIGNoYW5nZSB0aGlzIGlmIG5lY2Vzc2FyeQorc3lzY2FsbHNfdHh0ID0gIlNZU0NBTExTLlRYVCIKKworZGVmIHVzYWdlKCk6CisgICAgcHJpbnQgInVzYWdlOiBjaGVja3N5c2NhbGxzIFtvcHRpb25zXSBba2VybmVsX2hlYWRlcnNfcm9vdGRpcl0iCisgICAgcHJpbnQgIiAgICBvcHRpb25zOiAgICAtdiAgIGVuYWJsZSB2ZXJib3NlIG1vZGUiCisgICAgc3lzLmV4aXQoMSkKKworCitsaW51eF9yb290ICAgID0gTm9uZQorc3lzY2FsbHNfZmlsZSA9IE5vbmUKKworZGVmIHBhcnNlX2NvbW1hbmRfbGluZShhcmdzKToKKyAgICBnbG9iYWwgbGludXhfcm9vdCwgc3lzY2FsbHNfZmlsZSwgdmVyYm9zZQorCisgICAgcHJvZ3JhbSA9IGFyZ3NbMF0KKyAgICBhcmdzICAgID0gYXJnc1sxOl0KKyAgICB3aGlsZSBsZW4oYXJncykgPiAwIGFuZCBhcmdzWzBdWzBdID09ICItIjoKKyAgICAgICAgb3B0aW9uID0gYXJnc1swXVsxOl0KKyAgICAgICAgYXJncyAgID0gYXJnc1sxOl0KKworICAgICAgICBpZiBvcHRpb24gPT0gInYiOgorICAgICAgICAgICAgRF9zZXRsZXZlbCgxKQorICAgICAgICBlbHNlOgorICAgICAgICAgICAgdXNhZ2UoKQorCisgICAgaWYgbGVuKGFyZ3MpID4gMjoKKyAgICAgICAgdXNhZ2UoKQorCisgICAgaWYgbGVuKGFyZ3MpID09IDA6CisgICAgICAgIGxpbnV4X3Jvb3QgPSBmaW5kX2tlcm5lbF9oZWFkZXJzKCkKKyAgICAgICAgaWYgbGludXhfcm9vdCA9PSBOb25lOgorICAgICAgICAgICAgcHJpbnQgImNvdWxkIG5vdCBsb2NhdGUgdGhpcyBzeXN0ZW0ga2VybmVsIGhlYWRlcnMgcm9vdCBkaXJlY3RvcnksIHBsZWFzZSIKKyAgICAgICAgICAgIHByaW50ICJzcGVjaWZ5IG9uZSB3aGVuIGNhbGxpbmcgdGhpcyBwcm9ncmFtLCBpLmUuICdjaGVja3N5c2NhbGxzIDxoZWFkZXJzLWRpcmVjdG9yeT4nIgorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKyAgICAgICAgcHJpbnQgInVzaW5nIHRoZSBmb2xsb3dpbmcga2VybmVsIGhlYWRlcnMgcm9vdDogJyVzJyIgJSBsaW51eF9yb290CisgICAgZWxzZToKKyAgICAgICAgbGludXhfcm9vdCA9IGFyZ3NbMF0KKyAgICAgICAgaWYgbm90IG9zLnBhdGguaXNkaXIobGludXhfcm9vdCk6CisgICAgICAgICAgICBwcmludCAidGhlIGRpcmVjdG9yeSAnJXMnIGRvZXMgbm90IGV4aXN0LiBhYm9ydGluZ1xuIiAlIGhlYWRlcnNfcm9vdAorICAgICAgICAgICAgc3lzLmV4aXQoMSkKKworcGFyc2VfY29tbWFuZF9saW5lKHN5cy5hcmd2KQorCitzeXNjYWxsc19maWxlID0gZmluZF9maWxlX2Zyb21fdXB3YXJkcyhOb25lLCBzeXNjYWxsc190eHQpCitpZiBub3Qgc3lzY2FsbHNfZmlsZToKKyAgICBwcmludCAiY291bGQgbm90IGxvY2F0ZSB0aGUgJXMgZmlsZS4gQWJvcnRpbmciICUgc3lzY2FsbHNfdHh0CisgICAgc3lzLmV4aXQoMSkKKworcHJpbnQgInBhcnNpbmcgJXMiICUgc3lzY2FsbHNfZmlsZQorCisjIHJlYWQgdGhlIHN5c2NhbGxzIGRlc2NyaXB0aW9uIGZpbGUKKyMKKworcGFyc2VyID0gU3lzQ2FsbHNUeHRQYXJzZXIoKQorcGFyc2VyLnBhcnNlX2ZpbGUoc3lzY2FsbHNfZmlsZSkKK3N5c2NhbGxzID0gcGFyc2VyLnN5c2NhbGxzCisKK3JlX25yX2xpbmUgICAgICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKlwoX19OUl9TWVNDQUxMX0JBU0VcK1xzKihcdyopXCkiICkKK3JlX25yX2Nsb2NrX2xpbmUgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKlwoX19OUl90aW1lcl9jcmVhdGVcKyhcdyopXCkiICkKK3JlX2FybV9ucl9saW5lICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19BUk1fTlJfKFx3KilccypcKF9fQVJNX05SX0JBU0VcK1xzKihcdyopXCkiICkKK3JlX3g4Nl9saW5lICAgICAgPSByZS5jb21waWxlKCByIiNkZWZpbmUgX19OUl8oXHcqKVxzKihbMC05XSopIiApCisKKyMgbm93IHJlYWQgdGhlIExpbnV4IGFybSBoZWFkZXIKK2RlZiBwcm9jZXNzX25yX2xpbmUobGluZSxkaWN0KToKKworICAgIG0gPSByZV9ucl9saW5lLm1hdGNoKGxpbmUpCisgICAgaWYgbToKKyAgICAgICAgZGljdFttLmdyb3VwKDEpXSA9IGludChtLmdyb3VwKDIpKQorICAgICAgICByZXR1cm4KKworICAgIG0gPSByZV9ucl9jbG9ja19saW5lLm1hdGNoKGxpbmUpCisgICAgaWYgbToKKyAgICAgICAgZGljdFttLmdyb3VwKDEpXSA9IGludChtLmdyb3VwKDIpKSArIDI1OQorICAgICAgICByZXR1cm4KKworICAgIG0gPSByZV9hcm1fbnJfbGluZS5tYXRjaChsaW5lKQorICAgIGlmIG06CisgICAgICAgICNwcmludCAiJXMgPSAlcyIgJSAobS5ncm91cCgxKSwgbS5ncm91cCgyKSkKKyAgICAgICAgZGljdFsiQVJNXyIrbS5ncm91cCgxKV0gPSBpbnQobS5ncm91cCgyKSkgKyAweDBmMDAwMAorICAgICAgICByZXR1cm4KKworICAgIG0gPSByZV94ODZfbGluZS5tYXRjaChsaW5lKQorICAgIGlmIG06CisgICAgICAgICMgdHJ5IGJsb2NrIGJlY2F1c2UgdGhlIEFSTSBoZWFkZXIgaGFzIHNvbWUgI2RlZmluZSBfTlJfWFhYWFggIC8qIG5vdGhpbmcgKi8KKyAgICAgICAgdHJ5OgorICAgICAgICAgICAgI3ByaW50ICIlcyA9ICVzIiAlIChtLmdyb3VwKDEpLCBtLmdyb3VwKDIpKQorICAgICAgICAgICAgZGljdFttLmdyb3VwKDEpXSA9IGludChtLmdyb3VwKDIpKQorICAgICAgICBleGNlcHQ6CisgICAgICAgICAgICBwYXNzCisgICAgICAgIHJldHVybgorCisKK2RlZiBwcm9jZXNzX2hlYWRlcihoZWFkZXJfZmlsZSxkaWN0KToKKyAgICBmcCA9IG9wZW4oaGVhZGVyX2ZpbGUpCisgICAgRCgicmVhZGluZyAiK2hlYWRlcl9maWxlKQorICAgIGZvciBsaW5lIGluIGZwLnhyZWFkbGluZXMoKToKKyAgICAgICAgbGluZSA9IGxpbmUuc3RyaXAoKQorICAgICAgICBpZiBub3QgbGluZTogY29udGludWUKKyAgICAgICAgcHJvY2Vzc19ucl9saW5lKGxpbmUsZGljdCkKKyAgICBmcC5jbG9zZSgpCisKK2FybV9kaWN0ID0ge30KK3g4Nl9kaWN0ID0ge30KKworCisjIHJlbW92ZSB0cmFpbGluZyBzbGFzaCBhbmQgJy9pbmNsdWRlJyBmcm9tIHRoZSBsaW51eF9yb290LCBpZiBhbnkKK2lmIGxpbnV4X3Jvb3RbLTFdID09ICcvJzoKKyAgICBsaW51eF9yb290ID0gbGludXhfcm9vdFs6LTFdCisKK2lmIGxlbihsaW51eF9yb290KSA+IDggYW5kIGxpbnV4X3Jvb3RbLTg6XSA9PSAnL2luY2x1ZGUnOgorICAgIGxpbnV4X3Jvb3QgPSBsaW51eF9yb290WzotOF0KKworYXJtX3VuaXN0ZCA9IGxpbnV4X3Jvb3QgKyAiL2luY2x1ZGUvYXNtLWFybS91bmlzdGQuaCIKK2lmIG5vdCBvcy5wYXRoLmV4aXN0cyhhcm1fdW5pc3RkKToKKyAgICBwcmludCAiV0VJUkQ6IGNvdWxkIG5vdCBsb2NhdGUgdGhlIEFSTSB1bmlzdGQuaCBoZWFkZXIgZmlsZSIKKyAgICBwcmludCAidHJpZWQgc2VhcmNoaW5nIGluICclcyciICUgYXJtX3VuaXN0ZAorICAgIHByaW50ICJtYXliZSB1c2luZyBhIGRpZmZlcmVudCBzZXQgb2Yga2VybmVsIGhlYWRlcnMgbWlnaHQgaGVscCIKKyAgICBzeXMuZXhpdCgxKQorCisjIG9uIHJlY2VudCBrZXJuZWxzLCBhc20taTM4NiBhbmQgYXNtLXg2NF82NCBoYXZlIGJlZW4gbWVyZ2VkIGludG8gYXNtLXg4NgorIyB3aXRoIHR3byBkaXN0aW5jdCB1bmlzdGRfMzIuaCBhbmQgdW5pc3RkXzY0LmggZGVmaW5pdGlvbiBmaWxlcy4KKyMgdGFrZSBjYXJlIG9mIHRoaXMgaGVyZQorIworeDg2X3VuaXN0ZCA9IGxpbnV4X3Jvb3QgKyAiL2luY2x1ZGUvYXNtLWkzODYvdW5pc3RkLmgiCitpZiBub3Qgb3MucGF0aC5leGlzdHMoeDg2X3VuaXN0ZCk6CisgICAgeDg2X3VuaXN0ZDEgPSB4ODZfdW5pc3RkCisgICAgeDg2X3VuaXN0ZCA9IGxpbnV4X3Jvb3QgKyAiL2luY2x1ZGUvYXNtLXg4Ni91bmlzdGRfMzIuaCIKKyAgICBpZiBub3Qgb3MucGF0aC5leGlzdHMoeDg2X3VuaXN0ZCk6CisgICAgICAgIHByaW50ICJXRUlSRDogY291bGQgbm90IGxvY2F0ZSB0aGUgaTM4Ni94ODYgdW5pc3RkLmggaGVhZGVyIGZpbGUiCisgICAgICAgIHByaW50ICJ0cmllZCBzZWFyY2hpbmcgaW4gJyVzJyBhbmQgJyVzJyIgJSAoeDg2X3VuaXN0ZDEsIHg4Nl91bmlzdGQpCisgICAgICAgIHByaW50ICJtYXliZSB1c2luZyBhIGRpZmZlcmVudCBzZXQgb2Yga2VybmVsIGhlYWRlcnMgbWlnaHQgaGVscCIKKyAgICAgICAgc3lzLmV4aXQoMSkKKworcHJvY2Vzc19oZWFkZXIoIGxpbnV4X3Jvb3QrIi9pbmNsdWRlL2FzbS1hcm0vdW5pc3RkLmgiLCBhcm1fZGljdCApCitwcm9jZXNzX2hlYWRlciggeDg2X3VuaXN0ZCwgeDg2X2RpY3QgKQorCisjIG5vdyBwZXJmb3JtIHRoZSBjb21wYXJpc29uCitlcnJvcnMgPSAwCitmb3Igc2MgaW4gc3lzY2FsbHM6CisgICAgc2NfbmFtZSA9IHNjWyJuYW1lIl0KKyAgICBzY19pZCAgID0gc2NbImlkIl0KKyAgICBpZiBzY19pZCA+PSAwOgorICAgICAgICBpZiBub3QgYXJtX2RpY3QuaGFzX2tleShzY19uYW1lKToKKyAgICAgICAgICAgIHByaW50ICJhcm0gc3lzY2FsbCAlcyBub3QgZGVmaW5lZCAhISIgJSBzY19uYW1lCisgICAgICAgICAgICBlcnJvcnMgKz0gMQorICAgICAgICBlbGlmIGFybV9kaWN0W3NjX25hbWVdICE9IHNjX2lkOgorICAgICAgICAgICAgcHJpbnQgImFybSBzeXNjYWxsICVzIHNob3VsZCBiZSAlZCBpbnN0ZWFkIG9mICVkICEhIiAlIChzY19uYW1lLCBhcm1fZGljdFtzY19uYW1lXSwgc2NfaWQpCisgICAgICAgICAgICBlcnJvcnMgKz0gMQorCitmb3Igc2MgaW4gc3lzY2FsbHM6CisgICAgc2NfbmFtZSA9IHNjWyJuYW1lIl0KKyAgICBzY19pZDIgID0gc2NbImlkMiJdCisgICAgaWYgc2NfaWQyID49IDA6CisgICAgICAgIGlmIG5vdCB4ODZfZGljdC5oYXNfa2V5KHNjX25hbWUpOgorICAgICAgICAgICAgcHJpbnQgIng4NiBzeXNjYWxsICVzIG5vdCBkZWZpbmVkICEhIiAlIHNjX25hbWUKKyAgICAgICAgICAgIGVycm9ycyArPSAxCisgICAgICAgIGVsaWYgeDg2X2RpY3Rbc2NfbmFtZV0gIT0gc2NfaWQyOgorICAgICAgICAgICAgcHJpbnQgIng4NiBzeXNjYWxsICVzIHNob3VsZCBiZSAlZCBpbnN0ZWFkIG9mICVkICEhIiAlIChzY19uYW1lLCB4ODZfZGljdFtzY19uYW1lXSwgc2NfaWQyKQorICAgICAgICAgICAgZXJyb3JzICs9IDEKKworaWYgZXJyb3JzID09IDA6CisgICAgcHJpbnQgImNvbmdyYXR1bGF0aW9ucywgZXZlcnl0aGluZydzIGZpbmUgISEiCitlbHNlOgorICAgIHByaW50ICJjb3JyZWN0ICVkIGVycm9ycyAhISIgJSBlcnJvcnMKZGlmZiAtLWdpdCBhL2xpYmMvdG9vbHMvZ2Vuc2Vydi5weSBiL2xpYmMvdG9vbHMvZ2Vuc2Vydi5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lMzdkMjhmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90b29scy9nZW5zZXJ2LnB5CkBAIC0wLDAgKzEsNzYgQEAKKyMhL3Vzci9iaW4vZW52IHB5dGhvbgorIworCitpbXBvcnQgc3lzLCBvcywgc3RyaW5nLCByZQorCitkZWYgdXNhZ2UoKToKKyAgICBwcmludCAiIiJcCisgIHVzYWdlOiAgZ2Vuc2VydiA8IC9ldGMvc2VydmljZXMgPiBuZXRic2QvbmV0L3NlcnZpY2VzLmgKKworICB0aGlzIHByb2dyYW0gaXMgdXNlZCB0byBnZW5lcmF0ZSB0aGUgaGFyZC1jb2RlZCBpbnRlcm5ldCBzZXJ2aWNlIGxpc3QgZm9yIHRoZQorICBCaW9uaWMgQyBsaWJyYXJ5LgorIiIiCisKK3JlX3NlcnZpY2UgPSByZS5jb21waWxlKHIiKFtcZFx3XC1fXSspXHMrKFxkKykvKHRjcHx1ZHApKC4qKSIpCityZV9hbGlhcyAgID0gcmUuY29tcGlsZShyIihbXGRcd1wtX10rKSguKikiKQorCitjbGFzcyBTZXJ2aWNlOgorICAgIGRlZiBfX2luaXRfXyhzZWxmLG5hbWUscG9ydCxwcm90byk6CisgICAgICAgIHNlbGYubmFtZSAgICA9IG5hbWUKKyAgICAgICAgc2VsZi5wb3J0ICAgID0gcG9ydAorICAgICAgICBzZWxmLnByb3RvICAgPSBwcm90bworICAgICAgICBzZWxmLmFsaWFzZXMgPSBbXQorCisgICAgZGVmIGFkZF9hbGlhcyhzZWxmLGFsaWFzKToKKyAgICAgICAgc2VsZi5hbGlhc2VzLmFwcGVuZChhbGlhcykKKworICAgIGRlZiBfX3N0cl9fKHNlbGYpOgorICAgICAgICByZXN1bHQgID0gIlxcJTBvJXMiICUgKGxlbihzZWxmLm5hbWUpLHNlbGYubmFtZSkKKyAgICAgICAgcmVzdWx0ICs9ICJcXCUwb1xcJTBvIiAlICgoKHNlbGYucG9ydCA+PiA4KSAmIDI1NSksIHNlbGYucG9ydCAmIDI1NSkKKyAgICAgICAgaWYgc2VsZi5wcm90byA9PSAidGNwIjoKKyAgICAgICAgICAgIHJlc3VsdCArPSAidCIKKyAgICAgICAgZWxzZToKKyAgICAgICAgICAgIHJlc3VsdCArPSAidSIKKworICAgICAgICByZXN1bHQgKz0gIlxcJTBvIiAlIGxlbihzZWxmLmFsaWFzZXMpCisgICAgICAgIGZvciBhbGlhcyBpbiBzZWxmLmFsaWFzZXM6CisgICAgICAgICAgICByZXN1bHQgKz0gIlxcJTBvJXMiICUgKGxlbihhbGlhcyksIGFsaWFzKQorCisgICAgICAgIHJldHVybiByZXN1bHQKKworZGVmIHBhcnNlKGYpOgorICAgIHJlc3VsdCA9IFtdICAjIGxpc3Qgb2YgU2VydmljZSBvYmplY3RzCisgICAgZm9yIGxpbmUgaW4gZi54cmVhZGxpbmVzKCk6CisgICAgICAgIGlmIGxlbihsaW5lKSA+IDAgYW5kIGxpbmVbLTFdID09ICJcbiI6CisgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisgICAgICAgIGlmIGxlbihsaW5lKSA+IDAgYW5kIGxpbmVbLTFdID09ICJcciI6CisgICAgICAgICAgICBsaW5lID0gbGluZVs6LTFdCisKKyAgICAgICAgbGluZSA9IHN0cmluZy5zdHJpcChsaW5lKQorICAgICAgICBpZiBsZW4obGluZSkgPT0gMCBvciBsaW5lWzBdID09ICIjIjoKKyAgICAgICAgICAgIGNvbnRpbnVlCisKKyAgICAgICAgbSA9IHJlX3NlcnZpY2UubWF0Y2gobGluZSkKKyAgICAgICAgaWYgbToKKyAgICAgICAgICAgIHNlcnZpY2UgPSBTZXJ2aWNlKCBtLmdyb3VwKDEpLCBpbnQobS5ncm91cCgyKSksIG0uZ3JvdXAoMykgKQorICAgICAgICAgICAgcmVzdCAgICA9IHN0cmluZy5zdHJpcChtLmdyb3VwKDQpKQorCisgICAgICAgICAgICB3aGlsZSAxOgorICAgICAgICAgICAgICAgIG0gPSByZV9hbGlhcy5tYXRjaChyZXN0KQorICAgICAgICAgICAgICAgIGlmIG5vdCBtOgorICAgICAgICAgICAgICAgICAgICBicmVhaworICAgICAgICAgICAgICAgIHNlcnZpY2UuYWRkX2FsaWFzKG0uZ3JvdXAoMSkpCisgICAgICAgICAgICAgICAgcmVzdCA9IHN0cmluZy5zdHJpcChtLmdyb3VwKDIpKQorCisgICAgICAgICAgICByZXN1bHQuYXBwZW5kKHNlcnZpY2UpCisKKyAgICByZXR1cm4gcmVzdWx0CisKK3NlcnZpY2VzID0gcGFyc2Uoc3lzLnN0ZGluKQorbGluZSA9ICcvKiBnZW5lcmF0ZWQgYnkgZ2Vuc2Vydi5weSAtIGRvIG5vdCBlZGl0ICovXG5zdGF0aWMgY29uc3QgY2hhciAgX3NlcnZpY2VzW10gPSAiXFxcbicKK2ZvciBzIGluIHNlcnZpY2VzOgorICAgIGxpbmUgKz0gc3RyKHMpKyJcXFxuIgorbGluZSArPSAnXFwwIjtcbicKK3ByaW50IGxpbmUKKworCmRpZmYgLS1naXQgYS9saWJjL3Rvb2xzL2dlbnN5c2NhbGxzLnB5IGIvbGliYy90b29scy9nZW5zeXNjYWxscy5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4zN2UzNTZkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90b29scy9nZW5zeXNjYWxscy5weQpAQCAtMCwwICsxLDQ1MSBAQAorIyEvdXNyL2Jpbi9weXRob24KKyMKKyMgdGhpcyB0b29sIGlzIHVzZWQgdG8gZ2VuZXJhdGUgdGhlIHN5c2NhbGwgYXNzbWJsZXIgdGVtcGxhdGVzCisjIHRvIGJlIHBsYWNlZCBpbnRvIGFyY2gteDg2L3N5c2NhbGxzLCBhcyB3ZWxsIGFzIHRoZSBjb250ZW50CisjIG9mIGFyY2gteDg2L2xpbnV4L19zeXNjYWxscy5oCisjCisKK2ltcG9ydCBzeXMsIG9zLnBhdGgsIGdsb2IsIHJlLCBzdHJpbmcsIGNvbW1hbmRzLCBmaWxlY21wLCBzaHV0aWwKKworZnJvbSBiaW9uaWNfdXRpbHMgaW1wb3J0ICoKKworIyBzZXQgdGhpcyB0byAxIGlmIHlvdSB3YW50IHRvIGdlbmVyYXRlIHRodW1iIHN0dWJzCitnZW5fdGh1bWJfc3R1YnMgPSAwCisKKyMgc2V0IHRoaXMgdG8gMSBpZiB5b3Ugd2FudCB0byBnZW5lcmF0ZSBBUk0gRUFCSSBzdHVicworZ2VuX2VhYmlfc3R1YnMgPSAxCisKKyMgZ2V0IHRoZSByb290IEJpb25pYyBkaXJlY3RvcnksIHNpbXBseSB0aGlzIHNjcmlwdCdzIGRpcm5hbWUKKyMKK2Jpb25pY19yb290ID0gZmluZF9iaW9uaWNfcm9vdCgpCitpZiBub3QgYmlvbmljX3Jvb3Q6CisgICAgcHJpbnQgImNvdWxkIG5vdCBmaW5kIHRoZSBCaW9uaWMgcm9vdCBkaXJlY3RvcnkuIGFib3J0aW5nIgorICAgIHN5cy5leGl0KDEpCisKK2lmIGJpb25pY19yb290Wy0xXSAhPSAnLyc6CisgICAgYmlvbmljX3Jvb3QgKz0gIi8iCisKK3ByaW50ICJiaW9uaWNfcm9vdCBpcyAlcyIgJSBiaW9uaWNfcm9vdAorCisjIHRlbXAgZGlyZWN0b3J5IHdoZXJlIHdlIHN0b3JlIGFsbCBpbnRlcm1lZGlhdGUgZmlsZXMKK2Jpb25pY190ZW1wID0gIi90bXAvYmlvbmljX2dlbnN5c2NhbGxzLyIKKworIyBhbGwgYXJjaGl0ZWN0dXJlcywgdXBkYXRlIGFzIHlvdSBzZWUgZml0CithbGxfYXJjaHMgPSBbICJhcm0iLCAieDg2IiBdCisKK2RlZiBtYWtlX2RpciggcGF0aCApOgorICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyhwYXRoKToKKyAgICAgICAgcGFyZW50ID0gb3MucGF0aC5kaXJuYW1lKHBhdGgpCisgICAgICAgIGlmIHBhcmVudDoKKyAgICAgICAgICAgIG1ha2VfZGlyKHBhcmVudCkKKyAgICAgICAgb3MubWtkaXIocGF0aCkKKworZGVmIGNyZWF0ZV9maWxlKCByZWxwYXRoICk6CisgICAgZGlyID0gb3MucGF0aC5kaXJuYW1lKCBiaW9uaWNfdGVtcCArIHJlbHBhdGggKQorICAgIG1ha2VfZGlyKGRpcikKKyAgICByZXR1cm4gb3BlbiggYmlvbmljX3RlbXAgKyByZWxwYXRoLCAidyIgKQorCisjIHg4NiBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgorIworCit4ODZfaGVhZGVyID0gIiIiLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisgICAgLnRleHQKKyAgICAudHlwZSAlKGZuYW1lKXMsIEBmdW5jdGlvbgorICAgIC5nbG9ibCAlKGZuYW1lKXMKKyAgICAuYWxpZ24gNAorCislKGZuYW1lKXM6CisiIiIKKworeDg2X3JlZ2lzdGVycyA9IFsgIiVlYngiLCAiJWVjeCIsICIlZWR4IiwgIiVlc2kiLCAiJWVkaSIsICIlZWJwIiBdCisKK3g4Nl9jYWxsID0gIiIiICAgIG1vdmwgICAgJCUoaWRuYW1lKXMsICUlZWF4CisgICAgaW50ICAgICAkMHg4MAorICAgIGNtcGwgICAgJC0xMjksICUlZWF4CisgICAgamIgICAgICAxZgorICAgIG5lZ2wgICAgJSVlYXgKKyAgICBwdXNobCAgICUlZWF4CisgICAgY2FsbCAgICBfX3NldF9lcnJubworICAgIGFkZGwgICAgJDQsICUlZXNwCisgICAgb3JsICAgICAkLTEsICUlZWF4CisxOgorIiIiCisKK3g4Nl9yZXR1cm4gPSAiIiIgICAgcmV0CisiIiIKKworIyBBUk0gYXNzZW1ibGVyIHRlbXBsYXRlcyBmb3IgZWFjaCBzeXNjYWxsIHN0dWIKKyMKK2FybV9oZWFkZXIgPSAiIiIvKiBhdXRvZ2VuZXJhdGVkIGJ5IGdlbnN5c2NhbGxzLnB5ICovCisjaW5jbHVkZSA8c3lzL2xpbnV4LXN5c2NhbGxzLmg+CisKKyAgICAudGV4dAorICAgIC50eXBlICUoZm5hbWUpcywgI2Z1bmN0aW9uCisgICAgLmdsb2JsICUoZm5hbWUpcworICAgIC5hbGlnbiA0CisgICAgLmZuc3RhcnQKKworJShmbmFtZSlzOgorIiIiCisKK2FybV9jYWxsX2RlZmF1bHQgPSBhcm1faGVhZGVyICsgIiIiXAorICAgIHN3aSAgICMlKGlkbmFtZSlzCisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2NhbGxfbG9uZyA9IGFybV9oZWFkZXIgKyAiIiJcCisgICAgLnNhdmUgICB7cjQsIHI1LCBscn0KKyAgICBzdG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbGRyICAgICByNCwgW3NwLCAjMTJdCisgICAgbGRyICAgICByNSwgW3NwLCAjMTZdCisgICAgc3dpICAgICAjICUoaWRuYW1lKXMKKyAgICBsZG1mZCAgIHNwISwge3I0LCByNSwgbHJ9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2VhYmlfY2FsbF9kZWZhdWx0ID0gYXJtX2hlYWRlciArICIiIlwKKyAgICAuc2F2ZSAgIHtyNCwgcjd9CisgICAgc3RtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjd9CisgICAgbW92cyAgICByMCwgcjAKKyAgICBieHBsICAgIGxyCisgICAgYiAgICAgICBfX3NldF9zeXNjYWxsX2Vycm5vCisgICAgLmZuZW5kCisiIiIKKworYXJtX2VhYmlfY2FsbF9sb25nID0gYXJtX2hlYWRlciArICIiIlwKKyAgICBtb3YgICAgIGlwLCBzcAorICAgIC5zYXZlICAge3I0LCByNSwgcjYsIHI3fQorICAgIHN0bWZkICAgc3AhLCB7cjQsIHI1LCByNiwgcjd9CisgICAgbGRtZmQgICBpcCwge3I0LCByNSwgcjZ9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgbGRtZmQgICBzcCEsIHtyNCwgcjUsIHI2LCByN30KKyAgICBtb3ZzICAgIHIwLCByMAorICAgIGJ4cGwgICAgbHIKKyAgICBiICAgICAgIF9fc2V0X3N5c2NhbGxfZXJybm8KKyAgICAuZm5lbmQKKyIiIgorCisjIEFSTSB0aHVtYiBhc3NlbWJsZXIgdGVtcGxhdGVzIGZvciBlYWNoIHN5c2NhbGwgc3R1YgorIwordGh1bWJfaGVhZGVyID0gIiIiLyogYXV0b2dlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSAqLworICAgIC50ZXh0CisgICAgLnR5cGUgJShmbmFtZSlzLCAjZnVuY3Rpb24KKyAgICAuZ2xvYmwgJShmbmFtZSlzCisgICAgLmFsaWduIDQKKyAgICAudGh1bWJfZnVuYworICAgIC5mbnN0YXJ0CisKKyNkZWZpbmUgIF9fdGh1bWJfXworI2luY2x1ZGUgPHN5cy9saW51eC1zeXNjYWxscy5oPgorCisKKyUoZm5hbWUpczoKKyIiIgorCit0aHVtYl9jYWxsX2RlZmF1bHQgPSB0aHVtYl9oZWFkZXIgKyAiIiJcCisgICAgLnNhdmUgICB7cjcsbHJ9CisgICAgcHVzaCAgICB7cjcsbHJ9CisgICAgbGRyICAgICByNywgPSUoaWRuYW1lKXMKKyAgICBzd2kgICAgICMwCisgICAgdHN0ICAgICByMCwgcjAKKyAgICBibWkgICAgIDFmCisgICAgcG9wICAgICB7cjcscGN9CisxOgorICAgIG5lZyAgICAgcjAsIHIwCisgICAgbGRyICAgICByMSwgPV9fc2V0X2Vycm5vCisgICAgYmx4ICAgICByMQorICAgIHBvcCAgICAge3I3LHBjfQorICAgIC5mbmVuZAorIiIiCisKK3RodW1iX2NhbGxfbG9uZyA9IHRodW1iX2hlYWRlciArICIiIlwKKyAgICAuc2F2ZSAge3I0LHI1LHI3LGxyfQorICAgIHB1c2ggICB7cjQscjUscjcsbHJ9CisgICAgbGRyICAgIHI0LCBbc3AsIzE2XQorICAgIGxkciAgICByNSwgW3NwLCMyMF0KKyAgICBsZHIgICAgcjcsID0lKGlkbmFtZSlzCisgICAgc3dpICAgICMwCisgICAgdHN0ICAgIHIwLCByMAorICAgIGJtaSAgICAxZgorICAgIHBvcCAgICB7cjQscjUscjcscGN9CisxOgorICAgIG5lZyAgICByMCwgcjAKKyAgICBsZHIgICAgcjEsID1fX3NldF9lcnJubworICAgIGJseCAgICByMQorICAgIHBvcCAgICB7cjQscjUscjcscGN9CisgICAgLmZuZW5kCisiIiIKKworCitjbGFzcyBTdGF0ZToKKyAgICBkZWYgX19pbml0X18oc2VsZik6CisgICAgICAgIHNlbGYub2xkX3N0dWJzID0gW10KKyAgICAgICAgc2VsZi5uZXdfc3R1YnMgPSBbXQorICAgICAgICBzZWxmLm90aGVyX2ZpbGVzID0gW10KKyAgICAgICAgc2VsZi5zeXNjYWxscyA9IFtdCisKKyAgICBkZWYgeDg2X2dlbnN0dWIoc2VsZixmbmFtZSwgbnVtcGFyYW1zLCBpZG5hbWUpOgorICAgICAgICB0ID0geyAiZm5hbWUiICA6IGZuYW1lLAorICAgICAgICAgICAgICAiaWRuYW1lIiA6IGlkbmFtZSB9CisKKyAgICAgICAgcmVzdWx0ICAgICA9IHg4Nl9oZWFkZXIgJSB0CisgICAgICAgIHN0YWNrX2JpYXMgPSA0CisgICAgICAgIGZvciByIGluIHJhbmdlKG51bXBhcmFtcyk6CisgICAgICAgICAgICByZXN1bHQgICAgICs9ICIgICAgcHVzaGwgICAiICsgeDg2X3JlZ2lzdGVyc1tyXSArICJcbiIKKyAgICAgICAgICAgIHN0YWNrX2JpYXMgKz0gNAorCisgICAgICAgIGZvciByIGluIHJhbmdlKG51bXBhcmFtcyk6CisgICAgICAgICAgICByZXN1bHQgKz0gIiAgICBtb3YgICAgICVkKCUlZXNwKSwgJXMiICUgKHN0YWNrX2JpYXMrcio0LCB4ODZfcmVnaXN0ZXJzW3JdKSArICJcbiIKKworICAgICAgICByZXN1bHQgKz0geDg2X2NhbGwgJSB0CisKKyAgICAgICAgZm9yIHIgaW4gcmFuZ2UobnVtcGFyYW1zKToKKyAgICAgICAgICAgIHJlc3VsdCArPSAiICAgIHBvcGwgICAgIiArIHg4Nl9yZWdpc3RlcnNbbnVtcGFyYW1zLXItMV0gKyAiXG4iCisKKyAgICAgICAgcmVzdWx0ICs9IHg4Nl9yZXR1cm4KKyAgICAgICAgcmV0dXJuIHJlc3VsdAorCisKKyAgICBkZWYgYXJtX2dlbnN0dWIoc2VsZixmbmFtZSwgZmxhZ3MsIGlkbmFtZSk6CisgICAgICAgIHQgPSB7ICJmbmFtZSIgIDogZm5hbWUsCisgICAgICAgICAgICAgICJpZG5hbWUiIDogaWRuYW1lIH0KKyAgICAgICAgaWYgZmxhZ3M6CisgICAgICAgICAgICBudW1hcmdzID0gaW50KGZsYWdzKQorICAgICAgICAgICAgaWYgbnVtYXJncyA+IDQ6CisgICAgICAgICAgICAgICAgcmV0dXJuIGFybV9jYWxsX2xvbmcgJSB0CisgICAgICAgIHJldHVybiBhcm1fY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgYXJtX2VhYmlfZ2Vuc3R1YihzZWxmLGZuYW1lLCBmbGFncywgaWRuYW1lKToKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIG51bWFyZ3MgPSBpbnQoZmxhZ3MpCisgICAgICAgICAgICBpZiBudW1hcmdzID4gNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gYXJtX2VhYmlfY2FsbF9sb25nICUgdAorICAgICAgICByZXR1cm4gYXJtX2VhYmlfY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgdGh1bWJfZ2Vuc3R1YihzZWxmLGZuYW1lLCBmbGFncywgaWRuYW1lKToKKyAgICAgICAgdCA9IHsgImZuYW1lIiAgOiBmbmFtZSwKKyAgICAgICAgICAgICAgImlkbmFtZSIgOiBpZG5hbWUgfQorICAgICAgICBpZiBmbGFnczoKKyAgICAgICAgICAgIG51bWFyZ3MgPSBpbnQoZmxhZ3MpCisgICAgICAgICAgICBpZiBudW1hcmdzID4gNDoKKyAgICAgICAgICAgICAgICByZXR1cm4gdGh1bWJfY2FsbF9sb25nICUgdAorICAgICAgICByZXR1cm4gdGh1bWJfY2FsbF9kZWZhdWx0ICUgdAorCisKKyAgICBkZWYgcHJvY2Vzc19maWxlKHNlbGYsaW5wdXQpOgorICAgICAgICBwYXJzZXIgPSBTeXNDYWxsc1R4dFBhcnNlcigpCisgICAgICAgIHBhcnNlci5wYXJzZV9maWxlKGlucHV0KQorICAgICAgICBzZWxmLnN5c2NhbGxzID0gcGFyc2VyLnN5c2NhbGxzCisgICAgICAgIHBhcnNlciA9IE5vbmUKKworICAgICAgICBmb3IgdCBpbiBzZWxmLnN5c2NhbGxzOgorICAgICAgICAgICAgc3lzY2FsbF9mdW5jICAgPSB0WyJmdW5jIl0KKyAgICAgICAgICAgIHN5c2NhbGxfcGFyYW1zID0gdFsicGFyYW1zIl0KKyAgICAgICAgICAgIHN5c2NhbGxfbmFtZSAgID0gdFsibmFtZSJdCisKKyAgICAgICAgICAgIGlmIHRbImlkIl0gPj0gMDoKKyAgICAgICAgICAgICAgICBpZiBnZW5fdGh1bWJfc3R1YnM6CisgICAgICAgICAgICAgICAgICAgIHRbImFzbS10aHVtYiJdID0gc2VsZi50aHVtYl9nZW5zdHViKHN5c2NhbGxfZnVuYyxsZW4oc3lzY2FsbF9wYXJhbXMpLCJfX05SXyIrc3lzY2FsbF9uYW1lKQorICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgIGlmIGdlbl9lYWJpX3N0dWJzOgorICAgICAgICAgICAgICAgICAgICAgICAgdFsiYXNtLWFybSJdICAgPSBzZWxmLmFybV9lYWJpX2dlbnN0dWIoc3lzY2FsbF9mdW5jLGxlbihzeXNjYWxsX3BhcmFtcyksIl9fTlJfIitzeXNjYWxsX25hbWUpCisgICAgICAgICAgICAgICAgICAgIGVsc2U6CisgICAgICAgICAgICAgICAgICAgICAgICB0WyJhc20tYXJtIl0gICA9IHNlbGYuYXJtX2dlbnN0dWIoc3lzY2FsbF9mdW5jLGxlbihzeXNjYWxsX3BhcmFtcyksIl9fTlJfIitzeXNjYWxsX25hbWUpCisKKyAgICAgICAgICAgIGlmIHRbImlkMiJdID49IDA6CisgICAgICAgICAgICAgICAgdFsiYXNtLXg4NiJdID0gc2VsZi54ODZfZ2Vuc3R1YihzeXNjYWxsX2Z1bmMsbGVuKHN5c2NhbGxfcGFyYW1zKSwiX19OUl8iK3N5c2NhbGxfbmFtZSkKKworICAgIGRlZiBnZW5fTlJfc3lzY2FsbChzZWxmLGZwLG5hbWUsaWQpOgorICAgICAgICBmcC53cml0ZSggIiNkZWZpbmUgX19OUl8lLTI1cyAgICAoX19OUl9TWVNDQUxMX0JBU0UgKyAlZClcbiIgJSAobmFtZSxpZCkgKQorCisgICAgIyBub3cgZHVtcCB0aGUgY29udGVudCBvZiBsaW51eC9fc3lzY2FsbHMuaAorICAgIGRlZiBnZW5fbGludXhfc3lzY2FsbHNfaChzZWxmKToKKyAgICAgICAgcGF0aCA9ICJpbmNsdWRlL3N5cy9saW51eC1zeXNjYWxscy5oIgorICAgICAgICBEKCAiZ2VuZXJhdGluZyAiK3BhdGggKQorICAgICAgICBmcCA9IGNyZWF0ZV9maWxlKCBwYXRoICkKKyAgICAgICAgZnAud3JpdGUoICIvKiBhdXRvLWdlbmVyYXRlZCBieSBnZW5zeXNjYWxscy5weSwgZG8gbm90IHRvdWNoICovXG4iICkKKyAgICAgICAgZnAud3JpdGUoICIjaWZuZGVmIF9CSU9OSUNfTElOVVhfU1lTQ0FMTFNfSF9cblxuIiApCisgICAgICAgIGZwLndyaXRlKCAiI2lmICFkZWZpbmVkIF9fQVNNX0FSTV9VTklTVERfSCAmJiAhZGVmaW5lZCBfX0FTTV9JMzg2X1VOSVNURF9IXG4iICkKKyAgICAgICAgZnAud3JpdGUoICIjaWYgZGVmaW5lZCBfX2FybV9fICYmICFkZWZpbmVkIF9fQVJNX0VBQklfXyAmJiAhZGVmaW5lZCBfX3RodW1iX19cbiIgKQorICAgICAgICBmcC53cml0ZSggIiAgIyAgZGVmaW5lIF9fTlJfU1lTQ0FMTF9CQVNFICAweDkwMDAwMFxuIiApCisgICAgICAgIGZwLndyaXRlKCAiICAjZWxzZVxuIiApCisgICAgICAgIGZwLndyaXRlKCAiICAjICBkZWZpbmUgIF9fTlJfU1lTQ0FMTF9CQVNFICAwXG4iICkKKyAgICAgICAgZnAud3JpdGUoICIgICNlbmRpZlxuXG4iICkKKworICAgICAgICAjIGZpcnN0LCBhbGwgY29tbW9uIHN5c2NhbGxzCisgICAgICAgIGZvciBzYyBpbiBzZWxmLnN5c2NhbGxzOgorICAgICAgICAgICAgc2NfaWQgID0gc2NbImlkIl0KKyAgICAgICAgICAgIHNjX2lkMiA9IHNjWyJpZDIiXQorICAgICAgICAgICAgc2NfbmFtZSA9IHNjWyJuYW1lIl0KKyAgICAgICAgICAgIGlmIHNjX2lkID09IHNjX2lkMiBhbmQgc2NfaWQgPj0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmdlbl9OUl9zeXNjYWxsKCBmcCwgc2NfbmFtZSwgc2NfaWQgKQorCisgICAgICAgICMgbm93LCBhbGwgYXJtLXNwZWNpZmljIHN5c2NhbGxzCisgICAgICAgIGZwLndyaXRlKCAiXG4jaWZkZWYgX19hcm1fX1xuIiApOworICAgICAgICBmb3Igc2MgaW4gc2VsZi5zeXNjYWxsczoKKyAgICAgICAgICAgIHNjX2lkICA9IHNjWyJpZCJdCisgICAgICAgICAgICBzY19pZDIgPSBzY1siaWQyIl0KKyAgICAgICAgICAgIHNjX25hbWUgPSBzY1sibmFtZSJdCisgICAgICAgICAgICBpZiBzY19pZCAhPSBzY19pZDIgYW5kIHNjX2lkID49IDA6CisgICAgICAgICAgICAgICAgc2VsZi5nZW5fTlJfc3lzY2FsbCggZnAsIHNjX25hbWUsIHNjX2lkICkKKyAgICAgICAgZnAud3JpdGUoICIjZW5kaWZcbiIgKTsKKworICAgICAgICAjIGZpbmFsbHksIGFsbCBpMzg2LXNwZWNpZmljIHN5c2NhbGxzCisgICAgICAgIGZwLndyaXRlKCAiXG4jaWZkZWYgX19pMzg2X19cbiIgKTsKKyAgICAgICAgZm9yIHNjIGluIHNlbGYuc3lzY2FsbHM6CisgICAgICAgICAgICBzY19pZCAgPSBzY1siaWQiXQorICAgICAgICAgICAgc2NfaWQyID0gc2NbImlkMiJdCisgICAgICAgICAgICBzY19uYW1lID0gc2NbIm5hbWUiXQorICAgICAgICAgICAgaWYgc2NfaWQgIT0gc2NfaWQyIGFuZCBzY19pZDIgPj0gMDoKKyAgICAgICAgICAgICAgICBzZWxmLmdlbl9OUl9zeXNjYWxsKCBmcCwgc2NfbmFtZSwgc2NfaWQyICkKKyAgICAgICAgZnAud3JpdGUoICIjZW5kaWZcbiIgKTsKKworICAgICAgICBmcC53cml0ZSggIlxuI2VuZGlmXG4iICkKKyAgICAgICAgZnAud3JpdGUoICJcbiNlbmRpZiAvKiBfQklPTklDX0xJTlVYX1NZU0NBTExTX0hfICovXG4iICk7CisgICAgICAgIGZwLmNsb3NlKCkKKyAgICAgICAgc2VsZi5vdGhlcl9maWxlcy5hcHBlbmQoIHBhdGggKQorCisKKyAgICAjIG5vdyBkdW1wIHRoZSBjb250ZW50IG9mIGxpbnV4L19zeXNjYWxscy5oCisgICAgZGVmIGdlbl9saW51eF91bmlzdGRfaChzZWxmKToKKyAgICAgICAgcGF0aCA9ICJpbmNsdWRlL3N5cy9saW51eC11bmlzdGQuaCIKKyAgICAgICAgRCggImdlbmVyYXRpbmcgIitwYXRoICkKKyAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggcGF0aCApCisgICAgICAgIGZwLndyaXRlKCAiLyogYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaCAqL1xuIiApCisgICAgICAgIGZwLndyaXRlKCAiI2lmbmRlZiBfQklPTklDX0xJTlVYX1VOSVNURF9IX1xuXG4iICk7CisgICAgICAgIGZwLndyaXRlKCAiI2lmZGVmIF9fY3BsdXNwbHVzXG5leHRlcm4gXCJDXCIge1xuI2VuZGlmXG5cbiIgKQorCisgICAgICAgIGZvciBzYyBpbiBzZWxmLnN5c2NhbGxzOgorICAgICAgICAgICAgZnAud3JpdGUoIHNjWyJkZWNsIl0rIlxuIiApCisKKyAgICAgICAgZnAud3JpdGUoICIjaWZkZWYgX19jcGx1c3BsdXNcbn1cbiNlbmRpZlxuIiApCisgICAgICAgIGZwLndyaXRlKCAiXG4jZW5kaWYgLyogX0JJT05JQ19MSU5VWF9VTklTVERfSF8gKi9cbiIgKTsKKyAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICBzZWxmLm90aGVyX2ZpbGVzLmFwcGVuZCggcGF0aCApCisKKyAgICAjIG5vdyBkdW1wIHRoZSBjb250ZW50cyBvZiBzeXNjYWxscy5taworICAgIGRlZiBnZW5fYXJjaF9hcm1fc3lzY2FsbHNfbWsoc2VsZik6CisgICAgICAgIHBhdGggPSAiYXJjaC1hcm0vc3lzY2FsbHMubWsiCisgICAgICAgIEQoICJnZW5lcmF0aW5nICIrcGF0aCApCisgICAgICAgIGZwID0gY3JlYXRlX2ZpbGUoIHBhdGggKQorICAgICAgICBmcC53cml0ZSggIiMgYXV0by1nZW5lcmF0ZWQgYnkgZ2Vuc3lzY2FsbHMucHksIGRvIG5vdCB0b3VjaFxuIiApCisgICAgICAgIGZwLndyaXRlKCAic3lzY2FsbF9zcmMgOj0gXG4iICkKKyAgICAgICAgZm9yIHNjIGluIHNlbGYuc3lzY2FsbHM6CisgICAgICAgICAgICAgICAgaWYgc2NbImlkIl0gPj0gMDoKKyAgICAgICAgICAgICAgICAgICAgICAgIGZwLndyaXRlKCAic3lzY2FsbF9zcmMgKz0gYXJjaC1hcm0vc3lzY2FsbHMvJXMuU1xuIiAlIHNjWyJmdW5jIl0gKQorICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgIHNlbGYub3RoZXJfZmlsZXMuYXBwZW5kKCBwYXRoICkKKworICAgICMgbm93IGdlbmVyYXRlIGVhY2ggc3lzY2FsbCBzdHViCisgICAgZGVmIGdlbl9zeXNjYWxsX3N0dWJzKHNlbGYpOgorICAgICAgICBmb3Igc2MgaW4gc2VsZi5zeXNjYWxsczoKKyAgICAgICAgICAgIGlmIHNjLmhhc19rZXkoImFzbS1hcm0iKToKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLWFybS9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KKyAgICAgICAgICAgICAgICBEKCAiPj4+IGdlbmVyYXRpbmcgIitmbmFtZSApCisgICAgICAgICAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggZm5hbWUgKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKHNjWyJhc20tYXJtIl0pCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYubmV3X3N0dWJzLmFwcGVuZCggZm5hbWUgKQorCisgICAgICAgICAgICBpZiBzYy5oYXNfa2V5KCJhc20tdGh1bWIiKToKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLWFybS9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KKyAgICAgICAgICAgICAgICBEKCAiPj4+IGdlbmVyYXRpbmcgIitmbmFtZSApCisgICAgICAgICAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggZm5hbWUgKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKHNjWyJhc20tdGh1bWIiXSkKKyAgICAgICAgICAgICAgICBmcC5jbG9zZSgpCisgICAgICAgICAgICAgICAgc2VsZi5uZXdfc3R1YnMuYXBwZW5kKCBmbmFtZSApCisKKyAgICAgICAgICAgIGlmIHNjLmhhc19rZXkoImFzbS14ODYiKToKKyAgICAgICAgICAgICAgICBmbmFtZSA9ICJhcmNoLXg4Ni9zeXNjYWxscy8lcy5TIiAlIHNjWyJmdW5jIl0KKyAgICAgICAgICAgICAgICBEKCAiPj4+IGdlbmVyYXRpbmcgIitmbmFtZSApCisgICAgICAgICAgICAgICAgZnAgPSBjcmVhdGVfZmlsZSggZm5hbWUgKQorICAgICAgICAgICAgICAgIGZwLndyaXRlKHNjWyJhc20teDg2Il0pCisgICAgICAgICAgICAgICAgZnAuY2xvc2UoKQorICAgICAgICAgICAgICAgIHNlbGYubmV3X3N0dWJzLmFwcGVuZCggZm5hbWUgKQorCisKKyAgICBkZWYgIHJlZ2VuZXJhdGUoc2VsZik6CisgICAgICAgIEQoICJzY2FubmluZyBmb3IgZXhpc3RpbmcgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHN0dWIgZmlsZXMiICkKKworICAgICAgICBiaW9uaWNfcm9vdF9sZW4gPSBsZW4oYmlvbmljX3Jvb3QpCisKKyAgICAgICAgZm9yIGFyY2ggaW4gYWxsX2FyY2hzOgorICAgICAgICAgICAgYXJjaF9wYXRoID0gYmlvbmljX3Jvb3QgKyAiYXJjaC0iICsgYXJjaAorICAgICAgICAgICAgRCggInNjYW5uaW5nICIgKyBhcmNoX3BhdGggKQorICAgICAgICAgICAgZmlsZXMgPSBnbG9iLmdsb2IoIGFyY2hfcGF0aCArICIvc3lzY2FsbHMvKi5TIiApCisgICAgICAgICAgICBmb3IgZiBpbiBmaWxlczoKKyAgICAgICAgICAgICAgICBzZWxmLm9sZF9zdHVicy5hcHBlbmQoIGZbYmlvbmljX3Jvb3RfbGVuOl0gKQorCisgICAgICAgIEQoICJmb3VuZCAlZCBzdHViIGZpbGVzIiAlIGxlbihzZWxmLm9sZF9zdHVicykgKQorCisgICAgICAgIGlmIG5vdCBvcy5wYXRoLmV4aXN0cyggYmlvbmljX3RlbXAgKToKKyAgICAgICAgICAgIEQoICJjcmVhdGluZyAlcyIgJSBiaW9uaWNfdGVtcCApCisgICAgICAgICAgICBvcy5ta2RpciggYmlvbmljX3RlbXAgKQorCisjICAgICAgICBEKCAicDQgZWRpdGluZyBzb3VyY2UgZmlsZXMiICkKKyMgICAgICAgIGZvciBhcmNoIGluIGFsbF9hcmNoczoKKyMgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBlZGl0ICIgKyBhcmNoICsgIi9zeXNjYWxscy8qLlMgIiApCisjICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZWRpdCAiICsgYXJjaCArICIvc3lzY2FsbHMubWsiICkKKyMgICAgICAgIGNvbW1hbmRzLmdldG91dHB1dCggInA0IGVkaXQgIiArIGJpb25pY19yb290ICsgImluY2x1ZGUvc3lzL2xpbnV4LXN5c2NhbGxzLmgiICkKKworICAgICAgICBEKCAicmUtZ2VuZXJhdGluZyBzdHVicyBhbmQgc3VwcG9ydCBmaWxlcyIgKQorCisgICAgICAgIHNlbGYuZ2VuX2xpbnV4X3N5c2NhbGxzX2goKQorICAgICAgICBzZWxmLmdlbl9hcmNoX2FybV9zeXNjYWxsc19taygpCisgICAgICAgIHNlbGYuZ2VuX2xpbnV4X3VuaXN0ZF9oKCkKKyAgICAgICAgc2VsZi5nZW5fc3lzY2FsbF9zdHVicygpCisKKyAgICAgICAgRCggImNvbXBhcmluZyBmaWxlcyIgKQorICAgICAgICBhZGRzICAgID0gW10KKyAgICAgICAgZWRpdHMgICA9IFtdCisKKyAgICAgICAgZm9yIHN0dWIgaW4gc2VsZi5uZXdfc3R1YnMgKyBzZWxmLm90aGVyX2ZpbGVzOgorICAgICAgICAgICAgaWYgbm90IG9zLnBhdGguZXhpc3RzKCBiaW9uaWNfcm9vdCArIHN0dWIgKToKKyAgICAgICAgICAgICAgICAjIG5ldyBmaWxlLCBQNCBhZGQgaXQKKyAgICAgICAgICAgICAgICBEKCAibmV3IGZpbGU6ICAgICAiICsgc3R1YikKKyAgICAgICAgICAgICAgICBhZGRzLmFwcGVuZCggYmlvbmljX3Jvb3QgKyBzdHViICkKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIGJpb25pY190ZW1wICsgc3R1YiwgYmlvbmljX3Jvb3QgKyBzdHViICkKKworICAgICAgICAgICAgZWxpZiBub3QgZmlsZWNtcC5jbXAoIGJpb25pY190ZW1wICsgc3R1YiwgYmlvbmljX3Jvb3QgKyBzdHViICk6CisgICAgICAgICAgICAgICAgRCggImNoYW5nZWQgZmlsZTogIiArIHN0dWIpCisgICAgICAgICAgICAgICAgZWRpdHMuYXBwZW5kKCBzdHViICkKKworICAgICAgICBkZWxldGVzID0gW10KKyAgICAgICAgZm9yIHN0dWIgaW4gc2VsZi5vbGRfc3R1YnM6CisgICAgICAgICAgICBpZiBub3Qgc3R1YiBpbiBzZWxmLm5ld19zdHViczoKKyAgICAgICAgICAgICAgICBEKCAiZGVsZXRlZCBmaWxlOiAiICsgc3R1YikKKyAgICAgICAgICAgICAgICBkZWxldGVzLmFwcGVuZCggYmlvbmljX3Jvb3QgKyBzdHViICkKKworCisgICAgICAgIGlmIGFkZHM6CisgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBhZGQgIiArIHN0cmluZy5qb2luKCBhZGRzLCAiICIgKSApCisgICAgICAgIGlmIGRlbGV0ZXM6CisgICAgICAgICAgICBjb21tYW5kcy5nZXRvdXRwdXQoICJwNCBkZWxldGUgIiArIHN0cmluZy5qb2luKCBkZWxldGVzLCAiICIgKSApCisgICAgICAgIGlmIGVkaXRzOgorICAgICAgICAgICAgY29tbWFuZHMuZ2V0b3V0cHV0KCAicDQgZWRpdCAiICsgc3RyaW5nLmpvaW4oIGVkaXRzLCAiICIgKSApCisgICAgICAgICAgICBmb3IgZmlsZSBpbiBlZGl0czoKKyAgICAgICAgICAgICAgICBzaHV0aWwuY29weWZpbGUoIGJpb25pY190ZW1wICsgZmlsZSwgYmlvbmljX3Jvb3QgKyBmaWxlICkKKworICAgICAgICBEKCJyZWFkeSB0byBnbyAhISIpCisKK0Rfc2V0bGV2ZWwoMSkKKworc3RhdGUgPSBTdGF0ZSgpCitzdGF0ZS5wcm9jZXNzX2ZpbGUoYmlvbmljX3Jvb3QrIlNZU0NBTExTLlRYVCIpCitzdGF0ZS5yZWdlbmVyYXRlKCkKZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2FzY3RpbWUuYyBiL2xpYmMvdHpjb2RlL2FzY3RpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDgwNGYxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvYXNjdGltZS5jCkBAIC0wLDAgKzEsMTM4IEBACisvKgorKiogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorKi8KKworLyoKKyoqIEF2b2lkIHRoZSB0ZW1wdGF0aW9uIHRvIHB1bnQgZW50aXJlbHkgdG8gc3RyZnRpbWU7CisqKiB0aGUgb3V0cHV0IG9mIHN0cmZ0aW1lIGlzIHN1cHBvc2VkIHRvIGJlIGxvY2FsZSBzcGVjaWZpYworKiogd2hlcmVhcyB0aGUgb3V0cHV0IG9mIGFzY3RpbWUgaXMgc3VwcG9zZWQgdG8gYmUgY29uc3RhbnQuCisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJZWxzaWVpZFtdID0gIkAoIylhc2N0aW1lLmMJOC4yIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisvKkxJTlRMSUJSQVJZKi8KKworI2luY2x1ZGUgInByaXZhdGUuaCIKKyNpbmNsdWRlICJ0emZpbGUuaCIKKworLyoKKyoqIFNvbWUgc3lzdGVtcyBvbmx5IGhhbmRsZSAiJS4yZCI7IG90aGVycyBvbmx5IGhhbmRsZSAiJTAyZCI7CisqKiAiJTAyLjJkIiBtYWtlcyAobW9zdCkgZXZlcnlib2R5IGhhcHB5LgorKiogQXQgbGVhc3Qgc29tZSB2ZXJzaW9ucyBvZiBnY2Mgd2FybiBhYm91dCB0aGUgJTAyLjJkOworKiogd2UgY29uZGl0aW9uYWxpemUgYmVsb3cgdG8gYXZvaWQgdGhlIHdhcm5pbmcuCisqLworLyoKKyoqIEFsbCB5ZWFycyBhc3NvY2lhdGVkIHdpdGggMzItYml0IHRpbWVfdCB2YWx1ZXMgYXJlIGV4YWN0bHkgZm91ciBkaWdpdHMgbG9uZzsKKyoqIHNvbWUgeWVhcnMgYXNzb2NpYXRlZCB3aXRoIDY0LWJpdCB0aW1lX3QgdmFsdWVzIGFyZSBub3QuCisqKiBWaW50YWdlIHByb2dyYW1zIGFyZSBjb2RlZCBmb3IgeWVhcnMgdGhhdCBhcmUgYWx3YXlzIGZvdXIgZGlnaXRzIGxvbmcKKyoqIGFuZCBtYXkgYXNzdW1lIHRoYXQgdGhlIG5ld2xpbmUgYWx3YXlzIGxhbmRzIGluIHRoZSBzYW1lIHBsYWNlLgorKiogRm9yIHllYXJzIHRoYXQgYXJlIGxlc3MgdGhhbiBmb3VyIGRpZ2l0cywgd2UgcGFkIHRoZSBvdXRwdXQgd2l0aAorKiogbGVhZGluZyB6ZXJvZXMgdG8gZ2V0IHRoZSBuZXdsaW5lIGluIHRoZSB0cmFkaXRpb25hbCBwbGFjZS4KKyoqIFRoZSAtNCBlbnN1cmVzIHRoYXQgd2UgZ2V0IGZvdXIgY2hhcmFjdGVycyBvZiBvdXRwdXQgZXZlbiBpZgorKiogd2UgY2FsbCBhIHN0cmZ0aW1lIHZhcmlhbnQgdGhhdCBwcm9kdWNlcyBmZXdlciBjaGFyYWN0ZXJzIGZvciBzb21lIHllYXJzLgorKiogVGhlIElTTyBDIDE5OTkgYW5kIFBPU0lYIDEwMDMuMS0yMDA0IHN0YW5kYXJkcyBwcm9oaWJpdCBwYWRkaW5nIHRoZSB5ZWFyLAorKiogYnV0IG1hbnkgaW1wbGVtZW50YXRpb25zIHBhZCBhbnl3YXk7IG1vc3QgbGlrZWx5IHRoZSBzdGFuZGFyZHMgYXJlIGJ1Z2d5LgorKi8KKyNpZmRlZiBfX0dOVUNfXworI2RlZmluZSBBU0NUSU1FX0ZNVAkiJS4zcyAlLjNzJTNkICUyLjJkOiUyLjJkOiUyLjJkICUtNHNcbiIKKyNlbHNlIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisjZGVmaW5lIEFTQ1RJTUVfRk1UCSIlLjNzICUuM3MlM2QgJTAyLjJkOiUwMi4yZDolMDIuMmQgJS00c1xuIgorI2VuZGlmIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisvKgorKiogRm9yIHllYXJzIHRoYXQgYXJlIG1vcmUgdGhhbiBmb3VyIGRpZ2l0cyB3ZSBwdXQgZXh0cmEgc3BhY2VzIGJlZm9yZSB0aGUgeWVhcgorKiogc28gdGhhdCBjb2RlIHRyeWluZyB0byBvdmVyd3JpdGUgdGhlIG5ld2xpbmUgd29uJ3QgZW5kIHVwIG92ZXJ3cml0aW5nCisqKiBhIGRpZ2l0IHdpdGhpbiBhIHllYXIgYW5kIHRydW5jYXRpbmcgdGhlIHllYXIgKG9wZXJhdGluZyBvbiB0aGUgYXNzdW1wdGlvbgorKiogdGhhdCBubyBvdXRwdXQgaXMgYmV0dGVyIHRoYW4gd3Jvbmcgb3V0cHV0KS4KKyovCisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgQVNDVElNRV9GTVRfQgkiJS4zcyAlLjNzJTNkICUyLjJkOiUyLjJkOiUyLjJkICAgICAlc1xuIgorI2Vsc2UgLyogIWRlZmluZWQgX19HTlVDX18gKi8KKyNkZWZpbmUgQVNDVElNRV9GTVRfQgkiJS4zcyAlLjNzJTNkICUwMi4yZDolMDIuMmQ6JTAyLjJkICAgICAlc1xuIgorI2VuZGlmIC8qICFkZWZpbmVkIF9fR05VQ19fICovCisKKyNkZWZpbmUgU1REX0FTQ1RJTUVfQlVGX1NJWkUJMjYKKy8qCisqKiBCaWcgZW5vdWdoIGZvciBzb21ldGhpbmcgc3VjaCBhcworKiogPz8/ID8/Py0yMTQ3NDgzNjQ4IC0yMTQ3NDgzNjQ4Oi0yMTQ3NDgzNjQ4Oi0yMTQ3NDgzNjQ4ICAgICAtMjE0NzQ4MzY0OFxuCisqKiAodHdvIHRocmVlLWNoYXJhY3RlciBhYmJyZXZpYXRpb25zLCBmaXZlIHN0cmluZ3MgZGVub3RpbmcgaW50ZWdlcnMsCisqKiBzZXZlbiBleHBsaWNpdCBzcGFjZXMsIHR3byBleHBsaWNpdCBjb2xvbnMsIGEgbmV3bGluZSwKKyoqIGFuZCBhIHRyYWlsaW5nIEFTQ0lJIG51bCkuCisqKiBUaGUgdmFsdWVzIGFib3ZlIGFyZSBmb3Igc3lzdGVtcyB3aGVyZSBhbiBpbnQgaXMgMzIgYml0cyBhbmQgYXJlIHByb3ZpZGVkCisqKiBhcyBhbiBleGFtcGxlOyB0aGUgZGVmaW5lIGJlbG93IGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gZm9yIHRoZSBzeXN0ZW0gYXQKKyoqIGhhbmQuCisqLworI2RlZmluZSBNQVhfQVNDVElNRV9CVUZfU0laRQkoMiozKzUqSU5UX1NUUkxFTl9NQVhJTVVNKGludCkrNysyKzErMSkKKworc3RhdGljIGNoYXIJYnVmX2FzY3RpbWVbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOworCisvKgorKiogQSBsYSBJU08vSUVDIDk5NDUtMSwgQU5TSS9JRUVFIFN0ZCAxMDAzLjEsIDIwMDQgRWRpdGlvbi4KKyovCisKK2NoYXIgKgorYXNjdGltZV9yKHRpbWVwdHIsIGJ1ZikKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqCXRpbWVwdHI7CitjaGFyICoJCQkJYnVmOworeworCXN0YXRpYyBjb25zdCBjaGFyCXdkYXlfbmFtZVtdWzNdID0geworCQkiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0IgorCX07CisJc3RhdGljIGNvbnN0IGNoYXIJbW9uX25hbWVbXVszXSA9IHsKKwkJIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorCX07CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCXduOworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgltbjsKKwljaGFyCQkJeWVhcltJTlRfU1RSTEVOX01BWElNVU0oaW50KSArIDJdOworCWNoYXIJCQlyZXN1bHRbTUFYX0FTQ1RJTUVfQlVGX1NJWkVdOworCisJaWYgKHRpbWVwdHItPnRtX3dkYXkgPCAwIHx8IHRpbWVwdHItPnRtX3dkYXkgPj0gREFZU1BFUldFRUspCisJCXduID0gIj8/PyI7CisJZWxzZQl3biA9IHdkYXlfbmFtZVt0aW1lcHRyLT50bV93ZGF5XTsKKwlpZiAodGltZXB0ci0+dG1fbW9uIDwgMCB8fCB0aW1lcHRyLT50bV9tb24gPj0gTU9OU1BFUllFQVIpCisJCW1uID0gIj8/PyI7CisJZWxzZQltbiA9IG1vbl9uYW1lW3RpbWVwdHItPnRtX21vbl07CisJLyoKKwkqKiBVc2Ugc3RyZnRpbWUncyAlWSB0byBnZW5lcmF0ZSB0aGUgeWVhciwgdG8gYXZvaWQgb3ZlcmZsb3cgcHJvYmxlbXMKKwkqKiB3aGVuIGNvbXB1dGluZyB0aW1lcHRyLT50bV95ZWFyICsgVE1fWUVBUl9CQVNFLgorCSoqIEFzc3VtZSB0aGF0IHN0cmZ0aW1lIGlzIHVuYWZmZWN0ZWQgYnkgb3RoZXIgb3V0LW9mLXJhbmdlIG1lbWJlcnMKKwkqKiAoZS5nLiwgdGltZXB0ci0+dG1fbWRheSkgd2hlbiBwcm9jZXNzaW5nICIlWSIuCisJKi8KKwkodm9pZCkgc3RyZnRpbWUoeWVhciwgc2l6ZW9mIHllYXIsICIlWSIsIHRpbWVwdHIpOworCS8qCisJKiogV2UgYXZvaWQgdXNpbmcgc25wcmludGYgc2luY2UgaXQncyBub3QgYXZhaWxhYmxlIG9uIGFsbCBzeXN0ZW1zLgorCSovCisJKHZvaWQpIHNwcmludGYocmVzdWx0LAorCQkoKHN0cmxlbih5ZWFyKSA8PSA0KSA/IEFTQ1RJTUVfRk1UIDogQVNDVElNRV9GTVRfQiksCisJCXduLCBtbiwKKwkJdGltZXB0ci0+dG1fbWRheSwgdGltZXB0ci0+dG1faG91ciwKKwkJdGltZXB0ci0+dG1fbWluLCB0aW1lcHRyLT50bV9zZWMsCisJCXllYXIpOworCWlmIChzdHJsZW4ocmVzdWx0KSA8IFNURF9BU0NUSU1FX0JVRl9TSVpFIHx8IGJ1ZiA9PSBidWZfYXNjdGltZSkgeworCQkodm9pZCkgc3RyY3B5KGJ1ZiwgcmVzdWx0KTsKKwkJcmV0dXJuIGJ1ZjsKKwl9IGVsc2UgeworI2lmZGVmIEVPVkVSRkxPVworCQllcnJubyA9IEVPVkVSRkxPVzsKKyNlbHNlIC8qICFkZWZpbmVkIEVPVkVSRkxPVyAqLworCQllcnJubyA9IEVJTlZBTDsKKyNlbmRpZiAvKiAhZGVmaW5lZCBFT1ZFUkZMT1cgKi8KKwkJcmV0dXJuIE5VTEw7CisJfQorfQorCisvKgorKiogQSBsYSBJU08vSUVDIDk5NDUtMSwgQU5TSS9JRUVFIFN0ZCAxMDAzLjEsIDIwMDQgRWRpdGlvbi4KKyovCisKK2NoYXIgKgorYXNjdGltZSh0aW1lcHRyKQorcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRtICoJdGltZXB0cjsKK3sKKwlyZXR1cm4gYXNjdGltZV9yKHRpbWVwdHIsIGJ1Zl9hc2N0aW1lKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL2RpZmZ0aW1lLmMgYi9saWJjL3R6Y29kZS9kaWZmdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhNzc5NzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9kaWZmdGltZS5jCkBAIC0wLDAgKzEsNjUgQEAKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJZWxzaWVpZFtdID0gIkAoIylkaWZmdGltZS5jCTguMSI7CisjZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKworLypMSU5UTElCUkFSWSovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCS8qIGZvciB0aW1lX3QsIFRZUEVfSU5URUdSQUwsIGFuZCBUWVBFX1NJR05FRCAqLworCitkb3VibGUKK2RpZmZ0aW1lKHRpbWUxLCB0aW1lMCkKK2NvbnN0IHRpbWVfdAl0aW1lMTsKK2NvbnN0IHRpbWVfdAl0aW1lMDsKK3sKKwkvKgorCSoqIElmIChzaXplb2YgKGRvdWJsZSkgPiBzaXplb2YgKHRpbWVfdCkpIHNpbXBseSBjb252ZXJ0IGFuZCBzdWJ0cmFjdAorCSoqIChhc3N1bWluZyB0aGF0IHRoZSBsYXJnZXIgdHlwZSBoYXMgbW9yZSBwcmVjaXNpb24pLgorCSoqIFRoaXMgaXMgdGhlIGNvbW1vbiByZWFsLXdvcmxkIGNhc2UgY2lyY2EgMjAwNC4KKwkqLworCWlmIChzaXplb2YgKGRvdWJsZSkgPiBzaXplb2YgKHRpbWVfdCkpCisJCXJldHVybiAoZG91YmxlKSB0aW1lMSAtIChkb3VibGUpIHRpbWUwOworCWlmICghVFlQRV9JTlRFR1JBTCh0aW1lX3QpKSB7CisJCS8qCisJCSoqIHRpbWVfdCBpcyBmbG9hdGluZy4KKwkJKi8KKwkJcmV0dXJuIHRpbWUxIC0gdGltZTA7CisJfQorCWlmICghVFlQRV9TSUdORUQodGltZV90KSkgeworCQkvKgorCQkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHVuc2lnbmVkLgorCQkqKiBUaGUgZGlmZmVyZW5jZSBvZiB0d28gdW5zaWduZWQgdmFsdWVzIGNhbid0IG92ZXJmbG93CisJCSoqIGlmIHRoZSBtaW51ZW5kIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB0aGUgc3VidHJhaGVuZC4KKwkJKi8KKwkJaWYgKHRpbWUxID49IHRpbWUwKQorCQkJcmV0dXJuIHRpbWUxIC0gdGltZTA7CisJCWVsc2UJcmV0dXJuIC0oKGRvdWJsZSkgKHRpbWUwIC0gdGltZTEpKTsKKwl9CisJLyoKKwkqKiB0aW1lX3QgaXMgaW50ZWdyYWwgYW5kIHNpZ25lZC4KKwkqKiBIYW5kbGUgY2FzZXMgd2hlcmUgYm90aCB0aW1lMSBhbmQgdGltZTAgaGF2ZSB0aGUgc2FtZSBzaWduCisJKiogKG1lYW5pbmcgdGhhdCB0aGVpciBkaWZmZXJlbmNlIGNhbm5vdCBvdmVyZmxvdykuCisJKi8KKwlpZiAoKHRpbWUxIDwgMCkgPT0gKHRpbWUwIDwgMCkpCisJCXJldHVybiB0aW1lMSAtIHRpbWUwOworCS8qCisJKiogdGltZTEgYW5kIHRpbWUwIGhhdmUgb3Bwb3NpdGUgc2lnbnMuCisJKiogUHVudCBpZiB1bnNpZ25lZCBsb25nIGlzIHRvbyBuYXJyb3cuCisJKi8KKwlpZiAoc2l6ZW9mICh1bnNpZ25lZCBsb25nKSA8IHNpemVvZiAodGltZV90KSkKKwkJcmV0dXJuIChkb3VibGUpIHRpbWUxIC0gKGRvdWJsZSkgdGltZTA7CisJLyoKKwkqKiBTdGF5IGNhbG0uLi5kZWNlbnQgb3B0aW1pemVycyB3aWxsIGVsaW1pbmF0ZSB0aGUgY29tcGxleGl0eSBiZWxvdy4KKwkqLworCWlmICh0aW1lMSA+PSAwIC8qICYmIHRpbWUwIDwgMCAqLykKKwkJcmV0dXJuICh1bnNpZ25lZCBsb25nKSB0aW1lMSArCisJCQkodW5zaWduZWQgbG9uZykgKC0odGltZTAgKyAxKSkgKyAxOworCXJldHVybiAtKGRvdWJsZSkgKCh1bnNpZ25lZCBsb25nKSB0aW1lMCArCisJCSh1bnNpZ25lZCBsb25nKSAoLSh0aW1lMSArIDEpKSArIDEpOworfQpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvbG9jYWx0aW1lLmMgYi9saWJjL3R6Y29kZS9sb2NhbHRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xOWQwZmJjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvbG9jYWx0aW1lLmMKQEAgLTAsMCArMSwyMTMyIEBACisvKgorKiogVGhpcyBmaWxlIGlzIGluIHRoZSBwdWJsaWMgZG9tYWluLCBzbyBjbGFyaWZpZWQgYXMgb2YKKyoqIDE5OTYtMDYtMDUgYnkgQXJ0aHVyIERhdmlkIE9sc29uLgorKi8KKworI2lmbmRlZiBsaW50CisjaWZuZGVmIE5PSUQKK3N0YXRpYyBjaGFyCWVsc2llaWRbXSA9ICJAKCMpbG9jYWx0aW1lLmMJOC4zIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisvKgorKiogTGVhcCBzZWNvbmQgaGFuZGxpbmcgZnJvbSBCcmFkbGV5IFdoaXRlLgorKiogUE9TSVgtc3R5bGUgVFogZW52aXJvbm1lbnQgdmFyaWFibGUgaGFuZGxpbmcgZnJvbSBHdXkgSGFycmlzLgorKi8KKworLypMSU5UTElCUkFSWSovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisjaW5jbHVkZSAidHpmaWxlLmgiCisjaW5jbHVkZSAiZmNudGwuaCIKKyNpbmNsdWRlICJmbG9hdC5oIgkvKiBmb3IgRkxUX01BWCBhbmQgREJMX01BWCAqLworCisjaW5jbHVkZSA8c3lzL3N5c3RlbV9wcm9wZXJ0aWVzLmg+CisKKyNpZm5kZWYgVFpfQUJCUl9NQVhfTEVOCisjZGVmaW5lIFRaX0FCQlJfTUFYX0xFTgkxNgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0FCQlJfTUFYX0xFTiAqLworCisjaWZuZGVmIFRaX0FCQlJfQ0hBUl9TRVQKKyNkZWZpbmUgVFpfQUJCUl9DSEFSX1NFVCBcCisJImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6QUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVowMTIzNDU2Nzg5IDorLS5fIgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0FCQlJfQ0hBUl9TRVQgKi8KKworI2lmbmRlZiBUWl9BQkJSX0VSUl9DSEFSCisjZGVmaW5lIFRaX0FCQlJfRVJSX0NIQVIJJ18nCisjZW5kaWYgLyogIWRlZmluZWQgVFpfQUJCUl9FUlJfQ0hBUiAqLworCisjZGVmaW5lIElOREVYRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uaWR4IgorI2RlZmluZSBEQVRBRklMRSAiL3N5c3RlbS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0IgorI2RlZmluZSBOQU1FTEVOIDQwCisjZGVmaW5lIElOVExFTiA0CisjZGVmaW5lIFJFQURMRU4gKE5BTUVMRU4gKyAzICogSU5UTEVOKQorCisvKgorKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIE9fQklOQVJZLgorKi8KKworI2lmZGVmIE9fQklOQVJZCisjZGVmaW5lIE9QRU5fTU9ERQkoT19SRE9OTFkgfCBPX0JJTkFSWSkKKyNlbmRpZiAvKiBkZWZpbmVkIE9fQklOQVJZICovCisjaWZuZGVmIE9fQklOQVJZCisjZGVmaW5lIE9QRU5fTU9ERQlPX1JET05MWQorI2VuZGlmIC8qICFkZWZpbmVkIE9fQklOQVJZICovCisKKyNpZiAwCisjICBkZWZpbmUgIFhMT0coeHgpICBwcmludGYgeHggLCBmZmx1c2goc3Rkb3V0KQorI2Vsc2UKKyMgIGRlZmluZSAgWExPRyh4KSAgIGRve313aGlsZSAoMCkKKyNlbmRpZgorCisKKyNpZm5kZWYgV0lMREFCQlIKKy8qCisqKiBTb21lb25lIG1pZ2h0IG1ha2UgaW5jb3JyZWN0IHVzZSBvZiBhIHRpbWUgem9uZSBhYmJyZXZpYXRpb246CisqKgkxLglUaGV5IG1pZ2h0IHJlZmVyZW5jZSB0em5hbWVbMF0gYmVmb3JlIGNhbGxpbmcgdHpzZXQgKGV4cGxpY2l0bHkKKyoqCQlvciBpbXBsaWNpdGx5KS4KKyoqCTIuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHR6bmFtZVsxXSBiZWZvcmUgY2FsbGluZyB0enNldCAoZXhwbGljaXRseQorKioJCW9yIGltcGxpY2l0bHkpLgorKioJMy4JVGhleSBtaWdodCByZWZlcmVuY2UgdHpuYW1lWzFdIGFmdGVyIHNldHRpbmcgdG8gYSB0aW1lIHpvbmUKKyoqCQlpbiB3aGljaCBEYXlsaWdodCBTYXZpbmcgVGltZSBpcyBuZXZlciBvYnNlcnZlZC4KKyoqCTQuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHR6bmFtZVswXSBhZnRlciBzZXR0aW5nIHRvIGEgdGltZSB6b25lCisqKgkJaW4gd2hpY2ggU3RhbmRhcmQgVGltZSBpcyBuZXZlciBvYnNlcnZlZC4KKyoqCTUuCVRoZXkgbWlnaHQgcmVmZXJlbmNlIHRtLlRNX1pPTkUgYWZ0ZXIgY2FsbGluZyBvZmZ0aW1lLgorKiogV2hhdCdzIGJlc3QgdG8gZG8gaW4gdGhlIGFib3ZlIGNhc2VzIGlzIG9wZW4gdG8gZGViYXRlOworKiogZm9yIG5vdywgd2UganVzdCBzZXQgdGhpbmdzIHVwIHNvIHRoYXQgaW4gYW55IG9mIHRoZSBmaXZlIGNhc2VzCisqKiBXSUxEQUJCUiBpcyB1c2VkLiBBbm90aGVyIHBvc3NpYmlsaXR5OiBpbml0aWFsaXplIHR6bmFtZVswXSB0byB0aGUKKyoqIHN0cmluZyAidHpuYW1lWzBdIHVzZWQgYmVmb3JlIHNldCIsIGFuZCBzaW1pbGFybHkgZm9yIHRoZSBvdGhlciBjYXNlcy4KKyoqIEFuZCBhbm90aGVyOiBpbml0aWFsaXplIHR6bmFtZVswXSB0byAiRVJBIiwgd2l0aCBhbiBleHBsYW5hdGlvbiBpbiB0aGUKKyoqIG1hbnVhbCBwYWdlIG9mIHdoYXQgdGhpcyAidGltZSB6b25lIGFiYnJldmlhdGlvbiIgbWVhbnMgKGRvaW5nIHRoaXMgc28KKyoqIHRoYXQgdHpuYW1lWzBdIGhhcyB0aGUgIm5vcm1hbCIgbGVuZ3RoIG9mIHRocmVlIGNoYXJhY3RlcnMpLgorKi8KKyNkZWZpbmUgV0lMREFCQlIJIiAgICIKKyNlbmRpZiAvKiAhZGVmaW5lZCBXSUxEQUJCUiAqLworCitzdGF0aWMgY2hhcgkJd2lsZGFiYnJbXSA9IFdJTERBQkJSOworCitzdGF0aWMgY29uc3QgY2hhcglnbXRbXSA9ICJHTVQiOworCisvKgorKiogVGhlIERTVCBydWxlcyB0byB1c2UgaWYgVFogaGFzIG5vIHJ1bGVzIGFuZCB3ZSBjYW4ndCBsb2FkIFRaREVGUlVMRVMuCisqKiBXZSBkZWZhdWx0IHRvIFVTIHJ1bGVzIGFzIG9mIDE5OTktMDgtMTcuCisqKiBQT1NJWCAxMDAzLjEgc2VjdGlvbiA4LjEuMSBzYXlzIHRoYXQgdGhlIGRlZmF1bHQgRFNUIHJ1bGVzIGFyZQorKiogaW1wbGVtZW50YXRpb24gZGVwZW5kZW50OyBmb3IgaGlzdG9yaWNhbCByZWFzb25zLCBVUyBydWxlcyBhcmUgYQorKiogY29tbW9uIGRlZmF1bHQuCisqLworI2lmbmRlZiBUWkRFRlJVTEVTVFJJTkcKKyNkZWZpbmUgVFpERUZSVUxFU1RSSU5HICIsTTQuMS4wLE0xMC41LjAiCisjZW5kaWYgLyogIWRlZmluZWQgVFpERUZEU1QgKi8KKworc3RydWN0IHR0aW5mbyB7CQkJCS8qIHRpbWUgdHlwZSBpbmZvcm1hdGlvbiAqLworCWxvbmcJCXR0X2dtdG9mZjsJLyogVVRDIG9mZnNldCBpbiBzZWNvbmRzICovCisJaW50CQl0dF9pc2RzdDsJLyogdXNlZCB0byBzZXQgdG1faXNkc3QgKi8KKwlpbnQJCXR0X2FiYnJpbmQ7CS8qIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4ICovCisJaW50CQl0dF90dGlzc3RkOwkvKiBUUlVFIGlmIHRyYW5zaXRpb24gaXMgc3RkIHRpbWUgKi8KKwlpbnQJCXR0X3R0aXNnbXQ7CS8qIFRSVUUgaWYgdHJhbnNpdGlvbiBpcyBVVEMgKi8KK307CisKK3N0cnVjdCBsc2luZm8gewkJCQkvKiBsZWFwIHNlY29uZCBpbmZvcm1hdGlvbiAqLworCXRpbWVfdAkJbHNfdHJhbnM7CS8qIHRyYW5zaXRpb24gdGltZSAqLworCWxvbmcJCWxzX2NvcnI7CS8qIGNvcnJlY3Rpb24gdG8gYXBwbHkgKi8KK307CisKKyNkZWZpbmUgQklHR0VTVChhLCBiKQkoKChhKSA+IChiKSkgPyAoYSkgOiAoYikpCisKKyNpZmRlZiBUWk5BTUVfTUFYCisjZGVmaW5lIE1ZX1RaTkFNRV9NQVgJVFpOQU1FX01BWAorI2VuZGlmIC8qIGRlZmluZWQgVFpOQU1FX01BWCAqLworI2lmbmRlZiBUWk5BTUVfTUFYCisjZGVmaW5lIE1ZX1RaTkFNRV9NQVgJMjU1CisjZW5kaWYgLyogIWRlZmluZWQgVFpOQU1FX01BWCAqLworCitzdHJ1Y3Qgc3RhdGUgeworCWludAkJbGVhcGNudDsKKwlpbnQJCXRpbWVjbnQ7CisJaW50CQl0eXBlY250OworCWludAkJY2hhcmNudDsKKwlpbnQJCWdvYmFjazsKKwlpbnQJCWdvYWhlYWQ7CisJdGltZV90CQlhdHNbVFpfTUFYX1RJTUVTXTsKKwl1bnNpZ25lZCBjaGFyCXR5cGVzW1RaX01BWF9USU1FU107CisJc3RydWN0IHR0aW5mbwl0dGlzW1RaX01BWF9UWVBFU107CisJY2hhcgkJY2hhcnNbQklHR0VTVChCSUdHRVNUKFRaX01BWF9DSEFSUyArIDEsIHNpemVvZiBnbXQpLAorCQkJCSgyICogKE1ZX1RaTkFNRV9NQVggKyAxKSkpXTsKKwlzdHJ1Y3QgbHNpbmZvCWxzaXNbVFpfTUFYX0xFQVBTXTsKK307CisKK3N0cnVjdCBydWxlIHsKKwlpbnQJCXJfdHlwZTsJCS8qIHR5cGUgb2YgcnVsZS0tc2VlIGJlbG93ICovCisJaW50CQlyX2RheTsJCS8qIGRheSBudW1iZXIgb2YgcnVsZSAqLworCWludAkJcl93ZWVrOwkJLyogd2VlayBudW1iZXIgb2YgcnVsZSAqLworCWludAkJcl9tb247CQkvKiBtb250aCBudW1iZXIgb2YgcnVsZSAqLworCWxvbmcJCXJfdGltZTsJCS8qIHRyYW5zaXRpb24gdGltZSBvZiBydWxlICovCit9OworCisjZGVmaW5lIEpVTElBTl9EQVkJCTAJLyogSm4gLSBKdWxpYW4gZGF5ICovCisjZGVmaW5lIERBWV9PRl9ZRUFSCQkxCS8qIG4gLSBkYXkgb2YgeWVhciAqLworI2RlZmluZSBNT05USF9OVEhfREFZX09GX1dFRUsJMgkvKiBNbS5uLmQgLSBtb250aCwgd2VlaywgZGF5IG9mIHdlZWsgKi8KKworLyoKKyoqIFByb3RvdHlwZXMgZm9yIHN0YXRpYyBmdW5jdGlvbnMuCisqLworCitzdGF0aWMgbG9uZwkJZGV0emNvZGUgUCgoY29uc3QgY2hhciAqIGNvZGVwKSk7CitzdGF0aWMgdGltZV90CQlkZXR6Y29kZTY0IFAoKGNvbnN0IGNoYXIgKiBjb2RlcCkpOworc3RhdGljIGludAkJZGlmZmVyX2J5X3JlcGVhdCBQKCh0aW1lX3QgdDEsIHRpbWVfdCB0MCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXR6bmFtZSBQKChjb25zdCBjaGFyICogc3RycCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRxem5hbWUgUCgoY29uc3QgY2hhciAqIHN0cnAsIGNvbnN0IGludCBkZWxpbSkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRudW0gUCgoY29uc3QgY2hhciAqIHN0cnAsIGludCAqIG51bXAsIGludCBtaW4sCisJCQkJaW50IG1heCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRzZWNzIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBsb25nICogc2Vjc3ApKTsKK3N0YXRpYyBjb25zdCBjaGFyICoJZ2V0b2Zmc2V0IFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBsb25nICogb2Zmc2V0cCkpOworc3RhdGljIGNvbnN0IGNoYXIgKglnZXRydWxlIFAoKGNvbnN0IGNoYXIgKiBzdHJwLCBzdHJ1Y3QgcnVsZSAqIHJ1bGVwKSk7CitzdGF0aWMgdm9pZAkJZ210bG9hZCBQKChzdHJ1Y3Qgc3RhdGUgKiBzcCkpOworc3RhdGljIHN0cnVjdCB0bSAqCWdtdHN1YiBQKChjb25zdCB0aW1lX3QgKiB0aW1lcCwgbG9uZyBvZmZzZXQsCisJCQkJc3RydWN0IHRtICogdG1wKSk7CitzdGF0aWMgc3RydWN0IHRtICoJbG9jYWxzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAorCQkJCXN0cnVjdCB0bSAqIHRtcCkpOworc3RhdGljIGludAkJaW5jcmVtZW50X292ZXJmbG93IFAoKGludCAqIG51bWJlciwgaW50IGRlbHRhKSk7CitzdGF0aWMgaW50CQlsZWFwc190aHJ1X2VuZF9vZiBQKChpbnQgeSkpOworc3RhdGljIGludAkJbG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3cgUCgobG9uZyAqIG51bWJlciwgaW50IGRlbHRhKSk7CitzdGF0aWMgaW50CQlsb25nX25vcm1hbGl6ZV9vdmVyZmxvdyBQKChsb25nICogdGVuc3B0ciwKKwkJCQlpbnQgKiB1bml0c3B0ciwgaW50IGJhc2UpKTsKK3N0YXRpYyBpbnQJCW5vcm1hbGl6ZV9vdmVyZmxvdyBQKChpbnQgKiB0ZW5zcHRyLCBpbnQgKiB1bml0c3B0ciwKKwkJCQlpbnQgYmFzZSkpOworc3RhdGljIHZvaWQJCXNldHR6bmFtZSBQKCh2b2lkKSk7CitzdGF0aWMgdGltZV90CQl0aW1lMSBQKChzdHJ1Y3QgdG0gKiB0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtICopKSwKKwkJCQlsb25nIG9mZnNldCkpOworc3RhdGljIHRpbWVfdAkJdGltZTIgUCgoc3RydWN0IHRtICp0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtKikpLAorCQkJCWxvbmcgb2Zmc2V0LCBpbnQgKiBva2F5cCkpOworc3RhdGljIHRpbWVfdAkJdGltZTJzdWIgUCgoc3RydWN0IHRtICp0bXAsCisJCQkJc3RydWN0IHRtICogKCpmdW5jcCkgUCgoY29uc3QgdGltZV90ICosCisJCQkJbG9uZywgc3RydWN0IHRtKikpLAorCQkJCWxvbmcgb2Zmc2V0LCBpbnQgKiBva2F5cCwgaW50IGRvX25vcm1fc2VjcykpOworc3RhdGljIHN0cnVjdCB0bSAqCXRpbWVzdWIgUCgoY29uc3QgdGltZV90ICogdGltZXAsIGxvbmcgb2Zmc2V0LAorCQkJCWNvbnN0IHN0cnVjdCBzdGF0ZSAqIHNwLCBzdHJ1Y3QgdG0gKiB0bXApKTsKK3N0YXRpYyBpbnQJCXRtY29tcCBQKChjb25zdCBzdHJ1Y3QgdG0gKiBhdG1wLAorCQkJCWNvbnN0IHN0cnVjdCB0bSAqIGJ0bXApKTsKK3N0YXRpYyB0aW1lX3QJCXRyYW5zdGltZSBQKCh0aW1lX3QgamFuZmlyc3QsIGludCB5ZWFyLAorCQkJCWNvbnN0IHN0cnVjdCBydWxlICogcnVsZXAsIGxvbmcgb2Zmc2V0KSk7CitzdGF0aWMgaW50CQl0emxvYWQgUCgoY29uc3QgY2hhciAqIG5hbWUsIHN0cnVjdCBzdGF0ZSAqIHNwLAorCQkJCWludCBkb2V4dGVuZCkpOworc3RhdGljIGludAkJdHpwYXJzZSBQKChjb25zdCBjaGFyICogbmFtZSwgc3RydWN0IHN0YXRlICogc3AsCisJCQkJaW50IGxhc3RkaXRjaCkpOworCisjaWZkZWYgQUxMX1NUQVRFCitzdGF0aWMgc3RydWN0IHN0YXRlICoJbGNscHRyOworc3RhdGljIHN0cnVjdCBzdGF0ZSAqCWdtdHB0cjsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworCisjaWZuZGVmIEFMTF9TVEFURQorc3RhdGljIHN0cnVjdCBzdGF0ZQlsY2xtZW07CitzdGF0aWMgc3RydWN0IHN0YXRlCWdtdG1lbTsKKyNkZWZpbmUgbGNscHRyCQkoJmxjbG1lbSkKKyNkZWZpbmUgZ210cHRyCQkoJmdtdG1lbSkKKyNlbmRpZiAvKiBTdGF0ZSBGYXJtICovCisKKyNpZm5kZWYgVFpfU1RSTEVOX01BWAorI2RlZmluZSBUWl9TVFJMRU5fTUFYIDI1NQorI2VuZGlmIC8qICFkZWZpbmVkIFRaX1NUUkxFTl9NQVggKi8KKworc3RhdGljIGNoYXIJCWxjbF9UWm5hbWVbVFpfU1RSTEVOX01BWCArIDFdOworc3RhdGljIGludAkJbGNsX2lzX3NldDsKK3N0YXRpYyBpbnQJCWdtdF9pc19zZXQ7CisKK2NoYXIgKgkJCXR6bmFtZVsyXSA9IHsKKwl3aWxkYWJiciwKKwl3aWxkYWJicgorfTsKKworLyoKKyoqIFNlY3Rpb24gNC4xMi4zIG9mIFgzLjE1OS0xOTg5IHJlcXVpcmVzIHRoYXQKKyoqCUV4Y2VwdCBmb3IgdGhlIHN0cmZ0aW1lIGZ1bmN0aW9uLCB0aGVzZSBmdW5jdGlvbnMgW2FzY3RpbWUsCisqKgljdGltZSwgZ210aW1lLCBsb2NhbHRpbWVdIHJldHVybiB2YWx1ZXMgaW4gb25lIG9mIHR3byBzdGF0aWMKKyoqCW9iamVjdHM6IGEgYnJva2VuLWRvd24gdGltZSBzdHJ1Y3R1cmUgYW5kIGFuIGFycmF5IG9mIGNoYXIuCisqKiBUaGFua3MgdG8gUGF1bCBFZ2dlcnQgZm9yIG5vdGluZyB0aGlzLgorKi8KKworc3RhdGljIHN0cnVjdCB0bQl0bTsKKworI2lmZGVmIFVTR19DT01QQVQKK3RpbWVfdAkJCXRpbWV6b25lID0gMDsKK2ludAkJCWRheWxpZ2h0ID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIFVTR19DT01QQVQgKi8KKworI2lmZGVmIEFMVFpPTkUKK3RpbWVfdAkJCWFsdHpvbmUgPSAwOworI2VuZGlmIC8qIGRlZmluZWQgQUxUWk9ORSAqLworCitzdGF0aWMgbG9uZworZGV0emNvZGUoY29kZXApCitjb25zdCBjaGFyICogY29uc3QJY29kZXA7Cit7CisJcmVnaXN0ZXIgbG9uZwlyZXN1bHQ7CisJcmVnaXN0ZXIgaW50CWk7CisKKwlyZXN1bHQgPSAoY29kZXBbMF0gJiAweDgwKSA/IH4wTCA6IDA7CisJZm9yIChpID0gMDsgaSA8IDQ7ICsraSkKKwkJcmVzdWx0ID0gKHJlc3VsdCA8PCA4KSB8IChjb2RlcFtpXSAmIDB4ZmYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB0aW1lX3QKK2RldHpjb2RlNjQoY29kZXApCitjb25zdCBjaGFyICogY29uc3QJY29kZXA7Cit7CisJcmVnaXN0ZXIgdGltZV90CXJlc3VsdDsKKwlyZWdpc3RlciBpbnQJaTsKKworCXJlc3VsdCA9IChjb2RlcFswXSAmIDB4ODApID8gICh+KGludF9mYXN0NjRfdCkgMCkgOiAwOworCWZvciAoaSA9IDA7IGkgPCA4OyArK2kpCisJCXJlc3VsdCA9IHJlc3VsdCAqIDI1NiArIChjb2RlcFtpXSAmIDB4ZmYpOworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkCitzZXR0em5hbWUgUCgodm9pZCkpCit7CisJcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QJc3AgPSBsY2xwdHI7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCXR6bmFtZVswXSA9IHdpbGRhYmJyOworCXR6bmFtZVsxXSA9IHdpbGRhYmJyOworI2lmZGVmIFVTR19DT01QQVQKKwlkYXlsaWdodCA9IDA7CisJdGltZXpvbmUgPSAwOworI2VuZGlmIC8qIGRlZmluZWQgVVNHX0NPTVBBVCAqLworI2lmZGVmIEFMVFpPTkUKKwlhbHR6b25lID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMVFpPTkUgKi8KKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAoc3AgPT0gTlVMTCkgeworCQl0em5hbWVbMF0gPSB0em5hbWVbMV0gPSBnbXQ7CisJCXJldHVybjsKKwl9CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgeworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogY29uc3QJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisKKwkJdHpuYW1lW3R0aXNwLT50dF9pc2RzdF0gPQorCQkJJnNwLT5jaGFyc1t0dGlzcC0+dHRfYWJicmluZF07CisjaWZkZWYgVVNHX0NPTVBBVAorCQlpZiAodHRpc3AtPnR0X2lzZHN0KQorCQkJZGF5bGlnaHQgPSAxOworCQlpZiAoaSA9PSAwIHx8ICF0dGlzcC0+dHRfaXNkc3QpCisJCQl0aW1lem9uZSA9IC0odHRpc3AtPnR0X2dtdG9mZik7CisjZW5kaWYgLyogZGVmaW5lZCBVU0dfQ09NUEFUICovCisjaWZkZWYgQUxUWk9ORQorCQlpZiAoaSA9PSAwIHx8IHR0aXNwLT50dF9pc2RzdCkKKwkJCWFsdHpvbmUgPSAtKHR0aXNwLT50dF9nbXRvZmYpOworI2VuZGlmIC8qIGRlZmluZWQgQUxUWk9ORSAqLworCX0KKwkvKgorCSoqIEFuZCB0byBnZXQgdGhlIGxhdGVzdCB6b25lIG5hbWVzIGludG8gdHpuYW1lLiAuIC4KKwkqLworCWZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CisJCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKiBjb25zdAl0dGlzcCA9CisJCQkJCQkJJnNwLT50dGlzWworCQkJCQkJCQlzcC0+dHlwZXNbaV1dOworCisJCXR6bmFtZVt0dGlzcC0+dHRfaXNkc3RdID0KKwkJCSZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworCX0KKwkvKgorCSoqIEZpbmFsbHksIHNjcnViIHRoZSBhYmJyZXZpYXRpb25zLgorCSoqIEZpcnN0LCByZXBsYWNlIGJvZ3VzIGNoYXJhY3RlcnMuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPmNoYXJjbnQ7ICsraSkKKwkJaWYgKHN0cmNocihUWl9BQkJSX0NIQVJfU0VULCBzcC0+Y2hhcnNbaV0pID09IE5VTEwpCisJCQlzcC0+Y2hhcnNbaV0gPSBUWl9BQkJSX0VSUl9DSEFSOworCS8qCisJKiogU2Vjb25kLCB0cnVuY2F0ZSBsb25nIGFiYnJldmlhdGlvbnMuCisJKi8KKwlmb3IgKGkgPSAwOyBpIDwgc3AtPnR5cGVjbnQ7ICsraSkgeworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdHRpbmZvICogY29uc3QJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCXJlZ2lzdGVyIGNoYXIgKgkJCQljcCA9ICZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworCisJCWlmIChzdHJsZW4oY3ApID4gVFpfQUJCUl9NQVhfTEVOICYmCisJCQlzdHJjbXAoY3AsIEdSQU5EUEFSRU5URUQpICE9IDApCisJCQkJKihjcCArIFRaX0FCQlJfTUFYX0xFTikgPSAnXDAnOworCX0KK30KKworc3RhdGljIGludAorZGlmZmVyX2J5X3JlcGVhdCh0MSwgdDApCitjb25zdCB0aW1lX3QJdDE7Citjb25zdCB0aW1lX3QJdDA7Cit7CisJaWYgKFRZUEVfSU5URUdSQUwodGltZV90KSAmJgorCQlUWVBFX0JJVCh0aW1lX3QpIC0gVFlQRV9TSUdORUQodGltZV90KSA8IFNFQ1NQRVJSRVBFQVRfQklUUykKKwkJCXJldHVybiAwOworICAgICAgICByZXR1cm4gKHQxIC0gdDApID09IFNFQ1NQRVJSRVBFQVQ7Cit9CisKK3N0YXRpYyBpbnQgdG9pbnQodW5zaWduZWQgY2hhciAqcykgeworICAgIHJldHVybiAoc1swXSA8PCAyNCkgfCAoc1sxXSA8PCAxNikgfCAoc1syXSA8PCA4KSB8IHNbM107Cit9CisKK3N0YXRpYyBpbnQKK3R6bG9hZChuYW1lLCBzcCwgZG9leHRlbmQpCityZWdpc3RlciBjb25zdCBjaGFyICoJCW5hbWU7CityZWdpc3RlciBzdHJ1Y3Qgc3RhdGUgKiBjb25zdAlzcDsKK3JlZ2lzdGVyIGNvbnN0IGludAkJZG9leHRlbmQ7Cit7CisJcmVnaXN0ZXIgY29uc3QgY2hhciAqCQlwOworCXJlZ2lzdGVyIGludAkJCWk7CisJcmVnaXN0ZXIgaW50CQkJZmlkOworCXJlZ2lzdGVyIGludAkJCXN0b3JlZDsKKwlyZWdpc3RlciBpbnQJCQlucmVhZDsKKwl1bmlvbiB7CisJCXN0cnVjdCB0emhlYWQJdHpoZWFkOworCQljaGFyCQlidWZbMiAqIHNpemVvZihzdHJ1Y3QgdHpoZWFkKSArCisJCQkJCTIgKiBzaXplb2YgKnNwICsKKwkJCQkJNCAqIFRaX01BWF9USU1FU107CisJfSB1OworICAgIGludCAgICAgICAgICAgICAgICAgICAgIHRvcmVhZCA9IHNpemVvZiB1LmJ1ZjsKKworICAgICAgICBpZiAobmFtZSA9PSBOVUxMICYmIChuYW1lID0gVFpERUZBVUxUKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgWExPRygoInR6bG9hZDogbnVsbCAnbmFtZScgcGFyYW1ldGVyXG4iICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgfQorCXsKKwkJcmVnaXN0ZXIgaW50CWRvYWNjZXNzOworCQkvKgorCQkqKiBTZWN0aW9uIDQuOS4xIG9mIHRoZSBDIHN0YW5kYXJkIHNheXMgdGhhdAorCQkqKiAiRklMRU5BTUVfTUFYIGV4cGFuZHMgdG8gYW4gaW50ZWdyYWwgY29uc3RhbnQgZXhwcmVzc2lvbgorCQkqKiB0aGF0IGlzIHRoZSBzaXplIG5lZWRlZCBmb3IgYW4gYXJyYXkgb2YgY2hhciBsYXJnZSBlbm91Z2gKKwkJKiogdG8gaG9sZCB0aGUgbG9uZ2VzdCBmaWxlIG5hbWUgc3RyaW5nIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uCisJCSoqIGd1YXJhbnRlZXMgY2FuIGJlIG9wZW5lZC4iCisJCSovCisJCWNoYXIJCWZ1bGxuYW1lW0ZJTEVOQU1FX01BWCArIDFdOworICAgICAgICAgICAgICAgIGNoYXIgICAgICAgICpvcmlnbmFtZSA9IChjaGFyKikgbmFtZTsKKworCQlpZiAobmFtZVswXSA9PSAnOicpCisJCQkrK25hbWU7CisJCWRvYWNjZXNzID0gbmFtZVswXSA9PSAnLyc7CisJCWlmICghZG9hY2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgocCA9IFRaRElSKSA9PSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFhMT0coKCJ0emxvYWQ6IG51bGwgVFpESVIgbWFjcm8gP1xuIiApKTsKKwkJCQlyZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmxlbihwKSArIHN0cmxlbihuYW1lKSArIDEpID49IHNpemVvZiBmdWxsbmFtZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogcGF0aCB0b28gbG9uZzogJXMvJXNcbiIsIHAsIG5hbWUgKSk7CisJCQkJcmV0dXJuIC0xOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCQkJKHZvaWQpIHN0cmNweShmdWxsbmFtZSwgcCk7CisJCQkodm9pZCkgc3RyY2F0KGZ1bGxuYW1lLCAiLyIpOworCQkJKHZvaWQpIHN0cmNhdChmdWxsbmFtZSwgbmFtZSk7CisJCQkvKgorCQkJKiogU2V0IGRvYWNjZXNzIGlmICcuJyAoYXMgaW4gIi4uLyIpIHNob3dzIHVwIGluIG5hbWUuCisJCQkqLworCQkJaWYgKHN0cmNocihuYW1lLCAnLicpICE9IE5VTEwpCisJCQkJZG9hY2Nlc3MgPSBUUlVFOworCQkJbmFtZSA9IGZ1bGxuYW1lOworCQl9CisgICAgICAgICAgICAgICAgaWYgKGRvYWNjZXNzICYmIGFjY2VzcyhuYW1lLCBSX09LKSAhPSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogY291bGQgbm90IGZpbmQgJyVzJ1xuIiwgbmFtZSApKTsKKwkJCXJldHVybiAtMTsKKyAgICAgICAgICAgICAgICB9CisJCWlmICgoZmlkID0gb3BlbihuYW1lLCBPUEVOX01PREUpKSA9PSAtMSkgeworICAgICAgICAgICAgY2hhciBidWZbUkVBRExFTl07CisgICAgICAgICAgICBjaGFyIG5hbWVbTkFNRUxFTiArIDFdOworICAgICAgICAgICAgaW50IGZpZGl4ID0gb3BlbihJTkRFWEZJTEUsIE9QRU5fTU9ERSk7CisgICAgICAgICAgICBpbnQgb2ZmID0gLTE7CisKKyAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3Qgb3BlbiAnJXMnLCB0cnlpbmcgJyVzJ1xuIiwgZnVsbG5hbWUsIElOREVYRklMRSApKTsKKyAgICAgICAgICAgIGlmIChmaWRpeCA8IDApIHsKKyAgICAgICAgICAgICAgICBYTE9HKCggInR6bG9hZDogY291bGQgbm90IGZpbmQgJyVzJ1xuIiwgSU5ERVhGSUxFICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgd2hpbGUgKHJlYWQoZmlkaXgsIGJ1Ziwgc2l6ZW9mKGJ1ZikpID09IHNpemVvZihidWYpKSB7CisgICAgICAgICAgICAgICAgbWVtY3B5KG5hbWUsIGJ1ZiwgTkFNRUxFTik7CisgICAgICAgICAgICAgICAgbmFtZVtOQU1FTEVOXSA9ICdcMCc7CisKKyAgICAgICAgICAgICAgICBpZiAoc3RyY21wKG5hbWUsIG9yaWduYW1lKSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgIG9mZiA9IHRvaW50KCh1bnNpZ25lZCBjaGFyICopIGJ1ZiArIE5BTUVMRU4pOworICAgICAgICAgICAgICAgICAgICB0b3JlYWQgPSB0b2ludCgodW5zaWduZWQgY2hhciAqKSBidWYgKyBOQU1FTEVOICsgSU5UTEVOKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjbG9zZShmaWRpeCk7CisKKyAgICAgICAgICAgIGlmIChvZmYgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGludmFsaWQgb2Zmc2V0ICglZClcbiIsIG9mZiApKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZpZCA9IG9wZW4oREFUQUZJTEUsIE9QRU5fTU9ERSk7CisKKyAgICAgICAgICAgIGlmIChmaWQgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBvcGVuICclcydcbiIsIERBVEFGSUxFICkpOworICAgICAgICAgICAgICAgIHJldHVybiAtMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGxzZWVrKGZpZCwgb2ZmLCBTRUVLX1NFVCkgPCAwKSB7CisgICAgICAgICAgICAgICAgWExPRygoICJ0emxvYWQ6IGNvdWxkIG5vdCBzZWVrIHRvICVkIGluICclcydcbiIsIG9mZiwgREFUQUZJTEUgKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisJfQorCW5yZWFkID0gcmVhZChmaWQsIHUuYnVmLCB0b3JlYWQpOworICAgICAgICBpZiAoY2xvc2UoZmlkKSA8IDAgfHwgbnJlYWQgPD0gMCkgeworICAgICAgICAgICAgICAgIFhMT0coKCAidHpsb2FkOiBjb3VsZCBub3QgcmVhZCBjb250ZW50IG9mICclcydcbiIsIERBVEFGSUxFICkpOworCQlyZXR1cm4gLTE7CisgICAgICAgIH0KKwlmb3IgKHN0b3JlZCA9IDQ7IHN0b3JlZCA8PSA4OyBzdG9yZWQgKj0gMikgeworCQlpbnQJCXR0aXNzdGRjbnQ7CisJCWludAkJdHRpc2dtdGNudDsKKworCQl0dGlzc3RkY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R0aXNzdGRjbnQpOworCQl0dGlzZ210Y250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R0aXNnbXRjbnQpOworCQlzcC0+bGVhcGNudCA9IChpbnQpIGRldHpjb2RlKHUudHpoZWFkLnR6aF9sZWFwY250KTsKKwkJc3AtPnRpbWVjbnQgPSAoaW50KSBkZXR6Y29kZSh1LnR6aGVhZC50emhfdGltZWNudCk7CisJCXNwLT50eXBlY250ID0gKGludCkgZGV0emNvZGUodS50emhlYWQudHpoX3R5cGVjbnQpOworCQlzcC0+Y2hhcmNudCA9IChpbnQpIGRldHpjb2RlKHUudHpoZWFkLnR6aF9jaGFyY250KTsKKwkJcCA9IHUudHpoZWFkLnR6aF9jaGFyY250ICsgc2l6ZW9mIHUudHpoZWFkLnR6aF9jaGFyY250OworCQlpZiAoc3AtPmxlYXBjbnQgPCAwIHx8IHNwLT5sZWFwY250ID4gVFpfTUFYX0xFQVBTIHx8CisJCQlzcC0+dHlwZWNudCA8PSAwIHx8IHNwLT50eXBlY250ID4gVFpfTUFYX1RZUEVTIHx8CisJCQlzcC0+dGltZWNudCA8IDAgfHwgc3AtPnRpbWVjbnQgPiBUWl9NQVhfVElNRVMgfHwKKwkJCXNwLT5jaGFyY250IDwgMCB8fCBzcC0+Y2hhcmNudCA+IFRaX01BWF9DSEFSUyB8fAorCQkJKHR0aXNzdGRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc3N0ZGNudCAhPSAwKSB8fAorCQkJKHR0aXNnbXRjbnQgIT0gc3AtPnR5cGVjbnQgJiYgdHRpc2dtdGNudCAhPSAwKSkKKwkJCQlyZXR1cm4gLTE7CisJCWlmIChucmVhZCAtIChwIC0gdS5idWYpIDwKKwkJCXNwLT50aW1lY250ICogc3RvcmVkICsJCS8qIGF0cyAqLworCQkJc3AtPnRpbWVjbnQgKwkJCS8qIHR5cGVzICovCisJCQlzcC0+dHlwZWNudCAqIDYgKwkJLyogdHRpbmZvcyAqLworCQkJc3AtPmNoYXJjbnQgKwkJCS8qIGNoYXJzICovCisJCQlzcC0+bGVhcGNudCAqIChzdG9yZWQgKyA0KSArCS8qIGxzaW5mb3MgKi8KKwkJCXR0aXNzdGRjbnQgKwkJCS8qIHR0aXNzdGRzICovCisJCQl0dGlzZ210Y250KQkJCS8qIHR0aXNnbXRzICovCisJCQkJcmV0dXJuIC0xOworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgeworCQkJc3AtPmF0c1tpXSA9IChzdG9yZWQgPT0gNCkgPworCQkJCWRldHpjb2RlKHApIDogZGV0emNvZGU2NChwKTsKKwkJCXAgKz0gc3RvcmVkOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+dGltZWNudDsgKytpKSB7CisJCQlzcC0+dHlwZXNbaV0gPSAodW5zaWduZWQgY2hhcikgKnArKzsKKwkJCWlmIChzcC0+dHlwZXNbaV0gPj0gc3AtPnR5cGVjbnQpCisJCQkJcmV0dXJuIC0xOworCQl9CisJCWZvciAoaSA9IDA7IGkgPCBzcC0+dHlwZWNudDsgKytpKSB7CisJCQlyZWdpc3RlciBzdHJ1Y3QgdHRpbmZvICoJdHRpc3A7CisKKwkJCXR0aXNwID0gJnNwLT50dGlzW2ldOworCQkJdHRpc3AtPnR0X2dtdG9mZiA9IGRldHpjb2RlKHApOworCQkJcCArPSA0OworCQkJdHRpc3AtPnR0X2lzZHN0ID0gKHVuc2lnbmVkIGNoYXIpICpwKys7CisJCQlpZiAodHRpc3AtPnR0X2lzZHN0ICE9IDAgJiYgdHRpc3AtPnR0X2lzZHN0ICE9IDEpCisJCQkJcmV0dXJuIC0xOworCQkJdHRpc3AtPnR0X2FiYnJpbmQgPSAodW5zaWduZWQgY2hhcikgKnArKzsKKwkJCWlmICh0dGlzcC0+dHRfYWJicmluZCA8IDAgfHwKKwkJCQl0dGlzcC0+dHRfYWJicmluZCA+IHNwLT5jaGFyY250KQorCQkJCQlyZXR1cm4gLTE7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT5jaGFyY250OyArK2kpCisJCQlzcC0+Y2hhcnNbaV0gPSAqcCsrOworCQlzcC0+Y2hhcnNbaV0gPSAnXDAnOwkvKiBlbnN1cmUgJ1wwJyBhdCBlbmQgKi8KKwkJZm9yIChpID0gMDsgaSA8IHNwLT5sZWFwY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCBsc2luZm8gKglsc2lzcDsKKworCQkJbHNpc3AgPSAmc3AtPmxzaXNbaV07CisJCQlsc2lzcC0+bHNfdHJhbnMgPSAoc3RvcmVkID09IDQpID8KKwkJCQlkZXR6Y29kZShwKSA6IGRldHpjb2RlNjQocCk7CisJCQlwICs9IHN0b3JlZDsKKwkJCWxzaXNwLT5sc19jb3JyID0gZGV0emNvZGUocCk7CisJCQlwICs9IDQ7CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKworCQkJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCQlpZiAodHRpc3N0ZGNudCA9PSAwKQorCQkJCXR0aXNwLT50dF90dGlzc3RkID0gRkFMU0U7CisJCQllbHNlIHsKKwkJCQl0dGlzcC0+dHRfdHRpc3N0ZCA9ICpwKys7CisJCQkJaWYgKHR0aXNwLT50dF90dGlzc3RkICE9IFRSVUUgJiYKKwkJCQkJdHRpc3AtPnR0X3R0aXNzdGQgIT0gRkFMU0UpCisJCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpIHsKKwkJCXJlZ2lzdGVyIHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKworCQkJdHRpc3AgPSAmc3AtPnR0aXNbaV07CisJCQlpZiAodHRpc2dtdGNudCA9PSAwKQorCQkJCXR0aXNwLT50dF90dGlzZ210ID0gRkFMU0U7CisJCQllbHNlIHsKKwkJCQl0dGlzcC0+dHRfdHRpc2dtdCA9ICpwKys7CisJCQkJaWYgKHR0aXNwLT50dF90dGlzZ210ICE9IFRSVUUgJiYKKwkJCQkJdHRpc3AtPnR0X3R0aXNnbXQgIT0gRkFMU0UpCisJCQkJCQlyZXR1cm4gLTE7CisJCQl9CisJCX0KKwkJLyoKKwkJKiogT3V0LW9mLXNvcnQgYXRzIHNob3VsZCBtZWFuIHdlJ3JlIHJ1bm5pbmcgb24gYQorCQkqKiBzaWduZWQgdGltZV90IHN5c3RlbSBidXQgdXNpbmcgYSBkYXRhIGZpbGUgd2l0aAorCQkqKiB1bnNpZ25lZCB2YWx1ZXMgKG9yIHZpY2UgdmVyc2EpLgorCQkqLworCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQgLSAyOyArK2kpCisJCQlpZiAoc3AtPmF0c1tpXSA+IHNwLT5hdHNbaSArIDFdKSB7CisJCQkJKytpOworCQkJCWlmIChUWVBFX1NJR05FRCh0aW1lX3QpKSB7CisJCQkJCS8qCisJCQkJCSoqIElnbm9yZSB0aGUgZW5kIChlYXN5KS4KKwkJCQkJKi8KKwkJCQkJc3AtPnRpbWVjbnQgPSBpOworCQkJCX0gZWxzZSB7CisJCQkJCS8qCisJCQkJCSoqIElnbm9yZSB0aGUgYmVnaW5uaW5nIChoYXJkZXIpLgorCQkJCQkqLworCQkJCQlyZWdpc3RlciBpbnQJajsKKworCQkJCQlmb3IgKGogPSAwOyBqICsgaSA8IHNwLT50aW1lY250OyArK2opIHsKKwkJCQkJCXNwLT5hdHNbal0gPSBzcC0+YXRzW2ogKyBpXTsKKwkJCQkJCXNwLT50eXBlc1tqXSA9IHNwLT50eXBlc1tqICsgaV07CisJCQkJCX0KKwkJCQkJc3AtPnRpbWVjbnQgPSBqOworCQkJCX0KKwkJCQlicmVhazsKKwkJCX0KKwkJLyoKKwkJKiogSWYgdGhpcyBpcyBhbiBvbGQgZmlsZSwgd2UncmUgZG9uZS4KKwkJKi8KKwkJaWYgKHUudHpoZWFkLnR6aF92ZXJzaW9uWzBdID09ICdcMCcpCisJCQlicmVhazsKKwkJbnJlYWQgLT0gcCAtIHUuYnVmOworCQlmb3IgKGkgPSAwOyBpIDwgbnJlYWQ7ICsraSkKKwkJCXUuYnVmW2ldID0gcFtpXTsKKwkJLyoKKwkJKiogSWYgdGhpcyBpcyBhIG5hcnJvdyBpbnRlZ2VyIHRpbWVfdCBzeXN0ZW0sIHdlJ3JlIGRvbmUuCisJCSovCisJCWlmIChzdG9yZWQgPj0gKGludCkgc2l6ZW9mKHRpbWVfdCkgJiYgVFlQRV9JTlRFR1JBTCh0aW1lX3QpKQorCQkJYnJlYWs7CisJfQorCWlmIChkb2V4dGVuZCAmJiBucmVhZCA+IDIgJiYKKwkJdS5idWZbMF0gPT0gJ1xuJyAmJiB1LmJ1ZltucmVhZCAtIDFdID09ICdcbicgJiYKKwkJc3AtPnR5cGVjbnQgKyAyIDw9IFRaX01BWF9UWVBFUykgeworCQkJc3RydWN0IHN0YXRlCXRzOworCQkJcmVnaXN0ZXIgaW50CXJlc3VsdDsKKworCQkJdS5idWZbbnJlYWQgLSAxXSA9ICdcMCc7CisJCQlyZXN1bHQgPSB0enBhcnNlKCZ1LmJ1ZlsxXSwgJnRzLCBGQUxTRSk7CisJCQlpZiAocmVzdWx0ID09IDAgJiYgdHMudHlwZWNudCA9PSAyICYmCisJCQkJc3AtPmNoYXJjbnQgKyB0cy5jaGFyY250IDw9IFRaX01BWF9DSEFSUykgeworCQkJCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQorCQkJCQkJdHMudHRpc1tpXS50dF9hYmJyaW5kICs9CisJCQkJCQkJc3AtPmNoYXJjbnQ7CisJCQkJCWZvciAoaSA9IDA7IGkgPCB0cy5jaGFyY250OyArK2kpCisJCQkJCQlzcC0+Y2hhcnNbc3AtPmNoYXJjbnQrK10gPQorCQkJCQkJCXRzLmNoYXJzW2ldOworCQkJCQlpID0gMDsKKwkJCQkJd2hpbGUgKGkgPCB0cy50aW1lY250ICYmCisJCQkJCQl0cy5hdHNbaV0gPD0KKwkJCQkJCXNwLT5hdHNbc3AtPnRpbWVjbnQgLSAxXSkKKwkJCQkJCQkrK2k7CisJCQkJCXdoaWxlIChpIDwgdHMudGltZWNudCAmJgorCQkJCQkgICAgc3AtPnRpbWVjbnQgPCBUWl9NQVhfVElNRVMpIHsKKwkJCQkJCXNwLT5hdHNbc3AtPnRpbWVjbnRdID0KKwkJCQkJCQl0cy5hdHNbaV07CisJCQkJCQlzcC0+dHlwZXNbc3AtPnRpbWVjbnRdID0KKwkJCQkJCQlzcC0+dHlwZWNudCArCisJCQkJCQkJdHMudHlwZXNbaV07CisJCQkJCQkrK3NwLT50aW1lY250OworCQkJCQkJKytpOworCQkJCQl9CisJCQkJCXNwLT50dGlzW3NwLT50eXBlY250KytdID0gdHMudHRpc1swXTsKKwkJCQkJc3AtPnR0aXNbc3AtPnR5cGVjbnQrK10gPSB0cy50dGlzWzFdOworCQkJfQorCX0KKwlpID0gMiAqIFlFQVJTUEVSUkVQRUFUOworCXNwLT5nb2JhY2sgPSBzcC0+Z29haGVhZCA9IHNwLT50aW1lY250ID4gaTsKKwlzcC0+Z29iYWNrICY9IHNwLT50eXBlc1tpXSA9PSBzcC0+dHlwZXNbMF0gJiYKKwkJZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW2ldLCBzcC0+YXRzWzBdKTsKKwlzcC0+Z29haGVhZCAmPQorCQlzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxXSA9PSBzcC0+dHlwZXNbc3AtPnRpbWVjbnQgLSAxIC0gaV0gJiYKKwkJZGlmZmVyX2J5X3JlcGVhdChzcC0+YXRzW3NwLT50aW1lY250IC0gMV0sCisJCQkgc3AtPmF0c1tzcC0+dGltZWNudCAtIDEgLSBpXSk7CisgICAgICAgIFhMT0coKCAidHpsb2FkOiBsb2FkIG9rICEhXG4iICkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3QgaW50CW1vbl9sZW5ndGhzWzJdW01PTlNQRVJZRUFSXSA9IHsKKwl7IDMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfSwKKwl7IDMxLCAyOSwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzEgfQorfTsKKworc3RhdGljIGNvbnN0IGludAl5ZWFyX2xlbmd0aHNbMl0gPSB7CisJREFZU1BFUk5ZRUFSLCBEQVlTUEVSTFlFQVIKK307CisKKy8qCisqKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhIHRpbWUgem9uZSBzdHJpbmcsIHNjYW4gdW50aWwgYSBjaGFyYWN0ZXIgdGhhdCBpcyBub3QKKyoqIGEgdmFsaWQgY2hhcmFjdGVyIGluIGEgem9uZSBuYW1lIGlzIGZvdW5kLiBSZXR1cm4gYSBwb2ludGVyIHRvIHRoYXQKKyoqIGNoYXJhY3Rlci4KKyovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldHpuYW1lKHN0cnApCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK3sKKwlyZWdpc3RlciBjaGFyCWM7CisKKwl3aGlsZSAoKGMgPSAqc3RycCkgIT0gJ1wwJyAmJiAhaXNfZGlnaXQoYykgJiYgYyAhPSAnLCcgJiYgYyAhPSAnLScgJiYKKwkJYyAhPSAnKycpCisJCQkrK3N0cnA7CisJcmV0dXJuIHN0cnA7Cit9CisKKy8qCisqKiBHaXZlbiBhIHBvaW50ZXIgaW50byBhbiBleHRlbmRlZCB0aW1lIHpvbmUgc3RyaW5nLCBzY2FuIHVudGlsIHRoZSBlbmRpbmcKKyoqIGRlbGltaXRlciBvZiB0aGUgem9uZSBuYW1lIGlzIGxvY2F0ZWQuIFJldHVybiBhIHBvaW50ZXIgdG8gdGhlIGRlbGltaXRlci4KKyoqCisqKiBBcyB3aXRoIGdldHpuYW1lIGFib3ZlLCB0aGUgbGVnYWwgY2hhcmFjdGVyIHNldCBpcyBhY3R1YWxseSBxdWl0ZQorKiogcmVzdHJpY3RlZCwgd2l0aCBvdGhlciBjaGFyYWN0ZXJzIHByb2R1Y2luZyB1bmRlZmluZWQgcmVzdWx0cy4KKyoqIFdlIGRvbid0IGRvIGFueSBjaGVja2luZyBoZXJlOyBjaGVja2luZyBpcyBkb25lIGxhdGVyIGluIGNvbW1vbi1jYXNlIGNvZGUuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRxem5hbWUocmVnaXN0ZXIgY29uc3QgY2hhciAqc3RycCwgY29uc3QgaW50IGRlbGltKQoreworCXJlZ2lzdGVyIGludAljOworCisJd2hpbGUgKChjID0gKnN0cnApICE9ICdcMCcgJiYgYyAhPSBkZWxpbSkKKwkJKytzdHJwOworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gYSBwb2ludGVyIGludG8gYSB0aW1lIHpvbmUgc3RyaW5nLCBleHRyYWN0IGEgbnVtYmVyIGZyb20gdGhhdCBzdHJpbmcuCisqKiBDaGVjayB0aGF0IHRoZSBudW1iZXIgaXMgd2l0aGluIGEgc3BlY2lmaWVkIHJhbmdlOyBpZiBpdCBpcyBub3QsIHJldHVybgorKiogTlVMTC4KKyoqIE90aGVyd2lzZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG5vdCBwYXJ0IG9mIHRoZSBudW1iZXIuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRudW0oc3RycCwgbnVtcCwgbWluLCBtYXgpCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK2ludCAqIGNvbnN0CQludW1wOworY29uc3QgaW50CQltaW47Citjb25zdCBpbnQJCW1heDsKK3sKKwlyZWdpc3RlciBjaGFyCWM7CisJcmVnaXN0ZXIgaW50CW51bTsKKworCWlmIChzdHJwID09IE5VTEwgfHwgIWlzX2RpZ2l0KGMgPSAqc3RycCkpCisJCXJldHVybiBOVUxMOworCW51bSA9IDA7CisJZG8geworCQludW0gPSBudW0gKiAxMCArIChjIC0gJzAnKTsKKwkJaWYgKG51bSA+IG1heCkKKwkJCXJldHVybiBOVUxMOwkvKiBpbGxlZ2FsIHZhbHVlICovCisJCWMgPSAqKytzdHJwOworCX0gd2hpbGUgKGlzX2RpZ2l0KGMpKTsKKwlpZiAobnVtIDwgbWluKQorCQlyZXR1cm4gTlVMTDsJCS8qIGlsbGVnYWwgdmFsdWUgKi8KKwkqbnVtcCA9IG51bTsKKwlyZXR1cm4gc3RycDsKK30KKworLyoKKyoqIEdpdmVuIGEgcG9pbnRlciBpbnRvIGEgdGltZSB6b25lIHN0cmluZywgZXh0cmFjdCBhIG51bWJlciBvZiBzZWNvbmRzLAorKiogaW4gaGhbOm1tWzpzc11dIGZvcm0sIGZyb20gdGhlIHN0cmluZy4KKyoqIElmIGFueSBlcnJvciBvY2N1cnMsIHJldHVybiBOVUxMLgorKiogT3RoZXJ3aXNlLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IHBhcnQgb2YgdGhlIG51bWJlcgorKiogb2Ygc2Vjb25kcy4KKyovCisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2dldHNlY3Moc3RycCwgc2Vjc3ApCityZWdpc3RlciBjb25zdCBjaGFyICoJc3RycDsKK2xvbmcgKiBjb25zdAkJc2Vjc3A7Cit7CisJaW50CW51bTsKKworCS8qCisJKiogYEhPVVJTUEVSREFZICogREFZU1BFUldFRUsgLSAxJyBhbGxvd3MgcXVhc2ktUG9zaXggcnVsZXMgbGlrZQorCSoqICJNMTAuNC42LzI2Iiwgd2hpY2ggZG9lcyBub3QgY29uZm9ybSB0byBQb3NpeCwKKwkqKiBidXQgd2hpY2ggc3BlY2lmaWVzIHRoZSBlcXVpdmFsZW50IG9mCisJKiogYGAwMjowMCBvbiB0aGUgZmlyc3QgU3VuZGF5IG9uIG9yIGFmdGVyIDIzIE9jdCcnLgorCSovCisJc3RycCA9IGdldG51bShzdHJwLCAmbnVtLCAwLCBIT1VSU1BFUkRBWSAqIERBWVNQRVJXRUVLIC0gMSk7CisJaWYgKHN0cnAgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisJKnNlY3NwID0gbnVtICogKGxvbmcpIFNFQ1NQRVJIT1VSOworCWlmICgqc3RycCA9PSAnOicpIHsKKwkJKytzdHJwOworCQlzdHJwID0gZ2V0bnVtKHN0cnAsICZudW0sIDAsIE1JTlNQRVJIT1VSIC0gMSk7CisJCWlmIChzdHJwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJKnNlY3NwICs9IG51bSAqIFNFQ1NQRVJNSU47CisJCWlmICgqc3RycCA9PSAnOicpIHsKKwkJCSsrc3RycDsKKwkJCS8qIGBTRUNTUEVSTUlOJyBhbGxvd3MgZm9yIGxlYXAgc2Vjb25kcy4gKi8KKwkJCXN0cnAgPSBnZXRudW0oc3RycCwgJm51bSwgMCwgU0VDU1BFUk1JTik7CisJCQlpZiAoc3RycCA9PSBOVUxMKQorCQkJCXJldHVybiBOVUxMOworCQkJKnNlY3NwICs9IG51bTsKKwkJfQorCX0KKwlyZXR1cm4gc3RycDsKK30KKworLyoKKyoqIEdpdmVuIGEgcG9pbnRlciBpbnRvIGEgdGltZSB6b25lIHN0cmluZywgZXh0cmFjdCBhbiBvZmZzZXQsIGluCisqKiBbKy1daGhbOm1tWzpzc11dIGZvcm0sIGZyb20gdGhlIHN0cmluZy4KKyoqIElmIGFueSBlcnJvciBvY2N1cnMsIHJldHVybiBOVUxMLgorKiogT3RoZXJ3aXNlLCByZXR1cm4gYSBwb2ludGVyIHRvIHRoZSBmaXJzdCBjaGFyYWN0ZXIgbm90IHBhcnQgb2YgdGhlIHRpbWUuCisqLworCitzdGF0aWMgY29uc3QgY2hhciAqCitnZXRvZmZzZXQoc3RycCwgb2Zmc2V0cCkKK3JlZ2lzdGVyIGNvbnN0IGNoYXIgKglzdHJwOworbG9uZyAqIGNvbnN0CQlvZmZzZXRwOworeworCXJlZ2lzdGVyIGludAluZWcgPSAwOworCisJaWYgKCpzdHJwID09ICctJykgeworCQluZWcgPSAxOworCQkrK3N0cnA7CisJfSBlbHNlIGlmICgqc3RycCA9PSAnKycpCisJCSsrc3RycDsKKwlzdHJwID0gZ2V0c2VjcyhzdHJwLCBvZmZzZXRwKTsKKwlpZiAoc3RycCA9PSBOVUxMKQorCQlyZXR1cm4gTlVMTDsJCS8qIGlsbGVnYWwgdGltZSAqLworCWlmIChuZWcpCisJCSpvZmZzZXRwID0gLSpvZmZzZXRwOworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gYSBwb2ludGVyIGludG8gYSB0aW1lIHpvbmUgc3RyaW5nLCBleHRyYWN0IGEgcnVsZSBpbiB0aGUgZm9ybQorKiogZGF0ZVsvdGltZV0uIFNlZSBQT1NJWCBzZWN0aW9uIDggZm9yIHRoZSBmb3JtYXQgb2YgImRhdGUiIGFuZCAidGltZSIuCisqKiBJZiBhIHZhbGlkIHJ1bGUgaXMgbm90IGZvdW5kLCByZXR1cm4gTlVMTC4KKyoqIE90aGVyd2lzZSwgcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgZmlyc3QgY2hhcmFjdGVyIG5vdCBwYXJ0IG9mIHRoZSBydWxlLgorKi8KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZ2V0cnVsZShzdHJwLCBydWxlcCkKK2NvbnN0IGNoYXIgKgkJCXN0cnA7CityZWdpc3RlciBzdHJ1Y3QgcnVsZSAqIGNvbnN0CXJ1bGVwOworeworCWlmICgqc3RycCA9PSAnSicpIHsKKwkJLyoKKwkJKiogSnVsaWFuIGRheS4KKwkJKi8KKwkJcnVsZXAtPnJfdHlwZSA9IEpVTElBTl9EQVk7CisJCSsrc3RycDsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfZGF5LCAxLCBEQVlTUEVSTllFQVIpOworCX0gZWxzZSBpZiAoKnN0cnAgPT0gJ00nKSB7CisJCS8qCisJCSoqIE1vbnRoLCB3ZWVrLCBkYXkuCisJCSovCisJCXJ1bGVwLT5yX3R5cGUgPSBNT05USF9OVEhfREFZX09GX1dFRUs7CisJCSsrc3RycDsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfbW9uLCAxLCBNT05TUEVSWUVBUik7CisJCWlmIChzdHJwID09IE5VTEwpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKCpzdHJwKysgIT0gJy4nKQorCQkJcmV0dXJuIE5VTEw7CisJCXN0cnAgPSBnZXRudW0oc3RycCwgJnJ1bGVwLT5yX3dlZWssIDEsIDUpOworCQlpZiAoc3RycCA9PSBOVUxMKQorCQkJcmV0dXJuIE5VTEw7CisJCWlmICgqc3RycCsrICE9ICcuJykKKwkJCXJldHVybiBOVUxMOworCQlzdHJwID0gZ2V0bnVtKHN0cnAsICZydWxlcC0+cl9kYXksIDAsIERBWVNQRVJXRUVLIC0gMSk7CisJfSBlbHNlIGlmIChpc19kaWdpdCgqc3RycCkpIHsKKwkJLyoKKwkJKiogRGF5IG9mIHllYXIuCisJCSovCisJCXJ1bGVwLT5yX3R5cGUgPSBEQVlfT0ZfWUVBUjsKKwkJc3RycCA9IGdldG51bShzdHJwLCAmcnVsZXAtPnJfZGF5LCAwLCBEQVlTUEVSTFlFQVIgLSAxKTsKKwl9IGVsc2UJcmV0dXJuIE5VTEw7CQkvKiBpbnZhbGlkIGZvcm1hdCAqLworCWlmIChzdHJwID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCWlmICgqc3RycCA9PSAnLycpIHsKKwkJLyoKKwkJKiogVGltZSBzcGVjaWZpZWQuCisJCSovCisJCSsrc3RycDsKKwkJc3RycCA9IGdldHNlY3Moc3RycCwgJnJ1bGVwLT5yX3RpbWUpOworCX0gZWxzZQlydWxlcC0+cl90aW1lID0gMiAqIFNFQ1NQRVJIT1VSOwkvKiBkZWZhdWx0ID0gMjowMDowMCAqLworCXJldHVybiBzdHJwOworfQorCisvKgorKiogR2l2ZW4gdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgSmFudWFyeSAxLCAwMDowMDowMCBVVEMsIGluIGEgeWVhciwgdGhlCisqKiB5ZWFyLCBhIHJ1bGUsIGFuZCB0aGUgb2Zmc2V0IGZyb20gVVRDIGF0IHRoZSB0aW1lIHRoYXQgcnVsZSB0YWtlcyBlZmZlY3QsCisqKiBjYWxjdWxhdGUgdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgdGhhdCBydWxlIHRha2VzIGVmZmVjdC4KKyovCisKK3N0YXRpYyB0aW1lX3QKK3RyYW5zdGltZShqYW5maXJzdCwgeWVhciwgcnVsZXAsIG9mZnNldCkKK2NvbnN0IHRpbWVfdAkJCQlqYW5maXJzdDsKK2NvbnN0IGludAkJCQl5ZWFyOworcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHJ1bGUgKiBjb25zdAlydWxlcDsKK2NvbnN0IGxvbmcJCQkJb2Zmc2V0OworeworCXJlZ2lzdGVyIGludAlsZWFweWVhcjsKKwlyZWdpc3RlciB0aW1lX3QJdmFsdWU7CisJcmVnaXN0ZXIgaW50CWk7CisJaW50CQlkLCBtMSwgeXkwLCB5eTEsIHl5MiwgZG93OworCisJSU5JVElBTElaRSh2YWx1ZSk7CisJbGVhcHllYXIgPSBpc2xlYXAoeWVhcik7CisJc3dpdGNoIChydWxlcC0+cl90eXBlKSB7CisKKwljYXNlIEpVTElBTl9EQVk6CisJCS8qCisJCSoqIEpuIC0gSnVsaWFuIGRheSwgMSA9PSBKYW51YXJ5IDEsIDYwID09IE1hcmNoIDEgZXZlbiBpbiBsZWFwCisJCSoqIHllYXJzLgorCQkqKiBJbiBub24tbGVhcCB5ZWFycywgb3IgaWYgdGhlIGRheSBudW1iZXIgaXMgNTkgb3IgbGVzcywganVzdAorCQkqKiBhZGQgU0VDU1BFUkRBWSB0aW1lcyB0aGUgZGF5IG51bWJlci0xIHRvIHRoZSB0aW1lIG9mCisJCSoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0ICsgKHJ1bGVwLT5yX2RheSAtIDEpICogU0VDU1BFUkRBWTsKKwkJaWYgKGxlYXB5ZWFyICYmIHJ1bGVwLT5yX2RheSA+PSA2MCkKKwkJCXZhbHVlICs9IFNFQ1NQRVJEQVk7CisJCWJyZWFrOworCisJY2FzZSBEQVlfT0ZfWUVBUjoKKwkJLyoKKwkJKiogbiAtIGRheSBvZiB5ZWFyLgorCQkqKiBKdXN0IGFkZCBTRUNTUEVSREFZIHRpbWVzIHRoZSBkYXkgbnVtYmVyIHRvIHRoZSB0aW1lIG9mCisJCSoqIEphbnVhcnkgMSwgbWlkbmlnaHQsIHRvIGdldCB0aGUgZGF5LgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0ICsgcnVsZXAtPnJfZGF5ICogU0VDU1BFUkRBWTsKKwkJYnJlYWs7CisKKwljYXNlIE1PTlRIX05USF9EQVlfT0ZfV0VFSzoKKwkJLyoKKwkJKiogTW0ubi5kIC0gbnRoICJkdGggZGF5IiBvZiBtb250aCBtLgorCQkqLworCQl2YWx1ZSA9IGphbmZpcnN0OworCQlmb3IgKGkgPSAwOyBpIDwgcnVsZXAtPnJfbW9uIC0gMTsgKytpKQorCQkJdmFsdWUgKz0gbW9uX2xlbmd0aHNbbGVhcHllYXJdW2ldICogU0VDU1BFUkRBWTsKKworCQkvKgorCQkqKiBVc2UgWmVsbGVyJ3MgQ29uZ3J1ZW5jZSB0byBnZXQgZGF5LW9mLXdlZWsgb2YgZmlyc3QgZGF5IG9mCisJCSoqIG1vbnRoLgorCQkqLworCQltMSA9IChydWxlcC0+cl9tb24gKyA5KSAlIDEyICsgMTsKKwkJeXkwID0gKHJ1bGVwLT5yX21vbiA8PSAyKSA/ICh5ZWFyIC0gMSkgOiB5ZWFyOworCQl5eTEgPSB5eTAgLyAxMDA7CisJCXl5MiA9IHl5MCAlIDEwMDsKKwkJZG93ID0gKCgyNiAqIG0xIC0gMikgLyAxMCArCisJCQkxICsgeXkyICsgeXkyIC8gNCArIHl5MSAvIDQgLSAyICogeXkxKSAlIDc7CisJCWlmIChkb3cgPCAwKQorCQkJZG93ICs9IERBWVNQRVJXRUVLOworCisJCS8qCisJCSoqICJkb3ciIGlzIHRoZSBkYXktb2Ytd2VlayBvZiB0aGUgZmlyc3QgZGF5IG9mIHRoZSBtb250aC4gR2V0CisJCSoqIHRoZSBkYXktb2YtbW9udGggKHplcm8tb3JpZ2luKSBvZiB0aGUgZmlyc3QgImRvdyIgZGF5IG9mIHRoZQorCQkqKiBtb250aC4KKwkJKi8KKwkJZCA9IHJ1bGVwLT5yX2RheSAtIGRvdzsKKwkJaWYgKGQgPCAwKQorCQkJZCArPSBEQVlTUEVSV0VFSzsKKwkJZm9yIChpID0gMTsgaSA8IHJ1bGVwLT5yX3dlZWs7ICsraSkgeworCQkJaWYgKGQgKyBEQVlTUEVSV0VFSyA+PQorCQkJCW1vbl9sZW5ndGhzW2xlYXB5ZWFyXVtydWxlcC0+cl9tb24gLSAxXSkKKwkJCQkJYnJlYWs7CisJCQlkICs9IERBWVNQRVJXRUVLOworCQl9CisKKwkJLyoKKwkJKiogImQiIGlzIHRoZSBkYXktb2YtbW9udGggKHplcm8tb3JpZ2luKSBvZiB0aGUgZGF5IHdlIHdhbnQuCisJCSovCisJCXZhbHVlICs9IGQgKiBTRUNTUEVSREFZOworCQlicmVhazsKKwl9CisKKwkvKgorCSoqICJ2YWx1ZSIgaXMgdGhlIEVwb2NoLXJlbGF0aXZlIHRpbWUgb2YgMDA6MDA6MDAgVVRDIG9uIHRoZSBkYXkgaW4KKwkqKiBxdWVzdGlvbi4gVG8gZ2V0IHRoZSBFcG9jaC1yZWxhdGl2ZSB0aW1lIG9mIHRoZSBzcGVjaWZpZWQgbG9jYWwKKwkqKiB0aW1lIG9uIHRoYXQgZGF5LCBhZGQgdGhlIHRyYW5zaXRpb24gdGltZSBhbmQgdGhlIGN1cnJlbnQgb2Zmc2V0CisJKiogZnJvbSBVVEMuCisJKi8KKwlyZXR1cm4gdmFsdWUgKyBydWxlcC0+cl90aW1lICsgb2Zmc2V0OworfQorCisvKgorKiogR2l2ZW4gYSBQT1NJWCBzZWN0aW9uIDgtc3R5bGUgVFogc3RyaW5nLCBmaWxsIGluIHRoZSBydWxlIHRhYmxlcyBhcworKiogYXBwcm9wcmlhdGUuCisqLworCitzdGF0aWMgaW50Cit0enBhcnNlKG5hbWUsIHNwLCBsYXN0ZGl0Y2gpCitjb25zdCBjaGFyICoJCQluYW1lOworcmVnaXN0ZXIgc3RydWN0IHN0YXRlICogY29uc3QJc3A7Citjb25zdCBpbnQJCQlsYXN0ZGl0Y2g7Cit7CisJY29uc3QgY2hhciAqCQkJc3RkbmFtZTsKKwljb25zdCBjaGFyICoJCQlkc3RuYW1lOworCXNpemVfdAkJCQlzdGRsZW47CisJc2l6ZV90CQkJCWRzdGxlbjsKKwlsb25nCQkJCXN0ZG9mZnNldDsKKwlsb25nCQkJCWRzdG9mZnNldDsKKwlyZWdpc3RlciB0aW1lX3QgKgkJYXRwOworCXJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKgl0eXBlcDsKKwlyZWdpc3RlciBjaGFyICoJCQljcDsKKwlyZWdpc3RlciBpbnQJCQlsb2FkX3Jlc3VsdDsKKworCUlOSVRJQUxJWkUoZHN0bmFtZSk7CisJc3RkbmFtZSA9IG5hbWU7CisJaWYgKGxhc3RkaXRjaCkgeworCQlzdGRsZW4gPSBzdHJsZW4obmFtZSk7CS8qIGxlbmd0aCBvZiBzdGFuZGFyZCB6b25lIG5hbWUgKi8KKwkJbmFtZSArPSBzdGRsZW47CisJCWlmIChzdGRsZW4gPj0gc2l6ZW9mIHNwLT5jaGFycykKKwkJCXN0ZGxlbiA9IChzaXplb2Ygc3AtPmNoYXJzKSAtIDE7CisJCXN0ZG9mZnNldCA9IDA7CisJfSBlbHNlIHsKKwkJaWYgKCpuYW1lID09ICc8JykgeworCQkJbmFtZSsrOworCQkJc3RkbmFtZSA9IG5hbWU7CisJCQluYW1lID0gZ2V0cXpuYW1lKG5hbWUsICc+Jyk7CisJCQlpZiAoKm5hbWUgIT0gJz4nKQorCQkJCXJldHVybiAoLTEpOworCQkJc3RkbGVuID0gbmFtZSAtIHN0ZG5hbWU7CisJCQluYW1lKys7CisJCX0gZWxzZSB7CisJCQluYW1lID0gZ2V0em5hbWUobmFtZSk7CisJCQlzdGRsZW4gPSBuYW1lIC0gc3RkbmFtZTsKKwkJfQorCQlpZiAoKm5hbWUgPT0gJ1wwJykKKwkJCXJldHVybiAtMTsKKwkJbmFtZSA9IGdldG9mZnNldChuYW1lLCAmc3Rkb2Zmc2V0KTsKKwkJaWYgKG5hbWUgPT0gTlVMTCkKKwkJCXJldHVybiAtMTsKKwl9CisJbG9hZF9yZXN1bHQgPSB0emxvYWQoVFpERUZSVUxFUywgc3AsIEZBTFNFKTsKKwlpZiAobG9hZF9yZXN1bHQgIT0gMCkKKwkJc3AtPmxlYXBjbnQgPSAwOwkJLyogc28sIHdlJ3JlIG9mZiBhIGxpdHRsZSAqLworCXNwLT50aW1lY250ID0gMDsKKwlpZiAoKm5hbWUgIT0gJ1wwJykgeworCQlpZiAoKm5hbWUgPT0gJzwnKSB7CisJCQlkc3RuYW1lID0gKytuYW1lOworCQkJbmFtZSA9IGdldHF6bmFtZShuYW1lLCAnPicpOworCQkJaWYgKCpuYW1lICE9ICc+JykKKwkJCQlyZXR1cm4gLTE7CisJCQlkc3RsZW4gPSBuYW1lIC0gZHN0bmFtZTsKKwkJCW5hbWUrKzsKKwkJfSBlbHNlIHsKKwkJCWRzdG5hbWUgPSBuYW1lOworCQkJbmFtZSA9IGdldHpuYW1lKG5hbWUpOworCQkJZHN0bGVuID0gbmFtZSAtIGRzdG5hbWU7IC8qIGxlbmd0aCBvZiBEU1Qgem9uZSBuYW1lICovCisJCX0KKwkJaWYgKCpuYW1lICE9ICdcMCcgJiYgKm5hbWUgIT0gJywnICYmICpuYW1lICE9ICc7JykgeworCQkJbmFtZSA9IGdldG9mZnNldChuYW1lLCAmZHN0b2Zmc2V0KTsKKwkJCWlmIChuYW1lID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQl9IGVsc2UJZHN0b2Zmc2V0ID0gc3Rkb2Zmc2V0IC0gU0VDU1BFUkhPVVI7CisJCWlmICgqbmFtZSA9PSAnXDAnICYmIGxvYWRfcmVzdWx0ICE9IDApCisJCQluYW1lID0gVFpERUZSVUxFU1RSSU5HOworCQlpZiAoKm5hbWUgPT0gJywnIHx8ICpuYW1lID09ICc7JykgeworCQkJc3RydWN0IHJ1bGUJc3RhcnQ7CisJCQlzdHJ1Y3QgcnVsZQllbmQ7CisJCQlyZWdpc3RlciBpbnQJeWVhcjsKKwkJCXJlZ2lzdGVyIHRpbWVfdAlqYW5maXJzdDsKKwkJCXRpbWVfdAkJc3RhcnR0aW1lOworCQkJdGltZV90CQllbmR0aW1lOworCisJCQkrK25hbWU7CisJCQlpZiAoKG5hbWUgPSBnZXRydWxlKG5hbWUsICZzdGFydCkpID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKCpuYW1lKysgIT0gJywnKQorCQkJCXJldHVybiAtMTsKKwkJCWlmICgobmFtZSA9IGdldHJ1bGUobmFtZSwgJmVuZCkpID09IE5VTEwpCisJCQkJcmV0dXJuIC0xOworCQkJaWYgKCpuYW1lICE9ICdcMCcpCisJCQkJcmV0dXJuIC0xOworCQkJc3AtPnR5cGVjbnQgPSAyOwkvKiBzdGFuZGFyZCB0aW1lIGFuZCBEU1QgKi8KKwkJCS8qCisJCQkqKiBUd28gdHJhbnNpdGlvbnMgcGVyIHllYXIsIGZyb20gRVBPQ0hfWUVBUiBmb3J3YXJkLgorCQkJKi8KKwkJCXNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1kc3RvZmZzZXQ7CisJCQlzcC0+dHRpc1swXS50dF9pc2RzdCA9IDE7CisJCQlzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKKwkJCXNwLT50dGlzWzFdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CisJCQlzcC0+dHRpc1sxXS50dF9pc2RzdCA9IDA7CisJCQlzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gMDsKKwkJCWF0cCA9IHNwLT5hdHM7CisJCQl0eXBlcCA9IHNwLT50eXBlczsKKwkJCWphbmZpcnN0ID0gMDsKKwkJCWZvciAoeWVhciA9IEVQT0NIX1lFQVI7CisJCQkgICAgc3AtPnRpbWVjbnQgKyAyIDw9IFRaX01BWF9USU1FUzsKKwkJCSAgICArK3llYXIpIHsKKwkJCSAgICAJdGltZV90CW5ld2ZpcnN0OworCisJCQkJc3RhcnR0aW1lID0gdHJhbnN0aW1lKGphbmZpcnN0LCB5ZWFyLCAmc3RhcnQsCisJCQkJCXN0ZG9mZnNldCk7CisJCQkJZW5kdGltZSA9IHRyYW5zdGltZShqYW5maXJzdCwgeWVhciwgJmVuZCwKKwkJCQkJZHN0b2Zmc2V0KTsKKwkJCQlpZiAoc3RhcnR0aW1lID4gZW5kdGltZSkgeworCQkJCQkqYXRwKysgPSBlbmR0aW1lOworCQkJCQkqdHlwZXArKyA9IDE7CS8qIERTVCBlbmRzICovCisJCQkJCSphdHArKyA9IHN0YXJ0dGltZTsKKwkJCQkJKnR5cGVwKysgPSAwOwkvKiBEU1QgYmVnaW5zICovCisJCQkJfSBlbHNlIHsKKwkJCQkJKmF0cCsrID0gc3RhcnR0aW1lOworCQkJCQkqdHlwZXArKyA9IDA7CS8qIERTVCBiZWdpbnMgKi8KKwkJCQkJKmF0cCsrID0gZW5kdGltZTsKKwkJCQkJKnR5cGVwKysgPSAxOwkvKiBEU1QgZW5kcyAqLworCQkJCX0KKwkJCQlzcC0+dGltZWNudCArPSAyOworCQkJCW5ld2ZpcnN0ID0gamFuZmlyc3Q7CisJCQkJbmV3Zmlyc3QgKz0geWVhcl9sZW5ndGhzW2lzbGVhcCh5ZWFyKV0gKgorCQkJCQlTRUNTUEVSREFZOworCQkJCWlmIChuZXdmaXJzdCA8PSBqYW5maXJzdCkKKwkJCQkJYnJlYWs7CisJCQkJamFuZmlyc3QgPSBuZXdmaXJzdDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCXJlZ2lzdGVyIGxvbmcJdGhlaXJzdGRvZmZzZXQ7CisJCQlyZWdpc3RlciBsb25nCXRoZWlyZHN0b2Zmc2V0OworCQkJcmVnaXN0ZXIgbG9uZwl0aGVpcm9mZnNldDsKKwkJCXJlZ2lzdGVyIGludAlpc2RzdDsKKwkJCXJlZ2lzdGVyIGludAlpOworCQkJcmVnaXN0ZXIgaW50CWo7CisKKwkJCWlmICgqbmFtZSAhPSAnXDAnKQorCQkJCXJldHVybiAtMTsKKwkJCS8qCisJCQkqKiBJbml0aWFsIHZhbHVlcyBvZiB0aGVpcnN0ZG9mZnNldCBhbmQgdGhlaXJkc3RvZmZzZXQuCisJCQkqLworCQkJdGhlaXJzdGRvZmZzZXQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpIHsKKwkJCQlqID0gc3AtPnR5cGVzW2ldOworCQkJCWlmICghc3AtPnR0aXNbal0udHRfaXNkc3QpIHsKKwkJCQkJdGhlaXJzdGRvZmZzZXQgPQorCQkJCQkJLXNwLT50dGlzW2pdLnR0X2dtdG9mZjsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJfQorCQkJdGhlaXJkc3RvZmZzZXQgPSAwOworCQkJZm9yIChpID0gMDsgaSA8IHNwLT50aW1lY250OyArK2kpIHsKKwkJCQlqID0gc3AtPnR5cGVzW2ldOworCQkJCWlmIChzcC0+dHRpc1tqXS50dF9pc2RzdCkgeworCQkJCQl0aGVpcmRzdG9mZnNldCA9CisJCQkJCQktc3AtPnR0aXNbal0udHRfZ210b2ZmOworCQkJCQlicmVhazsKKwkJCQl9CisJCQl9CisJCQkvKgorCQkJKiogSW5pdGlhbGx5IHdlJ3JlIGFzc3VtZWQgdG8gYmUgaW4gc3RhbmRhcmQgdGltZS4KKwkJCSovCisJCQlpc2RzdCA9IEZBTFNFOworCQkJdGhlaXJvZmZzZXQgPSB0aGVpcnN0ZG9mZnNldDsKKwkJCS8qCisJCQkqKiBOb3cganVnZ2xlIHRyYW5zaXRpb24gdGltZXMgYW5kIHR5cGVzCisJCQkqKiB0cmFja2luZyBvZmZzZXRzIGFzIHlvdSBkby4KKwkJCSovCisJCQlmb3IgKGkgPSAwOyBpIDwgc3AtPnRpbWVjbnQ7ICsraSkgeworCQkJCWogPSBzcC0+dHlwZXNbaV07CisJCQkJc3AtPnR5cGVzW2ldID0gc3AtPnR0aXNbal0udHRfaXNkc3Q7CisJCQkJaWYgKHNwLT50dGlzW2pdLnR0X3R0aXNnbXQpIHsKKwkJCQkJLyogTm8gYWRqdXN0bWVudCB0byB0cmFuc2l0aW9uIHRpbWUgKi8KKwkJCQl9IGVsc2UgeworCQkJCQkvKgorCQkJCQkqKiBJZiBzdW1tZXIgdGltZSBpcyBpbiBlZmZlY3QsIGFuZCB0aGUKKwkJCQkJKiogdHJhbnNpdGlvbiB0aW1lIHdhcyBub3Qgc3BlY2lmaWVkIGFzCisJCQkJCSoqIHN0YW5kYXJkIHRpbWUsIGFkZCB0aGUgc3VtbWVyIHRpbWUKKwkJCQkJKiogb2Zmc2V0IHRvIHRoZSB0cmFuc2l0aW9uIHRpbWU7CisJCQkJCSoqIG90aGVyd2lzZSwgYWRkIHRoZSBzdGFuZGFyZCB0aW1lCisJCQkJCSoqIG9mZnNldCB0byB0aGUgdHJhbnNpdGlvbiB0aW1lLgorCQkJCQkqLworCQkJCQkvKgorCQkJCQkqKiBUcmFuc2l0aW9ucyBmcm9tIERTVCB0byBERFNUCisJCQkJCSoqIHdpbGwgZWZmZWN0aXZlbHkgZGlzYXBwZWFyIHNpbmNlCisJCQkJCSoqIFBPU0lYIHByb3ZpZGVzIGZvciBvbmx5IG9uZSBEU1QKKwkJCQkJKiogb2Zmc2V0LgorCQkJCQkqLworCQkJCQlpZiAoaXNkc3QgJiYgIXNwLT50dGlzW2pdLnR0X3R0aXNzdGQpIHsKKwkJCQkJCXNwLT5hdHNbaV0gKz0gZHN0b2Zmc2V0IC0KKwkJCQkJCQl0aGVpcmRzdG9mZnNldDsKKwkJCQkJfSBlbHNlIHsKKwkJCQkJCXNwLT5hdHNbaV0gKz0gc3Rkb2Zmc2V0IC0KKwkJCQkJCQl0aGVpcnN0ZG9mZnNldDsKKwkJCQkJfQorCQkJCX0KKwkJCQl0aGVpcm9mZnNldCA9IC1zcC0+dHRpc1tqXS50dF9nbXRvZmY7CisJCQkJaWYgKHNwLT50dGlzW2pdLnR0X2lzZHN0KQorCQkJCQl0aGVpcmRzdG9mZnNldCA9IHRoZWlyb2Zmc2V0OworCQkJCWVsc2UJdGhlaXJzdGRvZmZzZXQgPSB0aGVpcm9mZnNldDsKKwkJCX0KKwkJCS8qCisJCQkqKiBGaW5hbGx5LCBmaWxsIGluIHR0aXMuCisJCQkqKiB0dGlzc3RkIGFuZCB0dGlzZ210IG5lZWQgbm90IGJlIGhhbmRsZWQuCisJCQkqLworCQkJc3AtPnR0aXNbMF0udHRfZ210b2ZmID0gLXN0ZG9mZnNldDsKKwkJCXNwLT50dGlzWzBdLnR0X2lzZHN0ID0gRkFMU0U7CisJCQlzcC0+dHRpc1swXS50dF9hYmJyaW5kID0gMDsKKwkJCXNwLT50dGlzWzFdLnR0X2dtdG9mZiA9IC1kc3RvZmZzZXQ7CisJCQlzcC0+dHRpc1sxXS50dF9pc2RzdCA9IFRSVUU7CisJCQlzcC0+dHRpc1sxXS50dF9hYmJyaW5kID0gc3RkbGVuICsgMTsKKwkJCXNwLT50eXBlY250ID0gMjsKKwkJfQorCX0gZWxzZSB7CisJCWRzdGxlbiA9IDA7CisJCXNwLT50eXBlY250ID0gMTsJCS8qIG9ubHkgc3RhbmRhcmQgdGltZSAqLworCQlzcC0+dGltZWNudCA9IDA7CisJCXNwLT50dGlzWzBdLnR0X2dtdG9mZiA9IC1zdGRvZmZzZXQ7CisJCXNwLT50dGlzWzBdLnR0X2lzZHN0ID0gMDsKKwkJc3AtPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CisJfQorCXNwLT5jaGFyY250ID0gc3RkbGVuICsgMTsKKwlpZiAoZHN0bGVuICE9IDApCisJCXNwLT5jaGFyY250ICs9IGRzdGxlbiArIDE7CisJaWYgKChzaXplX3QpIHNwLT5jaGFyY250ID4gc2l6ZW9mIHNwLT5jaGFycykKKwkJcmV0dXJuIC0xOworCWNwID0gc3AtPmNoYXJzOworCSh2b2lkKSBzdHJuY3B5KGNwLCBzdGRuYW1lLCBzdGRsZW4pOworCWNwICs9IHN0ZGxlbjsKKwkqY3ArKyA9ICdcMCc7CisJaWYgKGRzdGxlbiAhPSAwKSB7CisJCSh2b2lkKSBzdHJuY3B5KGNwLCBkc3RuYW1lLCBkc3RsZW4pOworCQkqKGNwICsgZHN0bGVuKSA9ICdcMCc7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorZ210bG9hZChzcCkKK3N0cnVjdCBzdGF0ZSAqIGNvbnN0CXNwOworeworCWlmICh0emxvYWQoZ210LCBzcCwgVFJVRSkgIT0gMCkKKwkJKHZvaWQpIHR6cGFyc2UoZ210LCBzcCwgVFJVRSk7Cit9CisKKyNpZm5kZWYgU1REX0lOU1BJUkVECisvKgorKiogQSBub24tc3RhdGljIGRlY2xhcmF0aW9uIG9mIHR6c2V0d2FsbCBpbiBhIHN5c3RlbSBoZWFkZXIgZmlsZQorKiogbWF5IGNhdXNlIGEgd2FybmluZyBhYm91dCB0aGlzIHVwY29taW5nIHN0YXRpYyBkZWNsYXJhdGlvbi4uLgorKi8KK3N0YXRpYworI2VuZGlmIC8qICFkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwordm9pZAordHpzZXR3YWxsIFAoKHZvaWQpKQoreworCWlmIChsY2xfaXNfc2V0IDwgMCkKKwkJcmV0dXJuOworCWxjbF9pc19zZXQgPSAtMTsKKworI2lmZGVmIEFMTF9TVEFURQorCWlmIChsY2xwdHIgPT0gTlVMTCkgeworCQlsY2xwdHIgPSAoc3RydWN0IHN0YXRlICopIG1hbGxvYyhzaXplb2YgKmxjbHB0cik7CisJCWlmIChsY2xwdHIgPT0gTlVMTCkgeworCQkJc2V0dHpuYW1lKCk7CS8qIGFsbCB3ZSBjYW4gZG8gKi8KKwkJCXJldHVybjsKKwkJfQorCX0KKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworCWlmICh0emxvYWQoKGNoYXIgKikgTlVMTCwgbGNscHRyLCBUUlVFKSAhPSAwKQorCQlnbXRsb2FkKGxjbHB0cik7CisJc2V0dHpuYW1lKCk7Cit9CisKK3ZvaWQKK3R6c2V0IFAoKHZvaWQpKQoreworCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKgluYW1lID0gTlVMTDsKKyAgICBzdGF0aWMgY2hhciBidWZbUFJPUF9WQUxVRV9NQVhdOworCisJbmFtZSA9IGdldGVudigiVFoiKTsKKworCS8vIHRyeSB0aGUgInBlcnNpc3Quc3lzLnRpbWV6b25lIiBzeXN0ZW0gcHJvcGVydHkgZmlyc3QKKwlpZiAobmFtZSA9PSBOVUxMICYmIF9fc3lzdGVtX3Byb3BlcnR5X2dldCgicGVyc2lzdC5zeXMudGltZXpvbmUiLCBidWYpID4gMCkKKwkgICAgbmFtZSA9IGJ1ZjsKKworCWlmIChuYW1lID09IE5VTEwpIHsKKwkJdHpzZXR3YWxsKCk7CisJCXJldHVybjsKKwl9CisKKwlpZiAobGNsX2lzX3NldCA+IDAgJiYgc3RyY21wKGxjbF9UWm5hbWUsIG5hbWUpID09IDApCisJCXJldHVybjsKKwlsY2xfaXNfc2V0ID0gc3RybGVuKG5hbWUpIDwgc2l6ZW9mIGxjbF9UWm5hbWU7CisJaWYgKGxjbF9pc19zZXQpCisJCSh2b2lkKSBzdHJjcHkobGNsX1RabmFtZSwgbmFtZSk7CisKKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAobGNscHRyID09IE5VTEwpIHsKKwkJbGNscHRyID0gKHN0cnVjdCBzdGF0ZSAqKSBtYWxsb2Moc2l6ZW9mICpsY2xwdHIpOworCQlpZiAobGNscHRyID09IE5VTEwpIHsKKwkJCXNldHR6bmFtZSgpOwkvKiBhbGwgd2UgY2FuIGRvICovCisJCQlyZXR1cm47CisJCX0KKwl9CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlpZiAoKm5hbWUgPT0gJ1wwJykgeworCQkvKgorCQkqKiBVc2VyIHdhbnRzIGl0IGZhc3QgcmF0aGVyIHRoYW4gcmlnaHQuCisJCSovCisJCWxjbHB0ci0+bGVhcGNudCA9IDA7CQkvKiBzbywgd2UncmUgb2ZmIGEgbGl0dGxlICovCisJCWxjbHB0ci0+dGltZWNudCA9IDA7CisJCWxjbHB0ci0+dHlwZWNudCA9IDA7CisJCWxjbHB0ci0+dHRpc1swXS50dF9pc2RzdCA9IDA7CisJCWxjbHB0ci0+dHRpc1swXS50dF9nbXRvZmYgPSAwOworCQlsY2xwdHItPnR0aXNbMF0udHRfYWJicmluZCA9IDA7CisJCSh2b2lkKSBzdHJjcHkobGNscHRyLT5jaGFycywgZ210KTsKKwl9IGVsc2UgaWYgKHR6bG9hZChuYW1lLCBsY2xwdHIsIFRSVUUpICE9IDApCisJCWlmIChuYW1lWzBdID09ICc6JyB8fCB0enBhcnNlKG5hbWUsIGxjbHB0ciwgRkFMU0UpICE9IDApCisJCQkodm9pZCkgZ210bG9hZChsY2xwdHIpOworCXNldHR6bmFtZSgpOworfQorCisvKgorKiogVGhlIGVhc3kgd2F5IHRvIGJlaGF2ZSAiYXMgaWYgbm8gbGlicmFyeSBmdW5jdGlvbiBjYWxscyIgbG9jYWx0aW1lCisqKiBpcyB0byBub3QgY2FsbCBpdC0tc28gd2UgZHJvcCBpdHMgZ3V0cyBpbnRvICJsb2NhbHN1YiIsIHdoaWNoIGNhbiBiZQorKiogZnJlZWx5IGNhbGxlZC4gKEFuZCBubywgdGhlIFBBTlMgZG9lc24ndCByZXF1aXJlIHRoZSBhYm92ZSBiZWhhdmlvci0tCisqKiBidXQgaXQgKmlzKiBkZXNpcmFibGUuKQorKioKKyoqIFRoZSB1bnVzZWQgb2Zmc2V0IGFyZ3VtZW50IGlzIGZvciB0aGUgYmVuZWZpdCBvZiBta3RpbWUgdmFyaWFudHMuCisqLworCisvKkFSR1NVU0VEKi8KK3N0YXRpYyBzdHJ1Y3QgdG0gKgorbG9jYWxzdWIodGltZXAsIG9mZnNldCwgdG1wKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7Citjb25zdCBsb25nCQlvZmZzZXQ7CitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJcmVnaXN0ZXIgc3RydWN0IHN0YXRlICoJCXNwOworCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0dGluZm8gKgl0dGlzcDsKKwlyZWdpc3RlciBpbnQJCQlpOworCXJlZ2lzdGVyIHN0cnVjdCB0bSAqCQlyZXN1bHQ7CisJY29uc3QgdGltZV90CQkJdCA9ICp0aW1lcDsKKworCXNwID0gbGNscHRyOworI2lmZGVmIEFMTF9TVEFURQorCWlmIChzcCA9PSBOVUxMKQorCQlyZXR1cm4gZ210c3ViKHRpbWVwLCBvZmZzZXQsIHRtcCk7CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwlpZiAoKHNwLT5nb2JhY2sgJiYgdCA8IHNwLT5hdHNbMF0pIHx8CisJCShzcC0+Z29haGVhZCAmJiB0ID4gc3AtPmF0c1tzcC0+dGltZWNudCAtIDFdKSkgeworCQkJdGltZV90CQkJbmV3dCA9IHQ7CisJCQlyZWdpc3RlciB0aW1lX3QJCXNlY29uZHM7CisJCQlyZWdpc3RlciB0aW1lX3QJCXRjeWNsZXM7CisJCQlyZWdpc3RlciBpbnRfZmFzdDY0X3QJaWN5Y2xlczsKKworCQkJaWYgKHQgPCBzcC0+YXRzWzBdKQorCQkJCXNlY29uZHMgPSBzcC0+YXRzWzBdIC0gdDsKKwkJCWVsc2UJc2Vjb25kcyA9IHQgLSBzcC0+YXRzW3NwLT50aW1lY250IC0gMV07CisJCQktLXNlY29uZHM7CisJCQl0Y3ljbGVzID0gc2Vjb25kcyAvIFlFQVJTUEVSUkVQRUFUIC8gQVZHU0VDU1BFUllFQVI7CisJCQkrK3RjeWNsZXM7CisJCQlpY3ljbGVzID0gdGN5Y2xlczsKKwkJCWlmICh0Y3ljbGVzIC0gaWN5Y2xlcyA+PSAxIHx8IGljeWNsZXMgLSB0Y3ljbGVzID49IDEpCisJCQkJcmV0dXJuIE5VTEw7CisJCQlzZWNvbmRzID0gaWN5Y2xlczsKKwkJCXNlY29uZHMgKj0gWUVBUlNQRVJSRVBFQVQ7CisJCQlzZWNvbmRzICo9IEFWR1NFQ1NQRVJZRUFSOworCQkJaWYgKHQgPCBzcC0+YXRzWzBdKQorCQkJCW5ld3QgKz0gc2Vjb25kczsKKwkJCWVsc2UJbmV3dCAtPSBzZWNvbmRzOworCQkJaWYgKG5ld3QgPCBzcC0+YXRzWzBdIHx8CisJCQkJbmV3dCA+IHNwLT5hdHNbc3AtPnRpbWVjbnQgLSAxXSkKKwkJCQkJcmV0dXJuIE5VTEw7CS8qICJjYW5ub3QgaGFwcGVuIiAqLworCQkJcmVzdWx0ID0gbG9jYWxzdWIoJm5ld3QsIG9mZnNldCwgdG1wKTsKKwkJCWlmIChyZXN1bHQgPT0gdG1wKSB7CisJCQkJcmVnaXN0ZXIgdGltZV90CW5ld3k7CisKKwkJCQluZXd5ID0gdG1wLT50bV95ZWFyOworCQkJCWlmICh0IDwgc3AtPmF0c1swXSkKKwkJCQkJbmV3eSAtPSBpY3ljbGVzICogWUVBUlNQRVJSRVBFQVQ7CisJCQkJZWxzZQluZXd5ICs9IGljeWNsZXMgKiBZRUFSU1BFUlJFUEVBVDsKKwkJCQl0bXAtPnRtX3llYXIgPSBuZXd5OworCQkJCWlmICh0bXAtPnRtX3llYXIgIT0gbmV3eSkKKwkJCQkJcmV0dXJuIE5VTEw7CisJCQl9CisJCQlyZXR1cm4gcmVzdWx0OworCX0KKwlpZiAoc3AtPnRpbWVjbnQgPT0gMCB8fCB0IDwgc3AtPmF0c1swXSkgeworCQlpID0gMDsKKwkJd2hpbGUgKHNwLT50dGlzW2ldLnR0X2lzZHN0KQorCQkJaWYgKCsraSA+PSBzcC0+dHlwZWNudCkgeworCQkJCWkgPSAwOworCQkJCWJyZWFrOworCQkJfQorCX0gZWxzZSB7CisJCXJlZ2lzdGVyIGludAlsbyA9IDE7CisJCXJlZ2lzdGVyIGludAloaSA9IHNwLT50aW1lY250OworCisJCXdoaWxlIChsbyA8IGhpKSB7CisJCQlyZWdpc3RlciBpbnQJbWlkID0gKGxvICsgaGkpID4+IDE7CisKKwkJCWlmICh0IDwgc3AtPmF0c1ttaWRdKQorCQkJCWhpID0gbWlkOworCQkJZWxzZQlsbyA9IG1pZCArIDE7CisJCX0KKwkJaSA9IChpbnQpIHNwLT50eXBlc1tsbyAtIDFdOworCX0KKwl0dGlzcCA9ICZzcC0+dHRpc1tpXTsKKwkvKgorCSoqIFRvIGdldCAod3JvbmcpIGJlaGF2aW9yIHRoYXQncyBjb21wYXRpYmxlIHdpdGggU3lzdGVtIFYgUmVsZWFzZSAyLjAKKwkqKiB5b3UnZCByZXBsYWNlIHRoZSBzdGF0ZW1lbnQgYmVsb3cgd2l0aAorCSoqCXQgKz0gdHRpc3AtPnR0X2dtdG9mZjsKKwkqKgl0aW1lc3ViKCZ0LCAwTCwgc3AsIHRtcCk7CisJKi8KKwlyZXN1bHQgPSB0aW1lc3ViKCZ0LCB0dGlzcC0+dHRfZ210b2ZmLCBzcCwgdG1wKTsKKwl0bXAtPnRtX2lzZHN0ID0gdHRpc3AtPnR0X2lzZHN0OworCXR6bmFtZVt0bXAtPnRtX2lzZHN0XSA9ICZzcC0+Y2hhcnNbdHRpc3AtPnR0X2FiYnJpbmRdOworI2lmZGVmIFRNX1pPTkUKKwl0bXAtPlRNX1pPTkUgPSAmc3AtPmNoYXJzW3R0aXNwLT50dF9hYmJyaW5kXTsKKyNlbmRpZiAvKiBkZWZpbmVkIFRNX1pPTkUgKi8KKwlyZXR1cm4gcmVzdWx0OworfQorCitzdHJ1Y3QgdG0gKgorbG9jYWx0aW1lKHRpbWVwKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7Cit7CisJdHpzZXQoKTsKKwlyZXR1cm4gbG9jYWxzdWIodGltZXAsIDBMLCAmdG0pOworfQorCisvKgorKiogUmUtZW50cmFudCB2ZXJzaW9uIG9mIGxvY2FsdGltZS4KKyovCisKK3N0cnVjdCB0bSAqCitsb2NhbHRpbWVfcih0aW1lcCwgdG1wKQorY29uc3QgdGltZV90ICogY29uc3QJdGltZXA7CitzdHJ1Y3QgdG0gKgkJdG1wOworeworICAgICAgICB0enNldCgpOworCXJldHVybiBsb2NhbHN1Yih0aW1lcCwgMEwsIHRtcCk7Cit9CisKKy8qCisqKiBnbXRzdWIgaXMgdG8gZ210aW1lIGFzIGxvY2Fsc3ViIGlzIHRvIGxvY2FsdGltZS4KKyovCisKK3N0YXRpYyBzdHJ1Y3QgdG0gKgorZ210c3ViKHRpbWVwLCBvZmZzZXQsIHRtcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworY29uc3QgbG9uZwkJb2Zmc2V0Oworc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXJlZ2lzdGVyIHN0cnVjdCB0bSAqCXJlc3VsdDsKKworCWlmICghZ210X2lzX3NldCkgeworCQlnbXRfaXNfc2V0ID0gVFJVRTsKKyNpZmRlZiBBTExfU1RBVEUKKwkJZ210cHRyID0gKHN0cnVjdCBzdGF0ZSAqKSBtYWxsb2Moc2l6ZW9mICpnbXRwdHIpOworCQlpZiAoZ210cHRyICE9IE5VTEwpCisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwkJCWdtdGxvYWQoZ210cHRyKTsKKwl9CisJcmVzdWx0ID0gdGltZXN1Yih0aW1lcCwgb2Zmc2V0LCBnbXRwdHIsIHRtcCk7CisjaWZkZWYgVE1fWk9ORQorCS8qCisJKiogQ291bGQgZ2V0IGZhbmN5IGhlcmUgYW5kIGRlbGl2ZXIgc29tZXRoaW5nIHN1Y2ggYXMKKwkqKiAiVVRDK3h4eHgiIG9yICJVVEMteHh4eCIgaWYgb2Zmc2V0IGlzIG5vbi16ZXJvLAorCSoqIGJ1dCB0aGlzIGlzIG5vIHRpbWUgZm9yIGEgdHJlYXN1cmUgaHVudC4KKwkqLworCWlmIChvZmZzZXQgIT0gMCkKKwkJdG1wLT5UTV9aT05FID0gd2lsZGFiYnI7CisJZWxzZSB7CisjaWZkZWYgQUxMX1NUQVRFCisJCWlmIChnbXRwdHIgPT0gTlVMTCkKKwkJCXRtcC0+VE1fWk9ORSA9IGdtdDsKKwkJZWxzZQl0bXAtPlRNX1pPTkUgPSBnbXRwdHItPmNoYXJzOworI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCisjaWZuZGVmIEFMTF9TVEFURQorCQl0bXAtPlRNX1pPTkUgPSBnbXRwdHItPmNoYXJzOworI2VuZGlmIC8qIFN0YXRlIEZhcm0gKi8KKwl9CisjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RydWN0IHRtICoKK2dtdGltZSh0aW1lcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworeworCXJldHVybiBnbXRzdWIodGltZXAsIDBMLCAmdG0pOworfQorCisvKgorKiBSZS1lbnRyYW50IHZlcnNpb24gb2YgZ210aW1lLgorKi8KKworc3RydWN0IHRtICoKK2dtdGltZV9yKHRpbWVwLCB0bXApCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK3N0cnVjdCB0bSAqCQl0bXA7Cit7CisJcmV0dXJuIGdtdHN1Yih0aW1lcCwgMEwsIHRtcCk7Cit9CisKKyNpZmRlZiBTVERfSU5TUElSRUQKKworc3RydWN0IHRtICoKK29mZnRpbWUodGltZXAsIG9mZnNldCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CXRpbWVwOworY29uc3QgbG9uZwkJb2Zmc2V0OworeworCXJldHVybiBnbXRzdWIodGltZXAsIG9mZnNldCwgJnRtKTsKK30KKworI2VuZGlmIC8qIGRlZmluZWQgU1REX0lOU1BJUkVEICovCisKKy8qCisqKiBSZXR1cm4gdGhlIG51bWJlciBvZiBsZWFwIHllYXJzIHRocm91Z2ggdGhlIGVuZCBvZiB0aGUgZ2l2ZW4geWVhcgorKiogd2hlcmUsIHRvIG1ha2UgdGhlIG1hdGggZWFzeSwgdGhlIGFuc3dlciBmb3IgeWVhciB6ZXJvIGlzIGRlZmluZWQgYXMgemVyby4KKyovCisKK3N0YXRpYyBpbnQKK2xlYXBzX3RocnVfZW5kX29mKHkpCityZWdpc3RlciBjb25zdCBpbnQJeTsKK3sKKwlyZXR1cm4gKHkgPj0gMCkgPyAoeSAvIDQgLSB5IC8gMTAwICsgeSAvIDQwMCkgOgorCQktKGxlYXBzX3RocnVfZW5kX29mKC0oeSArIDEpKSArIDEpOworfQorCitzdGF0aWMgc3RydWN0IHRtICoKK3RpbWVzdWIodGltZXAsIG9mZnNldCwgc3AsIHRtcCkKK2NvbnN0IHRpbWVfdCAqIGNvbnN0CQkJdGltZXA7Citjb25zdCBsb25nCQkJCW9mZnNldDsKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdGF0ZSAqIGNvbnN0CXNwOworcmVnaXN0ZXIgc3RydWN0IHRtICogY29uc3QJCXRtcDsKK3sKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbHNpbmZvICoJbHA7CisJcmVnaXN0ZXIgdGltZV90CQkJdGRheXM7CisJcmVnaXN0ZXIgaW50CQkJaWRheXM7CS8qIHVuc2lnbmVkIHdvdWxkIGJlIHNvIDIwMDMgKi8KKwlyZWdpc3RlciBsb25nCQkJcmVtOworCWludAkJCQl5OworCXJlZ2lzdGVyIGNvbnN0IGludCAqCQlpcDsKKwlyZWdpc3RlciBsb25nCQkJY29ycjsKKwlyZWdpc3RlciBpbnQJCQloaXQ7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCWNvcnIgPSAwOworCWhpdCA9IDA7CisjaWZkZWYgQUxMX1NUQVRFCisJaSA9IChzcCA9PSBOVUxMKSA/IDAgOiBzcC0+bGVhcGNudDsKKyNlbmRpZiAvKiBkZWZpbmVkIEFMTF9TVEFURSAqLworI2lmbmRlZiBBTExfU1RBVEUKKwlpID0gc3AtPmxlYXBjbnQ7CisjZW5kaWYgLyogU3RhdGUgRmFybSAqLworCXdoaWxlICgtLWkgPj0gMCkgeworCQlscCA9ICZzcC0+bHNpc1tpXTsKKwkJaWYgKCp0aW1lcCA+PSBscC0+bHNfdHJhbnMpIHsKKwkJCWlmICgqdGltZXAgPT0gbHAtPmxzX3RyYW5zKSB7CisJCQkJaGl0ID0gKChpID09IDAgJiYgbHAtPmxzX2NvcnIgPiAwKSB8fAorCQkJCQlscC0+bHNfY29yciA+IHNwLT5sc2lzW2kgLSAxXS5sc19jb3JyKTsKKwkJCQlpZiAoaGl0KQorCQkJCQl3aGlsZSAoaSA+IDAgJiYKKwkJCQkJCXNwLT5sc2lzW2ldLmxzX3RyYW5zID09CisJCQkJCQlzcC0+bHNpc1tpIC0gMV0ubHNfdHJhbnMgKyAxICYmCisJCQkJCQlzcC0+bHNpc1tpXS5sc19jb3JyID09CisJCQkJCQlzcC0+bHNpc1tpIC0gMV0ubHNfY29yciArIDEpIHsKKwkJCQkJCQkrK2hpdDsKKwkJCQkJCQktLWk7CisJCQkJCX0KKwkJCX0KKwkJCWNvcnIgPSBscC0+bHNfY29ycjsKKwkJCWJyZWFrOworCQl9CisJfQorCXkgPSBFUE9DSF9ZRUFSOworCXRkYXlzID0gKnRpbWVwIC8gU0VDU1BFUkRBWTsKKwlyZW0gPSAqdGltZXAgLSB0ZGF5cyAqIFNFQ1NQRVJEQVk7CisJd2hpbGUgKHRkYXlzIDwgMCB8fCB0ZGF5cyA+PSB5ZWFyX2xlbmd0aHNbaXNsZWFwKHkpXSkgeworCQlpbnQJCW5ld3k7CisJCXJlZ2lzdGVyIHRpbWVfdAl0ZGVsdGE7CisJCXJlZ2lzdGVyIGludAlpZGVsdGE7CisJCXJlZ2lzdGVyIGludAlsZWFwZGF5czsKKworCQl0ZGVsdGEgPSB0ZGF5cyAvIERBWVNQRVJMWUVBUjsKKwkJaWRlbHRhID0gdGRlbHRhOworCQlpZiAodGRlbHRhIC0gaWRlbHRhID49IDEgfHwgaWRlbHRhIC0gdGRlbHRhID49IDEpCisJCQlyZXR1cm4gTlVMTDsKKwkJaWYgKGlkZWx0YSA9PSAwKQorCQkJaWRlbHRhID0gKHRkYXlzIDwgMCkgPyAtMSA6IDE7CisJCW5ld3kgPSB5OworCQlpZiAoaW5jcmVtZW50X292ZXJmbG93KCZuZXd5LCBpZGVsdGEpKQorCQkJcmV0dXJuIE5VTEw7CisJCWxlYXBkYXlzID0gbGVhcHNfdGhydV9lbmRfb2YobmV3eSAtIDEpIC0KKwkJCWxlYXBzX3RocnVfZW5kX29mKHkgLSAxKTsKKwkJdGRheXMgLT0gKCh0aW1lX3QpIG5ld3kgLSB5KSAqIERBWVNQRVJOWUVBUjsKKwkJdGRheXMgLT0gbGVhcGRheXM7CisJCXkgPSBuZXd5OworCX0KKwl7CisJCXJlZ2lzdGVyIGxvbmcJc2Vjb25kczsKKworCQlzZWNvbmRzID0gdGRheXMgKiBTRUNTUEVSREFZICsgMC41OworCQl0ZGF5cyA9IHNlY29uZHMgLyBTRUNTUEVSREFZOworCQlyZW0gKz0gc2Vjb25kcyAtIHRkYXlzICogU0VDU1BFUkRBWTsKKwl9CisJLyoKKwkqKiBHaXZlbiB0aGUgcmFuZ2UsIHdlIGNhbiBub3cgZmVhcmxlc3NseSBjYXN0Li4uCisJKi8KKwlpZGF5cyA9IHRkYXlzOworCXJlbSArPSBvZmZzZXQgLSBjb3JyOworCXdoaWxlIChyZW0gPCAwKSB7CisJCXJlbSArPSBTRUNTUEVSREFZOworCQktLWlkYXlzOworCX0KKwl3aGlsZSAocmVtID49IFNFQ1NQRVJEQVkpIHsKKwkJcmVtIC09IFNFQ1NQRVJEQVk7CisJCSsraWRheXM7CisJfQorCXdoaWxlIChpZGF5cyA8IDApIHsKKwkJaWYgKGluY3JlbWVudF9vdmVyZmxvdygmeSwgLTEpKQorCQkJcmV0dXJuIE5VTEw7CisJCWlkYXlzICs9IHllYXJfbGVuZ3Roc1tpc2xlYXAoeSldOworCX0KKwl3aGlsZSAoaWRheXMgPj0geWVhcl9sZW5ndGhzW2lzbGVhcCh5KV0pIHsKKwkJaWRheXMgLT0geWVhcl9sZW5ndGhzW2lzbGVhcCh5KV07CisJCWlmIChpbmNyZW1lbnRfb3ZlcmZsb3coJnksIDEpKQorCQkJcmV0dXJuIE5VTEw7CisJfQorCXRtcC0+dG1feWVhciA9IHk7CisJaWYgKGluY3JlbWVudF9vdmVyZmxvdygmdG1wLT50bV95ZWFyLCAtVE1fWUVBUl9CQVNFKSkKKwkJcmV0dXJuIE5VTEw7CisJdG1wLT50bV95ZGF5ID0gaWRheXM7CisJLyoKKwkqKiBUaGUgImV4dHJhIiBtb2RzIGJlbG93IGF2b2lkIG92ZXJmbG93IHByb2JsZW1zLgorCSovCisJdG1wLT50bV93ZGF5ID0gRVBPQ0hfV0RBWSArCisJCSgoeSAtIEVQT0NIX1lFQVIpICUgREFZU1BFUldFRUspICoKKwkJKERBWVNQRVJOWUVBUiAlIERBWVNQRVJXRUVLKSArCisJCWxlYXBzX3RocnVfZW5kX29mKHkgLSAxKSAtCisJCWxlYXBzX3RocnVfZW5kX29mKEVQT0NIX1lFQVIgLSAxKSArCisJCWlkYXlzOworCXRtcC0+dG1fd2RheSAlPSBEQVlTUEVSV0VFSzsKKwlpZiAodG1wLT50bV93ZGF5IDwgMCkKKwkJdG1wLT50bV93ZGF5ICs9IERBWVNQRVJXRUVLOworCXRtcC0+dG1faG91ciA9IChpbnQpIChyZW0gLyBTRUNTUEVSSE9VUik7CisJcmVtICU9IFNFQ1NQRVJIT1VSOworCXRtcC0+dG1fbWluID0gKGludCkgKHJlbSAvIFNFQ1NQRVJNSU4pOworCS8qCisJKiogQSBwb3NpdGl2ZSBsZWFwIHNlY29uZCByZXF1aXJlcyBhIHNwZWNpYWwKKwkqKiByZXByZXNlbnRhdGlvbi4gVGhpcyB1c2VzICIuLi4gPz86NTk6NjAiIGV0IHNlcS4KKwkqLworCXRtcC0+dG1fc2VjID0gKGludCkgKHJlbSAlIFNFQ1NQRVJNSU4pICsgaGl0OworCWlwID0gbW9uX2xlbmd0aHNbaXNsZWFwKHkpXTsKKwlmb3IgKHRtcC0+dG1fbW9uID0gMDsgaWRheXMgPj0gaXBbdG1wLT50bV9tb25dOyArKyh0bXAtPnRtX21vbikpCisJCWlkYXlzIC09IGlwW3RtcC0+dG1fbW9uXTsKKwl0bXAtPnRtX21kYXkgPSAoaW50KSAoaWRheXMgKyAxKTsKKwl0bXAtPnRtX2lzZHN0ID0gMDsKKyNpZmRlZiBUTV9HTVRPRkYKKwl0bXAtPlRNX0dNVE9GRiA9IG9mZnNldDsKKyNlbmRpZiAvKiBkZWZpbmVkIFRNX0dNVE9GRiAqLworCXJldHVybiB0bXA7Cit9CisKK2NoYXIgKgorY3RpbWUodGltZXApCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK3sKKy8qCisqKiBTZWN0aW9uIDQuMTIuMy4yIG9mIFgzLjE1OS0xOTg5IHJlcXVpcmVzIHRoYXQKKyoqCVRoZSBjdGltZSBmdW5jdGlvbiBjb252ZXJ0cyB0aGUgY2FsZW5kYXIgdGltZSBwb2ludGVkIHRvIGJ5IHRpbWVyCisqKgl0byBsb2NhbCB0aW1lIGluIHRoZSBmb3JtIG9mIGEgc3RyaW5nLiBJdCBpcyBlcXVpdmFsZW50IHRvCisqKgkJYXNjdGltZShsb2NhbHRpbWUodGltZXIpKQorKi8KKwlyZXR1cm4gYXNjdGltZShsb2NhbHRpbWUodGltZXApKTsKK30KKworY2hhciAqCitjdGltZV9yKHRpbWVwLCBidWYpCitjb25zdCB0aW1lX3QgKiBjb25zdAl0aW1lcDsKK2NoYXIgKgkJCWJ1ZjsKK3sKKwlzdHJ1Y3QgdG0JbXl0bTsKKworCXJldHVybiBhc2N0aW1lX3IobG9jYWx0aW1lX3IodGltZXAsICZteXRtKSwgYnVmKTsKK30KKworLyoKKyoqIEFkYXB0ZWQgZnJvbSBjb2RlIHByb3ZpZGVkIGJ5IFJvYmVydCBFbHosIHdobyB3cml0ZXM6CisqKglUaGUgImJlc3QiIHdheSB0byBkbyBta3RpbWUgSSB0aGluayBpcyBiYXNlZCBvbiBhbiBpZGVhIG9mIEJvYgorKioJS3JpZGxlJ3MgKHNvIGl0cyBzYWlkLi4uKSBmcm9tIGEgbG9uZyB0aW1lIGFnby4KKyoqCUl0IGRvZXMgYSBiaW5hcnkgc2VhcmNoIG9mIHRoZSB0aW1lX3Qgc3BhY2UuIFNpbmNlIHRpbWVfdCdzIGFyZQorKioJanVzdCAzMiBiaXRzLCBpdHMgYSBtYXggb2YgMzIgaXRlcmF0aW9ucyAoZXZlbiBhdCA2NCBiaXRzIGl0CisqKgl3b3VsZCBzdGlsbCBiZSB2ZXJ5IHJlYXNvbmFibGUpLgorKi8KKworI2lmbmRlZiBXUk9ORworI2RlZmluZSBXUk9ORwkoLTEpCisjZW5kaWYgLyogIWRlZmluZWQgV1JPTkcgKi8KKworLyoKKyoqIFNpbXBsaWZpZWQgbm9ybWFsaXplIGxvZ2ljIGNvdXJ0ZXN5IFBhdWwgRWdnZXJ0LgorKi8KKworc3RhdGljIGludAoraW5jcmVtZW50X292ZXJmbG93KG51bWJlciwgZGVsdGEpCitpbnQgKgludW1iZXI7CitpbnQJZGVsdGE7Cit7CisJaW50CW51bWJlcjA7CisKKwludW1iZXIwID0gKm51bWJlcjsKKwkqbnVtYmVyICs9IGRlbHRhOworCXJldHVybiAoKm51bWJlciA8IG51bWJlcjApICE9IChkZWx0YSA8IDApOworfQorCitzdGF0aWMgaW50Citsb25nX2luY3JlbWVudF9vdmVyZmxvdyhudW1iZXIsIGRlbHRhKQorbG9uZyAqCW51bWJlcjsKK2ludAlkZWx0YTsKK3sKKwlsb25nCW51bWJlcjA7CisKKwludW1iZXIwID0gKm51bWJlcjsKKwkqbnVtYmVyICs9IGRlbHRhOworCXJldHVybiAoKm51bWJlciA8IG51bWJlcjApICE9IChkZWx0YSA8IDApOworfQorCitzdGF0aWMgaW50Citub3JtYWxpemVfb3ZlcmZsb3codGVuc3B0ciwgdW5pdHNwdHIsIGJhc2UpCitpbnQgKiBjb25zdAl0ZW5zcHRyOworaW50ICogY29uc3QJdW5pdHNwdHI7Citjb25zdCBpbnQJYmFzZTsKK3sKKwlyZWdpc3RlciBpbnQJdGVuc2RlbHRhOworCisJdGVuc2RlbHRhID0gKCp1bml0c3B0ciA+PSAwKSA/CisJCSgqdW5pdHNwdHIgLyBiYXNlKSA6CisJCSgtMSAtICgtMSAtICp1bml0c3B0cikgLyBiYXNlKTsKKwkqdW5pdHNwdHIgLT0gdGVuc2RlbHRhICogYmFzZTsKKwlyZXR1cm4gaW5jcmVtZW50X292ZXJmbG93KHRlbnNwdHIsIHRlbnNkZWx0YSk7Cit9CisKK3N0YXRpYyBpbnQKK2xvbmdfbm9ybWFsaXplX292ZXJmbG93KHRlbnNwdHIsIHVuaXRzcHRyLCBiYXNlKQorbG9uZyAqIGNvbnN0CXRlbnNwdHI7CitpbnQgKiBjb25zdAl1bml0c3B0cjsKK2NvbnN0IGludAliYXNlOworeworCXJlZ2lzdGVyIGludAl0ZW5zZGVsdGE7CisKKwl0ZW5zZGVsdGEgPSAoKnVuaXRzcHRyID49IDApID8KKwkJKCp1bml0c3B0ciAvIGJhc2UpIDoKKwkJKC0xIC0gKC0xIC0gKnVuaXRzcHRyKSAvIGJhc2UpOworCSp1bml0c3B0ciAtPSB0ZW5zZGVsdGEgKiBiYXNlOworCXJldHVybiBsb25nX2luY3JlbWVudF9vdmVyZmxvdyh0ZW5zcHRyLCB0ZW5zZGVsdGEpOworfQorCitzdGF0aWMgaW50Cit0bWNvbXAoYXRtcCwgYnRtcCkKK3JlZ2lzdGVyIGNvbnN0IHN0cnVjdCB0bSAqIGNvbnN0IGF0bXA7CityZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG0gKiBjb25zdCBidG1wOworeworCXJlZ2lzdGVyIGludAlyZXN1bHQ7CisKKwlpZiAoKHJlc3VsdCA9IChhdG1wLT50bV95ZWFyIC0gYnRtcC0+dG1feWVhcikpID09IDAgJiYKKwkJKHJlc3VsdCA9IChhdG1wLT50bV9tb24gLSBidG1wLT50bV9tb24pKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1fbWRheSAtIGJ0bXAtPnRtX21kYXkpKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1faG91ciAtIGJ0bXAtPnRtX2hvdXIpKSA9PSAwICYmCisJCShyZXN1bHQgPSAoYXRtcC0+dG1fbWluIC0gYnRtcC0+dG1fbWluKSkgPT0gMCkKKwkJCXJlc3VsdCA9IGF0bXAtPnRtX3NlYyAtIGJ0bXAtPnRtX3NlYzsKKwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdGltZV90Cit0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBkb19ub3JtX3NlY3MpCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7CitzdHJ1Y3QgdG0gKiAoKiBjb25zdAlmdW5jcCkgUCgoY29uc3QgdGltZV90KiwgbG9uZywgc3RydWN0IHRtKikpOworY29uc3QgbG9uZwkJb2Zmc2V0OworaW50ICogY29uc3QJCW9rYXlwOworY29uc3QgaW50CQlkb19ub3JtX3NlY3M7Cit7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICoJc3A7CisJcmVnaXN0ZXIgaW50CQkJZGlyOworCXJlZ2lzdGVyIGludAkJCWksIGo7CisJcmVnaXN0ZXIgaW50CQkJc2F2ZWRfc2Vjb25kczsKKwlyZWdpc3RlciBsb25nCQkJbGk7CisJcmVnaXN0ZXIgdGltZV90CQkJbG87CisJcmVnaXN0ZXIgdGltZV90CQkJaGk7CisJbG9uZwkJCQl5OworCXRpbWVfdAkJCQluZXd0OworCXRpbWVfdAkJCQl0OworCXN0cnVjdCB0bQkJCXlvdXJ0bSwgbXl0bTsKKworCSpva2F5cCA9IEZBTFNFOworCXlvdXJ0bSA9ICp0bXA7CisJaWYgKGRvX25vcm1fc2VjcykgeworCQlpZiAobm9ybWFsaXplX292ZXJmbG93KCZ5b3VydG0udG1fbWluLCAmeW91cnRtLnRtX3NlYywKKwkJCVNFQ1NQRVJNSU4pKQorCQkJCXJldHVybiBXUk9ORzsKKwl9CisJaWYgKG5vcm1hbGl6ZV9vdmVyZmxvdygmeW91cnRtLnRtX2hvdXIsICZ5b3VydG0udG1fbWluLCBNSU5TUEVSSE9VUikpCisJCXJldHVybiBXUk9ORzsKKwlpZiAobm9ybWFsaXplX292ZXJmbG93KCZ5b3VydG0udG1fbWRheSwgJnlvdXJ0bS50bV9ob3VyLCBIT1VSU1BFUkRBWSkpCisJCXJldHVybiBXUk9ORzsKKwl5ID0geW91cnRtLnRtX3llYXI7CisJaWYgKGxvbmdfbm9ybWFsaXplX292ZXJmbG93KCZ5LCAmeW91cnRtLnRtX21vbiwgTU9OU1BFUllFQVIpKQorCQlyZXR1cm4gV1JPTkc7CisJLyoKKwkqKiBUdXJuIHkgaW50byBhbiBhY3R1YWwgeWVhciBudW1iZXIgZm9yIG5vdy4KKwkqKiBJdCBpcyBjb252ZXJ0ZWQgYmFjayB0byBhbiBvZmZzZXQgZnJvbSBUTV9ZRUFSX0JBU0UgbGF0ZXIuCisJKi8KKwlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIFRNX1lFQVJfQkFTRSkpCisJCXJldHVybiBXUk9ORzsKKwl3aGlsZSAoeW91cnRtLnRtX21kYXkgPD0gMCkgeworCQlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIC0xKSkKKwkJCXJldHVybiBXUk9ORzsKKwkJbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKKwkJeW91cnRtLnRtX21kYXkgKz0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOworCX0KKwl3aGlsZSAoeW91cnRtLnRtX21kYXkgPiBEQVlTUEVSTFlFQVIpIHsKKwkJbGkgPSB5ICsgKDEgPCB5b3VydG0udG1fbW9uKTsKKwkJeW91cnRtLnRtX21kYXkgLT0geWVhcl9sZW5ndGhzW2lzbGVhcChsaSldOworCQlpZiAobG9uZ19pbmNyZW1lbnRfb3ZlcmZsb3coJnksIDEpKQorCQkJcmV0dXJuIFdST05HOworCX0KKwlmb3IgKCA7IDsgKSB7CisJCWkgPSBtb25fbGVuZ3Roc1tpc2xlYXAoeSldW3lvdXJ0bS50bV9tb25dOworCQlpZiAoeW91cnRtLnRtX21kYXkgPD0gaSkKKwkJCWJyZWFrOworCQl5b3VydG0udG1fbWRheSAtPSBpOworCQlpZiAoKyt5b3VydG0udG1fbW9uID49IE1PTlNQRVJZRUFSKSB7CisJCQl5b3VydG0udG1fbW9uID0gMDsKKwkJCWlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgMSkpCisJCQkJcmV0dXJuIFdST05HOworCQl9CisJfQorCWlmIChsb25nX2luY3JlbWVudF9vdmVyZmxvdygmeSwgLVRNX1lFQVJfQkFTRSkpCisJCXJldHVybiBXUk9ORzsKKwl5b3VydG0udG1feWVhciA9IHk7CisJaWYgKHlvdXJ0bS50bV95ZWFyICE9IHkpCisJCXJldHVybiBXUk9ORzsKKwlpZiAoeW91cnRtLnRtX3NlYyA+PSAwICYmIHlvdXJ0bS50bV9zZWMgPCBTRUNTUEVSTUlOKQorCQlzYXZlZF9zZWNvbmRzID0gMDsKKwllbHNlIGlmICh5ICsgVE1fWUVBUl9CQVNFIDwgRVBPQ0hfWUVBUikgeworCQkvKgorCQkqKiBXZSBjYW4ndCBzZXQgdG1fc2VjIHRvIDAsIGJlY2F1c2UgdGhhdCBtaWdodCBwdXNoIHRoZQorCQkqKiB0aW1lIGJlbG93IHRoZSBtaW5pbXVtIHJlcHJlc2VudGFibGUgdGltZS4KKwkJKiogU2V0IHRtX3NlYyB0byA1OSBpbnN0ZWFkLgorCQkqKiBUaGlzIGFzc3VtZXMgdGhhdCB0aGUgbWluaW11bSByZXByZXNlbnRhYmxlIHRpbWUgaXMKKwkJKiogbm90IGluIHRoZSBzYW1lIG1pbnV0ZSB0aGF0IGEgbGVhcCBzZWNvbmQgd2FzIGRlbGV0ZWQgZnJvbSwKKwkJKiogd2hpY2ggaXMgYSBzYWZlciBhc3N1bXB0aW9uIHRoYW4gdXNpbmcgNTggd291bGQgYmUuCisJCSovCisJCWlmIChpbmNyZW1lbnRfb3ZlcmZsb3coJnlvdXJ0bS50bV9zZWMsIDEgLSBTRUNTUEVSTUlOKSkKKwkJCXJldHVybiBXUk9ORzsKKwkJc2F2ZWRfc2Vjb25kcyA9IHlvdXJ0bS50bV9zZWM7CisJCXlvdXJ0bS50bV9zZWMgPSBTRUNTUEVSTUlOIC0gMTsKKwl9IGVsc2UgeworCQlzYXZlZF9zZWNvbmRzID0geW91cnRtLnRtX3NlYzsKKwkJeW91cnRtLnRtX3NlYyA9IDA7CisJfQorCS8qCisJKiogRG8gYSBiaW5hcnkgc2VhcmNoICh0aGlzIHdvcmtzIHdoYXRldmVyIHRpbWVfdCdzIHR5cGUgaXMpLgorCSovCisJaWYgKCFUWVBFX1NJR05FRCh0aW1lX3QpKSB7CisJCWxvID0gMDsKKwkJaGkgPSBsbyAtIDE7CisJfSBlbHNlIGlmICghVFlQRV9JTlRFR1JBTCh0aW1lX3QpKSB7CisJCWlmIChzaXplb2YodGltZV90KSA+IHNpemVvZihmbG9hdCkpCisJCQloaSA9ICh0aW1lX3QpIERCTF9NQVg7CisJCWVsc2UJaGkgPSAodGltZV90KSBGTFRfTUFYOworCQlsbyA9IC1oaTsKKwl9IGVsc2UgeworCQlsbyA9IDE7CisJCWZvciAoaSA9IDA7IGkgPCAoaW50KSBUWVBFX0JJVCh0aW1lX3QpIC0gMTsgKytpKQorCQkJbG8gKj0gMjsKKwkJaGkgPSAtKGxvICsgMSk7CisJfQorCWZvciAoIDsgOyApIHsKKwkJdCA9IGxvIC8gMiArIGhpIC8gMjsKKwkJaWYgKHQgPCBsbykKKwkJCXQgPSBsbzsKKwkJZWxzZSBpZiAodCA+IGhpKQorCQkJdCA9IGhpOworCQlpZiAoKCpmdW5jcCkoJnQsIG9mZnNldCwgJm15dG0pID09IE5VTEwpIHsKKwkJCS8qCisJCQkqKiBBc3N1bWUgdGhhdCB0IGlzIHRvbyBleHRyZW1lIHRvIGJlIHJlcHJlc2VudGVkIGluCisJCQkqKiBhIHN0cnVjdCB0bTsgYXJyYW5nZSB0aGluZ3Mgc28gdGhhdCBpdCBpcyBsZXNzCisJCQkqKiBleHRyZW1lIG9uIHRoZSBuZXh0IHBhc3MuCisJCQkqLworCQkJZGlyID0gKHQgPiAwKSA/IDEgOiAtMTsKKwkJfSBlbHNlCWRpciA9IHRtY29tcCgmbXl0bSwgJnlvdXJ0bSk7CisJCWlmIChkaXIgIT0gMCkgeworCQkJaWYgKHQgPT0gbG8pIHsKKwkJCQkrK3Q7CisJCQkJaWYgKHQgPD0gbG8pCisJCQkJCXJldHVybiBXUk9ORzsKKwkJCQkrK2xvOworCQkJfSBlbHNlIGlmICh0ID09IGhpKSB7CisJCQkJLS10OworCQkJCWlmICh0ID49IGhpKQorCQkJCQlyZXR1cm4gV1JPTkc7CisJCQkJLS1oaTsKKwkJCX0KKwkJCWlmIChsbyA+IGhpKQorCQkJCXJldHVybiBXUk9ORzsKKwkJCWlmIChkaXIgPiAwKQorCQkJCWhpID0gdDsKKwkJCWVsc2UJbG8gPSB0OworCQkJY29udGludWU7CisJCX0KKwkJaWYgKHlvdXJ0bS50bV9pc2RzdCA8IDAgfHwgbXl0bS50bV9pc2RzdCA9PSB5b3VydG0udG1faXNkc3QpCisJCQlicmVhazsKKwkJLyoKKwkJKiogUmlnaHQgdGltZSwgd3JvbmcgdHlwZS4KKwkJKiogSHVudCBmb3IgcmlnaHQgdGltZSwgcmlnaHQgdHlwZS4KKwkJKiogSXQncyBva2F5IHRvIGd1ZXNzIHdyb25nIHNpbmNlIHRoZSBndWVzcworCQkqKiBnZXRzIGNoZWNrZWQuCisJCSovCisJCS8qCisJCSoqIFRoZSAodm9pZCAqKSBjYXN0cyBhcmUgdGhlIGJlbmVmaXQgb2YgU3VuT1MgMy4zIG9uIFN1biAyJ3MuCisJCSovCisJCXNwID0gKGNvbnN0IHN0cnVjdCBzdGF0ZSAqKQorCQkJKCgodm9pZCAqKSBmdW5jcCA9PSAodm9pZCAqKSBsb2NhbHN1YikgPworCQkJbGNscHRyIDogZ210cHRyKTsKKyNpZmRlZiBBTExfU1RBVEUKKwkJaWYgKHNwID09IE5VTEwpCisJCQlyZXR1cm4gV1JPTkc7CisjZW5kaWYgLyogZGVmaW5lZCBBTExfU1RBVEUgKi8KKwkJZm9yIChpID0gc3AtPnR5cGVjbnQgLSAxOyBpID49IDA7IC0taSkgeworCQkJaWYgKHNwLT50dGlzW2ldLnR0X2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKKwkJCQljb250aW51ZTsKKwkJCWZvciAoaiA9IHNwLT50eXBlY250IC0gMTsgaiA+PSAwOyAtLWopIHsKKwkJCQlpZiAoc3AtPnR0aXNbal0udHRfaXNkc3QgPT0geW91cnRtLnRtX2lzZHN0KQorCQkJCQljb250aW51ZTsKKwkJCQluZXd0ID0gdCArIHNwLT50dGlzW2pdLnR0X2dtdG9mZiAtCisJCQkJCXNwLT50dGlzW2ldLnR0X2dtdG9mZjsKKwkJCQlpZiAoKCpmdW5jcCkoJm5ld3QsIG9mZnNldCwgJm15dG0pID09IE5VTEwpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmICh0bWNvbXAoJm15dG0sICZ5b3VydG0pICE9IDApCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChteXRtLnRtX2lzZHN0ICE9IHlvdXJ0bS50bV9pc2RzdCkKKwkJCQkJY29udGludWU7CisJCQkJLyoKKwkJCQkqKiBXZSBoYXZlIGEgbWF0Y2guCisJCQkJKi8KKwkJCQl0ID0gbmV3dDsKKwkJCQlnb3RvIGxhYmVsOworCQkJfQorCQl9CisJCXJldHVybiBXUk9ORzsKKwl9CitsYWJlbDoKKwluZXd0ID0gdCArIHNhdmVkX3NlY29uZHM7CisJaWYgKChuZXd0IDwgdCkgIT0gKHNhdmVkX3NlY29uZHMgPCAwKSkKKwkJcmV0dXJuIFdST05HOworCXQgPSBuZXd0OworCWlmICgoKmZ1bmNwKSgmdCwgb2Zmc2V0LCB0bXApKQorCQkqb2theXAgPSBUUlVFOworCXJldHVybiB0OworfQorCitzdGF0aWMgdGltZV90Cit0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwKQorc3RydWN0IHRtICogY29uc3QJdG1wOworc3RydWN0IHRtICogKCogY29uc3QJZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCosIGxvbmcsIHN0cnVjdCB0bSopKTsKK2NvbnN0IGxvbmcJCW9mZnNldDsKK2ludCAqIGNvbnN0CQlva2F5cDsKK3sKKwl0aW1lX3QJdDsKKworCS8qCisJKiogRmlyc3QgdHJ5IHdpdGhvdXQgbm9ybWFsaXphdGlvbiBvZiBzZWNvbmRzCisJKiogKGluIGNhc2UgdG1fc2VjIGNvbnRhaW5zIGEgdmFsdWUgYXNzb2NpYXRlZCB3aXRoIGEgbGVhcCBzZWNvbmQpLgorCSoqIElmIHRoYXQgZmFpbHMsIHRyeSB3aXRoIG5vcm1hbGl6YXRpb24gb2Ygc2Vjb25kcy4KKwkqLworCXQgPSB0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBGQUxTRSk7CisJcmV0dXJuICpva2F5cCA/IHQgOiB0aW1lMnN1Yih0bXAsIGZ1bmNwLCBvZmZzZXQsIG9rYXlwLCBUUlVFKTsKK30KKworc3RhdGljIHRpbWVfdAordGltZTEodG1wLCBmdW5jcCwgb2Zmc2V0KQorc3RydWN0IHRtICogY29uc3QJdG1wOworc3RydWN0IHRtICogKCogY29uc3QJZnVuY3ApIFAoKGNvbnN0IHRpbWVfdCAqLCBsb25nLCBzdHJ1Y3QgdG0gKikpOworY29uc3QgbG9uZwkJb2Zmc2V0OworeworCXJlZ2lzdGVyIHRpbWVfdAkJCXQ7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHN0YXRlICoJc3A7CisJcmVnaXN0ZXIgaW50CQkJc2FtZWksIG90aGVyaTsKKwlyZWdpc3RlciBpbnQJCQlzYW1laW5kLCBvdGhlcmluZDsKKwlyZWdpc3RlciBpbnQJCQlpOworCXJlZ2lzdGVyIGludAkJCW5zZWVuOworCWludAkJCQlzZWVuW1RaX01BWF9UWVBFU107CisJaW50CQkJCXR5cGVzW1RaX01BWF9UWVBFU107CisJaW50CQkJCW9rYXk7CisKKwlpZiAodG1wLT50bV9pc2RzdCA+IDEpCisJCXRtcC0+dG1faXNkc3QgPSAxOworCXQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKyNpZmRlZiBQQ1RTCisJLyoKKwkqKiBQQ1RTIGNvZGUgY291cnRlc3kgR3JhbnQgU3VsbGl2YW4uCisJKi8KKwlpZiAob2theSkKKwkJcmV0dXJuIHQ7CisJaWYgKHRtcC0+dG1faXNkc3QgPCAwKQorCQl0bXAtPnRtX2lzZHN0ID0gMDsJLyogcmVzZXQgdG8gc3RkIGFuZCB0cnkgYWdhaW4gKi8KKyNlbmRpZiAvKiBkZWZpbmVkIFBDVFMgKi8KKyNpZm5kZWYgUENUUworCWlmIChva2F5IHx8IHRtcC0+dG1faXNkc3QgPCAwKQorCQlyZXR1cm4gdDsKKyNlbmRpZiAvKiAhZGVmaW5lZCBQQ1RTICovCisJLyoKKwkqKiBXZSdyZSBzdXBwb3NlZCB0byBhc3N1bWUgdGhhdCBzb21lYm9keSB0b29rIGEgdGltZSBvZiBvbmUgdHlwZQorCSoqIGFuZCBkaWQgc29tZSBtYXRoIG9uIGl0IHRoYXQgeWllbGRlZCBhICJzdHJ1Y3QgdG0iIHRoYXQncyBiYWQuCisJKiogV2UgdHJ5IHRvIGRpdmluZSB0aGUgdHlwZSB0aGV5IHN0YXJ0ZWQgZnJvbSBhbmQgYWRqdXN0IHRvIHRoZQorCSoqIHR5cGUgdGhleSBuZWVkLgorCSovCisJLyoKKwkqKiBUaGUgKHZvaWQgKikgY2FzdHMgYXJlIHRoZSBiZW5lZml0IG9mIFN1bk9TIDMuMyBvbiBTdW4gMidzLgorCSovCisJc3AgPSAoY29uc3Qgc3RydWN0IHN0YXRlICopICgoKHZvaWQgKikgZnVuY3AgPT0gKHZvaWQgKikgbG9jYWxzdWIpID8KKwkJbGNscHRyIDogZ210cHRyKTsKKyNpZmRlZiBBTExfU1RBVEUKKwlpZiAoc3AgPT0gTlVMTCkKKwkJcmV0dXJuIFdST05HOworI2VuZGlmIC8qIGRlZmluZWQgQUxMX1NUQVRFICovCisJZm9yIChpID0gMDsgaSA8IHNwLT50eXBlY250OyArK2kpCisJCXNlZW5baV0gPSBGQUxTRTsKKwluc2VlbiA9IDA7CisJZm9yIChpID0gc3AtPnRpbWVjbnQgLSAxOyBpID49IDA7IC0taSkKKwkJaWYgKCFzZWVuW3NwLT50eXBlc1tpXV0pIHsKKwkJCXNlZW5bc3AtPnR5cGVzW2ldXSA9IFRSVUU7CisJCQl0eXBlc1tuc2VlbisrXSA9IHNwLT50eXBlc1tpXTsKKwkJfQorCWZvciAoc2FtZWluZCA9IDA7IHNhbWVpbmQgPCBuc2VlbjsgKytzYW1laW5kKSB7CisJCXNhbWVpID0gdHlwZXNbc2FtZWluZF07CisJCWlmIChzcC0+dHRpc1tzYW1laV0udHRfaXNkc3QgIT0gdG1wLT50bV9pc2RzdCkKKwkJCWNvbnRpbnVlOworCQlmb3IgKG90aGVyaW5kID0gMDsgb3RoZXJpbmQgPCBuc2VlbjsgKytvdGhlcmluZCkgeworCQkJb3RoZXJpID0gdHlwZXNbb3RoZXJpbmRdOworCQkJaWYgKHNwLT50dGlzW290aGVyaV0udHRfaXNkc3QgPT0gdG1wLT50bV9pc2RzdCkKKwkJCQljb250aW51ZTsKKwkJCXRtcC0+dG1fc2VjICs9IHNwLT50dGlzW290aGVyaV0udHRfZ210b2ZmIC0KKwkJCQkJc3AtPnR0aXNbc2FtZWldLnR0X2dtdG9mZjsKKwkJCXRtcC0+dG1faXNkc3QgPSAhdG1wLT50bV9pc2RzdDsKKwkJCXQgPSB0aW1lMih0bXAsIGZ1bmNwLCBvZmZzZXQsICZva2F5KTsKKwkJCWlmIChva2F5KQorCQkJCXJldHVybiB0OworCQkJdG1wLT50bV9zZWMgLT0gc3AtPnR0aXNbb3RoZXJpXS50dF9nbXRvZmYgLQorCQkJCQlzcC0+dHRpc1tzYW1laV0udHRfZ210b2ZmOworCQkJdG1wLT50bV9pc2RzdCA9ICF0bXAtPnRtX2lzZHN0OworCQl9CisJfQorCXJldHVybiBXUk9ORzsKK30KKwordGltZV90Citta3RpbWUodG1wKQorc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXR6c2V0KCk7CisJcmV0dXJuIHRpbWUxKHRtcCwgbG9jYWxzdWIsIDBMKTsKK30KKworI2lmZGVmIFNURF9JTlNQSVJFRAorCit0aW1lX3QKK3RpbWVsb2NhbCh0bXApCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJdG1wLT50bV9pc2RzdCA9IC0xOwkvKiBpbiBjYXNlIGl0IHdhc24ndCBpbml0aWFsaXplZCAqLworCXJldHVybiBta3RpbWUodG1wKTsKK30KKwordGltZV90Cit0aW1lZ20odG1wKQorc3RydWN0IHRtICogY29uc3QJdG1wOworeworCXRtcC0+dG1faXNkc3QgPSAwOworCXJldHVybiB0aW1lMSh0bXAsIGdtdHN1YiwgMEwpOworfQorCit0aW1lX3QKK3RpbWVvZmYodG1wLCBvZmZzZXQpCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Citjb25zdCBsb25nCQlvZmZzZXQ7Cit7CisJdG1wLT50bV9pc2RzdCA9IDA7CisJcmV0dXJuIHRpbWUxKHRtcCwgZ210c3ViLCBvZmZzZXQpOworfQorCisjZW5kaWYgLyogZGVmaW5lZCBTVERfSU5TUElSRUQgKi8KKworI2lmZGVmIENNVUNTCisKKy8qCisqKiBUaGUgZm9sbG93aW5nIGlzIHN1cHBsaWVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGgKKyoqIHByZXZpb3VzIHZlcnNpb25zIG9mIHRoZSBDTVVDUyBydW50aW1lIGxpYnJhcnkuCisqLworCitsb25nCitndGltZSh0bXApCitzdHJ1Y3QgdG0gKiBjb25zdAl0bXA7Cit7CisJY29uc3QgdGltZV90CXQgPSBta3RpbWUodG1wKTsKKworCWlmICh0ID09IFdST05HKQorCQlyZXR1cm4gLTE7CisJcmV0dXJuIHQ7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIENNVUNTICovCisKKy8qCisqKiBYWFgtLWlzIHRoZSBiZWxvdyB0aGUgcmlnaHQgd2F5IHRvIGNvbmRpdGlvbmFsaXplPz8KKyovCisKKyNpZmRlZiBTVERfSU5TUElSRUQKKworLyoKKyoqIElFRUUgU3RkIDEwMDMuMS0xOTg4IChQT1NJWCkgbGVnaXNsYXRlcyB0aGF0IDUzNjQ1NzU5OQorKiogc2hhbGwgY29ycmVzcG9uZCB0byAiV2VkIERlYyAzMSAyMzo1OTo1OSBVVEMgMTk4NiIsIHdoaWNoCisqKiBpcyBub3QgdGhlIGNhc2UgaWYgd2UgYXJlIGFjY291bnRpbmcgZm9yIGxlYXAgc2Vjb25kcy4KKyoqIFNvLCB3ZSBwcm92aWRlIHRoZSBmb2xsb3dpbmcgY29udmVyc2lvbiByb3V0aW5lcyBmb3IgdXNlCisqKiB3aGVuIGV4Y2hhbmdpbmcgdGltZXN0YW1wcyB3aXRoIFBPU0lYIGNvbmZvcm1pbmcgc3lzdGVtcy4KKyovCisKK3N0YXRpYyBsb25nCitsZWFwY29ycih0aW1lcCkKK3RpbWVfdCAqCXRpbWVwOworeworCXJlZ2lzdGVyIHN0cnVjdCBzdGF0ZSAqCQlzcDsKKwlyZWdpc3RlciBzdHJ1Y3QgbHNpbmZvICoJbHA7CisJcmVnaXN0ZXIgaW50CQkJaTsKKworCXNwID0gbGNscHRyOworCWkgPSBzcC0+bGVhcGNudDsKKwl3aGlsZSAoLS1pID49IDApIHsKKwkJbHAgPSAmc3AtPmxzaXNbaV07CisJCWlmICgqdGltZXAgPj0gbHAtPmxzX3RyYW5zKQorCQkJcmV0dXJuIGxwLT5sc19jb3JyOworCX0KKwlyZXR1cm4gMDsKK30KKwordGltZV90Cit0aW1lMnBvc2l4KHQpCit0aW1lX3QJdDsKK3sKKwl0enNldCgpOworCXJldHVybiB0IC0gbGVhcGNvcnIoJnQpOworfQorCit0aW1lX3QKK3Bvc2l4MnRpbWUodCkKK3RpbWVfdAl0OworeworCXRpbWVfdAl4OworCXRpbWVfdAl5OworCisJdHpzZXQoKTsKKwkvKgorCSoqIEZvciBhIHBvc2l0aXZlIGxlYXAgc2Vjb25kIGhpdCwgdGhlIHJlc3VsdAorCSoqIGlzIG5vdCB1bmlxdWUuIEZvciBhIG5lZ2F0aXZlIGxlYXAgc2Vjb25kCisJKiogaGl0LCB0aGUgY29ycmVzcG9uZGluZyB0aW1lIGRvZXNuJ3QgZXhpc3QsCisJKiogc28gd2UgcmV0dXJuIGFuIGFkamFjZW50IHNlY29uZC4KKwkqLworCXggPSB0ICsgbGVhcGNvcnIoJnQpOworCXkgPSB4IC0gbGVhcGNvcnIoJngpOworCWlmICh5IDwgdCkgeworCQlkbyB7CisJCQl4Kys7CisJCQl5ID0geCAtIGxlYXBjb3JyKCZ4KTsKKwkJfSB3aGlsZSAoeSA8IHQpOworCQlpZiAodCAhPSB5KQorCQkJcmV0dXJuIHggLSAxOworCX0gZWxzZSBpZiAoeSA+IHQpIHsKKwkJZG8geworCQkJLS14OworCQkJeSA9IHggLSBsZWFwY29ycigmeCk7CisJCX0gd2hpbGUgKHkgPiB0KTsKKwkJaWYgKHQgIT0geSkKKwkJCXJldHVybiB4ICsgMTsKKwl9CisJcmV0dXJuIHg7Cit9CisKKyNlbmRpZiAvKiBkZWZpbmVkIFNURF9JTlNQSVJFRCAqLwpkaWZmIC0tZ2l0IGEvbGliYy90emNvZGUvcHJpdmF0ZS5oIGIvbGliYy90emNvZGUvcHJpdmF0ZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI4MzdiNzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9wcml2YXRlLmgKQEAgLTAsMCArMSwzNjggQEAKKyNpZm5kZWYgUFJJVkFURV9ICisKKyNkZWZpbmUgUFJJVkFURV9ICisKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisvKgorKiogVGhpcyBoZWFkZXIgaXMgZm9yIHVzZSBPTkxZIHdpdGggdGhlIHRpbWUgY29udmVyc2lvbiBjb2RlLgorKiogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLAorKiogb3IgdGhhdCBpdCB3aWxsIHJlbWFpbiBhdCBhbGwuCisqKiBEbyBOT1QgY29weSBpdCB0byBhbnkgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgorKiogVGhhbmsgeW91IQorKi8KKworLyoKKyoqIElECisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJcHJpdmF0ZWhpZFtdID0gIkAoIylwcml2YXRlLmgJOC4yIjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBOT0lEICovCisjZW5kaWYgLyogIWRlZmluZWQgbGludCAqLworCisjZGVmaW5lIEdSQU5EUEFSRU5URUQJIkxvY2FsIHRpbWUgem9uZSBtdXN0IGJlIHNldC0tc2VlIHppYyBtYW51YWwgcGFnZSIKKworLyoKKyoqIERlZmF1bHRzIGZvciBwcmVwcm9jZXNzb3Igc3ltYm9scy4KKyoqIFlvdSBjYW4gb3ZlcnJpZGUgdGhlc2UgaW4geW91ciBDIGNvbXBpbGVyIG9wdGlvbnMsIGUuZy4gYC1ESEFWRV9BREpUSU1FPTAnLgorKi8KKworI2lmbmRlZiBIQVZFX0FESlRJTUUKKyNkZWZpbmUgSEFWRV9BREpUSU1FCQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9BREpUSU1FICovCisKKyNpZm5kZWYgSEFWRV9HRVRURVhUCisjZGVmaW5lIEhBVkVfR0VUVEVYVAkJMAorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfR0VUVEVYVCAqLworCisjaWZuZGVmIEhBVkVfSU5DT01QQVRJQkxFX0NUSU1FX1IKKyNkZWZpbmUgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgkwCisjZW5kaWYgLyogIWRlZmluZWQgSU5DT01QQVRJQkxFX0NUSU1FX1IgKi8KKworI2lmbmRlZiBIQVZFX1NFVFRJTUVPRkRBWQorI2RlZmluZSBIQVZFX1NFVFRJTUVPRkRBWQkzCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TRVRUSU1FT0ZEQVkgKi8KKworI2lmbmRlZiBIQVZFX1NUUkVSUk9SCisjZGVmaW5lIEhBVkVfU1RSRVJST1IJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NUUkVSUk9SICovCisKKyNpZm5kZWYgSEFWRV9TWU1MSU5LCisjZGVmaW5lIEhBVkVfU1lNTElOSwkJMQorI2VuZGlmIC8qICFkZWZpbmVkIEhBVkVfU1lNTElOSyAqLworCisjaWZuZGVmIEhBVkVfU1lTX1NUQVRfSAorI2RlZmluZSBIQVZFX1NZU19TVEFUX0gJCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NZU19TVEFUX0ggKi8KKworI2lmbmRlZiBIQVZFX1NZU19XQUlUX0gKKyNkZWZpbmUgSEFWRV9TWVNfV0FJVF9ICQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9TWVNfV0FJVF9IICovCisKKyNpZm5kZWYgSEFWRV9VTklTVERfSAorI2RlZmluZSBIQVZFX1VOSVNURF9ICQkxCisjZW5kaWYgLyogIWRlZmluZWQgSEFWRV9VTklTVERfSCAqLworCisjaWZuZGVmIEhBVkVfVVRNUFhfSAorI2RlZmluZSBIQVZFX1VUTVBYX0gJCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1VUTVBYX0ggKi8KKworI2lmbmRlZiBMT0NBTEVfSE9NRQorI2RlZmluZSBMT0NBTEVfSE9NRQkJIi91c3IvbGliL2xvY2FsZSIKKyNlbmRpZiAvKiAhZGVmaW5lZCBMT0NBTEVfSE9NRSAqLworCisjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI2RlZmluZSBhc2N0aW1lX3IgX2luY29tcGF0aWJsZV9hc2N0aW1lX3IKKyNkZWZpbmUgY3RpbWVfciBfaW5jb21wYXRpYmxlX2N0aW1lX3IKKyNlbmRpZiAvKiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SICovCisKKy8qCisqKiBOZXN0ZWQgaW5jbHVkZXMKKyovCisKKyNpbmNsdWRlICJzeXMvdHlwZXMuaCIJLyogZm9yIHRpbWVfdCAqLworI2luY2x1ZGUgInN0ZGlvLmgiCisjaW5jbHVkZSAiZXJybm8uaCIKKyNpbmNsdWRlICJzdHJpbmcuaCIKKyNpbmNsdWRlICJsaW1pdHMuaCIJLyogZm9yIENIQVJfQklUIGV0IGFsLiAqLworI2luY2x1ZGUgInRpbWUuaCIKKyNpbmNsdWRlICJzdGRsaWIuaCIKKworI2lmIEhBVkVfR0VUVEVYVAorI2luY2x1ZGUgImxpYmludGwuaCIKKyNlbmRpZiAvKiBIQVZFX0dFVFRFWFQgKi8KKworI2lmIEhBVkVfU1lTX1dBSVRfSAorI2luY2x1ZGUgPHN5cy93YWl0Lmg+CS8qIGZvciBXSUZFWElURUQgYW5kIFdFWElUU1RBVFVTICovCisjZW5kaWYgLyogSEFWRV9TWVNfV0FJVF9IICovCisKKyNpZm5kZWYgV0lGRVhJVEVECisjZGVmaW5lIFdJRkVYSVRFRChzdGF0dXMpCSgoKHN0YXR1cykgJiAweGZmKSA9PSAwKQorI2VuZGlmIC8qICFkZWZpbmVkIFdJRkVYSVRFRCAqLworI2lmbmRlZiBXRVhJVFNUQVRVUworI2RlZmluZSBXRVhJVFNUQVRVUyhzdGF0dXMpCSgoKHN0YXR1cykgPj4gOCkgJiAweGZmKQorI2VuZGlmIC8qICFkZWZpbmVkIFdFWElUU1RBVFVTICovCisKKyNpZiBIQVZFX1VOSVNURF9ICisjaW5jbHVkZSAidW5pc3RkLmgiCS8qIGZvciBGX09LIGFuZCBSX09LICovCisjZW5kaWYgLyogSEFWRV9VTklTVERfSCAqLworCisjaWYgIUhBVkVfVU5JU1REX0gKKyNpZm5kZWYgRl9PSworI2RlZmluZSBGX09LCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBGX09LICovCisjaWZuZGVmIFJfT0sKKyNkZWZpbmUgUl9PSwk0CisjZW5kaWYgLyogIWRlZmluZWQgUl9PSyAqLworI2VuZGlmIC8qICFIQVZFX1VOSVNURF9IICovCisKKy8qIFVubGlrZSA8Y3R5cGUuaD4ncyBpc2RpZ2l0LCB0aGlzIGFsc28gd29ya3MgaWYgYyA8IDAgfCBjID4gVUNIQVJfTUFYLiAqLworI2RlZmluZSBpc19kaWdpdChjKSAoKHVuc2lnbmVkKShjKSAtICcwJyA8PSA5KQorCisvKgorKiogRGVmaW5lIEhBVkVfU1RESU5UX0gncyBkZWZhdWx0IHZhbHVlIGhlcmUsIHJhdGhlciB0aGFuIGF0IHRoZQorKiogc3RhcnQsIHNpbmNlIF9fR0xJQkNfXydzIHZhbHVlIGRlcGVuZHMgb24gcHJldmlvdXNseS1pbmNsdWRlZAorKiogZmlsZXMuCisqKiAoZ2xpYmMgMi4xIGFuZCBsYXRlciBoYXZlIHN0ZGludC5oLCBldmVuIHdpdGggcHJlLUM5OSBjb21waWxlcnMuKQorKi8KKyNpZm5kZWYgSEFWRV9TVERJTlRfSAorI2RlZmluZSBIQVZFX1NURElOVF9IIFwKKwkoMTk5OTAxIDw9IF9fU1REQ19WRVJTSU9OX18gfHwgXAorCTIgPCAoX19HTElCQ19fICsgKDAgPCBfX0dMSUJDX01JTk9SX18pKSkKKyNlbmRpZiAvKiAhZGVmaW5lZCBIQVZFX1NURElOVF9IICovCisKKyNpZiBIQVZFX1NURElOVF9ICisjaW5jbHVkZSAic3RkaW50LmgiCisjZW5kaWYgLyogIUhBVkVfU1RESU5UX0ggKi8KKworI2lmbmRlZiBJTlRfRkFTVDY0X01BWAorLyogUHJlLUM5OSBHQ0MgY29tcGlsZXJzIGRlZmluZSBfX0xPTkdfTE9OR19NQVhfXyBpbnN0ZWFkIG9mIExMT05HX01BWC4gICovCisjaWYgZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXwordHlwZWRlZiBsb25nIGxvbmcJaW50X2Zhc3Q2NF90OworI2Vsc2UgLyogISAoZGVmaW5lZCBMTE9OR19NQVggfHwgZGVmaW5lZCBfX0xPTkdfTE9OR19NQVhfXykgKi8KKyNpZiAoTE9OR19NQVggPj4gMzEpIDwgMHhmZmZmZmZmZgorUGxlYXNlIHVzZSBhIGNvbXBpbGVyIHRoYXQgc3VwcG9ydHMgYSA2NC1iaXQgaW50ZWdlciB0eXBlIChvciB3aWRlcik7Cit5b3UgbWF5IG5lZWQgdG8gY29tcGlsZSB3aXRoICItREhBVkVfU1RESU5UX0giLgorI2VuZGlmIC8qIChMT05HX01BWCA+PiAzMSkgPCAweGZmZmZmZmZmICovCit0eXBlZGVmIGxvbmcJCWludF9mYXN0NjRfdDsKKyNlbmRpZiAvKiAhIChkZWZpbmVkIExMT05HX01BWCB8fCBkZWZpbmVkIF9fTE9OR19MT05HX01BWF9fKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIElOVF9GQVNUNjRfTUFYICovCisKKyNpZm5kZWYgSU5UMzJfTUFYCisjZGVmaW5lIElOVDMyX01BWCAweDdmZmZmZmZmCisjZW5kaWYgLyogIWRlZmluZWQgSU5UMzJfTUFYICovCisjaWZuZGVmIElOVDMyX01JTgorI2RlZmluZSBJTlQzMl9NSU4gKC0xIC0gSU5UMzJfTUFYKQorI2VuZGlmIC8qICFkZWZpbmVkIElOVDMyX01JTiAqLworCisvKgorKiogV29ya2Fyb3VuZHMgZm9yIGNvbXBpbGVycy9zeXN0ZW1zLgorKi8KKworLyoKKyoqIElmIHlvdXIgY29tcGlsZXIgbGFja3MgcHJvdG90eXBlcywgIiNkZWZpbmUgUCh4KSAoKSIuCisqLworCisjaWZuZGVmIFAKKyNkZWZpbmUgUCh4KQl4CisjZW5kaWYgLyogIWRlZmluZWQgUCAqLworCisvKgorKiogU3VuT1MgNC4xLjEgaGVhZGVycyBsYWNrIEVYSVRfU1VDQ0VTUy4KKyovCisKKyNpZm5kZWYgRVhJVF9TVUNDRVNTCisjZGVmaW5lIEVYSVRfU1VDQ0VTUwkwCisjZW5kaWYgLyogIWRlZmluZWQgRVhJVF9TVUNDRVNTICovCisKKy8qCisqKiBTdW5PUyA0LjEuMSBoZWFkZXJzIGxhY2sgRVhJVF9GQUlMVVJFLgorKi8KKworI2lmbmRlZiBFWElUX0ZBSUxVUkUKKyNkZWZpbmUgRVhJVF9GQUlMVVJFCTEKKyNlbmRpZiAvKiAhZGVmaW5lZCBFWElUX0ZBSUxVUkUgKi8KKworLyoKKyoqIFN1bk9TIDQuMS4xIGhlYWRlcnMgbGFjayBGSUxFTkFNRV9NQVguCisqLworCisjaWZuZGVmIEZJTEVOQU1FX01BWAorCisjaWZuZGVmIE1BWFBBVEhMRU4KKyNpZmRlZiB1bml4CisjaW5jbHVkZSAic3lzL3BhcmFtLmgiCisjZW5kaWYgLyogZGVmaW5lZCB1bml4ICovCisjZW5kaWYgLyogIWRlZmluZWQgTUFYUEFUSExFTiAqLworCisjaWZkZWYgTUFYUEFUSExFTgorI2RlZmluZSBGSUxFTkFNRV9NQVgJTUFYUEFUSExFTgorI2VuZGlmIC8qIGRlZmluZWQgTUFYUEFUSExFTiAqLworI2lmbmRlZiBNQVhQQVRITEVOCisjZGVmaW5lIEZJTEVOQU1FX01BWAkxMDI0CQkvKiBQdXJlIGd1ZXNzd29yayAqLworI2VuZGlmIC8qICFkZWZpbmVkIE1BWFBBVEhMRU4gKi8KKworI2VuZGlmIC8qICFkZWZpbmVkIEZJTEVOQU1FX01BWCAqLworCisvKgorKiogU3VuT1MgNC4xLjEgbGlicmFyaWVzIGxhY2sgcmVtb3ZlLgorKi8KKworI2lmbmRlZiByZW1vdmUKK2V4dGVybiBpbnQJdW5saW5rIFAoKGNvbnN0IGNoYXIgKiBmaWxlbmFtZSkpOworI2RlZmluZSByZW1vdmUJdW5saW5rCisjZW5kaWYgLyogIWRlZmluZWQgcmVtb3ZlICovCisKKy8qCisqKiBTb21lIGFuY2llbnQgZXJybm8uaCBpbXBsZW1lbnRhdGlvbnMgZG9uJ3QgZGVjbGFyZSBlcnJuby4KKyoqIEJ1dCBzb21lIG5ld2VyIGVycm5vLmggaW1wbGVtZW50YXRpb25zIGRlZmluZSBpdCBhcyBhIG1hY3JvLgorKiogRml4IHRoZSBmb3JtZXIgd2l0aG91dCBhZmZlY3RpbmcgdGhlIGxhdHRlci4KKyovCisKKyNpZm5kZWYgZXJybm8KK2V4dGVybiBpbnQgZXJybm87CisjZW5kaWYgLyogIWRlZmluZWQgZXJybm8gKi8KKworLyoKKyoqIFNvbWUgdGltZS5oIGltcGxlbWVudGF0aW9ucyBkb24ndCBkZWNsYXJlIGFzY3RpbWVfci4KKyoqIE90aGVycyBtaWdodCBkZWZpbmUgaXQgYXMgYSBtYWNyby4KKyoqIEZpeCB0aGUgZm9ybWVyIHdpdGhvdXQgYWZmZWN0aW5nIHRoZSBsYXR0ZXIuCisqLworCisjaWZuZGVmIGFzY3RpbWVfcgorZXh0ZXJuIGNoYXIgKglhc2N0aW1lX3IoKTsKKyNlbmRpZgorCisvKgorKiogUHJpdmF0ZSBmdW5jdGlvbiBkZWNsYXJhdGlvbnMuCisqLworCitjaGFyICoJCWljYWxsb2MgUCgoaW50IG5lbGVtLCBpbnQgZWxzaXplKSk7CitjaGFyICoJCWljYXRhbGxvYyBQKChjaGFyICogb2xkLCBjb25zdCBjaGFyICogbmV3KSk7CitjaGFyICoJCWljcHlhbGxvYyBQKChjb25zdCBjaGFyICogc3RyaW5nKSk7CitjaGFyICoJCWltYWxsb2MgUCgoaW50IG4pKTsKK3ZvaWQgKgkJaXJlYWxsb2MgUCgodm9pZCAqIHBvaW50ZXIsIGludCBzaXplKSk7Cit2b2lkCQlpY2ZyZWUgUCgoY2hhciAqIHBvaW50ZXIpKTsKK3ZvaWQJCWlmcmVlIFAoKGNoYXIgKiBwb2ludGVyKSk7Citjb25zdCBjaGFyICoJc2NoZWNrIFAoKGNvbnN0IGNoYXIgKiBzdHJpbmcsIGNvbnN0IGNoYXIgKiBmb3JtYXQpKTsKKworLyoKKyoqIEZpbmFsbHksIHNvbWUgY29udmVuaWVuY2UgaXRlbXMuCisqLworCisjaWZuZGVmIFRSVUUKKyNkZWZpbmUgVFJVRQkxCisjZW5kaWYgLyogIWRlZmluZWQgVFJVRSAqLworCisjaWZuZGVmIEZBTFNFCisjZGVmaW5lIEZBTFNFCTAKKyNlbmRpZiAvKiAhZGVmaW5lZCBGQUxTRSAqLworCisjaWZuZGVmIFRZUEVfQklUCisjZGVmaW5lIFRZUEVfQklUKHR5cGUpCShzaXplb2YgKHR5cGUpICogQ0hBUl9CSVQpCisjZW5kaWYgLyogIWRlZmluZWQgVFlQRV9CSVQgKi8KKworI2lmbmRlZiBUWVBFX1NJR05FRAorI2RlZmluZSBUWVBFX1NJR05FRCh0eXBlKSAoKCh0eXBlKSAtMSkgPCAwKQorI2VuZGlmIC8qICFkZWZpbmVkIFRZUEVfU0lHTkVEICovCisKKy8qCisqKiBTaW5jZSB0aGUgZGVmaW5pdGlvbiBvZiBUWVBFX0lOVEVHUkFMIGNvbnRhaW5zIGZsb2F0aW5nIHBvaW50IG51bWJlcnMsCisqKiBpdCBjYW5ub3QgYmUgdXNlZCBpbiBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4KKyovCisKKyNpZm5kZWYgVFlQRV9JTlRFR1JBTAorI2RlZmluZSBUWVBFX0lOVEVHUkFMKHR5cGUpICgoKHR5cGUpIDAuNSkgIT0gMC41KQorI2VuZGlmIC8qICFkZWZpbmVkIFRZUEVfSU5URUdSQUwgKi8KKworI2lmbmRlZiBJTlRfU1RSTEVOX01BWElNVU0KKy8qCisqKiAzMDIgLyAxMDAwIGlzIGxvZzEwKDIuMCkgcm91bmRlZCB1cC4KKyoqIFN1YnRyYWN0IG9uZSBmb3IgdGhlIHNpZ24gYml0IGlmIHRoZSB0eXBlIGlzIHNpZ25lZDsKKyoqIGFkZCBvbmUgZm9yIGludGVnZXIgZGl2aXNpb24gdHJ1bmNhdGlvbjsKKyoqIGFkZCBvbmUgbW9yZSBmb3IgYSBtaW51cyBzaWduIGlmIHRoZSB0eXBlIGlzIHNpZ25lZC4KKyovCisjZGVmaW5lIElOVF9TVFJMRU5fTUFYSU1VTSh0eXBlKSBcCisJKChUWVBFX0JJVCh0eXBlKSAtIFRZUEVfU0lHTkVEKHR5cGUpKSAqIDMwMiAvIDEwMDAgKyBcCisJMSArIFRZUEVfU0lHTkVEKHR5cGUpKQorI2VuZGlmIC8qICFkZWZpbmVkIElOVF9TVFJMRU5fTUFYSU1VTSAqLworCisvKgorKiogSU5JVElBTElaRSh4KQorKi8KKworI2lmbmRlZiBHTlVDX29yX2xpbnQKKyNpZmRlZiBsaW50CisjZGVmaW5lIEdOVUNfb3JfbGludAorI2VuZGlmIC8qIGRlZmluZWQgbGludCAqLworI2lmbmRlZiBsaW50CisjaWZkZWYgX19HTlVDX18KKyNkZWZpbmUgR05VQ19vcl9saW50CisjZW5kaWYgLyogZGVmaW5lZCBfX0dOVUNfXyAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKworI2lmbmRlZiBJTklUSUFMSVpFCisjaWZkZWYgR05VQ19vcl9saW50CisjZGVmaW5lIElOSVRJQUxJWkUoeCkJKCh4KSA9IDApCisjZW5kaWYgLyogZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKyNpZm5kZWYgR05VQ19vcl9saW50CisjZGVmaW5lIElOSVRJQUxJWkUoeCkKKyNlbmRpZiAvKiAhZGVmaW5lZCBHTlVDX29yX2xpbnQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBJTklUSUFMSVpFICovCisKKy8qCisqKiBGb3IgdGhlIGJlbmVmaXQgb2YgR05VIGZvbGsuLi4KKyoqIGBfKE1TR0lEKScgdXNlcyB0aGUgY3VycmVudCBsb2NhbGUncyBtZXNzYWdlIGxpYnJhcnkgc3RyaW5nIGZvciBNU0dJRC4KKyoqIFRoZSBkZWZhdWx0IGlzIHRvIHVzZSBnZXR0ZXh0IGlmIGF2YWlsYWJsZSwgYW5kIHVzZSBNU0dJRCBvdGhlcndpc2UuCisqLworCisjaWZuZGVmIF8KKyNpZiBIQVZFX0dFVFRFWFQKKyNkZWZpbmUgXyhtc2dpZCkgZ2V0dGV4dChtc2dpZCkKKyNlbHNlIC8qICFIQVZFX0dFVFRFWFQgKi8KKyNkZWZpbmUgXyhtc2dpZCkgbXNnaWQKKyNlbmRpZiAvKiAhSEFWRV9HRVRURVhUICovCisjZW5kaWYgLyogIWRlZmluZWQgXyAqLworCisjaWZuZGVmIFRaX0RPTUFJTgorI2RlZmluZSBUWl9ET01BSU4gInR6IgorI2VuZGlmIC8qICFkZWZpbmVkIFRaX0RPTUFJTiAqLworCisjaWYgSEFWRV9JTkNPTVBBVElCTEVfQ1RJTUVfUgorI3VuZGVmIGFzY3RpbWVfcgorI3VuZGVmIGN0aW1lX3IKK2NoYXIgKmFzY3RpbWVfciBQKChzdHJ1Y3QgdG0gY29uc3QgKiwgY2hhciAqKSk7CitjaGFyICpjdGltZV9yIFAoKHRpbWVfdCBjb25zdCAqLCBjaGFyICopKTsKKyNlbmRpZiAvKiBIQVZFX0lOQ09NUEFUSUJMRV9DVElNRV9SICovCisKKyNpZm5kZWYgWUVBUlNQRVJSRVBFQVQKKyNkZWZpbmUgWUVBUlNQRVJSRVBFQVQJCTQwMAkvKiB5ZWFycyBiZWZvcmUgYSBHcmVnb3JpYW4gcmVwZWF0ICovCisjZW5kaWYgLyogIWRlZmluZWQgWUVBUlNQRVJSRVBFQVQgKi8KKworLyoKKyoqIFRoZSBHcmVnb3JpYW4geWVhciBhdmVyYWdlcyAzNjUuMjQyNSBkYXlzLCB3aGljaCBpcyAzMTU1Njk1MiBzZWNvbmRzLgorKi8KKworI2lmbmRlZiBBVkdTRUNTUEVSWUVBUgorI2RlZmluZSBBVkdTRUNTUEVSWUVBUgkJMzE1NTY5NTJMCisjZW5kaWYgLyogIWRlZmluZWQgQVZHU0VDU1BFUllFQVIgKi8KKworI2lmbmRlZiBTRUNTUEVSUkVQRUFUCisjZGVmaW5lIFNFQ1NQRVJSRVBFQVQJCSgoaW50X2Zhc3Q2NF90KSBZRUFSU1BFUlJFUEVBVCAqIChpbnRfZmFzdDY0X3QpIEFWR1NFQ1NQRVJZRUFSKQorI2VuZGlmIC8qICFkZWZpbmVkIFNFQ1NQRVJSRVBFQVQgKi8KKyAKKyNpZm5kZWYgU0VDU1BFUlJFUEVBVF9CSVRTCisjZGVmaW5lIFNFQ1NQRVJSRVBFQVRfQklUUwkzNAkvKiBjZWlsKGxvZzIoU0VDU1BFUlJFUEVBVCkpICovCisjZW5kaWYgLyogIWRlZmluZWQgU0VDU1BFUlJFUEVBVF9CSVRTICovCisKKy8qCisqKiBVTklYIHdhcyBhIHJlZ2lzdGVyZWQgdHJhZGVtYXJrIG9mIFRoZSBPcGVuIEdyb3VwIGluIDIwMDMuCisqLworCisjZW5kaWYgLyogIWRlZmluZWQgUFJJVkFURV9IICovCmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS9zdHJmdGltZS5jIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NDZjOTFjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy90emNvZGUvc3RyZnRpbWUuYwpAQCAtMCwwICsxLDg3MiBAQAorI2lmbmRlZiBsaW50CisjaWZuZGVmIE5PSUQKK3N0YXRpYyBjaGFyCWVsc2llaWRbXSA9ICJAKCMpc3RyZnRpbWUuYwk4LjEiOworLyoKKyoqIEJhc2VkIG9uIHRoZSBVQ0IgdmVyc2lvbiB3aXRoIHRoZSBJRCBhcHBlYXJpbmcgYmVsb3cuCisqKiBUaGlzIGlzIEFOU0lpc2ggb25seSB3aGVuICJtdWx0aWJ5dGUgY2hhcmFjdGVyID09IHBsYWluIGNoYXJhY3RlciIuCisqLworI2VuZGlmIC8qICFkZWZpbmVkIE5PSUQgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCisKKyNpbmNsdWRlICJwcml2YXRlLmgiCisKKy8qCisqKiBDb3B5cmlnaHQgKGMpIDE5ODkgVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyoqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqKgorKiogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisqKiBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBhcmUKKyoqIGR1cGxpY2F0ZWQgaW4gYWxsIHN1Y2ggZm9ybXMgYW5kIHRoYXQgYW55IGRvY3VtZW50YXRpb24sCisqKiBhZHZlcnRpc2luZyBtYXRlcmlhbHMsIGFuZCBvdGhlciBtYXRlcmlhbHMgcmVsYXRlZCB0byBzdWNoCisqKiBkaXN0cmlidXRpb24gYW5kIHVzZSBhY2tub3dsZWRnZSB0aGF0IHRoZSBzb2Z0d2FyZSB3YXMgZGV2ZWxvcGVkCisqKiBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLCBCZXJrZWxleS4gVGhlIG5hbWUgb2YgdGhlCisqKiBVbml2ZXJzaXR5IG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorKiogZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorKiogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IKKyoqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECisqKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisqLworCisjaWZuZGVmIExJQkNfU0NDUworI2lmbmRlZiBsaW50CitzdGF0aWMgY29uc3QgY2hhcglzY2NzaWRbXSA9ICJAKCMpc3RyZnRpbWUuYwk1LjQgKEJlcmtlbGV5KSAzLzE0Lzg5IjsKKyNlbmRpZiAvKiAhZGVmaW5lZCBsaW50ICovCisjZW5kaWYgLyogIWRlZmluZWQgTElCQ19TQ0NTICovCisKKyNpbmNsdWRlICJ0emZpbGUuaCIKKyNpbmNsdWRlICJmY250bC5oIgorI2luY2x1ZGUgImxvY2FsZS5oIgorI2luY2x1ZGUgPGN0eXBlLmg+CisKK3N0cnVjdCBsY190aW1lX1QgeworCWNvbnN0IGNoYXIgKgltb25bTU9OU1BFUllFQVJdOworCWNvbnN0IGNoYXIgKgltb250aFtNT05TUEVSWUVBUl07CisJY29uc3QgY2hhciAqCXdkYXlbREFZU1BFUldFRUtdOworCWNvbnN0IGNoYXIgKgl3ZWVrZGF5W0RBWVNQRVJXRUVLXTsKKwljb25zdCBjaGFyICoJWF9mbXQ7CisJY29uc3QgY2hhciAqCXhfZm10OworCWNvbnN0IGNoYXIgKgljX2ZtdDsKKwljb25zdCBjaGFyICoJYW07CisJY29uc3QgY2hhciAqCXBtOworCWNvbnN0IGNoYXIgKglkYXRlX2ZtdDsKK307CisKKyNpZmRlZiBMT0NBTEVfSE9NRQorI2luY2x1ZGUgInN5cy9zdGF0LmgiCitzdGF0aWMgc3RydWN0IGxjX3RpbWVfVAkJbG9jYWxlYnVmOworc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKglfbG9jIFAoKHZvaWQpKTsKKyNkZWZpbmUgTG9jYWxlCV9sb2MoKQorI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KKyNpZm5kZWYgTE9DQUxFX0hPTUUKKyNkZWZpbmUgTG9jYWxlCSgmQ190aW1lX2xvY2FsZSkKKyNlbmRpZiAvKiAhZGVmaW5lZCBMT0NBTEVfSE9NRSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IGxjX3RpbWVfVAlDX3RpbWVfbG9jYWxlID0geworCXsKKwkJIkphbiIsICJGZWIiLCAiTWFyIiwgIkFwciIsICJNYXkiLCAiSnVuIiwKKwkJIkp1bCIsICJBdWciLCAiU2VwIiwgIk9jdCIsICJOb3YiLCAiRGVjIgorCX0sIHsKKwkJIkphbnVhcnkiLCAiRmVicnVhcnkiLCAiTWFyY2giLCAiQXByaWwiLCAiTWF5IiwgIkp1bmUiLAorCQkiSnVseSIsICJBdWd1c3QiLCAiU2VwdGVtYmVyIiwgIk9jdG9iZXIiLCAiTm92ZW1iZXIiLCAiRGVjZW1iZXIiCisJfSwgeworCQkiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwKKwkJIlRodSIsICJGcmkiLCAiU2F0IgorCX0sIHsKKwkJIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLAorCQkiVGh1cnNkYXkiLCAiRnJpZGF5IiwgIlNhdHVyZGF5IgorCX0sCisKKwkvKiBYX2ZtdCAqLworCSIlSDolTTolUyIsCisKKwkvKgorCSoqIHhfZm10CisJKiogQzk5IHJlcXVpcmVzIHRoaXMgZm9ybWF0LgorCSoqIFVzaW5nIGp1c3QgbnVtYmVycyAoYXMgaGVyZSkgbWFrZXMgUXVha2VycyBoYXBwaWVyOworCSoqIGl0J3MgYWxzbyBjb21wYXRpYmxlIHdpdGggU1ZSNC4KKwkqLworCSIlbS8lZC8leSIsCisKKwkvKgorCSoqIGNfZm10CisJKiogQzk5IHJlcXVpcmVzIHRoaXMgZm9ybWF0LgorCSoqIFByZXZpb3VzbHkgdGhpcyBjb2RlIHVzZWQgIiVEICVYIiwgYnV0IHdlIG5vdyBjb25mb3JtIHRvIEM5OS4KKwkqKiBOb3RlIHRoYXQKKwkqKgkiJWEgJWIgJWQgJUg6JU06JVMgJVkiCisJKiogaXMgdXNlZCBieSBTb2xhcmlzIDIuMy4KKwkqLworCSIlYSAlYiAlZSAlVCAlWSIsCisKKwkvKiBhbSAqLworCSJBTSIsCisKKwkvKiBwbSAqLworCSJQTSIsCisKKwkvKiBkYXRlX2ZtdCAqLworCSIlYSAlYiAlZSAlSDolTTolUyAlWiAlWSIKK307CisKK3N0YXRpYyBjaGFyICoJX2FkZCBQKChjb25zdCBjaGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpKTsKK3N0YXRpYyBjaGFyICoJX2NvbnYgUCgoaW50LCBjb25zdCBjaGFyICosIGNoYXIgKiwgY29uc3QgY2hhciAqKSk7CitzdGF0aWMgY2hhciAqCV9mbXQgUCgoY29uc3QgY2hhciAqLCBjb25zdCBzdHJ1Y3QgdG0gKiwgY2hhciAqLCBjb25zdCBjaGFyICosCisJCQlpbnQgKikpOworc3RhdGljIGNoYXIgKglfeWNvbnYgUCgoaW50LCBpbnQsIGludCwgaW50LCBjaGFyICosIGNvbnN0IGNoYXIgKiwgaW50KSk7CitzdGF0aWMgY2hhciAqCWdldGZvcm1hdCBQKChpbnQsIGNoYXIgKiwgY2hhciAqLCBjaGFyICosIGNoYXIgKikpOworCitleHRlcm4gY2hhciAqCXR6bmFtZVtdOworCisjaWZuZGVmIFlFQVJfMjAwMF9OQU1FCisjZGVmaW5lIFlFQVJfMjAwMF9OQU1FCSJDSEVDS19TVFJGVElNRV9GT1JNQVRTX0ZPUl9UV09fRElHSVRfWUVBUlMiCisjZW5kaWYgLyogIWRlZmluZWQgWUVBUl8yMDAwX05BTUUgKi8KKworI2RlZmluZSBJTl9OT05FCTAKKyNkZWZpbmUgSU5fU09NRQkxCisjZGVmaW5lIElOX1RISVMJMgorI2RlZmluZSBJTl9BTEwJMworCisjZGVmaW5lIEZPUkNFX0xPV0VSX0NBU0UgMHgxMDAKKworc2l6ZV90CitzdHJmdGltZShzLCBtYXhzaXplLCBmb3JtYXQsIHQpCitjaGFyICogY29uc3QJCXM7Citjb25zdCBzaXplX3QJCW1heHNpemU7Citjb25zdCBjaGFyICogY29uc3QJZm9ybWF0OworY29uc3Qgc3RydWN0IHRtICogY29uc3QJdDsKK3sKKwljaGFyICoJcDsKKwlpbnQJd2FybjsKKworCXR6c2V0KCk7CisjaWZkZWYgTE9DQUxFX0hPTUUKKwlsb2NhbGVidWYubW9uWzBdID0gMDsKKyNlbmRpZiAvKiBkZWZpbmVkIExPQ0FMRV9IT01FICovCisJd2FybiA9IElOX05PTkU7CisJcCA9IF9mbXQoKChmb3JtYXQgPT0gTlVMTCkgPyAiJWMiIDogZm9ybWF0KSwgdCwgcywgcyArIG1heHNpemUsICZ3YXJuKTsKKyNpZm5kZWYgTk9fUlVOX1RJTUVfV0FSTklOR1NfQUJPVVRfWUVBUl8yMDAwX1BST0JMRU1TX1RIQU5LX1lPVQorCWlmICh3YXJuICE9IElOX05PTkUgJiYgZ2V0ZW52KFlFQVJfMjAwMF9OQU1FKSAhPSBOVUxMKSB7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJCWlmIChmb3JtYXQgPT0gTlVMTCkKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIk5VTEwgc3RyZnRpbWUgZm9ybWF0ICIpOworCQllbHNlCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInN0cmZ0aW1lIGZvcm1hdCBcIiVzXCIgIiwKKwkJCQlmb3JtYXQpOworCQkodm9pZCkgZnByaW50ZihzdGRlcnIsICJ5aWVsZHMgb25seSB0d28gZGlnaXRzIG9mIHllYXJzIGluICIpOworCQlpZiAod2FybiA9PSBJTl9TT01FKQorCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAic29tZSBsb2NhbGVzIik7CisJCWVsc2UgaWYgKHdhcm4gPT0gSU5fVEhJUykKKwkJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgInRoZSBjdXJyZW50IGxvY2FsZSIpOworCQllbHNlCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgImFsbCBsb2NhbGVzIik7CisJCSh2b2lkKSBmcHJpbnRmKHN0ZGVyciwgIlxuIik7CisJfQorI2VuZGlmIC8qICFkZWZpbmVkIE5PX1JVTl9USU1FX1dBUk5JTkdTX0FCT1VUX1lFQVJfMjAwMF9QUk9CTEVNU19USEFOS19ZT1UgKi8KKwlpZiAocCA9PSBzICsgbWF4c2l6ZSkKKwkJcmV0dXJuIDA7CisJKnAgPSAnXDAnOworCXJldHVybiBwIC0gczsKK30KKworc3RhdGljIGNoYXIgKmdldGZvcm1hdChpbnQgbW9kaWZpZXIsIGNoYXIgKm5vcm1hbCwgY2hhciAqdW5kZXJzY29yZSwKKyAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqZGFzaCwgY2hhciAqemVybykgeworICAgIHN3aXRjaCAobW9kaWZpZXIpIHsKKyAgICBjYXNlICdfJzoKKyAgICAgICAgcmV0dXJuIHVuZGVyc2NvcmU7CisKKyAgICBjYXNlICctJzoKKyAgICAgICAgcmV0dXJuIGRhc2g7CisKKyAgICBjYXNlICcwJzoKKyAgICAgICAgcmV0dXJuIHplcm87CisgICAgfQorCisgICAgcmV0dXJuIG5vcm1hbDsKK30KKworc3RhdGljIGNoYXIgKgorX2ZtdChmb3JtYXQsIHQsIHB0LCBwdGxpbSwgd2FybnApCitjb25zdCBjaGFyICoJCWZvcm1hdDsKK2NvbnN0IHN0cnVjdCB0bSAqIGNvbnN0CXQ7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAqCQkJd2FybnA7Cit7CisJZm9yICggOyAqZm9ybWF0OyArK2Zvcm1hdCkgeworCQlpZiAoKmZvcm1hdCA9PSAnJScpIHsKKyAgICAgICAgICAgIGludCBtb2RpZmllciA9IDA7CitsYWJlbDoKKwkJCXN3aXRjaCAoKisrZm9ybWF0KSB7CisJCQljYXNlICdcMCc6CisJCQkJLS1mb3JtYXQ7CisJCQkJYnJlYWs7CisJCQljYXNlICdBJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX3dkYXkgPCAwIHx8CisJCQkJCXQtPnRtX3dkYXkgPj0gREFZU1BFUldFRUspID8KKwkJCQkJIj8iIDogTG9jYWxlLT53ZWVrZGF5W3QtPnRtX3dkYXldLAorCQkJCQlwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ2EnOgorCQkJCXB0ID0gX2FkZCgodC0+dG1fd2RheSA8IDAgfHwKKwkJCQkJdC0+dG1fd2RheSA+PSBEQVlTUEVSV0VFSykgPworCQkJCQkiPyIgOiBMb2NhbGUtPndkYXlbdC0+dG1fd2RheV0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnQic6CisJCQkJcHQgPSBfYWRkKCh0LT50bV9tb24gPCAwIHx8CisJCQkJCXQtPnRtX21vbiA+PSBNT05TUEVSWUVBUikgPworCQkJCQkiPyIgOiBMb2NhbGUtPm1vbnRoW3QtPnRtX21vbl0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnYic6CisJCQljYXNlICdoJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX21vbiA8IDAgfHwKKwkJCQkJdC0+dG1fbW9uID49IE1PTlNQRVJZRUFSKSA/CisJCQkJCSI/IiA6IExvY2FsZS0+bW9uW3QtPnRtX21vbl0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnQyc6CisJCQkJLyoKKwkJCQkqKiAlQyB1c2VkIHRvIGRvIGEuLi4KKwkJCQkqKglfZm10KCIlYSAlYiAlZSAlWCAlWSIsIHQpOworCQkJCSoqIC4uLndoZXJlYXMgbm93IFBPU0lYIDEwMDMuMiBjYWxscyBmb3IKKwkJCQkqKiBzb21ldGhpbmcgY29tcGxldGVseSBkaWZmZXJlbnQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMSwgMCwKKwkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdjJzoKKwkJCQl7CisJCQkJaW50IHdhcm4yID0gSU5fU09NRTsKKworCQkJCXB0ID0gX2ZtdChMb2NhbGUtPmNfZm10LCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQlpZiAod2FybjIgPT0gSU5fQUxMKQorCQkJCQl3YXJuMiA9IElOX1RISVM7CisJCQkJaWYgKHdhcm4yID4gKndhcm5wKQorCQkJCQkqd2FybnAgPSB3YXJuMjsKKwkJCQl9CisJCQkJY29udGludWU7CisJCQljYXNlICdEJzoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQgPSBfZm10KCIlbS8lZC8leSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnZCc6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ID0gX2NvbnYodC0+dG1fbWRheSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRmb3JtYXQobW9kaWZpZXIsICIlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiUyZCIsICIlZCIsICIlMDJkIiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ0UnOgorCQkJY2FzZSAnTyc6CisJCQkJLyoKKwkJCQkqKiBDOTkgbG9jYWxlIG1vZGlmaWVycy4KKwkJCQkqKiBUaGUgc2VxdWVuY2VzCisJCQkJKioJJUVjICVFQyAlRXggJUVYICVFeSAlRVkKKwkJCQkqKgklT2QgJW9lICVPSCAlT0kgJU9tICVPTQorCQkJCSoqCSVPUyAlT3UgJU9VICVPViAlT3cgJU9XICVPeQorCQkJCSoqIGFyZSBzdXBwb3NlZCB0byBwcm92aWRlIGFsdGVybmF0ZQorCQkJCSoqIHJlcHJlc2VudGF0aW9ucy4KKwkJCQkqLworCQkJCWdvdG8gbGFiZWw7CisgICAgICAgICAgICBjYXNlICdfJzoKKyAgICAgICAgICAgIGNhc2UgJy0nOgorICAgICAgICAgICAgY2FzZSAnMCc6CisgICAgICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgIGNhc2UgJyMnOgorICAgICAgICAgICAgICAgIG1vZGlmaWVyID0gKmZvcm1hdDsKKyAgICAgICAgICAgICAgICBnb3RvIGxhYmVsOworCQkJY2FzZSAnZSc6CisJCQkJcHQgPSBfY29udih0LT50bV9tZGF5LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdGJzoKKwkJCQlwdCA9IF9mbXQoIiVZLSVtLSVkIiwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQkJY29udGludWU7CisJCQljYXNlICdIJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX2hvdXIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdJJzoKKwkJCQlwdCA9IF9jb252KCh0LT50bV9ob3VyICUgMTIpID8KKwkJCQkJKHQtPnRtX2hvdXIgJSAxMikgOiAxMiwKKwkJCQkJZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdqJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX3lkYXkgKyAxLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAzZCIsICIlM2QiLCAiJWQiLCAiJTAzZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ2snOgorCQkJCS8qCisJCQkJKiogVGhpcyB1c2VkIHRvIGJlLi4uCisJCQkJKioJX2NvbnYodC0+dG1faG91ciAlIDEyID8KKwkJCQkqKgkJdC0+dG1faG91ciAlIDEyIDogMTIsIDIsICcgJyk7CisJCQkJKiogLi4uYW5kIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlIGJlbG93IHRvCisJCQkJKiogbWF0Y2ggU3VuT1MgNC4xLjEgYW5kIEFybm9sZCBSb2JiaW5zJworCQkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJCSoqICIlbCIgaGF2ZSBiZWVuIHN3YXBwZWQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYodC0+dG1faG91ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRmb3JtYXQobW9kaWZpZXIsICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworI2lmZGVmIEtJVENIRU5fU0lOSworCQkJY2FzZSAnSyc6CisJCQkJLyoKKwkJCQkqKiBBZnRlciBhbGwgdGhpcyB0aW1lLCBzdGlsbCB1bmNsYWltZWQhCisJCQkJKi8KKwkJCQlwdCA9IF9hZGQoImtpdGNoZW4gc2luayIsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qIGRlZmluZWQgS0lUQ0hFTl9TSU5LICovCisJCQljYXNlICdsJzoKKwkJCQkvKgorCQkJCSoqIFRoaXMgdXNlZCB0byBiZS4uLgorCQkJCSoqCV9jb252KHQtPnRtX2hvdXIsIDIsICcgJyk7CisJCQkJKiogLi4uYW5kIGhhcyBiZWVuIGNoYW5nZWQgdG8gdGhlIGJlbG93IHRvCisJCQkJKiogbWF0Y2ggU3VuT1MgNC4xLjEgYW5kIEFybm9sZCBSb2JiaW4ncworCQkJCSoqIHN0cmZ0aW1lIHZlcnNpb24gMy4wLiBUaGF0IGlzLCAiJWsiIGFuZAorCQkJCSoqICIlbCIgaGF2ZSBiZWVuIHN3YXBwZWQuCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYoKHQtPnRtX2hvdXIgJSAxMikgPworCQkJCQkodC0+dG1faG91ciAlIDEyKSA6IDEyLAorCQkJCQlnZXRmb3JtYXQobW9kaWZpZXIsICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnTSc6CisJCQkJcHQgPSBfY29udih0LT50bV9taW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdtJzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX21vbiArIDEsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICduJzoKKwkJCQlwdCA9IF9hZGQoIlxuIiwgcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdwJzoKKwkJCQlwdCA9IF9hZGQoKHQtPnRtX2hvdXIgPj0gKEhPVVJTUEVSREFZIC8gMikpID8KKwkJCQkJTG9jYWxlLT5wbSA6CisJCQkJCUxvY2FsZS0+YW0sCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUCc6CisJCQkJcHQgPSBfYWRkKCh0LT50bV9ob3VyID49IChIT1VSU1BFUkRBWSAvIDIpKSA/CisJCQkJCUxvY2FsZS0+cG0gOgorCQkJCQlMb2NhbGUtPmFtLAorCQkJCQlwdCwgcHRsaW0sIEZPUkNFX0xPV0VSX0NBU0UpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUic6CisJCQkJcHQgPSBfZm10KCIlSDolTSIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAncic6CisJCQkJcHQgPSBfZm10KCIlSTolTTolUyAlcCIsIHQsIHB0LCBwdGxpbSwgd2FybnApOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnUyc6CisJCQkJcHQgPSBfY29udih0LT50bV9zZWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdzJzoKKwkJCQl7CisJCQkJCXN0cnVjdCB0bQl0bTsKKwkJCQkJY2hhcgkJYnVmW0lOVF9TVFJMRU5fTUFYSU1VTSgKKwkJCQkJCQkJdGltZV90KSArIDFdOworCQkJCQl0aW1lX3QJCW1rdDsKKworCQkJCQl0bSA9ICp0OworCQkJCQlta3QgPSBta3RpbWUoJnRtKTsKKwkJCQkJaWYgKFRZUEVfU0lHTkVEKHRpbWVfdCkpCisJCQkJCQkodm9pZCkgc3ByaW50ZihidWYsICIlbGQiLAorCQkJCQkJCShsb25nKSBta3QpOworCQkJCQllbHNlCSh2b2lkKSBzcHJpbnRmKGJ1ZiwgIiVsdSIsCisJCQkJCQkJKHVuc2lnbmVkIGxvbmcpIG1rdCk7CisJCQkJCXB0ID0gX2FkZChidWYsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1QnOgorCQkJCXB0ID0gX2ZtdCgiJUg6JU06JVMiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3QnOgorCQkJCXB0ID0gX2FkZCgiXHQiLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1UnOgorCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJCXQtPnRtX3dkYXkpIC8gREFZU1BFUldFRUssCisJCQkJCWdldGZvcm1hdChtb2RpZmllciwgIiUwMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAndSc6CisJCQkJLyoKKwkJCQkqKiBGcm9tIEFybm9sZCBSb2JiaW5zJyBzdHJmdGltZSB2ZXJzaW9uIDMuMDoKKwkJCQkqKiAiSVNPIDg2MDE6IFdlZWtkYXkgYXMgYSBkZWNpbWFsIG51bWJlcgorCQkJCSoqIFsxIChNb25kYXkpIC0gN10iCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3dkYXkgPT0gMCkgPworCQkJCQlEQVlTUEVSV0VFSyA6IHQtPnRtX3dkYXksICIlZCIsIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdWJzoJLyogSVNPIDg2MDEgd2VlayBudW1iZXIgKi8KKwkJCWNhc2UgJ0cnOgkvKiBJU08gODYwMSB5ZWFyIChmb3VyIGRpZ2l0cykgKi8KKwkJCWNhc2UgJ2cnOgkvKiBJU08gODYwMSB5ZWFyICh0d28gZGlnaXRzKSAqLworLyoKKyoqIEZyb20gQXJub2xkIFJvYmJpbnMnIHN0cmZ0aW1lIHZlcnNpb24gMy4wOiAidGhlIHdlZWsgbnVtYmVyIG9mIHRoZQorKiogeWVhciAodGhlIGZpcnN0IE1vbmRheSBhcyB0aGUgZmlyc3QgZGF5IG9mIHdlZWsgMSkgYXMgYSBkZWNpbWFsIG51bWJlcgorKiogKDAxLTUzKS4iCisqKiAoYWRvLCAxOTkzLTA1LTI0KQorKioKKyoqIEZyb20gImh0dHA6Ly93d3cuZnQudW5pLWVybGFuZ2VuLmRlL35tc2t1aG4vaXNvLXRpbWUuaHRtbCIgYnkgTWFya3VzIEt1aG46CisqKiAiV2VlayAwMSBvZiBhIHllYXIgaXMgcGVyIGRlZmluaXRpb24gdGhlIGZpcnN0IHdlZWsgd2hpY2ggaGFzIHRoZQorKiogVGh1cnNkYXkgaW4gdGhpcyB5ZWFyLCB3aGljaCBpcyBlcXVpdmFsZW50IHRvIHRoZSB3ZWVrIHdoaWNoIGNvbnRhaW5zCisqKiB0aGUgZm91cnRoIGRheSBvZiBKYW51YXJ5LiBJbiBvdGhlciB3b3JkcywgdGhlIGZpcnN0IHdlZWsgb2YgYSBuZXcgeWVhcgorKiogaXMgdGhlIHdlZWsgd2hpY2ggaGFzIHRoZSBtYWpvcml0eSBvZiBpdHMgZGF5cyBpbiB0aGUgbmV3IHllYXIuIFdlZWsgMDEKKyoqIG1pZ2h0IGFsc28gY29udGFpbiBkYXlzIGZyb20gdGhlIHByZXZpb3VzIHllYXIgYW5kIHRoZSB3ZWVrIGJlZm9yZSB3ZWVrCisqKiAwMSBvZiBhIHllYXIgaXMgdGhlIGxhc3Qgd2VlayAoNTIgb3IgNTMpIG9mIHRoZSBwcmV2aW91cyB5ZWFyIGV2ZW4gaWYKKyoqIGl0IGNvbnRhaW5zIGRheXMgZnJvbSB0aGUgbmV3IHllYXIuIEEgd2VlayBzdGFydHMgd2l0aCBNb25kYXkgKGRheSAxKQorKiogYW5kIGVuZHMgd2l0aCBTdW5kYXkgKGRheSA3KS4gRm9yIGV4YW1wbGUsIHRoZSBmaXJzdCB3ZWVrIG9mIHRoZSB5ZWFyCisqKiAxOTk3IGxhc3RzIGZyb20gMTk5Ni0xMi0zMCB0byAxOTk3LTAxLTA1Li4uIgorKiogKGFkbywgMTk5Ni0wMS0wMikKKyovCisJCQkJeworCQkJCQlpbnQJeWVhcjsKKwkJCQkJaW50CWJhc2U7CisJCQkJCWludAl5ZGF5OworCQkJCQlpbnQJd2RheTsKKwkJCQkJaW50CXc7CisKKwkJCQkJeWVhciA9IHQtPnRtX3llYXI7CisJCQkJCWJhc2UgPSBUTV9ZRUFSX0JBU0U7CisJCQkJCXlkYXkgPSB0LT50bV95ZGF5OworCQkJCQl3ZGF5ID0gdC0+dG1fd2RheTsKKwkJCQkJZm9yICggOyA7ICkgeworCQkJCQkJaW50CWxlbjsKKwkJCQkJCWludAlib3Q7CisJCQkJCQlpbnQJdG9wOworCisJCQkJCQlsZW4gPSBpc2xlYXBfc3VtKHllYXIsIGJhc2UpID8KKwkJCQkJCQlEQVlTUEVSTFlFQVIgOgorCQkJCQkJCURBWVNQRVJOWUVBUjsKKwkJCQkJCS8qCisJCQkJCQkqKiBXaGF0IHlkYXkgKC0zIC4uLiAzKSBkb2VzCisJCQkJCQkqKiB0aGUgSVNPIHllYXIgYmVnaW4gb24/CisJCQkJCQkqLworCQkJCQkJYm90ID0gKCh5ZGF5ICsgMTEgLSB3ZGF5KSAlCisJCQkJCQkJREFZU1BFUldFRUspIC0gMzsKKwkJCQkJCS8qCisJCQkJCQkqKiBXaGF0IHlkYXkgZG9lcyB0aGUgTkVYVAorCQkJCQkJKiogSVNPIHllYXIgYmVnaW4gb24/CisJCQkJCQkqLworCQkJCQkJdG9wID0gYm90IC0KKwkJCQkJCQkobGVuICUgREFZU1BFUldFRUspOworCQkJCQkJaWYgKHRvcCA8IC0zKQorCQkJCQkJCXRvcCArPSBEQVlTUEVSV0VFSzsKKwkJCQkJCXRvcCArPSBsZW47CisJCQkJCQlpZiAoeWRheSA+PSB0b3ApIHsKKwkJCQkJCQkrK2Jhc2U7CisJCQkJCQkJdyA9IDE7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQlpZiAoeWRheSA+PSBib3QpIHsKKwkJCQkJCQl3ID0gMSArICgoeWRheSAtIGJvdCkgLworCQkJCQkJCQlEQVlTUEVSV0VFSyk7CisJCQkJCQkJYnJlYWs7CisJCQkJCQl9CisJCQkJCQktLWJhc2U7CisJCQkJCQl5ZGF5ICs9IGlzbGVhcF9zdW0oeWVhciwgYmFzZSkgPworCQkJCQkJCURBWVNQRVJMWUVBUiA6CisJCQkJCQkJREFZU1BFUk5ZRUFSOworCQkJCQl9CisjaWZkZWYgWFBHNF8xOTk0XzA0XzA5CisJCQkJCWlmICgodyA9PSA1MiAmJgorCQkJCQkJdC0+dG1fbW9uID09IFRNX0pBTlVBUlkpIHx8CisJCQkJCQkodyA9PSAxICYmCisJCQkJCQl0LT50bV9tb24gPT0gVE1fREVDRU1CRVIpKQorCQkJCQkJCXcgPSA1MzsKKyNlbmRpZiAvKiBkZWZpbmVkIFhQRzRfMTk5NF8wNF8wOSAqLworCQkJCQlpZiAoKmZvcm1hdCA9PSAnVicpCisJCQkJCQlwdCA9IF9jb252KHcsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIiVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMDJkIiksCisJCQkJCQkJICAgcHQsIHB0bGltKTsKKwkJCQkJZWxzZSBpZiAoKmZvcm1hdCA9PSAnZycpIHsKKwkJCQkJCSp3YXJucCA9IElOX0FMTDsKKwkJCQkJCXB0ID0gX3ljb252KHllYXIsIGJhc2UsIDAsIDEsCisJCQkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJCX0gZWxzZQlwdCA9IF95Y29udih5ZWFyLCBiYXNlLCAxLCAxLAorCQkJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3YnOgorCQkJCS8qCisJCQkJKiogRnJvbSBBcm5vbGQgUm9iYmlucycgc3RyZnRpbWUgdmVyc2lvbiAzLjA6CisJCQkJKiogImRhdGUgYXMgZGQtYmJiLVlZWVkiCisJCQkJKiogKGFkbywgMTk5My0wNS0yNCkKKwkJCQkqLworCQkJCXB0ID0gX2ZtdCgiJWUtJWItJVkiLCB0LCBwdCwgcHRsaW0sIHdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ1cnOgorCQkJCXB0ID0gX2NvbnYoKHQtPnRtX3lkYXkgKyBEQVlTUEVSV0VFSyAtCisJCQkJCSh0LT50bV93ZGF5ID8KKwkJCQkJKHQtPnRtX3dkYXkgLSAxKSA6CisJCQkJCShEQVlTUEVSV0VFSyAtIDEpKSkgLyBEQVlTUEVSV0VFSywKKwkJCQkJZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICd3JzoKKwkJCQlwdCA9IF9jb252KHQtPnRtX3dkYXksICIlZCIsIHB0LCBwdGxpbSk7CisJCQkJY29udGludWU7CisJCQljYXNlICdYJzoKKwkJCQlwdCA9IF9mbXQoTG9jYWxlLT5YX2ZtdCwgdCwgcHQsIHB0bGltLCB3YXJucCk7CisJCQkJY29udGludWU7CisJCQljYXNlICd4JzoKKwkJCQl7CisJCQkJaW50CXdhcm4yID0gSU5fU09NRTsKKworCQkJCXB0ID0gX2ZtdChMb2NhbGUtPnhfZm10LCB0LCBwdCwgcHRsaW0sICZ3YXJuMik7CisJCQkJaWYgKHdhcm4yID09IElOX0FMTCkKKwkJCQkJd2FybjIgPSBJTl9USElTOworCQkJCWlmICh3YXJuMiA+ICp3YXJucCkKKwkJCQkJKndhcm5wID0gd2FybjI7CisJCQkJfQorCQkJCWNvbnRpbnVlOworCQkJY2FzZSAneSc6CisJCQkJKndhcm5wID0gSU5fQUxMOworCQkJCXB0ID0gX3ljb252KHQtPnRtX3llYXIsIFRNX1lFQVJfQkFTRSwgMCwgMSwKKwkJCQkJcHQsIHB0bGltLCBtb2RpZmllcik7CisJCQkJY29udGludWU7CisJCQljYXNlICdZJzoKKwkJCQlwdCA9IF95Y29udih0LT50bV95ZWFyLCBUTV9ZRUFSX0JBU0UsIDEsIDEsCisJCQkJCXB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQkJCWNvbnRpbnVlOworCQkJY2FzZSAnWic6CisjaWZkZWYgVE1fWk9ORQorCQkJCWlmICh0LT5UTV9aT05FICE9IE5VTEwpCisJCQkJCXB0ID0gX2FkZCh0LT5UTV9aT05FLCBwdCwgcHRsaW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyKTsKKwkJCQllbHNlCisjZW5kaWYgLyogZGVmaW5lZCBUTV9aT05FICovCisJCQkJaWYgKHQtPnRtX2lzZHN0ID49IDApCisJCQkJCXB0ID0gX2FkZCh0em5hbWVbdC0+dG1faXNkc3QgIT0gMF0sCisJCQkJCQlwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQkvKgorCQkJCSoqIEM5OSBzYXlzIHRoYXQgJVogbXVzdCBiZSByZXBsYWNlZCBieSB0aGUKKwkJCQkqKiBlbXB0eSBzdHJpbmcgaWYgdGhlIHRpbWUgem9uZSBpcyBub3QKKwkJCQkqKiBkZXRlcm1pbmFibGUuCisJCQkJKi8KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJ3onOgorCQkJCXsKKwkJCQlpbnQJCWRpZmY7CisJCQkJY2hhciBjb25zdCAqCXNpZ247CisKKwkJCQlpZiAodC0+dG1faXNkc3QgPCAwKQorCQkJCQljb250aW51ZTsKKyNpZmRlZiBUTV9HTVRPRkYKKwkJCQlkaWZmID0gdC0+VE1fR01UT0ZGOworI2Vsc2UgLyogIWRlZmluZWQgVE1fR01UT0ZGICovCisJCQkJLyoKKwkJCQkqKiBDOTkgc2F5cyB0aGF0IHRoZSBVVEMgb2Zmc2V0IG11c3QKKwkJCQkqKiBiZSBjb21wdXRlZCBieSBsb29raW5nIG9ubHkgYXQKKwkJCQkqKiB0bV9pc2RzdC4gVGhpcyByZXF1aXJlbWVudCBpcworCQkJCSoqIGluY29ycmVjdCwgc2luY2UgaXQgbWVhbnMgdGhlIGNvZGUKKwkJCQkqKiBtdXN0IHJlbHkgb24gbWFnaWMgKGluIHRoaXMgY2FzZQorCQkJCSoqIGFsdHpvbmUgYW5kIHRpbWV6b25lKSwgYW5kIHRoZQorCQkJCSoqIG1hZ2ljIG1pZ2h0IG5vdCBoYXZlIHRoZSBjb3JyZWN0CisJCQkJKiogb2Zmc2V0LiBEb2luZyB0aGluZ3MgY29ycmVjdGx5IGlzCisJCQkJKiogdHJpY2t5IGFuZCByZXF1aXJlcyBkaXNvYmV5aW5nIEM5OTsKKwkJCQkqKiBzZWUgR05VIEMgc3RyZnRpbWUgZm9yIGRldGFpbHMuCisJCQkJKiogRm9yIG5vdywgcHVudCBhbmQgY29uZm9ybSB0byB0aGUKKwkJCQkqKiBzdGFuZGFyZCwgZXZlbiB0aG91Z2ggaXQncyBpbmNvcnJlY3QuCisJCQkJKioKKwkJCQkqKiBDOTkgc2F5cyB0aGF0ICV6IG11c3QgYmUgcmVwbGFjZWQgYnkgdGhlCisJCQkJKiogZW1wdHkgc3RyaW5nIGlmIHRoZSB0aW1lIHpvbmUgaXMgbm90CisJCQkJKiogZGV0ZXJtaW5hYmxlLCBzbyBvdXRwdXQgbm90aGluZyBpZiB0aGUKKwkJCQkqKiBhcHByb3ByaWF0ZSB2YXJpYWJsZXMgYXJlIG5vdCBhdmFpbGFibGUuCisJCQkJKi8KKwkJCQlpZiAodC0+dG1faXNkc3QgPT0gMCkKKyNpZmRlZiBVU0dfQ09NUEFUCisJCQkJCWRpZmYgPSAtdGltZXpvbmU7CisjZWxzZSAvKiAhZGVmaW5lZCBVU0dfQ09NUEFUICovCisJCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qICFkZWZpbmVkIFVTR19DT01QQVQgKi8KKwkJCQllbHNlCisjaWZkZWYgQUxUWk9ORQorCQkJCQlkaWZmID0gLWFsdHpvbmU7CisjZWxzZSAvKiAhZGVmaW5lZCBBTFRaT05FICovCisJCQkJCWNvbnRpbnVlOworI2VuZGlmIC8qICFkZWZpbmVkIEFMVFpPTkUgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUTV9HTVRPRkYgKi8KKwkJCQlpZiAoZGlmZiA8IDApIHsKKwkJCQkJc2lnbiA9ICItIjsKKwkJCQkJZGlmZiA9IC1kaWZmOworCQkJCX0gZWxzZQlzaWduID0gIisiOworCQkJCXB0ID0gX2FkZChzaWduLCBwdCwgcHRsaW0sIG1vZGlmaWVyKTsKKwkJCQlkaWZmIC89IFNFQ1NQRVJNSU47CisJCQkJZGlmZiA9IChkaWZmIC8gTUlOU1BFUkhPVVIpICogMTAwICsKKwkJCQkJKGRpZmYgJSBNSU5TUEVSSE9VUik7CisJCQkJcHQgPSBfY29udihkaWZmLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldGZvcm1hdChtb2RpZmllciwgIiUwNGQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTRkIiwgIiVkIiwgIiUwNGQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdCwgcHRsaW0pOworCQkJCX0KKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJysnOgorCQkJCXB0ID0gX2ZtdChMb2NhbGUtPmRhdGVfZm10LCB0LCBwdCwgcHRsaW0sCisJCQkJCXdhcm5wKTsKKwkJCQljb250aW51ZTsKKwkJCWNhc2UgJyUnOgorCQkJLyoKKwkJCSoqIFgzMTFKLzg4LTA5MCAoNC4xMi4zLjUpOiBpZiBjb252ZXJzaW9uIGNoYXIgaXMKKwkJCSoqIHVuZGVmaW5lZCwgYmVoYXZpb3IgaXMgdW5kZWZpbmVkLiBQcmludCBvdXQgdGhlCisJCQkqKiBjaGFyYWN0ZXIgaXRzZWxmIGFzIHByaW50ZigzKSBhbHNvIGRvZXMuCisJCQkqLworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCQlpZiAocHQgPT0gcHRsaW0pCisJCQlicmVhazsKKwkJKnB0KysgPSAqZm9ybWF0OworCX0KKwlyZXR1cm4gcHQ7Cit9CisKK3N0YXRpYyBjaGFyICoKK19jb252KG4sIGZvcm1hdCwgcHQsIHB0bGltKQorY29uc3QgaW50CQluOworY29uc3QgY2hhciAqIGNvbnN0CWZvcm1hdDsKK2NoYXIgKiBjb25zdAkJcHQ7Citjb25zdCBjaGFyICogY29uc3QJcHRsaW07Cit7CisJY2hhcglidWZbSU5UX1NUUkxFTl9NQVhJTVVNKGludCkgKyAxXTsKKworCSh2b2lkKSBzcHJpbnRmKGJ1ZiwgZm9ybWF0LCBuKTsKKwlyZXR1cm4gX2FkZChidWYsIHB0LCBwdGxpbSwgMCk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19hZGQoc3RyLCBwdCwgcHRsaW0sIG1vZGlmaWVyKQorY29uc3QgY2hhciAqCQlzdHI7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworeworICAgICAgICBpbnQgYzsKKworICAgICAgICBzd2l0Y2ggKG1vZGlmaWVyKSB7CisgICAgICAgIGNhc2UgRk9SQ0VfTE9XRVJfQ0FTRToKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoKnB0ID0gdG9sb3dlcigqc3RyKyspKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICdeJzoKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoKnB0ID0gdG91cHBlcigqc3RyKyspKSAhPSAnXDAnKSB7CisgICAgICAgICAgICAgICAgICAgICAgICArK3B0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlICcjJzoKKyAgICAgICAgICAgICAgICB3aGlsZSAocHQgPCBwdGxpbSAmJiAoYyA9ICpzdHIrKykgIT0gJ1wwJykgeworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlzdXBwZXIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRvbG93ZXIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlzbG93ZXIoYykpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9IHRvdXBwZXIoYyk7CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAqcHQgPSBjOworICAgICAgICAgICAgICAgICAgICAgICAgKytwdDsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIHdoaWxlIChwdCA8IHB0bGltICYmICgqcHQgPSAqc3RyKyspICE9ICdcMCcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICsrcHQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKwlyZXR1cm4gcHQ7Cit9CisKKy8qCisqKiBQT1NJWCBhbmQgdGhlIEMgU3RhbmRhcmQgYXJlIHVuY2xlYXIgb3IgaW5jb25zaXN0ZW50IGFib3V0CisqKiB3aGF0ICVDIGFuZCAleSBkbyBpZiB0aGUgeWVhciBpcyBuZWdhdGl2ZSBvciBleGNlZWRzIDk5OTkuCisqKiBVc2UgdGhlIGNvbnZlbnRpb24gdGhhdCAlQyBjb25jYXRlbmF0ZWQgd2l0aCAleSB5aWVsZHMgdGhlCisqKiBzYW1lIG91dHB1dCBhcyAlWSwgYW5kIHRoYXQgJVkgY29udGFpbnMgYXQgbGVhc3QgNCBieXRlcywKKyoqIHdpdGggbW9yZSBvbmx5IGlmIG5lY2Vzc2FyeS4KKyovCisKK3N0YXRpYyBjaGFyICoKK195Y29udihhLCBiLCBjb252ZXJ0X3RvcCwgY29udmVydF95eSwgcHQsIHB0bGltLCBtb2RpZmllcikKK2NvbnN0IGludAkJYTsKK2NvbnN0IGludAkJYjsKK2NvbnN0IGludAkJY29udmVydF90b3A7Citjb25zdCBpbnQJCWNvbnZlcnRfeXk7CitjaGFyICoJCQlwdDsKK2NvbnN0IGNoYXIgKiBjb25zdAlwdGxpbTsKK2ludCAgICAgICAgICAgICAgICAgICAgIG1vZGlmaWVyOworeworCXJlZ2lzdGVyIGludAlsZWFkOworCXJlZ2lzdGVyIGludAl0cmFpbDsKKworI2RlZmluZSBESVZJU09SCTEwMAorCXRyYWlsID0gYSAlIERJVklTT1IgKyBiICUgRElWSVNPUjsKKwlsZWFkID0gYSAvIERJVklTT1IgKyBiIC8gRElWSVNPUiArIHRyYWlsIC8gRElWSVNPUjsKKwl0cmFpbCAlPSBESVZJU09SOworCWlmICh0cmFpbCA8IDAgJiYgbGVhZCA+IDApIHsKKwkJdHJhaWwgKz0gRElWSVNPUjsKKwkJLS1sZWFkOworCX0gZWxzZSBpZiAobGVhZCA8IDAgJiYgdHJhaWwgPiAwKSB7CisJCXRyYWlsIC09IERJVklTT1I7CisJCSsrbGVhZDsKKwl9CisJaWYgKGNvbnZlcnRfdG9wKSB7CisJCWlmIChsZWFkID09IDAgJiYgdHJhaWwgPCAwKQorCQkJcHQgPSBfYWRkKCItMCIsIHB0LCBwdGxpbSwgbW9kaWZpZXIpOworCQllbHNlCXB0ID0gX2NvbnYobGVhZCwgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiJTJkIiwgIiVkIiwgIiUwMmQiKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwl9CisJaWYgKGNvbnZlcnRfeXkpCisJCXB0ID0gX2NvbnYoKCh0cmFpbCA8IDApID8gLXRyYWlsIDogdHJhaWwpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0Zm9ybWF0KG1vZGlmaWVyLCAiJTAyZCIsICIlMmQiLCAiJWQiLCAiJTAyZCIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgcHQsIHB0bGltKTsKKwlyZXR1cm4gcHQ7Cit9CisKKyNpZmRlZiBMT0NBTEVfSE9NRQorc3RhdGljIHN0cnVjdCBsY190aW1lX1QgKgorX2xvYyBQKCh2b2lkKSkKK3sKKwlzdGF0aWMgY29uc3QgY2hhcglsb2NhbGVfaG9tZVtdID0gTE9DQUxFX0hPTUU7CisJc3RhdGljIGNvbnN0IGNoYXIJbGNfdGltZVtdID0gIkxDX1RJTUUiOworCXN0YXRpYyBjaGFyICoJCWxvY2FsZV9idWY7CisKKwlpbnQJCQlmZDsKKwlpbnQJCQlvbGRzdW47CS8qICIuLi5haW4ndCBnb3Qgbm90aGluJyB0byBkby4uLiIgKi8KKwljaGFyICoJCQlsYnVmOworCWNoYXIgKgkJCW5hbWU7CisJY2hhciAqCQkJcDsKKwljb25zdCBjaGFyICoqCQlhcDsKKwljb25zdCBjaGFyICoJCXBsaW07CisJY2hhcgkJCWZpbGVuYW1lW0ZJTEVOQU1FX01BWF07CisJc3RydWN0IHN0YXQJCXN0OworCXNpemVfdAkJCW5hbWVzaXplOworCXNpemVfdAkJCWJ1ZnNpemU7CisKKwkvKgorCSoqIFVzZSBsb2NhbGVidWYubW9uWzBdIHRvIHNpZ25hbCB3aGV0aGVyIGxvY2FsZSBpcyBhbHJlYWR5IHNldCB1cC4KKwkqLworCWlmIChsb2NhbGVidWYubW9uWzBdKQorCQlyZXR1cm4gJmxvY2FsZWJ1ZjsKKwluYW1lID0gc2V0bG9jYWxlKExDX1RJTUUsIChjaGFyICopIE5VTEwpOworCWlmIChuYW1lID09IE5VTEwgfHwgKm5hbWUgPT0gJ1wwJykKKwkJZ290byBub19sb2NhbGU7CisJLyoKKwkqKiBJZiB0aGUgbG9jYWxlIG5hbWUgaXMgdGhlIHNhbWUgYXMgb3VyIGNhY2hlLCB1c2UgdGhlIGNhY2hlLgorCSovCisJbGJ1ZiA9IGxvY2FsZV9idWY7CisJaWYgKGxidWYgIT0gTlVMTCAmJiBzdHJjbXAobmFtZSwgbGJ1ZikgPT0gMCkgeworCQlwID0gbGJ1ZjsKKwkJZm9yIChhcCA9IChjb25zdCBjaGFyICoqKSAmbG9jYWxlYnVmOworCQkJYXAgPCAoY29uc3QgY2hhciAqKikgKCZsb2NhbGVidWYgKyAxKTsKKwkJCQkrK2FwKQorCQkJCQkqYXAgPSBwICs9IHN0cmxlbihwKSArIDE7CisJCXJldHVybiAmbG9jYWxlYnVmOworCX0KKwkvKgorCSoqIFNsdXJwIHRoZSBsb2NhbGUgZmlsZSBpbnRvIHRoZSBjYWNoZS4KKwkqLworCW5hbWVzaXplID0gc3RybGVuKG5hbWUpICsgMTsKKwlpZiAoc2l6ZW9mIGZpbGVuYW1lIDwKKwkJKChzaXplb2YgbG9jYWxlX2hvbWUpICsgbmFtZXNpemUgKyAoc2l6ZW9mIGxjX3RpbWUpKSkKKwkJCWdvdG8gbm9fbG9jYWxlOworCW9sZHN1biA9IDA7CisJKHZvaWQpIHNwcmludGYoZmlsZW5hbWUsICIlcy8lcy8lcyIsIGxvY2FsZV9ob21lLCBuYW1lLCBsY190aW1lKTsKKwlmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPCAwKSB7CisJCS8qCisJCSoqIE9sZCBTdW4gc3lzdGVtcyBoYXZlIGEgZGlmZmVyZW50IG5hbWluZyBhbmQgZGF0YSBjb252ZW50aW9uLgorCQkqLworCQlvbGRzdW4gPSAxOworCQkodm9pZCkgc3ByaW50ZihmaWxlbmFtZSwgIiVzLyVzLyVzIiwgbG9jYWxlX2hvbWUsCisJCQlsY190aW1lLCBuYW1lKTsKKwkJZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSk7CisJCWlmIChmZCA8IDApCisJCQlnb3RvIG5vX2xvY2FsZTsKKwl9CisJaWYgKGZzdGF0KGZkLCAmc3QpICE9IDApCisJCWdvdG8gYmFkX2xvY2FsZTsKKwlpZiAoc3Quc3Rfc2l6ZSA8PSAwKQorCQlnb3RvIGJhZF9sb2NhbGU7CisJYnVmc2l6ZSA9IG5hbWVzaXplICsgc3Quc3Rfc2l6ZTsKKwlsb2NhbGVfYnVmID0gTlVMTDsKKwlsYnVmID0gKGxidWYgPT0gTlVMTCkgPyBtYWxsb2MoYnVmc2l6ZSkgOiByZWFsbG9jKGxidWYsIGJ1ZnNpemUpOworCWlmIChsYnVmID09IE5VTEwpCisJCWdvdG8gYmFkX2xvY2FsZTsKKwkodm9pZCkgc3RyY3B5KGxidWYsIG5hbWUpOworCXAgPSBsYnVmICsgbmFtZXNpemU7CisJcGxpbSA9IHAgKyBzdC5zdF9zaXplOworCWlmIChyZWFkKGZkLCBwLCAoc2l6ZV90KSBzdC5zdF9zaXplKSAhPSBzdC5zdF9zaXplKQorCQlnb3RvIGJhZF9sYnVmOworCWlmIChjbG9zZShmZCkgIT0gMCkKKwkJZ290byBiYWRfbGJ1ZjsKKwkvKgorCSoqIFBhcnNlIHRoZSBsb2NhbGUgZmlsZSBpbnRvIGxvY2FsZWJ1Zi4KKwkqLworCWlmIChwbGltWy0xXSAhPSAnXG4nKQorCQlnb3RvIGJhZF9sYnVmOworCWZvciAoYXAgPSAoY29uc3QgY2hhciAqKikgJmxvY2FsZWJ1ZjsKKwkJYXAgPCAoY29uc3QgY2hhciAqKikgKCZsb2NhbGVidWYgKyAxKTsKKwkJCSsrYXApIHsKKwkJCQlpZiAocCA9PSBwbGltKQorCQkJCQlnb3RvIGJhZF9sYnVmOworCQkJCSphcCA9IHA7CisJCQkJd2hpbGUgKCpwICE9ICdcbicpCisJCQkJCSsrcDsKKwkJCQkqcCsrID0gJ1wwJzsKKwl9CisJaWYgKG9sZHN1bikgeworCQkvKgorCQkqKiBTdW5PUyA0IHVzZWQgYW4gb2Jzb2xlc2NlbnQgZm9ybWF0OyBzZWUgbG9jYWxkdGNvbnYoMykuCisJCSoqIGNfZm10IGhhZCB0aGUgYGBzaG9ydCBmb3JtYXQgZm9yIGRhdGVzIGFuZCB0aW1lcyB0b2dldGhlcicnCisJCSoqIChTdW5PUyA0IGRhdGUsICIlYSAlYiAlZSAlVCAlWiAlWSIgaW4gdGhlIEMgbG9jYWxlKTsKKwkJKiogZGF0ZV9mbXQgaGFkIHRoZSBgYGxvbmcgZm9ybWF0IGZvciBkYXRlcycnCisJCSoqIChTdW5PUyA0IHN0cmZ0aW1lICVDLCAiJUEsICVCICVlLCAlWSIgaW4gdGhlIEMgbG9jYWxlKS4KKwkJKiogRGlzY2FyZCB0aGUgbGF0dGVyIGluIGZhdm9yIG9mIHRoZSBmb3JtZXIuCisJCSovCisJCWxvY2FsZWJ1Zi5kYXRlX2ZtdCA9IGxvY2FsZWJ1Zi5jX2ZtdDsKKwl9CisJLyoKKwkqKiBSZWNvcmQgdGhlIHN1Y2Nlc3NmdWwgcGFyc2UgaW4gdGhlIGNhY2hlLgorCSovCisJbG9jYWxlX2J1ZiA9IGxidWY7CisKKwlyZXR1cm4gJmxvY2FsZWJ1ZjsKKworYmFkX2xidWY6CisJZnJlZShsYnVmKTsKK2JhZF9sb2NhbGU6CisJKHZvaWQpIGNsb3NlKGZkKTsKK25vX2xvY2FsZToKKwlsb2NhbGVidWYgPSBDX3RpbWVfbG9jYWxlOworCWxvY2FsZV9idWYgPSBOVUxMOworCXJldHVybiAmbG9jYWxlYnVmOworfQorI2VuZGlmIC8qIGRlZmluZWQgTE9DQUxFX0hPTUUgKi8KZGlmZiAtLWdpdCBhL2xpYmMvdHpjb2RlL3N0cnB0aW1lLmMgYi9saWJjL3R6Y29kZS9zdHJwdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk4MmRhZjQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS9zdHJwdGltZS5jCkBAIC0wLDAgKzEsNDMwIEBACisvKgkkT3BlbkJTRDogc3RycHRpbWUuYyx2IDEuMTEgMjAwNS8wOC8wOCAwODowNTozOCBlc3BpZSBFeHAgJCAqLworLyoJJE5ldEJTRDogc3RycHRpbWUuYyx2IDEuMTIgMTk5OC8wMS8yMCAyMTozOTo0MCBteWNyb2Z0IEV4cCAkCSovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAxOTk3LCAxOTk4IFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgd2FzIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBieSBLbGF1cyBLbGVpbi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIE5ldEJTRAorICogICAgICAgIEZvdW5kYXRpb24sIEluYy4gYW5kIGl0cyBjb250cmlidXRvcnMuCisgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIFRoZSBOZXRCU0QgRm91bmRhdGlvbiBub3IgdGhlIG5hbWVzIG9mIGl0cworICogICAgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCisgKiAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgTkVUQlNEIEZPVU5EQVRJT04sIElOQy4gQU5EIENPTlRSSUJVVE9SUworICogYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVECisgKiBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBGT1VOREFUSU9OIE9SIENPTlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLy8jaW5jbHVkZSA8c3lzL2xvY2FsZWRlZi5oPgorI2luY2x1ZGUgPGN0eXBlLmg+CisjaW5jbHVkZSA8bG9jYWxlLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgInR6ZmlsZS5oIgorCitzdGF0aWMgY29uc3Qgc3RydWN0IHsKKwljb25zdCBjaGFyICphYmRheVs3XTsKKwljb25zdCBjaGFyICpkYXlbN107CisJY29uc3QgY2hhciAqYWJtb25bMTJdOworCWNvbnN0IGNoYXIgKm1vblsxMl07CisJY29uc3QgY2hhciAqYW1fcG1bMl07CisJY29uc3QgY2hhciAqZF90X2ZtdDsKKwljb25zdCBjaGFyICpkX2ZtdDsKKwljb25zdCBjaGFyICp0X2ZtdDsKKwljb25zdCBjaGFyICp0X2ZtdF9hbXBtOworfSBfRGVmYXVsdFRpbWVMb2NhbGUgPSB7CisJeworCQkiU3VuIiwiTW9uIiwiVHVlIiwiV2VkIiwiVGh1IiwiRnJpIiwiU2F0IiwKKwl9LAorCXsKKwkJIlN1bmRheSIsICJNb25kYXkiLCAiVHVlc2RheSIsICJXZWRuZXNkYXkiLCAiVGh1cnNkYXkiLAorCQkiRnJpZGF5IiwgIlNhdHVyZGF5IgorCX0sCisJeworCQkiSmFuIiwgIkZlYiIsICJNYXIiLCAiQXByIiwgIk1heSIsICJKdW4iLAorCQkiSnVsIiwgIkF1ZyIsICJTZXAiLCAiT2N0IiwgIk5vdiIsICJEZWMiCisJfSwKKwl7CisJCSJKYW51YXJ5IiwgIkZlYnJ1YXJ5IiwgIk1hcmNoIiwgIkFwcmlsIiwgIk1heSIsICJKdW5lIiwgIkp1bHkiLAorCQkiQXVndXN0IiwgIlNlcHRlbWJlciIsICJPY3RvYmVyIiwgIk5vdmVtYmVyIiwgIkRlY2VtYmVyIgorCX0sCisJeworCQkiQU0iLCAiUE0iCisJfSwKKwkiJWEgJWIgJWQgJUg6JU06JVMgJVkiLAorCSIlbS8lZC8leSIsCisJIiVIOiVNOiVTIiwKKwkiJUk6JU06JVMgJXAiCit9OworCisjZGVmaW5lCV9jdGxvYyh4KSAoX0RlZmF1bHRUaW1lTG9jYWxlLngpCisKKy8qCisgKiBXZSBkbyBub3QgaW1wbGVtZW50IGFsdGVybmF0ZSByZXByZXNlbnRhdGlvbnMuIEhvd2V2ZXIsIHdlIGFsd2F5cworICogY2hlY2sgd2hldGhlciBhIGdpdmVuIG1vZGlmaWVyIGlzIGFsbG93ZWQgZm9yIGEgY2VydGFpbiBjb252ZXJzaW9uLgorICovCisjZGVmaW5lIF9BTFRfRQkJCTB4MDEKKyNkZWZpbmUgX0FMVF9PCQkJMHgwMgorI2RlZmluZQlfTEVHQUxfQUxUKHgpCQl7IGlmIChhbHRfZm9ybWF0ICYgfih4KSkgcmV0dXJuICgwKTsgfQorCisKK3N0YXRpYwlpbnQgX2NvbnZfbnVtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiosIGludCAqLCBpbnQsIGludCk7CitzdGF0aWMJY2hhciAqX3N0cnB0aW1lKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgdG0gKiwgaW50KTsKKworCitjaGFyICoKK3N0cnB0aW1lKGNvbnN0IGNoYXIgKmJ1ZiwgY29uc3QgY2hhciAqZm10LCBzdHJ1Y3QgdG0gKnRtKQoreworCXJldHVybihfc3RycHRpbWUoYnVmLCBmbXQsIHRtLCAxKSk7Cit9CisKK3N0YXRpYyBjaGFyICoKK19zdHJwdGltZShjb25zdCBjaGFyICpidWYsIGNvbnN0IGNoYXIgKmZtdCwgc3RydWN0IHRtICp0bSwgaW50IGluaXRpYWxpemUpCit7CisJdW5zaWduZWQgY2hhciBjOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmJwOworCXNpemVfdCBsZW47CisJaW50IGFsdF9mb3JtYXQsIGk7CisJc3RhdGljIGludCBjZW50dXJ5LCByZWx5ZWFyOworCisJaWYgKGluaXRpYWxpemUpIHsKKwkJY2VudHVyeSA9IFRNX1lFQVJfQkFTRTsKKwkJcmVseWVhciA9IC0xOworCX0KKworCWJwID0gKHVuc2lnbmVkIGNoYXIgKilidWY7CisJd2hpbGUgKChjID0gKmZtdCkgIT0gJ1wwJykgeworCQkvKiBDbGVhciBgYWx0ZXJuYXRlJyBtb2RpZmllciBwcmlvciB0byBuZXcgY29udmVyc2lvbi4gKi8KKwkJYWx0X2Zvcm1hdCA9IDA7CisKKwkJLyogRWF0IHVwIHdoaXRlLXNwYWNlLiAqLworCQlpZiAoaXNzcGFjZShjKSkgeworCQkJd2hpbGUgKGlzc3BhY2UoKmJwKSkKKwkJCQlicCsrOworCisJCQlmbXQrKzsKKwkJCWNvbnRpbnVlOworCQl9CisJCQkJCisJCWlmICgoYyA9ICpmbXQrKykgIT0gJyUnKQorCQkJZ290byBsaXRlcmFsOworCisKK2FnYWluOgkJc3dpdGNoIChjID0gKmZtdCsrKSB7CisJCWNhc2UgJyUnOgkvKiAiJSUiIGlzIGNvbnZlcnRlZCB0byAiJSIuICovCitsaXRlcmFsOgorCQlpZiAoYyAhPSAqYnArKykKKwkJCXJldHVybiAoTlVMTCk7CisKKwkJYnJlYWs7CisKKwkJLyoKKwkJICogIkFsdGVybmF0aXZlIiBtb2RpZmllcnMuIEp1c3Qgc2V0IHRoZSBhcHByb3ByaWF0ZSBmbGFnCisJCSAqIGFuZCBzdGFydCBvdmVyIGFnYWluLgorCQkgKi8KKwkJY2FzZSAnRSc6CS8qICIlRT8iIGFsdGVybmF0aXZlIGNvbnZlcnNpb24gbW9kaWZpZXIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJYWx0X2Zvcm1hdCB8PSBfQUxUX0U7CisJCQlnb3RvIGFnYWluOworCisJCWNhc2UgJ08nOgkvKiAiJU8/IiBhbHRlcm5hdGl2ZSBjb252ZXJzaW9uIG1vZGlmaWVyLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWFsdF9mb3JtYXQgfD0gX0FMVF9POworCQkJZ290byBhZ2FpbjsKKwkJCQorCQkvKgorCQkgKiAiQ29tcGxleCIgY29udmVyc2lvbiBydWxlcywgaW1wbGVtZW50ZWQgdGhyb3VnaCByZWN1cnNpb24uCisJCSAqLworCQljYXNlICdjJzoJLyogRGF0ZSBhbmQgdGltZSwgdXNpbmcgdGhlIGxvY2FsZSdzIGZvcm1hdC4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCBfY3Rsb2MoZF90X2ZtdCksIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ0QnOgkvKiBUaGUgZGF0ZSBhcyAiJW0vJWQvJXkiLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCAiJW0vJWQvJXkiLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKwkKKwkJY2FzZSAnUic6CS8qIFRoZSB0aW1lIGFzICIlSDolTSIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJaWYgKCEoYnAgPSBfc3RycHRpbWUoYnAsICIlSDolTSIsIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3InOgkvKiBUaGUgdGltZSBhcyAiJUk6JU06JVMgJXAiLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCAiJUk6JU06JVMgJXAiLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlICdUJzoJLyogVGhlIHRpbWUgYXMgIiVIOiVNOiVTIi4gKi8KKwkJCV9MRUdBTF9BTFQoMCk7CisJCQlpZiAoIShicCA9IF9zdHJwdGltZShicCwgIiVIOiVNOiVTIiwgdG0sIDApKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJYnJlYWs7CisKKwkJY2FzZSAnWCc6CS8qIFRoZSB0aW1lLCB1c2luZyB0aGUgbG9jYWxlJ3MgZm9ybWF0LiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UpOworCQkJaWYgKCEoYnAgPSBfc3RycHRpbWUoYnAsIF9jdGxvYyh0X2ZtdCksIHRtLCAwKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ3gnOgkvKiBUaGUgZGF0ZSwgdXNpbmcgdGhlIGxvY2FsZSdzIGZvcm1hdC4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKGJwID0gX3N0cnB0aW1lKGJwLCBfY3Rsb2MoZF9mbXQpLCB0bSwgMCkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQkvKgorCQkgKiAiRWxlbWVudGFyeSIgY29udmVyc2lvbiBydWxlcy4KKwkJICovCisJCWNhc2UgJ0EnOgkvKiBUaGUgZGF5IG9mIHdlZWssIHVzaW5nIHRoZSBsb2NhbGUncyBmb3JtLiAqLworCQljYXNlICdhJzoKKwkJCV9MRUdBTF9BTFQoMCk7CisJCQlmb3IgKGkgPSAwOyBpIDwgNzsgaSsrKSB7CisJCQkJLyogRnVsbCBuYW1lLiAqLworCQkJCWxlbiA9IHN0cmxlbihfY3Rsb2MoZGF5W2ldKSk7CisJCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhkYXlbaV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCS8qIEFiYnJldmlhdGVkIG5hbWUuICovCisJCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhYmRheVtpXSkpOworCQkJCWlmIChzdHJuY2FzZWNtcChfY3Rsb2MoYWJkYXlbaV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm90aGluZyBtYXRjaGVkLiAqLworCQkJaWYgKGkgPT0gNykKKwkJCQlyZXR1cm4gKE5VTEwpOworCisJCQl0bS0+dG1fd2RheSA9IGk7CisJCQlicCArPSBsZW47CisJCQlicmVhazsKKworCQljYXNlICdCJzoJLyogVGhlIG1vbnRoLCB1c2luZyB0aGUgbG9jYWxlJ3MgZm9ybS4gKi8KKwkJY2FzZSAnYic6CisJCWNhc2UgJ2gnOgorCQkJX0xFR0FMX0FMVCgwKTsKKwkJCWZvciAoaSA9IDA7IGkgPCAxMjsgaSsrKSB7CisJCQkJLyogRnVsbCBuYW1lLiAqLworCQkJCWxlbiA9IHN0cmxlbihfY3Rsb2MobW9uW2ldKSk7CisJCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhtb25baV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKworCQkJCS8qIEFiYnJldmlhdGVkIG5hbWUuICovCisJCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhYm1vbltpXSkpOworCQkJCWlmIChzdHJuY2FzZWNtcChfY3Rsb2MoYWJtb25baV0pLCBicCwgbGVuKSA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKworCQkJLyogTm90aGluZyBtYXRjaGVkLiAqLworCQkJaWYgKGkgPT0gMTIpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJdG0tPnRtX21vbiA9IGk7CisJCQlicCArPSBsZW47CisJCQlicmVhazsKKworCQljYXNlICdDJzoJLyogVGhlIGNlbnR1cnkgbnVtYmVyLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UpOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJmksIDAsIDk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJY2VudHVyeSA9IGkgKiAxMDA7CisJCQlicmVhazsKKworCQljYXNlICdkJzoJLyogVGhlIGRheSBvZiBtb250aC4gKi8KKwkJY2FzZSAnZSc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX21kYXksIDEsIDMxKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2snOgkvKiBUaGUgaG91ciAoMjQtaG91ciBjbG9jayByZXByZXNlbnRhdGlvbikuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnSCc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX2hvdXIsIDAsIDIzKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2wnOgkvKiBUaGUgaG91ciAoMTItaG91ciBjbG9jayByZXByZXNlbnRhdGlvbikuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJLyogRkFMTFRIUk9VR0ggKi8KKwkJY2FzZSAnSSc6CisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX2hvdXIsIDEsIDEyKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ2onOgkvKiBUaGUgZGF5IG9mIHllYXIuICovCisJCQlfTEVHQUxfQUxUKDApOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV95ZGF5LCAxLCAzNjYpKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdG0tPnRtX3lkYXktLTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ00nOgkvKiBUaGUgbWludXRlLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV9taW4sIDAsIDU5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ20nOgkvKiBUaGUgbW9udGguICovCisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQlpZiAoIShfY29udl9udW0oJmJwLCAmdG0tPnRtX21vbiwgMSwgMTIpKSkKKwkJCQlyZXR1cm4gKE5VTEwpOworCQkJdG0tPnRtX21vbi0tOworCQkJYnJlYWs7CisKKwkJY2FzZSAncCc6CS8qIFRoZSBsb2NhbGUncyBlcXVpdmFsZW50IG9mIEFNL1BNLiAqLworCQkJX0xFR0FMX0FMVCgwKTsKKwkJCS8qIEFNPyAqLworCQkJbGVuID0gc3RybGVuKF9jdGxvYyhhbV9wbVswXSkpOworCQkJaWYgKHN0cm5jYXNlY21wKF9jdGxvYyhhbV9wbVswXSksIGJwLCBsZW4pID09IDApIHsKKwkJCQlpZiAodG0tPnRtX2hvdXIgPiAxMikJLyogaS5lLiwgMTM6MDAgQU0gPyEgKi8KKwkJCQkJcmV0dXJuIChOVUxMKTsKKwkJCQllbHNlIGlmICh0bS0+dG1faG91ciA9PSAxMikKKwkJCQkJdG0tPnRtX2hvdXIgPSAwOworCisJCQkJYnAgKz0gbGVuOworCQkJCWJyZWFrOworCQkJfQorCQkJLyogUE0/ICovCisJCQlsZW4gPSBzdHJsZW4oX2N0bG9jKGFtX3BtWzFdKSk7CisJCQlpZiAoc3RybmNhc2VjbXAoX2N0bG9jKGFtX3BtWzFdKSwgYnAsIGxlbikgPT0gMCkgeworCQkJCWlmICh0bS0+dG1faG91ciA+IDEyKQkvKiBpLmUuLCAxMzowMCBQTSA/ISAqLworCQkJCQlyZXR1cm4gKE5VTEwpOworCQkJCWVsc2UgaWYgKHRtLT50bV9ob3VyIDwgMTIpCisJCQkJCXRtLT50bV9ob3VyICs9IDEyOworCisJCQkJYnAgKz0gbGVuOworCQkJCWJyZWFrOworCQkJfQorCisJCQkvKiBOb3RoaW5nIG1hdGNoZWQuICovCisJCQlyZXR1cm4gKE5VTEwpOworCisJCWNhc2UgJ1MnOgkvKiBUaGUgc2Vjb25kcy4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9PKTsKKwkJCWlmICghKF9jb252X251bSgmYnAsICZ0bS0+dG1fc2VjLCAwLCA2MSkpKQorCQkJCXJldHVybiAoTlVMTCk7CisJCQlicmVhazsKKworCQljYXNlICdVJzoJLyogVGhlIHdlZWsgb2YgeWVhciwgYmVnaW5uaW5nIG9uIHN1bmRheS4gKi8KKwkJY2FzZSAnVyc6CS8qIFRoZSB3ZWVrIG9mIHllYXIsIGJlZ2lubmluZyBvbiBtb25kYXkuICovCisJCQlfTEVHQUxfQUxUKF9BTFRfTyk7CisJCQkvKgorCQkJICogWFhYIFRoaXMgaXMgYm9ndXMsIGFzIHdlIGNhbiBub3QgYXNzdW1lIGFueSB2YWxpZAorCQkJICogaW5mb3JtYXRpb24gcHJlc2VudCBpbiB0aGUgdG0gc3RydWN0dXJlIGF0IHRoaXMKKwkJCSAqIHBvaW50IHRvIGNhbGN1bGF0ZSBhIHJlYWwgdmFsdWUsIHNvIGp1c3QgY2hlY2sgdGhlCisJCQkgKiByYW5nZSBmb3Igbm93LgorCQkJICovCisJCQkgaWYgKCEoX2NvbnZfbnVtKCZicCwgJmksIDAsIDUzKSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCSBicmVhazsKKworCQljYXNlICd3JzoJLyogVGhlIGRheSBvZiB3ZWVrLCBiZWdpbm5pbmcgb24gc3VuZGF5LiAqLworCQkJX0xFR0FMX0FMVChfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnRtLT50bV93ZGF5LCAwLCA2KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCWNhc2UgJ1knOgkvKiBUaGUgeWVhci4gKi8KKwkJCV9MRUdBTF9BTFQoX0FMVF9FKTsKKwkJCWlmICghKF9jb252X251bSgmYnAsICZpLCAwLCA5OTk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKworCQkJcmVseWVhciA9IC0xOworCQkJdG0tPnRtX3llYXIgPSBpIC0gVE1fWUVBUl9CQVNFOworCQkJYnJlYWs7CisKKwkJY2FzZSAneSc6CS8qIFRoZSB5ZWFyIHdpdGhpbiB0aGUgY2VudHVyeSAoMiBkaWdpdHMpLiAqLworCQkJX0xFR0FMX0FMVChfQUxUX0UgfCBfQUxUX08pOworCQkJaWYgKCEoX2NvbnZfbnVtKCZicCwgJnJlbHllYXIsIDAsIDk5KSkpCisJCQkJcmV0dXJuIChOVUxMKTsKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIE1pc2NlbGxhbmVvdXMgY29udmVyc2lvbnMuCisJCSAqLworCQljYXNlICduJzoJLyogQW55IGtpbmQgb2Ygd2hpdGUtc3BhY2UuICovCisJCWNhc2UgJ3QnOgorCQkJX0xFR0FMX0FMVCgwKTsKKwkJCXdoaWxlIChpc3NwYWNlKCpicCkpCisJCQkJYnArKzsKKwkJCWJyZWFrOworCisKKwkJZGVmYXVsdDoJLyogVW5rbm93bi91bnN1cHBvcnRlZCBjb252ZXJzaW9uLiAqLworCQkJcmV0dXJuIChOVUxMKTsKKwkJfQorCisKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZXZhbHVhdGUgdGhlIHR3byBkaWdpdCB5ZWFyIHNwZWMgKCV5KQorCSAqIGxhc3QgYXMgd2UgY2FuIGdldCBhIGNlbnR1cnkgc3BlYyAoJUMpIGF0IGFueSB0aW1lLgorCSAqLworCWlmIChyZWx5ZWFyICE9IC0xKSB7CisJCWlmIChjZW50dXJ5ID09IFRNX1lFQVJfQkFTRSkgeworCQkJaWYgKHJlbHllYXIgPD0gNjgpCisJCQkJdG0tPnRtX3llYXIgPSByZWx5ZWFyICsgMjAwMCAtIFRNX1lFQVJfQkFTRTsKKwkJCWVsc2UKKwkJCQl0bS0+dG1feWVhciA9IHJlbHllYXIgKyAxOTAwIC0gVE1fWUVBUl9CQVNFOworCQl9IGVsc2UgeworCQkJdG0tPnRtX3llYXIgPSByZWx5ZWFyICsgY2VudHVyeSAtIFRNX1lFQVJfQkFTRTsKKwkJfQorCX0KKworCXJldHVybiAoKGNoYXIgKilicCk7Cit9CisKKworc3RhdGljIGludAorX2NvbnZfbnVtKGNvbnN0IHVuc2lnbmVkIGNoYXIgKipidWYsIGludCAqZGVzdCwgaW50IGxsaW0sIGludCB1bGltKQoreworCWludCByZXN1bHQgPSAwOworCWludCBydWxpbSA9IHVsaW07CisKKwlpZiAoKipidWYgPCAnMCcgfHwgKipidWYgPiAnOScpCisJCXJldHVybiAoMCk7CisKKwkvKiB3ZSB1c2UgcnVsaW0gdG8gYnJlYWsgb3V0IG9mIHRoZSBsb29wIHdoZW4gd2UgcnVuIG91dCBvZiBkaWdpdHMgKi8KKwlkbyB7CisJCXJlc3VsdCAqPSAxMDsKKwkJcmVzdWx0ICs9ICooKmJ1ZikrKyAtICcwJzsKKwkJcnVsaW0gLz0gMTA7CisJfSB3aGlsZSAoKHJlc3VsdCAqIDEwIDw9IHVsaW0pICYmIHJ1bGltICYmICoqYnVmID49ICcwJyAmJiAqKmJ1ZiA8PSAnOScpOworCisJaWYgKHJlc3VsdCA8IGxsaW0gfHwgcmVzdWx0ID4gdWxpbSkKKwkJcmV0dXJuICgwKTsKKworCSpkZXN0ID0gcmVzdWx0OworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3R6Y29kZS90emZpbGUuaCBiL2xpYmMvdHpjb2RlL3R6ZmlsZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4MDY4MmUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3R6Y29kZS90emZpbGUuaApAQCAtMCwwICsxLDE4MCBAQAorI2lmbmRlZiBUWkZJTEVfSAorCisjZGVmaW5lIFRaRklMRV9ICisKKy8qCisqKiBUaGlzIGZpbGUgaXMgaW4gdGhlIHB1YmxpYyBkb21haW4sIHNvIGNsYXJpZmllZCBhcyBvZgorKiogMTk5Ni0wNi0wNSBieSBBcnRodXIgRGF2aWQgT2xzb24uCisqLworCisvKgorKiogVGhpcyBoZWFkZXIgaXMgZm9yIHVzZSBPTkxZIHdpdGggdGhlIHRpbWUgY29udmVyc2lvbiBjb2RlLgorKiogVGhlcmUgaXMgbm8gZ3VhcmFudGVlIHRoYXQgaXQgd2lsbCByZW1haW4gdW5jaGFuZ2VkLAorKiogb3IgdGhhdCBpdCB3aWxsIHJlbWFpbiBhdCBhbGwuCisqKiBEbyBOT1QgY29weSBpdCB0byBhbnkgc3lzdGVtIGluY2x1ZGUgZGlyZWN0b3J5LgorKiogVGhhbmsgeW91IQorKi8KKworLyoKKyoqIElECisqLworCisjaWZuZGVmIGxpbnQKKyNpZm5kZWYgTk9JRAorc3RhdGljIGNoYXIJdHpmaWxlaGlkW10gPSAiQCgjKXR6ZmlsZS5oCTguMSI7CisjZW5kaWYgLyogIWRlZmluZWQgTk9JRCAqLworI2VuZGlmIC8qICFkZWZpbmVkIGxpbnQgKi8KKworLyoKKyoqIEluZm9ybWF0aW9uIGFib3V0IHRpbWUgem9uZSBmaWxlcy4KKyovCisKKyNpZm5kZWYgVFpESVIKKyNkZWZpbmUgVFpESVIgIi9zeXN0ZW0vdXNyL3NoYXJlL3pvbmVpbmZvIiAvKiBUaW1lIHpvbmUgb2JqZWN0IGZpbGUgZGlyZWN0b3J5ICovCisjZW5kaWYgLyogIWRlZmluZWQgVFpESVIgKi8KKworI2lmbmRlZiBUWkRFRkFVTFQKKyNkZWZpbmUgVFpERUZBVUxUCSJsb2NhbHRpbWUiCisjZW5kaWYgLyogIWRlZmluZWQgVFpERUZBVUxUICovCisKKyNpZm5kZWYgVFpERUZSVUxFUworI2RlZmluZSBUWkRFRlJVTEVTCSJwb3NpeHJ1bGVzIgorI2VuZGlmIC8qICFkZWZpbmVkIFRaREVGUlVMRVMgKi8KKworLyoKKyoqIEVhY2ggZmlsZSBiZWdpbnMgd2l0aC4gLiAuCisqLworCisjZGVmaW5lCVRaX01BR0lDCSJUWmlmIgorCitzdHJ1Y3QgdHpoZWFkIHsKKwljaGFyCXR6aF9tYWdpY1s0XTsJCS8qIFRaX01BR0lDICovCisJY2hhcgl0emhfdmVyc2lvblsxXTsJCS8qICdcMCcgb3IgJzInIGFzIG9mIDIwMDUgKi8KKwljaGFyCXR6aF9yZXNlcnZlZFsxNV07CS8qIHJlc2VydmVkLS1tdXN0IGJlIHplcm8gKi8KKwljaGFyCXR6aF90dGlzZ210Y250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF90dGlzc3RkY250WzRdOwkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnMuIHRpbWUgZmxhZ3MgKi8KKwljaGFyCXR6aF9sZWFwY250WzRdOwkJLyogY29kZWQgbnVtYmVyIG9mIGxlYXAgc2Vjb25kcyAqLworCWNoYXIJdHpoX3RpbWVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgdHJhbnNpdGlvbiB0aW1lcyAqLworCWNoYXIJdHpoX3R5cGVjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgbG9jYWwgdGltZSB0eXBlcyAqLworCWNoYXIJdHpoX2NoYXJjbnRbNF07CQkvKiBjb2RlZCBudW1iZXIgb2YgYWJici4gY2hhcnMgKi8KK307CisKKy8qCisqKiAuIC4gLmZvbGxvd2VkIGJ5LiAuIC4KKyoqCisqKgl0emhfdGltZWNudCAoY2hhciBbNF0pcwkJY29kZWQgdHJhbnNpdGlvbiB0aW1lcyBhIGxhIHRpbWUoMikKKyoqCXR6aF90aW1lY250ICh1bnNpZ25lZCBjaGFyKXMJdHlwZXMgb2YgbG9jYWwgdGltZSBzdGFydGluZyBhdCBhYm92ZQorKioJdHpoX3R5cGVjbnQgcmVwZXRpdGlvbnMgb2YKKyoqCQlvbmUgKGNoYXIgWzRdKQkJY29kZWQgVVRDIG9mZnNldCBpbiBzZWNvbmRzCisqKgkJb25lICh1bnNpZ25lZCBjaGFyKQl1c2VkIHRvIHNldCB0bV9pc2RzdAorKioJCW9uZSAodW5zaWduZWQgY2hhcikJdGhhdCdzIGFuIGFiYnJldmlhdGlvbiBsaXN0IGluZGV4CisqKgl0emhfY2hhcmNudCAoY2hhcilzCQknXDAnLXRlcm1pbmF0ZWQgem9uZSBhYmJyZXZpYXRpb25zCisqKgl0emhfbGVhcGNudCByZXBldGl0aW9ucyBvZgorKioJCW9uZSAoY2hhciBbNF0pCQljb2RlZCBsZWFwIHNlY29uZCB0cmFuc2l0aW9uIHRpbWVzCisqKgkJb25lIChjaGFyIFs0XSkJCXRvdGFsIGNvcnJlY3Rpb24gYWZ0ZXIgYWJvdmUKKyoqCXR6aF90dGlzc3RkY250IChjaGFyKXMJCWluZGV4ZWQgYnkgdHlwZTsgaWYgVFJVRSwgdHJhbnNpdGlvbgorKioJCQkJCXRpbWUgaXMgc3RhbmRhcmQgdGltZSwgaWYgRkFMU0UsCisqKgkJCQkJdHJhbnNpdGlvbiB0aW1lIGlzIHdhbGwgY2xvY2sgdGltZQorKioJCQkJCWlmIGFic2VudCwgdHJhbnNpdGlvbiB0aW1lcyBhcmUKKyoqCQkJCQlhc3N1bWVkIHRvIGJlIHdhbGwgY2xvY2sgdGltZQorKioJdHpoX3R0aXNnbXRjbnQgKGNoYXIpcwkJaW5kZXhlZCBieSB0eXBlOyBpZiBUUlVFLCB0cmFuc2l0aW9uCisqKgkJCQkJdGltZSBpcyBVVEMsIGlmIEZBTFNFLAorKioJCQkJCXRyYW5zaXRpb24gdGltZSBpcyBsb2NhbCB0aW1lCisqKgkJCQkJaWYgYWJzZW50LCB0cmFuc2l0aW9uIHRpbWVzIGFyZQorKioJCQkJCWFzc3VtZWQgdG8gYmUgbG9jYWwgdGltZQorKi8KKworLyoKKyoqIElmIHR6aF92ZXJzaW9uIGlzICcyJyBvciBncmVhdGVyLCB0aGUgYWJvdmUgaXMgZm9sbG93ZWQgYnkgYSBzZWNvbmQgaW5zdGFuY2UKKyoqIG9mIHR6aGVhZCBhbmQgYSBzZWNvbmQgaW5zdGFuY2Ugb2YgdGhlIGRhdGEgaW4gd2hpY2ggZWFjaCBjb2RlZCB0cmFuc2l0aW9uCisqKiB0aW1lIHVzZXMgOCByYXRoZXIgdGhhbiA0IGNoYXJzLAorKiogdGhlbiBhIFBPU0lYLVRaLWVudmlyb25tZW50LXZhcmlhYmxlLXN0eWxlIHN0cmluZyBmb3IgdXNlIGluIGhhbmRsaW5nCisqKiBpbnN0YW50cyBhZnRlciB0aGUgbGFzdCB0cmFuc2l0aW9uIHRpbWUgc3RvcmVkIGluIHRoZSBmaWxlCisqKiAod2l0aCBub3RoaW5nIGJldHdlZW4gdGhlIG5ld2xpbmVzIGlmIHRoZXJlIGlzIG5vIFBPU0lYIHJlcHJlc2VudGF0aW9uIGZvcgorKiogc3VjaCBpbnN0YW50cykuCisqLworCisvKgorKiogSW4gdGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24sICJ0enNldCgpIiByZWZ1c2VzIHRvIGRlYWwgd2l0aCBmaWxlcyB0aGF0CisqKiBleGNlZWQgYW55IG9mIHRoZSBsaW1pdHMgYmVsb3cuCisqLworCisjaWZuZGVmIFRaX01BWF9USU1FUworI2RlZmluZSBUWl9NQVhfVElNRVMJMTIwMAorI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9USU1FUyAqLworCisjaWZuZGVmIFRaX01BWF9UWVBFUworI2lmbmRlZiBOT1NPTEFSCisjZGVmaW5lIFRaX01BWF9UWVBFUwkyNTYgLyogTGltaXRlZCBieSB3aGF0ICh1bnNpZ25lZCBjaGFyKSdzIGNhbiBob2xkICovCisjZW5kaWYgLyogIWRlZmluZWQgTk9TT0xBUiAqLworI2lmZGVmIE5PU09MQVIKKy8qCisqKiBNdXN0IGJlIGF0IGxlYXN0IDE0IGZvciBFdXJvcGUvUmlnYSBhcyBvZiBKYW4gMTIgMTk5NSwKKyoqIGFzIG5vdGVkIGJ5IEVhcmwgQ2hldy4KKyovCisjZGVmaW5lIFRaX01BWF9UWVBFUwkyMAkvKiBNYXhpbXVtIG51bWJlciBvZiBsb2NhbCB0aW1lIHR5cGVzICovCisjZW5kaWYgLyogIWRlZmluZWQgTk9TT0xBUiAqLworI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9UWVBFUyAqLworCisjaWZuZGVmIFRaX01BWF9DSEFSUworI2RlZmluZSBUWl9NQVhfQ0hBUlMJNTAJLyogTWF4aW11bSBudW1iZXIgb2YgYWJicmV2aWF0aW9uIGNoYXJhY3RlcnMgKi8KKwkJCQkvKiAobGltaXRlZCBieSB3aGF0IHVuc2lnbmVkIGNoYXJzIGNhbiBob2xkKSAqLworI2VuZGlmIC8qICFkZWZpbmVkIFRaX01BWF9DSEFSUyAqLworCisjaWZuZGVmIFRaX01BWF9MRUFQUworI2RlZmluZSBUWl9NQVhfTEVBUFMJNTAJLyogTWF4aW11bSBudW1iZXIgb2YgbGVhcCBzZWNvbmQgY29ycmVjdGlvbnMgKi8KKyNlbmRpZiAvKiAhZGVmaW5lZCBUWl9NQVhfTEVBUFMgKi8KKworI2RlZmluZSBTRUNTUEVSTUlOCTYwCisjZGVmaW5lIE1JTlNQRVJIT1VSCTYwCisjZGVmaW5lIEhPVVJTUEVSREFZCTI0CisjZGVmaW5lIERBWVNQRVJXRUVLCTcKKyNkZWZpbmUgREFZU1BFUk5ZRUFSCTM2NQorI2RlZmluZSBEQVlTUEVSTFlFQVIJMzY2CisjZGVmaW5lIFNFQ1NQRVJIT1VSCShTRUNTUEVSTUlOICogTUlOU1BFUkhPVVIpCisjZGVmaW5lIFNFQ1NQRVJEQVkJKChsb25nKSBTRUNTUEVSSE9VUiAqIEhPVVJTUEVSREFZKQorI2RlZmluZSBNT05TUEVSWUVBUgkxMgorCisjZGVmaW5lIFRNX1NVTkRBWQkwCisjZGVmaW5lIFRNX01PTkRBWQkxCisjZGVmaW5lIFRNX1RVRVNEQVkJMgorI2RlZmluZSBUTV9XRURORVNEQVkJMworI2RlZmluZSBUTV9USFVSU0RBWQk0CisjZGVmaW5lIFRNX0ZSSURBWQk1CisjZGVmaW5lIFRNX1NBVFVSREFZCTYKKworI2RlZmluZSBUTV9KQU5VQVJZCTAKKyNkZWZpbmUgVE1fRkVCUlVBUlkJMQorI2RlZmluZSBUTV9NQVJDSAkyCisjZGVmaW5lIFRNX0FQUklMCTMKKyNkZWZpbmUgVE1fTUFZCQk0CisjZGVmaW5lIFRNX0pVTkUJCTUKKyNkZWZpbmUgVE1fSlVMWQkJNgorI2RlZmluZSBUTV9BVUdVU1QJNworI2RlZmluZSBUTV9TRVBURU1CRVIJOAorI2RlZmluZSBUTV9PQ1RPQkVSCTkKKyNkZWZpbmUgVE1fTk9WRU1CRVIJMTAKKyNkZWZpbmUgVE1fREVDRU1CRVIJMTEKKworI2RlZmluZSBUTV9ZRUFSX0JBU0UJMTkwMAorCisjZGVmaW5lIEVQT0NIX1lFQVIJMTk3MAorI2RlZmluZSBFUE9DSF9XREFZCVRNX1RIVVJTREFZCisKKyNkZWZpbmUgaXNsZWFwKHkpICgoKHkpICUgNCkgPT0gMCAmJiAoKCh5KSAlIDEwMCkgIT0gMCB8fCAoKHkpICUgNDAwKSA9PSAwKSkKKworLyoKKyoqIFNpbmNlIGV2ZXJ5dGhpbmcgaW4gaXNsZWFwIGlzIG1vZHVsbyA0MDAgKG9yIGEgZmFjdG9yIG9mIDQwMCksIHdlIGtub3cgdGhhdAorKioJaXNsZWFwKHkpID09IGlzbGVhcCh5ICUgNDAwKQorKiogYW5kIHNvCisqKglpc2xlYXAoYSArIGIpID09IGlzbGVhcCgoYSArIGIpICUgNDAwKQorKiogb3IKKyoqCWlzbGVhcChhICsgYikgPT0gaXNsZWFwKGEgJSA0MDAgKyBiICUgNDAwKQorKiogVGhpcyBpcyB0cnVlIGV2ZW4gaWYgJSBtZWFucyBtb2R1bG8gcmF0aGVyIHRoYW4gRm9ydHJhbiByZW1haW5kZXIKKyoqICh3aGljaCBpcyBhbGxvd2VkIGJ5IEM4OSBidXQgbm90IEM5OSkuCisqKiBXZSB1c2UgdGhpcyB0byBhdm9pZCBhZGRpdGlvbiBvdmVyZmxvdyBwcm9ibGVtcy4KKyovCisKKyNkZWZpbmUgaXNsZWFwX3N1bShhLCBiKQlpc2xlYXAoKGEpICUgNDAwICsgKGIpICUgNDAwKQorCisjZW5kaWYgLyogIWRlZmluZWQgVFpGSUxFX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Fib3J0LmMgYi9saWJjL3VuaXN0ZC9hYm9ydC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjMyOTEyODcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9hYm9ydC5jCkBAIC0wLDAgKzEsODQgQEAKKy8qCSRPcGVuQlNEOiBhYm9ydC5jLHYgMS4xNCAyMDA1LzA4LzA4IDA4OjA1OjM2IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg1IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlICJ0aHJlYWRfcHJpdmF0ZS5oIgorI2luY2x1ZGUgImF0ZXhpdC5oIgorCit2b2lkCithYm9ydCh2b2lkKQoreworCXN0cnVjdCBhdGV4aXQgKnAgPSBfX2F0ZXhpdDsKKwlzdGF0aWMgaW50IGNsZWFudXBfY2FsbGVkID0gMDsKKwlzaWdzZXRfdCBtYXNrOworCisgIAorCXNpZ2ZpbGxzZXQoJm1hc2spOworCS8qCisJICogZG9uJ3QgYmxvY2sgU0lHQUJSVCB0byBnaXZlIGFueSBoYW5kbGVyIGEgY2hhbmNlOyB3ZSBpZ25vcmUKKwkgKiBhbnkgZXJyb3JzIC0tIFgzMTFKIGRvZXNuJ3QgYWxsb3cgYWJvcnQgdG8gcmV0dXJuIGFueXdheS4KKwkgKi8KKwlzaWdkZWxzZXQoJm1hc2ssIFNJR0FCUlQpOworCSh2b2lkKXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmbWFzaywgKHNpZ3NldF90ICopTlVMTCk7CisKKwkvKgorCSAqIFBPU0lYIHJlcXVpcmVzIHdlIGZsdXNoIHN0ZGlvIGJ1ZmZlcnMgb24gYWJvcnQKKwkgKi8KKwlpZiAoY2xlYW51cF9jYWxsZWQgPT0gMCkgeworCQl3aGlsZSAocCAhPSBOVUxMICYmIHAtPm5leHQgIT0gTlVMTCkKKwkJCXAgPSBwLT5uZXh0OworCQlpZiAocCAhPSBOVUxMICYmIHAtPmZuc1swXSAhPSBOVUxMKSB7CisJCQljbGVhbnVwX2NhbGxlZCA9IDE7CisJCQkoKnAtPmZuc1swXSkoKTsKKwkJfQorCX0KKworCSh2b2lkKWtpbGwoZ2V0cGlkKCksIFNJR0FCUlQpOworCisJLyoKKwkgKiBpZiBTSUdBQlJUIGlnbm9yZWQsIG9yIGNhdWdodCBhbmQgdGhlIGhhbmRsZXIgcmV0dXJucywgZG8KKwkgKiBpdCBhZ2Fpbiwgb25seSBoYXJkZXIuCisJICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHN0cnVjdCBzaWdhY3Rpb24gc2E7CisKKyAgICAgICAgICAgIHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMOworICAgICAgICAgICAgc2Euc2FfZmxhZ3MgICA9IFNBX1JFU1RBUlQ7CisgICAgICAgICAgICBzaWdlbXB0eXNldCgmc2Euc2FfbWFzayk7CisKKyAgICAgICAgICAgICh2b2lkKXNpZ2FjdGlvbiggU0lHQUJSVCwgJnNhLCAmc2EgKTsKKyAgICAgICAgfQorCisJKHZvaWQpc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZtYXNrLCAoc2lnc2V0X3QgKilOVUxMKTsKKwkodm9pZClraWxsKGdldHBpZCgpLCBTSUdBQlJUKTsKKwlfZXhpdCgxKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2FsYXJtLmMgYi9saWJjL3VuaXN0ZC9hbGFybS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAxODYzYTQKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9hbGFybS5jCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODMsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaWYgZGVmaW5lZChMSUJDX1NDQ1MpICYmICFkZWZpbmVkKGxpbnQpCitzdGF0aWMgY2hhciBzY2NzaWRbXSA9ICJAKCMpYWxhcm0uYwk4LjEgKEJlcmtlbGV5KSA2LzQvOTMiOworI2VuZGlmIC8qIExJQkNfU0NDUyBhbmQgbm90IGxpbnQgKi8KKyNpbmNsdWRlIDxzeXMvY2RlZnMuaD4KKy8vX19GQlNESUQoIiRGcmVlQlNEOiAvcmVwb21hbi9yL25jdnMvc3JjL2xpYi9saWJjL2dlbi9hbGFybS5jLHYgMS4zIDIwMDcvMDEvMDkgMDA6Mjc6NTMgaW1wIEV4cCAkIik7CisKKy8qCisgKiBCYWNrd2FyZHMgY29tcGF0aWJsZSBhbGFybS4KKyAqLworI2luY2x1ZGUgPHN5cy90aW1lLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK3Vuc2lnbmVkIGludAorYWxhcm0oc2VjcykKKwl1bnNpZ25lZCBpbnQgc2VjczsKK3sKKwlzdHJ1Y3QgaXRpbWVydmFsIGl0LCBvaXR2OworCXN0cnVjdCBpdGltZXJ2YWwgKml0cCA9ICZpdDsKKworICAgIGl0cC0+aXRfaW50ZXJ2YWwudHZfdXNlYyA9IDA7CisgICAgaXRwLT5pdF9pbnRlcnZhbC50dl9zZWMgPSAwOworCWl0cC0+aXRfdmFsdWUudHZfc2VjID0gc2VjczsKKwlpdHAtPml0X3ZhbHVlLnR2X3VzZWMgPSAwOworCWlmIChzZXRpdGltZXIoSVRJTUVSX1JFQUwsIGl0cCwgJm9pdHYpIDwgMCkKKwkJcmV0dXJuICgtMSk7CisJaWYgKG9pdHYuaXRfdmFsdWUudHZfdXNlYykKKwkJb2l0di5pdF92YWx1ZS50dl9zZWMrKzsKKwlyZXR1cm4gKG9pdHYuaXRfdmFsdWUudHZfc2VjKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2Jyay5jIGIvbGliYy91bmlzdGQvYnJrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYmYyZjEwOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2Jyay5jCkBAIC0wLDAgKzEsNDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KKworLyogc2hhcmVkIHdpdGggc2Jyay5jICovCitjaGFyICpfX2Jpb25pY19icms7CisKK2ludCBicmsodm9pZCogIGVuZF9kYXRhKQoreworICAgIGNoYXIqICBuZXdfYnJrID0gX19icmsoIGVuZF9kYXRhICk7CisKKyAgICBpZiAobmV3X2JyayAhPSBlbmRfZGF0YSkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgX19iaW9uaWNfYnJrID0gbmV3X2JyazsKKyAgCisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvY3JlYXQuYyBiL2xpYmMvdW5pc3RkL2NyZWF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWIxNDQ2NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2NyZWF0LmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGZjbnRsLmg+CisKK2ludCBjcmVhdChjb25zdCBjaGFyKiAgcGF0aG5hbWUsIG1vZGVfdCAgbW9kZSkKK3sKKyAgICByZXR1cm4gb3BlbihwYXRobmFtZSwgT19XUk9OTFl8T19UUlVOQ3xPX0NSRUFULCBtb2RlKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2RhZW1vbi5jIGIvbGliYy91bmlzdGQvZGFlbW9uLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE4MWQxNgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2RhZW1vbi5jCkBAIC0wLDAgKzEsNjggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQgIGRhZW1vbiggaW50ICBub2NoZGlyLCBpbnQgIG5vY2xvc2UgKQoreworICAgcGlkX3QgIHBpZDsKKworICAgaWYgKCAhbm9jaGRpciAmJiBjaGRpcigiLyIpICE9IDAgKQorICAgICAgIHJldHVybiAtMTsKKyAgIAorICAgaWYgKCAhbm9jbG9zZSApCisgICB7CisgICAgIGludCAgZmQgPSBvcGVuKCIvZGV2L251bGwiLCBPX1JEV1IpOworCisgICAgIGlmICggZmQgPCAwICkKKyAgICAgIHJldHVybiAtMTsKKworICAgICBpZiAoIGR1cDIoIGZkLCAwICkgPCAwIHx8CisJICBkdXAyKCBmZCwgMSApIDwgMCB8fAorICAgICAgICAgIGR1cDIoIGZkLCAyICkgPCAwICkgCisgICAgIHsKKyAgICAgICBjbG9zZShmZCk7CisgICAgICByZXR1cm4gLTE7CisgICAgIH0KKyAgICAgY2xvc2UoZmQpOworICB9CisgIAorICAgcGlkID0gZm9yaygpOworICAgaWYgKHBpZCA8IDApCisgICAgcmV0dXJuIC0xOworCisgICBpZiAocGlkID4gMCkKKyAgICBfZXhpdCgwKTsKKworICAgaWYgKCBzZXRzaWQoKSA8IDAgKQorICAgICByZXR1cm4gLTE7CisKKyAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9leGVjLmMgYi9saWJjL3VuaXN0ZC9leGVjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uY2JiOThiMwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2V4ZWMuYwpAQCAtMCwwICsxLDI0NCBAQAorLyoJJE9wZW5CU0Q6IGV4ZWMuYyx2IDEuMTggMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyotCisgKiBDb3B5cmlnaHQgKGMpIDE5OTEsIDE5OTMKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3BhcmFtLmg+CisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c3lzL3Vpby5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPGFsbG9jYS5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKK2ludAorZXhlY2woY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXJnLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICoqYXJndjsKKwlpbnQgbjsKKworCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCXdoaWxlICh2YV9hcmcoYXAsIGNoYXIgKikgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJYXJndiA9IGFsbG9jYSgobiArIDEpICogc2l6ZW9mKCphcmd2KSk7CisJaWYgKGFyZ3YgPT0gTlVMTCkgeworCQllcnJubyA9IEVOT01FTTsKKwkJcmV0dXJuICgtMSk7CisJfQorCXZhX3N0YXJ0KGFwLCBhcmcpOworCW4gPSAxOworCWFyZ3ZbMF0gPSAoY2hhciAqKWFyZzsKKwl3aGlsZSAoKGFyZ3Zbbl0gPSB2YV9hcmcoYXAsIGNoYXIgKikpICE9IE5VTEwpCisJCW4rKzsKKwl2YV9lbmQoYXApOworCXJldHVybiAoZXhlY3ZlKG5hbWUsIGFyZ3YsIGVudmlyb24pKTsKK30KKworaW50CitleGVjbGUoY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqYXJnLCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKwljaGFyICoqYXJndiwgKiplbnZwOworCWludCBuOworCisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKKwlpZiAoYXJndiA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJYXJndlswXSA9IChjaGFyICopYXJnOworCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKKwkJbisrOworCWVudnAgPSB2YV9hcmcoYXAsIGNoYXIgKiopOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChleGVjdmUobmFtZSwgYXJndiwgZW52cCkpOworfQorCitpbnQKK2V4ZWNscChjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICphcmcsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCWNoYXIgKiphcmd2OworCWludCBuOworCisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJd2hpbGUgKHZhX2FyZyhhcCwgY2hhciAqKSAhPSBOVUxMKQorCQluKys7CisJdmFfZW5kKGFwKTsKKwlhcmd2ID0gYWxsb2NhKChuICsgMSkgKiBzaXplb2YoKmFyZ3YpKTsKKwlpZiAoYXJndiA9PSBOVUxMKSB7CisJCWVycm5vID0gRU5PTUVNOworCQlyZXR1cm4gKC0xKTsKKwl9CisJdmFfc3RhcnQoYXAsIGFyZyk7CisJbiA9IDE7CisJYXJndlswXSA9IChjaGFyICopYXJnOworCXdoaWxlICgoYXJndltuXSA9IHZhX2FyZyhhcCwgY2hhciAqKSkgIT0gTlVMTCkKKwkJbisrOworCXZhX2VuZChhcCk7CisJcmV0dXJuIChleGVjdnAobmFtZSwgYXJndikpOworfQorCitpbnQKK2V4ZWN2KGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKiBjb25zdCAqYXJndikKK3sKKwkodm9pZClleGVjdmUobmFtZSwgYXJndiwgZW52aXJvbik7CisJcmV0dXJuICgtMSk7Cit9CisKK2ludAorZXhlY3ZwKGNvbnN0IGNoYXIgKm5hbWUsIGNoYXIgKiBjb25zdCAqYXJndikKK3sKKwljaGFyICoqbWVtcDsKKwlpbnQgY250LCBscCwgbG4sIGxlbjsKKwljaGFyICpwOworCWludCBlYWNjZXMgPSAwOworCWNoYXIgKmJwLCAqY3VyLCAqcGF0aCwgYnVmW01BWFBBVEhMRU5dOworCisJLyoKKwkgKiBEbyBub3QgYWxsb3cgbnVsbCBuYW1lCisJICovCisJaWYgKG5hbWUgPT0gTlVMTCB8fCAqbmFtZSA9PSAnXDAnKSB7CisJCWVycm5vID0gRU5PRU5UOworCQlyZXR1cm4gKC0xKTsKKyAJfQorCisJLyogSWYgaXQncyBhbiBhYnNvbHV0ZSBvciByZWxhdGl2ZSBwYXRoIG5hbWUsIGl0J3MgZWFzeS4gKi8KKwlpZiAoc3RyY2hyKG5hbWUsICcvJykpIHsKKwkJYnAgPSAoY2hhciAqKW5hbWU7CisJCWN1ciA9IHBhdGggPSBOVUxMOworCQlnb3RvIHJldHJ5OworCX0KKwlicCA9IGJ1ZjsKKworCS8qIEdldCB0aGUgcGF0aCB3ZSdyZSBzZWFyY2hpbmcuICovCisJaWYgKCEocGF0aCA9IGdldGVudigiUEFUSCIpKSkKKwkJcGF0aCA9IF9QQVRIX0RFRlBBVEg7CisJbGVuID0gc3RybGVuKHBhdGgpICsgMTsKKwljdXIgPSBhbGxvY2EobGVuKTsKKwlpZiAoY3VyID09IE5VTEwpIHsKKwkJZXJybm8gPSBFTk9NRU07CisJCXJldHVybiAoLTEpOworCX0KKwlzdHJsY3B5KGN1ciwgcGF0aCwgbGVuKTsKKwlwYXRoID0gY3VyOworCXdoaWxlICgocCA9IHN0cnNlcCgmY3VyLCAiOiIpKSkgeworCQkvKgorCQkgKiBJdCdzIGEgU0hFTEwgcGF0aCAtLSBkb3VibGUsIGxlYWRpbmcgYW5kIHRyYWlsaW5nIGNvbG9ucworCQkgKiBtZWFuIHRoZSBjdXJyZW50IGRpcmVjdG9yeS4KKwkJICovCisJCWlmICghKnApIHsKKwkJCXAgPSAiLiI7CisJCQlscCA9IDE7CisJCX0gZWxzZQorCQkJbHAgPSBzdHJsZW4ocCk7CisJCWxuID0gc3RybGVuKG5hbWUpOworCisJCS8qCisJCSAqIElmIHRoZSBwYXRoIGlzIHRvbyBsb25nIGNvbXBsYWluLiAgVGhpcyBpcyBhIHBvc3NpYmxlCisJCSAqIHNlY3VyaXR5IGlzc3VlOyBnaXZlbiBhIHdheSB0byBtYWtlIHRoZSBwYXRoIHRvbyBsb25nCisJCSAqIHRoZSB1c2VyIG1heSBleGVjdXRlIHRoZSB3cm9uZyBwcm9ncmFtLgorCQkgKi8KKwkJaWYgKGxwICsgbG4gKyAyID4gKGludClzaXplb2YoYnVmKSkgeworCQkJc3RydWN0IGlvdmVjIGlvdlszXTsKKworCQkJaW92WzBdLmlvdl9iYXNlID0gImV4ZWN2cDogIjsKKwkJCWlvdlswXS5pb3ZfbGVuID0gODsKKwkJCWlvdlsxXS5pb3ZfYmFzZSA9IHA7CisJCQlpb3ZbMV0uaW92X2xlbiA9IGxwOworCQkJaW92WzJdLmlvdl9iYXNlID0gIjogcGF0aCB0b28gbG9uZ1xuIjsKKwkJCWlvdlsyXS5pb3ZfbGVuID0gMTY7CisJCQkodm9pZCl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAzKTsKKwkJCWNvbnRpbnVlOworCQl9CisJCWJjb3B5KHAsIGJ1ZiwgbHApOworCQlidWZbbHBdID0gJy8nOworCQliY29weShuYW1lLCBidWYgKyBscCArIDEsIGxuKTsKKwkJYnVmW2xwICsgbG4gKyAxXSA9ICdcMCc7CisKK3JldHJ5OgkJKHZvaWQpZXhlY3ZlKGJwLCBhcmd2LCBlbnZpcm9uKTsKKwkJc3dpdGNoKGVycm5vKSB7CisJCWNhc2UgRTJCSUc6CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRUlTRElSOgorCQljYXNlIEVMT09QOgorCQljYXNlIEVOQU1FVE9PTE9ORzoKKwkJY2FzZSBFTk9FTlQ6CisJCQlicmVhazsKKwkJY2FzZSBFTk9FWEVDOgorCQkJZm9yIChjbnQgPSAwOyBhcmd2W2NudF07ICsrY250KQorCQkJCTsKKwkJCW1lbXAgPSBhbGxvY2EoKGNudCArIDIpICogc2l6ZW9mKGNoYXIgKikpOworCQkJaWYgKG1lbXAgPT0gTlVMTCkKKwkJCQlnb3RvIGRvbmU7CisJCQltZW1wWzBdID0gInNoIjsKKwkJCW1lbXBbMV0gPSBicDsKKwkJCWJjb3B5KGFyZ3YgKyAxLCBtZW1wICsgMiwgY250ICogc2l6ZW9mKGNoYXIgKikpOworCQkJKHZvaWQpZXhlY3ZlKF9QQVRIX0JTSEVMTCwgbWVtcCwgZW52aXJvbik7CisJCQlnb3RvIGRvbmU7CisJCWNhc2UgRU5PTUVNOgorCQkJZ290byBkb25lOworCQljYXNlIEVOT1RESVI6CisJCQlicmVhazsKKwkJY2FzZSBFVFhUQlNZOgorCQkJLyoKKwkJCSAqIFdlIHVzZWQgdG8gcmV0cnkgaGVyZSwgYnV0IHNoKDEpIGRvZXNuJ3QuCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJY2FzZSBFQUNDRVM6CisJCQllYWNjZXMgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlnb3RvIGRvbmU7CisJCX0KKwl9CisJaWYgKGVhY2NlcykKKwkJZXJybm8gPSBFQUNDRVM7CisJZWxzZSBpZiAoIWVycm5vKQorCQllcnJubyA9IEVOT0VOVDsKK2RvbmU6CisJcmV0dXJuICgtMSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9mY250bC5jIGIvbGliYy91bmlzdGQvZmNudGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNDlkYjBhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZmNudGwuYwpAQCAtMCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkYXJnLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworZXh0ZXJuIGludCBfX2ZjbnRsNjQoaW50LCBpbnQsIHZvaWQgKik7CisKK2ludCBmY250bChpbnQgZmQsIGludCBjbWQsIC4uLikKK3sKKyAgICB2YV9saXN0IGFwOworICAgIHZvaWQgKiBhcmc7CisKKyAgICB2YV9zdGFydChhcCwgY21kKTsKKyAgICBhcmcgPSB2YV9hcmcoYXAsIHZvaWQgKik7CisgICAgdmFfZW5kKGFwKTsKKworICAgIHJldHVybiBfX2ZjbnRsNjQoZmQsIGNtZCwgYXJnKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2ZubWF0Y2guYyBiL2xpYmMvdW5pc3RkL2ZubWF0Y2guYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hZDMxYzllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZm5tYXRjaC5jCkBAIC0wLDAgKzEsMjA1IEBACisvKiAgICAgICRPcGVuQlNEOiBmbm1hdGNoLmMsdiAxLjEzIDIwMDYvMDMvMzEgMDU6MzQ6MTQgZGVyYWFkdCBFeHAgJCAgICAgICAgKi8KKworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OSwgMTk5MywgMTk5NAorICogICAgICBUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIEJlcmtlbGV5IGJ5CisgKiBHdWlkbyB2YW4gUm9zc3VtLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisvKgorICogRnVuY3Rpb24gZm5tYXRjaCgpIGFzIHNwZWNpZmllZCBpbiBQT1NJWCAxMDAzLjItMTk5Miwgc2VjdGlvbiBCLjYuCisgKiBDb21wYXJlcyBhIGZpbGVuYW1lIG9yIHBhdGhuYW1lIHRvIGEgcGF0dGVybi4KKyAqLworCisjaW5jbHVkZSA8Y3R5cGUuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGZubWF0Y2guaD4KKworI2RlZmluZSBFT1MgICAgICAgICdcMCcKKworI2RlZmluZSBSQU5HRV9NQVRDSCAgICAgICAgMQorI2RlZmluZSBSQU5HRV9OT01BVENIICAgICAgICAwCisjZGVmaW5lIFJBTkdFX0VSUk9SICAgICAgICAoLTEpCisKK3N0YXRpYyBpbnQgcmFuZ2VtYXRjaChjb25zdCBjaGFyICosIGNoYXIsIGludCwgY2hhciAqKik7CisKK2ludAorZm5tYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjb25zdCBjaGFyICpzdHJpbmcsIGludCBmbGFncykKK3sKKyAgICAgICAgY29uc3QgY2hhciAqc3RyaW5nc3RhcnQ7CisgICAgICAgIGNoYXIgKm5ld3A7CisgICAgICAgIGNoYXIgYywgdGVzdDsKKworICAgICAgICBmb3IgKHN0cmluZ3N0YXJ0ID0gc3RyaW5nOzspCisgICAgICAgICAgICAgICAgc3dpdGNoIChjID0gKnBhdHRlcm4rKykgeworICAgICAgICAgICAgICAgIGNhc2UgRU9TOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmbGFncyAmIEZOTV9MRUFESU5HX0RJUikgJiYgKnN0cmluZyA9PSAnLycpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCpzdHJpbmcgPT0gRU9TID8gMCA6IEZOTV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICBjYXNlICc/JzoKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICgqc3RyaW5nID09IEVPUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnLycgJiYgKGZsYWdzICYgRk5NX1BBVEhOQU1FKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnLicgJiYgKGZsYWdzICYgRk5NX1BFUklPRCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nID09IHN0cmluZ3N0YXJ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyAmIEZOTV9QQVRITkFNRSkgJiYgKihzdHJpbmcgLSAxKSA9PSAnLycpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICArK3N0cmluZzsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGNhc2UgJyonOgorICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICpwYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICAgICAgLyogQ29sbGFwc2UgbXVsdGlwbGUgc3RhcnMuICovCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoYyA9PSAnKicpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqKytwYXR0ZXJuOworCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSAnLicgJiYgKGZsYWdzICYgRk5NX1BFUklPRCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoc3RyaW5nID09IHN0cmluZ3N0YXJ0IHx8CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKChmbGFncyAmIEZOTV9QQVRITkFNRSkgJiYgKihzdHJpbmcgLSAxKSA9PSAnLycpKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIC8qIE9wdGltaXplIGZvciBwYXR0ZXJuIHdpdGggKiBhdCBlbmQgb3IgYmVmb3JlIC8uICovCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA9PSBFT1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsYWdzICYgRk5NX1BBVEhOQU1FKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoKGZsYWdzICYgRk5NX0xFQURJTkdfRElSKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJjaHIoc3RyaW5nLCAnLycpID09IE5VTEwgPworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDogRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoYyA9PSAnLycgJiYgKGZsYWdzICYgRk5NX1BBVEhOQU1FKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHN0cmluZyA9IHN0cmNocihzdHJpbmcsICcvJykpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgICAgICAgICAvKiBHZW5lcmFsIGNhc2UsIHVzZSByZWN1cnNpb24uICovCisgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKHRlc3QgPSAqc3RyaW5nKSAhPSBFT1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFmbm1hdGNoKHBhdHRlcm4sIHN0cmluZywgZmxhZ3MgJiB+Rk5NX1BFUklPRCkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRlc3QgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsrc3RyaW5nOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChGTk1fTk9NQVRDSCk7CisgICAgICAgICAgICAgICAgY2FzZSAnWyc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoKnN0cmluZyA9PSBFT1MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gJy8nICYmIChmbGFncyAmIEZOTV9QQVRITkFNRSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCpzdHJpbmcgPT0gJy4nICYmIChmbGFncyAmIEZOTV9QRVJJT0QpICYmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0cmluZyA9PSBzdHJpbmdzdGFydCB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpICYmICooc3RyaW5nIC0gMSkgPT0gJy8nKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOworCisgICAgICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKHJhbmdlbWF0Y2gocGF0dGVybiwgKnN0cmluZywgZmxhZ3MsICZuZXdwKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBSQU5HRV9FUlJPUjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogbm90IGEgZ29vZCByYW5nZSwgdHJlYXQgYXMgbm9ybWFsIHRleHQgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290byBub3JtYWw7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJBTkdFX01BVENIOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuID0gbmV3cDsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFJBTkdFX05PTUFUQ0g6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlICdcXCc6CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIShmbGFncyAmIEZOTV9OT0VTQ0FQRSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChjID0gKnBhdHRlcm4rKykgPT0gRU9TKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYyA9ICdcXCc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS1wYXR0ZXJuOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICAvKiBGQUxMVEhST1VHSCAqLworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgbm9ybWFsOgorICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMgIT0gKnN0cmluZyAmJiAhKChmbGFncyAmIEZOTV9DQVNFRk9MRCkgJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpID09CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKSpzdHJpbmcpKSkpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoRk5NX05PTUFUQ0gpOworICAgICAgICAgICAgICAgICAgICAgICAgKytzdHJpbmc7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgIC8qIE5PVFJFQUNIRUQgKi8KK30KKworc3RhdGljIGludAorcmFuZ2VtYXRjaChjb25zdCBjaGFyICpwYXR0ZXJuLCBjaGFyIHRlc3QsIGludCBmbGFncywgY2hhciAqKm5ld3ApCit7CisgICAgICAgIGludCBuZWdhdGUsIG9rOworICAgICAgICBjaGFyIGMsIGMyOworCisgICAgICAgIC8qCisgICAgICAgICAqIEEgYnJhY2tldCBleHByZXNzaW9uIHN0YXJ0aW5nIHdpdGggYW4gdW5xdW90ZWQgY2lyY3VtZmxleAorICAgICAgICAgKiBjaGFyYWN0ZXIgcHJvZHVjZXMgdW5zcGVjaWZpZWQgcmVzdWx0cyAoSUVFRSAxMDAzLjItMTk5MiwKKyAgICAgICAgICogMy4xMy4yKS4gIFRoaXMgaW1wbGVtZW50YXRpb24gdHJlYXRzIGl0IGxpa2UgJyEnLCBmb3IKKyAgICAgICAgICogY29uc2lzdGVuY3kgd2l0aCB0aGUgcmVndWxhciBleHByZXNzaW9uIHN5bnRheC4KKyAgICAgICAgICogSi5ULiBDb25rbGluIChjb25rbGluQG5nYWkua2FsZWlkYS5jb20pCisgICAgICAgICAqLworICAgICAgICBpZiAoKG5lZ2F0ZSA9ICgqcGF0dGVybiA9PSAnIScgfHwgKnBhdHRlcm4gPT0gJ14nKSkpCisgICAgICAgICAgICAgICAgKytwYXR0ZXJuOworCisgICAgICAgIGlmIChmbGFncyAmIEZOTV9DQVNFRk9MRCkKKyAgICAgICAgICAgICAgICB0ZXN0ID0gKGNoYXIpdG9sb3dlcigodW5zaWduZWQgY2hhcil0ZXN0KTsKKworICAgICAgICAvKgorICAgICAgICAgKiBBIHJpZ2h0IGJyYWNrZXQgc2hhbGwgbG9zZSBpdHMgc3BlY2lhbCBtZWFuaW5nIGFuZCByZXByZXNlbnQKKyAgICAgICAgICogaXRzZWxmIGluIGEgYnJhY2tldCBleHByZXNzaW9uIGlmIGl0IG9jY3VycyBmaXJzdCBpbiB0aGUgbGlzdC4KKyAgICAgICAgICogLS0gUE9TSVguMiAyLjguMy4yCisgICAgICAgICAqLworICAgICAgICBvayA9IDA7CisgICAgICAgIGMgPSAqcGF0dGVybisrOworICAgICAgICBkbyB7CisgICAgICAgICAgICAgICAgaWYgKGMgPT0gJ1xcJyAmJiAhKGZsYWdzICYgRk5NX05PRVNDQVBFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAqcGF0dGVybisrOworICAgICAgICAgICAgICAgIGlmIChjID09IEVPUykKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoUkFOR0VfRVJST1IpOworICAgICAgICAgICAgICAgIGlmIChjID09ICcvJyAmJiAoZmxhZ3MgJiBGTk1fUEFUSE5BTUUpKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSQU5HRV9OT01BVENIKTsKKyAgICAgICAgICAgICAgICBpZiAoKGZsYWdzICYgRk5NX0NBU0VGT0xEKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGMgPSAoY2hhcil0b2xvd2VyKCh1bnNpZ25lZCBjaGFyKWMpOworICAgICAgICAgICAgICAgIGlmICgqcGF0dGVybiA9PSAnLScKKyAgICAgICAgICAgICAgICAgICAgJiYgKGMyID0gKihwYXR0ZXJuKzEpKSAhPSBFT1MgJiYgYzIgIT0gJ10nKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXR0ZXJuICs9IDI7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYzIgPT0gJ1xcJyAmJiAhKGZsYWdzICYgRk5NX05PRVNDQVBFKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYzIgPSAqcGF0dGVybisrOworICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGMyID09IEVPUykKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChSQU5HRV9FUlJPUik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmxhZ3MgJiBGTk1fQ0FTRUZPTEQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGMyID0gKGNoYXIpdG9sb3dlcigodW5zaWduZWQgY2hhciljMik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYyA8PSB0ZXN0ICYmIHRlc3QgPD0gYzIpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGMgPT0gdGVzdCkKKyAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gMTsKKyAgICAgICAgfSB3aGlsZSAoKGMgPSAqcGF0dGVybisrKSAhPSAnXScpOworCisgICAgICAgICpuZXdwID0gKGNoYXIgKilwYXR0ZXJuOworICAgICAgICByZXR1cm4gKG9rID09IG5lZ2F0ZSA/IFJBTkdFX05PTUFUQ0ggOiBSQU5HRV9NQVRDSCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9mdG9rLmMgYi9saWJjL3VuaXN0ZC9mdG9rLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjM4YmQwYQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2Z0b2suYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL2lwYy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisKK2tleV90ICBmdG9rKGNvbnN0IGNoYXIqICBwYXRoLCBpbnQgIGlkKQoreworICAgIHN0cnVjdCBzdGF0ICAgc3Q7CisKKyAgICBpZiAoIGxzdGF0KHBhdGgsICZzdCkgPCAwICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgcmV0dXJuIChrZXlfdCkoIChzdC5zdF9pbm8gJiAweGZmZmYpIHwgKChzdC5zdF9kZXYgJiAweGZmKSA8PCAxNikgfCAoKGlkICYgMjU1KSA8PCAyNCkgKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldGN3ZC5jIGIvbGliYy91bmlzdGQvZ2V0Y3dkLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWNmODBlOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2dldGN3ZC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworZXh0ZXJuIGludCBfX2dldGN3ZChjaGFyICogYnVmLCBzaXplX3Qgc2l6ZSk7CisKK2NoYXIgKmdldGN3ZChjaGFyICpidWYsIHNpemVfdCBzaXplKQoreworICByZXR1cm4gKCBfX2dldGN3ZChidWYsIHNpemUpIDwgMCApID8gTlVMTCA6IGJ1ZjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldGR0YWJsZXNpemUuYyBiL2xpYmMvdW5pc3RkL2dldGR0YWJsZXNpemUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45MTMxNWE1Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZ2V0ZHRhYmxlc2l6ZS5jCkBAIC0wLDAgKzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KKyNpbmNsdWRlIDxzeXMvc3lzY29uZi5oPgorCitpbnQgZ2V0ZHRhYmxlc2l6ZSgpCit7CisgICAgc3RydWN0IHJsaW1pdCByOworCisgICAgaWYgKGdldHJsaW1pdChSTElNSVRfTk9GSUxFLCAmcikgPCAwKSB7CisgICAgICAgIHJldHVybiBzeXNjb25mKF9TQ19PUEVOX01BWCk7CisgICAgfQorICAgIHJldHVybiByLnJsaW1fY3VyOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0aG9zdG5hbWUuYyBiL2xpYmMvdW5pc3RkL2dldGhvc3RuYW1lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzY5ZDIxZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2dldGhvc3RuYW1lLmMKQEAgLTAsMCArMSw1MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4KKworaW50IGdldGhvc3RuYW1lKGNoYXIqICBidWZmLCBzaXplX3QgIGJ1ZmxlbikKK3sKKyAgICBzdHJ1Y3QgdXRzbmFtZSAgbmFtZTsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0ID0gMDsKKworICAgIHJlc3VsdCA9IHVuYW1lKCZuYW1lKTsKKyAgICBpZiAocmVzdWx0ICE9IC0xKQorICAgIHsKKyAgICAgICAgaW50ICBuYW1lbGVuID0gc3RybGVuKG5hbWUubm9kZW5hbWUpOworCisgICAgICAgIGlmICgoaW50KWJ1ZmxlbiA8IG5hbWVsZW4rMSkgeworICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICAgICAgcmVzdWx0ID0gLTE7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtZW1jcHkoIGJ1ZmYsIG5hbWUubm9kZW5hbWUsIG5hbWVsZW4rMSApOworICB9CisgICAgfQorICAgIHJldHVybiByZXN1bHQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRvcHRfbG9uZy5jIGIvbGliYy91bmlzdGQvZ2V0b3B0X2xvbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYmRmMDFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZ2V0b3B0X2xvbmcuYwpAQCAtMCwwICsxLDUzNyBAQAorLyoJJE9wZW5CU0Q6IGdldG9wdF9sb25nLmMsdiAxLjIwIDIwMDUvMTAvMjUgMTU6NDk6Mzcgam1jIEV4cCAkCSovCisvKgkkTmV0QlNEOiBnZXRvcHRfbG9uZy5jLHYgMS4xNSAyMDAyLzAxLzMxIDIyOjQzOjQwIHR2IEV4cCAkCSovCisKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMDIgVG9kZCBDLiBNaWxsZXIgPFRvZGQuTWlsbGVyQGNvdXJ0ZXNhbi5jb20+CisgKgorICogUGVybWlzc2lvbiB0byB1c2UsIGNvcHksIG1vZGlmeSwgYW5kIGRpc3RyaWJ1dGUgdGhpcyBzb2Z0d2FyZSBmb3IgYW55CisgKiBwdXJwb3NlIHdpdGggb3Igd2l0aG91dCBmZWUgaXMgaGVyZWJ5IGdyYW50ZWQsIHByb3ZpZGVkIHRoYXQgdGhlIGFib3ZlCisgKiBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIGFwcGVhciBpbiBhbGwgY29waWVzLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiIEFORCBUSEUgQVVUSE9SIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQgT0YKKyAqIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKgorICogU3BvbnNvcmVkIGluIHBhcnQgYnkgdGhlIERlZmVuc2UgQWR2YW5jZWQgUmVzZWFyY2ggUHJvamVjdHMKKyAqIEFnZW5jeSAoREFSUEEpIGFuZCBBaXIgRm9yY2UgUmVzZWFyY2ggTGFib3JhdG9yeSwgQWlyIEZvcmNlCisgKiBNYXRlcmllbCBDb21tYW5kLCBVU0FGLCB1bmRlciBhZ3JlZW1lbnQgbnVtYmVyIEYzOTUwMi05OS0xLTA1MTIuCisgKi8KKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAwIFRoZSBOZXRCU0QgRm91bmRhdGlvbiwgSW5jLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBUaGlzIGNvZGUgaXMgZGVyaXZlZCBmcm9tIHNvZnR3YXJlIGNvbnRyaWJ1dGVkIHRvIFRoZSBOZXRCU0QgRm91bmRhdGlvbgorICogYnkgRGlldGVyIEJhcm9uIGFuZCBUaG9tYXMgS2xhdXNuZXIuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKKyAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqICAgICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBOZXRCU0QKKyAqICAgICAgICBGb3VuZGF0aW9uLCBJbmMuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogNC4gTmVpdGhlciB0aGUgbmFtZSBvZiBUaGUgTmV0QlNEIEZvdW5kYXRpb24gbm9yIHRoZSBuYW1lcyBvZiBpdHMKKyAqICAgIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZAorICogICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIE5FVEJTRCBGT1VOREFUSU9OLCBJTkMuIEFORCBDT05UUklCVVRPUlMKKyAqIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRAorICogVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgRk9VTkRBVElPTiBPUiBDT05UUklCVVRPUlMKKyAqIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKKyAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxlcnIuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPGdldG9wdC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisKKyNkZWZpbmUJUkVQTEFDRV9HRVRPUFQJCS8qIHVzZSB0aGlzIGdldG9wdCBhcyB0aGUgc3lzdGVtIGdldG9wdCgzKSAqLworCisjaWZkZWYgUkVQTEFDRV9HRVRPUFQKK2ludAlvcHRlcnIgPSAxOwkJLyogaWYgZXJyb3IgbWVzc2FnZSBzaG91bGQgYmUgcHJpbnRlZCAqLworaW50CW9wdGluZCA9IDE7CQkvKiBpbmRleCBpbnRvIHBhcmVudCBhcmd2IHZlY3RvciAqLworaW50CW9wdG9wdCA9ICc/JzsJCS8qIGNoYXJhY3RlciBjaGVja2VkIGZvciB2YWxpZGl0eSAqLworY2hhciAgICAqb3B0YXJnOwkJLyogYXJndW1lbnQgYXNzb2NpYXRlZCB3aXRoIG9wdGlvbiAqLworI2VuZGlmCitpbnQJb3B0cmVzZXQ7CQkvKiByZXNldCBnZXRvcHQgKi8KKworI2RlZmluZSBQUklOVF9FUlJPUgkoKG9wdGVycikgJiYgKCpvcHRpb25zICE9ICc6JykpCisKKyNkZWZpbmUgRkxBR19QRVJNVVRFCTB4MDEJLyogcGVybXV0ZSBub24tb3B0aW9ucyB0byB0aGUgZW5kIG9mIGFyZ3YgKi8KKyNkZWZpbmUgRkxBR19BTExBUkdTCTB4MDIJLyogdHJlYXQgbm9uLW9wdGlvbnMgYXMgYXJncyB0byBvcHRpb24gIi0xIiAqLworI2RlZmluZSBGTEFHX0xPTkdPTkxZCTB4MDQJLyogb3BlcmF0ZSBhcyBnZXRvcHRfbG9uZ19vbmx5ICovCisKKy8qIHJldHVybiB2YWx1ZXMgKi8KKyNkZWZpbmUJQkFEQ0gJCShpbnQpJz8nCisjZGVmaW5lCUJBREFSRwkJKCgqb3B0aW9ucyA9PSAnOicpID8gKGludCknOicgOiAoaW50KSc/JykKKyNkZWZpbmUJSU5PUkRFUiAJKGludCkxCisKKyNkZWZpbmUJRU1TRwkJIiIKKworc3RhdGljIGludCBnZXRvcHRfaW50ZXJuYWwoaW50LCBjaGFyICogY29uc3QgKiwgY29uc3QgY2hhciAqLAorCQkJICAgY29uc3Qgc3RydWN0IG9wdGlvbiAqLCBpbnQgKiwgaW50KTsKK3N0YXRpYyBpbnQgcGFyc2VfbG9uZ19vcHRpb25zKGNoYXIgKiBjb25zdCAqLCBjb25zdCBjaGFyICosCisJCQkgICAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICosIGludCAqLCBpbnQpOworc3RhdGljIGludCBnY2QoaW50LCBpbnQpOworc3RhdGljIHZvaWQgcGVybXV0ZV9hcmdzKGludCwgaW50LCBpbnQsIGNoYXIgKiBjb25zdCAqKTsKKworc3RhdGljIGNoYXIgKnBsYWNlID0gRU1TRzsgLyogb3B0aW9uIGxldHRlciBwcm9jZXNzaW5nICovCisKKy8qIFhYWDogc2V0IG9wdHJlc2V0IHRvIDEgcmF0aGVyIHRoYW4gdGhlc2UgdHdvICovCitzdGF0aWMgaW50IG5vbm9wdF9zdGFydCA9IC0xOyAvKiBmaXJzdCBub24gb3B0aW9uIGFyZ3VtZW50IChmb3IgcGVybXV0ZSkgKi8KK3N0YXRpYyBpbnQgbm9ub3B0X2VuZCA9IC0xOyAgIC8qIGZpcnN0IG9wdGlvbiBhZnRlciBub24gb3B0aW9ucyAoZm9yIHBlcm11dGUpICovCisKKy8qIEVycm9yIG1lc3NhZ2VzICovCitzdGF0aWMgY29uc3QgY2hhciByZWNhcmdjaGFyW10gPSAib3B0aW9uIHJlcXVpcmVzIGFuIGFyZ3VtZW50IC0tICVjIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJlY2FyZ3N0cmluZ1tdID0gIm9wdGlvbiByZXF1aXJlcyBhbiBhcmd1bWVudCAtLSAlcyI7CitzdGF0aWMgY29uc3QgY2hhciBhbWJpZ1tdID0gImFtYmlndW91cyBvcHRpb24gLS0gJS4qcyI7CitzdGF0aWMgY29uc3QgY2hhciBub2FyZ1tdID0gIm9wdGlvbiBkb2Vzbid0IHRha2UgYW4gYXJndW1lbnQgLS0gJS4qcyI7CitzdGF0aWMgY29uc3QgY2hhciBpbGxvcHRjaGFyW10gPSAidW5rbm93biBvcHRpb24gLS0gJWMiOworc3RhdGljIGNvbnN0IGNoYXIgaWxsb3B0c3RyaW5nW10gPSAidW5rbm93biBvcHRpb24gLS0gJXMiOworCisvKgorICogQ29tcHV0ZSB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgYSBhbmQgYi4KKyAqLworc3RhdGljIGludAorZ2NkKGludCBhLCBpbnQgYikKK3sKKwlpbnQgYzsKKworCWMgPSBhICUgYjsKKwl3aGlsZSAoYyAhPSAwKSB7CisJCWEgPSBiOworCQliID0gYzsKKwkJYyA9IGEgJSBiOworCX0KKworCXJldHVybiAoYik7Cit9CisKKy8qCisgKiBFeGNoYW5nZSB0aGUgYmxvY2sgZnJvbSBub25vcHRfc3RhcnQgdG8gbm9ub3B0X2VuZCB3aXRoIHRoZSBibG9jaworICogZnJvbSBub25vcHRfZW5kIHRvIG9wdF9lbmQgKGtlZXBpbmcgdGhlIHNhbWUgb3JkZXIgb2YgYXJndW1lbnRzCisgKiBpbiBlYWNoIGJsb2NrKS4KKyAqLworc3RhdGljIHZvaWQKK3Blcm11dGVfYXJncyhpbnQgcGFub25vcHRfc3RhcnQsIGludCBwYW5vbm9wdF9lbmQsIGludCBvcHRfZW5kLAorCWNoYXIgKiBjb25zdCAqbmFyZ3YpCit7CisJaW50IGNzdGFydCwgY3ljbGVsZW4sIGksIGosIG5jeWNsZSwgbm5vbm9wdHMsIG5vcHRzLCBwb3M7CisJY2hhciAqc3dhcDsKKworCS8qCisJICogY29tcHV0ZSBsZW5ndGhzIG9mIGJsb2NrcyBhbmQgbnVtYmVyIGFuZCBzaXplIG9mIGN5Y2xlcworCSAqLworCW5ub25vcHRzID0gcGFub25vcHRfZW5kIC0gcGFub25vcHRfc3RhcnQ7CisJbm9wdHMgPSBvcHRfZW5kIC0gcGFub25vcHRfZW5kOworCW5jeWNsZSA9IGdjZChubm9ub3B0cywgbm9wdHMpOworCWN5Y2xlbGVuID0gKG9wdF9lbmQgLSBwYW5vbm9wdF9zdGFydCkgLyBuY3ljbGU7CisKKwlmb3IgKGkgPSAwOyBpIDwgbmN5Y2xlOyBpKyspIHsKKwkJY3N0YXJ0ID0gcGFub25vcHRfZW5kK2k7CisJCXBvcyA9IGNzdGFydDsKKwkJZm9yIChqID0gMDsgaiA8IGN5Y2xlbGVuOyBqKyspIHsKKwkJCWlmIChwb3MgPj0gcGFub25vcHRfZW5kKQorCQkJCXBvcyAtPSBubm9ub3B0czsKKwkJCWVsc2UKKwkJCQlwb3MgKz0gbm9wdHM7CisJCQlzd2FwID0gbmFyZ3ZbcG9zXTsKKwkJCS8qIExJTlRFRCBjb25zdCBjYXN0ICovCisJCQkoKGNoYXIgKiopIG5hcmd2KVtwb3NdID0gbmFyZ3ZbY3N0YXJ0XTsKKwkJCS8qIExJTlRFRCBjb25zdCBjYXN0ICovCisJCQkoKGNoYXIgKiopbmFyZ3YpW2NzdGFydF0gPSBzd2FwOworCQl9CisJfQorfQorCisvKgorICogcGFyc2VfbG9uZ19vcHRpb25zIC0tCisgKglQYXJzZSBsb25nIG9wdGlvbnMgaW4gYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqIFJldHVybnMgLTEgaWYgc2hvcnRfdG9vIGlzIHNldCBhbmQgdGhlIG9wdGlvbiBkb2VzIG5vdCBtYXRjaCBsb25nX29wdGlvbnMuCisgKi8KK3N0YXRpYyBpbnQKK3BhcnNlX2xvbmdfb3B0aW9ucyhjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICppZHgsIGludCBzaG9ydF90b28pCit7CisJY2hhciAqY3VycmVudF9hcmd2LCAqaGFzX2VxdWFsOworCXNpemVfdCBjdXJyZW50X2FyZ3ZfbGVuOworCWludCBpLCBtYXRjaDsKKworCWN1cnJlbnRfYXJndiA9IHBsYWNlOworCW1hdGNoID0gLTE7CisKKwlvcHRpbmQrKzsKKworCWlmICgoaGFzX2VxdWFsID0gc3RyY2hyKGN1cnJlbnRfYXJndiwgJz0nKSkgIT0gTlVMTCkgeworCQkvKiBhcmd1bWVudCBmb3VuZCAoLS1vcHRpb249YXJnKSAqLworCQljdXJyZW50X2FyZ3ZfbGVuID0gaGFzX2VxdWFsIC0gY3VycmVudF9hcmd2OworCQloYXNfZXF1YWwrKzsKKwl9IGVsc2UKKwkJY3VycmVudF9hcmd2X2xlbiA9IHN0cmxlbihjdXJyZW50X2FyZ3YpOworCisJZm9yIChpID0gMDsgbG9uZ19vcHRpb25zW2ldLm5hbWU7IGkrKykgeworCQkvKiBmaW5kIG1hdGNoaW5nIGxvbmcgb3B0aW9uICovCisJCWlmIChzdHJuY21wKGN1cnJlbnRfYXJndiwgbG9uZ19vcHRpb25zW2ldLm5hbWUsCisJCSAgICBjdXJyZW50X2FyZ3ZfbGVuKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChzdHJsZW4obG9uZ19vcHRpb25zW2ldLm5hbWUpID09IGN1cnJlbnRfYXJndl9sZW4pIHsKKwkJCS8qIGV4YWN0IG1hdGNoICovCisJCQltYXRjaCA9IGk7CisJCQlicmVhazsKKwkJfQorCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEga25vd24gc2hvcnQgb3B0aW9uLCBkb24ndCBhbGxvdworCQkgKiBhIHBhcnRpYWwgbWF0Y2ggb2YgYSBzaW5nbGUgY2hhcmFjdGVyLgorCQkgKi8KKwkJaWYgKHNob3J0X3RvbyAmJiBjdXJyZW50X2FyZ3ZfbGVuID09IDEpCisJCQljb250aW51ZTsKKworCQlpZiAobWF0Y2ggPT0gLTEpCS8qIHBhcnRpYWwgbWF0Y2ggKi8KKwkJCW1hdGNoID0gaTsKKwkJZWxzZSB7CisJCQkvKiBhbWJpZ3VvdXMgYWJicmV2aWF0aW9uICovCisJCQlpZiAoUFJJTlRfRVJST1IpCisJCQkJZnByaW50ZihzdGRlcnIsIAorICAgICAgICAgICAgICAgICAgICAgICAgYW1iaWcsIChpbnQpY3VycmVudF9hcmd2X2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGN1cnJlbnRfYXJndik7CisJCQlvcHRvcHQgPSAwOworCQkJcmV0dXJuIChCQURDSCk7CisJCX0KKwl9CisJaWYgKG1hdGNoICE9IC0xKSB7CQkvKiBvcHRpb24gZm91bmQgKi8KKwkJaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSBub19hcmd1bWVudAorCQkgICAgJiYgaGFzX2VxdWFsKSB7CisJCQlpZiAoUFJJTlRfRVJST1IpCisJCQkJZnByaW50ZihzdGRlcnIsCisgICAgICAgICAgICAgICAgICAgICAgICBub2FyZywgKGludCljdXJyZW50X2FyZ3ZfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgY3VycmVudF9hcmd2KTsKKwkJCS8qCisJCQkgKiBYWFg6IEdOVSBzZXRzIG9wdG9wdCB0byB2YWwgcmVnYXJkbGVzcyBvZiBmbGFnCisJCQkgKi8KKwkJCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmZsYWcgPT0gTlVMTCkKKwkJCQlvcHRvcHQgPSBsb25nX29wdGlvbnNbbWF0Y2hdLnZhbDsKKwkJCWVsc2UKKwkJCQlvcHRvcHQgPSAwOworCQkJcmV0dXJuIChCQURBUkcpOworCQl9CisJCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0gcmVxdWlyZWRfYXJndW1lbnQgfHwKKwkJICAgIGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSBvcHRpb25hbF9hcmd1bWVudCkgeworCQkJaWYgKGhhc19lcXVhbCkKKwkJCQlvcHRhcmcgPSBoYXNfZXF1YWw7CisJCQllbHNlIGlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmhhc19hcmcgPT0KKwkJCSAgICByZXF1aXJlZF9hcmd1bWVudCkgeworCQkJCS8qCisJCQkJICogb3B0aW9uYWwgYXJndW1lbnQgZG9lc24ndCB1c2UgbmV4dCBuYXJndgorCQkJCSAqLworCQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZCsrXTsKKwkJCX0KKwkJfQorCQlpZiAoKGxvbmdfb3B0aW9uc1ttYXRjaF0uaGFzX2FyZyA9PSByZXF1aXJlZF9hcmd1bWVudCkKKwkJICAgICYmIChvcHRhcmcgPT0gTlVMTCkpIHsKKwkJCS8qCisJCQkgKiBNaXNzaW5nIGFyZ3VtZW50OyBsZWFkaW5nICc6JyBpbmRpY2F0ZXMgbm8gZXJyb3IKKwkJCSAqIHNob3VsZCBiZSBnZW5lcmF0ZWQuCisJCQkgKi8KKwkJCWlmIChQUklOVF9FUlJPUikKKwkJCQlmcHJpbnRmKHN0ZGVyciwgCisgICAgICAgICAgICAgICAgICAgICAgICByZWNhcmdzdHJpbmcsCisgICAgICAgICAgICAgICAgICAgICAgICBjdXJyZW50X2FyZ3YpOworCQkJLyoKKwkJCSAqIFhYWDogR05VIHNldHMgb3B0b3B0IHRvIHZhbCByZWdhcmRsZXNzIG9mIGZsYWcKKwkJCSAqLworCQkJaWYgKGxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZyA9PSBOVUxMKQorCQkJCW9wdG9wdCA9IGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsOworCQkJZWxzZQorCQkJCW9wdG9wdCA9IDA7CisJCQktLW9wdGluZDsKKwkJCXJldHVybiAoQkFEQVJHKTsKKwkJfQorCX0gZWxzZSB7CQkJLyogdW5rbm93biBvcHRpb24gKi8KKwkJaWYgKHNob3J0X3RvbykgeworCQkJLS1vcHRpbmQ7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoUFJJTlRfRVJST1IpCisJCQlmcHJpbnRmKHN0ZGVyciwgaWxsb3B0c3RyaW5nLCBjdXJyZW50X2FyZ3YpOworCQlvcHRvcHQgPSAwOworCQlyZXR1cm4gKEJBRENIKTsKKwl9CisJaWYgKGlkeCkKKwkJKmlkeCA9IG1hdGNoOworCWlmIChsb25nX29wdGlvbnNbbWF0Y2hdLmZsYWcpIHsKKwkJKmxvbmdfb3B0aW9uc1ttYXRjaF0uZmxhZyA9IGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsOworCQlyZXR1cm4gKDApOworCX0gZWxzZQorCQlyZXR1cm4gKGxvbmdfb3B0aW9uc1ttYXRjaF0udmFsKTsKK30KKworLyoKKyAqIGdldG9wdF9pbnRlcm5hbCAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4gIENhbGxlZCBieSB1c2VyIGxldmVsIHJvdXRpbmVzLgorICovCitzdGF0aWMgaW50CitnZXRvcHRfaW50ZXJuYWwoaW50IG5hcmdjLCBjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorCWNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICppZHgsIGludCBmbGFncykKK3sKKwljaGFyICpvbGk7CQkJCS8qIG9wdGlvbiBsZXR0ZXIgbGlzdCBpbmRleCAqLworCWludCBvcHRjaGFyLCBzaG9ydF90b287CisJc3RhdGljIGludCBwb3NpeGx5X2NvcnJlY3QgPSAtMTsKKworCWlmIChvcHRpb25zID09IE5VTEwpCisJCXJldHVybiAoLTEpOworCisJLyoKKwkgKiBEaXNhYmxlIEdOVSBleHRlbnNpb25zIGlmIFBPU0lYTFlfQ09SUkVDVCBpcyBzZXQgb3Igb3B0aW9ucworCSAqIHN0cmluZyBiZWdpbnMgd2l0aCBhICcrJy4KKwkgKi8KKwlpZiAocG9zaXhseV9jb3JyZWN0ID09IC0xKQorCQlwb3NpeGx5X2NvcnJlY3QgPSAoZ2V0ZW52KCJQT1NJWExZX0NPUlJFQ1QiKSAhPSBOVUxMKTsKKwlpZiAocG9zaXhseV9jb3JyZWN0IHx8ICpvcHRpb25zID09ICcrJykKKwkJZmxhZ3MgJj0gfkZMQUdfUEVSTVVURTsKKwllbHNlIGlmICgqb3B0aW9ucyA9PSAnLScpCisJCWZsYWdzIHw9IEZMQUdfQUxMQVJHUzsKKwlpZiAoKm9wdGlvbnMgPT0gJysnIHx8ICpvcHRpb25zID09ICctJykKKwkJb3B0aW9ucysrOworCisJLyoKKwkgKiBYWFggU29tZSBHTlUgcHJvZ3JhbXMgKGxpa2UgY3ZzKSBzZXQgb3B0aW5kIHRvIDAgaW5zdGVhZCBvZgorCSAqIFhYWCB1c2luZyBvcHRyZXNldC4gIFdvcmsgYXJvdW5kIHRoaXMgYnJhaW5kYW1hZ2UuCisJICovCisJaWYgKG9wdGluZCA9PSAwKQorCQlvcHRpbmQgPSBvcHRyZXNldCA9IDE7CisKKwlvcHRhcmcgPSBOVUxMOworCWlmIChvcHRyZXNldCkKKwkJbm9ub3B0X3N0YXJ0ID0gbm9ub3B0X2VuZCA9IC0xOworc3RhcnQ6CisJaWYgKG9wdHJlc2V0IHx8ICEqcGxhY2UpIHsJCS8qIHVwZGF0ZSBzY2FubmluZyBwb2ludGVyICovCisJCW9wdHJlc2V0ID0gMDsKKwkJaWYgKG9wdGluZCA+PSBuYXJnYykgeyAgICAgICAgICAvKiBlbmQgb2YgYXJndW1lbnQgdmVjdG9yICovCisJCQlwbGFjZSA9IEVNU0c7CisJCQlpZiAobm9ub3B0X2VuZCAhPSAtMSkgeworCQkJCS8qIGRvIHBlcm11dGF0aW9uLCBpZiB3ZSBoYXZlIHRvICovCisJCQkJcGVybXV0ZV9hcmdzKG5vbm9wdF9zdGFydCwgbm9ub3B0X2VuZCwKKwkJCQkgICAgb3B0aW5kLCBuYXJndik7CisJCQkJb3B0aW5kIC09IG5vbm9wdF9lbmQgLSBub25vcHRfc3RhcnQ7CisJCQl9CisJCQllbHNlIGlmIChub25vcHRfc3RhcnQgIT0gLTEpIHsKKwkJCQkvKgorCQkJCSAqIElmIHdlIHNraXBwZWQgbm9uLW9wdGlvbnMsIHNldCBvcHRpbmQKKwkJCQkgKiB0byB0aGUgZmlyc3Qgb2YgdGhlbS4KKwkJCQkgKi8KKwkJCQlvcHRpbmQgPSBub25vcHRfc3RhcnQ7CisJCQl9CisJCQlub25vcHRfc3RhcnQgPSBub25vcHRfZW5kID0gLTE7CisJCQlyZXR1cm4gKC0xKTsKKwkJfQorCQlpZiAoKihwbGFjZSA9IG5hcmd2W29wdGluZF0pICE9ICctJyB8fAorCQkgICAgKHBsYWNlWzFdID09ICdcMCcgJiYgc3RyY2hyKG9wdGlvbnMsICctJykgPT0gTlVMTCkpIHsKKwkJCXBsYWNlID0gRU1TRzsJCS8qIGZvdW5kIG5vbi1vcHRpb24gKi8KKwkJCWlmIChmbGFncyAmIEZMQUdfQUxMQVJHUykgeworCQkJCS8qCisJCQkJICogR05VIGV4dGVuc2lvbjoKKwkJCQkgKiByZXR1cm4gbm9uLW9wdGlvbiBhcyBhcmd1bWVudCB0byBvcHRpb24gMQorCQkJCSAqLworCQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZCsrXTsKKwkJCQlyZXR1cm4gKElOT1JERVIpOworCQkJfQorCQkJaWYgKCEoZmxhZ3MgJiBGTEFHX1BFUk1VVEUpKSB7CisJCQkJLyoKKwkJCQkgKiBJZiBubyBwZXJtdXRhdGlvbiB3YW50ZWQsIHN0b3AgcGFyc2luZworCQkJCSAqIGF0IGZpcnN0IG5vbi1vcHRpb24uCisJCQkJICovCisJCQkJcmV0dXJuICgtMSk7CisJCQl9CisJCQkvKiBkbyBwZXJtdXRhdGlvbiAqLworCQkJaWYgKG5vbm9wdF9zdGFydCA9PSAtMSkKKwkJCQlub25vcHRfc3RhcnQgPSBvcHRpbmQ7CisJCQllbHNlIGlmIChub25vcHRfZW5kICE9IC0xKSB7CisJCQkJcGVybXV0ZV9hcmdzKG5vbm9wdF9zdGFydCwgbm9ub3B0X2VuZCwKKwkJCQkgICAgb3B0aW5kLCBuYXJndik7CisJCQkJbm9ub3B0X3N0YXJ0ID0gb3B0aW5kIC0KKwkJCQkgICAgKG5vbm9wdF9lbmQgLSBub25vcHRfc3RhcnQpOworCQkJCW5vbm9wdF9lbmQgPSAtMTsKKwkJCX0KKwkJCW9wdGluZCsrOworCQkJLyogcHJvY2VzcyBuZXh0IGFyZ3VtZW50ICovCisJCQlnb3RvIHN0YXJ0OworCQl9CisJCWlmIChub25vcHRfc3RhcnQgIT0gLTEgJiYgbm9ub3B0X2VuZCA9PSAtMSkKKwkJCW5vbm9wdF9lbmQgPSBvcHRpbmQ7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSAiLSIgZG8gbm90aGluZywgaWYgIi0tIiB3ZSBhcmUgZG9uZS4KKwkJICovCisJCWlmIChwbGFjZVsxXSAhPSAnXDAnICYmICorK3BsYWNlID09ICctJyAmJiBwbGFjZVsxXSA9PSAnXDAnKSB7CisJCQlvcHRpbmQrKzsKKwkJCXBsYWNlID0gRU1TRzsKKwkJCS8qCisJCQkgKiBXZSBmb3VuZCBhbiBvcHRpb24gKC0tKSwgc28gaWYgd2Ugc2tpcHBlZAorCQkJICogbm9uLW9wdGlvbnMsIHdlIGhhdmUgdG8gcGVybXV0ZS4KKwkJCSAqLworCQkJaWYgKG5vbm9wdF9lbmQgIT0gLTEpIHsKKwkJCQlwZXJtdXRlX2FyZ3Mobm9ub3B0X3N0YXJ0LCBub25vcHRfZW5kLAorCQkJCSAgICBvcHRpbmQsIG5hcmd2KTsKKwkJCQlvcHRpbmQgLT0gbm9ub3B0X2VuZCAtIG5vbm9wdF9zdGFydDsKKwkJCX0KKwkJCW5vbm9wdF9zdGFydCA9IG5vbm9wdF9lbmQgPSAtMTsKKwkJCXJldHVybiAoLTEpOworCQl9CisJfQorCisJLyoKKwkgKiBDaGVjayBsb25nIG9wdGlvbnMgaWY6CisJICogIDEpIHdlIHdlcmUgcGFzc2VkIHNvbWUKKwkgKiAgMikgdGhlIGFyZyBpcyBub3QganVzdCAiLSIKKwkgKiAgMykgZWl0aGVyIHRoZSBhcmcgc3RhcnRzIHdpdGggLS0gd2UgYXJlIGdldG9wdF9sb25nX29ubHkoKQorCSAqLworCWlmIChsb25nX29wdGlvbnMgIT0gTlVMTCAmJiBwbGFjZSAhPSBuYXJndltvcHRpbmRdICYmCisJICAgICgqcGxhY2UgPT0gJy0nIHx8IChmbGFncyAmIEZMQUdfTE9OR09OTFkpKSkgeworCQlzaG9ydF90b28gPSAwOworCQlpZiAoKnBsYWNlID09ICctJykKKwkJCXBsYWNlKys7CQkvKiAtLWZvbyBsb25nIG9wdGlvbiAqLworCQllbHNlIGlmICgqcGxhY2UgIT0gJzonICYmIHN0cmNocihvcHRpb25zLCAqcGxhY2UpICE9IE5VTEwpCisJCQlzaG9ydF90b28gPSAxOwkJLyogY291bGQgYmUgc2hvcnQgb3B0aW9uIHRvbyAqLworCisJCW9wdGNoYXIgPSBwYXJzZV9sb25nX29wdGlvbnMobmFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywKKwkJICAgIGlkeCwgc2hvcnRfdG9vKTsKKwkJaWYgKG9wdGNoYXIgIT0gLTEpIHsKKwkJCXBsYWNlID0gRU1TRzsKKwkJCXJldHVybiAob3B0Y2hhcik7CisJCX0KKwl9CisKKwlpZiAoKChvcHRjaGFyID0gKGludCkqcGxhY2UrKykgPT0gKGludCknOicpIHx8CisJICAgIChvcHRjaGFyID09IChpbnQpJy0nICYmICpwbGFjZSAhPSAnXDAnKSB8fAorCSAgICAob2xpID0gc3RyY2hyKG9wdGlvbnMsIG9wdGNoYXIpKSA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIHRoZSB1c2VyIHNwZWNpZmllZCAiLSIgYW5kICAnLScgaXNuJ3QgbGlzdGVkIGluCisJCSAqIG9wdGlvbnMsIHJldHVybiAtMSAobm9uLW9wdGlvbikgYXMgcGVyIFBPU0lYLgorCQkgKiBPdGhlcndpc2UsIGl0IGlzIGFuIHVua25vd24gb3B0aW9uIGNoYXJhY3RlciAob3IgJzonKS4KKwkJICovCisJCWlmIChvcHRjaGFyID09IChpbnQpJy0nICYmICpwbGFjZSA9PSAnXDAnKQorCQkJcmV0dXJuICgtMSk7CisJCWlmICghKnBsYWNlKQorCQkJKytvcHRpbmQ7CisJCWlmIChQUklOVF9FUlJPUikKKwkJCWZwcmludGYoc3RkZXJyLCBpbGxvcHRjaGFyLCBvcHRjaGFyKTsKKwkJb3B0b3B0ID0gb3B0Y2hhcjsKKwkJcmV0dXJuIChCQURDSCk7CisJfQorCWlmIChsb25nX29wdGlvbnMgIT0gTlVMTCAmJiBvcHRjaGFyID09ICdXJyAmJiBvbGlbMV0gPT0gJzsnKSB7CisJCS8qIC1XIGxvbmctb3B0aW9uICovCisJCWlmICgqcGxhY2UpCQkJLyogbm8gc3BhY2UgKi8KKwkJCS8qIE5PVEhJTkcgKi87CisJCWVsc2UgaWYgKCsrb3B0aW5kID49IG5hcmdjKSB7CS8qIG5vIGFyZyAqLworCQkJcGxhY2UgPSBFTVNHOworCQkJaWYgKFBSSU5UX0VSUk9SKQorCQkJCWZwcmludGYoc3RkZXJyLCByZWNhcmdjaGFyLCBvcHRjaGFyKTsKKwkJCW9wdG9wdCA9IG9wdGNoYXI7CisJCQlyZXR1cm4gKEJBREFSRyk7CisJCX0gZWxzZQkJCQkvKiB3aGl0ZSBzcGFjZSAqLworCQkJcGxhY2UgPSBuYXJndltvcHRpbmRdOworCQlvcHRjaGFyID0gcGFyc2VfbG9uZ19vcHRpb25zKG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsCisJCSAgICBpZHgsIDApOworCQlwbGFjZSA9IEVNU0c7CisJCXJldHVybiAob3B0Y2hhcik7CisJfQorCWlmICgqKytvbGkgIT0gJzonKSB7CQkJLyogZG9lc24ndCB0YWtlIGFyZ3VtZW50ICovCisJCWlmICghKnBsYWNlKQorCQkJKytvcHRpbmQ7CisJfSBlbHNlIHsJCQkJLyogdGFrZXMgKG9wdGlvbmFsKSBhcmd1bWVudCAqLworCQlvcHRhcmcgPSBOVUxMOworCQlpZiAoKnBsYWNlKQkJCS8qIG5vIHdoaXRlIHNwYWNlICovCisJCQlvcHRhcmcgPSBwbGFjZTsKKwkJLyogWFhYOiBkaXNhYmxlIHRlc3QgZm9yIDo6IGlmIFBDPyAoR05VIGRvZXNuJ3QpICovCisJCWVsc2UgaWYgKG9saVsxXSAhPSAnOicpIHsJLyogYXJnIG5vdCBvcHRpb25hbCAqLworCQkJaWYgKCsrb3B0aW5kID49IG5hcmdjKSB7CS8qIG5vIGFyZyAqLworCQkJCXBsYWNlID0gRU1TRzsKKwkJCQlpZiAoUFJJTlRfRVJST1IpCisJCQkJCWZwcmludGYoc3RkZXJyLCByZWNhcmdjaGFyLCBvcHRjaGFyKTsKKwkJCQlvcHRvcHQgPSBvcHRjaGFyOworCQkJCXJldHVybiAoQkFEQVJHKTsKKwkJCX0gZWxzZQorCQkJCW9wdGFyZyA9IG5hcmd2W29wdGluZF07CisJCX0gZWxzZSBpZiAoIShmbGFncyAmIEZMQUdfUEVSTVVURSkpIHsKKwkJCS8qCisJCQkgKiBJZiBwZXJtdXRhdGlvbiBpcyBkaXNhYmxlZCwgd2UgY2FuIGFjY2VwdCBhbgorCQkJICogb3B0aW9uYWwgYXJnIHNlcGFyYXRlZCBieSB3aGl0ZXNwYWNlIHNvIGxvbmcKKwkJCSAqIGFzIGl0IGRvZXMgbm90IHN0YXJ0IHdpdGggYSBkYXNoICgtKS4KKwkJCSAqLworCQkJaWYgKG9wdGluZCArIDEgPCBuYXJnYyAmJiAqbmFyZ3Zbb3B0aW5kICsgMV0gIT0gJy0nKQorCQkJCW9wdGFyZyA9IG5hcmd2Wysrb3B0aW5kXTsKKwkJfQorCQlwbGFjZSA9IEVNU0c7CisJCSsrb3B0aW5kOworCX0KKwkvKiBkdW1wIGJhY2sgb3B0aW9uIGxldHRlciAqLworCXJldHVybiAob3B0Y2hhcik7Cit9CisKKyNpZmRlZiBSRVBMQUNFX0dFVE9QVAorLyoKKyAqIGdldG9wdCAtLQorICoJUGFyc2UgYXJnYy9hcmd2IGFyZ3VtZW50IHZlY3Rvci4KKyAqCisgKiBbZXZlbnR1YWxseSB0aGlzIHdpbGwgcmVwbGFjZSB0aGUgQlNEIGdldG9wdF0KKyAqLworaW50CitnZXRvcHQoaW50IG5hcmdjLCBjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zKQoreworCisJLyoKKwkgKiBXZSBkb24ndCBwYXNzIEZMQUdfUEVSTVVURSB0byBnZXRvcHRfaW50ZXJuYWwoKSBzaW5jZQorCSAqIHRoZSBCU0QgZ2V0b3B0KDMpICh1bmxpa2UgR05VKSBoYXMgbmV2ZXIgZG9uZSB0aGlzLgorCSAqCisJICogRnVydGhlcm1vcmUsIHNpbmNlIG1hbnkgcHJpdmlsZWdlZCBwcm9ncmFtcyBjYWxsIGdldG9wdCgpCisJICogYmVmb3JlIGRyb3BwaW5nIHByaXZpbGVnZXMgaXQgbWFrZXMgc2Vuc2UgdG8ga2VlcCB0aGluZ3MKKwkgKiBhcyBzaW1wbGUgKGFuZCBidWctZnJlZSkgYXMgcG9zc2libGUuCisJICovCisJcmV0dXJuIChnZXRvcHRfaW50ZXJuYWwobmFyZ2MsIG5hcmd2LCBvcHRpb25zLCBOVUxMLCBOVUxMLCAwKSk7Cit9CisjZW5kaWYgLyogUkVQTEFDRV9HRVRPUFQgKi8KKworLyoKKyAqIGdldG9wdF9sb25nIC0tCisgKglQYXJzZSBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgorICovCitpbnQKK2dldG9wdF9sb25nKGludCBuYXJnYywgY2hhciAqIGNvbnN0ICpuYXJndiwgY29uc3QgY2hhciAqb3B0aW9ucywKKyAgICBjb25zdCBzdHJ1Y3Qgb3B0aW9uICpsb25nX29wdGlvbnMsIGludCAqaWR4KQoreworCisJcmV0dXJuIChnZXRvcHRfaW50ZXJuYWwobmFyZ2MsIG5hcmd2LCBvcHRpb25zLCBsb25nX29wdGlvbnMsIGlkeCwKKwkgICAgRkxBR19QRVJNVVRFKSk7Cit9CisKKy8qCisgKiBnZXRvcHRfbG9uZ19vbmx5IC0tCisgKglQYXJzZSBhcmdjL2FyZ3YgYXJndW1lbnQgdmVjdG9yLgorICovCitpbnQKK2dldG9wdF9sb25nX29ubHkoaW50IG5hcmdjLCBjaGFyICogY29uc3QgKm5hcmd2LCBjb25zdCBjaGFyICpvcHRpb25zLAorICAgIGNvbnN0IHN0cnVjdCBvcHRpb24gKmxvbmdfb3B0aW9ucywgaW50ICppZHgpCit7CisKKwlyZXR1cm4gKGdldG9wdF9pbnRlcm5hbChuYXJnYywgbmFyZ3YsIG9wdGlvbnMsIGxvbmdfb3B0aW9ucywgaWR4LAorCSAgICBGTEFHX1BFUk1VVEV8RkxBR19MT05HT05MWSkpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvZ2V0cGdycC5jIGIvbGliYy91bmlzdGQvZ2V0cGdycC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmN2NlZDUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9nZXRwZ3JwLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitwaWRfdCAgZ2V0cGdycCh2b2lkKSAKK3sKKyAgcmV0dXJuIGdldHBnaWQoMCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9nZXRwcmlvcml0eS5jIGIvbGliYy91bmlzdGQvZ2V0cHJpb3JpdHkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lZmM5ZDRlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvZ2V0cHJpb3JpdHkuYwpAQCAtMCwwICsxLDM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2V4dGVybiBpbnQgX19nZXRwcmlvcml0eShpbnQsIGludCk7CisKK2ludCBnZXRwcmlvcml0eShpbnQgd2hpY2gsIGludCB3aG8pCit7CisgIGludCByZXN1bHQgPSBfX2dldHByaW9yaXR5KHdoaWNoLCB3aG8pOworCisgIHJldHVybiAoIHJlc3VsdCA8IDAgKSA/IHJlc3VsdCA6IDIwLXJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL2dldHB0LmMgYi9saWJjL3VuaXN0ZC9nZXRwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiYjVjMTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9nZXRwdC5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorCitpbnQgZ2V0cHQodm9pZCkKK3sKKyAgcmV0dXJuIG9wZW4oIi9kZXYvcHRteCIsIE9fUkRXUnxPX05PQ1RUWSk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9pc2F0dHkuYyBiL2xpYmMvdW5pc3RkL2lzYXR0eS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjkzYWY2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9pc2F0dHkuYwpAQCAtMCwwICsxLDM5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworaW50Citpc2F0dHkgKGludCAgZmQpCit7CisgIHN0cnVjdCB0ZXJtaW9zIHRlcm07CisKKyAgcmV0dXJuIHRjZ2V0YXR0ciAoZmQsICZ0ZXJtKSA9PSAwOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvaXNzZXR1Z2lkLmMgYi9saWJjL3VuaXN0ZC9pc3NldHVnaWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MWY4ZTQxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvaXNzZXR1Z2lkLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgIGlzc2V0dWdpZCh2b2lkKQoreworICAgIC8qIGZvciBCaW9uaWMsIHRoaXMgaXMgc3VmZmljaWVudCAqLworICAgIHJldHVybiAwOworfQorCmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9sc2VlazY0LmMgYi9saWJjL3VuaXN0ZC9sc2VlazY0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE3YjMzMQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL2xzZWVrNjQuYwpAQCAtMCwwICsxLDQwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisKK2V4dGVybiBpbnQgX19sbHNlZWsoaW50IGZkLCB1bnNpZ25lZCBsb25nICBvZmZzZXRfaGksIHVuc2lnbmVkIGxvbmcgIG9mZnNldF9sbywgbG9mZl90KiAgcmVzdWx0LCBpbnQgIHdoZW5jZSk7CisKK2xvZmZfdCBsc2VlazY0KGludCBmZCwgbG9mZl90IG9mZiwgaW50IHdoZW5jZSkKK3sKKyAgICBsb2ZmX3QgIHJlc3VsdDsKKworICAgIGlmICggX19sbHNlZWsoZmQsICh1bnNpZ25lZCBsb25nKShvZmYgPj4gMzIpLCh1bnNpZ25lZCBsb25nKShvZmYpLCAmcmVzdWx0LCB3aGVuY2UgKSA8IDAgKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvbW1hcC5jIGIvbGliYy91bmlzdGQvbW1hcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg0OGFiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9tbWFwLmMKQEAgLTAsMCArMSw0MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKworZXh0ZXJuIHZvaWQqICBfX21tYXAyKHZvaWQqLCBzaXplX3QsIGludCwgaW50LCBpbnQsIHNpemVfdCk7CisKKyNkZWZpbmUgIE1NQVAyX1NISUZUICAxMgordm9pZCogICBtbWFwKCB2b2lkKiAgYWRkciwgIHNpemVfdCAgc2l6ZSwgaW50ICBwcm90LCBpbnQgIGZsYWdzLCBpbnQgIGZkLCAgbG9uZyAgb2Zmc2V0ICkKK3sKKyAgICBpZiAoIG9mZnNldCAmICgoMVVMIDw8IE1NQVAyX1NISUZUKS0xKSApIHsKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTUFQX0ZBSUxFRDsKKyAgfQorCisgICAgcmV0dXJuIF9fbW1hcDIoYWRkciwgc2l6ZSwgcHJvdCwgZmxhZ3MsIGZkLCAoc2l6ZV90KW9mZnNldCA+PiBNTUFQMl9TSElGVCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9uaWNlLmMgYi9saWJjL3VuaXN0ZC9uaWNlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDliNjQ2OQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL25pY2UuYwpAQCAtMCwwICsxLDM1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3Jlc291cmNlLmg+CisKK2ludCBuaWNlKGludCBpbmNyZW1lbnQpCit7CisgICAgaW50ICBwcmlvcml0eSA9IGdldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgMCk7CisKKyAgICByZXR1cm4gc2V0cHJpb3JpdHkoIFBSSU9fUFJPQ0VTUywgMCwgcHJpb3JpdHkraW5jcmVtZW50KTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL29wZW4uYyBiL2xpYmMvdW5pc3RkL29wZW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lOGIxYzg5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvb3Blbi5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitleHRlcm4gaW50ICBfX29wZW4oY29uc3QgY2hhciosIGludCwgaW50KTsKKworaW50IG9wZW4oY29uc3QgY2hhciAqcGF0aG5hbWUsIGludCBmbGFncywgLi4uKQoreworICAgIG1vZGVfdCAgbW9kZSA9IDA7CisKKyNpZiAhZGVmaW5lZChfX2kzODZfXykKKyAgICBmbGFncyB8PSBPX0xBUkdFRklMRTsKKyNlbmRpZgorCisgICAgaWYgKGZsYWdzICYgT19DUkVBVCkKKyAgICB7CisgICAgICAgIHZhX2xpc3QgIGFyZ3M7CisKKyAgICAgICAgdmFfc3RhcnQoYXJncywgZmxhZ3MpOworICAgICAgICBtb2RlID0gKG1vZGVfdCkgdmFfYXJnKGFyZ3MsIGludCk7CisgICAgICAgIHZhX2VuZChhcmdzKTsKKyAgICB9CisKKyAgICByZXR1cm4gX19vcGVuKHBhdGhuYW1lLCBmbGFncywgbW9kZSk7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL29wZW5hdC5jIGIvbGliYy91bmlzdGQvb3BlbmF0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODhiMzlhNAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL29wZW5hdC5jCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitleHRlcm4gaW50ICBfX29wZW5hdChpbnQsIGNvbnN0IGNoYXIqLCBpbnQsIGludCk7CisKK2ludCBvcGVuYXQoaW50IGZkLCBjb25zdCBjaGFyICpwYXRobmFtZSwgaW50IGZsYWdzLCAuLi4pCit7CisgICAgbW9kZV90ICBtb2RlID0gMDsKKworI2lmICFkZWZpbmVkKF9faTM4Nl9fKQorICAgIGZsYWdzIHw9IE9fTEFSR0VGSUxFOworI2VuZGlmCisKKyAgICBpZiAoZmxhZ3MgJiBPX0NSRUFUKQorICAgIHsKKyAgICAgICAgdmFfbGlzdCAgYXJnczsKKworICAgICAgICB2YV9zdGFydChhcmdzLCBmbGFncyk7CisgICAgICAgIG1vZGUgPSAobW9kZV90KSB2YV9hcmcoYXJncywgaW50KTsKKyAgICAgICAgdmFfZW5kKGFyZ3MpOworICAgIH0KKworICAgIHJldHVybiBfX29wZW5hdChmZCwgcGF0aG5hbWUsIGZsYWdzLCBtb2RlKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvb3BlbmRpci5jIGIvbGliYy91bmlzdGQvb3BlbmRpci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFiMDYwNTcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9vcGVuZGlyLmMKQEAgLTAsMCArMSwyMDUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxkaXJlbnQuaD4KKyNpbmNsdWRlIDxtZW1vcnkuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCitzdHJ1Y3QgRElSCit7CisgICAgaW50ICAgICAgICAgICAgICBfRElSX2ZkOworICAgIHNpemVfdCAgICAgICAgICAgX0RJUl9hdmFpbDsKKyAgICBzdHJ1Y3QgZGlyZW50KiAgIF9ESVJfbmV4dDsKKyAgICBwdGhyZWFkX211dGV4X3QgIF9ESVJfbG9jazsKKyAgICBzdHJ1Y3QgZGlyZW50ICAgIF9ESVJfYnVmZlsxNV07Cit9OworCitpbnQgZGlyZmQoRElSKiBkaXJwKQoreworICAgIHJldHVybiBkaXJwLT5fRElSX2ZkOworfQorCitESVIqICBvcGVuZGlyKCBjb25zdCBjaGFyKiAgZGlycGF0aCApCit7CisgICAgRElSKiAgZGlyID0gbWFsbG9jKHNpemVvZihESVIpKTsKKworICAgIGlmICghZGlyKQorICAgICAgICBnb3RvIEV4aXQ7CisKKyAgICBkaXItPl9ESVJfZmQgPSBvcGVuKGRpcnBhdGgsIE9fUkRPTkxZfE9fRElSRUNUT1JZKTsKKyAgICBpZiAoZGlyLT5fRElSX2ZkIDwgMCkKKyAgICB7CisgICAgICAgIGZyZWUoZGlyKTsKKyAgICAgICAgZGlyID0gTlVMTDsKKyAgICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgZGlyLT5fRElSX2F2YWlsID0gMDsKKyAgICAgICAgZGlyLT5fRElSX25leHQgID0gTlVMTDsKKyAgICAgICAgcHRocmVhZF9tdXRleF9pbml0KCAmZGlyLT5fRElSX2xvY2ssIE5VTEwgKTsKKyAgICB9CitFeGl0OgorICAgIHJldHVybiBkaXI7Cit9CisKKworRElSKiAgZmRvcGVuZGlyKGludCBmZCkKK3sKKyAgICBESVIqICBkaXIgPSBtYWxsb2Moc2l6ZW9mKERJUikpOworCisgICAgaWYgKCFkaXIpCisgICAgICAgIHJldHVybiAwOworCisgICAgZGlyLT5fRElSX2ZkID0gZmQ7CisgICAgZGlyLT5fRElSX2F2YWlsID0gMDsKKyAgICBkaXItPl9ESVJfbmV4dCAgPSBOVUxMOworICAgIHB0aHJlYWRfbXV0ZXhfaW5pdCggJmRpci0+X0RJUl9sb2NrLCBOVUxMICk7CisKKyAgICByZXR1cm4gZGlyOworfQorCisKK3N0YXRpYyBzdHJ1Y3QgZGlyZW50KgorX3JlYWRkaXJfdW5sb2NrZWQoRElSKiAgZGlyKQoreworICAgIHN0cnVjdCBkaXJlbnQqICBlbnRyeTsKKworICAgIGlmICggIWRpci0+X0RJUl9hdmFpbCApCisgICAgeworICAgICAgICBpbnQgIHJjOworCisgICAgICAgIGZvciAoOzspIHsKKyAgICAgICAgICAgIHJjID0gZ2V0ZGVudHMoIGRpci0+X0RJUl9mZCwgZGlyLT5fRElSX2J1ZmYsIHNpemVvZihkaXItPl9ESVJfYnVmZikpOworICAgICAgICAgICAgaWYgKHJjID49IDAgfHwgZXJybm8gIT0gRUlOVFIpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBpZiAocmMgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBOVUxMOworCisgICAgICAgIGRpci0+X0RJUl9hdmFpbCA9IHJjOworICAgICAgICBkaXItPl9ESVJfbmV4dCAgPSBkaXItPl9ESVJfYnVmZjsKKyAgICB9CisKKyAgICBlbnRyeSA9IGRpci0+X0RJUl9uZXh0OworCisgICAgLyogcGVyZm9ybSBzb21lIHNhbml0eSBjaGVja3MgaGVyZSAqLworICAgIGlmICgoKGxvbmcpKHZvaWQqKWVudHJ5ICYgMykgIT0gMCkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBpZiAoICh1bnNpZ25lZCllbnRyeS0+ZF9yZWNsZW4gPiBzaXplb2YoKmVudHJ5KSAgICAgICAgIHx8CisgICAgICAgICBlbnRyeS0+ZF9yZWNsZW4gPD0gb2Zmc2V0b2Yoc3RydWN0IGRpcmVudCwgZF9uYW1lKSApCisgICAgICAgIGdvdG8gQmFkOworCisgICAgaWYgKCAoY2hhciopZW50cnkgKyBlbnRyeS0+ZF9yZWNsZW4gPiAoY2hhciopZGlyLT5fRElSX2J1ZmYgKyBzaXplb2YoZGlyLT5fRElSX2J1ZmYpICkKKyAgICAgICAgZ290byBCYWQ7CisKKyAgICBpZiAoICFtZW1jaHIoIGVudHJ5LT5kX25hbWUsIDAsIGVudHJ5LT5kX3JlY2xlbiAtIG9mZnNldG9mKHN0cnVjdCBkaXJlbnQsIGRfbmFtZSkpICkKKyAgICAgICAgZ290byBCYWQ7IAorCisgICAgZGlyLT5fRElSX25leHQgICA9IChzdHJ1Y3QgZGlyZW50KikoKGNoYXIqKWVudHJ5ICsgZW50cnktPmRfcmVjbGVuKTsKKyAgICBkaXItPl9ESVJfYXZhaWwgLT0gZW50cnktPmRfcmVjbGVuOworCisgICAgcmV0dXJuIGVudHJ5OworCisgIEJhZDoKKyAgICBlcnJubyA9IEVJTlZBTDsKKyAgICByZXR1cm4gTlVMTDsKK30KKworCitzdHJ1Y3QgZGlyZW50KgorcmVhZGRpcihESVIgKiBkaXIpCit7CisgICAgc3RydWN0IGRpcmVudCAqZW50cnkgPSBOVUxMOworCisgICAgcHRocmVhZF9tdXRleF9sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKKyAgICBlbnRyeSA9IF9yZWFkZGlyX3VubG9ja2VkKGRpcik7CisgICAgcHRocmVhZF9tdXRleF91bmxvY2soICZkaXItPl9ESVJfbG9jayApOworCisgICAgcmV0dXJuIGVudHJ5OworfQorCisKK2ludCByZWFkZGlyX3IoRElSKiAgZGlyLCBzdHJ1Y3QgZGlyZW50ICplbnRyeSwgc3RydWN0IGRpcmVudCAqKnJlc3VsdCkKK3sKKyAgICBzdHJ1Y3QgZGlyZW50KiAgZW50OworICAgIGludCAgc2F2ZV9lcnJubyA9IGVycm5vOworICAgIGludCAgcmV0dmFsOworCisgICAgKnJlc3VsdCA9IE5VTEw7CisgICAgZXJybm8gICA9IDA7CisKKyAgICBwdGhyZWFkX211dGV4X2xvY2soICZkaXItPl9ESVJfbG9jayApOworCisgICAgZW50ICAgID0gX3JlYWRkaXJfdW5sb2NrZWQoZGlyKTsKKyAgICByZXR2YWwgPSBlcnJubzsKKyAgICBpZiAoZW50ID09IE5VTEwpIHsKKyAgICAgICAgaWYgKCFyZXR2YWwpIHsKKyAgICAgICAgICAgIGVycm5vID0gc2F2ZV9lcnJubzsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmICghcmV0dmFsKSB7CisgICAgICAgICAgICBlcnJubyAgID0gc2F2ZV9lcnJubzsKKyAgICAgICAgICAgICpyZXN1bHQgPSBlbnRyeTsKKyAgICAgICAgICAgIG1lbWNweSggZW50cnksIGVudCwgZW50LT5kX3JlY2xlbiApOworICAgICAgICB9CisgICAgfQorCisgICAgcHRocmVhZF9tdXRleF91bmxvY2soICZkaXItPl9ESVJfbG9jayApOworCisgICAgcmV0dXJuIHJldHZhbDsKK30KKworCisKK2ludCBjbG9zZWRpcihESVIgKmRpcikKK3sKKyAgaW50IHJjOworCisgIHJjID0gY2xvc2UoZGlyLT5fRElSX2ZkKTsKKyAgZGlyLT5fRElSX2ZkID0gLTE7CisKKyAgcHRocmVhZF9tdXRleF9kZXN0cm95KCAmZGlyLT5fRElSX2xvY2sgKTsKKworICBmcmVlKGRpcik7CisgIHJldHVybiByYzsKK30KKworCit2b2lkICAgcmV3aW5kZGlyKERJUiAqZGlyKQoreworICAgIHB0aHJlYWRfbXV0ZXhfbG9jayggJmRpci0+X0RJUl9sb2NrICk7CisgICAgbHNlZWsoIGRpci0+X0RJUl9mZCwgMCwgU0VFS19TRVQgKTsKKyAgICBkaXItPl9ESVJfYXZhaWwgPSAwOworICAgIHB0aHJlYWRfbXV0ZXhfdW5sb2NrKCAmZGlyLT5fRElSX2xvY2sgKTsKK30KKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcGF0aGNvbmYuYyBiL2xpYmMvdW5pc3RkL3BhdGhjb25mLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMyZjkxOAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3BhdGhjb25mLmMKQEAgLTAsMCArMSwyNzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxwYXRoY29uZi5oPgorI2luY2x1ZGUgPHN5cy92ZnMuaD4KKyNpbmNsdWRlIDxzeXMvbGltaXRzLmg+CisjaW5jbHVkZSA8bGludXgvZXh0Ml9mcy5oPgorI2luY2x1ZGUgPGxpbnV4L2V4dDNfZnMuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCisvKiB0aGVzZSBtYXkgbm90IGJlIGRlZmluZWQgeWV0IGJ5IG91ciBoZWFkZXJzICovCisjaWZuZGVmIF9QT1NJWF9WRElTQUJMRQorI2RlZmluZSBfUE9TSVhfVkRJU0FCTEUgIC0xCisjZW5kaWYKKworI2lmbmRlZiBfUE9TSVhfU1lOQ19JTworI2RlZmluZSBfUE9TSVhfU1lOQ19JTyAgLTEKKyNlbmRpZgorCisjaWZuZGVmIF9QT1NJWF9QUklPX0lPCisjZGVmaW5lIF9QT1NJWF9QUklPX0lPICAtMQorI2VuZGlmCisKKyNpZm5kZWYgX1BPU0lYX0FTWU5DX0lPCisjZGVmaW5lIF9QT1NJWF9BU1lOQ19JTyAgLTEKKyNlbmRpZgorCisKK3N0YXRpYyBsb25nCitfX2ZpbGVzaXplYml0cyggc3RydWN0IHN0YXRmcyogIHMgKQoreworI2RlZmluZSAgIEVPTF9NQUdJQyAgIDB4MDAwMFUKKworICAgIC8qIGxpc3Qgb2Yga25vd24gNjQtYml0IGF3YXJlIGZpbGVzeXN0ZW1zICovCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90ICBrbm93bjY0W10gPSB7CisgICAgICAgIEVYVDJfU1VQRVJfTUFHSUMsCisgICAgICAgIFVGU19NQUdJQywKKyAgICAgICAgUkVJU0VSRlNfU1VQRVJfTUFHSUMsCisgICAgICAgIFhGU19TVVBFUl9NQUdJQywKKyAgICAgICAgU01CX1NVUEVSX01BR0lDLAorICAgICAgICBVREZfU1VQRVJfTUFHSUMsCisgICAgICAgIEpGU19TVVBFUl9NQUdJQywKKyAgICAgICAgTlRGU19TQl9NQUdJQywKKyAgICAgICAgVlhGU19TVVBFUl9NQUdJQywKKyAgICAgICAgRU9MX01BR0lDCisgICAgfTsKKyAgICBpbnQgIG5uID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCBrbm93bjY0W25uXSA9PSBFT0xfTUFHSUMgKQorICAgICAgICAgICAgcmV0dXJuIDMyOworCisgICAgICAgIGlmICgga25vd242NFtubl0gPT0gcy0+Zl90eXBlICkKKyAgICAgICAgICAgIHJldHVybiA2NDsKKyAgICB9Cit9CisKKworc3RhdGljIGxvbmcKK19fbGlua19tYXgoIHN0cnVjdCBzdGF0ZnMqICBzICkKK3sKKyAgIC8qIGNvbnN0YW50IHZhbHVlcyB3ZXJlIHRha2VuIGZyb20gb2ZmaWNpYWwga2VybmVsIGhlYWRlcnMuCisgICAgKiBJIGRvbid0IHRoaW5rIHRoaXMganVzdGlmaWVkIGJyaW5naW5nIGluIDxsaW51eC9taW5peF9mcy5oPiBldCBhbAorICAgICogaW50byBvdXIgY2xlYW5lZC11cCBrZXJuZWwgdGhyZWUKKyAgICAqLworICAgIHN0YXRpYyBjb25zdCBzdHJ1Y3QgeyB1aW50MzJfdCAgdHlwZTsgaW50ICBtYXg7IH0gIGtub3duTWF4W10gPQorICAgIHsKKyAgICAgICAgeyBFWFQyX1NVUEVSX01BR0lDLCBFWFQyX0xJTktfTUFYIH0sCisgICAgICAgIHsgRVhUM19TVVBFUl9NQUdJQywgRVhUM19MSU5LX01BWCB9LAorICAgICAgICB7IE1JTklYX1NVUEVSX01BR0lDLCAyNTAgfSwKKyAgICAgICAgeyBNSU5JWDJfU1VQRVJfTUFHSUMsIDY1NTMwIH0sCisgICAgICAgIHsgUkVJU0VSRlNfU1VQRVJfTUFHSUMsIDB4ZmZmZiAtIDEwMDAgfSwKKyAgICAgICAgeyBVRlNfTUFHSUMsIDMyMDAwIH0sCisgICAgICAgIHsgRU9MX01BR0lDLCAwIH0KKyAgICB9OworICAgIGludCAgIG5uID0gMDsKKworICAgIGZvciAoOzspIHsKKyAgICAgICAgaWYgKCBrbm93bk1heFtubl0udHlwZSA9PSBFT0xfTUFHSUMgKQorICAgICAgICAgICAgcmV0dXJuIExJTktfTUFYOworCisgICAgICAgIGlmICgga25vd25NYXhbbm5dLnR5cGUgPT0gcy0+Zl90eXBlICkKKyAgICAgICAgICAgIHJldHVybiBrbm93bk1heFtubl0ubWF4OworICAgIH0KKyAgICByZXR1cm4gTElOS19NQVg7Cit9CisKK3N0YXRpYyBsb25nCitfXzJfc3ltbGlua3MoIHN0cnVjdCBzdGF0ZnMqICBzICkKK3sKKyAgICAvKiBsaXN0IG9mIGtub3cgZmlsZXN5c3RlbXMgdGhhdCBkb24ndCBzdXBwb3J0IHN5bWxpbmtzICovCisgICAgc3RhdGljIGNvbnN0IHVpbnQzMl90ICBrbm93bk5vU3ltbGlua3NbXSA9IHsKKyAgICAgICAgQURGU19TVVBFUl9NQUdJQywgQkZTX01BR0lDLCBDUkFNRlNfTUFHSUMsCisgICAgICAgIEVGU19TVVBFUl9NQUdJQywgTVNET1NfU1VQRVJfTUFHSUMsIE5URlNfU0JfTUFHSUMsCisgICAgICAgIFFOWDRfU1VQRVJfTUFHSUMsCisgICAgICAgIEVPTF9NQUdJQworICAgIH07CisgICAgaW50ICBubiA9IDA7CisKKyAgICBmb3IgKDs7KSB7CisgICAgICAgIGlmIChrbm93bk5vU3ltbGlua3Nbbm5dID09IDApCisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgaWYgKGtub3duTm9TeW1saW5rc1tubl0gPT0gcy0+Zl90eXBlKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgfQorfQorCitzdGF0aWMgbG9uZworX19uYW1lX21heCggc3RydWN0IHN0YXRmcyogIHMgKQoreworICAgIHJldHVybiBzLT5mX25hbWVsZW47Cit9CisKK2xvbmcKK3BhdGhjb25mKGNvbnN0IGNoYXIgKnBhdGgsIGludCBuYW1lKQoreworICAgIHN0cnVjdCBzdGF0ZnMgIGJ1ZjsKKyAgICBpbnQgICAgICAgICAgICByZXQgPSBzdGF0ZnMoIHBhdGgsICZidWYgKTsKKworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICBzd2l0Y2ggKG5hbWUpIHsKKyAgICBjYXNlIF9QQ19GSUxFU0laRUJJVFM6CisgICAgICAgIHJldHVybiBfX2ZpbGVzaXplYml0cygmYnVmKTsKKworICAgIGNhc2UgX1BDX0xJTktfTUFYOgorICAgICAgICByZXR1cm4gX19saW5rX21heCgmYnVmKTsKKworICAgIGNhc2UgX1BDX01BWF9DQU5PTjoKKyAgICAgICAgcmV0dXJuIE1BWF9DQU5PTjsKKworICAgIGNhc2UgX1BDX01BWF9JTlBVVDoKKyAgICAgICAgcmV0dXJuIE1BWF9JTlBVVDsKKworICAgIGNhc2UgX1BDX05BTUVfTUFYOgorICAgICAgICByZXR1cm4gX19uYW1lX21heCgmYnVmKTsKKworICAgIGNhc2UgX1BDX1BBVEhfTUFYOgorICAgICAgICByZXR1cm4gUEFUSF9NQVg7CisKKyAgICBjYXNlIF9QQ19QSVBFX0JVRjoKKyAgICAgICAgcmV0dXJuIFBJUEVfQlVGOworCisgICAgY2FzZSBfUENfMl9TWU1MSU5LUzoKKyAgICAgICAgcmV0dXJuIF9fMl9zeW1saW5rcygmYnVmKTsKKworI2lmIDAgIC8qIGRvbid0IGtub3cgd2hhdCB0byBkbyB0aGVyZSwgdGhlIHNwZWNzIGFyZSByZWFsbHkgd2VpcmQgKi8KKyAgICBjYXNlIF9QQ19BTExPQ19TSVpFX01JTjoKKyAgICBjYXNlIF9QQ19SRUNfSU5DUl9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX01BWF9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX01JTl9YRkVSX1NJWkU6CisgICAgY2FzZSBfUENfUkVDX1hGRVJfQUxJR046CisjZW5kaWYKKworICAgIGNhc2UgX1BDX1NZTUxJTktfTUFYOgorICAgICAgICByZXR1cm4gLTE7ICAvKiBubyBsaW1pdCAqLworCisgICAgY2FzZSBfUENfQ0hPV05fUkVTVFJJQ1RFRDoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9DSE9XTl9SRVNUUklDVEVEOworCisgICAgY2FzZSBfUENfTk9fVFJVTkM6CisgICAgICAgIHJldHVybiBfUE9TSVhfTk9fVFJVTkM7CisKKyAgICBjYXNlIF9QQ19WRElTQUJMRToKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9WRElTQUJMRTsKKworICAgIGNhc2UgX1BDX0FTWU5DX0lPOgorICAgICAgICByZXR1cm4gX1BPU0lYX0FTWU5DX0lPOworCisgICAgY2FzZSBfUENfUFJJT19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9QUklPX0lPOworCisgICAgY2FzZSBfUENfU1lOQ19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9TWU5DX0lPOworCisgICAgZGVmYXVsdDoKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9Cit9CisKK2xvbmcgZnBhdGhjb25mKGludCBmaWxkZXMsIGludCBuYW1lKQoreworICAgIHN0cnVjdCBzdGF0ZnMgIGJ1ZjsKKyAgICBpbnQgICAgICAgICAgICByZXQgPSBmc3RhdGZzKGZpbGRlcywgJmJ1Zik7CisKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgc3dpdGNoIChuYW1lKSB7CisgICAgY2FzZSBfUENfRklMRVNJWkVCSVRTOgorICAgICAgICByZXR1cm4gX19maWxlc2l6ZWJpdHMoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19MSU5LX01BWDoKKyAgICAgICAgcmV0dXJuIF9fbGlua19tYXgoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19NQVhfQ0FOT046CisgICAgICAgIHJldHVybiBNQVhfQ0FOT047CisKKyAgICBjYXNlIF9QQ19NQVhfSU5QVVQ6CisgICAgICAgIHJldHVybiBNQVhfSU5QVVQ7CisKKyAgICBjYXNlIF9QQ19OQU1FX01BWDoKKyAgICAgICAgcmV0dXJuIF9fbmFtZV9tYXgoJmJ1Zik7CisKKyAgICBjYXNlIF9QQ19QQVRIX01BWDoKKyAgICAgICAgcmV0dXJuIFBBVEhfTUFYOworCisgICAgY2FzZSBfUENfUElQRV9CVUY6CisgICAgICAgIHJldHVybiBQSVBFX0JVRjsKKworICAgIGNhc2UgX1BDXzJfU1lNTElOS1M6CisgICAgICAgIHJldHVybiBfXzJfc3ltbGlua3MoJmJ1Zik7CisKKyNpZiAwICAvKiBkb24ndCBrbm93IHdoYXQgdG8gZG8gdGhlcmUsIHRoZSBzcGVjcyBhcmUgcmVhbGx5IHdlaXJkICovCisgICAgY2FzZSBfUENfQUxMT0NfU0laRV9NSU46CisgICAgY2FzZSBfUENfUkVDX0lOQ1JfWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19NQVhfWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19NSU5fWEZFUl9TSVpFOgorICAgIGNhc2UgX1BDX1JFQ19YRkVSX0FMSUdOOgorI2VuZGlmCisKKyAgICBjYXNlIF9QQ19TWU1MSU5LX01BWDoKKyAgICAgICAgcmV0dXJuIC0xOyAgLyogbm8gbGltaXQgKi8KKworICAgIGNhc2UgX1BDX0NIT1dOX1JFU1RSSUNURUQ6CisgICAgICAgIHJldHVybiBfUE9TSVhfQ0hPV05fUkVTVFJJQ1RFRDsKKworICAgIGNhc2UgX1BDX05PX1RSVU5DOgorICAgICAgICByZXR1cm4gX1BPU0lYX05PX1RSVU5DOworCisgICAgY2FzZSBfUENfVkRJU0FCTEU6CisgICAgICAgIHJldHVybiBfUE9TSVhfVkRJU0FCTEU7CisKKyAgICBjYXNlIF9QQ19BU1lOQ19JTzoKKyAgICAgICAgcmV0dXJuIF9QT1NJWF9BU1lOQ19JTzsKKworICAgIGNhc2UgX1BDX1BSSU9fSU86CisgICAgICAgIHJldHVybiBfUE9TSVhfUFJJT19JTzsKKworICAgIGNhc2UgX1BDX1NZTkNfSU86CisgICAgICAgIHJldHVybiBfUE9TSVhfU1lOQ19JTzsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIGVycm5vID0gRUlOVkFMOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcGVycm9yLmMgYi9saWJjL3VuaXN0ZC9wZXJyb3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTU1ZjcyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcGVycm9yLmMKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKK3ZvaWQgcGVycm9yKGNvbnN0IGNoYXIgKnByZWZpeCkKK3sKKyAgICBjaGFyICAgYnVmZlsyNTZdOworCisgICAgc3RyZXJyb3JfciggZXJybm8sIGJ1ZmYsIHNpemVvZihidWZmKSApOworCisgICAgaWYgKHByZWZpeCkgeworICAgICAgICB3cml0ZSggMiwgcHJlZml4LCBzdHJsZW4ocHJlZml4KSApOworICAgICAgICB3cml0ZSggMiwgIjogIiwgMiApOworICAgIH0KKyAgICB3cml0ZSggMiwgYnVmZiwgc3RybGVuKGJ1ZmYpICk7CisgICAgd3JpdGUoIDIsICJcbiIsIDEgKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3BvcGVuLmMgYi9saWJjL3VuaXN0ZC9wb3Blbi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1ZjgzMjUKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wb3Blbi5jCkBAIC0wLDAgKzEsMTY3IEBACisvKgkkT3BlbkJTRDogcG9wZW4uYyx2IDEuMTcgMjAwNS8wOC8wOCAwODowNTozNCBlc3BpZSBFeHAgJCAqLworLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk5MworICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBjb2RlIGlzIGRlcml2ZWQgZnJvbSBzb2Z0d2FyZSB3cml0dGVuIGJ5IEtlbiBBcm5vbGQgYW5kCisgKiBwdWJsaXNoZWQgaW4gVU5JWCBSZXZpZXcsIFZvbC4gNiwgTm8uIDguCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBSRUdFTlRTIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUkVHRU5UUyBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlIDxzeXMvcGFyYW0uaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHBhdGhzLmg+CisKK3N0YXRpYyBzdHJ1Y3QgcGlkIHsKKwlzdHJ1Y3QgcGlkICpuZXh0OworCUZJTEUgKmZwOworCXBpZF90IHBpZDsKK30gKnBpZGxpc3Q7CisKK0ZJTEUgKgorcG9wZW4oY29uc3QgY2hhciAqcHJvZ3JhbSwgY29uc3QgY2hhciAqdHlwZSkKK3sKKwlzdHJ1Y3QgcGlkICogdm9sYXRpbGUgY3VyOworCUZJTEUgKmlvcDsKKwlpbnQgcGRlc1syXTsKKwlwaWRfdCBwaWQ7CisKKwlpZiAoKCp0eXBlICE9ICdyJyAmJiAqdHlwZSAhPSAndycpIHx8IHR5cGVbMV0gIT0gJ1wwJykgeworCQllcnJubyA9IEVJTlZBTDsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlpZiAoKGN1ciA9IG1hbGxvYyhzaXplb2Yoc3RydWN0IHBpZCkpKSA9PSBOVUxMKQorCQlyZXR1cm4gKE5VTEwpOworCisJaWYgKHBpcGUocGRlcykgPCAwKSB7CisJCWZyZWUoY3VyKTsKKwkJcmV0dXJuIChOVUxMKTsKKwl9CisKKwlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKKwljYXNlIC0xOgkJCS8qIEVycm9yLiAqLworCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJCWZyZWUoY3VyKTsKKwkJcmV0dXJuIChOVUxMKTsKKwkJLyogTk9UUkVBQ0hFRCAqLworCWNhc2UgMDoJCQkJLyogQ2hpbGQuICovCisJICAgIHsKKwkJc3RydWN0IHBpZCAqcGN1cjsKKwkJLyoKKwkJICogYmVjYXVzZSB2Zm9yaygpIGluc3RlYWQgb2YgZm9yaygpLCBtdXN0IGxlYWsgRklMRSAqLAorCQkgKiBidXQgbHVja2lseSB3ZSBhcmUgdGVybWluYWxseSBoZWFkZWQgZm9yIGFuIGV4ZWNsKCkKKwkJICovCisJCWZvciAocGN1ciA9IHBpZGxpc3Q7IHBjdXI7IHBjdXIgPSBwY3VyLT5uZXh0KQorCQkJY2xvc2UoZmlsZW5vKHBjdXItPmZwKSk7CisKKwkJaWYgKCp0eXBlID09ICdyJykgeworCQkJaW50IHRwZGVzMSA9IHBkZXNbMV07CisKKwkJCSh2b2lkKSBjbG9zZShwZGVzWzBdKTsKKwkJCS8qCisJCQkgKiBXZSBtdXN0IE5PVCBtb2RpZnkgcGRlcywgZHVlIHRvIHRoZQorCQkJICogc2VtYW50aWNzIG9mIHZmb3JrLgorCQkJICovCisJCQlpZiAodHBkZXMxICE9IFNURE9VVF9GSUxFTk8pIHsKKwkJCQkodm9pZClkdXAyKHRwZGVzMSwgU1RET1VUX0ZJTEVOTyk7CisJCQkJKHZvaWQpY2xvc2UodHBkZXMxKTsKKwkJCQl0cGRlczEgPSBTVERPVVRfRklMRU5POworCQkJfQorCQl9IGVsc2UgeworCQkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJCQlpZiAocGRlc1swXSAhPSBTVERJTl9GSUxFTk8pIHsKKwkJCQkodm9pZClkdXAyKHBkZXNbMF0sIFNURElOX0ZJTEVOTyk7CisJCQkJKHZvaWQpY2xvc2UocGRlc1swXSk7CisJCQl9CisJCX0KKwkJZXhlY2woX1BBVEhfQlNIRUxMLCAic2giLCAiLWMiLCBwcm9ncmFtLCAoY2hhciAqKU5VTEwpOworCQlfZXhpdCgxMjcpOworCQkvKiBOT1RSRUFDSEVEICovCisJICAgIH0KKwl9CisKKwkvKiBQYXJlbnQ7IGFzc3VtZSBmZG9wZW4gY2FuJ3QgZmFpbC4gKi8KKwlpZiAoKnR5cGUgPT0gJ3InKSB7CisJCWlvcCA9IGZkb3BlbihwZGVzWzBdLCB0eXBlKTsKKwkJKHZvaWQpY2xvc2UocGRlc1sxXSk7CisJfSBlbHNlIHsKKwkJaW9wID0gZmRvcGVuKHBkZXNbMV0sIHR5cGUpOworCQkodm9pZCljbG9zZShwZGVzWzBdKTsKKwl9CisKKwkvKiBMaW5rIGludG8gbGlzdCBvZiBmaWxlIGRlc2NyaXB0b3JzLiAqLworCWN1ci0+ZnAgPSBpb3A7CisJY3VyLT5waWQgPSAgcGlkOworCWN1ci0+bmV4dCA9IHBpZGxpc3Q7CisJcGlkbGlzdCA9IGN1cjsKKworCXJldHVybiAoaW9wKTsKK30KKworLyoKKyAqIHBjbG9zZSAtLQorICoJUGNsb3NlIHJldHVybnMgLTEgaWYgc3RyZWFtIGlzIG5vdCBhc3NvY2lhdGVkIHdpdGggYSBgcG9wZW5lZCcgY29tbWFuZCwKKyAqCWlmIGFscmVhZHkgYHBjbG9zZWQnLCBvciB3YWl0cGlkIHJldHVybnMgYW4gZXJyb3IuCisgKi8KK2ludAorcGNsb3NlKEZJTEUgKmlvcCkKK3sKKwlzdHJ1Y3QgcGlkICpjdXIsICpsYXN0OworCWludCBwc3RhdDsKKwlwaWRfdCBwaWQ7CisKKwkvKiBGaW5kIHRoZSBhcHByb3ByaWF0ZSBmaWxlIHBvaW50ZXIuICovCisJZm9yIChsYXN0ID0gTlVMTCwgY3VyID0gcGlkbGlzdDsgY3VyOyBsYXN0ID0gY3VyLCBjdXIgPSBjdXItPm5leHQpCisJCWlmIChjdXItPmZwID09IGlvcCkKKwkJCWJyZWFrOworCisJaWYgKGN1ciA9PSBOVUxMKQorCQlyZXR1cm4gKC0xKTsKKworCSh2b2lkKWZjbG9zZShpb3ApOworCisJZG8geworCQlwaWQgPSB3YWl0cGlkKGN1ci0+cGlkLCAmcHN0YXQsIDApOworCX0gd2hpbGUgKHBpZCA9PSAtMSAmJiBlcnJubyA9PSBFSU5UUik7CisKKwkvKiBSZW1vdmUgdGhlIGVudHJ5IGZyb20gdGhlIGxpbmtlZCBsaXN0LiAqLworCWlmIChsYXN0ID09IE5VTEwpCisJCXBpZGxpc3QgPSBjdXItPm5leHQ7CisJZWxzZQorCQlsYXN0LT5uZXh0ID0gY3VyLT5uZXh0OworCWZyZWUoY3VyKTsKKworCXJldHVybiAocGlkID09IC0xID8gLTEgOiBwc3RhdCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wcmVhZC5jIGIvbGliYy91bmlzdGQvcHJlYWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YmZhZWFhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcHJlYWQuYwpAQCAtMCwwICsxLDQ5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworLyoKKyAqIE5vbi1hdG9taWMgZW11bGF0aW9uIG9mIHRoZSBwcmVhZCBzeXN0ZW0gY2FsbC4KKyAqLworc3NpemVfdCBwcmVhZChpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpCit7CisgICAgaW50IHNhdmVfZXJybm87CisgICAgc3NpemVfdCBucmVhZDsKKyAgICBvZmZfdCBzYXZlX29mZnNldCA9IGxzZWVrKGZkLCBvZmZzZXQsIFNFRUtfU0VUKTsKKyAgICBpZiAoc2F2ZV9vZmZzZXQgPCAwKSB7CisgICAgICAgIHJldHVybiAtMTsKKyAgICB9CisgICAgbnJlYWQgPSByZWFkKGZkLCBidWYsIGNvdW50KTsKKyAgICBzYXZlX2Vycm5vID0gZXJybm87CisgICAgLyogRXZlbiBpZiB0aGUgcmVhZCBmYWlsZWQsIHRyeSB0byByZXN0b3JlIHRoZSBzZWVrIHBvaW50ZXIgKi8KKyAgICBsc2VlayhmZCwgc2F2ZV9vZmZzZXQsIFNFRUtfU0VUKTsKKyAgICBlcnJubyA9IHNhdmVfZXJybm87CisgICAgcmV0dXJuIG5yZWFkOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcHNlbGVjdC5jIGIvbGliYy91bmlzdGQvcHNlbGVjdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2Y2UyYzAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wc2VsZWN0LmMKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy9zZWxlY3QuaD4KKyNpbmNsdWRlIDxzaWduYWwuaD4KKyNpbmNsdWRlIDxwdGhyZWFkLmg+CisKK2ludAorcHNlbGVjdChpbnQgIG4sIGZkX3NldCogIHJlYWRmZHMsIGZkX3NldCogIHdyaXRlZmRzLCBmZF9zZXQqICBlcnJmZHMsCisgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyogIHRpbWVvdXQsIGNvbnN0IHNpZ3NldF90KiAgc2lnbWFzaykKK3sKKyAgICBzaWdzZXRfdCAgICAgICAgb2xkbWFzazsKKyAgICBpbnQgICAgICAgICAgICAgcmVzdWx0OworICAgIHN0cnVjdCB0aW1ldmFsICB0diwgKnR2X3RpbWVvdXQgPSBOVUxMOworCisgICAgaWYgKHNpZ21hc2sgIT0gTlVMTCkKKyAgICAgICAgcHRocmVhZF9zaWdtYXNrKCBTSUdfU0VUTUFTSywgc2lnbWFzaywgJm9sZG1hc2sgKTsKKworICAgIGlmICh0aW1lb3V0ICE9IE5VTEwpIHsKKyAgICAgICAgdHZfdGltZW91dCA9ICZ0djsKKyAgICAgICAgdHYudHZfc2VjICA9IHRpbWVvdXQtPnR2X3NlYzsKKyAgICAgICAgdHYudHZfdXNlYyA9ICh0aW1lb3V0LT50dl9uc2VjICsgOTk5KS8xMDAwOyAgLy8gcm91bmQgdXAKKyAgICAgICAgaWYgKHR2LnR2X3VzZWMgPj0gMTAwMDAwMCkgeworICAgICAgICAgICAgdHYudHZfc2VjICArPSAxOworICAgICAgICAgICAgdHYudHZfdXNlYyAtPSAxMDAwMDAwOworICAgICAgICB9CisgICAgfQorCisgICAgcmVzdWx0ID0gc2VsZWN0KCBuLCByZWFkZmRzLCB3cml0ZWZkcywgZXJyZmRzLCB0dl90aW1lb3V0ICk7CisKKyAgICBpZiAoc2lnbWFzayAhPSBOVUxMKQorICAgICAgICBwdGhyZWFkX3NpZ21hc2soIFNJR19TRVRNQVNLLCAmb2xkbWFzaywgTlVMTCApOworCisgICAgcmV0dXJuIHJlc3VsdDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3B0c25hbWUuYyBiL2xpYmMvdW5pc3RkL3B0c25hbWUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNGQ1ZDMwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcHRzbmFtZS5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHRlcm1pb3MuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworLyogbm90IHRocmVhZC1zYWZlICovCitjaGFyKiAgcHRzbmFtZSggaW50IGZkICkKK3sKKyAgICB1bnNpZ25lZCBpbnQgIHB0eV9udW07CisgICAgc3RhdGljIGNoYXIgICBidWZmWzY0XTsKKworICAgIGlmICggaW9jdGwoIGZkLCBUSU9DR1BUTiwgJnB0eV9udW0gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBzbnByaW50ZiggYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiL2Rldi9wdHMvJXUiLCBwdHlfbnVtICk7CisgICAgcmV0dXJuIGJ1ZmY7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9wdHNuYW1lX3IuYyBiL2xpYmMvdW5pc3RkL3B0c25hbWVfci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZDA2N2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9wdHNuYW1lX3IuYwpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDx0ZXJtaW9zLmg+CisjaW5jbHVkZSA8c3lzL2lvY3RsLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworY2hhciogIHB0c25hbWVfciggaW50ICBmZCwgY2hhciogIGJ1Ziwgc2l6ZV90ICBidWZsZW4pCit7CisgICAgdW5zaWduZWQgaW50ICBwdHlfbnVtOworICAgIGNoYXIgICAgICAgICAgYnVmZls2NF07CisgICAgaW50ICAgICAgICAgICBsZW47CisKKyAgICBpZiAoYnVmID09IE5VTEwpIHsKKyAgICAgICAgZXJybm8gPSBFSU5WQUw7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKworICAgIGlmICggaW9jdGwoIGZkLCBUSU9DR1BUTiwgJnB0eV9udW0gKSAhPSAwICkKKyAgICAgICAgcmV0dXJuIE5VTEw7CisKKyAgICBsZW4gPSBzbnByaW50ZiggYnVmZiwgc2l6ZW9mKGJ1ZmYpLCAiL2Rldi9wdHMvJXUiLCBwdHlfbnVtICk7CisgICAgaWYgKGxlbisxID4gKGludClidWZsZW4pIHsKKyAgICAgICAgZXJybm8gPSBFUkFOR0U7CisgICAgICAgIHJldHVybiBOVUxMOworICAgIH0KKyAgICBtZW1jcHkoIGJ1ZiwgYnVmZiwgbGVuKzEgKTsKKyAgICByZXR1cm4gYnVmOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcHdyaXRlLmMgYi9saWJjL3VuaXN0ZC9wd3JpdGUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43ZjVlMDcxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcHdyaXRlLmMKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKy8qCisgKiBOb24tYXRvbWljIGVtdWxhdGlvbiBvZiB0aGUgcHdyaXRlIHN5c3RlbSBjYWxsLgorICovCitzc2l6ZV90IHB3cml0ZShpbnQgZmQsIHZvaWQgKmJ1Ziwgc2l6ZV90IGNvdW50LCBvZmZfdCBvZmZzZXQpCit7CisgICAgaW50IHNhdmVfZXJybm87CisgICAgc3NpemVfdCBud3JpdGU7CisgICAgb2ZmX3Qgc2F2ZV9vZmZzZXQgPSBsc2VlayhmZCwgb2Zmc2V0LCBTRUVLX1NFVCk7CisgICAgaWYgKHNhdmVfb2Zmc2V0IDwgMCkgeworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorICAgIG53cml0ZSA9IHdyaXRlKGZkLCBidWYsIGNvdW50KTsKKyAgICBzYXZlX2Vycm5vID0gZXJybm87CisgICAgLyogRXZlbiBpZiB0aGUgd3JpdGUgZmFpbGVkLCB0cnkgdG8gcmVzdG9yZSB0aGUgc2VlayBwb2ludGVyICovCisgICAgbHNlZWsoZmQsIHNhdmVfb2Zmc2V0LCBTRUVLX1NFVCk7CisgICAgZXJybm8gPSBzYXZlX2Vycm5vOworICAgIHJldHVybiBud3JpdGU7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9yYWlzZS5jIGIvbGliYy91bmlzdGQvcmFpc2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTA5OWRhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcmFpc2UuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisKK2ludCByYWlzZShpbnQgc2lnbnVtKQoreworICAgIHJldHVybiBraWxsKGdldHBpZCgpLCBzaWdudW0pOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvcmVib290LmMgYi9saWJjL3VuaXN0ZC9yZWJvb3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZmU4Y2RjCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcmVib290LmMKQEAgLTAsMCArMSwzNCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9yZWJvb3QuaD4KKworaW50IHJlYm9vdCAoaW50ICBtb2RlKSAKK3sKKyAgICByZXR1cm4gX19yZWJvb3QoIExJTlVYX1JFQk9PVF9NQUdJQzEsIExJTlVYX1JFQk9PVF9NQUdJQzIsIG1vZGUsIE5VTEwgKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3JlY3YuYyBiL2xpYmMvdW5pc3RkL3JlY3YuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzlkN2ZhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvcmVjdi5jCkBAIC0wLDAgKzEsMzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisKK3NzaXplX3QgcmVjdihpbnQgc29ja2V0LCB2b2lkICpidWYsIHNpemVfdCBidWZsZW4sIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgICByZXR1cm4gcmVjdmZyb20oc29ja2V0LCBidWYsIGJ1ZmxlbiwgZmxhZ3MsIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2Jyay5jIGIvbGliYy91bmlzdGQvc2Jyay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmExMTJiNmMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zYnJrLmMKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPGVycm5vLmg+CisKKworI2RlZmluZSAgU0JSS19BTElHTiAgMzIKKworLyogc2hhcmVkIHdpdGggYnJrKCkgaW1wbGVtZW50YXRpb24gKi8KK2NoYXIqICAgX19iaW9uaWNfYnJrOworCit2b2lkICpzYnJrKHB0cmRpZmZfdCBpbmNyZW1lbnQpCit7CisgICAgY2hhciogIHN0YXJ0OworICAgIGNoYXIqICBlbmQ7CisgICAgY2hhciogIG5ld19icms7CisgIAorICAgIGlmICggIV9fYmlvbmljX2JyaykKKyAgICAgICAgX19iaW9uaWNfYnJrID0gX19icmsoKHZvaWQqKTApOworCisgICAgc3RhcnQgPSAoY2hhciopKCgobG9uZylfX2Jpb25pY19icmsgKyBTQlJLX0FMSUdOLTEpICYgfihTQlJLX0FMSUdOLTEpKTsKKyAgZW5kICAgPSBzdGFydCArIGluY3JlbWVudDsKKworICBuZXdfYnJrID0gX19icmsoZW5kKTsKKyAgICBpZiAobmV3X2JyayA9PSAodm9pZCopLTEpCisgICAgICAgIHJldHVybiBuZXdfYnJrOworICAgIGVsc2UgaWYgKG5ld19icmsgPCBlbmQpCisgICAgeworICAgIGVycm5vID0gRU5PTUVNOworICAgICAgICByZXR1cm4gKHZvaWQqKS0xOworICB9CisKKyAgICBfX2Jpb25pY19icmsgPSBuZXdfYnJrOworICByZXR1cm4gc3RhcnQ7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zZW5kLmMgYi9saWJjL3VuaXN0ZC9zZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTk3OGY5OAotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NlbmQuYwpAQCAtMCwwICsxLDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgorCitzc2l6ZV90IHNlbmQoaW50IHNvY2tldCwgY29uc3Qgdm9pZCAqYnVmLCBzaXplX3QgYnVmbGVuLCB1bnNpZ25lZCBpbnQgZmxhZ3MpCit7CisgICAgcmV0dXJuIChzc2l6ZV90KSBzZW5kdG8oc29ja2V0LCBidWYsIGJ1ZmxlbiwgZmxhZ3MsIE5VTEwsIDApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc2V0ZWdpZC5jIGIvbGliYy91bmlzdGQvc2V0ZWdpZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjliZDY5N2IKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zZXRlZ2lkLmMKQEAgLTAsMCArMSwzMyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorCitpbnQgc2V0ZWdpZChnaWRfdCBlZ2lkKQoreworICAgIHJldHVybiBzZXRyZXNnaWQoLTEsIGVnaWQsIC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NldGV1aWQuYyBiL2xpYmMvdW5pc3RkL3NldGV1aWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MmVlNzgwCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2V0ZXVpZC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IHNldGV1aWQodWlkX3QgZXVpZCkKK3sKKyAgICByZXR1cm4gc2V0cmVzdWlkKC0xLCBldWlkLC0xKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NldHBncnAuYyBiL2xpYmMvdW5pc3RkL3NldHBncnAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42ZGZmODIyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2V0cGdycC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworaW50IHNldHBncnAodm9pZCkKK3sKKyAgcmV0dXJuIHNldHBnaWQoMCwwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ2Jsb2NrLmMgYi9saWJjL3VuaXN0ZC9zaWdibG9jay5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg2M2Q3ZGEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zaWdibG9jay5jCkBAIC0wLDAgKzEsNDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSB0aGUgQVJNIGFzc2VtYmx5IHNldGptcCBmcmFnbWVudHMgKi8KK2ludAorc2lnYmxvY2soaW50IG1hc2spCit7CisgICAgaW50ICBuOworICAgIHVuaW9uIHsKKyAgICAgICAgaW50ICAgICAgIHRoZV9tYXNrOworICAgICAgICBzaWdzZXRfdCAgdGhlX3NpZ3NldDsKKyAgICB9IGluLCBvdXQ7CisKKyAgICBpbi50aGVfbWFzayA9IG1hc2s7CisKKyAgICBuID0gc2lncHJvY21hc2soU0lHX0JMT0NLLCAmaW4udGhlX3NpZ3NldCwgJm91dC50aGVfc2lnc2V0KTsKKyAgICBpZiAobikKKyAgICAgICAgcmV0dXJuIG47CisKKyAgICByZXR1cm4gb3V0LnRoZV9tYXNrOworfQorCisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ2xpc3QuYyBiL2xpYmMvdW5pc3RkL3NpZ2xpc3QuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMmFjOWZlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnbGlzdC5jCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworY29uc3QgY2hhciAqIGNvbnN0IHN5c19zaWdsaXN0W05TSUddID0geworI2RlZmluZSAgX19CSU9OSUNfU0lHREVGKHgseSx6KSAgIFsgeCBdID0geiwKKyNpbmNsdWRlIDxzeXMvX3NpZ2RlZnMuaD4KK307CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWduYWwuYyBiL2xpYmMvdW5pc3RkL3NpZ25hbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk0OWRiMTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zaWduYWwuYwpAQCAtMCwwICsxLDU3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKworc3RhdGljIF9fc2lnaGFuZGxlcl90Citfc2lnbmFsKGludCAgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCAgaGFuZGxlciwgaW50ICBmbGFncykKK3sKKyAgICBzdHJ1Y3Qgc2lnYWN0aW9uICBzYTsKKyAgICBfX3NpZ2hhbmRsZXJfdCAgICByZXN1bHQgPSBTSUdfRVJSOworCisgICAgc2lnZW1wdHlzZXQoICZzYS5zYV9tYXNrICk7CisKKyAgICBzYS5zYV9oYW5kbGVyID0gaGFuZGxlcjsKKyAgICBzYS5zYV9mbGFncyAgID0gZmxhZ3M7CisKKyAgICBpZiAoICFzaWdhY3Rpb24oIHNpZ251bSwgJnNhLCAmc2EgKSApCisgICAgICAgIHJlc3VsdCA9IChfX3NpZ2hhbmRsZXJfdCkgc2Euc2FfaGFuZGxlcjsKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKKworX19zaWdoYW5kbGVyX3QgYnNkX3NpZ25hbChpbnQgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyKQoreworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU1RBUlQpOworfQorCitfX3NpZ2hhbmRsZXJfdCBzeXN2X3NpZ25hbChpbnQgc2lnbnVtLCBfX3NpZ2hhbmRsZXJfdCBoYW5kbGVyKQoreworICByZXR1cm4gX3NpZ25hbChzaWdudW0sIGhhbmRsZXIsIFNBX1JFU0VUSEFORCk7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zaWdzZXRtYXNrLmMgYi9saWJjL3VuaXN0ZC9zaWdzZXRtYXNrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjk4NzU5NQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3NpZ3NldG1hc2suYwpAQCAtMCwwICsxLDQ3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c2lnbmFsLmg+CisKKy8qIGNhbGxlZCBmcm9tIHNldGptcCBhc3NlbWJseSBmcmFnbWVudCAqLworaW50CitzaWdzZXRtYXNrKGludCBtYXNrKQoreworICAgIGludCAgbjsKKworICAgIHVuaW9uIHsKKyAgICAgICAgaW50ICAgICAgIHRoZV9tYXNrOworICAgICAgICBzaWdzZXRfdCAgdGhlX3NpZ3NldDsKKyAgICB9IGluLCBvdXQ7CisKKyAgICBuID0gc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZpbi50aGVfc2lnc2V0LCAmb3V0LnRoZV9zaWdzZXQpOworICAgIGlmIChuKQorICAgICAgICByZXR1cm4gbjsKKworICAgIHJldHVybiBvdXQudGhlX21hc2s7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ3N1c3BlbmQuYyBiL2xpYmMvdW5pc3RkL3NpZ3N1c3BlbmQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZGIwNWVkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnc3VzcGVuZC5jCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxzaWduYWwuaD4KKworZXh0ZXJuIGludCBfX3NpZ3N1c3BlbmQoaW50LCBpbnQsIHVuc2lnbmVkIGludCk7CisKK2ludCBzaWdzdXNwZW5kKGNvbnN0IHNpZ3NldF90ICpfbWFzaykKK3sKKyAgICB1bnNpZ25lZCBpbnQgICAgbWFzayA9ICh1bnNpZ25lZCBpbnQpKl9tYXNrOworCisJcmV0dXJuIF9fc2lnc3VzcGVuZCgwLCAwLCBtYXNrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NpZ3dhaXQuYyBiL2xpYmMvdW5pc3RkL3NpZ3dhaXQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWMyYTU0Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc2lnd2FpdC5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHRpbWUuaD4KKworaW50IF9fcnRfc2lndGltZWR3YWl0KGNvbnN0IHNpZ3NldF90ICp1dGhlc2UsIHNpZ2luZm9fdCAqdWluZm8sIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqdXRzLCBzaXplX3Qgc2lnc2V0c2l6ZSk7CisKKy8qIG9rLCB0aGlzIGlzIHJlYWxseSBzdWJ0bGU6IDxhc20vc2lnbmFsLmg+IGRlZmluZXMgc2lnc2V0X3QgZGlmZmVyZW50bHkKKyAqIHdoZW4geW91J3JlIGluIHRoZSBrZXJuZWwgb3IgaW4gdGhlIEMgbGlicmFyeS4KKyAqCisgKiBpbiB0aGUga2VybmVsLCB0aGlzIGlzIGFuIGFycmF5IG9mIDIgMzItYml0IHVuc2lnbmVkIGxvbmdzCisgKiBpbiB0aGUgQyBsaWJyYXJ5LCB0aGlzIGlzIGEgc2luZ2xlIDMyLWJpdCB1bnNpZ25lZCBsb25nCisgKgorICogbW9yZW92ZXIsIHRoZSBrZXJuZWwgaW1wbGVtZW50YXRpb24gb2YgcnRfc2lndGltZWR3YWl0IGRvZXNuJ3QKKyAqIGFjY2VwdCBhbnl0aGluZyBleGNlcHQga2VybmVsLXNpemVkIHNpZ25hbCBzZXRzIChwcm9iYWJseSBhIGJ1ZyAhKQorICoKKyAqIHdlIHRodXMgbmVlZCB0byBjcmVhdGUgYSBmYWtlIGtlcm5lbCBzaWdzZXQgISEKKyAqLworCitpbnQgc2lnd2FpdChjb25zdCBzaWdzZXRfdCAqc2V0LCBpbnQgKnNpZykKK3sKKyAgICBpbnQgIHJldDsKKyAgICAvKiB1c2UgYSB1bmlvbiB0byBnZXQgcmlkIG9mIGFsaWFzaW5nIHdhcm5pbmdzICovCisgICAgdW5pb24geworICAgICAgdW5zaWduZWQgbG9uZyAga2VybmVsX3NpZ3NldFsyXTsKKyAgICAgIHNpZ3NldF90ICAgICAgIGR1bW15X3NpZ3NldDsKKyAgICB9IHU7CisKKyAgICB1Lmtlcm5lbF9zaWdzZXRbMF0gPSAqc2V0OworICAgIHUua2VybmVsX3NpZ3NldFsxXSA9IDA7ICAvKiBubyByZWFsLXRpbWUgc2lnbmFscyBzdXBwb3J0ZWQgPyAqLworICAgIGZvciAoOzspCisgICAgeworICAgICAvKiBfX3J0X3NpZ3RpbWVkd2FpdCBjYW4gcmV0dXJuIEVBR0FJTiBvciBFSU5UUiwgd2UgbmVlZCB0byBsb29wCisgICAgICAqIGFyb3VuZCB0aGVtIHNpbmNlIHNpZ3dhaXQgaXMgb25seSBhbGxvd2VkIHRvIHJldHVybiBFSU5WQUwKKyAgICAgICovCisgICAgICByZXQgPSBfX3J0X3NpZ3RpbWVkd2FpdCAoICZ1LmR1bW15X3NpZ3NldCwgTlVMTCwgTlVMTCwgc2l6ZW9mKHUua2VybmVsX3NpZ3NldCkpOworICAgICAgaWYgKHJldCA+PSAwKQorICAgICAgICBicmVhazsKKworICAgICAgaWYgKGVycm5vICE9IEVBR0FJTiAmJiBlcnJubyAhPSBFSU5UUikKKyAgICAgICAgcmV0dXJuIGVycm5vOworICAgIH0KKworICAgICpzaWcgPSByZXQ7CisgICAgcmV0dXJuIDA7Cit9CisKZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3NsZWVwLmMgYi9saWJjL3VuaXN0ZC9zbGVlcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhZmJkNjAKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zbGVlcC5jCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx0aW1lLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKwordW5zaWduZWQgaW50IHNsZWVwKHVuc2lnbmVkIGludCBzZWNvbmRzKQoreworICAgIHN0cnVjdCB0aW1lc3BlYyAgdDsKKworICAgLyogc2Vjb25kcyBpcyB1bnNpZ25lZCwgd2hpbGUgdC50dl9zZWMgaXMgc2lnbmVkCisgICAgKiBzb21lIHBlb3BsZSB3YW50IHRvIGRvIHNsZWVwKFVJTlRfTUFYKSwgc28gZmFrZQorICAgICogc3VwcG9ydCBmb3IgaXQgYnkgb25seSBzbGVlcGluZyAyIGJpbGxpb24gc2Vjb25kcworICAgICovCisgICAgaWYgKChpbnQpc2Vjb25kcyA8IDApCisgICAgICAgIHNlY29uZHMgPSAweDdmZmZmZmZmOworICAgICAgICAKKyAgICB0LnR2X3NlYyAgPSBzZWNvbmRzOworICAgIHQudHZfbnNlYyA9IDA7CisKKyAgICBpZiAoICFuYW5vc2xlZXAoICZ0LCAmdCApICkKKyAgICByZXR1cm4gMDsKKworICAgIGlmICggZXJybm8gPT0gRUlOVFIgKQorICAgICAgICByZXR1cm4gdC50dl9zZWM7CisKKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zb2NrZXRjYWxscy5jIGIvbGliYy91bmlzdGQvc29ja2V0Y2FsbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTdhYmMyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc29ja2V0Y2FsbHMuYwpAQCAtMCwwICsxLDI1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvbGludXgtc3lzY2FsbHMuaD4KKworZW51bQoreworICAgIFNZU19TT0NLRVQgPSAxLAorICAgIFNZU19CSU5ELAorICAgIFNZU19DT05ORUNULAorICAgIFNZU19MSVNURU4sCisgICAgU1lTX0FDQ0VQVCwKKyAgICBTWVNfR0VUU09DS05BTUUsCisgICAgU1lTX0dFVFBFRVJOQU1FLAorICAgIFNZU19TT0NLRVRQQUlSLAorICAgIFNZU19TRU5ELAorICAgIFNZU19SRUNWLAorICAgIFNZU19TRU5EVE8sCisgICAgU1lTX1JFQ1ZGUk9NLAorICAgIFNZU19TSFVURE9XTiwKKyAgICBTWVNfU0VUU09DS09QVCwKKyAgICBTWVNfR0VUU09DS09QVCwKKyAgICBTWVNfU0VORE1TRywKKyAgICBTWVNfUkVDVk1TRworfTsKKworI2lmbmRlZiBfX05SX3NvY2tldAoraW50IHNvY2tldChpbnQgZG9tYWluLCBpbnQgdHlwZSwgaW50IHByb3RvY29sKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGRvbWFpbjsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHR5cGU7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBwcm90b2NvbDsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zb2NrZXQgKi8KKworCisjaWZuZGVmIF9fTlJfYmluZAoraW50IGJpbmQoaW50IHNvY2tmZCwgY29uc3Qgc3RydWN0IHNvY2thZGRyICpteV9hZGRyLCBzb2NrbGVuX3QgYWRkcmxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzNdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZmQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBteV9hZGRyOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgYWRkcmxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19CSU5ELCB0ICk7Cit9CisjZW5kaWYgIC8qICFfX05SX2JpbmQgKi8KKworI2lmbmRlZiBfX05SX2Nvbm5lY3QKK2ludCBjb25uZWN0KGludCBzb2NrZmQsIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqc2Vydl9hZGRyLCBzb2NrbGVuX3QgIGFkZHJsZW4gKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tmZDsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIHNlcnZfYWRkcjsKKyAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJsZW47CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQ09OTkVDVCwgdCApOworfQorI2VuZGlmIC8qICFfX05SX2Nvbm5lY3QgKi8KKworI2lmbmRlZiBfX05SX2xpc3RlbgoraW50IGxpc3RlbihpbnQgcywgaW50IGJhY2tsb2cpCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFsyXTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGJhY2tsb2c7CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfTElTVEVOLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9saXN0ZW4gKi8KKworI2lmbmRlZiBfX05SX2FjY2VwdAoraW50IGFjY2VwdChpbnQgc29jaywgc3RydWN0IHNvY2thZGRyICphZHJlc3NlLCBzb2NrbGVuX3QgKmxvbmd1ZXVyKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2s7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBhZHJlc3NlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbG9uZ3VldXI7CisKKyAgICByZXR1cm4gKGludCkgX19zb2NrZXRjYWxsKCBTWVNfQUNDRVBULCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9hY2NlcHQgKi8KKworI2lmbmRlZiBfX05SX2dldHNvY2tuYW1lCitpbnQgZ2V0c29ja25hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqIG5hbWUsIHNvY2tsZW5fdCAqIG5hbWVsZW4gKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRTT0NLTkFNRSwgdCApOworfQorI2VuZGlmIC8qIF9fTlJfZ2V0c29ja25hbWUgKi8KKworI2lmbmRlZiBfX05SX2dldHBlZXJuYW1lCitpbnQgZ2V0cGVlcm5hbWUoaW50IHMsIHN0cnVjdCBzb2NrYWRkciAqbmFtZSwgc29ja2xlbl90ICpuYW1lbGVuKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHM7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBuYW1lOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgbmFtZWxlbjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19HRVRQRUVSTkFNRSwgdCApOworfQorI2VuZGlmIC8qICFfX05SX2dldHBlZXJuYW1lICovCisKKyNpZm5kZWYgX19OUl9zb2NrZXRwYWlyCitpbnQgc29ja2V0cGFpcihpbnQgZCwgaW50IHR5cGUsIGludCBwcm90b2NvbCwgaW50IHN2WzJdKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbNF07CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIGQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSB0eXBlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgcHJvdG9jb2w7CisgICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBzdjsKKworICAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TT0NLRVRQQUlSLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9zb2NrZXRwYWlyICovCisKKyNpZm5kZWYgX19OUl9zZW5kdG8KK3NzaXplX3Qgc2VuZHRvKGludCBzb2NrZXQsIGNvbnN0IHZvaWQgKm1lc3NhZ2UsIHNpemVfdCBsZW5ndGgsIGludCBmbGFncywKKyAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqZGVzdF9hZGRyLCBzb2NrbGVuX3QgZGVzdF9sZW4pCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFs2XTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgc29ja2V0OworICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbWVzc2FnZTsKKyAgICB0WzJdID0gKHVuc2lnbmVkIGxvbmcpIGxlbmd0aDsKKyAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIGZsYWdzOworICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9hZGRyOworICAgIHRbNV0gPSAodW5zaWduZWQgbG9uZykgZGVzdF9sZW47CisKKyAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19TRU5EVE8sIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zZW5kdG8gKi8KKworI2lmbmRlZiBfX05SX3JlY3Zmcm9tCitzc2l6ZV90IHJlY3Zmcm9tKGludCBzb2NrZXQsIHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGxlbmd0aCwgdW5zaWduZWQgaW50IGZsYWdzLAorICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzb2NrYWRkciAqYWRkcmVzcywgc29ja2xlbl90ICphZGRyZXNzX2xlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzZdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBidWZmZXI7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBsZW5ndGg7CisgICAgdFszXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKKyAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIGFkZHJlc3M7CisgICAgdFs1XSA9ICh1bnNpZ25lZCBsb25nKSBhZGRyZXNzX2xlbjsKKworICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1JFQ1ZGUk9NLCB0ICk7Cit9CisjZW5kaWYgLyogIV9fTlJfcmVjdmZyb20gKi8KKworI2lmbmRlZiBfX05SX3NodXRkb3duCitpbnQgc2h1dGRvd24oaW50IHNvY2tldCwgaW50IGhvdykKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzJdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBob3c7CisKKyAgIHJldHVybiAoaW50KSBfX3NvY2tldGNhbGwoIFNZU19TSFVURE9XTiwgdCApOworfQorI2VuZGlmIC8qICFfX05SX3NodXRkb3duICovCisKKyNpZm5kZWYgX19OUl9zZXRzb2Nrb3B0CitpbnQgIHNldHNvY2tvcHQoIGludCAgcywgaW50ICBsZXZlbCwgaW50ICBvcHRuYW1lLCBjb25zdCB2b2lkKiAgb3B0dmFsLCBzb2NrbGVuX3QgIG9wdGxlbiApCit7CisgICAgdW5zaWduZWQgbG9uZyAgdFs1XTsKKworICAgIHRbMF0gPSAodW5zaWduZWQgbG9uZykgczsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIGxldmVsOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgb3B0bmFtZTsKKyAgICB0WzNdID0gKHVuc2lnbmVkIGxvbmcpIG9wdHZhbDsKKyAgICB0WzRdID0gKHVuc2lnbmVkIGxvbmcpIG9wdGxlbjsKKworICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX1NFVFNPQ0tPUFQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9zZXRzb2Nrb3B0ICovCisKKyNpZm5kZWYgX19OUl9nZXRzb2Nrb3B0CitpbnQgZ2V0c29ja29wdChpbnQgcywgaW50IGxldmVsLCBpbnQgb3B0bmFtZSwgdm9pZCAqb3B0dmFsLCBzb2NrbGVuX3QgKm9wdGxlbikKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzVdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzOworICAgIHRbMV0gPSAodW5zaWduZWQgbG9uZykgbGV2ZWw7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBvcHRuYW1lOworICAgIHRbM10gPSAodW5zaWduZWQgbG9uZykgb3B0dmFsOworICAgIHRbNF0gPSAodW5zaWduZWQgbG9uZykgb3B0bGVuOworCisgICAgcmV0dXJuIChpbnQpIF9fc29ja2V0Y2FsbCggU1lTX0dFVFNPQ0tPUFQsIHQgKTsKK30KKyNlbmRpZiAvKiAhX19OUl9nZXRzb2Nrb3B0ICovCisKKyNpZm5kZWYgX19OUl9zZW5kbXNnCitzc2l6ZV90IHNlbmRtc2cgKGludCBzb2NrZXQsIGNvbnN0IHN0cnVjdCBtc2doZHIgKm1lc3NhZ2UsIHVuc2lnbmVkIGludCBmbGFncykKK3sKKyAgICB1bnNpZ25lZCBsb25nICB0WzNdOworCisgICAgdFswXSA9ICh1bnNpZ25lZCBsb25nKSBzb2NrZXQ7CisgICAgdFsxXSA9ICh1bnNpZ25lZCBsb25nKSBtZXNzYWdlOworICAgIHRbMl0gPSAodW5zaWduZWQgbG9uZykgZmxhZ3M7CisKKyAgIHJldHVybiBfX3NvY2tldGNhbGwoIFNZU19TRU5ETVNHLCB0ICk7Cit9CisjZW5kaWYgLyogX19OUl9zZW5kbXNnICovCisKKyNpZm5kZWYgX19OUl9yZWN2bXNnCitzc2l6ZV90IHJlY3Ztc2coaW50IHNvY2tldCwgc3RydWN0IG1zZ2hkciAqbWVzc2FnZSwgdW5zaWduZWQgaW50IGZsYWdzKQoreworICAgIHVuc2lnbmVkIGxvbmcgIHRbM107CisKKyAgICB0WzBdID0gKHVuc2lnbmVkIGxvbmcpIHNvY2tldDsKKyAgICB0WzFdID0gKHVuc2lnbmVkIGxvbmcpIG1lc3NhZ2U7CisgICAgdFsyXSA9ICh1bnNpZ25lZCBsb25nKSBmbGFnczsKKworICAgcmV0dXJuIF9fc29ja2V0Y2FsbCggU1lTX1JFQ1ZNU0csIHQgKTsKK30KKyNlbmRpZiAvKiBfX05SX3JlY3Ztc2cgKi8KKwpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3RhdGZzLmMgYi9saWJjL3VuaXN0ZC9zdGF0ZnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTFlZjdhCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3RhdGZzLmMKQEAgLTAsMCArMSwzNSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHN5cy92ZnMuaD4KKworZXh0ZXJuIGludCBfX3N0YXRmczY0KGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBzdHJ1Y3Qgc3RhdGZzICopOworCitpbnQgc3RhdGZzKGNvbnN0IGNoYXIqICBwYXRoLCBzdHJ1Y3Qgc3RhdGZzKiAgc3RhdCkKK3sKKyAgICByZXR1cm4gX19zdGF0ZnM2NChwYXRoLCBzaXplb2Yoc3RydWN0IHN0YXRmcyksIHN0YXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMgYi9saWJjL3VuaXN0ZC9zdHJzaWduYWwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNzFkZTNkCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3Ryc2lnbmFsLmMKQEAgLTAsMCArMSwzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCitjaGFyKgorc3Ryc2lnbmFsKGludCAgc2lnKQoreworICAgIGlmICgodW5zaWduZWQpc2lnIDwgTlNJRykKKyAgICAgICAgcmV0dXJuIChjaGFyKikgc3lzX3NpZ2xpc3Rbc2lnXTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiAiSW52YWxpZCBzaWduYWwgbnVtYmVyIjsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3N5c2NvbmYuYyBiL2xpYmMvdW5pc3RkL3N5c2NvbmYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hMTllZGJiCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvc3lzY29uZi5jCkBAIC0wLDAgKzEsNDM0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3lzL3N5c2NvbmYuaD4KKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxzeXMvdGxzLmg+CisjaW5jbHVkZSA8YXNtL3BhZ2UuaD4KKyNpbmNsdWRlIDxzdGRpby5oPiAgLyogZm9yIEZPUEVOX01BWCAqLworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxjdHlwZS5oPgorCisvKiBzZWVtcyB0byBiZSB0aGUgZGVmYXVsdCBvbiBMaW51eCwgcGVyIHRoZSBHTGliYyBzb3VyY2VzIGFuZCBteSBvd24gZGlnZ2luZyAqLworCisjZGVmaW5lICBTWVNURU1fQ0xLX1RDSyAgICAgICAgIDEwMAorI2RlZmluZSAgU1lTVEVNX0lPVl9NQVggICAgICAgICAxMDI0CisjZGVmaW5lICBTWVNURU1fREVMQVlUSU1FUl9NQVggIDIxNDc0ODM2NDcKKyNkZWZpbmUgIFNZU1RFTV9NUV9PUEVOX01BWCAgICAgOAorI2RlZmluZSAgU1lTVEVNX01RX1BSSU9fTUFYICAgICAzMjc2OAorI2RlZmluZSAgU1lTVEVNX1NFTV9OU0VNU19NQVggICAyNTYKKyNkZWZpbmUgIFNZU1RFTV9TRU1fVkFMVUVfTUFYICAgKDIxNDc0ODM2NDcpCisjZGVmaW5lICBTWVNURU1fU0lHUVVFVUVfTUFYICAgIDMyCisjZGVmaW5lICBTWVNURU1fVElNRVJfTUFYICAgICAgIDMyCisjZGVmaW5lICBTWVNURU1fTE9HSU5fTkFNRV9NQVggIDI1NgorI2RlZmluZSAgU1lTVEVNX1RUWV9OQU1FX01BWCAgICAzMgorCisvKiB0aGUgZm9sbG93aW5nIGRlcGVuZHMgb24gb3VyIGltcGxlbWVudGF0aW9uICovCisjZGVmaW5lICBTWVNURU1fQVRFWElUX01BWCAgICAgICAgICA2NTUzNiAgICAvKiBvdXIgaW1wbGVtZW50YXRpb24gaXMgdW5saW1pdGVkICovCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX0tFWVNfTUFYICAgICBCSU9OSUNfVExTX1NMT1RTCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX1NUQUNLX01JTiAgICAzMjc2OCAgICAvKiBsb3dlciB2YWx1ZXMgbWF5IGJlIHBvc3NpYmxlLCBidXQgYmUgY29uc2VydmF0aXZlICovCisjZGVmaW5lICBTWVNURU1fVEhSRUFEX1RIUkVBRFNfTUFYICAyMDQ4ICAgICAvKiByZWFsbHkgdW5saW1pdGVkICovCisKKyNkZWZpbmUgIFNZU1RFTV8yX0NfQklORCAgICAgX1BPU0lYX1ZFUlNJT04gIC8qIFBvc2l4IEMgYmluZGluZyB2ZXJzaW9uICovCisjZGVmaW5lICBTWVNURU1fMl9DX1ZFUiAgICAgIF9QT1NJWDJfQ19WRVJTSU9OCisjZGVmaW5lICBTWVNURU1fMl9DX0RFViAgICAgIC0xICAgICAgIC8qIFBvc2l4IEMgZGV2ZWxvcG1lbnQgdG9vbHMgdW5zdXBwb3J0ZWQgb24gdGhlIGRldmljZSAqLworI2RlZmluZSAgU1lTVEVNXzJfRk9SVF9ERVYgICAtMSAgICAgICAvKiBGb3J0cmFuIGRldmVsb3BtZW50IHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9GT1JUX1JVTiAgIC0xICAgICAgIC8qIEZvcnRyYW4gcnVudGltZSB1bnN1cHBvcnRlZCAqLworI2RlZmluZSAgU1lTVEVNXzJfU1dfREVWICAgICAtMSAgICAgICAvKiBwb3NpeCBzb2Z0d2FyZSBkZXYgdXRpbGl0aWVzIHVuc3VwcG9ydGVkICovCisjZGVmaW5lICBTWVNURU1fMl9MT0NBTEVERUYgIC0xICAgICAgIC8qIGxvY2FsZGVmKCkgdW5pbXBsZW1lbnRlZCAqLworI2RlZmluZSAgU1lTVEVNXzJfVVBFICAgICAgICAtMSAgICAgICAvKiBObyBVUEUgZm9yIHlvdSAhIChVc2VyIFBvcnRhYmlsaXR5IFV0aWxpdGllcykgKi8KKyNkZWZpbmUgIFNZU1RFTV8yX1ZFUlNJT04gICAgLTEgICAgICAgLyogTm8gcG9zaXggY29tbWFuZC1saW5lIHRvb2xzICovCisKK3N0YXRpYyBpbnQgIF9fZ2V0X25wcm9jX2NvbmYodm9pZCk7CitzdGF0aWMgaW50ICBfX2dldF9ucHJvY19vbmxuKHZvaWQpOworc3RhdGljIGludCAgX19nZXRfcGh5c19wYWdlcyh2b2lkKTsKK3N0YXRpYyBpbnQgIF9fZ2V0X2F2cGh5c19wYWdlcyh2b2lkKTsKKworaW50CitzeXNjb25mKCBpbnQgIG5hbWUgKQoreworICAgIHN3aXRjaCAobmFtZSkgeworI2lmZGVmIF9QT1NJWF9BUkdfTUFYCisgICAgY2FzZSBfU0NfQVJHX01BWDogICAgICAgICAgIHJldHVybiBfUE9TSVhfQVJHX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfQkFTRV9NQVgKKyAgICBjYXNlIF9TQ19CQ19CQVNFX01BWDogICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfQkFTRV9NQVg7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVgyX0JDX0RJTV9NQVgKKyAgICBjYXNlIF9TQ19CQ19ESU1fTUFYOiAgICAgICAgcmV0dXJuIF9QT1NJWDJfQkNfRElNX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfU0NBTEVfTUFYCisgICAgY2FzZSBfU0NfQkNfU0NBTEVfTUFYOiAgICAgIHJldHVybiBfUE9TSVgyX0JDX1NDQUxFX01BWDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWDJfQkNfU1RSSU5HX01BWAorICAgIGNhc2UgX1NDX0JDX1NUUklOR19NQVg6ICAgICByZXR1cm4gX1BPU0lYMl9CQ19TVFJJTkdfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfQ0hJTERfTUFYOiAgICAgICAgIHJldHVybiBDSElMRF9NQVg7CisgICAgY2FzZSBfU0NfQ0xLX1RDSzogICAgICAgICAgIHJldHVybiBTWVNURU1fQ0xLX1RDSzsKKyNpZmRlZiBfUE9TSVgyX0NPTExfV0VJR0hUU19NQVNLCisgICAgY2FzZSBfU0NfQ09MTF9XRUlHSFRTX01BWDogIHJldHVybiBfUE9TSVgyX0NPTExfV0VJR0hUU19NQVNLOworI2VuZGlmCisjaWZkZWYgX1BPU0lYMl9FWFBSX05FU1RfTUFYCisgICAgY2FzZSBfU0NfRVhQUl9ORVhUX01BU0s6ICAgIHJldHVybiBfUE9TSVgyX0VYUFJfTkVTVF9NQVg7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVgyX0xJTkVfTUFYCisgICAgY2FzZSBfU0NfTElORV9NQVg6ICAgICAgICAgIHJldHVybiBfUE9TSVgyX0xJTkVfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfTkdST1VQU19NQVg6ICAgICAgIHJldHVybiBOR1JPVVBTX01BWDsKKyAgICBjYXNlIF9TQ19PUEVOX01BWDogICAgICAgICAgcmV0dXJuIE9QRU5fTUFYOworICAgIC8vY2FzZSBfU0NfUEFTU19NQVg6ICAgICAgICAgIHJldHVybiBQQVNTX01BWDsKKyAgICBjYXNlIF9TQ18yX0NfQklORDogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfQklORDsKKyAgICBjYXNlIF9TQ18yX0NfREVWOiAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX0NfREVWOworICAgIGNhc2UgX1NDXzJfQ19WRVJTSU9OOiAgICAgICByZXR1cm4gU1lTVEVNXzJfQ19WRVI7CisgICAgLy9jYXNlIF9TQ18yX0NIQVJfVEVSTTogICAgICAgICByZXR1cm4gOworICAgIGNhc2UgX1NDXzJfRk9SVF9ERVY6ICAgICAgICByZXR1cm4gU1lTVEVNXzJfRk9SVF9ERVY7CisgICAgY2FzZSBfU0NfMl9GT1JUX1JVTjogICAgICAgIHJldHVybiBTWVNURU1fMl9GT1JUX1JVTjsKKyAgICBjYXNlIF9TQ18yX0xPQ0FMRURFRjogICAgICAgcmV0dXJuIFNZU1RFTV8yX0xPQ0FMRURFRjsKKyAgICBjYXNlIF9TQ18yX1NXX0RFVjogICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1NXX0RFVjsKKyAgICBjYXNlIF9TQ18yX1VQRTogICAgICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1VQRTsKKyAgICBjYXNlIF9TQ18yX1ZFUlNJT046ICAgICAgICAgcmV0dXJuIFNZU1RFTV8yX1ZFUlNJT047CisjaWZkZWYgX1BPU0lYX0pPQl9DT05UUk9MCisgICAgY2FzZSBfU0NfSk9CX0NPTlRST0w6ICAgICAgIHJldHVybiBfUE9TSVhfSk9CX0NPTlRST0w7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0FWRURfSURTCisgICAgY2FzZSBfU0NfU0FWRURfSURTOiAgICAgICAgIHJldHVybiBfUE9TSVhfU0FWRURfSURTOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1ZFUlNJT04KKyAgICBjYXNlIF9TQ19WRVJTSU9OOiAgICAgICAgICAgcmV0dXJuIF9QT1NJWF9WRVJTSU9OOworI2VuZGlmCisgICAgLy9jYXNlIF9TQ19SRV9EVVBfPEFYOiAgICAgICAgcmV0dXJuIDsKKyAgICBjYXNlIF9TQ19TVFJFQU1fTUFYOiAgICAgICAgcmV0dXJuIEZPUEVOX01BWDsKKyAgICAvL2Nhc2UgX1NDX1RaTkFNRV9NQVg6ICAgICAgICByZXR1cm4gOworI2lmIF9YT1BFTl9DUllQVAorICAgIGNhc2UgX1NDX1hPUEVOX0NSWVBUOiAgICAgICByZXR1cm4gX1hPUEVOX0NSWVBUOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX0VOSF9JMThOCisgICAgY2FzZSBfU0NfWE9QRU5fRU5IX0kxOE46ICAgIHJldHVybiBfWE9QRU5fRU5IX0kxOE47CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fU0hNCisgICAgY2FzZSBfU0NfWE9QRU5fU0hNOiAgICAgICAgIHJldHVybiBfWE9QRU5fU0hNOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1ZFUlNJT04KKyAgICBjYXNlIF9TQ19YT1BFTl9WRVJTSU9OOiAgICAgcmV0dXJuIF9YT1BFTl9WRVJTSU9OOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX1hDVV9WRVJTSU9OCisgICAgY2FzZSBfU0NfWE9QRU5fWENVX1ZFUlNJT046IHJldHVybiBfWE9QRU5fWENVX1ZFUlNJT047CisjZW5kaWYKKyNpZmRlZiBfWE9QRU5fUkVBTFRJTUUKKyAgICBjYXNlIF9TQ19YT1BFTl9SRUFMVElNRTogICAgcmV0dXJuIF9YT1BFTl9SRUFMVElNRTsKKyNlbmRpZgorI2lmZGVmIF9YT1BFTl9SRUFMVElNRV9USFJFQURTCisgICAgY2FzZSBfU0NfWE9QRU5fUkVBTFRJTUVfVEhSRUFEUzogcmV0dXJuIF9YT1BFTl9SRUFMVElNRV9USFJFQURTOworI2VuZGlmCisjaWZkZWYgX1hPUEVOX0xFR0FDWQorICAgIGNhc2UgX1NDX1hPUEVOX0xFR0FDWTogICAgICByZXR1cm4gX1hPUEVOX0xFR0FDWTsKKyNlbmRpZgorICAgIGNhc2UgX1NDX0FURVhJVF9NQVg6ICAgICAgICByZXR1cm4gU1lTVEVNX0FURVhJVF9NQVg7CisgICAgY2FzZSBfU0NfSU9WX01BWDogICAgICAgICAgIHJldHVybiBTWVNURU1fSU9WX01BWDsKKyAgICBjYXNlIF9TQ19QQUdFU0laRTogICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKKyAgICBjYXNlIF9TQ19QQUdFX1NJWkU6ICAgICAgICAgcmV0dXJuIFBBR0VfU0laRTsKKyNpZmRlZiBfWE9QRU5fVU5JWAorICAgIGNhc2UgX1NDX1hPUEVOX1VOSVg6ICAgICAgICByZXR1cm4gX1hPUEVOX1VOSVg7CisjZW5kaWYKKworICAgIC8vIFhYWDogVE9ETzogWEJTNSBub25zZW5zZQorCisjaWZkZWYgQUlPX0xJU1RJT19NQVgKKyAgICBjYXNlIF9TQ19BSU9fTElTVElPX01BWDogICAgICAgcmV0dXJuIEFJT19MSVNUSU9fTUFYOworI2VuZGlmCisjaWZkZWYgQUlPX01BWAorICAgIGNhc2UgX1NDX0FJT19NQVg6ICAgICAgICAgICAgICByZXR1cm4gQUlPX01BWDsKKyNlbmRpZgorI2lmZGVmIEFJT19QUklPX0RFTFRBX01BWAorICAgIGNhc2UgX1NDX0FJT19QUklPX0RFTFRBX01BWDogICByZXR1cm4gQUlPX1BSSU9fREVMVEFfTUFYOworI2VuZGlmCisgICAgY2FzZSBfU0NfREVMQVlUSU1FUl9NQVg6ICAgIHJldHVybiBTWVNURU1fREVMQVlUSU1FUl9NQVg7CisgICAgY2FzZSBfU0NfTVFfT1BFTl9NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfT1BFTl9NQVg7CisgICAgY2FzZSBfU0NfTVFfUFJJT19NQVg6ICAgICAgIHJldHVybiBTWVNURU1fTVFfUFJJT19NQVg7CisgICAgY2FzZSBfU0NfUlRTSUdfTUFYOiAgICAgICAgIHJldHVybiBSVFNJR19NQVg7CisgICAgY2FzZSBfU0NfU0VNX05TRU1TX01BWDogICAgIHJldHVybiBTWVNURU1fU0VNX05TRU1TX01BWDsKKyAgICBjYXNlIF9TQ19TRU1fVkFMVUVfTUFYOiAgICAgcmV0dXJuIFNZU1RFTV9TRU1fVkFMVUVfTUFYOworICAgIGNhc2UgX1NDX1NJR1FVRVVFX01BWDogICAgICByZXR1cm4gU1lTVEVNX1NJR1FVRVVFX01BWDsKKyAgICBjYXNlIF9TQ19USU1FUl9NQVg6ICAgICAgICAgcmV0dXJuIFNZU1RFTV9USU1FUl9NQVg7CisjaWZkZWYgX1BPU0lYX0FTWU5DSFJPTk9VU19JTworICAgIGNhc2UgX1NDX0FTWU5DSFJPTk9VU19JTzogICByZXR1cm4gX1BPU0lYX0FTWU5DSFJPTk9VU19JTzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9GU1lOQworICAgIGNhc2UgX1NDX0ZTWU5DOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX0ZTWU5DOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX01BUFBFRF9GSUxFUworICAgIGNhc2UgX1NDX01BUFBFRF9GSUxFUzogICAgICByZXR1cm4gX1BPU0lYX01BUFBFRF9GSUxFUzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NRU1MT0NLCisgICAgY2FzZSBfU0NfTUVNTE9DSzogICAgICAgICAgIHJldHVybiBfUE9TSVhfTUVNTE9DSzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9NRU1MT0NLX1JBTkdFCisgICAgY2FzZSBfU0NfTUVNTE9DS19SQU5HRTogICAgIHJldHVybiBfUE9TSVhfTUVNTE9DS19SQU5HRQorI2VuZGlmCisjaWZkZWYgX1BPU0lYX01FTU9SWV9QUk9URUNUSU9OCisgICAgY2FzZSBfU0NfTUVNT1JZX1BST1RFQ1RJT046IHJldHVybiBfUE9TSVhfTUVNT1JZX1BST1RFQ1RJT047CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HCisgICAgY2FzZSBfU0NfTUVTU0FHRV9QQVNTSU5HOiAgIHJldHVybiBfUE9TSVhfTUVTU0FHRV9QQVNTSU5HOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1BSSU9SSVRJWkVEX0lPCisgICAgY2FzZSBfU0NfUFJJT1JJVElaRURfSU86ICAgIHJldHVybiBfUE9TSVhfUFJJT1JJVElaRURfSU87CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfUFJJT1JJVFlfU0NIRURVTElORworICAgIGNhc2UgX1NDX1BSSU9SSVRZX1NDSEVEVUxJTkc6ICByZXR1cm4gX1BPU0lYX1BSSU9SSVRZX1NDSEVEVUxJTkc7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfUkVBTFRJTUVfU0lHTkFMUworICAgIGNhc2UgX1NDX1JFQUxUSU1FX1NJR05BTFM6ICByZXR1cm4gX1BPU0lYX1JFQUxUSU1FX1NJR05BTFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0VNQVBIT1JFUworICAgIGNhc2UgX1NDX1NFTUFQSE9SRVM6ICAgICAgICByZXR1cm4gX1BPU0lYX1NFTUFQSE9SRVM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU0hBUkVEX01FTU9SWV9PQkpFQ1RTCisgICAgY2FzZSBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RTOiAgcmV0dXJuIF9QT1NJWF9TSEFSRURfTUVNT1JZX09CSkVDVFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPCisgICAgY2FzZSBfU0NfU1lOQ0hST05JWkVEX0lPOiAgIHJldHVybiBfUE9TSVhfU1lOQ0hST05JWkVEX0lPOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1RJTUVSUworICAgIGNhc2UgX1NDX1RJTUVSUzogICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RJTUVSUzsKKyNlbmRpZgorCisgICAgLy8gR0VUR1JfUl9TSVpFX01BWCA/CisgICAgLy8gR0VUUFdfUl9TSVpFX01BWCA/CisKKyAgICBjYXNlIF9TQ19MT0dJTl9OQU1FX01BWDogICAgcmV0dXJuIFNZU1RFTV9MT0dJTl9OQU1FX01BWDsKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUworICAgIGNhc2UgX1NDX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9ERVNUUlVDVE9SX0lURVJBVElPTlM7CisjZW5kaWYKKyAgICBjYXNlIF9TQ19USFJFQURfS0VZU19NQVg6ICAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9LRVlTX01BWDsKKyAgICBjYXNlIF9TQ19USFJFQURfU1RBQ0tfTUlOOiAgICByZXR1cm4gU1lTVEVNX1RIUkVBRF9TVEFDS19NSU47CisgICAgY2FzZSBfU0NfVEhSRUFEX1RIUkVBRFNfTUFYOiAgcmV0dXJuIFNZU1RFTV9USFJFQURfVEhSRUFEU19NQVg7CisgICAgY2FzZSBfU0NfVFRZX05BTUVfTUFYOiAgICAgICAgcmV0dXJuIFNZU1RFTV9UVFlfTkFNRV9NQVg7CisjaWZkZWYgX1BPU0lYX1RIUkVBRFMKKyAgICBjYXNlIF9TQ19USFJFQURTOiAgICAgICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRFM7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSCisgICAgY2FzZSBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOiAgIHJldHVybiBfUE9TSVhfVEhSRUFEX0FUVFJfU1RBQ0tBRERSOworI2VuZGlmCisjaWZkZWYgX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRQorICAgIGNhc2UgX1NDX1RIUkVBRF9BVFRSX1NUQUNLU0laRTogICByZXR1cm4gX1BPU0lYX1RIUkVBRF9BVFRSX1NUQUNLU0laRTsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORworICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hFRFVMSU5HOiAgcmV0dXJuIF9QT1NJWF9USFJFQURfUFJJT1JJVFlfU0NIRURVTElORzsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfUFJJT19JTkhFUklUCisgICAgY2FzZSBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVDogICAgICAgICByZXR1cm4gX1BPU0lYX1RIUkVBRF9QUklPX0lOSEVSSVQ7CisjZW5kaWYKKyNpZmRlZiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVAorICAgIGNhc2UgX1NDX1RIUkVBRF9QUklPX1BST1RFQ1Q6IHJldHVybiBfUE9TSVhfVEhSRUFEX1BSSU9fUFJPVEVDVDsKKyNlbmRpZgorI2lmZGVmIF9QT1NJWF9USFJFQURfU0FGRV9GVU5DVElPTlMKKyAgICBjYXNlIF9TQ19USFJFQURfU0FGRV9GVU5DVElPTlM6ICByZXR1cm4gX1BPU0lYX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUworI2VuZGlmCisKKworICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX0NPTkY6ICByZXR1cm4gX19nZXRfbnByb2NfY29uZigpOworICAgIGNhc2UgX1NDX05QUk9DRVNTT1JTX09OTE46ICByZXR1cm4gX19nZXRfbnByb2Nfb25sbigpOworICAgIGNhc2UgX1NDX1BIWVNfUEFHRVM6ICAgICAgICByZXR1cm4gX19nZXRfcGh5c19wYWdlcygpOworICAgIGNhc2UgX1NDX0FWUEhZU19QQUdFUzogICAgICByZXR1cm4gX19nZXRfYXZwaHlzX3BhZ2VzKCk7CisKKyAgICBkZWZhdWx0OgorICAgICAgIC8qIFBvc2l4IHNheXMgRUlOVkFMIGlzIHRoZSBvbmx5IGVycm9yIHRoYXQgc2hhbGwgYmUgcmV0dXJuZWQsCisgICAgICAgICogYnV0IEdMaWJjIHVzZXMgRU5PU1lTICovCisgICAgICAgIGVycm5vID0gRU5PU1lTOworICAgICAgICByZXR1cm4gLTE7CisgICAgfQorfQorCisKK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgICBycG9zOworICAgIGludCAgIGxlbjsKKyAgICBpbnQgICBvdmVyZmxvdzsKKyAgICBpbnQgICBmZDsKKyAgICBpbnQgICBpbl9sZW47CisgICAgaW50ICAgaW5fcG9zOworICAgIGNoYXIgIGJ1ZmZbMTI4XTsKKyAgICBjaGFyICBpbnB1dFsxMjhdOworfSBMaW5lUGFyc2VyOworCitzdGF0aWMgaW50CitsaW5lX3BhcnNlcl9pbml0KCBMaW5lUGFyc2VyKiAgcCwgY29uc3QgY2hhciogIHBhdGggKQoreworICAgIHAtPnJwb3MgICAgID0gMDsKKyAgICBwLT5sZW4gICAgICA9IChpbnQpc2l6ZW9mKHAtPmJ1ZmYpOworICAgIHAtPm92ZXJmbG93ID0gMDsKKworICAgIHAtPmluX2xlbiAgID0gMDsKKyAgICBwLT5pbl9wb3MgICA9IDA7CisgICAgcC0+ZmQgICAgICAgPSBvcGVuKCBwYXRoLCBPX1JET05MWSApOworCisgICAgcmV0dXJuIHAtPmZkOworfQorCisKK3N0YXRpYyBpbnQKK2xpbmVfcGFyc2VyX2FkZGMoIExpbmVQYXJzZXIqICBwLCBpbnQgIGMgKQoreworICAgIGlmIChwLT5vdmVyZmxvdykgeworICAgICAgICBwLT5vdmVyZmxvdyA9IChjID09ICdcbicpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgaWYgKHAtPnJwb3MgPj0gcC0+bGVuKSB7CisgICAgICAgIHAtPm92ZXJmbG93ID0gMTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAgIGlmIChjID09ICdcbicpIHsKKyAgICAgICAgcC0+YnVmZltwLT5ycG9zXSA9IDA7CisgICAgICAgIHAtPnJwb3MgPSAwOworICAgICAgICByZXR1cm4gMTsKKyAgICB9CisgICAgcC0+YnVmZltwLT5ycG9zKytdID0gKGNoYXIpIGM7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2xpbmVfcGFyc2VyX2dldGMoIExpbmVQYXJzZXIqICBwICkKK3sKKyAgICBpZiAocC0+aW5fbGVuID49IHAtPmluX3BvcykgeworICAgICAgICBpbnQgIHJldDsKKworICAgICAgICBwLT5pbl9sZW4gPSBwLT5pbl9wb3MgPSAwOworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXQgPSByZWFkKHAtPmZkLCBwLT5pbnB1dCwgc2l6ZW9mKHAtPmlucHV0KSk7CisgICAgICAgIH0gd2hpbGUgKHJldCA8IDAgJiYgZXJybm8gPT0gRUlOVFIpOworCisgICAgICAgIGlmIChyZXQgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiAtMTsKKworICAgICAgICBwLT5pbl9sZW4gPSByZXQ7CisgICAgfQorICAgIHJldHVybiBwLT5pbnB1dFsgcC0+aW5fcG9zKysgXTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIqCitsaW5lX3BhcnNlcl9nZXRzKCBMaW5lUGFyc2VyKiAgcCApCit7CisgICAgZm9yICg7OykgeworICAgICAgICBmb3IgKDs7KSB7CisgICAgICAgICAgICBpbnQgIGMgPSBsaW5lX3BhcnNlcl9nZXRjKHApOworCisgICAgICAgICAgICBpZiAoYyA8IDApIHsKKyAgICAgICAgICAgICAgICBjbG9zZShwLT5mZCk7CisgICAgICAgICAgICAgICAgcC0+ZmQgPSAtMTsKKyAgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKKyAgICAgICAgICAgICB9CisgICAgICAgICAgICAgaWYgKGxpbmVfcGFyc2VyX2FkZGMocCwgYykpCisgICAgICAgICAgICAgICAgcmV0dXJuIHAtPmJ1ZmY7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkCitsaW5lX3BhcnNlcl9kb25lKCBMaW5lUGFyc2VyKiBwICkKK3sKKyAgICBpZiAocC0+ZmQgPj0gMCkgeworICAgICAgICBjbG9zZShwLT5mZCk7CisgICAgICAgIHAtPmZkID0gLTE7CisgICAgfQorfQorCitzdGF0aWMgaW50CitfX2dldF9ucHJvY19jb25mKHZvaWQpCit7CisgICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKKyAgICBjb25zdCBjaGFyKiAgcDsKKyAgICBpbnQgICAgICAgICAgY291bnQgPSAwOworCisgICAgaWYgKGxpbmVfcGFyc2VyX2luaXQocGFyc2VyLCAiL3Byb2MvY3B1aW5mbyIpIDwgMCkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICB3aGlsZSAoKHAgPSBsaW5lX3BhcnNlcl9nZXRzKHBhcnNlcikpKSB7CisgICAgICAgIGlmICggIW1lbWNtcChwLCAicHJvY2Vzc29yIiwgOSkgKQorICAgICAgICAgICAgY291bnQgKz0gMTsKKyAgICB9CisgICAgcmV0dXJuIChjb3VudCA8IDEpID8gMSA6IGNvdW50OworfQorCisKK3N0YXRpYyBpbnQKK19fZ2V0X25wcm9jX29ubG4odm9pZCkKK3sKKyAgICBMaW5lUGFyc2VyICAgcGFyc2VyWzFdOworICAgIGNvbnN0IGNoYXIqICBwOworICAgIGludCAgICAgICAgICBjb3VudCA9IDA7CisKKyAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9zdGF0IikgPCAwKQorICAgICAgICByZXR1cm4gMTsKKworICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKKyAgICAgICAgaWYgKCAhbWVtY21wKHAsICJjcHUiLCAzKSAmJiBpc2RpZ2l0KHBbM10pICkKKyAgICAgICAgICAgIGNvdW50ICs9IDE7CisgICAgfQorICAgIHJldHVybiAoY291bnQgPCAxKSA/IDEgOiBjb3VudDsKK30KKworc3RhdGljIGludAorX19nZXRfcGh5c19wYWdlcyh2b2lkKQoreworICAgIExpbmVQYXJzZXIgICBwYXJzZXJbMV07CisgICAgY29uc3QgY2hhciogIHA7CisKKyAgICBpZiAobGluZV9wYXJzZXJfaW5pdChwYXJzZXIsICIvcHJvYy9tZW1pbmZvIikgPCAwKQorICAgICAgICByZXR1cm4gLTI7ICAvKiB3aGF0ID8gKi8KKworICAgIHdoaWxlICgocCA9IGxpbmVfcGFyc2VyX2dldHMocGFyc2VyKSkpIHsKKyAgICAgICAgbG9uZyAgdG90YWw7CisgICAgICAgIGlmICggc3NjYW5mKHAsICJNZW1Ub3RhbDogJWxkIGtCIiwgJnRvdGFsKSA9PSAxICkgeworICAgICAgICAgICAgbGluZV9wYXJzZXJfZG9uZShwYXJzZXIpOworICAgICAgICAgICAgcmV0dXJuIChpbnQpICh0b3RhbCAvIChQQUdFX1NJWkUvMTAyNCkpOworICAgICAgICB9CisgICAgfQorICAgIHJldHVybiAtMzsKK30KKworc3RhdGljIGludAorX19nZXRfYXZwaHlzX3BhZ2VzKHZvaWQpCit7CisgICAgTGluZVBhcnNlciAgIHBhcnNlclsxXTsKKyAgICBjb25zdCBjaGFyKiAgcDsKKworICAgIGlmIChsaW5lX3BhcnNlcl9pbml0KHBhcnNlciwgIi9wcm9jL21lbWluZm8iKSA8IDApCisgICAgICAgIHJldHVybiAtMTsgIC8qIHdoYXQgPyAqLworCisgICAgd2hpbGUgKChwID0gbGluZV9wYXJzZXJfZ2V0cyhwYXJzZXIpKSkgeworICAgICAgICBsb25nICB0b3RhbDsKKyAgICAgICAgaWYgKCBzc2NhbmYocCwgIk1lbUZyZWU6ICVsZCBrQiIsICZ0b3RhbCkgPT0gMSApIHsKKyAgICAgICAgICAgIGxpbmVfcGFyc2VyX2RvbmUocGFyc2VyKTsKKyAgICAgICAgICAgIHJldHVybiAoaW50KSAodG90YWwgLyAoUEFHRV9TSVpFLzEwMjQpKTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC9zeXNsb2cuYyBiL2xpYmMvdW5pc3RkL3N5c2xvZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM1NzFkNTkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC9zeXNsb2cuYwpAQCAtMCwwICsxLDM2OCBAQAorLyoJJE9wZW5CU0Q6IHN5c2xvZy5jLHYgMS4yOCAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTg4LCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKyNpbmNsdWRlIDxzeXMvdWlvLmg+CisjaW5jbHVkZSA8c3lzbG9nLmg+CisjaW5jbHVkZSA8c3lzL3VuLmg+CisjaW5jbHVkZSA8bmV0ZGIuaD4KKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8ZmNudGwuaD4KKyNpbmNsdWRlIDxwYXRocy5oPgorI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dGltZS5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgPHN0ZGFyZy5oPgorCitzdGF0aWMgc3RydWN0IHN5c2xvZ19kYXRhIHNkYXRhID0gU1lTTE9HX0RBVEFfSU5JVDsKKworZXh0ZXJuIGNoYXIJKl9fcHJvZ25hbWU7CQkvKiBQcm9ncmFtIG5hbWUsIGZyb20gY3J0MC4gKi8KKworc3RhdGljIHZvaWQJZGlzY29ubmVjdGxvZ19yKHN0cnVjdCBzeXNsb2dfZGF0YSAqKTsJLyogZGlzY29ubmVjdCBmcm9tIHN5c2xvZ2QgKi8KK3N0YXRpYyB2b2lkCWNvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKik7CS8qIChyZSljb25uZWN0IHRvIHN5c2xvZ2QgKi8KKworLyoKKyAqIHN5c2xvZywgdnN5c2xvZyAtLQorICoJcHJpbnQgbWVzc2FnZSBvbiBsb2cgZmlsZTsgb3V0cHV0IGlzIGludGVuZGVkIGZvciBzeXNsb2dkKDgpLgorICovCit2b2lkCitzeXNsb2coaW50IHByaSwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCXZhX3N0YXJ0KGFwLCBmbXQpOworCXZzeXNsb2cocHJpLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkCit2c3lzbG9nKGludCBwcmksIGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcCkKK3sKKwl2c3lzbG9nX3IocHJpLCAmc2RhdGEsIGZtdCwgYXApOworfQorCit2b2lkCitvcGVubG9nKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nc3RhdCwgaW50IGxvZ2ZhYykKK3sKKwlvcGVubG9nX3IoaWRlbnQsIGxvZ3N0YXQsIGxvZ2ZhYywgJnNkYXRhKTsKK30KKwordm9pZAorY2xvc2Vsb2codm9pZCkKK3sKKwljbG9zZWxvZ19yKCZzZGF0YSk7Cit9CisKKy8qIHNldGxvZ21hc2sgLS0gc2V0IHRoZSBsb2cgbWFzayBsZXZlbCAqLworaW50CitzZXRsb2dtYXNrKGludCBwbWFzaykKK3sKKwlyZXR1cm4gc2V0bG9nbWFza19yKHBtYXNrLCAmc2RhdGEpOworfQorCisvKiBSZWVudHJhbnQgdmVyc2lvbiBvZiBzeXNsb2csIGkuZS4gc3lzbG9nX3IoKSAqLworCit2b2lkCitzeXNsb2dfcihpbnQgcHJpLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwl2YV9zdGFydChhcCwgZm10KTsKKwl2c3lzbG9nX3IocHJpLCBkYXRhLCBmbXQsIGFwKTsKKwl2YV9lbmQoYXApOworfQorCit2b2lkCit2c3lzbG9nX3IoaW50IHByaSwgc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhLCBjb25zdCBjaGFyICpmbXQsIHZhX2xpc3QgYXApCit7CisJaW50IGNudDsKKwljaGFyIGNoLCAqcCwgKnQ7CisJdGltZV90IG5vdzsKKwlpbnQgZmQsIHNhdmVkX2Vycm5vLCBlcnJvcjsKKyNkZWZpbmUJVEJVRl9MRU4JMjA0OAorI2RlZmluZQlGTVRfTEVOCQkxMDI0CisJY2hhciAqc3RkcCA9IE5VTEwsIHRidWZbVEJVRl9MRU5dLCBmbXRfY3B5W0ZNVF9MRU5dOworCWludCB0YnVmX2xlZnQsIGZtdF9sZWZ0LCBwcmxlbjsKKworI2RlZmluZQlJTlRFUk5BTExPRwlMT0dfRVJSfExPR19DT05TfExPR19QRVJST1J8TE9HX1BJRAorCS8qIENoZWNrIGZvciBpbnZhbGlkIGJpdHMuICovCisJaWYgKHByaSAmIH4oTE9HX1BSSU1BU0t8TE9HX0ZBQ01BU0spKSB7CisJCWlmIChkYXRhID09ICZzZGF0YSkgeworCQkJc3lzbG9nKElOVEVSTkFMTE9HLAorCQkJICAgICJzeXNsb2c6IHVua25vd24gZmFjaWxpdHkvcHJpb3JpdHk6ICV4IiwgcHJpKTsKKwkJfSBlbHNlIHsKKwkJCXN5c2xvZ19yKElOVEVSTkFMTE9HLCBkYXRhLAorCQkJICAgICJzeXNsb2dfcjogdW5rbm93biBmYWNpbGl0eS9wcmlvcml0eTogJXgiLCBwcmkpOworCQl9CisJCXByaSAmPSBMT0dfUFJJTUFTS3xMT0dfRkFDTUFTSzsKKwl9CisKKwkvKiBDaGVjayBwcmlvcml0eSBhZ2FpbnN0IHNldGxvZ21hc2sgdmFsdWVzLiAqLworCWlmICghKExPR19NQVNLKExPR19QUkkocHJpKSkgJiBkYXRhLT5sb2dfbWFzaykpCisJCXJldHVybjsKKworCXNhdmVkX2Vycm5vID0gZXJybm87CisKKwkvKiBTZXQgZGVmYXVsdCBmYWNpbGl0eSBpZiBub25lIHNwZWNpZmllZC4gKi8KKwlpZiAoKHByaSAmIExPR19GQUNNQVNLKSA9PSAwKQorCQlwcmkgfD0gZGF0YS0+bG9nX2ZhYzsKKworCS8qIElmIHdlIGhhdmUgYmVlbiBjYWxsZWQgdGhyb3VnaCBzeXNsb2coKSwgbm8gbmVlZCBmb3IgcmVlbnRyYW5jeS4gKi8KKwlpZiAoZGF0YSA9PSAmc2RhdGEpCisJCSh2b2lkKXRpbWUoJm5vdyk7CisKKwlwID0gdGJ1ZjsKKwl0YnVmX2xlZnQgPSBUQlVGX0xFTjsKKworI2RlZmluZQlERUMoKQlcCisJZG8gewkJCQkJXAorCQlpZiAocHJsZW4gPCAwKQkJCVwKKwkJCXBybGVuID0gMDsJCVwKKwkJaWYgKHBybGVuID49IHRidWZfbGVmdCkJCVwKKwkJCXBybGVuID0gdGJ1Zl9sZWZ0IC0gMTsJXAorCQlwICs9IHBybGVuOwkJCVwKKwkJdGJ1Zl9sZWZ0IC09IHBybGVuOwkJXAorCX0gd2hpbGUgKDApCisKKwlwcmxlbiA9IHNucHJpbnRmKHAsIHRidWZfbGVmdCwgIjwlZD4iLCBwcmkpOworCURFQygpOworCisJLyogCisJICogc3lzbG9nZCB3aWxsIGV4cGFuZCB0aW1lIGF1dG9tYWdpY2FsbHkgZm9yIHJlZW50cmFudCBjYXNlLCBhbmQKKwkgKiBmb3Igbm9ybWFsIGNhc2UsIGp1c3QgZG8gbGlrZSBiZWZvcmUKKwkgKi8KKwlpZiAoZGF0YSA9PSAmc2RhdGEpIHsKKwkJcHJsZW4gPSBzdHJmdGltZShwLCB0YnVmX2xlZnQsICIlaCAlZSAlVCAiLCBsb2NhbHRpbWUoJm5vdykpOworCQlERUMoKTsKKwl9CisKKwlpZiAoZGF0YS0+bG9nX3N0YXQgJiBMT0dfUEVSUk9SKQorCQlzdGRwID0gcDsKKwlpZiAoZGF0YS0+bG9nX3RhZyA9PSBOVUxMKQorCQlkYXRhLT5sb2dfdGFnID0gX19wcm9nbmFtZTsKKwlpZiAoZGF0YS0+bG9nX3RhZyAhPSBOVUxMKSB7CisJCXBybGVuID0gc25wcmludGYocCwgdGJ1Zl9sZWZ0LCAiJXMiLCBkYXRhLT5sb2dfdGFnKTsKKwkJREVDKCk7CisJfQorCWlmIChkYXRhLT5sb2dfc3RhdCAmIExPR19QSUQpIHsKKwkJcHJsZW4gPSBzbnByaW50ZihwLCB0YnVmX2xlZnQsICJbJWxkXSIsIChsb25nKWdldHBpZCgpKTsKKwkJREVDKCk7CisJfQorCWlmIChkYXRhLT5sb2dfdGFnICE9IE5VTEwpIHsKKwkJaWYgKHRidWZfbGVmdCA+IDEpIHsKKwkJCSpwKysgPSAnOic7CisJCQl0YnVmX2xlZnQtLTsKKwkJfQorCQlpZiAodGJ1Zl9sZWZ0ID4gMSkgeworCQkJKnArKyA9ICcgJzsKKwkJCXRidWZfbGVmdC0tOworCQl9CisJfQorCisJLyogc3RyZXJyb3IoKSBpcyBub3QgcmVlbnRyYW50ICovCisKKwlmb3IgKHQgPSBmbXRfY3B5LCBmbXRfbGVmdCA9IEZNVF9MRU47IChjaCA9ICpmbXQpOyArK2ZtdCkgeworCQlpZiAoY2ggPT0gJyUnICYmIGZtdFsxXSA9PSAnbScpIHsKKwkJCSsrZm10OworCQkJaWYgKGRhdGEgPT0gJnNkYXRhKSB7CisJCQkJcHJsZW4gPSBzbnByaW50Zih0LCBmbXRfbGVmdCwgIiVzIiwKKwkJCQkgICAgc3RyZXJyb3Ioc2F2ZWRfZXJybm8pKTsgCisJCQl9IGVsc2UgeworCQkJCXBybGVuID0gc25wcmludGYodCwgZm10X2xlZnQsICJFcnJvciAlZCIsCisJCQkJICAgIHNhdmVkX2Vycm5vKTsgCisJCQl9CisJCQlpZiAocHJsZW4gPCAwKQorCQkJCXBybGVuID0gMDsKKwkJCWlmIChwcmxlbiA+PSBmbXRfbGVmdCkKKwkJCQlwcmxlbiA9IGZtdF9sZWZ0IC0gMTsKKwkJCXQgKz0gcHJsZW47CisJCQlmbXRfbGVmdCAtPSBwcmxlbjsKKwkJfSBlbHNlIGlmIChjaCA9PSAnJScgJiYgZm10WzFdID09ICclJyAmJiBmbXRfbGVmdCA+IDIpIHsKKwkJCSp0KysgPSAnJSc7CisJCQkqdCsrID0gJyUnOworCQkJZm10Kys7CisJCQlmbXRfbGVmdCAtPSAyOworCQl9IGVsc2UgeworCQkJaWYgKGZtdF9sZWZ0ID4gMSkgeworCQkJCSp0KysgPSBjaDsKKwkJCQlmbXRfbGVmdC0tOworCQkJfQorCQl9CisJfQorCSp0ID0gJ1wwJzsKKworCXBybGVuID0gdnNucHJpbnRmKHAsIHRidWZfbGVmdCwgZm10X2NweSwgYXApOworCURFQygpOworCWNudCA9IHAgLSB0YnVmOworCisJLyogT3V0cHV0IHRvIHN0ZGVyciBpZiByZXF1ZXN0ZWQuICovCisJaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX1BFUlJPUikgeworCQlzdHJ1Y3QgaW92ZWMgaW92WzJdOworCisJCWlvdlswXS5pb3ZfYmFzZSA9IHN0ZHA7CisJCWlvdlswXS5pb3ZfbGVuID0gY250IC0gKHN0ZHAgLSB0YnVmKTsKKwkJaW92WzFdLmlvdl9iYXNlID0gIlxuIjsKKwkJaW92WzFdLmlvdl9sZW4gPSAxOworCQkodm9pZCl3cml0ZXYoU1RERVJSX0ZJTEVOTywgaW92LCAyKTsKKwl9CisKKwkvKiBHZXQgY29ubmVjdGVkLCBvdXRwdXQgdGhlIG1lc3NhZ2UgdG8gdGhlIGxvY2FsIGxvZ2dlci4gKi8KKwlpZiAoIWRhdGEtPm9wZW5lZCkKKwkJb3BlbmxvZ19yKGRhdGEtPmxvZ190YWcsIGRhdGEtPmxvZ19zdGF0LCAwLCBkYXRhKTsKKwljb25uZWN0bG9nX3IoZGF0YSk7CisKKwkvKgorCSAqIElmIHRoZSBzZW5kKCkgZmFpbGVkLCB0aGVyZSBhcmUgdHdvIGxpa2VseSBzY2VuYXJpb3M6CisJICogIDEpIHN5c2xvZ2Qgd2FzIHJlc3RhcnRlZAorCSAqICAyKSAvZGV2L2xvZyBpcyBvdXQgb2Ygc29ja2V0IGJ1ZmZlciBzcGFjZQorCSAqIFdlIGF0dGVtcHQgdG8gcmVjb25uZWN0IHRvIC9kZXYvbG9nIHRvIHRha2UgY2FyZSBvZgorCSAqIGNhc2UgIzEgYW5kIGtlZXAgc2VuZCgpaW5nIGRhdGEgdG8gY292ZXIgY2FzZSAjMgorCSAqIHRvIGdpdmUgc3lzbG9nZCBhIGNoYW5jZSB0byBlbXB0eSBpdHMgc29ja2V0IGJ1ZmZlci4KKwkgKi8KKwlpZiAoKGVycm9yID0gc2VuZChkYXRhLT5sb2dfZmlsZSwgdGJ1ZiwgY250LCAwKSkgPCAwKSB7CisJCWlmIChlcnJubyAhPSBFTk9CVUZTKSB7CisJCQlkaXNjb25uZWN0bG9nX3IoZGF0YSk7CisJCQljb25uZWN0bG9nX3IoZGF0YSk7CisJCX0KKwkJZG8geworCQkJdXNsZWVwKDEpOworCQkJaWYgKChlcnJvciA9IHNlbmQoZGF0YS0+bG9nX2ZpbGUsIHRidWYsIGNudCwgMCkpID49IDApCisJCQkJYnJlYWs7CisJCX0gd2hpbGUgKGVycm5vID09IEVOT0JVRlMpOworCX0KKworCS8qCisJICogT3V0cHV0IHRoZSBtZXNzYWdlIHRvIHRoZSBjb25zb2xlOyB0cnkgbm90IHRvIGJsb2NrCisJICogYXMgYSBibG9ja2luZyBjb25zb2xlIHNob3VsZCBub3Qgc3RvcCBvdGhlciBwcm9jZXNzZXMuCisJICogTWFrZSBzdXJlIHRoZSBlcnJvciByZXBvcnRlZCBpcyB0aGUgb25lIGZyb20gdGhlIHN5c2xvZ2QgZmFpbHVyZS4KKwkgKi8KKwlpZiAoZXJyb3IgPT0gLTEgJiYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX0NPTlMpICYmCisJICAgIChmZCA9IG9wZW4oX1BBVEhfQ09OU09MRSwgT19XUk9OTFl8T19OT05CTE9DSywgMCkpID49IDApIHsKKwkJc3RydWN0IGlvdmVjIGlvdlsyXTsKKwkJCisJCXAgPSBzdHJjaHIodGJ1ZiwgJz4nKSArIDE7CisJCWlvdlswXS5pb3ZfYmFzZSA9IHA7CisJCWlvdlswXS5pb3ZfbGVuID0gY250IC0gKHAgLSB0YnVmKTsKKwkJaW92WzFdLmlvdl9iYXNlID0gIlxyXG4iOworCQlpb3ZbMV0uaW92X2xlbiA9IDI7CisJCSh2b2lkKXdyaXRldihmZCwgaW92LCAyKTsKKwkJKHZvaWQpY2xvc2UoZmQpOworCX0KKworCWlmIChkYXRhICE9ICZzZGF0YSkKKwkJY2xvc2Vsb2dfcihkYXRhKTsKK30KKworc3RhdGljIHZvaWQKK2Rpc2Nvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisJLyoKKwkgKiBJZiB0aGUgdXNlciBjbG9zZWQgdGhlIEZEIGFuZCBvcGVuZWQgYW5vdGhlciBpbiB0aGUgc2FtZSBzbG90LAorCSAqIHRoYXQncyB0aGVpciBwcm9ibGVtLiAgVGhleSBzaG91bGQgY2xvc2UgaXQgYmVmb3JlIGNhbGxpbmcgb24KKwkgKiBzeXN0ZW0gc2VydmljZXMuCisJICovCisJaWYgKGRhdGEtPmxvZ19maWxlICE9IC0xKSB7CisJCWNsb3NlKGRhdGEtPmxvZ19maWxlKTsKKwkJZGF0YS0+bG9nX2ZpbGUgPSAtMTsKKwl9CisJZGF0YS0+Y29ubmVjdGVkID0gMDsJCS8qIHJldHJ5IGNvbm5lY3QgKi8KK30KKworc3RhdGljIHZvaWQKK2Nvbm5lY3Rsb2dfcihzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgICAgIHN5c2xvZ0FkZHI7CisgICAgICAgIHN0cnVjdCBzb2NrYWRkcl91biAgc3lzbG9nQWRkclVuOworICAgIH0gdTsKKworI2RlZmluZSBTeXNsb2dBZGRyICAgdS5zeXNsb2dBZGRyVW4KKworCWlmIChkYXRhLT5sb2dfZmlsZSA9PSAtMSkgeworCQlpZiAoKGRhdGEtPmxvZ19maWxlID0gc29ja2V0KEFGX1VOSVgsIFNPQ0tfREdSQU0sIDApKSA9PSAtMSkKKwkJCXJldHVybjsKKwkJKHZvaWQpZmNudGwoZGF0YS0+bG9nX2ZpbGUsIEZfU0VURkQsIDEpOworCX0KKwlpZiAoZGF0YS0+bG9nX2ZpbGUgIT0gLTEgJiYgIWRhdGEtPmNvbm5lY3RlZCkgeworCQltZW1zZXQoJlN5c2xvZ0FkZHIsICdcMCcsIHNpemVvZihTeXNsb2dBZGRyKSk7CisjaWYgMAorICAgICAgICAgICAgICAgIC8qIEJJT05JQzogbm8gc3VuX2xlbiBmaWVsZCB0byBmaWxsIG9uIExpbnV4ICovCisJCVN5c2xvZ0FkZHIuc3VuX2xlbiA9IHNpemVvZihTeXNsb2dBZGRyKTsKKyNlbmRpZgorCQlTeXNsb2dBZGRyLnN1bl9mYW1pbHkgPSBBRl9VTklYOworCQlzdHJsY3B5KFN5c2xvZ0FkZHIuc3VuX3BhdGgsIF9QQVRIX0xPRywKKwkJICAgIHNpemVvZihTeXNsb2dBZGRyLnN1bl9wYXRoKSk7CisJCWlmIChjb25uZWN0KGRhdGEtPmxvZ19maWxlLCAmdS5zeXNsb2dBZGRyLAorCQkgICAgc2l6ZW9mKFN5c2xvZ0FkZHIpKSA9PSAtMSkgeworCQkJKHZvaWQpY2xvc2UoZGF0YS0+bG9nX2ZpbGUpOworCQkJZGF0YS0+bG9nX2ZpbGUgPSAtMTsKKwkJfSBlbHNlCisJCQlkYXRhLT5jb25uZWN0ZWQgPSAxOworCX0KK30KKwordm9pZAorb3BlbmxvZ19yKGNvbnN0IGNoYXIgKmlkZW50LCBpbnQgbG9nc3RhdCwgaW50IGxvZ2ZhYywgc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhKQoreworCWlmIChpZGVudCAhPSBOVUxMKQorCQlkYXRhLT5sb2dfdGFnID0gaWRlbnQ7CisJZGF0YS0+bG9nX3N0YXQgPSBsb2dzdGF0OworCWlmIChsb2dmYWMgIT0gMCAmJiAobG9nZmFjICZ+IExPR19GQUNNQVNLKSA9PSAwKQorCQlkYXRhLT5sb2dfZmFjID0gbG9nZmFjOworCisJaWYgKGRhdGEtPmxvZ19zdGF0ICYgTE9HX05ERUxBWSkJLyogb3BlbiBpbW1lZGlhdGVseSAqLworCQljb25uZWN0bG9nX3IoZGF0YSk7CisKKwlkYXRhLT5vcGVuZWQgPSAxOwkvKiBpZGVudCBhbmQgZmFjaWxpdHkgaGFzIGJlZW4gc2V0ICovCit9CisKK3ZvaWQKK2Nsb3NlbG9nX3Ioc3RydWN0IHN5c2xvZ19kYXRhICpkYXRhKQoreworCSh2b2lkKWNsb3NlKGRhdGEtPmxvZ19maWxlKTsKKwlkYXRhLT5sb2dfZmlsZSA9IC0xOworCWRhdGEtPmNvbm5lY3RlZCA9IDA7CisJZGF0YS0+bG9nX3RhZyA9IE5VTEw7Cit9CisKKy8qIHNldGxvZ21hc2sgLS0gc2V0IHRoZSBsb2cgbWFzayBsZXZlbCAqLworaW50CitzZXRsb2dtYXNrX3IoaW50IHBtYXNrLCBzdHJ1Y3Qgc3lzbG9nX2RhdGEgKmRhdGEpCit7CisJaW50IG9tYXNrOworCisJb21hc2sgPSBkYXRhLT5sb2dfbWFzazsKKwlpZiAocG1hc2sgIT0gMCkKKwkJZGF0YS0+bG9nX21hc2sgPSBwbWFzazsKKwlyZXR1cm4gKG9tYXNrKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3N5c3RlbS5jIGIvbGliYy91bmlzdGQvc3lzdGVtLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzJjYzM3ZQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3N5c3RlbS5jCkBAIC0wLDAgKzEsNzQgQEAKKy8qCSRPcGVuQlNEOiBzeXN0ZW0uYyx2IDEuOCAyMDA1LzA4LzA4IDA4OjA1OjM3IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4IFRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICogMy4gTmVpdGhlciB0aGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKKyAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQorICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgUkVHRU5UUyBBTkQgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJyBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UKKyAqIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIFJFR0VOVFMgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRQorICogRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwKKyAqIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTCisgKiBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisjaW5jbHVkZSA8c2lnbmFsLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8cGF0aHMuaD4KKyNpbmNsdWRlIDxzeXMvd2FpdC5oPgorCitleHRlcm4gY2hhciAqKmVudmlyb247CisKK2ludAorc3lzdGVtKGNvbnN0IGNoYXIgKmNvbW1hbmQpCit7CisgIHBpZF90IHBpZDsKKwlzaWdfdCBpbnRzYXZlLCBxdWl0c2F2ZTsKKwlzaWdzZXRfdCBtYXNrLCBvbWFzazsKKwlpbnQgcHN0YXQ7CisJY2hhciAqYXJncFtdID0geyJzaCIsICItYyIsIE5VTEwsIE5VTEx9OworCisJaWYgKCFjb21tYW5kKQkJLyoganVzdCBjaGVja2luZy4uLiAqLworCQlyZXR1cm4oMSk7CisKKwlhcmdwWzJdID0gKGNoYXIgKiljb21tYW5kOworCisJc2lnZW1wdHlzZXQoJm1hc2spOworCXNpZ2FkZHNldCgmbWFzaywgU0lHQ0hMRCk7CisJc2lncHJvY21hc2soU0lHX0JMT0NLLCAmbWFzaywgJm9tYXNrKTsKKwlzd2l0Y2ggKHBpZCA9IHZmb3JrKCkpIHsKKwljYXNlIC0xOgkJCS8qIGVycm9yICovCisJCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworCQlyZXR1cm4oLTEpOworCWNhc2UgMDoJCQkJLyogY2hpbGQgKi8KKwkJc2lncHJvY21hc2soU0lHX1NFVE1BU0ssICZvbWFzaywgTlVMTCk7CisJCWV4ZWN2ZShfUEFUSF9CU0hFTEwsIGFyZ3AsIGVudmlyb24pOworICAgIF9leGl0KDEyNyk7CisgIH0KKworCWludHNhdmUgPSAoc2lnX3QpICBic2Rfc2lnbmFsKFNJR0lOVCwgU0lHX0lHTik7CisJcXVpdHNhdmUgPSAoc2lnX3QpIGJzZF9zaWduYWwoU0lHUVVJVCwgU0lHX0lHTik7CisJcGlkID0gd2FpdHBpZChwaWQsIChpbnQgKikmcHN0YXQsIDApOworCXNpZ3Byb2NtYXNrKFNJR19TRVRNQVNLLCAmb21hc2ssIE5VTEwpOworCSh2b2lkKWJzZF9zaWduYWwoU0lHSU5ULCBpbnRzYXZlKTsKKwkodm9pZClic2Rfc2lnbmFsKFNJR1FVSVQsIHF1aXRzYXZlKTsKKwlyZXR1cm4gKHBpZCA9PSAtMSA/IC0xIDogcHN0YXQpOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdGltZS5jIGIvbGliYy91bmlzdGQvdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzZDczNjYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC90aW1lLmMKQEAgLTAsMCArMSw2MiBAQAorLyoJJE9wZW5CU0Q6IHRpbWUuYyx2IDEuNSAyMDA1LzA4LzA4IDA4OjA1OjM0IGVzcGllIEV4cCAkICovCisvKgorICogQ29weXJpZ2h0IChjKSAxOTgzLCAxOTkzCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCisgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKKyAqICAgIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIFJFR0VOVFMgQU5EIENPTlRSSUJVVE9SUyBgYEFTIElTJycgQU5ECisgKiBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFCisgKiBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBSRUdFTlRTIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKKyAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCisgKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUworICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQorICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgPHRpbWUuaD4KKwordGltZV90Cit0aW1lKHRpbWVfdCAqdCkKK3sKKwlzdHJ1Y3QgdGltZXZhbCB0dDsKKworCWlmIChnZXR0aW1lb2ZkYXkoJnR0LCAoc3RydWN0IHRpbWV6b25lICopMCkgPCAwKQorCQlyZXR1cm4gKC0xKTsKKwlpZiAodCkKKwkJKnQgPSAodGltZV90KXR0LnR2X3NlYzsKKwlyZXR1cm4gKHR0LnR2X3NlYyk7Cit9CisKKworY2xvY2tfdAorY2xvY2sodm9pZCkKK3sKKwlzdHJ1Y3QgdGltZXNwZWMgIHRtOworCXN0YXRpYyBpbnQgICAgICAgY2xvY2tfaW5pdGVkOworCXN0YXRpYyBjbG9ja190ICAgY2xvY2tfc3RhcnQ7CisJY2xvY2tfdCAgICAgICAgICBub3c7CisKKwljbG9ja19nZXR0aW1lKCBDTE9DS19NT05PVE9OSUMsICZ0bSk7CisJbm93ID0gdG0udHZfc2VjICogQ0xPQ0tTX1BFUl9TRUMgKyAodG0udHZfbnNlYyAqIChDTE9DS1NfUEVSX1NFQy8xZTkpKTsKKworCWlmICghY2xvY2tfaW5pdGVkKSB7CisJCWNsb2NrX3N0YXJ0ICA9IG5vdzsKKwkJY2xvY2tfaW5pdGVkID0gMTsKKwl9CisJcmV0dXJuICBub3cgLSBjbG9ja19zdGFydDsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3Vtb3VudC5jIGIvbGliYy91bmlzdGQvdW1vdW50LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQyZTQyYwotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3Vtb3VudC5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKworZXh0ZXJuIGludCAgdW1vdW50Mihjb25zdCBjaGFyKiwgaW50KTsKKworaW50ICB1bW91bnQoY29uc3QgY2hhciogIGRpcikKK3sKKyAgcmV0dXJuIHVtb3VudDIoZGlyLCAwKTsKK30KZGlmZiAtLWdpdCBhL2xpYmMvdW5pc3RkL3VubG9ja3B0LmMgYi9saWJjL3VuaXN0ZC91bmxvY2twdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjk5OGI3YTMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3VuaXN0ZC91bmxvY2twdC5jCkBAIC0wLDAgKzEsMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggVGhlIEFuZHJvaWQgT3BlbiBTb3VyY2UgUHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluCisgKiAgICB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlCisgKiAgICBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCisgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRQorICogQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUworICogT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VECisgKiBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksCisgKiBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQKKyAqIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgorICogU1VDSCBEQU1BR0UuCisgKi8KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKyNpbmNsdWRlIDxzeXMvaW9jdGwuaD4KKworaW50ICB1bmxvY2twdCggaW50ICBmZCApCit7CisgICAgaW50ICB1bmxvY2sgPSAwOworCisgICAgcmV0dXJuIGlvY3RsKCBmZCwgVElPQ1NQVExDSywgJnVubG9jayApOworfQpkaWZmIC0tZ2l0IGEvbGliYy91bmlzdGQvdXNsZWVwLmMgYi9saWJjL3VuaXN0ZC91c2xlZXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NTQ1OGIxCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy91bmlzdGQvdXNsZWVwLmMKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBUaGUgQW5kcm9pZCBPcGVuIFNvdXJjZSBQcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogICogUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqICAqIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4KKyAqICAgIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUKKyAqICAgIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTCisgKiBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQKKyAqIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVAorICogT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCisgKiBTVUNIIERBTUFHRS4KKyAqLworI2luY2x1ZGUgPHRpbWUuaD4KKyNpbmNsdWRlIDxlcnJuby5oPgorCit2b2lkIHVzbGVlcCh1bnNpZ25lZCBsb25nIHVzZWMpCit7CisgIHN0cnVjdCB0aW1lc3BlYyB0czsKKworICB0cy50dl9zZWMgID0gdXNlYy8xMDAwMDAwVUw7CisKKyNpZmRlZiBfX2FybV9fCisgICAgLyogYXZvaWQgZGl2aXNpb25zIGFuZCBtb2R1bG9zIG9uIHRoZSBBUk0gKi8KKyAgdHMudHZfbnNlYyA9ICh1c2VjIC0gdHMudHZfc2VjKjEwMDAwMDBVTCkqMTAwMDsKKyNlbHNlCisgIHRzLnR2X25zZWMgPSAodXNlYyAlIDEwMDAwMDBVTCkgKiAxMDAwVUw7CisjZW5kaWYKKworICBmb3IgKDs7KQorICB7CisgICAgaWYgKCBuYW5vc2xlZXAoICZ0cywgJnRzICkgPj0gMCApCisgICAgICAgIGJyZWFrOworCisgICAgaWYgKCBlcnJubyAhPSBFSU5UUiApCisgICAgICAgIGJyZWFrOworICB9Cit9CmRpZmYgLS1naXQgYS9saWJjL3VuaXN0ZC93YWl0LmMgYi9saWJjL3VuaXN0ZC93YWl0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3MjQxOQotLS0gL2Rldi9udWxsCisrKyBiL2xpYmMvdW5pc3RkL3dhaXQuYwpAQCAtMCwwICsxLDQ2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFRoZSBBbmRyb2lkIE9wZW4gU291cmNlIFByb2plY3QKKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAgKiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogICogUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbgorICogICAgdGhlIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQorICogICAgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwKKyAqIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsCisgKiBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MKKyAqIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRAorICogQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLAorICogT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUCisgKiBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisjaW5jbHVkZSA8c3lzL3dhaXQuaD4KKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworZXh0ZXJuIHBpZF90ICBfX3dhaXQ0IChwaWRfdCBwaWQsIGludCAqc3RhdHVzLCBpbnQgb3B0aW9ucywgc3RydWN0IHJ1c2FnZSAqcnVzYWdlKTsKKworcGlkX3QgIHdhaXQoIGludCogIHN0YXR1cyApCit7CisgICAgcmV0dXJuIF9fd2FpdDQoIChwaWRfdCktMSwgc3RhdHVzLCAwLCBOVUxMICk7Cit9CisKK3BpZF90ICB3YWl0MyhpbnQqICBzdGF0dXMsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlKiAgcnVzYWdlKQoreworICAgIHJldHVybiBfX3dhaXQ0KCAocGlkX3QpLTEsIHN0YXR1cywgb3B0aW9ucywgcnVzYWdlICk7Cit9CisKK3BpZF90ICB3YWl0cGlkKHBpZF90ICBwaWQsIGludCogIHN0YXR1cywgaW50ICBvcHRpb25zKQoreworICAgIHJldHVybiBfX3dhaXQ0KCBwaWQsIHN0YXR1cywgb3B0aW9ucywgTlVMTCApOworfQpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby9BbmRyb2lkLm1rIGIvbGliYy96b25laW5mby9BbmRyb2lkLm1rCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIyYmVjMzcKLS0tIC9kZXYvbnVsbAorKysgYi9saWJjL3pvbmVpbmZvL0FuZHJvaWQubWsKQEAgLTAsMCArMSwxMCBAQAorTE9DQUxfUEFUSDo9ICQoY2FsbCBteS1kaXIpCitpbmNsdWRlICQoQ0xFQVJfVkFSUykKKworQUxMX1BSRUJVSUxUICs9ICQoVEFSR0VUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmRhdAorJChUQVJHRVRfT1VUKS91c3Ivc2hhcmUvem9uZWluZm8vem9uZWluZm8uZGF0IDogJChMT0NBTF9QQVRIKS96b25laW5mby5kYXQgfCAkKEFDUCkKKwkkKHRyYW5zZm9ybS1wcmVidWlsdC10by10YXJnZXQpCisKK0FMTF9QUkVCVUlMVCArPSAkKFRBUkdFVF9PVVQpL3Vzci9zaGFyZS96b25laW5mby96b25laW5mby5pZHgKKyQoVEFSR0VUX09VVCkvdXNyL3NoYXJlL3pvbmVpbmZvL3pvbmVpbmZvLmlkeCA6ICQoTE9DQUxfUEFUSCkvem9uZWluZm8uaWR4IHwgJChBQ1ApCisJJCh0cmFuc2Zvcm0tcHJlYnVpbHQtdG8tdGFyZ2V0KQpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby96b25laW5mby5kYXQgYi9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLmRhdApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kYWIyN2U5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYy96b25laW5mby96b25laW5mby5kYXQKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvbGliYy96b25laW5mby96b25laW5mby5pZHggYi9saWJjL3pvbmVpbmZvL3pvbmVpbmZvLmlkeApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MmQ0ZDllCi0tLSAvZGV2L251bGwKKysrIGIvbGliYy96b25laW5mby96b25laW5mby5pZHgKQmluYXJ5IGZpbGVzIGRpZmZlcgo=