ZGlmZiAtLWdpdCBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMgYi9kcml2ZXJzL3N0YWdpbmcva2V1Y3Ivc21pbHN1Yi5jCmluZGV4IDNjMWMwZDQuLmIzMTVkNWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3RhZ2luZy9rZXVjci9zbWlsc3ViLmMKKysrIGIvZHJpdmVycy9zdGFnaW5nL2tldWNyL3NtaWxzdWIuYwpAQCAtNjUsNyArNjUsNyBAQAogCQlpZiAoKnJlZHVuZGFudCsrIT0weEZGKQogCQkJcmV0dXJuKEVSUk9SKTsKIAotCXJldHVybihTVUNDRVNTKTsKKwlyZXR1cm4oU01TVUNDRVNTKTsKIH0KIAogLy8tLS0tLSBDaGVja19EX0ZhaWxCbG9jaygpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC03NCwxMyArNzQsMTMgQEAKIAlyZWR1bmRhbnQrPVJFRFRfQkxPQ0s7CiAKIAlpZiAoKnJlZHVuZGFudD09MHhGRikKLQkJcmV0dXJuKFNVQ0NFU1MpOworCQlyZXR1cm4oU01TVUNDRVNTKTsKIAlpZiAoISpyZWR1bmRhbnQpCiAJCXJldHVybihFUlJPUik7CiAJaWYgKGh3ZWlnaHQ4KCpyZWR1bmRhbnQpPDcpCiAJCXJldHVybihFUlJPUik7CiAKLQlyZXR1cm4oU1VDQ0VTUyk7CisJcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAKIC8vLS0tLS0gQ2hlY2tfRF9EYXRhU3RhdHVzKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtODksNyArODksNyBAQAogCXJlZHVuZGFudCs9UkVEVF9EQVRBOwogCiAJaWYgKCpyZWR1bmRhbnQ9PTB4RkYpCi0JCXJldHVybihTVUNDRVNTKTsKKwkJcmV0dXJuKFNNU1VDQ0VTUyk7CiAJaWYgKCEqcmVkdW5kYW50KQogCXsKIAkJRXJyWERDb2RlID0gRVJSX0RhdGFTdGF0dXM7CkBAIC0xMDEsNyArMTAxLDcgQEAKIAlpZiAoaHdlaWdodDgoKnJlZHVuZGFudCk8NSkKIAkJcmV0dXJuKEVSUk9SKTsKIAotCXJldHVybihTVUNDRVNTKTsKKwlyZXR1cm4oU01TVUNDRVNTKTsKIH0KIAogLy8tLS0tLSBMb2FkX0RfTG9nQmxvY2tBZGRyKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMTYsMTcgKzExNiwxNyBAQAogCiAJaWYgKGFkZHIxPT1hZGRyMikKIAkJaWYgKChhZGRyMSAmMHhGMDAwKT09MHgxMDAwKQotCQl7IE1lZGlhLkxvZ0Jsb2NrPShhZGRyMSAmMHgwRkZGKS8yOyByZXR1cm4oU1VDQ0VTUyk7IH0KKwkJeyBNZWRpYS5Mb2dCbG9jaz0oYWRkcjEgJjB4MEZGRikvMjsgcmV0dXJuKFNNU1VDQ0VTUyk7IH0KIAogCWlmIChod2VpZ2h0MTYoKFdPUkQpKGFkZHIxXmFkZHIyKSkhPTB4MDEpIHJldHVybihFUlJPUik7CiAKIAlpZiAoKGFkZHIxICYweEYwMDApPT0weDEwMDApCiAJCWlmICghKGh3ZWlnaHQxNihhZGRyMSkgJjB4MDEpKQotCQl7IE1lZGlhLkxvZ0Jsb2NrPShhZGRyMSAmMHgwRkZGKS8yOyByZXR1cm4oU1VDQ0VTUyk7IH0KKwkJeyBNZWRpYS5Mb2dCbG9jaz0oYWRkcjEgJjB4MEZGRikvMjsgcmV0dXJuKFNNU1VDQ0VTUyk7IH0KIAogCWlmICgoYWRkcjIgJjB4RjAwMCk9PTB4MTAwMCkKIAkJaWYgKCEoaHdlaWdodDE2KGFkZHIyKSAmMHgwMSkpCi0JCXsgTWVkaWEuTG9nQmxvY2s9KGFkZHIyICYweDBGRkYpLzI7IHJldHVybihTVUNDRVNTKTsgfQorCQl7IE1lZGlhLkxvZ0Jsb2NrPShhZGRyMiAmMHgwRkZGKS8yOyByZXR1cm4oU01TVUNDRVNTKTsgfQogCiAJcmV0dXJuKEVSUk9SKTsKIH0KQEAgLTIyMCw3ICsyMjAsNyBAQAogCX0KIAogCU1lZGlhLlpvbmU9em9uZTsgTWVkaWEuUGh5QmxvY2s9YmxvY2s7IE1lZGlhLlNlY3Rvcj1zZWN0b3I7Ci0JcmV0dXJuKFNVQ0NFU1MpOworCXJldHVybihTTVNVQ0NFU1MpOwogfQogLyoKIC8vLy8tLS0tLSBTc2ZkY19EX1dyaXRlUmVkdE1vZGUoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MjYsNyArNDI2LDcgQEAKIC8vCiAvLyAgICBpZiAoIV9Id19EX0Noa0NhcmRJbigpKQogLy8gICAgICAgcmV0dXJuKEVSUk9SKTsKLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAvLwogLy8vLy0tLS0tIFNzZmRjX0RfUmVhZFNlY3RfUElPKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NDksNyArNDQ5LDcgQEAKIC8vCiAvLyAgICBfQ2FsY19EX0VDQ2RhdGEoYnVmKTsKIC8vICAgIF9TZXRfRF9Tc2ZkY1JkU3RhbmRieSgpOwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIAogLy8gNjI1MCBDTUQgMwpAQCAtNTA3LDcgKzUwNyw3IEBACiAvLyAgICAgICAgRU5FX1ByaW50KCJFcnJvclxuIik7CiAvLyAgfQogCi0gICAgcmV0dXJuKFNVQ0NFU1MpOworICAgIHJldHVybihTTVNVQ0NFU1MpOwogfQogKi8KIC8vLS0tLS0gU3NmZGNfRF9Db3B5QmxvY2soKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNjEyLDcgKzYxMiw3IEBACiAvLyAgICAgICAgRU5FX1ByaW50KCJFcnJvclxuIik7CiAvLyAgfQogCi0gICAgcmV0dXJuKFNVQ0NFU1MpOworICAgIHJldHVybihTTVNVQ0NFU1MpOwogfQogLy8KIC8vLy8tLS0tLSBTc2ZkY19EX1dyaXRlU2VjdF9ETUEoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzAyLDcgKzcwMiw3IEBACiAvLyAgICBpZiAoIV9Id19EX0Noa0NhcmRJbigpKQogLy8gICAgICAgcmV0dXJuKEVSUk9SKTsKIC8vCi0vLyAgICByZXR1cm4oU1VDQ0VTUyk7CisvLyAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vfQogLy8KIC8vLy8tLS0tLSBTc2ZkY19EX1dyaXRlU2VjdF9QSU8oKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNzI3LDcgKzcyNyw3IEBACiAvLwogLy8gICAgX1NldF9EX1NzZmRjV3JTdGFuZGJ5KCk7CiAvLyAgICBfU2V0X0RfU3NmZGNSZFN0YW5kYnkoKTsKLS8vICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgIHJldHVybihTTVNVQ0NFU1MpOwogLy99CiAqLwogLy8tLS0tLSBTc2ZkY19EX1dyaXRlU2VjdEZvckNvcHkoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04OTEsMTQgKzg5MSwxNCBAQAogaW50IFNzZmRjX0RfQ2hlY2tTdGF0dXModm9pZCkKIHsKICAgICAvLyBEcml2ZXIgpKOwtQotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKICAgICAvL19TZXRfRF9Tc2ZkY1JkQ21kKFJEU1RBVFVTKTsKICAgICAvLwogICAgIC8vaWYgKF9DaGVja19EX1NzZmRjU3RhdHVzKCkpCiAgICAgLy97IF9TZXRfRF9Tc2ZkY1JkU3RhbmRieSgpOyByZXR1cm4oRVJST1IpOyB9CiAgICAgLy8KICAgICAvL19TZXRfRF9Tc2ZkY1JkU3RhbmRieSgpOwotICAgIC8vcmV0dXJuKFNVQ0NFU1MpOworICAgIC8vcmV0dXJuKFNNU1VDQ0VTUyk7CiB9CiAvKgogLy8vL05BTkQgTWVtb3J5IChTbWFydE1lZGlhKSBDb250cm9sIFN1YnJvdXRpbmUgZm9yIFJlYWQgRGF0YQpAQCAtMTA5Myw3ICsxMDkzLDcgQEAKIC8vCiAvLyAgICBkbyB7CiAvLyAgICAgICAgaWYgKCFfSHdfRF9DaGtCdXN5KCkpCi0vLyAgICAgICAgICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvLyAgICAgICAgRURlbGF5KDEwMCk7CiAvLyAgICAgICAgY291bnQrKzsKIC8vICAgIH0gd2hpbGUgKGNvdW50PD10aW1lKTsKQEAgLTExMDcsNyArMTEwNyw3IEBACiAvLyAgICBpZiAoX0h3X0RfSW5EYXRhKCkgJiBXUl9GQUlMKQogLy8gICAgICAgIHJldHVybihFUlJPUik7CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIC8vCiAvLy8vIEZvciA3MTIKQEAgLTEzMzcsNyArMTMzNyw3IEBACiAgICAgICAgICAgICByZXR1cm4oRVJST1IpOwogICAgIH0KIAotICAgIHJldHVybihTVUNDRVNTKTsKKyAgICByZXR1cm4oU01TVUNDRVNTKTsKIH0KIAogLy8tLS0tLSBfQ2hlY2tfRF9EZXZDb2RlKCkgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xMzg2LDcgKzEzODYsNyBAQAogLy8gICAgaWYgKF9Id19EX0Noa1Bvd2VyKCkpCiAvLyAgICB7CiAvLyAgICAgICAgX0h3X0RfRW5hYmxlT0IoKTsgICAgICAgICAgICAgICAgICAgICAgIC8vIFNldCBTTV9SRUdfQ1RSTF81IFJlZy4gdG8gMHg4MwotLy8gICAgICAgIHJldHVybihTVUNDRVNTKTsKKy8vICAgICAgICByZXR1cm4oU01TVUNDRVNTKTsKIC8vICAgIH0KIC8vCiAvLyAgICBfSHdfRF9TZXRWY2NPZmYoKTsKQEAgLTE0MTcsNyArMTQxNyw3IEBACiAvL2ludCBDaGVja19EX0NudFBvd2VyKHZvaWQpCiAvL3sKIC8vICAgIGlmIChfSHdfRF9DaGtQb3dlcigpKQotLy8gICAgICAgIHJldHVybihTVUNDRVNTKTsgLy8gUG93ZXIgT24KKy8vICAgICAgICByZXR1cm4oU01TVUNDRVNTKTsgLy8gUG93ZXIgT24KIC8vCiAvLyAgICByZXR1cm4oRVJST1IpOyAgICAgICAvLyBQb3dlciBPZmYKIC8vfQpAQCAtMTQyOSw3ICsxNDI5LDcgQEAKIC8vCiAvLyAgICBpZiAoIV9Id19EX0Noa1N0YXR1cygpKSAvLyBOb3QgU3RhdHVzIENoYW5nZQogLy8gICAgICAgIGlmIChfSHdfRF9DaGtDYXJkSW4oKSkKLS8vICAgICAgICAgICAgcmV0dXJuKFNVQ0NFU1MpOyAvLyBDYXJkIGV4aXN0IGluIFNsb3QKKy8vICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7IC8vIENhcmQgZXhpc3QgaW4gU2xvdAogLy8KIC8vICAgIGZvcihpPTAsaj0wLGs9MDsgaTwxNjsgaSsrKSB7CiAvLyAgICAgICAgaWYgKF9Id19EX0Noa0NhcmRJbigpKSAvLyBTdGF0dXMgQ2hhbmdlCkBAIC0xNDQyLDcgKzE0NDIsNyBAQAogLy8gICAgICAgIH0KIC8vCiAvLyAgICAgICAgaWYgKGo+MykKLS8vICAgICAgICAgICAgcmV0dXJuKFNVQ0NFU1MpOyAvLyBDYXJkIGV4aXN0IGluIFNsb3QKKy8vICAgICAgICAgICAgcmV0dXJuKFNNU1VDQ0VTUyk7IC8vIENhcmQgZXhpc3QgaW4gU2xvdAogLy8gICAgICAgIGlmIChrPjMpCiAvLyAgICAgICAgICAgIHJldHVybihFUlJPUik7IC8vIE5PIENhcmQgZXhpc3QgaW4gU2xvdAogLy8KQEAgLTE0NTgsMTIgKzE0NTgsMTIgQEAKIC8vICAgIGlmIChfSHdfRF9DaGtTdGF0dXMoKSkKIC8vICAgICAgICByZXR1cm4oRVJST1IpOyAvLyBTdGF0dXMgQ2hhbmdlCiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOyAgIC8vIE5vdCBTdGF0dXMgQ2hhbmdlCisvLyAgICByZXR1cm4oU01TVUNDRVNTKTsgICAvLyBOb3QgU3RhdHVzIENoYW5nZQogLy99CiAvLwogLy8vLy0tLS0tIENoZWNrX0RfU3NmZGNXUCgpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIC8vaW50IENoZWNrX0RfU3NmZGNXUCh2b2lkKQotLy97IC8vIEVSUk9SOiBXUCwgU1VDQ0VTUzogTm90IFdQCisvL3sgLy8gRVJST1I6IFdQLCBTTVNVQ0NFU1M6IE5vdCBXUAogLy8gICAgY2hhciBpOwogLy8KIC8vICAgIGZvcihpPTA7IGk8ODsgaSsrKSB7CkBAIC0xNDcyLDcgKzE0NzIsNyBAQAogLy8gICAgICAgIF9XYWl0X0RfVGltZXIoVElNRV9XUENISyk7CiAvLyAgICB9CiAvLwotLy8gICAgcmV0dXJuKFNVQ0NFU1MpOworLy8gICAgcmV0dXJuKFNNU1VDQ0VTUyk7CiAvL30KIC8vCiAqLwpAQCAtMTQ4MCwxMyArMTQ4MCwxMyBAQAogLy8tLS0tLSBDaGVja19EX1JlYWRFcnJvcigpIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGludCBDaGVja19EX1JlYWRFcnJvcihCWVRFICpyZWR1bmRhbnQpCiB7Ci0JcmV0dXJuIFNVQ0NFU1M7CisJcmV0dXJuIFNNU1VDQ0VTUzsKIH0KIAogLy8tLS0tLSBDaGVja19EX0NvcnJlY3QoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBpbnQgQ2hlY2tfRF9Db3JyZWN0KEJZVEUgKmJ1ZixCWVRFICpyZWR1bmRhbnQpCiB7Ci0JcmV0dXJuIFNVQ0NFU1M7CisJcmV0dXJuIFNNU1VDQ0VTUzsKIH0KIAogLy8tLS0tLSBDaGVja19EX0NJU2RhdGEoKSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0xNDk4LDcgKzE0OTgsNyBAQAogCWludCBjaXNfbGVuID0gc2l6ZW9mKGNpcyk7CiAKIAlpZiAoIUlzU1NGRENDb21wbGlhbmNlICYmICFJc1hEQ29tcGxpYW5jZSkKLQkJcmV0dXJuIFNVQ0NFU1M7CisJCXJldHVybiBTTVNVQ0NFU1M7CiAKIAlpZiAoIW1lbWNtcChyZWR1bmRhbnQgKyAweDBELCBFY2NCdWYsIDMpKQogCQlyZXR1cm4gbWVtY21wKGJ1ZiwgY2lzLCBjaXNfbGVuKTsKQEAgLTE1OTcsNSArMTU5Nyw1IEBACiAgICAgaWYgKCFOVF9TVUNDRVNTKG50U3RhdHVzKSkKICAgICAgICByZXR1cm4oRVJST1IpOwogCi0gICAgcmV0dXJuKFNVQ0NFU1MpOworICAgIHJldHVybihTTVNVQ0NFU1MpOwogfSovCg==