ZGlmZiAtLWdpdCBhLy5naXRpZ25vcmUgYi8uZ2l0aWdub3JlCmluZGV4IDE5MzljYTYuLmE5ZjkzNTkgMTAwNjQ0Ci0tLSBhLy5naXRpZ25vcmUKKysrIGIvLmdpdGlnbm9yZQpAQCAtMiw4ICsyLDggQEAKICoucmVqCiBNYWtlZmlsZQogKn4KKyouYQogKi5vCi1jb25maWcuaAogY29uZmlnLmxvZwogY29uZmlnLmNhY2hlCiBjb25maWcuc3RhdHVzCkBAIC0xNCw2ICsxNCw1IEBACiB0Y3BkdW1wCiB0Y3BkdW1wLjEKIHRjcGR1bXAtKi50YXIuZ3oKLXZlcnNpb24uYwogZmFpbHVyZS1vdXRwdXRzLnR4dAogYXV0b200dGUuY2FjaGUvCmRpZmYgLS1naXQgYS8udHJhdmlzLnltbCBiLy50cmF2aXMueW1sCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBmY2FkODc3Li4wMDAwMDAwCi0tLSBhLy50cmF2aXMueW1sCisrKyAvZGV2L251bGwKQEAgLTEsMTMgKzAsMCBAQAotbGFuZ3VhZ2U6IGMKLQotZW52OgotICAtIEJVSUxEX0xJQlBDQVA9dHJ1ZQotCi1iZWZvcmVfc2NyaXB0OgotICAtIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpYnNzbC1kZXYgbGlic3NsMC45LjggbGlic3NsMS4wLjAKLSAgLSBpZiBbICRCVUlMRF9MSUJQQ0FQID09ICJ0cnVlIiBdOyB0aGVuICggY2QgLi4vICYmIGdpdCBjbG9uZSBnaXQ6Ly9naXRodWIuY29tL3RoZS10Y3BkdW1wLWdyb3VwL2xpYnBjYXAuZ2l0ICYmIGNkIGxpYnBjYXAgJiYgLi9jb25maWd1cmUgJiYgbWFrZSApOyBlbHNlIHN1ZG8gYXB0LWdldCBpbnN0YWxsIGxpYnBjYXAtZGV2OyBmaQotCi1zY3JpcHQ6Ci0gIC0gLi9jb25maWd1cmUKLSAgLSBtYWtlCi0gIC0gbWFrZSBjaGVjawpkaWZmIC0tZ2l0IGEvQW5kcm9pZC5tayBiL0FuZHJvaWQubWsKaW5kZXggYmVjZDA4Mi4uMWU1ZTNiMiAxMDA2NDQKLS0tIGEvQW5kcm9pZC5taworKysgYi9BbmRyb2lkLm1rCkBAIC0xLDE2NCArMSwxODEgQEAKIExPQ0FMX1BBVEg6PSAkKGNhbGwgbXktZGlyKQogCi10Y3BkdW1wX3NyY19maWxlcyA6PSBcCi0gIGFkZHJ0b25hbWUuYyBcCi0gIGFmLmMgXAotICBicGZfZHVtcC5jIFwKLSAgY2hlY2tzdW0uYyBcCi0gIGNwYWNrLmMgXAotICBnbXBscy5jIFwKLSAgZ210MmxvY2FsLmMgXAotICBpbl9ja3N1bS5jIFwKLSAgaXBwcm90by5jIFwKLSAgbDJ2cG4uYyBcCi0gIG1hY2hkZXAuYyBcCi0gIG5scGlkLmMgXAotICBvdWkuYyBcCi0gIHBhcnNlbmZzZmguYyBcCi0gIHByaW50LTgwMl8xMS5jIFwKLSAgcHJpbnQtODAyXzE1XzQuYyBcCi0gIHByaW50LWFoLmMgXAotICBwcmludC1haGNwLmMgXAotICBwcmludC1hb2R2LmMgXAotICBwcmludC1hb2UuYyBcCi0gIHByaW50LWFwMTM5NC5jIFwKLSAgcHJpbnQtYXJjbmV0LmMgXAotICBwcmludC1hcnAuYyBcCi0gIHByaW50LWFzY2lpLmMgXAotICBwcmludC1hdGFsay5jIFwKLSAgcHJpbnQtYXRtLmMgXAotICBwcmludC1iYWJlbC5jIFwKLSAgcHJpbnQtYmVlcC5jIFwKLSAgcHJpbnQtYmZkLmMgXAotICBwcmludC1iZ3AuYyBcCi0gIHByaW50LWJvb3RwLmMgXAotICBwcmludC1idC5jIFwKLSAgcHJpbnQtY2FsbS1mYXN0LmMgXAotICBwcmludC1jYXJwLmMgXAotICBwcmludC1jZHAuYyBcCi0gIHByaW50LWNmbS5jIFwKLSAgcHJpbnQtY2hkbGMuYyBcCi0gIHByaW50LWNpcC5jIFwKLSAgcHJpbnQtY25mcC5jIFwKLSAgcHJpbnQtZGNjcC5jIFwKLSAgcHJpbnQtZGVjbmV0LmMgXAotICBwcmludC1kaGNwNi5jIFwKLSAgcHJpbnQtZG9tYWluLmMgXAotICBwcmludC1kdHAuYyBcCi0gIHByaW50LWR2bXJwLmMgXAotICBwcmludC1lYXAuYyBcCi0gIHByaW50LWVncC5jIFwKLSAgcHJpbnQtZWlncnAuYyBcCi0gIHByaW50LWVuYy5jIFwKLSAgcHJpbnQtZXNwLmMgXAotICBwcmludC1ldGhlci5jIFwKLSAgcHJpbnQtZmRkaS5jIFwKLSAgcHJpbnQtZm9yY2VzLmMgXAotICBwcmludC1mcmFnNi5jIFwKLSAgcHJpbnQtZnIuYyBcCi0gIHByaW50LWZ0cC5jIFwKLSAgcHJpbnQtZ2VuZXZlLmMgXAotICBwcmludC1nZW9uZXQuYyBcCi0gIHByaW50LWdyZS5jIFwKLSAgcHJpbnQtaHNycC5jIFwKLSAgcHJpbnQtaHR0cC5jIFwKLSAgcHJpbnQtaWNtcDYuYyBcCi0gIHByaW50LWljbXAuYyBcCi0gIHByaW50LWlnbXAuYyBcCi0gIHByaW50LWlncnAuYyBcCi0gIHByaW50LWlwNi5jIFwKLSAgcHJpbnQtaXA2b3B0cy5jIFwKLSAgcHJpbnQtaXAuYyBcCi0gIHByaW50LWlwY29tcC5jIFwKLSAgcHJpbnQtaXBmYy5jIFwKLSAgcHJpbnQtaXBuZXQuYyBcCi0gIHByaW50LWlweC5jIFwKLSAgcHJpbnQtaXNha21wLmMgXAotICBwcmludC1pc29jbG5zLmMgXAotICBwcmludC1qdW5pcGVyLmMgXAotICBwcmludC1rcmIuYyBcCi0gIHByaW50LWwydHAuYyBcCi0gIHByaW50LWxhbmUuYyBcCi0gIHByaW50LWxkcC5jIFwKLSAgcHJpbnQtbGxjLmMgXAotICBwcmludC1sbGRwLmMgXAotICBwcmludC1sbXAuYyBcCi0gIHByaW50LWxvb3BiYWNrLmMgXAotICBwcmludC1sc3BwaW5nLmMgXAotICBwcmludC1sd2FwcC5jIFwKLSAgcHJpbnQtbHdyZXMuYyBcCi0gIHByaW50LW0zdWEuYyBcCi0gIHByaW50LW1vYmlsZS5jIFwKLSAgcHJpbnQtbW9iaWxpdHkuYyBcCi0gIHByaW50LW1wY3AuYyBcCi0gIHByaW50LW1wbHMuYyBcCi0gIHByaW50LW1wdGNwLmMgXAotICBwcmludC1tc2RwLmMgXAotICBwcmludC1tc25sYi5jIFwKLSAgcHJpbnQtbmZsb2cuYyBcCi0gIHByaW50LW5mcy5jIFwKLSAgcHJpbnQtbnRwLmMgXAotICBwcmludC1udWxsLmMgXAotICBwcmludC1vbHNyLmMgXAotICBwcmludC1vcGVuZmxvdy0xLjAuYyBcCi0gIHByaW50LW9wZW5mbG93LmMgXAotICBwcmludC1vc3BmNi5jIFwKLSAgcHJpbnQtb3NwZi5jIFwKLSAgcHJpbnQtb3R2LmMgXAotICBwcmludC1wZ20uYyBcCi0gIHByaW50LXBpbS5jIFwKLSAgcHJpbnQtcGt0YXAuYyBcCi0gIHByaW50LXBwaS5jIFwKLSAgcHJpbnQtcHBwLmMgXAotICBwcmludC1wcHBvZS5jIFwKLSAgcHJpbnQtcHB0cC5jIFwKLSAgcHJpbnQtcmFkaXVzLmMgXAotICBwcmludC1yYXcuYyBcCi0gIHByaW50LXJpcC5jIFwKLSAgcHJpbnQtcmlwbmcuYyBcCi0gIHByaW50LXJwa2ktcnRyLmMgXAotICBwcmludC1ycmNwLmMgXAotICBwcmludC1yc3ZwLmMgXAotICBwcmludC1ydDYuYyBcCi0gIHByaW50LXJ0c3AuYyBcCi0gIHByaW50LXJ4LmMgXAotICBwcmludC1zY3RwLmMgXAotICBwcmludC1zZmxvdy5jIFwKLSAgcHJpbnQtc2lwLmMgXAotICBwcmludC1zbC5jIFwKLSAgcHJpbnQtc2xsLmMgXAotICBwcmludC1zbG93LmMgXAotICBwcmludC1zbWIuYyBcCi0gIHByaW50LXNtdHAuYyBcCi0gIHByaW50LXNubXAuYyBcCi0gIHByaW50LXN0cC5jIFwKLSAgcHJpbnQtc3VuYXRtLmMgXAotICBwcmludC1zdW5ycGMuYyBcCi0gIHByaW50LXN5bWFudGVjLmMgXAotICBwcmludC1zeXNsb2cuYyBcCi0gIHByaW50LXRjcC5jIFwKLSAgcHJpbnQtdGVsbmV0LmMgXAotICBwcmludC10ZnRwLmMgXAotICBwcmludC10aW1lZC5jIFwKLSAgcHJpbnQtdGlwYy5jIFwKLSAgcHJpbnQtdG9rZW4uYyBcCi0gIHByaW50LXVkbGQuYyBcCi0gIHByaW50LXVkcC5jIFwKLSAgcHJpbnQtdXNiLmMgXAotICBwcmludC12amMuYyBcCi0gIHByaW50LXZxcC5jIFwKLSAgcHJpbnQtdnJycC5jIFwKLSAgcHJpbnQtdnRwLmMgXAotICBwcmludC12eGxhbi5jIFwKLSAgcHJpbnQtd2IuYyBcCi0gIHByaW50LXplcGh5ci5jIFwKLSAgcHJpbnQtemVyb21xLmMgXAotICBzZXRzaWduYWwuYyBcCi0gIHNpZ25hdHVyZS5jIFwKLSAgc21idXRpbC5jIFwKLSAgdGNwZHVtcC5jIFwKLSAgdXRpbC5jIFwKLSAgdmVyc2lvbi5jIFwKKyMgQmFzZWQgb24gdGhlIHRjcGR1bXAgTWFrZWZpbGUuLi4KKworIyBDU1JDCit0Y3BkdW1wX3NyY19maWxlcyA6PSBzZXRzaWduYWwuYyB0Y3BkdW1wLmMKKworIyBMSUJORVRESVNTRUNUX1NSQwordGNwZHVtcF9zcmNfZmlsZXMgKz0gXAorICAgICAgICBhZGRydG9uYW1lLmMgXAorICAgICAgICBhZGRydG9zdHIuYyBcCisgICAgICAgIGFmLmMgXAorICAgICAgICBhc2NpaV9zdHJjYXNlY21wLmMgXAorICAgICAgICBjaGVja3N1bS5jIFwKKyAgICAgICAgY3BhY2suYyBcCisgICAgICAgIGdtcGxzLmMgXAorICAgICAgICBnbXQybG9jYWwuYyBcCisgICAgICAgIGluX2Nrc3VtLmMgXAorICAgICAgICBpcHByb3RvLmMgXAorICAgICAgICBsMnZwbi5jIFwKKyAgICAgICAgbWFjaGRlcC5jIFwKKyAgICAgICAgbmxwaWQuYyBcCisgICAgICAgIG91aS5jIFwKKyAgICAgICAgcGFyc2VuZnNmaC5jIFwKKyAgICAgICAgcHJpbnQuYyBcCisgICAgICAgIHByaW50LTgwMl8xMS5jIFwKKyAgICAgICAgcHJpbnQtODAyXzE1XzQuYyBcCisgICAgICAgIHByaW50LWFoLmMgXAorICAgICAgICBwcmludC1haGNwLmMgXAorICAgICAgICBwcmludC1hb2R2LmMgXAorICAgICAgICBwcmludC1hb2UuYyBcCisgICAgICAgIHByaW50LWFwMTM5NC5jIFwKKyAgICAgICAgcHJpbnQtYXJjbmV0LmMgXAorICAgICAgICBwcmludC1hcnAuYyBcCisgICAgICAgIHByaW50LWFzY2lpLmMgXAorICAgICAgICBwcmludC1hdGFsay5jIFwKKyAgICAgICAgcHJpbnQtYXRtLmMgXAorICAgICAgICBwcmludC1iYWJlbC5jIFwKKyAgICAgICAgcHJpbnQtYmVlcC5jIFwKKyAgICAgICAgcHJpbnQtYmZkLmMgXAorICAgICAgICBwcmludC1iZ3AuYyBcCisgICAgICAgIHByaW50LWJvb3RwLmMgXAorICAgICAgICBwcmludC1idC5jIFwKKyAgICAgICAgcHJpbnQtY2FsbS1mYXN0LmMgXAorICAgICAgICBwcmludC1jYXJwLmMgXAorICAgICAgICBwcmludC1jZHAuYyBcCisgICAgICAgIHByaW50LWNmbS5jIFwKKyAgICAgICAgcHJpbnQtY2hkbGMuYyBcCisgICAgICAgIHByaW50LWNpcC5jIFwKKyAgICAgICAgcHJpbnQtY25mcC5jIFwKKyAgICAgICAgcHJpbnQtZGNjcC5jIFwKKyAgICAgICAgcHJpbnQtZGVjbmV0LmMgXAorICAgICAgICBwcmludC1kaGNwNi5jIFwKKyAgICAgICAgcHJpbnQtZG9tYWluLmMgXAorICAgICAgICBwcmludC1kdHAuYyBcCisgICAgICAgIHByaW50LWR2bXJwLmMgXAorICAgICAgICBwcmludC1lYXAuYyBcCisgICAgICAgIHByaW50LWVncC5jIFwKKyAgICAgICAgcHJpbnQtZWlncnAuYyBcCisgICAgICAgIHByaW50LWVuYy5jIFwKKyAgICAgICAgcHJpbnQtZXNwLmMgXAorICAgICAgICBwcmludC1ldGhlci5jIFwKKyAgICAgICAgcHJpbnQtZmRkaS5jIFwKKyAgICAgICAgcHJpbnQtZm9yY2VzLmMgXAorICAgICAgICBwcmludC1mci5jIFwKKyAgICAgICAgcHJpbnQtZnJhZzYuYyBcCisgICAgICAgIHByaW50LWZ0cC5jIFwKKyAgICAgICAgcHJpbnQtZ2VuZXZlLmMgXAorICAgICAgICBwcmludC1nZW9uZXQuYyBcCisgICAgICAgIHByaW50LWdyZS5jIFwKKyAgICAgICAgcHJpbnQtaG5jcC5jIFwKKyAgICAgICAgcHJpbnQtaHNycC5jIFwKKyAgICAgICAgcHJpbnQtaHR0cC5jIFwKKyAgICAgICAgcHJpbnQtaWNtcC5jIFwKKyAgICAgICAgcHJpbnQtaWNtcDYuYyBcCisgICAgICAgIHByaW50LWlnbXAuYyBcCisgICAgICAgIHByaW50LWlncnAuYyBcCisgICAgICAgIHByaW50LWlwLmMgXAorICAgICAgICBwcmludC1pcDYuYyBcCisgICAgICAgIHByaW50LWlwNm9wdHMuYyBcCisgICAgICAgIHByaW50LWlwY29tcC5jIFwKKyAgICAgICAgcHJpbnQtaXBmYy5jIFwKKyAgICAgICAgcHJpbnQtaXBuZXQuYyBcCisgICAgICAgIHByaW50LWlweC5jIFwKKyAgICAgICAgcHJpbnQtaXNha21wLmMgXAorICAgICAgICBwcmludC1pc29jbG5zLmMgXAorICAgICAgICBwcmludC1qdW5pcGVyLmMgXAorICAgICAgICBwcmludC1rcmIuYyBcCisgICAgICAgIHByaW50LWwydHAuYyBcCisgICAgICAgIHByaW50LWxhbmUuYyBcCisgICAgICAgIHByaW50LWxkcC5jIFwKKyAgICAgICAgcHJpbnQtbGlzcC5jIFwKKyAgICAgICAgcHJpbnQtbGxjLmMgXAorICAgICAgICBwcmludC1sbGRwLmMgXAorICAgICAgICBwcmludC1sbXAuYyBcCisgICAgICAgIHByaW50LWxvb3BiYWNrLmMgXAorICAgICAgICBwcmludC1sc3BwaW5nLmMgXAorICAgICAgICBwcmludC1sd2FwcC5jIFwKKyAgICAgICAgcHJpbnQtbHdyZXMuYyBcCisgICAgICAgIHByaW50LW0zdWEuYyBcCisgICAgICAgIHByaW50LW1lZHNhLmMgXAorICAgICAgICBwcmludC1tb2JpbGUuYyBcCisgICAgICAgIHByaW50LW1vYmlsaXR5LmMgXAorICAgICAgICBwcmludC1tcGNwLmMgXAorICAgICAgICBwcmludC1tcGxzLmMgXAorICAgICAgICBwcmludC1tcHRjcC5jIFwKKyAgICAgICAgcHJpbnQtbXNkcC5jIFwKKyAgICAgICAgcHJpbnQtbXNubGIuYyBcCisgICAgICAgIHByaW50LW5mbG9nLmMgXAorICAgICAgICBwcmludC1uZnMuYyBcCisgICAgICAgIHByaW50LW5zaC5jIFwKKyAgICAgICAgcHJpbnQtbnRwLmMgXAorICAgICAgICBwcmludC1udWxsLmMgXAorICAgICAgICBwcmludC1vbHNyLmMgXAorICAgICAgICBwcmludC1vcGVuZmxvdy0xLjAuYyBcCisgICAgICAgIHByaW50LW9wZW5mbG93LmMgXAorICAgICAgICBwcmludC1vc3BmLmMgXAorICAgICAgICBwcmludC1vc3BmNi5jIFwKKyAgICAgICAgcHJpbnQtb3R2LmMgXAorICAgICAgICBwcmludC1wZ20uYyBcCisgICAgICAgIHByaW50LXBpbS5jIFwKKyAgICAgICAgcHJpbnQtcGt0YXAuYyBcCisgICAgICAgIHByaW50LXBwaS5jIFwKKyAgICAgICAgcHJpbnQtcHBwLmMgXAorICAgICAgICBwcmludC1wcHBvZS5jIFwKKyAgICAgICAgcHJpbnQtcHB0cC5jIFwKKyAgICAgICAgcHJpbnQtcmFkaXVzLmMgXAorICAgICAgICBwcmludC1yYXcuYyBcCisgICAgICAgIHByaW50LXJlc3AuYyBcCisgICAgICAgIHByaW50LXJpcC5jIFwKKyAgICAgICAgcHJpbnQtcmlwbmcuYyBcCisgICAgICAgIHByaW50LXJwa2ktcnRyLmMgXAorICAgICAgICBwcmludC1ycmNwLmMgXAorICAgICAgICBwcmludC1yc3ZwLmMgXAorICAgICAgICBwcmludC1ydDYuYyBcCisgICAgICAgIHByaW50LXJ0c3AuYyBcCisgICAgICAgIHByaW50LXJ4LmMgXAorICAgICAgICBwcmludC1zY3RwLmMgXAorICAgICAgICBwcmludC1zZmxvdy5jIFwKKyAgICAgICAgcHJpbnQtc2lwLmMgXAorICAgICAgICBwcmludC1zbC5jIFwKKyAgICAgICAgcHJpbnQtc2xsLmMgXAorICAgICAgICBwcmludC1zbG93LmMgXAorICAgICAgICBwcmludC1zbXRwLmMgXAorICAgICAgICBwcmludC1zbm1wLmMgXAorICAgICAgICBwcmludC1zdHAuYyBcCisgICAgICAgIHByaW50LXN1bmF0bS5jIFwKKyAgICAgICAgcHJpbnQtc3VucnBjLmMgXAorICAgICAgICBwcmludC1zeW1hbnRlYy5jIFwKKyAgICAgICAgcHJpbnQtc3lzbG9nLmMgXAorICAgICAgICBwcmludC10Y3AuYyBcCisgICAgICAgIHByaW50LXRlbG5ldC5jIFwKKyAgICAgICAgcHJpbnQtdGZ0cC5jIFwKKyAgICAgICAgcHJpbnQtdGltZWQuYyBcCisgICAgICAgIHByaW50LXRpcGMuYyBcCisgICAgICAgIHByaW50LXRva2VuLmMgXAorICAgICAgICBwcmludC11ZGxkLmMgXAorICAgICAgICBwcmludC11ZHAuYyBcCisgICAgICAgIHByaW50LXVzYi5jIFwKKyAgICAgICAgcHJpbnQtdmpjLmMgXAorICAgICAgICBwcmludC12cXAuYyBcCisgICAgICAgIHByaW50LXZycnAuYyBcCisgICAgICAgIHByaW50LXZ0cC5jIFwKKyAgICAgICAgcHJpbnQtdnhsYW4uYyBcCisgICAgICAgIHByaW50LXZ4bGFuLWdwZS5jIFwKKyAgICAgICAgcHJpbnQtd2IuYyBcCisgICAgICAgIHByaW50LXplcGh5ci5jIFwKKyAgICAgICAgcHJpbnQtemVyb21xLmMgXAorICAgICAgICBuZXRkaXNzZWN0LmMgXAorICAgICAgICBzaWduYXR1cmUuYyBcCisgICAgICAgIHN0cnRvYWRkci5jIFwKKyAgICAgICAgdXRpbC1wcmludC5jIFwKKworIyBMT0NBTFNSQwordGNwZHVtcF9zcmNfZmlsZXMgKz0gcHJpbnQtc21iLmMgc21idXRpbC5jCisKKyMgR0VOU1JDCit0Y3BkdW1wX3NyY19maWxlcyArPSB2ZXJzaW9uLmMKIAogaW5jbHVkZSAkKENMRUFSX1ZBUlMpCiBMT0NBTF9TUkNfRklMRVMgOj0gJCh0Y3BkdW1wX3NyY19maWxlcykKQEAgLTE2OCw2ICsxODUsOCBAQAogTE9DQUxfQ0ZMQUdTICs9IC1XZXJyb3IKICMgaHR0cDovL2IvMzM1NjY2OTUKIExPQ0FMX0NGTEFHUyArPSAtV25vLWFkZHJlc3Mtb2YtcGFja2VkLW1lbWJlcgorTE9DQUxfQ0ZMQUdTICs9IC1Xbm8tc2lnbi1jb21wYXJlCitMT0NBTF9DRkxBR1MgKz0gLVduby1pbmNvbXBhdGlibGUtcG9pbnRlci10eXBlcy1kaXNjYXJkcy1xdWFsaWZpZXJzCiBMT0NBTF9TSEFSRURfTElCUkFSSUVTICs9IGxpYnNzbCBsaWJjcnlwdG8gbGlicGNhcAogTE9DQUxfTU9EVUxFX1BBVEggOj0gJChUQVJHRVRfT1VUX09QVElPTkFMX0VYRUNVVEFCTEVTKQogTE9DQUxfTU9EVUxFX1RBR1MgOj0gZGVidWcKZGlmZiAtLWdpdCBhL0NIQU5HRVMgYi9DSEFOR0VTCmluZGV4IDM4NzY5ZjIuLjdjNGJlMTcgMTAwNjQ0Ci0tLSBhL0NIQU5HRVMKKysrIGIvQ0hBTkdFUwpAQCAtMSwzICsxLDE4NyBAQAorV2VkbmVzZGF5IEphbnVhcnkgMTgsIDIwMTcgZGV2ZWwuZngubGViYWlsQG9yYW5nZS5mcgorICBTdW1tYXJ5IGZvciA0LjkuMCB0Y3BkdW1wIHJlbGVhc2UKKyAgICBHZW5lcmFsIHVwZGF0ZXM6CisgICAgSW1wcm92ZSBzZXBhcmF0aW9uIGZyb250ZW5kL2JhY2tlbmQgKHRjcGR1bXAvbGlibmV0ZGlzc2VjdCkKKyAgICBEb24ndCByZXF1aXJlIElQdjYgbGlicmFyeSBzdXBwb3J0IGluIG9yZGVyIHRvIHN1cHBvcnQgSVB2NiBhZGRyZXNzZXMKKyAgICBJbnRyb2R1Y2UgZGF0YSB0eXBlcyB0byB1c2UgZm9yIGludGVncmFsIHZhbHVlcyBpbiBwYWNrZXQgc3RydWN0dXJlcworICAgIEZpeCBkaXNwbGF5IG9mIHRpbWVzdGFtcHMgd2l0aCAtdHQsIC10dHQgYW5kIC10dHR0dCBvcHRpb25zCisgICAgRml4IHNvbWUgaGVhcCBvdmVyZmxvd3MgZm91bmQgd2l0aCBBbWVyaWNhbiBGdXp6eSBMb3AgYnkgSGFubm8gQm9lY2sgYW5kIG90aGVycworICAgICAgICAoTW9yZSBpbmZvcm1hdGlvbiBpbiB0aGUgbG9nIHdpdGggQ1ZFLTIwMTYtKiBhbmQgQ1ZFLTIwMTctKikKKyAgICBDaGFuZ2UgdGhlIHdheSBwcm90b2NvbHMgcHJpbnQgbGluay1sYXllciBhZGRyZXNzZXMgKEZpeCBoZWFwIG92ZXJmbG93cworICAgICAgICBpbiBDQUxNLUZBU1QgYW5kIEdlb05ldHdvcmtpbmcgcHJpbnRlcnMpCisgICAgUGFzcyBjb3JyZWN0IGNhcGxlbiB2YWx1ZSB0byBldGhlcl9wcmludCgpIGFuZCBzb21lIG90aGVyIGZ1bmN0aW9ucworICAgIEZpeCBsb29rdXBfbnNhcCgpIHRvIG1hdGNoIHdoYXQgaXNvbnNhcF9zdHJpbmcoKSBleHBlY3RzCisgICAgQ2xlYW4gdXAgcmVsYXRpdmUgdGltZSBzdGFtcCBwcmludGluZyAoRml4IGFuIGFycmF5IG92ZXJmbG93KQorICAgIEZpeCBzb21lIGFsaWdubWVudCBpc3N1ZXMgd2l0aCBHQ0Mgb24gU29sYXJpcyAxMCBTUEFSQworICAgIEFkZCBzb21lIE5EX1RURVNUXy9ORF9UQ0hFQ0tfIG1hY3JvcyB0byBzaW1wbGlmeSB3cml0aW5nIGJvdW5kcyBjaGVja3MKKyAgICBBZGQgYSBmbl9wcmludHp0bigpIHdoaWNoIHJldHVybnMgdGhlIG51bWJlciBvZiBieXRlcyBwcm9jZXNzZWQKKyAgICBBZGQgbmRfaW5pdCgpIGFuZCBuZF9jbGVhbnVwKCkgZnVuY3Rpb25zLiBJbXByb3ZlIGxpYnNtaSBzdXBwb3J0CisgICAgQWRkIENPTlRSSUJVVElORyBmaWxlCisgICAgQWRkIGEgc3VtbWFyeSBjb21tZW50IGluIGFsbCBwcmludGVycworICAgIENvbXBpbGUgd2l0aCBtb3JlIHdhcm5pbmcgb3B0aW9ucyBpbiBkZXZlbCBtb2RlIGlmIHN1cHBvcnRlZCAoLVdjYXN0LXF1YWwsIC4uLikKKyAgICBGaXggc29tZSBsZWFrcyBmb3VuZCBieSBWYWxncmluZC9NZW1jaGVjaworICAgIEZpeCBhIGJ1bmNoIG9mIGRlLWNvbnN0aWZpY2F0aW9ucworICAgIFNxdWVsY2ggc29tZSBDb3Zlcml0eSB3YXJuaW5ncyBhbmQgc29tZSBjb21waWxlciB3YXJuaW5ncworICAgIFVwZGF0ZSBDb3Zlcml0eSBhbmQgVHJhdmlzLUNJIHNldHVwCisgICAgVXBkYXRlIFZpc3VhbCBTdHVkaW8gZmlsZXMKKworICAgIEZyb250ZW5kOgorICAgIEZpeCBjYXBzaWN1bSBzdXBwb3J0IHRvIHdvcmsgd2l0aCB6ZXJvY29weSBidWZmZXJzIGluIGJwZgorICAgIFRyeSBvcGVuaW5nIGludGVyZmFjZXMgYnkgbmFtZSBmaXJzdCwgdGhlbiBieSBuYW1lLWFzLWluZGV4CisgICAgV29yayBhcm91bmQgcGNhcF9jcmVhdGUoKSBmYWlsdXJlcyBmZXRjaGluZyB0aW1lIHN0YW1wIHR5cGUgbGlzdHMKKyAgICBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQgd2l0aCAndGNwZHVtcCAtSicKKyAgICBJbXByb3ZlIGFkZHJ0b3N0cjYoKSBib3VuZHMgY2hlY2tpbmcKKyAgICBBZGQgZXhpdF90Y3BkdW1wKCkgZnVuY3Rpb24KKyAgICBEb24ndCBkcm9wIENBUF9TWVNfQ0hST09UIGJlZm9yZSBjaHJvb3RpbmcKKyAgICBGaXhlcyBpc3N1ZSB3aGVyZSBzdGF0aXN0aWNzIG5vdCByZXBvcnRlZCB3aGVuIC1HIGFuZCAtVyBvcHRpb25zIHVzZWQKKworICAgIE5ldyBwcmludGVycyBzdXBwb3J0aW5nOgorICAgIEdlbmVyaWMgUHJvdG9jb2wgRXh0ZW5zaW9uIGZvciBWWExBTiAoVlhMQU4tR1BFKQorICAgIEhvbWUgTmV0d29ya2luZyBDb250cm9sIFByb3RvY29sIChITkNQKSwgUkZDcyA3Nzg3IGFuZCA3Nzg4CisgICAgTG9jYXRvci9JZGVudGlmaWVyIFNlcGFyYXRpb24gUHJvdG9jb2wgKExJU1ApLCB0eXBlIDMgYW5kIHR5cGUgNCBwYWNrZXRzCisgICAgTWFydmVsbCBFeHRlbmRlZCBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIGhlYWRlciAoTUVEU0EpCisgICAgTmV0d29yayBTZXJ2aWNlIEhlYWRlciAoTlNIKQorICAgIFJFZGlzIFNlcmlhbGl6YXRpb24gUHJvdG9jb2wgKFJFU1ApCisKKyAgICBVcGRhdGVkIHByaW50ZXJzOgorICAgIDgwMi4xMTogQmVnaW5uaW5ncyBvZiAxMWFjIHJhZGlvdGFwIHN1cHBvcnQKKyAgICA4MDIuMTE6IENoZWNrIHRoZSBQcm90ZWN0ZWQgYml0IGZvciBtYW5hZ2VtZW50IGZyYW1lcworICAgIDgwMi4xMTogRG8gYm91bmRzIGNoZWNraW5nIG9uIGxhc3RfcHJlc2VudHAgYmVmb3JlIGRlcmVmZXJlbmNpbmcgaXQgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgODAyLjExOiBGaXggdGhlIHJhZGlvdGFwIHByaW50ZXIgdG8gaGFuZGxlIHRoZSBzcGVjaWFsIGJpdHMgY29ycmVjdGx5CisgICAgODAyLjExOiBJZiB3ZSBoYXZlIHRoZSBNQ1MgZmllbGQsIGl0J3MgMTFuCisgICAgODAyLjExOiBPbmx5IHByaW50IHVua25vd24gZnJhbWUgdHlwZSBvciBzdWJ0eXBlIG1lc3NhZ2VzIG9uY2UKKyAgICA4MDIuMTE6IFJhZGlvdGFwIGRCbSB2YWx1ZXMgZ2V0IHByaW50ZWQgYXMgZEI7IFVwZGF0ZSBhIHRlc3Qgb3V0cHV0IGFjY29yZGluZ2x5CisgICAgODAyLjExOiBTb3VyY2UgYW5kIGRlc3RpbmF0aW9uIGFkZHJlc3NlcyB3ZXJlIGJhY2t3YXJkcworICAgIEFIOiBBZGQgYSBib3VuZHMgY2hlY2sKKyAgICBBSDogUmVwb3J0IHRvIG91ciBjYWxsZXIgdGhhdCBkaXNzZWN0aW9uIGZhaWxlZCBpZiBhIGJvdW5kcyBjaGVjayBmYWlscworICAgIEFQMTM5NDogUHJpbnQgc3JjID4gZHN0LCBub3QgZHN0ID4gc3JjCisgICAgQVJQOiBEb24ndCBhc3N1bWUgdGhlIHRhcmdldCBoYXJkd2FyZSBhZGRyZXNzIGlzIDw9IDYgb2N0ZXRzIGxvbmcgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgQVRBTEs6IEFkZCBib3VuZHMgYW5kIGxlbmd0aCBjaGVja3MgKEZpeCBoZWFwIG92ZXJmbG93cykKKyAgICBBVE06IEFkZCBzb21lIGJvdW5kcyBjaGVja3MgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgQVRNOiBGaXggYW4gaW5jb3JyZWN0IGJvdW5kcyBjaGVjaworICAgIEJGRDogVXBkYXRlIHNwZWNpZmljYXRpb24gZnJvbSBkcmFmdCB0byBSRkMgNTg4MAorICAgIEJGRDogVXBkYXRlIHRvIHByaW50IG9wdGlvbmFsIGF1dGhlbnRpY2F0aW9uIGZpZWxkCisgICAgQkdQOiBBZGQgZGVjb2Rpbmcgb2YgQURELVBBVEggY2FwYWJpbGl0eQorICAgIEJHUDogQWRkIHN1cHBvcnQgZm9yIHRoZSBBSUdQIGF0dHJpYnV0ZSAoUkZDNzMxMSkKKyAgICBCR1A6IFByaW50IExBUkdFX0NPTU1VTklUWSBQYXRoIEF0dHJpYnV0ZQorICAgIEJHUDogVXBkYXRlIEJHUCBudW1iZXJzIGZyb20gSUFOQTsgUHJpbnQgbWlub3IgdmFsdWVzIGZvciBGU00gbm90aWZpY2F0aW9uCisgICAgQk9PVFA6IEFkZCBhIGJvdW5kcyBjaGVjaworICAgIEJhYmVsOiBBZGQgZGVjb2RlciBmb3Igc291cmNlLXNwZWNpZmljIGV4dGVuc2lvbgorICAgIENEUDogRmlsdGVyIG91dCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMKKyAgICBDRk06IEZpeGVzIHRvIG1hdGNoIHRoZSBJRUVFIHN0YW5kYXJkLCBhZGRpdGlvbmFsIGJvdW5kcyBhbmQgbGVuZ3RoIGNoZWNrcworICAgIENTTElQOiBBZGQgbW9yZSBib3VuZHMgY2hlY2tzIChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIENsYXNzaWNhbElQb0FUTTogQWRkIGEgYm91bmRzIGNoZWNrIG9uIExMQytTTkFQIGhlYWRlciAoRml4IGEgaGVhcCBvdmVyZmxvdykKKyAgICBESENQOiBGaXggTVVEVVJMIGFuZCBUWiBvcHRpb25zCisgICAgREhDUHY2OiBQcm9jZXNzIE1VRFVSTCBhbmQgVFogb3B0aW9ucworICAgIERIQ1B2NjogVXBkYXRlIFN0YXR1cyBDb2RlcyB3aXRoIFJGQ3MvSUFOQSBuYW1lcworICAgIEROUzogUmVwcmVzZW50IHRoZSAiRE5TU0VDIE9LIiBiaXQgYXMgIkRPIiBpbnN0ZWFkIG9mICJPSyIuIEFkZCBhIHRlc3QgY2FzZQorICAgIERUUDogSW1wcm92ZSBwYWNrZXQgaW50ZWdyaXR5IGNoZWNrcworICAgIEVHUDogRml4IGJvdW5kcyBjaGVja3MKKyAgICBFU1A6IERvbid0IHVzZSBPcGVuU1NMX2FkZF9hbGxfYWxnb3JpdGhtcygpIGluIE9wZW5TU0wgMS4xLjAgb3IgbGF0ZXIKKyAgICBFU1A6IEhhbmRsZSBPcGVuU1NMIDEuMS54CisgICAgRXRoZXJuZXQ6IEFkZCBzb21lIGJvdW5kcyBjaGVja2luZyBiZWZvcmUgY2FsbGluZyBpc29jbG5zX3ByaW50IChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIEV0aGVybmV0OiBQcmludCB0aGUgTGVuZ3RoL1R5cGUgZmllbGQgYXMgbGVuZ3RoIHdoZW4gbmVlZGVkCisgICAgRkRESTogRml4IC1lIG91dHB1dCBmb3IgRkRESQorICAgIEZSOiBBZGQgc29tZSBwYWNrZXQtbGVuZ3RoIGNoZWNrcyBhbmQgaW1wcm92ZSBRLjkzMyBwcmludGluZyAoRml4IGhlYXAgb3ZlcmZsb3dzKQorICAgIEdSRTogQWRkIHNvbWUgYm91bmRzIGNoZWNrcyAoRml4IGhlYXAgb3ZlcmZsb3dzKQorICAgIEdlbmV2ZTogRml4IGVycm9yIG1lc3NhZ2Ugd2l0aCBpbnZhbGlkIG9wdGlvbiBsZW5ndGg7IFVwZGF0ZSBsaXN0IG9wdGlvbiBjbGFzc2VzCisgICAgSE5DUDogRml4IGluY29ycmVjdCB0aW1lIGludGVydmFsIGZvcm1hdC4gRml4IGhhbmRsaW5nIG9mIElQdjQgcHJlZml4ZXMKKyAgICBJQ01QNjogRmV0Y2ggYSAzMi1iaXQgYmlnLWVuZGlhbiBxdWFudGl0eSB3aXRoIEVYVFJBQ1RfMzJCSVRTKCkKKyAgICBJQ01QNjogZGFnaWQgaXMgYWx3YXlzIGFuIElQdjYgYWRkcmVzcywgbm90IGFuIG9wYXF1ZSAxMjgtYml0IHN0cmluZworICAgIElHTVA6IEFkZCBhIGxlbmd0aCBjaGVjaworICAgIElQOiBBZGQgYSBib3VuZHMgY2hlY2sgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgSVA6IENoZWNrIGJlZm9yZSBmZXRjaGluZyB0aGUgcHJvdG9jb2wgdmVyc2lvbiAoRml4IGEgaGVhcCBvdmVyZmxvdykKKyAgICBJUDogRG9uJ3QgdHJ5IHRvIGRpc3NlY3QgaWYgSVAgdmVyc2lvbiAhPSA0IChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIElQOiBTdG9wIHByb2Nlc3NpbmcgSVBQUk9UT18gdmFsdWVzIG9uY2Ugd2UgaGl0IElQUFJPVE9fSVBDT01QCisgICAgSVBDb21wOiBDaGVjayB3aGV0aGVyIHdlIGhhdmUgdGhlIENQSSBiZWZvcmUgd2UgZmV0Y2ggaXQgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgSVBvRkM6IEZpeCAtZSBvdXRwdXQgKElQLW92ZXItRmlicmUgQ2hhbm5lbCkKKyAgICBJUHY2OiBEb24ndCBvdmVyd3JpdGUgdGhlIGRlc3RpbmF0aW9uIElQdjYgYWRkcmVzcyBmb3Igcm91dGluZyBoZWFkZXJzCisgICAgSVB2NjogRml4IGhlYWRlciBwcmludGluZworICAgIElQdjY6IFN0b3AgcHJvY2Vzc2luZyBJUFBST1RPXyB2YWx1ZXMgb25jZSB3ZSBoaXQgSVBQUk9UT19JUENPTVAKKyAgICBJU0FLTVA6IENsZWFuIHVwIHBhcnNpbmcgb2YgSUtFdjIgU2VjdXJpdHkgQXNzb2NpYXRpb25zCisgICAgSVNPQ0xOUy9JUy1JUzogQWRkIHN1cHBvcnQgZm9yIFB1cmdlIE9yaWdpbmF0b3IgSWRlbnRpZmllciAoUkZDNjIzMikgYW5kIHRlc3QgY2FzZXMKKyAgICBJU09DTE5TL0lTLUlTOiBEb24ndCBvdmVyd3JpdGUgcGFja2V0IGRhdGEgd2hlbiBjaGVja2luZyB0aGUgc2lnbmF0dXJlCisgICAgSVNPQ0xOUy9JUy1JUzogRmlsdGVyIG91dCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMKKyAgICBJU09DTE5TL0lTLUlTOiBGaXggc2VnbWVudGF0aW9uIGZhdWx0cworICAgIElTT0NMTlMvSVMtSVM6IEhhdmUgc2lnbmF0dXJlX3ZlcmlmeSgpIGRvIHRoZSBjb3B5aW5nIGFuZCBjbGVhcmluZworICAgIElTT0NMTlM6IEFkZCBzb21lIGJvdW5kcyBjaGVja3MKKyAgICBKdW5pcGVyOiBNYWtlIHN1cmUgYSBKdW5pcGVyIGhlYWRlciBUTFYgaXNuJ3QgYmlnZ2VyIHRoYW4gd2hhdCdzIGxlZnQgaW4gdGhlIHBhY2tldCAoRml4IGEgaGVhcCBvdmVyZmxvdykKKyAgICBMTEMvU05BUDogV2l0aCAtZSwgcHJpbnQgdGhlIExMQyBoZWFkZXIgYmVmb3JlIHRoZSBTTkFQIGhlYWRlcjsgd2l0aG91dCBpdCwgY3V0IHRoZSBTTkFQIGhlYWRlcgorICAgIExMQzogQWRkIGEgYm91bmRzIGNoZWNrIChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIExMQzogQ2xlYW4gdXAgcHJpbnRpbmcgb2YgTExDIHBhY2tldHMKKyAgICBMTEM6IEZpeCB0aGUgcHJpbnRpbmcgb2YgUkZDIDk0OC1zdHlsZSBJUCBwYWNrZXRzCisgICAgTExDOiBTa2lwIHRoZSBMTEMgYW5kIFNOQVAgaGVhZGVycyB3aXRoIC14IGZvciA4MDIuMTEgYW5kIHNvbWUgb3RoZXIgcHJvdG9jb2xzCisgICAgTExEUDogSW1wbGVtZW50IElBTkEgT1VJIGFuZCBMTERQIE1VRCBvcHRpb24KKyAgICBNUExTIExTUCBwaW5nOiBVcGRhdGUgcHJpbnRpbmcgZm9yIFJGQyA0Mzc5LCBidWcgZml4ZXMsIG1vcmUgYm91bmRzIGNoZWNrcworICAgIE1QTFM6ICJsZW5ndGgiIGlzIG5vdyB0aGUgKnJlbWFpbmluZyogcGFja2V0IGxlbmd0aAorICAgIE1QTFM6IEFkZCBib3VuZHMgYW5kIGxlbmd0aCBjaGVja3MgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgTkZTOiBBZGQgYSB0ZXN0IHRoYXQgbWFrZXMgdW5hbGlnbmVkIGFjY2Vzc2VzCisgICAgTkZTOiBEb24ndCBhc3N1bWUgdGhlIE9OQyBSUEMgaGVhZGVyIGlzIG5pY2VseSBhbGlnbmVkCisgICAgTkZTOiBEb24ndCBvdmVyZmxvdyB0aGUgT3BhcXVlX0hhbmRsZSBidWZmZXIgKEZpeCBhIHNlZ21lbnRhdGlvbiBmYXVsdCkKKyAgICBORlM6IERvbid0IHJ1biBwYXN0IHRoZSBlbmQgb2YgYW4gTkZTdjMgZmlsZSBoYW5kbGUKKyAgICBPTFNSOiBBZGQgYSB0ZXN0IHRvIGNvdmVyIGEgSE5BIHNndyBjYXNlCisgICAgT0xTUjogRml4ICdBZHZlcnRpc2VkIG5ldHdvcmtzJyBjb3VudAorICAgIE9MU1I6IEZpeCBwcmludGluZyBvZiBzbWFydC1nYXRld2F5IEhOQXMgaW4gSVB2NAorICAgIE9TUEY6IEFkZCBhIGJvdW5kcyBjaGVjayBmb3IgdGhlIEhlbGxvIHBhY2tldCBvcHRpb25zCisgICAgT1NQRjogRG8gbW9yZSBib3VuZHMgY2hlY2tpbmcKKyAgICBPU1BGOiBGaXggYSBzZWdtZW50YXRpb24gZmF1bHQKKyAgICBPU1BGOiBGaXggcHJpbnRpbmcgJ29zcGZfdG9wb2xvZ3lfdmFsdWVzJyBkZWZhdWx0CisgICAgT1RWOiBBZGQgbWlzc2luZyBib3VuZHMgY2hlY2tzCisgICAgUEdNOiBQcmludCB0aGUgZm9ybWF0dGVkIElQIGFkZHJlc3MsIG5vdCB0aGUgcmF3IGJpbmFyeSBhZGRyZXNzLCBhcyBhIHN0cmluZworICAgIFBJTTogQWRkIHNvbWUgYm91bmRzIGNoZWNraW5nIChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIFBJTXYyOiBGaXggY2hlY2tzdW1taW5nIG9mIFJlZ2lzdGVyIG1lc3NhZ2VzCisgICAgUFBJOiBQYXNzIGFuIGFkanVzdGVkIHN0cnVjdCBwY2FwX3BrdGhkciB0byB0aGUgc3ViLXByaW50ZXIKKyAgICBQUFA6IEFkZCBzb21lIGJvdW5kcyBjaGVja3MgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgUFBQOiBSZXBvcnQgaW52YWxpZCBQQVAgQUFDSy9BTkFLIHBhY2tldHMKKyAgICBRLjkzMzogQWRkIGEgbWlzc2luZyBib3VuZHMgY2hlY2sKKyAgICBSQURJVVM6IEFkZCBWYWx1ZSAxMyAiVkxBTiIgdG8gVHVubmVsLVR5cGUgYXR0cmlidXRlCisgICAgUkFESVVTOiBGaWx0ZXIgb3V0IG5vbi1wcmludGFibGUgY2hhcmFjdGVycworICAgIFJBRElVUzogVHJhbnNsYXRlIFVEUC8xNzAwIGFzIFJBRElVUworICAgIFJFU1A6IERvIGJldHRlciBjaGVja2luZyBvZiBSRVNQIHBhY2tldHMKKyAgICBSUEtJLVJUUjogQWRkIGEgcmV0dXJuIHZhbHVlIGNoZWNrIGZvciAiZm5fcHJpbnRuIiBjYWxsCisgICAgUlBLSS1SVFI6IFJlbW92ZSBwcmludGluZyB3aGVuIHRydW5jYXRlZCBjb25kaXRpb24gYWxyZWFkeSBkZXRlY3RlZAorICAgIFJQTDogRml4ICdDb25zaXN0ZW5jeSBDaGVjaycgY29udHJvbCBjb2RlCisgICAgUlBMOiBGaXggc3Vib3B0aW9uIHByaW50CisgICAgUlNWUDogQW4gSU5URUdSSVRZIG9iamVjdCBpbiBhIHN1Ym1lc3NhZ2UgY292ZXJzIG9ubHkgdGhlIHN1Ym1lc3NhZ2UKKyAgICBSU1ZQOiBGaXggYW4gaW5maW5pdGUgbG9vcDsgQWRkIGJvdW5kcyBhbmQgbGVuZ3RoIGNoZWNrcworICAgIFJTVlA6IEZpeCBzb21lIGlmIHN0YXRlbWVudHMgbWlzc2luZyBicmFja2V0cworICAgIFJTVlA6IEhhdmUgc2lnbmF0dXJlX3ZlcmlmeSgpIGRvIHRoZSBjb3B5aW5nIGFuZCBjbGVhcmluZworICAgIFJUQ1A6IEFkZCBzb21lIGJvdW5kcyBjaGVja3MKKyAgICBSVFA6IEFkZCBzb21lIGJvdW5kcyBjaGVja3MsIGZpeCB0d28gc2VnbWVudGF0aW9uIGZhdWx0cworICAgIFNDVFA6IERvIG1vcmUgYm91bmRzIGNoZWNraW5nCisgICAgU0ZMT1c6IEZpeCBib3VuZHMgY2hlY2tpbmcKKyAgICBTTE9XOiBGaXggYnVncywgYWRkIGNoZWNrcworICAgIFNNQjogQmVmb3JlIGZldGNoaW5nIHRoZSBmbGFnczIgZmllbGQsIG1ha2Ugc3VyZSB3ZSBoYXZlIGl0CisgICAgU01COiBEbyBib3VuZHMgY2hlY2tzIG9uIE5CTlMgcmVzb3VyY2UgdHlwZXMgYW5kIHJlc291cmNlIGRhdGEgbGVuZ3RocworICAgIFNOTVA6IENsZWFuIHVwIHRoZSAiaGF2ZSBsaWJzbWkgYnV0IG5vIG1vZHVsZXMgbG9hZGVkIiBjYXNlCisgICAgU05NUDogQ2xlYW4gdXAgdGhlIG9iamVjdCBhYmJyZXZpYXRpb24gbGlzdCBhbmQgZml4IHRoZSBjb2RlIHRvIG1hdGNoIHRoZW0KKyAgICBTTk1QOiBEbyBib3VuZHMgY2hlY2tzIHdoZW4gcHJpbnRpbmcgY2hhcmFjdGVyIGFuZCBvY3RldCBzdHJpbmdzCisgICAgU05NUDogSW1wcm92ZSBBU04uMSBib3VuZHMgY2hlY2tzCisgICAgU05NUDogTW9yZSBib3VuZHMgYW5kIGxlbmd0aCBjaGVja3MKKyAgICBTVFA6IEFkZCBhIGJ1bmNoIG9mIGJvdW5kcyBjaGVja3MsIGFuZCBmaXggc29tZSBwcmludGluZyAoRml4IGhlYXAgb3ZlcmZsb3dzKQorICAgIFNUUDogRmlsdGVyIG91dCBub24tcHJpbnRhYmxlIGNoYXJhY3RlcnMKKyAgICBUQ1A6IEFkZCBib3VuZHMgYW5kIGxlbmd0aCBjaGVja3MgZm9yIHBhY2tldHMgd2l0aCBUQ1Agb3B0aW9uIDIwCisgICAgVENQOiBDb3JyZWN0IFRDUCBvcHRpb24gS2luZCB2YWx1ZSBmb3IgVENQIEF1dGggYW5kIGFkZCBTQ1BTLVRQCisgICAgVENQOiBGaXggdHdvIGJvdW5kcyBjaGVja3MgKEZpeCBoZWFwIG92ZXJmbG93cykKKyAgICBUQ1A6IE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBkYXRhIG9mZnNldCBmaWVsZCBiZWZvcmUgZmV0Y2hpbmcgaXQgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgVENQOiBQdXQgVENQLUFPIG9wdGlvbiBkZWNvZGluZyByaWdodAorICAgIFRGVFA6IERvbid0IHVzZSBzdHJjaHIoKSB0byBzY2FuIHBhY2tldCBkYXRhIChGaXggYSBoZWFwIG92ZXJmbG93KQorICAgIFRlbG5ldDogQWRkIHNvbWUgYm91bmRzIGNoZWNrcworICAgIFRva2VuUmluZzogRml4IC1lIG91dHB1dAorICAgIFVETEQ6IEZpeCBhbiBpbmZpbml0ZSBsb29wCisgICAgVURQOiBBZGQgYSBib3VuZHMgY2hlY2sgKEZpeCBhIGhlYXAgb3ZlcmZsb3cpCisgICAgVURQOiBDaGVjayBhZ2FpbnN0IHRoZSBwYWNrZXQgbGVuZ3RoIGZpcnN0CisgICAgVURQOiBEb24ndCBkbyB0aGUgRERQLW92ZXItVURQIGhldXJpc3RpYyBjaGVjayB1cCBmcm9udAorICAgIFZBVDogQWRkIHNvbWUgYm91bmRzIGNoZWNrcworICAgIFZUUDogQWRkIGEgdGVzdCBvbiBNZ210IERvbWFpbiBOYW1lIGxlbmd0aAorICAgIFZUUDogQWRkIGJvdW5kcyBjaGVja3MgYW5kIGZpbHRlciBvdXQgbm9uLXByaW50YWJsZSBjaGFyYWN0ZXJzCisgICAgVlhMQU46IEFkZCBhIGJvdW5kIGNoZWNrIGFuZCBhIHRlc3QgY2FzZQorICAgIFplcm9NUTogRml4IGFuIGluZmluaXRlIGxvb3AKKworVHVlc2RheSBBcHJpbCAxNCwgMjAxNSBndXlAYWx1bS5taXQuZWR1CisgIFN1bW1hcnkgZm9yIDQuOC4wIHRjcGR1bXAgcmVsZWFzZQorCUZpeCAiLXgiIGZvciBBcHBsZSBQS1RBUCBhbmQgUFBJIHBhY2tldHMKKwogRnJpZGF5IEFwcmlsIDEwLCAyMDE1IGd1eUBhbHVtLm1pdC5lZHUKICAgU3VtbWFyeSBmb3IgNC43LjQgdGNwZHVtcCByZWxlYXNlCiAJUlBLSSB0byBSb3V0ZXIgUHJvdG9jb2w6IEZpeCBTZWdtZW50YXRpb24gRmF1bHRzIGFuZCBvdGhlciBwcm9ibGVtcwpAQCAtNDY0LDEwICs2NDgsMTAgQEAKIAogVHVlc2RheSwgRmVicnVhcnkgMjUsIDIwMDMuIGZlbm5lckByZXNlYXJjaC5hdHQuY29tLiAgMy43LjIgcmVsZWFzZQogCi0JRml4ZWQgaW5maW5pdGUgbG9vcCB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIGlzYWttcCBwYWNrZXRzLgorCUZpeGVkIGluZmluaXRlIGxvb3Agd2hlbiBwYXJzaW5nIGludmFsaWQgaXNha21wIHBhY2tldHMuCiAJIChyZXBvcnRlZCBieSBpRGVmZW5zZTsgYWxyZWFkeSBmaXhlZCBpbiBDVlMpCi0JRml4ZWQgaW5maW5pdGUgbG9vcCB3aGVuIHBhcnNpbmcgbWFsZm9ybWVkIEJHUCBwYWNrZXRzLgotCUZpeGVkIGJ1ZmZlciBvdmVyZmxvdyB3aXRoIGNlcnRhaW4gbWFsZm9ybWVkIE5GUyBwYWNrZXRzLgorCUZpeGVkIGluZmluaXRlIGxvb3Agd2hlbiBwYXJzaW5nIGludmFsaWQgQkdQIHBhY2tldHMuCisJRml4ZWQgYnVmZmVyIG92ZXJmbG93IHdpdGggY2VydGFpbiBpbnZhbGlkIE5GUyBwYWNrZXRzLgogCVByZXR0eS1wcmludCB1bnByaW50YWJsZSBuZXR3b3JrIG5hbWVzIGluIDgwMi4xMSBwcmludGVyLgogCUhhbmRsZSB0cnVuY2F0ZWQgbmJwIChhcHBsZXRhbGspIHBhY2tldHMuCiAJVXBkYXRlZCBESENQdjYgcHJpbnRlciB0byBtYXRjaCBkcmFmdC1pZXRmLWRoYy1kaGNwdjYtMjIudHh0CmRpZmYgLS1naXQgYS9DT05UUklCVVRJTkcgYi9DT05UUklCVVRJTkcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWQzYjQ2ZQotLS0gL2Rldi9udWxsCisrKyBiL0NPTlRSSUJVVElORwpAQCAtMCwwICsxLDEwMyBAQAorU29tZSBJbmZvcm1hdGlvbiBmb3IgQ29udHJpYnV0b3JzCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1lvdSB3YW50IHRvIGNvbnRyaWJ1dGUgdG8gVGNwZHVtcCwgVGhhbmtzIQorUGxlYXNlLCByZWFkIHRoZXNlIGxpbmVzLgorCisxKSBGb3JrIHRoZSBUY3BkdW1wIHJlcG9zaXRvcnkgb24gR2l0SHViIGZyb20KKyAgIGh0dHBzOi8vZ2l0aHViLmNvbS90aGUtdGNwZHVtcC1ncm91cC90Y3BkdW1wCisgICAoU2VlIGh0dHBzOi8vaGVscC5naXRodWIuY29tL2FydGljbGVzL2ZvcmstYS1yZXBvLykKKworMikgU2V0dXAgYW4gb3B0aW9uYWwgVHJhdmlzLUNJIGJ1aWxkCisgICBZb3UgY2FuIHNldHVwIGEgdHJhdmlzIGJ1aWxkIGZvciB5b3VyIGZvcmsuIFNvLCB5b3UgY2FuIHRlc3QgeW91ciBjaGFuZ2VzCisgICBvbiBMaW51eCBhbmQgT1NYIGJlZm9yZSBzZW5kaW5nIHB1bGwgcmVxdWVzdHMuCisgICAoU2VlIGh0dHA6Ly9kb2NzLnRyYXZpcy1jaS5jb20vdXNlci9nZXR0aW5nLXN0YXJ0ZWQvKQorCiszKSBDbG9uZSB5b3VyIHJlcG9zaXRvcnkKKyAgIGdpdCBjbG9uZSBodHRwczovL2dpdGh1Yi5jb20vPHVzZXJuYW1lPi90Y3BkdW1wLmdpdAorCis0KSBEbyBhICd0b3VjaCAuZGV2ZWwnIGluIHlvdXIgd29ya2luZyBkaXJlY3RvcnkuCisgICBDdXJyZW50bHksIHRoZSBlZmZlY3QgaXMKKyAgIGEpIGFkZCAodmlhIGNvbmZpZ3VyZSwgaW4gTWFrZWZpbGUpIHNvbWUgd2FybmluZ3Mgb3B0aW9ucyAoIC1XYWxsCisgICAtV21pc3NpbmctcHJvdG90eXBlcyAtV3N0cmljdC1wcm90b3R5cGVzLCAuLi4pIHRvIHRoZSBjb21waWxlciBpZiBpdAorICAgc3VwcG9ydHMgdGhlc2Ugb3B0aW9ucywKKyAgIGIpIGhhdmUgdGhlIE1ha2VmaWxlIHN1cHBvcnQgIm1ha2UgZGVwZW5kIiBhbmQgdGhlIGNvbmZpZ3VyZSBzY3JpcHQgcnVuIGl0LgorCis1KSBDb25maWd1cmUgYW5kIGJ1aWxkCisgICAuL2NvbmZpZ3VyZSAmJiBtYWtlIC1zICYmIG1ha2UgY2hlY2sKKworNikgQWRkL3VwZGF0ZSBzYW1wbGUucGNhcCBmaWxlcworICAgV2UgdXNlIHRlc3RzIGRpcmVjdG9yeSB0byBkbyByZWdyZXNzaW9uIHRlc3RzIG9uIHRoZSBkaXNzZWN0aW9uIG9mIGNhcHR1cmVkCisgICBwYWNrZXRzLCBieSBydW5uaW5nIHRjcGR1bXAgYWdhaW5zdCBhIHNhdmVmaWxlIHNhbXBsZS5wY2FwLCBjcmVhdGVkIHdpdGggLXcKKyAgIG9wdGlvbiBhbmQgY29tcGFyaW5nIHRoZSByZXN1bHRzIHdpdGggYSB0ZXh0IGZpbGUgc2FtcGxlLm91dCBnaXZpbmcgdGhlCisgICBleHBlY3RlZCByZXN1bHRzLgorCisgICBBbnkgbmV3L3VwZGF0ZWQgZmllbGRzIGluIGEgZGlzc2VjdG9yIG11c3QgYmUgcHJlc2VudCBpbiBhIHNhbXBsZS5wY2FwIGZpbGUKKyAgIGFuZCB0aGUgY29ycmVzcG9uZGluZyBvdXRwdXQgZmlsZS4KKworICAgQ29uZmlndXJhdGlvbiBpcyBzZXQgaW4gdGVzdHMvVEVTVExJU1QuCisgICBFYWNoIGxpbmUgaW4gdGhpcyBmaWxlIGhhcyB0aGUgZm9sbG93aW5nIGZvcm1hdDoKKyAgIHRlc3QtbmFtZSAgIHNhbXBsZS5wY2FwICAgc2FtcGxlLm91dCAgIHRjcGR1bXAtb3B0aW9ucworCisgICB0aGUgc2FtcGxlLm91dCBmaWxlIGNhbiBiZSBidWlsZCBieToKKyAgIChjZCB0ZXN0cyAmJiAuLi90Y3BkdW1wIC1uIC1yIHNhbXBsZS5wY2FwIHRjcGR1bXAtb3B0aW9ucyA+IHNhbXBsZS5vdXQpCisKKyAgIEl0IGlzIG9mdGVuIHVzZWZ1bCB0byBoYXZlIHRlc3Qgb3V0cHV0cyB3aXRoIGRpZmZlcmVudCB2ZXJib3NpdHkgbGV2ZWxzCisgICAobm9uZSwgLXYsIC12diwgLXZ2diwgZXRjLikgZGVwZW5kaW5nIG9uIHRoZSBjb2RlLgorCis3KSBUZXN0IHdpdGggJ21ha2UgY2hlY2snCisgICBEb24ndCBzZW5kIGEgcHVsbCByZXF1ZXN0IGlmICdtYWtlIGNoZWNrJyBnaXZlcyBmYWlsZWQgdGVzdHMuCisKKzgpIFJlYmFzZSB5b3VyIGNvbW1pdHMgYWdhaW5zdCB1cHN0cmVhbS9tYXN0ZXIKKyAgIChUbyBrZWVwIGxpbmVhcml0eSkKKworOSkgSW5pdGlhdGUgYW5kIHNlbmQgYSBwdWxsIHJlcXVlc3QKKyAgIChTZWUgaHR0cHM6Ly9oZWxwLmdpdGh1Yi5jb20vYXJ0aWNsZXMvdXNpbmctcHVsbC1yZXF1ZXN0cy8pCisKK1NvbWUgcmVtYXJrcworLS0tLS0tLS0tLS0tCithKSBBIHRob3JvdWdoIHJlYWRpbmcgb2Ygc29tZSBvdGhlciBwcmludGVycyBjb2RlIGlzIHVzZWZ1bC4KKworYikgUHV0IHRoZSBub3JtYXRpdmUgcmVmZXJlbmNlIGlmIGFueSBhcyBjb21tZW50cyAoUkZDLCBldGMuKS4KKworYykgUHV0IHRoZSBmb3JtYXQgb2YgcGFja2V0cy9oZWFkZXJzL29wdGlvbnMgYXMgY29tbWVudHMuCisKK2QpIFRoZSBwcmludGVyIG1heSByZWNlaXZlIGluY29tcGxldGUgcGFja2V0IGluIHRoZSBidWZmZXIsIHRydW5jYXRlZCBhdCBhbnkKKyAgIHJhbmRvbSBwb3NpdGlvbiwgZm9yIGV4YW1wbGUgYnkgY2FwdHVyaW5nIHdpdGggJy1zIHNpemUnIG9wdGlvbi4KKyAgIFRodXMgdXNlIE5EX1RURVNULCBORF9UVEVTVDIsIE5EX1RDSEVDSyBvciBORF9UQ0hFQ0syIGZvciBib3VuZCBjaGVja2luZy4KKyAgIEZvciBORF9UQ0hFQ0syOgorICAgICBEZWZpbmUgOiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8cHJvdG9jb2xdIjsKKyAgICAgRGVmaW5lIGEgbGFiZWw6IHRydW5jCisgICAgIFByaW50IHdpdGg6IE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKKyAgIFlvdSBjYW4gdGVzdCB0aGUgY29kZSB2aWE6CisgICAgIHN1ZG8gLi90Y3BkdW1wIC1zIHNuYXBsZW4gWy12XVt2XVsuLi5dIC1pIGxvICMgaW4gYSB0ZXJtaW5hbAorICAgICBzdWRvIHRjcHJlcGxheSAtaSBsbyBzYW1wbGUucGNhcCAgICAgICAgICAgICAjIGluIGFub3RoZXIgdGVybWluYWwKKyAgIFlvdSBzaG91bGQgdHJ5IHNldmVyYWwgdmFsdWVzIGZvciBzbmFwbGVuIHRvIGRvIHZhcmlvdXMgdHJ1bmNhdGlvbi4KKworZSkgRG8gaW52YWxpZCBwYWNrZXQgY2hlY2tzIGluIGNvZGU6IFRoaW5rIHRoYXQgeW91ciBjb2RlIGNhbiByZWNlaXZlIGluIGlucHV0CisgICBub3Qgb25seSBhIHZhbGlkIHBhY2tldCBidXQgYW55IGFyYml0cmFyeSByYW5kb20gc2VxdWVuY2Ugb2Ygb2N0ZXRzIChwYWNrZXQKKyAgIC0gYnVpbHQgbWFsZm9ybWVkIG9yaWdpbmFsbHkgYnkgdGhlIHNlbmRlciBvciBieSBhIGZ1enogdGVzdGVyLAorICAgLSBiZWNhbWUgY29ycnVwdGVkIGluIHRyYW5zaXQpLgorICAgUHJpbnQgd2l0aDogTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwkvKiB0byBwcmludCAiIChpbnZhbGlkKSIgKi8KKworZikgVXNlICdzdHJ1Y3QgdG9rJyBmb3IgaW5kZXhlZCBzdHJpbmdzIGFuZCBwcmludCB0aGVtIHdpdGgKKyAgIHRvazJzdHIoKSBvciBiaXR0b2syc3RyKCkgKGZvciBmbGFncykuCisKK2cpIEF2b2lkIGVtcHR5IGxpbmVzIGluIG91dHB1dCBvZiBwcmludGVycy4KKworaCkgQSBjb21taXQgbWVzc2FnZSBtdXN0IGhhdmU6CisgICBGaXJzdCBsaW5lOiBDYXBpdGFsaXplZCBzaG9ydCBzdW1tYXJ5IGluIHRoZSBpbXBlcmF0aXZlICg3MCBjaGFycyBvciBsZXNzKQorCisgICBCb2R5OiBEZXRhaWxlZCBleHBsYW5hdG9yeSB0ZXh0LCBpZiBuZWNlc3NhcnkuIEZvbGQgaXQgdG8gYXBwcm94aW1hdGVseQorICAgNzIgY2hhcmFjdGVycy4gVGhlcmUgbXVzdCBiZSBhbiBlbXB0eSBsaW5lIHNlcGFyYXRpbmcgdGhlIHN1bW1hcnkgZnJvbQorICAgdGhlIGJvZHkuCisKK2kpIEF2b2lkIG5vbi1BU0NJSSBjaGFyYWN0ZXJzIGluIGNvZGUgYW5kIGNvbW1pdCBtZXNzYWdlcy4KKworaikgVXNlIHRoZSBzdHlsZSBvZiB0aGUgbW9kaWZpZWQgc291cmNlcy4KKworaykgRG9uJ3QgbWl4IGRlY2xhcmF0aW9ucyBhbmQgY29kZQorCitsKSBEb24ndCB1c2UgLy8gZm9yIGNvbW1lbnRzCisgICBOb3QgYWxsIEMgY29tcGlsZXJzIGFjY2VwdCBDKysvQzk5IGNvbW1lbnRzIGJ5IGRlZmF1bHQuCisKK20pIEF2b2lkIHRyYWlsaW5nIHRhYnMvc3BhY2VzCmRpZmYgLS1naXQgYS9DUkVESVRTIGIvQ1JFRElUUwppbmRleCBhMjEzMTFhLi41MjQyOTY3IDEwMDY0NAotLS0gYS9DUkVESVRTCisrKyBiL0NSRURJVFMKQEAgLTIwLDExICsyMCwxMyBAQAogICAgIEFuZHJlYSBCaXR0YXUgICAgICAgICAgICAgICAgIDxhIGRvdCBiaXR0YXUgYXQgY3MgZG90IHVjbCBkb3QgYWMgZG90IHVrPgogICAgIEFuZHJldyBCcm93biAgICAgICAgICAgICAgICAgIDxhdGF0YXQgYXQgYXRhdGRvdCBkb3QgbmV0PgogICAgIEFuZHJldyBDaHVyY2ggICAgICAgICAgICAgICAgIDxhbmRyZXcgYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CisgICAgQW5kcmV3IERhcnF1aSAgICAgICAgICAgICAgICAgPGFuZHJldyBkb3QgZGFycXVpIGF0IGdtYWlsIGRvdCBjb20+CiAgICAgQW5kcmV3IEhpbnR6ICAgICAgICAgICAgICAgICAgPGFkaGludHogYXQgdXNlcnMgZG90IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgQW5kcmV3IE5vcmRpbmcgICAgICAgICAgICAgICAgPGFuZHJldyBhdCBub3JkaW5nIGRvdCBydT4KICAgICBBbmRyZXcgVHJpZGdlbGwgICAgICAgICAgICAgICA8dHJpZGdlIGF0IGxpbnV4Y2FyZSBkb3QgY29tPgogICAgIEFuZHkgSGVmZmVybmFuICAgICAgICAgICAgICAgIDxhaGggYXQganVuaXBlciBkb3QgbmV0PgogICAgIEFudG9uIEJlcm5hbCAgICAgICAgICAgICAgICAgIDxhbnRvbiBhdCBqdW5pcGVyIGRvdCBuZXQ+CisgICAgQW50b25pbiBEw6ljaW1vICAgICAgICAgICAgICAgIDxhbnRvbmluIGRvdCBkZWNpbW8gYXQgZ21haWwgZG90IGNvbT4KICAgICBBcmthZGl1c3ogTWlza2lld2ljeiAgICAgICAgICA8bWlzaWVrIGF0IHBsZCBkb3Qgb3JnIGRvdCBwbD4KICAgICBBcm1hbmRvIEwuIENhcm8gSnIuICAgICAgICAgICA8YWNhcm8gYXQgbWFpbCBkb3QgZWVjaXMgZG90IHVkZWwgZG90IGVkdT4KICAgICBBcm5hbGRvIENhcnZhbGhvIGRlIE1lbG8gICAgICA8YWNtZSBhdCBnaG9zdHByb3RvY29scyBkb3QgbmV0PgpAQCAtMzMsNiArMzUsNyBAQAogICAgIEJlbiBCeWVyICAgICAgICAgICAgICAgICAgICAgIDxidXNoaW5nIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgQmVuIFNtaXRodXJzdCAgICAgICAgICAgICAgICAgPGJlbiBhdCBzY2llbnRpYSBkb3QgZGVtb24gZG90IGNvIGRvdCB1az4KICAgICBCZXJ0IFZlcm1ldWxlbiAgICAgICAgICAgICAgICA8YmVydCBhdCBiaW90IGRvdCBjb20+CisgICAgQmlsbCBQYXJrZXIgICAgICAgICAgICAgICAgICAgPHdwMDI4NTUgYXQgZ21haWwgZG90IGNvbT4KICAgICBCam9lcm4gQS4gWmVlYiAgICAgICAgICAgICAgICA8YnplZWIgYXQgWmFiYmFkb3ogZG90IE5lVD4KICAgICBCcmFtICAgICAgICAgICAgICAgICAgICAgICAgICA8dGNwZHVtcCBhdCBtYWlsIGRvdCB3aXpiaXQgZG90IGJlPgogICAgIEJyZW50IEwuIEJhdGVzICAgICAgICAgICAgICAgIDxibGJhdGVzIGF0IHZpZ3lhbiBkb3QgY29tPgpAQCAtOTUsNiArOTgsNyBAQAogICAgIEphc29uIFIuIFRob3JwZSAgICAgICAgICAgICAgIDx0aG9ycGVqIGF0IG5ldGJzZCBkb3Qgb3JnPgogICAgIEplZmZlcnNvbiBPZ2F0YSAgICAgICAgICAgICAgIDxqb2dhdGEgYXQgbm9kYyBkb3Qgbm9hYSBkb3QgZ292PgogICAgIEplZmZyZXkgSHV0emVsbWFuICAgICAgICAgICAgIDxqaHV0eiBhdCBjbXUgZG90IGVkdT4KKyAgICBKZWFuLVJhcGhhw6tsIEdhZ2xpb25lICAgICAgICAgPGpyIGRvdCBnYWdsaW9uZSBhdCB5YWhvbyBkb3QgZnI+CiAgICAgSmVzcGVyIFBldGVyc29uICAgICAgICAgICAgICAgPGplc3BlciBhdCBlbmRhY2UgZG90IGNvbT4KICAgICBKZXNzZSBHcm9zcyAgICAgICAgICAgICAgICAgICA8amVzc2UgYXQgbmljaXJhIGRvdCBjb20+CiAgICAgSmltIEh1dGNoaW5zICAgICAgICAgICAgICAgICAgPGppbSBhdCBjYSBkb3Qgc2FuZGlhIGRvdCBnb3Y+CkBAIC0xMTksNyArMTIzLDcgQEAKICAgICBMYXJyeSBMaWxlICAgICAgICAgICAgICAgICAgICA8bGlsZSBhdCBzdGRpbyBkb3QgY29tPgogICAgIExlbm5lcnQgQnV5dGVuaGVrICAgICAgICAgICAgIDxidXl0ZW5oIGF0IGdudSBkb3Qgb3JnPgogICAgIExvZ2FuYWRlbiBWZWx2aW5kcm9uICAgICAgICAgIDxsb2dhbiBhdCBlbGFuZHN5cyBkb3QgY29tPgotICAgIExvbmdpbnVzMDAgICAgICAgICAgICAgICAgICAgIDxMb25naW51czAwIGF0IGdtYWlsIGRvdCBjb20+CisgICAgRGFuaWVsIExlZSAgICAgICAgICAgICAgICAgICAgPExvbmdpbnVzMDAgYXQgZ21haWwgZG90IGNvbT4KICAgICBMb3JpcyBEZWdpb2FubmkgICAgICAgICAgICAgICA8bG9yaXMgYXQgbmV0Z3JvdXAtc2VydiBkb3QgcG9saXRvIGRvdCBpdD4KICAgICBMb3ZlIEjDtnJucXVpc3Qtw4VzdHJhbmQgICAgICAgIDxsaGEgYXQgc3RhY2tlbiBkb3Qga3RoIGRvdCBzZT4KICAgICBMdWNhcyBDLiBWaWxsYSBSZWFsICAgICAgICAgICA8bHVjYXN2ciBhdCB1cyBkb3QgaWJtIGRvdCBjb20+CkBAIC0xMzQsNiArMTM4LDcgQEAKICAgICBNYXJrdXMgU2Now7ZwZmxpbiAgICAgICAgICAgICAgPHNjaG9lcGZsaW4gYXQgc291cmNlZm9yZ2UgZG90IG5ldD4KICAgICBNYXJzaGFsbCBSb3NlICAgICAgICAgICAgICAgICA8bXJvc2UgYXQgZGJjIGRvdCBtdHZpZXcgZG90IGNhIGRvdCB1cz4KICAgICBNYXJ0aW4gSHVzZW1hbm4gICAgICAgICAgICAgICA8bWFydGluIGF0IG5ldGJzZCBkb3Qgb3JnPgorICAgIE1hdHRoaWV1IEJvdXRpZXIgICAgICAgICAgICAgIDxib3V0aWVyIGF0IHBwcyBkb3QgdW5pdi1wYXJpcy1kaWRlcm90IGRvdCBmcj4KICAgICBNYXggTGFpZXIgICAgICAgICAgICAgICAgICAgICA8bWF4IGF0IGxvdmUycGFydHkgZG90IG5ldD4KICAgICBNaWNoYWVsIEEuIE1lZmZpZSBJSUkgICAgICAgICA8bWVmZmllIGF0IHNvdXJjZWZvcmdlIGRvdCBuZXQ+CiAgICAgTWljaGFlbCBNYWRvcmUgICAgICAgICAgICAgICAgPG1tYWRvcmUgYXQgdHVyYm9saW51eCBkb3QgY29tPgpkaWZmIC0tZ2l0IGEvSU5TVEFMTC50eHQgYi9JTlNUQUxMLnR4dAppbmRleCBkY2I1MmI4Li5mOTFkMDA0IDEwMDY0NAotLS0gYS9JTlNUQUxMLnR4dAorKysgYi9JTlNUQUxMLnR4dApAQCAtNDksOSArNDksMTAgQEAKIGFkZHJ0b25hbWUuaAktIGFkZHJlc3MgdG8gaG9zdG5hbWUgZGVmaW5pdGlvbnMKIGFoLmgJCS0gSVBTRUMgQXV0aGVudGljYXRpb24gSGVhZGVyIGRlZmluaXRpb25zCiBhcHBsZXRhbGsuaAktIEFwcGxlVGFsayBkZWZpbml0aW9ucworYXNjaWlfc3RyY2FzZWNtcC5jIC0gbG9jYWxlLWluZGVwZW5kZW50IGNhc2UtaW5kZXBlbmRlbnQgc3RyaW5nIGNvbXBhcmlzb24KKwkJcm91dGluZXMKIGF0aW1lLmF3awktIFRDUCBhY2sgYXdrIHNjcmlwdAogYXRtLmgJCS0gQVRNIHRyYWZmaWMgdHlwZSBkZWZpbml0aW9ucwotYXRtdW5pMzEuaAktIEFUTSBRLjI5MzEgZGVmaW5pdGlvbnMKIGJwZl9kdW1wLmMJLSBCUEYgcHJvZ3JhbSBwcmludGluZyByb3V0aW5lcywgaW4gY2FzZSBsaWJwY2FwIGRvZXNuJ3QKIAkJICBoYXZlIHRoZW0KIGNoZGxjLmgJCS0gQ2lzY28gSERMQyBkZWZpbml0aW9ucwpAQCAtMTAwLDEwMCArMTAxLDggQEAKIAkJZG9lc24ndCBoYXZlIGl0CiBwY2FwLW1pc3NpbmcuaAktIGRlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgcG9zc2libHkgbWlzc2luZyBmcm9tIGxpYnBjYXAKIHBwcC5oCQktIFBvaW50IHRvIFBvaW50IFByb3RvY29sIGRlZmluaXRpb25zCi1wcmludC04MDJfMTEuYwktIElFRUUgODAyLjExIHByaW50ZXIgcm91dGluZXMKLXByaW50LWFwMTM5NC5jCS0gQXBwbGUgSVAtb3Zlci1JRUVFIDEzOTQgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtYWguYwktIElQU0VDIEF1dGhlbnRpY2F0aW9uIEhlYWRlciBwcmludGVyIHJvdXRpbmVzCi1wcmludC1hb2R2LmMJLSBBT0RWIHByaW50ZXIgcm91dGluZXMKLXByaW50LWFyY25ldC5jCS0gQVJDTkVUIHByaW50ZXIgcm91dGluZXMKLXByaW50LWFycC5jCS0gQWRkcmVzcyBSZXNvbHV0aW9uIFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LWFzY2lpLmMJLSBBU0NJSSBwYWNrZXQgZHVtcCByb3V0aW5lcwotcHJpbnQtYXRhbGsuYwktIEFwcGxlVGFsayBwcmludGVyIHJvdXRpbmVzCi1wcmludC1hdG0uYwktIEFUTSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1iZWVwLmMJLSBCRUVQIHByaW50ZXIgcm91dGluZXMKLXByaW50LWJncC5jCS0gQm9yZGVyIEdhdGV3YXkgUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtYm9vdHAuYwktIEJPT1RQIGFuZCBJUHY0IERIQ1AgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtYnQuYwktIEJsdWV0b290aCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1jZHAuYwktIENpc2NvIERpc2NvdmVyeSBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1jaGRsYy5jCS0gQ2lzY28gSERMQyBwcmludGVyIHJvdXRpbmVzCi1wcmludC1jaXAuYwktIENsYXNzaWNhbC1JUCBvdmVyIEFUTSByb3V0aW5lcwotcHJpbnQtY25mcC5jCS0gQ2lzY28gTmV0RmxvdyBwcmludGVyIHJvdXRpbmVzCi1wcmludC1kY2NwLmMJLSBEQ0NQIHByaW50ZXIgcm91dGluZXMKLXByaW50LWRlY25ldC5jCS0gREVDbmV0IHByaW50ZXIgcm91dGluZXMKLXByaW50LWRoY3A2LmMJLSBJUHY2IERIQ1AgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtZG9tYWluLmMJLSBEb21haW4gTmFtZSBTeXN0ZW0gcHJpbnRlciByb3V0aW5lcwotcHJpbnQtZHZtcnAuYwktIERpc3RhbmNlIFZlY3RvciBNdWx0aWNhc3QgUm91dGluZyBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1lYXAuYwktIEVBUCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1lbmMuYwktIE9wZW5CU0QgSVBzZWMgZW5jYXBzdWxhdGlvbiBCUEYgbGF5ZXIgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtZWdwLmMJLSBFeHRlcm5hbCBHYXRld2F5IFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LWVzcC5jCS0gSVBTRUMgRW5jYXBzdWxhdGluZyBTZWN1cml0eSBQYXlsb2FkIHByaW50ZXIgcm91dGluZXMKLXByaW50LWV0aGVyLmMJLSBFdGhlcm5ldCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1mZGRpLmMJLSBGaWJlciBEaXN0cmlidXRlZCBEYXRhIEludGVyZmFjZSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1mci5jCS0gRnJhbWUgUmVsYXkgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtZnJhZzYuYwktIElQdjYgZnJhZ21lbnRhdGlvbiBoZWFkZXIgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtZ3JlLmMJLSBHZW5lcmljIFJvdXRpbmcgRW5jYXBzdWxhdGlvbiBwcmludGVyIHJvdXRpbmVzCi1wcmludC1oc3JwLmMJLSBDaXNjbyBIb3QgU3RhbmRieSBSb3V0ZXIgUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtaWNtcC5jCS0gSW50ZXJuZXQgQ29udHJvbCBNZXNzYWdlIFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LWljbXA2LmMJLSBJUHY2IEludGVybmV0IENvbnRyb2wgTWVzc2FnZSBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1pZ21wLmMJLSBJbnRlcm5ldCBHcm91cCBNYW5hZ2VtZW50IFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LWlncnAuYwktIEludGVyaW9yIEdhdGV3YXkgUm91dGluZyBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1pcC5jCS0gSVAgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtaXA2LmMJLSBJUHY2IHByaW50ZXIgcm91dGluZXMKLXByaW50LWlwNm9wdHMuYwktIElQdjYgaGVhZGVyIG9wdGlvbiBwcmludGVyIHJvdXRpbmVzCi1wcmludC1pcGNvbXAuYwktIElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtaXB4LmMJLSBJUFggcHJpbnRlciByb3V0aW5lcwotcHJpbnQtaXNha21wLmMJLSBJbnRlcm5ldCBTZWN1cml0eSBBc3NvY2lhdGlvbiBhbmQgS2V5IE1hbmFnZW1lbnQgUHJvdG9jb2wKLXByaW50LWlzb2NsbnMuYwktIElTTyBDTE5TLCBFU0lTLCBhbmQgSVNJUyBwcmludGVyIHJvdXRpbmVzCi1wcmludC1rcmIuYwktIEtlcmJlcm9zIHByaW50ZXIgcm91dGluZXMKLXByaW50LWwydHAuYwktIExheWVyIFR3byBUdW5uZWxpbmcgUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtbGFuZS5jCS0gQVRNIExBTkUgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtbGxjLmMJLSBJRUVFIDgwMi4yIExMQyBwcmludGVyIHJvdXRpbmVzCi1wcmludC1sc3BwaW5nLmMJLSBMU1BQSU5HIHByaW50ZXIgcm91dGluZXMKLXByaW50LWx3cmVzLmMJLSBMaWdodHdlaWdodCBSZXNvbHZlciBwcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1tb2JpbGUuYwktIElQdjQgbW9iaWxpdHkgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtbW9iaWxpdHkuYyAtIElQdjYgbW9iaWxpdHkgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtbXBscy5jCS0gTXVsdGktUHJvdG9jb2wgTGFiZWwgU3dpdGNoaW5nIHByaW50ZXIgcm91dGluZXMKLXByaW50LW1zZHAuYwktIE11bHRpY2FzdCBTb3VyY2UgRGlzY292ZXJ5IFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LW5mcy5jCS0gTmV0d29yayBGaWxlIFN5c3RlbSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1udHAuYwktIE5ldHdvcmsgVGltZSBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1udWxsLmMJLSBCU0QgbG9vcGJhY2sgZGV2aWNlIHByaW50ZXIgcm91dGluZXMKLXByaW50LW9zcGYuYwktIE9wZW4gU2hvcnRlc3QgUGF0aCBGaXJzdCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1vc3BmNi5jCS0gSVB2NiBPcGVuIFNob3J0ZXN0IFBhdGggRmlyc3QgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtcGZsb2cuYwktIE9wZW5CU0QgcGFja2V0IGZpbHRlciBsb2cgZmlsZSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1wZ20uYwktIFByYWdtYXRpYyBHZW5lcmFsIE11bHRpY2FzdCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1waW0uYwktIFByb3RvY29sIEluZGVwZW5kZW50IE11bHRpY2FzdCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1wcHAuYwktIFBvaW50IHRvIFBvaW50IFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXBwcG9lLmMJLSBQUFAtb3Zlci1FdGhlcm5ldCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1wcHRwLmMJLSBQb2ludC10by1Qb2ludCBUdW5uZWxsaW5nIFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXJhZGl1cy5jCS0gUmFkaXVzIHByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXJhdy5jCS0gUmF3IElQIHByaW50ZXIgcm91dGluZXMKLXByaW50LXJpcC5jCS0gUm91dGluZyBJbmZvcm1hdGlvbiBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1yaXBuZy5jCS0gSVB2NiBSb3V0aW5nIEluZm9ybWF0aW9uIFByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXJyY3AuYwktIFJlYWx0ZWsgUmVtb3RlIENvbnRyb2wgUHJvdG9jb2wgcm91dGluZXMKLXByaW50LXJzdnAuYwktIFJlc291cmNlIHJlU2VyVmF0aW9uIFByb3RvY29sIChSU1ZQKSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1ydDYuYwktIElQdjYgcm91dGluZyBoZWFkZXIgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtcnguYwktIEFGUyBSWCBwcmludGVyIHJvdXRpbmVzCi1wcmludC1zY3RwLmMJLSBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtc2lwLmMJLSBTSVAgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtc2wuYwktIENvbXByZXNzZWQgU2VyaWFsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtc2xsLmMJLSBMaW51eCAiY29va2VkIiBjYXB0dXJlIHByaW50ZXIgcm91dGluZXMKLXByaW50LXNsb3cuYwktIElFRUUgInNsb3cgcHJvdG9jb2wiICg4MDIuM2FkKSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1zbWIuYwktIFNNQi9DSUZTIHByaW50ZXIgcm91dGluZXMKLXByaW50LXNubXAuYwktIFNpbXBsZSBOZXR3b3JrIE1hbmFnZW1lbnQgUHJvdG9jb2wgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtc3RwLmMJLSBJRUVFIDgwMi4xZCBzcGFubmluZyB0cmVlIHByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXN1bmF0bS5jCS0gU3VuQVRNIERMUEkgY2FwdHVyZSBwcmludGVyIHJvdXRpbmVzCi1wcmludC1zdW5ycGMuYwktIFN1biBSZW1vdGUgUHJvY2VkdXJlIENhbGwgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtc3ltYW50ZWMuYyAtIFN5bWFudGVjIEVudGVycHJpc2UgRmlyZXdhbGwgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtdGNwLmMJLSBUQ1AgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtdGVsbmV0LmMJLSBUZWxuZXQgb3B0aW9uIHByaW50ZXIgcm91dGluZXMKLXByaW50LXRmdHAuYwktIFRyaXZpYWwgRmlsZSBUcmFuc2ZlciBQcm90b2NvbCBwcmludGVyIHJvdXRpbmVzCi1wcmludC10aW1lZC5jCS0gQlNEIHRpbWUgZGFlbW9uIHByb3RvY29sIHByaW50ZXIgcm91dGluZXMKLXByaW50LXRva2VuLmMJLSBUb2tlbiBSaW5nIHByaW50ZXIgcm91dGluZXMKLXByaW50LXVkcC5jCS0gVURQIHByaW50ZXIgcm91dGluZXMKLXByaW50LXVzYi5jCS0gVVNCIHByaW50ZXIgcm91dGluZXMKLXByaW50LXZqYy5jCS0gUFBQIFZhbiBKYWNvYnNvbiBjb21wcmVzc2lvbiAoUkZDMTE0NCkgcHJpbnRlciByb3V0aW5lcwotcHJpbnQtdnJycC5jCS0gVmlydHVhbCBSb3V0ZXIgUmVkdW5kYW5jeSBQcm90b2NvbAotcHJpbnQtd2IuYwktIFdoaXRlIEJvYXJkIHByaW50ZXIgcm91dGluZXMKLXByaW50LXplcGh5ci5jCS0gWmVwaHlyIHByaW50ZXIgcm91dGluZXMKK3ByaW50LmMJCS0gVG9wLWxldmVsIHJvdXRpbmVzIGZvciBwcm90b2NvbCBwcmludGluZworcHJpbnQtKi5jCS0gVGhlIG5ldGRpc3NlY3QgcHJpbnRlcnMKIHJwY19hdXRoLmgJLSBkZWZpbml0aW9ucyBmb3IgT05DIFJQQyBhdXRoZW50aWNhdGlvbgogcnBjX21zZy5oCS0gZGVmaW5pdGlvbnMgZm9yIE9OQyBSUEMgbWVzc2FnZXMKIHNlbmQtYWNrLmF3awktIHVuaWRpcmVjdGlvbmFsIHRjcCBzZW5kL2FjayBhd2sgc2NyaXB0CkBAIC0yMDMsMTEgKzExMiwxMSBAQAogc21iLmgJCS0gU01CL0NJRlMgZGVmaW5pdGlvbnMKIHNtYnV0aWwuYwktIFNNQi9DSUZTIHV0aWxpdHkgcm91dGluZXMKIHN0aW1lLmF3awktIFRDUCBzZW5kIGF3ayBzY3JpcHQKLXN0cmNhc2VjbXAuYwktIG1pc3Npbmcgcm91dGluZQogdGNwLmgJCS0gVENQIGRlZmluaXRpb25zCiB0Y3BkdW1wLjEJLSBtYW51YWwgZW50cnkKIHRjcGR1bXAuYwktIG1haW4gcHJvZ3JhbQordGltZXZhbC1vcGVyYXRpb25zLmggLSB0aW1ldmFsIG9wZXJhdGlvbnMgbWFjcm9zCiB1ZHAuaAkJLSBVRFAgZGVmaW5pdGlvbnMKLXV0aWwuYwkJLSB1dGlsaXR5IHJvdXRpbmVzCit1dGlsLXByaW50LmMJLSB1dGlsaXR5IHJvdXRpbmVzIGZvciBwcm90b2NvbCBwcmludGVycwogdmZwcmludGYuYwktIGVtdWxhdGlvbiByb3V0aW5lCiB3aW4zMgkJLSBoZWFkZXJzIGFuZCByb3V0aW5lcyBmb3IgYnVpbGRpbmcgb24gV2luMzIgc3lzdGVtcwpkaWZmIC0tZ2l0IGEvTWFrZWZpbGUuaW4gYi9NYWtlZmlsZS5pbgppbmRleCBhMGRjNTU5Li5jMThkNWVkIDEwMDY0NAotLS0gYS9NYWtlZmlsZS5pbgorKysgYi9NYWtlZmlsZS5pbgpAQCAtNzQsNyArNzQsOSBAQAogCiBMSUJORVRESVNTRUNUX1NSQz1cCiAJYWRkcnRvbmFtZS5jIFwKKwlhZGRydG9zdHIuYyBcCiAJYWYuYyBcCisJYXNjaWlfc3RyY2FzZWNtcC5jIFwKIAljaGVja3N1bS5jIFwKIAljcGFjay5jIFwKIAlnbXBscy5jIFwKQEAgLTg2LDYgKzg4LDcgQEAKIAlubHBpZC5jIFwKIAlvdWkuYyBcCiAJcGFyc2VuZnNmaC5jIFwKKwlwcmludC5jIFwKIAlwcmludC04MDJfMTEuYyBcCiAJcHJpbnQtODAyXzE1XzQuYyBcCiAJcHJpbnQtYWguYyBcCkBAIC05OCw2ICsxMDEsNyBAQAogCXByaW50LWFzY2lpLmMgXAogCXByaW50LWF0YWxrLmMgXAogCXByaW50LWF0bS5jIFwKKwlwcmludC1iYWJlbC5jIFwKIAlwcmludC1iZWVwLmMgXAogCXByaW50LWJmZC5jIFwKIAlwcmludC1iZ3AuYyBcCkBAIC0xMTIsNiArMTE2LDcgQEAKIAlwcmludC1jbmZwLmMgXAogCXByaW50LWRjY3AuYyBcCiAJcHJpbnQtZGVjbmV0LmMgXAorCXByaW50LWRoY3A2LmMgXAogCXByaW50LWRvbWFpbi5jIFwKIAlwcmludC1kdHAuYyBcCiAJcHJpbnQtZHZtcnAuYyBcCkBAIC0xMjQsMTcgKzEyOSwyMSBAQAogCXByaW50LWZkZGkuYyBcCiAJcHJpbnQtZm9yY2VzLmMgXAogCXByaW50LWZyLmMgXAorCXByaW50LWZyYWc2LmMgXAogCXByaW50LWZ0cC5jIFwKIAlwcmludC1nZW5ldmUuYyBcCiAJcHJpbnQtZ2VvbmV0LmMgXAogCXByaW50LWdyZS5jIFwKKwlwcmludC1obmNwLmMgXAogCXByaW50LWhzcnAuYyBcCiAJcHJpbnQtaHR0cC5jIFwKIAlwcmludC1pY21wLmMgXAorCXByaW50LWljbXA2LmMgXAogCXByaW50LWlnbXAuYyBcCiAJcHJpbnQtaWdycC5jIFwKIAlwcmludC1pcC5jIFwKIAlwcmludC1pcDYuYyBcCisJcHJpbnQtaXA2b3B0cy5jIFwKIAlwcmludC1pcGNvbXAuYyBcCiAJcHJpbnQtaXBmYy5jIFwKIAlwcmludC1pcG5ldC5jIFwKQEAgLTE0Niw2ICsxNTUsNyBAQAogCXByaW50LWwydHAuYyBcCiAJcHJpbnQtbGFuZS5jIFwKIAlwcmludC1sZHAuYyBcCisJcHJpbnQtbGlzcC5jIFwKIAlwcmludC1sbGMuYyBcCiAJcHJpbnQtbGxkcC5jIFwKIAlwcmludC1sbXAuYyBcCkBAIC0xNTQsNyArMTY0LDkgQEAKIAlwcmludC1sd2FwcC5jIFwKIAlwcmludC1sd3Jlcy5jIFwKIAlwcmludC1tM3VhLmMgXAorCXByaW50LW1lZHNhLmMgXAogCXByaW50LW1vYmlsZS5jIFwKKwlwcmludC1tb2JpbGl0eS5jIFwKIAlwcmludC1tcGNwLmMgXAogCXByaW50LW1wbHMuYyBcCiAJcHJpbnQtbXB0Y3AuYyBcCkBAIC0xNjIsMTIgKzE3NCwxNCBAQAogCXByaW50LW1zbmxiLmMgXAogCXByaW50LW5mbG9nLmMgXAogCXByaW50LW5mcy5jIFwKKwlwcmludC1uc2guYyBcCiAJcHJpbnQtbnRwLmMgXAogCXByaW50LW51bGwuYyBcCiAJcHJpbnQtb2xzci5jIFwKIAlwcmludC1vcGVuZmxvdy0xLjAuYyBcCiAJcHJpbnQtb3BlbmZsb3cuYyBcCiAJcHJpbnQtb3NwZi5jIFwKKwlwcmludC1vc3BmNi5jIFwKIAlwcmludC1vdHYuYyBcCiAJcHJpbnQtcGdtLmMgXAogCXByaW50LXBpbS5jIFwKQEAgLTE3OCwxMCArMTkyLDEzIEBACiAJcHJpbnQtcHB0cC5jIFwKIAlwcmludC1yYWRpdXMuYyBcCiAJcHJpbnQtcmF3LmMgXAorCXByaW50LXJlc3AuYyBcCiAJcHJpbnQtcmlwLmMgXAorCXByaW50LXJpcG5nLmMgXAogCXByaW50LXJwa2ktcnRyLmMgXAogCXByaW50LXJyY3AuYyBcCiAJcHJpbnQtcnN2cC5jIFwKKwlwcmludC1ydDYuYyBcCiAJcHJpbnQtcnRzcC5jIFwKIAlwcmludC1yeC5jIFwKIAlwcmludC1zY3RwLmMgXApAQCAtMjExLDExICsyMjgsMTQgQEAKIAlwcmludC12cnJwLmMgXAogCXByaW50LXZ0cC5jIFwKIAlwcmludC12eGxhbi5jIFwKKwlwcmludC12eGxhbi1ncGUuYyBcCiAJcHJpbnQtd2IuYyBcCiAJcHJpbnQtemVwaHlyLmMgXAogCXByaW50LXplcm9tcS5jIFwKKwluZXRkaXNzZWN0LmMgXAogCXNpZ25hdHVyZS5jIFwKLQl1dGlsLmMKKwlzdHJ0b2FkZHIuYyBcCisJdXRpbC1wcmludC5jCiAKIExPQ0FMU1JDID0gQExPQ0FMU1JDQAogR0VOU1JDID0gdmVyc2lvbi5jCkBAIC0yMzIsMTEgKzI1MiwxMiBAQAogT0JKID0JJChDU1JDOi5jPS5vKSAkKEdFTlNSQzouYz0ubykgJChMSUJORVRESVNTRUNUX09CSikKIEhEUiA9IFwKIAlhZGRydG9uYW1lLmggXAorCWFkZHJ0b3N0ci5oIFwKIAlhZi5oIFwKIAlhaC5oIFwKIAlhcHBsZXRhbGsuaCBcCisJYXNjaWlfc3RyY2FzZWNtcC5oIFwKIAlhdG0uaCBcCi0JYXRtdW5pMzEuaCBcCiAJY2hkbGMuaCBcCiAJY3BhY2suaCBcCiAJZXRoZXIuaCBcCkBAIC0yNjQsNiArMjg1LDcgQEAKIAlvdWkuaCBcCiAJcGNhcC1taXNzaW5nLmggXAogCXBwcC5oIFwKKwlwcmludC5oIFwKIAlycGNfYXV0aC5oIFwKIAlycGNfbXNnLmggXAogCXJwbC5oIFwKQEAgLTI3MSwxNCArMjkzLDE1IEBACiAJc2lnbmF0dXJlLmggXAogCXNsY29tcHJlc3MuaCBcCiAJc21iLmggXAorCXN0cnRvYWRkci5oIFwKIAl0Y3AuaCBcCi0JdGNwZHVtcC1zdGRpbmMuaCBcCisJbmV0ZGlzc2VjdC1zdGRpbmMuaCBcCisJdGltZXZhbC1vcGVyYXRpb25zLmggXAogCXVkcC5oCiAKIFRBR0hEUiA9IFwKIAkvdXNyL2luY2x1ZGUvYXJwYS90ZnRwLmggXAogCS91c3IvaW5jbHVkZS9uZXQvaWZfYXJwLmggXAotCS91c3IvaW5jbHVkZS9uZXQvc2xpcC5oIFwKIAkvdXNyL2luY2x1ZGUvbmV0aW5ldC9pZl9ldGhlci5oIFwKIAkvdXNyL2luY2x1ZGUvbmV0aW5ldC9pbi5oIFwKIAkvdXNyL2luY2x1ZGUvbmV0aW5ldC9pcF9pY21wLmggXApAQCAtMjkyLDExICszMTUsMTQgQEAKIAogRVhUUkFfRElTVCA9IFwKIAlDSEFOR0VTIFwKKwlDT05UUklCVVRJTkcgXAogCUNSRURJVFMgXAogCUlOU1RBTEwudHh0IFwKIAlMSUNFTlNFIFwKIAlNYWtlZmlsZS5pbiBcCiAJTWFrZWZpbGUtZGV2ZWwtYWRkcyBcCisJUExBVEZPUk1TIFwKKwlSRUFETUUgXAogCVJFQURNRS5tZCBcCiAJUmVhZG1lLldpbjMyIFwKIAlWRVJTSU9OIFwKQEAgLTMxNCwxNCArMzQwLDkgQEAKIAlsYmwvb3Mtc3Vub3M0LmggXAogCWxibC9vcy11bHRyaXg0LmggXAogCW1ha2VtaWIgXAotCW1pc3NpbmcvYWRkcmluZm8uaCBcCiAJbWlzc2luZy9kbG5hbWVzLmMgXAogCW1pc3NpbmcvZGF0YWxpbmtzLmMgXAotCW1pc3NpbmcvZ2V0bmFtZWluZm8uYyBcCiAJbWlzc2luZy9nZXRvcHRfbG9uZy5jIFwKLQltaXNzaW5nL2luZXRfYXRvbi5jIFwKLQltaXNzaW5nL2luZXRfbnRvcC5jIFwKLQltaXNzaW5nL2luZXRfcHRvbi5jIFwKIAltaXNzaW5nL3NucHJpbnRmLmMgXAogCW1pc3Npbmcvc3RyZHVwLmMgXAogCW1pc3Npbmcvc3RybGNhdC5jIFwKQEAgLTMzMCwyNyArMzUxLDE5IEBACiAJbWtkZXAgXAogCXBhY2tldGRhdC5hd2sgXAogCXBjYXBfZHVtcF9mdGVsbC5jIFwKLQlwcmludC1iYWJlbC5jIFwKLQlwcmludC1kaGNwNi5jIFwKLQlwcmludC1mcmFnNi5jIFwKLQlwcmludC1pY21wNi5jIFwKLQlwcmludC1pcDZvcHRzLmMgXAotCXByaW50LW1vYmlsaXR5LmMgXAotCXByaW50LW9zcGY2LmMgXAogCXByaW50LXBmbG9nLmMgXAotCXByaW50LXJpcG5nLmMgXAotCXByaW50LXJ0Ni5jIFwKIAlwcmludC1zbWIuYyBcCiAJc2VuZC1hY2suYXdrIFwKIAlzbWJ1dGlsLmMgXAogCXN0aW1lLmF3ayBcCi0Jc3RyY2FzZWNtcC5jIFwKIAl0Y3BkdW1wLjEuaW4gXAogCXZmcHJpbnRmLmMgXAotCXdpbjMyL0luY2x1ZGUvdzMyX2Z6cy5oIFwKIAl3aW4zMi9wcmovR05VbWFrZWZpbGUgXAogCXdpbjMyL3Byai9XaW5EdW1wLmRzcCBcCi0Jd2luMzIvcHJqL1dpbkR1bXAuZHN3CisJd2luMzIvcHJqL1dpbkR1bXAuZHN3IFwKKwl3aW4zMi9wcmovV2luRHVtcC5zbG4gXAorCXdpbjMyL3Byai9XaW5EdW1wLnZjcHJvaiBcCisJd2luMzIvc3JjL2V0aGVyX250b2hvc3QuYwogCiBURVNUX0RJU1Q9IGBmaW5kIHRlc3RzIFwoIC1uYW1lICdESUZGJyAtcHJ1bmUgXCkgLW8gXCggLW5hbWUgTkVXIC1wcnVuZSBcKSAtbyAtdHlwZSBmIFwhIC1uYW1lICcuKicgXCEgLW5hbWUgJyp+JyAtcHJpbnRgCiAKQEAgLTM2OSwxNiArMzgyLDggQEAKIAkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvbWlzc2luZy9kYXRhbGlua3MuYwogZGxuYW1lcy5vOiAkKHNyY2RpcikvbWlzc2luZy9kbG5hbWVzLmMKIAkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvbWlzc2luZy9kbG5hbWVzLmMKLWdldG5hbWVpbmZvLm86ICQoc3JjZGlyKS9taXNzaW5nL2dldG5hbWVpbmZvLmMKLQkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvbWlzc2luZy9nZXRuYW1laW5mby5jCiBnZXRvcHRfbG9uZy5vOiAkKHNyY2RpcikvbWlzc2luZy9nZXRvcHRfbG9uZy5jCiAJJChDQykgJChGVUxMX0NGTEFHUykgLW8gJEAgLWMgJChzcmNkaXIpL21pc3NpbmcvZ2V0b3B0X2xvbmcuYwotaW5ldF9wdG9uLm86ICQoc3JjZGlyKS9taXNzaW5nL2luZXRfcHRvbi5jCi0JJChDQykgJChGVUxMX0NGTEFHUykgLW8gJEAgLWMgJChzcmNkaXIpL21pc3NpbmcvaW5ldF9wdG9uLmMKLWluZXRfbnRvcC5vOiAkKHNyY2RpcikvbWlzc2luZy9pbmV0X250b3AuYwotCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1vICRAIC1jICQoc3JjZGlyKS9taXNzaW5nL2luZXRfbnRvcC5jCi1pbmV0X2F0b24ubzogJChzcmNkaXIpL21pc3NpbmcvaW5ldF9hdG9uLmMKLQkkKENDKSAkKEZVTExfQ0ZMQUdTKSAtbyAkQCAtYyAkKHNyY2RpcikvbWlzc2luZy9pbmV0X2F0b24uYwogc25wcmludGYubzogJChzcmNkaXIpL21pc3Npbmcvc25wcmludGYuYwogCSQoQ0MpICQoRlVMTF9DRkxBR1MpIC1vICRAIC1jICQoc3JjZGlyKS9taXNzaW5nL3NucHJpbnRmLmMKIHN0cmR1cC5vOiAkKHNyY2RpcikvbWlzc2luZy9zdHJkdXAuYwpAQCAtNDM0LDYgKzQzOSw5IEBACiBjaGVjazogdGNwZHVtcAogCShjZCB0ZXN0cyAmJiAuL1RFU1RydW4uc2gpCiAKK2V4dGFnczogJChUQUdGSUxFUykKKwljdGFncyAkKFRBR0ZJTEVTKQorCiB0YWdzOiAkKFRBR0ZJTEVTKQogCWN0YWdzIC13dGQgJChUQUdGSUxFUykKIApkaWZmIC0tZ2l0IGEvUExBVEZPUk1TIGIvUExBVEZPUk1TCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmVjODVlNTkKLS0tIC9kZXYvbnVsbAorKysgYi9QTEFURk9STVMKQEAgLTAsMCArMSw5IEBACis9PSBUZXN0ZWQgcGxhdGZvcm1zID09CitOZXRCU0QgCQkgIDUuMS9pMzg2CShtY3IgLSAyMDEyLzQvMSkKK0RlYmlhbiBMaW51eCAoc3F1ZWV6ZS9pMzg2KQkobWNyIC0gMjAxMi80LzEpCisKKy0tLQorUmVkSGF0IExpbnV4IAk2LjEvaTM4NgkoYXNzYXIpCitGcmVlQlNECQkyLjIuOC9pMzg2CShpdG9qdW4pCisKKwpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCm5ldyBmaWxlIG1vZGUgMTIwMDAwCmluZGV4IDAwMDAwMDAuLjQyMDYxYzAKLS0tIC9kZXYvbnVsbAorKysgYi9SRUFETUUKQEAgLTAsMCArMSBAQAorUkVBRE1FLm1kClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQpkaWZmIC0tZ2l0IGEvUkVBRE1FLnZlcnNpb24gYi9SRUFETUUudmVyc2lvbgppbmRleCA0YzVmMGMxLi4xZTMyMjliIDEwMDY0NAotLS0gYS9SRUFETUUudmVyc2lvbgorKysgYi9SRUFETUUudmVyc2lvbgpAQCAtMSwzICsxLDMgQEAKLVVSTDogaHR0cDovL3d3dy50Y3BkdW1wLm9yZy9yZWxlYXNlL3RjcGR1bXAtNC43LjQudGFyLmd6Ci1WZXJzaW9uOiA0LjcuNAorVVJMOiBodHRwOi8vd3d3LnRjcGR1bXAub3JnL3JlbGVhc2UvdGNwZHVtcC00LjkuMC50YXIuZ3oKK1ZlcnNpb246IDQuOS4wCiBCdWdDb21wb25lbnQ6IDExOTQ1MgpkaWZmIC0tZ2l0IGEvVkVSU0lPTiBiL1ZFUlNJT04KaW5kZXggYjQ4YjJkZS4uNmVkNzc3NiAxMDA2NDQKLS0tIGEvVkVSU0lPTgorKysgYi9WRVJTSU9OCkBAIC0xICsxIEBACi00LjcuNAorNC45LjAKZGlmZiAtLWdpdCBhL2FjbG9jYWwubTQgYi9hY2xvY2FsLm00CmluZGV4IDI4NTAwMGQuLmVhMGY2MjQgMTAwNjQ0Ci0tLSBhL2FjbG9jYWwubTQKKysrIGIvYWNsb2NhbC5tNApAQCAtMjE5LDYgKzIxOSwzNiBAQAogXSkKIAogZG5sCitkbmwgQ2hlY2sgd2hldGhlciwgaWYgeW91IHBhc3MgYW4gdW5rbm93biB3YXJuaW5nIG9wdGlvbiB0byB0aGUKK2RubCBjb21waWxlciwgaXQgZmFpbHMgb3IganVzdCBwcmludHMgYSB3YXJuaW5nIG1lc3NhZ2UgYW5kIHN1Y2NlZWRzLgorZG5sIFNldCBhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciB0byB0aGUgYXBwcm9wcmlhdGUgZmxhZworZG5sIHRvIGZvcmNlIGFuIGVycm9yIGlmIGl0IHdvdWxkIG90aGVyd2lzZSBqdXN0IHByaW50IGEgd2FybmluZyBtZXNzYWdlCitkbmwgYW5kIHN1Y2NlZWQuCitkbmwKK0FDX0RFRlVOKEFDX0xCTF9DSEVDS19VTktOT1dOX1dBUk5JTkdfT1BUSU9OX0VSUk9SLAorICAgIFsKKwlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGNvbXBpbGVyIGZhaWxzIHdoZW4gZ2l2ZW4gYW4gdW5rbm93biB3YXJuaW5nIG9wdGlvbl0pCisJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJQ0ZMQUdTPSIkQ0ZMQUdTIC1XeHl6enktdGhpcy13aWxsLW5ldmVyLXN1Y2NlZWQteHl6enkiCisJQUNfVFJZX0NPTVBJTEUoCisJICAgIFtdLAorCSAgICBbcmV0dXJuIDBdLAorCSAgICBbCisJCUFDX01TR19SRVNVTFQoW25vXSkKKwkJIworCQkjIFdlJ3JlIGFzc3VtaW5nIHRoaXMgaXMgY2xhbmcsIHdoZXJlCisJCSMgLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uIGlzIHRoZSBhcHByb3ByaWF0ZQorCQkjIG9wdGlvbiB0byBmb3JjZSB0aGUgY29tcGlsZXIgdG8gZmFpbC4KKwkJIworCQlhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvcj0iLVdlcnJvcj11bmtub3duLXdhcm5pbmctb3B0aW9uIgorCSAgICBdLAorCSAgICBbCisJCUFDX01TR19SRVNVTFQoW3llc10pCisJICAgIF0pCisJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisgICAgXSkKKworZG5sCiBkbmwgQ2hlY2sgd2hldGhlciB0aGUgY29tcGlsZXIgb3B0aW9uIHNwZWNpZmllZCBhcyB0aGUgc2Vjb25kIGFyZ3VtZW50CiBkbmwgaXMgc3VwcG9ydGVkIGJ5IHRoZSBjb21waWxlciBhbmQsIGlmIHNvLCBhZGQgaXQgdG8gdGhlIG1hY3JvCiBkbmwgc3BlY2lmaWVkIGFzIHRoZSBmaXJzdCBhcmd1bWVudApAQCAtMjI3LDcgKzI1NywxOCBAQAogICAgIFsKIAlBQ19NU0dfQ0hFQ0tJTkcoW3doZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAkMiBvcHRpb25dKQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCUNGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzICQyIgorCWlmIGV4cHIgIngkMiIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgJDIiCisJZWxpZiBleHByICJ4JDIiIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAkMiIKKwllbGlmIGV4cHIgIngkMiIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yICQyIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICQyIgorCWZpCiAJQUNfVFJZX0NPTVBJTEUoCiAJICAgIFtdLAogCSAgICBbcmV0dXJuIDBdLApAQCAtOTQyLDExICs5ODMsMTggQEAKIAkgICAgIyBTa2lwIGFsbCB0aGUgd2FybmluZyBvcHRpb24gc3R1ZmYgb24gc29tZSBjb21waWxlcnMuCiAJICAgICMKIAkgICAgaWYgdGVzdCAiJGFjX2xibF9jY19kb250X3RyeV9nY2NfZGFzaFciICE9IHllczsgdGhlbgorCQkgICAgQUNfTEJMX0NIRUNLX1VOS05PV05fV0FSTklOR19PUFRJT05fRVJST1IoKQogCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdhbGwpCiAJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV21pc3NpbmctcHJvdG90eXBlcykKIAkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1Xc3RyaWN0LXByb3RvdHlwZXMpCiAJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3dyaXRlLXN0cmluZ3MpCiAJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3BvaW50ZXItYXJpdGgpCisJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV2Nhc3QtcXVhbCkKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1Xc2hhZG93KQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQpCisJCSAgICBBQ19MQkxfQ0hFQ0tfQ09NUElMRVJfT1BUKCQxLCAtV3BlZGFudGljKQorCQkgICAgQUNfTEJMX0NIRUNLX0NPTVBJTEVSX09QVCgkMSwgLVdvbGQtc3R5bGUtZGVmaW5pdGlvbikKKwkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCkKIAkJICAgIEFDX0xCTF9DSEVDS19DT01QSUxFUl9PUFQoJDEsIC1XKQogCSAgICBmaQogCSAgICBBQ19MQkxfQ0hFQ0tfREVQRU5ERU5DWV9HRU5FUkFUSU9OX09QVCgpCkBAIC0xMTE0LDEzMSArMTE2Miw2IEBACiBkbmwgU1VDSCBEQU1BR0UuCiAKIGRubAotZG5sIENoZWNrcyB0byBzZWUgaWYgQUZfSU5FVDYgaXMgZGVmaW5lZAotQUNfREVGVU4oQUNfQ0hFQ0tfQUZfSU5FVDYsIFsKLQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIEFGX0lORVQ2KQotCUFDX0NBQ0hFX1ZBTCgkMSwKLQlBQ19UUllfQ09NUElMRShbCi0jCQlpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAotCQlbaW50IGEgPSBBRl9JTkVUNl0sCi0JCSQxPXllcywKLQkJJDE9bm8pKQotCUFDX01TR19SRVNVTFQoJCQxKQotCQlpZiB0ZXN0ICQkMSA9IHllcyA7IHRoZW4KLQkJCUFDX0RFRklORShIQVZFX0FGX0lORVQ2KQotCWZpCi1dKQotCi1kbmwKLWRubCBDaGVja3MgdG8gc2VlIGlmIHRoZSBzb2NrYWRkciBzdHJ1Y3QgaGFzIHRoZSA0LjQgQlNEIHNhX2xlbiBtZW1iZXIKLWRubCBib3Jyb3dlZCBmcm9tIExCTCBsaWJwY2FwCi1BQ19ERUZVTihBQ19DSEVDS19TQV9MRU4sIFsKLQlBQ19NU0dfQ0hFQ0tJTkcoaWYgc29ja2FkZHIgc3RydWN0IGhhcyBzYV9sZW4gbWVtYmVyKQotCUFDX0NBQ0hFX1ZBTCgkMSwKLQlBQ19UUllfQ09NUElMRShbCi0jCQlpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD5dLAotCQlbdV9pbnQgaSA9IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkciAqKTApLT5zYV9sZW4pXSwKLQkJJDE9eWVzLAotCQkkMT1ubykpCi0JQUNfTVNHX1JFU1VMVCgkJDEpCi0JCWlmIHRlc3QgJCQxID0geWVzIDsgdGhlbgotCQkJQUNfREVGSU5FKEhBVkVfU09DS0FERFJfU0FfTEVOKQotCWZpCi1dKQotCi1kbmwKLWRubCBDaGVja3MgZm9yIGFkZHJpbmZvIHN0cnVjdHVyZQotQUNfREVGVU4oQUNfU1RSVUNUX0FERFJJTkZPLCBbCi0JQUNfTVNHX0NIRUNLSU5HKGZvciBhZGRyaW5mbykKLQlBQ19DQUNIRV9WQUwoJDEsCi0JQUNfVFJZX0NPTVBJTEUoWwotIwkJaW5jbHVkZSA8bmV0ZGIuaD5dLAotCQlbc3RydWN0IGFkZHJpbmZvIGFdLAotCQkkMT15ZXMsCi0JCSQxPW5vKSkKLQlBQ19NU0dfUkVTVUxUKCQkMSkKLQlpZiB0ZXN0ICQkMSA9IHllczsgdGhlbgotCQlBQ19ERUZJTkUoSEFWRV9BRERSSU5GTywgMSwKLQkJICAgIFtkZWZpbmUgaWYgeW91IGhhdmUgdGhlIGFkZHJpbmZvIGZ1bmN0aW9uXSkKLQllbHNlCi0JCUFDX0RFRklORShORUVEX0FERFJJTkZPX0gsIDEsCi0JCSAgICBbZGVmaW5lIGlmIHlvdSBuZWVkIHRvIGluY2x1ZGUgbWlzc2luZy9hZGRyaW5mby5oXSkKLQlmaQotXSkKLQotZG5sCi1kbmwgQ2hlY2tzIGZvciBOSV9NQVhTRVJWCi1BQ19ERUZVTihBQ19OSV9NQVhTRVJWLCBbCi0JQUNfTVNHX0NIRUNLSU5HKGZvciBOSV9NQVhTRVJWKQotCUFDX0NBQ0hFX1ZBTCgkMSwKLQlBQ19FR1JFUF9DUFAoeWVzLCBbI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaWZkZWYgTklfTUFYU0VSVgoteWVzCi0jZW5kaWZdLAotCQkkMT15ZXMsCi0JCSQxPW5vKSkKLQlBQ19NU0dfUkVTVUxUKCQkMSkKLQlpZiB0ZXN0ICQkMSAhPSB5ZXM7IHRoZW4KLQkJQUNfREVGSU5FKE5FRURfQUREUklORk9fSCkKLQlmaQotXSkKLQotZG5sCi1kbmwgQ2hlY2tzIGZvciBOSV9OQU1FUkVRRAotQUNfREVGVU4oQUNfTklfTkFNRVJFUUQsIFsKLQlBQ19NU0dfQ0hFQ0tJTkcoZm9yIE5JX05BTUVSRVFEKQotCUFDX0NBQ0hFX1ZBTCgkMSwKLQlBQ19FR1JFUF9DUFAoeWVzLCBbI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaWZkZWYgTklfTk9GUUROCi15ZXMKLSNlbmRpZl0sCi0JCSQxPXllcywKLQkJJDE9bm8pKQotCUFDX01TR19SRVNVTFQoJCQxKQotCWlmIHRlc3QgJCQxICE9IHllczsgdGhlbgotCQlBQ19ERUZJTkUoTkVFRF9BRERSSU5GT19IKQotCWZpCi1dKQotCi1kbmwKLWRubCBDaGVja3MgZm9yIHNvY2thZGRyX3N0b3JhZ2Ugc3RydWN0dXJlCi1BQ19ERUZVTihBQ19TVFJVQ1RfU0FfU1RPUkFHRSwgWwotCUFDX01TR19DSEVDS0lORyhmb3Igc29ja2FkZHJfc3RvcmFnZSkKLQlBQ19DQUNIRV9WQUwoJDEsCi0JQUNfVFJZX0NPTVBJTEUoWwotIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxzeXMvc29ja2V0Lmg+XSwKLQkJW3N0cnVjdCBzb2NrYWRkcl9zdG9yYWdlIHNdLAotCQkkMT15ZXMsCi0JCSQxPW5vKSkKLQlBQ19NU0dfUkVTVUxUKCQkMSkKLQlpZiB0ZXN0ICQkMSA9IHllczsgdGhlbgotCQlBQ19ERUZJTkUoSEFWRV9TT0NLQUREUl9TVE9SQUdFLCAxLAotCQkgICAgW2RlZmluZSBpZiB5b3UgaGF2ZSBzdHJ1Y3Qgc29ja2FkZHJfc3RvcmFnZV0pCi0JZmkKLV0pCi0KLWRubAotZG5sIGNoZWNrIGZvciBoX2Vycm5vCi1BQ19ERUZVTihBQ19WQVJfSF9FUlJOTywgWwotCUFDX01TR19DSEVDS0lORyhmb3IgaF9lcnJubykKLQlBQ19DQUNIRV9WQUwoYWNfY3ZfdmFyX2hfZXJybm8sCi0JQUNfVFJZX0NPTVBJTEUoWwotIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxuZXRkYi5oPl0sCi0JCVtpbnQgZm9vID0gaF9lcnJubztdLAotCQlhY19jdl92YXJfaF9lcnJubz15ZXMsCi0JCWFjX2N2X3Zhcl9oX2Vycm5vPW5vKSkKLQlBQ19NU0dfUkVTVUxUKCRhY19jdl92YXJfaF9lcnJubykKLQlpZiB0ZXN0ICIkYWNfY3ZfdmFyX2hfZXJybm8iID0gInllcyI7IHRoZW4KLQkJQUNfREVGSU5FKEhBVkVfSF9FUlJOTywgMSwKLQkJICAgIFtkZWZpbmUgaWYgeW91IGhhdmUgdGhlIGhfZXJybm8gdmFyaWFibGVdKQotCWZpCi1dKQotCi1kbmwKIGRubCBUZXN0IGZvciBfX2F0dHJpYnV0ZV9fCiBkbmwKIApkaWZmIC0tZ2l0IGEvYWRkcnRvbmFtZS5jIGIvYWRkcnRvbmFtZS5jCmluZGV4IGQwNDM3ZmUuLjY5NzViNzEgMTAwNjQ0Ci0tLSBhL2FkZHJ0b25hbWUuYworKysgYi9hZGRydG9uYW1lLmMKQEAgLTIyLDEyICsyMiwxMSBAQAogICogIGFuZCBhZGRyZXNzIHRvIHN0cmluZyBjb252ZXJzaW9uIHJvdXRpbmVzCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpZmRlZiBVU0VfRVRIRVJfTlRPSE9TVAogI2lmZGVmIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9ICkBAIC01OCw4ICs1NywxMCBAQAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKKyNpbmNsdWRlICJhZGRydG9zdHIuaCIKKyNpbmNsdWRlICJldGhlcnR5cGUuaCIKICNpbmNsdWRlICJsbGMuaCIKICNpbmNsdWRlICJzZXRzaWduYWwuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCkBAIC03Miw3ICs3Myw3IEBACiAvKgogICogaGFzaCB0YWJsZXMgZm9yIHdoYXRldmVyLXRvLW5hbWUgdHJhbnNsYXRpb25zCiAgKgotICogWFhYIHRoZXJlIGhhcyB0byBiZSBlcnJvciBjaGVja3MgYWdhaW5zdCBzdHJkdXAoMykgZmFpbHVyZQorICogbmRvX2Vycm9yKCkgY2FsbGVkIG9uIHN0cmR1cCgzKSBmYWlsdXJlCiAgKi8KIAogI2RlZmluZSBIQVNITkFNRVNJWkUgNDA5NgpAQCAtOTAsNyArOTEsNyBAQAogc3RhdGljIHN0cnVjdCBobmFtZW1lbSBkbmFkZHJ0YWJsZVtIQVNITkFNRVNJWkVdOwogc3RhdGljIHN0cnVjdCBobmFtZW1lbSBpcHhzYXB0YWJsZVtIQVNITkFNRVNJWkVdOwogCi0jaWYgZGVmaW5lZChJTkVUNikgJiYgZGVmaW5lZChXSU4zMikKKyNpZmRlZiBfV0lOMzIKIC8qCiAgKiBmYWtlIGdldGhvc3RieWFkZHIgZm9yIFdpbjJrL1hQCiAgKiBnZXRob3N0YnlhZGRyKCkgcmV0dXJucyBpbmNvcnJlY3QgdmFsdWUgd2hlbiBBRl9JTkVUNiBpcyBwYXNzZWQKQEAgLTEyOCw5ICsxMjksOCBAQAogCX0KIH0KICNkZWZpbmUgZ2V0aG9zdGJ5YWRkciB3aW4zMl9nZXRob3N0YnlhZGRyCi0jZW5kaWYgLyogSU5FVDYgJiBXSU4zMiAqLworI2VuZGlmIC8qIF9XSU4zMiAqLwogCi0jaWZkZWYgSU5FVDYKIHN0cnVjdCBoNm5hbWVtZW0gewogCXN0cnVjdCBpbjZfYWRkciBhZGRyOwogCWNoYXIgKm5hbWU7CkBAIC0xMzgsNyArMTM4LDYgQEAKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaDZuYW1lbWVtIGg2bmFtZXRhYmxlW0hBU0hOQU1FU0laRV07Ci0jZW5kaWYgLyogSU5FVDYgKi8KIAogc3RydWN0IGVuYW1lbWVtIHsKIAl1X3Nob3J0IGVfYWRkcjA7CkBAIC0yMDUsNyArMjA0LDcgQEAKICAqCiAgKiBOT1RFOiBhcCBpcyAqTk9UKiBuZWNlc3NhcmlseSBwYXJ0IG9mIHRoZSBwYWNrZXQgZGF0YSAobm90IGV2ZW4gaWYKICAqIHRoaXMgaXMgYmVpbmcgY2FsbGVkIHdpdGggdGhlICJpcGFkZHJfc3RyaW5nKCkiIG1hY3JvKSwgc28geW91Ci0gKiAqQ0FOTk9UKiB1c2UgdGhlIFRDSEVDS3syfS9UVEVTVHsyfSBtYWNyb3Mgb24gaXQuICBGdXJ0aGVybW9yZSwKKyAqICpDQU5OT1QqIHVzZSB0aGUgTkRfVENIRUNLezJ9L05EX1RURVNUezJ9IG1hY3JvcyBvbiBpdC4gIEZ1cnRoZXJtb3JlLAogICogZXZlbiBpbiBjYXNlcyB3aGVyZSBpdCAqaXMqIHBhcnQgb2YgdGhlIHBhY2tldCBkYXRhLCB0aGUgY2FsbGVyCiAgKiB3b3VsZCBzdGlsbCBoYXZlIHRvIGNoZWNrIGZvciBhIG51bGwgcmV0dXJuIHZhbHVlLCBldmVuIGlmIGl0J3MKICAqIGp1c3QgcHJpbnRpbmcgdGhlIHJldHVybiB2YWx1ZSB3aXRoICIlcyIgLSBub3QgYWxsIHZlcnNpb25zIG9mCkBAIC0yMjMsNyArMjIyLDcgQEAKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaG9zdGVudCAqaHA7CiAJdWludDMyX3QgYWRkcjsKLQlzdGF0aWMgc3RydWN0IGhuYW1lbWVtICpwOwkJLyogc3RhdGljIGZvciBsb25nam1wKCkgKi8KKwlzdHJ1Y3QgaG5hbWVtZW0gKnA7CiAKIAltZW1jcHkoJmFkZHIsIGFwLCBzaXplb2YoYWRkcikpOwogCXAgPSAmaG5hbWV0YWJsZVthZGRyICYgKEhBU0hOQU1FU0laRS0xKV07CkBAIC0yMzIsNyArMjMxLDcgQEAKIAkJCXJldHVybiAocC0+bmFtZSk7CiAJfQogCXAtPmFkZHIgPSBhZGRyOwotCXAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJcC0+bnh0ID0gbmV3aG5hbWVtZW0obmRvKTsKIAogCS8qCiAJICogUHJpbnQgbmFtZXMgdW5sZXNzOgpAQCAtMjQ4LDYgKzI0Nyw5IEBACiAJCQljaGFyICpkb3RwOwogCiAJCQlwLT5uYW1lID0gc3RyZHVwKGhwLT5oX25hbWUpOworCQkJaWYgKHAtPm5hbWUgPT0gTlVMTCkKKwkJCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sCisJCQkJCQkgICJnZXRuYW1lOiBzdHJkdXAoaHAtPmhfbmFtZSkiKTsKIAkJCWlmIChuZG8tPm5kb19OZmxhZykgewogCQkJCS8qIFJlbW92ZSBkb21haW4gcXVhbGlmaWNhdGlvbnMgKi8KIAkJCQlkb3RwID0gc3RyY2hyKHAtPm5hbWUsICcuJyk7CkBAIC0yNTgsMTAgKzI2MCwxMSBAQAogCQl9CiAJfQogCXAtPm5hbWUgPSBzdHJkdXAoaW50b2EoYWRkcikpOworCWlmIChwLT5uYW1lID09IE5VTEwpCisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImdldG5hbWU6IHN0cmR1cChpbnRvYShhZGRyKSkiKTsKIAlyZXR1cm4gKHAtPm5hbWUpOwogfQogCi0jaWZkZWYgSU5FVDYKIC8qCiAgKiBSZXR1cm4gYSBuYW1lIGZvciB0aGUgSVA2IGFkZHJlc3MgcG9pbnRlZCB0byBieSBhcC4gIFRoaXMgYWRkcmVzcwogICogaXMgYXNzdW1lZCB0byBiZSBpbiBuZXR3b3JrIGJ5dGUgb3JkZXIuCkBAIC0yNzcsNyArMjgwLDcgQEAKIAkJCXVpbnQxNl90IGQ7CiAJCX0gYWRkcmE7CiAJfSBhZGRyOwotCXN0YXRpYyBzdHJ1Y3QgaDZuYW1lbWVtICpwOwkJLyogc3RhdGljIGZvciBsb25nam1wKCkgKi8KKwlzdHJ1Y3QgaDZuYW1lbWVtICpwOwogCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKmNwOwogCWNoYXIgbnRvcF9idWZbSU5FVDZfQUREUlNUUkxFTl07CiAKQEAgLTI4OCw3ICsyOTEsNyBAQAogCQkJcmV0dXJuIChwLT5uYW1lKTsKIAl9CiAJcC0+YWRkciA9IGFkZHIuYWRkcjsKLQlwLT5ueHQgPSBuZXdoNm5hbWVtZW0oKTsKKwlwLT5ueHQgPSBuZXdoNm5hbWVtZW0obmRvKTsKIAogCS8qCiAJICogRG8gbm90IHByaW50IG5hbWVzIGlmIC1uIHdhcyBnaXZlbi4KQEAgLTI5OSw2ICszMDIsOSBAQAogCQkJY2hhciAqZG90cDsKIAogCQkJcC0+bmFtZSA9IHN0cmR1cChocC0+aF9uYW1lKTsKKwkJCWlmIChwLT5uYW1lID09IE5VTEwpCisJCQkJKCpuZG8tPm5kb19lcnJvcikobmRvLAorCQkJCQkJICAiZ2V0bmFtZTY6IHN0cmR1cChocC0+aF9uYW1lKSIpOwogCQkJaWYgKG5kby0+bmRvX05mbGFnKSB7CiAJCQkJLyogUmVtb3ZlIGRvbWFpbiBxdWFsaWZpY2F0aW9ucyAqLwogCQkJCWRvdHAgPSBzdHJjaHIocC0+bmFtZSwgJy4nKTsKQEAgLTMwOCwxMSArMzE0LDEyIEBACiAJCQlyZXR1cm4gKHAtPm5hbWUpOwogCQl9CiAJfQotCWNwID0gaW5ldF9udG9wKEFGX0lORVQ2LCAmYWRkciwgbnRvcF9idWYsIHNpemVvZihudG9wX2J1ZikpOworCWNwID0gYWRkcnRvc3RyNihhcCwgbnRvcF9idWYsIHNpemVvZihudG9wX2J1ZikpOwogCXAtPm5hbWUgPSBzdHJkdXAoY3ApOworCWlmIChwLT5uYW1lID09IE5VTEwpCisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImdldG5hbWU2OiBzdHJkdXAoY3ApIik7CiAJcmV0dXJuIChwLT5uYW1lKTsKIH0KLSNlbmRpZiAvKiBJTkVUNiAqLwogCiBzdGF0aWMgY29uc3QgY2hhciBoZXhbXSA9ICIwMTIzNDU2Nzg5YWJjZGVmIjsKIApAQCAtMzIwLDcgKzMyNyw3IEBACiAvKiBGaW5kIHRoZSBoYXNoIG5vZGUgdGhhdCBjb3JyZXNwb25kcyB0aGUgZXRoZXIgYWRkcmVzcyAnZXAnICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVuYW1lbWVtICoKLWxvb2t1cF9lbWVtKGNvbnN0IHVfY2hhciAqZXApCitsb29rdXBfZW1lbShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICplcCkKIHsKIAlyZWdpc3RlciB1X2ludCBpLCBqLCBrOwogCXN0cnVjdCBlbmFtZW1lbSAqdHA7CkBAIC0zNDIsNyArMzQ5LDcgQEAKIAl0cC0+ZV9hZGRyMiA9IGs7CiAJdHAtPmVfbnh0ID0gKHN0cnVjdCBlbmFtZW1lbSAqKWNhbGxvYygxLCBzaXplb2YoKnRwKSk7CiAJaWYgKHRwLT5lX254dCA9PSBOVUxMKQotCQllcnJvcigibG9va3VwX2VtZW06IGNhbGxvYyIpOworCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJsb29rdXBfZW1lbTogY2FsbG9jIik7CiAKIAlyZXR1cm4gdHA7CiB9CkBAIC0zNTMsNyArMzYwLDggQEAKICAqLwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBlbmFtZW1lbSAqCi1sb29rdXBfYnl0ZXN0cmluZyhyZWdpc3RlciBjb25zdCB1X2NoYXIgKmJzLCBjb25zdCB1bnNpZ25lZCBpbnQgbmxlbikKK2xvb2t1cF9ieXRlc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJzLAorCQkgIGNvbnN0IHVuc2lnbmVkIGludCBubGVuKQogewogCXN0cnVjdCBlbmFtZW1lbSAqdHA7CiAJcmVnaXN0ZXIgdV9pbnQgaSwgaiwgazsKQEAgLTM4NSwxMiArMzkzLDEyIEBACiAKIAl0cC0+ZV9icyA9ICh1X2NoYXIgKikgY2FsbG9jKDEsIG5sZW4gKyAxKTsKIAlpZiAodHAtPmVfYnMgPT0gTlVMTCkKLQkJZXJyb3IoImxvb2t1cF9ieXRlc3RyaW5nOiBjYWxsb2MiKTsKKwkJKCpuZG8tPm5kb19lcnJvcikobmRvLCAibG9va3VwX2J5dGVzdHJpbmc6IGNhbGxvYyIpOwogCiAJbWVtY3B5KHRwLT5lX2JzLCBicywgbmxlbik7CiAJdHAtPmVfbnh0ID0gKHN0cnVjdCBlbmFtZW1lbSAqKWNhbGxvYygxLCBzaXplb2YoKnRwKSk7CiAJaWYgKHRwLT5lX254dCA9PSBOVUxMKQotCQllcnJvcigibG9va3VwX2J5dGVzdHJpbmc6IGNhbGxvYyIpOworCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJsb29rdXBfYnl0ZXN0cmluZzogY2FsbG9jIik7CiAKIAlyZXR1cm4gdHA7CiB9CkBAIC0zOTgsMTQgKzQwNiwxNSBAQAogLyogRmluZCB0aGUgaGFzaCBub2RlIHRoYXQgY29ycmVzcG9uZHMgdGhlIE5TQVAgJ25zYXAnICovCiAKIHN0YXRpYyBpbmxpbmUgc3RydWN0IGVuYW1lbWVtICoKLWxvb2t1cF9uc2FwKHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqbnNhcCkKK2xvb2t1cF9uc2FwKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKm5zYXAsCisJICAgIHJlZ2lzdGVyIHVfaW50IG5zYXBfbGVuZ3RoKQogewogCXJlZ2lzdGVyIHVfaW50IGksIGosIGs7Ci0JdW5zaWduZWQgaW50IG5sZW4gPSAqbnNhcDsKIAlzdHJ1Y3QgZW5hbWVtZW0gKnRwOwotCWNvbnN0IHVfY2hhciAqZW5zYXAgPSBuc2FwICsgbmxlbiAtIDY7CisJY29uc3QgdV9jaGFyICplbnNhcDsKIAotCWlmIChubGVuID4gNikgeworCWlmIChuc2FwX2xlbmd0aCA+IDYpIHsKKwkJZW5zYXAgPSBuc2FwICsgbnNhcF9sZW5ndGggLSA2OwogCQlrID0gKGVuc2FwWzBdIDw8IDgpIHwgZW5zYXBbMV07CiAJCWogPSAoZW5zYXBbMl0gPDwgOCkgfCBlbnNhcFszXTsKIAkJaSA9IChlbnNhcFs0XSA8PCA4KSB8IGVuc2FwWzVdOwpAQCAtNDE4LDIyICs0MjcsMjMgQEAKIAkJaWYgKHRwLT5lX2FkZHIwID09IGkgJiYKIAkJICAgIHRwLT5lX2FkZHIxID09IGogJiYKIAkJICAgIHRwLT5lX2FkZHIyID09IGsgJiYKLQkJICAgIHRwLT5lX25zYXBbMF0gPT0gbmxlbiAmJgorCQkgICAgdHAtPmVfbnNhcFswXSA9PSBuc2FwX2xlbmd0aCAmJgogCQkgICAgbWVtY21wKChjb25zdCBjaGFyICopJihuc2FwWzFdKSwKLQkJCShjaGFyICopJih0cC0+ZV9uc2FwWzFdKSwgbmxlbikgPT0gMCkKKwkJCShjaGFyICopJih0cC0+ZV9uc2FwWzFdKSwgbnNhcF9sZW5ndGgpID09IDApCiAJCQlyZXR1cm4gdHA7CiAJCWVsc2UKIAkJCXRwID0gdHAtPmVfbnh0OwogCXRwLT5lX2FkZHIwID0gaTsKIAl0cC0+ZV9hZGRyMSA9IGo7CiAJdHAtPmVfYWRkcjIgPSBrOwotCXRwLT5lX25zYXAgPSAodV9jaGFyICopbWFsbG9jKG5sZW4gKyAxKTsKKwl0cC0+ZV9uc2FwID0gKHVfY2hhciAqKW1hbGxvYyhuc2FwX2xlbmd0aCArIDEpOwogCWlmICh0cC0+ZV9uc2FwID09IE5VTEwpCi0JCWVycm9yKCJsb29rdXBfbnNhcDogbWFsbG9jIik7Ci0JbWVtY3B5KChjaGFyICopdHAtPmVfbnNhcCwgKGNvbnN0IGNoYXIgKiluc2FwLCBubGVuICsgMSk7CisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImxvb2t1cF9uc2FwOiBtYWxsb2MiKTsKKwl0cC0+ZV9uc2FwWzBdID0gKHVfY2hhciluc2FwX2xlbmd0aDsJLyogZ3VhcmFudGVlZCA8IElTT05TQVBfTUFYX0xFTkdUSCAqLworCW1lbWNweSgoY2hhciAqKSZ0cC0+ZV9uc2FwWzFdLCAoY29uc3QgY2hhciAqKW5zYXAsIG5zYXBfbGVuZ3RoKTsKIAl0cC0+ZV9ueHQgPSAoc3RydWN0IGVuYW1lbWVtICopY2FsbG9jKDEsIHNpemVvZigqdHApKTsKIAlpZiAodHAtPmVfbnh0ID09IE5VTEwpCi0JCWVycm9yKCJsb29rdXBfbnNhcDogY2FsbG9jIik7CisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImxvb2t1cF9uc2FwOiBjYWxsb2MiKTsKIAogCXJldHVybiB0cDsKIH0KQEAgLTQ0MSw3ICs0NTEsNyBAQAogLyogRmluZCB0aGUgaGFzaCBub2RlIHRoYXQgY29ycmVzcG9uZHMgdGhlIHByb3RvaWQgJ3BpJy4gKi8KIAogc3RhdGljIGlubGluZSBzdHJ1Y3QgcHJvdG9pZG1lbSAqCi1sb29rdXBfcHJvdG9pZChjb25zdCB1X2NoYXIgKnBpKQorbG9va3VwX3Byb3RvaWQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqcGkpCiB7CiAJcmVnaXN0ZXIgdV9pbnQgaSwgajsKIAlzdHJ1Y3QgcHJvdG9pZG1lbSAqdHA7CkBAIC00NjEsNyArNDcxLDcgQEAKIAl0cC0+cF9wcm90byA9IGo7CiAJdHAtPnBfbnh0ID0gKHN0cnVjdCBwcm90b2lkbWVtICopY2FsbG9jKDEsIHNpemVvZigqdHApKTsKIAlpZiAodHAtPnBfbnh0ID09IE5VTEwpCi0JCWVycm9yKCJsb29rdXBfcHJvdG9pZDogY2FsbG9jIik7CisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImxvb2t1cF9wcm90b2lkOiBjYWxsb2MiKTsKIAogCXJldHVybiB0cDsKIH0KQEAgLTQ3NSwyMSArNDg1LDE4IEBACiAJaW50IG91aTsKIAljaGFyIGJ1ZltCVUZTSVpFXTsKIAotCXRwID0gbG9va3VwX2VtZW0oZXApOworCXRwID0gbG9va3VwX2VtZW0obmRvLCBlcCk7CiAJaWYgKHRwLT5lX25hbWUpCiAJCXJldHVybiAodHAtPmVfbmFtZSk7CiAjaWZkZWYgVVNFX0VUSEVSX05UT0hPU1QKIAlpZiAoIW5kby0+bmRvX25mbGFnKSB7CiAJCWNoYXIgYnVmMltCVUZTSVpFXTsKIAotCQkvKgotCQkgKiBXZSBkb24ndCBjYXN0IGl0IHRvICJjb25zdCBzdHJ1Y3QgZXRoZXJfYWRkciAqIgotCQkgKiBiZWNhdXNlIHNvbWUgc3lzdGVtcyBmYWlsIHRvIGRlY2xhcmUgdGhlIHNlY29uZAotCQkgKiBhcmd1bWVudCBhcyBhICJjb25zdCIgcG9pbnRlciwgZXZlbiB0aG91Z2ggdGhleQotCQkgKiBkb24ndCBtb2RpZnkgd2hhdCBpdCBwb2ludHMgdG8uCi0JCSAqLwotCQlpZiAoZXRoZXJfbnRvaG9zdChidWYyLCAoc3RydWN0IGV0aGVyX2FkZHIgKillcCkgPT0gMCkgeworCQlpZiAoZXRoZXJfbnRvaG9zdChidWYyLCAoY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKillcCkgPT0gMCkgewogCQkJdHAtPmVfbmFtZSA9IHN0cmR1cChidWYyKTsKKwkJCWlmICh0cC0+ZV9uYW1lID09IE5VTEwpCisJCQkJKCpuZG8tPm5kb19lcnJvcikobmRvLAorCQkJCQkJICAiZXRoZXJhZGRyX3N0cmluZzogc3RyZHVwKGJ1ZjIpIik7CiAJCQlyZXR1cm4gKHRwLT5lX25hbWUpOwogCQl9CiAJfQpAQCAtNTEwLDExICs1MTcsMTMgQEAKIAl9IGVsc2UKIAkJKmNwID0gJ1wwJzsKIAl0cC0+ZV9uYW1lID0gc3RyZHVwKGJ1Zik7CisJaWYgKHRwLT5lX25hbWUgPT0gTlVMTCkKKwkJKCpuZG8tPm5kb19lcnJvcikobmRvLCAiZXRoZXJhZGRyX3N0cmluZzogc3RyZHVwKGJ1ZikiKTsKIAlyZXR1cm4gKHRwLT5lX25hbWUpOwogfQogCiBjb25zdCBjaGFyICoKLWxlNjRhZGRyX3N0cmluZyhjb25zdCB1X2NoYXIgKmVwKQorbGU2NGFkZHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmVwKQogewogCWNvbnN0IHVuc2lnbmVkIGludCBsZW4gPSA4OwogCXJlZ2lzdGVyIHVfaW50IGk7CkBAIC01MjIsNyArNTMxLDcgQEAKIAlyZWdpc3RlciBzdHJ1Y3QgZW5hbWVtZW0gKnRwOwogCWNoYXIgYnVmW0JVRlNJWkVdOwogCi0JdHAgPSBsb29rdXBfYnl0ZXN0cmluZyhlcCwgbGVuKTsKKwl0cCA9IGxvb2t1cF9ieXRlc3RyaW5nKG5kbywgZXAsIGxlbik7CiAJaWYgKHRwLT5lX25hbWUpCiAJCXJldHVybiAodHAtPmVfbmFtZSk7CiAKQEAgLTUzNywxMiArNTQ2LDE1IEBACiAJKmNwID0gJ1wwJzsKIAogCXRwLT5lX25hbWUgPSBzdHJkdXAoYnVmKTsKKwlpZiAodHAtPmVfbmFtZSA9PSBOVUxMKQorCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJsZTY0YWRkcl9zdHJpbmc6IHN0cmR1cChidWYpIik7CiAKIAlyZXR1cm4gKHRwLT5lX25hbWUpOwogfQogCiBjb25zdCBjaGFyICoKLWxpbmthZGRyX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICplcCwgY29uc3QgdW5zaWduZWQgaW50IHR5cGUsIGNvbnN0IHVuc2lnbmVkIGludCBsZW4pCitsaW5rYWRkcl9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZXAsCisJCWNvbnN0IHVuc2lnbmVkIGludCB0eXBlLCBjb25zdCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXJlZ2lzdGVyIHVfaW50IGk7CiAJcmVnaXN0ZXIgY2hhciAqY3A7CkBAIC01NTcsMTMgKzU2OSwxMyBAQAogCWlmICh0eXBlID09IExJTktBRERSX0ZSRUxBWSkKIAkJcmV0dXJuIChxOTIyX3N0cmluZyhuZG8sIGVwLCBsZW4pKTsKIAotCXRwID0gbG9va3VwX2J5dGVzdHJpbmcoZXAsIGxlbik7CisJdHAgPSBsb29rdXBfYnl0ZXN0cmluZyhuZG8sIGVwLCBsZW4pOwogCWlmICh0cC0+ZV9uYW1lKQogCQlyZXR1cm4gKHRwLT5lX25hbWUpOwogCiAJdHAtPmVfbmFtZSA9IGNwID0gKGNoYXIgKiltYWxsb2MobGVuKjMpOwogCWlmICh0cC0+ZV9uYW1lID09IE5VTEwpCi0JCWVycm9yKCJsaW5rYWRkcl9zdHJpbmc6IG1hbGxvYyIpOworCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJsaW5rYWRkcl9zdHJpbmc6IG1hbGxvYyIpOwogCSpjcCsrID0gaGV4WyplcCA+PiA0XTsKIAkqY3ArKyA9IGhleFsqZXArKyAmIDB4Zl07CiAJZm9yIChpID0gbGVuLTE7IGkgPiAwIDsgLS1pKSB7CkBAIC01NzYsNyArNTg4LDcgQEAKIH0KIAogY29uc3QgY2hhciAqCi1ldGhlcnByb3RvX3N0cmluZyh1X3Nob3J0IHBvcnQpCitldGhlcnByb3RvX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9zaG9ydCBwb3J0KQogewogCXJlZ2lzdGVyIGNoYXIgKmNwOwogCXJlZ2lzdGVyIHN0cnVjdCBobmFtZW1lbSAqdHA7CkBAIC01ODgsNyArNjAwLDcgQEAKIAkJCXJldHVybiAodHAtPm5hbWUpOwogCiAJdHAtPmFkZHIgPSBpOwotCXRwLT5ueHQgPSBuZXdobmFtZW1lbSgpOworCXRwLT5ueHQgPSBuZXdobmFtZW1lbShuZG8pOwogCiAJY3AgPSBidWY7CiAJTlRPSFMocG9ydCk7CkBAIC01OTgsMTggKzYxMCwyMCBAQAogCSpjcCsrID0gaGV4W3BvcnQgJiAweGZdOwogCSpjcCsrID0gJ1wwJzsKIAl0cC0+bmFtZSA9IHN0cmR1cChidWYpOworCWlmICh0cC0+bmFtZSA9PSBOVUxMKQorCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJldGhlcnByb3RvX3N0cmluZzogc3RyZHVwKGJ1ZikiKTsKIAlyZXR1cm4gKHRwLT5uYW1lKTsKIH0KIAogY29uc3QgY2hhciAqCi1wcm90b2lkX3N0cmluZyhyZWdpc3RlciBjb25zdCB1X2NoYXIgKnBpKQorcHJvdG9pZF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcGkpCiB7CiAJcmVnaXN0ZXIgdV9pbnQgaSwgajsKIAlyZWdpc3RlciBjaGFyICpjcDsKIAlyZWdpc3RlciBzdHJ1Y3QgcHJvdG9pZG1lbSAqdHA7CiAJY2hhciBidWZbc2l6ZW9mKCIwMDowMDowMDowMDowMCIpXTsKIAotCXRwID0gbG9va3VwX3Byb3RvaWQocGkpOworCXRwID0gbG9va3VwX3Byb3RvaWQobmRvLCBwaSk7CiAJaWYgKHRwLT5wX25hbWUpCiAJCXJldHVybiB0cC0+cF9uYW1lOwogCkBAIC02MjUsMTIgKzYzOSwxNSBAQAogCX0KIAkqY3AgPSAnXDAnOwogCXRwLT5wX25hbWUgPSBzdHJkdXAoYnVmKTsKKwlpZiAodHAtPnBfbmFtZSA9PSBOVUxMKQorCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJwcm90b2lkX3N0cmluZzogc3RyZHVwKGJ1ZikiKTsKIAlyZXR1cm4gKHRwLT5wX25hbWUpOwogfQogCiAjZGVmaW5lIElTT05TQVBfTUFYX0xFTkdUSCAyMAogY29uc3QgY2hhciAqCi1pc29uc2FwX3N0cmluZyhjb25zdCB1X2NoYXIgKm5zYXAsIHJlZ2lzdGVyIHVfaW50IG5zYXBfbGVuZ3RoKQoraXNvbnNhcF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqbnNhcCwKKwkgICAgICAgcmVnaXN0ZXIgdV9pbnQgbnNhcF9sZW5ndGgpCiB7CiAJcmVnaXN0ZXIgdV9pbnQgbnNhcF9pZHg7CiAJcmVnaXN0ZXIgY2hhciAqY3A7CkBAIC02MzksMTMgKzY1NiwxMyBAQAogCWlmIChuc2FwX2xlbmd0aCA8IDEgfHwgbnNhcF9sZW5ndGggPiBJU09OU0FQX01BWF9MRU5HVEgpCiAJCXJldHVybiAoImlzb25zYXBfc3RyaW5nOiBpbGxlZ2FsIGxlbmd0aCIpOwogCi0JdHAgPSBsb29rdXBfbnNhcChuc2FwKTsKKwl0cCA9IGxvb2t1cF9uc2FwKG5kbywgbnNhcCwgbnNhcF9sZW5ndGgpOwogCWlmICh0cC0+ZV9uYW1lKQogCQlyZXR1cm4gdHAtPmVfbmFtZTsKIAogCXRwLT5lX25hbWUgPSBjcCA9IChjaGFyICopbWFsbG9jKHNpemVvZigieHgueHh4eC54eHh4Lnh4eHgueHh4eC54eHh4Lnh4eHgueHh4eC54eHh4Lnh4eHgueHgiKSk7CiAJaWYgKGNwID09IE5VTEwpCi0JCWVycm9yKCJpc29uc2FwX3N0cmluZzogbWFsbG9jIik7CisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImlzb25zYXBfc3RyaW5nOiBtYWxsb2MiKTsKIAogCWZvciAobnNhcF9pZHggPSAwOyBuc2FwX2lkeCA8IG5zYXBfbGVuZ3RoOyBuc2FwX2lkeCsrKSB7CiAJCSpjcCsrID0gaGV4Wypuc2FwID4+IDRdOwpAQCAtNjYwLDcgKzY3Nyw3IEBACiB9CiAKIGNvbnN0IGNoYXIgKgotdGNwcG9ydF9zdHJpbmcodV9zaG9ydCBwb3J0KQordGNwcG9ydF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVfc2hvcnQgcG9ydCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaG5hbWVtZW0gKnRwOwogCXJlZ2lzdGVyIHVpbnQzMl90IGkgPSBwb3J0OwpAQCAtNjcxLDE1ICs2ODgsMTcgQEAKIAkJCXJldHVybiAodHAtPm5hbWUpOwogCiAJdHAtPmFkZHIgPSBpOwotCXRwLT5ueHQgPSBuZXdobmFtZW1lbSgpOworCXRwLT5ueHQgPSBuZXdobmFtZW1lbShuZG8pOwogCiAJKHZvaWQpc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IiwgaSk7CiAJdHAtPm5hbWUgPSBzdHJkdXAoYnVmKTsKKwlpZiAodHAtPm5hbWUgPT0gTlVMTCkKKwkJKCpuZG8tPm5kb19lcnJvcikobmRvLCAidGNwcG9ydF9zdHJpbmc6IHN0cmR1cChidWYpIik7CiAJcmV0dXJuICh0cC0+bmFtZSk7CiB9CiAKIGNvbnN0IGNoYXIgKgotdWRwcG9ydF9zdHJpbmcocmVnaXN0ZXIgdV9zaG9ydCBwb3J0KQordWRwcG9ydF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHJlZ2lzdGVyIHVfc2hvcnQgcG9ydCkKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaG5hbWVtZW0gKnRwOwogCXJlZ2lzdGVyIHVpbnQzMl90IGkgPSBwb3J0OwpAQCAtNjkwLDE1ICs3MDksMTcgQEAKIAkJCXJldHVybiAodHAtPm5hbWUpOwogCiAJdHAtPmFkZHIgPSBpOwotCXRwLT5ueHQgPSBuZXdobmFtZW1lbSgpOworCXRwLT5ueHQgPSBuZXdobmFtZW1lbShuZG8pOwogCiAJKHZvaWQpc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgIiV1IiwgaSk7CiAJdHAtPm5hbWUgPSBzdHJkdXAoYnVmKTsKKwlpZiAodHAtPm5hbWUgPT0gTlVMTCkKKwkJKCpuZG8tPm5kb19lcnJvcikobmRvLCAidWRwcG9ydF9zdHJpbmc6IHN0cmR1cChidWYpIik7CiAJcmV0dXJuICh0cC0+bmFtZSk7CiB9CiAKIGNvbnN0IGNoYXIgKgotaXB4c2FwX3N0cmluZyh1X3Nob3J0IHBvcnQpCitpcHhzYXBfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X3Nob3J0IHBvcnQpCiB7CiAJcmVnaXN0ZXIgY2hhciAqY3A7CiAJcmVnaXN0ZXIgc3RydWN0IGhuYW1lbWVtICp0cDsKQEAgLTcxMCw3ICs3MzEsNyBAQAogCQkJcmV0dXJuICh0cC0+bmFtZSk7CiAKIAl0cC0+YWRkciA9IGk7Ci0JdHAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJdHAtPm54dCA9IG5ld2huYW1lbWVtKG5kbyk7CiAKIAljcCA9IGJ1ZjsKIAlOVE9IUyhwb3J0KTsKQEAgLTcyMCw2ICs3NDEsOCBAQAogCSpjcCsrID0gaGV4W3BvcnQgJiAweGZdOwogCSpjcCsrID0gJ1wwJzsKIAl0cC0+bmFtZSA9IHN0cmR1cChidWYpOworCWlmICh0cC0+bmFtZSA9PSBOVUxMKQorCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJpcHhzYXBfc3RyaW5nOiBzdHJkdXAoYnVmKSIpOwogCXJldHVybiAodHAtPm5hbWUpOwogfQogCkBAIC03NDgsMjUgKzc3MSw0NCBAQAogCQkJdGFibGUtPm5hbWUgPSBzdHJkdXAoYnVmKTsKIAkJfSBlbHNlCiAJCQl0YWJsZS0+bmFtZSA9IHN0cmR1cChzdi0+c19uYW1lKTsKKwkJaWYgKHRhYmxlLT5uYW1lID09IE5VTEwpCisJCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJpbml0X3NlcnZhcnJheTogc3RyZHVwIik7CisKIAkJdGFibGUtPmFkZHIgPSBwb3J0OwotCQl0YWJsZS0+bnh0ID0gbmV3aG5hbWVtZW0oKTsKKwkJdGFibGUtPm54dCA9IG5ld2huYW1lbWVtKG5kbyk7CiAJfQogCWVuZHNlcnZlbnQoKTsKIH0KIAotLyogaW4gbGlicGNhcC5hIChuYW1ldG9hZGRyLmMpICovCi0jaWYgZGVmaW5lZChXSU4zMikgJiYgIWRlZmluZWQoVVNFX1NUQVRJQ19MSUJQQ0FQKQotZXh0ZXJuIF9fZGVjbHNwZWMoZGxsaW1wb3J0KQotI2Vsc2UKLWV4dGVybgotI2VuZGlmCi1jb25zdCBzdHJ1Y3QgZXByb3RvIHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZXByb3RvIHsKIAljb25zdCBjaGFyICpzOwogCXVfc2hvcnQgcDsKLX0gZXByb3RvX2RiW107Cit9IGVwcm90b19kYltdID0geworCXsgInB1cCIsIEVUSEVSVFlQRV9QVVAgfSwKKwl7ICJ4bnMiLCBFVEhFUlRZUEVfTlMgfSwKKwl7ICJpcCIsIEVUSEVSVFlQRV9JUCB9LAorCXsgImlwNiIsIEVUSEVSVFlQRV9JUFY2IH0sCisJeyAiYXJwIiwgRVRIRVJUWVBFX0FSUCB9LAorCXsgInJhcnAiLCBFVEhFUlRZUEVfUkVWQVJQIH0sCisJeyAic3ByaXRlIiwgRVRIRVJUWVBFX1NQUklURSB9LAorCXsgIm1vcGRsIiwgRVRIRVJUWVBFX01PUERMIH0sCisJeyAibW9wcmMiLCBFVEhFUlRZUEVfTU9QUkMgfSwKKwl7ICJkZWNuZXQiLCBFVEhFUlRZUEVfRE4gfSwKKwl7ICJsYXQiLCBFVEhFUlRZUEVfTEFUIH0sCisJeyAic2NhIiwgRVRIRVJUWVBFX1NDQSB9LAorCXsgImxhbmJyaWRnZSIsIEVUSEVSVFlQRV9MQU5CUklER0UgfSwKKwl7ICJ2ZXhwIiwgRVRIRVJUWVBFX1ZFWFAgfSwKKwl7ICJ2cHJvZCIsIEVUSEVSVFlQRV9WUFJPRCB9LAorCXsgImF0YWxrIiwgRVRIRVJUWVBFX0FUQUxLIH0sCisJeyAiYXRhbGthcnAiLCBFVEhFUlRZUEVfQUFSUCB9LAorCXsgImxvb3BiYWNrIiwgRVRIRVJUWVBFX0xPT1BCQUNLIH0sCisJeyAiZGVjZHRzIiwgRVRIRVJUWVBFX0RFQ0RUUyB9LAorCXsgImRlY2RucyIsIEVUSEVSVFlQRV9ERUNETlMgfSwKKwl7IChjaGFyICopMCwgMCB9Cit9OwogCiBzdGF0aWMgdm9pZAotaW5pdF9lcHJvdG9hcnJheSh2b2lkKQoraW5pdF9lcHJvdG9hcnJheShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbykKIHsKIAlyZWdpc3RlciBpbnQgaTsKIAlyZWdpc3RlciBzdHJ1Y3QgaG5hbWVtZW0gKnRhYmxlOwpAQCAtNzc4LDcgKzgyMCw3IEBACiAJCQl0YWJsZSA9IHRhYmxlLT5ueHQ7CiAJCXRhYmxlLT5uYW1lID0gZXByb3RvX2RiW2ldLnM7CiAJCXRhYmxlLT5hZGRyID0gaHRvbnMoZXByb3RvX2RiW2ldLnApOwotCQl0YWJsZS0+bnh0ID0gbmV3aG5hbWVtZW0oKTsKKwkJdGFibGUtPm54dCA9IG5ld2huYW1lbWVtKG5kbyk7CiAJfQogfQogCkBAIC03OTksNyArODQxLDcgQEAKICAqIHR5cGVzLgogICovCiBzdGF0aWMgdm9pZAotaW5pdF9wcm90b2lkYXJyYXkodm9pZCkKK2luaXRfcHJvdG9pZGFycmF5KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvKQogewogCXJlZ2lzdGVyIGludCBpOwogCXJlZ2lzdGVyIHN0cnVjdCBwcm90b2lkbWVtICp0cDsKQEAgLTgxMywxMiArODU1LDE1IEBACiAJCXVfc2hvcnQgZXR5cGUgPSBodG9ucyhlcHJvdG9fZGJbaV0ucCk7CiAKIAkJbWVtY3B5KChjaGFyICopJnByb3RvaWRbM10sIChjaGFyICopJmV0eXBlLCAyKTsKLQkJdHAgPSBsb29rdXBfcHJvdG9pZChwcm90b2lkKTsKKwkJdHAgPSBsb29rdXBfcHJvdG9pZChuZG8sIHByb3RvaWQpOwogCQl0cC0+cF9uYW1lID0gc3RyZHVwKGVwcm90b19kYltpXS5zKTsKKwkJaWYgKHRwLT5wX25hbWUgPT0gTlVMTCkKKwkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywKKwkJCQkJICAiaW5pdF9wcm90b2lkYXJyYXk6IHN0cmR1cChlcHJvdG9fZGJbaV0ucykiKTsKIAl9CiAJLyogSGFyZHdpcmUgc29tZSBTTkFQIHByb3RvIElEIG5hbWVzICovCiAJZm9yIChwbCA9IHByb3RvaWRsaXN0OyBwbC0+bmFtZSAhPSBOVUxMOyArK3BsKSB7Ci0JCXRwID0gbG9va3VwX3Byb3RvaWQocGwtPnByb3RvaWQpOworCQl0cCA9IGxvb2t1cF9wcm90b2lkKG5kbywgcGwtPnByb3RvaWQpOwogCQkvKiBEb24ndCBvdmVycmlkZSBleGlzdGluZyBuYW1lICovCiAJCWlmICh0cC0+cF9uYW1lICE9IE5VTEwpCiAJCQljb250aW51ZTsKQEAgLTg1MCw3ICs4OTUsNyBAQAogICogdHJhbnNsYXRpb24sIHNvIHdlIGp1c3QgcGNhcF9uZXh0X2V0aGVyZW50IGFzIGEgY29udmVuaWVuY2UuCiAgKi8KIHN0YXRpYyB2b2lkCi1pbml0X2V0aGVyYXJyYXkodm9pZCkKK2luaXRfZXRoZXJhcnJheShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbykKIHsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgZXRoZXJsaXN0ICplbDsKIAlyZWdpc3RlciBzdHJ1Y3QgZW5hbWVtZW0gKnRwOwpAQCAtODY0LDggKzkwOSwxMSBAQAogCWZwID0gZm9wZW4oUENBUF9FVEhFUlNfRklMRSwgInIiKTsKIAlpZiAoZnAgIT0gTlVMTCkgewogCQl3aGlsZSAoKGVwID0gcGNhcF9uZXh0X2V0aGVyZW50KGZwKSkgIT0gTlVMTCkgewotCQkJdHAgPSBsb29rdXBfZW1lbShlcC0+YWRkcik7CisJCQl0cCA9IGxvb2t1cF9lbWVtKG5kbywgZXAtPmFkZHIpOwogCQkJdHAtPmVfbmFtZSA9IHN0cmR1cChlcC0+bmFtZSk7CisJCQlpZiAodHAtPmVfbmFtZSA9PSBOVUxMKQorCQkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywKKwkJCQkJCSAgImluaXRfZXRoZXJhcnJheTogc3RyZHVwKGVwLT5hZGRyKSIpOwogCQl9CiAJCSh2b2lkKWZjbG9zZShmcCk7CiAJfQpAQCAtODczLDcgKzkyMSw3IEBACiAKIAkvKiBIYXJkd2lyZSBzb21lIGV0aGVybmV0IG5hbWVzICovCiAJZm9yIChlbCA9IGV0aGVybGlzdDsgZWwtPm5hbWUgIT0gTlVMTDsgKytlbCkgewotCQl0cCA9IGxvb2t1cF9lbWVtKGVsLT5hZGRyKTsKKwkJdHAgPSBsb29rdXBfZW1lbShuZG8sIGVsLT5hZGRyKTsKIAkJLyogRG9uJ3Qgb3ZlcnJpZGUgZXhpc3RpbmcgbmFtZSAqLwogCQlpZiAodHAtPmVfbmFtZSAhPSBOVUxMKQogCQkJY29udGludWU7CkBAIC04ODEsMTQgKzkyOSwxMiBAQAogI2lmZGVmIFVTRV9FVEhFUl9OVE9IT1NUCiAJCS8qCiAJCSAqIFVzZSBZUC9OSVMgdmVyc2lvbiBvZiBuYW1lIGlmIGF2YWlsYWJsZS4KLQkJICoKLQkJICogV2UgZG9uJ3QgY2FzdCBpdCB0byAiY29uc3Qgc3RydWN0IGV0aGVyX2FkZHIgKiIKLQkJICogYmVjYXVzZSBzb21lIHN5c3RlbXMgZG9uJ3QgbW9kaWZ5IHRoZSBFdGhlcm5ldAotCQkgKiBhZGRyZXNzIGJ1dCBmYWlsIHRvIGRlY2xhcmUgdGhlIHNlY29uZCBhcmd1bWVudAotCQkgKiBhcyBhICJjb25zdCIgcG9pbnRlci4KIAkJICovCi0JCWlmIChldGhlcl9udG9ob3N0KG5hbWUsIChzdHJ1Y3QgZXRoZXJfYWRkciAqKWVsLT5hZGRyKSA9PSAwKSB7CisJCWlmIChldGhlcl9udG9ob3N0KG5hbWUsIChjb25zdCBzdHJ1Y3QgZXRoZXJfYWRkciAqKWVsLT5hZGRyKSA9PSAwKSB7CiAJCQl0cC0+ZV9uYW1lID0gc3RyZHVwKG5hbWUpOworCQkJaWYgKHRwLT5lX25hbWUgPT0gTlVMTCkKKwkJCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sCisJCQkJCQkgICJpbml0X2V0aGVyYXJyYXk6IHN0cmR1cChuYW1lKSIpOwogCQkJY29udGludWU7CiAJCX0KICNlbmRpZgpAQCAtMTExNCw3ICsxMTYwLDcgQEAKIH07CiAKIHN0YXRpYyB2b2lkCi1pbml0X2lweHNhcGFycmF5KHZvaWQpCitpbml0X2lweHNhcGFycmF5KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvKQogewogCXJlZ2lzdGVyIGludCBpOwogCXJlZ2lzdGVyIHN0cnVjdCBobmFtZW1lbSAqdGFibGU7CkBAIC0xMTI2LDcgKzExNzIsNyBAQAogCQkJdGFibGUgPSB0YWJsZS0+bnh0OwogCQl0YWJsZS0+bmFtZSA9IGlweHNhcF9kYltpXS5zOwogCQl0YWJsZS0+YWRkciA9IGh0b25zKGlweHNhcF9kYltpXS52KTsKLQkJdGFibGUtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJCXRhYmxlLT5ueHQgPSBuZXdobmFtZW1lbShuZG8pOwogCX0KIH0KIApAQCAtMTE0OSwxMSArMTE5NSwxMSBAQAogCQkgKi8KIAkJcmV0dXJuOwogCi0JaW5pdF9ldGhlcmFycmF5KCk7CisJaW5pdF9ldGhlcmFycmF5KG5kbyk7CiAJaW5pdF9zZXJ2YXJyYXkobmRvKTsKLQlpbml0X2Vwcm90b2FycmF5KCk7Ci0JaW5pdF9wcm90b2lkYXJyYXkoKTsKLQlpbml0X2lweHNhcGFycmF5KCk7CisJaW5pdF9lcHJvdG9hcnJheShuZG8pOworCWluaXRfcHJvdG9pZGFycmF5KG5kbyk7CisJaW5pdF9pcHhzYXBhcnJheShuZG8pOwogfQogCiBjb25zdCBjaGFyICoKQEAgLTExNjEsMjQgKzEyMDcsMjQgQEAKIHsKIAlyZWdpc3RlciBzdHJ1Y3QgaG5hbWVtZW0gKnRwOwogCi0JZm9yICh0cCA9ICZkbmFkZHJ0YWJsZVtkbmFkZHIgJiAoSEFTSE5BTUVTSVpFLTEpXTsgdHAtPm54dCAhPSAwOworCWZvciAodHAgPSAmZG5hZGRydGFibGVbZG5hZGRyICYgKEhBU0hOQU1FU0laRS0xKV07IHRwLT5ueHQgIT0gTlVMTDsKIAkgICAgIHRwID0gdHAtPm54dCkKIAkJaWYgKHRwLT5hZGRyID09IGRuYWRkcikKIAkJCXJldHVybiAodHAtPm5hbWUpOwogCiAJdHAtPmFkZHIgPSBkbmFkZHI7Ci0JdHAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJdHAtPm54dCA9IG5ld2huYW1lbWVtKG5kbyk7CiAJaWYgKG5kby0+bmRvX25mbGFnKQotCQl0cC0+bmFtZSA9IGRubnVtX3N0cmluZyhkbmFkZHIpOworCQl0cC0+bmFtZSA9IGRubnVtX3N0cmluZyhuZG8sIGRuYWRkcik7CiAJZWxzZQotCQl0cC0+bmFtZSA9IGRubmFtZV9zdHJpbmcoZG5hZGRyKTsKKwkJdHAtPm5hbWUgPSBkbm5hbWVfc3RyaW5nKG5kbywgZG5hZGRyKTsKIAogCXJldHVybih0cC0+bmFtZSk7CiB9CiAKIC8qIFJldHVybiBhIHplcm8nZWQgaG5hbWVtZW0gc3RydWN0IGFuZCBjdXRzIGRvd24gb24gY2FsbG9jKCkgb3ZlcmhlYWQgKi8KIHN0cnVjdCBobmFtZW1lbSAqCi1uZXdobmFtZW1lbSh2b2lkKQorbmV3aG5hbWVtZW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8pCiB7CiAJcmVnaXN0ZXIgc3RydWN0IGhuYW1lbWVtICpwOwogCXN0YXRpYyBzdHJ1Y3QgaG5hbWVtZW0gKnB0ciA9IE5VTEw7CkBAIC0xMTg4LDE3ICsxMjM0LDE2IEBACiAJCW51bSA9IDY0OwogCQlwdHIgPSAoc3RydWN0IGhuYW1lbWVtICopY2FsbG9jKG51bSwgc2l6ZW9mICgqcHRyKSk7CiAJCWlmIChwdHIgPT0gTlVMTCkKLQkJCWVycm9yKCJuZXdobmFtZW1lbTogY2FsbG9jIik7CisJCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sICJuZXdobmFtZW1lbTogY2FsbG9jIik7CiAJfQogCS0tbnVtOwogCXAgPSBwdHIrKzsKIAlyZXR1cm4gKHApOwogfQogCi0jaWZkZWYgSU5FVDYKIC8qIFJldHVybiBhIHplcm8nZWQgaDZuYW1lbWVtIHN0cnVjdCBhbmQgY3V0cyBkb3duIG9uIGNhbGxvYygpIG92ZXJoZWFkICovCiBzdHJ1Y3QgaDZuYW1lbWVtICoKLW5ld2g2bmFtZW1lbSh2b2lkKQorbmV3aDZuYW1lbWVtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvKQogewogCXJlZ2lzdGVyIHN0cnVjdCBoNm5hbWVtZW0gKnA7CiAJc3RhdGljIHN0cnVjdCBoNm5hbWVtZW0gKnB0ciA9IE5VTEw7CkBAIC0xMjA4LDEzICsxMjUzLDEyIEBACiAJCW51bSA9IDY0OwogCQlwdHIgPSAoc3RydWN0IGg2bmFtZW1lbSAqKWNhbGxvYyhudW0sIHNpemVvZiAoKnB0cikpOwogCQlpZiAocHRyID09IE5VTEwpCi0JCQllcnJvcigibmV3aDZuYW1lbWVtOiBjYWxsb2MiKTsKKwkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgIm5ld2g2bmFtZW1lbTogY2FsbG9jIik7CiAJfQogCS0tbnVtOwogCXAgPSBwdHIrKzsKIAlyZXR1cm4gKHApOwogfQotI2VuZGlmIC8qIElORVQ2ICovCiAKIC8qIFJlcHJlc2VudCBUQ0kgcGFydCBvZiB0aGUgODAyLjFRIDQtb2N0ZXQgdGFnIGFzIHRleHQuICovCiBjb25zdCBjaGFyICoKZGlmZiAtLWdpdCBhL2FkZHJ0b25hbWUuaCBiL2FkZHJ0b25hbWUuaAppbmRleCBiMDdkOGIyLi43MmU1ZWYxIDEwMDY0NAotLS0gYS9hZGRydG9uYW1lLmgKKysrIGIvYWRkcnRvbmFtZS5oCkBAIC0xOSw2ICsxOSwxNCBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCisvKgorICogRGVmaW5pdGlvbnMgdG8gbGV0IHVzIGNvbXBpbGUgbW9zdCBvZiB0aGUgSVB2NiBjb2RlIGV2ZW4gb24gc3lzdGVtcworICogd2l0aG91dCBJUHY2IHN1cHBvcnQuCisgKi8KKyNpZm5kZWYgSU5FVDZfQUREUlNUUkxFTgorI2RlZmluZSBJTkVUNl9BRERSU1RSTEVOCTQ2CisjZW5kaWYKKwogLyogTmFtZSB0byBhZGRyZXNzIHRyYW5zbGF0aW9uIHJvdXRpbmVzLiAqLwogCiBlbnVtIHsKQEAgLTMyLDI4ICs0MCwyMiBAQAogCiBleHRlcm4gY29uc3QgY2hhciAqbGlua2FkZHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdW5zaWduZWQgaW50LCBjb25zdCB1bnNpZ25lZCBpbnQpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmV0aGVyYWRkcl9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiBjb25zdCBjaGFyICpsZTY0YWRkcl9zdHJpbmcoY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmV0aGVycHJvdG9fc3RyaW5nKHVfc2hvcnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnRjcHBvcnRfc3RyaW5nKHVfc2hvcnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKnVkcHBvcnRfc3RyaW5nKHVfc2hvcnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmlzb25zYXBfc3RyaW5nKGNvbnN0IHVfY2hhciAqLCByZWdpc3RlciB1X2ludCk7CitleHRlcm4gY29uc3QgY2hhciAqbGU2NGFkZHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gY29uc3QgY2hhciAqZXRoZXJwcm90b19zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICosIHVfc2hvcnQpOworZXh0ZXJuIGNvbnN0IGNoYXIgKnRjcHBvcnRfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X3Nob3J0KTsKK2V4dGVybiBjb25zdCBjaGFyICp1ZHBwb3J0X3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9zaG9ydCk7CitleHRlcm4gY29uc3QgY2hhciAqaXNvbnNhcF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCByZWdpc3RlciB1X2ludCk7CiBleHRlcm4gY29uc3QgY2hhciAqZG5hZGRyX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9zaG9ydCk7Ci1leHRlcm4gY29uc3QgY2hhciAqcHJvdG9pZF9zdHJpbmcoY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmlweHNhcF9zdHJpbmcodV9zaG9ydCk7CitleHRlcm4gY29uc3QgY2hhciAqcHJvdG9pZF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiBjb25zdCBjaGFyICppcHhzYXBfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X3Nob3J0KTsKIGV4dGVybiBjb25zdCBjaGFyICpnZXRuYW1lKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7Ci0jaWZkZWYgSU5FVDYKIGV4dGVybiBjb25zdCBjaGFyICpnZXRuYW1lNihuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICopOwotI2VuZGlmCiBleHRlcm4gY29uc3QgY2hhciAqaW50b2EodWludDMyX3QpOwogCiBleHRlcm4gdm9pZCBpbml0X2FkZHJ0b25hbWUobmV0ZGlzc2VjdF9vcHRpb25zICosIHVpbnQzMl90LCB1aW50MzJfdCk7Ci1leHRlcm4gc3RydWN0IGhuYW1lbWVtICpuZXdobmFtZW1lbSh2b2lkKTsKLSNpZmRlZiBJTkVUNgotZXh0ZXJuIHN0cnVjdCBoNm5hbWVtZW0gKm5ld2g2bmFtZW1lbSh2b2lkKTsKLSNlbmRpZgorZXh0ZXJuIHN0cnVjdCBobmFtZW1lbSAqbmV3aG5hbWVtZW0obmV0ZGlzc2VjdF9vcHRpb25zICopOworZXh0ZXJuIHN0cnVjdCBoNm5hbWVtZW0gKm5ld2g2bmFtZW1lbShuZXRkaXNzZWN0X29wdGlvbnMgKik7CiBleHRlcm4gY29uc3QgY2hhciAqIGllZWU4MDIxcV90Y2lfc3RyaW5nKGNvbnN0IHVpbnQxNl90KTsKIAogI2RlZmluZSBpcGFkZHJfc3RyaW5nKG5kbywgcCkgZ2V0bmFtZShuZG8sIChjb25zdCB1X2NoYXIgKikocCkpCi0jaWZkZWYgSU5FVDYKICNkZWZpbmUgaXA2YWRkcl9zdHJpbmcobmRvLCBwKSBnZXRuYW1lNihuZG8sIChjb25zdCB1X2NoYXIgKikocCkpCi0jZW5kaWYKZGlmZiAtLWdpdCBhL21pc3NpbmcvaW5ldF9udG9wLmMgYi9hZGRydG9zdHIuYwpzaW1pbGFyaXR5IGluZGV4IDc3JQpyZW5hbWUgZnJvbSBtaXNzaW5nL2luZXRfbnRvcC5jCnJlbmFtZSB0byBhZGRydG9zdHIuYwppbmRleCA4YzZmN2ViLi45Mjg3NTYyIDEwMDY0NAotLS0gYS9taXNzaW5nL2luZXRfbnRvcC5jCisrKyBiL2FkZHJ0b3N0ci5jCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoYykgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBI9mdza29sYW4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBIw7Znc2tvbGFuCiAgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTcsNyArMTcsNyBAQAogICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CiAgKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEt1bmdsaWdhIFRla25pc2thCi0gKiAgICAgIEj2Z3Nrb2xhbiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KKyAqICAgICAgSMO2Z3Nrb2xhbiBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4KICAqCiAgKiA0LiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBJbnN0aXR1dGUgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzCiAgKiAgICBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUKQEAgLTQwLDkgKzQwLDExIEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKyNpbmNsdWRlICJhZGRydG9zdHIuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CiAKIC8qCiAgKgpAQCAtNTYsMTMgKzU4LDEyIEBACiAjZGVmaW5lIElOVDE2U1ogICAgIDIgICAgLyogd29yZCBzaXplICovCiAjZW5kaWYKIAotc3RhdGljIGNvbnN0IGNoYXIgKgotaW5ldF9udG9wX3Y0IChjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCitjb25zdCBjaGFyICoKK2FkZHJ0b3N0ciAoY29uc3Qgdm9pZCAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQogeworICAgIGNvbnN0IHVfY2hhciAqc3JjYWRkciA9IChjb25zdCB1X2NoYXIgKilzcmM7CiAgICAgY29uc3QgY2hhciBkaWdpdHNbXSA9ICIwMTIzNDU2Nzg5IjsKICAgICBpbnQgaTsKLSAgICBzdHJ1Y3QgaW5fYWRkciAqYWRkciA9IChzdHJ1Y3QgaW5fYWRkciAqKXNyYzsKLSAgICB1X2xvbmcgYSA9IG50b2hsKGFkZHItPnNfYWRkcik7CiAgICAgY29uc3QgY2hhciAqb3JpZ19kc3QgPSBkc3Q7CiAKICAgICBpZiAoc2l6ZSA8IElORVRfQUREUlNUUkxFTikgewpAQCAtNzAsNyArNzEsNyBAQAogCXJldHVybiBOVUxMOwogICAgIH0KICAgICBmb3IgKGkgPSAwOyBpIDwgNDsgKytpKSB7Ci0JaW50IG4gPSAoYSA+PiAoMjQgLSBpICogOCkpICYgMHhGRjsKKyAgICAJaW50IG4gPSAqc3JjYWRkcisrOwogCWludCBub25femVyb3AgPSAwOwogCiAJaWYgKG5vbl96ZXJvcCB8fCBuIC8gMTAwID4gMCkgewpAQCAtOTEsMTIgKzkyLDExIEBACiAgICAgcmV0dXJuIG9yaWdfZHN0OwogfQogCi0jaWZkZWYgSU5FVDYKIC8qCiAgKiBDb252ZXJ0IElQdjYgYmluYXJ5IGFkZHJlc3MgaW50byBwcmVzZW50YXRpb24gKHByaW50YWJsZSkgZm9ybWF0LgogICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1pbmV0X250b3BfdjYgKGNvbnN0IHVfY2hhciAqc3JjLCBjaGFyICpkc3QsIHNpemVfdCBzaXplKQorY29uc3QgY2hhciAqCithZGRydG9zdHI2IChjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpCiB7CiAgIC8qCiAgICAqIE5vdGUgdGhhdCBpbnQzMl90IGFuZCBpbnQxNl90IG5lZWQgb25seSBiZSAiYXQgbGVhc3QiIGxhcmdlIGVub3VnaApAQCAtMTA1LDE0ICsxMDUsMTYgQEAKICAgICogS2VlcCB0aGlzIGluIG1pbmQgaWYgeW91IHRoaW5rIHRoaXMgZnVuY3Rpb24gc2hvdWxkIGhhdmUgYmVlbiBjb2RlZAogICAgKiB0byB1c2UgcG9pbnRlciBvdmVybGF5cy4gIEFsbCB0aGUgd29ybGQncyBub3QgYSBWQVguCiAgICAqLwotICBjaGFyICB0bXAgW0lORVQ2X0FERFJTVFJMRU4rMV07Ci0gIGNoYXIgKnRwOworICBjb25zdCB1X2NoYXIgKnNyY2FkZHIgPSAoY29uc3QgdV9jaGFyICopc3JjOworICBjaGFyICpkcDsKKyAgc2l6ZV90IHNwYWNlX2xlZnQsIGFkZGVkX3NwYWNlOworICBpbnQgc25wcmludGZlZDsKICAgc3RydWN0IHsKICAgICBsb25nIGJhc2U7CiAgICAgbG9uZyBsZW47CiAgIH0gYmVzdCwgY3VyOwogICB1X2xvbmcgd29yZHMgW0lONkFERFJTWiAvIElOVDE2U1pdOwotICBpbnQgICAgaTsKKyAgdV9pbnQgIGk7CiAKICAgLyogUHJlcHJvY2VzczoKICAgICogIENvcHkgdGhlIGlucHV0IChieXRld2lzZSkgYXJyYXkgaW50byBhIHdvcmR3aXNlIGFycmF5LgpAQCAtMTIwLDcgKzEyMiw3IEBACiAgICAqLwogICBtZW1zZXQgKHdvcmRzLCAwLCBzaXplb2Yod29yZHMpKTsKICAgZm9yIChpID0gMDsgaSA8IElONkFERFJTWjsgaSsrKQotICAgICAgd29yZHNbaS8yXSB8PSAoc3JjW2ldIDw8ICgoMSAtIChpICUgMikpIDw8IDMpKTsKKyAgICAgIHdvcmRzW2kvMl0gfD0gKHNyY2FkZHJbaV0gPDwgKCgxIC0gKGkgJSAyKSkgPDwgMykpOwogCiAgIGJlc3QubGVuID0gMDsKICAgYmVzdC5iYXNlID0gLTE7CkBAIC0xNDgsNyArMTUwLDE3IEBACiAKICAgLyogRm9ybWF0IHRoZSByZXN1bHQuCiAgICAqLwotICB0cCA9IHRtcDsKKyAgZHAgPSBkc3Q7CisgIHNwYWNlX2xlZnQgPSBzaXplOworI2RlZmluZSBBUFBFTkRfQ0hBUihjKSBcCisgICAgeyBcCisgICAgICAgIGlmIChzcGFjZV9sZWZ0ID09IDApIHsgXAorICAgICAgICAgICAgZXJybm8gPSBFTk9TUEM7IFwKKyAgICAgICAgICAgIHJldHVybiAoTlVMTCk7IFwKKyAgICAgICAgfSBcCisgICAgICAgICpkcCsrID0gYzsgXAorICAgICAgICBzcGFjZV9sZWZ0LS07IFwKKyAgICB9CiAgIGZvciAoaSA9IDA7IGkgPCAoSU42QUREUlNaIC8gSU5UMTZTWik7IGkrKykKICAgewogICAgIC8qIEFyZSB3ZSBpbnNpZGUgdGhlIGJlc3QgcnVuIG9mIDB4MDAncz8KQEAgLTE1Niw2MSArMTY4LDQ3IEBACiAgICAgaWYgKGJlc3QuYmFzZSAhPSAtMSAmJiBpID49IGJlc3QuYmFzZSAmJiBpIDwgKGJlc3QuYmFzZSArIGJlc3QubGVuKSkKICAgICB7CiAgICAgICBpZiAoaSA9PSBiZXN0LmJhc2UpCi0gICAgICAgICAqdHArKyA9ICc6JzsKKyAgICAgIAkgQVBQRU5EX0NIQVIoJzonKTsKICAgICAgIGNvbnRpbnVlOwogICAgIH0KIAogICAgIC8qIEFyZSB3ZSBmb2xsb3dpbmcgYW4gaW5pdGlhbCBydW4gb2YgMHgwMHMgb3IgYW55IHJlYWwgaGV4PwogICAgICAqLwogICAgIGlmIChpICE9IDApCi0gICAgICAgKnRwKysgPSAnOic7CisgICAgICAgQVBQRU5EX0NIQVIoJzonKTsKIAogICAgIC8qIElzIHRoaXMgYWRkcmVzcyBhbiBlbmNhcHN1bGF0ZWQgSVB2ND8KICAgICAgKi8KICAgICBpZiAoaSA9PSA2ICYmIGJlc3QuYmFzZSA9PSAwICYmCiAgICAgICAgIChiZXN0LmxlbiA9PSA2IHx8IChiZXN0LmxlbiA9PSA1ICYmIHdvcmRzWzVdID09IDB4ZmZmZikpKQogICAgIHsKLSAgICAgIGlmICghaW5ldF9udG9wX3Y0KHNyYysxMiwgdHAsIHNpemVvZih0bXApIC0gKHRwIC0gdG1wKSkpCisgICAgICBpZiAoIWFkZHJ0b3N0cihzcmNhZGRyKzEyLCBkcCwgc3BhY2VfbGVmdCkpCiAgICAgICB7CiAgICAgICAgIGVycm5vID0gRU5PU1BDOwogICAgICAgICByZXR1cm4gKE5VTEwpOwogICAgICAgfQotICAgICAgdHAgKz0gc3RybGVuKHRwKTsKKyAgICAgIGFkZGVkX3NwYWNlID0gc3RybGVuKGRwKTsKKyAgICAgIGRwICs9IGFkZGVkX3NwYWNlOworICAgICAgc3BhY2VfbGVmdCAtPSBhZGRlZF9zcGFjZTsKICAgICAgIGJyZWFrOwogICAgIH0KLSAgICB0cCArPSBzcHJpbnRmICh0cCwgIiVseCIsIHdvcmRzW2ldKTsKKyAgICBzbnByaW50ZmVkID0gc25wcmludGYgKGRwLCBzcGFjZV9sZWZ0LCAiJWx4Iiwgd29yZHNbaV0pOworICAgIGlmIChzbnByaW50ZmVkIDwgMCkKKyAgICAgICAgcmV0dXJuIChOVUxMKTsKKyAgICBpZiAoKHNpemVfdCkgc25wcmludGZlZCA+PSBzcGFjZV9sZWZ0KQorICAgIHsKKyAgICAgICAgZXJybm8gPSBFTk9TUEM7CisgICAgICAgIHJldHVybiAoTlVMTCk7CisgICAgfQorICAgIGRwICs9IHNucHJpbnRmZWQ7CisgICAgc3BhY2VfbGVmdCAtPSBzbnByaW50ZmVkOwogICB9CiAKICAgLyogV2FzIGl0IGEgdHJhaWxpbmcgcnVuIG9mIDB4MDAncz8KICAgICovCiAgIGlmIChiZXN0LmJhc2UgIT0gLTEgJiYgKGJlc3QuYmFzZSArIGJlc3QubGVuKSA9PSAoSU42QUREUlNaIC8gSU5UMTZTWikpCi0gICAgICp0cCsrID0gJzonOwotICAqdHArKyA9ICdcMCc7CisgICAgIEFQUEVORF9DSEFSKCc6Jyk7CisgIEFQUEVORF9DSEFSKCdcMCcpOwogCi0gIC8qIENoZWNrIGZvciBvdmVyZmxvdywgY29weSwgYW5kIHdlJ3JlIGRvbmUuCi0gICAqLwotICBpZiAoKHNpemVfdCkodHAgLSB0bXApID4gc2l6ZSkKLSAgewotICAgIGVycm5vID0gRU5PU1BDOwotICAgIHJldHVybiAoTlVMTCk7Ci0gIH0KLSAgcmV0dXJuIHN0cmNweSAoZHN0LCB0bXApOwotfQotI2VuZGlmICAgLyogSU5FVDYgKi8KLQotCi1jb25zdCBjaGFyICoKLWluZXRfbnRvcChpbnQgYWYsIGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSkKLXsKLSAgICBzd2l0Y2ggKGFmKSB7Ci0gICAgY2FzZSBBRl9JTkVUIDoKLQlyZXR1cm4gaW5ldF9udG9wX3Y0IChzcmMsIGRzdCwgc2l6ZSk7Ci0jaWZkZWYgSU5FVDYKLSAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgICAgcmV0dXJuIGluZXRfbnRvcF92NiAoKGNvbnN0IHVfY2hhciopc3JjLCBkc3QsIHNpemUpOwotI2VuZGlmCi0gICAgZGVmYXVsdCA6Ci0JZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JcmV0dXJuIE5VTEw7Ci0gICAgfQorICByZXR1cm4gKGRzdCk7CiB9CmRpZmYgLS1naXQgYS9taXNzaW5nL2luZXRfcHRvbi5jIGIvYWRkcnRvc3RyLmgKc2ltaWxhcml0eSBpbmRleCA4NSUKcmVuYW1lIGZyb20gbWlzc2luZy9pbmV0X3B0b24uYwpyZW5hbWUgdG8gYWRkcnRvc3RyLmgKaW5kZXggMzQ2NmY0Mi4uMmI5NWExNiAxMDA2NDQKLS0tIGEvbWlzc2luZy9pbmV0X3B0b24uYworKysgYi9hZGRydG9zdHIuaApAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkgS3VuZ2xpZ2EgVGVrbmlza2EgSO+/vWdza29sYW4KKyAqIENvcHlyaWdodCAoYykgMTk5OSBLdW5nbGlnYSBUZWtuaXNrYSBIw7Znc2tvbGFuCiAgKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMTcsNyArMTcsNyBAQAogICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCiAgKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CiAgKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIEt1bmdsaWdhIFRla25pc2thCi0gKiAgICAgIEjvv71nc2tvbGFuIGFuZCBpdHMgY29udHJpYnV0b3JzLgorICogICAgICBIw7Znc2tvbGFuIGFuZCBpdHMgY29udHJpYnV0b3JzLgogICoKICAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKICAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQpAQCAtMzYsMTQgKzM2LDcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorLyogQWRkcmVzcyB0byBwcmludGFibGUgc3RyaW5nIHRyYW5zbGF0aW9uIHJvdXRpbmVzLiAqLwogCi1pbnQKLWluZXRfcHRvbihpbnQgYWYsIGNvbnN0IGNoYXIgKnNyYywgdm9pZCAqZHN0KQotewotICAgIGlmIChhZiAhPSBBRl9JTkVUKSB7Ci0JZXJybm8gPSBFQUZOT1NVUFBPUlQ7Ci0JcmV0dXJuIC0xOwotICAgIH0KLSAgICByZXR1cm4gaW5ldF9hdG9uIChzcmMsIGRzdCk7Ci19CitleHRlcm4gY29uc3QgY2hhciAqYWRkcnRvc3RyKGNvbnN0IHZvaWQgKnNyYywgY2hhciAqZHN0LCBzaXplX3Qgc2l6ZSk7CitleHRlcm4gY29uc3QgY2hhciAqYWRkcnRvc3RyNihjb25zdCB2b2lkICpzcmMsIGNoYXIgKmRzdCwgc2l6ZV90IHNpemUpOwpkaWZmIC0tZ2l0IGEvYWYuYyBiL2FmLmMKaW5kZXggYmVhNmQ5Ny4uNTM5ZWRlNSAxMDA2NDQKLS0tIGEvYWYuYworKysgYi9hZi5jCkBAIC0xNSwxMyArMTUsMTIgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+Ci0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWYuaCIKIAogY29uc3Qgc3RydWN0IHRvayBhZl92YWx1ZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2FmLmggYi9hZi5oCmluZGV4IGJiZTFhMTYuLjFiZGU1NzcgMTAwNjQ0Ci0tLSBhL2FmLmgKKysrIGIvYWYuaApAQCAtNTAsNiArNTAsNiBAQAogI2RlZmluZSBCU0RfQUZOVU1fSVNPCQk3CiAjZGVmaW5lIEJTRF9BRk5VTV9BUFBMRVRBTEsJMTYKICNkZWZpbmUgQlNEX0FGTlVNX0lQWAkJMjMKLSNkZWZpbmUgQlNEX0FGTlVNX0lORVQ2X0JTRAkyNAkvKiBPcGVuQlNEIChhbmQgcHJvYmFibHkgTmV0QlNEKSwgQlNEL09TICovCi0jZGVmaW5lIEJTRF9BRk5VTV9JTkVUNl9GUkVFQlNECTI4Ci0jZGVmaW5lIEJTRF9BRk5VTV9JTkVUNl9EQVJXSU4JMzAKKyNkZWZpbmUgQlNEX0FGTlVNX0lORVQ2X0JTRAkyNAkvKiBOZXRCU0QsIE9wZW5CU0QsIEJTRC9PUywgTnBjYXAgKi8KKyNkZWZpbmUgQlNEX0FGTlVNX0lORVQ2X0ZSRUVCU0QJMjgJLyogRnJlZUJTRCAqLworI2RlZmluZSBCU0RfQUZOVU1fSU5FVDZfREFSV0lOCTMwCS8qIE9TIFgsIGlPUywgb3RoZXIgRGFyd2luLWJhc2VkIE9TZXMgKi8KZGlmZiAtLWdpdCBhL2FzY2lpX3N0cmNhc2VjbXAuYyBiL2FzY2lpX3N0cmNhc2VjbXAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGRlY2YxCi0tLSAvZGV2L251bGwKKysrIGIvYXNjaWlfc3RyY2FzZWNtcC5jCkBAIC0wLDAgKzEsMTA1IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg3IFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3JtcyBhcmUgcGVybWl0dGVkCisgKiBwcm92aWRlZCB0aGF0IHRoaXMgbm90aWNlIGlzIHByZXNlcnZlZCBhbmQgdGhhdCBkdWUgY3JlZGl0IGlzIGdpdmVuCisgKiB0byB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhIGF0IEJlcmtlbGV5LiBUaGUgbmFtZSBvZiB0aGUgVW5pdmVyc2l0eQorICogbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcworICogc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyB3cml0dGVuIHByaW9yIHBlcm1pc3Npb24uIFRoaXMgc29mdHdhcmUKKyAqIGlzIHByb3ZpZGVkIGBgYXMgaXMnJyB3aXRob3V0IGV4cHJlc3Mgb3IgaW1wbGllZCB3YXJyYW50eS4KKyAqLworCisjaW5jbHVkZSAiYXNjaWlfc3RyY2FzZWNtcC5oIgorCisvKgorICogVGhpcyBhcnJheSBtYXBzIHVwcGVyLWNhc2UgQVNDSUkgbGV0dGVycyB0byB0aGVpciBsb3dlci1jYXNlCisgKiBlcXVpdmFsZW50czsgYWxsIG90aGVyIGJ5dGUgdmFsdWVzIGFyZSBtYXBwZWQgdG8gdGhlbXNlbHZlcywKKyAqIHNvIHRoaXMgaXMgbG9jYWxlLWluZGVwZW5kZW50IGFuZCBpbnRlbmRlZCB0byBiZSBsb2NhbGUtaW5kZXBlbmRlbnQsCisgKiB0byBhdm9pZCBpc3N1ZXMgd2l0aCwgZm9yIGV4YW1wbGUsICJpIiBhbmQgIkkiIG5vdCBiZWluZyBsb3dlci1jYXNlCisgKiBhbmQgdXBwZXItY2FzZSB2ZXJzaW9ucyBvZiB0aGUgc2FtZSBsZXR0ZXIgaW4gVHVya2lzaCwgd2hlcmUKKyAqIHRoZXJlIGFyZSBzZXBhcmF0ZSAiaSB3aXRoIGRvdCIgYW5kICJpIHdpdGhvdXQgZG90IiBsZXR0ZXJzLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBjaGFybWFwW10gPSB7CisJMHgwMCwgMHgwMSwgMHgwMiwgMHgwMywgMHgwNCwgMHgwNSwgMHgwNiwgMHgwNywKKwkweDA4LCAweDA5LCAweDBhLCAweDBiLCAweDBjLCAweDBkLCAweDBlLCAweDBmLAorCTB4MTAsIDB4MTEsIDB4MTIsIDB4MTMsIDB4MTQsIDB4MTUsIDB4MTYsIDB4MTcsCisJMHgxOCwgMHgxOSwgMHgxYSwgMHgxYiwgMHgxYywgMHgxZCwgMHgxZSwgMHgxZiwKKwkweDIwLCAweDIxLCAweDIyLCAweDIzLCAweDI0LCAweDI1LCAweDI2LCAweDI3LAorCTB4MjgsIDB4MjksIDB4MmEsIDB4MmIsIDB4MmMsIDB4MmQsIDB4MmUsIDB4MmYsCisJMHgzMCwgMHgzMSwgMHgzMiwgMHgzMywgMHgzNCwgMHgzNSwgMHgzNiwgMHgzNywKKwkweDM4LCAweDM5LCAweDNhLCAweDNiLCAweDNjLCAweDNkLCAweDNlLCAweDNmLAorCTB4NDAsIDB4NjEsIDB4NjIsIDB4NjMsIDB4NjQsIDB4NjUsIDB4NjYsIDB4NjcsCisJMHg2OCwgMHg2OSwgMHg2YSwgMHg2YiwgMHg2YywgMHg2ZCwgMHg2ZSwgMHg2ZiwKKwkweDcwLCAweDcxLCAweDcyLCAweDczLCAweDc0LCAweDc1LCAweDc2LCAweDc3LAorCTB4NzgsIDB4NzksIDB4N2EsIDB4NWIsIDB4NWMsIDB4NWQsIDB4NWUsIDB4NWYsCisJMHg2MCwgMHg2MSwgMHg2MiwgMHg2MywgMHg2NCwgMHg2NSwgMHg2NiwgMHg2NywKKwkweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAorCTB4NzAsIDB4NzEsIDB4NzIsIDB4NzMsIDB4NzQsIDB4NzUsIDB4NzYsIDB4NzcsCisJMHg3OCwgMHg3OSwgMHg3YSwgMHg3YiwgMHg3YywgMHg3ZCwgMHg3ZSwgMHg3ZiwKKwkweDgwLCAweDgxLCAweDgyLCAweDgzLCAweDg0LCAweDg1LCAweDg2LCAweDg3LAorCTB4ODgsIDB4ODksIDB4OGEsIDB4OGIsIDB4OGMsIDB4OGQsIDB4OGUsIDB4OGYsCisJMHg5MCwgMHg5MSwgMHg5MiwgMHg5MywgMHg5NCwgMHg5NSwgMHg5NiwgMHg5NywKKwkweDk4LCAweDk5LCAweDlhLCAweDliLCAweDljLCAweDlkLCAweDllLCAweDlmLAorCTB4YTAsIDB4YTEsIDB4YTIsIDB4YTMsIDB4YTQsIDB4YTUsIDB4YTYsIDB4YTcsCisJMHhhOCwgMHhhOSwgMHhhYSwgMHhhYiwgMHhhYywgMHhhZCwgMHhhZSwgMHhhZiwKKwkweGIwLCAweGIxLCAweGIyLCAweGIzLCAweGI0LCAweGI1LCAweGI2LCAweGI3LAorCTB4YjgsIDB4YjksIDB4YmEsIDB4YmIsIDB4YmMsIDB4YmQsIDB4YmUsIDB4YmYsCisJMHhjMCwgMHhjMSwgMHhjMiwgMHhjMywgMHhjNCwgMHhjNSwgMHhjNiwgMHhjNywKKwkweGM4LCAweGM5LCAweGNhLCAweGNiLCAweGNjLCAweGNkLCAweGNlLCAweGNmLAorCTB4ZDAsIDB4ZDEsIDB4ZDIsIDB4ZDMsIDB4ZDQsIDB4ZDUsIDB4ZDYsIDB4ZDcsCisJMHhkOCwgMHhkOSwgMHhkYSwgMHhkYiwgMHhkYywgMHhkZCwgMHhkZSwgMHhkZiwKKwkweGUwLCAweGUxLCAweGUyLCAweGUzLCAweGU0LCAweGU1LCAweGU2LCAweGU3LAorCTB4ZTgsIDB4ZTksIDB4ZWEsIDB4ZWIsIDB4ZWMsIDB4ZWQsIDB4ZWUsIDB4ZWYsCisJMHhmMCwgMHhmMSwgMHhmMiwgMHhmMywgMHhmNCwgMHhmNSwgMHhmNiwgMHhmNywKKwkweGY4LCAweGY5LCAweGZhLCAweGZiLCAweGZjLCAweGZkLCAweGZlLCAweGZmLAorfTsKKworaW50Cithc2NpaV9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKnMxLCBjb25zdCBjaGFyICpzMikKK3sKKwlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpjbSA9IGNoYXJtYXAsCisJCQkqdXMxID0gKGNvbnN0IHVuc2lnbmVkIGNoYXIgKilzMSwKKwkJCSp1czIgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXMyOworCisJd2hpbGUgKGNtWyp1czFdID09IGNtWyp1czIrK10pCisJCWlmICgqdXMxKysgPT0gJ1wwJykKKwkJCXJldHVybigwKTsKKwlyZXR1cm4oY21bKnVzMV0gLSBjbVsqLS11czJdKTsKK30KKworaW50Cithc2NpaV9zdHJuY2FzZWNtcChjb25zdCBjaGFyICpzMSwgY29uc3QgY2hhciAqczIsIHJlZ2lzdGVyIHNpemVfdCBuKQoreworCXJlZ2lzdGVyIGNvbnN0IHVuc2lnbmVkIGNoYXIgKmNtID0gY2hhcm1hcCwKKwkJCSp1czEgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKXMxLAorCQkJKnVzMiA9IChjb25zdCB1bnNpZ25lZCBjaGFyICopczI7CisKKwlmb3IgKDs7KSB7CisJCWlmIChuID09IDApIHsKKwkJCS8qCisJCQkgKiBXZSd2ZSBydW4gb3V0IG9mIGNoYXJhY3RlcnMgdGhhdCB3ZSBzaG91bGQKKwkJCSAqIGNvbXBhcmUsIGFuZCB0aGV5J3ZlIGFsbCBiZWVuIGVxdWFsOyByZXR1cm4KKwkJCSAqIDAsIHRvIGluZGljYXRlIHRoYXQgdGhlIHByZWZpeGVzIGFyZSB0aGUKKwkJCSAqIHNhbWUuCisJCQkgKi8KKwkJCXJldHVybigwKTsKKwkJfQorCQlpZiAoY21bKnVzMV0gIT0gY21bKnVzMisrXSkgeworCQkJLyoKKwkJCSAqIFdlJ3ZlIGZvdW5kIGEgbWlzbWF0Y2guCisJCQkgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmICgqdXMxKysgPT0gJ1wwJykgeworCQkJLyoKKwkJCSAqIFdlJ3ZlIHJ1biBvdXQgb2YgY2hhcmFjdGVycyAqdG8qIGNvbXBhcmUsCisJCQkgKiBhbmQgdGhleSd2ZSBhbGwgYmVlbiBlcXVhbDsgcmV0dXJuIDAsIHRvCisJCQkgKiBpbmRpY2F0ZSB0aGF0IHRoZSBzdHJpbmdzIGFyZSB0aGUgc2FtZS4KKwkJCSAqLworCQkJcmV0dXJuKDApOworCQl9CisJCW4tLTsKKwl9CisJcmV0dXJuKGNtWyp1czFdIC0gY21bKi0tdXMyXSk7Cit9CmRpZmYgLS1naXQgYS9hc2NpaV9zdHJjYXNlY21wLmggYi9hc2NpaV9zdHJjYXNlY21wLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Y4ZGRiOQotLS0gL2Rldi9udWxsCisrKyBiL2FzY2lpX3N0cmNhc2VjbXAuaApAQCAtMCwwICsxLDMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LTE5OTcKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIENvcHlyaWdodCAoYykgMTk5OC0yMDEyICBNaWNoYWVsIFJpY2hhcmRzb24gPG1jckB0Y3BkdW1wLm9yZz4KKyAqICAgICAgVGhlIFRDUERVTVAgcHJvamVjdAorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCisgKiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCisgKiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZworICogZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAorICogTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCisgKiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorICogb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisjaWZuZGVmIG5ldGRpc3NlY3RfYXNjaWlfc3RyY2FzZWNtcF9oCisjZGVmaW5lIG5ldGRpc3NlY3RfYXNjaWlfc3RyY2FzZWNtcF9oCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKworZXh0ZXJuIGludCBhc2NpaV9zdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKK2V4dGVybiBpbnQgYXNjaWlfc3RybmNhc2VjbXAoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIHNpemVfdCk7CisKKyNlbmRpZiAvKiBuZXRkaXNzZWN0X2FzY2lpX3N0cmNhc2VjbXBfaCAqLwpkaWZmIC0tZ2l0IGEvYXRtdW5pMzEuaCBiL2F0bXVuaTMxLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDBmODU0MzAuLjAwMDAwMDAKLS0tIGEvYXRtdW5pMzEuaAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTcgWWVuIFllbiBMaW0gYW5kIE5vcnRoIERha290YSBTdGF0ZSBVbml2ZXJzaXR5Ci0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gQWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlCi0gKiAgICBtdXN0IGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6Ci0gKiAgICAgIFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgWWVuIFllbiBMaW0gYW5kCi0gICAgICAgIE5vcnRoIERha290YSBTdGF0ZSBVbml2ZXJzaXR5Ci0gKiA0LiBUaGUgbmFtZSBvZiB0aGUgYXV0aG9yIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMKLSAqICAgIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIEFVVEhPUiBgYEFTIElTJycgQU5EIEFOWSBFWFBSRVNTIE9SCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAotICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQotICogRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBBVVRIT1IgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULAotICogSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCi0gKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IKLSAqIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULAotICogU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOCi0gKiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUKLSAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLS8qIEJhc2VkIG9uIFVOSTMuMSBzdGFuZGFyZCBieSBBVE0gRm9ydW0gKi8KLQotLyogQVRNIHRyYWZmaWMgdHlwZXMgYmFzZWQgb24gVlBJPTAgYW5kICh0aGUgZm9sbG93aW5nIFZDSSAqLwotI2RlZmluZSBWQ0lfUFBDCQkJMHgwNQkvKiBQb2ludC10by1wb2ludCBzaWduYWwgbXNnICovCi0jZGVmaW5lIFZDSV9CQ0MJCQkweDAyCS8qIEJyb2FkY2FzdCBzaWduYWwgbXNnICovCi0jZGVmaW5lIFZDSV9PQU1GNFNDCQkweDAzCS8qIFNlZ21lbnQgT0FNIEY0IGZsb3cgY2VsbCAqLwotI2RlZmluZSBWQ0lfT0FNRjRFQwkJMHgwNAkvKiBFbmQtdG8tZW5kIE9BTSBGNCBmbG93IGNlbGwgKi8KLSNkZWZpbmUgVkNJX01FVEFDCQkweDAxCS8qIE1ldGEgc2lnbmFsIG1zZyAqLwotI2RlZmluZSBWQ0lfSUxNSUMJCTB4MTAJLyogSUxNSSBtc2cgKi8KLQotLyogUS4yOTMxIHNpZ25hbGxpbmcgbWVzc2FnZXMgKi8KLSNkZWZpbmUgQ0FMTF9QUk9DRUVECQkweDAyCS8qIGNhbGwgcHJvY2VlZGluZyAqLwotI2RlZmluZSBDT05ORUNUCQkJMHgwNwkvKiBjb25uZWN0ICovCi0jZGVmaW5lIENPTk5FQ1RfQUNLCQkweDBmCS8qIGNvbm5lY3RfYWNrICovCi0jZGVmaW5lIFNFVFVQCQkJMHgwNQkvKiBzZXR1cCAqLwotI2RlZmluZSBSRUxFQVNFCQkJMHg0ZAkvKiByZWxlYXNlICovCi0jZGVmaW5lIFJFTEVBU0VfRE9ORQkJMHg1YQkvKiByZWxlYXNlX2RvbmUgKi8KLSNkZWZpbmUgUkVTVEFSVAkJCTB4NDYJLyogcmVzdGFydCAqLwotI2RlZmluZSBSRVNUQVJUX0FDSwkJMHg0ZQkvKiByZXN0YXJ0IGFjayAqLwotI2RlZmluZSBTVEFUVVMJCQkweDdkCS8qIHN0YXR1cyAqLwotI2RlZmluZSBTVEFUVVNfRU5RCQkweDc1CS8qIHN0YXR1cyBhY2sgKi8KLSNkZWZpbmUgQUREX1BBUlRZCQkweDgwCS8qIGFkZCBwYXJ0eSAqLwotI2RlZmluZSBBRERfUEFSVFlfQUNLCQkweDgxCS8qIGFkZCBwYXJ0eSBhY2sgKi8KLSNkZWZpbmUgQUREX1BBUlRZX1JFSgkJMHg4MgkvKiBhZGQgcGFydHkgcmVqICovCi0jZGVmaW5lIERST1BfUEFSVFkJCTB4ODMJLyogZHJvcCBwYXJ0eSAqLwotI2RlZmluZSBEUk9QX1BBUlRZX0FDSwkJMHg4NAkvKiBkcm9wIHBhcnR5IGFjayAqLwotCi0vKiBJbmZvcm1hdGlvbiBFbGVtZW50IFBhcmFtZXRlcnMgaW4gdGhlIHNpZ25hbGxpbmcgbWVzc2FnZXMgKi8KLSNkZWZpbmUgQ0FVU0UJCQkweDA4CS8qIGNhdXNlICovCi0jZGVmaW5lIEVORFBUX1JFRgkJMHg1NAkvKiBlbmRwb2ludCByZWZlcmVuY2UgKi8KLSNkZWZpbmUgQUFMX1BBUkEJCTB4NTgJLyogQVRNIGFkYXB0YXRpb24gbGF5ZXIgcGFyYW1ldGVycyAqLwotI2RlZmluZSBUUkFGRl9ERVNDUklQCQkweDU5CS8qIGF0bSB0cmFmZmljIGRlc2NyaXB0b3JzICovCi0jZGVmaW5lIENPTk5FQ1RfSUQJCTB4NWEJLyogY29ubmVjdGlvbiBpZGVudGlmaWVyICovCi0jZGVmaW5lIFFPU19QQVJBCQkweDVjCS8qIHF1YWxpdHkgb2Ygc2VydmljZSBwYXJhbWV0ZXJzICovCi0jZGVmaW5lIEJfSElHSEVSCQkweDVkCS8qIGJyb2FkYmFuZCBoaWdoZXIgbGF5ZXIgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUgQl9CRUFSRVIJCTB4NWUJLyogYnJvYWRiYW5kIGJlYXJlciBjYXBhYmlsaXR5ICovCi0jZGVmaW5lIEJfTE9XRVIJCQkweDVmCS8qIGJyb2FkYmFuZCBsb3dlciBpbmZvcm1hdGlvbiAqLwotI2RlZmluZSBDQUxMSU5HX1BBUlRZCQkweDZjCS8qIGNhbGxpbmcgcGFydHkgbnVtYmVyICovCi0jZGVmaW5lIENBTExFRF9QQVJUWQkJMHg3MAkvKiBjYWxsZWQgcGFydHkgbm1iZXIgKi8KLQotI2RlZmluZSBRMjkzMQkJCTB4MDkKLQotLyogUS4yOTMxIHNpZ25hbGxpbmcgZ2VuZXJhbCBtZXNzYWdlcyBmb3JtYXQgKi8KLSNkZWZpbmUgUFJPVE9fUE9TICAgICAgIDAJLyogb2Zmc2V0IG9mIHByb3RvY29sIGRpc2NyaW1pbmF0b3IgKi8KLSNkZWZpbmUgQ0FMTF9SRUZfUE9TICAgIDIJLyogb2Zmc2V0IG9mIGNhbGwgcmVmZXJlbmNlIHZhbHVlICovCi0jZGVmaW5lIE1TR19UWVBFX1BPUyAgICA1CS8qIG9mZnNldCBvZiBtZXNzYWdlIHR5cGUgKi8KLSNkZWZpbmUgTVNHX0xFTl9QT1MgICAgIDcJLyogb2Zmc2V0IG9mIG1lc2FnZSBsZW5ndGggKi8KLSNkZWZpbmUgSUVfQkVHSU5fUE9TICAgIDkJLyogb2Zmc2V0IG9mIGZpcnN0IGluZm9ybWF0aW9uIGVsZW1lbnQgKi8KLQotLyogZm9ybWF0IG9mIHNpZ25hbGxpbmcgbWVzc2FnZXMgKi8KLSNkZWZpbmUgVFlQRV9QT1MJMAotI2RlZmluZSBMRU5fUE9TCQkyCi0jZGVmaW5lIEZJRUxEX0JFR0lOX1BPUyA0CmRpZmYgLS1naXQgYS9icGZfZHVtcC5jIGIvYnBmX2R1bXAuYwppbmRleCAyZWY4NTI4Li45YmFkMzhkIDEwMDY0NAotLS0gYS9icGZfZHVtcC5jCisrKyBiL2JwZl9kdW1wLmMKQEAgLTE5LDE2ICsxOSwxNSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAKIHZvaWQKIGJwZl9kdW1wKGNvbnN0IHN0cnVjdCBicGZfcHJvZ3JhbSAqcCwgaW50IG9wdGlvbikKZGlmZiAtLWdpdCBhL2NoZWNrc3VtLmMgYi9jaGVja3N1bS5jCmluZGV4IGQ4MjYzYzcuLjA4MjlmYmUgMTAwNjQ0Ci0tLSBhL2NoZWNrc3VtLmMKKysrIGIvY2hlY2tzdW0uYwpAQCAtMTcsMTkgKzE3LDE4IEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPGFzc2VydC5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAvKgogICogQ1JDLTEwIHRhYmxlIGdlbmVyYXRlZCB1c2luZyB0aGUgZm9sbG93aW5nIFB5dGhvbiBzbmlwcGV0OgpAQCAtMTQ2LDE3ICsxNDUsMTcgQEAKICAgICB1aW50MzJfdCBjMDsKICAgICB1aW50MzJfdCBjMTsKICAgICB1aW50MTZfdCBjaGVja3N1bTsKLSAgICBpbnQgaW5kZXg7CisgICAgaW50IGlkeDsKIAogICAgIGMwID0gMDsKICAgICBjMSA9IDA7CiAKLSAgICBmb3IgKGluZGV4ID0gMDsgaW5kZXggPCBsZW5ndGg7IGluZGV4KyspIHsKKyAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IGxlbmd0aDsgaWR4KyspIHsKICAgICAgICAgLyoKICAgICAgICAgICogSWdub3JlIHRoZSBjb250ZW50cyBvZiB0aGUgY2hlY2tzdW0gZmllbGQuCiAgICAgICAgICAqLwotICAgICAgICBpZiAoaW5kZXggPT0gY2hlY2tzdW1fb2Zmc2V0IHx8Ci0gICAgICAgICAgICBpbmRleCA9PSBjaGVja3N1bV9vZmZzZXQrMSkgeworICAgICAgICBpZiAoaWR4ID09IGNoZWNrc3VtX29mZnNldCB8fAorICAgICAgICAgICAgaWR4ID09IGNoZWNrc3VtX29mZnNldCsxKSB7CiAgICAgICAgICAgICBjMSArPSBjMDsKICAgICAgICAgICAgIHBwdHIrKzsKICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2NvbmZpZy5oIGIvY29uZmlnLmgKaW5kZXggNWE1ZDhjZS4uZDdlYjAxZiAxMDA2NDQKLS0tIGEvY29uZmlnLmgKKysrIGIvY29uZmlnLmgKQEAgLTEsOCArMSw4IEBACiAvKiBjb25maWcuaC4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZy5oLmluIGJ5IGNvbmZpZ3VyZS4gICovCiAvKiBjb25maWcuaC5pbi4gIEdlbmVyYXRlZCBmcm9tIGNvbmZpZ3VyZS5pbiBieSBhdXRvaGVhZGVyLiAgKi8KIAotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBhZGRyaW5mbyBmdW5jdGlvbiAqLwotI2RlZmluZSBIQVZFX0FERFJJTkZPIDEKKy8qIGRlZmluZSBpZiB5b3Ugd2FudCB0byBidWlsZCB0aGUgcG9zc2libHktYnVnZ3kgU01CIHByaW50ZXIgKi8KKyNkZWZpbmUgRU5BQkxFX1NNQiAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgYWxhcm0nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX0FMQVJNIDEKQEAgLTEwLDkgKzEwLDI0IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGJwZl9kdW1wJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9CUEZfRFVNUCAxCiAKKy8qIGNhcHNpY3VtIHN1cHBvcnQgYXZhaWxhYmxlICovCisvKiAjdW5kZWYgSEFWRV9DQVBTSUNVTSAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNhcF9lbnRlcicgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9DQVBfRU5URVIgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBjYXBfaW9jdGxzX2xpbWl0JyBmdW5jdGlvbi4gKi8KKy8qICN1bmRlZiBIQVZFX0NBUF9JT0NUTFNfTElNSVQgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxjYXAtbmcuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9DQVBfTkdfSCAqLworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNhcF9yaWdodHNfbGltaXQnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfQ0FQX1JJR0hUU19MSU1JVCAqLworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgZGVjbGFyYXRpb24gb2YgYGV0aGVyX250b2hvc3QnLCBhbmQgdG8gMCBpZiB5b3UKICAgIGRvbid0LiAqLwotLyogI3VuZGVmIEhBVkVfREVDTF9FVEhFUl9OVE9IT1NUICovCisjZGVmaW5lIEhBVkVfREVDTF9FVEhFUl9OVE9IT1NUIDAKIAogLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBkbmV0X2h0b2EgZnVuY3Rpb24gKi8KIC8qICN1bmRlZiBIQVZFX0RORVRfSFRPQSAqLwpAQCAtMjAsMzMgKzM1LDMzIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGV0aGVyX250b2hvc3QnIGZ1bmN0aW9uLiAqLwogLyogI3VuZGVmIEhBVkVfRVRIRVJfTlRPSE9TVCAqLwogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYEVWUF9DSVBIRVJfQ1RYX25ldycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfRVZQX0NJUEhFUl9DVFhfTkVXIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxmY250bC5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9GQ05UTF9IIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBmb3JrJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9GT1JLIDEKIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRuYW1laW5mbycgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfR0VUTkFNRUlORk8gMQorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBnZXRvcHRfbG9uZycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfR0VUT1BUX0xPTkcgMQogCiAvKiBkZWZpbmUgaWYgeW91IGhhdmUgZ2V0cnBjYnludW1iZXIoKSAqLwotLyogI3VuZGVmIEhBVkVfR0VUUlBDQllOVU1CRVIgKi8KLQotLyogZGVmaW5lIGlmIHlvdSBoYXZlIHRoZSBoX2Vycm5vIHZhcmlhYmxlICovCi0jZGVmaW5lIEhBVkVfSF9FUlJOTyAxCisjZGVmaW5lIEhBVkVfR0VUUlBDQllOVU1CRVIgMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX0lOVFRZUEVTX0ggMQogCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGNhcC1uZycgbGlicmFyeSAoLWxjYXAtbmcpLiAqLworLyogI3VuZGVmIEhBVkVfTElCQ0FQX05HICovCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgY3J5cHRvJyBsaWJyYXJ5ICgtbGNyeXB0bykuICovCiAjZGVmaW5lIEhBVkVfTElCQ1JZUFRPIDEKIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBycGMnIGxpYnJhcnkgKC1scnBjKS4gKi8KIC8qICN1bmRlZiBIQVZFX0xJQlJQQyAqLwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNtaScgbGlicmFyeSAoLWxzbWkpLiAqLwotLyogI3VuZGVmIEhBVkVfTElCU01JICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8bWVtb3J5Lmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX01FTU9SWV9IIDEKIApAQCAtNjIsMTIgKzc3LDIxIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfTkVUSU5FVF9JRl9FVEhFUl9IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWZfcGZsb2cuaD4gaGVhZGVyIGZpbGUuICovCisvKiAjdW5kZWYgSEFWRV9ORVRfSUZfUEZMT0dfSCAqLworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9wZnZhci5oPiBoZWFkZXIgZmlsZS4gKi8KIC8qICN1bmRlZiBIQVZFX05FVF9QRlZBUl9IICovCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgb3BlbmF0JyBmdW5jdGlvbi4gKi8KKyNkZWZpbmUgSEFWRV9PUEVOQVQgMQorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG9wZW5zc2wvZXZwLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX09QRU5TU0xfRVZQX0ggMQogCisvKiBkZWZpbmUgaWYgdGhlIE9TIHByb3ZpZGVzIEFGX0lORVQ2IGFuZCBzdHJ1Y3QgaW42X2FkZHIgKi8KKyNkZWZpbmUgSEFWRV9PU19JUFY2X1NVUFBPUlQgMQorCiAvKiBpZiB0aGVyZSdzIGFuIG9zX3Byb3RvLmggZm9yIHRoaXMgcGxhdGZvcm0sIHRvIHVzZSBhZGRpdGlvbmFsIHByb3RvdHlwZXMgKi8KIC8qICN1bmRlZiBIQVZFX09TX1BST1RPX0ggKi8KIApAQCAtOTgsNiArMTIyLDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9maW5kYWxsZGV2cycgZnVuY3Rpb24uICovCiAjZGVmaW5lIEhBVkVfUENBUF9GSU5EQUxMREVWUyAxCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9mcmVlX2RhdGFsaW5rcycgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUENBUF9GUkVFX0RBVEFMSU5LUyAxCisKIC8qIERlZmluZSB0byAxIGlmIHRoZSBzeXN0ZW0gaGFzIHRoZSB0eXBlIGBwY2FwX2lmX3QnLiAqLwogI2RlZmluZSBIQVZFX1BDQVBfSUZfVCAxCiAKQEAgLTExMyw5ICsxNDAsMjEgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9zZXRkaXJlY3Rpb24nIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1BDQVBfU0VURElSRUNUSU9OIDEKIAotLyogZGVmaW5lIGlmIGxpYnBjYXAgaGFzIHBjYXBfc2V0X2RhdGFsaW5rKCkgKi8KKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9zZXRfZGF0YWxpbmsnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1BDQVBfU0VUX0RBVEFMSU5LIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZScgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUENBUF9TRVRfSU1NRURJQVRFX01PREUgMQorCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBjYXBfc2V0X29wdGltaXplcl9kZWJ1ZycgZnVuY3Rpb24uICovCisvKiAjdW5kZWYgSEFWRV9QQ0FQX1NFVF9PUFRJTUlaRVJfREVCVUcgKi8KKworLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwY2FwX3NldF9wYXJzZXJfZGVidWcnIGZ1bmN0aW9uLiAqLworLyogI3VuZGVmIEhBVkVfUENBUF9TRVRfUEFSU0VSX0RFQlVHICovCisKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9zZXRfdHN0YW1wX3ByZWNpc2lvbicgZnVuY3Rpb24uICovCisjZGVmaW5lIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTiAxCisKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9zZXRfdHN0YW1wX3R5cGUnIGZ1bmN0aW9uLiAqLwogI2RlZmluZSBIQVZFX1BDQVBfU0VUX1RTVEFNUF9UWVBFIDEKIApAQCAtMTMyLDcgKzE3MSw3IEBACiAvKiAjdW5kZWYgSEFWRV9SUENfUlBDRU5UX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxycGMvcnBjLmg+IGhlYWRlciBmaWxlLiAqLwotI2RlZmluZSBIQVZFX1JQQ19SUENfSCAxCisvKiAjdW5kZWYgSEFWRV9SUENfUlBDX0ggKi8KIAogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBzZXRsaW5lYnVmJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TRVRMSU5FQlVGIDEKQEAgLTE0MywyNyArMTgyLDE4IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNpZ3NldCcgZnVuY3Rpb24uICovCiAvKiAjdW5kZWYgSEFWRV9TSUdTRVQgKi8KIAotLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzbWkuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9TTUlfSCAqLwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHNucHJpbnRmJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TTlBSSU5URiAxCiAKIC8qIGlmIHN0cnVjdCBzb2NrYWRkciBoYXMgdGhlIHNhX2xlbiBtZW1iZXIgKi8KIC8qICN1bmRlZiBIQVZFX1NPQ0tBRERSX1NBX0xFTiAqLwogCi0vKiBkZWZpbmUgaWYgeW91IGhhdmUgc3RydWN0IHNvY2thZGRyX3N0b3JhZ2UgKi8KLSNkZWZpbmUgSEFWRV9TT0NLQUREUl9TVE9SQUdFIDEKLQogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxzdGRpbnQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1RESU5UX0ggMQogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KICNkZWZpbmUgSEFWRV9TVERMSUJfSCAxCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCi0jZGVmaW5lIEhBVkVfU1RSQ0FTRUNNUCAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICNkZWZpbmUgSEFWRV9TVFJEVVAgMQogCkBAIC0xODgsMTUgKzIxOCwxNSBAQAogLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHN0cnVjdCBldGhlcl9hZGRyJy4gKi8KIC8qICN1bmRlZiBIQVZFX1NUUlVDVF9FVEhFUl9BRERSICovCiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL2JpdHlwZXMuaD4gaGVhZGVyIGZpbGUuICovCi0vKiAjdW5kZWYgSEFWRV9TWVNfQklUWVBFU19IICovCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3N0YXQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfU1lTX1NUQVRfSCAxCiAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8c3lzL3R5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI2RlZmluZSBIQVZFX1NZU19UWVBFU19IIDEKIAorLyogRGVmaW5lIHRvIDEgaWYgdGhlIHN5c3RlbSBoYXMgdGhlIHR5cGUgYHVpbnRwdHJfdCcuICovCisjZGVmaW5lIEhBVkVfVUlOVFBUUl9UIDEKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDx1bmlzdGQuaD4gaGVhZGVyIGZpbGUuICovCiAjZGVmaW5lIEhBVkVfVU5JU1REX0ggMQogCkBAIC0yMTUsMTggKzI0NSw5IEBACiAvKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMgX19hdHRyaWJ1dGVfXyAqLwogI2RlZmluZSBIQVZFX19fQVRUUklCVVRFX18gMQogCi0vKiBEZWZpbmUgaWYgeW91IGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KLSNkZWZpbmUgSU5FVDYgMQotCiAvKiBpZiB1bmFsaWduZWQgYWNjZXNzIGZhaWxzICovCiAvKiAjdW5kZWYgTEJMX0FMSUdOICovCiAKLS8qIERlZmluZSBpZiB5b3UgZW5hYmxlIHN1cHBvcnQgZm9yIGxpYnNtaSAqLwotLyogI3VuZGVmIExJQlNNSSAqLwotCi0vKiBkZWZpbmUgaWYgeW91IG5lZWQgdG8gaW5jbHVkZSBtaXNzaW5nL2FkZHJpbmZvLmggKi8KLS8qICN1bmRlZiBORUVEX0FERFJJTkZPX0ggKi8KLQogLyogRGVmaW5lIHRvIDEgaWYgbmV0aW5ldC9ldGhlci5oIGRlY2xhcmVzIGBldGhlcl9udG9ob3N0JyAqLwogLyogI3VuZGVmIE5FVElORVRfRVRIRVJfSF9ERUNMQVJFU19FVEhFUl9OVE9IT1NUICovCiAKQEAgLTI3MiwxNSArMjkzLDE1IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICNkZWZpbmUgU1REQ19IRUFERVJTIDEKIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBwb3NzaWJseS1idWdneSBTTUIgcHJpbnRlciAqLwotI2RlZmluZSBUQ1BEVU1QX0RPX1NNQiAxCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwogI2RlZmluZSBUSU1FX1dJVEhfU1lTX1RJTUUgMQogCiAvKiBkZWZpbmUgaWYgeW91IGhhdmUgZXRoZXJfbnRvaG9zdCgpIGFuZCBpdCB3b3JrcyAqLwogLyogI3VuZGVmIFVTRV9FVEhFUl9OVE9IT1NUICovCiAKKy8qIERlZmluZSBpZiB5b3UgZW5hYmxlIHN1cHBvcnQgZm9yIGxpYnNtaSAqLworLyogI3VuZGVmIFVTRV9MSUJTTUkgKi8KKwogLyogZGVmaW5lIGlmIHNob3VsZCBjaHJvb3Qgd2hlbiBkcm9wcGluZyBwcml2aWxlZ2VzICovCiAvKiAjdW5kZWYgV0lUSF9DSFJPT1QgKi8KIApAQCAtMzQxLDE2ICszNjIsMTYgQEAKICAgIGEgdHlwZSBleGlzdHMgYW5kIHRoZSBzdGFuZGFyZCBpbmNsdWRlcyBkbyBub3QgZGVmaW5lIGl0LiAqLwogLyogI3VuZGVmIGludDhfdCAqLwogCi0vKiBEZWZpbmUgdG8gYHVuc2lnbmVkIHNob3J0JyBpZiB1X2ludDE2X3Qgbm90IGRlZmluZWQuICovCisvKiBEZWZpbmUgdG8gYHVpbnQxNl90JyBpZiB1X2ludDE2X3Qgbm90IGRlZmluZWQuICovCiAvKiAjdW5kZWYgdV9pbnQxNl90ICovCiAKLS8qIERlZmluZSB0byBgdW5zaWduZWQgaW50JyBpZiB1X2ludDMyX3Qgbm90IGRlZmluZWQuICovCisvKiBEZWZpbmUgdG8gYHVpbnQzMl90JyBpZiB1X2ludDMyX3Qgbm90IGRlZmluZWQuICovCiAvKiAjdW5kZWYgdV9pbnQzMl90ICovCiAKLS8qIERlZmluZSB0byBgdW5zaWduZWQgbG9uZyBsb25nJyBpZiB1X2ludDY0X3Qgbm90IGRlZmluZWQuICovCisvKiBEZWZpbmUgdG8gYHVpbnQ2NF90JyBpZiB1X2ludDY0X3Qgbm90IGRlZmluZWQuICovCiAvKiAjdW5kZWYgdV9pbnQ2NF90ICovCiAKLS8qIERlZmluZSB0byBgdW5zaWduZWQgY2hhcicgaWYgdV9pbnQ4X3Qgbm90IGRlZmluZWQuICovCisvKiBEZWZpbmUgdG8gYHVpbnQ4X3QnIGlmIHVfaW50OF90IG5vdCBkZWZpbmVkLiAqLwogLyogI3VuZGVmIHVfaW50OF90ICovCiAKIC8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSAxNiBiaXRzIGlmCkBAIC0zNjgsMyArMzg5LDcgQEAKIC8qIERlZmluZSB0byB0aGUgdHlwZSBvZiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgb2Ygd2lkdGggZXhhY3RseSA4IGJpdHMgaWYKICAgIHN1Y2ggYSB0eXBlIGV4aXN0cyBhbmQgdGhlIHN0YW5kYXJkIGluY2x1ZGVzIGRvIG5vdCBkZWZpbmUgaXQuICovCiAvKiAjdW5kZWYgdWludDhfdCAqLworCisvKiBEZWZpbmUgdG8gdGhlIHR5cGUgb2YgYW4gdW5zaWduZWQgaW50ZWdlciB0eXBlIHdpZGUgZW5vdWdoIHRvIGhvbGQgYQorICAgcG9pbnRlciwgaWYgc3VjaCBhIHR5cGUgZXhpc3RzLCBhbmQgaWYgdGhlIHN5c3RlbSBkb2VzIG5vdCBkZWZpbmUgaXQuICovCisvKiAjdW5kZWYgdWludHB0cl90ICovCmRpZmYgLS1naXQgYS9jb25maWcuaC5pbiBiL2NvbmZpZy5oLmluCmluZGV4IDkxNDI4OWEuLjI3YmE0YjEgMTAwNjQ0Ci0tLSBhL2NvbmZpZy5oLmluCisrKyBiL2NvbmZpZy5oLmluCkBAIC0xLDcgKzEsNyBAQAogLyogY29uZmlnLmguaW4uICBHZW5lcmF0ZWQgZnJvbSBjb25maWd1cmUuaW4gYnkgYXV0b2hlYWRlci4gICovCiAKLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgYWRkcmluZm8gZnVuY3Rpb24gKi8KLSN1bmRlZiBIQVZFX0FERFJJTkZPCisvKiBkZWZpbmUgaWYgeW91IHdhbnQgdG8gYnVpbGQgdGhlIHBvc3NpYmx5LWJ1Z2d5IFNNQiBwcmludGVyICovCisjdW5kZWYgRU5BQkxFX1NNQgogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGFsYXJtJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX0FMQVJNCkBAIC0zNCwyNCArMzQsMjEgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZXRoZXJfbnRvaG9zdCcgZnVuY3Rpb24uICovCiAjdW5kZWYgSEFWRV9FVEhFUl9OVE9IT1NUCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgRVZQX0NJUEhFUl9DVFhfbmV3JyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX0VWUF9DSVBIRVJfQ1RYX05FVworCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGZjbnRsLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfRkNOVExfSAogCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGZvcmsnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfRk9SSwogCi0vKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYGdldG5hbWVpbmZvJyBmdW5jdGlvbi4gKi8KLSN1bmRlZiBIQVZFX0dFVE5BTUVJTkZPCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgZ2V0b3B0X2xvbmcnIGZ1bmN0aW9uLiAqLwogI3VuZGVmIEhBVkVfR0VUT1BUX0xPTkcKIAogLyogZGVmaW5lIGlmIHlvdSBoYXZlIGdldHJwY2J5bnVtYmVyKCkgKi8KICN1bmRlZiBIQVZFX0dFVFJQQ0JZTlVNQkVSCiAKLS8qIGRlZmluZSBpZiB5b3UgaGF2ZSB0aGUgaF9lcnJubyB2YXJpYWJsZSAqLwotI3VuZGVmIEhBVkVfSF9FUlJOTwotCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPGludHR5cGVzLmg+IGhlYWRlciBmaWxlLiAqLwogI3VuZGVmIEhBVkVfSU5UVFlQRVNfSAogCkBAIC03OSw2ICs3Niw5IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldGluZXQvaWZfZXRoZXIuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9ORVRJTkVUX0lGX0VUSEVSX0gKIAorLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIDxuZXQvaWZfcGZsb2cuaD4gaGVhZGVyIGZpbGUuICovCisjdW5kZWYgSEFWRV9ORVRfSUZfUEZMT0dfSAorCiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPG5ldC9wZnZhci5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX05FVF9QRlZBUl9ICiAKQEAgLTg4LDYgKzg4LDkgQEAKIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSA8b3BlbnNzbC9ldnAuaD4gaGVhZGVyIGZpbGUuICovCiAjdW5kZWYgSEFWRV9PUEVOU1NMX0VWUF9ICiAKKy8qIGRlZmluZSBpZiB0aGUgT1MgcHJvdmlkZXMgQUZfSU5FVDYgYW5kIHN0cnVjdCBpbjZfYWRkciAqLworI3VuZGVmIEhBVkVfT1NfSVBWNl9TVVBQT1JUCisKIC8qIGlmIHRoZXJlJ3MgYW4gb3NfcHJvdG8uaCBmb3IgdGhpcyBwbGF0Zm9ybSwgdG8gdXNlIGFkZGl0aW9uYWwgcHJvdG90eXBlcyAqLwogI3VuZGVmIEhBVkVfT1NfUFJPVE9fSAogCkBAIC0xNDIsNiArMTQ1LDEyIEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBjYXBfc2V0X2ltbWVkaWF0ZV9tb2RlJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BDQVBfU0VUX0lNTUVESUFURV9NT0RFCiAKKy8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgcGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnJyBmdW5jdGlvbi4gKi8KKyN1bmRlZiBIQVZFX1BDQVBfU0VUX09QVElNSVpFUl9ERUJVRworCisvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgYHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZycgZnVuY3Rpb24uICovCisjdW5kZWYgSEFWRV9QQ0FQX1NFVF9QQVJTRVJfREVCVUcKKwogLyogRGVmaW5lIHRvIDEgaWYgeW91IGhhdmUgdGhlIGBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1BDQVBfU0VUX1RTVEFNUF9QUkVDSVNJT04KIApAQCAtMTg0LDkgKzE5Myw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgPHN0ZGxpYi5oPiBoZWFkZXIgZmlsZS4gKi8KICN1bmRlZiBIQVZFX1NURExJQl9ICiAKLS8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyY2FzZWNtcCcgZnVuY3Rpb24uICovCi0jdW5kZWYgSEFWRV9TVFJDQVNFQ01QCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBoYXZlIHRoZSBgc3RyZHVwJyBmdW5jdGlvbi4gKi8KICN1bmRlZiBIQVZFX1NUUkRVUAogCkBAIC0yMzgsMTUgKzI0NCw5IEBACiAvKiBkZWZpbmUgaWYgeW91ciBjb21waWxlciBoYXMgX19hdHRyaWJ1dGVfXyAqLwogI3VuZGVmIEhBVkVfX19BVFRSSUJVVEVfXwogCi0vKiBEZWZpbmUgaWYgeW91IGVuYWJsZSBJUHY2IHN1cHBvcnQgKi8KLSN1bmRlZiBJTkVUNgotCiAvKiBpZiB1bmFsaWduZWQgYWNjZXNzIGZhaWxzICovCiAjdW5kZWYgTEJMX0FMSUdOCiAKLS8qIGRlZmluZSBpZiB5b3UgbmVlZCB0byBpbmNsdWRlIG1pc3NpbmcvYWRkcmluZm8uaCAqLwotI3VuZGVmIE5FRURfQUREUklORk9fSAotCiAvKiBEZWZpbmUgdG8gMSBpZiBuZXRpbmV0L2V0aGVyLmggZGVjbGFyZXMgYGV0aGVyX250b2hvc3QnICovCiAjdW5kZWYgTkVUSU5FVF9FVEhFUl9IX0RFQ0xBUkVTX0VUSEVSX05UT0hPU1QKIApAQCAtMjkyLDkgKzI5Miw2IEBACiAvKiBEZWZpbmUgdG8gMSBpZiB5b3UgaGF2ZSB0aGUgQU5TSSBDIGhlYWRlciBmaWxlcy4gKi8KICN1bmRlZiBTVERDX0hFQURFUlMKIAotLyogZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBwb3NzaWJseS1idWdneSBTTUIgcHJpbnRlciAqLwotI3VuZGVmIFRDUERVTVBfRE9fU01CCi0KIC8qIERlZmluZSB0byAxIGlmIHlvdSBjYW4gc2FmZWx5IGluY2x1ZGUgYm90aCA8c3lzL3RpbWUuaD4gYW5kIDx0aW1lLmg+LiAqLwogI3VuZGVmIFRJTUVfV0lUSF9TWVNfVElNRQogCmRpZmYgLS1naXQgYS9jb25maWd1cmUgYi9jb25maWd1cmUKaW5kZXggNDNiMzA2OC4uMDNjNjljNSAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtNzA0LDcgKzcwNCw2IEBACiB3aXRoX3VzZXIKIHdpdGhfY2hyb290CiB3aXRoX3NhbmRib3hfY2Fwc2ljdW0KLWVuYWJsZV9pcHY2CiB3aXRoX3N5c3RlbV9saWJwY2FwCiB3aXRoX2NyeXB0bwogd2l0aF9jYXBfbmcKQEAgLTEzMzIsOCArMTMzMSw2IEBACiAgIC0tZGlzYWJsZS11bml2ZXJzYWwgICAgIGRvbid0IGJ1aWxkIHVuaXZlcnNhbCBvbiBPUyBYCiAgIC0tZW5hYmxlLXNtYiAgICAgICAgICAgIGVuYWJsZSBwb3NzaWJseS1idWdneSBTTUIgcHJpbnRlciBkZWZhdWx0PXllcwogICAtLWRpc2FibGUtc21iICAgICAgICAgICBkaXNhYmxlIHBvc3NpYmx5LWJ1Z2d5IFNNQiBwcmludGVyCi0gIC0tZW5hYmxlLWlwdjYgICAgICAgICAgIGVuYWJsZSBpcHY2ICh3aXRoIGlwdjQpIHN1cHBvcnQKLSAgLS1kaXNhYmxlLWlwdjYgICAgICAgICAgZGlzYWJsZSBpcHY2IHN1cHBvcnQKIAogT3B0aW9uYWwgUGFja2FnZXM6CiAgIC0td2l0aC1QQUNLQUdFWz1BUkddICAgIHVzZSBQQUNLQUdFIFtBUkc9eWVzXQpAQCAtMTM0Niw3ICsxMzQzLDggQEAKICAgLS13aXRoLXNhbmRib3gtY2Fwc2ljdW0gdXNlIENhcHNpY3VtIHNlY3VyaXR5IGZ1bmN0aW9ucyBbZGVmYXVsdD15ZXMsIGlmCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2YWlsYWJsZV0KICAgLS13aXRoLXN5c3RlbS1saWJwY2FwICAgZG9uJ3QgdXNlIGxvY2FsIHBjYXAgbGlicmFyeQotICAtLXdpdGgtY3J5cHRvICAgICAgICAgICB1c2UgT3BlblNTTCBsaWJjcnlwdG8gW2RlZmF1bHQ9eWVzLCBpZiBhdmFpbGFibGVdCisgIC0td2l0aC1jcnlwdG9bPURJUl0gICAgIHVzZSBPcGVuU1NML2xpYnJlc3NsIGxpYmNyeXB0byAobG9jYXRlZCBpbiBkaXJlY3RvcnkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgRElSLCBpZiBzcGVjaWZpZWQpIFtkZWZhdWx0PXllcywgaWYgYXZhaWxhYmxlXQogICAtLXdpdGgtY2FwLW5nICAgICAgICAgICB1c2UgbGliY2FwLW5nIFtkZWZhdWx0PXllcywgaWYgYXZhaWxhYmxlXQogCiBTb21lIGluZmx1ZW50aWFsIGVudmlyb25tZW50IHZhcmlhYmxlczoKQEAgLTMzNTIsNyArMzM1MCwxOCBAQAogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1mZmxvYXQtc3RvcmUgb3B0aW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtZmZsb2F0LXN0b3JlIG9wdGlvbi4uLiAiID4mNjsgfQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCUNGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIC1mZmxvYXQtc3RvcmUiCisJaWYgZXhwciAieC1mZmxvYXQtc3RvcmUiIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1mZmxvYXQtc3RvcmUiCisJZWxpZiBleHByICJ4LWZmbG9hdC1zdG9yZSIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1mZmxvYXQtc3RvcmUiCisJZWxpZiBleHByICJ4LWZmbG9hdC1zdG9yZSIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1mZmxvYXQtc3RvcmUiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLWZmbG9hdC1zdG9yZSIKKwlmaQogCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIApAQCAtNDIxMyw3ICs0MjIyLDI1IEBACiBkb25lCiAKIGlmIHRlc3QgIiRhY19jdl9oZWFkZXJfbmV0X3BmdmFyX2giID0geWVzOyB0aGVuCi0JTE9DQUxTUkM9InByaW50LXBmbG9nLmMgJExPQ0FMU1JDIgorCWZvciBhY19oZWFkZXIgaW4gbmV0L2lmX3BmbG9nLmgKK2RvIDoKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgIm5ldC9pZl9wZmxvZy5oIiAiYWNfY3ZfaGVhZGVyX25ldF9pZl9wZmxvZ19oIiAiI2luY2x1ZGUgPHN5cy90eXBlcy5oPgorCSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisJI2luY2x1ZGUgPG5ldC9pZi5oPgorCSNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KKyIKK2lmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX25ldF9pZl9wZmxvZ19oIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfTkVUX0lGX1BGTE9HX0ggMQorX0FDRU9GCisKK2ZpCisKK2RvbmUKKworCWlmIHRlc3QgIiRhY19jdl9oZWFkZXJfbmV0X2lmX3BmbG9nX2giID0geWVzOyB0aGVuCisJCUxPQ0FMU1JDPSJwcmludC1wZmxvZy5jICRMT0NBTFNSQyIKKwlmaQogZmkKIGZvciBhY19oZWFkZXIgaW4gbmV0aW5ldC9pZl9ldGhlci5oCiBkbyA6CkBAIC00NDc0LDcgKzQ1MDEsNyBAQAogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogV0FSTklORzogVGhlIFNNQiBwcmludGVyIG1heSBoYXZlIGV4cGxvaXRhYmxlIGJ1ZmZlciBvdmVyZmxvd3MhISEiID4mNQogJGFzX2VjaG8gIiRhc19tZTogV0FSTklORzogVGhlIFNNQiBwcmludGVyIG1heSBoYXZlIGV4cGxvaXRhYmxlIGJ1ZmZlciBvdmVyZmxvd3MhISEiID4mMjt9CiAKLSRhc19lY2hvICIjZGVmaW5lIFRDUERVTVBfRE9fU01CIDEiID4+Y29uZmRlZnMuaAorJGFzX2VjaG8gIiNkZWZpbmUgRU5BQkxFX1NNQiAxIiA+PmNvbmZkZWZzLmgKIAogCUxPQ0FMU1JDPSJwcmludC1zbWIuYyBzbWJ1dGlsLmMgJExPQ0FMU1JDIgogCTs7CkBAIC00NTc2LDkgKzQ2MDMsOSBAQAogZmkKIAogIwotIyBXZSBtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIGNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIElQdjYsIGJlY2F1c2UsCi0jIG9uIHNvbWUgcGxhdGZvcm1zIChzdWNoIGFzIFN1bk9TIDUueCksIHRoZSB0ZXN0IHByb2dyYW0gcmVxdWlyZXMKLSMgdGhlIGV4dHJhIG5ldHdvcmtpbmcgbGlicmFyaWVzLgorIyBXZSBtdXN0IGNoZWNrIHRoaXMgYmVmb3JlIGNoZWNraW5nIHdoZXRoZXIgdG8gY2hlY2sgdGhlIE9TJ3MgSVB2NiwKKyMgc3VwcG9ydCBiZWNhdXNlLCBvbiBzb21lIHBsYXRmb3JtcyAoc3VjaCBhcyBTdW5PUyA1LngpLCB0aGUgdGVzdAorIyBwcm9ncmFtIHJlcXVpcmVzIHRoZSBleHRyYSBuZXR3b3JraW5nIGxpYnJhcmllcy4KICMKIAogICAgICMgTW9zdCBvcGVyYXRpbmcgc3lzdGVtcyBoYXZlIGdldGhvc3RieW5hbWUoKSBpbiB0aGUgZGVmYXVsdCBzZWFyY2hlZApAQCAtNDg0MiwzMCArNDg2OSwxOSBAQAogCiAKIAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIGVuYWJsZSBpcHY2IiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gZW5hYmxlIGlwdjYuLi4gIiA+JjY7IH0KLSMgQ2hlY2sgd2hldGhlciAtLWVuYWJsZS1pcHY2IHdhcyBnaXZlbi4KLWlmIHRlc3QgIiR7ZW5hYmxlX2lwdjYrc2V0fSIgPSBzZXQ7IHRoZW4gOgotICBlbmFibGV2YWw9JGVuYWJsZV9pcHY2OyAgY2FzZSAiJGVuYWJsZXZhbCIgaW4KLXllcykgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotICAgICAgIExPQ0FMU1JDPSJwcmludC1pcDZvcHRzLmMgcHJpbnQtbW9iaWxpdHkuYyBwcmludC1yaXBuZy5jIHByaW50LWljbXA2LmMgcHJpbnQtZnJhZzYuYyBwcmludC1ydDYuYyBwcmludC1vc3BmNi5jIHByaW50LWRoY3A2LmMgcHJpbnQtYmFiZWwuYyAkTE9DQUxTUkMiCi0KLSRhc19lY2hvICIjZGVmaW5lIElORVQ2IDEiID4+Y29uZmRlZnMuaAotCi0gICAgICAgaXB2Nj15ZXMKLSAgICAgICA7OwotKikKLSAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLSAgICAgICBpcHY2PW5vCi0gICAgICAgOzsKLSAgZXNhYwotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisjCisjIENoZWNrIHdoZXRoZXIgQUZfSU5FVDYgYW5kIHN0cnVjdCBpbjZfYWRkciBhcmUgZGVmaW5lZC4KKyMgSWYgdGhleSBhcmVuJ3QgYm90aCBkZWZpbmVkLCB3ZSBkb24ndCBoYXZlIHN1ZmZpY2llbnQgT1MKKyMgc3VwcG9ydCBmb3IgSVB2Niwgc28gd2UgZG9uJ3QgbG9vayBmb3IgSVB2NiBzdXBwb3J0IGxpYnJhcmllcywKKyMgYW5kIHdlIGRlZmluZSBBRl9JTkVUNiBhbmQgc3RydWN0IGluNl9hZGRyIG91cnNlbHZlcy4KKyMKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBJUHY2IiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIG9wZXJhdGluZyBzeXN0ZW0gc3VwcG9ydHMgSVB2Ni4uLiAiID4mNjsgfQorY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCi0gICAgICAvKiBBRl9JTkVUNiBhdmFpbGFibGUgY2hlY2sgKi8KKworLyogQUZfSU5FVDYgYXZhaWxhYmxlIGNoZWNrICovCiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CiAjaW5jbHVkZSA8c3lzL3NvY2tldC5oPgogI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KQEAgLTQ4ODIsMjEgKzQ4OTgsMjMgQEAKIAogX0FDRU9GCiBpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9Ci0gIExPQ0FMU1JDPSJwcmludC1pcDZvcHRzLmMgcHJpbnQtbW9iaWxpdHkuYyBwcmludC1yaXBuZy5jIHByaW50LWljbXA2LmMgcHJpbnQtZnJhZzYuYyBwcmludC1ydDYuYyBwcmludC1vc3BmNi5jIHByaW50LWRoY3A2LmMgcHJpbnQtYmFiZWwuYyAkTE9DQUxTUkMiCiAKLSRhc19lY2hvICIjZGVmaW5lIElORVQ2IDEiID4+Y29uZmRlZnMuaAorJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9PU19JUFY2X1NVUFBPUlQgMSIgPj5jb25mZGVmcy5oCiAKLSAgaXB2Nj15ZXMKKwlpcHY2PXllcworCiBlbHNlCi0gICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9Ci0gIGlwdjY9bm8KKwlpcHY2PW5vCisKKwogZmkKIHJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQogCiBpcHY2dHlwZT11bmtub3duCiBpcHY2bGliPW5vbmUKQEAgLTQ5MTcsOCArNDkzNSw3IEBACiBfQUNFT0YKIGlmIChldmFsICIkYWNfY3BwIGNvbmZ0ZXN0LiRhY19leHQiKSAyPiY1IHwKICAgJEVHUkVQICJ5ZXMiID4vZGV2L251bGwgMj4mMTsgdGhlbiA6Ci0gIGlwdjZ0eXBlPSRpOwotCQkJCUNGTEFHUz0iLURJTkVUNiAkQ0ZMQUdTIgorICBpcHY2dHlwZT0kaQogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogCkBAIC00OTM2LDggKzQ5NTMsNyBAQAogICBpcHY2dHlwZT0kaTsKIAkJCQlpcHY2bGliPWluZXQ2OwogCQkJCWlwdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJaXB2NnRyeWxpYmM9eWVzOwotCQkJCUNGTEFHUz0iLURJTkVUNiAkQ0ZMQUdTIgorCQkJCWlwdjZ0cnlsaWJjPXllcwogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogCkBAIC00OTUyLDggKzQ5NjgsNyBAQAogX0FDRU9GCiBpZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8CiAgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBpcHY2dHlwZT0kaTsKLQkJCQlDRkxBR1M9Ii1ESU5FVDYgJENGTEFHUyIKKyAgaXB2NnR5cGU9JGkKIGZpCiBybSAtZiBjb25mdGVzdCoKIApAQCAtNDk2NCw3ICs0OTc5LDcgQEAKIAkJCQlpcHY2bGliPWluZXQ2CiAJCQkJaXB2NmxpYmRpcj0vdXNyL2luZXQ2L2xpYgogCQkJCWlwdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ESU5FVDYgLUkvdXNyL2luZXQ2L2luY2x1ZGUgJENGTEFHUyIKKwkJCQlDRkxBR1M9Ii1JL3Vzci9pbmV0Ni9pbmNsdWRlICRDRkxBR1MiCiAJCQlmaQogCQkJOzsKIAkJdG9zaGliYSkKQEAgLTQ5NzksOCArNDk5NCw3IEBACiAgICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgogICBpcHY2dHlwZT0kaTsKIAkJCQlpcHY2bGliPWluZXQ2OwotCQkJCWlwdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJQ0ZMQUdTPSItRElORVQ2ICRDRkxBR1MiCisJCQkJaXB2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYgogZmkKIHJtIC1mIGNvbmZ0ZXN0KgogCkBAIC01MDE1LDggKzUwMjksNyBAQAogICAkRUdSRVAgInllcyIgPi9kZXYvbnVsbCAyPiYxOyB0aGVuIDoKICAgaXB2NnR5cGU9JGk7CiAJCQkJaXB2NmxpYj1pbmV0NjsKLQkJCQlpcHY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCUNGTEFHUz0iLURJTkVUNiAkQ0ZMQUdTIgorCQkJCWlwdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWIKIGZpCiBybSAtZiBjb25mdGVzdCoKIApAQCAtNTA0NiwyMzkgKzUwNTksNiBAQAogCWZpCiBmaQogCi0KLWlmIHRlc3QgIiRpcHY2IiA9ICJ5ZXMiOyB0aGVuCi0JIwotCSMgWFhYIC0gb24gVHJ1NjQgVU5JWCA1LjEsIHRoZXJlIGlzIG5vICJnZXRhZGRyaW5mbygpIgotCSMgZnVuY3Rpb24gaW4gbGliYzsgdGhlcmUgYXJlICJuZ2V0YWRkcmluZm8oKSIgYW5kCi0JIyAib2dldGFkZHJpbmZvKCkiIGZ1bmN0aW9ucywgYW5kIDxuZXRkYi5oPiAjZGVmaW5lcwotCSMgImdldGFkZHJpbmZvIiB0byBiZSBlaXRoZXIgIm5nZXRhZGRyaW5mbyIgb3IKLQkjICJvZ2V0YWRkcmluZm8iLCBkZXBlbmRpbmcgb24gd2hldGhlciBfU09DS0FERFJfTEVOCi0JIyBvciBfWE9QRU5fU09VUkNFX0VYVEVOREVEIGFyZSBkZWZpbmVkIG9yIG5vdC4KLQkjCi0JIyBTbyB0aGlzIHRlc3QgZG9lc24ndCB3b3JrIG9uIFRydTY0IDUuMSwgYW5kIHBvc3NpYmx5Ci0JIyBvbiBvdGhlciA1LnggcmVsZWFzZXMuICBUaGlzIGNhdXNlcyB0aGUgY29uZmlndXJlCi0JIyBzY3JpcHQgdG8gYmVjb21lIGNvbmZ1c2VkLCBhbmQgcmVzdWx0cyBpbiBsaWJwY2FwCi0JIyBiZWluZyB1bmJ1aWxkYWJsZS4KLQkjCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgbGlicmFyeSBjb250YWluaW5nIGdldGFkZHJpbmZvIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBsaWJyYXJ5IGNvbnRhaW5pbmcgZ2V0YWRkcmluZm8uLi4gIiA+JjY7IH0KLWlmICR7YWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZvKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgYWNfZnVuY19zZWFyY2hfc2F2ZV9MSUJTPSRMSUJTCi1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLS8qIE92ZXJyaWRlIGFueSBHQ0MgaW50ZXJuYWwgcHJvdG90eXBlIHRvIGF2b2lkIGFuIGVycm9yLgotICAgVXNlIGNoYXIgYmVjYXVzZSBpbnQgbWlnaHQgbWF0Y2ggdGhlIHJldHVybiB0eXBlIG9mIGEgR0NDCi0gICBidWlsdGluIGFuZCB0aGVuIGl0cyBhcmd1bWVudCBwcm90b3R5cGUgd291bGQgc3RpbGwgYXBwbHkuICAqLwotI2lmZGVmIF9fY3BsdXNwbHVzCi1leHRlcm4gIkMiCi0jZW5kaWYKLWNoYXIgZ2V0YWRkcmluZm8gKCk7Ci1pbnQKLW1haW4gKCkKLXsKLXJldHVybiBnZXRhZGRyaW5mbyAoKTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotZm9yIGFjX2xpYiBpbiAnJyBzb2NrZXQ7IGRvCi0gIGlmIHRlc3QgLXogIiRhY19saWIiOyB0aGVuCi0gICAgYWNfcmVzPSJub25lIHJlcXVpcmVkIgotICBlbHNlCi0gICAgYWNfcmVzPS1sJGFjX2xpYgotICAgIExJQlM9Ii1sJGFjX2xpYiAgJGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUyIKLSAgZmkKLSAgaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl9zZWFyY2hfZ2V0YWRkcmluZm89JGFjX3JlcwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgXAotICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dAotICBpZiAke2FjX2N2X3NlYXJjaF9nZXRhZGRyaW5mbys6fSBmYWxzZTsgdGhlbiA6Ci0gIGJyZWFrCi1maQotZG9uZQotaWYgJHthY19jdl9zZWFyY2hfZ2V0YWRkcmluZm8rOn0gZmFsc2U7IHRoZW4gOgotCi1lbHNlCi0gIGFjX2N2X3NlYXJjaF9nZXRhZGRyaW5mbz1ubwotZmkKLXJtIGNvbmZ0ZXN0LiRhY19leHQKLUxJQlM9JGFjX2Z1bmNfc2VhcmNoX3NhdmVfTElCUwotZmkKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZvIiA+JjUKLSRhc19lY2hvICIkYWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZvIiA+JjY7IH0KLWFjX3Jlcz0kYWNfY3Zfc2VhcmNoX2dldGFkZHJpbmZvCi1pZiB0ZXN0ICIkYWNfcmVzIiAhPSBubzsgdGhlbiA6Ci0gIHRlc3QgIiRhY19yZXMiID0gIm5vbmUgcmVxdWlyZWQiIHx8IExJQlM9IiRhY19yZXMgJExJQlMiCi0gIAl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGdldGFkZHJpbmZvIGJ1ZyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBnZXRhZGRyaW5mbyBidWcuLi4gIiA+JjY7IH0KLQlpZiAke3RkX2N2X2J1Z2d5Z2V0YWRkcmluZm8rOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBpZiB0ZXN0ICIkY3Jvc3NfY29tcGlsaW5nIiA9IHllczsgdGhlbiA6Ci0gIHRkX2N2X2J1Z2d5Z2V0YWRkcmluZm89dW5rbm93bgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0KLW1haW4oKQotewotICBpbnQgcGFzc2l2ZSwgZ2FpZXJyLCBpbmV0NCA9IDAsIGluZXQ2ID0gMDsKLSAgc3RydWN0IGFkZHJpbmZvIGhpbnRzLCAqYWksICphaXRvcDsKLSAgY2hhciBzdHJhZGRyW0lORVQ2X0FERFJTVFJMRU5dLCBzdHJwb3J0WzE2XTsKLQotICBmb3IgKHBhc3NpdmUgPSAwOyBwYXNzaXZlIDw9IDE7IHBhc3NpdmUrKykgewotICAgIG1lbXNldCgmaGludHMsIDAsIHNpemVvZihoaW50cykpOwotICAgIGhpbnRzLmFpX2ZhbWlseSA9IEFGX1VOU1BFQzsKLSAgICBoaW50cy5haV9mbGFncyA9IHBhc3NpdmUgPyBBSV9QQVNTSVZFIDogMDsKLSAgICBoaW50cy5haV9zb2NrdHlwZSA9IFNPQ0tfU1RSRUFNOwotICAgIGhpbnRzLmFpX3Byb3RvY29sID0gSVBQUk9UT19UQ1A7Ci0gICAgaWYgKChnYWllcnIgPSBnZXRhZGRyaW5mbyhOVUxMLCAiNTQzMjEiLCAmaGludHMsICZhaXRvcCkpICE9IDApIHsKLSAgICAgICh2b2lkKWdhaV9zdHJlcnJvcihnYWllcnIpOwotICAgICAgZ290byBiYWQ7Ci0gICAgfQotICAgIGZvciAoYWkgPSBhaXRvcDsgYWk7IGFpID0gYWktPmFpX25leHQpIHsKLSAgICAgIGlmIChhaS0+YWlfYWRkciA9PSBOVUxMIHx8Ci0gICAgICAgICAgYWktPmFpX2FkZHJsZW4gPT0gMCB8fAotICAgICAgICAgIGdldG5hbWVpbmZvKGFpLT5haV9hZGRyLCBhaS0+YWlfYWRkcmxlbiwKLSAgICAgICAgICAgICAgICAgICAgICBzdHJhZGRyLCBzaXplb2Yoc3RyYWRkciksIHN0cnBvcnQsIHNpemVvZihzdHJwb3J0KSwKLSAgICAgICAgICAgICAgICAgICAgICBOSV9OVU1FUklDSE9TVHxOSV9OVU1FUklDU0VSVikgIT0gMCkgewotICAgICAgICBnb3RvIGJhZDsKLSAgICAgIH0KLSAgICAgIHN3aXRjaCAoYWktPmFpX2ZhbWlseSkgewotICAgICAgY2FzZSBBRl9JTkVUOgotICAgICAgICBpZiAoc3RyY21wKHN0cnBvcnQsICI1NDMyMSIpICE9IDApIHsKLSAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFzc2l2ZSkgewotICAgICAgICAgIGlmIChzdHJjbXAoc3RyYWRkciwgIjAuMC4wLjAiKSAhPSAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgaWYgKHN0cmNtcChzdHJhZGRyLCAiMTI3LjAuMC4xIikgIT0gMCkgewotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9Ci0gICAgICAgIGluZXQ0Kys7Ci0gICAgICAgIGJyZWFrOwotICAgICAgY2FzZSBBRl9JTkVUNjoKLSAgICAgICAgaWYgKHN0cmNtcChzdHJwb3J0LCAiNTQzMjEiKSAhPSAwKSB7Ci0gICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIH0KLSAgICAgICAgaWYgKHBhc3NpdmUpIHsKLSAgICAgICAgICBpZiAoc3RyY21wKHN0cmFkZHIsICI6OiIpICE9IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoc3RyY21wKHN0cmFkZHIsICI6OjEiKSAhPSAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5ldDYrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEFGX1VOU1BFQzoKLSAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgIGJyZWFrOwotI2lmZGVmIEFGX1VOSVgKLSAgICAgIGNhc2UgQUZfVU5JWDoKLSNlbHNlCi0jaWZkZWYgQUZfTE9DQUwKLSAgICAgIGNhc2UgQUZfTE9DQUw6Ci0jZW5kaWYKLSNlbmRpZgotICAgICAgZGVmYXVsdDoKLSAgICAgICAgLyogYW5vdGhlciBmYW1pbHkgc3VwcG9ydD8gKi8KLSAgICAgICAgYnJlYWs7Ci0gICAgICB9Ci0gICAgfQotICB9Ci0KLSAgLyogc3VwcG9ydGVkIGZhbWlseSBzaG91bGQgYmUgMiwgdW5zdXBwb3J0ZWQgZmFtaWx5IHNob3VsZCBiZSAwICovCi0gIGlmICghKGluZXQ0ID09IDAgfHwgaW5ldDQgPT0gMikpCi0gICAgZ290byBiYWQ7Ci0gIGlmICghKGluZXQ2ID09IDAgfHwgaW5ldDYgPT0gMikpCi0gICAgZ290byBiYWQ7Ci0KLSAgaWYgKGFpdG9wKQotICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMCk7Ci0KLSBiYWQ6Ci0gIGlmIChhaXRvcCkKLSAgICBmcmVlYWRkcmluZm8oYWl0b3ApOwotICBleGl0KDEpOwotfQotCi1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X3J1biAiJExJTkVOTyI7IHRoZW4gOgotICB0ZF9jdl9idWdneWdldGFkZHJpbmZvPW5vCi1lbHNlCi0gIHRkX2N2X2J1Z2d5Z2V0YWRkcmluZm89eWVzCi1maQotcm0gLWYgY29yZSAqLmNvcmUgY29yZS5jb25mdGVzdC4qIGdtb24ub3V0IGJiLm91dCBjb25mdGVzdCRhY19leGVleHQgXAotICBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LmJlYW0gY29uZnRlc3QuJGFjX2V4dAotZmkKLQotZmkKLQotCWlmIHRlc3QgIiR0ZF9jdl9idWdneWdldGFkZHJpbmZvIiA9IG5vOyB0aGVuCi0JCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBnb29kIiA+JjUKLSRhc19lY2hvICJnb29kIiA+JjY7IH0KLQllbGlmIHRlc3QgIiR0ZF9jdl9idWdneWdldGFkZHJpbmZvIiA9IHVua25vd247IHRoZW4KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHVua25vd24gKGNyb3NzLWNvbXBpbGluZykiID4mNQotJGFzX2VjaG8gInVua25vd24gKGNyb3NzLWNvbXBpbGluZykiID4mNjsgfQotCWVsc2UKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IGJ1Z2d5IiA+JjUKLSRhc19lY2hvICJidWdneSIgPiY2OyB9Ci0JZmkKLQotCWlmIHRlc3QgIiR0ZF9jdl9idWdneWdldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCi0JCSMKLQkJIyBYWFggLSBpdCBkb2Vzbid0IGFwcGVhciB0aGF0ICJpcHY2dHlwZSIgY2FuIGV2ZXIgYmUKLQkJIyBzZXQgdG8gImxpbnV4Ii4gIFNob3VsZCB0aGlzIGJlIHRlc3RpbmcgZm9yCi0JCSMgImxpbnV4LWdsaWJjIiwgb3IgZm9yIHRoYXQgKm9yKiAibGludXgtbGliaW5ldDYiPwotCQkjIElmIHRoZSBsYXR0ZXIsIG5vdGUgdGhhdCAibGludXgtbGliaW5ldDYiIGlzIGFsc28KLQkJIyB0aGUgdHlwZSBnaXZlbiB0byBzb21lIG5vbi1MaW51eCBPU2VzLgotCQkjCi0JCWlmIHRlc3QgIiRpcHY2dHlwZSIgIT0gImxpbnV4IjsgdGhlbgotCQkJZWNobyAnRmF0YWw6IFlvdSBtdXN0IGdldCB3b3JraW5nIGdldGFkZHJpbmZvKCkgZnVuY3Rpb24uJwotCQkJZWNobyAnICAgICAgIG9yIHlvdSBjYW4gc3BlY2lmeSAiLS1kaXNhYmxlLWlwdjYiJy4KLQkJCWV4aXQgMQotCQllbHNlCi0JCQllY2hvICdXYXJuaW5nOiBnZXRhZGRyaW5mbygpIGltcGxlbWVudGF0aW9uIG9uIHlvdXIgc3lzdGVtIHNlZW1zIGJlIGJ1Z2d5LicKLQkJCWVjaG8gJyAgICAgICAgIEJldHRlciB1cGdyYWRlIHlvdXIgc3lzdGVtIGxpYnJhcnkgdG8gbmV3ZXN0IHZlcnNpb24nCi0JCQllY2hvICcgICAgICAgICBvZiBHTlUgQyBsaWJyYXJ5IChha2EgZ2xpYmMpLicKLQkJZmkKLQlmaQotCi1maQotCi0JYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAiZ2V0bmFtZWluZm8iICJhY19jdl9mdW5jX2dldG5hbWVpbmZvIgotaWYgdGVzdCAieCRhY19jdl9mdW5jX2dldG5hbWVpbmZvIiA9IHh5ZXM7IHRoZW4gOgotICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX0dFVE5BTUVJTkZPIDEiID4+Y29uZmRlZnMuaAotCi1lbHNlCi0gIGNhc2UgIiAkTElCT0JKUyAiIGluCi0gICoiIGdldG5hbWVpbmZvLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBnZXRuYW1laW5mby4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KLWZpCi0KLQotZmkKLQogeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgZG5ldF9odG9hIGRlY2xhcmF0aW9uIGluIG5ldGRuZXQvZG5ldGRiLmgiID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIGRuZXRfaHRvYSBkZWNsYXJhdGlvbiBpbiBuZXRkbmV0L2RuZXRkYi5oLi4uICIgPiY2OyB9CiBpZiAke3RkX2N2X2RlY2xfbmV0ZG5ldF9kbmV0ZGJfaF9kbmV0X2h0b2ErOn0gZmFsc2U7IHRoZW4gOgpAQCAtNTMwNiwxMTYgKzUwODYsNiBAQAogCiBmaQogCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBhZGRyaW5mbyIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgYWRkcmluZm8uLi4gIiA+JjY7IH0KLQlpZiAke2FjX2N2X2FkZHJpbmZvKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jCQlpbmNsdWRlIDxuZXRkYi5oPgotaW50Ci1tYWluICgpCi17Ci1zdHJ1Y3QgYWRkcmluZm8gYQotICA7Ci0gIHJldHVybiAwOwotfQotX0FDRU9GCi1pZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6Ci0gIGFjX2N2X2FkZHJpbmZvPXllcwotZWxzZQotICBhY19jdl9hZGRyaW5mbz1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfYWRkcmluZm8iID4mNQotJGFzX2VjaG8gIiRhY19jdl9hZGRyaW5mbyIgPiY2OyB9Ci0JaWYgdGVzdCAkYWNfY3ZfYWRkcmluZm8gPSB5ZXM7IHRoZW4KLQotJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9BRERSSU5GTyAxIiA+PmNvbmZkZWZzLmgKLQotCWVsc2UKLQotJGFzX2VjaG8gIiNkZWZpbmUgTkVFRF9BRERSSU5GT19IIDEiID4+Y29uZmRlZnMuaAotCi0JZmkKLQotaWYgdGVzdCAiJGFjX2N2X2FkZHJpbmZvIiA9IG5vOyB0aGVuCi0JbWlzc2luZ19pbmNsdWRlcz15ZXMKLWZpCi0KLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIE5JX01BWFNFUlYiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgZm9yIE5JX01BWFNFUlYuLi4gIiA+JjY7IH0KLQlpZiAke2FjX2N2X21heHNlcnYrOn0gZmFsc2U7IHRoZW4gOgotICAkYXNfZWNob19uICIoY2FjaGVkKSAiID4mNgotZWxzZQotICBjYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8bmV0ZGIuaD4KLSNpZmRlZiBOSV9NQVhTRVJWCi15ZXMKLSNlbmRpZgotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBhY19jdl9tYXhzZXJ2PXllcwotZWxzZQotICBhY19jdl9tYXhzZXJ2PW5vCi1maQotcm0gLWYgY29uZnRlc3QqCi0KLWZpCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X21heHNlcnYiID4mNQotJGFzX2VjaG8gIiRhY19jdl9tYXhzZXJ2IiA+JjY7IH0KLQlpZiB0ZXN0ICRhY19jdl9tYXhzZXJ2ICE9IHllczsgdGhlbgotCQkkYXNfZWNobyAiI2RlZmluZSBORUVEX0FERFJJTkZPX0ggMSIgPj5jb25mZGVmcy5oCi0KLQlmaQotCi1pZiB0ZXN0ICIkYWNfY3ZfbWF4c2VydiIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBOSV9OQU1FUkVRRCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgTklfTkFNRVJFUUQuLi4gIiA+JjY7IH0KLQlpZiAke2FjX2N2X25hbWVyZXFkKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaWZkZWYgTklfTk9GUUROCi15ZXMKLSNlbmRpZgotX0FDRU9GCi1pZiAoZXZhbCAiJGFjX2NwcCBjb25mdGVzdC4kYWNfZXh0IikgMj4mNSB8Ci0gICRFR1JFUCAieWVzIiA+L2Rldi9udWxsIDI+JjE7IHRoZW4gOgotICBhY19jdl9uYW1lcmVxZD15ZXMKLWVsc2UKLSAgYWNfY3ZfbmFtZXJlcWQ9bm8KLWZpCi1ybSAtZiBjb25mdGVzdCoKLQotZmkKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3ZfbmFtZXJlcWQiID4mNQotJGFzX2VjaG8gIiRhY19jdl9uYW1lcmVxZCIgPiY2OyB9Ci0JaWYgdGVzdCAkYWNfY3ZfbmFtZXJlcWQgIT0geWVzOyB0aGVuCi0JCSRhc19lY2hvICIjZGVmaW5lIE5FRURfQUREUklORk9fSCAxIiA+PmNvbmZkZWZzLmgKLQotCWZpCi0KLWlmIHRlc3QgIiRhY19jdl9uYW1lcmVxZCIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJ2ZnByaW50ZiIgImFjX2N2X2Z1bmNfdmZwcmludGYiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfdmZwcmludGYiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfVkZQUklOVEYgMSIgPj5jb25mZGVmcy5oCkBAIC01NDI5LDE5ICs1MDk5LDYgQEAKIAogZmkKIAotYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAic3RyY2FzZWNtcCIgImFjX2N2X2Z1bmNfc3RyY2FzZWNtcCIKLWlmIHRlc3QgIngkYWNfY3ZfZnVuY19zdHJjYXNlY21wIiA9IHh5ZXM7IHRoZW4gOgotICAkYXNfZWNobyAiI2RlZmluZSBIQVZFX1NUUkNBU0VDTVAgMSIgPj5jb25mZGVmcy5oCi0KLWVsc2UKLSAgY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgc3RyY2FzZWNtcC4kYWNfb2JqZXh0ICIqICkgOzsKLSAgKikgTElCT0JKUz0iJExJQk9CSlMgc3RyY2FzZWNtcC4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KLWZpCi0KIGFjX2ZuX2NfY2hlY2tfZnVuYyAiJExJTkVOTyIgInN0cmxjYXQiICJhY19jdl9mdW5jX3N0cmxjYXQiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfc3RybGNhdCIgPSB4eWVzOyB0aGVuIDoKICAgJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TVFJMQ0FUIDEiID4+Y29uZmRlZnMuaApAQCAtNTc5NCw3ICs1NDUxLDYgQEAKIAogCiAKLQogICAgICAgICAgICAgICAgIExCTF9MSUJTPSIkTElCUyIKICAgICBwZm9wZW49L3Vzci9leGFtcGxlcy9wYWNrZXRmaWx0ZXIvcGZvcGVuLmMKICAgICBpZiB0ZXN0IC1mICRwZm9wZW4gOyB0aGVuCkBAIC02MTYzLDExNCArNTgxOSw2IEBACiAjIENoZWNrIGZvciB0aGVzZSBhZnRlciBBQ19MQkxfTElCUENBUCwgc28gd2UgbGluayB3aXRoIHRoZSBhcHByb3ByaWF0ZQogIyBsaWJyYXJpZXMgKGUuZy4sICItbHNvY2tldCAtbG5zbCIgb24gU29sYXJpcykuCiAjCi0jIFdlIGRvbid0IHVzZSBBQ19SRVBMQUNFX0ZVTkNTIGJlY2F1c2UgdGhhdCB1c2VzIEFDX0NIRUNLX0ZVTkNTIHdoaWNoCi0jIHVzZSBBQ19DSEVDS19GVU5DIHdoaWNoIGRvZXNuJ3QgbGV0IHVzIHNwZWNpZnkgdGhlIHJpZ2h0ICNpbmNsdWRlcwotIyB0byBtYWtlIHRoaXMgd29yayBvbiBCU0QvT1MgNC54LiAgQlNEL09TIDQueCBzaGlwcyB3aXRoIHRoZSBCSU5EOAotIyByZXNvbHZlciwgYW5kIHRoZSB3YXkgaXQgZGVmaW5lcyBpbmV0X3tudG9wLHB0b259IGlzIHJhdGhlciBzdHJhbmdlOwotIyBpdCBkb2VzIG5vdCBzaGlwIHdpdGggYSBsaWJjIHN5bWJvbCAiaW5ldF9udG9wKCkiLCBpdCBzaGlwcyB3aXRoCi0jICJfaW5ldF9udG9wKCkiLCBhbmQgaGFzIGEgI2RlZmluZSBtYWNybyBpbiBvbmUgb2YgdGhlIHN5c3RlbSBoZWFkZXJzCi0jIHRvIHJlbmFtZSBpdC4KLSMKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZXRfbnRvcCIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5ldF9udG9wLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLWludAotbWFpbiAoKQotewotY2hhciBzcmNbNF0sIGRzdFsxMjhdOwotaW5ldF9udG9wKEFGX0lORVQsIHNyYywgZHN0LCBzaXplb2YoZHN0KSk7Ci0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1Ci0kYXNfZWNobyAieWVzIiA+JjY7IH0KLWVsc2UKLSAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKLSRhc19lY2hvICJubyIgPiY2OyB9Ci0JY2FzZSAiICRMSUJPQkpTICIgaW4KLSAgKiIgaW5ldF9udG9wLiRhY19vYmpleHQgIiogKSA7OwotICAqKSBMSUJPQkpTPSIkTElCT0JKUyBpbmV0X250b3AuJGFjX29iamV4dCIKLSA7OwotZXNhYwotCi1maQotcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCi0gICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIGluZXRfcHRvbiIgPiY1Ci0kYXNfZWNob19uICJjaGVja2luZyBmb3IgaW5ldF9wdG9uLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0Ci0vKiBlbmQgY29uZmRlZnMuaC4gICovCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLWludAotbWFpbiAoKQotewotY2hhciBzcmNbMTI4XSwgZHN0WzRdOwotaW5ldF9wdG9uKEFGX0lORVQsIHNyYywgZHN0KTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQljYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiBpbmV0X3B0b24uJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGluZXRfcHRvbi4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAoteyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgaW5ldF9hdG9uIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBpbmV0X2F0b24uLi4gIiA+JjY7IH0KLWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLSNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+Ci1pbnQKLW1haW4gKCkKLXsKLWNoYXIgc3JjWzEyOF07Ci1zdHJ1Y3QgaW5fYWRkciBkc3Q7Ci1pbmV0X2F0b24oc3JjLCAmZHN0KTsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfbGluayAiJExJTkVOTyI7IHRoZW4gOgotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKLSRhc19lY2hvICJ5ZXMiID4mNjsgfQotZWxzZQotICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQotJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQljYXNlICIgJExJQk9CSlMgIiBpbgotICAqIiBpbmV0X2F0b24uJGFjX29iamV4dCAiKiApIDs7Ci0gICopIExJQk9CSlM9IiRMSUJPQkpTIGluZXRfYXRvbi4kYWNfb2JqZXh0IgotIDs7Ci1lc2FjCi0KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKLSAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCi0jCi0jIENoZWNrIGZvciB0aGVzZSBhZnRlciBBQ19MQkxfTElCUENBUCwgZm9yIHRoZSBzYW1lIHJlYXNvbi4KLSMKICMgWW91IGFyZSBpbiBhIHR3aXN0eSBsaXR0bGUgbWF6ZSBvZiBVTipYZXMsIGFsbCBkaWZmZXJlbnQuCiAjIFNvbWUgbWlnaHQgbm90IGhhdmUgZXRoZXJfbnRvaG9zdCgpLgogIyBTb21lIG1pZ2h0IGhhdmUgaXQsIGJ1dCBub3QgZGVjbGFyZSBpdCBpbiBhbnkgaGVhZGVyIGZpbGUuCkBAIC02NDg4LDQ0ICs2MDM2LDYgQEAKIGZpCiAKIAotCi0JeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBpZiBzb2NrYWRkciBzdHJ1Y3QgaGFzIHNhX2xlbiBtZW1iZXIiID4mNQotJGFzX2VjaG9fbiAiY2hlY2tpbmcgaWYgc29ja2FkZHIgc3RydWN0IGhhcyBzYV9sZW4gbWVtYmVyLi4uICIgPiY2OyB9Ci0JaWYgJHthY19jdl9zb2NrYWRkcl9oYXNfc2FfbGVuKzp9IGZhbHNlOyB0aGVuIDoKLSAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKLWVsc2UKLSAgY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAotLyogZW5kIGNvbmZkZWZzLmguICAqLwotCi0jCQlpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSMJCWluY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLWludAotbWFpbiAoKQotewotdV9pbnQgaSA9IHNpemVvZigoKHN0cnVjdCBzb2NrYWRkciAqKTApLT5zYV9sZW4pCi0gIDsKLSAgcmV0dXJuIDA7Ci19Ci1fQUNFT0YKLWlmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKLSAgYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbj15ZXMKLWVsc2UKLSAgYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbj1ubwotZmkKLXJtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAotZmkKLQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiAkYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbiIgPiY1Ci0kYXNfZWNobyAiJGFjX2N2X3NvY2thZGRyX2hhc19zYV9sZW4iID4mNjsgfQotCQlpZiB0ZXN0ICRhY19jdl9zb2NrYWRkcl9oYXNfc2FfbGVuID0geWVzIDsgdGhlbgotCQkJJGFzX2VjaG8gIiNkZWZpbmUgSEFWRV9TT0NLQUREUl9TQV9MRU4gMSIgPj5jb25mZGVmcy5oCi0KLQlmaQotCi1pZiB0ZXN0ICIkYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbiIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwY2FwX2xpc3RfZGF0YWxpbmtzIiAiYWNfY3ZfZnVuY19wY2FwX2xpc3RfZGF0YWxpbmtzIgogaWYgdGVzdCAieCRhY19jdl9mdW5jX3BjYXBfbGlzdF9kYXRhbGlua3MiID0geHllczsgdGhlbiA6CiAKQEAgLTY3NDgsMTggKzYyNTgsMzggQEAKICRhc19lY2hvICJubyIgPiY2OyB9CiAgICAgZmkKIGZpCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgcGNhcF9kZWJ1ZyBpcyBkZWZpbmVkIGJ5IGxpYnBjYXAiID4mNQorCisjCisjIENoZWNrIGZvciBzcGVjaWFsIGRlYnVnZ2luZyBmdW5jdGlvbnMKKyMKK2ZvciBhY19mdW5jIGluIHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJwY2FwX3NldF9wYXJzZXJfZGVidWciICJhY19jdl9mdW5jX3BjYXBfc2V0X3BhcnNlcl9kZWJ1ZyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19wY2FwX3NldF9wYXJzZXJfZGVidWciID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9QQ0FQX1NFVF9QQVJTRVJfREVCVUcgMQorX0FDRU9GCisKK2ZpCitkb25lCisKK2lmIHRlc3QgIiRhY19jdl9mdW5jX3BjYXBfc2V0X3BhcnNlcl9kZWJ1ZyIgPSAibm8iIDsgdGhlbgorCSMKKwkjIE9LLCB3ZSBkb24ndCBoYXZlIHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZygpIHRvIHNldCB0aGUgbGlicGNhcAorCSMgZmlsdGVyIGV4cHJlc3Npb24gcGFyc2VyIGRlYnVnIGZsYWc7IGNhbiB3ZSBkaXJlY3RseSBzZXQgdGhlCisJIyBmbGFnPworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciBwY2FwX2RlYnVnIGlzIGRlZmluZWQgYnkgbGlicGNhcCIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHBjYXBfZGVidWcgaXMgZGVmaW5lZCBieSBsaWJwY2FwLi4uICIgPiY2OyB9Ci1jYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCiBpbnQKIG1haW4gKCkKIHsKIAotCWV4dGVybiBpbnQgcGNhcF9kZWJ1ZzsKKwkJZXh0ZXJuIGludCBwY2FwX2RlYnVnOwogCi0JcmV0dXJuIHBjYXBfZGVidWc7CisJCXJldHVybiBwY2FwX2RlYnVnOwogCiAgIDsKICAgcmV0dXJuIDA7CkBAIC02NzcyLDMwICs2MzAyLDMwIEBACiBmaQogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBcCiAgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWlmIHRlc3QgIiRhY19sYmxfY3ZfcGNhcF9kZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKwlpZiB0ZXN0ICIkYWNfbGJsX2N2X3BjYXBfZGVidWdfZGVmaW5lZCIgPSB5ZXMgOyB0aGVuCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfUENBUF9ERUJVRyAxIiA+PmNvbmZkZWZzLmgKIAotZWxzZQotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CisJZWxzZQorCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KLQkjCi0JIyBPSywgd2hhdCBhYm91dCAieXlkZWJ1ZyI/Ci0JIwotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB5eWRlYnVnIGlzIGRlZmluZWQgYnkgbGlicGNhcCIgPiY1CisJCSMKKwkJIyBPSywgd2hhdCBhYm91dCAieXlkZWJ1ZyI/CisJCSMKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHl5ZGVidWcgaXMgZGVmaW5lZCBieSBsaWJwY2FwIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgeXlkZWJ1ZyBpcyBkZWZpbmVkIGJ5IGxpYnBjYXAuLi4gIiA+JjY7IH0KLQljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisJCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIAogaW50CiBtYWluICgpCiB7CiAKLQkJZXh0ZXJuIGludCB5eWRlYnVnOworCQkJZXh0ZXJuIGludCB5eWRlYnVnOwogCi0JCXJldHVybiB5eWRlYnVnOworCQkJcmV0dXJuIHl5ZGVidWc7CiAKICAgOwogICByZXR1cm4gMDsKQEAgLTY4MDgsMTcgKzYzMzgsMjkgQEAKIGZpCiBybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IFwKICAgICBjb25mdGVzdCRhY19leGVleHQgY29uZnRlc3QuJGFjX2V4dAotCWlmIHRlc3QgIiRhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CisJCWlmIHRlc3QgIiRhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KKwkJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQogJGFzX2VjaG8gInllcyIgPiY2OyB9CiAKICRhc19lY2hvICIjZGVmaW5lIEhBVkVfWVlERUJVRyAxIiA+PmNvbmZkZWZzLmgKIAotCWVsc2UKLQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKwkJZWxzZQorCQkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKICRhc19lY2hvICJubyIgPiY2OyB9CisJCWZpCiAJZmkKIGZpCitmb3IgYWNfZnVuYyBpbiBwY2FwX3NldF9vcHRpbWl6ZXJfZGVidWcKK2RvIDoKKyAgYWNfZm5fY19jaGVja19mdW5jICIkTElORU5PIiAicGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnIiAiYWNfY3ZfZnVuY19wY2FwX3NldF9vcHRpbWl6ZXJfZGVidWciCitpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfcGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnIiA9IHh5ZXM7IHRoZW4gOgorICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCisjZGVmaW5lIEhBVkVfUENBUF9TRVRfT1BUSU1JWkVSX0RFQlVHIDEKK19BQ0VPRgorCitmaQorZG9uZQorCiBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJicGZfZHVtcCIgImFjX2N2X2Z1bmNfYnBmX2R1bXAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2Z1bmNfYnBmX2R1bXAiID0geHllczsgdGhlbiA6CiAgICRhc19lY2hvICIjZGVmaW5lIEhBVkVfQlBGX0RVTVAgMSIgPj5jb25mZGVmcy5oCkBAIC03NDE3LDcgKzY5NTksNyBAQAogQ1BQRkxBR1M9IiRDUFBGTEFHUyAkVl9JTkNMUyIKIGZvciBhY19oZWFkZXIgaW4gcGNhcC9ibHVldG9vdGguaAogZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAicGNhcC9ibHVldG9vdGguaCIgImFjX2N2X2hlYWRlcl9wY2FwX2JsdWV0b290aF9oIiAiI2luY2x1ZGUgXCJ0Y3BkdW1wLXN0ZGluYy5oXCIKKyAgYWNfZm5fY19jaGVja19oZWFkZXJfY29tcGlsZSAiJExJTkVOTyIgInBjYXAvYmx1ZXRvb3RoLmgiICJhY19jdl9oZWFkZXJfcGNhcF9ibHVldG9vdGhfaCIgIiNpbmNsdWRlIFwibmV0ZGlzc2VjdC1zdGRpbmMuaFwiCiAiCiBpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9wY2FwX2JsdWV0b290aF9oIiA9IHh5ZXM7IHRoZW4gOgogICBjYXQgPj5jb25mZGVmcy5oIDw8X0FDRU9GCkBAIC03NDMwLDcgKzY5NzIsNyBAQAogCiBmb3IgYWNfaGVhZGVyIGluIHBjYXAvbmZsb2cuaAogZG8gOgotICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAicGNhcC9uZmxvZy5oIiAiYWNfY3ZfaGVhZGVyX3BjYXBfbmZsb2dfaCIgIiNpbmNsdWRlIFwidGNwZHVtcC1zdGRpbmMuaFwiCisgIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJwY2FwL25mbG9nLmgiICJhY19jdl9oZWFkZXJfcGNhcF9uZmxvZ19oIiAiI2luY2x1ZGUgXCJuZXRkaXNzZWN0LXN0ZGluYy5oXCIKICIKIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BjYXBfbmZsb2dfaCIgPSB4eWVzOyB0aGVuIDoKICAgY2F0ID4+Y29uZmRlZnMuaCA8PF9BQ0VPRgpAQCAtNzQ0Myw3ICs2OTg1LDcgQEAKIAogZm9yIGFjX2hlYWRlciBpbiBwY2FwL3VzYi5oCiBkbyA6Ci0gIGFjX2ZuX2NfY2hlY2tfaGVhZGVyX2NvbXBpbGUgIiRMSU5FTk8iICJwY2FwL3VzYi5oIiAiYWNfY3ZfaGVhZGVyX3BjYXBfdXNiX2giICIjaW5jbHVkZSBcInRjcGR1bXAtc3RkaW5jLmhcIgorICBhY19mbl9jX2NoZWNrX2hlYWRlcl9jb21waWxlICIkTElORU5PIiAicGNhcC91c2IuaCIgImFjX2N2X2hlYWRlcl9wY2FwX3VzYl9oIiAiI2luY2x1ZGUgXCJuZXRkaXNzZWN0LXN0ZGluYy5oXCIKICIKIGlmIHRlc3QgIngkYWNfY3ZfaGVhZGVyX3BjYXBfdXNiX2giID0geHllczsgdGhlbiA6CiAgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKQEAgLTc2NTEsMTAgKzcxOTMsNTcgQEAKIAkgICAgIwogCSAgICBpZiB0ZXN0ICIkYWNfbGJsX2NjX2RvbnRfdHJ5X2djY19kYXNoVyIgIT0geWVzOyB0aGVuCiAKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIGZhaWxzIHdoZW4gZ2l2ZW4gYW4gdW5rbm93biB3YXJuaW5nIG9wdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBmYWlscyB3aGVuIGdpdmVuIGFuIHVua25vd24gd2FybmluZyBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlDRkxBR1M9IiRDRkxBR1MgLVd4eXp6eS10aGlzLXdpbGwtbmV2ZXItc3VjY2VlZC14eXp6eSIKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQkjCisJCSMgV2UncmUgYXNzdW1pbmcgdGhpcyBpcyBjbGFuZywgd2hlcmUKKwkJIyAtV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb24gaXMgdGhlIGFwcHJvcHJpYXRlCisJCSMgb3B0aW9uIHRvIGZvcmNlIHRoZSBjb21waWxlciB0byBmYWlsLgorCQkjCisJCWFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yPSItV2Vycm9yPXVua25vd24td2FybmluZy1vcHRpb24iCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKKwogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XYWxsIG9wdGlvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdhbGwgb3B0aW9uLi4uICIgPiY2OyB9CiAJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMgLVdhbGwiCisJaWYgZXhwciAieC1XYWxsIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV2FsbCIKKwllbGlmIGV4cHIgIngtV2FsbCIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XYWxsIgorCWVsaWYgZXhwciAieC1XYWxsIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdhbGwiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdhbGwiCisJZmkKIAljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKQEAgLTc2ODYsNyArNzI3NSwxOCBAQAogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XbWlzc2luZy1wcm90b3R5cGVzIG9wdGlvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdtaXNzaW5nLXByb3RvdHlwZXMgb3B0aW9uLi4uICIgPiY2OyB9CiAJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCi0JQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfY2NfZm9yY2Vfd2FybmluZ19lcnJvcnMgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisJaWYgZXhwciAieC1XbWlzc2luZy1wcm90b3R5cGVzIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV21pc3NpbmctcHJvdG90eXBlcyIKKwllbGlmIGV4cHIgIngtV21pc3NpbmctcHJvdG90eXBlcyIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XbWlzc2luZy1wcm90b3R5cGVzIgorCWVsaWYgZXhwciAieC1XbWlzc2luZy1wcm90b3R5cGVzIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdtaXNzaW5nLXByb3RvdHlwZXMiCisJZmkKIAljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKQEAgLTc3MTgsNyArNzMxOCwxOCBAQAogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1Xc3RyaWN0LXByb3RvdHlwZXMgb3B0aW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3N0cmljdC1wcm90b3R5cGVzIG9wdGlvbi4uLiAiID4mNjsgfQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCUNGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisJaWYgZXhwciAieC1Xc3RyaWN0LXByb3RvdHlwZXMiIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisJZWxpZiBleHByICJ4LVdzdHJpY3QtcHJvdG90eXBlcyIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisJZWxpZiBleHByICJ4LVdzdHJpY3QtcHJvdG90eXBlcyIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xc3RyaWN0LXByb3RvdHlwZXMiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdzdHJpY3QtcHJvdG90eXBlcyIKKwlmaQogCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIApAQCAtNzc1MCw3ICs3MzYxLDE4IEBACiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVd3cml0ZS1zdHJpbmdzIG9wdGlvbiIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVd3cml0ZS1zdHJpbmdzIG9wdGlvbi4uLiAiID4mNjsgfQogCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgotCUNGTEFHUz0iJENGTEFHUyAkYWNfbGJsX2NjX2ZvcmNlX3dhcm5pbmdfZXJyb3JzIC1Xd3JpdGUtc3RyaW5ncyIKKwlpZiBleHByICJ4LVd3cml0ZS1zdHJpbmdzIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV3dyaXRlLXN0cmluZ3MiCisJZWxpZiBleHByICJ4LVd3cml0ZS1zdHJpbmdzIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVd3cml0ZS1zdHJpbmdzIgorCWVsaWYgZXhwciAieC1Xd3JpdGUtc3RyaW5ncyIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xd3JpdGUtc3RyaW5ncyIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV3dyaXRlLXN0cmluZ3MiCisJZmkKIAljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CiAvKiBlbmQgY29uZmRlZnMuaC4gICovCiAKQEAgLTc3ODIsNyArNzQwNCwxOCBAQAogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XcG9pbnRlci1hcml0aCBvcHRpb24iID4mNQogJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XcG9pbnRlci1hcml0aCBvcHRpb24uLi4gIiA+JjY7IH0KIAlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyAtV3BvaW50ZXItYXJpdGgiCisJaWYgZXhwciAieC1XcG9pbnRlci1hcml0aCIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdwb2ludGVyLWFyaXRoIgorCWVsaWYgZXhwciAieC1XcG9pbnRlci1hcml0aCIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XcG9pbnRlci1hcml0aCIKKwllbGlmIGV4cHIgIngtV3BvaW50ZXItYXJpdGgiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3BvaW50ZXItYXJpdGgiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdwb2ludGVyLWFyaXRoIgorCWZpCiAJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAogLyogZW5kIGNvbmZkZWZzLmguICAqLwogCkBAIC03ODExLDEwICs3NDQ0LDI3OSBAQAogcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CiAKIAorCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XY2FzdC1xdWFsIG9wdGlvbiIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdjYXN0LXF1YWwgb3B0aW9uLi4uICIgPiY2OyB9CisJc2F2ZV9DRkxBR1M9IiRDRkxBR1MiCisJaWYgZXhwciAieC1XY2FzdC1xdWFsIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV2Nhc3QtcXVhbCIKKwllbGlmIGV4cHIgIngtV2Nhc3QtcXVhbCIgOiAieC1mLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XY2FzdC1xdWFsIgorCWVsaWYgZXhwciAieC1XY2FzdC1xdWFsIiA6ICJ4LW0uKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdjYXN0LXF1YWwiCisJZWxzZQorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdjYXN0LXF1YWwiCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlWX0NDT1BUPSIkVl9DQ09QVCAtV2Nhc3QtcXVhbCIKKworZWxzZQorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBubyIgPiY1CiskYXNfZWNobyAibm8iID4mNjsgfQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpleHQgY29uZnRlc3QuJGFjX2V4dAorCisKKwl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3NoYWRvdyBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1Xc2hhZG93IG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV3NoYWRvdyIgOiAieC1XLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAkYWNfbGJsX3Vua25vd25fd2FybmluZ19vcHRpb25fZXJyb3IgLVdzaGFkb3ciCisJZWxpZiBleHByICJ4LVdzaGFkb3ciIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3NoYWRvdyIKKwllbGlmIGV4cHIgIngtV3NoYWRvdyIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1Xc2hhZG93IgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xc2hhZG93IgorCWZpCisJY2F0IGNvbmZkZWZzLmggLSA8PF9BQ0VPRiA+Y29uZnRlc3QuJGFjX2V4dAorLyogZW5kIGNvbmZkZWZzLmguICAqLworCitpbnQKK21haW4gKCkKK3sKK3JldHVybiAwCisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2NvbXBpbGUgIiRMSU5FTk8iOyB0aGVuIDoKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKKyRhc19lY2hvICJ5ZXMiID4mNjsgfQorCQlDRkxBR1M9IiRzYXZlX0NGTEFHUyIKKwkJVl9DQ09QVD0iJFZfQ0NPUFQgLVdzaGFkb3ciCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCisJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorCWVsaWYgZXhwciAieC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiCisJZWxpZiBleHByICJ4LVdkZWNsYXJhdGlvbi1hZnRlci1zdGF0ZW1lbnQiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2RlY2xhcmF0aW9uLWFmdGVyLXN0YXRlbWVudCIKKwlmaQorCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKworaW50CittYWluICgpCit7CityZXR1cm4gMAorICA7CisgIHJldHVybiAwOworfQorX0FDRU9GCitpZiBhY19mbl9jX3RyeV9jb21waWxlICIkTElORU5PIjsgdGhlbiA6CisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHllcyIgPiY1CiskYXNfZWNobyAieWVzIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisJCVZfQ0NPUFQ9IiRWX0NDT1BUIC1XZGVjbGFyYXRpb24tYWZ0ZXItc3RhdGVtZW50IgorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XcGVkYW50aWMgb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV3BlZGFudGljIG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV3BlZGFudGljIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV3BlZGFudGljIgorCWVsaWYgZXhwciAieC1XcGVkYW50aWMiIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3BlZGFudGljIgorCWVsaWYgZXhwciAieC1XcGVkYW50aWMiIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV3BlZGFudGljIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XcGVkYW50aWMiCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlWX0NDT1BUPSIkVl9DQ09QVCAtV3BlZGFudGljIgorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24gb3B0aW9uIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtV29sZC1zdHlsZS1kZWZpbml0aW9uIG9wdGlvbi4uLiAiID4mNjsgfQorCXNhdmVfQ0ZMQUdTPSIkQ0ZMQUdTIgorCWlmIGV4cHIgIngtV29sZC1zdHlsZS1kZWZpbml0aW9uIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV29sZC1zdHlsZS1kZWZpbml0aW9uIgorCWVsaWYgZXhwciAieC1Xb2xkLXN0eWxlLWRlZmluaXRpb24iIDogIngtZi4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV29sZC1zdHlsZS1kZWZpbml0aW9uIgorCWVsaWYgZXhwciAieC1Xb2xkLXN0eWxlLWRlZmluaXRpb24iIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtV29sZC1zdHlsZS1kZWZpbml0aW9uIgorCWVsc2UKKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1Xb2xkLXN0eWxlLWRlZmluaXRpb24iCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlWX0NDT1BUPSIkVl9DQ09QVCAtV29sZC1zdHlsZS1kZWZpbml0aW9uIgorCitlbHNlCisKKwkJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IG5vIiA+JjUKKyRhc19lY2hvICJubyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5lcnIgY29uZnRlc3QuJGFjX29iamV4dCBjb25mdGVzdC4kYWNfZXh0CisKKworCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCBvcHRpb24iID4mNQorJGFzX2VjaG9fbiAiY2hlY2tpbmcgd2hldGhlciB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCBvcHRpb24uLi4gIiA+JjY7IH0KKwlzYXZlX0NGTEFHUz0iJENGTEFHUyIKKwlpZiBleHByICJ4LVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIiA6ICJ4LVcuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTICRhY19sYmxfdW5rbm93bl93YXJuaW5nX29wdGlvbl9lcnJvciAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiCisJZWxpZiBleHByICJ4LVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVd1c2VkLWJ1dC1tYXJrZWQtdW51c2VkIgorCWVsaWYgZXhwciAieC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIgOiAieC1tLioiID4vZGV2L251bGwKKwl0aGVuCisJICAgIENGTEFHUz0iJENGTEFHUyAtV2Vycm9yIC1XdXNlZC1idXQtbWFya2VkLXVudXNlZCIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiCisJZmkKKwljYXQgY29uZmRlZnMuaCAtIDw8X0FDRU9GID5jb25mdGVzdC4kYWNfZXh0CisvKiBlbmQgY29uZmRlZnMuaC4gICovCisKK2ludAorbWFpbiAoKQoreworcmV0dXJuIDAKKyAgOworICByZXR1cm4gMDsKK30KK19BQ0VPRgoraWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMiID4mNQorJGFzX2VjaG8gInllcyIgPiY2OyB9CisJCUNGTEFHUz0iJHNhdmVfQ0ZMQUdTIgorCQlWX0NDT1BUPSIkVl9DQ09QVCAtV3VzZWQtYnV0LW1hcmtlZC11bnVzZWQiCisKK2Vsc2UKKworCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQorJGFzX2VjaG8gIm5vIiA+JjY7IH0KKwkJQ0ZMQUdTPSIkc2F2ZV9DRkxBR1MiCisKK2ZpCitybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKKworCiAJeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRoZSBjb21waWxlciBzdXBwb3J0cyB0aGUgLVcgb3B0aW9uIiA+JjUKICRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdGhlIGNvbXBpbGVyIHN1cHBvcnRzIHRoZSAtVyBvcHRpb24uLi4gIiA+JjY7IH0KIAlzYXZlX0NGTEFHUz0iJENGTEFHUyIKLQlDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF9jY19mb3JjZV93YXJuaW5nX2Vycm9ycyAtVyIKKwlpZiBleHByICJ4LVciIDogIngtVy4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgJGFjX2xibF91bmtub3duX3dhcm5pbmdfb3B0aW9uX2Vycm9yIC1XIgorCWVsaWYgZXhwciAieC1XIiA6ICJ4LWYuKiIgPi9kZXYvbnVsbAorCXRoZW4KKwkgICAgQ0ZMQUdTPSIkQ0ZMQUdTIC1XZXJyb3IgLVciCisJZWxpZiBleHByICJ4LVciIDogIngtbS4qIiA+L2Rldi9udWxsCisJdGhlbgorCSAgICBDRkxBR1M9IiRDRkxBR1MgLVdlcnJvciAtVyIKKwllbHNlCisJICAgIENGTEFHUz0iJENGTEFHUyAtVyIKKwlmaQogCWNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKIC8qIGVuZCBjb25mZGVmcy5oLiAgKi8KIApAQCAtODA5Miw0NSArNzk5NCw5IEBACiAKICAgICBmaQogCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIGZvciBoX2Vycm5vIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIGZvciBoX2Vycm5vLi4uICIgPiY2OyB9Ci0JaWYgJHthY19jdl92YXJfaF9lcnJubys6fSBmYWxzZTsgdGhlbiA6Ci0gICRhc19lY2hvX24gIihjYWNoZWQpICIgPiY2Ci1lbHNlCi0gIGNhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKLS8qIGVuZCBjb25mZGVmcy5oLiAgKi8KLQotIwkJaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jCQlpbmNsdWRlIDxuZXRkYi5oPgotaW50Ci1tYWluICgpCi17Ci1pbnQgZm9vID0gaF9lcnJubzsKLSAgOwotICByZXR1cm4gMDsKLX0KLV9BQ0VPRgotaWYgYWNfZm5fY190cnlfY29tcGlsZSAiJExJTkVOTyI7IHRoZW4gOgotICBhY19jdl92YXJfaF9lcnJubz15ZXMKLWVsc2UKLSAgYWNfY3ZfdmFyX2hfZXJybm89bm8KLWZpCi1ybSAtZiBjb3JlIGNvbmZ0ZXN0LmVyciBjb25mdGVzdC4kYWNfb2JqZXh0IGNvbmZ0ZXN0LiRhY19leHQKLWZpCi0KLQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogJGFjX2N2X3Zhcl9oX2Vycm5vIiA+JjUKLSRhc19lY2hvICIkYWNfY3ZfdmFyX2hfZXJybm8iID4mNjsgfQotCWlmIHRlc3QgIiRhY19jdl92YXJfaF9lcnJubyIgPSAieWVzIjsgdGhlbgotCi0kYXNfZWNobyAiI2RlZmluZSBIQVZFX0hfRVJSTk8gMSIgPj5jb25mZGVmcy5oCi0KLQlmaQotCi0KLSMgQ2hlY2sgZm9yIE9wZW5TU0wgbGliY3J5cHRvCi17ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE9wZW5TU0wgbGliY3J5cHRvIiA+JjUKLSRhc19lY2hvX24gImNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIE9wZW5TU0wgbGliY3J5cHRvLi4uICIgPiY2OyB9CisjIENoZWNrIGZvciBPcGVuU1NML2xpYnJlc3NsIGxpYmNyeXB0bworeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBPcGVuU1NML2xpYnJlc3NsIGxpYmNyeXB0byIgPiY1CiskYXNfZWNob19uICJjaGVja2luZyB3aGV0aGVyIHRvIHVzZSBPcGVuU1NML2xpYnJlc3NsIGxpYmNyeXB0by4uLiAiID4mNjsgfQogIyBTcGVjaWZ5IGxvY2F0aW9uIGZvciBib3RoIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMuCiB3YW50X2xpYmNyeXB0bz1pZmF2YWlsYWJsZQogCkBAIC04MTM5LDIwICs4MDA1LDM4IEBACiAgIHdpdGh2YWw9JHdpdGhfY3J5cHRvOwogCWlmIHRlc3QgJHdpdGh2YWwgPSBubwogCXRoZW4KKwkJIyBVc2VyIGRvZXNuJ3Qgd2FudCB0byBsaW5rIHdpdGggbGliY3J5cHRvLgogCQl3YW50X2xpYmNyeXB0bz1ubwogCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogbm8iID4mNQogJGFzX2VjaG8gIm5vIiA+JjY7IH0KIAllbGlmIHRlc3QgJHdpdGh2YWwgPSB5ZXMKIAl0aGVuCisJCSMgVXNlciB3YW50cyB0byBsaW5rIHdpdGggbGliY3J5cHRvIGJ1dCBoYXNuJ3Qgc3BlY2lmaWVkCisJCSMgYSBkaXJlY3RvcnkuCiAJCXdhbnRfbGliY3J5cHRvPXllcwogCQl7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IHJlc3VsdDogeWVzIiA+JjUKICRhc19lY2hvICJ5ZXMiID4mNjsgfQorCWVsc2UKKwkJIyBVc2VyIHdhbnRzIHRvIGxpbmsgd2l0aCBsaWJjcnlwdG8gYW5kIGhhcyBzcGVjaWZpZWQKKwkJIyBhIGRpcmVjdG9yeSwgc28gdXNlIHRoZSBwcm92aWRlZCB2YWx1ZS4KKwkJd2FudF9saWJjcnlwdG89eWVzCisJCWxpYmNyeXB0b19yb290PSR3aXRodmFsCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMsIHVzaW5nIHRoZSB2ZXJzaW9uIGluc3RhbGxlZCBpbiAkd2l0aHZhbCIgPiY1CiskYXNfZWNobyAieWVzLCB1c2luZyB0aGUgdmVyc2lvbiBpbnN0YWxsZWQgaW4gJHdpdGh2YWwiID4mNjsgfQorCisJCSMKKwkJIyBQdXQgdGhlIHN1YmRpcmVjdG9yaWVzIG9mIHRoZSBsaWJjcnlwdG8gcm9vdCBkaXJlY3RvcnkKKwkJIyBhdCB0aGUgZnJvbnQgb2YgdGhlIGhlYWRlciBhbmQgbGlicmFyeSBzZWFyY2ggcGF0aC4KKwkJIworCQlDRkxBR1M9Ii1JJHdpdGh2YWwvaW5jbHVkZSAkQ0ZMQUdTIgorCQlMSUJTPSItTCR3aXRodmFsL2xpYiAkTElCUyIKIAlmaQogCiBlbHNlCiAKIAkjCi0JIyBVc2UgbGliY3J5cHRvIGlmIGl0J3MgcHJlc2VudCwgb3RoZXJ3aXNlIGRvbid0LgorCSMgVXNlIGxpYmNyeXB0byBpZiBpdCdzIHByZXNlbnQsIG90aGVyd2lzZSBkb24ndDsgbm8gZGlyZWN0b3J5CisJIyB3YXMgc3BlY2lmaWVkLgogCSMKIAl3YW50X2xpYmNyeXB0bz1pZmF2YWlsYWJsZQogCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiB5ZXMsIGlmIGF2YWlsYWJsZSIgPiY1CkBAIC04MTYxLDcgKzgwNDUsMTkgQEAKIGZpCiAKIGlmIHRlc3QgIiR3YW50X2xpYmNyeXB0byIgIT0gIm5vIjsgdGhlbgotCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIERFU19jYmNfZW5jcnlwdCBpbiAtbGNyeXB0byIgPiY1CisJIworCSMgRG9uJ3QgY2hlY2sgZm9yIGxpYmNyeXB0byB1bmxlc3Mgd2UgaGF2ZSBpdHMgaGVhZGVyczsKKwkjIEFwcGxlLCBibGVzcyB0aGVpciBwb2ludHkgbGl0dGxlIGhlYWRzLCBhcHBhcmVudGx5IHNoaXAKKwkjIGxpYmNyeXB0byBhcyBhIGxpYnJhcnksIGJ1dCBub3QgdGhlIGhlYWRlciBmaWxlcywgaW4KKwkjIEVsIENhcGl0YW4sIHByb2JhYmx5IGJlY2F1c2UgdGhleSBkb24ndCB3YW50IHlvdSB3cml0aW5nCisJIyBuYXN0eSBwb3J0YWJsZSBjb2RlIHRoYXQgY291bGQgcnVuIG9uIG90aGVyIFVOKlhlcywgdGhleQorCSMgd2FudCB5b3Ugd3JpdGluZyBjb2RlIHRoYXQgdXNlcyB0aGVpciBTaGlueSBOZXcgQ3J5cHRvCisJIyBMaWJyYXJ5IGFuZCB0aGF0IG9ubHkgcnVucyBvbiBPUyBYLgorCSMKKwlhY19mbl9jX2NoZWNrX2hlYWRlcl9tb25ncmVsICIkTElORU5PIiAib3BlbnNzbC9jcnlwdG8uaCIgImFjX2N2X2hlYWRlcl9vcGVuc3NsX2NyeXB0b19oIiAiJGFjX2luY2x1ZGVzX2RlZmF1bHQiCitpZiB0ZXN0ICJ4JGFjX2N2X2hlYWRlcl9vcGVuc3NsX2NyeXB0b19oIiA9IHh5ZXM7IHRoZW4gOgorCisJCXsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogY2hlY2tpbmcgZm9yIERFU19jYmNfZW5jcnlwdCBpbiAtbGNyeXB0byIgPiY1CiAkYXNfZWNob19uICJjaGVja2luZyBmb3IgREVTX2NiY19lbmNyeXB0IGluIC1sY3J5cHRvLi4uICIgPiY2OyB9CiBpZiAke2FjX2N2X2xpYl9jcnlwdG9fREVTX2NiY19lbmNyeXB0Kzp9IGZhbHNlOyB0aGVuIDoKICAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKQEAgLTgyMDYsNyArODEwMiw4IEBACiAKIGZpCiAKLQlmb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvZXZwLmgKKwkJaWYgdGVzdCAiJGFjX2N2X2xpYl9jcnlwdG9fREVTX2NiY19lbmNyeXB0IiA9ICJ5ZXMiOyB0aGVuCisJCQlmb3IgYWNfaGVhZGVyIGluIG9wZW5zc2wvZXZwLmgKIGRvIDoKICAgYWNfZm5fY19jaGVja19oZWFkZXJfbW9uZ3JlbCAiJExJTkVOTyIgIm9wZW5zc2wvZXZwLmgiICJhY19jdl9oZWFkZXJfb3BlbnNzbF9ldnBfaCIgIiRhY19pbmNsdWRlc19kZWZhdWx0IgogaWYgdGVzdCAieCRhY19jdl9oZWFkZXJfb3BlbnNzbF9ldnBfaCIgPSB4eWVzOyB0aGVuIDoKQEAgLTgyMTgsNiArODExNSwyOCBAQAogCiBkb25lCiAKKwkJCSMKKwkJCSMgT0ssIGRvIHdlIGhhdmUgRVZQX0NJUEhFUl9DVFhfbmV3PworCQkJIyBJZiBzbywgd2UgdXNlIGl0IHRvIGFsbG9jYXRlIGFuCisJCQkjIEVWUF9DSVBIRVJfQ1RYLCBhcyBFVlBfQ0lQSEVSX0NUWCBtYXkgYmUKKwkJCSMgb3BhcXVlOyBvdGhlcndpc2UsIHdlIGFsbG9jYXRlIGl0IG91cnNlbHZlcy4KKwkJCSMKKwkJCWZvciBhY19mdW5jIGluIEVWUF9DSVBIRVJfQ1RYX25ldworZG8gOgorICBhY19mbl9jX2NoZWNrX2Z1bmMgIiRMSU5FTk8iICJFVlBfQ0lQSEVSX0NUWF9uZXciICJhY19jdl9mdW5jX0VWUF9DSVBIRVJfQ1RYX25ldyIKK2lmIHRlc3QgIngkYWNfY3ZfZnVuY19FVlBfQ0lQSEVSX0NUWF9uZXciID0geHllczsgdGhlbiA6CisgIGNhdCA+PmNvbmZkZWZzLmggPDxfQUNFT0YKKyNkZWZpbmUgSEFWRV9FVlBfQ0lQSEVSX0NUWF9ORVcgMQorX0FDRU9GCisKK2ZpCitkb25lCisKKwkJZmkKKworZmkKKworCiBmaQogCiAjIENoZWNrIGZvciBsaWJjYXAtbmcKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5pbiBiL2NvbmZpZ3VyZS5pbgppbmRleCBhNjI5NTU5Li5hNzhhMTI2IDEwMDY0NAotLS0gYS9jb25maWd1cmUuaW4KKysrIGIvY29uZmlndXJlLmluCkBAIC0zNyw3ICszNywxMyBAQAogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXQvaWYuaD5dKQogaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9uZXRfcGZ2YXJfaCIgPSB5ZXM7IHRoZW4KLQlMT0NBTFNSQz0icHJpbnQtcGZsb2cuYyAkTE9DQUxTUkMiCisJQUNfQ0hFQ0tfSEVBREVSUyhuZXQvaWZfcGZsb2cuaCwgLCAsIFsjaW5jbHVkZSA8c3lzL3R5cGVzLmg+CisJI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KKwkjaW5jbHVkZSA8bmV0L2lmLmg+CisJI2luY2x1ZGUgPG5ldC9wZnZhci5oPl0pCisJaWYgdGVzdCAiJGFjX2N2X2hlYWRlcl9uZXRfaWZfcGZsb2dfaCIgPSB5ZXM7IHRoZW4KKwkJTE9DQUxTUkM9InByaW50LXBmbG9nLmMgJExPQ0FMU1JDIgorCWZpCiBmaQogQUNfQ0hFQ0tfSEVBREVSUyhuZXRpbmV0L2lmX2V0aGVyLmgsICwgLCBbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD5dKQpAQCAtMTY5LDcgKzE3NSw3IEBACiBjYXNlICIkZW5hYmxldmFsIiBpbgogeWVzKQlBQ19NU0dfUkVTVUxUKHllcykKIAlBQ19XQVJOKFtUaGUgU01CIHByaW50ZXIgbWF5IGhhdmUgZXhwbG9pdGFibGUgYnVmZmVyIG92ZXJmbG93cyEhIV0pCi0JQUNfREVGSU5FKFRDUERVTVBfRE9fU01CLCAxLAorCUFDX0RFRklORShFTkFCTEVfU01CLCAxLAogCSAgICBbZGVmaW5lIGlmIHlvdSB3YW50IHRvIGJ1aWxkIHRoZSBwb3NzaWJseS1idWdneSBTTUIgcHJpbnRlcl0pCiAJTE9DQUxTUkM9InByaW50LXNtYi5jIHNtYnV0aWwuYyAkTE9DQUxTUkMiCiAJOzsKQEAgLTIyOSwzMiArMjM1LDI0IEBACiBmaQogCiAjCi0jIFdlIG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgY2hlY2tpbmcgd2hldGhlciB0byBlbmFibGUgSVB2NiwgYmVjYXVzZSwKLSMgb24gc29tZSBwbGF0Zm9ybXMgKHN1Y2ggYXMgU3VuT1MgNS54KSwgdGhlIHRlc3QgcHJvZ3JhbSByZXF1aXJlcwotIyB0aGUgZXh0cmEgbmV0d29ya2luZyBsaWJyYXJpZXMuCisjIFdlIG11c3QgY2hlY2sgdGhpcyBiZWZvcmUgY2hlY2tpbmcgd2hldGhlciB0byBjaGVjayB0aGUgT1MncyBJUHY2LAorIyBzdXBwb3J0IGJlY2F1c2UsIG9uIHNvbWUgcGxhdGZvcm1zIChzdWNoIGFzIFN1bk9TIDUueCksIHRoZSB0ZXN0CisjIHByb2dyYW0gcmVxdWlyZXMgdGhlIGV4dHJhIG5ldHdvcmtpbmcgbGlicmFyaWVzLgogIwogQUNfTEJMX0xJQlJBUllfTkVUCiAKLUFDX01TR19DSEVDS0lORyhbd2hldGhlciB0byBlbmFibGUgaXB2Nl0pCi1BQ19BUkdfRU5BQkxFKGlwdjYsCi1bICAtLWVuYWJsZS1pcHY2ICAgICAgICAgICBlbmFibGUgaXB2NiAod2l0aCBpcHY0KSBzdXBwb3J0Ci0gIC0tZGlzYWJsZS1pcHY2ICAgICAgICAgIGRpc2FibGUgaXB2NiBzdXBwb3J0XSwKLVsgY2FzZSAiJGVuYWJsZXZhbCIgaW4KLXllcykgICBBQ19NU0dfUkVTVUxUKHllcykKLSAgICAgICBMT0NBTFNSQz0icHJpbnQtaXA2b3B0cy5jIHByaW50LW1vYmlsaXR5LmMgcHJpbnQtcmlwbmcuYyBwcmludC1pY21wNi5jIHByaW50LWZyYWc2LmMgcHJpbnQtcnQ2LmMgcHJpbnQtb3NwZjYuYyBwcmludC1kaGNwNi5jIHByaW50LWJhYmVsLmMgJExPQ0FMU1JDIgotICAgICAgIEFDX0RFRklORShJTkVUNiwgMSwgW0RlZmluZSBpZiB5b3UgZW5hYmxlIElQdjYgc3VwcG9ydF0pCi0gICAgICAgaXB2Nj15ZXMKLSAgICAgICA7OwotKikKLSAgICAgICBBQ19NU0dfUkVTVUxUKG5vKQotICAgICAgIGlwdjY9bm8KLSAgICAgICA7OwotICBlc2FjIF0sCi0KLSAgQUNfQ09NUElMRV9JRkVMU0UoCisjCisjIENoZWNrIHdoZXRoZXIgQUZfSU5FVDYgYW5kIHN0cnVjdCBpbjZfYWRkciBhcmUgZGVmaW5lZC4KKyMgSWYgdGhleSBhcmVuJ3QgYm90aCBkZWZpbmVkLCB3ZSBkb24ndCBoYXZlIHN1ZmZpY2llbnQgT1MKKyMgc3VwcG9ydCBmb3IgSVB2Niwgc28gd2UgZG9uJ3QgbG9vayBmb3IgSVB2NiBzdXBwb3J0IGxpYnJhcmllcywKKyMgYW5kIHdlIGRlZmluZSBBRl9JTkVUNiBhbmQgc3RydWN0IGluNl9hZGRyIG91cnNlbHZlcy4KKyMKK0FDX01TR19DSEVDS0lORyhbd2hldGhlciB0aGUgb3BlcmF0aW5nIHN5c3RlbSBzdXBwb3J0cyBJUHY2XSkKK0FDX0NPTVBJTEVfSUZFTFNFKAogICAgIFsKICAgICAgIEFDX0xBTkdfU09VUkNFKAotCVtbLyogQUZfSU5FVDYgYXZhaWxhYmxlIGNoZWNrICovCisJW1sKKy8qIEFGX0lORVQ2IGF2YWlsYWJsZSBjaGVjayAqLwogI2luY2x1ZGUgPHN5cy90eXBlcy5oPgogI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KICNpbmNsdWRlIDxuZXRpbmV0L2luLmg+CkBAIC0yNjcsMTcgKzI2NSwxOSBAQAogI2Vsc2UKICNlcnJvciAiQUZfSU5FVDYgbm90IGRlZmluZWQiCiAjZW5kaWYKLSAgICAgICAgXV0pCisJXV0pCiAgICAgXSwKLVsgQUNfTVNHX1JFU1VMVCh5ZXMpCi0gIExPQ0FMU1JDPSJwcmludC1pcDZvcHRzLmMgcHJpbnQtbW9iaWxpdHkuYyBwcmludC1yaXBuZy5jIHByaW50LWljbXA2LmMgcHJpbnQtZnJhZzYuYyBwcmludC1ydDYuYyBwcmludC1vc3BmNi5jIHByaW50LWRoY3A2LmMgcHJpbnQtYmFiZWwuYyAkTE9DQUxTUkMiCi0gIEFDX0RFRklORShJTkVUNiwgMSwgW0RlZmluZSBpZiB5b3UgZW5hYmxlIElQdjYgc3VwcG9ydF0pCi0gIGlwdjY9eWVzXSwKLVsgQUNfTVNHX1JFU1VMVChubykKLSAgaXB2Nj1ub10sCi1bIEFDX01TR19SRVNVTFQobm8pCi0gIGlwdjY9bm9dCi0pKQorICAgIFsKKwlBQ19NU0dfUkVTVUxUKHllcykKKwlBQ19ERUZJTkUoSEFWRV9PU19JUFY2X1NVUFBPUlQsIDEsCisJICAgIFtkZWZpbmUgaWYgdGhlIE9TIHByb3ZpZGVzIEFGX0lORVQ2IGFuZCBzdHJ1Y3QgaW42X2FkZHJdKQorCWlwdjY9eWVzCisgICAgXSwKKyAgICBbCisJQUNfTVNHX1JFU1VMVChubykKKwlpcHY2PW5vCisgICAgXQorKQogCiBpcHY2dHlwZT11bmtub3duCiBpcHY2bGliPW5vbmUKQEAgLTI5NCw4ICsyOTQsNyBAQAogI2lmZGVmIElQVjZfSU5SSUFfVkVSU0lPTgogeWVzCiAjZW5kaWZdLAotCQkJCVtpcHY2dHlwZT0kaTsKLQkJCQlDRkxBR1M9Ii1ESU5FVDYgJENGTEFHUyJdKQorCQkJCVtpcHY2dHlwZT0kaV0pCiAJCQk7OwogCQlrYW1lKQogCQkJZG5sIGh0dHA6Ly93d3cua2FtZS5uZXQvCkBAIC0zMDcsOCArMzA2LDcgQEAKIAkJCQlbaXB2NnR5cGU9JGk7CiAJCQkJaXB2NmxpYj1pbmV0NjsKIAkJCQlpcHY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCWlwdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ESU5FVDYgJENGTEFHUyJdKQorCQkJCWlwdjZ0cnlsaWJjPXllc10pCiAJCQk7OwogCQlsaW51eC1nbGliYykKIAkJCWRubCBodHRwOi8vd3d3LnY2LmxpbnV4Lm9yLmpwLwpAQCAtMzE3LDggKzMxNSw3IEBACiAjaWYgZGVmaW5lZChfX0dMSUJDX18pICYmIF9fR0xJQkNfXyA+PSAyICYmIF9fR0xJQkNfTUlOT1JfXyA+PSAxCiB5ZXMKICNlbmRpZl0sCi0JCQkJW2lwdjZ0eXBlPSRpOwotCQkJCUNGTEFHUz0iLURJTkVUNiAkQ0ZMQUdTIl0pCisJCQkJW2lwdjZ0eXBlPSRpXSkKIAkJCTs7CiAJCWxpbnV4LWxpYmluZXQ2KQogCQkJZG5sIGh0dHA6Ly93d3cudjYubGludXgub3IuanAvCkBAIC0zMzEsNyArMzI4LDcgQEAKIAkJCQlpcHY2bGliPWluZXQ2CiAJCQkJaXB2NmxpYmRpcj0vdXNyL2luZXQ2L2xpYgogCQkJCWlwdjZ0cnlsaWJjPXllczsKLQkJCQlDRkxBR1M9Ii1ESU5FVDYgLUkvdXNyL2luZXQ2L2luY2x1ZGUgJENGTEFHUyIKKwkJCQlDRkxBR1M9Ii1JL3Vzci9pbmV0Ni9pbmNsdWRlICRDRkxBR1MiCiAJCQlmaQogCQkJOzsKIAkJdG9zaGliYSkKQEAgLTM0Miw4ICszMzksNyBAQAogI2VuZGlmXSwKIAkJCQlbaXB2NnR5cGU9JGk7CiAJCQkJaXB2NmxpYj1pbmV0NjsKLQkJCQlpcHY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliOwotCQkJCUNGTEFHUz0iLURJTkVUNiAkQ0ZMQUdTIl0pCisJCQkJaXB2NmxpYmRpcj0vdXNyL2xvY2FsL3Y2L2xpYl0pCiAJCQk7OwogCQl2NmQpCiAJCQlBQ19FR1JFUF9DUFAoeWVzLApAQCAtMzY0LDggKzM2MCw3IEBACiAjZW5kaWZdLAogCQkJCVtpcHY2dHlwZT0kaTsKIAkJCQlpcHY2bGliPWluZXQ2OwotCQkJCWlwdjZsaWJkaXI9L3Vzci9sb2NhbC92Ni9saWI7Ci0JCQkJQ0ZMQUdTPSItRElORVQ2ICRDRkxBR1MiXSkKKwkJCQlpcHY2bGliZGlyPS91c3IvbG9jYWwvdjYvbGliXSkKIAkJCTs7CiAJCWVzYWMKIAkJaWYgdGVzdCAiJGlwdjZ0eXBlIiAhPSAidW5rbm93biI7IHRoZW4KQEAgLTM5MSwxNTEgKzM4Niw2IEBACiAJZmkKIGZpCiAKLQotaWYgdGVzdCAiJGlwdjYiID0gInllcyI7IHRoZW4KLQkjCi0JIyBYWFggLSBvbiBUcnU2NCBVTklYIDUuMSwgdGhlcmUgaXMgbm8gImdldGFkZHJpbmZvKCkiCi0JIyBmdW5jdGlvbiBpbiBsaWJjOyB0aGVyZSBhcmUgIm5nZXRhZGRyaW5mbygpIiBhbmQKLQkjICJvZ2V0YWRkcmluZm8oKSIgZnVuY3Rpb25zLCBhbmQgPG5ldGRiLmg+ICNkZWZpbmVzCi0JIyAiZ2V0YWRkcmluZm8iIHRvIGJlIGVpdGhlciAibmdldGFkZHJpbmZvIiBvcgotCSMgIm9nZXRhZGRyaW5mbyIsIGRlcGVuZGluZyBvbiB3aGV0aGVyIF9TT0NLQUREUl9MRU4KLQkjIG9yIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQgYXJlIGRlZmluZWQgb3Igbm90LgotCSMKLQkjIFNvIHRoaXMgdGVzdCBkb2Vzbid0IHdvcmsgb24gVHJ1NjQgNS4xLCBhbmQgcG9zc2libHkKLQkjIG9uIG90aGVyIDUueCByZWxlYXNlcy4gIFRoaXMgY2F1c2VzIHRoZSBjb25maWd1cmUKLQkjIHNjcmlwdCB0byBiZWNvbWUgY29uZnVzZWQsIGFuZCByZXN1bHRzIGluIGxpYnBjYXAKLQkjIGJlaW5nIHVuYnVpbGRhYmxlLgotCSMKLQlBQ19TRUFSQ0hfTElCUyhnZXRhZGRyaW5mbywgc29ja2V0LCBbZG5sCi0JQUNfTVNHX0NIRUNLSU5HKGdldGFkZHJpbmZvIGJ1ZykKLQlBQ19DQUNIRV9WQUwodGRfY3ZfYnVnZ3lnZXRhZGRyaW5mbywgW0FDX1RSWV9SVU4oWwotI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPG5ldGRiLmg+Ci0jaW5jbHVkZSA8c3RyaW5nLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLQotbWFpbigpCi17Ci0gIGludCBwYXNzaXZlLCBnYWllcnIsIGluZXQ0ID0gMCwgaW5ldDYgPSAwOwotICBzdHJ1Y3QgYWRkcmluZm8gaGludHMsICphaSwgKmFpdG9wOwotICBjaGFyIHN0cmFkZHJbSU5FVDZfQUREUlNUUkxFTl0sIHN0cnBvcnRbMTZdOwotCi0gIGZvciAocGFzc2l2ZSA9IDA7IHBhc3NpdmUgPD0gMTsgcGFzc2l2ZSsrKSB7Ci0gICAgbWVtc2V0KCZoaW50cywgMCwgc2l6ZW9mKGhpbnRzKSk7Ci0gICAgaGludHMuYWlfZmFtaWx5ID0gQUZfVU5TUEVDOwotICAgIGhpbnRzLmFpX2ZsYWdzID0gcGFzc2l2ZSA/IEFJX1BBU1NJVkUgOiAwOwotICAgIGhpbnRzLmFpX3NvY2t0eXBlID0gU09DS19TVFJFQU07Ci0gICAgaGludHMuYWlfcHJvdG9jb2wgPSBJUFBST1RPX1RDUDsKLSAgICBpZiAoKGdhaWVyciA9IGdldGFkZHJpbmZvKE5VTEwsICI1NDMyMSIsICZoaW50cywgJmFpdG9wKSkgIT0gMCkgewotICAgICAgKHZvaWQpZ2FpX3N0cmVycm9yKGdhaWVycik7Ci0gICAgICBnb3RvIGJhZDsKLSAgICB9Ci0gICAgZm9yIChhaSA9IGFpdG9wOyBhaTsgYWkgPSBhaS0+YWlfbmV4dCkgewotICAgICAgaWYgKGFpLT5haV9hZGRyID09IE5VTEwgfHwKLSAgICAgICAgICBhaS0+YWlfYWRkcmxlbiA9PSAwIHx8Ci0gICAgICAgICAgZ2V0bmFtZWluZm8oYWktPmFpX2FkZHIsIGFpLT5haV9hZGRybGVuLAotICAgICAgICAgICAgICAgICAgICAgIHN0cmFkZHIsIHNpemVvZihzdHJhZGRyKSwgc3RycG9ydCwgc2l6ZW9mKHN0cnBvcnQpLAotICAgICAgICAgICAgICAgICAgICAgIE5JX05VTUVSSUNIT1NUfE5JX05VTUVSSUNTRVJWKSAhPSAwKSB7Ci0gICAgICAgIGdvdG8gYmFkOwotICAgICAgfQotICAgICAgc3dpdGNoIChhaS0+YWlfZmFtaWx5KSB7Ci0gICAgICBjYXNlIEFGX0lORVQ6Ci0gICAgICAgIGlmIChzdHJjbXAoc3RycG9ydCwgIjU0MzIxIikgIT0gMCkgewotICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICB9Ci0gICAgICAgIGlmIChwYXNzaXZlKSB7Ci0gICAgICAgICAgaWYgKHN0cmNtcChzdHJhZGRyLCAiMC4wLjAuMCIpICE9IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICBpZiAoc3RyY21wKHN0cmFkZHIsICIxMjcuMC4wLjEiKSAhPSAwKSB7Ci0gICAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICAgICAgaW5ldDQrKzsKLSAgICAgICAgYnJlYWs7Ci0gICAgICBjYXNlIEFGX0lORVQ2OgotICAgICAgICBpZiAoc3RyY21wKHN0cnBvcnQsICI1NDMyMSIpICE9IDApIHsKLSAgICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgfQotICAgICAgICBpZiAocGFzc2l2ZSkgewotICAgICAgICAgIGlmIChzdHJjbXAoc3RyYWRkciwgIjo6IikgIT0gMCkgewotICAgICAgICAgICAgZ290byBiYWQ7Ci0gICAgICAgICAgfQotICAgICAgICB9IGVsc2UgewotICAgICAgICAgIGlmIChzdHJjbXAoc3RyYWRkciwgIjo6MSIpICE9IDApIHsKLSAgICAgICAgICAgIGdvdG8gYmFkOwotICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICBpbmV0NisrOwotICAgICAgICBicmVhazsKLSAgICAgIGNhc2UgQUZfVU5TUEVDOgotICAgICAgICBnb3RvIGJhZDsKLSAgICAgICAgYnJlYWs7Ci0jaWZkZWYgQUZfVU5JWAotICAgICAgY2FzZSBBRl9VTklYOgotI2Vsc2UKLSNpZmRlZiBBRl9MT0NBTAotICAgICAgY2FzZSBBRl9MT0NBTDoKLSNlbmRpZgotI2VuZGlmCi0gICAgICBkZWZhdWx0OgotICAgICAgICAvKiBhbm90aGVyIGZhbWlseSBzdXBwb3J0PyAqLwotICAgICAgICBicmVhazsKLSAgICAgIH0KLSAgICB9Ci0gIH0KLQotICAvKiBzdXBwb3J0ZWQgZmFtaWx5IHNob3VsZCBiZSAyLCB1bnN1cHBvcnRlZCBmYW1pbHkgc2hvdWxkIGJlIDAgKi8KLSAgaWYgKCEoaW5ldDQgPT0gMCB8fCBpbmV0NCA9PSAyKSkKLSAgICBnb3RvIGJhZDsKLSAgaWYgKCEoaW5ldDYgPT0gMCB8fCBpbmV0NiA9PSAyKSkKLSAgICBnb3RvIGJhZDsKLQotICBpZiAoYWl0b3ApCi0gICAgZnJlZWFkZHJpbmZvKGFpdG9wKTsKLSAgZXhpdCgwKTsKLQotIGJhZDoKLSAgaWYgKGFpdG9wKQotICAgIGZyZWVhZGRyaW5mbyhhaXRvcCk7Ci0gIGV4aXQoMSk7Ci19Ci1dLAotCXRkX2N2X2J1Z2d5Z2V0YWRkcmluZm89bm8sCi0JdGRfY3ZfYnVnZ3lnZXRhZGRyaW5mbz15ZXMsCi0JdGRfY3ZfYnVnZ3lnZXRhZGRyaW5mbz11bmtub3duKV0pCi0JaWYgdGVzdCAiJHRkX2N2X2J1Z2d5Z2V0YWRkcmluZm8iID0gbm87IHRoZW4KLQkJQUNfTVNHX1JFU1VMVChnb29kKQotCWVsaWYgdGVzdCAiJHRkX2N2X2J1Z2d5Z2V0YWRkcmluZm8iID0gdW5rbm93bjsgdGhlbgotCQlBQ19NU0dfUkVTVUxUKFt1bmtub3duIChjcm9zcy1jb21waWxpbmcpXSkKLQllbHNlCi0JCUFDX01TR19SRVNVTFQoYnVnZ3kpCi0JZmkKLQotCWlmIHRlc3QgIiR0ZF9jdl9idWdneWdldGFkZHJpbmZvIiA9ICJ5ZXMiOyB0aGVuCi0JCSMKLQkJIyBYWFggLSBpdCBkb2Vzbid0IGFwcGVhciB0aGF0ICJpcHY2dHlwZSIgY2FuIGV2ZXIgYmUKLQkJIyBzZXQgdG8gImxpbnV4Ii4gIFNob3VsZCB0aGlzIGJlIHRlc3RpbmcgZm9yCi0JCSMgImxpbnV4LWdsaWJjIiwgb3IgZm9yIHRoYXQgKm9yKiAibGludXgtbGliaW5ldDYiPwotCQkjIElmIHRoZSBsYXR0ZXIsIG5vdGUgdGhhdCAibGludXgtbGliaW5ldDYiIGlzIGFsc28KLQkJIyB0aGUgdHlwZSBnaXZlbiB0byBzb21lIG5vbi1MaW51eCBPU2VzLgotCQkjCi0JCWlmIHRlc3QgIiRpcHY2dHlwZSIgIT0gImxpbnV4IjsgdGhlbgotCQkJZWNobyAnRmF0YWw6IFlvdSBtdXN0IGdldCB3b3JraW5nIGdldGFkZHJpbmZvKCkgZnVuY3Rpb24uJwotCQkJZWNobyAnICAgICAgIG9yIHlvdSBjYW4gc3BlY2lmeSAiLS1kaXNhYmxlLWlwdjYiJy4KLQkJCWV4aXQgMQotCQllbHNlCi0JCQllY2hvICdXYXJuaW5nOiBnZXRhZGRyaW5mbygpIGltcGxlbWVudGF0aW9uIG9uIHlvdXIgc3lzdGVtIHNlZW1zIGJlIGJ1Z2d5LicKLQkJCWVjaG8gJyAgICAgICAgIEJldHRlciB1cGdyYWRlIHlvdXIgc3lzdGVtIGxpYnJhcnkgdG8gbmV3ZXN0IHZlcnNpb24nCi0JCQllY2hvICcgICAgICAgICBvZiBHTlUgQyBsaWJyYXJ5IChha2EgZ2xpYmMpLicKLQkJZmkKLQlmaQotCV0pCi0JQUNfUkVQTEFDRV9GVU5DUyhnZXRuYW1laW5mbykKLWZpCi0KIEFDX0NBQ0hFX0NIRUNLKFtmb3IgZG5ldF9odG9hIGRlY2xhcmF0aW9uIGluIG5ldGRuZXQvZG5ldGRiLmhdLAogW3RkX2N2X2RlY2xfbmV0ZG5ldF9kbmV0ZGJfaF9kbmV0X2h0b2FdLAogW0FDX0VHUkVQX0hFQURFUihkbmV0X2h0b2EsIG5ldGRuZXQvZG5ldGRiLmgsCkBAIC01NDYsMjggKzM5Niw3IEBACiAJICAgIFtkZWZpbmUgaWYgeW91IGhhdmUgYSBkbmV0X2h0b2EgZGVjbGFyYXRpb24gaW4gPG5ldGRuZXQvZG5ldGRiLmg+XSkKIGZpCiAKLWRubAotZG5sIENoZWNrcyBmb3IgYWRkcmluZm8gc3RydWN0dXJlCi1BQ19TVFJVQ1RfQUREUklORk8oYWNfY3ZfYWRkcmluZm8pCi1pZiB0ZXN0ICIkYWNfY3ZfYWRkcmluZm8iID0gbm87IHRoZW4KLQltaXNzaW5nX2luY2x1ZGVzPXllcwotZmkKLQotZG5sCi1kbmwgQ2hlY2tzIGZvciBOSV9NQVhTRVJWCi1BQ19OSV9NQVhTRVJWKGFjX2N2X21heHNlcnYpCi1pZiB0ZXN0ICIkYWNfY3ZfbWF4c2VydiIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCi1kbmwKLWRubCBDaGVja3MgZm9yIE5JX05BTUVSRVFECi1BQ19OSV9OQU1FUkVRRChhY19jdl9uYW1lcmVxZCkKLWlmIHRlc3QgIiRhY19jdl9uYW1lcmVxZCIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCi1BQ19SRVBMQUNFX0ZVTkNTKHZmcHJpbnRmIHN0cmNhc2VjbXAgc3RybGNhdCBzdHJsY3B5IHN0cmR1cCBzdHJzZXAgZ2V0b3B0X2xvbmcpCitBQ19SRVBMQUNFX0ZVTkNTKHZmcHJpbnRmIHN0cmxjYXQgc3RybGNweSBzdHJkdXAgc3Ryc2VwIGdldG9wdF9sb25nKQogQUNfQ0hFQ0tfRlVOQ1MoZm9yayB2Zm9yayBzdHJmdGltZSkKIEFDX0NIRUNLX0ZVTkNTKHNldGxpbmVidWYgYWxhcm0pCiAKQEAgLTU4OSw1MiArNDE4LDEyIEBACiBBQ19TRUFSQ0hfTElCUyhnZXRycGNieW51bWJlciwgbnNsLAogICAgIEFDX0RFRklORShIQVZFX0dFVFJQQ0JZTlVNQkVSLCAxLCBbZGVmaW5lIGlmIHlvdSBoYXZlIGdldHJwY2J5bnVtYmVyKCldKSkKIAotZG5sIEFDX0NIRUNLX0xJQih6LCB1bmNvbXByZXNzKQotZG5sIEFDX0NIRUNLX0hFQURFUlMoemxpYi5oKQotCiBBQ19MQkxfTElCUENBUChWX1BDQVBERVAsIFZfSU5DTFMpCiAKICMKICMgQ2hlY2sgZm9yIHRoZXNlIGFmdGVyIEFDX0xCTF9MSUJQQ0FQLCBzbyB3ZSBsaW5rIHdpdGggdGhlIGFwcHJvcHJpYXRlCiAjIGxpYnJhcmllcyAoZS5nLiwgIi1sc29ja2V0IC1sbnNsIiBvbiBTb2xhcmlzKS4KICMKLSMgV2UgZG9uJ3QgdXNlIEFDX1JFUExBQ0VfRlVOQ1MgYmVjYXVzZSB0aGF0IHVzZXMgQUNfQ0hFQ0tfRlVOQ1Mgd2hpY2gKLSMgdXNlIEFDX0NIRUNLX0ZVTkMgd2hpY2ggZG9lc24ndCBsZXQgdXMgc3BlY2lmeSB0aGUgcmlnaHQgI2luY2x1ZGVzCi0jIHRvIG1ha2UgdGhpcyB3b3JrIG9uIEJTRC9PUyA0LnguICBCU0QvT1MgNC54IHNoaXBzIHdpdGggdGhlIEJJTkQ4Ci0jIHJlc29sdmVyLCBhbmQgdGhlIHdheSBpdCBkZWZpbmVzIGluZXRfe250b3AscHRvbn0gaXMgcmF0aGVyIHN0cmFuZ2U7Ci0jIGl0IGRvZXMgbm90IHNoaXAgd2l0aCBhIGxpYmMgc3ltYm9sICJpbmV0X250b3AoKSIsIGl0IHNoaXBzIHdpdGgKLSMgIl9pbmV0X250b3AoKSIsIGFuZCBoYXMgYSAjZGVmaW5lIG1hY3JvIGluIG9uZSBvZiB0aGUgc3lzdGVtIGhlYWRlcnMKLSMgdG8gcmVuYW1lIGl0LgotIwotZG5sIEFDX1RSWV9DT01QSUxFKGluZXRfbnRvcCBpbmV0X3B0b24gaW5ldF9hdG9uKQotQUNfTVNHX0NIRUNLSU5HKGZvciBpbmV0X250b3ApCi1BQ19UUllfTElOSyhbI2luY2x1ZGUgPHN5cy90eXBlcy5oPgotI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+XSwgW2NoYXIgc3JjWzRdLCBkc3RbMTI4XTsKLWluZXRfbnRvcChBRl9JTkVULCBzcmMsIGRzdCwgc2l6ZW9mKGRzdCkpO10sCi0JW0FDX01TR19SRVNVTFQoeWVzKV0sIFtBQ19NU0dfUkVTVUxUKG5vKQotCUFDX0xJQk9CSihpbmV0X250b3ApXSkKLUFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9wdG9uKQotQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+Ci0jaW5jbHVkZSA8bmV0aW5ldC9pbi5oPgotI2luY2x1ZGUgPGFycGEvaW5ldC5oPl0sIFtjaGFyIHNyY1sxMjhdLCBkc3RbNF07Ci1pbmV0X3B0b24oQUZfSU5FVCwgc3JjLCBkc3QpO10sCi0JW0FDX01TR19SRVNVTFQoeWVzKV0sIFtBQ19NU0dfUkVTVUxUKG5vKQotCUFDX0xJQk9CSihpbmV0X3B0b24pXSkKLUFDX01TR19DSEVDS0lORyhmb3IgaW5ldF9hdG9uKQotQUNfVFJZX0xJTksoWyNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KLSNpbmNsdWRlIDxuZXRpbmV0L2luLmg+Ci0jaW5jbHVkZSA8YXJwYS9pbmV0Lmg+XSwgW2NoYXIgc3JjWzEyOF07Ci1zdHJ1Y3QgaW5fYWRkciBkc3Q7Ci1pbmV0X2F0b24oc3JjLCAmZHN0KTtdLAotCVtBQ19NU0dfUkVTVUxUKHllcyldLCBbQUNfTVNHX1JFU1VMVChubykKLQlBQ19MSUJPQkooaW5ldF9hdG9uKV0pCi0KLSMKLSMgQ2hlY2sgZm9yIHRoZXNlIGFmdGVyIEFDX0xCTF9MSUJQQ0FQLCBmb3IgdGhlIHNhbWUgcmVhc29uLgotIwogIyBZb3UgYXJlIGluIGEgdHdpc3R5IGxpdHRsZSBtYXplIG9mIFVOKlhlcywgYWxsIGRpZmZlcmVudC4KICMgU29tZSBtaWdodCBub3QgaGF2ZSBldGhlcl9udG9ob3N0KCkuCiAjIFNvbWUgbWlnaHQgaGF2ZSBpdCwgYnV0IG5vdCBkZWNsYXJlIGl0IGluIGFueSBoZWFkZXIgZmlsZS4KQEAgLTc1MywxNCArNTQyLDYgQEAKICMgbGliZGxwaSBpcyBuZWVkZWQgZm9yIFNvbGFyaXMgMTEgYW5kIGxhdGVyLgogQUNfQ0hFQ0tfTElCKGRscGksIGRscGlfd2FsaywgTElCUz0iJExJQlMgLWxkbHBpIiBMREZMQUdTPSItTC9saWIgJExERkxBR1MiLCAsLUwvbGliKQogCi1kbmwgcG9ydGFiaWxpdHkgbWFjcm9zIGZvciBnZXRhZGRyaW5mby9nZXRuYW1laW5mbwotZG5sCi1kbmwgQ2hlY2sgZm9yIHNhX2xlbgotQUNfQ0hFQ0tfU0FfTEVOKGFjX2N2X3NvY2thZGRyX2hhc19zYV9sZW4pCi1pZiB0ZXN0ICIkYWNfY3Zfc29ja2FkZHJfaGFzX3NhX2xlbiIgPSBubzsgdGhlbgotCW1pc3NpbmdfaW5jbHVkZXM9eWVzCi1maQotCiBkbmwKIGRubCBDaGVjayBmb3IgInBjYXBfbGlzdF9kYXRhbGlua3MoKSIsICJwY2FwX3NldF9kYXRhbGluaygpIiwKIGRubCBhbmQgInBjYXBfZGF0YWxpbmtfbmFtZV90b192YWwoKSIsIGFuZCB1c2Ugc3Vic3RpdHV0ZSB2ZXJzaW9ucwpAQCAtODYwLDM5ICs2NDEsNTEgQEAKIAlBQ19NU0dfUkVTVUxUKG5vKQogICAgIGZpCiBmaQotQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcGNhcF9kZWJ1ZyBpcyBkZWZpbmVkIGJ5IGxpYnBjYXApCi1BQ19UUllfTElOSyhbXSwKLSAgIFsKLQlleHRlcm4gaW50IHBjYXBfZGVidWc7CiAKLQlyZXR1cm4gcGNhcF9kZWJ1ZzsKLSAgIF0sCi0gICBhY19sYmxfY3ZfcGNhcF9kZWJ1Z19kZWZpbmVkPXllcywKLSAgIGFjX2xibF9jdl9wY2FwX2RlYnVnX2RlZmluZWQ9bm8pCi1pZiB0ZXN0ICIkYWNfbGJsX2N2X3BjYXBfZGVidWdfZGVmaW5lZCIgPSB5ZXMgOyB0aGVuCi0JQUNfTVNHX1JFU1VMVCh5ZXMpCi0JQUNfREVGSU5FKEhBVkVfUENBUF9ERUJVRywgMSwgW2RlZmluZSBpZiBsaWJwY2FwIGhhcyBwY2FwX2RlYnVnXSkKLWVsc2UKLQlBQ19NU0dfUkVTVUxUKG5vKQorIworIyBDaGVjayBmb3Igc3BlY2lhbCBkZWJ1Z2dpbmcgZnVuY3Rpb25zCisjCitBQ19DSEVDS19GVU5DUyhwY2FwX3NldF9wYXJzZXJfZGVidWcpCitpZiB0ZXN0ICIkYWNfY3ZfZnVuY19wY2FwX3NldF9wYXJzZXJfZGVidWciID0gIm5vIiA7IHRoZW4KIAkjCi0JIyBPSywgd2hhdCBhYm91dCAieXlkZWJ1ZyI/Ci0JIwotCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHl5ZGVidWcgaXMgZGVmaW5lZCBieSBsaWJwY2FwKQorCSMgT0ssIHdlIGRvbid0IGhhdmUgcGNhcF9zZXRfcGFyc2VyX2RlYnVnKCkgdG8gc2V0IHRoZSBsaWJwY2FwCisJIyBmaWx0ZXIgZXhwcmVzc2lvbiBwYXJzZXIgZGVidWcgZmxhZzsgY2FuIHdlIGRpcmVjdGx5IHNldCB0aGUKKwkjIGZsYWc/CisJQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgcGNhcF9kZWJ1ZyBpcyBkZWZpbmVkIGJ5IGxpYnBjYXApCiAJQUNfVFJZX0xJTksoW10sCiAJICAgWwotCQlleHRlcm4gaW50IHl5ZGVidWc7CisJCWV4dGVybiBpbnQgcGNhcF9kZWJ1ZzsKIAotCQlyZXR1cm4geXlkZWJ1ZzsKKwkJcmV0dXJuIHBjYXBfZGVidWc7CiAJICAgXSwKLQkgICBhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkPXllcywKLQkgICBhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkPW5vKQotCWlmIHRlc3QgIiRhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KKwkgICBhY19sYmxfY3ZfcGNhcF9kZWJ1Z19kZWZpbmVkPXllcywKKwkgICBhY19sYmxfY3ZfcGNhcF9kZWJ1Z19kZWZpbmVkPW5vKQorCWlmIHRlc3QgIiRhY19sYmxfY3ZfcGNhcF9kZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KIAkJQUNfTVNHX1JFU1VMVCh5ZXMpCi0JCUFDX0RFRklORShIQVZFX1lZREVCVUcsIDEsIFtkZWZpbmUgaWYgbGlicGNhcCBoYXMgeXlkZWJ1Z10pCisJCUFDX0RFRklORShIQVZFX1BDQVBfREVCVUcsIDEsIFtkZWZpbmUgaWYgbGlicGNhcCBoYXMgcGNhcF9kZWJ1Z10pCiAJZWxzZQogCQlBQ19NU0dfUkVTVUxUKG5vKQorCQkjCisJCSMgT0ssIHdoYXQgYWJvdXQgInl5ZGVidWciPworCQkjCisJCUFDX01TR19DSEVDS0lORyh3aGV0aGVyIHl5ZGVidWcgaXMgZGVmaW5lZCBieSBsaWJwY2FwKQorCQlBQ19UUllfTElOSyhbXSwKKwkJICAgWworCQkJZXh0ZXJuIGludCB5eWRlYnVnOworCisJCQlyZXR1cm4geXlkZWJ1ZzsKKwkJICAgXSwKKwkJICAgYWNfbGJsX2N2X3l5ZGVidWdfZGVmaW5lZD15ZXMsCisJCSAgIGFjX2xibF9jdl95eWRlYnVnX2RlZmluZWQ9bm8pCisJCWlmIHRlc3QgIiRhY19sYmxfY3ZfeXlkZWJ1Z19kZWZpbmVkIiA9IHllcyA7IHRoZW4KKwkJCUFDX01TR19SRVNVTFQoeWVzKQorCQkJQUNfREVGSU5FKEhBVkVfWVlERUJVRywgMSwgW2RlZmluZSBpZiBsaWJwY2FwIGhhcyB5eWRlYnVnXSkKKwkJZWxzZQorCQkJQUNfTVNHX1JFU1VMVChubykKKwkJZmkKIAlmaQogZmkKK0FDX0NIRUNLX0ZVTkNTKHBjYXBfc2V0X29wdGltaXplcl9kZWJ1ZykKIEFDX1JFUExBQ0VfRlVOQ1MoYnBmX2R1bXApCWRubCBtb3ZlZCB0byBsaWJwY2FwIGluIDAuNgogCiBWX0dST1VQPTAKQEAgLTEwNzEsOSArODY0LDkgQEAKICMKIHNhdmVkY3BwZmxhZ3M9IiRDUFBGTEFHUyIKIENQUEZMQUdTPSIkQ1BQRkxBR1MgJFZfSU5DTFMiCi1BQ19DSEVDS19IRUFERVJTKHBjYXAvYmx1ZXRvb3RoLmgsLCxbI2luY2x1ZGUgInRjcGR1bXAtc3RkaW5jLmgiXSkKLUFDX0NIRUNLX0hFQURFUlMocGNhcC9uZmxvZy5oLCwsWyNpbmNsdWRlICJ0Y3BkdW1wLXN0ZGluYy5oIl0pCi1BQ19DSEVDS19IRUFERVJTKHBjYXAvdXNiLmgsLCxbI2luY2x1ZGUgInRjcGR1bXAtc3RkaW5jLmgiXSkKK0FDX0NIRUNLX0hFQURFUlMocGNhcC9ibHVldG9vdGguaCwsLFsjaW5jbHVkZSAibmV0ZGlzc2VjdC1zdGRpbmMuaCJdKQorQUNfQ0hFQ0tfSEVBREVSUyhwY2FwL25mbG9nLmgsLCxbI2luY2x1ZGUgIm5ldGRpc3NlY3Qtc3RkaW5jLmgiXSkKK0FDX0NIRUNLX0hFQURFUlMocGNhcC91c2IuaCwsLFsjaW5jbHVkZSAibmV0ZGlzc2VjdC1zdGRpbmMuaCJdKQogQ1BQRkxBR1M9IiRzYXZlZGNwcGZsYWdzIgogCiBBQ19QUk9HX1JBTkxJQgpAQCAtMTA4NSwzNSArODc4LDcxIEBACiAKIEFDX0xCTF9VTkFMSUdORURfQUNDRVNTCiAKLUFDX1ZBUl9IX0VSUk5PCi0KLSMgQ2hlY2sgZm9yIE9wZW5TU0wgbGliY3J5cHRvCi1BQ19NU0dfQ0hFQ0tJTkcod2hldGhlciB0byB1c2UgT3BlblNTTCBsaWJjcnlwdG8pCisjIENoZWNrIGZvciBPcGVuU1NML2xpYnJlc3NsIGxpYmNyeXB0bworQUNfTVNHX0NIRUNLSU5HKHdoZXRoZXIgdG8gdXNlIE9wZW5TU0wvbGlicmVzc2wgbGliY3J5cHRvKQogIyBTcGVjaWZ5IGxvY2F0aW9uIGZvciBib3RoIGluY2x1ZGVzIGFuZCBsaWJyYXJpZXMuCiB3YW50X2xpYmNyeXB0bz1pZmF2YWlsYWJsZQogQUNfQVJHX1dJVEgoY3J5cHRvLAotICAgIEFTX0hFTFBfU1RSSU5HKFstLXdpdGgtY3J5cHRvXSwKLQkJICAgW3VzZSBPcGVuU1NMIGxpYmNyeXB0byBAPDpAZGVmYXVsdD15ZXMsIGlmIGF2YWlsYWJsZUA6PkBdKSwKKyAgICBBU19IRUxQX1NUUklORyhbLS13aXRoLWNyeXB0b11APDpAPURJUkA6PkAsCisJCSAgIFt1c2UgT3BlblNTTC9saWJyZXNzbCBsaWJjcnlwdG8gKGxvY2F0ZWQgaW4gZGlyZWN0b3J5IERJUiwgaWYgc3BlY2lmaWVkKSBAPDpAZGVmYXVsdD15ZXMsIGlmIGF2YWlsYWJsZUA6PkBdKSwKIFsKIAlpZiB0ZXN0ICR3aXRodmFsID0gbm8KIAl0aGVuCisJCSMgVXNlciBkb2Vzbid0IHdhbnQgdG8gbGluayB3aXRoIGxpYmNyeXB0by4KIAkJd2FudF9saWJjcnlwdG89bm8KIAkJQUNfTVNHX1JFU1VMVChubykKIAllbGlmIHRlc3QgJHdpdGh2YWwgPSB5ZXMKIAl0aGVuCisJCSMgVXNlciB3YW50cyB0byBsaW5rIHdpdGggbGliY3J5cHRvIGJ1dCBoYXNuJ3Qgc3BlY2lmaWVkCisJCSMgYSBkaXJlY3RvcnkuCiAJCXdhbnRfbGliY3J5cHRvPXllcwogCQlBQ19NU0dfUkVTVUxUKHllcykKKwllbHNlCisJCSMgVXNlciB3YW50cyB0byBsaW5rIHdpdGggbGliY3J5cHRvIGFuZCBoYXMgc3BlY2lmaWVkCisJCSMgYSBkaXJlY3RvcnksIHNvIHVzZSB0aGUgcHJvdmlkZWQgdmFsdWUuCisJCXdhbnRfbGliY3J5cHRvPXllcworCQlsaWJjcnlwdG9fcm9vdD0kd2l0aHZhbAorCQlBQ19NU0dfUkVTVUxUKFt5ZXMsIHVzaW5nIHRoZSB2ZXJzaW9uIGluc3RhbGxlZCBpbiAkd2l0aHZhbF0pCisKKwkJIworCQkjIFB1dCB0aGUgc3ViZGlyZWN0b3JpZXMgb2YgdGhlIGxpYmNyeXB0byByb290IGRpcmVjdG9yeQorCQkjIGF0IHRoZSBmcm9udCBvZiB0aGUgaGVhZGVyIGFuZCBsaWJyYXJ5IHNlYXJjaCBwYXRoLgorCQkjCisJCUNGTEFHUz0iLUkkd2l0aHZhbC9pbmNsdWRlICRDRkxBR1MiCisJCUxJQlM9Ii1MJHdpdGh2YWwvbGliICRMSUJTIgogCWZpCiBdLFsKIAkjCi0JIyBVc2UgbGliY3J5cHRvIGlmIGl0J3MgcHJlc2VudCwgb3RoZXJ3aXNlIGRvbid0LgorCSMgVXNlIGxpYmNyeXB0byBpZiBpdCdzIHByZXNlbnQsIG90aGVyd2lzZSBkb24ndDsgbm8gZGlyZWN0b3J5CisJIyB3YXMgc3BlY2lmaWVkLgogCSMKIAl3YW50X2xpYmNyeXB0bz1pZmF2YWlsYWJsZQogCUFDX01TR19SRVNVTFQoW3llcywgaWYgYXZhaWxhYmxlXSkKIF0pCiBpZiB0ZXN0ICIkd2FudF9saWJjcnlwdG8iICE9ICJubyI7IHRoZW4KLQlBQ19DSEVDS19MSUIoY3J5cHRvLCBERVNfY2JjX2VuY3J5cHQpCi0JQUNfQ0hFQ0tfSEVBREVSUyhvcGVuc3NsL2V2cC5oKQorCSMKKwkjIERvbid0IGNoZWNrIGZvciBsaWJjcnlwdG8gdW5sZXNzIHdlIGhhdmUgaXRzIGhlYWRlcnM7CisJIyBBcHBsZSwgYmxlc3MgdGhlaXIgcG9pbnR5IGxpdHRsZSBoZWFkcywgYXBwYXJlbnRseSBzaGlwCisJIyBsaWJjcnlwdG8gYXMgYSBsaWJyYXJ5LCBidXQgbm90IHRoZSBoZWFkZXIgZmlsZXMsIGluCisJIyBFbCBDYXBpdGFuLCBwcm9iYWJseSBiZWNhdXNlIHRoZXkgZG9uJ3Qgd2FudCB5b3Ugd3JpdGluZworCSMgbmFzdHkgcG9ydGFibGUgY29kZSB0aGF0IGNvdWxkIHJ1biBvbiBvdGhlciBVTipYZXMsIHRoZXkKKwkjIHdhbnQgeW91IHdyaXRpbmcgY29kZSB0aGF0IHVzZXMgdGhlaXIgU2hpbnkgTmV3IENyeXB0bworCSMgTGlicmFyeSBhbmQgdGhhdCBvbmx5IHJ1bnMgb24gT1MgWC4KKwkjCisJQUNfQ0hFQ0tfSEVBREVSKG9wZW5zc2wvY3J5cHRvLmgsCisJWworCQlBQ19DSEVDS19MSUIoY3J5cHRvLCBERVNfY2JjX2VuY3J5cHQpCisJCWlmIHRlc3QgIiRhY19jdl9saWJfY3J5cHRvX0RFU19jYmNfZW5jcnlwdCIgPSAieWVzIjsgdGhlbgorCQkJQUNfQ0hFQ0tfSEVBREVSUyhvcGVuc3NsL2V2cC5oKQorCQkJIworCQkJIyBPSywgZG8gd2UgaGF2ZSBFVlBfQ0lQSEVSX0NUWF9uZXc/CisJCQkjIElmIHNvLCB3ZSB1c2UgaXQgdG8gYWxsb2NhdGUgYW4KKwkJCSMgRVZQX0NJUEhFUl9DVFgsIGFzIEVWUF9DSVBIRVJfQ1RYIG1heSBiZQorCQkJIyBvcGFxdWU7IG90aGVyd2lzZSwgd2UgYWxsb2NhdGUgaXQgb3Vyc2VsdmVzLgorCQkJIworCQkJQUNfQ0hFQ0tfRlVOQ1MoRVZQX0NJUEhFUl9DVFhfbmV3KQorCQlmaQorCV0pCiBmaQogCiAjIENoZWNrIGZvciBsaWJjYXAtbmcKZGlmZiAtLWdpdCBhL2NwYWNrLmMgYi9jcGFjay5jCmluZGV4IDE2YmZkMTUuLmUzN2Q4MTMgMTAwNjQ0Ci0tLSBhL2NwYWNrLmMKKysrIGIvY3BhY2suYwpAQCAtMjcsMjAgKzI3LDE5IEBACiAgKiBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgImNwYWNrLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCi11aW50OF90ICoKLWNwYWNrX25leHRfYm91bmRhcnkodWludDhfdCAqYnVmLCB1aW50OF90ICpwLCBzaXplX3QgYWxpZ25tZW50KQorY29uc3QgdWludDhfdCAqCitjcGFja19uZXh0X2JvdW5kYXJ5KGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgY29uc3QgdWludDhfdCAqcCwgc2l6ZV90IGFsaWdubWVudCkKIHsKIAlzaXplX3QgbWlzYWxpZ25tZW50ID0gKHNpemVfdCkocCAtIGJ1ZikgJSBhbGlnbm1lbnQ7CiAKQEAgLTU0LDEwICs1MywxMCBAQAogICogd29yZHNpemUgYnl0ZXMgcmVtYWluIGluIHRoZSBidWZmZXIgYWZ0ZXIgdGhlIGJvdW5kYXJ5LiAgT3RoZXJ3aXNlLAogICogcmV0dXJuIGEgcG9pbnRlciB0byB0aGUgYm91bmRhcnkuCiAgKi8KLXVpbnQ4X3QgKgorY29uc3QgdWludDhfdCAqCiBjcGFja19hbGlnbl9hbmRfcmVzZXJ2ZShzdHJ1Y3QgY3BhY2tfc3RhdGUgKmNzLCBzaXplX3Qgd29yZHNpemUpCiB7Ci0JdWludDhfdCAqbmV4dDsKKwljb25zdCB1aW50OF90ICpuZXh0OwogCiAJLyogRW5zdXJlIGFsaWdubWVudC4gKi8KIAluZXh0ID0gY3BhY2tfbmV4dF9ib3VuZGFyeShjcy0+Y19idWYsIGNzLT5jX25leHQsIHdvcmRzaXplKTsKQEAgLTgxLDcgKzgwLDcgQEAKIH0KIAogaW50Ci1jcGFja19pbml0KHN0cnVjdCBjcGFja19zdGF0ZSAqY3MsIHVpbnQ4X3QgKmJ1Ziwgc2l6ZV90IGJ1ZmxlbikKK2NwYWNrX2luaXQoc3RydWN0IGNwYWNrX3N0YXRlICpjcywgY29uc3QgdWludDhfdCAqYnVmLCBzaXplX3QgYnVmbGVuKQogewogCW1lbXNldChjcywgMCwgc2l6ZW9mKCpjcykpOwogCkBAIC05Niw3ICs5NSw3IEBACiBpbnQKIGNwYWNrX3VpbnQ2NChzdHJ1Y3QgY3BhY2tfc3RhdGUgKmNzLCB1aW50NjRfdCAqdSkKIHsKLQl1aW50OF90ICpuZXh0OworCWNvbnN0IHVpbnQ4X3QgKm5leHQ7CiAKIAlpZiAoKG5leHQgPSBjcGFja19hbGlnbl9hbmRfcmVzZXJ2ZShjcywgc2l6ZW9mKCp1KSkpID09IE5VTEwpCiAJCXJldHVybiAtMTsKQEAgLTExMiw3ICsxMTEsNyBAQAogaW50CiBjcGFja191aW50MzIoc3RydWN0IGNwYWNrX3N0YXRlICpjcywgdWludDMyX3QgKnUpCiB7Ci0JdWludDhfdCAqbmV4dDsKKwljb25zdCB1aW50OF90ICpuZXh0OwogCiAJaWYgKChuZXh0ID0gY3BhY2tfYWxpZ25fYW5kX3Jlc2VydmUoY3MsIHNpemVvZigqdSkpKSA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CkBAIC0xMjgsNyArMTI3LDcgQEAKIGludAogY3BhY2tfdWludDE2KHN0cnVjdCBjcGFja19zdGF0ZSAqY3MsIHVpbnQxNl90ICp1KQogewotCXVpbnQ4X3QgKm5leHQ7CisJY29uc3QgdWludDhfdCAqbmV4dDsKIAogCWlmICgobmV4dCA9IGNwYWNrX2FsaWduX2FuZF9yZXNlcnZlKGNzLCBzaXplb2YoKnUpKSkgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwpkaWZmIC0tZ2l0IGEvY3BhY2suaCBiL2NwYWNrLmgKaW5kZXggYTdlYjZkNi4uMzA3MmUwYyAxMDA2NDQKLS0tIGEvY3BhY2suaAorKysgYi9jcGFjay5oCkBAIC0zMSwyMCArMzEsMjAgQEAKICNkZWZpbmUgX0NQQUNLX0gKIAogc3RydWN0IGNwYWNrX3N0YXRlIHsKLQl1aW50OF90CQkJCQkqY19idWY7Ci0JdWludDhfdAkJCQkJKmNfbmV4dDsKKwljb25zdCB1aW50OF90CQkJCQkqY19idWY7CisJY29uc3QgdWludDhfdAkJCQkJKmNfbmV4dDsKIAlzaXplX3QJCQkJCQkgY19sZW47CiB9OwogCi1pbnQgY3BhY2tfaW5pdChzdHJ1Y3QgY3BhY2tfc3RhdGUgKiwgdWludDhfdCAqLCBzaXplX3QpOworaW50IGNwYWNrX2luaXQoc3RydWN0IGNwYWNrX3N0YXRlICosIGNvbnN0IHVpbnQ4X3QgKiwgc2l6ZV90KTsKIAogaW50IGNwYWNrX3VpbnQ4KHN0cnVjdCBjcGFja19zdGF0ZSAqLCB1aW50OF90ICopOwogaW50IGNwYWNrX3VpbnQxNihzdHJ1Y3QgY3BhY2tfc3RhdGUgKiwgdWludDE2X3QgKik7CiBpbnQgY3BhY2tfdWludDMyKHN0cnVjdCBjcGFja19zdGF0ZSAqLCB1aW50MzJfdCAqKTsKIGludCBjcGFja191aW50NjQoc3RydWN0IGNwYWNrX3N0YXRlICosIHVpbnQ2NF90ICopOwogCi11aW50OF90ICpjcGFja19uZXh0X2JvdW5kYXJ5KHVpbnQ4X3QgKmJ1ZiwgdWludDhfdCAqcCwgc2l6ZV90IGFsaWdubWVudCk7Ci11aW50OF90ICpjcGFja19hbGlnbl9hbmRfcmVzZXJ2ZShzdHJ1Y3QgY3BhY2tfc3RhdGUgKmNzLCBzaXplX3Qgd29yZHNpemUpOworY29uc3QgdWludDhfdCAqY3BhY2tfbmV4dF9ib3VuZGFyeShjb25zdCB1aW50OF90ICpidWYsIGNvbnN0IHVpbnQ4X3QgKnAsIHNpemVfdCBhbGlnbm1lbnQpOworY29uc3QgdWludDhfdCAqY3BhY2tfYWxpZ25fYW5kX3Jlc2VydmUoc3RydWN0IGNwYWNrX3N0YXRlICpjcywgc2l6ZV90IHdvcmRzaXplKTsKIAogI2RlZmluZSBjcGFja19pbnQ4KF9fcywgX19wKQljcGFja191aW50OCgoX19zKSwgICh1aW50OF90KikoX19wKSkKICNkZWZpbmUgY3BhY2tfaW50MTYoX19zLCBfX3ApCWNwYWNrX3VpbnQxNigoX19zKSwgKHVpbnQxNl90KikoX19wKSkKZGlmZiAtLWdpdCBhL2V0aGVyLmggYi9ldGhlci5oCmluZGV4IDU4YjkyZGUuLjY0OTE2NzggMTAwNjQ0Ci0tLSBhL2V0aGVyLmgKKysrIGIvZXRoZXIuaApAQCAtNDEsMTggKzQxLDE3IEBACiAjZGVmaW5lCUVUSEVSX0FERFJfTEVOCQk2CiAKIC8qCi0gKiBTdHJ1Y3R1cmUgb2YgYSBERUMvSW50ZWwvWGVyb3ggb3IgODAyLjMgRXRoZXJuZXQgaGVhZGVyLgorICogU3RydWN0dXJlIG9mIGFuIEV0aGVybmV0IGhlYWRlci4KICAqLwogc3RydWN0CWV0aGVyX2hlYWRlciB7CiAJdWludDhfdAkJZXRoZXJfZGhvc3RbRVRIRVJfQUREUl9MRU5dOwogCXVpbnQ4X3QJCWV0aGVyX3Nob3N0W0VUSEVSX0FERFJfTEVOXTsKLQl1aW50MTZfdAlldGhlcl90eXBlOworCXVpbnQxNl90CWV0aGVyX2xlbmd0aF90eXBlOwogfTsKIAogLyoKLSAqIExlbmd0aCBvZiBhIERFQy9JbnRlbC9YZXJveCBvciA4MDIuMyBFdGhlcm5ldCBoZWFkZXI7IG5vdGUgdGhhdCBzb21lCi0gKiBjb21waWxlcnMgbWF5IHBhZCAic3RydWN0IGV0aGVyX2hlYWRlciIgdG8gYSBtdWx0aXBsZSBvZiA0IGJ5dGVzLAotICogZm9yIGV4YW1wbGUsIHNvICJzaXplb2YgKHN0cnVjdCBldGhlcl9oZWFkZXIpIiBtYXkgbm90IGdpdmUgdGhlIHJpZ2h0Ci0gKiBhbnN3ZXIuCisgKiBMZW5ndGggb2YgYW4gRXRoZXJuZXQgaGVhZGVyOyBub3RlIHRoYXQgc29tZSBjb21waWxlcnMgbWF5IHBhZAorICogInN0cnVjdCBldGhlcl9oZWFkZXIiIHRvIGEgbXVsdGlwbGUgb2YgNCBieXRlcywgZm9yIGV4YW1wbGUsIHNvCisgKiAic2l6ZW9mIChzdHJ1Y3QgZXRoZXJfaGVhZGVyKSIgbWF5IG5vdCBnaXZlIHRoZSByaWdodCBhbnN3ZXIuCiAgKi8KICNkZWZpbmUgRVRIRVJfSERSTEVOCQkxNApkaWZmIC0tZ2l0IGEvZXRoZXJ0eXBlLmggYi9ldGhlcnR5cGUuaAppbmRleCA4MDM5OTE3Li4yYWE1M2EwIDEwMDY0NAotLS0gYS9ldGhlcnR5cGUuaAorKysgYi9ldGhlcnR5cGUuaApAQCAtMTk2LDUgKzE5Niw4IEBACiAjaWZuZGVmCUVUSEVSVFlQRV9HRU9ORVQKICNkZWZpbmUJRVRIRVJUWVBFX0dFT05FVCAgICAgICAgMHg4OTQ3ICAvKiBFVFNJIEdlb05ldHdvcmtpbmcgKE9mZmljaWFsIElFRUUgcmVnaXN0cmF0aW9uIGZyb20gSmFuIDIwMTMpICovCiAjZW5kaWYKKyNpZm5kZWYJRVRIRVJUWVBFX01FRFNBCisjZGVmaW5lCUVUSEVSVFlQRV9NRURTQQkJMHhkYWRhCS8qIE1hcnZlbCBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlICovCisjZW5kaWYKIAogZXh0ZXJuIGNvbnN0IHN0cnVjdCB0b2sgZXRoZXJ0eXBlX3ZhbHVlc1tdOwpkaWZmIC0tZ2l0IGEvZXh0cmFjdC5oIGIvZXh0cmFjdC5oCmluZGV4IGNiNjJlYmQuLjIzNjIzYzIgMTAwNjQ0Ci0tLSBhL2V4dHJhY3QuaAorKysgYi9leHRyYWN0LmgKQEAgLTEwMyw3ICsxMDMsNyBAQAogc3RhdGljIGlubGluZSB1aW50NjRfdAogRVhUUkFDVF82NEJJVFMoY29uc3Qgdm9pZCAqcCkKIHsKLQlyZXR1cm4gKCh1aW50NjRfdCkoKCh1aW50NjRfdCludG9obCgoKGNvbnN0IHVuYWxpZ25lZF91aW50MzJfdCAqKShwKSArIDApLT52YWwpKSA8PCAzMiB8IFwKKwlyZXR1cm4gKCh1aW50NjRfdCkoKCh1aW50NjRfdCludG9obCgoKGNvbnN0IHVuYWxpZ25lZF91aW50MzJfdCAqKShwKSArIDApLT52YWwpKSA8PCAzMiB8CiAJCSgodWludDY0X3QpbnRvaGwoKChjb25zdCB1bmFsaWduZWRfdWludDMyX3QgKikocCkgKyAxKS0+dmFsKSkgPDwgMCkpOwogfQogCkBAIC0xNTMsNyArMTUzLDcgQEAKIHN0YXRpYyBpbmxpbmUgdWludDY0X3QKIEVYVFJBQ1RfNjRCSVRTKGNvbnN0IHZvaWQgKnApCiB7Ci0JcmV0dXJuICgodWludDY0X3QpKCgodWludDY0X3QpbnRvaGwoKigoY29uc3QgdWludDMyX3QgKikocCkgKyAwKSkpIDw8IDMyIHwgXAorCXJldHVybiAoKHVpbnQ2NF90KSgoKHVpbnQ2NF90KW50b2hsKCooKGNvbnN0IHVpbnQzMl90ICopKHApICsgMCkpKSA8PCAzMiB8CiAJCSgodWludDY0X3QpbnRvaGwoKigoY29uc3QgdWludDMyX3QgKikocCkgKyAxKSkpIDw8IDApKTsKIAogfQpAQCAtMjE1LDMgKzIxNSwzMCBAQAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAyKSkgPDwgMTYpIHwgXAogCSAgICAgICAgICAgICgodWludDY0X3QpKCooKGNvbnN0IHVpbnQ4X3QgKikocCkgKyAxKSkgPDwgOCkgfCBcCiAJICAgICAgICAgICAgKCh1aW50NjRfdCkoKigoY29uc3QgdWludDhfdCAqKShwKSArIDApKSA8PCAwKSkpCisKKy8qCisgKiBNYWNyb3MgdG8gY2hlY2sgdGhlIHByZXNlbmNlIG9mIHRoZSB2YWx1ZXMgaW4gcXVlc3Rpb24uCisgKi8KKyNkZWZpbmUgTkRfVFRFU1RfOEJJVFMocCkgTkRfVFRFU1QyKCoocCksIDEpCisjZGVmaW5lIE5EX1RDSEVDS184QklUUyhwKSBORF9UQ0hFQ0syKCoocCksIDEpCisKKyNkZWZpbmUgTkRfVFRFU1RfMTZCSVRTKHApIE5EX1RURVNUMigqKHApLCAyKQorI2RlZmluZSBORF9UQ0hFQ0tfMTZCSVRTKHApIE5EX1RDSEVDSzIoKihwKSwgMikKKworI2RlZmluZSBORF9UVEVTVF8yNEJJVFMocCkgTkRfVFRFU1QyKCoocCksIDMpCisjZGVmaW5lIE5EX1RDSEVDS18yNEJJVFMocCkgTkRfVENIRUNLMigqKHApLCAzKQorCisjZGVmaW5lIE5EX1RURVNUXzMyQklUUyhwKSBORF9UVEVTVDIoKihwKSwgNCkKKyNkZWZpbmUgTkRfVENIRUNLXzMyQklUUyhwKSBORF9UQ0hFQ0syKCoocCksIDQpCisKKyNkZWZpbmUgTkRfVFRFU1RfNDBCSVRTKHApIE5EX1RURVNUMigqKHApLCA1KQorI2RlZmluZSBORF9UQ0hFQ0tfNDBCSVRTKHApIE5EX1RDSEVDSzIoKihwKSwgNSkKKworI2RlZmluZSBORF9UVEVTVF80OEJJVFMocCkgTkRfVFRFU1QyKCoocCksIDYpCisjZGVmaW5lIE5EX1RDSEVDS180OEJJVFMocCkgTkRfVENIRUNLMigqKHApLCA2KQorCisjZGVmaW5lIE5EX1RURVNUXzU2QklUUyhwKSBORF9UVEVTVDIoKihwKSwgNykKKyNkZWZpbmUgTkRfVENIRUNLXzU2QklUUyhwKSBORF9UQ0hFQ0syKCoocCksIDcpCisKKyNkZWZpbmUgTkRfVFRFU1RfNjRCSVRTKHApIE5EX1RURVNUMigqKHApLCA4KQorI2RlZmluZSBORF9UQ0hFQ0tfNjRCSVRTKHApIE5EX1RDSEVDSzIoKihwKSwgOCkKZGlmZiAtLWdpdCBhL2dtcGxzLmMgYi9nbXBscy5jCmluZGV4IGM5ZmQ5YmIuLjIzNTE1ZTkgMTAwNjQ0Ci0tLSBhL2dtcGxzLmMKKysrIGIvZ21wbHMuYwpAQCAtMTMsMTQgKzEzLDEzIEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZ21wbHMuaCIKIAogLyogcmZjMzQ3MSAqLwpkaWZmIC0tZ2l0IGEvZ210MmxvY2FsLmMgYi9nbXQybG9jYWwuYwppbmRleCA2OTU4ZjY2Li5kNmNkOTNiIDEwMDY0NAotLS0gYS9nbXQybG9jYWwuYworKysgYi9nbXQybG9jYWwuYwpAQCAtMTksMTIgKzE5LDExIEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIApkaWZmIC0tZ2l0IGEvaW5fY2tzdW0uYyBiL2luX2Nrc3VtLmMKaW5kZXggMTcxNzI4YS4uZTliZWQyMiAxMDA2NDQKLS0tIGEvaW5fY2tzdW0uYworKysgYi9pbl9ja3N1bS5jCkBAIC0zNSwxNCArMzUsMTMgQEAKICAqCUAoIylpbl9ja3N1bS5jCTguMSAoQmVya2VsZXkpIDYvMTAvOTMKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjIGluY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAKIC8qCiAgKiBDaGVja3N1bSByb3V0aW5lIGZvciBJbnRlcm5ldCBQcm90b2NvbCBmYW1pbHkgaGVhZGVycyAoUG9ydGFibGUgVmVyc2lvbikuCkBAIC03NCw3ICs3Myw3IEBACiAJZm9yICg7IHZlY2xlbiAhPSAwOyB2ZWMrKywgdmVjbGVuLS0pIHsKIAkJaWYgKHZlYy0+bGVuID09IDApCiAJCQljb250aW51ZTsKLQkJdyA9IChjb25zdCB1aW50MTZfdCAqKSh2b2lkICopdmVjLT5wdHI7CisJCXcgPSAoY29uc3QgdWludDE2X3QgKikoY29uc3Qgdm9pZCAqKXZlYy0+cHRyOwogCQlpZiAobWxlbiA9PSAtMSkgewogCQkJLyoKIAkJCSAqIFRoZSBmaXJzdCBieXRlIG9mIHRoaXMgY2h1bmsgaXMgdGhlIGNvbnRpbnVhdGlvbgpAQCAtODYsMTggKzg1LDE4IEBACiAJCQkgKi8KIAkJCXNfdXRpbC5jWzFdID0gKihjb25zdCB1aW50OF90ICopdzsKIAkJCXN1bSArPSBzX3V0aWwuczsKLQkJCXcgPSAoY29uc3QgdWludDE2X3QgKikodm9pZCAqKSgoY29uc3QgdWludDhfdCAqKXcgKyAxKTsKKwkJCXcgPSAoY29uc3QgdWludDE2X3QgKikoY29uc3Qgdm9pZCAqKSgoY29uc3QgdWludDhfdCAqKXcgKyAxKTsKIAkJCW1sZW4gPSB2ZWMtPmxlbiAtIDE7CiAJCX0gZWxzZQogCQkJbWxlbiA9IHZlYy0+bGVuOwogCQkvKgogCQkgKiBGb3JjZSB0byBldmVuIGJvdW5kYXJ5LgogCQkgKi8KLQkJaWYgKCgxICYgKHVuc2lnbmVkIGxvbmcpIHcpICYmIChtbGVuID4gMCkpIHsKKwkJaWYgKCgxICYgKHVpbnRwdHJfdCkgdykgJiYgKG1sZW4gPiAwKSkgewogCQkJUkVEVUNFOwogCQkJc3VtIDw8PSA4OwogCQkJc191dGlsLmNbMF0gPSAqKGNvbnN0IHVpbnQ4X3QgKil3OwotCQkJdyA9IChjb25zdCB1aW50MTZfdCAqKSh2b2lkICopKChjb25zdCB1aW50OF90ICopdyArIDEpOworCQkJdyA9IChjb25zdCB1aW50MTZfdCAqKShjb25zdCB2b2lkICopKChjb25zdCB1aW50OF90ICopdyArIDEpOwogCQkJbWxlbi0tOwogCQkJYnl0ZV9zd2FwcGVkID0gMTsKIAkJfQpkaWZmIC0tZ2l0IGEvaW50ZXJmYWNlLmggYi9pbnRlcmZhY2UuaAppbmRleCA1OWMxZWVmLi40NmQzMzhiIDEwMDY0NAotLS0gYS9pbnRlcmZhY2UuaAorKysgYi9pbnRlcmZhY2UuaApAQCAtNjUsMTY1ICs2NSwxNSBAQAogZXh0ZXJuIGNoYXIgKnN0cnNlcChjaGFyICoqLCBjb25zdCBjaGFyICopOwogI2VuZGlmCiAKLSNkZWZpbmUgUFRfVkFUCQkxCS8qIFZpc3VhbCBBdWRpbyBUb29sICovCi0jZGVmaW5lIFBUX1dCCQkyCS8qIGRpc3RyaWJ1dGVkIFdoaXRlIEJvYXJkICovCi0jZGVmaW5lIFBUX1JQQwkJMwkvKiBSZW1vdGUgUHJvY2VkdXJlIENhbGwgKi8KLSNkZWZpbmUgUFRfUlRQCQk0CS8qIFJlYWwtVGltZSBBcHBsaWNhdGlvbnMgcHJvdG9jb2wgKi8KLSNkZWZpbmUgUFRfUlRDUAkJNQkvKiBSZWFsLVRpbWUgQXBwbGljYXRpb25zIGNvbnRyb2wgcHJvdG9jb2wgKi8KLSNkZWZpbmUgUFRfU05NUAkJNgkvKiBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sICovCi0jZGVmaW5lIFBUX0NORlAJCTcJLyogQ2lzY28gTmV0RmxvdyBwcm90b2NvbCAqLwotI2RlZmluZSBQVF9URlRQCQk4CS8qIHRyaXZpYWwgZmlsZSB0cmFuc2ZlciBwcm90b2NvbCAqLwotI2RlZmluZSBQVF9BT0RWCQk5CS8qIEFkLWhvYyBPbi1kZW1hbmQgRGlzdGFuY2UgVmVjdG9yIFByb3RvY29sICovCi0jZGVmaW5lIFBUX0NBUlAJCTEwCS8qIENvbW1vbiBBZGRyZXNzIFJlZHVuZGFuY3kgUHJvdG9jb2wgKi8KLSNkZWZpbmUgUFRfUkFESVVTCTExCS8qIFJBRElVUyBhdXRoZW50aWNhdGlvbiBQcm90b2NvbCAqLwotI2RlZmluZSBQVF9aTVRQMQkxMgkvKiBaZXJvTVEgTWVzc2FnZSBUcmFuc3BvcnQgUHJvdG9jb2wgMS4wICovCi0jZGVmaW5lIFBUX1ZYTEFOCTEzCS8qIFZpcnR1YWwgZVh0ZW5zaWJsZSBMb2NhbCBBcmVhIE5ldHdvcmsgKi8KLSNkZWZpbmUgUFRfUEdNCQkxNAkvKiBbVURQLWVuY2Fwc3VsYXRlZF0gUHJhZ21hdGljIEdlbmVyYWwgTXVsdGljYXN0ICovCi0jZGVmaW5lIFBUX1BHTV9aTVRQMQkxNQkvKiBaTVRQLzEuMCBpbnNpZGUgUEdNIChuYXRpdmUgb3IgVURQLWVuY2Fwc3VsYXRlZCkgKi8KLSNkZWZpbmUgUFRfTE1QCQkxNgkvKiBMaW5rIE1hbmFnZW1lbnQgUHJvdG9jb2wgKi8KLQotI2RlZmluZSBFU1JDKGVwKSAoKGVwKS0+ZXRoZXJfc2hvc3QpCi0jZGVmaW5lIEVEU1QoZXApICgoZXApLT5ldGhlcl9kaG9zdCkKLQotI2lmbmRlZiBOVE9ITAotI2RlZmluZSBOVE9ITCh4KQkoeCkgPSBudG9obCh4KQotI2RlZmluZSBOVE9IUyh4KQkoeCkgPSBudG9ocyh4KQotI2RlZmluZSBIVE9OTCh4KQkoeCkgPSBodG9ubCh4KQotI2RlZmluZSBIVE9OUyh4KQkoeCkgPSBodG9ucyh4KQotI2VuZGlmCiAjZW5kaWYKIAogZXh0ZXJuIGNoYXIgKnByb2dyYW1fbmFtZTsJLyogdXNlZCB0byBnZW5lcmF0ZSBzZWxmLWlkZW50aWZ5aW5nIG1lc3NhZ2VzICovCiAKLWV4dGVybiBpbnQzMl90IHRoaXN6b25lOwkvKiBzZWNvbmRzIG9mZnNldCBmcm9tIGdtdCB0byBsb2NhbCB0aW1lICovCi0KLS8qCi0gKiBUcnVlIGlmICAibCIgYnl0ZXMgb2YgInZhciIgd2VyZSBjYXB0dXJlZC4KLSAqCi0gKiBUaGUgInNuYXBlbmQgLSAobCkgPD0gc25hcGVuZCIgY2hlY2tzIHRvIG1ha2Ugc3VyZSAibCIgaXNuJ3Qgc28gbGFyZ2UKLSAqIHRoYXQgInNuYXBlbmQgLSAobCkiIHVuZGVyZmxvd3MuCi0gKgotICogVGhlIGNoZWNrIGlzIGZvciA8PSByYXRoZXIgdGhhbiA8IGJlY2F1c2UgImwiIG1pZ2h0IGJlIDAuCi0gKgotICogV2UgY2FzdCB0aGUgcG9pbnRlcnMgdG8gdWludHB0cl90IHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBjb21waWxlcgotICogZG9lc24ndCBvcHRpbWl6ZSBhd2F5IGFueSBvZiB0aGVzZSB0ZXN0cyAod2hpY2ggaXQgaXMgYWxsb3dlZCB0bwotICogZG8sIGFzIGFkZGluZyBhbiBpbnRlZ2VyIHRvLCBvciBzdWJ0cmFjdGluZyBhbiBpbnRlZ2VyIGZyb20sIGEKLSAqIHBvaW50ZXIgYXNzdW1lcyB0aGF0IHRoZSBwb2ludGVyIGlzIGEgcG9pbnRlciB0byBhbiBlbGVtZW50IG9mIGFuCi0gKiBhcnJheSBhbmQgdGhhdCB0aGUgcmVzdWx0IG9mIHRoZSBhZGRpdGlvbiBvciBzdWJ0cmFjdGlvbiB5aWVsZHMgYQotICogcG9pbnRlciB0byBhbm90aGVyIG1lbWJlciBvZiB0aGUgYXJyYXksIHNvIHRoYXQsIGZvciBleGFtcGxlLCBpZgotICogeW91IHN1YnRyYWN0IGEgcG9zaXRpdmUgaW50ZWdlciBmcm9tIGEgcG9pbnRlciwgdGhlIHJlc3VsdCBpcwotICogZ3VhcmFudGVlZCB0byBiZSBsZXNzIHRoYW4gdGhlIG9yaWdpbmFsIHBvaW50ZXIgdmFsdWUpLiBTZWUKLSAqCi0gKglodHRwOi8vd3d3LmtiLmNlcnQub3JnL3Z1bHMvaWQvMTYyMjg5Ci0gKi8KLSNkZWZpbmUgVFRFU1QyKHZhciwgbCkgXAotCSgodWludHB0cl90KXNuYXBlbmQgLSAobCkgPD0gKHVpbnRwdHJfdClzbmFwZW5kICYmIFwKLQkgICAodWludHB0cl90KSYodmFyKSA8PSAodWludHB0cl90KXNuYXBlbmQgLSAobCkpCi0KLS8qIFRydWUgaWYgInZhciIgd2FzIGNhcHR1cmVkICovCi0jZGVmaW5lIFRURVNUKHZhcikgVFRFU1QyKHZhciwgc2l6ZW9mKHZhcikpCi0KLS8qIEJhaWwgaWYgImwiIGJ5dGVzIG9mICJ2YXIiIHdlcmUgbm90IGNhcHR1cmVkICovCi0jZGVmaW5lIFRDSEVDSzIodmFyLCBsKSBpZiAoIVRURVNUMih2YXIsIGwpKSBnb3RvIHRydW5jCi0KLS8qIEJhaWwgaWYgInZhciIgd2FzIG5vdCBjYXB0dXJlZCAqLwotI2RlZmluZSBUQ0hFQ0sodmFyKSBUQ0hFQ0syKHZhciwgc2l6ZW9mKHZhcikpCi0KLWV4dGVybiBpbnQgbWFzazJwbGVuKHVpbnQzMl90KTsKLWV4dGVybiBjb25zdCBjaGFyICp0b2syc3RyYXJ5X2ludGVybmFsKGNvbnN0IGNoYXIgKiosIGludCwgY29uc3QgY2hhciAqLCBpbnQpOwotI2RlZmluZQl0b2syc3RyYXJ5KGEsZixpKSB0b2syc3RyYXJ5X2ludGVybmFsKGEsIHNpemVvZihhKS9zaXplb2YoYVswXSksZixpKQotCi1leHRlcm4gdm9pZCBlcnJvcihjb25zdCBjaGFyICosIC4uLikKLSAgICAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQotI2lmZGVmIF9fQVRUUklCVVRFX19fRk9STUFUX09LCi0gICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAxLCAyKSkpCi0jZW5kaWYgLyogX19BVFRSSUJVVEVfX19GT1JNQVRfT0sgKi8KLSAgICAgOwotZXh0ZXJuIHZvaWQgd2FybmluZyhjb25zdCBjaGFyICosIC4uLikKLSNpZmRlZiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSwotICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQotI2VuZGlmIC8qIF9fQVRUUklCVVRFX19fRk9STUFUX09LICovCi0gICAgIDsKLQotZXh0ZXJuIGNoYXIgKnJlYWRfaW5maWxlKGNoYXIgKik7Ci1leHRlcm4gY2hhciAqY29weV9hcmd2KGNoYXIgKiopOwotCi1leHRlcm4gY29uc3QgY2hhciAqZG5uYW1lX3N0cmluZyh1X3Nob3J0KTsKLWV4dGVybiBjb25zdCBjaGFyICpkbm51bV9zdHJpbmcodV9zaG9ydCk7Ci0KLS8qIGNoZWNrc3VtIHJvdXRpbmVzICovCi1leHRlcm4gdm9pZCBpbml0X2NoZWNrc3VtKHZvaWQpOwotZXh0ZXJuIHVpbnQxNl90IHZlcmlmeV9jcmMxMF9ja3N1bSh1aW50MTZfdCwgY29uc3QgdV9jaGFyICosIGludCk7Ci1leHRlcm4gdWludDE2X3QgY3JlYXRlX29zaV9ja3N1bShjb25zdCB1aW50OF90ICosIGludCwgaW50KTsKLQotLyogVGhlIHByaW50ZXIgcm91dGluZXMuICovCi0KICNpbmNsdWRlIDxwY2FwLmg+CiAKLWV4dGVybiBjaGFyICpzbWJfZXJyc3RyKGludCwgaW50KTsKLWV4dGVybiBjb25zdCBjaGFyICpudF9lcnJzdHIodWludDMyX3QpOwotCi0jaWZkZWYgSU5FVDYKLWV4dGVybiBpbnQgbWFzazYycGxlbihjb25zdCB1X2NoYXIgKik7Ci0jZW5kaWYgLypJTkVUNiovCi0KLXN0cnVjdCBja3N1bV92ZWMgewotCWNvbnN0IHVpbnQ4X3QJKnB0cjsKLQlpbnQJCWxlbjsKLX07Ci1leHRlcm4gdWludDE2X3QgaW5fY2tzdW0oY29uc3Qgc3RydWN0IGNrc3VtX3ZlYyAqLCBpbnQpOwotZXh0ZXJuIHVpbnQxNl90IGluX2Nrc3VtX3Nob3VsZGJlKHVpbnQxNl90LCB1aW50MTZfdCk7Ci0KICNpZm5kZWYgSEFWRV9CUEZfRFVNUAogc3RydWN0IGJwZl9wcm9ncmFtOwogCiBleHRlcm4gdm9pZCBicGZfZHVtcChjb25zdCBzdHJ1Y3QgYnBmX3Byb2dyYW0gKiwgaW50KTsKIAogI2VuZGlmCi0KLSNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCi0KLS8qIGZvcndhcmQgY29tcGF0aWJpbGl0eSAqLwotCi0jaWZuZGVmIE5FVERJU1NFQ1RfUkVXT1JLRUQKLWV4dGVybiBuZXRkaXNzZWN0X29wdGlvbnMgKmduZG87Ci0KLSNkZWZpbmUgYmZsYWcgZ25kby0+bmRvX2JmbGFnCi0jZGVmaW5lIGVmbGFnIGduZG8tPm5kb19lZmxhZwotI2RlZmluZSBmZmxhZyBnbmRvLT5uZG9fZmZsYWcKLSNkZWZpbmUgamZsYWcgZ25kby0+bmRvX2pmbGFnCi0jZGVmaW5lIEtmbGFnIGduZG8tPm5kb19LZmxhZwotI2RlZmluZSBuZmxhZyBnbmRvLT5uZG9fbmZsYWcKLSNkZWZpbmUgTmZsYWcgZ25kby0+bmRvX05mbGFnCi0jZGVmaW5lIE9mbGFnIGduZG8tPm5kb19PZmxhZwotI2RlZmluZSBwZmxhZyBnbmRvLT5uZG9fcGZsYWcKLSNkZWZpbmUgcWZsYWcgZ25kby0+bmRvX3FmbGFnCi0jZGVmaW5lIFJmbGFnIGduZG8tPm5kb19SZmxhZwotI2RlZmluZSBzZmxhZyBnbmRvLT5uZG9fc2ZsYWcKLSNkZWZpbmUgU2ZsYWcgZ25kby0+bmRvX1NmbGFnCi0jZGVmaW5lIHRmbGFnIGduZG8tPm5kb190ZmxhZwotI2RlZmluZSBVZmxhZyBnbmRvLT5uZG9fVWZsYWcKLSNkZWZpbmUgdWZsYWcgZ25kby0+bmRvX3VmbGFnCi0jZGVmaW5lIHZmbGFnIGduZG8tPm5kb192ZmxhZwotI2RlZmluZSB4ZmxhZyBnbmRvLT5uZG9feGZsYWcKLSNkZWZpbmUgWGZsYWcgZ25kby0+bmRvX1hmbGFnCi0jZGVmaW5lIENmbGFnIGduZG8tPm5kb19DZmxhZwotI2RlZmluZSBHZmxhZyBnbmRvLT5uZG9fR2ZsYWcKLSNkZWZpbmUgQWZsYWcgZ25kby0+bmRvX0FmbGFnCi0jZGVmaW5lIEJmbGFnIGduZG8tPm5kb19CZmxhZwotI2RlZmluZSBJZmxhZyBnbmRvLT5uZG9fSWZsYWcKLSNkZWZpbmUgc3VwcHJlc3NfZGVmYXVsdF9wcmludCBnbmRvLT5uZG9fc3VwcHJlc3NfZGVmYXVsdF9wcmludAotI2RlZmluZSBwYWNrZXR0eXBlIGduZG8tPm5kb19wYWNrZXR0eXBlCi0jZGVmaW5lIHNpZ3NlY3JldCBnbmRvLT5uZG9fc2lnc2VjcmV0Ci0jZGVmaW5lIFdmbGFnIGduZG8tPm5kb19XZmxhZwotI2RlZmluZSBXZmxhZ0NoYXJzIGduZG8tPm5kb19XZmxhZ0NoYXJzCi0jZGVmaW5lIENmbGFnX2NvdW50IGduZG8tPm5kb19DZmxhZ19jb3VudAotI2RlZmluZSBHZmxhZ19jb3VudCBnbmRvLT5uZG9fR2ZsYWdfY291bnQKLSNkZWZpbmUgR2ZsYWdfdGltZSBnbmRvLT5uZG9fR2ZsYWdfdGltZQotI2RlZmluZSBIZmxhZyBnbmRvLT5uZG9fSGZsYWcKLSNkZWZpbmUgc25hcGxlbiAgICAgZ25kby0+bmRvX3NuYXBsZW4KLSNkZWZpbmUgc25hcGVuZCAgICAgZ25kby0+bmRvX3NuYXBlbmQKLQotZXh0ZXJuIHZvaWQgZGVmYXVsdF9wcmludChjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2lwLmggYi9pcC5oCmluZGV4IDcyYzg5NzIuLjgxNzkwNjEgMTAwNjQ0Ci0tLSBhL2lwLmgKKysrIGIvaXAuaApAQCAtMzMsMTAgKzMzLDggQEAKICAqCUAoIylpcC5oCTguMiAoQmVya2VsZXkpIDYvMS85NAogICovCiAKLSNpZm5kZWYgVENQRFVNUF9JUF9ICi0jZGVmaW5lIFRDUERVTVBfSVBfSAotCi0jaW5jbHVkZSAidGNwZHVtcC1zdGRpbmMuaCIKKyNpZm5kZWYgbmV0ZGlzc2VjdF9pcF9oCisjZGVmaW5lIG5ldGRpc3NlY3RfaXBfaAogCiAvKgogICogRGVmaW5pdGlvbnMgZm9yIGludGVybmV0IHByb3RvY29sIHZlcnNpb24gNC4KQEAgLTUyLDIxICs1MCwyMSBAQAogICogYWdhaW5zdCBuZWdhdGl2ZSBpbnRlZ2VycyBxdWl0ZSBlYXNpbHksIGFuZCBmYWlsIGluIHN1YnRsZSB3YXlzLgogICovCiBzdHJ1Y3QgaXAgewotCXVpbnQ4X3QJCWlwX3ZobDsJCS8qIGhlYWRlciBsZW5ndGgsIHZlcnNpb24gKi8KKwluZF91aW50OF90CWlwX3ZobDsJCS8qIGhlYWRlciBsZW5ndGgsIHZlcnNpb24gKi8KICNkZWZpbmUgSVBfVihpcCkJKCgoaXApLT5pcF92aGwgJiAweGYwKSA+PiA0KQogI2RlZmluZSBJUF9ITChpcCkJKChpcCktPmlwX3ZobCAmIDB4MGYpCi0JdWludDhfdAkJaXBfdG9zOwkJLyogdHlwZSBvZiBzZXJ2aWNlICovCi0JdWludDE2X3QJaXBfbGVuOwkJLyogdG90YWwgbGVuZ3RoICovCi0JdWludDE2X3QJaXBfaWQ7CQkvKiBpZGVudGlmaWNhdGlvbiAqLwotCXVpbnQxNl90CWlwX29mZjsJCS8qIGZyYWdtZW50IG9mZnNldCBmaWVsZCAqLworCW5kX3VpbnQ4X3QJaXBfdG9zOwkJLyogdHlwZSBvZiBzZXJ2aWNlICovCisJbmRfdWludDE2X3QJaXBfbGVuOwkJLyogdG90YWwgbGVuZ3RoICovCisJbmRfdWludDE2X3QJaXBfaWQ7CQkvKiBpZGVudGlmaWNhdGlvbiAqLworCW5kX3VpbnQxNl90CWlwX29mZjsJCS8qIGZyYWdtZW50IG9mZnNldCBmaWVsZCAqLwogI2RlZmluZQlJUF9ERiAweDQwMDAJCQkvKiBkb250IGZyYWdtZW50IGZsYWcgKi8KICNkZWZpbmUJSVBfTUYgMHgyMDAwCQkJLyogbW9yZSBmcmFnbWVudHMgZmxhZyAqLwogI2RlZmluZQlJUF9PRkZNQVNLIDB4MWZmZgkJLyogbWFzayBmb3IgZnJhZ21lbnRpbmcgYml0cyAqLwotCXVpbnQ4X3QJCWlwX3R0bDsJCS8qIHRpbWUgdG8gbGl2ZSAqLwotCXVpbnQ4X3QJCWlwX3A7CQkvKiBwcm90b2NvbCAqLwotCXVpbnQxNl90CWlwX3N1bTsJCS8qIGNoZWNrc3VtICovCi0Jc3RydWN0CWluX2FkZHIgaXBfc3JjLGlwX2RzdDsJLyogc291cmNlIGFuZCBkZXN0IGFkZHJlc3MgKi8KLX0gVU5BTElHTkVEOworCW5kX3VpbnQ4X3QJaXBfdHRsOwkJLyogdGltZSB0byBsaXZlICovCisJbmRfdWludDhfdAlpcF9wOwkJLyogcHJvdG9jb2wgKi8KKwluZF91aW50MTZfdAlpcF9zdW07CQkvKiBjaGVja3N1bSAqLworCW5kX2lwdjQJCWlwX3NyYyxpcF9kc3Q7CS8qIHNvdXJjZSBhbmQgZGVzdCBhZGRyZXNzICovCit9OwogCiAjZGVmaW5lCUlQX01BWFBBQ0tFVAk2NTUzNQkJLyogbWF4aW11bSBwYWNrZXQgc2l6ZSAqLwogCkBAIC0xMjUsMjAgKzEyMywyMCBAQAogICogVGltZSBzdGFtcCBvcHRpb24gc3RydWN0dXJlLgogICovCiBzdHJ1Y3QJaXBfdGltZXN0YW1wIHsKLQl1aW50OF90CQlpcHRfY29kZTsJLyogSVBPUFRfVFMgKi8KLQl1aW50OF90CQlpcHRfbGVuOwkvKiBzaXplIG9mIHN0cnVjdHVyZSAodmFyaWFibGUpICovCi0JdWludDhfdAkJaXB0X3B0cjsJLyogaW5kZXggb2YgY3VycmVudCBlbnRyeSAqLwotCXVpbnQ4X3QJCWlwdF9vZmx3ZmxnOwkvKiBmbGFncywgb3ZlcmZsb3cgY291bnRlciAqLworCW5kX3VpbnQ4X3QJaXB0X2NvZGU7CS8qIElQT1BUX1RTICovCisJbmRfdWludDhfdAlpcHRfbGVuOwkvKiBzaXplIG9mIHN0cnVjdHVyZSAodmFyaWFibGUpICovCisJbmRfdWludDhfdAlpcHRfcHRyOwkvKiBpbmRleCBvZiBjdXJyZW50IGVudHJ5ICovCisJbmRfdWludDhfdAlpcHRfb2Zsd2ZsZzsJLyogZmxhZ3MsIG92ZXJmbG93IGNvdW50ZXIgKi8KICNkZWZpbmUgSVBUU19PRkxXKGlwKQkoKChpcHQpLT5pcHRfb2Zsd2ZsZyAmIDB4ZjApID4+IDQpCiAjZGVmaW5lIElQVFNfRkxHKGlwKQkoKGlwdCktPmlwdF9vZmx3ZmxnICYgMHgwZikKIAl1bmlvbiBpcHRfdGltZXN0YW1wIHsKLQkJdWludDMyX3QgaXB0X3RpbWVbMV07CisJCW5kX3VpbnQzMl90IGlwdF90aW1lWzFdOwogCQlzdHJ1Y3QJaXB0X3RhIHsKLQkJCXN0cnVjdCBpbl9hZGRyIGlwdF9hZGRyOwotCQkJdWludDMyX3QgaXB0X3RpbWU7CisJCQluZF9pcHY0IGlwdF9hZGRyOworCQkJbmRfdWludDMyX3QgaXB0X3RpbWU7CiAJCX0gaXB0X3RhWzFdOwogCX0gaXB0X3RpbWVzdGFtcDsKLX0gVU5BTElHTkVEOworfTsKIAogLyogZmxhZyBiaXRzIGZvciBpcHRfZmxnICovCiAjZGVmaW5lCUlQT1BUX1RTX1RTT05MWQkJMAkJLyogdGltZXN0YW1wcyBvbmx5ICovCkBAIC0xNjMsNCArMTYxLDQgQEAKICNkZWZpbmUJSVBUVExERUMJMQkJLyogc3VidHJhY3RlZCB3aGVuIGZvcndhcmRpbmcgKi8KIAogI2RlZmluZQlJUF9NU1MJCTU3NgkJLyogZGVmYXVsdCBtYXhpbXVtIHNlZ21lbnQgc2l6ZSAqLwotI2VuZGlmIC8qIFRDUERVTVBfSVBfSCAqLworI2VuZGlmIC8qIG5ldGRpc3NlY3RfaXBfaCAqLwpkaWZmIC0tZ2l0IGEvaXA2LmggYi9pcDYuaAppbmRleCAxYWQ5MTQ5Li4yZWExZDBhIDEwMDY0NAotLS0gYS9pcDYuaAorKysgYi9pcDYuaApAQCAtMTcyLDcgKzE3MiwxMSBAQAogCS8qIGZvbGxvd2VkIGJ5IHJvdXRpbmcgdHlwZSBzcGVjaWZpYyBkYXRhICovCiB9IFVOQUxJR05FRDsKIAorI2RlZmluZSBJUFY2X1JUSERSX1RZUEVfMCAwCisjZGVmaW5lIElQVjZfUlRIRFJfVFlQRV8yIDIKKwogLyogVHlwZSAwIFJvdXRpbmcgaGVhZGVyICovCisvKiBBbHNvIHVzZWQgZm9yIFR5cGUgMiAqLwogc3RydWN0IGlwNl9ydGhkcjAgewogCXVpbnQ4X3QgIGlwNnIwX254dDsJCS8qIG5leHQgaGVhZGVyICovCiAJdWludDhfdCAgaXA2cjBfbGVuOwkJLyogbGVuZ3RoIGluIHVuaXRzIG9mIDggb2N0ZXRzICovCkBAIC0xOTUsNyArMTk5LDQgQEAKICNkZWZpbmUgSVA2Rl9SRVNFUlZFRF9NQVNLCTB4MDAwNgkvKiByZXNlcnZlZCBiaXRzIGluIGlwNmZfb2ZmbGcgKi8KICNkZWZpbmUgSVA2Rl9NT1JFX0ZSQUcJCTB4MDAwMQkvKiBtb3JlLWZyYWdtZW50cyBmbGFnICovCiAKLS8qIGluIHByaW50LWlwNi5jICovCi1leHRlcm4gaW50IG5leHRwcm90bzZfY2tzdW0oY29uc3Qgc3RydWN0IGlwNl9oZHIgKiwgY29uc3QgdWludDhfdCAqLCB1X2ludCwgdV9pbnQsIHVfaW50KTsKLQogI2VuZGlmIC8qIG5vdCBfTkVUSU5FVF9JUDZfSF8gKi8KZGlmZiAtLWdpdCBhL2lwcHJvdG8uYyBiL2lwcHJvdG8uYwppbmRleCBlNDRiNzQ4Li5iY2YyY2VkIDEwMDY0NAotLS0gYS9pcHByb3RvLmMKKysrIGIvaXBwcm90by5jCkBAIC0xMywxNCArMTMsMTMgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJpcHByb3RvLmgiCiAKIGNvbnN0IHN0cnVjdCB0b2sgaXBwcm90b192YWx1ZXNbXSA9IHsKZGlmZiAtLWdpdCBhL2wydnBuLmMgYi9sMnZwbi5jCmluZGV4IDU0MDM3YWEuLjNmMzYzOWYgMTAwNjQ0Ci0tLSBhL2wydnBuLmMKKysrIGIvbDJ2cG4uYwpAQCAtMTMsNDIgKzEzLDgzIEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImwydnBuLmgiCiAKLS8qIGRyYWZ0LWlldGYtcHdlMy1pYW5hLWFsbG9jYXRpb24tMDQgKi8KKy8qCisgKiBCR1AgTGF5ZXIgMiBFbmNhcHN1bGF0aW9uIFR5cGVzCisgKgorICogUkZDIDY2MjQKKyAqCisgKiBodHRwOi8vd3d3LmlhbmEub3JnL2Fzc2lnbm1lbnRzL2JncC1wYXJhbWV0ZXJzL2JncC1wYXJhbWV0ZXJzLnhodG1sI2JncC1sMi1lbmNhcHN1bGF0aW9uLXR5cGVzLXJlZ2lzdHJ5CisgKi8KIGNvbnN0IHN0cnVjdCB0b2sgbDJ2cG5fZW5jYXBzX3ZhbHVlc1tdID0gewotICAgIHsgMHgwMCwgIlJlc2VydmVkIn0sCi0gICAgeyAweDAxLCAiRnJhbWUgUmVsYXkifSwKLSAgICB7IDB4MDIsICJBVE0gQUFMNSBWQ0MgdHJhbnNwb3J0In0sCi0gICAgeyAweDAzLCAiQVRNIHRyYW5zcGFyZW50IGNlbGwgdHJhbnNwb3J0In0sCi0gICAgeyAweDA0LCAiRXRoZXJuZXQgVkxBTiJ9LAotICAgIHsgMHgwNSwgIkV0aGVybmV0In0sCi0gICAgeyAweDA2LCAiQ2lzY28tSERMQyJ9LAotICAgIHsgMHgwNywgIlBQUCJ9LAotICAgIHsgMHgwOCwgIlNPTkVUL1NESCBDaXJjdWl0IEVtdWxhdGlvbiBTZXJ2aWNlIG92ZXIgTVBMUyJ9LAotICAgIHsgMHgwOSwgIkFUTSBuLXRvLW9uZSBWQ0MgY2VsbCB0cmFuc3BvcnQifSwKLSAgICB7IDB4MGEsICJBVE0gbi10by1vbmUgVlBDIGNlbGwgdHJhbnNwb3J0In0sCi0gICAgeyAweDBiLCAiSVAgTGF5ZXIyIFRyYW5zcG9ydCJ9LAotICAgIHsgMHgwYywgIkFUTSBvbmUtdG8tb25lIFZDQyBDZWxsIE1vZGUifSwKLSAgICB7IDB4MGQsICJBVE0gb25lLXRvLW9uZSBWUEMgQ2VsbCBNb2RlIn0sCi0gICAgeyAweDBlLCAiQVRNIEFBTDUgUERVIFZDQyB0cmFuc3BvcnQifSwKLSAgICB7IDB4MGYsICJGcmFtZS1SZWxheSBQb3J0IG1vZGUifSwKLSAgICB7IDB4MTAsICJTT05FVC9TREggQ2lyY3VpdCBFbXVsYXRpb24gb3ZlciBQYWNrZXQifSwKLSAgICB7IDB4MTEsICJTdHJ1Y3R1cmUtYWdub3N0aWMgRTEgb3ZlciBQYWNrZXQifSwKLSAgICB7IDB4MTIsICJTdHJ1Y3R1cmUtYWdub3N0aWMgVDEgKERTMSkgb3ZlciBQYWNrZXQifSwKLSAgICB7IDB4MTMsICJTdHJ1Y3R1cmUtYWdub3N0aWMgRTMgb3ZlciBQYWNrZXQifSwKLSAgICB7IDB4MTQsICJTdHJ1Y3R1cmUtYWdub3N0aWMgVDMgKERTMykgb3ZlciBQYWNrZXQifSwKLSAgICB7IDB4MTUsICJDRVNvUFNOIGJhc2ljIG1vZGUifSwKLSAgICB7IDB4MTYsICJURE1vSVAgYmFzaWMgbW9kZSJ9LAotICAgIHsgMHgxNywgIkNFU29QU04gVERNIHdpdGggQ0FTIn0sCi0gICAgeyAweDE4LCAiVERNb0lQIFRETSB3aXRoIENBUyJ9LAotICAgIHsgMHg0MCwgIklQLWludGVyd29ya2luZyJ9LAorICAgIHsgMCwgIlJlc2VydmVkIn0sCisgICAgeyAxLCAiRnJhbWUgUmVsYXkifSwKKyAgICB7IDIsICJBVE0gQUFMNSBTRFUgVkNDIHRyYW5zcG9ydCJ9LAorICAgIHsgMywgIkFUTSB0cmFuc3BhcmVudCBjZWxsIHRyYW5zcG9ydCJ9LAorICAgIHsgNCwgIkV0aGVybmV0IChWTEFOKSBUYWdnZWQgTW9kZSJ9LAorICAgIHsgNSwgIkV0aGVybmV0IFJhdyBNb2RlIn0sCisgICAgeyA2LCAiQ2lzY28gSERMQyJ9LAorICAgIHsgNywgIlBQUCJ9LAorICAgIHsgOCwgIlNPTkVUL1NESCBDaXJjdWl0IEVtdWxhdGlvbiBTZXJ2aWNlIG92ZXIgTVBMUyJ9LAorICAgIHsgOSwgIkFUTSBuLXRvLW9uZSBWQ0MgY2VsbCB0cmFuc3BvcnQifSwKKyAgICB7IDEwLCAiQVRNIG4tdG8tb25lIFZQQyBjZWxsIHRyYW5zcG9ydCJ9LAorICAgIHsgMTEsICJJUCBsYXllciAyIHRyYW5zcG9ydCJ9LAorICAgIHsgMTUsICJGcmFtZSBSZWxheSBQb3J0IG1vZGUifSwKKyAgICB7IDE3LCAiU3RydWN0dXJlLWFnbm9zdGljIEUxIG92ZXIgcGFja2V0In0sCisgICAgeyAxOCwgIlN0cnVjdHVyZS1hZ25vc3RpYyBUMSAoRFMxKSBvdmVyIHBhY2tldCJ9LAorICAgIHsgMTksICJWUExTIn0sCisgICAgeyAyMCwgIlN0cnVjdHVyZS1hZ25vc3RpYyBUMyAoRFMzKSBvdmVyIHBhY2tldCJ9LAorICAgIHsgMjEsICJOeDY0a2JpdC9zIEJhc2ljIFNlcnZpY2UgdXNpbmcgU3RydWN0dXJlLWF3YXJlIn0sCisgICAgeyAyNSwgIkZyYW1lIFJlbGF5IERMQ0kifSwKKyAgICB7IDQwLCAiU3RydWN0dXJlLWFnbm9zdGljIEUzIG92ZXIgcGFja2V0In0sCisgICAgeyA0MSwgIk9jdGV0LWFsaWduZWQgcGxheWxvYWQgZm9yIFN0cnVjdHVyZS1hZ25vc3RpYyBEUzEgY2lyY3VpdHMifSwKKyAgICB7IDQyLCAiRTEgTng2NGtiaXQvcyB3aXRoIENBUyB1c2luZyBTdHJ1Y3R1cmUtYXdhcmUifSwKKyAgICB7IDQzLCAiRFMxIChFU0YpIE54NjRrYml0L3Mgd2l0aCBDQVMgdXNpbmcgU3RydWN0dXJlLWF3YXJlIn0sCisgICAgeyA0NCwgIkRTMSAoU0YpIE54NjRrYml0L3Mgd2l0aCBDQVMgdXNpbmcgU3RydWN0dXJlLWF3YXJlIn0sCisgICAgeyAwLCBOVUxMfQorfTsKKworLyoKKyAqIE1QTFMgUHNldWRvd2lyZSBUeXBlcworICoKKyAqIFJGQyA0NDQ2CisgKgorICogaHR0cDovL3d3dy5pYW5hLm9yZy9hc3NpZ25tZW50cy9wd2UzLXBhcmFtZXRlcnMvcHdlMy1wYXJhbWV0ZXJzLnhodG1sI3B3ZTMtcGFyYW1ldGVycy0yCisgKi8KK2NvbnN0IHN0cnVjdCB0b2sgbXBsc19wd190eXBlc192YWx1ZXNbXSA9IHsKKyAgICB7IDB4MDAwMCwgIlJlc2VydmVkIn0sCisgICAgeyAweDAwMDEsICJGcmFtZSBSZWxheSBETENJIChNYXJ0aW5pIE1vZGUpIn0sCisgICAgeyAweDAwMDIsICJBVE0gQUFMNSBTRFUgVkNDIHRyYW5zcG9ydCJ9LAorICAgIHsgMHgwMDAzLCAiQVRNIHRyYW5zcGFyZW50IGNlbGwgdHJhbnNwb3J0In0sCisgICAgeyAweDAwMDQsICJFdGhlcm5ldCBWTEFOIn0sCisgICAgeyAweDAwMDUsICJFdGhlcm5ldCJ9LAorICAgIHsgMHgwMDA2LCAiQ2lzY28tSERMQyJ9LAorICAgIHsgMHgwMDA3LCAiUFBQIn0sCisgICAgeyAweDAwMDgsICJTT05FVC9TREggQ2lyY3VpdCBFbXVsYXRpb24gU2VydmljZSBvdmVyIE1QTFMifSwKKyAgICB7IDB4MDAwOSwgIkFUTSBuLXRvLW9uZSBWQ0MgY2VsbCB0cmFuc3BvcnQifSwKKyAgICB7IDB4MDAwYSwgIkFUTSBuLXRvLW9uZSBWUEMgY2VsbCB0cmFuc3BvcnQifSwKKyAgICB7IDB4MDAwYiwgIklQIExheWVyMiBUcmFuc3BvcnQifSwKKyAgICB7IDB4MDAwYywgIkFUTSBvbmUtdG8tb25lIFZDQyBDZWxsIE1vZGUifSwKKyAgICB7IDB4MDAwZCwgIkFUTSBvbmUtdG8tb25lIFZQQyBDZWxsIE1vZGUifSwKKyAgICB7IDB4MDAwZSwgIkFUTSBBQUw1IFBEVSBWQ0MgdHJhbnNwb3J0In0sCisgICAgeyAweDAwMGYsICJGcmFtZS1SZWxheSBQb3J0IG1vZGUifSwKKyAgICB7IDB4MDAxMCwgIlNPTkVUL1NESCBDaXJjdWl0IEVtdWxhdGlvbiBvdmVyIFBhY2tldCJ9LAorICAgIHsgMHgwMDExLCAiU3RydWN0dXJlLWFnbm9zdGljIEUxIG92ZXIgUGFja2V0In0sCisgICAgeyAweDAwMTIsICJTdHJ1Y3R1cmUtYWdub3N0aWMgVDEgKERTMSkgb3ZlciBQYWNrZXQifSwKKyAgICB7IDB4MDAxMywgIlN0cnVjdHVyZS1hZ25vc3RpYyBFMyBvdmVyIFBhY2tldCJ9LAorICAgIHsgMHgwMDE0LCAiU3RydWN0dXJlLWFnbm9zdGljIFQzIChEUzMpIG92ZXIgUGFja2V0In0sCisgICAgeyAweDAwMTUsICJDRVNvUFNOIGJhc2ljIG1vZGUifSwKKyAgICB7IDB4MDAxNiwgIlRETW9JUCBiYXNpYyBtb2RlIn0sCisgICAgeyAweDAwMTcsICJDRVNvUFNOIFRETSB3aXRoIENBUyJ9LAorICAgIHsgMHgwMDE4LCAiVERNb0lQIFRETSB3aXRoIENBUyJ9LAorICAgIHsgMHgwMDE5LCAiRnJhbWUgUmVsYXkgRExDSSJ9LAorICAgIHsgMHgwMDQwLCAiSVAtaW50ZXJ3b3JraW5nIn0sCiAgICAgeyAwLCBOVUxMfQogfTsKZGlmZiAtLWdpdCBhL2wydnBuLmggYi9sMnZwbi5oCmluZGV4IDE1MTIyOGYuLmQ5M2FiZjEgMTAwNjQ0Ci0tLSBhL2wydnBuLmgKKysrIGIvbDJ2cG4uaApAQCAtMTQsMyArMTQsNCBAQAogICovCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdG9rIGwydnBuX2VuY2Fwc192YWx1ZXNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3QgdG9rIG1wbHNfcHdfdHlwZXNfdmFsdWVzW107CmRpZmYgLS1naXQgYS9sYmwvb3Mtc29sYXJpczIuaCBiL2xibC9vcy1zb2xhcmlzMi5oCmluZGV4IDlmOTRkYTkuLmFlZGJhNGUgMTAwNjQ0Ci0tLSBhL2xibC9vcy1zb2xhcmlzMi5oCisrKyBiL2xibC9vcy1zb2xhcmlzMi5oCkBAIC0yNSw0ICsyNSwzIEBACiAjZW5kaWYKIGNoYXIgICAgKnN0cmVycm9yKGludCk7CiBpbnQJc25wcmludGYoY2hhciAqLCBzaXplX3QsIGNvbnN0IGNoYXIgKiwgLi4uKTsKLWludAlzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZGlmZiAtLWdpdCBhL2xibC9vcy1zdW5vczQuaCBiL2xibC9vcy1zdW5vczQuaAppbmRleCBiNzM1ODU3Li4wZTYzMjcwIDEwMDY0NAotLS0gYS9sYmwvb3Mtc3Vub3M0LmgKKysrIGIvbGJsL29zLXN1bm9zNC5oCkBAIC0xNjYsMTIgKzE2NiwxMCBAQAogaW50CXN0YXQoY29uc3QgY2hhciAqLCBzdHJ1Y3Qgc3RhdCAqKTsKIGludAlzdGF0ZnMoY2hhciAqLCBzdHJ1Y3Qgc3RhdGZzICopOwogY2hhcgkqc3RyZXJyb3IoaW50KTsKLWludAlzdHJjYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKICNpZmRlZiBfX1NURENfXwogc3RydWN0CXRtOwogI2VuZGlmCiBpbnQJc3RyZnRpbWUoY2hhciAqLCBpbnQsIGNoYXIgKiwgc3RydWN0IHRtICopOwotaW50CXN0cm5jYXNlY21wKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOwogbG9uZwlzdHJ0b2woY29uc3QgY2hhciAqLCBjaGFyICoqLCBpbnQpOwogdm9pZAlzeW5jKHZvaWQpOwogdm9pZAlzeXNsb2coaW50LCBjb25zdCBjaGFyICosIC4uLik7CmRpZmYgLS1naXQgYS9sYmwvb3MtdWx0cml4NC5oIGIvbGJsL29zLXVsdHJpeDQuaAppbmRleCBmYTFmNzcwLi44OTFkZWYyIDEwMDY0NAotLS0gYS9sYmwvb3MtdWx0cml4NC5oCisrKyBiL2xibC9vcy11bHRyaXg0LmgKQEAgLTM0LDQgKzM0LDMgQEAKIGludAlwZm9wZW4oY2hhciAqLCBpbnQpOwogaW50CXNldGxpbmVidWYoRklMRSAqKTsKIGludAlzb2NrZXQoaW50LCBpbnQsIGludCk7Ci1pbnQJc3RyY2FzZWNtcChjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKik7CmRpZmYgLS1naXQgYS9tYWNoZGVwLmMgYi9tYWNoZGVwLmMKaW5kZXggN2IyNTlhZS4uMWYwODYxNiAxMDA2NDQKLS0tIGEvbWFjaGRlcC5jCisrKyBiL21hY2hkZXAuYwpAQCAtMjksNyArMjksNyBAQAogICogbmVlZCB0byBkbyB0byBnZXQgaXQgZGVmaW5lZD8gIFRoaXMgaXMgY2xlYXJseSB3cm9uZywgYXMgd2Ugc2hvdWxkbid0CiAgKiBoYXZlIHRvIGluY2x1ZGUgVU5JWCBvciBXaW5kb3dzIHN5c3RlbSBoZWFkZXIgZmlsZXMgdG8gZ2V0IGl0LgogICovCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaWZuZGVmIEhBVkVfX19BVFRSSUJVVEVfXwogI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCmRpZmYgLS1naXQgYS9tYWNoZGVwLmggYi9tYWNoZGVwLmgKaW5kZXggZDFjN2Q0Yi4uYmE4ZWQzOCAxMDA2NDQKLS0tIGEvbWFjaGRlcC5oCisrKyBiL21hY2hkZXAuaApAQCAtMTgsOCArMTgsOCBAQAogICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KLSNpZm5kZWYgdGNwZHVtcF9tYWNoZGVwX2gKLSNkZWZpbmUgdGNwZHVtcF9tYWNoZGVwX2gKKyNpZm5kZWYgbmV0ZGlzc2VjdF9tYWNoZGVwX2gKKyNkZWZpbmUgbmV0ZGlzc2VjdF9tYWNoZGVwX2gKIAogaW50IGFib3J0X29uX21pc2FsaWdubWVudChjaGFyICosIHNpemVfdCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL21pYi5oIGIvbWliLmgKaW5kZXggOTJjNmMyYy4uNmM4ZTYzYyAxMDA2NDQKLS0tIGEvbWliLmgKKysrIGIvbWliLmgKQEAgLTgsNyArOCw3IEBACiAKIC8qIHBhcnNlIHByb2JsZW06IG5ldyBuYW1lICJtaWIiIGZvciBtZ210Lm1pYigxKSBpZ25vcmVkICovCiAvKiBwYXJzZSBwcm9ibGVtOiBubyBwYXJlbnQgZm9yIDAubnVsbFNwZWNpZmljKDApICovCi1zdHJ1Y3Qgb2JqCitzdGF0aWMgc3RydWN0IG9iagogX3Byb3Rlb25fb2JqID0gewogCSJwcm90ZW9uIiwgMSwgMCwKIAlOVUxMLCBOVUxMCmRpZmYgLS1naXQgYS9taXNzaW5nL2FkZHJpbmZvLmggYi9taXNzaW5nL2FkZHJpbmZvLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJmNGJiZjYuLjAwMDAwMDAKLS0tIGEvbWlzc2luZy9hZGRyaW5mby5oCisrKyAvZGV2L251bGwKQEAgLTEsMTE3ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIDE5OTgsIGFuZCAxOTk5IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgSEFWRV9BRERSSU5GTwotCi0vKgotICogRXJyb3IgcmV0dXJuIGNvZGVzIGZyb20gZ2V0YWRkcmluZm8oKQotICovCi0jZGVmaW5lCUVBSV9BRERSRkFNSUxZCSAxCS8qIGFkZHJlc3MgZmFtaWx5IGZvciBob3N0bmFtZSBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lCUVBSV9BR0FJTgkgMgkvKiB0ZW1wb3JhcnkgZmFpbHVyZSBpbiBuYW1lIHJlc29sdXRpb24gKi8KLSNkZWZpbmUJRUFJX0JBREZMQUdTCSAzCS8qIGludmFsaWQgdmFsdWUgZm9yIGFpX2ZsYWdzICovCi0jZGVmaW5lCUVBSV9GQUlMCSA0CS8qIG5vbi1yZWNvdmVyYWJsZSBmYWlsdXJlIGluIG5hbWUgcmVzb2x1dGlvbiAqLwotI2RlZmluZQlFQUlfRkFNSUxZCSA1CS8qIGFpX2ZhbWlseSBub3Qgc3VwcG9ydGVkICovCi0jZGVmaW5lCUVBSV9NRU1PUlkJIDYJLyogbWVtb3J5IGFsbG9jYXRpb24gZmFpbHVyZSAqLwotI2RlZmluZQlFQUlfTk9EQVRBCSA3CS8qIG5vIGFkZHJlc3MgYXNzb2NpYXRlZCB3aXRoIGhvc3RuYW1lICovCi0jZGVmaW5lCUVBSV9OT05BTUUJIDgJLyogaG9zdG5hbWUgbm9yIHNlcnZuYW1lIHByb3ZpZGVkLCBvciBub3Qga25vd24gKi8KLSNkZWZpbmUJRUFJX1NFUlZJQ0UJIDkJLyogc2Vydm5hbWUgbm90IHN1cHBvcnRlZCBmb3IgYWlfc29ja3R5cGUgKi8KLSNkZWZpbmUJRUFJX1NPQ0tUWVBFCTEwCS8qIGFpX3NvY2t0eXBlIG5vdCBzdXBwb3J0ZWQgKi8KLSNkZWZpbmUJRUFJX1NZU1RFTQkxMQkvKiBzeXN0ZW0gZXJyb3IgcmV0dXJuZWQgaW4gZXJybm8gKi8KLSNkZWZpbmUgRUFJX0JBREhJTlRTCTEyCi0jZGVmaW5lIEVBSV9QUk9UT0NPTAkxMwotI2RlZmluZSBFQUlfTUFYCQkxNAotCi0vKiBpbnRlcm5hbCBlcnJvciAqLwotI2RlZmluZQlORVREQl9JTlRFUk5BTAktMQkvKiBzZWUgZXJybm8gKi8KLQotLyoKLSAqIEZsYWcgdmFsdWVzIGZvciBnZXRhZGRyaW5mbygpCi0gKi8KLSNkZWZpbmUJQUlfUEFTU0lWRQkweDAwMDAwMDAxIC8qIGdldCBhZGRyZXNzIHRvIHVzZSBiaW5kKCkgKi8KLSNkZWZpbmUJQUlfQ0FOT05OQU1FCTB4MDAwMDAwMDIgLyogZmlsbCBhaV9jYW5vbm5hbWUgKi8KLSNkZWZpbmUJQUlfTlVNRVJJQ0hPU1QJMHgwMDAwMDAwNCAvKiBwcmV2ZW50IG5hbWUgcmVzb2x1dGlvbiAqLwotLyogdmFsaWQgZmxhZ3MgZm9yIGFkZHJpbmZvICovCi0jZGVmaW5lCUFJX01BU0sJCShBSV9QQVNTSVZFIHwgQUlfQ0FOT05OQU1FIHwgQUlfTlVNRVJJQ0hPU1QpCi0KLSNkZWZpbmUJQUlfQUxMCQkweDAwMDAwMTAwIC8qIElQdjYgYW5kIElQdjQtbWFwcGVkICh3aXRoIEFJX1Y0TUFQUEVEKSAqLwotI2RlZmluZQlBSV9WNE1BUFBFRF9DRkcJMHgwMDAwMDIwMCAvKiBhY2NlcHQgSVB2NC1tYXBwZWQgaWYga2VybmVsIHN1cHBvcnRzICovCi0jZGVmaW5lCUFJX0FERFJDT05GSUcJMHgwMDAwMDQwMCAvKiBvbmx5IGlmIGFueSBhZGRyZXNzIGlzIGFzc2lnbmVkICovCi0jZGVmaW5lCUFJX1Y0TUFQUEVECTB4MDAwMDA4MDAgLyogYWNjZXB0IElQdjQtbWFwcGVkIElQdjYgYWRkcmVzcyAqLwotLyogc3BlY2lhbCByZWNvbW1lbmRlZCBmbGFncyBmb3IgZ2V0aXBub2RlYnluYW1lICovCi0jZGVmaW5lCUFJX0RFRkFVTFQJKEFJX1Y0TUFQUEVEX0NGRyB8IEFJX0FERFJDT05GSUcpCi0KLXN0cnVjdCBhZGRyaW5mbyB7Ci0JaW50CWFpX2ZsYWdzOwkvKiBBSV9QQVNTSVZFLCBBSV9DQU5PTk5BTUUgKi8KLQlpbnQJYWlfZmFtaWx5OwkvKiBQRl94eHggKi8KLQlpbnQJYWlfc29ja3R5cGU7CS8qIFNPQ0tfeHh4ICovCi0JaW50CWFpX3Byb3RvY29sOwkvKiAwIG9yIElQUFJPVE9feHh4IGZvciBJUHY0IGFuZCBJUHY2ICovCi0Jc2l6ZV90CWFpX2FkZHJsZW47CS8qIGxlbmd0aCBvZiBhaV9hZGRyICovCi0JY2hhcgkqYWlfY2Fub25uYW1lOwkvKiBjYW5vbmljYWwgbmFtZSBmb3IgaG9zdG5hbWUgKi8KLQlzdHJ1Y3Qgc29ja2FkZHIgKmFpX2FkZHI7CS8qIGJpbmFyeSBhZGRyZXNzICovCi0Jc3RydWN0IGFkZHJpbmZvICphaV9uZXh0OwkvKiBuZXh0IHN0cnVjdHVyZSBpbiBsaW5rZWQgbGlzdCAqLwotfTsKLQotZXh0ZXJuIHZvaWQgZnJlZWFkZHJpbmZvIChzdHJ1Y3QgYWRkcmluZm8gKik7Ci1leHRlcm4gdm9pZCBmcmVlaG9zdGVudCAoc3RydWN0IGhvc3RlbnQgKik7Ci1leHRlcm4gaW50IGdldG5hbWVpbmZvIChjb25zdCBzdHJ1Y3Qgc29ja2FkZHIgKiwgc2l6ZV90LCBjaGFyICosCi0JCQkgICAgc2l6ZV90LCBjaGFyICosIHNpemVfdCwgaW50KTsKLWV4dGVybiBzdHJ1Y3QgaG9zdGVudCAqZ2V0aXBub2RlYnlhZGRyIChjb25zdCB2b2lkICosIHNpemVfdCwgaW50LCBpbnQgKik7Ci1leHRlcm4gc3RydWN0IGhvc3RlbnQgKmdldGlwbm9kZWJ5bmFtZSAoY29uc3QgY2hhciAqLCBpbnQsIGludCwgaW50ICopOwotZXh0ZXJuIGludCBpbmV0X3B0b24gKGludCwgY29uc3QgY2hhciAqLCB2b2lkICopOwotZXh0ZXJuIGNvbnN0IGNoYXIgKmluZXRfbnRvcCAoaW50LCBjb25zdCB2b2lkICosIGNoYXIgKiwgc2l6ZV90KTsKLSNlbmRpZiAvKiBIQVZFX0FERFJJTkZPICovCi0KLS8qCi0gKiBDb25zdGFudHMgZm9yIGdldG5hbWVpbmZvKCkKLSAqLwotI2lmbmRlZiBOSV9NQVhIT1NUCi0jZGVmaW5lCU5JX01BWEhPU1QJMTAyNQotI2VuZGlmCi0jaWZuZGVmIE5JX01BWFNFUlYKLSNkZWZpbmUJTklfTUFYU0VSVgkzMgotI2VuZGlmCi0KLS8qCi0gKiBGbGFnIHZhbHVlcyBmb3IgZ2V0bmFtZWluZm8oKQotICovCi0jaWZuZGVmIE5JX05PRlFETgotI2RlZmluZQlOSV9OT0ZRRE4JMHgwMDAwMDAwMQotI2VuZGlmCi0jaWZuZGVmIE5JX05VTUVSSUNIT1NUCi0jZGVmaW5lCU5JX05VTUVSSUNIT1NUCTB4MDAwMDAwMDIKLSNlbmRpZgotI2lmbmRlZiBOSV9OQU1FUkVRRAotI2RlZmluZQlOSV9OQU1FUkVRRAkweDAwMDAwMDA0Ci0jZW5kaWYKLSNpZm5kZWYgTklfTlVNRVJJQ1NFUlYKLSNkZWZpbmUJTklfTlVNRVJJQ1NFUlYJMHgwMDAwMDAwOAotI2VuZGlmCi0jaWZuZGVmIE5JX0RHUkFNCi0jZGVmaW5lCU5JX0RHUkFNCTB4MDAwMDAwMTAKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvbWlzc2luZy9kYXRhbGlua3MuYyBiL21pc3NpbmcvZGF0YWxpbmtzLmMKaW5kZXggZTdkNTI2Yi4uNGE3ZDZmZSAxMDA2NDQKLS0tIGEvbWlzc2luZy9kYXRhbGlua3MuYworKysgYi9taXNzaW5nL2RhdGFsaW5rcy5jCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHBjYXAuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KZGlmZiAtLWdpdCBhL21pc3NpbmcvZGxuYW1lcy5jIGIvbWlzc2luZy9kbG5hbWVzLmMKaW5kZXggYTEwY2QzOS4uMTZiZmNmNyAxMDA2NDQKLS0tIGEvbWlzc2luZy9kbG5hbWVzLmMKKysrIGIvbWlzc2luZy9kbG5hbWVzLmMKQEAgLTM1LDEyICszNSwxMyBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxwY2FwLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKICNpbmNsdWRlICJwY2FwLW1pc3NpbmcuaCIKKyNpbmNsdWRlICJhc2NpaV9zdHJjYXNlY21wLmgiCiAKIHN0cnVjdCBkbHRfY2hvaWNlIHsKIAljb25zdCBjaGFyICpuYW1lOwpAQCAtMTM3LDcgKzEzOCw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBkbHRfY2hvaWNlc1tpXS5uYW1lICE9IE5VTEw7IGkrKykgewotCQlpZiAoc3RyY2FzZWNtcChkbHRfY2hvaWNlc1tpXS5uYW1lICsgc2l6ZW9mKCJETFRfIikgLSAxLAorCQlpZiAoYXNjaWlfc3RyY2FzZWNtcChkbHRfY2hvaWNlc1tpXS5uYW1lICsgc2l6ZW9mKCJETFRfIikgLSAxLAogCQkgICAgbmFtZSkgPT0gMCkKIAkJCXJldHVybiAoZGx0X2Nob2ljZXNbaV0uZGx0KTsKIAl9CmRpZmYgLS1naXQgYS9taXNzaW5nL2dldG5hbWVpbmZvLmMgYi9taXNzaW5nL2dldG5hbWVpbmZvLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDYzYWJhNzMuLjAwMDAwMDAKLS0tIGEvbWlzc2luZy9nZXRuYW1laW5mby5jCisrKyAvZGV2L251bGwKQEAgLTEsMjc2ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTUsIDE5OTYsIDE5OTcsIGFuZCAxOTk4IFdJREUgUHJvamVjdC4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycwotICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCi0gKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCi0gKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAotICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKLSAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQotICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKLSAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKLSAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKLSAqIFNVQ0ggREFNQUdFLgotICovCi0KLS8qCi0gKiBJc3N1ZXMgdG8gYmUgZGlzY3Vzc2VkOgotICogLSBUaHJlYWQgc2FmZS1uZXNzIG11c3QgYmUgY2hlY2tlZAotICogLSBSZXR1cm4gdmFsdWVzLiAgVGhlcmUgc2VlbXMgdG8gYmUgbm8gc3RhbmRhcmQgZm9yIHJldHVybiB2YWx1ZSAoUkZDMjU1MykKLSAqICAgYnV0IElOUklBIGltcGxlbWVudGF0aW9uIHJldHVybnMgRUFJX3h4eCBkZWZpbmVkIGZvciBnZXRhZGRyaW5mbygpLgotICogLSBSRkMyNTUzIHNheXMgdGhhdCB3ZSBzaG91bGQgcmFpc2UgZXJyb3Igb24gc2hvcnQgYnVmZmVyLiAgWC9PcGVuIHNheXMKLSAqICAgd2UgbmVlZCB0byB0cnVuY2F0ZSB0aGUgcmVzdWx0LiAgV2Ugb2JleSBSRkMyNTUzIChhbmQgWC9PcGVuIHNob3VsZCBiZQotICogICBtb2RpZmllZCkuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlIDxjb25maWcuaD4KLSNlbmRpZgotCi0jaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8c3lzL3NvY2tldC5oPgotI2luY2x1ZGUgPG5ldC9pZi5oPgotI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4KLSNpbmNsdWRlIDxhcnBhL2luZXQuaD4KLSNpbmNsdWRlIDxhcnBhL25hbWVzZXIuaD4KLSNpbmNsdWRlIDxuZXRkYi5oPgotI2luY2x1ZGUgPHJlc29sdi5oPgotI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHN0ZGRlZi5oPgotI2luY2x1ZGUgPGVycm5vLmg+Ci0KLSNpZmRlZiBORUVEX0FERFJJTkZPX0gKLSNpbmNsdWRlICJhZGRyaW5mby5oIgotI2VuZGlmCi0KLSNkZWZpbmUgU1VDQ0VTUyAwCi0jZGVmaW5lIEFOWSAwCi0jZGVmaW5lIFlFUyAxCi0jZGVmaW5lIE5PICAwCi0KLXN0YXRpYyBzdHJ1Y3QgYWZkIHsKLQlpbnQgYV9hZjsKLQlpbnQgYV9hZGRybGVuOwotCWludCBhX3NvY2tsZW47Ci0JaW50IGFfb2ZmOwotfSBhZmRsIFtdID0gewotI2lmZGVmIElORVQ2Ci0Je1BGX0lORVQ2LCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcl9pbjYpLAotCQlvZmZzZXRvZihzdHJ1Y3Qgc29ja2FkZHJfaW42LCBzaW42X2FkZHIpfSwKLSNlbmRpZgotCXtQRl9JTkVULCBzaXplb2Yoc3RydWN0IGluX2FkZHIpLCBzaXplb2Yoc3RydWN0IHNvY2thZGRyX2luKSwKLQkJb2Zmc2V0b2Yoc3RydWN0IHNvY2thZGRyX2luLCBzaW5fYWRkcil9LAotCXswLCAwLCAwfSwKLX07Ci0KLXN0cnVjdCBzb2NraW5ldCB7Ci0JdV9jaGFyCXNpX2xlbjsKLQl1X2NoYXIJc2lfZmFtaWx5OwotCXVfc2hvcnQJc2lfcG9ydDsKLX07Ci0KLSNkZWZpbmUgRU5JX05PU09DS0VUIAkwCi0jZGVmaW5lIEVOSV9OT1NFUlZOQU1FCTEKLSNkZWZpbmUgRU5JX05PSE9TVE5BTUUJMgotI2RlZmluZSBFTklfTUVNT1JZCTMKLSNkZWZpbmUgRU5JX1NZU1RFTQk0Ci0jZGVmaW5lIEVOSV9GQU1JTFkJNQotI2RlZmluZSBFTklfU0FMRU4JNgotCi1pbnQKLWdldG5hbWVpbmZvKHNhLCBzYWxlbiwgaG9zdCwgaG9zdGxlbiwgc2Vydiwgc2VydmxlbiwgZmxhZ3MpCi0JY29uc3Qgc3RydWN0IHNvY2thZGRyICpzYTsKLQlzaXplX3Qgc2FsZW47Ci0JY2hhciAqaG9zdDsKLQlzaXplX3QgaG9zdGxlbjsKLQljaGFyICpzZXJ2OwotCXNpemVfdCBzZXJ2bGVuOwotCWludCBmbGFnczsKLXsKLQlzdHJ1Y3QgYWZkICphZmQ7Ci0Jc3RydWN0IHNlcnZlbnQgKnNwOwotCXN0cnVjdCBob3N0ZW50ICpocDsKLQl1X3Nob3J0IHBvcnQ7Ci0JaW50IGZhbWlseSwgaTsKLQljaGFyICphZGRyLCAqcDsKLQl1aW50MzJfdCB2NGE7Ci0JaW50IGhfZXJyb3I7Ci0JY2hhciBudW1zZXJ2WzUxMl07Ci0JY2hhciBudW1hZGRyWzUxMl07Ci0KLQlpZiAoc2EgPT0gTlVMTCkKLQkJcmV0dXJuIEVOSV9OT1NPQ0tFVDsKLQotI2lmZGVmIEhBVkVfU0FfTEVOCS8qWFhYKi8KLQlpZiAoc2EtPnNhX2xlbiAhPSBzYWxlbikKLQkJcmV0dXJuIEVOSV9TQUxFTjsKLSNlbmRpZgotCi0JZmFtaWx5ID0gc2EtPnNhX2ZhbWlseTsKLQlmb3IgKGkgPSAwOyBhZmRsW2ldLmFfYWY7IGkrKykKLQkJaWYgKGFmZGxbaV0uYV9hZiA9PSBmYW1pbHkpIHsKLQkJCWFmZCA9ICZhZmRsW2ldOwotCQkJZ290byBmb3VuZDsKLQkJfQotCXJldHVybiBFTklfRkFNSUxZOwotCi0gZm91bmQ6Ci0JaWYgKHNhbGVuICE9IGFmZC0+YV9zb2NrbGVuKQotCQlyZXR1cm4gRU5JX1NBTEVOOwotCi0JcG9ydCA9ICgoc3RydWN0IHNvY2tpbmV0ICopc2EpLT5zaV9wb3J0OyAvKiBuZXR3b3JrIGJ5dGUgb3JkZXIgKi8KLQlhZGRyID0gKGNoYXIgKilzYSArIGFmZC0+YV9vZmY7Ci0KLQlpZiAoc2VydiA9PSBOVUxMIHx8IHNlcnZsZW4gPT0gMCkgewotCQkvKgotCQkgKiBkbyBub3RoaW5nIGluIHRoaXMgY2FzZS4KLQkJICogaW4gY2FzZSB5b3UgYXJlIHdvbmRlcmluZyBpZiAiJiYiIGlzIG1vcmUgY29ycmVjdCB0aGFuCi0JCSAqICJ8fCIgaGVyZTogUkZDMjU1MyBzYXlzIHRoYXQgc2VydiA9PSBOVUxMIE9SIHNlcnZsZW4gPT0gMAotCQkgKiBtZWFucyB0aGF0IHRoZSBjYWxsZXIgZG9lcyBub3Qgd2FudCB0aGUgcmVzdWx0LgotCQkgKi8KLQl9IGVsc2UgewotCQlpZiAoZmxhZ3MgJiBOSV9OVU1FUklDU0VSVikKLQkJCXNwID0gTlVMTDsKLQkJZWxzZSB7Ci0JCQlzcCA9IGdldHNlcnZieXBvcnQocG9ydCwKLQkJCQkoZmxhZ3MgJiBOSV9ER1JBTSkgPyAidWRwIiA6ICJ0Y3AiKTsKLQkJfQotCQlpZiAoc3ApIHsKLQkJCWlmIChzdHJsZW4oc3AtPnNfbmFtZSkgKyAxID4gc2VydmxlbikKLQkJCQlyZXR1cm4gRU5JX01FTU9SWTsKLQkJCXN0cmNweShzZXJ2LCBzcC0+c19uYW1lKTsKLQkJfSBlbHNlIHsKLQkJCXNucHJpbnRmKG51bXNlcnYsIHNpemVvZihudW1zZXJ2KSwgIiVkIiwgbnRvaHMocG9ydCkpOwotCQkJaWYgKHN0cmxlbihudW1zZXJ2KSArIDEgPiBzZXJ2bGVuKQotCQkJCXJldHVybiBFTklfTUVNT1JZOwotCQkJc3RyY3B5KHNlcnYsIG51bXNlcnYpOwotCQl9Ci0JfQotCi0Jc3dpdGNoIChzYS0+c2FfZmFtaWx5KSB7Ci0JY2FzZSBBRl9JTkVUOgotICAgICAgICAgICAgICAgIHY0YSA9ICh1aW50MzJfdCkKLQkJCW50b2hsKCgoc3RydWN0IHNvY2thZGRyX2luICopc2EpLT5zaW5fYWRkci5zX2FkZHIpOwotCQlpZiAoSU5fTVVMVElDQVNUKHY0YSkgfHwgSU5fRVhQRVJJTUVOVEFMKHY0YSkpCi0JCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJdjRhID4+PSBJTl9DTEFTU0FfTlNISUZUOwotCQlpZiAodjRhID09IDApCi0JCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKLQljYXNlIEFGX0lORVQ2OgotCSAgICB7Ci0JCXN0cnVjdCBzb2NrYWRkcl9pbjYgKnNpbjY7Ci0JCXNpbjYgPSAoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhOwotCQlzd2l0Y2ggKHNpbjYtPnNpbjZfYWRkci5zNl9hZGRyWzBdKSB7Ci0JCWNhc2UgMHgwMDoKLQkJCWlmIChJTjZfSVNfQUREUl9WNE1BUFBFRCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlIGlmIChJTjZfSVNfQUREUl9MT09QQkFDSygmc2luNi0+c2luNl9hZGRyKSkKLQkJCQk7Ci0JCQllbHNlCi0JCQkJZmxhZ3MgfD0gTklfTlVNRVJJQ0hPU1Q7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoJnNpbjYtPnNpbjZfYWRkcikpIHsKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCX0KLQkJCWVsc2UgaWYgKElONl9JU19BRERSX01VTFRJQ0FTVCgmc2luNi0+c2luNl9hZGRyKSkKLQkJCQlmbGFncyB8PSBOSV9OVU1FUklDSE9TVDsKLQkJCWJyZWFrOwotCQl9Ci0JICAgIH0KLQkJYnJlYWs7Ci0jZW5kaWYKLQl9Ci0JaWYgKGhvc3QgPT0gTlVMTCB8fCBob3N0bGVuID09IDApIHsKLQkJLyoKLQkJICogZG8gbm90aGluZyBpbiB0aGlzIGNhc2UuCi0JCSAqIGluIGNhc2UgeW91IGFyZSB3b25kZXJpbmcgaWYgIiYmIiBpcyBtb3JlIGNvcnJlY3QgdGhhbgotCQkgKiAifHwiIGhlcmU6IFJGQzI1NTMgc2F5cyB0aGF0IGhvc3QgPT0gTlVMTCBPUiBob3N0bGVuID09IDAKLQkJICogbWVhbnMgdGhhdCB0aGUgY2FsbGVyIGRvZXMgbm90IHdhbnQgdGhlIHJlc3VsdC4KLQkJICovCi0JfSBlbHNlIGlmIChmbGFncyAmIE5JX05VTUVSSUNIT1NUKSB7Ci0JCS8qIE5VTUVSSUNIT1NUIGFuZCBOQU1FUkVRRCBjb25mbGljdHMgd2l0aCBlYWNoIG90aGVyICovCi0JCWlmIChmbGFncyAmIE5JX05BTUVSRVFEKQotCQkJcmV0dXJuIEVOSV9OT0hPU1ROQU1FOwotCQlpZiAoaW5ldF9udG9wKGFmZC0+YV9hZiwgYWRkciwgbnVtYWRkciwgc2l6ZW9mKG51bWFkZHIpKQotCQkgICAgPT0gTlVMTCkKLQkJCXJldHVybiBFTklfU1lTVEVNOwotCQlpZiAoc3RybGVuKG51bWFkZHIpICsgMSA+IGhvc3RsZW4pCi0JCQlyZXR1cm4gRU5JX01FTU9SWTsKLQkJc3RyY3B5KGhvc3QsIG51bWFkZHIpOwotI2lmIGRlZmluZWQoSU5FVDYpICYmIGRlZmluZWQoTklfV0lUSFNDT1BFSUQpCi0JCWlmIChhZmQtPmFfYWYgPT0gQUZfSU5FVDYgJiYKLQkJICAgIChJTjZfSVNfQUREUl9MSU5LTE9DQUwoKHN0cnVjdCBpbjZfYWRkciAqKWFkZHIpIHx8Ci0JCSAgICAgSU42X0lTX0FERFJfTVVMVElDQVNUKChzdHJ1Y3QgaW42X2FkZHIgKilhZGRyKSkgJiYKLQkJICAgICgoc3RydWN0IHNvY2thZGRyX2luNiAqKXNhKS0+c2luNl9zY29wZV9pZCkgewotI2lmbmRlZiBBTFdBWVNfV0lUSFNDT1BFCi0JCQlpZiAoZmxhZ3MgJiBOSV9XSVRIU0NPUEVJRCkKLSNlbmRpZiAvKiAhQUxXQVlTX1dJVEhTQ09QRSAqLwotCQkJewotCQkJCWNoYXIgKmVwID0gc3RyY2hyKGhvc3QsICdcMCcpOwotCQkJCXVuc2lnbmVkIGludCBpZmluZGV4ID0KLQkJCQkJKChzdHJ1Y3Qgc29ja2FkZHJfaW42ICopc2EpLT5zaW42X3Njb3BlX2lkOwotCi0JCQkJKmVwID0gU0NPUEVfREVMSU1JVEVSOwotCQkJCWlmICgoaWZfaW5kZXh0b25hbWUoaWZpbmRleCwgZXAgKyAxKSkgPT0gTlVMTCkKLQkJCQkJLyogWFhYIHdoYXQgc2hvdWxkIHdlIGRvPyAqLwotCQkJCQlzdHJuY3B5KGVwICsgMSwgIj8/PyIsIDMpOwotCQkJfQotCQl9Ci0jZW5kaWYgLyogSU5FVDYgKi8KLQl9IGVsc2UgewotI2lmZGVmIFVTRV9HRVRJUE5PREVCWQotCQlocCA9IGdldGlwbm9kZWJ5YWRkcihhZGRyLCBhZmQtPmFfYWRkcmxlbiwgYWZkLT5hX2FmLCAmaF9lcnJvcik7Ci0jZWxzZQotCQlocCA9IGdldGhvc3RieWFkZHIoYWRkciwgYWZkLT5hX2FkZHJsZW4sIGFmZC0+YV9hZik7Ci0jaWZkZWYgSEFWRV9IX0VSUk5PCi0JCWhfZXJyb3IgPSBoX2Vycm5vOwotI2Vsc2UKLQkJaF9lcnJvciA9IEVJTlZBTDsKLSNlbmRpZgotI2VuZGlmCi0KLQkJaWYgKGhwKSB7Ci0JCQlpZiAoZmxhZ3MgJiBOSV9OT0ZRRE4pIHsKLQkJCQlwID0gc3RyY2hyKGhwLT5oX25hbWUsICcuJyk7Ci0JCQkJaWYgKHApICpwID0gJ1wwJzsKLQkJCX0KLQkJCWlmIChzdHJsZW4oaHAtPmhfbmFtZSkgKyAxID4gaG9zdGxlbikgewotI2lmZGVmIFVTRV9HRVRJUE5PREVCWQotCQkJCWZyZWVob3N0ZW50KGhwKTsKLSNlbmRpZgotCQkJCXJldHVybiBFTklfTUVNT1JZOwotCQkJfQotCQkJc3RyY3B5KGhvc3QsIGhwLT5oX25hbWUpOwotI2lmZGVmIFVTRV9HRVRJUE5PREVCWQotCQkJZnJlZWhvc3RlbnQoaHApOwotI2VuZGlmCi0JCX0gZWxzZSB7Ci0JCQlpZiAoZmxhZ3MgJiBOSV9OQU1FUkVRRCkKLQkJCQlyZXR1cm4gRU5JX05PSE9TVE5BTUU7Ci0JCQlpZiAoaW5ldF9udG9wKGFmZC0+YV9hZiwgYWRkciwgbnVtYWRkciwgc2l6ZW9mKG51bWFkZHIpKQotCQkJICAgID09IE5VTEwpCi0JCQkJcmV0dXJuIEVOSV9OT0hPU1ROQU1FOwotCQkJaWYgKHN0cmxlbihudW1hZGRyKSArIDEgPiBob3N0bGVuKQotCQkJCXJldHVybiBFTklfTUVNT1JZOwotCQkJc3RyY3B5KGhvc3QsIG51bWFkZHIpOwotCQl9Ci0JfQotCXJldHVybiBTVUNDRVNTOwotfQpkaWZmIC0tZ2l0IGEvbWlzc2luZy9pbmV0X2F0b24uYyBiL21pc3NpbmcvaW5ldF9hdG9uLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGU4NWFkNWYuLjAwMDAwMDAKLS0tIGEvbWlzc2luZy9pbmV0X2F0b24uYworKysgL2Rldi9udWxsCkBAIC0xLDUzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTUsIDE5OTYsIDE5OTcgS3VuZ2xpZ2EgVGVrbmlza2EgSPZnc2tvbGFuCi0gKiAoUm95YWwgSW5zdGl0dXRlIG9mIFRlY2hub2xvZ3ksIFN0b2NraG9sbSwgU3dlZGVuKS4KLSAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiAzLiBBbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcgZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUKLSAqICAgIG11c3QgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKLSAqICAgICAgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgS3VuZ2xpZ2EgVGVrbmlza2EKLSAqICAgICAgSPZnc2tvbGFuIGFuZCBpdHMgY29udHJpYnV0b3JzLgotICoKLSAqIDQuIE5laXRoZXIgdGhlIG5hbWUgb2YgdGhlIEluc3RpdHV0ZSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMKLSAqICAgIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZQotICogICAgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgSU5TVElUVVRFIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAotICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQotICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgSU5TVElUVVRFIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUKLSAqIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMCi0gKiBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUwotICogT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCi0gKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAotICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWQotICogT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRgotICogU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+Ci0KLS8qIE1pbmltYWwgaW1wbGVtZW50YXRpb24gb2YgaW5ldF9hdG9uLgotICogQ2Fubm90IGRpc3Rpbmd1aXNoIGJldHdlZW4gZmFpbHVyZSBhbmQgYSBsb2NhbCBicm9hZGNhc3QgYWRkcmVzcy4gKi8KLQotI2lmbmRlZiBJTkFERFJfTk9ORQotI2RlZmluZSBJTkFERFJfTk9ORSAweGZmZmZmZmZmCi0jZW5kaWYKLQotaW50Ci1pbmV0X2F0b24oY29uc3QgY2hhciAqY3AsIHN0cnVjdCBpbl9hZGRyICphZGRyKQotewotICBhZGRyLT5zX2FkZHIgPSBpbmV0X2FkZHIoY3ApOwotICByZXR1cm4gKGFkZHItPnNfYWRkciA9PSBJTkFERFJfTk9ORSkgPyAwIDogMTsKLX0KZGlmZiAtLWdpdCBhL21pc3Npbmcvc25wcmludGYuYyBiL21pc3Npbmcvc25wcmludGYuYwppbmRleCAyMWQyMzVkLi45MjFiNzRjIDEwMDY0NAotLS0gYS9taXNzaW5nL3NucHJpbnRmLmMKKysrIGIvbWlzc2luZy9zbnByaW50Zi5jCkBAIC00Miw3ICs0Miw3IEBACiAjaW5jbHVkZSA8Y3R5cGUuaD4KICNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KIAotI2luY2x1ZGUgPGludGVyZmFjZS5oPgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogZW51bSBmb3JtYXRfZmxhZ3MgewogICAgIG1pbnVzX2ZsYWcgICAgID0gIDEsCmRpZmYgLS1naXQgYS9taXNzaW5nL3N0cmR1cC5jIGIvbWlzc2luZy9zdHJkdXAuYwppbmRleCA5ZmNhNzUyLi45Y2JmMzVhIDEwMDY0NAotLS0gYS9taXNzaW5nL3N0cmR1cC5jCisrKyBiL21pc3Npbmcvc3RyZHVwLmMKQEAgLTM1LDcgKzM1LDcgQEAKICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogY2hhciAqCiBzdHJkdXAoc3RyKQpkaWZmIC0tZ2l0IGEvbWlzc2luZy9zdHJsY2F0LmMgYi9taXNzaW5nL3N0cmxjYXQuYwppbmRleCAzNGYxYWYyLi40MDU0OTM1IDEwMDY0NAotLS0gYS9taXNzaW5nL3N0cmxjYXQuYworKysgYi9taXNzaW5nL3N0cmxjYXQuYwpAQCAtMjgsMTUgKzI4LDE1IEBACiAgKiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSCAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAvKgogICogQXBwZW5kcyBzcmMgdG8gc3RyaW5nIGRzdCBvZiBzaXplIHNpeiAodW5saWtlIHN0cm5jYXQsIHNpeiBpcyB0aGUKZGlmZiAtLWdpdCBhL21pc3Npbmcvc3RybGNweS5jIGIvbWlzc2luZy9zdHJsY3B5LmMKaW5kZXggYjA2NzFlYi4uMjRkY2NhNiAxMDA2NDQKLS0tIGEvbWlzc2luZy9zdHJsY3B5LmMKKysrIGIvbWlzc2luZy9zdHJsY3B5LmMKQEAgLTI4LDE1ICsyOCwxNSBAQAogICogQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2lmZGVmIEhBVkVfQ09ORklHX0ggCisjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgPGNvbmZpZy5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogLyoKICAqIENvcHkgc3JjIHRvIHN0cmluZyBkc3Qgb2Ygc2l6ZSBzaXouICBBdCBtb3N0IHNpei0xIGNoYXJhY3RlcnMKZGlmZiAtLWdpdCBhL21pc3Npbmcvc3Ryc2VwLmMgYi9taXNzaW5nL3N0cnNlcC5jCmluZGV4IGExZTZiMzAuLjJjMTcyNzUgMTAwNjQ0Ci0tLSBhL21pc3Npbmcvc3Ryc2VwLmMKKysrIGIvbWlzc2luZy9zdHJzZXAuYwpAQCAtMzEsMTUgKzMxLDE1IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZkZWYgSEFWRV9DT05GSUdfSCAKKyNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSA8Y29uZmlnLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAvKgogICogR2V0IG5leHQgdG9rZW4gZnJvbSBzdHJpbmcgKnN0cmluZ3AsIHdoZXJlIHRva2VucyBhcmUgcG9zc2libHktZW1wdHkKZGlmZiAtLWdpdCBhL25hbWVzZXIuaCBiL25hbWVzZXIuaAppbmRleCAxMWU3MWVmLi5lMDc1ZjA5IDEwMDY0NAotLS0gYS9uYW1lc2VyLmgKKysrIGIvbmFtZXNlci5oCkBAIC03MSwyMCArNzEsNiBAQAogI2RlZmluZSBSUkZJWEVEU1oJMTAKIAogLyoKLSAqIEludGVybmV0IG5hbWVzZXJ2ZXIgcG9ydCBudW1iZXIKLSAqLwotI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJNTMKLQotLyoKLSAqIFBvcnQgZm9yIG11bHRpY2FzdCBETlM7IHNlZQotICoKLSAqCWh0dHA6Ly9maWxlcy5tdWx0aWNhc3RkbnMub3JnL2RyYWZ0LWNoZXNoaXJlLWRuc2V4dC1tdWx0aWNhc3RkbnMudHh0Ci0gKgotICogZm9yIHRoZSBjdXJyZW50IG1ETlMgc3BlYy4KLSAqLwotI2RlZmluZSBNVUxUSUNBU1RETlNfUE9SVAk1MzUzCi0KLS8qCiAgKiBDdXJyZW50bHkgZGVmaW5lZCBvcGNvZGVzCiAgKi8KICNkZWZpbmUgUVVFUlkJCTB4MAkJLyogc3RhbmRhcmQgcXVlcnkgKi8KZGlmZiAtLWdpdCBhL3RjcGR1bXAtc3RkaW5jLmggYi9uZXRkaXNzZWN0LXN0ZGluYy5oCnNpbWlsYXJpdHkgaW5kZXggODMlCnJlbmFtZSBmcm9tIHRjcGR1bXAtc3RkaW5jLmgKcmVuYW1lIHRvIG5ldGRpc3NlY3Qtc3RkaW5jLmgKaW5kZXggMzJmOGZjOS4uYzcwNzBmMCAxMDA2NDQKLS0tIGEvdGNwZHVtcC1zdGRpbmMuaAorKysgYi9uZXRkaXNzZWN0LXN0ZGluYy5oCkBAIC0zMiwyOCArMzIsMzAgQEAKIC8qCiAgKiBJbmNsdWRlIHRoZSBhcHByb3ByaWF0ZSBPUyBoZWFkZXIgZmlsZXMgb24gV2luZG93cyBhbmQgdmFyaW91cyBmbGF2b3JzCiAgKiBvZiBVTklYLCBpbmNsdWRlIHZhcmlvdXMgbm9uLU9TIGhlYWRlciBmaWxlcyBvbiBXaW5kb3dzLCBhbmQgZGVmaW5lCi0gKiB2YXJpb3VzIGl0ZW1zIGFzIG5lZWRlZCwgdG8gaXNvbGF0ZSBtb3N0IG9mIHRjcGR1bXAncyBwbGF0Zm9ybQorICogdmFyaW91cyBpdGVtcyBhcyBuZWVkZWQsIHRvIGlzb2xhdGUgbW9zdCBvZiBuZXRkaXNzZWN0J3MgcGxhdGZvcm0KICAqIGRpZmZlcmVuY2VzIHRvIHRoaXMgb25lIGZpbGUuCiAgKi8KIAotI2lmbmRlZiB0Y3BkdW1wX3N0ZGluY19oCi0jZGVmaW5lIHRjcGR1bXBfc3RkaW5jX2gKKyNpZm5kZWYgbmV0ZGlzc2VjdF9zdGRpbmNfaAorI2RlZmluZSBuZXRkaXNzZWN0X3N0ZGluY19oCiAKICNpbmNsdWRlIDxlcnJuby5oPgogCi0jaWZkZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKKworLyoKKyAqIEluY2x1ZGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgV2luZG93cy4KKyAqLwogCiAjaW5jbHVkZSA8c3RkaW50Lmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDx3aW5zb2NrMi5oPgogI2luY2x1ZGUgPHdzMnRjcGlwLmg+Ci0jaW5jbHVkZSAiYml0dHlwZXMuaCIgICAvKiBpbiB3cGNhcCdzIFdpbjMyL2luY2x1ZGUgKi8KICNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHRpbWUuaD4KICNpbmNsdWRlIDxpby5oPgogI2luY2x1ZGUgPGZjbnRsLmg+CiAjaW5jbHVkZSA8c3lzL3R5cGVzLmg+Ci0jaW5jbHVkZSA8bmV0L25ldGRiLmg+ICAvKiBpbiB3cGNhcCdzIFdpbjMyL2luY2x1ZGUgKi8KIAogI2lmbmRlZiB1aW50OF90CiAjZGVmaW5lIHVpbnQ4X3QJCXVuc2lnbmVkIGNoYXIKQEAgLTEzMyw2ICsxMzUsMTcgQEAKIAogI2VuZGlmIC8qIF9NU0NfRVhURU5TSU9OUyAqLwogCisvKgorICogU3VwcHJlc3MgZGVmaW5pdGlvbiBvZiBpbnROX3QgaW4gYml0dHlwZXMuaCwgYXMgaW5jbHVkZWQgYnkgPHBjYXAvcGNhcC5oPgorICogb24gV2luZG93cy4KKyAqIChZZXMsIEhBVkVfVV9JTlRuX1QsIGFzIHRoZSBkZWZpbml0aW9uIGd1YXJkcyBhcmUgVU4qWC1vcmllbnRlZCwgYW5kCisgKiB3ZSBjaGVjayBmb3IgdV9pbnROX3QgaW4gdGhlIFVOKlggY29uZmlndXJlIHNjcmlwdC4pCisgKi8KKyNkZWZpbmUgSEFWRV9VX0lOVDhfVAorI2RlZmluZSBIQVZFX1VfSU5UMTZfVAorI2RlZmluZSBIQVZFX1VfSU5UMzJfVAorI2RlZmluZSBIQVZFX1VfSU5UNjRfVAorCiAjaWZkZWYgX01TQ19WRVIKICNkZWZpbmUgc3RhdCBfc3RhdAogI2RlZmluZSBvcGVuIF9vcGVuCkBAIC0xNDIsMTMgKzE1NSw2IEBACiAjZGVmaW5lIE9fUkRPTkxZIF9PX1JET05MWQogI2VuZGlmICAvKiBfTVNDX1ZFUiAqLwogCi0vKiBQcm90b3MgZm9yIG1pc3NpbmcveC5jIGZ1bmN0aW9ucyAoaWRlYWxseSA8bWlzc2luZy9hZGRyaW5mby5oPgotICogc2hvdWxkIGJlIHVzZWQsIGJ1dCBpdCBjbGFzaGVzIHdpdGggPHdzMnRjcGlwLmg+KS4KLSAqLwotZXh0ZXJuIGNvbnN0IGNoYXIgKmluZXRfbnRvcCAoaW50LCBjb25zdCB2b2lkICosIGNoYXIgKiwgc2l6ZV90KTsKLWV4dGVybiBpbnQgaW5ldF9wdG9uIChpbnQsIGNvbnN0IGNoYXIgKiwgdm9pZCAqKTsKLWV4dGVybiBpbnQgaW5ldF9hdG9uIChjb25zdCBjaGFyICpjcCwgc3RydWN0IGluX2FkZHIgKmFkZHIpOwotCiAvKgogICogV2l0aCBNU1ZDLCBmb3IgQywgX19pbmxpbmUgaXMgdXNlZCB0byBtYWtlIGEgZnVuY3Rpb24gYW4gaW5saW5lLgogICovCkBAIC0xNTYsNiArMTYyLDEwIEBACiAjZGVmaW5lIGlubGluZSBfX2lubGluZQogI2VuZGlmCiAKKyNpZmRlZiBBRl9JTkVUNgorI2RlZmluZSBIQVZFX09TX0lQVjZfU1VQUE9SVAorI2VuZGlmCisKICNpZm5kZWYgSU5FVDZfQUREUlNUUkxFTgogI2RlZmluZSBJTkVUNl9BRERSU1RSTEVOIDQ2CiAjZW5kaWYKQEAgLTE3MSwxMiArMTgxLDE1IEBACiAjZW5kaWYgLyogY2FkZHJfdCAqLwogCiAjZGVmaW5lIE1BWEhPU1ROQU1FTEVOCTY0Ci0jZGVmaW5lCU5JX01BWEhPU1QJMTAyNQogI2RlZmluZSBzbnByaW50ZiBfc25wcmludGYKICNkZWZpbmUgdnNucHJpbnRmIF92c25wcmludGYKICNkZWZpbmUgUkVUU0lHVFlQRSB2b2lkCiAKLSNlbHNlIC8qIFdJTjMyICovCisjZWxzZSAvKiBfV0lOMzIgKi8KKworLyoKKyAqIEluY2x1ZGVzIGFuZCBkZWZpbml0aW9ucyBmb3IgdmFyaW91cyBmbGF2b3JzIG9mIFVOKlguCisgKi8KIAogI2luY2x1ZGUgPGN0eXBlLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CkBAIC0xOTgsNyArMjExLDcgQEAKIAogI2luY2x1ZGUgPGFycGEvaW5ldC5oPgogCi0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBfV0lOMzIgKi8KIAogI2lmbmRlZiBIQVZFX19fQVRUUklCVVRFX18KICNkZWZpbmUgX19hdHRyaWJ1dGVfXyh4KQpAQCAtMjQxLDcgKzI1NCwxMCBAQAogI2RlZmluZSBVTkFMSUdORUQJX19hdHRyaWJ1dGVfXygocGFja2VkKSkKICNlbmRpZgogCi0jaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChNU0RPUykKKy8qCisgKiBmb3BlbigpIHJlYWQgYW5kIHdyaXRlIG1vZGVzIGZvciB0ZXh0IGZpbGVzIGFuZCBiaW5hcnkgZmlsZXMuCisgKi8KKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChNU0RPUykKICAgI2RlZmluZSBGT1BFTl9SRUFEX1RYVCAgICJydCIKICAgI2RlZmluZSBGT1BFTl9SRUFEX0JJTiAgICJyYiIKICAgI2RlZmluZSBGT1BFTl9XUklURV9UWFQgICJ3dCIKQEAgLTI1Myw2ICsyNjksMTYgQEAKICAgI2RlZmluZSBGT1BFTl9XUklURV9CSU4gIEZPUEVOX1dSSVRFX1RYVAogI2VuZGlmCiAKKy8qCisgKiBJbmxpbmUgeDg2IGFzc2VtYmxlci1sYW5ndWFnZSB2ZXJzaW9ucyBvZiBudG9oW2xzXSgpIGFuZCBodG9uW2xzXSgpLAorICogZGVmaW5lZCBpZiB0aGUgT1MgZG9lc24ndCBwcm92aWRlIHRoZW0uICBUaGVzZSBhc3N1bWUgbm8gbW9yZSB0aGFuCisgKiBhbiA4MDM4Niwgc28sIGZvciBleGFtcGxlLCBpdCBhdm9pZHMgdGhlIGJzd2FwIGluc3RydWN0aW9uIGFkZGVkIGluCisgKiB0aGUgODA0ODYuCisgKgorICogKFdlIGRvbid0IHVzZSB0aGVtIG9uIE9TIFg7IEFwcGxlIHByb3ZpZGVzIHRoZWlyIG93biwgd2hpY2ggKmRvZXNuJ3QqCisgKiBhdm9pZCB0aGUgYnN3YXAgaW5zdHJ1Y3Rpb24sIGFzIE9TIFggb25seSBzdXBwb3J0cyBtYWNoaW5lcyB0aGF0CisgKiBoYXZlIGl0LikKKyAqLwogI2lmIGRlZmluZWQoX19HTlVDX18pICYmIGRlZmluZWQoX19pMzg2X18pICYmICFkZWZpbmVkKF9fQVBQTEVfXykgJiYgIWRlZmluZWQoX19udG9obCkKICAgI3VuZGVmIG50b2hsCiAgICN1bmRlZiBudG9ocwpAQCAtMjg0LDYgKzMxMCwzMiBAQAogICB9CiAjZW5kaWYKIAorLyoKKyAqIElmIHRoZSBPUyBkb2Vzbid0IGRlZmluZSBBRl9JTkVUNiBhbmQgc3RydWN0IGluNl9hZGRyOgorICoKKyAqIGRlZmluZSBBRl9JTkVUNiwgc28gd2UgY2FuIHVzZSBpdCBpbnRlcm5hbGx5IGFzIGEgInRoaXMgaXMgYW4KKyAqIElQdjYgYWRkcmVzcyIgaW5kaWNhdGlvbjsKKyAqCisgKiBkZWZpbmUgc3RydWN0IGluNl9hZGRyIHNvIHRoYXQgd2UgY2FuIHVzZSBpdCBmb3IgSVB2NiBhZGRyZXNzZXMuCisgKi8KKyNpZm5kZWYgSEFWRV9PU19JUFY2X1NVUFBPUlQKKyNpZm5kZWYgQUZfSU5FVDYKKyNkZWZpbmUgQUZfSU5FVDYJMjQKKworc3RydWN0IGluNl9hZGRyIHsKKwl1bmlvbiB7CisJCV9fdWludDhfdCAgIF9fdTZfYWRkcjhbMTZdOworCQlfX3VpbnQxNl90ICBfX3U2X2FkZHIxNls4XTsKKwkJX191aW50MzJfdCAgX191Nl9hZGRyMzJbNF07CisJfSBfX3U2X2FkZHI7CQkJLyogMTI4LWJpdCBJUDYgYWRkcmVzcyAqLworfTsKKyNlbmRpZgorI2VuZGlmCisKKyNpZm5kZWYgTklfTUFYSE9TVAorI2RlZmluZQlOSV9NQVhIT1NUCTEwMjUKKyNlbmRpZgorCiAjaWZuZGVmIElORVRfQUREUlNUUkxFTgogI2RlZmluZSBJTkVUX0FERFJTVFJMRU4gMTYKICNlbmRpZgpAQCAtMzQ5LDQgKzQwMSw0IEBACiAjZGVmaW5lIG1heChhLGIpICgoYik+KGEpPyhiKTooYSkpCiAjZW5kaWYKIAotI2VuZGlmIC8qIHRjcGR1bXBfc3RkaW5jX2ggKi8KKyNlbmRpZiAvKiBuZXRkaXNzZWN0X3N0ZGluY19oICovCmRpZmYgLS1naXQgYS9uZXRkaXNzZWN0LmMgYi9uZXRkaXNzZWN0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIxNWM4MwotLS0gL2Rldi9udWxsCisrKyBiL25ldGRpc3NlY3QuYwpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OC0xOTk3CisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDE5OTgtMjAxMiAgTWljaGFlbCBSaWNoYXJkc29uIDxtY3JAdGNwZHVtcC5vcmc+CisgKiAgICAgIFRoZSBUQ1BEVU1QIHByb2plY3QKKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucworICogcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQorICogZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKKyAqIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKKyAqIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorICogdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKyAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkaW8uaD4KKworI2lmZGVmIFVTRV9MSUJTTUkKKyNpbmNsdWRlIDxzbWkuaD4KKyNlbmRpZgorCisvKgorICogSW5pdGlhbGl6ZSBhbnl0aGluZyB0aGF0IG11c3QgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGRpc3NlY3RpbmcKKyAqIHBhY2tldHMuCisgKgorICogVGhpcyBzaG91bGQgYmUgY2FsbGVkIGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIHByb2dyYW07IGl0IGRvZXMKKyAqIG5vdCBuZWVkIHRvIGJlIGNhbGxlZCwgYW5kIHNob3VsZCBub3QgYmUgY2FsbGVkLCBmb3IgZXZlcnkKKyAqIG5ldGRpc3NlY3Rfb3B0aW9ucyBzdHJ1Y3R1cmUuCisgKi8KK2ludAorbmRfaW5pdChjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKK3sKKyNpZmRlZiBfV0lOMzIKKwlXT1JEIHdWZXJzaW9uUmVxdWVzdGVkOworCVdTQURBVEEgd3NhRGF0YTsKKwlpbnQgZXJyOworCisJLyoKKwkgKiBSZXF1ZXN0IFdpbnNvY2sgMi4yOyB3ZSBleHBlY3QgV2luc29jayAyLgorCSAqLworCXdWZXJzaW9uUmVxdWVzdGVkID0gTUFLRVdPUkQoMiwgMik7CisJZXJyID0gV1NBU3RhcnR1cCh3VmVyc2lvblJlcXVlc3RlZCwgJndzYURhdGEpOworCWlmIChlcnIgIT0gMCkgeworCQlzdHJsY3B5KGVycmJ1ZiwgIkF0dGVtcHRpbmcgdG8gaW5pdGlhbGl6ZSBXaW5zb2NrIGZhaWxlZCIsCisJCSAgICBlcnJidWZfc2l6ZSk7CisJCXJldHVybiAoLTEpOworCX0KKyNlbmRpZiAvKiBfV0lOMzIgKi8KKworI2lmZGVmIFVTRV9MSUJTTUkKKwkvKgorCSAqIFhYWCAtIHNob3VsZCB3ZSBqdXN0IGZhaWwgaWYgdGhpcyBmYWlscz8gIFNvbWUgb2YgdGhlCisJICogbGlic21pIGNhbGxzIG1heSBmYWlsLgorCSAqLworCXNtaUluaXQoInRjcGR1bXAiKTsKKyNlbmRpZgorCisJLyoKKwkgKiBDbGVhcnMgdGhlIGVycm9yIGJ1ZmZlciwgYW5kIHVzZXMgaXQgc28gd2UgZG9uJ3QgZ2V0CisJICogInVudXNlZCBhcmd1bWVudCIgd2FybmluZ3MgYXQgY29tcGlsZSB0aW1lLgorCSAqLworCXN0cmxjcHkoZXJyYnVmLCAiIiwgZXJyYnVmX3NpemUpOworCXJldHVybiAoMCk7Cit9CisKKy8qCisgKiBDbGVhbiB1cCBhbnl0aGluZyB0aGF0IG5kb19pbml0KCkgZGlkLgorICovCit2b2lkCituZF9jbGVhbnVwKHZvaWQpCit7CisjaWZkZWYgVVNFX0xJQlNNSQorCS8qCisJICogVGhpcyBhcHBlYXJzLCBpbiBsaWJzbWkgMC40LjgsIHRvIGRvIG5vdGhpbmcgaWYgc21pSW5pdCgpCisJICogd2Fzbid0IGRvbmUgb3IgZmFpbGVkLCBzbyB3ZSBjYWxsIGl0IHVuY29uZGl0aW9uYWxseS4KKwkgKi8KKwlzbWlFeGl0KCk7CisjZW5kaWYKKworI2lmZGVmIF9XSU4zMgorCS8qCisJICogVW5kbyB0aGUgV1NBU3RhcnR1cCgpIGNhbGwgYWJvdmUuCisJICovCisJV1NBQ2xlYW51cCgpOworI2VuZGlmCit9CisKK2ludAorbmRfaGF2ZV9zbWlfc3VwcG9ydCh2b2lkKQoreworI2lmZGVmIFVTRV9MSUJTTUkKKwlyZXR1cm4gKDEpOworI2Vsc2UKKwlyZXR1cm4gKDApOworI2VuZGlmCit9CisKKy8qCisgKiBJbmRpY2F0ZXMgd2hldGhlciBhbiBTTUkgbW9kdWxlIGhhcyBiZWVuIGxvYWRlZCwgc28gdGhhdCB3ZSBjYW4gdXNlCisgKiBsaWJzbWkgdG8gdHJhbnNsYXRlIE9JRHMuCisgKi8KK2ludCBuZF9zbWlfbW9kdWxlX2xvYWRlZDsKKworaW50CituZF9sb2FkX3NtaV9tb2R1bGUoY29uc3QgY2hhciAqbW9kdWxlLCBjaGFyICplcnJidWYsIHNpemVfdCBlcnJidWZfc2l6ZSkKK3sKKyNpZmRlZiBVU0VfTElCU01JCisJaWYgKHNtaUxvYWRNb2R1bGUobW9kdWxlKSA9PSAwKSB7CisJCXNucHJpbnRmKGVycmJ1ZiwgZXJyYnVmX3NpemUsICJjb3VsZCBub3QgbG9hZCBNSUIgbW9kdWxlICVzIiwKKwkJICAgIG1vZHVsZSk7CisJCXJldHVybiAoLTEpOworCX0KKwluZF9zbWlfbW9kdWxlX2xvYWRlZCA9IDE7CisJcmV0dXJuICgwKTsKKyNlbHNlCisJc25wcmludGYoZXJyYnVmLCBlcnJidWZfc2l6ZSwgIk1JQiBtb2R1bGUgJXMgbm90IGxvYWRlZDogbm8gbGlic21pIHN1cHBvcnQiLAorCSAgICBtb2R1bGUpOworCXJldHVybiAoLTEpOworI2VuZGlmCit9CisKK2NvbnN0IGNoYXIgKgorbmRfc21pX3ZlcnNpb25fc3RyaW5nKHZvaWQpCit7CisjaWZkZWYgVVNFX0xJQlNNSQorCXJldHVybiAoc21pX3ZlcnNpb25fc3RyaW5nKTsKKyNlbHNlCisJcmV0dXJuIChOVUxMKTsKKyNlbmRpZgorfQpkaWZmIC0tZ2l0IGEvbmV0ZGlzc2VjdC5oIGIvbmV0ZGlzc2VjdC5oCmluZGV4IGQ1MDdmNTguLmFjOTE2YzIgMTAwNjQ0Ci0tLSBhL25ldGRpc3NlY3QuaAorKysgYi9uZXRkaXNzZWN0LmgKQEAgLTM0LDExICszNCw1MiBAQAogI2RlZmluZSBfX2F0dHJpYnV0ZV9fKHgpCiAjZW5kaWYKIAorLyoKKyAqIERhdGEgdHlwZXMgY29ycmVzcG9uZGluZyB0byBtdWx0aS1ieXRlIGludGVncmFsIHZhbHVlcyB3aXRoaW4gZGF0YQorICogc3RydWN0dXJlcy4gIFRoZXNlIGFyZSBkZWZpbmVkIGFzIGFycmF5cyBvZiBvY3RldHMsIHNvIHRoYXQgdGhleSdyZQorICogbm90IGFsaWduZWQgb24gdGhlaXIgIm5hdHVyYWwiIGJvdW5kYXJpZXMsIGFuZCBzbyB0aGF0IHlvdSAqbXVzdCoKKyAqIHVzZSB0aGUgRVhUUkFDVF8gbWFjcm9zIHRvIGV4dHJhY3QgdGhlbSAod2hpY2ggeW91IHNob3VsZCBiZSBkb2luZworICogKmFueXdheSosIHNvIGFzIG5vdCB0byBhc3N1bWUgYSBwYXJ0aWN1bGFyIGJ5dGUgb3JkZXIgb3IgYWxpZ25tZW50CisgKiBpbiB5b3VyIGNvZGUpLgorICovCit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDE2X3RbMl07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDI0X3RbM107Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDMyX3RbNF07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDQwX3RbNV07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDQ4X3RbNl07Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDU2X3RbN107Cit0eXBlZGVmIHVuc2lnbmVkIGNoYXIgbmRfdWludDY0X3RbOF07CisKKy8qCisgKiBVc2UgdGhpcyBmb3IgSVB2NCBhZGRyZXNzZXMuICBJdCdzIGRlZmluZWQgYXMgYW4gYXJyYXkgb2Ygb2N0ZXRzLCBzbworICogdGhhdCBpdCdzIG5vdCBhbGlnbmVkIG9uIGl0cyAibmF0dXJhbCIgYm91bmRhcnksIGFuZCBpdCdzIGRlZmluZWQgYXMKKyAqIGEgc3RydWN0dXJlIGluIHRoZSBob3BlcyB0aGF0IHRoaXMgbWFrZXMgaXQgaGFyZGVyIHRvIG5haXZlbHkgdXNlCisgKiBFWFRSQUNUXzMyQklUUygpIHRvIGV4dHJhY3QgdGhlIHZhbHVlIC0gaW4gbWFueSBjYXNlcyB5b3UganVzdCB3YW50CisgKiB0byB1c2UgVU5BTElHTkVEX01FTUNQWSgpIHRvIGNvcHkgaXRzIHZhbHVlLCBzbyB0aGF0IGl0IHJlbWFpbnMgaW4KKyAqIG5ldHdvcmsgYnl0ZSBvcmRlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgeworCXVuc2lnbmVkIGNoYXIgYnl0ZXNbNF07Cit9IG5kX2lwdjQ7CisKKy8qCisgKiBEYXRhIHR5cGVzIGNvcnJlc3BvbmRpbmcgdG8gc2luZ2xlLWJ5dGUgaW50ZWdyYWwgdmFsdWVzLCBmb3IKKyAqIGNvbXBsZXRlbmVzcy4KKyAqLwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIG5kX3VpbnQ4X3Q7Cit0eXBlZGVmIHNpZ25lZCBjaGFyIG5kX2ludDhfdDsKKwogLyogc25wcmludGYgZXQgYWwgKi8KIAogI2luY2x1ZGUgPHN0ZGFyZy5oPgorI2luY2x1ZGUgPHBjYXAuaD4KIAogI2luY2x1ZGUgImlwLmgiIC8qIHN0cnVjdCBpcCBmb3IgbmV4dHByb3RvNF9ja3N1bSgpICovCisjaW5jbHVkZSAiaXA2LmgiIC8qIHN0cnVjdCBpcDYgZm9yIG5leHRwcm90bzZfY2tzdW0oKSAqLworCitleHRlcm4gaW50MzJfdCB0aGlzem9uZTsJLyogc2Vjb25kcyBvZmZzZXQgZnJvbSBnbXQgdG8gbG9jYWwgdGltZSAqLworLyogaW52YWxpZCBzdHJpbmcgdG8gcHJpbnQgJyhpbnZhbGlkKScgZm9yIG1hbGZvcm1lZCBvciBjb3JydXB0ZWQgcGFja2V0cyAqLworZXh0ZXJuIGNvbnN0IGNoYXIgaXN0cltdOwogCiAjaWYgIWRlZmluZWQoSEFWRV9TTlBSSU5URikKIGludCBzbnByaW50ZiAoY2hhciAqc3RyLCBzaXplX3Qgc3osIGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQpAQCAtNTQsNyArOTUsNyBAQAogICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMywgMCkpKQogI2VuZGlmIC8qIF9fQVRUUklCVVRFX19fRk9STUFUX09LICovCiAgICAgIDsKLSNlbmRpZiAvKiAhZGVmaW5lZChIQVZFX1NOUFJJTlRGKSAqLworI2VuZGlmIC8qICFkZWZpbmVkKEhBVkVfVlNOUFJJTlRGKSAqLwogCiAjaWZuZGVmIEhBVkVfU1RSTENBVAogZXh0ZXJuIHNpemVfdCBzdHJsY2F0IChjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKQEAgLTc2LDcgKzExNyw2IEBACiAJY29uc3QgY2hhciAqczsJCS8qIHN0cmluZyAqLwogfTsKIAotI2RlZmluZSBUT0tCVUZTSVpFIDEyOAogZXh0ZXJuIGNvbnN0IGNoYXIgKnRvazJzdHJidWYoY29uc3Qgc3RydWN0IHRvayAqLCBjb25zdCBjaGFyICosIHVfaW50LAogCQkJICAgICAgY2hhciAqYnVmLCBzaXplX3QgYnVmc2l6ZSk7CiAKQEAgLTg1LDExICsxMjUsMjcgQEAKIGV4dGVybiBjaGFyICpiaXR0b2syc3RyKGNvbnN0IHN0cnVjdCB0b2sgKiwgY29uc3QgY2hhciAqLCB1X2ludCk7CiBleHRlcm4gY2hhciAqYml0dG9rMnN0cl9ub3NlcChjb25zdCBzdHJ1Y3QgdG9rICosIGNvbnN0IGNoYXIgKiwgdV9pbnQpOwogCisvKiBJbml0aWFsaXplIG5ldGRpc3NlY3QuICovCitleHRlcm4gaW50IG5kX2luaXQoY2hhciAqLCBzaXplX3QpOworLyogQ2xlYW4gdXAgbmV0ZGlzc2VjdC4gKi8KK2V4dGVybiB2b2lkIG5kX2NsZWFudXAodm9pZCk7CisKKy8qIERvIHdlIGhhdmUgbGlic21pIHN1cHBvcnQ/ICovCitleHRlcm4gaW50IG5kX2hhdmVfc21pX3N1cHBvcnQodm9pZCk7CisvKiBMb2FkIGFuIFNNSSBtb2R1bGUuICovCitleHRlcm4gaW50IG5kX2xvYWRfc21pX21vZHVsZShjb25zdCBjaGFyICosIGNoYXIgKiwgc2l6ZV90KTsKKy8qIEZsYWcgaW5kaWNhdGluZyB3aGV0aGVyIGFuIFNNSSBtb2R1bGUgaGFzIGJlZW4gbG9hZGVkLiAqLworZXh0ZXJuIGludCBuZF9zbWlfbW9kdWxlX2xvYWRlZDsKKy8qIFZlcnNpb24gbnVtYmVyIG9mIHRoZSBTTUkgbGlicmFyeSwgb3IgTlVMTCBpZiB3ZSBkb24ndCBoYXZlIGxpYnNtaSBzdXBwb3J0LiAqLworZXh0ZXJuIGNvbnN0IGNoYXIgKm5kX3NtaV92ZXJzaW9uX3N0cmluZyh2b2lkKTsKIAogdHlwZWRlZiBzdHJ1Y3QgbmV0ZGlzc2VjdF9vcHRpb25zIG5ldGRpc3NlY3Rfb3B0aW9uczsKIAorI2RlZmluZSBJRl9QUklOVEVSX0FSR1MgKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopCisKK3R5cGVkZWYgdV9pbnQgKCppZl9wcmludGVyKSBJRl9QUklOVEVSX0FSR1M7CisKIHN0cnVjdCBuZXRkaXNzZWN0X29wdGlvbnMgewotICBpbnQgbmRvX2FmbGFnOwkJLyogdHJhbnNsYXRlIG5ldHdvcmsgYW5kIGJyb2FkY2FzdCBhZGRyZXNzZXMgKi8KICAgaW50IG5kb19iZmxhZzsJCS8qIHByaW50IDQgYnl0ZSBBU2VzIGluIEFTRE9UIG5vdGF0aW9uICovCiAgIGludCBuZG9fZWZsYWc7CQkvKiBwcmludCBldGhlcm5ldCBoZWFkZXIgKi8KICAgaW50IG5kb19mZmxhZzsJCS8qIGRvbid0IHRyYW5zbGF0ZSAiZm9yZWlnbiIgSVAgYWRkcmVzcyAqLwpAQCAtOTcsNjkgKzE1Myw0MSBAQAogICBpbnQgbmRvX25mbGFnOwkJLyogbGVhdmUgYWRkcmVzc2VzIGFzIG51bWJlcnMgKi8KICAgaW50IG5kb19OZmxhZzsJCS8qIHJlbW92ZSBkb21haW5zIGZyb20gcHJpbnRlZCBob3N0IG5hbWVzICovCiAgIGludCBuZG9fcWZsYWc7CQkvKiBxdWljayAoc2hvcnRlcikgb3V0cHV0ICovCi0gIGludCBuZG9fUmZsYWc7CQkvKiBwcmludCBzZXF1ZW5jZSAjIGZpZWxkIGluIEFIL0VTUCovCi0gIGludCBuZG9fc2ZsYWc7CQkvKiB1c2UgdGhlIGxpYnNtaSB0byB0cmFuc2xhdGUgT0lEcyAqLwogICBpbnQgbmRvX1NmbGFnOwkJLyogcHJpbnQgcmF3IFRDUCBzZXF1ZW5jZSBudW1iZXJzICovCiAgIGludCBuZG9fdGZsYWc7CQkvKiBwcmludCBwYWNrZXQgYXJyaXZhbCB0aW1lICovCi0gIGludCBuZG9fVWZsYWc7CQkvKiAidW5idWZmZXJlZCIgb3V0cHV0IG9mIGR1bXAgZmlsZXMgKi8KICAgaW50IG5kb191ZmxhZzsJCS8qIFByaW50IHVuZGVjb2RlZCBORlMgaGFuZGxlcyAqLwotICBpbnQgbmRvX3ZmbGFnOwkJLyogdmVyYm9zZSAqLworICBpbnQgbmRvX3ZmbGFnOwkJLyogdmVyYm9zaXR5IGxldmVsICovCiAgIGludCBuZG9feGZsYWc7CQkvKiBwcmludCBwYWNrZXQgaW4gaGV4ICovCiAgIGludCBuZG9fWGZsYWc7CQkvKiBwcmludCBwYWNrZXQgaW4gaGV4L2FzY2lpICovCiAgIGludCBuZG9fQWZsYWc7CQkvKiBwcmludCBwYWNrZXQgb25seSBpbiBhc2NpaSBvYnNlcnZpbmcgVEFCLAogCQkJCSAqIExGLCBDUiBhbmQgU1BBQ0UgYXMgZ3JhcGhpY2FsIGNoYXJzCiAJCQkJICovCi0gIGludCBuZG9fQmZsYWc7CQkvKiBidWZmZXIgc2l6ZSAqLwotICBpbnQgbmRvX0lmbGFnOwkJLyogcmZtb24gKG1vbml0b3IpIG1vZGUgKi8KLSAgaW50IG5kb19PZmxhZzsgICAgICAgICAgICAgICAgLyogcnVuIGZpbHRlciBjb2RlIG9wdGltaXplciAqLwotICBpbnQgbmRvX2RsdDsgICAgICAgICAgICAgICAgICAvKiBpZiAhPSAtMSwgYXNrIGxpYnBjYXAgZm9yIHRoZSBETFQgaXQgbmFtZXMqLwotICBpbnQgbmRvX2pmbGFnOyAgICAgICAgICAgICAgICAvKiBwYWNrZXQgdGltZSBzdGFtcCBzb3VyY2UgKi8KLSAgaW50IG5kb19wZmxhZzsgICAgICAgICAgICAgICAgLyogZG9uJ3QgZ28gcHJvbWlzY3VvdXMgKi8KLSAgaW50IG5kb19pbW1lZGlhdGU7ICAgICAgICAgICAgLyogdXNlIGltbWVkaWF0ZSBtb2RlICovCi0KLSAgaW50IG5kb19DZmxhZzsgICAgICAgICAgICAgICAgLyogcm90YXRlIGR1bXAgZmlsZXMgYWZ0ZXIgdGhpcyBtYW55IGJ5dGVzICovCi0gIGludCBuZG9fQ2ZsYWdfY291bnQ7ICAgICAgLyogS2VlcCB0cmFjayBvZiB3aGljaCBmaWxlIG51bWJlciB3ZSdyZSB3cml0aW5nICovCi0gIGludCBuZG9fR2ZsYWc7ICAgICAgICAgICAgLyogcm90YXRlIGR1bXAgZmlsZXMgYWZ0ZXIgdGhpcyBtYW55IHNlY29uZHMgKi8KLSAgaW50IG5kb19HZmxhZ19jb3VudDsgICAgICAvKiBudW1iZXIgb2YgZmlsZXMgY3JlYXRlZCB3aXRoIEdmbGFnIHJvdGF0aW9uICovCi0gIHRpbWVfdCBuZG9fR2ZsYWdfdGltZTsgICAgLyogVGhlIGxhc3QgdGltZV90IHRoZSBkdW1wIGZpbGUgd2FzIHJvdGF0ZWQuICovCi0gIGludCBuZG9fV2ZsYWc7ICAgICAgICAgIC8qIHJlY3ljbGUgb3V0cHV0IGZpbGVzIGFmdGVyIHRoaXMgbnVtYmVyIG9mIGZpbGVzICovCi0gIGludCBuZG9fV2ZsYWdDaGFyczsKICAgaW50IG5kb19IZmxhZzsJCS8qIGRpc3NlY3QgODAyLjExcyBkcmFmdCBtZXNoIHN0YW5kYXJkICovCiAgIGludCBuZG9fcGFja2V0X251bWJlcjsJLyogcHJpbnQgYSBwYWNrZXQgbnVtYmVyIGluIHRoZSBiZWdpbm5pbmcgb2YgbGluZSAqLwogICBpbnQgbmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQ7IC8qIGRvbid0IHVzZSBkZWZhdWx0X3ByaW50KCkgZm9yIHVua25vd24gcGFja2V0IHR5cGVzICovCi0gIGludCBuZG9fdHN0YW1wX3ByZWNpc2lvbjsgICAvKiByZXF1ZXN0ZWQgdGltZSBzdGFtcCBwcmVjaXNpb24gKi8KLSAgY29uc3QgY2hhciAqbmRvX2RsdG5hbWU7CisgIGludCBuZG9fdHN0YW1wX3ByZWNpc2lvbjsJLyogcmVxdWVzdGVkIHRpbWUgc3RhbXAgcHJlY2lzaW9uICovCisgIGNvbnN0IGNoYXIgKnByb2dyYW1fbmFtZTsJLyogTmFtZSBvZiB0aGUgcHJvZ3JhbSB1c2luZyB0aGUgbGlicmFyeSAqLwogCiAgIGNoYXIgKm5kb19lc3BzZWNyZXQ7CiAgIHN0cnVjdCBzYV9saXN0ICpuZG9fc2FfbGlzdF9oZWFkOyAgLyogdXNlZCBieSBwcmludC1lc3AuYyAqLwogICBzdHJ1Y3Qgc2FfbGlzdCAqbmRvX3NhX2RlZmF1bHQ7CiAKLSAgY2hhciAqbmRvX3NpZ3NlY3JldDsgICAgIAkvKiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHNlY3JldCBrZXkgKi8KLQotICBzdHJ1Y3QgZXNwX2FsZ29yaXRobSAqbmRvX2VzcHNlY3JldF94Zm9ybTsgICAvKiBjYWNoZSBvZiBkZWNvZGVkICAqLwotICBjaGFyICAgICAgICAgICAgICAgICAqbmRvX2VzcHNlY3JldF9rZXk7CisgIGNoYXIgKm5kb19zaWdzZWNyZXQ7CQkvKiBTaWduYXR1cmUgdmVyaWZpY2F0aW9uIHNlY3JldCBrZXkgKi8KIAogICBpbnQgICBuZG9fcGFja2V0dHlwZTsJLyogYXMgc3BlY2lmaWVkIGJ5IC1UICovCiAKLSAgY2hhciAqbmRvX3Byb2dyYW1fbmFtZTsJLyp1c2VkIHRvIGdlbmVyYXRlIHNlbGYtaWRlbnRpZnlpbmcgbWVzc2FnZXMgKi8KLQotICBpbnQzMl90IG5kb190aGlzem9uZTsJLyogc2Vjb25kcyBvZmZzZXQgZnJvbSBnbXQgdG8gbG9jYWwgdGltZSAqLwotCiAgIGludCAgIG5kb19zbmFwbGVuOwogCiAgIC8qZ2xvYmFsIHBvaW50ZXJzIHRvIGJlZ2lubmluZyBhbmQgZW5kIG9mIGN1cnJlbnQgcGFja2V0IChkdXJpbmcgcHJpbnRpbmcpICovCiAgIGNvbnN0IHVfY2hhciAqbmRvX3BhY2tldHA7CiAgIGNvbnN0IHVfY2hhciAqbmRvX3NuYXBlbmQ7CiAKLSAgLyogYm9va2tlZXBpbmcgZm9yIF5UIG91dHB1dCAqLwotICBpbnQgbmRvX2luZm9kZWxheTsKKyAgLyogcG9pbnRlciB0byB0aGUgaWZfcHJpbnRlciBmdW5jdGlvbiAqLworICBpZl9wcmludGVyIG5kb19pZl9wcmludGVyOwogCiAgIC8qIHBvaW50ZXIgdG8gdm9pZCBmdW5jdGlvbiB0byBvdXRwdXQgc3R1ZmYgKi8KICAgdm9pZCAoKm5kb19kZWZhdWx0X3ByaW50KShuZXRkaXNzZWN0X29wdGlvbnMgKiwKLSAgCQkgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCByZWdpc3RlciB1X2ludCBsZW5ndGgpOwotCi0gIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gcHJpbnQgXlQgb3V0cHV0ICovCi0gIHZvaWQgKCpuZG9faW5mbykobmV0ZGlzc2VjdF9vcHRpb25zICosIGludCB2ZXJib3NlKTsKKwkJCSAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCByZWdpc3RlciB1X2ludCBsZW5ndGgpOwogCiAgIC8qIHBvaW50ZXIgdG8gZnVuY3Rpb24gdG8gZG8gcmVndWxhciBvdXRwdXQgKi8KICAgaW50ICAoKm5kb19wcmludGYpKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLApAQCAtMjAzLDYgKzIzMSw3IEBACiAjZGVmaW5lIFBUX1BHTQkJMTQJLyogW1VEUC1lbmNhcHN1bGF0ZWRdIFByYWdtYXRpYyBHZW5lcmFsIE11bHRpY2FzdCAqLwogI2RlZmluZSBQVF9QR01fWk1UUDEJMTUJLyogWk1UUC8xLjAgaW5zaWRlIFBHTSAobmF0aXZlIG9yIFVEUC1lbmNhcHN1bGF0ZWQpICovCiAjZGVmaW5lIFBUX0xNUAkJMTYJLyogTGluayBNYW5hZ2VtZW50IFByb3RvY29sICovCisjZGVmaW5lIFBUX1JFU1AJCTE3CS8qIFJFU1AgKi8KIAogI2lmbmRlZiBtaW4KICNkZWZpbmUgbWluKGEsYikgKChhKT4oYik/KGIpOihhKSkKQEAgLTIxMSw2ICsyNDAsOSBAQAogI2RlZmluZSBtYXgoYSxiKSAoKGIpPihhKT8oYik6KGEpKQogI2VuZGlmCiAKKy8qIEZvciBzb3VyY2Ugb3IgZGVzdGluYXRpb24gcG9ydHMgdGVzdHMgKFVEUCwgVENQLCAuLi4pICovCisjZGVmaW5lIElTX1NSQ19PUl9EU1RfUE9SVChwKSAoc3BvcnQgPT0gKHApIHx8IGRwb3J0ID09IChwKSkKKwogLyoKICAqIE1heGltdW0gc25hcHNob3QgbGVuZ3RoLiAgVGhpcyBzaG91bGQgYmUgZW5vdWdoIHRvIGNhcHR1cmUgdGhlIGZ1bGwKICAqIHBhY2tldCBvbiBtb3N0IG5ldHdvcmsgaW50ZXJmYWNlcy4KQEAgLTI3MCw4ICszMDIsMTYgQEAKICAqCiAgKglodHRwOi8vd3d3LmtiLmNlcnQub3JnL3Z1bHMvaWQvMTYyMjg5CiAgKi8KKworLyoKKyAqIFRlc3QgaW4gdHdvIHBhcnRzIHRvIGF2b2lkIHRoZXNlIHdhcm5pbmdzOgorICogY29tcGFyaXNvbiBvZiB1bnNpZ25lZCBleHByZXNzaW9uID49IDAgaXMgYWx3YXlzIHRydWUgWy1XdHlwZS1saW1pdHNdLAorICogY29tcGFyaXNvbiBpcyBhbHdheXMgdHJ1ZSBkdWUgdG8gbGltaXRlZCByYW5nZSBvZiBkYXRhIHR5cGUgWy1XdHlwZS1saW1pdHNdLgorICovCisjZGVmaW5lIElTX05PVF9ORUdBVElWRSh4KSAoKCh4KSA+IDApIHx8ICgoeCkgPT0gMCkpCisKICNkZWZpbmUgTkRfVFRFU1QyKHZhciwgbCkgXAotICAoKGwpID49IDAgJiYgXAorICAoSVNfTk9UX05FR0FUSVZFKGwpICYmIFwKIAkoKHVpbnRwdHJfdCluZG8tPm5kb19zbmFwZW5kIC0gKGwpIDw9ICh1aW50cHRyX3QpbmRvLT5uZG9fc25hcGVuZCAmJiBcCiAgICAgICAgICAodWludHB0cl90KSYodmFyKSA8PSAodWludHB0cl90KW5kby0+bmRvX3NuYXBlbmQgLSAobCkpKQogCkBAIC0yODgsOSArMzI4LDEyIEBACiAjZGVmaW5lIE5EX0RFRkFVTFRQUklOVChhcCwgbGVuZ3RoKSAoKm5kby0+bmRvX2RlZmF1bHRfcHJpbnQpKG5kbywgYXAsIGxlbmd0aCkKIAogZXh0ZXJuIHZvaWQgdHNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCB0aW1ldmFsICopOwotZXh0ZXJuIHZvaWQgcmVsdHNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGludCk7CitleHRlcm4gdm9pZCBzaWduZWRfcmVsdHNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGludDMyX3QpOworZXh0ZXJuIHZvaWQgdW5zaWduZWRfcmVsdHNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHVpbnQzMl90KTsKIAorZXh0ZXJuIHZvaWQgZm5fcHJpbnRfY2hhcihuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9jaGFyKTsKIGV4dGVybiBpbnQgZm5fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdV9pbnQgZm5fcHJpbnR6dG4obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICopOwogZXh0ZXJuIGludCBmbl9wcmludG4obmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICopOwogZXh0ZXJuIGludCBmbl9wcmludHpwKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKIApAQCAtMzAyLDExICszNDUsNiBAQAogZXh0ZXJuIHZvaWQgdHh0cHJvdG9fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwKICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiosIHVfaW50KTsKIAotI2lmIDAKLWV4dGVybiBjaGFyICpyZWFkX2luZmlsZShuZXRkaXNzZWN0X29wdGlvbnMgKiwgY2hhciAqKTsKLWV4dGVybiBjaGFyICpjb3B5X2FyZ3YobmV0ZGlzc2VjdF9vcHRpb25zICosIGNoYXIgKiopOwotI2VuZGlmCi0KIC8qCiAgKiBMb2NhbGUtaW5kZXBlbmRlbnQgbWFjcm9zIGZvciB0ZXN0aW5nIGNoYXJhY3RlciBwcm9wZXJ0aWVzIGFuZAogICogc3RyaXBwaW5nIHRoZSA4dGggYml0IGZyb20gY2hhcmFjdGVycy4gIEFzc3VtZWQgdG8gYmUgaGFuZGVkCkBAIC0zNDksMjg0ICszODcsMjc3IEBACiAjZGVmaW5lIFBMVVJBTF9TVUZGSVgobikgXAogCSgoKG4pICE9IDEpID8gInMiIDogIiIpCiAKLSNpZiAwCi1leHRlcm4gY29uc3QgY2hhciAqZG5uYW1lX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9zaG9ydCk7Ci1leHRlcm4gY29uc3QgY2hhciAqZG5udW1fc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X3Nob3J0KTsKLSNlbmRpZgorZXh0ZXJuIGNvbnN0IGNoYXIgKnRvazJzdHJhcnlfaW50ZXJuYWwoY29uc3QgY2hhciAqKiwgaW50LCBjb25zdCBjaGFyICosIGludCk7CisjZGVmaW5lCXRvazJzdHJhcnkoYSxmLGkpIHRvazJzdHJhcnlfaW50ZXJuYWwoYSwgc2l6ZW9mKGEpL3NpemVvZihhWzBdKSxmLGkpCisKK2V4dGVybiBpZl9wcmludGVyIGxvb2t1cF9wcmludGVyKGludCk7CisKKy8qIFRoZSBETFQgcHJpbnRlciByb3V0aW5lcyAqLworCitleHRlcm4gdV9pbnQgYXAxMzk0X2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBhcmNuZXRfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGFyY25ldF9saW51eF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgYXRtX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBidF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgY2hkbGNfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGNpcF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgZW5jX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBldGhlcl9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgZmRkaV9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgZnJfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGllZWU4MDJfMTFfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGllZWU4MDJfMTFfcmFkaW9fYXZzX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBpZWVlODAyXzExX3JhZGlvX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBpZWVlODAyXzE1XzRfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGlwZmNfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGlwbmV0X2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBqdW5pcGVyX2F0bTFfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGp1bmlwZXJfYXRtMl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9jaGRsY19wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9lc19wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9ldGhlcl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9mcmVsYXlfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGp1bmlwZXJfZ2dzbl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9tZnJfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGp1bmlwZXJfbWxmcl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9tbHBwcF9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9tb25pdG9yX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBqdW5pcGVyX3BwcF9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQganVuaXBlcl9wcHBvZV9hdG1fcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGp1bmlwZXJfcHBwb2VfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGp1bmlwZXJfc2VydmljZXNfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGxhbmVfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IGx0YWxrX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBtZnJfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IG5ldGFuYWx5emVyX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBuZXRhbmFseXplcl90cmFuc3BhcmVudF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgbmZsb2dfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IG51bGxfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IHBmbG9nX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBwa3RhcF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgcHBpX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBwcHBfYnNkb3NfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IHBwcF9oZGxjX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBwcHBfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IHBwcG9lX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBwcmlzbV9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgcmF3X2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBzbF9ic2Rvc19pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgc2xfaWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IHNsbF9pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgc3VuYXRtX2lmX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCBzeW1hbnRlY19pZl9wcmludCBJRl9QUklOVEVSX0FSR1M7CitleHRlcm4gdV9pbnQgdG9rZW5faWZfcHJpbnQgSUZfUFJJTlRFUl9BUkdTOworZXh0ZXJuIHVfaW50IHVzYl9saW51eF80OF9ieXRlX3ByaW50IElGX1BSSU5URVJfQVJHUzsKK2V4dGVybiB1X2ludCB1c2JfbGludXhfNjRfYnl0ZV9wcmludCBJRl9QUklOVEVSX0FSR1M7CisKKy8qCisgKiBTdHJ1Y3R1cmUgcGFzc2VkIHRvIHNvbWUgcHJpbnRlcnMgdG8gYWxsb3cgdGhlbSB0byBwcmludAorICogbGluay1sYXllciBhZGRyZXNzIGluZm9ybWF0aW9uIGlmIG5kb19lZmxhZyBpc24ndCBzZXQKKyAqIChiZWNhdXNlIHRoZXkgYXJlIGZvciBwcm90b2NvbHMgdGhhdCBkb24ndCBoYXZlIHRoZWlyCisgKiBvd24gYWRkcmVzc2VzLCBzbyB0aGF0IHdlJ2Qgd2FudCB0byByZXBvcnQgbGluay1sYXllcgorICogYWRkcmVzcyBpbmZvcm1hdGlvbikuCisgKgorICogVGhpcyBjb250YWlucyBhIHBvaW50ZXIgdG8gYW4gYWRkcmVzcyBhbmQgYSBwb2ludGVyIHRvIGEgcm91dGluZQorICogdG8gd2hpY2ggd2UgcGFzcyB0aGF0IHBvaW50ZXIgaW4gb3JkZXIgdG8gZ2V0IGEgc3RyaW5nLgorICovCitzdHJ1Y3QgbGxhZGRyX2luZm8geworCWNvbnN0IGNoYXIgKigqYWRkcl9zdHJpbmcpKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7CisJY29uc3QgdV9jaGFyICphZGRyOworfTsKIAogLyogVGhlIHByaW50ZXIgcm91dGluZXMuICovCiAKLSNpbmNsdWRlIDxwY2FwLmg+Ci0KLWV4dGVybiBjaGFyICpxOTIyX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLQotdHlwZWRlZiB1X2ludCAoKmlmX25kb19wcmludGVyKShzdHJ1Y3QgbmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0JCQkJY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLXR5cGVkZWYgdV9pbnQgKCppZl9wcmludGVyKShjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotCi1leHRlcm4gaWZfbmRvX3ByaW50ZXIgbG9va3VwX25kb19wcmludGVyKGludCk7Ci1leHRlcm4gaWZfcHJpbnRlciBsb29rdXBfcHJpbnRlcihpbnQpOwotCi1leHRlcm4gdm9pZCBlYXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiBpbnQgZXNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLAotCQkgICAgIGNvbnN0IHVfY2hhciAqYnAsIGNvbnN0IGludCBsZW5ndGgsIGNvbnN0IHVfY2hhciAqYnAyLAotCQkgICAgIGludCAqbmhkciwgaW50ICpwYWRsZW4pOwotZXh0ZXJuIHZvaWQgYXJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgdGlwY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7Ci1leHRlcm4gdm9pZCBtc25sYl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgaWNtcDZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqLAotICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgaXNha21wX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHVfY2hhciAqLAotCQkJIHVfaW50LCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBpc2FrbXBfcmZjMzk0OF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCB1X2NoYXIgKiwKLQkJCQkgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGlwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBpcF9wcmludF9pbm5lcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLQkJCSAgIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbmd0aCwgdV9pbnQgbmgsCi0JCQkgICBjb25zdCB1X2NoYXIgKmJwMik7Ci1leHRlcm4gdm9pZCBycmNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBsb29wYmFja19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfaW50KTsKLWV4dGVybiB2b2lkIGNhcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgaW50KTsKLQotZXh0ZXJuIHZvaWQgZXRoZXJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosCi0gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50LAotICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqKTsKLQotZXh0ZXJuIHVfaW50IGV0aGVyX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBuZXRhbmFseXplcl9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKixjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgbmV0YW5hbHl6ZXJfdHJhbnNwYXJlbnRfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICopOwotCi1leHRlcm4gaW50IGV0aGVydHlwZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKix1X3Nob3J0LCBjb25zdCB1X2NoYXIgKiwKLQkJCSAgICAgdV9pbnQsIHVfaW50KTsKLQotZXh0ZXJuIGludCBwcmludF91bmtub3duX2RhdGEobmV0ZGlzc2VjdF9vcHRpb25zICosY29uc3QgdV9jaGFyICosIGNvbnN0IGNoYXIgKixpbnQpOwotZXh0ZXJuIHZvaWQgYXNjaWlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBoZXhfcHJpbnRfd2l0aF9vZmZzZXQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IGNoYXIgKmlkZW50LCBjb25zdCB1X2NoYXIgKmNwLAotCQkJCSAgdV9pbnQsIHVfaW50KTsKLWV4dGVybiB2b2lkIGhleF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCBjaGFyICppZGVudCwgY29uc3QgdV9jaGFyICpjcCx1X2ludCk7Ci1leHRlcm4gdm9pZCBoZXhfYW5kX2FzY2lpX3ByaW50X3dpdGhfb2Zmc2V0KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBjaGFyICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgaGV4X2FuZF9hc2NpaV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotCitleHRlcm4gdm9pZCBhYXJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwogZXh0ZXJuIGludCBhaF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgYmVlcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGR0cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBjaXBfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gaW50IGlwY29tcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIGludCAqKTsKLWV4dGVybiB1X2ludCBpcGZjX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgdWRsZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGhzcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBpZ3JwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgbXNkcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBudWxsX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgbW9iaWxlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IGFwMTM5NF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBidF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGxhbmVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IGxhbmVfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBvdHZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CiBleHRlcm4gdm9pZCBhaGNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOwotZXh0ZXJuIHZvaWQgdnhsYW5fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdV9pbnQgYXJjbmV0X2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGFyY25ldF9saW51eF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGJmZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7Ci1leHRlcm4gdm9pZCBncmVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gaW50IHZqY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgY2hhciAqLCB1X3Nob3J0KTsKLWV4dGVybiB2b2lkIGlwTl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCByYXdfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgdXNiX2xpbnV4XzQ4X2J5dGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgdXNiX2xpbnV4XzY0X2J5dGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgc3ltYW50ZWNfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgY2hkbGNfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgY2hkbGNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCB6bXRwMV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIHptdHAxX3ByaW50X2RhdGFncmFtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOwotZXh0ZXJuIHZvaWQgaXB4X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgbXBsc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBwcHBvZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBwcHBvZV9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHN1bnJwY3JlcXVlc3RfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IHBmbG9nX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IHRva2VuX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKLWV4dGVybiB1X2ludCB0b2tlbl9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHZxcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHJlZ2lzdGVyIHVfaW50KTsKLWV4dGVybiB2b2lkIHplcGh5cl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGludCk7Ci1leHRlcm4gdm9pZCBmZGRpX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKLWV4dGVybiB1X2ludCBmZGRpX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgbXBjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIHJwa2lfcnRyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IHNsbF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGRjY3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIGludCBsbGNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9zaG9ydCAqKTsKLWV4dGVybiBpbnQgc25hcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgZWlncnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBzdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBsMnRwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgdWRwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgaWNtcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKiwgaW50KTsKLWV4dGVybiB2b2lkIG9wZW5mbG93X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOwotZXh0ZXJuIHZvaWQgdGVsbmV0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgc2xvd19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIHJhZGl1c19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGxtcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBmcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBtZnJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdV9pbnQgZnJfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgbWZyX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgcTkzM19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGlnbXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCByaXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBsd2FwcF9jb250cm9sX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGludCk7Ci1leHRlcm4gdm9pZCBsd2FwcF9kYXRhX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgcGdtX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHBwdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGxkcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIHdiX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB2b2lkICosIHVfaW50KTsKLWV4dGVybiBpbnQgb2FtX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKLWV4dGVybiB2b2lkIGF0bV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9pbnQsIHVfaW50LCB1X2ludCwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7Ci1leHRlcm4gdV9pbnQgc3VuYXRtX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGF0bV9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHZ0cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiBpbnQgbXB0Y3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9jaGFyKTsKLWV4dGVybiB2b2lkIG50cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGNuZnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIGR2bXJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgZWdwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IGVuY19pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBzbF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBzbF9ic2Rvc19pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHRmdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCB2cnJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgcGltdjFfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBjaXNjb19hdXRvcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBwaW1fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIGNvbnN0IHVfY2hhciAqIG5zX25wcmludCAobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBuc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBpbnQpOwotZXh0ZXJuIHZvaWQgYm9vdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBzZmxvd19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKIGV4dGVybiB2b2lkIGFvZHZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgaW50KTsKLWV4dGVybiB2b2lkIHNjdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIGNoYXIgKmJncF92cG5fcmRfcHJpbnQgKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBhb2VfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2ludCk7CitleHRlcm4gdm9pZCBhcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOworZXh0ZXJuIHZvaWQgYXNjaWlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBhdGFsa19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGF0bV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9pbnQsIHVfaW50LCB1X2ludCwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7CitleHRlcm4gdm9pZCBiYWJlbF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGJlZXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBiZmRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwogZXh0ZXJuIHZvaWQgYmdwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKLWV4dGVybiB2b2lkIG9sc3JfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgaW50KTsKK2V4dGVybiBjaGFyICpiZ3BfdnBuX3JkX3ByaW50IChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICopOworZXh0ZXJuIHZvaWQgYm9vdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBjYWxtX2Zhc3RfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICopOworZXh0ZXJuIHZvaWQgY2FycF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBpbnQpOworZXh0ZXJuIHZvaWQgY2RwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKK2V4dGVybiB2b2lkIGNmbV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB1X2ludCBjaGRsY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGNpc2NvX2F1dG9ycF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGNuZnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIGRjY3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgZGVjbmV0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKK2V4dGVybiB2b2lkIGRoY3A2X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIGludCBkc3RvcHRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIGR0cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGR2bXJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgZWFwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgZWdwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgZWlncnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gaW50IGVzcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IGludCwgY29uc3QgdV9jaGFyICosIGludCAqLCBpbnQgKik7CitleHRlcm4gdV9pbnQgZXRoZXJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQsIHZvaWQgKCopKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiksIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiBpbnQgZXRoZXJ0eXBlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X3Nob3J0LCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50LCBjb25zdCBzdHJ1Y3QgbGxhZGRyX2luZm8gKiwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICopOworZXh0ZXJuIHVfaW50IGZkZGlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwogZXh0ZXJuIHZvaWQgZm9yY2VzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgbHNwcGluZ19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB1X2ludCBmcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiBpbnQgZnJhZzZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBmdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBnZW5ldmVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBnZW9uZXRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICopOworZXh0ZXJuIHZvaWQgZ3JlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIGludCBoYmhvcHRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIGhleF9hbmRfYXNjaWlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IGNoYXIgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGhleF9hbmRfYXNjaWlfcHJpbnRfd2l0aF9vZmZzZXQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IGNoYXIgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7CitleHRlcm4gdm9pZCBoZXhfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IGNoYXIgKmlkZW50LCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCk7CitleHRlcm4gdm9pZCBoZXhfcHJpbnRfd2l0aF9vZmZzZXQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IGNoYXIgKmlkZW50LCBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCwgdV9pbnQpOworZXh0ZXJuIHZvaWQgaG5jcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGhzcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBodHRwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgaWNtcDZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICosIGludCk7CitleHRlcm4gdm9pZCBpY21wX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgaWdtcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGlncnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBpcDZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBpcE5fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBpcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIGlwX3ByaW50X2lubmVyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50IG5oLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBpcGNvbXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIGlweF9uZXRiaW9zX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgaXB4X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgaXNha21wX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIGlzYWttcF9yZmMzOTQ4X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKIGV4dGVybiB2b2lkIGlzb2NsbnNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwogZXh0ZXJuIHZvaWQga3JiX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBjZHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgYXRhbGtfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdV9pbnQgbHRhbGtfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBsMnRwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgbGFuZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7CitleHRlcm4gdm9pZCBsZHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBsaXNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwogZXh0ZXJuIHVfaW50IGxsYXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBhYXJwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IGp1bmlwZXJfYXRtMV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBqdW5pcGVyX2F0bTJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQganVuaXBlcl9tZnJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQganVuaXBlcl9tbGZyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGp1bmlwZXJfbWxwcHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQganVuaXBlcl9wcHBvZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBqdW5pcGVyX3BwcG9lX2F0bV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBqdW5pcGVyX2dnc25fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQganVuaXBlcl9lc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBqdW5pcGVyX21vbml0b3JfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQganVuaXBlcl9zZXJ2aWNlc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBqdW5pcGVyX2V0aGVyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGp1bmlwZXJfcHBwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGp1bmlwZXJfZnJlbGF5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGp1bmlwZXJfY2hkbGNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBzbm1wX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgcnhfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCBpbnQsIGludCwgaW50LCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBuZnNyZXBseV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBuZnNyZXBseV9wcmludF9ub2FkZHIobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgbmZzcmVxX3ByaW50X25vYWRkcihuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBzaXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBzeXNsb2dfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gaW50IGxsY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICosIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqKTsKK2V4dGVybiB2b2lkIGxsZHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBsbXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBsb29wYmFja19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfaW50KTsKK2V4dGVybiB2b2lkIGxzcHBpbmdfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBsd2FwcF9jb250cm9sX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGludCk7CitleHRlcm4gdm9pZCBsd2FwcF9kYXRhX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwogZXh0ZXJuIHZvaWQgbHdyZXNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBjZm1fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBtM3VhX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOworZXh0ZXJuIHZvaWQgbWVkc2FfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQsIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqLCBjb25zdCBzdHJ1Y3QgbGxhZGRyX2luZm8gKik7CitleHRlcm4gdV9pbnQgbWZyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgbW9iaWxlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIGludCBtb2JpbGl0eV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIG1wY3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBtcGxzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIGludCBtcHRjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2NoYXIpOworZXh0ZXJuIHZvaWQgbXNkcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIG1zbmxiX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKik7CiBleHRlcm4gdm9pZCBuYnRfdGNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIG5idF91ZHAxMzdfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBpbnQpOwogZXh0ZXJuIHZvaWQgbmJ0X3VkcDEzOF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGludCk7Ci1leHRlcm4gdm9pZCBzbWJfdGNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKIGV4dGVybiB2b2lkIG5ldGJldWlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHVfc2hvcnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgaXB4X25ldGJpb3NfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBwcmludF9kYXRhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1bnNpZ25lZCBjaGFyICosIGludCk7Ci1leHRlcm4gdm9pZCBkZWNuZXRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgdGNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqLCBpbnQpOwotZXh0ZXJuIHZvaWQgb3NwZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gaW50IG9zcGZfcHJpbnRfdGVfbHNhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1aW50OF90ICosIHVfaW50KTsKLWV4dGVybiBpbnQgb3NwZl9wcmludF9ncmFjZV9sc2EobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVpbnQ4X3QgKiwgdV9pbnQpOwotZXh0ZXJuIHVfaW50IHBwcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB1X2ludCBwcHBfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgcHBwX2hkbGNfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgcHBwX2JzZG9zX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgbGxkcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIHJzdnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCB0aW1lZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHZvaWQgbTN1YV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfaW50KTsKLWV4dGVybiB2b2lkIGFvZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfaW50KTsKLWV4dGVybiB2b2lkIGZ0cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGh0dHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1leHRlcm4gdm9pZCBydHNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgc210cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLWV4dGVybiB2b2lkIGdlbmV2ZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKLQotLyogc3R1ZmYgdGhhdCBoYXMgbm90IHlldCBiZWVuIHJvdG90aWxlZCAqLwotCi0jaWYgMAotZXh0ZXJuIHZvaWQgYXNjaWlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosdV9pbnQpOwotZXh0ZXJuIHZvaWQgZGVmYXVsdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIGNoYXIgKnNtYl9lcnJzdHIobmV0ZGlzc2VjdF9vcHRpb25zICosaW50LCBpbnQpOwotZXh0ZXJuIGNvbnN0IGNoYXIgKm50X2VycnN0cihuZXRkaXNzZWN0X29wdGlvbnMgKiwgdWludDMyX3QpOwotI2VuZGlmCi0KLWV4dGVybiB1X2ludCBpcG5ldF9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IHBwaV9pZl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IG5mbG9nX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgaWVlZTgwMl8xNV80X2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgcGt0YXBfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB1X2ludCBpZWVlODAyXzExX3JhZGlvX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIHVfaW50IGllZWU4MDJfMTFfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgaWVlZTgwMl8xMV9yYWRpb19hdnNfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdV9pbnQgcHJpc21faWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci0KLWV4dGVybiB2b2lkIGlwNl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKixjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotI2lmZGVmIElORVQ2Ci1leHRlcm4gaW50IGZyYWc2X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIGludCBydDZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gaW50IGhiaG9wdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICopOwotZXh0ZXJuIGludCBkc3RvcHRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKLWV4dGVybiB2b2lkIHJpcG5nX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdW5zaWduZWQgaW50KTsKLWV4dGVybiBpbnQgbW9iaWxpdHlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKik7Ci1leHRlcm4gdm9pZCBkaGNwNl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIG5mc3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIG5mc3JlcGx5X3ByaW50X25vYWRkcihuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBuZnNyZXFfcHJpbnRfbm9hZGRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiBjb25zdCB1X2NoYXIgKiBuc19ucHJpbnQgKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICopOworZXh0ZXJuIHZvaWQgbnNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgaW50KTsKK2V4dGVybiB2b2lkIG5zaF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuKTsKK2V4dGVybiB2b2lkIG50cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIG9hbV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCk7CitleHRlcm4gdm9pZCBvbHNyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGludCk7CitleHRlcm4gdm9pZCBvcGVuZmxvd19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfaW50KTsKIGV4dGVybiB2b2lkIG9zcGY2X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotZXh0ZXJuIHZvaWQgYmFiZWxfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci0jZW5kaWYgLypJTkVUNiovCitleHRlcm4gdm9pZCBvc3BmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiBpbnQgb3NwZl9wcmludF9ncmFjZV9sc2EobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVpbnQ4X3QgKiwgdV9pbnQpOworZXh0ZXJuIGludCBvc3BmX3ByaW50X3RlX2xzYShuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdWludDhfdCAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBvdHZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBwZ21fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICopOworZXh0ZXJuIHZvaWQgcGltX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIHBpbXYxX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHVfaW50IHBwcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB1X2ludCBwcHBvZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHBwdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiBpbnQgcHJpbnRfdW5rbm93bl9kYXRhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgY2hhciAqLCBpbnQpOworZXh0ZXJuIGNoYXIgKnE5MjJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgcTkzM19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHJhZGl1c19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHJlc3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCByaXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCByaXBuZ19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVuc2lnbmVkIGludCk7CitleHRlcm4gdm9pZCBycGtpX3J0cl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHJyY3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICosIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqKTsKK2V4dGVybiB2b2lkIHJzdnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gaW50IHJ0Nl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIHJ0c3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCByeF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIGludCwgaW50LCBpbnQsIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIHNjdHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgc2Zsb3dfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBzaXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBzbG93X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgc21iX3ByaW50X2RhdGEobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50KTsKK2V4dGVybiB2b2lkIHNtYl90Y3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBpbnQpOworZXh0ZXJuIHZvaWQgc210cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiBpbnQgc25hcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2ludCwgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICosIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqLCB1X2ludCk7CitleHRlcm4gdm9pZCBzbm1wX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgc3RwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgc3VucnBjcmVxdWVzdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjb25zdCB1X2NoYXIgKik7CitleHRlcm4gdm9pZCBzeXNsb2dfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCB0Y3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICosIGludCk7CitleHRlcm4gdm9pZCB0ZWxuZXRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCB0ZnRwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworZXh0ZXJuIHZvaWQgdGltZWRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqKTsKK2V4dGVybiB2b2lkIHRpcGNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9pbnQpOworZXh0ZXJuIHVfaW50IHRva2VuX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfaW50KTsKK2V4dGVybiB2b2lkIHVkbGRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCB1ZHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICosIGludCk7CitleHRlcm4gaW50IHZqY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgY2hhciAqLCB1X3Nob3J0KTsKK2V4dGVybiB2b2lkIHZxcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHJlZ2lzdGVyIHVfaW50KTsKK2V4dGVybiB2b2lkIHZycnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY29uc3QgdV9jaGFyICosIGludCk7CitleHRlcm4gdm9pZCB2dHBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitleHRlcm4gdm9pZCB2eGxhbl9ncGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbik7CitleHRlcm4gdm9pZCB2eGxhbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHdiX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB2b2lkICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHplcGh5cl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGludCk7CitleHRlcm4gdm9pZCB6bXRwMV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKK2V4dGVybiB2b2lkIHptdHAxX3ByaW50X2RhdGFncmFtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOwogCi0jaWYgMAorLyogY2hlY2tzdW0gcm91dGluZXMgKi8KK2V4dGVybiB2b2lkIGluaXRfY2hlY2tzdW0odm9pZCk7CitleHRlcm4gdWludDE2X3QgdmVyaWZ5X2NyYzEwX2Nrc3VtKHVpbnQxNl90LCBjb25zdCB1X2NoYXIgKiwgaW50KTsKK2V4dGVybiB1aW50MTZfdCBjcmVhdGVfb3NpX2Nrc3VtKGNvbnN0IHVpbnQ4X3QgKiwgaW50LCBpbnQpOworCiBzdHJ1Y3QgY2tzdW1fdmVjIHsKIAljb25zdCB1aW50OF90CSpwdHI7CiAJaW50CQlsZW47CiB9OwogZXh0ZXJuIHVpbnQxNl90IGluX2Nrc3VtKGNvbnN0IHN0cnVjdCBja3N1bV92ZWMgKiwgaW50KTsKIGV4dGVybiB1aW50MTZfdCBpbl9ja3N1bV9zaG91bGRiZSh1aW50MTZfdCwgdWludDE2X3QpOwotI2VuZGlmCi1leHRlcm4gaW50IG5leHRwcm90bzRfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBpcCAqLCBjb25zdCB1aW50OF90ICosIHVfaW50LCB1X2ludCwgdV9pbnQpOwotZXh0ZXJuIGludCBkZWNvZGVfcHJlZml4NChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICosIHVfaW50LCBjaGFyICosIHVfaW50KTsKLSNpZmRlZiBJTkVUNgotZXh0ZXJuIGludCBkZWNvZGVfcHJlZml4NihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICosIHVfaW50LCBjaGFyICosIHVfaW50KTsKLSNlbmRpZgogCi1leHRlcm4gdm9pZCBlc3BfcHJpbnRfZGVjb2Rlc2VjcmV0KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvKTsKLWV4dGVybiBpbnQgZXNwX3ByaW50X2RlY3J5cHRfYnVmZmVyX2J5X2lrZXYyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotCQkJCQkgICAgIGludCBpbml0aWF0b3IsCitleHRlcm4gaW50IG5leHRwcm90bzRfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHN0cnVjdCBpcCAqLCBjb25zdCB1aW50OF90ICosIHVfaW50LCB1X2ludCwgdV9pbnQpOworCisvKiBpbiBwcmludC1pcDYuYyAqLworZXh0ZXJuIGludCBuZXh0cHJvdG82X2Nrc3VtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCBzdHJ1Y3QgaXA2X2hkciAqLCBjb25zdCB1aW50OF90ICosIHVfaW50LCB1X2ludCwgdV9pbnQpOworCisvKiBVdGlsaXRpZXMgKi8KK2V4dGVybiBpbnQgbWFzazJwbGVuKHVpbnQzMl90KTsKK2V4dGVybiBpbnQgbWFzazYycGxlbihjb25zdCB1X2NoYXIgKik7CisKK2V4dGVybiBjb25zdCBjaGFyICpkbm5hbWVfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X3Nob3J0KTsKK2V4dGVybiBjb25zdCBjaGFyICpkbm51bV9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICosIHVfc2hvcnQpOworCitleHRlcm4gY2hhciAqc21iX2VycnN0cihpbnQsIGludCk7CitleHRlcm4gY29uc3QgY2hhciAqbnRfZXJyc3RyKHVpbnQzMl90KTsKKworZXh0ZXJuIGludCBkZWNvZGVfcHJlZml4NChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCBjaGFyICosIHVfaW50KTsKK2V4dGVybiBpbnQgZGVjb2RlX3ByZWZpeDYobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgY2hhciAqLCB1X2ludCk7CisKK2V4dGVybiB2b2lkIGVzcF9wcmludF9kZWNvZGVzZWNyZXQobmV0ZGlzc2VjdF9vcHRpb25zICopOworZXh0ZXJuIGludCBlc3BfcHJpbnRfZGVjcnlwdF9idWZmZXJfYnlfaWtldjIobmV0ZGlzc2VjdF9vcHRpb25zICosIGludCwKIAkJCQkJICAgICB1X2NoYXIgc3BpaVs4XSwgdV9jaGFyIHNwaXJbOF0sCi0JCQkJCSAgICAgdV9jaGFyICpidWYsIHVfY2hhciAqZW5kKTsKLQotCi1leHRlcm4gdm9pZCBnZW9uZXRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sY29uc3QgdV9jaGFyICpldGhfaGRyLGNvbnN0IHVfY2hhciAqZ2VvX3BjaywgdV9pbnQgbGVuKTsKLWV4dGVybiB2b2lkIGNhbG1fZmFzdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbyxjb25zdCB1X2NoYXIgKmV0aF9oZHIsY29uc3QgdV9jaGFyICpjYWxtX3BjaywgdV9pbnQgbGVuKTsKKwkJCQkJICAgICBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9jaGFyICopOwogCiAjZW5kaWYgIC8qIG5ldGRpc3NlY3RfaCAqLwpkaWZmIC0tZ2l0IGEvbmZzZmguaCBiL25mc2ZoLmgKaW5kZXggY2ZkMDczYi4uNWNmOGZjNCAxMDA2NDQKLS0tIGEvbmZzZmguaAorKysgYi9uZnNmaC5oCkBAIC02Myw0ICs2Myw0IEBACiAjZGVmaW5lCWZzaWRfZXEoYSxiKQkoKGEuZnNpZF9jb2RlID09IGIuZnNpZF9jb2RlKSAmJlwKIAkJCSBkZXZfZXEoYS5Gc2lkX2RldiwgYi5Gc2lkX2RldikpCiAKLWV4dGVybiB2b2lkIFBhcnNlX2ZoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgaW50LCBteV9mc2lkICosIHVpbnQzMl90ICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIGludCk7CitleHRlcm4gdm9pZCBQYXJzZV9maChjb25zdCB1bnNpZ25lZCBjaGFyICosIHVfaW50LCBteV9mc2lkICosIHVpbnQzMl90ICosIGNvbnN0IGNoYXIgKiosIGNvbnN0IGNoYXIgKiosIGludCk7CmRpZmYgLS1naXQgYS9ubHBpZC5jIGIvbmxwaWQuYwppbmRleCA5MTllODdkLi40YjQ0ZWUxIDEwMDY0NAotLS0gYS9ubHBpZC5jCisrKyBiL25scGlkLmMKQEAgLTEzLDEzICsxMywxMiBAQAogICogT3JpZ2luYWwgY29kZSBieSBIYW5uZXMgR3JlZGxlciAoaGFubmVzQGp1bmlwZXIubmV0KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJubHBpZC5oIgogCiBjb25zdCBzdHJ1Y3QgdG9rIG5scGlkX3ZhbHVlc1tdID0gewpkaWZmIC0tZ2l0IGEvb3VpLmMgYi9vdWkuYwppbmRleCAyYWVhNWFkLi43MTQyNWRlIDEwMDY0NAotLS0gYS9vdWkuYworKysgYi9vdWkuYwpAQCAtMTMsMTMgKzEzLDEyIEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgIm91aS5oIgogCiAvKiBGSVhNRSBjb21wbGV0ZSBPVUkgbGlzdCB1c2luZyBhIHNjcmlwdCAqLwpAQCAtMjcsNiArMjYsNyBAQAogY29uc3Qgc3RydWN0IHRvayBvdWlfdmFsdWVzW10gPSB7CiAgICAgeyBPVUlfRU5DQVBfRVRIRVIsICJFdGhlcm5ldCIgfSwKICAgICB7IE9VSV9DSVNDTywgIkNpc2NvIiB9LAorICAgIHsgT1VJX0lBTkEsICJJQU5BIiB9LAogICAgIHsgT1VJX05PUlRFTCwgIk5vcnRlbCBOZXR3b3JrcyBTT05NUCIgfSwKICAgICB7IE9VSV9DSVNDT185MCwgIkNpc2NvIGJyaWRnZWQiIH0sCiAgICAgeyBPVUlfUkZDMjY4NCwgIkV0aGVybmV0IGJyaWRnZWQiIH0sCmRpZmYgLS1naXQgYS9vdWkuaCBiL291aS5oCmluZGV4IDRhOTgzZWMuLmE4NWY4ODMgMTAwNjQ0Ci0tLSBhL291aS5oCisrKyBiL291aS5oCkBAIC0xNiwyOSArMTYsMzAgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdG9rIG91aV92YWx1ZXNbXTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdG9rIHNtaV92YWx1ZXNbXTsKIAotI2RlZmluZSBPVUlfRU5DQVBfRVRIRVIgMHgwMDAwMDAgICAgICAgIC8qIGVuY2Fwc3VsYXRlZCBFdGhlcm5ldCAqLwotI2RlZmluZSBPVUlfQ0lTQ08gICAgICAgMHgwMDAwMGMgICAgICAgIC8qIENpc2NvIHByb3RvY29scyAqLwotI2RlZmluZSBPVUlfTk9SVEVMICAgICAgMHgwMDAwODEgICAgICAgIC8qIE5vcnRlbCBTT05NUCAqLwotI2RlZmluZSBPVUlfQ0lTQ09fOTAgICAgMHgwMDAwZjggICAgICAgIC8qIENpc2NvIGJyaWRnaW5nICovCi0jZGVmaW5lIE9VSV9SRkMyNjg0ICAgICAweDAwODBjMiAgICAgICAgLyogUkZDIDI0MjcvMjY4NCBicmlkZ2VkIEV0aGVybmV0ICovCi0jZGVmaW5lIE9VSV9BVE1fRk9SVU0gICAweDAwQTAzRSAgICAgICAgLyogQVRNIEZvcnVtICovCi0jZGVmaW5lIE9VSV9DQUJMRV9CUERVICAweDAwRTAyRiAgICAgICAgLyogRE9DU0lTIHNwYW5uaW5nIHRyZWUgQlBEVSAqLwotI2RlZmluZSBPVUlfQVBQTEVUQUxLICAgMHgwODAwMDcgICAgICAgIC8qIEFwcGxldGFsayAqLwotI2RlZmluZSBPVUlfSlVOSVBFUiAgICAgMHgwMDkwNjkgICAgICAgIC8qIEp1bmlwZXIgKi8KLSNkZWZpbmUgT1VJX0hQICAgICAgICAgIDB4MDgwMDA5ICAgICAgICAvKiBIZXdsZXR0LVBhY2thcmQgKi8KLSNkZWZpbmUgT1VJX0lFRUVfODAyMV9QUklWQVRFIDB4MDA4MGMyICAgICAgLyogSUVFRSA4MDIuMSBPcmdhbmlzYXRpb24gU3BlY2lmaWMgLSBBbm5leCBGICovCi0jZGVmaW5lIE9VSV9JRUVFXzgwMjNfUFJJVkFURSAweDAwMTIwZiAgICAgIC8qIElFRUUgODAyLjMgT3JnYW5pc2F0aW9uIFNwZWNpZmljIC0gQW5uZXggRyAqLwotI2RlZmluZSBPVUlfVElBICAgICAgICAgMHgwMDEyYmIgICAgICAgIC8qIFRJQSAtIFRlbGVjb21tdW5pY2F0aW9ucyBJbmR1c3RyeSBBc3NvY2lhdGlvbiAtIEFOU0kvVElBLTEwNTctIDIwMDYgKi8KLSNkZWZpbmUgT1VJX0RDQlggICAgICAgIDB4MDAxQjIxICAgICAgICAvKiBEQ0JYICovCi0jZGVmaW5lIE9VSV9OSUNJUkEgICAgICAweDAwMjMyMCAgICAgICAgLyogTmljaXJhIE5ldHdvcmtzICovCi0jZGVmaW5lIE9VSV9CU04gICAgICAgICAweDVjMTZjNyAgICAgICAgLyogQmlnIFN3aXRjaCBOZXR3b3JrcyAqLwotI2RlZmluZSBPVUlfVkVMTE8gICAgICAgMHhiMGQyZjUgICAgICAgIC8qIFZlbGxvIFN5c3RlbXMgKi8KLSNkZWZpbmUgT1VJX0hQMiAgICAgICAgIDB4MDAyNDgxICAgICAgICAvKiBIUCB0b28gKi8KLSNkZWZpbmUgT1VJX0hQTEFCUyAgICAgIDB4MDAwNGVhICAgICAgICAvKiBIUC1MYWJzICovCi0jZGVmaW5lIE9VSV9JTkZPQkxPWCAgICAweDc0ODc3MSAgICAgICAgLyogSW5mb2Jsb3ggSW5jICovCi0jZGVmaW5lIE9VSV9PTkxBQiAgICAgICAweGE0MjMwNSAgICAgICAgLyogT3BlbiBOZXR3b3JraW5nIExhYiAqLwotI2RlZmluZSBPVUlfRlJFRVNDQUxFICAgMHgwMDA0OWYgICAgICAgIC8qIEZyZWVzY2FsZSAqLwotI2RlZmluZSBPVUlfTkVUUk9OT01FICAgMHgwMDE1YWQgICAgICAgIC8qIE5ldHJvbm9tZSAqLworI2RlZmluZSBPVUlfRU5DQVBfRVRIRVIgICAgICAgMHgwMDAwMDAgIC8qIGVuY2Fwc3VsYXRlZCBFdGhlcm5ldCAqLworI2RlZmluZSBPVUlfQ0lTQ08gICAgICAgICAgICAgMHgwMDAwMGMgIC8qIENpc2NvIHByb3RvY29scyAqLworI2RlZmluZSBPVUlfSUFOQSAgICAgICAgICAgICAgMHgwMDAwNUUgIC8qIElBTkEgKi8KKyNkZWZpbmUgT1VJX05PUlRFTCAgICAgICAgICAgIDB4MDAwMDgxICAvKiBOb3J0ZWwgU09OTVAgKi8KKyNkZWZpbmUgT1VJX0NJU0NPXzkwICAgICAgICAgIDB4MDAwMGY4ICAvKiBDaXNjbyBicmlkZ2luZyAqLworI2RlZmluZSBPVUlfUkZDMjY4NCAgICAgICAgICAgMHgwMDgwYzIgIC8qIFJGQyAyNDI3LzI2ODQgYnJpZGdlZCBFdGhlcm5ldCAqLworI2RlZmluZSBPVUlfQVRNX0ZPUlVNICAgICAgICAgMHgwMEEwM0UgIC8qIEFUTSBGb3J1bSAqLworI2RlZmluZSBPVUlfQ0FCTEVfQlBEVSAgICAgICAgMHgwMEUwMkYgIC8qIERPQ1NJUyBzcGFubmluZyB0cmVlIEJQRFUgKi8KKyNkZWZpbmUgT1VJX0FQUExFVEFMSyAgICAgICAgIDB4MDgwMDA3ICAvKiBBcHBsZXRhbGsgKi8KKyNkZWZpbmUgT1VJX0pVTklQRVIgICAgICAgICAgIDB4MDA5MDY5ICAvKiBKdW5pcGVyICovCisjZGVmaW5lIE9VSV9IUCAgICAgICAgICAgICAgICAweDA4MDAwOSAgLyogSGV3bGV0dC1QYWNrYXJkICovCisjZGVmaW5lIE9VSV9JRUVFXzgwMjFfUFJJVkFURSAweDAwODBjMiAgLyogSUVFRSA4MDIuMSBPcmdhbmlzYXRpb24gU3BlY2lmaWMgLSBBbm5leCBGICovCisjZGVmaW5lIE9VSV9JRUVFXzgwMjNfUFJJVkFURSAweDAwMTIwZiAgLyogSUVFRSA4MDIuMyBPcmdhbmlzYXRpb24gU3BlY2lmaWMgLSBBbm5leCBHICovCisjZGVmaW5lIE9VSV9USUEgICAgICAgICAgICAgICAweDAwMTJiYiAgLyogVElBIC0gVGVsZWNvbW11bmljYXRpb25zIEluZHVzdHJ5IEFzc29jaWF0aW9uIC0gQU5TSS9USUEtMTA1Ny0gMjAwNiAqLworI2RlZmluZSBPVUlfRENCWCAgICAgICAgICAgICAgMHgwMDFCMjEgIC8qIERDQlggKi8KKyNkZWZpbmUgT1VJX05JQ0lSQSAgICAgICAgICAgIDB4MDAyMzIwICAvKiBOaWNpcmEgTmV0d29ya3MgKi8KKyNkZWZpbmUgT1VJX0JTTiAgICAgICAgICAgICAgIDB4NWMxNmM3ICAvKiBCaWcgU3dpdGNoIE5ldHdvcmtzICovCisjZGVmaW5lIE9VSV9WRUxMTyAgICAgICAgICAgICAweGIwZDJmNSAgLyogVmVsbG8gU3lzdGVtcyAqLworI2RlZmluZSBPVUlfSFAyICAgICAgICAgICAgICAgMHgwMDI0ODEgIC8qIEhQIHRvbyAqLworI2RlZmluZSBPVUlfSFBMQUJTICAgICAgICAgICAgMHgwMDA0ZWEgIC8qIEhQLUxhYnMgKi8KKyNkZWZpbmUgT1VJX0lORk9CTE9YICAgICAgICAgIDB4NzQ4NzcxICAvKiBJbmZvYmxveCBJbmMgKi8KKyNkZWZpbmUgT1VJX09OTEFCICAgICAgICAgICAgIDB4YTQyMzA1ICAvKiBPcGVuIE5ldHdvcmtpbmcgTGFiICovCisjZGVmaW5lIE9VSV9GUkVFU0NBTEUgICAgICAgICAweDAwMDQ5ZiAgLyogRnJlZXNjYWxlICovCisjZGVmaW5lIE9VSV9ORVRST05PTUUgICAgICAgICAweDAwMTVhZCAgLyogTmV0cm9ub21lICovCiAKIC8qCiAgKiBUaGVzZSBhcmUgU01JIE5ldHdvcmsgTWFuYWdlbWVudCBQcml2YXRlIEVudGVycHJpc2UgQ29kZXMgZm9yCmRpZmYgLS1naXQgYS9wYXJzZW5mc2ZoLmMgYi9wYXJzZW5mc2ZoLmMKaW5kZXggODI2Y2E5NC4uOGY0OGU3NyAxMDA2NDQKLS0tIGEvcGFyc2VuZnNmaC5jCisrKyBiL3BhcnNlbmZzZmguYwpAQCAtNDAsMTcgKzQwLDE2IEBACiAgKiBXZXN0ZXJuIFJlc2VhcmNoIExhYm9yYXRvcnkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAibmZzZmguaCIKIAogLyoKQEAgLTEwMywxMCArMTAyLDEwIEBACiAJKChsc2IpICsgKChlKTw8OCkgKyAoKGQpPDwxNikgKyAoKGMpPDwyNCkpCiAjZW5kaWYKIAotc3RhdGljIGludCBpc19VQ1goY29uc3QgdW5zaWduZWQgY2hhciAqKTsKK3N0YXRpYyBpbnQgaXNfVUNYKGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdV9pbnQpOwogCiB2b2lkCi1QYXJzZV9maChyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpmaCwgaW50IGxlbiBfVV8sIG15X2ZzaWQgKmZzaWRwLAorUGFyc2VfZmgocmVnaXN0ZXIgY29uc3QgdW5zaWduZWQgY2hhciAqZmgsIHVfaW50IGxlbiwgbXlfZnNpZCAqZnNpZHAsCiAJIHVpbnQzMl90ICppbm9wLAogCSBjb25zdCBjaGFyICoqb3NuYW1lcCwgLyogaWYgbm9uLU5VTEwsIHJldHVybiBPUyBuYW1lIGhlcmUgKi8KIAkgY29uc3QgY2hhciAqKmZzbmFtZXAsIC8qIGlmIG5vbi1OVUxMLCByZXR1cm4gc2VydmVyIGZzIG5hbWUgaGVyZSAoZm9yIFZNUykgKi8KQEAgLTExNSwxMzggKzExNCwxNDYgQEAKIAlyZWdpc3RlciBjb25zdCB1bnNpZ25lZCBjaGFyICpmaHAgPSBmaDsKIAl1aW50MzJfdCB0ZW1wOwogCWludCBmaHR5cGUgPSBGSFRfVU5LTk9XTjsKLQlpbnQgaTsKKwl1X2ludCBpOwogCi0JaWYgKG91cnNlbGYpIHsKLQkgICAgLyogRmlsZSBoYW5kbGUgZ2VuZXJhdGVkIG9uIHRoaXMgaG9zdCwgbm8gbmVlZCBmb3IgZ3Vlc3NpbmcgKi8KKwkvKgorCSAqIFJlcXVpcmUgYXQgbGVhc3QgMTYgYnl0ZXMgb2YgZmlsZSBoYW5kbGU7IGl0J3MgdmFyaWFibGUtbGVuZ3RoCisJICogaW4gTkZTdjMuICAibGVuIiBpcyBpbiB1bml0cyBvZiAzMi1iaXQgd29yZHMsIG5vdCBieXRlcy4KKwkgKi8KKwlpZiAobGVuIDwgMTYvNCkKKwkJZmh0eXBlID0gRkhUX1VOS05PV047CisJZWxzZSB7CisJCWlmIChvdXJzZWxmKSB7CisJCSAgICAvKiBGaWxlIGhhbmRsZSBnZW5lcmF0ZWQgb24gdGhpcyBob3N0LCBubyBuZWVkIGZvciBndWVzc2luZyAqLwogI2lmCWRlZmluZWQoSVJJWDQwKQotCSAgICBmaHR5cGUgPSBGSFRfSVJJWDQ7CisJCSAgICBmaHR5cGUgPSBGSFRfSVJJWDQ7CiAjZW5kaWYKICNpZglkZWZpbmVkKElSSVg1MCkKLQkgICAgZmh0eXBlID0gRkhUX0lSSVg1OworCQkgICAgZmh0eXBlID0gRkhUX0lSSVg1OwogI2VuZGlmCiAjaWYJZGVmaW5lZChJUklYNTEpCi0JICAgIGZodHlwZSA9IEZIVF9JUklYNTsKKwkJICAgIGZodHlwZSA9IEZIVF9JUklYNTsKICNlbmRpZgogI2lmCWRlZmluZWQoU1VOT1M0KQotCSAgICBmaHR5cGUgPSBGSFRfU1VOT1M0OworCQkgICAgZmh0eXBlID0gRkhUX1NVTk9TNDsKICNlbmRpZgogI2lmCWRlZmluZWQoU1VOT1M1KQotCSAgICBmaHR5cGUgPSBGSFRfU1VOT1M1OworCQkgICAgZmh0eXBlID0gRkhUX1NVTk9TNTsKICNlbmRpZgogI2lmCWRlZmluZWQodWx0cml4KQotCSAgICBmaHR5cGUgPSBGSFRfVUxUUklYOworCQkgICAgZmh0eXBlID0gRkhUX1VMVFJJWDsKICNlbmRpZgogI2lmCWRlZmluZWQoX19vc2ZfXykKLQkgICAgZmh0eXBlID0gRkhUX0RFQ09TRjsKKwkJICAgIGZodHlwZSA9IEZIVF9ERUNPU0Y7CiAjZW5kaWYKICNpZglkZWZpbmVkKF9fTmV0QlNEX18pIHx8IGRlZmluZWQoX19GcmVlQlNEX18pIHx8IGRlZmluZWQoX19EcmFnb25GbHlfXykgXAogICAgICB8fCBkZWZpbmVkKF9fT3BlbkJTRF9fKQotCSAgICBmaHR5cGUgPSBGSFRfQlNENDQ7Ci0jZW5kaWYKLQl9Ci0JLyoKLQkgKiBUaGlzIGlzIGJhc2ljYWxseSBhIGJpZyBkZWNpc2lvbiB0cmVlCi0JICovCi0JZWxzZSBpZiAoKGZocFswXSA9PSAwKSAmJiAoZmhwWzFdID09IDApKSB7Ci0JICAgIC8qIGJ5dGVzWzAsMV0gPT0gKDAsMCk7IHJ1bGVzIG91dCBVbHRyaXgsIElSSVg1LCBTVU5PUzUgKi8KLQkgICAgLyogcHJvYmFibHkgcnVsZXMgb3V0IEhQLVVYLCBBSVggdW5sZXNzIHRoZXkgYWxsb3cgbWFqb3I9MCAqLwotCSAgICBpZiAoKGZocFsyXSA9PSAwKSAmJiAoZmhwWzNdID09IDApKSB7Ci0JCS8qIGJ5dGVzWzIsM10gPT0gKDAsMCk7IG11c3QgYmUgQXVzcGV4ICovCi0JCS8qIFhYWCBvciBjb3VsZCBiZSBVbHRyaXgrTUFTU0JVUyAiaHAiIGRpc2s/ICovCi0JCWZodHlwZSA9IEZIVF9BVVNQRVg7Ci0JICAgIH0KLQkgICAgZWxzZSB7Ci0JCS8qCi0JCSAqIGJ5dGVzWzIsM10gIT0gKDAsMCk7IHJ1bGVzIG91dCBBdXNwZXgsIGNvdWxkIGJlCi0JCSAqIERFQ09TRiwgU1VOT1M0LCBvciBJUklYNAotCQkgKi8KLQkJaWYgKChmaHBbNF0gIT0gMCkgJiYgKGZocFs1XSA9PSAwKSAmJgotCQkJKGZocFs4XSA9PSAxMikgJiYgKGZocFs5XSA9PSAwKSkgewotCQkgICAgLyogc2VlbXMgdG8gYmUgREVDT1NGLCB3aXRoIG1pbm9yID09IDAgKi8KLQkJICAgIGZodHlwZSA9IEZIVF9ERUNPU0Y7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgICAvKiBjb3VsZCBiZSBTVU5PUzQgb3IgSVJJWDQgKi8KLQkJICAgIC8qIFhYWCB0aGUgdGVzdCBvZiBmaHBbNV0gPT0gOCBjb3VsZCBiZSB3cm9uZyAqLwotCQkgICAgaWYgKChmaHBbNF0gPT0gMCkgJiYgKGZocFs1XSA9PSA4KSAmJiAoZmhwWzZdID09IDApICYmCi0JCQkoZmhwWzddID09IDApKSB7Ci0JCQkvKiBsb29rcyBsaWtlIGEgbGVuZ3RoLCBub3QgYSBmaWxlIHN5c3RlbSB0eXBlY29kZSAqLwotCQkJZmh0eXBlID0gRkhUX0lSSVg0OwotCQkgICAgfQotCQkgICAgZWxzZSB7Ci0JCQkvKiBieSBlbGltaW5hdGlvbiAqLwotCQkJZmh0eXBlID0gRkhUX1NVTk9TNDsKLQkJICAgIH0KLQkJfQotCSAgICB9Ci0JfQotCWVsc2UgewotCSAgICAvKgotCSAgICAgKiBieXRlc1swLDFdICE9ICgwLDApOyBydWxlcyBvdXQgQXVzcGV4LCBJUklYNCwgU1VOT1M0Ci0JICAgICAqIGNvdWxkIGJlIElSSVg1LCBERUNPU0YsIFVDWCwgVWx0cml4LCBTVU5PUzUKLQkgICAgICogY291bGQgYmUgQUlYLCBIUC1VWAotCSAgICAgKi8KLQkgICAgaWYgKChmaHBbMl0gPT0gMCkgJiYgKGZocFszXSA9PSAwKSkgewotCQkvKgotCQkgKiBieXRlc1syLDNdID09ICgwLDApOyBydWxlcyBvdXQgT1NGLCBwcm9iYWJseSBub3QgVUNYCi0JCSAqICh1bmxlc3MgdGhlIGV4cG9ydGVkIGRldmljZSBuYW1lIGlzIGp1c3Qgb25lIGxldHRlciEpLAotCQkgKiBjb3VsZCBiZSBVbHRyaXgsIElSSVg1LCBBSVgsIG9yIFNVTk9TNQotCQkgKiBtaWdodCBiZSBIUC1VWCAoZGVwZW5kcyBvbiB0aGVpciB2YWx1ZXMgZm9yIG1pbm9yIGRldnMpCi0JCSAqLwotCQlpZiAoKGZocFs2XSA9PSAwKSAmJiAoZmhwWzddID09IDApKSB7CiAJCSAgICBmaHR5cGUgPSBGSFRfQlNENDQ7CisjZW5kaWYKIAkJfQotCQkvKlhYWCB3ZSBwcm9iYWJseSBvbmx5IG5lZWQgdG8gdGVzdCBvZiB0aGVzZSB0d28gYnl0ZXMgKi8KLQkJZWxzZSBpZiAoKGZocFsyMV0gPT0gMCkgJiYgKGZocFsyM10gPT0gMCkpIHsKLQkJICAgIGZodHlwZSA9IEZIVF9VTFRSSVg7Ci0JCX0KLQkJZWxzZSB7Ci0JCSAgICAvKiBDb3VsZCBiZSBTVU5PUzUvSVJJWDUsIG1heWJlIEFJWCAqLwotCQkgICAgLyogWFhYIG5vIG9idmlvdXMgZGlmZmVyZW5jZSBiZXR3ZWVuIFNVTk9TNSBhbmQgSVJJWDUgKi8KLQkJICAgIGlmIChmaHBbOV0gPT0gMTApCi0JCQlmaHR5cGUgPSBGSFRfU1VOT1M1OwotCQkgICAgLyogWFhYIHdoYXQgYWJvdXQgQUlYPyAqLwotCQl9Ci0JICAgIH0KLQkgICAgZWxzZSB7CiAJCS8qCi0JCSAqIGJ5dGVzWzIsM10gIT0gKDAsMCk7IHJ1bGVzIG91dCBVbHRyaXgsIGNvdWxkIGJlCi0JCSAqIERFQ09TRiwgU1VOT1M1LCBJUklYNSwgQUlYLCBIUC1VWCwgb3IgVUNYCisJCSAqIFRoaXMgaXMgYmFzaWNhbGx5IGEgYmlnIGRlY2lzaW9uIHRyZWUKIAkJICovCi0JCWlmICgoZmhwWzhdID09IDEyKSAmJiAoZmhwWzldID09IDApKSB7Ci0JCSAgICBmaHR5cGUgPSBGSFRfREVDT1NGOwotCQl9Ci0JCWVsc2UgaWYgKChmaHBbOF0gPT0gMCkgJiYgKGZocFs5XSA9PSAxMCkpIHsKLQkJICAgIC8qIGNvdWxkIGJlIFNVTk9TNS9JUklYNSwgQUlYLCBIUC1VWCAqLwotCQkgICAgaWYgKChmaHBbN10gPT0gMCkgJiYgKGZocFs2XSA9PSAwKSAmJgotCQkJKGZocFs1XSA9PSAwKSAmJiAoZmhwWzRdID09IDApKSB7Ci0JCQkvKiBYWFggaXMgdGhpcyBhbHdheXMgdHJ1ZSBvZiBIUC1VWD8gKi8KLQkJCWZodHlwZSA9IEZIVF9IUFVYOTsKLQkJICAgIH0KLQkJICAgIGVsc2UgaWYgKGZocFs3XSA9PSAyKSB7Ci0JCQkvKiBUaGlzIHdvdWxkIGJlIE1OVF9ORlMgb24gQUlYLCB3aGljaCBpcyBpbXBvc3NpYmxlICovCi0JCQlmaHR5cGUgPSBGSFRfU1VOT1M1OwkvKiBvciBtYXliZSBJUklYNSAqLworCQllbHNlIGlmICgoZmhwWzBdID09IDApICYmIChmaHBbMV0gPT0gMCkpIHsKKwkJICAgIC8qIGJ5dGVzWzAsMV0gPT0gKDAsMCk7IHJ1bGVzIG91dCBVbHRyaXgsIElSSVg1LCBTVU5PUzUgKi8KKwkJICAgIC8qIHByb2JhYmx5IHJ1bGVzIG91dCBIUC1VWCwgQUlYIHVubGVzcyB0aGV5IGFsbG93IG1ham9yPTAgKi8KKwkJICAgIGlmICgoZmhwWzJdID09IDApICYmIChmaHBbM10gPT0gMCkpIHsKKwkJCS8qIGJ5dGVzWzIsM10gPT0gKDAsMCk7IG11c3QgYmUgQXVzcGV4ICovCisJCQkvKiBYWFggb3IgY291bGQgYmUgVWx0cml4K01BU1NCVVMgImhwIiBkaXNrPyAqLworCQkJZmh0eXBlID0gRkhUX0FVU1BFWDsKIAkJICAgIH0KIAkJICAgIGVsc2UgewogCQkJLyoKLQkJCSAqIFhYWCBDb3VsZCBiZSBTVU5PUzUvSVJJWDUgb3IgQUlYLiAgSSBkb24ndAotCQkJICogWFhYIHNlZSBhbnkgd2F5IHRvIGRpc2FtYmlndWF0ZSB0aGVzZSwgc28KLQkJCSAqIFhYWCBJJ20gZ29pbmcgd2l0aCB0aGUgbW9yZSBsaWtlbHkgZ3Vlc3MuCi0JCQkgKiBYWFggU29ycnksIEJpZyBCbHVlLgorCQkJICogYnl0ZXNbMiwzXSAhPSAoMCwwKTsgcnVsZXMgb3V0IEF1c3BleCwgY291bGQgYmUKKwkJCSAqIERFQ09TRiwgU1VOT1M0LCBvciBJUklYNAogCQkJICovCi0JCQlmaHR5cGUgPSBGSFRfU1VOT1M1OwkvKiBvciBtYXliZSBJUklYNSAqLwotCQkgICAgfQotCSAgICAgICAgfQotCQllbHNlIHsKLQkJICAgIGlmIChpc19VQ1goZmhwKSkgewotCQkJZmh0eXBlID0gRkhUX1ZNU1VDWDsKLQkJICAgIH0KLQkJICAgIGVsc2UgewotCQkJZmh0eXBlID0gRkhUX1VOS05PV047CisJCQlpZiAoKGZocFs0XSAhPSAwKSAmJiAoZmhwWzVdID09IDApICYmCisJCQkJKGZocFs4XSA9PSAxMikgJiYgKGZocFs5XSA9PSAwKSkgeworCQkJICAgIC8qIHNlZW1zIHRvIGJlIERFQ09TRiwgd2l0aCBtaW5vciA9PSAwICovCisJCQkgICAgZmh0eXBlID0gRkhUX0RFQ09TRjsKKwkJCX0KKwkJCWVsc2UgeworCQkJICAgIC8qIGNvdWxkIGJlIFNVTk9TNCBvciBJUklYNCAqLworCQkJICAgIC8qIFhYWCB0aGUgdGVzdCBvZiBmaHBbNV0gPT0gOCBjb3VsZCBiZSB3cm9uZyAqLworCQkJICAgIGlmICgoZmhwWzRdID09IDApICYmIChmaHBbNV0gPT0gOCkgJiYgKGZocFs2XSA9PSAwKSAmJgorCQkJICAgICAgICAoZmhwWzddID09IDApKSB7CisJCQkJLyogbG9va3MgbGlrZSBhIGxlbmd0aCwgbm90IGEgZmlsZSBzeXN0ZW0gdHlwZWNvZGUgKi8KKwkJCQlmaHR5cGUgPSBGSFRfSVJJWDQ7CisJCQkgICAgfQorCQkJICAgIGVsc2UgeworCQkJCS8qIGJ5IGVsaW1pbmF0aW9uICovCisJCQkJZmh0eXBlID0gRkhUX1NVTk9TNDsKKwkJCSAgICB9CisJCQl9CiAJCSAgICB9CiAJCX0KLQkgICAgfQorCQllbHNlIHsKKwkJICAgIC8qCisJCSAgICAgKiBieXRlc1swLDFdICE9ICgwLDApOyBydWxlcyBvdXQgQXVzcGV4LCBJUklYNCwgU1VOT1M0CisJCSAgICAgKiBjb3VsZCBiZSBJUklYNSwgREVDT1NGLCBVQ1gsIFVsdHJpeCwgU1VOT1M1CisJCSAgICAgKiBjb3VsZCBiZSBBSVgsIEhQLVVYCisJCSAgICAgKi8KKwkJICAgIGlmICgoZmhwWzJdID09IDApICYmIChmaHBbM10gPT0gMCkpIHsKKwkJCS8qCisJCQkgKiBieXRlc1syLDNdID09ICgwLDApOyBydWxlcyBvdXQgT1NGLCBwcm9iYWJseSBub3QgVUNYCisJCQkgKiAodW5sZXNzIHRoZSBleHBvcnRlZCBkZXZpY2UgbmFtZSBpcyBqdXN0IG9uZSBsZXR0ZXIhKSwKKwkJCSAqIGNvdWxkIGJlIFVsdHJpeCwgSVJJWDUsIEFJWCwgb3IgU1VOT1M1CisJCQkgKiBtaWdodCBiZSBIUC1VWCAoZGVwZW5kcyBvbiB0aGVpciB2YWx1ZXMgZm9yIG1pbm9yIGRldnMpCisJCQkgKi8KKwkJCWlmICgoZmhwWzZdID09IDApICYmIChmaHBbN10gPT0gMCkpIHsKKwkJCSAgICBmaHR5cGUgPSBGSFRfQlNENDQ7CisJCQl9CisJCQkvKlhYWCB3ZSBwcm9iYWJseSBvbmx5IG5lZWQgdG8gdGVzdCBvZiB0aGVzZSB0d28gYnl0ZXMgKi8KKwkJCWVsc2UgaWYgKChsZW4gPj0gMjQvNCkgJiYgKGZocFsyMV0gPT0gMCkgJiYgKGZocFsyM10gPT0gMCkpIHsKKwkJCSAgICBmaHR5cGUgPSBGSFRfVUxUUklYOworCQkJfQorCQkJZWxzZSB7CisJCQkgICAgLyogQ291bGQgYmUgU1VOT1M1L0lSSVg1LCBtYXliZSBBSVggKi8KKwkJCSAgICAvKiBYWFggbm8gb2J2aW91cyBkaWZmZXJlbmNlIGJldHdlZW4gU1VOT1M1IGFuZCBJUklYNSAqLworCQkJICAgIGlmIChmaHBbOV0gPT0gMTApCisJCQkJZmh0eXBlID0gRkhUX1NVTk9TNTsKKwkJCSAgICAvKiBYWFggd2hhdCBhYm91dCBBSVg/ICovCisJCQl9CisJCSAgICB9CisJCSAgICBlbHNlIHsKKwkJCS8qCisJCQkgKiBieXRlc1syLDNdICE9ICgwLDApOyBydWxlcyBvdXQgVWx0cml4LCBjb3VsZCBiZQorCQkJICogREVDT1NGLCBTVU5PUzUsIElSSVg1LCBBSVgsIEhQLVVYLCBvciBVQ1gKKwkJCSAqLworCQkJaWYgKChmaHBbOF0gPT0gMTIpICYmIChmaHBbOV0gPT0gMCkpIHsKKwkJCSAgICBmaHR5cGUgPSBGSFRfREVDT1NGOworCQkJfQorCQkJZWxzZSBpZiAoKGZocFs4XSA9PSAwKSAmJiAoZmhwWzldID09IDEwKSkgeworCQkJICAgIC8qIGNvdWxkIGJlIFNVTk9TNS9JUklYNSwgQUlYLCBIUC1VWCAqLworCQkJICAgIGlmICgoZmhwWzddID09IDApICYmIChmaHBbNl0gPT0gMCkgJiYKKwkJCQkoZmhwWzVdID09IDApICYmIChmaHBbNF0gPT0gMCkpIHsKKwkJCQkvKiBYWFggaXMgdGhpcyBhbHdheXMgdHJ1ZSBvZiBIUC1VWD8gKi8KKwkJCQlmaHR5cGUgPSBGSFRfSFBVWDk7CisJCQkgICAgfQorCQkJICAgIGVsc2UgaWYgKGZocFs3XSA9PSAyKSB7CisJCQkJLyogVGhpcyB3b3VsZCBiZSBNTlRfTkZTIG9uIEFJWCwgd2hpY2ggaXMgaW1wb3NzaWJsZSAqLworCQkJCWZodHlwZSA9IEZIVF9TVU5PUzU7CS8qIG9yIG1heWJlIElSSVg1ICovCisJCQkgICAgfQorCQkJICAgIGVsc2UgeworCQkJCS8qCisJCQkJICogWFhYIENvdWxkIGJlIFNVTk9TNS9JUklYNSBvciBBSVguICBJIGRvbid0CisJCQkJICogWFhYIHNlZSBhbnkgd2F5IHRvIGRpc2FtYmlndWF0ZSB0aGVzZSwgc28KKwkJCQkgKiBYWFggSSdtIGdvaW5nIHdpdGggdGhlIG1vcmUgbGlrZWx5IGd1ZXNzLgorCQkJCSAqIFhYWCBTb3JyeSwgQmlnIEJsdWUuCisJCQkJICovCisJCQkJZmh0eXBlID0gRkhUX1NVTk9TNTsJLyogb3IgbWF5YmUgSVJJWDUgKi8KKwkJCSAgICB9CisJCSAgICAgICAgfQorCQkJZWxzZSB7CisJCQkgICAgaWYgKGlzX1VDWChmaHAsIGxlbikpIHsKKwkJCQlmaHR5cGUgPSBGSFRfVk1TVUNYOworCQkJICAgIH0KKwkJCSAgICBlbHNlIHsKKwkJCQlmaHR5cGUgPSBGSFRfVU5LTk9XTjsKKwkJCSAgICB9CisJCQl9CisJCSAgICB9CisJCX0KIAl9CiAKIAkvKiBYWFggc3RpbGwgbmVlZHMgdG8gaGFuZGxlIFNVTk9TMyAqLwpAQCAtMzYxLDEzICszNjgsMTMgQEAKIAkJaWYgKHNpemVvZigqZnNpZHApID4gMTQpCiAJCSAgICBtZW1zZXQoKGNoYXIgKilmc2lkcCwgMCwgc2l6ZW9mKCpmc2lkcCkpOwogCQkvKiBqdXN0IHVzZSB0aGUgd2hvbGUgdGhpbmcgKi8KLQkJbWVtY3B5KChjaGFyICopZnNpZHAsIChjaGFyICopZmgsIDE0KTsKKwkJbWVtY3B5KChjaGFyICopZnNpZHAsIChjb25zdCBjaGFyICopZmgsIDE0KTsKIAkgICAgfQogCSAgICBlbHNlIHsKIAkJdWludDMyX3QgdGVtcGFbNF07CS8qIGF0IGxlYXN0IDE2IGJ5dGVzLCBtYXliZSBtb3JlICovCiAKIAkJbWVtc2V0KChjaGFyICopdGVtcGEsIDAsIHNpemVvZih0ZW1wYSkpOwotCQltZW1jcHkoKGNoYXIgKil0ZW1wYSwgKGNoYXIgKilmaCwgMTQpOyAvKiBlbnN1cmUgYWxpZ25tZW50ICovCisJCW1lbWNweSgoY2hhciAqKXRlbXBhLCAoY29uc3QgY2hhciAqKWZoLCAxNCk7IC8qIGVuc3VyZSBhbGlnbm1lbnQgKi8KIAkJZnNpZHAtPkZzaWRfZGV2Lk1pbm9yID0gdGVtcGFbMF0gKyAodGVtcGFbMV08PDEpOwogCQlmc2lkcC0+RnNpZF9kZXYuTWFqb3IgPSB0ZW1wYVsyXSArICh0ZW1wYVszXTw8MSk7CiAJCWZzaWRwLT5mc2lkX2NvZGUgPSAwOwpAQCAtMzc4LDcgKzM4NSw3IEBACiAKIAkgICAgLyogQ2FsbGVyIG11c3Qgc2F2ZSAoYW5kIG51bGwtdGVybWluYXRlPykgdGhpcyB2YWx1ZSAqLwogCSAgICBpZiAoZnNuYW1lcCkKLQkJKmZzbmFtZXAgPSAoY2hhciAqKSYoZmhwWzFdKTsKKwkJKmZzbmFtZXAgPSAoY29uc3QgY2hhciAqKSYoZmhwWzFdKTsKIAogCSAgICBpZiAob3NuYW1lcCkKIAkJKm9zbmFtZXAgPSAiVk1TIjsKQEAgLTQxMCwxMyArNDE3LDE0IEBACiAJY2FzZSBGSFRfVU5LTk9XTjoKICNpZmRlZiBERUJVRwogCSAgICAvKiBYWFggZGVidWdnaW5nICovCi0JICAgIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCSAgICBmb3IgKGkgPSAwOyBpIDwgbGVuKjQ7IGkrKykKIAkJKHZvaWQpZnByaW50ZihzdGRlcnIsICIleC4iLCBmaHBbaV0pOwogCSAgICAodm9pZClmcHJpbnRmKHN0ZGVyciwgIlxuIik7CiAjZW5kaWYKIAkgICAgLyogU2F2ZSB0aGUgYWN0dWFsIGhhbmRsZSwgc28gaXQgY2FuIGJlIGRpc3BsYXkgd2l0aCAtdSAqLwotCSAgICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykKKwkgICAgZm9yIChpID0gMDsgaSA8IGxlbio0ICYmIGkqMiA8IHNpemVvZihmc2lkcC0+T3BhcXVlX0hhbmRsZSkgLSAxOyBpKyspCiAJICAgIAkodm9pZClzbnByaW50ZigmKGZzaWRwLT5PcGFxdWVfSGFuZGxlW2kqMl0pLCAzLCAiJS4yWCIsIGZocFtpXSk7CisJICAgIGZzaWRwLT5PcGFxdWVfSGFuZGxlW2kqMl0gPSAnXDAnOwogCiAJICAgIC8qIFhYWCBmb3Igbm93LCBnaXZlICJib2d1cyIgdmFsdWVzIHRvIGFpZCBkZWJ1Z2dpbmcgKi8KIAkgICAgZnNpZHAtPmZzaWRfY29kZSA9IDA7CkBAIC00NDMsMTEgKzQ1MSwxOCBAQAogICoJKDMpIGZvbGxvd2VkIGJ5IHN0cmluZyBvZiBudWxscwogICovCiBzdGF0aWMgaW50Ci1pc19VQ1goY29uc3QgdW5zaWduZWQgY2hhciAqZmhwKQoraXNfVUNYKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmZocCwgdV9pbnQgbGVuKQogewotCXJlZ2lzdGVyIGludCBpOworCXJlZ2lzdGVyIHVfaW50IGk7CiAJaW50IHNlZW5fbnVsbCA9IDA7CiAKKwkvKgorCSAqIFJlcXVpcmUgYXQgbGVhc3QgMjggYnl0ZXMgb2YgZmlsZSBoYW5kbGU7IGl0J3MgdmFyaWFibGUtbGVuZ3RoCisJICogaW4gTkZTdjMuICAibGVuIiBpcyBpbiB1bml0cyBvZiAzMi1iaXQgd29yZHMsIG5vdCBieXRlcy4KKwkgKi8KKwlpZiAobGVuIDwgMjgvNCkKKwkJcmV0dXJuKDApOworCiAJZm9yIChpID0gMTsgaSA8IDE0OyBpKyspIHsKIAkgICAgaWYgKE5EX0lTUFJJTlQoZmhwW2ldKSkgewogCQlpZiAoc2Vlbl9udWxsKQpkaWZmIC0tZ2l0IGEvcGNhcC1taXNzaW5nLmggYi9wY2FwLW1pc3NpbmcuaAppbmRleCBkNzc2ODEwLi45MjcwNmIxIDEwMDY0NAotLS0gYS9wY2FwLW1pc3NpbmcuaAorKysgYi9wY2FwLW1pc3NpbmcuaApAQCAtMTksOCArMTksOCBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jaWZuZGVmIHRjcGR1bXBfcGNhcF9taXNzaW5nX2gKLSNkZWZpbmUgdGNwZHVtcF9wY2FwX21pc3NpbmdfaAorI2lmbmRlZiBuZXRkaXNzZWN0X3BjYXBfbWlzc2luZ19oCisjZGVmaW5lIG5ldGRpc3NlY3RfcGNhcF9taXNzaW5nX2gKIAogLyoKICAqIERlY2xhcmF0aW9ucyBvZiBmdW5jdGlvbnMgdGhhdCBtaWdodCBiZSBtaXNzaW5nIGZyb20gbGlicGNhcC4KQEAgLTQ2LDEzICs0Niw0IEBACiBleHRlcm4gbG9uZyBwY2FwX2R1bXBfZnRlbGwocGNhcF9kdW1wZXJfdCAqKTsKICNlbmRpZgogCi0jZW5kaWYKLQotCi0KLQotCi0KLQotCi0KKyNlbmRpZiAvKiBuZXRkaXNzZWN0X3BjYXBfbWlzc2luZ19oICovCmRpZmYgLS1naXQgYS9wcmludC04MDJfMTEuYyBiL3ByaW50LTgwMl8xMS5jCmluZGV4IDY5N2UyYzkuLjFiYmU0N2EgMTAwNjQ0Ci0tLSBhL3ByaW50LTgwMl8xMS5jCisrKyBiL3ByaW50LTgwMl8xMS5jCkBAIC0yMCwxNiArMjAsMTcgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSUVFRSA4MDIuMTEgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKICNpbmNsdWRlICJleHRyYWN0LmgiCkBAIC00NSw4ICs0NiwxMSBAQAogI2RlZmluZQlJRUVFODAyXzExX0JTU0lEX0xFTgkJNgogI2RlZmluZQlJRUVFODAyXzExX1JBX0xFTgkJNgogI2RlZmluZQlJRUVFODAyXzExX1RBX0xFTgkJNgorI2RlZmluZQlJRUVFODAyXzExX0FERFIxX0xFTgkJNgogI2RlZmluZQlJRUVFODAyXzExX1NFUV9MRU4JCTIKICNkZWZpbmUJSUVFRTgwMl8xMV9DVExfTEVOCQkyCisjZGVmaW5lCUlFRUU4MDJfMTFfQ0FSUklFRF9GQ19MRU4JMgorI2RlZmluZQlJRUVFODAyXzExX0hUX0NPTlRST0xfTEVOCTQKICNkZWZpbmUJSUVFRTgwMl8xMV9JVl9MRU4JCTMKICNkZWZpbmUJSUVFRTgwMl8xMV9LSURfTEVOCQkxCiAKQEAgLTE2NiwxNSArMTcwLDE1IEBACiAjZGVmaW5lCUZDX1JFVFJZKGZjKQkJKChmYykgJiAweDA4MDApCiAjZGVmaW5lCUZDX1BPV0VSX01HTVQoZmMpCSgoZmMpICYgMHgxMDAwKQogI2RlZmluZQlGQ19NT1JFX0RBVEEoZmMpCSgoZmMpICYgMHgyMDAwKQotI2RlZmluZQlGQ19XRVAoZmMpCQkoKGZjKSAmIDB4NDAwMCkKKyNkZWZpbmUJRkNfUFJPVEVDVEVEKGZjKQkoKGZjKSAmIDB4NDAwMCkKICNkZWZpbmUJRkNfT1JERVIoZmMpCQkoKGZjKSAmIDB4ODAwMCkKIAogc3RydWN0IG1nbXRfaGVhZGVyX3QgewogCXVpbnQxNl90CWZjOwogCXVpbnQxNl90IAlkdXJhdGlvbjsKLQl1aW50OF90CQlkYVs2XTsKLQl1aW50OF90CQlzYVs2XTsKLQl1aW50OF90CQlic3NpZFs2XTsKKwl1aW50OF90CQlkYVtJRUVFODAyXzExX0RBX0xFTl07CisJdWludDhfdAkJc2FbSUVFRTgwMl8xMV9TQV9MRU5dOworCXVpbnQ4X3QJCWJzc2lkW0lFRUU4MDJfMTFfQlNTSURfTEVOXTsKIAl1aW50MTZfdAlzZXFfY3RybDsKIH07CiAKQEAgLTI5Miw4NSArMjk2LDkwIEBACiAJc3RydWN0IHRpbV90CXRpbTsKIH07CiAKLXN0cnVjdCBjdHJsX3J0c190IHsKK3N0cnVjdCBjdHJsX2NvbnRyb2xfd3JhcHBlcl9oZHJfdCB7CiAJdWludDE2X3QJZmM7CiAJdWludDE2X3QJZHVyYXRpb247Ci0JdWludDhfdAkJcmFbNl07Ci0JdWludDhfdAkJdGFbNl07Ci0JdWludDhfdAkJZmNzWzRdOworCXVpbnQ4X3QJCWFkZHIxW0lFRUU4MDJfMTFfQUREUjFfTEVOXTsKKwl1aW50MTZfdAljYXJyaWVkX2ZjW0lFRUU4MDJfMTFfQ0FSUklFRF9GQ19MRU5dOworCXVpbnQxNl90CWh0X2NvbnRyb2xbSUVFRTgwMl8xMV9IVF9DT05UUk9MX0xFTl07Cit9OworCisjZGVmaW5lCUNUUkxfQ09OVFJPTF9XUkFQUEVSX0hEUkxFTgkoSUVFRTgwMl8xMV9GQ19MRU4rSUVFRTgwMl8xMV9EVVJfTEVOK1wKKwkJCQkJIElFRUU4MDJfMTFfQUREUjFfTEVOK1wKKwkJCQkJIElFRUU4MDJfMTFfQ0FSUklFRF9GQ19MRU4rXAorCQkJCQkgSUVFRTgwMl8xMV9IVF9DT05UUk9MX0xFTikKKworc3RydWN0IGN0cmxfcnRzX2hkcl90IHsKKwl1aW50MTZfdAlmYzsKKwl1aW50MTZfdAlkdXJhdGlvbjsKKwl1aW50OF90CQlyYVtJRUVFODAyXzExX1JBX0xFTl07CisJdWludDhfdAkJdGFbSUVFRTgwMl8xMV9UQV9MRU5dOwogfTsKIAogI2RlZmluZQlDVFJMX1JUU19IRFJMRU4JKElFRUU4MDJfMTFfRkNfTEVOK0lFRUU4MDJfMTFfRFVSX0xFTitcCiAJCQkgSUVFRTgwMl8xMV9SQV9MRU4rSUVFRTgwMl8xMV9UQV9MRU4pCiAKLXN0cnVjdCBjdHJsX2N0c190IHsKK3N0cnVjdCBjdHJsX2N0c19oZHJfdCB7CiAJdWludDE2X3QJZmM7CiAJdWludDE2X3QJZHVyYXRpb247Ci0JdWludDhfdAkJcmFbNl07Ci0JdWludDhfdAkJZmNzWzRdOworCXVpbnQ4X3QJCXJhW0lFRUU4MDJfMTFfUkFfTEVOXTsKIH07CiAKICNkZWZpbmUJQ1RSTF9DVFNfSERSTEVOCShJRUVFODAyXzExX0ZDX0xFTitJRUVFODAyXzExX0RVUl9MRU4rSUVFRTgwMl8xMV9SQV9MRU4pCiAKLXN0cnVjdCBjdHJsX2Fja190IHsKK3N0cnVjdCBjdHJsX2Fja19oZHJfdCB7CiAJdWludDE2X3QJZmM7CiAJdWludDE2X3QJZHVyYXRpb247Ci0JdWludDhfdAkJcmFbNl07Ci0JdWludDhfdAkJZmNzWzRdOworCXVpbnQ4X3QJCXJhW0lFRUU4MDJfMTFfUkFfTEVOXTsKIH07CiAKICNkZWZpbmUJQ1RSTF9BQ0tfSERSTEVOCShJRUVFODAyXzExX0ZDX0xFTitJRUVFODAyXzExX0RVUl9MRU4rSUVFRTgwMl8xMV9SQV9MRU4pCiAKLXN0cnVjdCBjdHJsX3BzX3BvbGxfdCB7CitzdHJ1Y3QgY3RybF9wc19wb2xsX2hkcl90IHsKIAl1aW50MTZfdAlmYzsKIAl1aW50MTZfdAlhaWQ7Ci0JdWludDhfdAkJYnNzaWRbNl07Ci0JdWludDhfdAkJdGFbNl07Ci0JdWludDhfdAkJZmNzWzRdOworCXVpbnQ4X3QJCWJzc2lkW0lFRUU4MDJfMTFfQlNTSURfTEVOXTsKKwl1aW50OF90CQl0YVtJRUVFODAyXzExX1RBX0xFTl07CiB9OwogCiAjZGVmaW5lCUNUUkxfUFNfUE9MTF9IRFJMRU4JKElFRUU4MDJfMTFfRkNfTEVOK0lFRUU4MDJfMTFfQUlEX0xFTitcCiAJCQkJIElFRUU4MDJfMTFfQlNTSURfTEVOK0lFRUU4MDJfMTFfVEFfTEVOKQogCi1zdHJ1Y3QgY3RybF9lbmRfdCB7CitzdHJ1Y3QgY3RybF9lbmRfaGRyX3QgewogCXVpbnQxNl90CWZjOwogCXVpbnQxNl90CWR1cmF0aW9uOwotCXVpbnQ4X3QJCXJhWzZdOwotCXVpbnQ4X3QJCWJzc2lkWzZdOwotCXVpbnQ4X3QJCWZjc1s0XTsKKwl1aW50OF90CQlyYVtJRUVFODAyXzExX1JBX0xFTl07CisJdWludDhfdAkJYnNzaWRbSUVFRTgwMl8xMV9CU1NJRF9MRU5dOwogfTsKIAogI2RlZmluZQlDVFJMX0VORF9IRFJMRU4JKElFRUU4MDJfMTFfRkNfTEVOK0lFRUU4MDJfMTFfRFVSX0xFTitcCiAJCQkgSUVFRTgwMl8xMV9SQV9MRU4rSUVFRTgwMl8xMV9CU1NJRF9MRU4pCiAKLXN0cnVjdCBjdHJsX2VuZF9hY2tfdCB7CitzdHJ1Y3QgY3RybF9lbmRfYWNrX2hkcl90IHsKIAl1aW50MTZfdAlmYzsKIAl1aW50MTZfdAlkdXJhdGlvbjsKLQl1aW50OF90CQlyYVs2XTsKLQl1aW50OF90CQlic3NpZFs2XTsKLQl1aW50OF90CQlmY3NbNF07CisJdWludDhfdAkJcmFbSUVFRTgwMl8xMV9SQV9MRU5dOworCXVpbnQ4X3QJCWJzc2lkW0lFRUU4MDJfMTFfQlNTSURfTEVOXTsKIH07CiAKICNkZWZpbmUJQ1RSTF9FTkRfQUNLX0hEUkxFTgkoSUVFRTgwMl8xMV9GQ19MRU4rSUVFRTgwMl8xMV9EVVJfTEVOK1wKIAkJCQkgSUVFRTgwMl8xMV9SQV9MRU4rSUVFRTgwMl8xMV9CU1NJRF9MRU4pCiAKLXN0cnVjdCBjdHJsX2JhX3Qgeworc3RydWN0IGN0cmxfYmFfaGRyX3QgewogCXVpbnQxNl90CWZjOwogCXVpbnQxNl90CWR1cmF0aW9uOwotCXVpbnQ4X3QJCXJhWzZdOwotCXVpbnQ4X3QJCWZjc1s0XTsKKwl1aW50OF90CQlyYVtJRUVFODAyXzExX1JBX0xFTl07CiB9OwogCiAjZGVmaW5lCUNUUkxfQkFfSERSTEVOCShJRUVFODAyXzExX0ZDX0xFTitJRUVFODAyXzExX0RVUl9MRU4rSUVFRTgwMl8xMV9SQV9MRU4pCiAKLXN0cnVjdCBjdHJsX2Jhcl90IHsKK3N0cnVjdCBjdHJsX2Jhcl9oZHJfdCB7CiAJdWludDE2X3QJZmM7CiAJdWludDE2X3QJZHVyOwotCXVpbnQ4X3QJCXJhWzZdOwotCXVpbnQ4X3QJCXRhWzZdOworCXVpbnQ4X3QJCXJhW0lFRUU4MDJfMTFfUkFfTEVOXTsKKwl1aW50OF90CQl0YVtJRUVFODAyXzExX1RBX0xFTl07CiAJdWludDE2X3QJY3RsOwogCXVpbnQxNl90CXNlcTsKLQl1aW50OF90CQlmY3NbNF07CiB9OwogCiAjZGVmaW5lCUNUUkxfQkFSX0hEUkxFTgkJKElFRUU4MDJfMTFfRkNfTEVOK0lFRUU4MDJfMTFfRFVSX0xFTitcCkBAIC0zOTAsMzEwICszOTksNiBAQAogI2RlZmluZQlJVl9QQUQoaXYpCSgoKGl2KSA+PiAyNCkgJiAweDNGKQogI2RlZmluZQlJVl9LRVlJRChpdikJKCgoaXYpID4+IDMwKSAmIDB4MDMpCiAKLS8qICRGcmVlQlNEOiBzcmMvc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYWRpb3RhcC5oLHYgMS41IDIwMDUvMDEvMjIgMjA6MTI6MDUgc2FtIEV4cCAkICovCi0vKiBOZXRCU0Q6IGllZWU4MDJfMTFfcmFkaW8uaCx2IDEuMiAyMDA2LzAyLzI2IDAzOjA0OjAzIGR5b3VuZyBFeHAgICovCi0KLS8qLQotICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IERhdmlkIFlvdW5nLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqIDMuIFRoZSBuYW1lIG9mIERhdmlkIFlvdW5nIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKLSAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKLSAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIERBVklEIFlPVU5HIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQotICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgREFWSUQKLSAqIFlPVU5HIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKLSAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKLSAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKLSAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCi0gKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCi0gKiBPRiBTVUNIIERBTUFHRS4KLSAqLwotCi0vKiBBIGdlbmVyaWMgcmFkaW8gY2FwdHVyZSBmb3JtYXQgaXMgZGVzaXJhYmxlLiBJdCBtdXN0IGJlCi0gKiByaWdpZGx5IGRlZmluZWQgKGUuZy4sIHVuaXRzIGZvciBmaWVsZHMgc2hvdWxkIGJlIGdpdmVuKSwKLSAqIGFuZCBlYXNpbHkgZXh0ZW5zaWJsZS4KLSAqCi0gKiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4dGVuc2libGUgcmFkaW8gY2FwdHVyZSBmb3JtYXQuIEl0IGlzCi0gKiBiYXNlZCBvbiBhIGJpdG1hcCBpbmRpY2F0aW5nIHdoaWNoIGZpZWxkcyBhcmUgcHJlc2VudC4KLSAqCi0gKiBJIGFtIHRyeWluZyB0byBkZXNjcmliZSBwcmVjaXNlbHkgd2hhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgotICogc2hvdWxkIGV4cGVjdCBpbiB0aGUgZm9sbG93aW5nLCBhbmQgZm9yIHRoYXQgcmVhc29uIEkgdGVsbCB0aGUKLSAqIHVuaXRzIGFuZCBvcmlnaW4gb2YgZWFjaCBtZWFzdXJlbWVudCAod2hlcmUgaXQgYXBwbGllcyksIG9yIGVsc2UgSQotICogdXNlIHN1ZmZpY2llbnRseSB3ZWFzZWxseSBsYW5ndWFnZSAoImlzIGEgbW9ub3RvbmljYWxseSBub25kZWNyZWFzaW5nCi0gKiBmdW5jdGlvbiBvZi4uLiIpIHRoYXQgSSBjYW5ub3Qgc2V0IGZhbHNlIGV4cGVjdGF0aW9ucyBmb3IgbGF3eWVybHkKLSAqIHJlYWRlcnMuCi0gKi8KLQotLyoKLSAqIFRoZSByYWRpbyBjYXB0dXJlIGhlYWRlciBwcmVjZWRlcyB0aGUgODAyLjExIGhlYWRlci4KLSAqCi0gKiBOb3RlIHdlbGw6IGFsbCByYWRpb3RhcCBmaWVsZHMgYXJlIGxpdHRsZS1lbmRpYW4uCi0gKi8KLXN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHsKLQl1aW50OF90CQlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2VzCi0JCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsCi0JCQkJCSAqIGludHJvZHVjdGlvbiBvZiBjb21wYXRpYmxlCi0JCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuCi0JCQkJCSAqLwotCXVpbnQ4X3QJCWl0X3BhZDsKLQl1aW50MTZfdCAgICAgICBpdF9sZW47ICAgICAgICAgLyogbGVuZ3RoIG9mIHRoZSB3aG9sZQotCQkJCQkgKiBoZWFkZXIgaW4gYnl0ZXMsIGluY2x1ZGluZwotCQkJCQkgKiBpdF92ZXJzaW9uLCBpdF9wYWQsCi0JCQkJCSAqIGl0X2xlbiwgYW5kIGRhdGEgZmllbGRzLgotCQkJCQkgKi8KLQl1aW50MzJfdCAgICAgICBpdF9wcmVzZW50OyAgICAgLyogQSBiaXRtYXAgdGVsbGluZyB3aGljaAotCQkJCQkgKiBmaWVsZHMgYXJlIHByZXNlbnQuIFNldCBiaXQgMzEKLQkJCQkJICogKDB4ODAwMDAwMDApIHRvIGV4dGVuZCB0aGUKLQkJCQkJICogYml0bWFwIGJ5IGFub3RoZXIgMzIgYml0cy4KLQkJCQkJICogQWRkaXRpb25hbCBleHRlbnNpb25zIGFyZSBtYWRlCi0JCQkJCSAqIGJ5IHNldHRpbmcgYml0IDMxLgotCQkJCQkgKi8KLX07Ci0KLS8qIE5hbWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEYXRhIHR5cGUgICAgICAgVW5pdHMKLSAqIC0tLS0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0tLS0gICAgICAgLS0tLS0KLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfVFNGVCAgICAgICAgICAgICAgdWludDY0X3QgICAgICAgbWljcm9zZWNvbmRzCi0gKgotICogICAgICBWYWx1ZSBpbiBtaWNyb3NlY29uZHMgb2YgdGhlIE1BQydzIDY0LWJpdCA4MDIuMTEgVGltZQotICogICAgICBTeW5jaHJvbml6YXRpb24gRnVuY3Rpb24gdGltZXIgd2hlbiB0aGUgZmlyc3QgYml0IG9mIHRoZQotICogICAgICBNUERVIGFycml2ZWQgYXQgdGhlIE1BQy4gRm9yIHJlY2VpdmVkIGZyYW1lcywgb25seS4KLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCAgICAgICAgICAgMiB4IHVpbnQxNl90ICAgTUh6LCBiaXRtYXAKLSAqCi0gKiAgICAgIFR4L1J4IGZyZXF1ZW5jeSBpbiBNSHosIGZvbGxvd2VkIGJ5IGZsYWdzIChzZWUgYmVsb3cpLgotICoJTm90ZSB0aGF0IElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCBtdXN0IGJlIHVzZWQgdG8KLSAqCXJlcHJlc2VudCBhbiBIVCBjaGFubmVsIGFzIHRoZXJlIGlzIG5vdCBlbm91Z2ggcm9vbSBpbgotICoJdGhlIGZsYWdzIHdvcmQuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX0ZIU1MgICAgICAgICAgICAgIHVpbnQxNl90ICAgICAgIHNlZSBiZWxvdwotICoKLSAqICAgICAgRm9yIGZyZXF1ZW5jeS1ob3BwaW5nIHJhZGlvcywgdGhlIGhvcCBzZXQgKGZpcnN0IGJ5dGUpCi0gKiAgICAgIGFuZCBwYXR0ZXJuIChzZWNvbmQgYnl0ZSkuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX1JBVEUgICAgICAgICAgICAgIHVpbnQ4X3QgICAgICAgIDUwMGtiL3Mgb3IgaW5kZXgKLSAqCi0gKiAgICAgIFR4L1J4IGRhdGEgcmF0ZS4gIElmIGJpdCAweDgwIGlzIHNldCB0aGVuIGl0IHJlcHJlc2VudHMgYW4KLSAqCWFuIE1DUyBpbmRleCBhbmQgbm90IGFuIElFRUUgcmF0ZS4KLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCAgICAgaW50OF90ICAgICAgICAgIGRlY2liZWxzIGZyb20KLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIG1pbGxpd2F0dCAoZEJtKQotICoKLSAqICAgICAgUkYgc2lnbmFsIHBvd2VyIGF0IHRoZSBhbnRlbm5hLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbQotICogICAgICBvbmUgbWlsbGl3YXR0LgotICoKLSAqIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UTk9JU0UgICAgICBpbnQ4X3QgICAgICAgICAgZGVjaWJlbHMgZnJvbQotICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgbWlsbGl3YXR0IChkQm0pCi0gKgotICogICAgICBSRiBub2lzZSBwb3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gb25lCi0gKiAgICAgIG1pbGxpd2F0dC4KLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMICAgICAgdWludDhfdCAgICAgICAgZGVjaWJlbCAoZEIpCi0gKgotICogICAgICBSRiBzaWduYWwgcG93ZXIgYXQgdGhlIGFudGVubmEsIGRlY2liZWwgZGlmZmVyZW5jZSBmcm9tIGFuCi0gKiAgICAgIGFyYml0cmFyeSwgZml4ZWQgcmVmZXJlbmNlLgotICoKLSAqIElFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRSAgICAgICB1aW50OF90ICAgICAgICBkZWNpYmVsIChkQikKLSAqCi0gKiAgICAgIFJGIG5vaXNlIHBvd2VyIGF0IHRoZSBhbnRlbm5hLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbgotICogICAgICBhcmJpdHJhcnksIGZpeGVkIHJlZmVyZW5jZSBwb2ludC4KLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZICAgICAgdWludDE2X3QgICAgICAgdW5pdGxlc3MKLSAqCi0gKiAgICAgIFF1YWxpdHkgb2YgQmFya2VyIGNvZGUgbG9jay4gVW5pdGxlc3MuIE1vbm90b25pY2FsbHkKLSAqICAgICAgbm9uZGVjcmVhc2luZyB3aXRoICJiZXR0ZXIiIGxvY2sgc3RyZW5ndGguIENhbGxlZCAiU2lnbmFsCi0gKiAgICAgIFF1YWxpdHkiIGluIGRhdGFzaGVldHMuICAoSXMgdGhlcmUgYSBzdGFuZGFyZCB3YXkgdG8gbWVhc3VyZQotICogICAgICB0aGlzPykKLSAqCi0gKiBJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT04gICAgdWludDE2X3QgICAgICAgdW5pdGxlc3MKLSAqCi0gKiAgICAgIFRyYW5zbWl0IHBvd2VyIGV4cHJlc3NlZCBhcyB1bml0bGVzcyBkaXN0YW5jZSBmcm9tIG1heAotICogICAgICBwb3dlciBzZXQgYXQgZmFjdG9yeSBjYWxpYnJhdGlvbi4gIDAgaXMgbWF4IHBvd2VyLgotICogICAgICBNb25vdG9uaWNhbGx5IG5vbmRlY3JlYXNpbmcgd2l0aCBsb3dlciBwb3dlciBsZXZlbHMuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OIHVpbnQxNl90ICAgICAgIGRlY2liZWxzIChkQikKLSAqCi0gKiAgICAgIFRyYW5zbWl0IHBvd2VyIGV4cHJlc3NlZCBhcyBkZWNpYmVsIGRpc3RhbmNlIGZyb20gbWF4IHBvd2VyCi0gKiAgICAgIHNldCBhdCBmYWN0b3J5IGNhbGlicmF0aW9uLiAgMCBpcyBtYXggcG93ZXIuICBNb25vdG9uaWNhbGx5Ci0gKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCBsb3dlciBwb3dlciBsZXZlbHMuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUiAgICAgIGludDhfdCAgICAgICAgICBkZWNpYmVscyBmcm9tCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBtaWxsaXdhdHQgKGRCbSkKLSAqCi0gKiAgICAgIFRyYW5zbWl0IHBvd2VyIGV4cHJlc3NlZCBhcyBkQm0gKGRlY2liZWxzIGZyb20gYSAxIG1pbGxpd2F0dAotICogICAgICByZWZlcmVuY2UpLiBUaGlzIGlzIHRoZSBhYnNvbHV0ZSBwb3dlciBsZXZlbCBtZWFzdXJlZCBhdAotICogICAgICB0aGUgYW50ZW5uYSBwb3J0LgotICoKLSAqIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyAgICAgICAgICAgICB1aW50OF90ICAgICAgICBiaXRtYXAKLSAqCi0gKiAgICAgIFByb3BlcnRpZXMgb2YgdHJhbnNtaXR0ZWQgYW5kIHJlY2VpdmVkIGZyYW1lcy4gU2VlIGZsYWdzCi0gKiAgICAgIGRlZmluZWQgYmVsb3cuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkEgICAgICAgICAgIHVpbnQ4X3QgICAgICAgIGFudGVubmEgaW5kZXgKLSAqCi0gKiAgICAgIFVuaXRsZXNzIGluZGljYXRpb24gb2YgdGhlIFJ4L1R4IGFudGVubmEgZm9yIHRoaXMgcGFja2V0LgotICogICAgICBUaGUgZmlyc3QgYW50ZW5uYSBpcyBhbnRlbm5hIDAuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICAgICAgICAgIHVpbnQxNl90ICAgICAgIGJpdG1hcAotICoKLSAqICAgICBQcm9wZXJ0aWVzIG9mIHJlY2VpdmVkIGZyYW1lcy4gU2VlIGZsYWdzIGRlZmluZWQgYmVsb3cuCi0gKgotICogSUVFRTgwMjExX1JBRElPVEFQX1hDSEFOTkVMICAgICAgICAgIHVpbnQzMl90CWJpdG1hcAotICoJCQkJCXVpbnQxNl90CU1IegotICoJCQkJCXVpbnQ4X3QJCWNoYW5uZWwgbnVtYmVyCi0gKgkJCQkJdWludDhfdAkJLjUgZEJtCi0gKgotICoJRXh0ZW5kZWQgY2hhbm5lbCBzcGVjaWZpY2F0aW9uOiBmbGFncyAoc2VlIGJlbG93KSBmb2xsb3dlZCBieQotICoJZnJlcXVlbmN5IGluIE1IeiwgdGhlIGNvcnJlc3BvbmRpbmcgSUVFRSBjaGFubmVsIG51bWJlciwgYW5kCi0gKglmaW5hbGx5IHRoZSBtYXhpbXVtIHJlZ3VsYXRvcnkgdHJhbnNtaXQgcG93ZXIgY2FwIGluIC41IGRCbQotICoJdW5pdHMuICBUaGlzIHByb3BlcnR5IHN1cGVyc2VkZXMgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwKLSAqCWFuZCBvbmx5IG9uZSBvZiB0aGUgdHdvIHNob3VsZCBiZSBwcmVzZW50LgotICoKLSAqIElFRUU4MDIxMV9SQURJT1RBUF9NQ1MJCXVpbnQ4X3QJCWtub3duCi0gKgkJCQkJdWludDhfdAkJZmxhZ3MKLSAqCQkJCQl1aW50OF90CQltY3MKLSAqCi0gKglCaXRzZXQgaW5kaWNhdGluZyB3aGljaCBmaWVsZHMgaGF2ZSBrbm93biB2YWx1ZXMsIGZvbGxvd2VkCi0gKglieSBiaXRzZXQgb2YgZmxhZyB2YWx1ZXMsIGZvbGxvd2VkIGJ5IHRoZSBNQ1MgcmF0ZSBpbmRleCBhcwotICoJaW4gSUVFRSA4MDIuMTFuLgotICoKLSAqIElFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFCi0gKgkJCQkJdWludDhfdCAgT1VJWzNdCi0gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCAgc3Vic3BhY2UKLSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MTZfdCBsZW5ndGgKLSAqCi0gKiAgICAgVGhlIFZlbmRvciBOYW1lc3BhY2UgRmllbGQgY29udGFpbnMgdGhyZWUgc3ViLWZpZWxkcy4gVGhlIGZpcnN0Ci0gKiAgICAgc3ViLWZpZWxkIGlzIDMgYnl0ZXMgbG9uZy4gSXQgY29udGFpbnMgdGhlIHZlbmRvcidzIElFRUUgODAyCi0gKiAgICAgT3JnYW5pemF0aW9uYWxseSBVbmlxdWUgSWRlbnRpZmllciAoT1VJKS4gVGhlIGZvdXJ0aCBieXRlIGlzIGEKLSAqICAgICB2ZW5kb3Itc3BlY2lmaWMgIm5hbWVzcGFjZSBzZWxlY3Rvci4iCi0gKgotICovCi1lbnVtIGllZWU4MDIxMV9yYWRpb3RhcF90eXBlIHsKLQlJRUVFODAyMTFfUkFESU9UQVBfVFNGVCA9IDAsCi0JSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTID0gMSwKLQlJRUVFODAyMTFfUkFESU9UQVBfUkFURSA9IDIsCi0JSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwgPSAzLAotCUlFRUU4MDIxMV9SQURJT1RBUF9GSFNTID0gNCwKLQlJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVFNJR05BTCA9IDUsCi0JSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRSA9IDYsCi0JSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWSA9IDcsCi0JSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OID0gOCwKLQlJRUVFODAyMTFfUkFESU9UQVBfREJfVFhfQVRURU5VQVRJT04gPSA5LAotCUlFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVIgPSAxMCwKLQlJRUVFODAyMTFfUkFESU9UQVBfQU5URU5OQSA9IDExLAotCUlFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlRTSUdOQUwgPSAxMiwKLQlJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgPSAxMywKLQlJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgPSAxNCwKLQkvKiBOQjogZ2FwIGZvciBuZXRic2QgZGVmaW5pdGlvbnMgKi8KLQlJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwgPSAxOCwKLQlJRUVFODAyMTFfUkFESU9UQVBfTUNTID0gMTksCi0JSUVFRTgwMjExX1JBRElPVEFQX05BTUVTUEFDRSA9IDI5LAotCUlFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFID0gMzAsCi0JSUVFRTgwMjExX1JBRElPVEFQX0VYVCA9IDMxCi19OwotCi0vKiBjaGFubmVsIGF0dHJpYnV0ZXMgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fVFVSQk8JMHgwMDAxMAkvKiBUdXJibyBjaGFubmVsICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0NDSwkweDAwMDIwCS8qIENDSyBjaGFubmVsICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX09GRE0JMHgwMDA0MAkvKiBPRkRNIGNoYW5uZWwgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fMkdIWgkweDAwMDgwCS8qIDIgR0h6IHNwZWN0cnVtIGNoYW5uZWwuICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOXzVHSFoJMHgwMDEwMAkvKiA1IEdIeiBzcGVjdHJ1bSBjaGFubmVsICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1BBU1NJVkUJMHgwMDIwMAkvKiBPbmx5IHBhc3NpdmUgc2NhbiBhbGxvd2VkICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0RZTgkweDAwNDAwCS8qIER5bmFtaWMgQ0NLLU9GRE0gY2hhbm5lbCAqLwotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9HRlNLCTB4MDA4MDAJLyogR0ZTSyBjaGFubmVsIChGSFNTIFBIWSkgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fR1NNCTB4MDEwMDAJLyogOTAwIE1IeiBzcGVjdHJ1bSBjaGFubmVsICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1NUVVJCTwkweDAyMDAwCS8qIDExYSBzdGF0aWMgdHVyYm8gY2hhbm5lbCBvbmx5ICovCi0jZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hBTEYJMHgwNDAwMAkvKiBIYWxmIHJhdGUgY2hhbm5lbCAqLwotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9RVUFSVEVSCTB4MDgwMDAJLyogUXVhcnRlciByYXRlIGNoYW5uZWwgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fSFQyMAkweDEwMDAwCS8qIEhUIDIwIGNoYW5uZWwgKi8KLSNkZWZpbmUJSUVFRTgwMjExX0NIQU5fSFQ0MFUJMHgyMDAwMAkvKiBIVCA0MCBjaGFubmVsIHcvIGV4dCBhYm92ZSAqLwotI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9IVDQwRAkweDQwMDAwCS8qIEhUIDQwIGNoYW5uZWwgdy8gZXh0IGJlbG93ICovCi0KLS8qIFVzZWZ1bCBjb21iaW5hdGlvbnMgb2YgY2hhbm5lbCBjaGFyYWN0ZXJpc3RpY3MsIGJvcnJvd2VkIGZyb20gRXRoZXJlYWwgKi8KLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5fQSBcCi0gICAgICAgIChJRUVFODAyMTFfQ0hBTl81R0haIHwgSUVFRTgwMjExX0NIQU5fT0ZETSkKLSNkZWZpbmUgSUVFRTgwMjExX0NIQU5fQiBcCi0gICAgICAgIChJRUVFODAyMTFfQ0hBTl8yR0haIHwgSUVFRTgwMjExX0NIQU5fQ0NLKQotI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9HIFwKLSAgICAgICAgKElFRUU4MDIxMV9DSEFOXzJHSFogfCBJRUVFODAyMTFfQ0hBTl9EWU4pCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOX1RBIFwKLSAgICAgICAgKElFRUU4MDIxMV9DSEFOXzVHSFogfCBJRUVFODAyMTFfQ0hBTl9PRkRNIHwgSUVFRTgwMjExX0NIQU5fVFVSQk8pCi0jZGVmaW5lIElFRUU4MDIxMV9DSEFOX1RHIFwKLSAgICAgICAgKElFRUU4MDIxMV9DSEFOXzJHSFogfCBJRUVFODAyMTFfQ0hBTl9EWU4gIHwgSUVFRTgwMjExX0NIQU5fVFVSQk8pCi0KLQotLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUyAqLwotI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9DRlAJMHgwMQkvKiBzZW50L3JlY2VpdmVkCi0JCQkJCQkgKiBkdXJpbmcgQ0ZQCi0JCQkJCQkgKi8KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkUJMHgwMgkvKiBzZW50L3JlY2VpdmVkCi0JCQkJCQkgKiB3aXRoIHNob3J0Ci0JCQkJCQkgKiBwcmVhbWJsZQotCQkJCQkJICovCi0jZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX1dFUAkweDA0CS8qIHNlbnQvcmVjZWl2ZWQKLQkJCQkJCSAqIHdpdGggV0VQIGVuY3J5cHRpb24KLQkJCQkJCSAqLwotI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHCTB4MDgJLyogc2VudC9yZWNlaXZlZAotCQkJCQkJICogd2l0aCBmcmFnbWVudGF0aW9uCi0JCQkJCQkgKi8KLSNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRkNTCTB4MTAJLyogZnJhbWUgaW5jbHVkZXMgRkNTICovCi0jZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0RBVEFQQUQJMHgyMAkvKiBmcmFtZSBoYXMgcGFkZGluZyBiZXR3ZWVuCi0JCQkJCQkgKiA4MDIuMTEgaGVhZGVyIGFuZCBwYXlsb2FkCi0JCQkJCQkgKiAodG8gMzItYml0IGJvdW5kYXJ5KQotCQkJCQkJICovCi0jZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0JBREZDUwkweDQwCS8qIGRvZXMgbm90IHBhc3MgRkNTIGNoZWNrICovCi0KLS8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfUlhfRkxBR1MgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0ZfUlhfQkFERkNTCTB4MDAwMQkvKiBmcmFtZSBmYWlsZWQgY3JjIGNoZWNrICovCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX1BMQ1BfQ1JDCTB4MDAwMgkvKiBmcmFtZSBmYWlsZWQgUExDUCBDUkMgY2hlY2sgKi8KLQotLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9NQ1Mga25vd24gKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfS05PV04JCTB4MDEKLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19NQ1NfSU5ERVhfS05PV04JCTB4MDIJLyogTUNTIGluZGV4IGZpZWxkICovCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfR1VBUkRfSU5URVJWQUxfS05PV04JMHgwNAotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0hUX0ZPUk1BVF9LTk9XTgkJMHgwOAotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0ZFQ19UWVBFX0tOT1dOCQkweDEwCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU1RCQ19LTk9XTgkJMHgyMAotCi0vKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX01DUyBmbGFncyAqLwotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0JBTkRXSURUSF9NQVNLCTB4MDMKLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfMjAJMAotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0JBTkRXSURUSF80MAkxCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIXzIwTAkyCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIXzIwVQkzCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU0hPUlRfR0kJCTB4MDQgLyogc2hvcnQgZ3VhcmQgaW50ZXJ2YWwgKi8KLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19IVF9HUkVFTkZJRUxECTB4MDgKLSNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19GRUNfTERQQwkJMHgxMAotI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfTUFTSwkweDYwCi0jZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMQkxCi0jZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMgkyCi0jZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMwkzCi0jZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU1RCQ19TSElGVAk1Ci0KLXN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfDgwMi4xMV0iOwotCi0vKiBSYWRpb3RhcCBzdGF0ZSAqLwotLyogIFRoaXMgaXMgdXNlZCB0byBzYXZlIHN0YXRlIHdoZW4gcGFyc2luZy9wcm9jZXNzaW5nIHBhcmFtZXRlcnMgKi8KLXN0cnVjdCByYWRpb3RhcF9zdGF0ZQotewotCXVpbnQzMl90CXByZXNlbnQ7Ci0KLQl1aW50OF90CQlyYXRlOwotfTsKLQogI2RlZmluZSBQUklOVF9TU0lEKHApIFwKIAlpZiAocC5zc2lkX3ByZXNlbnQpIHsgXAogCQlORF9QUklOVCgobmRvLCAiICgiKSk7IFwKQEAgLTEyODMsNyArOTg4LDcgQEAKIAkJcmV0dXJuIDA7CiAJaXYgPSBFWFRSQUNUX0xFXzMyQklUUyhwKTsKIAotCU5EX1BSSU5UKChuZG8sICJEYXRhIElWOiUzeCBQYWQgJXggS2V5SUQgJXgiLCBJVl9JVihpdiksIElWX1BBRChpdiksCisJTkRfUFJJTlQoKG5kbywgIiBJVjolM3ggUGFkICV4IEtleUlEICV4IiwgSVZfSVYoaXYpLCBJVl9QQUQoaXYpLAogCSAgICBJVl9LRVlJRChpdikpKTsKIAogCXJldHVybiAxOwpAQCAtMTgwMSw3ICsxNTA2LDcgQEAKIAogc3RhdGljIGludAogaGFuZGxlX2RlYXV0aChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IG1nbXRfaGVhZGVyX3QgKnBtaCwgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgpCisgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgpCiB7CiAJc3RydWN0IG1nbXRfYm9keV90ICBwYm9keTsKIAljb25zdCBjaGFyICpyZWFzb24gPSBOVUxMOwpAQCAtMTgyMSw3ICsxNTI2LDcgQEAKIAlpZiAobmRvLT5uZG9fZWZsYWcpIHsKIAkJTkRfUFJJTlQoKG5kbywgIjogJXMiLCByZWFzb24pKTsKIAl9IGVsc2UgewotCQlORF9QUklOVCgobmRvLCAiICglcyk6ICVzIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIHBtaC0+c2EpLCByZWFzb24pKTsKKwkJTkRfUFJJTlQoKG5kbywgIiAoJXMpOiAlcyIsIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBzcmMpLCByZWFzb24pKTsKIAl9CiAJcmV0dXJuIDE7CiB9CkBAIC0xODg2LDcgKzE1OTEsNyBAQAogCiBzdGF0aWMgaW50CiBoYW5kbGVfYWN0aW9uKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgbWdtdF9oZWFkZXJfdCAqcG1oLCBjb25zdCB1X2NoYXIgKnAsIHVfaW50IGxlbmd0aCkKKyAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqc3JjLCBjb25zdCB1X2NoYXIgKnAsIHVfaW50IGxlbmd0aCkKIHsKIAlpZiAoIU5EX1RURVNUMigqcCwgMikpCiAJCXJldHVybiAwOwpAQCAtMTg5NSw3ICsxNjAwLDcgQEAKIAlpZiAobmRvLT5uZG9fZWZsYWcpIHsKIAkJTkRfUFJJTlQoKG5kbywgIjogIikpOwogCX0gZWxzZSB7Ci0JCU5EX1BSSU5UKChuZG8sICIgKCVzKTogIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIHBtaC0+c2EpKSk7CisJCU5EX1BSSU5UKChuZG8sICIgKCVzKTogIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIHNyYykpKTsKIAl9CiAJc3dpdGNoIChwWzBdKSB7CiAJY2FzZSAwOiBORF9QUklOVCgobmRvLCAiU3BlY3RydW0gTWFuYWdlbWVudCBBY3QjJWQiLCBwWzFdKSk7IGJyZWFrOwpAQCAtMTkyNiwxMCArMTYzMSwxMyBAQAogCiBzdGF0aWMgaW50CiBtZ210X2JvZHlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgdWludDE2X3QgZmMsIGNvbnN0IHN0cnVjdCBtZ210X2hlYWRlcl90ICpwbWgsCi0gICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgpCisgICAgICAgICAgICAgICAgdWludDE2X3QgZmMsIGNvbnN0IHVpbnQ4X3QgKnNyYywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgpCiB7CiAJTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihzdF9zdHIsICJVbmhhbmRsZWQgTWFuYWdlbWVudCBzdWJ0eXBlKCV4KSIsIEZDX1NVQlRZUEUoZmMpKSkpOworCisJLyogVGhlcmUgbWF5IGJlIGEgcHJvYmxlbSB3LyBBUCBub3QgaGF2aW5nIHRoaXMgYml0IHNldCAqLworCWlmIChGQ19QUk9URUNURUQoZmMpKQorCQlyZXR1cm4gd2VwX3ByaW50KG5kbywgcCk7CiAJc3dpdGNoIChGQ19TVUJUWVBFKGZjKSkgewogCWNhc2UgU1RfQVNTT0NfUkVRVUVTVDoKIAkJcmV0dXJuIGhhbmRsZV9hc3NvY19yZXF1ZXN0KG5kbywgcCwgbGVuZ3RoKTsKQEAgLTE5NTAsMTcgKzE2NTgsMTEgQEAKIAljYXNlIFNUX0RJU0FTU09DOgogCQlyZXR1cm4gaGFuZGxlX2Rpc2Fzc29jKG5kbywgcCwgbGVuZ3RoKTsKIAljYXNlIFNUX0FVVEg6Ci0JCWlmICghTkRfVFRFU1QyKCpwLCAzKSkKLQkJCXJldHVybiAwOwotCQlpZiAoKHBbMF0gPT0gMCApICYmIChwWzFdID09IDApICYmIChwWzJdID09IDApKSB7Ci0JCQlORF9QUklOVCgobmRvLCAiQXV0aGVudGljYXRpb24gKFNoYXJlZC1LZXkpLTMgIikpOwotCQkJcmV0dXJuIHdlcF9wcmludChuZG8sIHApOwotCQl9CiAJCXJldHVybiBoYW5kbGVfYXV0aChuZG8sIHAsIGxlbmd0aCk7CiAJY2FzZSBTVF9ERUFVVEg6Ci0JCXJldHVybiBoYW5kbGVfZGVhdXRoKG5kbywgcG1oLCBwLCBsZW5ndGgpOworCQlyZXR1cm4gaGFuZGxlX2RlYXV0aChuZG8sIHNyYywgcCwgbGVuZ3RoKTsKIAljYXNlIFNUX0FDVElPTjoKLQkJcmV0dXJuIGhhbmRsZV9hY3Rpb24obmRvLCBwbWgsIHAsIGxlbmd0aCk7CisJCXJldHVybiBoYW5kbGVfYWN0aW9uKG5kbywgc3JjLCBwLCBsZW5ndGgpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAxOwogCX0KQEAgLTE5ODUsNjggKzE2ODcsNjQgQEAKIAkJCXJldHVybiAwOwogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQogCQkJTkRfUFJJTlQoKG5kbywgIiBSQTolcyBUQTolcyBDVEwoJXgpIFNFUSgldSkgIiwKLQkJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9iYXJfdCAqKXApLT5yYSksCi0JCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfYmFyX3QgKilwKS0+dGEpLAotCQkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKCYoKChjb25zdCBzdHJ1Y3QgY3RybF9iYXJfdCAqKXApLT5jdGwpKSwKLQkJCSAgICBFWFRSQUNUX0xFXzE2QklUUygmKCgoY29uc3Qgc3RydWN0IGN0cmxfYmFyX3QgKilwKS0+c2VxKSkpKTsKKwkJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9iYXJfaGRyX3QgKilwKS0+cmEpLAorCQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl9oZHJfdCAqKXApLT50YSksCisJCQkgICAgRVhUUkFDVF9MRV8xNkJJVFMoJigoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl9oZHJfdCAqKXApLT5jdGwpKSwKKwkJCSAgICBFWFRSQUNUX0xFXzE2QklUUygmKCgoY29uc3Qgc3RydWN0IGN0cmxfYmFyX2hkcl90ICopcCktPnNlcSkpKSk7CiAJCWJyZWFrOwogCWNhc2UgQ1RSTF9CQToKIAkJaWYgKCFORF9UVEVTVDIoKnAsIENUUkxfQkFfSERSTEVOKSkKIAkJCXJldHVybiAwOwogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQogCQkJTkRfUFJJTlQoKG5kbywgIiBSQTolcyAiLAotCQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2JhX3QgKilwKS0+cmEpKSk7CisJCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfYmFfaGRyX3QgKilwKS0+cmEpKSk7CiAJCWJyZWFrOwogCWNhc2UgQ1RSTF9QU19QT0xMOgogCQlpZiAoIU5EX1RURVNUMigqcCwgQ1RSTF9QU19QT0xMX0hEUkxFTikpCiAJCQlyZXR1cm4gMDsKIAkJTkRfUFJJTlQoKG5kbywgIiBBSUQoJXgpIiwKLQkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKCYoKChjb25zdCBzdHJ1Y3QgY3RybF9wc19wb2xsX3QgKilwKS0+YWlkKSkpKTsKKwkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKCYoKChjb25zdCBzdHJ1Y3QgY3RybF9wc19wb2xsX2hkcl90ICopcCktPmFpZCkpKSk7CiAJCWJyZWFrOwogCWNhc2UgQ1RSTF9SVFM6CiAJCWlmICghTkRfVFRFU1QyKCpwLCBDVFJMX1JUU19IRFJMRU4pKQogCQkJcmV0dXJuIDA7CiAJCWlmICghbmRvLT5uZG9fZWZsYWcpCiAJCQlORF9QUklOVCgobmRvLCAiIFRBOiVzICIsCi0JCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfcnRzX3QgKilwKS0+dGEpKSk7CisJCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfcnRzX2hkcl90ICopcCktPnRhKSkpOwogCQlicmVhazsKIAljYXNlIENUUkxfQ1RTOgogCQlpZiAoIU5EX1RURVNUMigqcCwgQ1RSTF9DVFNfSERSTEVOKSkKIAkJCXJldHVybiAwOwogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQogCQkJTkRfUFJJTlQoKG5kbywgIiBSQTolcyAiLAotCQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2N0c190ICopcCktPnJhKSkpOworCQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2N0c19oZHJfdCAqKXApLT5yYSkpKTsKIAkJYnJlYWs7CiAJY2FzZSBDVFJMX0FDSzoKIAkJaWYgKCFORF9UVEVTVDIoKnAsIENUUkxfQUNLX0hEUkxFTikpCiAJCQlyZXR1cm4gMDsKIAkJaWYgKCFuZG8tPm5kb19lZmxhZykKIAkJCU5EX1BSSU5UKChuZG8sICIgUkE6JXMgIiwKLQkJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9hY2tfdCAqKXApLT5yYSkpKTsKKwkJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9hY2tfaGRyX3QgKilwKS0+cmEpKSk7CiAJCWJyZWFrOwogCWNhc2UgQ1RSTF9DRl9FTkQ6CiAJCWlmICghTkRfVFRFU1QyKCpwLCBDVFJMX0VORF9IRFJMRU4pKQogCQkJcmV0dXJuIDA7CiAJCWlmICghbmRvLT5uZG9fZWZsYWcpCiAJCQlORF9QUklOVCgobmRvLCAiIFJBOiVzICIsCi0JCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfZW5kX3QgKilwKS0+cmEpKSk7CisJCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfZW5kX2hkcl90ICopcCktPnJhKSkpOwogCQlicmVhazsKIAljYXNlIENUUkxfRU5EX0FDSzoKIAkJaWYgKCFORF9UVEVTVDIoKnAsIENUUkxfRU5EX0FDS19IRFJMRU4pKQogCQkJcmV0dXJuIDA7CiAJCWlmICghbmRvLT5uZG9fZWZsYWcpCiAJCQlORF9QUklOVCgobmRvLCAiIFJBOiVzICIsCi0JCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfZW5kX2Fja190ICopcCktPnJhKSkpOworCQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2VuZF9hY2tfaGRyX3QgKilwKS0+cmEpKSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMTsKIH0KIAogLyoKLSAqIFByaW50IEhlYWRlciBmdW5jcwotICovCi0KLS8qCiAgKiAgRGF0YSBGcmFtZSAtIEFkZHJlc3MgZmllbGQgY29udGVudHMKICAqCiAgKiAgVG8gRHMgIHwgRnJvbSBEUyB8IEFkZHIgMSB8IEFkZHIgMiB8IEFkZHIgMyB8IEFkZHIgNApAQCAtMjA1NiwxMCArMTc1NCw2MyBAQAogICogICAgMSAgICB8ICAxICAgICAgfCAgUkEgICAgfCBUQSAgICAgfCBEQSAgICAgfCBTQQogICovCiAKKy8qCisgKiBGdW5jdGlvbiB0byBnZXQgc291cmNlIGFuZCBkZXN0aW5hdGlvbiBNQUMgYWRkcmVzc2VzIGZvciBhIGRhdGEgZnJhbWUuCisgKi8KIHN0YXRpYyB2b2lkCi1kYXRhX2hlYWRlcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGZjLCBjb25zdCB1X2NoYXIgKnAsIGNvbnN0IHVpbnQ4X3QgKipzcmNwLAotICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKmRzdHApCitnZXRfZGF0YV9zcmNfZHN0X21hYyh1aW50MTZfdCBmYywgY29uc3QgdV9jaGFyICpwLCBjb25zdCB1aW50OF90ICoqc3JjcCwKKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipkc3RwKQoreworI2RlZmluZSBBRERSMSAgKHAgKyA0KQorI2RlZmluZSBBRERSMiAgKHAgKyAxMCkKKyNkZWZpbmUgQUREUjMgIChwICsgMTYpCisjZGVmaW5lIEFERFI0ICAocCArIDI0KQorCisJaWYgKCFGQ19UT19EUyhmYykpIHsKKwkJaWYgKCFGQ19GUk9NX0RTKGZjKSkgeworCQkJLyogbm90IFRvIERTIGFuZCBub3QgRnJvbSBEUyAqLworCQkJKnNyY3AgPSBBRERSMjsKKwkJCSpkc3RwID0gQUREUjE7CisJCX0gZWxzZSB7CisJCQkvKiBub3QgVG8gRFMgYW5kIEZyb20gRFMgKi8KKwkJCSpzcmNwID0gQUREUjM7CisJCQkqZHN0cCA9IEFERFIxOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKCFGQ19GUk9NX0RTKGZjKSkgeworCQkJLyogRnJvbSBEUyBhbmQgbm90IFRvIERTICovCisJCQkqc3JjcCA9IEFERFIyOworCQkJKmRzdHAgPSBBRERSMzsKKwkJfSBlbHNlIHsKKwkJCS8qIFRvIERTIGFuZCBGcm9tIERTICovCisJCQkqc3JjcCA9IEFERFI0OworCQkJKmRzdHAgPSBBRERSMzsKKwkJfQorCX0KKworI3VuZGVmIEFERFIxCisjdW5kZWYgQUREUjIKKyN1bmRlZiBBRERSMworI3VuZGVmIEFERFI0Cit9CisKK3N0YXRpYyB2b2lkCitnZXRfbWdtdF9zcmNfZHN0X21hYyhjb25zdCB1X2NoYXIgKnAsIGNvbnN0IHVpbnQ4X3QgKipzcmNwLCBjb25zdCB1aW50OF90ICoqZHN0cCkKK3sKKwljb25zdCBzdHJ1Y3QgbWdtdF9oZWFkZXJfdCAqaHAgPSAoY29uc3Qgc3RydWN0IG1nbXRfaGVhZGVyX3QgKikgcDsKKworCWlmIChzcmNwICE9IE5VTEwpCisJCSpzcmNwID0gaHAtPnNhOworCWlmIChkc3RwICE9IE5VTEwpCisJCSpkc3RwID0gaHAtPmRhOworfQorCisvKgorICogUHJpbnQgSGVhZGVyIGZ1bmNzCisgKi8KKworc3RhdGljIHZvaWQKK2RhdGFfaGVhZGVyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1aW50MTZfdCBmYywgY29uc3QgdV9jaGFyICpwKQogewogCXVfaW50IHN1YnR5cGUgPSBGQ19TVUJUWVBFKGZjKTsKIApAQCAtMjA4Niw0MiArMTgzNywxOCBAQAogI2RlZmluZSBBRERSNCAgKHAgKyAyNCkKIAogCWlmICghRkNfVE9fRFMoZmMpICYmICFGQ19GUk9NX0RTKGZjKSkgewotCQlpZiAoc3JjcCAhPSBOVUxMKQotCQkJKnNyY3AgPSBBRERSMjsKLQkJaWYgKGRzdHAgIT0gTlVMTCkKLQkJCSpkc3RwID0gQUREUjE7Ci0JCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQlyZXR1cm47CiAJCU5EX1BSSU5UKChuZG8sICJEQTolcyBTQTolcyBCU1NJRDolcyAiLAogCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIEFERFIxKSwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIEFERFIyKSwKIAkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBBRERSMykpKTsKIAl9IGVsc2UgaWYgKCFGQ19UT19EUyhmYykgJiYgRkNfRlJPTV9EUyhmYykpIHsKLQkJaWYgKHNyY3AgIT0gTlVMTCkKLQkJCSpzcmNwID0gQUREUjM7Ci0JCWlmIChkc3RwICE9IE5VTEwpCi0JCQkqZHN0cCA9IEFERFIxOwotCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJcmV0dXJuOwogCQlORF9QUklOVCgobmRvLCAiREE6JXMgQlNTSUQ6JXMgU0E6JXMgIiwKIAkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBBRERSMSksIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBBRERSMiksCiAJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgQUREUjMpKSk7CiAJfSBlbHNlIGlmIChGQ19UT19EUyhmYykgJiYgIUZDX0ZST01fRFMoZmMpKSB7Ci0JCWlmIChzcmNwICE9IE5VTEwpCi0JCQkqc3JjcCA9IEFERFIyOwotCQlpZiAoZHN0cCAhPSBOVUxMKQotCQkJKmRzdHAgPSBBRERSMzsKLQkJaWYgKCFuZG8tPm5kb19lZmxhZykKLQkJCXJldHVybjsKIAkJTkRfUFJJTlQoKG5kbywgIkJTU0lEOiVzIFNBOiVzIERBOiVzICIsCiAJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgQUREUjEpLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgQUREUjIpLAogCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIEFERFIzKSkpOwogCX0gZWxzZSBpZiAoRkNfVE9fRFMoZmMpICYmIEZDX0ZST01fRFMoZmMpKSB7Ci0JCWlmIChzcmNwICE9IE5VTEwpCi0JCQkqc3JjcCA9IEFERFI0OwotCQlpZiAoZHN0cCAhPSBOVUxMKQotCQkJKmRzdHAgPSBBRERSMzsKLQkJaWYgKCFuZG8tPm5kb19lZmxhZykKLQkJCXJldHVybjsKIAkJTkRfUFJJTlQoKG5kbywgIlJBOiVzIFRBOiVzIERBOiVzIFNBOiVzICIsCiAJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgQUREUjEpLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgQUREUjIpLAogCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIEFERFIzKSwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIEFERFI0KSkpOwpAQCAtMjEzNCw3NyArMTg2MSw2MCBAQAogfQogCiBzdGF0aWMgdm9pZAotbWdtdF9oZWFkZXJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnAsIGNvbnN0IHVpbnQ4X3QgKipzcmNwLCBjb25zdCB1aW50OF90ICoqZHN0cCkKK21nbXRfaGVhZGVyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKnApCiB7CiAJY29uc3Qgc3RydWN0IG1nbXRfaGVhZGVyX3QgKmhwID0gKGNvbnN0IHN0cnVjdCBtZ210X2hlYWRlcl90ICopIHA7CiAKLQlpZiAoc3JjcCAhPSBOVUxMKQotCQkqc3JjcCA9IGhwLT5zYTsKLQlpZiAoZHN0cCAhPSBOVUxMKQotCQkqZHN0cCA9IGhwLT5kYTsKLQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQlyZXR1cm47Ci0KIAlORF9QUklOVCgobmRvLCAiQlNTSUQ6JXMgREE6JXMgU0E6JXMgIiwKIAkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIChocCktPmJzc2lkKSwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIChocCktPmRhKSwKIAkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIChocCktPnNhKSkpOwogfQogCiBzdGF0aWMgdm9pZAotY3RybF9oZWFkZXJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgICB1aW50MTZfdCBmYywgY29uc3QgdV9jaGFyICpwLCBjb25zdCB1aW50OF90ICoqc3JjcCwKLSAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipkc3RwKQorY3RybF9oZWFkZXJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVpbnQxNl90IGZjLCBjb25zdCB1X2NoYXIgKnApCiB7Ci0JaWYgKHNyY3AgIT0gTlVMTCkKLQkJKnNyY3AgPSBOVUxMOwotCWlmIChkc3RwICE9IE5VTEwpCi0JCSpkc3RwID0gTlVMTDsKLQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQlyZXR1cm47Ci0KIAlzd2l0Y2ggKEZDX1NVQlRZUEUoZmMpKSB7CiAJY2FzZSBDVFJMX0JBUjoKIAkJTkRfUFJJTlQoKG5kbywgIiBSQTolcyBUQTolcyBDVEwoJXgpIFNFUSgldSkgIiwKLQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl90ICopcCktPnJhKSwKLQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl90ICopcCktPnRhKSwKLQkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKCYoKChjb25zdCBzdHJ1Y3QgY3RybF9iYXJfdCAqKXApLT5jdGwpKSwKLQkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKCYoKChjb25zdCBzdHJ1Y3QgY3RybF9iYXJfdCAqKXApLT5zZXEpKSkpOworCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfYmFyX2hkcl90ICopcCktPnJhKSwKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl9oZHJfdCAqKXApLT50YSksCisJCSAgICBFWFRSQUNUX0xFXzE2QklUUygmKCgoY29uc3Qgc3RydWN0IGN0cmxfYmFyX2hkcl90ICopcCktPmN0bCkpLAorCQkgICAgRVhUUkFDVF9MRV8xNkJJVFMoJigoKGNvbnN0IHN0cnVjdCBjdHJsX2Jhcl9oZHJfdCAqKXApLT5zZXEpKSkpOwogCQlicmVhazsKIAljYXNlIENUUkxfQkE6CiAJCU5EX1BSSU5UKChuZG8sICJSQTolcyAiLAotCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfYmFfdCAqKXApLT5yYSkpKTsKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2JhX2hkcl90ICopcCktPnJhKSkpOwogCQlicmVhazsKIAljYXNlIENUUkxfUFNfUE9MTDoKIAkJTkRfUFJJTlQoKG5kbywgIkJTU0lEOiVzIFRBOiVzICIsCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9wc19wb2xsX3QgKilwKS0+YnNzaWQpLAotCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfcHNfcG9sbF90ICopcCktPnRhKSkpOworCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfcHNfcG9sbF9oZHJfdCAqKXApLT5ic3NpZCksCisJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9wc19wb2xsX2hkcl90ICopcCktPnRhKSkpOwogCQlicmVhazsKIAljYXNlIENUUkxfUlRTOgogCQlORF9QUklOVCgobmRvLCAiUkE6JXMgVEE6JXMgIiwKLQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX3J0c190ICopcCktPnJhKSwKLQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX3J0c190ICopcCktPnRhKSkpOworCQkgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sICgoY29uc3Qgc3RydWN0IGN0cmxfcnRzX2hkcl90ICopcCktPnJhKSwKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX3J0c19oZHJfdCAqKXApLT50YSkpKTsKIAkJYnJlYWs7CiAJY2FzZSBDVFJMX0NUUzoKIAkJTkRfUFJJTlQoKG5kbywgIlJBOiVzICIsCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9jdHNfdCAqKXApLT5yYSkpKTsKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2N0c19oZHJfdCAqKXApLT5yYSkpKTsKIAkJYnJlYWs7CiAJY2FzZSBDVFJMX0FDSzoKIAkJTkRfUFJJTlQoKG5kbywgIlJBOiVzICIsCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9hY2tfdCAqKXApLT5yYSkpKTsKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2Fja19oZHJfdCAqKXApLT5yYSkpKTsKIAkJYnJlYWs7CiAJY2FzZSBDVFJMX0NGX0VORDoKIAkJTkRfUFJJTlQoKG5kbywgIlJBOiVzIEJTU0lEOiVzICIsCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9lbmRfdCAqKXApLT5yYSksCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9lbmRfdCAqKXApLT5ic3NpZCkpKTsKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2VuZF9oZHJfdCAqKXApLT5yYSksCisJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9lbmRfaGRyX3QgKilwKS0+YnNzaWQpKSk7CiAJCWJyZWFrOwogCWNhc2UgQ1RSTF9FTkRfQUNLOgogCQlORF9QUklOVCgobmRvLCAiUkE6JXMgQlNTSUQ6JXMgIiwKLQkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2VuZF9hY2tfdCAqKXApLT5yYSksCi0JCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9lbmRfYWNrX3QgKilwKS0+YnNzaWQpKSk7CisJCSAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgKChjb25zdCBzdHJ1Y3QgY3RybF9lbmRfYWNrX2hkcl90ICopcCktPnJhKSwKKwkJICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCAoKGNvbnN0IHN0cnVjdCBjdHJsX2VuZF9hY2tfaGRyX3QgKilwKS0+YnNzaWQpKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCU5EX1BSSU5UKChuZG8sICIoSCkgVW5rbm93biBDdHJsIFN1YnR5cGUiKSk7CisJCS8qIFdlIHNob3VsZG4ndCBnZXQgaGVyZSAtIHdlIHNob3VsZCBhbHJlYWR5IGhhdmUgcXVpdCAqLwogCQlicmVhazsKIAl9CiB9CkBAIC0yMjIwLDggKzE5MzAsMTIgQEAKIAkJcmV0dXJuIE1HTVRfSERSTEVOOwogCWNhc2UgVF9DVFJMOgogCQlzd2l0Y2ggKEZDX1NVQlRZUEUoZmMpKSB7CisJCWNhc2UgQ1RSTF9DT05UUk9MX1dSQVBQRVI6CisJCQlyZXR1cm4gQ1RSTF9DT05UUk9MX1dSQVBQRVJfSERSTEVOOwogCQljYXNlIENUUkxfQkFSOgogCQkJcmV0dXJuIENUUkxfQkFSX0hEUkxFTjsKKwkJY2FzZSBDVFJMX0JBOgorCQkJcmV0dXJuIENUUkxfQkFfSERSTEVOOwogCQljYXNlIENUUkxfUFNfUE9MTDoKIAkJCXJldHVybiBDVFJMX1BTX1BPTExfSERSTEVOOwogCQljYXNlIENUUkxfUlRTOgpAQCAtMjIzNSw2ICsxOTQ5LDcgQEAKIAkJY2FzZSBDVFJMX0VORF9BQ0s6CiAJCQlyZXR1cm4gQ1RSTF9FTkRfQUNLX0hEUkxFTjsKIAkJZGVmYXVsdDoKKwkJCU5EX1BSSU5UKChuZG8sICJ1bmtub3duIDgwMi4xMSBjdHJsIGZyYW1lIHN1YnR5cGUgKCVkKSIsIEZDX1NVQlRZUEUoZmMpKSk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCWNhc2UgVF9EQVRBOgpAQCAtMjI0Myw3ICsxOTU4LDcgQEAKIAkJCWxlbiArPSAyOwogCQlyZXR1cm4gbGVuOwogCWRlZmF1bHQ6Ci0JCU5EX1BSSU5UKChuZG8sICJ1bmtub3duIElFRUU4MDIuMTEgZnJhbWUgdHlwZSAoJWQpIiwgRkNfVFlQRShmYykpKTsKKwkJTkRfUFJJTlQoKG5kbywgInVua25vd24gODAyLjExIGZyYW1lIHR5cGUgKCVkKSIsIEZDX1RZUEUoZmMpKSk7CiAJCXJldHVybiAwOwogCX0KIH0KQEAgLTIyNTUsMTUgKzE5NzAsMTIgQEAKIH0KIAogLyoKLSAqIFByaW50IHRoZSA4MDIuMTEgTUFDIGhlYWRlciBpZiBlZmxhZyBpcyBzZXQsIGFuZCBzZXQgIipzcmNwIiBhbmQgIipkc3RwIgotICogdG8gcG9pbnQgdG8gdGhlIHNvdXJjZSBhbmQgZGVzdGluYXRpb24gTUFDIGFkZHJlc3NlcyBpbiBhbnkgY2FzZSBpZgotICogInNyY3AiIGFuZCAiZHN0cCIgYXJlbid0IG51bGwuCisgKiBQcmludCB0aGUgODAyLjExIE1BQyBoZWFkZXIuCiAgKi8KIHN0YXRpYyB2b2lkCiBpZWVlXzgwMl8xMV9oZHJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgICAgICAgdWludDE2X3QgZmMsIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgaGRybGVuLAotICAgICAgICAgICAgICAgICAgICAgIHVfaW50IG1lc2hkcmxlbiwgY29uc3QgdWludDhfdCAqKnNyY3AsCi0gICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqKmRzdHApCisgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgbWVzaGRybGVuKQogewogCWlmIChuZG8tPm5kb192ZmxhZykgewogCQlpZiAoRkNfTU9SRV9EQVRBKGZjKSkKQEAgLTIyNzYsOCArMTk4OCw4IEBACiAJCQlORF9QUklOVCgobmRvLCAiUmV0cnkgIikpOwogCQlpZiAoRkNfT1JERVIoZmMpKQogCQkJTkRfUFJJTlQoKG5kbywgIlN0cmljdGx5IE9yZGVyZWQgIikpOwotCQlpZiAoRkNfV0VQKGZjKSkKLQkJCU5EX1BSSU5UKChuZG8sICJXRVAgRW5jcnlwdGVkICIpKTsKKwkJaWYgKEZDX1BST1RFQ1RFRChmYykpCisJCQlORF9QUklOVCgobmRvLCAiUHJvdGVjdGVkICIpKTsKIAkJaWYgKEZDX1RZUEUoZmMpICE9IFRfQ1RSTCB8fCBGQ19TVUJUWVBFKGZjKSAhPSBDVFJMX1BTX1BPTEwpCiAJCQlORF9QUklOVCgobmRvLCAiJWR1cyAiLAogCQkJICAgIEVYVFJBQ1RfTEVfMTZCSVRTKApAQCAtMjMwMSwxOSArMjAxMywxNSBAQAogCiAJc3dpdGNoIChGQ19UWVBFKGZjKSkgewogCWNhc2UgVF9NR01UOgotCQltZ210X2hlYWRlcl9wcmludChuZG8sIHAsIHNyY3AsIGRzdHApOworCQltZ210X2hlYWRlcl9wcmludChuZG8sIHApOwogCQlicmVhazsKIAljYXNlIFRfQ1RSTDoKLQkJY3RybF9oZWFkZXJfcHJpbnQobmRvLCBmYywgcCwgc3JjcCwgZHN0cCk7CisJCWN0cmxfaGVhZGVyX3ByaW50KG5kbywgZmMsIHApOwogCQlicmVhazsKIAljYXNlIFRfREFUQToKLQkJZGF0YV9oZWFkZXJfcHJpbnQobmRvLCBmYywgcCwgc3JjcCwgZHN0cCk7CisJCWRhdGFfaGVhZGVyX3ByaW50KG5kbywgZmMsIHApOwogCQlicmVhazsKIAlkZWZhdWx0OgotCQlORF9QUklOVCgobmRvLCAiKGhlYWRlcikgdW5rbm93biBJRUVFODAyLjExIGZyYW1lIHR5cGUgKCVkKSIsCi0JCSAgICBGQ19UWVBFKGZjKSkpOwotCQkqc3JjcCA9IE5VTEw7Ci0JCSpkc3RwID0gTlVMTDsKIAkJYnJlYWs7CiAJfQogfQpAQCAtMjMyMiw2ICsyMDMwLDggQEAKICNkZWZpbmUJcm91bmR1cDIoeCwgeSkJKCgoeCkrKCh5KS0xKSkmKH4oKHkpLTEpKSkgLyogaWYgeSBpcyBwb3dlcnMgb2YgdHdvICovCiAjZW5kaWYKIAorc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIlt8ODAyLjExXSI7CisKIHN0YXRpYyB1X2ludAogaWVlZTgwMl8xMV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IG9yaWdfY2FwbGVuLCBpbnQgcGFkLApAQCAtMjMyOSw4ICsyMDM5LDggQEAKIHsKIAl1aW50MTZfdCBmYzsKIAl1X2ludCBjYXBsZW4sIGhkcmxlbiwgbWVzaGRybGVuOwotCWNvbnN0IHVpbnQ4X3QgKnNyYywgKmRzdDsKLQl1X3Nob3J0IGV4dHJhY3RlZF9ldGhlcnR5cGU7CisJc3RydWN0IGxsYWRkcl9pbmZvIHNyYywgZHN0OworCWludCBsbGNfaGRybGVuOwogCiAJY2FwbGVuID0gb3JpZ19jYXBsZW47CiAJLyogUmVtb3ZlIEZDUywgaWYgcHJlc2VudCAqLwpAQCAtMjM1Myw2ICsyMDYzLDEwIEBACiAKIAlmYyA9IEVYVFJBQ1RfTEVfMTZCSVRTKHApOwogCWhkcmxlbiA9IGV4dHJhY3RfaGVhZGVyX2xlbmd0aChuZG8sIGZjKTsKKwlpZiAoaGRybGVuID09IDApIHsKKwkJLyogVW5rbm93biBmcmFtZSB0eXBlIG9yIGNvbnRyb2wgZnJhbWUgc3VidHlwZTsgcXVpdC4gKi8KKwkJcmV0dXJuICgwKTsKKwl9CiAJaWYgKHBhZCkKIAkJaGRybGVuID0gcm91bmR1cDIoaGRybGVuLCA0KTsKIAlpZiAobmRvLT5uZG9fSGZsYWcgJiYgRkNfVFlQRShmYykgPT0gVF9EQVRBICYmCkBAIC0yMzYyLDEzICsyMDc2LDEzIEBACiAJfSBlbHNlCiAJCW1lc2hkcmxlbiA9IDA7CiAKLQogCWlmIChjYXBsZW4gPCBoZHJsZW4pIHsKIAkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogCQlyZXR1cm4gaGRybGVuOwogCX0KIAotCWllZWVfODAyXzExX2hkcl9wcmludChuZG8sIGZjLCBwLCBoZHJsZW4sIG1lc2hkcmxlbiwgJnNyYywgJmRzdCk7CisJaWYgKG5kby0+bmRvX2VmbGFnKQorCQlpZWVlXzgwMl8xMV9oZHJfcHJpbnQobmRvLCBmYywgcCwgaGRybGVuLCBtZXNoZHJsZW4pOwogCiAJLyoKIAkgKiBHbyBwYXN0IHRoZSA4MDIuMTEgaGVhZGVyLgpAQCAtMjM3NywxMCArMjA5MSwxMiBAQAogCWNhcGxlbiAtPSBoZHJsZW47CiAJcCArPSBoZHJsZW47CiAKKwlzcmMuYWRkcl9zdHJpbmcgPSBldGhlcmFkZHJfc3RyaW5nOworCWRzdC5hZGRyX3N0cmluZyA9IGV0aGVyYWRkcl9zdHJpbmc7CiAJc3dpdGNoIChGQ19UWVBFKGZjKSkgewogCWNhc2UgVF9NR01UOgotCQlpZiAoIW1nbXRfYm9keV9wcmludChuZG8sIGZjLAotCQkgICAgKGNvbnN0IHN0cnVjdCBtZ210X2hlYWRlcl90ICopKHAgLSBoZHJsZW4pLCBwLCBsZW5ndGgpKSB7CisJCWdldF9tZ210X3NyY19kc3RfbWFjKHAgLSBoZHJsZW4sICZzcmMuYWRkciwgJmRzdC5hZGRyKTsKKwkJaWYgKCFtZ210X2JvZHlfcHJpbnQobmRvLCBmYywgc3JjLmFkZHIsIHAsIGxlbmd0aCkpIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIAkJCXJldHVybiBoZHJsZW47CiAJCX0KQEAgLTIzOTUsMzAgKzIxMTEsMjkgQEAKIAkJaWYgKERBVEFfRlJBTUVfSVNfTlVMTChGQ19TVUJUWVBFKGZjKSkpCiAJCQlyZXR1cm4gaGRybGVuOwkvKiBuby1kYXRhIGZyYW1lICovCiAJCS8qIFRoZXJlIG1heSBiZSBhIHByb2JsZW0gdy8gQVAgbm90IGhhdmluZyB0aGlzIGJpdCBzZXQgKi8KLQkJaWYgKEZDX1dFUChmYykpIHsKKwkJaWYgKEZDX1BST1RFQ1RFRChmYykpIHsKKwkJCU5EX1BSSU5UKChuZG8sICJEYXRhIikpOwogCQkJaWYgKCF3ZXBfcHJpbnQobmRvLCBwKSkgewogCQkJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIAkJCQlyZXR1cm4gaGRybGVuOwogCQkJfQotCQl9IGVsc2UgaWYgKGxsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuLCBkc3QsIHNyYywKLQkJICAgICZleHRyYWN0ZWRfZXRoZXJ0eXBlKSA9PSAwKSB7Ci0JCQkvKgotCQkJICogU29tZSBraW5kcyBvZiBMTEMgcGFja2V0IHdlIGNhbm5vdAotCQkJICogaGFuZGxlIGludGVsbGlnZW50bHkKLQkJCSAqLwotCQkJaWYgKCFuZG8tPm5kb19lZmxhZykKLQkJCQlpZWVlXzgwMl8xMV9oZHJfcHJpbnQobmRvLCBmYywgcCAtIGhkcmxlbiwgaGRybGVuLAotCQkJCSAgICBtZXNoZHJsZW4sIE5VTEwsIE5VTEwpOwotCQkJaWYgKGV4dHJhY3RlZF9ldGhlcnR5cGUpCi0JCQkJTkRfUFJJTlQoKG5kbywgIihMTEMgJXMpICIsCi0JCQkJICAgIGV0aGVycHJvdG9fc3RyaW5nKAotCQkJCSAgICAgICAgaHRvbnMoZXh0cmFjdGVkX2V0aGVydHlwZSkpKSk7Ci0JCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCi0JCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCX0gZWxzZSB7CisJCQlnZXRfZGF0YV9zcmNfZHN0X21hYyhmYywgcCAtIGhkcmxlbiwgJnNyYy5hZGRyLCAmZHN0LmFkZHIpOworCQkJbGxjX2hkcmxlbiA9IGxsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuLCAmc3JjLCAmZHN0KTsKKwkJCWlmIChsbGNfaGRybGVuIDwgMCkgeworCQkJCS8qCisJCQkJICogU29tZSBraW5kcyBvZiBMTEMgcGFja2V0IHdlIGNhbm5vdAorCQkJCSAqIGhhbmRsZSBpbnRlbGxpZ2VudGx5CisJCQkJICovCisJCQkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQorCQkJCQlORF9ERUZBVUxUUFJJTlQocCwgY2FwbGVuKTsKKwkJCQlsbGNfaGRybGVuID0gLWxsY19oZHJsZW47CisJCQl9CisJCQloZHJsZW4gKz0gbGxjX2hkcmxlbjsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlORF9QUklOVCgobmRvLCAidW5rbm93biA4MDIuMTEgZnJhbWUgdHlwZSAoJWQpIiwgRkNfVFlQRShmYykpKTsKKwkJLyogV2Ugc2hvdWxkbid0IGdldCBoZXJlIC0gd2Ugc2hvdWxkIGFscmVhZHkgaGF2ZSBxdWl0ICovCiAJCWJyZWFrOwogCX0KIApAQCAtMjQzOCw2ICsyMTUzLDM0OSBAQAogCXJldHVybiBpZWVlODAyXzExX3ByaW50KG5kbywgcCwgaC0+bGVuLCBoLT5jYXBsZW4sIDAsIDApOwogfQogCisKKy8qICRGcmVlQlNEOiBzcmMvc3lzL25ldDgwMjExL2llZWU4MDIxMV9yYWRpb3RhcC5oLHYgMS41IDIwMDUvMDEvMjIgMjA6MTI6MDUgc2FtIEV4cCAkICovCisvKiBOZXRCU0Q6IGllZWU4MDJfMTFfcmFkaW8uaCx2IDEuMiAyMDA2LzAyLzI2IDAzOjA0OjAzIGR5b3VuZyBFeHAgICovCisKKy8qLQorICogQ29weXJpZ2h0IChjKSAyMDAzLCAyMDA0IERhdmlkIFlvdW5nLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIERhdmlkIFlvdW5nIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUKKyAqICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqICAgIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIERBVklEIFlPVU5HIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQQorICogUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgREFWSUQKKyAqIFlPVU5HIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQKKyAqIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwKKyAqIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZCisgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZCisgKiBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBBIGdlbmVyaWMgcmFkaW8gY2FwdHVyZSBmb3JtYXQgaXMgZGVzaXJhYmxlLiBJdCBtdXN0IGJlCisgKiByaWdpZGx5IGRlZmluZWQgKGUuZy4sIHVuaXRzIGZvciBmaWVsZHMgc2hvdWxkIGJlIGdpdmVuKSwKKyAqIGFuZCBlYXNpbHkgZXh0ZW5zaWJsZS4KKyAqCisgKiBUaGUgZm9sbG93aW5nIGlzIGFuIGV4dGVuc2libGUgcmFkaW8gY2FwdHVyZSBmb3JtYXQuIEl0IGlzCisgKiBiYXNlZCBvbiBhIGJpdG1hcCBpbmRpY2F0aW5nIHdoaWNoIGZpZWxkcyBhcmUgcHJlc2VudC4KKyAqCisgKiBJIGFtIHRyeWluZyB0byBkZXNjcmliZSBwcmVjaXNlbHkgd2hhdCB0aGUgYXBwbGljYXRpb24gcHJvZ3JhbW1lcgorICogc2hvdWxkIGV4cGVjdCBpbiB0aGUgZm9sbG93aW5nLCBhbmQgZm9yIHRoYXQgcmVhc29uIEkgdGVsbCB0aGUKKyAqIHVuaXRzIGFuZCBvcmlnaW4gb2YgZWFjaCBtZWFzdXJlbWVudCAod2hlcmUgaXQgYXBwbGllcyksIG9yIGVsc2UgSQorICogdXNlIHN1ZmZpY2llbnRseSB3ZWFzZWxseSBsYW5ndWFnZSAoImlzIGEgbW9ub3RvbmljYWxseSBub25kZWNyZWFzaW5nCisgKiBmdW5jdGlvbiBvZi4uLiIpIHRoYXQgSSBjYW5ub3Qgc2V0IGZhbHNlIGV4cGVjdGF0aW9ucyBmb3IgbGF3eWVybHkKKyAqIHJlYWRlcnMuCisgKi8KKworLyoKKyAqIFRoZSByYWRpbyBjYXB0dXJlIGhlYWRlciBwcmVjZWRlcyB0aGUgODAyLjExIGhlYWRlci4KKyAqCisgKiBOb3RlIHdlbGw6IGFsbCByYWRpb3RhcCBmaWVsZHMgYXJlIGxpdHRsZS1lbmRpYW4uCisgKi8KK3N0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyIHsKKwl1aW50OF90CQlpdF92ZXJzaW9uOwkvKiBWZXJzaW9uIDAuIE9ubHkgaW5jcmVhc2VzCisJCQkJCSAqIGZvciBkcmFzdGljIGNoYW5nZXMsCisJCQkJCSAqIGludHJvZHVjdGlvbiBvZiBjb21wYXRpYmxlCisJCQkJCSAqIG5ldyBmaWVsZHMgZG9lcyBub3QgY291bnQuCisJCQkJCSAqLworCXVpbnQ4X3QJCWl0X3BhZDsKKwl1aW50MTZfdAlpdF9sZW47CQkvKiBsZW5ndGggb2YgdGhlIHdob2xlCisJCQkJCSAqIGhlYWRlciBpbiBieXRlcywgaW5jbHVkaW5nCisJCQkJCSAqIGl0X3ZlcnNpb24sIGl0X3BhZCwKKwkJCQkJICogaXRfbGVuLCBhbmQgZGF0YSBmaWVsZHMuCisJCQkJCSAqLworCXVpbnQzMl90CWl0X3ByZXNlbnQ7CS8qIEEgYml0bWFwIHRlbGxpbmcgd2hpY2gKKwkJCQkJICogZmllbGRzIGFyZSBwcmVzZW50LiBTZXQgYml0IDMxCisJCQkJCSAqICgweDgwMDAwMDAwKSB0byBleHRlbmQgdGhlCisJCQkJCSAqIGJpdG1hcCBieSBhbm90aGVyIDMyIGJpdHMuCisJCQkJCSAqIEFkZGl0aW9uYWwgZXh0ZW5zaW9ucyBhcmUgbWFkZQorCQkJCQkgKiBieSBzZXR0aW5nIGJpdCAzMS4KKwkJCQkJICovCit9OworCisvKiBOYW1lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSB0eXBlICAgICAgIFVuaXRzCisgKiAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tLS0tICAgICAgIC0tLS0tCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX1RTRlQgICAgICAgICAgICAgIHVpbnQ2NF90ICAgICAgIG1pY3Jvc2Vjb25kcworICoKKyAqICAgICAgVmFsdWUgaW4gbWljcm9zZWNvbmRzIG9mIHRoZSBNQUMncyA2NC1iaXQgODAyLjExIFRpbWUKKyAqICAgICAgU3luY2hyb25pemF0aW9uIEZ1bmN0aW9uIHRpbWVyIHdoZW4gdGhlIGZpcnN0IGJpdCBvZiB0aGUKKyAqICAgICAgTVBEVSBhcnJpdmVkIGF0IHRoZSBNQUMuIEZvciByZWNlaXZlZCBmcmFtZXMsIG9ubHkuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUwgICAgICAgICAgIDIgeCB1aW50MTZfdCAgIE1IeiwgYml0bWFwCisgKgorICogICAgICBUeC9SeCBmcmVxdWVuY3kgaW4gTUh6LCBmb2xsb3dlZCBieSBmbGFncyAoc2VlIGJlbG93KS4KKyAqCU5vdGUgdGhhdCBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwgbXVzdCBiZSB1c2VkIHRvCisgKglyZXByZXNlbnQgYW4gSFQgY2hhbm5lbCBhcyB0aGVyZSBpcyBub3QgZW5vdWdoIHJvb20gaW4KKyAqCXRoZSBmbGFncyB3b3JkLgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9GSFNTICAgICAgICAgICAgICB1aW50MTZfdCAgICAgICBzZWUgYmVsb3cKKyAqCisgKiAgICAgIEZvciBmcmVxdWVuY3ktaG9wcGluZyByYWRpb3MsIHRoZSBob3Agc2V0IChmaXJzdCBieXRlKQorICogICAgICBhbmQgcGF0dGVybiAoc2Vjb25kIGJ5dGUpLgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFICAgICAgICAgICAgICB1aW50OF90ICAgICAgICA1MDBrYi9zIG9yIGluZGV4CisgKgorICogICAgICBUeC9SeCBkYXRhIHJhdGUuICBJZiBiaXQgMHg4MCBpcyBzZXQgdGhlbiBpdCByZXByZXNlbnRzIGFuCisgKglhbiBNQ1MgaW5kZXggYW5kIG5vdCBhbiBJRUVFIHJhdGUuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUwgICAgIGludDhfdCAgICAgICAgICBkZWNpYmVscyBmcm9tCisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uZSBtaWxsaXdhdHQgKGRCbSkKKyAqCisgKiAgICAgIFJGIHNpZ25hbCBwb3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20KKyAqICAgICAgb25lIG1pbGxpd2F0dC4KKyAqCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFICAgICAgaW50OF90ICAgICAgICAgIGRlY2liZWxzIGZyb20KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb25lIG1pbGxpd2F0dCAoZEJtKQorICoKKyAqICAgICAgUkYgbm9pc2UgcG93ZXIgYXQgdGhlIGFudGVubmEsIGRlY2liZWwgZGlmZmVyZW5jZSBmcm9tIG9uZQorICogICAgICBtaWxsaXdhdHQuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCAgICAgIHVpbnQ4X3QgICAgICAgIGRlY2liZWwgKGRCKQorICoKKyAqICAgICAgUkYgc2lnbmFsIHBvd2VyIGF0IHRoZSBhbnRlbm5hLCBkZWNpYmVsIGRpZmZlcmVuY2UgZnJvbSBhbgorICogICAgICBhcmJpdHJhcnksIGZpeGVkIHJlZmVyZW5jZS4KKyAqCisgKiBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UTk9JU0UgICAgICAgdWludDhfdCAgICAgICAgZGVjaWJlbCAoZEIpCisgKgorICogICAgICBSRiBub2lzZSBwb3dlciBhdCB0aGUgYW50ZW5uYSwgZGVjaWJlbCBkaWZmZXJlbmNlIGZyb20gYW4KKyAqICAgICAgYXJiaXRyYXJ5LCBmaXhlZCByZWZlcmVuY2UgcG9pbnQuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWSAgICAgIHVpbnQxNl90ICAgICAgIHVuaXRsZXNzCisgKgorICogICAgICBRdWFsaXR5IG9mIEJhcmtlciBjb2RlIGxvY2suIFVuaXRsZXNzLiBNb25vdG9uaWNhbGx5CisgKiAgICAgIG5vbmRlY3JlYXNpbmcgd2l0aCAiYmV0dGVyIiBsb2NrIHN0cmVuZ3RoLiBDYWxsZWQgIlNpZ25hbAorICogICAgICBRdWFsaXR5IiBpbiBkYXRhc2hlZXRzLiAgKElzIHRoZXJlIGEgc3RhbmRhcmQgd2F5IHRvIG1lYXN1cmUKKyAqICAgICAgdGhpcz8pCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OICAgIHVpbnQxNl90ICAgICAgIHVuaXRsZXNzCisgKgorICogICAgICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgdW5pdGxlc3MgZGlzdGFuY2UgZnJvbSBtYXgKKyAqICAgICAgcG93ZXIgc2V0IGF0IGZhY3RvcnkgY2FsaWJyYXRpb24uICAwIGlzIG1heCBwb3dlci4KKyAqICAgICAgTW9ub3RvbmljYWxseSBub25kZWNyZWFzaW5nIHdpdGggbG93ZXIgcG93ZXIgbGV2ZWxzLgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9EQl9UWF9BVFRFTlVBVElPTiB1aW50MTZfdCAgICAgICBkZWNpYmVscyAoZEIpCisgKgorICogICAgICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgZGVjaWJlbCBkaXN0YW5jZSBmcm9tIG1heCBwb3dlcgorICogICAgICBzZXQgYXQgZmFjdG9yeSBjYWxpYnJhdGlvbi4gIDAgaXMgbWF4IHBvd2VyLiAgTW9ub3RvbmljYWxseQorICogICAgICBub25kZWNyZWFzaW5nIHdpdGggbG93ZXIgcG93ZXIgbGV2ZWxzLgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fVFhfUE9XRVIgICAgICBpbnQ4X3QgICAgICAgICAgZGVjaWJlbHMgZnJvbQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvbmUgbWlsbGl3YXR0IChkQm0pCisgKgorICogICAgICBUcmFuc21pdCBwb3dlciBleHByZXNzZWQgYXMgZEJtIChkZWNpYmVscyBmcm9tIGEgMSBtaWxsaXdhdHQKKyAqICAgICAgcmVmZXJlbmNlKS4gVGhpcyBpcyB0aGUgYWJzb2x1dGUgcG93ZXIgbGV2ZWwgbWVhc3VyZWQgYXQKKyAqICAgICAgdGhlIGFudGVubmEgcG9ydC4KKyAqCisgKiBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgICAgICAgICAgICAgdWludDhfdCAgICAgICAgYml0bWFwCisgKgorICogICAgICBQcm9wZXJ0aWVzIG9mIHRyYW5zbWl0dGVkIGFuZCByZWNlaXZlZCBmcmFtZXMuIFNlZSBmbGFncworICogICAgICBkZWZpbmVkIGJlbG93LgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BICAgICAgICAgICB1aW50OF90ICAgICAgICBhbnRlbm5hIGluZGV4CisgKgorICogICAgICBVbml0bGVzcyBpbmRpY2F0aW9uIG9mIHRoZSBSeC9UeCBhbnRlbm5hIGZvciB0aGlzIHBhY2tldC4KKyAqICAgICAgVGhlIGZpcnN0IGFudGVubmEgaXMgYW50ZW5uYSAwLgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyAgICAgICAgICB1aW50MTZfdCAgICAgICBiaXRtYXAKKyAqCisgKiAgICAgUHJvcGVydGllcyBvZiByZWNlaXZlZCBmcmFtZXMuIFNlZSBmbGFncyBkZWZpbmVkIGJlbG93LgorICoKKyAqIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCAgICAgICAgICB1aW50MzJfdAliaXRtYXAKKyAqCQkJCQl1aW50MTZfdAlNSHoKKyAqCQkJCQl1aW50OF90CQljaGFubmVsIG51bWJlcgorICoJCQkJCXVpbnQ4X3QJCS41IGRCbQorICoKKyAqCUV4dGVuZGVkIGNoYW5uZWwgc3BlY2lmaWNhdGlvbjogZmxhZ3MgKHNlZSBiZWxvdykgZm9sbG93ZWQgYnkKKyAqCWZyZXF1ZW5jeSBpbiBNSHosIHRoZSBjb3JyZXNwb25kaW5nIElFRUUgY2hhbm5lbCBudW1iZXIsIGFuZAorICoJZmluYWxseSB0aGUgbWF4aW11bSByZWd1bGF0b3J5IHRyYW5zbWl0IHBvd2VyIGNhcCBpbiAuNSBkQm0KKyAqCXVuaXRzLiAgVGhpcyBwcm9wZXJ0eSBzdXBlcnNlZGVzIElFRUU4MDIxMV9SQURJT1RBUF9DSEFOTkVMCisgKglhbmQgb25seSBvbmUgb2YgdGhlIHR3byBzaG91bGQgYmUgcHJlc2VudC4KKyAqCisgKiBJRUVFODAyMTFfUkFESU9UQVBfTUNTCQl1aW50OF90CQlrbm93bgorICoJCQkJCXVpbnQ4X3QJCWZsYWdzCisgKgkJCQkJdWludDhfdAkJbWNzCisgKgorICoJQml0c2V0IGluZGljYXRpbmcgd2hpY2ggZmllbGRzIGhhdmUga25vd24gdmFsdWVzLCBmb2xsb3dlZAorICoJYnkgYml0c2V0IG9mIGZsYWcgdmFsdWVzLCBmb2xsb3dlZCBieSB0aGUgTUNTIHJhdGUgaW5kZXggYXMKKyAqCWluIElFRUUgODAyLjExbi4KKyAqCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX0FNUERVX1NUQVRVUwl1MzIsIHUxNiwgdTgsIHU4CXVuaXRsZXNzCisgKgorICoJQ29udGFpbnMgdGhlIEFNUERVIGluZm9ybWF0aW9uIGZvciB0aGUgc3ViZnJhbWUuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX1ZIVAl1MTYsIHU4LCB1OCwgdThbNF0sIHU4LCB1OCwgdTE2CisgKgorICoJQ29udGFpbnMgVkhUIGluZm9ybWF0aW9uIGFib3V0IHRoaXMgZnJhbWUuCisgKgorICogSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0UKKyAqCQkJCQl1aW50OF90ICBPVUlbM10KKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50OF90ICBzdWJzcGFjZQorICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGxlbmd0aAorICoKKyAqICAgICBUaGUgVmVuZG9yIE5hbWVzcGFjZSBGaWVsZCBjb250YWlucyB0aHJlZSBzdWItZmllbGRzLiBUaGUgZmlyc3QKKyAqICAgICBzdWItZmllbGQgaXMgMyBieXRlcyBsb25nLiBJdCBjb250YWlucyB0aGUgdmVuZG9yJ3MgSUVFRSA4MDIKKyAqICAgICBPcmdhbml6YXRpb25hbGx5IFVuaXF1ZSBJZGVudGlmaWVyIChPVUkpLiBUaGUgZm91cnRoIGJ5dGUgaXMgYQorICogICAgIHZlbmRvci1zcGVjaWZpYyAibmFtZXNwYWNlIHNlbGVjdG9yLiIKKyAqCisgKi8KK2VudW0gaWVlZTgwMjExX3JhZGlvdGFwX3R5cGUgeworCUlFRUU4MDIxMV9SQURJT1RBUF9UU0ZUID0gMCwKKwlJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgPSAxLAorCUlFRUU4MDIxMV9SQURJT1RBUF9SQVRFID0gMiwKKwlJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTCA9IDMsCisJSUVFRTgwMjExX1JBRElPVEFQX0ZIU1MgPSA0LAorCUlFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMID0gNSwKKwlJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFID0gNiwKKwlJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZID0gNywKKwlJRUVFODAyMTFfUkFESU9UQVBfVFhfQVRURU5VQVRJT04gPSA4LAorCUlFRUU4MDIxMV9SQURJT1RBUF9EQl9UWF9BVFRFTlVBVElPTiA9IDksCisJSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUiA9IDEwLAorCUlFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BID0gMTEsCisJSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVFNJR05BTCA9IDEyLAorCUlFRUU4MDIxMV9SQURJT1RBUF9EQl9BTlROT0lTRSA9IDEzLAorCUlFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUyA9IDE0LAorCS8qIE5COiBnYXAgZm9yIG5ldGJzZCBkZWZpbml0aW9ucyAqLworCUlFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTCA9IDE4LAorCUlFRUU4MDIxMV9SQURJT1RBUF9NQ1MgPSAxOSwKKwlJRUVFODAyMTFfUkFESU9UQVBfQU1QRFVfU1RBVFVTID0gMjAsCisJSUVFRTgwMjExX1JBRElPVEFQX1ZIVCA9IDIxLAorCUlFRUU4MDIxMV9SQURJT1RBUF9OQU1FU1BBQ0UgPSAyOSwKKwlJRUVFODAyMTFfUkFESU9UQVBfVkVORE9SX05BTUVTUEFDRSA9IDMwLAorCUlFRUU4MDIxMV9SQURJT1RBUF9FWFQgPSAzMQorfTsKKworLyogY2hhbm5lbCBhdHRyaWJ1dGVzICovCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX1RVUkJPCTB4MDAwMTAJLyogVHVyYm8gY2hhbm5lbCAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9DQ0sJMHgwMDAyMAkvKiBDQ0sgY2hhbm5lbCAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9PRkRNCTB4MDAwNDAJLyogT0ZETSBjaGFubmVsICovCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOXzJHSFoJMHgwMDA4MAkvKiAyIEdIeiBzcGVjdHJ1bSBjaGFubmVsLiAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl81R0haCTB4MDAxMDAJLyogNSBHSHogc3BlY3RydW0gY2hhbm5lbCAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9QQVNTSVZFCTB4MDAyMDAJLyogT25seSBwYXNzaXZlIHNjYW4gYWxsb3dlZCAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9EWU4JMHgwMDQwMAkvKiBEeW5hbWljIENDSy1PRkRNIGNoYW5uZWwgKi8KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fR0ZTSwkweDAwODAwCS8qIEdGU0sgY2hhbm5lbCAoRkhTUyBQSFkpICovCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0dTTQkweDAxMDAwCS8qIDkwMCBNSHogc3BlY3RydW0gY2hhbm5lbCAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9TVFVSQk8JMHgwMjAwMAkvKiAxMWEgc3RhdGljIHR1cmJvIGNoYW5uZWwgb25seSAqLworI2RlZmluZQlJRUVFODAyMTFfQ0hBTl9IQUxGCTB4MDQwMDAJLyogSGFsZiByYXRlIGNoYW5uZWwgKi8KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fUVVBUlRFUgkweDA4MDAwCS8qIFF1YXJ0ZXIgcmF0ZSBjaGFubmVsICovCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUMjAJMHgxMDAwMAkvKiBIVCAyMCBjaGFubmVsICovCisjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0hUNDBVCTB4MjAwMDAJLyogSFQgNDAgY2hhbm5lbCB3LyBleHQgYWJvdmUgKi8KKyNkZWZpbmUJSUVFRTgwMjExX0NIQU5fSFQ0MEQJMHg0MDAwMAkvKiBIVCA0MCBjaGFubmVsIHcvIGV4dCBiZWxvdyAqLworCisvKiBVc2VmdWwgY29tYmluYXRpb25zIG9mIGNoYW5uZWwgY2hhcmFjdGVyaXN0aWNzLCBib3Jyb3dlZCBmcm9tIEV0aGVyZWFsICovCisjZGVmaW5lIElFRUU4MDIxMV9DSEFOX0EgXAorICAgICAgICAoSUVFRTgwMjExX0NIQU5fNUdIWiB8IElFRUU4MDIxMV9DSEFOX09GRE0pCisjZGVmaW5lIElFRUU4MDIxMV9DSEFOX0IgXAorICAgICAgICAoSUVFRTgwMjExX0NIQU5fMkdIWiB8IElFRUU4MDIxMV9DSEFOX0NDSykKKyNkZWZpbmUgSUVFRTgwMjExX0NIQU5fRyBcCisgICAgICAgIChJRUVFODAyMTFfQ0hBTl8yR0haIHwgSUVFRTgwMjExX0NIQU5fRFlOKQorI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9UQSBcCisgICAgICAgIChJRUVFODAyMTFfQ0hBTl81R0haIHwgSUVFRTgwMjExX0NIQU5fT0ZETSB8IElFRUU4MDIxMV9DSEFOX1RVUkJPKQorI2RlZmluZSBJRUVFODAyMTFfQ0hBTl9URyBcCisgICAgICAgIChJRUVFODAyMTFfQ0hBTl8yR0haIHwgSUVFRTgwMjExX0NIQU5fRFlOICB8IElFRUU4MDIxMV9DSEFOX1RVUkJPKQorCisKKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1MgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfQ0ZQCTB4MDEJLyogc2VudC9yZWNlaXZlZAorCQkJCQkJICogZHVyaW5nIENGUAorCQkJCQkJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX1NIT1JUUFJFCTB4MDIJLyogc2VudC9yZWNlaXZlZAorCQkJCQkJICogd2l0aCBzaG9ydAorCQkJCQkJICogcHJlYW1ibGUKKwkJCQkJCSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9XRVAJMHgwNAkvKiBzZW50L3JlY2VpdmVkCisJCQkJCQkgKiB3aXRoIFdFUCBlbmNyeXB0aW9uCisJCQkJCQkgKi8KKyNkZWZpbmUJSUVFRTgwMjExX1JBRElPVEFQX0ZfRlJBRwkweDA4CS8qIHNlbnQvcmVjZWl2ZWQKKwkJCQkJCSAqIHdpdGggZnJhZ21lbnRhdGlvbgorCQkJCQkJICovCisjZGVmaW5lCUlFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUwkweDEwCS8qIGZyYW1lIGluY2x1ZGVzIEZDUyAqLworI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9EQVRBUEFECTB4MjAJLyogZnJhbWUgaGFzIHBhZGRpbmcgYmV0d2VlbgorCQkJCQkJICogODAyLjExIGhlYWRlciBhbmQgcGF5bG9hZAorCQkJCQkJICogKHRvIDMyLWJpdCBib3VuZGFyeSkKKwkJCQkJCSAqLworI2RlZmluZQlJRUVFODAyMTFfUkFESU9UQVBfRl9CQURGQ1MJMHg0MAkvKiBkb2VzIG5vdCBwYXNzIEZDUyBjaGVjayAqLworCisvKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTICovCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9GX1JYX0JBREZDUwkweDAwMDEJLyogZnJhbWUgZmFpbGVkIGNyYyBjaGVjayAqLworI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfRl9SWF9QTENQX0NSQwkweDAwMDIJLyogZnJhbWUgZmFpbGVkIFBMQ1AgQ1JDIGNoZWNrICovCisKKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfTUNTIGtub3duICovCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIX0tOT1dOCQkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfTUNTX0lOREVYX0tOT1dOCQkweDAyCS8qIE1DUyBpbmRleCBmaWVsZCAqLworI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0dVQVJEX0lOVEVSVkFMX0tOT1dOCTB4MDQKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19IVF9GT1JNQVRfS05PV04JCTB4MDgKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19GRUNfVFlQRV9LTk9XTgkJMHgxMAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfS05PV04JCTB4MjAKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19ORVNTX0tOT1dOCQkweDQwCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfTkVTU19CSVRfMQkJMHg4MAorCisvKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX01DUyBmbGFncyAqLworI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0JBTkRXSURUSF9NQVNLCTB4MDMKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfMjAJMAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0JBTkRXSURUSF80MAkxCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIXzIwTAkyCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIXzIwVQkzCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU0hPUlRfR0kJCTB4MDQgLyogc2hvcnQgZ3VhcmQgaW50ZXJ2YWwgKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19IVF9HUkVFTkZJRUxECTB4MDgKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX01DU19GRUNfTERQQwkJMHgxMAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfTUFTSwkweDYwCisjZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMQkxCisjZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMgkyCisjZGVmaW5lCQlJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfMwkzCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU1RCQ19TSElGVAk1CisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfTkVTU19CSVRfMAkweDgwCisKKy8qIEZvciBJRUVFODAyMTFfUkFESU9UQVBfQU1QRFVfU1RBVFVTICovCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9BTVBEVV9SRVBPUlRfWkVST0xFTgkJMHgwMDAxCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9BTVBEVV9JU19aRVJPTEVOCQkweDAwMDIKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0FNUERVX0xBU1RfS05PV04JCTB4MDAwNAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfQU1QRFVfSVNfTEFTVAkJMHgwMDA4CisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9BTVBEVV9ERUxJTV9DUkNfRVJSCQkweDAwMTAKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0FNUERVX0RFTElNX0NSQ19LTk9XTgkweDAwMjAKKworLyogRm9yIElFRUU4MDIxMV9SQURJT1RBUF9WSFQga25vd24gKi8KKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9TVEJDX0tOT1dOCQkJMHgwMDAxCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfVFhPUF9QU19OQV9LTk9XTgkJCTB4MDAwMgorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX0dVQVJEX0lOVEVSVkFMX0tOT1dOCQkweDAwMDQKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9TR0lfTlNZTV9ESVNfS05PV04JCTB4MDAwOAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX0xEUENfRVhUUkFfT0ZETV9TWU1fS05PV04JMHgwMDEwCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfQkVBTUZPUk1FRF9LTk9XTgkJCTB4MDAyMAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX0JBTkRXSURUSF9LTk9XTgkJCTB4MDA0MAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX0dST1VQX0lEX0tOT1dOCQkJMHgwMDgwCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfUEFSVElBTF9BSURfS05PV04JCTB4MDEwMAorCisvKiBGb3IgSUVFRTgwMjExX1JBRElPVEFQX1ZIVCBmbGFncyAqLworI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX1NUQkMJCQkweDAxCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfVFhPUF9QU19OQQkJMHgwMgorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX1NIT1JUX0dJCQkJMHgwNAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX1NHSV9OU1lNX00xMF85CQkweDA4CisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfTERQQ19FWFRSQV9PRkRNX1NZTQkweDEwCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfQkVBTUZPUk1FRAkJMHgyMAorCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfQkFORFdJRFRIX01BU0sJMHgxZgorCisjZGVmaW5lIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfTlNTX01BU0sJCTB4MGYKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9NQ1NfTUFTSwkJMHhmMAorI2RlZmluZSBJRUVFODAyMTFfUkFESU9UQVBfVkhUX01DU19TSElGVAk0CisKKyNkZWZpbmUgSUVFRTgwMjExX1JBRElPVEFQX0NPRElOR19MRFBDX1VTRVJuCQkJMHgwMQorCiAjZGVmaW5lCUlFRUU4MDIxMV9DSEFOX0ZIU1MgXAogCShJRUVFODAyMTFfQ0hBTl8yR0haIHwgSUVFRTgwMjExX0NIQU5fR0ZTSykKICNkZWZpbmUJSUVFRTgwMjExX0NIQU5fQSBcCkBAIC0yNDY0LDMwICsyNTIyLDQxIEBACiAKIHN0YXRpYyB2b2lkCiBwcmludF9jaGFuaW5mbyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgIGludCBmcmVxLCBpbnQgZmxhZ3MpCisgICAgICAgICAgICAgICB1aW50MTZfdCBmcmVxLCBpbnQgZmxhZ3MsIGludCBwcmVzZW50ZmxhZ3MpCiB7CiAJTkRfUFJJTlQoKG5kbywgIiV1IE1IeiIsIGZyZXEpKTsKLQlpZiAoSVNfQ0hBTl9GSFNTKGZsYWdzKSkKLQkJTkRfUFJJTlQoKG5kbywgIiBGSFNTIikpOwotCWlmIChJU19DSEFOX0EoZmxhZ3MpKSB7Ci0JCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX0hBTEYpCi0JCQlORF9QUklOVCgobmRvLCAiIDExYS8xME1oeiIpKTsKLQkJZWxzZSBpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9RVUFSVEVSKQotCQkJTkRfUFJJTlQoKG5kbywgIiAxMWEvNU1oeiIpKTsKLQkJZWxzZQotCQkJTkRfUFJJTlQoKG5kbywgIiAxMWEiKSk7CisJaWYgKHByZXNlbnRmbGFncyAmICgxIDw8IElFRUU4MDIxMV9SQURJT1RBUF9NQ1MpKSB7CisJCS8qCisJCSAqIFdlIGhhdmUgdGhlIE1DUyBmaWVsZCwgc28gdGhpcyBpcyAxMW4sIHJlZ2FyZGxlc3MKKwkJICogb2Ygd2hhdCB0aGUgY2hhbm5lbCBmbGFncyBzYXkuCisJCSAqLworCQlORF9QUklOVCgobmRvLCAiIDExbiIpKTsKKwl9IGVsc2UgeworCQlpZiAoSVNfQ0hBTl9GSFNTKGZsYWdzKSkKKwkJCU5EX1BSSU5UKChuZG8sICIgRkhTUyIpKTsKKwkJaWYgKElTX0NIQU5fQShmbGFncykpIHsKKwkJCWlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX0hBTEYpCisJCQkJTkRfUFJJTlQoKG5kbywgIiAxMWEvMTBNaHoiKSk7CisJCQllbHNlIGlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX1FVQVJURVIpCisJCQkJTkRfUFJJTlQoKG5kbywgIiAxMWEvNU1oeiIpKTsKKwkJCWVsc2UKKwkJCQlORF9QUklOVCgobmRvLCAiIDExYSIpKTsKKwkJfQorCQlpZiAoSVNfQ0hBTl9BTllHKGZsYWdzKSkgeworCQkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fSEFMRikKKwkJCQlORF9QUklOVCgobmRvLCAiIDExZy8xME1oeiIpKTsKKwkJCWVsc2UgaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUVVBUlRFUikKKwkJCQlORF9QUklOVCgobmRvLCAiIDExZy81TWh6IikpOworCQkJZWxzZQorCQkJCU5EX1BSSU5UKChuZG8sICIgMTFnIikpOworCQl9IGVsc2UgaWYgKElTX0NIQU5fQihmbGFncykpCisJCQlORF9QUklOVCgobmRvLCAiIDExYiIpKTsKKwkJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fVFVSQk8pCisJCQlORF9QUklOVCgobmRvLCAiIFR1cmJvIikpOwogCX0KLQlpZiAoSVNfQ0hBTl9BTllHKGZsYWdzKSkgewotCQlpZiAoZmxhZ3MgJiBJRUVFODAyMTFfQ0hBTl9IQUxGKQotCQkJTkRfUFJJTlQoKG5kbywgIiAxMWcvMTBNaHoiKSk7Ci0JCWVsc2UgaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fUVVBUlRFUikKLQkJCU5EX1BSSU5UKChuZG8sICIgMTFnLzVNaHoiKSk7Ci0JCWVsc2UKLQkJCU5EX1BSSU5UKChuZG8sICIgMTFnIikpOwotCX0gZWxzZSBpZiAoSVNfQ0hBTl9CKGZsYWdzKSkKLQkJTkRfUFJJTlQoKG5kbywgIiAxMWIiKSk7Ci0JaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fVFVSQk8pCi0JCU5EX1BSSU5UKChuZG8sICIgVHVyYm8iKSk7CisJLyoKKwkgKiBUaGVzZSBhcHBseSB0byAxMW4uCisJICovCiAJaWYgKGZsYWdzICYgSUVFRTgwMjExX0NIQU5fSFQyMCkKIAkJTkRfUFJJTlQoKG5kbywgIiBodC8yMCIpKTsKIAllbHNlIGlmIChmbGFncyAmIElFRUU4MDIxMV9DSEFOX0hUNDBEKQpAQCAtMjQ5OSwxNDYgKzI1NjgsNTAgQEAKIAogc3RhdGljIGludAogcHJpbnRfcmFkaW90YXBfZmllbGQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3BhY2tfc3RhdGUgKnMsIHVpbnQzMl90IGJpdCwgdWludDhfdCAqZmxhZ3MsCi0gICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFkaW90YXBfc3RhdGUgKnN0YXRlLCB1aW50MzJfdCBwcmVzZW50ZmxhZ3MpCisgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgY3BhY2tfc3RhdGUgKnMsIHVpbnQzMl90IGJpdCwgdWludDhfdCAqZmxhZ3NwLAorICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgcHJlc2VudGZsYWdzKQogewotCXVuaW9uIHsKLQkJaW50OF90CQlpODsKLQkJdWludDhfdAkJdTg7Ci0JCWludDE2X3QJCWkxNjsKLQkJdWludDE2X3QJdTE2OwotCQl1aW50MzJfdAl1MzI7Ci0JCXVpbnQ2NF90CXU2NDsKLQl9IHUsIHUyLCB1MywgdTQ7CisJdV9pbnQgaTsKIAlpbnQgcmM7CiAKIAlzd2l0Y2ggKGJpdCkgewotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZMQUdTOgotCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZ1LnU4KTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJKmZsYWdzID0gdS51ODsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfUkFURToKLQkJcmMgPSBjcGFja191aW50OChzLCAmdS51OCk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7CiAKLQkJLyogU2F2ZSBzdGF0ZSByYXRlICovCi0JCXN0YXRlLT5yYXRlID0gdS51ODsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMOgotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFOgotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkE6Ci0JCXJjID0gY3BhY2tfdWludDgocywgJnUudTgpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMOgotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRToKLQkJcmMgPSBjcGFja19pbnQ4KHMsICZ1Lmk4KTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfQ0hBTk5FTDoKLQkJcmMgPSBjcGFja191aW50MTYocywgJnUudTE2KTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJcmMgPSBjcGFja191aW50MTYocywgJnUyLnUxNik7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfTE9DS19RVUFMSVRZOgotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OOgotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTOgotCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmdS51MTYpOwotCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQl9UWF9BVFRFTlVBVElPTjoKLQkJcmMgPSBjcGFja191aW50OChzLCAmdS51OCk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUjoKLQkJcmMgPSBjcGFja19pbnQ4KHMsICZ1Lmk4KTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfVFNGVDoKLQkJcmMgPSBjcGFja191aW50NjQocywgJnUudTY0KTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUw6Ci0JCXJjID0gY3BhY2tfdWludDMyKHMsICZ1LnUzMik7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7Ci0JCXJjID0gY3BhY2tfdWludDE2KHMsICZ1Mi51MTYpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwotCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZ1My51OCk7Ci0JCWlmIChyYyAhPSAwKQotCQkJYnJlYWs7Ci0JCXJjID0gY3BhY2tfdWludDgocywgJnU0LnU4KTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfTUNTOgotCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZ1LnU4KTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJcmMgPSBjcGFja191aW50OChzLCAmdTIudTgpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwotCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZ1My51OCk7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1ZFTkRPUl9OQU1FU1BBQ0U6IHsKLQkJdWludDhfdCB2bnNbM107Ci0JCXVpbnQxNl90IGxlbmd0aDsKLQkJdWludDhfdCBzdWJzcGFjZTsKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9UU0ZUOiB7CisJCXVpbnQ2NF90IHRzZnQ7CiAKLQkJaWYgKChjcGFja19hbGlnbl9hbmRfcmVzZXJ2ZShzLCAyKSkgPT0gTlVMTCkgewotCQkJcmMgPSAtMTsKLQkJCWJyZWFrOworCQlyYyA9IGNwYWNrX3VpbnQ2NChzLCAmdHNmdCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfUFJJTlQoKG5kbywgIiUiIFBSSXU2NCAidXMgdHNmdCAiLCB0c2Z0KSk7CisJCWJyZWFrOwogCQl9CiAKLQkJcmMgPSBjcGFja191aW50OChzLCAmdm5zWzBdKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJcmMgPSBjcGFja191aW50OChzLCAmdm5zWzFdKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJcmMgPSBjcGFja191aW50OChzLCAmdm5zWzJdKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKLQkJcmMgPSBjcGFja191aW50OChzLCAmc3Vic3BhY2UpOwotCQlpZiAocmMgIT0gMCkKLQkJCWJyZWFrOwotCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmbGVuZ3RoKTsKLQkJaWYgKHJjICE9IDApCi0JCQlicmVhazsKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9GTEFHUzogeworCQl1aW50OF90IGZsYWdzdmFsOwogCi0JCS8qIFNraXAgdXAgdG8gbGVuZ3RoICovCi0JCXMtPmNfbmV4dCArPSBsZW5ndGg7CisJCXJjID0gY3BhY2tfdWludDgocywgJmZsYWdzdmFsKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQkqZmxhZ3NwID0gZmxhZ3N2YWw7CisJCWlmIChmbGFnc3ZhbCAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0NGUCkKKwkJCU5EX1BSSU5UKChuZG8sICJjZnAgIikpOworCQlpZiAoZmxhZ3N2YWwgJiBJRUVFODAyMTFfUkFESU9UQVBfRl9TSE9SVFBSRSkKKwkJCU5EX1BSSU5UKChuZG8sICJzaG9ydCBwcmVhbWJsZSAiKSk7CisJCWlmIChmbGFnc3ZhbCAmIElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKKwkJCU5EX1BSSU5UKChuZG8sICJ3ZXAgIikpOworCQlpZiAoZmxhZ3N2YWwgJiBJRUVFODAyMTFfUkFESU9UQVBfRl9GUkFHKQorCQkJTkRfUFJJTlQoKG5kbywgImZyYWdtZW50ZWQgIikpOworCQlpZiAoZmxhZ3N2YWwgJiBJRUVFODAyMTFfUkFESU9UQVBfRl9CQURGQ1MpCisJCQlORF9QUklOVCgobmRvLCAiYmFkLWZjcyAiKSk7CiAJCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQkvKiB0aGlzIGJpdCBpbmRpY2F0ZXMgYSBmaWVsZCB3aG9zZQotCQkgKiBzaXplIHdlIGRvIG5vdCBrbm93LCBzbyB3ZSBjYW5ub3QKLQkJICogcHJvY2VlZC4gIEp1c3QgcHJpbnQgdGhlIGJpdCBudW1iZXIuCi0JCSAqLwotCQlORF9QUklOVCgobmRvLCAiW2JpdCAldV0gIiwgYml0KSk7Ci0JCXJldHVybiAtMTsKLQl9CisJCX0KIAotCWlmIChyYyAhPSAwKSB7Ci0JCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKLQkJcmV0dXJuIHJjOwotCX0KKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SQVRFOiB7CisJCXVpbnQ4X3QgcmF0ZTsKIAotCS8qIFByZXNlcnZlIHRoZSBzdGF0ZSBwcmVzZW50IGZsYWdzICovCi0Jc3RhdGUtPnByZXNlbnQgPSBwcmVzZW50ZmxhZ3M7Ci0KLQlzd2l0Y2ggKGJpdCkgewotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUw6Ci0JCS8qCi0JCSAqIElmIENIQU5ORUwgYW5kIFhDSEFOTkVMIGFyZSBib3RoIHByZXNlbnQsIHNraXAKLQkJICogQ0hBTk5FTC4KLQkJICovCi0JCWlmIChwcmVzZW50ZmxhZ3MgJiAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwpKQotCQkJYnJlYWs7Ci0JCXByaW50X2NoYW5pbmZvKG5kbywgdS51MTYsIHUyLnUxNik7Ci0JCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6Ci0JCU5EX1BSSU5UKChuZG8sICJmaHNldCAlZCBmaHBhdCAlZCAiLCB1LnUxNiAmIDB4ZmYsICh1LnUxNiA+PiA4KSAmIDB4ZmYpKTsKLQkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfUkFURToKKwkJcmMgPSBjcGFja191aW50OChzLCAmcmF0ZSk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKIAkJLyoKIAkJICogWFhYIE9uIEZyZWVCU0QgcmF0ZSAmIDB4ODAgbWVhbnMgd2UgaGF2ZSBhbiBNQ1MuIE9uCiAJCSAqIExpbnV4IGFuZCBBaXJQY2FwIGl0IGRvZXMgbm90LiAgKFdoYXQgYWJvdXQKQEAgLTI2NjAsNyArMjYzMyw3IEBACiAJCSAqIHNldHRpbmcuICBTdWNoIHJhdGVzIGRvIGV4aXN0LCBlLmcuIDExbgogCQkgKiBNQ1MgNyBhdCAyMCBNSHogd2l0aCBhIGxvbmcgZ3VhcmQgaW50ZXJ2YWwuCiAJCSAqLwotCQlpZiAodS51OCA+PSAweDgwICYmIHUudTggPD0gMHg4ZikgeworCQlpZiAocmF0ZSA+PSAweDgwICYmIHJhdGUgPD0gMHg4ZikgewogCQkJLyoKIAkJCSAqIFhYWCAtIHdlIGRvbid0IGtub3cgdGhlIGNoYW5uZWwgd2lkdGgKIAkJCSAqIG9yIGd1YXJkIGludGVydmFsIGxlbmd0aCwgc28gd2UgY2FuJ3QKQEAgLTI2NzcsNjAgKzI2NTAsMTczIEBACiAJCQkgKiBpbmZvcm1hdGlvbiBmcm9tIEZsYWdzLCBhdCBsZWFzdCBvbgogCQkJICogRnJlZUJTRD8KIAkJCSAqLwotCQkJTkRfUFJJTlQoKG5kbywgIk1DUyAldSAiLCB1LnU4ICYgMHg3ZikpOworCQkJTkRfUFJJTlQoKG5kbywgIk1DUyAldSAiLCByYXRlICYgMHg3ZikpOwogCQl9IGVsc2UKLQkJCU5EX1BSSU5UKChuZG8sICIlMi4xZiBNYi9zICIsIC41ICogdS51OCkpOworCQkJTkRfUFJJTlQoKG5kbywgIiUyLjFmIE1iL3MgIiwgLjUgKiByYXRlKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlRTSUdOQUw6Ci0JCU5EX1BSSU5UKChuZG8sICIlZGRCIHNpZ25hbCAiLCB1Lmk4KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0NIQU5ORUw6IHsKKwkJdWludDE2X3QgZnJlcXVlbmN5OworCQl1aW50MTZfdCBmbGFnczsKKworCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmZnJlcXVlbmN5KTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmZmxhZ3MpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCS8qCisJCSAqIElmIENIQU5ORUwgYW5kIFhDSEFOTkVMIGFyZSBib3RoIHByZXNlbnQsIHNraXAKKwkJICogQ0hBTk5FTC4KKwkJICovCisJCWlmIChwcmVzZW50ZmxhZ3MgJiAoMSA8PCBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUwpKQorCQkJYnJlYWs7CisJCXByaW50X2NoYW5pbmZvKG5kbywgZnJlcXVlbmN5LCBmbGFncywgcHJlc2VudGZsYWdzKTsKIAkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREJNX0FOVE5PSVNFOgotCQlORF9QUklOVCgobmRvLCAiJWRkQiBub2lzZSAiLCB1Lmk4KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0ZIU1M6IHsKKwkJdWludDhfdCBob3BzZXQ7CisJCXVpbnQ4X3QgaG9wcGF0OworCisJCXJjID0gY3BhY2tfdWludDgocywgJmhvcHNldCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50OChzLCAmaG9wcGF0KTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlORF9QUklOVCgobmRvLCAiZmhzZXQgJWQgZmhwYXQgJWQgIiwgaG9wc2V0LCBob3BwYXQpKTsKIAkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMOgotCQlORF9QUklOVCgobmRvLCAiJWRkQiBzaWduYWwgIiwgdS51OCkpOworCQl9CisKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9EQk1fQU5UU0lHTkFMOiB7CisJCWludDhfdCBkYm1fYW50c2lnbmFsOworCisJCXJjID0gY3BhY2tfaW50OChzLCAmZGJtX2FudHNpZ25hbCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfUFJJTlQoKG5kbywgIiVkZEJtIHNpZ25hbCAiLCBkYm1fYW50c2lnbmFsKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFOgotCQlORF9QUklOVCgobmRvLCAiJWRkQiBub2lzZSAiLCB1LnU4KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9BTlROT0lTRTogeworCQlpbnQ4X3QgZGJtX2FudG5vaXNlOworCisJCXJjID0gY3BhY2tfaW50OChzLCAmZGJtX2FudG5vaXNlKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlORF9QUklOVCgobmRvLCAiJWRkQm0gbm9pc2UgIiwgZGJtX2FudG5vaXNlKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWToKLQkJTkRfUFJJTlQoKG5kbywgIiV1IHNxICIsIHUudTE2KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0xPQ0tfUVVBTElUWTogeworCQl1aW50MTZfdCBsb2NrX3F1YWxpdHk7CisKKwkJcmMgPSBjcGFja191aW50MTYocywgJmxvY2tfcXVhbGl0eSk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfUFJJTlQoKG5kbywgIiV1IHNxICIsIGxvY2tfcXVhbGl0eSkpOwogCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9UWF9BVFRFTlVBVElPTjoKLQkJTkRfUFJJTlQoKG5kbywgIiVkIHR4IHBvd2VyICIsIC0oaW50KXUudTE2KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1RYX0FUVEVOVUFUSU9OOiB7CisJCXVpbnQxNl90IHR4X2F0dGVudWF0aW9uOworCisJCXJjID0gY3BhY2tfdWludDE2KHMsICZ0eF9hdHRlbnVhdGlvbik7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfUFJJTlQoKG5kbywgIiVkIHR4IHBvd2VyICIsIC0oaW50KXR4X2F0dGVudWF0aW9uKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OOgotCQlORF9QUklOVCgobmRvLCAiJWRkQiB0eCBwb3dlciAiLCAtKGludCl1LnU4KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCX1RYX0FUVEVOVUFUSU9OOiB7CisJCXVpbnQ4X3QgZGJfdHhfYXR0ZW51YXRpb247CisKKwkJcmMgPSBjcGFja191aW50OChzLCAmZGJfdHhfYXR0ZW51YXRpb24pOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCU5EX1BSSU5UKChuZG8sICIlZGRCIHR4IGF0dGVudWF0aW9uICIsIC0oaW50KWRiX3R4X2F0dGVudWF0aW9uKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCTV9UWF9QT1dFUjoKLQkJTkRfUFJJTlQoKG5kbywgIiVkZEJtIHR4IHBvd2VyICIsIHUuaTgpKTsKKwkJfQorCisJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREJNX1RYX1BPV0VSOiB7CisJCWludDhfdCBkYm1fdHhfcG93ZXI7CisKKwkJcmMgPSBjcGFja19pbnQ4KHMsICZkYm1fdHhfcG93ZXIpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCU5EX1BSSU5UKChuZG8sICIlZGRCbSB0eCBwb3dlciAiLCBkYm1fdHhfcG93ZXIpKTsKIAkJYnJlYWs7Ci0JY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfRkxBR1M6Ci0JCWlmICh1LnU4ICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfQ0ZQKQotCQkJTkRfUFJJTlQoKG5kbywgImNmcCAiKSk7Ci0JCWlmICh1LnU4ICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfU0hPUlRQUkUpCi0JCQlORF9QUklOVCgobmRvLCAic2hvcnQgcHJlYW1ibGUgIikpOwotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9GX1dFUCkKLQkJCU5EX1BSSU5UKChuZG8sICJ3ZXAgIikpOwotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0ZSQUcpCi0JCQlORF9QUklOVCgobmRvLCAiZnJhZ21lbnRlZCAiKSk7Ci0JCWlmICh1LnU4ICYgSUVFRTgwMjExX1JBRElPVEFQX0ZfQkFERkNTKQotCQkJTkRfUFJJTlQoKG5kbywgImJhZC1mY3MgIikpOworCQl9CisKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9BTlRFTk5BOiB7CisJCXVpbnQ4X3QgYW50ZW5uYTsKKworCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZhbnRlbm5hKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlORF9QUklOVCgobmRvLCAiYW50ZW5uYSAldSAiLCBhbnRlbm5hKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0FOVEVOTkE6Ci0JCU5EX1BSSU5UKChuZG8sICJhbnRlbm5hICVkICIsIHUudTgpKTsKKwkJfQorCisJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfREJfQU5UU0lHTkFMOiB7CisJCXVpbnQ4X3QgZGJfYW50c2lnbmFsOworCisJCXJjID0gY3BhY2tfdWludDgocywgJmRiX2FudHNpZ25hbCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfUFJJTlQoKG5kbywgIiVkZEIgc2lnbmFsICIsIGRiX2FudHNpZ25hbCkpOwogCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9UU0ZUOgotCQlORF9QUklOVCgobmRvLCAiJSIgUFJJdTY0ICJ1cyB0c2Z0ICIsIHUudTY0KSk7CisJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0RCX0FOVE5PSVNFOiB7CisJCXVpbnQ4X3QgZGJfYW50bm9pc2U7CisKKwkJcmMgPSBjcGFja191aW50OChzLCAmZGJfYW50bm9pc2UpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCU5EX1BSSU5UKChuZG8sICIlZGRCIG5vaXNlICIsIGRiX2FudG5vaXNlKSk7CiAJCWJyZWFrOwotCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX1JYX0ZMQUdTOgorCQl9CisKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9SWF9GTEFHUzogeworCQl1aW50MTZfdCByeF9mbGFnczsKKworCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmcnhfZmxhZ3MpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CiAJCS8qIERvIG5vdGhpbmcgZm9yIG5vdyAqLwogCQlicmVhazsKLQljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9YQ0hBTk5FTDoKLQkJcHJpbnRfY2hhbmluZm8obmRvLCB1Mi51MTYsIHUudTMyKTsKKwkJfQorCisJY2FzZSBJRUVFODAyMTFfUkFESU9UQVBfWENIQU5ORUw6IHsKKwkJdWludDMyX3QgZmxhZ3M7CisJCXVpbnQxNl90IGZyZXF1ZW5jeTsKKwkJdWludDhfdCBjaGFubmVsOworCQl1aW50OF90IG1heHBvd2VyOworCisJCXJjID0gY3BhY2tfdWludDMyKHMsICZmbGFncyk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50MTYocywgJmZyZXF1ZW5jeSk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50OChzLCAmY2hhbm5lbCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50OChzLCAmbWF4cG93ZXIpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCXByaW50X2NoYW5pbmZvKG5kbywgZnJlcXVlbmN5LCBmbGFncywgcHJlc2VudGZsYWdzKTsKIAkJYnJlYWs7CisJCX0KKwogCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX01DUzogewotCQlzdGF0aWMgY29uc3QgY2hhciAqYmFuZHdpZHRoWzRdID0geworCQl1aW50OF90IGtub3duOworCQl1aW50OF90IGZsYWdzOworCQl1aW50OF90IG1jc19pbmRleDsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKmh0X2JhbmR3aWR0aFs0XSA9IHsKIAkJCSIyMCBNSHoiLAogCQkJIjQwIE1IeiIsCiAJCQkiMjAgTUh6IChMKSIsCkBAIC0yNzM4LDE1ICsyODI0LDI0IEBACiAJCX07CiAJCWZsb2F0IGh0cmF0ZTsKIAotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfTUNTX0lOREVYX0tOT1dOKSB7CisJCXJjID0gY3BhY2tfdWludDgocywgJmtub3duKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZmbGFncyk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50OChzLCAmbWNzX2luZGV4KTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlpZiAoa25vd24gJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX01DU19JTkRFWF9LTk9XTikgewogCQkJLyoKIAkJCSAqIFdlIGtub3cgdGhlIE1DUyBpbmRleC4KIAkJCSAqLwotCQkJaWYgKHUzLnU4IDw9IE1BWF9NQ1NfSU5ERVgpIHsKKwkJCWlmIChtY3NfaW5kZXggPD0gTUFYX01DU19JTkRFWCkgewogCQkJCS8qCiAJCQkJICogQW5kIGl0J3MgaW4tcmFuZ2UuCiAJCQkJICovCi0JCQkJaWYgKHUudTggJiAoSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfS05PV058SUVFRTgwMjExX1JBRElPVEFQX01DU19HVUFSRF9JTlRFUlZBTF9LTk9XTikpIHsKKwkJCQlpZiAoa25vd24gJiAoSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfS05PV058SUVFRTgwMjExX1JBRElPVEFQX01DU19HVUFSRF9JTlRFUlZBTF9LTk9XTikpIHsKIAkJCQkJLyoKIAkJCQkJICogQW5kIHdlIGtub3cgYm90aCB0aGUgYmFuZHdpZHRoIGFuZAogCQkJCQkgKiB0aGUgZ3VhcmQgaW50ZXJ2YWwsIHNvIHdlIGNhbiBsb29rCkBAIC0yNzU0LDkgKzI4NDksOSBAQAogCQkJCQkgKi8KIAkJCQkJaHRyYXRlID0KIAkJCQkJCWllZWU4MDIxMV9mbG9hdF9odHJhdGVzIFwKLQkJCQkJCQlbdTMudThdIFwKLQkJCQkJCQlbKCh1Mi51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIX01BU0spID09IElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIXzQwID8gMSA6IDApXSBcCi0JCQkJCQkJWygodTIudTggJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NIT1JUX0dJKSA/IDEgOiAwKV07CisJCQkJCQkJW21jc19pbmRleF0gXAorCQkJCQkJCVsoKGZsYWdzICYgSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfTUFTSykgPT0gSUVFRTgwMjExX1JBRElPVEFQX01DU19CQU5EV0lEVEhfNDAgPyAxIDogMCldIFwKKwkJCQkJCQlbKChmbGFncyAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU0hPUlRfR0kpID8gMSA6IDApXTsKIAkJCQl9IGVsc2UgewogCQkJCQkvKgogCQkJCQkgKiBXZSBkb24ndCBrbm93IGJvdGggdGhlIGJhbmR3aWR0aApAQCAtMjc3Niw0MiArMjg3MSwyMTYgQEAKIAkJCQkgKiBXZSBoYXZlIHRoZSByYXRlLgogCQkJCSAqIFByaW50IGl0LgogCQkJCSAqLwotCQkJCU5EX1BSSU5UKChuZG8sICIlLjFmIE1iL3MgTUNTICV1ICIsIGh0cmF0ZSwgdTMudTgpKTsKKwkJCQlORF9QUklOVCgobmRvLCAiJS4xZiBNYi9zIE1DUyAldSAiLCBodHJhdGUsIG1jc19pbmRleCkpOwogCQkJfSBlbHNlIHsKIAkJCQkvKgogCQkJCSAqIFdlIGF0IGxlYXN0IGhhdmUgdGhlIE1DUyBpbmRleC4KIAkJCQkgKiBQcmludCBpdC4KIAkJCQkgKi8KLQkJCQlORF9QUklOVCgobmRvLCAiTUNTICV1ICIsIHUzLnU4KSk7CisJCQkJTkRfUFJJTlQoKG5kbywgIk1DUyAldSAiLCBtY3NfaW5kZXgpKTsKIAkJCX0KIAkJfQotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIX0tOT1dOKSB7CisJCWlmIChrbm93biAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIX0tOT1dOKSB7CiAJCQlORF9QUklOVCgobmRvLCAiJXMgIiwKLQkJCQliYW5kd2lkdGhbdTIudTggJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0JBTkRXSURUSF9NQVNLXSkpOworCQkJCWh0X2JhbmR3aWR0aFtmbGFncyAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfQkFORFdJRFRIX01BU0tdKSk7CiAJCX0KLQkJaWYgKHUudTggJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0dVQVJEX0lOVEVSVkFMX0tOT1dOKSB7CisJCWlmIChrbm93biAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfR1VBUkRfSU5URVJWQUxfS05PV04pIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyBHSSAiLAotCQkJCSh1Mi51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU0hPUlRfR0kpID8KLQkJCQkic2hvcnQiIDogImxvbiIpKTsKKwkJCQkoZmxhZ3MgJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NIT1JUX0dJKSA/CisJCQkJInNob3J0IiA6ICJsb25nIikpOwogCQl9Ci0JCWlmICh1LnU4ICYgSUVFRTgwMjExX1JBRElPVEFQX01DU19IVF9GT1JNQVRfS05PV04pIHsKKwkJaWYgKGtub3duICYgSUVFRTgwMjExX1JBRElPVEFQX01DU19IVF9GT1JNQVRfS05PV04pIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyAiLAotCQkJCSh1Mi51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfSFRfR1JFRU5GSUVMRCkgPworCQkJCShmbGFncyAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfSFRfR1JFRU5GSUVMRCkgPwogCQkJCSJncmVlbmZpZWxkIiA6ICJtaXhlZCIpKTsKIAkJfQotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfRkVDX1RZUEVfS05PV04pIHsKKwkJaWYgKGtub3duICYgSUVFRTgwMjExX1JBRElPVEFQX01DU19GRUNfVFlQRV9LTk9XTikgewogCQkJTkRfUFJJTlQoKG5kbywgIiVzIEZFQyAiLAotCQkJCSh1Mi51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfRkVDX0xEUEMpID8KKwkJCQkoZmxhZ3MgJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX0ZFQ19MRFBDKSA/CiAJCQkJIkxEUEMiIDogIkJDQyIpKTsKIAkJfQotCQlpZiAodS51OCAmIElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU1RCQ19LTk9XTikgeworCQlpZiAoa25vd24gJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfS05PV04pIHsKIAkJCU5EX1BSSU5UKChuZG8sICJSWC1TVEJDJXUgIiwKLQkJCQkodTIudTggJiBJRUVFODAyMTFfUkFESU9UQVBfTUNTX1NUQkNfTUFTSykgPj4gSUVFRTgwMjExX1JBRElPVEFQX01DU19TVEJDX1NISUZUKSk7CisJCQkJKGZsYWdzICYgSUVFRTgwMjExX1JBRElPVEFQX01DU19TVEJDX01BU0spID4+IElFRUU4MDIxMV9SQURJT1RBUF9NQ1NfU1RCQ19TSElGVCkpOwogCQl9Ci0KIAkJYnJlYWs7CiAJCX0KKworCWNhc2UgSUVFRTgwMjExX1JBRElPVEFQX0FNUERVX1NUQVRVUzogeworCQl1aW50MzJfdCByZWZlcmVuY2VfbnVtOworCQl1aW50MTZfdCBmbGFnczsKKwkJdWludDhfdCBkZWxpbV9jcmM7CisJCXVpbnQ4X3QgcmVzZXJ2ZWQ7CisKKwkJcmMgPSBjcGFja191aW50MzIocywgJnJlZmVyZW5jZV9udW0pOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCXJjID0gY3BhY2tfdWludDE2KHMsICZmbGFncyk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJcmMgPSBjcGFja191aW50OChzLCAmZGVsaW1fY3JjKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZyZXNlcnZlZCk7CisJCWlmIChyYyAhPSAwKQorCQkJZ290byB0cnVuYzsKKwkJLyogRG8gbm90aGluZyBmb3Igbm93ICovCisJCWJyZWFrOworCQl9CisKKwljYXNlIElFRUU4MDIxMV9SQURJT1RBUF9WSFQ6IHsKKwkJdWludDE2X3Qga25vd247CisJCXVpbnQ4X3QgZmxhZ3M7CisJCXVpbnQ4X3QgYmFuZHdpZHRoOworCQl1aW50OF90IG1jc19uc3NbNF07CisJCXVpbnQ4X3QgY29kaW5nOworCQl1aW50OF90IGdyb3VwX2lkOworCQl1aW50MTZfdCBwYXJ0aWFsX2FpZDsKKwkJc3RhdGljIGNvbnN0IGNoYXIgKnZodF9iYW5kd2lkdGhbMzJdID0geworCQkJIjIwIE1IeiIsCisJCQkiNDAgTUh6IiwKKwkJCSIyMCBNSHogKEwpIiwKKwkJCSIyMCBNSHogKFUpIiwKKwkJCSI4MCBNSHoiLAorCQkJIjgwIE1IeiAoTCkiLAorCQkJIjgwIE1IeiAoVSkiLAorCQkJIjgwIE1IeiAoTEwpIiwKKwkJCSI4MCBNSHogKExVKSIsCisJCQkiODAgTUh6IChVTCkiLAorCQkJIjgwIE1IeiAoVVUpIiwKKwkJCSIxNjAgTUh6IiwKKwkJCSIxNjAgTUh6IChMKSIsCisJCQkiMTYwIE1IeiAoVSkiLAorCQkJIjE2MCBNSHogKExMKSIsCisJCQkiMTYwIE1IeiAoTFUpIiwKKwkJCSIxNjAgTUh6IChVTCkiLAorCQkJIjE2MCBNSHogKFVVKSIsCisJCQkiMTYwIE1IeiAoTExMKSIsCisJCQkiMTYwIE1IeiAoTExVKSIsCisJCQkiMTYwIE1IeiAoTFVMKSIsCisJCQkiMTYwIE1IeiAoVVVVKSIsCisJCQkiMTYwIE1IeiAoVUxMKSIsCisJCQkiMTYwIE1IeiAoVUxVKSIsCisJCQkiMTYwIE1IeiAoVVVMKSIsCisJCQkiMTYwIE1IeiAoVVVVKSIsCisJCQkidW5rbm93biAoMjYpIiwKKwkJCSJ1bmtub3duICgyNykiLAorCQkJInVua25vd24gKDI4KSIsCisJCQkidW5rbm93biAoMjkpIiwKKwkJCSJ1bmtub3duICgzMCkiLAorCQkJInVua25vd24gKDMxKSIKKwkJfTsKKworCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAma25vd24pOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCXJjID0gY3BhY2tfdWludDgocywgJmZsYWdzKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZiYW5kd2lkdGgpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXJjID0gY3BhY2tfdWludDgocywgJm1jc19uc3NbaV0pOworCQkJaWYgKHJjICE9IDApCisJCQkJZ290byB0cnVuYzsKKwkJfQorCQlyYyA9IGNwYWNrX3VpbnQ4KHMsICZjb2RpbmcpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCXJjID0gY3BhY2tfdWludDgocywgJmdyb3VwX2lkKTsKKwkJaWYgKHJjICE9IDApCisJCQlnb3RvIHRydW5jOworCQlyYyA9IGNwYWNrX3VpbnQxNihzLCAmcGFydGlhbF9haWQpOworCQlpZiAocmMgIT0gMCkKKwkJCWdvdG8gdHJ1bmM7CisJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCXVfaW50IG5zcywgbWNzOworCQkJbnNzID0gbWNzX25zc1tpXSAmIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfTlNTX01BU0s7CisJCQltY3MgPSAobWNzX25zc1tpXSAmIElFRUU4MDIxMV9SQURJT1RBUF9WSFRfTUNTX01BU0spID4+IElFRUU4MDIxMV9SQURJT1RBUF9WSFRfTUNTX1NISUZUOworCisJCQlpZiAobnNzID09IDApCisJCQkJY29udGludWU7CisKKwkJCU5EX1BSSU5UKChuZG8sICJVc2VyICV1IE1DUyAldSAiLCBpLCBtY3MpKTsKKwkJCU5EX1BSSU5UKChuZG8sICIlcyBGRUMgIiwKKwkJCQkoY29kaW5nICYgKElFRUU4MDIxMV9SQURJT1RBUF9DT0RJTkdfTERQQ19VU0VSbiA8PCBpKSkgPworCQkJCSJMRFBDIiA6ICJCQ0MiKSk7CisJCX0KKwkJaWYgKGtub3duICYgSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9CQU5EV0lEVEhfS05PV04pIHsKKwkJCU5EX1BSSU5UKChuZG8sICIlcyAiLAorCQkJCXZodF9iYW5kd2lkdGhbYmFuZHdpZHRoICYgSUVFRTgwMjExX1JBRElPVEFQX1ZIVF9CQU5EV0lEVEhfTUFTS10pKTsKKwkJfQorCQlpZiAoa25vd24gJiBJRUVFODAyMTFfUkFESU9UQVBfVkhUX0dVQVJEX0lOVEVSVkFMX0tOT1dOKSB7CisJCQlORF9QUklOVCgobmRvLCAiJXMgR0kgIiwKKwkJCQkoZmxhZ3MgJiBJRUVFODAyMTFfUkFESU9UQVBfVkhUX1NIT1JUX0dJKSA/CisJCQkJInNob3J0IiA6ICJsb25nIikpOworCQl9CisJCWJyZWFrOworCQl9CisKKwlkZWZhdWx0OgorCQkvKiB0aGlzIGJpdCBpbmRpY2F0ZXMgYSBmaWVsZCB3aG9zZQorCQkgKiBzaXplIHdlIGRvIG5vdCBrbm93LCBzbyB3ZSBjYW5ub3QKKwkJICogcHJvY2VlZC4gIEp1c3QgcHJpbnQgdGhlIGJpdCBudW1iZXIuCisJCSAqLworCQlORF9QUklOVCgobmRvLCAiW2JpdCAldV0gIiwgYml0KSk7CisJCXJldHVybiAtMTsKIAl9CisKKwlyZXR1cm4gMDsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCXJldHVybiByYzsKK30KKworCitzdGF0aWMgaW50CitwcmludF9pbl9yYWRpb3RhcF9uYW1lc3BhY2UobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGNwYWNrX3N0YXRlICpzLCB1aW50OF90ICpmbGFncywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1aW50MzJfdCBwcmVzZW50ZmxhZ3MsIGludCBiaXQwKQoreworI2RlZmluZQlCSVROT18zMih4KSAoKCh4KSA+PiAxNikgPyAxNiArIEJJVE5PXzE2KCh4KSA+PiAxNikgOiBCSVROT18xNigoeCkpKQorI2RlZmluZQlCSVROT18xNih4KSAoKCh4KSA+PiA4KSA/IDggKyBCSVROT184KCh4KSA+PiA4KSA6IEJJVE5PXzgoKHgpKSkKKyNkZWZpbmUJQklUTk9fOCh4KSAoKCh4KSA+PiA0KSA/IDQgKyBCSVROT180KCh4KSA+PiA0KSA6IEJJVE5PXzQoKHgpKSkKKyNkZWZpbmUJQklUTk9fNCh4KSAoKCh4KSA+PiAyKSA/IDIgKyBCSVROT18yKCh4KSA+PiAyKSA6IEJJVE5PXzIoKHgpKSkKKyNkZWZpbmUJQklUTk9fMih4KSAoKCh4KSAmIDIpID8gMSA6IDApCisJdWludDMyX3QgcHJlc2VudCwgbmV4dF9wcmVzZW50OworCWludCBiaXRubzsKKwllbnVtIGllZWU4MDIxMV9yYWRpb3RhcF90eXBlIGJpdDsKKwlpbnQgcmM7CisKKwlmb3IgKHByZXNlbnQgPSBwcmVzZW50ZmxhZ3M7IHByZXNlbnQ7IHByZXNlbnQgPSBuZXh0X3ByZXNlbnQpIHsKKwkJLyoKKwkJICogQ2xlYXIgdGhlIGxlYXN0IHNpZ25pZmljYW50IGJpdCB0aGF0IGlzIHNldC4KKwkJICovCisJCW5leHRfcHJlc2VudCA9IHByZXNlbnQgJiAocHJlc2VudCAtIDEpOworCisJCS8qCisJCSAqIEdldCB0aGUgYml0IG51bWJlciwgd2l0aGluIHRoaXMgcHJlc2VuY2Ugd29yZCwKKwkJICogb2YgdGhlIHJlbWFpbmluZyBsZWFzdCBzaWduaWZpY2FudCBiaXQgdGhhdAorCQkgKiBpcyBzZXQuCisJCSAqLworCQliaXRubyA9IEJJVE5PXzMyKHByZXNlbnQgXiBuZXh0X3ByZXNlbnQpOworCisJCS8qCisJCSAqIFN0b3AgaWYgdGhpcyBpcyBvbmUgb2YgdGhlICJzYW1lIG1lYW5pbmcKKwkJICogaW4gYWxsIHByZXNlbmNlIGZsYWdzIiBiaXRzLgorCQkgKi8KKwkJaWYgKGJpdG5vID49IElFRUU4MDIxMV9SQURJT1RBUF9OQU1FU1BBQ0UpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBHZXQgdGhlIHJhZGlvdGFwIGJpdCBudW1iZXIgb2YgdGhhdCBiaXQuCisJCSAqLworCQliaXQgPSAoZW51bSBpZWVlODAyMTFfcmFkaW90YXBfdHlwZSkoYml0MCArIGJpdG5vKTsKKworCQlyYyA9IHByaW50X3JhZGlvdGFwX2ZpZWxkKG5kbywgcywgYml0LCBmbGFncywgcHJlc2VudGZsYWdzKTsKKwkJaWYgKHJjICE9IDApCisJCQlyZXR1cm4gcmM7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4MTksODMgKzMwODgsMTgxIEBACiBpZWVlODAyXzExX3JhZGlvX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnAsIHVfaW50IGxlbmd0aCwgdV9pbnQgY2FwbGVuKQogewotI2RlZmluZQlCSVROT18zMih4KSAoKCh4KSA+PiAxNikgPyAxNiArIEJJVE5PXzE2KCh4KSA+PiAxNikgOiBCSVROT18xNigoeCkpKQotI2RlZmluZQlCSVROT18xNih4KSAoKCh4KSA+PiA4KSA/IDggKyBCSVROT184KCh4KSA+PiA4KSA6IEJJVE5PXzgoKHgpKSkKLSNkZWZpbmUJQklUTk9fOCh4KSAoKCh4KSA+PiA0KSA/IDQgKyBCSVROT180KCh4KSA+PiA0KSA6IEJJVE5PXzQoKHgpKSkKLSNkZWZpbmUJQklUTk9fNCh4KSAoKCh4KSA+PiAyKSA/IDIgKyBCSVROT18yKCh4KSA+PiAyKSA6IEJJVE5PXzIoKHgpKSkKLSNkZWZpbmUJQklUTk9fMih4KSAoKCh4KSAmIDIpID8gMSA6IDApCiAjZGVmaW5lCUJJVChuKQkoMVUgPDwgbikKICNkZWZpbmUJSVNfRVhURU5ERUQoX19wKQlcCiAJICAgIChFWFRSQUNUX0xFXzMyQklUUyhfX3ApICYgQklUKElFRUU4MDIxMV9SQURJT1RBUF9FWFQpKSAhPSAwCiAKIAlzdHJ1Y3QgY3BhY2tfc3RhdGUgY3BhY2tlcjsKLQlzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqaGRyOwotCXVpbnQzMl90IHByZXNlbnQsIG5leHRfcHJlc2VudDsKLQl1aW50MzJfdCBwcmVzZW50ZmxhZ3MgPSAwOwotCXVpbnQzMl90ICpwcmVzZW50cCwgKmxhc3RfcHJlc2VudHA7Ci0JZW51bSBpZWVlODAyMTFfcmFkaW90YXBfdHlwZSBiaXQ7CisJY29uc3Qgc3RydWN0IGllZWU4MDIxMV9yYWRpb3RhcF9oZWFkZXIgKmhkcjsKKwl1aW50MzJfdCBwcmVzZW50ZmxhZ3M7CisJY29uc3QgdWludDMyX3QgKnByZXNlbnRwLCAqbGFzdF9wcmVzZW50cDsKKwlpbnQgdmVuZG9yX25hbWVzcGFjZTsKKwl1aW50OF90IHZlbmRvcl9vdWlbM107CisJdWludDhfdCB2ZW5kb3Jfc3VibmFtZXNwYWNlOworCXVpbnQxNl90IHNraXBfbGVuZ3RoOwogCWludCBiaXQwOwogCXVfaW50IGxlbjsKIAl1aW50OF90IGZsYWdzOwogCWludCBwYWQ7CiAJdV9pbnQgZmNzbGVuOwotCXN0cnVjdCByYWRpb3RhcF9zdGF0ZSBzdGF0ZTsKIAogCWlmIChjYXBsZW4gPCBzaXplb2YoKmhkcikpIHsKIAkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogCQlyZXR1cm4gY2FwbGVuOwogCX0KIAotCWhkciA9IChzdHJ1Y3QgaWVlZTgwMjExX3JhZGlvdGFwX2hlYWRlciAqKXA7CisJaGRyID0gKGNvbnN0IHN0cnVjdCBpZWVlODAyMTFfcmFkaW90YXBfaGVhZGVyICopcDsKIAogCWxlbiA9IEVYVFJBQ1RfTEVfMTZCSVRTKCZoZHItPml0X2xlbik7CiAKKwkvKgorCSAqIElmIHdlIGRvbid0IGhhdmUgdGhlIGVudGlyZSByYWRpb3RhcCBoZWFkZXIsIGp1c3QgZ2l2ZSB1cC4KKwkgKi8KIAlpZiAoY2FwbGVuIDwgbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIAkJcmV0dXJuIGNhcGxlbjsKIAl9Ci0JY3BhY2tfaW5pdCgmY3BhY2tlciwgKHVpbnQ4X3QgKiloZHIsIGxlbik7IC8qIGFsaWduIGFnYWluc3QgaGVhZGVyIHN0YXJ0ICovCisJY3BhY2tfaW5pdCgmY3BhY2tlciwgKGNvbnN0IHVpbnQ4X3QgKiloZHIsIGxlbik7IC8qIGFsaWduIGFnYWluc3QgaGVhZGVyIHN0YXJ0ICovCiAJY3BhY2tfYWR2YW5jZSgmY3BhY2tlciwgc2l6ZW9mKCpoZHIpKTsgLyogaW5jbHVkZXMgdGhlIDFzdCBiaXRtYXAgKi8KIAlmb3IgKGxhc3RfcHJlc2VudHAgPSAmaGRyLT5pdF9wcmVzZW50OwotCSAgICAgSVNfRVhURU5ERUQobGFzdF9wcmVzZW50cCkgJiYKLQkgICAgICh1X2NoYXIqKShsYXN0X3ByZXNlbnRwICsgMSkgPD0gcCArIGxlbjsKKwkgICAgIChjb25zdCB1X2NoYXIqKShsYXN0X3ByZXNlbnRwICsgMSkgPD0gcCArIGxlbiAmJgorCSAgICAgSVNfRVhURU5ERUQobGFzdF9wcmVzZW50cCk7CiAJICAgICBsYXN0X3ByZXNlbnRwKyspCiAJICBjcGFja19hZHZhbmNlKCZjcGFja2VyLCBzaXplb2YoaGRyLT5pdF9wcmVzZW50KSk7IC8qIG1vcmUgYml0bWFwcyAqLwogCiAJLyogYXJlIHRoZXJlIG1vcmUgYml0bWFwIGV4dGVuc2lvbnMgdGhhbiBieXRlcyBpbiBoZWFkZXI/ICovCi0JaWYgKElTX0VYVEVOREVEKGxhc3RfcHJlc2VudHApKSB7CisJaWYgKChjb25zdCB1X2NoYXIqKShsYXN0X3ByZXNlbnRwICsgMSkgPiBwICsgbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIAkJcmV0dXJuIGNhcGxlbjsKIAl9CiAKKwkvKgorCSAqIFN0YXJ0IG91dCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBkZWZhdWx0IHJhZGlvdGFwIG5hbWVzcGFjZS4KKwkgKi8KKwliaXQwID0gMDsKKwl2ZW5kb3JfbmFtZXNwYWNlID0gMDsKKwltZW1zZXQodmVuZG9yX291aSwgMCwgMyk7CisJdmVuZG9yX3N1Ym5hbWVzcGFjZSA9IDA7CisJc2tpcF9sZW5ndGggPSAwOwogCS8qIEFzc3VtZSBubyBmbGFncyAqLwogCWZsYWdzID0gMDsKIAkvKiBBc3N1bWUgbm8gQXRoZXJvcyBwYWRkaW5nIGJldHdlZW4gODAyLjExIGhlYWRlciBhbmQgYm9keSAqLwogCXBhZCA9IDA7CiAJLyogQXNzdW1lIG5vIEZDUyBhdCBlbmQgb2YgZnJhbWUgKi8KIAlmY3NsZW4gPSAwOwotCWZvciAoYml0MCA9IDAsIHByZXNlbnRwID0gJmhkci0+aXRfcHJlc2VudDsgcHJlc2VudHAgPD0gbGFzdF9wcmVzZW50cDsKLQkgICAgIHByZXNlbnRwKyssIGJpdDAgKz0gMzIpIHsKKwlmb3IgKHByZXNlbnRwID0gJmhkci0+aXRfcHJlc2VudDsgcHJlc2VudHAgPD0gbGFzdF9wcmVzZW50cDsKKwkgICAgcHJlc2VudHArKykgewogCQlwcmVzZW50ZmxhZ3MgPSBFWFRSQUNUX0xFXzMyQklUUyhwcmVzZW50cCk7CiAKLQkJLyogQ2xlYXIgc3RhdGUuICovCi0JCW1lbXNldCgmc3RhdGUsIDAsIHNpemVvZihzdGF0ZSkpOworCQkvKgorCQkgKiBJZiB0aGlzIGlzIGEgdmVuZG9yIG5hbWVzcGFjZSwgd2UgZG9uJ3QgaGFuZGxlIGl0LgorCQkgKi8KKwkJaWYgKHZlbmRvcl9uYW1lc3BhY2UpIHsKKwkJCS8qCisJCQkgKiBTa2lwIHBhc3QgdGhlIHN0dWZmIHdlIGRvbid0IHVuZGVyc3RhbmQuCisJCQkgKiBJZiB3ZSBhZGQgc3VwcG9ydCBmb3IgYW55IHZlbmRvciBuYW1lc3BhY2VzLAorCQkJICogaXQnZCBiZSBhZGRlZCBoZXJlOyB1c2UgdmVuZG9yX291aSBhbmQKKwkJCSAqIHZlbmRvcl9zdWJuYW1lc3BhY2UgdG8gaW50ZXJwcmV0IHRoZSBmaWVsZHMuCisJCQkgKi8KKwkJCWlmIChjcGFja19hZHZhbmNlKCZjcGFja2VyLCBza2lwX2xlbmd0aCkgIT0gMCkgeworCQkJCS8qCisJCQkJICogUmFuIG91dCBvZiBzcGFjZSBpbiB0aGUgcGFja2V0LgorCQkJCSAqLworCQkJCWJyZWFrOworCQkJfQogCi0JCWZvciAocHJlc2VudCA9IEVYVFJBQ1RfTEVfMzJCSVRTKHByZXNlbnRwKTsgcHJlc2VudDsKLQkJICAgICBwcmVzZW50ID0gbmV4dF9wcmVzZW50KSB7Ci0JCQkvKiBjbGVhciB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0IHRoYXQgaXMgc2V0ICovCi0JCQluZXh0X3ByZXNlbnQgPSBwcmVzZW50ICYgKHByZXNlbnQgLSAxKTsKKwkJCS8qCisJCQkgKiBXZSd2ZSBza2lwcGVkIGl0IGFsbDsgbm90aGluZyBtb3JlIHRvCisJCQkgKiBza2lwLgorCQkJICovCisJCQlza2lwX2xlbmd0aCA9IDA7CisJCX0gZWxzZSB7CisJCQlpZiAocHJpbnRfaW5fcmFkaW90YXBfbmFtZXNwYWNlKG5kbywgJmNwYWNrZXIsCisJCQkgICAgJmZsYWdzLCBwcmVzZW50ZmxhZ3MsIGJpdDApICE9IDApIHsKKwkJCQkvKgorCQkJCSAqIEZhdGFsIGVycm9yIC0gY2FuJ3QgcHJvY2VzcyBhbnl0aGluZworCQkJCSAqIG1vcmUgaW4gdGhlIHJhZGlvdGFwIGhlYWRlci4KKwkJCQkgKi8KKwkJCQlicmVhazsKKwkJCX0KKwkJfQogCi0JCQkvKiBleHRyYWN0IHRoZSBsZWFzdCBzaWduaWZpY2FudCBiaXQgdGhhdCBpcyBzZXQgKi8KLQkJCWJpdCA9IChlbnVtIGllZWU4MDIxMV9yYWRpb3RhcF90eXBlKQotCQkJICAgIChiaXQwICsgQklUTk9fMzIocHJlc2VudCBeIG5leHRfcHJlc2VudCkpOworCQkvKgorCQkgKiBIYW5kbGUgdGhlIG5hbWVzcGFjZSBzd2l0Y2ggYml0czsgd2UndmUgYWxyZWFkeSBoYW5kbGVkCisJCSAqIHRoZSBleHRlbnNpb24gYml0IGluIGFsbCBidXQgdGhlIGxhc3Qgd29yZCBhYm92ZS4KKwkJICovCisJCXN3aXRjaCAocHJlc2VudGZsYWdzICYKKwkJICAgIChCSVQoSUVFRTgwMjExX1JBRElPVEFQX05BTUVTUEFDRSl8QklUKElFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFKSkpIHsKIAotCQkJaWYgKHByaW50X3JhZGlvdGFwX2ZpZWxkKG5kbywgJmNwYWNrZXIsIGJpdCwgJmZsYWdzLCAmc3RhdGUsIHByZXNlbnRmbGFncykgIT0gMCkKLQkJCQlnb3RvIG91dDsKKwkJY2FzZSAwOgorCQkJLyoKKwkJCSAqIFdlJ3JlIG5vdCBjaGFuZ2luZyBuYW1lc3BhY2VzLgorCQkJICogYWR2YW5jZSB0byB0aGUgbmV4dCAzMiBiaXRzIGluIHRoZSBjdXJyZW50CisJCQkgKiBuYW1lc3BhY2UuCisJCQkgKi8KKwkJCWJpdDAgKz0gMzI7CisJCQlicmVhazsKKworCQljYXNlIEJJVChJRUVFODAyMTFfUkFESU9UQVBfTkFNRVNQQUNFKToKKwkJCS8qCisJCQkgKiBXZSdyZSBzd2l0Y2hpbmcgdG8gdGhlIHJhZGlvdGFwIG5hbWVzcGFjZS4KKwkJCSAqIFJlc2V0IHRoZSBwcmVzZW5jZS1iaXRtYXAgaW5kZXggdG8gMCwgYW5kCisJCQkgKiByZXNldCB0aGUgbmFtZXNwYWNlIHRvIHRoZSBkZWZhdWx0IHJhZGlvdGFwCisJCQkgKiBuYW1lc3BhY2UuCisJCQkgKi8KKwkJCWJpdDAgPSAwOworCQkJdmVuZG9yX25hbWVzcGFjZSA9IDA7CisJCQltZW1zZXQodmVuZG9yX291aSwgMCwgMyk7CisJCQl2ZW5kb3Jfc3VibmFtZXNwYWNlID0gMDsKKwkJCXNraXBfbGVuZ3RoID0gMDsKKwkJCWJyZWFrOworCisJCWNhc2UgQklUKElFRUU4MDIxMV9SQURJT1RBUF9WRU5ET1JfTkFNRVNQQUNFKToKKwkJCS8qCisJCQkgKiBXZSdyZSBzd2l0Y2hpbmcgdG8gYSB2ZW5kb3IgbmFtZXNwYWNlLgorCQkJICogUmVzZXQgdGhlIHByZXNlbmNlLWJpdG1hcCBpbmRleCB0byAwLAorCQkJICogbm90ZSB0aGF0IHdlJ3JlIGluIGEgdmVuZG9yIG5hbWVzcGFjZSwKKwkJCSAqIGFuZCBmZXRjaCB0aGUgZmllbGRzIG9mIHRoZSBWZW5kb3IgTmFtZXNwYWNlCisJCQkgKiBpdGVtLgorCQkJICovCisJCQliaXQwID0gMDsKKwkJCXZlbmRvcl9uYW1lc3BhY2UgPSAxOworCQkJaWYgKChjcGFja19hbGlnbl9hbmRfcmVzZXJ2ZSgmY3BhY2tlciwgMikpID09IE5VTEwpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY3BhY2tfdWludDgoJmNwYWNrZXIsICZ2ZW5kb3Jfb3VpWzBdKSAhPSAwKSB7CisJCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNwYWNrX3VpbnQ4KCZjcGFja2VyLCAmdmVuZG9yX291aVsxXSkgIT0gMCkgeworCQkJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChjcGFja191aW50OCgmY3BhY2tlciwgJnZlbmRvcl9vdWlbMl0pICE9IDApIHsKKwkJCQlORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAoY3BhY2tfdWludDgoJmNwYWNrZXIsICZ2ZW5kb3Jfc3VibmFtZXNwYWNlKSAhPSAwKSB7CisJCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGNwYWNrX3VpbnQxNigmY3BhY2tlciwgJnNraXBfbGVuZ3RoKSAhPSAwKSB7CisJCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisKKwkJZGVmYXVsdDoKKwkJCS8qCisJCQkgKiBJbGxlZ2FsIGNvbWJpbmF0aW9uLiAgVGhlIGJlaGF2aW9yIGluIHRoaXMKKwkJCSAqIGNhc2UgaXMgdW5kZWZpbmVkIGJ5IHRoZSByYWRpb3RhcCBzcGVjOyB3ZQorCQkJICoganVzdCBpZ25vcmUgYm90aCBiaXRzLgorCQkJICovCisJCQlicmVhazsKIAkJfQogCX0KIAotb3V0OgogCWlmIChmbGFncyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0RBVEFQQUQpCiAJCXBhZCA9IDE7CS8qIEF0aGVyb3MgcGFkZGluZyAqLwogCWlmIChmbGFncyAmIElFRUU4MDIxMV9SQURJT1RBUF9GX0ZDUykKZGlmZiAtLWdpdCBhL3ByaW50LTgwMl8xNV80LmMgYi9wcmludC04MDJfMTVfNC5jCmluZGV4IDI2YzI4ZWUuLjZmZTZkMzUgMTAwNjQ0Ci0tLSBhL3ByaW50LTgwMl8xNV80LmMKKysrIGIvcHJpbnQtODAyXzE1XzQuYwpAQCAtMjAsMTQgKzIwLDE1IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElFRUUgODAyLjE1LjQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgpAQCAtMTEyLDcgKzExMyw3IEBACiAJaWYgKG5kby0+bmRvX3ZmbGFnKQogCQlORF9QUklOVCgobmRvLCJzZXEgJTAyeCAiLCBzZXEpKTsKIAlpZiAoaGRybGVuID09IC0xKSB7Ci0JCU5EX1BSSU5UKChuZG8sIm1hbGZvcm1lZCEgIikpOworCQlORF9QUklOVCgobmRvLCJpbnZhbGlkISAiKSk7CiAJCXJldHVybiBjYXBsZW47CiAJfQogCkBAIC0xMzksNyArMTQwLDcgQEAKIAkJY2FzZSAweDAzOgogCQkJcGFuaWQgPSBFWFRSQUNUX0xFXzE2QklUUyhwKTsKIAkJCXAgKz0gMjsKLQkJCU5EX1BSSU5UKChuZG8sIiUwNHg6JXMgIiwgcGFuaWQsIGxlNjRhZGRyX3N0cmluZyhwKSkpOworCQkJTkRfUFJJTlQoKG5kbywiJTA0eDolcyAiLCBwYW5pZCwgbGU2NGFkZHJfc3RyaW5nKG5kbywgcCkpKTsKIAkJCXAgKz0gODsKIAkJCWJyZWFrOwogCQl9CkBAIC0xNjUsNyArMTY2LDcgQEAKIAkJCQlwYW5pZCA9IEVYVFJBQ1RfTEVfMTZCSVRTKHApOwogCQkJCXAgKz0gMjsKIAkJCX0KLSAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sIiUwNHg6JXMgIiwgcGFuaWQsIGxlNjRhZGRyX3N0cmluZyhwKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywiJTA0eDolcyAiLCBwYW5pZCwgbGU2NGFkZHJfc3RyaW5nKG5kbywgcCkpKTsKIAkJCXAgKz0gODsKIAkJCWJyZWFrOwogCQl9CmRpZmYgLS1naXQgYS9wcmludC1haC5jIGIvcHJpbnQtYWguYwppbmRleCAwYmFkZjQ4Li5iZWM2Zjg4IDEwMDY0NAotLS0gYS9wcmludC1haC5jCisrKyBiL3ByaW50LWFoLmMKQEAgLTIxLDQwICsyMSw0MCBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJUFNFQyBBdXRoZW50aWNhdGlvbiBIZWFkZXIgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlICJhaC5oIgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogaW50CiBhaF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCkKIHsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgYWggKmFoOwotCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZXA7CiAJaW50IHN1bWxlbjsKLQl1aW50MzJfdCBzcGk7CiAKIAlhaCA9IChjb25zdCBzdHJ1Y3QgYWggKilicDsKLQllcCA9IG5kby0+bmRvX3NuYXBlbmQ7CQkvKiAnZXAnIHBvaW50cyB0byB0aGUgZW5kIG9mIGF2YWlsYWJsZSBkYXRhLiAqLwogCiAJTkRfVENIRUNLKCphaCk7CiAKIAlzdW1sZW4gPSBhaC0+YWhfbGVuIDw8IDI7Ci0Jc3BpID0gRVhUUkFDVF8zMkJJVFMoJmFoLT5haF9zcGkpOwogCi0JTkRfUFJJTlQoKG5kbywgIkFIKHNwaT0weCUwOHgiLCBzcGkpKTsKKwlORF9QUklOVCgobmRvLCAiQUgoc3BpPTB4JTA4eCIsIEVYVFJBQ1RfMzJCSVRTKCZhaC0+YWhfc3BpKSkpOwogCWlmIChuZG8tPm5kb192ZmxhZykKIAkJTkRfUFJJTlQoKG5kbywgIixzdW1sZW49JWQiLCBzdW1sZW4pKTsKKwlORF9UQ0hFQ0tfMzJCSVRTKGFoICsgMSk7CiAJTkRfUFJJTlQoKG5kbywgIixzZXE9MHgleCIsIEVYVFJBQ1RfMzJCSVRTKGFoICsgMSkpKTsKLQlpZiAoYnAgKyBzaXplb2Yoc3RydWN0IGFoKSArIHN1bWxlbiA+IGVwKQotCQlORF9QUklOVCgobmRvLCAiW3RydW5jYXRlZF0iKSk7CisJaWYgKCFORF9UVEVTVDIoKmJwLCBzaXplb2Yoc3RydWN0IGFoKSArIHN1bWxlbikpIHsKKwkJTkRfUFJJTlQoKG5kbywgIlt0cnVuY2F0ZWRdKToiKSk7CisJCXJldHVybiAtMTsKKwl9CiAJTkRfUFJJTlQoKG5kbywgIik6ICIpKTsKIAogCXJldHVybiBzaXplb2Yoc3RydWN0IGFoKSArIHN1bWxlbjsKZGlmZiAtLWdpdCBhL3ByaW50LWFoY3AuYyBiL3ByaW50LWFoY3AuYwppbmRleCBhOWFlMzhhLi4wNjdiNTA2IDEwMDY0NAotLS0gYS9wcmludC1haGNwLmMKKysrIGIvcHJpbnQtYWhjcC5jCkBAIC0xLDggKzEsNCBAQAogLyoKLSAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZGVjb2Rpbmcgb2YgQUhDUCAoQWQgSG9jIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wpIGJhc2VkCi0gKiBvbiBkcmFmdC1jaHJvYm9jemVrLWFoY3AtMDAgYW5kIHNvdXJjZSBjb2RlIG9mIGFoY3BkLTAuNTMuCi0gKgotICoKICAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgVENQRFVNUCBwcm9qZWN0CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI5LDE5ICsyNSwyMSBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQWQgSG9jIENvbmZpZ3VyYXRpb24gUHJvdG9jb2wgKEFIQ1ApIHByaW50ZXIgKi8KKworLyogQmFzZWQgb24gZHJhZnQtY2hyb2JvY3play1haGNwLTAwIGFuZCBzb3VyY2UgY29kZSBvZiBhaGNwZC0wLjUzICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8YWhjcF0iOwotc3RhdGljIGNvbnN0IGNoYXIgY3N0cltdID0gIihjb3JydXB0KSI7CiAKICNkZWZpbmUgQUhDUF9NQUdJQ19OVU1CRVIgNDMKICNkZWZpbmUgQUhDUF9WRVJTSU9OXzEgMQpAQCAtMTA3LDcgKzEwNSw3IEBACiAJY2hhciBidWZbQlVGU0laRV07CiAKIAlpZiAoY3AgKyA0ICE9IGVwKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAlORF9UQ0hFQ0syKCpjcCwgNCk7CiAJdCA9IEVYVFJBQ1RfMzJCSVRTKGNwKTsKIAlpZiAoTlVMTCA9PSAodG0gPSBnbXRpbWUoJnQpKSkKQEAgLTExOCw4ICsxMTYsOCBAQAogCQlORF9QUklOVCgobmRvLCAiOiAlcyBVVEMiLCBidWYpKTsKIAlyZXR1cm4gMDsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiOiAlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm4gMDsKIHRydW5jOgpAQCAtMTMxLDEzICsxMjksMTMgQEAKIGFoY3Bfc2Vjb25kc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpjcCwgY29uc3QgdV9jaGFyICplcCkKIHsKIAlpZiAoY3AgKyA0ICE9IGVwKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAlORF9UQ0hFQ0syKCpjcCwgNCk7CiAJTkRfUFJJTlQoKG5kbywgIjogJXVzIiwgRVhUUkFDVF8zMkJJVFMoY3ApKSk7CiAJcmV0dXJuIDA7CiAKLWNvcnJ1cHQ6Ci0JTkRfUFJJTlQoKG5kbywgIjogJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuIDA7CiB0cnVuYzoKQEAgLTE1MiwyMCArMTUwLDE2IEBACiAKIAl3aGlsZSAoY3AgPCBlcCkgewogCQlpZiAoY3AgKyAxNiA+IGVwKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlORF9UQ0hFQ0syKCpjcCwgMTYpOwotI2lmZGVmIElORVQ2CiAJCU5EX1BSSU5UKChuZG8sICIlcyVzIiwgc2VwLCBpcDZhZGRyX3N0cmluZyhuZG8sIGNwKSkpOwotI2Vsc2UKLQkJTkRfUFJJTlQoKG5kbywgIiVzKGNvbXBpbGVkIHcvbyBJUHY2KSIsIHNlcCkpOwotI2VuZGlmIC8qIElORVQ2ICovCiAJCWNwICs9IDE2OwogCQlzZXAgPSAiLCAiOwogCX0KIAlyZXR1cm4gMDsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiOiAlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm4gMDsKIHRydW5jOgpAQCAtMTgwLDcgKzE3NCw3IEBACiAKIAl3aGlsZSAoY3AgPCBlcCkgewogCQlpZiAoY3AgKyA0ID4gZXApCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAkJTkRfUFJJTlQoKG5kbywgIiVzJXMiLCBzZXAsIGlwYWRkcl9zdHJpbmcobmRvLCBjcCkpKTsKIAkJY3AgKz0gNDsKQEAgLTE4OCw4ICsxODIsOCBAQAogCX0KIAlyZXR1cm4gMDsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiOiAlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm4gMDsKIHRydW5jOgpAQCAtMjA0LDIwICsxOTgsMTYgQEAKIAogCXdoaWxlIChjcCA8IGVwKSB7CiAJCWlmIChjcCArIDE3ID4gZXApCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCU5EX1RDSEVDSzIoKmNwLCAxNyk7Ci0jaWZkZWYgSU5FVDYKIAkJTkRfUFJJTlQoKG5kbywgIiVzJXMvJXUiLCBzZXAsIGlwNmFkZHJfc3RyaW5nKG5kbywgY3ApLCAqKGNwICsgMTYpKSk7Ci0jZWxzZQotCQlORF9QUklOVCgobmRvLCAiJXMoY29tcGlsZWQgdy9vIElQdjYpLyV1Iiwgc2VwLCAqKGNwICsgMTYpKSk7Ci0jZW5kaWYgLyogSU5FVDYgKi8KIAkJY3AgKz0gMTc7CiAJCXNlcCA9ICIsICI7CiAJfQogCXJldHVybiAwOwogCi1jb3JydXB0OgotCU5EX1BSSU5UKChuZG8sICI6ICVzIiwgY3N0cikpOworaW52YWxpZDoKKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AsIGVwIC0gY3ApOwogCXJldHVybiAwOwogdHJ1bmM6CkBAIC0yMzIsNyArMjIyLDcgQEAKIAogCXdoaWxlIChjcCA8IGVwKSB7CiAJCWlmIChjcCArIDUgPiBlcCkKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJTkRfVENIRUNLMigqY3AsIDUpOwogCQlORF9QUklOVCgobmRvLCAiJXMlcy8ldSIsIHNlcCwgaXBhZGRyX3N0cmluZyhuZG8sIGNwKSwgKihjcCArIDQpKSk7CiAJCWNwICs9IDU7CkBAIC0yNDAsOCArMjMwLDggQEAKIAl9CiAJcmV0dXJuIDA7CiAKLWNvcnJ1cHQ6Ci0JTkRfUFJJTlQoKG5kbywgIjogJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuIDA7CiB0cnVuYzoKQEAgLTI4MywxMiArMjczLDEyIEBACiAJCQljb250aW51ZTsKIAkJLyogTGVuZ3RoICovCiAJCWlmIChjcCArIDEgPiBlcCkKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJTkRfVENIRUNLMigqY3AsIDEpOwogCQlvcHRpb25fbGVuID0gKmNwOwogCQljcCArPSAxOwogCQlpZiAoY3AgKyBvcHRpb25fbGVuID4gZXApCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIFZhbHVlICovCiAJCWlmIChvcHRpb25fbm8gPD0gQUhDUDFfT1BUX01BWCAmJiBkYXRhX2RlY29kZXJzW29wdGlvbl9ub10gIT0gTlVMTCkgewogCQkJaWYgKGRhdGFfZGVjb2RlcnNbb3B0aW9uX25vXShuZG8sIGNwLCBjcCArIG9wdGlvbl9sZW4pIDwgMCkKQEAgLTMwMSw4ICsyOTEsOCBAQAogCX0KIAlyZXR1cm47CiAKLWNvcnJ1cHQ6Ci0JTkRfUFJJTlQoKG5kbywgIiAlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm47CiB0cnVuYzoKQEAgLTMxNiw3ICszMDYsNyBAQAogCXVpbnQxNl90IGJvZHlfbGVuOwogCiAJaWYgKGNwICsgQUhDUDFfQk9EWV9NSU5fTEVOID4gZXApCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIFR5cGUgKi8KIAlORF9UQ0hFQ0syKCpjcCwgMSk7CiAJdHlwZSA9ICpjcDsKQEAgLTMzNyw3ICszMjcsNyBAQAogCQlORF9QUklOVCgobmRvLCAiLCBMZW5ndGggJXUiLCBib2R5X2xlbikpOwogCX0KIAlpZiAoY3AgKyBib2R5X2xlbiA+IGVwKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAogCS8qIE9wdGlvbnMgKi8KIAlpZiAobmRvLT5uZG9fdmZsYWcgPj0gMikKQEAgLTM0Niw4ICszMzYsOCBAQAogCQlORF9UQ0hFQ0syKCpjcCwgYm9keV9sZW4pOwogCXJldHVybjsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiICVzIiwgY3N0cikpOworaW52YWxpZDoKKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AsIGVwIC0gY3ApOwogCXJldHVybjsKIHRydW5jOgpAQCAtMzYyLDExICszNTIsMTEgQEAKIAogCU5EX1BSSU5UKChuZG8sICJBSENQIikpOwogCWlmIChsZW4gPCAyKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBNYWdpYyAqLwogCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAlpZiAoKmNwICE9IEFIQ1BfTUFHSUNfTlVNQkVSKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAljcCArPSAxOwogCS8qIFZlcnNpb24gKi8KIAlORF9UQ0hFQ0syKCpjcCwgMSk7CkBAIC0zNzYsNyArMzY2LDcgQEAKIAkJY2FzZSBBSENQX1ZFUlNJT05fMTogewogCQkJTkRfUFJJTlQoKG5kbywgIiBWZXJzaW9uIDEiKSk7CiAJCQlpZiAobGVuIDwgQUhDUDFfSEVBREVSX0ZJWF9MRU4pCi0JCQkJZ290byBjb3JydXB0OworCQkJCWdvdG8gaW52YWxpZDsKIAkJCWlmICghbmRvLT5uZG9fdmZsYWcpIHsKIAkJCQlORF9UQ0hFQ0syKCpjcCwgQUhDUDFfSEVBREVSX0ZJWF9MRU4gLSAyKTsKIAkJCQljcCArPSBBSENQMV9IRUFERVJfRklYX0xFTiAtIDI7CkBAIC00MTIsOCArNDAyLDggQEAKIAl9CiAJcmV0dXJuOwogCi1jb3JydXB0OgotCU5EX1BSSU5UKChuZG8sICIgJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuOwogdHJ1bmM6CmRpZmYgLS1naXQgYS9wcmludC1hb2R2LmMgYi9wcmludC1hb2R2LmMKaW5kZXggZWYyN2VlZS4uNmNkMGM5ZSAxMDA2NDQKLS0tIGEvcHJpbnQtYW9kdi5jCisrKyBiL3ByaW50LWFvZHYuYwpAQCAtMzAsMTYgKzMwLDE3IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBBZCBob2MgT24tRGVtYW5kIERpc3RhbmNlIFZlY3RvciAoQU9EVikgUm91dGluZyBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCi0jaW5jbHVkZSAiZXh0cmFjdC5oIgkJCS8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogCiBzdHJ1Y3QgYW9kdl9ycmVxIHsKQEAgLTUzLDcgKzU0LDYgQEAKIAl1aW50MzJfdAlycmVxX29hOwkvKiBvcmlnaW5hdG9yIElQdjQgYWRkcmVzcyAqLwogCXVpbnQzMl90CXJyZXFfb3M7CS8qIG9yaWdpbmF0b3Igc2VxdWVuY2UgbnVtYmVyICovCiB9OwotI2lmZGVmIElORVQ2CiBzdHJ1Y3QgYW9kdl9ycmVxNiB7CiAJdWludDhfdAkJcnJlcV90eXBlOwkvKiBBT0RWIG1lc3NhZ2UgdHlwZSAoMSkgKi8KIAl1aW50OF90CQlycmVxX2ZsYWdzOwkvKiB2YXJpb3VzIGZsYWdzICovCkBAIC03Niw3ICs3Niw2IEBACiAJc3RydWN0IGluNl9hZGRyCXJyZXFfZGE7CS8qIGRlc3RpbmF0aW9uIElQdjYgYWRkcmVzcyAqLwogCXN0cnVjdCBpbjZfYWRkcglycmVxX29hOwkvKiBvcmlnaW5hdG9yIElQdjYgYWRkcmVzcyAqLwogfTsKLSNlbmRpZgogCiAjZGVmaW5lCVJSRVFfSk9JTgkweDgwCQkvKiBqb2luIChyZXNlcnZlZCBmb3IgbXVsdGljYXN0ICovCiAjZGVmaW5lCVJSRVFfUkVQQUlSCTB4NDAJCS8qIHJlcGFpciAocmVzZXJ2ZWQgZm9yIG11bHRpY2FzdCAqLwpAQCAtOTUsNyArOTQsNiBAQAogCXVpbnQzMl90CXJyZXBfb2E7CS8qIG9yaWdpbmF0b3IgSVB2NCBhZGRyZXNzICovCiAJdWludDMyX3QJcnJlcF9saWZlOwkvKiBsaWZldGltZSBvZiB0aGlzIHJvdXRlICovCiB9OwotI2lmZGVmIElORVQ2CiBzdHJ1Y3QgYW9kdl9ycmVwNiB7CiAJdWludDhfdAkJcnJlcF90eXBlOwkvKiBBT0RWIG1lc3NhZ2UgdHlwZSAoMikgKi8KIAl1aW50OF90CQlycmVwX2ZsYWdzOwkvKiB2YXJpb3VzIGZsYWdzICovCkBAIC0xMTYsNyArMTE0LDYgQEAKIAlzdHJ1Y3QgaW42X2FkZHIJcnJlcF9vYTsJLyogb3JpZ2luYXRvciBJUHY2IGFkZHJlc3MgKi8KIAl1aW50MzJfdAlycmVwX2xpZmU7CS8qIGxpZmV0aW1lIG9mIHRoaXMgcm91dGUgKi8KIH07Ci0jZW5kaWYKIAogI2RlZmluZQlSUkVQX1JFUEFJUgkJMHg4MAkvKiByZXBhaXIgKHJlc2VydmVkIGZvciBtdWx0aWNhc3QgKi8KICNkZWZpbmUJUlJFUF9BQ0sJCTB4NDAJLyogYWNrbm93bGVkZ2VtZW50IHJlcXVpcmVkICovCkBAIC0xMjcsNyArMTI0LDYgQEAKIAl1aW50MzJfdAl1X2RhOwkvKiBJUHY0IGFkZHJlc3MgKi8KIAl1aW50MzJfdAl1X2RzOwkvKiBzZXF1ZW5jZSBudW1iZXIgKi8KIH07Ci0jaWZkZWYgSU5FVDYKIHN0cnVjdCByZXJyX3VucmVhY2g2IHsKIAlzdHJ1Y3QgaW42X2FkZHIJdV9kYTsJLyogSVB2NiBhZGRyZXNzICovCiAJdWludDMyX3QJdV9kczsJLyogc2VxdWVuY2UgbnVtYmVyICovCkBAIC0xMzYsNyArMTMyLDYgQEAKIAlzdHJ1Y3QgaW42X2FkZHIJdV9kYTsJLyogSVB2NiBhZGRyZXNzICovCiAJdWludDMyX3QJdV9kczsJLyogc2VxdWVuY2UgbnVtYmVyICovCiB9OwotI2VuZGlmCiAKIHN0cnVjdCBhb2R2X3JlcnIgewogCXVpbnQ4X3QJCXJlcnJfdHlwZTsJLyogQU9EViBtZXNzYWdlIHR5cGUgKDMgb3IgMTgpICovCkBAIC0yNzUsNyArMjcwLDcgQEAKIAlORF9QUklOVCgobmRvLCAiIHJlcnIgJXMgW2l0ZW1zICV1XSBbJXVdOiIsCiAJICAgIGFwLT5yZXJyX2ZsYWdzICYgUkVSUl9OT0RFTEVURSA/ICJbRF0iIDogIiIsCiAJICAgIGFwLT5yZXJyX2RjLCBsZW5ndGgpKTsKLQlkcCA9IChzdHJ1Y3QgcmVycl91bnJlYWNoICopKGRhdCArIHNpemVvZigqYXApKTsKKwlkcCA9IChjb25zdCBzdHJ1Y3QgcmVycl91bnJlYWNoICopKGRhdCArIHNpemVvZigqYXApKTsKIAlpID0gbGVuZ3RoIC0gc2l6ZW9mKCphcCk7CiAJZm9yIChkYyA9IGFwLT5yZXJyX2RjOyBkYyAhPSAwOyBkYy0tKSB7CiAJCU5EX1RDSEVDSygqZHApOwpAQCAtMjkzLDEzICsyODgsOCBAQAogfQogCiBzdGF0aWMgdm9pZAotI2lmZGVmIElORVQ2CiBhb2R2X3Y2X3JyZXEobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0LCB1X2ludCBsZW5ndGgpCi0jZWxzZQotYW9kdl92Nl9ycmVxKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCBfVV8sIHVfaW50IGxlbmd0aCkKLSNlbmRpZgogewotI2lmZGVmIElORVQ2CiAJdV9pbnQgaTsKIAljb25zdCBzdHJ1Y3QgYW9kdl9ycmVxNiAqYXAgPSAoY29uc3Qgc3RydWN0IGFvZHZfcnJlcTYgKilkYXQ7CiAKQEAgLTMyNiwxOSArMzE2LDExIEBACiAKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sICIgW3xycmVxIikpOwotI2Vsc2UKLQlORF9QUklOVCgobmRvLCAiIHY2IHJyZXEgJXUiLCBsZW5ndGgpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZAotI2lmZGVmIElORVQ2CiBhb2R2X3Y2X3JyZXAobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0LCB1X2ludCBsZW5ndGgpCi0jZWxzZQotYW9kdl92Nl9ycmVwKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCBfVV8sIHVfaW50IGxlbmd0aCkKLSNlbmRpZgogewotI2lmZGVmIElORVQ2CiAJdV9pbnQgaTsKIAljb25zdCBzdHJ1Y3QgYW9kdl9ycmVwNiAqYXAgPSAoY29uc3Qgc3RydWN0IGFvZHZfcnJlcDYgKilkYXQ7CiAKQEAgLTM2MiwxOSArMzQ0LDExIEBACiAKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sICIgW3xycmVxIikpOwotI2Vsc2UKLQlORF9QUklOVCgobmRvLCAiIHJyZXAgJXUiLCBsZW5ndGgpKTsKLSNlbmRpZgogfQogCiBzdGF0aWMgdm9pZAotI2lmZGVmIElORVQ2CiBhb2R2X3Y2X3JlcnIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0LCB1X2ludCBsZW5ndGgpCi0jZWxzZQotYW9kdl92Nl9yZXJyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCBfVV8sIHVfaW50IGxlbmd0aCkKLSNlbmRpZgogewotI2lmZGVmIElORVQ2CiAJdV9pbnQgaSwgZGM7CiAJY29uc3Qgc3RydWN0IGFvZHZfcmVyciAqYXAgPSAoY29uc3Qgc3RydWN0IGFvZHZfcmVyciAqKWRhdDsKIAljb25zdCBzdHJ1Y3QgcmVycl91bnJlYWNoNiAqZHA2OwpAQCAtMzg1LDcgKzM1OSw3IEBACiAJTkRfUFJJTlQoKG5kbywgIiByZXJyICVzIFtpdGVtcyAldV0gWyV1XToiLAogCSAgICBhcC0+cmVycl9mbGFncyAmIFJFUlJfTk9ERUxFVEUgPyAiW0RdIiA6ICIiLAogCSAgICBhcC0+cmVycl9kYywgbGVuZ3RoKSk7Ci0JZHA2ID0gKHN0cnVjdCByZXJyX3VucmVhY2g2ICopKHZvaWQgKikoYXAgKyAxKTsKKwlkcDYgPSAoY29uc3Qgc3RydWN0IHJlcnJfdW5yZWFjaDYgKikoY29uc3Qgdm9pZCAqKShhcCArIDEpOwogCWkgPSBsZW5ndGggLSBzaXplb2YoKmFwKTsKIAlmb3IgKGRjID0gYXAtPnJlcnJfZGM7IGRjICE9IDA7IGRjLS0pIHsKIAkJTkRfVENIRUNLKCpkcDYpOwpAQCAtNDAwLDE5ICszNzQsMTEgQEAKIAogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywgIlt8cmVycl0iKSk7Ci0jZWxzZQotCU5EX1BSSU5UKChuZG8sICIgcmVyciAldSIsIGxlbmd0aCkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkCi0jaWZkZWYgSU5FVDYKIGFvZHZfdjZfZHJhZnRfMDFfcnJlcShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKLSNlbHNlCi1hb2R2X3Y2X2RyYWZ0XzAxX3JyZXEobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0IF9VXywgdV9pbnQgbGVuZ3RoKQotI2VuZGlmCiB7Ci0jaWZkZWYgSU5FVDYKIAl1X2ludCBpOwogCWNvbnN0IHN0cnVjdCBhb2R2X3JyZXE2X2RyYWZ0XzAxICphcCA9IChjb25zdCBzdHJ1Y3QgYW9kdl9ycmVxNl9kcmFmdF8wMSAqKWRhdDsKIApAQCAtNDM5LDE5ICs0MDUsMTEgQEAKIAogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywgIiBbfHJyZXEiKSk7Ci0jZWxzZQotCU5EX1BSSU5UKChuZG8sICIgcnJlcSAldSIsIGxlbmd0aCkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkCi0jaWZkZWYgSU5FVDYKIGFvZHZfdjZfZHJhZnRfMDFfcnJlcChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKLSNlbHNlCi1hb2R2X3Y2X2RyYWZ0XzAxX3JyZXAobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0IF9VXywgdV9pbnQgbGVuZ3RoKQotI2VuZGlmCiB7Ci0jaWZkZWYgSU5FVDYKIAl1X2ludCBpOwogCWNvbnN0IHN0cnVjdCBhb2R2X3JyZXA2X2RyYWZ0XzAxICphcCA9IChjb25zdCBzdHJ1Y3QgYW9kdl9ycmVwNl9kcmFmdF8wMSAqKWRhdDsKIApAQCAtNDc1LDE5ICs0MzMsMTEgQEAKIAogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywgIiBbfHJyZXEiKSk7Ci0jZWxzZQotCU5EX1BSSU5UKChuZG8sICIgcnJlcCAldSIsIGxlbmd0aCkpOwotI2VuZGlmCiB9CiAKIHN0YXRpYyB2b2lkCi0jaWZkZWYgSU5FVDYKIGFvZHZfdjZfZHJhZnRfMDFfcmVycihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKLSNlbHNlCi1hb2R2X3Y2X2RyYWZ0XzAxX3JlcnIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0IF9VXywgdV9pbnQgbGVuZ3RoKQotI2VuZGlmCiB7Ci0jaWZkZWYgSU5FVDYKIAl1X2ludCBpLCBkYzsKIAljb25zdCBzdHJ1Y3QgYW9kdl9yZXJyICphcCA9IChjb25zdCBzdHJ1Y3QgYW9kdl9yZXJyICopZGF0OwogCWNvbnN0IHN0cnVjdCByZXJyX3VucmVhY2g2X2RyYWZ0XzAxICpkcDY7CkBAIC00OTgsNyArNDQ4LDcgQEAKIAlORF9QUklOVCgobmRvLCAiIHJlcnIgJXMgW2l0ZW1zICV1XSBbJXVdOiIsCiAJICAgIGFwLT5yZXJyX2ZsYWdzICYgUkVSUl9OT0RFTEVURSA/ICJbRF0iIDogIiIsCiAJICAgIGFwLT5yZXJyX2RjLCBsZW5ndGgpKTsKLQlkcDYgPSAoc3RydWN0IHJlcnJfdW5yZWFjaDZfZHJhZnRfMDEgKikodm9pZCAqKShhcCArIDEpOworCWRwNiA9IChjb25zdCBzdHJ1Y3QgcmVycl91bnJlYWNoNl9kcmFmdF8wMSAqKShjb25zdCB2b2lkICopKGFwICsgMSk7CiAJaSA9IGxlbmd0aCAtIHNpemVvZigqYXApOwogCWZvciAoZGMgPSBhcC0+cmVycl9kYzsgZGMgIT0gMDsgZGMtLSkgewogCQlORF9UQ0hFQ0soKmRwNik7CkBAIC01MTMsOSArNDYzLDYgQEAKIAogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywgIlt8cmVycl0iKSk7Ci0jZWxzZQotCU5EX1BSSU5UKChuZG8sICIgcmVyciAldSIsIGxlbmd0aCkpOwotI2VuZGlmCiB9CiAKIHZvaWQKZGlmZiAtLWdpdCBhL3ByaW50LWFvZS5jIGIvcHJpbnQtYW9lLmMKaW5kZXggZjhiYzFmYy4uOTdlOTNkZiAxMDA2NDQKLS0tIGEvcHJpbnQtYW9lLmMKKysrIGIvcHJpbnQtYW9lLmMKQEAgLTEsOCArMSw0IEBACiAvKgotICogVGhpcyBtb2R1bGUgaW1wbGVtZW50cyBkZWNvZGluZyBvZiB0aGUgQVRBIG92ZXIgRXRoZXJuZXQgKEFvRSkgcHJvdG9jb2wKLSAqIGFjY29yZGluZyB0byB0aGUgZm9sbG93aW5nIHNwZWNpZmljYXRpb246Ci0gKiBodHRwOi8vc3VwcG9ydC5jb3JhaWQuY29tL2RvY3VtZW50cy9Bb0VyMTEudHh0Ci0gKgogICogQ29weXJpZ2h0IChjKSAyMDE0IFRoZSBUQ1BEVU1QIHByb2plY3QKICAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgpAQCAtMjksMjAgKzI1LDIyIEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBBVEEgb3ZlciBFdGhlcm5ldCAoQW9FKSBwcm90b2NvbCBwcmludGVyICovCisKKy8qIHNwZWNpZmljYXRpb246IGh0dHA6Ly9icmFudGxleWNvaWxlY29tcGFueS5jb20vQW9FcjExLnBkZiAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJldGhlci5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8YW9lXSI7Ci1zdGF0aWMgY29uc3QgY2hhciBjc3RyW10gPSAiIChjb3JydXB0KSI7CiAKICNkZWZpbmUgQU9FX1YxIDEKICNkZWZpbmUgQVRBX1NFQ1RPUl9TSVpFIDUxMgpAQCAtMTQ4LDcgKzE0Niw3IEBACiAJY29uc3QgdV9jaGFyICplcCA9IGNwICsgbGVuOwogCiAJaWYgKGxlbiA8IEFPRVYxX0lTU1VFX0FSR19MRU4pCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIEFGbGFncyAqLwogCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAlORF9QUklOVCgobmRvLCAiXG5cdEFGbGFnczogWyVzXSIsIGJpdHRvazJzdHIoYW9ldjFfYWZsYWdfc3RyLCAibm9uZSIsICpjcCkpKTsKQEAgLTE5Nyw4ICsxOTUsOCBAQAogCQlORF9QUklOVCgobmRvLCAiXG5cdERhdGE6ICV1IGJ5dGVzIiwgbGVuIC0gQU9FVjFfSVNTVUVfQVJHX0xFTikpOwogCXJldHVybjsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuOwogdHJ1bmM6CkBAIC0yMTMsNyArMjExLDcgQEAKIAl1aW50MTZfdCBjc2xlbjsKIAogCWlmIChsZW4gPCBBT0VWMV9RVUVSWV9BUkdfTEVOKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBCdWZmZXIgQ291bnQgKi8KIAlORF9UQ0hFQ0syKCpjcCwgMik7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHRCdWZmZXIgQ291bnQ6ICV1IiwgRVhUUkFDVF8xNkJJVFMoY3ApKSk7CkBAIC0yMzYsNyArMjM0LDcgQEAKIAljc2xlbiA9IEVYVFJBQ1RfMTZCSVRTKGNwKTsKIAljcCArPSAyOwogCWlmIChjc2xlbiA+IEFPRVYxX01BWF9DT05GU1RSX0xFTiB8fCBBT0VWMV9RVUVSWV9BUkdfTEVOICsgY3NsZW4gPiBsZW4pCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIENvbmZpZyBTdHJpbmcgKi8KIAlORF9UQ0hFQ0syKCpjcCwgY3NsZW4pOwogCWlmIChjc2xlbikgewpAQCAtMjQ2LDggKzI0NCw4IEBACiAJfQogCXJldHVybjsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuOwogdHJ1bmM6CkBAIC0yNjIsNyArMjYwLDcgQEAKIAl1aW50OF90IGRpcmNvdW50LCBpOwogCiAJaWYgKGxlbiA8IEFPRVYxX01BQ19BUkdfTEVOKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBSZXNlcnZlZCAqLwogCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAljcCArPSAxOwpAQCAtMjgwLDcgKzI3OCw3IEBACiAJY3AgKz0gMTsKIAlORF9QUklOVCgobmRvLCAiLCBEaXIgQ291bnQ6ICV1IiwgZGlyY291bnQpKTsKIAlpZiAoQU9FVjFfTUFDX0FSR19MRU4gKyBkaXJjb3VudCAqIDggPiBsZW4pCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIGRpcmVjdGl2ZXMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgZGlyY291bnQ7IGkrKykgewogCQkvKiBSZXNlcnZlZCAqLwpAQCAtMjk3LDggKzI5NSw4IEBACiAJfQogCXJldHVybjsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuOwogdHJ1bmM6CkBAIC0zMTMsNyArMzExLDcgQEAKIAl1aW50OF90IG5tYWNzLCBpOwogCiAJaWYgKGxlbiA8IEFPRVYxX1JFU0VSVkVfQVJHX0xFTiB8fCAobGVuIC0gQU9FVjFfUkVTRVJWRV9BUkdfTEVOKSAlIEVUSEVSX0FERFJfTEVOKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBSQ21kICovCiAJTkRfVENIRUNLMigqY3AsIDEpOwogCU5EX1BSSU5UKChuZG8sICJcblx0UkNtZDogJXMiLCB0b2syc3RyKGFvZXYxX3JjbWRfc3RyLCAiVW5rbm93biAoMHglMDJ4KSIsICpjcCkpKTsKQEAgLTMyNCw3ICszMjIsNyBAQAogCWNwICs9IDE7CiAJTkRfUFJJTlQoKG5kbywgIiwgTk1hY3M6ICV1Iiwgbm1hY3MpKTsKIAlpZiAoQU9FVjFfUkVTRVJWRV9BUkdfTEVOICsgbm1hY3MgKiBFVEhFUl9BRERSX0xFTiAhPSBsZW4pCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIGFkZHJlc3NlcyAqLwogCWZvciAoaSA9IDA7IGkgPCBubWFjczsgaSsrKSB7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0RXRoZXJuZXQgQWRkcmVzcyAldTogJXMiLCBpLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgY3ApKSk7CkBAIC0zMzIsOCArMzMwLDggQEAKIAl9CiAJcmV0dXJuOwogCi1jb3JydXB0OgotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm47CiB0cnVuYzoKQEAgLTM1MCw3ICszNDgsNyBAQAogCXZvaWQgKCpjbWRfZGVjb2RlcikobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2ludCk7CiAKIAlpZiAobGVuIDwgQU9FVjFfQ09NTU9OX0hEUl9MRU4pCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIEZsYWdzICovCiAJZmxhZ3MgPSAqY3AgJiAweDBGOwogCU5EX1BSSU5UKChuZG8sICIsIEZsYWdzOiBbJXNdIiwgYml0dG9rMnN0cihhb2V2MV9mbGFnX3N0ciwgIm5vbmUiLCBmbGFncykpKTsKQEAgLTM5MCw4ICszODgsOCBAQAogCQljbWRfZGVjb2RlcihuZG8sIGNwLCBsZW4gLSBBT0VWMV9DT01NT05fSERSX0xFTik7CiAJcmV0dXJuOwogCi1jb3JydXB0OgotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm47CiB0cnVuYzoKQEAgLTQwOCw3ICs0MDYsNyBAQAogCU5EX1BSSU5UKChuZG8sICJBb0UgbGVuZ3RoICV1IiwgbGVuKSk7CiAKIAlpZiAobGVuIDwgMSkKLQkJZ290byBjb3JydXB0OworCQlnb3RvIGludmFsaWQ7CiAJLyogVmVyL0ZsYWdzICovCiAJTkRfVENIRUNLMigqY3AsIDEpOwogCXZlciA9ICgqY3AgJiAweEYwKSA+PiA0OwpAQCAtNDIyLDggKzQyMCw4IEBACiAJfQogCXJldHVybjsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuOwogdHJ1bmM6CmRpZmYgLS1naXQgYS9wcmludC1hcDEzOTQuYyBiL3ByaW50LWFwMTM5NC5jCmluZGV4IDNiZWZlMjMuLjc5NDAxY2IgMTAwNjQ0Ci0tLSBhL3ByaW50LWFwMTM5NC5jCisrKyBiL3ByaW50LWFwMTM5NC5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQXBwbGUgSVAtb3Zlci1JRUVFIDEzOTQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJldGhlcnR5cGUuaCIKQEAgLTQ4LDYgKzQ5LDEyIEBACiAgKi8KICNkZWZpbmUgRklSRVdJUkVfSERSTEVOCQkxOAogCitzdGF0aWMgY29uc3QgY2hhciAqCitmd2FkZHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmFkZHIpCit7CisJcmV0dXJuIChsaW5rYWRkcl9zdHJpbmcobmRvLCBhZGRyLCBMSU5LQUREUl9JRUVFMTM5NCwgRklSRVdJUkVfRVVJNjRfTEVOKSk7Cit9CisKIHN0YXRpYyBpbmxpbmUgdm9pZAogYXAxMzk0X2hkcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQogewpAQCAtNTcsOCArNjQsOCBAQAogCWZwID0gKGNvbnN0IHN0cnVjdCBmaXJld2lyZV9oZWFkZXIgKilicDsKIAogCU5EX1BSSU5UKChuZG8sICIlcyA+ICVzIiwKLQkJICAgICBsaW5rYWRkcl9zdHJpbmcobmRvLCBmcC0+ZmlyZXdpcmVfZGhvc3QsIExJTktBRERSX0lFRUUxMzk0LCBGSVJFV0lSRV9FVUk2NF9MRU4pLAotCQkgICAgIGxpbmthZGRyX3N0cmluZyhuZG8sIGZwLT5maXJld2lyZV9zaG9zdCwgTElOS0FERFJfSUVFRTEzOTQsIEZJUkVXSVJFX0VVSTY0X0xFTikpKTsKKwkJICAgICBmd2FkZHJfc3RyaW5nKG5kbywgZnAtPmZpcmV3aXJlX3Nob3N0KSwKKwkJICAgICBmd2FkZHJfc3RyaW5nKG5kbywgZnAtPmZpcmV3aXJlX2Rob3N0KSkpOwogCiAJZmlyZXdpcmVfdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKCZmcC0+ZmlyZXdpcmVfdHlwZSk7CiAJaWYgKCFuZG8tPm5kb19xZmxhZykgewpAQCAtODMsOCArOTAsOSBAQAogewogCXVfaW50IGxlbmd0aCA9IGgtPmxlbjsKIAl1X2ludCBjYXBsZW4gPSBoLT5jYXBsZW47Ci0Jc3RydWN0IGZpcmV3aXJlX2hlYWRlciAqZnA7CisJY29uc3Qgc3RydWN0IGZpcmV3aXJlX2hlYWRlciAqZnA7CiAJdV9zaG9ydCBldGhlcl90eXBlOworCXN0cnVjdCBsbGFkZHJfaW5mbyBzcmMsIGRzdDsKIAogCWlmIChjYXBsZW4gPCBGSVJFV0lSRV9IRFJMRU4pIHsKIAkJTkRfUFJJTlQoKG5kbywgIlt8YXAxMzk0XSIpKTsKQEAgLTk2LDE0ICsxMDQsMTggQEAKIAogCWxlbmd0aCAtPSBGSVJFV0lSRV9IRFJMRU47CiAJY2FwbGVuIC09IEZJUkVXSVJFX0hEUkxFTjsKLQlmcCA9IChzdHJ1Y3QgZmlyZXdpcmVfaGVhZGVyICopcDsKKwlmcCA9IChjb25zdCBzdHJ1Y3QgZmlyZXdpcmVfaGVhZGVyICopcDsKIAlwICs9IEZJUkVXSVJFX0hEUkxFTjsKIAogCWV0aGVyX3R5cGUgPSBFWFRSQUNUXzE2QklUUygmZnAtPmZpcmV3aXJlX3R5cGUpOwotCWlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBldGhlcl90eXBlLCBwLCBsZW5ndGgsIGNhcGxlbikgPT0gMCkgeworCXNyYy5hZGRyID0gZnAtPmZpcmV3aXJlX3Nob3N0OworCXNyYy5hZGRyX3N0cmluZyA9IGZ3YWRkcl9zdHJpbmc7CisJZHN0LmFkZHIgPSBmcC0+ZmlyZXdpcmVfZGhvc3Q7CisJZHN0LmFkZHJfc3RyaW5nID0gZndhZGRyX3N0cmluZzsKKwlpZiAoZXRoZXJ0eXBlX3ByaW50KG5kbywgZXRoZXJfdHlwZSwgcCwgbGVuZ3RoLCBjYXBsZW4sICZzcmMsICZkc3QpID09IDApIHsKIAkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KIAkJaWYgKCFuZG8tPm5kb19lZmxhZykKLQkJCWFwMTM5NF9oZHJfcHJpbnQobmRvLCAodV9jaGFyICopZnAsIGxlbmd0aCArIEZJUkVXSVJFX0hEUkxFTik7CisJCQlhcDEzOTRfaGRyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWZwLCBsZW5ndGggKyBGSVJFV0lSRV9IRFJMRU4pOwogCiAJCWlmICghbmRvLT5uZG9fc3VwcHJlc3NfZGVmYXVsdF9wcmludCkKIAkJCU5EX0RFRkFVTFRQUklOVChwLCBjYXBsZW4pOwpkaWZmIC0tZ2l0IGEvcHJpbnQtYXJjbmV0LmMgYi9wcmludC1hcmNuZXQuYwppbmRleCAwZmZiOTIyLi5hYmMxOWI4IDEwMDY0NAotLS0gYS9wcmludC1hcmNuZXQuYworKysgYi9wcmludC1hcmNuZXQuYwpAQCAtMjEsMTQgKzIxLDE1IEBACiAgKiBGcm9tOiBOZXRCU0Q6IHByaW50LWFyY25ldC5jLHYgMS4yIDIwMDAvMDQvMjQgMTM6MDI6MjggaXRvanVuIEV4cAogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEF0dGFjaGVkIFJlc291cmNlIENvbXB1dGVyIE5FVHdvcmsgKEFSQ05FVCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvcHJpbnQtYXJwLmMgYi9wcmludC1hcnAuYwppbmRleCA3NmYzOWZlLi5lZmY5N2M0IDEwMDY0NAotLS0gYS9wcmludC1hcnAuYworKysgYi9wcmludC1hcnAuYwpAQCAtMTksMjAgKzE5LDIxIEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEFkZHJlc3MgUmVzb2x1dGlvbiBQcm90b2NvbCAoQVJQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJldGhlci5oIgogI2luY2x1ZGUgImV0aGVydHlwZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfEFSUF0iOwogCkBAIC0xNzYsNyArMTc3LDE3IEBACiAjZGVmaW5lIEFUTVRTQShhcCkgKGFhcl90c2EoYXApKQogI2RlZmluZSBBVE1UUEEoYXApIChhYXJfdHBhKGFwKSkKIAotc3RhdGljIHVfY2hhciBlemVyb1s2XTsKK3N0YXRpYyBpbnQKK2lzbm9uemVybyhjb25zdCB1X2NoYXIgKmEsIHNpemVfdCBsZW4pCit7CisJd2hpbGUgKGxlbiA+IDApIHsKKwkJaWYgKCphICE9IDApCisJCQlyZXR1cm4gKDEpOworCQlhKys7CisJCWxlbi0tOworCX0KKwlyZXR1cm4gKDApOworfQogCiBzdGF0aWMgdm9pZAogYXRtYXJwX2FkZHJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCkBAIC0zNTcsNyArMzY4LDcgQEAKIAogCWNhc2UgQVJQT1BfUkVRVUVTVDoKIAkJTkRfUFJJTlQoKG5kbywgIndoby1oYXMgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgVFBBKGFwKSkpKTsKLQkJaWYgKG1lbWNtcCgoY29uc3QgY2hhciAqKWV6ZXJvLCAoY29uc3QgY2hhciAqKVRIQShhcCksIEhSRF9MRU4oYXApKSAhPSAwKQorCQlpZiAoaXNub256ZXJvKChjb25zdCB1X2NoYXIgKilUSEEoYXApLCBIUkRfTEVOKGFwKSkpCiAJCQlORF9QUklOVCgobmRvLCAiICglcykiLAogCQkJCSAgbGlua2FkZHJfc3RyaW5nKG5kbywgVEhBKGFwKSwgbGlua2FkZHIsIEhSRF9MRU4oYXApKSkpOwogCQlORF9QUklOVCgobmRvLCAiIHRlbGwgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgU1BBKGFwKSkpKTsKZGlmZiAtLWdpdCBhL3ByaW50LWFzY2lpLmMgYi9wcmludC1hc2NpaS5jCmluZGV4IDNjZWZlZjMuLjRlZjM4YTEgMTAwNjQ0Ci0tLSBhL3ByaW50LWFzY2lpLmMKKysrIGIvcHJpbnQtYXNjaWkuYwpAQCAtMzYsMTUgKzM2LDE2IEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBBU0NJSSBwYWNrZXQgZHVtcCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KICNpbmNsdWRlIDxzdGRpby5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAjZGVmaW5lIEFTQ0lJX0xJTkVMRU5HVEggMzAwCiAjZGVmaW5lIEhFWERVTVBfQllURVNfUEVSX0xJTkUgMTYKZGlmZiAtLWdpdCBhL3ByaW50LWF0YWxrLmMgYi9wcmludC1hdGFsay5jCmluZGV4IDYxNDA1NDkuLjlkN2Q2OWQgMTAwNjQ0Ci0tLSBhL3ByaW50LWF0YWxrLmMKKysrIGIvcHJpbnQtYXRhbGsuYwpAQCAtMTcsMjQgKzE3LDIzIEBACiAgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECiAgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KLSAqCi0gKiBGb3JtYXQgYW5kIHByaW50IEFwcGxlVGFsayBwYWNrZXRzLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEFwcGxlVGFsayBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV0aGVydHlwZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYXBwbGV0YWxrLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfGF0YWxrXSI7CkBAIC03OCw3ICs3NywxNCBAQAogbHRhbGtfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmgsIGNvbnN0IHVfY2hhciAqcCkKIHsKLQlyZXR1cm4gKGxsYXBfcHJpbnQobmRvLCBwLCBoLT5jYXBsZW4pKTsKKwl1X2ludCBoZHJsZW47CisKKwloZHJsZW4gPSBsbGFwX3ByaW50KG5kbywgcCwgaC0+bGVuKTsKKwlpZiAoaGRybGVuID09IDApIHsKKwkJLyogQ3V0IHNob3J0IGJ5IHRoZSBzbmFwc2hvdCBsZW5ndGguICovCisJCXJldHVybiAoaC0+Y2FwbGVuKTsKKwl9CisJcmV0dXJuIChoZHJsZW4pOwogfQogCiAvKgpAQCAtOTgsNiArMTA0LDEwIEBACiAJCU5EX1BSSU5UKChuZG8sICIgW3xsbGFwICV1XSIsIGxlbmd0aCkpOwogCQlyZXR1cm4gKGxlbmd0aCk7CiAJfQorCWlmICghTkRfVFRFU1QyKCpicCwgc2l6ZW9mKCpscCkpKSB7CisJCU5EX1BSSU5UKChuZG8sICIgW3xsbGFwXSIpKTsKKwkJcmV0dXJuICgwKTsJLyogY3V0IHNob3J0IGJ5IHRoZSBzbmFwc2hvdCBsZW5ndGggKi8KKwl9CiAJbHAgPSAoY29uc3Qgc3RydWN0IExBUCAqKWJwOwogCWJwICs9IHNpemVvZigqbHApOwogCWxlbmd0aCAtPSBzaXplb2YoKmxwKTsKQEAgLTEwOSw2ICsxMTksMTAgQEAKIAkJCU5EX1BSSU5UKChuZG8sICIgW3xzZGRwICV1XSIsIGxlbmd0aCkpOwogCQkJcmV0dXJuIChsZW5ndGgpOwogCQl9CisJCWlmICghTkRfVFRFU1QyKCpicCwgZGRwU1NpemUpKSB7CisJCQlORF9QUklOVCgobmRvLCAiIFt8c2RkcF0iKSk7CisJCQlyZXR1cm4gKDApOwkvKiBjdXQgc2hvcnQgYnkgdGhlIHNuYXBzaG90IGxlbmd0aCAqLworCQl9CiAJCXNkcCA9IChjb25zdCBzdHJ1Y3QgYXRTaG9ydEREUCAqKWJwOwogCQlORF9QUklOVCgobmRvLCAiJXMuJXMiLAogCQkgICAgYXRhZGRyX3N0cmluZyhuZG8sIDAsIGxwLT5zcmMpLCBkZHBza3Rfc3RyaW5nKG5kbywgc2RwLT5zcmNTa3QpKSk7CkBAIC0xMjUsNiArMTM5LDEwIEBACiAJCQlORF9QUklOVCgobmRvLCAiIFt8ZGRwICV1XSIsIGxlbmd0aCkpOwogCQkJcmV0dXJuIChsZW5ndGgpOwogCQl9CisJCWlmICghTkRfVFRFU1QyKCpicCwgZGRwU2l6ZSkpIHsKKwkJCU5EX1BSSU5UKChuZG8sICIgW3xkZHBdIikpOworCQkJcmV0dXJuICgwKTsJLyogY3V0IHNob3J0IGJ5IHRoZSBzbmFwc2hvdCBsZW5ndGggKi8KKwkJfQogCQlkcCA9IChjb25zdCBzdHJ1Y3QgYXRERFAgKilicDsKIAkJc25ldCA9IEVYVFJBQ1RfMTZCSVRTKCZkcC0+c3JjTmV0KTsKIAkJTkRfUFJJTlQoKG5kbywgIiVzLiVzIiwgYXRhZGRyX3N0cmluZyhuZG8sIHNuZXQsIGRwLT5zcmNOb2RlKSwKQEAgLTE3MSw2ICsxODksMTAgQEAKIAkJTkRfUFJJTlQoKG5kbywgIiBbfGRkcCAldV0iLCBsZW5ndGgpKTsKIAkJcmV0dXJuOwogCX0KKwlpZiAoIU5EX1RURVNUMigqYnAsIGRkcFNpemUpKSB7CisJCU5EX1BSSU5UKChuZG8sICIgW3xkZHBdIikpOworCQlyZXR1cm47CisJfQogCWRwID0gKGNvbnN0IHN0cnVjdCBhdEREUCAqKWJwOwogCXNuZXQgPSBFWFRSQUNUXzE2QklUUygmZHAtPnNyY05ldCk7CiAJTkRfUFJJTlQoKG5kbywgIiVzLiVzIiwgYXRhZGRyX3N0cmluZyhuZG8sIHNuZXQsIGRwLT5zcmNOb2RlKSwKQEAgLTE5NCw2ICsyMTYsMTUgQEAKIAogCU5EX1BSSU5UKChuZG8sICJhYXJwICIpKTsKIAlhcCA9IChjb25zdCBzdHJ1Y3QgYWFycCAqKWJwOworCWlmICghTkRfVFRFU1QoKmFwKSkgeworCQkvKiBKdXN0IGJhaWwgaWYgd2UgZG9uJ3QgaGF2ZSB0aGUgd2hvbGUgY2h1bmsuICovCisJCU5EX1BSSU5UKChuZG8sICIgW3xhYXJwXSIpKTsKKwkJcmV0dXJuOworCX0KKwlpZiAobGVuZ3RoIDwgc2l6ZW9mKCphcCkpIHsKKwkJTkRfUFJJTlQoKG5kbywgIiBbfGFhcnAgJXVdIiwgbGVuZ3RoKSk7CisJCXJldHVybjsKKwl9CiAJaWYgKEVYVFJBQ1RfMTZCSVRTKCZhcC0+aHR5cGUpID09IDEgJiYKIAkgICAgRVhUUkFDVF8xNkJJVFMoJmFwLT5wdHlwZSkgPT0gRVRIRVJUWVBFX0FUQUxLICYmCiAJICAgIGFwLT5oYWxlbiA9PSA2ICYmIGFwLT5wYWxlbiA9PSA0ICkKQEAgLTM4MCw3ICs0MTEsNyBAQAogICAgICAgICAgIHJlZ2lzdGVyIHVfY2hhciBzbm9kZSwgcmVnaXN0ZXIgdV9jaGFyIHNrdCkKIHsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgYXROQlB0dXBsZSAqdHAgPQotCQkoY29uc3Qgc3RydWN0IGF0TkJQdHVwbGUgKikoKHVfY2hhciAqKW5wICsgbmJwSGVhZGVyU2l6ZSk7CisJCShjb25zdCBzdHJ1Y3QgYXROQlB0dXBsZSAqKSgoY29uc3QgdV9jaGFyICopbnAgKyBuYnBIZWFkZXJTaXplKTsKIAlpbnQgaTsKIAljb25zdCB1X2NoYXIgKmVwOwogCkBAIC01NjcsOCArNTk4LDExIEBACiAJCQkgICAgIHRwLT5ueHQ7IHRwID0gdHAtPm54dCkKIAkJCQk7CiAJCQl0cC0+YWRkciA9IGkyOwotCQkJdHAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJCQl0cC0+bnh0ID0gbmV3aG5hbWVtZW0obmRvKTsKIAkJCXRwLT5uYW1lID0gc3RyZHVwKG5hbWJ1Zik7CisJCQlpZiAodHAtPm5hbWUgPT0gTlVMTCkKKwkJCQkoKm5kby0+bmRvX2Vycm9yKShuZG8sCisJCQkJCQkgICJhdGFkZHJfc3RyaW5nOiBzdHJkdXAobmFtYnVmKSIpOwogCQl9CiAJCWZjbG9zZShmcCk7CiAJfQpAQCAtNTgyLDIwICs2MTYsMjUgQEAKIAlmb3IgKHRwMiA9ICZobmFtZXRhYmxlW2kgJiAoSEFTSE5BTUVTSVpFLTEpXTsgdHAyLT5ueHQ7IHRwMiA9IHRwMi0+bnh0KQogCQlpZiAodHAyLT5hZGRyID09IGkpIHsKIAkJCXRwLT5hZGRyID0gKGF0bmV0IDw8IDgpIHwgYXRob3N0OwotCQkJdHAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJCQl0cC0+bnh0ID0gbmV3aG5hbWVtZW0obmRvKTsKIAkJCSh2b2lkKXNucHJpbnRmKG5hbWJ1Ziwgc2l6ZW9mKG5hbWJ1ZiksICIlcy4lZCIsCiAJCQkgICAgdHAyLT5uYW1lLCBhdGhvc3QpOwogCQkJdHAtPm5hbWUgPSBzdHJkdXAobmFtYnVmKTsKKwkJCWlmICh0cC0+bmFtZSA9PSBOVUxMKQorCQkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywKKwkJCQkJCSAgImF0YWRkcl9zdHJpbmc6IHN0cmR1cChuYW1idWYpIik7CiAJCQlyZXR1cm4gKHRwLT5uYW1lKTsKIAkJfQogCiAJdHAtPmFkZHIgPSAoYXRuZXQgPDwgOCkgfCBhdGhvc3Q7Ci0JdHAtPm54dCA9IG5ld2huYW1lbWVtKCk7CisJdHAtPm54dCA9IG5ld2huYW1lbWVtKG5kbyk7CiAJaWYgKGF0aG9zdCAhPSAyNTUpCiAJCSh2b2lkKXNucHJpbnRmKG5hbWJ1Ziwgc2l6ZW9mKG5hbWJ1ZiksICIlZC4lZCIsIGF0bmV0LCBhdGhvc3QpOwogCWVsc2UKIAkJKHZvaWQpc25wcmludGYobmFtYnVmLCBzaXplb2YobmFtYnVmKSwgIiVkIiwgYXRuZXQpOwogCXRwLT5uYW1lID0gc3RyZHVwKG5hbWJ1Zik7CisJaWYgKHRwLT5uYW1lID09IE5VTEwpCisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImF0YWRkcl9zdHJpbmc6IHN0cmR1cChuYW1idWYpIik7CiAKIAlyZXR1cm4gKHRwLT5uYW1lKTsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LWF0bS5jIGIvcHJpbnQtYXRtLmMKaW5kZXggOGZhZjcxNS4uNTk2ZTQwNiAxMDA2NDQKLS0tIGEvcHJpbnQtYXRtLmMKKysrIGIvcHJpbnQtYXRtLmMKQEAgLTE5LDIwICsxOSwxMTAgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQXN5bmNocm9ub3VzIFRyYW5zZmVyIE1vZGUgKEFUTSkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJhdG0uaCIKLSNpbmNsdWRlICJhdG11bmkzMS5oIgogI2luY2x1ZGUgImxsYy5oIgogCisvKiBzdGFydCBvZiB0aGUgb3JpZ2luYWwgYXRtdW5pMzEuaCAqLworCisvKgorICogQ29weXJpZ2h0IChjKSAxOTk3IFllbiBZZW4gTGltIGFuZCBOb3J0aCBEYWtvdGEgU3RhdGUgVW5pdmVyc2l0eQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIEFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZyBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZQorICogICAgbXVzdCBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogICAgICBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IFllbiBZZW4gTGltIGFuZAorICAgICAgICBOb3J0aCBEYWtvdGEgU3RhdGUgVW5pdmVyc2l0eQorICogNC4gVGhlIG5hbWUgb2YgdGhlIGF1dGhvciBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzCisgKiAgICBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBBVVRIT1IgYGBBUyBJUycnIEFORCBBTlkgRVhQUkVTUyBPUgorICogSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQVVUSE9SIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwKKyAqIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SCisgKiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikKKyAqIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwKKyAqIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBCYXNlZCBvbiBVTkkzLjEgc3RhbmRhcmQgYnkgQVRNIEZvcnVtICovCisKKy8qIEFUTSB0cmFmZmljIHR5cGVzIGJhc2VkIG9uIFZQST0wIGFuZCAodGhlIGZvbGxvd2luZyBWQ0kgKi8KKyNkZWZpbmUgVkNJX1BQQwkJCTB4MDUJLyogUG9pbnQtdG8tcG9pbnQgc2lnbmFsIG1zZyAqLworI2RlZmluZSBWQ0lfQkNDCQkJMHgwMgkvKiBCcm9hZGNhc3Qgc2lnbmFsIG1zZyAqLworI2RlZmluZSBWQ0lfT0FNRjRTQwkJMHgwMwkvKiBTZWdtZW50IE9BTSBGNCBmbG93IGNlbGwgKi8KKyNkZWZpbmUgVkNJX09BTUY0RUMJCTB4MDQJLyogRW5kLXRvLWVuZCBPQU0gRjQgZmxvdyBjZWxsICovCisjZGVmaW5lIFZDSV9NRVRBQwkJMHgwMQkvKiBNZXRhIHNpZ25hbCBtc2cgKi8KKyNkZWZpbmUgVkNJX0lMTUlDCQkweDEwCS8qIElMTUkgbXNnICovCisKKy8qIFEuMjkzMSBzaWduYWxsaW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIENBTExfUFJPQ0VFRAkJMHgwMgkvKiBjYWxsIHByb2NlZWRpbmcgKi8KKyNkZWZpbmUgQ09OTkVDVAkJCTB4MDcJLyogY29ubmVjdCAqLworI2RlZmluZSBDT05ORUNUX0FDSwkJMHgwZgkvKiBjb25uZWN0X2FjayAqLworI2RlZmluZSBTRVRVUAkJCTB4MDUJLyogc2V0dXAgKi8KKyNkZWZpbmUgUkVMRUFTRQkJCTB4NGQJLyogcmVsZWFzZSAqLworI2RlZmluZSBSRUxFQVNFX0RPTkUJCTB4NWEJLyogcmVsZWFzZV9kb25lICovCisjZGVmaW5lIFJFU1RBUlQJCQkweDQ2CS8qIHJlc3RhcnQgKi8KKyNkZWZpbmUgUkVTVEFSVF9BQ0sJCTB4NGUJLyogcmVzdGFydCBhY2sgKi8KKyNkZWZpbmUgU1RBVFVTCQkJMHg3ZAkvKiBzdGF0dXMgKi8KKyNkZWZpbmUgU1RBVFVTX0VOUQkJMHg3NQkvKiBzdGF0dXMgYWNrICovCisjZGVmaW5lIEFERF9QQVJUWQkJMHg4MAkvKiBhZGQgcGFydHkgKi8KKyNkZWZpbmUgQUREX1BBUlRZX0FDSwkJMHg4MQkvKiBhZGQgcGFydHkgYWNrICovCisjZGVmaW5lIEFERF9QQVJUWV9SRUoJCTB4ODIJLyogYWRkIHBhcnR5IHJlaiAqLworI2RlZmluZSBEUk9QX1BBUlRZCQkweDgzCS8qIGRyb3AgcGFydHkgKi8KKyNkZWZpbmUgRFJPUF9QQVJUWV9BQ0sJCTB4ODQJLyogZHJvcCBwYXJ0eSBhY2sgKi8KKworLyogSW5mb3JtYXRpb24gRWxlbWVudCBQYXJhbWV0ZXJzIGluIHRoZSBzaWduYWxsaW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIENBVVNFCQkJMHgwOAkvKiBjYXVzZSAqLworI2RlZmluZSBFTkRQVF9SRUYJCTB4NTQJLyogZW5kcG9pbnQgcmVmZXJlbmNlICovCisjZGVmaW5lIEFBTF9QQVJBCQkweDU4CS8qIEFUTSBhZGFwdGF0aW9uIGxheWVyIHBhcmFtZXRlcnMgKi8KKyNkZWZpbmUgVFJBRkZfREVTQ1JJUAkJMHg1OQkvKiBhdG0gdHJhZmZpYyBkZXNjcmlwdG9ycyAqLworI2RlZmluZSBDT05ORUNUX0lECQkweDVhCS8qIGNvbm5lY3Rpb24gaWRlbnRpZmllciAqLworI2RlZmluZSBRT1NfUEFSQQkJMHg1YwkvKiBxdWFsaXR5IG9mIHNlcnZpY2UgcGFyYW1ldGVycyAqLworI2RlZmluZSBCX0hJR0hFUgkJMHg1ZAkvKiBicm9hZGJhbmQgaGlnaGVyIGxheWVyIGluZm9ybWF0aW9uICovCisjZGVmaW5lIEJfQkVBUkVSCQkweDVlCS8qIGJyb2FkYmFuZCBiZWFyZXIgY2FwYWJpbGl0eSAqLworI2RlZmluZSBCX0xPV0VSCQkJMHg1ZgkvKiBicm9hZGJhbmQgbG93ZXIgaW5mb3JtYXRpb24gKi8KKyNkZWZpbmUgQ0FMTElOR19QQVJUWQkJMHg2YwkvKiBjYWxsaW5nIHBhcnR5IG51bWJlciAqLworI2RlZmluZSBDQUxMRURfUEFSVFkJCTB4NzAJLyogY2FsbGVkIHBhcnR5IG5tYmVyICovCisKKyNkZWZpbmUgUTI5MzEJCQkweDA5CisKKy8qIFEuMjkzMSBzaWduYWxsaW5nIGdlbmVyYWwgbWVzc2FnZXMgZm9ybWF0ICovCisjZGVmaW5lIFBST1RPX1BPUyAgICAgICAwCS8qIG9mZnNldCBvZiBwcm90b2NvbCBkaXNjcmltaW5hdG9yICovCisjZGVmaW5lIENBTExfUkVGX1BPUyAgICAyCS8qIG9mZnNldCBvZiBjYWxsIHJlZmVyZW5jZSB2YWx1ZSAqLworI2RlZmluZSBNU0dfVFlQRV9QT1MgICAgNQkvKiBvZmZzZXQgb2YgbWVzc2FnZSB0eXBlICovCisjZGVmaW5lIE1TR19MRU5fUE9TICAgICA3CS8qIG9mZnNldCBvZiBtZXNhZ2UgbGVuZ3RoICovCisjZGVmaW5lIElFX0JFR0lOX1BPUyAgICA5CS8qIG9mZnNldCBvZiBmaXJzdCBpbmZvcm1hdGlvbiBlbGVtZW50ICovCisKKy8qIGZvcm1hdCBvZiBzaWduYWxsaW5nIG1lc3NhZ2VzICovCisjZGVmaW5lIFRZUEVfUE9TCTAKKyNkZWZpbmUgTEVOX1BPUwkJMgorI2RlZmluZSBGSUVMRF9CRUdJTl9QT1MgNAorCisvKiBlbmQgb2YgdGhlIG9yaWdpbmFsIGF0bXVuaTMxLmggKi8KKwogc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIlt8YXRtXSI7CiAKICNkZWZpbmUgT0FNX0NSQzEwX01BU0sgMHgzZmYKQEAgLTEyNiwyMiArMjE2LDIwIEBACiAvKgogICogUHJpbnQgYW4gUkZDIDE0ODMgTExDLWVuY2Fwc3VsYXRlZCBBVE0gZnJhbWUuCiAgKi8KLXN0YXRpYyB2b2lkCitzdGF0aWMgdV9pbnQKIGF0bV9sbGNfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcCwgaW50IGxlbmd0aCwgaW50IGNhcGxlbikKIHsKLQl1X3Nob3J0IGV4dHJhY3RlZF9ldGhlcnR5cGU7CisJaW50IGxsY19oZHJsZW47CiAKLQlpZiAoIWxsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuLCBOVUxMLCBOVUxMLAotCSAgICAmZXh0cmFjdGVkX2V0aGVydHlwZSkpIHsKLQkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KLQkJaWYgKGV4dHJhY3RlZF9ldGhlcnR5cGUpIHsKLQkJCU5EX1BSSU5UKChuZG8sICIoTExDICVzKSAiLAotCQlldGhlcnByb3RvX3N0cmluZyhodG9ucyhleHRyYWN0ZWRfZXRoZXJ0eXBlKSkpKTsKLQkJfQorCWxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgTlVMTCwgTlVMTCk7CisJaWYgKGxsY19oZHJsZW4gPCAwKSB7CisJCS8qIHBhY2tldCBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KIAkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCWxsY19oZHJsZW4gPSAtbGxjX2hkcmxlbjsKIAl9CisJcmV0dXJuIChsbGNfaGRybGVuKTsKIH0KIAogLyoKQEAgLTIyOSw3ICszMTcsNyBAQAogCQljYXBsZW4gLT0gMjA7CiAJCWhkcmxlbiArPSAyMDsKIAl9Ci0JYXRtX2xsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuKTsKKwloZHJsZW4gKz0gYXRtX2xsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuKTsKIAlyZXR1cm4gKGhkcmxlbik7CiB9CiAKQEAgLTI1NywyNCArMzQ1LDE4IEBACiAKIHN0YXRpYyB2b2lkCiBzaWdfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgY29uc3QgdV9jaGFyICpwLCBpbnQgY2FwbGVuKQorICAgICAgICAgIGNvbnN0IHVfY2hhciAqcCkKIHsKIAl1aW50MzJfdCBjYWxsX3JlZjsKIAotCWlmIChjYXBsZW4gPCBQUk9UT19QT1MpIHsKLQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwotCQlyZXR1cm47Ci0JfQorCU5EX1RDSEVDSyhwW1BST1RPX1BPU10pOwogCWlmIChwW1BST1RPX1BPU10gPT0gUTI5MzEpIHsKIAkJLyoKIAkJICogcHJvdG9jb2w6US4yOTMxIGZvciBVc2VyIHRvIE5ldHdvcmsgSW50ZXJmYWNlCiAJCSAqIChVTkkgMy4xKSBzaWduYWxsaW5nCiAJCSAqLwogCQlORF9QUklOVCgobmRvLCAiUS4yOTMxIikpOwotCQlpZiAoY2FwbGVuIDwgTVNHX1RZUEVfUE9TKSB7Ci0JCQlORF9QUklOVCgobmRvLCAiICVzIiwgdHN0cikpOwotCQkJcmV0dXJuOwotCQl9CisJCU5EX1RDSEVDSyhwW01TR19UWVBFX1BPU10pOwogCQlORF9QUklOVCgobmRvLCAiOiVzICIsCiAJCSAgICB0b2syc3RyKG1zZ3R5cGUyc3RyLCAibXNndHlwZSMlZCIsIHBbTVNHX1RZUEVfUE9TXSkpKTsKIApAQCAtMjkwLDYgKzM3MiwxMCBAQAogCQkvKiBTQ0NPUCB3aXRoIHNvbWUgdW5rbm93biBwcm90b2NvbCBhdG9wIGl0ICovCiAJCU5EX1BSSU5UKChuZG8sICJTU0NPUCwgcHJvdG8gJWQgIiwgcFtQUk9UT19QT1NdKSk7CiAJfQorCXJldHVybjsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiAlcyIsIHRzdHIpKTsKIH0KIAogLyoKQEAgLTMwNyw3ICszOTMsNyBAQAogCQlzd2l0Y2ggKHZjaSkgewogCiAJCWNhc2UgVkNJX1BQQzoKLQkJCXNpZ19wcmludChuZG8sIHAsIGNhcGxlbik7CisJCQlzaWdfcHJpbnQobmRvLCBwKTsKIAkJCXJldHVybjsKIAogCQljYXNlIFZDSV9CQ0M6CkBAIC0zNjAsNyArNDQ2LDcgQEAKICAgICB1aW50OF90IHVudXNlZFsyOF07CiB9OwogCi1pbnQKK3ZvaWQKIG9hbV9wcmludCAobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBoZWMpCiB7CkBAIC0zNzQsNiArNDYwLDcgQEAKICAgICB9IG9hbV9wdHI7CiAKIAorICAgIE5EX1RDSEVDSygqKHArQVRNX0hEUl9MRU5fTk9IRUMraGVjKSk7CiAgICAgY2VsbF9oZWFkZXIgPSBFWFRSQUNUXzMyQklUUyhwK2hlYyk7CiAgICAgY2VsbF90eXBlID0gKCgqKHArQVRNX0hEUl9MRU5fTk9IRUMraGVjKSk+PjQpICYgMHgwZjsKICAgICBmdW5jX3R5cGUgPSAoKihwK0FUTV9IRFJfTEVOX05PSEVDK2hlYykpICYgMHgwZjsKQEAgLTM5MCw3ICs0NzcsNyBAQAogICAgICAgICAgICBjbHAsIGxlbmd0aCkpOwogCiAgICAgaWYgKCFuZG8tPm5kb192ZmxhZykgewotICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIE5EX1BSSU5UKChuZG8sICJcblx0Y2VsbC10eXBlICVzICgldSkiLApAQCAtNDA5LDYgKzQ5Niw3IEBACiAgICAgc3dpdGNoIChjZWxsX3R5cGUgPDwgNCB8IGZ1bmNfdHlwZSkgewogICAgIGNhc2UgKE9BTV9DRUxMVFlQRV9GTSA8PCA0IHwgT0FNX0ZNX0ZVTkNUWVBFX0xPT1BCQUNLKToKICAgICAgICAgb2FtX3B0ci5vYW1fZm1fbG9vcGJhY2sgPSAoY29uc3Qgc3RydWN0IG9hbV9mbV9sb29wYmFja190ICopKHAgKyBPQU1fQ0VMTFRZUEVfRlVOQ1RZUEVfTEVOKTsKKyAgICAgICAgTkRfVENIRUNLKCpvYW1fcHRyLm9hbV9mbV9sb29wYmFjayk7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0TG9vcGJhY2stSW5kaWNhdG9yICVzLCBDb3JyZWxhdGlvbi1UYWcgMHglMDh4IiwKICAgICAgICAgICAgICAgIHRvazJzdHIob2FtX2ZtX2xvb3BiYWNrX2luZGljYXRvcl92YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIiwKQEAgLTQzMSw2ICs1MTksNyBAQAogICAgIGNhc2UgKE9BTV9DRUxMVFlQRV9GTSA8PCA0IHwgT0FNX0ZNX0ZVTkNUWVBFX0FJUyk6CiAgICAgY2FzZSAoT0FNX0NFTExUWVBFX0ZNIDw8IDQgfCBPQU1fRk1fRlVOQ1RZUEVfUkRJKToKICAgICAgICAgb2FtX3B0ci5vYW1fZm1fYWlzX3JkaSA9IChjb25zdCBzdHJ1Y3Qgb2FtX2ZtX2Fpc19yZGlfdCAqKShwICsgT0FNX0NFTExUWVBFX0ZVTkNUWVBFX0xFTik7CisgICAgICAgIE5EX1RDSEVDSygqb2FtX3B0ci5vYW1fZm1fYWlzX3JkaSk7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0RmFpbHVyZS10eXBlIDB4JTAyeCIsIG9hbV9wdHIub2FtX2ZtX2Fpc19yZGktPmZhaWx1cmVfdHlwZSkpOwogICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdExvY2F0aW9uLUlEICIpKTsKICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBzaXplb2Yob2FtX3B0ci5vYW1fZm1fYWlzX3JkaS0+ZmFpbHVyZV9sb2NhdGlvbik7IGlkeCsrKSB7CkBAIC00NDksNiArNTM4LDcgQEAKICAgICB9CiAKICAgICAvKiBjcmMxMCBjaGVja3N1bSB2ZXJpZmljYXRpb24gKi8KKyAgICBORF9UQ0hFQ0syKCoocCArIE9BTV9DRUxMVFlQRV9GVU5DVFlQRV9MRU4gKyBPQU1fRlVOQ1RJT05fU1BFQ0lGSUNfTEVOKSwgMik7CiAgICAgY2tzdW0gPSBFWFRSQUNUXzE2QklUUyhwICsgT0FNX0NFTExUWVBFX0ZVTkNUWVBFX0xFTiArIE9BTV9GVU5DVElPTl9TUEVDSUZJQ19MRU4pCiAgICAgICAgICYgT0FNX0NSQzEwX01BU0s7CiAgICAgY2tzdW1fc2hvdWxkYmUgPSB2ZXJpZnlfY3JjMTBfY2tzdW0oMCwgcCwgT0FNX1BBWUxPQURfTEVOKTsKQEAgLTQ1Nyw1ICs1NDcsOSBAQAogICAgICAgICAgICBja3N1bSwKICAgICAgICAgICAgY2tzdW1fc2hvdWxkYmUgPT0gMCA/ICIiIDogImluIikpOwogCi0gICAgcmV0dXJuIDE7CisgICAgcmV0dXJuOworCit0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiW3xvYW1dIikpOworICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LWJhYmVsLmMgYi9wcmludC1iYWJlbC5jCmluZGV4IDc1Y2IzMmMuLmY4NzQxZDcgMTAwNjQ0Ci0tLSBhL3ByaW50LWJhYmVsLmMKKysrIGIvcHJpbnQtYmFiZWwuYwpAQCAtMjYsMTcgKzI2LDE4IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCYWJlbCBSb3V0aW5nIFByb3RvY29sIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCkBAIC01Myw3ICs1NCw3IEBACiAgICAgTkRfVENIRUNLMigqY3AsIDQpOwogCiAgICAgaWYoY3BbMF0gIT0gNDIpIHsKLSAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBtYWxmb3JtZWQgaGVhZGVyIikpOworICAgICAgICBORF9QUklOVCgobmRvLCAiIGludmFsaWQgaGVhZGVyIikpOwogICAgICAgICByZXR1cm47CiAgICAgfSBlbHNlIHsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlZCIsIGNwWzFdKSk7CkBAIC04OSw2ICs5MCw5IEBACiAjZGVmaW5lIE1FU1NBR0VfTUhfUkVRVUVTVCAxMAogI2RlZmluZSBNRVNTQUdFX1RTUEMgMTEKICNkZWZpbmUgTUVTU0FHRV9ITUFDIDEyCisjZGVmaW5lIE1FU1NBR0VfVVBEQVRFX1NSQ19TUEVDSUZJQyAxMworI2RlZmluZSBNRVNTQUdFX1JFUVVFU1RfU1JDX1NQRUNJRklDIDE0CisjZGVmaW5lIE1FU1NBR0VfTUhfUkVRVUVTVF9TUkNfU1BFQ0lGSUMgMTUKIAogLyogc3ViLVRMVnMgKi8KICNkZWZpbmUgTUVTU0FHRV9TVUJfUEFEMSAwCkBAIC0xMjMsMTEgKzEyNyw3IEBACiAgICAgaWYocGxlbiA+PSA5NiAmJiBtZW1jbXAocHJlZml4LCB2NHByZWZpeCwgMTIpID09IDApCiAgICAgICAgIHNucHJpbnRmKGJ1ZiwgNTAsICIlcy8ldSIsIGlwYWRkcl9zdHJpbmcobmRvLCBwcmVmaXggKyAxMiksIHBsZW4gLSA5Nik7CiAgICAgZWxzZQotI2lmZGVmIElORVQ2CiAgICAgICAgIHNucHJpbnRmKGJ1ZiwgNTAsICIlcy8ldSIsIGlwNmFkZHJfc3RyaW5nKG5kbywgcHJlZml4KSwgcGxlbik7Ci0jZWxzZQotICAgICAgICBzbnByaW50ZihidWYsIDUwLCAiSVB2NiBhZGRyZXNzZXMgbm90IHN1cHBvcnRlZCIpOwotI2VuZGlmCiAgICAgYnVmWzQ5XSA9ICdcMCc7CiAgICAgcmV0dXJuIGJ1ZjsKIH0KQEAgLTEzOCwxMSArMTM4LDcgQEAKICAgICBpZihtZW1jbXAocHJlZml4LCB2NHByZWZpeCwgMTIpID09IDApCiAgICAgICAgIHJldHVybiBpcGFkZHJfc3RyaW5nKG5kbywgcHJlZml4ICsgMTIpOwogICAgIGVsc2UKLSNpZmRlZiBJTkVUNgogICAgICAgICByZXR1cm4gaXA2YWRkcl9zdHJpbmcobmRvLCBwcmVmaXgpOwotI2Vsc2UKLSAgICAgICAgcmV0dXJuICJJUHY2IGFkZHJlc3NlcyBub3Qgc3VwcG9ydGVkIjsKLSNlbmRpZgogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqCkBAIC0yODQsMTAgKzI4MCwxMCBAQAogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KICAgICAgICAgaWYoY3AgPT0gZXApCi0gICAgICAgICAgICBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CiAgICAgICAgIHN1YmxlbiA9ICpjcCsrOwogICAgICAgICBpZihjcCArIHN1YmxlbiA+IGVwKQotICAgICAgICAgICAgZ290byBjb3JydXB0OworICAgICAgICAgICAgZ290byBpbnZhbGlkOwogCiAgICAgICAgIHN3aXRjaChzdWJ0eXBlKSB7CiAgICAgICAgIGNhc2UgTUVTU0FHRV9TVUJfUEFETjoKQEAgLTMwNSwxOSArMzAxLDIwIEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzJXMiLCBzZXAsIHRvazJzdHIoZGl2ZXJzaXR5X3N0ciwgIiV1IiwgKmNwKyspKSk7CiAgICAgICAgICAgICAgICAgc2VwID0gIi0iOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgaWYodGx2X3R5cGUgIT0gTUVTU0FHRV9VUERBVEUpCisgICAgICAgICAgICBpZih0bHZfdHlwZSAhPSBNRVNTQUdFX1VQREFURSAmJgorICAgICAgICAgICAgICAgdGx2X3R5cGUgIT0gTUVTU0FHRV9VUERBVEVfU1JDX1NQRUNJRklDKQogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKGJvZ3VzKSIpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIE1FU1NBR0VfU1VCX1RJTUVTVEFNUDoKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgc3ViLXRpbWVzdGFtcCIpKTsKICAgICAgICAgICAgIGlmKHRsdl90eXBlID09IE1FU1NBR0VfSEVMTE8pIHsKICAgICAgICAgICAgICAgICBpZihzdWJsZW4gPCA0KQotICAgICAgICAgICAgICAgICAgICBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICB0MSA9IEVYVFJBQ1RfMzJCSVRTKGNwKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgZm9ybWF0X3RpbWVzdGFtcCh0MSkpKTsKICAgICAgICAgICAgIH0gZWxzZSBpZih0bHZfdHlwZSA9PSBNRVNTQUdFX0lIVSkgewogICAgICAgICAgICAgICAgIGlmKHN1YmxlbiA8IDgpCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gY29ycnVwdDsKKyAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIHQxID0gRVhUUkFDVF8zMkJJVFMoY3ApOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBmb3JtYXRfdGltZXN0YW1wKHQxKSkpOwogICAgICAgICAgICAgICAgIHQyID0gRVhUUkFDVF8zMkJJVFMoY3AgKyA0KTsKQEAgLTMzMywxMiArMzMwLDEyIEBACiAgICAgfSAvKiB3aGlsZSAqLwogICAgIHJldHVybjsKIAotIGNvcnJ1cHQ6Ci0gICAgTkRfUFJJTlQoKG5kbywgIiAoY29ycnVwdCkiKSk7CisgaW52YWxpZDoKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiB9CiAKICNkZWZpbmUgSUNIRUNLKGksIGwpIFwKLQlpZiAoKGkpICsgKGwpID4gYm9keWxlbiB8fCAoaSkgKyAobCkgPiBsZW5ndGgpIGdvdG8gY29ycnVwdDsKKwlpZiAoKGkpICsgKGwpID4gYm9keWxlbiB8fCAoaSkgKyAobCkgPiBsZW5ndGgpIGdvdG8gaW52YWxpZDsKIAogc3RhdGljIHZvaWQKIGJhYmVsX3ByaW50X3YyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLApAQCAtMzUyLDcgKzM0OSw3IEBACiAKICAgICBORF9UQ0hFQ0syKCpjcCwgNCk7CiAgICAgaWYgKGxlbmd0aCA8IDQpCi0gICAgICAgIGdvdG8gY29ycnVwdDsKKyAgICAgICAgZ290byBpbnZhbGlkOwogICAgIGJvZHlsZW4gPSBFWFRSQUNUXzE2QklUUyhjcCArIDIpOwogICAgIE5EX1BSSU5UKChuZG8sICIgKCV1KSIsIGJvZHlsZW4pKTsKIApAQCAtMzkzLDcgKzM5MCw3IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBhY2stcmVxIikpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRBY2tub3dsZWRnbWVudCBSZXF1ZXN0ICIpKTsKLSAgICAgICAgICAgICAgICBpZihsZW4gPCA2KSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgNikgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIG5vbmNlID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDQpOwogICAgICAgICAgICAgICAgIGludGVydmFsID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDYpOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlMDR4ICVzIiwgbm9uY2UsIGZvcm1hdF9pbnRlcnZhbChpbnRlcnZhbCkpKTsKQEAgLTQwNyw3ICs0MDQsNyBAQAogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgYWNrIikpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRBY2tub3dsZWRnbWVudCAiKSk7Ci0gICAgICAgICAgICAgICAgaWYobGVuIDwgMikgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDIpIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBub25jZSA9IEVYVFJBQ1RfMTZCSVRTKG1lc3NhZ2UgKyAyKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTA0eCIsIG5vbmNlKSk7CiAgICAgICAgICAgICB9CkBAIC00MjAsNyArNDE3LDcgQEAKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGhlbGxvIikpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRIZWxsbyAiKSk7Ci0gICAgICAgICAgICAgICAgaWYobGVuIDwgNikgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDYpIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBzZXFubyA9IEVYVFJBQ1RfMTZCSVRTKG1lc3NhZ2UgKyA0KTsKICAgICAgICAgICAgICAgICBpbnRlcnZhbCA9IEVYVFJBQ1RfMTZCSVRTKG1lc3NhZ2UgKyA2KTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAic2Vxbm8gJXUgaW50ZXJ2YWwgJXMiLCBzZXFubywgZm9ybWF0X2ludGVydmFsKGludGVydmFsKSkpOwpAQCAtNDM5LDcgKzQzNiw3IEBACiAgICAgICAgICAgICAgICAgdV9jaGFyIGFkZHJlc3NbMTZdOwogICAgICAgICAgICAgICAgIGludCByYzsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdElIVSAiKSk7Ci0gICAgICAgICAgICAgICAgaWYobGVuIDwgNikgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDYpIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICB0eGNvc3QgPSBFWFRSQUNUXzE2QklUUyhtZXNzYWdlICsgNCk7CiAgICAgICAgICAgICAgICAgaW50ZXJ2YWwgPSBFWFRSQUNUXzE2QklUUyhtZXNzYWdlICsgNik7CiAgICAgICAgICAgICAgICAgcmMgPSBuZXR3b3JrX2FkZHJlc3MobWVzc2FnZVsyXSwgbWVzc2FnZSArIDgsIGxlbiAtIDYsIGFkZHJlc3MpOwpAQCAtNDU5LDcgKzQ1Niw3IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiByb3V0ZXItaWQiKSk7CiAgICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFJvdXRlciBJZCIpKTsKLSAgICAgICAgICAgICAgICBpZihsZW4gPCAxMCkgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDEwKSBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGZvcm1hdF9pZChtZXNzYWdlICsgNCkpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQpAQCAtNDcyLDkgKzQ2OSw5IEBACiAgICAgICAgICAgICAgICAgaW50IHJjOwogICAgICAgICAgICAgICAgIHVfY2hhciBuaFsxNl07CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHROZXh0IEhvcCIpKTsKLSAgICAgICAgICAgICAgICBpZihsZW4gPCAyKSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgMikgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIHJjID0gbmV0d29ya19hZGRyZXNzKG1lc3NhZ2VbMl0sIG1lc3NhZ2UgKyA0LCBsZW4gLSAyLCBuaCk7Ci0gICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGZvcm1hdF9hZGRyZXNzKG5kbywgbmgpKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KQEAgLTQ5NiwxMyArNDkzLDEzIEBACiAgICAgICAgICAgICAgICAgaW50IHJjOwogICAgICAgICAgICAgICAgIHVfY2hhciBwcmVmaXhbMTZdOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0VXBkYXRlIikpOwotICAgICAgICAgICAgICAgIGlmKGxlbiA8IDEwKSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgMTApIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBwbGVuID0gbWVzc2FnZVs0XSArIChtZXNzYWdlWzJdID09IDEgPyA5NiA6IDApOwogICAgICAgICAgICAgICAgIHJjID0gbmV0d29ya19wcmVmaXgobWVzc2FnZVsyXSwgbWVzc2FnZVs0XSwgbWVzc2FnZVs1XSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKyAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VbMl0gPT0gMSA/IHY0X3ByZWZpeCA6IHY2X3ByZWZpeCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIDEwLCBwcmVmaXgpOwotICAgICAgICAgICAgICAgIGlmKHJjIDwgMCkgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKHJjIDwgMCkgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIGludGVydmFsID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDYpOwogICAgICAgICAgICAgICAgIHNlcW5vID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDgpOwogICAgICAgICAgICAgICAgIG1ldHJpYyA9IEVYVFJBQ1RfMTZCSVRTKG1lc3NhZ2UgKyAxMCk7CkBAIC01MzIsMTEgKzUyOSwxMSBAQAogICAgICAgICAgICAgICAgIGludCByYzsKICAgICAgICAgICAgICAgICB1X2NoYXIgcHJlZml4WzE2XSwgcGxlbjsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFJlcXVlc3QgIikpOwotICAgICAgICAgICAgICAgIGlmKGxlbiA8IDIpIGdvdG8gY29ycnVwdDsKKyAgICAgICAgICAgICAgICBpZihsZW4gPCAyKSBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgcGxlbiA9IG1lc3NhZ2VbM10gKyAobWVzc2FnZVsyXSA9PSAxID8gOTYgOiAwKTsKICAgICAgICAgICAgICAgICByYyA9IG5ldHdvcmtfcHJlZml4KG1lc3NhZ2VbMl0sIG1lc3NhZ2VbM10sIDAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICsgNCwgTlVMTCwgbGVuIC0gMiwgcHJlZml4KTsKLSAgICAgICAgICAgICAgICBpZihyYyA8IDApIGdvdG8gY29ycnVwdDsKKyAgICAgICAgICAgICAgICBpZihyYyA8IDApIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiZm9yICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgbWVzc2FnZVsyXSA9PSAwID8gImFueSIgOiBmb3JtYXRfcHJlZml4KG5kbywgcHJlZml4LCBwbGVuKSkpOwogICAgICAgICAgICAgfQpAQCAtNTUxLDExICs1NDgsMTEgQEAKICAgICAgICAgICAgICAgICB1X3Nob3J0IHNlcW5vOwogICAgICAgICAgICAgICAgIHVfY2hhciBwcmVmaXhbMTZdLCBwbGVuOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0TUgtUmVxdWVzdCAiKSk7Ci0gICAgICAgICAgICAgICAgaWYobGVuIDwgMTQpIGdvdG8gY29ycnVwdDsKKyAgICAgICAgICAgICAgICBpZihsZW4gPCAxNCkgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIHNlcW5vID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDQpOwogICAgICAgICAgICAgICAgIHJjID0gbmV0d29ya19wcmVmaXgobWVzc2FnZVsyXSwgbWVzc2FnZVszXSwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2UgKyAxNiwgTlVMTCwgbGVuIC0gMTQsIHByZWZpeCk7Ci0gICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgcGxlbiA9IG1lc3NhZ2VbM10gKyAobWVzc2FnZVsyXSA9PSAxID8gOTYgOiAwKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiKCV1IGhvcHMpIGZvciAlcyBzZXFubyAldSBpZCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIG1lc3NhZ2VbNl0sIGZvcm1hdF9wcmVmaXgobmRvLCBwcmVmaXgsIHBsZW4pLApAQCAtNTY4LDcgKzU2NSw3IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiB0c3BjIikpOwogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRUUy9QQyAiKSk7Ci0gICAgICAgICAgICAgICAgaWYobGVuIDwgNikgZ290byBjb3JydXB0OworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDYpIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAidGltZXN0YW1wICV1IHBhY2tldGNvdW50ZXIgJXUiLCBFWFRSQUNUXzMyQklUUyAobWVzc2FnZSArIDQpLAogICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhtZXNzYWdlICsgMikpKTsKICAgICAgICAgICAgIH0KQEAgLTU3OSwxMyArNTc2LDEyNyBAQAogICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgajsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdEhNQUMgIikpOwotICAgICAgICAgICAgICAgIGlmKGxlbiA8IDE4KSBnb3RvIGNvcnJ1cHQ7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgMTgpIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAia2V5LWlkICV1IGRpZ2VzdC0ldSAiLCBFWFRSQUNUXzE2QklUUyhtZXNzYWdlICsgMiksIGxlbiAtIDIpKTsKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgbGVuIC0gMjsgaisrKQogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTAyWCIsIG1lc3NhZ2VbNCArIGpdKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUVTU0FHRV9VUERBVEVfU1JDX1NQRUNJRklDIDogeworICAgICAgICAgICAgaWYoIW5kby0+bmRvX3ZmbGFnKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBzcy11cGRhdGUiKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHVfY2hhciBwcmVmaXhbMTZdLCBzcmNfcHJlZml4WzE2XTsKKyAgICAgICAgICAgICAgICB1X3Nob3J0IGludGVydmFsLCBzZXFubywgbWV0cmljOworICAgICAgICAgICAgICAgIHVfY2hhciBhZSwgcGxlbiwgc3JjX3BsZW4sIG9taXR0ZWQ7CisgICAgICAgICAgICAgICAgaW50IHJjOworICAgICAgICAgICAgICAgIGludCBwYXJzZWRfbGVuID0gMTA7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRTUy1VcGRhdGUiKSk7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgMTApIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICAgICAgICBhZSA9IG1lc3NhZ2VbMl07CisgICAgICAgICAgICAgICAgc3JjX3BsZW4gPSBtZXNzYWdlWzNdOworICAgICAgICAgICAgICAgIHBsZW4gPSBtZXNzYWdlWzRdOworICAgICAgICAgICAgICAgIG9taXR0ZWQgPSBtZXNzYWdlWzVdOworICAgICAgICAgICAgICAgIGludGVydmFsID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDYpOworICAgICAgICAgICAgICAgIHNlcW5vID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDgpOworICAgICAgICAgICAgICAgIG1ldHJpYyA9IEVYVFJBQ1RfMTZCSVRTKG1lc3NhZ2UgKyAxMCk7CisgICAgICAgICAgICAgICAgcmMgPSBuZXR3b3JrX3ByZWZpeChhZSwgcGxlbiwgb21pdHRlZCwgbWVzc2FnZSArIDIgKyBwYXJzZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWUgPT0gMSA/IHY0X3ByZWZpeCA6IHY2X3ByZWZpeCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbiAtIHBhcnNlZF9sZW4sIHByZWZpeCk7CisgICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICAgICAgaWYoYWUgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgcGxlbiArPSA5NjsKKyAgICAgICAgICAgICAgICBwYXJzZWRfbGVuICs9IHJjOworICAgICAgICAgICAgICAgIHJjID0gbmV0d29ya19wcmVmaXgoYWUsIHNyY19wbGVuLCAwLCBtZXNzYWdlICsgMiArIHBhcnNlZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBsZW4gLSBwYXJzZWRfbGVuLCBzcmNfcHJlZml4KTsKKyAgICAgICAgICAgICAgICBpZihyYyA8IDApIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICAgICAgICBpZihhZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBzcmNfcGxlbiArPSA5NjsKKyAgICAgICAgICAgICAgICBwYXJzZWRfbGVuICs9IHJjOworCisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyBmcm9tIiwgZm9ybWF0X3ByZWZpeChuZG8sIHByZWZpeCwgcGxlbikpKTsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIG1ldHJpYyAldSBzZXFubyAldSBpbnRlcnZhbCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdF9wcmVmaXgobmRvLCBzcmNfcHJlZml4LCBzcmNfcGxlbiksCisgICAgICAgICAgICAgICAgICAgICAgICAgIG1ldHJpYywgc2Vxbm8sIGZvcm1hdF9pbnRlcnZhbF91cGRhdGUoaW50ZXJ2YWwpKSk7CisgICAgICAgICAgICAgICAgLyogZXh0cmEgZGF0YT8gKi8KKyAgICAgICAgICAgICAgICBpZigodV9pbnQpcGFyc2VkX2xlbiA8IGxlbikKKyAgICAgICAgICAgICAgICAgICAgc3VidGx2c19wcmludChuZG8sIG1lc3NhZ2UgKyAyICsgcGFyc2VkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXNzYWdlICsgMiArIGxlbiwgdHlwZSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUVTU0FHRV9SRVFVRVNUX1NSQ19TUEVDSUZJQyA6IHsKKyAgICAgICAgICAgIGlmKCFuZG8tPm5kb192ZmxhZykKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIHNzLXJlcXVlc3QiKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmMsIHBhcnNlZF9sZW4gPSAzOworICAgICAgICAgICAgICAgIHVfY2hhciBhZSwgcGxlbiwgc3JjX3BsZW4sIHByZWZpeFsxNl0sIHNyY19wcmVmaXhbMTZdOworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0U1MtUmVxdWVzdCAiKSk7CisgICAgICAgICAgICAgICAgaWYobGVuIDwgMykgZ290byBpbnZhbGlkOworICAgICAgICAgICAgICAgIGFlID0gbWVzc2FnZVsyXTsKKyAgICAgICAgICAgICAgICBwbGVuID0gbWVzc2FnZVszXTsKKyAgICAgICAgICAgICAgICBzcmNfcGxlbiA9IG1lc3NhZ2VbNF07CisgICAgICAgICAgICAgICAgcmMgPSBuZXR3b3JrX3ByZWZpeChhZSwgcGxlbiwgMCwgbWVzc2FnZSArIDIgKyBwYXJzZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbGVuIC0gcGFyc2VkX2xlbiwgcHJlZml4KTsKKyAgICAgICAgICAgICAgICBpZihyYyA8IDApIGdvdG8gaW52YWxpZDsKKyAgICAgICAgICAgICAgICBpZihhZSA9PSAxKQorICAgICAgICAgICAgICAgICAgICBwbGVuICs9IDk2OworICAgICAgICAgICAgICAgIHBhcnNlZF9sZW4gKz0gcmM7CisgICAgICAgICAgICAgICAgcmMgPSBuZXR3b3JrX3ByZWZpeChhZSwgc3JjX3BsZW4sIDAsIG1lc3NhZ2UgKyAyICsgcGFyc2VkX2xlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIGxlbiAtIHBhcnNlZF9sZW4sIHNyY19wcmVmaXgpOworICAgICAgICAgICAgICAgIGlmKHJjIDwgMCkgZ290byBpbnZhbGlkOworICAgICAgICAgICAgICAgIGlmKGFlID09IDEpCisgICAgICAgICAgICAgICAgICAgIHNyY19wbGVuICs9IDk2OworICAgICAgICAgICAgICAgIHBhcnNlZF9sZW4gKz0gcmM7CisgICAgICAgICAgICAgICAgaWYoYWUgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiZm9yIGFueSIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiZm9yICglcywgIiwgZm9ybWF0X3ByZWZpeChuZG8sIHByZWZpeCwgcGxlbikpKTsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzKSIsIGZvcm1hdF9wcmVmaXgobmRvLCBzcmNfcHJlZml4LCBzcmNfcGxlbikpKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgTUVTU0FHRV9NSF9SRVFVRVNUX1NSQ19TUEVDSUZJQyA6IHsKKyAgICAgICAgICAgIGlmKCFuZG8tPm5kb192ZmxhZykKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIHNzLW1oLXJlcXVlc3QiKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBpbnQgcmMsIHBhcnNlZF9sZW4gPSAxNDsKKyAgICAgICAgICAgICAgICB1X3Nob3J0IHNlcW5vOworICAgICAgICAgICAgICAgIHVfY2hhciBhZSwgcGxlbiwgc3JjX3BsZW4sIHByZWZpeFsxNl0sIHNyY19wcmVmaXhbMTZdLCBob3BjOworICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcm91dGVyX2lkID0gTlVMTDsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFNTLU1ILVJlcXVlc3QgIikpOworICAgICAgICAgICAgICAgIGlmKGxlbiA8IDE0KSBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICAgICAgYWUgPSBtZXNzYWdlWzJdOworICAgICAgICAgICAgICAgIHBsZW4gPSBtZXNzYWdlWzNdOworICAgICAgICAgICAgICAgIHNlcW5vID0gRVhUUkFDVF8xNkJJVFMobWVzc2FnZSArIDQpOworICAgICAgICAgICAgICAgIGhvcGMgPSBtZXNzYWdlWzZdOworICAgICAgICAgICAgICAgIHNyY19wbGVuID0gbWVzc2FnZVs3XTsKKyAgICAgICAgICAgICAgICByb3V0ZXJfaWQgPSBtZXNzYWdlICsgODsKKyAgICAgICAgICAgICAgICByYyA9IG5ldHdvcmtfcHJlZml4KGFlLCBwbGVuLCAwLCBtZXNzYWdlICsgMiArIHBhcnNlZF9sZW4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBOVUxMLCBsZW4gLSBwYXJzZWRfbGVuLCBwcmVmaXgpOworICAgICAgICAgICAgICAgIGlmKHJjIDwgMCkgZ290byBpbnZhbGlkOworICAgICAgICAgICAgICAgIGlmKGFlID09IDEpCisgICAgICAgICAgICAgICAgICAgIHBsZW4gKz0gOTY7CisgICAgICAgICAgICAgICAgcGFyc2VkX2xlbiArPSByYzsKKyAgICAgICAgICAgICAgICByYyA9IG5ldHdvcmtfcHJlZml4KGFlLCBzcmNfcGxlbiwgMCwgbWVzc2FnZSArIDIgKyBwYXJzZWRfbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgbGVuIC0gcGFyc2VkX2xlbiwgc3JjX3ByZWZpeCk7CisgICAgICAgICAgICAgICAgaWYocmMgPCAwKSBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICAgICAgaWYoYWUgPT0gMSkKKyAgICAgICAgICAgICAgICAgICAgc3JjX3BsZW4gKz0gOTY7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIigldSBob3BzKSBmb3IgKCVzLCAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBob3BjLCBmb3JtYXRfcHJlZml4KG5kbywgcHJlZml4LCBwbGVuKSkpOworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcykgc2Vxbm8gJXUgaWQgJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBmb3JtYXRfcHJlZml4KG5kbywgc3JjX3ByZWZpeCwgc3JjX3BsZW4pLAorICAgICAgICAgICAgICAgICAgICAgICAgICBzZXFubywgZm9ybWF0X2lkKHJvdXRlcl9pZCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIGlmICghbmRvLT5uZG9fdmZsYWcpCiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiB1bmtub3duIikpOwpAQCAtNjAwLDcgKzcxMSw3IEBACiAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIHRzdHIpKTsKICAgICByZXR1cm47CiAKLSBjb3JydXB0OgotICAgIE5EX1BSSU5UKChuZG8sICIgKGNvcnJ1cHQpIikpOworIGludmFsaWQ6CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogICAgIHJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LWJlZXAuYyBiL3ByaW50LWJlZXAuYwppbmRleCA3OTgyZmViLi5lZDUwMmI5IDEwMDY0NAotLS0gYS9wcmludC1iZWVwLmMKKysrIGIvcHJpbnQtYmVlcC5jCkBAIC0yLDIzICsyLDI0IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDAsIFJpY2hhcmQgU2hhcnBlCiAgKgogICogVGhpcyBzb2Z0d2FyZSBtYXkgYmUgZGlzdHJpYnV0ZWQgZWl0aGVyIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUKLSAqIEJTRC1zdHlsZSBsaWNlbmNlIHRoYXQgYWNjb21wYW5pZXMgdGNwZHVtcCBvciB1bmRlciB0aGUgR05VIEdQTAorICogQlNELXN0eWxlIGxpY2Vuc2UgdGhhdCBhY2NvbXBhbmllcyB0Y3BkdW1wIG9yIHVuZGVyIHRoZSBHTlUgR1BMCiAgKiB2ZXJzaW9uIDIgb3IgbGF0ZXIuCiAgKgogICogcHJpbnQtYmVlcC5jCiAgKgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEJsb2NrcyBFeHRlbnNpYmxlIEV4Y2hhbmdlIFByb3RvY29sIChCRUVQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAvKiBDaGVjayBmb3IgYSBzdHJpbmcgYnV0IG5vdCBnbyBiZXlvbmQgbGVuZ3RoCiAgKiBSZXR1cm4gVFJVRSBvbiBtYXRjaCwgRkFMU0Ugb3RoZXJ3aXNlCmRpZmYgLS1naXQgYS9wcmludC1iZmQuYyBiL3ByaW50LWJmZC5jCmluZGV4IGYxYzJlZTguLmFkMGE0MDYgMTAwNjQ0Ci0tLSBhL3ByaW50LWJmZC5jCisrKyBiL3ByaW50LWJmZC5jCkBAIC0xMywxNCArMTMsMTcgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCaWRpcmVjdGlvbmFsIEZvcndhcmRpbmcgRGV0ZWN0aW9uIChCRkQpIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDU4ODAgKGZvciB2ZXJzaW9uIDEpIGFuZCBSRkMgNTg4MSAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjaW5jbHVkZSAidWRwLmgiCkBAIC00NiwxMiArNDksMTIgQEAKICAqLwogCiAvKgotICogIENvbnRyb2wgcGFja2V0LCBCRkR2MSwgZHJhZnQtaWV0Zi1iZmQtYmFzZS0wMi50eHQKKyAqICBDb250cm9sIHBhY2tldCwgQkZEdjEsIFJGQyA1ODgwCiAgKgogICogICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKICAqICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKICAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiAgICB8VmVycyB8ICBEaWFnICAgfFN0YXxQfEZ8Q3xBfER8UnwgIERldGVjdCBNdWx0ICB8ICAgIExlbmd0aCAgICAgfAorICogICAgfFZlcnMgfCAgRGlhZyAgIHxTdGF8UHxGfEN8QXxEfE18ICBEZXRlY3QgTXVsdCAgfCAgICBMZW5ndGggICAgIHwKICAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICBNeSBEaXNjcmltaW5hdG9yICAgICAgICAgICAgICAgICAgICAgICAgfAogICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKQEAgLTkxLDIwICs5NCwzNyBAQAogICAgIHVpbnQ4X3QgYXV0aF90eXBlOwogICAgIHVpbnQ4X3QgYXV0aF9sZW47CiAgICAgdWludDhfdCBhdXRoX2RhdGE7CisgICAgdWludDhfdCBkdW1teTsgLyogbWluaW11biA0IGJ5dGVzICovCit9OworCitlbnVtIGF1dGhfdHlwZSB7CisgICAgQVVUSF9QQVNTV09SRCA9IDEsCisgICAgQVVUSF9NRDUgICAgICA9IDIsCisgICAgQVVUSF9NRVRfTUQ1ICA9IDMsCisgICAgQVVUSF9TSEExICAgICA9IDQsCisgICAgQVVUSF9NRVRfU0hBMSA9IDUKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGJmZF92MV9hdXRoZW50aWNhdGlvbl92YWx1ZXNbXSA9IHsKLSAgICB7IDAsICAgICAgICAiUmVzZXJ2ZWQiIH0sCi0gICAgeyAxLCAgICAgICAgIlNpbXBsZSBQYXNzd29yZCIgfSwKLSAgICB7IDIsICAgICAgICAiS2V5ZWQgTUQ1IiB9LAotICAgIHsgMywgICAgICAgICJNZXRpY3Vsb3VzIEtleWVkIE1ENSIgfSwKLSAgICB7IDQsICAgICAgICAiS2V5ZWQgU0hBMSIgfSwKLSAgICB7IDUsICAgICAgICAiTWV0aWN1bG91cyBLZXllZCBTSEExIiB9LAorICAgIHsgQVVUSF9QQVNTV09SRCwgIlNpbXBsZSBQYXNzd29yZCIgfSwKKyAgICB7IEFVVEhfTUQ1LCAgICAgICJLZXllZCBNRDUiIH0sCisgICAgeyBBVVRIX01FVF9NRDUsICAiTWV0aWN1bG91cyBLZXllZCBNRDUiIH0sCisgICAgeyBBVVRIX1NIQTEsICAgICAiS2V5ZWQgU0hBMSIgfSwKKyAgICB7IEFVVEhfTUVUX1NIQTEsICJNZXRpY3Vsb3VzIEtleWVkIFNIQTEiIH0sCiAgICAgeyAwLCBOVUxMIH0KIH07CiAKLSNkZWZpbmUJQkZEX0VYVFJBQ1RfVkVSU0lPTih4KSAoKCh4KSYweGUwKT4+NSkKLSNkZWZpbmUJQkZEX0VYVFJBQ1RfRElBRyh4KSAgICAgKCh4KSYweDFmKQorZW51bSBhdXRoX2xlbmd0aCB7CisgICAgQVVUSF9QQVNTV09SRF9GSUVMRF9NSU5fTEVOID0gNCwgIC8qIGhlYWRlciArIHBhc3N3b3JkIG1pbjogMyArIDEgKi8KKyAgICBBVVRIX1BBU1NXT1JEX0ZJRUxEX01BWF9MRU4gPSAxOSwgLyogaGVhZGVyICsgcGFzc3dvcmQgbWF4OiAzICsgMTYgKi8KKyAgICBBVVRIX01ENV9GSUVMRF9MRU4gID0gMjQsCisgICAgQVVUSF9NRDVfSEFTSF9MRU4gICA9IDE2LAorICAgIEFVVEhfU0hBMV9GSUVMRF9MRU4gPSAyOCwKKyAgICBBVVRIX1NIQTFfSEFTSF9MRU4gID0gMjAKK307CisKKyNkZWZpbmUgQkZEX0VYVFJBQ1RfVkVSU0lPTih4KSAoKCh4KSYweGUwKT4+NSkKKyNkZWZpbmUgQkZEX0VYVFJBQ1RfRElBRyh4KSAgICAgKCh4KSYweDFmKQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBiZmRfcG9ydF92YWx1ZXNbXSA9IHsKICAgICB7IEJGRF9DT05UUk9MX1BPUlQsICJDb250cm9sIiB9LApAQCAtMTEyLDcgKzEzMiw2IEBACiAgICAgeyAwLCBOVUxMIH0KIH07CiAKLQogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgYmZkX2RpYWdfdmFsdWVzW10gPSB7CiAgICAgeyAwLCAiTm8gRGlhZ25vc3RpYyIgfSwKICAgICB7IDEsICJDb250cm9sIERldGVjdGlvbiBUaW1lIEV4cGlyZWQiIH0sCkBAIC0xMjcsMTQgKzE0NiwxNCBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgYmZkX3YwX2ZsYWdfdmFsdWVzW10gPSB7Ci0gICAgeyAweDgwLAkiSSBIZWFyIFlvdSIgfSwKLSAgICB7IDB4NDAsCSJEZW1hbmQiIH0sCi0gICAgeyAweDIwLAkiUG9sbCIgfSwKLSAgICB7IDB4MTAsCSJGaW5hbCIgfSwKLSAgICB7IDB4MDgsCSJSZXNlcnZlZCIgfSwKLSAgICB7IDB4MDQsCSJSZXNlcnZlZCIgfSwKLSAgICB7IDB4MDIsCSJSZXNlcnZlZCIgfSwKLSAgICB7IDB4MDEsCSJSZXNlcnZlZCIgfSwKKyAgICB7IDB4ODAsICJJIEhlYXIgWW91IiB9LAorICAgIHsgMHg0MCwgIkRlbWFuZCIgfSwKKyAgICB7IDB4MjAsICJQb2xsIiB9LAorICAgIHsgMHgxMCwgIkZpbmFsIiB9LAorICAgIHsgMHgwOCwgIlJlc2VydmVkIiB9LAorICAgIHsgMHgwNCwgIlJlc2VydmVkIiB9LAorICAgIHsgMHgwMiwgIlJlc2VydmVkIiB9LAorICAgIHsgMHgwMSwgIlJlc2VydmVkIiB9LAogICAgIHsgMCwgTlVMTCB9CiB9OwogCkBAIC0xNDYsNyArMTY1LDcgQEAKICAgICB7IDB4MDgsICJDb250cm9sIFBsYW5lIEluZGVwZW5kZW50IiB9LAogICAgIHsgQkZEX0ZMQUdfQVVUSCwgIkF1dGhlbnRpY2F0aW9uIFByZXNlbnQiIH0sCiAgICAgeyAweDAyLCAiRGVtYW5kIiB9LAotICAgIHsgMHgwMSwgIlJlc2VydmVkIiB9LAorICAgIHsgMHgwMSwgIk11bHRpcG9pbnQiIH0sCiAgICAgeyAwLCBOVUxMIH0KIH07CiAKQEAgLTE1OCwxMiArMTc3LDEyMiBAQAogICAgIHsgMCwgTlVMTCB9CiB9OwogCitzdGF0aWMgaW50CithdXRoX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKnBwdHIpCit7CisgICAgICAgIGNvbnN0IHN0cnVjdCBiZmRfYXV0aF9oZWFkZXJfdCAqYmZkX2F1dGhfaGVhZGVyOworICAgICAgICBpbnQgaTsKKworICAgICAgICBwcHRyICs9IHNpemVvZiAoY29uc3Qgc3RydWN0IGJmZF9oZWFkZXJfdCk7CisgICAgICAgIGJmZF9hdXRoX2hlYWRlciA9IChjb25zdCBzdHJ1Y3QgYmZkX2F1dGhfaGVhZGVyX3QgKilwcHRyOworICAgICAgICBORF9UQ0hFQ0soKmJmZF9hdXRoX2hlYWRlcik7CisgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0QXV0aGVudGljYXRpb246ICVzICgldSksIGxlbmd0aDogJXUiLAorICAgICAgICAgICAgICAgICB0b2syc3RyKGJmZF92MV9hdXRoZW50aWNhdGlvbl92YWx1ZXMsIlVua25vd24iLGJmZF9hdXRoX2hlYWRlci0+YXV0aF90eXBlKSwKKyAgICAgICAgICAgICAgICAgYmZkX2F1dGhfaGVhZGVyLT5hdXRoX3R5cGUsCisgICAgICAgICAgICAgICAgIGJmZF9hdXRoX2hlYWRlci0+YXV0aF9sZW4pKTsKKyAgICAgICAgICAgICAgICBwcHRyICs9IDI7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIEF1dGggS2V5IElEOiAlZCIsICpwcHRyKSk7CisKKyAgICAgICAgc3dpdGNoKGJmZF9hdXRoX2hlYWRlci0+YXV0aF90eXBlKSB7CisgICAgICAgICAgICBjYXNlIEFVVEhfUEFTU1dPUkQ6CisvKgorICogICAgU2ltcGxlIFBhc3N3b3JkIEF1dGhlbnRpY2F0aW9uIFNlY3Rpb24gRm9ybWF0CisgKgorICogICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAqICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICB8ICAgQXV0aCBUeXBlICAgfCAgIEF1dGggTGVuICAgIHwgIEF1dGggS2V5IElEICB8ICBQYXNzd29yZC4uLiAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAuLi4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICovCisgICAgICAgICAgICAgICAgaWYgKGJmZF9hdXRoX2hlYWRlci0+YXV0aF9sZW4gPCBBVVRIX1BBU1NXT1JEX0ZJRUxEX01JTl9MRU4gfHwKKyAgICAgICAgICAgICAgICAgICAgYmZkX2F1dGhfaGVhZGVyLT5hdXRoX2xlbiA+IEFVVEhfUEFTU1dPUkRfRklFTERfTUFYX0xFTikgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiW2ludmFsaWQgbGVuZ3RoICVkXSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJmZF9hdXRoX2hlYWRlci0+YXV0aF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHBwdHIrKzsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBQYXNzd29yZDogIikpOworICAgICAgICAgICAgICAgIC8qIHRoZSBsZW5ndGggaXMgZXF1YWwgdG8gdGhlIHBhc3N3b3JkIGxlbmd0aCBwbHVzIHRocmVlICovCisgICAgICAgICAgICAgICAgaWYgKGZuX3ByaW50bihuZG8sIHBwdHIsIGJmZF9hdXRoX2hlYWRlci0+YXV0aF9sZW4gLSAzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRvLT5uZG9fc25hcGVuZCkpCisgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIEFVVEhfTUQ1OgorICAgICAgICAgICAgY2FzZSBBVVRIX01FVF9NRDU6CisvKgorICogICAgS2V5ZWQgTUQ1IGFuZCBNZXRpY3Vsb3VzIEtleWVkIE1ENSBBdXRoZW50aWNhdGlvbiBTZWN0aW9uIEZvcm1hdAorICoKKyAqICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgKiAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgfCAgIEF1dGggVHlwZSAgIHwgICBBdXRoIExlbiAgICB8ICBBdXRoIEtleSBJRCAgfCAgIFJlc2VydmVkICAgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgU2VxdWVuY2UgTnVtYmVyICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqICAgIHwgICAgICAgICAgICAgICAgICAgICAgQXV0aCBLZXkvRGlnZXN0Li4uICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKi8KKyAgICAgICAgICAgICAgICBpZiAoYmZkX2F1dGhfaGVhZGVyLT5hdXRoX2xlbiAhPSBBVVRIX01ENV9GSUVMRF9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIltpbnZhbGlkIGxlbmd0aCAlZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmRfYXV0aF9oZWFkZXItPmF1dGhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcHRyICs9IDI7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqcHB0ciwgNCk7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgU2VxdWVuY2UgTnVtYmVyOiAweCUwOHgiLCBFWFRSQUNUXzMyQklUUyhwcHRyKSkpOworICAgICAgICAgICAgICAgIHBwdHIgKz0gNDsKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCpwcHRyLCBBVVRIX01ENV9IQVNIX0xFTik7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIERpZ2VzdDogIikpOworICAgICAgICAgICAgICAgIGZvcihpID0gMDsgaSA8IEFVVEhfTUQ1X0hBU0hfTEVOOyBpKyspCisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlMDJ4IiwgcHB0cltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBBVVRIX1NIQTE6CisgICAgICAgICAgICBjYXNlIEFVVEhfTUVUX1NIQTE6CisvKgorICogICAgS2V5ZWQgU0hBMSBhbmQgTWV0aWN1bG91cyBLZXllZCBTSEExIEF1dGhlbnRpY2F0aW9uIFNlY3Rpb24gRm9ybWF0CisgKgorICogICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAqICAgICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICB8ICAgQXV0aCBUeXBlICAgfCAgIEF1dGggTGVuICAgIHwgIEF1dGggS2V5IElEICB8ICAgUmVzZXJ2ZWQgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqICAgIHwgICAgICAgICAgICAgICAgICAgICAgICBTZXF1ZW5jZSBOdW1iZXIgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgfCAgICAgICAgICAgICAgICAgICAgICAgQXV0aCBLZXkvSGFzaC4uLiAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqLworICAgICAgICAgICAgICAgIGlmIChiZmRfYXV0aF9oZWFkZXItPmF1dGhfbGVuICE9IEFVVEhfU0hBMV9GSUVMRF9MRU4pIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIltpbnZhbGlkIGxlbmd0aCAlZF0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZmRfYXV0aF9oZWFkZXItPmF1dGhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBwcHRyICs9IDI7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqcHB0ciwgNCk7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgU2VxdWVuY2UgTnVtYmVyOiAweCUwOHgiLCBFWFRSQUNUXzMyQklUUyhwcHRyKSkpOworICAgICAgICAgICAgICAgIHBwdHIgKz0gNDsKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCpwcHRyLCBBVVRIX1NIQTFfSEFTSF9MRU4pOworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBIYXNoOiAiKSk7CisgICAgICAgICAgICAgICAgZm9yKGkgPSAwOyBpIDwgQVVUSF9TSEExX0hBU0hfTEVOOyBpKyspCisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlMDJ4IiwgcHB0cltpXSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJldHVybiAwOworCit0cnVuYzoKKyAgICAgICAgcmV0dXJuIDE7Cit9CisKIHZvaWQKIGJmZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpwcHRyLAogICAgICAgICAgIHJlZ2lzdGVyIHVfaW50IGxlbiwgcmVnaXN0ZXIgdV9pbnQgcG9ydCkKIHsKICAgICAgICAgY29uc3Qgc3RydWN0IGJmZF9oZWFkZXJfdCAqYmZkX2hlYWRlcjsKLSAgICAgICAgY29uc3Qgc3RydWN0IGJmZF9hdXRoX2hlYWRlcl90ICpiZmRfYXV0aF9oZWFkZXI7CiAgICAgICAgIHVpbnQ4X3QgdmVyc2lvbiA9IDA7CiAKICAgICAgICAgYmZkX2hlYWRlciA9IChjb25zdCBzdHJ1Y3QgYmZkX2hlYWRlcl90ICopcHB0cjsKQEAgLTI0NCwxMyArMzczLDggQEAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogJTR1IG1zIiwgRVhUUkFDVF8zMkJJVFMoYmZkX2hlYWRlci0+cmVxdWlyZWRfbWluX2VjaG9faW50ZXJ2YWwpLzEwMDApKTsKIAogICAgICAgICAgICAgaWYgKGJmZF9oZWFkZXItPmZsYWdzICYgQkZEX0ZMQUdfQVVUSCkgewotICAgICAgICAgICAgICAgIHBwdHIgKz0gc2l6ZW9mIChjb25zdCBzdHJ1Y3QgYmZkX2hlYWRlcl90KTsKLSAgICAgICAgICAgICAgICBiZmRfYXV0aF9oZWFkZXIgPSAoY29uc3Qgc3RydWN0IGJmZF9hdXRoX2hlYWRlcl90ICopcHB0cjsKLSAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCpiZmRfYXV0aF9oZWFkZXIsIHNpemVvZihjb25zdCBzdHJ1Y3QgYmZkX2F1dGhfaGVhZGVyX3QpKTsKLSAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCVzICgldSkgQXV0aGVudGljYXRpb24sIGxlbmd0aCAldSBwcmVzZW50IiwKLSAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZmRfdjFfYXV0aGVudGljYXRpb25fdmFsdWVzLCJVbmtub3duIixiZmRfYXV0aF9oZWFkZXItPmF1dGhfdHlwZSksCi0gICAgICAgICAgICAgICAgICAgICAgIGJmZF9hdXRoX2hlYWRlci0+YXV0aF90eXBlLAotICAgICAgICAgICAgICAgICAgICAgICBiZmRfYXV0aF9oZWFkZXItPmF1dGhfbGVuKSk7CisgICAgICAgICAgICAgICAgaWYgKGF1dGhfcHJpbnQobmRvLCBwcHRyKSkKKyAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogCmRpZmYgLS1naXQgYS9wcmludC1iZ3AuYyBiL3ByaW50LWJncC5jCmluZGV4IGM2MTdjM2IuLjc5YWZlYWIgMTAwNjQ0Ci0tLSBhL3ByaW50LWJncC5jCisrKyBiL3ByaW50LWJncC5jCkBAIC0zMCwxNyArMzAsMTggQEAKICAqIGNvbXBsZXRlIEJHUCBzdXBwb3J0LgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEJvcmRlciBHYXRld2F5IFByb3RvY29sIChCR1ApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFmLmgiCkBAIC0xMjEsMTggKzEyMiwyNSBAQAogI2RlZmluZSBCR1BUWVBFX0FUT01JQ19BR0dSRUdBVEUJNgogI2RlZmluZSBCR1BUWVBFX0FHR1JFR0FUT1IJCTcKICNkZWZpbmUJQkdQVFlQRV9DT01NVU5JVElFUwkJOAkvKiBSRkMxOTk3ICovCi0jZGVmaW5lCUJHUFRZUEVfT1JJR0lOQVRPUl9JRAkJOQkvKiBSRkMxOTk4ICovCi0jZGVmaW5lCUJHUFRZUEVfQ0xVU1RFUl9MSVNUCQkxMAkvKiBSRkMxOTk4ICovCi0jZGVmaW5lCUJHUFRZUEVfRFBBCQkJMTEJLyogZHJhZnQtaWV0Zi1pZHItYmdwLWRwYSAqLwotI2RlZmluZQlCR1BUWVBFX0FEVkVSVElTRVJTCQkxMgkvKiBSRkMxODYzICovCi0jZGVmaW5lCUJHUFRZUEVfUkNJRF9QQVRICQkxMwkvKiBSRkMxODYzICovCi0jZGVmaW5lIEJHUFRZUEVfTVBfUkVBQ0hfTkxSSQkJMTQJLyogUkZDMjI4MyAqLwotI2RlZmluZSBCR1BUWVBFX01QX1VOUkVBQ0hfTkxSSQkJMTUJLyogUkZDMjI4MyAqLwotI2RlZmluZSBCR1BUWVBFX0VYVERfQ09NTVVOSVRJRVMgICAgICAgIDE2ICAgICAgLyogZHJhZnQtaWV0Zi1pZHItYmdwLWV4dC1jb21tdW5pdGllcyAqLwotI2RlZmluZSBCR1BUWVBFX0FTNF9QQVRICSAgICAgICAgMTcgICAgICAvKiBSRkM0ODkzICovCi0jZGVmaW5lIEJHUFRZUEVfQUdHUkVHQVRPUjQJCTE4ICAgICAgLyogUkZDNDg5MyAqLwotI2RlZmluZSBCR1BUWVBFX1BNU0lfVFVOTkVMICAgICAgICAgICAgIDIyICAgICAgLyogZHJhZnQtaWV0Zi1sM3Zwbi0yNTQ3YmlzLW1jYXN0LWJncC0wMi50eHQgKi8KLSNkZWZpbmUgQkdQVFlQRV9BVFRSX1NFVCAgICAgICAgICAgICAgIDEyOCAgICAgIC8qIGRyYWZ0LW1hcnF1ZXMtcHB2cG4taWJncCAqLworI2RlZmluZQlCR1BUWVBFX09SSUdJTkFUT1JfSUQJCTkJLyogUkZDNDQ1NiAqLworI2RlZmluZQlCR1BUWVBFX0NMVVNURVJfTElTVAkJMTAJLyogUkZDNDQ1NiAqLworI2RlZmluZQlCR1BUWVBFX0RQQQkJCTExCS8qIGRlcHJlY2F0ZWQsIGRyYWZ0LWlldGYtaWRyLWJncC1kcGEgKi8KKyNkZWZpbmUJQkdQVFlQRV9BRFZFUlRJU0VSUwkJMTIJLyogZGVwcmVjYXRlZCBSRkMxODYzICovCisjZGVmaW5lCUJHUFRZUEVfUkNJRF9QQVRICQkxMwkvKiBkZXByZWNhdGVkIFJGQzE4NjMgKi8KKyNkZWZpbmUgQkdQVFlQRV9NUF9SRUFDSF9OTFJJCQkxNAkvKiBSRkM0NzYwICovCisjZGVmaW5lIEJHUFRZUEVfTVBfVU5SRUFDSF9OTFJJCQkxNQkvKiBSRkM0NzYwICovCisjZGVmaW5lIEJHUFRZUEVfRVhURF9DT01NVU5JVElFUyAgICAgICAgMTYgICAgICAvKiBSRkM0MzYwICovCisjZGVmaW5lIEJHUFRZUEVfQVM0X1BBVEgJICAgICAgICAxNyAgICAgIC8qIFJGQzY3OTMgKi8KKyNkZWZpbmUgQkdQVFlQRV9BR0dSRUdBVE9SNAkJMTggICAgICAvKiBSRkM2NzkzICovCisjZGVmaW5lIEJHUFRZUEVfUE1TSV9UVU5ORUwgICAgICAgICAgICAgMjIgICAgICAvKiBSRkM2NTE0ICovCisjZGVmaW5lIEJHUFRZUEVfVFVOTkVMX0VOQ0FQICAgICAgICAgICAgMjMgICAgICAvKiBSRkM1NTEyICovCisjZGVmaW5lIEJHUFRZUEVfVFJBRkZJQ19FTkcgICAgICAgICAgICAgMjQgICAgICAvKiBSRkM1NTQzICovCisjZGVmaW5lIEJHUFRZUEVfSVBWNl9FWFREX0NPTU1VTklUSUVTICAgMjUgICAgICAvKiBSRkM1NzAxICovCisjZGVmaW5lIEJHUFRZUEVfQUlHUCAgICAgICAgICAgICAgICAgICAgMjYgICAgICAvKiBSRkM3MzExICovCisjZGVmaW5lIEJHUFRZUEVfUEVfRElTVElOR1VJU0hFUl9MQUJFTCAgMjcgICAgICAvKiBSRkM2NTE0ICovCisjZGVmaW5lIEJHUFRZUEVfRU5UUk9QWV9MQUJFTCAgICAgICAgICAgMjggICAgICAvKiBSRkM2NzkwICovCisjZGVmaW5lIEJHUFRZUEVfTEFSR0VfQ09NTVVOSVRZCQkzMgkvKiBkcmFmdC1pZXRmLWlkci1sYXJnZS1jb21tdW5pdHktMDUgKi8KKyNkZWZpbmUgQkdQVFlQRV9BVFRSX1NFVCAgICAgICAgICAgICAgIDEyOCAgICAgIC8qIFJGQzYzNjggKi8KIAogI2RlZmluZSBCR1BfTVBfTkxSSV9NSU5TSVpFICAgICAgICAgICAgICAzICAgICAgIC8qIEVuZCBvZiBSSUIgTWFya2VyIGRldGVjdGlvbiAqLwogCkBAIC0xNTYsNiArMTY0LDEzIEBACiAgICAgeyBCR1BUWVBFX01QX1VOUkVBQ0hfTkxSSSwgICJNdWx0aS1Qcm90b2NvbCBVbnJlYWNoIE5MUkkifSwKICAgICB7IEJHUFRZUEVfRVhURF9DT01NVU5JVElFUywgIkV4dGVuZGVkIENvbW11bml0eSJ9LAogICAgIHsgQkdQVFlQRV9QTVNJX1RVTk5FTCwgICAgICAiUE1TSSBUdW5uZWwifSwKKyAgICB7IEJHUFRZUEVfVFVOTkVMX0VOQ0FQLCAgICAgIlR1bm5lbCBFbmNhcHN1bGF0aW9uIn0sCisgICAgeyBCR1BUWVBFX1RSQUZGSUNfRU5HLCAgICAgICJUcmFmZmljIEVuZ2luZWVyaW5nIn0sCisgICAgeyBCR1BUWVBFX0lQVjZfRVhURF9DT01NVU5JVElFUywgIklQdjYgRXh0ZW5kZWQgQ29tbXVuaXR5In0sCisgICAgeyBCR1BUWVBFX0FJR1AsICAgICAgICAgICAgICJBY2N1bXVsYXRlZCBJR1AgTWV0cmljIn0sCisgICAgeyBCR1BUWVBFX1BFX0RJU1RJTkdVSVNIRVJfTEFCRUwsICJQRSBEaXN0aW5ndWlzaGVyIExhYmVsIn0sCisgICAgeyBCR1BUWVBFX0VOVFJPUFlfTEFCRUwsICAgICJFbnRyb3B5IExhYmVsIn0sCisgICAgeyBCR1BUWVBFX0xBUkdFX0NPTU1VTklUWSwgICJMYXJnZSBDb21tdW5pdHkifSwKICAgICB7IEJHUFRZUEVfQVRUUl9TRVQsICAgICAgICAgIkF0dHJpYnV0ZSBTZXQifSwKICAgICB7IDI1NSwgICAgICAgICAgICAgICAgICAgICAgIlJlc2VydmVkIGZvciBkZXZlbG9wbWVudCJ9LAogICAgIHsgMCwgTlVMTH0KQEAgLTE4OCwyOCArMjAzLDM3IEBACiAjZGVmaW5lIEJHUF9PUFRfQVVUSCAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZSBCR1BfT1BUX0NBUCAgICAgICAgICAgICAgICAgICAgIDIKIAotCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBiZ3Bfb3B0X3ZhbHVlc1tdID0gewogICAgIHsgQkdQX09QVF9BVVRILCAgICAgICAgICAgICAiQXV0aGVudGljYXRpb24gSW5mb3JtYXRpb24ifSwKICAgICB7IEJHUF9PUFRfQ0FQLCAgICAgICAgICAgICAgIkNhcGFiaWxpdGllcyBBZHZlcnRpc2VtZW50In0sCiAgICAgeyAwLCBOVUxMfQogfTsKIAotI2RlZmluZSBCR1BfQ0FQQ09ERV9NUCAgICAgICAgICAgICAgICAgIDEKLSNkZWZpbmUgQkdQX0NBUENPREVfUlIgICAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIEJHUF9DQVBDT0RFX09SRiAgICAgICAgICAgICAgICAgMyAvKiBYWFggKi8KLSNkZWZpbmUgQkdQX0NBUENPREVfUkVTVEFSVCAgICAgICAgICAgIDY0IC8qIGRyYWZ0LWlldGYtaWRyLXJlc3RhcnQtMDUgICovCi0jZGVmaW5lIEJHUF9DQVBDT0RFX0FTX05FVyAgICAgICAgICAgICA2NSAvKiBYWFggKi8KLSNkZWZpbmUgQkdQX0NBUENPREVfRFlOX0NBUCAgICAgICAgICAgIDY3IC8qIFhYWCAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9NUCAgICAgICAgICAgICAgICAgIDEgLyogUkZDMjg1OCAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9SUiAgICAgICAgICAgICAgICAgIDIgLyogUkZDMjkxOCAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9PUkYgICAgICAgICAgICAgICAgIDMgLyogUkZDNTI5MSAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9NUiAgICAgICAgICAgICAgICAgIDQgLyogUkZDMzEwNyAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9FWFRfTkggICAgICAgICAgICAgIDUgLyogUkZDNTU0OSAqLworI2RlZmluZSBCR1BfQ0FQQ09ERV9SRVNUQVJUICAgICAgICAgICAgNjQgLyogUkZDNDcyNCAgKi8KKyNkZWZpbmUgQkdQX0NBUENPREVfQVNfTkVXICAgICAgICAgICAgIDY1IC8qIFJGQzY3OTMgKi8KKyNkZWZpbmUgQkdQX0NBUENPREVfRFlOX0NBUCAgICAgICAgICAgIDY3IC8qIGRyYWZ0LWlldGYtaWRyLWR5bmFtaWMtY2FwICovCisjZGVmaW5lIEJHUF9DQVBDT0RFX01VTFRJU0VTUyAgICAgICAgICA2OCAvKiBkcmFmdC1pZXRmLWlkci1iZ3AtbXVsdGlzZXNzaW9uICovCisjZGVmaW5lIEJHUF9DQVBDT0RFX0FERF9QQVRIICAgICAgICAgICA2OSAvKiBSRkM3OTExICovCisjZGVmaW5lIEJHUF9DQVBDT0RFX0VOSF9SUiAgICAgICAgICAgICA3MCAvKiBkcmFmdC1rZXl1ci1iZ3AtZW5oYW5jZWQtcm91dGUtcmVmcmVzaCAqLwogI2RlZmluZSBCR1BfQ0FQQ09ERV9SUl9DSVNDTyAgICAgICAgICAxMjgKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgYmdwX2NhcGNvZGVfdmFsdWVzW10gPSB7CiAgICAgeyBCR1BfQ0FQQ09ERV9NUCwgICAgICAgICAgICJNdWx0aXByb3RvY29sIEV4dGVuc2lvbnMifSwKICAgICB7IEJHUF9DQVBDT0RFX1JSLCAgICAgICAgICAgIlJvdXRlIFJlZnJlc2gifSwKICAgICB7IEJHUF9DQVBDT0RFX09SRiwgICAgICAgICAgIkNvb3BlcmF0aXZlIFJvdXRlIEZpbHRlcmluZyJ9LAorICAgIHsgQkdQX0NBUENPREVfTVIsICAgICAgICAgICAiTXVsdGlwbGUgUm91dGVzIHRvIGEgRGVzdGluYXRpb24ifSwKKyAgICB7IEJHUF9DQVBDT0RFX0VYVF9OSCwgICAgICAgIkV4dGVuZGVkIE5leHQgSG9wIEVuY29kaW5nIn0sCiAgICAgeyBCR1BfQ0FQQ09ERV9SRVNUQVJULCAgICAgICJHcmFjZWZ1bCBSZXN0YXJ0In0sCiAgICAgeyBCR1BfQ0FQQ09ERV9BU19ORVcsICAgICAgICIzMi1CaXQgQVMgTnVtYmVyIn0sCiAgICAgeyBCR1BfQ0FQQ09ERV9EWU5fQ0FQLCAgICAgICJEeW5hbWljIENhcGFiaWxpdHkifSwKKyAgICB7IEJHUF9DQVBDT0RFX01VTFRJU0VTUywgICAgIk11bHRpc2Vzc2lvbiBCR1AifSwKKyAgICB7IEJHUF9DQVBDT0RFX0FERF9QQVRILCAgICAgIk11bHRpcGxlIFBhdGhzIn0sCisgICAgeyBCR1BfQ0FQQ09ERV9FTkhfUlIsICAgICAgICJFbmhhbmNlZCBSb3V0ZSBSZWZyZXNoIn0sCiAgICAgeyBCR1BfQ0FQQ09ERV9SUl9DSVNDTywgICAgICJSb3V0ZSBSZWZyZXNoIChDaXNjbykifSwKICAgICB7IDAsIE5VTEx9CiB9OwpAQCAtMjc5LDYgKzMwMywxMyBAQAogICAgIHsgMCwgTlVMTH0KIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGJncF9ub3RpZnlfbWlub3JfZnNtX3ZhbHVlc1tdID0geworICAgIHsgMSwgICAgICAgICAgICAgICAgICAgICAgICAiSW4gT3BlblNlbnQgU3RhdGUifSwKKyAgICB7IDIsICAgICAgICAgICAgICAgICAgICAgICAgIkluIE9wZW5Db25maXJtIFN0YXRlIn0sCisgICAgeyAzLCAgICAgICAgICAgICAgICAgICAgICAgICJJbiBFc3RhYmxpc2hlZCBTdGF0ZSJ9LAorICAgIHsgMCwgTlVMTCB9Cit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBiZ3Bfbm90aWZ5X21pbm9yX2NhcF92YWx1ZXNbXSA9IHsKICAgICB7IDEsICAgICAgICAgICAgICAgICAgICAgICAgIkludmFsaWQgQWN0aW9uIFZhbHVlIiB9LAogICAgIHsgMiwgICAgICAgICAgICAgICAgICAgICAgICAiSW52YWxpZCBDYXBhYmlsaXR5IExlbmd0aCIgfSwKQEAgLTMxOCwyNSArMzQ5LDM0IEBACiAgICAgeyAwLCBOVUxMfQogfTsKIAorI2RlZmluZSBCR1BfQUlHUF9UTFYgMQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBiZ3BfYWlncF92YWx1ZXNbXSA9IHsKKyAgICB7IEJHUF9BSUdQX1RMViwgIkFJR1AifSwKKyAgICB7IDAsIE5VTEx9Cit9OwogCiAvKiBTdWJzZXF1ZW50IGFkZHJlc3MgZmFtaWx5IGlkZW50aWZpZXIsIFJGQzIyODMgc2VjdGlvbiA3ICovCiAjZGVmaW5lIFNBRk5VTV9SRVMgICAgICAgICAgICAgICAgICAgICAgMAogI2RlZmluZSBTQUZOVU1fVU5JQ0FTVCAgICAgICAgICAgICAgICAgIDEKICNkZWZpbmUgU0FGTlVNX01VTFRJQ0FTVCAgICAgICAgICAgICAgICAyCi0jZGVmaW5lIFNBRk5VTV9VTklNVUxUSUNBU1QgICAgICAgICAgICAgMworI2RlZmluZSBTQUZOVU1fVU5JTVVMVElDQVNUICAgICAgICAgICAgIDMgICAgICAgLyogZGVwcmVjYXRlZCBub3cgKi8KIC8qIGxhYmVsZWQgQkdQIFJGQzMxMDcgKi8KICNkZWZpbmUgU0FGTlVNX0xBQlVOSUNBU1QgICAgICAgICAgICAgICA0Ci0vKiBkcmFmdC1pZXRmLWwzdnBuLTI1NDdiaXMtbWNhc3QtYmdwLTAyLnR4dCAqLworLyogUkZDNjUxNCAqLwogI2RlZmluZSBTQUZOVU1fTVVMVElDQVNUX1ZQTiAgICAgICAgICAgIDUKLSNkZWZpbmUgU0FGTlVNX1RVTk5FTCAgICAgICAgICAgICAgICAgICA2NCAvKiBYWFggKi8KLSNkZWZpbmUgU0FGTlVNX1ZQTFMgICAgICAgICAgICAgICAgICAgICA2NSAvKiBYWFggKi8KLS8qIGRyYWZ0LW5hbGF3YWRlLWlkci1tZHQtc2FmaS0wMyAqLworLyogZHJhZnQtbmFsYXdhZGUta2Fwb29yLXR1bm5lbC1zYWZpICovCisjZGVmaW5lIFNBRk5VTV9UVU5ORUwgICAgICAgICAgICAgICAgICAgNjQKKy8qIFJGQzQ3NjEgKi8KKyNkZWZpbmUgU0FGTlVNX1ZQTFMgICAgICAgICAgICAgICAgICAgICA2NQorLyogUkZDNjAzNyAqLwogI2RlZmluZSBTQUZOVU1fTURUICAgICAgICAgICAgICAgICAgICAgIDY2Ci0vKiBTZWN0aW9uIDQuMy40IG9mIGRyYWZ0LXJvc2VuLXJmYzI1NDdiaXMtMDMudHh0ICAqLworLyogUkZDNDM2NCAqLwogI2RlZmluZSBTQUZOVU1fVlBOVU5JQ0FTVCAgICAgICAgICAgICAgIDEyOAorLyogUkZDNjUxMyAqLwogI2RlZmluZSBTQUZOVU1fVlBOTVVMVElDQVNUICAgICAgICAgICAgIDEyOQotI2RlZmluZSBTQUZOVU1fVlBOVU5JTVVMVElDQVNUICAgICAgICAgIDEzMAotLyogZHJhZnQtbWFycXVlcy1wcHZwbi1ydC1jb25zdHJhaW4tMDEudHh0ICovCisjZGVmaW5lIFNBRk5VTV9WUE5VTklNVUxUSUNBU1QgICAgICAgICAgMTMwICAgICAvKiBkZXByZWNhdGVkIG5vdyAqLworLyogUkZDNDY4NCAqLwogI2RlZmluZSBTQUZOVU1fUlRfUk9VVElOR19JTkZPICAgICAgICAgIDEzMgogCiAjZGVmaW5lIEJHUF9WUE5fUkRfTEVOICAgICAgICAgICAgICAgICAgOApAQCAtMzkwLDcgKzQzMCw2IEBACiAjZGVmaW5lIEJHUF9FWFRfQ09NX0wyVlBOX1JUXzAgIDB4MDAwYSAgLyogTDJWUE4gSWRlbnRpZmllcixGb3JtYXQgQVMoMmJ5dGVzKTpBTig0Ynl0ZXMpICovCiAjZGVmaW5lIEJHUF9FWFRfQ09NX0wyVlBOX1JUXzEgIDB4RjEwYSAgLyogTDJWUE4gSWRlbnRpZmllcixGb3JtYXQgSVAgYWRkcmVzczpBTigyYnl0ZXMpICovCiAKLQogLyogaHR0cDovL3d3dy5jaXNjby5jb20vZW4vVVMvdGVjaC90azQzNi90azQyOC90ZWNobm9sb2dpZXNfdGVjaF9ub3RlMDkxODZhMDA4MDFlYjA5YS5zaHRtbCAgKi8KICNkZWZpbmUgQkdQX0VYVF9DT01fRUlHUlBfR0VOICAgMHg4ODAwCiAjZGVmaW5lIEJHUF9FWFRfQ09NX0VJR1JQX01FVFJJQ19BU19ERUxBWSAgMHg4ODAxCkBAIC00NTQsNyArNDkzLDE0IEBACiAgIHsgMCwgTlVMTCB9LAogfTsKIAotI2RlZmluZSBUT0tCVUZTSVpFIDEyOAorLyogQURELVBBVEggU2VuZC9SZWNlaXZlIGZpZWxkIHZhbHVlcyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgYmdwX2FkZF9wYXRoX3JlY3ZzZW5kW10gPSB7CisgIHsgMSwgIlJlY2VpdmUiIH0sCisgIHsgMiwgIlNlbmQiIH0sCisgIHsgMywgIkJvdGgiIH0sCisgIHsgMCwgTlVMTCB9LAorfTsKKwogc3RhdGljIGNoYXIgYXN0b3N0clsyMF07CiAKIC8qCkBAIC01MDMsNyArNTQ5LDcgQEAKIAkJKCh1X2NoYXIgKikmYWRkcilbcGxlbmJ5dGVzIC0gMV0gJj0KIAkJCSgoMHhmZjAwID4+IChwbGVuICUgOCkpICYgMHhmZik7CiAJfQotCXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiJXMvJWQiLCBnZXRuYW1lKG5kbywgKHVfY2hhciAqKSZhZGRyKSwgcGxlbik7CisJc25wcmludGYoYnVmLCBidWZsZW4sICIlcy8lZCIsIGlwYWRkcl9zdHJpbmcobmRvLCAmYWRkciksIHBsZW4pOwogCXJldHVybiAxICsgcGxlbmJ5dGVzOwogCiB0cnVuYzoKQEAgLTU1Myw3ICs1OTksNyBAQAogCX0KICAgICAgICAgLyogdGhlIGxhYmVsIG1heSBnZXQgb2Zmc2V0dGVkIGJ5IDQgYml0cyBzbyBsZXRzIHNoaWZ0IGl0IHJpZ2h0ICovCiAJc25wcmludGYoYnVmLCBidWZsZW4sICIlcy8lZCwgbGFiZWw6JXUgJXMiLAotICAgICAgICAgICAgICAgICBnZXRuYW1lKG5kbywgKHVfY2hhciAqKSZhZGRyKSwKKyAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sICZhZGRyKSwKICAgICAgICAgICAgICAgICAgcGxlbiwKICAgICAgICAgICAgICAgICAgRVhUUkFDVF8yNEJJVFMocHB0cisxKT4+NCwKICAgICAgICAgICAgICAgICAgKChwcHRyWzNdJjEpPT0wKSA/ICIoQk9HVVM6IEJvdHRvbSBvZiBTdGFjayBOT1Qgc2V0ISkiIDogIihib3R0b20pIiApOwpAQCAtNTg2LDEyICs2MzIsMTAgQEAKICAgICAgICAgTkRfVENIRUNLMihwcHRyWzBdLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKICAgICAgICAgc25wcmludGYocG9zLCBzaXplb2YoYWRkciksICIlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCBwcHRyKSk7CiAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgY2FzZSAoc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikgPDwgMyk6IC8qIDEyOCAqLwogICAgICAgICBORF9UQ0hFQ0syKHBwdHJbMF0sIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKICAgICAgICAgc25wcmludGYocG9zLCBzaXplb2YoYWRkciksICIlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgcHB0cikpOwogICAgICAgICBicmVhazsKLSNlbmRpZgogICAgIGRlZmF1bHQ6CiAgICAgICAgIHNucHJpbnRmKHBvcywgc2l6ZW9mKGFkZHIpLCAiYm9ndXMgYWRkcmVzcyBsZW5ndGggJXUiLCBhZGRyX2xlbmd0aCk7CiAgICAgICAgIGJyZWFrOwpAQCAtNjYyLDcgKzcwNiw2IEBACiAgICAgcmV0dXJuICh0b3RhbF9sZW5ndGgpOwogfQogCi0KIC8qIFJEcyBhbmQgUlRzIHNoYXJlIHRoZSBzYW1lIHNlbWFudGljcwogICogd2UgdXNlIGJncF92cG5fcmRfcHJpbnQgZm9yCiAgKiBwcmludGluZyByb3V0ZSB0YXJnZXRzIGluc2lkZSBhIE5MUkkgKi8KQEAgLTc3NSw3ICs4MTgsNyBAQAogICAgICAgICAvKiB0aGUgbGFiZWwgbWF5IGdldCBvZmZzZXR0ZWQgYnkgNCBiaXRzIHNvIGxldHMgc2hpZnQgaXQgcmlnaHQgKi8KIAlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJEOiAlcywgJXMvJWQsIGxhYmVsOiV1ICVzIiwKICAgICAgICAgICAgICAgICAgYmdwX3Zwbl9yZF9wcmludChuZG8sIHBwdHIrNCksCi0gICAgICAgICAgICAgICAgIGdldG5hbWUobmRvLCAodV9jaGFyICopJmFkZHIpLAorICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgJmFkZHIpLAogICAgICAgICAgICAgICAgICBwbGVuLAogICAgICAgICAgICAgICAgICBFWFRSQUNUXzI0QklUUyhwcHRyKzEpPj40LAogICAgICAgICAgICAgICAgICAoKHBwdHJbM10mMSk9PTApID8gIihCT0dVUzogQm90dG9tIG9mIFN0YWNrIE5PVCBzZXQhKSIgOiAiKGJvdHRvbSkiICk7CkBAIC05NTEsMjEgKzk5NCwyMSBAQAogICogdGhlIGJ1ZmZlciB3b3VsZCBoYXZlIG92ZXJmbG93ZWQ7IGFnYWluLCBzZXQgYnVmbGVuIHRvIDAgaW4KICAqIHRoYXQgY2FzZS4KICAqLwotI2RlZmluZSBVUERBVEVfQlVGX0JVRkxFTihidWYsIGJ1Zmxlbiwgc3RybGVuKSBcCi0gICAgaWYgKHN0cmxlbjwwKSBcCisjZGVmaW5lIFVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJpbmdsZW4pIFwKKyAgICBpZiAoc3RyaW5nbGVuPDApIFwKICAgICAgICAJYnVmbGVuPTA7IFwKLSAgICBlbHNlIGlmICgodV9pbnQpc3RybGVuPmJ1ZmxlbikgXAorICAgIGVsc2UgaWYgKCh1X2ludClzdHJpbmdsZW4+YnVmbGVuKSBcCiAgICAgICAgIGJ1Zmxlbj0wOyBcCiAgICAgZWxzZSB7IFwKLSAgICAgICAgYnVmbGVuLT1zdHJsZW47IFwKLQlidWYrPXN0cmxlbjsgXAorICAgICAgICBidWZsZW4tPXN0cmluZ2xlbjsgXAorCWJ1Zis9c3RyaW5nbGVuOyBcCiAgICAgfQogCiBzdGF0aWMgaW50CiBkZWNvZGVfbGFiZWxlZF92cG5fbDIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpwcHRyLCBjaGFyICpidWYsIHVfaW50IGJ1ZmxlbikKIHsKLSAgICAgICAgaW50IHBsZW4sdGxlbixzdHJsZW4sdGx2X3R5cGUsdGx2X2xlbix0dGx2X2xlbjsKKyAgICAgICAgaW50IHBsZW4sdGxlbixzdHJpbmdsZW4sdGx2X3R5cGUsdGx2X2xlbix0dGx2X2xlbjsKIAogCU5EX1RDSEVDSzIocHB0clswXSwgMik7CiAgICAgICAgIHBsZW49RVhUUkFDVF8xNkJJVFMocHB0cik7CkBAIC05NzksMTIgKzEwMjIsMTEgQEAKIAkgICAgLyogYXNzdW1lIEFELW9ubHkgd2l0aCBSRCwgQkdQTkggKi8KIAkgICAgTkRfVENIRUNLMihwcHRyWzBdLDEyKTsKIAkgICAgYnVmWzBdPSdcMCc7Ci0JICAgIHN0cmxlbj1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJEOiAlcywgQkdQTkg6ICVzIiwKLQkJCSAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgcHB0ciksCi0JCQkgICAgLyogbmVlZCBzb21ldGhpbmcgbGlrZSBnZXRuYW1lKG5kbywgKSBoZXJlICovCi0JCQkgICAgZ2V0bmFtZShuZG8sIHBwdHIrOCkKLQkJCSAgICApOwotCSAgICBVUERBVEVfQlVGX0JVRkxFTihidWYsIGJ1Zmxlbiwgc3RybGVuKTsKKwkgICAgc3RyaW5nbGVuPXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiUkQ6ICVzLCBCR1BOSDogJXMiLAorCQkJICAgICAgIGJncF92cG5fcmRfcHJpbnQobmRvLCBwcHRyKSwKKwkJCSAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgcHB0cis4KQorCQkJICAgICAgICk7CisJICAgIFVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJpbmdsZW4pOwogCSAgICBwcHRyKz0xMjsKIAkgICAgdGxlbi09MTI7CiAJICAgIHJldHVybiBwbGVuOwpAQCAtOTk0LDEyICsxMDM2LDEyIEBACiAKIAkgICAgTkRfVENIRUNLMihwcHRyWzBdLDE1KTsKIAkgICAgYnVmWzBdPSdcMCc7Ci0JICAgIHN0cmxlbj1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJEOiAlcywgQ0UtSUQ6ICV1LCBMYWJlbC1CbG9jayBPZmZzZXQ6ICV1LCBMYWJlbCBCYXNlICV1IiwKLQkJCSAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgcHB0ciksCi0JCQkgICAgRVhUUkFDVF8xNkJJVFMocHB0cis4KSwKLQkJCSAgICBFWFRSQUNUXzE2QklUUyhwcHRyKzEwKSwKLQkJCSAgICBFWFRSQUNUXzI0QklUUyhwcHRyKzEyKT4+NCk7IC8qIHRoZSBsYWJlbCBpcyBvZmZzZXR0ZWQgYnkgNCBiaXRzIHNvIGxldHMgc2hpZnQgaXQgcmlnaHQgKi8KLQkgICAgVVBEQVRFX0JVRl9CVUZMRU4oYnVmLCBidWZsZW4sIHN0cmxlbik7CisJICAgIHN0cmluZ2xlbj1zbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJEOiAlcywgQ0UtSUQ6ICV1LCBMYWJlbC1CbG9jayBPZmZzZXQ6ICV1LCBMYWJlbCBCYXNlICV1IiwKKwkJCSAgICAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgcHB0ciksCisJCQkgICAgICAgRVhUUkFDVF8xNkJJVFMocHB0cis4KSwKKwkJCSAgICAgICBFWFRSQUNUXzE2QklUUyhwcHRyKzEwKSwKKwkJCSAgICAgICBFWFRSQUNUXzI0QklUUyhwcHRyKzEyKT4+NCk7IC8qIHRoZSBsYWJlbCBpcyBvZmZzZXR0ZWQgYnkgNCBiaXRzIHNvIGxldHMgc2hpZnQgaXQgcmlnaHQgKi8KKwkgICAgVVBEQVRFX0JVRl9CVUZMRU4oYnVmLCBidWZsZW4sIHN0cmluZ2xlbik7CiAJICAgIHBwdHIrPTE1OwogCSAgICB0bGVuLT0xNTsKIApAQCAtMTAxNiwyNyArMTA1OCwyNyBAQAogCQlzd2l0Y2godGx2X3R5cGUpIHsKIAkJY2FzZSAxOgogCQkgICAgaWYgKGJ1ZmxlbiE9MCkgewotCQkJc3RybGVuPXNucHJpbnRmKGJ1ZixidWZsZW4sICJcblx0XHRjaXJjdWl0IHN0YXR1cyB2ZWN0b3IgKCV1KSBsZW5ndGg6ICV1OiAweCIsCi0JCQkJCXRsdl90eXBlLAotCQkJCQl0bHZfbGVuKTsKLQkJCVVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJsZW4pOworCQkJc3RyaW5nbGVuPXNucHJpbnRmKGJ1ZixidWZsZW4sICJcblx0XHRjaXJjdWl0IHN0YXR1cyB2ZWN0b3IgKCV1KSBsZW5ndGg6ICV1OiAweCIsCisJCQkJCSAgIHRsdl90eXBlLAorCQkJCQkgICB0bHZfbGVuKTsKKwkJCVVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJpbmdsZW4pOwogCQkgICAgfQogCQkgICAgdHRsdl9sZW49dHRsdl9sZW4vOCsxOyAvKiBob3cgbWFueSBieXRlcyBkbyB3ZSBuZWVkIHRvIHJlYWQgPyAqLwogCQkgICAgd2hpbGUgKHR0bHZfbGVuPjApIHsKIAkJCU5EX1RDSEVDSyhwcHRyWzBdKTsKIAkJCWlmIChidWZsZW4hPTApIHsKLQkJCSAgICBzdHJsZW49c25wcmludGYoYnVmLGJ1ZmxlbiwgIiUwMngiLCpwcHRyKyspOwotCQkJICAgIFVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJsZW4pOworCQkJICAgIHN0cmluZ2xlbj1zbnByaW50ZihidWYsYnVmbGVuLCAiJTAyeCIsKnBwdHIrKyk7CisJCQkgICAgVVBEQVRFX0JVRl9CVUZMRU4oYnVmLCBidWZsZW4sIHN0cmluZ2xlbik7CiAJCQl9CiAJCQl0dGx2X2xlbi0tOwogCQkgICAgfQogCQkgICAgYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCSAgICBpZiAoYnVmbGVuIT0wKSB7Ci0JCQlzdHJsZW49c25wcmludGYoYnVmLGJ1ZmxlbiwgIlxuXHRcdHVua25vd24gVExWICMldSwgbGVuZ3RoOiAldSIsCi0JCQkJCXRsdl90eXBlLAotCQkJCQl0bHZfbGVuKTsKLQkJCVVQREFURV9CVUZfQlVGTEVOKGJ1ZiwgYnVmbGVuLCBzdHJsZW4pOworCQkJc3RyaW5nbGVuPXNucHJpbnRmKGJ1ZixidWZsZW4sICJcblx0XHR1bmtub3duIFRMViAjJXUsIGxlbmd0aDogJXUiLAorCQkJCQkgICB0bHZfdHlwZSwKKwkJCQkJICAgdGx2X2xlbik7CisJCQlVUERBVEVfQlVGX0JVRkxFTihidWYsIGJ1Zmxlbiwgc3RyaW5nbGVuKTsKIAkJICAgIH0KIAkJICAgIGJyZWFrOwogCQl9CkBAIC0xMDU0LDcgKzEwOTYsNiBAQAogICAgICAgICByZXR1cm4gLTI7CiB9CiAKLSNpZmRlZiBJTkVUNgogaW50CiBkZWNvZGVfcHJlZml4NihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcGQsIHVfaW50IGl0ZW1sZW4sIGNoYXIgKmJ1ZiwgdV9pbnQgYnVmbGVuKQpAQCAtMTA3OCw3ICsxMTE5LDcgQEAKIAkJYWRkci5zNl9hZGRyW3BsZW5ieXRlcyAtIDFdICY9CiAJCQkoKDB4ZmYwMCA+PiAocGxlbiAlIDgpKSAmIDB4ZmYpOwogCX0KLQlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzLyVkIiwgZ2V0bmFtZTYobmRvLCAodV9jaGFyICopJmFkZHIpLCBwbGVuKTsKKwlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzLyVkIiwgaXA2YWRkcl9zdHJpbmcobmRvLCAmYWRkciksIHBsZW4pOwogCXJldHVybiAxICsgcGxlbmJ5dGVzOwogCiB0cnVuYzoKQEAgLTExMTksNyArMTE2MCw3IEBACiAJfQogICAgICAgICAvKiB0aGUgbGFiZWwgbWF5IGdldCBvZmZzZXR0ZWQgYnkgNCBiaXRzIHNvIGxldHMgc2hpZnQgaXQgcmlnaHQgKi8KIAlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIiVzLyVkLCBsYWJlbDoldSAlcyIsCi0gICAgICAgICAgICAgICAgIGdldG5hbWU2KG5kbywgKHVfY2hhciAqKSZhZGRyKSwKKyAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmYWRkciksCiAgICAgICAgICAgICAgICAgIHBsZW4sCiAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMjRCSVRTKHBwdHIrMSk+PjQsCiAgICAgICAgICAgICAgICAgICgocHB0clszXSYxKT09MCkgPyAiKEJPR1VTOiBCb3R0b20gb2YgU3RhY2sgTk9UIHNldCEpIiA6ICIoYm90dG9tKSIgKTsKQEAgLTExNjEsNyArMTIwMiw3IEBACiAgICAgICAgIC8qIHRoZSBsYWJlbCBtYXkgZ2V0IG9mZnNldHRlZCBieSA0IGJpdHMgc28gbGV0cyBzaGlmdCBpdCByaWdodCAqLwogCXNucHJpbnRmKGJ1ZiwgYnVmbGVuLCAiUkQ6ICVzLCAlcy8lZCwgbGFiZWw6JXUgJXMiLAogICAgICAgICAgICAgICAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgcHB0cis0KSwKLSAgICAgICAgICAgICAgICAgZ2V0bmFtZTYobmRvLCAodV9jaGFyICopJmFkZHIpLAorICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sICZhZGRyKSwKICAgICAgICAgICAgICAgICAgcGxlbiwKICAgICAgICAgICAgICAgICAgRVhUUkFDVF8yNEJJVFMocHB0cisxKT4+NCwKICAgICAgICAgICAgICAgICAgKChwcHRyWzNdJjEpPT0wKSA/ICIoQk9HVVM6IEJvdHRvbSBvZiBTdGFjayBOT1Qgc2V0ISkiIDogIihib3R0b20pIiApOwpAQCAtMTE3MSw3ICsxMjEyLDYgQEAKIHRydW5jOgogCXJldHVybiAtMjsKIH0KLSNlbmRpZgogCiBzdGF0aWMgaW50CiBkZWNvZGVfY2xucF9wcmVmaXgobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCkBAIC0xMTk0LDcgKzEyMzQsNyBAQAogCQkJKCgweGZmMDAgPj4gKHBsZW4gJSA4KSkgJiAweGZmKTsKIAl9CiAJc25wcmludGYoYnVmLCBidWZsZW4sICIlcy8lZCIsCi0gICAgICAgICAgICAgICAgIGlzb25zYXBfc3RyaW5nKGFkZHIsKHBsZW4gKyA3KSAvIDgpLAorICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIGFkZHIsKHBsZW4gKyA3KSAvIDgpLAogICAgICAgICAgICAgICAgICBwbGVuKTsKIAogCXJldHVybiAxICsgKHBsZW4gKyA3KSAvIDg7CkBAIC0xMjMxLDcgKzEyNzEsNyBAQAogICAgICAgICAvKiB0aGUgbGFiZWwgbWF5IGdldCBvZmZzZXR0ZWQgYnkgNCBiaXRzIHNvIGxldHMgc2hpZnQgaXQgcmlnaHQgKi8KIAlzbnByaW50ZihidWYsIGJ1ZmxlbiwgIlJEOiAlcywgJXMvJWQsIGxhYmVsOiV1ICVzIiwKICAgICAgICAgICAgICAgICAgYmdwX3Zwbl9yZF9wcmludChuZG8sIHBwdHIrNCksCi0gICAgICAgICAgICAgICAgIGlzb25zYXBfc3RyaW5nKGFkZHIsKHBsZW4gKyA3KSAvIDgpLAorICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIGFkZHIsKHBsZW4gKyA3KSAvIDgpLAogICAgICAgICAgICAgICAgICBwbGVuLAogICAgICAgICAgICAgICAgICBFWFRSQUNUXzI0QklUUyhwcHRyKzEpPj40LAogICAgICAgICAgICAgICAgICAoKHBwdHJbM10mMSk9PTApID8gIihCT0dVUzogQm90dG9tIG9mIFN0YWNrIE5PVCBzZXQhKSIgOiAiKGJvdHRvbSkiICk7CkBAIC0xMzE1LDcgKzEzNTUsNiBAQAogCXVfaW50IHRsZW47CiAJY29uc3QgdV9jaGFyICp0cHRyOwogCWNoYXIgYnVmW01BWEhPU1ROQU1FTEVOICsgMTAwXTsKLQljaGFyIHRva2J1ZltUT0tCVUZTSVpFXTsKICAgICAgICAgaW50ICBhc19zaXplOwogCiAgICAgICAgIHRwdHIgPSBwcHRyOwpAQCAtMTMyNywxNCArMTM2NiwxMiBAQAogCQkJTkRfUFJJTlQoKG5kbywgImludmFsaWQgbGVuIikpOwogCQllbHNlIHsKIAkJCU5EX1RDSEVDSygqdHB0cik7Ci0JCQlORF9QUklOVCgobmRvLCAiJXMiLCB0b2syc3RyYnVmKGJncF9vcmlnaW5fdmFsdWVzLAorCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihiZ3Bfb3JpZ2luX3ZhbHVlcywKIAkJCQkJCSJVbmtub3duIE9yaWdpbiBUeXBlY29kZSIsCi0JCQkJCQl0cHRyWzBdLAotCQkJCQkJdG9rYnVmLCBzaXplb2YodG9rYnVmKSkpKTsKKwkJCQkJCXRwdHJbMF0pKSk7CiAJCX0KIAkJYnJlYWs7CiAKLQogICAgICAgICAvKgogICAgICAgICAgKiBQcm9jZXNzIEFTNCBieXRlIHBhdGggYW5kIEFTMiBieXRlIHBhdGggYXR0cmlidXRlcyBoZXJlLgogICAgICAgICAgKi8KQEAgLTEzNjEsOSArMTM5OCw4IEBACiAKIAkJd2hpbGUgKHRwdHIgPCBwcHRyICsgbGVuKSB7CiAJCQlORF9UQ0hFQ0sodHB0clswXSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLCB0b2syc3RyYnVmKGJncF9hc19wYXRoX3NlZ21lbnRfb3Blbl92YWx1ZXMsCi0JCQkJCQkiPyIsIHRwdHJbMF0sCi0JCQkJCQl0b2tidWYsIHNpemVvZih0b2tidWYpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihiZ3BfYXNfcGF0aF9zZWdtZW50X29wZW5fdmFsdWVzLAorCQkJCQkJIj8iLCB0cHRyWzBdKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHRwdHJbMV0gKiBhc19zaXplOyBpICs9IGFzX3NpemUpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMiArIGldLCBhc19zaXplKTsKIAkJCSAgICBORF9QUklOVCgobmRvLCAiJXMgIiwKQEAgLTEzNzMsOSArMTQwOSw4IEBACiAJCQkJRVhUUkFDVF8zMkJJVFMoJnRwdHJbMiArIGldKSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KIAkJCU5EX1RDSEVDSyh0cHRyWzBdKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRvazJzdHJidWYoYmdwX2FzX3BhdGhfc2VnbWVudF9jbG9zZV92YWx1ZXMsCi0JCQkJCQkiPyIsIHRwdHJbMF0sCi0JCQkJCQl0b2tidWYsIHNpemVvZih0b2tidWYpKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihiZ3BfYXNfcGF0aF9zZWdtZW50X2Nsb3NlX3ZhbHVlcywKKwkJCQkJCSI/IiwgdHB0clswXSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSyh0cHRyWzFdKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gMiArIHRwdHJbMV0gKiBhc19zaXplOwogCQl9CkBAIC0xMzg1LDcgKzE0MjAsNyBAQAogCQkJTkRfUFJJTlQoKG5kbywgImludmFsaWQgbGVuIikpOwogCQllbHNlIHsKIAkJCU5EX1RDSEVDSzIodHB0clswXSwgNCk7Ci0JCQlORF9QUklOVCgobmRvLCAiJXMiLCBnZXRuYW1lKG5kbywgdHB0cikpKTsKKwkJCU5EX1BSSU5UKChuZG8sICIlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCB0cHRyKSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgQkdQVFlQRV9NVUxUSV9FWElUX0RJU0M6CkBAIC0xNDE1LDExICsxNDUwLDExIEBACiAgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSA2KSB7CiAJCSAgICBORF9QUklOVCgobmRvLCAiIEFTICMlcywgb3JpZ2luICVzIiwKIAkJCWFzX3ByaW50ZihuZG8sIGFzdG9zdHIsIHNpemVvZihhc3Rvc3RyKSwgRVhUUkFDVF8xNkJJVFModHB0cikpLAotCQkJZ2V0bmFtZShuZG8sIHRwdHIgKyAyKSkpOworCQkJaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIgKyAyKSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAJCSAgICBORF9QUklOVCgobmRvLCAiIEFTICMlcywgb3JpZ2luICVzIiwKIAkJCWFzX3ByaW50ZihuZG8sIGFzdG9zdHIsIHNpemVvZihhc3Rvc3RyKSwKLQkJCUVYVFJBQ1RfMzJCSVRTKHRwdHIpKSwgZ2V0bmFtZShuZG8sIHRwdHIgKyA0KSkpOworCQkJRVhUUkFDVF8zMkJJVFModHB0cikpLCBpcGFkZHJfc3RyaW5nKG5kbywgdHB0ciArIDQpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCWNhc2UgQkdQVFlQRV9BR0dSRUdBVE9SNDoKQEAgLTE0MzAsNyArMTQ2NSw3IEBACiAJCU5EX1RDSEVDSzIodHB0clswXSwgOCk7CiAJCU5EX1BSSU5UKChuZG8sICIgQVMgIyVzLCBvcmlnaW4gJXMiLAogCSAgIAkgICAgYXNfcHJpbnRmKG5kbywgYXN0b3N0ciwgc2l6ZW9mKGFzdG9zdHIpLCBFWFRSQUNUXzMyQklUUyh0cHRyKSksCi0JCSAgICBnZXRuYW1lKG5kbywgdHB0ciArIDQpKSk7CisJCSAgICBpcGFkZHJfc3RyaW5nKG5kbywgdHB0ciArIDQpKSk7CiAJCWJyZWFrOwogCWNhc2UgQkdQVFlQRV9DT01NVU5JVElFUzoKIAkJaWYgKGxlbiAlIDQpIHsKQEAgLTE0NjgsNyArMTUwMyw3IEBACiAJCQlicmVhazsKIAkJfQogCQlORF9UQ0hFQ0syKHRwdHJbMF0sIDQpOwotICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyIsZ2V0bmFtZShuZG8sIHRwdHIpKSk7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIixpcGFkZHJfc3RyaW5nKG5kbywgdHB0cikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCR1BUWVBFX0NMVVNURVJfTElTVDoKIAkJaWYgKGxlbiAlIDQpIHsKQEAgLTE0NzgsNyArMTUxMyw3IEBACiAgICAgICAgICAgICAgICAgd2hpbGUgKHRsZW4+MCkgewogCQkJTkRfVENIRUNLMih0cHRyWzBdLCA0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRuYW1lKG5kbywgdHB0ciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAodGxlbj40KSA/ICIsICIgOiAiIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgdGxlbiAtPTQ7CiAgICAgICAgICAgICAgICAgICAgICAgICB0cHRyICs9NDsKQEAgLTE0OTAsMTIgKzE1MjUsMTAgQEAKIAkJc2FmaSA9IHRwdHJbMl07CiAKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBBRkk6ICVzICgldSksICVzU0FGSTogJXMgKCV1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHJidWYoYWZfdmFsdWVzLCAiVW5rbm93biBBRkkiLCBhZiwKLQkJCQkgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGFmX3ZhbHVlcywgIlVua25vd24gQUZJIiwgYWYpLAogICAgICAgICAgICAgICAgICAgICAgICBhZiwKICAgICAgICAgICAgICAgICAgICAgICAgKHNhZmk+MTI4KSA/ICJ2ZW5kb3Igc3BlY2lmaWMgIiA6ICIiLCAvKiAxMjggaXMgbWVhbndoaWxlIHdlbGxrbm93biAqLwotICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyYnVmKGJncF9zYWZpX3ZhbHVlcywgIlVua25vd24gU0FGSSIsIHNhZmksCi0JCQkJICB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZ3Bfc2FmaV92YWx1ZXMsICJVbmtub3duIFNBRkkiLCBzYWZpKSwKICAgICAgICAgICAgICAgICAgICAgICAgc2FmaSkpOwogCiAgICAgICAgICAgICAgICAgc3dpdGNoKGFmPDw4IHwgc2FmaSkgewpAQCAtMTUwOSw3ICsxNTQyLDYgQEAKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9JTkVUPDw4IHwgU0FGTlVNX1ZQTlVOSU1VTFRJQ0FTVCk6CiAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDw8OCB8IFNBRk5VTV9NVUxUSUNBU1RfVlBOKToKIAkJY2FzZSAoQUZOVU1fSU5FVDw8OCB8IFNBRk5VTV9NRFQpOgotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fVU5JQ0FTVCk6CiAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fTVVMVElDQVNUKToKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9JTkVUNjw8OCB8IFNBRk5VTV9VTklNVUxUSUNBU1QpOgpAQCAtMTUxNyw3ICsxNTQ5LDYgQEAKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9JTkVUNjw8OCB8IFNBRk5VTV9WUE5VTklDQVNUKToKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9JTkVUNjw8OCB8IFNBRk5VTV9WUE5NVUxUSUNBU1QpOgogICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0lORVQ2PDw4IHwgU0FGTlVNX1ZQTlVOSU1VTFRJQ0FTVCk6Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9OU0FQPDw4IHwgU0FGTlVNX1VOSUNBU1QpOgogICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX05TQVA8PDggfCBTQUZOVU1fTVVMVElDQVNUKToKICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9OU0FQPDw4IHwgU0FGTlVNX1VOSU1VTFRJQ0FTVCk6CkBAIC0xNTY1LDcgKzE1OTYsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLGdldG5hbWUobmRvLCB0cHRyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLGlwYWRkcl9zdHJpbmcobmRvLCB0cHRyKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuIC09IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNTgwLDEyICsxNjExLDExIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIodHB0clswXSwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKStCR1BfVlBOX1JEX0xFTik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJSRDogJXMsICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncF92cG5fcmRfcHJpbnQobmRvLCB0cHRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldG5hbWUobmRvLCB0cHRyK0JHUF9WUE5fUkRfTEVOKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIrQkdQX1ZQTl9SRF9MRU4pKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsZW4gLT0gKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikrQkdQX1ZQTl9SRF9MRU4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cHRyICs9IChzaXplb2Yoc3RydWN0IGluX2FkZHIpK0JHUF9WUE5fUkRfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0lORVQ2PDw4IHwgU0FGTlVNX1VOSUNBU1QpOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fTVVMVElDQVNUKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0lORVQ2PDw4IHwgU0FGTlVNX1VOSU1VTFRJQ0FTVCk6CkBAIC0xNTk1LDcgKzE2MjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgZ2V0bmFtZTYobmRvLCB0cHRyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sIHRwdHIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTYxMCwxMiArMTY0MCwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpK0JHUF9WUE5fUkRfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlJEOiAlcywgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdwX3Zwbl9yZF9wcmludChuZG8sIHRwdHIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0bmFtZTYobmRvLCB0cHRyK0JHUF9WUE5fUkRfTEVOKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCB0cHRyK0JHUF9WUE5fUkRfTEVOKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuIC09IChzaXplb2Yoc3RydWN0IGluNl9hZGRyKStCR1BfVlBOX1JEX0xFTik7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gKHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpK0JHUF9WUE5fUkRfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX1ZQTFM8PDggfCBTQUZOVU1fVlBMUyk6CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9MMlZQTjw8OCB8IFNBRk5VTV9WUE5VTklDQVNUKToKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0wyVlBOPDw4IHwgU0FGTlVNX1ZQTk1VTFRJQ0FTVCk6CkBAIC0xNjI1LDcgKzE2NTQsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLCBnZXRuYW1lKG5kbywgdHB0cikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsZW4gLT0gKHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cHRyICs9IChzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNjM0LDcgKzE2NjMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fTlNBUDw8OCB8IFNBRk5VTV9NVUxUSUNBU1QpOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fTlNBUDw8OCB8IFNBRk5VTV9VTklNVUxUSUNBU1QpOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIodHB0clswXSwgdGxlbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXNvbnNhcF9zdHJpbmcodHB0ciwgdGxlbikpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLCBpc29uc2FwX3N0cmluZyhuZG8sIHRwdHIsIHRsZW4pKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHB0ciArPSB0bGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsZW4gPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTY0OSwxNSArMTY3OCwxMyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIHRsZW4pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiUkQ6ICVzLCAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgdHB0ciksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyh0cHRyK0JHUF9WUE5fUkRfTEVOLHRsZW4tQkdQX1ZQTl9SRF9MRU4pKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIHRwdHIrQkdQX1ZQTl9SRF9MRU4sdGxlbi1CR1BfVlBOX1JEX0xFTikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogcmZjOTg2IG1hcHBlZCBJUHY0IGFkZHJlc3MgPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRVhUUkFDVF8zMkJJVFModHB0citCR1BfVlBOX1JEX0xFTikgPT0gIDB4NDcwMDA2MDEpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiID0gJXMiLCBnZXRuYW1lKG5kbywgdHB0citCR1BfVlBOX1JEX0xFTis0KSkpOwotI2lmZGVmIElORVQ2CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiID0gJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgdHB0citCR1BfVlBOX1JEX0xFTis0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiByZmMxODg4IG1hcHBlZCBJUHY2IGFkZHJlc3MgPyAqLwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChFWFRSQUNUXzI0QklUUyh0cHRyK0JHUF9WUE5fUkRfTEVOKSA9PSAgMHgzNTAwMDApCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiID0gJXMiLCBnZXRuYW1lNihuZG8sIHRwdHIrQkdQX1ZQTl9SRF9MRU4rMykpKTsKLSNlbmRpZgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiA9ICVzIiwgaXA2YWRkcl9zdHJpbmcobmRvLCB0cHRyK0JHUF9WUE5fUkRfTEVOKzMpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gdGxlbjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxlbiA9IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMTc1OCw3ICsxNzg1LDYgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgICVzIiwgYnVmKSk7CiAJCSAgICAgICBicmVhazsKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9JTkVUNjw8OCB8IFNBRk5VTV9VTklDQVNUKToKICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fTVVMVElDQVNUKToKICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fVU5JTVVMVElDQVNUKToKQEAgLTE3OTQsNyArMTgyMCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcyIsIGJ1ZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fVlBMUzw8OCB8IFNBRk5VTV9WUExTKToKICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fTDJWUE48PDggfCBTQUZOVU1fVlBOVU5JQ0FTVCk6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0wyVlBOPDw4IHwgU0FGTlVNX1ZQTk1VTFRJQ0FTVCk6CkBAIC0xODUxLDEyICsxODc2LDEwIEBACiAJCXNhZmkgPSB0cHRyWzJdOwogCiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgQUZJOiAlcyAoJXUpLCAlc1NBRkk6ICVzICgldSkiLAotICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyYnVmKGFmX3ZhbHVlcywgIlVua25vd24gQUZJIiwgYWYsCi0JCQkJICB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihhZl92YWx1ZXMsICJVbmtub3duIEFGSSIsIGFmKSwKICAgICAgICAgICAgICAgICAgICAgICAgYWYsCiAgICAgICAgICAgICAgICAgICAgICAgIChzYWZpPjEyOCkgPyAidmVuZG9yIHNwZWNpZmljICIgOiAiIiwgLyogMTI4IGlzIG1lYW53aGlsZSB3ZWxsa25vd24gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihiZ3Bfc2FmaV92YWx1ZXMsICJVbmtub3duIFNBRkkiLCBzYWZpLAotCQkJCSAgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoYmdwX3NhZmlfdmFsdWVzLCAiVW5rbm93biBTQUZJIiwgc2FmaSksCiAgICAgICAgICAgICAgICAgICAgICAgIHNhZmkpKTsKIAogICAgICAgICAgICAgICAgIGlmIChsZW4gPT0gQkdQX01QX05MUklfTUlOU0laRSkKQEAgLTE5MDEsNyArMTkyNCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcyIsIGJ1ZikpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKICAgICAgICAgICAgICAgICAgICAgY2FzZSAoQUZOVU1fSU5FVDY8PDggfCBTQUZOVU1fVU5JQ0FTVCk6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0lORVQ2PDw4IHwgU0FGTlVNX01VTFRJQ0FTVCk6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0lORVQ2PDw4IHwgU0FGTlVNX1VOSU1VTFRJQ0FTVCk6CkBAIC0xOTM3LDcgKzE5NTksNiBAQAogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMiLCBidWYpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX1ZQTFM8PDggfCBTQUZOVU1fVlBMUyk6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgKEFGTlVNX0wyVlBOPDw4IHwgU0FGTlVNX1ZQTlVOSUNBU1QpOgogICAgICAgICAgICAgICAgICAgICBjYXNlIChBRk5VTV9MMlZQTjw8OCB8IFNBRk5VTV9WUE5NVUxUSUNBU1QpOgpAQCAtMjAxNyw5ICsyMDM4LDkgQEAKICAgICAgICAgICAgICAgICAgICAgZXh0ZF9jb21tPUVYVFJBQ1RfMTZCSVRTKHRwdHIpOwogCiAJCSAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAlcyAoMHglMDR4KSwgRmxhZ3MgWyVzXSIsCi0JCQkgICB0b2syc3RyYnVmKGJncF9leHRkX2NvbW1fc3VidHlwZV92YWx1ZXMsCisJCQkgICB0b2syc3RyKGJncF9leHRkX2NvbW1fc3VidHlwZV92YWx1ZXMsCiAJCQkJICAgICAgInVua25vd24gZXh0ZCBjb21tdW5pdHkgdHlwZWNvZGUiLAotCQkJCSAgICAgIGV4dGRfY29tbSwgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisJCQkJICAgICAgZXh0ZF9jb21tKSwKIAkJCSAgIGV4dGRfY29tbSwKIAkJCSAgIGJpdHRvazJzdHIoYmdwX2V4dGRfY29tbV9mbGFnX3ZhbHVlcywgIm5vbmUiLCBleHRkX2NvbW0pKSk7CiAKQEAgLTIwMzEsMTQgKzIwNTIsMTQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICI6ICV1OiV1ICg9ICVzKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFModHB0cisyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyh0cHRyKzQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdldG5hbWUobmRvLCB0cHRyKzQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIrNCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEJHUF9FWFRfQ09NX1JUXzE6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkdQX0VYVF9DT01fUk9fMToKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCR1BfRVhUX0NPTV9MMlZQTl9SVF8xOgogICAgICAgICAgICAgICAgICAgICBjYXNlIEJHUF9FWFRfQ09NX1ZSRl9SVF9JTVA6CiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiOiAlczoldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0bmFtZShuZG8sIHRwdHIrMiksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIrMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFModHB0cis2KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkdQX0VYVF9DT01fUlRfMjoKQEAgLTIwNTgsMjUgKzIwNzksMjMgQEAKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCR1BfRVhUX0NPTV9WUE5fT1JJR0lONDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCR1BfRVhUX0NPTV9PU1BGX1JJRDoKICAgICAgICAgICAgICAgICAgICAgY2FzZSBCR1BfRVhUX0NPTV9PU1BGX1JJRDI6Ci0gICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMiLCBnZXRuYW1lKG5kbywgdHB0cisyKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIrMikpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICBjYXNlIEJHUF9FWFRfQ09NX09TUEZfUlRZUEU6CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkdQX0VYVF9DT01fT1NQRl9SVFlQRTI6CiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiOiBhcmVhOiVzLCByb3V0ZXItdHlwZTolcywgbWV0cmljLXR5cGU6JXMlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0bmFtZShuZG8sIHRwdHIrMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihiZ3BfZXh0ZF9jb21tX29zcGZfcnR5cGVfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCB0cHRyKzIpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoYmdwX2V4dGRfY29tbV9vc3BmX3J0eXBlX3ZhbHVlcywKIAkJCQkJICAidW5rbm93biAoMHglMDJ4KSIsCi0JCQkJCSAgKih0cHRyKzYpLAotCQkJCQkgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorCQkJCQkgICoodHB0cis2KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodHB0cis3KSAmICBCR1BfT1NQRl9SVFlQRV9NRVRSSUNfVFlQRSkgPyAiRTIiIDogIiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCgqKHRwdHIrNikgPT0gQkdQX09TUEZfUlRZUEVfRVhUKSB8fCAoKih0cHRyKzYpID09IEJHUF9PU1BGX1JUWVBFX05TU0EpKSA/ICJFMSIgOiAiIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQkdQX0VYVF9DT01fTDJJTkZPOgogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogJXMgQ29udHJvbCBGbGFncyBbMHglMDJ4XTpNVFUgJXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHJidWYobDJ2cG5fZW5jYXBzX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGwydnBuX2VuY2Fwc192YWx1ZXMsCiAJCQkJCSAgInVua25vd24gZW5jYXBzIiwKLQkJCQkJICAqKHRwdHIrMiksCi0JCQkJCSAgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisJCQkJCSAgKih0cHRyKzIpKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoodHB0ciszKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyh0cHRyKzQpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTIxNTEsNiArMjE3MCw0OCBAQAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorCWNhc2UgQkdQVFlQRV9BSUdQOgorCXsKKwkJdWludDhfdCB0eXBlOworCQl1aW50MTZfdCBsZW5ndGg7CisKKwkJTkRfVENIRUNLMih0cHRyWzBdLCAzKTsKKworCQl0bGVuID0gbGVuOworCisJCXdoaWxlICh0bGVuID49IDMpIHsKKworCQkgICAgdHlwZSA9ICp0cHRyOworCQkgICAgbGVuZ3RoID0gRVhUUkFDVF8xNkJJVFModHB0cisxKTsKKworCQkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgJXMgVExWICgldSksIGxlbmd0aCAldSIsCisJCQkgICAgICB0b2syc3RyKGJncF9haWdwX3ZhbHVlcywgIlVua25vd24iLCB0eXBlKSwKKwkJCSAgICAgIHR5cGUsIGxlbmd0aCkpOworCisJCSAgICAvKgorCQkgICAgICogQ2hlY2sgaWYgd2UgY2FuIHJlYWQgdGhlIFRMViBkYXRhLgorCQkgICAgICovCisJCSAgICBORF9UQ0hFQ0syKHRwdHJbM10sIGxlbmd0aCAtIDMpOworCisJCSAgICBzd2l0Y2ggKHR5cGUpIHsKKworCQkgICAgY2FzZSBCR1BfQUlHUF9UTFY6CisJCSAgICAgICAgTkRfVENIRUNLMih0cHRyWzNdLCA4KTsKKwkJCU5EX1BSSU5UKChuZG8sICIsIG1ldHJpYyAlIiBQUkl1NjQsCisJCQkJICBFWFRSQUNUXzY0QklUUyh0cHRyKzMpKSk7CisJCQlicmVhazsKKworCQkgICAgZGVmYXVsdDoKKwkJCWlmIChuZG8tPm5kb192ZmxhZyA8PSAxKSB7CisJCQkgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0ciszLCJcblx0ICAgICAgIiwgbGVuZ3RoLTMpOworCQkJfQorCQkgICAgfQorCisJCSAgICB0cHRyICs9IGxlbmd0aDsKKwkJICAgIHRsZW4gLT0gbGVuZ3RoOworCQl9CisJCWJyZWFrOworCX0KICAgICAgICAgY2FzZSBCR1BUWVBFX0FUVFJfU0VUOgogICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIodHB0clswXSwgNCk7CiAgICAgICAgICAgICAgICAgaWYgKGxlbiA8IDQpCkBAIC0yMTYxLDcgKzIyMjIsNyBAQAogICAgICAgICAgICAgICAgIGxlbiAtPTQ7CiAKICAgICAgICAgICAgICAgICB3aGlsZSAobGVuKSB7Ci0gICAgICAgICAgICAgICAgICAgIHVfaW50IGFmbGFncywgYXR5cGUsIGFsZW5sZW4sIGFsZW47CisgICAgICAgICAgICAgICAgICAgIHVfaW50IGFmbGFncywgYWxlbmxlbiwgYWxlbjsKIAogICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHRwdHJbMF0sIDIpOwogICAgICAgICAgICAgICAgICAgICBpZiAobGVuIDwgMikKQEAgLTIxNzksOSArMjI0MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIGxlbiAtPSBhbGVubGVuOwogCiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMgKCV1KSwgbGVuZ3RoOiAldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyYnVmKGJncF9hdHRyX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24gQXR0cmlidXRlIiwgYXR5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZ3BfYXR0cl92YWx1ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIEF0dHJpYnV0ZSIsIGF0eXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgYWxlbikpOwogCkBAIC0yMjAzLDcgKzIyNjMsMjMgQEAKIAkJfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCi0KKwljYXNlIEJHUFRZUEVfTEFSR0VfQ09NTVVOSVRZOgorCQlpZiAobGVuID09IDAgfHwgbGVuICUgMTIpIHsKKwkJCU5EX1BSSU5UKChuZG8sICJpbnZhbGlkIGxlbiIpKTsKKwkJCWJyZWFrOworCQl9CisJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgICIpKTsKKwkJd2hpbGUgKGxlbiA+IDApIHsKKwkJCU5EX1RDSEVDSzIoKnRwdHIsIDEyKTsKKwkJCU5EX1BSSU5UKChuZG8sICIldToldToldSVzIiwKKwkJCQkgRVhUUkFDVF8zMkJJVFModHB0ciksCisJCQkJIEVYVFJBQ1RfMzJCSVRTKHRwdHIgKyA0KSwKKwkJCQkgRVhUUkFDVF8zMkJJVFModHB0ciArIDgpLAorCQkJCSAobGVuID4gMTIpID8gIiwgIiA6ICIiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0cHRyICs9IDEyOworICAgICAgICAgICAgICAgICAgICAgICAgbGVuIC09IDEyOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJICAgIE5EX1RDSEVDSzIoKnBwdHIsbGVuKTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIG5vIEF0dHJpYnV0ZSAldSBkZWNvZGVyIiwgYXR5cGUpKTsgLyogd2UgaGF2ZSBubyBkZWNvZGVyIGZvciB0aGUgYXR0cmlidXRlICovCkBAIC0yMjI1LDggKzIzMDEsNiBAQAogYmdwX2NhcGFiaWxpdGllc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpvcHQsIGludCBjYXBzX2xlbikKIHsKLQljaGFyIHRva2J1ZltUT0tCVUZTSVpFXTsKLQljaGFyIHRva2J1ZjJbVE9LQlVGU0laRV07CiAJaW50IGNhcF90eXBlLCBjYXBfbGVuLCB0Y2FwX2xlbiwgY2FwX29mZnNldDsKICAgICAgICAgaW50IGkgPSAwOwogCkBAIC0yMjM2LDIxICsyMzEwLDE5IEBACiAgICAgICAgICAgICAgICAgY2FwX2xlbj1vcHRbaSsxXTsKICAgICAgICAgICAgICAgICB0Y2FwX2xlbj1jYXBfbGVuOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMgKCV1KSwgbGVuZ3RoOiAldSIsCi0gICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHJidWYoYmdwX2NhcGNvZGVfdmFsdWVzLCAiVW5rbm93biIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwX3R5cGUsIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGJncF9jYXBjb2RlX3ZhbHVlcywgIlVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhcF90eXBlKSwKICAgICAgICAgICAgICAgICAgICAgICAgY2FwX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIGNhcF9sZW4pKTsKICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKG9wdFtpKzJdLCBjYXBfbGVuKTsKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNhcF90eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBCR1BfQ0FQQ09ERV9NUDoKICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdEFGSSAlcyAoJXUpLCBTQUZJICVzICgldSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihhZl92YWx1ZXMsICJVbmtub3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihhZl92YWx1ZXMsICJVbmtub3duIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krMikpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krMiksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyYnVmKGJncF9zYWZpX3ZhbHVlcywgIlVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRbaSs1XSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGJncF9zYWZpX3ZhbHVlcywgIlVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRbaSs1XSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRbaSs1XSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIEJHUF9DQVBDT0RFX1JFU1RBUlQ6CkBAIC0yMjYxLDEzICsyMzMzLDExIEBACiAgICAgICAgICAgICAgICAgICAgIGNhcF9vZmZzZXQ9NDsKICAgICAgICAgICAgICAgICAgICAgd2hpbGUodGNhcF9sZW4+PTQpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQgIEFGSSAlcyAoJXUpLCBTQUZJICVzICgldSksIEZvcndhcmRpbmcgc3RhdGUgcHJlc2VydmVkOiAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihhZl92YWx1ZXMsIlVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krY2FwX29mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGFmX3ZhbHVlcywiVW5rbm93biIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhvcHQraStjYXBfb2Zmc2V0KSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krY2FwX29mZnNldCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihiZ3Bfc2FmaV92YWx1ZXMsIlVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0W2krY2FwX29mZnNldCsyXSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRva2J1ZjIsIHNpemVvZih0b2tidWYyKSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZ3Bfc2FmaV92YWx1ZXMsIlVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0W2krY2FwX29mZnNldCsyXSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0W2krY2FwX29mZnNldCsyXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKG9wdFtpK2NhcF9vZmZzZXQrM10pJjB4ODApID8gInllcyIgOiAibm8iICkpOwogICAgICAgICAgICAgICAgICAgICAgICAgdGNhcF9sZW4tPTQ7CkBAIC0yMjg4LDYgKzIzNTgsMjggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhvcHQgKyBpICsgMikpKSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBCR1BfQ0FQQ09ERV9BRERfUEFUSDoKKyAgICAgICAgICAgICAgICAgICAgY2FwX29mZnNldD0yOworICAgICAgICAgICAgICAgICAgICBpZiAodGNhcF9sZW4gPT0gMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAoYm9ndXMpIikpOyAvKiBsZW5ndGggKi8KKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIHdoaWxlICh0Y2FwX2xlbiA+IDApIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0Y2FwX2xlbiA8IDQpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0KGludmFsaWQpIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdEFGSSAlcyAoJXUpLCBTQUZJICVzICgldSksIFNlbmQvUmVjZWl2ZTogJXMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoYWZfdmFsdWVzLCJVbmtub3duIixFWFRSQUNUXzE2QklUUyhvcHQraStjYXBfb2Zmc2V0KSksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMob3B0K2krY2FwX29mZnNldCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZ3Bfc2FmaV92YWx1ZXMsIlVua25vd24iLG9wdFtpK2NhcF9vZmZzZXQrMl0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdFtpK2NhcF9vZmZzZXQrMl0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihiZ3BfYWRkX3BhdGhfcmVjdnNlbmQsIkJvZ3VzICgweCUwMngpIixvcHRbaStjYXBfb2Zmc2V0KzNdKQorICAgICAgICAgICAgICAgICAgICAgICAgKSk7CisgICAgICAgICAgICAgICAgICAgICAgICB0Y2FwX2xlbi09NDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhcF9vZmZzZXQrPTQ7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdG5vIGRlY29kZXIgZm9yIENhcGFiaWxpdHkgJXUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FwX3R5cGUpKTsKQEAgLTIzMTQsNyArMjQwNiw2IEBACiAJc3RydWN0IGJncF9vcHQgYmdwb3B0OwogCWNvbnN0IHVfY2hhciAqb3B0OwogCWludCBpOwotCWNoYXIgdG9rYnVmW1RPS0JVRlNJWkVdOwogCiAJTkRfVENIRUNLMihkYXRbMF0sIEJHUF9PUEVOX1NJWkUpOwogCW1lbWNweSgmYmdwbywgZGF0LCBCR1BfT1BFTl9TSVpFKTsKQEAgLTIzMjMsNyArMjQxNCw3IEBACiAJTkRfUFJJTlQoKG5kbywgIm15IEFTICVzLCAiLAogCSAgICBhc19wcmludGYobmRvLCBhc3Rvc3RyLCBzaXplb2YoYXN0b3N0ciksIG50b2hzKGJncG8uYmdwb19teWFzKSkpKTsKIAlORF9QUklOVCgobmRvLCAiSG9sZHRpbWUgJXVzLCAiLCBudG9ocyhiZ3BvLmJncG9faG9sZHRpbWUpKSk7Ci0JTkRfUFJJTlQoKG5kbywgIklEICVzIiwgZ2V0bmFtZShuZG8sICh1X2NoYXIgKikmYmdwby5iZ3BvX2lkKSkpOworCU5EX1BSSU5UKChuZG8sICJJRCAlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCAmYmdwby5iZ3BvX2lkKSkpOwogCU5EX1BSSU5UKChuZG8sICJcblx0ICBPcHRpb25hbCBwYXJhbWV0ZXJzLCBsZW5ndGg6ICV1IiwgYmdwby5iZ3BvX29wdGxlbikpOwogCiAgICAgICAgIC8qIHNvbWUgbGl0dGxlIHNhbml0eSBjaGVja2luZyAqLwpAQCAtMjM0NCw5ICsyNDM1LDggQEAKIAkJfQogCiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgIE9wdGlvbiAlcyAoJXUpLCBsZW5ndGg6ICV1IiwKLQkJICAgICAgIHRvazJzdHJidWYoYmdwX29wdF92YWx1ZXMsIlVua25vd24iLAotCQkJCSAgYmdwb3B0LmJncG9wdF90eXBlLAotCQkJCSAgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisJCSAgICAgICB0b2syc3RyKGJncF9vcHRfdmFsdWVzLCJVbmtub3duIiwKKwkJCQkgIGJncG9wdC5iZ3BvcHRfdHlwZSksCiAJCSAgICAgICBiZ3BvcHQuYmdwb3B0X3R5cGUsCiAJCSAgICAgICBiZ3BvcHQuYmdwb3B0X2xlbikpOwogCkBAIC0yMzgwLDExICsyNDcwLDYgQEAKIAlpbnQgd2l0aGRyYXduX3JvdXRlc19sZW47CiAJaW50IGxlbjsKIAlpbnQgaTsKLQljaGFyIHRva2J1ZltUT0tCVUZTSVpFXTsKLSNpZm5kZWYgSU5FVDYKLQljaGFyIGJ1ZltNQVhIT1NUTkFNRUxFTiArIDEwMF07Ci0JaW50IHdwZng7Ci0jZW5kaWYKIAogCU5EX1RDSEVDSzIoZGF0WzBdLCBCR1BfU0laRSk7CiAJaWYgKGxlbmd0aCA8IEJHUF9TSVpFKQpAQCAtMjQwOSwzNiArMjQ5NCw5IEBACiAJCU5EX1RDSEVDSzIocFswXSwgd2l0aGRyYXduX3JvdXRlc19sZW4pOwogCQlpZiAobGVuZ3RoIDwgd2l0aGRyYXduX3JvdXRlc19sZW4pCiAJCQlnb3RvIHRydW5jOwotI2lmZGVmIElORVQ2CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICBXaXRoZHJhd24gcm91dGVzOiAlZCBieXRlcyIsIHdpdGhkcmF3bl9yb3V0ZXNfbGVuKSk7CiAJCXAgKz0gd2l0aGRyYXduX3JvdXRlc19sZW47CiAJCWxlbmd0aCAtPSB3aXRoZHJhd25fcm91dGVzX2xlbjsKLSNlbHNlCi0JCWlmICh3aXRoZHJhd25fcm91dGVzX2xlbiA8IDIpCi0JCQlnb3RvIHRydW5jOwotCQlsZW5ndGggLT0gMjsKLQkJd2l0aGRyYXduX3JvdXRlc19sZW4gLT0gMjsKLQotCi0JCU5EX1BSSU5UKChuZG8sICJcblx0ICBXaXRoZHJhd24gcm91dGVzOiIpKTsKLQotCQl3aGlsZSh3aXRoZHJhd25fcm91dGVzX2xlbiA+IDApIHsKLQkJCXdwZnggPSBkZWNvZGVfcHJlZml4NChuZG8sIHAsIHdpdGhkcmF3bl9yb3V0ZXNfbGVuLCBidWYsIHNpemVvZihidWYpKTsKLQkJCWlmICh3cGZ4ID09IC0xKSB7Ci0JCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgKGlsbGVnYWwgcHJlZml4IGxlbmd0aCkiKSk7Ci0JCQkJYnJlYWs7Ci0JCQl9IGVsc2UgaWYgKHdwZnggPT0gLTIpCi0JCQkJZ290byB0cnVuYzsKLQkJCWVsc2UgaWYgKHdwZnggPT0gLTMpCi0JCQkJZ290byB0cnVuYzsgLyogYnl0ZXMgbGVmdCwgYnV0IG5vdCBlbm91Z2ggKi8KLQkJCWVsc2UgewotCQkJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgICVzIiwgYnVmKSk7Ci0JCQkJcCArPSB3cGZ4OwotCQkJCWxlbmd0aCAtPSB3cGZ4OwotCQkJCXdpdGhkcmF3bl9yb3V0ZXNfbGVuIC09IHdwZng7Ci0JCQl9Ci0JCX0KLSNlbmRpZgogCX0KIAogCU5EX1RDSEVDSzIocFswXSwgMik7CkBAIC0yNDgxLDkgKzI1MzksOCBAQAogCQkJbGVuZ3RoIC09IGFsZW5sZW47CiAKIAkJCU5EX1BSSU5UKChuZG8sICJcblx0ICAlcyAoJXUpLCBsZW5ndGg6ICV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHJidWYoYmdwX2F0dHJfdmFsdWVzLCAiVW5rbm93biBBdHRyaWJ1dGUiLAotCQkJCQkgYXR5cGUsCi0JCQkJCSB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoYmdwX2F0dHJfdmFsdWVzLCAiVW5rbm93biBBdHRyaWJ1dGUiLAorCQkJCQkgYXR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXR5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhbGVuKSk7CiAKQEAgLTI1NDcsOCArMjYwNCw2IEBACiB7CiAJc3RydWN0IGJncF9ub3RpZmljYXRpb24gYmdwbjsKIAljb25zdCB1X2NoYXIgKnRwdHI7Ci0JY2hhciB0b2tidWZbVE9LQlVGU0laRV07Ci0JY2hhciB0b2tidWYyW1RPS0JVRlNJWkVdOwogCiAJTkRfVENIRUNLMihkYXRbMF0sIEJHUF9OT1RJRklDQVRJT05fU0laRSk7CiAJbWVtY3B5KCZiZ3BuLCBkYXQsIEJHUF9OT1RJRklDQVRJT05fU0laRSk7CkBAIC0yNTU4LDM5ICsyNjEzLDQ2IEBACiAgICAgICAgICAgICByZXR1cm47CiAKIAlORF9QUklOVCgobmRvLCAiLCAlcyAoJXUpIiwKLQkgICAgICAgdG9rMnN0cmJ1ZihiZ3Bfbm90aWZ5X21ham9yX3ZhbHVlcywgIlVua25vd24gRXJyb3IiLAotCQkJICBiZ3BuLmJncG5fbWFqb3IsIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorCSAgICAgICB0b2syc3RyKGJncF9ub3RpZnlfbWFqb3JfdmFsdWVzLCAiVW5rbm93biBFcnJvciIsCisJCQkgIGJncG4uYmdwbl9tYWpvciksCiAJICAgICAgIGJncG4uYmdwbl9tYWpvcikpOwogCiAgICAgICAgIHN3aXRjaCAoYmdwbi5iZ3BuX21ham9yKSB7CiAKICAgICAgICAgY2FzZSBCR1BfTk9USUZZX01BSk9SX01TRzoKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIHN1YmNvZGUgJXMgKCV1KSIsCi0JCSAgIHRvazJzdHJidWYoYmdwX25vdGlmeV9taW5vcl9tc2dfdmFsdWVzLCAiVW5rbm93biIsCi0JCQkgICAgICBiZ3BuLmJncG5fbWlub3IsIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorCQkgICB0b2syc3RyKGJncF9ub3RpZnlfbWlub3JfbXNnX3ZhbHVlcywgIlVua25vd24iLAorCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yKSwKIAkJICAgYmdwbi5iZ3BuX21pbm9yKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCR1BfTk9USUZZX01BSk9SX09QRU46CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBzdWJjb2RlICVzICgldSkiLAotCQkgICB0b2syc3RyYnVmKGJncF9ub3RpZnlfbWlub3Jfb3Blbl92YWx1ZXMsICJVbmtub3duIiwKLQkJCSAgICAgIGJncG4uYmdwbl9taW5vciwgdG9rYnVmLCBzaXplb2YodG9rYnVmKSksCisJCSAgIHRvazJzdHIoYmdwX25vdGlmeV9taW5vcl9vcGVuX3ZhbHVlcywgIlVua25vd24iLAorCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yKSwKIAkJICAgYmdwbi5iZ3BuX21pbm9yKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCR1BfTk9USUZZX01BSk9SX1VQREFURToKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIHN1YmNvZGUgJXMgKCV1KSIsCi0JCSAgIHRvazJzdHJidWYoYmdwX25vdGlmeV9taW5vcl91cGRhdGVfdmFsdWVzLCAiVW5rbm93biIsCi0JCQkgICAgICBiZ3BuLmJncG5fbWlub3IsIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorCQkgICB0b2syc3RyKGJncF9ub3RpZnlfbWlub3JfdXBkYXRlX3ZhbHVlcywgIlVua25vd24iLAorCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yKSwKKwkJICAgYmdwbi5iZ3BuX21pbm9yKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBCR1BfTk9USUZZX01BSk9SX0ZTTToKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgc3ViY29kZSAlcyAoJXUpIiwKKwkJICAgdG9rMnN0cihiZ3Bfbm90aWZ5X21pbm9yX2ZzbV92YWx1ZXMsICJVbmtub3duIiwKKwkJCSAgICAgIGJncG4uYmdwbl9taW5vciksCiAJCSAgIGJncG4uYmdwbl9taW5vcikpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQkdQX05PVElGWV9NQUpPUl9DQVA6CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIHN1YmNvZGUgJXMgKCV1KSIsCi0JCSAgIHRvazJzdHJidWYoYmdwX25vdGlmeV9taW5vcl9jYXBfdmFsdWVzLCAiVW5rbm93biIsCi0JCQkgICAgICBiZ3BuLmJncG5fbWlub3IsIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorCQkgICB0b2syc3RyKGJncF9ub3RpZnlfbWlub3JfY2FwX3ZhbHVlcywgIlVua25vd24iLAorCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yKSwKIAkJICAgYmdwbi5iZ3BuX21pbm9yKSk7CisgICAgICAgICAgICBicmVhazsKICAgICAgICAgY2FzZSBCR1BfTk9USUZZX01BSk9SX0NFQVNFOgogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgc3ViY29kZSAlcyAoJXUpIiwKLQkJICAgdG9rMnN0cmJ1ZihiZ3Bfbm90aWZ5X21pbm9yX2NlYXNlX3ZhbHVlcywgIlVua25vd24iLAotCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yLCB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKwkJICAgdG9rMnN0cihiZ3Bfbm90aWZ5X21pbm9yX2NlYXNlX3ZhbHVlcywgIlVua25vd24iLAorCQkJICAgICAgYmdwbi5iZ3BuX21pbm9yKSwKIAkJICAgYmdwbi5iZ3BuX21pbm9yKSk7CiAKIAkgICAgLyogZHJhZnQtaWV0Zi1pZHItY2Vhc2Utc3ViY29kZS0wMiBtZW50aW9ucyBvcHRpb25hbGx5IDcgYnl0ZXMKQEAgLTI2MDAsMTEgKzI2NjIsMTAgQEAKIAkJdHB0ciA9IGRhdCArIEJHUF9OT1RJRklDQVRJT05fU0laRTsKIAkJTkRfVENIRUNLMigqdHB0ciwgNyk7CiAJCU5EX1BSSU5UKChuZG8sICIsIEFGSSAlcyAoJXUpLCBTQUZJICVzICgldSksIE1heCBQcmVmaXhlczogJXUiLAotCQkgICAgICAgdG9rMnN0cmJ1ZihhZl92YWx1ZXMsICJVbmtub3duIiwKLQkJCQkgIEVYVFJBQ1RfMTZCSVRTKHRwdHIpLCB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKwkJICAgICAgIHRvazJzdHIoYWZfdmFsdWVzLCAiVW5rbm93biIsCisJCQkJICBFWFRSQUNUXzE2QklUUyh0cHRyKSksCiAJCSAgICAgICBFWFRSQUNUXzE2QklUUyh0cHRyKSwKLQkJICAgICAgIHRvazJzdHJidWYoYmdwX3NhZmlfdmFsdWVzLCAiVW5rbm93biIsICoodHB0cisyKSwKLQkJCQkgIHRva2J1ZjIsIHNpemVvZih0b2tidWYpKSwKKwkJICAgICAgIHRvazJzdHIoYmdwX3NhZmlfdmFsdWVzLCAiVW5rbm93biIsICoodHB0cisyKSksCiAJCSAgICAgICAqKHRwdHIrMiksCiAJCSAgICAgICBFWFRSQUNUXzMyQklUUyh0cHRyKzMpKSk7CiAJICAgIH0KQEAgLTI2MjMsOCArMjY4NCw2IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnBwdHIsIGludCBsZW4pCiB7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBiZ3Bfcm91dGVfcmVmcmVzaCAqYmdwX3JvdXRlX3JlZnJlc2hfaGVhZGVyOwotCWNoYXIgdG9rYnVmW1RPS0JVRlNJWkVdOwotCWNoYXIgdG9rYnVmMltUT0tCVUZTSVpFXTsKIAogCU5EX1RDSEVDSzIocHB0clswXSwgQkdQX1JPVVRFX1JFRlJFU0hfU0laRSk7CiAKQEAgLTI2MzUsMTUgKzI2OTQsMTMgQEAKICAgICAgICAgYmdwX3JvdXRlX3JlZnJlc2hfaGVhZGVyID0gKGNvbnN0IHN0cnVjdCBiZ3Bfcm91dGVfcmVmcmVzaCAqKXBwdHI7CiAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIEFGSSAlcyAoJXUpLCBTQUZJICVzICgldSkiLAotICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihhZl92YWx1ZXMsIlVua25vd24iLAorICAgICAgICAgICAgICAgdG9rMnN0cihhZl92YWx1ZXMsIlVua25vd24iLAogCQkJICAvKiB0aGlzIHN0aW5rcyBidXQgdGhlIGNvbXBpbGVyIHBhZHMgdGhlIHN0cnVjdHVyZQogCQkJICAgKiB3ZWlyZCAqLwotCQkJICBFWFRSQUNUXzE2QklUUygmYmdwX3JvdXRlX3JlZnJlc2hfaGVhZGVyLT5hZmkpLAotCQkJICB0b2tidWYsIHNpemVvZih0b2tidWYpKSwKKwkJCSAgRVhUUkFDVF8xNkJJVFMoJmJncF9yb3V0ZV9yZWZyZXNoX2hlYWRlci0+YWZpKSksCiAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUygmYmdwX3JvdXRlX3JlZnJlc2hfaGVhZGVyLT5hZmkpLAotICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihiZ3Bfc2FmaV92YWx1ZXMsIlVua25vd24iLAotCQkJICBiZ3Bfcm91dGVfcmVmcmVzaF9oZWFkZXItPnNhZmksCi0JCQkgIHRva2J1ZjIsIHNpemVvZih0b2tidWYyKSksCisgICAgICAgICAgICAgICB0b2syc3RyKGJncF9zYWZpX3ZhbHVlcywiVW5rbm93biIsCisJCQkgIGJncF9yb3V0ZV9yZWZyZXNoX2hlYWRlci0+c2FmaSksCiAgICAgICAgICAgICAgICBiZ3Bfcm91dGVfcmVmcmVzaF9oZWFkZXItPnNhZmkpKTsKIAogICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7CkBAIC0yNjYxLDEzICsyNzE4LDExIEBACiAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZGF0LCBpbnQgbGVuZ3RoKQogewogCXN0cnVjdCBiZ3AgYmdwOwotCWNoYXIgdG9rYnVmW1RPS0JVRlNJWkVdOwogCiAJTkRfVENIRUNLMihkYXRbMF0sIEJHUF9TSVpFKTsKIAltZW1jcHkoJmJncCwgZGF0LCBCR1BfU0laRSk7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHQlcyBNZXNzYWdlICgldSksIGxlbmd0aDogJXUiLAotICAgICAgICAgICAgICAgdG9rMnN0cmJ1ZihiZ3BfbXNnX3ZhbHVlcywgIlVua25vd24iLCBiZ3AuYmdwX3R5cGUsCi0JCQkgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpLAorICAgICAgICAgICAgICAgdG9rMnN0cihiZ3BfbXNnX3ZhbHVlcywgIlVua25vd24iLCBiZ3AuYmdwX3R5cGUpLAogICAgICAgICAgICAgICAgYmdwLmJncF90eXBlLAogICAgICAgICAgICAgICAgbGVuZ3RoKSk7CiAKQEAgLTI3MTIsNyArMjc2Nyw2IEBACiAJfTsKIAlzdHJ1Y3QgYmdwIGJncDsKIAl1aW50MTZfdCBobGVuOwotCWNoYXIgdG9rYnVmW1RPS0JVRlNJWkVdOwogCiAJZXAgPSBkYXQgKyBsZW5ndGg7CiAJaWYgKG5kby0+bmRvX3NuYXBlbmQgPCBkYXQgKyBsZW5ndGgpCkBAIC0yNzYxLDEwICsyODE1LDkgQEAKIAkJCXN0YXJ0ID0gcDsKIAkJfSBlbHNlIHsKIAkJCU5EX1BSSU5UKChuZG8sICJcblt8QkdQICVzXSIsCi0JCQkgICAgICAgdG9rMnN0cmJ1ZihiZ3BfbXNnX3ZhbHVlcywKKwkJCSAgICAgICB0b2syc3RyKGJncF9tc2dfdmFsdWVzLAogCQkJCQkgICJVbmtub3duIE1lc3NhZ2UgVHlwZSIsCi0JCQkJCSAgYmdwLmJncF90eXBlLAotCQkJCQkgIHRva2J1Ziwgc2l6ZW9mKHRva2J1ZikpKSk7CisJCQkJCSAgYmdwLmJncF90eXBlKSkpOwogCQkJYnJlYWs7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9wcmludC1ib290cC5jIGIvcHJpbnQtYm9vdHAuYwppbmRleCBmZTBhMDcwLi5mZTc5OGEwIDEwMDY0NAotLS0gYS9wcmludC1ib290cC5jCisrKyBiL3ByaW50LWJvb3RwLmMKQEAgLTE3LDIwICsxNywxOSBAQAogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAogICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRm9ybWF0IGFuZCBwcmludCBib290cCBwYWNrZXRzLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEJPT1RQIGFuZCBJUHY0IERIQ1AgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCkBAIC0yMTMsOCArMjEyLDkgQEAKICNkZWZpbmUJVEFHX0NMSUVOVF9HVUlECQkoKHVpbnQ4X3QpICA5NykKICNkZWZpbmUJVEFHX0xEQVBfVVJMCQkoKHVpbnQ4X3QpICA5NSkKICNkZWZpbmUJVEFHXzZPVkVSNAkJKCh1aW50OF90KSAgOTYpCi0jZGVmaW5lCVRBR19QUklOVEVSX05BTUUJKCh1aW50OF90KSAxMDApCi0jZGVmaW5lCVRBR19NREhDUF9TRVJWRVIJKCh1aW50OF90KSAxMDEpCisvKiBSRkMgNDgzMywgVFogY29kZXMgKi8KKyNkZWZpbmUJVEFHX1RaX1BDT0RFICAgIAkoKHVpbnQ4X3QpIDEwMCkKKyNkZWZpbmUJVEFHX1RaX1RDT0RFICAgIAkoKHVpbnQ4X3QpIDEwMSkKICNkZWZpbmUJVEFHX0lQWF9DT01QQVQJCSgodWludDhfdCkgMTEwKQogI2RlZmluZQlUQUdfTkVUSU5GT19QQVJFTlQJKCh1aW50OF90KSAxMTIpCiAjZGVmaW5lCVRBR19ORVRJTkZPX1BBUkVOVF9UQUcJKCh1aW50OF90KSAxMTMpCkBAIC0yMjIsNiArMjIyLDcgQEAKICNkZWZpbmUJVEFHX0ZBSUxPVkVSCQkoKHVpbnQ4X3QpIDExNSkKICNkZWZpbmUJVEFHX0VYVEVOREVEX1JFUVVFU1QJKCh1aW50OF90KSAxMjYpCiAjZGVmaW5lCVRBR19FWFRFTkRFRF9PUFRJT04JKCh1aW50OF90KSAxMjcpCisjZGVmaW5lIFRBR19NVURVUkwgICAgICAgICAgICAgICgodWludDhfdCkgMTYxKQogCiAvKiBESENQIE1lc3NhZ2UgdHlwZXMgKHZhbHVlcyBmb3IgVEFHX0RIQ1BfTUVTU0FHRSBvcHRpb24pICovCiAjZGVmaW5lIERIQ1BESVNDT1ZFUgkxCkBAIC0yOTIsNiArMjkzLDcgQEAKIAlORF9QUklOVCgobmRvLCAiQk9PVFAvREhDUCwgJXMiLAogCQkgIHRvazJzdHIoYm9vdHBfb3BfdmFsdWVzLCAidW5rbm93biAoMHglMDJ4KSIsIGJwLT5icF9vcCkpKTsKIAorCU5EX1RDSEVDSyhicC0+YnBfaGxlbik7CiAJaWYgKGJwLT5icF9odHlwZSA9PSAxICYmIGJwLT5icF9obGVuID09IDYgJiYgYnAtPmJwX29wID09IEJPT1RQUkVRVUVTVCkgewogCQlORF9UQ0hFQ0syKGJwLT5icF9jaGFkZHJbMF0sIDYpOwogCQlORF9QUklOVCgobmRvLCAiIGZyb20gJXMiLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgYnAtPmJwX2NoYWRkcikpKTsKQEAgLTM1NCw3ICszNTYsOCBAQAogCU5EX1RDSEVDSzIoYnAtPmJwX3NuYW1lWzBdLCAxKTsJCS8qIGNoZWNrIGZpcnN0IGNoYXIgb25seSAqLwogCWlmICgqYnAtPmJwX3NuYW1lKSB7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICBzbmFtZSBcIiIpKTsKLQkJaWYgKGZuX3ByaW50KG5kbywgYnAtPmJwX3NuYW1lLCBuZG8tPm5kb19zbmFwZW5kKSkgeworCQlpZiAoZm5fcHJpbnR6dG4obmRvLCBicC0+YnBfc25hbWUsICh1X2ludClzaXplb2YgYnAtPmJwX3NuYW1lLAorCQkgICAgbmRvLT5uZG9fc25hcGVuZCkpIHsKIAkJCU5EX1BSSU5UKChuZG8sICJcIiIpKTsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIgKyAxKSk7CiAJCQlyZXR1cm47CkBAIC0zNjQsNyArMzY3LDggQEAKIAlORF9UQ0hFQ0syKGJwLT5icF9maWxlWzBdLCAxKTsJCS8qIGNoZWNrIGZpcnN0IGNoYXIgb25seSAqLwogCWlmICgqYnAtPmJwX2ZpbGUpIHsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIGZpbGUgXCIiKSk7Ci0JCWlmIChmbl9wcmludChuZG8sIGJwLT5icF9maWxlLCBuZG8tPm5kb19zbmFwZW5kKSkgeworCQlpZiAoZm5fcHJpbnR6dG4obmRvLCBicC0+YnBfZmlsZSwgKHVfaW50KXNpemVvZiBicC0+YnBfZmlsZSwKKwkJICAgIG5kby0+bmRvX3NuYXBlbmQpKSB7CiAJCQlORF9QUklOVCgobmRvLCAiXCIiKSk7CiAJCQlORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyICsgMSkpOwogCQkJcmV0dXJuOwpAQCAtNTIwLDEzICs1MjQsMTQgQEAKIAl7IFRBR19DTElFTlRfR1VJRCwJImJHVUlEIiB9LAkvKiBYWFggJ2InICovCiAJeyBUQUdfTERBUF9VUkwsCQkiYUxEQVAiIH0sCiAJeyBUQUdfNk9WRVI0LAkJImk2bzQiIH0sCi0JeyBUQUdfUFJJTlRFUl9OQU1FLAkiYVBSVFIiIH0sCi0JeyBUQUdfTURIQ1BfU0VSVkVSLAkiYk1ESENQIiB9LAkvKiBYWFggJ2InICovCisJeyBUQUdfVFpfUENPREUsIAkiYVBPU0lYLVRaIiB9LAorCXsgVEFHX1RaX1RDT0RFLCAJImFUWi1OYW1lIiB9LAogCXsgVEFHX0lQWF9DT01QQVQsCSJiSVBYIiB9LAkvKiBYWFggJ2InICovCiAJeyBUQUdfTkVUSU5GT19QQVJFTlQsCSJpTkkiIH0sCiAJeyBUQUdfTkVUSU5GT19QQVJFTlRfVEFHLCAiYU5JVEFHIiB9LAogCXsgVEFHX1VSTCwJCSJhVVJMIiB9LAogCXsgVEFHX0ZBSUxPVkVSLAkJImJGQUlMIiB9LAkvKiBYWFggJ2InICovCisJeyBUQUdfTVVEVVJMLCAgICAgICAgICAgImFNVUQtVVJMIiB9LAogCXsgMCwgTlVMTCB9CiB9OwogLyogMi1ieXRlIGV4dGVuZGVkIHRhZ3MgKi8KQEAgLTk5Nyw3ICsxMDAyLDcgQEAKIAkJCQkJCWJyZWFrOwogCQkJCQl9CiAJCQkJCWlmIChsZW4gPCBzdWJvcHRsZW4pIHsKLQkJCQkJCU5EX1BSSU5UKChuZG8sICJFUlJPUjogbWFsZm9ybWVkIG9wdGlvbiIpKTsKKwkJCQkJCU5EX1BSSU5UKChuZG8sICJFUlJPUjogaW52YWxpZCBvcHRpb24iKSk7CiAJCQkJCQlicCArPSBsZW47CiAJCQkJCQlsZW4gPSAwOwogCQkJCQkJYnJlYWs7CmRpZmYgLS1naXQgYS9wcmludC1idC5jIGIvcHJpbnQtYnQuYwppbmRleCAxMjhkYWFkLi5iMzdmOGZhIDEwMDY0NAotLS0gYS9wcmludC1idC5jCisrKyBiL3ByaW50LWJ0LmMKQEAgLTE3LDE0ICsxNywxNSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCbHVldG9vdGggcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjaWYgZGVmaW5lZChETFRfQkxVRVRPT1RIX0hDSV9INF9XSVRIX1BIRFIpICYmIGRlZmluZWQoSEFWRV9QQ0FQX0JMVUVUT09USF9IKQpkaWZmIC0tZ2l0IGEvcHJpbnQtY2FsbS1mYXN0LmMgYi9wcmludC1jYWxtLWZhc3QuYwppbmRleCA1Y2MzOWY0Li5jOWJlMDA4IDEwMDY0NAotLS0gYS9wcmludC1jYWxtLWZhc3QuYworKysgYi9wcmludC1jYWxtLWZhc3QuYwpAQCAtMTUsMTQgKzE1LDE1IEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IE9sYSBNYXJ0aW4gTHlra2phIChvbGEubHlra2phQHEtZnJlZS5jb20pCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQ29tbXVuaWNhdGlvbiBhY2Nlc3MgZm9yIGxhbmQgbW9iaWxlcyAoQ0FMTSkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCiAvKgpAQCAtMzYsMTkgKzM3LDMzIEBACiAgKiB0byB0aGUgY2FsbSBoZWFkZXIgb2YgdGhlIHBhY2tldC4KICAqLwogdm9pZAotY2FsbV9mYXN0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmV0aCwgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQorY2FsbV9mYXN0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgsIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqc3JjKQogewotCWludCBzcmNOd3JlZiA9IGJwWzBdOwotCWludCBkc3ROd3JlZiA9IGJwWzFdOworCWludCBzcmNOd3JlZjsKKwlpbnQgZHN0TndyZWY7CisKKwlORF9UQ0hFQ0syKCpicCwgMik7CisJaWYgKGxlbmd0aCA8IDIpCisJCWdvdG8gdHJ1bmM7CisJc3JjTndyZWYgPSBicFswXTsKKwlkc3ROd3JlZiA9IGJwWzFdOwogCWxlbmd0aCAtPSAyOwogCWJwICs9IDI7CiAKLQlORF9QUklOVCgobmRvLCAiQ0FMTSBGQVNUIHNyYzolczsgIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIGV0aCs2KSkpOworCU5EX1BSSU5UKChuZG8sICJDQUxNIEZBU1QiKSk7CisJaWYgKHNyYyAhPSBOVUxMKQorCQlORF9QUklOVCgobmRvLCAiIHNyYzolcyIsIChzcmMtPmFkZHJfc3RyaW5nKShuZG8sIHNyYy0+YWRkcikpKTsKKwlORF9QUklOVCgobmRvLCAiOyAiKSk7CiAJTkRfUFJJTlQoKG5kbywgIlNyY053cmVmOiVkOyAiLCBzcmNOd3JlZikpOwogCU5EX1BSSU5UKChuZG8sICJEc3ROd3JlZjolZDsgIiwgZHN0TndyZWYpKTsKIAogCWlmIChuZG8tPm5kb192ZmxhZykKIAkJTkRfREVGQVVMVFBSSU5UKGJwLCBsZW5ndGgpOworCXJldHVybjsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIlt8Y2FsbSBmYXN0XSIpKTsKKwlyZXR1cm47CiB9CiAKIApkaWZmIC0tZ2l0IGEvcHJpbnQtY2FycC5jIGIvcHJpbnQtY2FycC5jCmluZGV4IDdiOWYyOGMuLmM2NTBkMTggMTAwNjQ0Ci0tLSBhL3ByaW50LWNhcnAuYworKysgYi9wcmludC1jYXJwLmMKQEAgLTM0LDE0ICszNCwxNSBAQAogICoKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBDb21tb24gQWRkcmVzcyBSZWR1bmRhbmN5IFByb3RvY29sIChDQVJQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIiAvKiBmb3IgY2hlY2tzdW0gc3RydWN0dXJlIGFuZCBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiIC8qIGZvciBjaGVja3N1bSBzdHJ1Y3R1cmUgYW5kIGZ1bmN0aW9ucyAqLwogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogdm9pZApkaWZmIC0tZ2l0IGEvcHJpbnQtY2RwLmMgYi9wcmludC1jZHAuYwppbmRleCA5MzJmN2JjLi42ZjhmMzU2IDEwMDY0NAotLS0gYS9wcmludC1jZHAuYworKysgYi9wcmludC1jZHAuYwpAQCAtMjQsMTggKzI0LDE5IEBACiAgKiAgICBodHRwOi8vd3d3LmNpc2NvLmNvbS91bml2ZXJjZC9jYy90ZC9kb2MvcHJvZHVjdC9sYW4vdHJzcmIvZnJhbWVzLmh0bQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IENpc2NvIERpc2NvdmVyeSBQcm90b2NvbCAoQ0RQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgIm5scGlkLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfGNkcF0iOwpAQCAtMTcwLDkgKzE3MSwxMSBAQAogCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICIpKTsKIAkJCWZvciAoaT0wO2k8bGVuO2krKykgewogCQkJICAgIGogPSAqKHRwdHIraSk7Ci0JCQkgICAgTkRfUFJJTlQoKG5kbywgIiVjIiwgaikpOwotCQkJICAgIGlmIChqID09IDB4MGEpIC8qIGxldHMgcmV3b3JrIHRoZSB2ZXJzaW9uIHN0cmluZyB0byBnZXQgYSBuaWNlIGluZGVudGF0aW9uICovCi0JCQkJTkRfUFJJTlQoKG5kbywgIlx0ICAiKSk7CisJCQkgICAgaWYgKGogPT0gJ1xuJykgLyogbGV0cyByZXdvcmsgdGhlIHZlcnNpb24gc3RyaW5nIHRvCisJCQkJCSAgICAgIGdldCBhIG5pY2UgaW5kZW50YXRpb24gKi8KKwkJCQlORF9QUklOVCgobmRvLCAiXG5cdCAgIikpOworCQkJICAgIGVsc2UKKwkJCQlmbl9wcmludF9jaGFyKG5kbywgaik7CiAJCQl9CiAJCQlicmVhazsKIAkJICAgIGNhc2UgMHgwNjogLyogUGxhdGZvcm0gKi8KQEAgLTI3OCwxMSArMjgxLDkgQEAKIHsKIAlpbnQgcHQsIHBsLCBhbCwgbnVtOwogCWNvbnN0IHVfY2hhciAqZW5kcCA9IHAgKyBsOwotI2lmZGVmIElORVQ2CiAJc3RhdGljIGNvbnN0IHVfY2hhciBwcm90X2lwdjZbXSA9IHsKIAkJMHhhYSwgMHhhYSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHg4NiwgMHhkZAogCX07Ci0jZW5kaWYKIAogCU5EX1RDSEVDSzIoKnAsIDQpOwogCWlmIChwICsgNCA+IGVuZHApCkBAIC0zMTcsNyArMzE4LDYgQEAKIAkJCU5EX1BSSU5UKChuZG8sICJJUHY0ICgldSkgJXMiLCBudW0sIGlwYWRkcl9zdHJpbmcobmRvLCBwKSkpOwogCQkJcCArPSA0OwogCQl9Ci0jaWZkZWYgSU5FVDYKIAkJZWxzZSBpZiAocHQgPT0gUFRfSUVFRV84MDJfMiAmJiBwbCA9PSA4ICYmCiAJCSAgICBtZW1jbXAocCwgcHJvdF9pcHY2LCA4KSA9PSAwICYmIGFsID09IDE2KSB7CiAJCQkvKgpAQCAtMzM0LDcgKzMzNCw2IEBACiAJCQlORF9QUklOVCgobmRvLCAiSVB2NiAoJXUpICVzIiwgbnVtLCBpcDZhZGRyX3N0cmluZyhuZG8sIHApKSk7CiAJCQlwICs9IGFsOwogCQl9Ci0jZW5kaWYKIAkJZWxzZSB7CiAJCQkvKgogCQkJICogR2VuZXJpYyBjYXNlOiBqdXN0IHByaW50IHJhdyBkYXRhCmRpZmYgLS1naXQgYS9wcmludC1jZm0uYyBiL3ByaW50LWNmbS5jCmluZGV4IGE4NWVlYzAuLjQzYWQ0MzggMTAwNjQ0Ci0tLSBhL3ByaW50LWNmbS5jCisrKyBiL3ByaW50LWNmbS5jCkBAIC0xMiwyMSArMTIsMjAgQEAKICAqIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKgotICogU3VwcG9ydCBmb3IgdGhlIElFRUUgQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQgUHJvdG9jb2xzIGFzIHBlciA4MDIuMWFnLgotICoKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJRUVFIDgwMi4xYWcgQ29ubmVjdGl2aXR5IEZhdWx0IE1hbmFnZW1lbnQgKENGTSkgcHJvdG9jb2xzIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiZXRoZXIuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCkBAIC02NSwxOCArNjQsMTUgQEAKIHN0cnVjdCBjZm1fY2NtX3QgewogICAgIHVpbnQ4X3Qgc2VxdWVuY2VbNF07CiAgICAgdWludDhfdCBtYV9lcGlbMl07Ci0gICAgdWludDhfdCBtZF9uYW1lZm9ybWF0OwotICAgIHVpbnQ4X3QgbWRfbmFtZWxlbmd0aDsKLSAgICB1aW50OF90IG1kX25hbWVbNDZdOyAvKiBtZCBuYW1lIGFuZCBzaG9ydCBtYSBuYW1lICovCi0gICAgdWludDhfdCByZXNlcnZlZF9pdHVbMTZdOwotICAgIHVpbnQ4X3QgcmVzZXJ2ZWRbNl07CisgICAgdWludDhfdCBuYW1lc1s0OF07CisgICAgdWludDhfdCBpdHVfdF95XzE3MzFbMTZdOwogfTsKIAogLyoKICAqIFRpbWVyIEJhc2VzIGZvciB0aGUgQ0NNIEludGVydmFsIGZpZWxkLgogICogRXhwcmVzc2VkIGluIHVuaXRzIG9mIHNlY29uZHMuCiAgKi8KLWNvbnN0IGZsb2F0IGNjbV9pbnRlcnZhbF9iYXNlWzhdID0gezAsIDAuMDAzMzMzLCAwLjAxLCAwLjEsIDEsIDEwLCA2MCwgNjAwfTsKK3N0YXRpYyBjb25zdCBmbG9hdCBjY21faW50ZXJ2YWxfYmFzZVs4XSA9IHswLCAwLjAwMzMzMywgMC4wMSwgMC4xLCAxLCAxMCwgNjAsIDYwMH07CiAjZGVmaW5lIENDTV9JTlRFUlZBTF9NSU5fTVVMVElQTElFUiAzLjI1CiAjZGVmaW5lIENDTV9JTlRFUlZBTF9NQVhfTVVMVElQTElFUiAzLjUKIApAQCAtMTE1LDE2ICsxMTEsMTMgQEAKIAogc3RydWN0IGNmbV9sYm1fdCB7CiAgICAgdWludDhfdCB0cmFuc2FjdGlvbl9pZFs0XTsKLSAgICB1aW50OF90IHJlc2VydmVkWzRdOwogfTsKIAogc3RydWN0IGNmbV9sdG1fdCB7CiAgICAgdWludDhfdCB0cmFuc2FjdGlvbl9pZFs0XTsKLSAgICB1aW50OF90IGVncmVzc19pZFs4XTsKICAgICB1aW50OF90IHR0bDsKICAgICB1aW50OF90IG9yaWdpbmFsX21hY1tFVEhFUl9BRERSX0xFTl07CiAgICAgdWludDhfdCB0YXJnZXRfbWFjW0VUSEVSX0FERFJfTEVOXTsKLSAgICB1aW50OF90IHJlc2VydmVkWzNdOwogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgY2ZtX2x0bV9mbGFnX3ZhbHVlc1tdID0gewpAQCAtMTM0LDExICsxMjcsOCBAQAogCiBzdHJ1Y3QgY2ZtX2x0cl90IHsKICAgICB1aW50OF90IHRyYW5zYWN0aW9uX2lkWzRdOwotICAgIHVpbnQ4X3QgbGFzdF9lZ3Jlc3NfaWRbOF07Ci0gICAgdWludDhfdCBuZXh0X2VncmVzc19pZFs4XTsKICAgICB1aW50OF90IHR0bDsKICAgICB1aW50OF90IHJlcGxheV9hY3Rpb247Ci0gICAgdWludDhfdCByZXNlcnZlZFs2XTsKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGNmbV9sdHJfZmxhZ192YWx1ZXNbXSA9IHsKQEAgLTIyNiwxMCArMjE2LDEwIEBACiAKIAogc3RhdGljIGludAotY2ZtX21nbXRfYWRkcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0cHRyKQorY2ZtX25ldHdvcmtfYWRkcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0cHRyKQogewotICAgIHVfaW50IG1nbXRfYWRkcl90eXBlOworICAgIHVfaW50IG5ldHdvcmtfYWRkcl90eXBlOwogICAgIHVfaW50IGhleGR1bXAgPSAgRkFMU0U7CiAKICAgICAvKgpAQCAtMjM3LDI0ICsyMjcsMjIgQEAKICAgICAgKiA4MDIuMWFiIHNwZWNpZmllcyB0aGF0IHRoaXMgZmllbGQgd2lkdGgKICAgICAgKiBpcyBvbmx5IG9uY2Ugb2N0ZXQKICAgICAgKi8KLSAgICBtZ210X2FkZHJfdHlwZSA9ICp0cHRyOwotICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNYW5hZ2VtZW50IEFkZHJlc3MgVHlwZSAlcyAoJXUpIiwKLSAgICAgICAgICAgdG9rMnN0cihhZl92YWx1ZXMsICJVbmtub3duIiwgbWdtdF9hZGRyX3R5cGUpLAotICAgICAgICAgICBtZ210X2FkZHJfdHlwZSkpOworICAgIG5ldHdvcmtfYWRkcl90eXBlID0gKnRwdHI7CisgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIE5ldHdvcmsgQWRkcmVzcyBUeXBlICVzICgldSkiLAorICAgICAgICAgICB0b2syc3RyKGFmX3ZhbHVlcywgIlVua25vd24iLCBuZXR3b3JrX2FkZHJfdHlwZSksCisgICAgICAgICAgIG5ldHdvcmtfYWRkcl90eXBlKSk7CiAKICAgICAvKgogICAgICAqIFJlc29sdmUgdGhlIHBhc3NlZCBpbiBBZGRyZXNzLgogICAgICAqLwotICAgIHN3aXRjaChtZ210X2FkZHJfdHlwZSkgeworICAgIHN3aXRjaChuZXR3b3JrX2FkZHJfdHlwZSkgewogICAgIGNhc2UgQUZOVU1fSU5FVDoKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgdHB0ciArIDEpKSk7CiAgICAgICAgIGJyZWFrOwogCi0jaWZkZWYgSU5FVDYKICAgICBjYXNlIEFGTlVNX0lORVQ2OgogICAgICAgICBORF9QUklOVCgobmRvLCAiLCAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgdHB0ciArIDEpKSk7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAKICAgICBkZWZhdWx0OgogICAgICAgICBoZXhkdW1wID0gVFJVRTsKQEAgLTI2NCwyOSArMjUyLDE5IEBACiAgICAgcmV0dXJuIGhleGR1bXA7CiB9CiAKLS8qCi0gKiBUaGUgZWdyZXNzLUlEIHN0cmluZyBpcyBhIDE2LUJpdCBzdHJpbmcgcGx1cyBhIE1BQyBhZGRyZXNzLgotICovCi1zdGF0aWMgY29uc3QgY2hhciAqCi1jZm1fZWdyZXNzX2lkX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0cHRyKQotewotICAgIHN0YXRpYyBjaGFyIGVncmVzc19pZF9idWZmZXJbODBdOwotCi0gICAgc25wcmludGYoZWdyZXNzX2lkX2J1ZmZlciwgc2l6ZW9mKGVncmVzc19pZF9idWZmZXIpLAotICAgICAgICAgICAgICJNQUMgMHglNHgtJXMiLAotICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHRwdHIpLAotICAgICAgICAgICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCB0cHRyKzIpKTsKLQotICAgIHJldHVybiBlZ3Jlc3NfaWRfYnVmZmVyOwotfQotCiB2b2lkCiBjZm1fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpwcHRyLCByZWdpc3RlciB1X2ludCBsZW5ndGgpCiB7CiAgICAgY29uc3Qgc3RydWN0IGNmbV9jb21tb25faGVhZGVyX3QgKmNmbV9jb21tb25faGVhZGVyOwogICAgIGNvbnN0IHN0cnVjdCBjZm1fdGx2X2hlYWRlcl90ICpjZm1fdGx2X2hlYWRlcjsKLSAgICBjb25zdCB1aW50OF90ICp0cHRyLCAqdGx2X3B0ciwgKm1hX25hbWUsICptYV9uYW1lZm9ybWF0LCAqbWFfbmFtZWxlbmd0aDsKKyAgICBjb25zdCB1aW50OF90ICp0cHRyLCAqdGx2X3B0cjsKKyAgICBjb25zdCB1aW50OF90ICpuYW1lc3A7CisgICAgdV9pbnQgbmFtZXNfZGF0YV9yZW1haW5pbmc7CisgICAgdWludDhfdCBtZF9uYW1lZm9ybWF0LCBtZF9uYW1lbGVuZ3RoOworICAgIGNvbnN0IHVpbnQ4X3QgKm1kX25hbWU7CisgICAgdWludDhfdCBtYV9uYW1lZm9ybWF0LCBtYV9uYW1lbGVuZ3RoOworICAgIGNvbnN0IHVpbnQ4X3QgKm1hX25hbWU7CiAgICAgdV9pbnQgaGV4ZHVtcCwgdGxlbiwgY2ZtX3Rsdl9sZW4sIGNmbV90bHZfdHlwZSwgY2NtX2ludGVydmFsOwogCiAKQEAgLTI5OSw2ICsyNzcsOCBAQAogCiAgICAgdHB0cj1wcHRyOwogICAgIGNmbV9jb21tb25faGVhZGVyID0gKGNvbnN0IHN0cnVjdCBjZm1fY29tbW9uX2hlYWRlcl90ICopcHB0cjsKKyAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKCpjZm1fY29tbW9uX2hlYWRlcikpCisgICAgICAgIGdvdG8gdG9vc2hvcnQ7CiAgICAgTkRfVENIRUNLKCpjZm1fY29tbW9uX2hlYWRlcik7CiAKICAgICAvKgpAQCAtMzI4LDkgKzMwOCwyNSBAQAogICAgIHRwdHIgKz0gc2l6ZW9mKGNvbnN0IHN0cnVjdCBjZm1fY29tbW9uX2hlYWRlcl90KTsKICAgICB0bGVuID0gbGVuZ3RoIC0gc2l6ZW9mKHN0cnVjdCBjZm1fY29tbW9uX2hlYWRlcl90KTsKIAorICAgIC8qCisgICAgICogU2FuaXR5IGNoZWNrIHRoZSBmaXJzdCBUTFYgb2Zmc2V0LgorICAgICAqLworICAgIGlmIChjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldCA+IHRsZW4pIHsKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodG9vIGxhcmdlLCBtdXN0IGJlIDw9ICV1KSIsIHRsZW4pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHN3aXRjaCAoY2ZtX2NvbW1vbl9oZWFkZXItPm9wY29kZSkgewogICAgIGNhc2UgQ0ZNX09QQ09ERV9DQ006CiAgICAgICAgIG1zZ19wdHIuY2ZtX2NjbSA9IChjb25zdCBzdHJ1Y3QgY2ZtX2NjbV90ICopdHB0cjsKKyAgICAgICAgaWYgKGNmbV9jb21tb25faGVhZGVyLT5maXJzdF90bHZfb2Zmc2V0IDwgc2l6ZW9mKCptc2dfcHRyLmNmbV9jY20pKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICh0b28gc21hbGwgMSwgbXVzdCBiZSA+PSAlbHUpIiwKKyAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2YoKm1zZ19wdHIuY2ZtX2NjbSkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAodGxlbiA8IHNpemVvZigqbXNnX3B0ci5jZm1fY2NtKSkKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CisgICAgICAgIE5EX1RDSEVDSygqbXNnX3B0ci5jZm1fY2NtKTsKIAogICAgICAgICBjY21faW50ZXJ2YWwgPSBDRk1fRVhUUkFDVF9DQ01fSU5URVJWQUwoY2ZtX2NvbW1vbl9oZWFkZXItPmZsYWdzKTsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgRmxhZ3MgW0NDTSBJbnRlcnZhbCAldSVzXSIsCkBAIC0zNTMsNTUgKzM0OSw4OSBAQAogICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMobXNnX3B0ci5jZm1fY2NtLT5zZXF1ZW5jZSksCiAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhtc2dfcHRyLmNmbV9jY20tPm1hX2VwaSkpKTsKIAorICAgICAgICBuYW1lc3AgPSBtc2dfcHRyLmNmbV9jY20tPm5hbWVzOworICAgICAgICBuYW1lc19kYXRhX3JlbWFpbmluZyA9IHNpemVvZihtc2dfcHRyLmNmbV9jY20tPm5hbWVzKTsKIAogICAgICAgICAvKgogICAgICAgICAgKiBSZXNvbHZlIHRoZSBNRCBmaWVsZHMuCiAgICAgICAgICAqLwotICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgTUQgTmFtZSBGb3JtYXQgJXMgKCV1KSwgTUQgTmFtZSBsZW5ndGggJXUiLAotICAgICAgICAgICAgICAgdG9rMnN0cihjZm1fbWRfbmFtZWZvcm1hdF92YWx1ZXMsICJVbmtub3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lZm9ybWF0KSwKLSAgICAgICAgICAgICAgIG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZWZvcm1hdCwKLSAgICAgICAgICAgICAgIG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZWxlbmd0aCkpOworICAgICAgICBtZF9uYW1lZm9ybWF0ID0gKm5hbWVzcDsKKyAgICAgICAgbmFtZXNwKys7CisgICAgICAgIG5hbWVzX2RhdGFfcmVtYWluaW5nLS07ICAvKiBXZSBrbm93IHRoaXMgaXMgIT0gMCAqLworICAgICAgICBpZiAobWRfbmFtZWZvcm1hdCAhPSBDRk1fQ0NNX01EX0ZPUk1BVF9OT05FKSB7CisgICAgICAgICAgICBtZF9uYW1lbGVuZ3RoID0gKm5hbWVzcDsKKyAgICAgICAgICAgIG5hbWVzcCsrOworICAgICAgICAgICAgbmFtZXNfZGF0YV9yZW1haW5pbmctLTsgLyogV2Uga25vdyB0aGlzIGlzICE9MCAqLworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIE1EIE5hbWUgRm9ybWF0ICVzICgldSksIE1EIE5hbWUgbGVuZ3RoICV1IiwKKyAgICAgICAgICAgICAgICAgICB0b2syc3RyKGNmbV9tZF9uYW1lZm9ybWF0X3ZhbHVlcywgIlVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfbmFtZWZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgbWRfbmFtZWZvcm1hdCwKKyAgICAgICAgICAgICAgICAgICBtZF9uYW1lbGVuZ3RoKSk7CiAKLSAgICAgICAgaWYgKG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZWZvcm1hdCAhPSBDRk1fQ0NNX01EX0ZPUk1BVF9OT05FKSB7CisgICAgICAgICAgICAvKiAtMiBmb3IgdGhlIE1BIHNob3J0IG5hbWUgZm9ybWF0IGFuZCBsZW5ndGggKi8KKyAgICAgICAgICAgIGlmIChtZF9uYW1lbGVuZ3RoID4gbmFtZXNfZGF0YV9yZW1haW5pbmcgLSAyKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodG9vIGxhcmdlLCBtdXN0IGJlIDw9ICV1KSIsIG5hbWVzX2RhdGFfcmVtYWluaW5nIC0gMikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgbWRfbmFtZSA9IG5hbWVzcDsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNRCBOYW1lOiAiKSk7Ci0gICAgICAgICAgICBzd2l0Y2ggKG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZWZvcm1hdCkgeworICAgICAgICAgICAgc3dpdGNoIChtZF9uYW1lZm9ybWF0KSB7CiAgICAgICAgICAgICBjYXNlIENGTV9DQ01fTURfRk9STUFUX0ROUzoKICAgICAgICAgICAgIGNhc2UgQ0ZNX0NDTV9NRF9GT1JNQVRfQ0hBUjoKLSAgICAgICAgICAgICAgICBzYWZlcHV0cyhuZG8sIG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZSwgbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBzYWZlcHV0cyhuZG8sIG1kX25hbWUsIG1kX25hbWVsZW5ndGgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENGTV9DQ01fTURfRk9STUFUX01BQzoKLSAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgTUFDICVzIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBtc2dfcHRyLmNmbV9jY20tPm1kX25hbWUpKSk7CisgICAgICAgICAgICAgICAgaWYgKG1kX25hbWVsZW5ndGggPT0gNikgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgTUFDICVzIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfbmFtZSkpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgTUFDIChsZW5ndGggaW52YWxpZCkiKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgLyogRklYTUUgYWRkIHByaW50ZXJzIGZvciB0aG9zZSBNRCBmb3JtYXRzIC0gaGV4ZHVtcCBmb3Igbm93ICovCiAgICAgICAgICAgICBjYXNlIENGTV9DQ01fTUFfRk9STUFUXzgwMjE6CiAgICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZSwgIlxuXHQgICAgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwcmludF91bmtub3duX2RhdGEobmRvLCBtZF9uYW1lLCAiXG5cdCAgICAiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZF9uYW1lbGVuZ3RoKTsKICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5hbWVzcCArPSBtZF9uYW1lbGVuZ3RoOworICAgICAgICAgICAgbmFtZXNfZGF0YV9yZW1haW5pbmcgLT0gbWRfbmFtZWxlbmd0aDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNRCBOYW1lIEZvcm1hdCAlcyAoJXUpIiwKKyAgICAgICAgICAgICAgICAgICB0b2syc3RyKGNmbV9tZF9uYW1lZm9ybWF0X3ZhbHVlcywgIlVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgbWRfbmFtZWZvcm1hdCksCisgICAgICAgICAgICAgICAgICAgbWRfbmFtZWZvcm1hdCkpOwogICAgICAgICB9CiAKIAogICAgICAgICAvKgogICAgICAgICAgKiBSZXNvbHZlIHRoZSBNQSBmaWVsZHMuCiAgICAgICAgICAqLwotICAgICAgICBtYV9uYW1lZm9ybWF0ID0gbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lICsgbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lbGVuZ3RoOwotICAgICAgICBtYV9uYW1lbGVuZ3RoID0gbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lICsgbXNnX3B0ci5jZm1fY2NtLT5tZF9uYW1lbGVuZ3RoICsgMTsKLSAgICAgICAgbWFfbmFtZSA9IG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZSArIG1zZ19wdHIuY2ZtX2NjbS0+bWRfbmFtZWxlbmd0aCArIDI7Ci0KKyAgICAgICAgbWFfbmFtZWZvcm1hdCA9ICpuYW1lc3A7CisgICAgICAgIG5hbWVzcCsrOworICAgICAgICBuYW1lc19kYXRhX3JlbWFpbmluZy0tOyAvKiBXZSBrbm93IHRoaXMgaXMgIT0gMCAqLworICAgICAgICBtYV9uYW1lbGVuZ3RoID0gKm5hbWVzcDsKKyAgICAgICAgbmFtZXNwKys7CisgICAgICAgIG5hbWVzX2RhdGFfcmVtYWluaW5nLS07IC8qIFdlIGtub3cgdGhpcyBpcyAhPSAwICovCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNQSBOYW1lLUZvcm1hdCAlcyAoJXUpLCBNQSBuYW1lIGxlbmd0aCAldSIsCiAgICAgICAgICAgICAgICB0b2syc3RyKGNmbV9tYV9uYW1lZm9ybWF0X3ZhbHVlcywgIlVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAqbWFfbmFtZWZvcm1hdCksCi0gICAgICAgICAgICAgICAqbWFfbmFtZWZvcm1hdCwKLSAgICAgICAgICAgICAgICptYV9uYW1lbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAgIG1hX25hbWVmb3JtYXQpLAorICAgICAgICAgICAgICAgbWFfbmFtZWZvcm1hdCwKKyAgICAgICAgICAgICAgIG1hX25hbWVsZW5ndGgpKTsKIAorICAgICAgICBpZiAobWFfbmFtZWxlbmd0aCA+IG5hbWVzX2RhdGFfcmVtYWluaW5nKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICh0b28gbGFyZ2UsIG11c3QgYmUgPD0gJXUpIiwgbmFtZXNfZGF0YV9yZW1haW5pbmcpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIG1hX25hbWUgPSBuYW1lc3A7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNQSBOYW1lOiAiKSk7Ci0gICAgICAgIHN3aXRjaCAoKm1hX25hbWVmb3JtYXQpIHsKKyAgICAgICAgc3dpdGNoIChtYV9uYW1lZm9ybWF0KSB7CiAgICAgICAgIGNhc2UgQ0ZNX0NDTV9NQV9GT1JNQVRfQ0hBUjoKLSAgICAgICAgICAgIHNhZmVwdXRzKG5kbywgbWFfbmFtZSwgKm1hX25hbWVsZW5ndGgpOworICAgICAgICAgICAgc2FmZXB1dHMobmRvLCBtYV9uYW1lLCBtYV9uYW1lbGVuZ3RoKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAvKiBGSVhNRSBhZGQgcHJpbnRlcnMgZm9yIHRob3NlIE1BIGZvcm1hdHMgLSBoZXhkdW1wIGZvciBub3cgKi8KQEAgLTQxMCwxOSArNDQwLDI2IEBACiAgICAgICAgIGNhc2UgQ0ZNX0NDTV9NQV9GT1JNQVRfSU5UOgogICAgICAgICBjYXNlIENGTV9DQ01fTUFfRk9STUFUX1ZQTjoKICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIG1hX25hbWUsICJcblx0ICAgICIsICptYV9uYW1lbGVuZ3RoKTsKKyAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIG1hX25hbWUsICJcblx0ICAgICIsIG1hX25hbWVsZW5ndGgpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDRk1fT1BDT0RFX0xUTToKICAgICAgICAgbXNnX3B0ci5jZm1fbHRtID0gKGNvbnN0IHN0cnVjdCBjZm1fbHRtX3QgKil0cHRyOworICAgICAgICBpZiAoY2ZtX2NvbW1vbl9oZWFkZXItPmZpcnN0X3Rsdl9vZmZzZXQgPCBzaXplb2YoKm1zZ19wdHIuY2ZtX2x0bSkpIHsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKHRvbyBzbWFsbCA0LCBtdXN0IGJlID49ICVsdSkiLAorICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZigqbXNnX3B0ci5jZm1fbHRtKSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGlmICh0bGVuIDwgc2l6ZW9mKCptc2dfcHRyLmNmbV9sdG0pKQorICAgICAgICAgICAgZ290byB0b29zaG9ydDsKKyAgICAgICAgTkRfVENIRUNLKCptc2dfcHRyLmNmbV9sdG0pOwogCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIEZsYWdzIFslc10iLAogICAgICAgICAgICAgICAgYml0dG9rMnN0cihjZm1fbHRtX2ZsYWdfdmFsdWVzLCAibm9uZSIsIGNmbV9jb21tb25faGVhZGVyLT5mbGFncykpKTsKIAotICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgVHJhbnNhY3Rpb24tSUQgMHglMDh4LCBFZ3Jlc3MtSUQgJXMsIHR0bCAldSIsCisgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBUcmFuc2FjdGlvbi1JRCAweCUwOHgsIHR0bCAldSIsCiAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhtc2dfcHRyLmNmbV9sdG0tPnRyYW5zYWN0aW9uX2lkKSwKLSAgICAgICAgICAgICAgIGNmbV9lZ3Jlc3NfaWRfc3RyaW5nKG5kbywgbXNnX3B0ci5jZm1fbHRtLT5lZ3Jlc3NfaWQpLAogICAgICAgICAgICAgICAgbXNnX3B0ci5jZm1fbHRtLT50dGwpKTsKIAogICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgT3JpZ2luYWwtTUFDICVzLCBUYXJnZXQtTUFDICVzIiwKQEAgLTQzMiwxNiArNDY5LDIwIEBACiAKICAgICBjYXNlIENGTV9PUENPREVfTFRSOgogICAgICAgICBtc2dfcHRyLmNmbV9sdHIgPSAoY29uc3Qgc3RydWN0IGNmbV9sdHJfdCAqKXRwdHI7CisgICAgICAgIGlmIChjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldCA8IHNpemVvZigqbXNnX3B0ci5jZm1fbHRyKSkgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodG9vIHNtYWxsIDUsIG11c3QgYmUgPj0gJWx1KSIsCisgICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZW9mKCptc2dfcHRyLmNmbV9sdHIpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKHRsZW4gPCBzaXplb2YoKm1zZ19wdHIuY2ZtX2x0cikpCisgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgICAgICBORF9UQ0hFQ0soKm1zZ19wdHIuY2ZtX2x0cik7CiAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgRmxhZ3MgWyVzXSIsCiAgICAgICAgICAgICAgICBiaXR0b2syc3RyKGNmbV9sdHJfZmxhZ192YWx1ZXMsICJub25lIiwgY2ZtX2NvbW1vbl9oZWFkZXItPmZsYWdzKSkpOwogCi0gICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBUcmFuc2FjdGlvbi1JRCAweCUwOHgsIExhc3QtRWdyZXNzLUlEICVzIiwKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIFRyYW5zYWN0aW9uLUlEIDB4JTA4eCwgdHRsICV1IiwKICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKG1zZ19wdHIuY2ZtX2x0ci0+dHJhbnNhY3Rpb25faWQpLAotICAgICAgICAgICAgICAgY2ZtX2VncmVzc19pZF9zdHJpbmcobmRvLCBtc2dfcHRyLmNmbV9sdHItPmxhc3RfZWdyZXNzX2lkKSkpOwotCi0gICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBOZXh0LUVncmVzcy1JRCAlcywgdHRsICV1IiwKLSAgICAgICAgICAgICAgIGNmbV9lZ3Jlc3NfaWRfc3RyaW5nKG5kbywgbXNnX3B0ci5jZm1fbHRyLT5uZXh0X2VncmVzc19pZCksCiAgICAgICAgICAgICAgICBtc2dfcHRyLmNmbV9sdHItPnR0bCkpOwogCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBSZXBsYXktQWN0aW9uICVzICgldSkiLApAQCAtNDU4LDIwICs0OTksMTEgQEAKICAgICBjYXNlIENGTV9PUENPREVfTEJSOgogICAgIGNhc2UgQ0ZNX09QQ09ERV9MQk06CiAgICAgZGVmYXVsdDoKLSAgICAgICAgaWYgKHRsZW4gPiBjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldCkgewotICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0ciwgIlxuXHQgICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGxlbiAtICBjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldCk7Ci0gICAgICAgIH0KKyAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0ciwgIlxuXHQgICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICB0bGVuIC0gIGNmbV9jb21tb25faGVhZGVyLT5maXJzdF90bHZfb2Zmc2V0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgLyoKLSAgICAgKiBTYW5pdHkgY2hlY2sgZm9yIG5vdCB3YWxraW5nIG9mZi4KLSAgICAgKi8KLSAgICBpZiAodGxlbiA8PSBjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldCkgewotICAgICAgICByZXR1cm47Ci0gICAgfQotCiAgICAgdHB0ciArPSBjZm1fY29tbW9uX2hlYWRlci0+Zmlyc3RfdGx2X29mZnNldDsKICAgICB0bGVuIC09IGNmbV9jb21tb25faGVhZGVyLT5maXJzdF90bHZfb2Zmc2V0OwogCkBAIC00ODIsNTUgKzUxNCw1OSBAQAogICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCAxKTsKICAgICAgICAgY2ZtX3Rsdl90eXBlPWNmbV90bHZfaGVhZGVyLT50eXBlOwogCi0gICAgICAgIGlmIChjZm1fdGx2X3R5cGUgIT0gQ0ZNX1RMVl9FTkQpIHsKLSAgICAgICAgICAgIC8qIGRpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgZnVsbHkgZGVjb2RpbmcgdGhlIG9iamVjdCBoZWFkZXIgPyAqLwotICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgc2l6ZW9mKHN0cnVjdCBjZm1fdGx2X2hlYWRlcl90KSk7Ci0gICAgICAgICAgICBjZm1fdGx2X2xlbj1FWFRSQUNUXzE2QklUUygmY2ZtX3Rsdl9oZWFkZXItPmxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBjZm1fdGx2X2xlbiA9IDA7Ci0gICAgICAgIH0KLQotICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCVzIFRMViAoMHglMDJ4KSwgbGVuZ3RoICV1IiwKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQlcyBUTFYgKDB4JTAyeCkiLAogICAgICAgICAgICAgICAgdG9rMnN0cihjZm1fdGx2X3ZhbHVlcywgIlVua25vd24iLCBjZm1fdGx2X3R5cGUpLAotICAgICAgICAgICAgICAgY2ZtX3Rsdl90eXBlLAotICAgICAgICAgICAgICAgY2ZtX3Rsdl9sZW4pKTsKKyAgICAgICAgICAgICAgIGNmbV90bHZfdHlwZSkpOwogCi0gICAgICAgIC8qIHNhbml0eSBjaGVjayBmb3Igbm90IHdhbGtpbmcgb2ZmIGFuZCBpbmZpbml0ZSBsb29wIGNoZWNrLiAqLwotICAgICAgICBpZiAoKGNmbV90bHZfdHlwZSAhPSBDRk1fVExWX0VORCkgJiYKLSAgICAgICAgICAgICgoY2ZtX3Rsdl9sZW4gKyBzaXplb2Yoc3RydWN0IGNmbV90bHZfaGVhZGVyX3QpID4gdGxlbikgfHwKLSAgICAgICAgICAgICAoIWNmbV90bHZfbGVuKSkpIHsKLSAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHRwdHIsICJcblx0ICAiLCB0bGVuKTsKKyAgICAgICAgaWYgKGNmbV90bHZfdHlwZSA9PSBDRk1fVExWX0VORCkgeworICAgICAgICAgICAgLyogTGVuZ3RoIGlzICJOb3QgcHJlc2VudCBpZiB0aGUgVHlwZSBmaWVsZCBpcyAwLiIgKi8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIC8qIGRvIHdlIGhhdmUgdGhlIGZ1bGwgdGx2IGhlYWRlciA/ICovCisgICAgICAgIGlmICh0bGVuIDwgc2l6ZW9mKHN0cnVjdCBjZm1fdGx2X2hlYWRlcl90KSkKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CisgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgY2ZtX3Rsdl9oZWFkZXJfdCkpOworICAgICAgICBjZm1fdGx2X2xlbj1FWFRSQUNUXzE2QklUUygmY2ZtX3Rsdl9oZWFkZXItPmxlbmd0aCk7CisKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgbGVuZ3RoICV1IiwgY2ZtX3Rsdl9sZW4pKTsKKwogICAgICAgICB0cHRyICs9IHNpemVvZihzdHJ1Y3QgY2ZtX3Rsdl9oZWFkZXJfdCk7CiAgICAgICAgIHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBjZm1fdGx2X2hlYWRlcl90KTsKICAgICAgICAgdGx2X3B0ciA9IHRwdHI7CiAKLSAgICAgICAgLyogZGlkIHdlIGNhcHR1cmUgZW5vdWdoIGZvciBmdWxseSBkZWNvZGluZyB0aGUgb2JqZWN0ID8gKi8KLSAgICAgICAgaWYgKGNmbV90bHZfdHlwZSAhPSBDRk1fVExWX0VORCkgewotICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgY2ZtX3Rsdl9sZW4pOwotICAgICAgICB9CisgICAgICAgIC8qIGRvIHdlIGhhdmUgdGhlIGZ1bGwgdGx2ID8gKi8KKyAgICAgICAgaWYgKHRsZW4gPCBjZm1fdGx2X2xlbikKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CisgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIGNmbV90bHZfbGVuKTsKICAgICAgICAgaGV4ZHVtcCA9IEZBTFNFOwogCiAgICAgICAgIHN3aXRjaChjZm1fdGx2X3R5cGUpIHsKLSAgICAgICAgY2FzZSBDRk1fVExWX0VORDoKLSAgICAgICAgICAgIC8qIHdlIGFyZSBkb25lIC0gYmFpbCBvdXQgKi8KLSAgICAgICAgICAgIHJldHVybjsKLQogICAgICAgICBjYXNlIENGTV9UTFZfUE9SVF9TVEFUVVM6CisgICAgICAgICAgICBpZiAoY2ZtX3Rsdl9sZW4gPCAxKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodG9vIHNob3J0LCBtdXN0IGJlID49IDEpIikpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIFN0YXR1czogJXMgKCV1KSIsCiAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihjZm1fdGx2X3BvcnRfc3RhdHVzX3ZhbHVlcywgIlVua25vd24iLCAqdHB0ciksCiAgICAgICAgICAgICAgICAgICAgKnRwdHIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ0ZNX1RMVl9JTlRFUkZBQ0VfU1RBVFVTOgorICAgICAgICAgICAgaWYgKGNmbV90bHZfbGVuIDwgMSkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKHRvbyBzaG9ydCwgbXVzdCBiZSA+PSAxKSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBTdGF0dXM6ICVzICgldSkiLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIoY2ZtX3Rsdl9pbnRlcmZhY2Vfc3RhdHVzX3ZhbHVlcywgIlVua25vd24iLCAqdHB0ciksCiAgICAgICAgICAgICAgICAgICAgKnRwdHIpKTsKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ0ZNX1RMVl9QUklWQVRFOgorICAgICAgICAgICAgaWYgKGNmbV90bHZfbGVuIDwgNCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKHRvbyBzaG9ydCwgbXVzdCBiZSA+PSA0KSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBWZW5kb3I6ICVzICgldSksIFN1Yi1UeXBlICV1IiwKICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG91aV92YWx1ZXMsIlVua25vd24iLCBFWFRSQUNUXzI0QklUUyh0cHRyKSksCiAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8yNEJJVFModHB0ciksCkBAIC01NDMsMjAgKzU3OSwyNiBAQAogICAgICAgICAgICAgdV9pbnQgY2hhc3Npc19pZF90eXBlLCBjaGFzc2lzX2lkX2xlbmd0aDsKICAgICAgICAgICAgIHVfaW50IG1nbXRfYWRkcl9sZW5ndGg7CiAKLSAgICAgICAgICAgIC8qCi0gICAgICAgICAgICAgKiBDaGVjayBpZiB0aGVyZSBpcyBhIENoYXNzaXMtSUQuCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIGNoYXNzaXNfaWRfbGVuZ3RoID0gKnRwdHI7Ci0gICAgICAgICAgICBpZiAoY2hhc3Npc19pZF9sZW5ndGggPiB0bGVuKSB7Ci0gICAgICAgICAgICAgICAgaGV4ZHVtcCA9IFRSVUU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBpZiAoY2ZtX3Rsdl9sZW4gPCAxKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodG9vIHNob3J0LCBtdXN0IGJlID49IDEpIikpOworICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KIAorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIEdldCB0aGUgQ2hhc3NpcyBJRCBsZW5ndGggYW5kIGNoZWNrIGl0LgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBjaGFzc2lzX2lkX2xlbmd0aCA9ICp0cHRyOwogICAgICAgICAgICAgdHB0cisrOwogICAgICAgICAgICAgdGxlbi0tOworICAgICAgICAgICAgY2ZtX3Rsdl9sZW4tLTsKIAogICAgICAgICAgICAgaWYgKGNoYXNzaXNfaWRfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgaWYgKGNmbV90bHZfbGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgKFRMViB0b28gc2hvcnQpIikpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGNoYXNzaXNfaWRfdHlwZSA9ICp0cHRyOworICAgICAgICAgICAgICAgIGNmbV90bHZfbGVuLS07CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIENoYXNzaXMtSUQgVHlwZSAlcyAoJXUpLCBDaGFzc2lzLUlEIGxlbmd0aCAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoY2ZtX3Rsdl9zZW5kZXJpZF9jaGFzc2lzaWRfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duIiwKQEAgLTU2NCwxMyArNjA2LDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXNzaXNfaWRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgY2hhc3Npc19pZF9sZW5ndGgpKTsKIAorICAgICAgICAgICAgICAgIGlmIChjZm1fdGx2X2xlbiA8IGNoYXNzaXNfaWRfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAoVExWIHRvbyBzaG9ydCkiKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKICAgICAgICAgICAgICAgICBzd2l0Y2ggKGNoYXNzaXNfaWRfdHlwZSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ0ZNX0NIQVNTSVNfSURfTUFDX0FERFJFU1M6CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNQUMgJXMiLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgdHB0ciArIDEpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICAgICAgY2FzZSBDRk1fQ0hBU1NJU19JRF9ORVRXT1JLX0FERFJFU1M6Ci0gICAgICAgICAgICAgICAgICAgIGhleGR1bXAgfD0gY2ZtX21nbXRfYWRkcl9wcmludChuZG8sIHRwdHIpOworICAgICAgICAgICAgICAgICAgICBoZXhkdW1wIHw9IGNmbV9uZXR3b3JrX2FkZHJfcHJpbnQobmRvLCB0cHRyKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIENGTV9DSEFTU0lTX0lEX0lOVEVSRkFDRV9OQU1FOiAvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTU4NSwzMiArNjMyLDYwIEBACiAgICAgICAgICAgICAgICAgICAgIGhleGR1bXAgPSBUUlVFOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgY2ZtX3Rsdl9sZW4gLT0gY2hhc3Npc19pZF9sZW5ndGg7CiAKLSAgICAgICAgICAgIHRwdHIgKz0gY2hhc3Npc19pZF9sZW5ndGg7Ci0gICAgICAgICAgICB0bGVuIC09IGNoYXNzaXNfaWRfbGVuZ3RoOworICAgICAgICAgICAgICAgIHRwdHIgKz0gMSArIGNoYXNzaXNfaWRfbGVuZ3RoOworICAgICAgICAgICAgICAgIHRsZW4gLT0gMSArIGNoYXNzaXNfaWRfbGVuZ3RoOworICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKgogICAgICAgICAgICAgICogQ2hlY2sgaWYgdGhlcmUgaXMgYSBNYW5hZ2VtZW50IEFkZHJlc3MuCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG1nbXRfYWRkcl9sZW5ndGggPSAqdHB0cjsKLSAgICAgICAgICAgIGlmIChtZ210X2FkZHJfbGVuZ3RoID4gdGxlbikgewotICAgICAgICAgICAgICAgIGhleGR1bXAgPSBUUlVFOwotICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgaWYgKGNmbV90bHZfbGVuID09IDApIHsKKyAgICAgICAgICAgICAgICAvKiBObywgdGhlcmUgaXNuJ3Q7IHdlJ3JlIGRvbmUuICovCisgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBtZ210X2FkZHJfbGVuZ3RoID0gKnRwdHI7CiAgICAgICAgICAgICB0cHRyKys7CiAgICAgICAgICAgICB0bGVuLS07Ci0KKyAgICAgICAgICAgIGNmbV90bHZfbGVuLS07CiAgICAgICAgICAgICBpZiAobWdtdF9hZGRyX2xlbmd0aCkgewotICAgICAgICAgICAgICAgIGhleGR1bXAgfD0gY2ZtX21nbXRfYWRkcl9wcmludChuZG8sIHRwdHIpOworICAgICAgICAgICAgICAgIGlmIChjZm1fdGx2X2xlbiA8IG1nbXRfYWRkcl9sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIChUTFYgdG9vIHNob3J0KSIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBjZm1fdGx2X2xlbiAtPSBtZ210X2FkZHJfbGVuZ3RoOworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogWFhYIC0gdGhpcyBpcyBhbiBPSUQ7IHByaW50IGl0IGFzIHN1Y2guCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgdHB0ciArPSBtZ210X2FkZHJfbGVuZ3RoOworICAgICAgICAgICAgICAgIHRsZW4gLT0gbWdtdF9hZGRyX2xlbmd0aDsKKworICAgICAgICAgICAgICAgIGlmIChjZm1fdGx2X2xlbiA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIChUTFYgdG9vIHNob3J0KSIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBtZ210X2FkZHJfbGVuZ3RoID0gKnRwdHI7CisgICAgICAgICAgICAgICAgdHB0cisrOworICAgICAgICAgICAgICAgIHRsZW4tLTsKKyAgICAgICAgICAgICAgICBjZm1fdGx2X2xlbi0tOworICAgICAgICAgICAgICAgIGlmIChtZ210X2FkZHJfbGVuZ3RoKSB7CisgICAgICAgICAgICAgICAgICAgIGlmIChjZm1fdGx2X2xlbiA8IG1nbXRfYWRkcl9sZW5ndGgpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAoVExWIHRvbyBzaG9ydCkiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY2ZtX3Rsdl9sZW4gLT0gbWdtdF9hZGRyX2xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogWFhYIC0gdGhpcyBpcyBhIFRyYW5zcG9ydERvbWFpbjsgcHJpbnQgaXQgYXMgc3VjaC4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIHRwdHIgKz0gbWdtdF9hZGRyX2xlbmd0aDsKKyAgICAgICAgICAgICAgICAgICAgdGxlbiAtPSBtZ210X2FkZHJfbGVuZ3RoOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgdHB0ciArPSBtZ210X2FkZHJfbGVuZ3RoOwotICAgICAgICAgICAgdGxlbiAtPSBtZ210X2FkZHJfbGVuZ3RoOwotCisgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgLyoKICAgICAgICAgICAgICAqIEZJWE1FIHRob3NlIGFyZSB0aGUgZGVmaW5lZCBUTFZzIHRoYXQgbGFjayBhIGRlY29kZXIKQEAgLTYzMiw2ICs3MDcsMTEgQEAKICAgICAgICAgdGxlbi09Y2ZtX3Rsdl9sZW47CiAgICAgfQogICAgIHJldHVybjsKKwordG9vc2hvcnQ6CisgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdCBwYWNrZXQgaXMgdG9vIHNob3J0IikpOworICAgIHJldHVybjsKKwogdHJ1bmM6CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdCBwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QiKSk7CiB9CmRpZmYgLS1naXQgYS9wcmludC1jaGRsYy5jIGIvcHJpbnQtY2hkbGMuYwppbmRleCAzOTUxZWY3Li40NTBkMjg2IDEwMDY0NAotLS0gYS9wcmludC1jaGRsYy5jCisrKyBiL3ByaW50LWNoZGxjLmMKQEAgLTE5LDE0ICsxOSwxNSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBDaXNjbyBIRExDIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJldGhlcnR5cGUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCkBAIC05Niw5ICs5Nyw5IEBACiAgICAgICAgICAgICAgICAgaWYgKCoocCsxKSA9PSAweDgxIHx8CiAgICAgICAgICAgICAgICAgICAgICoocCsxKSA9PSAweDgyIHx8CiAgICAgICAgICAgICAgICAgICAgICoocCsxKSA9PSAweDgzKQotICAgICAgICAgICAgICAgICAgICBpc29jbG5zX3ByaW50KG5kbywgcCArIDEsIGxlbmd0aCAtIDEsIGxlbmd0aCAtIDEpOworICAgICAgICAgICAgICAgICAgICBpc29jbG5zX3ByaW50KG5kbywgcCArIDEsIGxlbmd0aCAtIDEsIG5kby0+bmRvX3NuYXBlbmQgLSBwIC0gMSk7CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBpc29jbG5zX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBsZW5ndGgpOworICAgICAgICAgICAgICAgICAgICBpc29jbG5zX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBuZG8tPm5kb19zbmFwZW5kIC0gcCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAJZGVmYXVsdDoKICAgICAgICAgICAgICAgICBpZiAoIW5kby0+bmRvX2VmbGFnKQpkaWZmIC0tZ2l0IGEvcHJpbnQtY2lwLmMgYi9wcmludC1jaXAuYwppbmRleCA5MWFiZTA4Li5hMTIzYjY5IDEwMDY0NAotLS0gYS9wcmludC1jaXAuYworKysgYi9wcmludC1jaXAuYwpAQCAtMjAsMjAgKzIwLDE5IEBACiAgKgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IENsYXNzaWNhbC1JUCBvdmVyIEFUTSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKIAotI2RlZmluZSBSRkMxNDgzTExDX0xFTgk4Ci0KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHJmY2xsY1tdID0gewogCTB4YWEsCS8qIERTQVA6IG5vbi1JU08gKi8KIAkweGFhLAkvKiBTU0FQOiBub24tSVNPICovCkBAIC00MywxMiArNDIsMTIgQEAKIAkweDAwIH07CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAotY2lwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBpbnQgbGVuZ3RoKQorY2lwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X2ludCBsZW5ndGgpCiB7CiAJLyoKIAkgKiBUaGVyZSBpcyBubyBNQUMtbGF5ZXIgaGVhZGVyLCBzbyBqdXN0IHByaW50IHRoZSBsZW5ndGguCiAJICovCi0JTkRfUFJJTlQoKG5kbywgIiVkOiAiLCBsZW5ndGgpKTsKKwlORF9QUklOVCgobmRvLCAiJXU6ICIsIGxlbmd0aCkpOwogfQogCiAvKgpAQCAtNjIsNDAgKzYxLDQyIEBACiB7CiAJdV9pbnQgY2FwbGVuID0gaC0+Y2FwbGVuOwogCXVfaW50IGxlbmd0aCA9IGgtPmxlbjsKLQl1X3Nob3J0IGV4dHJhY3RlZF9ldGhlcnR5cGU7CisJc2l6ZV90IGNtcGxlbjsKKwlpbnQgbGxjX2hkcmxlbjsKIAotCWlmIChtZW1jbXAocmZjbGxjLCBwLCBzaXplb2YocmZjbGxjKSk9PTAgJiYgY2FwbGVuIDwgUkZDMTQ4M0xMQ19MRU4pIHsKLQkJTkRfUFJJTlQoKG5kbywgIlt8Y2lwXSIpKTsKLQkJcmV0dXJuICgwKTsKLQl9CisJY21wbGVuID0gc2l6ZW9mKHJmY2xsYyk7CisJaWYgKGNtcGxlbiA+IGNhcGxlbikKKwkJY21wbGVuID0gY2FwbGVuOworCWlmIChjbXBsZW4gPiBsZW5ndGgpCisJCWNtcGxlbiA9IGxlbmd0aDsKIAogCWlmIChuZG8tPm5kb19lZmxhZykKIAkJY2lwX3ByaW50KG5kbywgbGVuZ3RoKTsKIAotCWlmIChtZW1jbXAocmZjbGxjLCBwLCBzaXplb2YocmZjbGxjKSkgPT0gMCkgeworCWlmIChjbXBsZW4gPT0gMCkgeworCQlORF9QUklOVCgobmRvLCAiW3xjaXBdIikpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKG1lbWNtcChyZmNsbGMsIHAsIGNtcGxlbikgPT0gMCkgewogCQkvKgogCQkgKiBMTEMgaGVhZGVyIGlzIHByZXNlbnQuICBUcnkgdG8gcHJpbnQgaXQgJiBoaWdoZXIgbGF5ZXJzLgogCQkgKi8KLQkJaWYgKGxsY19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuLCBOVUxMLCBOVUxMLAotCQkgICAgJmV4dHJhY3RlZF9ldGhlcnR5cGUpID09IDApIHsKLQkJCS8qIGV0aGVyX3R5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCi0JCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJCWNpcF9wcmludChuZG8sIGxlbmd0aCk7Ci0JCQlpZiAoZXh0cmFjdGVkX2V0aGVydHlwZSkgewotCQkJCU5EX1BSSU5UKChuZG8sICIoTExDICVzKSAiLAotCQkJICAgICAgIGV0aGVycHJvdG9fc3RyaW5nKGh0b25zKGV4dHJhY3RlZF9ldGhlcnR5cGUpKSkpOwotCQkJfQorCQlsbGNfaGRybGVuID0gbGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIE5VTEwsIE5VTEwpOworCQlpZiAobGxjX2hkcmxlbiA8IDApIHsKKwkJCS8qIHBhY2tldCB0eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLwogCQkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJCU5EX0RFRkFVTFRQUklOVChwLCBjYXBsZW4pOworCQkJbGxjX2hkcmxlbiA9IC1sbGNfaGRybGVuOwogCQl9CiAJfSBlbHNlIHsKIAkJLyoKIAkJICogTExDIGhlYWRlciBpcyBhYnNlbnQ7IHRyZWF0IGl0IGFzIGp1c3QgSVAuCiAJCSAqLworCQlsbGNfaGRybGVuID0gMDsKIAkJaXBfcHJpbnQobmRvLCBwLCBsZW5ndGgpOwogCX0KIAotCXJldHVybiAoMCk7CisJcmV0dXJuIChsbGNfaGRybGVuKTsKIH0KIAogCmRpZmYgLS1naXQgYS9wcmludC1jbmZwLmMgYi9wcmludC1jbmZwLmMKaW5kZXggZDgwZDdmZC4uZTNlOWI2ZCAxMDA2NDQKLS0tIGEvcHJpbnQtY25mcC5jCisrKyBiL3ByaW50LWNuZnAuYwpAQCAtMzAsNiArMzAsOCBAQAogICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisvKiBcc3VtbWFyeTogQ2lzY28gTmV0RmxvdyBwcm90b2NvbCBwcmludGVyICovCisKIC8qCiAgKiBDaXNjbyBOZXRGbG93IHByb3RvY29sCiAgKgpAQCAtMzgsMTcgKzQwLDE2IEBACiAgKiAgICBodHRwOi8vd3d3LmNpc2NvLmNvbS9jL2VuL3VzL3RkL2RvY3MvbmV0X21nbXQvbmV0Zmxvd19jb2xsZWN0aW9uX2VuZ2luZS8zLTYvdXNlci9ndWlkZS9mb3JtYXQuaHRtbCN3cDEwMDU4OTIKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApkaWZmIC0tZ2l0IGEvcHJpbnQtZGNjcC5jIGIvcHJpbnQtZGNjcC5jCmluZGV4IDQ1NDY4YjUuLjZlMjUyNjQgMTAwNjQ0Ci0tLSBhL3ByaW50LWRjY3AuYworKysgYi9wcmludC1kY2NwLmMKQEAgLTcsMjMgKzcsMjIgQEAKICAqIEJTRC1zdHlsZSBsaWNlbnNlIHRoYXQgYWNjb21wYW5pZXMgdGNwZHVtcCBvciB0aGUgR05VIEdQTCB2ZXJzaW9uIDIKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBEYXRhZ3JhbSBDb25nZXN0aW9uIENvbnRyb2wgUHJvdG9jb2wgKERDQ1ApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCi0jaW5jbHVkZSAiZXh0cmFjdC5oIgkJCS8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJpcC5oIgotI2lmZGVmIElORVQ2CiAjaW5jbHVkZSAiaXA2LmgiCi0jZW5kaWYKICNpbmNsdWRlICJpcHByb3RvLmgiCiAKIC8qIFJGQzQzNDA6IERhdGFncmFtIENvbmdlc3Rpb24gQ29udHJvbCBQcm90b2NvbCAoRENDUCkgKi8KQEAgLTIwMSwxNyArMjAwLDE2IEBACiBzdGF0aWMgaW50IGRjY3BfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBpcCAqaXAsCiAJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwgdV9pbnQgbGVuKQogewotCXJldHVybiBuZXh0cHJvdG80X2Nrc3VtKG5kbywgaXAsIChjb25zdCB1aW50OF90ICopKHZvaWQgKilkaCwgbGVuLAorCXJldHVybiBuZXh0cHJvdG80X2Nrc3VtKG5kbywgaXAsIChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKilkaCwgbGVuLAogCQkJCWRjY3BfY3N1bV9jb3ZlcmFnZShkaCwgbGVuKSwgSVBQUk9UT19EQ0NQKTsKIH0KIAotI2lmZGVmIElORVQ2Ci1zdGF0aWMgaW50IGRjY3A2X2Nrc3VtKGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYsIGNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGgsIHVfaW50IGxlbikKK3N0YXRpYyBpbnQgZGNjcDZfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYsCisJY29uc3Qgc3RydWN0IGRjY3BfaGRyICpkaCwgdV9pbnQgbGVuKQogewotCXJldHVybiBuZXh0cHJvdG82X2Nrc3VtKGlwNiwgKGNvbnN0IHVpbnQ4X3QgKikodm9pZCAqKWRoLCBsZW4sCisJcmV0dXJuIG5leHRwcm90bzZfY2tzdW0obmRvLCBpcDYsIChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKilkaCwgbGVuLAogCQkJCWRjY3BfY3N1bV9jb3ZlcmFnZShkaCwgbGVuKSwgSVBQUk9UT19EQ0NQKTsKIH0KLSNlbmRpZgogCiBzdGF0aWMgY29uc3QgY2hhciAqZGNjcF9yZXNldF9jb2RlKHVpbnQ4X3QgY29kZSkKIHsKQEAgLTI3Miw5ICsyNzAsNyBAQAogewogCWNvbnN0IHN0cnVjdCBkY2NwX2hkciAqZGg7CiAJY29uc3Qgc3RydWN0IGlwICppcDsKLSNpZmRlZiBJTkVUNgogCWNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKIAljb25zdCB1X2NoYXIgKmNwOwogCXVfc2hvcnQgc3BvcnQsIGRwb3J0OwogCXVfaW50IGhsZW47CkBAIC0yODMsMTMgKzI3OSwxMSBAQAogCiAJZGggPSAoY29uc3Qgc3RydWN0IGRjY3BfaGRyICopYnA7CiAKLQlpcCA9IChzdHJ1Y3QgaXAgKilkYXRhMjsKLSNpZmRlZiBJTkVUNgorCWlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWRhdGEyOwogCWlmIChJUF9WKGlwKSA9PSA2KQogCQlpcDYgPSAoY29uc3Qgc3RydWN0IGlwNl9oZHIgKilkYXRhMjsKIAllbHNlCiAJCWlwNiA9IE5VTEw7Ci0jZW5kaWYgLypJTkVUNiovCiAKIAkvKiBtYWtlIHN1cmUgd2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBsb29rIGF0IHRoZSBYIGJpdCAqLwogCWNwID0gKGNvbnN0IHVfY2hhciAqKShkaCArIDEpOwpAQCAtMzE2LDE0ICszMTAsMTEgQEAKIAlkcG9ydCA9IEVYVFJBQ1RfMTZCSVRTKCZkaC0+ZGNjcGhfZHBvcnQpOwogCWhsZW4gPSBkaC0+ZGNjcGhfZG9mZiAqIDQ7CiAKLSNpZmRlZiBJTkVUNgogCWlmIChpcDYpIHsKIAkJTkRfUFJJTlQoKG5kbywgIiVzLiVkID4gJXMuJWQ6ICIsCiAJCQkgIGlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X3NyYyksIHNwb3J0LAogCQkJICBpcDZhZGRyX3N0cmluZyhuZG8sICZpcDYtPmlwNl9kc3QpLCBkcG9ydCkpOwotCX0gZWxzZQotI2VuZGlmIC8qSU5FVDYqLwotCXsKKwl9IGVsc2UgewogCQlORF9QUklOVCgobmRvLCAiJXMuJWQgPiAlcy4lZDogIiwKIAkJCSAgaXBhZGRyX3N0cmluZyhuZG8sICZpcC0+aXBfc3JjKSwgc3BvcnQsCiAJCQkgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX2RzdCksIGRwb3J0KSk7CkBAIC0zNTMsMTAgKzM0NCw4IEBACiAJCU5EX1BSSU5UKChuZG8sICJja3N1bSAweCUwNHggIiwgZGNjcF9zdW0pKTsKIAkJaWYgKElQX1YoaXApID09IDQpCiAJCQlzdW0gPSBkY2NwX2Nrc3VtKG5kbywgaXAsIGRoLCBsZW4pOwotI2lmZGVmIElORVQ2CiAJCWVsc2UgaWYgKElQX1YoaXApID09IDYpCi0JCQlzdW0gPSBkY2NwNl9ja3N1bShpcDYsIGRoLCBsZW4pOwotI2VuZGlmCisJCQlzdW0gPSBkY2NwNl9ja3N1bShuZG8sIGlwNiwgZGgsIGxlbik7CiAJCWlmIChzdW0gIT0gMCkKIAkJCU5EX1BSSU5UKChuZG8sICIoaW5jb3JyZWN0IC0+IDB4JTA0eCkiLGluX2Nrc3VtX3Nob3VsZGJlKGRjY3Bfc3VtLCBzdW0pKSk7CiAJCWVsc2UKQEAgLTM3MCw4ICszNTksOCBAQAogCWRjY3BoX3R5cGUgPSBEQ0NQSF9UWVBFKGRoKTsKIAlzd2l0Y2ggKGRjY3BoX3R5cGUpIHsKIAljYXNlIERDQ1BfUEtUX1JFUVVFU1Q6IHsKLQkJc3RydWN0IGRjY3BfaGRyX3JlcXVlc3QgKmRociA9Ci0JCQkoc3RydWN0IGRjY3BfaGRyX3JlcXVlc3QgKikoYnAgKyBmaXhlZF9oZHJsZW4pOworCQljb25zdCBzdHJ1Y3QgZGNjcF9oZHJfcmVxdWVzdCAqZGhyID0KKwkJCShjb25zdCBzdHJ1Y3QgZGNjcF9oZHJfcmVxdWVzdCAqKShicCArIGZpeGVkX2hkcmxlbik7CiAJCWZpeGVkX2hkcmxlbiArPSA0OwogCQlpZiAobGVuIDwgZml4ZWRfaGRybGVuKSB7CiAJCQlORF9QUklOVCgobmRvLCAidHJ1bmNhdGVkLSVzIC0gJXUgYnl0ZXMgbWlzc2luZyEiLApAQCAtMzg2LDggKzM3NSw4IEBACiAJCWJyZWFrOwogCX0KIAljYXNlIERDQ1BfUEtUX1JFU1BPTlNFOiB7Ci0JCXN0cnVjdCBkY2NwX2hkcl9yZXNwb25zZSAqZGhyID0KLQkJCShzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UgKikoYnAgKyBmaXhlZF9oZHJsZW4pOworCQljb25zdCBzdHJ1Y3QgZGNjcF9oZHJfcmVzcG9uc2UgKmRociA9CisJCQkoY29uc3Qgc3RydWN0IGRjY3BfaGRyX3Jlc3BvbnNlICopKGJwICsgZml4ZWRfaGRybGVuKTsKIAkJZml4ZWRfaGRybGVuICs9IDEyOwogCQlpZiAobGVuIDwgZml4ZWRfaGRybGVuKSB7CiAJCQlORF9QUklOVCgobmRvLCAidHJ1bmNhdGVkLSVzIC0gJXUgYnl0ZXMgbWlzc2luZyEiLApAQCAtNDQ3LDggKzQzNiw4IEBACiAJCU5EX1BSSU5UKChuZG8sICIlcyAiLCB0b2syc3RyKGRjY3BfcGt0X3R5cGVfc3RyLCAiIiwgZGNjcGhfdHlwZSkpKTsKIAkJYnJlYWs7CiAJY2FzZSBEQ0NQX1BLVF9SRVNFVDogewotCQlzdHJ1Y3QgZGNjcF9oZHJfcmVzZXQgKmRociA9Ci0JCQkoc3RydWN0IGRjY3BfaGRyX3Jlc2V0ICopKGJwICsgZml4ZWRfaGRybGVuKTsKKwkJY29uc3Qgc3RydWN0IGRjY3BfaGRyX3Jlc2V0ICpkaHIgPQorCQkJKGNvbnN0IHN0cnVjdCBkY2NwX2hkcl9yZXNldCAqKShicCArIGZpeGVkX2hkcmxlbik7CiAJCWZpeGVkX2hkcmxlbiArPSAxMjsKIAkJaWYgKGxlbiA8IGZpeGVkX2hkcmxlbikgewogCQkJTkRfUFJJTlQoKG5kbywgInRydW5jYXRlZC0lcyAtICV1IGJ5dGVzIG1pc3NpbmchIiwKQEAgLTQ5OCw3ICs0ODcsNiBAQAogCiAJLyogcHJvY2VzcyBvcHRpb25zICovCiAJaWYgKGhsZW4gPiBmaXhlZF9oZHJsZW4pewotCQljb25zdCB1X2NoYXIgKmNwOwogCQl1X2ludCBvcHRsZW47CiAJCWNwID0gYnAgKyBmaXhlZF9oZHJsZW47CiAJCU5EX1BSSU5UKChuZG8sICIgPCIpKTsKZGlmZiAtLWdpdCBhL3ByaW50LWRlY25ldC5jIGIvcHJpbnQtZGVjbmV0LmMKaW5kZXggNTQxNGVjMi4uODhhYTllMyAxMDA2NDQKLS0tIGEvcHJpbnQtZGVjbmV0LmMKKysrIGIvcHJpbnQtZGVjbmV0LmMKQEAgLTE5LDEyICsxOSwxMyBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBERUNuZXQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKIHN0cnVjdCBtYnVmOwogc3RydWN0IHJ0ZW50cnk7CkBAIC0zOCwxMiArMzksMTIgQEAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAogI2luY2x1ZGUgImV4dHJhY3QuaCIKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiW3xkZWNuZXRdIjsKIAotI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBfV0lOMzIKIHR5cGVkZWYgdWludDhfdCBieXRlWzFdOwkJLyogc2luZ2xlIGJ5dGUgZmllbGQgKi8KICNlbHNlCiAvKgpAQCAtNTEsNyArNTIsNyBAQAogICovCiB0eXBlZGVmIHVuc2lnbmVkIGNoYXIgQnl0ZVsxXTsJCS8qIHNpbmdsZSBieXRlIGZpZWxkICovCiAjZGVmaW5lIGJ5dGUgQnl0ZQotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogX1dJTjMyICovCiB0eXBlZGVmIHVpbnQ4X3Qgd29yZFsyXTsJCS8qIDIgYnl0ZSBmaWVsZCAqLwogdHlwZWRlZiB1aW50OF90IGxvbmd3b3JkWzRdOwkJLyogNCBieXRlcyBmaWVsZCAqLwogCkBAIC0zMjUsNyArMzI2LDYgQEAKICNkZWZpbmUgQ09TX05PTkUgMAkJCS8qIG5vIGZsb3cgY29udHJvbCAqLwogI2RlZmluZSBDT1NfU0VHTUVOVCAwNAkJCS8qIHNlZ21lbnQgZmxvdyBjb250cm9sICovCiAjZGVmaW5lIENPU19NRVNTQUdFIDAxMAkJCS8qIG1lc3NhZ2UgZmxvdyBjb250cm9sICovCi0jZGVmaW5lIENPU19DUllQVFNFUiAwMjAJCS8qIGNyeXB0b2dyYXBoaWMgc2VydmljZXMgcmVxdWVzdGVkICovCiAjZGVmaW5lIENPU19ERUZBVUxUIDEJCQkvKiBkZWZhdWx0IHZhbHVlIGZvciBmaWVsZCAqLwogCiAjZGVmaW5lIENPSV9NQVNLIDMJCQkvKiBtYXNrIGZvciB2ZXJzaW9uIGZpZWxkICovCkBAIC00OTEsOSArNDkxLDYgQEAKIHN0YXRpYyBpbnQgcHJpbnRfZWxpc3QoY29uc3QgY2hhciAqLCB1X2ludCk7CiBzdGF0aWMgaW50IHByaW50X25zcChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKIHN0YXRpYyB2b2lkIHByaW50X3JlYXNvbihuZXRkaXNzZWN0X29wdGlvbnMgKiwgaW50KTsKLSNpZmRlZglQUklOVF9OU1BEQVRBCi1zdGF0aWMgdm9pZCBwZGF0YShuZXRkaXNzZWN0X29wdGlvbnMgKiwgdV9jaGFyICosIHVfaW50KTsKLSNlbmRpZgogCiAjaWZuZGVmIEhBVkVfTkVURE5FVF9ETkVUREJfSF9ETkVUX0hUT0EKIGV4dGVybiBjaGFyICpkbmV0X2h0b2Eoc3RydWN0IGRuX25hZGRyICopOwpAQCAtNTg2LDcgKzU4Myw3IEBACiAJICAgIGJyZWFrOwogCWRlZmF1bHQ6CiAJICAgIE5EX1BSSU5UKChuZG8sICJ1bmtub3duIG1lc3NhZ2UgZmxhZ3MgdW5kZXIgbWFzayIpKTsKLQkgICAgTkRfREVGQVVMVFBSSU5UKCh1X2NoYXIgKilhcCwgbWluKGxlbmd0aCwgY2FwbGVuKSk7CisJICAgIE5EX0RFRkFVTFRQUklOVCgoY29uc3QgdV9jaGFyICopYXAsIG1pbihsZW5ndGgsIGNhcGxlbikpOwogCSAgICByZXR1cm47CiAJfQogCkBAIC02MTcsMTEgKzYxNCwxMSBAQAogICAgICAgICAgICAgICAgICAgICB1X2ludCBjYXBsZW4pCiB7CiAJaW50IG1mbGFncyA9IEVYVFJBQ1RfTEVfOEJJVFMocmhwLT5yaF9zaG9ydC5zaF9mbGFncyk7Ci0JcmVnaXN0ZXIgdW5pb24gY29udHJvbG1zZyAqY21wID0gKHVuaW9uIGNvbnRyb2xtc2cgKilyaHA7CisJcmVnaXN0ZXIgY29uc3QgdW5pb24gY29udHJvbG1zZyAqY21wID0gKGNvbnN0IHVuaW9uIGNvbnRyb2xtc2cgKilyaHA7CiAJaW50IHNyYywgZHN0LCBpbmZvLCBibGtzaXplLCBlY28sIHVlY28sIGhlbGxvLCBvdGhlciwgdmVyczsKIAlldGhlcmFkZHIgc3JjZWEsIHJ0ZWE7CiAJaW50IHByaW9yaXR5OwotCWNoYXIgKnJocHggPSAoY2hhciAqKXJocDsKKwljb25zdCBjaGFyICpyaHB4ID0gKGNvbnN0IGNoYXIgKilyaHA7CiAJaW50IHJldDsKIAogCXN3aXRjaCAobWZsYWdzICYgUk1GX0NUTE1BU0spIHsKQEAgLTY5Miw3ICs2ODksNyBAQAogCSAgICB2ZXJzID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX3JoZWxsby5yaF92ZXJzKTsKIAkgICAgZWNvID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX3JoZWxsby5yaF9lY28pOwogCSAgICB1ZWNvID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX3JoZWxsby5yaF91ZWNvKTsKLQkgICAgbWVtY3B5KChjaGFyICopJnNyY2VhLCAoY2hhciAqKSYoY21wLT5jbV9yaGVsbG8ucmhfc3JjKSwKKwkgICAgbWVtY3B5KChjaGFyICopJnNyY2VhLCAoY29uc3QgY2hhciAqKSYoY21wLT5jbV9yaGVsbG8ucmhfc3JjKSwKIAkJc2l6ZW9mKHNyY2VhKSk7CiAJICAgIHNyYyA9IEVYVFJBQ1RfTEVfMTZCSVRTKHNyY2VhLmRuZV9yZW1vdGUuZG5lX25vZGVhZGRyKTsKIAkgICAgaW5mbyA9IEVYVFJBQ1RfTEVfOEJJVFMoY21wLT5jbV9yaGVsbG8ucmhfaW5mbyk7CkBAIC03MTUsMTMgKzcxMiwxMyBAQAogCSAgICB2ZXJzID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX2VoZWxsby5laF92ZXJzKTsKIAkgICAgZWNvID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX2VoZWxsby5laF9lY28pOwogCSAgICB1ZWNvID0gRVhUUkFDVF9MRV84QklUUyhjbXAtPmNtX2VoZWxsby5laF91ZWNvKTsKLQkgICAgbWVtY3B5KChjaGFyICopJnNyY2VhLCAoY2hhciAqKSYoY21wLT5jbV9laGVsbG8uZWhfc3JjKSwKKwkgICAgbWVtY3B5KChjaGFyICopJnNyY2VhLCAoY29uc3QgY2hhciAqKSYoY21wLT5jbV9laGVsbG8uZWhfc3JjKSwKIAkJc2l6ZW9mKHNyY2VhKSk7CiAJICAgIHNyYyA9IEVYVFJBQ1RfTEVfMTZCSVRTKHNyY2VhLmRuZV9yZW1vdGUuZG5lX25vZGVhZGRyKTsKIAkgICAgaW5mbyA9IEVYVFJBQ1RfTEVfOEJJVFMoY21wLT5jbV9laGVsbG8uZWhfaW5mbyk7CiAJICAgIGJsa3NpemUgPSBFWFRSQUNUX0xFXzE2QklUUyhjbXAtPmNtX2VoZWxsby5laF9ibGtzaXplKTsKIAkgICAgLypzZWVkKi8KLQkgICAgbWVtY3B5KChjaGFyICopJnJ0ZWEsIChjaGFyICopJihjbXAtPmNtX2VoZWxsby5laF9yb3V0ZXIpLAorCSAgICBtZW1jcHkoKGNoYXIgKikmcnRlYSwgKGNvbnN0IGNoYXIgKikmKGNtcC0+Y21fZWhlbGxvLmVoX3JvdXRlciksCiAJCXNpemVvZihydGVhKSk7CiAJICAgIGRzdCA9IEVYVFJBQ1RfTEVfMTZCSVRTKHJ0ZWEuZG5lX3JlbW90ZS5kbmVfbm9kZWFkZHIpOwogCSAgICBoZWxsbyA9IEVYVFJBQ1RfTEVfMTZCSVRTKGNtcC0+Y21fZWhlbGxvLmVoX2hlbGxvKTsKQEAgLTczNiw3ICs3MzMsNyBAQAogCiAJZGVmYXVsdDoKIAkgICAgTkRfUFJJTlQoKG5kbywgInVua25vd24gY29udHJvbCBtZXNzYWdlIikpOwotCSAgICBORF9ERUZBVUxUUFJJTlQoKHVfY2hhciAqKXJocCwgbWluKGxlbmd0aCwgY2FwbGVuKSk7CisJICAgIE5EX0RFRkFVTFRQUklOVCgoY29uc3QgdV9jaGFyICopcmhwLCBtaW4obGVuZ3RoLCBjYXBsZW4pKTsKIAkgICAgcmV0ID0gMTsKIAkgICAgYnJlYWs7CiAJfQpAQCAtODU1LDcgKzg1Miw3IEBACiBwcmludF9uc3AobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgY29uc3QgdV9jaGFyICpuc3BwLCB1X2ludCBuc3BsZW4pCiB7Ci0JY29uc3Qgc3RydWN0IG5zcGhkciAqbnNwaHAgPSAoc3RydWN0IG5zcGhkciAqKW5zcHA7CisJY29uc3Qgc3RydWN0IG5zcGhkciAqbnNwaHAgPSAoY29uc3Qgc3RydWN0IG5zcGhkciAqKW5zcHA7CiAJaW50IGRzdCwgc3JjLCBmbGFnczsKIAogCWlmIChuc3BsZW4gPCBzaXplb2Yoc3RydWN0IG5zcGhkcikpCkBAIC04NzQsMTEgKzg3MSw4IEBACiAJICAgIGNhc2UgTUZTX0JPTStNRlNfRU9NOgogCQlORF9QUklOVCgobmRvLCAiZGF0YSAlZD4lZCAiLCBzcmMsIGRzdCkpOwogCQl7Ci0JCSAgICBzdHJ1Y3Qgc2VnaGRyICpzaHAgPSAoc3RydWN0IHNlZ2hkciAqKW5zcHA7CisJCSAgICBjb25zdCBzdHJ1Y3Qgc2VnaGRyICpzaHAgPSAoY29uc3Qgc3RydWN0IHNlZ2hkciAqKW5zcHA7CiAJCSAgICBpbnQgYWNrOwotI2lmZGVmCVBSSU5UX05TUERBVEEKLQkJICAgIHVfY2hhciAqZHA7Ci0jZW5kaWYKIAkJICAgIHVfaW50IGRhdGFfb2ZmID0gc2l6ZW9mKHN0cnVjdCBtaW5zZWdoZHIpOwogCiAJCSAgICBpZiAobnNwbGVuIDwgZGF0YV9vZmYpCkBAIC05MDgsMjMgKzkwMiwxMyBAQAogCQkJfQogCQkgICAgfQogCQkgICAgTkRfUFJJTlQoKG5kbywgInNlZyAlZCAiLCBhY2sgJiBTR1FfTUFTSykpOwotI2lmZGVmCVBSSU5UX05TUERBVEEKLQkJICAgIGlmIChuc3BsZW4gPiBkYXRhX29mZikgewotCQkJZHAgPSAmKG5zcHBbZGF0YV9vZmZdKTsKLQkJCU5EX1RDSEVDSzIoKmRwLCBuc3BsZW4gLSBkYXRhX29mZik7Ci0JCQlwZGF0YShuZG8sIGRwLCBuc3BsZW4gLSBkYXRhX29mZik7Ci0JCSAgICB9Ci0jZW5kaWYKIAkJfQogCQlicmVhazsKIAkgICAgY2FzZSBNRlNfSUxTK01GU19JTlQ6CiAJCU5EX1BSSU5UKChuZG8sICJpbnRyICIpKTsKIAkJewotCQkgICAgc3RydWN0IHNlZ2hkciAqc2hwID0gKHN0cnVjdCBzZWdoZHIgKiluc3BwOworCQkgICAgY29uc3Qgc3RydWN0IHNlZ2hkciAqc2hwID0gKGNvbnN0IHN0cnVjdCBzZWdoZHIgKiluc3BwOwogCQkgICAgaW50IGFjazsKLSNpZmRlZglQUklOVF9OU1BEQVRBCi0JCSAgICB1X2NoYXIgKmRwOwotI2VuZGlmCiAJCSAgICB1X2ludCBkYXRhX29mZiA9IHNpemVvZihzdHJ1Y3QgbWluc2VnaGRyKTsKIAogCQkgICAgaWYgKG5zcGxlbiA8IGRhdGFfb2ZmKQpAQCAtOTU0LDIxICs5MzgsMTQgQEAKIAkJCX0KIAkJICAgIH0KIAkJICAgIE5EX1BSSU5UKChuZG8sICJzZWcgJWQgIiwgYWNrICYgU0dRX01BU0spKTsKLSNpZmRlZglQUklOVF9OU1BEQVRBCi0JCSAgICBpZiAobnNwbGVuID4gZGF0YV9vZmYpIHsKLQkJCWRwID0gJihuc3BwW2RhdGFfb2ZmXSk7Ci0JCQlORF9UQ0hFQ0syKCpkcCwgbnNwbGVuIC0gZGF0YV9vZmYpOwotCQkJcGRhdGEobmRvLCBkcCwgbnNwbGVuIC0gZGF0YV9vZmYpOwotCQkgICAgfQotI2VuZGlmCiAJCX0KIAkJYnJlYWs7CiAJICAgIGNhc2UgTUZTX0lMUzoKIAkJTkRfUFJJTlQoKG5kbywgImxpbmstc2VydmljZSAlZD4lZCAiLCBzcmMsIGRzdCkpOwogCQl7Ci0JCSAgICBzdHJ1Y3Qgc2VnaGRyICpzaHAgPSAoc3RydWN0IHNlZ2hkciAqKW5zcHA7Ci0JCSAgICBzdHJ1Y3QgbHNtc2cgKmxzbXAgPQotCQkJKHN0cnVjdCBsc21zZyAqKSYobnNwcFtzaXplb2Yoc3RydWN0IHNlZ2hkcildKTsKKwkJICAgIGNvbnN0IHN0cnVjdCBzZWdoZHIgKnNocCA9IChjb25zdCBzdHJ1Y3Qgc2VnaGRyICopbnNwcDsKKwkJICAgIGNvbnN0IHN0cnVjdCBsc21zZyAqbHNtcCA9CisJCQkoY29uc3Qgc3RydWN0IGxzbXNnICopJihuc3BwW3NpemVvZihzdHJ1Y3Qgc2VnaGRyKV0pOwogCQkgICAgaW50IGFjazsKIAkJICAgIGludCBsc2ZsYWdzLCBmY3ZhbDsKIApAQCAtMTAzMiw3ICsxMDA5LDcgQEAKIAkgICAgY2FzZSBNRlNfREFDSzoKIAkJTkRfUFJJTlQoKG5kbywgImRhdGEtYWNrICVkPiVkICIsIHNyYywgZHN0KSk7CiAJCXsKLQkJICAgIHN0cnVjdCBhY2ttc2cgKmFtcCA9IChzdHJ1Y3QgYWNrbXNnICopbnNwcDsKKwkJICAgIGNvbnN0IHN0cnVjdCBhY2ttc2cgKmFtcCA9IChjb25zdCBzdHJ1Y3QgYWNrbXNnICopbnNwcDsKIAkJICAgIGludCBhY2s7CiAKIAkJICAgIGlmIChuc3BsZW4gPCBzaXplb2Yoc3RydWN0IGFja21zZykpCkBAIC0xMDU3LDcgKzEwMzQsNyBAQAogCSAgICBjYXNlIE1GU19JQUNLOgogCQlORF9QUklOVCgobmRvLCAiaWxzLWFjayAlZD4lZCAiLCBzcmMsIGRzdCkpOwogCQl7Ci0JCSAgICBzdHJ1Y3QgYWNrbXNnICphbXAgPSAoc3RydWN0IGFja21zZyAqKW5zcHA7CisJCSAgICBjb25zdCBzdHJ1Y3QgYWNrbXNnICphbXAgPSAoY29uc3Qgc3RydWN0IGFja21zZyAqKW5zcHA7CiAJCSAgICBpbnQgYWNrOwogCiAJCSAgICBpZiAobnNwbGVuIDwgc2l6ZW9mKHN0cnVjdCBhY2ttc2cpKQpAQCAtMTA5OCwxMSArMTA3NSw4IEBACiAJCSAgICBORF9QUklOVCgobmRvLCAicmV0cmFucy1jb25uLWluaXRpYXRlICIpKTsKIAkJTkRfUFJJTlQoKG5kbywgIiVkPiVkICIsIHNyYywgZHN0KSk7CiAJCXsKLQkJICAgIHN0cnVjdCBjaW1zZyAqY2ltcCA9IChzdHJ1Y3QgY2ltc2cgKiluc3BwOworCQkgICAgY29uc3Qgc3RydWN0IGNpbXNnICpjaW1wID0gKGNvbnN0IHN0cnVjdCBjaW1zZyAqKW5zcHA7CiAJCSAgICBpbnQgc2VydmljZXMsIGluZm8sIHNlZ3NpemU7Ci0jaWZkZWYJUFJJTlRfTlNQREFUQQotCQkgICAgdV9jaGFyICpkcDsKLSNlbmRpZgogCiAJCSAgICBpZiAobnNwbGVuIDwgc2l6ZW9mKHN0cnVjdCBjaW1zZykpCiAJCQlnb3RvIHRydW5jOwpAQCAtMTEyMCw5ICsxMDk0LDYgQEAKIAkJICAgIGNhc2UgQ09TX01FU1NBR0U6CiAJCQlORF9QUklOVCgobmRvLCAibXNnICIpKTsKIAkJCWJyZWFrOwotCQkgICAgY2FzZSBDT1NfQ1JZUFRTRVI6Ci0JCQlORF9QUklOVCgobmRvLCAiY3J5cHQgIikpOwotCQkJYnJlYWs7CiAJCSAgICB9CiAJCSAgICBzd2l0Y2ggKGluZm8gJiBDT0lfTUFTSykgewogCQkgICAgY2FzZSBDT0lfMzI6CkBAIC0xMTM5LDI0ICsxMTEwLDE0IEBACiAJCQlicmVhazsKIAkJICAgIH0KIAkJICAgIE5EX1BSSU5UKChuZG8sICJzZWdzaXplICVkICIsIHNlZ3NpemUpKTsKLSNpZmRlZglQUklOVF9OU1BEQVRBCi0JCSAgICBpZiAobnNwbGVuID4gc2l6ZW9mKHN0cnVjdCBjaW1zZykpIHsKLQkJCWRwID0gJihuc3BwW3NpemVvZihzdHJ1Y3QgY2ltc2cpXSk7Ci0JCQlORF9UQ0hFQ0syKCpkcCwgbnNwbGVuIC0gc2l6ZW9mKHN0cnVjdCBjaW1zZykpOwotCQkJcGRhdGEobmRvLCBkcCwgbnNwbGVuIC0gc2l6ZW9mKHN0cnVjdCBjaW1zZykpOwotCQkgICAgfQotI2VuZGlmCiAJCX0KIAkJYnJlYWs7CiAJICAgIGNhc2UgTUZTX0NDOgogCQlORF9QUklOVCgobmRvLCAiY29ubi1jb25maXJtICVkPiVkICIsIHNyYywgZHN0KSk7CiAJCXsKLQkJICAgIHN0cnVjdCBjY21zZyAqY2NtcCA9IChzdHJ1Y3QgY2Ntc2cgKiluc3BwOworCQkgICAgY29uc3Qgc3RydWN0IGNjbXNnICpjY21wID0gKGNvbnN0IHN0cnVjdCBjY21zZyAqKW5zcHA7CiAJCSAgICBpbnQgc2VydmljZXMsIGluZm87CiAJCSAgICB1X2ludCBzZWdzaXplLCBvcHRsZW47Ci0jaWZkZWYJUFJJTlRfTlNQREFUQQotCQkgICAgdV9jaGFyICpkcDsKLSNlbmRpZgogCiAJCSAgICBpZiAobnNwbGVuIDwgc2l6ZW9mKHN0cnVjdCBjY21zZykpCiAJCQlnb3RvIHRydW5jOwpAQCAtMTE3NSw5ICsxMTM2LDYgQEAKIAkJICAgIGNhc2UgQ09TX01FU1NBR0U6CiAJCQlORF9QUklOVCgobmRvLCAibXNnICIpKTsKIAkJCWJyZWFrOwotCQkgICAgY2FzZSBDT1NfQ1JZUFRTRVI6Ci0JCQlORF9QUklOVCgobmRvLCAiY3J5cHQgIikpOwotCQkJYnJlYWs7CiAJCSAgICB9CiAJCSAgICBzd2l0Y2ggKGluZm8gJiBDT0lfTUFTSykgewogCQkgICAgY2FzZSBDT0lfMzI6CkBAIC0xMTk2LDI1ICsxMTU0LDE1IEBACiAJCSAgICBORF9QUklOVCgobmRvLCAic2Vnc2l6ZSAlZCAiLCBzZWdzaXplKSk7CiAJCSAgICBpZiAob3B0bGVuKSB7CiAJCQlORF9QUklOVCgobmRvLCAib3B0bGVuICVkICIsIG9wdGxlbikpOwotI2lmZGVmCVBSSU5UX05TUERBVEEKLQkJCWlmIChvcHRsZW4gPiBuc3BsZW4gLSBzaXplb2Yoc3RydWN0IGNjbXNnKSkKLQkJCSAgICBnb3RvIHRydW5jOwotCQkJZHAgPSAmKG5zcHBbc2l6ZW9mKHN0cnVjdCBjY21zZyldKTsKLQkJCU5EX1RDSEVDSzIoKmRwLCBvcHRsZW4pOwotCQkJcGRhdGEobmRvLCBkcCwgb3B0bGVuKTsKLSNlbmRpZgogCQkgICAgfQogCQl9CiAJCWJyZWFrOwogCSAgICBjYXNlIE1GU19ESToKIAkJTkRfUFJJTlQoKG5kbywgImRpc2Nvbm4taW5pdGlhdGUgJWQ+JWQgIiwgc3JjLCBkc3QpKTsKIAkJewotCQkgICAgc3RydWN0IGRpbXNnICpkaW1wID0gKHN0cnVjdCBkaW1zZyAqKW5zcHA7CisJCSAgICBjb25zdCBzdHJ1Y3QgZGltc2cgKmRpbXAgPSAoY29uc3Qgc3RydWN0IGRpbXNnICopbnNwcDsKIAkJICAgIGludCByZWFzb247CiAJCSAgICB1X2ludCBvcHRsZW47Ci0jaWZkZWYJUFJJTlRfTlNQREFUQQotCQkgICAgdV9jaGFyICpkcDsKLSNlbmRpZgogCiAJCSAgICBpZiAobnNwbGVuIDwgc2l6ZW9mKHN0cnVjdCBkaW1zZykpCiAJCQlnb3RvIHRydW5jOwpAQCAtMTIyNSwyMCArMTE3MywxMyBAQAogCQkgICAgcHJpbnRfcmVhc29uKG5kbywgcmVhc29uKTsKIAkJICAgIGlmIChvcHRsZW4pIHsKIAkJCU5EX1BSSU5UKChuZG8sICJvcHRsZW4gJWQgIiwgb3B0bGVuKSk7Ci0jaWZkZWYJUFJJTlRfTlNQREFUQQotCQkJaWYgKG9wdGxlbiA+IG5zcGxlbiAtIHNpemVvZihzdHJ1Y3QgZGltc2cpKQotCQkJICAgIGdvdG8gdHJ1bmM7Ci0JCQlkcCA9ICYobnNwcFtzaXplb2Yoc3RydWN0IGRpbXNnKV0pOwotCQkJTkRfVENIRUNLMigqZHAsIG9wdGxlbik7Ci0JCQlwZGF0YShuZG8sIGRwLCBvcHRsZW4pOwotI2VuZGlmCiAJCSAgICB9CiAJCX0KIAkJYnJlYWs7CiAJICAgIGNhc2UgTUZTX0RDOgogCQlORF9QUklOVCgobmRvLCAiZGlzY29ubi1jb25maXJtICVkPiVkICIsIHNyYywgZHN0KSk7CiAJCXsKLQkJICAgIHN0cnVjdCBkY21zZyAqZGNtcCA9IChzdHJ1Y3QgZGNtc2cgKiluc3BwOworCQkgICAgY29uc3Qgc3RydWN0IGRjbXNnICpkY21wID0gKGNvbnN0IHN0cnVjdCBkY21zZyAqKW5zcHA7CiAJCSAgICBpbnQgcmVhc29uOwogCiAJCSAgICBORF9UQ0hFQ0soKmRjbXApOwpAQCAtMTI5Niw3ICsxMjM3LDcgQEAKIH0KIAogY29uc3QgY2hhciAqCi1kbm51bV9zdHJpbmcodV9zaG9ydCBkbmFkZHIpCitkbm51bV9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVfc2hvcnQgZG5hZGRyKQogewogCWNoYXIgKnN0cjsKIAlzaXplX3Qgc2l6OwpAQCAtMTMwNSwxMyArMTI0NiwxMyBAQAogCiAJc3RyID0gKGNoYXIgKiltYWxsb2Moc2l6ID0gc2l6ZW9mKCIwMC4wMDAwIikpOwogCWlmIChzdHIgPT0gTlVMTCkKLQkJZXJyb3IoImRubnVtX3N0cmluZzogbWFsbG9jIik7CisJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgImRubnVtX3N0cmluZzogbWFsbG9jIik7CiAJc25wcmludGYoc3RyLCBzaXosICIlZC4lZCIsIGFyZWEsIG5vZGUpOwogCXJldHVybihzdHIpOwogfQogCiBjb25zdCBjaGFyICoKLWRubmFtZV9zdHJpbmcodV9zaG9ydCBkbmFkZHIpCitkbm5hbWVfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X3Nob3J0IGRuYWRkcikKIHsKICNpZmRlZiBIQVZFX0RORVRfSFRPQQogCXN0cnVjdCBkbl9uYWRkciBkbmE7CkBAIC0xMzIzLDIzICsxMjY0LDggQEAKIAlpZihkbm5hbWUgIT0gTlVMTCkKIAkJcmV0dXJuIChzdHJkdXAoZG5uYW1lKSk7CiAJZWxzZQotCQlyZXR1cm4oZG5udW1fc3RyaW5nKGRuYWRkcikpOworCQlyZXR1cm4oZG5udW1fc3RyaW5nKG5kbywgZG5hZGRyKSk7CiAjZWxzZQotCXJldHVybihkbm51bV9zdHJpbmcoZG5hZGRyKSk7CS8qIHB1bnQgKi8KKwlyZXR1cm4oZG5udW1fc3RyaW5nKG5kbywgZG5hZGRyKSk7CS8qIHB1bnQgKi8KICNlbmRpZgogfQotCi0jaWZkZWYJUFJJTlRfTlNQREFUQQotc3RhdGljIHZvaWQKLXBkYXRhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgdV9jaGFyICpkcCwgdV9pbnQgbWF4bGVuKQotewotCWNoYXIgYzsKLQl1X2ludCB4ID0gbWF4bGVuOwotCi0Jd2hpbGUgKHgtLSA+IDApIHsKLQkgICAgYyA9ICpkcCsrOwotCSAgICBzYWZlcHV0Y2hhcihuZG8sIGMpOwotCX0KLX0KLSNlbmRpZgpkaWZmIC0tZ2l0IGEvcHJpbnQtZGhjcDYuYyBiL3ByaW50LWRoY3A2LmMKaW5kZXggNTNiOTZlZi4uNzYyZDkxOCAxMDA2NDQKLS0tIGEvcHJpbnQtZGhjcDYuYworKysgYi9wcmludC1kaGNwNi5jCkBAIC0yNiw2ICsyNiw5IEBACiAgKiBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GCiAgKiBTVUNIIERBTUFHRS4KICAqLworCisvKiBcc3VtbWFyeTogSVB2NiBESENQIHByaW50ZXIgKi8KKwogLyoKICAqIFJGQzMzMTU6IERIQ1B2NgogICogc3VwcG9ydGVkIERIQ1B2NiBvcHRpb25zOgpAQCAtNDAsMTcgKzQzLDE2IEBACiAgKiAgUkZDNjMzNDogRHVhbC1TdGFjayBMaXRlIG9wdGlvbiwKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtMTAzLDggKzEwNSw4IEBACiAvKiBESENQNiBiYXNlIHBhY2tldCBmb3JtYXQgKi8KIHN0cnVjdCBkaGNwNiB7CiAJdW5pb24gewotCQl1aW50OF90IG07Ci0JCXVpbnQzMl90IHg7CisJCW5kX3VpbnQ4X3QgbTsKKwkJbmRfdWludDMyX3QgeDsKIAl9IGRoNl9tc2d0eXBleGlkOwogCS8qIG9wdGlvbnMgZm9sbG93ICovCiB9OwpAQCAtMTE0LDEwICsxMTYsMTAgQEAKIAogLyogREhDUHY2IHJlbGF5IG1lc3NhZ2VzICovCiBzdHJ1Y3QgZGhjcDZfcmVsYXkgewotCXVpbnQ4X3QgZGg2cmVsYXlfbXNndHlwZTsKLQl1aW50OF90IGRoNnJlbGF5X2hjbnQ7Ci0JdWludDhfdCBkaDZyZWxheV9saW5rYWRkclsxNl07CS8qIFhYWDogYmFkbHkgYWxpZ25lZCAqLwotCXVpbnQ4X3QgZGg2cmVsYXlfcGVlcmFkZHJbMTZdOworCW5kX3VpbnQ4X3QgZGg2cmVsYXlfbXNndHlwZTsKKwluZF91aW50OF90IGRoNnJlbGF5X2hjbnQ7CisJbmRfdWludDhfdCBkaDZyZWxheV9saW5rYWRkclsxNl07CS8qIFhYWDogYmFkbHkgYWxpZ25lZCAqLworCW5kX3VpbnQ4X3QgZGg2cmVsYXlfcGVlcmFkZHJbMTZdOwogCS8qIG9wdGlvbnMgZm9sbG93ICovCiB9OwogCkBAIC0xOTIsNiArMTk0LDcgQEAKICMgIGRlZmluZSBESDZPUFRfTlRQX1NVQk9QVElPTl9NQ19BRERSIDIKICMgIGRlZmluZSBESDZPUFRfTlRQX1NVQk9QVElPTl9TUlZfRlFETiAzCiAjZGVmaW5lIERINk9QVF9BRlRSX05BTUUgNjQKKyNkZWZpbmUgREg2T1BUX01VRFVSTCAxMTIKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgZGg2b3B0X3N0cltdID0gewogCXsgREg2T1BUX0NMSUVOVElELCAgICAgICAgICAgImNsaWVudC1JRCIgICAgICAgICAgICB9LApAQCAtMjQyLDI3ICsyNDUsMjggQEAKIAl7IERINk9QVF9MUV9DTElFTlRfTElOSywgICAgICJMUS1jbGllbnQtbGluayIgICAgICAgfSwKIAl7IERINk9QVF9OVFBfU0VSVkVSLCAgICAgICAgICJOVFAtc2VydmVyIiAgICAgICAgICAgfSwKIAl7IERINk9QVF9BRlRSX05BTUUsICAgICAgICAgICJBRlRSLU5hbWUiICAgICAgICAgICAgfSwKKwl7IERINk9QVF9NVURVUkwsICAgICAgICAgICAgICJNVUQtVVJMIiAgICAgICAgICAgICAgfSwKIAl7IDAsIE5VTEwgfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgZGg2b3B0X3N0Y29kZV9zdHJbXSA9IHsKLQl7IERINk9QVF9TVENPREVfU1VDQ0VTUywgICAgICAgICAgInN1Y2Nlc3MiICAgICAgICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfVU5TUEVDRkFJTCwgICAgICAgInVuc3BlYyBmYWlsdXJlIiAgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9BRERSQVZBSUwsICAgICAgIm5vIGFkZHJlc3NlcyIgICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9CSU5ESU5HLCAgICAgICAgIm5vIGJpbmRpbmciICAgICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9UT05MSU5LLCAgICAgICAgIm5vdCBvbi1saW5rIiAgICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfVVNFTVVMVElDQVNULCAgICAgInVzZSBtdWx0aWNhc3QiICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9QUkVGSVhBVkFJTCwgICAgIm5vIHByZWZpeGVzIiAgICAgICAgfSwKLQl7IERINk9QVF9TVENPREVfVU5LTk9XTlFVRVJZVFlQRSwgInVua25vd24gcXVlcnkgdHlwZSIgfSwKLQl7IERINk9QVF9TVENPREVfTUFMRk9STUVEUVVFUlksICAgIm1hbGZvcm1lZCBxdWVyeSIgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9UQ09ORklHVVJFRCwgICAgIm5vdCBjb25maWd1cmVkIiAgICAgfSwKLQl7IERINk9QVF9TVENPREVfTk9UQUxMT1dFRCwgICAgICAgIm5vdCBhbGxvd2VkIiAgICAgICAgfSwKKwl7IERINk9QVF9TVENPREVfU1VDQ0VTUywgICAgICAgICAgIlN1Y2Nlc3MiICAgICAgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfVU5TUEVDRkFJTCwgICAgICAgIlVuc3BlY0ZhaWwiICAgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfTk9BRERSQVZBSUwsICAgICAgIk5vQWRkcnNBdmFpbCIgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfTk9CSU5ESU5HLCAgICAgICAgIk5vQmluZGluZyIgICAgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfTk9UT05MSU5LLCAgICAgICAgIk5vdE9uTGluayIgICAgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfVVNFTVVMVElDQVNULCAgICAgIlVzZU11bHRpY2FzdCIgICAgIH0sIC8qIFJGQzMzMTUgKi8KKwl7IERINk9QVF9TVENPREVfTk9QUkVGSVhBVkFJTCwgICAgIk5vUHJlZml4QXZhaWwiICAgIH0sIC8qIFJGQzM2MzMgKi8KKwl7IERINk9QVF9TVENPREVfVU5LTk9XTlFVRVJZVFlQRSwgIlVua25vd25RdWVyeVR5cGUiIH0sIC8qIFJGQzUwMDcgKi8KKwl7IERINk9QVF9TVENPREVfTUFMRk9STUVEUVVFUlksICAgIk1hbGZvcm1lZFF1ZXJ5IiAgIH0sIC8qIFJGQzUwMDcgKi8KKwl7IERINk9QVF9TVENPREVfTk9UQ09ORklHVVJFRCwgICAgIk5vdENvbmZpZ3VyZWQiICAgIH0sIC8qIFJGQzUwMDcgKi8KKwl7IERINk9QVF9TVENPREVfTk9UQUxMT1dFRCwgICAgICAgIk5vdEFsbG93ZWQiICAgICAgIH0sIC8qIFJGQzUwMDcgKi8KIAl7IDAsIE5VTEwgfQogfTsKIAogc3RydWN0IGRoY3A2b3B0IHsKLQl1aW50MTZfdCBkaDZvcHRfdHlwZTsKLQl1aW50MTZfdCBkaDZvcHRfbGVuOworCW5kX3VpbnQxNl90IGRoNm9wdF90eXBlOworCW5kX3VpbnQxNl90IGRoNm9wdF9sZW47CiAJLyogdHlwZS1kZXBlbmRlbnQgZGF0YSBmb2xsb3dzICovCiB9OwogCkBAIC0yOTMsMTMgKzI5NywxNCBAQAogCXdoaWxlIChjcCA8IGVwKSB7CiAJCWlmIChlcCA8IGNwICsgc2l6ZW9mKCpkaDZvKSkKIAkJCWdvdG8gdHJ1bmM7Ci0JCWRoNm8gPSAoc3RydWN0IGRoY3A2b3B0ICopY3A7CisJCWRoNm8gPSAoY29uc3Qgc3RydWN0IGRoY3A2b3B0ICopY3A7CiAJCU5EX1RDSEVDSygqZGg2byk7CiAJCW9wdGxlbiA9IEVYVFJBQ1RfMTZCSVRTKCZkaDZvLT5kaDZvcHRfbGVuKTsKIAkJaWYgKGVwIDwgY3AgKyBzaXplb2YoKmRoNm8pICsgb3B0bGVuKQogCQkJZ290byB0cnVuYzsKIAkJb3B0dHlwZSA9IEVYVFJBQ1RfMTZCSVRTKCZkaDZvLT5kaDZvcHRfdHlwZSk7CiAJCU5EX1BSSU5UKChuZG8sICIgKCVzIiwgdG9rMnN0cihkaDZvcHRfc3RyLCAib3B0XyV1Iiwgb3B0dHlwZSkpKTsKKwkJTkRfVENIRUNLMigqKGNwICsgc2l6ZW9mKCpkaDZvKSksIG9wdGxlbik7CiAJCXN3aXRjaCAob3B0dHlwZSkgewogCQljYXNlIERINk9QVF9DTElFTlRJRDoKIAkJY2FzZSBESDZPUFRfU0VSVkVSSUQ6CkBAIC0zMDgsNyArMzEzLDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlzd2l0Y2ggKEVYVFJBQ1RfMTZCSVRTKHRwKSkgewogCQkJY2FzZSAxOgogCQkJCWlmIChvcHRsZW4gPj0gMiArIDYpIHsKQEAgLTM2MCw3ICszNjUsNyBAQAogCQkJCU5EX1BSSU5UKChuZG8sICIgPykiKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sICZ0cFswXSkpKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgcGx0aW1lOiV1IHZsdGltZToldSIsCiAJCQkgICAgRVhUUkFDVF8zMkJJVFMoJnRwWzE2XSksCkBAIC0zNzcsNyArMzgyLDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgb3B0bGVuOyBpICs9IDIpIHsKIAkJCQlORF9QUklOVCgobmRvLCAiICVzIiwKIAkJCQkgICAgdG9rMnN0cihkaDZvcHRfc3RyLCAib3B0XyV1IiwgRVhUUkFDVF8xNkJJVFMoJnRwW2ldKSkpKTsKQEAgLTM4OSw3ICszOTQsNyBAQAogCQkJCU5EX1BSSU5UKChuZG8sICIgPykiKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgJWQpIiwgKnRwKSk7CiAJCQlicmVhazsKIAkJY2FzZSBESDZPUFRfRUxBUFNFRF9USU1FOgpAQCAtMzk3LDEyICs0MDIsMTIgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlORF9QUklOVCgobmRvLCAiICVkKSIsIEVYVFJBQ1RfMTZCSVRTKHRwKSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgREg2T1BUX1JFTEFZX01TRzoKIAkJCU5EX1BSSU5UKChuZG8sICIgKCIpKTsKLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJZGhjcDZfcHJpbnQobmRvLCB0cCwgb3B0bGVuKTsKIAkJCU5EX1BSSU5UKChuZG8sICIpIikpOwogCQkJYnJlYWs7CkBAIC00MTEsNyArNDE2LDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlhdXRoX3Byb3RvID0gKnRwOwogCQkJc3dpdGNoIChhdXRoX3Byb3RvKSB7CiAJCQljYXNlIERINk9QVF9BVVRIUFJPVE9fREVMQVlFRDoKQEAgLTUwNiwxNCArNTExLDE0IEBACiAJCQkgKiBTaW5jZSB3ZSBjYW5ub3QgcHJlZGljdCB0aGUgZW5jb2RpbmcsIHByaW50IGhleCBkdW1wCiAJCQkgKiBhdCBtb3N0IDEwIGNoYXJhY3RlcnMuCiAJCQkgKi8KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJTkRfUFJJTlQoKG5kbywgIiAiKSk7CiAJCQlmb3IgKGkgPSAwOyBpIDwgb3B0bGVuICYmIGkgPCAxMDsgaSsrKQogCQkJCU5EX1BSSU5UKChuZG8sICIlMDJ4IiwgdHBbaV0pKTsKIAkJCU5EX1BSSU5UKChuZG8sICIuLi4pIikpOwogCQkJYnJlYWs7CiAJCWNhc2UgREg2T1BUX1JFQ09ORl9NU0c6Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCXN3aXRjaCAoKnRwKSB7CiAJCQljYXNlIERINl9SRU5FVzoKIAkJCQlORF9QUklOVCgobmRvLCAiIGZvciByZW5ldykiKSk7CkBAIC01NDEsMTQgKzU0NiwxNCBAQAogCQkJCU5EX1BSSU5UKChuZG8sICIgPykiKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBvcHRsZW47IGkgKz0gMTYpCiAJCQkJTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgJnRwW2ldKSkpOwogCQkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJCQlicmVhazsKIAkJY2FzZSBESDZPUFRfU0lQX1NFUlZFUl9EOgogCQljYXNlIERINk9QVF9ET01BSU5fTElTVDoKLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJd2hpbGUgKHRwIDwgY3AgKyBzaXplb2YoKmRoNm8pICsgb3B0bGVuKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIiAiKSk7CiAJCQkJaWYgKCh0cCA9IG5zX25wcmludChuZG8sIHRwLCBjcCArIHNpemVvZigqZGg2bykgKyBvcHRsZW4pKSA9PSBOVUxMKQpAQCAtNTYxLDcgKzU2Niw3IEBACiAJCQkJTkRfUFJJTlQoKG5kbywgIiA/KSIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJTkRfUFJJTlQoKG5kbywgIiAlcykiLCBkaGNwNnN0Y29kZShFWFRSQUNUXzE2QklUUygmdHBbMF0pKSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgREg2T1BUX0lBX05BOgpAQCAtNTcwLDcgKzU3NSw3IEBACiAJCQkJTkRfUFJJTlQoKG5kbywgIiA/KSIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJTkRfUFJJTlQoKG5kbywgIiBJQUlEOiV1IFQxOiV1IFQyOiV1IiwKIAkJCSAgICBFWFRSQUNUXzMyQklUUygmdHBbMF0pLAogCQkJICAgIEVYVFJBQ1RfMzJCSVRTKCZ0cFs0XSksCkBAIC01ODYsNyArNTkxLDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlORF9QUklOVCgobmRvLCAiIElBSUQ6JXUiLCBFWFRSQUNUXzMyQklUUyh0cCkpKTsKIAkJCWlmIChvcHRsZW4gPiA0KSB7CiAJCQkJLyogdGhlcmUgYXJlIHN1Yi1vcHRpb25zICovCkBAIC01OTksNyArNjA0LDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlORF9QUklOVCgobmRvLCAiICVzLyVkIiwgaXA2YWRkcl9zdHJpbmcobmRvLCAmdHBbOV0pLCB0cFs4XSkpOwogCQkJTkRfUFJJTlQoKG5kbywgIiBwbHRpbWU6JXUgdmx0aW1lOiV1IiwKIAkJCSAgICBFWFRSQUNUXzMyQklUUygmdHBbMF0pLApAQCAtNjE2LDcgKzYyMSw3IEBACiAJCQkJTkRfUFJJTlQoKG5kbywgIiA/KSIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJTkRfUFJJTlQoKG5kbywgIiAlZCkiLCBFWFRSQUNUXzMyQklUUyh0cCkpKTsKIAkJCWJyZWFrOwogCQljYXNlIERINk9QVF9SRU1PVEVfSUQ6CkBAIC02MjQsNyArNjI5LDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlORF9QUklOVCgobmRvLCAiICVkICIsIEVYVFJBQ1RfMzJCSVRTKHRwKSkpOwogCQkJLyoKIAkJCSAqIFByaW50IGhleCBkdW1wIGZpcnN0IDEwIGNoYXJhY3RlcnMuCkBAIC02MzgsNyArNjQzLDcgQEAKIAkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOwogCQkJCWJyZWFrOwogCQkJfQotCQkJdHAgPSAodV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCXRwID0gKGNvbnN0IHVfY2hhciAqKShkaDZvICsgMSk7CiAJCQlzd2l0Y2ggKCp0cCkgewogCQkJY2FzZSAxOgogCQkJCU5EX1BSSU5UKChuZG8sICIgYnktYWRkcmVzcyIpKTsKQEAgLTY1OCw3ICs2NjMsNyBAQAogCQkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJCQlicmVhazsKIAkJY2FzZSBESDZPUFRfQ0xJRU5UX0RBVEE6Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCWlmIChvcHRsZW4gPiAwKSB7CiAJCQkJLyogdGhlcmUgYXJlIGVuY2Fwc3VsYXRlZCBvcHRpb25zICovCiAJCQkJZGhjcDZvcHRfcHJpbnQobmRvLCB0cCwgdHAgKyBvcHRsZW4pOwpAQCAtNjcwLDcgKzY3NSw3IEBACiAJCQkJTkRfUFJJTlQoKG5kbywgIiA/KSIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJTkRfUFJJTlQoKG5kbywgIiAlcyAiLCBpcDZhZGRyX3N0cmluZyhuZG8sICZ0cFswXSkpKTsKIAkJCS8qCiAJCQkgKiBQcmludCBoZXggZHVtcCBmaXJzdCAxMCBjaGFyYWN0ZXJzLgpAQCAtNjg0LDcgKzY4OSw3IEBACiAJCQkJTkRfUFJJTlQoKG5kbywgIiA/KSIpKTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXRwID0gKHVfY2hhciAqKShkaDZvICsgMSk7CisJCQl0cCA9IChjb25zdCB1X2NoYXIgKikoZGg2byArIDEpOwogCQkJd2hpbGUgKHRwIDwgY3AgKyBzaXplb2YoKmRoNm8pICsgb3B0bGVuIC0gNCkgewogCQkJCXN1Ym9wdF9jb2RlID0gRVhUUkFDVF8xNkJJVFModHApOwogCQkJCXRwICs9IDI7CkBAIC03MjAsMTQgKzcyNSwxNCBAQAogCQkJCU5EX1BSSU5UKChuZG8sICIgPykiKSk7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCQl0cCA9ICh1X2NoYXIgKikoZGg2byArIDEpOworCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKIAkJCXJlbWFpbl9sZW4gPSBvcHRsZW47CiAJCQlORF9QUklOVCgobmRvLCAiICIpKTsKIAkJCS8qIEVuY29kaW5nIGlzIGRlc2NyaWJlZCBpbiBzZWN0aW9uIDMuMSBvZiBSRkMgMTAzNSAqLwogCQkJd2hpbGUgKHJlbWFpbl9sZW4gJiYgKnRwKSB7CiAJCQkJbGFiZWxfbGVuID0gICp0cCsrOwogCQkJCWlmIChsYWJlbF9sZW4gPCByZW1haW5fbGVuIC0gMSkgewotCQkJCQlORF9QUklOVCgobmRvLCAiJS4qcyIsIGxhYmVsX2xlbiwgdHApKTsKKwkJCQkJKHZvaWQpZm5fcHJpbnRuKG5kbywgdHAsIGxhYmVsX2xlbiwgTlVMTCk7CiAJCQkJCXRwICs9IGxhYmVsX2xlbjsKIAkJCQkJcmVtYWluX2xlbiAtPSAobGFiZWxfbGVuICsgMSk7CiAJCQkJCWlmKCp0cCkgTkRfUFJJTlQoKG5kbywgIi4iKSk7CkBAIC03MzgsNiArNzQzLDE5IEBACiAJCQl9CiAJCQlORF9QUklOVCgobmRvLCAiKSIpKTsKIAkJCWJyZWFrOworCQljYXNlIERINk9QVF9ORVdfUE9TSVhfVElNRVpPTkU6IC8qIGFsbCB0aHJlZSBvZiB0aGVzZSBvcHRpb25zICovCisJCWNhc2UgREg2T1BUX05FV19UWkRCX1RJTUVaT05FOgkvKiBhcmUgZW5jb2RlZCBzaW1pbGFybHkgKi8KKwkJY2FzZSBESDZPUFRfTVVEVVJMOgkJLyogYWx0aG91Z2ggR01UIG1pZ2h0IG5vdCB3b3JrICovCisJCSAgICAgICAgaWYgKG9wdGxlbiA8IDUpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiID8pIikpOworCQkJCWJyZWFrOworCQkJfQorCQkJdHAgPSAoY29uc3QgdV9jaGFyICopKGRoNm8gKyAxKTsKKwkJCU5EX1BSSU5UKChuZG8sICI9IikpOworCQkJKHZvaWQpZm5fcHJpbnRuKG5kbywgdHAsICh1X2ludClvcHRsZW4sIE5VTEwpOworCQkJTkRfUFJJTlQoKG5kbywgIikiKSk7CisJCQlicmVhazsKKwogCQlkZWZhdWx0OgogCQkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJCQlicmVhazsKQEAgLTc1OCwyMCArNzc2LDIwIEBACiBkaGNwNl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbmd0aCkKIHsKLQlzdHJ1Y3QgZGhjcDYgKmRoNjsKLQlzdHJ1Y3QgZGhjcDZfcmVsYXkgKmRoNnJlbGF5OworCWNvbnN0IHN0cnVjdCBkaGNwNiAqZGg2OworCWNvbnN0IHN0cnVjdCBkaGNwNl9yZWxheSAqZGg2cmVsYXk7CiAJY29uc3QgdV9jaGFyICplcDsKLQl1X2NoYXIgKmV4dHA7CisJY29uc3QgdV9jaGFyICpleHRwOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAlORF9QUklOVCgobmRvLCAiZGhjcDYiKSk7CiAKLQllcCA9ICh1X2NoYXIgKiluZG8tPm5kb19zbmFwZW5kOworCWVwID0gKGNvbnN0IHVfY2hhciAqKW5kby0+bmRvX3NuYXBlbmQ7CiAJaWYgKGNwICsgbGVuZ3RoIDwgZXApCiAJCWVwID0gY3AgKyBsZW5ndGg7CiAKLQlkaDYgPSAoc3RydWN0IGRoY3A2ICopY3A7Ci0JZGg2cmVsYXkgPSAoc3RydWN0IGRoY3A2X3JlbGF5ICopY3A7CisJZGg2ID0gKGNvbnN0IHN0cnVjdCBkaGNwNiAqKWNwOworCWRoNnJlbGF5ID0gKGNvbnN0IHN0cnVjdCBkaGNwNl9yZWxheSAqKWNwOwogCU5EX1RDSEVDSyhkaDYtPmRoNl94aWQpOwogCW5hbWUgPSB0b2syc3RyKGRoNl9tc2d0eXBlX3N0ciwgIm1zZ3R5cGUtJXUiLCBkaDYtPmRoNl9tc2d0eXBlKTsKIApAQCAtNzg2LDcgKzgwNCw3IEBACiAJaWYgKGRoNi0+ZGg2X21zZ3R5cGUgIT0gREg2X1JFTEFZX0ZPUlcgJiYKIAkgICAgZGg2LT5kaDZfbXNndHlwZSAhPSBESDZfUkVMQVlfUkVQTFkpIHsKIAkJTkRfUFJJTlQoKG5kbywgInhpZD0leCIsIEVYVFJBQ1RfMzJCSVRTKCZkaDYtPmRoNl94aWQpICYgREg2X1hJRE1BU0spKTsKLQkJZXh0cCA9ICh1X2NoYXIgKikoZGg2ICsgMSk7CisJCWV4dHAgPSAoY29uc3QgdV9jaGFyICopKGRoNiArIDEpOwogCQlkaGNwNm9wdF9wcmludChuZG8sIGV4dHAsIGVwKTsKIAl9IGVsc2UgewkJLyogcmVsYXkgbWVzc2FnZXMgKi8KIAkJc3RydWN0IGluNl9hZGRyIGFkZHI2OwpAQCAtNzk5LDcgKzgxNyw3IEBACiAJCW1lbWNweSgmYWRkcjYsIGRoNnJlbGF5LT5kaDZyZWxheV9wZWVyYWRkciwgc2l6ZW9mIChhZGRyNikpOwogCQlORF9QUklOVCgobmRvLCAiIHBlZXJhZGRyPSVzIiwgaXA2YWRkcl9zdHJpbmcobmRvLCAmYWRkcjYpKSk7CiAKLQkJZGhjcDZvcHRfcHJpbnQobmRvLCAodV9jaGFyICopKGRoNnJlbGF5ICsgMSksIGVwKTsKKwkJZGhjcDZvcHRfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKGRoNnJlbGF5ICsgMSksIGVwKTsKIAl9CiAJLyooKi8KIAlORF9QUklOVCgobmRvLCAiKSIpKTsKZGlmZiAtLWdpdCBhL3ByaW50LWRvbWFpbi5jIGIvcHJpbnQtZG9tYWluLmMKaW5kZXggODgwNTAwNy4uZDBiNjk5NiAxMDA2NDQKLS0tIGEvcHJpbnQtZG9tYWluLmMKKysrIGIvcHJpbnQtZG9tYWluLmMKQEAgLTE5LDIwICsxOSwyMiBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBEb21haW4gTmFtZSBTeXN0ZW0gKEROUykgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlICJuYW1lc2VyLmgiCiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCi0jaW5jbHVkZSAiZXh0cmFjdC5oIiAgICAgICAgICAgICAgICAgICAgLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAiYWRkcnRvc3RyLmgiCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciAqbnNfb3BzW10gPSB7CiAJIiIsICIgaW52X3EiLCAiIHN0YXQiLCAiIG9wMyIsICIgbm90aWZ5IiwgIiB1cGRhdGUiLCAiIG9wNiIsICIgb3A3IiwKQEAgLTM5NSw3ICszOTcsNyBAQAogCX0gZWxzZSBpZiAobmRvLT5uZG9fdmZsYWcgPiAyKSB7CiAJCS8qIHByaW50IHR0bCAqLwogCQlORF9QUklOVCgobmRvLCAiIFsiKSk7Ci0JCXJlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8zMkJJVFMoY3ApKTsKKwkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzMyQklUUyhjcCkpOwogCQlORF9QUklOVCgobmRvLCAiXSIpKTsKIAkJY3AgKz0gNDsKIAl9IGVsc2UgewpAQCAtNDgxLDE3ICs0ODMsMTQgQEAKIAkJCUVYVFJBQ1RfMTZCSVRTKGNwKSwgRVhUUkFDVF8xNkJJVFMoY3AgKyAyKSkpOwogCQlicmVhazsKIAotI2lmZGVmIElORVQ2CiAJY2FzZSBUX0FBQUE6CiAJICAgIHsKLQkJc3RydWN0IGluNl9hZGRyIGFkZHI7CiAJCWNoYXIgbnRvcF9idWZbSU5FVDZfQUREUlNUUkxFTl07CiAKIAkJaWYgKCFORF9UVEVTVDIoKmNwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkpCiAJCQlyZXR1cm4oTlVMTCk7Ci0JCW1lbWNweSgmYWRkciwgY3AsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJTkRfUFJJTlQoKG5kbywgIiAlcyIsCi0JCSAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhZGRyLCBudG9wX2J1Ziwgc2l6ZW9mKG50b3BfYnVmKSkpKTsKKwkJICAgIGFkZHJ0b3N0cjYoY3AsIG50b3BfYnVmLCBzaXplb2YobnRvcF9idWYpKSkpOwogCiAJCWJyZWFrOwogCSAgICB9CkBAIC01MTUsNyArNTE0LDcgQEAKIAkJCW1lbXNldCgmYSwgMCwgc2l6ZW9mKGEpKTsKIAkJCW1lbWNweSgmYS5zNl9hZGRyW3BieXRlXSwgY3AgKyAxLCBzaXplb2YoYSkgLSBwYnl0ZSk7CiAJCQlORF9QUklOVCgobmRvLCAiICV1ICVzIiwgcGJpdCwKLQkJCSAgICBpbmV0X250b3AoQUZfSU5FVDYsICZhLCBudG9wX2J1Ziwgc2l6ZW9mKG50b3BfYnVmKSkpKTsKKwkJCSAgICBhZGRydG9zdHI2KCZhLCBudG9wX2J1Ziwgc2l6ZW9mKG50b3BfYnVmKSkpKTsKIAkJfQogCQlpZiAocGJpdCA+IDApIHsKIAkJCU5EX1BSSU5UKChuZG8sICIgIikpOwpAQCAtNTI0LDEyICs1MjMsMTEgQEAKIAkJfQogCQlicmVhazsKIAkgICAgfQotI2VuZGlmIC8qSU5FVDYqLwogCiAJY2FzZSBUX09QVDoKIAkJTkRfUFJJTlQoKG5kbywgIiBVRFBzaXplPSV1IiwgY2xhc3MpKTsKIAkJaWYgKG9wdF9mbGFncyAmIDB4ODAwMCkKLQkJCU5EX1BSSU5UKChuZG8sICIgT0siKSk7CisJCQlORF9QUklOVCgobmRvLCAiIERPIikpOwogCQlicmVhazsKIAogCWNhc2UgVF9VTlNQRUNBOgkJLyogT25lIGxvbmcgc3RyaW5nICovCkBAIC02NjYsNyArNjY0LDcgQEAKIAkJICAgIEROU19DRChucCkgPyAiJSIgOiAiIikpOwogCiAJCS8qIGFueSB3ZWlyZG5lc3M/ICovCi0JCWIyID0gRVhUUkFDVF8xNkJJVFMoKCh1X3Nob3J0ICopbnApKzEpOworCQliMiA9IEVYVFJBQ1RfMTZCSVRTKCgoY29uc3QgdV9zaG9ydCAqKW5wKSsxKTsKIAkJaWYgKGIyICYgMHg2Y2YpCiAJCQlORF9QUklOVCgobmRvLCAiIFtiMiYzPTB4JXhdIiwgYjIpKTsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtZHRwLmMgYi9wcmludC1kdHAuYwppbmRleCA1ZDg0YTc3Li4xZDhjNjZhIDEwMDY0NAotLS0gYS9wcmludC1kdHAuYworKysgYi9wcmludC1kdHAuYwpAQCAtMTIsMjIgKzEyLDIzIEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIER5bmFtaWMgVHJ1bmsgUHJvdG9jb2wgKERUUCkKLSAqCiAgKiBPcmlnaW5hbCBjb2RlIGJ5IENhcmxlcyBLaXNoaW1vdG8gPGNhcmxlcy5raXNoaW1vdG9AZ21haWwuY29tPgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IER5bmFtaWMgVHJ1bmtpbmcgUHJvdG9jb2wgKERUUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAorc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfGR0cF0iOworCiAjZGVmaW5lIERUUF9IRUFERVJfTEVOCQkJMQogI2RlZmluZSBEVFBfRE9NQUlOX1RMVgkJCTB4MDAwMQogI2RlZmluZSBEVFBfU1RBVFVTX1RMVgkJCTB4MDAwMgpAQCAtNzEsMzAgKzcyLDM2IEBACiAgICAgd2hpbGUgKHRwdHIgPCAocHB0citsZW5ndGgpKSB7CiAKICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgNCk7Ci0KIAl0eXBlID0gRVhUUkFDVF8xNkJJVFModHB0cik7CiAgICAgICAgIGxlbiAgPSBFWFRSQUNUXzE2QklUUyh0cHRyKzIpOwotCi0gICAgICAgIC8qIGluZmluaXRlIGxvb3AgY2hlY2sgKi8KLSAgICAgICAgaWYgKHR5cGUgPT0gMCB8fCBsZW4gPT0gMCkgeworICAgICAgIC8qIFhYWDogc2hvdWxkIG5vdCBiZSBidXQgc29tZXRpbWVzIGl0IGlzLCBzZWUgdGhlIHRlc3QgY2FwdHVyZXMgKi8KKyAgICAgICAgaWYgKHR5cGUgPT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0JXMgKDB4JTA0eCkgVExWLCBsZW5ndGggJXUiLAogICAgICAgICAgICAgICAgdG9rMnN0cihkdHBfdGx2X3ZhbHVlcywgIlVua25vd24iLCB0eXBlKSwKICAgICAgICAgICAgICAgIHR5cGUsIGxlbikpOwogCisgICAgICAgIC8qIGluZmluaXRlIGxvb3AgY2hlY2sgKi8KKyAgICAgICAgaWYgKGxlbiA8IDQpCisgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIGxlbik7CisKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAJY2FzZSBEVFBfRE9NQUlOX1RMVjoKLQkJTkRfUFJJTlQoKG5kbywgIiwgJXMiLCB0cHRyKzQpKTsKKwkJTkRfUFJJTlQoKG5kbywgIiwgIikpOworCQlmbl9wcmludHpwKG5kbywgdHB0cis0LCBsZW4tNCwgcHB0citsZW5ndGgpOwogCQlicmVhazsKIAogCWNhc2UgRFRQX1NUQVRVU19UTFY6CiAJY2FzZSBEVFBfRFRQX1RZUEVfVExWOgorICAgICAgICAgICAgICAgIGlmIChsZW4gPCA1KQorICAgICAgICAgICAgICAgICAgICBnb3RvIGludmFsaWQ7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgMHgleCIsICoodHB0cis0KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAJY2FzZSBEVFBfTkVJR0hCT1JfVExWOgorICAgICAgICAgICAgICAgIGlmIChsZW4gPCAxMCkKKyAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICVzIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIHRwdHIrNCkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKIApAQCAtMTA2LDggKzExMywxMSBAQAogCiAgICAgcmV0dXJuOwogCisgaW52YWxpZDoKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CisgICAgcmV0dXJuOwogIHRydW5jOgotICAgIE5EX1BSSU5UKChuZG8sICJbfGR0cF0iKSk7CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvcHJpbnQtZHZtcnAuYyBiL3ByaW50LWR2bXJwLmMKaW5kZXggOTZhMGVlNy4uNjBmODM2ZSAxMDA2NDQKLS0tIGEvcHJpbnQtZHZtcnAuYworKysgYi9wcmludC1kdm1ycC5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogRGlzdGFuY2UgVmVjdG9yIE11bHRpY2FzdCBSb3V0aW5nIFByb3RvY29sIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKQEAgLTMzNyw3ICszMzgsNyBAQAogCU5EX1BSSU5UKChuZG8sICIgc3JjICVzIGdycCAlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCBicCksIGlwYWRkcl9zdHJpbmcobmRvLCBicCArIDQpKSk7CiAJYnAgKz0gODsKIAlORF9QUklOVCgobmRvLCAiIHRpbWVyICIpKTsKLQlyZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMzJCSVRTKGJwKSk7CisJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzMyQklUUyhicCkpOwogCXJldHVybiAoMCk7CiB0cnVuYzoKIAlyZXR1cm4gKC0xKTsKZGlmZiAtLWdpdCBhL3ByaW50LWVhcC5jIGIvcHJpbnQtZWFwLmMKaW5kZXggMGUyYzJkMy4uMTI1ZTFlZSAxMDA2NDQKLS0tIGEvcHJpbnQtZWFwLmMKKysrIGIvcHJpbnQtZWFwLmMKQEAgLTE2LDE5ICsxNiwxNyBAQAogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAogICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRm9ybWF0IGFuZCBwcmludCBFQVAgcGFja2V0cy4KLSAqCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogRXh0ZW5zaWJsZSBBdXRoZW50aWNhdGlvbiBQcm90b2NvbCAoRUFQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNkZWZpbmUJRUFQX0ZSQU1FX1RZUEVfUEFDS0VUCQkwCkBAIC0xNTEsNyArMTQ5LDcgQEAKIHZvaWQKIGVhcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmNwLAotICAgICAgICAgIHVfaW50IGxlbmd0aCBfVV8pCisgICAgICAgICAgdV9pbnQgbGVuZ3RoKQogewogICAgIGNvbnN0IHN0cnVjdCBlYXBfZnJhbWVfdCAqZWFwOwogICAgIGNvbnN0IHVfY2hhciAqdHB0cjsKZGlmZiAtLWdpdCBhL3ByaW50LWVncC5jIGIvcHJpbnQtZWdwLmMKaW5kZXggOWM1YzgxMS4uOGZiYTljZSAxMDA2NDQKLS0tIGEvcHJpbnQtZWdwLmMKKysrIGIvcHJpbnQtZWdwLmMKQEAgLTE4LDE0ICsxOCwxNSBAQAogICogSW5pdGlhbCBjb250cmlidXRpb24gZnJvbSBKZWZmIEhvbmlnIChqY2hATUlUQ0hFTEwuQ0lULkNPUk5FTEwuRURVKS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBFeHRlcmlvciBHYXRld2F5IFByb3RvY29sIChFR1ApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKQEAgLTEyOCw3ICsxMjksNyBAQAogCiBzdGF0aWMgdm9pZAogZWdwbnJwcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGVncF9wYWNrZXQgKmVncCkKKyAgICAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGVncF9wYWNrZXQgKmVncCwgdV9pbnQgbGVuZ3RoKQogewogCXJlZ2lzdGVyIGNvbnN0IHVpbnQ4X3QgKmNwOwogCXVpbnQzMl90IGFkZHI7CkBAIC0xNTIsMTIgKzE1MywxNSBAQAogCQluZXQgPSAwOwogCQluZXRsZW4gPSAwOwogCX0KLQljcCA9ICh1aW50OF90ICopKGVncCArIDEpOworCWNwID0gKGNvbnN0IHVpbnQ4X3QgKikoZWdwICsgMSk7CisJbGVuZ3RoIC09IHNpemVvZigqZWdwKTsKIAogCXRfZ2F0ZXdheXMgPSBlZ3AtPmVncF9pbnRndyArIGVncC0+ZWdwX2V4dGd3OwogCWZvciAoZ2F0ZXdheXMgPSAwOyBnYXRld2F5cyA8IHRfZ2F0ZXdheXM7ICsrZ2F0ZXdheXMpIHsKIAkJLyogUGlja3VwIGhvc3QgcGFydCBvZiBnYXRld2F5IGFkZHJlc3MgKi8KIAkJYWRkciA9IDA7CisJCWlmIChsZW5ndGggPCA0IC0gbmV0bGVuKQorCQkJZ290byB0cnVuYzsKIAkJTkRfVENIRUNLMihjcFswXSwgNCAtIG5ldGxlbik7CiAJCXN3aXRjaCAobmV0bGVuKSB7CiAKQEAgLTE3MSw4ICsxNzUsMTIgQEAKIAkJCWFkZHIgPSAoYWRkciA8PCA4KSB8ICpjcCsrOwogCQl9CiAJCWFkZHIgfD0gbmV0OworCQlsZW5ndGggLT0gNCAtIG5ldGxlbjsKKwkJaWYgKGxlbmd0aCA8IDEpCisJCQlnb3RvIHRydW5jOwogCQlORF9UQ0hFQ0syKGNwWzBdLCAxKTsKIAkJZGlzdGFuY2VzID0gKmNwKys7CisJCWxlbmd0aC0tOwogCQlORF9QUklOVCgobmRvLCAiICVzICVzICIsCiAJCSAgICAgICBnYXRld2F5cyA8IChpbnQpZWdwLT5lZ3BfaW50Z3cgPyAiaW50IiA6ICJleHQiLAogCQkgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sICZhZGRyKSkpOwpAQCAtMTgwLDIxICsxODgsMzMgQEAKIAkJY29tbWEgPSAiIjsKIAkJTkRfUFJJTlQoKG5kbywgIigiKSk7CiAJCXdoaWxlICgtLWRpc3RhbmNlcyA+PSAwKSB7CisJCQlpZiAobGVuZ3RoIDwgMikKKwkJCQlnb3RvIHRydW5jOwogCQkJTkRfVENIRUNLMihjcFswXSwgMik7CiAJCQlORF9QUklOVCgobmRvLCAiJXNkJWQ6IiwgY29tbWEsIChpbnQpKmNwKyspKTsKIAkJCWNvbW1hID0gIiwgIjsKIAkJCW5ldHdvcmtzID0gKmNwKys7CisJCQlsZW5ndGggLT0gMjsKIAkJCXdoaWxlICgtLW5ldHdvcmtzID49IDApIHsKIAkJCQkvKiBQaWNrdXAgbmV0d29yayBudW1iZXIgKi8KKwkJCQlpZiAobGVuZ3RoIDwgMSkKKwkJCQkJZ290byB0cnVuYzsKIAkJCQlORF9UQ0hFQ0syKGNwWzBdLCAxKTsKIAkJCQlhZGRyID0gKHVpbnQzMl90KSpjcCsrIDw8IDI0OworCQkJCWxlbmd0aC0tOwogCQkJCWlmIChJTl9DTEFTU0IoYWRkcikpIHsKKwkJCQkJaWYgKGxlbmd0aCA8IDEpCisJCQkJCQlnb3RvIHRydW5jOwogCQkJCQlORF9UQ0hFQ0syKGNwWzBdLCAxKTsKIAkJCQkJYWRkciB8PSAodWludDMyX3QpKmNwKysgPDwgMTY7CisJCQkJCWxlbmd0aC0tOwogCQkJCX0gZWxzZSBpZiAoIUlOX0NMQVNTQShhZGRyKSkgeworCQkJCQlpZiAobGVuZ3RoIDwgMikKKwkJCQkJCWdvdG8gdHJ1bmM7CiAJCQkJCU5EX1RDSEVDSzIoY3BbMF0sIDIpOwogCQkJCQlhZGRyIHw9ICh1aW50MzJfdCkqY3ArKyA8PCAxNjsKIAkJCQkJYWRkciB8PSAodWludDMyX3QpKmNwKysgPDwgODsKKwkJCQkJbGVuZ3RoIC09IDI7CiAJCQkJfQogCQkJCU5EX1BSSU5UKChuZG8sICIgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgJmFkZHIpKSk7CiAJCQl9CkBAIC0yMTUsOCArMjM1LDggQEAKIAlyZWdpc3RlciBpbnQgY29kZTsKIAlyZWdpc3RlciBpbnQgdHlwZTsKIAotCWVncCA9IChzdHJ1Y3QgZWdwX3BhY2tldCAqKWJwOwotICAgICAgICBpZiAoIU5EX1RURVNUMigqZWdwLCBsZW5ndGgpKSB7CisJZWdwID0gKGNvbnN0IHN0cnVjdCBlZ3BfcGFja2V0ICopYnA7CisJaWYgKGxlbmd0aCA8IHNpemVvZigqZWdwKSB8fCAhTkRfVFRFU1QoKmVncCkpIHsKIAkJTkRfUFJJTlQoKG5kbywgIlt8ZWdwXSIpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTMzMyw3ICszNTMsNyBAQAogCQkgICAgICAgZWdwLT5lZ3BfaW50Z3csCiAJCSAgICAgICBlZ3AtPmVncF9leHRndykpOwogCQlpZiAobmRvLT5uZG9fdmZsYWcpCi0JCQllZ3BucnByaW50KG5kbywgZWdwKTsKKwkJCWVncG5ycHJpbnQobmRvLCBlZ3AsIGxlbmd0aCk7CiAJCWJyZWFrOwogCiAJY2FzZSBFR1BUX0VSUk9SOgpkaWZmIC0tZ2l0IGEvcHJpbnQtZWlncnAuYyBiL3ByaW50LWVpZ3JwLmMKaW5kZXggY2FiNzdiYS4uN2UxZmZiNyAxMDA2NDQKLS0tIGEvcHJpbnQtZWlncnAuYworKysgYi9wcmludC1laWdycC5jCkBAIC0xNCwxNiArMTQsMTcgQEAKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBFbmhhbmNlZCBJbnRlcmlvciBHYXRld2F5IFJvdXRpbmcgUHJvdG9jb2wgKEVJR1JQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKZGlmZiAtLWdpdCBhL3ByaW50LWVuYy5jIGIvcHJpbnQtZW5jLmMKaW5kZXggN2JkODYzMS4uZDc5MWIzZiAxMDA2NDQKLS0tIGEvcHJpbnQtZW5jLmMKKysrIGIvcHJpbnQtZW5jLmMKQEAgLTIxLDE0ICsyMSwxNSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBPcGVuQlNEIElQc2VjIGVuY2Fwc3VsYXRpb24gQlBGIGxheWVyIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogLyogRnJvbSAkT3BlbkJTRDogaWZfZW5jLmgsdiAxLjggMjAwMS8wNi8yNSAwNToxNDowMCBhbmdlbG9zIEV4cCAkICovCkBAIC05OCw3ICs5OSw3IEBACiAJCWdvdG8gb3V0OwogCX0KIAotCWhkciA9IChzdHJ1Y3QgZW5jaGRyICopcDsKKwloZHIgPSAoY29uc3Qgc3RydWN0IGVuY2hkciAqKXA7CiAJZmxhZ3MgPSBoZHItPmZsYWdzOwogCWlmIChmbGFncyA9PSAwKQogCQlORF9QUklOVCgobmRvLCAiKHVucHJvdGVjdGVkKTogIikpOwpkaWZmIC0tZ2l0IGEvcHJpbnQtZXNwLmMgYi9wcmludC1lc3AuYwppbmRleCA4ZTI2N2Q0Li4zNzUwNzVhIDEwMDY0NAotLS0gYS9wcmludC1lc3AuYworKysgYi9wcmludC1lc3AuYwpAQCAtMjEsMTIgKzIxLDEzIEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQU0VDIEVuY2Fwc3VsYXRpbmcgU2VjdXJpdHkgUGF5bG9hZCAoRVNQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpAQCAtNDMsMTQgKzQ0LDE1IEBACiAjZW5kaWYKICNlbmRpZgogCi0jaW5jbHVkZSAiaXAuaCIKLSNpZmRlZiBJTkVUNgotI2luY2x1ZGUgImlwNi5oIgotI2VuZGlmCi0KLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSAic3RydG9hZGRyLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCisjaW5jbHVkZSAiYXNjaWlfc3RyY2FzZWNtcC5oIgorCisjaW5jbHVkZSAiaXAuaCIKKyNpbmNsdWRlICJpcDYuaCIKKwogLyoKICAqIENvcHlyaWdodCAoQykgMTk5NSwgMTk5NiwgMTk5NywgYW5kIDE5OTggV0lERSBQcm9qZWN0LgogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KQEAgLTk4LDkgKzEwMCw3IEBACiAjaWZkZWYgSEFWRV9MSUJDUllQVE8KIHVuaW9uIGluYWRkcl91IHsKIAlzdHJ1Y3QgaW5fYWRkciBpbjQ7Ci0jaWZkZWYgSU5FVDYKIAlzdHJ1Y3QgaW42X2FkZHIgaW42OwotI2VuZGlmCiB9Owogc3RydWN0IHNhX2xpc3QgewogCXN0cnVjdCBzYV9saXN0CSpuZXh0OwpAQCAtMTE5LDYgKzExOSwzMiBAQAogCWludAkJc2VjcmV0bGVuOwogfTsKIAorI2lmbmRlZiBIQVZFX0VWUF9DSVBIRVJfQ1RYX05FVworLyoKKyAqIEFsbG9jYXRlIGFuIEVWUF9DSVBIRVJfQ1RYLgorICogVXNlZCBpZiB3ZSBoYXZlIGFuIG9sZGVyIHZlcnNpb24gb2YgT3BlblNTTCB0aGF0IGRvZXNuJ3QgcHJvdmlkZQorICogcm91dGluZXMgdG8gYWxsb2NhdGUgYW5kIGZyZWUgdGhlbS4KKyAqLworc3RhdGljIEVWUF9DSVBIRVJfQ1RYICoKK0VWUF9DSVBIRVJfQ1RYX25ldyh2b2lkKQoreworCUVWUF9DSVBIRVJfQ1RYICpjdHg7CisKKwljdHggPSBtYWxsb2Moc2l6ZW9mKCpjdHgpKTsKKwlpZiAoY3R4ID09IE5VTEwpCisJCXJldHVybiAoTlVMTCk7CisJbWVtc2V0KGN0eCwgMCwgc2l6ZW9mKCpjdHgpKTsKKwlyZXR1cm4gKGN0eCk7Cit9CisKK3N0YXRpYyB2b2lkCitFVlBfQ0lQSEVSX0NUWF9mcmVlKEVWUF9DSVBIRVJfQ1RYICpjdHgpCit7CisJRVZQX0NJUEhFUl9DVFhfY2xlYW51cChjdHgpOworCWZyZWUoY3R4KTsKK30KKyNlbmRpZgorCiAvKgogICogdGhpcyB3aWxsIGFkanVzdCBuZG9fcGFja2V0cCBhbmQgbmRvX3NuYXBlbmQgdG8gbmV3IGJ1ZmZlciEKICAqLwpAQCAtMTI2LDEyICsxNTIsMTIgQEAKIGludCBlc3BfcHJpbnRfZGVjcnlwdF9idWZmZXJfYnlfaWtldjIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAJCQkJICAgICAgaW50IGluaXRpYXRvciwKIAkJCQkgICAgICB1X2NoYXIgc3BpaVs4XSwgdV9jaGFyIHNwaXJbOF0sCi0JCQkJICAgICAgdV9jaGFyICpidWYsIHVfY2hhciAqZW5kKQorCQkJCSAgICAgIGNvbnN0IHVfY2hhciAqYnVmLCBjb25zdCB1X2NoYXIgKmVuZCkKIHsKIAlzdHJ1Y3Qgc2FfbGlzdCAqc2E7Ci0JdV9jaGFyICppdjsKKwljb25zdCB1X2NoYXIgKml2OwogCWludCBsZW47Ci0JRVZQX0NJUEhFUl9DVFggY3R4OworCUVWUF9DSVBIRVJfQ1RYICpjdHg7CiAKIAkvKiBpbml0aWF0b3IgYXJnIGlzIGFueSBub24temVybyB2YWx1ZSAqLwogCWlmKGluaXRpYXRvcikgaW5pdGlhdG9yPTE7CkBAIC0xNTksMTIgKzE4NSwxNCBAQAogCiAJaWYoZW5kIDw9IGJ1ZikgcmV0dXJuIDA7CiAKLQltZW1zZXQoJmN0eCwgMCwgc2l6ZW9mKGN0eCkpOwotCWlmIChFVlBfQ2lwaGVySW5pdCgmY3R4LCBzYS0+ZXZwLCBzYS0+c2VjcmV0LCBOVUxMLCAwKSA8IDApCisJY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisJaWYgKGN0eCA9PSBOVUxMKQorCQlyZXR1cm4gMDsKKwlpZiAoRVZQX0NpcGhlckluaXQoY3R4LCBzYS0+ZXZwLCBzYS0+c2VjcmV0LCBOVUxMLCAwKSA8IDApCiAJCSgqbmRvLT5uZG9fd2FybmluZykobmRvLCAiZXNwa2V5IGluaXQgZmFpbGVkIik7Ci0JRVZQX0NpcGhlckluaXQoJmN0eCwgTlVMTCwgTlVMTCwgaXYsIDApOwotCUVWUF9DaXBoZXIoJmN0eCwgYnVmLCBidWYsIGxlbik7Ci0JRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKKwlFVlBfQ2lwaGVySW5pdChjdHgsIE5VTEwsIE5VTEwsIGl2LCAwKTsKKwlFVlBfQ2lwaGVyKGN0eCwgYnVmLCBidWYsIGxlbik7CisJRVZQX0NJUEhFUl9DVFhfZnJlZShjdHgpOwogCiAJbmRvLT5uZG9fcGFja2V0cCA9IGJ1ZjsKIAluZG8tPm5kb19zbmFwZW5kID0gZW5kOwpAQCAtMzMyLDggKzM2MCw4IEBACiAJfQogCSpjb2xvbiA9ICdcMCc7CiAKLQlpZihzdHJjYXNlY21wKGNvbG9uLCJzaGExIikgPT0gMCB8fAotCSAgIHN0cmNhc2VjbXAoY29sb24sIm1kNSIpID09IDApIHsKKwlpZihhc2NpaV9zdHJjYXNlY21wKGNvbG9uLCJzaGExIikgPT0gMCB8fAorCSAgIGFzY2lpX3N0cmNhc2VjbXAoY29sb24sIm1kNSIpID09IDApIHsKIAkJc2EtPmF1dGhsZW4gPSAxMjsKIAl9CiAJcmV0dXJuIDE7CkBAIC00MjcsMjIgKzQ1NSwyMyBAQAogCX0gZWxzZQogCQlkZWNvZGUgPSBsaW5lOwogCi0JaWYgKHNwaWtleSAmJiBzdHJjYXNlY21wKHNwaWtleSwgImZpbGUiKSA9PSAwKSB7CisJaWYgKHNwaWtleSAmJiBhc2NpaV9zdHJjYXNlY21wKHNwaWtleSwgImZpbGUiKSA9PSAwKSB7CiAJCS8qIG9wZW4gZmlsZSBhbmQgcmVhZCBpdCAqLwogCQlGSUxFICpzZWNyZXRmaWxlOwogCQljaGFyICBmaWxlbGluZVsxMDI0XTsKLQkJaW50ICAgbGluZW5vPTA7CisJCWludCAgIHN1YmZpbGVfbGluZW5vPTA7CiAJCWNoYXIgICpubDsKIAkJY2hhciAqZmlsZW5hbWUgPSBsaW5lOwogCiAJCXNlY3JldGZpbGUgPSBmb3BlbihmaWxlbmFtZSwgRk9QRU5fUkVBRF9UWFQpOwogCQlpZiAoc2VjcmV0ZmlsZSA9PSBOVUxMKSB7Ci0JCQlwZXJyb3IoZmlsZW5hbWUpOwotCQkJZXhpdCgzKTsKKwkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywgInByaW50X2VzcDogY2FuJ3Qgb3BlbiAlczogJXNcbiIsCisJCQkgICAgZmlsZW5hbWUsIHN0cmVycm9yKGVycm5vKSk7CisJCQlyZXR1cm47CiAJCX0KIAogCQl3aGlsZSAoZmdldHMoZmlsZWxpbmUsIHNpemVvZihmaWxlbGluZSktMSwgc2VjcmV0ZmlsZSkgIT0gTlVMTCkgewotCQkJbGluZW5vKys7CisJCQlzdWJmaWxlX2xpbmVubysrOwogCQkJLyogcmVtb3ZlIG5ld2xpbmUgZnJvbSB0aGUgbGluZSAqLwogCQkJbmwgPSBzdHJjaHIoZmlsZWxpbmUsICdcbicpOwogCQkJaWYgKG5sKQpAQCAtNDUwLDE0ICs0NzksMTQgQEAKIAkJCWlmIChmaWxlbGluZVswXSA9PSAnIycpIGNvbnRpbnVlOwogCQkJaWYgKGZpbGVsaW5lWzBdID09ICdcMCcpIGNvbnRpbnVlOwogCi0JCQllc3BfcHJpbnRfZGVjb2RlX29uZXNlY3JldChuZG8sIGZpbGVsaW5lLCBmaWxlbmFtZSwgbGluZW5vKTsKKwkJCWVzcF9wcmludF9kZWNvZGVfb25lc2VjcmV0KG5kbywgZmlsZWxpbmUsIGZpbGVuYW1lLCBzdWJmaWxlX2xpbmVubyk7CiAJCX0KIAkJZmNsb3NlKHNlY3JldGZpbGUpOwogCiAJCXJldHVybjsKIAl9CiAKLQlpZiAoc3Bpa2V5ICYmIHN0cmNhc2VjbXAoc3Bpa2V5LCAiaWtldjIiKSA9PSAwKSB7CisJaWYgKHNwaWtleSAmJiBhc2NpaV9zdHJjYXNlY21wKHNwaWtleSwgImlrZXYyIikgPT0gMCkgewogCQllc3BfcHJpbnRfZGVjb2RlX2lrZWxpbmUobmRvLCBsaW5lLCBmaWxlLCBsaW5lbm8pOwogCQlyZXR1cm47CiAJfQpAQCAtNDc3LDE3ICs1MDYsMTQgQEAKIAogCQlzYTEuc3BpID0gc3Bpbm87CiAKLSNpZmRlZiBJTkVUNgotCQlpZiAoaW5ldF9wdG9uKEFGX0lORVQ2LCBzcGlrZXksICZzYTEuZGFkZHIuaW42KSA9PSAxKSB7CisJCWlmIChzdHJ0b2FkZHI2KHNwaWtleSwgJnNhMS5kYWRkci5pbjYpID09IDEpIHsKIAkJCXNhMS5kYWRkcl92ZXJzaW9uID0gNjsKLQkJfSBlbHNlCi0jZW5kaWYKLQkJCWlmIChpbmV0X3B0b24oQUZfSU5FVCwgc3Bpa2V5LCAmc2ExLmRhZGRyLmluNCkgPT0gMSkgewotCQkJCXNhMS5kYWRkcl92ZXJzaW9uID0gNDsKLQkJCX0gZWxzZSB7Ci0JCQkJKCpuZG8tPm5kb193YXJuaW5nKShuZG8sICJwcmludF9lc3A6IGNhbiBub3QgZGVjb2RlIElQIyAlc1xuIiwgc3Bpa2V5KTsKLQkJCQlyZXR1cm47Ci0JCQl9CisJCX0gZWxzZSBpZiAoc3RydG9hZGRyKHNwaWtleSwgJnNhMS5kYWRkci5pbjQpID09IDEpIHsKKwkJCXNhMS5kYWRkcl92ZXJzaW9uID0gNDsKKwkJfSBlbHNlIHsKKwkJCSgqbmRvLT5uZG9fd2FybmluZykobmRvLCAicHJpbnRfZXNwOiBjYW4gbm90IGRlY29kZSBJUCMgJXNcbiIsIHNwaWtleSk7CisJCQlyZXR1cm47CisJCX0KIAl9CiAKIAlpZiAoZGVjb2RlKSB7CkBAIC01MDYsOCArNTMyLDE0IEBACiBVU0VTX0FQUExFX0RFUFJFQ0FURURfQVBJCiBzdGF0aWMgdm9pZCBlc3BfaW5pdChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbyBfVV8pCiB7Ci0KKwkvKgorCSAqIDAuOS42IGRvZXNuJ3QgYXBwZWFyIHRvIGRlZmluZSBPUEVOU1NMX0FQSV9DT01QQVQsIHNvCisJICogd2UgY2hlY2sgd2hldGhlciBpdCdzIHVuZGVmaW5lZCBvciBpdCdzIGxlc3MgdGhhbiB0aGUKKwkgKiB2YWx1ZSBmb3IgMS4xLjAuCisJICovCisjaWYgIWRlZmluZWQoT1BFTlNTTF9BUElfQ09NUEFUKSB8fCBPUEVOU1NMX0FQSV9DT01QQVQgPCAweDEwMTAwMDAwTAogCU9wZW5TU0xfYWRkX2FsbF9hbGdvcml0aG1zKCk7CisjZW5kaWYKIAlFVlBfYWRkX2NpcGhlcl9hbGlhcyhTTl9kZXNfZWRlM19jYmMsICIzZGVzIik7CiB9CiBVU0VTX0FQUExFX1JTVApAQCAtNTY0LDIxICs1OTYsMTkgQEAKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgbmV3ZXNwICplc3A7CiAJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICplcDsKICNpZmRlZiBIQVZFX0xJQkNSWVBUTwotCXN0cnVjdCBpcCAqaXA7CisJY29uc3Qgc3RydWN0IGlwICppcDsKIAlzdHJ1Y3Qgc2FfbGlzdCAqc2EgPSBOVUxMOwotI2lmZGVmIElORVQ2Ci0Jc3RydWN0IGlwNl9oZHIgKmlwNiA9IE5VTEw7Ci0jZW5kaWYKKwljb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2ID0gTlVMTDsKIAlpbnQgYWR2YW5jZTsKIAlpbnQgbGVuOwogCXVfY2hhciAqc2VjcmV0OwogCWludCBpdmxlbiA9IDA7Ci0JdV9jaGFyICppdm9mZjsKLQl1X2NoYXIgKnA7Ci0JRVZQX0NJUEhFUl9DVFggY3R4OworCWNvbnN0IHVfY2hhciAqaXZvZmY7CisJY29uc3QgdV9jaGFyICpwOworCUVWUF9DSVBIRVJfQ1RYICpjdHg7CiAjZW5kaWYKIAotCWVzcCA9IChzdHJ1Y3QgbmV3ZXNwICopYnA7CisJZXNwID0gKGNvbnN0IHN0cnVjdCBuZXdlc3AgKilicDsKIAogI2lmZGVmIEhBVkVfTElCQ1JZUFRPCiAJc2VjcmV0ID0gTlVMTDsKQEAgLTU5Myw3ICs2MjMsNyBAQAogCS8qICdlcCcgcG9pbnRzIHRvIHRoZSBlbmQgb2YgYXZhaWxhYmxlIGRhdGEuICovCiAJZXAgPSBuZG8tPm5kb19zbmFwZW5kOwogCi0JaWYgKCh1X2NoYXIgKikoZXNwICsgMSkgPj0gZXApIHsKKwlpZiAoKGNvbnN0IHVfY2hhciAqKShlc3AgKyAxKSA+PSBlcCkgewogCQlORF9QUklOVCgobmRvLCAiW3xFU1BdIikpOwogCQlnb3RvIGZhaWw7CiAJfQpAQCAtNjE1LDExICs2NDUsMTAgQEAKIAlpZiAobmRvLT5uZG9fc2FfbGlzdF9oZWFkID09IE5VTEwpCiAJCWdvdG8gZmFpbDsKIAotCWlwID0gKHN0cnVjdCBpcCAqKWJwMjsKKwlpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDI7CiAJc3dpdGNoIChJUF9WKGlwKSkgewotI2lmZGVmIElORVQ2CiAJY2FzZSA2OgotCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKilicDI7CisJCWlwNiA9IChjb25zdCBzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKIAkJLyogd2UgZG8gbm90IGF0dGVtcHQgdG8gZGVjcnlwdCBqdW1ib2dyYW1zICovCiAJCWlmICghRVhUUkFDVF8xNkJJVFMoJmlwNi0+aXA2X3BsZW4pKQogCQkJZ290byBmYWlsOwpAQCAtNjM2LDcgKzY2NSw2IEBACiAJCQl9CiAJCX0KIAkJYnJlYWs7Ci0jZW5kaWYgLypJTkVUNiovCiAJY2FzZSA0OgogCQkvKiBuZXh0aGRyICYgcGFkZGluZyBhcmUgaW4gdGhlIGxhc3QgZnJhZ21lbnQgKi8KIAkJaWYgKEVYVFJBQ1RfMTZCSVRTKCZpcC0+aXBfb2ZmKSAmIElQX01GKQpAQCAtNjc1LDIxICs3MDMsMjQgQEAKIAkJZXAgPSBicDIgKyBsZW47CiAJfQogCi0JaXZvZmYgPSAodV9jaGFyICopKGVzcCArIDEpICsgMDsKKwlpdm9mZiA9IChjb25zdCB1X2NoYXIgKikoZXNwICsgMSkgKyAwOwogCWl2bGVuID0gc2EtPml2bGVuOwogCXNlY3JldCA9IHNhLT5zZWNyZXQ7CiAJZXAgPSBlcCAtIHNhLT5hdXRobGVuOwogCiAJaWYgKHNhLT5ldnApIHsKLQkJbWVtc2V0KCZjdHgsIDAsIHNpemVvZihjdHgpKTsKLQkJaWYgKEVWUF9DaXBoZXJJbml0KCZjdHgsIHNhLT5ldnAsIHNlY3JldCwgTlVMTCwgMCkgPCAwKQotCQkJKCpuZG8tPm5kb193YXJuaW5nKShuZG8sICJlc3BrZXkgaW5pdCBmYWlsZWQiKTsKKwkJY3R4ID0gRVZQX0NJUEhFUl9DVFhfbmV3KCk7CisJCWlmIChjdHggIT0gTlVMTCkgeworCQkJaWYgKEVWUF9DaXBoZXJJbml0KGN0eCwgc2EtPmV2cCwgc2VjcmV0LCBOVUxMLCAwKSA8IDApCisJCQkJKCpuZG8tPm5kb193YXJuaW5nKShuZG8sICJlc3BrZXkgaW5pdCBmYWlsZWQiKTsKIAotCQlwID0gaXZvZmY7Ci0JCUVWUF9DaXBoZXJJbml0KCZjdHgsIE5VTEwsIE5VTEwsIHAsIDApOwotCQlFVlBfQ2lwaGVyKCZjdHgsIHAgKyBpdmxlbiwgcCArIGl2bGVuLCBlcCAtIChwICsgaXZsZW4pKTsKLQkJRVZQX0NJUEhFUl9DVFhfY2xlYW51cCgmY3R4KTsKLQkJYWR2YW5jZSA9IGl2b2ZmIC0gKHVfY2hhciAqKWVzcCArIGl2bGVuOworCQkJcCA9IGl2b2ZmOworCQkJRVZQX0NpcGhlckluaXQoY3R4LCBOVUxMLCBOVUxMLCBwLCAwKTsKKwkJCUVWUF9DaXBoZXIoY3R4LCBwICsgaXZsZW4sIHAgKyBpdmxlbiwgZXAgLSAocCArIGl2bGVuKSk7CisJCQlFVlBfQ0lQSEVSX0NUWF9mcmVlKGN0eCk7CisJCQlhZHZhbmNlID0gaXZvZmYgLSAoY29uc3QgdV9jaGFyICopZXNwICsgaXZsZW47CisJCX0gZWxzZQorCQkJYWR2YW5jZSA9IHNpemVvZihzdHJ1Y3QgbmV3ZXNwKTsKIAl9IGVsc2UKIAkJYWR2YW5jZSA9IHNpemVvZihzdHJ1Y3QgbmV3ZXNwKTsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtZXRoZXIuYyBiL3ByaW50LWV0aGVyLmMKaW5kZXggZTU3ZDk5My4uYmJmZDdlOSAxMDA2NDQKLS0tIGEvcHJpbnQtZXRoZXIuYworKysgYi9wcmludC1ldGhlci5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogRXRoZXJuZXQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJldGhlcnR5cGUuaCIKQEAgLTgzLDYgKzg0LDcgQEAKICAgICB7IEVUSEVSVFlQRV9HRU9ORVQsICAgICAgICAgIkdlb05ldCJ9LAogICAgIHsgRVRIRVJUWVBFX0NBTE1fRkFTVCwgICAgICAiQ0FMTSBGQVNUIn0sCiAgICAgeyBFVEhFUlRZUEVfQU9FLCAgICAgICAgICAgICJBb0UiIH0sCisgICAgeyBFVEhFUlRZUEVfTUVEU0EsICAgICAgICAgICJNRURTQSIgfSwKICAgICB7IDAsIE5VTEx9CiB9OwogCkBAIC05MSw3ICs5Myw3IEBACiAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQogewogCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBldGhlcl9oZWFkZXIgKmVwOwotCXVpbnQxNl90IGV0aGVyX3R5cGU7CisJdWludDE2X3QgbGVuZ3RoX3R5cGU7CiAKIAllcCA9IChjb25zdCBzdHJ1Y3QgZXRoZXJfaGVhZGVyICopYnA7CiAKQEAgLTk5LDE5ICsxMDEsMjEgQEAKIAkJICAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgRVNSQyhlcCkpLAogCQkgICAgIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBFRFNUKGVwKSkpKTsKIAotCWV0aGVyX3R5cGUgPSBFWFRSQUNUXzE2QklUUygmZXAtPmV0aGVyX3R5cGUpOworCWxlbmd0aF90eXBlID0gRVhUUkFDVF8xNkJJVFMoJmVwLT5ldGhlcl9sZW5ndGhfdHlwZSk7CiAJaWYgKCFuZG8tPm5kb19xZmxhZykgewotCSAgICAgICAgaWYgKGV0aGVyX3R5cGUgPD0gRVRIRVJNVFUpCi0JCSAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCA4MDIuMyIpKTsKLSAgICAgICAgICAgICAgICBlbHNlCi0JCSAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBldGhlcnR5cGUgJXMgKDB4JTA0eCkiLAotCQkJCSAgICAgICB0b2syc3RyKGV0aGVydHlwZV92YWx1ZXMsIlVua25vd24iLCBldGhlcl90eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV0aGVyX3R5cGUpKTsKKwkgICAgICAgIGlmIChsZW5ndGhfdHlwZSA8PSBFVEhFUk1UVSkgeworCQkgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIDgwMi4zIikpOworCQkJbGVuZ3RoID0gbGVuZ3RoX3R5cGU7CisJCX0gZWxzZQorCQkgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGV0aGVydHlwZSAlcyAoMHglMDR4KSIsCisJCQkJICAgICAgIHRvazJzdHIoZXRoZXJ0eXBlX3ZhbHVlcywiVW5rbm93biIsIGxlbmd0aF90eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlKSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaWYgKGV0aGVyX3R5cGUgPD0gRVRIRVJNVFUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIDgwMi4zIikpOwotICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXMiLCB0b2syc3RyKGV0aGVydHlwZV92YWx1ZXMsIlVua25vd24gRXRoZXJ0eXBlICgweCUwNHgpIiwgZXRoZXJfdHlwZSkpKTsKKyAgICAgICAgICAgICAgICBpZiAobGVuZ3RoX3R5cGUgPD0gRVRIRVJNVFUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIDgwMi4zIikpOworCQkJbGVuZ3RoID0gbGVuZ3RoX3R5cGU7CisJCX0gZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXMiLCB0b2syc3RyKGV0aGVydHlwZV92YWx1ZXMsIlVua25vd24gRXRoZXJ0eXBlICgweCUwNHgpIiwgbGVuZ3RoX3R5cGUpKSk7CiAgICAgICAgIH0KIAogCU5EX1BSSU5UKChuZG8sICIsIGxlbmd0aCAldTogIiwgbGVuZ3RoKSk7CkBAIC0xMjIsMjAgKzEyNiwyOCBAQAogICogVGhpcyBtaWdodCBiZSBlbmNhcHN1bGF0ZWQgd2l0aGluIGFub3RoZXIgZnJhbWU7IHdlIG1pZ2h0IGJlIHBhc3NlZAogICogYSBwb2ludGVyIHRvIGEgZnVuY3Rpb24gdGhhdCBjYW4gcHJpbnQgaGVhZGVyIGluZm9ybWF0aW9uIGZvciB0aGF0CiAgKiBmcmFtZSdzIHByb3RvY29sLCBhbmQgYW4gYXJndW1lbnQgdG8gcGFzcyB0byB0aGF0IGZ1bmN0aW9uLgorICoKKyAqIEZJWE1FOiBjYXBsZW4gY2FuIGFuZCBzaG91bGQgYmUgZGVyaXZlZCBmcm9tIG5kby0+bmRvX3NuYXBlbmQgYW5kIHAuCiAgKi8KLXZvaWQKK3VfaW50CiBldGhlcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBjYXBsZW4sCiAgICAgICAgICAgICB2b2lkICgqcHJpbnRfZW5jYXBfaGVhZGVyKShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICopLCBjb25zdCB1X2NoYXIgKmVuY2FwX2hlYWRlcl9hcmcpCiB7Ci0Jc3RydWN0IGV0aGVyX2hlYWRlciAqZXA7CisJY29uc3Qgc3RydWN0IGV0aGVyX2hlYWRlciAqZXA7CiAJdV9pbnQgb3JpZ19sZW5ndGg7Ci0JdV9zaG9ydCBldGhlcl90eXBlOwotCXVfc2hvcnQgZXh0cmFjdGVkX2V0aGVyX3R5cGU7CisJdV9zaG9ydCBsZW5ndGhfdHlwZTsKKwl1X2ludCBoZHJsZW47CisJaW50IGxsY19oZHJsZW47CisJc3RydWN0IGxsYWRkcl9pbmZvIHNyYywgZHN0OwogCi0JaWYgKGNhcGxlbiA8IEVUSEVSX0hEUkxFTiB8fCBsZW5ndGggPCBFVEhFUl9IRFJMRU4pIHsKKwlpZiAoY2FwbGVuIDwgRVRIRVJfSERSTEVOKSB7CiAJCU5EX1BSSU5UKChuZG8sICJbfGV0aGVyXSIpKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gKGNhcGxlbik7CisJfQorCWlmIChsZW5ndGggPCBFVEhFUl9IRFJMRU4pIHsKKwkJTkRfUFJJTlQoKG5kbywgIlt8ZXRoZXJdIikpOworCQlyZXR1cm4gKGxlbmd0aCk7CiAJfQogCiAJaWYgKG5kby0+bmRvX2VmbGFnKSB7CkBAIC0xNDcsNTUgKzE1OSw2MSBAQAogCiAJbGVuZ3RoIC09IEVUSEVSX0hEUkxFTjsKIAljYXBsZW4gLT0gRVRIRVJfSERSTEVOOwotCWVwID0gKHN0cnVjdCBldGhlcl9oZWFkZXIgKilwOworCWVwID0gKGNvbnN0IHN0cnVjdCBldGhlcl9oZWFkZXIgKilwOwogCXAgKz0gRVRIRVJfSERSTEVOOworCWhkcmxlbiA9IEVUSEVSX0hEUkxFTjsKIAotCWV0aGVyX3R5cGUgPSBFWFRSQUNUXzE2QklUUygmZXAtPmV0aGVyX3R5cGUpOworCXNyYy5hZGRyID0gRVNSQyhlcCk7CisJc3JjLmFkZHJfc3RyaW5nID0gZXRoZXJhZGRyX3N0cmluZzsKKwlkc3QuYWRkciA9IEVEU1QoZXApOworCWRzdC5hZGRyX3N0cmluZyA9IGV0aGVyYWRkcl9zdHJpbmc7CisJbGVuZ3RoX3R5cGUgPSBFWFRSQUNUXzE2QklUUygmZXAtPmV0aGVyX2xlbmd0aF90eXBlKTsKIAogcmVjdXJzZToKIAkvKgogCSAqIElzIGl0IChnYWcpIGFuIDgwMi4zIGVuY2Fwc3VsYXRpb24/CiAJICovCi0JaWYgKGV0aGVyX3R5cGUgPD0gRVRIRVJNVFUpIHsKKwlpZiAobGVuZ3RoX3R5cGUgPD0gRVRIRVJNVFUpIHsKIAkJLyogVHJ5IHRvIHByaW50IHRoZSBMTEMtbGF5ZXIgaGVhZGVyICYgaGlnaGVyIGxheWVycyAqLwotCQlpZiAobGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIEVTUkMoZXApLCBFRFNUKGVwKSwKLQkJICAgICZleHRyYWN0ZWRfZXRoZXJfdHlwZSkgPT0gMCkgewotCQkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KLQkJCWlmICghbmRvLT5uZG9fZWZsYWcpIHsKLQkJCQlpZiAocHJpbnRfZW5jYXBfaGVhZGVyICE9IE5VTEwpCi0JCQkJCSgqcHJpbnRfZW5jYXBfaGVhZGVyKShuZG8sIGVuY2FwX2hlYWRlcl9hcmcpOwotCQkJCWV0aGVyX2hkcl9wcmludChuZG8sICh1X2NoYXIgKillcCwgb3JpZ19sZW5ndGgpOwotCQkJfQotCisJCWxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgJnNyYywgJmRzdCk7CisJCWlmIChsbGNfaGRybGVuIDwgMCkgeworCQkJLyogcGFja2V0IHR5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCiAJCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCiAJCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCQlsbGNfaGRybGVuID0gLWxsY19oZHJsZW47CiAJCX0KLQl9IGVsc2UgaWYgKGV0aGVyX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFRICB8fAotICAgICAgICAgICAgICAgIGV0aGVyX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFROTEwMCB8fAotICAgICAgICAgICAgICAgIGV0aGVyX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFROTIwMCB8fAotICAgICAgICAgICAgICAgIGV0aGVyX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFRaW5RKSB7CisJCWhkcmxlbiArPSBsbGNfaGRybGVuOworCX0gZWxzZSBpZiAobGVuZ3RoX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFRICB8fAorICAgICAgICAgICAgICAgIGxlbmd0aF90eXBlID09IEVUSEVSVFlQRV84MDIxUTkxMDAgfHwKKyAgICAgICAgICAgICAgICBsZW5ndGhfdHlwZSA9PSBFVEhFUlRZUEVfODAyMVE5MjAwIHx8CisgICAgICAgICAgICAgICAgbGVuZ3RoX3R5cGUgPT0gRVRIRVJUWVBFXzgwMjFRaW5RKSB7CiAJCS8qCiAJCSAqIFByaW50IFZMQU4gaW5mb3JtYXRpb24sIGFuZCB0aGVuIGdvIGJhY2sgYW5kIHByb2Nlc3MKIAkJICogdGhlIGVuY2xvc2VkIHR5cGUgZmllbGQuCiAJCSAqLwotCQlpZiAoY2FwbGVuIDwgNCB8fCBsZW5ndGggPCA0KSB7CisJCWlmIChjYXBsZW4gPCA0KSB7CiAJCQlORF9QUklOVCgobmRvLCAiW3x2bGFuXSIpKTsKLQkJCXJldHVybjsKKwkJCXJldHVybiAoaGRybGVuICsgY2FwbGVuKTsKKwkJfQorCQlpZiAobGVuZ3RoIDwgNCkgeworCQkJTkRfUFJJTlQoKG5kbywgIlt8dmxhbl0iKSk7CisJCQlyZXR1cm4gKGhkcmxlbiArIGxlbmd0aCk7CiAJCX0KIAkgICAgICAgIGlmIChuZG8tPm5kb19lZmxhZykgewotCSAgICAgICAgCXVpbnQxNl90IHRhZyA9IEVYVFJBQ1RfMTZCSVRTKHApOworCQkJdWludDE2X3QgdGFnID0gRVhUUkFDVF8xNkJJVFMocCk7CiAKIAkJCU5EX1BSSU5UKChuZG8sICIlcywgIiwgaWVlZTgwMjFxX3RjaV9zdHJpbmcodGFnKSkpOwogCQl9CiAKLQkJZXRoZXJfdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKHAgKyAyKTsKLQkJaWYgKG5kby0+bmRvX2VmbGFnICYmIGV0aGVyX3R5cGUgPiBFVEhFUk1UVSkKLQkJCU5EX1BSSU5UKChuZG8sICJldGhlcnR5cGUgJXMsICIsIHRvazJzdHIoZXRoZXJ0eXBlX3ZhbHVlcywiMHglMDR4IiwgZXRoZXJfdHlwZSkpKTsKKwkJbGVuZ3RoX3R5cGUgPSBFWFRSQUNUXzE2QklUUyhwICsgMik7CisJCWlmIChuZG8tPm5kb19lZmxhZyAmJiBsZW5ndGhfdHlwZSA+IEVUSEVSTVRVKQorCQkJTkRfUFJJTlQoKG5kbywgImV0aGVydHlwZSAlcywgIiwgdG9rMnN0cihldGhlcnR5cGVfdmFsdWVzLCIweCUwNHgiLCBsZW5ndGhfdHlwZSkpKTsKIAkJcCArPSA0OwogCQlsZW5ndGggLT0gNDsKIAkJY2FwbGVuIC09IDQ7CisJCWhkcmxlbiArPSA0OwogCQlnb3RvIHJlY3Vyc2U7Ci0JfSBlbHNlIGlmIChldGhlcl90eXBlID09IEVUSEVSVFlQRV9KVU1CTykgeworCX0gZWxzZSBpZiAobGVuZ3RoX3R5cGUgPT0gRVRIRVJUWVBFX0pVTUJPKSB7CiAJCS8qCiAJCSAqIEFsdGVvbiBqdW1ibyBmcmFtZXMuCiAJCSAqIFNlZQpAQCAtMjA2LDUzICsyMjQsNDggQEAKIAkJICogdGhlcmUncyBhbiBMTEMgaGVhZGVyIGFuZCBwYXlsb2FkLgogCQkgKi8KIAkJLyogVHJ5IHRvIHByaW50IHRoZSBMTEMtbGF5ZXIgaGVhZGVyICYgaGlnaGVyIGxheWVycyAqLwotCQlpZiAobGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIEVTUkMoZXApLCBFRFNUKGVwKSwKLQkJICAgICZleHRyYWN0ZWRfZXRoZXJfdHlwZSkgPT0gMCkgewotCQkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KLQkJCWlmICghbmRvLT5uZG9fZWZsYWcpIHsKLQkJCQlpZiAocHJpbnRfZW5jYXBfaGVhZGVyICE9IE5VTEwpCi0JCQkJCSgqcHJpbnRfZW5jYXBfaGVhZGVyKShuZG8sIGVuY2FwX2hlYWRlcl9hcmcpOwotCQkJCWV0aGVyX2hkcl9wcmludChuZG8sICh1X2NoYXIgKillcCwgb3JpZ19sZW5ndGgpOwotCQkJfQotCisJCWxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgJnNyYywgJmRzdCk7CisJCWlmIChsbGNfaGRybGVuIDwgMCkgeworCQkJLyogcGFja2V0IHR5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCiAJCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCiAJCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCQlsbGNfaGRybGVuID0gLWxsY19oZHJsZW47CiAJCX0KKwkJaGRybGVuICs9IGxsY19oZHJsZW47CiAJfSBlbHNlIHsKLQkJaWYgKGV0aGVydHlwZV9wcmludChuZG8sIGV0aGVyX3R5cGUsIHAsIGxlbmd0aCwgY2FwbGVuKSA9PSAwKSB7Ci0JCQkvKiBldGhlcl90eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLworCQlpZiAoZXRoZXJ0eXBlX3ByaW50KG5kbywgbGVuZ3RoX3R5cGUsIHAsIGxlbmd0aCwgY2FwbGVuLCAmc3JjLCAmZHN0KSA9PSAwKSB7CisJCQkvKiB0eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLwogCQkJaWYgKCFuZG8tPm5kb19lZmxhZykgewogCQkJCWlmIChwcmludF9lbmNhcF9oZWFkZXIgIT0gTlVMTCkKIAkJCQkJKCpwcmludF9lbmNhcF9oZWFkZXIpKG5kbywgZW5jYXBfaGVhZGVyX2FyZyk7Ci0JCQkJZXRoZXJfaGRyX3ByaW50KG5kbywgKHVfY2hhciAqKWVwLCBvcmlnX2xlbmd0aCk7CisJCQkJZXRoZXJfaGRyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWVwLCBvcmlnX2xlbmd0aCk7CiAJCQl9CiAKIAkJCWlmICghbmRvLT5uZG9fc3VwcHJlc3NfZGVmYXVsdF9wcmludCkKIAkJCQlORF9ERUZBVUxUUFJJTlQocCwgY2FwbGVuKTsKIAkJfQogCX0KKwlyZXR1cm4gKGhkcmxlbik7CiB9CiAKIC8qCiAgKiBUaGlzIGlzIHRoZSB0b3AgbGV2ZWwgcm91dGluZSBvZiB0aGUgcHJpbnRlci4gICdwJyBwb2ludHMKLSAqIHRvIHRoZSBldGhlciBoZWFkZXIgb2YgdGhlIHBhY2tldCwgJ2gtPnRzJyBpcyB0aGUgdGltZXN0YW1wLAotICogJ2gtPmxlbicgaXMgdGhlIGxlbmd0aCBvZiB0aGUgcGFja2V0IG9mZiB0aGUgd2lyZSwgYW5kICdoLT5jYXBsZW4nCi0gKiBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGFjdHVhbGx5IGNhcHR1cmVkLgorICogdG8gdGhlIGV0aGVyIGhlYWRlciBvZiB0aGUgcGFja2V0LCAnaC0+bGVuJyBpcyB0aGUgbGVuZ3RoCisgKiBvZiB0aGUgcGFja2V0IG9mZiB0aGUgd2lyZSwgYW5kICdoLT5jYXBsZW4nIGlzIHRoZSBudW1iZXIKKyAqIG9mIGJ5dGVzIGFjdHVhbGx5IGNhcHR1cmVkLgogICovCiB1X2ludAogZXRoZXJfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwKICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcCkKIHsKLQlldGhlcl9wcmludChuZG8sIHAsIGgtPmxlbiwgaC0+Y2FwbGVuLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiAoRVRIRVJfSERSTEVOKTsKKwlyZXR1cm4gKGV0aGVyX3ByaW50KG5kbywgcCwgaC0+bGVuLCBoLT5jYXBsZW4sIE5VTEwsIE5VTEwpKTsKIH0KIAogLyoKICAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCByb3V0aW5lIG9mIHRoZSBwcmludGVyLiAgJ3AnIHBvaW50cwotICogdG8gdGhlIGV0aGVyIGhlYWRlciBvZiB0aGUgcGFja2V0LCAnaC0+dHMnIGlzIHRoZSB0aW1lc3RhbXAsCi0gKiAnaC0+bGVuJyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgb2ZmIHRoZSB3aXJlLCBhbmQgJ2gtPmNhcGxlbicKLSAqIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgY2FwdHVyZWQuCisgKiB0byB0aGUgZXRoZXIgaGVhZGVyIG9mIHRoZSBwYWNrZXQsICdoLT5sZW4nIGlzIHRoZSBsZW5ndGgKKyAqIG9mIHRoZSBwYWNrZXQgb2ZmIHRoZSB3aXJlLCBhbmQgJ2gtPmNhcGxlbicgaXMgdGhlIG51bWJlcgorICogb2YgYnl0ZXMgYWN0dWFsbHkgY2FwdHVyZWQuCiAgKgogICogVGhpcyBpcyBmb3IgRExUX05FVEFOQUxZWkVSLCB3aGljaCBoYXMgYSA0LWJ5dGUgcHNldWRvLWhlYWRlcgogICogYmVmb3JlIHRoZSBFdGhlcm5ldCBoZWFkZXIuCkBAIC0yNzAsMTYgKzI4MywxNCBAQAogCX0KIAogCS8qIFNraXAgdGhlIHBzZXVkby1oZWFkZXIuICovCi0JZXRoZXJfcHJpbnQobmRvLCBwICsgNCwgaC0+bGVuIC0gNCwgaC0+Y2FwbGVuIC0gNCwgTlVMTCwgTlVMTCk7Ci0KLQlyZXR1cm4gKDQgKyBFVEhFUl9IRFJMRU4pOworCXJldHVybiAoNCArIGV0aGVyX3ByaW50KG5kbywgcCArIDQsIGgtPmxlbiAtIDQsIGgtPmNhcGxlbiAtIDQsIE5VTEwsIE5VTEwpKTsKIH0KIAogLyoKICAqIFRoaXMgaXMgdGhlIHRvcCBsZXZlbCByb3V0aW5lIG9mIHRoZSBwcmludGVyLiAgJ3AnIHBvaW50cwotICogdG8gdGhlIGV0aGVyIGhlYWRlciBvZiB0aGUgcGFja2V0LCAnaC0+dHMnIGlzIHRoZSB0aW1lc3RhbXAsCi0gKiAnaC0+bGVuJyBpcyB0aGUgbGVuZ3RoIG9mIHRoZSBwYWNrZXQgb2ZmIHRoZSB3aXJlLCBhbmQgJ2gtPmNhcGxlbicKLSAqIGlzIHRoZSBudW1iZXIgb2YgYnl0ZXMgYWN0dWFsbHkgY2FwdHVyZWQuCisgKiB0byB0aGUgZXRoZXIgaGVhZGVyIG9mIHRoZSBwYWNrZXQsICdoLT5sZW4nIGlzIHRoZSBsZW5ndGgKKyAqIG9mIHRoZSBwYWNrZXQgb2ZmIHRoZSB3aXJlLCBhbmQgJ2gtPmNhcGxlbicgaXMgdGhlIG51bWJlcgorICogb2YgYnl0ZXMgYWN0dWFsbHkgY2FwdHVyZWQuCiAgKgogICogVGhpcyBpcyBmb3IgRExUX05FVEFOQUxZWkVSX1RSQU5TUEFSRU5ULCB3aGljaCBoYXMgYSA0LWJ5dGUKICAqIHBzZXVkby1oZWFkZXIsIGEgNy1ieXRlIEV0aGVybmV0IHByZWFtYmxlLCBhbmQgYSAxLWJ5dGUgRXRoZXJuZXQgU09GCkBAIC0zMDAsOSArMzExLDcgQEAKIAl9CiAKIAkvKiBTa2lwIHRoZSBwc2V1ZG8taGVhZGVyLCBwcmVhbWJsZSwgYW5kIFNPRi4gKi8KLQlldGhlcl9wcmludChuZG8sIHAgKyAxMiwgaC0+bGVuIC0gMTIsIGgtPmNhcGxlbiAtIDEyLCBOVUxMLCBOVUxMKTsKLQotCXJldHVybiAoMTIgKyBFVEhFUl9IRFJMRU4pOworCXJldHVybiAoMTIgKyBldGhlcl9wcmludChuZG8sIHAgKyAxMiwgaC0+bGVuIC0gMTIsIGgtPmNhcGxlbiAtIDEyLCBOVUxMLCBOVUxMKSk7CiB9CiAKIC8qCkBAIC0zMTUsNyArMzI0LDggQEAKIGludAogZXRoZXJ0eXBlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgIHVfc2hvcnQgZXRoZXJfdHlwZSwgY29uc3QgdV9jaGFyICpwLAotICAgICAgICAgICAgICAgIHVfaW50IGxlbmd0aCwgdV9pbnQgY2FwbGVuKQorICAgICAgICAgICAgICAgIHVfaW50IGxlbmd0aCwgdV9pbnQgY2FwbGVuLAorICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqc3JjLCBjb25zdCBzdHJ1Y3QgbGxhZGRyX2luZm8gKmRzdCkKIHsKIAlzd2l0Y2ggKGV0aGVyX3R5cGUpIHsKIApAQCAtMzI5LDcgKzMzOSw3IEBACiAKIAljYXNlIEVUSEVSVFlQRV9BUlA6CiAJY2FzZSBFVEhFUlRZUEVfUkVWQVJQOgotICAJICAgICAgICBhcnBfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbik7CisJICAgICAgICBhcnBfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbik7CiAJCXJldHVybiAoMSk7CiAKIAljYXNlIEVUSEVSVFlQRV9ETjoKQEAgLTM1Miw3ICszNjIsMTEgQEAKIAkJcmV0dXJuICgxKTsKIAogCWNhc2UgRVRIRVJUWVBFX0lTTzoKLQkJaXNvY2xuc19wcmludChuZG8sIHAgKyAxLCBsZW5ndGggLSAxLCBsZW5ndGggLSAxKTsKKwkJaWYgKGxlbmd0aCA9PSAwIHx8IGNhcGxlbiA9PSAwKSB7CisJCQlORF9QUklOVCgobmRvLCAiIFt8b3NpXSIpKTsKKwkJCXJldHVybiAoMSk7CisJCX0KKwkJaXNvY2xuc19wcmludChuZG8sIHAgKyAxLCBsZW5ndGggLSAxLCBjYXBsZW4gLSAxKTsKIAkJcmV0dXJuKDEpOwogCiAJY2FzZSBFVEhFUlRZUEVfUFBQT0VEOgpAQCAtMzY3LDcgKzM4MSw3IEBACiAJCXJldHVybiAoMSk7CiAKIAljYXNlIEVUSEVSVFlQRV9SUkNQOgotCSAgICAgICAgcnJjcF9wcmludChuZG8sIHAgLSAxNCAsIGxlbmd0aCArIDE0KTsKKwkgICAgICAgIHJyY3BfcHJpbnQobmRvLCBwLCBsZW5ndGgsIHNyYywgZHN0KTsKIAkJcmV0dXJuICgxKTsKIAogCWNhc2UgRVRIRVJUWVBFX1BQUDoKQEAgLTQxMywxNyArNDI3LDIxIEBACiAKICAgICAgICAgY2FzZSBFVEhFUlRZUEVfR0VPTkVUX09MRDoKICAgICAgICAgY2FzZSBFVEhFUlRZUEVfR0VPTkVUOgotICAgICAgICAgICAgICAgIGdlb25ldF9wcmludChuZG8sIHAtMTQsIHAsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgZ2VvbmV0X3ByaW50KG5kbywgcCwgbGVuZ3RoLCBzcmMpOwogICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAKICAgICAgICAgY2FzZSBFVEhFUlRZUEVfQ0FMTV9GQVNUOgotICAgICAgICAgICAgICAgIGNhbG1fZmFzdF9wcmludChuZG8sIHAtMTQsIHAsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgY2FsbV9mYXN0X3ByaW50KG5kbywgcCwgbGVuZ3RoLCBzcmMpOwogICAgICAgICAgICAgICAgIHJldHVybiAoMSk7CiAKIAljYXNlIEVUSEVSVFlQRV9BT0U6CiAJCWFvZV9wcmludChuZG8sIHAsIGxlbmd0aCk7CiAJCXJldHVybiAoMSk7CiAKKwljYXNlIEVUSEVSVFlQRV9NRURTQToKKwkJbWVkc2FfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgc3JjLCBkc3QpOworCQlyZXR1cm4gKDEpOworCiAJY2FzZSBFVEhFUlRZUEVfTEFUOgogCWNhc2UgRVRIRVJUWVBFX1NDQToKIAljYXNlIEVUSEVSVFlQRV9NT1BSQzoKZGlmZiAtLWdpdCBhL3ByaW50LWZkZGkuYyBiL3ByaW50LWZkZGkuYwppbmRleCBhZDc2MGM4Li4yNzgwMzc4IDEwMDY0NAotLS0gYS9wcmludC1mZGRpLmMKKysrIGIvcHJpbnQtZmRkaS5jCkBAIC0xOSwxNiArMTksMTcgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogRmliZXIgRGlzdHJpYnV0ZWQgRGF0YSBJbnRlcmZhY2UgKEZEREkpIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV0aGVyLmgiCiAKQEAgLTg0LDkgKzg1LDkgQEAKICAqIFNvbWUgRkRESSBpbnRlcmZhY2VzIHVzZSBiaXQtc3dhcHBlZCBhZGRyZXNzZXMuCiAgKi8KICNpZiBkZWZpbmVkKHVsdHJpeCkgfHwgZGVmaW5lZChfX2FscGhhKSB8fCBkZWZpbmVkKF9fYnNkaSkgfHwgZGVmaW5lZChfX05ldEJTRF9fKSB8fCBkZWZpbmVkKF9fbGludXhfXykKLWludAlmZGRpX2JpdHN3YXAgPSAwOworc3RhdGljIGludCBmZGRpX2JpdHN3YXAgPSAwOwogI2Vsc2UKLWludAlmZGRpX2JpdHN3YXAgPSAxOworc3RhdGljIGludCBmZGRpX2JpdHN3YXAgPSAxOwogI2VuZGlmCiAKIC8qCkBAIC0yNTksMTcgKzI2MCwxMSBAQAogCXNyY25hbWUgPSBldGhlcmFkZHJfc3RyaW5nKG5kbywgZnNyYyk7CiAJZHN0bmFtZSA9IGV0aGVyYWRkcl9zdHJpbmcobmRvLCBmZHN0KTsKIAotCWlmIChuZG8tPm5kb192ZmxhZykKLQkJTkRfUFJJTlQoKG5kbywgIiUwMnggJXMgJXMgJWQ6ICIsCi0JCSAgICAgICBmZGRpcC0+ZmRkaV9mYywKLQkJICAgICAgIHNyY25hbWUsIGRzdG5hbWUsCi0JCSAgICAgICBsZW5ndGgpKTsKLQllbHNlIGlmIChuZG8tPm5kb19xZmxhZykKLQkJTkRfUFJJTlQoKG5kbywgIiVzICVzICVkOiAiLCBzcmNuYW1lLCBkc3RuYW1lLCBsZW5ndGgpKTsKLQllbHNlIHsKKwlpZiAoIW5kby0+bmRvX3FmbGFnKQogCQlwcmludF9mZGRpX2ZjKG5kbywgZmRkaXAtPmZkZGlfZmMpOwotCQlORF9QUklOVCgobmRvLCAiJXMgJXMgJWQ6ICIsIHNyY25hbWUsIGRzdG5hbWUsIGxlbmd0aCkpOwotCX0KKwlORF9QUklOVCgobmRvLCAiJXMgPiAlcywgbGVuZ3RoICV1OiAiLAorCSAgICAgICBzcmNuYW1lLCBkc3RuYW1lLAorCSAgICAgICBsZW5ndGgpKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCkBAIC0yNzgsMTYgKzI3MywxNyBAQAogCU5EX1BSSU5UKChuZG8sICI8U01UIHByaW50ZXIgbm90IHlldCBpbXBsZW1lbnRlZD4iKSk7CiB9CiAKLXZvaWQKK3VfaW50CiBmZGRpX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKnAsIHVfaW50IGxlbmd0aCwgdV9pbnQgY2FwbGVuKQogewogCWNvbnN0IHN0cnVjdCBmZGRpX2hlYWRlciAqZmRkaXAgPSAoY29uc3Qgc3RydWN0IGZkZGlfaGVhZGVyICopcDsKIAlzdHJ1Y3QgZXRoZXJfaGVhZGVyIGVoZHI7Ci0JdV9zaG9ydCBleHRyYWN0ZWRfZXRoZXJ0eXBlOworCXN0cnVjdCBsbGFkZHJfaW5mbyBzcmMsIGRzdDsKKwlpbnQgbGxjX2hkcmxlbjsKIAogCWlmIChjYXBsZW4gPCBGRERJX0hEUkxFTikgewogCQlORF9QUklOVCgobmRvLCAiW3xmZGRpXSIpKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gKGNhcGxlbik7CiAJfQogCiAJLyoKQEAgLTI5OCw2ICsyOTQsMTEgQEAKIAlpZiAobmRvLT5uZG9fZWZsYWcpCiAJCWZkZGlfaGRyX3ByaW50KG5kbywgZmRkaXAsIGxlbmd0aCwgRVNSQygmZWhkciksIEVEU1QoJmVoZHIpKTsKIAorCXNyYy5hZGRyID0gRVNSQygmZWhkcik7CisJc3JjLmFkZHJfc3RyaW5nID0gZXRoZXJhZGRyX3N0cmluZzsKKwlkc3QuYWRkciA9IEVEU1QoJmVoZHIpOworCWRzdC5hZGRyX3N0cmluZyA9IGV0aGVyYWRkcl9zdHJpbmc7CisKIAkvKiBTa2lwIG92ZXIgRkRESSBNQUMgaGVhZGVyICovCiAJbGVuZ3RoIC09IEZERElfSERSTEVOOwogCXAgKz0gRkRESV9IRFJMRU47CkBAIC0zMDYsMzIgKzMwNywyOSBAQAogCS8qIEZyYW1lIENvbnRyb2wgZmllbGQgZGV0ZXJtaW5lcyBpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgKi8KIAlpZiAoKGZkZGlwLT5mZGRpX2ZjICYgRkRESUZDX0NMRkYpID09IEZERElGQ19MTENfQVNZTkMpIHsKIAkJLyogVHJ5IHRvIHByaW50IHRoZSBMTEMtbGF5ZXIgaGVhZGVyICYgaGlnaGVyIGxheWVycyAqLwotCQlpZiAobGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIEVTUkMoJmVoZHIpLCBFRFNUKCZlaGRyKSwKLQkJICAgICZleHRyYWN0ZWRfZXRoZXJ0eXBlKSA9PSAwKSB7CisJCWxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgJnNyYywgJmRzdCk7CisJCWlmIChsbGNfaGRybGVuIDwgMCkgewogCQkJLyoKIAkJCSAqIFNvbWUga2luZHMgb2YgTExDIHBhY2tldCB3ZSBjYW5ub3QKIAkJCSAqIGhhbmRsZSBpbnRlbGxpZ2VudGx5CiAJCQkgKi8KLQkJCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQkJZmRkaV9oZHJfcHJpbnQobmRvLCBmZGRpcCwgbGVuZ3RoICsgRkRESV9IRFJMRU4sCi0JCQkJICAgIEVTUkMoJmVoZHIpLCBFRFNUKCZlaGRyKSk7Ci0JCQlpZiAoZXh0cmFjdGVkX2V0aGVydHlwZSkgewotCQkJCU5EX1BSSU5UKChuZG8sICIoTExDICVzKSAiLAotCQkJZXRoZXJwcm90b19zdHJpbmcoaHRvbnMoZXh0cmFjdGVkX2V0aGVydHlwZSkpKSk7Ci0JCQl9CiAJCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCiAJCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCQlsbGNfaGRybGVuID0gLWxsY19oZHJsZW47CiAJCX0KLQl9IGVsc2UgaWYgKChmZGRpcC0+ZmRkaV9mYyAmIEZERElGQ19DTEZGKSA9PSBGRERJRkNfU01UKQorCX0gZWxzZSBpZiAoKGZkZGlwLT5mZGRpX2ZjICYgRkRESUZDX0NMRkYpID09IEZERElGQ19TTVQpIHsKIAkJZmRkaV9zbXRfcHJpbnQobmRvLCBwLCBjYXBsZW4pOwotCWVsc2UgeworCQlsbGNfaGRybGVuID0gMDsKKwl9IGVsc2UgewogCQkvKiBTb21lIGtpbmRzIG9mIEZEREkgcGFja2V0IHdlIGNhbm5vdCBoYW5kbGUgaW50ZWxsaWdlbnRseSAqLwogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQogCQkJZmRkaV9oZHJfcHJpbnQobmRvLCBmZGRpcCwgbGVuZ3RoICsgRkRESV9IRFJMRU4sIEVTUkMoJmVoZHIpLAogCQkJICAgIEVEU1QoJmVoZHIpKTsKIAkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CisJCWxsY19oZHJsZW4gPSAwOwogCX0KKwlyZXR1cm4gKEZERElfSERSTEVOICsgbGxjX2hkcmxlbik7CiB9CiAKIC8qCkBAIC0zNDMsNyArMzQxLDUgQEAKIHVfaW50CiBmZGRpX2lmX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmgsIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcCkKIHsKLQlmZGRpX3ByaW50KG5kbywgcCwgaC0+bGVuLCBoLT5jYXBsZW4pOwotCi0JcmV0dXJuIChGRERJX0hEUkxFTik7CisJcmV0dXJuIChmZGRpX3ByaW50KG5kbywgcCwgaC0+bGVuLCBoLT5jYXBsZW4pKTsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LWZvcmNlcy5jIGIvcHJpbnQtZm9yY2VzLmMKaW5kZXggNmMwMmIyNS4uZGU2YzgyNiAxMDA2NDQKLS0tIGEvcHJpbnQtZm9yY2VzLmMKKysrIGIvcHJpbnQtZm9yY2VzLmMKQEAgLTE0LDIxICsxNCwyMSBAQAogICoKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBGb3J3YXJkaW5nIGFuZCBDb250cm9sIEVsZW1lbnQgU2VwYXJhdGlvbiAoRm9yQ0VTKSBQcm90b2NvbCBwcmludGVyICovCisKKy8qIHNwZWNpZmljYXRpb246IFJGQyA1ODEwICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfGZvcmNlc10iOwogCi0vKgotICogUkZDNTgxMDogRm9yd2FyZGluZyBhbmQgQ29udHJvbCBFbGVtZW50IFNlcGFyYXRpb24gKEZvckNFUykgUHJvdG9jb2wKLSAqLwogI2RlZmluZQlGb3JDRVNfVkVSUwkxCiAjZGVmaW5lCUZvckNFU19IRFJMCTI0CiAjZGVmaW5lCUZvckNFU19BTE5MCTRVCkBAIC0xNTMsMTcgKzE1MywxNyBAQAogICogU3RydWN0dXJlIG9mIGZvcmNlcyBoZWFkZXIsIG5ha2VkIG9mIFRMVnMuCiAgKi8KIHN0cnVjdCBmb3JjZXNoIHsKLQl1aW50OF90IGZtX3Zyc3ZkOwkvKiB2ZXJzaW9uIGFuZCByZXNlcnZlZCAqLworCW5kX3VpbnQ4X3QgZm1fdnJzdmQ7CS8qIHZlcnNpb24gYW5kIHJlc2VydmVkICovCiAjZGVmaW5lIEZvckNFU19WKGZvcmNlc2gpCSgoZm9yY2VzaCktPmZtX3Zyc3ZkID4+IDQpCi0JdWludDhfdCBmbV90b207CS8qIHR5cGUgb2YgbWVzc2FnZSAqLwotCXVpbnQxNl90IGZtX2xlbjsJLyogdG90YWwgbGVuZ3RoICogNCBieXRlcyAqLworCW5kX3VpbnQ4X3QgZm1fdG9tOwkvKiB0eXBlIG9mIG1lc3NhZ2UgKi8KKwluZF91aW50MTZfdCBmbV9sZW47CS8qIHRvdGFsIGxlbmd0aCAqIDQgYnl0ZXMgKi8KICNkZWZpbmUgRm9yQ0VTX0JMTihmb3JjZXNoKQkoKHVpbnQzMl90KShFWFRSQUNUXzE2QklUUygmKGZvcmNlc2gpLT5mbV9sZW4pIDw8IDIpKQotCXVpbnQzMl90IGZtX3NpZDsJLyogU291cmNlIElEICovCisJbmRfdWludDMyX3QgZm1fc2lkOwkvKiBTb3VyY2UgSUQgKi8KICNkZWZpbmUgRm9yQ0VTX1NJRChmb3JjZXNoKQlFWFRSQUNUXzMyQklUUygmKGZvcmNlc2gpLT5mbV9zaWQpCi0JdWludDMyX3QgZm1fZGlkOwkvKiBEZXN0aW5hdGlvbiBJRCAqLworCW5kX3VpbnQzMl90IGZtX2RpZDsJLyogRGVzdGluYXRpb24gSUQgKi8KICNkZWZpbmUgRm9yQ0VTX0RJRChmb3JjZXNoKQlFWFRSQUNUXzMyQklUUygmKGZvcmNlc2gpLT5mbV9kaWQpCi0JdWludDhfdCBmbV9jb3JbOF07CS8qIGNvcnJlbGF0b3IgKi8KLQl1aW50MzJfdCBmbV9mbGFnczsJLyogZmxhZ3MgKi8KKwluZF91aW50OF90IGZtX2Nvcls4XTsJLyogY29ycmVsYXRvciAqLworCW5kX3VpbnQzMl90IGZtX2ZsYWdzOwkvKiBmbGFncyAqLwogI2RlZmluZSBGb3JDRVNfQUNLKGZvcmNlc2gpCSgoRVhUUkFDVF8zMkJJVFMoJihmb3JjZXNoKS0+Zm1fZmxhZ3MpJjB4QzAwMDAwMDApID4+IDMwKQogI2RlZmluZSBGb3JDRVNfUFJJKGZvcmNlc2gpCSgoRVhUUkFDVF8zMkJJVFMoJihmb3JjZXNoKS0+Zm1fZmxhZ3MpJjB4MzgwMDAwMDApID4+IDI3KQogI2RlZmluZSBGb3JDRVNfUlMxKGZvcmNlc2gpCSgoRVhUUkFDVF8zMkJJVFMoJihmb3JjZXNoKS0+Zm1fZmxhZ3MpJjB4MDcwMDAwMDApID4+IDI0KQpAQCAtMjIzLDcgKzIyMyw3IEBACiAJQl9PUF9SRVBPUlQgPSAxIDw8IChGX09QX1JFUE9SVCAtIDEpLAogCUJfT1BfQ09NTUlUID0gMSA8PCAoRl9PUF9DT01NSVQgLSAxKSwKIAlCX09QX1JDT01NSVQgPSAxIDw8IChGX09QX1JDT01NSVQgLSAxKSwKLQlCX09QX1JUUkNPTVAgPSAxIDw8IChGX09QX1JUUkNPTVAgLSAxKSwKKwlCX09QX1JUUkNPTVAgPSAxIDw8IChGX09QX1JUUkNPTVAgLSAxKQogfTsKIAogc3RydWN0IG9wdGx2X2ggewpAQCAtMjQzLDggKzI0Myw4IEBACiAKICNkZWZpbmUgT1BfTUlOX1NJWiA4CiBzdHJ1Y3QgcGF0aGRhdGFfaCB7Ci0JdWludDE2X3QgcGZsYWdzOwotCXVpbnQxNl90IHBJRGNudDsKKwluZF91aW50MTZfdCBwZmxhZ3M7CisJbmRfdWludDE2X3QgcElEY250OwogfTsKIAogI2RlZmluZQlCX0ZVTExECQkweDEKQEAgLTI4OCw3ICsyODgsNyBAQAogI2RlZmluZSBJTkRfQ0hSICcgJwogI2RlZmluZSBJTkRfUFJFRiAnXG4nCiAjZGVmaW5lIElORF9TVUYgMHgwCi1jaGFyIGluZF9idWZbSU5EX1NJWkVdOworc3RhdGljIGNoYXIgaW5kX2J1ZltJTkRfU0laRV07CiAKIHN0YXRpYyBpbmxpbmUgY2hhciAqaW5kZW50X3ByKGludCBpbmRlbnQsIGludCBubHByZWYpCiB7CkBAIC0zNzYsMzAgKzM3NiwzMCBAQAogfQogCiBzdHJ1Y3QgZm9yY2VzX2lsdiB7Ci0JdWludDMyX3QgdHlwZTsKLQl1aW50MzJfdCBsZW5ndGg7CisJbmRfdWludDMyX3QgdHlwZTsKKwluZF91aW50MzJfdCBsZW5ndGg7CiB9OwogCiBzdHJ1Y3QgZm9yY2VzX3RsdiB7Ci0JdWludDE2X3QgdHlwZTsKLQl1aW50MTZfdCBsZW5ndGg7CisJbmRfdWludDE2X3QgdHlwZTsKKwluZF91aW50MTZfdCBsZW5ndGg7CiB9OwogCiAjZGVmaW5lIEZfQUxOX0xFTihsZW4pICggKChsZW4pK0ZvckNFU19BTE5MLTEpICYgfihGb3JDRVNfQUxOTC0xKSApCi0jZGVmaW5lCUdFVF9UT1BfVExWKGZoZHIpICgoc3RydWN0IGZvcmNlc190bHYgKikoKGZoZHIpICsgc2l6ZW9mIChzdHJ1Y3QgZm9yY2VzaCkpKQorI2RlZmluZQlHRVRfVE9QX1RMVihmaGRyKSAoKGNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICopKChmaGRyKSArIHNpemVvZiAoc3RydWN0IGZvcmNlc2gpKSkKICNkZWZpbmUgVExWX1NFVF9MRU4obGVuKSAgKEZfQUxOX0xFTihUTFZfSERSTCkgKyAobGVuKSkKICNkZWZpbmUgVExWX0FMTl9MRU4obGVuKSAgRl9BTE5fTEVOKFRMVl9TRVRfTEVOKGxlbikpCiAjZGVmaW5lIFRMVl9SREFUX0xFTih0bHYpICgoaW50KShFWFRSQUNUXzE2QklUUygmKHRsdiktPmxlbmd0aCkgLSBUTFZfU0VUX0xFTigwKSkKLSNkZWZpbmUgVExWX0RBVEEodGx2cCkgICAoKHZvaWQqKSgoKGNoYXIqKSh0bHZwKSkgKyBUTFZfU0VUX0xFTigwKSkpCisjZGVmaW5lIFRMVl9EQVRBKHRsdnApICAgKChjb25zdCB2b2lkKikoKChjb25zdCBjaGFyKikodGx2cCkpICsgVExWX1NFVF9MRU4oMCkpKQogI2RlZmluZSBHT19OWFRfVExWKHRsdixybGVuKSAoKHJsZW4pIC09IEZfQUxOX0xFTihFWFRSQUNUXzE2QklUUygmKHRsdiktPmxlbmd0aCkpLCBcCi0JCSAgICAgICAgICAgICAgKHN0cnVjdCBmb3JjZXNfdGx2KikoKChjaGFyKikodGx2KSkgXAorCQkgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiopKCgoY29uc3QgY2hhciopKHRsdikpIFwKIAkJCQkgICAgICArIEZfQUxOX0xFTihFWFRSQUNUXzE2QklUUygmKHRsdiktPmxlbmd0aCkpKSkKICNkZWZpbmUgSUxWX1NFVF9MRU4obGVuKSAgKEZfQUxOX0xFTihJTFZfSERSTCkgKyAobGVuKSkKICNkZWZpbmUgSUxWX0FMTl9MRU4obGVuKSAgRl9BTE5fTEVOKElMVl9TRVRfTEVOKGxlbikpCiAjZGVmaW5lIElMVl9SREFUX0xFTihpbHYpICgoaW50KShFWFRSQUNUXzMyQklUUygmKGlsdiktPmxlbmd0aCkpIC0gSUxWX1NFVF9MRU4oMCkpCi0jZGVmaW5lIElMVl9EQVRBKGlsdnApICAgKCh2b2lkKikoKChjaGFyKikoaWx2cCkpICsgSUxWX1NFVF9MRU4oMCkpKQorI2RlZmluZSBJTFZfREFUQShpbHZwKSAgICgoY29uc3Qgdm9pZCopKCgoY29uc3QgY2hhciopKGlsdnApKSArIElMVl9TRVRfTEVOKDApKSkKICNkZWZpbmUgR09fTlhUX0lMVihpbHYscmxlbikgKChybGVuKSAtPSBGX0FMTl9MRU4oRVhUUkFDVF8zMkJJVFMoJihpbHYpLT5sZW5ndGgpKSwgXAotCQkgICAgICAgICAgICAgIChzdHJ1Y3QgZm9yY2VzX2lsdiAqKSgoKGNoYXIqKShpbHYpKSBcCisJCSAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBmb3JjZXNfaWx2ICopKCgoY29uc3QgY2hhciopKGlsdikpIFwKIAkJCQkgICAgICArIEZfQUxOX0xFTihFWFRSQUNUXzMyQklUUygmKGlsdiktPmxlbmd0aCkpKSkKICNkZWZpbmUgSU5WQUxJRF9STEVOIDEKICNkZWZpbmUgSU5WQUxJRF9TVExOIDIKQEAgLTQ1Miw4ICs0NTIsOCBAQAogCQkJdWludDE2X3Qgb3BfbXNrLCBpbnQgaW5kZW50KTsKIAogc3RydWN0IGZvcmNlc19sZmJzaCB7Ci0JdWludDMyX3QgY2xhc3M7Ci0JdWludDMyX3QgaW5zdGFuY2U7CisJbmRfdWludDMyX3QgY2xhc3M7CisJbmRfdWludDMyX3QgaW5zdGFuY2U7CiB9OwogCiAjZGVmaW5lIEFTU05TX09QUyAoQl9PUF9SRVBPUlQpCkBAIC01NDYsOSArNTQ2LDkgQEAKICNkZWZpbmUgRl9UQUJBUFBFTkQgNAogCiBzdHJ1Y3QgcmVzX3ZhbCB7Ci0JdWludDhfdCByZXN1bHQ7Ci0JdWludDhfdCByZXN2MTsKLQl1aW50MTZfdCByZXN2MjsKKwluZF91aW50OF90IHJlc3VsdDsKKwluZF91aW50OF90IHJlc3YxOworCW5kX3VpbnQxNl90IHJlc3YyOwogfTsKIAogc3RhdGljIGludCBwcmVzdGx2X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiBwcHRyLCByZWdpc3RlciB1X2ludCBsZW4sCkBAIC02NDYsOSArNjQ2LDkgQEAKICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICogcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuLAogICAgICAgICAgICAgICB1aW50MTZfdCBvcF9tc2sgX1VfLCBpbnQgaW5kZW50KQogewotCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoc3RydWN0IGZvcmNlc190bHYgKilwcHRyOwotCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdGRwID0gKHVfY2hhciAqKSBUTFZfREFUQSh0bHYpOwotCXN0cnVjdCByZXNfdmFsICpyID0gKHN0cnVjdCByZXNfdmFsICopdGRwOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKilwcHRyOworCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdGRwID0gKGNvbnN0IHVfY2hhciAqKSBUTFZfREFUQSh0bHYpOworCWNvbnN0IHN0cnVjdCByZXNfdmFsICpyID0gKGNvbnN0IHN0cnVjdCByZXNfdmFsICopdGRwOwogCXVfaW50IGRsZW47CiAKIAkvKgpAQCAtNjg0LDkgKzY4NCw5IEBACiAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKiBwcHRyLCByZWdpc3RlciB1X2ludCBsZW4sCiAgICAgICAgICAgICAgICB1aW50MTZfdCBvcF9tc2sgX1VfLCBpbnQgaW5kZW50KQogewotCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoc3RydWN0IGZvcmNlc190bHYgKilwcHRyOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKilwcHRyOwogCXVfaW50IHJsZW47Ci0JcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0ZHAgPSAodV9jaGFyICopIFRMVl9EQVRBKHRsdik7CisJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0ZHAgPSAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKHRsdik7CiAJdWludDE2X3QgdHlwZTsKIAogCS8qCkBAIC03MjAsNyArNzIwLDcgQEAKICAgICAgICAgICAgICAgIHVpbnQxNl90IG9wX21zayBfVV8sIGludCBpbmRlbnQpCiB7CiAJdV9pbnQgcmxlbjsKLQljb25zdCBzdHJ1Y3QgZm9yY2VzX2lsdiAqaWx2ID0gKHN0cnVjdCBmb3JjZXNfaWx2ICopcHB0cjsKKwljb25zdCBzdHJ1Y3QgZm9yY2VzX2lsdiAqaWx2ID0gKGNvbnN0IHN0cnVjdCBmb3JjZXNfaWx2ICopcHB0cjsKIAlpbnQgaW52aWx2OwogCiAJaWYgKGxlbiA8IElMVl9IRFJMKSB7CkBAIC03MzQsNyArNzM0LDcgQEAKIAkJTkRfUFJJTlQoKG5kbywgIkphbWFsIC0gb3V0c3RhbmRpbmcgbGVuZ3RoIDwlZD5cbiIsIHJsZW4pKTsKICNlbmRpZgogCQljaGFyICppYiA9IGluZGVudF9wcihpbmRlbnQsIDEpOwotCQlyZWdpc3RlciBjb25zdCB1X2NoYXIgKnRkcCA9ICh1X2NoYXIgKikgSUxWX0RBVEEoaWx2KTsKKwkJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0ZHAgPSAoY29uc3QgdV9jaGFyICopIElMVl9EQVRBKGlsdik7CiAJCU5EX1RDSEVDSygqaWx2KTsKIAkJaW52aWx2ID0gaWx2X3ZhbGlkKGlsdiwgcmxlbik7CiAJCWlmIChpbnZpbHYpIHsKQEAgLTc2NSw5ICs3NjUsOSBAQAogICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICogcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuLAogICAgICAgICAgICAgICAgdWludDE2X3Qgb3BfbXNrLCBpbnQgaW5kZW50KQogewotCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoc3RydWN0IGZvcmNlc190bHYgKilwcHRyOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKilwcHRyOwogCXVfaW50IHJsZW47Ci0JcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0ZHAgPSAodV9jaGFyICopIFRMVl9EQVRBKHRsdik7CisJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICp0ZHAgPSAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKHRsdik7CiAJdWludDE2X3QgdHlwZTsKIAogCS8qCkBAIC03OTQsMTAgKzc5NCwxMCBAQAogICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICogcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuLAogICAgICAgICAgICAgICAgdWludDE2X3Qgb3BfbXNrLCBpbnQgaW5kZW50KQogewotCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoc3RydWN0IGZvcmNlc190bHYgKilwcHRyOwotCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdGRwID0gKHVfY2hhciAqKSBUTFZfREFUQSh0bHYpOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICp0bHYgPSAoY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKilwcHRyOworCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdGRwID0gKGNvbnN0IHVfY2hhciAqKSBUTFZfREFUQSh0bHYpOwogCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZHAgPSB0ZHAgKyA0OwotCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICprZHRsdiA9IChzdHJ1Y3QgZm9yY2VzX3RsdiAqKWRwOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICprZHRsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqKWRwOwogCXVpbnQzMl90IGlkOwogCWNoYXIgKmliID0gaW5kZW50X3ByKGluZGVudCwgMCk7CiAJdWludDE2X3QgdHlwZSwgdGxsOwpAQCAtODIyLDcgKzgyMiw3IEBACiAJICogZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBjb250YWluaW5nIFRMVikuCiAJICovCiAJdGxsID0gRVhUUkFDVF8xNkJJVFMoJmtkdGx2LT5sZW5ndGgpOwotCWRwID0gKHVfY2hhciAqKSBUTFZfREFUQShrZHRsdik7CisJZHAgPSAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKGtkdGx2KTsKIAlyZXR1cm4gZmRhdGF0bHZfcHJpbnQobmRvLCBkcCwgdGxsLCBvcF9tc2ssIGluZGVudCk7CiAKIHRydW5jOgpAQCAtODgxLDcgKzg4MSw3IEBACiAJCX0KIAogCQlpZiAob3BfbXNrICYgQl9LRVlJTikgewotCQkJc3RydWN0IGZvcmNlc190bHYgKmtleXRsdjsKKwkJCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICprZXl0bHY7CiAJCQl1aW50MTZfdCB0bGw7CiAKIAkJCWlmIChsZW4gPCBQVEhfREVTQ19TSVpFKSB7CkBAIC04OTMsNyArODkzLDcgQEAKIAkJCS8qIHNraXAga2V5aWQgKi8KIAkJCXBwdHIgKz0gNDsKIAkJCWxlbiAtPSA0OwotCQkJa2V5dGx2ID0gKHN0cnVjdCBmb3JjZXNfdGx2ICopcHB0cjsKKwkJCWtleXRsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqKXBwdHI7CiAJCQkvKiBza2lwIGhlYWRlciAqLwogCQkJcHB0ciArPSBzaXplb2Yoc3RydWN0IGZvcmNlc190bHYpOwogCQkJbGVuIC09IHNpemVvZihzdHJ1Y3QgZm9yY2VzX3Rsdik7CkBAIC05MTYsNyArOTE2LDcgQEAKIAl9CiAKIAlpZiAobGVuKSB7Ci0JCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICpwZHRsdiA9IChzdHJ1Y3QgZm9yY2VzX3RsdiAqKXBwdHI7CisJCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICpwZHRsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqKXBwdHI7CiAJCXVpbnQxNl90IHR5cGU7CiAJCXVpbnQxNl90IHRsbDsKIAkJaW50IHBhZCA9IDA7CkBAIC05OTIsNyArOTkyLDcgQEAKICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqIHBwdHIsIHJlZ2lzdGVyIHVfaW50IGxlbiwKICAgICAgICAgICAgIHVpbnQxNl90IG9wX21zaywgaW50IGluZGVudCkKIHsKLQljb25zdCBzdHJ1Y3QgcGF0aGRhdGFfaCAqcGRoID0gKHN0cnVjdCBwYXRoZGF0YV9oICopcHB0cjsKKwljb25zdCBzdHJ1Y3QgcGF0aGRhdGFfaCAqcGRoID0gKGNvbnN0IHN0cnVjdCBwYXRoZGF0YV9oICopcHB0cjsKIAljaGFyICppYiA9IGluZGVudF9wcihpbmRlbnQsIDApOwogCXVfaW50IG1pbnNpemUgPSAwOwogCWludCBtb3JlX3BkID0gMDsKQEAgLTEwNTYsNyArMTA1Niw3IEBACiAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKiBwcHRyLCByZWdpc3RlciB1X2ludCBsZW4sCiAgICAgICAgICAgICAgICB1aW50MTZfdCBvcF9tc2ssIGludCBpbmRlbnQpCiB7Ci0JY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKnBkdGx2ID0gKHN0cnVjdCBmb3JjZXNfdGx2ICopcHB0cjsKKwljb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqcGR0bHYgPSAoY29uc3Qgc3RydWN0IGZvcmNlc190bHYgKilwcHRyOwogCXVpbnQxNl90IHR5cGU7CiAJaW50IHRsbDsKIAl1X2ludCBpbnZ0bHY7CkBAIC0xMDc0LDcgKzEwNzQsNyBAQAogCQkgKiBsZW5ndGggaXMgbGFyZ2UgZW5vdWdoIGJ1dCBub3QgdG9vIGxhcmdlIChpdCBkb2Vzbid0CiAJCSAqIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgY29udGFpbmluZyBUTFYpLgogCQkgKi8KLQkJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpkcCA9ICh1X2NoYXIgKikgVExWX0RBVEEocGR0bHYpOworCQlyZWdpc3RlciBjb25zdCB1X2NoYXIgKmRwID0gKGNvbnN0IHVfY2hhciAqKSBUTFZfREFUQShwZHRsdik7CiAJCWlmICghdHRsdl92YWxpZCh0eXBlKSkgewogCQkJTkRfUFJJTlQoKG5kbywgIiVzIFRMViB0eXBlIDB4JXggbGVuICVkXG4iLAogCQkJICAgICAgIHRvazJzdHIoRm9yQ0VTX1RMVl9lcnIsIE5VTEwsIGludnRsdiksIHR5cGUsCkBAIC0xMTAyLDcgKzExMDIsNyBAQAogICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKiBwcHRyLCByZWdpc3RlciB1X2ludCBsZW4sCiAgICAgICAgICAgICAgICAgIHVpbnQxNl90IG9wX21zaywgaW50IGluZGVudCkKIHsKLQljb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqcGR0bHYgPSAoc3RydWN0IGZvcmNlc190bHYgKilwcHRyOworCWNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICpwZHRsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqKXBwdHI7CiAJaW50IHRsbDsKIAl1X2ludCBpbnZ0bHY7CiAJdWludDE2X3QgdHlwZTsKQEAgLTExMjMsNyArMTEyMyw3IEBACiAJCSAqLwogCQlpYiA9IGluZGVudF9wcihpbmRlbnQsIDApOwogCQl0eXBlID0gRVhUUkFDVF8xNkJJVFMoJnBkdGx2LT50eXBlKTsKLQkJZHAgPSAodV9jaGFyICopIFRMVl9EQVRBKHBkdGx2KTsKKwkJZHAgPSAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKHBkdGx2KTsKIAkJdGxsID0gRVhUUkFDVF8xNkJJVFMoJnBkdGx2LT5sZW5ndGgpIC0gVExWX0hEUkw7CiAKIAkJaWYgKG5kby0+bmRvX3ZmbGFnID49IDMpCkBAIC0xMTcxLDcgKzExNzEsNyBAQAogICAgICAgICAgICBjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqb3RsdiwgdWludDE2X3Qgb3BfbXNrIF9VXywgaW50IGluZGVudCkKIHsKIAlpbnQgcmMgPSAwOwotCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZHAgPSAodV9jaGFyICopIFRMVl9EQVRBKG90bHYpOworCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZHAgPSAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKG90bHYpOwogCXVpbnQxNl90IHR5cGU7CiAJaW50IHRsbDsKIAljaGFyICppYiA9IGluZGVudF9wcihpbmRlbnQsIDApOwpAQCAtMTM0OSw3ICsxMzQ5LDcgQEAKIAl1X2ludCBybGVuOwogCWNoYXIgKmliID0gaW5kZW50X3ByKGluZGVudCwgMCk7CiAJLyogWFhYOiBjaGVjayBoZWFkZXIgbGVuZ3RoICovCi0JY29uc3Qgc3RydWN0IGZvcmNlc19pbHYgKmlsdiA9IChzdHJ1Y3QgZm9yY2VzX2lsdiAqKXBwdHI7CisJY29uc3Qgc3RydWN0IGZvcmNlc19pbHYgKmlsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX2lsdiAqKXBwdHI7CiAKIAkvKgogCSAqIHByaW50X21ldGF0bHYoKSBoYXMgZW5zdXJlZCB0aGF0IGxlbiAod2hhdCByZW1haW5zIGluIHRoZQpAQCAtMTM3OCw3ICsxMzc4LDcgQEAKIAl1X2ludCBkbGVuOwogCWNoYXIgKmliID0gaW5kZW50X3ByKGluZGVudCwgMCk7CiAJdV9pbnQgcmxlbjsKLQljb25zdCBzdHJ1Y3QgZm9yY2VzX2lsdiAqaWx2ID0gKHN0cnVjdCBmb3JjZXNfaWx2ICopcHB0cjsKKwljb25zdCBzdHJ1Y3QgZm9yY2VzX2lsdiAqaWx2ID0gKGNvbnN0IHN0cnVjdCBmb3JjZXNfaWx2ICopcHB0cjsKIAlpbnQgaW52aWx2OwogCiAJLyoKQEAgLTE0MDAsNyArMTQwMCw3IEBACiAJCSAqIGxlbmd0aCBpcyBsYXJnZSBlbm91Z2ggYnV0IG5vdCB0b28gbGFyZ2UgKGl0IGRvZXNuJ3QKIAkJICogZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBjb250YWluaW5nIFRMVikuCiAJCSAqLwotCQlwcmludF9tZXRhaWx2KG5kbywgKHVfY2hhciAqKSBpbHYsIDAsIGluZGVudCArIDEpOworCQlwcmludF9tZXRhaWx2KG5kbywgKGNvbnN0IHVfY2hhciAqKSBpbHYsIDAsIGluZGVudCArIDEpOwogCQlpbHYgPSBHT19OWFRfSUxWKGlsdiwgcmxlbik7CiAJfQogCkBAIC0xNDE1LDcgKzE0MTUsNyBAQAogc3RhdGljIGludAogcHJpbnRfcmVkZGF0YShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICogcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuLAotICAgICAgICAgICAgICB1aW50MTZfdCBvcF9tc2sgX1VfLCBpbnQgaW5kZW50IF9VXykKKyAgICAgICAgICAgICAgdWludDE2X3Qgb3BfbXNrIF9VXywgaW50IGluZGVudCkKIHsKIAl1X2ludCBkbGVuOwogCWNoYXIgKmliID0gaW5kZW50X3ByKGluZGVudCwgMCk7CkBAIC0xNDM5LDcgKzE0MzksNyBAQAogICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICogcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuLAogICAgICAgICAgICAgICAgdWludDE2X3Qgb3BfbXNrIF9VXywgaW50IGluZGVudCkKIHsKLQljb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqdGx2ID0gKHN0cnVjdCBmb3JjZXNfdGx2ICopcHB0cjsKKwljb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqdGx2ID0gKGNvbnN0IHN0cnVjdCBmb3JjZXNfdGx2ICopcHB0cjsKIAl1X2ludCBkbGVuOwogCXVfaW50IHJsZW47CiAJdV9pbnQgaW52dGx2OwpAQCAtMTQ3MSwxMCArMTQ3MSwxMCBAQAogCQkgKiBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNvbnRhaW5pbmcgVExWKS4KIAkJICovCiAJCWlmIChFWFRSQUNUXzE2QklUUygmdGx2LT50eXBlKSA9PSBGX1RMVl9NRVREKSB7Ci0JCQlwcmludF9tZXRhdGx2KG5kbywgKHVfY2hhciAqKSBUTFZfREFUQSh0bHYpLAorCQkJcHJpbnRfbWV0YXRsdihuZG8sIChjb25zdCB1X2NoYXIgKikgVExWX0RBVEEodGx2KSwKIAkJCQkgICAgICBFWFRSQUNUXzE2QklUUygmdGx2LT5sZW5ndGgpLCAwLCBpbmRlbnQpOwogCQl9IGVsc2UgaWYgKChFWFRSQUNUXzE2QklUUygmdGx2LT50eXBlKSA9PSBGX1RMVl9SRUREKSkgewotCQkJcHJpbnRfcmVkZGF0YShuZG8sICh1X2NoYXIgKikgVExWX0RBVEEodGx2KSwKKwkJCXByaW50X3JlZGRhdGEobmRvLCAoY29uc3QgdV9jaGFyICopIFRMVl9EQVRBKHRsdiksCiAJCQkJICAgICAgRVhUUkFDVF8xNkJJVFMoJnRsdi0+bGVuZ3RoKSwgMCwgaW5kZW50KTsKIAkJfSBlbHNlIHsKIAkJCU5EX1BSSU5UKChuZG8sICJVbmtub3duIFJFRElSRUNUIFRMViAweCV4IGxlbiAlZFxuIiwKQEAgLTE1NDEsNyArMTU0MSw3IEBACiAJCSAgICAgICBFWFRSQUNUXzMyQklUUygmbGZicy0+aW5zdGFuY2UpKSk7CiAJfQogCi0Jb3RsdiA9IChzdHJ1Y3QgZm9yY2VzX3RsdiAqKShsZmJzICsgMSk7CisJb3RsdiA9IChjb25zdCBzdHJ1Y3QgZm9yY2VzX3RsdiAqKShsZmJzICsgMSk7CiAKIAlpbmRlbnQgKz0gMTsKIAl3aGlsZSAocmxlbiAhPSAwKSB7CkBAIC0xNTYzLDcgKzE1NjMsNyBAQAogCQkJTkRfUFJJTlQoKG5kbywKIAkJCSAgICAgICAgICAiXHRcdElOVmFsaWQgb3Blci1UTFYgdHlwZSAweCV4IGxlbmd0aCAlZCBmb3IgdGhpcyBGb3JDRVMgbWVzc2FnZVxuIiwKIAkJCSAgICAgICAgICBFWFRSQUNUXzE2QklUUygmb3Rsdi0+dHlwZSksIEVYVFJBQ1RfMTZCSVRTKCZvdGx2LT5sZW5ndGgpKSk7Ci0JCQlpbnZvcHRsdl9wcmludChuZG8sICh1X2NoYXIgKilvdGx2LCBybGVuLCAwLCBpbmRlbnQpOworCQkJaW52b3B0bHZfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopb3RsdiwgcmxlbiwgMCwgaW5kZW50KTsKIAkJfQogCQlvdGx2ID0gR09fTlhUX1RMVihvdGx2LCBybGVuKTsKIAl9CkBAIC0xNjQ1LDcgKzE2NDUsNyBAQAogCQkJICAgICAgIEVYVFJBQ1RfMTZCSVRTKCZ0bHRsdi0+bGVuZ3RoKSwKIAkJCSAgICAgICBFWFRSQUNUXzE2QklUUygmdGx0bHYtPmxlbmd0aCkgLSBUTFZfSERSTCkpOwogCi0JCXJjID0gdG9wcy0+cHJpbnQobmRvLCAodV9jaGFyICopIFRMVl9EQVRBKHRsdGx2KSwKKwkJcmMgPSB0b3BzLT5wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikgVExWX0RBVEEodGx0bHYpLAogCQkJCSBFWFRSQUNUXzE2QklUUygmdGx0bHYtPmxlbmd0aCksIHRvcHMtPm9wX21zaywgOSk7CiAJCWlmIChyYyA8IDApIHsKIAkJCXJldHVybiAtMTsKZGlmZiAtLWdpdCBhL3ByaW50LWZyLmMgYi9wcmludC1mci5jCmluZGV4IDA4MzI1MjIuLmRhN2VlMjUgMTAwNjQ0Ci0tLSBhL3ByaW50LWZyLmMKKysrIGIvcHJpbnQtZnIuYwpAQCAtMTksMTcgKzE5LDE4IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEZyYW1lIFJlbGF5IHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCiAjaW5jbHVkZSAibGxjLmgiCkBAIC0yNzUsNyArMjc2LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBleHRyYWN0ZWRfZXRoZXJ0eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwK2FkZHJfbGVuK0VUSEVSVFlQRV9MRU4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aC1hZGRyX2xlbi1FVEhFUlRZUEVfTEVOLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgtYWRkcl9sZW4tRVRIRVJUWVBFX0xFTikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmRvLT5uZG9fc25hcGVuZC1wLWFkZHJfbGVuLUVUSEVSVFlQRV9MRU4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIGV0aGVyX3R5cGUgbm90IGtub3duLCBwcm9iYWJseSBpdCB3YXNuJ3Qgb25lICovCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJVSSAlMDJ4ISAiLCBwW2FkZHJfbGVuXSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQpAQCAtMzI3LDExICszMjksMTEgQEAKIAljYXNlIE5MUElEX0NMTlA6CiAJY2FzZSBOTFBJRF9FU0lTOgogCWNhc2UgTkxQSURfSVNJUzoKLQkJaXNvY2xuc19wcmludChuZG8sIHAgLSAxLCBsZW5ndGggKyAxLCBsZW5ndGggKyAxKTsgLyogT1NJIHByaW50ZXJzIG5lZWQgdGhlIE5MUElEIGZpZWxkICovCisJCWlzb2NsbnNfcHJpbnQobmRvLCBwIC0gMSwgbGVuZ3RoICsgMSwgbmRvLT5uZG9fc25hcGVuZCAtIHAgKyAxKTsgLyogT1NJIHByaW50ZXJzIG5lZWQgdGhlIE5MUElEIGZpZWxkICovCiAJCWJyZWFrOwogCiAJY2FzZSBOTFBJRF9TTkFQOgotCQlpZiAoc25hcF9wcmludChuZG8sIHAsIGxlbmd0aCwgbGVuZ3RoLCAwKSA9PSAwKSB7CisJCWlmIChzbmFwX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBuZG8tPm5kb19zbmFwZW5kIC0gcCwgTlVMTCwgTlVMTCwgMCkgPT0gMCkgewogCQkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghbmRvLT5uZG9fZWZsYWcpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJfaGRyX3ByaW50KG5kbywgbGVuZ3RoICsgaGRyX2xlbiwgaGRyX2xlbiwKQEAgLTU5Nyw2ICs1OTksMTAgQEAKIHsKICAgICB1aW50MTZfdCBzZXF1ZW5jZV9udW0sIGZsYWdzOwogCisgICAgaWYgKGxlbmd0aCA8IDIpCisgICAgICAgIGdvdG8gdHJ1bmM7CisgICAgTkRfVENIRUNLMigqcCwgMik7CisKICAgICBmbGFncyA9IHBbMF0mTUZSX0JFQ19NQVNLOwogICAgIHNlcXVlbmNlX251bSA9IChwWzBdJjB4MWUpPDw3IHwgcFsxXTsKIApAQCAtNjE0LDcgKzYyMCwxMCBAQAogICogbW9kZWwgaXMgZW5kLXRvLWVuZCBvciBpbnRlcmZhY2UgYmFzZWQgd2V0aGVyIHdlIHdhbnQgdG8gcHJpbnQKICAqIGFub3RoZXIgUS45MjIgaGVhZGVyCiAgKi8KKyAgICByZXR1cm47CiAKK3RydW5jOgorICAgIE5EX1BSSU5UKChuZG8sICJbfGZyZi4xNV0iKSk7CiB9CiAKIC8qCkBAIC02ODIsNyArNjkxLDExIEBACiAgICAgeyAwLCBOVUxMIH0KIH07CiAKLSNkZWZpbmUgTVNHX0FOU0lfTE9DS0lOR19TSElGVAkweDk1CisjZGVmaW5lIElFX0lTX1NJTkdMRV9PQ1RFVChpZWNvZGUpCSgoaWVjb2RlKSAmIDB4ODApCisjZGVmaW5lIElFX0lTX1NISUZUKGllY29kZSkJCSgoKGllY29kZSkgJiAweEYwKSA9PSAweDkwKQorI2RlZmluZSBJRV9TSElGVF9JU19OT05fTE9DS0lORyhpZWNvZGUpCSgoaWVjb2RlKSAmIDB4MDgpCisjZGVmaW5lIElFX1NISUZUX0lTX0xPQ0tJTkcoaWVjb2RlKQkoIShJRV9TSElGVF9JU19OT05fTE9DS0lORyhpZWNvZGUpKSkKKyNkZWZpbmUgSUVfU0hJRlRfQ09ERVNFVChpZWNvZGUpCSgoaWVjb2RlKSAmIDB4MDcpCiAKICNkZWZpbmUgRlJfTE1JX0FOU0lfUkVQT1JUX1RZUEVfSUUJMHgwMQogI2RlZmluZSBGUl9MTUlfQU5TSV9MSU5LX1ZFUklGWV9JRV85MQkweDE5IC8qIGRldGFpbHM/ICovCkBAIC02OTMsNyArNzA2LDcgQEAKICNkZWZpbmUgRlJfTE1JX0NDSVRUX0xJTktfVkVSSUZZX0lFCTB4NTMKICNkZWZpbmUgRlJfTE1JX0NDSVRUX1BWQ19TVEFUVVNfSUUJMHg1NwogCi1zdGF0aWMgY29uc3Qgc3RydWN0IHRvayBmcl9xOTMzX2llX3ZhbHVlc19jb2Rlc2V0NVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgZnJfcTkzM19pZV92YWx1ZXNfY29kZXNldF8wXzVbXSA9IHsKICAgICB7IEZSX0xNSV9BTlNJX1JFUE9SVF9UWVBFX0lFLCAiQU5TSSBSZXBvcnQgVHlwZSIgfSwKICAgICB7IEZSX0xNSV9BTlNJX0xJTktfVkVSSUZZX0lFXzkxLCAiQU5TSSBMaW5rIFZlcmlmeSIgfSwKICAgICB7IEZSX0xNSV9BTlNJX0xJTktfVkVSSUZZX0lFLCAiQU5TSSBMaW5rIFZlcmlmeSIgfSwKQEAgLTcxNSwxNCArNzI4LDE0IEBACiAgICAgeyAwLCBOVUxMIH0KIH07CiAKLS8qIGFycmF5IG9mIDE2IGNvZGVwYWdlcyAtIGN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgY29kZXBhZ2UgMSw1ICovCisvKiBhcnJheSBvZiAxNiBjb2Rlc2V0cyAtIGN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgY29kZXBhZ2UgMCBhbmQgNSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgKmZyX3E5MzNfaWVfY29kZXNldHNbXSA9IHsKLSAgICBOVUxMLAotICAgIGZyX3E5MzNfaWVfdmFsdWVzX2NvZGVzZXQ1LAorICAgIGZyX3E5MzNfaWVfdmFsdWVzX2NvZGVzZXRfMF81LAogICAgIE5VTEwsCiAgICAgTlVMTCwKICAgICBOVUxMLAotICAgIGZyX3E5MzNfaWVfdmFsdWVzX2NvZGVzZXQ1LAorICAgIE5VTEwsCisgICAgZnJfcTkzM19pZV92YWx1ZXNfY29kZXNldF8wXzUsCiAgICAgTlVMTCwKICAgICBOVUxMLAogICAgIE5VTEwsCkBAIC03MzUsMjAgKzc0OCwyMCBAQAogICAgIE5VTEwKIH07CiAKLXN0YXRpYyBpbnQgZnJfcTkzM19wcmludF9pZV9jb2Rlc2V0NShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICBjb25zdCBzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90ICAqaWVfcCwgY29uc3QgdV9jaGFyICpwKTsKK3N0YXRpYyBpbnQgZnJfcTkzM19wcmludF9pZV9jb2Rlc2V0XzBfNShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9pbnQgaWVjb2RlLAorICAgIHVfaW50IGllbGVuZ3RoLCBjb25zdCB1X2NoYXIgKnApOwogCi10eXBlZGVmIGludCAoKmNvZGVzZXRfcHJfZnVuY190KShuZXRkaXNzZWN0X29wdGlvbnMgKiwKLSAgICBjb25zdCBzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90ICAqaWVfcCwgY29uc3QgdV9jaGFyICpwKTsKK3R5cGVkZWYgaW50ICgqY29kZXNldF9wcl9mdW5jX3QpKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1X2ludCBpZWNvZGUsCisgICAgdV9pbnQgaWVsZW5ndGgsIGNvbnN0IHVfY2hhciAqcCk7CiAKLS8qIGFycmF5IG9mIDE2IGNvZGVwYWdlcyAtIGN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgY29kZXBhZ2UgMSw1ICovCisvKiBhcnJheSBvZiAxNiBjb2Rlc2V0cyAtIGN1cnJlbnRseSB3ZSBvbmx5IHN1cHBvcnQgY29kZXBhZ2UgMCBhbmQgNSAqLwogc3RhdGljIGNvbnN0IGNvZGVzZXRfcHJfZnVuY190IGZyX3E5MzNfcHJpbnRfaWVfY29kZXNldFtdID0gewotICAgIE5VTEwsCi0gICAgZnJfcTkzM19wcmludF9pZV9jb2Rlc2V0NSwKKyAgICBmcl9xOTMzX3ByaW50X2llX2NvZGVzZXRfMF81LAogICAgIE5VTEwsCiAgICAgTlVMTCwKICAgICBOVUxMLAotICAgIGZyX3E5MzNfcHJpbnRfaWVfY29kZXNldDUsCisgICAgTlVMTCwKKyAgICBmcl9xOTMzX3ByaW50X2llX2NvZGVzZXRfMF81LAogICAgIE5VTEwsCiAgICAgTlVMTCwKICAgICBOVUxMLApAQCAtNzYxLDEyMSArNzc0LDMxNiBAQAogICAgIE5VTEwKIH07CiAKKy8qCisgKiBJVFUtVCBRLjkzMy4KKyAqCisgKiBwIHBvaW50cyB0byBvY3RldCAyLCB0aGUgb2N0ZXQgY29udGFpbmluZyB0aGUgbGVuZ3RoIG9mIHRoZQorICogY2FsbCByZWZlcmVuY2UgdmFsdWUsIHNvIHBbbl0gaXMgb2N0ZXQgbisyICgib2N0ZXQgWCIgaXMgYXMKKyAqIHVzZWQgaW4gUS45MzEvUS45MzMpLgorICoKKyAqIFhYWCAtIGFjdHVhbGx5IHVzZWQgYm90aCBmb3IgUS45MzEgYW5kIFEuOTMzLgorICovCiB2b2lkCiBxOTMzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICBjb25zdCB1X2NoYXIgKnAsIHVfaW50IGxlbmd0aCkKIHsKLQljb25zdCB1X2NoYXIgKnB0ZW1wID0gcDsKLQlzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90ICAqaWVfcDsKLSAgICAgICAgaW50IG9sZW47Ci0JaW50IGlzX2Fuc2kgPSAwOwotICAgICAgICB1X2ludCBjb2Rlc2V0OwotICAgICAgICB1X2ludCBpZV9pc19rbm93biA9IDA7CisJdV9pbnQgb2xlbjsKKwl1X2ludCBjYWxsX3JlZl9sZW5ndGgsIGk7CisJdWludDhfdCBjYWxsX3JlZlsxNV07CS8qIG1heGltdW0gbGVuZ3RoIC0gbGVuZ3RoIGZpZWxkIGlzIDQgYml0cyAqLworCXVfaW50IG1zZ3R5cGU7CisJdV9pbnQgaWVjb2RlOworCXVfaW50IGllbGVuZ3RoOworCXVfaW50IGNvZGVzZXQgPSAwOworCXVfaW50IGlzX2Fuc2kgPSAwOworCXVfaW50IGllX2lzX2tub3duOworCXVfaW50IG5vbl9sb2NraW5nX3NoaWZ0OworCXVfaW50IHVuc2hpZnRfY29kZXNldDsKIAotCWlmIChsZW5ndGggPCA5KSB7CS8qIHNob3J0ZXN0OiBRLjkzM2EgTElOSyBWRVJJRlkgKi8KLQkJTkRfUFJJTlQoKG5kbywgIlt8cS45MzNdIikpOwotCQlyZXR1cm47CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgbmRvLT5uZG9fZWZsYWcgPyAiIiA6ICJRLjkzMyIpKTsKKworCWlmIChsZW5ndGggPT0gMCB8fCAhTkRfVFRFU1QoKnApKSB7CisJCWlmICghbmRvLT5uZG9fZWZsYWcpCisJCQlORF9QUklOVCgobmRvLCAiLCAiKSk7CisJCU5EX1BSSU5UKChuZG8sICJsZW5ndGggJXUiLCBsZW5ndGgpKTsKKwkJZ290byB0cnVuYzsKIAl9CiAKLSAgICAgICAgY29kZXNldCA9IHBbMl0mMHgwZjsgICAvKiBleHRyYWN0IHRoZSBjb2Rlc2V0ICovCisJLyoKKwkgKiBHZXQgdGhlIGxlbmd0aCBvZiB0aGUgY2FsbCByZWZlcmVuY2UgdmFsdWUuCisJICovCisJb2xlbiA9IGxlbmd0aDsgLyogcHJlc2VydmUgdGhlIG9yaWdpbmFsIGxlbmd0aCBmb3IgZGlzcGxheSAqLworCWNhbGxfcmVmX2xlbmd0aCA9ICgqcCkgJiAweDBmOworCXArKzsKKwlsZW5ndGgtLTsKIAotCWlmIChwWzJdID09IE1TR19BTlNJX0xPQ0tJTkdfU0hJRlQpIHsKLQkgICAgICAgIGlzX2Fuc2kgPSAxOworCS8qCisJICogR2V0IHRoZSBjYWxsIHJlZmVyZW5jZSB2YWx1ZS4KKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgY2FsbF9yZWZfbGVuZ3RoOyBpKyspIHsKKwkJaWYgKGxlbmd0aCA9PSAwIHx8ICFORF9UVEVTVCgqcCkpIHsKKwkJCWlmICghbmRvLT5uZG9fZWZsYWcpCisJCQkJTkRfUFJJTlQoKG5kbywgIiwgIikpOworCQkJTkRfUFJJTlQoKG5kbywgImxlbmd0aCAldSIsIG9sZW4pKTsKKwkJCWdvdG8gdHJ1bmM7CisJCX0KKwkJY2FsbF9yZWZbaV0gPSAqcDsKKwkJcCsrOworCQlsZW5ndGgtLTsKIAl9CiAKLSAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgbmRvLT5uZG9fZWZsYWcgPyAiIiA6ICJRLjkzMywgIikpOworCS8qCisJICogR2V0IHRoZSBtZXNzYWdlIHR5cGUuCisJICovCisJaWYgKGxlbmd0aCA9PSAwIHx8ICFORF9UVEVTVCgqcCkpIHsKKwkJaWYgKCFuZG8tPm5kb19lZmxhZykKKwkJCU5EX1BSSU5UKChuZG8sICIsICIpKTsKKwkJTkRfUFJJTlQoKG5kbywgImxlbmd0aCAldSIsIG9sZW4pKTsKKwkJZ290byB0cnVuYzsKKwl9CisJbXNndHlwZSA9ICpwOworCXArKzsKKwlsZW5ndGgtLTsKKworCS8qCisJICogUGVlayBhaGVhZCB0byBzZWUgaWYgd2Ugc3RhcnQgd2l0aCBhIHNoaWZ0LgorCSAqLworCW5vbl9sb2NraW5nX3NoaWZ0ID0gMDsKKwl1bnNoaWZ0X2NvZGVzZXQgPSBjb2Rlc2V0OworCWlmIChsZW5ndGggIT0gMCkgeworCQlpZiAoIU5EX1RURVNUKCpwKSkgeworCQkJaWYgKCFuZG8tPm5kb19lZmxhZykKKwkJCQlORF9QUklOVCgobmRvLCAiLCAiKSk7CisJCQlORF9QUklOVCgobmRvLCAibGVuZ3RoICV1Iiwgb2xlbikpOworCQkJZ290byB0cnVuYzsKKwkJfQorCQlpZWNvZGUgPSAqcDsKKwkJaWYgKElFX0lTX1NISUZUKGllY29kZSkpIHsKKwkJCS8qCisJCQkgKiBJdCdzIGEgc2hpZnQuICBTa2lwIG92ZXIgaXQuCisJCQkgKi8KKwkJCXArKzsKKwkJCWxlbmd0aC0tOworCisJCQkvKgorCQkJICogR2V0IHRoZSBjb2Rlc2V0LgorCQkJICovCisJCQljb2Rlc2V0ID0gSUVfU0hJRlRfQ09ERVNFVChpZWNvZGUpOworCisJCQkvKgorCQkJICogSWYgaXQncyBhIGxvY2tpbmcgc2hpZnQgdG8gY29kZXNldCA1LAorCQkJICogbWFyayB0aGlzIGFzIEFOU0kuICAoWFhYIC0gNSBpcyBhY3R1YWxseQorCQkJICogZm9yIG5hdGlvbmFsIHZhcmlhbnRzIGluIGdlbmVyYWwsIG5vdAorCQkJICogdGhlIFVTIHZhcmlhbnQgaW4gcGFydGljdWxhciwgYnV0IG1heWJlCisJCQkgKiB0aGlzIGlzIG1vcmUgQW1lcmljYW4gZXhjZXB0aW9uYWxpc20uIDotKSkKKwkJCSAqLworCQkJaWYgKElFX1NISUZUX0lTX0xPQ0tJTkcoaWVjb2RlKSkgeworCQkJCS8qCisJCQkJICogSXQncyBhIGxvY2tpbmcgc2hpZnQuCisJCQkJICovCisJCQkJaWYgKGNvZGVzZXQgPT0gNSkgeworCQkJCQkvKgorCQkJCQkgKiBJdCdzIGEgbG9ja2luZyBzaGlmdCB0bworCQkJCQkgKiBjb2Rlc2V0IDUsIHNvIHRoaXMgaXMKKwkJCQkJICogVDEuNjE3IEFubmV4IEQuCisJCQkJCSAqLworCQkJCQlpc19hbnNpID0gMTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogSXQncyBhIG5vbi1sb2NraW5nIHNoaWZ0LgorCQkJCSAqIFJlbWVtYmVyIHRoZSBjdXJyZW50IGNvZGVzZXQsIHNvIHdlCisJCQkJICogY2FuIHJldmVydCB0byBpdCBhZnRlciB0aGUgbmV4dCBJRS4KKwkJCQkgKi8KKwkJCQlub25fbG9ja2luZ19zaGlmdCA9IDE7CisJCQkJdW5zaGlmdF9jb2Rlc2V0ID0gMDsKKwkJCX0KKwkJfQorCX0KIAogCS8qIHByaW50aW5nIG91dCBoZWFkZXIgcGFydCAqLworCWlmICghbmRvLT5uZG9fZWZsYWcpCisJCU5EX1BSSU5UKChuZG8sICIsICIpKTsKIAlORF9QUklOVCgobmRvLCAiJXMsIGNvZGVzZXQgJXUiLCBpc19hbnNpID8gIkFOU0kiIDogIkNDSVRUIiwgY29kZXNldCkpOwogCi0JaWYgKHBbMF0pIHsKLQkgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIENhbGwgUmVmOiAweCUwMngiLCBwWzBdKSk7CisJaWYgKGNhbGxfcmVmX2xlbmd0aCAhPSAwKSB7CisJCU5EX1RDSEVDSyhwWzBdKTsKKwkJaWYgKGNhbGxfcmVmX2xlbmd0aCA+IDEgfHwgcFswXSAhPSAwKSB7CisJCQkvKgorCQkJICogTm90IGEgZHVtbXkgY2FsbCByZWZlcmVuY2UuCisJCQkgKi8KKwkJCU5EX1BSSU5UKChuZG8sICIsIENhbGwgUmVmOiAweCIpKTsKKwkJCWZvciAoaSA9IDA7IGkgPCBjYWxsX3JlZl9sZW5ndGg7IGkrKykKKwkJCQlORF9QUklOVCgobmRvLCAiJTAyeCIsIGNhbGxfcmVmW2ldKSk7CisJCX0KIAl9Ci0gICAgICAgIGlmIChuZG8tPm5kb192ZmxhZykgewotICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICVzICgweCUwMngpLCBsZW5ndGggJXUiLAorCWlmIChuZG8tPm5kb192ZmxhZykgeworCQlORF9QUklOVCgobmRvLCAiLCAlcyAoMHglMDJ4KSwgbGVuZ3RoICV1IiwKKwkJICAgdG9rMnN0cihmcl9xOTMzX21zZ192YWx1ZXMsCisJCQkidW5rbm93biBtZXNzYWdlIiwgbXNndHlwZSksCisJCSAgIG1zZ3R5cGUsCisJCSAgIG9sZW4pKTsKKwl9IGVsc2UgeworCQlORF9QUklOVCgobmRvLCAiLCAlcyIsCiAJCSAgICAgICB0b2syc3RyKGZyX3E5MzNfbXNnX3ZhbHVlcywKLQkJCSAgICAgICAidW5rbm93biBtZXNzYWdlIiwgcFsxXSksCi0JCSAgICAgICBwWzFdLAotCQkgICAgICAgbGVuZ3RoKSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXMiLAotCQkgICAgICAgdG9rMnN0cihmcl9xOTMzX21zZ192YWx1ZXMsCi0JCQkgICAgICAgInVua25vd24gbWVzc2FnZSAweCUwMngiLCBwWzFdKSkpOworCQkJICAgICAgICJ1bmtub3duIG1lc3NhZ2UgMHglMDJ4IiwgbXNndHlwZSkpKTsKIAl9CiAKLSAgICAgICAgb2xlbiA9IGxlbmd0aDsgLyogcHJlc2VydmUgdGhlIG9yaWdpbmFsIGxlbmd0aCBmb3Igbm9uIHZlcmJvc2UgbW9kZSAqLworCS8qIExvb3AgdGhyb3VnaCB0aGUgcmVzdCBvZiB0aGUgSUVzICovCisJd2hpbGUgKGxlbmd0aCAhPSAwKSB7CisJCS8qCisJCSAqIFdoYXQncyB0aGUgc3RhdGUgb2YgYW55IG5vbi1sb2NraW5nIHNoaWZ0cz8KKwkJICovCisJCWlmIChub25fbG9ja2luZ19zaGlmdCA9PSAxKSB7CisJCQkvKgorCQkJICogVGhlcmUncyBhIG5vbi1sb2NraW5nIHNoaWZ0IGluIGVmZmVjdCBmb3IKKwkJCSAqIHRoaXMgSUUuICBDb3VudCBpdCwgc28gd2UgcmVzZXQgdGhlIGNvZGVzZXQKKwkJCSAqIGJlZm9yZSB0aGUgbmV4dCBJRS4KKwkJCSAqLworCQkJbm9uX2xvY2tpbmdfc2hpZnQgPSAyOworCQl9IGVsc2UgaWYgKG5vbl9sb2NraW5nX3NoaWZ0ID09IDIpIHsKKwkJCS8qCisJCQkgKiBVbnNoaWZ0LgorCQkJICovCisJCQljb2Rlc2V0ID0gdW5zaGlmdF9jb2Rlc2V0OworCQkJbm9uX2xvY2tpbmdfc2hpZnQgPSAwOworCQl9CiAKLQlpZiAobGVuZ3RoIDwgKHVfaW50KSgyIC0gaXNfYW5zaSkpIHsKLQkJTkRfUFJJTlQoKG5kbywgIlt8cS45MzNdIikpOwotCQlyZXR1cm47CisJCS8qCisJCSAqIEdldCB0aGUgZmlyc3Qgb2N0ZXQgb2YgdGhlIElFLgorCQkgKi8KKwkJaWYgKCFORF9UVEVTVCgqcCkpIHsKKwkJCWlmICghbmRvLT5uZG9fdmZsYWcpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiLCBsZW5ndGggJXUiLCBvbGVuKSk7CisJCQl9CisJCQlnb3RvIHRydW5jOworCQl9CisJCWllY29kZSA9ICpwOworCQlwKys7CisJCWxlbmd0aC0tOworCisJCS8qIFNpbmdsZS1vY3RldCBJRT8gKi8KKwkJaWYgKElFX0lTX1NJTkdMRV9PQ1RFVChpZWNvZGUpKSB7CisJCQkvKgorCQkJICogWWVzLiAgSXMgaXQgYSBzaGlmdD8KKwkJCSAqLworCQkJaWYgKElFX0lTX1NISUZUKGllY29kZSkpIHsKKwkJCQkvKgorCQkJCSAqIFllcy4gIElzIGl0IGxvY2tpbmc/CisJCQkJICovCisJCQkJaWYgKElFX1NISUZUX0lTX0xPQ0tJTkcoaWVjb2RlKSkgeworCQkJCQkvKgorCQkJCQkgKiBZZXMuCisJCQkJCSAqLworCQkJCQlub25fbG9ja2luZ19zaGlmdCA9IDA7CisJCQkJfSBlbHNlIHsKKwkJCQkJLyoKKwkJCQkJICogTm8uICBSZW1lbWJlciB0aGUgY3VycmVudAorCQkJCQkgKiBjb2Rlc2V0LCBzbyB3ZSBjYW4gcmV2ZXJ0CisJCQkJCSAqIHRvIGl0IGFmdGVyIHRoZSBuZXh0IElFLgorCQkJCQkgKi8KKwkJCQkJbm9uX2xvY2tpbmdfc2hpZnQgPSAxOworCQkJCQl1bnNoaWZ0X2NvZGVzZXQgPSBjb2Rlc2V0OworCQkJCX0KKworCQkJCS8qCisJCQkJICogR2V0IHRoZSBjb2Rlc2V0LgorCQkJCSAqLworCQkJCWNvZGVzZXQgPSBJRV9TSElGVF9DT0RFU0VUKGllY29kZSk7CisJCQl9CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogTm8uICBHZXQgdGhlIElFIGxlbmd0aC4KKwkJCSAqLworCQkJaWYgKGxlbmd0aCA9PSAwIHx8ICFORF9UVEVTVCgqcCkpIHsKKwkJCQlpZiAoIW5kby0+bmRvX3ZmbGFnKSB7CisJCQkJCU5EX1BSSU5UKChuZG8sICIsIGxlbmd0aCAldSIsIG9sZW4pKTsKKwkJCQl9CisJCQkJZ290byB0cnVuYzsKKwkJCX0KKwkJCWllbGVuZ3RoID0gKnA7CisJCQlwKys7CisJCQlsZW5ndGgtLTsKKworCQkJLyogbGV0cyBkbyB0aGUgZnVsbCBJRSBwYXJzaW5nIG9ubHkgaW4gdmVyYm9zZSBtb2RlCisJCQkgKiBob3dldmVyIHNvbWUgSUVzIChETENJIFN0YXR1cywgTGluayBWZXJpZnkpCisJCQkgKiBhcmUgYWxzbyBpbnRlcmVzdGluZyBpbiBub24tdmVyYm9zZSBtb2RlICovCisJCQlpZiAobmRvLT5uZG9fdmZsYWcpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiXG5cdCVzIElFICgweCUwMngpLCBsZW5ndGggJXU6ICIsCisJCQkJICAgIHRvazJzdHIoZnJfcTkzM19pZV9jb2Rlc2V0c1tjb2Rlc2V0XSwKKwkJCQkJInVua25vd24iLCBpZWNvZGUpLAorCQkJCSAgICBpZWNvZGUsCisJCQkJICAgIGllbGVuZ3RoKSk7CisJCQl9CisKKwkJCS8qIHNhbml0eSBjaGVja3MgKi8KKwkJCWlmIChpZWNvZGUgPT0gMCB8fCBpZWxlbmd0aCA9PSAwKSB7CisJCQkJcmV0dXJuOworCQkJfQorCQkJaWYgKGxlbmd0aCA8IGllbGVuZ3RoIHx8ICFORF9UVEVTVDIoKnAsIGllbGVuZ3RoKSkgeworCQkJCWlmICghbmRvLT5uZG9fdmZsYWcpIHsKKwkJCQkJTkRfUFJJTlQoKG5kbywgIiwgbGVuZ3RoICV1Iiwgb2xlbikpOworCQkJCX0KKwkJCQlnb3RvIHRydW5jOworCQkJfQorCisJCQlpZV9pc19rbm93biA9IDA7CisJCQlpZiAoZnJfcTkzM19wcmludF9pZV9jb2Rlc2V0W2NvZGVzZXRdICE9IE5VTEwpIHsKKwkJCQlpZV9pc19rbm93biA9IGZyX3E5MzNfcHJpbnRfaWVfY29kZXNldFtjb2Rlc2V0XShuZG8sIGllY29kZSwgaWVsZW5ndGgsIHApOworCQkJfQorCisJCQlpZiAoaWVfaXNfa25vd24pIHsKKwkJCQkvKgorCQkJCSAqIEtub3duIElFOyBkbyB3ZSB3YW50IHRvIHNlZSBhIGhleGR1bXAKKwkJCQkgKiBvZiBpdD8KKwkJCQkgKi8KKwkJCQlpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7CisJCQkJCS8qIFllcy4gKi8KKwkJCQkJcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgcCwgIlxuXHQgICIsIGllbGVuZ3RoKTsKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCS8qCisJCQkJICogVW5rbm93biBJRTsgaWYgd2UncmUgcHJpbnRpbmcgdmVyYm9zZWx5LAorCQkJCSAqIHByaW50IGl0cyBjb250ZW50IGluIGhleC4KKwkJCQkgKi8KKwkJCQlpZiAobmRvLT5uZG9fdmZsYWcgPj0gMSkgeworCQkJCQlwcmludF91bmtub3duX2RhdGEobmRvLCBwLCAiXG5cdCIsIGllbGVuZ3RoKTsKKwkJCQl9CisJCQl9CisKKwkJCWxlbmd0aCAtPSBpZWxlbmd0aDsKKwkJCXAgKz0gaWVsZW5ndGg7CisJCX0KIAl9Ci0JbGVuZ3RoIC09IDIgKyBpc19hbnNpOwotCXB0ZW1wICs9IDIgKyBpc19hbnNpOwotCi0JLyogTG9vcCB0aHJvdWdoIHRoZSByZXN0IG9mIElFICovCi0Jd2hpbGUgKGxlbmd0aCA+IHNpemVvZihzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90KSkgewotCQlpZV9wID0gKHN0cnVjdCBpZV90bHZfaGVhZGVyX3QgICopcHRlbXA7Ci0JCWlmIChsZW5ndGggPCBzaXplb2Yoc3RydWN0IGllX3Rsdl9oZWFkZXJfdCkgfHwKLQkJICAgIGxlbmd0aCA8IHNpemVvZihzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90KSArIGllX3AtPmllX2xlbikgewotICAgICAgICAgICAgICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcpIHsgLyogbm90IGJhcmsgaWYgdGhlcmUgaXMganVzdCBhIHRyYWlsZXIgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblt8cS45MzNdIikpOwotICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgbGVuZ3RoICV1Iiwgb2xlbikpOwotCQkgICAgfQotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQotICAgICAgICAgICAgICAgIC8qIGxldHMgZG8gdGhlIGZ1bGwgSUUgcGFyc2luZyBvbmx5IGluIHZlcmJvc2UgbW9kZQotICAgICAgICAgICAgICAgICAqIGhvd2V2ZXIgc29tZSBJRXMgKERMQ0kgU3RhdHVzLCBMaW5rIFZlcmlmeSkKLSAgICAgICAgICAgICAgICAgKiBhcmUgYWxzbyBpbnRlcmVzdHRpbmcgaW4gbm9uLXZlcmJvc2UgbW9kZSAqLwotICAgICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZykgewotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCVzIElFICgweCUwMngpLCBsZW5ndGggJXU6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGZyX3E5MzNfaWVfY29kZXNldHNbY29kZXNldF0sCi0JCQkJICAgInVua25vd24iLCBpZV9wLT5pZV90eXBlKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGllX3AtPmllX3R5cGUsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpZV9wLT5pZV9sZW4pKTsKLQkJfQotCi0gICAgICAgICAgICAgICAgLyogc2FuaXR5IGNoZWNrICovCi0gICAgICAgICAgICAgICAgaWYgKGllX3AtPmllX3R5cGUgPT0gMCB8fCBpZV9wLT5pZV9sZW4gPT0gMCkgewotICAgICAgICAgICAgICAgICAgICByZXR1cm47Ci0JCX0KLQotICAgICAgICAgICAgICAgIGlmIChmcl9xOTMzX3ByaW50X2llX2NvZGVzZXRbY29kZXNldF0gIT0gTlVMTCkgewotICAgICAgICAgICAgICAgICAgICBpZV9pc19rbm93biA9IGZyX3E5MzNfcHJpbnRfaWVfY29kZXNldFtjb2Rlc2V0XShuZG8sIGllX3AsIHB0ZW1wKTsKLQkJfQotCi0gICAgICAgICAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnID49IDEgJiYgIWllX2lzX2tub3duKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHB0ZW1wKzIsICJcblx0IiwgaWVfcC0+aWVfbGVuKTsKLQkJfQotCi0gICAgICAgICAgICAgICAgLyogZG8gd2Ugd2FudCB0byBzZWUgYSBoZXhkdW1wIG9mIHRoZSBJRSA/ICovCi0gICAgICAgICAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnPiAxICYmIGllX2lzX2tub3duKSB7Ci0gICAgICAgICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHB0ZW1wKzIsICJcblx0ICAiLCBpZV9wLT5pZV9sZW4pOwotCQl9Ci0KLQkJbGVuZ3RoID0gbGVuZ3RoIC0gaWVfcC0+aWVfbGVuIC0gMjsKLQkJcHRlbXAgPSBwdGVtcCArIGllX3AtPmllX2xlbiArIDI7CisJaWYgKCFuZG8tPm5kb192ZmxhZykgeworCSAgICBORF9QUklOVCgobmRvLCAiLCBsZW5ndGggJXUiLCBvbGVuKSk7CiAJfQotICAgICAgICBpZiAoIW5kby0+bmRvX3ZmbGFnKSB7Ci0gICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBsZW5ndGggJXUiLCBvbGVuKSk7Ci0JfQorCXJldHVybjsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIlt8cS45MzNdIikpOwogfQogCiBzdGF0aWMgaW50Ci1mcl9xOTMzX3ByaW50X2llX2NvZGVzZXQ1KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaWVfdGx2X2hlYWRlcl90ICAqaWVfcCwgY29uc3QgdV9jaGFyICpwKQorZnJfcTkzM19wcmludF9pZV9jb2Rlc2V0XzBfNShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9pbnQgaWVjb2RlLAorICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBpZWxlbmd0aCwgY29uc3QgdV9jaGFyICpwKQogewogICAgICAgICB1X2ludCBkbGNpOwogCi0gICAgICAgIHN3aXRjaCAoaWVfcC0+aWVfdHlwZSkgeworICAgICAgICBzd2l0Y2ggKGllY29kZSkgewogCiAgICAgICAgIGNhc2UgRlJfTE1JX0FOU0lfUkVQT1JUX1RZUEVfSUU6IC8qIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICBjYXNlIEZSX0xNSV9DQ0lUVF9SRVBPUlRfVFlQRV9JRToKKyAgICAgICAgICAgIGlmIChpZWxlbmd0aCA8IDEpIHsKKyAgICAgICAgICAgICAgICBpZiAoIW5kby0+bmRvX3ZmbGFnKSB7CisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICIpKTsKKwkgICAgICAgIH0KKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiSW52YWxpZCBSRVBPUlQgVFlQRSBJRSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZykgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyAoJXUpIiwKLSAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihmcl9sbWlfcmVwb3J0X3R5cGVfaWVfdmFsdWVzLCJ1bmtub3duIixwWzJdKSwKLSAgICAgICAgICAgICAgICAgICAgICAgcFsyXSkpOworICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGZyX2xtaV9yZXBvcnRfdHlwZV9pZV92YWx1ZXMsInVua25vd24iLHBbMF0pLAorICAgICAgICAgICAgICAgICAgICAgICBwWzBdKSk7CiAJICAgIH0KICAgICAgICAgICAgIHJldHVybiAxOwogCkBAIC04ODUsNyArMTA5MywxMSBAQAogICAgICAgICAgICAgaWYgKCFuZG8tPm5kb192ZmxhZykgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICIpKTsKIAkgICAgfQotICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlRYIFNlcTogJTNkLCBSWCBTZXE6ICUzZCIsIHBbMl0sIHBbM10pKTsKKyAgICAgICAgICAgIGlmIChpZWxlbmd0aCA8IDIpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiSW52YWxpZCBMSU5LIFZFUklGWSBJRSIpKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJUWCBTZXE6ICUzZCwgUlggU2VxOiAlM2QiLCBwWzBdLCBwWzFdKSk7CiAgICAgICAgICAgICByZXR1cm4gMTsKIAogICAgICAgICBjYXNlIEZSX0xNSV9BTlNJX1BWQ19TVEFUVVNfSUU6IC8qIGZhbGwgdGhyb3VnaCAqLwpAQCAtODk0LDI4ICsxMTA2LDI5IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgIikpOwogCSAgICB9CiAgICAgICAgICAgICAvKiBub3cgcGFyc2UgdGhlIERMQ0kgaW5mb3JtYXRpb24gZWxlbWVudC4gKi8KLSAgICAgICAgICAgIGlmICgoaWVfcC0+aWVfbGVuIDwgMykgfHwKLSAgICAgICAgICAgICAgICAocFsyXSAmIDB4ODApIHx8Ci0gICAgICAgICAgICAgICAgKChpZV9wLT5pZV9sZW4gPT0gMykgJiYgIShwWzNdICYgMHg4MCkpIHx8Ci0gICAgICAgICAgICAgICAgKChpZV9wLT5pZV9sZW4gPT0gNCkgJiYgKChwWzNdICYgMHg4MCkgfHwgIShwWzRdICYgMHg4MCkpKSB8fAotICAgICAgICAgICAgICAgICgoaWVfcC0+aWVfbGVuID09IDUpICYmICgocFszXSAmIDB4ODApIHx8IChwWzRdICYgMHg4MCkgfHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIShwWzVdICYgMHg4MCkpKSB8fAotICAgICAgICAgICAgICAgIChpZV9wLT5pZV9sZW4gPiA1KSB8fAotICAgICAgICAgICAgICAgICEocFtpZV9wLT5pZV9sZW4gKyAxXSAmIDB4ODApKSB7Ci0gICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkludmFsaWQgRExDSSBJRSIpKTsKKyAgICAgICAgICAgIGlmICgoaWVsZW5ndGggPCAzKSB8fAorICAgICAgICAgICAgICAgIChwWzBdICYgMHg4MCkgfHwKKyAgICAgICAgICAgICAgICAoKGllbGVuZ3RoID09IDMpICYmICEocFsxXSAmIDB4ODApKSB8fAorICAgICAgICAgICAgICAgICgoaWVsZW5ndGggPT0gNCkgJiYgKChwWzFdICYgMHg4MCkgfHwgIShwWzJdICYgMHg4MCkpKSB8fAorICAgICAgICAgICAgICAgICgoaWVsZW5ndGggPT0gNSkgJiYgKChwWzFdICYgMHg4MCkgfHwgKHBbMl0gJiAweDgwKSB8fAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAhKHBbM10gJiAweDgwKSkpIHx8CisgICAgICAgICAgICAgICAgKGllbGVuZ3RoID4gNSkgfHwKKyAgICAgICAgICAgICAgICAhKHBbaWVsZW5ndGggLSAxXSAmIDB4ODApKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkludmFsaWQgRExDSSBpbiBQVkMgU1RBVFVTIElFIikpOworICAgICAgICAgICAgICAgIHJldHVybiAxOwogCSAgICB9CiAKLSAgICAgICAgICAgIGRsY2kgPSAoKHBbMl0gJiAweDNGKSA8PCA0KSB8ICgocFszXSAmIDB4NzgpID4+IDMpOwotICAgICAgICAgICAgaWYgKGllX3AtPmllX2xlbiA9PSA0KSB7Ci0gICAgICAgICAgICAgICAgZGxjaSA9IChkbGNpIDw8IDYpIHwgKChwWzRdICYgMHg3RSkgPj4gMSk7CisgICAgICAgICAgICBkbGNpID0gKChwWzBdICYgMHgzRikgPDwgNCkgfCAoKHBbMV0gJiAweDc4KSA+PiAzKTsKKyAgICAgICAgICAgIGlmIChpZWxlbmd0aCA9PSA0KSB7CisgICAgICAgICAgICAgICAgZGxjaSA9IChkbGNpIDw8IDYpIHwgKChwWzJdICYgMHg3RSkgPj4gMSk7CiAJICAgIH0KLSAgICAgICAgICAgIGVsc2UgaWYgKGllX3AtPmllX2xlbiA9PSA1KSB7Ci0gICAgICAgICAgICAgICAgZGxjaSA9IChkbGNpIDw8IDEzKSB8IChwWzRdICYgMHg3RikgfCAoKHBbNV0gJiAweDdFKSA+PiAxKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKGllbGVuZ3RoID09IDUpIHsKKyAgICAgICAgICAgICAgICBkbGNpID0gKGRsY2kgPDwgMTMpIHwgKHBbMl0gJiAweDdGKSB8ICgocFszXSAmIDB4N0UpID4+IDEpOwogCSAgICB9CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJETENJICV1OiBzdGF0dXMgJXMlcyIsIGRsY2ksCi0gICAgICAgICAgICAgICAgICAgIHBbaWVfcC0+aWVfbGVuICsgMV0gJiAweDggPyAiTmV3LCAiIDogIiIsCi0gICAgICAgICAgICAgICAgICAgIHBbaWVfcC0+aWVfbGVuICsgMV0gJiAweDIgPyAiQWN0aXZlIiA6ICJJbmFjdGl2ZSIpKTsKKyAgICAgICAgICAgICAgICAgICAgcFtpZWxlbmd0aCAtIDFdICYgMHg4ID8gIk5ldywgIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICBwW2llbGVuZ3RoIC0gMV0gJiAweDIgPyAiQWN0aXZlIiA6ICJJbmFjdGl2ZSIpKTsKICAgICAgICAgICAgIHJldHVybiAxOwogCX0KIApkaWZmIC0tZ2l0IGEvcHJpbnQtZnJhZzYuYyBiL3ByaW50LWZyYWc2LmMKaW5kZXggMTI5MDk1Mi4uZGI0YTk4ZSAxMDA2NDQKLS0tIGEvcHJpbnQtZnJhZzYuYworKysgYi9wcmludC1mcmFnNi5jCkBAIC0xOSwxNyArMTksMTYgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSVB2NiBmcmFnbWVudGF0aW9uIGhlYWRlciBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2lmZGVmIElORVQ2Ci0KLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlICJpcDYuaCIKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiBpbnQKQEAgLTY4LDQgKzY3LDMgQEAKIAlORF9QUklOVCgobmRvLCAiW3xmcmFnXSIpKTsKIAlyZXR1cm4gLTE7CiB9Ci0jZW5kaWYgLyogSU5FVDYgKi8KZGlmZiAtLWdpdCBhL3ByaW50LWZ0cC5jIGIvcHJpbnQtZnRwLmMKaW5kZXggNTQ3OTA0Mi4uYTFkZDYwNyAxMDA2NDQKLS0tIGEvcHJpbnQtZnRwLmMKKysrIGIvcHJpbnQtZnRwLmMKQEAgLTExLDE2ICsxMSwxMyBAQAogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNpZm5kZWYgbGludAotc3RhdGljIGNvbnN0IGNoYXIgcmNzaWRbXSBfVV8gPQotICAgICJAKCMpICRIZWFkZXIkIjsKLSNlbmRpZgorLyogXHN1bW1hcnk6IEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wgKEZUUCkgcHJpbnRlciAqLwogCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgpkaWZmIC0tZ2l0IGEvcHJpbnQtZ2VuZXZlLmMgYi9wcmludC1nZW5ldmUuYwppbmRleCAyMTg3YWI4Li40MDQwMmFiIDEwMDY0NAotLS0gYS9wcmludC1nZW5ldmUuYworKysgYi9wcmludC1nZW5ldmUuYwpAQCAtMTUsMTkgKzE1LDIwIEBACiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogR2VuZXJpYyBOZXR3b3JrIFZpcnR1YWxpemF0aW9uIEVuY2Fwc3VsYXRpb24gKEdlbmV2ZSkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImV0aGVydHlwZS5oIgogCiAvKgotICogR2VuZXZlIGhlYWRlciwgZHJhZnQtZ3Jvc3MtZ2VuZXZlLTAyCisgKiBHZW5ldmUgaGVhZGVyLCBkcmFmdC1pZXRmLW52bzMtZ2VuZXZlCiAgKgogICogICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwogICogICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCkBAIC03NywxMiArNzgsMjUgQEAKIHN0YXRpYyBjb25zdCBjaGFyICoKIGZvcm1hdF9vcHRfY2xhc3ModWludDE2X3Qgb3B0X2NsYXNzKQogewotICAgIGlmIChvcHRfY2xhc3MgPD0gMHhmZikKLSAgICAgICAgcmV0dXJuICJTdGFuZGFyZCI7Ci0gICAgZWxzZSBpZiAob3B0X2NsYXNzID09IDB4ZmZmZikKLSAgICAgICAgcmV0dXJuICJFeHBlcmltZW50YWwiOwotICAgIGVsc2UKLSAgICAgICAgcmV0dXJuICJVbmtub3duIjsKKyAgICBzd2l0Y2ggKG9wdF9jbGFzcykgeworICAgIGNhc2UgMHgwMTAwOgorICAgICAgICByZXR1cm4gIkxpbnV4IjsKKyAgICBjYXNlIDB4MDEwMToKKyAgICAgICAgcmV0dXJuICJPcGVuIHZTd2l0Y2giOworICAgIGNhc2UgMHgwMTAyOgorICAgICAgICByZXR1cm4gIk9wZW4gVmlydHVhbCBOZXR3b3JraW5nIChPVk4pIjsKKyAgICBjYXNlIDB4MDEwMzoKKyAgICAgICAgcmV0dXJuICJJbi1iYW5kIE5ldHdvcmsgVGVsZW1ldHJ5IChJTlQpIjsKKyAgICBjYXNlIDB4MDEwNDoKKyAgICAgICAgcmV0dXJuICJWTXdhcmUiOworICAgIGRlZmF1bHQ6CisgICAgICAgIGlmIChvcHRfY2xhc3MgPD0gMHgwMGZmKQorICAgICAgICAgICAgcmV0dXJuICJTdGFuZGFyZCI7CisgICAgICAgIGVsc2UgaWYgKG9wdF9jbGFzcyA+PSAweGZmZjApCisgICAgICAgICAgICByZXR1cm4gIkV4cGVyaW1lbnRhbCI7CisgICAgfQorCisgICAgcmV0dXJuICJVbmtub3duIjsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTExMiwxNCArMTI2LDE0IEBACiAgICAgICAgIH0KIAogICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcgPiAxICYmIG9wdF9sZW4gPiA0KSB7Ci0gICAgICAgICAgICB1aW50MzJfdCAqcHJpbnRfZGF0YSA9ICh1aW50MzJfdCAqKShicCArIDQpOworICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmRhdGEgPSAoY29uc3QgdWludDMyX3QgKikoYnAgKyA0KTsKICAgICAgICAgICAgIGludCBpOwogCiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGRhdGEiKSk7CiAKICAgICAgICAgICAgIGZvciAoaSA9IDQ7IGkgPCBvcHRfbGVuOyBpICs9IDQpIHsKLSAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICUwOHgiLCBFWFRSQUNUXzMyQklUUyhwcmludF9kYXRhKSkpOwotICAgICAgICAgICAgICAgIHByaW50X2RhdGErKzsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICUwOHgiLCBFWFRSQUNUXzMyQklUUyhkYXRhKSkpOworICAgICAgICAgICAgICAgIGRhdGErKzsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCkBAIC0xMzIsNyArMTQ2LDcgQEAKIGdlbmV2ZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuKQogewogICAgIHVpbnQ4X3QgdmVyX29wdDsKLSAgICB1aW50IHZlcnNpb247CisgICAgdV9pbnQgdmVyc2lvbjsKICAgICB1aW50OF90IGZsYWdzOwogICAgIHVpbnQxNl90IHByb3Q7CiAgICAgdWludDMyX3Qgdm5pOwpAQCAtMTg0LDcgKzE5OCw3IEBACiAKICAgICBpZiAobGVuIDwgb3B0c19sZW4pIHsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiB0cnVuY2F0ZWQtZ2VuZXZlIC0gJXUgYnl0ZXMgbWlzc2luZyIsCi0gICAgICAgICAgICAgICAgICBsZW4gLSBvcHRzX2xlbikpOworICAgICAgICAgICAgICAgICAgb3B0c19sZW4gLSBsZW4pKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjA5LDkgKzIyMyw5IEBACiAgICAgZWxzZQogICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCIpKTsKIAotICAgIGlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBwcm90LCBicCwgbGVuLCBsZW4pID09IDApIHsKKyAgICBpZiAoZXRoZXJ0eXBlX3ByaW50KG5kbywgcHJvdCwgYnAsIGxlbiwgbmRvLT5uZG9fc25hcGVuZCAtIGJwLCBOVUxMLCBOVUxMKSA9PSAwKSB7CiAgICAgICAgIGlmIChwcm90ID09IEVUSEVSVFlQRV9URUIpCi0gICAgICAgICAgICBldGhlcl9wcmludChuZG8sIGJwLCBsZW4sIGxlbiwgTlVMTCwgTlVMTCk7CisgICAgICAgICAgICBldGhlcl9wcmludChuZG8sIGJwLCBsZW4sIG5kby0+bmRvX3NuYXBlbmQgLSBicCwgTlVMTCwgTlVMTCk7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJnZW5ldmUtcHJvdG8tMHgleCIsIHByb3QpKTsKICAgICB9CmRpZmYgLS1naXQgYS9wcmludC1nZW9uZXQuYyBiL3ByaW50LWdlb25ldC5jCmluZGV4IGVkZmI3ZjIuLjlkYTg5YmYgMTAwNjQ0Ci0tLSBhL3ByaW50LWdlb25ldC5jCisrKyBiL3ByaW50LWdlb25ldC5jCkBAIC0xNSwxNCArMTUsMTUgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgT2xhIE1hcnRpbiBMeWtramEgKG9sYS5seWtramFAcS1mcmVlLmNvbSkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJU08gQ0FMTSBGQVNUIGFuZCBFVFNJIEdlb05ldHdvcmtpbmcgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKIApAQCAtODUsNiArODYsOCBAQAogewogCXVpbnQzMl90IGxhdCwgbG9uOwogCisJaWYgKCFORF9UVEVTVDIoKmJwLCBHRU9ORVRfQUREUl9MRU4pKQorCQlyZXR1cm4gKC0xKTsKIAlORF9QUklOVCgobmRvLCAiR05fQUREUjolcyAiLCBsaW5rYWRkcl9zdHJpbmcgKG5kbywgYnAsIDAsIEdFT05FVF9BRERSX0xFTikpKTsKIAogCWlmICghTkRfVFRFU1QyKCooYnArMTIpLCA4KSkKQEAgLTEwMiw3ICsxMDUsOCBAQAogICogdG8gdGhlIGdlb25ldCBoZWFkZXIgb2YgdGhlIHBhY2tldC4KICAqLwogdm9pZAotZ2VvbmV0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmV0aCwgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQorZ2VvbmV0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgsCisJICAgICBjb25zdCBzdHJ1Y3QgbGxhZGRyX2luZm8gKnNyYykKIHsKIAlpbnQgdmVyc2lvbjsKIAlpbnQgbmV4dF9oZHI7CkBAIC0xMTQsMTMgKzExOCwxNiBAQAogCWNvbnN0IGNoYXIgKmhkcl90eXBlX3R4dCA9ICJVbmtub3duIjsKIAlpbnQgaGRyX3NpemUgPSAtMTsKIAotCU5EX1BSSU5UKChuZG8sICJHZW9OZXQgc3JjOiVzOyAiLCBldGhlcmFkZHJfc3RyaW5nKG5kbywgZXRoKzYpKSk7CisJTkRfUFJJTlQoKG5kbywgIkdlb05ldCAiKSk7CisJaWYgKHNyYyAhPSBOVUxMKQorCQlORF9QUklOVCgobmRvLCAic3JjOiVzIiwgKHNyYy0+YWRkcl9zdHJpbmcpKG5kbywgc3JjLT5hZGRyKSkpOworCU5EX1BSSU5UKChuZG8sICI7ICIpKTsKIAogCS8qIFByb2Nlc3MgQ29tbW9uIEhlYWRlciAqLwogCWlmIChsZW5ndGggPCAzNikKLQkJZ290byBtYWxmb3JtZWQ7Ci0JCQotCU5EX1RDSEVDSzIoKmJwLCA3KTsKKwkJZ290byBpbnZhbGlkOworCisJTkRfVENIRUNLMigqYnAsIDgpOwogCXZlcnNpb24gPSBicFswXSA+PiA0OwogCW5leHRfaGRyID0gYnBbMF0gJiAweDBmOwogCWhkcl90eXBlID0gYnBbMV0gPj4gNDsKQEAgLTIyNCw3ICsyMzEsNyBAQAogCS8qIFNraXAgRXh0ZW5kZWQgaGVhZGVycyAqLwogCWlmIChoZHJfc2l6ZSA+PSAwKSB7CiAJCWlmIChsZW5ndGggPCAodV9pbnQpaGRyX3NpemUpCi0JCQlnb3RvIG1hbGZvcm1lZDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJTkRfVENIRUNLMigqYnAsIGhkcl9zaXplKTsKIAkJbGVuZ3RoIC09IGhkcl9zaXplOwogCQlicCArPSBoZHJfc2l6ZTsKQEAgLTIzNCw3ICsyNDEsNyBAQAogCQkJY2FzZSAxOgogCQkJY2FzZSAyOiAvKiBCVFAgQS9CICovCiAJCQkJaWYgKGxlbmd0aCA8IDQpCi0JCQkJCWdvdG8gbWFsZm9ybWVkOworCQkJCQlnb3RvIGludmFsaWQ7CiAJCQkJTkRfVENIRUNLMigqYnAsIDQpOwogCQkJCXByaW50X2J0cChuZG8sIGJwKTsKIAkJCQlsZW5ndGggLT0gNDsKQEAgLTI2MSw3ICsyNjgsNyBAQAogCQlORF9ERUZBVUxUUFJJTlQoYnAsIGxlbmd0aCk7CiAJcmV0dXJuOwogCi1tYWxmb3JtZWQ6CitpbnZhbGlkOgogCU5EX1BSSU5UKChuZG8sICIgTWFsZm9ybWVkIChzbWFsbCkgIikpOwogCS8qIFhYWCAtIHByaW50IHRoZSByZW1haW5pbmcgZGF0YSBhcyBoZXg/ICovCiAJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvcHJpbnQtZ3JlLmMgYi9wcmludC1ncmUuYwppbmRleCA0ZDc3MDVmLi41MDU3NTJhIDEwMDY0NAotLS0gYS9wcmludC1ncmUuYworKysgYi9wcmludC1ncmUuYwpAQCAtMzEsMjEgKzMxLDIzIEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCisvKiBcc3VtbWFyeTogR2VuZXJpYyBSb3V0aW5nIEVuY2Fwc3VsYXRpb24gKEdSRSkgcHJpbnRlciAqLworCiAvKgotICogdGNwZHVtcCBmaWx0ZXIgZm9yIEdSRSAtIEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uCisgKiBuZXRkaXNzZWN0IHByaW50ZXIgZm9yIEdSRSAtIEdlbmVyaWMgUm91dGluZyBFbmNhcHN1bGF0aW9uCiAgKiBSRkMxNzAxIChHUkUpLCBSRkMxNzAyIChHUkUgSVB2NCksIGFuZCBSRkMyNjM3IChFbmhhbmNlZCBHUkUpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKKyNpbmNsdWRlICJhZGRydG9zdHIuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCiAKQEAgLTc4LDE5ICs4MCwxOCBAQAogCiBzdGF0aWMgdm9pZCBncmVfcHJpbnRfMChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKIHN0YXRpYyB2b2lkIGdyZV9wcmludF8xKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotc3RhdGljIHZvaWQgZ3JlX3NyZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgdWludDE2X3QsIHVpbnQ4X3QsIHVpbnQ4X3QsIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7Ci1zdGF0aWMgdm9pZCBncmVfc3JlX2lwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1aW50OF90LCB1aW50OF90LCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOwotc3RhdGljIHZvaWQgZ3JlX3NyZV9hc25fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHVpbnQ4X3QsIHVpbnQ4X3QsIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CitzdGF0aWMgaW50IGdyZV9zcmVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHVpbnQxNl90LCB1aW50OF90LCB1aW50OF90LCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworc3RhdGljIGludCBncmVfc3JlX2lwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1aW50OF90LCB1aW50OF90LCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworc3RhdGljIGludCBncmVfc3JlX2Fzbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgdWludDhfdCwgdWludDhfdCwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKIAogdm9pZAogZ3JlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgpCiB7CiAJdV9pbnQgbGVuID0gbGVuZ3RoLCB2ZXJzOwogCi0JaWYgKGxlbiA8IDIpIHsKLQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwotCQlyZXR1cm47Ci0JfQorCU5EX1RDSEVDSzIoKmJwLCAyKTsKKwlpZiAobGVuIDwgMikKKwkJZ290byB0cnVuYzsKIAl2ZXJzID0gRVhUUkFDVF8xNkJJVFMoYnApICYgR1JFX1ZFUlNfTUFTSzsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkdSRXYldSIsdmVycykpOwogCkBAIC0xMDUsNiArMTA2LDExIEBACiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIEVSUk9SOiB1bmtub3duLXZlcnNpb24iKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICByZXR1cm47CisKK3RydW5jOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKKwlyZXR1cm47CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjEsNiArMTI3LDcgQEAKIAlsZW4gLT0gMjsKIAlicCArPSAyOwogCisJTkRfVENIRUNLMigqYnAsIDIpOwogCWlmIChsZW4gPCAyKQogCQlnb3RvIHRydW5jOwogCXByb3QgPSBFWFRSQUNUXzE2QklUUyhicCk7CkBAIC0xMjgsNiArMTM1LDcgQEAKIAlicCArPSAyOwogCiAJaWYgKChmbGFncyAmIEdSRV9DUCkgfCAoZmxhZ3MgJiBHUkVfUlApKSB7CisJCU5EX1RDSEVDSzIoKmJwLCAyKTsKIAkJaWYgKGxlbiA8IDIpCiAJCQlnb3RvIHRydW5jOwogCQlpZiAobmRvLT5uZG9fdmZsYWcpCkBAIC0xMzUsNiArMTQzLDcgQEAKIAkJYnAgKz0gMjsKIAkJbGVuIC09IDI7CiAKKwkJTkRfVENIRUNLMigqYnAsIDIpOwogCQlpZiAobGVuIDwgMikKIAkJCWdvdG8gdHJ1bmM7CiAJCU5EX1BSSU5UKChuZG8sICIsIG9mZiAweCV4IiwgRVhUUkFDVF8xNkJJVFMoYnApKSk7CkBAIC0xNDMsNiArMTUyLDcgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBHUkVfS1ApIHsKKwkJTkRfVENIRUNLMigqYnAsIDQpOwogCQlpZiAobGVuIDwgNCkKIAkJCWdvdG8gdHJ1bmM7CiAJCU5EX1BSSU5UKChuZG8sICIsIGtleT0weCV4IiwgRVhUUkFDVF8zMkJJVFMoYnApKSk7CkBAIC0xNTEsNiArMTYxLDcgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBHUkVfU1ApIHsKKwkJTkRfVENIRUNLMigqYnAsIDQpOwogCQlpZiAobGVuIDwgNCkKIAkJCWdvdG8gdHJ1bmM7CiAJCU5EX1BSSU5UKChuZG8sICIsIHNlcSAldSIsIEVYVFJBQ1RfMzJCSVRTKGJwKSkpOwpAQCAtMTY0LDYgKzE3NSw3IEBACiAJCQl1aW50OF90IHNyZW9mZjsKIAkJCXVpbnQ4X3Qgc3JlbGVuOwogCisJCQlORF9UQ0hFQ0syKCpicCwgNCk7CiAJCQlpZiAobGVuIDwgNCkKIAkJCQlnb3RvIHRydW5jOwogCQkJYWYgPSBFWFRSQUNUXzE2QklUUyhicCk7CkBAIC0xNzUsNyArMTg3LDggQEAKIAkJCWlmIChhZiA9PSAwICYmIHNyZWxlbiA9PSAwKQogCQkJCWJyZWFrOwogCi0JCQlncmVfc3JlX3ByaW50KG5kbywgYWYsIHNyZW9mZiwgc3JlbGVuLCBicCwgbGVuKTsKKwkJCWlmICghZ3JlX3NyZV9wcmludChuZG8sIGFmLCBzcmVvZmYsIHNyZWxlbiwgYnAsIGxlbikpCisJCQkJZ290byB0cnVuYzsKIAogCQkJaWYgKGxlbiA8IHNyZWxlbikKIAkJCQlnb3RvIHRydW5jOwpAQCAtMjEzLDEwICsyMjYsMTAgQEAKIAkJYXRhbGtfcHJpbnQobmRvLCBicCwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSBFVEhFUlRZUEVfR1JFX0lTTzoKLQkJaXNvY2xuc19wcmludChuZG8sIGJwLCBsZW4sIGxlbik7CisJCWlzb2NsbnNfcHJpbnQobmRvLCBicCwgbGVuLCBuZG8tPm5kb19zbmFwZW5kIC0gYnApOwogCQlicmVhazsKIAljYXNlIEVUSEVSVFlQRV9URUI6Ci0JCWV0aGVyX3ByaW50KG5kbywgYnAsIGxlbiwgbGVuLCBOVUxMLCBOVUxMKTsKKwkJZXRoZXJfcHJpbnQobmRvLCBicCwgbGVuLCBuZG8tPm5kb19zbmFwZW5kIC0gYnAsIE5VTEwsIE5VTEwpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlORF9QUklOVCgobmRvLCAiZ3JlLXByb3RvLTB4JXgiLCBwcm90KSk7CkBAIC0yNDEsNiArMjU0LDcgQEAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIEZsYWdzIFslc10iLAogICAgICAgICAgICAgICAgICAgIGJpdHRvazJzdHIoZ3JlX2ZsYWdfdmFsdWVzLCJub25lIixmbGFncykpKTsKIAorCU5EX1RDSEVDSzIoKmJwLCAyKTsKIAlpZiAobGVuIDwgMikKIAkJZ290byB0cnVuYzsKIAlwcm90ID0gRVhUUkFDVF8xNkJJVFMoYnApOwpAQCAtMjUxLDYgKzI2NSw3IEBACiAJaWYgKGZsYWdzICYgR1JFX0tQKSB7CiAJCXVpbnQzMl90IGs7CiAKKwkJTkRfVENIRUNLMigqYnAsIDQpOwogCQlpZiAobGVuIDwgNCkKIAkJCWdvdG8gdHJ1bmM7CiAJCWsgPSBFWFRSQUNUXzMyQklUUyhicCk7CkBAIC0yNjAsNiArMjc1LDcgQEAKIAl9CiAKIAlpZiAoZmxhZ3MgJiBHUkVfU1ApIHsKKwkJTkRfVENIRUNLMigqYnAsIDQpOwogCQlpZiAobGVuIDwgNCkKIAkJCWdvdG8gdHJ1bmM7CiAJCU5EX1BSSU5UKChuZG8sICIsIHNlcSAldSIsIEVYVFJBQ1RfMzJCSVRTKGJwKSkpOwpAQCAtMjY4LDYgKzI4NCw3IEBACiAJfQogCiAJaWYgKGZsYWdzICYgR1JFX0FQKSB7CisJCU5EX1RDSEVDSzIoKmJwLCA0KTsKIAkJaWYgKGxlbiA8IDQpCiAJCQlnb3RvIHRydW5jOwogCQlORF9QUklOVCgobmRvLCAiLCBhY2sgJXUiLCBFWFRSQUNUXzMyQklUUyhicCkpKTsKQEAgLTMwNyw2MiArMzI0LDY4IEBACiAJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogZ3JlX3NyZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdWludDE2X3QgYWYsIHVpbnQ4X3Qgc3Jlb2ZmLAogICAgIHVpbnQ4X3Qgc3JlbGVuLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW4pCiB7CisJaW50IHJldDsKKwogCXN3aXRjaCAoYWYpIHsKIAljYXNlIEdSRVNSRV9JUDoKIAkJTkRfUFJJTlQoKG5kbywgIiwgKHJ0YWY9aXAiKSk7Ci0JCWdyZV9zcmVfaXBfcHJpbnQobmRvLCBzcmVvZmYsIHNyZWxlbiwgYnAsIGxlbik7Ci0JCU5EX1BSSU5UKChuZG8sICIpICIpKTsKKwkJcmV0ID0gZ3JlX3NyZV9pcF9wcmludChuZG8sIHNyZW9mZiwgc3JlbGVuLCBicCwgbGVuKTsKKwkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJCWJyZWFrOwogCWNhc2UgR1JFU1JFX0FTTjoKIAkJTkRfUFJJTlQoKG5kbywgIiwgKHJ0YWY9YXNuIikpOwotCQlncmVfc3JlX2Fzbl9wcmludChuZG8sIHNyZW9mZiwgc3JlbGVuLCBicCwgbGVuKTsKLQkJTkRfUFJJTlQoKG5kbywgIikgIikpOworCQlyZXQgPSBncmVfc3JlX2Fzbl9wcmludChuZG8sIHNyZW9mZiwgc3JlbGVuLCBicCwgbGVuKTsKKwkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCU5EX1BSSU5UKChuZG8sICIsIChydGFmPTB4JXgpICIsIGFmKSk7CisJCU5EX1BSSU5UKChuZG8sICIsIChydGFmPTB4JXgpIiwgYWYpKTsKKwkJcmV0ID0gMTsKIAl9CisJcmV0dXJuIChyZXQpOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogZ3JlX3NyZV9pcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdWludDhfdCBzcmVvZmYsIHVpbnQ4X3Qgc3JlbGVuLAogICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW4pCiB7Ci0Jc3RydWN0IGluX2FkZHIgYTsKIAljb25zdCB1X2NoYXIgKnVwID0gYnA7CisJY2hhciBidWZbSU5FVF9BRERSU1RSTEVOXTsKIAogCWlmIChzcmVvZmYgJiAzKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZG9mZnNldD0ldSIsIHNyZW9mZikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCWlmIChzcmVsZW4gJiAzKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZGxlbmd0aD0ldSIsIHNyZWxlbikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCWlmIChzcmVvZmYgPj0gc3JlbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZG9mZi9sZW49JXUvJXUiLCBzcmVvZmYsIHNyZWxlbikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCi0JZm9yICg7OykgewotCQlpZiAobGVuIDwgNCB8fCBzcmVsZW4gPT0gMCkKLQkJCXJldHVybjsKKwl3aGlsZSAoc3JlbGVuICE9IDApIHsKKwkJaWYgKCFORF9UVEVTVDIoKmJwLCA0KSkKKwkJCXJldHVybiAoMCk7CisJCWlmIChsZW4gPCA0KQorCQkJcmV0dXJuICgwKTsKIAotCQltZW1jcHkoJmEsIGJwLCBzaXplb2YoYSkpOworCQlhZGRydG9zdHIoYnAsIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlORF9QUklOVCgobmRvLCAiICVzJXMiLAotCQkgICAgKChicCAtIHVwKSA9PSBzcmVvZmYpID8gIioiIDogIiIsCi0JCSAgICBpbmV0X250b2EoYSkpKTsKKwkJICAgICgoYnAgLSB1cCkgPT0gc3Jlb2ZmKSA/ICIqIiA6ICIiLCBidWYpKTsKIAogCQlicCArPSA0OwogCQlsZW4gLT0gNDsKIAkJc3JlbGVuIC09IDQ7CiAJfQorCXJldHVybiAoMSk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgaW50CiBncmVfc3JlX2Fzbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdWludDhfdCBzcmVvZmYsIHVpbnQ4X3Qgc3JlbGVuLAogICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuKQogewpAQCAtMzcwLDIwICszOTMsMjIgQEAKIAogCWlmIChzcmVvZmYgJiAxKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZG9mZnNldD0ldSIsIHNyZW9mZikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCWlmIChzcmVsZW4gJiAxKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZGxlbmd0aD0ldSIsIHNyZWxlbikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCWlmIChzcmVvZmYgPj0gc3JlbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sICIsIGJhZG9mZi9sZW49JXUvJXUiLCBzcmVvZmYsIHNyZWxlbikpOwotCQlyZXR1cm47CisJCXJldHVybiAoMSk7CiAJfQogCi0JZm9yICg7OykgewotCQlpZiAobGVuIDwgMiB8fCBzcmVsZW4gPT0gMCkKLQkJCXJldHVybjsKKwl3aGlsZSAoc3JlbGVuICE9IDApIHsKKwkJaWYgKCFORF9UVEVTVDIoKmJwLCAyKSkKKwkJCXJldHVybiAoMCk7CisJCWlmIChsZW4gPCAyKQorCQkJcmV0dXJuICgwKTsKIAogCQlORF9QUklOVCgobmRvLCAiICVzJXgiLAogCQkgICAgKChicCAtIHVwKSA9PSBzcmVvZmYpID8gIioiIDogIiIsCkBAIC0zOTMsNCArNDE4LDUgQEAKIAkJbGVuIC09IDI7CiAJCXNyZWxlbiAtPSAyOwogCX0KKwlyZXR1cm4gKDEpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtaG5jcC5jIGIvcHJpbnQtaG5jcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg3ZWU4YmIKLS0tIC9kZXYvbnVsbAorKysgYi9wcmludC1obmNwLmMKQEAgLTAsMCArMSw4NTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTYgQW50b25pbiBEw6ljaW1vLCBKZWFuLVJhcGhhw6tsIEdhZ2xpb25lCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBwcm9qZWN0IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycworICogICAgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlCisgKiAgICB3aXRob3V0IHNwZWNpZmljIHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBQUk9KRUNUIEFORCBDT05UUklCVVRPUlMgYGBBUyBJUycnIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRQorICogQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgUFJPSkVDVCBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFCisgKiBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTAorICogREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMKKyAqIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKQorICogSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QKKyAqIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkKKyAqIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YKKyAqIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFxzdW1tYXJ5OiBIb21lIE5ldHdvcmtpbmcgQ29udHJvbCBQcm90b2NvbCAoSE5DUCkgcHJpbnRlciAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgorCisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKKworc3RhdGljIHZvaWQKK2huY3BfcHJpbnRfcmVjKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAorICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuZ3RoLCBpbnQgaW5kZW50KTsKKwordm9pZAoraG5jcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbGVuZ3RoKQoreworICAgIE5EX1BSSU5UKChuZG8sICJobmNwICglZCkiLCBsZW5ndGgpKTsKKyAgICBobmNwX3ByaW50X3JlYyhuZG8sIGNwLCBsZW5ndGgsIDEpOworfQorCisvKiBSRkM3Nzg3ICovCisjZGVmaW5lIEROQ1BfUkVRVUVTVF9ORVRXT1JLX1NUQVRFICAxCisjZGVmaW5lIEROQ1BfUkVRVUVTVF9OT0RFX1NUQVRFICAgICAyCisjZGVmaW5lIEROQ1BfTk9ERV9FTkRQT0lOVCAgICAgICAgICAzCisjZGVmaW5lIEROQ1BfTkVUV09SS19TVEFURSAgICAgICAgICA0CisjZGVmaW5lIEROQ1BfTk9ERV9TVEFURSAgICAgICAgICAgICA1CisjZGVmaW5lIEROQ1BfUEVFUiAgICAgICAgICAgICAgICAgICA4CisjZGVmaW5lIEROQ1BfS0VFUF9BTElWRV9JTlRFUlZBTCAgICA5CisjZGVmaW5lIEROQ1BfVFJVU1RfVkVSRElDVCAgICAgICAgIDEwCisKKy8qIFJGQzc3ODggKi8KKyNkZWZpbmUgSE5DUF9ITkNQX1ZFUlNJT04gICAgICAgICAgMzIKKyNkZWZpbmUgSE5DUF9FWFRFUk5BTF9DT05ORUNUSU9OICAgMzMKKyNkZWZpbmUgSE5DUF9ERUxFR0FURURfUFJFRklYICAgICAgMzQKKyNkZWZpbmUgSE5DUF9QUkVGSVhfUE9MSUNZICAgICAgICAgNDMKKyNkZWZpbmUgSE5DUF9ESENQVjRfREFUQSAgICAgICAgICAgMzcKKyNkZWZpbmUgSE5DUF9ESENQVjZfREFUQSAgICAgICAgICAgMzgKKyNkZWZpbmUgSE5DUF9BU1NJR05FRF9QUkVGSVggICAgICAgMzUKKyNkZWZpbmUgSE5DUF9OT0RFX0FERFJFU1MgICAgICAgICAgMzYKKyNkZWZpbmUgSE5DUF9ETlNfREVMRUdBVEVEX1pPTkUgICAgMzkKKyNkZWZpbmUgSE5DUF9ET01BSU5fTkFNRSAgICAgICAgICAgNDAKKyNkZWZpbmUgSE5DUF9OT0RFX05BTUUgICAgICAgICAgICAgNDEKKyNkZWZpbmUgSE5DUF9NQU5BR0VEX1BTSyAgICAgICAgICAgNDIKKworLyogU2VlIHR5cGVfbWFzayBpbiBobmNwX3ByaW50X3JlYyBiZWxvdyAqLworI2RlZmluZSBSQU5HRV9ETkNQX1JFU0VSVkVEICAgIDB4MTAwMDAKKyNkZWZpbmUgUkFOR0VfSE5DUF9VTkFTU0lHTkVEICAweDEwMDAxCisjZGVmaW5lIFJBTkdFX0ROQ1BfUFJJVkFURV9VU0UgMHgxMDAwMgorI2RlZmluZSBSQU5HRV9ETkNQX0ZVVFVSRV9VU0UgIDB4MTAwMDMKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgdHlwZV92YWx1ZXNbXSA9IHsKKyAgICB7IEROQ1BfUkVRVUVTVF9ORVRXT1JLX1NUQVRFLCAiUmVxdWVzdCBuZXR3b3JrIHN0YXRlIiB9LAorICAgIHsgRE5DUF9SRVFVRVNUX05PREVfU1RBVEUsICAgICJSZXF1ZXN0IG5vZGUgc3RhdGUiIH0sCisgICAgeyBETkNQX05PREVfRU5EUE9JTlQsICAgICAgICAgIk5vZGUgZW5kcG9pbnQiIH0sCisgICAgeyBETkNQX05FVFdPUktfU1RBVEUsICAgICAgICAgIk5ldHdvcmsgc3RhdGUiIH0sCisgICAgeyBETkNQX05PREVfU1RBVEUsICAgICAgICAgICAgIk5vZGUgc3RhdGUiIH0sCisgICAgeyBETkNQX1BFRVIsICAgICAgICAgICAgICAgICAgIlBlZXIiIH0sCisgICAgeyBETkNQX0tFRVBfQUxJVkVfSU5URVJWQUwsICAgIktlZXAtYWxpdmUgaW50ZXJ2YWwiIH0sCisgICAgeyBETkNQX1RSVVNUX1ZFUkRJQ1QsICAgICAgICAgIlRydXN0LVZlcmRpY3QiIH0sCisKKyAgICB7IEhOQ1BfSE5DUF9WRVJTSU9OLCAgICAgICAgIkhOQ1AtVmVyc2lvbiIgfSwKKyAgICB7IEhOQ1BfRVhURVJOQUxfQ09OTkVDVElPTiwgIkV4dGVybmFsLUNvbm5lY3Rpb24iIH0sCisgICAgeyBITkNQX0RFTEVHQVRFRF9QUkVGSVgsICAgICJEZWxlZ2F0ZWQtUHJlZml4IiB9LAorICAgIHsgSE5DUF9QUkVGSVhfUE9MSUNZLCAgICAgICAiUHJlZml4LVBvbGljeSIgfSwKKyAgICB7IEhOQ1BfREhDUFY0X0RBVEEsICAgICAgICAgIkRIQ1B2NC1EYXRhIiB9LAorICAgIHsgSE5DUF9ESENQVjZfREFUQSwgICAgICAgICAiREhDUHY2LURhdGEiIH0sCisgICAgeyBITkNQX0FTU0lHTkVEX1BSRUZJWCwgICAgICJBc3NpZ25lZC1QcmVmaXgiIH0sCisgICAgeyBITkNQX05PREVfQUREUkVTUywgICAgICAgICJOb2RlLUFkZHJlc3MiIH0sCisgICAgeyBITkNQX0ROU19ERUxFR0FURURfWk9ORSwgICJETlMtRGVsZWdhdGVkLVpvbmUiIH0sCisgICAgeyBITkNQX0RPTUFJTl9OQU1FLCAgICAgICAgICJEb21haW4tTmFtZSIgfSwKKyAgICB7IEhOQ1BfTk9ERV9OQU1FLCAgICAgICAgICAgIk5vZGUtTmFtZSIgfSwKKyAgICB7IEhOQ1BfTUFOQUdFRF9QU0ssICAgICAgICAgIk1hbmFnZWQtUFNLIiB9LAorCisgICAgeyBSQU5HRV9ETkNQX1JFU0VSVkVELCAgICAiUmVzZXJ2ZWQiIH0sCisgICAgeyBSQU5HRV9ITkNQX1VOQVNTSUdORUQsICAiVW5hc3NpZ25lZCIgfSwKKyAgICB7IFJBTkdFX0ROQ1BfUFJJVkFURV9VU0UsICJQcml2YXRlIHVzZSIgfSwKKyAgICB7IFJBTkdFX0ROQ1BfRlVUVVJFX1VTRSwgICJGdXR1cmUgdXNlIiB9LAorCisgICAgeyAwLCBOVUxMfQorfTsKKworI2RlZmluZSBESDRPUFRfRE5TX1NFUlZFUlMgNiAgICAgLyogUkZDMjEzMiAqLworI2RlZmluZSBESDRPUFRfTlRQX1NFUlZFUlMgNDIgICAgLyogUkZDMjEzMiAqLworI2RlZmluZSBESDRPUFRfRE9NQUlOX1NFQVJDSCAxMTkgLyogUkZDMzM5NyAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBkaDRvcHRfc3RyW10gPSB7CisgICAgeyBESDRPUFRfRE5TX1NFUlZFUlMsICJETlMtc2VydmVyIiB9LAorICAgIHsgREg0T1BUX05UUF9TRVJWRVJTLCAiTlRQLXNlcnZlciJ9LAorICAgIHsgREg0T1BUX0RPTUFJTl9TRUFSQ0gsICJETlMtc2VhcmNoIiB9LAorICAgIHsgMCwgTlVMTCB9Cit9OworCisjZGVmaW5lIERINk9QVF9ETlNfU0VSVkVSUyAyMyAgIC8qIFJGQzM2NDYgKi8KKyNkZWZpbmUgREg2T1BUX0RPTUFJTl9MSVNUIDI0ICAgLyogUkZDMzY0NiAqLworI2RlZmluZSBESDZPUFRfU05UUF9TRVJWRVJTIDMxICAvKiBSRkM0MDc1ICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGRoNm9wdF9zdHJbXSA9IHsKKyAgICB7IERINk9QVF9ETlNfU0VSVkVSUywgICJETlMtc2VydmVyIiB9LAorICAgIHsgREg2T1BUX0RPTUFJTl9MSVNULCAgIkROUy1zZWFyY2gtbGlzdCIgfSwKKyAgICB7IERINk9QVF9TTlRQX1NFUlZFUlMsICJTTlRQLXNlcnZlcnMiIH0sCisgICAgeyAwLCBOVUxMIH0KK307CisKKy8qCisgKiBGb3IgSVB2NC1tYXBwZWQgSVB2NiBhZGRyZXNzZXMsIGxlbmd0aCBvZiB0aGUgcHJlZml4IHRoYXQgcHJlY2VkZXMKKyAqIHRoZSA0IGJ5dGVzIG9mIElQdjQgYWRkcmVzcyBhdCB0aGUgZW5kIG9mIHRoZSBJUHY2IGFkZHJlc3MuCisgKi8KKyNkZWZpbmUgSVBWNF9NQVBQRURfSEVBRElOR19MRU4gICAgMTIKKworLyoKKyAqIElzIGFuIElQdjYgYWRkcmVzcyBhbiBJUHY0LW1hcHBlZCBhZGRyZXNzPworICovCitzdGF0aWMgaW5saW5lIGludAoraXNfaXB2NF9tYXBwZWRfYWRkcmVzcyhjb25zdCB1X2NoYXIgKmFkZHIpCit7CisgICAgLyogVGhlIHZhbHVlIG9mIHRoZSBwcmVmaXggKi8KKyAgICBzdGF0aWMgY29uc3QgdV9jaGFyIGlwdjRfbWFwcGVkX2hlYWRpbmdbSVBWNF9NQVBQRURfSEVBRElOR19MRU5dID0KKyAgICAgICAgeyAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweEZGLCAweEZGIH07CisKKyAgICByZXR1cm4gbWVtY21wKGFkZHIsIGlwdjRfbWFwcGVkX2hlYWRpbmcsIElQVjRfTUFQUEVEX0hFQURJTkdfTEVOKSA9PSAwOworfQorCitzdGF0aWMgY29uc3QgY2hhciAqCitmb3JtYXRfbmlkKGNvbnN0IHVfY2hhciAqZGF0YSkKK3sKKyAgICBzdGF0aWMgY2hhciBidWZbNF1bMTErNV07CisgICAgc3RhdGljIGludCBpID0gMDsKKyAgICBpID0gKGkgKyAxKSAlIDQ7CisgICAgc25wcmludGYoYnVmW2ldLCAxNiwgIiUwMng6JTAyeDolMDJ4OiUwMngiLAorICAgICAgICAgICAgIGRhdGFbMF0sIGRhdGFbMV0sIGRhdGFbMl0sIGRhdGFbM10pOworICAgIHJldHVybiBidWZbaV07Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICoKK2Zvcm1hdF8yNTYoY29uc3QgdV9jaGFyICpkYXRhKQoreworICAgIHN0YXRpYyBjaGFyIGJ1Zls0XVs2NCs1XTsKKyAgICBzdGF0aWMgaW50IGkgPSAwOworICAgIGkgPSAoaSArIDEpICUgNDsKKyAgICBzbnByaW50ZihidWZbaV0sIDI4LCAiJTAxNiIgUFJJeDY0ICIlMDE2IiBQUkl4NjQgIiUwMTYiIFBSSXg2NCAiJTAxNiIgUFJJeDY0LAorICAgICAgICAgRVhUUkFDVF82NEJJVFMoZGF0YSksCisgICAgICAgICBFWFRSQUNUXzY0QklUUyhkYXRhICsgOCksCisgICAgICAgICBFWFRSQUNUXzY0QklUUyhkYXRhICsgMTYpLAorICAgICAgICAgRVhUUkFDVF82NEJJVFMoZGF0YSArIDI0KQorICAgICk7CisgICAgcmV0dXJuIGJ1ZltpXTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZm9ybWF0X2ludGVydmFsKGNvbnN0IHVpbnQzMl90IG4pCit7CisgICAgc3RhdGljIGNoYXIgYnVmWzRdW3NpemVvZigiMDAwMDAwMC4wMDBzIildOworICAgIHN0YXRpYyBpbnQgaSA9IDA7CisgICAgaSA9IChpICsgMSkgJSA0OworICAgIHNucHJpbnRmKGJ1ZltpXSwgc2l6ZW9mKGJ1ZltpXSksICIldS4lMDN1cyIsIG4gLyAxMDAwLCBuICUgMTAwMCk7CisgICAgcmV0dXJuIGJ1ZltpXTsKK30KKworc3RhdGljIGNvbnN0IGNoYXIgKgorZm9ybWF0X2lwNmFkZHIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqY3ApCit7CisgICAgaWYgKGlzX2lwdjRfbWFwcGVkX2FkZHJlc3MoY3ApKQorICAgICAgICByZXR1cm4gaXBhZGRyX3N0cmluZyhuZG8sIGNwICsgSVBWNF9NQVBQRURfSEVBRElOR19MRU4pOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIGlwNmFkZHJfc3RyaW5nKG5kbywgY3ApOworfQorCitzdGF0aWMgaW50CitwcmludF9wcmVmaXgobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqcHJlZml4LCB1X2ludCBtYXhfbGVuZ3RoKQoreworICAgIGludCBwbGVuYnl0ZXM7CisgICAgY2hhciBidWZbc2l6ZW9mKCJ4eHh4Onh4eHg6eHh4eDp4eHh4Onh4eHg6eHh4eDp4eHh4Onh4eHg6Oi8xMjgiKV07CisKKyAgICBpZiAocHJlZml4WzBdID49IDk2ICYmIG1heF9sZW5ndGggPj0gSVBWNF9NQVBQRURfSEVBRElOR19MRU4gKyAxICYmCisgICAgICAgIGlzX2lwdjRfbWFwcGVkX2FkZHJlc3MoJnByZWZpeFsxXSkpIHsKKyAgICAgICAgc3RydWN0IGluX2FkZHIgYWRkcjsKKyAgICAgICAgdV9pbnQgcGxlbjsKKworICAgICAgICBwbGVuID0gcHJlZml4WzBdLTk2OworICAgICAgICBpZiAoMzIgPCBwbGVuKQorICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICBtYXhfbGVuZ3RoIC09IDE7CisKKyAgICAgICAgbWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworICAgICAgICBwbGVuYnl0ZXMgPSAocGxlbiArIDcpIC8gODsKKyAgICAgICAgaWYgKG1heF9sZW5ndGggPCAodV9pbnQpcGxlbmJ5dGVzICsgSVBWNF9NQVBQRURfSEVBRElOR19MRU4pCisgICAgICAgICAgICByZXR1cm4gLTM7CisgICAgICAgIG1lbWNweSgmYWRkciwgJnByZWZpeFsxICsgSVBWNF9NQVBQRURfSEVBRElOR19MRU5dLCBwbGVuYnl0ZXMpOworICAgICAgICBpZiAocGxlbiAlIDgpIHsKKwkJKCh1X2NoYXIgKikmYWRkcilbcGxlbmJ5dGVzIC0gMV0gJj0KKwkJCSgoMHhmZjAwID4+IChwbGVuICUgOCkpICYgMHhmZik7CisJfQorCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcy8lZCIsIGlwYWRkcl9zdHJpbmcobmRvLCAmYWRkciksIHBsZW4pOworICAgICAgICBwbGVuYnl0ZXMgKz0gMSArIElQVjRfTUFQUEVEX0hFQURJTkdfTEVOOworICAgIH0gZWxzZSB7CisgICAgICAgIHBsZW5ieXRlcyA9IGRlY29kZV9wcmVmaXg2KG5kbywgcHJlZml4LCBtYXhfbGVuZ3RoLCBidWYsIHNpemVvZihidWYpKTsKKyAgICB9CisKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCBidWYpKTsKKyAgICByZXR1cm4gcGxlbmJ5dGVzOworfQorCitzdGF0aWMgaW50CitwcmludF9kbnNfbGFiZWwobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpjcCwgdV9pbnQgbWF4X2xlbmd0aCwgaW50IHByaW50KQoreworICAgIHVfaW50IGxlbmd0aCA9IDA7CisgICAgd2hpbGUgKGxlbmd0aCA8IG1heF9sZW5ndGgpIHsKKyAgICAgICAgdV9pbnQgbGFiX2xlbmd0aCA9IGNwW2xlbmd0aCsrXTsKKyAgICAgICAgaWYgKGxhYl9sZW5ndGggPT0gMCkKKyAgICAgICAgICAgIHJldHVybiAoaW50KWxlbmd0aDsKKyAgICAgICAgaWYgKGxlbmd0aCA+IDEgJiYgcHJpbnQpCisgICAgICAgICAgICBzYWZlcHV0Y2hhcihuZG8sICcuJyk7CisgICAgICAgIGlmIChsZW5ndGgrbGFiX2xlbmd0aCA+IG1heF9sZW5ndGgpIHsKKyAgICAgICAgICAgIGlmIChwcmludCkKKyAgICAgICAgICAgICAgICBzYWZlcHV0cyhuZG8sIGNwK2xlbmd0aCwgbWF4X2xlbmd0aC1sZW5ndGgpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgaWYgKHByaW50KQorICAgICAgICAgICAgc2FmZXB1dHMobmRvLCBjcCtsZW5ndGgsIGxhYl9sZW5ndGgpOworICAgICAgICBsZW5ndGggKz0gbGFiX2xlbmd0aDsKKyAgICB9CisgICAgaWYgKHByaW50KQorICAgICAgICBORF9QUklOVCgobmRvLCAiW3xETlNdIikpOworICAgIHJldHVybiAtMTsKK30KKworc3RhdGljIGludAorZGhjcHY0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAorICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbmd0aCwgaW50IGluZGVudCkKK3sKKyAgICB1X2ludCBpLCB0OworICAgIGNvbnN0IHVfY2hhciAqdGx2LCAqdmFsdWU7CisgICAgdWludDhfdCB0eXBlLCBvcHRsZW47CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICB0bHYgPSBjcCArIGk7CisgICAgICAgIHR5cGUgPSAodWludDhfdCl0bHZbMF07CisgICAgICAgIG9wdGxlbiA9ICh1aW50OF90KXRsdlsxXTsKKyAgICAgICAgdmFsdWUgPSB0bHYgKyAyOworCisgICAgICAgIE5EX1BSSU5UKChuZG8sICJcbiIpKTsKKyAgICAgICAgZm9yICh0ID0gaW5kZW50OyB0ID4gMDsgdC0tKQorICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlx0IikpOworCisgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRvazJzdHIoZGg0b3B0X3N0ciwgIlVua25vd24iLCB0eXBlKSkpOworICAgICAgICBORF9QUklOVCgobmRvLCIgKCV1KSIsIG9wdGxlbiArIDIgKSk7CisKKyAgICAgICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgIGNhc2UgREg0T1BUX0ROU19TRVJWRVJTOgorICAgICAgICBjYXNlIERINE9QVF9OVFBfU0VSVkVSUzogeworICAgICAgICAgICAgaWYgKG9wdGxlbiA8IDQgfHwgb3B0bGVuICUgNCAhPSAwKSB7CisgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZm9yICh0ID0gMDsgdCA8IG9wdGxlbjsgdCArPSA0KQorICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgdmFsdWUgKyB0KSkpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBESDRPUFRfRE9NQUlOX1NFQVJDSDogeworICAgICAgICAgICAgY29uc3QgdV9jaGFyICp0cCA9IHZhbHVlOworICAgICAgICAgICAgd2hpbGUgKHRwIDwgdmFsdWUgKyBvcHRsZW4pIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICIpKTsKKyAgICAgICAgICAgICAgICBpZiAoKHRwID0gbnNfbnByaW50KG5kbywgdHAsIHZhbHVlICsgb3B0bGVuKSkgPT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGkgKz0gMiArIG9wdGxlbjsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK2RoY3B2Nl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW5ndGgsIGludCBpbmRlbnQpCit7CisgICAgdV9pbnQgaSwgdDsKKyAgICBjb25zdCB1X2NoYXIgKnRsdiwgKnZhbHVlOworICAgIHVpbnQxNl90IHR5cGUsIG9wdGxlbjsKKworICAgIGkgPSAwOworICAgIHdoaWxlIChpIDwgbGVuZ3RoKSB7CisgICAgICAgIHRsdiA9IGNwICsgaTsKKyAgICAgICAgdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKHRsdik7CisgICAgICAgIG9wdGxlbiA9IEVYVFJBQ1RfMTZCSVRTKHRsdiArIDIpOworICAgICAgICB2YWx1ZSA9IHRsdiArIDQ7CisKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuIikpOworICAgICAgICBmb3IgKHQgPSBpbmRlbnQ7IHQgPiAwOyB0LS0pCisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXHQiKSk7CisKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihkaDZvcHRfc3RyLCAiVW5rbm93biIsIHR5cGUpKSk7CisgICAgICAgIE5EX1BSSU5UKChuZG8sIiAoJXUpIiwgb3B0bGVuICsgNCApKTsKKworICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgREg2T1BUX0ROU19TRVJWRVJTOgorICAgICAgICAgICAgY2FzZSBESDZPUFRfU05UUF9TRVJWRVJTOiB7CisgICAgICAgICAgICAgICAgaWYgKG9wdGxlbiAlIDE2ICE9IDApIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBmb3IgKHQgPSAwOyB0IDwgb3B0bGVuOyB0ICs9IDE2KQorICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXA2YWRkcl9zdHJpbmcobmRvLCB2YWx1ZSArIHQpKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIERINk9QVF9ET01BSU5fTElTVDogeworICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqdHAgPSB2YWx1ZTsKKyAgICAgICAgICAgICAgICB3aGlsZSAodHAgPCB2YWx1ZSArIG9wdGxlbikgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICIpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCh0cCA9IG5zX25wcmludChuZG8sIHRwLCB2YWx1ZSArIG9wdGxlbikpID09IE5VTEwpCisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgaSArPSA0ICsgb3B0bGVuOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworLyogRGV0ZXJtaW5lIGluLWxpbmUgbW9kZSAqLworc3RhdGljIGludAoraXNfaW5fbGluZShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgaW50IGluZGVudCkKK3sKKyAgICByZXR1cm4gaW5kZW50IC0gMSA+PSBuZG8tPm5kb192ZmxhZyAmJiBuZG8tPm5kb192ZmxhZyA8IDM7Cit9CisKK3N0YXRpYyB2b2lkCitwcmludF90eXBlX2luX2xpbmUobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICAgICAgdWludDMyX3QgdHlwZSwgaW50IGNvdW50LCBpbnQgaW5kZW50LCBpbnQgKmZpcnN0X29uZSkKK3sKKyAgICBpZiAoY291bnQgPiAwKSB7CisgICAgICAgIGlmICgqZmlyc3Rfb25lKSB7CisgICAgICAgICAgICAqZmlyc3Rfb25lID0gMDsKKyAgICAgICAgICAgIGlmIChpbmRlbnQgPiAxKSB7CisgICAgICAgICAgICAgICAgdV9pbnQgdDsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG4iKSk7CisgICAgICAgICAgICAgICAgZm9yICh0ID0gaW5kZW50OyB0ID4gMDsgdC0tKQorICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXHQiKSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgIikpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgIikpOworICAgICAgICB9CisgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRvazJzdHIodHlwZV92YWx1ZXMsICJFYXN0ZXIgRWdnIiwgdHlwZSkpKTsKKyAgICAgICAgaWYgKGNvdW50ID4gMSkKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKHglZCkiLCBjb3VudCkpOworICAgIH0KK30KKwordm9pZAoraG5jcF9wcmludF9yZWMobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmNwLCB1X2ludCBsZW5ndGgsIGludCBpbmRlbnQpCit7CisgICAgY29uc3QgaW50IGluX2xpbmUgPSBpc19pbl9saW5lKG5kbywgaW5kZW50KTsKKyAgICBpbnQgZmlyc3Rfb25lID0gMTsKKworICAgIHVfaW50IGksIHQ7CisKKyAgICB1aW50MzJfdCBsYXN0X3R5cGVfbWFzayA9IDB4ZmZmZmZmZmZVOworICAgIGludCBsYXN0X3R5cGVfY291bnQgPSAtMTsKKworICAgIGNvbnN0IHVfY2hhciAqdGx2LCAqdmFsdWU7CisgICAgdWludDE2X3QgdHlwZSwgYm9keWxlbjsKKyAgICB1aW50MzJfdCB0eXBlX21hc2s7CisKKyAgICBpID0gMDsKKyAgICB3aGlsZSAoaSA8IGxlbmd0aCkgeworICAgICAgICB0bHYgPSBjcCArIGk7CisKKyAgICAgICAgaWYgKCFpbl9saW5lKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG4iKSk7CisgICAgICAgICAgICBmb3IgKHQgPSBpbmRlbnQ7IHQgPiAwOyB0LS0pCisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlx0IikpOworICAgICAgICB9CisKKyAgICAgICAgTkRfVENIRUNLMigqdGx2LCA0KTsKKyAgICAgICAgaWYgKGkgKyA0ID4gbGVuZ3RoKQorICAgICAgICAgICAgZ290byBpbnZhbGlkOworCisgICAgICAgIHR5cGUgPSBFWFRSQUNUXzE2QklUUyh0bHYpOworICAgICAgICBib2R5bGVuID0gRVhUUkFDVF8xNkJJVFModGx2ICsgMik7CisgICAgICAgIHZhbHVlID0gdGx2ICsgNDsKKyAgICAgICAgTkRfVENIRUNLMigqdmFsdWUsIGJvZHlsZW4pOworICAgICAgICBpZiAoaSArIGJvZHlsZW4gKyA0ID4gbGVuZ3RoKQorICAgICAgICAgICAgZ290byBpbnZhbGlkOworCisgICAgICAgIHR5cGVfbWFzayA9CisgICAgICAgICAgICAodHlwZSA9PSAwKSAgICAgICAgICAgICAgICAgICA/IFJBTkdFX0ROQ1BfUkVTRVJWRUQ6CisgICAgICAgICAgICAoNDQgPD0gdHlwZSAmJiB0eXBlIDw9IDUxMSkgICA/IFJBTkdFX0hOQ1BfVU5BU1NJR05FRDoKKyAgICAgICAgICAgICg3NjggPD0gdHlwZSAmJiB0eXBlIDw9IDEwMjMpID8gUkFOR0VfRE5DUF9QUklWQVRFX1VTRToKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkFOR0VfRE5DUF9GVVRVUkVfVVNFOworICAgICAgICBpZiAodHlwZSA9PSA2IHx8IHR5cGUgPT0gNykKKyAgICAgICAgICAgIHR5cGVfbWFzayA9IFJBTkdFX0ROQ1BfRlVUVVJFX1VTRTsKKworICAgICAgICAvKiBkZWZpbmVkIHR5cGVzICovCisgICAgICAgIHsKKyAgICAgICAgICAgIHQgPSAwOworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICB1X2ludCBrZXkgPSB0eXBlX3ZhbHVlc1t0KytdLnY7CisgICAgICAgICAgICAgICAgaWYgKGtleSA+IDB4ZmZmZikKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKGtleSA9PSB0eXBlKSB7CisgICAgICAgICAgICAgICAgICAgIHR5cGVfbWFzayA9IHR5cGU7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGlmIChpbl9saW5lKSB7CisgICAgICAgICAgICBpZiAobGFzdF90eXBlX21hc2sgPT0gdHlwZV9tYXNrKSB7CisgICAgICAgICAgICAgICAgbGFzdF90eXBlX2NvdW50Kys7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHByaW50X3R5cGVfaW5fbGluZShuZG8sIGxhc3RfdHlwZV9tYXNrLCBsYXN0X3R5cGVfY291bnQsIGluZGVudCwgJmZpcnN0X29uZSk7CisgICAgICAgICAgICAgICAgbGFzdF90eXBlX21hc2sgPSB0eXBlX21hc2s7CisgICAgICAgICAgICAgICAgbGFzdF90eXBlX2NvdW50ID0gMTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZ290byBza2lwX211bHRpbGluZTsKKyAgICAgICAgfQorCisgICAgICAgIE5EX1BSSU5UKChuZG8sIiVzIiwgdG9rMnN0cih0eXBlX3ZhbHVlcywgIkVhc3RlciBFZ2cgKDQyKSIsIHR5cGVfbWFzaykgKSk7CisgICAgICAgIGlmICh0eXBlX21hc2sgPiAweGZmZmYpCisgICAgICAgICAgICBORF9QUklOVCgobmRvLCI6IHR5cGU9JXUiLCB0eXBlICkpOworICAgICAgICBORF9QUklOVCgobmRvLCIgKCV1KSIsIGJvZHlsZW4gKyA0ICkpOworCisgICAgICAgIHN3aXRjaCAodHlwZV9tYXNrKSB7CisKKyAgICAgICAgY2FzZSBETkNQX1JFUVVFU1RfTkVUV09SS19TVEFURTogeworICAgICAgICAgICAgaWYgKGJvZHlsZW4gIT0gMCkKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEROQ1BfUkVRVUVTVF9OT0RFX1NUQVRFOiB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpub2RlX2lkZW50aWZpZXI7CisgICAgICAgICAgICBpZiAoYm9keWxlbiAhPSA0KSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIG5vZGVfaWRlbnRpZmllciA9IGZvcm1hdF9uaWQodmFsdWUpOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBOSUQ6ICVzIiwgbm9kZV9pZGVudGlmaWVyKSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRE5DUF9OT0RFX0VORFBPSU5UOiB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpub2RlX2lkZW50aWZpZXI7CisgICAgICAgICAgICB1aW50MzJfdCBlbmRwb2ludF9pZGVudGlmaWVyOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gIT0gOCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlX2lkZW50aWZpZXIgPSBmb3JtYXRfbmlkKHZhbHVlKTsKKyAgICAgICAgICAgIGVuZHBvaW50X2lkZW50aWZpZXIgPSBFWFRSQUNUXzMyQklUUyh2YWx1ZSArIDQpOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBOSUQ6ICVzIEVQSUQ6ICUwOHgiLAorICAgICAgICAgICAgICAgIG5vZGVfaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBlbmRwb2ludF9pZGVudGlmaWVyCisgICAgICAgICAgICApKTsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBETkNQX05FVFdPUktfU1RBVEU6IHsKKyAgICAgICAgICAgIHVpbnQ2NF90IGhhc2g7CisgICAgICAgICAgICBpZiAoYm9keWxlbiAhPSA4KSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGhhc2ggPSBFWFRSQUNUXzY0QklUUyh2YWx1ZSk7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGhhc2g6ICUwMTYiIFBSSXg2NCwgaGFzaCkpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEROQ1BfTk9ERV9TVEFURTogeworICAgICAgICAgICAgY29uc3QgY2hhciAqbm9kZV9pZGVudGlmaWVyLCAqaW50ZXJ2YWw7CisgICAgICAgICAgICB1aW50MzJfdCBzZXF1ZW5jZV9udW1iZXI7CisgICAgICAgICAgICB1aW50NjRfdCBoYXNoOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCAyMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBub2RlX2lkZW50aWZpZXIgPSBmb3JtYXRfbmlkKHZhbHVlKTsKKyAgICAgICAgICAgIHNlcXVlbmNlX251bWJlciA9IEVYVFJBQ1RfMzJCSVRTKHZhbHVlICsgNCk7CisgICAgICAgICAgICBpbnRlcnZhbCA9IGZvcm1hdF9pbnRlcnZhbChFWFRSQUNUXzMyQklUUyh2YWx1ZSArIDgpKTsKKyAgICAgICAgICAgIGhhc2ggPSBFWFRSQUNUXzY0QklUUyh2YWx1ZSArIDEyKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgTklEOiAlcyBzZXFubzogJXUgJXMgaGFzaDogJTAxNiIgUFJJeDY0LAorICAgICAgICAgICAgICAgIG5vZGVfaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBzZXF1ZW5jZV9udW1iZXIsCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwsCisgICAgICAgICAgICAgICAgaGFzaAorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBobmNwX3ByaW50X3JlYyhuZG8sIHZhbHVlKzIwLCBib2R5bGVuLTIwLCBpbmRlbnQrMSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgRE5DUF9QRUVSOiB7CisgICAgICAgICAgICBjb25zdCBjaGFyICpwZWVyX25vZGVfaWRlbnRpZmllcjsKKyAgICAgICAgICAgIHVpbnQzMl90IHBlZXJfZW5kcG9pbnRfaWRlbnRpZmllciwgZW5kcG9pbnRfaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGlmIChib2R5bGVuICE9IDEyKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHBlZXJfbm9kZV9pZGVudGlmaWVyID0gZm9ybWF0X25pZCh2YWx1ZSk7CisgICAgICAgICAgICBwZWVyX2VuZHBvaW50X2lkZW50aWZpZXIgPSBFWFRSQUNUXzMyQklUUyh2YWx1ZSArIDQpOworICAgICAgICAgICAgZW5kcG9pbnRfaWRlbnRpZmllciA9IEVYVFJBQ1RfMzJCSVRTKHZhbHVlICsgOCk7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIFBlZXItTklEOiAlcyBQZWVyLUVQSUQ6ICUwOHggTG9jYWwtRVBJRDogJTA4eCIsCisgICAgICAgICAgICAgICAgcGVlcl9ub2RlX2lkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgcGVlcl9lbmRwb2ludF9pZGVudGlmaWVyLAorICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkZW50aWZpZXIKKyAgICAgICAgICAgICkpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEROQ1BfS0VFUF9BTElWRV9JTlRFUlZBTDogeworICAgICAgICAgICAgdWludDMyX3QgZW5kcG9pbnRfaWRlbnRpZmllcjsKKyAgICAgICAgICAgIGNvbnN0IGNoYXIgKmludGVydmFsOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCA4KSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVuZHBvaW50X2lkZW50aWZpZXIgPSBFWFRSQUNUXzMyQklUUyh2YWx1ZSk7CisgICAgICAgICAgICBpbnRlcnZhbCA9IGZvcm1hdF9pbnRlcnZhbChFWFRSQUNUXzMyQklUUyh2YWx1ZSArIDQpKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgRVBJRDogJTA4eCBJbnRlcnZhbDogJXMiLAorICAgICAgICAgICAgICAgIGVuZHBvaW50X2lkZW50aWZpZXIsCisgICAgICAgICAgICAgICAgaW50ZXJ2YWwKKyAgICAgICAgICAgICkpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEROQ1BfVFJVU1RfVkVSRElDVDogeworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPD0gMzYpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBWZXJkaWN0OiAldSBGaW5nZXJwcmludDogJXMgQ29tbW9uIE5hbWU6ICIsCisgICAgICAgICAgICAgICAgKnZhbHVlLAorICAgICAgICAgICAgICAgIGZvcm1hdF8yNTYodmFsdWUgKyA0KSkpOworICAgICAgICAgICAgc2FmZXB1dHMobmRvLCB2YWx1ZSArIDM2LCBib2R5bGVuIC0gMzYpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfSE5DUF9WRVJTSU9OOiB7CisgICAgICAgICAgICB1aW50MTZfdCBjYXBhYmlsaXRpZXM7CisgICAgICAgICAgICB1aW50OF90IE0sIFAsIEgsIEw7CisgICAgICAgICAgICBpZiAoYm9keWxlbiA8IDUpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FwYWJpbGl0aWVzID0gRVhUUkFDVF8xNkJJVFModmFsdWUgKyAyKTsKKyAgICAgICAgICAgIE0gPSAodWludDhfdCkoKGNhcGFiaWxpdGllcyA+PiAxMikgJiAweGYpOworICAgICAgICAgICAgUCA9ICh1aW50OF90KSgoY2FwYWJpbGl0aWVzID4+IDgpICYgMHhmKTsKKyAgICAgICAgICAgIEggPSAodWludDhfdCkoKGNhcGFiaWxpdGllcyA+PiA0KSAmIDB4Zik7CisgICAgICAgICAgICBMID0gKHVpbnQ4X3QpKGNhcGFiaWxpdGllcyAmIDB4Zik7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIE06ICV1IFA6ICV1IEg6ICV1IEw6ICV1IFVzZXItYWdlbnQ6ICIsCisgICAgICAgICAgICAgICAgTSwgUCwgSCwgTAorICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBzYWZlcHV0cyhuZG8sIHZhbHVlICsgNCwgYm9keWxlbiAtIDQpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfRVhURVJOQUxfQ09OTkVDVElPTjogeworICAgICAgICAgICAgLyogQ29udGFpbmVyIFRMViAqLworICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZSwgYm9keWxlbiwgaW5kZW50KzEpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfREVMRUdBVEVEX1BSRUZJWDogeworICAgICAgICAgICAgaW50IGw7CisgICAgICAgICAgICBpZiAoYm9keWxlbiA8IDkgfHwgYm9keWxlbiA8IDkgKyAodmFsdWVbOF0gKyA3KSAvIDgpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBWTFNPOiAlcyBQTFNPOiAlcyBQcmVmaXg6ICIsCisgICAgICAgICAgICAgICAgZm9ybWF0X2ludGVydmFsKEVYVFJBQ1RfMzJCSVRTKHZhbHVlKSksCisgICAgICAgICAgICAgICAgZm9ybWF0X2ludGVydmFsKEVYVFJBQ1RfMzJCSVRTKHZhbHVlICsgNCkpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGwgPSBwcmludF9wcmVmaXgobmRvLCB2YWx1ZSArIDgsIGJvZHlsZW4gLSA4KTsKKyAgICAgICAgICAgIGlmIChsID09IC0xKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIihsZW5ndGggaXMgaW52YWxpZCkiKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobCA8IDApIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFdlJ3ZlIGFscmVhZHkgY2hlY2tlZCB0aGF0IHdlJ3ZlIGNhcHR1cmVkIHRoZQorICAgICAgICAgICAgICAgICAqIGVudGlyZSBUTFYsIGJhc2VkIG9uIGl0cyBsZW5ndGgsIHNvIHRoaXMgd2lsbAorICAgICAgICAgICAgICAgICAqIGVpdGhlciBiZSAtMSwgbWVhbmluZyAidGhlIHByZWZpeCBsZW5ndGggaXMKKyAgICAgICAgICAgICAgICAgKiBncmVhdGVyIHRoYW4gdGhlIGxvbmdlc3QgcG9zc2libGUgYWRkcmVzcyBvZgorICAgICAgICAgICAgICAgICAqIHRoYXQgdHlwZSIgKGkuZS4sID4gMzIgZm9yIElQdjQgb3IgPiAxMjggZm9yCisgICAgICAgICAgICAgICAgICogSVB2NiIsIG9yIC0zLCBtZWFuaW5nICJ0aGUgcHJlZml4IHJ1bnMgcGFzdAorICAgICAgICAgICAgICAgICAqIHRoZSBlbmQgb2YgdGhlIFRMViIuCisgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGwgKz0gOCArICgtbCAmIDMpOworCisgICAgICAgICAgICBpZiAoYm9keWxlbiA+PSBsKQorICAgICAgICAgICAgICAgIGhuY3BfcHJpbnRfcmVjKG5kbywgdmFsdWUgKyBsLCBib2R5bGVuIC0gbCwgaW5kZW50KzEpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfUFJFRklYX1BPTElDWTogeworICAgICAgICAgICAgdWludDhfdCBwb2xpY3k7CisgICAgICAgICAgICBpbnQgbDsKKyAgICAgICAgICAgIGlmIChib2R5bGVuIDwgMSkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwb2xpY3kgPSB2YWx1ZVswXTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgdHlwZTogIikpOworICAgICAgICAgICAgaWYgKHBvbGljeSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaWYgKGJvZHlsZW4gIT0gMSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkludGVybmV0IGNvbm5lY3Rpdml0eSIpKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5ID49IDEgJiYgcG9saWN5IDw9IDEyOCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJEZXN0LVByZWZpeDogIikpOworICAgICAgICAgICAgICAgIGwgPSBwcmludF9wcmVmaXgobmRvLCB2YWx1ZSwgYm9keWxlbik7CisgICAgICAgICAgICAgICAgaWYgKGwgPT0gLTEpIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIihsZW5ndGggaXMgaW52YWxpZCkiKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobCA8IDApIHsKKyAgICAgICAgICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAgICAgICAgICogV2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgd2UndmUgY2FwdHVyZWQgdGhlCisgICAgICAgICAgICAgICAgICAgICAqIGVudGlyZSBUTFYsIGJhc2VkIG9uIGl0cyBsZW5ndGgsIHNvIHRoaXMgd2lsbAorICAgICAgICAgICAgICAgICAgICAgKiBlaXRoZXIgYmUgLTEsIG1lYW5pbmcgInRoZSBwcmVmaXggbGVuZ3RoIGlzCisgICAgICAgICAgICAgICAgICAgICAqIGdyZWF0ZXIgdGhhbiB0aGUgbG9uZ2VzdCBwb3NzaWJsZSBhZGRyZXNzIG9mCisgICAgICAgICAgICAgICAgICAgICAqIHRoYXQgdHlwZSIgKGkuZS4sID4gMzIgZm9yIElQdjQgb3IgPiAxMjggZm9yCisgICAgICAgICAgICAgICAgICAgICAqIElQdjYiLCBvciAtMywgbWVhbmluZyAidGhlIHByZWZpeCBydW5zIHBhc3QKKyAgICAgICAgICAgICAgICAgICAgICogdGhlIGVuZCBvZiB0aGUgVExWIi4KKyAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5ID09IDEyOSkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJETlMgZG9tYWluOiAiKSk7CisgICAgICAgICAgICAgICAgcHJpbnRfZG5zX2xhYmVsKG5kbywgdmFsdWUrMSwgYm9keWxlbi0xLCAxKTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAocG9saWN5ID09IDEzMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJPcGFxdWUgVVRGLTg6ICIpKTsKKyAgICAgICAgICAgICAgICBzYWZlcHV0cyhuZG8sIHZhbHVlICsgMSwgYm9keWxlbiAtIDEpOworICAgICAgICAgICAgfSBlbHNlIGlmIChwb2xpY3kgPT0gMTMxKSB7CisgICAgICAgICAgICAgICAgaWYgKGJvZHlsZW4gIT0gMSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlJlc3RyaWN0aXZlIGFzc2lnbm1lbnQiKSk7CisgICAgICAgICAgICB9IGVsc2UgaWYgKHBvbGljeSA+PSAxMzIpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiVW5rbm93biAoJXUpIiwgcG9saWN5KSk7IC8qIFJlc2VydmVkIGZvciBmdXR1cmUgYWRkaXRpb25zICovCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSE5DUF9ESENQVjRfREFUQTogeworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPT0gMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoZGhjcHY0X3ByaW50KG5kbywgdmFsdWUsIGJvZHlsZW4sIGluZGVudCsxKSAhPSAwKQorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBITkNQX0RIQ1BWNl9EQVRBOiB7CisgICAgICAgICAgICBpZiAoYm9keWxlbiA9PSAwKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChkaGNwdjZfcHJpbnQobmRvLCB2YWx1ZSwgYm9keWxlbiwgaW5kZW50KzEpICE9IDApIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfQVNTSUdORURfUFJFRklYOiB7CisgICAgICAgICAgICB1aW50OF90IHBydHk7CisgICAgICAgICAgICBpbnQgbDsKKyAgICAgICAgICAgIGlmIChib2R5bGVuIDwgNiB8fCBib2R5bGVuIDwgNiArICh2YWx1ZVs1XSArIDcpIC8gOCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBwcnR5ID0gKHVpbnQ4X3QpKHZhbHVlWzRdICYgMHhmKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgRVBJRDogJTA4eCBQcnR5OiAldSIsCisgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFModmFsdWUpLAorICAgICAgICAgICAgICAgIHBydHkKKyAgICAgICAgICAgICkpOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBQcmVmaXg6ICIpKTsKKyAgICAgICAgICAgIGlmICgobCA9IHByaW50X3ByZWZpeChuZG8sIHZhbHVlICsgNSwgYm9keWxlbiAtIDUpKSA8IDApIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgbCArPSA1OworICAgICAgICAgICAgbCArPSAtbCAmIDM7CisKKyAgICAgICAgICAgIGlmIChib2R5bGVuID49IGwpCisgICAgICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZSArIGwsIGJvZHlsZW4gLSBsLCBpbmRlbnQrMSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSE5DUF9OT0RFX0FERFJFU1M6IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGVuZHBvaW50X2lkZW50aWZpZXI7CisgICAgICAgICAgICBjb25zdCBjaGFyICppcF9hZGRyZXNzOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCAyMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBlbmRwb2ludF9pZGVudGlmaWVyID0gRVhUUkFDVF8zMkJJVFModmFsdWUpOworICAgICAgICAgICAgaXBfYWRkcmVzcyA9IGZvcm1hdF9pcDZhZGRyKG5kbywgdmFsdWUgKyA0KTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgRVBJRDogJTA4eCBJUCBBZGRyZXNzOiAlcyIsCisgICAgICAgICAgICAgICAgZW5kcG9pbnRfaWRlbnRpZmllciwKKyAgICAgICAgICAgICAgICBpcF9hZGRyZXNzCisgICAgICAgICAgICApKTsKKworICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZSArIDIwLCBib2R5bGVuIC0gMjAsIGluZGVudCsxKTsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBITkNQX0ROU19ERUxFR0FURURfWk9ORTogeworICAgICAgICAgICAgY29uc3QgY2hhciAqaXBfYWRkcmVzczsKKyAgICAgICAgICAgIGludCBsZW47CisgICAgICAgICAgICBpZiAoYm9keWxlbiA8IDE3KSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlwX2FkZHJlc3MgPSBmb3JtYXRfaXA2YWRkcihuZG8sIHZhbHVlKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgSVAtQWRkcmVzczogJXMgJWMlYyVjICIsCisgICAgICAgICAgICAgICAgaXBfYWRkcmVzcywKKyAgICAgICAgICAgICAgICAodmFsdWVbMTZdICYgNCkgPyAnbCcgOiAnLScsCisgICAgICAgICAgICAgICAgKHZhbHVlWzE2XSAmIDIpID8gJ2InIDogJy0nLAorICAgICAgICAgICAgICAgICh2YWx1ZVsxNl0gJiAxKSA/ICdzJyA6ICctJworICAgICAgICAgICAgKSk7CisgICAgICAgICAgICBsZW4gPSBwcmludF9kbnNfbGFiZWwobmRvLCB2YWx1ZSsxNywgYm9keWxlbi0xNywgMSk7CisgICAgICAgICAgICBpZiAobGVuIDwgMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsZW4gKz0gMTc7CisgICAgICAgICAgICBsZW4gKz0gLWxlbiAmIDM7CisgICAgICAgICAgICBpZiAoYm9keWxlbiA+PSBsZW4pCisgICAgICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZStsZW4sIGJvZHlsZW4tbGVuLCBpbmRlbnQrMSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSE5DUF9ET01BSU5fTkFNRTogeworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPT0gMCkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIERvbWFpbjogIikpOworICAgICAgICAgICAgcHJpbnRfZG5zX2xhYmVsKG5kbywgdmFsdWUsIGJvZHlsZW4sIDEpOworICAgICAgICB9CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIEhOQ1BfTk9ERV9OQU1FOiB7CisgICAgICAgICAgICB1X2ludCBsOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCAxNykgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBsID0gdmFsdWVbMTZdOworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCAxNyArIGwpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgaXN0cikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBJUC1BZGRyZXNzOiAlcyBOYW1lOiAiLAorICAgICAgICAgICAgICAgIGZvcm1hdF9pcDZhZGRyKG5kbywgdmFsdWUpCisgICAgICAgICAgICApKTsKKyAgICAgICAgICAgIGlmIChsIDwgNjQpIHsKKyAgICAgICAgICAgICAgICBzYWZlcHV0Y2hhcihuZG8sICciJyk7CisgICAgICAgICAgICAgICAgc2FmZXB1dHMobmRvLCB2YWx1ZSArIDE3LCBsKTsKKyAgICAgICAgICAgICAgICBzYWZlcHV0Y2hhcihuZG8sICciJyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGwgKz0gMTc7CisgICAgICAgICAgICBsICs9IC1sICYgMzsKKyAgICAgICAgICAgIGlmIChib2R5bGVuID49IGwpCisgICAgICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZSArIGwsIGJvZHlsZW4gLSBsLCBpbmRlbnQrMSk7CisgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGNhc2UgSE5DUF9NQU5BR0VEX1BTSzogeworICAgICAgICAgICAgaWYgKGJvZHlsZW4gPCAzMikgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpc3RyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIFBTSzogJXMiLCBmb3JtYXRfMjU2KHZhbHVlKSkpOworICAgICAgICAgICAgaG5jcF9wcmludF9yZWMobmRvLCB2YWx1ZSArIDMyLCBib2R5bGVuIC0gMzIsIGluZGVudCsxKTsKKyAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgY2FzZSBSQU5HRV9ETkNQX1JFU0VSVkVEOgorICAgICAgICBjYXNlIFJBTkdFX0hOQ1BfVU5BU1NJR05FRDoKKyAgICAgICAgY2FzZSBSQU5HRV9ETkNQX1BSSVZBVEVfVVNFOgorICAgICAgICBjYXNlIFJBTkdFX0ROQ1BfRlVUVVJFX1VTRToKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIH0KKyAgICBza2lwX211bHRpbGluZToKKworICAgICAgICBpICs9IDQgKyBib2R5bGVuICsgKC1ib2R5bGVuICYgMyk7CisgICAgfQorICAgIHByaW50X3R5cGVfaW5fbGluZShuZG8sIGxhc3RfdHlwZV9tYXNrLCBsYXN0X3R5cGVfY291bnQsIGluZGVudCwgJmZpcnN0X29uZSk7CisKKyAgICByZXR1cm47CisKKyB0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCAiW3xobmNwXSIpKTsKKyAgICByZXR1cm47CisKKyBpbnZhbGlkOgorICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKKyAgICByZXR1cm47Cit9CmRpZmYgLS1naXQgYS9wcmludC1oc3JwLmMgYi9wcmludC1oc3JwLmMKaW5kZXggMGUyNDIwZi4uMzUxNDY0NiAxMDA2NDQKLS0tIGEvcHJpbnQtaHNycC5jCisrKyBiL3ByaW50LWhzcnAuYwpAQCAtMjcsMTYgKzI3LDE3IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCisvKiBcc3VtbWFyeTogQ2lzY28gSG90IFN0YW5kYnkgUm91dGVyIFByb3RvY29sIChIU1JQKSBwcmludGVyICovCisKIC8qIENpc2NvIEhvdCBTdGFuZGJ5IFJvdXRlciBQcm90b2NvbCAoSFNSUCkuICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKIAogLyogSFNSUCBvcCBjb2RlIHR5cGVzLiAqLwpAQCAtOTQsNyArOTUsNyBAQAogdm9pZAogaHNycF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdWludDhfdCAqYnAsIHJlZ2lzdGVyIHVfaW50IGxlbikKIHsKLQlzdHJ1Y3QgaHNycCAqaHAgPSAoc3RydWN0IGhzcnAgKikgYnA7CisJY29uc3Qgc3RydWN0IGhzcnAgKmhwID0gKGNvbnN0IHN0cnVjdCBoc3JwICopIGJwOwogCiAJTkRfVENIRUNLKGhwLT5oc3JwX3ZlcnNpb24pOwogCU5EX1BSSU5UKChuZG8sICJIU1JQdiVkIiwgaHAtPmhzcnBfdmVyc2lvbikpOwpAQCAtMTE2LDkgKzExNyw5IEBACiAJTkRfUFJJTlQoKG5kbywgImFkZHI9JXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgJmhwLT5oc3JwX3ZpcnRhZGRyKSkpOwogCWlmIChuZG8tPm5kb192ZmxhZykgewogCQlORF9QUklOVCgobmRvLCAiIGhlbGxvdGltZT0iKSk7Ci0JCXJlbHRzX3ByaW50KG5kbywgaHAtPmhzcnBfaGVsbG90aW1lKTsKKwkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBocC0+aHNycF9oZWxsb3RpbWUpOwogCQlORF9QUklOVCgobmRvLCAiIGhvbGR0aW1lPSIpKTsKLQkJcmVsdHNfcHJpbnQobmRvLCBocC0+aHNycF9ob2xkdGltZSk7CisJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgaHAtPmhzcnBfaG9sZHRpbWUpOwogCQlORF9QUklOVCgobmRvLCAiIHByaW9yaXR5PSVkIiwgaHAtPmhzcnBfcHJpb3JpdHkpKTsKIAkJTkRfUFJJTlQoKG5kbywgIiBhdXRoPVwiIikpOwogCQlpZiAoZm5fcHJpbnRuKG5kbywgaHAtPmhzcnBfYXV0aGRhdGEsIHNpemVvZihocC0+aHNycF9hdXRoZGF0YSksCmRpZmYgLS1naXQgYS9wcmludC1odHRwLmMgYi9wcmludC1odHRwLmMKaW5kZXggNDlkZjE3NC4uMGFlYzc1OCAxMDA2NDQKLS0tIGEvcHJpbnQtaHR0cC5jCisrKyBiL3ByaW50LWh0dHAuYwpAQCAtMTEsMjEgKzExLDE4IEBACiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdIF9VXyA9Ci0gICAgIkAoIykgJEhlYWRlciQiOwotI2VuZGlmCisvKiBcc3VtbWFyeTogSHlwZXJ0ZXh0IFRyYW5zZmVyIFByb3RvY29sIChIVFRQKSBwcmludGVyICovCiAKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAvKgpkaWZmIC0tZ2l0IGEvcHJpbnQtaWNtcC5jIGIvcHJpbnQtaWNtcC5jCmluZGV4IDU5ZWIwMDcuLjE3ZTdhNzUgMTAwNjQ0Ci0tLSBhL3ByaW50LWljbXAuYworKysgYi9wcmludC1pY21wLmMKQEAgLTE5LDE5ICsxOSwyMCBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJbnRlcm5ldCBDb250cm9sIE1lc3NhZ2UgUHJvdG9jb2wgKElDTVApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCi0jaW5jbHVkZSAiZXh0cmFjdC5oIgkJCS8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2luY2x1ZGUgImlwLmgiCiAjaW5jbHVkZSAidWRwLmgiCkBAIC0zNDQsOSArMzQ1LDkgQEAKIAljaGFyIGJ1ZltNQVhIT1NUTkFNRUxFTiArIDEwMF07CiAJc3RydWN0IGNrc3VtX3ZlYyB2ZWNbMV07CiAKLQlkcCA9IChzdHJ1Y3QgaWNtcCAqKWJwOwotICAgICAgICBleHRfZHAgPSAoc3RydWN0IGljbXBfZXh0X3QgKilicDsKLQlpcCA9IChzdHJ1Y3QgaXAgKilicDI7CisJZHAgPSAoY29uc3Qgc3RydWN0IGljbXAgKilicDsKKyAgICAgICAgZXh0X2RwID0gKGNvbnN0IHN0cnVjdCBpY21wX2V4dF90ICopYnA7CisJaXAgPSAoY29uc3Qgc3RydWN0IGlwICopYnAyOwogCXN0ciA9IGJ1ZjsKIAogCU5EX1RDSEVDSyhkcC0+aWNtcF9jb2RlKTsKQEAgLTM3OCw3ICszNzksNyBAQAogCQkJTkRfVENIRUNLKGRwLT5pY21wX2lwLmlwX3ApOwogCQkJb2lwID0gJmRwLT5pY21wX2lwOwogCQkJaGxlbiA9IElQX0hMKG9pcCkgKiA0OwotCQkJb3VoID0gKHN0cnVjdCB1ZHBoZHIgKikoKCh1X2NoYXIgKilvaXApICsgaGxlbik7CisJCQlvdWggPSAoY29uc3Qgc3RydWN0IHVkcGhkciAqKSgoKGNvbnN0IHVfY2hhciAqKW9pcCkgKyBobGVuKTsKIAkJCU5EX1RDSEVDSyhvdWgtPnVoX2Rwb3J0KTsKIAkJCWRwb3J0ID0gRVhUUkFDVF8xNkJJVFMoJm91aC0+dWhfZHBvcnQpOwogCQkJc3dpdGNoIChvaXAtPmlwX3ApIHsKQEAgLTM4NywxNCArMzg4LDE0IEBACiAJCQkJKHZvaWQpc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKIAkJCQkJIiVzIHRjcCBwb3J0ICVzIHVucmVhY2hhYmxlIiwKIAkJCQkJaXBhZGRyX3N0cmluZyhuZG8sICZvaXAtPmlwX2RzdCksCi0JCQkJCXRjcHBvcnRfc3RyaW5nKGRwb3J0KSk7CisJCQkJCXRjcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBJUFBST1RPX1VEUDoKIAkJCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLAogCQkJCQkiJXMgdWRwIHBvcnQgJXMgdW5yZWFjaGFibGUiLAogCQkJCQlpcGFkZHJfc3RyaW5nKG5kbywgJm9pcC0+aXBfZHN0KSwKLQkJCQkJdWRwcG9ydF9zdHJpbmcoZHBvcnQpKTsKKwkJCQkJdWRwcG9ydF9zdHJpbmcobmRvLCBkcG9ydCkpOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgpAQCAtNDA5LDcgKzQxMCw3IEBACiAJCWNhc2UgSUNNUF9VTlJFQUNIX05FRURGUkFHOgogCQkgICAgewogCQkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IG10dV9kaXNjb3ZlcnkgKm1wOwotCQkJbXAgPSAoc3RydWN0IG10dV9kaXNjb3ZlcnkgKikodV9jaGFyICopJmRwLT5pY21wX3ZvaWQ7CisJCQltcCA9IChjb25zdCBzdHJ1Y3QgbXR1X2Rpc2NvdmVyeSAqKShjb25zdCB1X2NoYXIgKikmZHAtPmljbXBfdm9pZDsKIAkJCW10dSA9IEVYVFJBQ1RfMTZCSVRTKCZtcC0+bmV4dGhvcG10dSk7CiAJCQlpZiAobXR1KSB7CiAJCQkJKHZvaWQpc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwKQEAgLTQ1MCw3ICs0NTEsNyBAQAogCQkodm9pZClzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAicm91dGVyIGFkdmVydGlzZW1lbnQiKTsKIAkJY3AgPSBidWYgKyBzdHJsZW4oYnVmKTsKIAotCQlpaHAgPSAoc3RydWN0IGloX3JkaXNjb3ZlcnkgKikmZHAtPmljbXBfdm9pZDsKKwkJaWhwID0gKGNvbnN0IHN0cnVjdCBpaF9yZGlzY292ZXJ5ICopJmRwLT5pY21wX3ZvaWQ7CiAJCU5EX1RDSEVDSygqaWhwKTsKIAkJKHZvaWQpc3RybmNweShjcCwgIiBsaWZldGltZSAiLCBzaXplb2YoYnVmKSAtIChjcCAtIGJ1ZikpOwogCQljcCA9IGJ1ZiArIHN0cmxlbihidWYpOwpAQCAtNDgwLDcgKzQ4MSw3IEBACiAJCQkgICAgIiBbc2l6ZSAlZF0iLCBzaXplKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlkcCA9IChzdHJ1Y3QgaWRfcmRpc2NvdmVyeSAqKSZkcC0+aWNtcF9kYXRhOworCQlpZHAgPSAoY29uc3Qgc3RydWN0IGlkX3JkaXNjb3ZlcnkgKikmZHAtPmljbXBfZGF0YTsKIAkJd2hpbGUgKG51bS0tID4gMCkgewogCQkJTkRfVENIRUNLKCppZHApOwogCQkJKHZvaWQpc25wcmludGYoY3AsIHNpemVvZihidWYpIC0gKGNwIC0gYnVmKSwgIiB7JXMgJXV9IiwKQEAgLTU1Nyw5ICs1NTgsOSBAQAogCU5EX1BSSU5UKChuZG8sICJJQ01QICVzLCBsZW5ndGggJXUiLCBzdHIsIHBsZW4pKTsKIAlpZiAobmRvLT5uZG9fdmZsYWcgJiYgIWZyYWdtZW50ZWQpIHsgLyogZG9uJ3QgYXR0ZW1wdCBjaGVja3N1bW1pbmcgaWYgdGhpcyBpcyBhIGZyYWcgKi8KIAkJdWludDE2X3Qgc3VtLCBpY21wX3N1bTsKLQkJc3RydWN0IGNrc3VtX3ZlYyB2ZWNbMV07CisKIAkJaWYgKE5EX1RURVNUMigqYnAsIHBsZW4pKSB7Ci0JCQl2ZWNbMF0ucHRyID0gKGNvbnN0IHVpbnQ4X3QgKikodm9pZCAqKWRwOworCQkJdmVjWzBdLnB0ciA9IChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKilkcDsKIAkJCXZlY1swXS5sZW4gPSBwbGVuOwogCQkJc3VtID0gaW5fY2tzdW0odmVjLCAxKTsKIAkJCWlmIChzdW0gIT0gMCkgewpAQCAtNTc4LDcgKzU3OSw3IEBACiAJaWYgKG5kby0+bmRvX3ZmbGFnID49IDEgJiYgSUNNUF9FUlJUWVBFKGRwLT5pY21wX3R5cGUpKSB7CiAJCWJwICs9IDg7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0IikpOwotCQlpcCA9IChzdHJ1Y3QgaXAgKilicDsKKwkJaXAgPSAoY29uc3Qgc3RydWN0IGlwICopYnA7CiAJCW5kby0+bmRvX3NuYXBsZW4gPSBuZG8tPm5kb19zbmFwZW5kIC0gYnA7CiAgICAgICAgICAgICAgICAgc25hcGVuZF9zYXZlID0gbmRvLT5uZG9fc25hcGVuZDsKIAkJaXBfcHJpbnQobmRvLCBicCwgRVhUUkFDVF8xNkJJVFMoJmlwLT5pcF9sZW4pKTsKQEAgLTU5OSw3ICs2MDAsNyBAQAogICAgICAgICAgICAgICogaG93ZXZlciBub3QgYWxsIGltcGxlbWVudGF0aW9ucyBzZXQgdGhlIGxlbmd0aCBmaWVsZCBwcm9wZXIuCiAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIGlmICghZXh0X2RwLT5pY21wX2xlbmd0aCkgewotICAgICAgICAgICAgICAgIHZlY1swXS5wdHIgPSAoY29uc3QgdWludDhfdCAqKSh2b2lkICopJmV4dF9kcC0+aWNtcF9leHRfdmVyc2lvbl9yZXM7CisgICAgICAgICAgICAgICAgdmVjWzBdLnB0ciA9IChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKikmZXh0X2RwLT5pY21wX2V4dF92ZXJzaW9uX3JlczsKICAgICAgICAgICAgICAgICB2ZWNbMF0ubGVuID0gcGxlbiAtIElDTVBfRVhURF9NSU5MRU47CiAgICAgICAgICAgICAgICAgaWYgKGluX2Nrc3VtKHZlYywgMSkpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwpAQCAtNjE5LDcgKzYyMCw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIGhsZW4gPSBwbGVuIC0gSUNNUF9FWFREX01JTkxFTjsKLSAgICAgICAgICAgIHZlY1swXS5wdHIgPSAoY29uc3QgdWludDhfdCAqKSh2b2lkICopJmV4dF9kcC0+aWNtcF9leHRfdmVyc2lvbl9yZXM7CisgICAgICAgICAgICB2ZWNbMF0ucHRyID0gKGNvbnN0IHVpbnQ4X3QgKikoY29uc3Qgdm9pZCAqKSZleHRfZHAtPmljbXBfZXh0X3ZlcnNpb25fcmVzOwogICAgICAgICAgICAgdmVjWzBdLmxlbiA9IGhsZW47CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBjaGVja3N1bSAweCUwNHggKCVzY29ycmVjdCksIGxlbmd0aCAldSIsCiAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoZXh0X2RwLT5pY21wX2V4dF9jaGVja3N1bSksCkBAIC02MjcsMTEgKzYyOCwxMSBAQAogICAgICAgICAgICAgICAgICAgIGhsZW4pKTsKIAogICAgICAgICAgICAgaGxlbiAtPSA0OyAvKiBzdWJ0cmFjdCBjb21tb24gaGVhZGVyIHNpemUgKi8KLSAgICAgICAgICAgIG9ial90cHRyID0gKHVpbnQ4X3QgKilleHRfZHAtPmljbXBfZXh0X2RhdGE7CisgICAgICAgICAgICBvYmpfdHB0ciA9IChjb25zdCB1aW50OF90ICopZXh0X2RwLT5pY21wX2V4dF9kYXRhOwogCiAgICAgICAgICAgICB3aGlsZSAoaGxlbiA+IHNpemVvZihzdHJ1Y3QgaWNtcF9tcGxzX2V4dF9vYmplY3RfaGVhZGVyX3QpKSB7CiAKLSAgICAgICAgICAgICAgICBpY21wX21wbHNfZXh0X29iamVjdF9oZWFkZXIgPSAoc3RydWN0IGljbXBfbXBsc19leHRfb2JqZWN0X2hlYWRlcl90ICopb2JqX3RwdHI7CisgICAgICAgICAgICAgICAgaWNtcF9tcGxzX2V4dF9vYmplY3RfaGVhZGVyID0gKGNvbnN0IHN0cnVjdCBpY21wX21wbHNfZXh0X29iamVjdF9oZWFkZXJfdCAqKW9ial90cHRyOwogICAgICAgICAgICAgICAgIE5EX1RDSEVDSygqaWNtcF9tcGxzX2V4dF9vYmplY3RfaGVhZGVyKTsKICAgICAgICAgICAgICAgICBvYmpfdGxlbiA9IEVYVFJBQ1RfMTZCSVRTKGljbXBfbXBsc19leHRfb2JqZWN0X2hlYWRlci0+bGVuZ3RoKTsKICAgICAgICAgICAgICAgICBvYmpfY2xhc3NfbnVtID0gaWNtcF9tcGxzX2V4dF9vYmplY3RfaGVhZGVyLT5jbGFzc19udW07CmRpZmYgLS1naXQgYS9wcmludC1pY21wNi5jIGIvcHJpbnQtaWNtcDYuYwppbmRleCA4MTU2M2U2Li43ZmU2MzlkIDEwMDY0NAotLS0gYS9wcmludC1pY21wNi5jCisrKyBiL3ByaW50LWljbXA2LmMKQEAgLTE5LDIwICsxOSwyMCBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJUHY2IEludGVybmV0IENvbnRyb2wgTWVzc2FnZSBQcm90b2NvbCAoSUNNUHY2KSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2lmZGVmIElORVQ2Ci0KLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKKyNpbmNsdWRlICJhZGRydG9zdHIuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpbmNsdWRlICJpcDYuaCIKQEAgLTI4NCwxMyArMjg0LDEzIEBACiAjZGVmaW5lIE5EX09QVF9ETlNTTAkJCTMxCiAKIHN0cnVjdCBuZF9vcHRfcHJlZml4X2luZm8gewkvKiBwcmVmaXggaW5mb3JtYXRpb24gKi8KLQl1aW50OF90CQluZF9vcHRfcGlfdHlwZTsKLQl1aW50OF90CQluZF9vcHRfcGlfbGVuOwotCXVpbnQ4X3QJCW5kX29wdF9waV9wcmVmaXhfbGVuOwotCXVpbnQ4X3QJCW5kX29wdF9waV9mbGFnc19yZXNlcnZlZDsKLQl1aW50OF90CQluZF9vcHRfcGlfdmFsaWRfdGltZVs0XTsKLQl1aW50OF90CQluZF9vcHRfcGlfcHJlZmVycmVkX3RpbWVbNF07Ci0JdWludDhfdAkJbmRfb3B0X3BpX3Jlc2VydmVkMls0XTsKKwluZF91aW50OF90CQluZF9vcHRfcGlfdHlwZTsKKwluZF91aW50OF90CQluZF9vcHRfcGlfbGVuOworCW5kX3VpbnQ4X3QJCW5kX29wdF9waV9wcmVmaXhfbGVuOworCW5kX3VpbnQ4X3QJCW5kX29wdF9waV9mbGFnc19yZXNlcnZlZDsKKwluZF91aW50MzJfdAkJbmRfb3B0X3BpX3ZhbGlkX3RpbWU7CisJbmRfdWludDMyX3QJCW5kX29wdF9waV9wcmVmZXJyZWRfdGltZTsKKwluZF91aW50MzJfdAkJbmRfb3B0X3BpX3Jlc2VydmVkMjsKIAlzdHJ1Y3QgaW42X2FkZHIJbmRfb3B0X3BpX3ByZWZpeDsKIH07CiAKQEAgLTYyMiwxNCArNjIyLDE0IEBACiAJfQogfQogCi1zdGF0aWMgaW50IGljbXA2X2Nrc3VtKGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYsIGNvbnN0IHN0cnVjdCBpY21wNl9oZHIgKmljcCwKLQl1X2ludCBsZW4pCitzdGF0aWMgaW50IGljbXA2X2Nrc3VtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2LAorCWNvbnN0IHN0cnVjdCBpY21wNl9oZHIgKmljcCwgdV9pbnQgbGVuKQogewotCXJldHVybiBuZXh0cHJvdG82X2Nrc3VtKGlwNiwgKGNvbnN0IHVpbnQ4X3QgKikodm9pZCAqKWljcCwgbGVuLCBsZW4sCisJcmV0dXJuIG5leHRwcm90bzZfY2tzdW0obmRvLCBpcDYsIChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKilpY3AsIGxlbiwgbGVuLAogCQkJCUlQUFJPVE9fSUNNUFY2KTsKIH0KIAotY29uc3Qgc3RydWN0IHRvayBycGxfbW9wX3ZhbHVlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgcnBsX21vcF92YWx1ZXNbXSA9IHsKICAgICAgICAgeyBSUExfRElPX05PTlNUT1JJTkcsICAgICAgICAgIm5vbnN0b3JpbmcifSwKICAgICAgICAgeyBSUExfRElPX1NUT1JJTkcsICAgICAgICAgICAgInN0b3JpbmcifSwKICAgICAgICAgeyBSUExfRElPX05PTlNUT1JJTkdfTVVMVElDQVNULCAibm9uc3RvcmluZy1tdWx0aWNhc3QifSwKQEAgLTYzNyw3ICs2MzcsNyBAQAogICAgICAgICB7IDAsIE5VTEx9LAogfTsKIAotY29uc3Qgc3RydWN0IHRvayBycGxfc3Vib3B0X3ZhbHVlc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgcnBsX3N1Ym9wdF92YWx1ZXNbXSA9IHsKICAgICAgICAgeyBSUExfT1BUX1BBRDAsICJwYWQwIn0sCiAgICAgICAgIHsgUlBMX09QVF9QQUROLCAicGFkTiJ9LAogICAgICAgICB7IFJQTF9ESU9fTUVUUklDUywgIm1ldHJpY3MifSwKQEAgLTY1MSwyMyArNjUxLDYgQEAKIH07CiAKIHN0YXRpYyB2b2lkCi1ycGxfZm9ybWF0X2RhZ2lkKGNoYXIgZGFnaWRfc3RyWzY1XSwgY29uc3QgdV9jaGFyICpkYWdpZCkKLXsKLSAgICAgICAgY2hhciAqZCA9IGRhZ2lkX3N0cjsKLSAgICAgICAgaW50ICBpOwotCi0gICAgICAgIGZvcihpPTA7aTwxNjtpKyspIHsKLSAgICAgICAgICAgICAgICBpZihpc3ByaW50KGRhZ2lkW2ldKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgKmQrKyA9IGRhZ2lkW2ldOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihkLDUsIjB4JTAyeCIsIGRhZ2lkW2ldKTsgLyogNCArIG51bGwgY2hhciAqLwotICAgICAgICAgICAgICAgICAgICAgICAgZCArPSA0OwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgICAgICAqZCsrID0gJ1wwJzsKLX0KLQotc3RhdGljIHZvaWQKIHJwbF9kaW9fcHJpbnRvcHQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0LAogICAgICAgICAgICAgICAgICB1X2ludCBsZW5ndGgpCkBAIC02NzgsNyArNjYxLDcgQEAKICAgICAgICAgTkRfVENIRUNLKG9wdC0+cnBsX2Rpb19sZW4pOwogCiAgICAgICAgIHdoaWxlKChvcHQtPnJwbF9kaW9fdHlwZSA9PSBSUExfT1BUX1BBRDAgJiYKLSAgICAgICAgICAgICAgICh1X2NoYXIgKilvcHQgPCBuZG8tPm5kb19zbmFwZW5kKSB8fAorICAgICAgICAgICAgICAgKGNvbnN0IHVfY2hhciAqKW9wdCA8IG5kby0+bmRvX3NuYXBlbmQpIHx8CiAgICAgICAgICAgICAgIE5EX1RURVNUMigqb3B0LChvcHQtPnJwbF9kaW9fbGVuKzIpKSkgewogCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9wdGxlbiA9IG9wdC0+cnBsX2Rpb19sZW4rMjsKQEAgLTY4NywxOCArNjcwLDE4IEBACiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIG9wdDpwYWQwIikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIG9wdDolcyBsZW46JXUgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKHJwbF9zdWJvcHRfdmFsdWVzLCAiJXN1Ym9wdDoldSIsIG9wdC0+cnBsX2Rpb190eXBlKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKHJwbF9zdWJvcHRfdmFsdWVzLCAic3Vib3B0OiV1Iiwgb3B0LT5ycGxfZGlvX3R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9wdGxlbikpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYobmRvLT5uZG9fdmZsYWcgPiAyKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwYXlsZW4gPSBvcHQtPnJwbF9kaW9fbGVuOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXlsZW4gPiBsZW5ndGgpIHBheWxlbiA9IGxlbmd0aDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGV4X3ByaW50KG5kbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgodWludDhfdCAqKW9wdCkgKyBSUExfRElPX0dFTk9QVElPTl9MRU4sICAvKiBjb250ZW50IG9mIERJTyBvcHRpb24gKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoY29uc3QgdWludDhfdCAqKW9wdCkgKyBSUExfRElPX0dFTk9QVElPTl9MRU4sICAvKiBjb250ZW50IG9mIERJTyBvcHRpb24gKi8KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBheWxlbik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIG9wdCA9IChzdHJ1Y3QgcnBsX2Rpb19nZW5vcHRpb24gKikoKChjaGFyICopb3B0KSArIG9wdGxlbik7CisgICAgICAgICAgICAgICAgb3B0ID0gKGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKSgoKGNvbnN0IGNoYXIgKilvcHQpICsgb3B0bGVuKTsKICAgICAgICAgICAgICAgICBsZW5ndGggLT0gb3B0bGVuOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKQEAgLTcxMSwxMSArNjk0LDExIEBACiBycGxfZGlvX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgpCiB7Ci0gICAgICAgIGNvbnN0IHN0cnVjdCBuZF9ycGxfZGlvICpkaW8gPSAoc3RydWN0IG5kX3JwbF9kaW8gKilicDsKLSAgICAgICAgY2hhciBkYWdpZF9zdHJbNjVdOworICAgICAgICBjb25zdCBzdHJ1Y3QgbmRfcnBsX2RpbyAqZGlvID0gKGNvbnN0IHN0cnVjdCBuZF9ycGxfZGlvICopYnA7CisgICAgICAgIGNvbnN0IGNoYXIgKmRhZ2lkX3N0cjsKIAogICAgICAgICBORF9UQ0hFQ0soKmRpbyk7Ci0gICAgICAgIHJwbF9mb3JtYXRfZGFnaWQoZGFnaWRfc3RyLCBkaW8tPnJwbF9kYWdpZCk7CisgICAgICAgIGRhZ2lkX3N0ciA9IGlwNmFkZHJfc3RyaW5nIChuZG8sIGRpby0+cnBsX2RhZ2lkKTsKIAogICAgICAgICBORF9QUklOVCgobmRvLCAiIFtkYWdpZDolcyxzZXE6JXUsaW5zdGFuY2U6JXUscmFuazoldSwlc21vcDolcyxwcmY6JXVdIiwKICAgICAgICAgICAgICAgICAgIGRhZ2lkX3N0ciwKQEAgLTcyNyw3ICs3MTAsNyBAQAogICAgICAgICAgICAgICAgICAgUlBMX0RJT19QUkYoZGlvLT5ycGxfbW9wcHJmKSkpOwogCiAgICAgICAgIGlmKG5kby0+bmRvX3ZmbGFnID4gMSkgewotICAgICAgICAgICAgICAgIHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0ID0gKHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKSZkaW9bMV07CisgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHJwbF9kaW9fZ2Vub3B0aW9uICpvcHQgPSAoY29uc3Qgc3RydWN0IHJwbF9kaW9fZ2Vub3B0aW9uICopJmRpb1sxXTsKICAgICAgICAgICAgICAgICBycGxfZGlvX3ByaW50b3B0KG5kbywgb3B0LCBsZW5ndGgpOwogICAgICAgICB9CiAJcmV0dXJuOwpAQCAtNzQwLDIxICs3MjMsMjAgQEAKIHJwbF9kYW9fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbmd0aCkKIHsKLSAgICAgICAgY29uc3Qgc3RydWN0IG5kX3JwbF9kYW8gKmRhbyA9IChzdHJ1Y3QgbmRfcnBsX2RhbyAqKWJwOwotICAgICAgICBjaGFyIGRhZ2lkX3N0cls2NV07CisgICAgICAgIGNvbnN0IHN0cnVjdCBuZF9ycGxfZGFvICpkYW8gPSAoY29uc3Qgc3RydWN0IG5kX3JwbF9kYW8gKilicDsKKyAgICAgICAgY29uc3QgY2hhciAqZGFnaWRfc3RyID0gIjxlbGlkZWQ+IjsKIAogICAgICAgICBORF9UQ0hFQ0soKmRhbyk7CiAgICAgICAgIGlmIChsZW5ndGggPCBORF9SUExfREFPX01JTl9MRU4pCiAgICAgICAgIAlnb3RvIHRvb3Nob3J0OwogCi0gICAgICAgIHN0cmNweShkYWdpZF9zdHIsIjxlbGlkZWQ+Iik7CiAgICAgICAgIGJwICs9IE5EX1JQTF9EQU9fTUlOX0xFTjsKICAgICAgICAgbGVuZ3RoIC09IE5EX1JQTF9EQU9fTUlOX0xFTjsKICAgICAgICAgaWYoUlBMX0RBT19EKGRhby0+cnBsX2ZsYWdzKSkgewogICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoZGFvLT5ycGxfZGFnaWQsIERBR0lEX0xFTik7CiAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IERBR0lEX0xFTikKICAgICAgICAgICAgICAgICAJZ290byB0b29zaG9ydDsKLSAgICAgICAgICAgICAgICBycGxfZm9ybWF0X2RhZ2lkKGRhZ2lkX3N0ciwgZGFvLT5ycGxfZGFnaWQpOworICAgICAgICAgICAgICAgIGRhZ2lkX3N0ciA9IGlwNmFkZHJfc3RyaW5nIChuZG8sIGRhby0+cnBsX2RhZ2lkKTsKICAgICAgICAgICAgICAgICBicCArPSBEQUdJRF9MRU47CiAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IERBR0lEX0xFTjsKICAgICAgICAgfQpAQCAtNzY4LDcgKzc1MCw3IEBACiAgICAgICAgICAgICAgICAgICBkYW8tPnJwbF9mbGFncykpOwogCiAgICAgICAgIGlmKG5kby0+bmRvX3ZmbGFnID4gMSkgewotICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0ID0gKHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKWJwOworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0ID0gKGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKWJwOwogICAgICAgICAgICAgICAgIHJwbF9kaW9fcHJpbnRvcHQobmRvLCBvcHQsIGxlbmd0aCk7CiAgICAgICAgIH0KIAlyZXR1cm47CkBAIC03ODYsMjEgKzc2OCwyMCBAQAogcnBsX2Rhb2Fja19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQogewotICAgICAgICBjb25zdCBzdHJ1Y3QgbmRfcnBsX2Rhb2FjayAqZGFvYWNrID0gKHN0cnVjdCBuZF9ycGxfZGFvYWNrICopYnA7Ci0gICAgICAgIGNoYXIgZGFnaWRfc3RyWzY1XTsKKyAgICAgICAgY29uc3Qgc3RydWN0IG5kX3JwbF9kYW9hY2sgKmRhb2FjayA9IChjb25zdCBzdHJ1Y3QgbmRfcnBsX2Rhb2FjayAqKWJwOworICAgICAgICBjb25zdCBjaGFyICpkYWdpZF9zdHIgPSAiPGVsaWRlZD4iOwogCiAgICAgICAgIE5EX1RDSEVDSzIoKmRhb2FjaywgTkRfUlBMX0RBT0FDS19NSU5fTEVOKTsKICAgICAgICAgaWYgKGxlbmd0aCA8IE5EX1JQTF9EQU9BQ0tfTUlOX0xFTikKICAgICAgICAgCWdvdG8gdG9vc2hvcnQ7CiAKLSAgICAgICAgc3RyY3B5KGRhZ2lkX3N0ciwiPGVsaWRlZD4iKTsKICAgICAgICAgYnAgKz0gTkRfUlBMX0RBT0FDS19NSU5fTEVOOwogICAgICAgICBsZW5ndGggLT0gTkRfUlBMX0RBT0FDS19NSU5fTEVOOwogICAgICAgICBpZihSUExfREFPQUNLX0QoZGFvYWNrLT5ycGxfZmxhZ3MpKSB7Ci0gICAgICAgICAgICAgICAgTkRfVENIRUNLMihkYW9hY2stPnJwbF9kYWdpZCwgMTYpOworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoZGFvYWNrLT5ycGxfZGFnaWQsIERBR0lEX0xFTik7CiAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA8IERBR0lEX0xFTikKICAgICAgICAgICAgICAgICAJZ290byB0b29zaG9ydDsKLSAgICAgICAgICAgICAgICBycGxfZm9ybWF0X2RhZ2lkKGRhZ2lkX3N0ciwgZGFvYWNrLT5ycGxfZGFnaWQpOworICAgICAgICAgICAgICAgIGRhZ2lkX3N0ciA9IGlwNmFkZHJfc3RyaW5nIChuZG8sIGRhb2Fjay0+cnBsX2RhZ2lkKTsKICAgICAgICAgICAgICAgICBicCArPSBEQUdJRF9MRU47CiAgICAgICAgICAgICAgICAgbGVuZ3RoIC09IERBR0lEX0xFTjsKICAgICAgICAgfQpAQCAtODEzLDcgKzc5NCw3IEBACiAKICAgICAgICAgLyogbm8gb2ZmaWNpYWxseSBkZWZpbmVkIG9wdGlvbnMgZm9yIERBT0FDSywgYnV0IHByaW50IGFueSB3ZSBmaW5kICovCiAgICAgICAgIGlmKG5kby0+bmRvX3ZmbGFnID4gMSkgewotICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0ID0gKHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKWJwOworICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqb3B0ID0gKGNvbnN0IHN0cnVjdCBycGxfZGlvX2dlbm9wdGlvbiAqKWJwOwogICAgICAgICAgICAgICAgIHJwbF9kaW9fcHJpbnRvcHQobmRvLCBvcHQsIGxlbmd0aCk7CiAgICAgICAgIH0KIAlyZXR1cm47CkBAIC04OTcsOSArODc4LDkgQEAKIAljb25zdCB1X2NoYXIgKmVwOwogCXVfaW50IHByb3Q7CiAKLQlkcCA9IChzdHJ1Y3QgaWNtcDZfaGRyICopYnA7Ci0JaXAgPSAoc3RydWN0IGlwNl9oZHIgKilicDI7Ci0Jb2lwID0gKHN0cnVjdCBpcDZfaGRyICopKGRwICsgMSk7CisJZHAgPSAoY29uc3Qgc3RydWN0IGljbXA2X2hkciAqKWJwOworCWlwID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnAyOworCW9pcCA9IChjb25zdCBzdHJ1Y3QgaXA2X2hkciAqKShkcCArIDEpOwogCS8qICdlcCcgcG9pbnRzIHRvIHRoZSBlbmQgb2YgYXZhaWxhYmxlIGRhdGEuICovCiAJZXAgPSBuZG8tPm5kb19zbmFwZW5kOwogCkBAIC05MTAsNyArODkxLDcgQEAKIAogCQlpZiAoTkRfVFRFU1QyKGJwWzBdLCBsZW5ndGgpKSB7CiAJCQl1ZHBfc3VtID0gRVhUUkFDVF8xNkJJVFMoJmRwLT5pY21wNl9ja3N1bSk7Ci0JCQlzdW0gPSBpY21wNl9ja3N1bShpcCwgZHAsIGxlbmd0aCk7CisJCQlzdW0gPSBpY21wNl9ja3N1bShuZG8sIGlwLCBkcCwgbGVuZ3RoKTsKIAkJCWlmIChzdW0gIT0gMCkKIAkJCQlORF9QUklOVCgobmRvLCJbYmFkIGljbXA2IGNrc3VtIDB4JTA0eCAtPiAweCUwNHghXSAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwX3N1bSwKQEAgLTk0OSw3ICs5MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgJm9pcC0+aXA2X3NyYykpKTsKIAkJCWJyZWFrOwogCQljYXNlIElDTVA2X0RTVF9VTlJFQUNIX05PUE9SVDoKLQkJCWlmICgob3VoID0gZ2V0X3VwcGVybGF5ZXIobmRvLCAodV9jaGFyICopb2lwLCAmcHJvdCkpCisJCQlpZiAoKG91aCA9IGdldF91cHBlcmxheWVyKG5kbywgKGNvbnN0IHVfY2hhciAqKW9pcCwgJnByb3QpKQogCQkJICAgID09IE5VTEwpCiAJCQkJZ290byB0cnVuYzsKIApAQCAtOTU4LDEyICs5MzksMTIgQEAKIAkJCWNhc2UgSVBQUk9UT19UQ1A6CiAJCQkJTkRfUFJJTlQoKG5kbywiLCAlcyB0Y3AgcG9ydCAlcyIsCiAJCQkJCWlwNmFkZHJfc3RyaW5nKG5kbywgJm9pcC0+aXA2X2RzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhkcG9ydCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKSk7CiAJCQkJYnJlYWs7CiAJCQljYXNlIElQUFJPVE9fVURQOgogCQkJCU5EX1BSSU5UKChuZG8sIiwgJXMgdWRwIHBvcnQgJXMiLAogCQkJCQlpcDZhZGRyX3N0cmluZyhuZG8sICZvaXAtPmlwNl9kc3QpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdWRwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1ZHBwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlORF9QUklOVCgobmRvLCIsICVzIHByb3RvY29sICVkIHBvcnQgJWQgdW5yZWFjaGFibGUiLApAQCAtMTA0OCw5ICsxMDI5LDkgQEAKIAljYXNlIE5EX1JPVVRFUl9BRFZFUlQ6CiAjZGVmaW5lIFJUQURWTEVOIDE2CiAJCWlmIChuZG8tPm5kb192ZmxhZykgewotCQkJc3RydWN0IG5kX3JvdXRlcl9hZHZlcnQgKnA7CisJCQljb25zdCBzdHJ1Y3QgbmRfcm91dGVyX2FkdmVydCAqcDsKIAotCQkJcCA9IChzdHJ1Y3QgbmRfcm91dGVyX2FkdmVydCAqKWRwOworCQkJcCA9IChjb25zdCBzdHJ1Y3QgbmRfcm91dGVyX2FkdmVydCAqKWRwOwogCQkJTkRfVENIRUNLKHAtPm5kX3JhX3JldHJhbnNtaXQpOwogCQkJTkRfUFJJTlQoKG5kbywiXG5cdGhvcCBsaW1pdCAldSwgRmxhZ3MgWyVzXSIgXAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIsIHByZWYgJXMsIHJvdXRlciBsaWZldGltZSAldXMsIHJlYWNoYWJsZSB0aW1lICV1cywgcmV0cmFucyB0aW1lICV1cyIsCkBAIC0xMDY3LDggKzEwNDgsOCBAQAogCQlicmVhazsKIAljYXNlIE5EX05FSUdIQk9SX1NPTElDSVQ6CiAJICAgIHsKLQkJc3RydWN0IG5kX25laWdoYm9yX3NvbGljaXQgKnA7Ci0JCXAgPSAoc3RydWN0IG5kX25laWdoYm9yX3NvbGljaXQgKilkcDsKKwkJY29uc3Qgc3RydWN0IG5kX25laWdoYm9yX3NvbGljaXQgKnA7CisJCXAgPSAoY29uc3Qgc3RydWN0IG5kX25laWdoYm9yX3NvbGljaXQgKilkcDsKIAkJTkRfVENIRUNLKHAtPm5kX25zX3RhcmdldCk7CiAJCU5EX1BSSU5UKChuZG8sIiwgd2hvIGhhcyAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgJnAtPm5kX25zX3RhcmdldCkpKTsKIAkJaWYgKG5kby0+bmRvX3ZmbGFnKSB7CkBAIC0xMDgwLDkgKzEwNjEsOSBAQAogCQlicmVhazsKIAljYXNlIE5EX05FSUdIQk9SX0FEVkVSVDoKIAkgICAgewotCQlzdHJ1Y3QgbmRfbmVpZ2hib3JfYWR2ZXJ0ICpwOworCQljb25zdCBzdHJ1Y3QgbmRfbmVpZ2hib3JfYWR2ZXJ0ICpwOwogCi0JCXAgPSAoc3RydWN0IG5kX25laWdoYm9yX2FkdmVydCAqKWRwOworCQlwID0gKGNvbnN0IHN0cnVjdCBuZF9uZWlnaGJvcl9hZHZlcnQgKilkcDsKIAkJTkRfVENIRUNLKHAtPm5kX25hX3RhcmdldCk7CiAJCU5EX1BSSU5UKChuZG8sIiwgdGd0IGlzICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmcC0+bmRfbmFfdGFyZ2V0KSkpOwpAQCAtMTA5OSwxMiArMTA4MCwxMiBAQAogCSAgICB9CiAJCWJyZWFrOwogCWNhc2UgTkRfUkVESVJFQ1Q6Ci0jZGVmaW5lIFJEUihpKSAoKHN0cnVjdCBuZF9yZWRpcmVjdCAqKShpKSkKKyNkZWZpbmUgUkRSKGkpICgoY29uc3Qgc3RydWN0IG5kX3JlZGlyZWN0ICopKGkpKQogICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSyhSRFIoZHApLT5uZF9yZF9kc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sIiwgJXMiLCBnZXRuYW1lNihuZG8sIChjb25zdCB1X2NoYXIgKikmUkRSKGRwKS0+bmRfcmRfZHN0KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sIiwgJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sICZSRFIoZHApLT5uZF9yZF9kc3QpKSk7CiAJCU5EX1RDSEVDSyhSRFIoZHApLT5uZF9yZF90YXJnZXQpOwogCQlORF9QUklOVCgobmRvLCIgdG8gJXMiLAotICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRuYW1lNihuZG8sIChjb25zdCB1X2NoYXIqKSZSRFIoZHApLT5uZF9yZF90YXJnZXQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgJlJEUihkcCktPm5kX3JkX3RhcmdldCkpKTsKICNkZWZpbmUgUkVESVJFQ1RMRU4gNDAKIAkJaWYgKG5kby0+bmRvX3ZmbGFnKSB7CiAJCQlpY21wNl9vcHRfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopZHAgKyBSRURJUkVDVExFTiwKQEAgLTExMzMsMTQgKzExMTQsMTQgQEAKICAgICAgICAgICAgICAgICBicmVhazsKIAljYXNlIElDTVA2X0hBRElTQ09WX1JFUExZOgogCQlpZiAobmRvLT5uZG9fdmZsYWcpIHsKLQkJCXN0cnVjdCBpbjZfYWRkciAqaW42OwotCQkJdV9jaGFyICpjcDsKKwkJCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqaW42OworCQkJY29uc3QgdV9jaGFyICpjcDsKIAogCQkJTkRfVENIRUNLKGRwLT5pY21wNl9kYXRhMTZbMF0pOwogCQkJTkRfUFJJTlQoKG5kbywiLCBpZCAweCUwNHgiLCBFWFRSQUNUXzE2QklUUygmZHAtPmljbXA2X2RhdGExNlswXSkpKTsKLQkJCWNwID0gKHVfY2hhciAqKWRwICsgbGVuZ3RoOwotCQkJaW42ID0gKHN0cnVjdCBpbjZfYWRkciAqKShkcCArIDEpOwotCQkJZm9yICg7ICh1X2NoYXIgKilpbjYgPCBjcDsgaW42KyspIHsKKwkJCWNwID0gKGNvbnN0IHVfY2hhciAqKWRwICsgbGVuZ3RoOworCQkJaW42ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKShkcCArIDEpOworCQkJZm9yICg7IChjb25zdCB1X2NoYXIgKilpbjYgPCBjcDsgaW42KyspIHsKIAkJCQlORF9UQ0hFQ0soKmluNik7CiAJCQkJTkRfUFJJTlQoKG5kbywiLCAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgaW42KSkpOwogCQkJfQpAQCAtMTE4Miw3ICsxMTYzLDcgQEAKIGdldF91cHBlcmxheWVyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCAqcHJvdCkKIHsKIAljb25zdCB1X2NoYXIgKmVwOwotCWNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYgPSAoc3RydWN0IGlwNl9oZHIgKilicDsKKwljb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnA7CiAJY29uc3Qgc3RydWN0IHVkcGhkciAqdWg7CiAJY29uc3Qgc3RydWN0IGlwNl9oYmggKmhiaDsKIAljb25zdCBzdHJ1Y3QgaXA2X2ZyYWcgKmZyYWdoOwpAQCAtMTIwNSw3ICsxMTg2LDcgQEAKIAkJc3dpdGNoKG5oKSB7CiAJCWNhc2UgSVBQUk9UT19VRFA6CiAJCWNhc2UgSVBQUk9UT19UQ1A6Ci0JCQl1aCA9IChzdHJ1Y3QgdWRwaGRyICopYnA7CisJCQl1aCA9IChjb25zdCBzdHJ1Y3QgdWRwaGRyICopYnA7CiAJCQlpZiAoTkRfVFRFU1QodWgtPnVoX2Rwb3J0KSkgewogCQkJCSpwcm90ID0gbmg7CiAJCQkJcmV0dXJuKHVoKTsKQEAgLTEyMTcsNyArMTE5OCw3IEBACiAJCWNhc2UgSVBQUk9UT19IT1BPUFRTOgogCQljYXNlIElQUFJPVE9fRFNUT1BUUzoKIAkJY2FzZSBJUFBST1RPX1JPVVRJTkc6Ci0JCQloYmggPSAoc3RydWN0IGlwNl9oYmggKilicDsKKwkJCWhiaCA9IChjb25zdCBzdHJ1Y3QgaXA2X2hiaCAqKWJwOwogCQkJaWYgKCFORF9UVEVTVChoYmgtPmlwNmhfbGVuKSkKIAkJCQlyZXR1cm4oTlVMTCk7CiAJCQluaCA9IGhiaC0+aXA2aF9ueHQ7CkBAIC0xMjI1LDcgKzEyMDYsNyBAQAogCQkJYnJlYWs7CiAKIAkJY2FzZSBJUFBST1RPX0ZSQUdNRU5UOiAvKiB0aGlzIHNob3VsZCBiZSBvZGQsIGJ1dCB0cnkgYW55d2F5ICovCi0JCQlmcmFnaCA9IChzdHJ1Y3QgaXA2X2ZyYWcgKilicDsKKwkJCWZyYWdoID0gKGNvbnN0IHN0cnVjdCBpcDZfZnJhZyAqKWJwOwogCQkJaWYgKCFORF9UVEVTVChmcmFnaC0+aXA2Zl9vZmZsZykpCiAJCQkJcmV0dXJuKE5VTEwpOwogCQkJLyogZnJhZ21lbnRzIHdpdGggbm9uLXplcm8gb2Zmc2V0IGFyZSBtZWFuaW5nbGVzcyAqLwpAQCAtMTIzNiw3ICsxMjE3LDcgQEAKIAkJCWJyZWFrOwogCiAJCWNhc2UgSVBQUk9UT19BSDoKLQkJCWFoID0gKHN0cnVjdCBhaCAqKWJwOworCQkJYWggPSAoY29uc3Qgc3RydWN0IGFoICopYnA7CiAJCQlpZiAoIU5EX1RURVNUKGFoLT5haF9sZW4pKQogCQkJCXJldHVybihOVUxMKTsKIAkJCW5oID0gYWgtPmFoX254dDsKQEAgLTEyNjQsMTggKzEyNDUsMTkgQEAKIAljb25zdCBzdHJ1Y3QgbmRfb3B0X2hvbWVhZ2VudF9pbmZvICpvcGg7CiAJY29uc3Qgc3RydWN0IG5kX29wdF9yb3V0ZV9pbmZvICpvcHJpOwogCWNvbnN0IHVfY2hhciAqY3AsICplcCwgKmRvbXA7Ci0Jc3RydWN0IGluNl9hZGRyIGluNiwgKmluNnA7CisJc3RydWN0IGluNl9hZGRyIGluNjsKKwljb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmluNnA7CiAJc2l6ZV90IGw7CiAJdV9pbnQgaTsKIAotI2RlZmluZSBFQ0hFQ0sodmFyKSBpZiAoKHVfY2hhciAqKSYodmFyKSA+IGVwIC0gc2l6ZW9mKHZhcikpIHJldHVybgorI2RlZmluZSBFQ0hFQ0sodmFyKSBpZiAoKGNvbnN0IHVfY2hhciAqKSYodmFyKSA+IGVwIC0gc2l6ZW9mKHZhcikpIHJldHVybgogCiAJY3AgPSBicDsKIAkvKiAnZXAnIHBvaW50cyB0byB0aGUgZW5kIG9mIGF2YWlsYWJsZSBkYXRhLiAqLwogCWVwID0gbmRvLT5uZG9fc25hcGVuZDsKIAogCXdoaWxlIChjcCA8IGVwKSB7Ci0JCW9wID0gKHN0cnVjdCBuZF9vcHRfaGRyICopY3A7CisJCW9wID0gKGNvbnN0IHN0cnVjdCBuZF9vcHRfaGRyICopY3A7CiAKIAkJRUNIRUNLKG9wLT5uZF9vcHRfbGVuKTsKIAkJaWYgKHJlc2lkIDw9IDApCkBAIC0xMzAxLDcgKzEyODMsNyBAQAogCQkJcHJpbnRfbGxhZGRyKG5kbywgY3AgKyAyLCBsKTsKIAkJCWJyZWFrOwogCQljYXNlIE5EX09QVF9QUkVGSVhfSU5GT1JNQVRJT046Ci0JCQlvcHAgPSAoc3RydWN0IG5kX29wdF9wcmVmaXhfaW5mbyAqKW9wOworCQkJb3BwID0gKGNvbnN0IHN0cnVjdCBuZF9vcHRfcHJlZml4X2luZm8gKilvcDsKIAkJCU5EX1RDSEVDSyhvcHAtPm5kX29wdF9waV9wcmVmaXgpOwogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywiJXMvJXUlcywgRmxhZ3MgWyVzXSwgdmFsaWQgdGltZSAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmb3BwLT5uZF9vcHRfcGlfcHJlZml4KSwKQEAgLTEzMTYsMTQgKzEyOTgsMTQgQEAKIAkJCS8qIHh4eCAqLwogCQkJYnJlYWs7CiAJCWNhc2UgTkRfT1BUX01UVToKLQkJCW9wbSA9IChzdHJ1Y3QgbmRfb3B0X210dSAqKW9wOworCQkJb3BtID0gKGNvbnN0IHN0cnVjdCBuZF9vcHRfbXR1ICopb3A7CiAJCQlORF9UQ0hFQ0sob3BtLT5uZF9vcHRfbXR1X210dSk7CiAJCQlORF9QUklOVCgobmRvLCIgJXUlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMoJm9wbS0+bmRfb3B0X210dV9tdHUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChvcC0+bmRfb3B0X2xlbiAhPSAxKSA/ICJiYWQgb3B0aW9uIGxlbmd0aCIgOiAiIiApKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCQljYXNlIE5EX09QVF9SRE5TUzoKLQkJCW9wcmQgPSAoc3RydWN0IG5kX29wdF9yZG5zcyAqKW9wOworCQkJb3ByZCA9IChjb25zdCBzdHJ1Y3QgbmRfb3B0X3JkbnNzICopb3A7CiAJCQlsID0gKG9wLT5uZF9vcHRfbGVuIC0gMSkgLyAyOwogCQkJTkRfUFJJTlQoKG5kbywiIGxpZmV0aW1lICV1cywiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKCZvcHJkLT5uZF9vcHRfcmRuc3NfbGlmZXRpbWUpKSk7CkBAIC0xMzM0LDcgKzEzMTYsNyBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgTkRfT1BUX0ROU1NMOgotCQkJb3BkcyA9IChzdHJ1Y3QgbmRfb3B0X2Ruc3NsICopb3A7CisJCQlvcGRzID0gKGNvbnN0IHN0cnVjdCBuZF9vcHRfZG5zc2wgKilvcDsKIAkJCU5EX1BSSU5UKChuZG8sIiBsaWZldGltZSAldXMsIGRvbWFpbihzKToiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKCZvcGRzLT5uZF9vcHRfZG5zc2xfbGlmZXRpbWUpKSk7CiAJCQlkb21wID0gY3AgKyA4OyAvKiBkb21haW4gbmFtZXMsIHZhcmlhYmxlLXNpemVkLCBSRkMxMDM1LWVuY29kZWQgKi8KQEAgLTEzNDYsMjIgKzEzMjgsMjIgQEAKIAkJCX0KIAkJCWJyZWFrOwogCQljYXNlIE5EX09QVF9BRFZJTlRFUlZBTDoKLQkJCW9wYSA9IChzdHJ1Y3QgbmRfb3B0X2FkdmludGVydmFsICopb3A7CisJCQlvcGEgPSAoY29uc3Qgc3RydWN0IG5kX29wdF9hZHZpbnRlcnZhbCAqKW9wOwogCQkJTkRfVENIRUNLKG9wYS0+bmRfb3B0X2Fkdl9pbnRlcnZhbCk7CiAJCQlORF9QUklOVCgobmRvLCIgJXVtcyIsIEVYVFJBQ1RfMzJCSVRTKCZvcGEtPm5kX29wdF9hZHZfaW50ZXJ2YWwpKSk7CiAJCQlicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIE5EX09QVF9IT01FQUdFTlRfSU5GTzoKLQkJCW9waCA9IChzdHJ1Y3QgbmRfb3B0X2hvbWVhZ2VudF9pbmZvICopb3A7CisJCQlvcGggPSAoY29uc3Qgc3RydWN0IG5kX29wdF9ob21lYWdlbnRfaW5mbyAqKW9wOwogCQkJTkRfVENIRUNLKG9waC0+bmRfb3B0X2hhaV9saWZldGltZSk7CiAJCQlORF9QUklOVCgobmRvLCIgcHJlZmVyZW5jZSAldSwgbGlmZXRpbWUgJXUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKCZvcGgtPm5kX29wdF9oYWlfcHJlZmVyZW5jZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoJm9waC0+bmRfb3B0X2hhaV9saWZldGltZSkpKTsKIAkJCWJyZWFrOwogCQljYXNlIE5EX09QVF9ST1VURV9JTkZPOgotCQkJb3ByaSA9IChzdHJ1Y3QgbmRfb3B0X3JvdXRlX2luZm8gKilvcDsKKwkJCW9wcmkgPSAoY29uc3Qgc3RydWN0IG5kX29wdF9yb3V0ZV9pbmZvICopb3A7CiAJCQlORF9UQ0hFQ0sob3ByaS0+bmRfb3B0X3J0aV9saWZldGltZSk7CiAJCQltZW1zZXQoJmluNiwgMCwgc2l6ZW9mKGluNikpOwotCQkJaW42cCA9IChzdHJ1Y3QgaW42X2FkZHIgKikob3ByaSArIDEpOworCQkJaW42cCA9IChjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKikob3ByaSArIDEpOwogCQkJc3dpdGNoIChvcC0+bmRfb3B0X2xlbikgewogCQkJY2FzZSAxOgogCQkJCWJyZWFrOwpAQCAtMTQwNywxMyArMTM4OSwxMyBAQAogc3RhdGljIHZvaWQKIG1sZDZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnApCiB7Ci0JY29uc3Qgc3RydWN0IG1sZDZfaGRyICptcCA9IChzdHJ1Y3QgbWxkNl9oZHIgKilicDsKKwljb25zdCBzdHJ1Y3QgbWxkNl9oZHIgKm1wID0gKGNvbnN0IHN0cnVjdCBtbGQ2X2hkciAqKWJwOwogCWNvbnN0IHVfY2hhciAqZXA7CiAKIAkvKiAnZXAnIHBvaW50cyB0byB0aGUgZW5kIG9mIGF2YWlsYWJsZSBkYXRhLiAqLwogCWVwID0gbmRvLT5uZG9fc25hcGVuZDsKIAotCWlmICgodV9jaGFyICopbXAgKyBzaXplb2YoKm1wKSA+IGVwKQorCWlmICgoY29uc3QgdV9jaGFyICopbXAgKyBzaXplb2YoKm1wKSA+IGVwKQogCQlyZXR1cm47CiAKIAlORF9QUklOVCgobmRvLCJtYXggcmVzcCBkZWxheTogJWQgIiwgRVhUUkFDVF8xNkJJVFMoJm1wLT5tbGQ2X21heGRlbGF5KSkpOwpAQCAtMTQyMyw3ICsxNDA1LDcgQEAKIHN0YXRpYyB2b2lkCiBtbGR2Ml9yZXBvcnRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbikKIHsKLSAgICBzdHJ1Y3QgaWNtcDZfaGRyICppY3AgPSAoc3RydWN0IGljbXA2X2hkciAqKSBicDsKKyAgICBjb25zdCBzdHJ1Y3QgaWNtcDZfaGRyICppY3AgPSAoY29uc3Qgc3RydWN0IGljbXA2X2hkciAqKSBicDsKICAgICB1X2ludCBncm91cCwgbnNyY3MsIG5ncm91cHM7CiAgICAgdV9pbnQgaSwgajsKIApAQCAtMTQ4MSw3ICsxNDYzLDcgQEAKIHN0YXRpYyB2b2lkCiBtbGR2Ml9xdWVyeV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuKQogewotICAgIHN0cnVjdCBpY21wNl9oZHIgKmljcCA9IChzdHJ1Y3QgaWNtcDZfaGRyICopIGJwOworICAgIGNvbnN0IHN0cnVjdCBpY21wNl9oZHIgKmljcCA9IChjb25zdCBzdHJ1Y3QgaWNtcDZfaGRyICopIGJwOwogICAgIHVfaW50IG1yYzsKICAgICBpbnQgbXJ0LCBxcWk7CiAgICAgdV9pbnQgbnNyY3M7CkBAIC0xNTkxLDggKzE1NzMsOCBAQAogCiAJaWYgKGVwIDwgYnApCiAJCXJldHVybjsKLQlkcCA9IChzdHJ1Y3QgaWNtcDZfaGRyICopYnA7Ci0Jbmk2ID0gKHN0cnVjdCBpY21wNl9ub2RlaW5mbyAqKWJwOworCWRwID0gKGNvbnN0IHN0cnVjdCBpY21wNl9oZHIgKilicDsKKwluaTYgPSAoY29uc3Qgc3RydWN0IGljbXA2X25vZGVpbmZvICopYnA7CiAJc2l6ID0gZXAgLSBicDsKIAogCXN3aXRjaCAobmk2LT5uaV90eXBlKSB7CkBAIC0xNjA1LDcgKzE1ODcsNyBAQAogCQlORF9QUklOVCgobmRvLCIgbm9kZSBpbmZvcm1hdGlvbiBxdWVyeSIpKTsKIAogCQlORF9UQ0hFQ0syKCpkcCwgc2l6ZW9mKCpuaTYpKTsKLQkJbmk2ID0gKHN0cnVjdCBpY21wNl9ub2RlaW5mbyAqKWRwOworCQluaTYgPSAoY29uc3Qgc3RydWN0IGljbXA2X25vZGVpbmZvICopZHA7CiAJCU5EX1BSSU5UKChuZG8sIiAoIikpOwkvKikqLwogCQlzd2l0Y2ggKEVYVFJBQ1RfMTZCSVRTKCZuaTYtPm5pX3F0eXBlKSkgewogCQljYXNlIE5JX1FUWVBFX05PT1A6CkBAIC0xNjY5LDcgKzE2NTEsNyBAQAogCQkJCWJyZWFrOwogCQkJfQogCQkJTkRfUFJJTlQoKG5kbywiLCBzdWJqZWN0PSVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRuYW1lNihuZG8sIChjb25zdCB1X2NoYXIgKikobmk2ICsgMSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCBuaTYgKyAxKSkpOwogCQkJYnJlYWs7CiAJCWNhc2UgSUNNUDZfTklfU1VCSl9GUUROOgogCQkJTkRfUFJJTlQoKG5kbywiLCBzdWJqZWN0PUROUyBuYW1lIikpOwpAQCAtMTY5Nyw3ICsxNjc5LDcgQEAKIAkJCQlicmVhazsKIAkJCX0KIAkJCU5EX1BSSU5UKChuZG8sIiwgc3ViamVjdD0lcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2V0bmFtZShuZG8sIChjb25zdCB1X2NoYXIgKikobmk2ICsgMSkpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIG5pNiArIDEpKSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCU5EX1BSSU5UKChuZG8sIiwgdW5rbm93biBzdWJqZWN0IikpOwpAQCAtMTcxNiw3ICsxNjk4LDcgQEAKIAogCQluZWVkY29tbWEgPSAwOwogCi0JCW5pNiA9IChzdHJ1Y3QgaWNtcDZfbm9kZWluZm8gKilkcDsKKwkJbmk2ID0gKGNvbnN0IHN0cnVjdCBpY21wNl9ub2RlaW5mbyAqKWRwOwogCQlORF9QUklOVCgobmRvLCIgbm9kZSBpbmZvcm1hdGlvbiByZXBseSIpKTsKIAkJTkRfUFJJTlQoKG5kbywiICgiKSk7CS8qKSovCiAJCXN3aXRjaCAobmk2LT5uaV9jb2RlKSB7CkBAIC0xNzg0LDcgKzE3NjYsNyBAQAogCQkJfSBlbHNlCiAJCQkJZG5zbmFtZV9wcmludChuZG8sIGNwLCBlcCk7CiAJCQlpZiAoKEVYVFJBQ1RfMTZCSVRTKCZuaTYtPm5pX2ZsYWdzKSAmIDB4MDEpICE9IDApCi0JCQkJTkRfUFJJTlQoKG5kbywiIFtUVEw9JXVdIiwgKih1aW50MzJfdCAqKShuaTYgKyAxKSkpOworCQkJCU5EX1BSSU5UKChuZG8sIiBbVFRMPSV1XSIsIEVYVFJBQ1RfMzJCSVRTKG5pNiArIDEpKSk7CiAJCQlicmVhazsKIAkJY2FzZSBOSV9RVFlQRV9OT0RFQUREUjoKIAkJCWlmIChuZWVkY29tbWEpCkBAIC0xNzk0LDcgKzE3NzYsNyBAQAogCQkJd2hpbGUgKGkgPCBzaXopIHsKIAkJCQlpZiAoaSArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpICsgc2l6ZW9mKGludDMyX3QpID4gc2l6KQogCQkJCQlicmVhazsKLQkJCQlORF9QUklOVCgobmRvLCIgJXMiLCBnZXRuYW1lNihuZG8sIGJwICsgaSkpKTsKKwkJCQlORF9QUklOVCgobmRvLCIgJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sIGJwICsgaSkpKTsKIAkJCQlpICs9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogCQkJCU5EX1BSSU5UKChuZG8sIiglZCkiLCAoaW50MzJfdClFWFRSQUNUXzMyQklUUyhicCArIGkpKSk7CiAJCQkJaSArPSBzaXplb2YoaW50MzJfdCk7CkBAIC0xODMzLDE0ICsxODE1LDE0IEBACiB7CiAJY29uc3Qgc3RydWN0IGljbXA2X3JvdXRlcl9yZW51bSAqcnI2OwogCWNvbnN0IGNoYXIgKmNwOwotCXN0cnVjdCBycl9wY29fbWF0Y2ggKm1hdGNoOwotCXN0cnVjdCBycl9wY29fdXNlICp1c2U7CisJY29uc3Qgc3RydWN0IHJyX3Bjb19tYXRjaCAqbWF0Y2g7CisJY29uc3Qgc3RydWN0IHJyX3Bjb191c2UgKnVzZTsKIAljaGFyIGhidWZbTklfTUFYSE9TVF07CiAJaW50IG47CiAKIAlpZiAoZXAgPCBicCkKIAkJcmV0dXJuOwotCXJyNiA9IChzdHJ1Y3QgaWNtcDZfcm91dGVyX3JlbnVtICopYnA7CisJcnI2ID0gKGNvbnN0IHN0cnVjdCBpY21wNl9yb3V0ZXJfcmVudW0gKilicDsKIAljcCA9IChjb25zdCBjaGFyICopKHJyNiArIDEpOwogCiAJTkRfVENIRUNLKHJyNi0+cnJfcmVzZXJ2ZWQpOwpAQCAtMTg4MSw3ICsxODYzLDcgQEAKIAl9CiAKIAlpZiAocnI2LT5ycl9jb2RlID09IElDTVA2X1JPVVRFUl9SRU5VTUJFUklOR19DT01NQU5EKSB7Ci0JCW1hdGNoID0gKHN0cnVjdCBycl9wY29fbWF0Y2ggKiljcDsKKwkJbWF0Y2ggPSAoY29uc3Qgc3RydWN0IHJyX3Bjb19tYXRjaCAqKWNwOwogCQljcCA9IChjb25zdCBjaGFyICopKG1hdGNoICsgMSk7CiAKIAkJTkRfVENIRUNLKG1hdGNoLT5ycG1fcHJlZml4KTsKQEAgLTE5MDMsNyArMTg4NSw3IEBACiAJCQlORF9QUklOVCgobmRvLCIsbWluPSV1IiwgbWF0Y2gtPnJwbV9taW5sZW4pKTsKIAkJCU5EX1BSSU5UKChuZG8sIixtYXg9JXUiLCBtYXRjaC0+cnBtX21heGxlbikpOwogCQl9Ci0JCWlmIChpbmV0X250b3AoQUZfSU5FVDYsICZtYXRjaC0+cnBtX3ByZWZpeCwgaGJ1Ziwgc2l6ZW9mKGhidWYpKSkKKwkJaWYgKGFkZHJ0b3N0cjYoJm1hdGNoLT5ycG1fcHJlZml4LCBoYnVmLCBzaXplb2YoaGJ1ZikpKQogCQkJTkRfUFJJTlQoKG5kbywiLCVzLyV1IiwgaGJ1ZiwgbWF0Y2gtPnJwbV9tYXRjaGxlbikpOwogCQllbHNlCiAJCQlORF9QUklOVCgobmRvLCIsPy8ldSIsIG1hdGNoLT5ycG1fbWF0Y2hsZW4pKTsKQEAgLTE5MTUsNyArMTg5Nyw3IEBACiAJCQlnb3RvIHRydW5jOwogCQluIC89IDQ7CiAJCXdoaWxlIChuLS0gPiAwKSB7Ci0JCQl1c2UgPSAoc3RydWN0IHJyX3Bjb191c2UgKiljcDsKKwkJCXVzZSA9IChjb25zdCBzdHJ1Y3QgcnJfcGNvX3VzZSAqKWNwOwogCQkJY3AgPSAoY29uc3QgY2hhciAqKSh1c2UgKyAxKTsKIAogCQkJTkRfVENIRUNLKHVzZS0+cnB1X3ByZWZpeCk7CkBAIC0xOTQ2LDggKzE5MjgsNyBAQAogCQkJCQlORF9QUklOVCgobmRvLCJwbHRpbWU9JXUsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMoJnVzZS0+cnB1X3BsdGltZSkpKTsKIAkJCX0KLQkJCWlmIChpbmV0X250b3AoQUZfSU5FVDYsICZ1c2UtPnJwdV9wcmVmaXgsIGhidWYsCi0JCQkgICAgc2l6ZW9mKGhidWYpKSkKKwkJCWlmIChhZGRydG9zdHI2KCZ1c2UtPnJwdV9wcmVmaXgsIGhidWYsIHNpemVvZihoYnVmKSkpCiAJCQkJTkRfUFJJTlQoKG5kbywiJXMvJXUvJXUiLCBoYnVmLCB1c2UtPnJwdV91c2VsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UtPnJwdV9rZWVwbGVuKSk7CiAJCQllbHNlCkBAIC0xOTY0LDggKzE5NDUsNiBAQAogCU5EX1BSSU5UKChuZG8sIlt8aWNtcDZdIikpOwogfQogCi0jZW5kaWYgLyogSU5FVDYgKi8KLQogLyoKICAqIExvY2FsIFZhcmlhYmxlczoKICAqIGMtc3R5bGU6IHdoaXRlc21pdGgKZGlmZiAtLWdpdCBhL3ByaW50LWlnbXAuYyBiL3ByaW50LWlnbXAuYwppbmRleCBlNDgwOGE3Li4wYmI3Zjk3IDEwMDY0NAotLS0gYS9wcmludC1pZ21wLmMKKysrIGIvcHJpbnQtaWdtcC5jCkBAIC0xOSwxNiArMTksMTcgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSW50ZXJuZXQgR3JvdXAgTWFuYWdlbWVudCBQcm90b2NvbCAoSUdNUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIgICAgICAgICAgICAvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpZm5kZWYgSU5fQ0xBU1NECiAjZGVmaW5lIElOX0NMQVNTRChpKSAoKChpbnQzMl90KShpKSAmIDB4ZjAwMDAwMDApID09IDB4ZTAwMDAwMDApCkBAIC0yMDQsNyArMjA1LDcgQEAKICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCByZWdpc3RlciB1X2ludCBsZW4pCiB7CiAgICAgdV9pbnQgbXJjOwotICAgIGludCBtcnQ7CisgICAgdV9pbnQgbXJ0OwogICAgIHVfaW50IG5zcmNzOwogICAgIHJlZ2lzdGVyIHVfaW50IGk7CiAKQEAgLTIyNiw3ICsyMjcsNyBAQAogICAgICAgICBpZiAobXJ0IDwgNjAwKSB7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJS4xZnMiLCBtcnQgKiAwLjEpKTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHJlbHRzX3ByaW50KG5kbywgbXJ0IC8gMTApOworICAgICAgICAgICAgdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBtcnQgLyAxMCk7CiAgICAgICAgIH0KIAlORF9QUklOVCgobmRvLCAiXSIpKTsKICAgICB9CkBAIC0zMjcsNyArMzI4LDcgQEAKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0gICAgaWYgKG5kby0+bmRvX3ZmbGFnICYmIE5EX1RURVNUMihicFswXSwgbGVuKSkgeworICAgIGlmIChuZG8tPm5kb192ZmxhZyAmJiBsZW4gPj0gNCAmJiBORF9UVEVTVDIoYnBbMF0sIGxlbikpIHsKICAgICAgICAgLyogQ2hlY2sgdGhlIElHTVAgY2hlY2tzdW0gKi8KICAgICAgICAgdmVjWzBdLnB0ciA9IGJwOwogICAgICAgICB2ZWNbMF0ubGVuID0gbGVuOwpkaWZmIC0tZ2l0IGEvcHJpbnQtaWdycC5jIGIvcHJpbnQtaWdycC5jCmluZGV4IGZiYjMxMzQuLmI2ZWFmMzEgMTAwNjQ0Ci0tLSBhL3ByaW50LWlncnAuYworKysgYi9wcmludC1pZ3JwLmMKQEAgLTIxLDE1ICsyMSwxNiBAQAogICogSW5pdGlhbCBjb250cmlidXRpb24gZnJvbSBGcmFuY2lzIER1cG9udCAoZnJhbmNpcy5kdXBvbnRAaW5yaWEuZnIpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSW50ZXJpb3IgR2F0ZXdheSBSb3V0aW5nIFByb3RvY29sIChJR1JQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAvKiBDaXNjbyBJR1JQIGRlZmluaXRpb25zICovCiAKQEAgLTY1LDcgKzY2LDcgQEAKICNkZWZpbmUgSUdSUF9SVEVfU0laRQkxNAkvKiBkb24ndCBiZWxpZXZlIHNpemVvZiAhICovCiAKIHN0YXRpYyB2b2lkCi1pZ3JwX2VudHJ5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBzdHJ1Y3QgaWdycHJ0ZSAqaWdyLAoraWdycF9lbnRyeV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGlncnBydGUgKmlnciwKICAgICByZWdpc3RlciBpbnQgaXNfaW50ZXJpb3IsIHJlZ2lzdGVyIGludCBpc19leHRlcmlvcikKIHsKIAlyZWdpc3RlciB1X2ludCBkZWxheSwgYmFuZHdpZHRoOwpAQCAtMTAzLDEyICsxMDQsMTIgQEAKIHZvaWQKIGlncnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbmd0aCkKIHsKLQlyZWdpc3RlciBzdHJ1Y3QgaWdycGhkciAqaGRyOwotCXJlZ2lzdGVyIHVfY2hhciAqY3A7CisJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGlncnBoZHIgKmhkcjsKKwlyZWdpc3RlciBjb25zdCB1X2NoYXIgKmNwOwogCXVfaW50IG5pbnQsIG5zeXMsIG5leHQ7CiAKLQloZHIgPSAoc3RydWN0IGlncnBoZHIgKilicDsKLQljcCA9ICh1X2NoYXIgKikoaGRyICsgMSk7CisJaGRyID0gKGNvbnN0IHN0cnVjdCBpZ3JwaGRyICopYnA7CisJY3AgPSAoY29uc3QgdV9jaGFyICopKGhkciArIDEpOwogCU5EX1BSSU5UKChuZG8sICJpZ3JwOiIpKTsKIAogCS8qIEhlYWRlciAqLwpAQCAtMTMwLDE1ICsxMzEsMTUgQEAKIAl3aGlsZSAobGVuZ3RoID49IElHUlBfUlRFX1NJWkUpIHsKIAkJaWYgKG5pbnQgPiAwKSB7CiAJCQlORF9UQ0hFQ0syKCpjcCwgSUdSUF9SVEVfU0laRSk7Ci0JCQlpZ3JwX2VudHJ5X3ByaW50KG5kbywgKHN0cnVjdCBpZ3JwcnRlICopY3AsIDEsIDApOworCQkJaWdycF9lbnRyeV9wcmludChuZG8sIChjb25zdCBzdHJ1Y3QgaWdycHJ0ZSAqKWNwLCAxLCAwKTsKIAkJCS0tbmludDsKIAkJfSBlbHNlIGlmIChuc3lzID4gMCkgewogCQkJTkRfVENIRUNLMigqY3AsIElHUlBfUlRFX1NJWkUpOwotCQkJaWdycF9lbnRyeV9wcmludChuZG8sIChzdHJ1Y3QgaWdycHJ0ZSAqKWNwLCAwLCAwKTsKKwkJCWlncnBfZW50cnlfcHJpbnQobmRvLCAoY29uc3Qgc3RydWN0IGlncnBydGUgKiljcCwgMCwgMCk7CiAJCQktLW5zeXM7CiAJCX0gZWxzZSBpZiAobmV4dCA+IDApIHsKIAkJCU5EX1RDSEVDSzIoKmNwLCBJR1JQX1JURV9TSVpFKTsKLQkJCWlncnBfZW50cnlfcHJpbnQobmRvLCAoc3RydWN0IGlncnBydGUgKiljcCwgMCwgMSk7CisJCQlpZ3JwX2VudHJ5X3ByaW50KG5kbywgKGNvbnN0IHN0cnVjdCBpZ3JwcnRlICopY3AsIDAsIDEpOwogCQkJLS1uZXh0OwogCQl9IGVsc2UgewogCQkJTkRfUFJJTlQoKG5kbywgIiBbZXh0cmEgYnl0ZXMgJWRdIiwgbGVuZ3RoKSk7CmRpZmYgLS1naXQgYS9wcmludC1pcC5jIGIvcHJpbnQtaXAuYwppbmRleCBjZWVhNTM2Li5iYjE1NTRmIDEwMDY0NAotLS0gYS9wcmludC1pcC5jCisrKyBiL3ByaW50LWlwLmMKQEAgLTE5LDE4ICsxOSwxOSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJUCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjaW5jbHVkZSAiaXAuaCIKICNpbmNsdWRlICJpcHByb3RvLmgiCkBAIC0xMjMsNyArMTI0LDcgQEAKIAkJfQogCX0KIHRydW5jOgotCVVOQUxJR05FRF9NRU1DUFkoJnJldHZhbCwgJmlwLT5pcF9kc3Quc19hZGRyLCBzaXplb2YodWludDMyX3QpKTsKKwlVTkFMSUdORURfTUVNQ1BZKCZyZXR2YWwsICZpcC0+aXBfZHN0LCBzaXplb2YodWludDMyX3QpKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCkBAIC0xNDgsOSArMTQ5LDkgQEAKIAlwaC5sZW4gPSBodG9ucygodWludDE2X3QpbGVuKTsKIAlwaC5tYnogPSAwOwogCXBoLnByb3RvID0gbmV4dF9wcm90bzsKLQlVTkFMSUdORURfTUVNQ1BZKCZwaC5zcmMsICZpcC0+aXBfc3JjLnNfYWRkciwgc2l6ZW9mKHVpbnQzMl90KSk7CisJVU5BTElHTkVEX01FTUNQWSgmcGguc3JjLCAmaXAtPmlwX3NyYywgc2l6ZW9mKHVpbnQzMl90KSk7CiAJaWYgKElQX0hMKGlwKSA9PSA1KQotCQlVTkFMSUdORURfTUVNQ1BZKCZwaC5kc3QsICZpcC0+aXBfZHN0LnNfYWRkciwgc2l6ZW9mKHVpbnQzMl90KSk7CisJCVVOQUxJR05FRF9NRU1DUFkoJnBoLmRzdCwgJmlwLT5pcF9kc3QsIHNpemVvZih1aW50MzJfdCkpOwogCWVsc2UKIAkJcGguZHN0ID0gaXBfZmluZGRzdChuZG8sIGlwKTsKIApAQCAtMzI0LDEyICszMjUsMTUgQEAKIAkgICAgICAgc3RydWN0IGlwX3ByaW50X2RlbXV4X3N0YXRlICppcGRzKQogewogCXN0cnVjdCBwcm90b2VudCAqcHJvdG87Ci0Jc3RydWN0IGNrc3VtX3ZlYyB2ZWNbMV07CiAKIGFnYWluOgogCXN3aXRjaCAoaXBkcy0+bmgpIHsKIAogCWNhc2UgSVBQUk9UT19BSDoKKwkJaWYgKCFORF9UVEVTVCgqaXBkcy0+Y3ApKSB7CisJCQlORF9QUklOVCgobmRvLCAiW3xBSF0iKSk7CisJCQlicmVhazsKKwkJfQogCQlpcGRzLT5uaCA9ICppcGRzLT5jcDsKIAkJaXBkcy0+YWR2YW5jZSA9IGFoX3ByaW50KG5kbywgaXBkcy0+Y3ApOwogCQlpZiAoaXBkcy0+YWR2YW5jZSA8PSAwKQpAQCAtMzU0LDE0ICszNTgsMTQgQEAKIAogCWNhc2UgSVBQUk9UT19JUENPTVA6CiAJewotCQlpbnQgZW5oOwotCQlpcGRzLT5hZHZhbmNlID0gaXBjb21wX3ByaW50KG5kbywgaXBkcy0+Y3AsICZlbmgpOwotCQlpZiAoaXBkcy0+YWR2YW5jZSA8PSAwKQotCQkJYnJlYWs7Ci0JCWlwZHMtPmNwICs9IGlwZHMtPmFkdmFuY2U7Ci0JCWlwZHMtPmxlbiAtPSBpcGRzLT5hZHZhbmNlOwotCQlpcGRzLT5uaCA9IGVuaCAmIDB4ZmY7Ci0JCWdvdG8gYWdhaW47CisJCWlwY29tcF9wcmludChuZG8sIGlwZHMtPmNwKTsKKwkJLyoKKwkJICogRWl0aGVyIHRoaXMgaGFzIGRlY29tcHJlc3NlZCB0aGUgcGF5bG9hZCBhbmQKKwkJICogcHJpbnRlZCBpdCwgaW4gd2hpY2ggY2FzZSB0aGVyZSdzIG5vdGhpbmcgbW9yZQorCQkgKiB0byBkbywgb3IgaXQgaGFzbid0LCBpbiB3aGljaCBjYXNlIHRoZXJlJ3MKKwkJICogbm90aGluZyBtb3JlIHRvIGRvLgorCQkgKi8KKwkJYnJlYWs7CiAJfQogCiAJY2FzZSBJUFBST1RPX1NDVFA6CkBAIC00NTUsOSArNDU5LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIElQUFJPVE9fUElNOgotCQl2ZWNbMF0ucHRyID0gaXBkcy0+Y3A7Ci0JCXZlY1swXS5sZW4gPSBpcGRzLT5sZW47Ci0JCXBpbV9wcmludChuZG8sIGlwZHMtPmNwLCBpcGRzLT5sZW4sIGluX2Nrc3VtKHZlYywgMSkpOworCQlwaW1fcHJpbnQobmRvLCBpcGRzLT5jcCwgaXBkcy0+bGVuLCAoY29uc3QgdV9jaGFyICopaXBkcy0+aXApOwogCQlicmVhazsKIAogCWNhc2UgSVBQUk9UT19WUlJQOgpAQCAtNTI4LDEzICs1MzAsMTQgQEAKIAogCWlwZHMtPmlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWJwOwogCU5EX1RDSEVDSyhpcGRzLT5pcC0+aXBfdmhsKTsKLQlpZiAoSVBfVihpcGRzLT5pcCkgIT0gNCkgeyAvKiBwcmludCB2ZXJzaW9uIGlmICE9IDQgKi8KKwlpZiAoSVBfVihpcGRzLT5pcCkgIT0gNCkgeyAvKiBwcmludCB2ZXJzaW9uIGFuZCBmYWlsIGlmICE9IDQgKi8KIAkgICAgaWYgKElQX1YoaXBkcy0+aXApID09IDYpCiAJICAgICAgTkRfUFJJTlQoKG5kbywgIklQNiwgd3JvbmcgbGluay1sYXllciBlbmNhcHN1bGF0aW9uICIpKTsKIAkgICAgZWxzZQogCSAgICAgIE5EX1BSSU5UKChuZG8sICJJUCV1ICIsIElQX1YoaXBkcy0+aXApKSk7CisJICAgIHJldHVybjsKIAl9Ci0JZWxzZSBpZiAoIW5kby0+bmRvX2VmbGFnKQorCWlmICghbmRvLT5uZG9fZWZsYWcpCiAJCU5EX1BSSU5UKChuZG8sICJJUCAiKSk7CiAKIAlORF9UQ0hFQ0soKmlwZHMtPmlwKTsKQEAgLTU4MiwxNyArNTg1LDIyIEBACiAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZykgewogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIih0b3MgMHgleCIsIChpbnQpaXBkcy0+aXAtPmlwX3RvcykpOwogICAgICAgICAgICAgLyogRUNOIGJpdHMgKi8KLSAgICAgICAgICAgIGlmIChpcGRzLT5pcC0+aXBfdG9zICYgMHgwMykgewotICAgICAgICAgICAgICAgIHN3aXRjaCAoaXBkcy0+aXAtPmlwX3RvcyAmIDB4MDMpIHsKLSAgICAgICAgICAgICAgICBjYXNlIDE6Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsRUNUKDEpIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDI6Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsRUNUKDApIikpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsQ0UiKSk7Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgc3dpdGNoIChpcGRzLT5pcC0+aXBfdG9zICYgMHgwMykgeworCisgICAgICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLEVDVCgxKSIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsRUNUKDApIikpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIixDRSIpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgaWYgKGlwZHMtPmlwLT5pcF90dGwgPj0gMSkKQEAgLTYxNSwxMiArNjIzLDEyIEBACiAKICAgICAgICAgICAgIGlmICgoaGxlbiAtIHNpemVvZihzdHJ1Y3QgaXApKSA+IDApIHsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBvcHRpb25zICgiKSk7Ci0gICAgICAgICAgICAgICAgaXBfb3B0cHJpbnQobmRvLCAodV9jaGFyICopKGlwZHMtPmlwICsgMSksIGhsZW4gLSBzaXplb2Yoc3RydWN0IGlwKSk7CisgICAgICAgICAgICAgICAgaXBfb3B0cHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKGlwZHMtPmlwICsgMSksIGhsZW4gLSBzaXplb2Yoc3RydWN0IGlwKSk7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIikiKSk7CiAgICAgICAgICAgICB9CiAKLQkgICAgaWYgKCFuZG8tPm5kb19LZmxhZyAmJiAodV9jaGFyICopaXBkcy0+aXAgKyBobGVuIDw9IG5kby0+bmRvX3NuYXBlbmQpIHsKLQkgICAgICAgIHZlY1swXS5wdHIgPSAoY29uc3QgdWludDhfdCAqKSh2b2lkICopaXBkcy0+aXA7CisJICAgIGlmICghbmRvLT5uZG9fS2ZsYWcgJiYgKGNvbnN0IHVfY2hhciAqKWlwZHMtPmlwICsgaGxlbiA8PSBuZG8tPm5kb19zbmFwZW5kKSB7CisJICAgICAgICB2ZWNbMF0ucHRyID0gKGNvbnN0IHVpbnQ4X3QgKikoY29uc3Qgdm9pZCAqKWlwZHMtPmlwOwogCSAgICAgICAgdmVjWzBdLmxlbiA9IGhsZW47CiAJICAgICAgICBzdW0gPSBpbl9ja3N1bSh2ZWMsIDEpOwogCQlpZiAoc3VtICE9IDApIHsKQEAgLTY0OSwyMiArNjU3LDI0IEBACiAJCX0KIAkJaXBfcHJpbnRfZGVtdXgobmRvLCBpcGRzKTsKIAl9IGVsc2UgewotCSAgICAvKiBVbHRyYSBxdWlldCBub3cgbWVhbnMgdGhhdCBhbGwgdGhpcyBzdHVmZiBzaG91bGQgYmUgc3VwcHJlc3NlZCAqLwotCSAgICBpZiAobmRvLT5uZG9fcWZsYWcgPiAxKSByZXR1cm47CisJCS8qCisJCSAqIFVsdHJhIHF1aWV0IG5vdyBtZWFucyB0aGF0IGFsbCB0aGlzIHN0dWZmIHNob3VsZCBiZQorCQkgKiBzdXBwcmVzc2VkLgorCQkgKi8KKwkJaWYgKG5kby0+bmRvX3FmbGFnID4gMSkKKwkJCXJldHVybjsKIAotCSAgICAvKgotCSAgICAgKiBpZiB0aGlzIGlzbid0IHRoZSBmaXJzdCBmcmFnLCB3ZSdyZSBtaXNzaW5nIHRoZQotCSAgICAgKiBuZXh0IGxldmVsIHByb3RvY29sIGhlYWRlci4gIHByaW50IHRoZSBpcCBhZGRyCi0JICAgICAqIGFuZCB0aGUgcHJvdG9jb2wuCi0JICAgICAqLwotCQlpZiAoaXBkcy0+b2ZmICYgMHgxZmZmKSB7Ci0JCQlORF9QUklOVCgobmRvLCAiJXMgPiAlczoiLCBpcGFkZHJfc3RyaW5nKG5kbywgJmlwZHMtPmlwLT5pcF9zcmMpLAotCQkJICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXBkcy0+aXAtPmlwX2RzdCkpKTsKLQkJCWlmICghbmRvLT5uZG9fbmZsYWcgJiYgKHByb3RvID0gZ2V0cHJvdG9ieW51bWJlcihpcGRzLT5pcC0+aXBfcCkpICE9IE5VTEwpCi0JCQkJTkRfUFJJTlQoKG5kbywgIiAlcyIsIHByb3RvLT5wX25hbWUpKTsKLQkJCWVsc2UKLQkJCQlORF9QUklOVCgobmRvLCAiIGlwLXByb3RvLSVkIiwgaXBkcy0+aXAtPmlwX3ApKTsKLQkJfQorCQkvKgorCQkgKiBUaGlzIGlzbid0IHRoZSBmaXJzdCBmcmFnLCBzbyB3ZSdyZSBtaXNzaW5nIHRoZQorCQkgKiBuZXh0IGxldmVsIHByb3RvY29sIGhlYWRlci4gIHByaW50IHRoZSBpcCBhZGRyCisJCSAqIGFuZCB0aGUgcHJvdG9jb2wuCisJCSAqLworCQlORF9QUklOVCgobmRvLCAiJXMgPiAlczoiLCBpcGFkZHJfc3RyaW5nKG5kbywgJmlwZHMtPmlwLT5pcF9zcmMpLAorCQkgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sICZpcGRzLT5pcC0+aXBfZHN0KSkpOworCQlpZiAoIW5kby0+bmRvX25mbGFnICYmIChwcm90byA9IGdldHByb3RvYnludW1iZXIoaXBkcy0+aXAtPmlwX3ApKSAhPSBOVUxMKQorCQkJTkRfUFJJTlQoKG5kbywgIiAlcyIsIHByb3RvLT5wX25hbWUpKTsKKwkJZWxzZQorCQkJTkRfUFJJTlQoKG5kbywgIiBpcC1wcm90by0lZCIsIGlwZHMtPmlwLT5pcF9wKSk7CiAJfQogCXJldHVybjsKIApAQCAtNjc2LDI0ICs2ODYsMjggQEAKIHZvaWQKIGlwTl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgcmVnaXN0ZXIgdV9pbnQgbGVuZ3RoKQogewotCXN0cnVjdCBpcCBoZHI7Ci0KLQlpZiAobGVuZ3RoIDwgNCkgeworCWlmIChsZW5ndGggPCAxKSB7CiAJCU5EX1BSSU5UKChuZG8sICJ0cnVuY2F0ZWQtaXAgJWQiLCBsZW5ndGgpKTsKIAkJcmV0dXJuOwogCX0KLQltZW1jcHkgKCZoZHIsIGJwLCA0KTsKLQlzd2l0Y2ggKElQX1YoJmhkcikpIHsKLQljYXNlIDQ6CisKKwlORF9UQ0hFQ0soKmJwKTsKKwlzd2l0Y2ggKCpicCAmIDB4RjApIHsKKwljYXNlIDB4NDA6CiAJCWlwX3ByaW50IChuZG8sIGJwLCBsZW5ndGgpOwotCQlyZXR1cm47Ci0JY2FzZSA2OgorCQlicmVhazsKKwljYXNlIDB4NjA6CiAJCWlwNl9wcmludCAobmRvLCBicCwgbGVuZ3RoKTsKLQkJcmV0dXJuOworCQlicmVhazsKIAlkZWZhdWx0OgotCQlORF9QUklOVCgobmRvLCAidW5rbm93biBpcCAlZCIsIElQX1YoJmhkcikpKTsKLQkJcmV0dXJuOworCQlORF9QUklOVCgobmRvLCAidW5rbm93biBpcCAlZCIsICgqYnAgJiAweEYwKSA+PiA0KSk7CisJCWJyZWFrOwogCX0KKwlyZXR1cm47CisKK3RydW5jOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKKwlyZXR1cm47CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9wcmludC1pcDYuYyBiL3ByaW50LWlwNi5jCmluZGV4IGRkNmI3ZjUuLjlmNTkwZjIgMTAwNjQ0Ci0tLSBhL3ByaW50LWlwNi5jCisrKyBiL3ByaW50LWlwNi5jCkBAIC0xOSwyOSArMTksMTQ5IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQdjYgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCi0jaWZkZWYgSU5FVDYKLQogI2luY2x1ZGUgImlwNi5oIgogI2luY2x1ZGUgImlwcHJvdG8uaCIKIAogLyoKKyAqIElmIHJvdXRpbmcgaGVhZGVycyBhcmUgcHJlc2VuZCBhbmQgdmFsaWQsIHNldCBkc3QgdG8gdGhlIGZpbmFsIGRlc3RpbmF0aW9uLgorICogT3RoZXJ3aXNlLCBzZXQgaXQgdG8gdGhlIElQdjYgZGVzdGluYXRpb24uCisgKgorICogVGhpcyBpcyB1c2VkIGZvciBVRFAgYW5kIFRDUCBwc2V1ZG8taGVhZGVyIGluIHRoZSBjaGVja3N1bQorICogY2FsY3VsYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitpcDZfZmluZGRzdChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgc3RydWN0IGluNl9hZGRyICpkc3QsCisgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2KQoreworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IGFkdmFuY2U7CisJdV9pbnQgbmg7CisJY29uc3Qgc3RydWN0IGluNl9hZGRyICpkc3RfYWRkcjsKKwljb25zdCBzdHJ1Y3QgaXA2X3J0aGRyICpkcDsKKwljb25zdCBzdHJ1Y3QgaXA2X3J0aGRyMCAqZHAwOworCWNvbnN0IHN0cnVjdCBpbjZfYWRkciAqYWRkcjsKKwlpbnQgaSwgbGVuOworCisJY3AgPSAoY29uc3QgdV9jaGFyICopaXA2OworCWFkdmFuY2UgPSBzaXplb2Yoc3RydWN0IGlwNl9oZHIpOworCW5oID0gaXA2LT5pcDZfbnh0OworCWRzdF9hZGRyID0gJmlwNi0+aXA2X2RzdDsKKworCXdoaWxlIChjcCA8IG5kby0+bmRvX3NuYXBlbmQpIHsKKwkJY3AgKz0gYWR2YW5jZTsKKworCQlzd2l0Y2ggKG5oKSB7CisKKwkJY2FzZSBJUFBST1RPX0hPUE9QVFM6CisJCWNhc2UgSVBQUk9UT19EU1RPUFRTOgorCQljYXNlIElQUFJPVE9fTU9CSUxJVFlfT0xEOgorCQljYXNlIElQUFJPVE9fTU9CSUxJVFk6CisJCQkvKgorCQkJICogVGhlc2UgaGF2ZSBhIGhlYWRlciBsZW5ndGggYnl0ZSwgZm9sbG93aW5nCisJCQkgKiB0aGUgbmV4dCBoZWFkZXIgYnl0ZSwgZ2l2aW5nIHRoZSBsZW5ndGggb2YKKwkJCSAqIHRoZSBoZWFkZXIsIGluIHVuaXRzIG9mIDggb2N0ZXRzLCBleGNsdWRpbmcKKwkJCSAqIHRoZSBmaXJzdCA4IG9jdGV0cy4KKwkJCSAqLworCQkJTkRfVENIRUNLMigqY3AsIDIpOworCQkJYWR2YW5jZSA9IChpbnQpKCgqKGNwICsgMSkgKyAxKSA8PCAzKTsKKwkJCW5oID0gKmNwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUFBST1RPX0ZSQUdNRU5UOgorCQkJLyoKKwkJCSAqIFRoZSBieXRlIGZvbGxvd2luZyB0aGUgbmV4dCBoZWFkZXIgYnl0ZSBpcworCQkJICogbWFya2VkIGFzIHJlc2VydmVkLCBhbmQgdGhlIGhlYWRlciBpcyBhbHdheXMKKwkJCSAqIHRoZSBzYW1lIHNpemUuCisJCQkgKi8KKwkJCU5EX1RDSEVDSzIoKmNwLCAxKTsKKwkJCWFkdmFuY2UgPSBzaXplb2Yoc3RydWN0IGlwNl9mcmFnKTsKKwkJCW5oID0gKmNwOworCQkJYnJlYWs7CisKKwkJY2FzZSBJUFBST1RPX1JPVVRJTkc6CisJCQkvKgorCQkJICogT0ssIHdlIGZvdW5kIGl0LgorCQkJICovCisJCQlkcCA9IChjb25zdCBzdHJ1Y3QgaXA2X3J0aGRyICopY3A7CisJCQlORF9UQ0hFQ0soKmRwKTsKKwkJCWxlbiA9IGRwLT5pcDZyX2xlbjsKKwkJCXN3aXRjaCAoZHAtPmlwNnJfdHlwZSkgeworCisJCQljYXNlIElQVjZfUlRIRFJfVFlQRV8wOgorCQkJY2FzZSBJUFY2X1JUSERSX1RZUEVfMjoJCS8qIE1vYmlsZSBJUHY2IElELTIwICovCisJCQkJZHAwID0gKGNvbnN0IHN0cnVjdCBpcDZfcnRoZHIwICopZHA7CisJCQkJaWYgKGxlbiAlIDIgPT0gMSkKKwkJCQkJZ290byB0cnVuYzsKKwkJCQlsZW4gPj49IDE7CisJCQkJYWRkciA9ICZkcDAtPmlwNnIwX2FkZHJbMF07CisJCQkJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCQkJCWlmICgoY29uc3QgdV9jaGFyICopKGFkZHIgKyAxKSA+IG5kby0+bmRvX3NuYXBlbmQpCisJCQkJCQlnb3RvIHRydW5jOworCisJCQkJCWRzdF9hZGRyID0gYWRkcjsKKwkJCQkJYWRkcisrOworCQkJCX0KKwkJCQlicmVhazsKKworCQkJZGVmYXVsdDoKKwkJCQlicmVhazsKKwkJCX0KKworCQkJLyoKKwkJCSAqIE9ubHkgb25lIHJvdXRpbmcgaGVhZGVyIHRvIGEgY3VzdG9tZXIuCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKworCQljYXNlIElQUFJPVE9fQUg6CisJCWNhc2UgSVBQUk9UT19FU1A6CisJCWNhc2UgSVBQUk9UT19JUENPTVA6CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogQUggYW5kIEVTUCBhcmUsIGluIHRoZSBSRkNzIHRoYXQgZGVzY3JpYmUgdGhlbSwKKwkJCSAqIGRlc2NyaWJlZCBhcyBiZWluZyAidmlld2VkIGFzIGFuIGVuZC10by1lbmQKKwkJCSAqIHBheWxvYWQiICJpbiB0aGUgSVB2NiBjb250ZXh0LCBzbyB0aGF0IHRoZXkKKwkJCSAqICJzaG91bGQgYXBwZWFyIGFmdGVyIGhvcC1ieS1ob3AsIHJvdXRpbmcsIGFuZAorCQkJICogZnJhZ21lbnRhdGlvbiBleHRlbnNpb24gaGVhZGVycyIuICBXZSBhc3N1bWUKKwkJCSAqIHRoYXQncyB0aGUgY2FzZSwgYW5kIHN0b3AgYXMgc29vbiBhcyB3ZSBzZWUKKwkJCSAqIG9uZS4gIChXZSBjYW4ndCBoYW5kbGUgYW4gRVNQIGhlYWRlciBpbgorCQkJICogdGhlIGdlbmVyYWwgY2FzZSBhbnl3YXksIGFzIGl0cyBsZW5ndGggZGVwZW5kcworCQkJICogb24gdGhlIGVuY3J5cHRpb24gYWxnb3JpdGhtLikKKwkJCSAqCisJCQkgKiBJUENvbXAgaXMgYWxzbyAidmlld2VkIGFzIGFuIGVuZC10by1lbmQKKwkJCSAqIHBheWxvYWQiICJpbiB0aGUgSVB2NiBjb250ZXh0Ii4KKwkJCSAqCisJCQkgKiBBbGwgb3RoZXIgcHJvdG9jb2xzIGFyZSBhc3N1bWVkIHRvIGJlIHRoZSBmaW5hbAorCQkJICogcHJvdG9jb2wuCisJCQkgKi8KKwkJCWdvdG8gZG9uZTsKKwkJfQorCX0KKworZG9uZToKK3RydW5jOgorCVVOQUxJR05FRF9NRU1DUFkoZHN0LCBkc3RfYWRkciwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworfQorCisvKgogICogQ29tcHV0ZSBhIFY2LXN0eWxlIGNoZWNrc3VtIGJ5IGJ1aWxkaW5nIGEgcHNldWRvaGVhZGVyLgogICovCiBpbnQKLW5leHRwcm90bzZfY2tzdW0oY29uc3Qgc3RydWN0IGlwNl9oZHIgKmlwNiwgY29uc3QgdWludDhfdCAqZGF0YSwKK25leHRwcm90bzZfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYsIGNvbnN0IHVpbnQ4X3QgKmRhdGEsCiAJCSB1X2ludCBsZW4sIHVfaW50IGNvdmxlbiwgdV9pbnQgbmV4dF9wcm90bykKIHsKICAgICAgICAgc3RydWN0IHsKQEAgLTU2LDcgKzE3NiwyNiBAQAogICAgICAgICAvKiBwc2V1ZG8taGVhZGVyICovCiAgICAgICAgIG1lbXNldCgmcGgsIDAsIHNpemVvZihwaCkpOwogICAgICAgICBVTkFMSUdORURfTUVNQ1BZKCZwaC5waF9zcmMsICZpcDYtPmlwNl9zcmMsIHNpemVvZiAoc3RydWN0IGluNl9hZGRyKSk7Ci0gICAgICAgIFVOQUxJR05FRF9NRU1DUFkoJnBoLnBoX2RzdCwgJmlwNi0+aXA2X2RzdCwgc2l6ZW9mIChzdHJ1Y3QgaW42X2FkZHIpKTsKKyAgICAgICAgc3dpdGNoIChpcDYtPmlwNl9ueHQpIHsKKworICAgICAgICBjYXNlIElQUFJPVE9fSE9QT1BUUzoKKyAgICAgICAgY2FzZSBJUFBST1RPX0RTVE9QVFM6CisgICAgICAgIGNhc2UgSVBQUk9UT19NT0JJTElUWV9PTEQ6CisgICAgICAgIGNhc2UgSVBQUk9UT19NT0JJTElUWToKKyAgICAgICAgY2FzZSBJUFBST1RPX0ZSQUdNRU5UOgorICAgICAgICBjYXNlIElQUFJPVE9fUk9VVElORzoKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIFRoZSBuZXh0IGhlYWRlciBpcyBlaXRoZXIgYSByb3V0aW5nIGhlYWRlciBvciBhIGhlYWRlcgorICAgICAgICAgICAgICAgICAqIGFmdGVyIHdoaWNoIHRoZXJlIG1pZ2h0IGJlIGEgcm91dGluZyBoZWFkZXIsIHNvIHNjYW4KKyAgICAgICAgICAgICAgICAgKiBmb3IgYSByb3V0aW5nIGhlYWRlci4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICBpcDZfZmluZGRzdChuZG8sICZwaC5waF9kc3QsIGlwNik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBVTkFMSUdORURfTUVNQ1BZKCZwaC5waF9kc3QsICZpcDYtPmlwNl9kc3QsIHNpemVvZiAoc3RydWN0IGluNl9hZGRyKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KICAgICAgICAgcGgucGhfbGVuID0gaHRvbmwobGVuKTsKICAgICAgICAgcGgucGhfbnh0ID0gbmV4dF9wcm90bzsKIApAQCAtMTU0LDE1ICsyOTMsMTkgQEAKIAkJc3dpdGNoIChuaCkgewogCQljYXNlIElQUFJPVE9fSE9QT1BUUzoKIAkJCWFkdmFuY2UgPSBoYmhvcHRfcHJpbnQobmRvLCBjcCk7CisJCQlpZiAoYWR2YW5jZSA8IDApCisJCQkJcmV0dXJuOwogCQkJbmggPSAqY3A7CiAJCQlicmVhazsKIAkJY2FzZSBJUFBST1RPX0RTVE9QVFM6CiAJCQlhZHZhbmNlID0gZHN0b3B0X3ByaW50KG5kbywgY3ApOworCQkJaWYgKGFkdmFuY2UgPCAwKQorCQkJCXJldHVybjsKIAkJCW5oID0gKmNwOwogCQkJYnJlYWs7CiAJCWNhc2UgSVBQUk9UT19GUkFHTUVOVDoKIAkJCWFkdmFuY2UgPSBmcmFnNl9wcmludChuZG8sIGNwLCAoY29uc3QgdV9jaGFyICopaXA2KTsKLQkJCWlmIChuZG8tPm5kb19zbmFwZW5kIDw9IGNwICsgYWR2YW5jZSkKKwkJCWlmIChhZHZhbmNlIDwgMCB8fCBuZG8tPm5kb19zbmFwZW5kIDw9IGNwICsgYWR2YW5jZSkKIAkJCQlyZXR1cm47CiAJCQluaCA9ICpjcDsKIAkJCWZyYWdtZW50ZWQgPSAxOwpAQCAtMTcxLDkgKzMxNCw3IEBACiAJCWNhc2UgSVBQUk9UT19NT0JJTElUWV9PTEQ6CiAJCWNhc2UgSVBQUk9UT19NT0JJTElUWToKIAkJCS8qCi0JCQkgKiBYWFggLSB3ZSBkb24ndCB1c2UgImFkdmFuY2UiOyB0aGUgY3VycmVudAotCQkJICogIk1vYmlsaXR5IFN1cHBvcnQgaW4gSVB2NiIgZHJhZnQKLQkJCSAqIChkcmFmdC1pZXRmLW1vYmlsZWlwLWlwdjYtMjQpIHNheXMgdGhhdAorCQkJICogWFhYIC0gd2UgZG9uJ3QgdXNlICJhZHZhbmNlIjsgUkZDIDM3NzUgc2F5cyB0aGF0CiAJCQkgKiB0aGUgbmV4dCBoZWFkZXIgZmllbGQgaW4gYSBtb2JpbGl0eSBoZWFkZXIKIAkJCSAqIHNob3VsZCBiZSBJUFBST1RPX05PTkUsIGJ1dCBzcGVha3Mgb2YKIAkJCSAqIHRoZSBwb3NzaWJsaXR5IG9mIGEgZnV0dXJlIGV4dGVuc2lvbiBpbgpAQCAtMjE2LDE1ICszNTcsMTkgQEAKIAkJICAgIH0KIAkJY2FzZSBJUFBST1RPX0lQQ09NUDoKIAkJICAgIHsKLQkJCWludCBlbmg7Ci0JCQlhZHZhbmNlID0gaXBjb21wX3ByaW50KG5kbywgY3AsICZlbmgpOwotCQkJbmggPSBlbmggJiAweGZmOworCQkJaXBjb21wX3ByaW50KG5kbywgY3ApOworCQkJLyoKKwkJCSAqIEVpdGhlciB0aGlzIGhhcyBkZWNvbXByZXNzZWQgdGhlIHBheWxvYWQgYW5kCisJCQkgKiBwcmludGVkIGl0LCBpbiB3aGljaCBjYXNlIHRoZXJlJ3Mgbm90aGluZyBtb3JlCisJCQkgKiB0byBkbywgb3IgaXQgaGFzbid0LCBpbiB3aGljaCBjYXNlIHRoZXJlJ3MKKwkJCSAqIG5vdGhpbmcgbW9yZSB0byBkby4KKwkJCSAqLworCQkJYWR2YW5jZSA9IC0xOwogCQkJYnJlYWs7CiAJCSAgICB9CiAKIAkJY2FzZSBJUFBST1RPX1BJTToKLQkJCXBpbV9wcmludChuZG8sIGNwLCBsZW4sIG5leHRwcm90bzZfY2tzdW0oaXA2LCBjcCwgbGVuLCBsZW4sCi0JCQkJCQkJICAgIElQUFJPVE9fUElNKSk7CisJCQlwaW1fcHJpbnQobmRvLCBjcCwgbGVuLCAoY29uc3QgdV9jaGFyICopaXA2KTsKIAkJCXJldHVybjsKIAogCQljYXNlIElQUFJPVE9fT1NQRjoKQEAgLTI2NSwxMyArNDEwLDMgQEAKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sICJbfGlwNl0iKSk7CiB9Ci0KLSNlbHNlIC8qIElORVQ2ICovCi0KLXZvaWQKLWlwNl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCBfVV8sIHVfaW50IGxlbmd0aCkKLXsKLQlORF9QUklOVCgobmRvLCAiSVA2LCBsZW5ndGg6ICV1IChwcmludGluZyBub3Qgc3VwcG9ydGVkKSIsIGxlbmd0aCkpOwotfQotCi0jZW5kaWYgLyogSU5FVDYgKi8KZGlmZiAtLWdpdCBhL3ByaW50LWlwNm9wdHMuYyBiL3ByaW50LWlwNm9wdHMuYwppbmRleCAxNGFkNDJjLi40YzE2ZDgwIDEwMDY0NAotLS0gYS9wcmludC1pcDZvcHRzLmMKKysrIGIvcHJpbnQtaXA2b3B0cy5jCkBAIC0yNywxNyArMjcsMTcgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQdjYgaGVhZGVyIG9wdGlvbiBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSAiaXA2LmgiCiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtMTczLDcgKzE3Myw3IEBACiBpbnQKIGhiaG9wdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCkKIHsKLSAgICBjb25zdCBzdHJ1Y3QgaXA2X2hiaCAqZHAgPSAoc3RydWN0IGlwNl9oYmggKilicDsKKyAgICBjb25zdCBzdHJ1Y3QgaXA2X2hiaCAqZHAgPSAoY29uc3Qgc3RydWN0IGlwNl9oYmggKilicDsKICAgICBpbnQgaGJobGVuID0gMDsKIAogICAgIE5EX1RDSEVDSyhkcC0+aXA2aF9sZW4pOwpAQCAtMTkzLDcgKzE5Myw3IEBACiBpbnQKIGRzdG9wdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCkKIHsKLSAgICBjb25zdCBzdHJ1Y3QgaXA2X2Rlc3QgKmRwID0gKHN0cnVjdCBpcDZfZGVzdCAqKWJwOworICAgIGNvbnN0IHN0cnVjdCBpcDZfZGVzdCAqZHAgPSAoY29uc3Qgc3RydWN0IGlwNl9kZXN0ICopYnA7CiAgICAgaW50IGRzdG9wdGxlbiA9IDA7CiAKICAgICBORF9UQ0hFQ0soZHAtPmlwNmRfbGVuKTsKQEAgLTIxMSw0ICsyMTEsMyBAQAogICAgIE5EX1BSSU5UKChuZG8sICJbfERTVE9QVF0iKSk7CiAgICAgcmV0dXJuKC0xKTsKIH0KLSNlbmRpZiAvKiBJTkVUNiAqLwpkaWZmIC0tZ2l0IGEvcHJpbnQtaXBjb21wLmMgYi9wcmludC1pcGNvbXAuYwppbmRleCAxYmE2ODdlLi4yOTFjYWE5IDEwMDY0NAotLS0gYS9wcmludC1pcGNvbXAuYworKysgYi9wcmludC1pcGNvbXAuYwpAQCAtMTksMTIgKzE5LDEzIEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQIFBheWxvYWQgQ29tcHJlc3Npb24gUHJvdG9jb2wgKElQQ29tcCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKIHN0cnVjdCBpcGNvbXAgewogCXVpbnQ4X3QgY29tcF9ueHQ7CS8qIE5leHQgSGVhZGVyICovCkBAIC0zMiw1MiArMzMsMzcgQEAKIAl1aW50MTZfdCBjb21wX2NwaTsJLyogQ29tcHJlc3Npb24gcGFyYW1ldGVyIGluZGV4ICovCiB9OwogCi0jaWYgZGVmaW5lZChIQVZFX0xJQlopICYmIGRlZmluZWQoSEFWRV9aTElCX0gpCi0jaW5jbHVkZSA8emxpYi5oPgotI2VuZGlmCi0KLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCi1pbnQKLWlwY29tcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50ICpuaGRyIF9VXykKK3ZvaWQKK2lwY29tcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCkKIHsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgaXBjb21wICppcGNvbXA7Ci0JcmVnaXN0ZXIgY29uc3QgdV9jaGFyICplcDsKIAl1aW50MTZfdCBjcGk7Ci0jaWYgZGVmaW5lZChIQVZFX0xJQlopICYmIGRlZmluZWQoSEFWRV9aTElCX0gpCi0JaW50IGFkdmFuY2U7Ci0jZW5kaWYKIAotCWlwY29tcCA9IChzdHJ1Y3QgaXBjb21wICopYnA7CisJaXBjb21wID0gKGNvbnN0IHN0cnVjdCBpcGNvbXAgKilicDsKKwlORF9UQ0hFQ0soKmlwY29tcCk7CiAJY3BpID0gRVhUUkFDVF8xNkJJVFMoJmlwY29tcC0+Y29tcF9jcGkpOwogCi0JLyogJ2VwJyBwb2ludHMgdG8gdGhlIGVuZCBvZiBhdmFpbGFibGUgZGF0YS4gKi8KLQllcCA9IG5kby0+bmRvX3NuYXBlbmQ7Ci0KLQlpZiAoKHVfY2hhciAqKShpcGNvbXAgKyAxKSA+PSBlcCAtIHNpemVvZihzdHJ1Y3QgaXBjb21wKSkgewotCQlORF9QUklOVCgobmRvLCAiW3xJUENPTVBdIikpOwotCQlnb3RvIGZhaWw7Ci0JfQogCU5EX1BSSU5UKChuZG8sICJJUENvbXAoY3BpPTB4JTA0eCkiLCBjcGkpKTsKIAotI2lmIGRlZmluZWQoSEFWRV9MSUJaKSAmJiBkZWZpbmVkKEhBVkVfWkxJQl9IKQotCWlmICgxKQotCQlnb3RvIGZhaWw7Ci0KIAkvKgotCSAqIFdlIG1heSB3YW50IHRvIGRlY29tcHJlc3MgdGhlIHBhY2tldCBoZXJlLiAgUGFja2V0IGJ1ZmZlcgotCSAqIG1hbmFnZW1lbnQgaXMgYSBoZWFkYWNoZSAoaWYgd2UgZGVjb21wcmVzcywgcGFja2V0IHdpbGwgYmVjb21lCi0JICogbGFyZ2VyKS4KKwkgKiBYWFggLSBiYXNlZCBvbiB0aGUgQ1BJLCB3ZSBjb3VsZCBkZWNvbXByZXNzIHRoZSBwYWNrZXQgaGVyZS4KKwkgKiBQYWNrZXQgYnVmZmVyIG1hbmFnZW1lbnQgaXMgYSBoZWFkYWNoZSAoaWYgd2UgZGVjb21wcmVzcywKKwkgKiBwYWNrZXQgd2lsbCBiZWNvbWUgbGFyZ2VyKS4KKwkgKgorCSAqIFdlIHdvdWxkIGRlY29tcHJlc3MgdGhlIHBhY2tldCBhbmQgdGhlbiBjYWxsIGEgcm91dGluZSB0aGF0LAorCSAqIGJhc2VkIG9uIGlwY29tcC0+Y29tcF9ueHQsIGRpc3NlY3RzIHRoZSBkZWNvbXByZXNzZWQgZGF0YS4KKwkgKgorCSAqIFVudGlsIHdlIGRvIHRoYXQsIGhvd2V2ZXIsIHdlIGp1c3QgcmV0dXJuIC0xLCBzbyB0aGF0CisJICogdGhlIGxvb3AgdGhhdCBwcm9jZXNzZXMgInByb3RvY29sIi8ibmV4dCBoZWFkZXIiIHR5cGVzCisJICogc3RvcHMgLSB0aGVyZSdzIG5vdGhpbmcgbW9yZSBpdCBjYW4gZG8gd2l0aCBhIGNvbXByZXNzZWQKKwkgKiBwYXlsb2FkLgogCSAqLwotCWlmIChuaGRyKQotCQkqbmhkciA9IGlwY29tcC0+Y29tcF9ueHQ7Ci0JYWR2YW5jZSA9IHNpemVvZihzdHJ1Y3QgaXBjb21wKTsKKwlyZXR1cm47CiAKLQlORF9QUklOVCgobmRvLCAiOiAiKSk7Ci0JcmV0dXJuIGFkdmFuY2U7Ci0KLSNlbmRpZgotZmFpbDoKLQlyZXR1cm4gLTE7Cit0cnVuYzoKKwlORF9QUklOVCgobmRvLCAiW3xJUENPTVBdIikpOworCXJldHVybjsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LWlwZmMuYyBiL3ByaW50LWlwZmMuYwppbmRleCAyOTVhYzBmLi5iOGEwOGU5IDEwMDY0NAotLS0gYS9wcmludC1pcGZjLmMKKysrIGIvcHJpbnQtaXBmYy5jCkBAIC0xOSwyNCArMTksMjMgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSVAgb3ZlciBGaWJyZSBDaGFubmVsIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDI2MjUgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCiAjaW5jbHVkZSAiZXRoZXIuaCIKIAotLyoKLSAqIFJGQyAyNjI1IElQLW92ZXItRmlicmUgQ2hhbm5lbC4KLSAqLwotCiBzdHJ1Y3QgaXBmY19oZWFkZXIgewogCXVfY2hhciAgaXBmY19kaG9zdFs4XTsKIAl1X2NoYXIgIGlwZmNfc2hvc3RbOF07CkBAIC03MiwyMSArNzEsMzQgQEAKIAlkc3RuYW1lID0gZXRoZXJhZGRyX3N0cmluZyhuZG8sIGlwZmNkc3QpOwogCiAJLyoKLQkgKiBYWFggLSBzaG93IHRoZSB1cHBlciAxNiBiaXRzPyAgRG8gc28gb25seSBpZiAidmZsYWciIGlzIHNldD8KKwkgKiBYWFggLSBzaG91bGQgd2Ugc2hvdyB0aGUgdXBwZXIgMTYgYml0cyBvZiB0aGUgYWRkcmVzc2VzPworCSAqIERvIHNvIG9ubHkgaWYgInZmbGFnIiBpcyBzZXQ/CisJICogU2VjdGlvbiAzLjMgIkZDIFBvcnQgYW5kIE5vZGUgTmV0d29yayBBZGRyZXNzZXMiIHNheXMgdGhhdAorCSAqCisJICogICAgSW4gdGhpcyBzcGVjaWZpY2F0aW9uLCBib3RoIHRoZSBTb3VyY2UgYW5kIERlc3RpbmF0aW9uCisJICogICAgNC1iaXQgTkFBIGlkZW50aWZpZXJzIFNIQUxMIGJlIHNldCB0byBiaW5hcnkgJzAwMDEnCisJICogICAgaW5kaWNhdGluZyB0aGF0IGFuIElFRUUgNDgtYml0IE1BQyBhZGRyZXNzIGlzIGNvbnRhaW5lZAorCSAqICAgIGluIHRoZSBsb3dlciA0OCBiaXRzIG9mIHRoZSBuZXR3b3JrIGFkZHJlc3MgZmllbGRzLiBUaGUKKwkgKiAgICBoaWdoIG9yZGVyIDEyIGJpdHMgaW4gdGhlIG5ldHdvcmsgYWRkcmVzcyBmaWVsZHMgU0hBTEwKKwkgKiAgICBiZSBzZXQgdG8gMHgwMDAwLgorCSAqCisJICogc28sIGZvciBjYXB0dXJlcyBmb2xsb3dpbmcgdGhpcyBzcGVjaWZpY2F0aW9uLCB0aGUgdXBwZXIgMTYKKwkgKiBiaXRzIHNob3VsZCBiZSAweDEwMDAsIGZvbGxvd2VkIGJ5IGEgTUFDIGFkZHJlc3MuCiAJICovCi0JTkRfUFJJTlQoKG5kbywgIiVzICVzICVkOiAiLCBzcmNuYW1lLCBkc3RuYW1lLCBsZW5ndGgpKTsKKwlORF9QUklOVCgobmRvLCAiJXMgPiAlcywgbGVuZ3RoICV1OiAiLCBzcmNuYW1lLCBkc3RuYW1lLCBsZW5ndGgpKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyB1X2ludAogaXBmY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbikKIHsKIAljb25zdCBzdHJ1Y3QgaXBmY19oZWFkZXIgKmlwZmNwID0gKGNvbnN0IHN0cnVjdCBpcGZjX2hlYWRlciAqKXA7CiAJc3RydWN0IGV0aGVyX2hlYWRlciBlaGRyOwotCXVfc2hvcnQgZXh0cmFjdGVkX2V0aGVydHlwZTsKKwlzdHJ1Y3QgbGxhZGRyX2luZm8gc3JjLCBkc3Q7CisJaW50IGxsY19oZHJsZW47CiAKIAlpZiAoY2FwbGVuIDwgSVBGQ19IRFJMRU4pIHsKIAkJTkRfUFJJTlQoKG5kbywgIlt8aXBmY10iKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIChjYXBsZW4pOwogCX0KIAkvKgogCSAqIEdldCB0aGUgbmV0d29yayBhZGRyZXNzZXMgaW50byBhIGNhbm9uaWNhbCBmb3JtCkBAIC05NiwyOCArMTA4LDI4IEBACiAJaWYgKG5kby0+bmRvX2VmbGFnKQogCQlpcGZjX2hkcl9wcmludChuZG8sIGlwZmNwLCBsZW5ndGgsIEVTUkMoJmVoZHIpLCBFRFNUKCZlaGRyKSk7CiAKKwlzcmMuYWRkciA9IEVTUkMoJmVoZHIpOworCXNyYy5hZGRyX3N0cmluZyA9IGV0aGVyYWRkcl9zdHJpbmc7CisJZHN0LmFkZHIgPSBFRFNUKCZlaGRyKTsKKwlkc3QuYWRkcl9zdHJpbmcgPSBldGhlcmFkZHJfc3RyaW5nOworCiAJLyogU2tpcCBvdmVyIE5ldHdvcmtfSGVhZGVyICovCiAJbGVuZ3RoIC09IElQRkNfSERSTEVOOwogCXAgKz0gSVBGQ19IRFJMRU47CiAJY2FwbGVuIC09IElQRkNfSERSTEVOOwogCiAJLyogVHJ5IHRvIHByaW50IHRoZSBMTEMtbGF5ZXIgaGVhZGVyICYgaGlnaGVyIGxheWVycyAqLwotCWlmIChsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgRVNSQygmZWhkciksIEVEU1QoJmVoZHIpLAotCSAgICAmZXh0cmFjdGVkX2V0aGVydHlwZSkgPT0gMCkgeworCWxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgJnNyYywgJmRzdCk7CisJaWYgKGxsY19oZHJsZW4gPCAwKSB7CiAJCS8qCiAJCSAqIFNvbWUga2luZHMgb2YgTExDIHBhY2tldCB3ZSBjYW5ub3QKIAkJICogaGFuZGxlIGludGVsbGlnZW50bHkKIAkJICovCi0JCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQlpcGZjX2hkcl9wcmludChuZG8sIGlwZmNwLCBsZW5ndGggKyBJUEZDX0hEUkxFTiwKLQkJCSAgICBFU1JDKCZlaGRyKSwgRURTVCgmZWhkcikpOwotCQlpZiAoZXh0cmFjdGVkX2V0aGVydHlwZSkgewotCQkJTkRfUFJJTlQoKG5kbywgIihMTEMgJXMpICIsCi0JCWV0aGVycHJvdG9fc3RyaW5nKGh0b25zKGV4dHJhY3RlZF9ldGhlcnR5cGUpKSkpOwotCQl9CiAJCWlmICghbmRvLT5uZG9fc3VwcHJlc3NfZGVmYXVsdF9wcmludCkKIAkJCU5EX0RFRkFVTFRQUklOVChwLCBjYXBsZW4pOworCQlsbGNfaGRybGVuID0gLWxsY19oZHJsZW47CiAJfQorCXJldHVybiAoSVBGQ19IRFJMRU4gKyBsbGNfaGRybGVuKTsKIH0KIAogLyoKQEAgLTEyOSw3ICsxNDEsNSBAQAogdV9pbnQKIGlwZmNfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpwKQogewotCWlwZmNfcHJpbnQobmRvLCBwLCBoLT5sZW4sIGgtPmNhcGxlbik7Ci0KLQlyZXR1cm4gKElQRkNfSERSTEVOKTsKKwlyZXR1cm4gKGlwZmNfcHJpbnQobmRvLCBwLCBoLT5sZW4sIGgtPmNhcGxlbikpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtaXBuZXQuYyBiL3ByaW50LWlwbmV0LmMKaW5kZXggYzRmZjE2YS4uZjcxYzE0NSAxMDA2NDQKLS0tIGEvcHJpbnQtaXBuZXQuYworKysgYi9wcmludC1pcG5ldC5jCkBAIC0xLDExICsxLDEyIEBACi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBTb2xhcmlzIERMVF9JUE5FVCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogdHlwZWRlZiBzdHJ1Y3QgaXBuZXRfaGRyIHsKIAl1aW50OF90CQlpcGhfdmVyc2lvbjsKQEAgLTU1LDcgKzU2LDcgQEAKIHN0YXRpYyB2b2lkCiBpcG5ldF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbikKIHsKLQlpcG5ldF9oZHJfdCAqaGRyOworCWNvbnN0IGlwbmV0X2hkcl90ICpoZHI7CiAKIAlpZiAoY2FwbGVuIDwgc2l6ZW9mKGlwbmV0X2hkcl90KSkgewogCQlORF9QUklOVCgobmRvLCAiW3xpcG5ldF0iKSk7CkBAIC02Nyw3ICs2OCw3IEBACiAKIAlsZW5ndGggLT0gc2l6ZW9mKGlwbmV0X2hkcl90KTsKIAljYXBsZW4gLT0gc2l6ZW9mKGlwbmV0X2hkcl90KTsKLQloZHIgPSAoaXBuZXRfaGRyX3QgKilwOworCWhkciA9IChjb25zdCBpcG5ldF9oZHJfdCAqKXA7CiAJcCArPSBzaXplb2YoaXBuZXRfaGRyX3QpOwogCiAJc3dpdGNoIChoZHItPmlwaF9mYW1pbHkpIHsKQEAgLTgyLDcgKzgzLDcgQEAKIAogCWRlZmF1bHQ6CiAJCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQlpcG5ldF9oZHJfcHJpbnQobmRvLCAodV9jaGFyICopaGRyLAorCQkJaXBuZXRfaGRyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWhkciwKIAkJCQkJbGVuZ3RoICsgc2l6ZW9mKGlwbmV0X2hkcl90KSk7CiAKIAkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQpkaWZmIC0tZ2l0IGEvcHJpbnQtaXB4LmMgYi9wcmludC1pcHguYwppbmRleCA5M2Y1ZDU5Li5kODA3YTY2IDEwMDY0NAotLS0gYS9wcmludC1pcHguYworKysgYi9wcmludC1pcHguYwpAQCAtMTgsMjAgKzE4LDIwIEBACiAgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqCi0gKiBGb3JtYXQgYW5kIHByaW50IE5vdmVsbCBJUFggcGFja2V0cy4KICAqIENvbnRyaWJ1dGVkIGJ5IEJyYWQgUGFya2VyIChicmFkQGZjci5jb20pLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE5vdmVsbCBJUFggcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKQEAgLTg5LDcgKzg5LDcgQEAKIAlORF9UQ0hFQ0soaXB4LT5sZW5ndGgpOwogCWxlbmd0aCA9IEVYVFJBQ1RfMTZCSVRTKCZpcHgtPmxlbmd0aCk7CiAKLQlpcHhfZGVjb2RlKG5kbywgaXB4LCAodV9jaGFyICopaXB4ICsgaXB4U2l6ZSwgbGVuZ3RoIC0gaXB4U2l6ZSk7CisJaXB4X2RlY29kZShuZG8sIGlweCwgcCArIGlweFNpemUsIGxlbmd0aCAtIGlweFNpemUpOwogCXJldHVybjsKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sICJbfGlweCAlZF0iLCBsZW5ndGgpKTsKQEAgLTExNywxNCArMTE3LDE0IEBACiAJTkRfUFJJTlQoKG5kbywgImlweC1uY3AgJWQiLCBsZW5ndGgpKTsKIAlicmVhazsKICAgICAgIGNhc2UgSVBYX1NLVF9TQVA6Ci0JaXB4X3NhcF9wcmludChuZG8sICh1X3Nob3J0ICopZGF0YXAsIGxlbmd0aCk7CisJaXB4X3NhcF9wcmludChuZG8sIChjb25zdCB1X3Nob3J0ICopZGF0YXAsIGxlbmd0aCk7CiAJYnJlYWs7CiAgICAgICBjYXNlIElQWF9TS1RfUklQOgotCWlweF9yaXBfcHJpbnQobmRvLCAodV9zaG9ydCAqKWRhdGFwLCBsZW5ndGgpOworCWlweF9yaXBfcHJpbnQobmRvLCAoY29uc3QgdV9zaG9ydCAqKWRhdGFwLCBsZW5ndGgpOwogCWJyZWFrOwogICAgICAgY2FzZSBJUFhfU0tUX05FVEJJT1M6CiAJTkRfUFJJTlQoKG5kbywgImlweC1uZXRiaW9zICVkIiwgbGVuZ3RoKSk7Ci0jaWZkZWYgVENQRFVNUF9ET19TTUIKKyNpZmRlZiBFTkFCTEVfU01CCiAJaXB4X25ldGJpb3NfcHJpbnQobmRvLCBkYXRhcCwgbGVuZ3RoKTsKICNlbmRpZgogCWJyZWFrOwpAQCAtMTMzLDcgKzEzMyw3IEBACiAJYnJlYWs7CiAgICAgICBjYXNlIElQWF9TS1RfTldMSU5LX0RHTToKIAlORF9QUklOVCgobmRvLCAiaXB4LW53bGluay1kZ20gJWQiLCBsZW5ndGgpKTsKLSNpZmRlZiBUQ1BEVU1QX0RPX1NNQgorI2lmZGVmIEVOQUJMRV9TTUIKIAlpcHhfbmV0Ymlvc19wcmludChuZG8sIGRhdGFwLCBsZW5ndGgpOwogI2VuZGlmCiAJYnJlYWs7CkBAIC0xNjUsNyArMTY1LDcgQEAKIAkgICAgTkRfUFJJTlQoKG5kbywgImlweC1zYXAtbmVhcmVzdC1yZXEiKSk7CiAKIAlORF9UQ0hFQ0soaXB4WzBdKTsKLQlORF9QUklOVCgobmRvLCAiICVzIiwgaXB4c2FwX3N0cmluZyhodG9ucyhFWFRSQUNUXzE2QklUUygmaXB4WzBdKSkpKSk7CisJTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlweHNhcF9zdHJpbmcobmRvLCBodG9ucyhFWFRSQUNUXzE2QklUUygmaXB4WzBdKSkpKSk7CiAJYnJlYWs7CiAKICAgICAgIGNhc2UgMjoKQEAgLTE3NywxNCArMTc3LDE0IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgOCAmJiBsZW5ndGggPiAwOyBpKyspIHsKIAkgICAgTkRfVENIRUNLKGlweFswXSk7Ci0JICAgIE5EX1BSSU5UKChuZG8sICIgJXMgJyIsIGlweHNhcF9zdHJpbmcoaHRvbnMoRVhUUkFDVF8xNkJJVFMoJmlweFswXSkpKSkpOwotCSAgICBpZiAoZm5fcHJpbnR6cChuZG8sICh1X2NoYXIgKikmaXB4WzFdLCA0OCwgbmRvLT5uZG9fc25hcGVuZCkpIHsKKwkgICAgTkRfUFJJTlQoKG5kbywgIiAlcyAnIiwgaXB4c2FwX3N0cmluZyhuZG8sIGh0b25zKEVYVFJBQ1RfMTZCSVRTKCZpcHhbMF0pKSkpKTsKKwkgICAgaWYgKGZuX3ByaW50enAobmRvLCAoY29uc3QgdV9jaGFyICopJmlweFsxXSwgNDgsIG5kby0+bmRvX3NuYXBlbmQpKSB7CiAJCU5EX1BSSU5UKChuZG8sICInIikpOwogCQlnb3RvIHRydW5jOwogCSAgICB9CiAJICAgIE5EX1RDSEVDSzIoaXB4WzI1XSwgMTApOwogCSAgICBORF9QUklOVCgobmRvLCAiJyBhZGRyICVzIiwKLQkJaXB4YWRkcl9zdHJpbmcoRVhUUkFDVF8zMkJJVFMoJmlweFsyNV0pLCAodV9jaGFyICopJmlweFsyN10pKSk7CisJCWlweGFkZHJfc3RyaW5nKEVYVFJBQ1RfMzJCSVRTKCZpcHhbMjVdKSwgKGNvbnN0IHVfY2hhciAqKSZpcHhbMjddKSkpOwogCSAgICBpcHggKz0gMzI7CiAJICAgIGxlbmd0aCAtPSA2NDsKIAl9CmRpZmYgLS1naXQgYS9wcmludC1pc2FrbXAuYyBiL3ByaW50LWlzYWttcC5jCmluZGV4IGJlZjBiNDUuLjNkZmExNzEgMTAwNjQ0Ci0tLSBhL3ByaW50LWlzYWttcC5jCisrKyBiL3ByaW50LWlzYWttcC5jCkBAIC0yOCw3ICsyOCw4IEBACiAgKgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEludGVybmV0IFNlY3VyaXR5IEFzc29jaWF0aW9uIGFuZCBLZXkgTWFuYWdlbWVudCBQcm90b2NvbCAoSVNBS01QKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKQEAgLTQwLDE4ICs0MSwxNiBAQAogI3VuZGVmIEhBVkVfTElCQ1JZUFRPCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiICAgICAgICAgICAgICAgICAgICAvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpbmNsdWRlICJpcC5oIgotI2lmZGVmIElORVQ2CiAjaW5jbHVkZSAiaXA2LmgiCi0jZW5kaWYKIAogLyogcmVmZXIgdG8gUkZDIDI0MDggKi8KIApAQCAtMzU1LDcgKzM1NCw3IEBACiAJSVYyX1RfUFJGICA9IDIsCiAJSVYyX1RfSU5URUc9IDMsCiAJSVYyX1RfREggICA9IDQsCi0JSVYyX1RfRVNOICA9IDUsCisJSVYyX1RfRVNOICA9IDUKIH07CiAKIC8qIDMuNC4gIEtleSBFeGNoYW5nZSBQYXlsb2FkICovCkBAIC0zNzUsNyArMzc0LDcgQEAKIAlJRF9JUFY2X0FERFI9NSwKIAlJRF9ERVJfQVNOMV9ETj05LAogCUlEX0RFUl9BU04xX0dOPTEwLAotCUlEX0tFWV9JRD0xMSwKKwlJRF9LRVlfSUQ9MTEKIH07CiBzdHJ1Y3QgaWtldjJfaWQgewogCXN0cnVjdCBpc2FrbXBfZ2VuIGg7CkBAIC00MzksNyArNDM4LDcgQEAKIGVudW0gaWtldjJfYXV0aF90eXBlIHsKIAlJVjJfUlNBX1NJRyA9IDEsCiAJSVYyX1NIQVJFRCAgPSAyLAotCUlWMl9EU1NfU0lHID0gMywKKwlJVjJfRFNTX1NJRyA9IDMKIH07CiAKIC8qIHJlZmVyIHRvIFJGQyAyNDA5ICovCkBAIC02NDUsMTQgKzY0NCwxMiBAQAogCSAgICBjb25zdCB1X2NoYXIgKmJwMiwgc3RydWN0IGlzYWttcCAqYmFzZSk7CiAKICNkZWZpbmUgTUFYSU5JVElBVE9SUwkyMAotaW50IG5pbml0aWF0b3IgPSAwOworc3RhdGljIGludCBuaW5pdGlhdG9yID0gMDsKIHVuaW9uIGluYWRkcl91IHsKIAlzdHJ1Y3QgaW5fYWRkciBpbjQ7Ci0jaWZkZWYgSU5FVDYKIAlzdHJ1Y3QgaW42X2FkZHIgaW42OwotI2VuZGlmCiB9Owotc3RydWN0IHsKK3N0YXRpYyBzdHJ1Y3QgewogCWNvb2tpZV90IGluaXRpYXRvcjsKIAl1X2ludCB2ZXJzaW9uOwogCXVuaW9uIGluYWRkcl91IGlhZGRyOwpAQCAtNzQyLDcgKzczOSw3IEBACiAjZGVmaW5lIEVUWVBFU1RSKHgpCVNUUl9PUl9JRCh4LCBldHlwZXN0cikKIAogI2RlZmluZSBDSEVDS0xFTihwLCBucCkJCQkJCQkJXAotCQlpZiAoZXAgPCAodV9jaGFyICopKHApKSB7CQkJCVwKKwkJaWYgKGVwIDwgKGNvbnN0IHVfY2hhciAqKShwKSkgewkJCQlcCiAJCQlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUihucCkpKTsJCVwKIAkJCWdvdG8gZG9uZTsJCQkJCVwKIAkJfQpAQCAtNzUzLDcgKzc1MCw3IEBACiAJCT8gbnBmdW5jWyh4KV0gOiBOVUxMKQogCiBzdGF0aWMgaW50Ci1pc3plcm8odV9jaGFyICpwLCBzaXplX3QgbCkKK2lzemVybyhjb25zdCB1X2NoYXIgKnAsIHNpemVfdCBsKQogewogCXdoaWxlIChsLS0pIHsKIAkJaWYgKCpwKyspCkBAIC03ODEsMTAgKzc3OCw4IEBACiBjb29raWVfcmVjb3JkKGNvb2tpZV90ICppbiwgY29uc3QgdV9jaGFyICpicDIpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGlwICppcDsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKKwljb25zdCBzdHJ1Y3QgaXAgKmlwOworCWNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7CiAKIAlpID0gY29va2llX2ZpbmQoaW4pOwogCWlmICgwIDw9IGkpIHsKQEAgLTc5MiwyMSArNzg3LDE5IEBACiAJCXJldHVybjsKIAl9CiAKLQlpcCA9IChzdHJ1Y3QgaXAgKilicDI7CisJaXAgPSAoY29uc3Qgc3RydWN0IGlwICopYnAyOwogCXN3aXRjaCAoSVBfVihpcCkpIHsKIAljYXNlIDQ6CiAJCWNvb2tpZWNhY2hlW25pbml0aWF0b3JdLnZlcnNpb24gPSA0OwogCQlVTkFMSUdORURfTUVNQ1BZKCZjb29raWVjYWNoZVtuaW5pdGlhdG9yXS5pYWRkci5pbjQsICZpcC0+aXBfc3JjLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKIAkJVU5BTElHTkVEX01FTUNQWSgmY29va2llY2FjaGVbbmluaXRpYXRvcl0ucmFkZHIuaW40LCAmaXAtPmlwX2RzdCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CiAJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJY2FzZSA2OgotCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKilicDI7CisJCWlwNiA9IChjb25zdCBzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKIAkJY29va2llY2FjaGVbbmluaXRpYXRvcl0udmVyc2lvbiA9IDY7CiAJCVVOQUxJR05FRF9NRU1DUFkoJmNvb2tpZWNhY2hlW25pbml0aWF0b3JdLmlhZGRyLmluNiwgJmlwNi0+aXA2X3NyYywgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOwogCQlVTkFMSUdORURfTUVNQ1BZKCZjb29raWVjYWNoZVtuaW5pdGlhdG9yXS5yYWRkci5pbjYsICZpcDYtPmlwNl9kc3QsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlyZXR1cm47CiAJfQpAQCAtODE5LDEyICs4MTIsMTAgQEAKIHN0YXRpYyBpbnQKIGNvb2tpZV9zaWRlY2hlY2soaW50IGksIGNvbnN0IHVfY2hhciAqYnAyLCBpbnQgaW5pdGlhdG9yKQogewotCXN0cnVjdCBpcCAqaXA7Ci0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3QgaXA2X2hkciAqaXA2OwotI2VuZGlmCisJY29uc3Qgc3RydWN0IGlwICppcDsKKwljb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2OwogCi0JaXAgPSAoc3RydWN0IGlwICopYnAyOworCWlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWJwMjsKIAlzd2l0Y2ggKElQX1YoaXApKSB7CiAJY2FzZSA0OgogCQlpZiAoY29va2llY2FjaGVbaV0udmVyc2lvbiAhPSA0KQpAQCAtODM3LDExICs4MjgsMTAgQEAKIAkJCQlyZXR1cm4gMTsKIAkJfQogCQlicmVhazsKLSNpZmRlZiBJTkVUNgogCWNhc2UgNjoKIAkJaWYgKGNvb2tpZWNhY2hlW2ldLnZlcnNpb24gIT0gNikKIAkJCXJldHVybiAwOwotCQlpcDYgPSAoc3RydWN0IGlwNl9oZHIgKilicDI7CisJCWlwNiA9IChjb25zdCBzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKIAkJaWYgKGluaXRpYXRvcikgewogCQkJaWYgKFVOQUxJR05FRF9NRU1DTVAoJmlwNi0+aXA2X3NyYywgJmNvb2tpZWNhY2hlW2ldLmlhZGRyLmluNiwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpID09IDApCiAJCQkJcmV0dXJuIDE7CkBAIC04NTAsNyArODQwLDYgQEAKIAkJCQlyZXR1cm4gMTsKIAkJfQogCQlicmVhazsKLSNlbmRpZiAvKiBJTkVUNiAqLwogCWRlZmF1bHQ6CiAJCWJyZWFrOwogCX0KQEAgLTg1OSwxOCArODQ4LDE4IEBACiB9CiAKIHN0YXRpYyB2b2lkCi1oZXhwcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY2FkZHJfdCBsb2MsIHNpemVfdCBsZW4pCitoZXhwcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdWludDhfdCAqbG9jLCBzaXplX3QgbGVuKQogewotCXVfY2hhciAqcDsKKwljb25zdCB1aW50OF90ICpwOwogCXNpemVfdCBpOwogCi0JcCA9ICh1X2NoYXIgKilsb2M7CisJcCA9IGxvYzsKIAlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspCiAJCU5EX1BSSU5UKChuZG8sIiUwMngiLCBwW2ldICYgMHhmZikpOwogfQogCiBzdGF0aWMgaW50Ci1yYXdwcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY2FkZHJfdCBsb2MsIHNpemVfdCBsZW4pCityYXdwcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdWludDhfdCAqbG9jLCBzaXplX3QgbGVuKQogewogCU5EX1RDSEVDSzIoKmxvYywgbGVuKTsKIApAQCAtOTAyLDEwICs4OTEsMTAgQEAKIAl9CiAKIAlORF9QUklOVCgobmRvLCIgZGF0YT0oIikpOwotCWlmKCFyYXdwcmludChuZG8sIChjYWRkcl90KShjcCksIGxlbikpIGdvdG8gdHJ1bmM7CisJaWYoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoY3ApLCBsZW4pKSBnb3RvIHRydW5jOwogCU5EX1BSSU5UKChuZG8sICIuLi4iKSk7CiAJaWYoZWxlbikgewotCQlpZighcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZW5kKSwgZWxlbikpIGdvdG8gdHJ1bmM7CisJCWlmKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGVuZCksIGVsZW4pKSBnb3RvIHRydW5jOwogCX0KIAlORF9QUklOVCgobmRvLCIpIikpOwogCXJldHVybiAxOwpAQCAtOTQ5LDEwICs5MzgsMTAgQEAKIAkJaWYgKG1hcCAmJiB0IDwgbm1hcCAmJiB2IDwgbWFwW3RdLm52YWx1ZSAmJiBtYXBbdF0udmFsdWVbdl0pCiAJCQlORF9QUklOVCgobmRvLCIlcyIsIG1hcFt0XS52YWx1ZVt2XSkpOwogCQllbHNlCi0JCQlyYXdwcmludChuZG8sIChjYWRkcl90KSZwWzJdLCAyKTsKKwkJCXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmcFsyXSwgMik7CiAJfSBlbHNlIHsKIAkJTkRfUFJJTlQoKG5kbywibGVuPSVkIHZhbHVlPSIsIEVYVFJBQ1RfMTZCSVRTKCZwWzJdKSkpOwotCQlyYXdwcmludChuZG8sIChjYWRkcl90KSZwWzRdLCBFWFRSQUNUXzE2QklUUygmcFsyXSkpOworCQlyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopJnBbNF0sIEVYVFJBQ1RfMTZCSVRTKCZwWzJdKSk7CiAJfQogCU5EX1BSSU5UKChuZG8sIikiKSk7CiAJcmV0dXJuIHAgKyB0b3RsZW47CkBAIC05NzksMTAgKzk2OCwxMCBAQAogCWlmIChwWzBdICYgMHg4MCkgewogCQlORF9QUklOVCgobmRvLCJ2YWx1ZT0iKSk7CiAJCXQgPSBwWzJdOwotCQlyYXdwcmludChuZG8sIChjYWRkcl90KSZwWzJdLCAyKTsKKwkJcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKSZwWzJdLCAyKTsKIAl9IGVsc2UgewogCQlORF9QUklOVCgobmRvLCJsZW49JWQgdmFsdWU9IiwgRVhUUkFDVF8xNkJJVFMoJnBbMl0pKSk7Ci0JCXJhd3ByaW50KG5kbywgKGNhZGRyX3QpJnBbNF0sIEVYVFJBQ1RfMTZCSVRTKCZwWzJdKSk7CisJCXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmcFs0XSwgRVhUUkFDVF8xNkJJVFMoJnBbMl0pKTsKIAl9CiAJTkRfUFJJTlQoKG5kbywiKSIpKTsKIAlyZXR1cm4gcCArIHRvdGxlbjsKQEAgLTEwMDMsNyArOTkyLDcgQEAKIAogCU5EX1BSSU5UKChuZG8sIiVzOiIsIE5QU1RSKElTQUtNUF9OUFRZUEVfU0EpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF9zYSAqKWV4dDsKKwlwID0gKGNvbnN0IHN0cnVjdCBpa2V2MV9wbF9zYSAqKWV4dDsKIAlORF9UQ0hFQ0soKnApOwogCVVOQUxJR05FRF9NRU1DUFkoJnNhLCBleHQsIHNpemVvZihzYSkpOwogCWRvaSA9IG50b2hsKHNhLmRvaSk7CkBAIC0xMDExLDcgKzEwMDAsNyBAQAogCWlmIChkb2kgIT0gMSkgewogCQlORF9QUklOVCgobmRvLCIgZG9pPSVkIiwgZG9pKSk7CiAJCU5EX1BSSU5UKChuZG8sIiBzaXR1YXRpb249JXUiLCAodWludDMyX3QpbnRvaGwoc2Euc2l0KSkpOwotCQlyZXR1cm4gKHVfY2hhciAqKShwICsgMSk7CisJCXJldHVybiAoY29uc3QgdV9jaGFyICopKHAgKyAxKTsKIAl9CiAKIAlORF9QUklOVCgobmRvLCIgZG9pPWlwc2VjIikpOwpAQCAtMTAyOCw3ICsxMDE3LDcgQEAKIAlpZiAoc2l0ICYgMHgwNCkKIAkJTkRfUFJJTlQoKG5kbywiJXNpbnRlZ3JpdHkiLCB0ID8gIisiIDogIiIpKTsKIAotCW5wID0gKHVfY2hhciAqKWV4dCArIHNpemVvZihzYSk7CisJbnAgPSAoY29uc3QgdV9jaGFyICopZXh0ICsgc2l6ZW9mKHNhKTsKIAlpZiAoc2l0ICE9IDB4MDEpIHsKIAkJTkRfVENIRUNLMigqKGV4dCArIDEpLCBzaXplb2YoaWRlbnQpKTsKIAkJVU5BTElHTkVEX01FTUNQWSgmaWRlbnQsIGV4dCArIDEsIHNpemVvZihpZGVudCkpOwpAQCAtMTAzNiw3ICsxMDI1LDcgQEAKIAkJbnAgKz0gc2l6ZW9mKGlkZW50KTsKIAl9CiAKLQlleHQgPSAoc3RydWN0IGlzYWttcF9nZW4gKilucDsKKwlleHQgPSAoY29uc3Qgc3RydWN0IGlzYWttcF9nZW4gKilucDsKIAlORF9UQ0hFQ0soKmV4dCk7CiAKIAljcCA9IGlrZXYxX3N1Yl9wcmludChuZG8sIElTQUtNUF9OUFRZUEVfUCwgZXh0LCBlcCwgcGhhc2UsIGRvaSwgcHJvdG8wLApAQCAtMTA2MCwxOCArMTA0OSwxOCBAQAogCiAJTkRfUFJJTlQoKG5kbywiJXM6IiwgTlBTVFIoSVNBS01QX05QVFlQRV9QKSkpOwogCi0JcCA9IChzdHJ1Y3QgaWtldjFfcGxfcCAqKWV4dDsKKwlwID0gKGNvbnN0IHN0cnVjdCBpa2V2MV9wbF9wICopZXh0OwogCU5EX1RDSEVDSygqcCk7CiAJVU5BTElHTkVEX01FTUNQWSgmcHJvcCwgZXh0LCBzaXplb2YocHJvcCkpOwogCU5EX1BSSU5UKChuZG8sIiAjJWQgcHJvdG9pZD0lcyB0cmFuc2Zvcm09JWQiLAogCQkgIHByb3AucF9ubywgUFJPVE9JRFNUUihwcm9wLnByb3RfaWQpLCBwcm9wLm51bV90KSk7CiAJaWYgKHByb3Auc3BpX3NpemUpIHsKIAkJTkRfUFJJTlQoKG5kbywiIHNwaT0iKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkocCArIDEpLCBwcm9wLnNwaV9zaXplKSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKHAgKyAxKSwgcHJvcC5zcGlfc2l6ZSkpCiAJCQlnb3RvIHRydW5jOwogCX0KIAotCWV4dCA9IChzdHJ1Y3QgaXNha21wX2dlbiAqKSgodV9jaGFyICopKHAgKyAxKSArIHByb3Auc3BpX3NpemUpOworCWV4dCA9IChjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqKSgoY29uc3QgdV9jaGFyICopKHAgKyAxKSArIHByb3Auc3BpX3NpemUpOwogCU5EX1RDSEVDSygqZXh0KTsKIAogCWNwID0gaWtldjFfc3ViX3ByaW50KG5kbywgSVNBS01QX05QVFlQRV9ULCBleHQsIGVwLCBwaGFzZSwgZG9pMCwKQEAgLTEyMjcsNyArMTIxNiw3IEBACiAKIAlORF9QUklOVCgobmRvLCIlczoiLCBOUFNUUihJU0FLTVBfTlBUWVBFX1QpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF90ICopZXh0OworCXAgPSAoY29uc3Qgc3RydWN0IGlrZXYxX3BsX3QgKilleHQ7CiAJTkRfVENIRUNLKCpwKTsKIAlVTkFMSUdORURfTUVNQ1BZKCZ0LCBleHQsIHNpemVvZih0KSk7CiAKQEAgLTEyNjMsOCArMTI1Miw4IEBACiAJCU5EX1BSSU5UKChuZG8sIiAjJWQgaWQ9JXMgIiwgdC50X25vLCBpZHN0cikpOwogCWVsc2UKIAkJTkRfUFJJTlQoKG5kbywiICMlZCBpZD0lZCAiLCB0LnRfbm8sIHQudF9pZCkpOwotCWNwID0gKHVfY2hhciAqKShwICsgMSk7Ci0JZXAyID0gKHVfY2hhciAqKXAgKyBpdGVtX2xlbjsKKwljcCA9IChjb25zdCB1X2NoYXIgKikocCArIDEpOworCWVwMiA9IChjb25zdCB1X2NoYXIgKilwICsgaXRlbV9sZW47CiAJd2hpbGUgKGNwIDwgZXAgJiYgY3AgPCBlcDIpIHsKIAkJaWYgKG1hcCAmJiBubWFwKSB7CiAJCQljcCA9IGlrZXYxX2F0dHJtYXBfcHJpbnQobmRvLCBjcCwgKGVwIDwgZXAyKSA/IGVwIDogZXAyLApAQCAtMTI5NSwxMCArMTI4NCwxMCBAQAogCU5EX1BSSU5UKChuZG8sIiBrZXkgbGVuPSVkIiwgbnRvaHMoZS5sZW4pIC0gNCkpOwogCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcgJiYgNCA8IG50b2hzKGUubGVuKSkgewogCQlORF9QUklOVCgobmRvLCIgIikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQotCXJldHVybiAodV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOworCXJldHVybiAoY29uc3QgdV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9LRSkpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTEzMjYsMTEgKzEzMTUsMTEgQEAKIAogCU5EX1BSSU5UKChuZG8sIiVzOiIsIE5QU1RSKElTQUtNUF9OUFRZUEVfSUQpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF9pZCAqKWV4dDsKKwlwID0gKGNvbnN0IHN0cnVjdCBpa2V2MV9wbF9pZCAqKWV4dDsKIAlORF9UQ0hFQ0soKnApOwogCVVOQUxJR05FRF9NRU1DUFkoJmlkLCBleHQsIHNpemVvZihpZCkpOwogCWlmIChzaXplb2YoKnApIDwgaXRlbV9sZW4pIHsKLQkJZGF0YSA9ICh1X2NoYXIgKikocCArIDEpOworCQlkYXRhID0gKGNvbnN0IHVfY2hhciAqKShwICsgMSk7CiAJCWxlbiA9IGl0ZW1fbGVuIC0gc2l6ZW9mKCpwKTsKIAl9IGVsc2UgewogCQlkYXRhID0gTlVMTDsKQEAgLTEzNTUsMjcgKzEzNDQsMjcgQEAKICNlbmRpZgogCWNhc2UgMjoKIAkgICAgewotCQljb25zdCBzdHJ1Y3QgaXBzZWNkb2lfaWQgKnA7Ci0JCXN0cnVjdCBpcHNlY2RvaV9pZCBpZDsKKwkJY29uc3Qgc3RydWN0IGlwc2VjZG9pX2lkICpkb2lfcDsKKwkJc3RydWN0IGlwc2VjZG9pX2lkIGRvaV9pZDsKIAkJc3RydWN0IHByb3RvZW50ICpwZTsKIAotCQlwID0gKHN0cnVjdCBpcHNlY2RvaV9pZCAqKWV4dDsKLQkJTkRfVENIRUNLKCpwKTsKLQkJVU5BTElHTkVEX01FTUNQWSgmaWQsIGV4dCwgc2l6ZW9mKGlkKSk7Ci0JCU5EX1BSSU5UKChuZG8sIiBpZHR5cGU9JXMiLCBTVFJfT1JfSUQoaWQudHlwZSwgaXBzZWNpZHR5cGVzdHIpKSk7CisJCWRvaV9wID0gKGNvbnN0IHN0cnVjdCBpcHNlY2RvaV9pZCAqKWV4dDsKKwkJTkRfVENIRUNLKCpkb2lfcCk7CisJCVVOQUxJR05FRF9NRU1DUFkoJmRvaV9pZCwgZXh0LCBzaXplb2YoZG9pX2lkKSk7CisJCU5EX1BSSU5UKChuZG8sIiBpZHR5cGU9JXMiLCBTVFJfT1JfSUQoZG9pX2lkLnR5cGUsIGlwc2VjaWR0eXBlc3RyKSkpOwogCQkvKiBBIHByb3RvY29sIElEIG9mIDAgRE9FUyBOT1QgbWVhbiBJUFBST1RPX0lQISAqLwotCQlwZSA9IGlkLnByb3RvX2lkID8gZ2V0cHJvdG9ieW51bWJlcihpZC5wcm90b19pZCkgOiBOVUxMOworCQlwZSA9IGRvaV9pZC5wcm90b19pZCA/IGdldHByb3RvYnludW1iZXIoZG9pX2lkLnByb3RvX2lkKSA6IE5VTEw7CiAJCWlmIChwZSkKIAkJCU5EX1BSSU5UKChuZG8sIiBwcm90b2lkPSVzIiwgcGUtPnBfbmFtZSkpOwogCQllbHNlCi0JCQlORF9QUklOVCgobmRvLCIgcHJvdG9pZD0ldSIsIGlkLnByb3RvX2lkKSk7Ci0JCU5EX1BSSU5UKChuZG8sIiBwb3J0PSVkIiwgbnRvaHMoaWQucG9ydCkpKTsKKwkJCU5EX1BSSU5UKChuZG8sIiBwcm90b2lkPSV1IiwgZG9pX2lkLnByb3RvX2lkKSk7CisJCU5EX1BSSU5UKChuZG8sIiBwb3J0PSVkIiwgbnRvaHMoZG9pX2lkLnBvcnQpKSk7CiAJCWlmICghbGVuKQogCQkJYnJlYWs7CiAJCWlmIChkYXRhID09IE5VTEwpCiAJCQlnb3RvIHRydW5jOwogCQlORF9UQ0hFQ0syKCpkYXRhLCBsZW4pOwotCQlzd2l0Y2ggKGlkLnR5cGUpIHsKKwkJc3dpdGNoIChkb2lfaWQudHlwZSkgewogCQljYXNlIElQU0VDRE9JX0lEX0lQVjRfQUREUjoKIAkJCWlmIChsZW4gPCA0KQogCQkJCU5EX1BSSU5UKChuZG8sIiBsZW49JWQgW2JhZDogPCA0XSIsIGxlbikpOwpAQCAtMTQwNyw3ICsxMzk2LDYgQEAKIAkJCWxlbiA9IDA7CiAJCQlicmVhazsKIAkJICAgIH0KLSNpZmRlZiBJTkVUNgogCQljYXNlIElQU0VDRE9JX0lEX0lQVjZfQUREUjoKIAkJCWlmIChsZW4gPCAxNikKIAkJCQlORF9QUklOVCgobmRvLCIgbGVuPSVkIFtiYWQ6IDwgMTZdIiwgbGVuKSk7CkBAIC0xNDIxLDcgKzE0MDksNyBAQAogCQkJaWYgKGxlbiA8IDIwKQogCQkJCU5EX1BSSU5UKChuZG8sIiBsZW49JWQgW2JhZDogPCAyMF0iLCBsZW4pKTsKIAkJCWVsc2UgewotCQkJCW1hc2sgPSAodV9jaGFyICopKGRhdGEgKyBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQkJbWFzayA9IChjb25zdCB1X2NoYXIgKikoZGF0YSArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAkJCQkvKlhYWCovCiAJCQkJTkRfUFJJTlQoKG5kbywiIGxlbj0lZCAlcy8weCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMnglMDJ4JTAyeCUwMngiLCBsZW4sCiAJCQkJCSAgaXA2YWRkcl9zdHJpbmcobmRvLCBkYXRhKSwKQEAgLTE0MzMsNyArMTQyMSw2IEBACiAJCQlsZW4gPSAwOwogCQkJYnJlYWs7CiAJCSAgICB9Ci0jZW5kaWYgLypJTkVUNiovCiAJCWNhc2UgSVBTRUNET0lfSURfSVBWNF9BRERSX1JBTkdFOgogCQkJaWYgKGxlbiA8IDgpCiAJCQkJTkRfUFJJTlQoKG5kbywiIGxlbj0lZCBbYmFkOiA8IDhdIiwgbGVuKSk7CkBAIC0xNDQ0LDcgKzE0MzEsNiBAQAogCQkJfQogCQkJbGVuID0gMDsKIAkJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJCWNhc2UgSVBTRUNET0lfSURfSVBWNl9BRERSX1JBTkdFOgogCQkJaWYgKGxlbiA8IDMyKQogCQkJCU5EX1BSSU5UKChuZG8sIiBsZW49JWQgW2JhZDogPCAzMl0iLCBsZW4pKTsKQEAgLTE0NTUsNyArMTQ0MSw2IEBACiAJCQl9CiAJCQlsZW4gPSAwOwogCQkJYnJlYWs7Ci0jZW5kaWYgLypJTkVUNiovCiAJCWNhc2UgSVBTRUNET0lfSURfREVSX0FTTjFfRE46CiAJCWNhc2UgSVBTRUNET0lfSURfREVSX0FTTjFfR046CiAJCWNhc2UgSVBTRUNET0lfSURfS0VZX0lEOgpAQCAtMTQ2OCwxMSArMTQ1MywxMSBAQAogCQlORF9QUklOVCgobmRvLCIgbGVuPSVkIiwgbGVuKSk7CiAJCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcpIHsKIAkJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpZGF0YSwgbGVuKSkKKwkJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKWRhdGEsIGxlbikpCiAJCQkJZ290byB0cnVuYzsKIAkJfQogCX0KLQlyZXR1cm4gKHVfY2hhciAqKWV4dCArIGl0ZW1fbGVuOworCXJldHVybiAoY29uc3QgdV9jaGFyICopZXh0ICsgaXRlbV9sZW47CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUihJU0FLTVBfTlBUWVBFX0lEKSkpOwogCXJldHVybiBOVUxMOwpAQCAtMTQ4MCw3ICsxNDY1LDcgQEAKIAogc3RhdGljIGNvbnN0IHVfY2hhciAqCiBpa2V2MV9jZXJ0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X2NoYXIgdHBheSBfVV8sCi0JCSBjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqZXh0LCB1X2ludCBpdGVtX2xlbiBfVV8sCisJCSBjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqZXh0LCB1X2ludCBpdGVtX2xlbiwKIAkJIGNvbnN0IHVfY2hhciAqZXAgX1VfLCB1aW50MzJfdCBwaGFzZSBfVV8sCiAJCSB1aW50MzJfdCBkb2kwIF9VXywKIAkJIHVpbnQzMl90IHByb3RvMCBfVV8sIGludCBkZXB0aCBfVV8pCkBAIC0xNDk1LDE3ICsxNDgwLDE3IEBACiAKIAlORF9QUklOVCgobmRvLCIlczoiLCBOUFNUUihJU0FLTVBfTlBUWVBFX0NFUlQpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF9jZXJ0ICopZXh0OworCXAgPSAoY29uc3Qgc3RydWN0IGlrZXYxX3BsX2NlcnQgKilleHQ7CiAJTkRfVENIRUNLKCpwKTsKIAlVTkFMSUdORURfTUVNQ1BZKCZjZXJ0LCBleHQsIHNpemVvZihjZXJ0KSk7CiAJTkRfUFJJTlQoKG5kbywiIGxlbj0lZCIsIGl0ZW1fbGVuIC0gNCkpOwogCU5EX1BSSU5UKChuZG8sIiB0eXBlPSVzIiwgU1RSX09SX0lEKChjZXJ0LmVuY29kZSksIGNlcnRzdHIpKSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgaXRlbV9sZW4pIHsKIAkJTkRfUFJJTlQoKG5kbywiICIpKTsKLQkJaWYgKCFyYXdwcmludChuZG8sIChjYWRkcl90KShleHQgKyAxKSwgaXRlbV9sZW4gLSA0KSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGV4dCArIDEpLCBpdGVtX2xlbiAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBpdGVtX2xlbjsKKwlyZXR1cm4gKGNvbnN0IHVfY2hhciAqKWV4dCArIGl0ZW1fbGVuOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9DRVJUKSkpOwogCXJldHVybiBOVUxMOwpAQCAtMTUxMyw3ICsxNDk4LDcgQEAKIAogc3RhdGljIGNvbnN0IHVfY2hhciAqCiBpa2V2MV9jcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9jaGFyIHRwYXkgX1VfLAotCSAgICAgICBjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqZXh0LCB1X2ludCBpdGVtX2xlbiBfVV8sCisJICAgICAgIGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQsIHVfaW50IGl0ZW1fbGVuLAogCSAgICAgICBjb25zdCB1X2NoYXIgKmVwIF9VXywgdWludDMyX3QgcGhhc2UgX1VfLCB1aW50MzJfdCBkb2kwIF9VXywKIAkgICAgICAgdWludDMyX3QgcHJvdG8wIF9VXywgaW50IGRlcHRoIF9VXykKIHsKQEAgLTE1MjcsMTcgKzE1MTIsMTcgQEAKIAogCU5EX1BSSU5UKChuZG8sIiVzOiIsIE5QU1RSKElTQUtNUF9OUFRZUEVfQ1IpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF9jZXJ0ICopZXh0OworCXAgPSAoY29uc3Qgc3RydWN0IGlrZXYxX3BsX2NlcnQgKilleHQ7CiAJTkRfVENIRUNLKCpwKTsKIAlVTkFMSUdORURfTUVNQ1BZKCZjZXJ0LCBleHQsIHNpemVvZihjZXJ0KSk7CiAJTkRfUFJJTlQoKG5kbywiIGxlbj0lZCIsIGl0ZW1fbGVuIC0gNCkpOwogCU5EX1BSSU5UKChuZG8sIiB0eXBlPSVzIiwgU1RSX09SX0lEKChjZXJ0LmVuY29kZSksIGNlcnRzdHIpKSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgaXRlbV9sZW4pIHsKIAkJTkRfUFJJTlQoKG5kbywiICIpKTsKLQkJaWYgKCFyYXdwcmludChuZG8sIChjYWRkcl90KShleHQgKyAxKSwgaXRlbV9sZW4gLSA0KSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGV4dCArIDEpLCBpdGVtX2xlbiAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBpdGVtX2xlbjsKKwlyZXR1cm4gKGNvbnN0IHVfY2hhciAqKWV4dCArIGl0ZW1fbGVuOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9DUikpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE1NTgsMTAgKzE1NDMsMTAgQEAKIAlORF9QUklOVCgobmRvLCIgbGVuPSVkIiwgbnRvaHMoZS5sZW4pIC0gNCkpOwogCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcgJiYgNCA8IG50b2hzKGUubGVuKSkgewogCQlORF9QUklOVCgobmRvLCIgIikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQotCXJldHVybiAodV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOworCXJldHVybiAoY29uc3QgdV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9IQVNIKSkpOwogCXJldHVybiBOVUxMOwpAQCAtMTU4MiwxMCArMTU2NywxMCBAQAogCU5EX1BSSU5UKChuZG8sIiBsZW49JWQiLCBudG9ocyhlLmxlbikgLSA0KSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbnRvaHMoZS5sZW4pKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUihJU0FLTVBfTlBUWVBFX1NJRykpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE1OTUsNyArMTU4MCw3IEBACiBpa2V2MV9ub25jZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9jaGFyIHRwYXkgX1VfLAogCQkgIGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQsCiAJCSAgdV9pbnQgaXRlbV9sZW4gX1VfLAotCQkgIGNvbnN0IHVfY2hhciAqZXAgX1VfLAorCQkgIGNvbnN0IHVfY2hhciAqZXAsCiAJCSAgdWludDMyX3QgcGhhc2UgX1VfLCB1aW50MzJfdCBkb2kgX1VfLAogCQkgIHVpbnQzMl90IHByb3RvIF9VXywgaW50IGRlcHRoIF9VXykKIHsKQEAgLTE2MDgsMTQgKzE1OTMsMTQgQEAKIAlORF9QUklOVCgobmRvLCIgbiBsZW49JWQiLCBudG9ocyhlLmxlbikgLSA0KSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbnRvaHMoZS5sZW4pKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9IGVsc2UgaWYgKDEgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbnRvaHMoZS5sZW4pKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghaWtlX3Nob3dfc29tZWRhdGEobmRvLCAodV9jaGFyICopKGNhZGRyX3QpKGV4dCArIDEpLCBlcCkpCisJCWlmICghaWtlX3Nob3dfc29tZWRhdGEobmRvLCAoY29uc3QgdV9jaGFyICopKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIGVwKSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQotCXJldHVybiAodV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOworCXJldHVybiAoY29uc3QgdV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9OT05DRSkpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE2MjcsOSArMTYxMiwxMCBAQAogCSAgICAgIGNvbnN0IHVfY2hhciAqZXAsIHVpbnQzMl90IHBoYXNlLCB1aW50MzJfdCBkb2kwIF9VXywKIAkgICAgICB1aW50MzJfdCBwcm90bzAgX1VfLCBpbnQgZGVwdGgpCiB7Ci0Jc3RydWN0IGlrZXYxX3BsX24gKnAsIG47CisJY29uc3Qgc3RydWN0IGlrZXYxX3BsX24gKnA7CisJc3RydWN0IGlrZXYxX3BsX24gbjsKIAljb25zdCB1X2NoYXIgKmNwOwotCXVfY2hhciAqZXAyOworCWNvbnN0IHVfY2hhciAqZXAyOwogCXVpbnQzMl90IGRvaTsKIAl1aW50MzJfdCBwcm90bzsKIAlzdGF0aWMgY29uc3QgY2hhciAqbm90aWZ5X2Vycm9yX3N0cltdID0gewpAQCAtMTY4MCw3ICsxNjY2LDcgQEAKIAogCU5EX1BSSU5UKChuZG8sIiVzOiIsIE5QU1RSKElTQUtNUF9OUFRZUEVfTikpKTsKIAotCXAgPSAoc3RydWN0IGlrZXYxX3BsX24gKilleHQ7CisJcCA9IChjb25zdCBzdHJ1Y3QgaWtldjFfcGxfbiAqKWV4dDsKIAlORF9UQ0hFQ0soKnApOwogCVVOQUxJR05FRF9NRU1DUFkoJm4sIGV4dCwgc2l6ZW9mKG4pKTsKIAlkb2kgPSBudG9obChuLmRvaSk7CkBAIC0xNjk4LDEwICsxNjg0LDEwIEBACiAJCQlORF9QUklOVCgobmRvLCIgdHlwZT0lcyIsIG51bXN0cihudG9ocyhuLnR5cGUpKSkpOwogCQlpZiAobi5zcGlfc2l6ZSkgewogCQkJTkRfUFJJTlQoKG5kbywiIHNwaT0iKSk7Ci0JCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKHAgKyAxKSwgbi5zcGlfc2l6ZSkpCisJCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikocCArIDEpLCBuLnNwaV9zaXplKSkKIAkJCQlnb3RvIHRydW5jOwogCQl9Ci0JCXJldHVybiAodV9jaGFyICopKHAgKyAxKSArIG4uc3BpX3NpemU7CisJCXJldHVybiAoY29uc3QgdV9jaGFyICopKHAgKyAxKSArIG4uc3BpX3NpemU7CiAJfQogCiAJTkRfUFJJTlQoKG5kbywiIGRvaT1pcHNlYyIpKTsKQEAgLTE3MTgsMTIgKzE3MDQsMTIgQEAKIAkJTkRfUFJJTlQoKG5kbywiIHR5cGU9JXMiLCBudW1zdHIobnRvaHMobi50eXBlKSkpKTsKIAlpZiAobi5zcGlfc2l6ZSkgewogCQlORF9QUklOVCgobmRvLCIgc3BpPSIpKTsKLQkJaWYgKCFyYXdwcmludChuZG8sIChjYWRkcl90KShwICsgMSksIG4uc3BpX3NpemUpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikocCArIDEpLCBuLnNwaV9zaXplKSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQogCi0JY3AgPSAodV9jaGFyICopKHAgKyAxKSArIG4uc3BpX3NpemU7Ci0JZXAyID0gKHVfY2hhciAqKXAgKyBpdGVtX2xlbjsKKwljcCA9IChjb25zdCB1X2NoYXIgKikocCArIDEpICsgbi5zcGlfc2l6ZTsKKwllcDIgPSAoY29uc3QgdV9jaGFyICopcCArIGl0ZW1fbGVuOwogCiAJaWYgKGNwIDwgZXApIHsKIAkJTkRfUFJJTlQoKG5kbywiIG9yaWc9KCIpKTsKQEAgLTE3NDQsNyArMTczMCw3IEBACiAJCQlicmVhazsKIAkJY2FzZSBJU0FLTVBfTlRZUEVfTk9fUFJPUE9TQUxfQ0hPU0VOOgogCQkJaWYgKGlrZXYxX3N1Yl9wcmludChuZG8sIElTQUtNUF9OUFRZUEVfU0EsCi0JCQkJCSAgICAoc3RydWN0IGlzYWttcF9nZW4gKiljcCwgZXAsIHBoYXNlLCBkb2ksIHByb3RvLAorCQkJCQkgICAgKGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICopY3AsIGVwLCBwaGFzZSwgZG9pLCBwcm90bywKIAkJCQkJICAgIGRlcHRoKSA9PSBOVUxMKQogCQkJCXJldHVybiBOVUxMOwogCQkJYnJlYWs7CkBAIC0xNzU2LDcgKzE3NDIsNyBAQAogCQl9CiAJCU5EX1BSSU5UKChuZG8sIikiKSk7CiAJfQotCXJldHVybiAodV9jaGFyICopZXh0ICsgaXRlbV9sZW47CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBpdGVtX2xlbjsKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sIiBbfCVzXSIsIE5QU1RSKElTQUtNUF9OUFRZUEVfTikpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE3NzcsNyArMTc2Myw3IEBACiAKIAlORF9QUklOVCgobmRvLCIlczoiLCBOUFNUUihJU0FLTVBfTlBUWVBFX0QpKSk7CiAKLQlwID0gKHN0cnVjdCBpa2V2MV9wbF9kICopZXh0OworCXAgPSAoY29uc3Qgc3RydWN0IGlrZXYxX3BsX2QgKilleHQ7CiAJTkRfVENIRUNLKCpwKTsKIAlVTkFMSUdORURfTUVNQ1BZKCZkLCBleHQsIHNpemVvZihkKSk7CiAJZG9pID0gbnRvaGwoZC5kb2kpOwpAQCAtMTc5MiwxMSArMTc3OCwxMSBAQAogCU5EX1BSSU5UKChuZG8sIiBzcGlsZW49JXUiLCBkLnNwaV9zaXplKSk7CiAJTkRfUFJJTlQoKG5kbywiIG5zcGk9JXUiLCBudG9ocyhkLm51bV9zcGkpKSk7CiAJTkRfUFJJTlQoKG5kbywiIHNwaT0iKSk7Ci0JcSA9ICh1aW50OF90ICopKHAgKyAxKTsKKwlxID0gKGNvbnN0IHVpbnQ4X3QgKikocCArIDEpOwogCWZvciAoaSA9IDA7IGkgPCBudG9ocyhkLm51bV9zcGkpOyBpKyspIHsKIAkJaWYgKGkgIT0gMCkKIAkJCU5EX1BSSU5UKChuZG8sIiwiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdClxLCBkLnNwaV9zaXplKSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopcSwgZC5zcGlfc2l6ZSkpCiAJCQlnb3RvIHRydW5jOwogCQlxICs9IGQuc3BpX3NpemU7CiAJfQpAQCAtMTgyMiwxMCArMTgwOCwxMCBAQAogCU5EX1BSSU5UKChuZG8sIiBsZW49JWQiLCBudG9ocyhlLmxlbikgLSA0KSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbnRvaHMoZS5sZW4pKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUihJU0FLTVBfTlBUWVBFX1ZJRCkpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTE4NTYsMjAgKzE4NDIsMTkgQEAKIAlORF9QUklOVCgobmRvLCIgbGVuPSVkIiwgbnRvaHMoZS5sZW4pIC0gNCkpOwogCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcgJiYgNCA8IG50b2hzKGUubGVuKSkgewogCQlORF9QUklOVCgobmRvLCIgIikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGV4dCArIDEpLCBudG9ocyhlLmxlbikgLSA0KSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQotCXJldHVybiAodV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOworCXJldHVybiAoY29uc3QgdV9jaGFyICopZXh0ICsgbnRvaHMoZS5sZW4pOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIodHBheSkpKTsKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGNvbnN0IHVfY2hhciAqCi1pa2V2Ml90X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X2NoYXIgdHBheSBfVV8sIGludCBwY291bnQsCitpa2V2Ml90X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBpbnQgdGNvdW50LAogCSAgICAgIGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQsIHVfaW50IGl0ZW1fbGVuLAotCSAgICAgIGNvbnN0IHVfY2hhciAqZXAsIHVpbnQzMl90IHBoYXNlIF9VXywgdWludDMyX3QgZG9pIF9VXywKLQkgICAgICB1aW50MzJfdCBwcm90byBfVV8sIGludCBkZXB0aCBfVV8pCisJICAgICAgY29uc3QgdV9jaGFyICplcCkKIHsKIAljb25zdCBzdHJ1Y3QgaWtldjJfdCAqcDsKIAlzdHJ1Y3QgaWtldjJfdCB0OwpAQCAtMTg4MCw3ICsxODY1LDcgQEAKIAlzaXplX3Qgbm1hcDsKIAljb25zdCB1X2NoYXIgKmVwMjsKIAotCXAgPSAoc3RydWN0IGlrZXYyX3QgKilleHQ7CisJcCA9IChjb25zdCBzdHJ1Y3QgaWtldjJfdCAqKWV4dDsKIAlORF9UQ0hFQ0soKnApOwogCVVOQUxJR05FRF9NRU1DUFkoJnQsIGV4dCwgc2l6ZW9mKHQpKTsKIAlpa2V2Ml9wYXlfcHJpbnQobmRvLCBOUFNUUihJU0FLTVBfTlBUWVBFX1QpLCB0LmguY3JpdGljYWwpOwpAQCAtMTkxOSwxNSArMTkwNCwxNSBAQAogCX0KIAogCWlmIChpZHN0cikKLQkJTkRfUFJJTlQoKG5kbywiICMldSB0eXBlPSVzIGlkPSVzICIsIHBjb3VudCwKKwkJTkRfUFJJTlQoKG5kbywiICMldSB0eXBlPSVzIGlkPSVzICIsIHRjb3VudCwKIAkJCSAgU1RSX09SX0lEKHQudF90eXBlLCBpa2V2Ml90X3R5cGVfbWFwKSwKIAkJCSAgaWRzdHIpKTsKIAllbHNlCi0JCU5EX1BSSU5UKChuZG8sIiAjJXUgdHlwZT0lcyBpZD0ldSAiLCBwY291bnQsCisJCU5EX1BSSU5UKChuZG8sIiAjJXUgdHlwZT0lcyBpZD0ldSAiLCB0Y291bnQsCiAJCQkgIFNUUl9PUl9JRCh0LnRfdHlwZSwgaWtldjJfdF90eXBlX21hcCksCiAJCQkgIHQudF9pZCkpOwotCWNwID0gKHVfY2hhciAqKShwICsgMSk7Ci0JZXAyID0gKHVfY2hhciAqKXAgKyBpdGVtX2xlbjsKKwljcCA9IChjb25zdCB1X2NoYXIgKikocCArIDEpOworCWVwMiA9IChjb25zdCB1X2NoYXIgKilwICsgaXRlbV9sZW47CiAJd2hpbGUgKGNwIDwgZXAgJiYgY3AgPCBlcDIpIHsKIAkJaWYgKG1hcCAmJiBubWFwKSB7CiAJCQljcCA9IGlrZXYxX2F0dHJtYXBfcHJpbnQobmRvLCBjcCwgKGVwIDwgZXAyKSA/IGVwIDogZXAyLApAQCAtMTk0NSwzNCArMTkzMCw5NyBAQAogCiBzdGF0aWMgY29uc3QgdV9jaGFyICoKIGlrZXYyX3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVfY2hhciB0cGF5IF9VXywgaW50IHBjb3VudCBfVV8sCi0JICAgICAgY29uc3Qgc3RydWN0IGlzYWttcF9nZW4gKmV4dCwgdV9pbnQgaXRlbV9sZW4gX1VfLAotCSAgICAgICBjb25zdCB1X2NoYXIgKmVwLCB1aW50MzJfdCBwaGFzZSwgdWludDMyX3QgZG9pMCwKLQkgICAgICAgdWludDMyX3QgcHJvdG8wIF9VXywgaW50IGRlcHRoKQorCSAgICAgIGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQsIHVfaW50IG9wcm9wX2xlbmd0aCwKKwkgICAgICBjb25zdCB1X2NoYXIgKmVwLCBpbnQgZGVwdGgpCiB7CiAJY29uc3Qgc3RydWN0IGlrZXYyX3AgKnA7CiAJc3RydWN0IGlrZXYyX3AgcHJvcDsKKwl1X2ludCBwcm9wX2xlbmd0aDsKIAljb25zdCB1X2NoYXIgKmNwOworCWludCBpOworCWludCB0Y291bnQ7CisJdV9jaGFyIG5wOworCXN0cnVjdCBpc2FrbXBfZ2VuIGU7CisJdV9pbnQgaXRlbV9sZW47CiAKLQlwID0gKHN0cnVjdCBpa2V2Ml9wICopZXh0OworCXAgPSAoY29uc3Qgc3RydWN0IGlrZXYyX3AgKilleHQ7CiAJTkRfVENIRUNLKCpwKTsKIAlVTkFMSUdORURfTUVNQ1BZKCZwcm9wLCBleHQsIHNpemVvZihwcm9wKSk7CisKIAlpa2V2Ml9wYXlfcHJpbnQobmRvLCBOUFNUUihJU0FLTVBfTlBUWVBFX1ApLCBwcm9wLmguY3JpdGljYWwpOwogCisJLyoKKwkgKiBpa2V2Ml9zYV9wcmludCgpIGd1YXJhbnRlZXMgdGhhdCB0aGlzIGlzID49IDQuCisJICovCisJcHJvcF9sZW5ndGggPSBvcHJvcF9sZW5ndGggLSA0OwogCU5EX1BSSU5UKChuZG8sIiAjJXUgcHJvdG9pZD0lcyB0cmFuc2Zvcm09JWQgbGVuPSV1IiwKIAkJICBwcm9wLnBfbm8sICBQUk9UT0lEU1RSKHByb3AucHJvdF9pZCksCi0JCSAgcHJvcC5udW1fdCwgbnRvaHMocHJvcC5oLmxlbikpKTsKKwkJICBwcm9wLm51bV90LCBvcHJvcF9sZW5ndGgpKTsKKwljcCA9IChjb25zdCB1X2NoYXIgKikocCArIDEpOworCiAJaWYgKHByb3Auc3BpX3NpemUpIHsKKwkJaWYgKHByb3BfbGVuZ3RoIDwgcHJvcC5zcGlfc2l6ZSkKKwkJCWdvdG8gdG9vbG9uZzsKIAkJTkRfUFJJTlQoKG5kbywiIHNwaT0iKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkocCArIDEpLCBwcm9wLnNwaV9zaXplKSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopY3AsIHByb3Auc3BpX3NpemUpKQogCQkJZ290byB0cnVuYzsKKwkJY3AgKz0gcHJvcC5zcGlfc2l6ZTsKKwkJcHJvcF9sZW5ndGggLT0gcHJvcC5zcGlfc2l6ZTsKIAl9CiAKLQlleHQgPSAoc3RydWN0IGlzYWttcF9nZW4gKikoKHVfY2hhciAqKShwICsgMSkgKyBwcm9wLnNwaV9zaXplKTsKLQlORF9UQ0hFQ0soKmV4dCk7CisJLyoKKwkgKiBQcmludCB0aGUgdHJhbnNmb3Jtcy4KKwkgKi8KKwl0Y291bnQgPSAwOworCWZvciAobnAgPSBJU0FLTVBfTlBUWVBFX1Q7IG5wICE9IDA7IG5wID0gZS5ucCkgeworCQl0Y291bnQrKzsKKwkJZXh0ID0gKGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICopY3A7CisJCWlmIChwcm9wX2xlbmd0aCA8IHNpemVvZigqZXh0KSkKKwkJCWdvdG8gdG9vbG9uZzsKKwkJTkRfVENIRUNLKCpleHQpOwogCi0JY3AgPSBpa2V2Ml9zdWJfcHJpbnQobmRvLCBOVUxMLCBJU0FLTVBfTlBUWVBFX1QsIGV4dCwgZXAsIHBoYXNlLCBkb2kwLAotCQkJICAgICBwcm9wLnByb3RfaWQsIGRlcHRoKTsKKwkJVU5BTElHTkVEX01FTUNQWSgmZSwgZXh0LCBzaXplb2YoZSkpOwogCisJCS8qCisJCSAqIFNpbmNlIHdlIGNhbid0IGhhdmUgYSBwYXlsb2FkIGxlbmd0aCBvZiBsZXNzIHRoYW4gNCBieXRlcywKKwkJICogd2UgbmVlZCB0byBiYWlsIG91dCBoZXJlIGlmIHRoZSBnZW5lcmljIGhlYWRlciBpcyBub25zZW5zaWNhbAorCQkgKiBvciB0cnVuY2F0ZWQsIG90aGVyd2lzZSB3ZSBjb3VsZCBsb29wIGZvcmV2ZXIgcHJvY2Vzc2luZworCQkgKiB6ZXJvLWxlbmd0aCBpdGVtcyBvciBvdGhlcndpc2UgbWlzZGlzc2VjdCB0aGUgcGFja2V0LgorCQkgKi8KKwkJaXRlbV9sZW4gPSBudG9ocyhlLmxlbik7CisJCWlmIChpdGVtX2xlbiA8PSA0KQorCQkJZ290byB0cnVuYzsKKworCQlpZiAocHJvcF9sZW5ndGggPCBpdGVtX2xlbikKKwkJCWdvdG8gdG9vbG9uZzsKKwkJTkRfVENIRUNLMigqY3AsIGl0ZW1fbGVuKTsKKworCQlkZXB0aCsrOworCQlORF9QUklOVCgobmRvLCJcbiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCisJCQlORF9QUklOVCgobmRvLCIgICAgIikpOworCQlORF9QUklOVCgobmRvLCIoIikpOworCQlpZiAobnAgPT0gSVNBS01QX05QVFlQRV9UKSB7CisJCQljcCA9IGlrZXYyX3RfcHJpbnQobmRvLCB0Y291bnQsIGV4dCwgaXRlbV9sZW4sIGVwKTsKKwkJCWlmIChjcCA9PSBOVUxMKSB7CisJCQkJLyogZXJyb3IsIGFscmVhZHkgcmVwb3J0ZWQgKi8KKwkJCQlyZXR1cm4gTlVMTDsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCU5EX1BSSU5UKChuZG8sICIlcyIsIE5QU1RSKG5wKSkpOworCQkJY3AgKz0gaXRlbV9sZW47CisJCX0KKwkJTkRfUFJJTlQoKG5kbywiKSIpKTsKKwkJZGVwdGgtLTsKKwkJcHJvcF9sZW5ndGggLT0gaXRlbV9sZW47CisJfQorCXJldHVybiBjcDsKK3Rvb2xvbmc6CisJLyoKKwkgKiBTa2lwIHRoZSByZXN0IG9mIHRoZSBwcm9wb3NhbC4KKwkgKi8KKwljcCArPSBwcm9wX2xlbmd0aDsKKwlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUihJU0FLTVBfTlBUWVBFX1ApKSk7CiAJcmV0dXJuIGNwOwogdHJ1bmM6CiAJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIoSVNBS01QX05QVFlQRV9QKSkpOwpAQCAtMTk4MiwyNiArMjAzMCw4NiBAQAogc3RhdGljIGNvbnN0IHVfY2hhciAqCiBpa2V2Ml9zYV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9jaGFyIHRwYXksCiAJCWNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQxLAotCQl1X2ludCBpdGVtX2xlbiBfVV8sIGNvbnN0IHVfY2hhciAqZXAgX1VfLAorCQl1X2ludCBvc2FfbGVuZ3RoLCBjb25zdCB1X2NoYXIgKmVwLAogCQl1aW50MzJfdCBwaGFzZSBfVV8sIHVpbnQzMl90IGRvaSBfVV8sCi0JCXVpbnQzMl90IHByb3RvIF9VXywgaW50IGRlcHRoIF9VXykKKwkJdWludDMyX3QgcHJvdG8gX1VfLCBpbnQgZGVwdGgpCiB7CisJY29uc3Qgc3RydWN0IGlzYWttcF9nZW4gKmV4dDsKIAlzdHJ1Y3QgaXNha21wX2dlbiBlOwotCWludCAgICBvc2FfbGVuZ3RoLCBzYV9sZW5ndGg7CisJdV9pbnQgc2FfbGVuZ3RoOworCWNvbnN0IHVfY2hhciAqY3A7CisJaW50IGk7CisJaW50IHBjb3VudDsKKwl1X2NoYXIgbnA7CisJdV9pbnQgaXRlbV9sZW47CiAKIAlORF9UQ0hFQ0soKmV4dDEpOwogCVVOQUxJR05FRF9NRU1DUFkoJmUsIGV4dDEsIHNpemVvZihlKSk7CiAJaWtldjJfcGF5X3ByaW50KG5kbywgInNhIiwgZS5jcml0aWNhbCk7CiAKKwkvKgorCSAqIGlrZXYyX3N1YjBfcHJpbnQoKSBndWFyYW50ZWVzIHRoYXQgdGhpcyBpcyA+PSA0LgorCSAqLwogCW9zYV9sZW5ndGg9IG50b2hzKGUubGVuKTsKIAlzYV9sZW5ndGggPSBvc2FfbGVuZ3RoIC0gNDsKIAlORF9QUklOVCgobmRvLCIgbGVuPSVkIiwgc2FfbGVuZ3RoKSk7CiAKLQlpa2V2Ml9zdWJfcHJpbnQobmRvLCBOVUxMLCBJU0FLTVBfTlBUWVBFX1AsCi0JCQlleHQxKzEsIGVwLAotCQkJMCwgMCwgMCwgZGVwdGgpOworCS8qCisJICogUHJpbnQgdGhlIHBheWxvYWRzLgorCSAqLworCWNwID0gKGNvbnN0IHVfY2hhciAqKShleHQxICsgMSk7CisJcGNvdW50ID0gMDsKKwlmb3IgKG5wID0gSVNBS01QX05QVFlQRV9QOyBucCAhPSAwOyBucCA9IGUubnApIHsKKwkJcGNvdW50Kys7CisJCWV4dCA9IChjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqKWNwOworCQlpZiAoc2FfbGVuZ3RoIDwgc2l6ZW9mKCpleHQpKQorCQkJZ290byB0b29sb25nOworCQlORF9UQ0hFQ0soKmV4dCk7CiAKLQlyZXR1cm4gKHVfY2hhciAqKWV4dDEgKyBvc2FfbGVuZ3RoOworCQlVTkFMSUdORURfTUVNQ1BZKCZlLCBleHQsIHNpemVvZihlKSk7CisKKwkJLyoKKwkJICogU2luY2Ugd2UgY2FuJ3QgaGF2ZSBhIHBheWxvYWQgbGVuZ3RoIG9mIGxlc3MgdGhhbiA0IGJ5dGVzLAorCQkgKiB3ZSBuZWVkIHRvIGJhaWwgb3V0IGhlcmUgaWYgdGhlIGdlbmVyaWMgaGVhZGVyIGlzIG5vbnNlbnNpY2FsCisJCSAqIG9yIHRydW5jYXRlZCwgb3RoZXJ3aXNlIHdlIGNvdWxkIGxvb3AgZm9yZXZlciBwcm9jZXNzaW5nCisJCSAqIHplcm8tbGVuZ3RoIGl0ZW1zIG9yIG90aGVyd2lzZSBtaXNkaXNzZWN0IHRoZSBwYWNrZXQuCisJCSAqLworCQlpdGVtX2xlbiA9IG50b2hzKGUubGVuKTsKKwkJaWYgKGl0ZW1fbGVuIDw9IDQpCisJCQlnb3RvIHRydW5jOworCisJCWlmIChzYV9sZW5ndGggPCBpdGVtX2xlbikKKwkJCWdvdG8gdG9vbG9uZzsKKwkJTkRfVENIRUNLMigqY3AsIGl0ZW1fbGVuKTsKKworCQlkZXB0aCsrOworCQlORF9QUklOVCgobmRvLCJcbiIpKTsKKwkJZm9yIChpID0gMDsgaSA8IGRlcHRoOyBpKyspCisJCQlORF9QUklOVCgobmRvLCIgICAgIikpOworCQlORF9QUklOVCgobmRvLCIoIikpOworCQlpZiAobnAgPT0gSVNBS01QX05QVFlQRV9QKSB7CisJCQljcCA9IGlrZXYyX3BfcHJpbnQobmRvLCBucCwgcGNvdW50LCBleHQsIGl0ZW1fbGVuLAorCQkJCQkgICBlcCwgZGVwdGgpOworCQkJaWYgKGNwID09IE5VTEwpIHsKKwkJCQkvKiBlcnJvciwgYWxyZWFkeSByZXBvcnRlZCAqLworCQkJCXJldHVybiBOVUxMOworCQkJfQorCQl9IGVsc2UgeworCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgTlBTVFIobnApKSk7CisJCQljcCArPSBpdGVtX2xlbjsKKwkJfQorCQlORF9QUklOVCgobmRvLCIpIikpOworCQlkZXB0aC0tOworCQlzYV9sZW5ndGggLT0gaXRlbV9sZW47CisJfQorCXJldHVybiBjcDsKK3Rvb2xvbmc6CisJLyoKKwkgKiBTa2lwIHRoZSByZXN0IG9mIHRoZSBTQS4KKwkgKi8KKwljcCArPSBzYV9sZW5ndGg7CisJTkRfUFJJTlQoKG5kbywiIFt8JXNdIiwgTlBTVFIodHBheSkpKTsKKwlyZXR1cm4gY3A7CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUih0cGF5KSkpOwogCXJldHVybiBOVUxMOwpAQCAtMjAxNSw5ICsyMTIzLDkgQEAKIAkJdWludDMyX3QgcHJvdG8gX1VfLCBpbnQgZGVwdGggX1VfKQogewogCXN0cnVjdCBpa2V2Ml9rZSBrZTsKLQlzdHJ1Y3QgaWtldjJfa2UgKms7CisJY29uc3Qgc3RydWN0IGlrZXYyX2tlICprOwogCi0JayA9IChzdHJ1Y3QgaWtldjJfa2UgKilleHQ7CisJayA9IChjb25zdCBzdHJ1Y3QgaWtldjJfa2UgKilleHQ7CiAJTkRfVENIRUNLKCpleHQpOwogCVVOQUxJR05FRF9NRU1DUFkoJmtlLCBleHQsIHNpemVvZihrZSkpOwogCWlrZXYyX3BheV9wcmludChuZG8sIE5QU1RSKHRwYXkpLCBrZS5oLmNyaXRpY2FsKTsKQEAgLTIwMjcsMTAgKzIxMzUsMTAgQEAKIAogCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcgJiYgOCA8IG50b2hzKGtlLmgubGVuKSkgewogCQlORF9QUklOVCgobmRvLCIgIikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKGsgKyAxKSwgbnRvaHMoa2UuaC5sZW4pIC0gOCkpCisJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKShrICsgMSksIG50b2hzKGtlLmgubGVuKSAtIDgpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBudG9ocyhrZS5oLmxlbik7CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBudG9ocyhrZS5oLmxlbik7CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUih0cGF5KSkpOwogCXJldHVybiBOVUxMOwpAQCAtMjA0Niw3ICsyMTU0LDcgQEAKIAlzdHJ1Y3QgaWtldjJfaWQgaWQ7CiAJaW50IGlkX2xlbiwgaWR0eXBlX2xlbiwgaTsKIAl1bnNpZ25lZCBpbnQgZHVtcGFzY2lpLCBkdW1waGV4OwotCXVuc2lnbmVkIGNoYXIgKnR5cGVkYXRhOworCWNvbnN0IHVuc2lnbmVkIGNoYXIgKnR5cGVkYXRhOwogCiAJTkRfVENIRUNLKCpleHQpOwogCVVOQUxJR05FRF9NRU1DUFkoJmlkLCBleHQsIHNpemVvZihpZCkpOwpAQCAtMjA1NywxNCArMjE2NSwxNCBAQAogCU5EX1BSSU5UKChuZG8sIiBsZW49JWQiLCBpZF9sZW4gLSA0KSk7CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgaWRfbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIGlkX2xlbiAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIGlkX2xlbiAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9CiAKIAlpZHR5cGVfbGVuID1pZF9sZW4gLSBzaXplb2Yoc3RydWN0IGlrZXYyX2lkKTsKIAlkdW1wYXNjaWkgPSAwOwogCWR1bXBoZXggICA9IDA7Ci0JdHlwZWRhdGEgID0gKHVuc2lnbmVkIGNoYXIgKikoZXh0KStzaXplb2Yoc3RydWN0IGlrZXYyX2lkKTsKKwl0eXBlZGF0YSAgPSAoY29uc3QgdW5zaWduZWQgY2hhciAqKShleHQpK3NpemVvZihzdHJ1Y3QgaWtldjJfaWQpOwogCiAJc3dpdGNoKGlkLnR5cGUpIHsKIAljYXNlIElEX0lQVjRfQUREUjoKQEAgLTIxMDgsMTEgKzIyMTYsMTEgQEAKIAkJfQogCX0KIAlpZihkdW1waGV4KSB7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCl0eXBlZGF0YSwgaWR0eXBlX2xlbikpCisJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKXR5cGVkYXRhLCBpZHR5cGVfbGVuKSkKIAkJCWdvdG8gdHJ1bmM7CiAJfQogCi0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBpZF9sZW47CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBpZF9sZW47CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUih0cGF5KSkpOwogCXJldHVybiBOVUxMOwpAQCAtMjE0MSwxNCArMjI0OSwxNCBAQAogc3RhdGljIGNvbnN0IHVfY2hhciAqCiBpa2V2Ml9hdXRoX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1X2NoYXIgdHBheSwKIAkJY29uc3Qgc3RydWN0IGlzYWttcF9nZW4gKmV4dCwKLQkJdV9pbnQgaXRlbV9sZW4gX1VfLCBjb25zdCB1X2NoYXIgKmVwIF9VXywKKwkJdV9pbnQgaXRlbV9sZW4gX1VfLCBjb25zdCB1X2NoYXIgKmVwLAogCQl1aW50MzJfdCBwaGFzZSBfVV8sIHVpbnQzMl90IGRvaSBfVV8sCiAJCXVpbnQzMl90IHByb3RvIF9VXywgaW50IGRlcHRoIF9VXykKIHsKIAlzdHJ1Y3QgaWtldjJfYXV0aCBhOwogCWNvbnN0IGNoYXIgKnYyX2F1dGhbXT17ICJpbnZhbGlkIiwgInJzYXNpZyIsCiAJCQkJInNoYXJlZC1zZWNyZXQiLCAiZHNzc2lnIiB9OwotCXVfY2hhciAqYXV0aGRhdGEgPSAodV9jaGFyKilleHQgKyBzaXplb2YoYSk7CisJY29uc3QgdV9jaGFyICphdXRoZGF0YSA9IChjb25zdCB1X2NoYXIqKWV4dCArIHNpemVvZihhKTsKIAl1bnNpZ25lZCBpbnQgbGVuOwogCiAJTkRfVENIRUNLKCpleHQpOwpAQCAtMjE2MSwxNCArMjI2OSwxNCBAQAogCiAJaWYgKDEgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sIiBhdXRoZGF0YT0oIikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpYXV0aGRhdGEsIGxlbiAtIHNpemVvZihhKSkpCisJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKWF1dGhkYXRhLCBsZW4gLSBzaXplb2YoYSkpKQogCQkJZ290byB0cnVuYzsKIAkJTkRfUFJJTlQoKG5kbywiKSAiKSk7CiAJfSBlbHNlIGlmKG5kby0+bmRvX3ZmbGFnICYmIDQgPCBsZW4pIHsKIAkJaWYoIWlrZV9zaG93X3NvbWVkYXRhKG5kbywgYXV0aGRhdGEsIGVwKSkgZ290byB0cnVuYzsKIAl9CiAKLQlyZXR1cm4gKHVfY2hhciAqKWV4dCArIGxlbjsKKwlyZXR1cm4gKGNvbnN0IHVfY2hhciAqKWV4dCArIGxlbjsKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sIiBbfCVzXSIsIE5QU1RSKHRwYXkpKSk7CiAJcmV0dXJuIE5VTEw7CkBAIC0yMTc3LDcgKzIyODUsNyBAQAogc3RhdGljIGNvbnN0IHVfY2hhciAqCiBpa2V2Ml9ub25jZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdV9jaGFyIHRwYXksCiAJCWNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICpleHQsCi0JCXVfaW50IGl0ZW1fbGVuIF9VXywgY29uc3QgdV9jaGFyICplcCBfVV8sCisJCXVfaW50IGl0ZW1fbGVuIF9VXywgY29uc3QgdV9jaGFyICplcCwKIAkJdWludDMyX3QgcGhhc2UgX1VfLCB1aW50MzJfdCBkb2kgX1VfLAogCQl1aW50MzJfdCBwcm90byBfVV8sIGludCBkZXB0aCBfVV8pCiB7CkBAIC0yMTkwLDE0ICsyMjk4LDE0IEBACiAJTkRfUFJJTlQoKG5kbywiIGxlbj0lZCIsIG50b2hzKGUubGVuKSAtIDQpKTsKIAlpZiAoMSA8IG5kby0+bmRvX3ZmbGFnICYmIDQgPCBudG9ocyhlLmxlbikpIHsKIAkJTkRfUFJJTlQoKG5kbywiIG5vbmNlPSgiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQogCQkJZ290byB0cnVuYzsKIAkJTkRfUFJJTlQoKG5kbywiKSAiKSk7CiAJfSBlbHNlIGlmKG5kby0+bmRvX3ZmbGFnICYmIDQgPCBudG9ocyhlLmxlbikpIHsKIAkJaWYoIWlrZV9zaG93X3NvbWVkYXRhKG5kbywgKGNvbnN0IHVfY2hhciAqKShleHQrMSksIGVwKSkgZ290byB0cnVuYzsKIAl9CiAKLQlyZXR1cm4gKHVfY2hhciAqKWV4dCArIG50b2hzKGUubGVuKTsKKwlyZXR1cm4gKGNvbnN0IHVfY2hhciAqKWV4dCArIG50b2hzKGUubGVuKTsKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sIiBbfCVzXSIsIE5QU1RSKHRwYXkpKSk7CiAJcmV0dXJuIE5VTEw7CkBAIC0yMjA3LDE3ICsyMzE1LDE4IEBACiBzdGF0aWMgY29uc3QgdV9jaGFyICoKIGlrZXYyX25fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVfY2hhciB0cGF5IF9VXywKIAkJY29uc3Qgc3RydWN0IGlzYWttcF9nZW4gKmV4dCwKLQkJdV9pbnQgaXRlbV9sZW4gX1VfLCBjb25zdCB1X2NoYXIgKmVwIF9VXywKKwkJdV9pbnQgaXRlbV9sZW4sIGNvbnN0IHVfY2hhciAqZXAsCiAJCXVpbnQzMl90IHBoYXNlIF9VXywgdWludDMyX3QgZG9pIF9VXywKIAkJdWludDMyX3QgcHJvdG8gX1VfLCBpbnQgZGVwdGggX1VfKQogewotCXN0cnVjdCBpa2V2Ml9uICpwLCBuOworCWNvbnN0IHN0cnVjdCBpa2V2Ml9uICpwOworCXN0cnVjdCBpa2V2Ml9uIG47CiAJY29uc3QgdV9jaGFyICpjcDsKIAl1X2NoYXIgc2hvd3NwaSwgc2hvd2RhdGEsIHNob3dzb21lZGF0YTsKIAljb25zdCBjaGFyICpub3RpZnlfbmFtZTsKIAl1aW50MzJfdCB0eXBlOwogCi0JcCA9IChzdHJ1Y3QgaWtldjJfbiAqKWV4dDsKKwlwID0gKGNvbnN0IHN0cnVjdCBpa2V2Ml9uICopZXh0OwogCU5EX1RDSEVDSygqcCk7CiAJVU5BTElHTkVEX01FTUNQWSgmbiwgZXh0LCBzaXplb2YobikpOwogCWlrZXYyX3BheV9wcmludChuZG8sIE5QU1RSKElTQUtNUF9OUFRZUEVfTiksIG4uaC5jcml0aWNhbCk7CkBAIC0yMzg0LDExICsyNDkzLDExIEBACiAKIAlpZiAoc2hvd3NwaSAmJiBuLnNwaV9zaXplKSB7CiAJCU5EX1BSSU5UKChuZG8sIiBzcGk9IikpOwotCQlpZiAoIXJhd3ByaW50KG5kbywgKGNhZGRyX3QpKHAgKyAxKSwgbi5zcGlfc2l6ZSkpCisJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKShwICsgMSksIG4uc3BpX3NpemUpKQogCQkJZ290byB0cnVuYzsKIAl9CiAKLQljcCA9ICh1X2NoYXIgKikocCArIDEpICsgbi5zcGlfc2l6ZTsKKwljcCA9IChjb25zdCB1X2NoYXIgKikocCArIDEpICsgbi5zcGlfc2l6ZTsKIAogCWlmKDMgPCBuZG8tPm5kb192ZmxhZykgewogCQlzaG93ZGF0YSA9IDE7CkBAIC0yMzk2LDcgKzI1MDUsNyBAQAogCiAJaWYgKChzaG93ZGF0YSB8fCAoc2hvd3NvbWVkYXRhICYmIGVwLWNwIDwgMzApKSAmJiBjcCA8IGVwKSB7CiAJCU5EX1BSSU5UKChuZG8sIiBkYXRhPSgiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoY3ApLCBlcCAtIGNwKSkKKwkJaWYgKCFyYXdwcmludChuZG8sIChjb25zdCB1aW50OF90ICopKGNwKSwgZXAgLSBjcCkpCiAJCQlnb3RvIHRydW5jOwogCiAJCU5EX1BSSU5UKChuZG8sIikiKSk7CkBAIC0yNDA1LDcgKzI1MTQsNyBAQAogCQlpZighaWtlX3Nob3dfc29tZWRhdGEobmRvLCBjcCwgZXApKSBnb3RvIHRydW5jOwogCX0KIAotCXJldHVybiAodV9jaGFyICopZXh0ICsgaXRlbV9sZW47CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBpdGVtX2xlbjsKIHRydW5jOgogCU5EX1BSSU5UKChuZG8sIiBbfCVzXSIsIE5QU1RSKElTQUtNUF9OUFRZUEVfTikpKTsKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NDYsMTAgKzI1NTUsMTAgQEAKIAl9CiAJaWYgKDIgPCBuZG8tPm5kb192ZmxhZyAmJiA0IDwgbGVuKSB7CiAJCU5EX1BSSU5UKChuZG8sIiAiKSk7Ci0JCWlmICghcmF3cHJpbnQobmRvLCAoY2FkZHJfdCkoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQorCQlpZiAoIXJhd3ByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikoZXh0ICsgMSksIG50b2hzKGUubGVuKSAtIDQpKQogCQkJZ290byB0cnVuYzsKIAl9Ci0JcmV0dXJuICh1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CisJcmV0dXJuIChjb25zdCB1X2NoYXIgKilleHQgKyBudG9ocyhlLmxlbik7CiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCIgW3wlc10iLCBOUFNUUih0cGF5KSkpOwogCXJldHVybiBOVUxMOwpAQCAtMjQ5Miw3ICsyNjAxLDcgQEAKIAkgICAgICBpbnQgZGVwdGgpCiB7CiAJc3RydWN0IGlzYWttcF9nZW4gZTsKLQl1X2NoYXIgKmRhdDsKKwljb25zdCB1X2NoYXIgKmRhdDsKIAl2b2xhdGlsZSBpbnQgZGxlbjsKIAogCU5EX1RDSEVDSygqZXh0KTsKQEAgLTI1MDQsMTEgKzI2MTMsMTEgQEAKIAlORF9QUklOVCgobmRvLCIgbGVuPSVkIiwgZGxlbikpOwogCWlmICgyIDwgbmRvLT5uZG9fdmZsYWcgJiYgNCA8IGRsZW4pIHsKIAkJTkRfUFJJTlQoKG5kbywiICIpKTsKLQkJaWYgKCFyYXdwcmludChuZG8sIChjYWRkcl90KShleHQgKyAxKSwgZGxlbikpCisJCWlmICghcmF3cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKShleHQgKyAxKSwgZGxlbikpCiAJCQlnb3RvIHRydW5jOwogCX0KIAotCWRhdCA9ICh1X2NoYXIgKikoZXh0KzEpOworCWRhdCA9IChjb25zdCB1X2NoYXIgKikoZXh0KzEpOwogCU5EX1RDSEVDSzIoKmRhdCwgZGxlbik7CiAKICNpZmRlZiBIQVZFX0xJQkNSWVBUTwpAQCAtMjU2Niw3ICsyNjc1LDcgQEAKIAlzdHJ1Y3QgaXNha21wX2dlbiBlOwogCXVfaW50IGl0ZW1fbGVuOwogCi0JY3AgPSAodV9jaGFyICopZXh0OworCWNwID0gKGNvbnN0IHVfY2hhciAqKWV4dDsKIAlORF9UQ0hFQ0soKmV4dCk7CiAJVU5BTElHTkVEX01FTUNQWSgmZSwgZXh0LCBzaXplb2YoZSkpOwogCkBAIC0yNjMwLDcgKzI3MzksNyBAQAogCQl9CiAKIAkJbnAgPSBlLm5wOwotCQlleHQgPSAoc3RydWN0IGlzYWttcF9nZW4gKiljcDsKKwkJZXh0ID0gKGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICopY3A7CiAJfQogCXJldHVybiBjcDsKIHRydW5jOgpAQCAtMjY2OCw3ICsyNzc3LDcgQEAKIAogCWkgPSBjb29raWVfZmluZCgmYmFzZS0+aV9jayk7CiAJaWYgKGkgPCAwKSB7Ci0JCWlmIChpc3plcm8oKHVfY2hhciAqKSZiYXNlLT5yX2NrLCBzaXplb2YoYmFzZS0+cl9jaykpKSB7CisJCWlmIChpc3plcm8oKGNvbnN0IHVfY2hhciAqKSZiYXNlLT5yX2NrLCBzaXplb2YoYmFzZS0+cl9jaykpKSB7CiAJCQkvKiB0aGUgZmlyc3QgcGFja2V0ICovCiAJCQlORF9QUklOVCgobmRvLCIgSSIpKTsKIAkJCWlmIChicDIpCkBAIC0yNzA3LDcgKzI4MTYsNyBAQAogCiAJCUNIRUNLTEVOKHAgKyAxLCBiYXNlLT5ucCk7CiAJCW5wID0gYmFzZS0+bnA7Ci0JCWV4dCA9IChzdHJ1Y3QgaXNha21wX2dlbiAqKShwICsgMSk7CisJCWV4dCA9IChjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqKShwICsgMSk7CiAJCWlrZXYxX3N1Yl9wcmludChuZG8sIG5wLCBleHQsIGVwLCBwaGFzZSwgMCwgMCwgMCk7CiAJfQogCkBAIC0yNzIyLDcgKzI4MzEsNyBAQAogCiBzdGF0aWMgY29uc3QgdV9jaGFyICoKIGlrZXYyX3N1YjBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHN0cnVjdCBpc2FrbXAgKmJhc2UsCi0JCSB1X2NoYXIgbnAsIGludCBwY291bnQsCisJCSB1X2NoYXIgbnAsCiAJCSBjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqZXh0LCBjb25zdCB1X2NoYXIgKmVwLAogCQkgdWludDMyX3QgcGhhc2UsIHVpbnQzMl90IGRvaSwgdWludDMyX3QgcHJvdG8sIGludCBkZXB0aCkKIHsKQEAgLTI3MzAsNyArMjgzOSw3IEBACiAJc3RydWN0IGlzYWttcF9nZW4gZTsKIAl1X2ludCBpdGVtX2xlbjsKIAotCWNwID0gKHVfY2hhciAqKWV4dDsKKwljcCA9IChjb25zdCB1X2NoYXIgKilleHQ7CiAJTkRfVENIRUNLKCpleHQpOwogCVVOQUxJR05FRF9NRU1DUFkoJmUsIGV4dCwgc2l6ZW9mKGUpKTsKIApAQCAtMjc0NCwxMyArMjg1Myw3IEBACiAJaWYgKGl0ZW1fbGVuIDw9IDQpCiAJCXJldHVybiBOVUxMOwogCi0JaWYobnAgPT0gSVNBS01QX05QVFlQRV9QKSB7Ci0JCWNwID0gaWtldjJfcF9wcmludChuZG8sIG5wLCBwY291bnQsIGV4dCwgaXRlbV9sZW4sCi0JCQkJICAgZXAsIHBoYXNlLCBkb2ksIHByb3RvLCBkZXB0aCk7Ci0JfSBlbHNlIGlmKG5wID09IElTQUtNUF9OUFRZUEVfVCkgewotCQljcCA9IGlrZXYyX3RfcHJpbnQobmRvLCBucCwgcGNvdW50LCBleHQsIGl0ZW1fbGVuLAotCQkJCSAgIGVwLCBwaGFzZSwgZG9pLCBwcm90bywgZGVwdGgpOwotCX0gZWxzZSBpZihucCA9PSBJU0FLTVBfTlBUWVBFX3YyRSkgeworCWlmIChucCA9PSBJU0FLTVBfTlBUWVBFX3YyRSkgewogCQljcCA9IGlrZXYyX2VfcHJpbnQobmRvLCBiYXNlLCBucCwgZXh0LCBpdGVtX2xlbiwKIAkJCQkgICBlcCwgcGhhc2UsIGRvaSwgcHJvdG8sIGRlcHRoKTsKIAl9IGVsc2UgaWYgKE5QRlVOQyhucCkpIHsKQEAgLTI3NTgsNyArMjg2MSw3IEBACiAJCSAqIFhYWCAtIHdoYXQgaWYgaXRlbV9sZW4gaXMgdG9vIHNob3J0LCBvciB0b28gbG9uZywKIAkJICogZm9yIHRoaXMgcGF5bG9hZCB0eXBlPwogCQkgKi8KLQkJY3AgPSAoKm5wZnVuY1tucF0pKG5kbywgbnAsIC8qcGNvdW50LCovIGV4dCwgaXRlbV9sZW4sCisJCWNwID0gKCpucGZ1bmNbbnBdKShuZG8sIG5wLCBleHQsIGl0ZW1fbGVuLAogCQkJCSAgIGVwLCBwaGFzZSwgZG9pLCBwcm90bywgZGVwdGgpOwogCX0gZWxzZSB7CiAJCU5EX1BSSU5UKChuZG8sIiVzIiwgTlBTVFIobnApKSk7CkBAIC0yNzc5LDEzICsyODgyLDEwIEBACiB7CiAJY29uc3QgdV9jaGFyICpjcDsKIAlpbnQgaTsKLQlpbnQgcGNvdW50OwogCXN0cnVjdCBpc2FrbXBfZ2VuIGU7CiAKIAljcCA9IChjb25zdCB1X2NoYXIgKilleHQ7Ci0JcGNvdW50ID0gMDsKIAl3aGlsZSAobnApIHsKLQkJcGNvdW50Kys7CiAJCU5EX1RDSEVDSygqZXh0KTsKIAogCQlVTkFMSUdORURfTUVNQ1BZKCZlLCBleHQsIHNpemVvZihlKSk7CkBAIC0yNzk3LDcgKzI4OTcsNyBAQAogCQlmb3IgKGkgPSAwOyBpIDwgZGVwdGg7IGkrKykKIAkJCU5EX1BSSU5UKChuZG8sIiAgICAiKSk7CiAJCU5EX1BSSU5UKChuZG8sIigiKSk7Ci0JCWNwID0gaWtldjJfc3ViMF9wcmludChuZG8sIGJhc2UsIG5wLCBwY291bnQsCisJCWNwID0gaWtldjJfc3ViMF9wcmludChuZG8sIGJhc2UsIG5wLAogCQkJCSAgICAgIGV4dCwgZXAsIHBoYXNlLCBkb2ksIHByb3RvLCBkZXB0aCk7CiAJCU5EX1BSSU5UKChuZG8sIikiKSk7CiAJCWRlcHRoLS07CkBAIC0yODA4LDcgKzI5MDgsNyBAQAogCQl9CiAKIAkJbnAgPSBlLm5wOwotCQlleHQgPSAoc3RydWN0IGlzYWttcF9nZW4gKiljcDsKKwkJZXh0ID0gKGNvbnN0IHN0cnVjdCBpc2FrbXBfZ2VuICopY3A7CiAJfQogCXJldHVybiBjcDsKIHRydW5jOgpAQCAtMjg2MSw3ICsyOTYxLDcgQEAKIAkJQ0hFQ0tMRU4ocCArIDEsIGJhc2UtPm5wKQogCiAJCW5wID0gYmFzZS0+bnA7Ci0JCWV4dCA9IChzdHJ1Y3QgaXNha21wX2dlbiAqKShwICsgMSk7CisJCWV4dCA9IChjb25zdCBzdHJ1Y3QgaXNha21wX2dlbiAqKShwICsgMSk7CiAJCWlrZXYyX3N1Yl9wcmludChuZG8sIGJhc2UsIG5wLCBleHQsIGVwLCBwaGFzZSwgMCwgMCwgMCk7CiAJfQogCkBAIC0yODk1LDcgKzI5OTUsNyBAQAogCXAgPSAoY29uc3Qgc3RydWN0IGlzYWttcCAqKWJwOwogCWVwID0gbmRvLT5uZG9fc25hcGVuZDsKIAotCWlmICgoc3RydWN0IGlzYWttcCAqKWVwIDwgcCArIDEpIHsKKwlpZiAoKGNvbnN0IHN0cnVjdCBpc2FrbXAgKillcCA8IHAgKyAxKSB7CiAJCU5EX1BSSU5UKChuZG8sIlt8aXNha21wXSIpKTsKIAkJcmV0dXJuOwogCX0KQEAgLTI5MTQsMTQgKzMwMTQsMTQgQEAKIAogCWlmIChuZG8tPm5kb192ZmxhZykgewogCQlORF9QUklOVCgobmRvLCIgbXNnaWQgIikpOwotCQloZXhwcmludChuZG8sIChjYWRkcl90KSZiYXNlLm1zZ2lkLCBzaXplb2YoYmFzZS5tc2dpZCkpOworCQloZXhwcmludChuZG8sIChjb25zdCB1aW50OF90ICopJmJhc2UubXNnaWQsIHNpemVvZihiYXNlLm1zZ2lkKSk7CiAJfQogCiAJaWYgKDEgPCBuZG8tPm5kb192ZmxhZykgewogCQlORF9QUklOVCgobmRvLCIgY29va2llICIpKTsKLQkJaGV4cHJpbnQobmRvLCAoY2FkZHJfdCkmYmFzZS5pX2NrLCBzaXplb2YoYmFzZS5pX2NrKSk7CisJCWhleHByaW50KG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmYmFzZS5pX2NrLCBzaXplb2YoYmFzZS5pX2NrKSk7CiAJCU5EX1BSSU5UKChuZG8sIi0+IikpOwotCQloZXhwcmludChuZG8sIChjYWRkcl90KSZiYXNlLnJfY2ssIHNpemVvZihiYXNlLnJfY2spKTsKKwkJaGV4cHJpbnQobmRvLCAoY29uc3QgdWludDhfdCAqKSZiYXNlLnJfY2ssIHNpemVvZihiYXNlLnJfY2spKTsKIAl9CiAJTkRfUFJJTlQoKG5kbywiOiIpKTsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtaXNvY2xucy5jIGIvcHJpbnQtaXNvY2xucy5jCmluZGV4IDQ1MzZmNjUuLmQwODA4NWYgMTAwNjQ0Ci0tLSBhL3ByaW50LWlzb2NsbnMuYworKysgYi9wcmludC1pc29jbG5zLmMKQEAgLTI0LDE2ICsyNCwxNyBAQAogICogY29tcGxldGUgSVMtSVMgJiBDTE5QIHN1cHBvcnQuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSVNPIENMTlMsIEVTSVMsIGFuZCBJU0lTIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV0aGVyLmgiCiAjaW5jbHVkZSAibmxwaWQuaCIKQEAgLTQyLDYgKzQzLDggQEAKICNpbmNsdWRlICJvdWkuaCIKICNpbmNsdWRlICJzaWduYXR1cmUuaCIKIAorc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfGlzaXNdIjsKKwogLyoKICAqIElTLUlTIGlzIGRlZmluZWQgaW4gSVNPIDEwNTg5LiAgTG9vayB0aGVyZSBmb3IgcHJvdG9jb2wgZGVmaW5pdGlvbnMuCiAgKi8KQEAgLTEwMyw2ICsxMDYsNyBAQAogI2RlZmluZSBJU0lTX1RMVl9BVVRIICAgICAgICAgICAgICAgIDEwICAvKiBpc28xMDU4OSwgcmZjMzU2NyAqLwogI2RlZmluZSBJU0lTX1RMVl9DSEVDS1NVTSAgICAgICAgICAgIDEyICAvKiByZmMzMzU4ICovCiAjZGVmaW5lIElTSVNfVExWX0NIRUNLU1VNX01JTkxFTiAyCisjZGVmaW5lIElTSVNfVExWX1BPSSAgICAgICAgICAgICAgICAgMTMgIC8qIHJmYzYyMzIgKi8KICNkZWZpbmUgSVNJU19UTFZfTFNQX0JVRkZFUlNJWkUgICAgICAxNCAgLyogaXNvMTA1ODkgcmV2MiAqLwogI2RlZmluZSBJU0lTX1RMVl9MU1BfQlVGRkVSU0laRV9NSU5MRU4gMgogI2RlZmluZSBJU0lTX1RMVl9FWFRfSVNfUkVBQ0ggICAgICAgIDIyICAvKiBkcmFmdC1pZXRmLWlzaXMtdHJhZmZpYy0wNSAqLwpAQCAtMTUyLDYgKzE1Niw3IEBACiAgICAgeyBJU0lTX1RMVl9MU1AsICAgICAgICAgICAgICAgICJMU1AgZW50cmllcyJ9LAogICAgIHsgSVNJU19UTFZfQVVUSCwgICAgICAgICAgICAgICAiQXV0aGVudGljYXRpb24ifSwKICAgICB7IElTSVNfVExWX0NIRUNLU1VNLCAgICAgICAgICAgIkNoZWNrc3VtIn0sCisgICAgeyBJU0lTX1RMVl9QT0ksICAgICAgICAgICAgICAgICJQdXJnZSBPcmlnaW5hdG9yIElkZW50aWZpZXIifSwKICAgICB7IElTSVNfVExWX0xTUF9CVUZGRVJTSVpFLCAgICAgIkxTUCBCdWZmZXJzaXplIn0sCiAgICAgeyBJU0lTX1RMVl9FWFRfSVNfUkVBQ0gsICAgICAgICJFeHRlbmRlZCBJUyBSZWFjaGFiaWxpdHkifSwKICAgICB7IElTSVNfVExWX0lTX0FMSUFTX0lELCAgICAgICAgIklTIEFsaWFzIElEIn0sCkBAIC01NTksNyArNTY0LDcgQEAKICAgICB1aW50OF90IG5laWdoYm9yX2V4dGRfbG9jYWxfY2lyY3VpdF9pZFs0XTsKIH07CiAKLXN0YXRpYyB2b2lkIG9zaV9wcmludF9ja3N1bShuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdWludDhfdCAqcHB0ciwKK3N0YXRpYyBpbnQgb3NpX3ByaW50X2Nrc3VtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1aW50OF90ICpwcHRyLAogCQkJICAgIHVpbnQxNl90IGNoZWNrc3VtLCBpbnQgY2hlY2tzdW1fb2Zmc2V0LCBpbnQgbGVuZ3RoKTsKIHN0YXRpYyBpbnQgY2xucF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdWludDhfdCAqLCB1X2ludCk7CiBzdGF0aWMgdm9pZCBlc2lzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1aW50OF90ICosIHVfaW50KTsKQEAgLTY2NCw4ICs2NjksOSBAQAogI2RlZmluZSBJU0lTX0NTTlBfSEVBREVSX1NJWkUgKHNpemVvZihzdHJ1Y3QgaXNpc19jc25wX2hlYWRlcikpCiAjZGVmaW5lIElTSVNfUFNOUF9IRUFERVJfU0laRSAoc2l6ZW9mKHN0cnVjdCBpc2lzX3BzbnBfaGVhZGVyKSkKIAotdm9pZCBpc29jbG5zX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnAsIHVfaW50IGxlbmd0aCwgdV9pbnQgY2FwbGVuKQordm9pZAoraXNvY2xuc19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBjYXBsZW4pCiB7CiAJaWYgKGNhcGxlbiA8PSAxKSB7IC8qIGVub3VnaCBieXRlcyBvbiB0aGUgd2lyZSA/ICovCiAJCU5EX1BSSU5UKChuZG8sICJ8T1NJIikpOwpAQCAtNzg1LDYgKzc5MSwxOCBAQAogICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgfQogCisJaWYgKGxpID4gbGVuZ3RoKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGxlbmd0aCBpbmRpY2F0b3IoJXUpID4gUERVIHNpemUgKCV1KSEiLCBsaSwgbGVuZ3RoKSk7CisgICAgICAgICAgICByZXR1cm4gKDApOworCX0KKworICAgICAgICBpZiAobGkgPCBzaXplb2Yoc3RydWN0IGNsbnBfaGVhZGVyX3QpKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGxlbmd0aCBpbmRpY2F0b3IgJXUgPCBtaW4gUERVIHNpemU6IiwgbGkpKTsKKyAgICAgICAgICAgIHdoaWxlIChwcHRyIDwgbmRvLT5uZG9fc25hcGVuZCkKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTAyWCIsICpwcHRyKyspKTsKKyAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKwogICAgICAgICAvKiBGSVhNRSBmdXJ0aGVyIGhlYWRlciBzYW5pdHkgY2hlY2tpbmcgKi8KIAogICAgICAgICBjbG5wX3BkdV90eXBlID0gY2xucF9oZWFkZXItPnR5cGUgJiBDTE5QX1BEVV9UWVBFX01BU0s7CkBAIC03OTIsMjIgKzgxMCw0NiBAQAogCiAgICAgICAgIHBwdHIgKz0gc2l6ZW9mKHN0cnVjdCBjbG5wX2hlYWRlcl90KTsKICAgICAgICAgbGkgLT0gc2l6ZW9mKHN0cnVjdCBjbG5wX2hlYWRlcl90KTsKKworICAgICAgICBpZiAobGkgPCAxKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAibGkgPCBzaXplIG9mIGZpeGVkIHBhcnQgb2YgQ0xOUCBoZWFkZXIgYW5kIGFkZHJlc3NlcyIpKTsKKyAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgIH0KKwlORF9UQ0hFQ0soKnBwdHIpOwogICAgICAgICBkZXN0X2FkZHJlc3NfbGVuZ3RoID0gKnBwdHI7Ci0gICAgICAgIGRlc3RfYWRkcmVzcyA9IHBwdHIgKyAxOworICAgICAgICBwcHRyICs9IDE7CisgICAgICAgIGxpIC09IDE7CisgICAgICAgIGlmIChsaSA8IGRlc3RfYWRkcmVzc19sZW5ndGgpIHsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJsaSA8IHNpemUgb2YgZml4ZWQgcGFydCBvZiBDTE5QIGhlYWRlciBhbmQgYWRkcmVzc2VzIikpOworICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgfQorICAgICAgICBORF9UQ0hFQ0syKCpwcHRyLCBkZXN0X2FkZHJlc3NfbGVuZ3RoKTsKKyAgICAgICAgZGVzdF9hZGRyZXNzID0gcHB0cjsKKyAgICAgICAgcHB0ciArPSBkZXN0X2FkZHJlc3NfbGVuZ3RoOworICAgICAgICBsaSAtPSBkZXN0X2FkZHJlc3NfbGVuZ3RoOwogCi0gICAgICAgIHBwdHIgKz0gKDEgKyBkZXN0X2FkZHJlc3NfbGVuZ3RoKTsKLSAgICAgICAgbGkgLT0gKDEgKyBkZXN0X2FkZHJlc3NfbGVuZ3RoKTsKKyAgICAgICAgaWYgKGxpIDwgMSkgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgImxpIDwgc2l6ZSBvZiBmaXhlZCBwYXJ0IG9mIENMTlAgaGVhZGVyIGFuZCBhZGRyZXNzZXMiKSk7CisgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisJTkRfVENIRUNLKCpwcHRyKTsKICAgICAgICAgc291cmNlX2FkZHJlc3NfbGVuZ3RoID0gKnBwdHI7Ci0gICAgICAgIHNvdXJjZV9hZGRyZXNzID0gcHB0ciArMTsKLQotICAgICAgICBwcHRyICs9ICgxICsgc291cmNlX2FkZHJlc3NfbGVuZ3RoKTsKLSAgICAgICAgbGkgLT0gKDEgKyBzb3VyY2VfYWRkcmVzc19sZW5ndGgpOworICAgICAgICBwcHRyICs9IDE7CisgICAgICAgIGxpIC09IDE7CisgICAgICAgIGlmIChsaSA8IHNvdXJjZV9hZGRyZXNzX2xlbmd0aCkgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgImxpIDwgc2l6ZSBvZiBmaXhlZCBwYXJ0IG9mIENMTlAgaGVhZGVyIGFuZCBhZGRyZXNzZXMiKSk7CisgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICB9CisgICAgICAgIE5EX1RDSEVDSzIoKnBwdHIsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCk7CisgICAgICAgIHNvdXJjZV9hZGRyZXNzID0gcHB0cjsKKyAgICAgICAgcHB0ciArPSBzb3VyY2VfYWRkcmVzc19sZW5ndGg7CisgICAgICAgIGxpIC09IHNvdXJjZV9hZGRyZXNzX2xlbmd0aDsKIAogICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcgPCAxKSB7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlcyA+ICVzLCAlcywgbGVuZ3RoICV1IiwKICAgICAgICAgICAgICAgICAgICBuZG8tPm5kb19lZmxhZyA/ICIiIDogIiwgIiwKLSAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhzb3VyY2VfYWRkcmVzcywgc291cmNlX2FkZHJlc3NfbGVuZ3RoKSwKLSAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhkZXN0X2FkZHJlc3MsIGRlc3RfYWRkcmVzc19sZW5ndGgpLAorICAgICAgICAgICAgICAgICAgIGlzb25zYXBfc3RyaW5nKG5kbywgc291cmNlX2FkZHJlc3MsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCksCisgICAgICAgICAgICAgICAgICAgaXNvbnNhcF9zdHJpbmcobmRvLCBkZXN0X2FkZHJlc3MsIGRlc3RfYWRkcmVzc19sZW5ndGgpLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIoY2xucF9wZHVfdmFsdWVzLCJ1bmtub3duICgldSkiLGNsbnBfcGR1X3R5cGUpLAogICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpOwogICAgICAgICAgICAgcmV0dXJuICgxKTsKQEAgLTgyMywxOSArODY1LDI0IEBACiAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhjbG5wX2hlYWRlci0+c2VnbWVudF9sZW5ndGgpLAogICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoY2xucF9oZWFkZXItPmNrc3VtKSkpOwogCi0gICAgICAgIG9zaV9wcmludF9ja3N1bShuZG8sIG9wdHIsIEVYVFJBQ1RfMTZCSVRTKGNsbnBfaGVhZGVyLT5ja3N1bSksIDcsCi0gICAgICAgICAgICAgICAgICAgICAgICBjbG5wX2hlYWRlci0+bGVuZ3RoX2luZGljYXRvcik7CisgICAgICAgIGlmIChvc2lfcHJpbnRfY2tzdW0obmRvLCBvcHRyLCBFWFRSQUNUXzE2QklUUyhjbG5wX2hlYWRlci0+Y2tzdW0pLCA3LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsbnBfaGVhZGVyLT5sZW5ndGhfaW5kaWNhdG9yKSA9PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRGbGFncyBbJXNdIiwKICAgICAgICAgICAgICAgIGJpdHRvazJzdHIoY2xucF9mbGFnX3ZhbHVlcywgIm5vbmUiLCBjbG5wX2ZsYWdzKSkpOwogCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0c291cmNlIGFkZHJlc3MgKGxlbmd0aCAldSk6ICVzXG5cdGRlc3QgICBhZGRyZXNzIChsZW5ndGggJXUpOiAlcyIsCiAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzc19sZW5ndGgsCi0gICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhzb3VyY2VfYWRkcmVzcywgc291cmNlX2FkZHJlc3NfbGVuZ3RoKSwKKyAgICAgICAgICAgICAgIGlzb25zYXBfc3RyaW5nKG5kbywgc291cmNlX2FkZHJlc3MsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCksCiAgICAgICAgICAgICAgICBkZXN0X2FkZHJlc3NfbGVuZ3RoLAotICAgICAgICAgICAgICAgaXNvbnNhcF9zdHJpbmcoZGVzdF9hZGRyZXNzLCBkZXN0X2FkZHJlc3NfbGVuZ3RoKSkpOworICAgICAgICAgICAgICAgaXNvbnNhcF9zdHJpbmcobmRvLCBkZXN0X2FkZHJlc3MsIGRlc3RfYWRkcmVzc19sZW5ndGgpKSk7CiAKICAgICAgICAgaWYgKGNsbnBfZmxhZ3MgJiBDTE5QX1NFR01FTlRfUEFSVCkgeworICAgICAgICAgICAgICAgIGlmIChsaSA8IHNpemVvZihjb25zdCBzdHJ1Y3QgY2xucF9zZWdtZW50X2hlYWRlcl90KSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAibGkgPCBzaXplIG9mIGZpeGVkIHBhcnQgb2YgQ0xOUCBoZWFkZXIsIGFkZHJlc3NlcywgYW5kIHNlZ21lbnQgcGFydCIpKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAJY2xucF9zZWdtZW50X2hlYWRlciA9IChjb25zdCBzdHJ1Y3QgY2xucF9zZWdtZW50X2hlYWRlcl90ICopIHBwdHI7CiAgICAgICAgICAgICAgICAgTkRfVENIRUNLKCpjbG5wX3NlZ21lbnRfaGVhZGVyKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdERhdGEgVW5pdCBJRDogMHglMDR4LCBTZWdtZW50IE9mZnNldDogJXUsIFRvdGFsIFBEVSBMZW5ndGg6ICV1IiwKQEAgLTg1MSwxOSArODk4LDE5IEBACiAgICAgICAgICAgICB1X2ludCBvcCwgb3BsaTsKICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnRwdHI7CiAKLSAgICAgICAgICAgIE5EX1RDSEVDSzIoKnBwdHIsIDIpOwogICAgICAgICAgICAgaWYgKGxpIDwgMikgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGJhZCBvcHRzL2xpIikpOwogICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICAgICAgICB9CisgICAgICAgICAgICBORF9UQ0hFQ0syKCpwcHRyLCAyKTsKICAgICAgICAgICAgIG9wID0gKnBwdHIrKzsKICAgICAgICAgICAgIG9wbGkgPSAqcHB0cisrOwogICAgICAgICAgICAgbGkgLT0gMjsKLSAgICAgICAgICAgIE5EX1RDSEVDSzIoKnBwdHIsIG9wbGkpOwogICAgICAgICAgICAgaWYgKG9wbGkgPiBsaSkgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIG9wdCAoJWQpIHRvbyBsb25nIiwgb3ApKTsKICAgICAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICAgICAgfQorICAgICAgICAgICAgTkRfVENIRUNLMigqcHB0ciwgb3BsaSk7CiAgICAgICAgICAgICBsaSAtPSBvcGxpOwogICAgICAgICAgICAgdHB0ciA9IHBwdHI7CiAgICAgICAgICAgICB0bGVuID0gb3BsaTsKQEAgLTg3MywxMSArOTIwLDIzIEBACiAgICAgICAgICAgICAgICAgICAgb3AsCiAgICAgICAgICAgICAgICAgICAgb3BsaSkpOwogCisgICAgICAgICAgICAvKgorICAgICAgICAgICAgICogV2UndmUgYWxyZWFkeSBjaGVja2VkIHRoYXQgdGhlIGVudGlyZSBvcHRpb24gaXMgcHJlc2VudAorICAgICAgICAgICAgICogaW4gdGhlIGNhcHR1cmVkIHBhY2tldCB3aXRoIHRoZSBORF9UQ0hFQ0syKCkgY2FsbC4KKyAgICAgICAgICAgICAqIFRoZXJlZm9yZSwgd2UgZG9uJ3QgbmVlZCB0byBkbyBORF9UQ0hFQ0soKS9ORF9UQ0hFQ0syKCkKKyAgICAgICAgICAgICAqIGNoZWNrcy4KKyAgICAgICAgICAgICAqIFdlIGRvLCBob3dldmVyLCBuZWVkIHRvIGNoZWNrIHRsZW4sIHRvIG1ha2Ugc3VyZSB3ZQorICAgICAgICAgICAgICogZG9uJ3QgcnVuIHBhc3QgdGhlIGVuZCBvZiB0aGUgb3B0aW9uLgorCSAgICAgKi8KICAgICAgICAgICAgIHN3aXRjaCAob3ApIHsKIAogCiAgICAgICAgICAgICBjYXNlIENMTlBfT1BUSU9OX1JPVVRFX1JFQ09SRElORzogLyogdGhvc2UgdHdvIG9wdGlvbnMgc2hhcmUgdGhlIGZvcm1hdCAqLwogICAgICAgICAgICAgY2FzZSBDTE5QX09QVElPTl9TT1VSQ0VfUk9VVElORzoKKyAgICAgICAgICAgICAgICAgICAgaWYgKHRsZW4gPCAyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgYmFkIG9wdCBsZW4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICgwKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihjbG5wX29wdGlvbl9zcl9ycl92YWx1ZXMsIlVua25vd24iLCp0cHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoY2xucF9vcHRpb25fc3JfcnJfc3RyaW5nX3ZhbHVlcywgIlVua25vd24gT3B0aW9uICV1Iiwgb3ApKSk7CkBAIC05MDQsMTcgKzk2MywyNSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqc291cmNlX2FkZHJlc3MsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBOU0FQIGFkZHJlc3MgKGxlbmd0aCAldSk6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzc19sZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNvbnNhcF9zdHJpbmcoc291cmNlX2FkZHJlc3MsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIHNvdXJjZV9hZGRyZXNzLCBzb3VyY2VfYWRkcmVzc19sZW5ndGgpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsZW4tPXNvdXJjZV9hZGRyZXNzX2xlbmd0aCsxOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENMTlBfT1BUSU9OX1BSSU9SSVRZOgorICAgICAgICAgICAgICAgICAgICBpZiAodGxlbiA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBiYWQgb3B0IGxlbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIweCUxeCIsICp0cHRyJjB4MGYpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQ0xOUF9PUFRJT05fUU9TX01BSU5URU5BTkNFOgorICAgICAgICAgICAgICAgICAgICBpZiAodGxlbiA8IDEpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCBiYWQgb3B0IGxlbiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIEZvcm1hdCBDb2RlOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGNsbnBfb3B0aW9uX3Njb3BlX3ZhbHVlcywgIlJlc2VydmVkIiwgKnRwdHImQ0xOUF9PUFRJT05fU0NPUEVfTUFTSykpKTsKIApAQCAtOTI2LDEyICs5OTMsMjAgQEAKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNhc2UgQ0xOUF9PUFRJT05fU0VDVVJJVFk6CisgICAgICAgICAgICAgICAgICAgIGlmICh0bGVuIDwgMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGJhZCBvcHQgbGVuIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgRm9ybWF0IENvZGU6ICVzLCBTZWN1cml0eS1MZXZlbCAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGNsbnBfb3B0aW9uX3Njb3BlX3ZhbHVlcywiUmVzZXJ2ZWQiLCp0cHRyJkNMTlBfT1BUSU9OX1NDT1BFX01BU0spLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKih0cHRyKzEpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIENMTlBfT1BUSU9OX0RJU0NBUkRfUkVBU09OOgorICAgICAgICAgICAgICAgIGlmICh0bGVuIDwgMSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgYmFkIG9wdCBsZW4iKSk7CisgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gKDApOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICByZmRfZXJyb3JfbWFqb3IgPSAoKnRwdHImMHhmMCkgPj4gNDsKICAgICAgICAgICAgICAgICByZmRfZXJyb3JfbWlub3IgPSAqdHB0ciYweDBmOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIENsYXNzOiAlcyBFcnJvciAoMHglMDF4KSwgJXMgKDB4JTAxeCkiLApAQCAtMTA0OSwxMiArMTEyNCwxMiBAQAogICAgICAgICB9CiAKIAlpZiAobGkgPiBsZW5ndGgpIHsKLSAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgbGVuZ3RoIGluZGljYXRvciglZCkgPiBQRFUgc2l6ZSAoJWQpISIsIGxpLCBsZW5ndGgpKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgbGVuZ3RoIGluZGljYXRvcigldSkgPiBQRFUgc2l6ZSAoJXUpISIsIGxpLCBsZW5ndGgpKTsKICAgICAgICAgICAgIHJldHVybjsKIAl9CiAKIAlpZiAobGkgPCBzaXplb2Yoc3RydWN0IGVzaXNfaGVhZGVyX3QpICsgMikgewotICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBsZW5ndGggaW5kaWNhdG9yIDwgbWluIFBEVSBzaXplICVkOiIsIGxpKSk7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGxlbmd0aCBpbmRpY2F0b3IgJXUgPCBtaW4gUERVIHNpemU6IiwgbGkpKTsKICAgICAgICAgICAgIHdoaWxlIChwcHRyIDwgbmRvLT5uZG9fc25hcGVuZCkKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTAyWCIsICpwcHRyKyspKTsKICAgICAgICAgICAgIHJldHVybjsKQEAgLTEwNzgsNyArMTE1Myw4IEBACiAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIHY6ICV1JXMiLCBlc2lzX2hlYWRlci0+dmVyc2lvbiwgZXNpc19oZWFkZXItPnZlcnNpb24gPT0gRVNJU19WRVJTSU9OID8gIiIgOiAidW5zdXBwb3J0ZWQiICkpOwogICAgICAgICBORF9QUklOVCgobmRvLCAiLCBjaGVja3N1bTogMHglMDR4IiwgRVhUUkFDVF8xNkJJVFMoZXNpc19oZWFkZXItPmNrc3VtKSkpOwogCi0gICAgICAgIG9zaV9wcmludF9ja3N1bShuZG8sIHBwdHIsIEVYVFJBQ1RfMTZCSVRTKGVzaXNfaGVhZGVyLT5ja3N1bSksIDcsIGxpKTsKKyAgICAgICAgaWYgKG9zaV9wcmludF9ja3N1bShuZG8sIHBwdHIsIEVYVFJBQ1RfMTZCSVRTKGVzaXNfaGVhZGVyLT5ja3N1bSksIDcsIGxpKSA9PSAwKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgaG9sZGluZyB0aW1lOiAldXMsIGxlbmd0aCBpbmRpY2F0b3I6ICV1IiwKICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKGVzaXNfaGVhZGVyLT5ob2xkdGltZSksIGxpKSk7CkBAIC0xMTEwLDcgKzExODYsNyBAQAogCQlkc3QgPSBwcHRyOwogCQlwcHRyICs9IGRzdGw7CiAgICAgICAgICAgICAgICAgbGkgLT0gZHN0bDsKLQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICVzIiwgaXNvbnNhcF9zdHJpbmcoZHN0LCBkc3RsKSkpOworCQlORF9QUklOVCgobmRvLCAiXG5cdCAgJXMiLCBpc29uc2FwX3N0cmluZyhuZG8sIGRzdCwgZHN0bCkpKTsKIAogCQlORF9UQ0hFQ0soKnBwdHIpOwogCQlpZiAobGkgPCAxKSB7CkBAIC0xMTQ3LDcgKzEyMjMsNyBAQAogCQlpZiAobmV0YWwgPT0gMCkKIAkJCU5EX1BSSU5UKChuZG8sICJcblx0ICAlcyIsIGV0aGVyYWRkcl9zdHJpbmcobmRvLCBzbnBhKSkpOwogCQllbHNlCi0JCQlORF9QUklOVCgobmRvLCAiXG5cdCAgJXMiLCBpc29uc2FwX3N0cmluZyhuZXRhLCBuZXRhbCkpKTsKKwkJCU5EX1BSSU5UKChuZG8sICJcblx0ICAlcyIsIGlzb25zYXBfc3RyaW5nKG5kbywgbmV0YSwgbmV0YWwpKSk7CiAJCWJyZWFrOwogCX0KIApAQCAtMTE4MCw3ICsxMjU2LDcgQEAKICAgICAgICAgICAgIAl9CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIE5FVCAobGVuZ3RoOiAldSk6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgc291cmNlX2FkZHJlc3NfbGVuZ3RoLAotICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhwcHRyLCBzb3VyY2VfYWRkcmVzc19sZW5ndGgpKSk7CisgICAgICAgICAgICAgICAgICAgICAgIGlzb25zYXBfc3RyaW5nKG5kbywgcHB0ciwgc291cmNlX2FkZHJlc3NfbGVuZ3RoKSkpOwogICAgICAgICAgICAgICAgIHBwdHIgKz0gc291cmNlX2FkZHJlc3NfbGVuZ3RoOwogICAgICAgICAgICAgICAgIGxpIC09IHNvdXJjZV9hZGRyZXNzX2xlbmd0aDsKICAgICAgICAgICAgICAgICBzb3VyY2VfYWRkcmVzc19udW1iZXItLTsKQEAgLTEyMDIsNyArMTI3OCw3IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgYmFkIGlzaC9saSIpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgTkVUIChsZW5ndGg6ICV1KTogJXMiLCBzb3VyY2VfYWRkcmVzc19sZW5ndGgsIGlzb25zYXBfc3RyaW5nKHBwdHIsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCkpKTsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBORVQgKGxlbmd0aDogJXUpOiAlcyIsIHNvdXJjZV9hZGRyZXNzX2xlbmd0aCwgaXNvbnNhcF9zdHJpbmcobmRvLCBwcHRyLCBzb3VyY2VfYWRkcmVzc19sZW5ndGgpKSk7CiAgICAgICAgICAgICBwcHRyICs9IHNvdXJjZV9hZGRyZXNzX2xlbmd0aDsKICAgICAgICAgICAgIGxpIC09IHNvdXJjZV9hZGRyZXNzX2xlbmd0aDsKICAgICAgICAgICAgIGJyZWFrOwpAQCAtMTI5NSwxNCArMTM3MSwxMSBAQAogewogICBpbnQgaTsKIAorICBORF9UQ0hFQ0soKm1jaWQpOwogICBORF9QUklOVCgobmRvLCAgIklEOiAlZCwgTmFtZTogIiwgbWNpZC0+Zm9ybWF0X2lkKSk7CiAKLSAgZm9yKGk9MDsgaTwzMjsgaSsrKQotICB7Ci0gICAgTkRfUFJJTlQoKG5kbywgIiVjIiwgbWNpZC0+bmFtZVtpXSkpOwotICAgIGlmKG1jaWQtPm5hbWVbaV0gPT0gJ1wwJykKLSAgICAgICAgYnJlYWs7Ci0gIH0KKyAgaWYgKGZuX3ByaW50enAobmRvLCBtY2lkLT5uYW1lLCAzMiwgbmRvLT5uZG9fc25hcGVuZCkpCisgICAgZ290byB0cnVuYzsKIAogICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgICAgICAgICAgTHZsOiAlZCIsIEVYVFJBQ1RfMTZCSVRTKG1jaWQtPnJldmlzaW9uX2x2bCkpKTsKIApAQCAtMTMxMCw2ICsxMzgzLDkgQEAKIAogICBmb3IoaT0wO2k8MTY7aSsrKQogICAgIE5EX1BSSU5UKChuZG8sICIlLjJ4ICIsIG1jaWQtPmRpZ2VzdFtpXSkpOworCit0cnVuYzoKKyAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogfQogCiBzdGF0aWMgaW50CkBAIC0xMzIwLDcgKzEzOTYsNyBAQAogICBjb25zdCBzdHJ1Y3QgaXNpc19zdWJ0bHZfc3BiX21jaWQgKnN1YnRsdl9zcGJfbWNpZDsKICAgaW50IGk7CiAKLSAgd2hpbGUgKGxlbiA+IDApCisgIHdoaWxlIChsZW4gPiAyKQogICB7CiAgICAgc3Rsdl90eXBlID0gKih0cHRyKyspOwogICAgIHN0bHZfbGVuICA9ICoodHB0cisrKTsKQEAgLTEzMzgsMTAgKzE0MTQsOSBAQAogICAgIHsKICAgICAgIGNhc2UgSVNJU19TVUJUTFZfU1BCX01DSUQ6CiAgICAgICB7Ci0gICAgICAgIGlmICghTkRfVFRFU1QyKCoodHB0ciksIElTSVNfU1VCVExWX1NQQl9NQ0lEX01JTl9MRU4pKQotICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgIE5EX1RDSEVDSzIoKih0cHRyKSwgSVNJU19TVUJUTFZfU1BCX01DSURfTUlOX0xFTik7CiAKLSAgICAgICAgc3VidGx2X3NwYl9tY2lkID0gKHN0cnVjdCBpc2lzX3N1YnRsdl9zcGJfbWNpZCAqKXRwdHI7CisgICAgICAgIHN1YnRsdl9zcGJfbWNpZCA9IChjb25zdCBzdHJ1Y3QgaXNpc19zdWJ0bHZfc3BiX21jaWQgKil0cHRyOwogCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICAiXG5cdCAgICAgICAgIE1DSUQ6ICIpKTsKICAgICAgICAgaXNpc19wcmludF9tY2lkKG5kbywgJihzdWJ0bHZfc3BiX21jaWQtPm1jaWQpKTsKQEAgLTEzNjIsOCArMTQzNyw3IEBACiAKICAgICAgIGNhc2UgSVNJU19TVUJUTFZfU1BCX0RJR0VTVDoKICAgICAgIHsKLSAgICAgICAgaWYgKCFORF9UVEVTVDIoKih0cHRyKSwgSVNJU19TVUJUTFZfU1BCX0RJR0VTVF9NSU5fTEVOKSkKLSAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICBORF9UQ0hFQ0syKCoodHB0ciksIElTSVNfU1VCVExWX1NQQl9ESUdFU1RfTUlOX0xFTik7CiAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAgIFJFUzogJWQgVjogJWQgQTogJWQgRDogJWQiLAogICAgICAgICAgICAgICAgICAgICAgICAgKCoodHB0cikgPj4gNSksICgoKCp0cHRyKT4+IDQpICYgMHgwMSksCkBAIC0xMzg4LDEzICsxNDYyLDExIEBACiAKICAgICAgIGNhc2UgSVNJU19TVUJUTFZfU1BCX0JWSUQ6CiAgICAgICB7Ci0gICAgICAgIGlmICghTkRfVFRFU1QyKCoodHB0ciksIHN0bHZfbGVuKSkKLSAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICBORF9UQ0hFQ0syKCoodHB0ciksIHN0bHZfbGVuKTsKIAotICAgICAgICB3aGlsZSAobGVuKQorICAgICAgICB3aGlsZSAobGVuID49IElTSVNfU1VCVExWX1NQQl9CVklEX01JTl9MRU4pCiAgICAgICAgIHsKLSAgICAgICAgICBpZiAoIU5EX1RURVNUMigqKHRwdHIpLCBJU0lTX1NVQlRMVl9TUEJfQlZJRF9NSU5fTEVOKSkKLSAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgICAgTkRfVENIRUNLMigqKHRwdHIpLCBJU0lTX1NVQlRMVl9TUEJfQlZJRF9NSU5fTEVOKTsKIAogICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgICAgICBFQ1Q6ICUwOHgiLAogICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIpKSk7CkBAIC0xNDIwLDggKzE0OTIsOSBAQAogCiAgIHJldHVybiAwOwogCi0gIHRydW5jdGx2OgotICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQgcGFja2V0IGV4Y2VlZGVkIHNuYXBzaG90IikpOworICB0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IikpOworICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKICAgICByZXR1cm4oMSk7CiB9CiAKQEAgLTE0MzEsNyArMTUwNCw3IEBACiB7CiAgIGludCBzdGx2X3R5cGUsIHN0bHZfbGVuLCB0bXA7CiAKLSAgd2hpbGUgKGxlbiA+IDApCisgIHdoaWxlIChsZW4gPiAyKQogICB7CiAgICAgc3Rsdl90eXBlID0gKih0cHRyKyspOwogICAgIHN0bHZfbGVuICA9ICoodHB0cisrKTsKQEAgLTE0NDgsOCArMTUyMSw3IEBACiAgICAgewogICAgICAgY2FzZSBJU0lTX1NVQlRMVl9TUEJfSU5TVEFOQ0U6CiAKLSAgICAgICAgICBpZiAoIU5EX1RURVNUMigqKHRwdHIpLCBJU0lTX1NVQlRMVl9TUEJfSU5TVEFOQ0VfTUlOX0xFTikpCi0gICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIElTSVNfU1VCVExWX1NQQl9JTlNUQU5DRV9NSU5fTEVOKTsKIAogICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgICBDSVNUIFJvb3QtSUQ6ICUwOHgiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOwogICAgICAgICAgIHRwdHIgPSB0cHRyKzQ7CkBAIC0xNDc0LDggKzE1NDYsNyBAQAogCiAgICAgICAgICAgd2hpbGUgKHRtcCkKICAgICAgICAgICB7Ci0gICAgICAgICAgICBpZiAoIU5EX1RURVNUMigqKHRwdHIpLCBJU0lTX1NVQlRMVl9TUEJfSU5TVEFOQ0VfVkxBTl9UVVBMRV9MRU4pKQotICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgSVNJU19TVUJUTFZfU1BCX0lOU1RBTkNFX1ZMQU5fVFVQTEVfTEVOKTsKIAogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAgICBVOiVkLCBNOiVkLCBBOiVkLCBSRVM6JWQiLAogICAgICAgICAgICAgICAgICAgICAgICoodHB0cikgPj4gNywgKCoodHB0cikgPj4gNikgJiAweDAxLApAQCAtMTUwMCw4ICsxNTcxLDcgQEAKIAogICAgICAgY2FzZSBJU0lTX1NVQlRMVl9TUEJNX1NJOgogCi0gICAgICAgICAgaWYgKCFORF9UVEVTVDIoKih0cHRyKSwgNikpCi0gICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIDgpOwogCiAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAgIEJNQUM6ICUwOHgiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOwogICAgICAgICAgIHRwdHIgPSB0cHRyKzQ7CkBAIC0xNTE1LDggKzE1ODUsOCBAQAogICAgICAgICAgIGxlbiA9IGxlbiAtIDg7CiAgICAgICAgICAgc3Rsdl9sZW4gPSBzdGx2X2xlbiAtIDg7CiAKLSAgICAgICAgICB3aGlsZSAoc3Rsdl9sZW4pCi0gICAgICAgICAgeworICAgICAgICAgIHdoaWxlIChzdGx2X2xlbiA+PSA0KSB7CisgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCA0KTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgICBUOiAlZCwgUjogJWQsIFJFUzogJWQsIElTSUQ6ICVkIiwKICAgICAgICAgICAgICAgICAgICAgKEVYVFJBQ1RfMzJCSVRTKHRwdHIpID4+IDMxKSwKICAgICAgICAgICAgICAgICAgICAgKEVYVFJBQ1RfMzJCSVRTKHRwdHIpID4+IDMwKSAmIDB4MDEsCkBAIC0xNTM2LDggKzE2MDYsOSBAQAogICB9CiAgIHJldHVybiAwOwogCi0gIHRydW5jdGx2OgotICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQgcGFja2V0IGV4Y2VlZGVkIHNuYXBzaG90IikpOworICB0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IikpOworICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKICAgICByZXR1cm4oMSk7CiB9CiAKQEAgLTE2NjAsMTMgKzE3MzEsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKnRwdHIsIGludCBzdWJ0LCBpbnQgc3VibCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmlkZW50KQogewotICAgICAgICAvKiBmaXJzdCBsZXRzIHNlZSBpZiB3ZSBrbm93IHRoZSBzdWJUTFZzIG5hbWUqLwotCU5EX1BSSU5UKChuZG8sICIlcyVzIHN1YlRMViAjJXUsIGxlbmd0aDogJXUiLAotCSAgICAgICAgICBpZGVudCwgdG9rMnN0cihpc2lzX2V4dF9pcF9yZWFjaF9zdWJ0bHZfdmFsdWVzLCAidW5rbm93biIsIHN1YnQpLAotCSAgICAgICAgICBzdWJ0LCBzdWJsKSk7CisgICAgLyogZmlyc3QgbGV0cyBzZWUgaWYgd2Uga25vdyB0aGUgc3ViVExWcyBuYW1lKi8KKyAgICBORF9QUklOVCgobmRvLCAiJXMlcyBzdWJUTFYgIyV1LCBsZW5ndGg6ICV1IiwKKyAgICAgICAgICAgICAgaWRlbnQsIHRvazJzdHIoaXNpc19leHRfaXBfcmVhY2hfc3VidGx2X3ZhbHVlcywgInVua25vd24iLCBzdWJ0KSwKKyAgICAgICAgICAgICAgc3VidCwgc3VibCkpOwogCi0JaWYgKCFORF9UVEVTVDIoKnRwdHIsc3VibCkpCi0JICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgTkRfVENIRUNLMigqdHB0cixzdWJsKTsKIAogICAgIHN3aXRjaChzdWJ0KSB7CiAgICAgY2FzZSBJU0lTX1NVQlRMVl9FWFREX0lQX1JFQUNIX01HTVRfUFJFRklYX0NPTE9SOiAvKiBmYWxsIHRocm91Z2ggKi8KQEAgLTE2OTUsOCArMTc2NSw5IEBACiAgICAgfQogICAgIHJldHVybigxKTsKIAotdHJ1bmN0bHY6Ci0gICAgTkRfUFJJTlQoKG5kbywgIiVzcGFja2V0IGV4Y2VlZGVkIHNuYXBzaG90IiwgaWRlbnQpKTsKK3RydW5jOgorICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIGlkZW50KSk7CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogICAgIHJldHVybigwKTsKIH0KIApAQCAtMTcyMSw4ICsxNzkyLDcgQEAKIAkgICAgICAgICAgaWRlbnQsIHRvazJzdHIoaXNpc19leHRfaXNfcmVhY2hfc3VidGx2X3ZhbHVlcywgInVua25vd24iLCBzdWJ0KSwKIAkgICAgICAgICAgc3VidCwgc3VibCkpOwogCi0JaWYgKCFORF9UVEVTVDIoKnRwdHIsc3VibCkpCi0JICAgIGdvdG8gdHJ1bmN0bHY7CisJTkRfVENIRUNLMigqdHB0ciwgc3VibCk7CiAKICAgICAgICAgc3dpdGNoKHN1YnQpIHsKICAgICAgICAgY2FzZSBJU0lTX1NVQlRMVl9FWFRfSVNfUkVBQ0hfQURNSU5fR1JPVVA6CkBAIC0xNzY3LDYgKzE4MzcsNyBAQAogICAgICAgICAgICAgdHB0cisrOwogICAgICAgICAgICAgLyogZGVjb2RlIEJDcyB1bnRpbCB0aGUgc3ViVExWIGVuZHMgKi8KICAgICAgICAgICAgIGZvciAodGVfY2xhc3MgPSAwOyB0ZV9jbGFzcyA8IChzdWJsLTEpLzQ7IHRlX2NsYXNzKyspIHsKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCA0KTsKICAgICAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cik7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzICBCYW5kd2lkdGggY29uc3RyYWludCBDVCV1OiAlLjNmIE1icHMiLAogICAgICAgICAgICAgICAgICAgICAgICBpZGVudCwKQEAgLTE4MjgsMTEgKzE4OTksMTMgQEAKICAgICAgICAgICAgICAgY2FzZSBHTVBMU19QU0MyOgogICAgICAgICAgICAgICBjYXNlIEdNUExTX1BTQzM6CiAgICAgICAgICAgICAgIGNhc2UgR01QTFNfUFNDNDoKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCA2KTsKICAgICAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cik7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzICBNaW4gTFNQIEJhbmR3aWR0aDogJS4zZiBNYnBzIiwgaWRlbnQsIGJ3LmYgKiA4IC8gMTAwMDAwMCkpOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyAgSW50ZXJmYWNlIE1UVTogJXUiLCBpZGVudCwgRVhUUkFDVF8xNkJJVFModHB0ciArIDQpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgIGNhc2UgR01QTFNfVFNDOgorICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIDgpOwogICAgICAgICAgICAgICAgIGJ3LmkgPSBFWFRSQUNUXzMyQklUUyh0cHRyKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMgIE1pbiBMU1AgQmFuZHdpZHRoOiAlLjNmIE1icHMiLCBpZGVudCwgYncuZiAqIDggLyAxMDAwMDAwKSk7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzICBJbmRpY2F0aW9uICVzIiwgaWRlbnQsCkBAIC0xODU1LDEyICsxOTI4LDEwIEBACiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuKDEpOwogCi10cnVuY3RsdjoKLSAgICBORF9QUklOVCgobmRvLCAiJXNwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QiLCBpZGVudCkpOwordHJ1bmM6CiAgICAgcmV0dXJuKDApOwogfQogCi0KIC8qCiAgKiB0aGlzIGlzIHRoZSBjb21tb24gSVMtUkVBQ0ggZGVjb2RlciBpdCBpcyBjYWxsZWQKICAqIGZyb20gdmFyaW91cyBFWFRELUlTIFJFQUNIIHN0eWxlIFRMVnMgKDIyLDI0LDIyMikKQEAgLTE4OTksNyArMTk3MCw3IEBACiAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwogICAgICAgICAgICAgc3VidGx2X3R5cGU9Kih0cHRyKyspOwogICAgICAgICAgICAgc3VidGx2X2xlbj0qKHRwdHIrKyk7Ci0gICAgICAgICAgICAvKiBwcmVwZW5kIHRoZSBpZGVudCBzdHJpbmcgKi8KKyAgICAgICAgICAgIC8qIHByZXBlbmQgdGhlIGluZGVudCBzdHJpbmcgKi8KICAgICAgICAgICAgIHNucHJpbnRmKGlkZW50X2J1ZmZlciwgc2l6ZW9mKGlkZW50X2J1ZmZlciksICIlcyAgIixpZGVudCk7CiAgICAgICAgICAgICBpZiAoIWlzaXNfcHJpbnRfaXNfcmVhY2hfc3VidGx2KG5kbywgdHB0ciwgc3VidGx2X3R5cGUsIHN1YnRsdl9sZW4sIGlkZW50X2J1ZmZlcikpCiAgICAgICAgICAgICAgICAgcmV0dXJuKDApOwpAQCAtMTk0OCwxMSArMjAxOSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhfdCAqdHB0ciwgY29uc3QgY2hhciAqaWRlbnQsIHVpbnQxNl90IGFmaSkKIHsKICAgICBjaGFyIGlkZW50X2J1ZmZlclsyMF07Ci0jaWZkZWYgSU5FVDYKICAgICB1aW50OF90IHByZWZpeFtzaXplb2Yoc3RydWN0IGluNl9hZGRyKV07IC8qIHNoYXJlZCBjb3B5IGJ1ZmZlciBmb3IgSVB2NCBhbmQgSVB2NiBwcmVmaXhlcyAqLwotI2Vsc2UKLSAgICB1aW50OF90IHByZWZpeFtzaXplb2Yoc3RydWN0IGluX2FkZHIpXTsgLyogc2hhcmVkIGNvcHkgYnVmZmVyIGZvciBJUHY0IHByZWZpeGVzICovCi0jZW5kaWYKICAgICB1X2ludCBtZXRyaWMsIHN0YXR1c19ieXRlLCBiaXRfbGVuZ3RoLCBieXRlX2xlbmd0aCwgc3VibGVuLCBwcm9jZXNzZWQsIHN1YnRsdnR5cGUsIHN1YnRsdmxlbjsKIAogICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCA0KSkKQEAgLTE5NzMsNyArMjA0MCw2IEBACiAgICAgICAgICAgICByZXR1cm4gKDApOwogICAgICAgICB9CiAgICAgICAgIHByb2Nlc3NlZCsrOwotI2lmZGVmIElORVQ2CiAgICAgfSBlbHNlIGlmIChhZmkgPT0gQUZfSU5FVDYpIHsKICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIDEpKSAvKiBmZXRjaCBzdGF0dXMgJiBwcmVmaXhfbGVuIGJ5dGUgKi8KICAgICAgICAgICAgIHJldHVybiAoMCk7CkBAIC0xOTg2LDcgKzIwNTIsNiBAQAogICAgICAgICAgICAgcmV0dXJuICgwKTsKICAgICAgICAgfQogICAgICAgICBwcm9jZXNzZWQrPTI7Ci0jZW5kaWYKICAgICB9IGVsc2UKICAgICAgICAgcmV0dXJuICgwKTsgLyogc29tZWJvZHkgaXMgZm9vbGluZyB1cyAqLwogCkBAIC0yMDA0LDEzICsyMDY5LDExIEBACiAgICAgICAgICAgICAgICBpZGVudCwKICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBwcmVmaXgpLAogICAgICAgICAgICAgICAgYml0X2xlbmd0aCkpOwotI2lmZGVmIElORVQ2Ci0gICAgaWYgKGFmaSA9PSBBRl9JTkVUNikKKyAgICBlbHNlIGlmIChhZmkgPT0gQUZfSU5FVDYpCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlc0lQdjYgcHJlZml4OiAlcy8ldSIsCiAgICAgICAgICAgICAgICBpZGVudCwKICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgcHJlZml4KSwKICAgICAgICAgICAgICAgIGJpdF9sZW5ndGgpKTsKLSNlbmRpZgogCiAgICAgTkRfUFJJTlQoKG5kbywgIiwgRGlzdHJpYnV0aW9uOiAlcywgTWV0cmljOiAldSIsCiAgICAgICAgICAgIElTSVNfTUFTS19UTFZfRVhURF9JUF9VUERPV04oc3RhdHVzX2J5dGUpID8gImRvd24iIDogInVwIiwKQEAgLTIwMTgsMTcgKzIwODEsMTMgQEAKIAogICAgIGlmIChhZmkgPT0gQUZfSU5FVCAmJiBJU0lTX01BU0tfVExWX0VYVERfSVBfU1VCVExWKHN0YXR1c19ieXRlKSkKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgc3ViLVRMVnMgcHJlc2VudCIpKTsKLSNpZmRlZiBJTkVUNgotICAgIGlmIChhZmkgPT0gQUZfSU5FVDYpCisgICAgZWxzZSBpZiAoYWZpID09IEFGX0lORVQ2KQogICAgICAgICBORF9QUklOVCgobmRvLCAiLCAlcyVzIiwKICAgICAgICAgICAgICAgIElTSVNfTUFTS19UTFZfRVhURF9JUDZfSUUoc3RhdHVzX2J5dGUpID8gIkV4dGVybmFsIiA6ICJJbnRlcm5hbCIsCiAgICAgICAgICAgICAgICBJU0lTX01BU0tfVExWX0VYVERfSVA2X1NVQlRMVihzdGF0dXNfYnl0ZSkgPyAiLCBzdWItVExWcyBwcmVzZW50IiA6ICIiKSk7Ci0jZW5kaWYKIAogICAgIGlmICgoYWZpID09IEFGX0lORVQgICYmIElTSVNfTUFTS19UTFZfRVhURF9JUF9TVUJUTFYoc3RhdHVzX2J5dGUpKQotI2lmZGVmIElORVQ2CiAgICAgIHx8IChhZmkgPT0gQUZfSU5FVDYgJiYgSVNJU19NQVNLX1RMVl9FWFREX0lQNl9TVUJUTFYoc3RhdHVzX2J5dGUpKQotI2VuZGlmCiAJKSB7CiAgICAgICAgIC8qIGFzc3VtZSB0aGF0IG9uZSBwcmVmaXggY2FuIGhvbGQgbW9yZQogICAgICAgICAgICB0aGFuIG9uZSBzdWJUTFYgLSB0aGVyZWZvcmUgdGhlIGZpcnN0IGJ5dGUgbXVzdCByZWZsZWN0CkBAIC0yMDQ1LDcgKzIxMDQsNyBAQAogICAgICAgICAgICAgICAgIHJldHVybiAoMCk7CiAgICAgICAgICAgICBzdWJ0bHZ0eXBlPSoodHB0cisrKTsKICAgICAgICAgICAgIHN1YnRsdmxlbj0qKHRwdHIrKyk7Ci0gICAgICAgICAgICAvKiBwcmVwZW5kIHRoZSBpZGVudCBzdHJpbmcgKi8KKyAgICAgICAgICAgIC8qIHByZXBlbmQgdGhlIGluZGVudCBzdHJpbmcgKi8KICAgICAgICAgICAgIHNucHJpbnRmKGlkZW50X2J1ZmZlciwgc2l6ZW9mKGlkZW50X2J1ZmZlciksICIlcyAgIixpZGVudCk7CiAgICAgICAgICAgICBpZiAoIWlzaXNfcHJpbnRfaXBfcmVhY2hfc3VidGx2KG5kbywgdHB0ciwgc3VidGx2dHlwZSwgc3VidGx2bGVuLCBpZGVudF9idWZmZXIpKQogICAgICAgICAgICAgICAgIHJldHVybigwKTsKQEAgLTIwNTcsNiArMjExNiwyMCBAQAogfQogCiAvKgorICogQ2xlYXIgY2hlY2tzdW0gYW5kIGxpZmV0aW1lIHByaW9yIHRvIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCisgKi8KK3N0YXRpYyB2b2lkCitpc2lzX2NsZWFyX2NoZWNrc3VtX2xpZmV0aW1lKHZvaWQgKmhlYWRlcikKK3sKKyAgICBzdHJ1Y3QgaXNpc19sc3BfaGVhZGVyICpoZWFkZXJfbHNwID0gKHN0cnVjdCBpc2lzX2xzcF9oZWFkZXIgKikgaGVhZGVyOworCisgICAgaGVhZGVyX2xzcC0+Y2hlY2tzdW1bMF0gPSAwOworICAgIGhlYWRlcl9sc3AtPmNoZWNrc3VtWzFdID0gMDsKKyAgICBoZWFkZXJfbHNwLT5yZW1haW5pbmdfbGlmZXRpbWVbMF0gPSAwOworICAgIGhlYWRlcl9sc3AtPnJlbWFpbmluZ19saWZldGltZVsxXSA9IDA7Cit9CisKKy8qCiAgKiBpc2lzX3ByaW50CiAgKiBEZWNvZGUgSVMtSVMgcGFja2V0cy4gIFJldHVybiAwIG9uIGVycm9yLgogICovCkBAIC0yMDY5LDcgKzIxNDIsNyBAQAogCiAgICAgY29uc3Qgc3RydWN0IGlzaXNfaWloX2xhbl9oZWFkZXIgKmhlYWRlcl9paWhfbGFuOwogICAgIGNvbnN0IHN0cnVjdCBpc2lzX2lpaF9wdHBfaGVhZGVyICpoZWFkZXJfaWloX3B0cDsKLSAgICBzdHJ1Y3QgaXNpc19sc3BfaGVhZGVyICpoZWFkZXJfbHNwOworICAgIGNvbnN0IHN0cnVjdCBpc2lzX2xzcF9oZWFkZXIgKmhlYWRlcl9sc3A7CiAgICAgY29uc3Qgc3RydWN0IGlzaXNfY3NucF9oZWFkZXIgKmhlYWRlcl9jc25wOwogICAgIGNvbnN0IHN0cnVjdCBpc2lzX3BzbnBfaGVhZGVyICpoZWFkZXJfcHNucDsKIApAQCAtMjA5NCw3ICsyMTY3LDcgQEAKICAgICBwcHRyID0gcCsoSVNJU19DT01NT05fSEVBREVSX1NJWkUpOwogICAgIGhlYWRlcl9paWhfbGFuID0gKGNvbnN0IHN0cnVjdCBpc2lzX2lpaF9sYW5faGVhZGVyICopcHB0cjsKICAgICBoZWFkZXJfaWloX3B0cCA9IChjb25zdCBzdHJ1Y3QgaXNpc19paWhfcHRwX2hlYWRlciAqKXBwdHI7Ci0gICAgaGVhZGVyX2xzcCA9IChzdHJ1Y3QgaXNpc19sc3BfaGVhZGVyICopcHB0cjsKKyAgICBoZWFkZXJfbHNwID0gKGNvbnN0IHN0cnVjdCBpc2lzX2xzcF9oZWFkZXIgKilwcHRyOwogICAgIGhlYWRlcl9jc25wID0gKGNvbnN0IHN0cnVjdCBpc2lzX2NzbnBfaGVhZGVyICopcHB0cjsKICAgICBoZWFkZXJfcHNucCA9IChjb25zdCBzdHJ1Y3QgaXNpc19wc25wX2hlYWRlciAqKXBwdHI7CiAKQEAgLTIxNzIsNiArMjI0NSw3IEBACiAKIAljYXNlIElTSVNfUERVX0wxX0xBTl9JSUg6CiAJY2FzZSBJU0lTX1BEVV9MMl9MQU5fSUlIOgorCSAgICBORF9UQ0hFQ0soKmhlYWRlcl9paWhfbGFuKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIiwgc3JjLWlkICVzIiwKICAgICAgICAgICAgICAgICAgICBpc2lzX3ByaW50X2lkKGhlYWRlcl9paWhfbGFuLT5zb3VyY2VfaWQsIFNZU1RFTV9JRF9MRU4pKSk7CiAJICAgIE5EX1BSSU5UKChuZG8sICIsIGxhbi1pZCAlcywgcHJpbyAldSIsCkBAIC0yMTc5LDEwICsyMjUzLDEyIEBACiAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2lpaF9sYW4tPnByaW9yaXR5KSk7CiAJICAgIGJyZWFrOwogCWNhc2UgSVNJU19QRFVfUFRQX0lJSDoKKwkgICAgTkRfVENIRUNLKCpoZWFkZXJfaWloX3B0cCk7CiAJICAgIE5EX1BSSU5UKChuZG8sICIsIHNyYy1pZCAlcyIsIGlzaXNfcHJpbnRfaWQoaGVhZGVyX2lpaF9wdHAtPnNvdXJjZV9pZCwgU1lTVEVNX0lEX0xFTikpKTsKIAkgICAgYnJlYWs7CiAJY2FzZSBJU0lTX1BEVV9MMV9MU1A6CiAJY2FzZSBJU0lTX1BEVV9MMl9MU1A6CisJICAgIE5EX1RDSEVDSygqaGVhZGVyX2xzcCk7CiAJICAgIE5EX1BSSU5UKChuZG8sICIsIGxzcC1pZCAlcywgc2VxIDB4JTA4eCwgbGlmZXRpbWUgJTV1cyIsCiAJCSAgIGlzaXNfcHJpbnRfaWQoaGVhZGVyX2xzcC0+bHNwX2lkLCBMU1BfSURfTEVOKSwKIAkJICAgRVhUUkFDVF8zMkJJVFMoaGVhZGVyX2xzcC0+c2VxdWVuY2VfbnVtYmVyKSwKQEAgLTIxOTAsMTAgKzIyNjYsMTIgQEAKIAkgICAgYnJlYWs7CiAJY2FzZSBJU0lTX1BEVV9MMV9DU05QOgogCWNhc2UgSVNJU19QRFVfTDJfQ1NOUDoKKwkgICAgTkRfVENIRUNLKCpoZWFkZXJfY3NucCk7CiAJICAgIE5EX1BSSU5UKChuZG8sICIsIHNyYy1pZCAlcyIsIGlzaXNfcHJpbnRfaWQoaGVhZGVyX2NzbnAtPnNvdXJjZV9pZCwgTk9ERV9JRF9MRU4pKSk7CiAJICAgIGJyZWFrOwogCWNhc2UgSVNJU19QRFVfTDFfUFNOUDoKIAljYXNlIElTSVNfUERVX0wyX1BTTlA6CisJICAgIE5EX1RDSEVDSygqaGVhZGVyX3BzbnApOwogCSAgICBORF9QUklOVCgobmRvLCAiLCBzcmMtaWQgJXMiLCBpc2lzX3ByaW50X2lkKGhlYWRlcl9wc25wLT5zb3VyY2VfaWQsIE5PREVfSURfTEVOKSkpOwogCSAgICBicmVhazsKIApAQCAtMjIzMywxMyArMjMxMSwxMyBAQAogCSAgICByZXR1cm4gKDApOwogCX0KIAorCU5EX1RDSEVDSygqaGVhZGVyX2lpaF9sYW4pOwogCXBkdV9sZW49RVhUUkFDVF8xNkJJVFMoaGVhZGVyX2lpaF9sYW4tPnBkdV9sZW4pOwogCWlmIChwYWNrZXRfbGVuPnBkdV9sZW4pIHsKICAgICAgICAgICAgIHBhY2tldF9sZW49cGR1X2xlbjsgLyogZG8gVExWIGRlY29kaW5nIGFzIGxvbmcgYXMgaXQgbWFrZXMgc2Vuc2UgKi8KICAgICAgICAgICAgIGxlbmd0aD1wZHVfbGVuOwogCX0KIAotCU5EX1RDSEVDSygqaGVhZGVyX2lpaF9sYW4pOwogCU5EX1BSSU5UKChuZG8sICJcblx0ICBzb3VyY2UtaWQ6ICVzLCAgaG9sZGluZyB0aW1lOiAldXMsIEZsYWdzOiBbJXNdIiwKICAgICAgICAgICAgICAgIGlzaXNfcHJpbnRfaWQoaGVhZGVyX2lpaF9sYW4tPnNvdXJjZV9pZCxTWVNURU1fSURfTEVOKSwKICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKGhlYWRlcl9paWhfbGFuLT5ob2xkaW5nX3RpbWUpLApAQCAtMjI2OCwxMyArMjM0NiwxMyBAQAogCSAgICByZXR1cm4gKDApOwogCX0KIAorCU5EX1RDSEVDSygqaGVhZGVyX2lpaF9wdHApOwogCXBkdV9sZW49RVhUUkFDVF8xNkJJVFMoaGVhZGVyX2lpaF9wdHAtPnBkdV9sZW4pOwogCWlmIChwYWNrZXRfbGVuPnBkdV9sZW4pIHsKICAgICAgICAgICAgIHBhY2tldF9sZW49cGR1X2xlbjsgLyogZG8gVExWIGRlY29kaW5nIGFzIGxvbmcgYXMgaXQgbWFrZXMgc2Vuc2UgKi8KICAgICAgICAgICAgIGxlbmd0aD1wZHVfbGVuOwogCX0KIAotCU5EX1RDSEVDSygqaGVhZGVyX2lpaF9wdHApOwogCU5EX1BSSU5UKChuZG8sICJcblx0ICBzb3VyY2UtaWQ6ICVzLCBob2xkaW5nIHRpbWU6ICV1cywgRmxhZ3M6IFslc10iLAogICAgICAgICAgICAgICAgaXNpc19wcmludF9pZChoZWFkZXJfaWloX3B0cC0+c291cmNlX2lkLFNZU1RFTV9JRF9MRU4pLAogICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoaGVhZGVyX2lpaF9wdHAtPmhvbGRpbmdfdGltZSksCkBAIC0yMzAzLDMxICsyMzgxLDIzIEBACiAJICAgIHJldHVybiAoMCk7CiAJfQogCisJTkRfVENIRUNLKCpoZWFkZXJfbHNwKTsKIAlwZHVfbGVuPUVYVFJBQ1RfMTZCSVRTKGhlYWRlcl9sc3AtPnBkdV9sZW4pOwogCWlmIChwYWNrZXRfbGVuPnBkdV9sZW4pIHsKICAgICAgICAgICAgIHBhY2tldF9sZW49cGR1X2xlbjsgLyogZG8gVExWIGRlY29kaW5nIGFzIGxvbmcgYXMgaXQgbWFrZXMgc2Vuc2UgKi8KICAgICAgICAgICAgIGxlbmd0aD1wZHVfbGVuOwogCX0KIAotCU5EX1RDSEVDSygqaGVhZGVyX2xzcCk7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHQgIGxzcC1pZDogJXMsIHNlcTogMHglMDh4LCBsaWZldGltZTogJTV1c1xuXHQgIGNoa3N1bTogMHglMDR4IiwKICAgICAgICAgICAgICAgIGlzaXNfcHJpbnRfaWQoaGVhZGVyX2xzcC0+bHNwX2lkLCBMU1BfSURfTEVOKSwKICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKGhlYWRlcl9sc3AtPnNlcXVlbmNlX251bWJlciksCiAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhoZWFkZXJfbHNwLT5yZW1haW5pbmdfbGlmZXRpbWUpLAogICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoaGVhZGVyX2xzcC0+Y2hlY2tzdW0pKSk7CiAKLQotICAgICAgICBvc2lfcHJpbnRfY2tzdW0obmRvLCAodWludDhfdCAqKWhlYWRlcl9sc3AtPmxzcF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKGhlYWRlcl9sc3AtPmNoZWNrc3VtKSwgMTIsIGxlbmd0aC0xMik7Ci0KLSAgICAgICAgLyoKLSAgICAgICAgICogQ2xlYXIgY2hlY2tzdW0gYW5kIGxpZmV0aW1lIHByaW9yIHRvIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCi0gICAgICAgICAqLwotICAgICAgICBoZWFkZXJfbHNwLT5jaGVja3N1bVswXSA9IDA7Ci0gICAgICAgIGhlYWRlcl9sc3AtPmNoZWNrc3VtWzFdID0gMDsKLSAgICAgICAgaGVhZGVyX2xzcC0+cmVtYWluaW5nX2xpZmV0aW1lWzBdID0gMDsKLSAgICAgICAgaGVhZGVyX2xzcC0+cmVtYWluaW5nX2xpZmV0aW1lWzFdID0gMDsKLQorICAgICAgICBpZiAob3NpX3ByaW50X2Nrc3VtKG5kbywgKGNvbnN0IHVpbnQ4X3QgKiloZWFkZXJfbHNwLT5sc3BfaWQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoaGVhZGVyX2xzcC0+Y2hlY2tzdW0pLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEyLCBsZW5ndGgtMTIpID09IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAKIAlORF9QUklOVCgobmRvLCAiLCBQRFUgbGVuZ3RoOiAldSwgRmxhZ3M6IFsgJXMiLAogICAgICAgICAgICAgICAgcGR1X2xlbiwKQEAgLTIzNjEsMTMgKzI0MzEsMTMgQEAKIAkgICAgcmV0dXJuICgwKTsKIAl9CiAKKwlORF9UQ0hFQ0soKmhlYWRlcl9jc25wKTsKIAlwZHVfbGVuPUVYVFJBQ1RfMTZCSVRTKGhlYWRlcl9jc25wLT5wZHVfbGVuKTsKIAlpZiAocGFja2V0X2xlbj5wZHVfbGVuKSB7CiAgICAgICAgICAgICBwYWNrZXRfbGVuPXBkdV9sZW47IC8qIGRvIFRMViBkZWNvZGluZyBhcyBsb25nIGFzIGl0IG1ha2VzIHNlbnNlICovCiAgICAgICAgICAgICBsZW5ndGg9cGR1X2xlbjsKIAl9CiAKLQlORF9UQ0hFQ0soKmhlYWRlcl9jc25wKTsKIAlORF9QUklOVCgobmRvLCAiXG5cdCAgc291cmNlLWlkOiAgICAlcywgUERVIGxlbmd0aDogJXUiLAogICAgICAgICAgICAgICAgaXNpc19wcmludF9pZChoZWFkZXJfY3NucC0+c291cmNlX2lkLCBOT0RFX0lEX0xFTiksCiAgICAgICAgICAgICAgICBwZHVfbGVuKSk7CkBAIC0yMzkzLDEzICsyNDYzLDEzIEBACiAJICAgIHJldHVybiAoMCk7CiAJfQogCisJTkRfVENIRUNLKCpoZWFkZXJfcHNucCk7CiAJcGR1X2xlbj1FWFRSQUNUXzE2QklUUyhoZWFkZXJfcHNucC0+cGR1X2xlbik7CiAJaWYgKHBhY2tldF9sZW4+cGR1X2xlbikgewogICAgICAgICAgICAgcGFja2V0X2xlbj1wZHVfbGVuOyAvKiBkbyBUTFYgZGVjb2RpbmcgYXMgbG9uZyBhcyBpdCBtYWtlcyBzZW5zZSAqLwogICAgICAgICAgICAgbGVuZ3RoPXBkdV9sZW47CiAJfQogCi0JTkRfVENIRUNLKCpoZWFkZXJfcHNucCk7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHQgIHNvdXJjZS1pZDogICAgJXMsIFBEVSBsZW5ndGg6ICV1IiwKICAgICAgICAgICAgICAgIGlzaXNfcHJpbnRfaWQoaGVhZGVyX3BzbnAtPnNvdXJjZV9pZCwgTk9ERV9JRF9MRU4pLAogICAgICAgICAgICAgICAgcGR1X2xlbikpOwpAQCAtMjQyNywxMSArMjQ5Nyw3IEBACiAgICAgICAgICAgICByZXR1cm4gKDEpOwogICAgICAgICB9CiAKLQlpZiAoIU5EX1RURVNUMigqcHB0ciwgMikpIHsKLQkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdCBwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QgKCVsZCkgYnl0ZXMiLAotICAgICAgICAgICAgICAgICAgIChsb25nKShwcHRyIC0gbmRvLT5uZG9fc25hcGVuZCkpKTsKLQkgICAgcmV0dXJuICgxKTsKLQl9CisJTkRfVENIRUNLMigqcHB0ciwgMik7CiAJdGx2X3R5cGUgPSAqcHB0cisrOwogCXRsdl9sZW4gPSAqcHB0cisrOwogICAgICAgICB0bXAgPXRsdl9sZW47IC8qIGNvcHkgdGVtcG9yYXJ5IGxlbiAmIHBvaW50ZXIgdG8gcGFja2V0IGRhdGEgKi8KQEAgLTI0NDksMzIgKzI1MTUsMjkgQEAKICAgICAgICAgICAgICAgIHRsdl90eXBlLAogICAgICAgICAgICAgICAgdGx2X2xlbikpOwogCi0gICAgICAgIGlmICh0bHZfbGVuID09IDApIC8qIHNvbWV0aGluZyBpcyBtYWxmb3JtZWQgKi8KKyAgICAgICAgaWYgKHRsdl9sZW4gPT0gMCkgLyogc29tZXRoaW5nIGlzIGludmFsaWQgKi8KIAkgICAgY29udGludWU7CiAKICAgICAgICAgLyogbm93IGNoZWNrIGlmIHdlIGhhdmUgYSBkZWNvZGVyIG90aGVyd2lzZSBkbyBhIGhleGR1bXAgYXQgdGhlIGVuZCovCiAJc3dpdGNoICh0bHZfdHlwZSkgewogCWNhc2UgSVNJU19UTFZfQVJFQV9BRERSOgotCSAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgMSkpCi0JCWdvdG8gdHJ1bmN0bHY7CisJICAgIE5EX1RDSEVDSzIoKnRwdHIsIDEpOwogCSAgICBhbGVuID0gKnRwdHIrKzsKIAkgICAgd2hpbGUgKHRtcCAmJiBhbGVuIDwgdG1wKSB7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgQXJlYSBhZGRyZXNzIChsZW5ndGg6ICV1KTogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICBhbGVuLAotICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyh0cHRyLCBhbGVuKSkpOworICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIHRwdHIsIGFsZW4pKSk7CiAJCXRwdHIgKz0gYWxlbjsKIAkJdG1wIC09IGFsZW4gKyAxOwogCQlpZiAodG1wPT0wKSAvKiBpZiB0aGlzIGlzIHRoZSBsYXN0IGFyZWEgYWRkcmVzcyBkbyBub3QgYXR0ZW10IGEgYm91bmRhcnkgY2hlY2sgKi8KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0JCWlmICghTkRfVFRFU1QyKCp0cHRyLCAxKSkKLQkJICAgIGdvdG8gdHJ1bmN0bHY7CisJCU5EX1RDSEVDSzIoKnRwdHIsIDEpOwogCQlhbGVuID0gKnRwdHIrKzsKIAkgICAgfQogCSAgICBicmVhazsKIAljYXNlIElTSVNfVExWX0lTTkVJR0g6CiAJICAgIHdoaWxlICh0bXAgPj0gRVRIRVJfQUREUl9MRU4pIHsKLSAgICAgICAgICAgICAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgRVRIRVJfQUREUl9MRU4pKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIEVUSEVSX0FERFJfTEVOKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFNOUEE6ICVzIiwgaXNpc19wcmludF9pZCh0cHRyLCBFVEhFUl9BRERSX0xFTikpKTsKICAgICAgICAgICAgICAgICB0bXAgLT0gRVRIRVJfQUREUl9MRU47CiAgICAgICAgICAgICAgICAgdHB0ciArPSBFVEhFUl9BRERSX0xFTjsKQEAgLTI0OTIsOCArMjU1NSw3IEBACiAgICAgICAgICAgICB0bXAgLS07CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIExBTiBhZGRyZXNzIGxlbmd0aCAldSBieXRlcyAiLCBsYW5fYWxlbikpOwogCSAgICB3aGlsZSAodG1wID49IGxhbl9hbGVuKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIGxhbl9hbGVuKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBsYW5fYWxlbik7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdElTIE5laWdoYm9yOiAlcyIsIGlzaXNfcHJpbnRfaWQodHB0ciwgbGFuX2FsZW4pKSk7CiAgICAgICAgICAgICAgICAgdG1wIC09IGxhbl9hbGVuOwogICAgICAgICAgICAgICAgIHRwdHIgKz1sYW5fYWxlbjsKQEAgLTI1MzksMTYgKzI2MDEsMTQgQEAKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIElTSVNfVExWX0lTX1JFQUNIOgotCSAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwxKSkgIC8qIGNoZWNrIGlmIHRoZXJlIGlzIG9uZSBieXRlIGxlZnQgdG8gcmVhZCBvdXQgdGhlIHZpcnR1YWwgZmxhZyAqLwotICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisJICAgIE5EX1RDSEVDSzIoKnRwdHIsMSk7ICAvKiBjaGVjayBpZiB0aGVyZSBpcyBvbmUgYnl0ZSBsZWZ0IHRvIHJlYWQgb3V0IHRoZSB2aXJ0dWFsIGZsYWcgKi8KICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMiLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIoaXNpc19pc19yZWFjaF92aXJ0dWFsX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJib2d1cyB2aXJ0dWFsIGZsYWcgMHglMDJ4IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0cHRyKyspKSk7CiAJICAgIHRsdl9pc19yZWFjaCA9IChjb25zdCBzdHJ1Y3QgaXNpc190bHZfaXNfcmVhY2ggKil0cHRyOwogICAgICAgICAgICAgd2hpbGUgKHRtcCA+PSBzaXplb2Yoc3RydWN0IGlzaXNfdGx2X2lzX3JlYWNoKSkgewotCQlpZiAoIU5EX1RURVNUKCp0bHZfaXNfcmVhY2gpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLKCp0bHZfaXNfcmVhY2gpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIElTIE5laWdoYm9yOiAlcyIsCiAJCSAgICAgICBpc2lzX3ByaW50X2lkKHRsdl9pc19yZWFjaC0+bmVpZ2hib3Jfbm9kZWlkLCBOT0RFX0lEX0xFTikpKTsKIAkJaXNpc19wcmludF9tZXRyaWNfYmxvY2sobmRvLCAmdGx2X2lzX3JlYWNoLT5pc2lzX21ldHJpY19ibG9jayk7CkBAIC0yNTYwLDggKzI2MjAsNyBAQAogICAgICAgICBjYXNlIElTSVNfVExWX0VTTkVJR0g6CiAJICAgIHRsdl9lc19yZWFjaCA9IChjb25zdCBzdHJ1Y3QgaXNpc190bHZfZXNfcmVhY2ggKil0cHRyOwogICAgICAgICAgICAgd2hpbGUgKHRtcCA+PSBzaXplb2Yoc3RydWN0IGlzaXNfdGx2X2VzX3JlYWNoKSkgewotCQlpZiAoIU5EX1RURVNUKCp0bHZfZXNfcmVhY2gpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLKCp0bHZfZXNfcmVhY2gpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIEVTIE5laWdoYm9yOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgIGlzaXNfcHJpbnRfaWQodGx2X2VzX3JlYWNoLT5uZWlnaGJvcl9zeXNpZCwgU1lTVEVNX0lEX0xFTikpKTsKIAkJaXNpc19wcmludF9tZXRyaWNfYmxvY2sobmRvLCAmdGx2X2VzX3JlYWNoLT5pc2lzX21ldHJpY19ibG9jayk7CkBAIC0yNjA0LDcgKzI2NjMsNiBAQAogCSAgICB9CiAJICAgIGJyZWFrOwogCi0jaWZkZWYgSU5FVDYKIAljYXNlIElTSVNfVExWX0lQNl9SRUFDSDoKIAkgICAgd2hpbGUgKHRtcD4wKSB7CiAgICAgICAgICAgICAgICAgZXh0X2lwX2xlbiA9IGlzaXNfcHJpbnRfZXh0ZF9pcF9yZWFjaChuZG8sIHRwdHIsICJcblx0ICAgICAgIiwgQUZfSU5FVDYpOwpAQCAtMjYzNCw4ICsyNjkyLDcgQEAKIAogCWNhc2UgSVNJU19UTFZfSVA2QUREUjoKIAkgICAgd2hpbGUgKHRtcD49c2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKLQkJaWYgKCFORF9UVEVTVDIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSkKLQkJICAgIGdvdG8gdHJ1bmN0bHY7CisJCU5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKIAogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgSVB2NiBpbnRlcmZhY2UgYWRkcmVzczogJXMiLAogCQkgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCB0cHRyKSkpOwpAQCAtMjY0NCwxMCArMjcwMSw4IEBACiAJCXRtcCAtPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKIAkgICAgfQogCSAgICBicmVhazsKLSNlbmRpZgogCWNhc2UgSVNJU19UTFZfQVVUSDoKLQkgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIDEpKQotCQlnb3RvIHRydW5jdGx2OworCSAgICBORF9UQ0hFQ0syKCp0cHRyLCAxKTsKIAogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlczogIiwKICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGlzaXNfc3VidGx2X2F1dGhfdmFsdWVzLApAQCAtMjY1NiwzNiArMjcxMSwyOSBAQAogCiAJICAgIHN3aXRjaCAoKnRwdHIpIHsKIAkgICAgY2FzZSBJU0lTX1NVQlRMVl9BVVRIX1NJTVBMRToKLQkJZm9yKGk9MTtpPHRsdl9sZW47aSsrKSB7Ci0JCSAgICBpZiAoIU5EX1RURVNUMigqKHRwdHIgKyBpKSwgMSkpCi0JCQlnb3RvIHRydW5jdGx2OwotCQkgICAgTkRfUFJJTlQoKG5kbywgIiVjIiwgKih0cHRyICsgaSkpKTsKLQkJfQorCQlpZiAoZm5fcHJpbnR6cChuZG8sIHRwdHIgKyAxLCB0bHZfbGVuIC0gMSwgbmRvLT5uZG9fc25hcGVuZCkpCisJCSAgICBnb3RvIHRydW5jdGx2OwogCQlicmVhazsKIAkgICAgY2FzZSBJU0lTX1NVQlRMVl9BVVRIX01ENToKIAkJZm9yKGk9MTtpPHRsdl9sZW47aSsrKSB7Ci0JCSAgICBpZiAoIU5EX1RURVNUMigqKHRwdHIgKyBpKSwgMSkpCi0JCQlnb3RvIHRydW5jdGx2OworCQkgICAgTkRfVENIRUNLMigqKHRwdHIgKyBpKSwgMSk7CiAJCSAgICBORF9QUklOVCgobmRvLCAiJTAyeCIsICoodHB0ciArIGkpKSk7CiAJCX0KIAkJaWYgKHRsdl9sZW4gIT0gSVNJU19TVUJUTFZfQVVUSF9NRDVfTEVOKzEpCi0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIChtYWxmb3JtZWQgc3ViVExWKSAiKSk7CisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIChpbnZhbGlkIHN1YlRMVikgIikpOwogCi0jaWZkZWYgSEFWRV9MSUJDUllQVE8KLSAgICAgICAgICAgICAgICBzaWdjaGVjayA9IHNpZ25hdHVyZV92ZXJpZnkobmRvLCBvcHRyLCBsZW5ndGgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopdHB0ciArIDEpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzaWdjaGVjayA9IENBTlRfQ0hFQ0tfU0lHTkFUVVJFOwotI2VuZGlmCisgICAgICAgICAgICAgICAgc2lnY2hlY2sgPSBzaWduYXR1cmVfdmVyaWZ5KG5kbywgb3B0ciwgbGVuZ3RoLCB0cHRyICsgMSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXNpc19jbGVhcl9jaGVja3N1bV9saWZldGltZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyX2xzcCk7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAoJXMpIiwgdG9rMnN0cihzaWduYXR1cmVfY2hlY2tfdmFsdWVzLCAiVW5rbm93biIsIHNpZ2NoZWNrKSkpOwogCiAJCWJyZWFrOwogICAgICAgICAgICAgY2FzZSBJU0lTX1NVQlRMVl9BVVRIX0dFTkVSSUM6CisJCU5EX1RDSEVDSzIoKih0cHRyICsgMSksIDIpOwogICAgICAgICAgICAgICAgIGtleV9pZCA9IEVYVFJBQ1RfMTZCSVRTKCh0cHRyKzEpKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXUsIHBhc3N3b3JkOiAiLCBrZXlfaWQpKTsKICAgICAgICAgICAgICAgICBmb3IoaT0xICsgc2l6ZW9mKHVpbnQxNl90KTtpPHRsdl9sZW47aSsrKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghTkRfVFRFU1QyKCoodHB0ciArIGkpLCAxKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKih0cHRyICsgaSksIDEpOwogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTAyeCIsICoodHB0ciArIGkpKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMjcwMCwzMiArMjc0OCwyNiBAQAogCWNhc2UgSVNJU19UTFZfUFRQX0FESjoKIAkgICAgdGx2X3B0cF9hZGogPSAoY29uc3Qgc3RydWN0IGlzaXNfdGx2X3B0cF9hZGogKil0cHRyOwogCSAgICBpZih0bXA+PTEpIHsKLQkJaWYgKCFORF9UVEVTVDIoKnRwdHIsIDEpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLMigqdHB0ciwgMSk7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgQWRqYWNlbmN5IFN0YXRlOiAlcyAoJXUpIiwKIAkJICAgICAgIHRvazJzdHIoaXNpc19wdHBfYWRqYW5jZXlfdmFsdWVzLCAidW5rbm93biIsICp0cHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICp0cHRyKSk7CiAJCXRtcC0tOwogCSAgICB9CiAJICAgIGlmKHRtcD5zaXplb2YodGx2X3B0cF9hZGotPmV4dGRfbG9jYWxfY2lyY3VpdF9pZCkpIHsKLQkJaWYgKCFORF9UVEVTVDIodGx2X3B0cF9hZGotPmV4dGRfbG9jYWxfY2lyY3VpdF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGx2X3B0cF9hZGotPmV4dGRfbG9jYWxfY2lyY3VpdF9pZCkpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLKHRsdl9wdHBfYWRqLT5leHRkX2xvY2FsX2NpcmN1aXRfaWQpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIEV4dGVuZGVkIExvY2FsIGNpcmN1aXQtSUQ6IDB4JTA4eCIsCiAJCSAgICAgICBFWFRSQUNUXzMyQklUUyh0bHZfcHRwX2Fkai0+ZXh0ZF9sb2NhbF9jaXJjdWl0X2lkKSkpOwogCQl0bXAtPXNpemVvZih0bHZfcHRwX2Fkai0+ZXh0ZF9sb2NhbF9jaXJjdWl0X2lkKTsKIAkgICAgfQogCSAgICBpZih0bXA+PVNZU1RFTV9JRF9MRU4pIHsKLQkJaWYgKCFORF9UVEVTVDIodGx2X3B0cF9hZGotPm5laWdoYm9yX3N5c2lkLCBTWVNURU1fSURfTEVOKSkKLQkJICAgIGdvdG8gdHJ1bmN0bHY7CisJCU5EX1RDSEVDSzIodGx2X3B0cF9hZGotPm5laWdoYm9yX3N5c2lkLCBTWVNURU1fSURfTEVOKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBOZWlnaGJvciBTeXN0ZW0tSUQ6ICVzIiwKIAkJICAgICAgIGlzaXNfcHJpbnRfaWQodGx2X3B0cF9hZGotPm5laWdoYm9yX3N5c2lkLCBTWVNURU1fSURfTEVOKSkpOwogCQl0bXAtPVNZU1RFTV9JRF9MRU47CiAJICAgIH0KIAkgICAgaWYodG1wPj1zaXplb2YodGx2X3B0cF9hZGotPm5laWdoYm9yX2V4dGRfbG9jYWxfY2lyY3VpdF9pZCkpIHsKLQkJaWYgKCFORF9UVEVTVDIodGx2X3B0cF9hZGotPm5laWdoYm9yX2V4dGRfbG9jYWxfY2lyY3VpdF9pZCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGx2X3B0cF9hZGotPm5laWdoYm9yX2V4dGRfbG9jYWxfY2lyY3VpdF9pZCkpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLKHRsdl9wdHBfYWRqLT5uZWlnaGJvcl9leHRkX2xvY2FsX2NpcmN1aXRfaWQpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIE5laWdoYm9yIEV4dGVuZGVkIExvY2FsIGNpcmN1aXQtSUQ6IDB4JTA4eCIsCiAJCSAgICAgICBFWFRSQUNUXzMyQklUUyh0bHZfcHRwX2Fkai0+bmVpZ2hib3JfZXh0ZF9sb2NhbF9jaXJjdWl0X2lkKSkpOwogCSAgICB9CkBAIC0yNzM0LDggKzI3NzYsNyBAQAogCWNhc2UgSVNJU19UTFZfUFJPVE9DT0xTOgogCSAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIE5MUElEKHMpOiAiKSk7CiAJICAgIHdoaWxlICh0bXA+MCkgewotCQlpZiAoIU5EX1RURVNUMigqKHRwdHIpLCAxKSkKLQkJICAgIGdvdG8gdHJ1bmN0bHY7CisJCU5EX1RDSEVDSzIoKih0cHRyKSwgMSk7CiAJCU5EX1BSSU5UKChuZG8sICIlcyAoMHglMDJ4KSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIobmxwaWRfdmFsdWVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwKQEAgLTI3NTAsOCArMjc5MSw3IEBACiAKICAgICBjYXNlIElTSVNfVExWX01UX1BPUlRfQ0FQOgogICAgIHsKLSAgICAgIGlmICghTkRfVFRFU1QyKCoodHB0ciksIDIpKQotICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgTkRfVENIRUNLMigqKHRwdHIpLCAyKTsKIAogICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAgUkVTOiAlZCwgTVRJRChzKTogJWQiLAogICAgICAgICAgICAgICAoRVhUUkFDVF8xNkJJVFMgKHRwdHIpID4+IDEyKSwKQEAgLTI3NjgsOCArMjgwOCw3IEBACiAKICAgICBjYXNlIElTSVNfVExWX01UX0NBUEFCSUxJVFk6CiAKLSAgICAgIGlmICghTkRfVFRFU1QyKCoodHB0ciksIDIpKQotICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgTkRfVENIRUNLMigqKHRwdHIpLCAyKTsKIAogICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBPOiAlZCwgUkVTOiAlZCwgTVRJRChzKTogJWQiLAogICAgICAgICAgICAgICAgIChFWFRSQUNUXzE2QklUUyh0cHRyKSA+PiAxNSkgJiAweDAxLApAQCAtMjc4NSwxNSArMjgyNCwxMyBAQAogICAgICAgYnJlYWs7CiAKIAljYXNlIElTSVNfVExWX1RFX1JPVVRFUl9JRDoKLQkgICAgaWYgKCFORF9UVEVTVDIoKnBwdHIsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpKQotCQlnb3RvIHRydW5jdGx2OworCSAgICBORF9UQ0hFQ0syKCpwcHRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUcmFmZmljIEVuZ2luZWVyaW5nIFJvdXRlciBJRDogJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgcHB0cikpKTsKIAkgICAgYnJlYWs7CiAKIAljYXNlIElTSVNfVExWX0lQQUREUjoKIAkgICAgd2hpbGUgKHRtcD49c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkgewotCQlpZiAoIU5EX1RURVNUMigqdHB0ciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpCi0JCSAgICBnb3RvIHRydW5jdGx2OworCQlORF9UQ0hFQ0syKCp0cHRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBJUHY0IGludGVyZmFjZSBhZGRyZXNzOiAlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCB0cHRyKSkpOwogCQl0cHRyICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJCXRtcCAtPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwpAQCAtMjgwMiw0OSArMjgzOSw0MCBAQAogCiAJY2FzZSBJU0lTX1RMVl9IT1NUTkFNRToKIAkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBIb3N0bmFtZTogIikpOwotCSAgICB3aGlsZSAodG1wPjApIHsKLQkJaWYgKCFORF9UVEVTVDIoKnRwdHIsIDEpKQotCQkgICAgZ290byB0cnVuY3RsdjsKLQkJTkRfUFJJTlQoKG5kbywgIiVjIiwgKnRwdHIrKykpOwotICAgICAgICAgICAgICAgIHRtcC0tOwotCSAgICB9CisJICAgIGlmIChmbl9wcmludHpwKG5kbywgdHB0ciwgdG1wLCBuZG8tPm5kb19zbmFwZW5kKSkKKwkJZ290byB0cnVuY3RsdjsKIAkgICAgYnJlYWs7CiAKIAljYXNlIElTSVNfVExWX1NIQVJFRF9SSVNLX0dST1VQOgogCSAgICBpZiAodG1wIDwgTk9ERV9JRF9MRU4pCiAJICAgICAgICBicmVhazsKLQkgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIE5PREVfSURfTEVOKSkKLSAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworCSAgICBORF9UQ0hFQ0syKCp0cHRyLCBOT0RFX0lEX0xFTik7CiAJICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgSVMgTmVpZ2hib3I6ICVzIiwgaXNpc19wcmludF9pZCh0cHRyLCBOT0RFX0lEX0xFTikpKTsKIAkgICAgdHB0cis9KE5PREVfSURfTEVOKTsKIAkgICAgdG1wLT0oTk9ERV9JRF9MRU4pOwogCiAJICAgIGlmICh0bXAgPCAxKQogCSAgICAgICAgYnJlYWs7Ci0JICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCAxKSkKLSAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworCSAgICBORF9UQ0hFQ0syKCp0cHRyLCAxKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIiwgRmxhZ3M6IFslc10iLCBJU0lTX01BU0tfVExWX1NIQVJFRF9SSVNLX0dST1VQKCp0cHRyKyspID8gIm51bWJlcmVkIiA6ICJ1bm51bWJlcmVkIikpOwogCSAgICB0bXAtLTsKIAogCSAgICBpZiAodG1wIDwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkKIAkgICAgICAgIGJyZWFrOwotCSAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSkpCi0gICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKwkgICAgTkRfVENIRUNLMigqdHB0ciwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgSVB2NCBpbnRlcmZhY2UgYWRkcmVzczogJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgdHB0cikpKTsKIAkgICAgdHB0cis9c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAkgICAgdG1wLT1zaXplb2Yoc3RydWN0IGluX2FkZHIpOwogCiAJICAgIGlmICh0bXAgPCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKQogCSAgICAgICAgYnJlYWs7Ci0JICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSkKLSAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworCSAgICBORF9UQ0hFQ0syKCp0cHRyLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBJUHY0IG5laWdoYm9yIGFkZHJlc3M6ICVzIiwgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIpKSk7CiAJICAgIHRwdHIrPXNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJICAgIHRtcC09c2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAogCSAgICB3aGlsZSAodG1wPj00KSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIDQpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIDQpOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgTGluay1JRDogMHglMDh4IiwgRVhUUkFDVF8zMkJJVFModHB0cikpKTsKICAgICAgICAgICAgICAgICB0cHRyKz00OwogICAgICAgICAgICAgICAgIHRtcC09NDsKQEAgLTI4NTQsMTggKzI4ODIsMTQgQEAKIAljYXNlIElTSVNfVExWX0xTUDoKIAkgICAgdGx2X2xzcCA9IChjb25zdCBzdHJ1Y3QgaXNpc190bHZfbHNwICopdHB0cjsKIAkgICAgd2hpbGUodG1wPj1zaXplb2Yoc3RydWN0IGlzaXNfdGx2X2xzcCkpIHsKLQkJaWYgKCFORF9UVEVTVCgodGx2X2xzcC0+bHNwX2lkKVtMU1BfSURfTEVOLTFdKSkKLQkJICAgIGdvdG8gdHJ1bmN0bHY7CisJCU5EX1RDSEVDSygodGx2X2xzcC0+bHNwX2lkKVtMU1BfSURfTEVOLTFdKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBsc3AtaWQ6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgaXNpc19wcmludF9pZCh0bHZfbHNwLT5sc3BfaWQsIExTUF9JRF9MRU4pKSk7Ci0JCWlmICghTkRfVFRFU1QyKHRsdl9sc3AtPnNlcXVlbmNlX251bWJlciwgNCkpCi0JCSAgICBnb3RvIHRydW5jdGx2OworCQlORF9UQ0hFQ0syKHRsdl9sc3AtPnNlcXVlbmNlX251bWJlciwgNCk7CiAJCU5EX1BSSU5UKChuZG8sICIsIHNlcTogMHglMDh4IiwgRVhUUkFDVF8zMkJJVFModGx2X2xzcC0+c2VxdWVuY2VfbnVtYmVyKSkpOwotCQlpZiAoIU5EX1RURVNUMih0bHZfbHNwLT5yZW1haW5pbmdfbGlmZXRpbWUsIDIpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLMih0bHZfbHNwLT5yZW1haW5pbmdfbGlmZXRpbWUsIDIpOwogCQlORF9QUklOVCgobmRvLCAiLCBsaWZldGltZTogJTVkcyIsIEVYVFJBQ1RfMTZCSVRTKHRsdl9sc3AtPnJlbWFpbmluZ19saWZldGltZSkpKTsKLQkJaWYgKCFORF9UVEVTVDIodGx2X2xzcC0+Y2hlY2tzdW0sIDIpKQotCQkgICAgZ290byB0cnVuY3RsdjsKKwkJTkRfVENIRUNLMih0bHZfbHNwLT5jaGVja3N1bSwgMik7CiAJCU5EX1BSSU5UKChuZG8sICIsIGNoa3N1bTogMHglMDR4IiwgRVhUUkFDVF8xNkJJVFModGx2X2xzcC0+Y2hlY2tzdW0pKSk7CiAJCXRtcC09c2l6ZW9mKHN0cnVjdCBpc2lzX3Rsdl9sc3ApOwogCQl0bHZfbHNwKys7CkBAIC0yODc1LDE1ICsyODk5LDMwIEBACiAJY2FzZSBJU0lTX1RMVl9DSEVDS1NVTToKIAkgICAgaWYgKHRtcCA8IElTSVNfVExWX0NIRUNLU1VNX01JTkxFTikKIAkgICAgICAgIGJyZWFrOwotCSAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgSVNJU19UTFZfQ0hFQ0tTVU1fTUlOTEVOKSkKLQkJZ290byB0cnVuY3RsdjsKKwkgICAgTkRfVENIRUNLMigqdHB0ciwgSVNJU19UTFZfQ0hFQ0tTVU1fTUlOTEVOKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBjaGVja3N1bTogMHglMDR4ICIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpKSk7CiAgICAgICAgICAgICAvKiBkbyBub3QgYXR0ZW1wdCB0byB2ZXJpZnkgdGhlIGNoZWNrc3VtIGlmIGl0IGlzIHplcm8KICAgICAgICAgICAgICAqIG1vc3QgbGlrZWx5IGEgSE1BQy1NRDUgVExWIGlzIGFsc28gcHJlc2VudCBhbmQKICAgICAgICAgICAgICAqIHRvIGF2b2lkIGNvbmZsaWN0cyB0aGUgY2hlY2tzdW0gVExWIGlzIHplcm9lZC4KICAgICAgICAgICAgICAqIHNlZSByZmMzMzU4IGZvciBkZXRhaWxzCiAgICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIG9zaV9wcmludF9ja3N1bShuZG8sIG9wdHIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpLCB0cHRyLW9wdHIsIGxlbmd0aCk7CisgICAgICAgICAgICBpZiAob3NpX3ByaW50X2Nrc3VtKG5kbywgb3B0ciwgRVhUUkFDVF8xNkJJVFModHB0ciksIHRwdHItb3B0ciwKKyAgICAgICAgICAgICAgICBsZW5ndGgpID09IDApCisgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CisJICAgIGJyZWFrOworCisJY2FzZSBJU0lTX1RMVl9QT0k6CisJICAgIGlmICh0bHZfbGVuID49IFNZU1RFTV9JRF9MRU4gKyAxKSB7CisJCU5EX1RDSEVDSzIoKnRwdHIsIFNZU1RFTV9JRF9MRU4gKyAxKTsKKwkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBQdXJnZSBPcmlnaW5hdG9yIFN5c3RlbS1JRDogJXMiLAorCQkgICAgICAgaXNpc19wcmludF9pZCh0cHRyICsgMSwgU1lTVEVNX0lEX0xFTikpKTsKKwkgICAgfQorCisJICAgIGlmICh0bHZfbGVuID09IDIgKiBTWVNURU1fSURfTEVOICsgMSkgeworCQlORF9UQ0hFQ0syKCp0cHRyLCAyICogU1lTVEVNX0lEX0xFTiArIDEpOworCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFJlY2VpdmVkIGZyb20gU3lzdGVtLUlEOiAlcyIsCisJCSAgICAgICBpc2lzX3ByaW50X2lkKHRwdHIgKyBTWVNURU1fSURfTEVOICsgMSwgU1lTVEVNX0lEX0xFTikpKTsKKwkgICAgfQogCSAgICBicmVhazsKIAogCWNhc2UgSVNJU19UTFZfTVRfU1VQUE9SVEVEOgpAQCAtMjg5OSw3ICsyOTM4LDcgQEAKICAgICAgICAgICAgICAgICAgICAgdHB0cis9bXRfbGVuOwogICAgICAgICAgICAgICAgICAgICB0bXAtPW10X2xlbjsKIAkJfSBlbHNlIHsKLQkJICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgbWFsZm9ybWVkIE1ULUlEIikpOworCQkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIE1ULUlEIikpOwogCQkgICAgYnJlYWs7CiAJCX0KIAkgICAgfQpAQCAtMjkwOSw4ICsyOTQ4LDcgQEAKICAgICAgICAgICAgIC8qIGZpcnN0IGF0dGVtcHQgdG8gZGVjb2RlIHRoZSBmbGFncyAqLwogICAgICAgICAgICAgaWYgKHRtcCA8IElTSVNfVExWX1JFU1RBUlRfU0lHTkFMSU5HX0ZMQUdMRU4pCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgSVNJU19UTFZfUkVTVEFSVF9TSUdOQUxJTkdfRkxBR0xFTikpCi0gICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKyAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIElTSVNfVExWX1JFU1RBUlRfU0lHTkFMSU5HX0ZMQUdMRU4pOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBGbGFncyBbJXNdIiwKICAgICAgICAgICAgICAgICAgICBiaXR0b2syc3RyKGlzaXNfcmVzdGFydF9mbGFnX3ZhbHVlcywgIm5vbmUiLCAqdHB0cikpKTsKICAgICAgICAgICAgIHRwdHIrPUlTSVNfVExWX1JFU1RBUlRfU0lHTkFMSU5HX0ZMQUdMRU47CkBAIC0yOTIyLDggKzI5NjAsNyBAQAogCiAgICAgICAgICAgICBpZiAodG1wIDwgSVNJU19UTFZfUkVTVEFSVF9TSUdOQUxJTkdfSE9MRFRJTUVMRU4pCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgSVNJU19UTFZfUkVTVEFSVF9TSUdOQUxJTkdfSE9MRFRJTUVMRU4pKQotICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBJU0lTX1RMVl9SRVNUQVJUX1NJR05BTElOR19IT0xEVElNRUxFTik7CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIFJlbWFpbmluZyBob2xkaW5nIHRpbWUgJXVzIiwgRVhUUkFDVF8xNkJJVFModHB0cikpKTsKICAgICAgICAgICAgIHRwdHIrPUlTSVNfVExWX1JFU1RBUlRfU0lHTkFMSU5HX0hPTERUSU1FTEVOOwpAQCAtMjkzMSw4ICsyOTY4LDcgQEAKIAogICAgICAgICAgICAgLyogaXMgdGhlcmUgYW4gYWRkaXRpb25hbCBzeXNpZCBmaWVsZCBwcmVzZW50ID8qLwogICAgICAgICAgICAgaWYgKHRtcCA9PSBTWVNURU1fSURfTEVOKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCBTWVNURU1fSURfTEVOKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBTWVNURU1fSURfTEVOKTsKICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgZm9yICVzIiwgaXNpc19wcmludF9pZCh0cHRyLFNZU1RFTV9JRF9MRU4pKSk7CiAgICAgICAgICAgICB9CiAJICAgIGJyZWFrOwpAQCAtMjk0MCwxNiArMjk3NiwxNCBAQAogICAgICAgICBjYXNlIElTSVNfVExWX0lEUlBfSU5GTzoKIAkgICAgaWYgKHRtcCA8IElTSVNfVExWX0lEUlBfSU5GT19NSU5MRU4pCiAJICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCBJU0lTX1RMVl9JRFJQX0lORk9fTUlOTEVOKSkKLSAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgSVNJU19UTFZfSURSUF9JTkZPX01JTkxFTik7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIEludGVyLURvbWFpbiBJbmZvcm1hdGlvbiBUeXBlOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihpc2lzX3N1YnRsdl9pZHJwX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duICgweCUwMngpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICp0cHRyKSkpOwogICAgICAgICAgICAgc3dpdGNoICgqdHB0cisrKSB7CiAgICAgICAgICAgICBjYXNlIElTSVNfU1VCVExWX0lEUlBfQVNOOgotICAgICAgICAgICAgICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCAyKSkgLyogZmV0Y2ggQVMgbnVtYmVyICovCi0gICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgMik7IC8qIGZldGNoIEFTIG51bWJlciAqLwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJBUyBOdW1iZXI6ICV1IiwgRVhUUkFDVF8xNkJJVFModHB0cikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgSVNJU19TVUJUTFZfSURSUF9MT0NBTDoKQEAgLTI5NjQsMTUgKzI5OTgsMTMgQEAKICAgICAgICAgY2FzZSBJU0lTX1RMVl9MU1BfQlVGRkVSU0laRToKIAkgICAgaWYgKHRtcCA8IElTSVNfVExWX0xTUF9CVUZGRVJTSVpFX01JTkxFTikKIAkgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIElTSVNfVExWX0xTUF9CVUZGRVJTSVpFX01JTkxFTikpCi0gICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKyAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIElTSVNfVExWX0xTUF9CVUZGRVJTSVpFX01JTkxFTik7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIExTUCBCdWZmZXJzaXplOiAldSIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIElTSVNfVExWX1BBUlRfRElTOgogICAgICAgICAgICAgd2hpbGUgKHRtcCA+PSBTWVNURU1fSURfTEVOKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIFNZU1RFTV9JRF9MRU4pKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIFNZU1RFTV9JRF9MRU4pOwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMiLCBpc2lzX3ByaW50X2lkKHRwdHIsIFNZU1RFTV9JRF9MRU4pKSk7CiAgICAgICAgICAgICAgICAgdHB0cis9U1lTVEVNX0lEX0xFTjsKICAgICAgICAgICAgICAgICB0bXAtPVNZU1RFTV9JRF9MRU47CkBAIC0yOTgyLDE2ICszMDE0LDE0IEBACiAgICAgICAgIGNhc2UgSVNJU19UTFZfUFJFRklYX05FSUdIOgogCSAgICBpZiAodG1wIDwgc2l6ZW9mKHN0cnVjdCBpc2lzX21ldHJpY19ibG9jaykpCiAJICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGlmICghTkRfVFRFU1QyKCp0cHRyLCBzaXplb2Yoc3RydWN0IGlzaXNfbWV0cmljX2Jsb2NrKSkpCi0gICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKyAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgaXNpc19tZXRyaWNfYmxvY2spKTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgTWV0cmljIEJsb2NrIikpOwogICAgICAgICAgICAgaXNpc19wcmludF9tZXRyaWNfYmxvY2sobmRvLCAoY29uc3Qgc3RydWN0IGlzaXNfbWV0cmljX2Jsb2NrICopdHB0cik7CiAgICAgICAgICAgICB0cHRyKz1zaXplb2Yoc3RydWN0IGlzaXNfbWV0cmljX2Jsb2NrKTsKICAgICAgICAgICAgIHRtcC09c2l6ZW9mKHN0cnVjdCBpc2lzX21ldHJpY19ibG9jayk7CiAKICAgICAgICAgICAgIHdoaWxlKHRtcD4wKSB7Ci0gICAgICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIDEpKQotICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIDEpOwogICAgICAgICAgICAgICAgIHByZWZpeF9sZW49KnRwdHIrKzsgLyogcmVhZCBvdXQgcHJlZml4IGxlbmd0aCBpbiBzZW1pb2N0ZXRzKi8KICAgICAgICAgICAgICAgICBpZiAocHJlZml4X2xlbiA8IDIpIHsKICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdEFkZHJlc3M6IHByZWZpeCBsZW5ndGggJXUgPCAyIiwgcHJlZml4X2xlbikpOwpAQCAtMzAwMCwxMCArMzAzMCw5IEBACiAgICAgICAgICAgICAgICAgdG1wLS07CiAgICAgICAgICAgICAgICAgaWYgKHRtcCA8IHByZWZpeF9sZW4vMikKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIHByZWZpeF9sZW4gLyAyKSkKLSAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuY3RsdjsKKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBwcmVmaXhfbGVuIC8gMik7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdEFkZHJlc3M6ICVzLyV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgaXNvbnNhcF9zdHJpbmcodHB0ciwgcHJlZml4X2xlbiAvIDIpLCBwcmVmaXhfbGVuICogNCkpOworICAgICAgICAgICAgICAgICAgICAgICBpc29uc2FwX3N0cmluZyhuZG8sIHRwdHIsIHByZWZpeF9sZW4gLyAyKSwgcHJlZml4X2xlbiAqIDQpKTsKICAgICAgICAgICAgICAgICB0cHRyKz1wcmVmaXhfbGVuLzI7CiAgICAgICAgICAgICAgICAgdG1wLT1wcmVmaXhfbGVuLzI7CiAgICAgICAgICAgICB9CkBAIC0zMDEyLDE2ICszMDQxLDE0IEBACiAgICAgICAgIGNhc2UgSVNJU19UTFZfSUlIX1NFUU5SOgogCSAgICBpZiAodG1wIDwgSVNJU19UTFZfSUlIX1NFUU5SX01JTkxFTikKIAkgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgaWYgKCFORF9UVEVTVDIoKnRwdHIsIElTSVNfVExWX0lJSF9TRVFOUl9NSU5MRU4pKSAvKiBjaGVjayBpZiBmb3VyIGJ5dGVzIGFyZSBvbiB0aGUgd2lyZSAqLwotICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmN0bHY7CisgICAgICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBJU0lTX1RMVl9JSUhfU0VRTlJfTUlOTEVOKTsgLyogY2hlY2sgaWYgZm91ciBieXRlcyBhcmUgb24gdGhlIHdpcmUgKi8KICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgU2VxdWVuY2UgbnVtYmVyOiAldSIsIEVYVFJBQ1RfMzJCSVRTKHRwdHIpKSk7CiAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICBjYXNlIElTSVNfVExWX1ZFTkRPUl9QUklWQVRFOgogCSAgICBpZiAodG1wIDwgSVNJU19UTFZfVkVORE9SX1BSSVZBVEVfTUlOTEVOKQogCSAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBpZiAoIU5EX1RURVNUMigqdHB0ciwgSVNJU19UTFZfVkVORE9SX1BSSVZBVEVfTUlOTEVOKSkgLyogY2hlY2sgaWYgZW5vdWdoIGJ5dGUgZm9yIGEgZnVsbCBvdWkgKi8KLSAgICAgICAgICAgICAgICBnb3RvIHRydW5jdGx2OworICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgSVNJU19UTFZfVkVORE9SX1BSSVZBVEVfTUlOTEVOKTsgLyogY2hlY2sgaWYgZW5vdWdoIGJ5dGUgZm9yIGEgZnVsbCBvdWkgKi8KICAgICAgICAgICAgIHZlbmRvcl9pZCA9IEVYVFJBQ1RfMjRCSVRTKHRwdHIpOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBWZW5kb3I6ICVzICgldSkiLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIob3VpX3ZhbHVlcywgIlVua25vd24iLCB2ZW5kb3JfaWQpLApAQCAtMzA2NiwxNSArMzA5MywxNiBAQAogICAgIHJldHVybiAoMSk7CiAKICB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiW3xpc2lzXSIpKTsKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7CiAgICAgcmV0dXJuICgxKTsKIAogIHRydW5jdGx2OgotICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQgcGFja2V0IGV4Y2VlZGVkIHNuYXBzaG90IikpOworICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQiKSk7CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogICAgIHJldHVybigxKTsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG9zaV9wcmludF9ja3N1bShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdWludDhfdCAqcHB0ciwKIAkgICAgICAgIHVpbnQxNl90IGNoZWNrc3VtLCBpbnQgY2hlY2tzdW1fb2Zmc2V0LCBpbnQgbGVuZ3RoKQogewpAQCAtMzA5MiwyMyArMzEyMCwyMiBAQAogICAgICAgICAgICAgfHwgY2hlY2tzdW1fb2Zmc2V0ID4gbmRvLT5uZG9fc25hcGxlbgogICAgICAgICAgICAgfHwgY2hlY2tzdW1fb2Zmc2V0ID4gbGVuZ3RoKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAodW52ZXJpZmllZCkiKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgY29uc3QgY2hhciAqdHJ1bmNhdGVkID0gInRydW5jIjsKICNpZiAwCiAgICAgICAgICAgICAgICAgcHJpbnRmKCJcbm9zaV9wcmludF9ja3N1bTogJXAgJXUgJXUgJXVcbiIsIHBwdHIsIGNoZWNrc3VtX29mZnNldCwgbGVuZ3RoLCBuZG8tPm5kb19zbmFwbGVuKTsKLSAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKHBwdHIsIGNoZWNrc3VtX29mZnNldCtsZW5ndGgpOwogI2VuZGlmCisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqcHB0ciwgbGVuZ3RoKTsKICAgICAgICAgICAgICAgICBjYWxjdWxhdGVkX2NoZWNrc3VtID0gY3JlYXRlX29zaV9ja3N1bShwcHRyLCBjaGVja3N1bV9vZmZzZXQsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgaWYgKGNoZWNrc3VtID09IGNhbGN1bGF0ZWRfY2hlY2tzdW0pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKGNvcnJlY3QpIikpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICB0cnVuY2F0ZWQgPSAiaW5jb3JyZWN0IjsKLSNpZiAwCi0gICAgICAgICAgICAgICAgICAgICAgICB0cnVuYzoKLSNlbmRpZgotICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAoJXMgc2hvdWxkIGJlIDB4JTA0eCkiLCB0cnVuY2F0ZWQsIGNhbGN1bGF0ZWRfY2hlY2tzdW0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgKGluY29ycmVjdCBzaG91bGQgYmUgMHglMDR4KSIsIGNhbGN1bGF0ZWRfY2hlY2tzdW0pKTsKICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgIH0KK3RydW5jOgorICAgICAgICByZXR1cm4gMDsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3ByaW50LWp1bmlwZXIuYyBiL3ByaW50LWp1bmlwZXIuYwppbmRleCBlNGJiNzdjLi44M2FjMzcyIDEwMDY0NAotLS0gYS9wcmludC1qdW5pcGVyLmMKKysrIGIvcHJpbnQtanVuaXBlci5jCkBAIC0xNSwxOSArMTUsMjIgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCisvKiBcc3VtbWFyeTogRExUX0pVTklQRVJfKiBwcmludGVycyAqLworCiAjaWZuZGVmIGxpbnQKICNlbHNlCiBfX1JDU0lEKCJOZXRCU0Q6IHByaW50LWp1bmlwZXIuYyx2IDEuMyAyMDA3LzA3LzI1IDA2OjMxOjMyIGRvZ2NvdyBFeHAgIik7CiAjZW5kaWYKIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgInBwcC5oIgpAQCAtODksNyArOTIsNyBAQAogfTsKIAogLyogMSBieXRlIHR5cGUgYW5kIDEtYnl0ZSBsZW5ndGggKi8KLSNkZWZpbmUgSlVOSVBFUl9FWFRfVExWX09WRVJIRUFEIDIKKyNkZWZpbmUgSlVOSVBFUl9FWFRfVExWX09WRVJIRUFEIDJVCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGpueF9leHRfdGx2X3ZhbHVlc1tdID0gewogICAgIHsgSlVOSVBFUl9FWFRfVExWX0lGRF9JRFgsICJEZXZpY2UgSW50ZXJmYWNlIEluZGV4IiB9LApAQCAtNTE0LDcgKzUxNyw3IEBACiAgICAgICAgICAgICByZXR1cm4gbDJpbmZvLmhlYWRlcl9sZW47CiAKICAgICAgICAgcCs9bDJpbmZvLmhlYWRlcl9sZW47Ci0gICAgICAgIGloID0gKHN0cnVjdCBqdW5pcGVyX2lwc2VjX2hlYWRlciAqKXA7CisgICAgICAgIGloID0gKGNvbnN0IHN0cnVjdCBqdW5pcGVyX2lwc2VjX2hlYWRlciAqKXA7CiAKICAgICAgICAgc3dpdGNoIChpaC0+dHlwZSkgewogICAgICAgICBjYXNlIEpVTklQRVJfSVBTRUNfT19FU1BfRU5DUllQVF9FU1BfQVVUSEVOX1RZUEU6CkBAIC01ODMsNyArNTg2LDcgQEAKICAgICAgICAgICAgIHJldHVybiBsMmluZm8uaGVhZGVyX2xlbjsKIAogICAgICAgICBwKz1sMmluZm8uaGVhZGVyX2xlbjsKLSAgICAgICAgbWggPSAoc3RydWN0IGp1bmlwZXJfbW9uaXRvcl9oZWFkZXIgKilwOworICAgICAgICBtaCA9IChjb25zdCBzdHJ1Y3QganVuaXBlcl9tb25pdG9yX2hlYWRlciAqKXA7CiAKICAgICAgICAgaWYgKG5kby0+bmRvX2VmbGFnKQogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgInNlcnZpY2UtaWQgJXUsIGlpZiAldSwgcGt0LXR5cGUgJXU6ICIsCkBAIC02MTcsNyArNjIwLDcgQEAKICAgICAgICAgICAgIHJldHVybiBsMmluZm8uaGVhZGVyX2xlbjsKIAogICAgICAgICBwKz1sMmluZm8uaGVhZGVyX2xlbjsKLSAgICAgICAgc2ggPSAoc3RydWN0IGp1bmlwZXJfc2VydmljZXNfaGVhZGVyICopcDsKKyAgICAgICAgc2ggPSAoY29uc3Qgc3RydWN0IGp1bmlwZXJfc2VydmljZXNfaGVhZGVyICopcDsKIAogICAgICAgICBpZiAobmRvLT5uZG9fZWZsYWcpCiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAic2VydmljZS1pZCAldSBmbGFncyAweCUwMnggc2VydmljZS1zZXQtaWQgMHglMDR4IGlpZiAldTogIiwKQEAgLTc0Myw3ICs3NDYsOCBAQAogICAgICAgICBpZiAoZXRoZXJ0eXBlX3ByaW50KG5kbywgZXh0cmFjdGVkX2V0aGVydHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHArRVRIRVJUWVBFX0xFTiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwyaW5mby5sZW5ndGgtRVRIRVJUWVBFX0xFTiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwyaW5mby5jYXBsZW4tRVRIRVJUWVBFX0xFTikgPT0gMCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGwyaW5mby5jYXBsZW4tRVRIRVJUWVBFX0xFTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5VTEwsIE5VTEwpID09IDApCiAgICAgICAgICAgICAvKiBldGhlcl90eXBlIG5vdCBrbm93biwgcHJvYmFibHkgaXQgd2Fzbid0IG9uZSAqLwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgInVua25vd24gZXRoZXJ0eXBlIDB4JTA0eCIsIGV4dHJhY3RlZF9ldGhlcnR5cGUpKTsKIApAQCAtODE4LDYgKzgyMiw3IEBACiB7CiAgICAgICAgIHN0cnVjdCBqdW5pcGVyX2wyaW5mb190IGwyaW5mbzsKIAorICAgICAgICBtZW1zZXQoJmwyaW5mbywgMCwgc2l6ZW9mKGwyaW5mbykpOwogICAgICAgICBsMmluZm8ucGljdHlwZSA9IERMVF9KVU5JUEVSX01GUjsKICAgICAgICAgaWYgKGp1bmlwZXJfcGFyc2VfaGVhZGVyKG5kbywgcCwgaCwgJmwyaW5mbykgPT0gMCkKICAgICAgICAgICAgIHJldHVybiBsMmluZm8uaGVhZGVyX2xlbjsKQEAgLTkyMCw3ICs5MjUsNyBAQAoganVuaXBlcl9hdG0xX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpwKQogewotICAgICAgICB1aW50MTZfdCBleHRyYWN0ZWRfZXRoZXJ0eXBlOworICAgICAgICBpbnQgbGxjX2hkcmxlbjsKIAogICAgICAgICBzdHJ1Y3QganVuaXBlcl9sMmluZm9fdCBsMmluZm87CiAKQEAgLTkzOCw4ICs5NDMsOCBAQAogICAgICAgICBpZiAoRVhUUkFDVF8yNEJJVFMocCkgPT0gMHhmZWZlMDMgfHwgLyogTkxQSUQgZW5jYXBzID8gKi8KICAgICAgICAgICAgIEVYVFJBQ1RfMjRCSVRTKHApID09IDB4YWFhYTAzKSB7IC8qIFNOQVAgZW5jYXBzID8gKi8KIAotICAgICAgICAgICAgaWYgKGxsY19wcmludChuZG8sIHAsIGwyaW5mby5sZW5ndGgsIGwyaW5mby5jYXBsZW4sIE5VTEwsIE5VTEwsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICZleHRyYWN0ZWRfZXRoZXJ0eXBlKSAhPSAwKQorICAgICAgICAgICAgbGxjX2hkcmxlbiA9IGxsY19wcmludChuZG8sIHAsIGwyaW5mby5sZW5ndGgsIGwyaW5mby5jYXBsZW4sIE5VTEwsIE5VTEwpOworICAgICAgICAgICAgaWYgKGxsY19oZHJsZW4gPiAwKQogICAgICAgICAgICAgICAgIHJldHVybiBsMmluZm8uaGVhZGVyX2xlbjsKICAgICAgICAgfQogCkBAIC05NjksNyArOTc0LDcgQEAKIGp1bmlwZXJfYXRtMl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmgsIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcCkKIHsKLSAgICAgICAgdWludDE2X3QgZXh0cmFjdGVkX2V0aGVydHlwZTsKKyAgICAgICAgaW50IGxsY19oZHJsZW47CiAKICAgICAgICAgc3RydWN0IGp1bmlwZXJfbDJpbmZvX3QgbDJpbmZvOwogCkBAIC05ODcsOCArOTkyLDggQEAKICAgICAgICAgaWYgKEVYVFJBQ1RfMjRCSVRTKHApID09IDB4ZmVmZTAzIHx8IC8qIE5MUElEIGVuY2FwcyA/ICovCiAgICAgICAgICAgICBFWFRSQUNUXzI0QklUUyhwKSA9PSAweGFhYWEwMykgeyAvKiBTTkFQIGVuY2FwcyA/ICovCiAKLSAgICAgICAgICAgIGlmIChsbGNfcHJpbnQobmRvLCBwLCBsMmluZm8ubGVuZ3RoLCBsMmluZm8uY2FwbGVuLCBOVUxMLCBOVUxMLAotICAgICAgICAgICAgICAgICAgICAgICAgICAmZXh0cmFjdGVkX2V0aGVydHlwZSkgIT0gMCkKKyAgICAgICAgICAgIGxsY19oZHJsZW4gPSBsbGNfcHJpbnQobmRvLCBwLCBsMmluZm8ubGVuZ3RoLCBsMmluZm8uY2FwbGVuLCBOVUxMLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChsbGNfaGRybGVuID4gMCkKICAgICAgICAgICAgICAgICByZXR1cm4gbDJpbmZvLmhlYWRlcl9sZW47CiAgICAgICAgIH0KIApAQCAtMTAzMywxMCArMTAzOCw4IEBACiAgICAgY2FzZSBQUFBfUEFQIDoKICAgICBjYXNlIFBQUF9DSEFQIDoKICAgICBjYXNlIFBQUF9NTCA6Ci0jaWZkZWYgSU5FVDYKICAgICBjYXNlIFBQUF9JUFY2IDoKICAgICBjYXNlIFBQUF9JUFY2Q1AgOgotI2VuZGlmCiAgICAgICAgIHBwcF9wcmludChuZG8sIHAsIGxlbmd0aCk7CiAgICAgICAgIGJyZWFrOwogCkBAIC0xMjAwLDkgKzEyMDMsMTEgQEAKICAgICAgICAgICAgIHRsdl9sZW4gPSAqKHRwdHIrKyk7CiAgICAgICAgICAgICB0bHZfdmFsdWUgPSAwOwogCi0gICAgICAgICAgICAvKiBzYW5pdHkgY2hlY2sgKi8KKyAgICAgICAgICAgIC8qIHNhbml0eSBjaGVja3MgKi8KICAgICAgICAgICAgIGlmICh0bHZfdHlwZSA9PSAwIHx8IHRsdl9sZW4gPT0gMCkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGlmICh0bHZfbGVuK0pVTklQRVJfRVhUX1RMVl9PVkVSSEVBRCA+IGpueF9leHRfbGVuKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAKICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZyA+IDEpCiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICVzIEV4dGVuc2lvbiBUTFYgIyV1LCBsZW5ndGggJXUsIHZhbHVlICIsCmRpZmYgLS1naXQgYS9wcmludC1rcmIuYyBiL3ByaW50LWtyYi5jCmluZGV4IDJlZWJmYTYuLmRlNjkwNTQgMTAwNjQ0Ci0tLSBhL3ByaW50LWtyYi5jCisrKyBiL3ByaW50LWtyYi5jCkBAIC0yMSwxNCArMjEsMTUgQEAKICAqIEluaXRpYWwgY29udHJpYnV0aW9uIGZyb20gSm9obiBIYXdraW5zb24gKGpoYXdrQG1pdC5lZHUpLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IEtlcmJlcm9zIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfGtlcmJlcm9zXSI7CkBAIC0xNTYsNyArMTU3LDcgQEAKICNkZWZpbmUgSVNfTEVORElBTihrcCkJKCgoa3ApLT50eXBlICYgMHgwMSkgIT0gMCkKICNkZWZpbmUgS1RPSFNQKGtwLCBjcCkJKElTX0xFTkRJQU4oa3ApID8gRVhUUkFDVF9MRV8xNkJJVFMoY3ApIDogRVhUUkFDVF8xNkJJVFMoY3ApKQogCi0Ja3AgPSAoc3RydWN0IGtyYiAqKWNwOworCWtwID0gKGNvbnN0IHN0cnVjdCBrcmIgKiljcDsKIAogCWlmICgoJmtwLT50eXBlKSA+PSBuZG8tPm5kb19zbmFwZW5kKSB7CiAJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKQEAgLTIyNyw3ICsyMjgsNyBAQAogewogCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBrcmIgKmtwOwogCi0Ja3AgPSAoc3RydWN0IGtyYiAqKWRhdDsKKwlrcCA9IChjb25zdCBzdHJ1Y3Qga3JiICopZGF0OwogCiAJaWYgKGRhdCA+PSBuZG8tPm5kb19zbmFwZW5kKSB7CiAJCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKZGlmZiAtLWdpdCBhL3ByaW50LWwydHAuYyBiL3ByaW50LWwydHAuYwppbmRleCAzNDZkYWU5Li40MmFlMzkxIDEwMDY0NAotLS0gYS9wcmludC1sMnRwLmMKKysrIGIvcHJpbnQtbDJ0cC5jCkBAIC0yMSwxNCArMjEsMTUgQEAKICAqIEwyVFAgc3VwcG9ydCBjb250cmlidXRlZCBieSBNb3Rvbm9yaSBTaGluZG8gKG1zaGluZG9AbXNoaW5kby5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTGF5ZXIgVHdvIFR1bm5lbGluZyBQcm90b2NvbCAoTDJUUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjZGVmaW5lIEwyVFBfRkxBR19UWVBFCQkweDgwMDAJLyogVHlwZSAoMD1EYXRhLCAxPUNvbnRyb2wpICovCkBAIC0yOTgsNyArMjk5LDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX21zZ3R5cGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXVpbnQxNl90ICpwdHIgPSAodWludDE2X3QqKWRhdDsKKwljb25zdCB1aW50MTZfdCAqcHRyID0gKGNvbnN0IHVpbnQxNl90ICopZGF0OwogCiAJTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihsMnRwX21zZ3R5cGUyc3RyLCAiTVNHVFlQRS0jJXUiLAogCSAgICBFWFRSQUNUXzE2QklUUyhwdHIpKSkpOwpAQCAtMzA3LDcgKzMwOCw3IEBACiBzdGF0aWMgdm9pZAogbDJ0cF9yZXN1bHRfY29kZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKIHsKLQl1aW50MTZfdCAqcHRyID0gKHVpbnQxNl90ICopZGF0OworCWNvbnN0IHVpbnQxNl90ICpwdHIgPSAoY29uc3QgdWludDE2X3QgKilkYXQ7CiAKIAlORF9QUklOVCgobmRvLCAiJXUiLCBFWFRSQUNUXzE2QklUUyhwdHIpKSk7IHB0cisrOwkvKiBSZXN1bHQgQ29kZSAqLwogCWlmIChsZW5ndGggPiAyKSB7CQkJCS8qIEVycm9yIENvZGUgKG9wdCkgKi8KQEAgLTMxNSw3ICszMTYsNyBAQAogCX0KIAlpZiAobGVuZ3RoID4gNCkgewkJCQkvKiBFcnJvciBNZXNzYWdlIChvcHQpICovCiAJCU5EX1BSSU5UKChuZG8sICIgIikpOwotCQlwcmludF9zdHJpbmcobmRvLCAodV9jaGFyICopcHRyLCBsZW5ndGggLSA0KTsKKwkJcHJpbnRfc3RyaW5nKG5kbywgKGNvbnN0IHVfY2hhciAqKXB0ciwgbGVuZ3RoIC0gNCk7CiAJfQogfQogCkBAIC0zMjksNyArMzMwLDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX2ZyYW1pbmdfY2FwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQl1aW50MzJfdCAqcHRyID0gKHVpbnQzMl90ICopZGF0OworCWNvbnN0IHVpbnQzMl90ICpwdHIgPSAoY29uc3QgdWludDMyX3QgKilkYXQ7CiAKIAlpZiAoRVhUUkFDVF8zMkJJVFMocHRyKSAmICBMMlRQX0ZSQU1JTkdfQ0FQX0FTWU5DX01BU0spIHsKIAkJTkRfUFJJTlQoKG5kbywgIkEiKSk7CkBAIC0zNDIsNyArMzQzLDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX2JlYXJlcl9jYXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXVpbnQzMl90ICpwdHIgPSAodWludDMyX3QgKilkYXQ7CisJY29uc3QgdWludDMyX3QgKnB0ciA9IChjb25zdCB1aW50MzJfdCAqKWRhdDsKIAogCWlmIChFWFRSQUNUXzMyQklUUyhwdHIpICYgIEwyVFBfQkVBUkVSX0NBUF9BTkFMT0dfTUFTSykgewogCQlORF9QUklOVCgobmRvLCAiQSIpKTsKQEAgLTM1NSw3ICszNTYsNyBAQAogc3RhdGljIHZvaWQKIGwydHBfcTkzMV9jY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKIHsKLQlwcmludF8xNmJpdHNfdmFsKG5kbywgKHVpbnQxNl90ICopZGF0KTsKKwlwcmludF8xNmJpdHNfdmFsKG5kbywgKGNvbnN0IHVpbnQxNl90ICopZGF0KTsKIAlORF9QUklOVCgobmRvLCAiLCAlMDJ4IiwgZGF0WzJdKSk7CiAJaWYgKGxlbmd0aCA+IDMpIHsKIAkJTkRfUFJJTlQoKG5kbywgIiAiKSk7CkBAIC0zNjYsNyArMzY3LDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX2JlYXJlcl90eXBlX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQl1aW50MzJfdCAqcHRyID0gKHVpbnQzMl90ICopZGF0OworCWNvbnN0IHVpbnQzMl90ICpwdHIgPSAoY29uc3QgdWludDMyX3QgKilkYXQ7CiAKIAlpZiAoRVhUUkFDVF8zMkJJVFMocHRyKSAmICBMMlRQX0JFQVJFUl9UWVBFX0FOQUxPR19NQVNLKSB7CiAJCU5EX1BSSU5UKChuZG8sICJBIikpOwpAQCAtMzc5LDcgKzM4MCw3IEBACiBzdGF0aWMgdm9pZAogbDJ0cF9mcmFtaW5nX3R5cGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXVpbnQzMl90ICpwdHIgPSAodWludDMyX3QgKilkYXQ7CisJY29uc3QgdWludDMyX3QgKnB0ciA9IChjb25zdCB1aW50MzJfdCAqKWRhdDsKIAogCWlmIChFWFRSQUNUXzMyQklUUyhwdHIpICYgIEwyVFBfRlJBTUlOR19UWVBFX0FTWU5DX01BU0spIHsKIAkJTkRfUFJJTlQoKG5kbywgIkEiKSk7CkBAIC0zOTgsNyArMzk5LDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX3Byb3h5X2F1dGhfdHlwZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0JdWludDE2X3QgKnB0ciA9ICh1aW50MTZfdCAqKWRhdDsKKwljb25zdCB1aW50MTZfdCAqcHRyID0gKGNvbnN0IHVpbnQxNl90ICopZGF0OwogCiAJTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihsMnRwX2F1dGhlbnR5cGUyc3RyLAogCQkJICAgICAiQXV0aFR5cGUtIyV1IiwgRVhUUkFDVF8xNkJJVFMocHRyKSkpKTsKQEAgLTQwNyw3ICs0MDgsNyBAQAogc3RhdGljIHZvaWQKIGwydHBfcHJveHlfYXV0aF9pZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0JdWludDE2X3QgKnB0ciA9ICh1aW50MTZfdCAqKWRhdDsKKwljb25zdCB1aW50MTZfdCAqcHRyID0gKGNvbnN0IHVpbnQxNl90ICopZGF0OwogCiAJTkRfUFJJTlQoKG5kbywgIiV1IiwgRVhUUkFDVF8xNkJJVFMocHRyKSAmIEwyVFBfUFJPWFlfQVVUSF9JRF9NQVNLKSk7CiB9CkBAIC00MTUsNyArNDE2LDcgQEAKIHN0YXRpYyB2b2lkCiBsMnRwX2NhbGxfZXJyb3JzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQl1aW50MTZfdCAqcHRyID0gKHVpbnQxNl90ICopZGF0OworCWNvbnN0IHVpbnQxNl90ICpwdHIgPSAoY29uc3QgdWludDE2X3QgKilkYXQ7CiAJdWludDE2X3QgdmFsX2gsIHZhbF9sOwogCiAJcHRyKys7CQkvKiBza2lwICJSZXNlcnZlZCIgKi8KQEAgLTQ0OCw3ICs0NDksNyBAQAogc3RhdGljIHZvaWQKIGwydHBfYWNjbV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0JdWludDE2X3QgKnB0ciA9ICh1aW50MTZfdCAqKWRhdDsKKwljb25zdCB1aW50MTZfdCAqcHRyID0gKGNvbnN0IHVpbnQxNl90ICopZGF0OwogCXVpbnQxNl90IHZhbF9oLCB2YWxfbDsKIAogCXB0cisrOwkJLyogc2tpcCAiUmVzZXJ2ZWQiICovCkBAIC00NjUsMTIgKzQ2NiwxMiBAQAogc3RhdGljIHZvaWQKIGwydHBfcHBwX2Rpc2Nvbl9jY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIHVfaW50IGxlbmd0aCkKIHsKLQl1aW50MTZfdCAqcHRyID0gKHVpbnQxNl90ICopZGF0OworCWNvbnN0IHVpbnQxNl90ICpwdHIgPSAoY29uc3QgdWludDE2X3QgKilkYXQ7CiAKIAlORF9QUklOVCgobmRvLCAiJTA0eCwgIiwgRVhUUkFDVF8xNkJJVFMocHRyKSkpOyBwdHIrKzsJLyogRGlzY29ubmVjdCBDb2RlICovCiAJTkRfUFJJTlQoKG5kbywgIiUwNHggIiwgIEVYVFJBQ1RfMTZCSVRTKHB0cikpKTsgcHRyKys7CS8qIENvbnRyb2wgUHJvdG9jb2wgTnVtYmVyICovCiAJTkRfUFJJTlQoKG5kbywgIiVzIiwgdG9rMnN0cihsMnRwX2NjX2RpcmVjdGlvbjJzdHIsCi0JCQkgICAgICJEaXJlY3Rpb24tIyV1IiwgKigodV9jaGFyICopcHRyKyspKSkpOworCQkJICAgICAiRGlyZWN0aW9uLSMldSIsICooKGNvbnN0IHVfY2hhciAqKXB0cisrKSkpKTsKIAogCWlmIChsZW5ndGggPiA1KSB7CiAJCU5EX1BSSU5UKChuZG8sICIgIikpOwpAQCAtNDgyLDcgKzQ4Myw3IEBACiBsMnRwX2F2cF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpkYXQsIGludCBsZW5ndGgpCiB7CiAJdV9pbnQgbGVuOwotCWNvbnN0IHVpbnQxNl90ICpwdHIgPSAodWludDE2X3QgKilkYXQ7CisJY29uc3QgdWludDE2X3QgKnB0ciA9IChjb25zdCB1aW50MTZfdCAqKWRhdDsKIAl1aW50MTZfdCBhdHRyX3R5cGU7CiAJaW50IGhpZGRlbiA9IEZBTFNFOwogCkBAIC01MjMsNyArNTI0LDcgQEAKIAkgICAgICAgIE5EX1BSSU5UKChuZG8sICJWRU5ET1IlMDR4OiIsIEVYVFJBQ1RfMTZCSVRTKHB0cikpKTsgcHRyKys7CiAJCU5EX1BSSU5UKChuZG8sICJBVFRSJTA0eCIsIEVYVFJBQ1RfMTZCSVRTKHB0cikpKTsgcHRyKys7CiAJCU5EX1BSSU5UKChuZG8sICIoIikpOwotCQlwcmludF9vY3RldHMobmRvLCAodV9jaGFyICopcHRyLCBsZW4tNik7CisJCXByaW50X29jdGV0cyhuZG8sIChjb25zdCB1X2NoYXIgKilwdHIsIGxlbi02KTsKIAkJTkRfUFJJTlQoKG5kbywgIikiKSk7CiAJfSBlbHNlIHsKIAkJLyogSUVURi1kZWZpbmVkIEF0dHJpYnV0ZXMgKi8KQEAgLTUzNiwyMiArNTM3LDIyIEBACiAJCX0gZWxzZSB7CiAJCQlzd2l0Y2ggKGF0dHJfdHlwZSkgewogCQkJY2FzZSBMMlRQX0FWUF9NU0dUWVBFOgotCQkJCWwydHBfbXNndHlwZV9wcmludChuZG8sICh1X2NoYXIgKilwdHIpOworCQkJCWwydHBfbXNndHlwZV9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKilwdHIpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBMMlRQX0FWUF9SRVNVTFRfQ09ERToKLQkJCQlsMnRwX3Jlc3VsdF9jb2RlX3ByaW50KG5kbywgKHVfY2hhciAqKXB0ciwgbGVuLTYpOworCQkJCWwydHBfcmVzdWx0X2NvZGVfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcHRyLCBsZW4tNik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX1BST1RPX1ZFUjoKIAkJCQlsMnRwX3Byb3RvX3Zlcl9wcmludChuZG8sIHB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX0ZSQU1JTkdfQ0FQOgotCQkJCWwydHBfZnJhbWluZ19jYXBfcHJpbnQobmRvLCAodV9jaGFyICopcHRyKTsKKwkJCQlsMnRwX2ZyYW1pbmdfY2FwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX0JFQVJFUl9DQVA6Ci0JCQkJbDJ0cF9iZWFyZXJfY2FwX3ByaW50KG5kbywgKHVfY2hhciAqKXB0cik7CisJCQkJbDJ0cF9iZWFyZXJfY2FwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX1RJRV9CUkVBS0VSOgotCQkJCXByaW50X29jdGV0cyhuZG8sICh1X2NoYXIgKilwdHIsIDgpOworCQkJCXByaW50X29jdGV0cyhuZG8sIChjb25zdCB1X2NoYXIgKilwdHIsIDgpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBMMlRQX0FWUF9GSVJNX1ZFUjoKIAkJCWNhc2UgTDJUUF9BVlBfQVNTTkRfVFVOX0lEOgpAQCAtNTY2LDcgKzU2Nyw3IEBACiAJCQljYXNlIEwyVFBfQVZQX1NVQl9BRERSRVNTOgogCQkJY2FzZSBMMlRQX0FWUF9QUk9YWV9BVVRIX05BTUU6CiAJCQljYXNlIEwyVFBfQVZQX1BSSVZBVEVfR1JQX0lEOgotCQkJCXByaW50X3N0cmluZyhuZG8sICh1X2NoYXIgKilwdHIsIGxlbi02KTsKKwkJCQlwcmludF9zdHJpbmcobmRvLCAoY29uc3QgdV9jaGFyICopcHRyLCBsZW4tNik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX0NIQUxMRU5HRToKIAkJCWNhc2UgTDJUUF9BVlBfSU5JX1JFQ1ZfTENQOgpAQCAtNTc1LDEzICs1NzYsMTMgQEAKIAkJCWNhc2UgTDJUUF9BVlBfUFJPWFlfQVVUSF9DSEFMOgogCQkJY2FzZSBMMlRQX0FWUF9QUk9YWV9BVVRIX1JFU1A6CiAJCQljYXNlIEwyVFBfQVZQX1JBTkRPTV9WRUNUT1I6Ci0JCQkJcHJpbnRfb2N0ZXRzKG5kbywgKHVfY2hhciAqKXB0ciwgbGVuLTYpOworCQkJCXByaW50X29jdGV0cyhuZG8sIChjb25zdCB1X2NoYXIgKilwdHIsIGxlbi02KTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfUTkzMV9DQzoKLQkJCQlsMnRwX3E5MzFfY2NfcHJpbnQobmRvLCAodV9jaGFyICopcHRyLCBsZW4tNik7CisJCQkJbDJ0cF9xOTMxX2NjX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0ciwgbGVuLTYpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBMMlRQX0FWUF9DSEFMTEVOR0VfUkVTUDoKLQkJCQlwcmludF9vY3RldHMobmRvLCAodV9jaGFyICopcHRyLCAxNik7CisJCQkJcHJpbnRfb2N0ZXRzKG5kbywgKGNvbnN0IHVfY2hhciAqKXB0ciwgMTYpOwogCQkJCWJyZWFrOwogCQkJY2FzZSBMMlRQX0FWUF9DQUxMX1NFUl9OVU06CiAJCQljYXNlIEwyVFBfQVZQX01JTklNVU1fQlBTOgpAQCAtNTg5LDMzICs1OTAsMzMgQEAKIAkJCWNhc2UgTDJUUF9BVlBfVFhfQ09OTl9TUEVFRDoKIAkJCWNhc2UgTDJUUF9BVlBfUEhZX0NIQU5ORUxfSUQ6CiAJCQljYXNlIEwyVFBfQVZQX1JYX0NPTk5fU1BFRUQ6Ci0JCQkJcHJpbnRfMzJiaXRzX3ZhbChuZG8sICh1aW50MzJfdCAqKXB0cik7CisJCQkJcHJpbnRfMzJiaXRzX3ZhbChuZG8sIChjb25zdCB1aW50MzJfdCAqKXB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX0JFQVJFUl9UWVBFOgotCQkJCWwydHBfYmVhcmVyX3R5cGVfcHJpbnQobmRvLCAodV9jaGFyICopcHRyKTsKKwkJCQlsMnRwX2JlYXJlcl90eXBlX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX0ZSQU1JTkdfVFlQRToKLQkJCQlsMnRwX2ZyYW1pbmdfdHlwZV9wcmludChuZG8sICh1X2NoYXIgKilwdHIpOworCQkJCWwydHBfZnJhbWluZ190eXBlX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0cik7CiAJCQkJYnJlYWs7CiAJCQljYXNlIEwyVFBfQVZQX1BBQ0tFVF9QUk9DX0RFTEFZOgogCQkJCWwydHBfcGFja2V0X3Byb2NfZGVsYXlfcHJpbnQobmRvKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfUFJPWFlfQVVUSF9UWVBFOgotCQkJCWwydHBfcHJveHlfYXV0aF90eXBlX3ByaW50KG5kbywgKHVfY2hhciAqKXB0cik7CisJCQkJbDJ0cF9wcm94eV9hdXRoX3R5cGVfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcHRyKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfUFJPWFlfQVVUSF9JRDoKLQkJCQlsMnRwX3Byb3h5X2F1dGhfaWRfcHJpbnQobmRvLCAodV9jaGFyICopcHRyKTsKKwkJCQlsMnRwX3Byb3h5X2F1dGhfaWRfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcHRyKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfQ0FMTF9FUlJPUlM6Ci0JCQkJbDJ0cF9jYWxsX2Vycm9yc19wcmludChuZG8sICh1X2NoYXIgKilwdHIpOworCQkJCWwydHBfY2FsbF9lcnJvcnNfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcHRyKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfQUNDTToKLQkJCQlsMnRwX2FjY21fcHJpbnQobmRvLCAodV9jaGFyICopcHRyKTsKKwkJCQlsMnRwX2FjY21fcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcHRyKTsKIAkJCQlicmVhazsKIAkJCWNhc2UgTDJUUF9BVlBfU0VRX1JFUVVJUkVEOgogCQkJCWJyZWFrOwkvKiBObyBBdHRyaWJ1dGUgVmFsdWUgKi8KIAkJCWNhc2UgTDJUUF9BVlBfUFBQX0RJU0NPTl9DQzoKLQkJCQlsMnRwX3BwcF9kaXNjb25fY2NfcHJpbnQobmRvLCAodV9jaGFyICopcHRyLCBsZW4tNik7CisJCQkJbDJ0cF9wcHBfZGlzY29uX2NjX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXB0ciwgbGVuLTYpOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCQlicmVhazsKZGlmZiAtLWdpdCBhL3ByaW50LWxhbmUuYyBiL3ByaW50LWxhbmUuYwppbmRleCBjMWUwYjJlLi5iYTUyMDg0IDEwMDY0NAotLS0gYS9wcmludC1sYW5lLmMKKysrIGIvcHJpbnQtbGFuZS5jCkBAIC0yMCwxNCArMjAsMTUgQEAKICAqCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQVRNIExBTkUgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImV0aGVyLmgiCiAKQEAgLTgyLDE0ICs4MywxNCBAQAogdm9pZAogbGFuZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbikKIHsKLQlzdHJ1Y3QgbGFuZV9jb250cm9saGRyICpsZWM7CisJY29uc3Qgc3RydWN0IGxhbmVfY29udHJvbGhkciAqbGVjOwogCiAJaWYgKGNhcGxlbiA8IHNpemVvZihzdHJ1Y3QgbGFuZV9jb250cm9saGRyKSkgewogCQlORF9QUklOVCgobmRvLCAiW3xsYW5lXSIpKTsKIAkJcmV0dXJuOwogCX0KIAotCWxlYyA9IChzdHJ1Y3QgbGFuZV9jb250cm9saGRyICopcDsKKwlsZWMgPSAoY29uc3Qgc3RydWN0IGxhbmVfY29udHJvbGhkciAqKXA7CiAJaWYgKEVYVFJBQ1RfMTZCSVRTKCZsZWMtPmxlY19oZWFkZXIpID09IDB4ZmYwMCkgewogCQkvKgogCQkgKiBMRSBDb250cm9sLgpkaWZmIC0tZ2l0IGEvcHJpbnQtbGRwLmMgYi9wcmludC1sZHAuYwppbmRleCAzZjc0MWQxLi40MGM5ZDhjIDEwMDY0NAotLS0gYS9wcmludC1sZHAuYworKysgYi9wcmludC1sZHAuYwpAQCAtMTQsMTQgKzE0LDE1IEBACiAgKiAgYW5kIFN0ZWluYXIgSGF1ZyAoc3RoYXVnQG5ldGhlbHAubm8pCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTGFiZWwgRGlzdHJpYnV0aW9uIFByb3RvY29sIChMRFApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKQEAgLTI4NCwxMiArMjg1LDEwIEBACiAgICAgICAgIFRMVl9UQ0hFQ0soNCk7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgSVB2NCBUcmFuc3BvcnQgQWRkcmVzczogJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgdHB0cikpKTsKICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKICAgICBjYXNlIExEUF9UTFZfSVBWNl9UUkFOU1BPUlRfQUREUjoKICAgICAgICAgVExWX1RDSEVDSygxNik7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgSVB2NiBUcmFuc3BvcnQgQWRkcmVzczogJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sIHRwdHIpKSk7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBMRFBfVExWX0NPTkZJR19TRVFfTlVNQkVSOgogICAgICAgICBUTFZfVENIRUNLKDQpOwogICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFNlcXVlbmNlIE51bWJlcjogJXUiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOwpAQCAtMzExLDcgKzMxMCw2IEBACiAJCXRwdHIrPXNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJICAgIH0KICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgIGNhc2UgQUZOVU1fSU5FVDY6CiAJICAgIHdoaWxlKHRsdl90bGVuID49IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CiAJCU5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKQEAgLTMyMCw3ICszMTgsNiBAQAogCQl0cHRyKz1zaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKIAkgICAgfQogICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIC8qIHVua25vd24gQUYgKi8KICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzY1LDcgKzM2Miw2IEBACiAJCWVsc2UKIAkJICAgIE5EX1BSSU5UKChuZG8sICI6IElQdjQgcHJlZml4ICVzIiwgYnVmKSk7CiAJICAgIH0KLSNpZmRlZiBJTkVUNgogCSAgICBlbHNlIGlmIChhZiA9PSBBRk5VTV9JTkVUNikgewogCQlpPWRlY29kZV9wcmVmaXg2KG5kbywgdHB0ciwgdGx2X3RsZW4sIGJ1Ziwgc2l6ZW9mKGJ1ZikpOwogCQlpZiAoaSA9PSAtMikKQEAgLTM3Nyw3ICszNzMsNiBAQAogCQllbHNlCiAJCSAgICBORF9QUklOVCgobmRvLCAiOiBJUHY2IHByZWZpeCAlcyIsIGJ1ZikpOwogCSAgICB9Ci0jZW5kaWYKIAkgICAgZWxzZQogCQlORF9QUklOVCgobmRvLCAiOiBBZGRyZXNzIGZhbWlseSAldSBwcmVmaXgiLCBhZikpOwogCSAgICBicmVhazsKQEAgLTM4NSwxNiArMzgwLDIwIEBACiAJICAgIGJyZWFrOwogCWNhc2UgTERQX0ZFQ19NQVJUSU5JX1ZDOgogICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFdlIGFzc3VtZSB0aGUgdHlwZSB3YXMgc3VwcG9zZWQgdG8gYmUgb25lIG9mIHRoZSBNUExTCisgICAgICAgICAgICAgKiBQc2V1ZG93aXJlIFR5cGVzLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBUTFZfVENIRUNLKDcpOworICAgICAgICAgICAgdmNfaW5mb19sZW4gPSAqKHRwdHIrMik7CisKKyAgICAgICAgICAgIC8qCiAJICAgICAqIEFjY29yZGluZyB0byBSRkMgNDkwOCwgdGhlIFZDIGluZm8gTGVuZ3RoIGZpZWxkIGNhbiBiZSB6ZXJvLAogCSAgICAgKiBpbiB3aGljaCBjYXNlIG5vdCBvbmx5IGFyZSB0aGVyZSBubyBpbnRlcmZhY2UgcGFyYW1ldGVycywKIAkgICAgICogdGhlcmUncyBubyBWQyBJRC4KIAkgICAgICovCi0gICAgICAgICAgICBUTFZfVENIRUNLKDcpOwotICAgICAgICAgICAgdmNfaW5mb19sZW4gPSAqKHRwdHIrMik7Ci0KICAgICAgICAgICAgIGlmICh2Y19pbmZvX2xlbiA9PSAwKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogJXMsICVzY29udHJvbCB3b3JkLCBncm91cC1JRCAldSwgVkMtaW5mby1sZW5ndGg6ICV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihsMnZwbl9lbmNhcHNfdmFsdWVzLCAiVW5rbm93biIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpJjB4N2ZmZiksCisgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIobXBsc19wd190eXBlc192YWx1ZXMsICJVbmtub3duIiwgRVhUUkFDVF8xNkJJVFModHB0cikmMHg3ZmZmKSwKICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFModHB0cikmMHg4MDAwID8gIiIgOiAibm8gIiwKICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFModHB0ciszKSwKICAgICAgICAgICAgICAgICAgICAgICAgdmNfaW5mb19sZW4pKTsKQEAgLTQwNCw3ICs0MDMsNyBAQAogICAgICAgICAgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgdGhlIFZDIElEIGFzIHdlbGwgKi8KICAgICAgICAgICAgIFRMVl9UQ0hFQ0soMTEpOwogCSAgICBORF9QUklOVCgobmRvLCAiOiAlcywgJXNjb250cm9sIHdvcmQsIGdyb3VwLUlEICV1LCBWQy1JRCAldSwgVkMtaW5mby1sZW5ndGg6ICV1IiwKLQkJICAgdG9rMnN0cihsMnZwbl9lbmNhcHNfdmFsdWVzLCAiVW5rbm93biIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpJjB4N2ZmZiksCisJCSAgIHRvazJzdHIobXBsc19wd190eXBlc192YWx1ZXMsICJVbmtub3duIiwgRVhUUkFDVF8xNkJJVFModHB0cikmMHg3ZmZmKSwKIAkJICAgRVhUUkFDVF8xNkJJVFModHB0cikmMHg4MDAwID8gIiIgOiAibm8gIiwKICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyh0cHRyKzMpLAogCQkgICBFWFRSQUNUXzMyQklUUyh0cHRyKzcpLApkaWZmIC0tZ2l0IGEvcHJpbnQtbGlzcC5jIGIvcHJpbnQtbGlzcC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ3YWZlNTAKLS0tIC9kZXYvbnVsbAorKysgYi9wcmludC1saXNwLmMKQEAgLTAsMCArMSw0NDkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgUml0ZXNoIFJhbmphbiAoci5yYW5qYW43ODlAZ21haWwuY29tKQorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqIDMuIFRoZSBuYW1lIG9mIHRoZSBhdXRob3IgbWF5IG5vdCBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cworICogICAgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQVVUSE9SIGBgQVMgSVMnJyBBTkQgQU5ZIEVYUFJFU1MgT1IKKyAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIEFVVEhPUiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsCisgKiBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUgorICogU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pCisgKiBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsCisgKiBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworLyogXHN1bW1hcnk6IC0gTG9jYXRvci9JZGVudGlmaWVyIFNlcGFyYXRpb24gUHJvdG9jb2wgKExJU1ApIHByaW50ZXIgKi8KKworLyoKKyAqIHNwZWNpZmljYXRpb246IFJGQyA2ODMwCisgKgorICoKKyAqIFRoZSBNYXAtUmVnaXN0ZXIgbWVzc2FnZSBmb3JtYXQgaXM6CisgKgorICogICAgICAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMworICogICAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHxUeXBlPTMgfFB8U3xJfFJ8ICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICB8TXwgUmVjb3JkIENvdW50ICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgTm9uY2UgLiAuIC4gICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgLiAuIC4gTm9uY2UgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIHwgICAgICAgICAgICBLZXkgSUQgICAgICAgICAgICAgfCAgQXV0aGVudGljYXRpb24gRGF0YSBMZW5ndGggICB8CisgKiAgICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICAgIH4gICAgICAgICAgICAgICAgICAgICBBdXRoZW50aWNhdGlvbiBEYXRhICAgICAgICAgICAgICAgICAgICAgICB+CisgKiAgKy0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgfCAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIFJlY29yZCBUVEwgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgfCAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgUiAgIHwgTG9jYXRvciBDb3VudCB8IEVJRCBtYXNrLWxlbiAgfCBBQ1QgfEF8ICAgICAgUmVzZXJ2ZWQgICAgICAgICB8CisgKiAgZSAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgYyAgIHwgUnN2ZCAgfCAgTWFwLVZlcnNpb24gTnVtYmVyICAgfCAgICAgICAgRUlELVByZWZpeC1BRkkgICAgICAgICB8CisgKiAgbyAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgciAgIHwgICAgICAgICAgICAgICAgICAgICAgICAgIEVJRC1QcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgZCAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgfCAgL3wgICAgUHJpb3JpdHkgICB8ICAgIFdlaWdodCAgICAgfCAgTSBQcmlvcml0eSAgIHwgICBNIFdlaWdodCAgICB8CisgKiAgfCBMICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgfCBvIHwgICAgICAgIFVudXNlZCBGbGFncyAgICAgfEx8cHxSfCAgICAgICAgICAgTG9jLUFGSSAgICAgICAgICAgICB8CisgKiAgfCBjICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgfCAgXHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvY2F0b3IgICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiAgKy0+ICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKgorICoKKyAqIFRoZSBNYXAtTm90aWZ5IG1lc3NhZ2UgZm9ybWF0IGlzOgorICoKKyAqICAgICAgIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAqICAgICAgIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICogICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgICB8VHlwZT00IHxJfFJ8ICAgICAgICAgIFJlc2VydmVkICAgICAgICAgICAgICAgICB8IFJlY29yZCBDb3VudCAgfAorICogICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIE5vbmNlIC4gLiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgICB8ICAgICAgICAgICAgICAgICAgICAgICAgIC4gLiAuIE5vbmNlICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgICB8ICAgICAgICAgICAgS2V5IElEICAgICAgICAgICAgIHwgIEF1dGhlbnRpY2F0aW9uIERhdGEgTGVuZ3RoICAgfAorICogICAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgICB+ICAgICAgICAgICAgICAgICAgICAgQXV0aGVudGljYXRpb24gRGF0YSAgICAgICAgICAgICAgICAgICAgICAgfgorICogICstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIHwgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBSZWNvcmQgVFRMICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogIHwgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIFIgICB8IExvY2F0b3IgQ291bnQgfCBFSUQgbWFzay1sZW4gIHwgQUNUIHxBfCAgICAgIFJlc2VydmVkICAgICAgICAgfAorICogIGUgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIGMgICB8IFJzdmQgIHwgIE1hcC1WZXJzaW9uIE51bWJlciAgIHwgICAgICAgICBFSUQtUHJlZml4LUFGSSAgICAgICAgfAorICogIG8gICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIHIgICB8ICAgICAgICAgICAgICAgICAgICAgICAgICBFSUQtUHJlZml4ICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogIGQgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIHwgIC98ICAgIFByaW9yaXR5ICAgfCAgICBXZWlnaHQgICAgIHwgIE0gUHJpb3JpdHkgICB8ICAgTSBXZWlnaHQgICAgfAorICogIHwgTCArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIHwgbyB8ICAgICAgICBVbnVzZWQgRmxhZ3MgICAgIHxMfHB8UnwgICAgICAgICAgIExvYy1BRkkgICAgICAgICAgICAgfAorICogIHwgYyArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogIHwgIFx8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2NhdG9yICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogICstPiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSAiaXAuaCIKKyNpbmNsdWRlICJpcDYuaCIKKworI2luY2x1ZGUgImV4dHJhY3QuaCIKKyNpbmNsdWRlICJhZGRydG9uYW1lLmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICIgW3xMSVNQXSI7CisKKyNkZWZpbmUgSVB2NF9BRkkJCQkxCisjZGVmaW5lIElQdjZfQUZJCQkJMgorI2RlZmluZSBUWVBFX0lOREVYCQkJNAorI2RlZmluZSBMSVNQX01BUF9OT1RJRllfSUJJVF9NQVNLCTgKKyNkZWZpbmUgTElTUF9NQVBfUkVHSVNURVJfSUJJVF9NQVNLCTIKKworZW51bSB7CisJTElTUF9NQVBfUkVRVUVTVCA9IDEsCisJTElTUF9NQVBfUkVQTFksCisJTElTUF9NQVBfUkVHSVNURVIsCisJTElTUF9NQVBfTk9USUZZLAorCUxJU1BfRU5DQVBTVUxBVEVEX0NPTlRST0xfTUVTU0FHRSA9IDgKK307CisKK2VudW0geworCUxJU1BfQVVUSF9OT05FLAorCUxJU1BfQVVUSF9TSEExLAorCUxJU1BfQVVUSF9TSEEyNTYKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGxpc3BfdHlwZSBbXSA9IHsKKwl7IDAsICJMSVNQLVJlc2VydmVkIgkJCX0sCisJeyAxLCAiTElTUC1NYXAtUmVxdWVzdCIJCQl9LAorCXsgMiwgIkxJU1AtTWFwLVJlcGx5IgkJCX0sCisJeyAzLCAiTElTUC1NYXAtUmVnaXN0ZXIiCQl9LAorCXsgNCwgIkxJU1AtTWFwLU5vdGlmeSIJCQl9LAorCXsgOCwgIkxJU1AtRW5jYXBzdWxhdGVkLUNvbnRvbC1NZXNzYWdlIiB9LAorCXsgMCwgTlVMTCB9Cit9OworCisvKgorICogUC1CaXQgOiBSZXF1ZXN0IGZvciBQcm94eSBNYXAtUmVwbHkgZnJvbSB0aGUgTVMvTVIKKyAqIFMtQml0IDogU2VjdXJpdHkgRW5oYW5jZW1lbnQuIEVUUiBpcyBMSVNQLVNFQyBlbmFibGVkLiBkcmFmdC1pZXRmLWxpc3Atc2VjCisgKiBJLUJpdCA6IDEyOCBiaXQgeFRSLUlEIGFuZCA2NCBiaXQgU2l0ZS1JRCBwcmVzZW50LgorICoJICAgeFRSLUlEIGFuZCBTaXRlLUlEIGhlbHAgaW4gZGlmZmVyZW50aWF0aW9uIG9mIHhUUnMgaW4gbXVsdGkgeFRSCisgKgkgICBhbmQgbXVsdGkgU2l0ZSBkZXBsb3ltZW50IHNjZW5hcmlvcy4KKyAqIFItQml0IDogQnVpbHQgZm9yIGEgUmVlbmNhcHN1bGF0aW5nLVR1bm5lbC1Sb3V0ZXIuIFVzZWQgaW4gVHJhZmZpYworICoJICAgRW5naW5lZXJpbmcgYW5kIFNlcnZpY2UgQ2hhaW5pbmcKKyAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgbWFwX3JlZ2lzdGVyX2hkcl9mbGFnW10gPSB7CisJeyAweDA4MDAwMDAwLCAiUC1Qcm94eS1NYXAtUmVwbHkiICB9LAorCXsgMHgwNDAwMDAwMCwgIlMtTElTUC1TRUMtQ2FwYWJsZSIgfSwKKwl7IDB4MDIwMDAwMDAsICJJLXhUUi1JRC1QcmVzZW50IiAgIH0sCisJeyAweDAxMDAwMDAwLCAiUi1CdWlsZC1Gb3ItUlRSIiAgICB9LAorCXsgMHgwMDAwMDEwMCwgIk0tV2FudC1NYXAtTm90aWZ5IiAgfSwKKwl7IDAsIE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgbWFwX25vdGlmeV9oZHJfZmxhZ1tdID0geworCXsgMHgwODAwMDAwMCwgIkkteFRSLUlELVByZXNlbnQiICAgfSwKKwl7IDB4MDQwMDAwMDAsICJSLUJ1aWxkLUZvci1SVFIiICAgIH0sCisJeyAwLCBOVUxMIH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGF1dGhfdHlwZVtdID0geworCXsgTElTUF9BVVRIX05PTkUsICAgIk5vbmUiICAgfSwKKwl7IExJU1BfQVVUSF9TSEExLCAgICJTSEExIiAgIH0sCisJeyBMSVNQX0FVVEhfU0hBMjU2LCAiU0hBMjU2IiB9LAorCXsgMCwgTlVMTH0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGxpc3BfZWlkX2FjdGlvbltdID0geworCXsgMCwgIk5vLUFjdGlvbiIJfSwKKwl7IDEsICJOYXRpdmVseS1Gb3J3YXJkIiB9LAorCXsgMiwgIlNlbmQtTWFwLVJlcXVlc3QiIH0sCisJeyAzLCAiRHJvcCIJCX0sCisJeyAwLCBOVUxMfQorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgbGlzcF9sb2NfZmxhZ1tdID0geworCXsgMHgwMDA0LCAiTG9jYWwtTG9jYXRvciIgfSwKKwl7IDB4MDAwMiwgIlJMb2MtUHJvYmVkIgkgIH0sCisJeyAweDAwMDEsICJSZWFjaGFibGUiCSAgfSwKKwl7IDAsIE5VTEwgfQorfTsKKwordHlwZWRlZiBzdHJ1Y3QgbWFwX3JlZ2lzdGVyX2hkciB7CisJbmRfdWludDhfdCB0eXBlX2FuZF9mbGFnOworCW5kX3VpbnQ4X3QgcmVzZXJ2ZWQ7CisJbmRfdWludDhfdCByZXNlcnZlZF9hbmRfZmxhZzI7CisJbmRfdWludDhfdCByZWNvcmRfY291bnQ7CisJbmRfdWludDY0X3Qgbm9uY2U7CisJbmRfdWludDE2X3Qga2V5X2lkOworCW5kX3VpbnQxNl90IGF1dGhfZGF0YV9sZW47Cit9IGxpc3BfbWFwX3JlZ2lzdGVyX2hkcjsKKworI2RlZmluZSBNQVBfUkVHSVNURVJfSERSX0xFTiBzaXplb2YobGlzcF9tYXBfcmVnaXN0ZXJfaGRyKQorCit0eXBlZGVmIHN0cnVjdCBtYXBfcmVnaXN0ZXJfZWlkIHsKKwluZF91aW50MzJfdCB0dGw7CisJbmRfdWludDhfdCBsb2NhdG9yX2NvdW50OworCW5kX3VpbnQ4X3QgZWlkX3ByZWZpeF9tYXNrX2xlbmd0aDsKKwluZF91aW50OF90IGFjdF9hdXRoX2luY19yZXM7CisJbmRfdWludDhfdCByZXNlcnZlZDsKKwluZF91aW50OF90IHJlc2VydmVkX3ZlcnNpb25faGk7CisJbmRfdWludDhfdCB2ZXJzaW9uX2xvdzsKKwluZF91aW50MTZfdCBlaWRfcHJlZml4X2FmaTsKK30gbGlzcF9tYXBfcmVnaXN0ZXJfZWlkOworCisjZGVmaW5lIE1BUF9SRUdJU1RFUl9FSURfTEVOIHNpemVvZihsaXNwX21hcF9yZWdpc3Rlcl9laWQpCisKK3R5cGVkZWYgc3RydWN0IG1hcF9yZWdpc3Rlcl9sb2MgeworCW5kX3VpbnQ4X3QgcHJpb3JpdHk7CisJbmRfdWludDhfdCB3ZWlnaHQ7CisJbmRfdWludDhfdCBtX3ByaW9yaXR5OworCW5kX3VpbnQ4X3QgbV93ZWlnaHQ7CisJbmRfdWludDE2X3QgdW51c2VkX2FuZF9mbGFnOworCW5kX3VpbnQxNl90IGxvY2F0b3JfYWZpOworfSBsaXNwX21hcF9yZWdpc3Rlcl9sb2M7CisKKyNkZWZpbmUgTUFQX1JFR0lTVEVSX0xPQ19MRU4gc2l6ZW9mKGxpc3BfbWFwX3JlZ2lzdGVyX2xvYykKKworc3RhdGljIGlubGluZSB1aW50OF90IGV4dHJhY3RfbGlzcF90eXBlKHVpbnQ4X3QpOworc3RhdGljIGlubGluZSB1aW50OF90IGlzX3h0cl9kYXRhX3ByZXNlbnQodWludDhfdCAsIHVpbnQ4X3QpOworc3RhdGljIHZvaWQgbGlzcF9oZHJfZmxhZyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgbGlzcF9tYXBfcmVnaXN0ZXJfaGRyICopOworc3RhdGljIHZvaWQgYWN0aW9uX2ZsYWcobmV0ZGlzc2VjdF9vcHRpb25zICosIHVpbnQ4X3QpOworc3RhdGljIHZvaWQgbG9jX2hkcl9mbGFnKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCB1aW50MTZfdCk7CisKK3ZvaWQgbGlzcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQoreworCXVpbnQ4X3QgdHlwZTsKKwl1aW50OF90IG1hc2tfbGVuOworCXVpbnQ4X3QgbG9jX2NvdW50OworCXVpbnQ4X3QgeHRyX3ByZXNlbnQ7CisJdWludDhfdCByZWNvcmRfY291bnQ7CisJdWludDE2X3Qga2V5X2lkOworCXVpbnQxNl90IGVpZF9hZmk7CisJdWludDE2X3QgbG9jX2FmaTsKKwl1aW50MTZfdCBtYXBfdmVyc2lvbjsKKwl1aW50MTZfdCBwYWNrZXRfb2Zmc2V0OworCXVpbnQxNl90IGF1dGhfZGF0YV9sZW47CisJdWludDMyX3QgdHRsOworCWNvbnN0IHVfY2hhciAqcGFja2V0X2l0ZXJhdG9yOworCWNvbnN0IHVfY2hhciAqbG9jX2lwX3BvaW50ZXI7CisJY29uc3QgbGlzcF9tYXBfcmVnaXN0ZXJfaGRyICpsaXNwX2hkcjsKKwljb25zdCBsaXNwX21hcF9yZWdpc3Rlcl9laWQgKmxpc3BfZWlkOworCWNvbnN0IGxpc3BfbWFwX3JlZ2lzdGVyX2xvYyAqbGlzcF9sb2M7CisKKwkvKiBDaGVjayBpZiBlbm91Z2ggYnl0ZXMgZm9yIGhlYWRlciBhcmUgYXZhaWxhYmxlICovCisJTkRfVENIRUNLMigqYnAsIE1BUF9SRUdJU1RFUl9IRFJfTEVOKTsKKwlsaXNwX2hkciA9IChjb25zdCBsaXNwX21hcF9yZWdpc3Rlcl9oZHIgKikgYnA7CisJbGlzcF9oZHJfZmxhZyhuZG8sIGxpc3BfaGRyKTsKKwkvKiBTdXBwb3J0aW5nIG9ubHkgTUFQIE5PVElGWSBhbmQgTUFQIFJFR0lTVEVSIExJU1AgcGFja2V0cyAqLworCXR5cGUgPSBleHRyYWN0X2xpc3BfdHlwZShsaXNwX2hkci0+dHlwZV9hbmRfZmxhZyk7CisJaWYgKCh0eXBlICE9IExJU1BfTUFQX1JFR0lTVEVSKSAmJiAodHlwZSAhPSBMSVNQX01BUF9OT1RJRlkpKQorCQlyZXR1cm47CisKKwkvKiBGaW5kIGlmIHRoZSBwYWNrZXQgY29udGFpbnMgeFRSIGFuZCBTaXRlLUlEIGRhdGEgKi8KKwl4dHJfcHJlc2VudCA9IGlzX3h0cl9kYXRhX3ByZXNlbnQodHlwZSwgbGlzcF9oZHItPnR5cGVfYW5kX2ZsYWcpOworCisJLyogRXh0cmFjdCB0aGUgbnVtYmVyIG9mIEVJRCByZWNvcmRzIHByZXNlbnQgKi8KKwlhdXRoX2RhdGFfbGVuID0gRVhUUkFDVF8xNkJJVFMoJmxpc3BfaGRyLT5hdXRoX2RhdGFfbGVuKTsKKwlwYWNrZXRfaXRlcmF0b3IgPSAoY29uc3QgdV9jaGFyICopKGxpc3BfaGRyKTsKKwlwYWNrZXRfb2Zmc2V0ID0gTUFQX1JFR0lTVEVSX0hEUl9MRU47CisJcmVjb3JkX2NvdW50ID0gbGlzcF9oZHItPnJlY29yZF9jb3VudDsKKworCWlmIChuZG8tPm5kb192ZmxhZykgeworCQlrZXlfaWQgPSBFWFRSQUNUXzE2QklUUygmbGlzcF9oZHItPmtleV9pZCk7CisJCU5EX1BSSU5UKChuZG8sICJcbiAgICAldSByZWNvcmQocyksICIsIHJlY29yZF9jb3VudCkpOworCQlORF9QUklOVCgobmRvLCAiQXV0aGVudGljYXRpb24gJXMsIiwKKwkJCXRvazJzdHIoYXV0aF90eXBlLCAidW5rbm93bi10eXBlIiwga2V5X2lkKSkpOworCQloZXhfcHJpbnQobmRvLCAiXG4gICAgQXV0aGVudGljYXRpb24tRGF0YTogIiwgcGFja2V0X2l0ZXJhdG9yICsKKwkJCQkJCXBhY2tldF9vZmZzZXQsIGF1dGhfZGF0YV9sZW4pOworCX0gZWxzZSB7CisJCU5EX1BSSU5UKChuZG8sICIgJXUgcmVjb3JkKHMpLCIsIHJlY29yZF9jb3VudCkpOworCX0KKwlwYWNrZXRfb2Zmc2V0ICs9IGF1dGhfZGF0YV9sZW47CisKKwlpZiAocmVjb3JkX2NvdW50ID09IDApCisJCWdvdG8gaW52YWxpZDsKKworCS8qIFByaW50IGFsbCB0aGUgRUlEIHJlY29yZHMgKi8KKwl3aGlsZSAoKGxlbmd0aCA+IHBhY2tldF9vZmZzZXQpICYmIChyZWNvcmRfY291bnQtLSkpIHsKKworCQlORF9UQ0hFQ0syKCoocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCksIE1BUF9SRUdJU1RFUl9FSURfTEVOKTsKKwkJTkRfUFJJTlQoKG5kbywgIlxuIikpOworCQlsaXNwX2VpZCA9IChjb25zdCBsaXNwX21hcF9yZWdpc3Rlcl9laWQgKikKKwkJCQkoKGNvbnN0IHVfY2hhciAqKWxpc3BfaGRyICsgcGFja2V0X29mZnNldCk7CisJCXBhY2tldF9vZmZzZXQgKz0gTUFQX1JFR0lTVEVSX0VJRF9MRU47CisJCW1hc2tfbGVuID0gbGlzcF9laWQtPmVpZF9wcmVmaXhfbWFza19sZW5ndGg7CisJCWVpZF9hZmkgPSBFWFRSQUNUXzE2QklUUygmbGlzcF9laWQtPmVpZF9wcmVmaXhfYWZpKTsKKwkJbG9jX2NvdW50ID0gbGlzcF9laWQtPmxvY2F0b3JfY291bnQ7CisKKwkJaWYgKG5kby0+bmRvX3ZmbGFnKSB7CisJCQl0dGwgPSBFWFRSQUNUXzMyQklUUygmbGlzcF9laWQtPnR0bCk7CisJCQlORF9QUklOVCgobmRvLCAiICAgICAgUmVjb3JkIFRUTCAldSwiLCB0dGwpKTsKKwkJCWFjdGlvbl9mbGFnKG5kbywgbGlzcF9laWQtPmFjdF9hdXRoX2luY19yZXMpOworCQkJbWFwX3ZlcnNpb24gPSAoKChsaXNwX2VpZC0+cmVzZXJ2ZWRfdmVyc2lvbl9oaSkgJiAxNSApICogMjU1KSArCisJCQkJCWxpc3BfZWlkLT52ZXJzaW9uX2xvdzsKKwkJCU5EX1BSSU5UKChuZG8sICIgTWFwIFZlcnNpb246ICV1LCIsIG1hcF92ZXJzaW9uKSk7CisJCX0KKworCQlzd2l0Y2ggKGVpZF9hZmkpIHsKKwkJY2FzZSBJUHY0X0FGSToKKwkJCU5EX1RDSEVDSzIoKihwYWNrZXRfaXRlcmF0b3IgKyBwYWNrZXRfb2Zmc2V0KSwgNCk7CisJCQlORF9QUklOVCgobmRvLCAiIEVJRCAlcy8ldSwiLCBpcGFkZHJfc3RyaW5nKG5kbywKKwkJCQlwYWNrZXRfaXRlcmF0b3IgKyBwYWNrZXRfb2Zmc2V0KSwgbWFza19sZW4pKTsKKwkJCXBhY2tldF9vZmZzZXQgKz0gNDsKKwkJCWJyZWFrOworCQljYXNlIElQdjZfQUZJOgorCQkJTkRfVENIRUNLMigqKHBhY2tldF9pdGVyYXRvciArIHBhY2tldF9vZmZzZXQpLCAxNik7CisJCQlORF9QUklOVCgobmRvLCAiIEVJRCAlcy8ldSwiLCBpcDZhZGRyX3N0cmluZyhuZG8sCisJCQkJcGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCksIG1hc2tfbGVuKSk7CisJCQlwYWNrZXRfb2Zmc2V0ICs9IDE2OworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKgorCQkJICogTm8gc3VwcG9ydCBmb3IgTENBRiByaWdodCBub3cuCisJCQkgKi8KKwkJCXJldHVybjsKKwkJCWJyZWFrOworCQl9CisKKwkJTkRfUFJJTlQoKG5kbywgIiAldSBsb2NhdG9yKHMpIiwgbG9jX2NvdW50KSk7CisKKwkJd2hpbGUgKGxvY19jb3VudC0tKSB7CisJCQlORF9UQ0hFQ0syKCoocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCksIE1BUF9SRUdJU1RFUl9MT0NfTEVOKTsKKwkJCWxpc3BfbG9jID0gKGNvbnN0IGxpc3BfbWFwX3JlZ2lzdGVyX2xvYyAqKSAocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCk7CisJCQlsb2NfaXBfcG9pbnRlciA9IChjb25zdCB1X2NoYXIgKikgKGxpc3BfbG9jICsgMSk7CisJCQlwYWNrZXRfb2Zmc2V0ICs9IE1BUF9SRUdJU1RFUl9MT0NfTEVOOworCQkJbG9jX2FmaSA9IEVYVFJBQ1RfMTZCSVRTKCZsaXNwX2xvYy0+bG9jYXRvcl9hZmkpOworCisJCQlpZiAobmRvLT5uZG9fdmZsYWcpCisJCQkJTkRfUFJJTlQoKG5kbywgIlxuICAgICAgICIpKTsKKworCQkJc3dpdGNoIChsb2NfYWZpKSB7CisJCQljYXNlIElQdjRfQUZJOgorCQkJCU5EX1RDSEVDSzIoKihwYWNrZXRfaXRlcmF0b3IgKyBwYWNrZXRfb2Zmc2V0KSwgNCk7CisJCQkJTkRfUFJJTlQoKG5kbywgIiBMT0MgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgbG9jX2lwX3BvaW50ZXIpKSk7CisJCQkJcGFja2V0X29mZnNldCArPSA0OworCQkJCWJyZWFrOworCQkJY2FzZSBJUHY2X0FGSToKKwkJCQlORF9UQ0hFQ0syKCoocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCksIDE2KTsKKwkJCQlORF9QUklOVCgobmRvLCAiIExPQyAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgbG9jX2lwX3BvaW50ZXIpKSk7CisJCQkJcGFja2V0X29mZnNldCArPSAxNjsKKwkJCQlicmVhazsKKwkJCWRlZmF1bHQ6CisJCQkJYnJlYWs7CisJCQl9CisJCQlpZiAobmRvLT5uZG9fdmZsYWcpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiXG4gICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0ICV1LyV1LCIKKwkJCQkJCSIgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAldS8ldSwiLAorCQkJCQkJbGlzcF9sb2MtPnByaW9yaXR5LCBsaXNwX2xvYy0+d2VpZ2h0LAorCQkJCQkJbGlzcF9sb2MtPm1fcHJpb3JpdHksIGxpc3BfbG9jLT5tX3dlaWdodCkpOworCQkJCWxvY19oZHJfZmxhZyhuZG8sIEVYVFJBQ1RfMTZCSVRTKCZsaXNwX2xvYy0+dW51c2VkX2FuZF9mbGFnKSk7CisJCQl9CisJCX0KKwl9CisKKwkvKgorCSAqIFByaW50IHhUUiBhbmQgU2l0ZSBJRC4gSGFuZGxlIHRoZSBmYWN0IHRoYXQgdGhlIHBhY2tldCBjb3VsZCBiZSBpbnZhbGlkLgorCSAqIElmIHRoZSB4VFJfSURfUHJlc2VudCBiaXQgaXMgbm90IHNldCwgYW5kIHdlIHN0aWxsIGhhdmUgZGF0YSB0byBkaXNwbGF5LAorCSAqIHNob3cgaXQgYXMgaGV4IGRhdGEuCisJICovCisJaWYgKHh0cl9wcmVzZW50KSB7CisJCWlmICghTkRfVFRFU1QyKCoocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCksIDI0KSkKKwkJCWdvdG8gaW52YWxpZDsKKwkJaGV4X3ByaW50X3dpdGhfb2Zmc2V0KG5kbywgIlxuICAgIHhUUi1JRDogIiwgcGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCwgMTYsIDApOworCQlORF9QUklOVCgobmRvLCAiXG4gICAgU0lURS1JRDogJSIgUFJJdTY0LAorCQkJRVhUUkFDVF82NEJJVFMocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCArIDE2KSkpOworCX0gZWxzZSB7CisJCS8qIENoZWNrIGlmIHBhY2tldCBpc24ndCBvdmVyIHlldCAqLworCQlpZiAocGFja2V0X2l0ZXJhdG9yICsgcGFja2V0X29mZnNldCA8IG5kby0+bmRvX3NuYXBlbmQpIHsKKwkJCWhleF9wcmludF93aXRoX29mZnNldChuZG8sICJcbiAgICBEYXRhOiAiLCBwYWNrZXRfaXRlcmF0b3IgKyBwYWNrZXRfb2Zmc2V0LAorCQkJCShuZG8tPm5kb19zbmFwZW5kIC0gKHBhY2tldF9pdGVyYXRvciArIHBhY2tldF9vZmZzZXQpKSwgMCk7CisJCX0KKwl9CisJcmV0dXJuOwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIlxuICAgJXMiLCB0c3RyKSk7CisJcmV0dXJuOworaW52YWxpZDoKKwlORF9QUklOVCgobmRvLCAiXG4gICAlcyIsIGlzdHIpKTsKKwlyZXR1cm47Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBleHRyYWN0X2xpc3BfdHlwZSh1aW50OF90IGxpc3BfaGRyX2ZsYWdzKQoreworCXJldHVybiAobGlzcF9oZHJfZmxhZ3MpID4+IFRZUEVfSU5ERVg7Cit9CisKK3N0YXRpYyBpbmxpbmUgdWludDhfdCBpc194dHJfZGF0YV9wcmVzZW50KHVpbnQ4X3QgdHlwZSwgdWludDhfdCBsaXNwX2hkcl9mbGFncykKK3sKKwl1aW50OF90IHh0cl9wcmVzZW50ID0gMDsKKworCWlmICh0eXBlID09IExJU1BfTUFQX1JFR0lTVEVSKQorCQl4dHJfcHJlc2VudCA9IChsaXNwX2hkcl9mbGFncykgJiBMSVNQX01BUF9SRUdJU1RFUl9JQklUX01BU0s7CisJZWxzZSBpZiAodHlwZSA9PSBMSVNQX01BUF9OT1RJRlkpCisJCXh0cl9wcmVzZW50ID0gKGxpc3BfaGRyX2ZsYWdzKSAmIExJU1BfTUFQX05PVElGWV9JQklUX01BU0s7CisKKwlyZXR1cm4geHRyX3ByZXNlbnQ7Cit9CisKK3N0YXRpYyB2b2lkIGxpc3BfaGRyX2ZsYWcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IGxpc3BfbWFwX3JlZ2lzdGVyX2hkciAqbGlzcF9oZHIpCit7CisJdWludDhfdCB0eXBlID0gZXh0cmFjdF9saXNwX3R5cGUobGlzcF9oZHItPnR5cGVfYW5kX2ZsYWcpOworCisJaWYgKCFuZG8tPm5kb192ZmxhZykgeworCQlORF9QUklOVCgobmRvLCAiJXMsIiwgdG9rMnN0cihsaXNwX3R5cGUsICJ1bmtub3duLXR5cGUtJXUiLCB0eXBlKSkpOworCQlyZXR1cm47CisJfSBlbHNlIHsKKwkJTkRfUFJJTlQoKG5kbywgIiVzLCIsIHRvazJzdHIobGlzcF90eXBlLCAidW5rbm93bi10eXBlLSV1IiwgdHlwZSkpKTsKKwl9CisKKwlpZiAodHlwZSA9PSBMSVNQX01BUF9SRUdJU1RFUikgeworCQlORF9QUklOVCgobmRvLCAiIGZsYWdzIFslc10sIiwgYml0dG9rMnN0cihtYXBfcmVnaXN0ZXJfaGRyX2ZsYWcsCisJCQkgIm5vbmUiLCBFWFRSQUNUXzMyQklUUyhsaXNwX2hkcikpKSk7CisJfSBlbHNlIGlmICh0eXBlID09IExJU1BfTUFQX05PVElGWSkgeworCQlORF9QUklOVCgobmRvLCAiIGZsYWdzIFslc10sIiwgYml0dG9rMnN0cihtYXBfbm90aWZ5X2hkcl9mbGFnLAorCQkJICJub25lIiwgRVhUUkFDVF8zMkJJVFMobGlzcF9oZHIpKSkpOworCX0KKworCXJldHVybjsKK30KKworc3RhdGljIHZvaWQgYWN0aW9uX2ZsYWcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVpbnQ4X3QgYWN0X2F1dGhfaW5jX3JlcykKK3sKKwl1aW50OF90IGFjdGlvbjsKKwl1aW50OF90IGF1dGhvcml0YXRpdmU7CisKKwlhdXRob3JpdGF0aXZlICA9ICgoYWN0X2F1dGhfaW5jX3JlcyA+PiA0KSAmIDEpOworCisJaWYgKGF1dGhvcml0YXRpdmUpCisJCU5EX1BSSU5UKChuZG8sICIgQXV0aG9yaXRhdGl2ZSwiKSk7CisJZWxzZQorCQlORF9QUklOVCgobmRvLCAiIE5vbi1BdXRob3JpdGF0aXZlLCIpKTsKKworCWFjdGlvbiA9IGFjdF9hdXRoX2luY19yZXMgPj4gNTsKKwlORF9QUklOVCgobmRvLCAiICVzLCIsIHRvazJzdHIobGlzcF9laWRfYWN0aW9uLCAidW5rbm93biIsIGFjdGlvbikpKTsKK30KKworc3RhdGljIHZvaWQgbG9jX2hkcl9mbGFnKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1aW50MTZfdCBmbGFnKQoreworCU5EX1BSSU5UKChuZG8sICIgZmxhZ3MgWyVzXSwiLCBiaXR0b2syc3RyKGxpc3BfbG9jX2ZsYWcsICJub25lIiwgZmxhZykpKTsKK30KKwpkaWZmIC0tZ2l0IGEvcHJpbnQtbGxjLmMgYi9wcmludC1sbGMuYwppbmRleCBlOGEzMzE0Li42YmRmNTk5IDEwMDY0NAotLS0gYS9wcmludC1sbGMuYworKysgYi9wcmludC1sbGMuYwpAQCAtMjIsMTYgKzIyLDE3IEBACiAgKgl3aXRoIGFuIGF3ZnVsIGxvdCBvZiBoYWNraW5nIGJ5IEplZmZyZXkgTW9ndWwsIERFQ1dSTAogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElFRUUgODAyLjIgTExDIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjaW5jbHVkZSAibGxjLmgiCiAjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCkBAIC0xMzgsMjMgKzEzOSwzMSBAQAogfTsKIAogLyoKLSAqIFJldHVybnMgbm9uLXplcm8gSUZGIGl0IHN1Y2NlZWRzIGluIHByaW50aW5nIHRoZSBoZWFkZXIKKyAqIElmIHdlIHByaW50ZWQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHBheWxvYWQsIHJldHVybnMgdGhlIGxlbmd0aCBvZiB0aGUgTExDCisgKiBoZWFkZXIsIHBsdXMgdGhlIGxlbmd0aCBvZiBhbnkgU05BUCBoZWFkZXIgZm9sbG93aW5nIGl0LgorICoKKyAqIE90aGVyd2lzZSAoZm9yIGV4YW1wbGUsIGlmIHRoZSBwYWNrZXQgaGFzIHVua25vd24gU0FQcyBvciBoYXMgYSBTTkFQCisgKiBoZWFkZXIgd2l0aCBhbiB1bmtub3duIE9VSS9QSUQgY29tYmluYXRpb24pLCByZXR1cm5zIHRoZSAqbmVnYXRpdmUqCisgKiBvZiB0aGF0IHZhbHVlLgogICovCiBpbnQKIGxsY19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbiwKLQkgIGNvbnN0IHVfY2hhciAqZXNyYywgY29uc3QgdV9jaGFyICplZHN0LCB1X3Nob3J0ICpleHRyYWN0ZWRfZXRoZXJ0eXBlKQorCSAgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICpzcmMsIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqZHN0KQogewogCXVpbnQ4X3QgZHNhcF9maWVsZCwgZHNhcCwgc3NhcF9maWVsZCwgc3NhcDsKIAl1aW50MTZfdCBjb250cm9sOworCWludCBoZHJsZW47CiAJaW50IGlzX3U7Ci0JcmVnaXN0ZXIgaW50IHJldDsKIAotCSpleHRyYWN0ZWRfZXRoZXJ0eXBlID0gMDsKLQotCWlmIChjYXBsZW4gPCAzIHx8IGxlbmd0aCA8IDMpIHsKKwlpZiAoY2FwbGVuIDwgMykgewogCQlORF9QUklOVCgobmRvLCAiW3xsbGNdIikpOwotCQlORF9ERUZBVUxUUFJJTlQoKHVfY2hhciAqKXAsIGNhcGxlbik7Ci0JCXJldHVybiAoMSk7CisJCU5EX0RFRkFVTFRQUklOVCgoY29uc3QgdV9jaGFyICopcCwgY2FwbGVuKTsKKwkJcmV0dXJuIChjYXBsZW4pOworCX0KKwlpZiAobGVuZ3RoIDwgMykgeworCQlORF9QUklOVCgobmRvLCAiW3xsbGNdIikpOworCQlORF9ERUZBVUxUUFJJTlQoKGNvbnN0IHVfY2hhciAqKXAsIGNhcGxlbik7CisJCXJldHVybiAobGVuZ3RoKTsKIAl9CiAKIAlkc2FwX2ZpZWxkID0gKnA7CkBAIC0xNzIsMTUgKzE4MSwyMSBAQAogCQkgKiBVIGZyYW1lLgogCQkgKi8KIAkJaXNfdSA9IDE7CisJCWhkcmxlbiA9IDM7CS8qIERTQVAsIFNTQVAsIDEtYnl0ZSBjb250cm9sIGZpZWxkICovCiAJfSBlbHNlIHsKIAkJLyoKIAkJICogVGhlIGNvbnRyb2wgZmllbGQgaW4gSSBhbmQgUyBmcmFtZXMgaXMKIAkJICogMiBieXRlcy4uLgogCQkgKi8KLQkJaWYgKGNhcGxlbiA8IDQgfHwgbGVuZ3RoIDwgNCkgeworCQlpZiAoY2FwbGVuIDwgNCkgewogCQkJTkRfUFJJTlQoKG5kbywgIlt8bGxjXSIpKTsKLQkJCU5EX0RFRkFVTFRQUklOVCgodV9jaGFyICopcCwgY2FwbGVuKTsKLQkJCXJldHVybiAoMSk7CisJCQlORF9ERUZBVUxUUFJJTlQoKGNvbnN0IHVfY2hhciAqKXAsIGNhcGxlbik7CisJCQlyZXR1cm4gKGNhcGxlbik7CisJCX0KKwkJaWYgKGxlbmd0aCA8IDQpIHsKKwkJCU5EX1BSSU5UKChuZG8sICJbfGxsY10iKSk7CisJCQlORF9ERUZBVUxUUFJJTlQoKGNvbnN0IHVfY2hhciAqKXAsIGNhcGxlbik7CisJCQlyZXR1cm4gKGxlbmd0aCk7CiAJCX0KIAogCQkvKgpAQCAtMTg4LDYgKzIwMyw3IEBACiAJCSAqLwogCQljb250cm9sID0gRVhUUkFDVF9MRV8xNkJJVFMocCArIDIpOwogCQlpc191ID0gMDsKKwkJaGRybGVuID0gNDsJLyogRFNBUCwgU1NBUCwgMi1ieXRlIGNvbnRyb2wgZmllbGQgKi8KIAl9CiAKIAlpZiAoc3NhcF9maWVsZCA9PSBMTENTQVBfR0xPQkFMICYmIGRzYXBfZmllbGQgPT0gTExDU0FQX0dMT0JBTCkgewpAQCAtMjEwLDcgKzIyNiw3IEBACiAJCU5EX1BSSU5UKChuZG8sICJJUFggODAyLjM6ICIpKTsKIAogICAgICAgICAgICAgaXB4X3ByaW50KG5kbywgcCwgbGVuZ3RoKTsKLSAgICAgICAgICAgIHJldHVybiAoMSk7CisgICAgICAgICAgICByZXR1cm4gKDApOwkJLyogbm8gTExDIGhlYWRlciAqLwogCX0KIAogCWRzYXAgPSBkc2FwX2ZpZWxkICYgfkxMQ19JRzsKQEAgLTIzMiwyMSArMjQ4LDQ3IEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFNraXAgTExDIGhlYWRlci4KKwkgKi8KKwlwICs9IGhkcmxlbjsKKwlsZW5ndGggLT0gaGRybGVuOworCWNhcGxlbiAtPSBoZHJsZW47CisKKwlpZiAoc3NhcCA9PSBMTENTQVBfU05BUCAmJiBkc2FwID09IExMQ1NBUF9TTkFQCisJICAgICYmIGNvbnRyb2wgPT0gTExDX1VJKSB7CisJCS8qCisJCSAqIFhYWCAtIHdoYXQgKmlzKiB0aGUgcmlnaHQgYnJpZGdlIHBhZCB2YWx1ZSBoZXJlPworCQkgKiBEb2VzIGFueWJvZHkgZXZlciBicmlkZ2Ugb25lIGZvcm0gb2YgTEFOIHRyYWZmaWMKKwkJICogb3ZlciBhIG5ldHdvcmtpbmcgdHlwZSB0aGF0IHVzZXMgODAyLjIgTExDPworCQkgKi8KKwkJaWYgKCFzbmFwX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIHNyYywgZHN0LCAyKSkgeworCQkJLyoKKwkJCSAqIFVua25vd24gcGFja2V0IHR5cGU7IHRlbGwgb3VyIGNhbGxlciwgYnkKKwkJCSAqIHJldHVybmluZyBhIG5lZ2F0aXZlIHZhbHVlLCBzbyB0aGV5CisJCQkgKiBjYW4gcHJpbnQgdGhlIHJhdyBwYWNrZXQuCisJCQkgKi8KKwkJCXJldHVybiAoLShoZHJsZW4gKyA1KSk7CS8qIGluY2x1ZGUgTExDIGFuZCBTTkFQIGhlYWRlciAqLworCQl9IGVsc2UKKwkJCXJldHVybiAoaGRybGVuICsgNSk7CS8qIGluY2x1ZGUgTExDIGFuZCBTTkFQIGhlYWRlciAqLworCX0KKwogCWlmIChzc2FwID09IExMQ1NBUF84MDIxRCAmJiBkc2FwID09IExMQ1NBUF84MDIxRCAmJgogCSAgICBjb250cm9sID09IExMQ19VSSkgewotCQlzdHBfcHJpbnQobmRvLCBwKzMsIGxlbmd0aC0zKTsKLQkJcmV0dXJuICgxKTsKKwkJc3RwX3ByaW50KG5kbywgcCwgbGVuZ3RoKTsKKwkJcmV0dXJuIChoZHJsZW4pOwogCX0KIAogCWlmIChzc2FwID09IExMQ1NBUF9JUCAmJiBkc2FwID09IExMQ1NBUF9JUCAmJgogCSAgICBjb250cm9sID09IExMQ19VSSkgewotCQlpZiAoY2FwbGVuIDwgNCB8fCBsZW5ndGggPCA0KSB7Ci0JCQlORF9QUklOVCgobmRvLCAiW3xsbGNdIikpOwotCQkJTkRfREVGQVVMVFBSSU5UKCh1X2NoYXIgKilwLCBjYXBsZW4pOwotCQkJcmV0dXJuICgxKTsKLQkJfQotCQlpcF9wcmludChuZG8sIHArNCwgbGVuZ3RoLTQpOwotCQlyZXR1cm4gKDEpOworCQkvKgorCQkgKiBUaGlzIGlzIGFuIFJGQyA5NDgtc3R5bGUgSVAgcGFja2V0LCB3aXRoCisJCSAqIGFuIDgwMi4zIGhlYWRlciBhbmQgYW4gODAyLjIgTExDIGhlYWRlcgorCQkgKiB3aXRoIHRoZSBzb3VyY2UgYW5kIGRlc3RpbmF0aW9uIFNBUHMgYmVpbmcKKwkJICogdGhlIElQIFNBUC4KKwkJICovCisJCWlwX3ByaW50KG5kbywgcCwgbGVuZ3RoKTsKKwkJcmV0dXJuIChoZHJsZW4pOwogCX0KIAogCWlmIChzc2FwID09IExMQ1NBUF9JUFggJiYgZHNhcCA9PSBMTENTQVBfSVBYICYmCkBAIC0yNTUsMTcgKzI5NywxNSBAQAogCQkgKiBUaGlzIGlzIGFuIEV0aGVybmV0XzgwMi4yIElQWCBmcmFtZSwgd2l0aCBhbiA4MDIuMwogCQkgKiBoZWFkZXIgYW5kIGFuIDgwMi4yIExMQyBoZWFkZXIgd2l0aCB0aGUgc291cmNlIGFuZAogCQkgKiBkZXN0aW5hdGlvbiBTQVBzIGJlaW5nIHRoZSBJUFggU0FQLgotCQkgKgotCQkgKiBTa2lwIERTQVAsIExTQVAsIGFuZCBjb250cm9sIGZpZWxkLgogCQkgKi8KICAgICAgICAgICAgICAgICBpZiAobmRvLT5uZG9fZWZsYWcpCiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiSVBYIDgwMi4yOiAiKSk7CiAKLQkJaXB4X3ByaW50KG5kbywgcCszLCBsZW5ndGgtMyk7Ci0JCXJldHVybiAoMSk7CisJCWlweF9wcmludChuZG8sIHAsIGxlbmd0aCk7CisJCXJldHVybiAoaGRybGVuKTsKIAl9CiAKLSNpZmRlZiBUQ1BEVU1QX0RPX1NNQgorI2lmZGVmIEVOQUJMRV9TTUIKIAlpZiAoc3NhcCA9PSBMTENTQVBfTkVUQkVVSSAmJiBkc2FwID09IExMQ1NBUF9ORVRCRVVJCiAJICAgICYmICghKGNvbnRyb2wgJiBMTENfU19GTVQpIHx8IGNvbnRyb2wgPT0gTExDX1VfRk1UKSkgewogCQkvKgpAQCAtMjc4LDU4ICszMTgsMzUgQEAKIAkJICogTExDX1NfRk1ULCBzZXQgaW4gdGhlIGZpcnN0IGJ5dGUgb2YgdGhlIGNvbnRyb2wgZmllbGQpCiAJCSAqIGFuZCBVSSBmcmFtZXMgKHdob3NlIGNvbnRyb2wgZmllbGQgaXMganVzdCAzLCBMTENfVV9GTVQpLgogCQkgKi8KLQotCQkvKgotCQkgKiBTa2lwIHRoZSBMTEMgaGVhZGVyLgotCQkgKi8KLQkJaWYgKGlzX3UpIHsKLQkJCXAgKz0gMzsKLQkJCWxlbmd0aCAtPSAzOwotCQl9IGVsc2UgewotCQkJcCArPSA0OwotCQkJbGVuZ3RoIC09IDQ7Ci0JCX0KIAkJbmV0YmV1aV9wcmludChuZG8sIGNvbnRyb2wsIHAsIGxlbmd0aCk7Ci0JCXJldHVybiAoMSk7CisJCXJldHVybiAoaGRybGVuKTsKIAl9CiAjZW5kaWYKIAlpZiAoc3NhcCA9PSBMTENTQVBfSVNPTlMgJiYgZHNhcCA9PSBMTENTQVBfSVNPTlMKIAkgICAgJiYgY29udHJvbCA9PSBMTENfVUkpIHsKLQkJaXNvY2xuc19wcmludChuZG8sIHAgKyAzLCBsZW5ndGggLSAzLCBjYXBsZW4gLSAzKTsKLQkJcmV0dXJuICgxKTsKLQl9Ci0KLQlpZiAoc3NhcCA9PSBMTENTQVBfU05BUCAmJiBkc2FwID09IExMQ1NBUF9TTkFQCi0JICAgICYmIGNvbnRyb2wgPT0gTExDX1VJKSB7Ci0JCS8qCi0JCSAqIFhYWCAtIHdoYXQgKmlzKiB0aGUgcmlnaHQgYnJpZGdlIHBhZCB2YWx1ZSBoZXJlPwotCQkgKiBEb2VzIGFueWJvZHkgZXZlciBicmlkZ2Ugb25lIGZvcm0gb2YgTEFOIHRyYWZmaWMKLQkJICogb3ZlciBhIG5ldHdvcmtpbmcgdHlwZSB0aGF0IHVzZXMgODAyLjIgTExDPwotCQkgKi8KLQkJcmV0ID0gc25hcF9wcmludChuZG8sIHArMywgbGVuZ3RoLTMsIGNhcGxlbi0zLCAyKTsKLQkJaWYgKHJldCkKLQkJCXJldHVybiAocmV0KTsKKwkJaXNvY2xuc19wcmludChuZG8sIHAsIGxlbmd0aCwgY2FwbGVuKTsKKwkJcmV0dXJuIChoZHJsZW4pOwogCX0KIAogCWlmICghbmRvLT5uZG9fZWZsYWcpIHsKIAkJaWYgKHNzYXAgPT0gZHNhcCkgewotCQkJaWYgKGVzcmMgPT0gTlVMTCB8fCBlZHN0ID09IE5VTEwpCisJCQlpZiAoc3JjID09IE5VTEwgfHwgZHN0ID09IE5VTEwpCiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzICIsIHRvazJzdHIobGxjX3ZhbHVlcywgIlVua25vd24gRFNBUCAweCUwMngiLCBkc2FwKSkpOwogCQkJZWxzZQogCQkJCU5EX1BSSU5UKChuZG8sICIlcyA+ICVzICVzICIsCi0JCQkJCQlldGhlcmFkZHJfc3RyaW5nKG5kbywgZXNyYyksCi0JCQkJCQlldGhlcmFkZHJfc3RyaW5nKG5kbywgZWRzdCksCisJCQkJCQkoc3JjLT5hZGRyX3N0cmluZykobmRvLCBzcmMtPmFkZHIpLAorCQkJCQkJKGRzdC0+YWRkcl9zdHJpbmcpKG5kbywgZHN0LT5hZGRyKSwKIAkJCQkJCXRvazJzdHIobGxjX3ZhbHVlcywgIlVua25vd24gRFNBUCAweCUwMngiLCBkc2FwKSkpOwogCQl9IGVsc2UgewotCQkJaWYgKGVzcmMgPT0gTlVMTCB8fCBlZHN0ID09IE5VTEwpCisJCQlpZiAoc3JjID09IE5VTEwgfHwgZHN0ID09IE5VTEwpCiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzID4gJXMgIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGxsY192YWx1ZXMsICJVbmtub3duIFNTQVAgMHglMDJ4Iiwgc3NhcCksCiAJCQkJCXRvazJzdHIobGxjX3ZhbHVlcywgIlVua25vd24gRFNBUCAweCUwMngiLCBkc2FwKSkpOwogCQkJZWxzZQogCQkJCU5EX1BSSU5UKChuZG8sICIlcyAlcyA+ICVzICVzICIsCi0JCQkJCWV0aGVyYWRkcl9zdHJpbmcobmRvLCBlc3JjKSwKKwkJCQkJKHNyYy0+YWRkcl9zdHJpbmcpKG5kbywgc3JjLT5hZGRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGxsY192YWx1ZXMsICJVbmtub3duIFNTQVAgMHglMDJ4Iiwgc3NhcCksCi0JCQkJCWV0aGVyYWRkcl9zdHJpbmcobmRvLCBlZHN0KSwKKwkJCQkJKGRzdC0+YWRkcl9zdHJpbmcpKG5kbywgZHN0LT5hZGRyKSwKIAkJCQkJdG9rMnN0cihsbGNfdmFsdWVzLCAiVW5rbm93biBEU0FQIDB4JTAyeCIsIGRzYXApKSk7CiAJCX0KIAl9CkBAIC0zMzgsMTMgKzM1NSwzMSBAQAogCQlORF9QUklOVCgobmRvLCAiVW5udW1iZXJlZCwgJXMsIEZsYWdzIFslc10sIGxlbmd0aCAldSIsCiAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIobGxjX2NtZF92YWx1ZXMsICIlMDJ4IiwgTExDX1VfQ01EKGNvbnRyb2wpKSwKICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihsbGNfZmxhZ192YWx1ZXMsIj8iLChzc2FwX2ZpZWxkICYgTExDX0dTQVApIHwgKGNvbnRyb2wgJiBMTENfVV9QT0xMKSksCi0gICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCkpOwotCi0JCXAgKz0gMzsKKyAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICsgaGRybGVuKSk7CiAKIAkJaWYgKChjb250cm9sICYgfkxMQ19VX1BPTEwpID09IExMQ19YSUQpIHsKKwkJCWlmIChsZW5ndGggPT0gMCkgeworCQkJCS8qCisJCQkJICogWElEIHdpdGggbm8gcGF5bG9hZC4KKwkJCQkgKiBUaGlzIGNvdWxkLCBmb3IgZXhhbXBsZSwgYmUgYW4gU05BCisJCQkJICogInNob3J0IGZvcm0iIFhJRC4KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisJCQkJcmV0dXJuIChoZHJsZW4pOworCQkJfQorCQkJaWYgKGNhcGxlbiA8IDEpIHsKKwkJCQlORF9QUklOVCgobmRvLCAiW3xsbGNdIikpOworCQkJCWlmIChjYXBsZW4gPiAwKQorCQkJCQlORF9ERUZBVUxUUFJJTlQoKGNvbnN0IHVfY2hhciAqKXAsIGNhcGxlbik7CisJCQkJcmV0dXJuIChoZHJsZW4pOworCQkJfQogCQkJaWYgKCpwID09IExMQ19YSURfRkkpIHsKLQkJCQlORF9QUklOVCgobmRvLCAiOiAlMDJ4ICUwMngiLCBwWzFdLCBwWzJdKSk7CisJCQkJaWYgKGNhcGxlbiA8IDMgfHwgbGVuZ3RoIDwgMykgeworCQkJCQlORF9QUklOVCgobmRvLCAiW3xsbGNdIikpOworCQkJCQlpZiAoY2FwbGVuID4gMCkKKwkJCQkJCU5EX0RFRkFVTFRQUklOVCgoY29uc3QgdV9jaGFyICopcCwgY2FwbGVuKTsKKwkJCQl9IGVsc2UKKwkJCQkJTkRfUFJJTlQoKG5kbywgIjogJTAyeCAlMDJ4IiwgcFsxXSwgcFsyXSkpOworCQkJCXJldHVybiAoaGRybGVuKTsKIAkJCX0KIAkJfQogCX0gZWxzZSB7CkBAIC0zNTMsMjAgKzM4OCwzOCBAQAogCQkJCXRvazJzdHIobGxjX3N1cGVydmlzb3J5X3ZhbHVlcywiPyIsTExDX1NfQ01EKGNvbnRyb2wpKSwKIAkJCQlMTENfSVNfTlIoY29udHJvbCksCiAJCQkJdG9rMnN0cihsbGNfZmxhZ192YWx1ZXMsIj8iLChzc2FwX2ZpZWxkICYgTExDX0dTQVApIHwgKGNvbnRyb2wgJiBMTENfSVNfUE9MTCkpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoICsgaGRybGVuKSk7CisJCQlyZXR1cm4gKGhkcmxlbik7CS8qIG5vIHBheWxvYWQgdG8gcHJpbnQgKi8KIAkJfSBlbHNlIHsKIAkJCU5EX1BSSU5UKChuZG8sICJJbmZvcm1hdGlvbiwgc2VuZCBzZXEgJXUsIHJjdiBzZXEgJXUsIEZsYWdzIFslc10sIGxlbmd0aCAldSIsCiAJCQkJTExDX0lfTlMoY29udHJvbCksCiAJCQkJTExDX0lTX05SKGNvbnRyb2wpLAogCQkJCXRvazJzdHIobGxjX2ZsYWdfdmFsdWVzLCI/Iiwoc3NhcF9maWVsZCAmIExMQ19HU0FQKSB8IChjb250cm9sICYgTExDX0lTX1BPTEwpKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbmd0aCArIGhkcmxlbikpOwogCQl9CiAJfQotCXJldHVybigxKTsKKwlyZXR1cm4gKC1oZHJsZW4pOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHRvayAqCitvdWlfdG9fc3RydWN0X3Rvayh1aW50MzJfdCBvcmdjb2RlKQoreworCWNvbnN0IHN0cnVjdCB0b2sgKnRvayA9IG51bGxfdmFsdWVzOworCWNvbnN0IHN0cnVjdCBvdWlfdG9rICpvdHA7CisKKwlmb3IgKG90cCA9ICZvdWlfdG9fdG9rWzBdOyBvdHAtPnRvayAhPSBOVUxMOyBvdHArKykgeworCQlpZiAob3RwLT5vdWkgPT0gb3JnY29kZSkgeworCQkJdG9rID0gb3RwLT50b2s7CisJCQlicmVhazsKKwkJfQorCX0KKwlyZXR1cm4gKHRvayk7CiB9CiAKIGludAotc25hcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbiwgdV9pbnQgYnJpZGdlX3BhZCkKK3NuYXBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBjYXBsZW4sCisJY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICpzcmMsIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqZHN0LAorCXVfaW50IGJyaWRnZV9wYWQpCiB7CiAJdWludDMyX3Qgb3JnY29kZTsKIAlyZWdpc3RlciB1X3Nob3J0IGV0OwpAQCAtMzc5LDIxICs0MzIsMTcgQEAKIAlldCA9IEVYVFJBQ1RfMTZCSVRTKHAgKyAzKTsKIAogCWlmIChuZG8tPm5kb19lZmxhZykgewotCQljb25zdCBzdHJ1Y3QgdG9rICp0b2sgPSBudWxsX3ZhbHVlczsKLQkJY29uc3Qgc3RydWN0IG91aV90b2sgKm90cDsKLQotCQlmb3IgKG90cCA9ICZvdWlfdG9fdG9rWzBdOyBvdHAtPnRvayAhPSBOVUxMOyBvdHArKykgewotCQkJaWYgKG90cC0+b3VpID09IG9yZ2NvZGUpIHsKLQkJCQl0b2sgPSBvdHAtPnRvazsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCQlORF9QUklOVCgobmRvLCAib3VpICVzICgweCUwNngpLCAlcyAlcyAoMHglMDR4KTogIiwKKwkJLyoKKwkJICogU29tZWJvZHkncyBhbHJlYWR5IHByaW50ZWQgdGhlIE1BQyBhZGRyZXNzZXMsIGlmIHRoZXJlCisJCSAqIGFyZSBhbnksIHNvIGp1c3QgcHJpbnQgdGhlIFNOQVAgaGVhZGVyLCBub3QgdGhlIE1BQworCQkgKiBhZGRyZXNzZXMuCisJCSAqLworCQlORF9QUklOVCgobmRvLCAib3VpICVzICgweCUwNngpLCAlcyAlcyAoMHglMDR4KSwgbGVuZ3RoICV1OiAiLAogCQkgICAgIHRvazJzdHIob3VpX3ZhbHVlcywgIlVua25vd24iLCBvcmdjb2RlKSwKIAkJICAgICBvcmdjb2RlLAogCQkgICAgIChvcmdjb2RlID09IDB4MDAwMDAwID8gImV0aGVydHlwZSIgOiAicGlkIiksCi0JCSAgICAgdG9rMnN0cih0b2ssICJVbmtub3duIiwgZXQpLAotCQkgICAgIGV0KSk7CisJCSAgICAgdG9rMnN0cihvdWlfdG9fc3RydWN0X3Rvayhvcmdjb2RlKSwgIlVua25vd24iLCBldCksCisJCSAgICAgZXQsIGxlbmd0aCAtIDUpKTsKIAl9CiAJcCArPSA1OwogCWxlbmd0aCAtPSA1OwpAQCAtNDA4LDcgKzQ1Nyw3IEBACiAJCSAqIENpc2NvIGhhcmR3YXJlOyB0aGUgcHJvdG9jb2wgSUQgaXMKIAkJICogYW4gRXRoZXJuZXQgcHJvdG9jb2wgdHlwZS4KIAkJICovCi0JCXJldCA9IGV0aGVydHlwZV9wcmludChuZG8sIGV0LCBwLCBsZW5ndGgsIGNhcGxlbik7CisJCXJldCA9IGV0aGVydHlwZV9wcmludChuZG8sIGV0LCBwLCBsZW5ndGgsIGNhcGxlbiwgc3JjLCBkc3QpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIChyZXQpOwogCQlicmVhazsKQEAgLTQyMyw3ICs0NzIsNyBAQAogCQkJICogYnV0IHVzZWQgMHgwMDAwMDAgYW5kIGFuIEV0aGVybmV0CiAJCQkgKiBwYWNrZXQgdHlwZSBmb3IgQUFSUCBwYWNrZXRzLgogCQkJICovCi0JCQlyZXQgPSBldGhlcnR5cGVfcHJpbnQobmRvLCBldCwgcCwgbGVuZ3RoLCBjYXBsZW4pOworCQkJcmV0ID0gZXRoZXJ0eXBlX3ByaW50KG5kbywgZXQsIHAsIGxlbmd0aCwgY2FwbGVuLCBzcmMsIGRzdCk7CiAJCQlpZiAocmV0KQogCQkJCXJldHVybiAocmV0KTsKIAkJfQpAQCAtNTIyLDYgKzU3MSwzMyBAQAogCQkJcmV0dXJuICgxKTsKIAkJfQogCX0KKwlpZiAoIW5kby0+bmRvX2VmbGFnKSB7CisJCS8qCisJCSAqIE5vYm9keSBwcmludGVkIHRoZSBsaW5rLWxheWVyIGFkZHJlc3Nlcywgc28gcHJpbnQgdGhlbSwgaWYKKwkJICogd2UgaGF2ZSBhbnkuCisJCSAqLworCQlpZiAoc3JjICE9IE5VTEwgJiYgZHN0ICE9IE5VTEwpIHsKKwkJCU5EX1BSSU5UKChuZG8sICIlcyA+ICVzICIsCisJCQkJKHNyYy0+YWRkcl9zdHJpbmcpKG5kbywgc3JjLT5hZGRyKSwKKwkJCQkoZHN0LT5hZGRyX3N0cmluZykobmRvLCBkc3QtPmFkZHIpKSk7CisJCX0KKwkJLyoKKwkJICogUHJpbnQgdGhlIFNOQVAgaGVhZGVyLCBidXQgaWYgdGhlIE9VSSBpcyAwMDAwMDAsIGRvbid0CisJCSAqIGJvdGhlciBwcmludGluZyBpdCwgYW5kIHJlcG9ydCB0aGUgUElEIGFzIGJlaW5nIGFuCisJCSAqIGV0aGVydHlwZS4KKwkJICovCisJCWlmIChvcmdjb2RlID09IDB4MDAwMDAwKSB7CisJCQlORF9QUklOVCgobmRvLCAiU05BUCwgZXRoZXJ0eXBlICVzICgweCUwNHgpLCBsZW5ndGggJXU6ICIsCisJCQkgICAgIHRvazJzdHIoZXRoZXJ0eXBlX3ZhbHVlcywgIlVua25vd24iLCBldCksCisJCQkgICAgIGV0LCBsZW5ndGgpKTsKKwkJfSBlbHNlIHsKKwkJCU5EX1BSSU5UKChuZG8sICJTTkFQLCBvdWkgJXMgKDB4JTA2eCksIHBpZCAlcyAoMHglMDR4KSwgbGVuZ3RoICV1OiAiLAorCQkJICAgICB0b2syc3RyKG91aV92YWx1ZXMsICJVbmtub3duIiwgb3JnY29kZSksCisJCQkgICAgIG9yZ2NvZGUsCisJCQkgICAgIHRvazJzdHIob3VpX3RvX3N0cnVjdF90b2sob3JnY29kZSksICJVbmtub3duIiwgZXQpLAorCQkJICAgICBldCwgbGVuZ3RoKSk7CisJCX0KKwl9CiAJcmV0dXJuICgwKTsKIAogdHJ1bmM6CmRpZmYgLS1naXQgYS9wcmludC1sbGRwLmMgYi9wcmludC1sbGRwLmMKaW5kZXggY2UzYzA5My4uNzMwYjM2ZiAxMDA2NDQKLS0tIGEvcHJpbnQtbGxkcC5jCisrKyBiL3ByaW50LWxsZHAuYwpAQCAtMTIsMjMgKzEyLDIyIEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIHN1cHBvcnQgZm9yIHRoZSBJRUVFIExpbmsgRGlzY292ZXJ5IFByb3RvY29sIGFzIHBlciA4MDIuMUFCCi0gKgogICogT3JpZ2luYWwgY29kZSBieSBIYW5uZXMgR3JlZGxlciAoaGFubmVzQGp1bmlwZXIubmV0KQogICogSUVFRSBhbmQgVElBIGV4dGVuc2lvbnMgYnkgQ2FybGVzIEtpc2hpbW90byA8Y2FybGVzLmtpc2hpbW90b0BnbWFpbC5jb20+CiAgKiBEQ0JYIGV4dGVuc2lvbnMgYnkgS2FsYWRoYXIgTXVzdW51cnUgPGthbGFkaGFybUBzb3VyY2Vmb3JnZS5uZXQ+CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSUVFRSA4MDIuMWFiIExpbmsgTGF5ZXIgRGlzY292ZXJ5IFByb3RvY29sIChMTERQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJhZi5oIgpAQCAtNjAyLDYgKzYwMSwxNCBAQAogI2RlZmluZSBMTERQX1BSSVZBVEVfODAyMV9TVUJUWVBFX0VWQl9MRU5HVEggICAgICAgICAgICAgICAgICAgICAgOQogI2RlZmluZSBMTERQX1BSSVZBVEVfODAyMV9TVUJUWVBFX0NEQ1BfTUlOX0xFTkdUSCAgICAgICAgICAgICAgICAgOAogCisjZGVmaW5lIExMRFBfSUFOQV9TVUJUWVBFX01VRFVSTCAxCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGxsZHBfaWFuYV9zdWJ0eXBlX3ZhbHVlc1tdID0gICB7CisgICAgeyBMTERQX0lBTkFfU1VCVFlQRV9NVURVUkwsICJNVUQtVVJMIiB9LAorICAgIHsgMCwgTlVMTCB9Cit9OworCisKIHN0YXRpYyB2b2lkCiBwcmludF9ldHNfcHJpb3JpdHlfYXNzaWdubWVudF90YWJsZShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcHRyKQpAQCAtOTE1LDYgKzkyMiw0MCBAQAogICAgIHJldHVybiBsYXRsb247CiB9CiAKKy8qIG9iamVjdHMgZGVmaW5lZCBpbiBJQU5BIHN1YnR5cGUgMDAgMDAgNWUKKyAqIChyaWdodCBub3cgdGhlcmUgaXMgb25seSBvbmUpCisgKi8KKworIAorc3RhdGljIGludAorbGxkcF9wcml2YXRlX2lhbmFfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnRwdHIsIHVfaW50IHRsdl9sZW4pCit7CisgICAgaW50IHN1YnR5cGUsIGhleGR1bXAgPSBGQUxTRTsKKworICAgIGlmICh0bHZfbGVuIDwgOCkgeworICAgICAgICByZXR1cm4gaGV4ZHVtcDsKKyAgICB9CisgICAgc3VidHlwZSA9ICoodHB0ciszKTsKKworICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAlcyBTdWJ0eXBlICgldSkiLAorICAgICAgICAgICB0b2syc3RyKGxsZHBfaWFuYV9zdWJ0eXBlX3ZhbHVlcywgInVua25vd24iLCBzdWJ0eXBlKSwKKyAgICAgICAgICAgc3VidHlwZSkpOworCisgICAgc3dpdGNoIChzdWJ0eXBlKSB7CisgICAgY2FzZSBMTERQX0lBTkFfU1VCVFlQRV9NVURVUkw6CisgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNVUQtVVJMPSIpKTsKKyAgICAgICAgKHZvaWQpZm5fcHJpbnRuKG5kbywgdHB0cis0LCB0bHZfbGVuLTQsIE5VTEwpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBoZXhkdW1wPVRSVUU7CisgICAgfQorICAgIAorICAgIHJldHVybiBoZXhkdW1wOworfQorCisKKyAgICAgIAogLyoKICAqIFByaW50IHByaXZhdGUgVElBIGV4dGVuc2lvbnMuCiAgKi8KQEAgLTEyNzksMTUgKzEzMjAsMTUgQEAKICAgICBjYXNlIEFGTlVNX0lORVQ6CiAgICAgICAgIGlmIChsZW4gPCA0KQogICAgICAgICAgIHJldHVybiBOVUxMOworICAgICAgICAvKiBUaGlzIGNhbm5vdCBiZSBhc3NpZ25lZCB0byBpcGFkZHJfc3RyaW5nKCksIHdoaWNoIGlzIGEgbWFjcm8uICovCiAgICAgICAgIHBmdW5jID0gZ2V0bmFtZTsKICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKICAgICBjYXNlIEFGTlVNX0lORVQ2OgogICAgICAgICBpZiAobGVuIDwgMTYpCiAgICAgICAgICAgcmV0dXJuIE5VTEw7CisgICAgICAgIC8qIFRoaXMgY2Fubm90IGJlIGFzc2lnbmVkIHRvIGlwNmFkZHJfc3RyaW5nKCksIHdoaWNoIGlzIGEgbWFjcm8uICovCiAgICAgICAgIHBmdW5jID0gZ2V0bmFtZTY7CiAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgY2FzZSBBRk5VTV84MDI6CiAgICAgICAgIGlmIChsZW4gPCA2KQogICAgICAgICAgIHJldHVybiBOVUxMOwpAQCAtMTU3NCw2ICsxNjE1LDkgQEAKICAgICAgICAgICAgICAgICBjYXNlIE9VSV9JRUVFXzgwMjNfUFJJVkFURToKICAgICAgICAgICAgICAgICAgICAgaGV4ZHVtcCA9IGxsZHBfcHJpdmF0ZV84MDIzX3ByaW50KG5kbywgdHB0ciwgdGx2X2xlbik7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCQljYXNlIE9VSV9JQU5BOgorICAgICAgICAgICAgICAgICAgICBoZXhkdW1wID0gbGxkcF9wcml2YXRlX2lhbmFfcHJpbnQobmRvLCB0cHRyLCB0bHZfbGVuKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBPVUlfVElBOgogICAgICAgICAgICAgICAgICAgICBoZXhkdW1wID0gbGxkcF9wcml2YXRlX3RpYV9wcmludChuZG8sIHRwdHIsIHRsdl9sZW4pOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL3ByaW50LWxtcC5jIGIvcHJpbnQtbG1wLmMKaW5kZXggOTA0ZGQ3MS4uMWM3NzEwYyAxMDA2NDQKLS0tIGEvcHJpbnQtbG1wLmMKKysrIGIvcHJpbnQtbG1wLmMKQEAgLTEwLDIxICsxMCwyMiBAQAogICogTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqCi0gKiBTdXBwb3J0IGZvciB0aGUgTGluayBNYW5hZ2VtZW50IFByb3RvY29sIGFzIHBlciByZmMgNDIwNC4KLSAqCiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKiBTdXBwb3J0IGZvciBMTVAgc2VydmljZSBkaXNjb3ZlcnkgZXh0ZW5zaW9ucyAoZGVmaW5lZCBieSBVTkkgMS4wKSBhZGRlZAogICogYnkgTWFudSBQYXRoYWsgKG1hcGF0aGFrQGNpc2NvLmNvbSksIE1heSAyMDA1CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTGluayBNYW5hZ2VtZW50IFByb3RvY29sIChMTVApIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDQyMDQgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZ21wbHMuaCIKQEAgLTQ1OSwxNCArNDYwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBvYmpfdHB0ciksCiAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKG9ial90cHRyKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICBjYXNlIExNUF9DVFlQRV9JUFY2X0xPQzoKICAgICAgICAgICAgIGNhc2UgTE1QX0NUWVBFX0lQVjZfUk1UOgogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIElQdjYgTGluayBJRDogJXMgKDB4JTA4eCkiLAogICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIG9ial90cHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMob2JqX3RwdHIpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgIGNhc2UgTE1QX0NUWVBFX1VOTURfTE9DOgogICAgICAgICAgICAgY2FzZSBMTVBfQ1RZUEVfVU5NRF9STVQ6CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgTGluayBJRDogJXUgKDB4JTA4eCkiLApAQCAtNTUxLDkgKzU1MCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKG9ial90cHRyKzgpKSk7CiAJCWJyZWFrOwogCi0jaWZkZWYgSU5FVDYKIAkgICAgY2FzZSBMTVBfQ1RZUEVfSVBWNjoKLSNlbmRpZgogCSAgICBjYXNlIExNUF9DVFlQRV9VTk1EOgogICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICBoZXhkdW1wPVRSVUU7CkBAIC02MjAsOSArNjE3LDcgQEAKIAkJfQogCiAJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJICAgIGNhc2UgTE1QX0NUWVBFX0lQVjY6Ci0jZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaGV4ZHVtcD1UUlVFOwogICAgICAgICAgICAgfQpAQCAtNzA5LDkgKzcwNCw3IEBACiAJCQlvZmZzZXQrPTg7CiAJCX0KICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBJTkVUNgogCSAgICBjYXNlIExNUF9DVFlQRV9JUFY2OgotI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsKICAgICAgICAgICAgIH0KQEAgLTcyOSw5ICs3MjIsNyBAQAogCQkJb2Zmc2V0Kz00OwogCQl9CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAkgICAgY2FzZSBMTVBfQ1RZUEVfSVBWNjoKLSNlbmRpZgogCSAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsKICAgICAgICAgICAgIH0KQEAgLTg1MSw3ICs4NDIsNyBAQAogCiAJICAgIGRlZmF1bHQ6CiAJCWhleGR1bXAgPSBUUlVFOwotCSAgICB9OworCSAgICB9CiAKIAlicmVhazsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtbG9vcGJhY2suYyBiL3ByaW50LWxvb3BiYWNrLmMKaW5kZXggOWE3NGFlNi4uMTBmNjkzMSAxMDA2NDQKLS0tIGEvcHJpbnQtbG9vcGJhY2suYworKysgYi9wcmludC1sb29wYmFjay5jCkBAIC0xLDkgKzEsNCBAQAogLyoKLSAqIFRoaXMgbW9kdWxlIGltcGxlbWVudHMgZGVjb2Rpbmcgb2YgdGhlIExvb3BiYWNrIFByb3RvY29sLCBvcmlnaW5hbGx5Ci0gKiBkZWZpbmVkIGFzIHRoZSBDb25maWd1cmF0aW9uIFRlc3RpbmcgUHJvdG9jb2wuIEl0IGlzIGJhc2VkIG9uIHRoZSBmb2xsb3dpbmcKLSAqIHNwZWNpZmljYXRpb246Ci0gKiBodHRwOi8vd3d3Lm1pdC5lZHUvcGVvcGxlL2poYXdrL2N0cC5wZGYKLSAqCiAgKiBDb3B5cmlnaHQgKGMpIDIwMTQgVGhlIFRDUERVTVAgcHJvamVjdAogICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCkBAIC0zMCwyMCArMjUsMjUgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IExvb3BiYWNrIFByb3RvY29sIHByaW50ZXIgKi8KKworLyoKKyAqIG9yaWdpbmFsbHkgZGVmaW5lZCBhcyB0aGUgRXRoZXJuZXQgQ29uZmlndXJhdGlvbiBUZXN0aW5nIFByb3RvY29sLgorICogc3BlY2lmaWNhdGlvbjogaHR0cDovL3d3dy5taXQuZWR1L3Blb3BsZS9qaGF3ay9jdHAucGRmCisgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJldGhlci5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfGxvb3BiYWNrXSI7Ci1zdGF0aWMgY29uc3QgY2hhciBjc3RyW10gPSAiIChjb3JydXB0KSI7CiAKICNkZWZpbmUgTE9PUEJBQ0tfUkVQTFkgICAxCiAjZGVmaW5lIExPT1BCQUNLX0ZXRERBVEEgMgpAQCAtNjEsNyArNjEsNyBAQAogCXVpbnQxNl90IGZ1bmN0aW9uOwogCiAJaWYgKGxlbiA8IDIpCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIGZ1bmN0aW9uICovCiAJTkRfVENIRUNLMigqY3AsIDIpOwogCWZ1bmN0aW9uID0gRVhUUkFDVF9MRV8xNkJJVFMoY3ApOwpAQCAtNzEsNyArNzEsNyBAQAogCXN3aXRjaCAoZnVuY3Rpb24pIHsKIAkJY2FzZSBMT09QQkFDS19SRVBMWToKIAkJCWlmIChsZW4gPCA0KQotCQkJCWdvdG8gY29ycnVwdDsKKwkJCQlnb3RvIGludmFsaWQ7CiAJCQkvKiByZWNlaXB0IG51bWJlciAqLwogCQkJTkRfVENIRUNLMigqY3AsIDIpOwogCQkJTkRfUFJJTlQoKG5kbywgIiwgcmVjZWlwdCBudW1iZXIgJXUiLCBFWFRSQUNUX0xFXzE2QklUUyhjcCkpKTsKQEAgLTgyLDcgKzgyLDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIExPT1BCQUNLX0ZXRERBVEE6CiAJCQlpZiAobGVuIDwgOCkKLQkJCQlnb3RvIGNvcnJ1cHQ7CisJCQkJZ290byBpbnZhbGlkOwogCQkJLyogZm9yd2FyZGluZyBhZGRyZXNzICovCiAJCQlORF9UQ0hFQ0syKCpjcCwgRVRIRVJfQUREUl9MRU4pOwogCQkJTkRfUFJJTlQoKG5kbywgIiwgZm9yd2FyZGluZyBhZGRyZXNzICVzIiwgZXRoZXJhZGRyX3N0cmluZyhuZG8sIGNwKSkpOwpAQCAtOTcsOCArOTcsOCBAQAogCX0KIAlyZXR1cm47CiAKLWNvcnJ1cHQ6Ci0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDoKKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AsIGVwIC0gY3ApOwogCXJldHVybjsKIHRydW5jOgpAQCAtMTEzLDcgKzExMyw3IEBACiAKIAlORF9QUklOVCgobmRvLCAiTG9vcGJhY2siKSk7CiAJaWYgKGxlbiA8IDIpCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIHNraXBDb3VudCAqLwogCU5EX1RDSEVDSzIoKmNwLCAyKTsKIAlza2lwQ291bnQgPSBFWFRSQUNUX0xFXzE2QklUUyhjcCk7CkBAIC0xMjIsMTIgKzEyMiwxMiBAQAogCWlmIChza2lwQ291bnQgJSA4KQogCQlORF9QUklOVCgobmRvLCAiIChib2d1cykiKSk7CiAJaWYgKHNraXBDb3VudCA+IGxlbiAtIDIpCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCWxvb3BiYWNrX21lc3NhZ2VfcHJpbnQobmRvLCBjcCArIHNraXBDb3VudCwgbGVuIC0gMiAtIHNraXBDb3VudCk7CiAJcmV0dXJuOwogCi1jb3JydXB0OgotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBlcCAtIGNwKTsKIAlyZXR1cm47CiB0cnVuYzoKZGlmZiAtLWdpdCBhL3ByaW50LWxzcHBpbmcuYyBiL3ByaW50LWxzcHBpbmcuYwppbmRleCA4ODhhZGZhLi40ZDI2MGRiIDEwMDY0NAotLS0gYS9wcmludC1sc3BwaW5nLmMKKysrIGIvcHJpbnQtbHNwcGluZy5jCkBAIC0xMywyMCArMTMsMjMgQEAKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBNUExTIExTUCBQSU5HIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKICNpbmNsdWRlICJsMnZwbi5oIgogI2luY2x1ZGUgIm91aS5oIgogCisvKiBSRkMgNDM0OSAqLworCiAvKgogICogTFNQUElORyBjb21tb24gaGVhZGVyCiAgKgpAQCAtNTcsNyArNjAsNyBAQAogCiBzdHJ1Y3QgbHNwcGluZ19jb21tb25faGVhZGVyIHsKICAgICB1aW50OF90IHZlcnNpb25bMl07Ci0gICAgdWludDhfdCByZXNlcnZlZFsyXTsKKyAgICB1aW50OF90IGdsb2JhbF9mbGFnc1syXTsKICAgICB1aW50OF90IG1zZ190eXBlOwogICAgIHVpbnQ4X3QgcmVwbHlfbW9kZTsKICAgICB1aW50OF90IHJldHVybl9jb2RlOwpAQCAtMTAwLDYgKzEwMyw3IEBACiAgICAgeyAxMCwgIk1hcHBpbmcgZm9yIHRoaXMgRkVDIGlzIG5vdCB0aGUgZ2l2ZW4gbGFiZWwgYXQgc3RhY2sgZGVwdGgifSwKICAgICB7IDExLCAiTm8gbGFiZWwgZW50cnkgYXQgc3RhY2stZGVwdGgifSwKICAgICB7IDEyLCAiUHJvdG9jb2wgbm90IGFzc29jaWF0ZWQgd2l0aCBpbnRlcmZhY2UgYXQgRkVDIHN0YWNrIGRlcHRoIn0sCisgICAgeyAxMywgIlByZW1hdHVyZSB0ZXJtaW5hdGlvbiBvZiBwaW5nIGR1ZSB0byBsYWJlbCBzdGFjayBzaHJpbmtpbmcgdG8gYSBzaW5nbGUgbGFiZWwifSwKIH07CiAKIApAQCAtMTI2LDkgKzEzMCwxMiBAQAogI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRfRkVDX1NUQUNLICAgICAgMQogI2RlZmluZQlMU1BQSU5HX1RMVl9ET1dOU1RSRUFNX01BUFBJTkcgICAgMgogI2RlZmluZQlMU1BQSU5HX1RMVl9QQUQgICAgICAgICAgICAgICAgICAgMworLyogbm90IGFzc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgNCAqLwogI2RlZmluZSBMU1BQSU5HX1RMVl9WRU5ET1JfRU5URVJQUklTRSAgICAgNQogI2RlZmluZSBMU1BQSU5HX1RMVl9WRU5ET1JfRU5URVJQUklTRV9MRU4gNAorLyogbm90IGFzc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgNiAqLwogI2RlZmluZSBMU1BQSU5HX1RMVl9JTlRFUkZBQ0VfTEFCRUxfU1RBQ0sgNworLyogbm90IGFzc2lnbmVkICAgICAgICAgICAgICAgICAgICAgICAgICAgOCAqLwogI2RlZmluZQlMU1BQSU5HX1RMVl9FUlJPUl9DT0RFICAgICAgICAgICAgOQogI2RlZmluZSBMU1BQSU5HX1RMVl9SRVBMWV9UT1NfQllURSAgICAgICAgMTAKICNkZWZpbmUJTFNQUElOR19UTFZfQkZEX0RJU0NSSU1JTkFUT1IgICAgIDE1IC8qIGRyYWZ0LWlldGYtYmZkLW1wbHMtMDIgKi8KQEAgLTE0OCwxNyArMTU1LDIyIEBACiAgICAgeyAwLCBOVUxMfQogfTsKIAotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0xEUF9JUFY0ICAgICAgMQotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0xEUF9JUFY2ICAgICAgMgotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX1JTVlBfSVBWNCAgICAgMwotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX1JTVlBfSVBWNiAgICAgNAotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wzVlBOX0lQVjQgICAgNgotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wzVlBOX0lQVjYgICAgNwotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wyVlBOX0VORFBUICAgOAotI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wyVlBOX1ZDSURfT0xEIDkKLSNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MMlZQTl9WQ0lEICAgMTAKLSNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9CR1BfSVBWNCAgICAgMTEKLSNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9CR1BfSVBWNiAgICAgMTIKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MRFBfSVBWNCAgICAgICAxCisjZGVmaW5lCUxTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfTERQX0lQVjYgICAgICAgMgorI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX1JTVlBfSVBWNCAgICAgIDMKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9SU1ZQX0lQVjYgICAgICA0CisvKiBub3QgYXNzaWduZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNSAqLworI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wzVlBOX0lQVjQgICAgIDYKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MM1ZQTl9JUFY2ICAgICA3CisjZGVmaW5lCUxTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfTDJWUE5fRU5EUFQgICAgOAorI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0ZFQ18xMjhfUFdfT0xEIDkKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9GRUNfMTI4X1BXICAgICAxMAorI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0ZFQ18xMjlfUFcgICAgIDExCisjZGVmaW5lCUxTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfQkdQX0lQVjQgICAgICAgMTIKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9CR1BfSVBWNiAgICAgICAxMworI2RlZmluZQlMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0dFTkVSSUNfSVBWNCAgIDE0CisjZGVmaW5lCUxTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfR0VORVJJQ19JUFY2ICAgMTUKKyNkZWZpbmUJTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9OSUxfRkVDICAgICAgICAxNgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBsc3BwaW5nX3RsdnRhcmdldGZlY19zdWJ0bHZfdmFsdWVzW10gPSB7CiAgICAgeyBMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0xEUF9JUFY0LCAiTERQIElQdjQgcHJlZml4In0sCkBAIC0xNjksOCArMTgxLDggQEAKICAgICB7IExTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfTDNWUE5fSVBWNCwgIlZQTiBJUHY0IHByZWZpeCJ9LAogICAgIHsgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MM1ZQTl9JUFY2LCAiVlBOIElQdjYgcHJlZml4In0sCiAgICAgeyBMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wyVlBOX0VORFBULCAiTDIgVlBOIGVuZHBvaW50In0sCi0gICAgeyBMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wyVlBOX1ZDSURfT0xELCAiTDIgY2lyY3VpdCBJRCAob2xkKSJ9LAotICAgIHsgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MMlZQTl9WQ0lELCAiTDIgY2lyY3VpdCBJRCJ9LAorICAgIHsgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9GRUNfMTI4X1BXX09MRCwgIkZFQyAxMjggcHNldWRvd2lyZSAob2xkKSJ9LAorICAgIHsgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9GRUNfMTI4X1BXLCAiRkVDIDEyOCBwc2V1ZG93aXJlIn0sCiAgICAgeyBMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0JHUF9JUFY0LCAiQkdQIGxhYmVsZWQgSVB2NCBwcmVmaXgifSwKICAgICB7IExTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfQkdQX0lQVjYsICJCR1AgbGFiZWxlZCBJUHY2IHByZWZpeCJ9LAogICAgIHsgMCwgTlVMTH0KQEAgLTIwOCw0NCArMjIwLDYgQEAKIH07CiAKIC8qCi0gKiAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8ICAgICAgICAgICAgICAgICAgICBTZW5kZXIgaWRlbnRpZmllciAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NCBwcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCBQcmVmaXggTGVuZ3RoIHwgICAgICAgICAgICAgICAgIE11c3QgQmUgWmVybyAgICAgICAgICAgICAgICAgIHwKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKi8KLXN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0X3QgewotICAgIHVpbnQ4X3Qgc2VuZGVyX2lkIFs0XTsKLSAgICB1aW50OF90IHByZWZpeCBbNF07Ci0gICAgdWludDhfdCBwcmVmaXhfbGVuOwotfTsKLQotLyoKLSAqIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqIHwgICAgICAgICAgICAgICAgICAgIFNlbmRlciBpZGVudGlmaWVyICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAoMTYgb2N0ZXRzKSAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NiBwcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICgxNiBvY3RldHMpICAgICAgICAgICAgICAgICAgICAgICAgICB8Ci0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKLSAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8IFByZWZpeCBMZW5ndGggfCAgICAgICAgICAgICAgICAgTXVzdCBCZSBaZXJvICAgICAgICAgICAgICAgICAgfAotICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLSAqLwotc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjZfdCB7Ci0gICAgdWludDhfdCBzZW5kZXJfaWQgWzE2XTsKLSAgICB1aW50OF90IHByZWZpeCBbMTZdOwotICAgIHVpbnQ4X3QgcHJlZml4X2xlbjsKLX07Ci0KLS8qCiAgKiAgMCAgICAgICAgICAgICAgICAgICAxICAgICAgICAgICAgICAgICAgIDIgICAgICAgICAgICAgICAgICAgMwogICogIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQogICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKQEAgLTM1MCw3ICszMjQsNyBAQAogICogfCAgICAgICAgICAgICAgICAgICAgICBSb3V0ZSBEaXN0aW5ndWlzaGVyICAgICAgICAgICAgICAgICAgICAgIHwKICAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICg4IG9jdGV0cykgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCAgICAgICAgIFNlbmRlcidzIENFIElEICAgICAgICB8ICAgICAgIFJlY2VpdmVyJ3MgQ0UgSUQgICAgICAgIHwKKyAqIHwgICAgICAgICBTZW5kZXIncyBWRSBJRCAgICAgICAgfCAgICAgICBSZWNlaXZlcidzIFZFIElEICAgICAgICB8CiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICogfCAgICAgIEVuY2Fwc3VsYXRpb24gVHlwZSAgICAgICB8ICAgICAgICAgTXVzdCBCZSBaZXJvICAgICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCkBAIC0zNTgsOCArMzMyLDggQEAKICAqLwogc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fZW5kcHRfdCB7CiAgICAgdWludDhfdCByZCBbOF07Ci0gICAgdWludDhfdCBzZW5kZXJfY2VfaWQgWzJdOwotICAgIHVpbnQ4X3QgcmVjZWl2ZXJfY2VfaWQgWzJdOworICAgIHVpbnQ4X3Qgc2VuZGVyX3ZlX2lkIFsyXTsKKyAgICB1aW50OF90IHJlY2VpdmVyX3ZlX2lkIFsyXTsKICAgICB1aW50OF90IGVuY2Fwc3VsYXRpb25bMl07CiB9OwogCkBAIC0zNjgsMTUgKzM0MiwxNSBAQAogICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAqIHwgICAgICAgICAgICAgICAgICAgICAgUmVtb3RlIFBFIEFkZHJlc3MgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVkMgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFBXIElEICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8CiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwotICogfCAgICAgIEVuY2Fwc3VsYXRpb24gVHlwZSAgICAgICB8ICAgICAgICAgTXVzdCBCZSBaZXJvICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgICBQVyBUeXBlICAgICAgICAgICAgfCAgICAgICAgICBNdXN0IEJlIFplcm8gICAgICAgICB8CiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICovCi1zdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX29sZF90IHsKK3N0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2ZlY18xMjhfcHdfb2xkIHsKICAgICB1aW50OF90IHJlbW90ZV9wZV9hZGRyZXNzIFs0XTsKLSAgICB1aW50OF90IHZjX2lkIFs0XTsKLSAgICB1aW50OF90IGVuY2Fwc3VsYXRpb25bMl07CisgICAgdWludDhfdCBwd19pZCBbNF07CisgICAgdWludDhfdCBwd190eXBlWzJdOwogfTsKIAogLyoKQEAgLTM4NiwxNiArMzYwLDQ1IEBACiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICogfCAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgUEUgQWRkcmVzcyAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQyBJRCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUFcgSUQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8ICAgICAgRW5jYXBzdWxhdGlvbiBUeXBlICAgICAgIHwgICAgICAgICBNdXN0IEJlIFplcm8gICAgICAgICAgfAorICogfCAgICAgICAgICAgIFBXIFR5cGUgICAgICAgICAgICB8ICAgICAgICAgIE11c3QgQmUgWmVybyAgICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgKi8KLXN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfdCB7CitzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9mZWNfMTI4X3B3IHsKICAgICB1aW50OF90IHNlbmRlcl9wZV9hZGRyZXNzIFs0XTsKICAgICB1aW50OF90IHJlbW90ZV9wZV9hZGRyZXNzIFs0XTsKLSAgICB1aW50OF90IHZjX2lkIFs0XTsKLSAgICB1aW50OF90IGVuY2Fwc3VsYXRpb25bMl07CisgICAgdWludDhfdCBwd19pZCBbNF07CisgICAgdWludDhfdCBwd190eXBlWzJdOworfTsKKworLyoKKyAqIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NCBwcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogfCBQcmVmaXggTGVuZ3RoIHwgICAgICAgICAgICAgICAgIE11c3QgQmUgWmVybyAgICAgICAgICAgICAgICAgIHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKi8KK3N0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0X3QgeworICAgIHVpbnQ4X3QgcHJlZml4IFs0XTsKKyAgICB1aW50OF90IHByZWZpeF9sZW47Cit9OworCisvKgorICogMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgSVB2NiBwcmVmaXggICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqIHwgICAgICAgICAgICAgICAgICAgICAgICAgICgxNiBvY3RldHMpICAgICAgICAgICAgICAgICAgICAgICAgICB8CisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8IFByZWZpeCBMZW5ndGggfCAgICAgICAgICAgICAgICAgTXVzdCBCZSBaZXJvICAgICAgICAgICAgICAgICAgfAorICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqLworc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjZfdCB7CisgICAgdWludDhfdCBwcmVmaXggWzE2XTsKKyAgICB1aW50OF90IHByZWZpeF9sZW47CiB9OwogCiAvKgpAQCAtNDA4LDcgKzQxMSw3IEBACiAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICogfCAgICAgICAgIERvd25zdHJlYW0gSW50ZXJmYWNlIEFkZHJlc3MgKDQgb3IgMTYgb2N0ZXRzKSAgICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0gKiB8IEhhc2ggS2V5IFR5cGUgfCBEZXB0aCBMaW1pdCAgIHwgICAgICAgIE11bHRpcGF0aCBMZW5ndGggICAgICAgfAorICogfCBNdWx0aXBhdGggVHlwZXwgRGVwdGggTGltaXQgICB8ICAgICAgICBNdWx0aXBhdGggTGVuZ3RoICAgICAgIHwKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgKiAuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLgogICogLiAgICAgICAgICAgICAgICAgICAgIChNdWx0aXBhdGggSW5mb3JtYXRpb24pICAgICAgICAgICAgICAgICAgIC4KQEAgLTQyMywxMCArNDI2LDI1IEBACiAgKiB8ICAgICAgICAgICAgICAgRG93bnN0cmVhbSBMYWJlbCAgICAgICAgICAgICAgICB8ICAgIFByb3RvY29sICAgfAogICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAqLworLyogRW5vdWdoIHRvIGdldCB0aGUgYWRkcmVzcyB0eXBlICovCitzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfdCB7CisgICAgdWludDhfdCBtdHUgWzJdOworICAgIHVpbnQ4X3QgYWRkcmVzc190eXBlOworICAgIHVpbnQ4X3QgZHNfZmxhZ3M7Cit9OworCiBzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF90IHsKICAgICB1aW50OF90IG10dSBbMl07CiAgICAgdWludDhfdCBhZGRyZXNzX3R5cGU7Ci0gICAgdWludDhfdCByZXM7CisgICAgdWludDhfdCBkc19mbGFnczsKKyAgICB1aW50OF90IGRvd25zdHJlYW1faXBbNF07CisgICAgdWludDhfdCBkb3duc3RyZWFtX2ludGVyZmFjZVs0XTsKK307CisKK3N0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWJfdCB7CisgICAgdWludDhfdCBtdHUgWzJdOworICAgIHVpbnQ4X3QgYWRkcmVzc190eXBlOworICAgIHVpbnQ4X3QgZHNfZmxhZ3M7CiAgICAgdWludDhfdCBkb3duc3RyZWFtX2lwWzRdOwogICAgIHVpbnQ4X3QgZG93bnN0cmVhbV9pbnRlcmZhY2VbNF07CiB9OwpAQCAtNDM0LDI1ICs0NTIsMzUgQEAKIHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3QgewogICAgIHVpbnQ4X3QgbXR1IFsyXTsKICAgICB1aW50OF90IGFkZHJlc3NfdHlwZTsKLSAgICB1aW50OF90IHJlczsKKyAgICB1aW50OF90IGRzX2ZsYWdzOwogICAgIHVpbnQ4X3QgZG93bnN0cmVhbV9pcFsxNl07CiAgICAgdWludDhfdCBkb3duc3RyZWFtX2ludGVyZmFjZVsxNl07CiB9OwogCitzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl91bm1iX3QgeworICAgIHVpbnQ4X3QgbXR1IFsyXTsKKyAgICB1aW50OF90IGFkZHJlc3NfdHlwZTsKKyAgICB1aW50OF90IGRzX2ZsYWdzOworICAgIHVpbnQ4X3QgZG93bnN0cmVhbV9pcFsxNl07CisgICAgdWludDhfdCBkb3duc3RyZWFtX2ludGVyZmFjZVs0XTsKK307CisKIHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvX3QgewotICAgIHVpbnQ4X3QgaGFzaF9rZXlfdHlwZTsKKyAgICB1aW50OF90IG11bHRpcGF0aF90eXBlOwogICAgIHVpbnQ4X3QgZGVwdGhfbGltaXQ7CiAgICAgdWludDhfdCBtdWx0aXBhdGhfbGVuZ3RoIFsyXTsKIH07CiAKLSNkZWZpbmUgTFNQUElOR19BRklfSVBWNCAxCi0jZGVmaW5lIExTUFBJTkdfQUZJX1VOTUIgMgotI2RlZmluZSBMU1BQSU5HX0FGSV9JUFY2IDMKKyNkZWZpbmUgTFNQUElOR19BRklfSVBWNCAgICAgIDEKKyNkZWZpbmUgTFNQUElOR19BRklfSVBWNF9VTk1CIDIKKyNkZWZpbmUgTFNQUElOR19BRklfSVBWNiAgICAgIDMKKyNkZWZpbmUgTFNQUElOR19BRklfSVBWNl9VTk1CIDQKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgbHNwcGluZ190bHZfZG93bnN0cmVhbV9hZGRyX3ZhbHVlc1tdID0gewotICAgIHsgTFNQUElOR19BRklfSVBWNCwgIklQdjQifSwKLSAgICB7IExTUFBJTkdfQUZJX0lQVjYsICJJUHY2In0sCi0gICAgeyBMU1BQSU5HX0FGSV9VTk1CLCAiVW5udW1iZXJlZCJ9LAorICAgIHsgTFNQUElOR19BRklfSVBWNCwgICAgICAiSVB2NCJ9LAorICAgIHsgTFNQUElOR19BRklfSVBWNF9VTk1CLCAiVW5udW1iZXJlZCBJUHY0In0sCisgICAgeyBMU1BQSU5HX0FGSV9JUFY2LCAgICAgICJJUHY2In0sCisgICAgeyBMU1BQSU5HX0FGSV9JUFY2X1VOTUIsICJJUHY2In0sCiAgICAgeyAwLCBOVUxMfQogfTsKIApAQCAtNDY0LDE0ICs0OTIsMTcgQEAKICAgICBjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyICpsc3BwaW5nX3Rsdl9oZWFkZXI7CiAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlciAqbHNwcGluZ19zdWJ0bHZfaGVhZGVyOwogICAgIGNvbnN0IHVfY2hhciAqdHB0ciwqdGx2X3RwdHIsKnN1YnRsdl90cHRyOwotICAgIGludCB0bGVuLGxzcHBpbmdfdGx2X2xlbixsc3BwaW5nX3Rsdl90eXBlLHRsdl90bGVuOworICAgIHVfaW50IHRsZW4sbHNwcGluZ190bHZfbGVuLGxzcHBpbmdfdGx2X3R5cGUsdGx2X3RsZW47CiAgICAgaW50IHRsdl9oZXhkdW1wLHN1YnRsdl9oZXhkdW1wOwotICAgIGludCBsc3BwaW5nX3N1YnRsdl9sZW4sbHNwcGluZ19zdWJ0bHZfdHlwZTsKKyAgICB1X2ludCBsc3BwaW5nX3N1YnRsdl9sZW4sbHNwcGluZ19zdWJ0bHZfdHlwZTsKICAgICBzdHJ1Y3QgdGltZXZhbCB0aW1lc3RhbXA7CiAKICAgICB1bmlvbiB7CisgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF90ICpsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcDsKICAgICAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdCAqbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NDsKKyAgICAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdW5tYl90ICpsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWI7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3QgKmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjY7CisgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3VubWJfdCAqbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl91bm1iOwogICAgICAgICBjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaW5mb190ICAqbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaW5mbzsKICAgICB9IHRsdl9wdHI7CiAKQEAgLTQ4MywxNCArNTE0LDE2IEBACiAgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjRfdCAqbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY0OwogICAgICAgICBjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2X3QgKmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDN2cG5faXB2NjsKICAgICAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fZW5kcHRfdCAqbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl9lbmRwdDsKLSAgICAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZF9vbGRfdCAqbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX29sZDsKLSAgICAgICAgY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZF90ICpsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQ7CisgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2ZlY18xMjhfcHdfb2xkICpsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkOworICAgICAgICBjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9mZWNfMTI4X3B3ICpsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQ7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0X3QgKmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjQ7CiAgICAgICAgIGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY2X3QgKmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjY7CiAgICAgfSBzdWJ0bHZfcHRyOwogCiAgICAgdHB0cj1wcHRyOwogICAgIGxzcHBpbmdfY29tX2hlYWRlciA9IChjb25zdCBzdHJ1Y3QgbHNwcGluZ19jb21tb25faGVhZGVyICopcHB0cjsKKyAgICBpZiAobGVuIDwgc2l6ZW9mKGNvbnN0IHN0cnVjdCBsc3BwaW5nX2NvbW1vbl9oZWFkZXIpKQorICAgICAgICBnb3RvIHRvb3Nob3J0OwogICAgIE5EX1RDSEVDSygqbHNwcGluZ19jb21faGVhZGVyKTsKIAogICAgIC8qCkBAIC01NjUsNyArNTk4LDEwIEBACiAgICAgdHB0cis9c2l6ZW9mKGNvbnN0IHN0cnVjdCBsc3BwaW5nX2NvbW1vbl9oZWFkZXIpOwogICAgIHRsZW4tPXNpemVvZihjb25zdCBzdHJ1Y3QgbHNwcGluZ19jb21tb25faGVhZGVyKTsKIAotICAgIHdoaWxlKHRsZW4+KGludClzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpIHsKKyAgICB3aGlsZSAodGxlbiAhPSAwKSB7CisgICAgICAgIC8qIERvZXMgdGhlIFRMViBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIHBhY2tldD8gKi8KKyAgICAgICAgaWYgKHRsZW4gPCBzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpCisgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OwogCiAgICAgICAgIC8qIGRpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgZnVsbHkgZGVjb2RpbmcgdGhlIHRsdiBoZWFkZXIgPyAqLwogICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpOwpAQCAtNTc0LDE1ICs2MTAsNiBAQAogICAgICAgICBsc3BwaW5nX3Rsdl90eXBlPUVYVFJBQ1RfMTZCSVRTKGxzcHBpbmdfdGx2X2hlYWRlci0+dHlwZSk7CiAgICAgICAgIGxzcHBpbmdfdGx2X2xlbj1FWFRSQUNUXzE2QklUUyhsc3BwaW5nX3Rsdl9oZWFkZXItPmxlbmd0aCk7CiAKLSAgICAgICAgLyogc29tZSBsaXR0bGUgc2FuaXR5IGNoZWNraW5nICovCi0gICAgICAgIGlmIChsc3BwaW5nX3Rsdl90eXBlID09IDAgfHwgbHNwcGluZ190bHZfbGVuID09IDApCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgaWYobHNwcGluZ190bHZfbGVuIDwgNCkgewotICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIEVSUk9SOiBUTFYgJXUgYm9ndXMgc2l6ZSAldSIsbHNwcGluZ190bHZfdHlwZSxsc3BwaW5nX3Rsdl9sZW4pKTsKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgfQotCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAlcyBUTFYgKCV1KSwgbGVuZ3RoOiAldSIsCiAgICAgICAgICAgICAgICB0b2syc3RyKGxzcHBpbmdfdGx2X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iLApAQCAtNTkwLDE5ICs2MTcsMzQgQEAKICAgICAgICAgICAgICAgIGxzcHBpbmdfdGx2X3R5cGUsCiAgICAgICAgICAgICAgICBsc3BwaW5nX3Rsdl9sZW4pKTsKIAorICAgICAgICAvKiBzb21lIGxpdHRsZSBzYW5pdHkgY2hlY2tpbmcgKi8KKyAgICAgICAgaWYgKGxzcHBpbmdfdGx2X2xlbiA9PSAwKSB7CisgICAgICAgICAgICB0cHRyKz1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcik7CisgICAgICAgICAgICB0bGVuLT1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcik7CisgICAgICAgICAgICBjb250aW51ZTsgICAgLyogbm8gdmFsdWUgdG8gZGlzc2VjdCAqLworICAgICAgICB9CisKICAgICAgICAgdGx2X3RwdHI9dHB0citzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcik7CiAgICAgICAgIHRsdl90bGVuPWxzcHBpbmdfdGx2X2xlbjsgLyogaGVhZGVyIG5vdCBpbmNsdWRlZCAtPiBubyBhZGp1c3RtZW50ICovCiAKKyAgICAgICAgLyogRG9lcyB0aGUgVExWIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0PyAqLworICAgICAgICBpZiAodGxlbiA8IGxzcHBpbmdfdGx2X2xlbitzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpCisgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OwogICAgICAgICAvKiBkaWQgd2UgY2FwdHVyZSBlbm91Z2ggZm9yIGZ1bGx5IGRlY29kaW5nIHRoZSB0bHYgPyAqLwotICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBsc3BwaW5nX3Rsdl9sZW4pOworICAgICAgICBORF9UQ0hFQ0syKCp0bHZfdHB0ciwgbHNwcGluZ190bHZfbGVuKTsKICAgICAgICAgdGx2X2hleGR1bXA9RkFMU0U7CiAKICAgICAgICAgc3dpdGNoKGxzcHBpbmdfdGx2X3R5cGUpIHsKICAgICAgICAgY2FzZSBMU1BQSU5HX1RMVl9UQVJHRVRfRkVDX1NUQUNLOgotICAgICAgICAgICAgd2hpbGUodGx2X3RsZW4+KGludClzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpIHsKLQorICAgICAgICAgICAgd2hpbGUgKHRsdl90bGVuICE9IDApIHsKKyAgICAgICAgICAgICAgICAvKiBEb2VzIHRoZSBzdWJUTFYgaGVhZGVyIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgICAgIGlmICh0bHZfdGxlbiA8IHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyKSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFRMViBpcyB0b28gc2hvcnQiKSk7CisgICAgICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0bHZfdG9vc2hvcnQ7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8qIGRpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgZnVsbHkgZGVjb2RpbmcgdGhlIHN1YnRsdiBoZWFkZXIgPyAqLwotICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyKSk7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdGx2X3RwdHIsIHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyKSk7CiAgICAgICAgICAgICAgICAgc3VidGx2X2hleGR1bXA9RkFMU0U7CiAKICAgICAgICAgICAgICAgICBsc3BwaW5nX3N1YnRsdl9oZWFkZXIgPSAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlciAqKXRsdl90cHRyOwpAQCAtNjEwLDggKzY1MiwxNSBAQAogICAgICAgICAgICAgICAgIGxzcHBpbmdfc3VidGx2X2xlbj1FWFRSQUNUXzE2QklUUyhsc3BwaW5nX3N1YnRsdl9oZWFkZXItPmxlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3VidGx2X3RwdHI9dGx2X3RwdHIrc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9oZWFkZXIpOwogCi0gICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiA9PSAwKQotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAvKiBEb2VzIHRoZSBzdWJUTFYgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICAgICAgaWYgKHRsdl90bGVuIDwgbHNwcGluZ19zdWJ0bHZfbGVuK3NpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyKSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFRMViBpcyB0b28gc2hvcnQiKSk7CisgICAgICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0bHZfdG9vc2hvcnQ7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLyogRGlkIHdlIGNhcHR1cmUgZW5vdWdoIGZvciBmdWxseSBkZWNvZGluZyB0aGUgc3ViVExWPyAqLworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnN1YnRsdl90cHRyLCBsc3BwaW5nX3N1YnRsdl9sZW4pOwogCiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgJXMgc3ViVExWICgldSksIGxlbmd0aDogJXUiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGxzcHBpbmdfdGx2dGFyZ2V0ZmVjX3N1YnRsdl92YWx1ZXMsCkBAIC02MjMsMTMyICs2NzIsMTg1IEBACiAgICAgICAgICAgICAgICAgc3dpdGNoKGxzcHBpbmdfc3VidGx2X3R5cGUpIHsKIAogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MRFBfSVBWNDoKLSAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcy8ldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0LT5wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0LT5wcmVmaXhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIC8qIElzIHRoZSBzdWJUTFYgbGVuZ3RoIGNvcnJlY3Q/ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChsc3BwaW5nX3N1YnRsdl9sZW4gIT0gNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSA1IikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X2hleGR1bXA9VFJVRTsgLyogdW5rbm93biBzdWJUTFYganVzdCBoZXhkdW1wIGl0ICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbGRwX2lwdjQgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0X3QgKilzdWJ0bHZfdHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMvJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbGRwX2lwdjQtPnByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY0LT5wcmVmaXhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MRFBfSVBWNjoKLSAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY2ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY2X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcy8ldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sZHBfaXB2Ni0+cHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sZHBfaXB2Ni0+cHJlZml4X2xlbikpOworICAgICAgICAgICAgICAgICAgICAvKiBJcyB0aGUgc3ViVExWIGxlbmd0aCBjb3JyZWN0PyAqLworICAgICAgICAgICAgICAgICAgICBpZiAobHNwcGluZ19zdWJ0bHZfbGVuICE9IDE3KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIGludmFsaWQgc3ViVExWIGxlbmd0aCwgc2hvdWxkIGJlIDE3IikpOworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X2hleGR1bXA9VFJVRTsgLyogdW5rbm93biBzdWJUTFYganVzdCBoZXhkdW1wIGl0ICovCisgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbGRwX2lwdjYgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY2X3QgKilzdWJ0bHZfdHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMvJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2xkcF9pcHY2LT5wcmVmaXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sZHBfaXB2Ni0+cHJlZml4X2xlbikpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAKICAgICAgICAgICAgICAgICBjYXNlIExTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfQkdQX0lQVjQ6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NCA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NF90ICopc3VidGx2X3RwdHI7Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMvJXUsIHNlbmRlci1pZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0LT5wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0LT5wcmVmaXhfbGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NC0+c2VuZGVyX2lkKSkpOworICAgICAgICAgICAgICAgICAgICAvKiBJcyB0aGUgc3ViVExWIGxlbmd0aCBjb3JyZWN0PyAqLworICAgICAgICAgICAgICAgICAgICBpZiAobHNwcGluZ19zdWJ0bHZfbGVuICE9IDUpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgaW52YWxpZCBzdWJUTFYgbGVuZ3RoLCBzaG91bGQgYmUgNSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0ID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NF90ICopc3VidGx2X3RwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgICVzLyV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY0LT5wcmVmaXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NC0+cHJlZml4X2xlbikpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogCi0jaWZkZWYgSU5FVDYKICAgICAgICAgICAgICAgICBjYXNlIExTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfQkdQX0lQVjY6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NiA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2Nl90ICopc3VidGx2X3RwdHI7Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMvJXUsIHNlbmRlci1pZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2Ni0+cHJlZml4KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2Ni0+cHJlZml4X2xlbiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY2LT5zZW5kZXJfaWQpKSk7CisgICAgICAgICAgICAgICAgICAgIC8qIElzIHRoZSBzdWJUTFYgbGVuZ3RoIGNvcnJlY3Q/ICovCisgICAgICAgICAgICAgICAgICAgIGlmIChsc3BwaW5nX3N1YnRsdl9sZW4gIT0gMTcpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgaW52YWxpZCBzdWJUTFYgbGVuZ3RoLCBzaG91bGQgYmUgMTciKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfaGV4ZHVtcD1UUlVFOyAvKiB1bmtub3duIHN1YlRMViBqdXN0IGhleGR1bXAgaXQgKi8KKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9iZ3BfaXB2NiA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjZfdCAqKXN1YnRsdl90cHRyOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcy8ldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfYmdwX2lwdjYtPnByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2JncF9pcHY2LT5wcmVmaXhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9SU1ZQX0lQVjQ6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjQgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICB0dW5uZWwgZW5kLXBvaW50ICVzLCB0dW5uZWwgc2VuZGVyICVzLCBsc3AtaWQgMHglMDR4IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICAgIHR1bm5lbC1pZCAweCUwNHgsIGV4dGVuZGVkIHR1bm5lbC1pZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NC0+dHVubmVsX2VuZHBvaW50KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0LT50dW5uZWxfc2VuZGVyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjQtPmxzcF9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0LT50dW5uZWxfaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjQtPmV4dGVuZGVkX3R1bm5lbF9pZCkpKTsKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAyMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAyMCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NCA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0X3QgKilzdWJ0bHZfdHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgdHVubmVsIGVuZC1wb2ludCAlcywgdHVubmVsIHNlbmRlciAlcywgbHNwLWlkIDB4JTA0eCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblx0ICAgICAgdHVubmVsLWlkIDB4JTA0eCwgZXh0ZW5kZWQgdHVubmVsLWlkICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NC0+dHVubmVsX2VuZHBvaW50KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NC0+dHVubmVsX3NlbmRlciksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NC0+bHNwX2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0LT50dW5uZWxfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY0LT5leHRlbmRlZF90dW5uZWxfaWQpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9SU1ZQX0lQVjY6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYgPSBcCi0gICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY2X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICB0dW5uZWwgZW5kLXBvaW50ICVzLCB0dW5uZWwgc2VuZGVyICVzLCBsc3AtaWQgMHglMDR4IiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICAgIHR1bm5lbC1pZCAweCUwNHgsIGV4dGVuZGVkIHR1bm5lbC1pZCAlcyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPnR1bm5lbF9lbmRwb2ludCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPnR1bm5lbF9zZW5kZXIpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2Ni0+bHNwX2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPnR1bm5lbF9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPmV4dGVuZGVkX3R1bm5lbF9pZCkpKTsKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSA1NikgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSA1NiIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X3JzdnBfaXB2NiA9IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY2X3QgKilzdWJ0bHZfdHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgdHVubmVsIGVuZC1wb2ludCAlcywgdHVubmVsIHNlbmRlciAlcywgbHNwLWlkIDB4JTA0eCIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblx0ICAgICAgdHVubmVsLWlkIDB4JTA0eCwgZXh0ZW5kZWQgdHVubmVsLWlkICVzIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPnR1bm5lbF9lbmRwb2ludCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY2LT50dW5uZWxfc2VuZGVyKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY2LT5sc3BfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9yc3ZwX2lwdjYtPnR1bm5lbF9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfcnN2cF9pcHY2LT5leHRlbmRlZF90dW5uZWxfaWQpKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MM1ZQTl9JUFY0OgotICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDN2cG5faXB2NCA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY0X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSRDogJXMsICVzLyV1IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncF92cG5fcmRfcHJpbnQobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDN2cG5faXB2NC0+cmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY0LT5wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjQtPnByZWZpeF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAxMykgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAxMyIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjQgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjRfdCAqKXN1YnRsdl90cHRyOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSRDogJXMsICVzLyV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjQtPnJkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjQtPnByZWZpeCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjQtPnByZWZpeF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICAgICAgY2FzZSBMU1BQSU5HX1RMVl9UQVJHRVRGRUNfU1VCVExWX0wzVlBOX0lQVjY6Ci0gICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjZfdCAqKXN1YnRsdl90cHRyOwotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFJEOiAlcywgJXMvJXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdwX3Zwbl9yZF9wcmludChuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2LT5yZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2LT5wcmVmaXgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjYtPnByZWZpeF9sZW4pKTsKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAyNSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAyNSIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjYgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjZfdCAqKXN1YnRsdl90cHRyOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSRDogJXMsICVzLyV1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiZ3BfdnBuX3JkX3ByaW50KG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wzdnBuX2lwdjYtPnJkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2LT5wcmVmaXgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sM3Zwbl9pcHY2LT5wcmVmaXhfbGVuKSk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKIAogICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MMlZQTl9FTkRQVDoKLSAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0ID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0X3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSRDogJXMsIFNlbmRlciBDRS1JRDogJXUsIFJlY2VpdmVyIENFLUlEOiAldSIgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQgICAgICBFbmNhcHN1bGF0aW9uIFR5cGU6ICVzICgldSkiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYmdwX3Zwbl9yZF9wcmludChuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl9lbmRwdC0+cmQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0LT5zZW5kZXJfY2VfaWQpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0LT5yZWNlaXZlcl9jZV9pZCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGwydnBuX2VuY2Fwc192YWx1ZXMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0LT5lbmNhcHN1bGF0aW9uKSksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fZW5kcHQtPmVuY2Fwc3VsYXRpb24pKSk7Ci0KKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAxNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAxNCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0ID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl9lbmRwdF90ICopc3VidGx2X3RwdHI7CisgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFJEOiAlcywgU2VuZGVyIFZFIElEOiAldSwgUmVjZWl2ZXIgVkUgSUQ6ICV1IiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQgICAgICBFbmNhcHN1bGF0aW9uIFR5cGU6ICVzICgldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJncF92cG5fcmRfcHJpbnQobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fZW5kcHQtPnJkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fZW5kcHQtPnNlbmRlcl92ZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX2VuZHB0LT5yZWNlaXZlcl92ZV9pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihtcGxzX3B3X3R5cGVzX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl9lbmRwdC0+ZW5jYXBzdWxhdGlvbikpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl9lbmRwdC0+ZW5jYXBzdWxhdGlvbikpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAvKiB0aGUgb2xkIEwyVlBOIFZDSUQgc3ViVExWIGRvZXMgbm90IGhhdmUgc3VwcG9ydCBmb3IgdGhlIHNlbmRlciBmaWVsZCAqLwotICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MMlZQTl9WQ0lEX09MRDoKLSAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkID0gXAotICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkX3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSZW1vdGUgUEU6ICVzIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICAgIFZDLUlEOiAweCUwOHgsIEVuY2Fwc3VsYXRpb24gVHlwZTogJXMgKCV1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkLT5yZW1vdGVfcGVfYWRkcmVzcyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZF9vbGQtPnZjX2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIobDJ2cG5fZW5jYXBzX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZF9vbGQtPmVuY2Fwc3VsYXRpb24pKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX29sZC0+ZW5jYXBzdWxhdGlvbikpKTsKLQorICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9GRUNfMTI4X1BXX09MRDoKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAxMCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAxMCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkID0gXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9mZWNfMTI4X3B3X29sZCAqKXN1YnRsdl90cHRyOworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBSZW1vdGUgUEU6ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQgICAgICBQVyBJRDogMHglMDh4LCBQVyBUeXBlOiAlcyAoJXUpIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkLT5yZW1vdGVfcGVfYWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWRfb2xkLT5wd19pZCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihtcGxzX3B3X3R5cGVzX3ZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX29sZC0+cHdfdHlwZSkpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX29sZC0+cHdfdHlwZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfVEFSR0VURkVDX1NVQlRMVl9MMlZQTl9WQ0lEOgotICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZCA9IFwKLSAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkX3QgKilzdWJ0bHZfdHB0cjsKLSAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBTZW5kZXIgUEU6ICVzLCBSZW1vdGUgUEU6ICVzIiBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICAgIFZDLUlEOiAweCUwOHgsIEVuY2Fwc3VsYXRpb24gVHlwZTogJXMgKCV1KSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQtPnNlbmRlcl9wZV9hZGRyZXNzKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZC0+cmVtb3RlX3BlX2FkZHJlc3MpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQtPnZjX2lkKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIobDJ2cG5fZW5jYXBzX3ZhbHVlcywKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZC0+ZW5jYXBzdWxhdGlvbikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQtPmVuY2Fwc3VsYXRpb24pKSk7Ci0KKyAgICAgICAgICAgICAgICBjYXNlIExTUFBJTkdfVExWX1RBUkdFVEZFQ19TVUJUTFZfRkVDXzEyOF9QVzoKKyAgICAgICAgICAgICAgICAgICAgLyogSXMgdGhlIHN1YlRMViBsZW5ndGggY29ycmVjdD8gKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxzcHBpbmdfc3VidGx2X2xlbiAhPSAxNCkgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbnZhbGlkIHN1YlRMViBsZW5ndGgsIHNob3VsZCBiZSAxNCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN1YnRsdl9oZXhkdW1wPVRSVUU7IC8qIHVua25vd24gc3ViVExWIGp1c3QgaGV4ZHVtcCBpdCAqLworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQgPSBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2ZlY18xMjhfcHcgKilzdWJ0bHZfdHB0cjsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgU2VuZGVyIFBFOiAlcywgUmVtb3RlIFBFOiAlcyIgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJcblx0ICAgICAgUFcgSUQ6IDB4JTA4eCwgUFcgVHlwZTogJXMgKCV1KSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkLT5zZW5kZXJfcGVfYWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHN1YnRsdl9wdHIubHNwcGluZ190bHZfdGFyZ2V0ZmVjX3N1YnRsdl9sMnZwbl92Y2lkLT5yZW1vdGVfcGVfYWRkcmVzcyksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQtPnB3X2lkKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG1wbHNfcHdfdHlwZXNfdmFsdWVzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVua25vd24iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoc3VidGx2X3B0ci5sc3BwaW5nX3Rsdl90YXJnZXRmZWNfc3VidGx2X2wydnBuX3ZjaWQtPnB3X3R5cGUpKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhzdWJ0bHZfcHRyLmxzcHBpbmdfdGx2X3RhcmdldGZlY19zdWJ0bHZfbDJ2cG5fdmNpZC0+cHdfdHlwZSkpKTsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC03NjEsMzAgKzg2Myw1OCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQgICAgICAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNwcGluZ19zdWJ0bHZfbGVuKTsKIAorICAgICAgICAgICAgICAgIC8qIEFsbCBzdWJUTFZzIGFyZSBhbGlnbmVkIHRvIGZvdXIgb2N0ZXQgYm91bmRhcnkgKi8KKyAgICAgICAgICAgICAgICBpZiAobHNwcGluZ19zdWJ0bHZfbGVuICUgNCkgeworICAgICAgICAgICAgICAgICAgICBsc3BwaW5nX3N1YnRsdl9sZW4gKz0gNCAtIChsc3BwaW5nX3N1YnRsdl9sZW4gJSA0KTsKKyAgICAgICAgICAgICAgICAgICAgLyogRG9lcyB0aGUgc3ViVExWLCBpbmNsdWRpbmcgcGFkZGluZywgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICAgICAgICAgIGlmICh0bHZfdGxlbiA8IGxzcHBpbmdfc3VidGx2X2xlbitzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlcikpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHQgVExWIGlzIHRvbyBzaG9ydCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB0bHZfdHB0cis9bHNwcGluZ19zdWJ0bHZfbGVuOwogICAgICAgICAgICAgICAgIHRsdl90bGVuLT1sc3BwaW5nX3N1YnRsdl9sZW4rc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9oZWFkZXIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBMU1BQSU5HX1RMVl9ET1dOU1RSRUFNX01BUFBJTkc6Ci0gICAgICAgICAgICAvKiB0aGF0IHN0cmFuZ2UgdGhpbmcgd2l0aCB0aGUgZG93bnN0cmVhbSBtYXAgVExWIGlzIHRoYXQgdW50aWwgbm93Ci0gICAgICAgICAgICAgKiB3ZSBkbyBub3Qga25vdyBpZiBpdHMgSVB2NCBvciBJUHY2ICwgYWZ0ZXIgd2UgZm91bmQgdGhlIGFkZHJlc3MtdHlwZQotICAgICAgICAgICAgICogbGV0cyByZWNhc3QgdGhlIHRsdl90cHRyIGFuZCBtb3ZlIG9uICovCisgICAgICAgICAgICAvKiBEb2VzIHRoZSBoZWFkZXIgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICBpZiAodGx2X3RsZW4gPCBzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX3QpKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUTFYgaXMgdG9vIHNob3J0IikpOworICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIHRsdl90b29zaG9ydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIERpZCB3ZSBjYXB0dXJlIGVub3VnaCB0byBnZXQgdGhlIGFkZHJlc3MgZmFtaWx5PyAqLworICAgICAgICAgICAgTkRfVENIRUNLMigqdGx2X3RwdHIsIHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfdCkpOwogCi0gICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjQ9IFwKLSAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdCAqKXRsdl90cHRyOwotICAgICAgICAgICAgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2PSBcCi0gICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3QgKil0bHZfdHB0cjsKKyAgICAgICAgICAgIHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXA9IFwKKyAgICAgICAgICAgICAgICAoY29uc3Qgc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX3QgKil0bHZfdHB0cjsKKworICAgICAgICAgICAgLyogdGhhdCBzdHJhbmdlIHRoaW5nIHdpdGggdGhlIGRvd25zdHJlYW0gbWFwIFRMViBpcyB0aGF0IHVudGlsIG5vdworICAgICAgICAgICAgICogd2UgZG8gbm90IGtub3cgaWYgaXRzIElQdjQgb3IgSVB2NiBvciBpcyB1bm51bWJlcmVkOyBhZnRlcgorICAgICAgICAgICAgICogd2UgZmluZCB0aGUgYWRkcmVzcy10eXBlLCB3ZSByZWNhc3QgdGhlIHRsdl90cHRyIGFuZCBtb3ZlIG9uLiAqLworCiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBNVFU6ICV1LCBBZGRyZXNzLVR5cGU6ICVzICgldSkiLAotICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NC0+bXR1KSwKKyAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyh0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwLT5tdHUpLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIobHNwcGluZ190bHZfZG93bnN0cmVhbV9hZGRyX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmtub3duIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NC0+YWRkcmVzc190eXBlKSwKLSAgICAgICAgICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjQtPmFkZHJlc3NfdHlwZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcC0+YWRkcmVzc190eXBlKSwKKyAgICAgICAgICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwLT5hZGRyZXNzX3R5cGUpKTsKIAotICAgICAgICAgICAgc3dpdGNoKHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NC0+YWRkcmVzc190eXBlKSB7CisgICAgICAgICAgICBzd2l0Y2godGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcC0+YWRkcmVzc190eXBlKSB7CiAKICAgICAgICAgICAgIGNhc2UgTFNQUElOR19BRklfSVBWNDoKKyAgICAgICAgICAgICAgICAvKiBEb2VzIHRoZSBkYXRhIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgICAgIGlmICh0bHZfdGxlbiA8IHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF90KSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFRMViBpcyB0b28gc2hvcnQiKSk7CisgICAgICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0bHZfdG9vc2hvcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIERpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdGx2X3RwdHIsIHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF90KSk7CisKKyAgICAgICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjQ9IFwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3QgKil0bHZfdHB0cjsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBEb3duc3RyZWFtIElQOiAlcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICBEb3duc3RyZWFtIEludGVyZmFjZSBJUDogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0LT5kb3duc3RyZWFtX2lwKSwKQEAgLTc5Miw4ICs5MjIsMzcgQEAKICAgICAgICAgICAgICAgICB0bHZfdHB0cis9c2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3QpOwogICAgICAgICAgICAgICAgIHRsdl90bGVuLT1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKLSAgICAgICAgICAgICBjYXNlIExTUFBJTkdfQUZJX0lQVjY6CisgICAgICAgICAgICBjYXNlIExTUFBJTkdfQUZJX0lQVjRfVU5NQjoKKyAgICAgICAgICAgICAgICAvKiBEb2VzIHRoZSBkYXRhIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgICAgIGlmICh0bHZfdGxlbiA8IHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF91bm1iX3QpKSB7CisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgVExWIGlzIHRvbyBzaG9ydCIpKTsKKyAgICAgICAgICAgICAgICAgICAgdGx2X2hleGR1bXAgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBnb3RvIHRsdl90b29zaG9ydDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLyogRGlkIHdlIGNhcHR1cmUgZW5vdWdoIGZvciB0aGlzIHBhcnQgb2YgdGhlIFRMVj8gKi8KKyAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCp0bHZfdHB0ciwgc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWJfdCkpOworCisgICAgICAgICAgICAgICAgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWI9IFwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWJfdCAqKXRsdl90cHRyOworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIERvd25zdHJlYW0gSVA6ICVzIiBcCisgICAgICAgICAgICAgICAgICAgICAgICJcblx0ICAgIERvd25zdHJlYW0gSW50ZXJmYWNlIEluZGV4OiAweCUwOHgiLAorICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3VubWItPmRvd25zdHJlYW1faXApLAorICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyh0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdW5tYi0+ZG93bnN0cmVhbV9pbnRlcmZhY2UpKSk7CisgICAgICAgICAgICAgICAgdGx2X3RwdHIrPXNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF91bm1iX3QpOworICAgICAgICAgICAgICAgIHRsdl90bGVuLT1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjRfdW5tYl90KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgTFNQUElOR19BRklfSVBWNjoKKyAgICAgICAgICAgICAgICAvKiBEb2VzIHRoZSBkYXRhIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgICAgIGlmICh0bHZfdGxlbiA8IHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl90KSkgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIFRMViBpcyB0b28gc2hvcnQiKSk7CisgICAgICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byB0bHZfdG9vc2hvcnQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIC8qIERpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdGx2X3RwdHIsIHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl90KSk7CisKKyAgICAgICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjY9IFwKKyAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3QgKil0bHZfdHB0cjsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBEb3duc3RyZWFtIElQOiAlcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICBEb3duc3RyZWFtIEludGVyZmFjZSBJUDogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Ni0+ZG93bnN0cmVhbV9pcCksCkBAIC04MDEsMTQgKzk2MCwyNCBAQAogICAgICAgICAgICAgICAgIHRsdl90cHRyKz1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjZfdCk7CiAgICAgICAgICAgICAgICAgdGx2X3RsZW4tPXNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl90KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSNlbmRpZgotICAgICAgICAgICAgY2FzZSBMU1BQSU5HX0FGSV9VTk1COgorICAgICAgICAgICAgIGNhc2UgTFNQUElOR19BRklfSVBWNl9VTk1COgorICAgICAgICAgICAgICAgIC8qIERvZXMgdGhlIGRhdGEgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICAgICAgaWYgKHRsdl90bGVuIDwgc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3VubWJfdCkpIHsKKyAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUTFYgaXMgdG9vIHNob3J0IikpOworICAgICAgICAgICAgICAgICAgICB0bHZfaGV4ZHVtcCA9IFRSVUU7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gdGx2X3Rvb3Nob3J0OworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAvKiBEaWQgd2UgY2FwdHVyZSBlbm91Z2ggZm9yIHRoaXMgcGFydCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRsdl90cHRyLCBzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjZfdW5tYl90KSk7CisKKyAgICAgICAgICAgICAgICB0bHZfcHRyLmxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjZfdW5tYj0gXAorICAgICAgICAgICAgICAgICAgIChjb25zdCBzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl91bm1iX3QgKil0bHZfdHB0cjsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBEb3duc3RyZWFtIElQOiAlcyIgXAogICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICBEb3duc3RyZWFtIEludGVyZmFjZSBJbmRleDogMHglMDh4IiwKLSAgICAgICAgICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NC0+ZG93bnN0cmVhbV9pcCksCi0gICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NC0+ZG93bnN0cmVhbV9pbnRlcmZhY2UpKSk7Ci0gICAgICAgICAgICAgICAgdGx2X3RwdHIrPXNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2NF90KTsKLSAgICAgICAgICAgICAgICB0bHZfdGxlbi09c2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY0X3QpOworICAgICAgICAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIHRsdl9wdHIubHNwcGluZ190bHZfZG93bnN0cmVhbV9tYXBfaXB2Nl91bm1iLT5kb3duc3RyZWFtX2lwKSwKKyAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFModGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3VubWItPmRvd25zdHJlYW1faW50ZXJmYWNlKSkpOworICAgICAgICAgICAgICAgIHRsdl90cHRyKz1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2lwdjZfdW5tYl90KTsKKyAgICAgICAgICAgICAgICB0bHZfdGxlbi09c2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pcHY2X3VubWJfdCk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGRlZmF1bHQ6CkBAIC04MTYsMzcgKzk4NSw1NSBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICAvKiBEb2VzIHRoZSBkYXRhIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgVExWPyAqLworICAgICAgICAgICAgaWYgKHRsdl90bGVuIDwgc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvX3QpKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUTFYgaXMgdG9vIHNob3J0IikpOworICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIHRsdl90b29zaG9ydDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIC8qIERpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgdGhpcyBwYXJ0IG9mIHRoZSBUTFY/ICovCisgICAgICAgICAgICBORF9UQ0hFQ0syKCp0bHZfdHB0ciwgc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvX3QpKTsKKwogICAgICAgICAgICAgdGx2X3B0ci5sc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvPSBcCiAgICAgICAgICAgICAgICAgKGNvbnN0IHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvX3QgKil0bHZfdHB0cjsKIAogICAgICAgICAgICAgLyogRklYTUUgYWRkIGhhc2gta2V5IHR5cGUsIGRlcHRoIGxpbWl0LCBtdWx0aXBhdGggcHJvY2Vzc2luZyAqLwogCi0KICAgICAgICAgICAgIHRsdl90cHRyKz1zaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2Rvd25zdHJlYW1fbWFwX2luZm9fdCk7CiAgICAgICAgICAgICB0bHZfdGxlbi09c2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9kb3duc3RyZWFtX21hcF9pbmZvX3QpOwogCiAgICAgICAgICAgICAvKiBGSVhNRSBwcmludCBkb3duc3RyZWFtIGxhYmVscyAqLwogCi0KICAgICAgICAgICAgIHRsdl9oZXhkdW1wPVRSVUU7IC8qIGR1bXAgdGhlIFRMViB1bnRpbCBjb2RlIGNvbXBsZXRlICovCiAKICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgTFNQUElOR19UTFZfQkZEX0RJU0NSSU1JTkFUT1I6Ci0gICAgICAgICAgICB0cHRyICs9IHNpemVvZihzdHJ1Y3QgbHNwcGluZ190bHZfaGVhZGVyKTsKLSAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIExTUFBJTkdfVExWX0JGRF9ESVNDUklNSU5BVE9SX0xFTik7Ci0gICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBCRkQgRGlzY3JpbWluYXRvciAweCUwOHgiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOworICAgICAgICAgICAgaWYgKHRsdl90bGVuIDwgTFNQUElOR19UTFZfQkZEX0RJU0NSSU1JTkFUT1JfTEVOKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUTFYgaXMgdG9vIHNob3J0IikpOworICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIHRsdl90b29zaG9ydDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgTFNQUElOR19UTFZfQkZEX0RJU0NSSU1JTkFUT1JfTEVOKTsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBCRkQgRGlzY3JpbWluYXRvciAweCUwOHgiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOworICAgICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAgTFNQUElOR19UTFZfVkVORE9SX0VOVEVSUFJJU0U6CiAgICAgICAgIHsKICAgICAgICAgICAgIHVpbnQzMl90IHZlbmRvcl9pZDsKIAotICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgTFNQUElOR19UTFZfVkVORE9SX0VOVEVSUFJJU0VfTEVOKTsKLSAgICAgICAgICAgIHZlbmRvcl9pZCA9IEVYVFJBQ1RfMzJCSVRTKHRsdl90cHRyKTsKLSAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIFZlbmRvcjogJXMgKDB4JTA0eCkiLAotICAgICAgICAgICAgICAgICAgIHRvazJzdHIoc21pX3ZhbHVlcywgIlVua25vd24iLCB2ZW5kb3JfaWQpLAotICAgICAgICAgICAgICAgICAgIHZlbmRvcl9pZCkpOworICAgICAgICAgICAgaWYgKHRsdl90bGVuIDwgTFNQUElOR19UTFZfVkVORE9SX0VOVEVSUFJJU0VfTEVOKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBUTFYgaXMgdG9vIHNob3J0IikpOworICAgICAgICAgICAgICAgIHRsdl9oZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICBnb3RvIHRsdl90b29zaG9ydDsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgTFNQUElOR19UTFZfVkVORE9SX0VOVEVSUFJJU0VfTEVOKTsKKyAgICAgICAgICAgICAgICB2ZW5kb3JfaWQgPSBFWFRSQUNUXzMyQklUUyh0bHZfdHB0cik7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgVmVuZG9yOiAlcyAoMHglMDR4KSIsCisgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoc21pX3ZhbHVlcywgIlVua25vd24iLCB2ZW5kb3JfaWQpLAorICAgICAgICAgICAgICAgICAgICAgICB2ZW5kb3JfaWQpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTg2NCw2ICsxMDUxLDcgQEAKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIC8qIGRvIHdlIHdhbnQgdG8gc2VlIGFuIGFkZGl0aW9uYWxseSB0bHYgaGV4ZHVtcCA/ICovCisgICAgdGx2X3Rvb3Nob3J0OgogICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcgPiAxIHx8IHRsdl9oZXhkdW1wPT1UUlVFKQogICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0citzaXplb2Yoc3RydWN0IGxzcHBpbmdfdGx2X2hlYWRlciksICJcblx0ICAgICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHNwcGluZ190bHZfbGVuKTsKQEAgLTg3MiwxNCArMTA2MCwyMSBAQAogICAgICAgICAvKiBBbGwgVExWcyBhcmUgYWxpZ25lZCB0byBmb3VyIG9jdGV0IGJvdW5kYXJ5ICovCiAgICAgICAgIGlmIChsc3BwaW5nX3Rsdl9sZW4gJSA0KSB7CiAgICAgICAgICAgICBsc3BwaW5nX3Rsdl9sZW4gKz0gKDQgLSBsc3BwaW5nX3Rsdl9sZW4gJSA0KTsKKyAgICAgICAgICAgIC8qIERvZXMgdGhlIFRMViwgaW5jbHVkaW5nIHBhZGRpbmcsIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgcGFja2V0PyAqLworICAgICAgICAgICAgaWYgKHRsZW4gPCBsc3BwaW5nX3Rsdl9sZW4rc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9oZWFkZXIpKQorICAgICAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CiAgICAgICAgIH0KIAogICAgICAgICB0cHRyKz1sc3BwaW5nX3Rsdl9sZW4rc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9oZWFkZXIpOwogICAgICAgICB0bGVuLT1sc3BwaW5nX3Rsdl9sZW4rc2l6ZW9mKHN0cnVjdCBsc3BwaW5nX3Rsdl9oZWFkZXIpOwogICAgIH0KICAgICByZXR1cm47Cit0b29zaG9ydDoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBpcyB0b28gc2hvcnQiKSk7CisgICAgcmV0dXJuOwogdHJ1bmM6CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdCBwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QiKSk7CisgICAgcmV0dXJuOwogfQogLyoKICAqIExvY2FsIFZhcmlhYmxlczoKZGlmZiAtLWdpdCBhL3ByaW50LWx3YXBwLmMgYi9wcmludC1sd2FwcC5jCmluZGV4IDViODY4M2YuLmJhYjMyMTkgMTAwNjQ0Ci0tLSBhL3ByaW50LWx3YXBwLmMKKysrIGIvcHJpbnQtbHdhcHAuYwpAQCAtMTIsMTkgKzEyLDIwIEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIFN1cHBvcnQgZm9yIHRoZSBMaWdodCBXZWlnaHQgQWNjZXNzIFBvaW50IFByb3RvY29sIGFzIHBlciBSRkMgNTQxMgotICoKICAqIE9yaWdpbmFsIGNvZGUgYnkgQ2FybGVzIEtpc2hpbW90byA8Y2FybGVzLmtpc2hpbW90b0BnbWFpbC5jb20+CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTGlnaHQgV2VpZ2h0IEFjY2VzcyBQb2ludCBQcm90b2NvbCAoTFdBUFApIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDU0MTIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKZGlmZiAtLWdpdCBhL3ByaW50LWx3cmVzLmMgYi9wcmludC1sd3Jlcy5jCmluZGV4IGQ3OGM5YTkuLmFlMzUyODAgMTAwNjQ0Ci0tLSBhL3ByaW50LWx3cmVzLmMKKysrIGIvcHJpbnQtbHdyZXMuYwpAQCAtMjcsMjEgKzI3LDIyIEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCSU5EOSBMaWdodHdlaWdodCBSZXNvbHZlciBwcm90b2NvbCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgIm5hbWVzZXIuaCIKIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIgICAgICAgICAgICAgICAgICAgIC8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogLyogQklORDkgbGliL2x3cmVzL2luY2x1ZGUvbHdyZXMgKi8KIHR5cGVkZWYgdWludDMyX3QgbHdyZXNfdWludDMyX3Q7CkBAIC0yNTAsNyArMjUxLDcgQEAKIAogc3RhdGljIGludAogbHdyZXNfcHJpbnRhZGRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgIGx3cmVzX2FkZHJfdCAqYXApCisgICAgICAgICAgICAgICAgY29uc3QgbHdyZXNfYWRkcl90ICphcCkKIHsKIAl1aW50MTZfdCBsOwogCWNvbnN0IGNoYXIgKnA7CkBAIC0yNjksMTQgKzI3MCwxMiBAQAogCQlORF9QUklOVCgobmRvLCAiICVzIiwgaXBhZGRyX3N0cmluZyhuZG8sIHApKSk7CiAJCXAgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAljYXNlIDI6CS8qIElQdjYgKi8KIAkJaWYgKGwgPCAxNikKIAkJCXJldHVybiAtMTsKIAkJTkRfUFJJTlQoKG5kbywgIiAlcyIsIGlwNmFkZHJfc3RyaW5nKG5kbywgcCkpKTsKIAkJcCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlORF9QUklOVCgobmRvLCAiICV1LyIsIEVYVFJBQ1RfMzJCSVRTKCZhcC0+ZmFtaWx5KSkpOwogCQlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKQpAQCAtMzQzLDkgKzM0Miw5IEBACiAJCS8qCiAJCSAqIHF1ZXJpZXMKIAkJICovCi0JCWx3cmVzX2dhYm5yZXF1ZXN0X3QgKmdhYm47Ci0JCWx3cmVzX2duYmFyZXF1ZXN0X3QgKmduYmE7Ci0JCWx3cmVzX2dyYm5yZXF1ZXN0X3QgKmdyYm47CisJCWNvbnN0IGx3cmVzX2dhYm5yZXF1ZXN0X3QgKmdhYm47CisJCWNvbnN0IGx3cmVzX2duYmFyZXF1ZXN0X3QgKmduYmE7CisJCWNvbnN0IGx3cmVzX2dyYm5yZXF1ZXN0X3QgKmdyYm47CiAJCXVpbnQzMl90IGw7CiAKIAkJZ2FibiA9IE5VTEw7CkBAIC0zNTYsNyArMzU1LDcgQEAKIAkJY2FzZSBMV1JFU19PUENPREVfTk9PUDoKIAkJCWJyZWFrOwogCQljYXNlIExXUkVTX09QQ09ERV9HRVRBRERSU0JZTkFNRToKLQkJCWdhYm4gPSAobHdyZXNfZ2FibnJlcXVlc3RfdCAqKShucCArIDEpOworCQkJZ2FibiA9IChjb25zdCBsd3Jlc19nYWJucmVxdWVzdF90ICopKG5wICsgMSk7CiAJCQlORF9UQ0hFQ0soZ2Fibi0+bmFtZWxlbik7CiAJCQkvKiBYWFggZ2FibiBwb2ludHMgdG8gcGFja2VkIHN0cnVjdCAqLwogCQkJcyA9IChjb25zdCBjaGFyICopJmdhYm4tPm5hbWVsZW4gKwpAQCAtMzkwLDcgKzM4OSw3IEBACiAJCQlzICs9IGFkdmFuY2U7CiAJCQlicmVhazsKIAkJY2FzZSBMV1JFU19PUENPREVfR0VUTkFNRUJZQUREUjoKLQkJCWduYmEgPSAobHdyZXNfZ25iYXJlcXVlc3RfdCAqKShucCArIDEpOworCQkJZ25iYSA9IChjb25zdCBsd3Jlc19nbmJhcmVxdWVzdF90ICopKG5wICsgMSk7CiAJCQlORF9UQ0hFQ0soZ25iYS0+YWRkcik7CiAKIAkJCS8qIEJJTkQ5MTA6IG5vdCB1c2VkICovCkBAIC00MDgsNyArNDA3LDcgQEAKIAkJCWJyZWFrOwogCQljYXNlIExXUkVTX09QQ09ERV9HRVRSREFUQUJZTkFNRToKIAkJCS8qIFhYWCBubyB0cmFjZSwgbm90IHRlc3RlZCAqLwotCQkJZ3JibiA9IChsd3Jlc19ncmJucmVxdWVzdF90ICopKG5wICsgMSk7CisJCQlncmJuID0gKGNvbnN0IGx3cmVzX2dyYm5yZXF1ZXN0X3QgKikobnAgKyAxKTsKIAkJCU5EX1RDSEVDSyhncmJuLT5uYW1lbGVuKTsKIAogCQkJLyogQklORDkxMDogbm90IHVzZWQgKi8KQEAgLTQ0Miw5ICs0NDEsOSBAQAogCQkvKgogCQkgKiByZXNwb25zZXMKIAkJICovCi0JCWx3cmVzX2dhYm5yZXNwb25zZV90ICpnYWJuOwotCQlsd3Jlc19nbmJhcmVzcG9uc2VfdCAqZ25iYTsKLQkJbHdyZXNfZ3JibnJlc3BvbnNlX3QgKmdyYm47CisJCWNvbnN0IGx3cmVzX2dhYm5yZXNwb25zZV90ICpnYWJuOworCQljb25zdCBsd3Jlc19nbmJhcmVzcG9uc2VfdCAqZ25iYTsKKwkJY29uc3QgbHdyZXNfZ3JibnJlc3BvbnNlX3QgKmdyYm47CiAJCXVpbnQzMl90IGwsIG5hOwogCQl1aW50MzJfdCBpOwogCkBAIC00NTYsNyArNDU1LDcgQEAKIAkJY2FzZSBMV1JFU19PUENPREVfTk9PUDoKIAkJCWJyZWFrOwogCQljYXNlIExXUkVTX09QQ09ERV9HRVRBRERSU0JZTkFNRToKLQkJCWdhYm4gPSAobHdyZXNfZ2FibnJlc3BvbnNlX3QgKikobnAgKyAxKTsKKwkJCWdhYm4gPSAoY29uc3QgbHdyZXNfZ2FibnJlc3BvbnNlX3QgKikobnAgKyAxKTsKIAkJCU5EX1RDSEVDSyhnYWJuLT5yZWFsbmFtZWxlbik7CiAJCQkvKiBYWFggZ2FibiBwb2ludHMgdG8gcGFja2VkIHN0cnVjdCAqLwogCQkJcyA9IChjb25zdCBjaGFyICopJmdhYm4tPnJlYWxuYW1lbGVuICsKQEAgLTQ4OSwxNCArNDg4LDE0IEBACiAJCQkvKiBhZGRycyAqLwogCQkJbmEgPSBFWFRSQUNUXzE2QklUUygmZ2Fibi0+bmFkZHJzKTsKIAkJCWZvciAoaSA9IDA7IGkgPCBuYTsgaSsrKSB7Ci0JCQkJYWR2YW5jZSA9IGx3cmVzX3ByaW50YWRkcihuZG8sIChsd3Jlc19hZGRyX3QgKilzKTsKKwkJCQlhZHZhbmNlID0gbHdyZXNfcHJpbnRhZGRyKG5kbywgKGNvbnN0IGx3cmVzX2FkZHJfdCAqKXMpOwogCQkJCWlmIChhZHZhbmNlIDwgMCkKIAkJCQkJZ290byB0cnVuYzsKIAkJCQlzICs9IGFkdmFuY2U7CiAJCQl9CiAJCQlicmVhazsKIAkJY2FzZSBMV1JFU19PUENPREVfR0VUTkFNRUJZQUREUjoKLQkJCWduYmEgPSAobHdyZXNfZ25iYXJlc3BvbnNlX3QgKikobnAgKyAxKTsKKwkJCWduYmEgPSAoY29uc3QgbHdyZXNfZ25iYXJlc3BvbnNlX3QgKikobnAgKyAxKTsKIAkJCU5EX1RDSEVDSyhnbmJhLT5yZWFsbmFtZWxlbik7CiAJCQkvKiBYWFggZ25iYSBwb2ludHMgdG8gcGFja2VkIHN0cnVjdCAqLwogCQkJcyA9IChjb25zdCBjaGFyICopJmduYmEtPnJlYWxuYW1lbGVuICsKQEAgLTUyNyw3ICs1MjYsNyBAQAogCQkJYnJlYWs7CiAJCWNhc2UgTFdSRVNfT1BDT0RFX0dFVFJEQVRBQllOQU1FOgogCQkJLyogWFhYIG5vIHRyYWNlLCBub3QgdGVzdGVkICovCi0JCQlncmJuID0gKGx3cmVzX2dyYm5yZXNwb25zZV90ICopKG5wICsgMSk7CisJCQlncmJuID0gKGNvbnN0IGx3cmVzX2dyYm5yZXNwb25zZV90ICopKG5wICsgMSk7CiAJCQlORF9UQ0hFQ0soZ3Jibi0+bnNpZ3MpOwogCiAJCQkvKiBCSU5EOTEwOiBub3QgdXNlZCAqLwpAQCAtNTQzLDcgKzU0Miw3IEBACiAJCQkJICAgIEVYVFJBQ1RfMTZCSVRTKCZncmJuLT5yZGNsYXNzKSkpKTsKIAkJCX0KIAkJCU5EX1BSSU5UKChuZG8sICIgVFRMICIpKTsKLQkJCXJlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8zMkJJVFMoJmdyYm4tPnR0bCkpOworCQkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzMyQklUUygmZ3Jibi0+dHRsKSk7CiAJCQlORF9QUklOVCgobmRvLCAiICV1LyV1IiwgRVhUUkFDVF8xNkJJVFMoJmdyYm4tPm5yZGF0YXMpLAogCQkJICAgIEVYVFJBQ1RfMTZCSVRTKCZncmJuLT5uc2lncykpKTsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtbTN1YS5jIGIvcHJpbnQtbTN1YS5jCmluZGV4IDMzZjg3NzcuLjFmOTc0YjIgMTAwNjQ0Ci0tLSBhL3ByaW50LW0zdWEuYworKysgYi9wcmludC1tM3VhLmMKQEAgLTIyLDIwICsyMiwyMCBAQAogICogU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTWVzc2FnZSBUcmFuc2ZlciBQYXJ0IDMgKE1UUDMpIFVzZXIgQWRhcHRhdGlvbiBMYXllciAoTTNVQSkgcHJpbnRlciAqLworCisvKiBSRkMgNDY2NiAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8bTN1YV0iOwotc3RhdGljIGNvbnN0IGNoYXIgY3N0cltdID0gIiAoY29ycnVwdCkiOwotCi0vKiBSRkMgNDY2NiAqLwogCiAjZGVmaW5lIE0zVUFfUkVMXzFfMCAxCiAKQEAgLTIxOCw3ICsyMTgsNyBAQAogICBjYXNlIE0zVUFfUEFSQU1fQ09SUl9JRDoKICAgICAvKiBidWYgYW5kIHNpemUgZG9uJ3QgaW5jbHVkZSB0aGUgaGVhZGVyICovCiAgICAgaWYgKHNpemUgPCA0KQotICAgICAgZ290byBjb3JydXB0OworICAgICAgZ290byBpbnZhbGlkOwogICAgIE5EX1RDSEVDSzIoKmJ1Ziwgc2l6ZSk7CiAgICAgTkRfUFJJTlQoKG5kbywgIjB4JTA4eCIsIEVYVFJBQ1RfMzJCSVRTKGJ1ZikpKTsKICAgICBicmVhazsKQEAgLTIyOSw4ICsyMjksOCBAQAogICB9CiAgIHJldHVybjsKIAotY29ycnVwdDoKLSAgTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDoKKyAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogICBORF9UQ0hFQ0syKCpidWYsIHNpemUpOwogICByZXR1cm47CiB0cnVuYzoKQEAgLTI1OSw3ICsyNTksNyBAQAogCiAgIHdoaWxlIChwIDwgYnVmICsgc2l6ZSkgewogICAgIGlmIChwICsgc2l6ZW9mKHN0cnVjdCBtM3VhX3BhcmFtX2hlYWRlcikgPiBidWYgKyBzaXplKQotICAgICAgZ290byBjb3JydXB0OworICAgICAgZ290byBpbnZhbGlkOwogICAgIE5EX1RDSEVDSzIoKnAsIHNpemVvZihzdHJ1Y3QgbTN1YV9wYXJhbV9oZWFkZXIpKTsKICAgICAvKiBQYXJhbWV0ZXIgVGFnICovCiAgICAgaGRyX3RhZyA9IEVYVFJBQ1RfMTZCSVRTKHApOwpAQCAtMjY3LDcgKzI2Nyw3IEBACiAgICAgLyogUGFyYW1ldGVyIExlbmd0aCAqLwogICAgIGhkcl9sZW4gPSBFWFRSQUNUXzE2QklUUyhwICsgMik7CiAgICAgaWYgKGhkcl9sZW4gPCBzaXplb2Yoc3RydWN0IG0zdWFfcGFyYW1faGVhZGVyKSkKLSAgICAgIGdvdG8gY29ycnVwdDsKKyAgICAgIGdvdG8gaW52YWxpZDsKICAgICAvKiBQYXJhbWV0ZXIgVmFsdWUgKi8KICAgICBhbGlnbiA9IChwICsgaGRyX2xlbiAtIGJ1ZikgJSA0OwogICAgIGFsaWduID0gYWxpZ24gPyA0IC0gYWxpZ24gOiAwOwpAQCAtMjc3LDggKzI3Nyw4IEBACiAgIH0KICAgcmV0dXJuOwogCi1jb3JydXB0OgotICBORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorICBORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAgIE5EX1RDSEVDSzIoKmJ1Ziwgc2l6ZSk7CiAgIHJldHVybjsKIHRydW5jOgpAQCAtMzA1LDcgKzMwNSw3IEBACiAKICAgLyogc2l6ZSBpbmNsdWRlcyB0aGUgaGVhZGVyICovCiAgIGlmIChzaXplIDwgc2l6ZW9mKHN0cnVjdCBtM3VhX2NvbW1vbl9oZWFkZXIpKQotICAgIGdvdG8gY29ycnVwdDsKKyAgICBnb3RvIGludmFsaWQ7CiAgIE5EX1RDSEVDSygqaGRyKTsKICAgaWYgKGhkci0+diAhPSBNM1VBX1JFTF8xXzApCiAgICAgcmV0dXJuOwpAQCAtMzI5LDggKzMyOSw4IEBACiAgICAgbTN1YV90YWdzX3ByaW50KG5kbywgYnVmICsgc2l6ZW9mKHN0cnVjdCBtM3VhX2NvbW1vbl9oZWFkZXIpLCBFWFRSQUNUXzMyQklUUygmaGRyLT5sZW4pIC0gc2l6ZW9mKHN0cnVjdCBtM3VhX2NvbW1vbl9oZWFkZXIpKTsKICAgcmV0dXJuOwogCi1jb3JydXB0OgotICBORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorICBORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAgIE5EX1RDSEVDSzIoKmJ1Ziwgc2l6ZSk7CiAgIHJldHVybjsKIHRydW5jOgpkaWZmIC0tZ2l0IGEvcHJpbnQtbWVkc2EuYyBiL3ByaW50LW1lZHNhLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg5NWZkOQotLS0gL2Rldi9udWxsCisrKyBiL3ByaW50LW1lZHNhLmMKQEAgLTAsMCArMSwxOTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDE5ODgsIDE5ODksIDE5OTAsIDE5OTEsIDE5OTIsIDE5OTMsIDE5OTQsIDE5OTUsIDE5OTYsIDE5OTcKKyAqCVRoZSBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQ6ICgxKSBzb3VyY2UgY29kZSBkaXN0cmlidXRpb25zCisgKiByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSwgKDIpCisgKiBkaXN0cmlidXRpb25zIGluY2x1ZGluZyBiaW5hcnkgY29kZSBpbmNsdWRlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZAorICogdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5IGluIHRoZSBkb2N1bWVudGF0aW9uIG9yIG90aGVyIG1hdGVyaWFscworICogcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLCBhbmQgKDMpIGFsbCBhZHZlcnRpc2luZyBtYXRlcmlhbHMgbWVudGlvbmluZworICogZmVhdHVyZXMgb3IgdXNlIG9mIHRoaXMgc29mdHdhcmUgZGlzcGxheSB0aGUgZm9sbG93aW5nIGFja25vd2xlZGdlbWVudDoKKyAqIGBgVGhpcyBwcm9kdWN0IGluY2x1ZGVzIHNvZnR3YXJlIGRldmVsb3BlZCBieSB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLAorICogTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeSBhbmQgaXRzIGNvbnRyaWJ1dG9ycy4nJyBOZWl0aGVyIHRoZSBuYW1lIG9mCisgKiB0aGUgVW5pdmVyc2l0eSBub3IgdGhlIG5hbWVzIG9mIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZQorICogb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20gdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmljIHByaW9yCisgKiB3cml0dGVuIHBlcm1pc3Npb24uCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIGBgQVMgSVMnJyBBTkQgV0lUSE9VVCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVECisgKiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KKyAqLworCisvKiBcc3VtbWFyeTogTWFydmVsbCBFeHRlbmRlZCBEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlIChNRURTQSkgcHJpbnRlciAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgorCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorI2luY2x1ZGUgImV0aGVyLmgiCisjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCisjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIlt8TUVEU0FdIjsKKworLyoKKyAqIE1hcnZlbGwgRXh0ZW5kZWQgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpZWN0dXJlLgorICoKKyAqIEEgTWFydmVsbCBwcm9wcmlhdGFyeSBoZWFkZXIgdXNlZCBmb3IgcGFzc2luZyBwYWNrZXRzIHRvL2Zyb20KKyAqIHNwZWNpZmljIHBvcnRzIG9mIGEgc3dpdGNoLiBUaGVyZSBpcyBubyBvcGVuIHNwZWNpZmljYXRpb24gb2YgdGhpcworICogaGVhZGVyLCBidXQgaXMgZG9jdW1lbnRlZCBpbiB0aGUgTWFydmVsbCBTd2l0Y2ggZGF0YSBzaGVldHMuIEZvcgorICogYmFja2dyb3VuZCwgc2VlOgorICoKKyAqIGh0dHBzOi8vbHduLm5ldC9BcnRpY2xlcy8zMDIzMzMvCisgKi8KK3N0cnVjdAltZWRzYV9wa3RoZHIgeworCXVfY2hhciBieXRlc1s2XTsKKwl1X3Nob3J0IGV0aGVyX3R5cGU7Cit9OworCisvKiBCeXRlcyAwIGFuZCAxIGFyZSByZXNlcnZlZCBhbmQgc2hvdWxkIGNvbnRhaW4gMCAqLworI2RlZmluZSBUQUcobWVkc2EpCShtZWRzYS0+Ynl0ZXNbMl0gPj4gNikKKyNkZWZpbmUgVEFHX1RPX0NQVQkwCisjZGVmaW5lIFRBR19GUk9NX0NQVQkxCisjZGVmaW5lIFRBR19GT1JXQVJECTMKKyNkZWZpbmUgU1JDX1RBRyhtZWRzYSkJKChtZWRzYS0+Ynl0ZXNbMl0gPj4gNSkgJiAweDAxKQorI2RlZmluZSBTUkNfREVWKG1lZHNhKQkobWVkc2EtPmJ5dGVzWzJdICYgMHgxZikKKyNkZWZpbmUgU1JDX1BPUlQobWVkc2EpCSgobWVkc2EtPmJ5dGVzWzNdID4+IDMpICYgMHgwMWYpCisjZGVmaW5lIFRSVU5LKG1lZHNhKQkoKG1lZHNhLT5ieXRlc1szXSA+PiAyKSAmIDB4MDEpCisjZGVmaW5lIENPREUobWVkc2EpCSgobWVkc2EtPmJ5dGVzWzNdICYgMHgwNikgfAlcCisJCQkgKChtZWRzYS0+Ynl0ZXNbNF0gPj4gNCkgJiAweDAxKSkKKyNkZWZpbmUgQ09ERV9CRFBVCTAKKyNkZWZpbmUgQ09ERV9JR01QX01MRAkyCisjZGVmaW5lIENPREVfQVJQX01JUlJPUgk0CisjZGVmaW5lIENGSShtZWRzYSkJKG1lZHNhLT5ieXRlc1szXSAmIDB4MDEpCisjZGVmaW5lIFBSSShtZWRzYSkJKG1lZHNhLT5ieXRlc1s0XSA+PiA1KQorI2RlZmluZSBWSUQobWVkc2EpCSgoKHVfc2hvcnQpKG1lZHNhLT5ieXRlc1s0XSAmIDB4ZikgPDwgOCB8CVwKKwkJCSAgbWVkc2EtPmJ5dGVzWzVdKSkKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgdGFnX3ZhbHVlc1tdID0geworCXsgVEFHX1RPX0NQVSwgIlRvX0NQVSIgfSwKKwl7IFRBR19GUk9NX0NQVSwgIkZyb21fQ1BVIiB9LAorCXsgVEFHX0ZPUldBUkQsICJGb3J3YXJkIiB9LAorCXsgMCwgTlVMTCB9LAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgY29kZV92YWx1ZXNbXSA9IHsKKwl7IENPREVfQkRQVSwgIkJEUFUiIH0sCisJeyBDT0RFX0lHTVBfTUxELCAiSUdNUC9NTEQiIH0sCisJeyBDT0RFX0FSUF9NSVJST1IsICJBUFJfTWlycm9yIiB9LAorCXsgMCwgTlVMTCB9LAorfTsKKworc3RhdGljIHZvaWQKK21lZHNhX3ByaW50X2Z1bGwobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisJCSBjb25zdCBzdHJ1Y3QgbWVkc2FfcGt0aGRyICptZWRzYSwKKwkJIHVfaW50IGNhcGxlbikKK3sKKwl1X2NoYXIgdGFnID0gVEFHKG1lZHNhKTsKKworCU5EX1BSSU5UKChuZG8sICIlcyIsCisJCSAgdG9rMnN0cih0YWdfdmFsdWVzLCAiVW5rbm93biAoJXUpIiwgdGFnKSkpOworCisJc3dpdGNoICh0YWcpIHsKKwljYXNlIFRBR19UT19DUFU6CisJCU5EX1BSSU5UKChuZG8sICIsICVzdGFnZ2VkIiwgU1JDX1RBRyhtZWRzYSkgPyAiIiA6ICJ1biIpKTsKKwkJTkRfUFJJTlQoKG5kbywgIiwgZGV2LnBvcnQ6dmxhbiAlZC4lZDolZCIsCisJCQkgIFNSQ19ERVYobWVkc2EpLCBTUkNfUE9SVChtZWRzYSksIFZJRChtZWRzYSkpKTsKKworCQlORF9QUklOVCgobmRvLCAiLCAlcyIsCisJCQkgIHRvazJzdHIoY29kZV92YWx1ZXMsICJVbmtub3duICgldSkiLCBDT0RFKG1lZHNhKSkpKTsKKwkJaWYgKENGSShtZWRzYSkpCisJCQlORF9QUklOVCgobmRvLCAiLCBDRkkiKSk7CisKKwkJTkRfUFJJTlQoKG5kbywgIiwgcHJpICVkOiAiLCBQUkkobWVkc2EpKSk7CisJCWJyZWFrOworCWNhc2UgVEFHX0ZST01fQ1BVOgorCQlORF9QUklOVCgobmRvLCAiLCAlc3RhZ2dlZCIsIFNSQ19UQUcobWVkc2EpID8gIiIgOiAidW4iKSk7CisJCU5EX1BSSU5UKChuZG8sICIsIGRldi5wb3J0OnZsYW4gJWQuJWQ6JWQiLAorCQkJICBTUkNfREVWKG1lZHNhKSwgU1JDX1BPUlQobWVkc2EpLCBWSUQobWVkc2EpKSk7CisKKwkJaWYgKENGSShtZWRzYSkpCisJCQlORF9QUklOVCgobmRvLCAiLCBDRkkiKSk7CisKKwkJTkRfUFJJTlQoKG5kbywgIiwgcHJpICVkOiAiLCBQUkkobWVkc2EpKSk7CisJCWJyZWFrOworCWNhc2UgVEFHX0ZPUldBUkQ6CisJCU5EX1BSSU5UKChuZG8sICIsICVzdGFnZ2VkIiwgU1JDX1RBRyhtZWRzYSkgPyAiIiA6ICJ1biIpKTsKKwkJaWYgKFRSVU5LKG1lZHNhKSkKKwkJCU5EX1BSSU5UKChuZG8sICIsIGRldi50cnVuazp2bGFuICVkLiVkOiVkIiwKKwkJCQkgIFNSQ19ERVYobWVkc2EpLCBTUkNfUE9SVChtZWRzYSksIFZJRChtZWRzYSkpKTsKKwkJZWxzZQorCQkJTkRfUFJJTlQoKG5kbywgIiwgZGV2LnBvcnQ6dmxhbiAlZC4lZDolZCIsCisJCQkJICBTUkNfREVWKG1lZHNhKSwgU1JDX1BPUlQobWVkc2EpLCBWSUQobWVkc2EpKSk7CisKKwkJaWYgKENGSShtZWRzYSkpCisJCQlORF9QUklOVCgobmRvLCAiLCBDRkkiKSk7CisKKwkJTkRfUFJJTlQoKG5kbywgIiwgcHJpICVkOiAiLCBQUkkobWVkc2EpKSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCU5EX0RFRkFVTFRQUklOVCgoY29uc3QgdV9jaGFyICopbWVkc2EsIGNhcGxlbik7CisJCXJldHVybjsKKwl9Cit9CisKK3ZvaWQKK21lZHNhX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAorCSAgICBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgsIHVfaW50IGNhcGxlbiwKKwkgICAgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICpzcmMsIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqZHN0KQoreworCWNvbnN0IHN0cnVjdCBtZWRzYV9wa3RoZHIgKm1lZHNhOworCXVfc2hvcnQgZXRoZXJfdHlwZTsKKworCW1lZHNhID0gKGNvbnN0IHN0cnVjdCBtZWRzYV9wa3RoZHIgKilicDsKKwlORF9UQ0hFQ0soKm1lZHNhKTsKKworCWlmICghbmRvLT5uZG9fZWZsYWcpCisJCU5EX1BSSU5UKChuZG8sICJNRURTQSAlZC4lZDolZDogIiwKKwkJCSAgU1JDX0RFVihtZWRzYSksIFNSQ19QT1JUKG1lZHNhKSwgVklEKG1lZHNhKSkpOworCWVsc2UKKwkJbWVkc2FfcHJpbnRfZnVsbChuZG8sIG1lZHNhLCBjYXBsZW4pOworCisJYnAgKz0gODsKKwlsZW5ndGggLT0gODsKKwljYXBsZW4gLT0gODsKKworCWV0aGVyX3R5cGUgPSBFWFRSQUNUXzE2QklUUygmbWVkc2EtPmV0aGVyX3R5cGUpOworCWlmIChldGhlcl90eXBlIDw9IEVUSEVSTVRVKSB7CisJCS8qIFRyeSB0byBwcmludCB0aGUgTExDLWxheWVyIGhlYWRlciAmIGhpZ2hlciBsYXllcnMgKi8KKwkJaWYgKGxsY19wcmludChuZG8sIGJwLCBsZW5ndGgsIGNhcGxlbiwgc3JjLCBkc3QpIDwgMCkgeworCQkJLyogcGFja2V0IHR5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCisJCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCisJCQkJTkRfREVGQVVMVFBSSU5UKGJwLCBjYXBsZW4pOworCQl9CisJfSBlbHNlIHsKKwkJaWYgKG5kby0+bmRvX2VmbGFnKQorCQkJTkRfUFJJTlQoKG5kbywgImV0aGVydHlwZSAlcyAoMHglMDR4KSAiLAorCQkJCSAgdG9rMnN0cihldGhlcnR5cGVfdmFsdWVzLCAiVW5rbm93biIsCisJCQkJCSAgZXRoZXJfdHlwZSksCisJCQkJICBldGhlcl90eXBlKSk7CisJCWlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBldGhlcl90eXBlLCBicCwgbGVuZ3RoLCBjYXBsZW4sIHNyYywgZHN0KSA9PSAwKSB7CisJCQkvKiBldGhlcl90eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLworCQkJaWYgKCFuZG8tPm5kb19lZmxhZykKKwkJCQlORF9QUklOVCgobmRvLCAiZXRoZXJ0eXBlICVzICgweCUwNHgpICIsCisJCQkJCSAgdG9rMnN0cihldGhlcnR5cGVfdmFsdWVzLCAiVW5rbm93biIsCisJCQkJCQkgIGV0aGVyX3R5cGUpLAorCQkJCQkgIGV0aGVyX3R5cGUpKTsKKworCQkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQorCQkJCU5EX0RFRkFVTFRQUklOVChicCwgY2FwbGVuKTsKKwkJfQorCX0KKwlyZXR1cm47Cit0cnVuYzoKKwlORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7Cit9CisKKy8qCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBjLXN0eWxlOiBic2QKKyAqIEVuZDoKKyAqLworCmRpZmYgLS1naXQgYS9wcmludC1tb2JpbGUuYyBiL3ByaW50LW1vYmlsZS5jCmluZGV4IGRmNDEyZWUuLjZkMzE2NDggMTAwNjQ0Ci0tLSBhL3ByaW50LW1vYmlsZS5jCisrKyBiL3ByaW50LW1vYmlsZS5jCkBAIC0zNiwxNiArMzYsMTcgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQdjQgbW9iaWxpdHkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCS8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2RlZmluZSBNT0JJTEVfU0laRSAoOCkKIApAQCAtOTQsNyArOTUsNyBAQAogCQlORF9QUklOVCgobmRvLCAiPiAlcyAiLCBpcGFkZHJfc3RyaW5nKG5kbywgJm1vYi0+b2RzdCkpKTsKIAkJTkRfUFJJTlQoKG5kbywgIihvcHJvdG89JWQpIiwgcHJvdG8+PjgpKTsKIAl9Ci0JdmVjWzBdLnB0ciA9IChjb25zdCB1aW50OF90ICopKHZvaWQgKiltb2I7CisJdmVjWzBdLnB0ciA9IChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKiltb2I7CiAJdmVjWzBdLmxlbiA9IG9zcCA/IDEyIDogODsKIAlpZiAoaW5fY2tzdW0odmVjLCAxKSE9MCkgewogCQlORF9QUklOVCgobmRvLCAiIChiYWQgY2hlY2tzdW0gJWQpIiwgY3JjKSk7CmRpZmYgLS1naXQgYS9wcmludC1tb2JpbGl0eS5jIGIvcHJpbnQtbW9iaWxpdHkuYwppbmRleCBiNmZhNjFlLi43MWNjODViIDEwMDY0NAotLS0gYS9wcmludC1tb2JpbGl0eS5jCisrKyBiL3ByaW50LW1vYmlsaXR5LmMKQEAgLTI3LDE4ICsyNywyMCBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSVB2NiBtb2JpbGl0eSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2lmZGVmIElORVQ2Ci0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSAiaXA2LmgiCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCisKK3N0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfE1PQklMSVRZXSI7CiAKIC8qIE1vYmlsaXR5IGhlYWRlciAqLwogc3RydWN0IGlwNl9tb2JpbGl0eSB7CkBAIC03MSw2ICs3MywxOCBAQAogI2RlZmluZSBJUDZNX0JJTkRJTkdfRVJST1IJNwkvKiBCaW5kaW5nIEVycm9yICovCiAjZGVmaW5lIElQNk1fTUFYCQk3CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIGlwNm1fc3RyW10gPSB7CisJeyBJUDZNX0JJTkRJTkdfUkVRVUVTVCwgICJCUlIiICB9LAorCXsgSVA2TV9IT01FX1RFU1RfSU5JVCwgICAiSG9USSIgfSwKKwl7IElQNk1fQ0FSRU9GX1RFU1RfSU5JVCwgIkNvVEkiIH0sCisJeyBJUDZNX0hPTUVfVEVTVCwgICAgICAgICJIb1QiICB9LAorCXsgSVA2TV9DQVJFT0ZfVEVTVCwgICAgICAiQ29UIiAgfSwKKwl7IElQNk1fQklORElOR19VUERBVEUsICAgIkJVIiAgIH0sCisJeyBJUDZNX0JJTkRJTkdfQUNLLCAgICAgICJCQSIgICB9LAorCXsgSVA2TV9CSU5ESU5HX0VSUk9SLCAgICAiQkUiICAgfSwKKwl7IDAsIE5VTEwgfQorfTsKKwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGlwNm1faGRybGVuW0lQNk1fTUFYICsgMV0gPSB7CiAJSVA2TV9NSU5MRU4sICAgICAgLyogSVA2TV9CSU5ESU5HX1JFUVVFU1QgICovCiAJSVA2TV9NSU5MRU4gKyA4LCAgLyogSVA2TV9IT01FX1RFU1RfSU5JVCAgICovCkBAIC04MiwxMSArOTYsNiBAQAogCUlQNk1fTUlOTEVOICsgMTYsIC8qIElQNk1fQklORElOR19FUlJPUiAgICAqLwogfTsKIAotLyogWFhYOiB1bnVzZWQgKi8KLSNkZWZpbmUgSVA2TU9QVF9CVV9NSU5MRU4JMTAKLSNkZWZpbmUgSVA2TU9QVF9CQV9NSU5MRU4JMTMKLSNkZWZpbmUgSVA2TU9QVF9CUl9NSU5MRU4JMgotCiAvKiBNb2JpbGl0eSBIZWFkZXIgT3B0aW9ucyAqLwogI2RlZmluZSBJUDZNT1BUX01JTkxFTgkJMgogI2RlZmluZSBJUDZNT1BUX1BBRDEgICAgICAgICAgMHgwCS8qIFBhZDEgKi8KQEAgLTEwMCw3ICsxMDksNyBAQAogI2RlZmluZSBJUDZNT1BUX0FVVEggICAgICAgICAgMHg1CS8qIEJpbmRpbmcgQXV0aG9yaXphdGlvbiBEYXRhICovCiAjZGVmaW5lIElQNk1PUFRfQVVUSF9NSU5MRU4gICAgMTIKIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIG1vYmlsaXR5X29wdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmJwLCBjb25zdCB1bnNpZ25lZCBsZW4pCiB7CkBAIC0xNzQsMTAgKzE4MywxMCBAQAogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JcmV0dXJuOworCXJldHVybiAwOwogCiB0cnVuYzoKLQlORF9QUklOVCgobmRvLCAiW3RydW5jXSAiKSk7CisJcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC0xOTIsNyArMjAxLDcgQEAKIAl1bnNpZ25lZCBtaGxlbiwgaGxlbjsKIAl1aW50OF90IHR5cGU7CiAKLQltaCA9IChzdHJ1Y3QgaXA2X21vYmlsaXR5ICopYnA7CisJbWggPSAoY29uc3Qgc3RydWN0IGlwNl9tb2JpbGl0eSAqKWJwOwogCiAJLyogJ2VwJyBwb2ludHMgdG8gdGhlIGVuZCBvZiBhdmFpbGFibGUgZGF0YS4gKi8KIAllcCA9IG5kby0+bmRvX3NuYXBlbmQ7CkBAIC0yMjMsMTcgKzIzMiwxNSBAQAogCQlORF9QUklOVCgobmRvLCAiKGhlYWRlciBsZW5ndGggJXUgaXMgdG9vIHNtYWxsIGZvciB0eXBlICV1KSIsIG1obGVuLCB0eXBlKSk7CiAJCWdvdG8gdHJ1bmM7CiAJfQorCU5EX1BSSU5UKChuZG8sICJtb2JpbGl0eTogJXMiLCB0b2syc3RyKGlwNm1fc3RyLCAidHlwZS0jJXUiLCB0eXBlKSkpOwogCXN3aXRjaCAodHlwZSkgewogCWNhc2UgSVA2TV9CSU5ESU5HX1JFUVVFU1Q6Ci0JCU5EX1BSSU5UKChuZG8sICJtb2JpbGl0eTogQlJSIikpOwogCQlobGVuID0gSVA2TV9NSU5MRU47CiAJCWJyZWFrOwogCWNhc2UgSVA2TV9IT01FX1RFU1RfSU5JVDoKIAljYXNlIElQNk1fQ0FSRU9GX1RFU1RfSU5JVDoKLQkJTkRfUFJJTlQoKG5kbywgIm1vYmlsaXR5OiAlc29USSIsCi0JCQl0eXBlID09IElQNk1fSE9NRV9URVNUX0lOSVQgPyAiSCIgOiAiQyIpKTsKIAkJaGxlbiA9IElQNk1fTUlOTEVOOwotICAgIAkJaWYgKG5kby0+bmRvX3ZmbGFnKSB7CisJCWlmIChuZG8tPm5kb192ZmxhZykgewogCQkJTkRfVENIRUNLMigqbWgsIGhsZW4gKyA4KTsKIAkJCU5EX1BSSU5UKChuZG8sICIgJXMgSW5pdCBDb29raWU9JTA4eDolMDh4IiwKIAkJCSAgICAgICB0eXBlID09IElQNk1fSE9NRV9URVNUX0lOSVQgPyAiSG9tZSIgOiAiQ2FyZS1vZiIsCkBAIC0yNDQsMTIgKzI1MSwxMCBAQAogCQlicmVhazsKIAljYXNlIElQNk1fSE9NRV9URVNUOgogCWNhc2UgSVA2TV9DQVJFT0ZfVEVTVDoKLQkJTkRfUFJJTlQoKG5kbywgIm1vYmlsaXR5OiAlc29UIiwKLQkJCXR5cGUgPT0gSVA2TV9IT01FX1RFU1QgPyAiSCIgOiAiQyIpKTsKIAkJTkRfVENIRUNLKG1oLT5pcDZtX2RhdGExNlswXSk7CiAJCU5EX1BSSU5UKChuZG8sICIgbm9uY2UgaWQ9MHgleCIsIEVYVFJBQ1RfMTZCSVRTKCZtaC0+aXA2bV9kYXRhMTZbMF0pKSk7CiAJCWhsZW4gPSBJUDZNX01JTkxFTjsKLSAgICAJCWlmIChuZG8tPm5kb192ZmxhZykgeworCQlpZiAobmRvLT5uZG9fdmZsYWcpIHsKIAkJCU5EX1RDSEVDSzIoKm1oLCBobGVuICsgOCk7CiAJCQlORF9QUklOVCgobmRvLCAiICVzIEluaXQgQ29va2llPSUwOHg6JTA4eCIsCiAJCQkgICAgICAgdHlwZSA9PSBJUDZNX0hPTUVfVEVTVCA/ICJIb21lIiA6ICJDYXJlLW9mIiwKQEAgLTI1Nyw3ICsyNjIsNyBAQAogCQkJICAgICAgIEVYVFJBQ1RfMzJCSVRTKCZicFtobGVuICsgNF0pKSk7CiAJCX0KIAkJaGxlbiArPSA4OwotICAgIAkJaWYgKG5kby0+bmRvX3ZmbGFnKSB7CisJCWlmIChuZG8tPm5kb192ZmxhZykgewogCQkJTkRfVENIRUNLMigqbWgsIGhsZW4gKyA4KTsKIAkJCU5EX1BSSU5UKChuZG8sICIgJXMgS2V5Z2VuIFRva2VuPSUwOHg6JTA4eCIsCiAJCQkgICAgICAgdHlwZSA9PSBJUDZNX0hPTUVfVEVTVCA/ICJIb21lIiA6ICJDYXJlLW9mIiwKQEAgLTI2Nyw3ICsyNzIsNiBAQAogCQlobGVuICs9IDg7CiAJCWJyZWFrOwogCWNhc2UgSVA2TV9CSU5ESU5HX1VQREFURToKLQkJTkRfUFJJTlQoKG5kbywgIm1vYmlsaXR5OiBCVSIpKTsKIAkJTkRfVENIRUNLKG1oLT5pcDZtX2RhdGExNlswXSk7CiAJCU5EX1BSSU5UKChuZG8sICIgc2VxIz0ldSIsIEVYVFJBQ1RfMTZCSVRTKCZtaC0+aXA2bV9kYXRhMTZbMF0pKSk7CiAJCWhsZW4gPSBJUDZNX01JTkxFTjsKQEAgLTI5Miw3ICsyOTYsNiBAQAogCQlobGVuICs9IDI7CiAJCWJyZWFrOwogCWNhc2UgSVA2TV9CSU5ESU5HX0FDSzoKLQkJTkRfUFJJTlQoKG5kbywgIm1vYmlsaXR5OiBCQSIpKTsKIAkJTkRfVENIRUNLKG1oLT5pcDZtX2RhdGE4WzBdKTsKIAkJTkRfUFJJTlQoKG5kbywgIiBzdGF0dXM9JXUiLCBtaC0+aXA2bV9kYXRhOFswXSkpOwogCQlpZiAobWgtPmlwNm1fZGF0YThbMV0gJiAweDgwKQpAQCAtMzA4LDcgKzMxMSw2IEBACiAJCWhsZW4gKz0gMjsKIAkJYnJlYWs7CiAJY2FzZSBJUDZNX0JJTkRJTkdfRVJST1I6Ci0JCU5EX1BSSU5UKChuZG8sICJtb2JpbGl0eTogQkUiKSk7CiAJCU5EX1RDSEVDSyhtaC0+aXA2bV9kYXRhOFswXSk7CiAJCU5EX1BSSU5UKChuZG8sICIgc3RhdHVzPSV1IiwgbWgtPmlwNm1fZGF0YThbMF0pKTsKIAkJLyogUmVzZXJ2ZWQgKi8KQEAgLTMxOCwxNyArMzIwLDE3IEBACiAJCWhsZW4gKz0gMTY7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCU5EX1BSSU5UKChuZG8sICJtb2JpbGl0eTogdHlwZS0jJXUgbGVuPSV1IiwgdHlwZSwgbWgtPmlwNm1fbGVuKSk7CisJCU5EX1BSSU5UKChuZG8sICIgbGVuPSV1IiwgbWgtPmlwNm1fbGVuKSk7CiAJCXJldHVybihtaGxlbik7CiAJCWJyZWFrOwogCX0KLSAgICAJaWYgKG5kby0+bmRvX3ZmbGFnKQotCQltb2JpbGl0eV9vcHRfcHJpbnQobmRvLCAmYnBbaGxlbl0sIG1obGVuIC0gaGxlbik7CisJaWYgKG5kby0+bmRvX3ZmbGFnKQorCQlpZiAobW9iaWxpdHlfb3B0X3ByaW50KG5kbywgJmJwW2hsZW5dLCBtaGxlbiAtIGhsZW4pKQorCQkJZ290byB0cnVuYzs7CiAKIAlyZXR1cm4obWhsZW4pOwogCiAgdHJ1bmM6Ci0JTkRfUFJJTlQoKG5kbywgIlt8TU9CSUxJVFldIikpOworCU5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIAlyZXR1cm4obWhsZW4pOwogfQotI2VuZGlmIC8qIElORVQ2ICovCmRpZmYgLS1naXQgYS9wcmludC1tcGNwLmMgYi9wcmludC1tcGNwLmMKaW5kZXggOWRhMzU4Mi4uMWI5YTVkNyAxMDA2NDQKLS0tIGEvcHJpbnQtbXBjcC5jCisrKyBiL3ByaW50LW1wY3AuYwpAQCAtMTIsMTkgKzEyLDE4IEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIHN1cHBvcnQgZm9yIHRoZSBJRUVFIE1QQ1AgcHJvdG9jb2wgYXMgcGVyIDgwMi4zYWgKLSAqCiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSUVFRSA4MDIuM2FoIE11bHRpLVBvaW50IENvbnRyb2wgUHJvdG9jb2wgKE1QQ1ApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2RlZmluZSBNUENQX1RJTUVTVEFNUF9MRU4gICAgICAgIDQKZGlmZiAtLWdpdCBhL3ByaW50LW1wbHMuYyBiL3ByaW50LW1wbHMuYwppbmRleCBiYzM0ZDUwLi5iYTQyMjMzIDEwMDY0NAotLS0gYS9wcmludC1tcGxzLmMKKysrIGIvcHJpbnQtbXBscy5jCkBAIC0yNiwxNSArMjYsMTYgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE11bHRpLVByb3RvY29sIExhYmVsIFN3aXRjaGluZyAoTVBMUykgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJtcGxzLmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyICptcGxzX2xhYmVsbmFtZVtdID0gewpAQCAtNjcsNiArNjgsMTAgQEAKIAlORF9QUklOVCgobmRvLCAiTVBMUyIpKTsKIAlkbyB7CiAJCU5EX1RDSEVDSzIoKnAsIHNpemVvZihsYWJlbF9lbnRyeSkpOworCQlpZiAobGVuZ3RoIDwgc2l6ZW9mKGxhYmVsX2VudHJ5KSkgeworCQkJTkRfUFJJTlQoKG5kbywgIlt8TVBMU10sIGxlbmd0aCAldSIsIGxlbmd0aCkpOworCQkJcmV0dXJuOworCQl9CiAJCWxhYmVsX2VudHJ5ID0gRVhUUkFDVF8zMkJJVFMocCk7CiAJCU5EX1BSSU5UKChuZG8sICIlcyhsYWJlbCAldSIsCiAJCSAgICAgICAobGFiZWxfc3RhY2tfZGVwdGggJiYgbmRvLT5uZG9fdmZsYWcpID8gIlxuXHQiIDogIiAiLApAQCAtODEsNiArODYsNyBAQAogCQlORF9QUklOVCgobmRvLCAiLCB0dGwgJXUpIiwgTVBMU19UVEwobGFiZWxfZW50cnkpKSk7CiAKIAkJcCArPSBzaXplb2YobGFiZWxfZW50cnkpOworCQlsZW5ndGggLT0gc2l6ZW9mKGxhYmVsX2VudHJ5KTsKIAl9IHdoaWxlICghTVBMU19TVEFDSyhsYWJlbF9lbnRyeSkpOwogCiAJLyoKQEAgLTEyMyw2ICsxMjksMTEgQEAKIAkJICogQ2lzY28gc2VuZHMgY29udHJvbC1wbGFuZSB0cmFmZmljIE1QTFMtZW5jYXBzdWxhdGVkIGluCiAJCSAqIHRoaXMgZmFzaGlvbi4KIAkJICovCisJCU5EX1RDSEVDSygqcCk7CisJCWlmIChsZW5ndGggPCAxKSB7CisJCQkvKiBub3RoaW5nIHRvIHByaW50ICovCisJCQlyZXR1cm47CisJCX0KIAkJc3dpdGNoKCpwKSB7CiAKIAkJY2FzZSAweDQ1OgpAQCAtMTc1LDIyICsxODYsMjIgQEAKIAkgKi8KIAlpZiAocHQgPT0gUFRfVU5LTk9XTikgewogCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCi0JCQlORF9ERUZBVUxUUFJJTlQocCwgbGVuZ3RoIC0gKHAgLSBicCkpOworCQkJTkRfREVGQVVMVFBSSU5UKHAsIGxlbmd0aCk7CiAJCXJldHVybjsKIAl9CiAJTkRfUFJJTlQoKG5kbywgbmRvLT5uZG9fdmZsYWcgPyAiXG5cdCIgOiAiICIpKTsKIAlzd2l0Y2ggKHB0KSB7CiAKIAljYXNlIFBUX0lQVjQ6Ci0JCWlwX3ByaW50KG5kbywgcCwgbGVuZ3RoIC0gKHAgLSBicCkpOworCQlpcF9wcmludChuZG8sIHAsIGxlbmd0aCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQVF9JUFY2OgotCQlpcDZfcHJpbnQobmRvLCBwLCBsZW5ndGggLSAocCAtIGJwKSk7CisJCWlwNl9wcmludChuZG8sIHAsIGxlbmd0aCk7CiAJCWJyZWFrOwogCiAJY2FzZSBQVF9PU0k6Ci0JCWlzb2NsbnNfcHJpbnQobmRvLCBwLCBsZW5ndGggLSAocCAtIGJwKSwgbGVuZ3RoIC0gKHAgLSBicCkpOworCQlpc29jbG5zX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBsZW5ndGgpOwogCQlicmVhazsKIAogCWRlZmF1bHQ6CmRpZmYgLS1naXQgYS9wcmludC1tcHRjcC5jIGIvcHJpbnQtbXB0Y3AuYwppbmRleCBmODVmMWQyLi5lNzU3ZWE0IDEwMDY0NAotLS0gYS9wcmludC1tcHRjcC5jCisrKyBiL3ByaW50LW1wdGNwLmMKQEAgLTMyLDE0ICszMiwxNyBAQAogICogU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogTXVsdGlwYXRoIFRDUCAoTVBUQ1ApIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDY4MjQgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKQEAgLTE3Myw3ICsxNzYsNyBAQAogbXBfY2FwYWJsZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpvcHQsIHVfaW50IG9wdF9sZW4sIHVfY2hhciBmbGFncykKIHsKLSAgICAgICAgc3RydWN0IG1wX2NhcGFibGUgKm1wYyA9IChzdHJ1Y3QgbXBfY2FwYWJsZSAqKSBvcHQ7CisgICAgICAgIGNvbnN0IHN0cnVjdCBtcF9jYXBhYmxlICptcGMgPSAoY29uc3Qgc3RydWN0IG1wX2NhcGFibGUgKikgb3B0OwogCiAgICAgICAgIGlmICghKG9wdF9sZW4gPT0gMTIgJiYgZmxhZ3MgJiBUSF9TWU4pICYmCiAgICAgICAgICAgICAhKG9wdF9sZW4gPT0gMjAgJiYgKGZsYWdzICYgKFRIX1NZTiB8IFRIX0FDSykpID09IFRIX0FDSykpCkBAIC0xOTcsNyArMjAwLDcgQEAKIG1wX2pvaW5fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqb3B0LCB1X2ludCBvcHRfbGVuLCB1X2NoYXIgZmxhZ3MpCiB7Ci0gICAgICAgIHN0cnVjdCBtcF9qb2luICptcGogPSAoc3RydWN0IG1wX2pvaW4gKikgb3B0OworICAgICAgICBjb25zdCBzdHJ1Y3QgbXBfam9pbiAqbXBqID0gKGNvbnN0IHN0cnVjdCBtcF9qb2luICopIG9wdDsKIAogICAgICAgICBpZiAoIShvcHRfbGVuID09IDEyICYmIGZsYWdzICYgVEhfU1lOKSAmJgogICAgICAgICAgICAgIShvcHRfbGVuID09IDE2ICYmIChmbGFncyAmIChUSF9TWU4gfCBUSF9BQ0spKSA9PSAoVEhfU1lOIHwgVEhfQUNLKSkgJiYKQEAgLTIzMyw3ICsyMzYsNyBAQAogICAgICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIHVfaW50IG1wX2Rzc19sZW4oc3RydWN0IG1wX2RzcyAqbSwgaW50IGNzdW0pCitzdGF0aWMgdV9pbnQgbXBfZHNzX2xlbihjb25zdCAgc3RydWN0IG1wX2RzcyAqbSwgaW50IGNzdW0pCiB7CiAgICAgICAgIHVfaW50IGxlbjsKIApAQCAtMjY1LDcgKzI2OCw3IEBACiBtcF9kc3NfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpvcHQsIHVfaW50IG9wdF9sZW4sIHVfY2hhciBmbGFncykKIHsKLSAgICAgICAgc3RydWN0IG1wX2RzcyAqbWRzcyA9IChzdHJ1Y3QgbXBfZHNzICopIG9wdDsKKyAgICAgICAgY29uc3Qgc3RydWN0IG1wX2RzcyAqbWRzcyA9IChjb25zdCBzdHJ1Y3QgbXBfZHNzICopIG9wdDsKIAogICAgICAgICBpZiAoKG9wdF9sZW4gIT0gbXBfZHNzX2xlbihtZHNzLCAxKSAmJgogICAgICAgICAgICAgIG9wdF9sZW4gIT0gbXBfZHNzX2xlbihtZHNzLCAwKSkgfHwgZmxhZ3MgJiBUSF9TWU4pCkBAIC0zMTAsNyArMzEzLDcgQEAKIGFkZF9hZGRyX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpvcHQsIHVfaW50IG9wdF9sZW4sIHVfY2hhciBmbGFncyBfVV8pCiB7Ci0gICAgICAgIHN0cnVjdCBtcF9hZGRfYWRkciAqYWRkX2FkZHIgPSAoc3RydWN0IG1wX2FkZF9hZGRyICopIG9wdDsKKyAgICAgICAgY29uc3Qgc3RydWN0IG1wX2FkZF9hZGRyICphZGRfYWRkciA9IChjb25zdCBzdHJ1Y3QgbXBfYWRkX2FkZHIgKikgb3B0OwogICAgICAgICB1X2ludCBpcHZlciA9IE1QX0FERF9BRERSX0lQVkVSKGFkZF9hZGRyLT5zdWJfaXB2ZXIpOwogCiAgICAgICAgIGlmICghKChvcHRfbGVuID09IDggfHwgb3B0X2xlbiA9PSAxMCkgJiYgaXB2ZXIgPT0gNCkgJiYKQEAgLTMyNSw5ICszMjgsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjoldSIsIEVYVFJBQ1RfMTZCSVRTKGFkZF9hZGRyLT51LnY0LnBvcnQpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgNjoKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sIGFkZF9hZGRyLT51LnY2LmFkZHIpKSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICBpZiAob3B0X2xlbiA9PSAyMikKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICI6JXUiLCBFWFRSQUNUXzE2QklUUyhhZGRfYWRkci0+dS52Ni5wb3J0KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzQyLDggKzM0Myw4IEBACiByZW1vdmVfYWRkcl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqb3B0LCB1X2ludCBvcHRfbGVuLCB1X2NoYXIgZmxhZ3MgX1VfKQogewotICAgICAgICBzdHJ1Y3QgbXBfcmVtb3ZlX2FkZHIgKnJlbW92ZV9hZGRyID0gKHN0cnVjdCBtcF9yZW1vdmVfYWRkciAqKSBvcHQ7Ci0gICAgICAgIHVpbnQ4X3QgKmFkZHJfaWQgPSAmcmVtb3ZlX2FkZHItPmFkZHJzX2lkOworICAgICAgICBjb25zdCBzdHJ1Y3QgbXBfcmVtb3ZlX2FkZHIgKnJlbW92ZV9hZGRyID0gKGNvbnN0IHN0cnVjdCBtcF9yZW1vdmVfYWRkciAqKSBvcHQ7CisgICAgICAgIGNvbnN0IHVpbnQ4X3QgKmFkZHJfaWQgPSAmcmVtb3ZlX2FkZHItPmFkZHJzX2lkOwogCiAgICAgICAgIGlmIChvcHRfbGVuIDwgNCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTM1OSw3ICszNjAsNyBAQAogbXBfcHJpb19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpvcHQsIHVfaW50IG9wdF9sZW4sIHVfY2hhciBmbGFncyBfVV8pCiB7Ci0gICAgICAgIHN0cnVjdCBtcF9wcmlvICptcHAgPSAoc3RydWN0IG1wX3ByaW8gKikgb3B0OworICAgICAgICBjb25zdCBzdHJ1Y3QgbXBfcHJpbyAqbXBwID0gKGNvbnN0IHN0cnVjdCBtcF9wcmlvICopIG9wdDsKIAogICAgICAgICBpZiAob3B0X2xlbiAhPSAzICYmIG9wdF9sZW4gIT0gNCkKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKQEAgLTQxNSwxMyArNDE2LDEzIEBACiBtcHRjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqY3AsIHVfaW50IGxlbiwgdV9jaGFyIGZsYWdzKQogewotICAgICAgICBzdHJ1Y3QgbXB0Y3Bfb3B0aW9uICpvcHQ7CisgICAgICAgIGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb24gKm9wdDsKICAgICAgICAgdV9pbnQgc3VidHlwZTsKIAogICAgICAgICBpZiAobGVuIDwgMykKICAgICAgICAgICAgICAgICByZXR1cm4gMDsKIAotICAgICAgICBvcHQgPSAoc3RydWN0IG1wdGNwX29wdGlvbiAqKSBjcDsKKyAgICAgICAgb3B0ID0gKGNvbnN0IHN0cnVjdCBtcHRjcF9vcHRpb24gKikgY3A7CiAgICAgICAgIHN1YnR5cGUgPSBtaW4oTVBUQ1BfT1BUX1NVQlRZUEUob3B0LT5zdWJfZXRjKSwgTVBUQ1BfU1VCX0ZDTE9TRSArIDEpOwogCiAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgJXMiLCBtcHRjcF9vcHRpb25zW3N1YnR5cGVdLm5hbWUpKTsKZGlmZiAtLWdpdCBhL3ByaW50LW1zZHAuYyBiL3ByaW50LW1zZHAuYwppbmRleCBmYjgwMmI1Li41MGJhZmIwIDEwMDY0NAotLS0gYS9wcmludC1tc2RwLmMKKysrIGIvcHJpbnQtbXNkcC5jCkBAIC0xNiwxNCArMTYsMTUgQEAKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBNdWx0aWNhc3QgU291cmNlIERpc2NvdmVyeSBQcm90b2NvbCAoTVNEUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApkaWZmIC0tZ2l0IGEvcHJpbnQtbXNubGIuYyBiL3ByaW50LW1zbmxiLmMKaW5kZXggZmNkMDAwNi4uNTI2NGRhNCAxMDA2NDQKLS0tIGEvcHJpbnQtbXNubGIuYworKysgYi9wcmludC1tc25sYi5jCkBAIC0yNiwxNCArMjYsMTUgQEAKICAqIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE1TIE5ldHdvcmsgTG9hZCBCYWxhbmNpbmcncyAoTkxCKSBoZWFydGJlYXQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtNTEsNyArNTIsNyBAQAogewogCWNvbnN0IHN0cnVjdCBtc25sYl9oZWFydGJlYXRfcGt0ICpoYjsKIAotCWhiID0gKHN0cnVjdCBtc25sYl9oZWFydGJlYXRfcGt0ICopYnA7CisJaGIgPSAoY29uc3Qgc3RydWN0IG1zbmxiX2hlYXJ0YmVhdF9wa3QgKilicDsKIAlORF9UQ0hFQ0soKmhiKTsKIAogCU5EX1BSSU5UKChuZG8sICJNUyBOTEIgaGVhcnRiZWF0LCBob3N0IHByaW9yaXR5OiAldSwiLApkaWZmIC0tZ2l0IGEvcHJpbnQtbmZsb2cuYyBiL3ByaW50LW5mbG9nLmMKaW5kZXggNDIzNDAyMi4uNDFjYmY3OCAxMDA2NDQKLS0tIGEvcHJpbnQtbmZsb2cuYworKysgYi9wcmludC1uZmxvZy5jCkBAIC0yNSwyMyArMjUsMjQgQEAKICAqIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBETFRfTkZMT0cgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAKICNpZiBkZWZpbmVkKERMVF9ORkxPRykgJiYgZGVmaW5lZChIQVZFX1BDQVBfTkZMT0dfSCkKICNpbmNsdWRlIDxwY2FwL25mbG9nLmg+CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdG9rIG5mbG9nX3ZhbHVlc1tdID0gewogCXsgQUZfSU5FVCwJCSJJUHY0IiB9LAotI2lmZGVmIElORVQ2CisjaWZkZWYgQUZfSU5FVDYKIAl7IEFGX0lORVQ2LAkJIklQdjYiIH0sCi0jZW5kaWYgLypJTkVUNiovCisjZW5kaWYgLypBRl9JTkVUNiovCiAJeyAwLAkJCU5VTEwgfQogfTsKIApkaWZmIC0tZ2l0IGEvcHJpbnQtbmZzLmMgYi9wcmludC1uZnMuYwppbmRleCBkZDJmN2YxLi5hNzFlMDY4IDEwMDY0NAotLS0gYS9wcmludC1uZnMuYworKysgYi9wcmludC1uZnMuYwpAQCAtMTksMTcgKzE5LDE4IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE5ldHdvcmsgRmlsZSBTeXN0ZW0gKE5GUykgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKQEAgLTM3LDkgKzM4LDcgQEAKICNpbmNsdWRlICJuZnNmaC5oIgogCiAjaW5jbHVkZSAiaXAuaCIKLSNpZmRlZiBJTkVUNgogI2luY2x1ZGUgImlwNi5oIgotI2VuZGlmCiAjaW5jbHVkZSAicnBjX2F1dGguaCIKICNpbmNsdWRlICJycGNfbXNnLmgiCiAKQEAgLTU1LDcgKzU0LDcgQEAKIC8qCiAgKiBNYXBwaW5nIG9mIG9sZCBORlMgVmVyc2lvbiAyIFJQQyBudW1iZXJzIHRvIGdlbmVyaWMgbnVtYmVycy4KICAqLwotdWludDMyX3QgbmZzdjNfcHJvY2lkW05GU19OUFJPQ1NdID0geworc3RhdGljIHVpbnQzMl90IG5mc3YzX3Byb2NpZFtORlNfTlBST0NTXSA9IHsKIAlORlNQUk9DX05VTEwsCiAJTkZTUFJPQ19HRVRBVFRSLAogCU5GU1BST0NfU0VUQVRUUiwKQEAgLTIwMywzMyArMjAyLDI0IEBACiBwcmludF9uZnNhZGRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmJwLCBjb25zdCBjaGFyICpzLCBjb25zdCBjaGFyICpkKQogewotCXN0cnVjdCBpcCAqaXA7Ci0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3QgaXA2X2hkciAqaXA2OworCWNvbnN0IHN0cnVjdCBpcCAqaXA7CisJY29uc3Qgc3RydWN0IGlwNl9oZHIgKmlwNjsKIAljaGFyIHNyY2FkZHJbSU5FVDZfQUREUlNUUkxFTl0sIGRzdGFkZHJbSU5FVDZfQUREUlNUUkxFTl07Ci0jZWxzZQotI2lmbmRlZiBJTkVUX0FERFJTVFJMRU4KLSNkZWZpbmUgSU5FVF9BRERSU1RSTEVOCTE2Ci0jZW5kaWYKLQljaGFyIHNyY2FkZHJbSU5FVF9BRERSU1RSTEVOXSwgZHN0YWRkcltJTkVUX0FERFJTVFJMRU5dOwotI2VuZGlmCiAKIAlzcmNhZGRyWzBdID0gZHN0YWRkclswXSA9ICdcMCc7Ci0Jc3dpdGNoIChJUF9WKChzdHJ1Y3QgaXAgKilicCkpIHsKKwlzd2l0Y2ggKElQX1YoKGNvbnN0IHN0cnVjdCBpcCAqKWJwKSkgewogCWNhc2UgNDoKLQkJaXAgPSAoc3RydWN0IGlwICopYnA7CisJCWlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWJwOwogCQlzdHJsY3B5KHNyY2FkZHIsIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX3NyYyksIHNpemVvZihzcmNhZGRyKSk7CiAJCXN0cmxjcHkoZHN0YWRkciwgaXBhZGRyX3N0cmluZyhuZG8sICZpcC0+aXBfZHN0KSwgc2l6ZW9mKGRzdGFkZHIpKTsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAljYXNlIDY6Ci0JCWlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwOworCQlpcDYgPSAoY29uc3Qgc3RydWN0IGlwNl9oZHIgKilicDsKIAkJc3RybGNweShzcmNhZGRyLCBpcDZhZGRyX3N0cmluZyhuZG8sICZpcDYtPmlwNl9zcmMpLAogCQkgICAgc2l6ZW9mKHNyY2FkZHIpKTsKIAkJc3RybGNweShkc3RhZGRyLCBpcDZhZGRyX3N0cmluZyhuZG8sICZpcDYtPmlwNl9kc3QpLAogCQkgICAgc2l6ZW9mKGRzdGFkZHIpKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlzdHJsY3B5KHNyY2FkZHIsICI/Iiwgc2l6ZW9mKHNyY2FkZHIpKTsKIAkJc3RybGNweShkc3RhZGRyLCAiPyIsIHNpemVvZihkc3RhZGRyKSk7CkBAIC00MzQsNyArNDI0LDcgQEAKIAkvKgogCSAqIGZpbmQgdGhlIHN0YXJ0IG9mIHRoZSByZXEgZGF0YSAoaWYgd2UgY2FwdHVyZWQgaXQpCiAJICovCi0JZHAgPSAodWludDMyX3QgKikmcnAtPnJtX2NhbGwuY2JfY3JlZDsKKwlkcCA9IChjb25zdCB1aW50MzJfdCAqKSZycC0+cm1fY2FsbC5jYl9jcmVkOwogCU5EX1RDSEVDSyhkcFsxXSk7CiAJbGVuID0gRVhUUkFDVF8zMkJJVFMoJmRwWzFdKTsKIAlpZiAobGVuIDwgbGVuZ3RoKSB7CkBAIC00OTYsNyArNDg2LDcgQEAKIAogCU5EX1RDSEVDSzIoKmRwLCAoKGxlbiArIDMpICYgfjMpKTsKIAotCWNwID0gKHVfY2hhciAqKWRwOworCWNwID0gKGNvbnN0IHVfY2hhciAqKWRwOwogCS8qIFVwZGF0ZSAzMi1iaXQgcG9pbnRlciAoTkZTIGZpbGVuYW1lcyBwYWRkZWQgdG8gMzItYml0IGJvdW5kYXJpZXMpICovCiAJZHAgKz0gKChsZW4gKyAzKSAmIH4zKSAvIHNpemVvZigqZHApOwogCU5EX1BSSU5UKChuZG8sICJcIiIpKTsKQEAgLTY2MywxMiArNjUzLDEyIEBACiAJCWJyZWFrOwogCiAJY2FzZSBORlNQUk9DX1NZTUxJTks6Ci0JCWlmICgoZHAgPSBwYXJzZXJlcShuZG8sIHJwLCBsZW5ndGgpKSAhPSAwICYmCi0JCSAgICAoZHAgPSBwYXJzZWZobihuZG8sIGRwLCB2MykpICE9IDApIHsKKwkJaWYgKChkcCA9IHBhcnNlcmVxKG5kbywgcnAsIGxlbmd0aCkpICE9IE5VTEwgJiYKKwkJICAgIChkcCA9IHBhcnNlZmhuKG5kbywgZHAsIHYzKSkgIT0gTlVMTCkgewogCQkJTkRfUFJJTlQoKG5kbywgIiAtPiIpKTsKLQkJCWlmICh2MyAmJiAoZHAgPSBwYXJzZV9zYXR0cjMobmRvLCBkcCwgJnNhMykpID09IDApCisJCQlpZiAodjMgJiYgKGRwID0gcGFyc2Vfc2F0dHIzKG5kbywgZHAsICZzYTMpKSA9PSBOVUxMKQogCQkJCWJyZWFrOwotCQkJaWYgKHBhcnNlZm4obmRvLCBkcCkgPT0gMCkKKwkJCWlmIChwYXJzZWZuKG5kbywgZHApID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQlpZiAodjMgJiYgbmRvLT5uZG9fdmZsYWcpCiAJCQkJcHJpbnRfc2F0dHIzKG5kbywgJnNhMywgbmRvLT5uZG9fdmZsYWcpOwpAQCAtNjc3LDEyICs2NjcsMTIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE5GU1BST0NfTUtOT0Q6Ci0JCWlmICgoZHAgPSBwYXJzZXJlcShuZG8sIHJwLCBsZW5ndGgpKSAhPSAwICYmCi0JCSAgICAoZHAgPSBwYXJzZWZobihuZG8sIGRwLCB2MykpICE9IDApIHsKKwkJaWYgKChkcCA9IHBhcnNlcmVxKG5kbywgcnAsIGxlbmd0aCkpICE9IE5VTEwgJiYKKwkJICAgIChkcCA9IHBhcnNlZmhuKG5kbywgZHAsIHYzKSkgIT0gTlVMTCkgewogCQkJTkRfVENIRUNLKCpkcCk7CiAJCQl0eXBlID0gKG5mc190eXBlKUVYVFJBQ1RfMzJCSVRTKGRwKTsKIAkJCWRwKys7Ci0JCQlpZiAoKGRwID0gcGFyc2Vfc2F0dHIzKG5kbywgZHAsICZzYTMpKSA9PSAwKQorCQkJaWYgKChkcCA9IHBhcnNlX3NhdHRyMyhuZG8sIGRwLCAmc2EzKSkgPT0gTlVMTCkKIAkJCQlicmVhazsKIAkJCU5EX1BSSU5UKChuZG8sICIgJXMiLCB0b2syc3RyKHR5cGUyc3RyLCAidW5rLWZ0ICVkIiwgdHlwZSkpKTsKIAkJCWlmIChuZG8tPm5kb192ZmxhZyAmJiAodHlwZSA9PSBORkNIUiB8fCB0eXBlID09IE5GQkxLKSkgewpAQCAtODUxLDEzICs4NDEsOCBAQAogc3RydWN0IHhpZF9tYXBfZW50cnkgewogCXVpbnQzMl90CXhpZDsJCS8qIHRyYW5zYWN0aW9uIElEIChuZXQgb3JkZXIpICovCiAJaW50IGlwdmVyOwkJCS8qIElQIHZlcnNpb24gKDQgb3IgNikgKi8KLSNpZmRlZiBJTkVUNgogCXN0cnVjdCBpbjZfYWRkcgljbGllbnQ7CQkvKiBjbGllbnQgSVAgYWRkcmVzcyAobmV0IG9yZGVyKSAqLwogCXN0cnVjdCBpbjZfYWRkcglzZXJ2ZXI7CQkvKiBzZXJ2ZXIgSVAgYWRkcmVzcyAobmV0IG9yZGVyKSAqLwotI2Vsc2UKLQlzdHJ1Y3QgaW5fYWRkcgljbGllbnQ7CQkvKiBjbGllbnQgSVAgYWRkcmVzcyAobmV0IG9yZGVyKSAqLwotCXN0cnVjdCBpbl9hZGRyCXNlcnZlcjsJCS8qIHNlcnZlciBJUCBhZGRyZXNzIChuZXQgb3JkZXIpICovCi0jZW5kaWYKIAl1aW50MzJfdAlwcm9jOwkJLyogY2FsbCBwcm9jIG51bWJlciAoaG9zdCBvcmRlcikgKi8KIAl1aW50MzJfdAl2ZXJzOwkJLyogcHJvZ3JhbSB2ZXJzaW9uIChob3N0IG9yZGVyKSAqLwogfTsKQEAgLTg3MCwzMiArODU1LDI4IEBACiAKICNkZWZpbmUJWElETUFQU0laRQk2NAogCi1zdHJ1Y3QgeGlkX21hcF9lbnRyeSB4aWRfbWFwW1hJRE1BUFNJWkVdOworc3RhdGljIHN0cnVjdCB4aWRfbWFwX2VudHJ5IHhpZF9tYXBbWElETUFQU0laRV07CiAKLWludAl4aWRfbWFwX25leHQgPSAwOwotaW50CXhpZF9tYXBfaGludCA9IDA7CitzdGF0aWMgaW50IHhpZF9tYXBfbmV4dCA9IDA7CitzdGF0aWMgaW50IHhpZF9tYXBfaGludCA9IDA7CiAKIHN0YXRpYyBpbnQKIHhpZF9tYXBfZW50ZXIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzdW5ycGNfbXNnICpycCwgY29uc3QgdV9jaGFyICpicCkKIHsKLQlzdHJ1Y3QgaXAgKmlwID0gTlVMTDsKLSNpZmRlZiBJTkVUNgotCXN0cnVjdCBpcDZfaGRyICppcDYgPSBOVUxMOwotI2VuZGlmCisJY29uc3Qgc3RydWN0IGlwICppcCA9IE5VTEw7CisJY29uc3Qgc3RydWN0IGlwNl9oZHIgKmlwNiA9IE5VTEw7CiAJc3RydWN0IHhpZF9tYXBfZW50cnkgKnhtZXA7CiAKIAlpZiAoIU5EX1RURVNUKHJwLT5ybV9jYWxsLmNiX3ZlcnMpKQogCQlyZXR1cm4gKDApOwotCXN3aXRjaCAoSVBfVigoc3RydWN0IGlwICopYnApKSB7CisJc3dpdGNoIChJUF9WKChjb25zdCBzdHJ1Y3QgaXAgKilicCkpIHsKIAljYXNlIDQ6Ci0JCWlwID0gKHN0cnVjdCBpcCAqKWJwOworCQlpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAljYXNlIDY6Ci0JCWlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwOworCQlpcDYgPSAoY29uc3Qgc3RydWN0IGlwNl9oZHIgKilicDsKIAkJYnJlYWs7Ci0jZW5kaWYKIAlkZWZhdWx0OgogCQlyZXR1cm4gKDEpOwogCX0KQEAgLTkxMSwxMyArODkyLDExIEBACiAJCVVOQUxJR05FRF9NRU1DUFkoJnhtZXAtPmNsaWVudCwgJmlwLT5pcF9zcmMsIHNpemVvZihpcC0+aXBfc3JjKSk7CiAJCVVOQUxJR05FRF9NRU1DUFkoJnhtZXAtPnNlcnZlciwgJmlwLT5pcF9kc3QsIHNpemVvZihpcC0+aXBfZHN0KSk7CiAJfQotI2lmZGVmIElORVQ2CiAJZWxzZSBpZiAoaXA2KSB7CiAJCXhtZXAtPmlwdmVyID0gNjsKIAkJVU5BTElHTkVEX01FTUNQWSgmeG1lcC0+Y2xpZW50LCAmaXA2LT5pcDZfc3JjLCBzaXplb2YoaXA2LT5pcDZfc3JjKSk7CiAJCVVOQUxJR05FRF9NRU1DUFkoJnhtZXAtPnNlcnZlciwgJmlwNi0+aXA2X2RzdCwgc2l6ZW9mKGlwNi0+aXA2X2RzdCkpOwogCX0KLSNlbmRpZgogCXhtZXAtPnByb2MgPSBFWFRSQUNUXzMyQklUUygmcnAtPnJtX2NhbGwuY2JfcHJvYyk7CiAJeG1lcC0+dmVycyA9IEVYVFJBQ1RfMzJCSVRTKCZycC0+cm1fY2FsbC5jYl92ZXJzKTsKIAlyZXR1cm4gKDEpOwpAQCAtOTMzLDEzICs5MTIsMTIgQEAKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgeGlkX21hcF9lbnRyeSAqeG1lcDsKLQl1aW50MzJfdCB4aWQgPSBycC0+cm1feGlkOwotCXN0cnVjdCBpcCAqaXAgPSAoc3RydWN0IGlwICopYnA7Ci0jaWZkZWYgSU5FVDYKLQlzdHJ1Y3QgaXA2X2hkciAqaXA2ID0gKHN0cnVjdCBpcDZfaGRyICopYnA7Ci0jZW5kaWYKKwl1aW50MzJfdCB4aWQ7CisJY29uc3Qgc3RydWN0IGlwICppcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDsKKwljb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnA7CiAJaW50IGNtcDsKIAorCVVOQUxJR05FRF9NRU1DUFkoJnhpZCwgJnJwLT5ybV94aWQsIHNpemVvZih4bWVwLT54aWQpKTsKIAkvKiBTdGFydCBzZWFyY2hpbmcgZnJvbSB3aGVyZSB3ZSBsYXN0IGxlZnQgb2ZmICovCiAJaSA9IHhpZF9tYXBfaGludDsKIAlkbyB7CkBAIC05NTYsNyArOTM0LDYgQEAKIAkJCQljbXAgPSAwOwogCQkJfQogCQkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAkJY2FzZSA2OgogCQkJaWYgKFVOQUxJR05FRF9NRU1DTVAoJmlwNi0+aXA2X3NyYywgJnhtZXAtPnNlcnZlciwKIAkJCQkgICBzaXplb2YoaXA2LT5pcDZfc3JjKSkgIT0gMCB8fApAQCAtOTY1LDcgKzk0Miw2IEBACiAJCQkJY21wID0gMDsKIAkJCX0KIAkJCWJyZWFrOwotI2VuZGlmCiAJCWRlZmF1bHQ6CiAJCQljbXAgPSAwOwogCQkJYnJlYWs7CkBAIC0xMDM5LDcgKzEwMTUsNyBAQAogCX0KIAkvKiBzdWNjZXNzZnVsIHJldHVybiAqLwogCU5EX1RDSEVDSzIoKmRwLCBzaXplb2YoYXN0YXQpKTsKLQlyZXR1cm4gKCh1aW50MzJfdCAqKSAoc2l6ZW9mKGFzdGF0KSArICgoY2hhciAqKWRwKSkpOworCXJldHVybiAoKGNvbnN0IHVpbnQzMl90ICopIChzaXplb2YoYXN0YXQpICsgKChjb25zdCBjaGFyICopZHApKSk7CiB0cnVuYzoKIAlyZXR1cm4gKDApOwogfQpAQCAtMTA4NCw3ICsxMDYwLDcgQEAKIAkJaWYgKHYzKSB7CiAJCQlORF9UQ0hFQ0soZmFwLT5mYTNfc2l6ZSk7CiAJCQlORF9QUklOVCgobmRvLCAiIHN6ICUiIFBSSXU2NCwKLQkJCQlFWFRSQUNUXzY0QklUUygodWludDMyX3QgKikmZmFwLT5mYTNfc2l6ZSkpKTsKKwkJCQlFWFRSQUNUXzY0QklUUygoY29uc3QgdWludDMyX3QgKikmZmFwLT5mYTNfc2l6ZSkpKTsKIAkJfSBlbHNlIHsKIAkJCU5EX1RDSEVDSyhmYXAtPmZhMl9zaXplKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgc3ogJWQiLCBFWFRSQUNUXzMyQklUUygmZmFwLT5mYTJfc2l6ZSkpKTsKQEAgLTEwOTksOSArMTA3NSw5IEBACiAJCQkgICAgICAgRVhUUkFDVF8zMkJJVFMoJmZhcC0+ZmEzX3JkZXYuc3BlY2RhdGExKSwKIAkJCSAgICAgICBFWFRSQUNUXzMyQklUUygmZmFwLT5mYTNfcmRldi5zcGVjZGF0YTIpKSk7CiAJCQlORF9QUklOVCgobmRvLCAiIGZzaWQgJSIgUFJJeDY0LAotCQkJCUVYVFJBQ1RfNjRCSVRTKCh1aW50MzJfdCAqKSZmYXAtPmZhM19mc2lkKSkpOworCQkJCUVYVFJBQ1RfNjRCSVRTKChjb25zdCB1aW50MzJfdCAqKSZmYXAtPmZhM19mc2lkKSkpOwogCQkJTkRfUFJJTlQoKG5kbywgIiBmaWxlaWQgJSIgUFJJeDY0LAotCQkJCUVYVFJBQ1RfNjRCSVRTKCh1aW50MzJfdCAqKSZmYXAtPmZhM19maWxlaWQpKSk7CisJCQkJRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJmZhcC0+ZmEzX2ZpbGVpZCkpKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgYS9tL2N0aW1lICV1LiUwNnUiLAogCQkJICAgICAgIEVYVFJBQ1RfMzJCSVRTKCZmYXAtPmZhM19hdGltZS5uZnN2M19zZWMpLAogCQkJICAgICAgIEVYVFJBQ1RfMzJCSVRTKCZmYXAtPmZhM19hdGltZS5uZnN2M19uc2VjKSkpOwpAQCAtMTEyOSw3ICsxMTA1LDcgQEAKIAkJCSAgICAgICBFWFRSQUNUXzMyQklUUygmZmFwLT5mYTJfY3RpbWUubmZzdjJfdXNlYykpKTsKIAkJfQogCX0KLQlyZXR1cm4gKChjb25zdCB1aW50MzJfdCAqKSgodW5zaWduZWQgY2hhciAqKWRwICsKKwlyZXR1cm4gKChjb25zdCB1aW50MzJfdCAqKSgoY29uc3QgdW5zaWduZWQgY2hhciAqKWRwICsKIAkJKHYzID8gTkZTWF9WM0ZBVFRSIDogTkZTWF9WMkZBVFRSKSkpOwogdHJ1bmM6CiAJcmV0dXJuIChOVUxMKTsKQEAgLTEyMTQsMTQgKzExOTAsMTQgQEAKIAogCWlmICh2MykgewogCQlORF9QUklOVCgobmRvLCAiIHRieXRlcyAlIiBQUkl1NjQgIiBmYnl0ZXMgJSIgUFJJdTY0ICIgYWJ5dGVzICUiIFBSSXU2NCwKLQkJCUVYVFJBQ1RfNjRCSVRTKCh1aW50MzJfdCAqKSZzZnNwLT5zZl90Ynl0ZXMpLAotCQkJRVhUUkFDVF82NEJJVFMoKHVpbnQzMl90ICopJnNmc3AtPnNmX2ZieXRlcyksCi0JCQlFWFRSQUNUXzY0QklUUygodWludDMyX3QgKikmc2ZzcC0+c2ZfYWJ5dGVzKSkpOworCQkJRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJnNmc3AtPnNmX3RieXRlcyksCisJCQlFWFRSQUNUXzY0QklUUygoY29uc3QgdWludDMyX3QgKikmc2ZzcC0+c2ZfZmJ5dGVzKSwKKwkJCUVYVFJBQ1RfNjRCSVRTKChjb25zdCB1aW50MzJfdCAqKSZzZnNwLT5zZl9hYnl0ZXMpKSk7CiAJCWlmIChuZG8tPm5kb192ZmxhZykgewogCQkJTkRfUFJJTlQoKG5kbywgIiB0ZmlsZXMgJSIgUFJJdTY0ICIgZmZpbGVzICUiIFBSSXU2NCAiIGFmaWxlcyAlIiBQUkl1NjQgIiBpbnZhciAldSIsCi0JCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKHVpbnQzMl90ICopJnNmc3AtPnNmX3RmaWxlcyksCi0JCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKHVpbnQzMl90ICopJnNmc3AtPnNmX2ZmaWxlcyksCi0JCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKHVpbnQzMl90ICopJnNmc3AtPnNmX2FmaWxlcyksCisJCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJnNmc3AtPnNmX3RmaWxlcyksCisJCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJnNmc3AtPnNmX2ZmaWxlcyksCisJCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJnNmc3AtPnNmX2FmaWxlcyksCiAJCQkgICAgICAgRVhUUkFDVF8zMkJJVFMoJnNmc3AtPnNmX2ludmFyc2VjKSkpOwogCQl9CiAJfSBlbHNlIHsKQEAgLTEzNjgsNyArMTM0NCw3IEBACiAKIAlpZiAoIShkcCA9IHBhcnNlc3RhdHVzKG5kbywgZHAsICZlcikpKQogCQlyZXR1cm4gKDApOwotCXJldHVybiBwYXJzZV93Y2NfZGF0YShuZG8sIGRwLCB2ZXJib3NlKSAhPSAwOworCXJldHVybiBwYXJzZV93Y2NfZGF0YShuZG8sIGRwLCB2ZXJib3NlKSAhPSBOVUxMOwogfQogCiBzdGF0aWMgY29uc3QgdWludDMyX3QgKgpAQCAtMTM5OSw3ICsxMzc1LDcgQEAKIHBhcnNlZnNpbmZvKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgY29uc3QgdWludDMyX3QgKmRwKQogewotCXN0cnVjdCBuZnN2M19mc2luZm8gKnNmcDsKKwljb25zdCBzdHJ1Y3QgbmZzdjNfZnNpbmZvICpzZnA7CiAJaW50IGVyOwogCiAJaWYgKCEoZHAgPSBwYXJzZXN0YXR1cyhuZG8sIGRwLCAmZXIpKSkKQEAgLTE0MTEsNyArMTM4Nyw3IEBACiAJaWYgKGVyKQogCQlyZXR1cm4gKDEpOwogCi0Jc2ZwID0gKHN0cnVjdCBuZnN2M19mc2luZm8gKilkcDsKKwlzZnAgPSAoY29uc3Qgc3RydWN0IG5mc3YzX2ZzaW5mbyAqKWRwOwogCU5EX1RDSEVDSygqc2ZwKTsKIAlORF9QUklOVCgobmRvLCAiIHJ0bWF4ICV1IHJ0cHJlZiAldSB3dG1heCAldSB3dHByZWYgJXUgZHRwcmVmICV1IiwKIAkgICAgICAgRVhUUkFDVF8zMkJJVFMoJnNmcC0+ZnNfcnRtYXgpLApAQCAtMTQyMyw3ICsxMzk5LDcgQEAKIAkJTkRfUFJJTlQoKG5kbywgIiBydG11bHQgJXUgd3RtdWx0ICV1IG1heGZzeiAlIiBQUkl1NjQsCiAJCSAgICAgICBFWFRSQUNUXzMyQklUUygmc2ZwLT5mc19ydG11bHQpLAogCQkgICAgICAgRVhUUkFDVF8zMkJJVFMoJnNmcC0+ZnNfd3RtdWx0KSwKLQkJICAgICAgIEVYVFJBQ1RfNjRCSVRTKCh1aW50MzJfdCAqKSZzZnAtPmZzX21heGZpbGVzaXplKSkpOworCQkgICAgICAgRVhUUkFDVF82NEJJVFMoKGNvbnN0IHVpbnQzMl90ICopJnNmcC0+ZnNfbWF4ZmlsZXNpemUpKSk7CiAJCU5EX1BSSU5UKChuZG8sICIgZGVsdGEgJXUuJTA2dSAiLAogCQkgICAgICAgRVhUUkFDVF8zMkJJVFMoJnNmcC0+ZnNfdGltZWRlbHRhLm5mc3YzX3NlYyksCiAJCSAgICAgICBFWFRSQUNUXzMyQklUUygmc2ZwLT5mc190aW1lZGVsdGEubmZzdjNfbnNlYykpKTsKQEAgLTE0MzgsNyArMTQxNCw3IEBACiAgICAgICAgICAgICAgIGNvbnN0IHVpbnQzMl90ICpkcCkKIHsKIAlpbnQgZXI7Ci0Jc3RydWN0IG5mc3YzX3BhdGhjb25mICpzcHA7CisJY29uc3Qgc3RydWN0IG5mc3YzX3BhdGhjb25mICpzcHA7CiAKIAlpZiAoIShkcCA9IHBhcnNlc3RhdHVzKG5kbywgZHAsICZlcikpKQogCQlyZXR1cm4gKDApOwpAQCAtMTQ0OSw3ICsxNDI1LDcgQEAKIAlpZiAoZXIpCiAJCXJldHVybiAoMSk7CiAKLQlzcHAgPSAoc3RydWN0IG5mc3YzX3BhdGhjb25mICopZHA7CisJc3BwID0gKGNvbnN0IHN0cnVjdCBuZnN2M19wYXRoY29uZiAqKWRwOwogCU5EX1RDSEVDSygqc3BwKTsKIAogCU5EX1BSSU5UKChuZG8sICIgbGlua21heCAldSBuYW1lbWF4ICV1ICVzICVzICVzICVzIiwKQEAgLTE2MDAsNyArMTU3Niw3IEBACiAJCWlmICghKGRwID0gcGFyc2VyZXAobmRvLCBycCwgbGVuZ3RoKSkpCiAJCQlicmVhazsKIAkJaWYgKHYzKSB7Ci0JCQlpZiAocGFyc2VjcmVhdGVvcHJlcyhuZG8sIGRwLCBuZG8tPm5kb192ZmxhZykgIT0gMCkKKwkJCWlmIChwYXJzZWNyZWF0ZW9wcmVzKG5kbywgZHAsIG5kby0+bmRvX3ZmbGFnKSAhPSBOVUxMKQogCQkJCXJldHVybjsKIAkJfSBlbHNlIHsKIAkJCWlmIChwYXJzZWRpcm9wcmVzKG5kbywgZHApICE9IDApCkBAIC0xNjEyLDEwICsxNTg4LDEwIEBACiAJCWlmICghKGRwID0gcGFyc2VyZXAobmRvLCBycCwgbGVuZ3RoKSkpCiAJCQlicmVhazsKIAkJaWYgKHYzKSB7Ci0JCQlpZiAocGFyc2VjcmVhdGVvcHJlcyhuZG8sIGRwLCBuZG8tPm5kb192ZmxhZykgIT0gMCkKKwkJCWlmIChwYXJzZWNyZWF0ZW9wcmVzKG5kbywgZHAsIG5kby0+bmRvX3ZmbGFnKSAhPSBOVUxMKQogCQkJCXJldHVybjsKIAkJfSBlbHNlIHsKLQkJCWlmIChwYXJzZXN0YXR1cyhuZG8sIGRwLCAmZXIpICE9IDApCisJCQlpZiAocGFyc2VzdGF0dXMobmRvLCBkcCwgJmVyKSAhPSBOVUxMKQogCQkJCXJldHVybjsKIAkJfQogCQlicmVhazsKQEAgLTE2MjMsNyArMTU5OSw3IEBACiAJY2FzZSBORlNQUk9DX01LTk9EOgogCQlpZiAoIShkcCA9IHBhcnNlcmVwKG5kbywgcnAsIGxlbmd0aCkpKQogCQkJYnJlYWs7Ci0JCWlmIChwYXJzZWNyZWF0ZW9wcmVzKG5kbywgZHAsIG5kby0+bmRvX3ZmbGFnKSAhPSAwKQorCQlpZiAocGFyc2VjcmVhdGVvcHJlcyhuZG8sIGRwLCBuZG8tPm5kb192ZmxhZykgIT0gTlVMTCkKIAkJCXJldHVybjsKIAkJYnJlYWs7CiAKQEAgLTE2MzUsNyArMTYxMSw3IEBACiAJCQlpZiAocGFyc2V3Y2NyZXMobmRvLCBkcCwgbmRvLT5uZG9fdmZsYWcpKQogCQkJCXJldHVybjsKIAkJfSBlbHNlIHsKLQkJCWlmIChwYXJzZXN0YXR1cyhuZG8sIGRwLCAmZXIpICE9IDApCisJCQlpZiAocGFyc2VzdGF0dXMobmRvLCBkcCwgJmVyKSAhPSBOVUxMKQogCQkJCXJldHVybjsKIAkJfQogCQlicmVhazsKQEAgLTE2NTYsNyArMTYzMiw3IEBACiAJCQl9CiAJCQlyZXR1cm47CiAJCX0gZWxzZSB7Ci0JCQlpZiAocGFyc2VzdGF0dXMobmRvLCBkcCwgJmVyKSAhPSAwKQorCQkJaWYgKHBhcnNlc3RhdHVzKG5kbywgZHAsICZlcikgIT0gTlVMTCkKIAkJCQlyZXR1cm47CiAJCX0KIAkJYnJlYWs7CkBAIC0xNjc3LDcgKzE2NTMsNyBAQAogCQkJCXJldHVybjsKIAkJCX0KIAkJfSBlbHNlIHsKLQkJCWlmIChwYXJzZXN0YXR1cyhuZG8sIGRwLCAmZXIpICE9IDApCisJCQlpZiAocGFyc2VzdGF0dXMobmRvLCBkcCwgJmVyKSAhPSBOVUxMKQogCQkJCXJldHVybjsKIAkJfQogCQlicmVhazsKZGlmZiAtLWdpdCBhL3ByaW50LW5zaC5jIGIvcHJpbnQtbnNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWJkNzIyZAotLS0gL2Rldi9udWxsCisrKyBiL3ByaW50LW5zaC5jCkBAIC0wLDAgKzEsMTg1IEBACisvKiBDb3B5cmlnaHQgKGMpIDIwMTUsIGJ1Z3lvCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UsCisgKiAgICB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbgorICogICAgYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORAorICogQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMKKyAqIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKy8qIFxzdW1tYXJ5OiBOZXR3b3JrIFNlcnZpY2UgSGVhZGVyIChOU0gpIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogZHJhZnQtaWV0Zi1zZmMtbnNoLTAxICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CisKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSAiZXh0cmFjdC5oIgorCitzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8TlNIXSI7CitzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBuc2hfZmxhZ3MgW10gPSB7CisgICAgeyAweDIwLCAiTyIgfSwKKyAgICB7IDB4MTAsICJDIiB9LAorICAgIHsgMCwgTlVMTCB9Cit9OworCisjZGVmaW5lIE5TSF9CQVNFX0hEUl9MRU4gNAorI2RlZmluZSBOU0hfU0VSVklDRV9QQVRIX0hEUl9MRU4gNAorI2RlZmluZSBOU0hfSERSX1dPUkRfU0laRSA0VQorCit2b2lkCituc2hfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbikKK3sKKyAgICBpbnQgbiwgdm47CisgICAgdWludDhfdCB2ZXI7CisgICAgdWludDhfdCBmbGFnczsKKyAgICB1aW50OF90IGxlbmd0aDsKKyAgICB1aW50OF90IG1kX3R5cGU7CisgICAgdWludDhfdCBuZXh0X3Byb3RvY29sOworICAgIHVpbnQzMl90IHNlcnZpY2VfcGF0aF9pZDsKKyAgICB1aW50OF90IHNlcnZpY2VfaW5kZXg7CisgICAgdWludDMyX3QgY3R4OworICAgIHVpbnQxNl90IHRsdl9jbGFzczsKKyAgICB1aW50OF90IHRsdl90eXBlOworICAgIHVpbnQ4X3QgdGx2X2xlbjsKKyAgICB1X2ludCBuZXh0X2xlbjsKKworICAgIC8qIHByaW50IEJhc2UgSGVhZGVyIGFuZCBTZXJ2aWNlIFBhdGggSGVhZGVyICovCisgICAgaWYgKGxlbiA8IE5TSF9CQVNFX0hEUl9MRU4gKyBOU0hfU0VSVklDRV9QQVRIX0hEUl9MRU4pCisgICAgICAgIGdvdG8gdHJ1bmM7CisKKyAgICBORF9UQ0hFQ0syKCpicCwgTlNIX0JBU0VfSERSX0xFTiArIE5TSF9TRVJWSUNFX1BBVEhfSERSX0xFTik7CisKKyAgICB2ZXIgPSAodWludDhfdCkoKmJwID4+IDYpOworICAgIGZsYWdzID0gKmJwOworICAgIGJwICs9IDE7CisgICAgbGVuZ3RoID0gKmJwOworICAgIGJwICs9IDE7CisgICAgbWRfdHlwZSA9ICpicDsKKyAgICBicCArPSAxOworICAgIG5leHRfcHJvdG9jb2wgPSAqYnA7CisgICAgYnAgKz0gMTsKKyAgICBzZXJ2aWNlX3BhdGhfaWQgPSBFWFRSQUNUXzI0QklUUyhicCk7CisgICAgYnAgKz0gMzsKKyAgICBzZXJ2aWNlX2luZGV4ID0gKmJwOworICAgIGJwICs9IDE7CisKKyAgICBORF9QUklOVCgobmRvLCAiTlNILCAiKSk7CisgICAgaWYgKG5kby0+bmRvX3ZmbGFnID4gMSkgeworICAgICAgICBORF9QUklOVCgobmRvLCAidmVyICVkLCAiLCB2ZXIpKTsKKyAgICB9CisgICAgTkRfUFJJTlQoKG5kbywgImZsYWdzIFslc10sICIsIGJpdHRvazJzdHJfbm9zZXAobnNoX2ZsYWdzLCAibm9uZSIsIGZsYWdzKSkpOworICAgIGlmIChuZG8tPm5kb192ZmxhZyA+IDIpIHsKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgImxlbmd0aCAlZCwgIiwgbGVuZ3RoKSk7CisgICAgICAgIE5EX1BSSU5UKChuZG8sICJtZCB0eXBlIDB4JXgsICIsIG1kX3R5cGUpKTsKKyAgICB9CisgICAgaWYgKG5kby0+bmRvX3ZmbGFnID4gMSkgeworICAgICAgICBORF9QUklOVCgobmRvLCAibmV4dC1wcm90b2NvbCAweCV4LCAiLCBuZXh0X3Byb3RvY29sKSk7CisgICAgfQorICAgIE5EX1BSSU5UKChuZG8sICJzZXJ2aWNlLXBhdGgtaWQgMHglMDZ4LCAiLCBzZXJ2aWNlX3BhdGhfaWQpKTsKKyAgICBORF9QUklOVCgobmRvLCAic2VydmljZS1pbmRleCAweCV4Iiwgc2VydmljZV9pbmRleCkpOworCisgICAgLyogTWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBoZWFkZXJzICovCisgICAgaWYgKGxlbiA8IGxlbmd0aCAqIE5TSF9IRFJfV09SRF9TSVpFKQorICAgICAgICBnb3RvIHRydW5jOworCisgICAgTkRfVENIRUNLMigqYnAsIGxlbmd0aCAqIE5TSF9IRFJfV09SRF9TSVpFKTsKKworICAgIC8qCisgICAgICogbGVuZ3RoIGluY2x1ZGVzIHRoZSBsZW5ndGhzIG9mIHRoZSBCYXNlIGFuZCBTZXJ2aWNlIFBhdGggaGVhZGVycy4KKyAgICAgKiBUaGF0IG1lYW5zIGl0IG11c3QgYmUgYXQgbGVhc3QgMi4KKyAgICAgKi8KKyAgICBpZiAobGVuZ3RoIDwgMikKKyAgICAgICAgZ290byB0cnVuYzsKKworICAgIC8qCisgICAgICogUHJpbnQsIG9yIHNraXAsIHRoZSBDb250ZXh0IEhlYWRlcnMuCisgICAgICogKGxlbmd0aCAtIDIpIGlzIHRoZSBsZW5ndGggb2YgdGhvc2UgaGVhZGVycy4KKyAgICAgKi8KKyAgICBpZiAobmRvLT5uZG9fdmZsYWcgPiAyKSB7CisgICAgICAgIGlmIChtZF90eXBlID09IDB4MDEpIHsKKyAgICAgICAgICAgIGZvciAobiA9IDA7IG4gPCBsZW5ndGggLSAyOyBuKyspIHsKKyAgICAgICAgICAgICAgICBjdHggPSBFWFRSQUNUXzMyQklUUyhicCk7CisgICAgICAgICAgICAgICAgYnAgKz0gTlNIX0hEUl9XT1JEX1NJWkU7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuICAgICAgICBDb250ZXh0WyUwMmRdOiAweCUwOHgiLCBuLCBjdHgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmIChtZF90eXBlID09IDB4MDIpIHsKKyAgICAgICAgICAgIG4gPSAwOworICAgICAgICAgICAgd2hpbGUgKG4gPCBsZW5ndGggLSAyKSB7CisgICAgICAgICAgICAgICAgdGx2X2NsYXNzID0gRVhUUkFDVF8xNkJJVFMoYnApOworICAgICAgICAgICAgICAgIGJwICs9IDI7CisgICAgICAgICAgICAgICAgdGx2X3R5cGUgID0gKmJwOworICAgICAgICAgICAgICAgIGJwICs9IDE7CisgICAgICAgICAgICAgICAgdGx2X2xlbiAgID0gKmJwOworICAgICAgICAgICAgICAgIGJwICs9IDE7CisKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG4gICAgICAgIFRMViBDbGFzcyAlZCwgVHlwZSAlZCwgTGVuICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdGx2X2NsYXNzLCB0bHZfdHlwZSwgdGx2X2xlbikpOworCisgICAgICAgICAgICAgICAgbiArPSAxOworCisgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCAtIDIgPCBuICsgdGx2X2xlbikgeworICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIEVSUk9SOiBpbnZhbGlkLXRsdi1sZW5ndGgiKSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKHZuID0gMDsgdm4gPCB0bHZfbGVuOyB2bisrKSB7CisgICAgICAgICAgICAgICAgICAgIGN0eCA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsKKyAgICAgICAgICAgICAgICAgICAgYnAgKz0gTlNIX0hEUl9XT1JEX1NJWkU7CisgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcbiAgICAgICAgICAgIFZhbHVlWyUwMmRdOiAweCUwOHgiLCB2biwgY3R4KSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIG4gKz0gdGx2X2xlbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJFUlJPUjogdW5rbm93bi1uZXh0LXByb3RvY29sIikpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBicCArPSAobGVuZ3RoIC0gMikgKiBOU0hfSERSX1dPUkRfU0laRTsKKyAgICB9CisgICAgTkRfUFJJTlQoKG5kbywgbmRvLT5uZG9fdmZsYWcgPyAiXG4gICAgIiA6ICI6ICIpKTsKKworICAgIC8qIHByaW50IE5leHQgUHJvdG9jb2wgKi8KKyAgICBuZXh0X2xlbiA9IGxlbiAtIGxlbmd0aCAqIE5TSF9IRFJfV09SRF9TSVpFOworICAgIHN3aXRjaCAobmV4dF9wcm90b2NvbCkgeworICAgIGNhc2UgMHgxOgorICAgICAgICBpcF9wcmludChuZG8sIGJwLCBuZXh0X2xlbik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgyOgorICAgICAgICBpcDZfcHJpbnQobmRvLCBicCwgbmV4dF9sZW4pOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MzoKKyAgICAgICAgZXRoZXJfcHJpbnQobmRvLCBicCwgbmV4dF9sZW4sIG5kby0+bmRvX3NuYXBlbmQgLSBicCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIE5EX1BSSU5UKChuZG8sICJFUlJPUjogdW5rbm93bi1uZXh0LXByb3RvY29sIikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgcmV0dXJuOworCit0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7Cit9CisKZGlmZiAtLWdpdCBhL3ByaW50LW50cC5jIGIvcHJpbnQtbnRwLmMKaW5kZXggZTgzZDQ3YS4uMDY4OTI2NCAxMDA2NDQKLS0tIGEvcHJpbnQtbnRwLmMKKysrIGIvcHJpbnQtbnRwLmMKQEAgLTE4LDIzICsxOCwyMyBAQAogICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKgotICogRm9ybWF0IGFuZCBwcmludCBudHAgcGFja2V0cy4KICAqCUJ5IEplZmZyZXkgTW9ndWwvREVDV1JMCiAgKglsb29zZWx5IGJhc2VkIG9uIHByaW50LWJvb3RwLmMKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBOZXR3b3JrIFRpbWUgUHJvdG9jb2wgKE5UUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpZmRlZiBIQVZFX1NUUkZUSU1FCiAjaW5jbHVkZSA8dGltZS5oPgogI2VuZGlmCiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtMjA3LDcgKzIwNyw3IEBACiAJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IG50cGRhdGEgKmJwOwogCWludCBtb2RlLCB2ZXJzaW9uLCBsZWFwaW5kOwogCi0JYnAgPSAoc3RydWN0IG50cGRhdGEgKiljcDsKKwlicCA9IChjb25zdCBzdHJ1Y3QgbnRwZGF0YSAqKWNwOwogCiAJTkRfVENIRUNLKGJwLT5zdGF0dXMpOwogCkBAIC0yNjEsNyArMjYxLDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFBSSU1fUkVGOgotCQlpZiAoZm5fcHJpbnRuKG5kbywgKHVfY2hhciAqKSYoYnAtPnJlZmlkKSwgNCwgbmRvLT5uZG9fc25hcGVuZCkpCisJCWlmIChmbl9wcmludG4obmRvLCAoY29uc3QgdV9jaGFyICopJihicC0+cmVmaWQpLCA0LCBuZG8tPm5kb19zbmFwZW5kKSkKIAkJCWdvdG8gdHJ1bmM7CiAJCWJyZWFrOwogCkBAIC0zMjcsMTIgKzMyNywxMiBAQAogewogCXJlZ2lzdGVyIGludCBpOwogCXJlZ2lzdGVyIGludCBmOwotCXJlZ2lzdGVyIGZsb2F0IGZmOworCXJlZ2lzdGVyIGRvdWJsZSBmZjsKIAogCWkgPSBFWFRSQUNUXzE2QklUUygmc2ZwLT5pbnRfcGFydCk7CiAJZiA9IEVYVFJBQ1RfMTZCSVRTKCZzZnAtPmZyYWN0aW9uKTsKLQlmZiA9IGYgLyA2NTUzNi4wOwkvKiBzaGlmdCByYWRpeCBwb2ludCBieSAxNiBiaXRzICovCi0JZiA9IGZmICogMTAwMDAwMC4wOwkvKiBUcmVhdCBmcmFjdGlvbiBhcyBwYXJ0cyBwZXIgbWlsbGlvbiAqLworCWZmID0gZiAvIDY1NTM2LjA7CQkvKiBzaGlmdCByYWRpeCBwb2ludCBieSAxNiBiaXRzICovCisJZiA9IChpbnQpKGZmICogMTAwMDAwMC4wKTsJLyogVHJlYXQgZnJhY3Rpb24gYXMgcGFydHMgcGVyIG1pbGxpb24gKi8KIAlORF9QUklOVCgobmRvLCAiJWQuJTA2ZCIsIGksIGYpKTsKIH0KIApAQCAtMzQ1LDE1ICszNDUsMTUgQEAKIAlyZWdpc3RlciBpbnQzMl90IGk7CiAJcmVnaXN0ZXIgdWludDMyX3QgdWY7CiAJcmVnaXN0ZXIgdWludDMyX3QgZjsKLQlyZWdpc3RlciBmbG9hdCBmZjsKKwlyZWdpc3RlciBkb3VibGUgZmY7CiAKIAlpID0gRVhUUkFDVF8zMkJJVFMoJmxmcC0+aW50X3BhcnQpOwogCXVmID0gRVhUUkFDVF8zMkJJVFMoJmxmcC0+ZnJhY3Rpb24pOwogCWZmID0gdWY7CiAJaWYgKGZmIDwgMC4wKQkJLyogc29tZSBjb21waWxlcnMgYXJlIGJ1Z2d5ICovCiAJCWZmICs9IEZNQVhJTlQ7Ci0JZmYgPSBmZiAvIEZNQVhJTlQ7CS8qIHNoaWZ0IHJhZGl4IHBvaW50IGJ5IDMyIGJpdHMgKi8KLQlmID0gZmYgKiAxMDAwMDAwMDAwLjA7CS8qIHRyZWF0IGZyYWN0aW9uIGFzIHBhcnRzIHBlciBiaWxsaW9uICovCisJZmYgPSBmZiAvIEZNQVhJTlQ7CQkJLyogc2hpZnQgcmFkaXggcG9pbnQgYnkgMzIgYml0cyAqLworCWYgPSAodWludDMyX3QpKGZmICogMTAwMDAwMDAwMC4wKTsJLyogdHJlYXQgZnJhY3Rpb24gYXMgcGFydHMgcGVyIGJpbGxpb24gKi8KIAlORF9QUklOVCgobmRvLCAiJXUuJTA5ZCIsIGksIGYpKTsKIAogI2lmZGVmIEhBVkVfU1RSRlRJTUUKQEAgLTM4Miw3ICszODIsNyBAQAogCXJlZ2lzdGVyIHVpbnQzMl90IHUsIHVmOwogCXJlZ2lzdGVyIHVpbnQzMl90IG91LCBvdWY7CiAJcmVnaXN0ZXIgdWludDMyX3QgZjsKLQlyZWdpc3RlciBmbG9hdCBmZjsKKwlyZWdpc3RlciBkb3VibGUgZmY7CiAJaW50IHNpZ25iaXQ7CiAKIAl1ID0gRVhUUkFDVF8zMkJJVFMoJmxmcC0+aW50X3BhcnQpOwpAQCAtNDIwLDggKzQyMCw4IEBACiAJZmYgPSBmOwogCWlmIChmZiA8IDAuMCkJCS8qIHNvbWUgY29tcGlsZXJzIGFyZSBidWdneSAqLwogCQlmZiArPSBGTUFYSU5UOwotCWZmID0gZmYgLyBGTUFYSU5UOwkvKiBzaGlmdCByYWRpeCBwb2ludCBieSAzMiBiaXRzICovCi0JZiA9IGZmICogMTAwMDAwMDAwMC4wOwkvKiB0cmVhdCBmcmFjdGlvbiBhcyBwYXJ0cyBwZXIgYmlsbGlvbiAqLworCWZmID0gZmYgLyBGTUFYSU5UOwkJCS8qIHNoaWZ0IHJhZGl4IHBvaW50IGJ5IDMyIGJpdHMgKi8KKwlmID0gKHVpbnQzMl90KShmZiAqIDEwMDAwMDAwMDAuMCk7CS8qIHRyZWF0IGZyYWN0aW9uIGFzIHBhcnRzIHBlciBiaWxsaW9uICovCiAJTkRfUFJJTlQoKG5kbywgIiVzJWQuJTA5ZCIsIHNpZ25iaXQgPyAiLSIgOiAiKyIsIGksIGYpKTsKIH0KIApkaWZmIC0tZ2l0IGEvcHJpbnQtbnVsbC5jIGIvcHJpbnQtbnVsbC5jCmluZGV4IDE2NmY3NzcuLjE0ZGY1ZmQgMTAwNjQ0Ci0tLSBhL3ByaW50LW51bGwuYworKysgYi9wcmludC1udWxsLmMKQEAgLTE5LDE2ICsxOSwxNyBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCU0QgbG9vcGJhY2sgZGV2aWNlIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWYuaCIKIAogLyoKQEAgLTgzLDcgKzg0LDcgQEAKIAkJcmV0dXJuIChOVUxMX0hEUkxFTik7CiAJfQogCi0JbWVtY3B5KChjaGFyICopJmZhbWlseSwgKGNoYXIgKilwLCBzaXplb2YoZmFtaWx5KSk7CisJbWVtY3B5KChjaGFyICopJmZhbWlseSwgKGNvbnN0IGNoYXIgKilwLCBzaXplb2YoZmFtaWx5KSk7CiAKIAkvKgogCSAqIFRoaXMgaXNuJ3QgbmVjZXNzYXJpbHkgaW4gb3VyIGhvc3QgYnl0ZSBvcmRlcjsgaWYgdGhpcyBpcwpkaWZmIC0tZ2l0IGEvcHJpbnQtb2xzci5jIGIvcHJpbnQtb2xzci5jCmluZGV4IGI5MGVlYTEuLmUwOTVlZjcgMTAwNjQ0Ci0tLSBhL3ByaW50LW9sc3IuYworKysgYi9wcmludC1vbHNyLmMKQEAgLTEzLDIwICsxMywyMSBAQAogICogTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqCi0gKiBPcHRpbWl6ZWQgTGluayBTdGF0ZSBQcm90b2NsIChPTFNSKSBhcyBwZXIgcmZjMzYyNgotICoKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgPGhhbm5lc0BqdW5pcGVyLm5ldD4KICAqIElQdjYgYWRkaXRpb25zIGJ5IEZsb3JpYW4gRm9yc3RlciA8b2N0byBhdCB2ZXJwbGFudC5vcmc+CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogT3B0aW1pemVkIExpbmsgU3RhdGUgUm91dGluZyBQcm90b2NvbCAoT0xTUikgcHJpbnRlciAqLworCisvKiBzcGVjaWZpY2F0aW9uOiBSRkMgMzYyNiAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtMTM1LDYgKzEzNiwyNiBAQAogfTsKIAogCisvKiogZ2F0ZXdheSBITkEgZmxhZ3MgKi8KK2VudW0gZ2F0ZXdheV9obmFfZmxhZ3MgeworICBHV19ITkFfRkxBR19MSU5LU1BFRUQgICA9IDEgPDwgMCwKKyAgR1dfSE5BX0ZMQUdfSVBWNCAgICAgICAgPSAxIDw8IDEsCisgIEdXX0hOQV9GTEFHX0lQVjRfTkFUICAgID0gMSA8PCAyLAorICBHV19ITkFfRkxBR19JUFY2ICAgICAgICA9IDEgPDwgMywKKyAgR1dfSE5BX0ZMQUdfSVBWNlBSRUZJWCAgPSAxIDw8IDQKK307CisKKy8qKiBnYXRld2F5IEhOQSBmaWVsZCBieXRlIG9mZnNldHMgaW4gdGhlIG5ldG1hc2sgZmllbGQgb2YgdGhlIEhOQSAqLworZW51bSBnYXRld2F5X2huYV9maWVsZHMgeworICBHV19ITkFfUEFEICAgICAgICAgICAgICA9IDAsCisgIEdXX0hOQV9GTEFHUyAgICAgICAgICAgID0gMSwKKyAgR1dfSE5BX1VQTElOSyAgICAgICAgICAgPSAyLAorICBHV19ITkFfRE9XTkxJTksgICAgICAgICA9IDMsCisgIEdXX0hOQV9WNlBSRUZJWExFTiAgICAgID0gNCwKKyAgR1dfSE5BX1Y2UFJFRklYICAgICAgICAgPSA1Cit9OworCisKICNkZWZpbmUgT0xTUl9FWFRSQUNUX0xJTktfVFlQRShsaW5rX2NvZGUpIChsaW5rX2NvZGUgJiAweDMpCiAjZGVmaW5lIE9MU1JfRVhUUkFDVF9ORUlHSEJPUl9UWVBFKGxpbmtfY29kZSkgKGxpbmtfY29kZSA+PiAyKQogCkBAIC0xNjcsNiArMTg4LDM3IEBACiAgICAgdWludDhfdCByZXNbMl07CiB9OwogCisjZGVmaW5lIE1BWF9TTUFSVEdXX1NQRUVEICAgIDMyMDAwMDAwMAorCisvKioKKyAqIENvbnZlcnQgYW4gZW5jb2RlZCAxIGJ5dGUgdHJhbnNwb3J0IHZhbHVlICg1IGJpdHMgbWFudGlzc2EsIDMgYml0cyBleHBvbmVudCkKKyAqIHRvIGFuIHVwbGluay9kb3dubGluayBzcGVlZCB2YWx1ZQorICoKKyAqIEBwYXJhbSB2YWx1ZSB0aGUgZW5jb2RlZCAxIGJ5dGUgdHJhbnNwb3J0IHZhbHVlCisgKiBAcmV0dXJuIHRoZSB1cGxpbmsvZG93bmxpbmsgc3BlZWQgdmFsdWUgKGluIGtiaXQvcykKKyAqLworc3RhdGljIHVpbnQzMl90IGRlc2VyaWFsaXplX2d3X3NwZWVkKHVpbnQ4X3QgdmFsdWUpIHsKKyAgdWludDMyX3Qgc3BlZWQ7CisgIHVpbnQzMl90IGV4cDsKKworICBpZiAoIXZhbHVlKSB7CisgICAgcmV0dXJuIDA7CisgIH0KKworICBpZiAodmFsdWUgPT0gVUlOVDhfTUFYKSB7CisgICAgLyogbWF4aW11bSB2YWx1ZTogYWxzbyByZXR1cm4gbWF4aW11bSB2YWx1ZSAqLworICAgIHJldHVybiBNQVhfU01BUlRHV19TUEVFRDsKKyAgfQorCisgIHNwZWVkID0gKHZhbHVlID4+IDMpICsgMTsKKyAgZXhwID0gdmFsdWUgJiA3OworCisgIHdoaWxlIChleHAtLSA+IDApIHsKKyAgICBzcGVlZCAqPSAxMDsKKyAgfQorICByZXR1cm4gc3BlZWQ7Cit9CisKIC8qCiAgKiBtYWNybyB0byBjb252ZXJ0IHRoZSA4LWJpdCBtYW50aXNzYS9leHBvbmVudCB0byBhIGRvdWJsZSBmbG9hdAogICogdGFrZW4gZnJvbSBvbHNyLm9yZy4KQEAgLTE4MiwxNiArMjM0LDE2IEBACiBvbHNyX3ByaW50X2xxX25laWdoYm9yNChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqbXNnX2RhdGEsIHVfaW50IGhlbGxvX2xlbikKIHsKLSAgICBzdHJ1Y3Qgb2xzcl9scV9uZWlnaGJvcjQgKmxxX25laWdoYm9yOworICAgIGNvbnN0IHN0cnVjdCBvbHNyX2xxX25laWdoYm9yNCAqbHFfbmVpZ2hib3I7CiAKICAgICB3aGlsZSAoaGVsbG9fbGVuID49IHNpemVvZihzdHJ1Y3Qgb2xzcl9scV9uZWlnaGJvcjQpKSB7CiAKLSAgICAgICAgbHFfbmVpZ2hib3IgPSAoc3RydWN0IG9sc3JfbHFfbmVpZ2hib3I0ICopbXNnX2RhdGE7CisgICAgICAgIGxxX25laWdoYm9yID0gKGNvbnN0IHN0cnVjdCBvbHNyX2xxX25laWdoYm9yNCAqKW1zZ19kYXRhOwogICAgICAgICBpZiAoIU5EX1RURVNUKCpscV9uZWlnaGJvcikpCiAgICAgICAgICAgICByZXR1cm4gKC0xKTsKIAotICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIG5laWdoYm9yICVzLCBsaW5rLXF1YWxpdHkgJS4ybGYlJSIKLSAgICAgICAgICAgICAgICIsIG5laWdoYm9yLWxpbmstcXVhbGl0eSAlLjJsZiUlIiwKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBuZWlnaGJvciAlcywgbGluay1xdWFsaXR5ICUuMmYlJSIKKyAgICAgICAgICAgICAgICIsIG5laWdoYm9yLWxpbmstcXVhbGl0eSAlLjJmJSUiLAogICAgICAgICAgICAgICAgaXBhZGRyX3N0cmluZyhuZG8sIGxxX25laWdoYm9yLT5uZWlnaGJvciksCiAgICAgICAgICAgICAgICAoKGRvdWJsZSlscV9uZWlnaGJvci0+bGlua19xdWFsaXR5LzIuNTUpLAogICAgICAgICAgICAgICAgKChkb3VibGUpbHFfbmVpZ2hib3ItPm5laWdoYm9yX2xpbmtfcXVhbGl0eS8yLjU1KSkpOwpAQCAtMjAyLDIxICsyNTQsMjAgQEAKICAgICByZXR1cm4gKDApOwogfQogCi0jaWYgSU5FVDYKIHN0YXRpYyBpbnQKIG9sc3JfcHJpbnRfbHFfbmVpZ2hib3I2KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICptc2dfZGF0YSwgdV9pbnQgaGVsbG9fbGVuKQogewotICAgIHN0cnVjdCBvbHNyX2xxX25laWdoYm9yNiAqbHFfbmVpZ2hib3I7CisgICAgY29uc3Qgc3RydWN0IG9sc3JfbHFfbmVpZ2hib3I2ICpscV9uZWlnaGJvcjsKIAogICAgIHdoaWxlIChoZWxsb19sZW4gPj0gc2l6ZW9mKHN0cnVjdCBvbHNyX2xxX25laWdoYm9yNikpIHsKIAotICAgICAgICBscV9uZWlnaGJvciA9IChzdHJ1Y3Qgb2xzcl9scV9uZWlnaGJvcjYgKiltc2dfZGF0YTsKKyAgICAgICAgbHFfbmVpZ2hib3IgPSAoY29uc3Qgc3RydWN0IG9sc3JfbHFfbmVpZ2hib3I2ICopbXNnX2RhdGE7CiAgICAgICAgIGlmICghTkRfVFRFU1QoKmxxX25laWdoYm9yKSkKICAgICAgICAgICAgIHJldHVybiAoLTEpOwogCi0gICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgbmVpZ2hib3IgJXMsIGxpbmstcXVhbGl0eSAlLjJsZiUlIgotICAgICAgICAgICAgICAgIiwgbmVpZ2hib3ItbGluay1xdWFsaXR5ICUuMmxmJSUiLAorICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAgIG5laWdoYm9yICVzLCBsaW5rLXF1YWxpdHkgJS4yZiUlIgorICAgICAgICAgICAgICAgIiwgbmVpZ2hib3ItbGluay1xdWFsaXR5ICUuMmYlJSIsCiAgICAgICAgICAgICAgICBpcDZhZGRyX3N0cmluZyhuZG8sIGxxX25laWdoYm9yLT5uZWlnaGJvciksCiAgICAgICAgICAgICAgICAoKGRvdWJsZSlscV9uZWlnaGJvci0+bGlua19xdWFsaXR5LzIuNTUpLAogICAgICAgICAgICAgICAgKChkb3VibGUpbHFfbmVpZ2hib3ItPm5laWdoYm9yX2xpbmtfcXVhbGl0eS8yLjU1KSkpOwpAQCAtMjI2LDcgKzI3Nyw2IEBACiAgICAgfQogICAgIHJldHVybiAoMCk7CiB9Ci0jZW5kaWYgLyogSU5FVDYgKi8KIAogLyoKICAqIHByaW50IGEgbmVpZ2hib3IgbGlzdC4KQEAgLTI4NCw3ICszMzQsNyBAQAogCiAgICAgTkRfVENIRUNLMigqdHB0ciwgc2l6ZW9mKHN0cnVjdCBvbHNyX2NvbW1vbikpOwogCi0gICAgcHRyLmNvbW1vbiA9IChzdHJ1Y3Qgb2xzcl9jb21tb24gKil0cHRyOworICAgIHB0ci5jb21tb24gPSAoY29uc3Qgc3RydWN0IG9sc3JfY29tbW9uICopdHB0cjsKICAgICBsZW5ndGggPSBtaW4obGVuZ3RoLCBFWFRSQUNUXzE2QklUUyhwdHIuY29tbW9uLT5wYWNrZXRfbGVuKSk7CiAKICAgICBORF9QUklOVCgobmRvLCAiT0xTUnYlaSwgc2VxIDB4JTA0eCwgbGVuZ3RoICV1IiwKQEAgLTMwNCwxNyArMzU0LDE2IEBACiAgICAgd2hpbGUgKHRwdHIgPCAocHB0citsZW5ndGgpKSB7CiAgICAgICAgIHVuaW9uCiAgICAgICAgIHsKLSAgICAgICAgICAgIHN0cnVjdCBvbHNyX21zZzQgKnY0OwotICAgICAgICAgICAgc3RydWN0IG9sc3JfbXNnNiAqdjY7CisgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2xzcl9tc2c0ICp2NDsKKyAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBvbHNyX21zZzYgKnY2OwogICAgICAgICB9IG1zZ3B0cjsKICAgICAgICAgaW50IG1zZ19sZW5fdmFsaWQgPSAwOwogCiAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHNpemVvZihzdHJ1Y3Qgb2xzcl9tc2c0KSk7CiAKLSNpZiBJTkVUNgogICAgICAgICBpZiAoaXNfaXB2NikKICAgICAgICAgewotICAgICAgICAgICAgbXNncHRyLnY2ID0gKHN0cnVjdCBvbHNyX21zZzYgKikgdHB0cjsKKyAgICAgICAgICAgIG1zZ3B0ci52NiA9IChjb25zdCBzdHJ1Y3Qgb2xzcl9tc2c2ICopIHRwdHI7CiAgICAgICAgICAgICBtc2dfdHlwZSA9IG1zZ3B0ci52Ni0+bXNnX3R5cGU7CiAgICAgICAgICAgICBtc2dfbGVuID0gRVhUUkFDVF8xNkJJVFMobXNncHRyLnY2LT5tc2dfbGVuKTsKICAgICAgICAgICAgIGlmICgobXNnX2xlbiA+PSBzaXplb2YgKHN0cnVjdCBvbHNyX21zZzYpKQpAQCAtMzI3LDcgKzM3Niw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0JXMgTWVzc2FnZSAoJSMwNHgpLCBvcmlnaW5hdG9yICVzLCB0dGwgJXUsIGhvcCAldSIKLSAgICAgICAgICAgICAgICAgICAgIlxuXHQgIHZ0aW1lICUuM2xmcywgbXNnLXNlcSAweCUwNHgsIGxlbmd0aCAldSVzIiwKKyAgICAgICAgICAgICAgICAgICAgIlxuXHQgIHZ0aW1lICUuM2ZzLCBtc2ctc2VxIDB4JTA0eCwgbGVuZ3RoICV1JXMiLAogICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG9sc3JfbXNnX3ZhbHVlcywgIlVua25vd24iLCBtc2dfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgIG1zZ190eXBlLCBpcDZhZGRyX3N0cmluZyhuZG8sIG1zZ3B0ci52Ni0+b3JpZ2luYXRvciksCiAgICAgICAgICAgICAgICAgICAgIG1zZ3B0ci52Ni0+dHRsLApAQCAtMzQzLDkgKzM5Miw4IEBACiAgICAgICAgICAgICBtc2dfZGF0YSA9IHRwdHIgKyBzaXplb2Yoc3RydWN0IG9sc3JfbXNnNik7CiAgICAgICAgIH0KICAgICAgICAgZWxzZSAvKiAoIWlzX2lwdjYpICovCi0jZW5kaWYgLyogSU5FVDYgKi8KICAgICAgICAgewotICAgICAgICAgICAgbXNncHRyLnY0ID0gKHN0cnVjdCBvbHNyX21zZzQgKikgdHB0cjsKKyAgICAgICAgICAgIG1zZ3B0ci52NCA9IChjb25zdCBzdHJ1Y3Qgb2xzcl9tc2c0ICopIHRwdHI7CiAgICAgICAgICAgICBtc2dfdHlwZSA9IG1zZ3B0ci52NC0+bXNnX3R5cGU7CiAgICAgICAgICAgICBtc2dfbGVuID0gRVhUUkFDVF8xNkJJVFMobXNncHRyLnY0LT5tc2dfbGVuKTsKICAgICAgICAgICAgIGlmICgobXNnX2xlbiA+PSBzaXplb2YgKHN0cnVjdCBvbHNyX21zZzQpKQpAQCAtMzU4LDcgKzQwNiw3IEBACiAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0JXMgTWVzc2FnZSAoJSMwNHgpLCBvcmlnaW5hdG9yICVzLCB0dGwgJXUsIGhvcCAldSIKLSAgICAgICAgICAgICAgICAgICAgIlxuXHQgIHZ0aW1lICUuM2xmcywgbXNnLXNlcSAweCUwNHgsIGxlbmd0aCAldSVzIiwKKyAgICAgICAgICAgICAgICAgICAgIlxuXHQgIHZ0aW1lICUuM2ZzLCBtc2ctc2VxIDB4JTA0eCwgbGVuZ3RoICV1JXMiLAogICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG9sc3JfbXNnX3ZhbHVlcywgIlVua25vd24iLCBtc2dfdHlwZSksCiAgICAgICAgICAgICAgICAgICAgIG1zZ190eXBlLCBpcGFkZHJfc3RyaW5nKG5kbywgbXNncHRyLnY0LT5vcmlnaW5hdG9yKSwKICAgICAgICAgICAgICAgICAgICAgbXNncHRyLnY0LT50dGwsCkBAIC0zODEsOCArNDI5LDggQEAKICAgICAgICAgICAgICAgICBnb3RvIHRydW5jOwogICAgICAgICAgICAgTkRfVENIRUNLMigqbXNnX2RhdGEsIHNpemVvZihzdHJ1Y3Qgb2xzcl9oZWxsbykpOwogCi0gICAgICAgICAgICBwdHIuaGVsbG8gPSAoc3RydWN0IG9sc3JfaGVsbG8gKiltc2dfZGF0YTsKLSAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBoZWxsby10aW1lICUuM2xmcywgTVBSIHdpbGxpbmduZXNzICV1IiwKKyAgICAgICAgICAgIHB0ci5oZWxsbyA9IChjb25zdCBzdHJ1Y3Qgb2xzcl9oZWxsbyAqKW1zZ19kYXRhOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIGhlbGxvLXRpbWUgJS4zZnMsIE1QUiB3aWxsaW5nbmVzcyAldSIsCiAgICAgICAgICAgICAgICAgICAgTUVfVE9fRE9VQkxFKHB0ci5oZWxsby0+aHRpbWUpLCBwdHIuaGVsbG8tPndpbGwpKTsKICAgICAgICAgICAgIG1zZ19kYXRhICs9IHNpemVvZihzdHJ1Y3Qgb2xzcl9oZWxsbyk7CiAgICAgICAgICAgICBtc2dfdGxlbiAtPSBzaXplb2Yoc3RydWN0IG9sc3JfaGVsbG8pOwpAQCAtMzk1LDcgKzQ0Myw3IEBACiAgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqbXNnX2RhdGEsIHNpemVvZihzdHJ1Y3Qgb2xzcl9oZWxsb19saW5rKSk7CiAKLSAgICAgICAgICAgICAgICBwdHIuaGVsbG9fbGluayA9IChzdHJ1Y3Qgb2xzcl9oZWxsb19saW5rICopbXNnX2RhdGE7CisgICAgICAgICAgICAgICAgcHRyLmhlbGxvX2xpbmsgPSAoY29uc3Qgc3RydWN0IG9sc3JfaGVsbG9fbGluayAqKW1zZ19kYXRhOwogCiAgICAgICAgICAgICAgICAgaGVsbG9fbGVuID0gRVhUUkFDVF8xNkJJVFMocHRyLmhlbGxvX2xpbmstPmxlbik7CiAgICAgICAgICAgICAgICAgbGlua190eXBlID0gT0xTUl9FWFRSQUNUX0xJTktfVFlQRShwdHIuaGVsbG9fbGluay0+bGlua19jb2RlKTsKQEAgLTQyMywxMyArNDcxLDEwIEBACiAgICAgICAgICAgICAgICAgICAgIGlmIChvbHNyX3ByaW50X25laWdoYm9yKG5kbywgbXNnX2RhdGEsIGhlbGxvX2xlbikgPT0gLTEpCiAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIHRydW5jOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgSU5FVDYKICAgICAgICAgICAgICAgICAgICAgaWYgKGlzX2lwdjYpIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbHNyX3ByaW50X2xxX25laWdoYm9yNihuZG8sIG1zZ19kYXRhLCBoZWxsb19sZW4pID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZQotI2VuZGlmCi0gICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChvbHNyX3ByaW50X2xxX25laWdoYm9yNChuZG8sIG1zZ19kYXRhLCBoZWxsb19sZW4pID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTQ0Niw3ICs0OTEsNyBAQAogICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAgICAgICAgICAgICBORF9UQ0hFQ0syKCptc2dfZGF0YSwgc2l6ZW9mKHN0cnVjdCBvbHNyX3RjKSk7CiAKLSAgICAgICAgICAgIHB0ci50YyA9IChzdHJ1Y3Qgb2xzcl90YyAqKW1zZ19kYXRhOworICAgICAgICAgICAgcHRyLnRjID0gKGNvbnN0IHN0cnVjdCBvbHNyX3RjICopbXNnX2RhdGE7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBhZHZlcnRpc2VkIG5laWdoYm9yIHNlcSAweCUwNHgiLAogICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMTZCSVRTKHB0ci50Yy0+YW5zX3NlcSkpKTsKICAgICAgICAgICAgIG1zZ19kYXRhICs9IHNpemVvZihzdHJ1Y3Qgb2xzcl90Yyk7CkBAIC00NTYsMTMgKzUwMSwxMCBAQAogICAgICAgICAgICAgICAgIGlmIChvbHNyX3ByaW50X25laWdoYm9yKG5kbywgbXNnX2RhdGEsIG1zZ190bGVuKSA9PSAtMSkKICAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgICAgIH0gZWxzZSB7Ci0jaWYgSU5FVDYKICAgICAgICAgICAgICAgICBpZiAoaXNfaXB2NikgewogICAgICAgICAgICAgICAgICAgICBpZiAob2xzcl9wcmludF9scV9uZWlnaGJvcjYobmRvLCBtc2dfZGF0YSwgbXNnX3RsZW4pID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSNlbmRpZgotICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICBpZiAob2xzcl9wcmludF9scV9uZWlnaGJvcjQobmRvLCBtc2dfZGF0YSwgbXNnX3RsZW4pID09IC0xKQogICAgICAgICAgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgICAgICAgICB9CkBAIC00NzMsMjEgKzUxNSwxNCBAQAogICAgICAgICB7CiAgICAgICAgICAgICBzaXplX3QgYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAotI2lmIElORVQ2CiAgICAgICAgICAgICBpZiAoaXNfaXB2NikKICAgICAgICAgICAgICAgICBhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKLSNlbmRpZgogCiAgICAgICAgICAgICB3aGlsZSAobXNnX3RsZW4gPj0gYWRkcl9zaXplKSB7CiAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqbXNnX2RhdGEsIGFkZHJfc2l6ZSk7Ci0jaWYgSU5FVDYKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgaW50ZXJmYWNlIGFkZHJlc3MgJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgaXNfaXB2NiA/IGlwNmFkZHJfc3RyaW5nKG5kbywgbXNnX2RhdGEpIDoKICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBtc2dfZGF0YSkpKTsKLSNlbHNlCi0gICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIGludGVyZmFjZSBhZGRyZXNzICVzIiwKLSAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBtc2dfZGF0YSkpKTsKLSNlbmRpZgogCiAgICAgICAgICAgICAgICAgbXNnX2RhdGEgKz0gYWRkcl9zaXplOwogICAgICAgICAgICAgICAgIG1zZ190bGVuIC09IGFkZHJfc2l6ZTsKQEAgLTQ5NiwxOCArNTMxLDE5IEBACiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIE9MU1JfSE5BX01TRzoKLSAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBBZHZlcnRpc2VkIG5ldHdvcmtzICh0b3RhbCAldSkiLAotICAgICAgICAgICAgICAgICAgICAodW5zaWduZWQgaW50KSAobXNnX3RsZW4gLyBzaXplb2Yoc3RydWN0IG9sc3JfaG5hNikpKSk7Ci0jaWYgSU5FVDYKICAgICAgICAgICAgIGlmIChpc19pcHY2KQogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIGludCBpID0gMDsKKworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBBZHZlcnRpc2VkIG5ldHdvcmtzICh0b3RhbCAldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgKG1zZ190bGVuIC8gc2l6ZW9mKHN0cnVjdCBvbHNyX2huYTYpKSkpOworCiAgICAgICAgICAgICAgICAgd2hpbGUgKG1zZ190bGVuID49IHNpemVvZihzdHJ1Y3Qgb2xzcl9obmE2KSkgewotICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgb2xzcl9obmE2ICpobmE2OworICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3Qgb2xzcl9obmE2ICpobmE2OwogCiAgICAgICAgICAgICAgICAgICAgIE5EX1RDSEVDSzIoKm1zZ19kYXRhLCBzaXplb2Yoc3RydWN0IG9sc3JfaG5hNikpOwogCi0gICAgICAgICAgICAgICAgICAgIGhuYTYgPSAoc3RydWN0IG9sc3JfaG5hNiAqKW1zZ19kYXRhOworICAgICAgICAgICAgICAgICAgICBobmE2ID0gKGNvbnN0IHN0cnVjdCBvbHNyX2huYTYgKiltc2dfZGF0YTsKIAogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICAjJWk6ICVzLyV1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpLCBpcDZhZGRyX3N0cmluZyhuZG8sIGhuYTYtPm5ldHdvcmspLApAQCAtNTE4LDE5ICs1NTQsNTcgQEAKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlbHNlCi0jZW5kaWYKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBpbnQgY29sID0gMDsKKworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBBZHZlcnRpc2VkIG5ldHdvcmtzICh0b3RhbCAldSkiLAorICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGludCkgKG1zZ190bGVuIC8gc2l6ZW9mKHN0cnVjdCBvbHNyX2huYTQpKSkpOworCiAgICAgICAgICAgICAgICAgd2hpbGUgKG1zZ190bGVuID49IHNpemVvZihzdHJ1Y3Qgb2xzcl9obmE0KSkgewogICAgICAgICAgICAgICAgICAgICBORF9UQ0hFQ0syKCptc2dfZGF0YSwgc2l6ZW9mKHN0cnVjdCBvbHNyX2huYTQpKTsKIAotICAgICAgICAgICAgICAgICAgICBwdHIuaG5hID0gKHN0cnVjdCBvbHNyX2huYTQgKiltc2dfZGF0YTsKKyAgICAgICAgICAgICAgICAgICAgcHRyLmhuYSA9IChjb25zdCBzdHJ1Y3Qgb2xzcl9obmE0ICopbXNnX2RhdGE7CiAKICAgICAgICAgICAgICAgICAgICAgLyogcHJpbnQgNCBwcmVmaXhlcyBwZXIgbGluZSAqLwotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlcy8ldSIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sID09IDAgPyAiXG5cdCAgICAiIDogIiwgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgcHRyLmhuYS0+bmV0d29yayksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzazJwbGVuKEVYVFJBQ1RfMzJCSVRTKHB0ci5obmEtPm1hc2spKSkpOworICAgICAgICAgICAgICAgICAgICBpZiAoIXB0ci5obmEtPm5ldHdvcmtbMF0gJiYgIXB0ci5obmEtPm5ldHdvcmtbMV0gJiYKKyAgICAgICAgICAgICAgICAgICAgICAgICFwdHIuaG5hLT5uZXR3b3JrWzJdICYmICFwdHIuaG5hLT5uZXR3b3JrWzNdICYmCisgICAgICAgICAgICAgICAgICAgICAgICAhcHRyLmhuYS0+bWFza1tHV19ITkFfUEFEXSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgcHRyLmhuYS0+bWFza1tHV19ITkFfRkxBR1NdKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogc21hcnQgZ2F0ZXdheSAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlc1NtYXJ0LUdhdGV3YXk6JXMlcyVzJXMlcyAldS8ldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9PSAwID8gIlxuXHQgICAgIiA6ICIsICIsIC8qIGluZGVudCAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBzZ3cgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogTElOS1NQRUVEICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIuaG5hLT5tYXNrW0dXX0hOQV9GTEFHU10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1dfSE5BX0ZMQUdfTElOS1NQRUVEKSA/ICIgTElOS1NQRUVEIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUFY0ICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIuaG5hLT5tYXNrW0dXX0hOQV9GTEFHU10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1dfSE5BX0ZMQUdfSVBWNCkgPyAiIElQVjQiIDogIiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIElQVjQtTkFUICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIuaG5hLT5tYXNrW0dXX0hOQV9GTEFHU10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1dfSE5BX0ZMQUdfSVBWNF9OQVQpID8gIiBJUFY0LU5BVCIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogSVBWNiAqLworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAocHRyLmhuYS0+bWFza1tHV19ITkFfRkxBR1NdICYKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdXX0hOQV9GTEFHX0lQVjYpID8gIiBJUFY2IiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBJUHY2UFJFRklYICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChwdHIuaG5hLT5tYXNrW0dXX0hOQV9GTEFHU10gJgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR1dfSE5BX0ZMQUdfSVBWNlBSRUZJWCkgPyAiIElQdjYtUFJFRklYIiA6ICIiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiB1cGxpbmsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ci5obmEtPm1hc2tbR1dfSE5BX0ZMQUdTXSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHV19ITkFfRkxBR19MSU5LU1BFRUQpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplX2d3X3NwZWVkKHB0ci5obmEtPm1hc2tbR1dfSE5BX1VQTElOS10pIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogZG93bmxpbmsgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHB0ci5obmEtPm1hc2tbR1dfSE5BX0ZMQUdTXSAmCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHV19ITkFfRkxBR19MSU5LU1BFRUQpID8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2VyaWFsaXplX2d3X3NwZWVkKHB0ci5obmEtPm1hc2tbR1dfSE5BX0RPV05MSU5LXSkgOiAwCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICkpOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgLyogbm9ybWFsIHJvdXRlICovCisgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlcy8ldSIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbCA9PSAwID8gIlxuXHQgICAgIiA6ICIsICIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBwdHIuaG5hLT5uZXR3b3JrKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWFzazJwbGVuKEVYVFJBQ1RfMzJCSVRTKHB0ci5obmEtPm1hc2spKSkpOworICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgbXNnX2RhdGEgKz0gc2l6ZW9mKHN0cnVjdCBvbHNyX2huYTQpOwogICAgICAgICAgICAgICAgICAgICBtc2dfdGxlbiAtPSBzaXplb2Yoc3RydWN0IG9sc3JfaG5hNCk7CkBAIC02MDEsMTIgKzY3NSwxMCBAQAogCiAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqbXNnX2RhdGEsIGFkZHJfc2l6ZSArIG5hbWVfZW50cnlfbGVuICsgbmFtZV9lbnRyeV9wYWRkaW5nKTsKIAotI2lmIElORVQ2CiAgICAgICAgICAgICAgICAgaWYgKGlzX2lwdjYpCiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGFkZHJlc3MgJXMsIG5hbWUgXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgbXNnX2RhdGEpKSk7CiAgICAgICAgICAgICAgICAgZWxzZQotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGFkZHJlc3MgJXMsIG5hbWUgXCIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBtc2dfZGF0YSkpKTsKICAgICAgICAgICAgICAgICAodm9pZClmbl9wcmludG4obmRvLCBtc2dfZGF0YSArIGFkZHJfc2l6ZSwgbmFtZV9lbnRyeV9sZW4sIE5VTEwpOwpkaWZmIC0tZ2l0IGEvcHJpbnQtb3BlbmZsb3ctMS4wLmMgYi9wcmludC1vcGVuZmxvdy0xLjAuYwppbmRleCBhMzZjMzJmLi5jZTk1ODQzIDEwMDY0NAotLS0gYS9wcmludC1vcGVuZmxvdy0xLjAuYworKysgYi9wcmludC1vcGVuZmxvdy0xLjAuYwpAQCAtMTQsNyArMTQsNyBAQAogICogKiBlcCAtLSB0aGUgcG9pbnRlciB0byB0aGUgZW5kIG9mIHRoZSBjYXB0dXJlZCBmcmFtZQogICogVGhleSByZXR1cm4gZWl0aGVyIHRoZSBwb2ludGVyIHRvIHRoZSBuZXh0IG5vdC15ZXQtZGVjb2RlZCBwYXJ0IG9mIHRoZSBmcmFtZQogICogb3IgdGhlIHZhbHVlIG9mIGVwLCB3aGljaCBtZWFucyB0aGUgY3VycmVudCBmcmFtZSBwcm9jZXNzaW5nIGlzIG92ZXIgYXMgaXQKLSAqIGhhcyBiZWVuIGZ1bGx5IGRlY29kZWQgb3IgaXMgbWFsZm9ybWVkIG9yIHRydW5jYXRlZC4gVGhpcyB3YXkgaXQgaXMgcG9zc2libGUKKyAqIGhhcyBiZWVuIGZ1bGx5IGRlY29kZWQgb3IgaXMgaW52YWxpZCBvciB0cnVuY2F0ZWQuIFRoaXMgd2F5IGl0IGlzIHBvc3NpYmxlCiAgKiB0byBjaGFpbiBhbmQgbmVzdCBzdWNoIGZ1bmN0aW9ucyB1bmlmb3JtbHkgdG8gZGVjb2RlIGFuIE9GMS4wIG1lc3NhZ2UsIHdoaWNoCiAgKiBjb25zaXN0cyBvZiBzZXZlcmFsIGxheWVycyBvZiBuZXN0ZWQgc3RydWN0dXJlcy4KICAqCkBAIC01NiwxNCArNTYsMTUgQEAKICAqIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE9wZW5GbG93IHByb3RvY29sIHZlcnNpb24gMS4wIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXRoZXIuaCIKQEAgLTczLDcgKzc0LDYgQEAKICNpbmNsdWRlICJvcGVuZmxvdy5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8b3BlbmZsb3ddIjsKLXN0YXRpYyBjb25zdCBjaGFyIGNzdHJbXSA9ICIgKGNvcnJ1cHQpIjsKIAogI2RlZmluZSBPRlBUX0hFTExPICAgICAgICAgICAgICAgICAgICAweDAwCiAjZGVmaW5lIE9GUFRfRVJST1IgICAgICAgICAgICAgICAgICAgIDB4MDEKQEAgLTc2MCw3ICs3NjAsNyBAQAogCXVpbnQzMl90IHN1YnR5cGU7CiAKIAlpZiAobGVuIDwgNCkKLQkJZ290byBjb3JydXB0OworCQlnb3RvIGludmFsaWQ7CiAJLyogc3VidHlwZSAqLwogCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAlzdWJ0eXBlID0gRVhUUkFDVF8zMkJJVFMoY3ApOwpAQCAtNzgxLDcgKzc4MSw3IEBACiAJCSAqCiAJCSAqLwogCQlpZiAobGVuICE9IDEyKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBpbmRleCAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMSk7CiAJCU5EX1BSSU5UKChuZG8sICIsIGluZGV4ICV1IiwgKmNwKSk7CkBAIC04MDUsNyArODA1LDcgQEAKIAkJICoKIAkJICovCiAJCWlmIChsZW4gIT0gMTIpCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIGluZGV4ICovCiAJCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAkJTkRfUFJJTlQoKG5kbywgIiwgaW5kZXggJXUiLCAqY3ApKTsKQEAgLTgzMiw3ICs4MzIsNyBAQAogCQkgKgogCQkgKi8KIAkJaWYgKGxlbiAhPSA4KQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiByZXBvcnRfbWlycm9yX3BvcnRzICovCiAJCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAkJTkRfUFJJTlQoKG5kbywgIiwgcmVwb3J0X21pcnJvcl9wb3J0cyAlcyIsIHRvazJzdHIoYnNuX29ub2ZmX3N0ciwgImJvZ3VzICgldSkiLCAqY3ApKSk7CkBAIC04NTUsNyArODU1LDcgQEAKIAkJICoKIAkJICovCiAJCWlmIChsZW4gIT0gNCkKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJYnJlYWs7CiAJY2FzZSBCU05fVklSVFVBTF9QT1JUX1JFTU9WRV9SRVFVRVNUOgogCQkvKgpAQCAtODY5LDcgKzg2OSw3IEBACiAJCSAqCiAJCSAqLwogCQlpZiAobGVuICE9IDgpCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIHZwb3J0X25vICovCiAJCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAkJTkRfUFJJTlQoKG5kbywgIiwgdnBvcnRfbm8gJXUiLCBFWFRSQUNUXzMyQklUUyhjcCkpKTsKQEAgLTg4OSw3ICs4ODksNyBAQAogCQkgKgogCQkgKi8KIAkJaWYgKGxlbiA8IDgpCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIHNlcnZpY2UgKi8KIAkJTkRfVENIRUNLMigqY3AsIDQpOwogCQlORF9QUklOVCgobmRvLCAiLCBzZXJ2aWNlICV1IiwgRVhUUkFDVF8zMkJJVFMoY3ApKSk7CkBAIC05MzYsNyArOTM2LDcgQEAKIAkJICoKIAkJICovCiAJCWlmIChsZW4gIT0gOCkKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJLyogc3RhdHVzICovCiAJCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAkJTkRfUFJJTlQoKG5kbywgIiwgc3RhdHVzIDB4JTA4eCIsIEVYVFJBQ1RfMzJCSVRTKGNwKSkpOwpAQCAtOTQ4LDggKzk0OCw4IEBACiAJfQogCXJldHVybiBjcDsKIAotY29ycnVwdDogLyogc2tpcCB0aGUgdW5kZXJzaXplZCBkYXRhICovCi0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDogLyogc2tpcCB0aGUgdW5kZXJzaXplZCBkYXRhICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwMCwgbGVuKTsKIAlyZXR1cm4gY3AwICsgbGVuOwogdHJ1bmM6CkBAIC05NjUsNyArOTY1LDcgQEAKIAl1aW50MzJfdCBzdWJ0eXBlLCB2bGFuX3RhZzsKIAogCWlmIChsZW4gPCA0KQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBzdWJ0eXBlICovCiAJTkRfVENIRUNLMigqY3AsIDQpOwogCXN1YnR5cGUgPSBFWFRSQUNUXzMyQklUUyhjcCk7CkBAIC05ODgsNyArOTg4LDcgQEAKIAkJICoKIAkJICovCiAJCWlmIChsZW4gIT0gMTYpCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIGRlc3RfcG9ydCAqLwogCQlORF9UQ0hFQ0syKCpjcCwgNCk7CiAJCU5EX1BSSU5UKChuZG8sICIsIGRlc3RfcG9ydCAldSIsIEVYVFJBQ1RfMzJCSVRTKGNwKSkpOwpAQCAtMTAyMiw4ICsxMDIyLDggQEAKIAogCXJldHVybiBjcDsKIAotY29ycnVwdDoKLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcDAsIGxlbik7CiAJcmV0dXJuIGNwMCArIGxlbjsKIHRydW5jOgpAQCAtMTAzOSw3ICsxMDM5LDcgQEAKIAljb25zdCB1X2NoYXIgKigqZGVjb2RlcikobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgdV9pbnQpOwogCiAJaWYgKGxlbiA8IDQpCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIHZlbmRvciAqLwogCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAl2ZW5kb3IgPSBFWFRSQUNUXzMyQklUUyhjcCk7CkBAIC0xMDUxLDggKzEwNTEsOCBAQAogCQlvZjEwX2RhdGFfcHJpbnQ7CiAJcmV0dXJuIGRlY29kZXIobmRvLCBjcCwgZXAsIGxlbiAtIDQpOwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIGRhdGEgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIGRhdGEgKi8KKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AsIGxlbik7CiAJcmV0dXJuIGNwICsgbGVuOwogdHJ1bmM6CkBAIC0xMDY4LDcgKzEwNjgsNyBAQAogCWNvbnN0IHVfY2hhciAqKCpkZWNvZGVyKShuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCk7CiAKIAlpZiAobGVuIDwgNCkKLQkJZ290byBjb3JydXB0OworCQlnb3RvIGludmFsaWQ7CiAJLyogdmVuZG9yICovCiAJTkRfVENIRUNLMigqY3AsIDQpOwogCXZlbmRvciA9IEVYVFJBQ1RfMzJCSVRTKGNwKTsKQEAgLTEwODAsOCArMTA4MCw4IEBACiAJCW9mMTBfZGF0YV9wcmludDsKIAlyZXR1cm4gZGVjb2RlcihuZG8sIGNwLCBlcCwgbGVuIC0gNCk7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgZGF0YSAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgZGF0YSAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgbGVuKTsKIAlyZXR1cm4gY3AgKyBsZW47CiB0cnVuYzoKQEAgLTEwOTcsNyArMTA5Nyw3IEBACiAJdWludDMyX3QgdmVuZG9yOwogCiAJaWYgKGxlbiA8IDQpCi0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCS8qIHZlbmRvciAqLwogCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAl2ZW5kb3IgPSBFWFRSQUNUXzMyQklUUyhjcCk7CkBAIC0xMTA2LDggKzExMDYsOCBAQAogCS8qIGRhdGEgKi8KIAlyZXR1cm4gb2YxMF9kYXRhX3ByaW50KG5kbywgY3AsIGVwLCBsZW4gLSA0KTsKIAotY29ycnVwdDogLyogc2tpcCB0aGUgdW5kZXJzaXplZCBkYXRhICovCi0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDogLyogc2tpcCB0aGUgdW5kZXJzaXplZCBkYXRhICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwLCBsZW4pOwogCXJldHVybiBjcCArIGxlbjsKIHRydW5jOgpAQCAtMTE0Nyw3ICsxMTQ3LDcgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJaWYgKGxlbiA8IE9GX1BIWV9QT1JUX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJLyogcG9ydF9ubyAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMik7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICBwb3J0X25vICVzIiwgdG9rMnN0cihvZnBwX3N0ciwgIiV1IiwgRVhUUkFDVF8xNkJJVFMoY3ApKSkpOwpAQCAtMTIwMyw4ICsxMjAzLDggQEAKIAl9IC8qIHdoaWxlICovCiAJcmV0dXJuIGNwOwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIHRyYWlsaW5nIGRhdGEgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIHRyYWlsaW5nIGRhdGEgKi8KKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AwLCBsZW4wKTsKIAlyZXR1cm4gY3AwICsgbGVuMDsKIHRydW5jOgpAQCAtMTIyNSw3ICsxMjI1LDcgQEAKIAkJdV9jaGFyIHBsZW5fYm9ndXMgPSAwLCBza2lwID0gMDsKIAogCQlpZiAobGVuIDwgT0ZfUVVFVUVfUFJPUF9IRUFERVJfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwcm9wZXJ0eSAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMik7CiAJCXByb3BlcnR5ID0gRVhUUkFDVF8xNkJJVFMoY3ApOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAkJY3AgKz0gMjsKIAkJTkRfUFJJTlQoKG5kbywgIiwgbGVuICV1IiwgcGxlbikpOwogCQlpZiAocGxlbiA8IE9GX1FVRVVFX1BST1BfSEVBREVSX0xFTiB8fCBwbGVuID4gbGVuKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwYWQgKi8KIAkJTkRfVENIRUNLMigqY3AsIDQpOwogCQljcCArPSA0OwpAQCAtMTI3OSw4ICsxMjc5LDggQEAKIAl9IC8qIHdoaWxlICovCiAJcmV0dXJuIGNwOwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSByZXN0IG9mIHF1ZXVlIHByb3BlcnRpZXMgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSByZXN0IG9mIHF1ZXVlIHByb3BlcnRpZXMgKi8KKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AwLCBsZW4wKTsKIAlyZXR1cm4gY3AwICsgbGVuMDsKIHRydW5jOgpAQCAtMTI5OSw3ICsxMjk5LDcgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJaWYgKGxlbiA8IE9GX1BBQ0tFVF9RVUVVRV9MRU4pCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCS8qIHF1ZXVlX2lkICovCiAJCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIHF1ZXVlX2lkICV1IiwgRVhUUkFDVF8zMkJJVFMoY3ApKSk7CkBAIC0xMzEwLDcgKzEzMTAsNyBAQAogCQljcCArPSAyOwogCQlORF9QUklOVCgobmRvLCAiLCBsZW4gJXUiLCBkZXNjbGVuKSk7CiAJCWlmIChkZXNjbGVuIDwgT0ZfUEFDS0VUX1FVRVVFX0xFTiB8fCBkZXNjbGVuID4gbGVuKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwYWQgKi8KIAkJTkRfVENIRUNLMigqY3AsIDIpOwogCQljcCArPSAyOwpAQCAtMTMyNyw4ICsxMzI3LDggQEAKIAl9IC8qIHdoaWxlICovCiAJcmV0dXJuIGNwOwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSByZXN0IG9mIHF1ZXVlcyAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIHJlc3Qgb2YgcXVldWVzICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwMCwgbGVuMCk7CiAJcmV0dXJuIGNwMCArIGxlbjA7CiB0cnVuYzoKQEAgLTE0NTQsNyArMTQ1NCw3IEBACiAJCXVfY2hhciBhbGVuX2JvZ3VzID0gMCwgc2tpcCA9IDA7CiAKIAkJaWYgKGxlbiA8IE9GX0FDVElPTl9IRUFERVJfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiB0eXBlICovCiAJCU5EX1RDSEVDSzIoKmNwLCAyKTsKIAkJdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKGNwKTsKQEAgLTE0NjcsNyArMTQ2Nyw3IEBACiAJCU5EX1BSSU5UKChuZG8sICIsIGxlbiAldSIsIGFsZW4pKTsKIAkJLyogT24gYWN0aW9uIHNpemUgdW5kZXJydW4vb3ZlcnJ1biBza2lwIHRoZSByZXN0IG9mIHRoZSBhY3Rpb24gbGlzdC4gKi8KIAkJaWYgKGFsZW4gPCBPRl9BQ1RJT05fSEVBREVSX0xFTiB8fCBhbGVuID4gbGVuKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBPbiBhY3Rpb24gc2l6ZSBpbmFwcHJvcHJpYXRlIGZvciB0aGUgZ2l2ZW4gdHlwZSBvciBpbnZhbGlkIHR5cGUganVzdCBza2lwCiAJCSAqIHRoZSBjdXJyZW50IGFjdGlvbiwgYXMgdGhlIGJhc2ljIGxlbmd0aCBjb25zdHJhaW50IGhhcyBiZWVuIG1ldC4gKi8KIAkJc3dpdGNoICh0eXBlKSB7CkBAIC0xNTk4LDggKzE1OTgsOCBAQAogCX0gLyogd2hpbGUgKi8KIAlyZXR1cm4gY3A7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIHJlc3Qgb2YgYWN0aW9ucyAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIHJlc3Qgb2YgYWN0aW9ucyAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcDAsIGxlbjApOwogCXJldHVybiBjcDAgKyBsZW4wOwogdHJ1bmM6CkBAIC0xNzY2LDEyICsxNzY2LDEyIEBACiAJY2FzZSBPRlBTVF9ERVNDOgogCWNhc2UgT0ZQU1RfVEFCTEU6CiAJCWlmIChsZW4pCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCXJldHVybiBjcDsKIAljYXNlIE9GUFNUX0ZMT1c6CiAJY2FzZSBPRlBTVF9BR0dSRUdBVEU6CiAJCWlmIChsZW4gIT0gT0ZfRkxPV19TVEFUU19SRVFVRVNUX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJLyogbWF0Y2ggKi8KIAkJaWYgKGVwID09IChjcCA9IG9mMTBfbWF0Y2hfcHJpbnQobmRvLCAiXG5cdCAiLCBjcCwgZXApKSkKIAkJCXJldHVybiBlcDsgLyogZW5kIG9mIHNuYXBzaG90ICovCkBAIC0xNzg4LDcgKzE3ODgsNyBAQAogCQlyZXR1cm4gY3AgKyAyOwogCWNhc2UgT0ZQU1RfUE9SVDoKIAkJaWYgKGxlbiAhPSBPRl9QT1JUX1NUQVRTX1JFUVVFU1RfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwb3J0X25vICovCiAJCU5EX1RDSEVDSzIoKmNwLCAyKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgcG9ydF9ubyAlcyIsIHRvazJzdHIob2ZwcF9zdHIsICIldSIsIEVYVFJBQ1RfMTZCSVRTKGNwKSkpKTsKQEAgLTE3OTgsNyArMTc5OCw3IEBACiAJCXJldHVybiBjcCArIDY7CiAJY2FzZSBPRlBTVF9RVUVVRToKIAkJaWYgKGxlbiAhPSBPRl9RVUVVRV9TVEFUU19SRVFVRVNUX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJLyogcG9ydF9ubyAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMik7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0IHBvcnRfbm8gJXMiLCB0b2syc3RyKG9mcHBfc3RyLCAiJXUiLCBFWFRSQUNUXzE2QklUUyhjcCkpKSk7CkBAIC0xODE1LDggKzE4MTUsOCBAQAogCX0KIAlyZXR1cm4gY3A7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIG1lc3NhZ2UgYm9keSAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIG1lc3NhZ2UgYm9keSAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcDAsIGxlbjApOwogCXJldHVybiBjcDAgKyBsZW4wOwogdHJ1bmM6CkBAIC0xODMwLDcgKzE4MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqY3AsIGNvbnN0IHVfY2hhciAqZXAsIGNvbnN0IHVfaW50IGxlbikKIHsKIAlpZiAobGVuICE9IE9GX0RFU0NfU1RBVFNfTEVOKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBtZnJfZGVzYyAqLwogCU5EX1RDSEVDSzIoKmNwLCBERVNDX1NUUl9MRU4pOwogCU5EX1BSSU5UKChuZG8sICJcblx0ICBtZnJfZGVzYyAnIikpOwpAQCAtMTg2Miw4ICsxODYyLDggQEAKIAlORF9QUklOVCgobmRvLCAiJyIpKTsKIAlyZXR1cm4gY3AgKyBERVNDX1NUUl9MRU47CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIG1lc3NhZ2UgYm9keSAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIG1lc3NhZ2UgYm9keSAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgbGVuKTsKIAlyZXR1cm4gY3AgKyBsZW47CiB0cnVuYzoKQEAgLTE4ODIsMTMgKzE4ODIsMTMgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJaWYgKGxlbiA8IE9GX0ZMT1dfU1RBVFNfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBsZW5ndGggKi8KIAkJTkRfVENIRUNLMigqY3AsIDIpOwogCQllbnRyeV9sZW4gPSBFWFRSQUNUXzE2QklUUyhjcCk7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0IGxlbmd0aCAldSIsIGVudHJ5X2xlbikpOwogCQlpZiAoZW50cnlfbGVuIDwgT0ZfRkxPV19TVEFUU19MRU4gfHwgZW50cnlfbGVuID4gbGVuKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQljcCArPSAyOwogCQkvKiB0YWJsZV9pZCAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMSk7CkBAIC0xOTQzLDggKzE5NDMsOCBAQAogCX0gLyogd2hpbGUgKi8KIAlyZXR1cm4gY3A7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIHJlc3Qgb2YgZmxvdyBzdGF0aXN0aWNzIGVudHJpZXMgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSByZXN0IG9mIGZsb3cgc3RhdGlzdGljcyBlbnRyaWVzICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwMCwgbGVuMCk7CiAJcmV0dXJuIGNwMCArIGxlbjA7CiB0cnVuYzoKQEAgLTE5NTksNyArMTk1OSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2ludCBsZW4pCiB7CiAJaWYgKGxlbiAhPSBPRl9BR0dSRUdBVEVfU1RBVFNfUkVQTFlfTEVOKQotCQlnb3RvIGNvcnJ1cHQ7CisJCWdvdG8gaW52YWxpZDsKIAkvKiBwYWNrZXRfY291bnQgKi8KIAlORF9UQ0hFQ0syKCpjcCwgOCk7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHQgcGFja2V0X2NvdW50ICUiIFBSSXU2NCwgRVhUUkFDVF82NEJJVFMoY3ApKSk7CkBAIC0xOTc2LDggKzE5NzYsOCBAQAogCU5EX1RDSEVDSzIoKmNwLCA0KTsKIAlyZXR1cm4gY3AgKyA0OwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSBtZXNzYWdlIGJvZHkgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSBtZXNzYWdlIGJvZHkgKi8KKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AsIGxlbik7CiAJcmV0dXJuIGNwICsgbGVuOwogdHJ1bmM6CkBAIC0xOTk1LDcgKzE5OTUsNyBAQAogCiAJd2hpbGUgKGxlbikgewogCQlpZiAobGVuIDwgT0ZfVEFCTEVfU1RBVFNfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiB0YWJsZV9pZCAqLwogCQlORF9UQ0hFQ0syKCpjcCwgMSk7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0IHRhYmxlX2lkICVzIiwgdG9rMnN0cih0YWJsZWlkX3N0ciwgIiV1IiwgKmNwKSkpOwpAQCAtMjAzNSw4ICsyMDM1LDggQEAKIAl9IC8qIHdoaWxlICovCiAJcmV0dXJuIGNwOwogCi1jb3JydXB0OiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIHRyYWlsaW5nIGRhdGEgKi8KLQlORF9QUklOVCgobmRvLCAiJXMiLCBjc3RyKSk7CitpbnZhbGlkOiAvKiBza2lwIHRoZSB1bmRlcnNpemVkIHRyYWlsaW5nIGRhdGEgKi8KKwlORF9QUklOVCgobmRvLCAiJXMiLCBpc3RyKSk7CiAJTkRfVENIRUNLMigqY3AwLCBsZW4wKTsKIAlyZXR1cm4gY3AwICsgbGVuMDsKIHRydW5jOgpAQCAtMjA1NCw3ICsyMDU0LDcgQEAKIAogCXdoaWxlIChsZW4pIHsKIAkJaWYgKGxlbiA8IE9GX1BPUlRfU1RBVFNfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwb3J0X25vICovCiAJCU5EX1RDSEVDSzIoKmNwLCAyKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIHBvcnRfbm8gJXMiLCB0b2syc3RyKG9mcHBfc3RyLCAiJXUiLCBFWFRSQUNUXzE2QklUUyhjcCkpKSk7CkBAIC0yMTIwLDggKzIxMjAsOCBAQAogCX0gLyogd2hpbGUgKi8KIAlyZXR1cm4gY3A7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgdHJhaWxpbmcgZGF0YSAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgdHJhaWxpbmcgZGF0YSAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcDAsIGxlbjApOwogCXJldHVybiBjcDAgKyBsZW4wOwogdHJ1bmM6CkBAIC0yMTM5LDcgKzIxMzksNyBAQAogCiAJd2hpbGUgKGxlbikgewogCQlpZiAobGVuIDwgT0ZfUVVFVUVfU1RBVFNfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQkvKiBwb3J0X25vICovCiAJCU5EX1RDSEVDSzIoKmNwLCAyKTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIHBvcnRfbm8gJXMiLCB0b2syc3RyKG9mcHBfc3RyLCAiJXUiLCBFWFRSQUNUXzE2QklUUyhjcCkpKSk7CkBAIC0yMTY4LDggKzIxNjgsOCBAQAogCX0gLyogd2hpbGUgKi8KIAlyZXR1cm4gY3A7CiAKLWNvcnJ1cHQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgdHJhaWxpbmcgZGF0YSAqLwotCU5EX1BSSU5UKChuZG8sICIlcyIsIGNzdHIpKTsKK2ludmFsaWQ6IC8qIHNraXAgdGhlIHVuZGVyc2l6ZWQgdHJhaWxpbmcgZGF0YSAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcDAsIGxlbjApOwogCXJldHVybiBjcDAgKyBsZW4wOwogdHJ1bmM6CkBAIC0yMjM5LDE1ICsyMjM5LDE1IEBACiAJYWN0aW9uc19sZW4gPSBFWFRSQUNUXzE2QklUUyhjcCk7CiAJY3AgKz0gMjsKIAlpZiAoYWN0aW9uc19sZW4gPiBsZW4gLSBPRl9QQUNLRVRfT1VUX0xFTikKLQkJZ290byBjb3JydXB0OworCQlnb3RvIGludmFsaWQ7CiAJLyogYWN0aW9ucyAqLwogCWlmIChlcCA9PSAoY3AgPSBvZjEwX2FjdGlvbnNfcHJpbnQobmRvLCAiXG5cdCAiLCBjcCwgZXAsIGFjdGlvbnNfbGVuKSkpCiAJCXJldHVybiBlcDsgLyogZW5kIG9mIHNuYXBzaG90ICovCiAJLyogZGF0YSAqLwogCXJldHVybiBvZjEwX3BhY2tldF9kYXRhX3ByaW50KG5kbywgY3AsIGVwLCBsZW4gLSBPRl9QQUNLRVRfT1VUX0xFTiAtIGFjdGlvbnNfbGVuKTsKIAotY29ycnVwdDogLyogc2tpcCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSBib2R5ICovCi0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDogLyogc2tpcCB0aGUgcmVzdCBvZiB0aGUgbWVzc2FnZSBib2R5ICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogCU5EX1RDSEVDSzIoKmNwMCwgbGVuMCk7CiAJcmV0dXJuIGNwMCArIGxlbjA7CiB0cnVuYzoKQEAgLTIzODcsNyArMjM4Nyw3IEBACiAJICogcG9zc2libGUsIGNoZWNrIHRoYXQgbWVzc2FnZSBsZW5ndGggbWVldHMgdGhlIGNvbnN0cmFpbnQsIGluIHJlbWFpbmluZwogCSAqIGNhc2VzIGNoZWNrIHRoYXQgdGhlIGxlbmd0aCBpcyBPSyB0byBiZWdpbiBkZWNvZGluZyBhbmQgbGVhdmUgYW55IGZpbmFsCiAJICogdmVyaWZpY2F0aW9uIHVwIHRvIGEgbG93ZXItbGF5ZXIgZnVuY3Rpb24uIFdoZW4gdGhlIGN1cnJlbnQgbWVzc2FnZSBpcwotCSAqIGNvcnJ1cHQsIHByb2NlZWQgdG8gdGhlIG5leHQgbWVzc2FnZS4gKi8KKwkgKiBpbnZhbGlkLCBwcm9jZWVkIHRvIHRoZSBuZXh0IG1lc3NhZ2UuICovCiAKIAkvKiBbT0YxMF0gU2VjdGlvbiA1LjEgKi8KIAlORF9QUklOVCgobmRvLCAiXG5cdHZlcnNpb24gMS4wLCB0eXBlICVzLCBsZW5ndGggJXUsIHhpZCAweCUwOHgiLApAQCAtMjM5OSwxNCArMjM5OSwxNCBAQAogCWNhc2UgT0ZQVF9CQVJSSUVSX1JFUVVFU1Q6IC8qIFtPRjEwXSBTZWN0aW9uIDUuMy43ICovCiAJY2FzZSBPRlBUX0JBUlJJRVJfUkVQTFk6IC8qIGliaWQgKi8KIAkJaWYgKGxlbiAhPSBPRl9IRUFERVJfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlicmVhazsKIAogCS8qIE9wZW5GbG93IGhlYWRlciBhbmQgZml4ZWQtc2l6ZSBtZXNzYWdlIGJvZHkuICovCiAJY2FzZSBPRlBUX1NFVF9DT05GSUc6IC8qIFtPRjEwXSBTZWN0aW9uIDUuMy4yICovCiAJY2FzZSBPRlBUX0dFVF9DT05GSUdfUkVQTFk6IC8qIGliaWQgKi8KIAkJaWYgKGxlbiAhPSBPRl9TV0lUQ0hfQ09ORklHX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJaWYgKG5kby0+bmRvX3ZmbGFnIDwgMSkKIAkJCWdvdG8gbmV4dF9tZXNzYWdlOwogCQkvKiBmbGFncyAqLwpAQCAtMjQxOSwxMyArMjQxOSwxMyBAQAogCQlyZXR1cm4gY3AgKyAyOwogCWNhc2UgT0ZQVF9QT1JUX01PRDoKIAkJaWYgKGxlbiAhPSBPRl9QT1JUX01PRF9MRU4pCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCWlmIChuZG8tPm5kb192ZmxhZyA8IDEpCiAJCQlnb3RvIG5leHRfbWVzc2FnZTsKIAkJcmV0dXJuIG9mMTBfcG9ydF9tb2RfcHJpbnQobmRvLCBjcCwgZXApOwogCWNhc2UgT0ZQVF9RVUVVRV9HRVRfQ09ORklHX1JFUVVFU1Q6IC8qIFtPRjEwXSBTZWN0aW9uIDUuMy40ICovCiAJCWlmIChsZW4gIT0gT0ZfUVVFVUVfR0VUX0NPTkZJR19SRVFVRVNUX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJaWYgKG5kby0+bmRvX3ZmbGFnIDwgMSkKIAkJCWdvdG8gbmV4dF9tZXNzYWdlOwogCQkvKiBwb3J0ICovCkBAIC0yNDM3LDEzICsyNDM3LDEzIEBACiAJCXJldHVybiBjcCArIDI7CiAJY2FzZSBPRlBUX0ZMT1dfUkVNT1ZFRDoKIAkJaWYgKGxlbiAhPSBPRl9GTE9XX1JFTU9WRURfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX2Zsb3dfcmVtb3ZlZF9wcmludChuZG8sIGNwLCBlcCk7CiAJY2FzZSBPRlBUX1BPUlRfU1RBVFVTOiAvKiBbT0YxMF0gU2VjdGlvbiA1LjQuMyAqLwogCQlpZiAobGVuICE9IE9GX1BPUlRfU1RBVFVTX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJaWYgKG5kby0+bmRvX3ZmbGFnIDwgMSkKIAkJCWdvdG8gbmV4dF9tZXNzYWdlOwogCQkvKiByZWFzb24gKi8KQEAgLTI0NTksNyArMjQ1OSw3IEBACiAJLyogT3BlbkZsb3cgaGVhZGVyLCBmaXhlZC1zaXplIG1lc3NhZ2UgYm9keSBhbmQgbiAqIGZpeGVkLXNpemUgZGF0YSB1bml0cy4gKi8KIAljYXNlIE9GUFRfRkVBVFVSRVNfUkVQTFk6CiAJCWlmIChsZW4gPCBPRl9TV0lUQ0hfRkVBVFVSRVNfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX2ZlYXR1cmVzX3JlcGx5X3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwpAQCAtMjQ3NSwyMSArMjQ3NSwyMSBAQAogCS8qIE9wZW5GbG93IGhlYWRlciwgZml4ZWQtc2l6ZSBtZXNzYWdlIGJvZHkgYW5kIHZhcmlhYmxlLXNpemUgZGF0YS4gKi8KIAljYXNlIE9GUFRfRVJST1I6CiAJCWlmIChsZW4gPCBPRl9FUlJPUl9NU0dfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX2Vycm9yX3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwogCWNhc2UgT0ZQVF9WRU5ET1I6CiAJICAvKiBbT0YxMF0gU2VjdGlvbiA1LjUuNCAqLwogCQlpZiAobGVuIDwgT0ZfVkVORE9SX0hFQURFUl9MRU4pCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCWlmIChuZG8tPm5kb192ZmxhZyA8IDEpCiAJCQlnb3RvIG5leHRfbWVzc2FnZTsKIAkJcmV0dXJuIG9mMTBfdmVuZG9yX21lc3NhZ2VfcHJpbnQobmRvLCBjcCwgZXAsIGxlbiAtIE9GX0hFQURFUl9MRU4pOwogCWNhc2UgT0ZQVF9QQUNLRVRfSU46CiAJCS8qIDIgbW9jayBvY3RldHMgY291bnQgaW4gT0ZfUEFDS0VUX0lOX0xFTiBidXQgbm90IGluIGxlbiAqLwogCQlpZiAobGVuIDwgT0ZfUEFDS0VUX0lOX0xFTiAtIDIpCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCWlmIChuZG8tPm5kb192ZmxhZyA8IDEpCiAJCQlnb3RvIG5leHRfbWVzc2FnZTsKIAkJcmV0dXJuIG9mMTBfcGFja2V0X2luX3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwpAQCAtMjQ5OSw3ICsyNDk5LDcgQEAKIAkvKiBjLiBPcGVuRmxvdyBoZWFkZXIsIGZpeGVkLXNpemUgbWVzc2FnZSBib2R5IGFuZCB2YXJpYWJsZS1zaXplIGRhdGEuICovCiAJY2FzZSBPRlBUX1NUQVRTX1JFUVVFU1Q6CiAJCWlmIChsZW4gPCBPRl9TVEFUU19SRVFVRVNUX0xFTikKLQkJCWdvdG8gY29ycnVwdDsKKwkJCWdvdG8gaW52YWxpZDsKIAkJaWYgKG5kby0+bmRvX3ZmbGFnIDwgMSkKIAkJCWdvdG8gbmV4dF9tZXNzYWdlOwogCQlyZXR1cm4gb2YxMF9zdGF0c19yZXF1ZXN0X3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwpAQCAtMjUxMCw3ICsyNTEwLDcgQEAKIAkvKiBkLiBPcGVuRmxvdyBoZWFkZXIsIGZpeGVkLXNpemUgbWVzc2FnZSBib2R5IGFuZCB2YXJpYWJsZS1zaXplIGRhdGEuICovCiAJY2FzZSBPRlBUX1NUQVRTX1JFUExZOgogCQlpZiAobGVuIDwgT0ZfU1RBVFNfUkVQTFlfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX3N0YXRzX3JlcGx5X3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwpAQCAtMjUxOCw3ICsyNTE4LDcgQEAKIAkvKiBPcGVuRmxvdyBoZWFkZXIgYW5kIG4gKiB2YXJpYWJsZS1zaXplIGRhdGEgdW5pdHMgYW5kIHZhcmlhYmxlLXNpemUgZGF0YS4gKi8KIAljYXNlIE9GUFRfUEFDS0VUX09VVDoKIAkJaWYgKGxlbiA8IE9GX1BBQ0tFVF9PVVRfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX3BhY2tldF9vdXRfcHJpbnQobmRvLCBjcCwgZXAsIGxlbik7CkBAIC0yNTI2LDcgKzI1MjYsNyBAQAogCS8qIE9wZW5GbG93IGhlYWRlciwgZml4ZWQtc2l6ZSBtZXNzYWdlIGJvZHkgYW5kIG4gKiB2YXJpYWJsZS1zaXplIGRhdGEgdW5pdHMuICovCiAJY2FzZSBPRlBUX0ZMT1dfTU9EOgogCQlpZiAobGVuIDwgT0ZfRkxPV19NT0RfTEVOKQotCQkJZ290byBjb3JydXB0OworCQkJZ290byBpbnZhbGlkOwogCQlpZiAobmRvLT5uZG9fdmZsYWcgPCAxKQogCQkJZ290byBuZXh0X21lc3NhZ2U7CiAJCXJldHVybiBvZjEwX2Zsb3dfbW9kX3ByaW50KG5kbywgY3AsIGVwLCBsZW4pOwpAQCAtMjUzNCw3ICsyNTM0LDcgQEAKIAkvKiBPcGVuRmxvdyBoZWFkZXIsIGZpeGVkLXNpemUgbWVzc2FnZSBib2R5IGFuZCBuICogdmFyaWFibGUtc2l6ZSBkYXRhIHVuaXRzLiAqLwogCWNhc2UgT0ZQVF9RVUVVRV9HRVRfQ09ORklHX1JFUExZOiAvKiBbT0YxMF0gU2VjdGlvbiA1LjMuNCAqLwogCQlpZiAobGVuIDwgT0ZfUVVFVUVfR0VUX0NPTkZJR19SRVBMWV9MRU4pCi0JCQlnb3RvIGNvcnJ1cHQ7CisJCQlnb3RvIGludmFsaWQ7CiAJCWlmIChuZG8tPm5kb192ZmxhZyA8IDEpCiAJCQlnb3RvIG5leHRfbWVzc2FnZTsKIAkJLyogcG9ydCAqLwpAQCAtMjU0OSw4ICsyNTQ5LDggQEAKIAl9IC8qIHN3aXRjaCAodHlwZSkgKi8KIAlnb3RvIG5leHRfbWVzc2FnZTsKIAotY29ycnVwdDogLyogc2tpcCB0aGUgbWVzc2FnZSBib2R5ICovCi0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDogLyogc2tpcCB0aGUgbWVzc2FnZSBib2R5ICovCisJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOwogbmV4dF9tZXNzYWdlOgogCU5EX1RDSEVDSzIoKmNwMCwgbGVuMCAtIE9GX0hFQURFUl9MRU4pOwogCXJldHVybiBjcDAgKyBsZW4wIC0gT0ZfSEVBREVSX0xFTjsKZGlmZiAtLWdpdCBhL3ByaW50LW9wZW5mbG93LmMgYi9wcmludC1vcGVuZmxvdy5jCmluZGV4IDg4MjVhZTMuLjA0M2FkYzIgMTAwNjQ0Ci0tLSBhL3ByaW50LW9wZW5mbG93LmMKKysrIGIvcHJpbnQtb3BlbmZsb3cuYwpAQCAtMzAsMjAgKzMwLDIwIEBACiAgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiB2ZXJzaW9uLWluZGVwZW5kZW50IE9wZW5GbG93IHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJvcGVuZmxvdy5oIgogI2luY2x1ZGUgIm91aS5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8b3BlbmZsb3ddIjsKLXN0YXRpYyBjb25zdCBjaGFyIGNzdHJbXSA9ICIgKGNvcnJ1cHQpIjsKIAogI2RlZmluZSBPRl9WRVJfMV8wICAgIDB4MDEKIApAQCAtODMsNyArODMsNyBAQAogCXVpbnQzMl90IHhpZDsKIAogCWlmIChlcCA8IGNwICsgT0ZfSEVBREVSX0xFTikKLQkJZ290byBjb3JydXB0OworCQlnb3RvIGludmFsaWQ7CiAJLyogdmVyc2lvbiAqLwogCU5EX1RDSEVDSzIoKmNwLCAxKTsKIAl2ZXJzaW9uID0gKmNwOwpAQCAtMTA3LDcgKzEwNyw3IEBACiAJICogc2VnbWVudC4gKi8KIAlpZiAobGVuZ3RoIDwgT0ZfSEVBREVSX0xFTikgewogCQlvZl9oZWFkZXJfcHJpbnQobmRvLCB2ZXJzaW9uLCB0eXBlLCBsZW5ndGgsIHhpZCk7Ci0JCWdvdG8gY29ycnVwdDsKKwkJZ290byBpbnZhbGlkOwogCX0KIAkvKiBEZWNvZGUga25vd24gcHJvdG9jb2wgdmVyc2lvbnMgZnVydGhlciB3aXRob3V0IHByaW50aW5nIHRoZSBoZWFkZXIgKHRoZQogCSAqIHR5cGUgZGVjb2RpbmcgaXMgdmVyc2lvbi1zcGVjaWZpYy4gKi8KQEAgLTEyMCw4ICsxMjAsOCBAQAogCQlyZXR1cm4gY3AgKyBsZW5ndGggLSBPRl9IRUFERVJfTEVOOyAvKiBkb25lIHdpdGggY3VycmVudCBtZXNzYWdlICovCiAJfQogCi1jb3JydXB0OiAvKiBmYWlsIGN1cnJlbnQgcGFja2V0ICovCi0JTkRfUFJJTlQoKG5kbywgIiVzIiwgY3N0cikpOworaW52YWxpZDogLyogZmFpbCBjdXJyZW50IHBhY2tldCAqLworCU5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKIAlORF9UQ0hFQ0syKCpjcCwgZXAgLSBjcCk7CiAJcmV0dXJuIGVwOwogdHJ1bmM6CmRpZmYgLS1naXQgYS9wcmludC1vc3BmLmMgYi9wcmludC1vc3BmLmMKaW5kZXggMzU4MzQxNy4uZGI0MjMxYiAxMDA2NDQKLS0tIGEvcHJpbnQtb3NwZi5jCisrKyBiL3ByaW50LW9zcGYuYwpAQCAtMjEsMTQgKzIxLDE1IEBACiAgKiBPU1BGIHN1cHBvcnQgY29udHJpYnV0ZWQgYnkgSmVmZnJleSBIb25pZyAoamNoQG1pdGNoZWxsLmNpdC5jb3JuZWxsLmVkdSkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBPcGVuIFNob3J0ZXN0IFBhdGggRmlyc3QgKE9TUEYpIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiZ21wbHMuaCIKQEAgLTMxNCw2ICszMTUsMTAgQEAKICAgICAgICAgICAgICAgICB0cHRyKz00OwogICAgICAgICAgICAgICAgIHRsdl9sZW5ndGgtPTQ7CiAKKwkJLyogSW5maW5pdGUgbG9vcCBwcm90ZWN0aW9uICovCisJCWlmIChzdWJ0bHZfdHlwZSA9PSAwIHx8IHN1YnRsdl9sZW5ndGggPT0gMCkKKwkJICAgIGdvdG8gaW52YWxpZDsKKwogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgJXMgc3ViVExWICgldSksIGxlbmd0aDogJXUiLAogICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGxzYV9vcGFxdWVfdGVfbGlua190bHZfc3VidGx2X3ZhbHVlcywidW5rbm93biIsc3VidGx2X3R5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICBzdWJ0bHZfdHlwZSwKQEAgLTMyMiwxMCArMzI3LDE4IEBACiAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgc3VidGx2X2xlbmd0aCk7CiAgICAgICAgICAgICAgICAgc3dpdGNoKHN1YnRsdl90eXBlKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBMU19PUEFRVUVfVEVfTElOS19TVUJUTFZfQURNSU5fR1JPVVA6CisJCSAgICBpZiAoc3VidGx2X2xlbmd0aCAhPSA0KSB7CisJCQlORF9QUklOVCgobmRvLCAiICE9IDQiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIDB4JTA4eCIsIEVYVFJBQ1RfMzJCSVRTKHRwdHIpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTFNfT1BBUVVFX1RFX0xJTktfU1VCVExWX0xJTktfSUQ6CiAgICAgICAgICAgICAgICAgY2FzZSBMU19PUEFRVUVfVEVfTElOS19TVUJUTFZfTElOS19MT0NBTF9SRU1PVEVfSUQ6CisJCSAgICBpZiAoc3VidGx2X2xlbmd0aCAhPSA0ICYmIHN1YnRsdl9sZW5ndGggIT0gOCkgeworCQkJTkRfUFJJTlQoKG5kbywgIiAhPSA0ICYmICE9IDgiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICVzICgweCUwOHgpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCB0cHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIpKSk7CkBAIC0zMzYsMTQgKzM0OSwyNiBAQAogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9MT0NBTF9JUDoKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9SRU1PVEVfSVA6CisJCSAgICBpZiAoc3VidGx2X2xlbmd0aCAhPSA0KSB7CisJCQlORF9QUklOVCgobmRvLCAiICE9IDQiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICVzIiwgaXBhZGRyX3N0cmluZyhuZG8sIHRwdHIpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTFNfT1BBUVVFX1RFX0xJTktfU1VCVExWX01BWF9CVzoKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9NQVhfUkVTX0JXOgorCQkgICAgaWYgKHN1YnRsdl9sZW5ndGggIT0gNCkgeworCQkJTkRfUFJJTlQoKG5kbywgIiAhPSA0IikpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQogICAgICAgICAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cik7CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICUuM2YgTWJwcyIsIGJ3LmYgKiA4IC8gMTAwMDAwMCkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9VTlJFU19CVzoKKwkJICAgIGlmIChzdWJ0bHZfbGVuZ3RoICE9IDMyKSB7CisJCQlORF9QUklOVCgobmRvLCAiICE9IDMyIikpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQogICAgICAgICAgICAgICAgICAgICBmb3IgKHRlX2NsYXNzID0gMDsgdGVfY2xhc3MgPCA4OyB0ZV9jbGFzcysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cit0ZV9jbGFzcyo0KTsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRURS1DbGFzcyAldTogJS4zZiBNYnBzIiwKQEAgLTM1Miw5ICszNzcsMjIgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9CV19DT05TVFJBSU5UUzoKKwkJICAgIGlmIChzdWJ0bHZfbGVuZ3RoIDwgNCkgeworCQkJTkRfUFJJTlQoKG5kbywgIiA8IDQiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CisJCSAgICAvKiBCQyBNb2RlbCBJZCAoMSBvY3RldCkgKyBSZXNlcnZlZCAoMyBvY3RldHMpICovCiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRCYW5kd2lkdGggQ29uc3RyYWludHMgTW9kZWwgSUQ6ICVzICgldSkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihkaWZmc2Vydl90ZV9iY192YWx1ZXMsICJ1bmtub3duIiwgKnRwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRwdHIpKTsKKwkJICAgIGlmIChzdWJ0bHZfbGVuZ3RoICUgNCAhPSAwKSB7CisJCQlORF9QUklOVCgobmRvLCAiXG5cdFx0bGVuZ3RoICV1ICE9IE4geCA0Iiwgc3VidGx2X2xlbmd0aCkpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQorCQkgICAgaWYgKHN1YnRsdl9sZW5ndGggPiAzNikgeworCQkJTkRfUFJJTlQoKG5kbywgIlxuXHRcdGxlbmd0aCAldSA+IDM2Iiwgc3VidGx2X2xlbmd0aCkpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQogICAgICAgICAgICAgICAgICAgICAvKiBkZWNvZGUgQkNzIHVudGlsIHRoZSBzdWJUTFYgZW5kcyAqLwogICAgICAgICAgICAgICAgICAgICBmb3IgKHRlX2NsYXNzID0gMDsgdGVfY2xhc3MgPCAoc3VidGx2X2xlbmd0aC00KS80OyB0ZV9jbGFzcysrKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cis0K3RlX2NsYXNzKjQpOwpAQCAtMzY0LDE0ICs0MDIsMjcgQEAKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9URV9NRVRSSUM6CisJCSAgICBpZiAoc3VidGx2X2xlbmd0aCAhPSA0KSB7CisJCQlORF9QUklOVCgobmRvLCAiICE9IDQiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIE1ldHJpYyAldSIsIEVYVFJBQ1RfMzJCSVRTKHRwdHIpKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTFNfT1BBUVVFX1RFX0xJTktfU1VCVExWX0xJTktfUFJPVEVDVElPTl9UWVBFOgotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCAlcywgUHJpb3JpdHkgJXUiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgYml0dG9rMnN0cihnbXBsc19saW5rX3Byb3RfdmFsdWVzLCAibm9uZSIsICp0cHRyKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICoodHB0ciArIDEpKSk7CisJCSAgICAvKiBQcm90ZWN0aW9uIENhcCAoMSBvY3RldCkgKyBSZXNlcnZlZCAoKDMgb2N0ZXRzKSAqLworCQkgICAgaWYgKHN1YnRsdl9sZW5ndGggIT0gNCkgeworCQkJTkRfUFJJTlQoKG5kbywgIiAhPSA0IikpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQorICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCAlcyIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJpdHRvazJzdHIoZ21wbHNfbGlua19wcm90X3ZhbHVlcywgIm5vbmUiLCAqdHB0cikpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgY2FzZSBMU19PUEFRVUVfVEVfTElOS19TVUJUTFZfSU5URl9TV19DQVBfREVTQ1I6CisJCSAgICBpZiAoc3VidGx2X2xlbmd0aCA8IDM2KSB7CisJCQlORF9QUklOVCgobmRvLCAiIDwgMzYiKSk7CisJCQlnb3RvIGludmFsaWQ7CisJCSAgICB9CisJCSAgICAvKiBTd2l0Y2hpbmcgQ2FwICgxIG9jdGV0KSArIEVuY29kaW5nICgxKSArICBSZXNlcnZlZCAoMikgKi8KICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdEludGVyZmFjZSBTd2l0Y2hpbmcgQ2FwYWJpbGl0eTogJXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihnbXBsc19zd2l0Y2hfY2FwX3ZhbHVlcywgIlVua25vd24iLCAqKHRwdHIpKSkpOwogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0TFNQIEVuY29kaW5nOiAlc1xuXHRcdE1heCBMU1AgQmFuZHdpZHRoOiIsCkBAIC0zODQsMTIgKzQzNSwyMCBAQAogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIGNhc2UgTFNfT1BBUVVFX1RFX0xJTktfU1VCVExWX0xJTktfVFlQRToKKwkJICAgIGlmIChzdWJ0bHZfbGVuZ3RoICE9IDEpIHsKKwkJCU5EX1BSSU5UKChuZG8sICIgIT0gMSIpKTsKKwkJCWdvdG8gaW52YWxpZDsKKwkJICAgIH0KICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXMgKCV1KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKGxzYV9vcGFxdWVfdGVfdGx2X2xpbmtfdHlwZV9zdWJfdGx2X3ZhbHVlcywidW5rbm93biIsKnRwdHIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKnRwdHIpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9URV9MSU5LX1NVQlRMVl9TSEFSRURfUklTS19HUk9VUDoKKwkJICAgIGlmIChzdWJ0bHZfbGVuZ3RoICUgNCAhPSAwKSB7CisJCQlORF9QUklOVCgobmRvLCAiICE9IE4geCA0IikpOworCQkJZ290byBpbnZhbGlkOworCQkgICAgfQogICAgICAgICAgICAgICAgICAgICBjb3VudF9zcmxnID0gc3VidGx2X2xlbmd0aCAvIDQ7CiAgICAgICAgICAgICAgICAgICAgIGlmIChjb3VudF9zcmxnICE9IDApCiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0ICBTaGFyZWQgcmlzayBncm91cDogIikpOwpAQCAtNDQ1LDYgKzUwNCw5IEBACiAgICAgcmV0dXJuIDA7CiB0cnVuYzoKICAgICByZXR1cm4gLTE7CitpbnZhbGlkOgorICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKKyAgICByZXR1cm4gLTE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTUwNiwxNiArNTY4LDE2IEBACiAKIC8qIGRyYWZ0LWlldGYtb3NwZi1tdC0wOSAqLwogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgb3NwZl90b3BvbG9neV92YWx1ZXNbXSA9IHsKLSAgICB7IDAsICJkZWZhdWx0ICIgfSwKLSAgICB7IDEsICJtdWx0aWNhc3QgIiB9LAotICAgIHsgMiwgIm1hbmFnZW1lbnQgIiB9LAorICAgIHsgMCwgImRlZmF1bHQiIH0sCisgICAgeyAxLCAibXVsdGljYXN0IiB9LAorICAgIHsgMiwgIm1hbmFnZW1lbnQiIH0sCiAgICAgeyAwLCBOVUxMIH0KIH07CiAKIC8qCiAgKiBQcmludCBhbGwgdGhlIHBlci10b3BvbG9neSBtZXRyaWNzLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogb3NwZl9wcmludF90b3NfbWV0cmljcyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5pb24gdW5fdG9zICp0b3MpCiB7CkBAIC01MjgsOSArNTkwLDEwIEBACiAgICAgLyoKICAgICAgKiBBbGwgYnV0IHRoZSBmaXJzdCBtZXRyaWMgY29udGFpbiBhIHZhbGlkIHRvcG9sb2d5IGlkLgogICAgICAqLwotICAgIHdoaWxlICh0b3Njb3VudCkgewotICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0dG9wb2xvZ3kgJXMoJXUpLCBtZXRyaWMgJXUiLAotICAgICAgICAgICAgICAgdG9rMnN0cihvc3BmX3RvcG9sb2d5X3ZhbHVlcywgIiIsCisgICAgd2hpbGUgKHRvc2NvdW50ID4gMCkgeworICAgICAgICBORF9UQ0hFQ0soKnRvcyk7CisgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHR0b3BvbG9neSAlcyAoJXUpLCBtZXRyaWMgJXUiLAorICAgICAgICAgICAgICAgdG9rMnN0cihvc3BmX3RvcG9sb2d5X3ZhbHVlcywgIlVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICBtZXRyaWNfY291bnQgPyB0b3MtPm1ldHJpY3MudG9zX3R5cGUgOiAwKSwKICAgICAgICAgICAgICAgIG1ldHJpY19jb3VudCA/IHRvcy0+bWV0cmljcy50b3NfdHlwZSA6IDAsCiAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUygmdG9zLT5tZXRyaWNzLnRvc19tZXRyaWMpKSk7CkBAIC01MzgsNiArNjAxLDkgQEAKICAgICAgICAgdG9zKys7CiAgICAgICAgIHRvc2NvdW50LS07CiAgICAgfQorICAgIHJldHVybiAwOwordHJ1bmM6CisgICAgcmV0dXJuIDE7CiB9CiAKIC8qCkBAIC01NTksMTEgKzYyNSwxMSBAQAogCXJlZ2lzdGVyIGludCBsc19sZW5ndGg7CiAJY29uc3QgdWludDhfdCAqdHB0cjsKIAotCXRwdHIgPSAodWludDhfdCAqKWxzYXAtPmxzYV91bi51bl91bmtub3duOyAvKiBzcXVlbGNoIGNvbXBpbGVyIHdhcm5pbmdzICovCisJdHB0ciA9IChjb25zdCB1aW50OF90ICopbHNhcC0+bHNhX3VuLnVuX3Vua25vd247IC8qIHNxdWVsY2ggY29tcGlsZXIgd2FybmluZ3MgKi8KICAgICAgICAgbHNfbGVuZ3RoID0gb3NwZl9wcmludF9sc2hkcihuZG8sICZsc2FwLT5sc19oZHIpOwogICAgICAgICBpZiAobHNfbGVuZ3RoID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybihOVUxMKTsKLQlsc19lbmQgPSAodWludDhfdCAqKWxzYXAgKyBsc19sZW5ndGg7CisJbHNfZW5kID0gKGNvbnN0IHVpbnQ4X3QgKilsc2FwICsgbHNfbGVuZ3RoOwogCWxzX2xlbmd0aCAtPSBzaXplb2Yoc3RydWN0IGxzYV9oZHIpOwogCiAJc3dpdGNoIChsc2FwLT5sc19oZHIubHNfdHlwZSkgewpAQCAtNjExLDkgKzY3NywxMCBAQAogCQkJCXJldHVybiAobHNfZW5kKTsKIAkJCX0KIAotCQkJb3NwZl9wcmludF90b3NfbWV0cmljcyhuZG8sICZybHAtPnVuX3Rvcyk7CisJCQlpZiAob3NwZl9wcmludF90b3NfbWV0cmljcyhuZG8sICZybHAtPnVuX3RvcykpCisJCQkJZ290byB0cnVuYzsKIAotCQkJcmxwID0gKHN0cnVjdCBybGFsaW5rICopKCh1X2NoYXIgKikocmxwICsgMSkgKworCQkJcmxwID0gKGNvbnN0IHN0cnVjdCBybGFsaW5rICopKChjb25zdCB1X2NoYXIgKikocmxwICsgMSkgKwogCQkJICAgICgocmxwLT51bl90b3MubGluay5saW5rX3Rvc19jb3VudCkgKiBzaXplb2YodW5pb24gdW5fdG9zKSkpOwogCQl9CiAJCWJyZWFrOwpAQCAtNjIzLDcgKzY5MCw3IEBACiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICAgIE1hc2sgJXNcblx0ICAgIENvbm5lY3RlZCBSb3V0ZXJzOiIsCiAJCSAgICBpcGFkZHJfc3RyaW5nKG5kbywgJmxzYXAtPmxzYV91bi51bl9ubGEubmxhX21hc2spKSk7CiAJCWFwID0gbHNhcC0+bHNhX3VuLnVuX25sYS5ubGFfcm91dGVyOwotCQl3aGlsZSAoKHVfY2hhciAqKWFwIDwgbHNfZW5kKSB7CisJCXdoaWxlICgoY29uc3QgdV9jaGFyICopYXAgPCBsc19lbmQpIHsKIAkJCU5EX1RDSEVDSygqYXApOwogCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICAlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCBhcCkpKTsKIAkJCSsrYXA7CkBAIC02MzYsMTQgKzcwMywxNCBAQAogCQkgICAgaXBhZGRyX3N0cmluZyhuZG8sICZsc2FwLT5sc2FfdW4udW5fc2xhLnNsYV9tYXNrKSkpOwogCQlORF9UQ0hFQ0sobHNhcC0+bHNhX3VuLnVuX3NsYS5zbGFfdG9zbWV0cmljKTsKIAkJbHAgPSBsc2FwLT5sc2FfdW4udW5fc2xhLnNsYV90b3NtZXRyaWM7Ci0JCXdoaWxlICgodV9jaGFyICopbHAgPCBsc19lbmQpIHsKKwkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilscCA8IGxzX2VuZCkgewogCQkJcmVnaXN0ZXIgdWludDMyX3QgdWw7CiAKIAkJCU5EX1RDSEVDSygqbHApOwogCQkJdWwgPSBFWFRSQUNUXzMyQklUUyhscCk7CiAgICAgICAgICAgICAgICAgICAgICAgICB0b3BvbG9neSA9ICh1bCAmIFNMQV9NQVNLX1RPUykgPj4gU0xBX1NISUZUX1RPUzsKLQkJCU5EX1BSSU5UKChuZG8sICJcblx0XHR0b3BvbG9neSAlcygldSkgbWV0cmljICVkIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG9zcGZfdG9wb2xvZ3lfdmFsdWVzLCAiIiwgdG9wb2xvZ3kpLAorCQkJTkRfUFJJTlQoKG5kbywgIlxuXHRcdHRvcG9sb2d5ICVzICgldSkgbWV0cmljICVkIiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKG9zcGZfdG9wb2xvZ3lfdmFsdWVzLCAiVW5rbm93biIsIHRvcG9sb2d5KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b3BvbG9neSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bCAmIFNMQV9NQVNLX01FVFJJQykpOwogCQkJKytscDsKQEAgLTY1MywxNCArNzIwLDE0IEBACiAJY2FzZSBMU19UWVBFX1NVTV9BQlI6CiAJCU5EX1RDSEVDSyhsc2FwLT5sc2FfdW4udW5fc2xhLnNsYV90b3NtZXRyaWMpOwogCQlscCA9IGxzYXAtPmxzYV91bi51bl9zbGEuc2xhX3Rvc21ldHJpYzsKLQkJd2hpbGUgKCh1X2NoYXIgKilscCA8IGxzX2VuZCkgeworCQl3aGlsZSAoKGNvbnN0IHVfY2hhciAqKWxwIDwgbHNfZW5kKSB7CiAJCQlyZWdpc3RlciB1aW50MzJfdCB1bDsKIAogCQkJTkRfVENIRUNLKCpscCk7CiAJCQl1bCA9IEVYVFJBQ1RfMzJCSVRTKGxwKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5ID0gKHVsICYgU0xBX01BU0tfVE9TKSA+PiBTTEFfU0hJRlRfVE9TOwotCQkJTkRfUFJJTlQoKG5kbywgIlxuXHRcdHRvcG9sb2d5ICVzKCV1KSBtZXRyaWMgJWQiLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIob3NwZl90b3BvbG9neV92YWx1ZXMsICIiLCB0b3BvbG9neSksCisJCQlORF9QUklOVCgobmRvLCAiXG5cdFx0dG9wb2xvZ3kgJXMgKCV1KSBtZXRyaWMgJWQiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIob3NwZl90b3BvbG9neV92YWx1ZXMsICJVbmtub3duIiwgdG9wb2xvZ3kpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVsICYgU0xBX01BU0tfTUVUUklDKSk7CiAJCQkrK2xwOwpAQCAtNjc1LDE0ICs3NDIsMTQgQEAKIAogCQlORF9UQ0hFQ0sobHNhcC0+bHNhX3VuLnVuX3NsYS5zbGFfdG9zbWV0cmljKTsKIAkJYWxtcCA9IGxzYXAtPmxzYV91bi51bl9hc2xhLmFzbGFfbWV0cmljOwotCQl3aGlsZSAoKHVfY2hhciAqKWFsbXAgPCBsc19lbmQpIHsKKwkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilhbG1wIDwgbHNfZW5kKSB7CiAJCQlyZWdpc3RlciB1aW50MzJfdCB1bDsKIAogCQkJTkRfVENIRUNLKGFsbXAtPmFzbGFfdG9zbWV0cmljKTsKIAkJCXVsID0gRVhUUkFDVF8zMkJJVFMoJmFsbXAtPmFzbGFfdG9zbWV0cmljKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5ID0gKCh1bCAmIEFTTEFfTUFTS19UT1MpID4+IEFTTEFfU0hJRlRfVE9TKTsKLQkJCU5EX1BSSU5UKChuZG8sICJcblx0XHR0b3BvbG9neSAlcygldSksIHR5cGUgJWQsIG1ldHJpYyIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihvc3BmX3RvcG9sb2d5X3ZhbHVlcywgIiIsIHRvcG9sb2d5KSwKKwkJCU5EX1BSSU5UKChuZG8sICJcblx0XHR0b3BvbG9neSAlcyAoJXUpLCB0eXBlICVkLCBtZXRyaWMiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIob3NwZl90b3BvbG9neV92YWx1ZXMsICJVbmtub3duIiwgdG9wb2xvZ3kpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvcG9sb2d5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bCAmIEFTTEFfRkxBR19FWFRFUk5BTCkgPyAyIDogMSkpOwogCQkJaWYgKCh1bCAmIEFTTEFfTUFTS19NRVRSSUMpID09IDB4ZmZmZmZmKQpAQCAtNzA1LDcgKzc3Miw3IEBACiAJY2FzZSBMU19UWVBFX0dST1VQOgogCQkvKiBNdWx0aWNhc3QgZXh0ZW5zaW9ucyBhcyBvZiAyMyBKdWx5IDE5OTEgKi8KIAkJbWNwID0gbHNhcC0+bHNhX3VuLnVuX21jbGE7Ci0JCXdoaWxlICgodV9jaGFyICopbWNwIDwgbHNfZW5kKSB7CisJCXdoaWxlICgoY29uc3QgdV9jaGFyICopbWNwIDwgbHNfZW5kKSB7CiAJCQlORF9UQ0hFQ0sobWNwLT5tY2xhX3ZpZCk7CiAJCQlzd2l0Y2ggKEVYVFJBQ1RfMzJCSVRTKCZtY3AtPm1jbGFfdnR5cGUpKSB7CiAKQEAgLTczNCw3ICs4MDEsNyBAQAogCiAJICAgIHN3aXRjaCAoKigmbHNhcC0+bHNfaGRyLnVuX2xzYV9pZC5vcGFxdWVfZmllbGQub3BhcXVlX3R5cGUpKSB7CiAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9UWVBFX1JJOgotCQl0cHRyID0gKHVpbnQ4X3QgKikoJmxzYXAtPmxzYV91bi51bl9yaV90bHYudHlwZSk7CisJCXRwdHIgPSAoY29uc3QgdWludDhfdCAqKSgmbHNhcC0+bHNhX3VuLnVuX3JpX3Rsdi50eXBlKTsKIAogCQl3aGlsZSAobHNfbGVuZ3RoICE9IDApIHsKICAgICAgICAgICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgNCk7CkBAIC03ODIsMTQgKzg0OSwxNCBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAgICBjYXNlIExTX09QQVFVRV9UWVBFX0dSQUNFOgotICAgICAgICAgICAgICAgIGlmIChvc3BmX3ByaW50X2dyYWNlX2xzYShuZG8sICh1aW50OF90ICopKCZsc2FwLT5sc2FfdW4udW5fZ3JhY2VfdGx2LnR5cGUpLAorICAgICAgICAgICAgICAgIGlmIChvc3BmX3ByaW50X2dyYWNlX2xzYShuZG8sIChjb25zdCB1aW50OF90ICopKCZsc2FwLT5sc2FfdW4udW5fZ3JhY2VfdGx2LnR5cGUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsc19sZW5ndGgpID09IC0xKSB7CiAgICAgICAgICAgICAgICAgICAgIHJldHVybihsc19lbmQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKIAogCSAgICBjYXNlIExTX09QQVFVRV9UWVBFX1RFOgotICAgICAgICAgICAgICAgIGlmIChvc3BmX3ByaW50X3RlX2xzYShuZG8sICh1aW50OF90ICopKCZsc2FwLT5sc2FfdW4udW5fdGVfbHNhX3Rsdi50eXBlKSwKKyAgICAgICAgICAgICAgICBpZiAob3NwZl9wcmludF90ZV9sc2EobmRvLCAoY29uc3QgdWludDhfdCAqKSgmbHNhcC0+bHNhX3VuLnVuX3RlX2xzYV90bHYudHlwZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxzX2xlbmd0aCkgPT0gLTEpIHsKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuKGxzX2VuZCk7CiAgICAgICAgICAgICAgICAgfQpAQCAtNzk3LDcgKzg2NCw3IEBACiAKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKCFwcmludF91bmtub3duX2RhdGEobmRvLCAodWludDhfdCAqKWxzYXAtPmxzYV91bi51bl91bmtub3duLAorICAgICAgICAgICAgICAgICAgICBpZiAoIXByaW50X3Vua25vd25fZGF0YShuZG8sIChjb25zdCB1aW50OF90ICopbHNhcC0+bHNhX3VuLnVuX3Vua25vd24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlxuXHQgICAgIiwgbHNfbGVuZ3RoKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybihsc19lbmQpOwogICAgICAgICAgICAgICAgIH0KQEAgLTgwNyw3ICs4NzQsNyBAQAogCiAgICAgICAgIC8qIGRvIHdlIHdhbnQgdG8gc2VlIGFuIGFkZGl0aW9uYWxseSBoZXhkdW1wID8gKi8KICAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnPiAxKQotICAgICAgICAgICAgaWYgKCFwcmludF91bmtub3duX2RhdGEobmRvLCAodWludDhfdCAqKWxzYXAtPmxzYV91bi51bl91bmtub3duLAorICAgICAgICAgICAgaWYgKCFwcmludF91bmtub3duX2RhdGEobmRvLCAoY29uc3QgdWludDhfdCAqKWxzYXAtPmxzYV91bi51bl91bmtub3duLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiXG5cdCAgICAiLCBsc19sZW5ndGgpKSB7CiAgICAgICAgICAgICAgICAgcmV0dXJuKGxzX2VuZCk7CiAgICAgICAgICAgICB9CkBAIC04NDUsOCArOTEyLDggQEAKIAogICAgIC8qIGRpZyBkZWVwZXIgaWYgTExTIGRhdGEgaXMgYXZhaWxhYmxlOyBzZWUgUkZDNDgxMyAqLwogICAgIGxlbmd0aDIgPSBFWFRSQUNUXzE2QklUUygmb3AtPm9zcGZfbGVuKTsKLSAgICBkcHRyID0gKHVfY2hhciAqKW9wICsgbGVuZ3RoMjsKLSAgICBkYXRhZW5kID0gKHVfY2hhciAqKW9wICsgbGVuZ3RoOworICAgIGRwdHIgPSAoY29uc3QgdV9jaGFyICopb3AgKyBsZW5ndGgyOworICAgIGRhdGFlbmQgPSAoY29uc3QgdV9jaGFyICopb3AgKyBsZW5ndGg7CiAKICAgICBpZiAoRVhUUkFDVF8xNkJJVFMoJm9wLT5vc3BmX2F1dGh0eXBlKSA9PSBPU1BGX0FVVEhfTUQ1KSB7CiAgICAgICAgIGRwdHIgPSBkcHRyICsgb3AtPm9zcGZfYXV0aGRhdGFbM107CkBAIC05MjksNiArOTk2LDcgQEAKIAkJYnJlYWs7CiAKIAljYXNlIE9TUEZfVFlQRV9IRUxMTzoKKwkJTkRfVENIRUNLKG9wLT5vc3BmX2hlbGxvLmhlbGxvX29wdGlvbnMpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdE9wdGlvbnMgWyVzXSIsCiAJCSAgICAgICAgICBiaXR0b2syc3RyKG9zcGZfb3B0aW9uX3ZhbHVlcywibm9uZSIsb3AtPm9zcGZfaGVsbG8uaGVsbG9fb3B0aW9ucykpKTsKIApAQCAtOTUwLDkgKzEwMTgsOSBAQAogCQkJICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmb3AtPm9zcGZfaGVsbG8uaGVsbG9fYmRyKSkpOwogCiAJCWFwID0gb3AtPm9zcGZfaGVsbG8uaGVsbG9fbmVpZ2hib3I7Ci0JCWlmICgodV9jaGFyICopYXAgPCBkYXRhZW5kKQorCQlpZiAoKGNvbnN0IHVfY2hhciAqKWFwIDwgZGF0YWVuZCkKIAkJCU5EX1BSSU5UKChuZG8sICJcblx0ICBOZWlnaGJvciBMaXN0OiIpKTsKLQkJd2hpbGUgKCh1X2NoYXIgKilhcCA8IGRhdGFlbmQpIHsKKwkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilhcCA8IGRhdGFlbmQpIHsKIAkJCU5EX1RDSEVDSygqYXApOwogCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgJXMiLCBpcGFkZHJfc3RyaW5nKG5kbywgYXApKSk7CiAJCQkrK2FwOwpAQCAtOTc1LDE0ICsxMDQzLDE0IEBACiAKIAkJLyogUHJpbnQgYWxsIHRoZSBMUyBhZHYncyAqLwogCQlsc2hwID0gb3AtPm9zcGZfZGIuZGJfbHNoZHI7Ci0JCXdoaWxlICgoKHVfY2hhciAqKWxzaHAgPCBkYXRhZW5kKSAmJiBvc3BmX3ByaW50X2xzaGRyKG5kbywgbHNocCkgIT0gLTEpIHsKKwkJd2hpbGUgKCgoY29uc3QgdV9jaGFyICopbHNocCA8IGRhdGFlbmQpICYmIG9zcGZfcHJpbnRfbHNoZHIobmRvLCBsc2hwKSAhPSAtMSkgewogCQkJKytsc2hwOwogCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBPU1BGX1RZUEVfTFNfUkVROgogICAgICAgICAgICAgICAgIGxzcnAgPSBvcC0+b3NwZl9sc3I7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKCh1X2NoYXIgKilsc3JwIDwgZGF0YWVuZCkgeworICAgICAgICAgICAgICAgIHdoaWxlICgoY29uc3QgdV9jaGFyICopbHNycCA8IGRhdGFlbmQpIHsKICAgICAgICAgICAgICAgICAgICAgTkRfVENIRUNLKCpsc3JwKTsKIAogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgQWR2ZXJ0aXNpbmcgUm91dGVyOiAlcywgJXMgTFNBICgldSkiLApAQCAtMTA0Nyw3ICsxMTE1LDcgQEAKIAlyZWdpc3RlciBjb25zdCB1X2NoYXIgKmRhdGFlbmQ7CiAJcmVnaXN0ZXIgY29uc3QgY2hhciAqY3A7CiAKLQlvcCA9IChzdHJ1Y3Qgb3NwZmhkciAqKWJwOworCW9wID0gKGNvbnN0IHN0cnVjdCBvc3BmaGRyICopYnA7CiAKIAkvKiBYWFggQmVmb3JlIHdlIGRvIGFueXRoaW5nIGVsc2UsIHN0cmlwIG9mZiB0aGUgTUQ1IHRyYWlsZXIgKi8KIAlORF9UQ0hFQ0sob3AtPm9zcGZfYXV0aHR5cGUpOwpkaWZmIC0tZ2l0IGEvcHJpbnQtb3NwZjYuYyBiL3ByaW50LW9zcGY2LmMKaW5kZXggNDkyMTBiYy4uZThhOWRjNiAxMDA2NDQKLS0tIGEvcHJpbnQtb3NwZjYuYworKysgYi9wcmludC1vc3BmNi5jCkBAIC0yMSwxNiArMjEsMTcgQEAKICAqIE9TUEYgc3VwcG9ydCBjb250cmlidXRlZCBieSBKZWZmcmV5IEhvbmlnIChqY2hAbWl0Y2hlbGwuY2l0LmNvcm5lbGwuZWR1KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElQdjYgT3BlbiBTaG9ydGVzdCBQYXRoIEZpcnN0IChPU1BGdjMpIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtMzg2LDcgKzM4Nyw3IEBACiBvc3BmNl9wcmludF9sc2hkcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBsc2E2X2hkciAqbHNocCwgY29uc3QgdV9jaGFyICpkYXRhZW5kKQogewotCWlmICgodV9jaGFyICopKGxzaHAgKyAxKSA+IGRhdGFlbmQpCisJaWYgKChjb25zdCB1X2NoYXIgKikobHNocCArIDEpID4gZGF0YWVuZCkKIAkJZ290byB0cnVuYzsKIAlORF9UQ0hFQ0sobHNocC0+bHNfdHlwZSk7CiAJTkRfVENIRUNLKGxzaHAtPmxzX3NlcSk7CkBAIC00MDgsNyArNDA5LDcgQEAKIG9zcGY2X3ByaW50X2xzYXByZWZpeChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90ICp0cHRyLCB1X2ludCBsc2FfbGVuZ3RoKQogewotCWNvbnN0IHN0cnVjdCBsc2E2X3ByZWZpeCAqbHNhcHAgPSAoc3RydWN0IGxzYTZfcHJlZml4ICopdHB0cjsKKwljb25zdCBzdHJ1Y3QgbHNhNl9wcmVmaXggKmxzYXBwID0gKGNvbnN0IHN0cnVjdCBsc2E2X3ByZWZpeCAqKXRwdHI7CiAJdV9pbnQgd29yZGxlbjsKIAlzdHJ1Y3QgaW42X2FkZHIgcHJlZml4OwogCkBAIC00ODAsMTAgKzQ4MSwxMCBAQAogCSAqIElmIGl0IGRvZXMsIGZpbmQgdGhlIGxlbmd0aCBvZiB3aGF0IGZvbGxvd3MgdGhlCiAJICogaGVhZGVyLgogCSAqLwotICAgICAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBsc2E2X2hkcikgfHwgKHVfY2hhciAqKWxzYXAgKyBsZW5ndGggPiBkYXRhZW5kKQorICAgICAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBsc2E2X2hkcikgfHwgKGNvbnN0IHVfY2hhciAqKWxzYXAgKyBsZW5ndGggPiBkYXRhZW5kKQogICAgICAgICAJcmV0dXJuICgxKTsKICAgICAgICAgbHNhX2xlbmd0aCA9IGxlbmd0aCAtIHNpemVvZihzdHJ1Y3QgbHNhNl9oZHIpOwotICAgICAgICB0cHRyID0gKHVpbnQ4X3QgKilsc2FwK3NpemVvZihzdHJ1Y3QgbHNhNl9oZHIpOworICAgICAgICB0cHRyID0gKGNvbnN0IHVpbnQ4X3QgKilsc2FwK3NpemVvZihzdHJ1Y3QgbHNhNl9oZHIpOwogCiAJc3dpdGNoIChFWFRSQUNUXzE2QklUUygmbHNhcC0+bHNfaGRyLmxzX3R5cGUpKSB7CiAJY2FzZSBMU19UWVBFX1JPVVRFUiB8IExTX1NDT1BFX0FSRUE6CkBAIC01NjksNyArNTcwLDcgQEAKIAkJTkRfUFJJTlQoKG5kbywgIiwgbWV0cmljICV1IiwKIAkJCUVYVFJBQ1RfMzJCSVRTKCZsc2FwLT5sc2FfdW4udW5faW50ZXJfYXAuaW50ZXJfYXBfbWV0cmljKSAmIFNMQV9NQVNLX01FVFJJQykpOwogCi0JCXRwdHIgPSAodWludDhfdCAqKWxzYXAtPmxzYV91bi51bl9pbnRlcl9hcC5pbnRlcl9hcF9wcmVmaXg7CisJCXRwdHIgPSAoY29uc3QgdWludDhfdCAqKWxzYXAtPmxzYV91bi51bl9pbnRlcl9hcC5pbnRlcl9hcF9wcmVmaXg7CiAJCXdoaWxlIChsc2FfbGVuZ3RoICE9IDApIHsKIAkJCWJ5dGVsZW4gPSBvc3BmNl9wcmludF9sc2FwcmVmaXgobmRvLCB0cHRyLCBsc2FfbGVuZ3RoKTsKIAkJCWlmIChieXRlbGVuIDwgMCkKQEAgLTU5MSw4ICs1OTIsOCBAQAogCQkgICAgICAgRVhUUkFDVF8zMkJJVFMoJmxzYXAtPmxzYV91bi51bl9hc2xhLmFzbGFfbWV0cmljKSAmCiAJCSAgICAgICBBU0xBX01BU0tfTUVUUklDKSk7CiAKLQkJdHB0ciA9ICh1aW50OF90ICopbHNhcC0+bHNhX3VuLnVuX2FzbGEuYXNsYV9wcmVmaXg7Ci0JCWxzYXBwID0gKHN0cnVjdCBsc2E2X3ByZWZpeCAqKXRwdHI7CisJCXRwdHIgPSAoY29uc3QgdWludDhfdCAqKWxzYXAtPmxzYV91bi51bl9hc2xhLmFzbGFfcHJlZml4OworCQlsc2FwcCA9IChjb25zdCBzdHJ1Y3QgbHNhNl9wcmVmaXggKil0cHRyOwogCQlieXRlbGVuID0gb3NwZjZfcHJpbnRfbHNhcHJlZml4KG5kbywgdHB0ciwgbHNhX2xlbmd0aCk7CiAJCWlmIChieXRlbGVuIDwgMCkKIAkJCWdvdG8gdHJ1bmM7CkBAIC02MDAsOSArNjAxLDkgQEAKIAkJdHB0ciArPSBieXRlbGVuOwogCiAJCWlmICgoZmxhZ3MzMiAmIEFTTEFfRkxBR19GV0RBRERSKSAhPSAwKSB7Ci0JCQlzdHJ1Y3QgaW42X2FkZHIgKmZ3ZGFkZHI2OworCQkJY29uc3Qgc3RydWN0IGluNl9hZGRyICpmd2RhZGRyNjsKIAotCQkJZndkYWRkcjYgPSAoc3RydWN0IGluNl9hZGRyICopdHB0cjsKKwkJCWZ3ZGFkZHI2ID0gKGNvbnN0IHN0cnVjdCBpbjZfYWRkciAqKXRwdHI7CiAJCQlpZiAobHNhX2xlbmd0aCA8IHNpemVvZiAoKmZ3ZGFkZHI2KSkKIAkJCQlyZXR1cm4gKDEpOwogCQkJbHNhX2xlbmd0aCAtPSBzaXplb2YgKCpmd2RhZGRyNik7CkBAIC02MTYsOSArNjE3LDkgQEAKIAkJCWlmIChsc2FfbGVuZ3RoIDwgc2l6ZW9mICh1aW50MzJfdCkpCiAJCQkJcmV0dXJuICgxKTsKIAkJCWxzYV9sZW5ndGggLT0gc2l6ZW9mICh1aW50MzJfdCk7Ci0JCQlORF9UQ0hFQ0soKih1aW50MzJfdCAqKXRwdHIpOworCQkJTkRfVENIRUNLKCooY29uc3QgdWludDMyX3QgKil0cHRyKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgdGFnICVzIiwKLQkJCSAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgKHVpbnQzMl90ICopdHB0cikpKTsKKwkJCSAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgKGNvbnN0IHVpbnQzMl90ICopdHB0cikpKTsKIAkJCXRwdHIgKz0gc2l6ZW9mKHVpbnQzMl90KTsKIAkJfQogCkBAIC02MjYsOSArNjI3LDkgQEAKIAkJCWlmIChsc2FfbGVuZ3RoIDwgc2l6ZW9mICh1aW50MzJfdCkpCiAJCQkJcmV0dXJuICgxKTsKIAkJCWxzYV9sZW5ndGggLT0gc2l6ZW9mICh1aW50MzJfdCk7Ci0JCQlORF9UQ0hFQ0soKih1aW50MzJfdCAqKXRwdHIpOworCQkJTkRfVENIRUNLKCooY29uc3QgdWludDMyX3QgKil0cHRyKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgUmVmTFNJRDogJXMiLAotCQkJICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAodWludDMyX3QgKil0cHRyKSkpOworCQkJICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAoY29uc3QgdWludDMyX3QgKil0cHRyKSkpOwogCQkJdHB0ciArPSBzaXplb2YodWludDMyX3QpOwogCQl9CiAJCWJyZWFrOwpAQCAtNjUzLDcgKzY1NCw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgJmxsc2FwLT5sbHNhX2xsYWRkciksCiAgICAgICAgICAgICAgICAgICAgICAgIHByZWZpeGVzKSk7CiAKLQkJdHB0ciA9ICh1aW50OF90ICopbGxzYXAtPmxsc2FfcHJlZml4OworCQl0cHRyID0gKGNvbnN0IHVpbnQ4X3QgKilsbHNhcC0+bGxzYV9wcmVmaXg7CiAJCXdoaWxlIChwcmVmaXhlcyA+IDApIHsKIAkJCWJ5dGVsZW4gPSBvc3BmNl9wcmludF9sc2FwcmVmaXgobmRvLCB0cHRyLCBsc2FfbGVuZ3RoKTsKIAkJCWlmIChieXRlbGVuIDwgMCkKQEAgLTY4MSw3ICs2ODIsNyBAQAogICAgICAgICAgICAgICAgIHByZWZpeGVzID0gRVhUUkFDVF8xNkJJVFMoJmxzYXAtPmxzYV91bi51bl9pbnRyYV9hcC5pbnRyYV9hcF9ucHJlZml4KTsKIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBQcmVmaXhlcyAlZDoiLCBwcmVmaXhlcykpOwogCi0JCXRwdHIgPSAodWludDhfdCAqKWxzYXAtPmxzYV91bi51bl9pbnRyYV9hcC5pbnRyYV9hcF9wcmVmaXg7CisJCXRwdHIgPSAoY29uc3QgdWludDhfdCAqKWxzYXAtPmxzYV91bi51bl9pbnRyYV9hcC5pbnRyYV9hcF9wcmVmaXg7CiAJCXdoaWxlIChwcmVmaXhlcyA+IDApIHsKIAkJCWJ5dGVsZW4gPSBvc3BmNl9wcmludF9sc2FwcmVmaXgobmRvLCB0cHRyLCBsc2FfbGVuZ3RoKTsKIAkJCWlmIChieXRlbGVuIDwgMCkKQEAgLTczMiw3ICs3MzMsNyBAQAogCXN3aXRjaCAob3AtPm9zcGY2X3R5cGUpIHsKIAogCWNhc2UgT1NQRl9UWVBFX0hFTExPOiB7Ci0JCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBoZWxsbzYgKmhlbGxvcCA9IChjb25zdCBzdHJ1Y3QgaGVsbG82ICopKCh1aW50OF90ICopb3AgKyBPU1BGNkhEUl9MRU4pOworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgaGVsbG82ICpoZWxsb3AgPSAoY29uc3Qgc3RydWN0IGhlbGxvNiAqKSgoY29uc3QgdWludDhfdCAqKW9wICsgT1NQRjZIRFJfTEVOKTsKIAogCQlORF9QUklOVCgobmRvLCAiXG5cdE9wdGlvbnMgWyVzXSIsCiAJCSAgICAgICAgICBiaXR0b2syc3RyKG9zcGY2X29wdGlvbl92YWx1ZXMsICJub25lIiwKQEAgLTc1Niw3ICs3NTcsNyBAQAogCQlpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7CiAJCQlORF9QUklOVCgobmRvLCAiXG5cdCAgTmVpZ2hib3IgTGlzdDoiKSk7CiAJCQlhcCA9IGhlbGxvcC0+aGVsbG9fbmVpZ2hib3I7Ci0JCQl3aGlsZSAoKHVfY2hhciAqKWFwIDwgZGF0YWVuZCkgeworCQkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilhcCA8IGRhdGFlbmQpIHsKIAkJCQlORF9UQ0hFQ0soKmFwKTsKIAkJCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCBhcCkpKTsKIAkJCQkrK2FwOwpAQCAtNzY2LDcgKzc2Nyw3IEBACiAJfQogCiAJY2FzZSBPU1BGX1RZUEVfREQ6IHsKLQkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGRkNiAqZGRwID0gKGNvbnN0IHN0cnVjdCBkZDYgKikoKHVpbnQ4X3QgKilvcCArIE9TUEY2SERSX0xFTik7CisJCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBkZDYgKmRkcCA9IChjb25zdCBzdHJ1Y3QgZGQ2ICopKChjb25zdCB1aW50OF90ICopb3AgKyBPU1BGNkhEUl9MRU4pOwogCiAJCU5EX1RDSEVDSyhkZHAtPmRiX29wdGlvbnMpOwogCQlORF9QUklOVCgobmRvLCAiXG5cdE9wdGlvbnMgWyVzXSIsCkBAIC03ODMsNyArNzg0LDcgQEAKIAkJaWYgKG5kby0+bmRvX3ZmbGFnID4gMSkgewogCQkJLyogUHJpbnQgYWxsIHRoZSBMUyBhZHYncyAqLwogCQkJbHNocCA9IGRkcC0+ZGJfbHNoZHI7Ci0JCQl3aGlsZSAoKHVfY2hhciAqKWxzaHAgPCBkYXRhZW5kKSB7CisJCQl3aGlsZSAoKGNvbnN0IHVfY2hhciAqKWxzaHAgPCBkYXRhZW5kKSB7CiAJCQkJaWYgKG9zcGY2X3ByaW50X2xzaGRyKG5kbywgbHNocCsrLCBkYXRhZW5kKSkKIAkJCQkJZ290byB0cnVuYzsKIAkJCX0KQEAgLTc5Myw4ICs3OTQsOCBAQAogCiAJY2FzZSBPU1BGX1RZUEVfTFNfUkVROgogCQlpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7Ci0JCQlsc3JwID0gKGNvbnN0IHN0cnVjdCBsc3I2ICopKCh1aW50OF90ICopb3AgKyBPU1BGNkhEUl9MRU4pOwotCQkJd2hpbGUgKCh1X2NoYXIgKilsc3JwIDwgZGF0YWVuZCkgeworCQkJbHNycCA9IChjb25zdCBzdHJ1Y3QgbHNyNiAqKSgoY29uc3QgdWludDhfdCAqKW9wICsgT1NQRjZIRFJfTEVOKTsKKwkJCXdoaWxlICgoY29uc3QgdV9jaGFyICopbHNycCA8IGRhdGFlbmQpIHsKIAkJCQlORF9UQ0hFQ0soKmxzcnApOwogCQkJCU5EX1BSSU5UKChuZG8sICJcblx0ICBBZHZlcnRpc2luZyBSb3V0ZXIgJXMiLAogCQkJCSAgICAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgJmxzcnAtPmxzX3JvdXRlcikpKTsKQEAgLTgwNywxNSArODA4LDE1IEBACiAKIAljYXNlIE9TUEZfVFlQRV9MU19VUERBVEU6CiAJCWlmIChuZG8tPm5kb192ZmxhZyA+IDEpIHsKLQkJCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBsc3U2ICpsc3VwID0gKGNvbnN0IHN0cnVjdCBsc3U2ICopKCh1aW50OF90ICopb3AgKyBPU1BGNkhEUl9MRU4pOworCQkJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGxzdTYgKmxzdXAgPSAoY29uc3Qgc3RydWN0IGxzdTYgKikoKGNvbnN0IHVpbnQ4X3QgKilvcCArIE9TUEY2SERSX0xFTik7CiAKIAkJCU5EX1RDSEVDSyhsc3VwLT5sc3VfY291bnQpOwogCQkJaSA9IEVYVFJBQ1RfMzJCSVRTKCZsc3VwLT5sc3VfY291bnQpOwogCQkJbHNhcCA9IGxzdXAtPmxzdV9sc2E7Ci0JCQl3aGlsZSAoKHVfY2hhciAqKWxzYXAgPCBkYXRhZW5kICYmIGktLSkgeworCQkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilsc2FwIDwgZGF0YWVuZCAmJiBpLS0pIHsKIAkJCQlpZiAob3NwZjZfcHJpbnRfbHNhKG5kbywgbHNhcCwgZGF0YWVuZCkpCiAJCQkJCWdvdG8gdHJ1bmM7Ci0JCQkJbHNhcCA9IChzdHJ1Y3QgbHNhNiAqKSgodV9jaGFyICopbHNhcCArCisJCQkJbHNhcCA9IChjb25zdCBzdHJ1Y3QgbHNhNiAqKSgoY29uc3QgdV9jaGFyICopbHNhcCArCiAJCQkJICAgIEVYVFJBQ1RfMTZCSVRTKCZsc2FwLT5sc19oZHIubHNfbGVuZ3RoKSk7CiAJCQl9CiAJCX0KQEAgLTgyMyw4ICs4MjQsOCBAQAogCiAJY2FzZSBPU1BGX1RZUEVfTFNfQUNLOgogCQlpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7Ci0JCQlsc2hwID0gKGNvbnN0IHN0cnVjdCBsc2E2X2hkciAqKSgodWludDhfdCAqKW9wICsgT1NQRjZIRFJfTEVOKTsKLQkJCXdoaWxlICgodV9jaGFyICopbHNocCA8IGRhdGFlbmQpIHsKKwkJCWxzaHAgPSAoY29uc3Qgc3RydWN0IGxzYTZfaGRyICopKChjb25zdCB1aW50OF90ICopb3AgKyBPU1BGNkhEUl9MRU4pOworCQkJd2hpbGUgKChjb25zdCB1X2NoYXIgKilsc2hwIDwgZGF0YWVuZCkgewogCQkJCWlmIChvc3BmNl9wcmludF9sc2hkcihuZG8sIGxzaHArKywgZGF0YWVuZCkpCiAJCQkJCWdvdG8gdHJ1bmM7CiAJCQl9CkBAIC05MzEsMTEgKzkzMiwxMSBAQAogCWludCBsbHNfZGQgPSAwOwogCiAJaWYgKG9wLT5vc3BmNl90eXBlID09IE9TUEZfVFlQRV9IRUxMTykgewotCQljb25zdCBzdHJ1Y3QgaGVsbG82ICpoZWxsb3AgPSAoY29uc3Qgc3RydWN0IGhlbGxvNiAqKSgodWludDhfdCAqKW9wICsgT1NQRjZIRFJfTEVOKTsKKwkJY29uc3Qgc3RydWN0IGhlbGxvNiAqaGVsbG9wID0gKGNvbnN0IHN0cnVjdCBoZWxsbzYgKikoKGNvbnN0IHVpbnQ4X3QgKilvcCArIE9TUEY2SERSX0xFTik7CiAJCWlmIChFWFRSQUNUXzMyQklUUygmaGVsbG9wLT5oZWxsb19vcHRpb25zKSAmIE9TUEY2X09QVElPTl9MKQogCQkJbGxzX2hlbGxvID0gMTsKIAl9IGVsc2UgaWYgKG9wLT5vc3BmNl90eXBlID09IE9TUEZfVFlQRV9ERCkgewotCQljb25zdCBzdHJ1Y3QgZGQ2ICpkZHAgPSAoY29uc3Qgc3RydWN0IGRkNiAqKSgodWludDhfdCAqKW9wICsgT1NQRjZIRFJfTEVOKTsKKwkJY29uc3Qgc3RydWN0IGRkNiAqZGRwID0gKGNvbnN0IHN0cnVjdCBkZDYgKikoKGNvbnN0IHVpbnQ4X3QgKilvcCArIE9TUEY2SERSX0xFTik7CiAJCWlmIChFWFRSQUNUXzMyQklUUygmZGRwLT5kYl9vcHRpb25zKSAmIE9TUEY2X09QVElPTl9MKQogCQkJbGxzX2RkID0gMTsKIAl9CkBAIC05NTYsNyArOTU3LDcgQEAKIAlyZWdpc3RlciBjb25zdCBjaGFyICpjcDsKIAl1aW50MTZfdCBkYXRhbGVuOwogCi0Jb3AgPSAoc3RydWN0IG9zcGY2aGRyICopYnA7CisJb3AgPSAoY29uc3Qgc3RydWN0IG9zcGY2aGRyICopYnA7CiAKIAkvKiBJZiB0aGUgdHlwZSBpcyB2YWxpZCB0cmFuc2xhdGUgaXQsIG9yIGp1c3QgcHJpbnQgdGhlIHR5cGUgKi8KIAkvKiB2YWx1ZS4gIElmIGl0J3Mgbm90IHZhbGlkLCBzYXkgc28gYW5kIHJldHVybiAqLwpkaWZmIC0tZ2l0IGEvcHJpbnQtb3R2LmMgYi9wcmludC1vdHYuYwppbmRleCA1M2E3OWRlLi41YTgyNzUyIDEwMDY0NAotLS0gYS9wcmludC1vdHYuYworKysgYi9wcmludC1vdHYuYwpAQCAtMTMsMTQgKzEzLDE3IEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEZyYW5jZXNjbyBGb25kZWxsaSAoZnJhbmNlc2NvIGRvdCBmb25kZWxsaSwgZ21haWwgZG90IGNvbSkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBPdmVybGF5IFRyYW5zcG9ydCBWaXJ0dWFsaXphdGlvbiAoT1RWKSBwcmludGVyICovCisKKy8qIHNwZWNpZmljYXRpb246IGRyYWZ0LWhhc21pdC1vdHYtMDQgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogLyoKQEAgLTM5LDI3ICs0MiwzMSBAQAogb3R2X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW4pCiB7CiAgICAgdWludDhfdCBmbGFnczsKLSAgICB1aW50MzJfdCBvdmVybGF5X2lkOwotICAgIHVpbnQzMl90IGluc3RhbmNlX2lkOwotCi0gICAgaWYgKGxlbiA8IDgpIHsKLSAgICAgICAgTkRfUFJJTlQoKG5kbywgIlt8T1RWXSIpKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLQotICAgIGZsYWdzID0gKmJwOwotICAgIGJwICs9IDE7Ci0KLSAgICBvdmVybGF5X2lkID0gRVhUUkFDVF8yNEJJVFMoYnApOwotICAgIGJwICs9IDM7Ci0KLSAgICBpbnN0YW5jZV9pZCA9IEVYVFJBQ1RfMjRCSVRTKGJwKTsKLSAgICBicCArPSA0OwogCiAgICAgTkRfUFJJTlQoKG5kbywgIk9UViwgIikpOwotICAgIE5EX1BSSU5UKChuZG8sICJmbGFncyBbJXNdICgweCUwMngpLCAiLCBmbGFncyAmIDB4MDggPyAiSSIgOiAiLiIsIGZsYWdzKSk7Ci0gICAgTkRfUFJJTlQoKG5kbywgIm92ZXJsYXkgJXUsICIsIG92ZXJsYXlfaWQpKTsKLSAgICBORF9QUklOVCgobmRvLCAiaW5zdGFuY2UgJXVcbiIsIGluc3RhbmNlX2lkKSk7CisgICAgaWYgKGxlbiA8IDgpCisgICAgICAgIGdvdG8gdHJ1bmM7CiAKLSAgICBldGhlcl9wcmludChuZG8sIGJwLCBsZW4gLSA4LCBsZW4gLSA4LCBOVUxMLCBOVUxMKTsKKyAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICBmbGFncyA9ICpicDsKKyAgICBORF9QUklOVCgobmRvLCAiZmxhZ3MgWyVzXSAoMHglMDJ4KSwgIiwgZmxhZ3MgJiAweDA4ID8gIkkiIDogIi4iLCBmbGFncykpOworICAgIGJwICs9IDE7CisKKyAgICBORF9UQ0hFQ0syKCpicCwgMyk7CisgICAgTkRfUFJJTlQoKG5kbywgIm92ZXJsYXkgJXUsICIsIEVYVFJBQ1RfMjRCSVRTKGJwKSkpOworICAgIGJwICs9IDM7CisKKyAgICBORF9UQ0hFQ0syKCpicCwgMyk7CisgICAgTkRfUFJJTlQoKG5kbywgImluc3RhbmNlICV1XG4iLCBFWFRSQUNUXzI0QklUUyhicCkpKTsKKyAgICBicCArPSAzOworCisgICAgLyogUmVzZXJ2ZWQgKi8KKyAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICBicCArPSAxOworCisgICAgZXRoZXJfcHJpbnQobmRvLCBicCwgbGVuIC0gOCwgbmRvLT5uZG9fc25hcGVuZCAtIGJwLCBOVUxMLCBOVUxMKTsKKyAgICByZXR1cm47CisKK3RydW5jOgorICAgIE5EX1BSSU5UKChuZG8sICIgW3xPVFZdIikpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtcGZsb2cuYyBiL3ByaW50LXBmbG9nLmMKaW5kZXggNzJhZTI3Ni4uMjY1ZWZkMyAxMDA2NDQKLS0tIGEvcHJpbnQtcGZsb2cuYworKysgYi9wcmludC1wZmxvZy5jCkBAIC0xOSw3ICsxOSw4IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IE9wZW5CU0QgcGFja2V0IGZpbHRlciBsb2cgZmlsZSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKQEAgLTMzLDkgKzM0LDkgQEAKICNpbmNsdWRlIDxuZXQvcGZ2YXIuaD4KICNpbmNsdWRlIDxuZXQvaWZfcGZsb2cuaD4KIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfHBmbG9nXSI7CkBAIC0xMjAsNyArMTIxLDcgQEAKIAl9CiAKICNkZWZpbmUgTUlOX1BGTE9HX0hEUkxFTgk0NQotCWhkciA9IChzdHJ1Y3QgcGZsb2doZHIgKilwOworCWhkciA9IChjb25zdCBzdHJ1Y3QgcGZsb2doZHIgKilwOwogCWlmIChoZHItPmxlbmd0aCA8IE1JTl9QRkxPR19IRFJMRU4pIHsKIAkJTkRfUFJJTlQoKG5kbywgIltwZmxvZzogaW52YWxpZCBoZWFkZXIgbGVuZ3RoIV0iKSk7CiAJCXJldHVybiAoaGRyLT5sZW5ndGgpOwkvKiBYWFg6IG5vdCByZWFsbHkgKi8KQEAgLTEzMyw3ICsxMzQsNiBAQAogCX0KIAogCS8qIHByaW50IHdoYXQgd2Uga25vdyAqLwotCWhkciA9IChzdHJ1Y3QgcGZsb2doZHIgKilwOwogCU5EX1RDSEVDSygqaGRyKTsKIAlpZiAobmRvLT5uZG9fZWZsYWcpCiAJCXBmbG9nX3ByaW50KG5kbywgaGRyKTsKZGlmZiAtLWdpdCBhL3ByaW50LXBnbS5jIGIvcHJpbnQtcGdtLmMKaW5kZXggNmE4MzQyNS4uNmQ1YzAxYyAxMDA2NDQKLS0tIGEvcHJpbnQtcGdtLmMKKysrIGIvcHJpbnQtcGdtLmMKQEAgLTEzLDIxICsxMywyMSBAQAogICogT3JpZ2luYWwgY29kZSBieSBBbmR5IEhlZmZlcm5hbiAoYWhoQGp1bmlwZXIubmV0KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFByYWdtYXRpYyBHZW5lcmFsIE11bHRpY2FzdCAoUEdNKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgorI2luY2x1ZGUgImFkZHJ0b3N0ci5oIgogCiAjaW5jbHVkZSAiaXAuaCIKLSNpZmRlZiBJTkVUNgogI2luY2x1ZGUgImlwNi5oIgotI2VuZGlmCiAjaW5jbHVkZSAiaXBwcm90by5oIgogI2luY2x1ZGUgImFmLmgiCiAKQEAgLTE1MSw0MiArMTUxLDI2IEBACiAJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGlwICppcDsKIAlyZWdpc3RlciBjaGFyIGNoOwogCXVpbnQxNl90IHNwb3J0LCBkcG9ydDsKLQlpbnQgYWRkcl9zaXplOwotCWNvbnN0IHZvaWQgKm5sYTsKLQlpbnQgbmxhX2FmOwotI2lmZGVmIElORVQ2CisJdV9pbnQgbmxhX2FmbnVtOwogCWNoYXIgbmxhX2J1ZltJTkVUNl9BRERSU1RSTEVOXTsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2OwotI2Vsc2UKLQljaGFyIG5sYV9idWZbSU5FVF9BRERSU1RSTEVOXTsKLSNlbmRpZgogCXVpbnQ4X3Qgb3B0X3R5cGUsIG9wdF9sZW47CiAJdWludDMyX3Qgc2VxLCBvcHRzX2xlbiwgbGVuLCBvZmZzZXQ7CiAKLQlwZ20gPSAoc3RydWN0IHBnbV9oZWFkZXIgKilicDsKLQlpcCA9IChzdHJ1Y3QgaXAgKilicDI7Ci0jaWZkZWYgSU5FVDYKKwlwZ20gPSAoY29uc3Qgc3RydWN0IHBnbV9oZWFkZXIgKilicDsKKwlpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDI7CiAJaWYgKElQX1YoaXApID09IDYpCi0JCWlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKKwkJaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnAyOwogCWVsc2UKIAkJaXA2ID0gTlVMTDsKLSNlbHNlIC8qIElORVQ2ICovCi0JaWYgKElQX1YoaXApID09IDYpIHsKLQkJTkRfUFJJTlQoKG5kbywgIkNhbid0IGhhbmRsZSBJUHY2IikpOwotCQlyZXR1cm47Ci0JfQotI2VuZGlmIC8qIElORVQ2ICovCiAJY2ggPSAnXDAnOwogCWlmICghTkRfVFRFU1QocGdtLT5wZ21fZHBvcnQpKSB7Ci0jaWZkZWYgSU5FVDYKIAkJaWYgKGlwNikgewogCQkJTkRfUFJJTlQoKG5kbywgIiVzID4gJXM6IFt8cGdtXSIsCiAJCQkJaXA2YWRkcl9zdHJpbmcobmRvLCAmaXA2LT5pcDZfc3JjKSwKIAkJCQlpcDZhZGRyX3N0cmluZyhuZG8sICZpcDYtPmlwNl9kc3QpKSk7CiAJCQlyZXR1cm47Ci0JCX0gZWxzZQotI2VuZGlmIC8qIElORVQ2ICovCi0JCXsKKwkJfSBlbHNlIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyA+ICVzOiBbfHBnbV0iLAogCQkJCWlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX3NyYyksCiAJCQkJaXBhZGRyX3N0cmluZyhuZG8sICZpcC0+aXBfZHN0KSkpOwpAQCAtMTk3LDMwICsxODEsMjcgQEAKIAlzcG9ydCA9IEVYVFJBQ1RfMTZCSVRTKCZwZ20tPnBnbV9zcG9ydCk7CiAJZHBvcnQgPSBFWFRSQUNUXzE2QklUUygmcGdtLT5wZ21fZHBvcnQpOwogCi0jaWZkZWYgSU5FVDYKIAlpZiAoaXA2KSB7CiAJCWlmIChpcDYtPmlwNl9ueHQgPT0gSVBQUk9UT19QR00pIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcy4lcyA+ICVzLiVzOiAiLAogCQkJCWlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X3NyYyksCi0JCQkJdGNwcG9ydF9zdHJpbmcoc3BvcnQpLAorCQkJCXRjcHBvcnRfc3RyaW5nKG5kbywgc3BvcnQpLAogCQkJCWlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X2RzdCksCi0JCQkJdGNwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisJCQkJdGNwcG9ydF9zdHJpbmcobmRvLCBkcG9ydCkpKTsKIAkJfSBlbHNlIHsKIAkJCU5EX1BSSU5UKChuZG8sICIlcyA+ICVzOiAiLAotCQkJCXRjcHBvcnRfc3RyaW5nKHNwb3J0KSwgdGNwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisJCQkJdGNwcG9ydF9zdHJpbmcobmRvLCBzcG9ydCksIHRjcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKSk7CiAJCX0KLQl9IGVsc2UKLSNlbmRpZiAvKklORVQ2Ki8KLQl7CisJfSBlbHNlIHsKIAkJaWYgKGlwLT5pcF9wID09IElQUFJPVE9fUEdNKSB7CiAJCQlORF9QUklOVCgobmRvLCAiJXMuJXMgPiAlcy4lczogIiwKIAkJCQlpcGFkZHJfc3RyaW5nKG5kbywgJmlwLT5pcF9zcmMpLAotCQkJCXRjcHBvcnRfc3RyaW5nKHNwb3J0KSwKKwkJCQl0Y3Bwb3J0X3N0cmluZyhuZG8sIHNwb3J0KSwKIAkJCQlpcGFkZHJfc3RyaW5nKG5kbywgJmlwLT5pcF9kc3QpLAotCQkJCXRjcHBvcnRfc3RyaW5nKGRwb3J0KSkpOworCQkJCXRjcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKSk7CiAJCX0gZWxzZSB7CiAJCQlORF9QUklOVCgobmRvLCAiJXMgPiAlczogIiwKLQkJCQl0Y3Bwb3J0X3N0cmluZyhzcG9ydCksIHRjcHBvcnRfc3RyaW5nKGRwb3J0KSkpOworCQkJCXRjcHBvcnRfc3RyaW5nKG5kbywgc3BvcnQpLCB0Y3Bwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogCQl9CiAJfQogCkBAIC0yNDAsMzIgKzIyMSwyOCBAQAogICAgICAgICAgICAgICAgICAgICAgcGdtLT5wZ21fZ3NpZFs1XSkpOwogCXN3aXRjaCAocGdtLT5wZ21fdHlwZSkgewogCWNhc2UgUEdNX1NQTTogewotCSAgICBzdHJ1Y3QgcGdtX3NwbSAqc3BtOworCSAgICBjb25zdCBzdHJ1Y3QgcGdtX3NwbSAqc3BtOwogCi0JICAgIHNwbSA9IChzdHJ1Y3QgcGdtX3NwbSAqKShwZ20gKyAxKTsKKwkgICAgc3BtID0gKGNvbnN0IHN0cnVjdCBwZ21fc3BtICopKHBnbSArIDEpOwogCSAgICBORF9UQ0hFQ0soKnNwbSk7CisJICAgIGJwID0gKGNvbnN0IHVfY2hhciAqKSAoc3BtICsgMSk7CiAKIAkgICAgc3dpdGNoIChFWFRSQUNUXzE2QklUUygmc3BtLT5wZ21zX25sYV9hZmkpKSB7CiAJICAgIGNhc2UgQUZOVU1fSU5FVDoKLQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKLQkJbmxhX2FmID0gQUZfSU5FVDsKKwkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQlhZGRydG9zdHIoYnAsIG5sYV9idWYsIHNpemVvZihubGFfYnVmKSk7CisJCWJwICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJICAgIGNhc2UgQUZOVU1fSU5FVDY6Ci0JCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwotCQlubGFfYWYgPSBBRl9JTkVUNjsKKwkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJYWRkcnRvc3RyNihicCwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKKwkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJCWJyZWFrOwotI2VuZGlmCiAJICAgIGRlZmF1bHQ6CiAJCWdvdG8gdHJ1bmM7CiAJCWJyZWFrOwogCSAgICB9Ci0JICAgIGJwID0gKHVfY2hhciAqKSAoc3BtICsgMSk7Ci0JICAgIE5EX1RDSEVDSzIoKmJwLCBhZGRyX3NpemUpOwotCSAgICBubGEgPSBicDsKLQkgICAgYnAgKz0gYWRkcl9zaXplOwogCi0JICAgIGluZXRfbnRvcChubGFfYWYsIG5sYSwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlNQTSBzZXEgJXUgdHJhaWwgJXUgbGVhZCAldSBubGEgJXMiLAogCQkJIEVYVFJBQ1RfMzJCSVRTKCZzcG0tPnBnbXNfc2VxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUygmc3BtLT5wZ21zX3RyYWlsc2VxKSwKQEAgLTI3NSw0NCArMjUyLDM5IEBACiAJfQogCiAJY2FzZSBQR01fUE9MTDogewotCSAgICBzdHJ1Y3QgcGdtX3BvbGwgKnBvbGw7CisJICAgIGNvbnN0IHN0cnVjdCBwZ21fcG9sbCAqcG9sbF9tc2c7CiAKLQkgICAgcG9sbCA9IChzdHJ1Y3QgcGdtX3BvbGwgKikocGdtICsgMSk7Ci0JICAgIE5EX1RDSEVDSygqcG9sbCk7CisJICAgIHBvbGxfbXNnID0gKGNvbnN0IHN0cnVjdCBwZ21fcG9sbCAqKShwZ20gKyAxKTsKKwkgICAgTkRfVENIRUNLKCpwb2xsX21zZyk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJQT0xMIHNlcSAldSByb3VuZCAldSIsCi0JCQkgRVhUUkFDVF8zMkJJVFMoJnBvbGwtPnBnbXBfc2VxKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUygmcG9sbC0+cGdtcF9yb3VuZCkpKTsKLQkgICAgYnAgPSAodV9jaGFyICopIChwb2xsICsgMSk7CisJCQkgRVhUUkFDVF8zMkJJVFMoJnBvbGxfbXNnLT5wZ21wX3NlcSksCisgICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMoJnBvbGxfbXNnLT5wZ21wX3JvdW5kKSkpOworCSAgICBicCA9IChjb25zdCB1X2NoYXIgKikgKHBvbGxfbXNnICsgMSk7CiAJICAgIGJyZWFrOwogCX0KIAljYXNlIFBHTV9QT0xSOiB7Ci0JICAgIHN0cnVjdCBwZ21fcG9sciAqcG9scjsKKwkgICAgY29uc3Qgc3RydWN0IHBnbV9wb2xyICpwb2xyOwogCSAgICB1aW50MzJfdCBpdmwsIHJuZCwgbWFzazsKIAotCSAgICBwb2xyID0gKHN0cnVjdCBwZ21fcG9sciAqKShwZ20gKyAxKTsKKwkgICAgcG9sciA9IChjb25zdCBzdHJ1Y3QgcGdtX3BvbHIgKikocGdtICsgMSk7CiAJICAgIE5EX1RDSEVDSygqcG9scik7CisJICAgIGJwID0gKGNvbnN0IHVfY2hhciAqKSAocG9sciArIDEpOwogCiAJICAgIHN3aXRjaCAoRVhUUkFDVF8xNkJJVFMoJnBvbHItPnBnbXBfbmxhX2FmaSkpIHsKIAkgICAgY2FzZSBBRk5VTV9JTkVUOgotCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwotCQlubGFfYWYgPSBBRl9JTkVUOworCQlORF9UQ0hFQ0syKCpicCwgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKSk7CisJCWFkZHJ0b3N0cihicCwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKKwkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAkgICAgY2FzZSBBRk5VTV9JTkVUNjoKLQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7Ci0JCW5sYV9hZiA9IEFGX0lORVQ2OworCQlORF9UQ0hFQ0syKCpicCwgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpOworCQlhZGRydG9zdHI2KGJwLCBubGFfYnVmLCBzaXplb2YobmxhX2J1ZikpOworCQlicCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAkgICAgZGVmYXVsdDoKIAkJZ290byB0cnVuYzsKIAkJYnJlYWs7CiAJICAgIH0KLQkgICAgYnAgPSAodV9jaGFyICopIChwb2xyICsgMSk7Ci0JICAgIE5EX1RDSEVDSzIoKmJwLCBhZGRyX3NpemUpOwotCSAgICBubGEgPSBicDsKLQkgICAgYnAgKz0gYWRkcl9zaXplOwotCi0JICAgIGluZXRfbnRvcChubGFfYWYsIG5sYSwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKIAogCSAgICBORF9UQ0hFQ0syKCpicCwgc2l6ZW9mKHVpbnQzMl90KSk7CiAJICAgIGl2bCA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsKQEAgLTMzMiw0MyArMzA0LDM4IEBACiAJICAgIGJyZWFrOwogCX0KIAljYXNlIFBHTV9PREFUQTogewotCSAgICBzdHJ1Y3QgcGdtX2RhdGEgKm9kYXRhOworCSAgICBjb25zdCBzdHJ1Y3QgcGdtX2RhdGEgKm9kYXRhOwogCi0JICAgIG9kYXRhID0gKHN0cnVjdCBwZ21fZGF0YSAqKShwZ20gKyAxKTsKKwkgICAgb2RhdGEgPSAoY29uc3Qgc3RydWN0IHBnbV9kYXRhICopKHBnbSArIDEpOwogCSAgICBORF9UQ0hFQ0soKm9kYXRhKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIk9EQVRBIHRyYWlsICV1IHNlcSAldSIsCiAJCQkgRVhUUkFDVF8zMkJJVFMoJm9kYXRhLT5wZ21kX3RyYWlsc2VxKSwKIAkJCSBFWFRSQUNUXzMyQklUUygmb2RhdGEtPnBnbWRfc2VxKSkpOwotCSAgICBicCA9ICh1X2NoYXIgKikgKG9kYXRhICsgMSk7CisJICAgIGJwID0gKGNvbnN0IHVfY2hhciAqKSAob2RhdGEgKyAxKTsKIAkgICAgYnJlYWs7CiAJfQogCiAJY2FzZSBQR01fUkRBVEE6IHsKLQkgICAgc3RydWN0IHBnbV9kYXRhICpyZGF0YTsKKwkgICAgY29uc3Qgc3RydWN0IHBnbV9kYXRhICpyZGF0YTsKIAotCSAgICByZGF0YSA9IChzdHJ1Y3QgcGdtX2RhdGEgKikocGdtICsgMSk7CisJICAgIHJkYXRhID0gKGNvbnN0IHN0cnVjdCBwZ21fZGF0YSAqKShwZ20gKyAxKTsKIAkgICAgTkRfVENIRUNLKCpyZGF0YSk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJSREFUQSB0cmFpbCAldSBzZXEgJXUiLAogCQkJIEVYVFJBQ1RfMzJCSVRTKCZyZGF0YS0+cGdtZF90cmFpbHNlcSksCiAJCQkgRVhUUkFDVF8zMkJJVFMoJnJkYXRhLT5wZ21kX3NlcSkpKTsKLQkgICAgYnAgPSAodV9jaGFyICopIChyZGF0YSArIDEpOworCSAgICBicCA9IChjb25zdCB1X2NoYXIgKikgKHJkYXRhICsgMSk7CiAJICAgIGJyZWFrOwogCX0KIAogCWNhc2UgUEdNX05BSzoKIAljYXNlIFBHTV9OVUxMTkFLOgogCWNhc2UgUEdNX05DRjogewotCSAgICBzdHJ1Y3QgcGdtX25hayAqbmFrOwotCSAgICBjb25zdCB2b2lkICpzb3VyY2UsICpncm91cDsKLQkgICAgaW50IHNvdXJjZV9hZiwgZ3JvdXBfYWY7Ci0jaWZkZWYgSU5FVDYKKwkgICAgY29uc3Qgc3RydWN0IHBnbV9uYWsgKm5hazsKIAkgICAgY2hhciBzb3VyY2VfYnVmW0lORVQ2X0FERFJTVFJMRU5dLCBncm91cF9idWZbSU5FVDZfQUREUlNUUkxFTl07Ci0jZWxzZQotCSAgICBjaGFyIHNvdXJjZV9idWZbSU5FVF9BRERSU1RSTEVOXSwgZ3JvdXBfYnVmW0lORVRfQUREUlNUUkxFTl07Ci0jZW5kaWYKIAotCSAgICBuYWsgPSAoc3RydWN0IHBnbV9uYWsgKikocGdtICsgMSk7CisJICAgIG5hayA9IChjb25zdCBzdHJ1Y3QgcGdtX25hayAqKShwZ20gKyAxKTsKIAkgICAgTkRfVENIRUNLKCpuYWspOworCSAgICBicCA9IChjb25zdCB1X2NoYXIgKikgKG5hayArIDEpOwogCiAJICAgIC8qCiAJICAgICAqIFNraXAgcGFzdCB0aGUgc291cmNlLCBzYXZpbmcgaW5mbyBhbG9uZyB0aGUgd2F5CkBAIC0zNzYsNTMgKzM0Myw0NCBAQAogCSAgICAgKi8KIAkgICAgc3dpdGNoIChFWFRSQUNUXzE2QklUUygmbmFrLT5wZ21uX3NvdXJjZV9hZmkpKSB7CiAJICAgIGNhc2UgQUZOVU1fSU5FVDoKLQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKLQkJc291cmNlX2FmID0gQUZfSU5FVDsKKwkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQlhZGRydG9zdHIoYnAsIHNvdXJjZV9idWYsIHNpemVvZihzb3VyY2VfYnVmKSk7CisJCWJwICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJICAgIGNhc2UgQUZOVU1fSU5FVDY6Ci0JCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwotCQlzb3VyY2VfYWYgPSBBRl9JTkVUNjsKKwkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJYWRkcnRvc3RyNihicCwgc291cmNlX2J1Ziwgc2l6ZW9mKHNvdXJjZV9idWYpKTsKKwkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJCWJyZWFrOwotI2VuZGlmCiAJICAgIGRlZmF1bHQ6CiAJCWdvdG8gdHJ1bmM7CiAJCWJyZWFrOwogCSAgICB9Ci0JICAgIGJwID0gKHVfY2hhciAqKSAobmFrICsgMSk7Ci0JICAgIE5EX1RDSEVDSzIoKmJwLCBhZGRyX3NpemUpOwotCSAgICBzb3VyY2UgPSBicDsKLQkgICAgYnAgKz0gYWRkcl9zaXplOwogCiAJICAgIC8qCiAJICAgICAqIFNraXAgcGFzdCB0aGUgZ3JvdXAsIHNhdmluZyBpbmZvIGFsb25nIHRoZSB3YXkKIAkgICAgICogYW5kIHN0b3BwaW5nIGlmIHdlIGRvbid0IGhhdmUgZW5vdWdoLgogCSAgICAgKi8KKwkgICAgYnAgKz0gKDIgKiBzaXplb2YodWludDE2X3QpKTsKIAkgICAgc3dpdGNoIChFWFRSQUNUXzE2QklUUyhicCkpIHsKIAkgICAgY2FzZSBBRk5VTV9JTkVUOgotCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwotCQlncm91cF9hZiA9IEFGX0lORVQ7CisJCU5EX1RDSEVDSzIoKmJwLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJYWRkcnRvc3RyKGJwLCBncm91cF9idWYsIHNpemVvZihncm91cF9idWYpKTsKKwkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAkgICAgY2FzZSBBRk5VTV9JTkVUNjoKLQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7Ci0JCWdyb3VwX2FmID0gQUZfSU5FVDY7CisJCU5EX1RDSEVDSzIoKmJwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCWFkZHJ0b3N0cjYoYnAsIGdyb3VwX2J1Ziwgc2l6ZW9mKGdyb3VwX2J1ZikpOworCQlicCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKIAkJYnJlYWs7Ci0jZW5kaWYKIAkgICAgZGVmYXVsdDoKIAkJZ290byB0cnVuYzsKIAkJYnJlYWs7CiAJICAgIH0KLQkgICAgYnAgKz0gKDIgKiBzaXplb2YodWludDE2X3QpKTsKLQkgICAgTkRfVENIRUNLMigqYnAsIGFkZHJfc2l6ZSk7Ci0JICAgIGdyb3VwID0gYnA7Ci0JICAgIGJwICs9IGFkZHJfc2l6ZTsKIAogCSAgICAvKgogCSAgICAgKiBPcHRpb25zIGRlY29kaW5nIGNhbiBnbyBoZXJlLgogCSAgICAgKi8KLQkgICAgaW5ldF9udG9wKHNvdXJjZV9hZiwgc291cmNlLCBzb3VyY2VfYnVmLCBzaXplb2Yoc291cmNlX2J1ZikpOwotCSAgICBpbmV0X250b3AoZ3JvdXBfYWYsIGdyb3VwLCBncm91cF9idWYsIHNpemVvZihncm91cF9idWYpKTsKIAkgICAgc3dpdGNoIChwZ20tPnBnbV90eXBlKSB7CiAJCWNhc2UgUEdNX05BSzoKIAkJICAgIE5EX1BSSU5UKChuZG8sICJOQUsgIikpOwpAQCAtNDQyLDEzICs0MDAsMTMgQEAKIAl9CiAKIAljYXNlIFBHTV9BQ0s6IHsKLQkgICAgc3RydWN0IHBnbV9hY2sgKmFjazsKKwkgICAgY29uc3Qgc3RydWN0IHBnbV9hY2sgKmFjazsKIAotCSAgICBhY2sgPSAoc3RydWN0IHBnbV9hY2sgKikocGdtICsgMSk7CisJICAgIGFjayA9IChjb25zdCBzdHJ1Y3QgcGdtX2FjayAqKShwZ20gKyAxKTsKIAkgICAgTkRfVENIRUNLKCphY2spOwogCSAgICBORF9QUklOVCgobmRvLCAiQUNLIHNlcSAldSIsCiAJCQkgRVhUUkFDVF8zMkJJVFMoJmFjay0+cGdtYV9yeF9tYXhfc2VxKSkpOwotCSAgICBicCA9ICh1X2NoYXIgKikgKGFjayArIDEpOworCSAgICBicCA9IChjb25zdCB1X2NoYXIgKikgKGFjayArIDEpOwogCSAgICBicmVhazsKIAl9CiAKQEAgLTYwMSwzMyArNTU5LDM1IEBACiAKIAkJY2FzZSBQR01fT1BUX1JFRElSRUNUOgogCQkgICAgYnAgKz0gMjsKLQkJICAgIHN3aXRjaCAoRVhUUkFDVF8xNkJJVFMoYnApKSB7CisJCSAgICBubGFfYWZudW0gPSBFWFRSQUNUXzE2QklUUyhicCk7CisJCSAgICBicCArPSAoMiAqIHNpemVvZih1aW50MTZfdCkpOworCQkgICAgc3dpdGNoIChubGFfYWZudW0pIHsKIAkJICAgIGNhc2UgQUZOVU1fSU5FVDoKLQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7Ci0JCQlubGFfYWYgPSBBRl9JTkVUOworCQkJaWYgKG9wdF9sZW4gIT0gNCArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCSAgICBORF9QUklOVCgobmRvLCAiW0JhZCBPUFRfUkVESVJFQ1Qgb3B0aW9uLCBsZW5ndGggJXUgIT0gNCArIGFkZHJlc3Mgc2l6ZV0iLCBvcHRfbGVuKSk7CisJCQkgICAgcmV0dXJuOworCQkJfQorCQkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQkJYWRkcnRvc3RyKGJwLCBubGFfYnVmLCBzaXplb2YobmxhX2J1ZikpOworCQkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKwkJCW9wdHNfbGVuIC09IDQgKyBzaXplb2Yoc3RydWN0IGluX2FkZHIpOwogCQkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAkJICAgIGNhc2UgQUZOVU1fSU5FVDY6Ci0JCQlhZGRyX3NpemUgPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKLQkJCW5sYV9hZiA9IEFGX0lORVQ2OworCQkJaWYgKG9wdF9sZW4gIT0gNCArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisJCQkgICAgTkRfUFJJTlQoKG5kbywgIltCYWQgT1BUX1JFRElSRUNUIG9wdGlvbiwgbGVuZ3RoICV1ICE9IDQgKyBhZGRyZXNzIHNpemVdIiwgb3B0X2xlbikpOworCQkJICAgIHJldHVybjsKKwkJCX0KKwkJCU5EX1RDSEVDSzIoKmJwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlhZGRydG9zdHI2KGJwLCBubGFfYnVmLCBzaXplb2YobmxhX2J1ZikpOworCQkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisJCQlvcHRzX2xlbiAtPSA0ICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJCQlicmVhazsKLSNlbmRpZgogCQkgICAgZGVmYXVsdDoKIAkJCWdvdG8gdHJ1bmM7CiAJCQlicmVhazsKIAkJICAgIH0KLQkJICAgIGJwICs9ICgyICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCSAgICBpZiAob3B0X2xlbiAhPSA0ICsgYWRkcl9zaXplKSB7Ci0JCQlORF9QUklOVCgobmRvLCAiW0JhZCBPUFRfUkVESVJFQ1Qgb3B0aW9uLCBsZW5ndGggJXUgIT0gNCArIGFkZHJlc3Mgc2l6ZV0iLCBvcHRfbGVuKSk7Ci0JCQlyZXR1cm47Ci0JCSAgICB9Ci0JCSAgICBORF9UQ0hFQ0syKCpicCwgYWRkcl9zaXplKTsKLQkJICAgIG5sYSA9IGJwOwotCQkgICAgYnAgKz0gYWRkcl9zaXplOwogCi0JCSAgICBpbmV0X250b3AobmxhX2FmLCBubGEsIG5sYV9idWYsIHNpemVvZihubGFfYnVmKSk7Ci0JCSAgICBORF9QUklOVCgobmRvLCAiIFJFRElSRUNUICVzIiwgIChjaGFyICopbmxhKSk7Ci0JCSAgICBvcHRzX2xlbiAtPSA0ICsgYWRkcl9zaXplOworCQkgICAgTkRfUFJJTlQoKG5kbywgIiBSRURJUkVDVCAlcyIsICBubGFfYnVmKSk7CiAJCSAgICBicmVhazsKIAogCQljYXNlIFBHTV9PUFRfUEFSSVRZX1BSTToKQEAgLTczMiw2NiArNjkyLDcwIEBACiAJCSAgICBicCArPSAyOwogCQkgICAgb2Zmc2V0ID0gRVhUUkFDVF8zMkJJVFMoYnApOwogCQkgICAgYnAgKz0gc2l6ZW9mKHVpbnQzMl90KTsKLQkJICAgIHN3aXRjaCAoRVhUUkFDVF8xNkJJVFMoYnApKSB7CisJCSAgICBubGFfYWZudW0gPSBFWFRSQUNUXzE2QklUUyhicCk7CisJCSAgICBicCArPSAoMiAqIHNpemVvZih1aW50MTZfdCkpOworCQkgICAgc3dpdGNoIChubGFfYWZudW0pIHsKIAkJICAgIGNhc2UgQUZOVU1fSU5FVDoKLQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7Ci0JCQlubGFfYWYgPSBBRl9JTkVUOworCQkJaWYgKG9wdF9sZW4gIT0gMTIgKyBzaXplb2Yoc3RydWN0IGluX2FkZHIpKSB7CisJCQkgICAgTkRfUFJJTlQoKG5kbywgIltCYWQgT1BUX1BHTUNDX0RBVEEgb3B0aW9uLCBsZW5ndGggJXUgIT0gMTIgKyBhZGRyZXNzIHNpemVdIiwgb3B0X2xlbikpOworCQkJICAgIHJldHVybjsKKwkJCX0KKwkJCU5EX1RDSEVDSzIoKmJwLCBzaXplb2Yoc3RydWN0IGluX2FkZHIpKTsKKwkJCWFkZHJ0b3N0cihicCwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKKwkJCWJwICs9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CisJCQlvcHRzX2xlbiAtPSAxMiArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJCQlicmVhazsKLSNpZmRlZiBJTkVUNgogCQkgICAgY2FzZSBBRk5VTV9JTkVUNjoKLQkJCWFkZHJfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwotCQkJbmxhX2FmID0gQUZfSU5FVDY7CisJCQlpZiAob3B0X2xlbiAhPSAxMiArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKSB7CisJCQkgICAgTkRfUFJJTlQoKG5kbywgIltCYWQgT1BUX1BHTUNDX0RBVEEgb3B0aW9uLCBsZW5ndGggJXUgIT0gMTIgKyBhZGRyZXNzIHNpemVdIiwgb3B0X2xlbikpOworCQkJICAgIHJldHVybjsKKwkJCX0KKwkJCU5EX1RDSEVDSzIoKmJwLCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSk7CisJCQlhZGRydG9zdHI2KGJwLCBubGFfYnVmLCBzaXplb2YobmxhX2J1ZikpOworCQkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CisJCQlvcHRzX2xlbiAtPSAxMiArIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogCQkJYnJlYWs7Ci0jZW5kaWYKIAkJICAgIGRlZmF1bHQ6CiAJCQlnb3RvIHRydW5jOwogCQkJYnJlYWs7CiAJCSAgICB9Ci0JCSAgICBicCArPSAoMiAqIHNpemVvZih1aW50MTZfdCkpOwotCQkgICAgaWYgKG9wdF9sZW4gIT0gMTIgKyBhZGRyX3NpemUpIHsKLQkJCU5EX1BSSU5UKChuZG8sICJbQmFkIE9QVF9QR01DQ19EQVRBIG9wdGlvbiwgbGVuZ3RoICV1ICE9IDEyICsgYWRkcmVzcyBzaXplXSIsIG9wdF9sZW4pKTsKLQkJCXJldHVybjsKLQkJICAgIH0KLQkJICAgIE5EX1RDSEVDSzIoKmJwLCBhZGRyX3NpemUpOwotCQkgICAgbmxhID0gYnA7Ci0JCSAgICBicCArPSBhZGRyX3NpemU7CiAKLQkJICAgIGluZXRfbnRvcChubGFfYWYsIG5sYSwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKLQkJICAgIE5EX1BSSU5UKChuZG8sICIgUEdNQ0MgREFUQSAldSAlcyIsIG9mZnNldCwgKGNoYXIqKW5sYSkpOwotCQkgICAgb3B0c19sZW4gLT0gMTY7CisJCSAgICBORF9QUklOVCgobmRvLCAiIFBHTUNDIERBVEEgJXUgJXMiLCBvZmZzZXQsIG5sYV9idWYpKTsKIAkJICAgIGJyZWFrOwogCiAJCWNhc2UgUEdNX09QVF9QR01DQ19GRUVEQkFDSzoKIAkJICAgIGJwICs9IDI7CiAJCSAgICBvZmZzZXQgPSBFWFRSQUNUXzMyQklUUyhicCk7CiAJCSAgICBicCArPSBzaXplb2YodWludDMyX3QpOwotCQkgICAgc3dpdGNoIChFWFRSQUNUXzE2QklUUyhicCkpIHsKKwkJICAgIG5sYV9hZm51bSA9IEVYVFJBQ1RfMTZCSVRTKGJwKTsKKwkJICAgIGJwICs9ICgyICogc2l6ZW9mKHVpbnQxNl90KSk7CisJCSAgICBzd2l0Y2ggKG5sYV9hZm51bSkgewogCQkgICAgY2FzZSBBRk5VTV9JTkVUOgotCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKLQkJCW5sYV9hZiA9IEFGX0lORVQ7CisJCQlpZiAob3B0X2xlbiAhPSAxMiArIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpIHsKKwkJCSAgICBORF9QUklOVCgobmRvLCAiW0JhZCBPUFRfUEdNQ0NfREFUQSBvcHRpb24sIGxlbmd0aCAldSAhPSAxMiArIGFkZHJlc3Mgc2l6ZV0iLCBvcHRfbGVuKSk7CisJCQkgICAgcmV0dXJuOworCQkJfQorCQkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW5fYWRkcikpOworCQkJYWRkcnRvc3RyKGJwLCBubGFfYnVmLCBzaXplb2YobmxhX2J1ZikpOworCQkJYnAgKz0gc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKKwkJCW9wdHNfbGVuIC09IDEyICsgc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKTsKIAkJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJCSAgICBjYXNlIEFGTlVNX0lORVQ2OgotCQkJYWRkcl9zaXplID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7Ci0JCQlubGFfYWYgPSBBRl9JTkVUNjsKKwkJCWlmIChvcHRfbGVuICE9IDEyICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcikpIHsKKwkJCSAgICBORF9QUklOVCgobmRvLCAiW0JhZCBPUFRfUEdNQ0NfREFUQSBvcHRpb24sIGxlbmd0aCAldSAhPSAxMiArIGFkZHJlc3Mgc2l6ZV0iLCBvcHRfbGVuKSk7CisJCQkgICAgcmV0dXJuOworCQkJfQorCQkJTkRfVENIRUNLMigqYnAsIHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKTsKKwkJCWFkZHJ0b3N0cjYoYnAsIG5sYV9idWYsIHNpemVvZihubGFfYnVmKSk7CisJCQlicCArPSBzaXplb2Yoc3RydWN0IGluNl9hZGRyKTsKKwkJCW9wdHNfbGVuIC09IDEyICsgc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJCQlicmVhazsKLSNlbmRpZgogCQkgICAgZGVmYXVsdDoKIAkJCWdvdG8gdHJ1bmM7CiAJCQlicmVhazsKIAkJICAgIH0KLQkJICAgIGJwICs9ICgyICogc2l6ZW9mKHVpbnQxNl90KSk7Ci0JCSAgICBpZiAob3B0X2xlbiAhPSAxMiArIGFkZHJfc2l6ZSkgewotCQkJTkRfUFJJTlQoKG5kbywgIltCYWQgT1BUX1BHTUNDX0ZFRURCQUNLIG9wdGlvbiwgbGVuZ3RoICV1ICE9IDEyICsgYWRkcmVzcyBzaXplXSIsIG9wdF9sZW4pKTsKLQkJCXJldHVybjsKLQkJICAgIH0KLQkJICAgIE5EX1RDSEVDSzIoKmJwLCBhZGRyX3NpemUpOwotCQkgICAgbmxhID0gYnA7Ci0JCSAgICBicCArPSBhZGRyX3NpemU7CiAKLQkJICAgIGluZXRfbnRvcChubGFfYWYsIG5sYSwgbmxhX2J1Ziwgc2l6ZW9mKG5sYV9idWYpKTsKLQkJICAgIE5EX1BSSU5UKChuZG8sICIgUEdNQ0MgRkVFREJBQ0sgJXUgJXMiLCBvZmZzZXQsIChjaGFyKilubGEpKTsKLQkJICAgIG9wdHNfbGVuIC09IDE2OworCQkgICAgTkRfUFJJTlQoKG5kbywgIiBQR01DQyBGRUVEQkFDSyAldSAlcyIsIG9mZnNldCwgbmxhX2J1ZikpOwogCQkgICAgYnJlYWs7CiAKIAkJZGVmYXVsdDoKZGlmZiAtLWdpdCBhL3ByaW50LXBpbS5jIGIvcHJpbnQtcGltLmMKaW5kZXggMTVmNGM1MS4uMjU1MjU5NSAxMDA2NDQKLS0tIGEvcHJpbnQtcGltLmMKKysrIGIvcHJpbnQtcGltLmMKQEAgLTE5LDE4ICsxOSwyMSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBQcm90b2NvbCBJbmRlcGVuZGVudCBNdWx0aWNhc3QgKFBJTSkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2luY2x1ZGUgImlwLmgiCisjaW5jbHVkZSAiaXA2LmgiCisjaW5jbHVkZSAiaXBwcm90by5oIgogCiAjZGVmaW5lIFBJTVYxX1RZUEVfUVVFUlkgICAgICAgICAgIDAKICNkZWZpbmUgUElNVjFfVFlQRV9SRUdJU1RFUiAgICAgICAgMQpAQCAtMTM0LDcgKzEzNyw3IEBACiAJdV9zaG9ydAlwaW1fY2tzdW07CS8qIElQIHN0eWxlIGNoZWNrIHN1bSAqLwogfTsKIAotc3RhdGljIHZvaWQgcGltdjJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIHJlZ2lzdGVyIHVfaW50IGxlbiwgdV9pbnQgY2tzdW0pOworc3RhdGljIHZvaWQgcGltdjJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIHJlZ2lzdGVyIHVfaW50IGxlbiwgY29uc3QgdV9jaGFyICopOwogCiBzdGF0aWMgdm9pZAogcGltdjFfam9pbl9wcnVuZV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKQEAgLTE1Miw3ICsxNTUsNyBAQAogCQlob2xkID0gRVhUUkFDVF8xNkJJVFMoJmJwWzZdKTsKIAkJaWYgKGhvbGQgIT0gMTgwKSB7CiAJCQlORF9QUklOVCgobmRvLCAiSG9sZCAiKSk7Ci0JCQlyZWx0c19wcmludChuZG8sIGhvbGQpOworCQkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCBob2xkKTsKIAkJfQogCQlORF9QUklOVCgobmRvLCAiJXMgKCVzLyVkLCAlcyIsIG5qb2luID8gIkpvaW4iIDogIlBydW5lIiwKIAkJaXBhZGRyX3N0cmluZyhuZG8sICZicFsyNl0pLCBicFsyNV0gJiAweDNmLApAQCAtMTc0LDcgKzE3Nyw3IEBACiAJaWYgKG5kby0+bmRvX3ZmbGFnID4gMSkKIAkJTkRfUFJJTlQoKG5kbywgIlxuIikpOwogCU5EX1BSSU5UKChuZG8sICIgSG9sZCB0aW1lOiAiKSk7Ci0JcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzE2QklUUygmYnBbNl0pKTsKKwl1bnNpZ25lZF9yZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKCZicFs2XSkpOwogCWlmIChuZG8tPm5kb192ZmxhZyA8IDIpCiAJCXJldHVybjsKIAlicCArPSA4OwpAQCAtMjU5LDcgKzI2Miw3IEBACiAJCWlmIChuZG8tPm5kb192ZmxhZykgewogCQkJTkRfVENIRUNLMihicFsxMF0sMik7CiAJCQlORF9QUklOVCgobmRvLCAiIChIb2xkLXRpbWUgIikpOwotCQkJcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzE2QklUUygmYnBbMTBdKSk7CisJCQl1bnNpZ25lZF9yZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKCZicFsxMF0pKTsKIAkJCU5EX1BSSU5UKChuZG8sICIpIikpOwogCQl9CiAJCWJyZWFrOwpAQCAtMjgxLDcgKzI4NCw3IEBACiAJCQlpZiAoRVhUUkFDVF8zMkJJVFMoJmJwWzEyXSkgIT0gMHhmZmZmZmZmZikKIAkJCQlORF9QUklOVCgobmRvLCAiLyVzIiwgaXBhZGRyX3N0cmluZyhuZG8sICZicFsxMl0pKSk7CiAJCQlORF9QUklOVCgobmRvLCAiIFJQICVzIGhvbGQgIiwgaXBhZGRyX3N0cmluZyhuZG8sICZicFsxNl0pKSk7Ci0JCQlyZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKCZicFsyMl0pKTsKKwkJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoJmJwWzIyXSkpOwogCQl9CiAJCWJyZWFrOwogCWNhc2UgUElNVjFfVFlQRV9BU1NFUlQ6CkBAIC0zNDgsNyArMzUxLDcgQEAKIAlORF9QUklOVCgobmRvLCAiIEhvbGQgIikpOwogCWhvbGQgPSBFWFRSQUNUXzE2QklUUygmYnBbMl0pOwogCWlmIChob2xkKQotCQlyZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKCZicFsyXSkpOworCQl1bnNpZ25lZF9yZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKCZicFsyXSkpOwogCWVsc2UKIAkJTkRfUFJJTlQoKG5kbywgIkZPUkVWRVIiKSk7CiAKQEAgLTQxNSwxMCArNDE4LDEwIEBACiAKIHZvaWQKIHBpbV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCByZWdpc3RlciB1X2ludCBsZW4sIHVfaW50IGNrc3VtKQorICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIHJlZ2lzdGVyIHVfaW50IGxlbiwgY29uc3QgdV9jaGFyICpicDIpCiB7CiAJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICplcDsKLQlyZWdpc3RlciBzdHJ1Y3QgcGltICpwaW0gPSAoc3RydWN0IHBpbSAqKWJwOworCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBwaW0gKnBpbSA9IChjb25zdCBzdHJ1Y3QgcGltICopYnA7CiAKIAllcCA9IChjb25zdCB1X2NoYXIgKiluZG8tPm5kb19zbmFwZW5kOwogCWlmIChicCA+PSBlcCkKQEAgLTQ0MCw3ICs0NDMsNyBAQAogCQkJICAgICAgICAgIFBJTV9WRVIocGltLT5waW1fdHlwZXZlciksCiAJCQkgICAgICAgICAgbGVuLAogCQkJICAgICAgICAgIHRvazJzdHIocGltdjJfdHlwZV92YWx1ZXMsIlVua25vd24gVHlwZSIsUElNX1RZUEUocGltLT5waW1fdHlwZXZlcikpKSk7Ci0JCQlwaW12Ml9wcmludChuZG8sIGJwLCBsZW4sIGNrc3VtKTsKKwkJCXBpbXYyX3ByaW50KG5kbywgYnAsIGxlbiwgYnAyKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgpAQCAtNTM0LDEyICs1MzcsMTAgQEAKIAkJCWFmID0gQUZfSU5FVDsKIAkJCWxlbiA9IHNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAJCQlicmVhazsKLSNpZmRlZiBJTkVUNgogCQljYXNlIDI6CiAJCQlhZiA9IEFGX0lORVQ2OwogCQkJbGVuID0gc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAJCQlicmVhazsKLSNlbmRpZgogCQlkZWZhdWx0OgogCQkJcmV0dXJuIC0xOwogCQl9CkBAIC01NTEsMTEgKzU1Miw5IEBACiAJCWNhc2Ugc2l6ZW9mKHN0cnVjdCBpbl9hZGRyKToKIAkJCWFmID0gQUZfSU5FVDsKIAkJCWJyZWFrOwotI2lmZGVmIElORVQ2CiAJCWNhc2Ugc2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik6CiAJCQlhZiA9IEFGX0lORVQ2OwogCQkJYnJlYWs7Ci0jZW5kaWYKIAkJZGVmYXVsdDoKIAkJCXJldHVybiAtMTsKIAkJCWJyZWFrOwpAQCAtNTcyLDEyICs1NzEsMTAgQEAKIAkJCWlmICghc2lsZW50KQogCQkJCU5EX1BSSU5UKChuZG8sICIlcyIsIGlwYWRkcl9zdHJpbmcobmRvLCBicCkpKTsKIAkJfQotI2lmZGVmIElORVQ2CiAJCWVsc2UgaWYgKGFmID09IEFGX0lORVQ2KSB7CiAJCQlpZiAoIXNpbGVudCkKIAkJCQlORF9QUklOVCgobmRvLCAiJXMiLCBpcDZhZGRyX3N0cmluZyhuZG8sIGJwKSkpOwogCQl9Ci0jZW5kaWYKIAkJcmV0dXJuIGhkcmxlbiArIGxlbjsKIAljYXNlIHBpbXYyX2dyb3VwOgogCWNhc2UgcGltdjJfc291cmNlOgpAQCAtNTg5LDcgKzU4Niw2IEBACiAJCQkJCU5EX1BSSU5UKChuZG8sICIvJXUiLCBicFsxXSkpOwogCQkJfQogCQl9Ci0jaWZkZWYgSU5FVDYKIAkJZWxzZSBpZiAoYWYgPT0gQUZfSU5FVDYpIHsKIAkJCWlmICghc2lsZW50KSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgaXA2YWRkcl9zdHJpbmcobmRvLCBicCArIDIpKSk7CkBAIC01OTcsNyArNTkzLDYgQEAKIAkJCQkJTkRfUFJJTlQoKG5kbywgIi8ldSIsIGJwWzFdKSk7CiAJCQl9CiAJCX0KLSNlbmRpZgogCQlpZiAoYnBbMF0gJiYgIXNpbGVudCkgewogCQkJaWYgKGF0ID09IHBpbXYyX2dyb3VwKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIigweCUwMngpIiwgYnBbMF0pKTsKQEAgLTYyMCwxMyArNjE1LDUwIEBACiAJcmV0dXJuIC0xOwogfQogCitlbnVtIGNoZWNrc3VtX3N0YXR1cyB7CisJQ09SUkVDVCwKKwlJTkNPUlJFQ1QsCisJVU5WRVJJRklFRAorfTsKKworc3RhdGljIGVudW0gY2hlY2tzdW1fc3RhdHVzCitwaW12Ml9jaGVja19jaGVja3N1bShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwKKwkJICAgICBjb25zdCB1X2NoYXIgKmJwMiwgdV9pbnQgbGVuKQoreworCWNvbnN0IHN0cnVjdCBpcCAqaXA7CisJdV9pbnQgY2tzdW07CisKKwlpZiAoIU5EX1RURVNUMihicFswXSwgbGVuKSkgeworCQkvKiBXZSBkb24ndCBoYXZlIGFsbCB0aGUgZGF0YS4gKi8KKwkJcmV0dXJuIChVTlZFUklGSUVEKTsKKwl9CisJaXAgPSAoY29uc3Qgc3RydWN0IGlwICopYnAyOworCWlmIChJUF9WKGlwKSA9PSA0KSB7CisJCXN0cnVjdCBja3N1bV92ZWMgdmVjWzFdOworCisJCXZlY1swXS5wdHIgPSBicDsKKwkJdmVjWzBdLmxlbiA9IGxlbjsKKwkJY2tzdW0gPSBpbl9ja3N1bSh2ZWMsIDEpOworCQlyZXR1cm4gKGNrc3VtID8gSU5DT1JSRUNUIDogQ09SUkVDVCk7CisJfSBlbHNlIGlmIChJUF9WKGlwKSA9PSA2KSB7CisJCWNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7CisKKwkJaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnAyOworCQlja3N1bSA9IG5leHRwcm90bzZfY2tzdW0obmRvLCBpcDYsIGJwLCBsZW4sIGxlbiwgSVBQUk9UT19QSU0pOworCQlyZXR1cm4gKGNrc3VtID8gSU5DT1JSRUNUIDogQ09SUkVDVCk7CisJfSBlbHNlIHsKKwkJcmV0dXJuIChVTlZFUklGSUVEKTsKKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBwaW12Ml9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIHJlZ2lzdGVyIHVfaW50IGxlbiwgdV9pbnQgY2tzdW0pCisgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCByZWdpc3RlciB1X2ludCBsZW4sIGNvbnN0IHVfY2hhciAqYnAyKQogewogCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZXA7Ci0JcmVnaXN0ZXIgc3RydWN0IHBpbSAqcGltID0gKHN0cnVjdCBwaW0gKilicDsKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgcGltICpwaW0gPSAoY29uc3Qgc3RydWN0IHBpbSAqKWJwOwogCWludCBhZHZhbmNlOworCWVudW0gY2hlY2tzdW1fc3RhdHVzIGNrc3VtX3N0YXR1czsKIAogCWVwID0gKGNvbnN0IHVfY2hhciAqKW5kby0+bmRvX3NuYXBlbmQ7CiAJaWYgKGJwID49IGVwKQpAQCAtNjQyLDcgKzY3NCw0MSBAQAogCWlmIChFWFRSQUNUXzE2QklUUygmcGltLT5waW1fY2tzdW0pID09IDApIHsKIAkJTkRfUFJJTlQoKG5kbywgIih1bnZlcmlmaWVkKSIpKTsKIAl9IGVsc2UgewotCQlORF9QUklOVCgobmRvLCAiKCVzY29ycmVjdCkiLCBORF9UVEVTVDIoYnBbMF0sIGxlbikgJiYgY2tzdW0gPyAiaW4iIDogIiIgKSk7CisJCWlmIChQSU1fVFlQRShwaW0tPnBpbV90eXBldmVyKSA9PSBQSU1WMl9UWVBFX1JFR0lTVEVSKSB7CisJCQkvKgorCQkJICogVGhlIGNoZWNrc3VtIG9ubHkgY292ZXJzIHRoZSBwYWNrZXQgaGVhZGVyLAorCQkJICogbm90IHRoZSBlbmNhcHN1bGF0ZWQgcGFja2V0LgorCQkJICovCisJCQlja3N1bV9zdGF0dXMgPSBwaW12Ml9jaGVja19jaGVja3N1bShuZG8sIGJwLCBicDIsIDgpOworCQkJaWYgKGNrc3VtX3N0YXR1cyA9PSBJTkNPUlJFQ1QpIHsKKwkJCQkvKgorCQkJCSAqIFRvIHF1b3RlIFJGQyA0NjAxLCAiRm9yIGludGVyb3BlcmFiaWxpdHkKKwkJCQkgKiByZWFzb25zLCBhIG1lc3NhZ2UgY2FycnlpbmcgYSBjaGVja3N1bQorCQkJCSAqIGNhbGN1bGF0ZWQgb3ZlciB0aGUgZW50aXJlIFBJTSBSZWdpc3RlcgorCQkJCSAqIG1lc3NhZ2Ugc2hvdWxkIGFsc28gYmUgYWNjZXB0ZWQuIgorCQkJCSAqLworCQkJCWNrc3VtX3N0YXR1cyA9IHBpbXYyX2NoZWNrX2NoZWNrc3VtKG5kbywgYnAsIGJwMiwgbGVuKTsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBUaGUgY2hlY2tzdW0gY292ZXJzIHRoZSBlbnRpcmUgcGFja2V0LgorCQkJICovCisJCQlja3N1bV9zdGF0dXMgPSBwaW12Ml9jaGVja19jaGVja3N1bShuZG8sIGJwLCBicDIsIGxlbik7CisJCX0KKwkJc3dpdGNoIChja3N1bV9zdGF0dXMpIHsKKworCQljYXNlIENPUlJFQ1Q6CisJCQlORF9QUklOVCgobmRvLCAiKGNvcnJlY3QpIikpOworCQkJYnJlYWs7CisKKwkJY2FzZSBJTkNPUlJFQ1Q6CisJCQlORF9QUklOVCgobmRvLCAiKGluY29ycmVjdCkiKSk7CisJCQlicmVhazsKKworCQljYXNlIFVOVkVSSUZJRUQ6CisJCQlORF9QUklOVCgobmRvLCAiKHVudmVyaWZpZWQpIikpOworCQkJYnJlYWs7CisJCX0KIAl9CiAKIAlzd2l0Y2ggKFBJTV9UWVBFKHBpbS0+cGltX3R5cGV2ZXIpKSB7CkBAIC02NjMsNyArNzI5LDcgQEAKIAogCQkJc3dpdGNoIChvdHlwZSkgewogCQkJY2FzZSBQSU1WMl9IRUxMT19PUFRJT05fSE9MRFRJTUU6Ci0JCQkJcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzE2QklUUyhicCkpOworCQkJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoYnApKTsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBQSU1WMl9IRUxMT19PUFRJT05fTEFOUFJVTkVERUxBWToKQEAgLTcwNCw3ICs3NzAsNyBAQAogCQkJCU5EX1BSSU5UKChuZG8sICJ2JWQiLCAqYnApKTsKIAkJCQlpZiAoKihicCsxKSAhPSAwKSB7CiAJCQkJCU5EX1BSSU5UKChuZG8sICIsIGludGVydmFsICIpKTsKLQkJCQkJcmVsdHNfcHJpbnQobmRvLCAqKGJwKzEpKTsKKwkJCQkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCAqKGJwKzEpKTsKIAkJCQl9CiAJCQkJaWYgKEVYVFJBQ1RfMTZCSVRTKGJwKzIpICE9IDApIHsKIAkJCQkJTkRfUFJJTlQoKG5kbywgIiA/MHglMDR4PyIsIEVYVFJBQ1RfMTZCSVRTKGJwKzIpKSk7CkBAIC03MTksOCArNzg1LDYgQEAKIAkJCQlpZiAobmRvLT5uZG9fdmZsYWcgPiAxKSB7CiAJCQkJCWNvbnN0IHVfY2hhciAqcHRyID0gYnA7CiAJCQkJCXdoaWxlIChwdHIgPCAoYnArb2xlbikpIHsKLQkJCQkJCWludCBhZHZhbmNlOwotCiAJCQkJCQlORF9QUklOVCgobmRvLCAiXG5cdCAgICAiKSk7CiAJCQkJCQlhZHZhbmNlID0gcGltdjJfYWRkcl9wcmludChuZG8sIHB0ciwgcGltdjJfdW5pY2FzdCwgMCk7CiAJCQkJCQlpZiAoYWR2YW5jZSA8IDApIHsKQEAgLTc0Niw3ICs4MTAsNyBAQAogCiAJY2FzZSBQSU1WMl9UWVBFX1JFR0lTVEVSOgogCXsKLQkJc3RydWN0IGlwICppcDsKKwkJY29uc3Qgc3RydWN0IGlwICppcDsKIAogCQlORF9UQ0hFQ0syKCooYnAgKyA0KSwgUElNVjJfUkVHSVNURVJfRkxBR19MRU4pOwogCkBAIC03NTcsNyArODIxLDcgQEAKIAogCQlicCArPSA4OyBsZW4gLT0gODsKIAkJLyogZW5jYXBzdWxhdGVkIG11bHRpY2FzdCBwYWNrZXQgKi8KLQkJaXAgPSAoc3RydWN0IGlwICopYnA7CisJCWlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWJwOwogCQlzd2l0Y2ggKElQX1YoaXApKSB7CiAgICAgICAgICAgICAgICAgY2FzZSAwOiAvKiBOdWxsIGhlYWRlciAqLwogCQkJTkRfUFJJTlQoKG5kbywgIklQLU51bGwtaGVhZGVyICVzID4gJXMiLApAQCAtODY4LDcgKzkzMiw3IEBACiAJCQlpZiAoaG9sZHRpbWUgPT0gMHhmZmZmKQogCQkJCU5EX1BSSU5UKChuZG8sICJpbmZpbml0ZSIpKTsKIAkJCWVsc2UKLQkJCQlyZWx0c19wcmludChuZG8sIGhvbGR0aW1lKTsKKwkJCQl1bnNpZ25lZF9yZWx0c19wcmludChuZG8sIGhvbGR0aW1lKTsKIAkJfQogCQlicCArPSA0OyBsZW4gLT0gNDsKIAkJZm9yIChpID0gMDsgaSA8IG5ncm91cDsgaSsrKSB7CkBAIC05NzIsNyArMTAzNiw3IEBACiAJCQkJCWdvdG8gYnNfZG9uZTsKIAkJCQl9CiAJCQkJTkRfUFJJTlQoKG5kbywgIixob2xkdGltZT0iKSk7Ci0JCQkJcmVsdHNfcHJpbnQobmRvLCBFWFRSQUNUXzE2QklUUyhicCkpOworCQkJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoYnApKTsKIAkJCQlpZiAoYnAgKyAyID49IGVwKSB7CiAJCQkJCU5EX1BSSU5UKChuZG8sICIuLi4pIikpOwogCQkJCQlnb3RvIGJzX2RvbmU7CkBAIC0xMDI0LDcgKzEwODgsNyBAQAogCQlORF9QUklOVCgobmRvLCAiIHByaW89JWQiLCBicFsxXSkpOwogCQlpZiAoYnAgKyAzID49IGVwKSBicmVhazsKIAkJTkRfUFJJTlQoKG5kbywgIiBob2xkdGltZT0iKSk7Ci0JCXJlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoJmJwWzJdKSk7CisJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoJmJwWzJdKSk7CiAJCWJwICs9IDQ7CiAKIAkJLyogRW5jb2RlZC1VbmljYXN0LVJQLUFkZHJlc3MgKi8KQEAgLTEwNzAsNyArMTEzNCw3IEBACiAJCWJwICs9IGFkdmFuY2U7CiAJCU5EX1RDSEVDSzIoYnBbMF0sIDIpOwogCQlORF9QUklOVCgobmRvLCAiIFRVTlIgIikpOwotCQlyZWx0c19wcmludChuZG8sIEVYVFJBQ1RfMTZCSVRTKGJwKSk7CisJCXVuc2lnbmVkX3JlbHRzX3ByaW50KG5kbywgRVhUUkFDVF8xNkJJVFMoYnApKTsKIAkJYnJlYWs7CiAKIApkaWZmIC0tZ2l0IGEvcHJpbnQtcGt0YXAuYyBiL3ByaW50LXBrdGFwLmMKaW5kZXggNDZhMTg3ZC4uNzE0NGYzYyAxMDA2NDQKLS0tIGEvcHJpbnQtcGt0YXAuYworKysgYi9wcmludC1wa3RhcC5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQXBwbGUncyBETFRfUEtUQVAgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAjaWZkZWYgRExUX1BLVEFQCkBAIC03MSwxNiArNzIsMTggQEAKIHsKIAljb25zdCBwa3RhcF9oZWFkZXJfdCAqaGRyOwogCXVpbnQzMl90IGRsdCwgaGRybGVuOworCWNvbnN0IGNoYXIgKmRsdG5hbWU7CiAKIAloZHIgPSAoY29uc3QgcGt0YXBfaGVhZGVyX3QgKilicDsKIAogCWRsdCA9IEVYVFJBQ1RfTEVfMzJCSVRTKCZoZHItPnBrdF9kbHQpOwogCWhkcmxlbiA9IEVYVFJBQ1RfTEVfMzJCSVRTKCZoZHItPnBrdF9sZW4pOworCWRsdG5hbWUgPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCk7CiAJaWYgKCFuZG8tPm5kb19xZmxhZykgewotCQlORF9QUklOVCgobmRvLCIsIERMVCAlcyAoJWQpIGxlbiAlZCIsCi0JCQkgIHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUoZGx0KSwgZGx0LCBoZHJsZW4pKTsKKwkJTkRfUFJJTlQoKG5kbywiRExUICVzICglZCkgbGVuICVkIiwKKwkJCSAgKGRsdG5hbWUgIT0gTlVMTCA/IGRsdG5hbWUgOiAiVU5LTk9XTiIpLCBkbHQsIGhkcmxlbikpOwogICAgICAgICB9IGVsc2UgewotCQlORF9QUklOVCgobmRvLCIsICVzIiwgcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZShkbHQpKSk7CisJCU5EX1BSSU5UKChuZG8sIiVzIiwgKGRsdG5hbWUgIT0gTlVMTCA/IGRsdG5hbWUgOiAiVU5LTk9XTiIpKSk7CiAgICAgICAgIH0KIAogCU5EX1BSSU5UKChuZG8sICIsIGxlbmd0aCAldTogIiwgbGVuZ3RoKSk7CkBAIC05OSwxNSArMTAyLDE0IEBACiAJdWludDMyX3QgZGx0LCBoZHJsZW4sIHJlY3R5cGU7CiAJdV9pbnQgY2FwbGVuID0gaC0+Y2FwbGVuOwogCXVfaW50IGxlbmd0aCA9IGgtPmxlbjsKLQlpZl9uZG9fcHJpbnRlciBuZG9fcHJpbnRlcjsKLSAgICAgICAgaWZfcHJpbnRlciBwcmludGVyOwotCXBrdGFwX2hlYWRlcl90ICpoZHI7CisJaWZfcHJpbnRlciBwcmludGVyOworCWNvbnN0IHBrdGFwX2hlYWRlcl90ICpoZHI7CiAKIAlpZiAoY2FwbGVuIDwgc2l6ZW9mKHBrdGFwX2hlYWRlcl90KSB8fCBsZW5ndGggPCBzaXplb2YocGt0YXBfaGVhZGVyX3QpKSB7CiAJCU5EX1BSSU5UKChuZG8sICJbfHBrdGFwXSIpKTsKIAkJcmV0dXJuICgwKTsKIAl9Ci0JaGRyID0gKHBrdGFwX2hlYWRlcl90ICopcDsKKwloZHIgPSAoY29uc3QgcGt0YXBfaGVhZGVyX3QgKilwOwogCWRsdCA9IEVYVFJBQ1RfTEVfMzJCSVRTKCZoZHItPnBrdF9kbHQpOwogCWhkcmxlbiA9IEVYVFJBQ1RfTEVfMzJCSVRTKCZoZHItPnBrdF9sZW4pOwogCWlmIChoZHJsZW4gPCBzaXplb2YocGt0YXBfaGVhZGVyX3QpKSB7CkBAIC0xNDIsMTIgKzE0NCwxMCBAQAogCiAJY2FzZSBQS1RfUkVDX1BBQ0tFVDoKIAkJaWYgKChwcmludGVyID0gbG9va3VwX3ByaW50ZXIoZGx0KSkgIT0gTlVMTCkgewotCQkJcHJpbnRlcihoLCBwKTsKLQkJfSBlbHNlIGlmICgobmRvX3ByaW50ZXIgPSBsb29rdXBfbmRvX3ByaW50ZXIoZGx0KSkgIT0gTlVMTCkgewotCQkJbmRvX3ByaW50ZXIobmRvLCBoLCBwKTsKKwkJCWhkcmxlbiArPSBwcmludGVyKG5kbywgaCwgcCk7CiAJCX0gZWxzZSB7CiAJCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJCXBrdGFwX2hlYWRlcl9wcmludChuZG8sICh1X2NoYXIgKiloZHIsCisJCQkJcGt0YXBfaGVhZGVyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWhkciwKIAkJCQkJCWxlbmd0aCArIGhkcmxlbik7CiAKIAkJCWlmICghbmRvLT5uZG9fc3VwcHJlc3NfZGVmYXVsdF9wcmludCkKZGlmZiAtLWdpdCBhL3ByaW50LXBwaS5jIGIvcHJpbnQtcHBpLmMKaW5kZXggYjQwMzUzNi4uNzJjZDFiOCAxMDA2NDQKLS0tIGEvcHJpbnQtcHBpLmMKKysrIGIvcHJpbnQtcHBpLmMKQEAgLTEsMTQgKzEsMTYgQEAKIC8qCiAgKiBPcmFjbGUKICAqLwotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisKKy8qIFxzdW1tYXJ5OiBPcmFjbGUgRExUX1BQSSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHR5cGVkZWYgc3RydWN0IHBwaV9oZWFkZXIgewpAQCAtMjgsNDkgKzMwLDU2IEBACiAJY29uc3QgcHBpX2hlYWRlcl90ICpoZHI7CiAJdWludDE2X3QgbGVuOwogCXVpbnQzMl90IGRsdDsKKwljb25zdCBjaGFyICpkbHRuYW1lOwogCiAJaGRyID0gKGNvbnN0IHBwaV9oZWFkZXJfdCAqKWJwOwogCiAJbGVuID0gRVhUUkFDVF9MRV8xNkJJVFMoJmhkci0+cHBpX2xlbik7CiAJZGx0ID0gRVhUUkFDVF9MRV8zMkJJVFMoJmhkci0+cHBpX2RsdCk7CisJZGx0bmFtZSA9IHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUoZGx0KTsKIAogCWlmICghbmRvLT5uZG9fcWZsYWcpIHsKIAkJTkRfUFJJTlQoKG5kbywgIlYuJWQgRExUICVzICglZCkgbGVuICVkIiwgaGRyLT5wcGlfdmVyLAotCQkJICBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCksIGRsdCwKKwkJCSAgKGRsdG5hbWUgIT0gTlVMTCA/IGRsdG5hbWUgOiAiVU5LTk9XTiIpLCBkbHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlbikpOwogICAgICAgICB9IGVsc2UgewotCQlORF9QUklOVCgobmRvLCAiJXMiLCBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCkpKTsKKwkJTkRfUFJJTlQoKG5kbywgIiVzIiwgKGRsdG5hbWUgIT0gTlVMTCA/IGRsdG5hbWUgOiAiVU5LTk9XTiIpKSk7CiAgICAgICAgIH0KIAogCU5EX1BSSU5UKChuZG8sICIsIGxlbmd0aCAldTogIiwgbGVuZ3RoKSk7CiB9CiAKLXN0YXRpYyB2b2lkCitzdGF0aWMgdV9pbnQKIHBwaV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwgY29uc3QgdV9jaGFyICpwKQogewotCWlmX25kb19wcmludGVyIG5kb19wcmludGVyOwotICAgICAgICBpZl9wcmludGVyIHByaW50ZXI7Ci0JcHBpX2hlYWRlcl90ICpoZHI7CisJaWZfcHJpbnRlciBwcmludGVyOworCWNvbnN0IHBwaV9oZWFkZXJfdCAqaGRyOwogCXVfaW50IGNhcGxlbiA9IGgtPmNhcGxlbjsKIAl1X2ludCBsZW5ndGggPSBoLT5sZW47CiAJdWludDE2X3QgbGVuOwogCXVpbnQzMl90IGRsdDsKKwl1aW50MzJfdCBoZHJsZW47CisJc3RydWN0IHBjYXBfcGt0aGRyIG5oZHI7CiAKIAlpZiAoY2FwbGVuIDwgc2l6ZW9mKHBwaV9oZWFkZXJfdCkpIHsKIAkJTkRfUFJJTlQoKG5kbywgIlt8cHBpXSIpKTsKLQkJcmV0dXJuOworCQlyZXR1cm4gKGNhcGxlbik7CiAJfQogCi0JaGRyID0gKHBwaV9oZWFkZXJfdCAqKXA7CisJaGRyID0gKGNvbnN0IHBwaV9oZWFkZXJfdCAqKXA7CiAJbGVuID0gRVhUUkFDVF9MRV8xNkJJVFMoJmhkci0+cHBpX2xlbik7CisJaWYgKGNhcGxlbiA8IGxlbikgeworCQkvKgorCQkgKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBlbnRpcmUgUFBJIGhlYWRlciwgZG9uJ3QKKwkJICogYm90aGVyLgorCQkgKi8KKwkJTkRfUFJJTlQoKG5kbywgIlt8cHBpXSIpKTsKKwkJcmV0dXJuIChjYXBsZW4pOworCX0KIAlpZiAobGVuIDwgc2l6ZW9mKHBwaV9oZWFkZXJfdCkpIHsKIAkJTkRfUFJJTlQoKG5kbywgIlt8cHBpXSIpKTsKLQkJcmV0dXJuOwotCX0KLQlpZiAoY2FwbGVuIDwgbGVuKSB7Ci0JCU5EX1BSSU5UKChuZG8sICJbfHBwaV0iKSk7Ci0JCXJldHVybjsKKwkJcmV0dXJuIChsZW4pOwogCX0KIAlkbHQgPSBFWFRSQUNUX0xFXzMyQklUUygmaGRyLT5wcGlfZGx0KTsKIApAQCAtODIsMTYgKzkxLDE5IEBACiAJcCArPSBsZW47CiAKIAlpZiAoKHByaW50ZXIgPSBsb29rdXBfcHJpbnRlcihkbHQpKSAhPSBOVUxMKSB7Ci0JCXByaW50ZXIoaCwgcCk7Ci0JfSBlbHNlIGlmICgobmRvX3ByaW50ZXIgPSBsb29rdXBfbmRvX3ByaW50ZXIoZGx0KSkgIT0gTlVMTCkgewotCQluZG9fcHJpbnRlcihuZG8sIGgsIHApOworCQluaGRyID0gKmg7CisJCW5oZHIuY2FwbGVuID0gY2FwbGVuOworCQluaGRyLmxlbiA9IGxlbmd0aDsKKwkJaGRybGVuID0gcHJpbnRlcihuZG8sICZuaGRyLCBwKTsKIAl9IGVsc2UgewogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJcHBpX2hlYWRlcl9wcmludChuZG8sICh1X2NoYXIgKiloZHIsIGxlbmd0aCArIGxlbik7CisJCQlwcGlfaGVhZGVyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWhkciwgbGVuZ3RoICsgbGVuKTsKIAogCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCiAJCQlORF9ERUZBVUxUUFJJTlQocCwgY2FwbGVuKTsKKwkJaGRybGVuID0gMDsKIAl9CisJcmV0dXJuIChsZW4gKyBoZHJsZW4pOwogfQogCiAvKgpAQCAtMTA0LDkgKzExNiw3IEBACiBwcGlfaWZfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKmgsIGNvbnN0IHVfY2hhciAqcCkKIHsKLQlwcGlfcHJpbnQobmRvLCBoLCBwKTsKLQotCXJldHVybiAoc2l6ZW9mKHBwaV9oZWFkZXJfdCkpOworCXJldHVybiAocHBpX3ByaW50KG5kbywgaCwgcCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvcHJpbnQtcHBwLmMgYi9wcmludC1wcHAuYwppbmRleCBlZGMwM2MwLi5lZTgyMzljIDEwMDY0NAotLS0gYS9wcmludC1wcHAuYworKysgYi9wcmludC1wcHAuYwpAQCAtMjIsNiArMjIsOCBAQAogICogY29tcGxldGUgUFBQIHN1cHBvcnQuCiAgKi8KIAorLyogXHN1bW1hcnk6IFBvaW50IHRvIFBvaW50IFByb3RvY29sIChQUFApIHByaW50ZXIgKi8KKwogLyoKICAqIFRPRE86CiAgKiBvIHJlc29sdmUgWFhYIGFzIG11Y2ggYXMgcG9zc2libGUKQEAgLTI5LDEyICszMSwxMSBAQAogICogbyBCQVAgc3VwcG9ydAogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaWZkZWYgX19ic2RpX18KICNpbmNsdWRlIDxuZXQvc2xjb21wcmVzcy5oPgpAQCAtNDMsNyArNDQsNyBAQAogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJwcHAuaCIKQEAgLTk0Myw2ICs5NDQsOSBAQAogCiAJc3dpdGNoIChjb2RlKSB7CiAJY2FzZSBQQVBfQVJFUToKKwkJLyogQSB2YWxpZCBBdXRoZW50aWNhdGUtUmVxdWVzdCBpcyA2IG9yIG1vcmUgb2N0ZXRzIGxvbmcuICovCisJCWlmIChsZW4gPCA2KQorCQkJZ290byB0cnVuYzsKIAkJaWYgKGxlbmd0aCAtIChwIC0gcDApIDwgMSkKIAkJCXJldHVybjsKIAkJTkRfVENIRUNLKCpwKTsKQEAgLTk3MSw2ICs5NzUsMTMgQEAKIAkJYnJlYWs7CiAJY2FzZSBQQVBfQUFDSzoKIAljYXNlIFBBUF9BTkFLOgorCQkvKiBBbHRob3VnaCBzb21lIGltcGxlbWVudGF0aW9ucyBpZ25vcmUgdHJ1bmNhdGlvbiBhdAorCQkgKiB0aGlzIHBvaW50IGFuZCBhdCBsZWFzdCBvbmUgZ2VuZXJhdGVzIGEgdHJ1bmNhdGVkCisJCSAqIHBhY2tldCwgUkZDIDEzMzQgc2VjdGlvbiAyLjIuMiBjbGVhcmx5IHN0YXRlcyB0aGF0CisJCSAqIGJvdGggQUFDSyBhbmQgQU5BSyBhcmUgYXQgbGVhc3QgNSBieXRlcyBsb25nLgorCQkgKi8KKwkJaWYgKGxlbiA8IDUpCisJCQlnb3RvIHRydW5jOwogCQlpZiAobGVuZ3RoIC0gKHAgLSBwMCkgPCAxKQogCQkJcmV0dXJuOwogCQlORF9UQ0hFQ0soKnApOwpAQCAtMTY3MCw2ICsxNjgxLDExIEBACiAJCXJldHVybiAoY2hkbGNfaWZfcHJpbnQobmRvLCBoLCBwKSk7CiAKIAlkZWZhdWx0OgorCQlpZiAoY2FwbGVuIDwgNCkgeworCQkJTkRfUFJJTlQoKG5kbywgIlt8cHBwXSIpKTsKKwkJCXJldHVybiAoY2FwbGVuKTsKKwkJfQorCiAJCWlmIChuZG8tPm5kb19lZmxhZykKIAkJCU5EX1BSSU5UKChuZG8sICIlMDJ4ICUwMnggJWQgIiwgcFswXSwgcFsxXSwgbGVuZ3RoKSk7CiAJCXAgKz0gMjsKZGlmZiAtLWdpdCBhL3ByaW50LXBwcG9lLmMgYi9wcmludC1wcHBvZS5jCmluZGV4IDE2MjRjNWUuLjIzZDlhMjMgMTAwNjQ0Ci0tLSBhL3ByaW50LXBwcG9lLmMKKysrIGIvcHJpbnQtcHBwb2UuYwpAQCAtMjEsMTUgKzIxLDE2IEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEdyZWcgU3RhcmsgPGdzc3RhcmtAbWl0LmVkdT4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBQUFAtb3Zlci1FdGhlcm5ldCAoUFBQb0UpIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCi0jaW5jbHVkZSAiZXh0cmFjdC5oIgkJCS8qIG11c3QgY29tZSBhZnRlciBpbnRlcmZhY2UuaCAqLworI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKIC8qIENvZGVzICovCiBlbnVtIHsKQEAgLTE0Nyw3ICsxNDgsNyBAQAogCQkJLyogcCBwb2ludHMgdG8gdGFnX3ZhbHVlICovCiAKIAkJCWlmICh0YWdfbGVuKSB7Ci0JCQkJdW5zaWduZWQgaXNhc2NpaSA9IDAsIGlzZ2FyYmFnZSA9IDA7CisJCQkJdW5zaWduZWQgYXNjaWlfY291bnQgPSAwLCBnYXJiYWdlX2NvdW50ID0gMDsKIAkJCQljb25zdCB1X2NoYXIgKnY7CiAJCQkJY2hhciB0YWdfc3RyW01BWFRBR1BSSU5UXTsKIAkJCQl1bnNpZ25lZCB0YWdfc3RyX2xlbiA9IDA7CkBAIC0xNTcsMTQgKzE1OCwxNCBAQAogCQkJCWZvciAodiA9IHA7IHYgPCBwICsgdGFnX2xlbiAmJiB0YWdfc3RyX2xlbiA8IE1BWFRBR1BSSU5ULTE7IHYrKykKIAkJCQkJaWYgKCp2ID49IDMyICYmICp2IDwgMTI3KSB7CiAJCQkJCQl0YWdfc3RyW3RhZ19zdHJfbGVuKytdID0gKnY7Ci0JCQkJCQlpc2FzY2lpKys7CisJCQkJCQlhc2NpaV9jb3VudCsrOwogCQkJCQl9IGVsc2UgewogCQkJCQkJdGFnX3N0clt0YWdfc3RyX2xlbisrXSA9ICcuJzsKLQkJCQkJCWlzZ2FyYmFnZSsrOworCQkJCQkJZ2FyYmFnZV9jb3VudCsrOwogCQkJCQl9CiAJCQkJdGFnX3N0clt0YWdfc3RyX2xlbl0gPSAwOwogCi0JCQkJaWYgKGlzYXNjaWkgPiBpc2dhcmJhZ2UpIHsKKwkJCQlpZiAoYXNjaWlfY291bnQgPiBnYXJiYWdlX2NvdW50KSB7CiAJCQkJCU5EX1BSSU5UKChuZG8sICIgWyVzIFwiJSouKnNcIl0iLAogCQkJCQkgICAgICAgdG9rMnN0cihwcHBvZXRhZzJzdHIsICJUQUctMHgleCIsIHRhZ190eXBlKSwKIAkJCQkJICAgICAgIChpbnQpdGFnX3N0cl9sZW4sCmRpZmYgLS1naXQgYS9wcmludC1wcHRwLmMgYi9wcmludC1wcHRwLmMKaW5kZXggYzc3ODY4ZC4uYTRkNzEzZCAxMDA2NDQKLS0tIGEvcHJpbnQtcHB0cC5jCisrKyBiL3ByaW50LXBwdHAuYwpAQCAtMjEsMTQgKzIxLDE1IEBACiAgKiBQUFRQIHN1cHBvcnQgY29udHJpYnV0ZWQgYnkgTW90b25vcmkgU2hpbmRvIChtc2hpbmRvQG1zaGluZG8ubmV0KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFBvaW50LXRvLVBvaW50IFR1bm5lbGxpbmcgUHJvdG9jb2wgKFBQVFApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfHBwdHBdIjsKQEAgLTUxOCw3ICs1MTksNyBAQAogcHB0cF9zY2NycV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX3NjY3JxICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX3NjY3JxICopZGF0OworCWNvbnN0IHN0cnVjdCBwcHRwX21zZ19zY2NycSAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ19zY2NycSAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPnByb3RvX3Zlcik7CiAJcHB0cF9wcm90b192ZXJfcHJpbnQobmRvLCAmcHRyLT5wcm90b192ZXIpOwpAQCAtNTQ2LDcgKzU0Nyw3IEBACiBwcHRwX3NjY3JwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQlzdHJ1Y3QgcHB0cF9tc2dfc2NjcnAgKnB0ciA9IChzdHJ1Y3QgcHB0cF9tc2dfc2NjcnAgKilkYXQ7CisJY29uc3Qgc3RydWN0IHBwdHBfbXNnX3NjY3JwICpwdHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfbXNnX3NjY3JwICopZGF0OwogCiAJTkRfVENIRUNLKHB0ci0+cHJvdG9fdmVyKTsKIAlwcHRwX3Byb3RvX3Zlcl9wcmludChuZG8sICZwdHItPnByb3RvX3Zlcik7CkBAIC01NzcsNyArNTc4LDcgQEAKIHBwdHBfc3RvcGNjcnFfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXN0cnVjdCBwcHRwX21zZ19zdG9wY2NycSAqcHRyID0gKHN0cnVjdCBwcHRwX21zZ19zdG9wY2NycSAqKWRhdDsKKwljb25zdCBzdHJ1Y3QgcHB0cF9tc2dfc3RvcGNjcnEgKnB0ciA9IChjb25zdCBzdHJ1Y3QgcHB0cF9tc2dfc3RvcGNjcnEgKilkYXQ7CiAKIAlORF9UQ0hFQ0socHRyLT5yZWFzb24pOwogCU5EX1BSSU5UKChuZG8sICIgUkVBU09OKCV1IiwgcHRyLT5yZWFzb24pKTsKQEAgLTYxMSw3ICs2MTIsNyBAQAogcHB0cF9zdG9wY2NycF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX3N0b3BjY3JwICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX3N0b3BjY3JwICopZGF0OworCWNvbnN0IHN0cnVjdCBwcHRwX21zZ19zdG9wY2NycCAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ19zdG9wY2NycCAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPnJlc3VsdF9jb2RlKTsKIAlwcHRwX3Jlc3VsdF9jb2RlX3ByaW50KG5kbywgJnB0ci0+cmVzdWx0X2NvZGUsIFBQVFBfQ1RSTF9NU0dfVFlQRV9TdG9wQ0NSUCk7CkBAIC02MjksNyArNjMwLDcgQEAKIHBwdHBfZWNob3JxX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX2VjaG9ycSAqcHRyID0gKHN0cnVjdCBwcHRwX21zZ19lY2hvcnEgKilkYXQ7CisJY29uc3Qgc3RydWN0IHBwdHBfbXNnX2VjaG9ycSAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ19lY2hvcnEgKilkYXQ7CiAKIAlORF9UQ0hFQ0socHRyLT5pZCk7CiAJcHB0cF9pZF9wcmludChuZG8sICZwdHItPmlkKTsKQEAgLTY0NCw3ICs2NDUsNyBAQAogcHB0cF9lY2hvcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQlzdHJ1Y3QgcHB0cF9tc2dfZWNob3JwICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX2VjaG9ycCAqKWRhdDsKKwljb25zdCBzdHJ1Y3QgcHB0cF9tc2dfZWNob3JwICpwdHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfbXNnX2VjaG9ycCAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPmlkKTsKIAlwcHRwX2lkX3ByaW50KG5kbywgJnB0ci0+aWQpOwpAQCAtNjY0LDcgKzY2NSw3IEBACiBwcHRwX29jcnFfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX29jcnEgKnB0ciA9IChzdHJ1Y3QgcHB0cF9tc2dfb2NycSAqKWRhdDsKKwljb25zdCBzdHJ1Y3QgcHB0cF9tc2dfb2NycSAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ19vY3JxICopZGF0OwogCiAJTkRfVENIRUNLKHB0ci0+Y2FsbF9pZCk7CiAJcHB0cF9jYWxsX2lkX3ByaW50KG5kbywgJnB0ci0+Y2FsbF9pZCk7CkBAIC03MDAsNyArNzAxLDcgQEAKIHBwdHBfb2NycF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQlzdHJ1Y3QgcHB0cF9tc2dfb2NycCAqcHRyID0gKHN0cnVjdCBwcHRwX21zZ19vY3JwICopZGF0OworCWNvbnN0IHN0cnVjdCBwcHRwX21zZ19vY3JwICpwdHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfbXNnX29jcnAgKilkYXQ7CiAKIAlORF9UQ0hFQ0socHRyLT5jYWxsX2lkKTsKIAlwcHRwX2NhbGxfaWRfcHJpbnQobmRvLCAmcHRyLT5jYWxsX2lkKTsKQEAgLTczMSw3ICs3MzIsNyBAQAogcHB0cF9pY3JxX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXN0cnVjdCBwcHRwX21zZ19pY3JxICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX2ljcnEgKilkYXQ7CisJY29uc3Qgc3RydWN0IHBwdHBfbXNnX2ljcnEgKnB0ciA9IChjb25zdCBzdHJ1Y3QgcHB0cF9tc2dfaWNycSAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPmNhbGxfaWQpOwogCXBwdHBfY2FsbF9pZF9wcmludChuZG8sICZwdHItPmNhbGxfaWQpOwpAQCAtNzYyLDcgKzc2Myw3IEBACiBwcHRwX2ljcnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX2ljcnAgKnB0ciA9IChzdHJ1Y3QgcHB0cF9tc2dfaWNycCAqKWRhdDsKKwljb25zdCBzdHJ1Y3QgcHB0cF9tc2dfaWNycCAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ19pY3JwICopZGF0OwogCiAJTkRfVENIRUNLKHB0ci0+Y2FsbF9pZCk7CiAJcHB0cF9jYWxsX2lkX3ByaW50KG5kbywgJnB0ci0+Y2FsbF9pZCk7CkBAIC03ODgsNyArNzg5LDcgQEAKIHBwdHBfaWNjbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQlzdHJ1Y3QgcHB0cF9tc2dfaWNjbiAqcHRyID0gKHN0cnVjdCBwcHRwX21zZ19pY2NuICopZGF0OworCWNvbnN0IHN0cnVjdCBwcHRwX21zZ19pY2NuICpwdHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfbXNnX2ljY24gKilkYXQ7CiAKIAlORF9UQ0hFQ0socHRyLT5wZWVyX2NhbGxfaWQpOwogCXBwdHBfcGVlcl9jYWxsX2lkX3ByaW50KG5kbywgJnB0ci0+cGVlcl9jYWxsX2lkKTsKQEAgLTgxMiw3ICs4MTMsNyBAQAogcHB0cF9jY3JxX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXN0cnVjdCBwcHRwX21zZ19jY3JxICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX2NjcnEgKilkYXQ7CisJY29uc3Qgc3RydWN0IHBwdHBfbXNnX2NjcnEgKnB0ciA9IChjb25zdCBzdHJ1Y3QgcHB0cF9tc2dfY2NycSAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPmNhbGxfaWQpOwogCXBwdHBfY2FsbF9pZF9wcmludChuZG8sICZwdHItPmNhbGxfaWQpOwpAQCAtODI4LDcgKzgyOSw3IEBACiBwcHRwX2Nkbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqZGF0KQogewotCXN0cnVjdCBwcHRwX21zZ19jZG4gKnB0ciA9IChzdHJ1Y3QgcHB0cF9tc2dfY2RuICopZGF0OworCWNvbnN0IHN0cnVjdCBwcHRwX21zZ19jZG4gKnB0ciA9IChjb25zdCBzdHJ1Y3QgcHB0cF9tc2dfY2RuICopZGF0OwogCiAJTkRfVENIRUNLKHB0ci0+Y2FsbF9pZCk7CiAJcHB0cF9jYWxsX2lkX3ByaW50KG5kbywgJnB0ci0+Y2FsbF9pZCk7CkBAIC04NTIsNyArODUzLDcgQEAKIHBwdHBfd2VuX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpkYXQpCiB7Ci0Jc3RydWN0IHBwdHBfbXNnX3dlbiAqcHRyID0gKHN0cnVjdCBwcHRwX21zZ193ZW4gKilkYXQ7CisJY29uc3Qgc3RydWN0IHBwdHBfbXNnX3dlbiAqcHRyID0gKGNvbnN0IHN0cnVjdCBwcHRwX21zZ193ZW4gKilkYXQ7CiAKIAlORF9UQ0hFQ0socHRyLT5wZWVyX2NhbGxfaWQpOwogCXBwdHBfcGVlcl9jYWxsX2lkX3ByaW50KG5kbywgJnB0ci0+cGVlcl9jYWxsX2lkKTsKQEAgLTg4MCw3ICs4ODEsNyBAQAogcHB0cF9zbGlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKmRhdCkKIHsKLQlzdHJ1Y3QgcHB0cF9tc2dfc2xpICpwdHIgPSAoc3RydWN0IHBwdHBfbXNnX3NsaSAqKWRhdDsKKwljb25zdCBzdHJ1Y3QgcHB0cF9tc2dfc2xpICpwdHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfbXNnX3NsaSAqKWRhdDsKIAogCU5EX1RDSEVDSyhwdHItPnBlZXJfY2FsbF9pZCk7CiAJcHB0cF9wZWVyX2NhbGxfaWRfcHJpbnQobmRvLCAmcHRyLT5wZWVyX2NhbGxfaWQpOwpAQCAtOTA2LDcgKzkwNyw3IEBACiAKIAlORF9QUklOVCgobmRvLCAiOiBwcHRwIikpOwogCi0JaGRyID0gKHN0cnVjdCBwcHRwX2hkciAqKWRhdDsKKwloZHIgPSAoY29uc3Qgc3RydWN0IHBwdHBfaGRyICopZGF0OwogCiAJTkRfVENIRUNLKGhkci0+bGVuZ3RoKTsKIAlpZiAobmRvLT5uZG9fdmZsYWcpIHsKZGlmZiAtLWdpdCBhL3ByaW50LXJhZGl1cy5jIGIvcHJpbnQtcmFkaXVzLmMKaW5kZXggNWNmOGFkMi4uZWI0OGRlNSAxMDA2NDQKLS0tIGEvcHJpbnQtcmFkaXVzLmMKKysrIGIvcHJpbnQtcmFkaXVzLmMKQEAgLTE5LDYgKzE5LDkgQEAKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KKworLyogXHN1bW1hcnk6IFJhZGl1cyBwcm90b2NvbCBwcmludGVyICovCisKIC8qCiAgKiBSYWRpdXMgcHJpbnRlciByb3V0aW5lcyBhcyBzcGVjaWZpZWQgb246CiAgKgpAQCAtMzcsNiArNDAsMTAgQEAKICAqIFJGQyAyODY5OgogICogICAgICAiUkFESVVTIEV4dGVuc2lvbnMiCiAgKgorICogUkZDIDM1ODA6CisgKiAgICAgICJJRUVFIDgwMi4xWCBSZW1vdGUgQXV0aGVudGljYXRpb24gRGlhbCBJbiBVc2VyIFNlcnZpY2UgKFJBRElVUykiCisgKiAgICAgICJVc2FnZSBHdWlkZWxpbmVzIgorICoKICAqIFJGQyA0Njc1OgogICogICAgICAiUkFESVVTIEF0dHJpYnV0ZXMgZm9yIFZpcnR1YWwgTEFOIGFuZCBQcmlvcml0eSBTdXBwb3J0IgogICoKQEAgLTQ4LDE2ICs1NSwxNSBAQAogICogVE9ETzogQW1vbmcgb3RoZXIgdGhpbmdzIHRvIHByaW50IG9rIE1hY0ludG9zaCBhbmQgVmVuZG9yIHZhbHVlcwogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJvdWkuaCIKQEAgLTE2MiwxMiArMTY4LDEyIEBACiB9OwogCiAKLXN0YXRpYyB2b2lkIHByaW50X2F0dHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKLXN0YXRpYyB2b2lkIHByaW50X2F0dHJfbnVtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKLXN0YXRpYyB2b2lkIHByaW50X3ZlbmRvcl9hdHRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKLXN0YXRpYyB2b2lkIHByaW50X2F0dHJfYWRkcmVzcyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKLXN0YXRpYyB2b2lkIHByaW50X2F0dHJfdGltZShuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKLXN0YXRpYyB2b2lkIHByaW50X2F0dHJfc3RyYW5nZShuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKK3N0YXRpYyB2b2lkIHByaW50X2F0dHJfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKK3N0YXRpYyB2b2lkIHByaW50X2F0dHJfbnVtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKK3N0YXRpYyB2b2lkIHByaW50X3ZlbmRvcl9hdHRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgdV9pbnQsIHVfc2hvcnQgKTsKK3N0YXRpYyB2b2lkIHByaW50X2F0dHJfYWRkcmVzcyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKK3N0YXRpYyB2b2lkIHByaW50X2F0dHJfdGltZShuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKK3N0YXRpYyB2b2lkIHByaW50X2F0dHJfc3RyYW5nZShuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X3Nob3J0KTsKIAogCiBzdHJ1Y3QgcmFkaXVzX2hkciB7IHVpbnQ4X3QgIGNvZGU7IC8qIFJhZGl1cyBwYWNrZXQgY29kZSAgKi8KQEAgLTMzMSw2ICszMzcsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiR1JFIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkRWUyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJJUC1pbi1JUCBUdW5uZWxpbmciLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiVkxBTiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogCiAvKiBUdW5uZWwtTWVkaXVtLVR5cGUgQXR0cmlidXRlIHN0YW5kYXJkIHZhbHVlcyAqLwpAQCAtMzY1LDExICszNzIsMTIgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OwogCiAKLXN0cnVjdCBhdHRydHlwZSB7IGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgLyogQXR0cmlidXRlIG5hbWUgICAgICAgICAgICAgICAgICovCitzdGF0aWMgc3RydWN0IGF0dHJ0eXBlIHsKKyAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7ICAgICAgLyogQXR0cmlidXRlIG5hbWUgICAgICAgICAgICAgICAgICovCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqc3VidHlwZXM7IC8qIFN0YW5kYXJkIFZhbHVlcyAoaWYgYW55KSAgICAgICAqLwogICAgICAgICAgICAgICAgICAgdV9jaGFyIHNpel9zdWJ0eXBlczsgICAvKiBTaXplIG9mIHRvdGFsIHN0YW5kYXJkIHZhbHVlcyAgKi8KICAgICAgICAgICAgICAgICAgIHVfY2hhciBmaXJzdF9zdWJ0eXBlOyAgLyogRmlyc3Qgc3RhbmRhcmQgdmFsdWUgaXMgMCBvciAxICovCi0gICAgICAgICAgICAgICAgICB2b2lkICgqcHJpbnRfZnVuYykobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIHVfY2hhciAqLCB1X2ludCwgdV9zaG9ydCk7CisgICAgICAgICAgICAgICAgICB2b2lkICgqcHJpbnRfZnVuYykobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCB1X2ludCwgdV9zaG9ydCk7CiAgICAgICAgICAgICAgICAgfSBhdHRyX3R5cGVbXT0KICAgewogICAgICB7IE5VTEwsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTlVMTCwgMCwgMCwgTlVMTCAgICAgICAgICAgICAgIH0sCkBAIC00NzgsNyArNDg2LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBwcmludF9hdHRyX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSkKKyAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSkKIHsKICAgIHJlZ2lzdGVyIHVfaW50IGk7CiAKQEAgLTUzMyw3ICs1NDEsNyBAQAogICAgfQogCiAgICBmb3IgKGk9MDsgKmRhdGEgJiYgaSA8IGxlbmd0aCA7IGkrKywgZGF0YSsrKQotICAgICAgIE5EX1BSSU5UKChuZG8sICIlYyIsICgqZGF0YSA8IDMyIHx8ICpkYXRhID4gMTI4KSA/ICcuJyA6ICpkYXRhKSk7CisgICAgICAgTkRfUFJJTlQoKG5kbywgIiVjIiwgKCpkYXRhIDwgMzIgfHwgKmRhdGEgPiAxMjYpID8gJy4nIDogKmRhdGEpKTsKIAogICAgcmV0dXJuOwogCkBAIC01NDYsNyArNTU0LDcgQEAKICAqLwogc3RhdGljIHZvaWQKIHByaW50X3ZlbmRvcl9hdHRyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdV9jaGFyICpkYXRhLCB1X2ludCBsZW5ndGgsIHVfc2hvcnQgYXR0cl9jb2RlIF9VXykKKyAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSBfVV8pCiB7CiAgICAgdV9pbnQgaWR4OwogICAgIHVfaW50IHZlbmRvcl9pZDsKQEAgLTU5Myw3ICs2MDEsNyBAQAogICAgICAgICAgICAgICAgdmVuZG9yX3R5cGUsCiAgICAgICAgICAgICAgICB2ZW5kb3JfbGVuZ3RoKSk7CiAgICAgICAgIGZvciAoaWR4ID0gMDsgaWR4IDwgdmVuZG9yX2xlbmd0aCA7IGlkeCsrLCBkYXRhKyspCi0gICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJWMiLCAoKmRhdGEgPCAzMiB8fCAqZGF0YSA+IDEyOCkgPyAnLicgOiAqZGF0YSkpOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVjIiwgKCpkYXRhIDwgMzIgfHwgKmRhdGEgPiAxMjYpID8gJy4nIDogKmRhdGEpKTsKICAgICAgICAgbGVuZ3RoLT12ZW5kb3JfbGVuZ3RoOwogICAgIH0KICAgICByZXR1cm47CkBAIC02MTEsNyArNjE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogcHJpbnRfYXR0cl9udW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICByZWdpc3RlciB1X2NoYXIgKmRhdGEsIHVfaW50IGxlbmd0aCwgdV9zaG9ydCBhdHRyX2NvZGUpCisgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmRhdGEsIHVfaW50IGxlbmd0aCwgdV9zaG9ydCBhdHRyX2NvZGUpCiB7CiAgICB1aW50MzJfdCB0aW1lb3V0OwogCkBAIC03MzQsNyArNzQyLDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBwcmludF9hdHRyX2FkZHJlc3MobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdV9jaGFyICpkYXRhLCB1X2ludCBsZW5ndGgsIHVfc2hvcnQgYXR0cl9jb2RlKQorICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSkKIHsKICAgIGlmIChsZW5ndGggIT0gNCkKICAgIHsKQEAgLTc3OCw3ICs3ODYsNyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiBzdGF0aWMgdm9pZAogcHJpbnRfYXR0cl90aW1lKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSBfVV8pCisgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpkYXRhLCB1X2ludCBsZW5ndGgsIHVfc2hvcnQgYXR0cl9jb2RlIF9VXykKIHsKICAgIHRpbWVfdCBhdHRyX3RpbWU7CiAgICBjaGFyIHN0cmluZ1syNl07CkBAIC04MTEsNyArODE5LDcgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIHN0YXRpYyB2b2lkCiBwcmludF9hdHRyX3N0cmFuZ2UobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgdV9jaGFyICpkYXRhLCB1X2ludCBsZW5ndGgsIHVfc2hvcnQgYXR0cl9jb2RlKQorICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZGF0YSwgdV9pbnQgbGVuZ3RoLCB1X3Nob3J0IGF0dHJfY29kZSkKIHsKICAgIHVfc2hvcnQgbGVuX2RhdGE7CiAKQEAgLTg4NCw3ICs4OTIsNyBAQAogcmFkaXVzX2F0dHJzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYXR0ciwgdV9pbnQgbGVuZ3RoKQogewotICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHJhZGl1c19hdHRyICpyYWRfYXR0ciA9IChzdHJ1Y3QgcmFkaXVzX2F0dHIgKilhdHRyOworICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHJhZGl1c19hdHRyICpyYWRfYXR0ciA9IChjb25zdCBzdHJ1Y3QgcmFkaXVzX2F0dHIgKilhdHRyOwogICAgY29uc3QgY2hhciAqYXR0cl9zdHJpbmc7CiAKICAgIHdoaWxlIChsZW5ndGggPiAwKQpAQCAtOTI0LDE2ICs5MzIsMTYgQEAKICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoIGF0dHJfdHlwZVtyYWRfYXR0ci0+dHlwZV0ucHJpbnRfZnVuYyApCiAgICAgICAgICAgICAgICAgICgqYXR0cl90eXBlW3JhZF9hdHRyLT50eXBlXS5wcmludF9mdW5jKSgKLSAgICAgICAgICAgICAgICAgICAgIG5kbywgKCh1X2NoYXIgKikocmFkX2F0dHIrMSkpLAorICAgICAgICAgICAgICAgICAgICAgbmRvLCAoKGNvbnN0IHVfY2hhciAqKShyYWRfYXR0cisxKSksCiAgICAgICAgICAgICAgICAgICAgICByYWRfYXR0ci0+bGVuIC0gMiwgcmFkX2F0dHItPnR5cGUpOwogICAgICAgICAgfQogICAgICB9CiAgICAgIC8qIGRvIHdlIGFsc28gd2FudCB0byBzZWUgYSBoZXggZHVtcCA/ICovCiAgICAgIGlmIChuZG8tPm5kb192ZmxhZz4gMSkKLSAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sICh1X2NoYXIgKilyYWRfYXR0cisyLCAiXG5cdCAgICAiLCAocmFkX2F0dHItPmxlbiktMik7CisgICAgICAgICBwcmludF91bmtub3duX2RhdGEobmRvLCAoY29uc3QgdV9jaGFyICopcmFkX2F0dHIrMiwgIlxuXHQgICAgIiwgKHJhZF9hdHRyLT5sZW4pLTIpOwogCiAgICAgIGxlbmd0aC09KHJhZF9hdHRyLT5sZW4pOwotICAgICByYWRfYXR0ciA9IChzdHJ1Y3QgcmFkaXVzX2F0dHIgKikoICgoY2hhciAqKShyYWRfYXR0cikpK3JhZF9hdHRyLT5sZW4pOworICAgICByYWRfYXR0ciA9IChjb25zdCBzdHJ1Y3QgcmFkaXVzX2F0dHIgKikoICgoY29uc3QgY2hhciAqKShyYWRfYXR0cikpK3JhZF9hdHRyLT5sZW4pOwogICAgfQogICAgcmV0dXJuOwogCkBAIC05NDksNyArOTU3LDcgQEAKICAgIHVfaW50IGxlbiwgYXV0aF9pZHg7CiAKICAgIE5EX1RDSEVDSzIoKmRhdCwgTUlOX1JBRElVU19MRU4pOwotICAgcmFkID0gKHN0cnVjdCByYWRpdXNfaGRyICopZGF0OworICAgcmFkID0gKGNvbnN0IHN0cnVjdCByYWRpdXNfaGRyICopZGF0OwogICAgbGVuID0gRVhUUkFDVF8xNkJJVFMoJnJhZC0+bGVuKTsKIAogICAgaWYgKGxlbiA8IE1JTl9SQURJVVNfTEVOKQpkaWZmIC0tZ2l0IGEvcHJpbnQtcmF3LmMgYi9wcmludC1yYXcuYwppbmRleCBkMjAzODdjLi40NjNhYTQxIDEwMDY0NAotLS0gYS9wcmludC1yYXcuYworKysgYi9wcmludC1yYXcuYwpAQCAtMTksMTQgKzE5LDE1IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFJhdyBJUCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogLyoKICAqIFRoZSBETFRfUkFXIHBhY2tldCBoYXMgbm8gaGVhZGVyLiBJdCBjb250YWlucyBhIHJhdyBJUCBwYWNrZXQuCmRpZmYgLS1naXQgYS9wcmludC1yZXNwLmMgYi9wcmludC1yZXNwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOWQ3MWUyMQotLS0gL2Rldi9udWxsCisrKyBiL3ByaW50LXJlc3AuYwpAQCAtMCwwICsxLDUzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAxNSBUaGUgVENQRFVNUCBwcm9qZWN0CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKKyAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUworICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUKKyAqIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsCisgKiBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLAorICogQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUgorICogQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUCisgKiBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTgorICogQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFCisgKiBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqCisgKiBJbml0aWFsIGNvbnRyaWJ1dGlvbiBieSBBbmRyZXcgRGFycXVpIChhbmRyZXcuZGFycXVpQGdtYWlsLmNvbSkuCisgKi8KKworLyogXHN1bW1hcnk6IFJFZGlzIFNlcmlhbGl6YXRpb24gUHJvdG9jb2wgKFJFU1ApIHByaW50ZXIgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSA8bGltaXRzLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8ZXJybm8uaD4KKworI2luY2x1ZGUgImV4dHJhY3QuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfFJFU1BdIjsKKworLyoKKyAqIEZvciBpbmZvcm1hdGlvbiByZWdhcmRpbmcgUkVTUCwgc2VlOiBodHRwOi8vcmVkaXMuaW8vdG9waWNzL3Byb3RvY29sCisgKi8KKworI2RlZmluZSBSRVNQX1NJTVBMRV9TVFJJTkcgICAgJysnCisjZGVmaW5lIFJFU1BfRVJST1IgICAgICAgICAgICAnLScKKyNkZWZpbmUgUkVTUF9JTlRFR0VSICAgICAgICAgICc6JworI2RlZmluZSBSRVNQX0JVTEtfU1RSSU5HICAgICAgJyQnCisjZGVmaW5lIFJFU1BfQVJSQVkgICAgICAgICAgICAnKicKKworI2RlZmluZSByZXNwX3ByaW50X2VtcHR5KG5kbykgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGVtcHR5IikpCisjZGVmaW5lIHJlc3BfcHJpbnRfbnVsbChuZG8pICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgbnVsbCIpKQorI2RlZmluZSByZXNwX3ByaW50X2xlbmd0aF90b29fbGFyZ2UobmRvKSBORF9QUklOVCgobmRvLCAiIGxlbmd0aCB0b28gbGFyZ2UiKSkKKyNkZWZpbmUgcmVzcF9wcmludF9sZW5ndGhfbmVnYXRpdmUobmRvKSAgTkRfUFJJTlQoKG5kbywgIiBsZW5ndGggbmVnYXRpdmUgYW5kIG5vdCAtMSIpKQorI2RlZmluZSByZXNwX3ByaW50X2ludmFsaWQobmRvKSAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGludmFsaWQiKSkKKwordm9pZCAgICAgICByZXNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgdV9pbnQpOworc3RhdGljIGludCByZXNwX3BhcnNlKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQgcmVzcF9wcmludF9zdHJpbmdfZXJyb3JfaW50ZWdlcihuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIGludCk7CitzdGF0aWMgaW50IHJlc3BfcHJpbnRfc2ltcGxlX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIGludCk7CitzdGF0aWMgaW50IHJlc3BfcHJpbnRfaW50ZWdlcihuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIGludCk7CitzdGF0aWMgaW50IHJlc3BfcHJpbnRfZXJyb3IobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCBpbnQpOworc3RhdGljIGludCByZXNwX3ByaW50X2J1bGtfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQgcmVzcF9wcmludF9idWxrX2FycmF5KG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKiwgaW50KTsKK3N0YXRpYyBpbnQgcmVzcF9wcmludF9pbmxpbmUobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCBpbnQpOworc3RhdGljIGludCByZXNwX2dldF9sZW5ndGgobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCBpbnQsIGNvbnN0IHVfY2hhciAqKik7CisKKyNkZWZpbmUgTENIRUNLMihfdG90X2xlbiwgX2xlbikgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmIChfdG90X2xlbiA8IF9sZW4pICAgIFwKKyAgICAgICAgICAgIGdvdG8gdHJ1bmM7ICAgICAgICAgXAorICAgIH0KKworI2RlZmluZSBMQ0hFQ0soX3RvdF9sZW4pIExDSEVDSzIoX3RvdF9sZW4sIDEpCisKKy8qCisgKiBGSU5EX0NSTEY6CisgKiBBdHRlbXB0cyB0byBtb3ZlIG91ciAncHRyJyBmb3J3YXJkIHVudGlsIGEgXHJcbiBpcyBmb3VuZCwKKyAqIHdoaWxlIGFsc28gbWFraW5nIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIHRoZSBidWZmZXIgJ19sZW4nCisgKiBvciBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhcHR1cmVkIGRhdGEuCisgKiBJZiB3ZSBleGNlZWQgb3IgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBjYXB0dXJlZCBkYXRhLAorICoganVtcCB0byB0cnVuYy4KKyAqLworI2RlZmluZSBGSU5EX0NSTEYoX3B0ciwgX2xlbikgICAgICAgICAgICAgICAgICAgXAorICAgIGZvciAoOzspIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBMQ0hFQ0syKF9sZW4sIDIpOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORF9UQ0hFQ0syKCpfcHRyLCAyKTsgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpZiAoKl9wdHIgPT0gJ1xyJyAmJiAqKF9wdHIrMSkgPT0gJ1xuJykgXAorICAgICAgICAgICAgYnJlYWs7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfcHRyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfbGVuLS07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworLyoKKyAqIENPTlNVTUVfQ1JMRgorICogQ29uc3VtZSBhIENSTEYgdGhhdCB3ZSd2ZSBqdXN0IGZvdW5kLgorICovCisjZGVmaW5lIENPTlNVTUVfQ1JMRihfcHRyLCBfbGVuKSBcCisgICAgX3B0ciArPSAyOyAgICAgICAgICAgICAgICAgICBcCisgICAgX2xlbiAtPSAyOworCisvKgorICogRklORF9DUl9PUl9MRgorICogQXR0ZW1wdHMgdG8gbW92ZSBvdXIgJ19wdHInIGZvcndhcmQgdW50aWwgYSBcciBvciBcbiBpcyBmb3VuZCwKKyAqIHdoaWxlIGFsc28gbWFraW5nIHN1cmUgd2UgZG9uJ3QgZXhjZWVkIHRoZSBidWZmZXIgJ19sZW4nCisgKiBvciBnbyBwYXN0IHRoZSBlbmQgb2YgdGhlIGNhcHR1cmVkIGRhdGEuCisgKiBJZiB3ZSBleGNlZWQgb3IgZ28gcGFzdCB0aGUgZW5kIG9mIHRoZSBjYXB0dXJlZCBkYXRhLAorICoganVtcCB0byB0cnVuYy4KKyAqLworI2RlZmluZSBGSU5EX0NSX09SX0xGKF9wdHIsIF9sZW4pICAgICAgICAgICBcCisgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgTENIRUNLKF9sZW4pOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBORF9UQ0hFQ0soKl9wdHIpOyAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGlmICgqX3B0ciA9PSAnXHInIHx8ICpfcHRyID09ICdcbicpIFwKKyAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBfcHRyKys7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9sZW4tLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8qCisgKiBDT05TVU1FX0NSX09SX0xGCisgKiBDb25zdW1lIGFsbCBjb25zZWN1dGl2ZSBcciBhbmQgXG4gYnl0ZXMuCisgKiBJZiB3ZSBleGNlZWQgJ19sZW4nIG9yIGdvIHBhc3QgdGhlIGVuZCBvZiB0aGUgY2FwdHVyZWQgZGF0YSwKKyAqIGp1bXAgdG8gdHJ1bmMuCisgKi8KKyNkZWZpbmUgQ09OU1VNRV9DUl9PUl9MRihfcHRyLCBfbGVuKSAgICAgICAgICAgICBcCisgICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICBpbnQgX2ZvdW5kX2NyX29yX2xmID0gMDsgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZm9yICg7OykgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICogSGF2ZSB3ZSBoaXQgdGhlIGVuZCBvZiBkYXRhPyAgICAgIFwKKyAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBpZiAoX2xlbiA9PSAwIHx8ICFORF9UVEVTVCgqX3B0cikpIHsgXAorICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgKiBZZXMuICBIYXZlIHdlIHNlZW4gYSBcciAgICAgICBcCisgICAgICAgICAgICAgICAgICogb3IgXG4/ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBpZiAoX2ZvdW5kX2NyX29yX2xmKSB7ICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIC8qICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgICAgICAgKiBZZXMuICBKdXN0IHN0b3AuICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICovICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICogTm8uICBXZSByYW4gb3V0IG9mIHBhY2tldC4gICAgXAorICAgICAgICAgICAgICAgICAqLyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICBnb3RvIHRydW5jOyAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgaWYgKCpfcHRyICE9ICdccicgJiYgKl9wdHIgIT0gJ1xuJykgIFwKKyAgICAgICAgICAgICAgICBicmVhazsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICBfZm91bmRfY3Jfb3JfbGYgPSAxOyAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgX3B0cisrOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIF9sZW4tLTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIH0KKworLyoKKyAqIFNLSVBfT1BDT0RFCisgKiBTa2lwIG92ZXIgdGhlIG9wY29kZSBjaGFyYWN0ZXIuCisgKiBUaGUgb3Bjb2RlIGhhcyBhbHJlYWR5IGJlZW4gZmV0Y2hlZCwgc28gd2Uga25vdyBpdCdzIHRoZXJlLCBhbmQgZG9uJ3QKKyAqIG5lZWQgdG8gZG8gYW55IGNoZWNrcy4KKyAqLworI2RlZmluZSBTS0lQX09QQ09ERShfcHRyLCBfdG90X2xlbikgXAorICAgIF9wdHIrKzsgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF90b3RfbGVuLS07CisKKy8qCisgKiBHRVRfTEVOR1RICisgKiBHZXQgYSBidWxrIHN0cmluZyBvciBhcnJheSBsZW5ndGguCisgKi8KKyNkZWZpbmUgR0VUX0xFTkdUSChfbmRvLCBfdG90X2xlbiwgX3B0ciwgX2xlbikgICAgICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIGNvbnN0IHVfY2hhciAqX2VuZHA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgX2xlbiA9IHJlc3BfZ2V0X2xlbmd0aChfbmRvLCBfcHRyLCBfdG90X2xlbiwgJl9lbmRwKTsgXAorICAgICAgICBfdG90X2xlbiAtPSAoX2VuZHAgLSBfcHRyKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIF9wdHIgPSBfZW5kcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9CisKKy8qCisgKiBURVNUX1JFVF9MRU4KKyAqIElmIHJldF9sZW4gaXMgPCAwLCBqdW1wIHRvIHRoZSB0cnVuYyB0YWcgd2hpY2ggcmV0dXJucyAoLTEpCisgKiBhbmQgJ2J1YmJsZXMgdXAnIHRvIHByaW50aW5nIHRzdHIuIE90aGVyd2lzZSwgcmV0dXJuIHJldF9sZW4uCisgKi8KKyNkZWZpbmUgVEVTVF9SRVRfTEVOKHJsKSBcCisgICAgaWYgKHJsIDwgMCkgeyBnb3RvIHRydW5jOyB9IGVsc2UgeyByZXR1cm4gcmw7IH0KKworLyoKKyAqIFRFU1RfUkVUX0xFTl9OT1JFVFVSTgorICogSWYgcmV0X2xlbiBpcyA8IDAsIGp1bXAgdG8gdGhlIHRydW5jIHRhZyB3aGljaCByZXR1cm5zICgtMSkKKyAqIGFuZCAnYnViYmxlcyB1cCcgdG8gcHJpbnRpbmcgdHN0ci4gT3RoZXJ3aXNlLCBjb250aW51ZSBvbndhcmQuCisgKi8KKyNkZWZpbmUgVEVTVF9SRVRfTEVOX05PUkVUVVJOKHJsKSBcCisgICAgaWYgKHJsIDwgMCkgeyBnb3RvIHRydW5jOyB9CisKKy8qCisgKiBSRVNQX1BSSU5UX1NFR01FTlQKKyAqIFByaW50cyBhIHNlZ21lbnQgaW4gdGhlIGZvcm0gb2Y6ICcgIjxzdHVmZj4iXG4iCisgKiBBc3N1bWVzIHRoZSBkYXRhIGhhcyBhbHJlYWR5IGJlZW4gdmVyaWZpZWQgYXMgcHJlc2VudC4KKyAqLworI2RlZmluZSBSRVNQX1BSSU5UX1NFR01FTlQoX25kbywgX2JwLCBfbGVuKSAgICAgICAgICAgIFwKKyAgICBORF9QUklOVCgoX25kbywgIiBcIiIpKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYgKGZuX3ByaW50bihfbmRvLCBfYnAsIF9sZW4sIF9uZG8tPm5kb19zbmFwZW5kKSkgXAorICAgICAgICBnb3RvIHRydW5jOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBmbl9wcmludF9jaGFyKF9uZG8sICciJyk7CisKK3ZvaWQKK3Jlc3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbmd0aCkKK3sKKyAgICBpbnQgcmV0X2xlbiA9IDAsIGxlbmd0aF9jdXIgPSBsZW5ndGg7CisKKyAgICBpZighYnAgfHwgbGVuZ3RoIDw9IDApCisgICAgICAgIHJldHVybjsKKworICAgIE5EX1BSSU5UKChuZG8sICI6IFJFU1AiKSk7CisgICAgd2hpbGUgKGxlbmd0aF9jdXIgPiAwKSB7CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgYmxvY2sgc3VwcG9ydHMgcmVkaXMgcGlwZWxpbmluZy4KKyAgICAgICAgICogRm9yIGV4YW1wbGUsIG11bHRpcGxlIG9wZXJhdGlvbnMgY2FuIGJlIHBpcGVsaW5lZCB3aXRoaW4gdGhlIHNhbWUgc3RyaW5nOgorICAgICAgICAgKiAiKjJcclxuXCQ0XHJcbklOQ1JcclxuXCQxXHJcbnpcclxuKjJcclxuXCQ0XHJcbklOQ1JcclxuXCQxXHJcbnpcclxuKjJcclxuXCQ0XHJcbklOQ1JcclxuXCQxXHJcbnpcclxuIgorICAgICAgICAgKiBvcgorICAgICAgICAgKiAiUElOR1xyXG5QSU5HXHJcblBJTkdcclxuIgorICAgICAgICAgKiBJbiBvcmRlciB0byBoYW5kbGUgdGhpcyBjYXNlLCB3ZSBtdXN0IHRyeSBhbmQgcGFyc2UgJ2JwJyB1bnRpbAorICAgICAgICAgKiAnbGVuZ3RoJyBieXRlcyBoYXZlIGJlZW4gcHJvY2Vzc2VkIG9yIHdlIHJlYWNoIGEgdHJ1bmMgY29uZGl0aW9uLgorICAgICAgICAgKi8KKyAgICAgICAgcmV0X2xlbiA9IHJlc3BfcGFyc2UobmRvLCBicCwgbGVuZ3RoX2N1cik7CisgICAgICAgIFRFU1RfUkVUX0xFTl9OT1JFVFVSTihyZXRfbGVuKTsKKyAgICAgICAgYnAgKz0gcmV0X2xlbjsKKyAgICAgICAgbGVuZ3RoX2N1ciAtPSByZXRfbGVuOworICAgIH0KKworICAgIHJldHVybjsKKwordHJ1bmM6CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworfQorCitzdGF0aWMgaW50CityZXNwX3BhcnNlKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoKQoreworICAgIHVfY2hhciBvcDsKKyAgICBpbnQgcmV0X2xlbjsKKworICAgIExDSEVDSzIobGVuZ3RoLCAxKTsKKyAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICBvcCA9ICpicDsKKworICAgIC8qIGJwIG5vdyBwb2ludHMgdG8gdGhlIG9wLCBzbyB0aGVzZSByb3V0aW5lcyBtdXN0IHNraXAgaXQgKi8KKyAgICBzd2l0Y2gob3ApIHsKKyAgICAgICAgY2FzZSBSRVNQX1NJTVBMRV9TVFJJTkc6ICByZXRfbGVuID0gcmVzcF9wcmludF9zaW1wbGVfc3RyaW5nKG5kbywgYnAsIGxlbmd0aCk7ICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVTUF9JTlRFR0VSOiAgICAgICAgcmV0X2xlbiA9IHJlc3BfcHJpbnRfaW50ZWdlcihuZG8sIGJwLCBsZW5ndGgpOyAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIFJFU1BfRVJST1I6ICAgICAgICAgIHJldF9sZW4gPSByZXNwX3ByaW50X2Vycm9yKG5kbywgYnAsIGxlbmd0aCk7ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBSRVNQX0JVTEtfU1RSSU5HOiAgICByZXRfbGVuID0gcmVzcF9wcmludF9idWxrX3N0cmluZyhuZG8sIGJwLCBsZW5ndGgpOyAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgUkVTUF9BUlJBWTogICAgICAgICAgcmV0X2xlbiA9IHJlc3BfcHJpbnRfYnVsa19hcnJheShuZG8sIGJwLCBsZW5ndGgpOyAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OiAgICAgICAgICAgICAgICAgIHJldF9sZW4gPSByZXNwX3ByaW50X2lubGluZShuZG8sIGJwLCBsZW5ndGgpOyAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICAvKgorICAgICAqIFRoaXMgZ2l2ZXMgdXAgd2l0aCBhICJ0cnVuY2F0ZWQiIGluZGljYXRvciBmb3IgYWxsIGVycm9ycywKKyAgICAgKiBpbmNsdWRpbmcgaW52YWxpZCBwYWNrZXQgZXJyb3JzOyB0aGF0J3Mgd2hhdCB3ZSB3YW50LCBhcworICAgICAqIHdlIGhhdmUgdG8gZ2l2ZSB1cCBvbiBmdXJ0aGVyIHBhcnNpbmcgaW4gdGhhdCBjYXNlLgorICAgICAqLworICAgIFRFU1RfUkVUX0xFTihyZXRfbGVuKTsKKwordHJ1bmM6CisgICAgcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcHJpbnRfc2ltcGxlX3N0cmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCkgeworICAgIHJldHVybiByZXNwX3ByaW50X3N0cmluZ19lcnJvcl9pbnRlZ2VyKG5kbywgYnAsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcHJpbnRfaW50ZWdlcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCkgeworICAgIHJldHVybiByZXNwX3ByaW50X3N0cmluZ19lcnJvcl9pbnRlZ2VyKG5kbywgYnAsIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfcHJpbnRfZXJyb3IobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIGludCBsZW5ndGgpIHsKKyAgICByZXR1cm4gcmVzcF9wcmludF9zdHJpbmdfZXJyb3JfaW50ZWdlcihuZG8sIGJwLCBsZW5ndGgpOworfQorCitzdGF0aWMgaW50CityZXNwX3ByaW50X3N0cmluZ19lcnJvcl9pbnRlZ2VyKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoKSB7CisgICAgaW50IGxlbmd0aF9jdXIgPSBsZW5ndGgsIGxlbiwgcmV0X2xlbjsKKyAgICBjb25zdCB1X2NoYXIgKmJwX3B0cjsKKworICAgIC8qIGJwIHBvaW50cyB0byB0aGUgb3A7IHNraXAgaXQgKi8KKyAgICBTS0lQX09QQ09ERShicCwgbGVuZ3RoX2N1cik7CisgICAgYnBfcHRyID0gYnA7CisKKyAgICAvKgorICAgICAqIGJwIG5vdyBwcmludHMgcGFzdCB0aGUgKCstOykgb3Bjb2RlLCBzbyBpdCdzIHBvaW50aW5nIHRvIHRoZSBmaXJzdAorICAgICAqIGNoYXJhY3RlciBvZiB0aGUgc3RyaW5nICh3aGljaCBjb3VsZCBiZSBudW1lcmljKS4KKyAgICAgKiArT0tcclxuCisgICAgICogLUVSUiAuLi5cclxuCisgICAgICogOjAyOTEyMzA5XHJcbgorICAgICAqCisgICAgICogRmluZCB0aGUgXHJcbiB3aXRoIEZJTkRfQ1JMRigpLgorICAgICAqLworICAgIEZJTkRfQ1JMRihicF9wdHIsIGxlbmd0aF9jdXIpOworCisgICAgLyoKKyAgICAgKiBicF9wdHIgcG9pbnRzIHRvIHRoZSBcclxuLCBzbyBicF9wdHIgLSBicCBpcyB0aGUgbGVuZ3RoIG9mIHRleHQKKyAgICAgKiBwcmVjZWRpbmcgdGhlIFxyXG4uICBUaGF0IGluY2x1ZGVzIHRoZSBvcGNvZGUsIHNvIGRvbid0IHByaW50CisgICAgICogdGhhdC4KKyAgICAgKi8KKyAgICBsZW4gPSAoYnBfcHRyIC0gYnApOworICAgIFJFU1BfUFJJTlRfU0VHTUVOVChuZG8sIGJwLCBsZW4pOworICAgIHJldF9sZW4gPSAxIC8qPG9wY29kZT4qLyArIGxlbiAvKjxzdHJpbmc+Ki8gKyAyIC8qPENSTEY+Ki87CisKKyAgICBURVNUX1JFVF9MRU4ocmV0X2xlbik7CisKK3RydW5jOgorICAgIHJldHVybiAoLTEpOworfQorCitzdGF0aWMgaW50CityZXNwX3ByaW50X2J1bGtfc3RyaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoKSB7CisgICAgaW50IGxlbmd0aF9jdXIgPSBsZW5ndGgsIHN0cmluZ19sZW47CisKKyAgICAvKiBicCBwb2ludHMgdG8gdGhlIG9wOyBza2lwIGl0ICovCisgICAgU0tJUF9PUENPREUoYnAsIGxlbmd0aF9jdXIpOworCisgICAgLyogPGxlbmd0aD5cclxuICovCisgICAgR0VUX0xFTkdUSChuZG8sIGxlbmd0aF9jdXIsIGJwLCBzdHJpbmdfbGVuKTsKKworICAgIGlmIChzdHJpbmdfbGVuID49IDApIHsKKyAgICAgICAgLyogQnl0ZSBzdHJpbmcgb2YgbGVuZ3RoIHN0cmluZ19sZW4sIHN0YXJ0aW5nIGF0IGJwICovCisgICAgICAgIGlmIChzdHJpbmdfbGVuID09IDApCisgICAgICAgICAgICByZXNwX3ByaW50X2VtcHR5KG5kbyk7CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgTENIRUNLMihsZW5ndGhfY3VyLCBzdHJpbmdfbGVuKTsKKyAgICAgICAgICAgIE5EX1RDSEVDSzIoKmJwLCBzdHJpbmdfbGVuKTsKKyAgICAgICAgICAgIFJFU1BfUFJJTlRfU0VHTUVOVChuZG8sIGJwLCBzdHJpbmdfbGVuKTsKKyAgICAgICAgICAgIGJwICs9IHN0cmluZ19sZW47CisgICAgICAgICAgICBsZW5ndGhfY3VyIC09IHN0cmluZ19sZW47CisgICAgICAgIH0KKworICAgICAgICAvKgorICAgICAgICAgKiBGaW5kIHRoZSBcclxuIGF0IHRoZSBlbmQgb2YgdGhlIHN0cmluZyBhbmQgc2tpcCBwYXN0IGl0LgorICAgICAgICAgKiBYWFggLSByZXBvcnQgYW4gZXJyb3IgaWYgdGhlIFxyXG4gaXNuJ3QgaW1tZWRpYXRlbHkgYWZ0ZXIKKyAgICAgICAgICogdGhlIGl0ZW0/CisgICAgICAgICAqLworICAgICAgICBGSU5EX0NSTEYoYnAsIGxlbmd0aF9jdXIpOworICAgICAgICBDT05TVU1FX0NSTEYoYnAsIGxlbmd0aF9jdXIpOworICAgIH0gZWxzZSB7CisgICAgICAgIC8qIG51bGwsIHRydW5jYXRlZCwgb3IgaW52YWxpZCBmb3Igc29tZSByZWFzb24gKi8KKyAgICAgICAgc3dpdGNoKHN0cmluZ19sZW4pIHsKKyAgICAgICAgICAgIGNhc2UgKC0xKTogIHJlc3BfcHJpbnRfbnVsbChuZG8pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgKC0yKTogIGdvdG8gdHJ1bmM7CisgICAgICAgICAgICBjYXNlICgtMyk6ICByZXNwX3ByaW50X2xlbmd0aF90b29fbGFyZ2UobmRvKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICgtNCk6ICByZXNwX3ByaW50X2xlbmd0aF9uZWdhdGl2ZShuZG8pOyAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgICByZXNwX3ByaW50X2ludmFsaWQobmRvKTsgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGxlbmd0aCAtIGxlbmd0aF9jdXIpOworCit0cnVuYzoKKyAgICByZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorcmVzcF9wcmludF9idWxrX2FycmF5KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoKSB7CisgICAgdV9pbnQgbGVuZ3RoX2N1ciA9IGxlbmd0aDsKKyAgICBpbnQgYXJyYXlfbGVuLCBpLCByZXRfbGVuOworCisgICAgLyogYnAgcG9pbnRzIHRvIHRoZSBvcDsgc2tpcCBpdCAqLworICAgIFNLSVBfT1BDT0RFKGJwLCBsZW5ndGhfY3VyKTsKKworICAgIC8qIDxhcnJheV9sZW5ndGg+XHJcbiAqLworICAgIEdFVF9MRU5HVEgobmRvLCBsZW5ndGhfY3VyLCBicCwgYXJyYXlfbGVuKTsKKworICAgIGlmIChhcnJheV9sZW4gPiAwKSB7CisgICAgICAgIC8qIG5vbiBlbXB0eSBhcnJheSAqLworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgYXJyYXlfbGVuOyBpKyspIHsKKyAgICAgICAgICAgIHJldF9sZW4gPSByZXNwX3BhcnNlKG5kbywgYnAsIGxlbmd0aF9jdXIpOworCisgICAgICAgICAgICBURVNUX1JFVF9MRU5fTk9SRVRVUk4ocmV0X2xlbik7CisKKyAgICAgICAgICAgIGJwICs9IHJldF9sZW47CisgICAgICAgICAgICBsZW5ndGhfY3VyIC09IHJldF9sZW47CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICAvKiBlbXB0eSwgbnVsbCwgdHJ1bmNhdGVkLCBvciBpbnZhbGlkICovCisgICAgICAgIHN3aXRjaChhcnJheV9sZW4pIHsKKyAgICAgICAgICAgIGNhc2UgMDogICAgIHJlc3BfcHJpbnRfZW1wdHkobmRvKTsgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgKC0xKTogIHJlc3BfcHJpbnRfbnVsbChuZG8pOyAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIGNhc2UgKC0yKTogIGdvdG8gdHJ1bmM7CisgICAgICAgICAgICBjYXNlICgtMyk6ICByZXNwX3ByaW50X2xlbmd0aF90b29fbGFyZ2UobmRvKTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlICgtNCk6ICByZXNwX3ByaW50X2xlbmd0aF9uZWdhdGl2ZShuZG8pOyAgYnJlYWs7CisgICAgICAgICAgICBkZWZhdWx0OiAgICByZXNwX3ByaW50X2ludmFsaWQobmRvKTsgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gKGxlbmd0aCAtIGxlbmd0aF9jdXIpOworCit0cnVuYzoKKyAgICByZXR1cm4gKC0xKTsKK30KKworc3RhdGljIGludAorcmVzcF9wcmludF9pbmxpbmUobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIGludCBsZW5ndGgpIHsKKyAgICBpbnQgbGVuZ3RoX2N1ciA9IGxlbmd0aDsKKyAgICBpbnQgbGVuOworICAgIGNvbnN0IHVfY2hhciAqYnBfcHRyOworCisgICAgLyoKKyAgICAgKiBJbmxpbmUgY29tbWFuZHMgYXJlIHNpbXBseSAnc3RyaW5ncycgZm9sbG93ZWQgYnkgXHIgb3IgXG4gb3IgYm90aC4KKyAgICAgKiBSZWRpcyB3aWxsIGRvIGl0cyBiZXN0IHRvIHNwbGl0L3BhcnNlIHRoZXNlIHN0cmluZ3MuCisgICAgICogVGhpcyBmZWF0dXJlIG9mIHJlZGlzIGlzIGltcGxlbWVudGVkIHRvIHN1cHBvcnQgdGhlIGFiaWxpdHkgb2YKKyAgICAgKiBjb21tYW5kIHBhcnNpbmcgZnJvbSB0ZWxuZXQvbmMgc2Vzc2lvbnMgZXRjLgorICAgICAqCisgICAgICogPHN0cmluZz48XHJ8fFxufHxcclxuLi4uPgorICAgICAqLworCisgICAgLyoKKyAgICAgKiBTa2lwIGZvcndhcmQgcGFzdCBhbnkgbGVhZGluZyBcciwgXG4sIG9yIFxyXG4uCisgICAgICovCisgICAgQ09OU1VNRV9DUl9PUl9MRihicCwgbGVuZ3RoX2N1cik7CisgICAgYnBfcHRyID0gYnA7CisKKyAgICAvKgorICAgICAqIFNjYW4gZm9yd2FyZCBsb29raW5nIGZvciBcciBvciBcbi4KKyAgICAgKi8KKyAgICBGSU5EX0NSX09SX0xGKGJwX3B0ciwgbGVuZ3RoX2N1cik7CisKKyAgICAvKgorICAgICAqIEZvdW5kIGl0OyBicF9wdHIgcG9pbnRzIHRvIHRoZSBcciBvciBcbiwgc28gYnBfcHRyIC0gYnAgaXMgdGhlCisgICAgICogTGVuZ3RoIG9mIHRoZSBsaW5lIHRleHQgdGhhdCBwcmVjZWVkcyBpdC4gIFByaW50IGl0LgorICAgICAqLworICAgIGxlbiA9IChicF9wdHIgLSBicCk7CisgICAgUkVTUF9QUklOVF9TRUdNRU5UKG5kbywgYnAsIGxlbik7CisKKyAgICAvKgorICAgICAqIFNraXAgZm9yd2FyZCBwYXN0IHRoZSBcciwgXG4sIG9yIFxyXG4uCisgICAgICovCisgICAgQ09OU1VNRV9DUl9PUl9MRihicF9wdHIsIGxlbmd0aF9jdXIpOworCisgICAgLyoKKyAgICAgKiBSZXR1cm4gdGhlIG51bWJlciBvZiBieXRlcyB3ZSBwcm9jZXNzZWQuCisgICAgICovCisgICAgcmV0dXJuIChsZW5ndGggLSBsZW5ndGhfY3VyKTsKKwordHJ1bmM6CisgICAgcmV0dXJuICgtMSk7Cit9CisKK3N0YXRpYyBpbnQKK3Jlc3BfZ2V0X2xlbmd0aChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbiwgY29uc3QgdV9jaGFyICoqZW5kcCkKK3sKKyAgICBpbnQgcmVzdWx0OworICAgIHVfY2hhciBjOworICAgIGludCBzYXdfZGlnaXQ7CisgICAgaW50IG5lZzsKKyAgICBpbnQgdG9vX2xhcmdlOworCisgICAgaWYgKGxlbiA9PSAwKQorICAgICAgICBnb3RvIHRydW5jOworICAgIE5EX1RDSEVDSygqYnApOworICAgIHRvb19sYXJnZSA9IDA7CisgICAgbmVnID0gMDsKKyAgICBpZiAoKmJwID09ICctJykgeworICAgICAgICBuZWcgPSAxOworICAgICAgICBicCsrOworICAgICAgICBsZW4tLTsKKyAgICB9CisgICAgcmVzdWx0ID0gMDsKKyAgICBzYXdfZGlnaXQgPSAwOworCisgICAgZm9yICg7OykgeworICAgICAgICBpZiAobGVuID09IDApCisgICAgICAgICAgICBnb3RvIHRydW5jOworICAgICAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICAgICAgYyA9ICpicDsKKyAgICAgICAgaWYgKCEoYyA+PSAnMCcgJiYgYyA8PSAnOScpKSB7CisgICAgICAgICAgICBpZiAoIXNhd19kaWdpdCkKKyAgICAgICAgICAgICAgICBnb3RvIGludmFsaWQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgICAgICBjIC09ICcwJzsKKyAgICAgICAgaWYgKHJlc3VsdCA+IChJTlRfTUFYIC8gMTApKSB7CisgICAgICAgICAgICAvKiBUaGlzIHdpbGwgb3ZlcmZsb3cgYW4gaW50IHdoZW4gd2UgbXVsdGlwbHkgaXQgYnkgMTAuICovCisgICAgICAgICAgICB0b29fbGFyZ2UgPSAxOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVzdWx0ICo9IDEwOworICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBJTlRfTUFYICYmIGMgPiAoSU5UX01BWCAlIDEwKSkgeworICAgICAgICAgICAgICAgIC8qIFRoaXMgd2lsbCBvdmVyZmxvdyBhbiBpbnQgd2hlbiB3ZSBhZGQgYyAqLworICAgICAgICAgICAgICAgIHRvb19sYXJnZSA9IDE7CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgICAgICByZXN1bHQgKz0gYzsKKyAgICAgICAgfQorICAgICAgICBicCsrOworICAgICAgICBsZW4tLTsKKyAgICAgICAgc2F3X2RpZ2l0ID0gMTsKKyAgICB9CisgICAgaWYgKCFzYXdfZGlnaXQpCisgICAgICAgIGdvdG8gaW52YWxpZDsKKworICAgIC8qCisgICAgICogT0ssIHRoZSBuZXh0IHRoaW5nIHNob3VsZCBiZSBcclxuLgorICAgICAqLworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgZ290byB0cnVuYzsKKyAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICBpZiAoKmJwICE9ICdccicpCisgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICBicCsrOworICAgIGxlbi0tOworICAgIGlmIChsZW4gPT0gMCkKKyAgICAgICAgZ290byB0cnVuYzsKKyAgICBORF9UQ0hFQ0soKmJwKTsKKyAgICBpZiAoKmJwICE9ICdcbicpCisgICAgICAgIGdvdG8gaW52YWxpZDsKKyAgICBicCsrOworICAgIGxlbi0tOworICAgICplbmRwID0gYnA7CisgICAgaWYgKG5lZykgeworICAgICAgICAvKiAtMSBtZWFucyAibnVsbCIsIGFueXRoaW5nIGVsc2UgaXMgaW52YWxpZCAqLworICAgICAgICBpZiAodG9vX2xhcmdlIHx8IHJlc3VsdCAhPSAxKQorICAgICAgICAgICAgcmV0dXJuICgtNCk7CisgICAgICAgIHJlc3VsdCA9IC0xOworICAgIH0KKyAgICByZXR1cm4gKHRvb19sYXJnZSA/IC0zIDogcmVzdWx0KTsKKwordHJ1bmM6CisgICAgcmV0dXJuICgtMik7CisKK2ludmFsaWQ6CisgICAgcmV0dXJuICgtNSk7Cit9CmRpZmYgLS1naXQgYS9wcmludC1yaXAuYyBiL3ByaW50LXJpcC5jCmluZGV4IGMxYjAzNmUuLmNmNjYxZDAgMTAwNjQ0Ci0tLSBhL3ByaW50LXJpcC5jCisrKyBiL3ByaW50LXJpcC5jCkBAIC0xOSwxOCArMTksMTkgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogUm91dGluZyBJbmZvcm1hdGlvbiBQcm90b2NvbCAoUklQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpbmNsdWRlICJhZi5oIgogCkBAIC0xMDIsMTQgKzEwMywxNCBAQAogCWZhbWlseSA9IEVYVFJBQ1RfMTZCSVRTKCZuaS0+cmlwX2ZhbWlseSk7CiAJaWYgKGZhbWlseSAhPSBCU0RfQUZOVU1fSU5FVCAmJiBmYW1pbHkgIT0gMCkgewogCQlORF9QUklOVCgobmRvLCAiXG5cdCBBRkkgJXMsICIsIHRvazJzdHIoYnNkX2FmX3ZhbHVlcywgIlVua25vd24gKCV1KSIsIGZhbWlseSkpKTsKLQkJcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKHVpbnQ4X3QgKikmbmktPnJpcF9mYW1pbHksICJcblx0ICAiLCBSSVBfUk9VVEVMRU4pOworCQlwcmludF91bmtub3duX2RhdGEobmRvLCAoY29uc3QgdWludDhfdCAqKSZuaS0+cmlwX2ZhbWlseSwgIlxuXHQgICIsIFJJUF9ST1VURUxFTik7CiAJCXJldHVybjsKIAl9CiAJaWYgKEVYVFJBQ1RfMTZCSVRTKCZuaS0+cmlwX3RhZykgfHwKIAkgICAgRVhUUkFDVF8zMkJJVFMoJm5pLT5yaXBfZGVzdF9tYXNrKSB8fAogCSAgICBFWFRSQUNUXzMyQklUUygmbmktPnJpcF9yb3V0ZXIpKSB7CiAJCS8qIE1CWiBmaWVsZHMgbm90IHplcm8gKi8KLSAgICAgICAgICAgICAgICBwcmludF91bmtub3duX2RhdGEobmRvLCAodWludDhfdCAqKSZuaS0+cmlwX2ZhbWlseSwgIlxuXHQgICIsIFJJUF9ST1VURUxFTik7CisgICAgICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmbmktPnJpcF9mYW1pbHksICJcblx0ICAiLCBSSVBfUk9VVEVMRU4pOwogCQlyZXR1cm47CiAJfQogCWlmIChmYW1pbHkgPT0gMCkgewpAQCAtMTMzLDMxICsxMzQsMzEgQEAKIAlpZiAoZmFtaWx5ID09IDB4RkZGRikgeyAvKiB2YXJpYWJsZS1zaXplZCBhdXRoZW50aWNhdGlvbiBzdHJ1Y3R1cmVzICovCiAJCXVpbnQxNl90IGF1dGhfdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKCZuaS0+cmlwX3RhZyk7CiAJCWlmIChhdXRoX3R5cGUgPT0gMikgewotCQkJcmVnaXN0ZXIgdV9jaGFyICpwID0gKHVfY2hhciAqKSZuaS0+cmlwX2Rlc3Q7CisJCQlyZWdpc3RlciBjb25zdCB1X2NoYXIgKnAgPSAoY29uc3QgdV9jaGFyICopJm5pLT5yaXBfZGVzdDsKIAkJCXVfaW50IGkgPSAwOwogCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIFNpbXBsZSBUZXh0IEF1dGhlbnRpY2F0aW9uIGRhdGE6ICIpKTsKIAkJCWZvciAoOyBpIDwgUklQX0FVVEhMRU47IHArKywgaSsrKQogCQkJCU5EX1BSSU5UKChuZG8sICIlYyIsIE5EX0lTUFJJTlQoKnApID8gKnAgOiAnLicpKTsKIAkJfSBlbHNlIGlmIChhdXRoX3R5cGUgPT0gMykgewogCQkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIEF1dGggaGVhZGVyOiIpKTsKLQkJCU5EX1BSSU5UKChuZG8sICIgUGFja2V0IExlbiAldSwiLCBFWFRSQUNUXzE2QklUUygodWludDhfdCAqKW5pICsgNCkpKTsKLQkJCU5EX1BSSU5UKChuZG8sICIgS2V5LUlEICV1LCIsICooKHVpbnQ4X3QgKiluaSArIDYpKSk7Ci0JCQlORF9QUklOVCgobmRvLCAiIEF1dGggRGF0YSBMZW4gJXUsIiwgKigodWludDhfdCAqKW5pICsgNykpKTsKKwkJCU5EX1BSSU5UKChuZG8sICIgUGFja2V0IExlbiAldSwiLCBFWFRSQUNUXzE2QklUUygoY29uc3QgdWludDhfdCAqKW5pICsgNCkpKTsKKwkJCU5EX1BSSU5UKChuZG8sICIgS2V5LUlEICV1LCIsICooKGNvbnN0IHVpbnQ4X3QgKiluaSArIDYpKSk7CisJCQlORF9QUklOVCgobmRvLCAiIEF1dGggRGF0YSBMZW4gJXUsIiwgKigoY29uc3QgdWludDhfdCAqKW5pICsgNykpKTsKIAkJCU5EX1BSSU5UKChuZG8sICIgU2VxTm8gJXUsIiwgRVhUUkFDVF8zMkJJVFMoJm5pLT5yaXBfZGVzdF9tYXNrKSkpOwogCQkJTkRfUFJJTlQoKG5kbywgIiBNQlogJXUsIiwgRVhUUkFDVF8zMkJJVFMoJm5pLT5yaXBfcm91dGVyKSkpOwogCQkJTkRfUFJJTlQoKG5kbywgIiBNQlogJXUiLCBFWFRSQUNUXzMyQklUUygmbmktPnJpcF9tZXRyaWMpKSk7CiAJCX0gZWxzZSBpZiAoYXV0aF90eXBlID09IDEpIHsKIAkJCU5EX1BSSU5UKChuZG8sICJcblx0ICBBdXRoIHRyYWlsZXI6IikpOwotCQkJcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKHVpbnQ4X3QgKikmbmktPnJpcF9kZXN0LCAiXG5cdCAgIiwgcmVtYWluaW5nKTsKKwkJCXByaW50X3Vua25vd25fZGF0YShuZG8sIChjb25zdCB1aW50OF90ICopJm5pLT5yaXBfZGVzdCwgIlxuXHQgICIsIHJlbWFpbmluZyk7CiAJCQlyZXR1cm4gcmVtYWluaW5nOyAvKiBBVCBzcGFucyB0aWxsIHRoZSBwYWNrZXQgZW5kICovCiAJCX0gZWxzZSB7CiAJCQlORF9QUklOVCgobmRvLCAiXG5cdCAgVW5rbm93biAoJXUpIEF1dGhlbnRpY2F0aW9uIGRhdGE6IiwKIAkJCSAgICAgICBFWFRSQUNUXzE2QklUUygmbmktPnJpcF90YWcpKSk7Ci0JCQlwcmludF91bmtub3duX2RhdGEobmRvLCAodWludDhfdCAqKSZuaS0+cmlwX2Rlc3QsICJcblx0ICAiLCByZW1haW5pbmcpOworCQkJcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmbmktPnJpcF9kZXN0LCAiXG5cdCAgIiwgcmVtYWluaW5nKTsKIAkJfQogCX0gZWxzZSBpZiAoZmFtaWx5ICE9IEJTRF9BRk5VTV9JTkVUICYmIGZhbWlseSAhPSAwKSB7CiAJCU5EX1BSSU5UKChuZG8sICJcblx0ICBBRkkgJXMiLCB0b2syc3RyKGJzZF9hZl92YWx1ZXMsICJVbmtub3duICgldSkiLCBmYW1pbHkpKSk7Ci0gICAgICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKHVpbnQ4X3QgKikmbmktPnJpcF90YWcsICJcblx0ICAiLCBSSVBfUk9VVEVMRU4tMik7CisgICAgICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKGNvbnN0IHVpbnQ4X3QgKikmbmktPnJpcF90YWcsICJcblx0ICAiLCBSSVBfUk9VVEVMRU4tMik7CiAJfSBlbHNlIHsgLyogQlNEX0FGTlVNX0lORVQgb3IgQUZJIDAgKi8KIAkJTkRfUFJJTlQoKG5kbywgIlxuXHQgIEFGSSAlcywgJTE1cy8lLTJkLCB0YWcgMHglMDR4LCBtZXRyaWM6ICV1LCBuZXh0LWhvcDogIiwKICAgICAgICAgICAgICAgICAgICAgICAgdG9rMnN0cihic2RfYWZfdmFsdWVzLCAiJXUiLCBmYW1pbHkpLApAQCAtMTk0LDcgKzE5NSw3IEBACiAJfQogCWkgLT0gc2l6ZW9mKCpycCk7CiAKLQlycCA9IChzdHJ1Y3QgcmlwICopZGF0OworCXJwID0gKGNvbnN0IHN0cnVjdCByaXAgKilkYXQ7CiAKIAlORF9QUklOVCgobmRvLCAiJXNSSVB2JXUiLAogICAgICAgICAgICAgICAgKG5kby0+bmRvX3ZmbGFnID49IDEpID8gIlxuXHQiIDogIiIsCkBAIC0yMTMsNyArMjE0LDcgQEAKIAkJICoKIAkJICogc28gcGVyaGFwcyB3ZSBzaG91bGQganVzdCBkdW1wIHRoZSBwYWNrZXQsIGluIGhleC4KIAkJICovCi0gICAgICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKHVpbnQ4X3QgKikmcnAtPnJpcF9jbWQsICJcblx0IiwgbGVuZ3RoKTsKKyAgICAgICAgICAgICAgICBwcmludF91bmtub3duX2RhdGEobmRvLCAoY29uc3QgdWludDhfdCAqKSZycC0+cmlwX2NtZCwgIlxuXHQiLCBsZW5ndGgpOwogCQlicmVhazsKIAlkZWZhdWx0OgogICAgICAgICAgICAgICAgIC8qIGR1bXAgdmVyc2lvbiBhbmQgbGV0cyBzZWUgaWYgd2Uga25vdyB0aGUgY29tbWFuZHMgbmFtZSovCkBAIC0yMzEsNyArMjMyLDcgQEAKIAkJY2FzZSBSSVBDTURfUkVTUE9OU0U6CiAJCQlqID0gbGVuZ3RoIC8gc2l6ZW9mKCpuaSk7CiAJCQlORF9QUklOVCgobmRvLCAiLCByb3V0ZXM6ICV1JXMiLCBqLCBycC0+cmlwX3ZlcnMgPT0gMiA/ICIgb3IgbGVzcyIgOiAiIikpOwotCQkJbmkgPSAoc3RydWN0IHJpcF9uZXRpbmZvICopKHJwICsgMSk7CisJCQluaSA9IChjb25zdCBzdHJ1Y3QgcmlwX25ldGluZm8gKikocnAgKyAxKTsKIAkJCWZvciAoOyBpID49IHNpemVvZigqbmkpOyArK25pKSB7CiAJCQkJaWYgKHJwLT5yaXBfdmVycyA9PSAxKQogCQkJCXsKQEAgLTI1NiwxNCArMjU3LDE0IEBACiAgICAgICAgICAgICAgICAgICAgIC8qIGZhbGwgdGhyb3VnaCAqLwogCSAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnIDw9IDEpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFwcmludF91bmtub3duX2RhdGEobmRvLCAodWludDhfdCAqKXJwLCAiXG5cdCIsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgICAgICAgICBpZighcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKGNvbnN0IHVpbnQ4X3QgKilycCwgIlxuXHQiLCBsZW5ndGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLyogZG8gd2Ugd2FudCB0byBzZWUgYW4gYWRkaXRpb25hbGx5IGhleGR1bXAgPyAqLwogICAgICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZz4gMSkgewotICAgICAgICAgICAgICAgICAgICBpZighcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKHVpbnQ4X3QgKilycCwgIlxuXHQiLCBsZW5ndGgpKQorICAgICAgICAgICAgICAgICAgICBpZighcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgKGNvbnN0IHVpbnQ4X3QgKilycCwgIlxuXHQiLCBsZW5ndGgpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvcHJpbnQtcmlwbmcuYyBiL3ByaW50LXJpcG5nLmMKaW5kZXggNGJjOTAwZC4uMjVlOWJiYyAxMDA2NDQKLS0tIGEvcHJpbnQtcmlwbmcuYworKysgYi9wcmludC1yaXBuZy5jCkBAIC0xOSwxNiArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogSVB2NiBSb3V0aW5nIEluZm9ybWF0aW9uIFByb3RvY29sIChSSVBuZykgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpZmRlZiBJTkVUNgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgotCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKQEAgLTEwOSw3ICsxMDgsNyBAQAogdm9pZAogcmlwbmdfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqZGF0LCB1bnNpZ25lZCBpbnQgbGVuZ3RoKQogewotCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCByaXA2ICpycCA9IChzdHJ1Y3QgcmlwNiAqKWRhdDsKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgcmlwNiAqcnAgPSAoY29uc3Qgc3RydWN0IHJpcDYgKilkYXQ7CiAJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IG5ldGluZm82ICpuaTsKIAlyZWdpc3RlciB1X2ludCBhbXQ7CiAJcmVnaXN0ZXIgdV9pbnQgaTsKQEAgLTE3Myw0ICsxNzIsMyBAQAogCWlmIChycC0+cmlwNl92ZXJzICE9IFJJUDZfVkVSU0lPTikKIAkJTkRfUFJJTlQoKG5kbywgIiBbdmVycyAlZF0iLCBycC0+cmlwNl92ZXJzKSk7CiB9Ci0jZW5kaWYgLyogSU5FVDYgKi8KZGlmZiAtLWdpdCBhL3ByaW50LXJwa2ktcnRyLmMgYi9wcmludC1ycGtpLXJ0ci5jCmluZGV4IDM0ZTIwNTcuLjc3ZTI5YzcgMTAwNjQ0Ci0tLSBhL3ByaW50LXJwa2ktcnRyLmMKKysrIGIvcHJpbnQtcnBraS1ydHIuYwpAQCAtMTIsMjQgKzEyLDI3IEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIHN1cHBvcnQgZm9yIHRoZSBUaGUgUlBLSS9Sb3V0ZXIgUHJvdG9jb2wgYXMgUkZDNjgxMAotICoKICAqIE9yaWdpbmFsIGNvZGUgYnkgSGFubmVzIEdyZWRsZXIgKGhhbm5lc0BqdW5pcGVyLm5ldCkKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBSZXNvdXJjZSBQdWJsaWMgS2V5IEluZnJhc3RydWN0dXJlIChSUEtJKSB0byBSb3V0ZXIgUHJvdG9jb2wgcHJpbnRlciAqLworCisvKiBzcGVjaWZpY2F0aW9uOiBSRkMgNjgxMCAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCitzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiW3xSUEtJLVJUUl0iOworCiAvKgogICogUlBLSS9Sb3V0ZXIgUERVIGhlYWRlcgogICoKQEAgLTE2OCwxNCArMTcxLDE0IEBACiAvKgogICogUHJpbnQgYSBzaW5nbGUgUERVLgogICovCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogcnBraV9ydHJfcGR1X3ByaW50IChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICp0cHRyLCB1X2ludCBpbmRlbnQpCiB7CiAgICAgY29uc3QgcnBraV9ydHJfcGR1ICpwZHVfaGVhZGVyOwogICAgIHVfaW50IHBkdV90eXBlLCBwZHVfbGVuLCBoZXhkdW1wOwogICAgIGNvbnN0IHVfY2hhciAqbXNnOwogCi0gICAgcGR1X2hlYWRlciA9IChycGtpX3J0cl9wZHUgKil0cHRyOworICAgIHBkdV9oZWFkZXIgPSAoY29uc3QgcnBraV9ydHJfcGR1ICopdHB0cjsKICAgICBwZHVfdHlwZSA9IHBkdV9oZWFkZXItPnBkdV90eXBlOwogICAgIHBkdV9sZW4gPSBFWFRSQUNUXzMyQklUUyhwZHVfaGVhZGVyLT5sZW5ndGgpOwogICAgIE5EX1RDSEVDSzIoKnRwdHIsIHBkdV9sZW4pOwpAQCAtMjIxLDkgKzIyNCw5IEBACiAKICAgICBjYXNlIFJQS0lfUlRSX0lQVjRfUFJFRklYX1BEVToKIAl7Ci0JICAgIHJwa2lfcnRyX3BkdV9pcHY0X3ByZWZpeCAqcGR1OworCSAgICBjb25zdCBycGtpX3J0cl9wZHVfaXB2NF9wcmVmaXggKnBkdTsKIAotCSAgICBwZHUgPSAocnBraV9ydHJfcGR1X2lwdjRfcHJlZml4ICopdHB0cjsKKwkgICAgcGR1ID0gKGNvbnN0IHJwa2lfcnRyX3BkdV9pcHY0X3ByZWZpeCAqKXRwdHI7CiAJICAgIE5EX1BSSU5UKChuZG8sICIlc0lQdjQgUHJlZml4ICVzLyV1LSV1LCBvcmlnaW4tYXMgJXUsIGZsYWdzIDB4JTAyeCIsCiAJCSAgIGluZGVudF9zdHJpbmcoaW5kZW50KzIpLAogCQkgICBpcGFkZHJfc3RyaW5nKG5kbywgcGR1LT5wcmVmaXgpLApAQCAtMjMyLDEyICsyMzUsMTEgQEAKIAl9CiAJYnJlYWs7CiAKLSNpZmRlZiBJTkVUNgogICAgIGNhc2UgUlBLSV9SVFJfSVBWNl9QUkVGSVhfUERVOgogCXsKLQkgICAgcnBraV9ydHJfcGR1X2lwdjZfcHJlZml4ICpwZHU7CisJICAgIGNvbnN0IHJwa2lfcnRyX3BkdV9pcHY2X3ByZWZpeCAqcGR1OwogCi0JICAgIHBkdSA9IChycGtpX3J0cl9wZHVfaXB2Nl9wcmVmaXggKil0cHRyOworCSAgICBwZHUgPSAoY29uc3QgcnBraV9ydHJfcGR1X2lwdjZfcHJlZml4ICopdHB0cjsKIAkgICAgTkRfUFJJTlQoKG5kbywgIiVzSVB2NiBQcmVmaXggJXMvJXUtJXUsIG9yaWdpbi1hcyAldSwgZmxhZ3MgMHglMDJ4IiwKIAkJICAgaW5kZW50X3N0cmluZyhpbmRlbnQrMiksCiAJCSAgIGlwNmFkZHJfc3RyaW5nKG5kbywgcGR1LT5wcmVmaXgpLApAQCAtMjQ1LDE0ICsyNDcsMTMgQEAKIAkJICAgRVhUUkFDVF8zMkJJVFMocGR1LT5hcyksIHBkdS0+ZmxhZ3MpKTsKIAl9CiAJYnJlYWs7Ci0jZW5kaWYKIAogICAgIGNhc2UgUlBLSV9SVFJfRVJST1JfUkVQT1JUX1BEVToKIAl7Ci0JICAgIHJwa2lfcnRyX3BkdV9lcnJvcl9yZXBvcnQgKnBkdTsKKwkgICAgY29uc3QgcnBraV9ydHJfcGR1X2Vycm9yX3JlcG9ydCAqcGR1OwogCSAgICB1X2ludCBlbmNhcHN1bGF0ZWRfcGR1X2xlbmd0aCwgdGV4dF9sZW5ndGgsIHRsZW4sIGVycm9yX2NvZGU7CiAKLQkgICAgcGR1ID0gKHJwa2lfcnRyX3BkdV9lcnJvcl9yZXBvcnQgKil0cHRyOworCSAgICBwZHUgPSAoY29uc3QgcnBraV9ydHJfcGR1X2Vycm9yX3JlcG9ydCAqKXRwdHI7CiAJICAgIGVuY2Fwc3VsYXRlZF9wZHVfbGVuZ3RoID0gRVhUUkFDVF8zMkJJVFMocGR1LT5lbmNhcHN1bGF0ZWRfcGR1X2xlbmd0aCk7CiAJICAgIE5EX1RDSEVDSzIoKnRwdHIsIGVuY2Fwc3VsYXRlZF9wZHVfbGVuZ3RoKTsKIAkgICAgdGxlbiA9IHBkdV9sZW47CkBAIC0yNzIsNyArMjczLDggQEAKIAkgICAgaWYgKGVuY2Fwc3VsYXRlZF9wZHVfbGVuZ3RoICYmCiAJCShlbmNhcHN1bGF0ZWRfcGR1X2xlbmd0aCA8PSB0bGVuKSkgewogCQlORF9QUklOVCgobmRvLCAiJXMtLS0tLWVuY2Fwc3VsYXRlZCBQRFUtLS0tLSIsIGluZGVudF9zdHJpbmcoaW5kZW50KzQpKSk7Ci0JCXJwa2lfcnRyX3BkdV9wcmludChuZG8sIHRwdHIsIGluZGVudCsyKTsKKwkJaWYgKHJwa2lfcnRyX3BkdV9wcmludChuZG8sIHRwdHIsIGluZGVudCsyKSkKKwkJCWdvdG8gdHJ1bmM7CiAJICAgIH0KIAogCSAgICB0cHRyICs9IGVuY2Fwc3VsYXRlZF9wZHVfbGVuZ3RoOwpAQCAtMjkwLDcgKzI5Miw4IEBACiAJICAgIE5EX1RDSEVDSzIoKnRwdHIsIHRleHRfbGVuZ3RoKTsKIAkgICAgaWYgKHRleHRfbGVuZ3RoICYmICh0ZXh0X2xlbmd0aCA8PSB0bGVuICkpIHsKIAkJTkRfUFJJTlQoKG5kbywgIiVzRXJyb3IgdGV4dDogIiwgaW5kZW50X3N0cmluZyhpbmRlbnQrMikpKTsKLQkJZm5fcHJpbnRuKG5kbywgdHB0ciwgdGV4dF9sZW5ndGgsIG5kby0+bmRvX3NuYXBlbmQpOworCQlpZiAoZm5fcHJpbnRuKG5kbywgdHB0ciwgdGV4dF9sZW5ndGgsIG5kby0+bmRvX3NuYXBlbmQpKQorCQkJZ290byB0cnVuYzsKIAkgICAgfQogCX0KIAlicmVhazsKQEAgLTMwNywxMSArMzEwLDEwIEBACiAgICAgaWYgKG5kby0+bmRvX3ZmbGFnID4gMSB8fCAobmRvLT5uZG9fdmZsYWcgJiYgaGV4ZHVtcCkpIHsKIAlwcmludF91bmtub3duX2RhdGEobmRvLHRwdHIsIlxuXHQgICIsIHBkdV9sZW4pOwogICAgIH0KLSAgICByZXR1cm47CisgICAgcmV0dXJuIDA7CiAKLSB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAifHRydW5jIikpOwotICAgIHJldHVybjsKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiB2b2lkCkBAIC0zMzMsNyArMzM1LDcgQEAKIAogICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBzaXplb2YocnBraV9ydHJfcGR1KSk7CiAKLQlwZHVfaGVhZGVyID0gKHJwa2lfcnRyX3BkdSAqKXRwdHI7CisJcGR1X2hlYWRlciA9IChjb25zdCBycGtpX3J0cl9wZHUgKil0cHRyOwogICAgICAgICBwZHVfdHlwZSA9IHBkdV9oZWFkZXItPnBkdV90eXBlOwogICAgICAgICBwZHVfbGVuID0gRVhUUkFDVF8zMkJJVFMocGR1X2hlYWRlci0+bGVuZ3RoKTsKICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgcGR1X2xlbik7CkBAIC0zNTAsMTQgKzM1MiwxNSBAQAogCS8qCiAJICogUHJpbnQgdGhlIFBEVS4KIAkgKi8KLQlycGtpX3J0cl9wZHVfcHJpbnQobmRvLCB0cHRyLCA4KTsKKwlpZiAocnBraV9ydHJfcGR1X3ByaW50KG5kbywgdHB0ciwgOCkpCisJCWdvdG8gdHJ1bmM7CiAKICAgICAgICAgdGxlbiAtPSBwZHVfbGVuOwogICAgICAgICB0cHRyICs9IHBkdV9sZW47CiAgICAgfQogICAgIHJldHVybjsKLSB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiXG5cdFt8UlBLSS1SVFJdIikpOwordHJ1bmM6CisgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQlcyIsIHRzdHIpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3ByaW50LXJyY3AuYyBiL3ByaW50LXJyY3AuYwppbmRleCAyMzcwZDljLi45MzZiM2VhIDEwMDY0NAotLS0gYS9wcmludC1ycmNwLmMKKysrIGIvcHJpbnQtcnJjcC5jCkBAIC0yMSwxNCArMjEsMTUgQEAKICAqIGFuZCBSZWFsdGVrIEVjaG8gUHJvdG9jb2wgKFJSQ1AtUkVQKSBwYWNrZXRzLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFJlYWx0ZWsgUmVtb3RlIENvbnRyb2wgUHJvdG9jb2wgKFJSQ1ApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiZXRoZXIuaCIKQEAgLTcyLDU2ICs3Myw1NCBAQAogdm9pZAogcnJjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKIAkgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqY3AsCi0JICB1X2ludCBsZW5ndGggX1VfKQorCSAgdV9pbnQgbGVuZ3RoIF9VXywKKwkgIGNvbnN0IHN0cnVjdCBsbGFkZHJfaW5mbyAqc3JjLAorCSAgY29uc3Qgc3RydWN0IGxsYWRkcl9pbmZvICpkc3QpCiB7Ci0JY29uc3QgdV9jaGFyICpycmNwOwogCXVpbnQ4X3QgcnJjcF9wcm90bzsKIAl1aW50OF90IHJyY3Bfb3Bjb2RlOwotCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBldGhlcl9oZWFkZXIgKmVwOwotCWNoYXIgcHJvdG9fc3RyWzE2XTsKLQljaGFyIG9wY29kZV9zdHJbMzJdOwogCi0JZXAgPSAoY29uc3Qgc3RydWN0IGV0aGVyX2hlYWRlciAqKWNwOwotCXJyY3AgPSBjcCArIEVUSEVSX0hEUkxFTjsKLQotCU5EX1RDSEVDSygqKHJyY3AgKyBSUkNQX1BST1RPX09GRlNFVCkpOwotCXJyY3BfcHJvdG8gPSAqKHJyY3AgKyBSUkNQX1BST1RPX09GRlNFVCk7Ci0JTkRfVENIRUNLKCoocnJjcCArIFJSQ1BfT1BDT0RFX0lTUkVQTFlfT0ZGU0VUKSk7Ci0JcnJjcF9vcGNvZGUgPSAoKihycmNwICsgUlJDUF9PUENPREVfSVNSRVBMWV9PRkZTRVQpKSAmIFJSQ1BfT1BDT0RFX01BU0s7Ci0gICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyA+ICVzLCAlcyAlcyIsCi0JCWV0aGVyYWRkcl9zdHJpbmcobmRvLCBFU1JDKGVwKSksCi0JCWV0aGVyYWRkcl9zdHJpbmcobmRvLCBFRFNUKGVwKSksCi0JCXRvazJzdHJidWYocHJvdG9fdmFsdWVzLCJSUkNQLTB4JTAyeCIscnJjcF9wcm90byxwcm90b19zdHIsc2l6ZW9mKHByb3RvX3N0cikpLAotCQkoKCoocnJjcCArIFJSQ1BfT1BDT0RFX0lTUkVQTFlfT0ZGU0VUKSkgJiBSUkNQX0lTUkVQTFkpID8gInJlcGx5IiA6ICJxdWVyeSIpKTsKKwlORF9UQ0hFQ0soKihjcCArIFJSQ1BfUFJPVE9fT0ZGU0VUKSk7CisJcnJjcF9wcm90byA9ICooY3AgKyBSUkNQX1BST1RPX09GRlNFVCk7CisJTkRfVENIRUNLKCooY3AgKyBSUkNQX09QQ09ERV9JU1JFUExZX09GRlNFVCkpOworCXJyY3Bfb3Bjb2RlID0gKCooY3AgKyBSUkNQX09QQ09ERV9JU1JFUExZX09GRlNFVCkpICYgUlJDUF9PUENPREVfTUFTSzsKKwlpZiAoc3JjICE9IE5VTEwgJiYgZHN0ICE9IE5VTEwpIHsKKwkJTkRfUFJJTlQoKG5kbywgIiVzID4gJXMsICIsCisJCQkoc3JjLT5hZGRyX3N0cmluZykobmRvLCBzcmMtPmFkZHIpLAorCQkJKGRzdC0+YWRkcl9zdHJpbmcpKG5kbywgZHN0LT5hZGRyKSkpOworCX0KKwlORF9QUklOVCgobmRvLCAiJXMgJXMiLAorCQl0b2syc3RyKHByb3RvX3ZhbHVlcywiUlJDUC0weCUwMngiLHJyY3BfcHJvdG8pLAorCQkoKCooY3AgKyBSUkNQX09QQ09ERV9JU1JFUExZX09GRlNFVCkpICYgUlJDUF9JU1JFUExZKSA/ICJyZXBseSIgOiAicXVlcnkiKSk7CiAJaWYgKHJyY3BfcHJvdG89PTEpewogICAgIAkgICAgTkRfUFJJTlQoKG5kbywgIjogJXMiLAotCQkgICAgIHRvazJzdHJidWYob3Bjb2RlX3ZhbHVlcywidW5rbm93biBvcGNvZGUgKDB4JTAyeCkiLHJyY3Bfb3Bjb2RlLG9wY29kZV9zdHIsc2l6ZW9mKG9wY29kZV9zdHIpKSkpOworCQkgICAgIHRvazJzdHIob3Bjb2RlX3ZhbHVlcywidW5rbm93biBvcGNvZGUgKDB4JTAyeCkiLHJyY3Bfb3Bjb2RlKSkpOwogCX0KIAlpZiAocnJjcF9vcGNvZGU9PTEgfHwgcnJjcF9vcGNvZGU9PTIpewotCSAgICBORF9UQ0hFQ0syKCoocnJjcCArIFJSQ1BfUkVHX0FERFJfT0ZGU0VUKSwgNik7CisJICAgIE5EX1RDSEVDSzIoKihjcCArIFJSQ1BfUkVHX0FERFJfT0ZGU0VUKSwgNik7CiAgICAgCSAgICBORF9QUklOVCgobmRvLCAiIGFkZHI9MHglMDR4LCBkYXRhPTB4JTA4eCIsCi0gICAgICAgICAgICAgICAgICAgICBFWFRSQUNUX0xFXzE2QklUUyhycmNwICsgUlJDUF9SRUdfQUREUl9PRkZTRVQpLAotICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF9MRV8zMkJJVFMocnJjcCArIFJSQ1BfUkVHX0RBVEFfT0ZGU0VUKSkpOworCQkgICAgIEVYVFJBQ1RfTEVfMTZCSVRTKGNwICsgUlJDUF9SRUdfQUREUl9PRkZTRVQpLAorCQkgICAgIEVYVFJBQ1RfTEVfMzJCSVRTKGNwICsgUlJDUF9SRUdfREFUQV9PRkZTRVQpKSk7CiAJfQogCWlmIChycmNwX3Byb3RvPT0xKXsKLQkgICAgTkRfVENIRUNLMigqKHJyY3AgKyBSUkNQX0FVVEhLRVlfT0ZGU0VUKSwgMik7CisJICAgIE5EX1RDSEVDSzIoKihjcCArIFJSQ1BfQVVUSEtFWV9PRkZTRVQpLCAyKTsKICAgICAJICAgIE5EX1BSSU5UKChuZG8sICIsIGF1dGg9MHglMDR4IiwKLQkJICBFWFRSQUNUXzE2QklUUyhycmNwICsgUlJDUF9BVVRIS0VZX09GRlNFVCkpKTsKKwkJICBFWFRSQUNUXzE2QklUUyhjcCArIFJSQ1BfQVVUSEtFWV9PRkZTRVQpKSk7CiAJfQogCWlmIChycmNwX3Byb3RvPT0xICYmIHJyY3Bfb3Bjb2RlPT0wICYmCi0JICAgICAoKCoocnJjcCArIFJSQ1BfT1BDT0RFX0lTUkVQTFlfT0ZGU0VUKSkgJiBSUkNQX0lTUkVQTFkpKXsKLQkgICAgTkRfVENIRUNLMigqKHJyY3AgKyBSUkNQX1ZFTkRPUl9JRF9PRkZTRVQpLCA0KTsKKwkgICAgICgoKihjcCArIFJSQ1BfT1BDT0RFX0lTUkVQTFlfT0ZGU0VUKSkgJiBSUkNQX0lTUkVQTFkpKXsKKwkgICAgTkRfVENIRUNLMigqKGNwICsgUlJDUF9WRU5ET1JfSURfT0ZGU0VUKSwgNCk7CiAJICAgIE5EX1BSSU5UKChuZG8sICIgZG93bmxpbmtfcG9ydD0lZCwgdXBsaW5rX3BvcnQ9JWQsIHVwbGlua19tYWM9JXMsIHZlbmRvcl9pZD0lMDh4ICxjaGlwX2lkPSUwNHggIiwKLQkJICAgICAqKHJyY3AgKyBSUkNQX0RPV05MSU5LX1BPUlRfT0ZGU0VUKSwKLQkJICAgICAqKHJyY3AgKyBSUkNQX1VQTElOS19QT1JUX09GRlNFVCksCi0JCSAgICAgZXRoZXJhZGRyX3N0cmluZyhuZG8sIHJyY3AgKyBSUkNQX1VQTElOS19NQUNfT0ZGU0VUKSwKLQkJICAgICBFWFRSQUNUXzMyQklUUyhycmNwICsgUlJDUF9WRU5ET1JfSURfT0ZGU0VUKSwKLQkJICAgICBFWFRSQUNUXzE2QklUUyhycmNwICsgUlJDUF9DSElQX0lEX09GRlNFVCkpKTsKKwkJICAgICAqKGNwICsgUlJDUF9ET1dOTElOS19QT1JUX09GRlNFVCksCisJCSAgICAgKihjcCArIFJSQ1BfVVBMSU5LX1BPUlRfT0ZGU0VUKSwKKwkJICAgICBldGhlcmFkZHJfc3RyaW5nKG5kbywgY3AgKyBSUkNQX1VQTElOS19NQUNfT0ZGU0VUKSwKKwkJICAgICBFWFRSQUNUXzMyQklUUyhjcCArIFJSQ1BfVkVORE9SX0lEX09GRlNFVCksCisJCSAgICAgRVhUUkFDVF8xNkJJVFMoY3AgKyBSUkNQX0NISVBfSURfT0ZGU0VUKSkpOwogCX1lbHNlIGlmIChycmNwX29wY29kZT09MSB8fCBycmNwX29wY29kZT09MiB8fCBycmNwX3Byb3RvPT0yKXsKLQkgICAgTkRfVENIRUNLMigqKHJyY3AgKyBSUkNQX0NPT0tJRTJfT0ZGU0VUKSwgNCk7CisJICAgIE5EX1RDSEVDSzIoKihjcCArIFJSQ1BfQ09PS0lFMl9PRkZTRVQpLCA0KTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIiwgY29va2llPTB4JTA4eCUwOHggIiwKLQkJICAgIEVYVFJBQ1RfMzJCSVRTKHJyY3AgKyBSUkNQX0NPT0tJRTJfT0ZGU0VUKSwKLQkJICAgIEVYVFJBQ1RfMzJCSVRTKHJyY3AgKyBSUkNQX0NPT0tJRTFfT0ZGU0VUKSkpOworCQkgICAgRVhUUkFDVF8zMkJJVFMoY3AgKyBSUkNQX0NPT0tJRTJfT0ZGU0VUKSwKKwkJICAgIEVYVFJBQ1RfMzJCSVRTKGNwICsgUlJDUF9DT09LSUUxX09GRlNFVCkpKTsKIAl9CiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9wcmludC1yc3ZwLmMgYi9wcmludC1yc3ZwLmMKaW5kZXggMjYzZWYzZC4uYmUzZGZhMyAxMDA2NDQKLS0tIGEvcHJpbnQtcnN2cC5jCisrKyBiL3ByaW50LXJzdnAuYwpAQCAtMTUsMTQgKzE1LDE1IEBACiAgKiBPcmlnaW5hbCBjb2RlIGJ5IEhhbm5lcyBHcmVkbGVyIChoYW5uZXNAanVuaXBlci5uZXQpCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogUmVzb3VyY2UgUmVTZXJWYXRpb24gUHJvdG9jb2wgKFJTVlApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCkBAIC0zMCw2ICszMSw4IEBACiAjaW5jbHVkZSAiYWYuaCIKICNpbmNsdWRlICJzaWduYXR1cmUuaCIKIAorc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfHJzdnBdIjsKKwogLyoKICAqIFJGQyAyMjA1IGNvbW1vbiBoZWFkZXIKICAqCkBAIC04Miw3ICs4NSw3IEBACiAjZGVmaW5lCVJTVlBfTVNHVFlQRV9QQVRIVEVBUiAgIDUKICNkZWZpbmUJUlNWUF9NU0dUWVBFX1JFU1ZURUFSICAgNgogI2RlZmluZQlSU1ZQX01TR1RZUEVfUkVTVkNPTkYgICA3Ci0jZGVmaW5lIFJTVlBfTVNHVFlQRV9BR0dSRUdBVEUgIDEyCisjZGVmaW5lIFJTVlBfTVNHVFlQRV9CVU5ETEUgICAgIDEyCiAjZGVmaW5lIFJTVlBfTVNHVFlQRV9BQ0sgICAgICAgIDEzCiAjZGVmaW5lIFJTVlBfTVNHVFlQRV9IRUxMT19PTEQgIDE0ICAgICAgLyogYW5jaWVudCBIZWxsb3MgKi8KICNkZWZpbmUgUlNWUF9NU0dUWVBFX1NSRUZSRVNIICAgMTUKQEAgLTk2LDcgKzk5LDcgQEAKICAgICB7IFJTVlBfTVNHVFlQRV9QQVRIVEVBUiwJIlBhdGhUZWFyIiB9LAogICAgIHsgUlNWUF9NU0dUWVBFX1JFU1ZURUFSLAkiUmVzdlRlYXIiIH0sCiAgICAgeyBSU1ZQX01TR1RZUEVfUkVTVkNPTkYsCSJSZXN2Q29uZiIgfSwKLSAgICB7IFJTVlBfTVNHVFlQRV9BR0dSRUdBVEUsCSJBZ2dyZWdhdGUiIH0sCisgICAgeyBSU1ZQX01TR1RZUEVfQlVORExFLAkiQnVuZGxlIiB9LAogICAgIHsgUlNWUF9NU0dUWVBFX0FDSywJICAgICAgICAiQWNrbm93bGVkZ2VtZW50IiB9LAogICAgIHsgUlNWUF9NU0dUWVBFX0hFTExPX09MRCwJIkhlbGxvIChPbGQpIiB9LAogICAgIHsgUlNWUF9NU0dUWVBFX1NSRUZSRVNILAkiUmVmcmVzaCIgfSwKQEAgLTQ5Nyw2ICs1MDAsNyBAQAogICAgIGlmIChvYmpfdGxlbiA8IDQpCiAgICAgICAgIHJldHVybiAwOwogICAgIHBhcmFtZXRlcl9pZCA9ICoodHB0cik7CisgICAgTkRfVENIRUNLMigqKHRwdHIgKyAyKSwgMik7CiAgICAgcGFyYW1ldGVyX2xlbmd0aCA9IEVYVFJBQ1RfMTZCSVRTKHRwdHIrMik8PDI7IC8qIGNvbnZlcnQgd29yZGNvdW50IHRvIGJ5dGVjb3VudCAqLwogCiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBQYXJhbWV0ZXIgSUQ6ICVzICgldSksIGxlbmd0aDogJXUsIEZsYWdzOiBbMHglMDJ4XSIsCkBAIC01MTcsOCArNTIxLDEwIEBACiAgICAgICAgICogfCAgICAgICAgSVMgaG9wIGNudCAoMzItYml0IHVuc2lnbmVkIGludGVnZXIpICAgICAgICAgICAgICAgICAgIHwKICAgICAgICAgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKwogICAgICAgICAqLwotICAgICAgICBpZiAocGFyYW1ldGVyX2xlbmd0aCA9PSA0KQorICAgICAgICBpZiAocGFyYW1ldGVyX2xlbmd0aCA9PSA0KSB7CisJICAgIE5EX1RDSEVDSzIoKih0cHRyICsgNCksIDQpOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdElTIGhvcCBjb3VudDogJXUiLCBFWFRSQUNUXzMyQklUUyh0cHRyICsgNCkpKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgNjoKQEAgLTUzMCw2ICs1MzYsNyBAQAogICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgICAgICAgICovCiAgICAgICAgIGlmIChwYXJhbWV0ZXJfbGVuZ3RoID09IDQpIHsKKwkgICAgTkRfVENIRUNLMigqKHRwdHIgKyA0KSwgNCk7CiAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cis0KTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRQYXRoIGIvdyBlc3RpbWF0ZTogJS4xMGcgTWJwcyIsIGJ3LmYgLyAxMjUwMDApKTsKICAgICAgICAgfQpAQCAtNTQ0LDYgKzU1MSw3IEBACiAgICAgICAgICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAgICAgICAgKi8KICAgICAgICAgaWYgKHBhcmFtZXRlcl9sZW5ndGggPT0gNCkgeworCSAgICBORF9UQ0hFQ0syKCoodHB0ciArIDQpLCA0KTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRNaW5pbXVtIHBhdGggbGF0ZW5jeTogIikpOwogICAgICAgICAgICAgaWYgKEVYVFJBQ1RfMzJCSVRTKHRwdHIrNCkgPT0gMHhmZmZmZmZmZikKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiZG9uJ3QgY2FyZSIpKTsKQEAgLTU2MSw4ICs1NjksMTAgQEAKICAgICAgICAgKiB8ICAgICAgQ29tcG9zZWQgTVRVICgzMi1iaXQgdW5zaWduZWQgaW50ZWdlcikgICAgICAgICAgICAgICAgICAgfAogICAgICAgICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgICAgICAgICovCi0gICAgICAgIGlmIChwYXJhbWV0ZXJfbGVuZ3RoID09IDQpCisgICAgICAgIGlmIChwYXJhbWV0ZXJfbGVuZ3RoID09IDQpIHsKKwkgICAgTkRfVENIRUNLMigqKHRwdHIgKyA0KSwgNCk7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0Q29tcG9zZWQgTVRVOiAldSBieXRlcyIsIEVYVFJBQ1RfMzJCSVRTKHRwdHIgKyA0KSkpOworICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgMTI3OgogICAgICAgIC8qCkBAIC01ODIsNiArNTkyLDcgQEAKICAgICAgICAgKi8KIAogICAgICAgICBpZiAocGFyYW1ldGVyX2xlbmd0aCA9PSAyMCkgeworCSAgICBORF9UQ0hFQ0syKCoodHB0ciArIDQpLCAyMCk7CiAgICAgICAgICAgICBidy5pID0gRVhUUkFDVF8zMkJJVFModHB0cis0KTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRUb2tlbiBCdWNrZXQgUmF0ZTogJS4xMGcgTWJwcyIsIGJ3LmYgLyAxMjUwMDApKTsKICAgICAgICAgICAgIGJ3LmkgPSBFWFRSQUNUXzMyQklUUyh0cHRyKzgpOwpAQCAtNjA1LDYgKzYxNiw3IEBACiAgICAgICAgICovCiAKICAgICAgICAgaWYgKHBhcmFtZXRlcl9sZW5ndGggPT0gOCkgeworCSAgICBORF9UQ0hFQ0syKCoodHB0ciArIDQpLCA4KTsKICAgICAgICAgICAgIGJ3LmkgPSBFWFRSQUNUXzMyQklUUyh0cHRyKzQpOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdFJhdGU6ICUuMTBnIE1icHMiLCBidy5mIC8gMTI1MDAwKSk7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0U2xhY2sgVGVybTogJXUiLCBFWFRSQUNUXzMyQklUUyh0cHRyICsgOCkpKTsKQEAgLTYxNSw4ICs2MjcsMTAgQEAKICAgICBjYXNlIDEzNDoKICAgICBjYXNlIDEzNToKICAgICBjYXNlIDEzNjoKLSAgICAgICAgaWYgKHBhcmFtZXRlcl9sZW5ndGggPT0gNCkKKyAgICAgICAgaWYgKHBhcmFtZXRlcl9sZW5ndGggPT0gNCkgeworCSAgICBORF9UQ0hFQ0syKCoodHB0ciArIDQpLCA0KTsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRWYWx1ZTogJXUiLCBFWFRSQUNUXzMyQklUUyh0cHRyICsgNCkpKTsKKyAgICAgICAgfQogICAgICAgICBicmVhazsKIAogICAgIGRlZmF1bHQ6CkBAIC02MjQsMjAgKzYzOCwyOSBAQAogICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0ciArIDQsICJcblx0XHQiLCBwYXJhbWV0ZXJfbGVuZ3RoKTsKICAgICB9CiAgICAgcmV0dXJuIChwYXJhbWV0ZXJfbGVuZ3RoKzQpOyAvKiBoZWFkZXIgbGVuZ3RoIDQgYnl0ZXMgKi8KKwordHJ1bmM6CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworICAgIHJldHVybiAwOworfQorCisvKgorICogQ2xlYXIgY2hlY2tzdW0gcHJpb3IgdG8gc2lnbmF0dXJlIHZlcmlmaWNhdGlvbi4KKyAqLworc3RhdGljIHZvaWQKK3JzdnBfY2xlYXJfY2hlY2tzdW0odm9pZCAqaGVhZGVyKQoreworICAgIHN0cnVjdCByc3ZwX2NvbW1vbl9oZWFkZXIgKnJzdnBfY29tX2hlYWRlciA9IChzdHJ1Y3QgcnN2cF9jb21tb25faGVhZGVyICopIGhlYWRlcjsKKworICAgIHJzdnBfY29tX2hlYWRlci0+Y2hlY2tzdW1bMF0gPSAwOworICAgIHJzdnBfY29tX2hlYWRlci0+Y2hlY2tzdW1bMV0gPSAwOwogfQogCiBzdGF0aWMgaW50CiByc3ZwX29ial9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnBwdHIKLSNpZm5kZWYgSEFWRV9MSUJDUllQVE8KLV9VXwotI2VuZGlmCi0sIHVfaW50IHBsZW4KLSNpZm5kZWYgSEFWRV9MSUJDUllQVE8KLV9VXwotI2VuZGlmCi0sIGNvbnN0IHVfY2hhciAqdHB0ciwKLSAgICAgICAgICAgICAgICBjb25zdCBjaGFyICppZGVudCwgdV9pbnQgdGxlbikKKyAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcHB0ciwgdV9pbnQgcGxlbiwgY29uc3QgdV9jaGFyICp0cHRyLAorICAgICAgICAgICAgICAgY29uc3QgY2hhciAqaWRlbnQsIHVfaW50IHRsZW4sCisgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnN2cF9jb21tb25faGVhZGVyICpyc3ZwX2NvbV9oZWFkZXIpCiB7CiAgICAgY29uc3Qgc3RydWN0IHJzdnBfb2JqZWN0X2hlYWRlciAqcnN2cF9vYmpfaGVhZGVyOwogICAgIGNvbnN0IHVfY2hhciAqb2JqX3RwdHI7CkBAIC03MjMsNyArNzQ2LDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09ODsKICAgICAgICAgICAgICAgICBvYmpfdHB0cis9ODsKICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgY2FzZSBSU1ZQX0NUWVBFX0lQVjY6CiAgICAgICAgICAgICAgICAgaWYgKG9ial90bGVuIDwgMjApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKQEAgLTc2Miw3ICs3ODQsNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT0yNjsKICAgICAgICAgICAgICAgICBvYmpfdHB0cis9MjY7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgIGNhc2UgUlNWUF9DVFlQRV8xMzogLyogSVB2NCBwMm1wIExTUCBUdW5uZWwgKi8KICAgICAgICAgICAgICAgICBpZiAob2JqX3RsZW4gPCAxMikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOwpAQCAtODAyLDcgKzgyMyw2IEBACiAgICAgICAgICAgICAgICAgb2JqX3RsZW4tPXNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPXNpemVvZihzdHJ1Y3QgaW5fYWRkcik7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jaWZkZWYgSU5FVDYKICAgICAgICAgICAgIGNhc2UgUlNWUF9DVFlQRV9JUFY2OgogICAgICAgICAgICAgICAgIGlmIChvYmpfdGxlbiA8IHNpemVvZihzdHJ1Y3QgaW42X2FkZHIpKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gLTE7CkBAIC04MTIsNyArODMyLDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09c2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPXNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsKICAgICAgICAgICAgIH0KQEAgLTgyOSw3ICs4NDgsNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT1zaXplb2Yoc3RydWN0IGluX2FkZHIpOwogICAgICAgICAgICAgICAgIG9ial90cHRyKz1zaXplb2Yoc3RydWN0IGluX2FkZHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfSVBWNjoKICAgICAgICAgICAgICAgICBpZiAob2JqX3RsZW4gPCBzaXplb2Yoc3RydWN0IGluNl9hZGRyKSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLTE7CkBAIC04MzksNyArODU3LDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09c2l6ZW9mKHN0cnVjdCBpbjZfYWRkcik7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPXNpemVvZihzdHJ1Y3QgaW42X2FkZHIpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsKICAgICAgICAgICAgIH0KQEAgLTkxNCw3ICs5MzEsNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT04OwogICAgICAgICAgICAgICAgIG9ial90cHRyKz04OwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfSVBWNjoKICAgICAgICAgICAgICAgICBpZiAob2JqX3RsZW4gPCAyMCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLTE7CkBAIC05MzksNyArOTU1LDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09NDA7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPTQwOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfVFVOTkVMX0lQVjQ6CiAgICAgICAgICAgICAgICAgaWYgKG9ial90bGVuIDwgOCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLTE7CkBAIC0xMDUxLDIwICsxMDY2LDM3IEBACiAgICAgICAgICAgICBzd2l0Y2gocnN2cF9vYmpfY3R5cGUpIHsKICAgICAgICAgICAgIGNhc2UgUlNWUF9DVFlQRV9JUFY0OgogICAgICAgICAgICAgICAgIHdoaWxlKG9ial90bGVuID49IDQgKSB7CisJCSAgICB1X2NoYXIgbGVuZ3RoOworCisJCSAgICBORF9UQ0hFQ0syKCpvYmpfdHB0ciwgNCk7CisJCSAgICBsZW5ndGggPSAqKG9ial90cHRyICsgMSk7CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyAgU3Vib2JqZWN0IFR5cGU6ICVzLCBsZW5ndGggJXUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0b2syc3RyKHJzdnBfb2JqX3hyb192YWx1ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJVbmtub3duICV1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUlNWUF9PQkpfWFJPX01BU0tfU1VCT0JKKCpvYmpfdHB0cikpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgKihvYmpfdHB0ciArIDEpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGgpKTsKIAotICAgICAgICAgICAgICAgICAgICBpZiAoKihvYmpfdHB0cisxKSA9PSAwKSB7IC8qIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgKi8KKyAgICAgICAgICAgICAgICAgICAgaWYgKGxlbmd0aCA9PSAwKSB7IC8qIHByZXZlbnQgaW5maW5pdGUgbG9vcHMgKi8KICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyAgRVJST1I6IHplcm8gbGVuZ3RoIEVSTyBzdWJ0eXBlIiwgaWRlbnQpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKFJTVlBfT0JKX1hST19NQVNLX1NVQk9CSigqb2JqX3RwdHIpKSB7CisJCSAgICB1X2NoYXIgcHJlZml4X2xlbmd0aDsKKwogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTVlBfT0JKX1hST19JUFY0OgorCQkJaWYgKGxlbmd0aCAhPSA4KSB7CisJCQkJTkRfUFJJTlQoKG5kbywgIiBFUlJPUjogbGVuZ3RoICE9IDgiKSk7CisJCQkJZ290byBpbnZhbGlkOworCQkJfQorCQkJTkRfVENIRUNLMigqb2JqX3RwdHIsIDgpOworCQkJcHJlZml4X2xlbmd0aCA9ICoob2JqX3RwdHIrNik7CisJCQlpZiAocHJlZml4X2xlbmd0aCAhPSAzMikgeworCQkJCU5EX1BSSU5UKChuZG8sICIgRVJST1I6IFByZWZpeCBsZW5ndGggJXUgIT0gMzIiLAorCQkJCQkgIHByZWZpeF9sZW5ndGgpKTsKKwkJCQlnb3RvIGludmFsaWQ7CisJCQl9CiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCAlcywgJXMvJXUsIEZsYWdzOiBbJXNdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSU1ZQX09CSl9YUk9fTUFTS19MT09TRSgqb2JqX3RwdHIpID8gIkxvb3NlIiA6ICJTdHJpY3QiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCBvYmpfdHB0cisyKSwKQEAgLTEwNzQsNiArMTEwNiwxMSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKG9ial90cHRyICsgNykpKSk7IC8qIHJmYzMyMDkgc2F5cyB0aGF0IHRoaXMgZmllbGQgaXMgcnN2ZC4gKi8KICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIGNhc2UgUlNWUF9PQkpfWFJPX0xBQkVMOgorCQkJaWYgKGxlbmd0aCAhPSA4KSB7CisJCQkJTkRfUFJJTlQoKG5kbywgIiBFUlJPUjogbGVuZ3RoICE9IDgiKSk7CisJCQkJZ290byBpbnZhbGlkOworCQkJfQorCQkJTkRfVENIRUNLMigqb2JqX3RwdHIsIDgpOwogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgRmxhZ3M6IFslc10gKCUjeCksIENsYXNzLVR5cGU6ICVzICgldSksICV1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaXR0b2syc3RyKHJzdnBfb2JqX3Jyb19sYWJlbF9mbGFnX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5vbmUiLApAQCAtMTE3OSw2ICsxMjE2LDkgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvazJzdHIoYWZfdmFsdWVzLCAiVW5rbm93biIsIGFmKSwgYWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdWJvYmpfbGVuKSk7CiAKKyAgICAgICAgICAgICAgICAgICAgaWYoc3Vib2JqX2xlbiA9PSAwKQorICAgICAgICAgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkOworCiAgICAgICAgICAgICAgICAgICAgIHN3aXRjaChzdWJvYmpfdHlwZSkgewogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTVlBfR0VOX1VOSV9TVUJPQkpfU09VUkNFX1ROQV9BRERSRVNTOgogICAgICAgICAgICAgICAgICAgICBjYXNlIFJTVlBfR0VOX1VOSV9TVUJPQkpfREVTVElOQVRJT05fVE5BX0FERFJFU1M6CkBAIC0xMTkwLDE0ICsxMjMwLDEyIEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzICAgIFVOSSBJUHY0IFROQSBhZGRyZXNzOiAlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkZW50LCBpcGFkZHJfc3RyaW5nKG5kbywgb2JqX3RwdHIgKyA0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFGTlVNX0lORVQ2OgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdWJvYmpfbGVuIDwgMjApCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMgICAgVU5JIElQdjYgVE5BIGFkZHJlc3M6ICVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWRlbnQsIGlwNmFkZHJfc3RyaW5nKG5kbywgb2JqX3RwdHIgKyA0KSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIEFGTlVNX05TQVA6CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1Ym9ial9sZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogdW5sZXNzIHdlIGhhdmUgYSBUTFYgcGFyc2VyIGxldHMganVzdCBoZXhkdW1wICovCkBAIC0xMjcxLDcgKzEzMDksNiBAQAogICAgICAgICAgICAgICAgIGlmIChvYmpfdGxlbikKICAgICAgICAgICAgICAgICAgICAgaGV4ZHVtcD1UUlVFOyAvKiB1bmxlc3Mgd2UgaGF2ZSBhIFRMViBwYXJzZXIgbGV0cyBqdXN0IGhleGR1bXAgKi8KICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgY2FzZSBSU1ZQX0NUWVBFXzQ6IC8qIGZhbGwgdGhyb3VnaCAtIEZJWE1FIGFkZCBUTFYgcGFyc2VyICovCiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfSVBWNjoKICAgICAgICAgICAgICAgICBpZiAob2JqX3RsZW4gPCAyMCkKQEAgLTEyODQsNyArMTMyMSw2IEBACiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPTIwOwogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsgLyogdW5sZXNzIHdlIGhhdmUgYSBUTFYgcGFyc2VyIGxldHMganVzdCBoZXhkdW1wICovCiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaGV4ZHVtcD1UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTM2MCw3ICsxMzk2LDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09ODsKICAgICAgICAgICAgICAgICBvYmpfdHB0cis9ODsKICAgICAgICAgICAgICAgICBicmVhazsKLSNpZmRlZiBJTkVUNgogICAgICAgICAgICAgY2FzZSBSU1ZQX0NUWVBFX0lQVjY6CiAgICAgICAgICAgICAgICAgaWYgKG9ial90bGVuIDwgMjApCiAgICAgICAgICAgICAgICAgICAgIHJldHVybi0xOwpAQCAtMTQwNSw3ICsxNDQwLDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09NDA7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPTQwOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfVFVOTkVMX0lQVjQ6CiAgICAgICAgICAgICAgICAgaWYgKG9ial90bGVuIDwgOCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLTE7CkBAIC0xNTQ3LDcgKzE1ODEsNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT04OwogICAgICAgICAgICAgICAgIG9ial90cHRyKz04OwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfNDogLyogZmFsbCB0aHJvdWdoIC0gRklYTUUgYWRkIFRMViBwYXJzZXIgKi8KICAgICAgICAgICAgIGNhc2UgUlNWUF9DVFlQRV9JUFY2OgogICAgICAgICAgICAgICAgIGlmIChvYmpfdGxlbiA8IDIwKQpAQCAtMTU3NCw3ICsxNjA3LDYgQEAKICAgICAgICAgICAgICAgICBvYmpfdGxlbi09MjA7CiAgICAgICAgICAgICAgICAgb2JqX3RwdHIrPTIwOwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2VuZGlmCiAgICAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgIGhleGR1bXA9VFJVRTsKICAgICAgICAgICAgIH0KQEAgLTE2NjQsMTIgKzE2OTYsMTAgQEAKICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMob2JqX3B0ci5yc3ZwX29ial9pbnRlZ3JpdHktPmRpZ2VzdCs4KSwKICAgICAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMob2JqX3B0ci5yc3ZwX29ial9pbnRlZ3JpdHktPmRpZ2VzdCArIDEyKSkpOwogCi0jaWZkZWYgSEFWRV9MSUJDUllQVE8KLSAgICAgICAgICAgICAgICBzaWdjaGVjayA9IHNpZ25hdHVyZV92ZXJpZnkobmRvLCBwcHRyLCBwbGVuLCAodW5zaWduZWQgY2hhciAqKW9ial9wdHIuXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2cF9vYmpfaW50ZWdyaXR5LT5kaWdlc3QpOwotI2Vsc2UKLSAgICAgICAgICAgICAgICBzaWdjaGVjayA9IENBTlRfQ0hFQ0tfU0lHTkFUVVJFOwotI2VuZGlmCisgICAgICAgICAgICAgICAgc2lnY2hlY2sgPSBzaWduYXR1cmVfdmVyaWZ5KG5kbywgcHB0ciwgcGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2JqX3B0ci5yc3ZwX29ial9pbnRlZ3JpdHktPmRpZ2VzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2cF9jbGVhcl9jaGVja3N1bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnN2cF9jb21faGVhZGVyKTsKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICglcykiLCB0b2syc3RyKHNpZ25hdHVyZV9jaGVja192YWx1ZXMsICJVbmtub3duIiwgc2lnY2hlY2spKSk7CiAKICAgICAgICAgICAgICAgICBvYmpfdGxlbis9c2l6ZW9mKHN0cnVjdCByc3ZwX29ial9pbnRlZ3JpdHlfdCk7CkBAIC0xNzUwLDcgKzE3ODAsNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT00OwogICAgICAgICAgICAgICAgIG9ial90cHRyKz00OwogICAgICAgICAgICAgICAgIGJyZWFrOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICBjYXNlIFJTVlBfQ1RZUEVfSVBWNjoKICAgICAgICAgICAgICAgICBpZiAob2JqX3RsZW4gPCAxNikKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuLTE7CkBAIC0xNzYwLDcgKzE3ODksNiBAQAogICAgICAgICAgICAgICAgIG9ial90bGVuLT0xNjsKICAgICAgICAgICAgICAgICBvYmpfdHB0cis9MTY7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0jZW5kaWYKICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgaGV4ZHVtcD1UUlVFOwogICAgICAgICAgICAgfQpAQCAtMTc4OCw4ICsxODE2LDEyIEBACiAgICAgICAgIHRsZW4tPXJzdnBfb2JqX2xlbjsKICAgICB9CiAgICAgcmV0dXJuIDA7CitpbnZhbGlkOgorICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIGlzdHIpKTsKKyAgICByZXR1cm4gLTE7CiB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBleGNlZWRlZCBzbmFwc2hvdCIpKTsKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IikpOworICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKICAgICByZXR1cm4gLTE7CiB9CiAKQEAgLTE3OTcsMTMgKzE4MjksMTMgQEAKIHJzdnBfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcHB0ciwgcmVnaXN0ZXIgdV9pbnQgbGVuKQogewotICAgIHN0cnVjdCByc3ZwX2NvbW1vbl9oZWFkZXIgKnJzdnBfY29tX2hlYWRlcjsKLSAgICBjb25zdCB1X2NoYXIgKnRwdHIsKnN1YnRwdHI7Ci0gICAgdV9zaG9ydCBwbGVuLCB0bGVuLCBzdWJ0bGVuOworICAgIGNvbnN0IHN0cnVjdCByc3ZwX2NvbW1vbl9oZWFkZXIgKnJzdnBfY29tX2hlYWRlcjsKKyAgICBjb25zdCB1X2NoYXIgKnRwdHI7CisgICAgdV9zaG9ydCBwbGVuLCB0bGVuOwogCiAgICAgdHB0cj1wcHRyOwogCi0gICAgcnN2cF9jb21faGVhZGVyID0gKHN0cnVjdCByc3ZwX2NvbW1vbl9oZWFkZXIgKilwcHRyOworICAgIHJzdnBfY29tX2hlYWRlciA9IChjb25zdCBzdHJ1Y3QgcnN2cF9jb21tb25faGVhZGVyICopcHB0cjsKICAgICBORF9UQ0hFQ0soKnJzdnBfY29tX2hlYWRlcik7CiAKICAgICAvKgpAQCAtMTgzNywxMiArMTg2OSw2IEBACiAgICAgICAgICAgIHJzdnBfY29tX2hlYWRlci0+dHRsLAogICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhyc3ZwX2NvbV9oZWFkZXItPmNoZWNrc3VtKSkpOwogCi0gICAgLyoKLSAgICAgKiBDbGVhciBjaGVja3N1bSBwcmlvciB0byBzaWduYXR1cmUgdmVyaWZpY2F0aW9uLgotICAgICAqLwotICAgIHJzdnBfY29tX2hlYWRlci0+Y2hlY2tzdW1bMF0gPSAwOwotICAgIHJzdnBfY29tX2hlYWRlci0+Y2hlY2tzdW1bMV0gPSAwOwotCiAgICAgaWYgKHRsZW4gPCBzaXplb2YoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlcikpIHsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkVSUk9SOiBjb21tb24gaGVhZGVyIHRvbyBzaG9ydCAldSA8ICVsdSIsIHRsZW4sCiAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZylzaXplb2YoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlcikpKTsKQEAgLTE4NTQsMTAgKzE4ODAsMTkgQEAKIAogICAgIHN3aXRjaChyc3ZwX2NvbV9oZWFkZXItPm1zZ190eXBlKSB7CiAKLSAgICBjYXNlIFJTVlBfTVNHVFlQRV9BR0dSRUdBVEU6CisgICAgY2FzZSBSU1ZQX01TR1RZUEVfQlVORExFOgorICAgICAgICAvKgorICAgICAgICAgKiBQcm9jZXNzIGVhY2ggc3VibWVzc2FnZSBpbiB0aGUgYnVuZGxlIG1lc3NhZ2UuCisgICAgICAgICAqIEJ1bmRsZSBtZXNzYWdlcyBtYXkgbm90IGNvbnRhaW4gYnVuZGxlIHN1Ym1lc3NhZ2VzLCBzbyB3ZSBkb24ndAorICAgICAgICAgKiBuZWVkIHRvIGhhbmRsZSBidW5kbGUgc3VibWVzc2FnZXMgc3BlY2lhbGx5LgorICAgICAgICAgKi8KICAgICAgICAgd2hpbGUodGxlbiA+IDApIHsKLSAgICAgICAgICAgIHN1YnRwdHI9dHB0cjsKLSAgICAgICAgICAgIHJzdnBfY29tX2hlYWRlciA9IChzdHJ1Y3QgcnN2cF9jb21tb25faGVhZGVyICopc3VidHB0cjsKKyAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqc3VicHB0cj10cHRyLCAqc3VidHB0cjsKKyAgICAgICAgICAgIHVfc2hvcnQgc3VicGxlbiwgc3VidGxlbjsKKworICAgICAgICAgICAgc3VidHB0cj1zdWJwcHRyOworCisgICAgICAgICAgICByc3ZwX2NvbV9oZWFkZXIgPSAoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlciAqKXN1YnBwdHI7CiAgICAgICAgICAgICBORF9UQ0hFQ0soKnJzdnBfY29tX2hlYWRlcik7CiAKICAgICAgICAgICAgIC8qCkBAIC0xODY4LDcgKzE5MDMsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICBSU1ZQX0VYVFJBQ1RfVkVSU0lPTihyc3ZwX2NvbV9oZWFkZXItPnZlcnNpb25fZmxhZ3MpKSk7CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3VidGxlbj1FWFRSQUNUXzE2QklUUyhyc3ZwX2NvbV9oZWFkZXItPmxlbmd0aCk7CisKKyAgICAgICAgICAgIHN1YnBsZW4gPSBzdWJ0bGVuID0gRVhUUkFDVF8xNkJJVFMocnN2cF9jb21faGVhZGVyLT5sZW5ndGgpOwogCiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgUlNWUHYldSAlcyBNZXNzYWdlICgldSksIEZsYWdzOiBbJXNdLCBsZW5ndGg6ICV1LCB0dGw6ICV1LCBjaGVja3N1bTogMHglMDR4IiwKICAgICAgICAgICAgICAgICAgICBSU1ZQX0VYVFJBQ1RfVkVSU0lPTihyc3ZwX2NvbV9oZWFkZXItPnZlcnNpb25fZmxhZ3MpLApAQCAtMTg3OSwxMiArMTkxNSw2IEBACiAgICAgICAgICAgICAgICAgICAgcnN2cF9jb21faGVhZGVyLT50dGwsCiAgICAgICAgICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMocnN2cF9jb21faGVhZGVyLT5jaGVja3N1bSkpKTsKIAotICAgICAgICAgICAgLyoKLSAgICAgICAgICAgICAqIENsZWFyIGNoZWNrc3VtIHByaW9yIHRvIHNpZ25hdHVyZSB2ZXJpZmljYXRpb24uCi0gICAgICAgICAgICAgKi8KLSAgICAgICAgICAgIHJzdnBfY29tX2hlYWRlci0+Y2hlY2tzdW1bMF0gPSAwOwotICAgICAgICAgICAgcnN2cF9jb21faGVhZGVyLT5jaGVja3N1bVsxXSA9IDA7Ci0KICAgICAgICAgICAgIGlmIChzdWJ0bGVuIDwgc2l6ZW9mKGNvbnN0IHN0cnVjdCByc3ZwX2NvbW1vbl9oZWFkZXIpKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkVSUk9SOiBjb21tb24gaGVhZGVyIHRvbyBzaG9ydCAldSA8ICVsdSIsIHN1YnRsZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKXNpemVvZihjb25zdCBzdHJ1Y3QgcnN2cF9jb21tb25faGVhZGVyKSkpOwpAQCAtMTkwMCw3ICsxOTMwLDEwIEBACiAgICAgICAgICAgICBzdWJ0cHRyKz1zaXplb2YoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlcik7CiAgICAgICAgICAgICBzdWJ0bGVuLT1zaXplb2YoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlcik7CiAKLSAgICAgICAgICAgIGlmIChyc3ZwX29ial9wcmludChuZG8sIHBwdHIsIHBsZW4sIHN1YnRwdHIsICJcblx0ICAgICIsIHN1YnRsZW4pID09IC0xKQorICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIFByaW50IGFsbCBvYmplY3RzIGluIHRoZSBzdWJtZXNzYWdlLgorICAgICAgICAgICAgICovCisgICAgICAgICAgICBpZiAocnN2cF9vYmpfcHJpbnQobmRvLCBzdWJwcHRyLCBzdWJwbGVuLCBzdWJ0cHRyLCAiXG5cdCAgICAiLCBzdWJ0bGVuLCByc3ZwX2NvbV9oZWFkZXIpID09IC0xKQogICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgdHB0cis9c3VidGxlbitzaXplb2YoY29uc3Qgc3RydWN0IHJzdnBfY29tbW9uX2hlYWRlcik7CkBAIC0xOTIwLDcgKzE5NTMsMTAgQEAKICAgICBjYXNlIFJTVlBfTVNHVFlQRV9IRUxMTzoKICAgICBjYXNlIFJTVlBfTVNHVFlQRV9BQ0s6CiAgICAgY2FzZSBSU1ZQX01TR1RZUEVfU1JFRlJFU0g6Ci0gICAgICAgIGlmIChyc3ZwX29ial9wcmludChuZG8sIHBwdHIsIHBsZW4sIHRwdHIsICJcblx0ICAiLCB0bGVuKSA9PSAtMSkKKyAgICAgICAgLyoKKyAgICAgICAgICogUHJpbnQgYWxsIG9iamVjdHMgaW4gdGhlIG1lc3NhZ2UuCisgICAgICAgICAqLworICAgICAgICBpZiAocnN2cF9vYmpfcHJpbnQobmRvLCBwcHRyLCBwbGVuLCB0cHRyLCAiXG5cdCAgIiwgdGxlbiwgcnN2cF9jb21faGVhZGVyKSA9PSAtMSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgYnJlYWs7CiAKQEAgLTE5MzEsNSArMTk2Nyw2IEBACiAKICAgICByZXR1cm47CiB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBleGNlZWRlZCBzbmFwc2hvdCIpKTsKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IikpOworICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LXJ0Ni5jIGIvcHJpbnQtcnQ2LmMKaW5kZXggM2Q1ZjllMy4uMzVkYmVkOSAxMDA2NDQKLS0tIGEvcHJpbnQtcnQ2LmMKKysrIGIvcHJpbnQtcnQ2LmMKQEAgLTE5LDIwICsxOSwxOSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJUHY2IHJvdXRpbmcgaGVhZGVyIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaWZkZWYgSU5FVDYKLQotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCiAjaW5jbHVkZSAiaXA2LmgiCiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtNDQsOSArNDMsOCBAQAogCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqZXA7CiAJaW50IGksIGxlbjsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgaW42X2FkZHIgKmFkZHI7Ci0JY29uc3Qgc3RydWN0IGluNl9hZGRyICpsYXN0X2FkZHIgPSBOVUxMOwogCi0JZHAgPSAoc3RydWN0IGlwNl9ydGhkciAqKWJwOworCWRwID0gKGNvbnN0IHN0cnVjdCBpcDZfcnRoZHIgKilicDsKIAlsZW4gPSBkcC0+aXA2cl9sZW47CiAKIAkvKiAnZXAnIHBvaW50cyB0byB0aGUgZW5kIG9mIGF2YWlsYWJsZSBkYXRhLiAqLwpAQCAtNTksMTUgKzU3LDkgQEAKIAlORF9QUklOVCgobmRvLCAiLCBzZWdsZWZ0PSVkIiwgZHAtPmlwNnJfc2VnbGVmdCkpOwogCiAJc3dpdGNoIChkcC0+aXA2cl90eXBlKSB7Ci0jaWZuZGVmIElQVjZfUlRIRFJfVFlQRV8wCi0jZGVmaW5lIElQVjZfUlRIRFJfVFlQRV8wIDAKLSNlbmRpZgotI2lmbmRlZiBJUFY2X1JUSERSX1RZUEVfMgotI2RlZmluZSBJUFY2X1JUSERSX1RZUEVfMiAyCi0jZW5kaWYKIAljYXNlIElQVjZfUlRIRFJfVFlQRV8wOgogCWNhc2UgSVBWNl9SVEhEUl9UWVBFXzI6CQkJLyogTW9iaWxlIElQdjYgSUQtMjAgKi8KLQkJZHAwID0gKHN0cnVjdCBpcDZfcnRoZHIwICopZHA7CisJCWRwMCA9IChjb25zdCBzdHJ1Y3QgaXA2X3J0aGRyMCAqKWRwOwogCiAJCU5EX1RDSEVDSyhkcDAtPmlwNnIwX3Jlc2VydmVkKTsKIAkJaWYgKGRwMC0+aXA2cjBfcmVzZXJ2ZWQgfHwgbmRvLT5uZG9fdmZsYWcpIHsKQEAgLTgwLDIxICs3MiwxMiBAQAogCQlsZW4gPj49IDE7CiAJCWFkZHIgPSAmZHAwLT5pcDZyMF9hZGRyWzBdOwogCQlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKLQkJCWlmICgodV9jaGFyICopKGFkZHIgKyAxKSA+IGVwKQorCQkJaWYgKChjb25zdCB1X2NoYXIgKikoYWRkciArIDEpID4gZXApCiAJCQkJZ290byB0cnVuYzsKIAogCQkJTkRfUFJJTlQoKG5kbywgIiwgWyVkXSVzIiwgaSwgaXA2YWRkcl9zdHJpbmcobmRvLCBhZGRyKSkpOwotCQkJbGFzdF9hZGRyID0gYWRkcjsKIAkJCWFkZHIrKzsKIAkJfQotCQkvKgotCQkgKiB0aGUgZGVzdGluYXRpb24gYWRkcmVzcyB1c2VkIGluIHRoZSBwc2V1ZG8taGVhZGVyIGlzIHRoYXQgb2YgdGhlIGZpbmFsCi0JCSAqIGRlc3RpbmF0aW9uIDogdGhlIGxhc3QgYWRkcmVzcyBvZiB0aGUgcm91dGluZyBoZWFkZXIKLQkJICovCi0JCWlmIChsYXN0X2FkZHIgIT0gTlVMTCkgewotCQkJc3RydWN0IGlwNl9oZHIgKmlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKLQkJCVVOQUxJR05FRF9NRU1DUFkoJmlwNi0+aXA2X2RzdCwgbGFzdF9hZGRyLCBzaXplb2YgKHN0cnVjdCBpbjZfYWRkcikpOwotCQl9CiAJCS8qKCovCiAJCU5EX1BSSU5UKChuZG8sICIpICIpKTsKIAkJcmV0dXJuKChkcDAtPmlwNnIwX2xlbiArIDEpIDw8IDMpOwpAQCAtMTA4LDQgKzkxLDMgQEAKIAlORF9QUklOVCgobmRvLCAiW3xzcmNydF0iKSk7CiAJcmV0dXJuIC0xOwogfQotI2VuZGlmIC8qIElORVQ2ICovCmRpZmYgLS1naXQgYS9wcmludC1ydHNwLmMgYi9wcmludC1ydHNwLmMKaW5kZXggZDcyMWI4ZC4uNTRjYzkzMCAxMDA2NDQKLS0tIGEvcHJpbnQtcnRzcC5jCisrKyBiL3ByaW50LXJ0c3AuYwpAQCAtMTEsMjEgKzExLDE4IEBACiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2lmbmRlZiBsaW50Ci1zdGF0aWMgY29uc3QgY2hhciByY3NpZFtdIF9VXyA9Ci0gICAgIkAoIykgJEhlYWRlciQiOwotI2VuZGlmCisvKiBcc3VtbWFyeTogUmVhbCBUaW1lIFN0cmVhbWluZyBQcm90b2NvbCAoUlRTUCkgcHJpbnRlciAqLwogCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnJ0c3BjbWRzW10gPSB7CmRpZmYgLS1naXQgYS9wcmludC1yeC5jIGIvcHJpbnQtcnguYwppbmRleCA4YTliYWJiLi5lYTNhNWU2IDEwMDY0NAotLS0gYS9wcmludC1yeC5jCisrKyBiL3ByaW50LXJ4LmMKQEAgLTIwLDYgKzIwLDkgQEAKICAqIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVECiAgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KKworLyogXHN1bW1hcnk6IEFGUyBSWCBwcmludGVyICovCisKIC8qCiAgKiBUaGlzIGNvZGUgdW5tYW5nbGVzIFJYIHBhY2tldHMuICBSWCBpcyB0aGUgbXV0YW50IGZvcm0gb2YgUlBDIHRoYXQgQUZTCiAgKiB1c2VzIHRvIGNvbW11bmljYXRlIGJldHdlZW4gY2xpZW50cyBhbmQgc2VydmVycy4KQEAgLTMyLDcgKzM1LDYgQEAKICAqIEtlbiBIb3Juc3RlaW4gPGtlbmhAY21mLm5ybC5uYXZ5Lm1pbD4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKQEAgLTQwLDkgKzQyLDkgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCkBAIC01MjIsOSArNTI0LDkgQEAKIHZvaWQKIHJ4X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCwgaW50IHNwb3J0LCBpbnQgZHBvcnQsCi0gICAgICAgICB1X2NoYXIgKmJwMikKKyAgICAgICAgIGNvbnN0IHVfY2hhciAqYnAyKQogewotCXJlZ2lzdGVyIHN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKKwlyZWdpc3RlciBjb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CiAJaW50IGk7CiAJaW50MzJfdCBvcGNvZGU7CiAKQEAgLTUzMyw3ICs1MzUsNyBAQAogCQlyZXR1cm47CiAJfQogCi0JcnhoID0gKHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CisJcnhoID0gKGNvbnN0IHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CiAKIAlORF9QUklOVCgobmRvLCAiIHJ4ICVzIiwgdG9rMnN0cihyeF90eXBlcywgInR5cGUgJWQiLCByeGgtPnR5cGUpKSk7CiAKQEAgLTY4OSw4ICs2OTEsOCBAQAogCQlyeF9jYWNoZV9uZXh0ID0gMDsKIAogCXJ4ZW50LT5jYWxsbnVtID0gcnhoLT5jYWxsTnVtYmVyOwotCXJ4ZW50LT5jbGllbnQgPSBpcC0+aXBfc3JjOwotCXJ4ZW50LT5zZXJ2ZXIgPSBpcC0+aXBfZHN0OworCVVOQUxJR05FRF9NRU1DUFkoJnJ4ZW50LT5jbGllbnQsICZpcC0+aXBfc3JjLCBzaXplb2YodWludDMyX3QpKTsKKwlVTkFMSUdORURfTUVNQ1BZKCZyeGVudC0+c2VydmVyLCAmaXAtPmlwX2RzdCwgc2l6ZW9mKHVpbnQzMl90KSk7CiAJcnhlbnQtPmRwb3J0ID0gZHBvcnQ7CiAJcnhlbnQtPnNlcnZpY2VJZCA9IHJ4aC0+c2VydmljZUlkOwogCXJ4ZW50LT5vcGNvZGUgPSBFWFRSQUNUXzMyQklUUyhicCArIHNpemVvZihzdHJ1Y3QgcnhfaGVhZGVyKSk7CkBAIC03MDksOCArNzExLDExIEBACiB7CiAJaW50IGk7CiAJc3RydWN0IHJ4X2NhY2hlX2VudHJ5ICpyeGVudDsKLQl1aW50MzJfdCBjbGlwID0gaXAtPmlwX2RzdC5zX2FkZHI7Ci0JdWludDMyX3Qgc2lwID0gaXAtPmlwX3NyYy5zX2FkZHI7CisJdWludDMyX3QgY2xpcDsKKwl1aW50MzJfdCBzaXA7CisKKwlVTkFMSUdORURfTUVNQ1BZKCZjbGlwLCAmaXAtPmlwX2RzdCwgc2l6ZW9mKHVpbnQzMl90KSk7CisJVU5BTElHTkVEX01FTUNQWSgmc2lwLCAmaXAtPmlwX3NyYywgc2l6ZW9mKHVpbnQzMl90KSk7CiAKIAkvKiBTdGFydCB0aGUgc2VhcmNoIHdoZXJlIHdlIGxhc3QgbGVmdCBvZmYgKi8KIApAQCAtNzUyLDYzICs3NTcsNjMgQEAKIAkJCU5EX1BSSU5UKChuZG8sICIgZmlkICVkLyVkLyVkIiwgKGludCkgbjEsIChpbnQpIG4yLCAoaW50KSBuMykpOyBcCiAJCX0KIAotI2RlZmluZSBTVFJPVVQoTUFYKSB7IHVuc2lnbmVkIGludCBpOyBcCisjZGVmaW5lIFNUUk9VVChNQVgpIHsgdW5zaWduZWQgaW50IF9pOyBcCiAJCQlORF9UQ0hFQ0syKGJwWzBdLCBzaXplb2YoaW50MzJfdCkpOyBcCi0JCQlpID0gRVhUUkFDVF8zMkJJVFMoYnApOyBcCi0JCQlpZiAoaSA+IChNQVgpKSBcCisJCQlfaSA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgXAorCQkJaWYgKF9pID4gKE1BWCkpIFwKIAkJCQlnb3RvIHRydW5jOyBcCiAJCQlicCArPSBzaXplb2YoaW50MzJfdCk7IFwKIAkJCU5EX1BSSU5UKChuZG8sICIgXCIiKSk7IFwKLQkJCWlmIChmbl9wcmludG4obmRvLCBicCwgaSwgbmRvLT5uZG9fc25hcGVuZCkpIFwKKwkJCWlmIChmbl9wcmludG4obmRvLCBicCwgX2ksIG5kby0+bmRvX3NuYXBlbmQpKSBcCiAJCQkJZ290byB0cnVuYzsgXAogCQkJTkRfUFJJTlQoKG5kbywgIlwiIikpOyBcCi0JCQlicCArPSAoKGkgKyBzaXplb2YoaW50MzJfdCkgLSAxKSAvIHNpemVvZihpbnQzMl90KSkgKiBzaXplb2YoaW50MzJfdCk7IFwKKwkJCWJwICs9ICgoX2kgKyBzaXplb2YoaW50MzJfdCkgLSAxKSAvIHNpemVvZihpbnQzMl90KSkgKiBzaXplb2YoaW50MzJfdCk7IFwKIAkJfQogCi0jZGVmaW5lIElOVE9VVCgpIHsgaW50IGk7IFwKKyNkZWZpbmUgSU5UT1VUKCkgeyBpbnQgX2k7IFwKIAkJCU5EX1RDSEVDSzIoYnBbMF0sIHNpemVvZihpbnQzMl90KSk7IFwKLQkJCWkgPSAoaW50KSBFWFRSQUNUXzMyQklUUyhicCk7IFwKKwkJCV9pID0gKGludCkgRVhUUkFDVF8zMkJJVFMoYnApOyBcCiAJCQlicCArPSBzaXplb2YoaW50MzJfdCk7IFwKLQkJCU5EX1BSSU5UKChuZG8sICIgJWQiLCBpKSk7IFwKKwkJCU5EX1BSSU5UKChuZG8sICIgJWQiLCBfaSkpOyBcCiAJCX0KIAotI2RlZmluZSBVSU5UT1VUKCkgeyB1bnNpZ25lZCBsb25nIGk7IFwKKyNkZWZpbmUgVUlOVE9VVCgpIHsgdW5zaWduZWQgbG9uZyBfaTsgXAogCQkJTkRfVENIRUNLMihicFswXSwgc2l6ZW9mKGludDMyX3QpKTsgXAotCQkJaSA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgXAorCQkJX2kgPSBFWFRSQUNUXzMyQklUUyhicCk7IFwKIAkJCWJwICs9IHNpemVvZihpbnQzMl90KTsgXAotCQkJTkRfUFJJTlQoKG5kbywgIiAlbHUiLCBpKSk7IFwKKwkJCU5EX1BSSU5UKChuZG8sICIgJWx1IiwgX2kpKTsgXAogCQl9CiAKLSNkZWZpbmUgVUlOVDY0T1VUKCkgeyB1aW50NjRfdCBpOyBcCisjZGVmaW5lIFVJTlQ2NE9VVCgpIHsgdWludDY0X3QgX2k7IFwKIAkJCU5EX1RDSEVDSzIoYnBbMF0sIHNpemVvZih1aW50NjRfdCkpOyBcCi0JCQlpID0gRVhUUkFDVF82NEJJVFMoYnApOyBcCisJCQlfaSA9IEVYVFJBQ1RfNjRCSVRTKGJwKTsgXAogCQkJYnAgKz0gc2l6ZW9mKHVpbnQ2NF90KTsgXAotCQkJTkRfUFJJTlQoKG5kbywgIiAlIiBQUkl1NjQsIGkpKTsgXAorCQkJTkRfUFJJTlQoKG5kbywgIiAlIiBQUkl1NjQsIF9pKSk7IFwKIAkJfQogCi0jZGVmaW5lIERBVEVPVVQoKSB7IHRpbWVfdCB0OyBzdHJ1Y3QgdG0gKnRtOyBjaGFyIHN0clsyNTZdOyBcCisjZGVmaW5lIERBVEVPVVQoKSB7IHRpbWVfdCBfdDsgc3RydWN0IHRtICp0bTsgY2hhciBzdHJbMjU2XTsgXAogCQkJTkRfVENIRUNLMihicFswXSwgc2l6ZW9mKGludDMyX3QpKTsgXAotCQkJdCA9ICh0aW1lX3QpIEVYVFJBQ1RfMzJCSVRTKGJwKTsgXAorCQkJX3QgPSAodGltZV90KSBFWFRSQUNUXzMyQklUUyhicCk7IFwKIAkJCWJwICs9IHNpemVvZihpbnQzMl90KTsgXAotCQkJdG0gPSBsb2NhbHRpbWUoJnQpOyBcCi0JCQlzdHJmdGltZShzdHIsIDI1NiwgIiVZLyVtLyVkICVUIiwgdG0pOyBcCisJCQl0bSA9IGxvY2FsdGltZSgmX3QpOyBcCisJCQlzdHJmdGltZShzdHIsIDI1NiwgIiVZLyVtLyVkICVIOiVNOiVTIiwgdG0pOyBcCiAJCQlORF9QUklOVCgobmRvLCAiICVzIiwgc3RyKSk7IFwKIAkJfQogCi0jZGVmaW5lIFNUT1JFQVRUUk9VVCgpIHsgdW5zaWduZWQgbG9uZyBtYXNrLCBpOyBcCisjZGVmaW5lIFNUT1JFQVRUUk9VVCgpIHsgdW5zaWduZWQgbG9uZyBtYXNrLCBfaTsgXAogCQkJTkRfVENIRUNLMihicFswXSwgKHNpemVvZihpbnQzMl90KSo2KSk7IFwKIAkJCW1hc2sgPSBFWFRSQUNUXzMyQklUUyhicCk7IGJwICs9IHNpemVvZihpbnQzMl90KTsgXAogCQkJaWYgKG1hc2spIE5EX1BSSU5UKChuZG8sICIgU3RvcmVTdGF0dXMiKSk7IFwKIAkJICAgICAgICBpZiAobWFzayAmIDEpIHsgTkRfUFJJTlQoKG5kbywgIiBkYXRlIikpOyBEQVRFT1VUKCk7IH0gXAogCQkJZWxzZSBicCArPSBzaXplb2YoaW50MzJfdCk7IFwKLQkJCWkgPSBFWFRSQUNUXzMyQklUUyhicCk7IGJwICs9IHNpemVvZihpbnQzMl90KTsgXAotCQkgICAgICAgIGlmIChtYXNrICYgMikgTkRfUFJJTlQoKG5kbywgIiBvd25lciAlbHUiLCBpKSk7ICBcCi0JCQlpID0gRVhUUkFDVF8zMkJJVFMoYnApOyBicCArPSBzaXplb2YoaW50MzJfdCk7IFwKLQkJICAgICAgICBpZiAobWFzayAmIDQpIE5EX1BSSU5UKChuZG8sICIgZ3JvdXAgJWx1IiwgaSkpOyBcCi0JCQlpID0gRVhUUkFDVF8zMkJJVFMoYnApOyBicCArPSBzaXplb2YoaW50MzJfdCk7IFwKLQkJICAgICAgICBpZiAobWFzayAmIDgpIE5EX1BSSU5UKChuZG8sICIgbW9kZSAlbG8iLCBpICYgMDc3NzcpKTsgXAotCQkJaSA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgYnAgKz0gc2l6ZW9mKGludDMyX3QpOyBcCi0JCSAgICAgICAgaWYgKG1hc2sgJiAxNikgTkRfUFJJTlQoKG5kbywgIiBzZWdzaXplICVsdSIsIGkpKTsgXAorCQkJX2kgPSBFWFRSQUNUXzMyQklUUyhicCk7IGJwICs9IHNpemVvZihpbnQzMl90KTsgXAorCQkgICAgICAgIGlmIChtYXNrICYgMikgTkRfUFJJTlQoKG5kbywgIiBvd25lciAlbHUiLCBfaSkpOyAgXAorCQkJX2kgPSBFWFRSQUNUXzMyQklUUyhicCk7IGJwICs9IHNpemVvZihpbnQzMl90KTsgXAorCQkgICAgICAgIGlmIChtYXNrICYgNCkgTkRfUFJJTlQoKG5kbywgIiBncm91cCAlbHUiLCBfaSkpOyBcCisJCQlfaSA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgYnAgKz0gc2l6ZW9mKGludDMyX3QpOyBcCisJCSAgICAgICAgaWYgKG1hc2sgJiA4KSBORF9QUklOVCgobmRvLCAiIG1vZGUgJWxvIiwgX2kgJiAwNzc3NykpOyBcCisJCQlfaSA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgYnAgKz0gc2l6ZW9mKGludDMyX3QpOyBcCisJCSAgICAgICAgaWYgKG1hc2sgJiAxNikgTkRfUFJJTlQoKG5kbywgIiBzZWdzaXplICVsdSIsIF9pKSk7IFwKIAkJCS8qIHVuZG9jdW1lbnRlZCBpbiAzLjMgZG9jdSAqLyBcCiAJCSAgICAgICAgaWYgKG1hc2sgJiAxMDI0KSBORF9QUklOVCgobmRvLCAiIGZzeW5jIikpOyAgXAogCQl9CkBAIC04MjIsNyArODI3LDcgQEAKIAkJCU5EX1BSSU5UKChuZG8sICIgJWQuJWQiLCBlcG9jaCwgY291bnRlcikpOyBcCiAJCX0KIAotI2RlZmluZSBBRlNVVUlET1VUKCkge3VpbnQzMl90IHRlbXA7IGludCBpOyBcCisjZGVmaW5lIEFGU1VVSURPVVQoKSB7dWludDMyX3QgdGVtcDsgaW50IF9pOyBcCiAJCQlORF9UQ0hFQ0syKGJwWzBdLCAxMSpzaXplb2YodWludDMyX3QpKTsgXAogCQkJdGVtcCA9IEVYVFJBQ1RfMzJCSVRTKGJwKTsgXAogCQkJYnAgKz0gc2l6ZW9mKHVpbnQzMl90KTsgXApAQCAtODMzLDcgKzgzOCw3IEBACiAJCQl0ZW1wID0gRVhUUkFDVF8zMkJJVFMoYnApOyBcCiAJCQlicCArPSBzaXplb2YodWludDMyX3QpOyBcCiAJCQlORF9QUklOVCgobmRvLCAiJTA0eCIsIHRlbXApKTsgXAotCQkJZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeyBcCisJCQlmb3IgKF9pID0gMDsgX2kgPCA4OyBfaSsrKSB7IFwKIAkJCQl0ZW1wID0gRVhUUkFDVF8zMkJJVFMoYnApOyBcCiAJCQkJYnAgKz0gc2l6ZW9mKHVpbnQzMl90KTsgXAogCQkJCU5EX1BSSU5UKChuZG8sICIlMDJ4IiwgKHVuc2lnbmVkIGNoYXIpIHRlbXApKTsgXApAQCAtOTUxLDcgKzk1Niw3IEBACiAJCQlicCArPSBzaXplb2YoaW50MzJfdCk7CiAJCQlORF9UQ0hFQ0syKGJwWzBdLCBpKTsKIAkJCWkgPSBtaW4oQUZTT1BBUVVFTUFYLCBpKTsKLQkJCXN0cm5jcHkoYSwgKGNoYXIgKikgYnAsIGkpOworCQkJc3RybmNweShhLCAoY29uc3QgY2hhciAqKSBicCwgaSk7CiAJCQlhW2ldID0gJ1wwJzsKIAkJCWFjbF9wcmludChuZG8sICh1X2NoYXIgKikgYSwgc2l6ZW9mKGEpLCAodV9jaGFyICopIGEgKyBpKTsKIAkJCWJyZWFrOwpAQCAtMTA1NCwxMiArMTA1OSwxMiBAQAogICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCwgaW50MzJfdCBvcGNvZGUpCiB7CiAJdW5zaWduZWQgbG9uZyBpOwotCXN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKKwljb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CiAKIAlpZiAobGVuZ3RoIDw9IChpbnQpc2l6ZW9mKHN0cnVjdCByeF9oZWFkZXIpKQogCQlyZXR1cm47CiAKLQlyeGggPSAoc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKKwlyeGggPSAoY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKIAogCS8qCiAJICogUHJpbnQgb3V0IHRoZSBhZnMgY2FsbCB3ZSdyZSBpbnZva2luZy4gIFRoZSB0YWJsZSB1c2VkIGhlcmUgd2FzCkBAIC0xMDg0LDcgKzEwODksNyBAQAogCQkJYnAgKz0gc2l6ZW9mKGludDMyX3QpOwogCQkJTkRfVENIRUNLMihicFswXSwgaSk7CiAJCQlpID0gbWluKEFGU09QQVFVRU1BWCwgaSk7Ci0JCQlzdHJuY3B5KGEsIChjaGFyICopIGJwLCBpKTsKKwkJCXN0cm5jcHkoYSwgKGNvbnN0IGNoYXIgKikgYnAsIGkpOwogCQkJYVtpXSA9ICdcMCc7CiAJCQlhY2xfcHJpbnQobmRvLCAodV9jaGFyICopIGEsIHNpemVvZihhKSwgKHVfY2hhciAqKSBhICsgaSk7CiAJCQlicmVhazsKQEAgLTExMDUsOCArMTExMCw2IEBACiAJCQk7CiAJCX0KIAl9IGVsc2UgaWYgKHJ4aC0+dHlwZSA9PSBSWF9QQUNLRVRfVFlQRV9BQk9SVCkgewotCQlpbnQgaTsKLQogCQkvKgogCQkgKiBPdGhlcndpc2UsIGp1c3QgcHJpbnQgb3V0IHRoZSByZXR1cm4gY29kZQogCQkgKi8KQEAgLTEyOTksMTIgKzEzMDIsMTIgQEAKIGNiX3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCwgaW50MzJfdCBvcGNvZGUpCiB7Ci0Jc3RydWN0IHJ4X2hlYWRlciAqcnhoOworCWNvbnN0IHN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKIAogCWlmIChsZW5ndGggPD0gKGludClzaXplb2Yoc3RydWN0IHJ4X2hlYWRlcikpCiAJCXJldHVybjsKIAotCXJ4aCA9IChzdHJ1Y3QgcnhfaGVhZGVyICopIGJwOworCXJ4aCA9IChjb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICopIGJwOwogCiAJLyoKIAkgKiBQcmludCBvdXQgdGhlIGFmcyBjYWxsIHdlJ3JlIGludm9raW5nLiAgVGhlIHRhYmxlIHVzZWQgaGVyZSB3YXMKQEAgLTE0OTMsMTMgKzE0OTYsMTMgQEAKIHByb3RfcmVwbHlfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIGludCBsZW5ndGgsIGludDMyX3Qgb3Bjb2RlKQogewotCXN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKKwljb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CiAJdW5zaWduZWQgbG9uZyBpOwogCiAJaWYgKGxlbmd0aCA8IChpbnQpc2l6ZW9mKHN0cnVjdCByeF9oZWFkZXIpKQogCQlyZXR1cm47CiAKLQlyeGggPSAoc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKKwlyeGggPSAoY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKIAogCS8qCiAJICogUHJpbnQgb3V0IHRoZSBhZnMgY2FsbCB3ZSdyZSBpbnZva2luZy4gIFRoZSB0YWJsZSB1c2VkIGhlcmUgd2FzCkBAIC0xNzAwLDEzICsxNzAzLDEzIEBACiB2bGRiX3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoLCBpbnQzMl90IG9wY29kZSkKIHsKLQlzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CisJY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqcnhoOwogCXVuc2lnbmVkIGxvbmcgaTsKIAogCWlmIChsZW5ndGggPCAoaW50KXNpemVvZihzdHJ1Y3QgcnhfaGVhZGVyKSkKIAkJcmV0dXJuOwogCi0JcnhoID0gKHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CisJcnhoID0gKGNvbnN0IHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CiAKIAkvKgogCSAqIFByaW50IG91dCB0aGUgYWZzIGNhbGwgd2UncmUgaW52b2tpbmcuICBUaGUgdGFibGUgdXNlZCBoZXJlIHdhcwpAQCAtMTc1Miw3ICsxNzU1LDcgQEAKIAkJCQlORF9UQ0hFQ0syKGJwWzBdLCBzaXplb2YoaW50MzJfdCkpOwogCQkJCWlmIChpIDwgbnNlcnZlcnMpCiAJCQkJCU5EX1BSSU5UKChuZG8sICIgJXMiLAotCQkJCQkgICBpbnRvYSgoKHN0cnVjdCBpbl9hZGRyICopIGJwKS0+c19hZGRyKSkpOworCQkJCQkgICBpbnRvYSgoKGNvbnN0IHN0cnVjdCBpbl9hZGRyICopIGJwKS0+c19hZGRyKSkpOwogCQkJCWJwICs9IHNpemVvZihpbnQzMl90KTsKIAkJCX0KIAkJCU5EX1BSSU5UKChuZG8sICIgcGFydGl0aW9ucyIpKTsKQEAgLTE3OTksNyArMTgwMiw3IEBACiAJCQkJTkRfVENIRUNLMihicFswXSwgc2l6ZW9mKGludDMyX3QpKTsKIAkJCQlpZiAoaSA8IG5zZXJ2ZXJzKQogCQkJCQlORF9QUklOVCgobmRvLCAiICVzIiwKLQkJCQkJICAgaW50b2EoKChzdHJ1Y3QgaW5fYWRkciAqKSBicCktPnNfYWRkcikpKTsKKwkJCQkJICAgaW50b2EoKChjb25zdCBzdHJ1Y3QgaW5fYWRkciAqKSBicCktPnNfYWRkcikpKTsKIAkJCQlicCArPSBzaXplb2YoaW50MzJfdCk7CiAJCQl9CiAJCQlORF9QUklOVCgobmRvLCAiIHBhcnRpdGlvbnMiKSk7CkBAIC0xOTIxLDcgKzE5MjQsNyBAQAogCWJwICs9IHNpemVvZihzdHJ1Y3QgcnhfaGVhZGVyKSArIDQ7CiAKIAlzd2l0Y2ggKGthdXRoX29wKSB7Ci0JCWNhc2UgMToJCS8qIEF1dGhlbnRpY2F0ZSBvbGQgKi87CisJCWNhc2UgMToJCS8qIEF1dGhlbnRpY2F0ZSBvbGQgKi8KIAkJY2FzZSAyMToJLyogQXV0aGVudGljYXRlICovCiAJCWNhc2UgMjI6CS8qIEF1dGhlbnRpY2F0ZS1WMiAqLwogCQljYXNlIDI6CQkvKiBDaGFuZ2UgUFcgKi8KQEAgLTE5ODIsMTIgKzE5ODUsMTIgQEAKIGthdXRoX3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgaW50IGxlbmd0aCwgaW50MzJfdCBvcGNvZGUpCiB7Ci0Jc3RydWN0IHJ4X2hlYWRlciAqcnhoOworCWNvbnN0IHN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKIAogCWlmIChsZW5ndGggPD0gKGludClzaXplb2Yoc3RydWN0IHJ4X2hlYWRlcikpCiAJCXJldHVybjsKIAotCXJ4aCA9IChzdHJ1Y3QgcnhfaGVhZGVyICopIGJwOworCXJ4aCA9IChjb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICopIGJwOwogCiAJLyoKIAkgKiBQcmludCBvdXQgdGhlIGFmcyBjYWxsIHdlJ3JlIGludm9raW5nLiAgVGhlIHRhYmxlIHVzZWQgaGVyZSB3YXMKQEAgLTIyMzYsMTIgKzIyMzksMTIgQEAKIHZvbF9yZXBseV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoLCBpbnQzMl90IG9wY29kZSkKIHsKLQlzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CisJY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqcnhoOwogCiAJaWYgKGxlbmd0aCA8PSAoaW50KXNpemVvZihzdHJ1Y3QgcnhfaGVhZGVyKSkKIAkJcmV0dXJuOwogCi0JcnhoID0gKHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CisJcnhoID0gKGNvbnN0IHN0cnVjdCByeF9oZWFkZXIgKikgYnA7CiAKIAkvKgogCSAqIFByaW50IG91dCB0aGUgYWZzIGNhbGwgd2UncmUgaW52b2tpbmcuICBUaGUgdGFibGUgdXNlZCBoZXJlIHdhcwpAQCAtMjQ2MywxMiArMjQ2NiwxMiBAQAogYm9zX3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIGludCBsZW5ndGgsIGludDMyX3Qgb3Bjb2RlKQogewotCXN0cnVjdCByeF9oZWFkZXIgKnJ4aDsKKwljb25zdCBzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CiAKIAlpZiAobGVuZ3RoIDw9IChpbnQpc2l6ZW9mKHN0cnVjdCByeF9oZWFkZXIpKQogCQlyZXR1cm47CiAKLQlyeGggPSAoc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKKwlyeGggPSAoY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKIAogCS8qCiAJICogUHJpbnQgb3V0IHRoZSBhZnMgY2FsbCB3ZSdyZSBpbnZva2luZy4gIFRoZSB0YWJsZSB1c2VkIGhlcmUgd2FzCkBAIC0yNjMyLDEyICsyNjM1LDEyIEBACiB1YmlrX3JlcGx5X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKmJwLCBpbnQgbGVuZ3RoLCBpbnQzMl90IG9wY29kZSkKIHsKLQlzdHJ1Y3QgcnhfaGVhZGVyICpyeGg7CisJY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqcnhoOwogCiAJaWYgKGxlbmd0aCA8IChpbnQpc2l6ZW9mKHN0cnVjdCByeF9oZWFkZXIpKQogCQlyZXR1cm47CiAKLQlyeGggPSAoc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKKwlyeGggPSAoY29uc3Qgc3RydWN0IHJ4X2hlYWRlciAqKSBicDsKIAogCS8qCiAJICogUHJpbnQgb3V0IHRoZSB1YmlrIGNhbGwgd2UncmUgaW52b2tpbmcuICBUaGlzIHRhYmxlIHdhcyBnbGVhbmVkCkBAIC0yNjk2LDcgKzI2OTksNyBAQAogcnhfYWNrX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqYnAsIGludCBsZW5ndGgpCiB7Ci0Jc3RydWN0IHJ4X2Fja1BhY2tldCAqcnhhOworCWNvbnN0IHN0cnVjdCByeF9hY2tQYWNrZXQgKnJ4YTsKIAlpbnQgaSwgc3RhcnQsIGxhc3Q7CiAJdWludDMyX3QgZmlyc3RQYWNrZXQ7CiAKQEAgLTI3MTUsNyArMjcxOCw3IEBACiAKIAlORF9UQ0hFQ0syKGJwWzBdLCBzaXplb2Yoc3RydWN0IHJ4X2Fja1BhY2tldCkgLSBSWF9NQVhBQ0tTKTsKIAotCXJ4YSA9IChzdHJ1Y3QgcnhfYWNrUGFja2V0ICopIGJwOworCXJ4YSA9IChjb25zdCBzdHJ1Y3QgcnhfYWNrUGFja2V0ICopIGJwOwogCWJwICs9IChzaXplb2Yoc3RydWN0IHJ4X2Fja1BhY2tldCkgLSBSWF9NQVhBQ0tTKTsKIAogCS8qCmRpZmYgLS1naXQgYS9wcmludC1zY3RwLmMgYi9wcmludC1zY3RwLmMKaW5kZXggNGI1OTVmMi4uZjYyNWRjZSAxMDA2NDQKLS0tIGEvcHJpbnQtc2N0cC5jCisrKyBiL3ByaW50LXNjdHAuYwpAQCAtMzMsMjAgKzMzLDE5IEBACiAgKiBTVUNIIERBTUFHRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBTdHJlYW0gQ29udHJvbCBUcmFuc21pc3Npb24gUHJvdG9jb2wgKFNDVFApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImlwLmgiCi0jaWZkZWYgSU5FVDYKICNpbmNsdWRlICJpcDYuaCIKLSNlbmRpZgogCiAvKiBEZWZpbml0aW9ucyBmcm9tOgogICoKQEAgLTQ5Niw0OCArNDk1LDM1IEBACiAgICAgICAgICAgICAgICAgY29uc3QgdV9jaGFyICpicDIsICAgICAgIC8qIGJlZ2lubmluZyBvZiBlbmNsb3NpbmcgKi8KICAgICAgICAgICAgICAgICB1X2ludCBzY3RwUGFja2V0TGVuZ3RoKSAgLyogaXAgcGFja2V0ICovCiB7CisgIHVfaW50IHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmc7CiAgIGNvbnN0IHN0cnVjdCBzY3RwSGVhZGVyICpzY3RwUGt0SGRyOwogICBjb25zdCBzdHJ1Y3QgaXAgKmlwOwotI2lmZGVmIElORVQ2CiAgIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKLSAgY29uc3Qgdm9pZCAqZW5kUGFja2V0UHRyOwogICB1X3Nob3J0IHNvdXJjZVBvcnQsIGRlc3RQb3J0OwogICBpbnQgY2h1bmtDb3VudDsKICAgY29uc3Qgc3RydWN0IHNjdHBDaHVua0Rlc2MgKmNodW5rRGVzY1B0cjsKLSAgY29uc3Qgdm9pZCAqbmV4dENodW5rOwogICBjb25zdCBjaGFyICpzZXA7CiAgIGludCBpc2ZvcmNlcyA9IDA7CiAKLQotICBzY3RwUGt0SGRyID0gKGNvbnN0IHN0cnVjdCBzY3RwSGVhZGVyKikgYnA7Ci0gIGVuZFBhY2tldFB0ciA9IChjb25zdCB1X2NoYXIqKXNjdHBQa3RIZHIrc2N0cFBhY2tldExlbmd0aDsKLQotICBpZiggKHVfbG9uZykgZW5kUGFja2V0UHRyID4gKHVfbG9uZykgbmRvLT5uZG9fc25hcGVuZCkKLSAgICBlbmRQYWNrZXRQdHIgPSAoY29uc3Qgdm9pZCAqKSBuZG8tPm5kb19zbmFwZW5kOwotICBpcCA9IChzdHJ1Y3QgaXAgKilicDI7Ci0jaWZkZWYgSU5FVDYKLSAgaWYgKElQX1YoaXApID09IDYpCi0gICAgaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnAyOwotICBlbHNlCi0gICAgaXA2ID0gTlVMTDsKLSNlbmRpZiAvKklORVQ2Ki8KLSAgTkRfVENIRUNLKCpzY3RwUGt0SGRyKTsKLQogICBpZiAoc2N0cFBhY2tldExlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2N0cEhlYWRlcikpCiAgICAgewogICAgICAgTkRfUFJJTlQoKG5kbywgInRydW5jYXRlZC1zY3RwIC0gJWxkIGJ5dGVzIG1pc3NpbmchIiwKLQkJICAgKGxvbmcpc2N0cFBhY2tldExlbmd0aC1zaXplb2Yoc3RydWN0IHNjdHBIZWFkZXIpKSk7CisJCSAgIChsb25nKShzaXplb2Yoc3RydWN0IHNjdHBIZWFkZXIpIC0gc2N0cFBhY2tldExlbmd0aCkpKTsKICAgICAgIHJldHVybjsKICAgICB9Ci0KLSAgLyogICAgc2N0cFBhY2tldExlbmd0aCAtPSBzaXplb2Yoc3RydWN0IHNjdHBIZWFkZXIpOyAgcGFja2V0IGxlbmd0aCAgKi8KLSAgLyogIAkJCSAgICAgIGlzIG5vdyBvbmx5IGFzIGxvbmcgYXMgdGhlIHBheWxvYWQgICovCisgIHNjdHBQa3RIZHIgPSAoY29uc3Qgc3RydWN0IHNjdHBIZWFkZXIqKSBicDsKKyAgTkRfVENIRUNLKCpzY3RwUGt0SGRyKTsKKyAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyA9IHNjdHBQYWNrZXRMZW5ndGg7CiAKICAgc291cmNlUG9ydCA9IEVYVFJBQ1RfMTZCSVRTKCZzY3RwUGt0SGRyLT5zb3VyY2UpOwogICBkZXN0UG9ydCA9IEVYVFJBQ1RfMTZCSVRTKCZzY3RwUGt0SGRyLT5kZXN0aW5hdGlvbik7CiAKLSNpZmRlZiBJTkVUNgorICBpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDI7CisgIGlmIChJUF9WKGlwKSA9PSA2KQorICAgIGlwNiA9IChjb25zdCBzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKKyAgZWxzZQorICAgIGlwNiA9IE5VTEw7CisKICAgaWYgKGlwNikgewogICAgIE5EX1BSSU5UKChuZG8sICIlcy4lZCA+ICVzLiVkOiBzY3RwIiwKICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X3NyYyksCkBAIC01NDUsNyArNTMxLDYgQEAKICAgICAgIGlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X2RzdCksCiAgICAgICBkZXN0UG9ydCkpOwogICB9IGVsc2UKLSNlbmRpZiAvKklORVQ2Ki8KICAgewogICAgIE5EX1BSSU5UKChuZG8sICIlcy4lZCA+ICVzLiVkOiBzY3RwIiwKICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX3NyYyksCkBAIC01NjMsNDAgKzU0OCw0OCBAQAogICAgICAgICAgaXNmb3JjZXMgPSAxOwogICB9CiAKKyAgYnAgKz0gc2l6ZW9mKHN0cnVjdCBzY3RwSGVhZGVyKTsKKyAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBzaXplb2Yoc3RydWN0IHNjdHBIZWFkZXIpOworCiAgIGlmIChuZG8tPm5kb192ZmxhZyA+PSAyKQogICAgIHNlcCA9ICJcblx0IjsKICAgZWxzZQogICAgIHNlcCA9ICIgKCI7CiAgIC8qIGN5Y2xlIHRocm91Z2ggYWxsIGNodW5rcywgcHJpbnRpbmcgaW5mb3JtYXRpb24gb24gZWFjaCBvbmUgKi8KLSAgZm9yIChjaHVua0NvdW50ID0gMCwKLQkgY2h1bmtEZXNjUHRyID0gKGNvbnN0IHN0cnVjdCBzY3RwQ2h1bmtEZXNjICopCi0JICAgICgoY29uc3QgdV9jaGFyKikgc2N0cFBrdEhkciArIHNpemVvZihzdHJ1Y3Qgc2N0cEhlYWRlcikpOwotICAgICAgIGNodW5rRGVzY1B0ciAhPSBOVUxMICYmCi0JICggKGNvbnN0IHZvaWQgKikKLQkgICAgKChjb25zdCB1X2NoYXIgKikgY2h1bmtEZXNjUHRyICsgc2l6ZW9mKHN0cnVjdCBzY3RwQ2h1bmtEZXNjKSkKLQkgICA8PSBlbmRQYWNrZXRQdHIpOwotCi0gICAgICAgY2h1bmtEZXNjUHRyID0gKGNvbnN0IHN0cnVjdCBzY3RwQ2h1bmtEZXNjICopIG5leHRDaHVuaywgY2h1bmtDb3VudCsrKQorICBmb3IgKGNodW5rQ291bnQgPSAwLCBjaHVua0Rlc2NQdHIgPSAoY29uc3Qgc3RydWN0IHNjdHBDaHVua0Rlc2MgKilicDsKKyAgICAgIHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgIT0gMDsKKyAgICAgIGNodW5rQ291bnQrKykKICAgICB7Ci0gICAgICB1aW50MTZfdCBjaHVua0xlbmd0aDsKLSAgICAgIGNvbnN0IHVfY2hhciAqY2h1bmtFbmQ7CisgICAgICB1aW50MTZfdCBjaHVua0xlbmd0aCwgY2h1bmtMZW5ndGhSZW1haW5pbmc7CiAgICAgICB1aW50MTZfdCBhbGlnbjsKIAorICAgICAgY2h1bmtEZXNjUHRyID0gKGNvbnN0IHN0cnVjdCBzY3RwQ2h1bmtEZXNjICopYnA7CisgICAgICBpZiAoc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqY2h1bmtEZXNjUHRyKSkgeworICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlZCkgW2NodW5rIGRlc2NyaXB0b3IgY3V0IG9mZiBhdCBlbmQgb2YgcGFja2V0XSIsIHNlcCwgY2h1bmtDb3VudCsxKSk7CisgICAgICAgIGJyZWFrOworICAgICAgfQogICAgICAgTkRfVENIRUNLKCpjaHVua0Rlc2NQdHIpOwogICAgICAgY2h1bmtMZW5ndGggPSBFWFRSQUNUXzE2QklUUygmY2h1bmtEZXNjUHRyLT5jaHVua0xlbmd0aCk7CiAgICAgICBpZiAoY2h1bmtMZW5ndGggPCBzaXplb2YoKmNodW5rRGVzY1B0cikpIHsKLSAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzJWQpIFtCYWQgY2h1bmsgbGVuZ3RoICV1XSIsIHNlcCwgY2h1bmtDb3VudCsxLCBjaHVua0xlbmd0aCkpOworICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlZCkgW0JhZCBjaHVuayBsZW5ndGggJXUsIDwgc2l6ZSBvZiBjaHVuayBkZXNjcmlwdG9yXSIsIHNlcCwgY2h1bmtDb3VudCsxLCBjaHVua0xlbmd0aCkpOwogICAgICAgICBicmVhazsKICAgICAgIH0KKyAgICAgIGNodW5rTGVuZ3RoUmVtYWluaW5nID0gY2h1bmtMZW5ndGg7CiAKLSAgICAgIE5EX1RDSEVDSzIoKigodWludDhfdCAqKWNodW5rRGVzY1B0ciksIGNodW5rTGVuZ3RoKTsKLSAgICAgIGNodW5rRW5kID0gKChjb25zdCB1X2NoYXIqKWNodW5rRGVzY1B0ciArIGNodW5rTGVuZ3RoKTsKLQotICAgICAgYWxpZ249Y2h1bmtMZW5ndGggJSA0OworICAgICAgYWxpZ24gPSBjaHVua0xlbmd0aCAlIDQ7CiAgICAgICBpZiAoYWxpZ24gIT0gMCkKIAlhbGlnbiA9IDQgLSBhbGlnbjsKIAotICAgICAgbmV4dENodW5rID0gKGNvbnN0IHZvaWQgKikgKGNodW5rRW5kICsgYWxpZ24pOworICAgICAgaWYgKHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgPCBhbGlnbikgeworICAgICAgICBORF9QUklOVCgobmRvLCAiJXMlZCkgW0JhZCBjaHVuayBsZW5ndGggJXUsID4gcmVtYWluaW5nIGRhdGEgaW4gcGFja2V0XSIsIHNlcCwgY2h1bmtDb3VudCsxLCBjaHVua0xlbmd0aCkpOworICAgICAgICBicmVhazsKKyAgICAgIH0KKworICAgICAgTkRfVENIRUNLMigqYnAsIGNodW5rTGVuZ3RoKTsKKworICAgICAgYnAgKz0gc2l6ZW9mKCpjaHVua0Rlc2NQdHIpOworICAgICAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmNodW5rRGVzY1B0cik7CisgICAgICBjaHVua0xlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmNodW5rRGVzY1B0cik7CiAKICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyVkKSAiLCBzZXAsIGNodW5rQ291bnQrMSkpOwogICAgICAgTkRfUFJJTlQoKG5kbywgIlslc10gIiwgdG9rMnN0cihzY3RwX2NodW5raWRfc3RyLCAiVW5rbm93biBjaHVuayB0eXBlOiAweCV4IiwKQEAgLTYwNyw3ICs2MDAsNiBAQAogCSAgewogCSAgICBjb25zdCBzdHJ1Y3Qgc2N0cERhdGFQYXJ0ICpkYXRhSGRyUHRyOwogCSAgICB1aW50MzJfdCBwcGlkOwotCSAgICBjb25zdCB1X2NoYXIgKnBheWxvYWRQdHI7CiAJICAgIHVfaW50IHBheWxvYWRfc2l6ZTsKIAogCSAgICBpZiAoKGNodW5rRGVzY1B0ci0+Y2h1bmtGbGcgJiBTQ1RQX0RBVEFfVU5PUkRFUkVEKQpAQCAtNjMyLDcgKzYyNCwxMSBAQAogCQkgPT0gU0NUUF9EQVRBX0xBU1RfRlJBRykgKQogCSAgICAgIE5EX1BSSU5UKChuZG8sICIgIikpOwogCi0JICAgIGRhdGFIZHJQdHI9KGNvbnN0IHN0cnVjdCBzY3RwRGF0YVBhcnQqKShjaHVua0Rlc2NQdHIrMSk7CisJICAgIGlmIChjaHVua0xlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqZGF0YUhkclB0cikpIHsKKwkJTkRfUFJJTlQoKG5kbywgImJvZ3VzIGNodW5rIGxlbmd0aCAldV0iLCBjaHVua0xlbmd0aCkpOworCQlyZXR1cm47CisJICAgIH0KKwkgICAgZGF0YUhkclB0cj0oY29uc3Qgc3RydWN0IHNjdHBEYXRhUGFydCopYnA7CiAKIAkgICAgcHBpZCA9IEVYVFJBQ1RfMzJCSVRTKCZkYXRhSGRyUHRyLT5wYXlsb2FkdHlwZSk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJbVFNOOiAldV0gIiwgRVhUUkFDVF8zMkJJVFMoJmRhdGFIZHJQdHItPlRTTikpKTsKQEAgLTY0Nyw3MCArNjQzLDkyIEBACiAJCSAgICAocHBpZCA9PSBTQ1RQX1BQSURfRk9SQ0VTX0xQKTsKIAkgICAgfQogCi0JICAgIHBheWxvYWRQdHIgPSAoY29uc3QgdV9jaGFyICopIChkYXRhSGRyUHRyICsgMSk7Ci0JICAgIGlmIChFWFRSQUNUXzE2QklUUygmY2h1bmtEZXNjUHRyLT5jaHVua0xlbmd0aCkgPAotCQkgICAgc2l6ZW9mKHN0cnVjdCBzY3RwRGF0YVBhcnQpICsgc2l6ZW9mKHN0cnVjdCBzY3RwQ2h1bmtEZXNjKSArIDEpIHsKLQkJTkRfUFJJTlQoKG5kbywgImJvZ3VzIGNodW5rIGxlbmd0aCAldV0iLCBFWFRSQUNUXzE2QklUUygmY2h1bmtEZXNjUHRyLT5jaHVua0xlbmd0aCkpKTsKKwkgICAgYnAgKz0gc2l6ZW9mKCpkYXRhSGRyUHRyKTsKKwkgICAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmRhdGFIZHJQdHIpOworCSAgICBjaHVua0xlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmRhdGFIZHJQdHIpOworCSAgICBwYXlsb2FkX3NpemUgPSBjaHVua0xlbmd0aFJlbWFpbmluZzsKKwkgICAgaWYgKHBheWxvYWRfc2l6ZSA9PSAwKSB7CisJCU5EX1BSSU5UKChuZG8sICJib2d1cyBjaHVuayBsZW5ndGggJXVdIiwgY2h1bmtMZW5ndGgpKTsKIAkJcmV0dXJuOwogCSAgICB9CiAKLQkgICAgcGF5bG9hZF9zaXplID0gRVhUUkFDVF8xNkJJVFMoJmNodW5rRGVzY1B0ci0+Y2h1bmtMZW5ndGgpIC0KLQkJKHNpemVvZihzdHJ1Y3Qgc2N0cERhdGFQYXJ0KSArIHNpemVvZihzdHJ1Y3Qgc2N0cENodW5rRGVzYykpOwotCiAJICAgIGlmIChpc2ZvcmNlcykgewotCQlmb3JjZXNfcHJpbnQobmRvLCBwYXlsb2FkUHRyLCBwYXlsb2FkX3NpemUpOworCQlmb3JjZXNfcHJpbnQobmRvLCBicCwgcGF5bG9hZF9zaXplKTsKIAkgICAgfSBlbHNlIGlmIChuZG8tPm5kb192ZmxhZyA+PSAyKSB7CS8qIGlmIHZlcmJvc2Ugb3V0cHV0IGlzIHNwZWNpZmllZCAqLwogCQkJCQkvKiBhdCB0aGUgY29tbWFuZCBsaW5lICovCiAJCXN3aXRjaCAocHBpZCkgewogCQljYXNlIFNDVFBfUFBJRF9NM1VBIDoKLQkJCW0zdWFfcHJpbnQobmRvLCBwYXlsb2FkUHRyLCBwYXlsb2FkX3NpemUpOworCQkJbTN1YV9wcmludChuZG8sIGJwLCBwYXlsb2FkX3NpemUpOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlORF9QUklOVCgobmRvLCAiW1BheWxvYWQiKSk7CiAJCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpIHsKIAkJCQlORF9QUklOVCgobmRvLCAiOiIpKTsKLQkJCQlORF9ERUZBVUxUUFJJTlQocGF5bG9hZFB0ciwgcGF5bG9hZF9zaXplKTsKKwkJCQlORF9ERUZBVUxUUFJJTlQoYnAsIHBheWxvYWRfc2l6ZSk7CiAJCQl9CiAJCQlORF9QUklOVCgobmRvLCAiXSIpKTsKIAkJCWJyZWFrOwogCQl9CiAJICAgIH0KKwkgICAgYnAgKz0gcGF5bG9hZF9zaXplOworCSAgICBzY3RwUGFja2V0TGVuZ3RoUmVtYWluaW5nIC09IHBheWxvYWRfc2l6ZTsKKwkgICAgY2h1bmtMZW5ndGhSZW1haW5pbmcgLT0gcGF5bG9hZF9zaXplOwogCSAgICBicmVhazsKIAkgIH0KIAljYXNlIFNDVFBfSU5JVElBVElPTiA6CiAJICB7CiAJICAgIGNvbnN0IHN0cnVjdCBzY3RwSW5pdGlhdGlvbiAqaW5pdDsKIAotCSAgICBpbml0PShjb25zdCBzdHJ1Y3Qgc2N0cEluaXRpYXRpb24qKShjaHVua0Rlc2NQdHIrMSk7CisJICAgIGlmIChjaHVua0xlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqaW5pdCkpIHsKKwkJTkRfUFJJTlQoKG5kbywgImJvZ3VzIGNodW5rIGxlbmd0aCAldV0iLCBjaHVua0xlbmd0aCkpOworCQlyZXR1cm47CisJICAgIH0KKwkgICAgaW5pdD0oY29uc3Qgc3RydWN0IHNjdHBJbml0aWF0aW9uKilicDsKIAkgICAgTkRfUFJJTlQoKG5kbywgIltpbml0IHRhZzogJXVdICIsIEVYVFJBQ1RfMzJCSVRTKCZpbml0LT5pbml0VGFnKSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW3J3bmQ6ICV1XSAiLCBFWFRSQUNUXzMyQklUUygmaW5pdC0+cmN2V2luZG93Q3JlZGl0KSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW09TOiAldV0gIiwgRVhUUkFDVF8xNkJJVFMoJmluaXQtPk51bVByZW9wZW5TdHJlYW1zKSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW01JUzogJXVdICIsIEVYVFJBQ1RfMTZCSVRTKCZpbml0LT5NYXhJbmJvdW5kU3RyZWFtcykpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIltpbml0IFRTTjogJXVdICIsIEVYVFJBQ1RfMzJCSVRTKCZpbml0LT5pbml0aWFsVFNOKSkpOworCSAgICBicCArPSBzaXplb2YoKmluaXQpOworIAkgICAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmluaXQpOworCSAgICBjaHVua0xlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmluaXQpOwogCi0jaWYoMCkgLyogQUxDIHlvdSBjYW4gYWRkIGNvZGUgZm9yIG9wdGlvbmFsIHBhcmFtcyBoZXJlICovCi0JICAgIGlmKCAoaW5pdCsxKSA8IGNodW5rRW5kICkKKyNpZiAwIC8qIEFMQyB5b3UgY2FuIGFkZCBjb2RlIGZvciBvcHRpb25hbCBwYXJhbXMgaGVyZSAqLworCSAgICBpZiggY2h1bmtMZW5ndGhSZW1haW5pbmcgIT0gMCApCiAJICAgICAgTkRfUFJJTlQoKG5kbywgIiBAQEBAQCBVTkZJTklTSEVEIEBAQEBAQCVzXG4iLAogCQkgICAgICJPcHRpb25hbCBwYXJhbXMgcHJlc2VudCwgYnV0IG5vdCBwcmludGVkLiIpKTsKICNlbmRpZgorICAgICAgICAgICAgYnAgKz0gY2h1bmtMZW5ndGhSZW1haW5pbmc7CisJICAgIHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgLT0gY2h1bmtMZW5ndGhSZW1haW5pbmc7CisgICAgICAgICAgICBjaHVua0xlbmd0aFJlbWFpbmluZyA9IDA7CiAJICAgIGJyZWFrOwogCSAgfQogCWNhc2UgU0NUUF9JTklUSUFUSU9OX0FDSyA6CiAJICB7CiAJICAgIGNvbnN0IHN0cnVjdCBzY3RwSW5pdGlhdGlvbiAqaW5pdDsKIAotCSAgICBpbml0PShjb25zdCBzdHJ1Y3Qgc2N0cEluaXRpYXRpb24qKShjaHVua0Rlc2NQdHIrMSk7CisJICAgIGlmIChjaHVua0xlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqaW5pdCkpIHsKKwkJTkRfUFJJTlQoKG5kbywgImJvZ3VzIGNodW5rIGxlbmd0aCAldV0iLCBjaHVua0xlbmd0aCkpOworCQlyZXR1cm47CisJICAgIH0KKwkgICAgaW5pdD0oY29uc3Qgc3RydWN0IHNjdHBJbml0aWF0aW9uKilicDsKIAkgICAgTkRfUFJJTlQoKG5kbywgIltpbml0IHRhZzogJXVdICIsIEVYVFJBQ1RfMzJCSVRTKCZpbml0LT5pbml0VGFnKSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW3J3bmQ6ICV1XSAiLCBFWFRSQUNUXzMyQklUUygmaW5pdC0+cmN2V2luZG93Q3JlZGl0KSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW09TOiAldV0gIiwgRVhUUkFDVF8xNkJJVFMoJmluaXQtPk51bVByZW9wZW5TdHJlYW1zKSkpOwogCSAgICBORF9QUklOVCgobmRvLCAiW01JUzogJXVdICIsIEVYVFJBQ1RfMTZCSVRTKCZpbml0LT5NYXhJbmJvdW5kU3RyZWFtcykpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIltpbml0IFRTTjogJXVdICIsIEVYVFJBQ1RfMzJCSVRTKCZpbml0LT5pbml0aWFsVFNOKSkpOworICAgICAgICAgICAgYnAgKz0gc2l6ZW9mKCppbml0KTsKKyAgICAgICAgICAgIHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgLT0gc2l6ZW9mKCppbml0KTsKKyAgICAgICAgICAgIGNodW5rTGVuZ3RoUmVtYWluaW5nIC09IHNpemVvZigqaW5pdCk7CiAKLSNpZigwKSAvKiBBTEMgeW91IGNhbiBhZGQgY29kZSBmb3Igb3B0aW9uYWwgcGFyYW1zIGhlcmUgKi8KLQkgICAgaWYoIChpbml0KzEpIDwgY2h1bmtFbmQgKQorI2lmIDAgLyogQUxDIHlvdSBjYW4gYWRkIGNvZGUgZm9yIG9wdGlvbmFsIHBhcmFtcyBoZXJlICovCisJICAgIGlmKCBjaHVua0xlbmd0aFJlbWFpbmluZyAhPSAwICkKIAkgICAgICBORF9QUklOVCgobmRvLCAiIEBAQEBAIFVORklOSVNIRUQgQEBAQEBAJXNcbiIsCiAJCSAgICAgIk9wdGlvbmFsIHBhcmFtcyBwcmVzZW50LCBidXQgbm90IHByaW50ZWQuIikpOwogI2VuZGlmCisgICAgICAgICAgICBicCArPSBjaHVua0xlbmd0aFJlbWFpbmluZzsKKwkgICAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBjaHVua0xlbmd0aFJlbWFpbmluZzsKKyAgICAgICAgICAgIGNodW5rTGVuZ3RoUmVtYWluaW5nID0gMDsKIAkgICAgYnJlYWs7CiAJICB9CiAJY2FzZSBTQ1RQX1NFTEVDVElWRV9BQ0s6CkBAIC03MjAsMzggKzczOCw3NyBAQAogCSAgICBpbnQgZnJhZ05vLCB0c25ObzsKIAkgICAgY29uc3QgdV9jaGFyICpkdXBUU047CiAKLQkgICAgc2Fjaz0oY29uc3Qgc3RydWN0IHNjdHBTZWxlY3RpdmVBY2sqKShjaHVua0Rlc2NQdHIrMSk7CisJICAgIGlmIChjaHVua0xlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqc2FjaykpIHsKKwkgICAgICBORF9QUklOVCgobmRvLCAiYm9ndXMgY2h1bmsgbGVuZ3RoICV1XSIsIGNodW5rTGVuZ3RoKSk7CisJICAgICAgcmV0dXJuOworCSAgICB9CisJICAgIHNhY2s9KGNvbnN0IHN0cnVjdCBzY3RwU2VsZWN0aXZlQWNrKilicDsKIAkgICAgTkRfUFJJTlQoKG5kbywgIltjdW0gYWNrICV1XSAiLCBFWFRSQUNUXzMyQklUUygmc2Fjay0+aGlnaGVzdENvbnNlcVRTTikpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlthX3J3bmQgJXVdICIsIEVYVFJBQ1RfMzJCSVRTKCZzYWNrLT51cGRhdGVkUnduZCkpKTsKIAkgICAgTkRfUFJJTlQoKG5kbywgIlsjZ2FwIGFja3MgJXVdICIsIEVYVFJBQ1RfMTZCSVRTKCZzYWNrLT5udW1iZXJPZmRlc2MpKSk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJbI2R1cCB0c25zICV1XSAiLCBFWFRSQUNUXzE2QklUUygmc2Fjay0+bnVtRHVwVHNucykpKTsKKyAgICAgICAgICAgIGJwICs9IHNpemVvZigqc2Fjayk7CisJICAgIHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgLT0gc2l6ZW9mKCpzYWNrKTsKKyAgICAgICAgICAgIGNodW5rTGVuZ3RoUmVtYWluaW5nIC09IHNpemVvZigqc2Fjayk7CiAKIAogCSAgICAvKiBwcmludCBnYXBzICovCi0JICAgIGZvciAoZnJhZyA9ICggKGNvbnN0IHN0cnVjdCBzY3RwU2VsZWN0aXZlRnJhZyAqKQotCQkJICAoKGNvbnN0IHN0cnVjdCBzY3RwU2VsZWN0aXZlQWNrICopIHNhY2srMSkpLAotCQkgICBmcmFnTm89MDsKLQkJIChjb25zdCB2b2lkICopZnJhZyA8IG5leHRDaHVuayAmJiBmcmFnTm8gPCBFWFRSQUNUXzE2QklUUygmc2Fjay0+bnVtYmVyT2ZkZXNjKTsKLQkJIGZyYWcrKywgZnJhZ05vKyspCisJICAgIGZvciAoZnJhZ05vPTA7CisJCSBjaHVua0xlbmd0aFJlbWFpbmluZyAhPSAwICYmIGZyYWdObyA8IEVYVFJBQ1RfMTZCSVRTKCZzYWNrLT5udW1iZXJPZmRlc2MpOworCQkgYnAgKz0gc2l6ZW9mKCpmcmFnKSwgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmZyYWcpLCBjaHVua0xlbmd0aFJlbWFpbmluZyAtPSBzaXplb2YoKmZyYWcpLCBmcmFnTm8rKykgeworCSAgICAgIGlmIChjaHVua0xlbmd0aFJlbWFpbmluZyA8IHNpemVvZigqZnJhZykpIHsKKwkJTkRfUFJJTlQoKG5kbywgImJvZ3VzIGNodW5rIGxlbmd0aCAldV0iLCBjaHVua0xlbmd0aCkpOworCQlyZXR1cm47CisJICAgICAgfQorCSAgICAgIGZyYWcgPSAoY29uc3Qgc3RydWN0IHNjdHBTZWxlY3RpdmVGcmFnICopYnA7CiAJICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdFtnYXAgYWNrIGJsb2NrICMlZDogc3RhcnQgPSAldSwgZW5kID0gJXVdICIsCiAJCSAgICAgZnJhZ05vKzEsCiAJCSAgICAgRVhUUkFDVF8zMkJJVFMoJnNhY2stPmhpZ2hlc3RDb25zZXFUU04pICsgRVhUUkFDVF8xNkJJVFMoJmZyYWctPmZyYWdtZW50U3RhcnQpLAogCQkgICAgIEVYVFJBQ1RfMzJCSVRTKCZzYWNrLT5oaWdoZXN0Q29uc2VxVFNOKSArIEVYVFJBQ1RfMTZCSVRTKCZmcmFnLT5mcmFnbWVudEVuZCkpKTsKLQorCSAgICB9CiAKIAkgICAgLyogcHJpbnQgZHVwbGljYXRlIFRTTnMgKi8KLQkgICAgZm9yIChkdXBUU04gPSAoY29uc3QgdV9jaGFyICopZnJhZywgdHNuTm89MDsKLQkJIChjb25zdCB2b2lkICopIGR1cFRTTiA8IG5leHRDaHVuayAmJiB0c25ObzxFWFRSQUNUXzE2QklUUygmc2Fjay0+bnVtRHVwVHNucyk7Ci0JCSBkdXBUU04gKz0gNCwgdHNuTm8rKykKKwkgICAgZm9yICh0c25Obz0wOworCQkgY2h1bmtMZW5ndGhSZW1haW5pbmcgIT0gMCAmJiB0c25ObzxFWFRSQUNUXzE2QklUUygmc2Fjay0+bnVtRHVwVHNucyk7CisJCSBicCArPSA0LCBzY3RwUGFja2V0TGVuZ3RoUmVtYWluaW5nIC09IDQsIGNodW5rTGVuZ3RoUmVtYWluaW5nIC09IDQsIHRzbk5vKyspIHsKKwkgICAgICBpZiAoY2h1bmtMZW5ndGhSZW1haW5pbmcgPCA0KSB7CisJCU5EX1BSSU5UKChuZG8sICJib2d1cyBjaHVuayBsZW5ndGggJXVdIiwgY2h1bmtMZW5ndGgpKTsKKwkJcmV0dXJuOworCSAgICAgIH0KKyAgICAgICAgICAgICAgZHVwVFNOID0gKGNvbnN0IHVfY2hhciAqKWJwOwogCSAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0XHRbZHVwIFRTTiAjJXU6ICV1XSAiLCB0c25ObysxLAotCSAgICAgICAgICBFWFRSQUNUXzMyQklUUyhkdXBUU04pKSk7Ci0KKwkgICAgICAgIEVYVFJBQ1RfMzJCSVRTKGR1cFRTTikpKTsKKwkgICAgfQorCSAgICBicmVhazsKKwkgIH0KKwlkZWZhdWx0IDoKKwkgIHsKKyAgICAgICAgICAgIGJwICs9IGNodW5rTGVuZ3RoUmVtYWluaW5nOworICAgICAgICAgICAgc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBjaHVua0xlbmd0aFJlbWFpbmluZzsKKyAgICAgICAgICAgIGNodW5rTGVuZ3RoUmVtYWluaW5nID0gMDsKIAkgICAgYnJlYWs7CiAJICB9CiAJfQogCi0JaWYgKG5kby0+bmRvX3ZmbGFnIDwgMikKLQkgIHNlcCA9ICIsICgiOworICAgICAgLyoKKyAgICAgICAqIEFueSBleHRyYSBzdHVmZiBhdCB0aGUgZW5kIG9mIHRoZSBjaHVuaz8KKyAgICAgICAqIFhYWCAtIHJlcG9ydCB0aGlzPworICAgICAgICovCisgICAgICBicCArPSBjaHVua0xlbmd0aFJlbWFpbmluZzsKKyAgICAgIHNjdHBQYWNrZXRMZW5ndGhSZW1haW5pbmcgLT0gY2h1bmtMZW5ndGhSZW1haW5pbmc7CisKKyAgICAgIGlmIChuZG8tPm5kb192ZmxhZyA8IDIpCisgICAgICAgIHNlcCA9ICIsICgiOworCisgICAgICBpZiAoYWxpZ24gIT0gMCkgeworCS8qCisJICogRmFpbCBpZiB0aGUgYWxpZ25tZW50IHBhZGRpbmcgaXNuJ3QgaW4gdGhlIGNhcHR1cmVkIGRhdGEuCisJICogT3RoZXJ3aXNlLCBza2lwIGl0LgorCSAqLworCU5EX1RDSEVDSzIoKmJwLCBhbGlnbik7CisJYnAgKz0gYWxpZ247CisJc2N0cFBhY2tldExlbmd0aFJlbWFpbmluZyAtPSBhbGlnbjsKKyAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuOwogCmRpZmYgLS1naXQgYS9wcmludC1zZmxvdy5jIGIvcHJpbnQtc2Zsb3cuYwppbmRleCAyNDExMmY0Li4zN2E0MWI1IDEwMDY0NAotLS0gYS9wcmludC1zZmxvdy5jCisrKyBiL3ByaW50LXNmbG93LmMKQEAgLTEyLDIxICsxMiwyMiBAQAogICogTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqCi0gKiBUaGUgU0ZMT1cgcHJvdG9jb2wgYXMgcGVyIGh0dHA6Ly93d3cuc2Zsb3cub3JnL2RldmVsb3BlcnMvc3BlY2lmaWNhdGlvbnMucGhwCi0gKgogICogT3JpZ2luYWwgY29kZSBieSBDYXJsZXMgS2lzaGltb3RvIDxjYXJsZXMua2lzaGltb3RvQGdtYWlsLmNvbT4KICAqCiAgKiBFeHBhbnNpb24gYW5kIHJlZmFjdG9yaW5nIGJ5IFJpY2sgSm9uZXMgPHJpY2suam9uZXMyQGhwLmNvbT4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBzRmxvdyBwcm90b2NvbCBwcmludGVyICovCisKKy8qIHNwZWNpZmljYXRpb246IGh0dHA6Ly93d3cuc2Zsb3cub3JnL2RldmVsb3BlcnMvc3BlY2lmaWNhdGlvbnMucGhwICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogCkBAIC0zMDQsOCArMzA1LDggQEAKICAgICBpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzZmxvd19nZW5lcmljX2NvdW50ZXJfdCkpCiAJcmV0dXJuIDE7CiAKLQogICAgIHNmbG93X2dlbl9jb3VudGVyID0gKGNvbnN0IHN0cnVjdCBzZmxvd19nZW5lcmljX2NvdW50ZXJfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd19nZW5fY291bnRlcik7CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpZmluZGV4ICV1LCBpZnR5cGUgJXUsIGlmc3BlZWQgJSIgUFJJdTY0ICIsIGlmZGlyZWN0aW9uICV1ICglcykiLAogCSAgIEVYVFJBQ1RfMzJCSVRTKHNmbG93X2dlbl9jb3VudGVyLT5pZmluZGV4KSwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19nZW5fY291bnRlci0+aWZ0eXBlKSwKQEAgLTMzOSw2ICszNDAsOSBAQAogCSAgIEVYVFJBQ1RfMzJCSVRTKHNmbG93X2dlbl9jb3VudGVyLT5pZnByb21pc2Ntb2RlKSkpOwogCiAgICAgcmV0dXJuIDA7CisKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50CkBAIC0zNTEsNiArMzU1LDcgQEAKIAlyZXR1cm4gMTsKIAogICAgIHNmbG93X2V0aF9jb3VudGVyID0gKGNvbnN0IHN0cnVjdCBzZmxvd19ldGhlcm5ldF9jb3VudGVyX3QgKilwb2ludGVyOworICAgIE5EX1RDSEVDSygqc2Zsb3dfZXRoX2NvdW50ZXIpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgYWxpZ24gZXJyb3JzICV1LCBmY3MgZXJyb3JzICV1LCBzaW5nbGUgY29sbGlzaW9uICV1LCBtdWx0aXBsZSBjb2xsaXNpb24gJXUsIHRlc3QgZXJyb3IgJXUiLAogCSAgIEVYVFJBQ1RfMzJCSVRTKHNmbG93X2V0aF9jb3VudGVyLT5hbGlnbmVycm9ycyksCiAJICAgRVhUUkFDVF8zMkJJVFMoc2Zsb3dfZXRoX2NvdW50ZXItPmZjc2Vycm9ycyksCkBAIC0zNjksNiArMzc0LDkgQEAKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19ldGhfY291bnRlci0+c3ltYm9sX2Vycm9ycykpKTsKIAogICAgIHJldHVybiAwOworCit0cnVuYzoKKyAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGludApAQCAtMzg4LDYgKzM5Niw3IEBACiAJcmV0dXJuIDE7CiAKICAgICBzZmxvd18xMDBiYXNldmdfY291bnRlciA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfMTAwYmFzZXZnX2NvdW50ZXJfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd18xMDBiYXNldmdfY291bnRlcik7CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgICBpbiBoaWdoIHByaW8gZnJhbWVzICV1LCBpbiBoaWdoIHByaW8gb2N0ZXRzICUiIFBSSXU2NCwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd18xMDBiYXNldmdfY291bnRlci0+aW5faGlnaHByaW9yaXR5X2ZyYW1lcyksCiAJICAgRVhUUkFDVF82NEJJVFMoc2Zsb3dfMTAwYmFzZXZnX2NvdW50ZXItPmluX2hpZ2hwcmlvcml0eV9vY3RldHMpKSk7CkBAIC00MTIsNiArNDIxLDkgQEAKIAkgICBFWFRSQUNUXzY0QklUUyhzZmxvd18xMDBiYXNldmdfY291bnRlci0+aGNfb3V0X2hpZ2hwcmlvcml0eV9vY3RldHMpKSk7CiAKICAgICByZXR1cm4gMDsKKwordHJ1bmM6CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTQyNCw2ICs0MzYsNyBAQAogCXJldHVybiAxOwogCiAgICAgc2Zsb3dfdmxhbl9jb3VudGVyID0gKGNvbnN0IHN0cnVjdCBzZmxvd192bGFuX2NvdW50ZXJfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd192bGFuX2NvdW50ZXIpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgdmxhbl9pZCAldSwgb2N0ZXRzICUiIFBSSXU2NAogCSAgICIsIHVuaWNhc3RfcGt0ICV1LCBtdWx0aWNhc3RfcGt0ICV1LCBicm9hZGNhc3RfcGt0ICV1LCBkaXNjYXJkcyAldSIsCiAJICAgRVhUUkFDVF8zMkJJVFMoc2Zsb3dfdmxhbl9jb3VudGVyLT52bGFuX2lkKSwKQEAgLTQzNCw2ICs0NDcsOSBAQAogCSAgIEVYVFJBQ1RfMzJCSVRTKHNmbG93X3ZsYW5fY291bnRlci0+ZGlzY2FyZHMpKSk7CiAKICAgICByZXR1cm4gMDsKKwordHJ1bmM6CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0cnVjdCBzZmxvd19wcm9jZXNzb3JfY291bnRlcl90IHsKQEAgLTQ1NCw2ICs0NzAsNyBAQAogCXJldHVybiAxOwogCiAgICAgc2Zsb3dfcHJvY2Vzc29yX2NvdW50ZXIgPSAoY29uc3Qgc3RydWN0IHNmbG93X3Byb2Nlc3Nvcl9jb3VudGVyX3QgKilwb2ludGVyOworICAgIE5EX1RDSEVDSygqc2Zsb3dfcHJvY2Vzc29yX2NvdW50ZXIpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgNXNlYyAldSwgMW1pbiAldSwgNW1pbiAldSwgdG90YWxfbWVtICUiIFBSSXU2NAogCSAgICIsIHRvdGFsX21lbSAlIiBQUkl1NjQsCiAJICAgRVhUUkFDVF8zMkJJVFMoc2Zsb3dfcHJvY2Vzc29yX2NvdW50ZXItPmZpdmVfc2VjX3V0aWwpLApAQCAtNDYzLDYgKzQ4MCw5IEBACiAJICAgRVhUUkFDVF82NEJJVFMoc2Zsb3dfcHJvY2Vzc29yX2NvdW50ZXItPmZyZWVfbWVtb3J5KSkpOwogCiAgICAgcmV0dXJuIDA7CisKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50CkBAIC00ODYsNiArNTA2LDcgQEAKIAlpZiAodGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2Zsb3dfY291bnRlcl9yZWNvcmRfdCkpCiAJICAgIHJldHVybiAxOwogCXNmbG93X2NvdW50ZXJfcmVjb3JkID0gKGNvbnN0IHN0cnVjdCBzZmxvd19jb3VudGVyX3JlY29yZF90ICopdHB0cjsKKwlORF9UQ0hFQ0soKnNmbG93X2NvdW50ZXJfcmVjb3JkKTsKIAogCWVudGVycHJpc2UgPSBFWFRSQUNUXzMyQklUUyhzZmxvd19jb3VudGVyX3JlY29yZC0+Zm9ybWF0KTsKIAljb3VudGVyX3R5cGUgPSBlbnRlcnByaXNlICYgMHgwRkZGOwpAQCAtNTQxLDYgKzU2Miw5IEBACiAgICAgfQogCiAgICAgcmV0dXJuIDA7CisKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50CkBAIC01NTMsMTEgKzU3NywxMSBAQAogICAgIHVfaW50ICAgICAgICAgICB0eXBlOwogICAgIHVfaW50ICAgICAgICAgICBpbmRleDsKIAotCiAgICAgaWYgKGxlbiA8IHNpemVvZihzdHJ1Y3Qgc2Zsb3dfY291bnRlcl9zYW1wbGVfdCkpCiAJcmV0dXJuIDE7CiAKICAgICBzZmxvd19jb3VudGVyX3NhbXBsZSA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfY291bnRlcl9zYW1wbGVfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd19jb3VudGVyX3NhbXBsZSk7CiAKICAgICB0eXBlc291cmNlID0gRVhUUkFDVF8zMkJJVFMoc2Zsb3dfY291bnRlcl9zYW1wbGUtPnR5cGVzb3VyY2UpOwogICAgIG5yZWNvcmRzICAgPSBFWFRSQUNUXzMyQklUUyhzZmxvd19jb3VudGVyX3NhbXBsZS0+cmVjb3Jkcyk7CkBAIC01NzQsNiArNTk4LDggQEAKIAkJCQkgICAgICAgbGVuIC0gc2l6ZW9mKHN0cnVjdCBzZmxvd19jb3VudGVyX3NhbXBsZV90KSwKIAkJCQkgICAgICAgbnJlY29yZHMpOwogCit0cnVuYzoKKyAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGludApAQCAtNTg4LDYgKzYxNCw3IEBACiAJcmV0dXJuIDE7CiAKICAgICBzZmxvd19leHBhbmRlZF9jb3VudGVyX3NhbXBsZSA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfZXhwYW5kZWRfY291bnRlcl9zYW1wbGVfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd19leHBhbmRlZF9jb3VudGVyX3NhbXBsZSk7CiAKICAgICBucmVjb3JkcyA9IEVYVFJBQ1RfMzJCSVRTKHNmbG93X2V4cGFuZGVkX2NvdW50ZXJfc2FtcGxlLT5yZWNvcmRzKTsKIApAQCAtNjAxLDYgKzYyOCw4IEBACiAJCQkJICAgICAgIGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2Zsb3dfZXhwYW5kZWRfY291bnRlcl9zYW1wbGVfdCksCiAJCQkJICAgICAgIG5yZWNvcmRzKTsKIAordHJ1bmM6CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTYxMyw2ICs2NDIsNyBAQAogCXJldHVybiAxOwogCiAgICAgc2Zsb3dfZmxvd19yYXcgPSAoY29uc3Qgc3RydWN0IHNmbG93X2V4cGFuZGVkX2Zsb3dfcmF3X3QgKilwb2ludGVyOworICAgIE5EX1RDSEVDSygqc2Zsb3dfZmxvd19yYXcpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgcHJvdG9jb2wgJXMgKCV1KSwgbGVuZ3RoICV1LCBzdHJpcHBlZCBieXRlcyAldSwgaGVhZGVyX3NpemUgJXUiLAogCSAgIHRvazJzdHIoc2Zsb3dfZmxvd19yYXdfcHJvdG9jb2xfdmFsdWVzLCJVbmtub3duIixFWFRSQUNUXzMyQklUUyhzZmxvd19mbG93X3Jhdy0+cHJvdG9jb2wpKSwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19mbG93X3Jhdy0+cHJvdG9jb2wpLApAQCAtNjI0LDYgKzY1NCw5IEBACiAgICAgICAgYXNzdW1pbmcgb2YgY291cnNlIHRoZXJlIGlzIHdub3VnaCBkYXRhIHByZXNlbnQgdG8gZG8gc28uLi4gKi8KIAogICAgIHJldHVybiAwOworCit0cnVuYzoKKyAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGludApAQCAtNjM2LDEyICs2NjksMTYgQEAKIAlyZXR1cm4gMTsKIAogICAgIHNmbG93X2V0aGVybmV0X2ZyYW1lID0gKGNvbnN0IHN0cnVjdCBzZmxvd19ldGhlcm5ldF9mcmFtZV90ICopcG9pbnRlcjsKKyAgICBORF9UQ0hFQ0soKnNmbG93X2V0aGVybmV0X2ZyYW1lKTsKIAogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgZnJhbWUgbGVuICV1LCB0eXBlICV1IiwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19ldGhlcm5ldF9mcmFtZS0+bGVuZ3RoKSwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19ldGhlcm5ldF9mcmFtZS0+dHlwZSkpKTsKIAogICAgIHJldHVybiAwOworCit0cnVuYzoKKyAgICByZXR1cm4gMTsKIH0KIAogc3RhdGljIGludApAQCAtNjU0LDYgKzY5MSw3IEBACiAJcmV0dXJuIDE7CiAKICAgICBzZmxvd19leHRlbmRlZF9zd19kYXRhID0gKGNvbnN0IHN0cnVjdCBzZmxvd19leHRlbmRlZF9zd2l0Y2hfZGF0YV90ICopcG9pbnRlcjsKKyAgICBORF9UQ0hFQ0soKnNmbG93X2V4dGVuZGVkX3N3X2RhdGEpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgICAgc3JjIHZsYW4gJXUsIHNyYyBwcmkgJXUsIGRzdCB2bGFuICV1LCBkc3QgcHJpICV1IiwKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19leHRlbmRlZF9zd19kYXRhLT5zcmNfdmxhbiksCiAJICAgRVhUUkFDVF8zMkJJVFMoc2Zsb3dfZXh0ZW5kZWRfc3dfZGF0YS0+c3JjX3ByaSksCkBAIC02NjEsNiArNjk5LDkgQEAKIAkgICBFWFRSQUNUXzMyQklUUyhzZmxvd19leHRlbmRlZF9zd19kYXRhLT5kc3RfcHJpKSkpOwogCiAgICAgcmV0dXJuIDA7CisKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50CkBAIC02ODUsNiArNzI2LDcgQEAKIAkgICAgcmV0dXJuIDE7CiAKIAlzZmxvd19mbG93X3JlY29yZCA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfZmxvd19yZWNvcmRfdCAqKXRwdHI7CisJTkRfVENIRUNLKCpzZmxvd19mbG93X3JlY29yZCk7CiAKIAkvKiBzbywgdGhlIGZ1bmt5IGVuY29kaW5nIG1lYW5zIHdlIGNhbm5vdCBibHl0aGx5IG1hc2stb2ZmCiAJICAgYml0cywgd2UgbXVzdCBhbHNvIGNoZWNrIHRoZSBlbnRlcnByaXNlLiAqLwpAQCAtNzQ3LDYgKzc4OSw5IEBACiAgICAgfQogCiAgICAgcmV0dXJuIDA7CisKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiBzdGF0aWMgaW50CkBAIC03NjIsNyArODA3LDggQEAKICAgICBpZiAobGVuIDwgc2l6ZW9mKHN0cnVjdCBzZmxvd19mbG93X3NhbXBsZV90KSkKIAlyZXR1cm4gMTsKIAotICAgIHNmbG93X2Zsb3dfc2FtcGxlID0gKHN0cnVjdCBzZmxvd19mbG93X3NhbXBsZV90ICopcG9pbnRlcjsKKyAgICBzZmxvd19mbG93X3NhbXBsZSA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfZmxvd19zYW1wbGVfdCAqKXBvaW50ZXI7CisgICAgTkRfVENIRUNLKCpzZmxvd19mbG93X3NhbXBsZSk7CiAKICAgICB0eXBlc291cmNlID0gRVhUUkFDVF8zMkJJVFMoc2Zsb3dfZmxvd19zYW1wbGUtPnR5cGVzb3VyY2UpOwogICAgIG5yZWNvcmRzID0gRVhUUkFDVF8zMkJJVFMoc2Zsb3dfZmxvd19zYW1wbGUtPnJlY29yZHMpOwpAQCAtNzg0LDYgKzgzMCw4IEBACiAJCQkJICAgIGxlbiAtIHNpemVvZihzdHJ1Y3Qgc2Zsb3dfZmxvd19zYW1wbGVfdCksCiAJCQkJICAgIG5yZWNvcmRzKTsKIAordHJ1bmM6CisgICAgcmV0dXJuIDE7CiB9CiAKIHN0YXRpYyBpbnQKQEAgLTc5Nyw2ICs4NDUsNyBAQAogCXJldHVybiAxOwogCiAgICAgc2Zsb3dfZXhwYW5kZWRfZmxvd19zYW1wbGUgPSAoY29uc3Qgc3RydWN0IHNmbG93X2V4cGFuZGVkX2Zsb3dfc2FtcGxlX3QgKilwb2ludGVyOworICAgIE5EX1RDSEVDSygqc2Zsb3dfZXhwYW5kZWRfZmxvd19zYW1wbGUpOwogCiAgICAgbnJlY29yZHMgPSBFWFRSQUNUXzMyQklUUyhzZmxvd19leHBhbmRlZF9mbG93X3NhbXBsZS0+cmVjb3Jkcyk7CiAKQEAgLTgxMyw2ICs4NjIsOCBAQAogCQkJCSAgICBsZW4gLSBzaXplb2Yoc3RydWN0IHNmbG93X2V4cGFuZGVkX2Zsb3dfc2FtcGxlX3QpLAogCQkJCSAgICBucmVjb3Jkcyk7CiAKK3RydW5jOgorICAgIHJldHVybiAxOwogfQogCiB2b2lkCkBAIC04MjcsNyArODc4LDYgQEAKICAgICB1aW50MzJfdCBzZmxvd19zYW1wbGVfdHlwZSwgc2Zsb3dfc2FtcGxlX2xlbjsKICAgICB1aW50MzJfdCBuc2FtcGxlczsKIAotCiAgICAgdHB0ciA9IHBwdHI7CiAgICAgdGxlbiA9IGxlbjsKICAgICBzZmxvd19kYXRhZ3JhbSA9IChjb25zdCBzdHJ1Y3Qgc2Zsb3dfZGF0YWdyYW1fdCAqKXBwdHI7CmRpZmYgLS1naXQgYS9wcmludC1zaXAuYyBiL3ByaW50LXNpcC5jCmluZGV4IGQwZmQzNDkuLjhlMzA4ZWQgMTAwNjQ0Ci0tLSBhL3ByaW50LXNpcC5jCisrKyBiL3ByaW50LXNpcC5jCkBAIC0xNSwxNCArMTUsMTUgQEAKICAqIEd1eSBIYXJyaXMuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogU2Vzc2lvbiBJbml0aWF0aW9uIFByb3RvY29sIChTSVApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogc3RhdGljIGNvbnN0IGNoYXIgKnNpcGNtZHNbXSA9IHsKZGlmZiAtLWdpdCBhL3ByaW50LXNsLmMgYi9wcmludC1zbC5jCmluZGV4IGJkNDEwY2UuLjNmZDdlODkgMTAwNjQ0Ci0tLSBhL3ByaW50LXNsLmMKKysrIGIvcHJpbnQtc2wuYwpAQCAtMTksMTUgKzE5LDE2IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IENvbXByZXNzZWQgU2VyaWFsIExpbmUgSW50ZXJuZXQgUHJvdG9jb2wgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKLSNpbmNsdWRlICJleHRyYWN0LmgiCQkJLyogbXVzdCBjb21lIGFmdGVyIGludGVyZmFjZS5oICovCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2luY2x1ZGUgImlwLmgiCiAjaW5jbHVkZSAidGNwLmgiCkBAIC02NywxOSArNjgsMjUgQEAKIAkJcmV0dXJuIChjYXBsZW4pOwogCX0KIAorCWNhcGxlbiAtPSBTTElQX0hEUkxFTjsKIAlsZW5ndGggLT0gU0xJUF9IRFJMRU47CiAKLQlpcCA9IChzdHJ1Y3QgaXAgKikocCArIFNMSVBfSERSTEVOKTsKKwlpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKikocCArIFNMSVBfSERSTEVOKTsKIAogCWlmIChuZG8tPm5kb19lZmxhZykKIAkJc2xpcGxpbmtfcHJpbnQobmRvLCBwLCBpcCwgbGVuZ3RoKTsKIAorCWlmIChjYXBsZW4gPCAxIHx8IGxlbmd0aCA8IDEpIHsKKwkJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCQlyZXR1cm4gKGNhcGxlbiArIFNMSVBfSERSTEVOKTsKKwl9CisKIAlzd2l0Y2ggKElQX1YoaXApKSB7CiAJY2FzZSA0OgotCSAgICAgICAgaXBfcHJpbnQobmRvLCAodV9jaGFyICopaXAsIGxlbmd0aCk7CisJICAgICAgICBpcF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKilpcCwgbGVuZ3RoKTsKIAkJYnJlYWs7CiAJY2FzZSA2OgotCQlpcDZfcHJpbnQobmRvLCAodV9jaGFyICopaXAsIGxlbmd0aCk7CisJCWlwNl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKilpcCwgbGVuZ3RoKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJTkRfUFJJTlQoKG5kbywgImlwIHYlZCIsIElQX1YoaXApKSk7CkBAIC0xMDMsMTQgKzExMCwxNCBAQAogCiAJbGVuZ3RoIC09IFNMSVBfSERSTEVOOwogCi0JaXAgPSAoc3RydWN0IGlwICopKHAgKyBTTElQX0hEUkxFTik7CisJaXAgPSAoY29uc3Qgc3RydWN0IGlwICopKHAgKyBTTElQX0hEUkxFTik7CiAKICNpZmRlZiBub3RkZWYKIAlpZiAobmRvLT5uZG9fZWZsYWcpCiAJCXNsaXBsaW5rX3ByaW50KG5kbywgcCwgaXAsIGxlbmd0aCk7CiAjZW5kaWYKIAotCWlwX3ByaW50KG5kbywgKHVfY2hhciAqKWlwLCBsZW5ndGgpOworCWlwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKWlwLCBsZW5ndGgpOwogCiAJcmV0dXJuIChTTElQX0hEUkxFTik7CiB9CkBAIC0xNDcsOSArMTU0LDkgQEAKIAkJICogR2V0IGl0IGZyb20gdGhlIGxpbmsgbGF5ZXIgc2luY2Ugc2xfdW5jb21wcmVzc190Y3AoKQogCQkgKiBoYXMgcmVzdG9yZWQgdGhlIElQIGhlYWRlciBjb3B5IHRvIElQUFJPVE9fVENQLgogCQkgKi8KLQkJbGFzdGNvbm4gPSAoKHN0cnVjdCBpcCAqKSZwW1NMWF9DSERSXSktPmlwX3A7CisJCWxhc3Rjb25uID0gKChjb25zdCBzdHJ1Y3QgaXAgKikmcFtTTFhfQ0hEUl0pLT5pcF9wOwogCQlobGVuID0gSVBfSEwoaXApOwotCQlobGVuICs9IFRIX09GRigoc3RydWN0IHRjcGhkciAqKSYoKGludCAqKWlwKVtobGVuXSk7CisJCWhsZW4gKz0gVEhfT0ZGKChjb25zdCBzdHJ1Y3QgdGNwaGRyICopJigoY29uc3QgaW50ICopaXApW2hsZW5dKTsKIAkJbGFzdGxlbltkaXJdW2xhc3Rjb25uXSA9IGxlbmd0aCAtIChobGVuIDw8IDIpOwogCQlORF9QUklOVCgobmRvLCAidXRjcCAlZDogIiwgbGFzdGNvbm4pKTsKIAkJYnJlYWs7CkBAIC0yNDIsNyArMjQ5LDcgQEAKIAkgKiAnbGVuZ3RoIC0gaGxlbicgaXMgdGhlIGFtb3VudCBvZiBkYXRhIGluIHRoZSBwYWNrZXQuCiAJICovCiAJaGxlbiA9IElQX0hMKGlwKTsKLQlobGVuICs9IFRIX09GRigoc3RydWN0IHRjcGhkciAqKSYoKGludDMyX3QgKilpcClbaGxlbl0pOworCWhsZW4gKz0gVEhfT0ZGKChjb25zdCBzdHJ1Y3QgdGNwaGRyICopJigoY29uc3QgaW50MzJfdCAqKWlwKVtobGVuXSk7CiAJbGFzdGxlbltkaXJdW2xhc3Rjb25uXSA9IGxlbmd0aCAtIChobGVuIDw8IDIpOwogCU5EX1BSSU5UKChuZG8sICIgJWQgKCVsZCkiLCBsYXN0bGVuW2Rpcl1bbGFzdGNvbm5dLCAobG9uZykoY3AgLSBjaGRyKSkpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtc2xsLmMgYi9wcmludC1zbGwuYwppbmRleCAxZjVmNjAwLi42MTQ4NTY5IDEwMDY0NAotLS0gYS9wcmludC1zbGwuYworKysgYi9wcmludC1zbGwuYwpAQCAtMTksMTQgKzE5LDE1IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IExpbnV4IGNvb2tlZCBzb2NrZXRzIGNhcHR1cmUgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV0aGVydHlwZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKQEAgLTE5OCw3ICsxOTksOCBAQAogCXVfaW50IGxlbmd0aCA9IGgtPmxlbjsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3Qgc2xsX2hlYWRlciAqc2xscDsKIAl1X3Nob3J0IGV0aGVyX3R5cGU7Ci0JdV9zaG9ydCBleHRyYWN0ZWRfZXRoZXJ0eXBlOworCWludCBsbGNfaGRybGVuOworCXVfaW50IGhkcmxlbjsKIAogCWlmIChjYXBsZW4gPCBTTExfSERSX0xFTikgewogCQkvKgpAQCAtMjIxLDYgKzIyMyw3IEBACiAJbGVuZ3RoIC09IFNMTF9IRFJfTEVOOwogCWNhcGxlbiAtPSBTTExfSERSX0xFTjsKIAlwICs9IFNMTF9IRFJfTEVOOworCWhkcmxlbiA9IFNMTF9IRFJfTEVOOwogCiAJZXRoZXJfdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKCZzbGxwLT5zbGxfcHJvdG9jb2wpOwogCkBAIC0yNDcsMjMgKzI1MCwxNyBAQAogCQkJICogODAyLjIuCiAJCQkgKiBUcnkgdG8gcHJpbnQgdGhlIExMQy1sYXllciBoZWFkZXIgJiBoaWdoZXIgbGF5ZXJzLgogCQkJICovCi0JCQlpZiAobGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIE5VTEwsIE5VTEwsCi0JCQkgICAgJmV4dHJhY3RlZF9ldGhlcnR5cGUpID09IDApCisJCQlsbGNfaGRybGVuID0gbGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sIE5VTEwsIE5VTEwpOworCQkJaWYgKGxsY19oZHJsZW4gPCAwKQogCQkJCWdvdG8gdW5rbm93bjsJLyogdW5rbm93biBMTEMgdHlwZSAqLworCQkJaGRybGVuICs9IGxsY19oZHJsZW47CiAJCQlicmVhazsKIAogCQlkZWZhdWx0OgotCQkJZXh0cmFjdGVkX2V0aGVydHlwZSA9IDA7CiAJCQkvKkZBTExUSFJPVUdIKi8KIAogCQl1bmtub3duOgotCQkJLyogZXRoZXJfdHlwZSBub3Qga25vd24sIHByaW50IHJhdyBwYWNrZXQgKi8KLQkJCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQkJc2xsX3ByaW50KG5kbywgc2xscCwgbGVuZ3RoICsgU0xMX0hEUl9MRU4pOwotCQkJaWYgKGV4dHJhY3RlZF9ldGhlcnR5cGUpIHsKLQkJCQlORF9QUklOVCgobmRvLCAiKExMQyAlcykgIiwKLQkJCSAgICAgICBldGhlcnByb3RvX3N0cmluZyhodG9ucyhleHRyYWN0ZWRfZXRoZXJ0eXBlKSkpKTsKLQkJCX0KKwkJCS8qIHBhY2tldCB0eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLwogCQkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJCU5EX0RFRkFVTFRQUklOVChwLCBjYXBsZW4pOwogCQkJYnJlYWs7CkBAIC0yNzMsOSArMjcwLDEzIEBACiAJCSAqIFByaW50IFZMQU4gaW5mb3JtYXRpb24sIGFuZCB0aGVuIGdvIGJhY2sgYW5kIHByb2Nlc3MKIAkJICogdGhlIGVuY2xvc2VkIHR5cGUgZmllbGQuCiAJCSAqLwotCQlpZiAoY2FwbGVuIDwgNCB8fCBsZW5ndGggPCA0KSB7CisJCWlmIChjYXBsZW4gPCA0KSB7CiAJCQlORF9QUklOVCgobmRvLCAiW3x2bGFuXSIpKTsKLQkJCXJldHVybiAoU0xMX0hEUl9MRU4pOworCQkJcmV0dXJuIChoZHJsZW4gKyBjYXBsZW4pOworCQl9CisJCWlmIChsZW5ndGggPCA0KSB7CisJCQlORF9QUklOVCgobmRvLCAiW3x2bGFuXSIpKTsKKwkJCXJldHVybiAoaGRybGVuICsgbGVuZ3RoKTsKIAkJfQogCSAgICAgICAgaWYgKG5kby0+bmRvX2VmbGFnKSB7CiAJICAgICAgICAJdWludDE2X3QgdGFnID0gRVhUUkFDVF8xNkJJVFMocCk7CkBAIC0yOTMsOSArMjk0LDEwIEBACiAJCXAgKz0gNDsKIAkJbGVuZ3RoIC09IDQ7CiAJCWNhcGxlbiAtPSA0OworCQloZHJsZW4gKz0gNDsKIAkJZ290byByZWN1cnNlOwogCX0gZWxzZSB7Ci0JCWlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBldGhlcl90eXBlLCBwLCBsZW5ndGgsIGNhcGxlbikgPT0gMCkgeworCQlpZiAoZXRoZXJ0eXBlX3ByaW50KG5kbywgZXRoZXJfdHlwZSwgcCwgbGVuZ3RoLCBjYXBsZW4sIE5VTEwsIE5VTEwpID09IDApIHsKIAkJCS8qIGV0aGVyX3R5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCiAJCQlpZiAoIW5kby0+bmRvX2VmbGFnKQogCQkJCXNsbF9wcmludChuZG8sIHNsbHAsIGxlbmd0aCArIFNMTF9IRFJfTEVOKTsKQEAgLTMwNCw1ICszMDYsNSBAQAogCQl9CiAJfQogCi0JcmV0dXJuIChTTExfSERSX0xFTik7CisJcmV0dXJuIChoZHJsZW4pOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtc2xvdy5jIGIvcHJpbnQtc2xvdy5jCmluZGV4IDJkYjM1ODEuLjkyZDRhN2IgMTAwNjQ0Ci0tLSBhL3ByaW50LXNsb3cuYworKysgYi9wcmludC1zbG93LmMKQEAgLTE4LDI0ICsxOCwyMCBAQAogICogT3JpZ2luYWwgY29kZSBieSBIYW5uZXMgR3JlZGxlciAoaGFubmVzQGp1bmlwZXIubmV0KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IElFRUUgInNsb3cgcHJvdG9jb2xzIiAoODAyLjNhZC84MDIuM2FoKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV0aGVyLmgiCiAjaW5jbHVkZSAib3VpLmgiCiAKLXN0cnVjdCBzbG93X2NvbW1vbl9oZWFkZXJfdCB7Ci0gICAgdWludDhfdCBwcm90b19zdWJ0eXBlOwotICAgIHVpbnQ4X3QgdmVyc2lvbjsKLX07Ci0KICNkZWZpbmUJU0xPV19QUk9UT19MQUNQICAgICAgICAgICAgICAgICAgICAgMQogI2RlZmluZQlTTE9XX1BST1RPX01BUktFUiAgICAgICAgICAgICAgICAgICAyCiAjZGVmaW5lIFNMT1dfUFJPVE9fT0FNICAgICAgICAgICAgICAgICAgICAgIDMKQEAgLTE4NSwyMSArMTgxLDIxIEBACiAgICAgdWludDhfdCBsZW5ndGg7CiB9OwogCi0jZGVmaW5lIExBQ1BfVExWX1RFUk1JTkFUT1IgICAgIDB4MDAKLSNkZWZpbmUgTEFDUF9UTFZfQUNUT1JfSU5GTyAgICAgMHgwMQotI2RlZmluZSBMQUNQX1RMVl9QQVJUTkVSX0lORk8gICAweDAyCi0jZGVmaW5lIExBQ1BfVExWX0NPTExFQ1RPUl9JTkZPIDB4MDMKKyNkZWZpbmUgTEFDUF9NQVJLRVJfVExWX1RFUk1JTkFUT1IgICAgIDB4MDAgIC8qIHNhbWUgY29kZSBmb3IgTEFDUCBhbmQgTWFya2VyICovCiAKLSNkZWZpbmUgTUFSS0VSX1RMVl9URVJNSU5BVE9SICAgMHgwMAotI2RlZmluZSBNQVJLRVJfVExWX01BUktFUl9JTkZPICAweDAxCisjZGVmaW5lIExBQ1BfVExWX0FDVE9SX0lORk8gICAgICAgICAgICAweDAxCisjZGVmaW5lIExBQ1BfVExWX1BBUlRORVJfSU5GTyAgICAgICAgICAweDAyCisjZGVmaW5lIExBQ1BfVExWX0NPTExFQ1RPUl9JTkZPICAgICAgICAweDAzCisKKyNkZWZpbmUgTUFSS0VSX1RMVl9NQVJLRVJfSU5GTyAgICAgICAgIDB4MDEKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgc2xvd190bHZfdmFsdWVzW10gPSB7Ci0gICAgeyAoU0xPV19QUk9UT19MQUNQIDw8IDgpICsgTEFDUF9UTFZfVEVSTUlOQVRPUiwgIlRlcm1pbmF0b3IifSwKKyAgICB7IChTTE9XX1BST1RPX0xBQ1AgPDwgOCkgKyBMQUNQX01BUktFUl9UTFZfVEVSTUlOQVRPUiwgIlRlcm1pbmF0b3IifSwKICAgICB7IChTTE9XX1BST1RPX0xBQ1AgPDwgOCkgKyBMQUNQX1RMVl9BQ1RPUl9JTkZPLCAiQWN0b3IgSW5mb3JtYXRpb24ifSwKICAgICB7IChTTE9XX1BST1RPX0xBQ1AgPDwgOCkgKyBMQUNQX1RMVl9QQVJUTkVSX0lORk8sICJQYXJ0bmVyIEluZm9ybWF0aW9uIn0sCiAgICAgeyAoU0xPV19QUk9UT19MQUNQIDw8IDgpICsgTEFDUF9UTFZfQ09MTEVDVE9SX0lORk8sICJDb2xsZWN0b3IgSW5mb3JtYXRpb24ifSwKIAotICAgIHsgKFNMT1dfUFJPVE9fTUFSS0VSIDw8IDgpICsgTUFSS0VSX1RMVl9URVJNSU5BVE9SLCAiVGVybWluYXRvciJ9LAorICAgIHsgKFNMT1dfUFJPVE9fTUFSS0VSIDw8IDgpICsgTEFDUF9NQVJLRVJfVExWX1RFUk1JTkFUT1IsICJUZXJtaW5hdG9yIn0sCiAgICAgeyAoU0xPV19QUk9UT19NQVJLRVIgPDwgOCkgKyBNQVJLRVJfVExWX01BUktFUl9JTkZPLCAiTWFya2VyIEluZm9ybWF0aW9uIn0sCiAgICAgeyAwLCBOVUxMfQogfTsKQEAgLTI0MiwzNSArMjM4LDQyIEBACiAgICAgdWludDhfdCBwYWRbNTBdOwogfTsKIAotc3RhdGljIHZvaWQgc2xvd19tYXJrZXJfbGFjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICosIHJlZ2lzdGVyIHVfaW50KTsKK3N0YXRpYyB2b2lkIHNsb3dfbWFya2VyX2xhY3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCByZWdpc3RlciB1X2ludCwgdV9pbnQpOwogc3RhdGljIHZvaWQgc2xvd19vYW1fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqLCByZWdpc3RlciB1X2ludCk7CiAKLWNvbnN0IHN0cnVjdCBzbG93X2NvbW1vbl9oZWFkZXJfdCAqc2xvd19jb21faGVhZGVyOwotCiB2b2lkCiBzbG93X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKnBwdHIsIHJlZ2lzdGVyIHVfaW50IGxlbikKIHsKICAgICBpbnQgcHJpbnRfdmVyc2lvbjsKKyAgICB1X2ludCBzdWJ0eXBlOwogCi0gICAgc2xvd19jb21faGVhZGVyID0gKGNvbnN0IHN0cnVjdCBzbG93X2NvbW1vbl9oZWFkZXJfdCAqKXBwdHI7Ci0gICAgTkRfVENIRUNLKCpzbG93X2NvbV9oZWFkZXIpOworICAgIGlmIChsZW4gPCAxKQorICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgIE5EX1RDSEVDSygqcHB0cik7CisgICAgc3VidHlwZSA9ICpwcHRyOwogCiAgICAgLyoKICAgICAgKiBTYW5pdHkgY2hlY2tpbmcgb2YgdGhlIGhlYWRlci4KICAgICAgKi8KLSAgICBzd2l0Y2ggKHNsb3dfY29tX2hlYWRlci0+cHJvdG9fc3VidHlwZSkgeworICAgIHN3aXRjaCAoc3VidHlwZSkgewogICAgIGNhc2UgU0xPV19QUk9UT19MQUNQOgotICAgICAgICBpZiAoc2xvd19jb21faGVhZGVyLT52ZXJzaW9uICE9IExBQ1BfVkVSU0lPTikgewotICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIkxBQ1AgdmVyc2lvbiAldSBwYWNrZXQgbm90IHN1cHBvcnRlZCIsc2xvd19jb21faGVhZGVyLT52ZXJzaW9uKSk7CisgICAgICAgIGlmIChsZW4gPCAyKQorICAgICAgICAgICAgZ290byB0b29zaG9ydDsKKyAgICAgICAgTkRfVENIRUNLKCoocHB0cisxKSk7CisgICAgICAgIGlmICgqKHBwdHIrMSkgIT0gTEFDUF9WRVJTSU9OKSB7CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiTEFDUCB2ZXJzaW9uICV1IHBhY2tldCBub3Qgc3VwcG9ydGVkIiwgKihwcHRyKzEpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRfdmVyc2lvbiA9IDE7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTTE9XX1BST1RPX01BUktFUjoKLSAgICAgICAgaWYgKHNsb3dfY29tX2hlYWRlci0+dmVyc2lvbiAhPSBNQVJLRVJfVkVSU0lPTikgewotICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIk1BUktFUiB2ZXJzaW9uICV1IHBhY2tldCBub3Qgc3VwcG9ydGVkIixzbG93X2NvbV9oZWFkZXItPnZlcnNpb24pKTsKKyAgICAgICAgaWYgKGxlbiA8IDIpCisgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgICAgICBORF9UQ0hFQ0soKihwcHRyKzEpKTsKKyAgICAgICAgaWYgKCoocHB0cisxKSAhPSBNQVJLRVJfVkVSU0lPTikgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIk1BUktFUiB2ZXJzaW9uICV1IHBhY2tldCBub3Qgc3VwcG9ydGVkIiwgKihwcHRyKzEpKSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgcHJpbnRfdmVyc2lvbiA9IDE7CkBAIC0yODYsMTUgKzI4OSwxNSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBpZiAocHJpbnRfdmVyc2lvbikgeworICAgIGlmIChwcmludF92ZXJzaW9uID09IDEpIHsKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzdiV1LCBsZW5ndGggJXUiLAotICAgICAgICAgICAgICAgdG9rMnN0cihzbG93X3Byb3RvX3ZhbHVlcywgInVua25vd24gKCV1KSIsc2xvd19jb21faGVhZGVyLT5wcm90b19zdWJ0eXBlKSwKLSAgICAgICAgICAgICAgIHNsb3dfY29tX2hlYWRlci0+dmVyc2lvbiwKKyAgICAgICAgICAgICAgIHRvazJzdHIoc2xvd19wcm90b192YWx1ZXMsICJ1bmtub3duICgldSkiLCBzdWJ0eXBlKSwKKyAgICAgICAgICAgICAgICoocHB0cisxKSwKICAgICAgICAgICAgICAgIGxlbikpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIC8qIHNvbWUgc2xvdyBwcm90b3MgZG9uJ3QgaGF2ZSBhIHZlcnNpb24gbnVtYmVyIGluIHRoZSBoZWFkZXIgKi8KICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzLCBsZW5ndGggJXUiLAotICAgICAgICAgICAgICAgdG9rMnN0cihzbG93X3Byb3RvX3ZhbHVlcywgInVua25vd24gKCV1KSIsc2xvd19jb21faGVhZGVyLT5wcm90b19zdWJ0eXBlKSwKKyAgICAgICAgICAgICAgIHRvazJzdHIoc2xvd19wcm90b192YWx1ZXMsICJ1bmtub3duICgldSkiLCBzdWJ0eXBlKSwKICAgICAgICAgICAgICAgIGxlbikpOwogICAgIH0KIApAQCAtMzA3LDMyICszMTAsNDUgQEAKICAgICBpZiAoIW5kby0+bmRvX3ZmbGFnKQogICAgICAgICByZXR1cm47CiAKLSAgICBzd2l0Y2ggKHNsb3dfY29tX2hlYWRlci0+cHJvdG9fc3VidHlwZSkgeworICAgIHN3aXRjaCAoc3VidHlwZSkgewogICAgIGRlZmF1bHQ6IC8qIHNob3VsZCBub3QgaGFwcGVuICovCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTTE9XX1BST1RPX09BTToKLSAgICAgICAgLyogc2tpcCBwcm90b19zdWJ0eXBlICovCi0gICAgICAgIHNsb3dfb2FtX3ByaW50KG5kbywgcHB0cisxLCBsZW4tMSk7CisgICAgICAgIC8qIHNraXAgc3VidHlwZSAqLworICAgICAgICBsZW4gLT0gMTsKKyAgICAgICAgcHB0ciArPSAxOworICAgICAgICBzbG93X29hbV9wcmludChuZG8sIHBwdHIsIGxlbik7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTTE9XX1BST1RPX0xBQ1A6ICAgLyogTEFDUCBhbmQgTUFSS0VSIHNoYXJlIHRoZSBzYW1lIHNlbWFudGljcyAqLwogICAgIGNhc2UgU0xPV19QUk9UT19NQVJLRVI6Ci0gICAgICAgIC8qIHNraXAgc2xvd19jb21tb25faGVhZGVyICovCi0gICAgICAgIGxlbiAtPSBzaXplb2YoY29uc3Qgc3RydWN0IHNsb3dfY29tbW9uX2hlYWRlcl90KTsKLSAgICAgICAgcHB0ciArPSBzaXplb2YoY29uc3Qgc3RydWN0IHNsb3dfY29tbW9uX2hlYWRlcl90KTsKLSAgICAgICAgc2xvd19tYXJrZXJfbGFjcF9wcmludChuZG8sIHBwdHIsIGxlbik7CisgICAgICAgIC8qIHNraXAgc3VidHlwZSBhbmQgdmVyc2lvbiAqLworICAgICAgICBsZW4gLT0gMjsKKyAgICAgICAgcHB0ciArPSAyOworICAgICAgICBzbG93X21hcmtlcl9sYWNwX3ByaW50KG5kbywgcHB0ciwgbGVuLCBzdWJ0eXBlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgIHJldHVybjsKIAordG9vc2hvcnQ6CisgICAgaWYgKCFuZG8tPm5kb192ZmxhZykKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAocGFja2V0IGlzIHRvbyBzaG9ydCkiKSk7CisgICAgZWxzZQorICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBpcyB0b28gc2hvcnQiKSk7CisgICAgcmV0dXJuOworCiB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBleGNlZWRlZCBzbmFwc2hvdCIpKTsKKyAgICBpZiAoIW5kby0+bmRvX3ZmbGFnKQorICAgICAgICBORF9QUklOVCgobmRvLCAiIChwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QpIikpOworICAgIGVsc2UKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRcdCBwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QiKSk7CiB9CiAKIHN0YXRpYyB2b2lkCiBzbG93X21hcmtlcl9sYWNwX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgICAgICAgICByZWdpc3RlciBjb25zdCB1X2NoYXIgKnRwdHIsIHJlZ2lzdGVyIHVfaW50IHRsZW4pCisgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqdHB0ciwgcmVnaXN0ZXIgdV9pbnQgdGxlbiwKKyAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgcHJvdG9fc3VidHlwZSkKIHsKICAgICBjb25zdCBzdHJ1Y3QgdGx2X2hlYWRlcl90ICp0bHZfaGVhZGVyOwogICAgIGNvbnN0IHVfY2hhciAqdGx2X3RwdHI7CkBAIC0zNDYsNiArMzYyLDkgQEAKICAgICB9IHRsdl9wdHI7CiAKICAgICB3aGlsZSh0bGVuPjApIHsKKyAgICAgICAgLyogaXMgdGhlIHBhY2tldCBiaWcgZW5vdWdoIHRvIGluY2x1ZGUgdGhlIHRsdiBoZWFkZXIgPyAqLworICAgICAgICBpZiAodGxlbiA8IHNpemVvZihzdHJ1Y3QgdGx2X2hlYWRlcl90KSkKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CiAgICAgICAgIC8qIGRpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgZnVsbHkgZGVjb2RpbmcgdGhlIHRsdiBoZWFkZXIgPyAqLwogICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCBzaXplb2Yoc3RydWN0IHRsdl9oZWFkZXJfdCkpOwogICAgICAgICB0bHZfaGVhZGVyID0gKGNvbnN0IHN0cnVjdCB0bHZfaGVhZGVyX3QgKil0cHRyOwpAQCAtMzU0LDMwICszNzMsNDYgQEAKICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQlcyBUTFYgKDB4JTAyeCksIGxlbmd0aCAldSIsCiAgICAgICAgICAgICAgICB0b2syc3RyKHNsb3dfdGx2X3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iLAotICAgICAgICAgICAgICAgICAgICAgICAoc2xvd19jb21faGVhZGVyLT5wcm90b19zdWJ0eXBlIDw8IDgpICsgdGx2X2hlYWRlci0+dHlwZSksCisgICAgICAgICAgICAgICAgICAgICAgIChwcm90b19zdWJ0eXBlIDw8IDgpICsgdGx2X2hlYWRlci0+dHlwZSksCiAgICAgICAgICAgICAgICB0bHZfaGVhZGVyLT50eXBlLAogICAgICAgICAgICAgICAgdGx2X2xlbikpOwogCi0gICAgICAgIGlmICgodGx2X2xlbiA8IHNpemVvZihzdHJ1Y3QgdGx2X2hlYWRlcl90KSB8fAotICAgICAgICAgICAgdGx2X2xlbiA+IHRsZW4pICYmCi0gICAgICAgICAgICB0bHZfaGVhZGVyLT50eXBlICE9IExBQ1BfVExWX1RFUk1JTkFUT1IgJiYKLSAgICAgICAgICAgIHRsdl9oZWFkZXItPnR5cGUgIT0gTUFSS0VSX1RMVl9URVJNSU5BVE9SKSB7Ci0gICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdC0tLS0tdHJhaWxpbmcgZGF0YS0tLS0tIikpOwotICAgICAgICAgICAgcHJpbnRfdW5rbm93bl9kYXRhKG5kbywgdHB0citzaXplb2Yoc3RydWN0IHRsdl9oZWFkZXJfdCksICJcblx0ICAiLCB0bGVuKTsKKyAgICAgICAgaWYgKHRsdl9oZWFkZXItPnR5cGUgPT0gTEFDUF9NQVJLRVJfVExWX1RFUk1JTkFUT1IpIHsKKyAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBUaGlzIFRMViBoYXMgYSBsZW5ndGggb2YgemVybywgYW5kIG1lYW5zIHRoZXJlIGFyZSBubworICAgICAgICAgICAgICogbW9yZSBUTFZzIHRvIHByb2Nlc3MuCisgICAgICAgICAgICAgKi8KICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCisgICAgICAgIC8qIGxlbmd0aCBpbmNsdWRlcyB0aGUgdHlwZSBhbmQgbGVuZ3RoIGZpZWxkcyAqLworICAgICAgICBpZiAodGx2X2xlbiA8IHNpemVvZihzdHJ1Y3QgdGx2X2hlYWRlcl90KSkgeworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgRVJST1I6IGlsbGVnYWwgbGVuZ3RoIC0gc2hvdWxkIGJlID49ICVsdSIsCisgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZihzdHJ1Y3QgdGx2X2hlYWRlcl90KSkpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgLyogaXMgdGhlIHBhY2tldCBiaWcgZW5vdWdoIHRvIGluY2x1ZGUgdGhlIHRsdiA/ICovCisgICAgICAgIGlmICh0bGVuIDwgdGx2X2xlbikKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CisgICAgICAgIC8qIGRpZCB3ZSBjYXB0dXJlIGVub3VnaCBmb3IgZnVsbHkgZGVjb2RpbmcgdGhlIHRsdiA/ICovCisgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHRsdl9sZW4pOworCiAgICAgICAgIHRsdl90cHRyPXRwdHIrc2l6ZW9mKHN0cnVjdCB0bHZfaGVhZGVyX3QpOwogICAgICAgICB0bHZfdGxlbj10bHZfbGVuLXNpemVvZihzdHJ1Y3QgdGx2X2hlYWRlcl90KTsKIAotICAgICAgICAvKiBkaWQgd2UgY2FwdHVyZSBlbm91Z2ggZm9yIGZ1bGx5IGRlY29kaW5nIHRoZSB0bHYgPyAqLwotICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCB0bHZfbGVuKTsKLQotICAgICAgICBzd2l0Y2goKHNsb3dfY29tX2hlYWRlci0+cHJvdG9fc3VidHlwZSA8PCA4KSArIHRsdl9oZWFkZXItPnR5cGUpIHsKKyAgICAgICAgc3dpdGNoKChwcm90b19zdWJ0eXBlIDw8IDgpICsgdGx2X2hlYWRlci0+dHlwZSkgewogCiAgICAgICAgICAgICAvKiB0aG9zZSB0d28gVExWcyBoYXZlIHRoZSBzYW1lIHN0cnVjdHVyZSAtPiBmYWxsIHRocm91Z2ggKi8KICAgICAgICAgY2FzZSAoKFNMT1dfUFJPVE9fTEFDUCA8PCA4KSArIExBQ1BfVExWX0FDVE9SX0lORk8pOgogICAgICAgICBjYXNlICgoU0xPV19QUk9UT19MQUNQIDw8IDgpICsgTEFDUF9UTFZfUEFSVE5FUl9JTkZPKToKKyAgICAgICAgICAgIGlmICh0bHZfdGxlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbGFjcF90bHZfYWN0b3JfcGFydG5lcl9pbmZvX3QpKSB7CisgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICAgRVJST1I6IGlsbGVnYWwgbGVuZ3RoIC0gc2hvdWxkIGJlICVsdSIsCisgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSAoc2l6ZW9mKHN0cnVjdCB0bHZfaGVhZGVyX3QpICsgc2l6ZW9mKHN0cnVjdCBsYWNwX3Rsdl9hY3Rvcl9wYXJ0bmVyX2luZm9fdCkpKSk7CisgICAgICAgICAgICAgICAgZ290byBiYWRsZW5ndGg7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHRsdl9wdHIubGFjcF90bHZfYWN0b3JfcGFydG5lcl9pbmZvID0gKGNvbnN0IHN0cnVjdCBsYWNwX3Rsdl9hY3Rvcl9wYXJ0bmVyX2luZm9fdCAqKXRsdl90cHRyOwogCiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgU3lzdGVtICVzLCBTeXN0ZW0gUHJpb3JpdHkgJXUsIEtleSAldSIgXApAQCAtMzk0LDYgKzQyOSwxMyBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAoKFNMT1dfUFJPVE9fTEFDUCA8PCA4KSArIExBQ1BfVExWX0NPTExFQ1RPUl9JTkZPKToKKyAgICAgICAgICAgIGlmICh0bHZfdGxlbiAhPQorICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgbGFjcF90bHZfY29sbGVjdG9yX2luZm9fdCkpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBFUlJPUjogaWxsZWdhbCBsZW5ndGggLSBzaG91bGQgYmUgJWx1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIChzaXplb2Yoc3RydWN0IHRsdl9oZWFkZXJfdCkgKyBzaXplb2Yoc3RydWN0IGxhY3BfdGx2X2NvbGxlY3Rvcl9pbmZvX3QpKSkpOworICAgICAgICAgICAgICAgIGdvdG8gYmFkbGVuZ3RoOworICAgICAgICAgICAgfQorCiAgICAgICAgICAgICB0bHZfcHRyLmxhY3BfdGx2X2NvbGxlY3Rvcl9pbmZvID0gKGNvbnN0IHN0cnVjdCBsYWNwX3Rsdl9jb2xsZWN0b3JfaW5mb190ICopdGx2X3RwdHI7CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBNYXggRGVsYXkgJXUiLApAQCAtNDAyLDYgKzQ0NCwxMyBAQAogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSAoKFNMT1dfUFJPVE9fTUFSS0VSIDw8IDgpICsgTUFSS0VSX1RMVl9NQVJLRVJfSU5GTyk6CisgICAgICAgICAgICBpZiAodGx2X3RsZW4gIT0KKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IG1hcmtlcl90bHZfbWFya2VyX2luZm9fdCkpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBFUlJPUjogaWxsZWdhbCBsZW5ndGggLSBzaG91bGQgYmUgJWx1IiwKKyAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIChzaXplb2Yoc3RydWN0IHRsdl9oZWFkZXJfdCkgKyBzaXplb2Yoc3RydWN0IG1hcmtlcl90bHZfbWFya2VyX2luZm9fdCkpKSk7CisgICAgICAgICAgICAgICAgZ290byBiYWRsZW5ndGg7CisgICAgICAgICAgICB9CisKICAgICAgICAgICAgIHRsdl9wdHIubWFya2VyX3Rsdl9tYXJrZXJfaW5mbyA9IChjb25zdCBzdHJ1Y3QgbWFya2VyX3Rsdl9tYXJrZXJfaW5mb190ICopdGx2X3RwdHI7CiAKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBSZXF1ZXN0IFN5c3RlbSAlcywgUmVxdWVzdCBQb3J0ICV1LCBSZXF1ZXN0IFRyYW5zYWN0aW9uIElEIDB4JTA4eCIsCkBAIC00MTEsMjkgKzQ2MCwxMyBAQAogCiAgICAgICAgICAgICBicmVhazsKIAotICAgICAgICAgICAgLyogdGhvc2UgdHdvIFRMVnMgaGF2ZSB0aGUgc2FtZSBzdHJ1Y3R1cmUgLT4gZmFsbCB0aHJvdWdoICovCi0gICAgICAgIGNhc2UgKChTTE9XX1BST1RPX0xBQ1AgPDwgOCkgKyBMQUNQX1RMVl9URVJNSU5BVE9SKToKLSAgICAgICAgY2FzZSAoKFNMT1dfUFJPVE9fTUFSS0VSIDw8IDgpICsgTEFDUF9UTFZfVEVSTUlOQVRPUik6Ci0gICAgICAgICAgICB0bHZfcHRyLmxhY3BfbWFya2VyX3Rsdl90ZXJtaW5hdG9yID0gKGNvbnN0IHN0cnVjdCBsYWNwX21hcmtlcl90bHZfdGVybWluYXRvcl90ICopdGx2X3RwdHI7Ci0gICAgICAgICAgICBpZiAodGx2X2xlbiA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgdGx2X2xlbiA9IHNpemVvZih0bHZfcHRyLmxhY3BfbWFya2VyX3Rsdl90ZXJtaW5hdG9yLT5wYWQpICsKLSAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCB0bHZfaGVhZGVyX3QpOwotICAgICAgICAgICAgICAgIC8qIHRlbGwgdGhlIHVzZXIgdGhhdCB3ZSBtb2RpZmllZCB0aGUgbGVuZ3RoIGZpZWxkICAqLwotICAgICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZz4xKQotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiICg9JXUpIiwgdGx2X2xlbikpOwotICAgICAgICAgICAgICAgIC8qIHdlIGhhdmUgbWVzc2VkIGFyb3VuZCB3aXRoIHRoZSBsZW5ndGggZmllbGQgLSBub3cgd2UgbmVlZCB0byBjaGVjawotICAgICAgICAgICAgICAgICAqIGFnYWluIGlmIHRoZXJlIGFyZSBlbm91Z2ggYnl0ZXMgb24gdGhlIHdpcmUgZm9yIHRoZSBoZXhkdW1wICovCi0gICAgICAgICAgICAgICAgTkRfVENIRUNLMih0bHZfcHRyLmxhY3BfbWFya2VyX3Rsdl90ZXJtaW5hdG9yLT5wYWRbMF0sCi0gICAgICAgICAgICAgICAgICAgICAgICBzaXplb2YodGx2X3B0ci5sYWNwX21hcmtlcl90bHZfdGVybWluYXRvci0+cGFkKSk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJyZWFrOwotCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICBpZiAobmRvLT5uZG9fdmZsYWcgPD0gMSkKICAgICAgICAgICAgICAgICBwcmludF91bmtub3duX2RhdGEobmRvLCB0bHZfdHB0ciwgIlxuXHQgICIsIHRsdl90bGVuKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisKKyAgICBiYWRsZW5ndGg6CiAgICAgICAgIC8qIGRvIHdlIHdhbnQgdG8gc2VlIGFuIGFkZGl0aW9uYWwgaGV4ZHVtcCA/ICovCiAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZyA+IDEpIHsKICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHRwdHIrc2l6ZW9mKHN0cnVjdCB0bHZfaGVhZGVyX3QpLCAiXG5cdCAgIiwKQEAgLTQ0NCw2ICs0NzcsMTEgQEAKICAgICAgICAgdGxlbi09dGx2X2xlbjsKICAgICB9CiAgICAgcmV0dXJuOworCit0b29zaG9ydDoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBpcyB0b28gc2hvcnQiKSk7CisgICAgcmV0dXJuOworCiB0cnVuYzoKICAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBleGNlZWRlZCBzbmFwc2hvdCIpKTsKIH0KQEAgLTQ3Nyw3ICs1MTUsMTAgQEAKICAgICAgICAgY29uc3Qgc3RydWN0IHNsb3dfb2FtX2xvb3BiYWNrY3RybF90ICpzbG93X29hbV9sb29wYmFja2N0cmw7CiAgICAgfSB0bHY7CiAKLSAgICBwdHIuc2xvd19vYW1fY29tbW9uX2hlYWRlciA9IChzdHJ1Y3Qgc2xvd19vYW1fY29tbW9uX2hlYWRlcl90ICopdHB0cjsKKyAgICBwdHIuc2xvd19vYW1fY29tbW9uX2hlYWRlciA9IChjb25zdCBzdHJ1Y3Qgc2xvd19vYW1fY29tbW9uX2hlYWRlcl90ICopdHB0cjsKKyAgICBpZiAodGxlbiA8IHNpemVvZigqcHRyLnNsb3dfb2FtX2NvbW1vbl9oZWFkZXIpKQorICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgIE5EX1RDSEVDSygqcHRyLnNsb3dfb2FtX2NvbW1vbl9oZWFkZXIpOwogICAgIHRwdHIgKz0gc2l6ZW9mKHN0cnVjdCBzbG93X29hbV9jb21tb25faGVhZGVyX3QpOwogICAgIHRsZW4gLT0gc2l6ZW9mKHN0cnVjdCBzbG93X29hbV9jb21tb25faGVhZGVyX3QpOwogCkBAIC00OTEsMjAgKzUzMiwzNiBAQAogICAgIGNhc2UgU0xPV19PQU1fQ09ERV9JTkZPOgogICAgICAgICB3aGlsZSAodGxlbiA+IDApIHsKICAgICAgICAgICAgIHB0ci5zbG93X29hbV90bHZfaGVhZGVyID0gKGNvbnN0IHN0cnVjdCBzbG93X29hbV90bHZfaGVhZGVyX3QgKil0cHRyOworICAgICAgICAgICAgaWYgKHRsZW4gPCBzaXplb2YoKnB0ci5zbG93X29hbV90bHZfaGVhZGVyKSkKKyAgICAgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgICAgICAgICAgTkRfVENIRUNLKCpwdHIuc2xvd19vYW1fdGx2X2hlYWRlcik7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgJXMgSW5mb3JtYXRpb24gVHlwZSAoJXUpLCBsZW5ndGggJXUiLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIoc2xvd19vYW1faW5mb190eXBlX3ZhbHVlcywgIlJlc2VydmVkIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT50eXBlKSwKICAgICAgICAgICAgICAgICAgICBwdHIuc2xvd19vYW1fdGx2X2hlYWRlci0+dHlwZSwKICAgICAgICAgICAgICAgICAgICBwdHIuc2xvd19vYW1fdGx2X2hlYWRlci0+bGVuZ3RoKSk7CiAKKyAgICAgICAgICAgIGlmIChwdHIuc2xvd19vYW1fdGx2X2hlYWRlci0+dHlwZSA9PSBTTE9XX09BTV9JTkZPX1RZUEVfRU5EX09GX1RMVikgeworICAgICAgICAgICAgICAgIC8qCisgICAgICAgICAgICAgICAgICogQXMgSUVFRSBTdGQgODAyLjMtMjAxNSBzYXlzIGZvciB0aGUgRW5kIG9mIFRMViBNYXJrZXIsCisgICAgICAgICAgICAgICAgICogIih0aGUgbGVuZ3RoIGFuZCB2YWx1ZSBvZiB0aGUgVHlwZSAweDAwIFRMViBjYW4gYmUgaWdub3JlZCkiLgorICAgICAgICAgICAgICAgICAqLworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLyogbGVuZ3RoIGluY2x1ZGVzIHRoZSB0eXBlIGFuZCBsZW5ndGggZmllbGRzICovCisgICAgICAgICAgICBpZiAocHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc2xvd19vYW1fdGx2X2hlYWRlcl90KSkgeworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIEVSUk9SOiBpbGxlZ2FsIGxlbmd0aCAtIHNob3VsZCBiZSA+PSAldSIsCisgICAgICAgICAgICAgICAgICAgICAgICh1X2ludClzaXplb2Yoc3RydWN0IHNsb3dfb2FtX3Rsdl9oZWFkZXJfdCkpKTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICh0bGVuIDwgcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCkKKyAgICAgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgICAgICAgICAgTkRfVENIRUNLMigqdHB0ciwgcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCk7CisKICAgICAgICAgICAgIGhleGR1bXAgPSBGQUxTRTsKICAgICAgICAgICAgIHN3aXRjaCAocHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPnR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU0xPV19PQU1fSU5GT19UWVBFX0VORF9PRl9UTFY6Ci0gICAgICAgICAgICAgICAgaWYgKHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT5sZW5ndGggIT0gMCkgewotICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBFUlJPUjogaWxsZWdhbCBsZW5ndGggLSBzaG91bGQgYmUgMCIpKTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotCiAgICAgICAgICAgICBjYXNlIFNMT1dfT0FNX0lORk9fVFlQRV9MT0NBTDogLyogaWRlbnRpY2FsIGZvcm1hdCAtIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICAgICAgY2FzZSBTTE9XX09BTV9JTkZPX1RZUEVfUkVNT1RFOgogICAgICAgICAgICAgICAgIHRsdi5zbG93X29hbV9pbmZvID0gKGNvbnN0IHN0cnVjdCBzbG93X29hbV9pbmZvX3QgKil0cHRyOwpAQCAtNTEzLDcgKzU3MCw4IEBACiAgICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xvd19vYW1faW5mb190KSkgewogICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBFUlJPUjogaWxsZWdhbCBsZW5ndGggLSBzaG91bGQgYmUgJWx1IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBsb25nKSBzaXplb2Yoc3RydWN0IHNsb3dfb2FtX2luZm9fdCkpKTsKLSAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgICAgICBoZXhkdW1wID0gVFJVRTsKKyAgICAgICAgICAgICAgICAgICAgZ290byBiYWRsZW5ndGhfY29kZV9pbmZvOwogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIE9BTS1WZXJzaW9uICV1LCBSZXZpc2lvbiAldSIsCkBAIC01NDYsMTEgKzYwNCw3IEBACiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIC8qIGluZmluaXRlIGxvb3AgY2hlY2sgKi8KLSAgICAgICAgICAgIGlmICghcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCkgewotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQorICAgICAgICBiYWRsZW5ndGhfY29kZV9pbmZvOgogICAgICAgICAgICAgLyogZG8gd2UgYWxzbyB3YW50IHRvIHNlZSBhIGhleCBkdW1wID8gKi8KICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZyA+IDEgfHwgaGV4ZHVtcD09VFJVRSkgewogICAgICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHRwdHIsICJcblx0ICAiLApAQCAtNTYzLDIyICs2MTcsNDcgQEAKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIFNMT1dfT0FNX0NPREVfRVZFTlRfTk9USUY6CisgICAgICAgIC8qIFNlcXVlbmNlIG51bWJlciAqLworICAgICAgICBpZiAodGxlbiA8IDIpCisgICAgICAgICAgICBnb3RvIHRvb3Nob3J0OworICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCAyKTsKKyAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgIFNlcXVlbmNlIE51bWJlciAldSIsIEVYVFJBQ1RfMTZCSVRTKHRwdHIpKSk7CisgICAgICAgIHRsZW4gLT0gMjsKKyAgICAgICAgdHB0ciArPSAyOworCisgICAgICAgIC8qIFRMVnMgKi8KICAgICAgICAgd2hpbGUgKHRsZW4gPiAwKSB7CiAgICAgICAgICAgICBwdHIuc2xvd19vYW1fdGx2X2hlYWRlciA9IChjb25zdCBzdHJ1Y3Qgc2xvd19vYW1fdGx2X2hlYWRlcl90ICopdHB0cjsKKyAgICAgICAgICAgIGlmICh0bGVuIDwgc2l6ZW9mKCpwdHIuc2xvd19vYW1fdGx2X2hlYWRlcikpCisgICAgICAgICAgICAgICAgZ290byB0b29zaG9ydDsKKyAgICAgICAgICAgIE5EX1RDSEVDSygqcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXIpOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHQgICVzIExpbmsgRXZlbnQgVHlwZSAoJXUpLCBsZW5ndGggJXUiLAogICAgICAgICAgICAgICAgICAgIHRvazJzdHIoc2xvd19vYW1fbGlua19ldmVudF92YWx1ZXMsICJSZXNlcnZlZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdHIuc2xvd19vYW1fdGx2X2hlYWRlci0+dHlwZSksCiAgICAgICAgICAgICAgICAgICAgcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPnR5cGUsCiAgICAgICAgICAgICAgICAgICAgcHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCkpOwogCisgICAgICAgICAgICBpZiAocHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPnR5cGUgPT0gU0xPV19PQU1fSU5GT19UWVBFX0VORF9PRl9UTFYpIHsKKyAgICAgICAgICAgICAgICAvKgorICAgICAgICAgICAgICAgICAqIEFzIElFRUUgU3RkIDgwMi4zLTIwMTUgc2F5cyBmb3IgdGhlIEVuZCBvZiBUTFYgTWFya2VyLAorICAgICAgICAgICAgICAgICAqICIodGhlIGxlbmd0aCBhbmQgdmFsdWUgb2YgdGhlIFR5cGUgMHgwMCBUTFYgY2FuIGJlIGlnbm9yZWQpIi4KKyAgICAgICAgICAgICAgICAgKi8KKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIC8qIGxlbmd0aCBpbmNsdWRlcyB0aGUgdHlwZSBhbmQgbGVuZ3RoIGZpZWxkcyAqLworICAgICAgICAgICAgaWYgKHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT5sZW5ndGggPCBzaXplb2Yoc3RydWN0IHNsb3dfb2FtX3Rsdl9oZWFkZXJfdCkpIHsKKyAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBFUlJPUjogaWxsZWdhbCBsZW5ndGggLSBzaG91bGQgYmUgPj0gJXUiLAorICAgICAgICAgICAgICAgICAgICAgICAodV9pbnQpc2l6ZW9mKHN0cnVjdCBzbG93X29hbV90bHZfaGVhZGVyX3QpKSk7CisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAodGxlbiA8IHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT5sZW5ndGgpCisgICAgICAgICAgICAgICAgZ290byB0b29zaG9ydDsKKyAgICAgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT5sZW5ndGgpOworCiAgICAgICAgICAgICBoZXhkdW1wID0gRkFMU0U7CiAgICAgICAgICAgICBzd2l0Y2ggKHB0ci5zbG93X29hbV90bHZfaGVhZGVyLT50eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFNMT1dfT0FNX0xJTktfRVZFTlRfRU5EX09GX1RMVjoKLSAgICAgICAgICAgICAgICBpZiAocHRyLnNsb3dfb2FtX3Rsdl9oZWFkZXItPmxlbmd0aCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIEVSUk9SOiBpbGxlZ2FsIGxlbmd0aCAtIHNob3VsZCBiZSAwIikpOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KICAgICAgICAgICAgIGNhc2UgU0xPV19PQU1fTElOS19FVkVOVF9FUlJfU1lNX1BFUjogLyogaWRlbnRpY2FsIGZvcm1hdCAtIGZhbGwgdGhyb3VnaCAqLwogICAgICAgICAgICAgY2FzZSBTTE9XX09BTV9MSU5LX0VWRU5UX0VSUl9GUk06CiAgICAgICAgICAgICBjYXNlIFNMT1dfT0FNX0xJTktfRVZFTlRfRVJSX0ZSTV9QRVI6CkBAIC01ODksNyArNjY4LDggQEAKICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBzbG93X29hbV9saW5rX2V2ZW50X3QpKSB7CiAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICAgIEVSUk9SOiBpbGxlZ2FsIGxlbmd0aCAtIHNob3VsZCBiZSAlbHUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemVvZihzdHJ1Y3Qgc2xvd19vYW1fbGlua19ldmVudF90KSkpOwotICAgICAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAgICAgICAgIGhleGR1bXAgPSBUUlVFOworICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZGxlbmd0aF9ldmVudF9ub3RpZjsKICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCAgICBUaW1lc3RhbXAgJXUgbXMsIEVycm9yZWQgV2luZG93ICUiIFBSSXU2NApAQCAtNjE0LDExICs2OTQsNyBAQAogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICAvKiBpbmZpbml0ZSBsb29wIGNoZWNrICovCi0gICAgICAgICAgICBpZiAoIXB0ci5zbG93X29hbV90bHZfaGVhZGVyLT5sZW5ndGgpIHsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KKyAgICAgICAgYmFkbGVuZ3RoX2V2ZW50X25vdGlmOgogICAgICAgICAgICAgLyogZG8gd2UgYWxzbyB3YW50IHRvIHNlZSBhIGhleCBkdW1wID8gKi8KICAgICAgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZyA+IDEgfHwgaGV4ZHVtcD09VFJVRSkgewogICAgICAgICAgICAgICAgIHByaW50X3Vua25vd25fZGF0YShuZG8sIHRwdHIsICJcblx0ICAiLApAQCAtNjMyLDEzICs3MDgsMTYgQEAKIAogICAgIGNhc2UgU0xPV19PQU1fQ09ERV9MT09QQkFDS19DVFJMOgogICAgICAgICB0bHYuc2xvd19vYW1fbG9vcGJhY2tjdHJsID0gKGNvbnN0IHN0cnVjdCBzbG93X29hbV9sb29wYmFja2N0cmxfdCAqKXRwdHI7CisgICAgICAgIGlmICh0bGVuIDwgc2l6ZW9mKCp0bHYuc2xvd19vYW1fbG9vcGJhY2tjdHJsKSkKKyAgICAgICAgICAgIGdvdG8gdG9vc2hvcnQ7CisgICAgICAgIE5EX1RDSEVDSygqdGx2LnNsb3dfb2FtX2xvb3BiYWNrY3RybCk7CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJcblx0ICBDb21tYW5kICVzICgldSkiLAogICAgICAgICAgICAgICAgdG9rMnN0cihzbG93X29hbV9sb29wYmFja2N0cmxfY21kX3ZhbHVlcywKICAgICAgICAgICAgICAgICAgICAgICAgIlVua25vd24iLAogICAgICAgICAgICAgICAgICAgICAgICB0bHYuc2xvd19vYW1fbG9vcGJhY2tjdHJsLT5jb21tYW5kKSwKICAgICAgICAgICAgICAgIHRsdi5zbG93X29hbV9sb29wYmFja2N0cmwtPmNvbW1hbmQpKTsKLSAgICAgICAgICAgICAgIHRwdHIgKys7Ci0gICAgICAgICAgICAgICB0bGVuIC0tOworICAgICAgICB0cHRyICsrOworICAgICAgICB0bGVuIC0tOwogICAgICAgICBicmVhazsKIAogICAgICAgICAvKgpAQCAtNjU1LDQgKzczNCwxMSBAQAogICAgICAgICBicmVhazsKICAgICB9CiAgICAgcmV0dXJuOworCit0b29zaG9ydDoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBpcyB0b28gc2hvcnQiKSk7CisgICAgcmV0dXJuOworCit0cnVuYzoKKyAgICBORF9QUklOVCgobmRvLCAiXG5cdFx0IHBhY2tldCBleGNlZWRlZCBzbmFwc2hvdCIpKTsKIH0KZGlmZiAtLWdpdCBhL3ByaW50LXNtYi5jIGIvcHJpbnQtc21iLmMKaW5kZXggZjViZTlmZi4uNzIzYjlhMCAxMDA2NDQKLS0tIGEvcHJpbnQtc21iLmMKKysrIGIvcHJpbnQtc21iLmMKQEAgLTYsMTYgKzYsMTcgQEAKICAqIG9yIGxhdGVyCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogU01CL0NJRlMgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAic21iLmgiCiAKQEAgLTEwMCw3ICsxMDEsNyBAQAogICAgIHNtYl9mZGF0YShuZG8sIHBhcmFtLCBmbXQsIHBhcmFtICsgcGNudCwgdW5pY29kZXN0cik7CiAgICAgaWYgKGRjbnQpIHsKIAlORF9QUklOVCgobmRvLCAiZGF0YTpcbiIpKTsKLQlwcmludF9kYXRhKG5kbywgZGF0YSwgZGNudCk7CisJc21iX3ByaW50X2RhdGEobmRvLCBkYXRhLCBkY250KTsKICAgICB9CiB9CiAKQEAgLTEzNSw3ICsxMzYsNyBAQAogICAgIH0KICAgICBpZiAoZGNudCkgewogCU5EX1BSSU5UKChuZG8sICJkYXRhOlxuIikpOwotCXByaW50X2RhdGEobmRvLCBkYXRhLCBkY250KTsKKwlzbWJfcHJpbnRfZGF0YShuZG8sIGRhdGEsIGRjbnQpOwogICAgIH0KICAgICByZXR1cm47CiB0cnVuYzoKQEAgLTQxNiw3ICs0MTcsNyBAQAogCXNtYl9mZGF0YShuZG8sIHdvcmRzICsgMSwgZjEsIG1pbih3b3JkcyArIDEgKyB3Y3QgKiAyLCBtYXhidWYpLAogCSAgICB1bmljb2Rlc3RyKTsKICAgICBlbHNlCi0JcHJpbnRfZGF0YShuZG8sIHdvcmRzICsgMSwgbWluKHdjdCAqIDIsIFBUUl9ESUZGKG1heGJ1Ziwgd29yZHMgKyAxKSkpOworCXNtYl9wcmludF9kYXRhKG5kbywgd29yZHMgKyAxLCBtaW4od2N0ICogMiwgUFRSX0RJRkYobWF4YnVmLCB3b3JkcyArIDEpKSk7CiAKICAgICBORF9UQ0hFQ0syKCpkYXRhLCAyKTsKICAgICBiY2MgPSBFWFRSQUNUX0xFXzE2QklUUyhkYXRhKTsKQEAgLTQyNiw3ICs0MjcsNyBAQAogCSAgICBzbWJfZmRhdGEobmRvLCBkYXRhICsgMiwgZjIsIG1pbihkYXRhICsgMiArIEVYVFJBQ1RfTEVfMTZCSVRTKGRhdGEpLAogCQltYXhidWYpLCB1bmljb2Rlc3RyKTsKIAllbHNlCi0JICAgIHByaW50X2RhdGEobmRvLCBkYXRhICsgMiwgbWluKEVYVFJBQ1RfTEVfMTZCSVRTKGRhdGEpLCBQVFJfRElGRihtYXhidWYsIGRhdGEgKyAyKSkpOworCSAgICBzbWJfcHJpbnRfZGF0YShuZG8sIGRhdGEgKyAyLCBtaW4oRVhUUkFDVF9MRV8xNkJJVFMoZGF0YSksIFBUUl9ESUZGKG1heGJ1ZiwgZGF0YSArIDIpKSk7CiAgICAgfQogICAgIHJldHVybjsKIHRydW5jOgpAQCAtNDYwLDcgKzQ2MSw3IEBACiAJc21iX2ZkYXRhKG5kbywgd29yZHMgKyAxLCBmMSwgbWluKHdvcmRzICsgMSArIHdjdCAqIDIsIG1heGJ1ZiksCiAJICAgIHVuaWNvZGVzdHIpOwogICAgIGVsc2UKLQlwcmludF9kYXRhKG5kbywgd29yZHMgKyAxLCBtaW4od2N0ICogMiwgUFRSX0RJRkYobWF4YnVmLCB3b3JkcyArIDEpKSk7CisJc21iX3ByaW50X2RhdGEobmRvLCB3b3JkcyArIDEsIG1pbih3Y3QgKiAyLCBQVFJfRElGRihtYXhidWYsIHdvcmRzICsgMSkpKTsKIAogICAgIE5EX1RDSEVDSzIoKmRhdGEsIDIpOwogICAgIGJjYyA9IEVYVFJBQ1RfTEVfMTZCSVRTKGRhdGEpOwpAQCAtNDcwLDcgKzQ3MSw3IEBACiAJICAgIHNtYl9mZGF0YShuZG8sIGRhdGEgKyAyLCBmMiwgbWluKGRhdGEgKyAyICsgRVhUUkFDVF9MRV8xNkJJVFMoZGF0YSksCiAJCW1heGJ1ZiksIHVuaWNvZGVzdHIpOwogCWVsc2UKLQkgICAgcHJpbnRfZGF0YShuZG8sIGRhdGEgKyAyLCBtaW4oRVhUUkFDVF9MRV8xNkJJVFMoZGF0YSksIFBUUl9ESUZGKG1heGJ1ZiwgZGF0YSArIDIpKSk7CisJICAgIHNtYl9wcmludF9kYXRhKG5kbywgZGF0YSArIDIsIG1pbihFWFRSQUNUX0xFXzE2QklUUyhkYXRhKSwgUFRSX0RJRkYobWF4YnVmLCBkYXRhICsgMikpKTsKICAgICB9CiAgICAgcmV0dXJuOwogdHJ1bmM6CkBAIC01MTAsNyArNTExLDcgQEAKIAkgICAgc21iX2ZkYXRhKG5kbywgZGF0YSArIDIsIGYyLCBtaW4oZGF0YSArIDIgKyBFWFRSQUNUX0xFXzE2QklUUyhkYXRhKSwKIAkJbWF4YnVmKSwgdW5pY29kZXN0cik7CiAJZWxzZQotCSAgICBwcmludF9kYXRhKG5kbywgZGF0YSArIDIsIG1pbihFWFRSQUNUX0xFXzE2QklUUyhkYXRhKSwgUFRSX0RJRkYobWF4YnVmLCBkYXRhICsgMikpKTsKKwkgICAgc21iX3ByaW50X2RhdGEobmRvLCBkYXRhICsgMiwgbWluKEVYVFJBQ1RfTEVfMTZCSVRTKGRhdGEpLCBQVFJfRElGRihtYXhidWYsIGRhdGEgKyAyKSkpOwogICAgIH0KICAgICByZXR1cm47CiB0cnVuYzoKQEAgLTgwNSw5ICs4MDYsNiBAQAogCiAgICAgTkRfVENIRUNLKGJ1Zls5XSk7CiAgICAgcmVxdWVzdCA9IChidWZbOV0gJiAweDgwKSA/IDAgOiAxOwotICAgIGZsYWdzMiA9IEVYVFJBQ1RfTEVfMTZCSVRTKCZidWZbMTBdKTsKLSAgICB1bmljb2Rlc3RyID0gZmxhZ3MyICYgMHg4MDAwOwotICAgIG50ZXJyY29kZXMgPSBmbGFnczIgJiAweDQwMDA7CiAgICAgc3RhcnRidWYgPSBidWY7CiAKICAgICBjb21tYW5kID0gYnVmWzRdOwpAQCAtODIyLDYgKzgyMCwxMSBAQAogICAgIGlmIChuZG8tPm5kb192ZmxhZyA8IDIpCiAJcmV0dXJuOwogCisgICAgTkRfVENIRUNLXzE2QklUUygmYnVmWzEwXSk7CisgICAgZmxhZ3MyID0gRVhUUkFDVF9MRV8xNkJJVFMoJmJ1ZlsxMF0pOworICAgIHVuaWNvZGVzdHIgPSBmbGFnczIgJiAweDgwMDA7CisgICAgbnRlcnJjb2RlcyA9IGZsYWdzMiAmIDB4NDAwMDsKKwogICAgIC8qIHByaW50IG91dCB0aGUgaGVhZGVyICovCiAgICAgc21iX2ZkYXRhKG5kbywgYnVmLCBmbXRfc21iaGVhZGVyLCBidWYgKyAzMywgdW5pY29kZXN0cik7CiAKQEAgLTg4Myw3ICs4ODYsNyBAQAogCSAgICB9IGVsc2UgewogCQlpZiAoYmNjID4gMCkgewogCQkgICAgTkRfUFJJTlQoKG5kbywgInNtYl9idWZbXT1cbiIpKTsKLQkJICAgIHByaW50X2RhdGEobmRvLCBkYXRhICsgMiwgbWluKGJjYywgUFRSX0RJRkYobWF4YnVmLCBkYXRhICsgMikpKTsKKwkJICAgIHNtYl9wcmludF9kYXRhKG5kbywgZGF0YSArIDIsIG1pbihiY2MsIFBUUl9ESUZGKG1heGJ1ZiwgZGF0YSArIDIpKSk7CiAJCX0KIAkgICAgfQogCX0KQEAgLTExNjQsMTAgKzExNjcsMTIgQEAKIAkgICAgcCA9IHNtYl9mZGF0YShuZG8sIHAsICJOYW1lPVtuMV1cbiMiLCBtYXhidWYsIDApOwogCSAgICBpZiAocCA9PSBOVUxMKQogCQlnb3RvIG91dDsKKwkgICAgTkRfVENIRUNLXzE2QklUUyhwKTsKIAkgICAgcmVzdHlwZSA9IEVYVFJBQ1RfMTZCSVRTKHApOwogCSAgICBwID0gc21iX2ZkYXRhKG5kbywgcCwgIlJlc1R5cGU9W3J3XVxuUmVzQ2xhc3M9W3J3XVxuVFRMPVtyRF1cbiIsIHAgKyA4LCAwKTsKIAkgICAgaWYgKHAgPT0gTlVMTCkKIAkJZ290byBvdXQ7CisJICAgIE5EX1RDSEVDS18xNkJJVFMocCk7CiAJICAgIHJkbGVuID0gRVhUUkFDVF8xNkJJVFMocCk7CiAJICAgIE5EX1BSSU5UKChuZG8sICJSZXNvdXJjZUxlbmd0aD0lZFxuUmVzb3VyY2VEYXRhPVxuIiwgcmRsZW4pKTsKIAkgICAgcCArPSAyOwpAQCAtMTIwOSw3ICsxMjE0LDcgQEAKIAkJCXAgKz0gMjsKIAkJICAgIH0KIAkJfSBlbHNlIHsKLQkJICAgIHByaW50X2RhdGEobmRvLCBwLCBtaW4ocmRsZW4sIGxlbmd0aCAtIChwIC0gZGF0YSkpKTsKKwkJICAgIHNtYl9wcmludF9kYXRhKG5kbywgcCwgbWluKHJkbGVuLCBsZW5ndGggLSAocCAtIGRhdGEpKSk7CiAJCSAgICBwICs9IHJkbGVuOwogCQl9CiAJICAgIH0KQEAgLTEzMDksNyArMTMxNCw3IEBACiAvKgogICAgcHJpbnQgbmV0YmV1aSBmcmFtZXMKICovCi1zdHJ1Y3QgbmJmX3N0cmluZ3Mgeworc3RhdGljIHN0cnVjdCBuYmZfc3RyaW5ncyB7CiAJY29uc3QgY2hhcgkqbmFtZTsKIAljb25zdCBjaGFyCSpub252ZXJib3NlOwogCWNvbnN0IGNoYXIJKnZlcmJvc2U7CmRpZmYgLS1naXQgYS9wcmludC1zbXRwLmMgYi9wcmludC1zbXRwLmMKaW5kZXggZmUwYmJjMi4uMGNkY2YxZCAxMDA2NDQKLS0tIGEvcHJpbnQtc210cC5jCisrKyBiL3ByaW50LXNtdHAuYwpAQCAtMTEsMTEgKzExLDEzIEBACiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAorLyogXHN1bW1hcnk6IFNpbXBsZSBNYWlsIFRyYW5zZmVyIFByb3RvY29sIChTTVRQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CmRpZmYgLS1naXQgYS9wcmludC1zbm1wLmMgYi9wcmludC1zbm1wLmMKaW5kZXggZjU1MDE1OC4uMWIwOTZkYyAxMDA2NDQKLS0tIGEvcHJpbnQtc25tcC5jCisrKyBiL3ByaW50LXNubXAuYwpAQCAtNTYsMTIgKzU2LDEzIEBACiAgIwlAKCMpc25tcC5hd2sueAkxLjEgKExBTkwpIDEvMTUvOTAKICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBTaW1wbGUgTmV0d29yayBNYW5hZ2VtZW50IFByb3RvY29sIChTTk1QKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CkBAIC03MCw3ICs3MSw3IEBACiAjaW5jbHVkZSA8c21pLmg+CiAjZW5kaWYKIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKIAogI3VuZGVmIE9QQVFVRSAgLyogZGVmaW5lZCBpbiA8d2luZ2RpLmg+ICovCiAKQEAgLTI1Myw3ICsyNTQsNyBAQAogICogQSBzdHJ1Y3R1cmUgZm9yIHRoZSBPSUQgdHJlZSBmb3IgdGhlIGNvbXBpbGVkLWluIE1JQi4KICAqIFRoaXMgaXMgc3RvcmVkIGFzIGEgZ2VuZXJhbC1vcmRlciB0cmVlLgogICovCi1zdHJ1Y3Qgb2JqIHsKK3N0YXRpYyBzdHJ1Y3Qgb2JqIHsKIAljb25zdCBjaGFyCSpkZXNjOwkJLyogbmFtZSBvZiBvYmplY3QgKi8KIAl1X2NoYXIJb2lkOwkJCS8qIHN1Yi1pZCBmb2xsb3dpbmcgcGFyZW50ICovCiAJdV9jaGFyCXR5cGU7CQkJLyogb2JqZWN0IHR5cGUgKHVudXNlZCkgKi8KQEAgLTI3NSwyOCArMjc2LDQ2IEBACiAgKiBDdXJyZW50bHksIHRoaXMgaW5jbHVkZXMgdGhlIHByZWZpeGVzIGZvciB0aGUgSW50ZXJuZXQgTUlCLCB0aGUKICAqIHByaXZhdGUgZW50ZXJwcmlzZXMgdHJlZSwgYW5kIHRoZSBleHBlcmltZW50YWwgdHJlZS4KICAqLworI2RlZmluZSBPSURfRklSU1RfT0NURVQoeCwgeSkJKCgoeCkqNDApICsgKHkpKQkvKiBYLjY5MCA4LjE5LjQgKi8KKworI2lmbmRlZiBOT19BQlJFVl9NSUIKK3N0YXRpYyBjb25zdCB1aW50OF90IG1pYl9vaWRbXSA9IHsgT0lEX0ZJUlNUX09DVEVUKDEsIDMpLCA2LCAxLCAyLCAxIH07CisjZW5kaWYKKyNpZm5kZWYgTk9fQUJSRVZfRU5URVIKK3N0YXRpYyBjb25zdCB1aW50OF90IGVudGVycHJpc2VzX29pZFtdID0geyBPSURfRklSU1RfT0NURVQoMSwgMyksIDYsIDEsIDQsIDEgfTsKKyNlbmRpZgorI2lmbmRlZiBOT19BQlJFVl9FWFBFUkkKK3N0YXRpYyBjb25zdCB1aW50OF90IGV4cGVyaW1lbnRhbF9vaWRbXSA9IHsgT0lEX0ZJUlNUX09DVEVUKDEsIDMpLCA2LCAxLCAzIH07CisjZW5kaWYKKyNpZm5kZWYgTk9fQUJCUkVWX1NOTVBNT0RTCitzdGF0aWMgY29uc3QgdWludDhfdCBzbm1wTW9kdWxlc19vaWRbXSA9IHsgT0lEX0ZJUlNUX09DVEVUKDEsIDMpLCA2LCAxLCA2LCAzIH07CisjZW5kaWYKKworI2RlZmluZSBPQkpfQUJCUkVWX0VOVFJZKHByZWZpeCwgb2JqKSBcCisJeyBwcmVmaXgsICZfICMjIG9iaiAjIyBfb2JqLCBvYmogIyMgX29pZCwgc2l6ZW9mIChvYmogIyMgX29pZCkgfQogc3RhdGljIGNvbnN0IHN0cnVjdCBvYmpfYWJyZXYgewogCWNvbnN0IGNoYXIgKnByZWZpeDsJCS8qIHByZWZpeCBmb3IgdGhpcyBhYnJldiAqLwogCXN0cnVjdCBvYmogKm5vZGU7CQkvKiBwb2ludGVyIGludG8gb2JqZWN0IHRhYmxlICovCi0JY29uc3QgY2hhciAqb2lkOwkJLyogQVNOLjEgZW5jb2RlZCBPSUQgKi8KKwljb25zdCB1aW50OF90ICpvaWQ7CQkvKiBBU04uMSBlbmNvZGVkIE9JRCAqLworCXNpemVfdCBvaWRfbGVuOwkJCS8qIGxlbmd0aCBvZiBPSUQgKi8KIH0gb2JqX2FicmV2X2xpc3RbXSA9IHsKICNpZm5kZWYgTk9fQUJSRVZfTUlCCiAJLyogLmlzby5vcmcuZG9kLmludGVybmV0Lm1nbXQubWliICovCi0JeyAiIiwJJl9taWJfb2JqLAkJIlw1M1w2XDFcMlwxIiB9LAorCU9CSl9BQkJSRVZfRU5UUlkoIiIsCW1pYiksCiAjZW5kaWYKICNpZm5kZWYgTk9fQUJSRVZfRU5URVIKIAkvKiAuaXNvLm9yZy5kb2QuaW50ZXJuZXQucHJpdmF0ZS5lbnRlcnByaXNlcyAqLwotCXsgIkU6IiwJJl9lbnRlcnByaXNlc19vYmosCSJcNTNcNlwxXDRcMSIgfSwKKwlPQkpfQUJCUkVWX0VOVFJZKCJFOiIsCWVudGVycHJpc2VzKSwKICNlbmRpZgogI2lmbmRlZiBOT19BQlJFVl9FWFBFUkkKIAkvKiAuaXNvLm9yZy5kb2QuaW50ZXJuZXQuZXhwZXJpbWVudGFsICovCi0JeyAiWDoiLAkmX2V4cGVyaW1lbnRhbF9vYmosCSJcNTNcNlwxXDMiIH0sCisJT0JKX0FCQlJFVl9FTlRSWSgiWDoiLAlleHBlcmltZW50YWwpLAogI2VuZGlmCiAjaWZuZGVmIE5PX0FCQlJFVl9TTk1QTU9EUwogCS8qIC5pc28ub3JnLmRvZC5pbnRlcm5ldC5zbm1wVjIuc25tcE1vZHVsZXMgKi8KLSAgICAgICAgeyAiUzoiLCAmX3NubXBNb2R1bGVzX29iaiwgICAgICAiXDUzXDZcMVw2XDMiIH0sCisJT0JKX0FCQlJFVl9FTlRSWSgiUzoiLAlzbm1wTW9kdWxlcyksCiAjZW5kaWYKLQl7IDAsMCwwIH0KKwl7IDAsMCwwLDAgfQogfTsKIAogLyoKQEAgLTMyNSwxNCArMzQ0LDExIEBACiBzdHJ1Y3QgYmUgewogCXVpbnQzMl90IGFzbmxlbjsKIAl1bmlvbiB7Ci0JCWNhZGRyX3QgcmF3OworCQljb25zdCB1aW50OF90ICpyYXc7CiAJCWludDMyX3QgaW50ZWdlcjsKIAkJdWludDMyX3QgdW5zOwogCQljb25zdCB1X2NoYXIgKnN0cjsKLQkgICAgICAgIHN0cnVjdCB7Ci0JCSAgICAgICAgdWludDMyX3QgaGlnaDsKLQkJICAgICAgICB1aW50MzJfdCBsb3c7Ci0JCX0gdW5zNjQ7CisJCXVpbnQ2NF90IHVuczY0OwogCX0gZGF0YTsKIAl1X3Nob3J0IGlkOwogCXVfY2hhciBmb3JtLCBjbGFzczsJCS8qIHRhZyBpbmZvICovCkBAIC00NDYsMTMgKzQ2MiwxOCBAQAogCQkgKiBiaXQgc2V0LiAgWFhYIC0gdGhpcyBkb2Vzbid0IGhhbmRsZSBhIHZhbHVlCiAJCSAqIHRoYXQgd29uJ3QgZml0IGluIDMyIGJpdHMuCiAJCSAqLwotCQlmb3IgKGlkID0gMDsgKnAgJiBBU05fQklUODsgbGVuLS0sIGhkcisrLCBwKyspIHsKKwkJaWQgPSAwOworCQlORF9UQ0hFQ0soKnApOworCQl3aGlsZSAoKnAgJiBBU05fQklUOCkgewogCQkJaWYgKGxlbiA8IDEpIHsKIAkJCQlORF9QUklOVCgobmRvLCAiW1h0YWdmaWVsZD9dIikpOwogCQkJCXJldHVybiAtMTsKIAkJCX0KLQkJCU5EX1RDSEVDSygqcCk7CiAJCQlpZCA9IChpZCA8PCA3KSB8ICgqcCAmIH5BU05fQklUOCk7CisJCQlsZW4tLTsKKwkJCWhkcisrOworCQkJcCsrOworCQkJTkRfVENIRUNLKCpwKTsKIAkJfQogCQlpZiAobGVuIDwgMSkgewogCQkJTkRfUFJJTlQoKG5kbywgIltYdGFnZmllbGQ/XSIpKTsKQEAgLTQ5OCw2ICs1MTksNyBAQAogCQlORF9QUklOVCgobmRvLCAiW2lkPyVjLyVzLyVkXSIsICpGb3JtW2Zvcm1dLCBDbGFzc1tjbGFzc10ubmFtZSwgaWQpKTsKIAkJcmV0dXJuIC0xOwogCX0KKwlORF9UQ0hFQ0syKCpwLCBlbGVtLT5hc25sZW4pOwogCiAJc3dpdGNoIChmb3JtKSB7CiAJY2FzZSBQUklNSVRJVkU6CkBAIC01MTQsNyArNTM2LDEwIEBACiAJCQkJZWxlbS0+dHlwZSA9IEJFX0lOVDsKIAkJCQlkYXRhID0gMDsKIAotCQkJCU5EX1RDSEVDSzIoKnAsIGVsZW0tPmFzbmxlbik7CisJCQkJaWYgKGVsZW0tPmFzbmxlbiA9PSAwKSB7CisJCQkJCU5EX1BSSU5UKChuZG8sICJbYXNubGVuPTBdIikpOworCQkJCQlyZXR1cm4gLTE7CisJCQkJfQogCQkJCWlmICgqcCAmIEFTTl9CSVQ4KQkvKiBuZWdhdGl2ZSAqLwogCQkJCQlkYXRhID0gLTE7CiAJCQkJZm9yIChpID0gZWxlbS0+YXNubGVuOyBpLS0gPiAwOyBwKyspCkBAIC01MjUsNyArNTUwLDcgQEAKIAogCQkJY2FzZSBPQkpFQ1RJRDoKIAkJCQllbGVtLT50eXBlID0gQkVfT0lEOwotCQkJCWVsZW0tPmRhdGEucmF3ID0gKGNhZGRyX3QpcDsKKwkJCQllbGVtLT5kYXRhLnJhdyA9IChjb25zdCB1aW50OF90ICopcDsKIAkJCQlicmVhazsKIAogCQkJY2FzZSBBU05fTlVMTDoKQEAgLTUzNSw3ICs1NjAsNyBAQAogCiAJCQlkZWZhdWx0OgogCQkJCWVsZW0tPnR5cGUgPSBCRV9PQ1RFVDsKLQkJCQllbGVtLT5kYXRhLnJhdyA9IChjYWRkcl90KXA7CisJCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY29uc3QgdWludDhfdCAqKXA7CiAJCQkJTkRfUFJJTlQoKG5kbywgIltQL1UvJXNdIiwgQ2xhc3NbY2xhc3NdLklkW2lkXSkpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtNTQ1LDE0ICs1NzAsMTMgQEAKIAkJCXN3aXRjaCAoaWQpIHsKIAkJCWNhc2UgSVBBRERSOgogCQkJCWVsZW0tPnR5cGUgPSBCRV9JTkVUQUREUjsKLQkJCQllbGVtLT5kYXRhLnJhdyA9IChjYWRkcl90KXA7CisJCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY29uc3QgdWludDhfdCAqKXA7CiAJCQkJYnJlYWs7CiAKIAkJCWNhc2UgQ09VTlRFUjoKIAkJCWNhc2UgR0FVR0U6CiAJCQljYXNlIFRJTUVUSUNLUzogewogCQkJCXJlZ2lzdGVyIHVpbnQzMl90IGRhdGE7Ci0JCQkJTkRfVENIRUNLMigqcCwgZWxlbS0+YXNubGVuKTsKIAkJCQllbGVtLT50eXBlID0gQkVfVU5TOwogCQkJCWRhdGEgPSAwOwogCQkJCWZvciAoaSA9IGVsZW0tPmFzbmxlbjsgaS0tID4gMDsgcCsrKQpAQCAtNTYyLDIzICs1ODYsMTggQEAKIAkJCX0KIAogCQkJY2FzZSBDT1VOVEVSNjQ6IHsKLQkJCQlyZWdpc3RlciB1aW50MzJfdCBoaWdoLCBsb3c7Ci0JCQkJTkRfVENIRUNLMigqcCwgZWxlbS0+YXNubGVuKTsKKwkJCQlyZWdpc3RlciB1aW50NjRfdCBkYXRhNjQ7CiAJCQkgICAgICAgIGVsZW0tPnR5cGUgPSBCRV9VTlM2NDsKLQkJCQloaWdoID0gMCwgbG93ID0gMDsKLQkJCQlmb3IgKGkgPSBlbGVtLT5hc25sZW47IGktLSA+IDA7IHArKykgewotCQkJCSAgICAgICAgaGlnaCA9IChoaWdoIDw8IDgpIHwKLQkJCQkJICAgICgobG93ICYgMHhGRjAwMDAwMCkgPj4gMjQpOwotCQkJCQlsb3cgPSAobG93IDw8IDgpIHwgKnA7Ci0JCQkJfQotCQkJCWVsZW0tPmRhdGEudW5zNjQuaGlnaCA9IGhpZ2g7Ci0JCQkJZWxlbS0+ZGF0YS51bnM2NC5sb3cgPSBsb3c7CisJCQkJZGF0YTY0ID0gMDsKKwkJCQlmb3IgKGkgPSBlbGVtLT5hc25sZW47IGktLSA+IDA7IHArKykKKwkJCQkJZGF0YTY0ID0gKGRhdGE2NCA8PCA4KSArICpwOworCQkJCWVsZW0tPmRhdGEudW5zNjQgPSBkYXRhNjQ7CiAJCQkJYnJlYWs7CiAJCQl9CiAKIAkJCWRlZmF1bHQ6CiAJCQkJZWxlbS0+dHlwZSA9IEJFX09DVEVUOwotCQkJCWVsZW0tPmRhdGEucmF3ID0gKGNhZGRyX3QpcDsKKwkJCQllbGVtLT5kYXRhLnJhdyA9IChjb25zdCB1aW50OF90ICopcDsKIAkJCQlORF9QUklOVCgobmRvLCAiW1AvQS8lc10iLAogCQkJCQlDbGFzc1tjbGFzc10uSWRbaWRdKSk7CiAJCQkJYnJlYWs7CkBAIC02MDYsOSArNjI1LDggQEAKIAogCQlkZWZhdWx0OgogCQkJTkRfUFJJTlQoKG5kbywgIltQLyVzLyVzXSIsIENsYXNzW2NsYXNzXS5uYW1lLCBDbGFzc1tjbGFzc10uSWRbaWRdKSk7Ci0JCQlORF9UQ0hFQ0syKCpwLCBlbGVtLT5hc25sZW4pOwogCQkJZWxlbS0+dHlwZSA9IEJFX09DVEVUOwotCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY2FkZHJfdClwOworCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY29uc3QgdWludDhfdCAqKXA7CiAJCQlicmVhazsKIAkJfQogCQlicmVhazsKQEAgLTYxOSwxMiArNjM3LDEyIEBACiAJCQlzd2l0Y2ggKGlkKSB7CiAJCQljYXNlIFNFUVVFTkNFOgogCQkJCWVsZW0tPnR5cGUgPSBCRV9TRVE7Ci0JCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY2FkZHJfdClwOworCQkJCWVsZW0tPmRhdGEucmF3ID0gKGNvbnN0IHVpbnQ4X3QgKilwOwogCQkJCWJyZWFrOwogCiAJCQlkZWZhdWx0OgogCQkJCWVsZW0tPnR5cGUgPSBCRV9PQ1RFVDsKLQkJCQllbGVtLT5kYXRhLnJhdyA9IChjYWRkcl90KXA7CisJCQkJZWxlbS0+ZGF0YS5yYXcgPSAoY29uc3QgdWludDhfdCAqKXA7CiAJCQkJTkRfUFJJTlQoKG5kbywgIkMvVS8lcyIsIENsYXNzW2NsYXNzXS5JZFtpZF0pKTsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTYzMiwxMiArNjUwLDEyIEBACiAKIAkJY2FzZSBDT05URVhUOgogCQkJZWxlbS0+dHlwZSA9IEJFX1BEVTsKLQkJCWVsZW0tPmRhdGEucmF3ID0gKGNhZGRyX3QpcDsKKwkJCWVsZW0tPmRhdGEucmF3ID0gKGNvbnN0IHVpbnQ4X3QgKilwOwogCQkJYnJlYWs7CiAKIAkJZGVmYXVsdDoKIAkJCWVsZW0tPnR5cGUgPSBCRV9PQ1RFVDsKLQkJCWVsZW0tPmRhdGEucmF3ID0gKGNhZGRyX3QpcDsKKwkJCWVsZW0tPmRhdGEucmF3ID0gKGNvbnN0IHVpbnQ4X3QgKilwOwogCQkJTkRfUFJJTlQoKG5kbywgIkMvJXMvJXMiLCBDbGFzc1tjbGFzc10ubmFtZSwgQ2xhc3NbY2xhc3NdLklkW2lkXSkpOwogCQkJYnJlYWs7CiAJCX0KQEAgLTY1Miw2ICs2NzAsNTYgQEAKIAlyZXR1cm4gLTE7CiB9CiAKK3N0YXRpYyBpbnQKK2FzbjFfcHJpbnRfb2N0ZXRzKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBzdHJ1Y3QgYmUgKmVsZW0pCit7CisJY29uc3QgdV9jaGFyICpwID0gKGNvbnN0IHVfY2hhciAqKWVsZW0tPmRhdGEucmF3OworCXVpbnQzMl90IGFzbmxlbiA9IGVsZW0tPmFzbmxlbjsKKwl1aW50MzJfdCBpOworCisJTkRfVENIRUNLMigqcCwgYXNubGVuKTsKKwlmb3IgKGkgPSBhc25sZW47IGktLSA+IDA7IHArKykKKwkJTkRfUFJJTlQoKG5kbywgIl8lLjJ4IiwgKnApKTsKKwlyZXR1cm4gMDsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCXJldHVybiAtMTsKK30KKworc3RhdGljIGludAorYXNuMV9wcmludF9zdHJpbmcobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHN0cnVjdCBiZSAqZWxlbSkKK3sKKwlyZWdpc3RlciBpbnQgcHJpbnRhYmxlID0gMSwgZmlyc3QgPSAxOworCWNvbnN0IHVfY2hhciAqcDsKKwl1aW50MzJfdCBhc25sZW4gPSBlbGVtLT5hc25sZW47CisJdWludDMyX3QgaTsKKworCXAgPSBlbGVtLT5kYXRhLnN0cjsKKwlORF9UQ0hFQ0syKCpwLCBhc25sZW4pOworCWZvciAoaSA9IGFzbmxlbjsgcHJpbnRhYmxlICYmIGktLSA+IDA7IHArKykKKwkJcHJpbnRhYmxlID0gTkRfSVNQUklOVCgqcCk7CisJcCA9IGVsZW0tPmRhdGEuc3RyOworCWlmIChwcmludGFibGUpIHsKKwkJTkRfUFJJTlQoKG5kbywgIlwiIikpOworCQlpZiAoZm5fcHJpbnRuKG5kbywgcCwgYXNubGVuLCBuZG8tPm5kb19zbmFwZW5kKSkgeworCQkJTkRfUFJJTlQoKG5kbywgIlwiIikpOworCQkJZ290byB0cnVuYzsKKwkJfQorCQlORF9QUklOVCgobmRvLCAiXCIiKSk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gYXNubGVuOyBpLS0gPiAwOyBwKyspIHsKKwkJCU5EX1BSSU5UKChuZG8sIGZpcnN0ID8gIiUuMngiIDogIl8lLjJ4IiwgKnApKTsKKwkJCWZpcnN0ID0gMDsKKwkJfQorCX0KKwlyZXR1cm4gMDsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworCXJldHVybiAtMTsKK30KKwogLyoKICAqIERpc3BsYXkgdGhlIEFTTi4xIG9iamVjdCByZXByZXNlbnRlZCBieSB0aGUgQkUgb2JqZWN0LgogICogVGhpcyB1c2VkIHRvIGJlIGFuIGludGVncmFsIHBhcnQgb2YgYXNuMV9wYXJzZSgpIGJlZm9yZSB0aGUgaW50ZXJtZWRpYXRlCkBAIC02NjEsMzMgKzcyOSwzNiBAQAogYXNuMV9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKICAgICAgICAgICAgc3RydWN0IGJlICplbGVtKQogewotCXVfY2hhciAqcCA9ICh1X2NoYXIgKillbGVtLT5kYXRhLnJhdzsKKwljb25zdCB1X2NoYXIgKnA7CiAJdWludDMyX3QgYXNubGVuID0gZWxlbS0+YXNubGVuOwogCXVpbnQzMl90IGk7CiAKIAlzd2l0Y2ggKGVsZW0tPnR5cGUpIHsKIAogCWNhc2UgQkVfT0NURVQ6Ci0JCU5EX1RDSEVDSzIoKnAsIGFzbmxlbik7Ci0JCWZvciAoaSA9IGFzbmxlbjsgaS0tID4gMDsgcCsrKQotCQkJTkRfUFJJTlQoKG5kbywgIl8lLjJ4IiwgKnApKTsKKwkJaWYgKGFzbjFfcHJpbnRfb2N0ZXRzKG5kbywgZWxlbSkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CiAJCWJyZWFrOwogCiAJY2FzZSBCRV9OVUxMOgogCQlicmVhazsKIAogCWNhc2UgQkVfT0lEOiB7Ci0JCWludCBvID0gMCwgZmlyc3QgPSAtMSwgaSA9IGFzbmxlbjsKKwkJaW50IG8gPSAwLCBmaXJzdCA9IC0xOwogCi0JCWlmICghbmRvLT5uZG9fc2ZsYWcgJiYgIW5kby0+bmRvX25mbGFnICYmIGFzbmxlbiA+IDIpIHsKKwkJcCA9IChjb25zdCB1X2NoYXIgKillbGVtLT5kYXRhLnJhdzsKKwkJaSA9IGFzbmxlbjsKKwkJaWYgKCFuZG8tPm5kb19uZmxhZyAmJiBhc25sZW4gPiAyKSB7CiAJCQljb25zdCBzdHJ1Y3Qgb2JqX2FicmV2ICphID0gJm9ial9hYnJldl9saXN0WzBdOwotCQkJc2l6ZV90IGFfbGVuID0gc3RybGVuKGEtPm9pZCk7CiAJCQlmb3IgKDsgYS0+bm9kZTsgYSsrKSB7Ci0JCQkJTkRfVENIRUNLMigqcCwgYV9sZW4pOwotCQkJCWlmIChtZW1jbXAoYS0+b2lkLCAoY2hhciAqKXAsIGFfbGVuKSA9PSAwKSB7CisJCQkJaWYgKGkgPCBhLT5vaWRfbGVuKQorCQkJCQljb250aW51ZTsKKwkJCQlpZiAoIU5EX1RURVNUMigqcCwgYS0+b2lkX2xlbikpCisJCQkJCWNvbnRpbnVlOworCQkJCWlmIChtZW1jbXAoYS0+b2lkLCBwLCBhLT5vaWRfbGVuKSA9PSAwKSB7CiAJCQkJCW9ianAgPSBhLT5ub2RlLT5jaGlsZDsKLQkJCQkJaSAtPSBzdHJsZW4oYS0+b2lkKTsKLQkJCQkJcCArPSBzdHJsZW4oYS0+b2lkKTsKKwkJCQkJaSAtPSBhLT5vaWRfbGVuOworCQkJCQlwICs9IGEtPm9pZF9sZW47CiAJCQkJCU5EX1BSSU5UKChuZG8sICIlcyIsIGEtPnByZWZpeCkpOwogCQkJCQlmaXJzdCA9IDE7CiAJCQkJCWJyZWFrOwpAQCAtNjk1LDE0ICs3NjYsMTUgQEAKIAkJCX0KIAkJfQogCi0JCWZvciAoOyAhbmRvLT5uZG9fc2ZsYWcgJiYgaS0tID4gMDsgcCsrKSB7CisJCWZvciAoOyBpLS0gPiAwOyBwKyspIHsKIAkJCU5EX1RDSEVDSygqcCk7CiAJCQlvID0gKG8gPDwgQVNOX1NISUZUNykgKyAoKnAgJiB+QVNOX0JJVDgpOwogCQkJaWYgKCpwICYgQVNOX0xPTkdMRU4pCiAJCQkgICAgICAgIGNvbnRpbnVlOwogCiAJCQkvKgotCQkJICogZmlyc3Qgc3ViaXRlbSBlbmNvZGVzIHR3byBpdGVtcyB3aXRoIDFzdCpPSURNVVgrMm5kCisJCQkgKiBmaXJzdCBzdWJpdGVtIGVuY29kZXMgdHdvIGl0ZW1zIHdpdGgKKwkJCSAqIDFzdCpPSURNVVgrMm5kCiAJCQkgKiAoc2VlIFguNjkwOjE5OTcgY2xhdXNlIDguMTkgZm9yIHRoZSBkZXRhaWxzKQogCQkJICovCiAJCQlpZiAoZmlyc3QgPCAwKSB7CkBAIC03MzEsNjkgKzgwMywxNCBAQAogCQlORF9QUklOVCgobmRvLCAiJXUiLCBlbGVtLT5kYXRhLnVucykpOwogCQlicmVhazsKIAotCWNhc2UgQkVfVU5TNjQ6IHsJLyogaWRlYSBib3Jyb3dlZCBmcm9tIGJ5IE1hcnNoYWxsIFJvc2UgKi8KLQkgICAgICAgIGRvdWJsZSBkOwotCQlpbnQgaiwgY2Fycnk7Ci0JCWNoYXIgKmNwZiwgKmNwbCwgbGFzdFs2XSwgZmlyc3RbMzBdOwotCQlpZiAoZWxlbS0+ZGF0YS51bnM2NC5oaWdoID09IDApIHsKLQkJCU5EX1BSSU5UKChuZG8sICIldSIsIGVsZW0tPmRhdGEudW5zNjQubG93KSk7Ci0JCQlicmVhazsKLQkJfQotCQlkID0gZWxlbS0+ZGF0YS51bnM2NC5oaWdoICogNDI5NDk2NzI5Ni4wOwkvKiAyXjMyICovCi0JCWlmIChlbGVtLT5kYXRhLnVuczY0LmhpZ2ggPD0gMHgxZmZmZmYpIHsKLQkJICAgICAgICBkICs9IGVsZW0tPmRhdGEudW5zNjQubG93OwotI2lmIDAgLyppcyBsb29rcyBpbGxlZ2FsLCBidXQgd2hhdCBpcyB0aGUgaW50ZW50aW9uPyovCi0JCQlORF9QUklOVCgobmRvLCAiJS5mIiwgZCkpOwotI2Vsc2UKLQkJCU5EX1BSSU5UKChuZG8sICIlZiIsIGQpKTsKLSNlbmRpZgotCQkJYnJlYWs7Ci0JCX0KLQkJZCArPSAoZWxlbS0+ZGF0YS51bnM2NC5sb3cgJiAweGZmZmZmMDAwKTsKLSNpZiAwIC8qaXMgbG9va3MgaWxsZWdhbCwgYnV0IHdoYXQgaXMgdGhlIGludGVudGlvbj8qLwotCQlzbnByaW50ZihmaXJzdCwgc2l6ZW9mKGZpcnN0KSwgIiUuZiIsIGQpOwotI2Vsc2UKLQkJc25wcmludGYoZmlyc3QsIHNpemVvZihmaXJzdCksICIlZiIsIGQpOwotI2VuZGlmCi0JCXNucHJpbnRmKGxhc3QsIHNpemVvZihsYXN0KSwgIiU1LjVkIiwKLQkJICAgIGVsZW0tPmRhdGEudW5zNjQubG93ICYgMHhmZmYpOwotCQlmb3IgKGNhcnJ5ID0gMCwgY3BmID0gZmlyc3Qrc3RybGVuKGZpcnN0KS0xLCBjcGwgPSBsYXN0KzQ7Ci0JCSAgICAgY3BsID49IGxhc3Q7Ci0JCSAgICAgY3BmLS0sIGNwbC0tKSB7Ci0JCSAgICAgICAgaiA9IGNhcnJ5ICsgKCpjcGYgLSAnMCcpICsgKCpjcGwgLSAnMCcpOwotCQkJaWYgKGogPiA5KSB7Ci0JCQkgICAgICAgIGogLT0gMTA7Ci0JCQkJY2FycnkgPSAxOwotCQkJfSBlbHNlIHsKLQkJCSAgICAgICAgY2FycnkgPSAwOwotCQkgICAgICAgIH0KLQkJCSpjcGYgPSBqICsgJzAnOwotCQl9Ci0JCU5EX1BSSU5UKChuZG8sICIlcyIsIGZpcnN0KSk7CisJY2FzZSBCRV9VTlM2NDoKKwkJTkRfUFJJTlQoKG5kbywgIiUiIFBSSXU2NCwgZWxlbS0+ZGF0YS51bnM2NCkpOwogCQlicmVhazsKLQl9CiAKLQljYXNlIEJFX1NUUjogewotCQlyZWdpc3RlciBpbnQgcHJpbnRhYmxlID0gMSwgZmlyc3QgPSAxOwotCQljb25zdCB1X2NoYXIgKnAgPSBlbGVtLT5kYXRhLnN0cjsKLQkJTkRfVENIRUNLMigqcCwgYXNubGVuKTsKLQkJZm9yIChpID0gYXNubGVuOyBwcmludGFibGUgJiYgaS0tID4gMDsgcCsrKQotCQkJcHJpbnRhYmxlID0gTkRfSVNQUklOVCgqcCk7Ci0JCXAgPSBlbGVtLT5kYXRhLnN0cjsKLQkJaWYgKHByaW50YWJsZSkgewotCQkJTkRfUFJJTlQoKG5kbywgIlwiIikpOwotCQkJaWYgKGZuX3ByaW50bihuZG8sIHAsIGFzbmxlbiwgbmRvLT5uZG9fc25hcGVuZCkpIHsKLQkJCQlORF9QUklOVCgobmRvLCAiXCIiKSk7Ci0JCQkJZ290byB0cnVuYzsKLQkJCX0KLQkJCU5EX1BSSU5UKChuZG8sICJcIiIpKTsKLQkJfSBlbHNlCi0JCQlmb3IgKGkgPSBhc25sZW47IGktLSA+IDA7IHArKykgewotCQkJCU5EX1BSSU5UKChuZG8sIGZpcnN0ID8gIiUuMngiIDogIl8lLjJ4IiwgKnApKTsKLQkJCQlmaXJzdCA9IDA7Ci0JCQl9CisJY2FzZSBCRV9TVFI6CisJCWlmIChhc24xX3ByaW50X3N0cmluZyhuZG8sIGVsZW0pID09IC0xKQorCQkJcmV0dXJuIC0xOwogCQlicmVhazsKLQl9CiAKIAljYXNlIEJFX1NFUToKIAkJTkRfUFJJTlQoKG5kbywgIlNlcSgldSkiLCBlbGVtLT5hc25sZW4pKTsKQEAgLTgwMiw2ICs4MTksNyBAQAogCWNhc2UgQkVfSU5FVEFERFI6CiAJCWlmIChhc25sZW4gIT0gQVNOTEVOX0lORVRBRERSKQogCQkJTkRfUFJJTlQoKG5kbywgIltpbmV0YWRkciBsZW4hPSVkXSIsIEFTTkxFTl9JTkVUQUREUikpOworCQlwID0gKGNvbnN0IHVfY2hhciAqKWVsZW0tPmRhdGEucmF3OwogCQlORF9UQ0hFQ0syKCpwLCBhc25sZW4pOwogCQlmb3IgKGkgPSBhc25sZW47IGktLSAhPSAwOyBwKyspIHsKIAkJCU5EX1BSSU5UKChuZG8sIChpID09IGFzbmxlbi0xKSA/ICIldSIgOiAiLiV1IiwgKnApKTsKQEAgLTg5NSwxMiArOTEzLDEyIEBACiAgICAgICAgICAgICAgICBzdHJ1Y3QgYmUgKmVsZW0sIHVuc2lnbmVkIGludCAqb2lkLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG9pZHNpemUsIHVuc2lnbmVkIGludCAqb2lkbGVuKQogewotCXVfY2hhciAqcCA9ICh1X2NoYXIgKillbGVtLT5kYXRhLnJhdzsKKwljb25zdCB1X2NoYXIgKnAgPSAoY29uc3QgdV9jaGFyICopZWxlbS0+ZGF0YS5yYXc7CiAJdWludDMyX3QgYXNubGVuID0gZWxlbS0+YXNubGVuOwogCWludCBvID0gMCwgZmlyc3QgPSAtMSwgaSA9IGFzbmxlbjsKIAl1bnNpZ25lZCBpbnQgZmlyc3R2YWw7CiAKLQlmb3IgKCpvaWRsZW4gPSAwOyBuZG8tPm5kb19zZmxhZyAmJiBpLS0gPiAwOyBwKyspIHsKKwlmb3IgKCpvaWRsZW4gPSAwOyBpLS0gPiAwOyBwKyspIHsKIAkJTkRfVENIRUNLKCpwKTsKIAkgICAgICAgIG8gPSAobyA8PCBBU05fU0hJRlQ3KSArICgqcCAmIH5BU05fQklUOCk7CiAJCWlmICgqcCAmIEFTTl9MT05HTEVOKQpAQCAtOTExLDcgKzkyOSw3IEBACiAJCSAqIChzZWUgWC42OTA6MTk5NyBjbGF1c2UgOC4xOSBmb3IgdGhlIGRldGFpbHMpCiAJCSAqLwogCQlpZiAoZmlyc3QgPCAwKSB7Ci0JCSAgICAgICAgZmlyc3QgPSAwOworCSAgICAgICAgCWZpcnN0ID0gMDsKIAkJCWZpcnN0dmFsID0gbyAvIE9JRE1VWDsKIAkJCWlmIChmaXJzdHZhbCA+IDIpIGZpcnN0dmFsID0gMjsKIAkJCW8gLT0gZmlyc3R2YWwgKiBPSURNVVg7CkBAIC0xMDI5LDYgKzEwNDcsMTAgQEAKIAlTbWlOb2RlICpzbWlOb2RlID0gTlVMTDsKIAl1bnNpZ25lZCBpbnQgaTsKIAorCWlmICghbmRfc21pX21vZHVsZV9sb2FkZWQpIHsKKwkJKnN0YXR1cyA9IGFzbjFfcHJpbnQobmRvLCBlbGVtKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCSpzdGF0dXMgPSBzbWlfZGVjb2RlX29pZChuZG8sIGVsZW0sIG9pZCwgc2l6ZW9mKG9pZCkgLyBzaXplb2YodW5zaWduZWQgaW50KSwKIAkgICAgJm9pZGxlbik7CiAJaWYgKCpzdGF0dXMgPCAwKQpAQCAtMTA1Myw3ICsxMDc1LDcgQEAKIAogc3RhdGljIGludAogc21pX3ByaW50X3ZhbHVlKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgICAgIFNtaU5vZGUgKnNtaU5vZGUsIHVfY2hhciBwZHVpZCwgc3RydWN0IGJlICplbGVtKQorICAgICAgICAgICAgICAgIFNtaU5vZGUgKnNtaU5vZGUsIHVfc2hvcnQgcGR1aWQsIHN0cnVjdCBiZSAqZWxlbSkKIHsKIAl1bnNpZ25lZCBpbnQgaSwgb2lkWzEyOF0sIG9pZGxlbjsKIAlTbWlUeXBlICpzbWlUeXBlOwpAQCAtMTExNCwyMiArMTEzNiwyNCBAQAogCSAgICAgICAgaWYgKHNtaVR5cGUtPmJhc2V0eXBlID09IFNNSV9CQVNFVFlQRV9CSVRTKSB7CiAJCSAgICAgICAgLyogcHJpbnQgYml0IGxhYmVscyAqLwogCQl9IGVsc2UgewotCQkgICAgICAgIHNtaV9kZWNvZGVfb2lkKG5kbywgZWxlbSwgb2lkLAotCQkJCSAgICAgICBzaXplb2Yob2lkKS9zaXplb2YodW5zaWduZWQgaW50KSwKLQkJCQkgICAgICAgJm9pZGxlbik7Ci0JCQlzbWlOb2RlID0gc21pR2V0Tm9kZUJ5T0lEKG9pZGxlbiwgb2lkKTsKLQkJCWlmIChzbWlOb2RlKSB7Ci0JCQkgICAgICAgIGlmIChuZG8tPm5kb192ZmxhZykgewotCQkJCQlORF9QUklOVCgobmRvLCAiJXM6OiIsIHNtaUdldE5vZGVNb2R1bGUoc21pTm9kZSktPm5hbWUpKTsKLQkJCQl9Ci0JCQkJTkRfUFJJTlQoKG5kbywgIiVzIiwgc21pTm9kZS0+bmFtZSkpOwotCQkJCWlmIChzbWlOb2RlLT5vaWRsZW4gPCBvaWRsZW4pIHsKLQkJCQkgICAgICAgIGZvciAoaSA9IHNtaU5vZGUtPm9pZGxlbjsKLQkJCQkJICAgICBpIDwgb2lkbGVuOyBpKyspIHsKLQkJCQkJICAgICAgICBORF9QUklOVCgobmRvLCAiLiV1Iiwgb2lkW2ldKSk7CisJCQlpZiAobmRfc21pX21vZHVsZV9sb2FkZWQgJiYKKwkJCSAgICBzbWlfZGVjb2RlX29pZChuZG8sIGVsZW0sIG9pZCwKKwkJCQkJICAgc2l6ZW9mKG9pZCkvc2l6ZW9mKHVuc2lnbmVkIGludCksCisJCQkJCSAgICZvaWRsZW4pID09IDApIHsKKwkJCQlzbWlOb2RlID0gc21pR2V0Tm9kZUJ5T0lEKG9pZGxlbiwgb2lkKTsKKwkJCQlpZiAoc21pTm9kZSkgeworCQkJCSAgICAgICAgaWYgKG5kby0+bmRvX3ZmbGFnKSB7CisJCQkJCQlORF9QUklOVCgobmRvLCAiJXM6OiIsIHNtaUdldE5vZGVNb2R1bGUoc21pTm9kZSktPm5hbWUpKTsKIAkJCQkJfQorCQkJCQlORF9QUklOVCgobmRvLCAiJXMiLCBzbWlOb2RlLT5uYW1lKSk7CisJCQkJCWlmIChzbWlOb2RlLT5vaWRsZW4gPCBvaWRsZW4pIHsKKwkJCQkJICAgICAgICBmb3IgKGkgPSBzbWlOb2RlLT5vaWRsZW47CisJCQkJCQkgICAgIGkgPCBvaWRsZW47IGkrKykgeworCQkJCQkJICAgICAgICBORF9QUklOVCgobmRvLCAiLiV1Iiwgb2lkW2ldKSk7CisJCQkJCQl9CisJCQkJCX0KKwkJCQkJZG9uZSsrOwogCQkJCX0KLQkJCQlkb25lKys7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CkBAIC0xMTk2LDcgKzEyMjAsNyBAQAogICovCiBzdGF0aWMgdm9pZAogdmFyYmluZF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKLSAgICAgICAgICAgICAgdV9jaGFyIHBkdWlkLCBjb25zdCB1X2NoYXIgKm5wLCB1X2ludCBsZW5ndGgpCisgICAgICAgICAgICAgIHVfc2hvcnQgcGR1aWQsIGNvbnN0IHVfY2hhciAqbnAsIHVfaW50IGxlbmd0aCkKIHsKIAlzdHJ1Y3QgYmUgZWxlbTsKIAlpbnQgY291bnQgPSAwLCBpbmQ7CkBAIC0xMjE3LDcgKzEyNDEsNyBAQAogCQlORF9QUklOVCgobmRvLCAiWyVkIGV4dHJhIGFmdGVyIFNFUSBvZiB2YXJiaW5kXSIsIGxlbmd0aCAtIGNvdW50KSk7CiAJLyogZGVzY2VuZCAqLwogCWxlbmd0aCA9IGVsZW0uYXNubGVuOwotCW5wID0gKHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CisJbnAgPSAoY29uc3QgdV9jaGFyICopZWxlbS5kYXRhLnJhdzsKIAogCWZvciAoaW5kID0gMTsgbGVuZ3RoID4gMDsgaW5kKyspIHsKIAkJY29uc3QgdV9jaGFyICp2YmVuZDsKQEAgLTEyMzcsNyArMTI2MSw3IEBACiAJCXZibGVuZ3RoID0gbGVuZ3RoIC0gY291bnQ7CiAJCS8qIGRlc2NlbmQgKi8KIAkJbGVuZ3RoID0gZWxlbS5hc25sZW47Ci0JCW5wID0gKHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CisJCW5wID0gKGNvbnN0IHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CiAKIAkJLyogb2JqTmFtZSAoT0lEKSAqLwogCQlpZiAoKGNvdW50ID0gYXNuMV9wYXJzZShuZG8sIG5wLCBsZW5ndGgsICZlbGVtKSkgPCAwKQpAQCAtMTI5Niw3ICsxMzIwLDcgQEAKICAgICAgICAgICAgICAgdV9zaG9ydCBwZHVpZCwgY29uc3QgdV9jaGFyICpucCwgdV9pbnQgbGVuZ3RoKQogewogCXN0cnVjdCBiZSBlbGVtOwotCWludCBjb3VudCA9IDAsIGVycm9yOworCWludCBjb3VudCA9IDAsIGVycm9yX3N0YXR1czsKIAogCS8qIHJlcUlkIChJbnRlZ2VyKSAqLwogCWlmICgoY291bnQgPSBhc24xX3BhcnNlKG5kbywgbnAsIGxlbmd0aCwgJmVsZW0pKSA8IDApCkBAIC0xMzE5LDcgKzEzNDMsNyBAQAogCQlhc24xX3ByaW50KG5kbywgJmVsZW0pOwogCQlyZXR1cm47CiAJfQotCWVycm9yID0gMDsKKwllcnJvcl9zdGF0dXMgPSAwOwogCWlmICgocGR1aWQgPT0gR0VUUkVRIHx8IHBkdWlkID09IEdFVE5FWFRSRVEgfHwgcGR1aWQgPT0gU0VUUkVRCiAJICAgIHx8IHBkdWlkID09IElORk9STVJFUSB8fCBwZHVpZCA9PSBWMlRSQVAgfHwgcGR1aWQgPT0gUkVQT1JUKQogCSAgICAmJiBlbGVtLmRhdGEuaW50ZWdlciAhPSAwKSB7CkBAIC0xMzMxLDcgKzEzNTUsNyBAQAogCX0gZWxzZSBpZiAoZWxlbS5kYXRhLmludGVnZXIgIT0gMCkgewogCQljaGFyIGVycmJ1ZlsyMF07CiAJCU5EX1BSSU5UKChuZG8sICIgJXMiLCBERUNPREVfRXJyb3JTdGF0dXMoZWxlbS5kYXRhLmludGVnZXIpKSk7Ci0JCWVycm9yID0gZWxlbS5kYXRhLmludGVnZXI7CisJCWVycm9yX3N0YXR1cyA9IGVsZW0uZGF0YS5pbnRlZ2VyOwogCX0KIAlsZW5ndGggLT0gY291bnQ7CiAJbnAgKz0gY291bnQ7CkBAIC0xMzUxLDE1ICsxMzc1LDEyIEBACiAJZWxzZSBpZiAocGR1aWQgPT0gR0VUQlVMS1JFUSkKIAkJTkRfUFJJTlQoKG5kbywgIiBNPSVkIiwgZWxlbS5kYXRhLmludGVnZXIpKTsKIAllbHNlIGlmIChlbGVtLmRhdGEuaW50ZWdlciAhPSAwKSB7Ci0JCWlmICghZXJyb3IpCisJCWlmICghZXJyb3Jfc3RhdHVzKQogCQkJTkRfUFJJTlQoKG5kbywgIltlcnJvckluZGV4KCVkKSB3L28gZXJyb3JTdGF0dXNdIiwgZWxlbS5kYXRhLmludGVnZXIpKTsKLQkJZWxzZSB7CisJCWVsc2UKIAkJCU5EX1BSSU5UKChuZG8sICJAJWQiLCBlbGVtLmRhdGEuaW50ZWdlcikpOwotCQkJZXJyb3IgPSBlbGVtLmRhdGEuaW50ZWdlcjsKLQkJfQotCX0gZWxzZSBpZiAoZXJyb3IpIHsKKwl9IGVsc2UgaWYgKGVycm9yX3N0YXR1cykgewogCQlORF9QUklOVCgobmRvLCAiW2Vycm9ySW5kZXg9PTBdIikpOwotCQllcnJvciA9IDA7CiAJfQogCWxlbmd0aCAtPSBjb3VudDsKIAlucCArPSBjb3VudDsKQEAgLTE0ODYsNyArMTUwNyw3IEBACiAJTkRfUFJJTlQoKG5kbywgIiAiKSk7CiAJLyogZGVzY2VuZCBpbnRvIFBEVSAqLwogCWxlbmd0aCA9IHBkdS5hc25sZW47Ci0JbnAgPSAodV9jaGFyICopcGR1LmRhdGEucmF3OworCW5wID0gKGNvbnN0IHVfY2hhciAqKXBkdS5kYXRhLnJhdzsKIAogCWlmICh2ZXJzaW9uID09IFNOTVBfVkVSU0lPTl8xICYmCiAJICAgIChwZHUuaWQgPT0gR0VUQlVMS1JFUSB8fCBwZHUuaWQgPT0gSU5GT1JNUkVRIHx8CkBAIC0xNTI5LDcgKzE1NTAsNyBAQAogICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqbnAsIHVfaW50IGxlbmd0aCwgaW50IHZlcnNpb24pCiB7CiAJc3RydWN0IGJlIGVsZW07Ci0JaW50IGksIGNvdW50ID0gMDsKKwlpbnQgY291bnQgPSAwOwogCiAJLyogU2VxdWVuY2UgKi8KIAlpZiAoKGNvdW50ID0gYXNuMV9wYXJzZShuZG8sIG5wLCBsZW5ndGgsICZlbGVtKSkgPCAwKQpAQCAtMTU0MCw3ICsxNTYxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAlsZW5ndGggPSBlbGVtLmFzbmxlbjsKLQlucCA9ICh1X2NoYXIgKillbGVtLmRhdGEucmF3OworCW5wID0gKGNvbnN0IHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CiAKIAkvKiBjb250ZXh0RW5naW5lSUQgKE9DVEVUIFNUUklORykgKi8KIAlpZiAoKGNvdW50ID0gYXNuMV9wYXJzZShuZG8sIG5wLCBsZW5ndGgsICZlbGVtKSkgPCAwKQpAQCAtMTU1MywxMCArMTU3NCw5IEBACiAJbGVuZ3RoIC09IGNvdW50OwogCW5wICs9IGNvdW50OwogCi0JTkRfUFJJTlQoKG5kbywgIkU9ICIpKTsKLQlmb3IgKGkgPSAwOyBpIDwgKGludCllbGVtLmFzbmxlbjsgaSsrKSB7Ci0JCU5EX1BSSU5UKChuZG8sICIweCUwMlgiLCBlbGVtLmRhdGEuc3RyW2ldKSk7Ci0JfQorCU5EX1BSSU5UKChuZG8sICJFPSIpKTsKKwlpZiAoYXNuMV9wcmludF9vY3RldHMobmRvLCAmZWxlbSkgPT0gLTEpCisJCXJldHVybjsKIAlORF9QUklOVCgobmRvLCAiICIpKTsKIAogCS8qIGNvbnRleHROYW1lIChPQ1RFVCBTVFJJTkcpICovCkBAIC0xNTcwLDcgKzE1OTAsMTAgQEAKIAlsZW5ndGggLT0gY291bnQ7CiAJbnAgKz0gY291bnQ7CiAKLQlORF9QUklOVCgobmRvLCAiQz0lLipzICIsIChpbnQpZWxlbS5hc25sZW4sIGVsZW0uZGF0YS5zdHIpKTsKKwlORF9QUklOVCgobmRvLCAiQz0iKSk7CisJaWYgKGFzbjFfcHJpbnRfc3RyaW5nKG5kbywgJmVsZW0pID09IC0xKQorCQlyZXR1cm47CisJTkRfUFJJTlQoKG5kbywgIiAiKSk7CiAKIAlwZHVfcHJpbnQobmRvLCBucCwgbGVuZ3RoLCB2ZXJzaW9uKTsKIH0KQEAgLTE1OTUsMTAgKzE2MTgsMTQgQEAKIAl9CiAJLyogZGVmYXVsdCBjb21tdW5pdHkgKi8KIAlpZiAoIShlbGVtLmFzbmxlbiA9PSBzaXplb2YoREVGX0NPTU1VTklUWSkgLSAxICYmCi0JICAgIHN0cm5jbXAoKGNoYXIgKillbGVtLmRhdGEuc3RyLCBERUZfQ09NTVVOSVRZLAotCSAgICAgICAgICAgIHNpemVvZihERUZfQ09NTVVOSVRZKSAtIDEpID09IDApKQorCSAgICBzdHJuY21wKChjb25zdCBjaGFyICopZWxlbS5kYXRhLnN0ciwgREVGX0NPTU1VTklUWSwKKwkgICAgICAgICAgICBzaXplb2YoREVGX0NPTU1VTklUWSkgLSAxKSA9PSAwKSkgewogCQkvKiAhICJwdWJsaWMiICovCi0JCU5EX1BSSU5UKChuZG8sICJDPSUuKnMgIiwgKGludCllbGVtLmFzbmxlbiwgZWxlbS5kYXRhLnN0cikpOworCQlORF9QUklOVCgobmRvLCAiQz0iKSk7CisJCWlmIChhc24xX3ByaW50X3N0cmluZyhuZG8sICZlbGVtKSA9PSAtMSkKKwkJCXJldHVybjsKKwkJTkRfUFJJTlQoKG5kbywgIiAiKSk7CisJfQogCWxlbmd0aCAtPSBjb3VudDsKIAlucCArPSBjb3VudDsKIApAQCAtMTYyNCw3ICsxNjUxLDcgQEAKIAkJcmV0dXJuOwogCX0KIAlsZW5ndGggPSBlbGVtLmFzbmxlbjsKLQlucCA9ICh1X2NoYXIgKillbGVtLmRhdGEucmF3OworCW5wID0gKGNvbnN0IHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CiAKIAkvKiBtc2dBdXRob3JpdGF0aXZlRW5naW5lSUQgKE9DVEVUIFNUUklORykgKi8KIAlpZiAoKGNvdW50ID0gYXNuMV9wYXJzZShuZG8sIG5wLCBsZW5ndGgsICZlbGVtKSkgPCAwKQpAQCAtMTY3NCw3ICsxNzAxLDEwIEBACiAJbGVuZ3RoIC09IGNvdW50OwogICAgICAgICBucCArPSBjb3VudDsKIAotCU5EX1BSSU5UKChuZG8sICJVPSUuKnMgIiwgKGludCllbGVtLmFzbmxlbiwgZWxlbS5kYXRhLnN0cikpOworCU5EX1BSSU5UKChuZG8sICJVPSIpKTsKKwlpZiAoYXNuMV9wcmludF9zdHJpbmcobmRvLCAmZWxlbSkgPT0gLTEpCisJCXJldHVybjsKKwlORF9QUklOVCgobmRvLCAiICIpKTsKIAogCS8qIG1zZ0F1dGhlbnRpY2F0aW9uUGFyYW1ldGVycyAoT0NURVQgU1RSSU5HKSAqLwogCWlmICgoY291bnQgPSBhc24xX3BhcnNlKG5kbywgbnAsIGxlbmd0aCwgJmVsZW0pKSA8IDApCkBAIC0xNzI1LDcgKzE3NTUsNyBAQAogCQlyZXR1cm47CiAJfQogCWxlbmd0aCA9IGVsZW0uYXNubGVuOwotCW5wID0gKHVfY2hhciAqKWVsZW0uZGF0YS5yYXc7CisJbnAgPSAoY29uc3QgdV9jaGFyICopZWxlbS5kYXRhLnJhdzsKIAogCWlmIChuZG8tPm5kb192ZmxhZykgewogCQlORF9QUklOVCgobmRvLCAieyAiKSk7CkBAIC0xODY0LDcgKzE4OTQsNyBAQAogCQlORF9QUklOVCgobmRvLCAiWyVkIGV4dHJhIGFmdGVyIGlTRVFdIiwgbGVuZ3RoIC0gY291bnQpKTsKIAkvKiBkZXNjZW5kICovCiAJbGVuZ3RoID0gZWxlbS5hc25sZW47Ci0JbnAgPSAodV9jaGFyICopZWxlbS5kYXRhLnJhdzsKKwlucCA9IChjb25zdCB1X2NoYXIgKillbGVtLmRhdGEucmF3OwogCiAJLyogVmVyc2lvbiAoSU5URUdFUikgKi8KIAlpZiAoKGNvdW50ID0gYXNuMV9wYXJzZShuZG8sIG5wLCBsZW5ndGgsICZlbGVtKSkgPCAwKQpAQCAtMTg4Myw3ICsxOTEzLDcgQEAKIAkJCU5EX1BSSU5UKChuZG8sICJ7ICVzICIsIFNubXBWZXJzaW9uW2VsZW0uZGF0YS5pbnRlZ2VyXSkpOwogCQlicmVhazsKIAlkZWZhdWx0OgotCSAgICAgICAgTkRfUFJJTlQoKG5kbywgIlt2ZXJzaW9uID0gJWRdIiwgZWxlbS5kYXRhLmludGVnZXIpKTsKKwkgICAgICAgIE5EX1BSSU5UKChuZG8sICJTTk1QIFt2ZXJzaW9uID0gJWRdIiwgZWxlbS5kYXRhLmludGVnZXIpKTsKIAkJcmV0dXJuOwogCX0KIAl2ZXJzaW9uID0gZWxlbS5kYXRhLmludGVnZXI7CmRpZmYgLS1naXQgYS9wcmludC1zdHAuYyBiL3ByaW50LXN0cC5jCmluZGV4IDkzYmI2MDAuLjJmNWM5MTcgMTAwNjQ0Ci0tLSBhL3ByaW50LXN0cC5jCisrKyBiL3ByaW50LXN0cC5jCkBAIC01LDIwICs1LDIwIEBACiAgKiBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGFjY29tcGFuaWVzIHRjcGR1bXAgb3IgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZQogICoKLSAqIEZvcm1hdCBhbmQgcHJpbnQgSUVFRSA4MDIuMWQgc3Bhbm5pbmcgdHJlZSBwcm90b2NvbCBwYWNrZXRzLgogICogQ29udHJpYnV0ZWQgYnkgTGVubmVydCBCdXl0ZW5oZWsgPGJ1eXRlbmhAZ251Lm9yZz4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBJRUVFIDgwMi4xZCBTcGFubmluZyBUcmVlIFByb3RvY29sIChTVFApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNkZWZpbmUJUlNUUF9FWFRSQUNUX1BPUlRfUk9MRSh4KSAoKCh4KSYweDBDKT4+MikKQEAgLTg0LDYgKzg0LDggQEAKICAgICB7IDAsIE5VTEx9CiB9OwogCisjZGVmaW5lIE5EX1RDSEVDS19CUklER0VfSUQocCkgTkRfVENIRUNLMigqKHApLCA4KQorCiBzdGF0aWMgY2hhciAqCiBzdHBfcHJpbnRfYnJpZGdlX2lkKGNvbnN0IHVfY2hhciAqcCkKIHsKQEAgLTk2LDIyICs5OCwyNSBAQAogICAgIHJldHVybiBicmlkZ2VfaWRfc3RyOwogfQogCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogc3RwX3ByaW50X2NvbmZpZ19icGR1KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCBzdHJ1Y3Qgc3RwX2JwZHVfICpzdHBfYnBkdSwKICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBsZW5ndGgpCiB7CisgICAgTkRfVENIRUNLKHN0cF9icGR1LT5mbGFncyk7CiAgICAgTkRfUFJJTlQoKG5kbywgIiwgRmxhZ3MgWyVzXSIsCiAgICAgICAgICAgIGJpdHRvazJzdHIoc3RwX2JwZHVfZmxhZ192YWx1ZXMsICJub25lIiwgc3RwX2JwZHUtPmZsYWdzKSkpOwogCisgICAgTkRfVENIRUNLKHN0cF9icGR1LT5wb3J0X2lkKTsKICAgICBORF9QUklOVCgobmRvLCAiLCBicmlkZ2UtaWQgJXMuJTA0eCwgbGVuZ3RoICV1IiwKICAgICAgICAgICAgc3RwX3ByaW50X2JyaWRnZV9pZCgoY29uc3QgdV9jaGFyICopJnN0cF9icGR1LT5icmlkZ2VfaWQpLAogICAgICAgICAgICBFWFRSQUNUXzE2QklUUygmc3RwX2JwZHUtPnBvcnRfaWQpLCBsZW5ndGgpKTsKIAogICAgIC8qIGluIG5vbi12ZXJib3NlIG1vZGUganVzdCBwcmludCB0aGUgYnJpZGdlLWlkICovCiAgICAgaWYgKCFuZG8tPm5kb192ZmxhZykgewotICAgICAgICByZXR1cm47CisgICAgICAgIHJldHVybiAxOwogICAgIH0KIAorICAgIE5EX1RDSEVDSyhzdHBfYnBkdS0+Zm9yd2FyZF9kZWxheSk7CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRtZXNzYWdlLWFnZSAlLjJmcywgbWF4LWFnZSAlLjJmcyIKICAgICAgICAgICAgIiwgaGVsbG8tdGltZSAlLjJmcywgZm9yd2FyZGluZy1kZWxheSAlLjJmcyIsCiAgICAgICAgICAgIChmbG9hdClFWFRSQUNUXzE2QklUUygmc3RwX2JwZHUtPm1lc3NhZ2VfYWdlKSAvIFNUUF9USU1FX0JBU0UsCkBAIC0xMjksNiArMTM0LDEwIEBACiAgICAgICAgICAgICAgICB0b2syc3RyKHJzdHBfb2JqX3BvcnRfcm9sZV92YWx1ZXMsICJVbmtub3duIiwKICAgICAgICAgICAgICAgICAgICAgICAgUlNUUF9FWFRSQUNUX1BPUlRfUk9MRShzdHBfYnBkdS0+ZmxhZ3MpKSkpOwogICAgIH0KKyAgICByZXR1cm4gMTsKKwordHJ1bmM6CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0yMjYsOCArMjM1LDcgQEAKICNkZWZpbmUgU1BCX0JQRFVfQUdSRUVNRU5UX1JFUzJfT0ZGU0VUICAgIFNQQl9CUERVX0FHUkVFTUVOVF9SRVMxX09GRlNFVCArIDQKICNkZWZpbmUgU1BCX0JQRFVfQUdSRUVNRU5UX0RJR0VTVF9PRkZTRVQgIFNQQl9CUERVX0FHUkVFTUVOVF9SRVMyX09GRlNFVCArIDQKIAotCi1zdGF0aWMgdm9pZAorc3RhdGljIGludAogc3RwX3ByaW50X21zdHBfYnBkdShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3Qgc3RydWN0IHN0cF9icGR1XyAqc3RwX2JwZHUsCiAgICAgICAgICAgICAgICAgICAgIHVfaW50IGxlbmd0aCkKIHsKQEAgLTI0NSwyMiArMjUzLDI2IEBACiAgICAgICogaW4gbm9uLXZlcmJvc2UgbW9kZSBqdXN0IHByaW50IHRoZSBmbGFncy4KICAgICAgKi8KICAgICBpZiAoIW5kby0+bmRvX3ZmbGFnKSB7Ci0gICAgICAgIHJldHVybjsKKyAgICAgICAgcmV0dXJuIDE7CiAgICAgfQogCiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRwb3J0LXJvbGUgJXMsICIsCiAgICAgICAgICAgIHRvazJzdHIocnN0cF9vYmpfcG9ydF9yb2xlX3ZhbHVlcywgIlVua25vd24iLAogICAgICAgICAgICAgICAgICAgIFJTVFBfRVhUUkFDVF9QT1JUX1JPTEUoc3RwX2JwZHUtPmZsYWdzKSkpKTsKIAotICAgIE5EX1BSSU5UKChuZG8sICJDSVNUIHJvb3QtaWQgJXMsIENJU1QgZXh0LXBhdGhjb3N0ICV1ICIsCisgICAgTkRfVENIRUNLKHN0cF9icGR1LT5yb290X3BhdGhfY29zdCk7CisgICAgTkRfUFJJTlQoKG5kbywgIkNJU1Qgcm9vdC1pZCAlcywgQ0lTVCBleHQtcGF0aGNvc3QgJXUiLAogICAgICAgICAgICBzdHBfcHJpbnRfYnJpZGdlX2lkKChjb25zdCB1X2NoYXIgKikmc3RwX2JwZHUtPnJvb3RfaWQpLAogICAgICAgICAgICBFWFRSQUNUXzMyQklUUygmc3RwX2JwZHUtPnJvb3RfcGF0aF9jb3N0KSkpOwogCisgICAgTkRfVENIRUNLKHN0cF9icGR1LT5icmlkZ2VfaWQpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0Q0lTVCByZWdpb25hbC1yb290LWlkICVzLCAiLAogICAgICAgICAgICBzdHBfcHJpbnRfYnJpZGdlX2lkKChjb25zdCB1X2NoYXIgKikmc3RwX2JwZHUtPmJyaWRnZV9pZCkpKTsKIAotICAgIE5EX1BSSU5UKChuZG8sICJDSVNUIHBvcnQtaWQgJTA0eCwgIiwgRVhUUkFDVF8xNkJJVFMoJnN0cF9icGR1LT5wb3J0X2lkKSkpOworICAgIE5EX1RDSEVDSyhzdHBfYnBkdS0+cG9ydF9pZCk7CisgICAgTkRfUFJJTlQoKG5kbywgIkNJU1QgcG9ydC1pZCAlMDR4LCIsIEVYVFJBQ1RfMTZCSVRTKCZzdHBfYnBkdS0+cG9ydF9pZCkpKTsKIAorICAgIE5EX1RDSEVDSyhzdHBfYnBkdS0+Zm9yd2FyZF9kZWxheSk7CiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRtZXNzYWdlLWFnZSAlLjJmcywgbWF4LWFnZSAlLjJmcyIKICAgICAgICAgICAgIiwgaGVsbG8tdGltZSAlLjJmcywgZm9yd2FyZGluZy1kZWxheSAlLjJmcyIsCiAgICAgICAgICAgIChmbG9hdClFWFRSQUNUXzE2QklUUygmc3RwX2JwZHUtPm1lc3NhZ2VfYWdlKSAvIFNUUF9USU1FX0JBU0UsCkBAIC0yNjgsMzAgKzI4MCw0MCBAQAogICAgICAgICAgICAoZmxvYXQpRVhUUkFDVF8xNkJJVFMoJnN0cF9icGR1LT5oZWxsb190aW1lKSAvIFNUUF9USU1FX0JBU0UsCiAgICAgICAgICAgIChmbG9hdClFWFRSQUNUXzE2QklUUygmc3RwX2JwZHUtPmZvcndhcmRfZGVsYXkpIC8gU1RQX1RJTUVfQkFTRSkpOwogCisgICAgTkRfVENIRUNLXzE2QklUUyhwdHIgKyBNU1RfQlBEVV9WRVIzX0xFTl9PRkZTRVQpOwogICAgIE5EX1BSSU5UKChuZG8sICJcblx0djNsZW4gJWQsICIsIEVYVFJBQ1RfMTZCSVRTKHB0ciArIE1TVF9CUERVX1ZFUjNfTEVOX09GRlNFVCkpKTsKLSAgICBORF9QUklOVCgobmRvLCAiTUNJRCBOYW1lICVzLCByZXYgJXUsICIKKyAgICBORF9UQ0hFQ0tfMzJCSVRTKHB0ciArIE1TVF9CUERVX0NPTkZJR19ESUdFU1RfT0ZGU0VUICsgMTIpOworICAgIE5EX1BSSU5UKChuZG8sICJNQ0lEIE5hbWUgIikpOworICAgIGlmIChmbl9wcmludHpwKG5kbywgcHRyICsgTVNUX0JQRFVfQ09ORklHX05BTUVfT0ZGU0VULCAzMiwgbmRvLT5uZG9fc25hcGVuZCkpCisJZ290byB0cnVuYzsKKyAgICBORF9QUklOVCgobmRvLCAiLCByZXYgJXUsIgogICAgICAgICAgICAgIlxuXHRcdGRpZ2VzdCAlMDh4JTA4eCUwOHglMDh4LCAiLAotICAgICAgICAgICAgcHRyICsgTVNUX0JQRFVfQ09ORklHX05BTUVfT0ZGU0VULAogCSAgICAgICAgICBFWFRSQUNUXzE2QklUUyhwdHIgKyBNU1RfQlBEVV9DT05GSUdfTkFNRV9PRkZTRVQgKyAzMiksCi0gICAgICAJICAgIEVYVFJBQ1RfMzJCSVRTKHB0ciArIE1TVF9CUERVX0NPTkZJR19ESUdFU1RfT0ZGU0VUKSwKLSAgICAgICAgCSAgRVhUUkFDVF8zMkJJVFMocHRyICsgTVNUX0JQRFVfQ09ORklHX0RJR0VTVF9PRkZTRVQgKyA0KSwKKwkgICAgICAgICAgRVhUUkFDVF8zMkJJVFMocHRyICsgTVNUX0JQRFVfQ09ORklHX0RJR0VTVF9PRkZTRVQpLAorCSAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBNU1RfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCArIDQpLAogCSAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBNU1RfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCArIDgpLAogCSAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBNU1RfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCArIDEyKSkpOwogCi0gICAgTkRfUFJJTlQoKG5kbywgIkNJU1QgaW50LXJvb3QtcGF0aGNvc3QgJXUsICIsCisgICAgTkRfVENIRUNLXzMyQklUUyhwdHIgKyBNU1RfQlBEVV9DSVNUX0lOVF9QQVRIX0NPU1RfT0ZGU0VUKTsKKyAgICBORF9QUklOVCgobmRvLCAiQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAldSwiLAogICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMocHRyICsgTVNUX0JQRFVfQ0lTVF9JTlRfUEFUSF9DT1NUX09GRlNFVCkpKTsKIAorICAgIE5EX1RDSEVDS19CUklER0VfSUQocHRyICsgTVNUX0JQRFVfQ0lTVF9CUklER0VfSURfT0ZGU0VUKTsKICAgICBORF9QUklOVCgobmRvLCAiXG5cdENJU1QgYnJpZGdlLWlkICVzLCAiLAogICAgICAgICAgICBzdHBfcHJpbnRfYnJpZGdlX2lkKHB0ciArIE1TVF9CUERVX0NJU1RfQlJJREdFX0lEX09GRlNFVCkpKTsKIAorICAgIE5EX1RDSEVDSyhwdHJbTVNUX0JQRFVfQ0lTVF9SRU1BSU5fSE9QU19PRkZTRVRdKTsKICAgICBORF9QUklOVCgobmRvLCAiQ0lTVCByZW1haW5pbmctaG9wcyAlZCIsIHB0cltNU1RfQlBEVV9DSVNUX1JFTUFJTl9IT1BTX09GRlNFVF0pKTsKIAogICAgIC8qIER1bXAgYWxsIE1TVEkncyAqLworICAgIE5EX1RDSEVDS18xNkJJVFMocHRyICsgTVNUX0JQRFVfVkVSM19MRU5fT0ZGU0VUKTsKICAgICB2M2xlbiA9IEVYVFJBQ1RfMTZCSVRTKHB0ciArIE1TVF9CUERVX1ZFUjNfTEVOX09GRlNFVCk7CiAgICAgaWYgKHYzbGVuID4gTVNUX0JQRFVfQ09ORklHX0lORk9fTEVOR1RIKSB7CiAgICAgICAgIGxlbiA9IHYzbGVuIC0gTVNUX0JQRFVfQ09ORklHX0lORk9fTEVOR1RIOwogICAgICAgICBvZmZzZXQgPSBNU1RfQlBEVV9NU1RJX09GRlNFVDsKICAgICAgICAgd2hpbGUgKGxlbiA+PSBNU1RfQlBEVV9NU1RJX0xFTkdUSCkgeworICAgICAgICAgICAgTkRfVENIRUNLMigqKHB0ciArIG9mZnNldCksIE1TVF9CUERVX01TVElfTEVOR1RIKTsKKwogICAgICAgICAgICAgbXN0aSA9IEVYVFJBQ1RfMTZCSVRTKHB0ciArIG9mZnNldCArCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVNUX0JQRFVfTVNUSV9ST09UX1BSSU9fT0ZGU0VUKTsKICAgICAgICAgICAgIG1zdGkgPSBtc3RpICYgMHgwRkZGOwpAQCAtMzE0LDkgKzMzNiwxMyBAQAogICAgICAgICAgICAgb2Zmc2V0ICs9IE1TVF9CUERVX01TVElfTEVOR1RIOwogICAgICAgICB9CiAgICAgfQorICAgIHJldHVybiAxOworCit0cnVuYzoKKyAgICByZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKK3N0YXRpYyBpbnQKIHN0cF9wcmludF9zcGJfYnBkdShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3Qgc3RydWN0IHN0cF9icGR1XyAqc3RwX2JwZHUsCiAgICAgICAgICAgICAgICAgICAgdV9pbnQgb2Zmc2V0KQogewpAQCAtMzI2LDEzICszNTIsMTggQEAKICAgICAgKiBpbiBub24tdmVyYm9zZSBtb2RlIGRvbid0IHByaW50IGFueXRoaW5nLgogICAgICAqLwogICAgIGlmICghbmRvLT5uZG9fdmZsYWcpIHsKLSAgICAgICAgcmV0dXJuOworICAgICAgICByZXR1cm4gMTsKICAgICB9CiAKICAgICBwdHIgPSAoY29uc3QgdV9jaGFyICopc3RwX2JwZHU7Ci0gICAgTkRfUFJJTlQoKG5kbywgIlxuXHR2NGxlbiAlZCBBVVhNQ0lEIE5hbWUgJXMsIFJldiAldSwgXG5cdFx0ZGlnZXN0ICUwOHglMDh4JTA4eCUwOHgiLAotICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMgKHB0ciArIG9mZnNldCksCi0gICAgICAgICAgICBwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfTkFNRV9PRkZTRVQsCisgICAgTkRfVENIRUNLXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfRElHRVNUX09GRlNFVCArIDE2KTsKKworICAgIE5EX1BSSU5UKChuZG8sICJcblx0djRsZW4gJWQsICIsIEVYVFJBQ1RfMTZCSVRTIChwdHIgKyBvZmZzZXQpKSk7CisgICAgTkRfUFJJTlQoKG5kbywgIkFVWE1DSUQgTmFtZSAiKSk7CisgICAgaWYgKGZuX3ByaW50enAobmRvLCBwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfTkFNRV9PRkZTRVQsIDMyLAorCQkgICBuZG8tPm5kb19zbmFwZW5kKSkKKwlnb3RvIHRydW5jOworICAgIE5EX1BSSU5UKChuZG8sICIsIFJldiAldSxcblx0XHRkaWdlc3QgJTA4eCUwOHglMDh4JTA4eCIsCiAgICAgICAgICAgICBFWFRSQUNUXzE2QklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfUkVWX09GRlNFVCksCiAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCksCiAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCArIDQpLApAQCAtMzQwLDggKzM3MSw4IEBACiAgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9DT05GSUdfRElHRVNUX09GRlNFVCArIDEyKSkpOwogCiAgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRBZ3JlZW1lbnQgbnVtICVkLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAlZCwgQWdyZWVtZW50IHZhbGlkLSIKLSAgICAgICAgICAgICJmbGFnICVkLCBcblx0UmVzdHJpY3RlZCByb2xlLWZsYWc6ICVkLCBGb3JtYXQgaWQgJWQgY2FwICVkLCAiCi0gICAgICAgICAgICAiQ29udmVudGlvbiBpZCAlZCBjYXAgJWQsIFxuXHRFZGdlIGNvdW50ICVkLCAiCisgICAgICAgICAgICAiZmxhZyAlZCxcblx0UmVzdHJpY3RlZCByb2xlLWZsYWc6ICVkLCBGb3JtYXQgaWQgJWQgY2FwICVkLCAiCisgICAgICAgICAgICAiQ29udmVudGlvbiBpZCAlZCBjYXAgJWQsXG5cdEVkZ2UgY291bnQgJWQsICIKICAgICAgICAgICAgICJBZ3JlZW1lbnQgZGlnZXN0ICUwOHglMDh4JTA4eCUwOHglMDh4XG4iLAogICAgICAgICAgICAgcHRyW29mZnNldCArIFNQQl9CUERVX0FHUkVFTUVOVF9PRkZTRVRdPj42LAogICAgICAgICAgICAgcHRyW29mZnNldCArIFNQQl9CUERVX0FHUkVFTUVOVF9PRkZTRVRdPj40ICYgMHgzLApAQCAtMzUzLDEwICszODQsMTQgQEAKICAgICAgICAgICAgIHB0cltvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfQ09OX09GRlNFVF0mMHgwMGZmLAogICAgICAgICAgICAgRVhUUkFDVF8xNkJJVFMocHRyICsgb2Zmc2V0ICsgU1BCX0JQRFVfQUdSRUVNRU5UX0VER0VfT0ZGU0VUKSwKICAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHB0ciArIG9mZnNldCArIFNQQl9CUERVX0FHUkVFTUVOVF9ESUdFU1RfT0ZGU0VUKSwKLSAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHB0ciArIG9mZnNldCArIFNQQl9CUERVX0FHUkVFTUVOVF9ESUdFU1RfT0ZGU0VUKSs0LAotICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMocHRyICsgb2Zmc2V0ICsgU1BCX0JQRFVfQUdSRUVNRU5UX0RJR0VTVF9PRkZTRVQpKzgsCi0gICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfRElHRVNUX09GRlNFVCkrMTIsCi0gICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfRElHRVNUX09GRlNFVCkrMTYpKTsKKyAgICAgICAgICAgIEVYVFJBQ1RfMzJCSVRTKHB0ciArIG9mZnNldCArIFNQQl9CUERVX0FHUkVFTUVOVF9ESUdFU1RfT0ZGU0VUKzQpLAorICAgICAgICAgICAgRVhUUkFDVF8zMkJJVFMocHRyICsgb2Zmc2V0ICsgU1BCX0JQRFVfQUdSRUVNRU5UX0RJR0VTVF9PRkZTRVQrOCksCisgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfRElHRVNUX09GRlNFVCsxMiksCisgICAgICAgICAgICBFWFRSQUNUXzMyQklUUyhwdHIgKyBvZmZzZXQgKyBTUEJfQlBEVV9BR1JFRU1FTlRfRElHRVNUX09GRlNFVCsxNikpKTsKKyAgICByZXR1cm4gMTsKKwordHJ1bmM6CisgICAgcmV0dXJuIDA7CiB9CiAKIC8qCkBAIC0zNjksMTcgKzQwNCwxOSBAQAogICAgIHVfaW50ICAgICAgICAgICAgICAgICAgbXN0cF9sZW47CiAgICAgdV9pbnQgICAgICAgICAgICAgICAgICBzcGJfbGVuOwogCi0gICAgc3RwX2JwZHUgPSAoc3RydWN0IHN0cF9icGR1XyopcDsKKyAgICBzdHBfYnBkdSA9IChjb25zdCBzdHJ1Y3Qgc3RwX2JwZHVfKilwOwogCiAgICAgLyogTWluaW11bSBTVFAgRnJhbWUgc2l6ZS4gKi8KICAgICBpZiAobGVuZ3RoIDwgNCkKICAgICAgICAgZ290byB0cnVuYzsKIAorICAgIE5EX1RDSEVDSyhzdHBfYnBkdS0+cHJvdG9jb2xfaWQpOwogICAgIGlmIChFWFRSQUNUXzE2QklUUygmc3RwX2JwZHUtPnByb3RvY29sX2lkKSkgewogICAgICAgICBORF9QUklOVCgobmRvLCAidW5rbm93biBTVFAgdmVyc2lvbiwgbGVuZ3RoICV1IiwgbGVuZ3RoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKKyAgICBORF9UQ0hFQ0soc3RwX2JwZHUtPnByb3RvY29sX3ZlcnNpb24pOwogICAgIE5EX1BSSU5UKChuZG8sICJTVFAgJXMiLCB0b2syc3RyKHN0cF9wcm90b192YWx1ZXMsICJVbmtub3duIFNUUCBwcm90b2NvbCAoMHglMDJ4KSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgc3RwX2JwZHUtPnByb3RvY29sX3ZlcnNpb24pKSk7CiAKQEAgLTM5Myw2ICs0MzAsNyBAQAogICAgICAgICByZXR1cm47CiAgICAgfQogCisgICAgTkRfVENIRUNLKHN0cF9icGR1LT5icGR1X3R5cGUpOwogICAgIE5EX1BSSU5UKChuZG8sICIsICVzIiwgdG9rMnN0cihzdHBfYnBkdV90eXBlX3ZhbHVlcywgIlVua25vd24gQlBEVSBUeXBlICgweCUwMngpIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cF9icGR1LT5icGR1X3R5cGUpKSk7CiAKQEAgLTQwMSw3ICs0MzksOCBAQAogICAgICAgICBpZiAobGVuZ3RoIDwgc2l6ZW9mKHN0cnVjdCBzdHBfYnBkdV8pIC0gMSkgewogICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgfQotICAgICAgICBzdHBfcHJpbnRfY29uZmlnX2JwZHUobmRvLCBzdHBfYnBkdSwgbGVuZ3RoKTsKKyAgICAgICAgaWYgKCFzdHBfcHJpbnRfY29uZmlnX2JwZHUobmRvLCBzdHBfYnBkdSwgbGVuZ3RoKSkKKyAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBTVFBfQlBEVV9UWVBFX1JTVFA6CkBAIC00MDksMjUgKzQ0OCwyOSBAQAogICAgICAgICAgICAgaWYgKGxlbmd0aCA8IHNpemVvZihzdHJ1Y3Qgc3RwX2JwZHVfKSkgewogICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICBzdHBfcHJpbnRfY29uZmlnX2JwZHUobmRvLCBzdHBfYnBkdSwgbGVuZ3RoKTsKKyAgICAgICAgICAgIGlmICghc3RwX3ByaW50X2NvbmZpZ19icGR1KG5kbywgc3RwX2JwZHUsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgfSBlbHNlIGlmIChzdHBfYnBkdS0+cHJvdG9jb2xfdmVyc2lvbiA9PSBTVFBfUFJPVE9fTVNUUCB8fAogICAgICAgICAgICAgICAgICAgIHN0cF9icGR1LT5wcm90b2NvbF92ZXJzaW9uID09IFNUUF9QUk9UT19TUEIpIHsKICAgICAgICAgICAgIGlmIChsZW5ndGggPCBTVFBfQlBEVV9NU1RQX01JTl9MRU4pIHsKICAgICAgICAgICAgICAgICBnb3RvIHRydW5jOwogICAgICAgICAgICAgfQogCisgICAgICAgICAgICBORF9UQ0hFQ0soc3RwX2JwZHUtPnYxX2xlbmd0aCk7CiAgICAgICAgICAgICBpZiAoc3RwX2JwZHUtPnYxX2xlbmd0aCAhPSAwKSB7CiAgICAgICAgICAgICAgICAgLyogRklYIE1FOiBFbWl0IGEgbWVzc2FnZSBoZXJlID8gKi8KICAgICAgICAgICAgICAgICBnb3RvIHRydW5jOwogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAvKiBWYWxpZGF0ZSB2MyBsZW5ndGggKi8KKyAgICAgICAgICAgIE5EX1RDSEVDS18xNkJJVFMocCArIE1TVF9CUERVX1ZFUjNfTEVOX09GRlNFVCk7CiAgICAgICAgICAgICBtc3RwX2xlbiA9IEVYVFJBQ1RfMTZCSVRTKHAgKyBNU1RfQlBEVV9WRVIzX0xFTl9PRkZTRVQpOwogICAgICAgICAgICAgbXN0cF9sZW4gKz0gMjsgIC8qIGxlbmd0aCBlbmNvZGluZyBpdHNlbGYgaXMgMiBieXRlcyAqLwogICAgICAgICAgICAgaWYgKGxlbmd0aCA8IChzaXplb2Yoc3RydWN0IHN0cF9icGR1XykgKyBtc3RwX2xlbikpIHsKICAgICAgICAgICAgICAgICBnb3RvIHRydW5jOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgc3RwX3ByaW50X21zdHBfYnBkdShuZG8sIHN0cF9icGR1LCBsZW5ndGgpOworICAgICAgICAgICAgaWYgKCFzdHBfcHJpbnRfbXN0cF9icGR1KG5kbywgc3RwX2JwZHUsIGxlbmd0aCkpCisgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKIAogICAgICAgICAgICAgaWYgKHN0cF9icGR1LT5wcm90b2NvbF92ZXJzaW9uID09IFNUUF9QUk9UT19TUEIpCiAgICAgICAgICAgICB7CkBAIC00MzgsNyArNDgxLDggQEAKICAgICAgICAgICAgICAgICAgIHNwYl9sZW4gPCBTUEJfQlBEVV9NSU5fTEVOKSB7CiAgICAgICAgICAgICAgICAgZ290byB0cnVuYzsKICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICBzdHBfcHJpbnRfc3BiX2JwZHUobmRvLCBzdHBfYnBkdSwgKHNpemVvZihzdHJ1Y3Qgc3RwX2JwZHVfKSArIG1zdHBfbGVuKSk7CisgICAgICAgICAgICAgIGlmICghc3RwX3ByaW50X3NwYl9icGR1KG5kbywgc3RwX2JwZHUsIChzaXplb2Yoc3RydWN0IHN0cF9icGR1XykgKyBtc3RwX2xlbikpKQorICAgICAgICAgICAgICAgIGdvdG8gdHJ1bmM7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CkBAIC00NTIsNyArNDk2LDcgQEAKICAgICB9CiAKICAgICByZXR1cm47Ci0gdHJ1bmM6Cit0cnVuYzoKICAgICBORF9QUklOVCgobmRvLCAiW3xzdHAgJWRdIiwgbGVuZ3RoKSk7CiB9CiAKZGlmZiAtLWdpdCBhL3ByaW50LXN1bmF0bS5jIGIvcHJpbnQtc3VuYXRtLmMKaW5kZXggZmMwM2Q0Mi4uYTU4N2U1MCAxMDA2NDQKLS0tIGEvcHJpbnQtc3VuYXRtLmMKKysrIGIvcHJpbnQtc3VuYXRtLmMKQEAgLTMwLDE3ICszMCwxOCBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogU3VuQVRNIERMUEkgY2FwdHVyZSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogc3RydWN0IG1idWY7CiBzdHJ1Y3QgcnRlbnRyeTsKIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpbmNsdWRlICJhdG0uaCIKZGlmZiAtLWdpdCBhL3ByaW50LXN1bnJwYy5jIGIvcHJpbnQtc3VucnBjLmMKaW5kZXggYmM3MTM4ZC4uZDIzNjZjNyAxMDA2NDQKLS0tIGEvcHJpbnQtc3VucnBjLmMKKysrIGIvcHJpbnQtc3VucnBjLmMKQEAgLTE5LDcgKzE5LDggQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogU3VuIFJlbW90ZSBQcm9jZWR1cmUgQ2FsbCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKQEAgLTM5LDcgKzQwLDcgQEAKICAqLwogI3VuZGVmIF9YT1BFTl9TT1VSQ0VfRVhURU5ERUQKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2lmIGRlZmluZWQoSEFWRV9HRVRSUENCWU5VTUJFUikgJiYgZGVmaW5lZChIQVZFX1JQQ19SUENfSCkKICNpbmNsdWRlIDxycGMvcnBjLmg+CkBAIC01MSwxNCArNTIsMTIgQEAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKICNpbmNsdWRlICJpcC5oIgotI2lmZGVmIElORVQ2CiAjaW5jbHVkZSAiaXA2LmgiCi0jZW5kaWYKIAogI2luY2x1ZGUgInJwY19hdXRoLmgiCiAjaW5jbHVkZSAicnBjX21zZy5oIgpAQCAtMTcxLDEzICsxNzAsMTEgQEAKIHsKIAlyZWdpc3RlciBjb25zdCBzdHJ1Y3Qgc3VucnBjX21zZyAqcnA7CiAJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGlwICppcDsKLSNpZmRlZiBJTkVUNgogCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKIAl1aW50MzJfdCB4OwogCWNoYXIgc3JjaWRbMjBdLCBkc3RpZFsyMF07CS8qZml0cyAzMmJpdCovCiAKLQlycCA9IChzdHJ1Y3Qgc3VucnBjX21zZyAqKWJwOworCXJwID0gKGNvbnN0IHN0cnVjdCBzdW5ycGNfbXNnICopYnA7CiAKIAlpZiAoIW5kby0+bmRvX25mbGFnKSB7CiAJCXNucHJpbnRmKHNyY2lkLCBzaXplb2Yoc3JjaWQpLCAiMHgleCIsCkBAIC0xODksMjEgKzE4NiwxOSBAQAogCQlzbnByaW50Zihkc3RpZCwgc2l6ZW9mKGRzdGlkKSwgIjB4JXgiLCBTVU5SUENfUE1BUFBPUlQpOwogCX0KIAotCXN3aXRjaCAoSVBfVigoc3RydWN0IGlwICopYnAyKSkgeworCXN3aXRjaCAoSVBfVigoY29uc3Qgc3RydWN0IGlwICopYnAyKSkgewogCWNhc2UgNDoKLQkJaXAgPSAoc3RydWN0IGlwICopYnAyOworCQlpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDI7CiAJCU5EX1BSSU5UKChuZG8sICIlcy4lcyA+ICVzLiVzOiAlZCIsCiAJCSAgICBpcGFkZHJfc3RyaW5nKG5kbywgJmlwLT5pcF9zcmMpLCBzcmNpZCwKIAkJICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX2RzdCksIGRzdGlkLCBsZW5ndGgpKTsKIAkJYnJlYWs7Ci0jaWZkZWYgSU5FVDYKIAljYXNlIDY6Ci0JCWlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKKwkJaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopYnAyOwogCQlORF9QUklOVCgobmRvLCAiJXMuJXMgPiAlcy4lczogJWQiLAogCQkgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmaXA2LT5pcDZfc3JjKSwgc3JjaWQsCiAJCSAgICBpcDZhZGRyX3N0cmluZyhuZG8sICZpcDYtPmlwNl9kc3QpLCBkc3RpZCwgbGVuZ3RoKSk7CiAJCWJyZWFrOwotI2VuZGlmCiAJZGVmYXVsdDoKIAkJTkRfUFJJTlQoKG5kbywgIiVzLiVzID4gJXMuJXM6ICVkIiwgIj8iLCBzcmNpZCwgIj8iLCBkc3RpZCwgbGVuZ3RoKSk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvcHJpbnQtc3ltYW50ZWMuYyBiL3ByaW50LXN5bWFudGVjLmMKaW5kZXggZGNmZjJhNi4uOWU5ZjhmMyAxMDA2NDQKLS0tIGEvcHJpbnQtc3ltYW50ZWMuYworKysgYi9wcmludC1zeW1hbnRlYy5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogU3ltYW50ZWMgRW50ZXJwcmlzZSBGaXJld2FsbCBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAiZXRoZXJ0eXBlLmgiCiAKQEAgLTc1LDcgKzc2LDcgQEAKIHsKIAl1X2ludCBsZW5ndGggPSBoLT5sZW47CiAJdV9pbnQgY2FwbGVuID0gaC0+Y2FwbGVuOwotCXN0cnVjdCBzeW1hbnRlY19oZWFkZXIgKnNwOworCWNvbnN0IHN0cnVjdCBzeW1hbnRlY19oZWFkZXIgKnNwOwogCXVfc2hvcnQgZXRoZXJfdHlwZTsKIAogCWlmIChjYXBsZW4gPCBzaXplb2YgKHN0cnVjdCBzeW1hbnRlY19oZWFkZXIpKSB7CkBAIC04OCw3ICs4OSw3IEBACiAKIAlsZW5ndGggLT0gc2l6ZW9mIChzdHJ1Y3Qgc3ltYW50ZWNfaGVhZGVyKTsKIAljYXBsZW4gLT0gc2l6ZW9mIChzdHJ1Y3Qgc3ltYW50ZWNfaGVhZGVyKTsKLQlzcCA9IChzdHJ1Y3Qgc3ltYW50ZWNfaGVhZGVyICopcDsKKwlzcCA9IChjb25zdCBzdHJ1Y3Qgc3ltYW50ZWNfaGVhZGVyICopcDsKIAlwICs9IHNpemVvZiAoc3RydWN0IHN5bWFudGVjX2hlYWRlcik7CiAKIAlldGhlcl90eXBlID0gRVhUUkFDVF8xNkJJVFMoJnNwLT5ldGhlcl90eXBlKTsKQEAgLTk2LDE0ICs5NywxNCBAQAogCWlmIChldGhlcl90eXBlIDw9IEVUSEVSTVRVKSB7CiAJCS8qIGV0aGVyX3R5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCiAJCWlmICghbmRvLT5uZG9fZWZsYWcpCi0JCQlzeW1hbnRlY19oZHJfcHJpbnQobmRvLCAodV9jaGFyICopc3AsIGxlbmd0aCArIHNpemVvZiAoc3RydWN0IHN5bWFudGVjX2hlYWRlcikpOworCQkJc3ltYW50ZWNfaGRyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXNwLCBsZW5ndGggKyBzaXplb2YgKHN0cnVjdCBzeW1hbnRlY19oZWFkZXIpKTsKIAogCQlpZiAoIW5kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQpCiAJCQlORF9ERUZBVUxUUFJJTlQocCwgY2FwbGVuKTsKLQl9IGVsc2UgaWYgKGV0aGVydHlwZV9wcmludChuZG8sIGV0aGVyX3R5cGUsIHAsIGxlbmd0aCwgY2FwbGVuKSA9PSAwKSB7CisJfSBlbHNlIGlmIChldGhlcnR5cGVfcHJpbnQobmRvLCBldGhlcl90eXBlLCBwLCBsZW5ndGgsIGNhcGxlbiwgTlVMTCwgTlVMTCkgPT0gMCkgewogCQkvKiBldGhlcl90eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLwogCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJc3ltYW50ZWNfaGRyX3ByaW50KG5kbywgKHVfY2hhciAqKXNwLCBsZW5ndGggKyBzaXplb2YgKHN0cnVjdCBzeW1hbnRlY19oZWFkZXIpKTsKKwkJCXN5bWFudGVjX2hkcl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKilzcCwgbGVuZ3RoICsgc2l6ZW9mIChzdHJ1Y3Qgc3ltYW50ZWNfaGVhZGVyKSk7CiAKIAkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJTkRfREVGQVVMVFBSSU5UKHAsIGNhcGxlbik7CmRpZmYgLS1naXQgYS9wcmludC1zeXNsb2cuYyBiL3ByaW50LXN5c2xvZy5jCmluZGV4IDVlM2NkNGYuLmZmODY2NzYgMTAwNjQ0Ci0tLSBhL3ByaW50LXN5c2xvZy5jCisrKyBiL3ByaW50LXN5c2xvZy5jCkBAIC0xNCwxNCArMTQsMTUgQEAKICAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBTeXNsb2cgcHJvdG9jb2wgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiBzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiW3xzeXNsb2ddIjsKZGlmZiAtLWdpdCBhL3ByaW50LXRjcC5jIGIvcHJpbnQtdGNwLmMKaW5kZXggYmMyMDBlMi4uZTBkMDUzMSAxMDA2NDQKLS0tIGEvcHJpbnQtdGNwLmMKKysrIGIvcHJpbnQtdGNwLmMKQEAgLTIzLDQwICsyMywzNyBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCisvKiBcc3VtbWFyeTogVENQIHByaW50ZXIgKi8KKwogI2lmbmRlZiBsaW50CiAjZWxzZQogX19SQ1NJRCgiJE5ldEJTRDogcHJpbnQtdGNwLmMsdiAxLjggMjAwNy8wNy8yNCAxMTo1Mzo0OCBkcm9jaG5lciBFeHAgJCIpOwogI2VuZGlmCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAogI2luY2x1ZGUgInRjcC5oIgogCiAjaW5jbHVkZSAiaXAuaCIKLSNpZmRlZiBJTkVUNgogI2luY2x1ZGUgImlwNi5oIgotI2VuZGlmCiAjaW5jbHVkZSAiaXBwcm90by5oIgogI2luY2x1ZGUgInJwY19hdXRoLmgiCiAjaW5jbHVkZSAicnBjX21zZy5oIgogCi0jaW5jbHVkZSAibmFtZXNlci5oIgotCiAjaWZkZWYgSEFWRV9MSUJDUllQVE8KICNpbmNsdWRlIDxvcGVuc3NsL21kNS5oPgotI2luY2x1ZGUgPHNpZ25hdHVyZS5oPgorI2luY2x1ZGUgInNpZ25hdHVyZS5oIgogCiBzdGF0aWMgaW50IHRjcF92ZXJpZnlfc2lnbmF0dXJlKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgaXAgKmlwLCBjb25zdCBzdHJ1Y3QgdGNwaGRyICp0cCwKQEAgLTY0LDYgKzYxLDggQEAKICNlbmRpZgogCiBzdGF0aWMgdm9pZCBwcmludF90Y3BfcnN0X2RhdGEobmV0ZGlzc2VjdF9vcHRpb25zICosIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqc3AsIHVfaW50IGxlbmd0aCk7CitzdGF0aWMgdm9pZCBwcmludF90Y3BfZmFzdG9wZW5fb3B0aW9uKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCB1X2NoYXIgKmNwLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1X2ludCBkYXRhbGVuLCBpbnQgZXhwKTsKIAogI2RlZmluZSBNQVhfUlNUX0RBVEFfTEVOCTMwCiAKQEAgLTgxLDcgKzgwLDYgQEAKICAgICAgICAgdGNwX3NlcSBhY2s7CiB9OwogCi0jaWZkZWYgSU5FVDYKIHN0cnVjdCB0aGE2IHsKICAgICAgICAgc3RydWN0IGluNl9hZGRyIHNyYzsKICAgICAgICAgc3RydWN0IGluNl9hZGRyIGRzdDsKQEAgLTk0LDcgKzkyLDYgQEAKICAgICAgICAgdGNwX3NlcSBzZXE7CiAgICAgICAgIHRjcF9zZXEgYWNrOwogfTsKLSNlbmRpZgogCiAjZGVmaW5lIFRTRVFfSEFTSFNJWkUgOTE5CiAKQEAgLTEwMiw5ICs5OSw3IEBACiAjZGVmaW5lIFpFUk9MRU5PUFQobykgKChvKSA9PSBUQ1BPUFRfRU9MIHx8IChvKSA9PSBUQ1BPUFRfTk9QKQogCiBzdGF0aWMgc3RydWN0IHRjcF9zZXFfaGFzaCB0Y3Bfc2VxX2hhc2g0W1RTRVFfSEFTSFNJWkVdOwotI2lmZGVmIElORVQ2CiBzdGF0aWMgc3RydWN0IHRjcF9zZXFfaGFzaDYgdGNwX3NlcV9oYXNoNltUU0VRX0hBU0hTSVpFXTsKLSNlbmRpZgogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayB0Y3BfZmxhZ192YWx1ZXNbXSA9IHsKICAgICAgICAgeyBUSF9GSU4sICJGIiB9LApAQCAtMTMyLDkgKzEyNywxMSBAQAogICAgICAgICB7IFRDUE9QVF9DQ05FVywgImNjbmV3IiB9LAogICAgICAgICB7IFRDUE9QVF9DQ0VDSE8sICIiIH0sCiAgICAgICAgIHsgVENQT1BUX1NJR05BVFVSRSwgIm1kNSIgfSwKLSAgICAgICAgeyBUQ1BPUFRfQVVUSCwgImVuaGFuY2VkIGF1dGgiIH0sCisgICAgICAgIHsgVENQT1BUX1NDUFMsICJzY3BzIiB9LAogICAgICAgICB7IFRDUE9QVF9VVE8sICJ1dG8iIH0sCisgICAgICAgIHsgVENQT1BUX1RDUEFPLCAidGNwLWFvIiB9LAogICAgICAgICB7IFRDUE9QVF9NUFRDUCwgIm1wdGNwIiB9LAorICAgICAgICB7IFRDUE9QVF9GQVNUT1BFTiwgInRmbyIgfSwKICAgICAgICAgeyBUQ1BPUFRfRVhQRVJJTUVOVDIsICJleHAiIH0sCiAgICAgICAgIHsgMCwgTlVMTCB9CiB9OwpAQCAtMTQ5LDYgKzE0NiwxNiBAQAogCQkJCUlQUFJPVE9fVENQKTsKIH0KIAorc3RhdGljIGludAordGNwNl9ja3N1bShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IGlwNl9oZHIgKmlwNiwKKyAgICAgICAgICAgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRjcGhkciAqdHAsCisgICAgICAgICAgIHJlZ2lzdGVyIHVfaW50IGxlbikKK3sKKwlyZXR1cm4gbmV4dHByb3RvNl9ja3N1bShuZG8sIGlwNiwgKGNvbnN0IHVpbnQ4X3QgKil0cCwgbGVuLCBsZW4sCisJCQkJSVBQUk9UT19UQ1ApOworfQorCiB2b2lkCiB0Y3BfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCwgcmVnaXN0ZXIgdV9pbnQgbGVuZ3RoLApAQCAtMTY0LDE4ICsxNzEsMTQgQEAKICAgICAgICAgdV9pbnQgdXRvdmFsOwogICAgICAgICB1aW50MTZfdCBtYWdpYzsKICAgICAgICAgcmVnaXN0ZXIgaW50IHJldjsKLSNpZmRlZiBJTkVUNgogICAgICAgICByZWdpc3RlciBjb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2OwotI2VuZGlmCiAKLSAgICAgICAgdHAgPSAoc3RydWN0IHRjcGhkciAqKWJwOwotICAgICAgICBpcCA9IChzdHJ1Y3QgaXAgKilicDI7Ci0jaWZkZWYgSU5FVDYKKyAgICAgICAgdHAgPSAoY29uc3Qgc3RydWN0IHRjcGhkciAqKWJwOworICAgICAgICBpcCA9IChjb25zdCBzdHJ1Y3QgaXAgKilicDI7CiAgICAgICAgIGlmIChJUF9WKGlwKSA9PSA2KQotICAgICAgICAgICAgICAgIGlwNiA9IChzdHJ1Y3QgaXA2X2hkciAqKWJwMjsKKyAgICAgICAgICAgICAgICBpcDYgPSAoY29uc3Qgc3RydWN0IGlwNl9oZHIgKilicDI7CiAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICBpcDYgPSBOVUxMOwotI2VuZGlmIC8qSU5FVDYqLwogICAgICAgICBjaCA9ICdcMCc7CiAgICAgICAgIGlmICghTkRfVFRFU1QodHAtPnRoX2Rwb3J0KSkgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcyA+ICVzOiBbfHRjcF0iLApAQCAtMTg3LDQzICsxOTAsNDAgQEAKICAgICAgICAgc3BvcnQgPSBFWFRSQUNUXzE2QklUUygmdHAtPnRoX3Nwb3J0KTsKICAgICAgICAgZHBvcnQgPSBFWFRSQUNUXzE2QklUUygmdHAtPnRoX2Rwb3J0KTsKIAotICAgICAgICBobGVuID0gVEhfT0ZGKHRwKSAqIDQ7Ci0KLSNpZmRlZiBJTkVUNgogICAgICAgICBpZiAoaXA2KSB7CiAgICAgICAgICAgICAgICAgaWYgKGlwNi0+aXA2X254dCA9PSBJUFBST1RPX1RDUCkgewogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzLiVzID4gJXMuJXM6ICIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmaXA2LT5pcDZfc3JjKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhzcG9ydCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwcG9ydF9zdHJpbmcobmRvLCBzcG9ydCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaXA2YWRkcl9zdHJpbmcobmRvLCAmaXA2LT5pcDZfZHN0KSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhkcG9ydCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJXMgPiAlczogIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhzcG9ydCksIHRjcHBvcnRfc3RyaW5nKGRwb3J0KSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcHBvcnRfc3RyaW5nKG5kbywgc3BvcnQpLCB0Y3Bwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlCi0jZW5kaWYgLypJTkVUNiovCi0gICAgICAgIHsKKyAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBpZiAoaXAtPmlwX3AgPT0gSVBQUk9UT19UQ1ApIHsKICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlcy4lcyA+ICVzLiVzOiAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX3NyYyksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwcG9ydF9zdHJpbmcoc3BvcnQpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRjcHBvcnRfc3RyaW5nKG5kbywgc3BvcnQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlwYWRkcl9zdHJpbmcobmRvLCAmaXAtPmlwX2RzdCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwcG9ydF9zdHJpbmcobmRvLCBkcG9ydCkpKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzID4gJXM6ICIsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGNwcG9ydF9zdHJpbmcoc3BvcnQpLCB0Y3Bwb3J0X3N0cmluZyhkcG9ydCkpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bwb3J0X3N0cmluZyhuZG8sIHNwb3J0KSwgdGNwcG9ydF9zdHJpbmcobmRvLCBkcG9ydCkpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAorICAgICAgICBORF9UQ0hFQ0soKnRwKTsKKworICAgICAgICBobGVuID0gVEhfT0ZGKHRwKSAqIDQ7CisKICAgICAgICAgaWYgKGhsZW4gPCBzaXplb2YoKnRwKSkgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgdGNwICVkIFtiYWQgaGRyIGxlbmd0aCAldSAtIHRvbyBzaG9ydCwgPCAlbHVdIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGVuZ3RoIC0gaGxlbiwgaGxlbiwgKHVuc2lnbmVkIGxvbmcpc2l6ZW9mKCp0cCkpKTsKICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KIAotICAgICAgICBORF9UQ0hFQ0soKnRwKTsKLQogICAgICAgICBzZXEgPSBFWFRSQUNUXzMyQklUUygmdHAtPnRoX3NlcSk7CiAgICAgICAgIGFjayA9IEVYVFJBQ1RfMzJCSVRTKCZ0cC0+dGhfYWNrKTsKICAgICAgICAgd2luID0gRVhUUkFDVF8xNkJJVFMoJnRwLT50aF93aW4pOwpAQCAtMjQ5LDcgKzI0OSw2IEBACiAgICAgICAgICAgICAgICAgICogYm90aCBkaXJlY3Rpb25zKS4KICAgICAgICAgICAgICAgICAgKi8KICAgICAgICAgICAgICAgICByZXYgPSAwOwotI2lmZGVmIElORVQ2CiAgICAgICAgICAgICAgICAgaWYgKGlwNikgewogICAgICAgICAgICAgICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHRjcF9zZXFfaGFzaDYgKnRoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRjcF9zZXFfaGFzaDYgKnRjcF9zZXFfaGFzaDsKQEAgLTI4Nyw3ICsyODYsOCBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoLT5ueHQgPSAoc3RydWN0IHRjcF9zZXFfaGFzaDYgKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxvYygxLCBzaXplb2YoKnRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoLT5ueHQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJ0Y3BfcHJpbnQ6IGNhbGxvYyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpuZG8tPm5kb19lcnJvcikobmRvLAorCQkJCQkJCQkgICJ0Y3BfcHJpbnQ6IGNhbGxvYyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoLT5hZGRyID0gdGhhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2KQpAQCAtMzA0LDMwICszMDQsMjQgQEAKICAgICAgICAgICAgICAgICAgICAgICAgIHRoc2VxID0gdGgtPnNlcTsKICAgICAgICAgICAgICAgICAgICAgICAgIHRoYWNrID0gdGgtPmFjazsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotI2Vsc2UgIC8qSU5FVDYqLwotICAgICAgICAgICAgICAgIHsKLSNlbmRpZiAvKklORVQ2Ki8KICAgICAgICAgICAgICAgICAgICAgICAgIHJlZ2lzdGVyIHN0cnVjdCB0Y3Bfc2VxX2hhc2ggKnRoOwogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRjcF9zZXFfaGFzaCAqdGNwX3NlcV9oYXNoOwotICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGluX2FkZHIgKnNyYywgKmRzdDsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aGEgdGhhOwogCiAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc2VxX2hhc2ggPSB0Y3Bfc2VxX2hhc2g0OwotICAgICAgICAgICAgICAgICAgICAgICAgc3JjID0gJmlwLT5pcF9zcmM7Ci0gICAgICAgICAgICAgICAgICAgICAgICBkc3QgPSAmaXAtPmlwX2RzdDsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzcG9ydCA+IGRwb3J0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXYgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3BvcnQgPT0gZHBvcnQpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFVOQUxJR05FRF9NRU1DTVAoc3JjLCBkc3QsIHNpemVvZiBpcC0+aXBfZHN0KSA+IDApCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChVTkFMSUdORURfTUVNQ01QKCZpcC0+aXBfc3JjLCAmaXAtPmlwX2RzdCwgc2l6ZW9mIGlwLT5pcF9kc3QpID4gMCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXYgPSAxOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHJldikgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkFMSUdORURfTUVNQ1BZKCZ0aGEuc3JjLCBkc3QsIHNpemVvZiBpcC0+aXBfZHN0KTsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5BTElHTkVEX01FTUNQWSgmdGhhLmRzdCwgc3JjLCBzaXplb2YgaXAtPmlwX3NyYyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQUxJR05FRF9NRU1DUFkoJnRoYS5zcmMsICZpcC0+aXBfZHN0LCBzaXplb2YgaXAtPmlwX2RzdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQUxJR05FRF9NRU1DUFkoJnRoYS5kc3QsICZpcC0+aXBfc3JjLCBzaXplb2YgaXAtPmlwX3NyYyk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoYS5wb3J0ID0gZHBvcnQgPDwgMTYgfCBzcG9ydDsKICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFVOQUxJR05FRF9NRU1DUFkoJnRoYS5kc3QsIGRzdCwgc2l6ZW9mIGlwLT5pcF9kc3QpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVTkFMSUdORURfTUVNQ1BZKCZ0aGEuc3JjLCBzcmMsIHNpemVvZiBpcC0+aXBfc3JjKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5BTElHTkVEX01FTUNQWSgmdGhhLmRzdCwgJmlwLT5pcF9kc3QsIHNpemVvZiBpcC0+aXBfZHN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVU5BTElHTkVEX01FTUNQWSgmdGhhLnNyYywgJmlwLT5pcF9zcmMsIHNpemVvZiBpcC0+aXBfc3JjKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhhLnBvcnQgPSBzcG9ydCA8PCAxNiB8IGRwb3J0OwogICAgICAgICAgICAgICAgICAgICAgICAgfQogCkBAIC0zNDMsNyArMzM3LDggQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aC0+bnh0ID0gKHN0cnVjdCB0Y3Bfc2VxX2hhc2ggKikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxvYygxLCBzaXplb2YoKnRoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoLT5ueHQgPT0gTlVMTCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVycm9yKCJ0Y3BfcHJpbnQ6IGNhbGxvYyIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCpuZG8tPm5kb19lcnJvcikobmRvLAorCQkJCQkJCQkgICJ0Y3BfcHJpbnQ6IGNhbGxvYyIpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoLT5hZGRyID0gdGhhOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocmV2KQpAQCAtMzg2LDEyICszODEsOSBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiAoY29ycmVjdCkiKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQotI2lmZGVmIElORVQ2Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSVBfVihpcCkgPT0gNiAmJiBpcDYtPmlwNl9wbGVuKSB7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChJUF9WKGlwKSA9PSA2ICYmIGlwNi0+aXA2X3BsZW4pIHsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChORF9UVEVTVDIodHAtPnRoX3Nwb3J0LCBsZW5ndGgpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IG5leHRwcm90bzZfY2tzdW0oaXA2LCAoY29uc3QgdWludDhfdCAqKXRwLAotCQkJCQkJCWxlbmd0aCwgbGVuZ3RoLCBJUFBST1RPX1RDUCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN1bSA9IHRjcDZfY2tzdW0obmRvLCBpcDYsIHRwLCBsZW5ndGgpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0Y3Bfc3VtID0gRVhUUkFDVF8xNkJJVFMoJnRwLT50aF9zdW0pOwogCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsIGNrc3VtIDB4JTA0eCIsIHRjcF9zdW0pKTsKQEAgLTQwMyw3ICszOTUsNiBAQAogCiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQotI2VuZGlmCiAgICAgICAgIH0KIAogICAgICAgICBsZW5ndGggLT0gaGxlbjsKQEAgLTQ3NCw3ICs0NjUsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ1BPUFRfU0FDSzoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YWxlbiA9IGxlbiAtIDI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhbGVuICUgOCAhPSAwKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIm1hbGZvcm1lZCBzYWNrIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgaW52YWxpZCBzYWNrIikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHMsIGU7CiAKQEAgLTUyMiw2ICs1MTMsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ1BPUFRfU0lHTkFUVVJFOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuID0gVENQX1NJR0xFTjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soZGF0YWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgIikpOwogI2lmZGVmIEhBVkVfTElCQ1JZUFRPCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodGNwX3ZlcmlmeV9zaWduYXR1cmUobmRvLCBpcCwgdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnAgKyBUSF9PRkYodHApICogNCwgbGVuZ3RoLCBjcCkpIHsKQEAgLTU0NiwxNSArNTM4LDM1IEBACiAjZW5kaWYKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVENQT1BUX0FVVEg6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJrZXlpZCAlZCIsICpjcCsrKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFsZW4gPSBsZW4gLSAzOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soaSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiUwMngiLCBjcFtpXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRDUE9QVF9TQ1BTOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuID0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soZGF0YWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgY2FwICUwMnggaWQgJXUiLCBjcFswXSwgY3BbMV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVENQT1BUX1RDUEFPOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuID0gbGVuIC0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogUkZDIDU5MjUgU2VjdGlvbiAyLjI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICJUaGUgTGVuZ3RoIHZhbHVlIE1VU1QgYmUgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIDQuIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAoVGhpcyBpbmNsdWRlcyB0aGUgS2luZCBhbmQgTGVuZ3RoIGZpZWxkcyBhbHJlYWR5IHByb2Nlc3NlZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBhdCB0aGlzIHBvaW50LikKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhbGVuIDwgMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgaW52YWxpZCIpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRU5DSEVDSygxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIGtleWlkICV1IiwgY3BbMF0pKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRU5DSEVDSygyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIHJuZXh0a2V5aWQgJXUiLCBjcFsxXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhbGVuID4gMikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBtYWMgMHgiKSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAyOyBpIDwgZGF0YWxlbjsgaSsrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExFTkNIRUNLKGkgKyAxKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiUwMngiLCBjcFtpXSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ1BPUFRfRU9MOgogICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUQ1BPUFRfTk9QOgpAQCAtNTY5LDcgKzU4MSw3IEBACiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFsZW4gPSAyOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMRU5DSEVDSyhkYXRhbGVuKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXRvdmFsID0gRVhUUkFDVF8xNkJJVFMoY3ApOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiMHgleCIsIHV0b3ZhbCkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIDB4JXgiLCB1dG92YWwpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHV0b3ZhbCAmIDB4MDAwMSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1dG92YWwgPSAodXRvdmFsID4+IDEpICogNjA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKQEAgLTU4NCw2ICs1OTYsMTMgQEAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGJhZDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVENQT1BUX0ZBU1RPUEVOOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuID0gbGVuIC0gMjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soZGF0YWxlbik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgIikpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF90Y3BfZmFzdG9wZW5fb3B0aW9uKG5kbywgY3AsIGRhdGFsZW4sIEZBTFNFKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgVENQT1BUX0VYUEVSSU1FTlQyOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhbGVuID0gbGVuIC0gMjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soZGF0YWxlbik7CkBAIC01OTUsMjEgKzYxNCw4IEBACiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoKG1hZ2ljKSB7CiAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweGY5ODk6Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLyogVENQIEZhc3QgT3BlbjogUkZDIDc0MTMgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YWxlbiA9PSAyKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IE9wZW4gQ29va2llIFJlcXVlc3QgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJ0Zm8gY29va2llcmVxIikpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBGYXN0IE9wZW4gQ29va2llICovCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YWxlbiAlIDIgIT0gMCB8fCBkYXRhbGVuIDwgNiB8fCBkYXRhbGVuID4gMTgpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgInRmbyBtYWxmb3JtZWQiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAidGZvIGNvb2tpZSAiKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDI7IGkgPCBkYXRhbGVuOyArK2kpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiUwMngiLCBjcFtpXSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAweGY5ODk6IC8qIFRDUCBGYXN0IE9wZW4gUkZDIDc0MTMgKi8KKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF90Y3BfZmFzdG9wZW5fb3B0aW9uKG5kbywgY3AgKyAyLCBkYXRhbGVuIC0gMiwgVFJVRSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKQEAgLTYyNCw3ICs2MzAsNyBAQAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YWxlbikKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiIDB4IikpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgZGF0YWxlbjsgKytpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soaSk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTEVOQ0hFQ0soaSArIDEpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIlMDJ4IiwgY3BbaV0pKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTY2OSw1OCArNjc1LDU5IEBACiAgICAgICAgICAgICAgICAgY2FzZSBQVF9aTVRQMToKICAgICAgICAgICAgICAgICAgICAgICAgIHptdHAxX3ByaW50KG5kbywgYnAsIGxlbmd0aCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIFBUX1JFU1A6CisgICAgICAgICAgICAgICAgICAgICAgICByZXNwX3ByaW50KG5kbywgYnAsIGxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKLSAgICAgICAgaWYgKHNwb3J0ID09IFRFTE5FVF9QT1JUIHx8IGRwb3J0ID09IFRFTE5FVF9QT1JUKSB7CisgICAgICAgIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoVEVMTkVUX1BPUlQpKSB7CiAgICAgICAgICAgICAgICAgdGVsbmV0X3ByaW50KG5kbywgYnAsIGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BvcnQgPT0gU01UUF9QT1JUIHx8IGRwb3J0ID09IFNNVFBfUE9SVCkgeworICAgICAgICB9IGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChTTVRQX1BPUlQpKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogIikpOwogICAgICAgICAgICAgICAgIHNtdHBfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKLSAgICAgICAgfSBlbHNlIGlmIChzcG9ydCA9PSBCR1BfUE9SVCB8fCBkcG9ydCA9PSBCR1BfUE9SVCkKKyAgICAgICAgfSBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoQkdQX1BPUlQpKQogICAgICAgICAgICAgICAgIGJncF9wcmludChuZG8sIGJwLCBsZW5ndGgpOwotICAgICAgICBlbHNlIGlmIChzcG9ydCA9PSBQUFRQX1BPUlQgfHwgZHBvcnQgPT0gUFBUUF9QT1JUKQorICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoUFBUUF9QT1JUKSkKICAgICAgICAgICAgICAgICBwcHRwX3ByaW50KG5kbywgYnApOwotI2lmZGVmIFRDUERVTVBfRE9fU01CCi0gICAgICAgIGVsc2UgaWYgKHNwb3J0ID09IE5FVEJJT1NfU1NOX1BPUlQgfHwgZHBvcnQgPT0gTkVUQklPU19TU05fUE9SVCkKKyAgICAgICAgZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFJFRElTX1BPUlQpKQorICAgICAgICAgICAgICAgIHJlc3BfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKKyNpZmRlZiBFTkFCTEVfU01CCisgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChORVRCSU9TX1NTTl9QT1JUKSkKICAgICAgICAgICAgICAgICBuYnRfdGNwX3ByaW50KG5kbywgYnAsIGxlbmd0aCk7Ci0JZWxzZSBpZiAoc3BvcnQgPT0gU01CX1BPUlQgfHwgZHBvcnQgPT0gU01CX1BPUlQpCisJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFNNQl9QT1JUKSkKIAkJc21iX3RjcF9wcmludChuZG8sIGJwLCBsZW5ndGgpOwogI2VuZGlmCi0gICAgICAgIGVsc2UgaWYgKHNwb3J0ID09IEJFRVBfUE9SVCB8fCBkcG9ydCA9PSBCRUVQX1BPUlQpCisgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChCRUVQX1BPUlQpKQogICAgICAgICAgICAgICAgIGJlZXBfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKLSAgICAgICAgZWxzZSBpZiAoc3BvcnQgPT0gT1BFTkZMT1dfUE9SVF9PTEQgfHwgZHBvcnQgPT0gT1BFTkZMT1dfUE9SVF9PTEQgfHwKLSAgICAgICAgICAgICAgICAgc3BvcnQgPT0gT1BFTkZMT1dfUE9SVF9JQU5BIHx8IGRwb3J0ID09IE9QRU5GTE9XX1BPUlRfSUFOQSkKKyAgICAgICAgZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKE9QRU5GTE9XX1BPUlRfT0xEKSB8fCBJU19TUkNfT1JfRFNUX1BPUlQoT1BFTkZMT1dfUE9SVF9JQU5BKSkKICAgICAgICAgICAgICAgICBvcGVuZmxvd19wcmludChuZG8sIGJwLCBsZW5ndGgpOwotICAgICAgICBlbHNlIGlmIChzcG9ydCA9PSBGVFBfUE9SVCB8fCBkcG9ydCA9PSBGVFBfUE9SVCkgeworICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoRlRQX1BPUlQpKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogIikpOwogICAgICAgICAgICAgICAgIGZ0cF9wcmludChuZG8sIGJwLCBsZW5ndGgpOwotICAgICAgICB9IGVsc2UgaWYgKHNwb3J0ID09IEhUVFBfUE9SVCB8fCBkcG9ydCA9PSBIVFRQX1BPUlQgfHwKLSAgICAgICAgICAgIHNwb3J0ID09IEhUVFBfUE9SVF9BTFQgfHwgZHBvcnQgPT0gSFRUUF9QT1JUX0FMVCkgeworICAgICAgICB9IGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChIVFRQX1BPUlQpIHx8IElTX1NSQ19PUl9EU1RfUE9SVChIVFRQX1BPUlRfQUxUKSkgewogICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICI6ICIpKTsKICAgICAgICAgICAgICAgICBodHRwX3ByaW50KG5kbywgYnAsIGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BvcnQgPT0gUlRTUF9QT1JUIHx8IGRwb3J0ID09IFJUU1BfUE9SVCB8fAotICAgICAgICAgICAgc3BvcnQgPT0gUlRTUF9QT1JUX0FMVCB8fCBkcG9ydCA9PSBSVFNQX1BPUlRfQUxUKSB7CisgICAgICAgIH0gZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFJUU1BfUE9SVCkgfHwgSVNfU1JDX09SX0RTVF9QT1JUKFJUU1BfUE9SVF9BTFQpKSB7CiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogIikpOwogICAgICAgICAgICAgICAgIHJ0c3BfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKICAgICAgICAgfSBlbHNlIGlmIChsZW5ndGggPiAyICYmCi0gICAgICAgICAgICAgICAgIChzcG9ydCA9PSBOQU1FU0VSVkVSX1BPUlQgfHwgZHBvcnQgPT0gTkFNRVNFUlZFUl9QT1JUIHx8Ci0gICAgICAgICAgICAgICAgICBzcG9ydCA9PSBNVUxUSUNBU1RETlNfUE9SVCB8fCBkcG9ydCA9PSBNVUxUSUNBU1RETlNfUE9SVCkpIHsKKyAgICAgICAgICAgICAgICAgKElTX1NSQ19PUl9EU1RfUE9SVChOQU1FU0VSVkVSX1BPUlQpKSkgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogVENQIEROUyBxdWVyeSBoYXMgMmJ5dGUgbGVuZ3RoIGF0IHRoZSBoZWFkLgogICAgICAgICAgICAgICAgICAqIFhYWCBwYWNrZXQgY291bGQgYmUgdW5hbGlnbmVkLCBpdCBjYW4gZ28gc3RyYW5nZQogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIG5zX3ByaW50KG5kbywgYnAgKyAyLCBsZW5ndGggLSAyLCAwKTsKLSAgICAgICAgfSBlbHNlIGlmIChzcG9ydCA9PSBNU0RQX1BPUlQgfHwgZHBvcnQgPT0gTVNEUF9QT1JUKSB7CisgICAgICAgIH0gZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKE1TRFBfUE9SVCkpIHsKICAgICAgICAgICAgICAgICBtc2RwX3ByaW50KG5kbywgYnAsIGxlbmd0aCk7Ci0gICAgICAgIH0gZWxzZSBpZiAoc3BvcnQgPT0gUlBLSV9SVFJfUE9SVCB8fCBkcG9ydCA9PSBSUEtJX1JUUl9QT1JUKSB7CisgICAgICAgIH0gZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFJQS0lfUlRSX1BPUlQpKSB7CiAgICAgICAgICAgICAgICAgcnBraV9ydHJfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmIChsZW5ndGggPiAwICYmIChzcG9ydCA9PSBMRFBfUE9SVCB8fCBkcG9ydCA9PSBMRFBfUE9SVCkpIHsKKyAgICAgICAgZWxzZSBpZiAobGVuZ3RoID4gMCAmJiAoSVNfU1JDX09SX0RTVF9QT1JUKExEUF9QT1JUKSkpIHsKICAgICAgICAgICAgICAgICBsZHBfcHJpbnQobmRvLCBicCwgbGVuZ3RoKTsKICAgICAgICAgfQotICAgICAgICBlbHNlIGlmICgoc3BvcnQgPT0gTkZTX1BPUlQgfHwgZHBvcnQgPT0gTkZTX1BPUlQpICYmCisgICAgICAgIGVsc2UgaWYgKChJU19TUkNfT1JfRFNUX1BPUlQoTkZTX1BPUlQpKSAmJgogICAgICAgICAgICAgICAgICBsZW5ndGggPj0gNCAmJiBORF9UVEVTVDIoKmJwLCA0KSkgewogICAgICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgICAgICogSWYgZGF0YSBwcmVzZW50LCBoZWFkZXIgbGVuZ3RoIHZhbGlkLCBhbmQgTkZTIHBvcnQgdXNlZCwKQEAgLTcyOSwyMyArNzM2LDIzIEBACiAgICAgICAgICAgICAgICAgICogdG8gTkZTIHByaW50IHJvdXRpbmVzLgogICAgICAgICAgICAgICAgICAqLwogICAgICAgICAgICAgICAgIHVpbnQzMl90IGZyYWdsZW47Ci0gICAgICAgICAgICAgICAgcmVnaXN0ZXIgc3RydWN0IHN1bnJwY19tc2cgKnJwOworICAgICAgICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdW5ycGNfbXNnICpycDsKICAgICAgICAgICAgICAgICBlbnVtIHN1bnJwY19tc2dfdHlwZSBkaXJlY3Rpb247CiAKICAgICAgICAgICAgICAgICBmcmFnbGVuID0gRVhUUkFDVF8zMkJJVFMoYnApICYgMHg3RkZGRkZGRjsKICAgICAgICAgICAgICAgICBpZiAoZnJhZ2xlbiA+IChsZW5ndGgpIC0gNCkKICAgICAgICAgICAgICAgICAgICAgICAgIGZyYWdsZW4gPSAobGVuZ3RoKSAtIDQ7Ci0gICAgICAgICAgICAgICAgcnAgPSAoc3RydWN0IHN1bnJwY19tc2cgKikoYnAgKyA0KTsKKyAgICAgICAgICAgICAgICBycCA9IChjb25zdCBzdHJ1Y3Qgc3VucnBjX21zZyAqKShicCArIDQpOwogICAgICAgICAgICAgICAgIGlmIChORF9UVEVTVChycC0+cm1fZGlyZWN0aW9uKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uID0gKGVudW0gc3VucnBjX21zZ190eXBlKUVYVFJBQ1RfMzJCSVRTKCZycC0+cm1fZGlyZWN0aW9uKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkcG9ydCA9PSBORlNfUE9SVCAmJiBkaXJlY3Rpb24gPT0gU1VOUlBDX0NBTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIjogTkZTIHJlcXVlc3QgeGlkICV1ICIsIEVYVFJBQ1RfMzJCSVRTKCZycC0+cm1feGlkKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZnNyZXFfcHJpbnRfbm9hZGRyKG5kbywgKHVfY2hhciAqKXJwLCBmcmFnbGVuLCAodV9jaGFyICopaXApOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZnNyZXFfcHJpbnRfbm9hZGRyKG5kbywgKGNvbnN0IHVfY2hhciAqKXJwLCBmcmFnbGVuLCAoY29uc3QgdV9jaGFyICopaXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3BvcnQgPT0gTkZTX1BPUlQgJiYgZGlyZWN0aW9uID09IFNVTlJQQ19SRVBMWSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiOiBORlMgcmVwbHkgeGlkICV1ICIsIEVYVFJBQ1RfMzJCSVRTKCZycC0+cm1feGlkKSkpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuZnNyZXBseV9wcmludF9ub2FkZHIobmRvLCAodV9jaGFyICopcnAsIGZyYWdsZW4sICh1X2NoYXIgKilpcCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5mc3JlcGx5X3ByaW50X25vYWRkcihuZG8sIChjb25zdCB1X2NoYXIgKilycCwgZnJhZ2xlbiwgKGNvbnN0IHVfY2hhciAqKWlwKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KQEAgLTc5MCwxMyArNzk3LDM3IEBACiAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIisiKSk7CQkJLyogaW5kaWNhdGUgd2UgdHJ1bmNhdGUgKi8KICAgICAgICAgfQogICAgICAgICBORF9QUklOVCgobmRvLCAiICIpKTsKLSAgICAgICAgd2hpbGUgKGxlbmd0aC0tICYmIHNwIDw9IG5kby0+bmRvX3NuYXBlbmQpIHsKKyAgICAgICAgd2hpbGUgKGxlbmd0aC0tICYmIHNwIDwgbmRvLT5uZG9fc25hcGVuZCkgewogICAgICAgICAgICAgICAgIGMgPSAqc3ArKzsKICAgICAgICAgICAgICAgICBzYWZlcHV0Y2hhcihuZG8sIGMpOwogICAgICAgICB9CiAgICAgICAgIE5EX1BSSU5UKChuZG8sICJdIikpOwogfQogCitzdGF0aWMgdm9pZAorcHJpbnRfdGNwX2Zhc3RvcGVuX29wdGlvbihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpjcCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgdV9pbnQgZGF0YWxlbiwgaW50IGV4cCkKK3sKKyAgICAgICAgdV9pbnQgaTsKKworICAgICAgICBpZiAoZXhwKQorICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICJ0Zm8iKSk7CisKKyAgICAgICAgaWYgKGRhdGFsZW4gPT0gMCkgeworICAgICAgICAgICAgICAgIC8qIEZhc3QgT3BlbiBDb29raWUgUmVxdWVzdCAqLworICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgY29va2llcmVxIikpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIC8qIEZhc3QgT3BlbiBDb29raWUgKi8KKyAgICAgICAgICAgICAgICBpZiAoZGF0YWxlbiAlIDIgIT0gMCB8fCBkYXRhbGVuIDwgNCB8fCBkYXRhbGVuID4gMTYpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIgaW52YWxpZCIpKTsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiBjb29raWUgIikpOworICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGRhdGFsZW47ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiUwMngiLCBjcFtpXSkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgfQorfQorCiAjaWZkZWYgSEFWRV9MSUJDUllQVE8KIFVTRVNfQVBQTEVfREVQUkVDQVRFRF9BUEkKIHN0YXRpYyBpbnQKQEAgLTgwOSwxMSArODQwLDkgQEAKICAgICAgICAgY2hhciB6ZXJvX3Byb3RvID0gMDsKICAgICAgICAgTUQ1X0NUWCBjdHg7CiAgICAgICAgIHVpbnQxNl90IHNhdmVjc3VtLCB0bGVuOwotI2lmZGVmIElORVQ2Ci0gICAgICAgIHN0cnVjdCBpcDZfaGRyICppcDY7CisgICAgICAgIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7CiAgICAgICAgIHVpbnQzMl90IGxlbjMyOwogICAgICAgICB1aW50OF90IG54dDsKLSNlbmRpZgogCiAJaWYgKGRhdGEgKyBsZW5ndGggPiBuZG8tPm5kb19zbmFwZW5kKSB7CiAJCU5EX1BSSU5UKChuZG8sICJzbmFwbGVuIHRvbyBzaG9ydCwgIikpOwpAQCAtODMyLDMzICs4NjEsMjcgQEAKICAgICAgICAgICogU3RlcCAxOiBVcGRhdGUgTUQ1IGhhc2ggd2l0aCBJUCBwc2V1ZG8taGVhZGVyLgogICAgICAgICAgKi8KICAgICAgICAgaWYgKElQX1YoaXApID09IDQpIHsKLSAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjaGFyICopJmlwLT5pcF9zcmMsIHNpemVvZihpcC0+aXBfc3JjKSk7Ci0gICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY2hhciAqKSZpcC0+aXBfZHN0LCBzaXplb2YoaXAtPmlwX2RzdCkpOwotICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNoYXIgKikmemVyb19wcm90bywgc2l6ZW9mKHplcm9fcHJvdG8pKTsKLSAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjaGFyICopJmlwLT5pcF9wLCBzaXplb2YoaXAtPmlwX3ApKTsKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJmlwLT5pcF9zcmMsIHNpemVvZihpcC0+aXBfc3JjKSk7CisgICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY29uc3QgY2hhciAqKSZpcC0+aXBfZHN0LCBzaXplb2YoaXAtPmlwX2RzdCkpOworICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNvbnN0IGNoYXIgKikmemVyb19wcm90bywgc2l6ZW9mKHplcm9fcHJvdG8pKTsKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJmlwLT5pcF9wLCBzaXplb2YoaXAtPmlwX3ApKTsKICAgICAgICAgICAgICAgICB0bGVuID0gRVhUUkFDVF8xNkJJVFMoJmlwLT5pcF9sZW4pIC0gSVBfSEwoaXApICogNDsKICAgICAgICAgICAgICAgICB0bGVuID0gaHRvbnModGxlbik7Ci0gICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY2hhciAqKSZ0bGVuLCBzaXplb2YodGxlbikpOwotI2lmZGVmIElORVQ2CisgICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY29uc3QgY2hhciAqKSZ0bGVuLCBzaXplb2YodGxlbikpOwogICAgICAgICB9IGVsc2UgaWYgKElQX1YoaXApID09IDYpIHsKLSAgICAgICAgICAgICAgICBpcDYgPSAoc3RydWN0IGlwNl9oZHIgKilpcDsKLSAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjaGFyICopJmlwNi0+aXA2X3NyYywgc2l6ZW9mKGlwNi0+aXA2X3NyYykpOwotICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNoYXIgKikmaXA2LT5pcDZfZHN0LCBzaXplb2YoaXA2LT5pcDZfZHN0KSk7CisgICAgICAgICAgICAgICAgaXA2ID0gKGNvbnN0IHN0cnVjdCBpcDZfaGRyICopaXA7CisgICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY29uc3QgY2hhciAqKSZpcDYtPmlwNl9zcmMsIHNpemVvZihpcDYtPmlwNl9zcmMpKTsKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJmlwNi0+aXA2X2RzdCwgc2l6ZW9mKGlwNi0+aXA2X2RzdCkpOwogICAgICAgICAgICAgICAgIGxlbjMyID0gaHRvbmwoRVhUUkFDVF8xNkJJVFMoJmlwNi0+aXA2X3BsZW4pKTsKLSAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjaGFyICopJmxlbjMyLCBzaXplb2YobGVuMzIpKTsKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJmxlbjMyLCBzaXplb2YobGVuMzIpKTsKICAgICAgICAgICAgICAgICBueHQgPSAwOwotICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNoYXIgKikmbnh0LCBzaXplb2Yobnh0KSk7Ci0gICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY2hhciAqKSZueHQsIHNpemVvZihueHQpKTsKLSAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjaGFyICopJm54dCwgc2l6ZW9mKG54dCkpOworICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNvbnN0IGNoYXIgKikmbnh0LCBzaXplb2Yobnh0KSk7CisgICAgICAgICAgICAgICAgTUQ1X1VwZGF0ZSgmY3R4LCAoY29uc3QgY2hhciAqKSZueHQsIHNpemVvZihueHQpKTsKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJm54dCwgc2l6ZW9mKG54dCkpOwogICAgICAgICAgICAgICAgIG54dCA9IElQUFJPVE9fVENQOwotICAgICAgICAgICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNoYXIgKikmbnh0LCBzaXplb2Yobnh0KSk7Ci0jZW5kaWYKKyAgICAgICAgICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJm54dCwgc2l6ZW9mKG54dCkpOwogICAgICAgICB9IGVsc2UgewotI2lmZGVmIElORVQ2CiAJCU5EX1BSSU5UKChuZG8sICJJUCB2ZXJzaW9uIG5vdCA0IG9yIDYsICIpKTsKLSNlbHNlCi0JCU5EX1BSSU5UKChuZG8sICJJUCB2ZXJzaW9uIG5vdCA0LCAiKSk7Ci0jZW5kaWYKICAgICAgICAgICAgICAgICByZXR1cm4gKENBTlRfQ0hFQ0tfU0lHTkFUVVJFKTsKICAgICAgICAgfQogCkBAIC04NjgsNyArODkxLDcgQEAKICAgICAgICAgICovCiAgICAgICAgIHNhdmVjc3VtID0gdHAxLnRoX3N1bTsKICAgICAgICAgdHAxLnRoX3N1bSA9IDA7Ci0gICAgICAgIE1ENV9VcGRhdGUoJmN0eCwgKGNoYXIgKikmdHAxLCBzaXplb2Yoc3RydWN0IHRjcGhkcikpOworICAgICAgICBNRDVfVXBkYXRlKCZjdHgsIChjb25zdCBjaGFyICopJnRwMSwgc2l6ZW9mKHN0cnVjdCB0Y3BoZHIpKTsKICAgICAgICAgdHAxLnRoX3N1bSA9IHNhdmVjc3VtOwogICAgICAgICAvKgogICAgICAgICAgKiBTdGVwIDM6IFVwZGF0ZSBNRDUgaGFzaCB3aXRoIFRDUCBzZWdtZW50IGRhdGEsIGlmIHByZXNlbnQuCmRpZmYgLS1naXQgYS9wcmludC10ZWxuZXQuYyBiL3ByaW50LXRlbG5ldC5jCmluZGV4IGZhNTliMWYuLmE2NjQwMzQgMTAwNjQ0Ci0tLSBhL3ByaW50LXRlbG5ldC5jCisrKyBiL3ByaW50LXRlbG5ldC5jCkBAIC00NSwxNiArNDUsMTkgQEAKICAqICAgICAgYXJlIHByZXNlcnZlZCBpbiBhbGwgY29waWVzLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFRlbG5ldCBvcHRpb24gcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorCitzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8dGVsbmV0XSI7CiAKICNkZWZpbmUgVEVMQ01EUwogI2RlZmluZSBURUxPUFRTCkBAIC04OCw3ICs5MSw3IEBACiAjZGVmaW5lIFNZTkNICTI0MgkJLyogZm9yIHRlbGZ1bmMgY2FsbHMgKi8KIAogI2lmZGVmIFRFTENNRFMKLWNvbnN0IGNoYXIgKnRlbGNtZHNbXSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyICp0ZWxjbWRzW10gPSB7CiAJIkVPRiIsICJTVVNQIiwgIkFCT1JUIiwgIkVPUiIsCiAJIlNFIiwgIk5PUCIsICJETUFSSyIsICJCUksiLCAiSVAiLCAiQU8iLCAiQVlUIiwgIkVDIiwKIAkiRUwiLCAiR0EiLCAiU0IiLCAiV0lMTCIsICJXT05UIiwgIkRPIiwgIkRPTlQiLCAiSUFDIiwgMCwKQEAgLTE0OSw3ICsxNTIsNyBAQAogCiAjZGVmaW5lCU5URUxPUFRTCSgxK1RFTE9QVF9ORVdfRU5WSVJPTikKICNpZmRlZiBURUxPUFRTCi1jb25zdCBjaGFyICp0ZWxvcHRzW05URUxPUFRTKzFdID0geworc3RhdGljIGNvbnN0IGNoYXIgKnRlbG9wdHNbTlRFTE9QVFMrMV0gPSB7CiAJIkJJTkFSWSIsICJFQ0hPIiwgIlJDUCIsICJTVVBQUkVTUyBHTyBBSEVBRCIsICJOQU1FIiwKIAkiU1RBVFVTIiwgIlRJTUlORyBNQVJLIiwgIlJDVEUiLCAiTkFPTCIsICJOQU9QIiwKIAkiTkFPQ1JEIiwgIk5BT0hUUyIsICJOQU9IVEQiLCAiTkFPRkZEIiwgIk5BT1ZUUyIsCkBAIC00MzQsNiArNDM3LDcgQEAKIAkJLyogSUFDIFNCIC4uLi4gSUFDIFNFICovCiAJCXAgPSBzcDsKIAkJd2hpbGUgKGxlbmd0aCA+ICh1X2ludCkocCArIDEgLSBzcCkpIHsKKwkJCU5EX1RDSEVDSzIoKnAsIDIpOwogCQkJaWYgKHBbMF0gPT0gSUFDICYmIHBbMV0gPT0gU0UpCiAJCQkJYnJlYWs7CiAJCQlwKys7CkBAIC00OTQsNyArNDk4LDcgQEAKIAlyZXR1cm4gc3AgLSBvc3A7CiAKIHRydW5jOgotCU5EX1BSSU5UKChuZG8sICJbfHRlbG5ldF0iKSk7CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogcGt0ZW5kOgogCXJldHVybiAtMTsKICN1bmRlZiBGRVRDSApAQCAtNTA5LDYgKzUxMyw3IEBACiAKIAlvc3AgPSBzcDsKIAorCU5EX1RDSEVDSygqc3ApOwogCXdoaWxlIChsZW5ndGggPiAwICYmICpzcCA9PSBJQUMpIHsKIAkJLyoKIAkJICogUGFyc2UgdGhlIFRlbG5ldCBjb21tYW5kIHdpdGhvdXQgcHJpbnRpbmcgaXQsCkBAIC01MzcsNiArNTQyLDcgQEAKIAogCQlzcCArPSBsOwogCQlsZW5ndGggLT0gbDsKKwkJTkRfVENIRUNLKCpzcCk7CiAJfQogCWlmICghZmlyc3QpIHsKIAkJaWYgKG5kby0+bmRvX1hmbGFnICYmIDIgPCBuZG8tPm5kb192ZmxhZykKQEAgLTU0NCw0ICs1NTAsNyBAQAogCQllbHNlCiAJCQlORF9QUklOVCgobmRvLCAiXSIpKTsKIAl9CisJcmV0dXJuOwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtdGZ0cC5jIGIvcHJpbnQtdGZ0cC5jCmluZGV4IDliODhlNzQuLjY5YmM2MDEgMTAwNjQ0Ci0tLSBhL3ByaW50LXRmdHAuYworKysgYi9wcmludC10ZnRwLmMKQEAgLTE3LDIwICsxNywxOSBAQAogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAogICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCi0gKgotICogRm9ybWF0IGFuZCBwcmludCB0cml2aWFsIGZpbGUgdHJhbnNmZXIgcHJvdG9jb2wgcGFja2V0cy4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBUcml2aWFsIEZpbGUgVHJhbnNmZXIgUHJvdG9jb2wgKFRGVFApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAvKgpAQCAtMTEwLDcgKzEwOSw4IEBACiAJcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHRmdHBoZHIgKnRwOwogCXJlZ2lzdGVyIGNvbnN0IGNoYXIgKmNwOwogCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcDsKLQlyZWdpc3RlciBpbnQgb3Bjb2RlLCBpOworCXJlZ2lzdGVyIGludCBvcGNvZGU7CisJdV9pbnQgdWk7CiAKIAl0cCA9IChjb25zdCBzdHJ1Y3QgdGZ0cGhkciAqKWJwOwogCkBAIC0xMTgsOSArMTE4LDEyIEBACiAJTkRfUFJJTlQoKG5kbywgIiAlZCIsIGxlbmd0aCkpOwogCiAJLyogUHJpbnQgdGZ0cCByZXF1ZXN0IHR5cGUgKi8KKwlpZiAobGVuZ3RoIDwgMikKKwkJZ290byB0cnVuYzsKIAlORF9UQ0hFQ0sodHAtPnRoX29wY29kZSk7CiAJb3Bjb2RlID0gRVhUUkFDVF8xNkJJVFMoJnRwLT50aF9vcGNvZGUpOwogCWNwID0gdG9rMnN0cihvcDJzdHIsICJ0ZnRwLSMlZCIsIG9wY29kZSk7CisJbGVuZ3RoIC09IDI7CiAJTkRfUFJJTlQoKG5kbywgIiAlcyIsIGNwKSk7CiAJLyogQmFpbCBpZiBib2d1cyBvcGNvZGUgKi8KIAlpZiAoKmNwID09ICd0JykKQEAgLTEzMCw0NiArMTMzLDgwIEBACiAKIAljYXNlIFJSUToKIAljYXNlIFdSUToKLQljYXNlIE9BQ0s6Ci0JCXAgPSAodV9jaGFyICopdHAtPnRoX3N0dWZmOwotCQlORF9QUklOVCgobmRvLCAiICIpKTsKLQkJLyogUHJpbnQgZmlsZW5hbWUgb3IgZmlyc3Qgb3B0aW9uICovCi0JCWlmIChvcGNvZGUgIT0gT0FDSykKLQkJCU5EX1BSSU5UKChuZG8sICJcIiIpKTsKLQkJaSA9IGZuX3ByaW50KG5kbywgcCwgbmRvLT5uZG9fc25hcGVuZCk7Ci0JCWlmIChvcGNvZGUgIT0gT0FDSykKLQkJCU5EX1BSSU5UKChuZG8sICJcIiIpKTsKLQotCQkvKiBQcmludCB0aGUgbW9kZSAoUlJRIGFuZCBXUlEgb25seSkgYW5kIGFueSBvcHRpb25zICovCi0JCXdoaWxlICgocCA9IChjb25zdCB1X2NoYXIgKilzdHJjaHIoKGNvbnN0IGNoYXIgKilwLCAnXDAnKSkgIT0gTlVMTCkgewotCQkJaWYgKGxlbmd0aCA8PSAodV9pbnQpKHAgLSAoY29uc3QgdV9jaGFyICopJnRwLT50aF9ibG9jaykpCi0JCQkJYnJlYWs7Ci0JCQlwKys7Ci0JCQlpZiAoKnAgIT0gJ1wwJykgewotCQkJCU5EX1BSSU5UKChuZG8sICIgIikpOwotCQkJCWZuX3ByaW50KG5kbywgcCwgbmRvLT5uZG9fc25hcGVuZCk7Ci0JCQl9Ci0JCX0KLQotCQlpZiAoaSkKKwkJcCA9IChjb25zdCB1X2NoYXIgKil0cC0+dGhfc3R1ZmY7CisJCWlmIChsZW5ndGggPT0gMCkKIAkJCWdvdG8gdHJ1bmM7CisJCU5EX1BSSU5UKChuZG8sICIgIikpOworCQkvKiBQcmludCBmaWxlbmFtZSAqLworCQlORF9QUklOVCgobmRvLCAiXCIiKSk7CisJCXVpID0gZm5fcHJpbnR6dG4obmRvLCBwLCBsZW5ndGgsIG5kby0+bmRvX3NuYXBlbmQpOworCQlORF9QUklOVCgobmRvLCAiXCIiKSk7CisJCWlmICh1aSA9PSAwKQorCQkJZ290byB0cnVuYzsKKwkJcCArPSB1aTsKKwkJbGVuZ3RoIC09IHVpOworCisJCS8qIFByaW50IHRoZSBtb2RlIC0gUlJRIGFuZCBXUlEgb25seSAqLworCQlpZiAobGVuZ3RoID09IDApCisJCQlnb3RvIHRydW5jOwkvKiBubyBtb2RlICovCisJCU5EX1BSSU5UKChuZG8sICIgIikpOworCQl1aSA9IGZuX3ByaW50enRuKG5kbywgcCwgbGVuZ3RoLCBuZG8tPm5kb19zbmFwZW5kKTsKKwkJaWYgKHVpID09IDApCisJCQlnb3RvIHRydW5jOworCQlwICs9IHVpOworCQlsZW5ndGggLT0gdWk7CisKKwkJLyogUHJpbnQgb3B0aW9ucywgaWYgYW55ICovCisJCXdoaWxlIChsZW5ndGggIT0gMCkgeworCQkJTkRfVENIRUNLKCpwKTsKKwkJCWlmICgqcCAhPSAnXDAnKQorCQkJCU5EX1BSSU5UKChuZG8sICIgIikpOworCQkJdWkgPSBmbl9wcmludHp0bihuZG8sIHAsIGxlbmd0aCwgbmRvLT5uZG9fc25hcGVuZCk7CisJCQlpZiAodWkgPT0gMCkKKwkJCQlnb3RvIHRydW5jOworCQkJcCArPSB1aTsKKwkJCWxlbmd0aCAtPSB1aTsKKwkJfQorCQlicmVhazsKKworCWNhc2UgT0FDSzoKKwkJcCA9IChjb25zdCB1X2NoYXIgKil0cC0+dGhfc3R1ZmY7CisJCS8qIFByaW50IG9wdGlvbnMgKi8KKwkJd2hpbGUgKGxlbmd0aCAhPSAwKSB7CisJCQlORF9UQ0hFQ0soKnApOworCQkJaWYgKCpwICE9ICdcMCcpCisJCQkJTkRfUFJJTlQoKG5kbywgIiAiKSk7CisJCQl1aSA9IGZuX3ByaW50enRuKG5kbywgcCwgbGVuZ3RoLCBuZG8tPm5kb19zbmFwZW5kKTsKKwkJCWlmICh1aSA9PSAwKQorCQkJCWdvdG8gdHJ1bmM7CisJCQlwICs9IHVpOworCQkJbGVuZ3RoIC09IHVpOworCQl9CiAJCWJyZWFrOwogCiAJY2FzZSBBQ0s6CiAJY2FzZSBEQVRBOgorCQlpZiAobGVuZ3RoIDwgMikKKwkJCWdvdG8gdHJ1bmM7CS8qIG5vIGJsb2NrIG51bWJlciAqLwogCQlORF9UQ0hFQ0sodHAtPnRoX2Jsb2NrKTsKIAkJTkRfUFJJTlQoKG5kbywgIiBibG9jayAlZCIsIEVYVFJBQ1RfMTZCSVRTKCZ0cC0+dGhfYmxvY2spKSk7CiAJCWJyZWFrOwogCiAJY2FzZSBURlRQX0VSUk9SOgogCQkvKiBQcmludCBlcnJvciBjb2RlIHN0cmluZyAqLworCQlpZiAobGVuZ3RoIDwgMikKKwkJCWdvdG8gdHJ1bmM7CS8qIG5vIGVycm9yIGNvZGUgKi8KIAkJTkRfVENIRUNLKHRwLT50aF9jb2RlKTsKLQkJTkRfUFJJTlQoKG5kbywgIiAlcyBcIiIsIHRvazJzdHIoZXJyMnN0ciwgInRmdHAtZXJyLSMlZCBcIiIsCisJCU5EX1BSSU5UKChuZG8sICIgJXMiLCB0b2syc3RyKGVycjJzdHIsICJ0ZnRwLWVyci0jJWQgXCIiLAogCQkJCSAgICAgICBFWFRSQUNUXzE2QklUUygmdHAtPnRoX2NvZGUpKSkpOworCQlsZW5ndGggLT0gMjsKIAkJLyogUHJpbnQgZXJyb3IgbWVzc2FnZSBzdHJpbmcgKi8KLQkJaSA9IGZuX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKXRwLT50aF9kYXRhLCBuZG8tPm5kb19zbmFwZW5kKTsKKwkJaWYgKGxlbmd0aCA9PSAwKQorCQkJZ290byB0cnVuYzsJLyogbm8gZXJyb3IgbWVzc2FnZSAqLworCQlORF9QUklOVCgobmRvLCAiIFwiIikpOworCQl1aSA9IGZuX3ByaW50enRuKG5kbywgKGNvbnN0IHVfY2hhciAqKXRwLT50aF9kYXRhLCBsZW5ndGgsIG5kby0+bmRvX3NuYXBlbmQpOwogCQlORF9QUklOVCgobmRvLCAiXCIiKSk7Ci0JCWlmIChpKQorCQlpZiAodWkgPT0gMCkKIAkJCWdvdG8gdHJ1bmM7CiAJCWJyZWFrOwogCmRpZmYgLS1naXQgYS9wcmludC10aW1lZC5jIGIvcHJpbnQtdGltZWQuYwppbmRleCA1ODMwYmM3Li42YWE3YTgyIDEwMDY0NAotLS0gYS9wcmludC10aW1lZC5jCisrKyBiL3ByaW50LXRpbWVkLmMKQEAgLTE5LDE4ICsxOSwyMSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBCU0QgdGltZSBkYWVtb24gcHJvdG9jb2wgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCiAvKgogICogVGltZSBTeW5jaHJvbml6YXRpb24gUHJvdG9jb2wKKyAqCisgKiBodHRwOi8vZG9jcy5mcmVlYnNkLm9yZy80NGRvYy9zbW0vMTIudGltZWQvcGFwZXIucGRmCiAgKi8KIAogc3RydWN0IHRzcF90aW1ldmFsIHsKQEAgLTk1LDcgKzk4LDcgQEAKIHRpbWVkX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAogICAgICAgICAgICAgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpicCkKIHsKLQlzdHJ1Y3QgdHNwICp0c3AgPSAoc3RydWN0IHRzcCAqKWJwOworCWNvbnN0IHN0cnVjdCB0c3AgKnRzcCA9IChjb25zdCBzdHJ1Y3QgdHNwICopYnA7CiAJbG9uZyBzZWMsIHVzZWM7CiAKIAlORF9UQ0hFQ0sodHNwLT50c3BfdHlwZSk7CkBAIC0xMjQsNyArMTI3LDcgQEAKIAkJdXNlYyA9IEVYVFJBQ1RfMzJCSVRTKCZ0c3AtPnRzcF90aW1lLnR2X3VzZWMpOwogCQkvKiBYWFggVGhlIGNvbXBhcmlzb24gYmVsb3cgaXMgYWx3YXlzIGZhbHNlPyAqLwogCQlpZiAodXNlYyA8IDApCi0JCQkvKiBjb3JydXB0LCBza2lwIHRoZSByZXN0IG9mIHRoZSBwYWNrZXQgKi8KKwkJCS8qIGludmFsaWQsIHNraXAgdGhlIHJlc3Qgb2YgdGhlIHBhY2tldCAqLwogCQkJcmV0dXJuOwogCQlORF9QUklOVCgobmRvLCAiIHRpbWUgIikpOwogCQlpZiAoc2VjIDwgMCAmJiB1c2VjICE9IDApIHsKQEAgLTEzOCw3ICsxNDEsNyBAQAogCX0KIAlORF9UQ0hFQ0sodHNwLT50c3BfbmFtZSk7CiAJTkRfUFJJTlQoKG5kbywgIiBuYW1lICIpKTsKLQlpZiAoZm5fcHJpbnQobmRvLCAodV9jaGFyICopdHNwLT50c3BfbmFtZSwgKHVfY2hhciAqKXRzcC0+dHNwX25hbWUgKyBzaXplb2YodHNwLT50c3BfbmFtZSkpKQorCWlmIChmbl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKil0c3AtPnRzcF9uYW1lLCAoY29uc3QgdV9jaGFyICopdHNwLT50c3BfbmFtZSArIHNpemVvZih0c3AtPnRzcF9uYW1lKSkpCiAJCWdvdG8gdHJ1bmM7CiAJcmV0dXJuOwogCmRpZmYgLS1naXQgYS9wcmludC10aXBjLmMgYi9wcmludC10aXBjLmMKaW5kZXggYjg4M2ZiYS4uNGQ4ODQ4ZiAxMDA2NDQKLS0tIGEvcHJpbnQtdGlwYy5jCisrKyBiL3ByaW50LXRpcGMuYwpAQCAtMTksMjcgKzE5LDI3IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wgcHJpbnRlciAqLworCisvKgorICogc3BlY2lmaWNhdGlvbjoKKyAqCWh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC9kb2MvZHJhZnQtc3BlYy10aXBjLTA3Lmh0bWwKKyAqCWh0dHA6Ly90aXBjLnNvdXJjZWZvcmdlLm5ldC9kb2MvdGlwY19tZXNzYWdlX2Zvcm1hdHMuaHRtbAorICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJldGhlci5oIgogI2luY2x1ZGUgImV0aGVydHlwZS5oIgotI2luY2x1ZGUgImV4dHJhY3QuaCIJCQkvKiBtdXN0IGNvbWUgYWZ0ZXIgaW50ZXJmYWNlLmggKi8KKyNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICJbfFRJUENdIjsKIAotLyoKLSAqIFRyYW5zcGFyZW50IEludGVyLVByb2Nlc3MgQ29tbXVuaWNhdGlvbiAoVElQQykgcHJvdG9jb2wuCi0gKgotICoJaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0L2RvYy9kcmFmdC1zcGVjLXRpcGMtMDcuaHRtbAotICoJaHR0cDovL3RpcGMuc291cmNlZm9yZ2UubmV0L2RvYy90aXBjX21lc3NhZ2VfZm9ybWF0cy5odG1sCi0gKi8KLQogI2RlZmluZSBUSVBDX1VTRVJfTE9XX0lNUE9SVEFOQ0UJMAogI2RlZmluZSBUSVBDX1VTRVJfTUVESVVNX0lNUE9SVEFOQ0UJMQogI2RlZmluZSBUSVBDX1VTRVJfSElHSF9JTVBPUlRBTkNFCTIKQEAgLTM0Miw3ICszNDIsNyBAQAogCXVpbnQzMl90IHcwOwogCXVfaW50IHVzZXI7CiAKLQlhcCA9IChzdHJ1Y3QgdGlwY19wa3RoZHIgKilicDsKKwlhcCA9IChjb25zdCBzdHJ1Y3QgdGlwY19wa3RoZHIgKilicDsKIAlORF9UQ0hFQ0soYXAtPncwKTsKIAl3MCA9IEVYVFJBQ1RfMzJCSVRTKCZhcC0+dzApOwogCXVzZXIgPSBUSVBDX1VTRVIodzApOwpAQCAtMzU1LDExICszNTUsMTEgQEAKIAkJY2FzZSBUSVBDX1VTRVJfQ1JJVElDQUxfSU1QT1JUQU5DRToKIAkJY2FzZSBUSVBDX1VTRVJfTkFNRV9ESVNUUklCVVRPUjoKIAkJY2FzZSBUSVBDX1VTRVJfQ09OTl9NQU5BR0VSOgotCQkJcHJpbnRfcGF5bG9hZChuZG8sIChzdHJ1Y3QgcGF5bG9hZF90aXBjX3BrdGhkciAqKWJwKTsKKwkJCXByaW50X3BheWxvYWQobmRvLCAoY29uc3Qgc3RydWN0IHBheWxvYWRfdGlwY19wa3RoZHIgKilicCk7CiAJCQlicmVhazsKIAogCQljYXNlIFRJUENfVVNFUl9MSU5LX0NPTkZJRzoKLQkJCXByaW50X2xpbmtfY29uZihuZG8sIChzdHJ1Y3QgbGlua19jb25mX3RpcGNfcGt0aGRyICopYnApOworCQkJcHJpbnRfbGlua19jb25mKG5kbywgKGNvbnN0IHN0cnVjdCBsaW5rX2NvbmZfdGlwY19wa3RoZHIgKilicCk7CiAJCQlicmVhazsKIAogCQljYXNlIFRJUENfVVNFUl9CQ0FTVF9QUk9UT0NPTDoKQEAgLTM2Nyw3ICszNjcsNyBAQAogCQljYXNlIFRJUENfVVNFUl9MSU5LX1BST1RPQ09MOgogCQljYXNlIFRJUENfVVNFUl9DSEFOR0VPVkVSX1BST1RPQ09MOgogCQljYXNlIFRJUENfVVNFUl9NU0dfRlJBR01FTlRFUjoKLQkJCXByaW50X2ludGVybmFsKG5kbywgKHN0cnVjdCBpbnRlcm5hbF90aXBjX3BrdGhkciAqKWJwKTsKKwkJCXByaW50X2ludGVybmFsKG5kbywgKGNvbnN0IHN0cnVjdCBpbnRlcm5hbF90aXBjX3BrdGhkciAqKWJwKTsKIAkJCWJyZWFrOwogCiAJfQpkaWZmIC0tZ2l0IGEvcHJpbnQtdG9rZW4uYyBiL3ByaW50LXRva2VuLmMKaW5kZXggYjg4YmNmNy4uZmFmZmQ0YiAxMDA2NDQKLS0tIGEvcHJpbnQtdG9rZW4uYworKysgYi9wcmludC10b2tlbi5jCkBAIC0yNCwxNiArMjQsMTcgQEAKICAqCUd1eSBIYXJyaXMgPGd1eUBhbHVtLm1pdC5lZHU+CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogVG9rZW4gUmluZyBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAogI2luY2x1ZGUgPHN0cmluZy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXRoZXIuaCIKQEAgLTExMywxNCArMTE0LDEzIEBACiAJc3JjbmFtZSA9IGV0aGVyYWRkcl9zdHJpbmcobmRvLCBmc3JjKTsKIAlkc3RuYW1lID0gZXRoZXJhZGRyX3N0cmluZyhuZG8sIGZkc3QpOwogCi0JaWYgKG5kby0+bmRvX3ZmbGFnKQotCQlORF9QUklOVCgobmRvLCAiJTAyeCAlMDJ4ICVzICVzICVkOiAiLAorCWlmICghbmRvLT5uZG9fcWZsYWcpCisJCU5EX1BSSU5UKChuZG8sICIlMDJ4ICUwMnggIiwKIAkJICAgICAgIHRycC0+dG9rZW5fYWMsCi0JCSAgICAgICB0cnAtPnRva2VuX2ZjLAotCQkgICAgICAgc3JjbmFtZSwgZHN0bmFtZSwKLQkJICAgICAgIGxlbmd0aCkpOwotCWVsc2UKLQkJTkRfUFJJTlQoKG5kbywgIiVzICVzICVkOiAiLCBzcmNuYW1lLCBkc3RuYW1lLCBsZW5ndGgpKTsKKwkJICAgICAgIHRycC0+dG9rZW5fZmMpKTsKKwlORF9QUklOVCgobmRvLCAiJXMgPiAlcywgbGVuZ3RoICV1OiAiLAorCSAgICAgICBzcmNuYW1lLCBkc3RuYW1lLAorCSAgICAgICBsZW5ndGgpKTsKIH0KIAogc3RhdGljIGNvbnN0IGNoYXIgKmJyb2FkY2FzdF9pbmRpY2F0b3JbXSA9IHsKQEAgLTE0OSw4ICsxNDksOSBAQAogdG9rZW5fcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqcCwgdV9pbnQgbGVuZ3RoLCB1X2ludCBjYXBsZW4pCiB7CiAJY29uc3Qgc3RydWN0IHRva2VuX2hlYWRlciAqdHJwOwotCXVfc2hvcnQgZXh0cmFjdGVkX2V0aGVydHlwZTsKKwlpbnQgbGxjX2hkcmxlbjsKIAlzdHJ1Y3QgZXRoZXJfaGVhZGVyIGVoZHI7CisJc3RydWN0IGxsYWRkcl9pbmZvIHNyYywgZHN0OwogCXVfaW50IHJvdXRlX2xlbiA9IDAsIGhkcl9sZW4gPSBUT0tFTl9IRFJMRU47CiAJaW50IHNlZzsKIApAQCAtMjAzLDYgKzIwNCwxMSBAQAogCQkJdG9rZW5faGRyX3ByaW50KG5kbywgdHJwLCBsZW5ndGgsIEVTUkMoJmVoZHIpLCBFRFNUKCZlaGRyKSk7CiAJfQogCisJc3JjLmFkZHIgPSBFU1JDKCZlaGRyKTsKKwlzcmMuYWRkcl9zdHJpbmcgPSBldGhlcmFkZHJfc3RyaW5nOworCWRzdC5hZGRyID0gRURTVCgmZWhkcik7CisJZHN0LmFkZHJfc3RyaW5nID0gZXRoZXJhZGRyX3N0cmluZzsKKwogCS8qIFNraXAgb3ZlciB0b2tlbiByaW5nIE1BQyBoZWFkZXIgYW5kIHJvdXRpbmcgaW5mb3JtYXRpb24gKi8KIAlsZW5ndGggLT0gaGRyX2xlbjsKIAlwICs9IGhkcl9sZW47CkBAIC0yMTEsMjAgKzIxNywxNCBAQAogCS8qIEZyYW1lIENvbnRyb2wgZmllbGQgZGV0ZXJtaW5lcyBpbnRlcnByZXRhdGlvbiBvZiBwYWNrZXQgKi8KIAlpZiAoRlJBTUVfVFlQRSh0cnApID09IFRPS0VOX0ZDX0xMQykgewogCQkvKiBUcnkgdG8gcHJpbnQgdGhlIExMQy1sYXllciBoZWFkZXIgJiBoaWdoZXIgbGF5ZXJzICovCi0JCWlmIChsbGNfcHJpbnQobmRvLCBwLCBsZW5ndGgsIGNhcGxlbiwgRVNSQygmZWhkciksIEVEU1QoJmVoZHIpLAotCQkgICAgJmV4dHJhY3RlZF9ldGhlcnR5cGUpID09IDApIHsKLQkJCS8qIGV0aGVyX3R5cGUgbm90IGtub3duLCBwcmludCByYXcgcGFja2V0ICovCi0JCQlpZiAoIW5kby0+bmRvX2VmbGFnKQotCQkJCXRva2VuX2hkcl9wcmludChuZG8sIHRycCwKLQkJCQkgICAgbGVuZ3RoICsgVE9LRU5fSERSTEVOICsgcm91dGVfbGVuLAotCQkJCSAgICBFU1JDKCZlaGRyKSwgRURTVCgmZWhkcikpOwotCQkJaWYgKGV4dHJhY3RlZF9ldGhlcnR5cGUpIHsKLQkJCQlORF9QUklOVCgobmRvLCAiKExMQyAlcykgIiwKLQkJCWV0aGVycHJvdG9fc3RyaW5nKGh0b25zKGV4dHJhY3RlZF9ldGhlcnR5cGUpKSkpOwotCQkJfQorCQlsbGNfaGRybGVuID0gbGxjX3ByaW50KG5kbywgcCwgbGVuZ3RoLCBjYXBsZW4sICZzcmMsICZkc3QpOworCQlpZiAobGxjX2hkcmxlbiA8IDApIHsKKwkJCS8qIHBhY2tldCB0eXBlIG5vdCBrbm93biwgcHJpbnQgcmF3IHBhY2tldCAqLwogCQkJaWYgKCFuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50KQogCQkJCU5EX0RFRkFVTFRQUklOVChwLCBjYXBsZW4pOworCQkJbGxjX2hkcmxlbiA9IC1sbGNfaGRybGVuOwogCQl9CisJCWhkcl9sZW4gKz0gbGxjX2hkcmxlbjsKIAl9IGVsc2UgewogCQkvKiBTb21lIGtpbmRzIG9mIFRSIHBhY2tldCB3ZSBjYW5ub3QgaGFuZGxlIGludGVsbGlnZW50bHkgKi8KIAkJLyogWFhYIC0gZGlzc2VjdCBNQUMgcGFja2V0cyBpZiBmcmFtZSB0eXBlIGlzIDAgKi8KZGlmZiAtLWdpdCBhL3ByaW50LXVkbGQuYyBiL3ByaW50LXVkbGQuYwppbmRleCAxNWUyYmY2Li4wMjkyMWQwIDEwMDY0NAotLS0gYS9wcmludC11ZGxkLmMKKysrIGIvcHJpbnQtdWRsZC5jCkBAIC0xMiwyMiArMTIsMjQgQEAKICAqIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTCiAgKiBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKgotICogVU5JRElSRUNUSU9OQUwgTElOSyBERVRFQ1RJT04gKFVETEQpIGFzIHBlcgotICogaHR0cDovL3d3dy5pZXRmLm9yZy9pbnRlcm5ldC1kcmFmdHMvZHJhZnQtZm9zY2hpYW5vLXVkbGQtMDIudHh0Ci0gKgogICogT3JpZ2luYWwgY29kZSBieSBDYXJsZXMgS2lzaGltb3RvIDxjYXJsZXMua2lzaGltb3RvQGdtYWlsLmNvbT4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBDaXNjbyBVbmlEaXJlY3Rpb25hbCBMaW5rIERldGVjdGlvbiAoVURMRCkgcHJvdG9jb2wgcHJpbnRlciAqLworCisvKiBzcGVjaWZpY2F0aW9uOiBSRkMgNTE3MSAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCitzdGF0aWMgY29uc3QgY2hhciB0c3RyW10gPSAiIFt8dWRsZF0iOworCiAjZGVmaW5lIFVETERfSEVBREVSX0xFTgkJCTQKICNkZWZpbmUgVURMRF9ERVZJQ0VfSURfVExWCQkweDAwMDEKICNkZWZpbmUgVURMRF9QT1JUX0lEX1RMVgkJMHgwMDAyCkBAIC02Myw5ICs2NSwxMCBAQAogfTsKIAogLyoKKyAqIFVETEQncyBQcm90b2NvbCBEYXRhIFVuaXQgZm9ybWF0OgogICoKLSAqIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKLSAqIDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMQorICogIDAgICAgICAgICAgICAgICAgICAgMSAgICAgICAgICAgICAgICAgICAyICAgICAgICAgICAgICAgICAgIDMKKyAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKICAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAgKiB8IFZlciB8IE9wY29kZSAgfCAgICAgRmxhZ3MgICAgIHwgICAgICAgICAgIENoZWNrc3VtICAgICAgICAgICAgfAogICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKQEAgLTczLDYgKzc2LDE4IEBACiAgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAogICogKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKICAqCisgKiBUTFYgZm9ybWF0OgorICoKKyAqICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogfCAgICAgICAgICAgICBUWVBFICAgICAgICAgICAgICB8ICAgICAgICAgICAgTEVOR1RIICAgICAgICAgICAgIHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiB8ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBWQUxVRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfAorICogfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4uLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwKKyAqICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKgorICogTEVOR1RIOiBMZW5ndGggaW4gYnl0ZXMgb2YgdGhlIFR5cGUsIExlbmd0aCwgYW5kIFZhbHVlIGZpZWxkcy4KICAqLwogCiAjZGVmaW5lCVVETERfRVhUUkFDVF9WRVJTSU9OKHgpICgoKHgpJjB4ZTApPj41KQpAQCAtMTE1LDM1ICsxMzAsNDggQEAKICAgICB3aGlsZSAodHB0ciA8IChwcHRyK2xlbmd0aCkpIHsKIAogICAgICAgICBORF9UQ0hFQ0syKCp0cHRyLCA0KTsKLQogCXR5cGUgPSBFWFRSQUNUXzE2QklUUyh0cHRyKTsKICAgICAgICAgbGVuICA9IEVYVFJBQ1RfMTZCSVRTKHRwdHIrMik7Ci0gICAgICAgIGxlbiAtPSA0OwotICAgICAgICB0cHRyICs9IDQ7Ci0KLSAgICAgICAgLyogaW5maW5pdGUgbG9vcCBjaGVjayAqLwotICAgICAgICBpZiAodHlwZSA9PSAwIHx8IGxlbiA9PSAwKSB7Ci0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIH0KIAogICAgICAgICBORF9QUklOVCgobmRvLCAiXG5cdCVzICgweCUwNHgpIFRMViwgbGVuZ3RoICV1IiwKICAgICAgICAgICAgICAgIHRvazJzdHIodWRsZF90bHZfdmFsdWVzLCAiVW5rbm93biIsIHR5cGUpLAogICAgICAgICAgICAgICAgdHlwZSwgbGVuKSk7CiAKKyAgICAgICAgaWYgKHR5cGUgPT0gMCkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKworICAgICAgICAvKiBpbmZpbml0ZSBsb29wIGNoZWNrICovCisgICAgICAgIGlmIChsZW4gPD0gNCkKKyAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKKworICAgICAgICBsZW4gLT0gNDsKKyAgICAgICAgdHB0ciArPSA0OworCisgICAgICAgIE5EX1RDSEVDSzIoKnRwdHIsIGxlbik7CisKICAgICAgICAgc3dpdGNoICh0eXBlKSB7CiAgICAgICAgIGNhc2UgVURMRF9ERVZJQ0VfSURfVExWOgogICAgICAgICBjYXNlIFVETERfUE9SVF9JRF9UTFY6Ci0gICAgICAgIGNhc2UgVURMRF9FQ0hPX1RMVjoKICAgICAgICAgY2FzZSBVRExEX0RFVklDRV9OQU1FX1RMVjoKLSAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICVzIiwgdHB0cikpOworICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgIikpOworICAgICAgICAgICAgZm5fcHJpbnR6cChuZG8sIHRwdHIsIGxlbiwgTlVMTCk7CisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBjYXNlIFVETERfRUNIT19UTFY6CisgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiLCAiKSk7CisgICAgICAgICAgICAodm9pZClmbl9wcmludG4obmRvLCB0cHRyLCBsZW4sIE5VTEwpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBVRExEX01FU1NBR0VfSU5URVJWQUxfVExWOgogICAgICAgICBjYXNlIFVETERfVElNRU9VVF9JTlRFUlZBTF9UTFY6CisgICAgICAgICAgICBpZiAobGVuICE9IDEpCisgICAgICAgICAgICAgICAgZ290byBpbnZhbGlkOwogICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiwgJXVzIiwgKCp0cHRyKSkpOwogICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBVRExEX1NFUV9OVU1CRVJfVExWOgorICAgICAgICAgICAgaWYgKGxlbiAhPSA0KQorICAgICAgICAgICAgICAgIGdvdG8gaW52YWxpZDsKICAgICAgICAgICAgIE5EX1BSSU5UKChuZG8sICIsICV1IiwgRVhUUkFDVF8zMkJJVFModHB0cikpKTsKICAgICAgICAgICAgIGJyZWFrOwogCkBAIC0xNTUsOCArMTgzLDExIEBACiAKICAgICByZXR1cm47CiAKLSB0cnVuYzoKLSAgICBORF9QUklOVCgobmRvLCAiW3x1ZGxkXSIpKTsKK2ludmFsaWQ6CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgaXN0cikpOworICAgIHJldHVybjsKK3RydW5jOgorICAgIE5EX1BSSU5UKChuZG8sICIlcyIsIHRzdHIpKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3ByaW50LXVkcC5jIGIvcHJpbnQtdWRwLmMKaW5kZXggYzNlZGY2ZS4uNWE3NGZmMiAxMDA2NDQKLS0tIGEvcHJpbnQtdWRwLmMKKysrIGIvcHJpbnQtdWRwLmMKQEAgLTE5LDE0ICsxOSwxNSBAQAogICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBVRFAgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhcHBsZXRhbGsuaCIKQEAgLTM0LDE2ICszNSwxOCBAQAogI2luY2x1ZGUgInVkcC5oIgogCiAjaW5jbHVkZSAiaXAuaCIKLSNpZmRlZiBJTkVUNgogI2luY2x1ZGUgImlwNi5oIgotI2VuZGlmCiAjaW5jbHVkZSAiaXBwcm90by5oIgogI2luY2x1ZGUgInJwY19hdXRoLmgiCiAjaW5jbHVkZSAicnBjX21zZy5oIgogCi0jaW5jbHVkZSAibmFtZXNlci5oIgogI2luY2x1ZGUgIm5mcy5oIgogCitzdGF0aWMgY29uc3QgY2hhciB2YXRfdHN0cltdID0gIiBbfHZhdF0iOworc3RhdGljIGNvbnN0IGNoYXIgcnRwX3RzdHJbXSA9ICIgW3xydHBdIjsKK3N0YXRpYyBjb25zdCBjaGFyIHJ0Y3BfdHN0cltdID0gIiBbfHJ0Y3BdIjsKK3N0YXRpYyBjb25zdCBjaGFyIHVkcF90c3RyW10gPSAiIFt8dWRwXSI7CisKIHN0cnVjdCBydGNwaGRyIHsKIAl1aW50MTZfdCByaF9mbGFnczsJLyogVDoyIFA6MSBDTlQ6NSBQVDo4ICovCiAJdWludDE2X3QgcmhfbGVuOwkvKiBsZW5ndGggb2YgbWVzc2FnZSAoaW4gd29yZHMpICovCkBAIC05NywxNiArMTAwLDI1IEBACiB2YXRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHZvaWQgKmhkciwgcmVnaXN0ZXIgY29uc3Qgc3RydWN0IHVkcGhkciAqdXApCiB7CiAJLyogdmF0L3Z0IGF1ZGlvICovCi0JdV9pbnQgdHMgPSAqKHVpbnQxNl90ICopaGRyOworCXVfaW50IHRzOworCisJTkRfVENIRUNLXzE2QklUUygoY29uc3QgdV9pbnQgKiloZHIpOworCXRzID0gRVhUUkFDVF8xNkJJVFMoaGRyKTsKIAlpZiAoKHRzICYgMHhmMDYwKSAhPSAwKSB7CiAJCS8qIHByb2JhYmx5IHZ0ICovCisJCU5EX1RDSEVDS18xNkJJVFMoJnVwLT51aF91bGVuKTsKIAkJTkRfUFJJTlQoKG5kbywgInVkcC92dCAldSAlZCAvICVkIiwKIAkJCSAgICAgKHVpbnQzMl90KShFWFRSQUNUXzE2QklUUygmdXAtPnVoX3VsZW4pIC0gc2l6ZW9mKCp1cCkpLAogCQkJICAgICB0cyAmIDB4M2ZmLCB0cyA+PiAxMCkpOwogCX0gZWxzZSB7CiAJCS8qIHByb2JhYmx5IHZhdCAqLwotCQl1aW50MzJfdCBpMCA9IEVYVFJBQ1RfMzJCSVRTKCYoKHVfaW50ICopaGRyKVswXSk7Ci0JCXVpbnQzMl90IGkxID0gRVhUUkFDVF8zMkJJVFMoJigodV9pbnQgKiloZHIpWzFdKTsKKwkJdWludDMyX3QgaTAsIGkxOworCisJCU5EX1RDSEVDS18zMkJJVFMoJigoY29uc3QgdV9pbnQgKiloZHIpWzBdKTsKKwkJaTAgPSBFWFRSQUNUXzMyQklUUygmKChjb25zdCB1X2ludCAqKWhkcilbMF0pOworCQlORF9UQ0hFQ0tfMzJCSVRTKCYoKGNvbnN0IHVfaW50ICopaGRyKVsxXSk7CisJCWkxID0gRVhUUkFDVF8zMkJJVFMoJigoY29uc3QgdV9pbnQgKiloZHIpWzFdKTsKKwkJTkRfVENIRUNLXzE2QklUUygmdXAtPnVoX3VsZW4pOwogCQlORF9QUklOVCgobmRvLCAidWRwL3ZhdCAldSBjJWQgJXUlcyIsCiAJCQkodWludDMyX3QpKEVYVFJBQ1RfMTZCSVRTKCZ1cC0+dWhfdWxlbikgLSBzaXplb2YoKnVwKSAtIDgpLAogCQkJaTAgJiAweGZmZmYsCkBAIC0xMTcsNiArMTI5LDkgQEAKIAkJaWYgKGkwICYgMHgzZjAwMDAwMCkKIAkJCU5EX1BSSU5UKChuZG8sICIgcyVkIiwgKGkwID4+IDI0KSAmIDB4M2YpKTsKIAl9CisKK3RydW5jOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIHZhdF90c3RyKSk7CiB9CiAKIHN0YXRpYyB2b2lkCkBAIC0xMjQsMjYgKzEzOSwzMCBAQAogICAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB1ZHBoZHIgKnVwKQogewogCS8qIHJ0cCB2MSBvciB2MiAqLwotCXVfaW50ICppcCA9ICh1X2ludCAqKWhkcjsKLQl1X2ludCBoYXNvcHQsIGhhc2V4dCwgY29udHlwZSwgaGFzbWFya2VyOwotCXVpbnQzMl90IGkwID0gRVhUUkFDVF8zMkJJVFMoJigodV9pbnQgKiloZHIpWzBdKTsKLQl1aW50MzJfdCBpMSA9IEVYVFJBQ1RfMzJCSVRTKCYoKHVfaW50ICopaGRyKVsxXSk7Ci0JdV9pbnQgZGxlbiA9IEVYVFJBQ1RfMTZCSVRTKCZ1cC0+dWhfdWxlbikgLSBzaXplb2YoKnVwKSAtIDg7CisJY29uc3QgdV9pbnQgKmlwID0gKGNvbnN0IHVfaW50ICopaGRyOworCXVfaW50IGhhc29wdCwgaGFzZXh0LCBjb250eXBlLCBoYXNtYXJrZXIsIGRsZW47CisJdWludDMyX3QgaTAsIGkxOwogCWNvbnN0IGNoYXIgKiBwdHlwZTsKIAorCU5EX1RDSEVDS18zMkJJVFMoJigoY29uc3QgdV9pbnQgKiloZHIpWzBdKTsKKwlpMCA9IEVYVFJBQ1RfMzJCSVRTKCYoKGNvbnN0IHVfaW50ICopaGRyKVswXSk7CisJTkRfVENIRUNLXzMyQklUUygmKChjb25zdCB1X2ludCAqKWhkcilbMV0pOworCWkxID0gRVhUUkFDVF8zMkJJVFMoJigoY29uc3QgdV9pbnQgKiloZHIpWzFdKTsKKwlORF9UQ0hFQ0tfMTZCSVRTKCZ1cC0+dWhfdWxlbik7CisJZGxlbiA9IEVYVFJBQ1RfMTZCSVRTKCZ1cC0+dWhfdWxlbikgLSBzaXplb2YoKnVwKSAtIDg7CiAJaXAgKz0gMjsKIAlsZW4gPj49IDI7CiAJbGVuIC09IDI7CiAJaGFzb3B0ID0gMDsKIAloYXNleHQgPSAwOwogCWlmICgoaTAgPj4gMzApID09IDEpIHsKLQkJLyogcnRwIHYxICovCisJCS8qIHJ0cCB2MSAtIGRyYWZ0LWlldGYtYXZ0LXJ0cC0wNCAqLwogCQloYXNvcHQgPSBpMCAmIDB4ODAwMDAwOwogCQljb250eXBlID0gKGkwID4+IDE2KSAmIDB4M2Y7CiAJCWhhc21hcmtlciA9IGkwICYgMHg0MDAwMDA7CiAJCXB0eXBlID0gInJ0cHYxIjsKIAl9IGVsc2UgewotCQkvKiBydHAgdjIgKi8KKwkJLyogcnRwIHYyIC0gUkZDIDM1NTAgKi8KIAkJaGFzZXh0ID0gaTAgJiAweDEwMDAwMDAwOwogCQljb250eXBlID0gKGkwID4+IDE2KSAmIDB4N2Y7CiAJCWhhc21hcmtlciA9IGkwICYgMHg4MDAwMDA7CkBAIC0xNjEsMTEgKzE4MCwxMyBAQAogCQlpMCAmIDB4ZmZmZiwKIAkJaTEpKTsKIAlpZiAobmRvLT5uZG9fdmZsYWcpIHsKLQkJTkRfUFJJTlQoKG5kbywgIiAldSIsIEVYVFJBQ1RfMzJCSVRTKCYoKHVfaW50ICopaGRyKVsyXSkpKTsKKwkJTkRfVENIRUNLXzMyQklUUygmKChjb25zdCB1X2ludCAqKWhkcilbMl0pOworCQlORF9QUklOVCgobmRvLCAiICV1IiwgRVhUUkFDVF8zMkJJVFMoJigoY29uc3QgdV9pbnQgKiloZHIpWzJdKSkpOwogCQlpZiAoaGFzb3B0KSB7CiAJCQl1X2ludCBpMiwgb3B0bGVuOwogCQkJZG8gewotCQkJCWkyID0gaXBbMF07CisJCQkJTkRfVENIRUNLXzMyQklUUyhpcCk7CisJCQkJaTIgPSBFWFRSQUNUXzMyQklUUyhpcCk7CiAJCQkJb3B0bGVuID0gKGkyID4+IDE2KSAmIDB4ZmY7CiAJCQkJaWYgKG9wdGxlbiA9PSAwIHx8IG9wdGxlbiA+IGxlbikgewogCQkJCQlORF9QUklOVCgobmRvLCAiICFvcHQiKSk7CkBAIC0xNzcsNyArMTk4LDggQEAKIAkJfQogCQlpZiAoaGFzZXh0KSB7CiAJCQl1X2ludCBpMiwgZXh0bGVuOwotCQkJaTIgPSBpcFswXTsKKwkJCU5EX1RDSEVDS18zMkJJVFMoaXApOworCQkJaTIgPSBFWFRSQUNUXzMyQklUUyhpcCk7CiAJCQlleHRsZW4gPSAoaTIgJiAweGZmZmYpICsgMTsKIAkJCWlmIChleHRsZW4gPiBsZW4pIHsKIAkJCQlORF9QUklOVCgobmRvLCAiICFleHQiKSk7CkBAIC0xODUsNTMgKzIwNyw1NSBAQAogCQkJfQogCQkJaXAgKz0gZXh0bGVuOwogCQl9CisJCU5EX1RDSEVDS18zMkJJVFMoaXApOwogCQlpZiAoY29udHlwZSA9PSAweDFmKSAvKlhYWCBILjI2MSAqLwotCQkJTkRfUFJJTlQoKG5kbywgIiAweCUwNHgiLCBpcFswXSA+PiAxNikpOworCQkJTkRfUFJJTlQoKG5kbywgIiAweCUwNHgiLCBFWFRSQUNUXzMyQklUUyhpcCkgPj4gMTYpKTsKIAl9CisKK3RydW5jOgorCU5EX1BSSU5UKChuZG8sICIlcyIsIHJ0cF90c3RyKSk7CiB9CiAKIHN0YXRpYyBjb25zdCB1X2NoYXIgKgogcnRjcF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpoZHIsIGNvbnN0IHVfY2hhciAqZXApCiB7CiAJLyogcnRwIHYyIGNvbnRyb2wgKHJ0Y3ApICovCi0Jc3RydWN0IHJ0Y3BfcnIgKnJyID0gMDsKLQlzdHJ1Y3QgcnRjcF9zciAqc3I7Ci0Jc3RydWN0IHJ0Y3BoZHIgKnJoID0gKHN0cnVjdCBydGNwaGRyICopaGRyOworCWNvbnN0IHN0cnVjdCBydGNwX3JyICpyciA9IDA7CisJY29uc3Qgc3RydWN0IHJ0Y3Bfc3IgKnNyOworCWNvbnN0IHN0cnVjdCBydGNwaGRyICpyaCA9IChjb25zdCBzdHJ1Y3QgcnRjcGhkciAqKWhkcjsKIAl1X2ludCBsZW47CiAJdWludDE2X3QgZmxhZ3M7CiAJaW50IGNudDsKIAlkb3VibGUgdHMsIGR0czsKLQlpZiAoKHVfY2hhciAqKShyaCArIDEpID4gZXApIHsKLQkJTkRfUFJJTlQoKG5kbywgIiBbfHJ0Y3BdIikpOwotCQlyZXR1cm4gKGVwKTsKLQl9CisJaWYgKChjb25zdCB1X2NoYXIgKikocmggKyAxKSA+IGVwKQorCQlnb3RvIHRydW5jOworCU5EX1RDSEVDSygqcmgpOwogCWxlbiA9IChFWFRSQUNUXzE2QklUUygmcmgtPnJoX2xlbikgKyAxKSAqIDQ7CiAJZmxhZ3MgPSBFWFRSQUNUXzE2QklUUygmcmgtPnJoX2ZsYWdzKTsKIAljbnQgPSAoZmxhZ3MgPj4gOCkgJiAweDFmOwogCXN3aXRjaCAoZmxhZ3MgJiAweGZmKSB7CiAJY2FzZSBSVENQX1BUX1NSOgotCQlzciA9IChzdHJ1Y3QgcnRjcF9zciAqKShyaCArIDEpOworCQlzciA9IChjb25zdCBzdHJ1Y3QgcnRjcF9zciAqKShyaCArIDEpOwogCQlORF9QUklOVCgobmRvLCAiIHNyIikpOwogCQlpZiAobGVuICE9IGNudCAqIHNpemVvZigqcnIpICsgc2l6ZW9mKCpzcikgKyBzaXplb2YoKnJoKSkKIAkJCU5EX1BSSU5UKChuZG8sICIgWyVkXSIsIGxlbikpOwogCQlpZiAobmRvLT5uZG9fdmZsYWcpCiAJCQlORF9QUklOVCgobmRvLCAiICV1IiwgRVhUUkFDVF8zMkJJVFMoJnJoLT5yaF9zc3JjKSkpOwotCQlpZiAoKHVfY2hhciAqKShzciArIDEpID4gZXApIHsKLQkJCU5EX1BSSU5UKChuZG8sICIgW3xydGNwXSIpKTsKLQkJCXJldHVybiAoZXApOwotCQl9CisJCWlmICgoY29uc3QgdV9jaGFyICopKHNyICsgMSkgPiBlcCkKKwkJCWdvdG8gdHJ1bmM7CisJCU5EX1RDSEVDSygqc3IpOwogCQl0cyA9IChkb3VibGUpKEVYVFJBQ1RfMzJCSVRTKCZzci0+c3JfbnRwLnVwcGVyKSkgKwogCQkgICAgKChkb3VibGUpKEVYVFJBQ1RfMzJCSVRTKCZzci0+c3JfbnRwLmxvd2VyKSkgLwogCQkgICAgNDI5NDk2NzI5Ni4wKTsKIAkJTkRfUFJJTlQoKG5kbywgIiBAJS4yZiAldSAldXAgJXViIiwgdHMsIEVYVFJBQ1RfMzJCSVRTKCZzci0+c3JfdHMpLAogCQkgICAgRVhUUkFDVF8zMkJJVFMoJnNyLT5zcl9ucCksIEVYVFJBQ1RfMzJCSVRTKCZzci0+c3JfbmIpKSk7Ci0JCXJyID0gKHN0cnVjdCBydGNwX3JyICopKHNyICsgMSk7CisJCXJyID0gKGNvbnN0IHN0cnVjdCBydGNwX3JyICopKHNyICsgMSk7CiAJCWJyZWFrOwogCWNhc2UgUlRDUF9QVF9SUjoKIAkJTkRfUFJJTlQoKG5kbywgIiByciIpKTsKIAkJaWYgKGxlbiAhPSBjbnQgKiBzaXplb2YoKnJyKSArIHNpemVvZigqcmgpKQogCQkJTkRfUFJJTlQoKG5kbywgIiBbJWRdIiwgbGVuKSk7Ci0JCXJyID0gKHN0cnVjdCBydGNwX3JyICopKHJoICsgMSk7CisJCXJyID0gKGNvbnN0IHN0cnVjdCBydGNwX3JyICopKHJoICsgMSk7CiAJCWlmIChuZG8tPm5kb192ZmxhZykKIAkJCU5EX1BSSU5UKChuZG8sICIgJXUiLCBFWFRSQUNUXzMyQklUUygmcmgtPnJoX3NzcmMpKSk7CiAJCWJyZWFrOwpAQCAtMjU1LDEwICsyNzksOSBAQAogCWlmIChjbnQgPiAxKQogCQlORF9QUklOVCgobmRvLCAiIGMlZCIsIGNudCkpOwogCXdoaWxlICgtLWNudCA+PSAwKSB7Ci0JCWlmICgodV9jaGFyICopKHJyICsgMSkgPiBlcCkgewotCQkJTkRfUFJJTlQoKG5kbywgIiBbfHJ0Y3BdIikpOwotCQkJcmV0dXJuIChlcCk7Ci0JCX0KKwkJaWYgKChjb25zdCB1X2NoYXIgKikocnIgKyAxKSA+IGVwKQorCQkJZ290byB0cnVuYzsKKwkJTkRfVENIRUNLKCpycik7CiAJCWlmIChuZG8tPm5kb192ZmxhZykKIAkJCU5EX1BSSU5UKChuZG8sICIgJXUiLCBFWFRSQUNUXzMyQklUUygmcnItPnJyX3NyY2lkKSkpOwogCQl0cyA9IChkb3VibGUpKEVYVFJBQ1RfMzJCSVRTKCZyci0+cnJfbHNyKSkgLyA2NTUzNi47CkBAIC0yNjksMjkgKzI5MiwzMCBAQAogCQkgICAgRVhUUkFDVF8zMkJJVFMoJnJyLT5ycl9kdiksIHRzLCBkdHMpKTsKIAl9CiAJcmV0dXJuIChoZHIgKyBsZW4pOworCit0cnVuYzoKKwlORF9QUklOVCgobmRvLCAiJXMiLCBydGNwX3RzdHIpKTsKKwlyZXR1cm4gZXA7CiB9CiAKIHN0YXRpYyBpbnQgdWRwX2Nrc3VtKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCBzdHJ1Y3QgaXAgKmlwLAogCQkgICAgIHJlZ2lzdGVyIGNvbnN0IHN0cnVjdCB1ZHBoZHIgKnVwLAogCQkgICAgIHJlZ2lzdGVyIHVfaW50IGxlbikKIHsKLQlyZXR1cm4gbmV4dHByb3RvNF9ja3N1bShuZG8sIGlwLCAoY29uc3QgdWludDhfdCAqKSh2b2lkICopdXAsIGxlbiwgbGVuLAorCXJldHVybiBuZXh0cHJvdG80X2Nrc3VtKG5kbywgaXAsIChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKil1cCwgbGVuLCBsZW4sCiAJCQkJSVBQUk9UT19VRFApOwogfQogCi0jaWZkZWYgSU5FVDYKLXN0YXRpYyBpbnQgdWRwNl9ja3N1bShjb25zdCBzdHJ1Y3QgaXA2X2hkciAqaXA2LCBjb25zdCBzdHJ1Y3QgdWRwaGRyICp1cCwKLQl1X2ludCBsZW4pCitzdGF0aWMgaW50IHVkcDZfY2tzdW0obmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDYsCisJCSAgICAgIGNvbnN0IHN0cnVjdCB1ZHBoZHIgKnVwLCB1X2ludCBsZW4pCiB7Ci0JcmV0dXJuIG5leHRwcm90bzZfY2tzdW0oaXA2LCAoY29uc3QgdWludDhfdCAqKSh2b2lkICopdXAsIGxlbiwgbGVuLAotCSAgICBJUFBST1RPX1VEUCk7CisJcmV0dXJuIG5leHRwcm90bzZfY2tzdW0obmRvLCBpcDYsIChjb25zdCB1aW50OF90ICopKGNvbnN0IHZvaWQgKil1cCwgbGVuLCBsZW4sCisJCQkJSVBQUk9UT19VRFApOwogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkCiB1ZHBpcGFkZHJfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBpcCAqaXAsIGludCBzcG9ydCwgaW50IGRwb3J0KQogewotI2lmZGVmIElORVQ2CiAJY29uc3Qgc3RydWN0IGlwNl9oZHIgKmlwNjsKIAogCWlmIChJUF9WKGlwKSA9PSA2KQpAQCAtMzA4LDIwICszMzIsMTggQEAKIAkJCX0gZWxzZSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzLiVzID4gJXMuJXM6ICIsCiAJCQkJCWlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X3NyYyksCi0JCQkJCXVkcHBvcnRfc3RyaW5nKHNwb3J0KSwKKwkJCQkJdWRwcG9ydF9zdHJpbmcobmRvLCBzcG9ydCksCiAJCQkJCWlwNmFkZHJfc3RyaW5nKG5kbywgJmlwNi0+aXA2X2RzdCksCi0JCQkJCXVkcHBvcnRfc3RyaW5nKGRwb3J0KSkpOworCQkJCQl1ZHBwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogCQkJfQogCQl9IGVsc2UgewogCQkJaWYgKHNwb3J0ICE9IC0xKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzID4gJXM6ICIsCi0JCQkJCXVkcHBvcnRfc3RyaW5nKHNwb3J0KSwKLQkJCQkJdWRwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisJCQkJCXVkcHBvcnRfc3RyaW5nKG5kbywgc3BvcnQpLAorCQkJCQl1ZHBwb3J0X3N0cmluZyhuZG8sIGRwb3J0KSkpOwogCQkJfQogCQl9Ci0JfSBlbHNlCi0jZW5kaWYgLypJTkVUNiovCi0JeworCX0gZWxzZSB7CiAJCWlmIChpcC0+aXBfcCA9PSBJUFBST1RPX1VEUCkgewogCQkJaWYgKHNwb3J0ID09IC0xKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIiVzID4gJXM6ICIsCkBAIC0zMzAsMTUgKzM1MiwxNSBAQAogCQkJfSBlbHNlIHsKIAkJCQlORF9QUklOVCgobmRvLCAiJXMuJXMgPiAlcy4lczogIiwKIAkJCQkJaXBhZGRyX3N0cmluZyhuZG8sICZpcC0+aXBfc3JjKSwKLQkJCQkJdWRwcG9ydF9zdHJpbmcoc3BvcnQpLAorCQkJCQl1ZHBwb3J0X3N0cmluZyhuZG8sIHNwb3J0KSwKIAkJCQkJaXBhZGRyX3N0cmluZyhuZG8sICZpcC0+aXBfZHN0KSwKLQkJCQkJdWRwcG9ydF9zdHJpbmcoZHBvcnQpKSk7CisJCQkJCXVkcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKSk7CiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlpZiAoc3BvcnQgIT0gLTEpIHsKIAkJCQlORF9QUklOVCgobmRvLCAiJXMgPiAlczogIiwKLQkJCQkJdWRwcG9ydF9zdHJpbmcoc3BvcnQpLAotCQkJCQl1ZHBwb3J0X3N0cmluZyhkcG9ydCkpKTsKKwkJCQkJdWRwcG9ydF9zdHJpbmcobmRvLCBzcG9ydCksCisJCQkJCXVkcHBvcnRfc3RyaW5nKG5kbywgZHBvcnQpKSk7CiAJCQl9CiAJCX0KIAl9CkBAIC0zNTMsMjQgKzM3NSwxOSBAQAogCXJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqY3A7CiAJcmVnaXN0ZXIgY29uc3QgdV9jaGFyICplcCA9IGJwICsgbGVuZ3RoOwogCXVpbnQxNl90IHNwb3J0LCBkcG9ydCwgdWxlbjsKLSNpZmRlZiBJTkVUNgogCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBpcDZfaGRyICppcDY7Ci0jZW5kaWYKIAogCWlmIChlcCA+IG5kby0+bmRvX3NuYXBlbmQpCiAJCWVwID0gbmRvLT5uZG9fc25hcGVuZDsKLQl1cCA9IChzdHJ1Y3QgdWRwaGRyICopYnA7Ci0JaXAgPSAoc3RydWN0IGlwICopYnAyOwotI2lmZGVmIElORVQ2CisJdXAgPSAoY29uc3Qgc3RydWN0IHVkcGhkciAqKWJwOworCWlwID0gKGNvbnN0IHN0cnVjdCBpcCAqKWJwMjsKIAlpZiAoSVBfVihpcCkgPT0gNikKLQkJaXA2ID0gKHN0cnVjdCBpcDZfaGRyICopYnAyOworCQlpcDYgPSAoY29uc3Qgc3RydWN0IGlwNl9oZHIgKilicDI7CiAJZWxzZQogCQlpcDYgPSBOVUxMOwotI2VuZGlmIC8qSU5FVDYqLwogCWlmICghTkRfVFRFU1QodXAtPnVoX2Rwb3J0KSkgewogCQl1ZHBpcGFkZHJfcHJpbnQobmRvLCBpcCwgLTEsIC0xKTsKLQkJTkRfUFJJTlQoKG5kbywgIlt8dWRwXSIpKTsKLQkJcmV0dXJuOworCQlnb3RvIHRydW5jOwogCX0KIAogCXNwb3J0ID0gRVhUUkFDVF8xNkJJVFMoJnVwLT51aF9zcG9ydCk7CkBAIC0zODEsNiArMzk4LDEwIEBACiAJCU5EX1BSSU5UKChuZG8sICJ0cnVuY2F0ZWQtdWRwICVkIiwgbGVuZ3RoKSk7CiAJCXJldHVybjsKIAl9CisJaWYgKCFORF9UVEVTVCh1cC0+dWhfdWxlbikpIHsKKwkJdWRwaXBhZGRyX3ByaW50KG5kbywgaXAsIHNwb3J0LCBkcG9ydCk7CisJCWdvdG8gdHJ1bmM7CisJfQogCXVsZW4gPSBFWFRSQUNUXzE2QklUUygmdXAtPnVoX3VsZW4pOwogCWlmICh1bGVuIDwgc2l6ZW9mKHN0cnVjdCB1ZHBoZHIpKSB7CiAJCXVkcGlwYWRkcl9wcmludChuZG8sIGlwLCBzcG9ydCwgZHBvcnQpOwpAQCAtMzkyLDQzICs0MTMsNDIgQEAKIAlpZiAodWxlbiA8IGxlbmd0aCkKIAkJbGVuZ3RoID0gdWxlbjsKIAotCWNwID0gKHVfY2hhciAqKSh1cCArIDEpOworCWNwID0gKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpOwogCWlmIChjcCA+IG5kby0+bmRvX3NuYXBlbmQpIHsKIAkJdWRwaXBhZGRyX3ByaW50KG5kbywgaXAsIHNwb3J0LCBkcG9ydCk7Ci0JCU5EX1BSSU5UKChuZG8sICJbfHVkcF0iKSk7Ci0JCXJldHVybjsKKwkJZ290byB0cnVuYzsKIAl9CiAKIAlpZiAobmRvLT5uZG9fcGFja2V0dHlwZSkgewotCQlyZWdpc3RlciBzdHJ1Y3Qgc3VucnBjX21zZyAqcnA7CisJCXJlZ2lzdGVyIGNvbnN0IHN0cnVjdCBzdW5ycGNfbXNnICpycDsKIAkJZW51bSBzdW5ycGNfbXNnX3R5cGUgZGlyZWN0aW9uOwogCiAJCXN3aXRjaCAobmRvLT5uZG9fcGFja2V0dHlwZSkgewogCiAJCWNhc2UgUFRfVkFUOgogCQkJdWRwaXBhZGRyX3ByaW50KG5kbywgaXAsIHNwb3J0LCBkcG9ydCk7Ci0JCQl2YXRfcHJpbnQobmRvLCAodm9pZCAqKSh1cCArIDEpLCB1cCk7CisJCQl2YXRfcHJpbnQobmRvLCAoY29uc3Qgdm9pZCAqKSh1cCArIDEpLCB1cCk7CiAJCQlicmVhazsKIAogCQljYXNlIFBUX1dCOgogCQkJdWRwaXBhZGRyX3ByaW50KG5kbywgaXAsIHNwb3J0LCBkcG9ydCk7Ci0JCQl3Yl9wcmludChuZG8sICh2b2lkICopKHVwICsgMSksIGxlbmd0aCk7CisJCQl3Yl9wcmludChuZG8sIChjb25zdCB2b2lkICopKHVwICsgMSksIGxlbmd0aCk7CiAJCQlicmVhazsKIAogCQljYXNlIFBUX1JQQzoKLQkJCXJwID0gKHN0cnVjdCBzdW5ycGNfbXNnICopKHVwICsgMSk7CisJCQlycCA9IChjb25zdCBzdHJ1Y3Qgc3VucnBjX21zZyAqKSh1cCArIDEpOwogCQkJZGlyZWN0aW9uID0gKGVudW0gc3VucnBjX21zZ190eXBlKUVYVFJBQ1RfMzJCSVRTKCZycC0+cm1fZGlyZWN0aW9uKTsKIAkJCWlmIChkaXJlY3Rpb24gPT0gU1VOUlBDX0NBTEwpCi0JCQkJc3VucnBjcmVxdWVzdF9wcmludChuZG8sICh1X2NoYXIgKilycCwgbGVuZ3RoLAotCQkJCSAgICAodV9jaGFyICopaXApOworCQkJCXN1bnJwY3JlcXVlc3RfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopcnAsIGxlbmd0aCwKKwkJCQkgICAgKGNvbnN0IHVfY2hhciAqKWlwKTsKIAkJCWVsc2UKLQkJCQluZnNyZXBseV9wcmludChuZG8sICh1X2NoYXIgKilycCwgbGVuZ3RoLAotCQkJCSAgICAodV9jaGFyICopaXApOwkJCS8qWFhYKi8KKwkJCQluZnNyZXBseV9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKilycCwgbGVuZ3RoLAorCQkJCSAgICAoY29uc3QgdV9jaGFyICopaXApOwkJCS8qWFhYKi8KIAkJCWJyZWFrOwogCiAJCWNhc2UgUFRfUlRQOgogCQkJdWRwaXBhZGRyX3ByaW50KG5kbywgaXAsIHNwb3J0LCBkcG9ydCk7Ci0JCQlydHBfcHJpbnQobmRvLCAodm9pZCAqKSh1cCArIDEpLCBsZW5ndGgsIHVwKTsKKwkJCXJ0cF9wcmludChuZG8sIChjb25zdCB2b2lkICopKHVwICsgMSksIGxlbmd0aCwgdXApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBQVF9SVENQOgpAQCAtNDU1LDExICs0NzUsNyBAQAogCQljYXNlIFBUX0FPRFY6CiAJCQl1ZHBpcGFkZHJfcHJpbnQobmRvLCBpcCwgc3BvcnQsIGRwb3J0KTsKIAkJCWFvZHZfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCwKLSNpZmRlZiBJTkVUNgogCQkJICAgIGlwNiAhPSBOVUxMKTsKLSNlbHNlCi0JCQkgICAgMCk7Ci0jZW5kaWYKIAkJCWJyZWFrOwogCiAJCWNhc2UgUFRfUkFESVVTOgpAQCAtNDg3LDM5ICs1MDMsMzEgQEAKIAogCXVkcGlwYWRkcl9wcmludChuZG8sIGlwLCBzcG9ydCwgZHBvcnQpOwogCWlmICghbmRvLT5uZG9fcWZsYWcpIHsKLQkJcmVnaXN0ZXIgc3RydWN0IHN1bnJwY19tc2cgKnJwOworCQlyZWdpc3RlciBjb25zdCBzdHJ1Y3Qgc3VucnBjX21zZyAqcnA7CiAJCWVudW0gc3VucnBjX21zZ190eXBlIGRpcmVjdGlvbjsKIAotCQlycCA9IChzdHJ1Y3Qgc3VucnBjX21zZyAqKSh1cCArIDEpOworCQlycCA9IChjb25zdCBzdHJ1Y3Qgc3VucnBjX21zZyAqKSh1cCArIDEpOwogCQlpZiAoTkRfVFRFU1QocnAtPnJtX2RpcmVjdGlvbikpIHsKIAkJCWRpcmVjdGlvbiA9IChlbnVtIHN1bnJwY19tc2dfdHlwZSlFWFRSQUNUXzMyQklUUygmcnAtPnJtX2RpcmVjdGlvbik7CiAJCQlpZiAoZHBvcnQgPT0gTkZTX1BPUlQgJiYgZGlyZWN0aW9uID09IFNVTlJQQ19DQUxMKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIk5GUyByZXF1ZXN0IHhpZCAldSAiLCBFWFRSQUNUXzMyQklUUygmcnAtPnJtX3hpZCkpKTsKLQkJCQluZnNyZXFfcHJpbnRfbm9hZGRyKG5kbywgKHVfY2hhciAqKXJwLCBsZW5ndGgsCi0JCQkJICAgICh1X2NoYXIgKilpcCk7CisJCQkJbmZzcmVxX3ByaW50X25vYWRkcihuZG8sIChjb25zdCB1X2NoYXIgKilycCwgbGVuZ3RoLAorCQkJCSAgICAoY29uc3QgdV9jaGFyICopaXApOwogCQkJCXJldHVybjsKIAkJCX0KIAkJCWlmIChzcG9ydCA9PSBORlNfUE9SVCAmJiBkaXJlY3Rpb24gPT0gU1VOUlBDX1JFUExZKSB7CiAJCQkJTkRfUFJJTlQoKG5kbywgIk5GUyByZXBseSB4aWQgJXUgIiwgRVhUUkFDVF8zMkJJVFMoJnJwLT5ybV94aWQpKSk7Ci0JCQkJbmZzcmVwbHlfcHJpbnRfbm9hZGRyKG5kbywgKHVfY2hhciAqKXJwLCBsZW5ndGgsCi0JCQkJICAgICh1X2NoYXIgKilpcCk7CisJCQkJbmZzcmVwbHlfcHJpbnRfbm9hZGRyKG5kbywgKGNvbnN0IHVfY2hhciAqKXJwLCBsZW5ndGgsCisJCQkJICAgIChjb25zdCB1X2NoYXIgKilpcCk7CiAJCQkJcmV0dXJuOwogCQkJfQogI2lmZGVmIG5vdGRlZgogCQkJaWYgKGRwb3J0ID09IFNVTlJQQ19QT1JUICYmIGRpcmVjdGlvbiA9PSBTVU5SUENfQ0FMTCkgewotCQkJCXN1bnJwY3JlcXVlc3RfcHJpbnQoKHVfY2hhciAqKXJwLCBsZW5ndGgsICh1X2NoYXIgKilpcCk7CisJCQkJc3VucnBjcmVxdWVzdF9wcmludCgoY29uc3QgdV9jaGFyICopcnAsIGxlbmd0aCwgKGNvbnN0IHVfY2hhciAqKWlwKTsKIAkJCQlyZXR1cm47CiAJCQl9CiAjZW5kaWYKIAkJfQotCQlpZiAoTkRfVFRFU1QoKChzdHJ1Y3QgTEFQICopY3ApLT50eXBlKSAmJgotCQkgICAgKChzdHJ1Y3QgTEFQICopY3ApLT50eXBlID09IGxhcEREUCAmJgotCQkgICAgKGF0YWxrX3BvcnQoc3BvcnQpIHx8IGF0YWxrX3BvcnQoZHBvcnQpKSkgewotCQkJaWYgKG5kby0+bmRvX3ZmbGFnKQotCQkJCU5EX1BSSU5UKChuZG8sICJraXAgIikpOwotCQkJbGxhcF9wcmludChuZG8sIGNwLCBsZW5ndGgpOwotCQkJcmV0dXJuOwotCQl9CiAJfQogCiAJaWYgKG5kby0+bmRvX3ZmbGFnICYmICFuZG8tPm5kb19LZmxhZyAmJiAhZnJhZ21lbnRlZCkgewpAQCAtNTQ1LDExICs1NTMsMTAgQEAKIAkJCQkJTkRfUFJJTlQoKG5kbywgIlt1ZHAgc3VtIG9rXSAiKSk7CiAJCQl9CiAJCX0KLSNpZmRlZiBJTkVUNgogCQllbHNlIGlmIChJUF9WKGlwKSA9PSA2ICYmIGlwNi0+aXA2X3BsZW4pIHsKIAkJCS8qIGZvciBJUHY2LCBVRFAgY2hlY2tzdW0gaXMgbWFuZGF0b3J5ICovCiAJCQlpZiAoTkRfVFRFU1QyKGNwWzBdLCBsZW5ndGgpKSB7Ci0JCQkJc3VtID0gdWRwNl9ja3N1bShpcDYsIHVwLCBsZW5ndGggKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOworCQkJCXN1bSA9IHVkcDZfY2tzdW0obmRvLCBpcDYsIHVwLCBsZW5ndGggKyBzaXplb2Yoc3RydWN0IHVkcGhkcikpOwogCQkJCXVkcF9zdW0gPSBFWFRSQUNUXzE2QklUUygmdXAtPnVoX3N1bSk7CiAKIAkgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VtICE9IDApIHsKQEAgLTU2MCw1NSArNTY3LDQ5IEBACiAJCQkJCU5EX1BSSU5UKChuZG8sICJbdWRwIHN1bSBva10gIikpOwogCQkJfQogCQl9Ci0jZW5kaWYKIAl9CiAKIAlpZiAoIW5kby0+bmRvX3FmbGFnKSB7Ci0jZGVmaW5lIElTUE9SVChwKSAoZHBvcnQgPT0gKHApIHx8IHNwb3J0ID09IChwKSkKLQkJaWYgKElTUE9SVChOQU1FU0VSVkVSX1BPUlQpKQorCQlpZiAoSVNfU1JDX09SX0RTVF9QT1JUKE5BTUVTRVJWRVJfUE9SVCkpCiAJCQluc19wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoLCAwKTsKLQkJZWxzZSBpZiAoSVNQT1JUKE1VTFRJQ0FTVEROU19QT1JUKSkKKwkJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKE1VTFRJQ0FTVEROU19QT1JUKSkKIAkJCW5zX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgsIDEpOwotCQllbHNlIGlmIChJU1BPUlQoVElNRURfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChUSU1FRF9QT1JUKSkKIAkJCXRpbWVkX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpKTsKLQkJZWxzZSBpZiAoSVNQT1JUKFRGVFBfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChURlRQX1BPUlQpKQogCQkJdGZ0cF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKEJPT1RQQ19QT1JUKSB8fCBJU1BPUlQoQk9PVFBTX1BPUlQpKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoQk9PVFBDX1BPUlQpIHx8IElTX1NSQ19PUl9EU1RfUE9SVChCT09UUFNfUE9SVCkpCiAJCQlib290cF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKFJJUF9QT1JUKSkKKwkJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFJJUF9QT1JUKSkKIAkJCXJpcF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKEFPRFZfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChBT0RWX1BPUlQpKQogCQkJYW9kdl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoLAotI2lmZGVmIElORVQ2CiAJCQkgICAgaXA2ICE9IE5VTEwpOwotI2Vsc2UKLQkJCSAgICAwKTsKLSNlbmRpZgotCSAgICAgICAgZWxzZSBpZiAoSVNQT1JUKElTQUtNUF9QT1JUKSkKKwkgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChJU0FLTVBfUE9SVCkpCiAJCQkgaXNha21wX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgsIGJwMik7Ci0gIAkgICAgICAgIGVsc2UgaWYgKElTUE9SVChJU0FLTVBfUE9SVF9OQVRUKSkKKwkgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChJU0FLTVBfUE9SVF9OQVRUKSkKIAkJCSBpc2FrbXBfcmZjMzk0OF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoLCBicDIpOwogI2lmIDEgLyo/Pz8qLwotICAgCSAgICAgICAgZWxzZSBpZiAoSVNQT1JUKElTQUtNUF9QT1JUX1VTRVIxKSB8fCBJU1BPUlQoSVNBS01QX1BPUlRfVVNFUjIpKQorCSAgICAgICAgZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKElTQUtNUF9QT1JUX1VTRVIxKSB8fCBJU19TUkNfT1JfRFNUX1BPUlQoSVNBS01QX1BPUlRfVVNFUjIpKQogCQkJaXNha21wX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgsIGJwMik7CiAjZW5kaWYKLQkJZWxzZSBpZiAoSVNQT1JUKFNOTVBfUE9SVCkgfHwgSVNQT1JUKFNOTVBUUkFQX1BPUlQpKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoU05NUF9QT1JUKSB8fCBJU19TUkNfT1JfRFNUX1BPUlQoU05NUFRSQVBfUE9SVCkpCiAJCQlzbm1wX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoTlRQX1BPUlQpKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoTlRQX1BPUlQpKQogCQkJbnRwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoS0VSQkVST1NfUE9SVCkgfHwgSVNQT1JUKEtFUkJFUk9TX1NFQ19QT1JUKSkKKwkJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKEtFUkJFUk9TX1BPUlQpIHx8IElTX1NSQ19PUl9EU1RfUE9SVChLRVJCRVJPU19TRUNfUE9SVCkpCiAJCQlrcmJfcHJpbnQobmRvLCAoY29uc3Qgdm9pZCAqKSh1cCArIDEpKTsKLQkJZWxzZSBpZiAoSVNQT1JUKEwyVFBfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChMMlRQX1BPUlQpKQogCQkJbDJ0cF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLSNpZmRlZiBUQ1BEVU1QX0RPX1NNQgotCQllbHNlIGlmIChJU1BPUlQoTkVUQklPU19OU19QT1JUKSkKKyNpZmRlZiBFTkFCTEVfU01CCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChORVRCSU9TX05TX1BPUlQpKQogCQkJbmJ0X3VkcDEzN19wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKE5FVEJJT1NfREdSQU1fUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChORVRCSU9TX0RHUkFNX1BPUlQpKQogCQkJbmJ0X3VkcDEzOF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKICNlbmRpZgogCQllbHNlIGlmIChkcG9ydCA9PSBWQVRfUE9SVCkKIAkJCXZhdF9wcmludChuZG8sIChjb25zdCB2b2lkICopKHVwICsgMSksIHVwKTsKLQkJZWxzZSBpZiAoSVNQT1JUKFpFUEhZUl9TUlZfUE9SVCkgfHwgSVNQT1JUKFpFUEhZUl9DTFRfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChaRVBIWVJfU1JWX1BPUlQpIHx8IElTX1NSQ19PUl9EU1RfUE9SVChaRVBIWVJfQ0xUX1BPUlQpKQogCQkJemVwaHlyX3ByaW50KG5kbywgKGNvbnN0IHZvaWQgKikodXAgKyAxKSwgbGVuZ3RoKTsKIAkJLyoKIAkJICogU2luY2UgdGhlcmUgYXJlIDEwIHBvc3NpYmxlIHBvcnRzIHRvIGNoZWNrLCBJIHRoaW5rCkBAIC02MTcsNzggKzYxOCw4NCBAQAogCQllbHNlIGlmICgoc3BvcnQgPj0gUlhfUE9SVF9MT1cgJiYgc3BvcnQgPD0gUlhfUE9SVF9ISUdIKSB8fAogCQkJIChkcG9ydCA+PSBSWF9QT1JUX0xPVyAmJiBkcG9ydCA8PSBSWF9QT1JUX0hJR0gpKQogCQkJcnhfcHJpbnQobmRvLCAoY29uc3Qgdm9pZCAqKSh1cCArIDEpLCBsZW5ndGgsIHNwb3J0LCBkcG9ydCwKLQkJCQkgKHVfY2hhciAqKSBpcCk7Ci0jaWZkZWYgSU5FVDYKLQkJZWxzZSBpZiAoSVNQT1JUKFJJUE5HX1BPUlQpKQorCQkJCSAoY29uc3QgdV9jaGFyICopIGlwKTsKKwkJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFJJUE5HX1BPUlQpKQogCQkJcmlwbmdfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCk7Ci0JCWVsc2UgaWYgKElTUE9SVChESENQNl9TRVJWX1BPUlQpIHx8IElTUE9SVChESENQNl9DTElfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChESENQNl9TRVJWX1BPUlQpIHx8IElTX1NSQ19PUl9EU1RfUE9SVChESENQNl9DTElfUE9SVCkpCiAJCQlkaGNwNl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKEFIQ1BfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChBSENQX1BPUlQpKQogCQkJYWhjcF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSBpZiAoSVNQT1JUKEJBQkVMX1BPUlQpIHx8IElTUE9SVChCQUJFTF9QT1JUX09MRCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChCQUJFTF9QT1JUKSB8fCBJU19TUkNfT1JfRFNUX1BPUlQoQkFCRUxfUE9SVF9PTEQpKQogCQkJYmFiZWxfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCk7Ci0jZW5kaWYgLypJTkVUNiovCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChITkNQX1BPUlQpKQorCQkJaG5jcF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKIAkJLyoKIAkJICogS2x1ZGdlIGluIHRlc3QgZm9yIHdoaXRlYm9hcmQgcGFja2V0cy4KIAkJICovCiAJCWVsc2UgaWYgKGRwb3J0ID09IFdCX1BPUlQpCiAJCQl3Yl9wcmludChuZG8sIChjb25zdCB2b2lkICopKHVwICsgMSksIGxlbmd0aCk7Ci0JCWVsc2UgaWYgKElTUE9SVChDSVNDT19BVVRPUlBfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChDSVNDT19BVVRPUlBfUE9SVCkpCiAJCQljaXNjb19hdXRvcnBfcHJpbnQobmRvLCAoY29uc3Qgdm9pZCAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoUkFESVVTX1BPUlQpIHx8Ci0JCQkgSVNQT1JUKFJBRElVU19ORVdfUE9SVCkgfHwKLQkJCSBJU1BPUlQoUkFESVVTX0FDQ09VTlRJTkdfUE9SVCkgfHwKLQkJCSBJU1BPUlQoUkFESVVTX05FV19BQ0NPVU5USU5HX1BPUlQpIHx8Ci0JCQkgSVNQT1JUKFJBRElVU19DT0FfUE9SVCkgKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoUkFESVVTX1BPUlQpIHx8CisJCQkgSVNfU1JDX09SX0RTVF9QT1JUKFJBRElVU19ORVdfUE9SVCkgfHwKKwkJCSBJU19TUkNfT1JfRFNUX1BPUlQoUkFESVVTX0FDQ09VTlRJTkdfUE9SVCkgfHwKKwkJCSBJU19TUkNfT1JfRFNUX1BPUlQoUkFESVVTX05FV19BQ0NPVU5USU5HX1BPUlQpIHx8CisJCQkgSVNfU1JDX09SX0RTVF9QT1JUKFJBRElVU19DSVNDT19DT0FfUE9SVCkgfHwKKwkJCSBJU19TUkNfT1JfRFNUX1BPUlQoUkFESVVTX0NPQV9QT1JUKSApCiAJCQlyYWRpdXNfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwKzEpLCBsZW5ndGgpOwogCQllbHNlIGlmIChkcG9ydCA9PSBIU1JQX1BPUlQpCiAJCQloc3JwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoTFdSRVNfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChMV1JFU19QT1JUKSkKIAkJCWx3cmVzX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoTERQX1BPUlQpKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoTERQX1BPUlQpKQogCQkJbGRwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoT0xTUl9QT1JUKSkKKwkJZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKE9MU1JfUE9SVCkpCiAJCQlvbHNyX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgsCi0jaWYgSU5FVDYKIAkJCQkJKElQX1YoaXApID09IDYpID8gMSA6IDApOwotI2Vsc2UKLQkJCQkJMCk7Ci0jZW5kaWYKLQkJZWxzZSBpZiAoSVNQT1JUKE1QTFNfTFNQX1BJTkdfUE9SVCkpCisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChNUExTX0xTUF9QSU5HX1BPUlQpKQogCQkJbHNwcGluZ19wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKIAkJZWxzZSBpZiAoZHBvcnQgPT0gQkZEX0NPTlRST0xfUE9SVCB8fAogCQkJIGRwb3J0ID09IEJGRF9FQ0hPX1BPUlQgKQogCQkJYmZkX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCsxKSwgbGVuZ3RoLCBkcG9ydCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNQT1JUKExNUF9QT1JUKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoTE1QX1BPUlQpKQogCQkJbG1wX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotCQllbHNlIGlmIChJU1BPUlQoVlFQX1BPUlQpKQorCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoVlFQX1BPUlQpKQogCQkJdnFwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKElTUE9SVChTRkxPV19QT1JUKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoU0ZMT1dfUE9SVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBzZmxvd19wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKIAkgICAgICAgIGVsc2UgaWYgKGRwb3J0ID09IExXQVBQX0NPTlRST0xfUE9SVCkKIAkJCWx3YXBwX2NvbnRyb2xfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCwgMSk7CiAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3BvcnQgPT0gTFdBUFBfQ09OVFJPTF9QT1JUKQogICAgICAgICAgICAgICAgICAgICAgICAgbHdhcHBfY29udHJvbF9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoLCAwKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChJU1BPUlQoTFdBUFBfREFUQV9QT1JUKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoTFdBUFBfREFUQV9QT1JUKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGx3YXBwX2RhdGFfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNQT1JUKFNJUF9QT1JUKSkKKyAgICAgICAgICAgICAgICBlbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoU0lQX1BPUlQpKQogCQkJc2lwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKElTUE9SVChTWVNMT0dfUE9SVCkpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKFNZU0xPR19QT1JUKSkKIAkJCXN5c2xvZ19wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLSAgICAgICAgICAgICAgICBlbHNlIGlmIChJU1BPUlQoT1RWX1BPUlQpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChPVFZfUE9SVCkpCiAJCQlvdHZfcHJpbnQobmRvLCAoY29uc3QgdV9jaGFyICopKHVwICsgMSksIGxlbmd0aCk7Ci0gICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNQT1JUKFZYTEFOX1BPUlQpKQorICAgICAgICAgICAgICAgIGVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChWWExBTl9QT1JUKSkKIAkJCXZ4bGFuX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOwotICAgICAgICAgICAgICAgIGVsc2UgaWYgKElTUE9SVChHRU5FVkVfUE9SVCkpCisgICAgICAgICAgICAgICAgZWxzZSBpZiAoSVNfU1JDX09SX0RTVF9QT1JUKEdFTkVWRV9QT1JUKSkKIAkJCWdlbmV2ZV9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKikodXAgKyAxKSwgbGVuZ3RoKTsKLQkJZWxzZSB7CisJCWVsc2UgaWYgKElTX1NSQ19PUl9EU1RfUE9SVChMSVNQX0NPTlRST0xfUE9SVCkpCisJCQlsaXNwX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOworCQllbHNlIGlmIChJU19TUkNfT1JfRFNUX1BPUlQoVlhMQU5fR1BFX1BPUlQpKQorCQkJdnhsYW5fZ3BlX3ByaW50KG5kbywgKGNvbnN0IHVfY2hhciAqKSh1cCArIDEpLCBsZW5ndGgpOworCQllbHNlIGlmIChORF9UVEVTVCgoKGNvbnN0IHN0cnVjdCBMQVAgKiljcCktPnR5cGUpICYmCisJCSAgICAoKGNvbnN0IHN0cnVjdCBMQVAgKiljcCktPnR5cGUgPT0gbGFwRERQICYmCisJCSAgICAoYXRhbGtfcG9ydChzcG9ydCkgfHwgYXRhbGtfcG9ydChkcG9ydCkpKSB7CisJCQlpZiAobmRvLT5uZG9fdmZsYWcpCisJCQkJTkRfUFJJTlQoKG5kbywgImtpcCAiKSk7CisJCQlsbGFwX3ByaW50KG5kbywgY3AsIGxlbmd0aCk7CisJCX0gZWxzZSB7CiAJCQlpZiAodWxlbiA+IGxlbmd0aCkKIAkJCQlORF9QUklOVCgobmRvLCAiVURQLCBiYWQgbGVuZ3RoICV1ID4gJXUiLAogCQkJCSAgICB1bGVuLCBsZW5ndGgpKTsKIAkJCWVsc2UKIAkJCQlORF9QUklOVCgobmRvLCAiVURQLCBsZW5ndGggJXUiLCB1bGVuKSk7CiAJCX0KLSN1bmRlZiBJU1BPUlQKIAl9IGVsc2UgewogCQlpZiAodWxlbiA+IGxlbmd0aCkKIAkJCU5EX1BSSU5UKChuZG8sICJVRFAsIGJhZCBsZW5ndGggJXUgPiAldSIsCkBAIC02OTYsNiArNzAzLDEwIEBACiAJCWVsc2UKIAkJCU5EX1BSSU5UKChuZG8sICJVRFAsIGxlbmd0aCAldSIsIHVsZW4pKTsKIAl9CisJcmV0dXJuOworCit0cnVuYzoKKwlORF9QUklOVCgobmRvLCAiJXMiLCB1ZHBfdHN0cikpOwogfQogCiAKQEAgLTcwNSw0ICs3MTYsMyBAQAogICogYy1iYXNpYy1vZmZzZXQ6IDgKICAqIEVuZDoKICAqLwotCmRpZmYgLS1naXQgYS9wcmludC11c2IuYyBiL3ByaW50LXVzYi5jCmluZGV4IDc1Zjc4ZmMuLjA0ZWI0ZWYgMTAwNjQ0Ci0tLSBhL3ByaW50LXVzYi5jCisrKyBiL3ByaW50LXVzYi5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogVVNCIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiAKICNpZiBkZWZpbmVkKEhBVkVfUENBUF9VU0JfSCkgJiYgZGVmaW5lZChETFRfVVNCX0xJTlVYKQpkaWZmIC0tZ2l0IGEvcHJpbnQtdmpjLmMgYi9wcmludC12amMuYwppbmRleCAyNGY4YTEyLi4zMjg3YjliIDEwMDY0NAotLS0gYS9wcmludC12amMuYworKysgYi9wcmludC12amMuYwpAQCAtMTksMTQgKzE5LDE3IEBACiAgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFBQUCBWYW4gSmFjb2Jzb24gY29tcHJlc3Npb24gcHJpbnRlciAqLworCisvKiBzcGVjaWZpY2F0aW9uOiBSRkMgMTE0NCAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAic2xjb21wcmVzcy5oIgogI2luY2x1ZGUgInBwcC5oIgogCkBAIC03MSw2ICs3NCwxMyBAQAogICogV2UgdGhlcmVmb3JlIGxlYXZlICJwcm90byIgLSB3aGljaCBpcyB0aGUgUFBQIHByb3RvY29sIHR5cGUgLSBpbiBwbGFjZSwKICAqICpub3QqIG1hcmtlZCBhcyB1bnVzZWQsIGZvciBub3csIHNvIHRoYXQgR0NDIHdhcm5pbmdzIGFib3V0IHRoZQogICogdW51c2VkIGFyZ3VtZW50IHJlbWluZCB1cyB0aGF0IHdlIHNob3VsZCBmaXggdGhpcyBzb21lIGRheS4KKyAqCisgKiBYWFggLSBhbHNvLCBpdCBmZXRjaGVzIHRoZSBUQ1AgY2hlY2tzdW0gZmllbGQgaW4gQ09NUFJFU1NFRF9UQ1AKKyAqIHBhY2tldHMgZGlyZWN0bHksIHJhdGhlciB0aGFuIHdpdGggRVhUUkFDVF8xNkJJVFMoKTsgUkZDIDExNDQgc2F5cworICogaXQncyAidGhlIHVubW9kaWZpZWQgVENQIGNoZWNrc3VtIiwgd2hpY2ggd291bGQgaW1wbHkgdGhhdCBpdCdzCisgKiBiaWctZW5kaWFuLCBidXQgcGVyaGFwcywgb24gdGhlIHBsYXRmb3JtIHdoZXJlIHRoaXMgd2FzIGRldmVsb3BlZCwKKyAqIHRoZSBwYWNrZXRzIHdlcmUgbXVuZ2VkIGJ5IHRoZSBuZXR3b3JraW5nIHN0YWNrIGJlZm9yZSBiZWluZyBoYW5kZWQKKyAqIHRvIHRoZSBwYWNrZXQgY2FwdHVyZSBtZWNoYW5pc20uCiAgKi8KIGludAogdmpjX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCByZWdpc3RlciBjb25zdCBjaGFyICpicCwgdV9zaG9ydCBwcm90byBfVV8pCkBAIC05Niw3ICsxMDYsNyBAQAogCQlpZiAoYnBbMV0pCiAJCQlORF9QUklOVCgobmRvLCAiICIpKTsKIAkJTkRfUFJJTlQoKG5kbywgIkM9MHglMDJ4ICIsIGJwWzJdKSk7Ci0JCU5EX1BSSU5UKChuZG8sICJzdW09MHglMDR4ICIsICoodV9zaG9ydCAqKSZicFszXSkpOworCQlORF9QUklOVCgobmRvLCAic3VtPTB4JTA0eCAiLCAqKGNvbnN0IHVfc2hvcnQgKikmYnBbM10pKTsKIAkJcmV0dXJuIC0xOwogCWNhc2UgVFlQRV9FUlJPUjoKIAkJaWYgKG5kby0+bmRvX2VmbGFnKQpkaWZmIC0tZ2l0IGEvcHJpbnQtdnFwLmMgYi9wcmludC12cXAuYwppbmRleCBjZTM1NzJhLi40NGEyMTkzIDEwMDY0NAotLS0gYS9wcmludC12cXAuYworKysgYi9wcmludC12cXAuYwpAQCAtMTIsMTkgKzEyLDE4IEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIHN1cHBvcnQgZm9yIHRoZSBDaXNjbyBwcm9wLiBWUVAgUHJvdG9jb2wKLSAqCiAgKiBPcmlnaW5hbCBjb2RlIGJ5IENhcmxlcyBLaXNoaW1vdG8gPENhcmxlcy5LaXNoaW1vdG9AYnNjLmVzPgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IENpc2NvIFZMQU4gUXVlcnkgUHJvdG9jb2wgKFZRUCkgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKIApkaWZmIC0tZ2l0IGEvcHJpbnQtdnJycC5jIGIvcHJpbnQtdnJycC5jCmluZGV4IGY3MzlkMWUuLmQ4YmE0MjYgMTAwNjQ0Ci0tLSBhL3ByaW50LXZycnAuYworKysgYi9wcmludC12cnJwLmMKQEAgLTIzLDE0ICsyMywxNSBAQAogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAorLyogXHN1bW1hcnk6IFZpcnR1YWwgUm91dGVyIFJlZHVuZGFuY3kgUHJvdG9jb2wgKFZSUlApIHByaW50ZXIgKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAKQEAgLTE0Nyw3ICsxNDgsNyBAQAogCQl9CiAKIAkJaWYgKHZlcnNpb24gPT0gMyAmJiBORF9UVEVTVDIoYnBbMF0sIGxlbikpIHsKLQkJCXVpbnQxNl90IGNrc3VtID0gbmV4dHByb3RvNF9ja3N1bShuZG8sIChzdHJ1Y3QgaXAgKilicDIsIGJwLAorCQkJdWludDE2X3QgY2tzdW0gPSBuZXh0cHJvdG80X2Nrc3VtKG5kbywgKGNvbnN0IHN0cnVjdCBpcCAqKWJwMiwgYnAsCiAJCQkJbGVuLCBsZW4sIElQUFJPVE9fVlJSUCk7CiAJCQlpZiAoY2tzdW0pCiAJCQkJTkRfUFJJTlQoKG5kbywgIiwgKGJhZCB2cnJwIGNrc3VtICV4KSIsCmRpZmYgLS1naXQgYS9wcmludC12dHAuYyBiL3ByaW50LXZ0cC5jCmluZGV4IDlmZTg2ZTMuLjI4NWJlYjkgMTAwNjQ0Ci0tLSBhL3ByaW50LXZ0cC5jCisrKyBiL3ByaW50LXZ0cC5jCkBAIC0xMiw4ICsxMiw2IEBACiAgKiBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUwogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICoKLSAqIFZMQU4gVFJVTktJTkcgUFJPVE9DT0wgKFZUUCkKLSAqCiAgKiBSZWZlcmVuY2UgZG9jdW1lbnRhdGlvbjoKICAqICBodHRwOi8vd3d3LmNpc2NvLmNvbS9lbi9VUy90ZWNoL3RrMzg5L3RrNjg5L3RlY2hub2xvZ2llc190ZWNoX25vdGUwOTE4NmEwMDgwMDk0YzUyLnNodG1sCiAgKiAgaHR0cDovL3d3dy5jaXNjby5jb20vd2FycC9wdWJsaWMvNDczLzIxLmh0bWwKQEAgLTIyLDE0ICsyMCwxNSBAQAogICogT3JpZ2luYWwgY29kZSBvZGUgYnkgQ2FybGVzIEtpc2hpbW90byA8Y2FybGVzLmtpc2hpbW90b0BnbWFpbC5jb20+CiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogQ2lzY28gVkxBTiBUcnVua2luZyBQcm90b2NvbCAoVlRQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJhZGRydG9uYW1lLmgiCiAjaW5jbHVkZSAiZXh0cmFjdC5oIgogCkBAIC0xMjEsNyArMTIwLDcgQEAKIHZ0cF9wcmludCAobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcHB0ciwgdV9pbnQgbGVuZ3RoKQogewotICAgIGludCB0eXBlLCBsZW4sIHRsdl9sZW4sIHRsdl92YWx1ZTsKKyAgICBpbnQgdHlwZSwgbGVuLCB0bHZfbGVuLCB0bHZfdmFsdWUsIG1nbXRkX2xlbjsKICAgICBjb25zdCB1X2NoYXIgKnRwdHI7CiAgICAgY29uc3Qgc3RydWN0IHZ0cF92bGFuXyAqdnRwX3ZsYW47CiAKQEAgLTEzNiw3ICsxMzUsNyBAQAogICAgIE5EX1BSSU5UKChuZG8sICJWVFB2JXUsIE1lc3NhZ2UgJXMgKDB4JTAyeCksIGxlbmd0aCAldSIsCiAJICAgKnRwdHIsCiAJICAgdG9rMnN0cih2dHBfbWVzc2FnZV90eXBlX3ZhbHVlcywiVW5rbm93biBtZXNzYWdlIHR5cGUiLCB0eXBlKSwKLQkgICAqKHRwdHIrMSksCisJICAgdHlwZSwKIAkgICBsZW5ndGgpKTsKIAogICAgIC8qIEluIG5vbi12ZXJib3NlIG1vZGUsIGp1c3QgcHJpbnQgdmVyc2lvbiBhbmQgbWVzc2FnZSB0eXBlICovCkBAIC0xNDUsOSArMTQ0LDE1IEBACiAgICAgfQogCiAgICAgLyogdmVyYm9zZSBtb2RlIHByaW50IGFsbCBmaWVsZHMgKi8KLSAgICBORF9QUklOVCgobmRvLCAiXG5cdERvbWFpbiBuYW1lOiAlcywgJXM6ICV1IiwKLQkgICAodHB0cis0KSwKLQkgICB0b2syc3RyKHZ0cF9oZWFkZXJfdmFsdWVzLCJVbmtub3duIiwqKHRwdHIrMSkpLAorICAgIE5EX1BSSU5UKChuZG8sICJcblx0RG9tYWluIG5hbWU6ICIpKTsKKyAgICBtZ210ZF9sZW4gPSAqKHRwdHIgKyAzKTsKKyAgICBpZiAobWdtdGRfbGVuIDwgMSB8fCAgbWdtdGRfbGVuID4gMzIpIHsKKwlORF9QUklOVCgobmRvLCAiIFtpbnZhbGlkIE1nbXREIExlbiAlZF0iLCBtZ210ZF9sZW4pKTsKKwlyZXR1cm47CisgICAgfQorICAgIGZuX3ByaW50enAobmRvLCB0cHRyICsgNCwgbWdtdGRfbGVuLCBOVUxMKTsKKyAgICBORF9QUklOVCgobmRvLCAiLCAlczogJXUiLAorCSAgIHRvazJzdHIodnRwX2hlYWRlcl92YWx1ZXMsICJVbmtub3duIiwgdHlwZSksCiAJICAgKih0cHRyKzIpKSk7CiAKICAgICB0cHRyICs9IFZUUF9IRUFERVJfTEVOOwpAQCAtMTYxLDkgKzE2Niw5IEBACiAJICoKIAkgKiAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCiAJICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0JICogIHwgICAgIFZlcnNpb24gICB8ICAgICBDb2RlICAgICAgfCAgICBGb2xsb3dlcnMgIHwgICAgTW1ndEQgTGVuICB8CisJICogIHwgICAgIFZlcnNpb24gICB8ICAgICBDb2RlICAgICAgfCAgICBGb2xsb3dlcnMgIHwgICAgTWdtdEQgTGVuICB8CiAJICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCi0JICogIHwgICAgICAgICAgICAgICAgICAgIE1hbmFnZW1lbnQgRG9tYWluIE5hbWUgICAgICAgICAgICAgICAgICAgICB8CisJICogIHwgICAgICAgTWFuYWdlbWVudCBEb21haW4gTmFtZSAgKHplcm8tcGFkZGVkIHRvIDMyIGJ5dGVzKSAgICAgICB8CiAJICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCiAJICogIHwgICAgICAgICAgICAgICAgICAgIENvbmZpZ3VyYXRpb24gcmV2aXNpb24gbnVtYmVyICAgICAgICAgICAgICB8CiAJICogICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCkBAIC0xNzYsMTUgKzE4MSwxOCBAQAogCSAqCiAJICovCiAKKwlORF9UQ0hFQ0syKCp0cHRyLCA4KTsKIAlORF9QUklOVCgobmRvLCAiXG5cdCAgQ29uZmlnIFJldiAleCwgVXBkYXRlciAlcyIsCiAJICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIpLAogCSAgICAgICBpcGFkZHJfc3RyaW5nKG5kbywgdHB0cis0KSkpOwogCXRwdHIgKz0gODsKKwlORF9UQ0hFQ0syKCp0cHRyLCBWVFBfVVBEQVRFX1RJTUVTVEFNUF9MRU4pOwogCU5EX1BSSU5UKChuZG8sICIsIFRpbWVzdGFtcCAweCUwOHggMHglMDh4IDB4JTA4eCIsCiAJICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIpLAogCSAgICAgICBFWFRSQUNUXzMyQklUUyh0cHRyICsgNCksCiAJICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIgKyA4KSkpOwogCXRwdHIgKz0gVlRQX1VQREFURV9USU1FU1RBTVBfTEVOOworCU5EX1RDSEVDSzIoKnRwdHIsIFZUUF9NRDVfRElHRVNUX0xFTik7CiAJTkRfUFJJTlQoKG5kbywgIiwgTUQ1IGRpZ2VzdDogJTA4eCUwOHglMDh4JTA4eCIsCiAJICAgICAgIEVYVFJBQ1RfMzJCSVRTKHRwdHIpLAogCSAgICAgICBFWFRSQUNUXzMyQklUUyh0cHRyICsgNCksCkBAIC0yMDAsOSArMjA4LDkgQEAKIAkgKgogCSAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLQkgKiAgfCAgICAgVmVyc2lvbiAgIHwgICAgIENvZGUgICAgICB8ICAgU2VxIG51bWJlciAgfCAgICBNbWd0RCBMZW4gIHwKKwkgKiAgfCAgICAgVmVyc2lvbiAgIHwgICAgIENvZGUgICAgICB8ICAgU2VxIG51bWJlciAgfCAgICBNZ210RCBMZW4gIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLQkgKiAgfCAgICAgICAgICAgICAgICAgICAgTWFuYWdlbWVudCBEb21haW4gTmFtZSAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgfCAgICAgICBNYW5hZ2VtZW50IERvbWFpbiBOYW1lICAoemVyby1wYWRkZWQgdG8gMzIgYnl0ZXMpICAgICAgIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKIAkgKiAgfCAgICAgICAgICAgICAgICAgICAgQ29uZmlndXJhdGlvbiByZXZpc2lvbiBudW1iZXIgICAgICAgICAgICAgIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKQEAgLTI0MSwxNCArMjQ5LDE1IEBACiAKIAkgICAgTkRfVENIRUNLMigqdHB0ciwgbGVuKTsKIAotCSAgICB2dHBfdmxhbiA9IChzdHJ1Y3QgdnRwX3ZsYW5fKil0cHRyOwotCSAgICBORF9QUklOVCgobmRvLCAiXG5cdFZMQU4gaW5mbyBzdGF0dXMgJXMsIHR5cGUgJXMsIFZMQU4taWQgJXUsIE1UVSAldSwgU0FJRCAweCUwOHgsIE5hbWUgJXMiLAorCSAgICB2dHBfdmxhbiA9IChjb25zdCBzdHJ1Y3QgdnRwX3ZsYW5fKil0cHRyOworCSAgICBORF9UQ0hFQ0soKnZ0cF92bGFuKTsKKwkgICAgTkRfUFJJTlQoKG5kbywgIlxuXHRWTEFOIGluZm8gc3RhdHVzICVzLCB0eXBlICVzLCBWTEFOLWlkICV1LCBNVFUgJXUsIFNBSUQgMHglMDh4LCBOYW1lICIsCiAJCSAgIHRvazJzdHIodnRwX3ZsYW5fc3RhdHVzLCJVbmtub3duIix2dHBfdmxhbi0+c3RhdHVzKSwKIAkJICAgdG9rMnN0cih2dHBfdmxhbl90eXBlX3ZhbHVlcywiVW5rbm93biIsdnRwX3ZsYW4tPnR5cGUpLAogCQkgICBFWFRSQUNUXzE2QklUUygmdnRwX3ZsYW4tPnZsYW5pZCksCiAJCSAgIEVYVFJBQ1RfMTZCSVRTKCZ2dHBfdmxhbi0+bXR1KSwKLQkJICAgRVhUUkFDVF8zMkJJVFMoJnZ0cF92bGFuLT5pbmRleCksCi0JCSAgICh0cHRyICsgVlRQX1ZMQU5fSU5GT19PRkZTRVQpKSk7CisJCSAgIEVYVFJBQ1RfMzJCSVRTKCZ2dHBfdmxhbi0+aW5kZXgpKSk7CisJICAgIGZuX3ByaW50enAobmRvLCB0cHRyICsgVlRQX1ZMQU5fSU5GT19PRkZTRVQsIHZ0cF92bGFuLT5uYW1lX2xlbiwgTlVMTCk7CiAKICAgICAgICAgICAgIC8qCiAgICAgICAgICAgICAgKiBWbGFuIG5hbWVzIGFyZSBhbGlnbmVkIHRvIDMyLWJpdCBib3VuZGFyaWVzLgpAQCAtMzM4LDE1ICszNDcsMTYgQEAKIAkgKgogCSAqICAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLQkgKiAgfCAgICAgVmVyc2lvbiAgIHwgICAgIENvZGUgICAgICB8ICAgUmVzZXJ2ZWQgICAgfCAgICBNbWd0RCBMZW4gIHwKKwkgKiAgfCAgICAgVmVyc2lvbiAgIHwgICAgIENvZGUgICAgICB8ICAgUmVzZXJ2ZWQgICAgfCAgICBNZ210RCBMZW4gIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKLQkgKiAgfCAgICAgICAgICAgICAgICAgICAgTWFuYWdlbWVudCBEb21haW4gTmFtZSAgICAgICAgICAgICAgICAgICAgIHwKKwkgKiAgfCAgICAgICBNYW5hZ2VtZW50IERvbWFpbiBOYW1lICAoemVyby1wYWRkZWQgdG8gMzIgYnl0ZXMpICAgICAgIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKIAkgKiAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgU3RhcnQgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgIHwKIAkgKiAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKIAkgKgogCSAqLwogCisJTkRfVENIRUNLMigqdHB0ciwgNCk7CiAJTkRfUFJJTlQoKG5kbywgIlxuXHRTdGFydCB2YWx1ZTogJXUiLCBFWFRSQUNUXzMyQklUUyh0cHRyKSkpOwogCWJyZWFrOwogCmRpZmYgLS1naXQgYS9wcmludC12eGxhbi1ncGUuYyBiL3ByaW50LXZ4bGFuLWdwZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZkMTcwZGUKLS0tIC9kZXYvbnVsbAorKysgYi9wcmludC12eGxhbi1ncGUuYwpAQCAtMCwwICsxLDExMyBAQAorLyogQ29weXJpZ2h0IChjKSAyMDE1LCBidWd5bworICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucyBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLAorICogICAgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwKKyAqICAgIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlIGRvY3VtZW50YXRpb24KKyAqICAgIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQKKyAqIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTCisgKiBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisvKiBcc3VtbWFyeTogR2VuZXJpYyBQcm90b2NvbCBFeHRlbnNpb24gZm9yIFZYTEFOIChWWExBTiBHUEUpIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogZHJhZnQtaWV0Zi1udm8zLXZ4bGFuLWdwZS0wMSAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgorCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorI2luY2x1ZGUgImV4dHJhY3QuaCIKKworc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfFZYTEFOLUdQRV0iOworc3RhdGljIGNvbnN0IHN0cnVjdCB0b2sgdnhsYW5fZ3BlX2ZsYWdzIFtdID0geworICAgIHsgMHgwOCwgIkkiIH0sCisgICAgeyAweDA0LCAiUCIgfSwKKyAgICB7IDB4MDEsICJPIiB9LAorICAgIHsgMCwgTlVMTCB9Cit9OworCisjZGVmaW5lIFZYTEFOX0dQRV9IRFJfTEVOIDgKKworLyoKKyAqIFZYTEFOIEdQRSBoZWFkZXIsIGRyYWZ0LWlldGYtbnZvMy12eGxhbi1ncGUtMDEKKyAqICAgICAgICAgICAgICAgICAgIEdlbmVyaWMgUHJvdG9jb2wgRXh0ZW5zaW9uIGZvciBWWExBTgorICoKKyAqICAgICAwICAgICAgICAgICAgICAgICAgIDEgICAgICAgICAgICAgICAgICAgMiAgICAgICAgICAgICAgICAgICAzCisgKiAgICAgMCAxIDIgMyA0IDUgNiA3IDggOSAwIDEgMiAzIDQgNSA2IDcgOCA5IDAgMSAyIDMgNCA1IDYgNyA4IDkgMCAxCisgKiAgICArLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKworICogICAgfFJ8UnxWZXJ8SXxQfFJ8T3wgICAgICAgUmVzZXJ2ZWQgICAgICAgICAgICAgICAgfE5leHQgUHJvdG9jb2wgIHwKKyAqICAgICstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rCisgKiAgICB8ICAgICAgICAgICAgICAgIFZYTEFOIE5ldHdvcmsgSWRlbnRpZmllciAoVk5JKSB8ICAgUmVzZXJ2ZWQgICAgfAorICogICAgKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSstKy0rLSsKKyAqLworCit2b2lkCit2eGxhbl9ncGVfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbikKK3sKKyAgICB1aW50OF90IGZsYWdzOworICAgIHVpbnQ4X3QgbmV4dF9wcm90b2NvbDsKKyAgICB1aW50MzJfdCB2bmk7CisKKyAgICBpZiAobGVuIDwgVlhMQU5fR1BFX0hEUl9MRU4pCisgICAgICAgIGdvdG8gdHJ1bmM7CisKKyAgICBORF9UQ0hFQ0syKCpicCwgVlhMQU5fR1BFX0hEUl9MRU4pOworCisgICAgZmxhZ3MgPSAqYnA7CisgICAgYnAgKz0gMzsKKworICAgIG5leHRfcHJvdG9jb2wgPSAqYnA7CisgICAgYnAgKz0gMTsKKworICAgIHZuaSA9IEVYVFJBQ1RfMjRCSVRTKGJwKTsKKyAgICBicCArPSA0OworCisgICAgTkRfUFJJTlQoKG5kbywgIlZYTEFOLUdQRSwgIikpOworICAgIE5EX1BSSU5UKChuZG8sICJmbGFncyBbJXNdLCAiLAorICAgICAgICAgICAgICBiaXR0b2syc3RyX25vc2VwKHZ4bGFuX2dwZV9mbGFncywgIm5vbmUiLCBmbGFncykpKTsKKyAgICBORF9QUklOVCgobmRvLCAidm5pICV1Iiwgdm5pKSk7CisgICAgTkRfUFJJTlQoKG5kbywgbmRvLT5uZG9fdmZsYWcgPyAiXG4gICAgIiA6ICI6ICIpKTsKKworICAgIHN3aXRjaCAobmV4dF9wcm90b2NvbCkgeworICAgIGNhc2UgMHgxOgorICAgICAgICBpcF9wcmludChuZG8sIGJwLCBsZW4gLSA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDI6CisgICAgICAgIGlwNl9wcmludChuZG8sIGJwLCBsZW4gLSA4KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDM6CisgICAgICAgIGV0aGVyX3ByaW50KG5kbywgYnAsIGxlbiAtIDgsIG5kby0+bmRvX3NuYXBlbmQgLSBicCwgTlVMTCwgTlVMTCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHg0OgorICAgICAgICBuc2hfcHJpbnQobmRvLCBicCwgbGVuIC0gOCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHg1OgorICAgICAgICBtcGxzX3ByaW50KG5kbywgYnAsIGxlbiAtIDgpOworICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBORF9QUklOVCgobmRvLCAiRVJST1I6IHVua25vd24tbmV4dC1wcm90b2NvbCIpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworCXJldHVybjsKKwordHJ1bmM6CisJTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOworfQorCmRpZmYgLS1naXQgYS9wcmludC12eGxhbi5jIGIvcHJpbnQtdnhsYW4uYwppbmRleCBjNGRlNjhkLi4wYzJhODJlIDEwMDY0NAotLS0gYS9wcmludC12eGxhbi5jCisrKyBiL3ByaW50LXZ4bGFuLmMKQEAgLTEzLDE2ICsxMywyMyBAQAogICogT3JpZ2luYWwgY29kZSBieSBGcmFuY2VzY28gRm9uZGVsbGkgKGZyYW5jZXNjbyBkb3QgZm9uZGVsbGksIGdtYWlsIGRvdCBjb20pCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pIHByaW50ZXIgKi8KKworLyogc3BlY2lmaWNhdGlvbjogUkZDIDczNDggKi8KKwogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIAorc3RhdGljIGNvbnN0IGNoYXIgdHN0cltdID0gIiBbfFZYTEFOXSI7CisKKyNkZWZpbmUgVlhMQU5fSERSX0xFTiA4CisKIC8qCiAgKiBWWExBTiBoZWFkZXIsIFJGQzczNDgKICAqICAgICAgICAgICAgICAgVmlydHVhbCBlWHRlbnNpYmxlIExvY2FsIEFyZWEgTmV0d29yayAoVlhMQU4pOiBBIEZyYW1ld29yawpAQCAtNDMsMTAgKzUwLDEwIEBACiAgICAgdWludDhfdCBmbGFnczsKICAgICB1aW50MzJfdCB2bmk7CiAKLSAgICBpZiAobGVuIDwgOCkgewotICAgICAgICBORF9QUklOVCgobmRvLCAiW3xWWExBTl0iKSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAgaWYgKGxlbiA8IFZYTEFOX0hEUl9MRU4pCisgICAgICAgIGdvdG8gdHJ1bmM7CisKKyAgICBORF9UQ0hFQ0syKCpicCwgVlhMQU5fSERSX0xFTik7CiAKICAgICBmbGFncyA9ICpicDsKICAgICBicCArPSA0OwpAQCAtNTgsNSArNjUsMTAgQEAKICAgICBORF9QUklOVCgobmRvLCAiZmxhZ3MgWyVzXSAoMHglMDJ4KSwgIiwgZmxhZ3MgJiAweDA4ID8gIkkiIDogIi4iLCBmbGFncykpOwogICAgIE5EX1BSSU5UKChuZG8sICJ2bmkgJXVcbiIsIHZuaSkpOwogCi0gICAgZXRoZXJfcHJpbnQobmRvLCBicCwgbGVuIC0gOCwgbGVuIC0gOCwgTlVMTCwgTlVMTCk7CisgICAgZXRoZXJfcHJpbnQobmRvLCBicCwgbGVuIC0gVlhMQU5fSERSX0xFTiwgbmRvLT5uZG9fc25hcGVuZCAtIGJwLCBOVUxMLCBOVUxMKTsKKworICAgIHJldHVybjsKKwordHJ1bmM6CisgICAgTkRfUFJJTlQoKG5kbywgIiVzIiwgdHN0cikpOwogfQpkaWZmIC0tZ2l0IGEvcHJpbnQtd2IuYyBiL3ByaW50LXdiLmMKaW5kZXggZTEwZDUzMi4uODg4NTdkOSAxMDA2NDQKLS0tIGEvcHJpbnQtd2IuYworKysgYi9wcmludC13Yi5jCkBAIC0xOSwxNCArMTksMTUgQEAKICAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogV2hpdGUgQm9hcmQgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAiYWRkcnRvbmFtZS5oIgogI2luY2x1ZGUgImV4dHJhY3QuaCIKIApAQCAtNDgsOCArNDksOCBAQAogI2RlZmluZSBET1BfQUxJR04gNAogI2RlZmluZSBET1BfUk9VTkRVUCh4KQkoKCgoaW50KSh4KSkgKyAoRE9QX0FMSUdOIC0gMSkpICYgfihET1BfQUxJR04gLSAxKSkKICNkZWZpbmUgRE9QX05FWFQoZClcCi0JKChzdHJ1Y3QgZG9waGRyICopKCh1X2NoYXIgKikoZCkgKyBcCi0JCQkgIERPUF9ST1VORFVQKEVYVFJBQ1RfMTZCSVRTKCYoZCktPmRoX2xlbikgKyBzaXplb2YoKihkKSkpKSkKKwkoKGNvbnN0IHN0cnVjdCBkb3BoZHIgKikoKGNvbnN0IHVfY2hhciAqKShkKSArIFwKKwkJCQlET1BfUk9VTkRVUChFWFRSQUNUXzE2QklUUygmKGQpLT5kaF9sZW4pICsgc2l6ZW9mKCooZCkpKSkpCiAKIC8qCiAgKiBGb3JtYXQgb2YgdGhlIHdoaXRlYm9hcmQgcGFja2V0IGhlYWRlci4KQEAgLTIwMCwxMSArMjAxLDExIEBACiAKIAluaWQgPSBFWFRSQUNUXzE2QklUUygmaWQtPnBpX3BzLm5pZCk7CiAJbGVuIC09IHNpemVvZigqaW8pICogbmlkOwotCWlvID0gKHN0cnVjdCBpZF9vZmYgKikoaWQgKyAxKTsKLQljcCA9IChjaGFyICopKGlvICsgbmlkKTsKKwlpbyA9IChjb25zdCBzdHJ1Y3QgaWRfb2ZmICopKGlkICsgMSk7CisJY3AgPSAoY29uc3QgY2hhciAqKShpbyArIG5pZCk7CiAJaWYgKE5EX1RURVNUMihjcCwgbGVuKSkgewogCQlORF9QUklOVCgobmRvLCAiXCIiKSk7Ci0JCWZuX3ByaW50KG5kbywgKHVfY2hhciAqKWNwLCAodV9jaGFyICopY3AgKyBsZW4pOworCQlmbl9wcmludChuZG8sIChjb25zdCB1X2NoYXIgKiljcCwgKGNvbnN0IHVfY2hhciAqKWNwICsgbGVuKTsKIAkJTkRfUFJJTlQoKG5kbywgIlwiIikpOwogCX0KIApAQCAtMjc1LDE2ICsyNzYsMTYgQEAKIAkJICAgIEVYVFJBQ1RfMzJCSVRTKCZwcy0+c2xvdCksCiAJCSAgICBpcGFkZHJfc3RyaW5nKG5kbywgJnBzLT5wYWdlLnBfc2lkKSwKIAkJICAgIEVYVFJBQ1RfMzJCSVRTKCZwcy0+cGFnZS5wX3VpZCkpKTsKLQkJaW8gPSAoc3RydWN0IGlkX29mZiAqKShwcyArIDEpOworCQlpbyA9IChjb25zdCBzdHJ1Y3QgaWRfb2ZmICopKHBzICsgMSk7CiAJCWZvciAoaWUgPSBpbyArIHBzLT5uaWQ7IGlvIDwgaWUgJiYgTkRfVFRFU1QoKmlvKTsgKytpbykgewogCQkJTkRfUFJJTlQoKG5kbywgIiVjJXM6JXUiLCBjLCBpcGFkZHJfc3RyaW5nKG5kbywgJmlvLT5pZCksCiAJCQkgICAgRVhUUkFDVF8zMkJJVFMoJmlvLT5vZmYpKSk7CiAJCQljID0gJywnOwogCQl9CiAJCU5EX1BSSU5UKChuZG8sICI+IikpOwotCQlwcyA9IChzdHJ1Y3QgcGdzdGF0ZSAqKWlvOworCQlwcyA9IChjb25zdCBzdHJ1Y3QgcGdzdGF0ZSAqKWlvOwogCX0KLQlyZXR1cm4gKCh1X2NoYXIgKilwcyA8PSBlcD8gMCA6IC0xKTsKKwlyZXR1cm4gKChjb25zdCB1X2NoYXIgKilwcyA8PSBlcD8gMCA6IC0xKTsKIH0KIAogCkBAIC00MTYsMzIgKzQxNywzMiBAQAogCQlyZXR1cm47CiAKIAljYXNlIFBUX0lEOgotCQlpZiAod2JfaWQobmRvLCAoc3RydWN0IHBrdF9pZCAqKShwaCArIDEpLCBsZW4pID49IDApCisJCWlmICh3Yl9pZChuZG8sIChjb25zdCBzdHJ1Y3QgcGt0X2lkICopKHBoICsgMSksIGxlbikgPj0gMCkKIAkJCXJldHVybjsKIAkJYnJlYWs7CiAKIAljYXNlIFBUX1JSRVE6Ci0JCWlmICh3Yl9ycmVxKG5kbywgKHN0cnVjdCBwa3RfcnJlcSAqKShwaCArIDEpLCBsZW4pID49IDApCisJCWlmICh3Yl9ycmVxKG5kbywgKGNvbnN0IHN0cnVjdCBwa3RfcnJlcSAqKShwaCArIDEpLCBsZW4pID49IDApCiAJCQlyZXR1cm47CiAJCWJyZWFrOwogCiAJY2FzZSBQVF9SUkVQOgotCQlpZiAod2JfcnJlcChuZG8sIChzdHJ1Y3QgcGt0X3JyZXAgKikocGggKyAxKSwgbGVuKSA+PSAwKQorCQlpZiAod2JfcnJlcChuZG8sIChjb25zdCBzdHJ1Y3QgcGt0X3JyZXAgKikocGggKyAxKSwgbGVuKSA+PSAwKQogCQkJcmV0dXJuOwogCQlicmVhazsKIAogCWNhc2UgUFRfRFJBV09QOgotCQlpZiAod2JfZHJhd29wKG5kbywgKHN0cnVjdCBwa3RfZG9wICopKHBoICsgMSksIGxlbikgPj0gMCkKKwkJaWYgKHdiX2RyYXdvcChuZG8sIChjb25zdCBzdHJ1Y3QgcGt0X2RvcCAqKShwaCArIDEpLCBsZW4pID49IDApCiAJCQlyZXR1cm47CiAJCWJyZWFrOwogCiAJY2FzZSBQVF9QUkVROgotCQlpZiAod2JfcHJlcShuZG8sIChzdHJ1Y3QgcGt0X3ByZXEgKikocGggKyAxKSwgbGVuKSA+PSAwKQorCQlpZiAod2JfcHJlcShuZG8sIChjb25zdCBzdHJ1Y3QgcGt0X3ByZXEgKikocGggKyAxKSwgbGVuKSA+PSAwKQogCQkJcmV0dXJuOwogCQlicmVhazsKIAogCWNhc2UgUFRfUFJFUDoKLQkJaWYgKHdiX3ByZXAobmRvLCAoc3RydWN0IHBrdF9wcmVwICopKHBoICsgMSksIGxlbikgPj0gMCkKKwkJaWYgKHdiX3ByZXAobmRvLCAoY29uc3Qgc3RydWN0IHBrdF9wcmVwICopKHBoICsgMSksIGxlbikgPj0gMCkKIAkJCXJldHVybjsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL3ByaW50LXplcGh5ci5jIGIvcHJpbnQtemVwaHlyLmMKaW5kZXggODEzMmM0OS4uMzhiMGNkMCAxMDA2NDQKLS0tIGEvcHJpbnQtemVwaHlyLmMKKysrIGIvcHJpbnQtemVwaHlyLmMKQEAgLTIwLDM3ICsyMCwzOCBAQAogICogUFVSUE9TRS4KICAqLwogCi0jZGVmaW5lIE5FVERJU1NFQ1RfUkVXT1JLRUQKKy8qIFxzdW1tYXJ5OiBaZXBoeXIgcHJpbnRlciAqLworCiAjaWZkZWYgSEFWRV9DT05GSUdfSAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2VuZGlmCiAKLSNpbmNsdWRlIDx0Y3BkdW1wLXN0ZGluYy5oPgorI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CiAKICNpbmNsdWRlIDxzdGRpby5oPgogI2luY2x1ZGUgPHN0cmluZy5oPgogI2luY2x1ZGUgPHN0ZGxpYi5oPgogCi0jaW5jbHVkZSAiaW50ZXJmYWNlLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgogCiBzdHJ1Y3Qgel9wYWNrZXQgewotICAgIGNoYXIgKnZlcnNpb247CisgICAgY29uc3QgY2hhciAqdmVyc2lvbjsKICAgICBpbnQgbnVtZmllbGRzOwogICAgIGludCBraW5kOwotICAgIGNoYXIgKnVpZDsKKyAgICBjb25zdCBjaGFyICp1aWQ7CiAgICAgaW50IHBvcnQ7CiAgICAgaW50IGF1dGg7CiAgICAgaW50IGF1dGhsZW47Ci0gICAgY2hhciAqYXV0aGRhdGE7Ci0gICAgY2hhciAqY2xhc3M7Ci0gICAgY2hhciAqaW5zdDsKLSAgICBjaGFyICpvcGNvZGU7Ci0gICAgY2hhciAqc2VuZGVyOworICAgIGNvbnN0IGNoYXIgKmF1dGhkYXRhOworICAgIGNvbnN0IGNoYXIgKmNsYXNzOworICAgIGNvbnN0IGNoYXIgKmluc3Q7CisgICAgY29uc3QgY2hhciAqb3Bjb2RlOworICAgIGNvbnN0IGNoYXIgKnNlbmRlcjsKICAgICBjb25zdCBjaGFyICpyZWNpcGllbnQ7Ci0gICAgY2hhciAqZm9ybWF0OworICAgIGNvbnN0IGNoYXIgKmZvcm1hdDsKICAgICBpbnQgY2tzdW07CiAgICAgaW50IG11bHRpOwotICAgIGNoYXIgKm11bHRpX3VpZDsKKyAgICBjb25zdCBjaGFyICptdWx0aV91aWQ7CiAgICAgLyogT3RoZXIgZmllbGRzIGZvbGxvdyBoZXJlLi4gKi8KIH07CiAKQEAgLTgwLDMwICs4MSwzMCBAQAogCiBzdGF0aWMgY2hhciB6X2J1ZlsyNTZdOwogCi1zdGF0aWMgY2hhciAqCi1wYXJzZV9maWVsZChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY2hhciAqKnBwdHIsIGludCAqbGVuKQorc3RhdGljIGNvbnN0IGNoYXIgKgorcGFyc2VfZmllbGQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IGNoYXIgKipwcHRyLCBpbnQgKmxlbikKIHsKLSAgICBjaGFyICpzOworICAgIGNvbnN0IGNoYXIgKnM7CiAKICAgICBpZiAoKmxlbiA8PSAwIHx8ICFwcHRyIHx8ICEqcHB0cikKIAlyZXR1cm4gTlVMTDsKLSAgICBpZiAoKnBwdHIgPiAoY2hhciAqKSBuZG8tPm5kb19zbmFwZW5kKQorICAgIGlmICgqcHB0ciA+IChjb25zdCBjaGFyICopIG5kby0+bmRvX3NuYXBlbmQpCiAJcmV0dXJuIE5VTEw7CiAKICAgICBzID0gKnBwdHI7Ci0gICAgd2hpbGUgKCpwcHRyIDw9IChjaGFyICopIG5kby0+bmRvX3NuYXBlbmQgJiYgKmxlbiA+PSAwICYmICoqcHB0cikgeworICAgIHdoaWxlICgqcHB0ciA8PSAoY29uc3QgY2hhciAqKSBuZG8tPm5kb19zbmFwZW5kICYmICpsZW4gPj0gMCAmJiAqKnBwdHIpIHsKIAkoKnBwdHIpKys7CiAJKCpsZW4pLS07CiAgICAgfQogICAgICgqcHB0cikrKzsKICAgICAoKmxlbiktLTsKLSAgICBpZiAoKmxlbiA8IDAgfHwgKnBwdHIgPiAoY2hhciAqKSBuZG8tPm5kb19zbmFwZW5kKQorICAgIGlmICgqbGVuIDwgMCB8fCAqcHB0ciA+IChjb25zdCBjaGFyICopIG5kby0+bmRvX3NuYXBlbmQpCiAJcmV0dXJuIE5VTEw7CiAgICAgcmV0dXJuIHM7CiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICoKLXpfdHJpcGxlKGNoYXIgKmNsYXNzLCBjaGFyICppbnN0LCBjb25zdCBjaGFyICpyZWNpcGllbnQpCit6X3RyaXBsZShjb25zdCBjaGFyICpjbGFzcywgY29uc3QgY2hhciAqaW5zdCwgY29uc3QgY2hhciAqcmVjaXBpZW50KQogewogICAgIGlmICghKnJlY2lwaWVudCkKIAlyZWNpcGllbnQgPSAiKiI7CkBAIC0xMTMsMTUgKzExNCwxNyBAQAogfQogCiBzdGF0aWMgY29uc3QgY2hhciAqCi1zdHJfdG9fbG93ZXIoY2hhciAqc3RyaW5nKQorc3RyX3RvX2xvd2VyKGNvbnN0IGNoYXIgKnN0cmluZykKIHsKKyAgICBjaGFyICp6Yl9zdHJpbmc7CisKICAgICBzdHJuY3B5KHpfYnVmLCBzdHJpbmcsIHNpemVvZih6X2J1ZikpOwogICAgIHpfYnVmW3NpemVvZih6X2J1ZiktMV0gPSAnXDAnOwogCi0gICAgc3RyaW5nID0gel9idWY7Ci0gICAgd2hpbGUgKCpzdHJpbmcpIHsKLQkqc3RyaW5nID0gdG9sb3dlcigodW5zaWduZWQgY2hhcikoKnN0cmluZykpOwotCXN0cmluZysrOworICAgIHpiX3N0cmluZyA9IHpfYnVmOworICAgIHdoaWxlICgqemJfc3RyaW5nKSB7CisJKnpiX3N0cmluZyA9IHRvbG93ZXIoKHVuc2lnbmVkIGNoYXIpKCp6Yl9zdHJpbmcpKTsKKwl6Yl9zdHJpbmcrKzsKICAgICB9CiAKICAgICByZXR1cm4gel9idWY7CkBAIC0xMzEsOSArMTM0LDkgQEAKIHplcGh5cl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpjcCwgaW50IGxlbmd0aCkKIHsKICAgICBzdHJ1Y3Qgel9wYWNrZXQgejsKLSAgICBjaGFyICpwYXJzZSA9IChjaGFyICopIGNwOworICAgIGNvbnN0IGNoYXIgKnBhcnNlID0gKGNvbnN0IGNoYXIgKikgY3A7CiAgICAgaW50IHBhcnNlbGVuID0gbGVuZ3RoOwotICAgIGNoYXIgKnM7CisgICAgY29uc3QgY2hhciAqczsKICAgICBpbnQgbG9zZSA9IDA7CiAKICAgICAvKiBzcXVlbGNoIGNvbXBpbGVyIHdhcm5pbmdzICovCkBAIC0xOTMsNyArMTk2LDcgQEAKICAgICBORF9QUklOVCgobmRvLCAiICVzIiwgdG9rMnN0cih6X3R5cGVzLCAidHlwZSAlZCIsIHoua2luZCkpKTsKICAgICBpZiAoei5raW5kID09IFpfUEFDS0VUX1NFUlZBQ0spIHsKIAkvKiBJbml0aWFsaXphdGlvbiB0byBzaWxlbmNlIHdhcm5pbmdzICovCi0JY2hhciAqYWNrZGF0YSA9IE5VTEw7CisJY29uc3QgY2hhciAqYWNrZGF0YSA9IE5VTEw7CiAJUEFSU0VfRklFTERfU1RSKGFja2RhdGEpOwogCWlmICghbG9zZSAmJiBzdHJjbXAoYWNrZGF0YSwgIlNFTlQiKSkKIAkgICAgTkRfUFJJTlQoKG5kbywgIi8lcyIsIHN0cl90b19sb3dlcihhY2tkYXRhKSkpOwpAQCAtMjI2LDcgKzIyOSw3IEBACiAJCQkJCQkJCSAgICItbm9kZWZzIikpOwogCQlpZiAoei5raW5kICE9IFpfUEFDS0VUX1NFUlZBQ0spIHsKIAkJICAgIC8qIEluaXRpYWxpemF0aW9uIHRvIHNpbGVuY2Ugd2FybmluZ3MgKi8KLQkJICAgIGNoYXIgKmMgPSBOVUxMLCAqaSA9IE5VTEwsICpyID0gTlVMTDsKKwkJICAgIGNvbnN0IGNoYXIgKmMgPSBOVUxMLCAqaSA9IE5VTEwsICpyID0gTlVMTDsKIAkJICAgIFBBUlNFX0ZJRUxEX1NUUihjKTsKIAkJICAgIFBBUlNFX0ZJRUxEX1NUUihpKTsKIAkJICAgIFBBUlNFX0ZJRUxEX1NUUihyKTsKZGlmZiAtLWdpdCBhL3ByaW50LXplcm9tcS5jIGIvcHJpbnQtemVyb21xLmMKaW5kZXggYmEyMmM5Ni4uYTIzZDk4YSAxMDA2NDQKLS0tIGEvcHJpbnQtemVyb21xLmMKKysrIGIvcHJpbnQtemVyb21xLmMKQEAgLTEsNyArMSw0IEBACiAvKgotICogVGhpcyBmaWxlIGltcGxlbWVudHMgZGVjb2Rpbmcgb2YgWmVyb01RIG5ldHdvcmsgcHJvdG9jb2wocykuCi0gKgotICoKICAqIENvcHlyaWdodCAoYykgMjAxMyBUaGUgVENQRFVNUCBwcm9qZWN0CiAgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKQEAgLTI4LDE0ICsyNSwxNSBAQAogICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAotI2RlZmluZSBORVRESVNTRUNUX1JFV09SS0VECisvKiBcc3VtbWFyeTogWmVyb01RIE1lc3NhZ2UgVHJhbnNwb3J0IFByb3RvY29sIChaTVRQKSBwcmludGVyICovCisKICNpZmRlZiBIQVZFX0NPTkZJR19ICiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPHRjcGR1bXAtc3RkaW5jLmg+CisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAKIHN0YXRpYyBjb25zdCBjaGFyIHRzdHJbXSA9ICIgW3x6bXRwMV0iOwpAQCAtODcsMjIgKzg1LDE4IEBACiAJaWYgKGNwWzBdICE9IDB4RkYpIHsKIAkJaGVhZGVyX2xlbiA9IDE7IC8qIGxlbmd0aCAqLwogCQlib2R5X2xlbl9kZWNsYXJlZCA9IGNwWzBdOwotCQlpZiAoYm9keV9sZW5fZGVjbGFyZWQgPT0gMCkKLQkJCXJldHVybiBjcCArIGhlYWRlcl9sZW47IC8qIHNraXAgdG8gbmV4dCBmcmFtZSAqLwotCQlORF9QUklOVCgobmRvLCAiIGZyYW1lIGZsYWdzK2JvZHkgICg4LWJpdCkgbGVuZ3RoICV1IiwgY3BbMF0pKTsKLQkJTkRfVENIRUNLMigqY3AsIGhlYWRlcl9sZW4gKyAxKTsgLyogbGVuZ3RoLCBmbGFncyAqLwotCQlmbGFncyA9IGNwWzFdOworCQlORF9QUklOVCgobmRvLCAiIGZyYW1lIGZsYWdzK2JvZHkgICg4LWJpdCkgbGVuZ3RoICUiIFBSSXU2NCwgYm9keV9sZW5fZGVjbGFyZWQpKTsKIAl9IGVsc2UgewogCQloZWFkZXJfbGVuID0gMSArIDg7IC8qIDB4RkYsIGxlbmd0aCAqLwogCQlORF9QUklOVCgobmRvLCAiIGZyYW1lIGZsYWdzK2JvZHkgKDY0LWJpdCkgbGVuZ3RoIikpOwogCQlORF9UQ0hFQ0syKCpjcCwgaGVhZGVyX2xlbik7IC8qIDB4RkYsIGxlbmd0aCAqLwogCQlib2R5X2xlbl9kZWNsYXJlZCA9IEVYVFJBQ1RfNjRCSVRTKGNwICsgMSk7Ci0JCWlmIChib2R5X2xlbl9kZWNsYXJlZCA9PSAwKQotCQkJcmV0dXJuIGNwICsgaGVhZGVyX2xlbjsgLyogc2tpcCB0byBuZXh0IGZyYW1lICovCiAJCU5EX1BSSU5UKChuZG8sICIgJSIgUFJJdTY0LCBib2R5X2xlbl9kZWNsYXJlZCkpOwotCQlORF9UQ0hFQ0syKCpjcCwgaGVhZGVyX2xlbiArIDEpOyAvKiAweEZGLCBsZW5ndGgsIGZsYWdzICovCi0JCWZsYWdzID0gY3BbOV07CiAJfQorCWlmIChib2R5X2xlbl9kZWNsYXJlZCA9PSAwKQorCQlyZXR1cm4gY3AgKyBoZWFkZXJfbGVuOyAvKiBza2lwIHRvIHRoZSBuZXh0IGZyYW1lICovCisJTkRfVENIRUNLMigqY3AsIGhlYWRlcl9sZW4gKyAxKTsgLyogLi4uLCBmbGFncyAqLworCWZsYWdzID0gY3BbaGVhZGVyX2xlbl07CiAKIAlib2R5X2xlbl9jYXB0dXJlZCA9IGVwIC0gY3AgLSBoZWFkZXJfbGVuOwogCWlmIChib2R5X2xlbl9kZWNsYXJlZCA+IGJvZHlfbGVuX2NhcHR1cmVkKQpAQCAtMTMxLDggKzEyNSwxNSBAQAogCQl9CiAJfQogCi0JTkRfVENIRUNLMigqY3AsIGhlYWRlcl9sZW4gKyBib2R5X2xlbl9kZWNsYXJlZCk7IC8qIE5leHQgZnJhbWUgd2l0aGluIHRoZSBidWZmZXIgPyAqLwotCXJldHVybiBjcCArIGhlYWRlcl9sZW4gKyBib2R5X2xlbl9kZWNsYXJlZDsKKwkvKgorCSAqIERvIG5vdCBhZHZhbmNlIGNwIGJ5IHRoZSBzdW0gb2YgaGVhZGVyX2xlbiBhbmQgYm9keV9sZW5fZGVjbGFyZWQKKwkgKiBiZWZvcmUgZWFjaCBvZmZzZXQgaGFzIHN1Y2Nlc3NmdWxseSBwYXNzZWQgTkRfVENIRUNLMigpIGFzIHRoZQorCSAqIHN1bSBjYW4gcm9sbCBvdmVyICg5ICsgMHhmZmZmZmZmZmZmZmZmZmY3ID0gMCkgYW5kIGNhdXNlIGFuCisJICogaW5maW5pdGUgbG9vcC4KKwkgKi8KKwljcCArPSBoZWFkZXJfbGVuOworCU5EX1RDSEVDSzIoKmNwLCBib2R5X2xlbl9kZWNsYXJlZCk7IC8qIE5leHQgZnJhbWUgd2l0aGluIHRoZSBidWZmZXIgPyAqLworCXJldHVybiBjcCArIGJvZHlfbGVuX2RlY2xhcmVkOwogCiB0cnVuYzoKIAlORF9QUklOVCgobmRvLCAiJXMiLCB0c3RyKSk7CmRpZmYgLS1naXQgYS9wcmludC5jIGIvcHJpbnQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MWNhOWNhCi0tLSAvZGV2L251bGwKKysrIGIvcHJpbnQuYwpAQCAtMCwwICsxLDQ4NCBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMTk4OCwgMTk4OSwgMTk5MCwgMTk5MSwgMTk5MiwgMTk5MywgMTk5NCwgMTk5NSwgMTk5NiwgMTk5NywgMjAwMAorICoJVGhlIFJlZ2VudHMgb2YgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYS4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKyAqIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKKyAqIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCisgKiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKKyAqIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisgKiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIFN1cHBvcnQgZm9yIHNwbGl0dGluZyBjYXB0dXJlcyBpbnRvIG11bHRpcGxlIGZpbGVzIHdpdGggYSBtYXhpbXVtCisgKiBmaWxlIHNpemU6CisgKgorICogQ29weXJpZ2h0IChjKSAyMDAxCisgKglTZXRoIFdlYnN0ZXIgPHN3ZWJzdGVyQHNzdC5sbC5taXQuZWR1PgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKworI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKKyNpbmNsdWRlICJhZGRydG9uYW1lLmgiCisjaW5jbHVkZSAicHJpbnQuaCIKKworc3RydWN0IHByaW50ZXIgeworCWlmX3ByaW50ZXIgZjsKKwlpbnQgdHlwZTsKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHJpbnRlciBwcmludGVyc1tdID0geworCXsgZXRoZXJfaWZfcHJpbnQsCURMVF9FTjEwTUIgfSwKKyNpZmRlZiBETFRfSVBORVQKKwl7IGlwbmV0X2lmX3ByaW50LAlETFRfSVBORVQgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9JRUVFODAyXzE1XzQKKwl7IGllZWU4MDJfMTVfNF9pZl9wcmludCwgRExUX0lFRUU4MDJfMTVfNCB9LAorI2VuZGlmCisjaWZkZWYgRExUX0lFRUU4MDJfMTVfNF9OT0ZDUworCXsgaWVlZTgwMl8xNV80X2lmX3ByaW50LCBETFRfSUVFRTgwMl8xNV80X05PRkNTIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfUFBJCisJeyBwcGlfaWZfcHJpbnQsCQlETFRfUFBJIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfTkVUQU5BTFlaRVIKKwl7IG5ldGFuYWx5emVyX2lmX3ByaW50LCBETFRfTkVUQU5BTFlaRVIgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9ORVRBTkFMWVpFUl9UUkFOU1BBUkVOVAorCXsgbmV0YW5hbHl6ZXJfdHJhbnNwYXJlbnRfaWZfcHJpbnQsIERMVF9ORVRBTkFMWVpFUl9UUkFOU1BBUkVOVCB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChETFRfTkZMT0cpICYmIGRlZmluZWQoSEFWRV9QQ0FQX05GTE9HX0gpCisJeyBuZmxvZ19pZl9wcmludCwJRExUX05GTE9HfSwKKyNlbmRpZgorI2lmZGVmIERMVF9DSVAKKwl7IGNpcF9pZl9wcmludCwgICAgICAgICBETFRfQ0lQIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfQVRNX0NMSVAKKwl7IGNpcF9pZl9wcmludCwJCURMVF9BVE1fQ0xJUCB9LAorI2VuZGlmCisjaWZkZWYgRExUX0lQX09WRVJfRkMKKwl7IGlwZmNfaWZfcHJpbnQsCURMVF9JUF9PVkVSX0ZDIH0sCisjZW5kaWYKKwl7IG51bGxfaWZfcHJpbnQsCURMVF9OVUxMIH0sCisjaWZkZWYgRExUX0xPT1AKKwl7IG51bGxfaWZfcHJpbnQsCURMVF9MT09QIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfQVBQTEVfSVBfT1ZFUl9JRUVFMTM5NAorCXsgYXAxMzk0X2lmX3ByaW50LAlETFRfQVBQTEVfSVBfT1ZFUl9JRUVFMTM5NCB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChETFRfQkxVRVRPT1RIX0hDSV9INF9XSVRIX1BIRFIpICYmIGRlZmluZWQoSEFWRV9QQ0FQX0JMVUVUT09USF9IKQorCXsgYnRfaWZfcHJpbnQsCQlETFRfQkxVRVRPT1RIX0hDSV9INF9XSVRIX1BIRFJ9LAorI2VuZGlmCisjaWZkZWYgRExUX0xBTkU4MDIzCisJeyBsYW5lX2lmX3ByaW50LCAgICAgICAgRExUX0xBTkU4MDIzIH0sCisjZW5kaWYKKwl7IGFyY25ldF9pZl9wcmludCwJRExUX0FSQ05FVCB9LAorI2lmZGVmIERMVF9BUkNORVRfTElOVVgKKwl7IGFyY25ldF9saW51eF9pZl9wcmludCwgRExUX0FSQ05FVF9MSU5VWCB9LAorI2VuZGlmCisJeyByYXdfaWZfcHJpbnQsCQlETFRfUkFXIH0sCisjaWZkZWYgRExUX0lQVjQKKwl7IHJhd19pZl9wcmludCwJCURMVF9JUFY0IH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSVBWNgorCXsgcmF3X2lmX3ByaW50LAkJRExUX0lQVjYgfSwKKyNlbmRpZgorI2lmZGVmIEhBVkVfUENBUF9VU0JfSAorI2lmZGVmIERMVF9VU0JfTElOVVgKKwl7IHVzYl9saW51eF80OF9ieXRlX3ByaW50LCBETFRfVVNCX0xJTlVYfSwKKyNlbmRpZiAvKiBETFRfVVNCX0xJTlVYICovCisjaWZkZWYgRExUX1VTQl9MSU5VWF9NTUFQUEVECisJeyB1c2JfbGludXhfNjRfYnl0ZV9wcmludCwgRExUX1VTQl9MSU5VWF9NTUFQUEVEfSwKKyNlbmRpZiAvKiBETFRfVVNCX0xJTlVYX01NQVBQRUQgKi8KKyNlbmRpZiAvKiBIQVZFX1BDQVBfVVNCX0ggKi8KKyNpZmRlZiBETFRfU1lNQU5URUNfRklSRVdBTEwKKwl7IHN5bWFudGVjX2lmX3ByaW50LAlETFRfU1lNQU5URUNfRklSRVdBTEwgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9DX0hETEMKKwl7IGNoZGxjX2lmX3ByaW50LAlETFRfQ19IRExDIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSERMQworCXsgY2hkbGNfaWZfcHJpbnQsCURMVF9IRExDIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfUFBQX0VUSEVSCisJeyBwcHBvZV9pZl9wcmludCwJRExUX1BQUF9FVEhFUiB9LAorI2VuZGlmCisjaWYgZGVmaW5lZChETFRfUEZMT0cpICYmIGRlZmluZWQoSEFWRV9ORVRfSUZfUEZMT0dfSCkKKwl7IHBmbG9nX2lmX3ByaW50LAlETFRfUEZMT0cgfSwKKyNlbmRpZgorCXsgdG9rZW5faWZfcHJpbnQsCURMVF9JRUVFODAyIH0sCisJeyBmZGRpX2lmX3ByaW50LAlETFRfRkRESSB9LAorI2lmZGVmIERMVF9MSU5VWF9TTEwKKwl7IHNsbF9pZl9wcmludCwJCURMVF9MSU5VWF9TTEwgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9GUgorCXsgZnJfaWZfcHJpbnQsCQlETFRfRlIgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9GUkVMQVkKKwl7IGZyX2lmX3ByaW50LAkJRExUX0ZSRUxBWSB9LAorI2VuZGlmCisjaWZkZWYgRExUX01GUgorCXsgbWZyX2lmX3ByaW50LAkJRExUX01GUiB9LAorI2VuZGlmCisJeyBhdG1faWZfcHJpbnQsCQlETFRfQVRNX1JGQzE0ODMgfSwKKyNpZmRlZiBETFRfU1VOQVRNCisJeyBzdW5hdG1faWZfcHJpbnQsCURMVF9TVU5BVE0gfSwKKyNlbmRpZgorI2lmZGVmIERMVF9FTkMKKwl7IGVuY19pZl9wcmludCwJCURMVF9FTkMgfSwKKyNlbmRpZgorCXsgc2xfaWZfcHJpbnQsCQlETFRfU0xJUCB9LAorI2lmZGVmIERMVF9TTElQX0JTRE9TCisJeyBzbF9ic2Rvc19pZl9wcmludCwJRExUX1NMSVBfQlNET1MgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9MVEFMSworCXsgbHRhbGtfaWZfcHJpbnQsCURMVF9MVEFMSyB9LAorI2VuZGlmCisjaWZkZWYgRExUX0pVTklQRVJfQVRNMQorCXsganVuaXBlcl9hdG0xX3ByaW50LAlETFRfSlVOSVBFUl9BVE0xIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSlVOSVBFUl9BVE0yCisJeyBqdW5pcGVyX2F0bTJfcHJpbnQsCURMVF9KVU5JUEVSX0FUTTIgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9KVU5JUEVSX01GUgorCXsganVuaXBlcl9tZnJfcHJpbnQsCURMVF9KVU5JUEVSX01GUiB9LAorI2VuZGlmCisjaWZkZWYgRExUX0pVTklQRVJfTUxGUgorCXsganVuaXBlcl9tbGZyX3ByaW50LAlETFRfSlVOSVBFUl9NTEZSIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSlVOSVBFUl9NTFBQUAorCXsganVuaXBlcl9tbHBwcF9wcmludCwJRExUX0pVTklQRVJfTUxQUFAgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9KVU5JUEVSX1BQUE9FCisJeyBqdW5pcGVyX3BwcG9lX3ByaW50LAlETFRfSlVOSVBFUl9QUFBPRSB9LAorI2VuZGlmCisjaWZkZWYgRExUX0pVTklQRVJfUFBQT0VfQVRNCisJeyBqdW5pcGVyX3BwcG9lX2F0bV9wcmludCwgRExUX0pVTklQRVJfUFBQT0VfQVRNIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSlVOSVBFUl9HR1NOCisJeyBqdW5pcGVyX2dnc25fcHJpbnQsCURMVF9KVU5JUEVSX0dHU04gfSwKKyNlbmRpZgorI2lmZGVmIERMVF9KVU5JUEVSX0VTCisJeyBqdW5pcGVyX2VzX3ByaW50LAlETFRfSlVOSVBFUl9FUyB9LAorI2VuZGlmCisjaWZkZWYgRExUX0pVTklQRVJfTU9OSVRPUgorCXsganVuaXBlcl9tb25pdG9yX3ByaW50LCBETFRfSlVOSVBFUl9NT05JVE9SIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSlVOSVBFUl9TRVJWSUNFUworCXsganVuaXBlcl9zZXJ2aWNlc19wcmludCwgRExUX0pVTklQRVJfU0VSVklDRVMgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9KVU5JUEVSX0VUSEVSCisJeyBqdW5pcGVyX2V0aGVyX3ByaW50LAlETFRfSlVOSVBFUl9FVEhFUiB9LAorI2VuZGlmCisjaWZkZWYgRExUX0pVTklQRVJfUFBQCisJeyBqdW5pcGVyX3BwcF9wcmludCwJRExUX0pVTklQRVJfUFBQIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSlVOSVBFUl9GUkVMQVkKKwl7IGp1bmlwZXJfZnJlbGF5X3ByaW50LAlETFRfSlVOSVBFUl9GUkVMQVkgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9KVU5JUEVSX0NIRExDCisJeyBqdW5pcGVyX2NoZGxjX3ByaW50LAlETFRfSlVOSVBFUl9DSERMQyB9LAorI2VuZGlmCisjaWZkZWYgRExUX1BLVEFQCisJeyBwa3RhcF9pZl9wcmludCwJRExUX1BLVEFQIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfSUVFRTgwMl8xMV9SQURJTworCXsgaWVlZTgwMl8xMV9yYWRpb19pZl9wcmludCwJRExUX0lFRUU4MDJfMTFfUkFESU8gfSwKKyNlbmRpZgorI2lmZGVmIERMVF9JRUVFODAyXzExCisJeyBpZWVlODAyXzExX2lmX3ByaW50LAlETFRfSUVFRTgwMl8xMX0sCisjZW5kaWYKKyNpZmRlZiBETFRfSUVFRTgwMl8xMV9SQURJT19BVlMKKwl7IGllZWU4MDJfMTFfcmFkaW9fYXZzX2lmX3ByaW50LAlETFRfSUVFRTgwMl8xMV9SQURJT19BVlMgfSwKKyNlbmRpZgorI2lmZGVmIERMVF9QUklTTV9IRUFERVIKKwl7IHByaXNtX2lmX3ByaW50LAlETFRfUFJJU01fSEVBREVSIH0sCisjZW5kaWYKKwl7IHBwcF9pZl9wcmludCwJCURMVF9QUFAgfSwKKyNpZmRlZiBETFRfUFBQX1dJVEhESVJFQ1RJT04KKwl7IHBwcF9pZl9wcmludCwJCURMVF9QUFBfV0lUSERJUkVDVElPTiB9LAorI2VuZGlmCisjaWZkZWYgRExUX1BQUF9CU0RPUworCXsgcHBwX2JzZG9zX2lmX3ByaW50LAlETFRfUFBQX0JTRE9TIH0sCisjZW5kaWYKKyNpZmRlZiBETFRfUFBQX1NFUklBTAorCXsgcHBwX2hkbGNfaWZfcHJpbnQsCURMVF9QUFBfU0VSSUFMIH0sCisjZW5kaWYKKwl7IE5VTEwsCQkJMCB9LAorfTsKKworc3RhdGljIHZvaWQJbmRvX2RlZmF1bHRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsCisJCSAgICB1X2ludCBsZW5ndGgpOworCitzdGF0aWMgdm9pZAluZG9fZXJyb3IobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQorCQkgICAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQorI2lmZGVmIF9fQVRUUklCVVRFX19fRk9STUFUX09LCisJCSAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMiwgMykpKQorI2VuZGlmIC8qIF9fQVRUUklCVVRFX19fRk9STUFUX09LICovCisJCSAgICA7CitzdGF0aWMgdm9pZAluZG9fd2FybmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgY2hhciAqZm10LCAuLi4pCisjaWZkZWYgX19BVFRSSUJVVEVfX19GT1JNQVRfT0sKKwkJICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCisjZW5kaWYgLyogX19BVFRSSUJVVEVfX19GT1JNQVRfT0sgKi8KKwkJICAgIDsKKworc3RhdGljIGludAluZG9fcHJpbnRmKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCBjaGFyICpmbXQsIC4uLikKKyNpZmRlZiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSworCQkgICAgIF9fYXR0cmlidXRlICgoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKKyNlbmRpZiAvKiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSyAqLworCQkgICAgIDsKKwordm9pZAoraW5pdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgdWludDMyX3QgbG9jYWxuZXQsIHVpbnQzMl90IG1hc2ssCisgICAgdWludDMyX3QgdGltZXpvbmVfb2Zmc2V0KQoreworCisJdGhpc3pvbmUgPSB0aW1lem9uZV9vZmZzZXQ7CisJaW5pdF9hZGRydG9uYW1lKG5kbywgbG9jYWxuZXQsIG1hc2spOworCWluaXRfY2hlY2tzdW0oKTsKK30KKworaWZfcHJpbnRlcgorbG9va3VwX3ByaW50ZXIoaW50IHR5cGUpCit7CisJY29uc3Qgc3RydWN0IHByaW50ZXIgKnA7CisKKwlmb3IgKHAgPSBwcmludGVyczsgcC0+ZjsgKytwKQorCQlpZiAodHlwZSA9PSBwLT50eXBlKQorCQkJcmV0dXJuIHAtPmY7CisKKyNpZiBkZWZpbmVkKERMVF9VU0VSMikgJiYgZGVmaW5lZChETFRfUEtUQVApCisJLyoKKwkgKiBBcHBsZSBpbmNvcnJlY3RseSBjaG9zZSB0byB1c2UgRExUX1VTRVIyIGZvciB0aGVpciBQS1RBUAorCSAqIGhlYWRlci4KKwkgKgorCSAqIFdlIG1hcCBETFRfUEtUQVAsIHdoZXRoZXIgaXQncyBETFRfVVNFUjIgYXMgaXQgaXMgb24gRGFyd2luLQorCSAqIGJhc2VkIE9TZXMgb3IgdGhlIHNhbWUgdmFsdWUgYXMgTElOS1RZUEVfUEtUQVAgYXMgaXQgaXMgb24KKwkgKiBvdGhlciBPU2VzLCB0byBMSU5LVFlQRV9QS1RBUCwgc28gZmlsZXMgd3JpdHRlbiB3aXRoCisJICogdGhpcyB2ZXJzaW9uIG9mIGxpYnBjYXAgZm9yIGEgRExUX1BLVEFQIGNhcHR1cmUgaGF2ZSBhIGxpbmstCisJICogbGF5ZXIgaGVhZGVyIHR5cGUgb2YgTElOS1RZUEVfUEtUQVAuCisJICoKKwkgKiBIb3dldmVyLCBmaWxlcyB3cml0dGVuIG9uIE9TIFggTWF2ZXJpY2tzIGZvciBhIERMVF9QS1RBUAorCSAqIGNhcHR1cmUgaGF2ZSBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgb2YgTElOS1RZUEVfVVNFUjIuCisJICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByaW50ZXIgZm9yIERMVF9VU0VSMiwgYW5kIHR5cGUgaXMKKwkgKiBETFRfVVNFUjIsIHdlIGxvb2sgdXAgdGhlIHByaW50ZXIgZm9yIERMVF9QS1RBUCBhbmQgdXNlCisJICogdGhhdC4KKwkgKi8KKwlpZiAodHlwZSA9PSBETFRfVVNFUjIpIHsKKwkJZm9yIChwID0gcHJpbnRlcnM7IHAtPmY7ICsrcCkKKwkJCWlmIChETFRfUEtUQVAgPT0gcC0+dHlwZSkKKwkJCQlyZXR1cm4gcC0+ZjsKKwl9CisjZW5kaWYKKworCXJldHVybiBOVUxMOworCS8qIE5PVFJFQUNIRUQgKi8KK30KKworaW50CitoYXNfcHJpbnRlcihpbnQgdHlwZSkKK3sKKwlyZXR1cm4gKGxvb2t1cF9wcmludGVyKHR5cGUpICE9IE5VTEwpOworfQorCitpZl9wcmludGVyCitnZXRfaWZfcHJpbnRlcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgaW50IHR5cGUpCit7CisJY29uc3QgY2hhciAqZGx0bmFtZTsKKwlpZl9wcmludGVyIHByaW50ZXI7CisKKwlwcmludGVyID0gbG9va3VwX3ByaW50ZXIodHlwZSk7CisJaWYgKHByaW50ZXIgPT0gTlVMTCkgeworCQlkbHRuYW1lID0gcGNhcF9kYXRhbGlua192YWxfdG9fbmFtZSh0eXBlKTsKKwkJaWYgKGRsdG5hbWUgIT0gTlVMTCkKKwkJCSgqbmRvLT5uZG9fZXJyb3IpKG5kbywKKwkJCQkJICAicGFja2V0IHByaW50aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxpbmsgdHlwZSAlczogdXNlIC13IiwKKwkJCQkJICBkbHRuYW1lKTsKKwkJZWxzZQorCQkJKCpuZG8tPm5kb19lcnJvcikobmRvLAorCQkJCQkgICJwYWNrZXQgcHJpbnRpbmcgaXMgbm90IHN1cHBvcnRlZCBmb3IgbGluayB0eXBlICVkOiB1c2UgLXciLCB0eXBlKTsKKwl9CisJcmV0dXJuIHByaW50ZXI7Cit9CisKK3ZvaWQKK3ByZXR0eV9wcmludF9wYWNrZXQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwKKyAgICBjb25zdCB1X2NoYXIgKnNwLCB1X2ludCBwYWNrZXRzX2NhcHR1cmVkKQoreworCXVfaW50IGhkcmxlbjsKKworCWlmKG5kby0+bmRvX3BhY2tldF9udW1iZXIpCisJCU5EX1BSSU5UKChuZG8sICIlNXUgICIsIHBhY2tldHNfY2FwdHVyZWQpKTsKKworCXRzX3ByaW50KG5kbywgJmgtPnRzKTsKKworCS8qCisJICogU29tZSBwcmludGVycyB3YW50IHRvIGNoZWNrIHRoYXQgdGhleSdyZSBub3Qgd2Fsa2luZyBvZmYgdGhlCisJICogZW5kIG9mIHRoZSBwYWNrZXQuCisJICogUmF0aGVyIHRoYW4gcGFzcyBpdCBhbGwgdGhlIHdheSBkb3duLCB3ZSBzZXQgdGhpcyBtZW1iZXIKKwkgKiBvZiB0aGUgbmV0ZGlzc2VjdF9vcHRpb25zIHN0cnVjdHVyZS4KKwkgKi8KKwluZG8tPm5kb19zbmFwZW5kID0gc3AgKyBoLT5jYXBsZW47CisKKyAgICAgICAgaGRybGVuID0gKG5kby0+bmRvX2lmX3ByaW50ZXIpKG5kbywgaCwgc3ApOworCisJLyoKKwkgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzbmFwZW5kLCBhcyBhIHByaW50ZXIgbWlnaHQgaGF2ZQorCSAqIGNoYW5nZWQgaXQuCisJICovCisJbmRvLT5uZG9fc25hcGVuZCA9IHNwICsgaC0+Y2FwbGVuOworCWlmIChuZG8tPm5kb19YZmxhZykgeworCQkvKgorCQkgKiBQcmludCB0aGUgcmF3IHBhY2tldCBkYXRhIGluIGhleCBhbmQgQVNDSUkuCisJCSAqLworCQlpZiAobmRvLT5uZG9fWGZsYWcgPiAxKSB7CisJCQkvKgorCQkJICogSW5jbHVkZSB0aGUgbGluay1sYXllciBoZWFkZXIuCisJCQkgKi8KKwkJCWhleF9hbmRfYXNjaWlfcHJpbnQobmRvLCAiXG5cdCIsIHNwLCBoLT5jYXBsZW4pOworCQl9IGVsc2UgeworCQkJLyoKKwkJCSAqIERvbid0IGluY2x1ZGUgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIC0gYW5kIGlmCisJCQkgKiB3ZSBoYXZlIG5vdGhpbmcgcGFzdCB0aGUgbGluay1sYXllciBoZWFkZXIsCisJCQkgKiBwcmludCBub3RoaW5nLgorCQkJICovCisJCQlpZiAoaC0+Y2FwbGVuID4gaGRybGVuKQorCQkJCWhleF9hbmRfYXNjaWlfcHJpbnQobmRvLCAiXG5cdCIsIHNwICsgaGRybGVuLAorCQkJCSAgICBoLT5jYXBsZW4gLSBoZHJsZW4pOworCQl9CisJfSBlbHNlIGlmIChuZG8tPm5kb194ZmxhZykgeworCQkvKgorCQkgKiBQcmludCB0aGUgcmF3IHBhY2tldCBkYXRhIGluIGhleC4KKwkJICovCisJCWlmIChuZG8tPm5kb194ZmxhZyA+IDEpIHsKKwkJCS8qCisJCQkgKiBJbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KKwkJCSAqLworICAgICAgICAgICAgICAgICAgICAgICAgaGV4X3ByaW50KG5kbywgIlxuXHQiLCBzcCwgaC0+Y2FwbGVuKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlciAtIGFuZCBpZgorCQkJICogd2UgaGF2ZSBub3RoaW5nIHBhc3QgdGhlIGxpbmstbGF5ZXIgaGVhZGVyLAorCQkJICogcHJpbnQgbm90aGluZy4KKwkJCSAqLworCQkJaWYgKGgtPmNhcGxlbiA+IGhkcmxlbikKKwkJCQloZXhfcHJpbnQobmRvLCAiXG5cdCIsIHNwICsgaGRybGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+Y2FwbGVuIC0gaGRybGVuKTsKKwkJfQorCX0gZWxzZSBpZiAobmRvLT5uZG9fQWZsYWcpIHsKKwkJLyoKKwkJICogUHJpbnQgdGhlIHJhdyBwYWNrZXQgZGF0YSBpbiBBU0NJSS4KKwkJICovCisJCWlmIChuZG8tPm5kb19BZmxhZyA+IDEpIHsKKwkJCS8qCisJCQkgKiBJbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KKwkJCSAqLworCQkJYXNjaWlfcHJpbnQobmRvLCBzcCwgaC0+Y2FwbGVuKTsKKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBEb24ndCBpbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlciAtIGFuZCBpZgorCQkJICogd2UgaGF2ZSBub3RoaW5nIHBhc3QgdGhlIGxpbmstbGF5ZXIgaGVhZGVyLAorCQkJICogcHJpbnQgbm90aGluZy4KKwkJCSAqLworCQkJaWYgKGgtPmNhcGxlbiA+IGhkcmxlbikKKwkJCQlhc2NpaV9wcmludChuZG8sIHNwICsgaGRybGVuLCBoLT5jYXBsZW4gLSBoZHJsZW4pOworCQl9CisJfQorCisJTkRfUFJJTlQoKG5kbywgIlxuIikpOworfQorCisvKgorICogQnkgZGVmYXVsdCwgcHJpbnQgdGhlIHNwZWNpZmllZCBkYXRhIG91dCBpbiBoZXggYW5kIEFTQ0lJLgorICovCitzdGF0aWMgdm9pZAorbmRvX2RlZmF1bHRfcHJpbnQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IHVfY2hhciAqYnAsIHVfaW50IGxlbmd0aCkKK3sKKwloZXhfYW5kX2FzY2lpX3ByaW50KG5kbywgIlxuXHQiLCBicCwgbGVuZ3RoKTsgLyogcGFzcyBvbiBsZiBhbmQgaW5kZW50YXRpb24gc3RyaW5nICovCit9CisKKy8qIFZBUkFSR1MgKi8KK3N0YXRpYyB2b2lkCituZG9fZXJyb3IobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwlpZihuZG8tPnByb2dyYW1fbmFtZSkKKwkJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogIiwgbmRvLT5wcm9ncmFtX25hbWUpOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAoKmZtdCkgeworCQlmbXQgKz0gc3RybGVuKGZtdCk7CisJCWlmIChmbXRbLTFdICE9ICdcbicpCisJCQkodm9pZClmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KKwluZF9jbGVhbnVwKCk7CisJZXhpdCgxKTsKKwkvKiBOT1RSRUFDSEVEICovCit9CisKKy8qIFZBUkFSR1MgKi8KK3N0YXRpYyB2b2lkCituZG9fd2FybmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJdmFfbGlzdCBhcDsKKworCWlmKG5kby0+cHJvZ3JhbV9uYW1lKQorCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBuZG8tPnByb2dyYW1fbmFtZSk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICJXQVJOSU5HOiAiKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCpmbXQpIHsKKwkJZm10ICs9IHN0cmxlbihmbXQpOworCQlpZiAoZm10Wy0xXSAhPSAnXG4nKQorCQkJKHZvaWQpZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9Cit9CisKK3N0YXRpYyBpbnQKK25kb19wcmludGYobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXJnczsKKwlpbnQgcmV0OworCisJdmFfc3RhcnQoYXJncywgZm10KTsKKwlyZXQgPSB2ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncyk7CisJdmFfZW5kKGFyZ3MpOworCisJaWYgKHJldCA8IDApCisJCW5kb19lcnJvcihuZG8sICJVbmFibGUgdG8gd3JpdGUgb3V0cHV0OiAlcyIsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKKwlyZXR1cm4gKHJldCk7Cit9CisKK3ZvaWQKK25kb19zZXRfZnVuY3Rpb25fcG9pbnRlcnMobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8pCit7CisJbmRvLT5uZG9fZGVmYXVsdF9wcmludD1uZG9fZGVmYXVsdF9wcmludDsKKwluZG8tPm5kb19wcmludGY9bmRvX3ByaW50ZjsKKwluZG8tPm5kb19lcnJvcj1uZG9fZXJyb3I7CisJbmRvLT5uZG9fd2FybmluZz1uZG9fd2FybmluZzsKK30KKy8qCisgKiBMb2NhbCBWYXJpYWJsZXM6CisgKiBjLXN0eWxlOiB3aGl0ZXNtaXRoCisgKiBjLWJhc2ljLW9mZnNldDogOAorICogRW5kOgorICovCmRpZmYgLS1naXQgYS9wcmludC5oIGIvcHJpbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45NjMyNjk0Ci0tLSAvZGV2L251bGwKKysrIGIvcHJpbnQuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChjKSAxOTg4LCAxOTg5LCAxOTkwLCAxOTkxLCAxOTkyLCAxOTkzLCAxOTk0LCAxOTk1LCAxOTk2LCAxOTk3LCAyMDAwCisgKglUaGUgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0OiAoMSkgc291cmNlIGNvZGUgZGlzdHJpYnV0aW9ucworICogcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHksICgyKQorICogZGlzdHJpYnV0aW9ucyBpbmNsdWRpbmcgYmluYXJ5IGNvZGUgaW5jbHVkZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQKKyAqIHRoaXMgcGFyYWdyYXBoIGluIGl0cyBlbnRpcmV0eSBpbiB0aGUgZG9jdW1lbnRhdGlvbiBvciBvdGhlciBtYXRlcmlhbHMKKyAqIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbiwgYW5kICgzKSBhbGwgYWR2ZXJ0aXNpbmcgbWF0ZXJpYWxzIG1lbnRpb25pbmcKKyAqIGZlYXR1cmVzIG9yIHVzZSBvZiB0aGlzIHNvZnR3YXJlIGRpc3BsYXkgdGhlIGZvbGxvd2luZyBhY2tub3dsZWRnZW1lbnQ6CisgKiBgYFRoaXMgcHJvZHVjdCBpbmNsdWRlcyBzb2Z0d2FyZSBkZXZlbG9wZWQgYnkgdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSwKKyAqIExhd3JlbmNlIEJlcmtlbGV5IExhYm9yYXRvcnkgYW5kIGl0cyBjb250cmlidXRvcnMuJycgTmVpdGhlciB0aGUgbmFtZSBvZgorICogdGhlIFVuaXZlcnNpdHkgbm9yIHRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2UKKyAqIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvcgorICogd3JpdHRlbiBwZXJtaXNzaW9uLgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBgYEFTIElTJycgQU5EIFdJVEhPVVQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRAorICogV0FSUkFOVElFUywgSU5DTFVESU5HLCBXSVRIT1VUIExJTUlUQVRJT04sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCisgKgorICogU3VwcG9ydCBmb3Igc3BsaXR0aW5nIGNhcHR1cmVzIGludG8gbXVsdGlwbGUgZmlsZXMgd2l0aCBhIG1heGltdW0KKyAqIGZpbGUgc2l6ZToKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDEKKyAqCVNldGggV2Vic3RlciA8c3dlYnN0ZXJAc3N0LmxsLm1pdC5lZHU+CisgKi8KKworI2lmbmRlZiBwcmludF9oCisjZGVmaW5lIHByaW50X2gKKwordm9pZAlpbml0X3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCB1aW50MzJfdCBsb2NhbG5ldCwgdWludDMyX3QgbWFzaywKKwkgICAgdWludDMyX3QgdGltZXpvbmVfb2Zmc2V0KTsKKworaW50CWhhc19wcmludGVyKGludCB0eXBlKTsKKworaWZfcHJpbnRlciBnZXRfaWZfcHJpbnRlcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgaW50IHR5cGUpOworCit2b2lkCXByZXR0eV9wcmludF9wYWNrZXQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCisJICAgIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwgY29uc3QgdV9jaGFyICpzcCwKKwkgICAgdV9pbnQgcGFja2V0c19jYXB0dXJlZCk7CisKK3ZvaWQJbmRvX3NldF9mdW5jdGlvbl9wb2ludGVycyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbyk7CisKKyNlbmRpZiAvKiBwcmludF9oICovCmRpZmYgLS1naXQgYS9ycGwuaCBiL3JwbC5oCmluZGV4IGM0ODc4NGIuLjVhZDA3NGIgMTAwNjQ0Ci0tLSBhL3JwbC5oCisrKyBiL3JwbC5oCkBAIC0yMiw3ICsyMiw3IEBACiAgICAgTkRfUlBMX1NFQ19EQUdfSU8gPSAweDgxLAogICAgIE5EX1JQTF9TRUNfREFHICAgID0gMHg4MiwKICAgICBORF9SUExfU0VDX0RBR19BQ0s9IDB4ODMsCi0gICAgTkRfUlBMX1NFQ19DT05TSVNUPSAweDg0LAorICAgIE5EX1JQTF9TRUNfQ09OU0lTVD0gMHg4QQogfTsKIAogZW51bSBORF9SUExfRElPX0ZMQUdTIHsKQEAgLTMxLDcgKzMxLDcgQEAKICAgICAgICAgTkRfUlBMX0RJT19EQVNVUFBPUlQ9IDB4MjAsCiAgICAgICAgIE5EX1JQTF9ESU9fUkVTNCAgICAgPSAweDEwLAogICAgICAgICBORF9SUExfRElPX1JFUzMgICAgID0gMHgwOCwKLSAgICAgICAgTkRfUlBMX0RJT19QUkZfTUFTSyA9IDB4MDcsICAvKiAzLWJpdCBwcmVmZXJlbmNlICovCisgICAgICAgIE5EX1JQTF9ESU9fUFJGX01BU0sgPSAweDA3ICAvKiAzLWJpdCBwcmVmZXJlbmNlICovCiB9OwogCiAjZGVmaW5lIERBR0lEX0xFTiAxNgpAQCAtODEsNyArODEsNyBAQAogICAgIFJQTF9ESU9fTk9OU1RPUklORz0gMHgwLAogICAgIFJQTF9ESU9fU1RPUklORyAgID0gMHgxLAogICAgIFJQTF9ESU9fTk9OU1RPUklOR19NVUxUSUNBU1QgPSAweDIsCi0gICAgUlBMX0RJT19TVE9SSU5HX01VTFRJQ0FTVCAgICA9IDB4MywKKyAgICBSUExfRElPX1NUT1JJTkdfTVVMVElDQVNUICAgID0gMHgzCiB9OwogCiBlbnVtIFJQTF9TVUJPUFQgewpAQCAtOTMsNyArOTMsNyBAQAogICAgICAgICBSUExfREFPX1JQTFRBUkdFVCAgID0gNSwKICAgICAgICAgUlBMX0RBT19UUkFOU0lUSU5GTyA9IDYsCiAgICAgICAgIFJQTF9ESU9fREVTVFBSRUZJWCAgPSA4LAotICAgICAgICBSUExfREFPX1JQTFRBUkdFVF9ERVNDPTksCisgICAgICAgIFJQTF9EQU9fUlBMVEFSR0VUX0RFU0M9OQogfTsKIAogc3RydWN0IHJwbF9kaW9fZ2Vub3B0aW9uIHsKZGlmZiAtLWdpdCBhL3NldHNpZ25hbC5jIGIvc2V0c2lnbmFsLmMKaW5kZXggMWJjYzAzMi4uNGQ5M2NlYiAxMDA2NDQKLS0tIGEvc2V0c2lnbmFsLmMKKysrIGIvc2V0c2lnbmFsLmMKQEAgLTIzLDcgKzIzLDcgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaWZkZWYgSEFWRV9TSUdBQ1RJT04KZGlmZiAtLWdpdCBhL3NpZ25hdHVyZS5jIGIvc2lnbmF0dXJlLmMKaW5kZXggMzI0MDM1Zi4uMWFmNzk4YSAxMDA2NDQKLS0tIGEvc2lnbmF0dXJlLmMKKysrIGIvc2lnbmF0dXJlLmMKQEAgLTE1LDE2ICsxNSwxNiBAQAogICogT3JpZ2luYWwgY29kZSBieSBIYW5uZXMgR3JlZGxlciAoaGFubmVzQGp1bmlwZXIubmV0KQogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAjaW5jbHVkZSAic2lnbmF0dXJlLmgiCiAKICNpZmRlZiBIQVZFX0xJQkNSWVBUTwpAQCAtMzQsNiArMzQsNyBAQAogY29uc3Qgc3RydWN0IHRvayBzaWduYXR1cmVfY2hlY2tfdmFsdWVzW10gPSB7CiAgICAgeyBTSUdOQVRVUkVfVkFMSUQsICJ2YWxpZCJ9LAogICAgIHsgU0lHTkFUVVJFX0lOVkFMSUQsICJpbnZhbGlkIn0sCisgICAgeyBDQU5UX0FMTE9DQVRFX0NPUFksICJjYW4ndCBhbGxvY2F0ZSBtZW1vcnkifSwKICAgICB7IENBTlRfQ0hFQ0tfU0lHTkFUVVJFLCAidW5jaGVja2VkIn0sCiAgICAgeyAwLCBOVUxMIH0KIH07CkBAIC0xMDgsMzkgKzEwOSw4NiBAQAogICAgIE1ENV9GaW5hbChkaWdlc3QsICZjb250ZXh0KTsgICAgICAgICAgLyogZmluaXNoIHVwIDJuZCBwYXNzICovCiB9CiBVU0VTX0FQUExFX1JTVAotI2VuZGlmCiAKLSNpZmRlZiBIQVZFX0xJQkNSWVBUTwogLyoKICAqIFZlcmlmeSBhIGNyeXB0b2dyYXBoaWMgc2lnbmF0dXJlIG9mIHRoZSBwYWNrZXQuCiAgKiBDdXJyZW50bHkgb25seSBNRDUgaXMgc3VwcG9ydGVkLgogICovCiBpbnQKLXNpZ25hdHVyZV92ZXJpZnkobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCi0gICAgICAgICAgICAgICAgIGNvbnN0IHVfY2hhciAqcHB0ciwgdV9pbnQgcGxlbiwgdV9jaGFyICpzaWdfcHRyKQorc2lnbmF0dXJlX3ZlcmlmeShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpwcHRyLCB1X2ludCBwbGVuLAorICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKnNpZ19wdHIsIHZvaWQgKCpjbGVhcl9ydG4pKHZvaWQgKiksCisgICAgICAgICAgICAgICAgIGNvbnN0IHZvaWQgKmNsZWFyX2FyZykKIHsKLSAgICB1aW50OF90IHJjdnNpZ1sxNl07CisgICAgdWludDhfdCAqcGFja2V0X2NvcHksICpzaWdfY29weTsKICAgICB1aW50OF90IHNpZ1sxNl07CiAgICAgdW5zaWduZWQgaW50IGk7CiAKLSAgICAvKgotICAgICAqIFNhdmUgdGhlIHNpZ25hdHVyZSBiZWZvcmUgY2xlYXJpbmcgaXQuCi0gICAgICovCi0gICAgbWVtY3B5KHJjdnNpZywgc2lnX3B0ciwgc2l6ZW9mKHJjdnNpZykpOwotICAgIG1lbXNldChzaWdfcHRyLCAwLCBzaXplb2YocmN2c2lnKSk7Ci0KICAgICBpZiAoIW5kby0+bmRvX3NpZ3NlY3JldCkgewogICAgICAgICByZXR1cm4gKENBTlRfQ0hFQ0tfU0lHTkFUVVJFKTsKICAgICB9CiAKLSAgICBzaWduYXR1cmVfY29tcHV0ZV9obWFjX21kNShwcHRyLCBwbGVuLCAodW5zaWduZWQgY2hhciAqKW5kby0+bmRvX3NpZ3NlY3JldCwKKyAgICAvKgorICAgICAqIERvIHdlIGhhdmUgYWxsIHRoZSBwYWNrZXQgZGF0YSB0byBiZSBjaGVja2VkPworICAgICAqLworICAgIGlmICghTkRfVFRFU1QyKHBwdHIsIHBsZW4pKSB7CisgICAgICAgIC8qIE5vLiAqLworICAgICAgICByZXR1cm4gKENBTlRfQ0hFQ0tfU0lHTkFUVVJFKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIERvIHdlIGhhdmUgdGhlIGVudGlyZSBzaWduYXR1cmUgdG8gY2hlY2s/CisgICAgICovCisgICAgaWYgKCFORF9UVEVTVDIoc2lnX3B0ciwgc2l6ZW9mKHNpZykpKSB7CisgICAgICAgIC8qIE5vLiAqLworICAgICAgICByZXR1cm4gKENBTlRfQ0hFQ0tfU0lHTkFUVVJFKTsKKyAgICB9CisgICAgaWYgKHNpZ19wdHIgKyBzaXplb2Yoc2lnKSA+IHBwdHIgKyBwbGVuKSB7CisgICAgICAgIC8qIE5vLiAqLworICAgICAgICByZXR1cm4gKENBTlRfQ0hFQ0tfU0lHTkFUVVJFKTsKKyAgICB9CisKKyAgICAvKgorICAgICAqIE1ha2UgYSBjb3B5IG9mIHRoZSBwYWNrZXQsIHNvIHdlIGRvbid0IG92ZXJ3cml0ZSB0aGUgb3JpZ2luYWwuCisgICAgICovCisgICAgcGFja2V0X2NvcHkgPSBtYWxsb2MocGxlbik7CisgICAgaWYgKHBhY2tldF9jb3B5ID09IE5VTEwpIHsKKyAgICAgICAgcmV0dXJuIChDQU5UX0FMTE9DQVRFX0NPUFkpOworICAgIH0KKworICAgIG1lbWNweShwYWNrZXRfY29weSwgcHB0ciwgcGxlbik7CisKKyAgICAvKgorICAgICAqIENsZWFyIHRoZSBzaWduYXR1cmUgaW4gdGhlIGNvcHkuCisgICAgICovCisgICAgc2lnX2NvcHkgPSBwYWNrZXRfY29weSArIChzaWdfcHRyIC0gcHB0cik7CisgICAgbWVtc2V0KHNpZ19jb3B5LCAwLCBzaXplb2Yoc2lnKSk7CisKKyAgICAvKgorICAgICAqIENsZWFyIGFueXRoaW5nIGVsc2UgdGhhdCBuZWVkcyB0byBiZSBjbGVhcmVkIGluIHRoZSBjb3B5LgorICAgICAqIE91ciBjYWxsZXIgaXMgYXNzdW1lZCB0byBoYXZlIHZldHRlZCB0aGUgY2xlYXJfYXJnIHBvaW50ZXIuCisgICAgICovCisgICAgKCpjbGVhcl9ydG4pKCh2b2lkICopKHBhY2tldF9jb3B5ICsgKChjb25zdCB1aW50OF90ICopY2xlYXJfYXJnIC0gcHB0cikpKTsKKworICAgIC8qCisgICAgICogQ29tcHV0ZSB0aGUgc2lnbmF0dXJlLgorICAgICAqLworICAgIHNpZ25hdHVyZV9jb21wdXRlX2htYWNfbWQ1KHBhY2tldF9jb3B5LCBwbGVuLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICh1bnNpZ25lZCBjaGFyICopbmRvLT5uZG9fc2lnc2VjcmV0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cmxlbihuZG8tPm5kb19zaWdzZWNyZXQpLCBzaWcpOwogCi0gICAgaWYgKG1lbWNtcChyY3ZzaWcsIHNpZywgc2l6ZW9mKHNpZykpID09IDApIHsKKyAgICAvKgorICAgICAqIEZyZWUgdGhlIGNvcHkuCisgICAgICovCisgICAgZnJlZShwYWNrZXRfY29weSk7CisKKyAgICAvKgorICAgICAqIERvZXMgdGhlIGNvbXB1dGVkIHNpZ25hdHVyZSBtYXRjaCB0aGUgc2lnbmF0dXJlIGluIHRoZSBwYWNrZXQ/CisgICAgICovCisgICAgaWYgKG1lbWNtcChzaWdfcHRyLCBzaWcsIHNpemVvZihzaWcpKSA9PSAwKSB7CisgICAgICAgIC8qIFllcy4gKi8KICAgICAgICAgcmV0dXJuIChTSUdOQVRVUkVfVkFMSUQpOwotCiAgICAgfSBlbHNlIHsKLQorICAgICAgICAvKiBObyAtIHByaW50IHRoZSBjb21wdXRlZCBzaWduYXR1cmUuICovCiAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzaXplb2Yoc2lnKTsgKytpKSB7CiAgICAgICAgICAgICBORF9QUklOVCgobmRvLCAiJTAyeCIsIHNpZ1tpXSkpOwogICAgICAgICB9CkBAIC0xNDgsNiArMTk2LDE0IEBACiAgICAgICAgIHJldHVybiAoU0lHTkFUVVJFX0lOVkFMSUQpOwogICAgIH0KIH0KKyNlbHNlCitpbnQKK3NpZ25hdHVyZV92ZXJpZnkobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8gX1VfLCBjb25zdCB1X2NoYXIgKnBwdHIgX1VfLAorICAgICAgICAgICAgICAgICB1X2ludCBwbGVuIF9VXywgY29uc3QgdV9jaGFyICpzaWdfcHRyIF9VXywKKyAgICAgICAgICAgICAgICAgdm9pZCAoKmNsZWFyX3J0bikodm9pZCAqKSBfVV8sIGNvbnN0IHZvaWQgKmNsZWFyX2FyZyBfVV8pCit7CisgICAgcmV0dXJuIChDQU5UX0NIRUNLX1NJR05BVFVSRSk7Cit9CiAjZW5kaWYKIAogLyoKZGlmZiAtLWdpdCBhL3NpZ25hdHVyZS5oIGIvc2lnbmF0dXJlLmgKaW5kZXggYTA1MmRmOC4uMjM5ZWUzZSAxMDA2NDQKLS0tIGEvc2lnbmF0dXJlLmgKKysrIGIvc2lnbmF0dXJlLmgKQEAgLTIxLDcgKzIxLDkgQEAKIC8qIHNpZ25hdHVyZSBjaGVja2luZyByZXN1bHQgY29kZXMgKi8KICNkZWZpbmUgU0lHTkFUVVJFX1ZBTElECQkwCiAjZGVmaW5lIFNJR05BVFVSRV9JTlZBTElECTEKLSNkZWZpbmUgQ0FOVF9DSEVDS19TSUdOQVRVUkUJMgorI2RlZmluZSBDQU5UX0FMTE9DQVRFX0NPUFkJMgorI2RlZmluZSBDQU5UX0NIRUNLX1NJR05BVFVSRQkzCiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgdG9rIHNpZ25hdHVyZV9jaGVja192YWx1ZXNbXTsKLWV4dGVybiBpbnQgc2lnbmF0dXJlX3ZlcmlmeShuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50LCB1X2NoYXIgKik7CitleHRlcm4gaW50IHNpZ25hdHVyZV92ZXJpZnkobmV0ZGlzc2VjdF9vcHRpb25zICosIGNvbnN0IHVfY2hhciAqLCB1X2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1X2NoYXIgKiwgdm9pZCAoKikodm9pZCAqKSwgY29uc3Qgdm9pZCAqKTsKZGlmZiAtLWdpdCBhL3NtYi5oIGIvc21iLmgKaW5kZXggODhlYWEwNi4uYjUyMTYxNyAxMDA2NDQKLS0tIGEvc21iLmgKKysrIGIvc21iLmgKQEAgLTExNiw3ICsxMTYsNyBAQAogI2RlZmluZSBUUkFOU0FDVDJfRklORE5PVElGWU5FWFQgIDEyCiAjZGVmaW5lIFRSQU5TQUNUMl9NS0RJUiAgICAgICAgICAgMTMKIAotI2RlZmluZSBQVFJfRElGRihwMSwgcDIpICgoc2l6ZV90KSgoKGNoYXIgKikocDEpKSAtIChjaGFyICopKHAyKSkpCisjZGVmaW5lIFBUUl9ESUZGKHAxLCBwMikgKChzaXplX3QpKCgoY29uc3QgY2hhciAqKShwMSkpIC0gKGNvbnN0IGNoYXIgKikocDIpKSkKIAogLyogc29tZSBwcm90b3MgKi8KIGNvbnN0IHVfY2hhciAqc21iX2ZkYXRhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqLCBjb25zdCB1X2NoYXIgKiwgY29uc3QgY2hhciAqLCBjb25zdCB1X2NoYXIgKiwgaW50KTsKZGlmZiAtLWdpdCBhL3NtYnV0aWwuYyBiL3NtYnV0aWwuYwppbmRleCAxYzE3NDJjLi5iMzhkNzNhIDEwMDY0NAotLS0gYS9zbWJ1dGlsLmMKKysrIGIvc21idXRpbC5jCkBAIC02LDE4ICs2LDE3IEBACiAgKiBvciBsYXRlcgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3RkaW8uaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KIAotI2luY2x1ZGUgImludGVyZmFjZS5oIgorI2luY2x1ZGUgIm5ldGRpc3NlY3QuaCIKICNpbmNsdWRlICJleHRyYWN0LmgiCiAjaW5jbHVkZSAic21iLmgiCiAKQEAgLTI3Miw4ICsyNzEsNyBAQAogfQogCiB2b2lkCi1wcmludF9kYXRhKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBsZW4pCitzbWJfcHJpbnRfZGF0YShuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKQogewogICAgIGludCBpID0gMDsKIApAQCAtODYxLDcgKzg1OSw3IEBACiAgICAgaWYgKCFkZXB0aCAmJiBidWYgPCBtYXhidWYpIHsKIAlzaXplX3QgbGVuID0gUFRSX0RJRkYobWF4YnVmLCBidWYpOwogCU5EX1BSSU5UKChuZG8sICJEYXRhOiAoJWx1IGJ5dGVzKVxuIiwgKHVuc2lnbmVkIGxvbmcpbGVuKSk7Ci0JcHJpbnRfZGF0YShuZG8sIGJ1ZiwgbGVuKTsKKwlzbWJfcHJpbnRfZGF0YShuZG8sIGJ1ZiwgbGVuKTsKIAlyZXR1cm4oYnVmICsgbGVuKTsKICAgICB9CiAgICAgcmV0dXJuKGJ1Zik7CmRpZmYgLS1naXQgYS9zdHJjYXNlY21wLmMgYi9zdHJjYXNlY21wLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdlZTRlMzguLjAwMDAwMDAKLS0tIGEvc3RyY2FzZWNtcC5jCisrKyAvZGV2L251bGwKQEAgLTEsODggKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoYykgMTk4NyBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEuCi0gKiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMgYXJlIHBlcm1pdHRlZAotICogcHJvdmlkZWQgdGhhdCB0aGlzIG5vdGljZSBpcyBwcmVzZXJ2ZWQgYW5kIHRoYXQgZHVlIGNyZWRpdCBpcyBnaXZlbgotICogdG8gdGhlIFVuaXZlcnNpdHkgb2YgQ2FsaWZvcm5pYSBhdCBCZXJrZWxleS4gVGhlIG5hbWUgb2YgdGhlIFVuaXZlcnNpdHkKLSAqIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMKLSAqIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgd3JpdHRlbiBwcmlvciBwZXJtaXNzaW9uLiBUaGlzIHNvZnR3YXJlCi0gKiBpcyBwcm92aWRlZCBgYGFzIGlzJycgd2l0aG91dCBleHByZXNzIG9yIGltcGxpZWQgd2FycmFudHkuCi0gKi8KLQotI2lmZGVmIEhBVkVfQ09ORklHX0gKLSNpbmNsdWRlICJjb25maWcuaCIKLSNlbmRpZgotCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KLQotI2luY2x1ZGUgImludGVyZmFjZS5oIgotCi0vKgotICogVGhpcyBhcnJheSBpcyBkZXNpZ25lZCBmb3IgbWFwcGluZyB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXIKLSAqIHRvZ2V0aGVyIGZvciBhIGNhc2UgaW5kZXBlbmRlbnQgY29tcGFyaXNvbi4gIFRoZSBtYXBwaW5ncyBhcmUKLSAqIGJhc2VkIHVwb24gYXNjaWkgY2hhcmFjdGVyIHNlcXVlbmNlcy4KLSAqLwotc3RhdGljIGNvbnN0IHVfY2hhciBjaGFybWFwW10gPSB7Ci0JJ1wwMDAnLCAnXDAwMScsICdcMDAyJywgJ1wwMDMnLCAnXDAwNCcsICdcMDA1JywgJ1wwMDYnLCAnXDAwNycsCi0JJ1wwMTAnLCAnXDAxMScsICdcMDEyJywgJ1wwMTMnLCAnXDAxNCcsICdcMDE1JywgJ1wwMTYnLCAnXDAxNycsCi0JJ1wwMjAnLCAnXDAyMScsICdcMDIyJywgJ1wwMjMnLCAnXDAyNCcsICdcMDI1JywgJ1wwMjYnLCAnXDAyNycsCi0JJ1wwMzAnLCAnXDAzMScsICdcMDMyJywgJ1wwMzMnLCAnXDAzNCcsICdcMDM1JywgJ1wwMzYnLCAnXDAzNycsCi0JJ1wwNDAnLCAnXDA0MScsICdcMDQyJywgJ1wwNDMnLCAnXDA0NCcsICdcMDQ1JywgJ1wwNDYnLCAnXDA0NycsCi0JJ1wwNTAnLCAnXDA1MScsICdcMDUyJywgJ1wwNTMnLCAnXDA1NCcsICdcMDU1JywgJ1wwNTYnLCAnXDA1NycsCi0JJ1wwNjAnLCAnXDA2MScsICdcMDYyJywgJ1wwNjMnLCAnXDA2NCcsICdcMDY1JywgJ1wwNjYnLCAnXDA2NycsCi0JJ1wwNzAnLCAnXDA3MScsICdcMDcyJywgJ1wwNzMnLCAnXDA3NCcsICdcMDc1JywgJ1wwNzYnLCAnXDA3NycsCi0JJ1wxMDAnLCAnXDE0MScsICdcMTQyJywgJ1wxNDMnLCAnXDE0NCcsICdcMTQ1JywgJ1wxNDYnLCAnXDE0NycsCi0JJ1wxNTAnLCAnXDE1MScsICdcMTUyJywgJ1wxNTMnLCAnXDE1NCcsICdcMTU1JywgJ1wxNTYnLCAnXDE1NycsCi0JJ1wxNjAnLCAnXDE2MScsICdcMTYyJywgJ1wxNjMnLCAnXDE2NCcsICdcMTY1JywgJ1wxNjYnLCAnXDE2NycsCi0JJ1wxNzAnLCAnXDE3MScsICdcMTcyJywgJ1wxMzMnLCAnXDEzNCcsICdcMTM1JywgJ1wxMzYnLCAnXDEzNycsCi0JJ1wxNDAnLCAnXDE0MScsICdcMTQyJywgJ1wxNDMnLCAnXDE0NCcsICdcMTQ1JywgJ1wxNDYnLCAnXDE0NycsCi0JJ1wxNTAnLCAnXDE1MScsICdcMTUyJywgJ1wxNTMnLCAnXDE1NCcsICdcMTU1JywgJ1wxNTYnLCAnXDE1NycsCi0JJ1wxNjAnLCAnXDE2MScsICdcMTYyJywgJ1wxNjMnLCAnXDE2NCcsICdcMTY1JywgJ1wxNjYnLCAnXDE2NycsCi0JJ1wxNzAnLCAnXDE3MScsICdcMTcyJywgJ1wxNzMnLCAnXDE3NCcsICdcMTc1JywgJ1wxNzYnLCAnXDE3NycsCi0JJ1wyMDAnLCAnXDIwMScsICdcMjAyJywgJ1wyMDMnLCAnXDIwNCcsICdcMjA1JywgJ1wyMDYnLCAnXDIwNycsCi0JJ1wyMTAnLCAnXDIxMScsICdcMjEyJywgJ1wyMTMnLCAnXDIxNCcsICdcMjE1JywgJ1wyMTYnLCAnXDIxNycsCi0JJ1wyMjAnLCAnXDIyMScsICdcMjIyJywgJ1wyMjMnLCAnXDIyNCcsICdcMjI1JywgJ1wyMjYnLCAnXDIyNycsCi0JJ1wyMzAnLCAnXDIzMScsICdcMjMyJywgJ1wyMzMnLCAnXDIzNCcsICdcMjM1JywgJ1wyMzYnLCAnXDIzNycsCi0JJ1wyNDAnLCAnXDI0MScsICdcMjQyJywgJ1wyNDMnLCAnXDI0NCcsICdcMjQ1JywgJ1wyNDYnLCAnXDI0NycsCi0JJ1wyNTAnLCAnXDI1MScsICdcMjUyJywgJ1wyNTMnLCAnXDI1NCcsICdcMjU1JywgJ1wyNTYnLCAnXDI1NycsCi0JJ1wyNjAnLCAnXDI2MScsICdcMjYyJywgJ1wyNjMnLCAnXDI2NCcsICdcMjY1JywgJ1wyNjYnLCAnXDI2NycsCi0JJ1wyNzAnLCAnXDI3MScsICdcMjcyJywgJ1wyNzMnLCAnXDI3NCcsICdcMjc1JywgJ1wyNzYnLCAnXDI3NycsCi0JJ1wzMDAnLCAnXDM0MScsICdcMzQyJywgJ1wzNDMnLCAnXDM0NCcsICdcMzQ1JywgJ1wzNDYnLCAnXDM0NycsCi0JJ1wzNTAnLCAnXDM1MScsICdcMzUyJywgJ1wzNTMnLCAnXDM1NCcsICdcMzU1JywgJ1wzNTYnLCAnXDM1NycsCi0JJ1wzNjAnLCAnXDM2MScsICdcMzYyJywgJ1wzNjMnLCAnXDM2NCcsICdcMzY1JywgJ1wzNjYnLCAnXDM2NycsCi0JJ1wzNzAnLCAnXDM3MScsICdcMzcyJywgJ1wzMzMnLCAnXDMzNCcsICdcMzM1JywgJ1wzMzYnLCAnXDMzNycsCi0JJ1wzNDAnLCAnXDM0MScsICdcMzQyJywgJ1wzNDMnLCAnXDM0NCcsICdcMzQ1JywgJ1wzNDYnLCAnXDM0NycsCi0JJ1wzNTAnLCAnXDM1MScsICdcMzUyJywgJ1wzNTMnLCAnXDM1NCcsICdcMzU1JywgJ1wzNTYnLCAnXDM1NycsCi0JJ1wzNjAnLCAnXDM2MScsICdcMzYyJywgJ1wzNjMnLCAnXDM2NCcsICdcMzY1JywgJ1wzNjYnLCAnXDM2NycsCi0JJ1wzNzAnLCAnXDM3MScsICdcMzcyJywgJ1wzNzMnLCAnXDM3NCcsICdcMzc1JywgJ1wzNzYnLCAnXDM3NycsCi19OwotCi1pbnQKLXN0cmNhc2VjbXAoczEsIHMyKQotCWNvbnN0IGNoYXIgKnMxLCAqczI7Ci17Ci0JcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpjbSA9IGNoYXJtYXAsCi0JCQkqdXMxID0gKHVfY2hhciAqKXMxLAotCQkJKnVzMiA9ICh1X2NoYXIgKilzMjsKLQotCXdoaWxlIChjbVsqdXMxXSA9PSBjbVsqdXMyKytdKQotCQlpZiAoKnVzMSsrID09ICdcMCcpCi0JCQlyZXR1cm4oMCk7Ci0JcmV0dXJuKGNtWyp1czFdIC0gY21bKi0tdXMyXSk7Ci19Ci0KLWludAotc3RybmNhc2VjbXAoczEsIHMyLCBuKQotCWNvbnN0IGNoYXIgKnMxLCAqczI7Ci0JcmVnaXN0ZXIgaW50IG47Ci17Ci0JcmVnaXN0ZXIgY29uc3QgdV9jaGFyICpjbSA9IGNoYXJtYXAsCi0JCQkqdXMxID0gKHVfY2hhciAqKXMxLAotCQkJKnVzMiA9ICh1X2NoYXIgKilzMjsKLQotCXdoaWxlICgtLW4gPj0gMCAmJiBjbVsqdXMxXSA9PSBjbVsqdXMyKytdKQotCQlpZiAoKnVzMSsrID09ICdcMCcpCi0JCQlyZXR1cm4oMCk7Ci0JcmV0dXJuKG4gPCAwID8gMCA6IGNtWyp1czFdIC0gY21bKi0tdXMyXSk7Ci19CmRpZmYgLS1naXQgYS9zdHJ0b2FkZHIuYyBiL3N0cnRvYWRkci5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgxYTA0MWYKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJ0b2FkZHIuYwpAQCAtMCwwICsxLDIzOSBAQAorLyoKKyAqIENvcHlyaWdodCAoYykgMjAwNCBieSBJbnRlcm5ldCBTeXN0ZW1zIENvbnNvcnRpdW0sIEluYy4gKCJJU0MiKQorICogQ29weXJpZ2h0IChjKSAxOTk2LDE5OTkgYnkgSW50ZXJuZXQgU29mdHdhcmUgQ29uc29ydGl1bS4KKyAqCisgKiBQZXJtaXNzaW9uIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBhbmQgZGlzdHJpYnV0ZSB0aGlzIHNvZnR3YXJlIGZvciBhbnkKKyAqIHB1cnBvc2Ugd2l0aCBvciB3aXRob3V0IGZlZSBpcyBoZXJlYnkgZ3JhbnRlZCwgcHJvdmlkZWQgdGhhdCB0aGUgYWJvdmUKKyAqIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgYXBwZWFyIGluIGFsbCBjb3BpZXMuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIgQU5EIElTQyBESVNDTEFJTVMgQUxMIFdBUlJBTlRJRVMKKyAqIFdJVEggUkVHQVJEIFRPIFRISVMgU09GVFdBUkUgSU5DTFVESU5HIEFMTCBJTVBMSUVEIFdBUlJBTlRJRVMgT0YKKyAqIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUy4gIElOIE5PIEVWRU5UIFNIQUxMIElTQyBCRSBMSUFCTEUgRk9SCisgKiBBTlkgU1BFQ0lBTCwgRElSRUNULCBJTkRJUkVDVCwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIE9SIEFOWSBEQU1BR0VTCisgKiBXSEFUU09FVkVSIFJFU1VMVElORyBGUk9NIExPU1MgT0YgVVNFLCBEQVRBIE9SIFBST0ZJVFMsIFdIRVRIRVIgSU4gQU4KKyAqIEFDVElPTiBPRiBDT05UUkFDVCwgTkVHTElHRU5DRSBPUiBPVEhFUiBUT1JUSU9VUyBBQ1RJT04sIEFSSVNJTkcgT1VUCisgKiBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFVTRSBPUiBQRVJGT1JNQU5DRSBPRiBUSElTIFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPG5ldGRpc3NlY3Qtc3RkaW5jLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJzdHJ0b2FkZHIuaCIKKworI2lmbmRlZiBOU19JTkFERFJTWgorI2RlZmluZSBOU19JTkFERFJTWgk0CS8qIElQdjQgVF9BICovCisjZW5kaWYKKworI2lmbmRlZiBOU19JTjZBRERSU1oKKyNkZWZpbmUgTlNfSU42QUREUlNaCTE2CS8qIElQdjYgVF9BQUFBICovCisjZW5kaWYKKworI2lmbmRlZiBOU19JTlQxNlNaCisjZGVmaW5lIE5TX0lOVDE2U1oJMgkvKiAjL2J5dGVzIG9mIGRhdGEgaW4gYSB1aW50MTZfdCAqLworI2VuZGlmCisKKy8qJQorICogV0FSTklORzogRG9uJ3QgZXZlbiBjb25zaWRlciB0cnlpbmcgdG8gY29tcGlsZSB0aGlzIG9uIGEgc3lzdGVtIHdoZXJlCisgKiBzaXplb2YoaW50KSA8IDQuICBzaXplb2YoaW50KSA+IDQgaXMgZmluZTsgYWxsIHRoZSB3b3JsZCdzIG5vdCBhIFZBWC4KKyAqLworCisjaWZuZGVmIE5TX0lONkFERFJTWgorI2RlZmluZSBOU19JTjZBRERSU1ogICAxNiAgIC8qIElQdjYgVF9BQUFBICovCisjZW5kaWYKKworLyogaW50CisgKiBzdHJ0b2FkZHIoc3JjLCBkc3QpCisgKgljb252ZXJ0IHByZXNlbnRhdGlvbiBsZXZlbCBJUHY0IGFkZHJlc3MgdG8gbmV0d29yayBvcmRlciBiaW5hcnkgZm9ybS4KKyAqIHJldHVybjoKKyAqCTEgaWYgYHNyYycgaXMgYSB2YWxpZCBpbnB1dCwgZWxzZSAwLgorICogbm90aWNlOgorICoJZG9lcyBub3QgdG91Y2ggYGRzdCcgdW5sZXNzIGl0J3MgcmV0dXJuaW5nIDEuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitpbnQKK3N0cnRvYWRkcihjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCkKK3sKKwl1aW50MzJfdCB2YWw7CisJdV9pbnQgZGlnaXQ7CisJcHRyZGlmZl90IG47CisJdW5zaWduZWQgY2hhciBjOworCXVfaW50IHBhcnRzWzRdOworCXVfaW50ICpwcCA9IHBhcnRzOworCisJYyA9ICpzcmM7CisJZm9yICg7OykgeworCQkvKgorCQkgKiBDb2xsZWN0IG51bWJlciB1cCB0byBgYC4nJy4KKwkJICogVmFsdWVzIGFyZSBzcGVjaWZpZWQgYXMgZm9yIEM6CisJCSAqIDB4PWhleCwgMD1vY3RhbCwgaXNkaWdpdD1kZWNpbWFsLgorCQkgKi8KKwkJaWYgKCFpc2RpZ2l0KGMpKQorCQkJcmV0dXJuICgwKTsKKwkJdmFsID0gMDsKKwkJaWYgKGMgPT0gJzAnKSB7CisJCQljID0gKisrc3JjOworCQkJaWYgKGMgPT0gJ3gnIHx8IGMgPT0gJ1gnKQorCQkJCXJldHVybiAoMCk7CisJCQllbHNlIGlmIChpc2RpZ2l0KGMpICYmIGMgIT0gJzknKQorCQkJCXJldHVybiAoMCk7CisJCX0KKwkJZm9yICg7OykgeworCQkJaWYgKGlzZGlnaXQoYykpIHsKKwkJCQlkaWdpdCA9IGMgLSAnMCc7CisJCQkJaWYgKGRpZ2l0ID49IDEwKQorCQkJCQlicmVhazsKKwkJCQl2YWwgPSAodmFsICogMTApICsgZGlnaXQ7CisJCQkJYyA9ICorK3NyYzsKKwkJCX0gZWxzZQorCQkJCWJyZWFrOworCQl9CisJCWlmIChjID09ICcuJykgeworCQkJLyoKKwkJCSAqIEludGVybmV0IGZvcm1hdDoKKwkJCSAqCWEuYi5jLmQKKwkJCSAqCWEuYi5jCSh3aXRoIGMgdHJlYXRlZCBhcyAxNiBiaXRzKQorCQkJICoJYS5iCSh3aXRoIGIgdHJlYXRlZCBhcyAyNCBiaXRzKQorCQkJICoJYQkod2l0aCBhIHRyZWF0ZWQgYXMgMzIgYml0cykKKwkJCSAqLworCQkJaWYgKHBwID49IHBhcnRzICsgMykKKwkJCQlyZXR1cm4gKDApOworCQkJKnBwKysgPSB2YWw7CisJCQljID0gKisrc3JjOworCQl9IGVsc2UKKwkJCWJyZWFrOworCX0KKwkvKgorCSAqIENoZWNrIGZvciB0cmFpbGluZyBjaGFyYWN0ZXJzLgorCSAqLworCWlmIChjICE9ICdcMCcgJiYgIWlzc3BhY2UoYykpCisJCXJldHVybiAoMCk7CisJLyoKKwkgKiBGaW5kIHRoZSBudW1iZXIgb2YgcGFydHMgc3BlY2lmaWVkLgorCSAqIEl0IG11c3QgYmUgNDsgd2Ugb25seSBzdXBwb3J0IGRvdHRlZCBxdWFkcywgd2UgZG9uJ3QKKwkgKiBzdXBwb3J0IHNob3J0aGFuZC4KKwkgKi8KKwluID0gcHAgLSBwYXJ0cyArIDE7CisJaWYgKG4gIT0gNCkKKwkJcmV0dXJuICgwKTsKKwkvKgorCSAqIHBhcnRzWzAtMl0gd2VyZSBzZXQgdG8gdGhlIGZpcnN0IDMgcGFydHMgb2YgdGhlIGFkZHJlc3M7CisJICogdmFsIHdhcyBzZXQgdG8gdGhlIDR0aCBwYXJ0LgorCSAqCisJICogQ2hlY2sgaWYgYW55IHBhcnQgaXMgYmlnZ2VyIHRoYW4gMjU1LgorCSAqLworCWlmICgocGFydHNbMF0gfCBwYXJ0c1sxXSB8IHBhcnRzWzJdIHwgdmFsKSA+IDB4ZmYpCisJCXJldHVybiAoMCk7CisJLyoKKwkgKiBBZGQgdGhlIG90aGVyIHRocmVlIHBhcnRzIHRvIHZhbC4KKwkgKi8KKwl2YWwgfD0gKHBhcnRzWzBdIDw8IDI0KSB8IChwYXJ0c1sxXSA8PCAxNikgfCAocGFydHNbMl0gPDwgOCk7CisJaWYgKGRzdCkgeworCQl2YWwgPSBodG9ubCh2YWwpOworCQltZW1jcHkoZHN0LCAmdmFsLCBOU19JTkFERFJTWik7CisJfQorCXJldHVybiAoMSk7Cit9CisKKy8qIGludAorICogc3RydG9hZGRyNihzcmMsIGRzdCkKKyAqCWNvbnZlcnQgcHJlc2VudGF0aW9uIGxldmVsIElQdjYgYWRkcmVzcyB0byBuZXR3b3JrIG9yZGVyIGJpbmFyeSBmb3JtLgorICogcmV0dXJuOgorICoJMSBpZiBgc3JjJyBpcyBhIHZhbGlkIFtSRkMxODg0IDIuMl0gYWRkcmVzcywgZWxzZSAwLgorICogbm90aWNlOgorICoJKDEpIGRvZXMgbm90IHRvdWNoIGBkc3QnIHVubGVzcyBpdCdzIHJldHVybmluZyAxLgorICoJKDIpIDo6IGluIGEgZnVsbCBhZGRyZXNzIGlzIHNpbGVudGx5IGlnbm9yZWQuCisgKiBjcmVkaXQ6CisgKglpbnNwaXJlZCBieSBNYXJrIEFuZHJld3MuCisgKiBhdXRob3I6CisgKglQYXVsIFZpeGllLCAxOTk2LgorICovCitpbnQKK3N0cnRvYWRkcjYoY29uc3QgY2hhciAqc3JjLCB2b2lkICpkc3QpCit7CisJc3RhdGljIGNvbnN0IGNoYXIgeGRpZ2l0c19sW10gPSAiMDEyMzQ1Njc4OWFiY2RlZiIsCisJCQkgIHhkaWdpdHNfdVtdID0gIjAxMjM0NTY3ODlBQkNERUYiOworCXVfY2hhciB0bXBbTlNfSU42QUREUlNaXSwgKnRwLCAqZW5kcCwgKmNvbG9ucDsKKwljb25zdCBjaGFyICp4ZGlnaXRzLCAqY3VydG9rOworCWludCBjaCwgc2Vlbl94ZGlnaXRzOworCXVfaW50IHZhbDsKKworCW1lbXNldCgodHAgPSB0bXApLCAnXDAnLCBOU19JTjZBRERSU1opOworCWVuZHAgPSB0cCArIE5TX0lONkFERFJTWjsKKwljb2xvbnAgPSBOVUxMOworCS8qIExlYWRpbmcgOjogcmVxdWlyZXMgc29tZSBzcGVjaWFsIGhhbmRsaW5nLiAqLworCWlmICgqc3JjID09ICc6JykKKwkJaWYgKCorK3NyYyAhPSAnOicpCisJCQlyZXR1cm4gKDApOworCWN1cnRvayA9IHNyYzsKKwlzZWVuX3hkaWdpdHMgPSAwOworCXZhbCA9IDA7CisJd2hpbGUgKChjaCA9ICpzcmMrKykgIT0gJ1wwJykgeworCQljb25zdCBjaGFyICpwY2g7CisKKwkJaWYgKChwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX2wpLCBjaCkpID09IE5VTEwpCisJCQlwY2ggPSBzdHJjaHIoKHhkaWdpdHMgPSB4ZGlnaXRzX3UpLCBjaCk7CisJCWlmIChwY2ggIT0gTlVMTCkgeworCQkJdmFsIDw8PSA0OworCQkJdmFsIHw9IChpbnQpKHBjaCAtIHhkaWdpdHMpOworCQkJaWYgKCsrc2Vlbl94ZGlnaXRzID4gNCkKKwkJCQlyZXR1cm4gKDApOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGNoID09ICc6JykgeworCQkJY3VydG9rID0gc3JjOworCQkJaWYgKCFzZWVuX3hkaWdpdHMpIHsKKwkJCQlpZiAoY29sb25wKQorCQkJCQlyZXR1cm4gKDApOworCQkJCWNvbG9ucCA9IHRwOworCQkJCWNvbnRpbnVlOworCQkJfSBlbHNlIGlmICgqc3JjID09ICdcMCcpCisJCQkJcmV0dXJuICgwKTsKKwkJCWlmICh0cCArIE5TX0lOVDE2U1ogPiBlbmRwKQorCQkJCXJldHVybiAoMCk7CisJCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOworCQkJKnRwKysgPSAodV9jaGFyKSB2YWwgJiAweGZmOworCQkJc2Vlbl94ZGlnaXRzID0gMDsKKwkJCXZhbCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCQlpZiAoY2ggPT0gJy4nICYmICgodHAgKyBOU19JTkFERFJTWikgPD0gZW5kcCkgJiYKKwkJICAgIHN0cnRvYWRkcihjdXJ0b2ssIHRwKSA+IDApIHsKKwkJCXRwICs9IE5TX0lOQUREUlNaOworCQkJc2Vlbl94ZGlnaXRzID0gMDsKKwkJCWJyZWFrOwkvKiU8ICdcXDAnIHdhcyBzZWVuIGJ5IHN0cnRvYWRkcigpLiAqLworCQl9CisJCXJldHVybiAoMCk7CisJfQorCWlmIChzZWVuX3hkaWdpdHMpIHsKKwkJaWYgKHRwICsgTlNfSU5UMTZTWiA+IGVuZHApCisJCQlyZXR1cm4gKDApOworCQkqdHArKyA9ICh1X2NoYXIpICh2YWwgPj4gOCkgJiAweGZmOworCQkqdHArKyA9ICh1X2NoYXIpIHZhbCAmIDB4ZmY7CisJfQorCWlmIChjb2xvbnAgIT0gTlVMTCkgeworCQkvKgorCQkgKiBTaW5jZSBzb21lIG1lbW1vdmUoKSdzIGVycm9uZW91c2x5IGZhaWwgdG8gaGFuZGxlCisJCSAqIG92ZXJsYXBwaW5nIHJlZ2lvbnMsIHdlJ2xsIGRvIHRoZSBzaGlmdCBieSBoYW5kLgorCQkgKi8KKwkJY29uc3QgcHRyZGlmZl90IG4gPSB0cCAtIGNvbG9ucDsKKwkJaW50IGk7CisKKwkJaWYgKHRwID09IGVuZHApCisJCQlyZXR1cm4gKDApOworCQlmb3IgKGkgPSAxOyBpIDw9IG47IGkrKykgeworCQkJZW5kcFstIGldID0gY29sb25wW24gLSBpXTsKKwkJCWNvbG9ucFtuIC0gaV0gPSAwOworCQl9CisJCXRwID0gZW5kcDsKKwl9CisJaWYgKHRwICE9IGVuZHApCisJCXJldHVybiAoMCk7CisJbWVtY3B5KGRzdCwgdG1wLCBOU19JTjZBRERSU1opOworCXJldHVybiAoMSk7Cit9CmRpZmYgLS1naXQgYS9zdHJ0b2FkZHIuaCBiL3N0cnRvYWRkci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhiZDIyYzcKLS0tIC9kZXYvbnVsbAorKysgYi9zdHJ0b2FkZHIuaApAQCAtMCwwICsxLDIzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA0IGJ5IEludGVybmV0IFN5c3RlbXMgQ29uc29ydGl1bSwgSW5jLiAoIklTQyIpCisgKiBDb3B5cmlnaHQgKGMpIDE5OTYsMTk5OSBieSBJbnRlcm5ldCBTb2Z0d2FyZSBDb25zb3J0aXVtLgorICoKKyAqIFBlcm1pc3Npb24gdG8gdXNlLCBjb3B5LCBtb2RpZnksIGFuZCBkaXN0cmlidXRlIHRoaXMgc29mdHdhcmUgZm9yIGFueQorICogcHVycG9zZSB3aXRoIG9yIHdpdGhvdXQgZmVlIGlzIGhlcmVieSBncmFudGVkLCBwcm92aWRlZCB0aGF0IHRoZSBhYm92ZQorICogY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSBhcHBlYXIgaW4gYWxsIGNvcGllcy4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiBBTkQgSVNDIERJU0NMQUlNUyBBTEwgV0FSUkFOVElFUworICogV0lUSCBSRUdBUkQgVE8gVEhJUyBTT0ZUV0FSRSBJTkNMVURJTkcgQUxMIElNUExJRUQgV0FSUkFOVElFUyBPRgorICogTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTLiAgSU4gTk8gRVZFTlQgU0hBTEwgSVNDIEJFIExJQUJMRSBGT1IKKyAqIEFOWSBTUEVDSUFMLCBESVJFQ1QsIElORElSRUNULCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgT1IgQU5ZIERBTUFHRVMKKyAqIFdIQVRTT0VWRVIgUkVTVUxUSU5HIEZST00gTE9TUyBPRiBVU0UsIERBVEEgT1IgUFJPRklUUywgV0hFVEhFUiBJTiBBTgorICogQUNUSU9OIE9GIENPTlRSQUNULCBORUdMSUdFTkNFIE9SIE9USEVSIFRPUlRJT1VTIEFDVElPTiwgQVJJU0lORyBPVVQKKyAqIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgVVNFIE9SIFBFUkZPUk1BTkNFIE9GIFRISVMgU09GVFdBUkUuCisgKi8KKworLyogVGV4dCBzdHJpbmcgdG8gYWRkcmVzcyB0cmFuc2xhdGlvbiByb3V0aW5lcy4gKi8KKworaW50CXN0cnRvYWRkcihjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CitpbnQJc3RydG9hZGRyNihjb25zdCBjaGFyICpzcmMsIHZvaWQgKmRzdCk7CisKKwpkaWZmIC0tZ2l0IGEvdGNwLmggYi90Y3AuaAppbmRleCBjMThkMTM4Li45MTJiNWU4IDEwMDY0NAotLS0gYS90Y3AuaAorKysgYi90Y3AuaApAQCAtODEsNTYgKzgxLDgwIEBACiAjZGVmaW5lIFRDUE9QVF9TSUdOQVRVUkUJMTkJLyogS2V5ZWQgTUQ1IChyZmMyMzg1KSAqLwogI2RlZmluZSAgICBUQ1BPTEVOX1NJR05BVFVSRQkJMTgKICNkZWZpbmUgVENQX1NJR0xFTiAxNgkJCS8qIGxlbmd0aCBvZiBhbiBvcHRpb24gMTkgZGlnZXN0ICovCi0jZGVmaW5lIFRDUE9QVF9BVVRIICAgICAgICAgICAgIDIwICAgICAgLyogRW5oYW5jZWQgQVVUSCBvcHRpb24gKi8KKyNkZWZpbmUgVENQT1BUX1NDUFMJCTIwCS8qIFNDUFMtVFAgKENDU0RTIDcxNC4wLUItMikgKi8KICNkZWZpbmUJVENQT1BUX1VUTwkJMjgJLyogdGNwIHVzZXIgdGltZW91dCAocmZjNTQ4MikgKi8KICNkZWZpbmUJICAgVENQT0xFTl9VVE8JCQk0CisjZGVmaW5lIFRDUE9QVF9UQ1BBTwkJMjkJLyogVENQIGF1dGhlbnRpY2F0aW9uIG9wdGlvbiAocmZjNTkyNSkgKi8KICNkZWZpbmUJVENQT1BUX01QVENQCQkzMAkvKiBNUFRDUCBvcHRpb25zICovCisjZGVmaW5lIFRDUE9QVF9GQVNUT1BFTgkJMzQJLyogVENQIEZhc3QgT3BlbiAocmZjNzQxMykgKi8KICNkZWZpbmUgVENQT1BUX0VYUEVSSU1FTlQyCTI1NAkvKiBleHBlcmltZW50YWwgaGVhZGVycyAocmZjNDcyNykgKi8KIAogI2RlZmluZSBUQ1BPUFRfVFNUQU1QX0hEUglcCiAgICAgKFRDUE9QVF9OT1A8PDI0fFRDUE9QVF9OT1A8PDE2fFRDUE9QVF9USU1FU1RBTVA8PDh8VENQT0xFTl9USU1FU1RBTVApCiAKKyNpZm5kZWYgRlRQX1BPUlQKKyNkZWZpbmUgRlRQX1BPUlQJCTIxCisjZW5kaWYKKyNpZm5kZWYgU1NIX1BPUlQKKyNkZWZpbmUgU1NIX1BPUlQJCTIyCisjZW5kaWYKICNpZm5kZWYgVEVMTkVUX1BPUlQKLSNkZWZpbmUgVEVMTkVUX1BPUlQgICAgICAgICAgICAgMjMKKyNkZWZpbmUgVEVMTkVUX1BPUlQJCTIzCiAjZW5kaWYKICNpZm5kZWYgU01UUF9QT1JUCiAjZGVmaW5lIFNNVFBfUE9SVAkJMjUKICNlbmRpZgotI2lmbmRlZiBCR1BfUE9SVAotI2RlZmluZSBCR1BfUE9SVCAgICAgICAgICAgICAgICAxNzkKLSNlbmRpZgotI2RlZmluZSBORVRCSU9TX1NTTl9QT1JUICAgICAgICAxMzkKLSNpZm5kZWYgT1BFTkZMT1dfUE9SVF9PTEQKLSNkZWZpbmUgT1BFTkZMT1dfUE9SVF9PTEQgICAgICAgNjYzMwotI2VuZGlmCi0jaWZuZGVmIE9QRU5GTE9XX1BPUlRfSUFOQQotI2RlZmluZSBPUEVORkxPV19QT1JUX0lBTkEgICAgICA2NjUzCi0jZW5kaWYKLSNpZm5kZWYgUFBUUF9QT1JUCi0jZGVmaW5lIFBQVFBfUE9SVAkgICAgICAgIDE3MjMKLSNlbmRpZgotI2RlZmluZSBCRUVQX1BPUlQgICAgICAgICAgICAgICAxMDI4OAotI2lmbmRlZiBORlNfUE9SVAotI2RlZmluZSBORlNfUE9SVAkgICAgICAgIDIwNDkKLSNlbmRpZgotI2RlZmluZSBNU0RQX1BPUlQJICAgICAgICA2MzkKLSNkZWZpbmUgUlBLSV9SVFJfUE9SVAkgICAgICAgIDMyMwotI2RlZmluZSBMRFBfUE9SVCAgICAgICAgICAgICAgICA2NDYKLSNpZm5kZWYgU01CX1BPUlQKLSNkZWZpbmUgU01CX1BPUlQgICAgICAgICAgICAgICAgNDQ1CisjaWZuZGVmIE5BTUVTRVJWRVJfUE9SVAorI2RlZmluZSBOQU1FU0VSVkVSX1BPUlQJCTUzCiAjZW5kaWYKICNpZm5kZWYgSFRUUF9QT1JUCiAjZGVmaW5lIEhUVFBfUE9SVAkJODAKICNlbmRpZgotI2lmbmRlZiBIVFRQX1BPUlRfQUxUCi0jZGVmaW5lIEhUVFBfUE9SVF9BTFQJCTgwODAKKyNpZm5kZWYgTkVUQklPU19OU19QT1JUCisjZGVmaW5lIE5FVEJJT1NfTlNfUE9SVAkJMTM3CS8qIFJGQyAxMDAxLCBSRkMgMTAwMiAqLworI2VuZGlmCisjaWZuZGVmIE5FVEJJT1NfU1NOX1BPUlQKKyNkZWZpbmUgTkVUQklPU19TU05fUE9SVAkxMzkJLyogUkZDIDEwMDEsIFJGQyAxMDAyICovCisjZW5kaWYKKyNpZm5kZWYgQkdQX1BPUlQKKyNkZWZpbmUgQkdQX1BPUlQJCTE3OQorI2VuZGlmCisjaWZuZGVmIFJQS0lfUlRSX1BPUlQKKyNkZWZpbmUgUlBLSV9SVFJfUE9SVAkJMzIzCisjZW5kaWYKKyNpZm5kZWYgU01CX1BPUlQKKyNkZWZpbmUgU01CX1BPUlQJCTQ0NQogI2VuZGlmCiAjaWZuZGVmIFJUU1BfUE9SVAogI2RlZmluZSBSVFNQX1BPUlQJCTU1NAogI2VuZGlmCisjaWZuZGVmIE1TRFBfUE9SVAorI2RlZmluZSBNU0RQX1BPUlQJCTYzOQorI2VuZGlmCisjaWZuZGVmIExEUF9QT1JUCisjZGVmaW5lIExEUF9QT1JUCQk2NDYKKyNlbmRpZgorI2lmbmRlZiBQUFRQX1BPUlQKKyNkZWZpbmUgUFBUUF9QT1JUCQkxNzIzCisjZW5kaWYKKyNpZm5kZWYgTkZTX1BPUlQKKyNkZWZpbmUgTkZTX1BPUlQJCTIwNDkKKyNlbmRpZgorI2lmbmRlZiBPUEVORkxPV19QT1JUX09MRAorI2RlZmluZSBPUEVORkxPV19QT1JUX09MRAk2NjMzCisjZW5kaWYKKyNpZm5kZWYgT1BFTkZMT1dfUE9SVF9JQU5BCisjZGVmaW5lIE9QRU5GTE9XX1BPUlRfSUFOQQk2NjUzCisjZW5kaWYKKyNpZm5kZWYgSFRUUF9QT1JUX0FMVAorI2RlZmluZSBIVFRQX1BPUlRfQUxUCQk4MDgwCisjZW5kaWYKICNpZm5kZWYgUlRTUF9QT1JUX0FMVAogI2RlZmluZSBSVFNQX1BPUlRfQUxUCQk4NTU0CiAjZW5kaWYKLSNpZm5kZWYgRlRQX1BPUlQKLSNkZWZpbmUgRlRQX1BPUlQJCTIxCisjaWZuZGVmIEJFRVBfUE9SVAorI2RlZmluZSBCRUVQX1BPUlQJCTEwMjg4CisjZW5kaWYKKyNpZm5kZWYgUkVESVNfUE9SVAorI2RlZmluZSBSRURJU19QT1JUCQk2Mzc5CiAjZW5kaWYKZGlmZiAtLWdpdCBhL3RjcGR1bXAuMS5pbiBiL3RjcGR1bXAuMS5pbgppbmRleCBmOTUyMmNiLi5mMDRhNTc5IDEwMDY0NAotLS0gYS90Y3BkdW1wLjEuaW4KKysrIGIvdGNwZHVtcC4xLmluCkBAIC0yMCwxNCArMjAsMTQgQEAKIC5cIiBXQVJSQU5USUVTLCBJTkNMVURJTkcsIFdJVEhPVVQgTElNSVRBVElPTiwgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRgogLlwiIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuCiAuXCIKLS5USCBUQ1BEVU1QIDEgICIxMSBKdWx5IDIwMTQiCisuVEggVENQRFVNUCAxICAiMTcgU2VwdGVtYmVyIDIwMTUiCiAuU0ggTkFNRQogdGNwZHVtcCBcLSBkdW1wIHRyYWZmaWMgb24gYSBuZXR3b3JrCiAuU0ggU1lOT1BTSVMKIC5uYQogLkIgdGNwZHVtcAogWwotLkIgXC1BYmREZWZoSElKS2xMbk5PcHFSU3R1VXZ4WCMKKy5CIFwtQWJkRGVmaEhJSktsTG5OT3BxU3R1VXZ4WCMKIF0gWwogLkIgXC1CCiAuSSBidWZmZXJfc2l6ZQpAQCAtNDAwLDcgKzQwMCw3IEBACiBmbGFnIGlzIHN1cHBvcnRlZCwgYW4gaW50ZXJmYWNlIG51bWJlciBhcyBwcmludGVkIGJ5IHRoYXQgZmxhZyBjYW4gYmUKIHVzZWQgYXMgdGhlCiAuSSBpbnRlcmZhY2UKLWFyZ3VtZW50LgorYXJndW1lbnQsIGlmIG5vIGludGVyZmFjZSBvbiB0aGUgc3lzdGVtIGhhcyB0aGF0IG51bWJlciBhcyBhIG5hbWUuCiAuVFAKIC5CIFwtSQogLlBEIDAKQEAgLTU5MywxMiArNTkzLDYgQEAKIFByaW50IGxlc3MgcHJvdG9jb2wgaW5mb3JtYXRpb24gc28gb3V0cHV0CiBsaW5lcyBhcmUgc2hvcnRlci4KIC5UUAotLkIgXC1SCi1Bc3N1bWUgRVNQL0FIIHBhY2tldHMgdG8gYmUgYmFzZWQgb24gb2xkIHNwZWNpZmljYXRpb24gKFJGQzE4MjUgdG8gUkZDMTgyOSkuCi1JZiBzcGVjaWZpZWQsIFxmSXRjcGR1bXBcZlAgd2lsbCBub3QgcHJpbnQgcmVwbGF5IHByZXZlbnRpb24gZmllbGQuCi1TaW5jZSB0aGVyZSBpcyBubyBwcm90b2NvbCB2ZXJzaW9uIGZpZWxkIGluIEVTUC9BSCBzcGVjaWZpY2F0aW9uLAotXGZJdGNwZHVtcFxmUCBjYW5ub3QgZGVkdWNlIHRoZSB2ZXJzaW9uIG9mIEVTUC9BSCBwcm90b2NvbC4KLS5UUAogLkJJIFwtciAiIGZpbGUiCiBSZWFkIHBhY2tldHMgZnJvbSBcZklmaWxlXGZSICh3aGljaCB3YXMgY3JlYXRlZCB3aXRoIHRoZQogLkIgXC13CkBAIC02MTgsNyArNjEyLDcgQEAKIC5CSSBcLVwtc25hcHNob3RcLWxlbmd0aD0gc25hcGxlbgogLlBECiBTbmFyZiBcZklzbmFwbGVuXGZQIGJ5dGVzIG9mIGRhdGEgZnJvbSBlYWNoIHBhY2tldCByYXRoZXIgdGhhbiB0aGUKLWRlZmF1bHQgb2YgNjU1MzUgYnl0ZXMuCitkZWZhdWx0IG9mIDI2MjE0NCBieXRlcy4KIFBhY2tldHMgdHJ1bmNhdGVkIGJlY2F1c2Ugb2YgYSBsaW1pdGVkIHNuYXBzaG90CiBhcmUgaW5kaWNhdGVkIGluIHRoZSBvdXRwdXQgd2l0aCBgYFt8XGZJcHJvdG9cZlBdJycsIHdoZXJlIFxmSXByb3RvXGZQCiBpcyB0aGUgbmFtZSBvZiB0aGUgcHJvdG9jb2wgbGV2ZWwgYXQgd2hpY2ggdGhlIHRydW5jYXRpb24gaGFzIG9jY3VycmVkLgpAQCAtNjMwLDcgKzYyNCw3IEBACiBZb3Ugc2hvdWxkIGxpbWl0IFxmSXNuYXBsZW5cZlAgdG8gdGhlIHNtYWxsZXN0IG51bWJlciB0aGF0IHdpbGwKIGNhcHR1cmUgdGhlIHByb3RvY29sIGluZm9ybWF0aW9uIHlvdSdyZSBpbnRlcmVzdGVkIGluLgogU2V0dGluZwotXGZJc25hcGxlblxmUCB0byAwIHNldHMgaXQgdG8gdGhlIGRlZmF1bHQgb2YgNjU1MzUsCitcZklzbmFwbGVuXGZQIHRvIDAgc2V0cyBpdCB0byB0aGUgZGVmYXVsdCBvZiAyNjIxNDQsCiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkgd2l0aCByZWNlbnQgb2xkZXIgdmVyc2lvbnMgb2YKIC5JUiB0Y3BkdW1wIC4KIC5UUApAQCAtNjQ0LDYgKzYzOCw3IEBACiBcZkJsbXBcZlIgKExpbmsgTWFuYWdlbWVudCBQcm90b2NvbCksCiBcZkJwZ21cZlIgKFByYWdtYXRpYyBHZW5lcmFsIE11bHRpY2FzdCksCiBcZkJwZ21fem10cDFcZlIgKFpNVFAvMS4wIGluc2lkZSBQR00vRVBHTSksCitcZkJyZXNwXGZSIChSRWRpcyBTZXJpYWxpemF0aW9uIFByb3RvY29sKSwKIFxmQnJhZGl1c1xmUiAoUkFESVVTKSwKIFxmQnJwY1xmUiAoUmVtb3RlIFByb2NlZHVyZSBDYWxsKSwKIFxmQnJ0cFxmUiAoUmVhbC1UaW1lIEFwcGxpY2F0aW9ucyBwcm90b2NvbCksCkBAIC0xODgyLDExICsxODc3LDE1IEBACiAuZmkKIC5SRQogYW5kIGlzIGFzIGFjY3VyYXRlIGFzIHRoZSBrZXJuZWwncyBjbG9jay4KLVRoZSB0aW1lc3RhbXAgcmVmbGVjdHMgdGhlIHRpbWUgdGhlIGtlcm5lbCBmaXJzdCBzYXcgdGhlIHBhY2tldC4KLU5vIGF0dGVtcHQKLWlzIG1hZGUgdG8gYWNjb3VudCBmb3IgdGhlIHRpbWUgbGFnIGJldHdlZW4gd2hlbiB0aGUKLUV0aGVybmV0IGludGVyZmFjZSByZW1vdmVkIHRoZSBwYWNrZXQgZnJvbSB0aGUgd2lyZSBhbmQgd2hlbiB0aGUga2VybmVsCi1zZXJ2aWNlZCB0aGUgYG5ldyBwYWNrZXQnIGludGVycnVwdC4KK1RoZSB0aW1lc3RhbXAgcmVmbGVjdHMgdGhlIHRpbWUgdGhlIGtlcm5lbCBhcHBsaWVkIGEgdGltZSBzdGFtcCB0byB0aGUgcGFja2V0LgorTm8gYXR0ZW1wdCBpcyBtYWRlIHRvIGFjY291bnQgZm9yIHRoZSB0aW1lIGxhZyBiZXR3ZWVuIHdoZW4gdGhlIG5ldHdvcmsKK2ludGVyZmFjZSBmaW5pc2hlZCByZWNlaXZpbmcgdGhlIHBhY2tldCBmcm9tIHRoZSBuZXR3b3JrIGFuZCB3aGVuIHRoZQora2VybmVsIGFwcGxpZWQgYSB0aW1lIHN0YW1wIHRvIHRoZSBwYWNrZXQ7IHRoYXQgdGltZSBsYWcgY291bGQgaW5jbHVkZSBhCitkZWxheSBiZXR3ZWVuIHRoZSB0aW1lIHdoZW4gdGhlIG5ldHdvcmsgaW50ZXJmYWNlIGZpbmlzaGVkIHJlY2VpdmluZyBhCitwYWNrZXQgZnJvbSB0aGUgbmV0d29yayBhbmQgdGhlIHRpbWUgd2hlbiBhbiBpbnRlcnJ1cHQgd2FzIGRlbGl2ZXJlZCB0bwordGhlIGtlcm5lbCB0byBnZXQgaXQgdG8gcmVhZCB0aGUgcGFja2V0IGFuZCBhIGRlbGF5IGJldHdlZW4gdGhlIHRpbWUKK3doZW4gdGhlIGtlcm5lbCBzZXJ2aWNlZCB0aGUgYG5ldyBwYWNrZXQnIGludGVycnVwdCBhbmQgdGhlIHRpbWUgd2hlbiBpdAorYXBwbGllZCBhIHRpbWUgc3RhbXAgdG8gdGhlIHBhY2tldC4KIC5TSCAiU0VFIEFMU08iCiBzdHR5KDEpLCBwY2FwKDNQQ0FQKSwgYnBmKDQpLCBuaXQoNFApLCBwY2FwLXNhdmVmaWxlKEBNQU5fRklMRV9GT1JNQVRTQCksCiBwY2FwLWZpbHRlcihATUFOX01JU0NfSU5GT0ApLCBwY2FwLXRzdGFtcChATUFOX01JU0NfSU5GT0ApCmRpZmYgLS1naXQgYS90Y3BkdW1wLmMgYi90Y3BkdW1wLmMKaW5kZXggMmI3MWQyNy4uNzNiZjEzOCAxMDA2NDQKLS0tIGEvdGNwZHVtcC5jCisrKyBiL3RjcGR1bXAuYwpAQCAtMzIsNyArMzIsNyBAQAogI2VuZGlmCiAKIC8qCi0gKiB0Y3BkdW1wIC0gbW9uaXRvciB0Y3AvaXAgdHJhZmZpYyBvbiBhbiBldGhlcm5ldC4KKyAqIHRjcGR1bXAgLSBkdW1wIHRyYWZmaWMgb24gYSBuZXR3b3JrCiAgKgogICogRmlyc3Qgd3JpdHRlbiBpbiAxOTg3IGJ5IFZhbiBKYWNvYnNvbiwgTGF3cmVuY2UgQmVya2VsZXkgTGFib3JhdG9yeS4KICAqIE1lcmNpbGVzc2x5IGhhY2tlZCBhbmQgb2NjYXNpb25hbGx5IGltcHJvdmVkIHNpbmNlIHRoZW4gdmlhIHRoZQpAQCAtNTQsMTggKzU0LDEyIEBACiAjZW5kaWYKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCi0jaWZkZWYgV0lOMzIKLSNpbmNsdWRlICJ3MzJfZnpzLmgiCi1leHRlcm4gaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIpOwotZXh0ZXJuIGludCBTSVpFX0JVRjsKLSNkZWZpbmUgb2ZmX3QgbG9uZwotI2RlZmluZSB1aW50IFVJTlQKLSNlbmRpZiAvKiBXSU4zMiAqLworI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CiAKLSNpZmRlZiBVU0VfTElCU01JCi0jaW5jbHVkZSA8c21pLmg+CisjaWZkZWYgSEFWRV9GQ05UTF9ICisjaW5jbHVkZSA8ZmNudGwuaD4KICNlbmRpZgogCiAjaWZkZWYgSEFWRV9MSUJDUllQVE8KQEAgLTg1LDIxICs3OSwyMSBAQAogI2luY2x1ZGUgPHN5cy9jYXBhYmlsaXR5Lmg+CiAjaW5jbHVkZSA8c3lzL2lvY2NvbS5oPgogI2luY2x1ZGUgPG5ldC9icGYuaD4KLSNpbmNsdWRlIDxmY250bC5oPgogI2luY2x1ZGUgPGxpYmdlbi5oPgogI2VuZGlmCS8qIEhBVkVfQ0FQU0lDVU0gKi8KICNpbmNsdWRlIDxwY2FwLmg+CiAjaW5jbHVkZSA8c2lnbmFsLmg+CiAjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRhcmcuaD4KICNpbmNsdWRlIDxzdGRsaWIuaD4KICNpbmNsdWRlIDxzdHJpbmcuaD4KICNpbmNsdWRlIDxsaW1pdHMuaD4KLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgX1dJTjMyCiAjaW5jbHVkZSA8c3lzL3dhaXQuaD4KICNpbmNsdWRlIDxzeXMvcmVzb3VyY2UuaD4KICNpbmNsdWRlIDxwd2QuaD4KICNpbmNsdWRlIDxncnAuaD4KLSNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIF9XSU4zMiAqLwogCiAvKiBjYXBhYmlsaXRpZXMgY29udmVuaWVuY2UgbGlicmFyeSAqLwogLyogSWYgYSBjb2RlIGRlcGVuZHMgb24gSEFWRV9MSUJDQVBfTkcsIGl0IGRlcGVuZHMgYWxzbyBvbiBIQVZFX0NBUF9OR19ILgpAQCAtMTIxLDYgKzExNSw5IEBACiAjaW5jbHVkZSAic2V0c2lnbmFsLmgiCiAjaW5jbHVkZSAiZ210MmxvY2FsLmgiCiAjaW5jbHVkZSAicGNhcC1taXNzaW5nLmgiCisjaW5jbHVkZSAiYXNjaWlfc3RyY2FzZWNtcC5oIgorCisjaW5jbHVkZSAicHJpbnQuaCIKIAogI2lmbmRlZiBQQVRIX01BWAogI2RlZmluZSBQQVRIX01BWCAxMDI0CkBAIC0xMzIsNTAgKzEyOSw3NCBAQAogI2RlZmluZSBTSUdOQUxfUkVRX0lORk8gU0lHVVNSMQogI2VuZGlmCiAKLW5ldGRpc3NlY3Rfb3B0aW9ucyBHbmRvOwotbmV0ZGlzc2VjdF9vcHRpb25zICpnbmRvID0gJkduZG87Ci0KK3N0YXRpYyBpbnQgQmZsYWc7CQkJLyogYnVmZmVyIHNpemUgKi8KK3N0YXRpYyBpbnQgQ2ZsYWc7CQkJLyogcm90YXRlIGR1bXAgZmlsZXMgYWZ0ZXIgdGhpcyBtYW55IGJ5dGVzICovCitzdGF0aWMgaW50IENmbGFnX2NvdW50OwkJCS8qIEtlZXAgdHJhY2sgb2Ygd2hpY2ggZmlsZSBudW1iZXIgd2UncmUgd3JpdGluZyAqLwogc3RhdGljIGludCBEZmxhZzsJCQkvKiBsaXN0IGF2YWlsYWJsZSBkZXZpY2VzIGFuZCBleGl0ICovCi1zdGF0aWMgaW50IGRmbGFnOwkJCS8qIHByaW50IGZpbHRlciBjb2RlICovCisvKgorICogVGhpcyBpcyBleHBvcnRlZCBiZWNhdXNlLCBpbiBzb21lIHZlcnNpb25zIG9mIGxpYnBjYXAsIGlmIGxpYnBjYXAKKyAqIGlzIGJ1aWx0IHdpdGggb3B0aW1pemVyIGRlYnVnZ2luZyBjb2RlICh3aGljaCBpcyAqTk9UKiB0aGUgZGVmYXVsdAorICogY29uZmlndXJhdGlvbiEpLCB0aGUgbGlicmFyeSAqaW1wb3J0cyooISkgYSB2YXJpYWJsZSBuYW1lZCBkZmxhZywKKyAqIHVuZGVyIHRoZSBleHBlY3RhdGlvbiB0aGF0IHRjcGR1bXAgaXMgZXhwb3J0aW5nIGl0LCB0byBnb3Zlcm4KKyAqIGhvdyBtdWNoIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiB0byBwcmludCB3aGVuIG9wdGltaXppbmcKKyAqIHRoZSBnZW5lcmF0ZWQgQlBGIGNvZGUuCisgKgorICogVGhpcyBpcyBhIGhvcnJpYmxlIGhhY2s7IG5ld2VyIHZlcnNpb25zIG9mIGxpYnBjYXAgZG9uJ3QgaW1wb3J0CisgKiBkZmxhZyBidXQsIGluc3RlYWQsICppZiogYnVpbHQgd2l0aCBvcHRpbWl6ZXIgZGVidWdnaW5nIGNvZGUsCisgKiAqZXhwb3J0KiBhIHJvdXRpbmUgdG8gc2V0IHRoYXQgZmxhZy4KKyAqLworaW50IGRmbGFnOwkJCQkvKiBwcmludCBmaWx0ZXIgY29kZSAqLworc3RhdGljIGludCBHZmxhZzsJCQkvKiByb3RhdGUgZHVtcCBmaWxlcyBhZnRlciB0aGlzIG1hbnkgc2Vjb25kcyAqLworc3RhdGljIGludCBHZmxhZ19jb3VudDsJCQkvKiBudW1iZXIgb2YgZmlsZXMgY3JlYXRlZCB3aXRoIEdmbGFnIHJvdGF0aW9uICovCitzdGF0aWMgdGltZV90IEdmbGFnX3RpbWU7CQkvKiBUaGUgbGFzdCB0aW1lX3QgdGhlIGR1bXAgZmlsZSB3YXMgcm90YXRlZC4gKi8KIHN0YXRpYyBpbnQgTGZsYWc7CQkJLyogbGlzdCBhdmFpbGFibGUgZGF0YSBsaW5rIHR5cGVzIGFuZCBleGl0ICovCitzdGF0aWMgaW50IElmbGFnOwkJCS8qIHJmbW9uIChtb25pdG9yKSBtb2RlICovCiAjaWZkZWYgSEFWRV9QQ0FQX1NFVF9UU1RBTVBfVFlQRQogc3RhdGljIGludCBKZmxhZzsJCQkvKiBsaXN0IGF2YWlsYWJsZSB0aW1lIHN0YW1wIHR5cGVzICovCiAjZW5kaWYKK3N0YXRpYyBpbnQgamZsYWcgPSAtMTsJCQkvKiBwYWNrZXQgdGltZSBzdGFtcCBzb3VyY2UgKi8KK3N0YXRpYyBpbnQgcGZsYWc7CQkJLyogZG9uJ3QgZ28gcHJvbWlzY3VvdXMgKi8KICNpZmRlZiBIQVZFX1BDQVBfU0VURElSRUNUSU9OCi1pbnQgUWZsYWcgPSAtMTsJCQkJLyogcmVzdHJpY3QgY2FwdHVyZWQgcGFja2V0IGJ5IHNlbmQvcmVjZWl2ZSBkaXJlY3Rpb24gKi8KK3N0YXRpYyBpbnQgUWZsYWcgPSAtMTsJCQkvKiByZXN0cmljdCBjYXB0dXJlZCBwYWNrZXQgYnkgc2VuZC9yZWNlaXZlIGRpcmVjdGlvbiAqLwogI2VuZGlmCitzdGF0aWMgaW50IFVmbGFnOwkJCS8qICJ1bmJ1ZmZlcmVkIiBvdXRwdXQgb2YgZHVtcCBmaWxlcyAqLworc3RhdGljIGludCBXZmxhZzsJCQkvKiByZWN5Y2xlIG91dHB1dCBmaWxlcyBhZnRlciB0aGlzIG51bWJlciBvZiBmaWxlcyAqLworc3RhdGljIGludCBXZmxhZ0NoYXJzOwogc3RhdGljIGNoYXIgKnpmbGFnID0gTlVMTDsJCS8qIGNvbXByZXNzIGVhY2ggc2F2ZWZpbGUgdXNpbmcgYSBzcGVjaWZpZWQgY29tbWFuZCAobGlrZSBnemlwIG9yIGJ6aXAyKSAqLworc3RhdGljIGludCBpbW1lZGlhdGVfbW9kZTsKIAogc3RhdGljIGludCBpbmZvZGVsYXk7CiBzdGF0aWMgaW50IGluZm9wcmludDsKIAogY2hhciAqcHJvZ3JhbV9uYW1lOwogCi1pbnQzMl90IHRoaXN6b25lOwkJLyogc2Vjb25kcyBvZmZzZXQgZnJvbSBnbXQgdG8gbG9jYWwgdGltZSAqLwotCiAvKiBGb3J3YXJkcyAqLworc3RhdGljIHZvaWQgZXJyb3IoY29uc3QgY2hhciAqLCAuLi4pCisgICAgIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSkKKyNpZmRlZiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSworICAgICBfX2F0dHJpYnV0ZV9fKChmb3JtYXQgKHByaW50ZiwgMSwgMikpKQorI2VuZGlmIC8qIF9fQVRUUklCVVRFX19fRk9STUFUX09LICovCisgICAgIDsKK3N0YXRpYyB2b2lkIHdhcm5pbmcoY29uc3QgY2hhciAqLCAuLi4pCisjaWZkZWYgX19BVFRSSUJVVEVfX19GT1JNQVRfT0sKKyAgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDEsIDIpKSkKKyNlbmRpZiAvKiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSyAqLworICAgICA7CitzdGF0aWMgdm9pZCBleGl0X3RjcGR1bXAoaW50KSBfX2F0dHJpYnV0ZV9fKChub3JldHVybikpOwogc3RhdGljIFJFVFNJR1RZUEUgY2xlYW51cChpbnQpOwogc3RhdGljIFJFVFNJR1RZUEUgY2hpbGRfY2xlYW51cChpbnQpOwogc3RhdGljIHZvaWQgcHJpbnRfdmVyc2lvbih2b2lkKTsKIHN0YXRpYyB2b2lkIHByaW50X3VzYWdlKHZvaWQpOwotc3RhdGljIHZvaWQgc2hvd19kbHRzX2FuZF9leGl0KGNvbnN0IGNoYXIgKmRldmljZSwgcGNhcF90ICpwZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKK3N0YXRpYyB2b2lkIHNob3dfdHN0YW1wX3R5cGVzX2FuZF9leGl0KHBjYXBfdCAqLCBjb25zdCBjaGFyICpkZXZpY2UpIF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CitzdGF0aWMgdm9pZCBzaG93X2RsdHNfYW5kX2V4aXQocGNhcF90ICosIGNvbnN0IGNoYXIgKmRldmljZSkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKyNpZmRlZiBIQVZFX1BDQVBfRklOREFMTERFVlMKK3N0YXRpYyB2b2lkIHNob3dfZGV2aWNlc19hbmRfZXhpdCAodm9pZCkgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKTsKKyNlbmRpZgogCiBzdGF0aWMgdm9pZCBwcmludF9wYWNrZXQodV9jaGFyICosIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqLCBjb25zdCB1X2NoYXIgKik7Ci1zdGF0aWMgdm9pZCBuZG9fZGVmYXVsdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKiwgY29uc3QgdV9jaGFyICosIHVfaW50KTsKIHN0YXRpYyB2b2lkIGR1bXBfcGFja2V0X2FuZF90cnVuYyh1X2NoYXIgKiwgY29uc3Qgc3RydWN0IHBjYXBfcGt0aGRyICosIGNvbnN0IHVfY2hhciAqKTsKIHN0YXRpYyB2b2lkIGR1bXBfcGFja2V0KHVfY2hhciAqLCBjb25zdCBzdHJ1Y3QgcGNhcF9wa3RoZHIgKiwgY29uc3QgdV9jaGFyICopOwogc3RhdGljIHZvaWQgZHJvcHJvb3QoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICopOwotc3RhdGljIHZvaWQgbmRvX2Vycm9yKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLCBjb25zdCBjaGFyICpmbXQsIC4uLikKLSAgICAgX19hdHRyaWJ1dGVfXygobm9yZXR1cm4pKQotI2lmZGVmIF9fQVRUUklCVVRFX19fRk9STUFUX09LCi0gICAgIF9fYXR0cmlidXRlX18oKGZvcm1hdCAocHJpbnRmLCAyLCAzKSkpCi0jZW5kaWYgLyogX19BVFRSSUJVVEVfX19GT1JNQVRfT0sgKi8KLSAgICA7Ci1zdGF0aWMgdm9pZCBuZG9fd2FybmluZyhuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgY2hhciAqZm10LCAuLi4pCi0jaWZkZWYgX19BVFRSSUJVVEVfX19GT1JNQVRfT0sKLSAgICAgX19hdHRyaWJ1dGVfXygoZm9ybWF0IChwcmludGYsIDIsIDMpKSkKLSNlbmRpZiAvKiBfX0FUVFJJQlVURV9fX0ZPUk1BVF9PSyAqLwotICAgIDsKIAogI2lmZGVmIFNJR05BTF9SRVFfSU5GTwogUkVUU0lHVFlQRSByZXF1ZXN0aW5mbyhpbnQpOwpAQCAtMTkyLDIwMiArMjEzLDcgQEAKIHN0YXRpYyB2b2lkIGluZm8oaW50KTsKIHN0YXRpYyB1X2ludCBwYWNrZXRzX2NhcHR1cmVkOwogCi1zdHJ1Y3QgcHJpbnRlciB7Ci0gICAgICAgIGlmX3ByaW50ZXIgZjsKLQlpbnQgdHlwZTsKLX07Ci0KLQotc3RydWN0IG5kb19wcmludGVyIHsKLSAgICAgICAgaWZfbmRvX3ByaW50ZXIgZjsKLQlpbnQgdHlwZTsKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwcmludGVyIHByaW50ZXJzW10gPSB7Ci0JeyBOVUxMLAkJCTAgfSwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgbmRvX3ByaW50ZXIgbmRvX3ByaW50ZXJzW10gPSB7Ci0JeyBldGhlcl9pZl9wcmludCwJRExUX0VOMTBNQiB9LAotI2lmZGVmIERMVF9JUE5FVAotCXsgaXBuZXRfaWZfcHJpbnQsCURMVF9JUE5FVCB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0lFRUU4MDJfMTVfNAotCXsgaWVlZTgwMl8xNV80X2lmX3ByaW50LCBETFRfSUVFRTgwMl8xNV80IH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSUVFRTgwMl8xNV80X05PRkNTCi0JeyBpZWVlODAyXzE1XzRfaWZfcHJpbnQsIERMVF9JRUVFODAyXzE1XzRfTk9GQ1MgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9QUEkKLQl7IHBwaV9pZl9wcmludCwJCURMVF9QUEkgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9ORVRBTkFMWVpFUgotCXsgbmV0YW5hbHl6ZXJfaWZfcHJpbnQsIERMVF9ORVRBTkFMWVpFUiB9LAotI2VuZGlmCi0jaWZkZWYgRExUX05FVEFOQUxZWkVSX1RSQU5TUEFSRU5UCi0JeyBuZXRhbmFseXplcl90cmFuc3BhcmVudF9pZl9wcmludCwgRExUX05FVEFOQUxZWkVSX1RSQU5TUEFSRU5UIH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKERMVF9ORkxPRykgJiYgZGVmaW5lZChIQVZFX1BDQVBfTkZMT0dfSCkKLQl7IG5mbG9nX2lmX3ByaW50LAlETFRfTkZMT0d9LAotI2VuZGlmCi0jaWZkZWYgRExUX0NJUAotCXsgY2lwX2lmX3ByaW50LCAgICAgICAgIERMVF9DSVAgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9BVE1fQ0xJUAotCXsgY2lwX2lmX3ByaW50LAkJRExUX0FUTV9DTElQIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSVBfT1ZFUl9GQwotCXsgaXBmY19pZl9wcmludCwJRExUX0lQX09WRVJfRkMgfSwKLSNlbmRpZgotCXsgbnVsbF9pZl9wcmludCwJRExUX05VTEwgfSwKLSNpZmRlZiBETFRfTE9PUAotCXsgbnVsbF9pZl9wcmludCwJRExUX0xPT1AgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9BUFBMRV9JUF9PVkVSX0lFRUUxMzk0Ci0JeyBhcDEzOTRfaWZfcHJpbnQsCURMVF9BUFBMRV9JUF9PVkVSX0lFRUUxMzk0IH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKERMVF9CTFVFVE9PVEhfSENJX0g0X1dJVEhfUEhEUikgJiYgZGVmaW5lZChIQVZFX1BDQVBfQkxVRVRPT1RIX0gpCi0JeyBidF9pZl9wcmludCwJCURMVF9CTFVFVE9PVEhfSENJX0g0X1dJVEhfUEhEUn0sCi0jZW5kaWYKLSNpZmRlZiBETFRfTEFORTgwMjMKLQl7IGxhbmVfaWZfcHJpbnQsICAgICAgICBETFRfTEFORTgwMjMgfSwKLSNlbmRpZgotCXsgYXJjbmV0X2lmX3ByaW50LAlETFRfQVJDTkVUIH0sCi0jaWZkZWYgRExUX0FSQ05FVF9MSU5VWAotCXsgYXJjbmV0X2xpbnV4X2lmX3ByaW50LCBETFRfQVJDTkVUX0xJTlVYIH0sCi0jZW5kaWYKLQl7IHJhd19pZl9wcmludCwJCURMVF9SQVcgfSwKLSNpZmRlZiBETFRfSVBWNAotCXsgcmF3X2lmX3ByaW50LAkJRExUX0lQVjQgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9JUFY2Ci0JeyByYXdfaWZfcHJpbnQsCQlETFRfSVBWNiB9LAotI2VuZGlmCi0jaWZkZWYgSEFWRV9QQ0FQX1VTQl9ICi0jaWZkZWYgRExUX1VTQl9MSU5VWAotCXsgdXNiX2xpbnV4XzQ4X2J5dGVfcHJpbnQsIERMVF9VU0JfTElOVVh9LAotI2VuZGlmIC8qIERMVF9VU0JfTElOVVggKi8KLSNpZmRlZiBETFRfVVNCX0xJTlVYX01NQVBQRUQKLQl7IHVzYl9saW51eF82NF9ieXRlX3ByaW50LCBETFRfVVNCX0xJTlVYX01NQVBQRUR9LAotI2VuZGlmIC8qIERMVF9VU0JfTElOVVhfTU1BUFBFRCAqLwotI2VuZGlmIC8qIEhBVkVfUENBUF9VU0JfSCAqLwotI2lmZGVmIERMVF9TWU1BTlRFQ19GSVJFV0FMTAotCXsgc3ltYW50ZWNfaWZfcHJpbnQsCURMVF9TWU1BTlRFQ19GSVJFV0FMTCB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0NfSERMQwotCXsgY2hkbGNfaWZfcHJpbnQsCURMVF9DX0hETEMgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9IRExDCi0JeyBjaGRsY19pZl9wcmludCwJRExUX0hETEMgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9QUFBfRVRIRVIKLQl7IHBwcG9lX2lmX3ByaW50LAlETFRfUFBQX0VUSEVSIH0sCi0jZW5kaWYKLSNpZiBkZWZpbmVkKERMVF9QRkxPRykgJiYgZGVmaW5lZChIQVZFX05FVF9QRlZBUl9IKQotCXsgcGZsb2dfaWZfcHJpbnQsCURMVF9QRkxPRyB9LAotI2VuZGlmCi0JeyB0b2tlbl9pZl9wcmludCwJRExUX0lFRUU4MDIgfSwKLQl7IGZkZGlfaWZfcHJpbnQsCURMVF9GRERJIH0sCi0jaWZkZWYgRExUX0xJTlVYX1NMTAotCXsgc2xsX2lmX3ByaW50LAkJRExUX0xJTlVYX1NMTCB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0ZSCi0JeyBmcl9pZl9wcmludCwJCURMVF9GUiB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0ZSRUxBWQotCXsgZnJfaWZfcHJpbnQsCQlETFRfRlJFTEFZIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfTUZSCi0JeyBtZnJfaWZfcHJpbnQsCQlETFRfTUZSIH0sCi0jZW5kaWYKLQl7IGF0bV9pZl9wcmludCwJCURMVF9BVE1fUkZDMTQ4MyB9LAotI2lmZGVmIERMVF9TVU5BVE0KLQl7IHN1bmF0bV9pZl9wcmludCwJRExUX1NVTkFUTSB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0VOQwotCXsgZW5jX2lmX3ByaW50LAkJRExUX0VOQyB9LAotI2VuZGlmCi0JeyBzbF9pZl9wcmludCwJCURMVF9TTElQIH0sCi0jaWZkZWYgRExUX1NMSVBfQlNET1MKLQl7IHNsX2JzZG9zX2lmX3ByaW50LAlETFRfU0xJUF9CU0RPUyB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0xUQUxLCi0JeyBsdGFsa19pZl9wcmludCwJRExUX0xUQUxLIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSlVOSVBFUl9BVE0xCi0JeyBqdW5pcGVyX2F0bTFfcHJpbnQsCURMVF9KVU5JUEVSX0FUTTEgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9KVU5JUEVSX0FUTTIKLQl7IGp1bmlwZXJfYXRtMl9wcmludCwJRExUX0pVTklQRVJfQVRNMiB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0pVTklQRVJfTUZSCi0JeyBqdW5pcGVyX21mcl9wcmludCwJRExUX0pVTklQRVJfTUZSIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSlVOSVBFUl9NTEZSCi0JeyBqdW5pcGVyX21sZnJfcHJpbnQsCURMVF9KVU5JUEVSX01MRlIgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9KVU5JUEVSX01MUFBQCi0JeyBqdW5pcGVyX21scHBwX3ByaW50LAlETFRfSlVOSVBFUl9NTFBQUCB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0pVTklQRVJfUFBQT0UKLQl7IGp1bmlwZXJfcHBwb2VfcHJpbnQsCURMVF9KVU5JUEVSX1BQUE9FIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSlVOSVBFUl9QUFBPRV9BVE0KLQl7IGp1bmlwZXJfcHBwb2VfYXRtX3ByaW50LCBETFRfSlVOSVBFUl9QUFBPRV9BVE0gfSwKLSNlbmRpZgotI2lmZGVmIERMVF9KVU5JUEVSX0dHU04KLQl7IGp1bmlwZXJfZ2dzbl9wcmludCwJRExUX0pVTklQRVJfR0dTTiB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0pVTklQRVJfRVMKLQl7IGp1bmlwZXJfZXNfcHJpbnQsCURMVF9KVU5JUEVSX0VTIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSlVOSVBFUl9NT05JVE9SCi0JeyBqdW5pcGVyX21vbml0b3JfcHJpbnQsIERMVF9KVU5JUEVSX01PTklUT1IgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9KVU5JUEVSX1NFUlZJQ0VTCi0JeyBqdW5pcGVyX3NlcnZpY2VzX3ByaW50LCBETFRfSlVOSVBFUl9TRVJWSUNFUyB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0pVTklQRVJfRVRIRVIKLQl7IGp1bmlwZXJfZXRoZXJfcHJpbnQsCURMVF9KVU5JUEVSX0VUSEVSIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfSlVOSVBFUl9QUFAKLQl7IGp1bmlwZXJfcHBwX3ByaW50LAlETFRfSlVOSVBFUl9QUFAgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9KVU5JUEVSX0ZSRUxBWQotCXsganVuaXBlcl9mcmVsYXlfcHJpbnQsCURMVF9KVU5JUEVSX0ZSRUxBWSB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0pVTklQRVJfQ0hETEMKLQl7IGp1bmlwZXJfY2hkbGNfcHJpbnQsCURMVF9KVU5JUEVSX0NIRExDIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfUEtUQVAKLQl7IHBrdGFwX2lmX3ByaW50LAlETFRfUEtUQVAgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9JRUVFODAyXzExX1JBRElPCi0JeyBpZWVlODAyXzExX3JhZGlvX2lmX3ByaW50LAlETFRfSUVFRTgwMl8xMV9SQURJTyB9LAotI2VuZGlmCi0jaWZkZWYgRExUX0lFRUU4MDJfMTEKLQl7IGllZWU4MDJfMTFfaWZfcHJpbnQsCURMVF9JRUVFODAyXzExfSwKLSNlbmRpZgotI2lmZGVmIERMVF9JRUVFODAyXzExX1JBRElPX0FWUwotCXsgaWVlZTgwMl8xMV9yYWRpb19hdnNfaWZfcHJpbnQsCURMVF9JRUVFODAyXzExX1JBRElPX0FWUyB9LAotI2VuZGlmCi0jaWZkZWYgRExUX1BSSVNNX0hFQURFUgotCXsgcHJpc21faWZfcHJpbnQsCURMVF9QUklTTV9IRUFERVIgfSwKLSNlbmRpZgotCXsgcHBwX2lmX3ByaW50LAkJRExUX1BQUCB9LAotI2lmZGVmIERMVF9QUFBfV0lUSERJUkVDVElPTgotCXsgcHBwX2lmX3ByaW50LAkJRExUX1BQUF9XSVRIRElSRUNUSU9OIH0sCi0jZW5kaWYKLSNpZmRlZiBETFRfUFBQX0JTRE9TCi0JeyBwcHBfYnNkb3NfaWZfcHJpbnQsCURMVF9QUFBfQlNET1MgfSwKLSNlbmRpZgotI2lmZGVmIERMVF9QUFBfU0VSSUFMCi0JeyBwcHBfaGRsY19pZl9wcmludCwJRExUX1BQUF9TRVJJQUwgfSwKLSNlbmRpZgotCXsgTlVMTCwJCQkwIH0sCi19OwotCisjaWZkZWYgSEFWRV9QQ0FQX0ZJTkRBTExERVZTCiBzdGF0aWMgY29uc3Qgc3RydWN0IHRvayBzdGF0dXNfZmxhZ3NbXSA9IHsKICNpZmRlZiBQQ0FQX0lGX1VQCiAJeyBQQ0FQX0lGX1VQLCAgICAgICAiVXAiICAgICAgIH0sCkBAIC0zOTgsNTcgKzIyNCw4IEBACiAJeyBQQ0FQX0lGX0xPT1BCQUNLLCAiTG9vcGJhY2siIH0sCiAJeyAwLCBOVUxMIH0KIH07Ci0KLWlmX3ByaW50ZXIKLWxvb2t1cF9wcmludGVyKGludCB0eXBlKQotewotCWNvbnN0IHN0cnVjdCBwcmludGVyICpwOwotCi0JZm9yIChwID0gcHJpbnRlcnM7IHAtPmY7ICsrcCkKLQkJaWYgKHR5cGUgPT0gcC0+dHlwZSkKLQkJCXJldHVybiBwLT5mOwotCi0JcmV0dXJuIE5VTEw7Ci0JLyogTk9UUkVBQ0hFRCAqLwotfQotCi1pZl9uZG9fcHJpbnRlcgotbG9va3VwX25kb19wcmludGVyKGludCB0eXBlKQotewotCWNvbnN0IHN0cnVjdCBuZG9fcHJpbnRlciAqcDsKLQotCWZvciAocCA9IG5kb19wcmludGVyczsgcC0+ZjsgKytwKQotCQlpZiAodHlwZSA9PSBwLT50eXBlKQotCQkJcmV0dXJuIHAtPmY7Ci0KLSNpZiBkZWZpbmVkKERMVF9VU0VSMikgJiYgZGVmaW5lZChETFRfUEtUQVApCi0JLyoKLQkgKiBBcHBsZSBpbmNvcnJlY3RseSBjaG9zZSB0byB1c2UgRExUX1VTRVIyIGZvciB0aGVpciBQS1RBUAotCSAqIGhlYWRlci4KLQkgKgotCSAqIFdlIG1hcCBETFRfUEtUQVAsIHdoZXRoZXIgaXQncyBETFRfVVNFUjIgYXMgaXQgaXMgb24gRGFyd2luLQotCSAqIGJhc2VkIE9TZXMgb3IgdGhlIHNhbWUgdmFsdWUgYXMgTElOS1RZUEVfUEtUQVAgYXMgaXQgaXMgb24KLQkgKiBvdGhlciBPU2VzLCB0byBMSU5LVFlQRV9QS1RBUCwgc28gZmlsZXMgd3JpdHRlbiB3aXRoCi0JICogdGhpcyB2ZXJzaW9uIG9mIGxpYnBjYXAgZm9yIGEgRExUX1BLVEFQIGNhcHR1cmUgaGF2ZSBhIGxpbmstCi0JICogbGF5ZXIgaGVhZGVyIHR5cGUgb2YgTElOS1RZUEVfUEtUQVAuCi0JICoKLQkgKiBIb3dldmVyLCBmaWxlcyB3cml0dGVuIG9uIE9TIFggTWF2ZXJpY2tzIGZvciBhIERMVF9QS1RBUAotCSAqIGNhcHR1cmUgaGF2ZSBhIGxpbmstbGF5ZXIgaGVhZGVyIHR5cGUgb2YgTElOS1RZUEVfVVNFUjIuCi0JICogSWYgd2UgZG9uJ3QgaGF2ZSBhIHByaW50ZXIgZm9yIERMVF9VU0VSMiwgYW5kIHR5cGUgaXMKLQkgKiBETFRfVVNFUjIsIHdlIGxvb2sgdXAgdGhlIHByaW50ZXIgZm9yIERMVF9QS1RBUCBhbmQgdXNlCi0JICogdGhhdC4KLQkgKi8KLQlpZiAodHlwZSA9PSBETFRfVVNFUjIpIHsKLQkJZm9yIChwID0gbmRvX3ByaW50ZXJzOyBwLT5mOyArK3ApCi0JCQlpZiAoRExUX1BLVEFQID09IHAtPnR5cGUpCi0JCQkJcmV0dXJuIHAtPmY7Ci0JfQogI2VuZGlmCiAKLQlyZXR1cm4gTlVMTDsKLQkvKiBOT1RSRUFDSEVEICovCi19Ci0KIHN0YXRpYyBwY2FwX3QgKnBkOwogCiBzdGF0aWMgaW50IHN1cHBvcnRzX21vbml0b3JfbW9kZTsKQEAgLTQ1NywxNSArMjM0LDYgQEAKIGV4dGVybiBpbnQgb3B0ZXJyOwogZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIAotc3RydWN0IHByaW50X2luZm8gewotICAgICAgICBuZXRkaXNzZWN0X29wdGlvbnMgKm5kbzsKLSAgICAgICAgdW5pb24gewotICAgICAgICAgICAgICAgIGlmX3ByaW50ZXIgICAgIHByaW50ZXI7Ci0gICAgICAgICAgICAgICAgaWZfbmRvX3ByaW50ZXIgbmRvX3ByaW50ZXI7Ci0gICAgICAgIH0gcDsKLSAgICAgICAgaW50IG5kb190eXBlOwotfTsKLQogc3RydWN0IGR1bXBfaW5mbyB7CiAJY2hhcgkqV0ZpbGVOYW1lOwogCWNoYXIJKkN1cnJlbnRGaWxlTmFtZTsKQEAgLTQ3NiwyMyArMjQ0LDExNyBAQAogI2VuZGlmCiB9OwogCisjaWYgZGVmaW5lZChIQVZFX1BDQVBfU0VUX1BBUlNFUl9ERUJVRykKKy8qCisgKiBXZSBoYXZlIHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZygpIGluIGxpYnBjYXA7IGRlY2xhcmUgaXQgKGl0J3Mgbm90IGRlY2xhcmVkCisgKiBieSBhbnkgbGlicGNhcCBoZWFkZXIsIGJlY2F1c2UgaXQncyBhIHNwZWNpYWwgaGFjaywgb25seSBhdmFpbGFibGUgaWYKKyAqIGxpYnBjYXAgd2FzIGNvbmZpZ3VyZWQgdG8gaW5jbHVkZSBpdCwgYW5kIG9ubHkgaW50ZW5kZWQgZm9yIHVzZSBieQorICogbGlicGNhcCBkZXZlbG9wZXJzIHRyeWluZyB0byBkZWJ1ZyB0aGUgcGFyc2VyIGZvciBmaWx0ZXIgZXhwcmVzc2lvbnMpLgorICovCisjaWZkZWYgX1dJTjMyCitfX2RlY2xzcGVjKGRsbGltcG9ydCkKKyNlbHNlIC8qIF9XSU4zMiAqLworZXh0ZXJuCisjZW5kaWYgLyogX1dJTjMyICovCit2b2lkIHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZyhpbnQpOworI2VsaWYgZGVmaW5lZChIQVZFX1BDQVBfREVCVUcpIHx8IGRlZmluZWQoSEFWRV9ZWURFQlVHKQorLyoKKyAqIFdlIGRvbid0IGhhdmUgcGNhcF9zZXRfcGFyc2VyX2RlYnVnKCkgaW4gbGlicGNhcCwgYnV0IHdlIGRvIGhhdmUKKyAqIHBjYXBfZGVidWcgb3IgeXlkZWJ1Zy4gIE1ha2UgYSBsb2NhbCB2ZXJzaW9uIG9mIHBjYXBfc2V0X3BhcnNlcl9kZWJ1ZygpCisgKiB0byBzZXQgdGhlIGZsYWcsIGFuZCBkZWZpbmUgSEFWRV9QQ0FQX1NFVF9QQVJTRVJfREVCVUcuCisgKi8KK3N0YXRpYyB2b2lkCitwY2FwX3NldF9wYXJzZXJfZGVidWcoaW50IHZhbHVlKQoreworI2lmZGVmIEhBVkVfUENBUF9ERUJVRworCWV4dGVybiBpbnQgcGNhcF9kZWJ1ZzsKKworCXBjYXBfZGVidWcgPSB2YWx1ZTsKKyNlbHNlIC8qIEhBVkVfUENBUF9ERUJVRyAqLworCWV4dGVybiBpbnQgeXlkZWJ1ZzsKKworCXl5ZGVidWcgPSB2YWx1ZTsKKyNlbmRpZiAvKiBIQVZFX1BDQVBfREVCVUcgKi8KK30KKworI2RlZmluZSBIQVZFX1BDQVBfU0VUX1BBUlNFUl9ERUJVRworI2VuZGlmCisKKyNpZiBkZWZpbmVkKEhBVkVfUENBUF9TRVRfT1BUSU1JWkVSX0RFQlVHKQorLyoKKyAqIFdlIGhhdmUgcGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnKCkgaW4gbGlicGNhcDsgZGVjbGFyZSBpdCAoaXQncyBub3QgZGVjbGFyZWQKKyAqIGJ5IGFueSBsaWJwY2FwIGhlYWRlciwgYmVjYXVzZSBpdCdzIGEgc3BlY2lhbCBoYWNrLCBvbmx5IGF2YWlsYWJsZSBpZgorICogbGlicGNhcCB3YXMgY29uZmlndXJlZCB0byBpbmNsdWRlIGl0LCBhbmQgb25seSBpbnRlbmRlZCBmb3IgdXNlIGJ5CisgKiBsaWJwY2FwIGRldmVsb3BlcnMgdHJ5aW5nIHRvIGRlYnVnIHRoZSBvcHRpbWl6ZXIgZm9yIGZpbHRlciBleHByZXNzaW9ucykuCisgKi8KKyNpZmRlZiBfV0lOMzIKK19fZGVjbHNwZWMoZGxsaW1wb3J0KQorI2Vsc2UgLyogX1dJTjMyICovCitleHRlcm4KKyNlbmRpZiAvKiBfV0lOMzIgKi8KK3ZvaWQgcGNhcF9zZXRfb3B0aW1pemVyX2RlYnVnKGludCk7CisjZW5kaWYKKworLyogVkFSQVJHUyAqLworc3RhdGljIHZvaWQKK2Vycm9yKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQoreworCXZhX2xpc3QgYXA7CisKKwkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBwcm9ncmFtX25hbWUpOworCXZhX3N0YXJ0KGFwLCBmbXQpOworCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7CisJdmFfZW5kKGFwKTsKKwlpZiAoKmZtdCkgeworCQlmbXQgKz0gc3RybGVuKGZtdCk7CisJCWlmIChmbXRbLTFdICE9ICdcbicpCisJCQkodm9pZClmcHV0YygnXG4nLCBzdGRlcnIpOworCX0KKwlleGl0X3RjcGR1bXAoMSk7CisJLyogTk9UUkVBQ0hFRCAqLworfQorCisvKiBWQVJBUkdTICovCitzdGF0aWMgdm9pZAord2FybmluZyhjb25zdCBjaGFyICpmbXQsIC4uLikKK3sKKwl2YV9saXN0IGFwOworCisJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlczogV0FSTklORzogIiwgcHJvZ3JhbV9uYW1lKTsKKwl2YV9zdGFydChhcCwgZm10KTsKKwkodm9pZCl2ZnByaW50ZihzdGRlcnIsIGZtdCwgYXApOworCXZhX2VuZChhcCk7CisJaWYgKCpmbXQpIHsKKwkJZm10ICs9IHN0cmxlbihmbXQpOworCQlpZiAoZm10Wy0xXSAhPSAnXG4nKQorCQkJKHZvaWQpZnB1dGMoJ1xuJywgc3RkZXJyKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkCitleGl0X3RjcGR1bXAoaW50IHN0YXR1cykKK3sKKwluZF9jbGVhbnVwKCk7CisJZXhpdChzdGF0dXMpOworfQorCiAjaWZkZWYgSEFWRV9QQ0FQX1NFVF9UU1RBTVBfVFlQRQogc3RhdGljIHZvaWQKLXNob3dfdHN0YW1wX3R5cGVzX2FuZF9leGl0KGNvbnN0IGNoYXIgKmRldmljZSwgcGNhcF90ICpwZCkKK3Nob3dfdHN0YW1wX3R5cGVzX2FuZF9leGl0KHBjYXBfdCAqcGMsIGNvbnN0IGNoYXIgKmRldmljZSkKIHsKIAlpbnQgbl90c3RhbXBfdHlwZXM7CiAJaW50ICp0c3RhbXBfdHlwZXMgPSAwOwogCWNvbnN0IGNoYXIgKnRzdGFtcF90eXBlX25hbWU7CiAJaW50IGk7CiAKLQluX3RzdGFtcF90eXBlcyA9IHBjYXBfbGlzdF90c3RhbXBfdHlwZXMocGQsICZ0c3RhbXBfdHlwZXMpOworCW5fdHN0YW1wX3R5cGVzID0gcGNhcF9saXN0X3RzdGFtcF90eXBlcyhwYywgJnRzdGFtcF90eXBlcyk7CiAJaWYgKG5fdHN0YW1wX3R5cGVzIDwgMCkKLQkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKKwkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGMpKTsKIAogCWlmIChuX3RzdGFtcF90eXBlcyA9PSAwKSB7CiAJCWZwcmludGYoc3RkZXJyLCAiVGltZSBzdGFtcCB0eXBlIGNhbm5vdCBiZSBzZXQgZm9yICVzXG4iLAogCQkgICAgZGV2aWNlKTsKLQkJZXhpdCgwKTsKKwkJZXhpdF90Y3BkdW1wKDApOwogCX0KIAlmcHJpbnRmKHN0ZGVyciwgIlRpbWUgc3RhbXAgdHlwZXMgZm9yICVzICh1c2Ugb3B0aW9uIC1qIHRvIHNldCk6XG4iLAogCSAgICBkZXZpY2UpOwpAQCAtNTA2LDIwICszNjgsMjAgQEAKIAkJfQogCX0KIAlwY2FwX2ZyZWVfdHN0YW1wX3R5cGVzKHRzdGFtcF90eXBlcyk7Ci0JZXhpdCgwKTsKKwlleGl0X3RjcGR1bXAoMCk7CiB9CiAjZW5kaWYKIAogc3RhdGljIHZvaWQKLXNob3dfZGx0c19hbmRfZXhpdChjb25zdCBjaGFyICpkZXZpY2UsIHBjYXBfdCAqcGQpCitzaG93X2RsdHNfYW5kX2V4aXQocGNhcF90ICpwYywgY29uc3QgY2hhciAqZGV2aWNlKQogewotCWludCBuX2RsdHM7CisJaW50IG5fZGx0cywgaTsKIAlpbnQgKmRsdHMgPSAwOwogCWNvbnN0IGNoYXIgKmRsdF9uYW1lOwogCi0Jbl9kbHRzID0gcGNhcF9saXN0X2RhdGFsaW5rcyhwZCwgJmRsdHMpOworCW5fZGx0cyA9IHBjYXBfbGlzdF9kYXRhbGlua3MocGMsICZkbHRzKTsKIAlpZiAobl9kbHRzIDwgMCkKLQkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKKwkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGMpKTsKIAllbHNlIGlmIChuX2RsdHMgPT0gMCB8fCAhZGx0cykKIAkJZXJyb3IoIk5vIGRhdGEgbGluayB0eXBlcy4iKTsKIApAQCAtNTM5LDUyICs0MDEsNDkgQEAKIAkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiRGF0YSBsaW5rIHR5cGVzIGZvciAlcyAodXNlIG9wdGlvbiAteSB0byBzZXQpOlxuIiwKIAkJICAgIGRldmljZSk7CiAKLQl3aGlsZSAoLS1uX2RsdHMgPj0gMCkgewotCQlkbHRfbmFtZSA9IHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUoZGx0c1tuX2RsdHNdKTsKKwlmb3IgKGkgPSAwOyBpIDwgbl9kbHRzOyBpKyspIHsKKwkJZGx0X25hbWUgPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdHNbaV0pOwogCQlpZiAoZGx0X25hbWUgIT0gTlVMTCkgewogCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiICAlcyAoJXMpIiwgZGx0X25hbWUsCi0JCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oZGx0c1tuX2RsdHNdKSk7CisJCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oZGx0c1tpXSkpOwogCiAJCQkvKgogCQkJICogT0ssIGRvZXMgdGNwZHVtcCBoYW5kbGUgdGhhdCB0eXBlPwogCQkJICovCi0JCQlpZiAobG9va3VwX3ByaW50ZXIoZGx0c1tuX2RsdHNdKSA9PSBOVUxMCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgbG9va3VwX25kb19wcmludGVyKGRsdHNbbl9kbHRzXSkgPT0gTlVMTCkKKwkJCWlmICghaGFzX3ByaW50ZXIoZGx0c1tpXSkpCiAJCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiIChwcmludGluZyBub3Qgc3VwcG9ydGVkKSIpOwogCQkJZnByaW50ZihzdGRlcnIsICJcbiIpOwogCQl9IGVsc2UgewogCQkJKHZvaWQpIGZwcmludGYoc3RkZXJyLCAiICBETFQgJWQgKHByaW50aW5nIG5vdCBzdXBwb3J0ZWQpXG4iLAotCQkJICAgIGRsdHNbbl9kbHRzXSk7CisJCQkgICAgZGx0c1tpXSk7CiAJCX0KIAl9CiAjaWZkZWYgSEFWRV9QQ0FQX0ZSRUVfREFUQUxJTktTCiAJcGNhcF9mcmVlX2RhdGFsaW5rcyhkbHRzKTsKICNlbmRpZgotCWV4aXQoMCk7CisJZXhpdF90Y3BkdW1wKDApOwogfQogCiAjaWZkZWYgSEFWRV9QQ0FQX0ZJTkRBTExERVZTCiBzdGF0aWMgdm9pZAogc2hvd19kZXZpY2VzX2FuZF9leGl0ICh2b2lkKQogewotCXBjYXBfaWZfdCAqZGV2cG9pbnRlcjsKKwlwY2FwX2lmX3QgKmRldiwgKmRldmxpc3Q7CiAJY2hhciBlYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwogCWludCBpOwogCi0JaWYgKHBjYXBfZmluZGFsbGRldnMoJmRldnBvaW50ZXIsIGVidWYpIDwgMCkKKwlpZiAocGNhcF9maW5kYWxsZGV2cygmZGV2bGlzdCwgZWJ1ZikgPCAwKQogCQllcnJvcigiJXMiLCBlYnVmKTsKLQllbHNlIHsKLQkJZm9yIChpID0gMDsgZGV2cG9pbnRlciAhPSBOVUxMOyBpKyspIHsKLQkJCXByaW50ZigiJWQuJXMiLCBpKzEsIGRldnBvaW50ZXItPm5hbWUpOwotCQkJaWYgKGRldnBvaW50ZXItPmRlc2NyaXB0aW9uICE9IE5VTEwpCi0JCQkJcHJpbnRmKCIgKCVzKSIsIGRldnBvaW50ZXItPmRlc2NyaXB0aW9uKTsKLQkJCWlmIChkZXZwb2ludGVyLT5mbGFncyAhPSAwKQotCQkJCXByaW50ZigiIFslc10iLCBiaXR0b2syc3RyKHN0YXR1c19mbGFncywgIm5vbmUiLCBkZXZwb2ludGVyLT5mbGFncykpOwotCQkJcHJpbnRmKCJcbiIpOwotCQkJZGV2cG9pbnRlciA9IGRldnBvaW50ZXItPm5leHQ7Ci0JCX0KKwlmb3IgKGkgPSAwLCBkZXYgPSBkZXZsaXN0OyBkZXYgIT0gTlVMTDsgaSsrLCBkZXYgPSBkZXYtPm5leHQpIHsKKwkJcHJpbnRmKCIlZC4lcyIsIGkrMSwgZGV2LT5uYW1lKTsKKwkJaWYgKGRldi0+ZGVzY3JpcHRpb24gIT0gTlVMTCkKKwkJCXByaW50ZigiICglcykiLCBkZXYtPmRlc2NyaXB0aW9uKTsKKwkJaWYgKGRldi0+ZmxhZ3MgIT0gMCkKKwkJCXByaW50ZigiIFslc10iLCBiaXR0b2syc3RyKHN0YXR1c19mbGFncywgIm5vbmUiLCBkZXYtPmZsYWdzKSk7CisJCXByaW50ZigiXG4iKTsKIAl9Ci0JZXhpdCgwKTsKKwlwY2FwX2ZyZWVhbGxkZXZzKGRldmxpc3QpOworCWV4aXRfdGNwZHVtcCgwKTsKIH0KICNlbmRpZiAvKiBIQVZFX1BDQVBfRklOREFMTERFVlMgKi8KIApAQCAtNTk5LDcgKzQ1OCw3IEBACiAgKiBPUyBYIHRjcGR1bXAgdXNlcyAtZyB0byBmb3JjZSBub24tLXYgb3V0cHV0IGZvciBJUCB0byBiZSBvbiBvbmUKICAqIGxpbmUsIG1ha2luZyBpdCBtb3JlICJnInJlcGFibGU7CiAgKgotICogT1MgWCB0Y3BkdW1wIHVzZXMgLWsgdG9zcGVjaWZ5IHRoYXQgcGFja2V0IGNvbW1lbnRzIGluIHBjYXAtbmcgZmlsZXMKKyAqIE9TIFggdGNwZHVtcCB1c2VzIC1rIHRvIHNwZWNpZnkgdGhhdCBwYWNrZXQgY29tbWVudHMgaW4gcGNhcC1uZyBmaWxlcwogICogc2hvdWxkIGJlIHByaW50ZWQ7CiAgKgogICogT3BlbkJTRCB0Y3BkdW1wIHVzZXMgLW8gdG8gaW5kaWNhdGUgdGhhdCBPUyBmaW5nZXJwcmludGluZyBzaG91bGQgYmUgZG9uZQpAQCAtNjIyLDEzICs0ODEsMTMgQEAKICAqIFNldCB1cCBmbGFncyB0aGF0IG1pZ2h0IG9yIG1pZ2h0IG5vdCBiZSBzdXBwb3J0ZWQgZGVwZW5kaW5nIG9uIHRoZQogICogdmVyc2lvbiBvZiBsaWJwY2FwIHdlJ3JlIHVzaW5nLgogICovCi0jaWYgZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSB8fCBkZWZpbmVkKFdJTjMyKQorI2lmIGRlZmluZWQoSEFWRV9QQ0FQX0NSRUFURSkgfHwgZGVmaW5lZChfV0lOMzIpCiAjZGVmaW5lIEJfRkxBRwkJIkI6IgogI2RlZmluZSBCX0ZMQUdfVVNBR0UJIiBbIC1CIHNpemUgXSIKLSNlbHNlIC8qIGRlZmluZWQoSEFWRV9QQ0FQX0NSRUFURSkgfHwgZGVmaW5lZChXSU4zMikgKi8KKyNlbHNlIC8qIGRlZmluZWQoSEFWRV9QQ0FQX0NSRUFURSkgfHwgZGVmaW5lZChfV0lOMzIpICovCiAjZGVmaW5lIEJfRkxBRwogI2RlZmluZSBCX0ZMQUdfVVNBR0UKLSNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUENBUF9DUkVBVEUpIHx8IGRlZmluZWQoV0lOMzIpICovCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSB8fCBkZWZpbmVkKF9XSU4zMikgKi8KIAogI2lmZGVmIEhBVkVfUENBUF9DUkVBVEUKICNkZWZpbmUgSV9GTEFHCQkiSSIKQEAgLTY2NCw3ICs1MjMsNyBAQAogI2RlZmluZSBRX0ZMQUcKICNlbmRpZgogCi0jZGVmaW5lIFNIT1JUT1BUUyAiYUFiIiBCX0ZMQUcgImM6QzpkIiBEX0ZMQUcgImVFOmZGOkc6aEhpOiIgSV9GTEFHIGpfRkxBRyBKX0ZMQUcgIktsTG06TTpuTk9wcSIgUV9GTEFHICJyOlJzOlN0VDp1IiBVX0ZMQUcgInZWOnc6Vzp4WHk6WXo6WjojIgorI2RlZmluZSBTSE9SVE9QVFMgImFBYiIgQl9GTEFHICJjOkM6ZCIgRF9GTEFHICJlRTpmRjpHOmhIaToiIElfRkxBRyBqX0ZMQUcgSl9GTEFHICJLbExtOk06bk5PcHEiIFFfRkxBRyAicjpzOlN0VDp1IiBVX0ZMQUcgInZWOnc6Vzp4WHk6WXo6WjojIgogCiAvKgogICogTG9uZyBvcHRpb25zLgpAQCAtNjkxLDcgKzU1MCw3IEBACiAjZGVmaW5lIE9QVElPTl9JTU1FRElBVEVfTU9ERQkxMzAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXSA9IHsKLSNpZiBkZWZpbmVkKEhBVkVfUENBUF9DUkVBVEUpIHx8IGRlZmluZWQoV0lOMzIpCisjaWYgZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSB8fCBkZWZpbmVkKF9XSU4zMikKIAl7ICJidWZmZXItc2l6ZSIsIHJlcXVpcmVkX2FyZ3VtZW50LCBOVUxMLCAnQicgfSwKICNlbmRpZgogCXsgImxpc3QtaW50ZXJmYWNlcyIsIG5vX2FyZ3VtZW50LCBOVUxMLCAnRCcgfSwKQEAgLTcyMyw3ICs1ODIsNyBAQAogI2lmZGVmIEhBVkVfUENBUF9TRVRfSU1NRURJQVRFX01PREUKIAl7ICJpbW1lZGlhdGUtbW9kZSIsIG5vX2FyZ3VtZW50LCBOVUxMLCBPUFRJT05fSU1NRURJQVRFX01PREUgfSwKICNlbmRpZgotI2lmIGRlZmluZWQoSEFWRV9QQ0FQX0RFQlVHKSB8fCBkZWZpbmVkKEhBVkVfWVlERUJVRykKKyNpZmRlZiBIQVZFX1BDQVBfU0VUX1BBUlNFUl9ERUJVRwogCXsgImRlYnVnLWZpbHRlci1wYXJzZXIiLCBub19hcmd1bWVudCwgTlVMTCwgJ1knIH0sCiAjZW5kaWYKIAl7ICJyZWxpbnF1aXNoLXByaXZpbGVnZXMiLCByZXF1aXJlZF9hcmd1bWVudCwgTlVMTCwgJ1onIH0sCkBAIC03MzIsNyArNTkxLDcgQEAKIAl7IE5VTEwsIDAsIE5VTEwsIDAgfQogfTsKIAotI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBfV0lOMzIKIC8qIERyb3Agcm9vdCBwcml2aWxlZ2VzIGFuZCBjaHJvb3QgaWYgbmVjZXNzYXJ5ICovCiBzdGF0aWMgdm9pZAogZHJvcHJvb3QoY29uc3QgY2hhciAqdXNlcm5hbWUsIGNvbnN0IGNoYXIgKmNocm9vdF9kaXIpCkBAIC03NDAsMzYgKzU5OSwzOCBAQAogCXN0cnVjdCBwYXNzd2QgKnB3ID0gTlVMTDsKIAogCWlmIChjaHJvb3RfZGlyICYmICF1c2VybmFtZSkgewotCQlmcHJpbnRmKHN0ZGVyciwgInRjcGR1bXA6IENocm9vdCB3aXRob3V0IGRyb3BwaW5nIHJvb3QgaXMgaW5zZWN1cmVcbiIpOwotCQlleGl0KDEpOworCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDaHJvb3Qgd2l0aG91dCBkcm9wcGluZyByb290IGlzIGluc2VjdXJlXG4iLAorCQkJcHJvZ3JhbV9uYW1lKTsKKwkJZXhpdF90Y3BkdW1wKDEpOwogCX0KIAogCXB3ID0gZ2V0cHduYW0odXNlcm5hbWUpOwogCWlmIChwdykgewogCQlpZiAoY2hyb290X2RpcikgewogCQkJaWYgKGNocm9vdChjaHJvb3RfZGlyKSAhPSAwIHx8IGNoZGlyICgiLyIpICE9IDApIHsKLQkJCQlmcHJpbnRmKHN0ZGVyciwgInRjcGR1bXA6IENvdWxkbid0IGNocm9vdC9jaGRpciB0byAnJS42NHMnOiAlc1xuIiwKLQkJCQkgICAgY2hyb290X2RpciwgcGNhcF9zdHJlcnJvcihlcnJubykpOwotCQkJCWV4aXQoMSk7CisJCQkJZnByaW50ZihzdGRlcnIsICIlczogQ291bGRuJ3QgY2hyb290L2NoZGlyIHRvICclLjY0cyc6ICVzXG4iLAorCQkJCQlwcm9ncmFtX25hbWUsIGNocm9vdF9kaXIsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKKwkJCQlleGl0X3RjcGR1bXAoMSk7CiAJCQl9CiAJCX0KICNpZmRlZiBIQVZFX0xJQkNBUF9ORwotCQlpbnQgcmV0ID0gY2FwbmdfY2hhbmdlX2lkKHB3LT5wd191aWQsIHB3LT5wd19naWQsIENBUE5HX05PX0ZMQUcpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZnByaW50ZihzdGRlcnIsICJlcnJvciA6IHJldCAlZFxuIiwgcmV0KTsKLQkJfQotCQllbHNlIHsKLQkJCWZwcmludGYoc3RkZXJyLCAiZHJvcHBlZCBwcml2cyB0byAlc1xuIiwgdXNlcm5hbWUpOworCQl7CisJCQlpbnQgcmV0ID0gY2FwbmdfY2hhbmdlX2lkKHB3LT5wd191aWQsIHB3LT5wd19naWQsIENBUE5HX05PX0ZMQUcpOworCQkJaWYgKHJldCA8IDApIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImVycm9yIDogcmV0ICVkXG4iLCByZXQpOworCQkJfSBlbHNlIHsKKwkJCQlmcHJpbnRmKHN0ZGVyciwgImRyb3BwZWQgcHJpdnMgdG8gJXNcbiIsIHVzZXJuYW1lKTsKKwkJCX0KIAkJfQogI2Vsc2UKIAkJaWYgKGluaXRncm91cHMocHctPnB3X25hbWUsIHB3LT5wd19naWQpICE9IDAgfHwKIAkJICAgIHNldGdpZChwdy0+cHdfZ2lkKSAhPSAwIHx8IHNldHVpZChwdy0+cHdfdWlkKSAhPSAwKSB7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgInRjcGR1bXA6IENvdWxkbid0IGNoYW5nZSB0byAnJS4zMnMnIHVpZD0lbHUgZ2lkPSVsdTogJXNcbiIsCi0JCQkgICAgdXNlcm5hbWUsCi0JCQkgICAgKHVuc2lnbmVkIGxvbmcpcHctPnB3X3VpZCwKLQkJCSAgICAodW5zaWduZWQgbG9uZylwdy0+cHdfZ2lkLAotCQkJICAgIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKLQkJCWV4aXQoMSk7CisJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBDb3VsZG4ndCBjaGFuZ2UgdG8gJyUuMzJzJyB1aWQ9JWx1IGdpZD0lbHU6ICVzXG4iLAorCQkJCXByb2dyYW1fbmFtZSwgdXNlcm5hbWUsCisJCQkJKHVuc2lnbmVkIGxvbmcpcHctPnB3X3VpZCwKKwkJCQkodW5zaWduZWQgbG9uZylwdy0+cHdfZ2lkLAorCQkJCXBjYXBfc3RyZXJyb3IoZXJybm8pKTsKKwkJCWV4aXRfdGNwZHVtcCgxKTsKIAkJfQogCQllbHNlIHsKIAkJCWZwcmludGYoc3RkZXJyLCAiZHJvcHBlZCBwcml2cyB0byAlc1xuIiwgdXNlcm5hbWUpOwpAQCAtNzc3LDIzICs2MzgsMjQgQEAKICNlbmRpZiAvKiBIQVZFX0xJQkNBUF9ORyAqLwogCX0KIAllbHNlIHsKLQkJZnByaW50ZihzdGRlcnIsICJ0Y3BkdW1wOiBDb3VsZG4ndCBmaW5kIHVzZXIgJyUuMzJzJ1xuIiwKLQkJICAgIHVzZXJuYW1lKTsKLQkJZXhpdCgxKTsKKwkJZnByaW50ZihzdGRlcnIsICIlczogQ291bGRuJ3QgZmluZCB1c2VyICclLjMycydcbiIsCisJCQlwcm9ncmFtX25hbWUsIHVzZXJuYW1lKTsKKwkJZXhpdF90Y3BkdW1wKDEpOwogCX0KICNpZmRlZiBIQVZFX0xJQkNBUF9ORwotCS8qIFdlIGRvbid0IG5lZWQgQ0FQX1NFVFVJRCBhbmQgQ0FQX1NFVEdJRCBhbnkgbW9yZS4gKi8KKwkvKiBXZSBkb24ndCBuZWVkIENBUF9TRVRVSUQsIENBUF9TRVRHSUQgYW5kIENBUF9TWVNfQ0hST09UIGFueSBtb3JlLiAqLwogCWNhcG5nX3VwZGF0ZXYoCiAJCUNBUE5HX0RST1AsCiAJCUNBUE5HX0VGRkVDVElWRSB8IENBUE5HX1BFUk1JVFRFRCwKIAkJQ0FQX1NFVFVJRCwKIAkJQ0FQX1NFVEdJRCwKKwkJQ0FQX1NZU19DSFJPT1QsCiAJCS0xKTsKIAljYXBuZ19hcHBseShDQVBOR19TRUxFQ1RfQk9USCk7CiAjZW5kaWYgLyogSEFWRV9MSUJDQVBfTkcgKi8KIAogfQotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogX1dJTjMyICovCiAKIHN0YXRpYyBpbnQKIGdldFdmbGFnQ2hhcnMoaW50IHgpCkBAIC04NDMsNDMgKzcwNSw2IEBACiAgICAgICAgIGZyZWUoZmlsZW5hbWUpOwogfQogCi1zdGF0aWMgaW50IHRjcGR1bXBfcHJpbnRmKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvIF9VXywKLQkJCSAgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0KLSAgdmFfbGlzdCBhcmdzOwotICBpbnQgcmV0OwotCi0gIHZhX3N0YXJ0KGFyZ3MsIGZtdCk7Ci0gIHJldD12ZnByaW50ZihzdGRvdXQsIGZtdCwgYXJncyk7Ci0gIHZhX2VuZChhcmdzKTsKLQotICByZXR1cm4gcmV0OwotfQotCi1zdGF0aWMgc3RydWN0IHByaW50X2luZm8KLWdldF9wcmludF9pbmZvKGludCB0eXBlKQotewotCXN0cnVjdCBwcmludF9pbmZvIHByaW50aW5mbzsKLQotCXByaW50aW5mby5uZG9fdHlwZSA9IDE7Ci0JcHJpbnRpbmZvLm5kbyA9IGduZG87Ci0JcHJpbnRpbmZvLnAubmRvX3ByaW50ZXIgPSBsb29rdXBfbmRvX3ByaW50ZXIodHlwZSk7Ci0JaWYgKHByaW50aW5mby5wLm5kb19wcmludGVyID09IE5VTEwpIHsKLQkJcHJpbnRpbmZvLnAucHJpbnRlciA9IGxvb2t1cF9wcmludGVyKHR5cGUpOwotCQlwcmludGluZm8ubmRvX3R5cGUgPSAwOwotCQlpZiAocHJpbnRpbmZvLnAucHJpbnRlciA9PSBOVUxMKSB7Ci0JCQlnbmRvLT5uZG9fZGx0bmFtZSA9IHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUodHlwZSk7Ci0JCQlpZiAoZ25kby0+bmRvX2RsdG5hbWUgIT0gTlVMTCkKLQkJCQllcnJvcigicGFja2V0IHByaW50aW5nIGlzIG5vdCBzdXBwb3J0ZWQgZm9yIGxpbmsgdHlwZSAlczogdXNlIC13IiwKLQkJCQkgICAgICBnbmRvLT5uZG9fZGx0bmFtZSk7Ci0JCQllbHNlCi0JCQkJZXJyb3IoInBhY2tldCBwcmludGluZyBpcyBub3Qgc3VwcG9ydGVkIGZvciBsaW5rIHR5cGUgJWQ6IHVzZSAtdyIsIHR5cGUpOwotCQl9Ci0JfQotCXJldHVybiAocHJpbnRpbmZvKTsKLX0KLQogc3RhdGljIGNoYXIgKgogZ2V0X25leHRfZmlsZShGSUxFICpWRmlsZSwgY2hhciAqcHRyKQogewpAQCAtOTk1LDIyICs4MjAsMzAxIEBACiB9CiAjZW5kaWYKIAorLyoKKyAqIENvcHkgYXJnIHZlY3RvciBpbnRvIGEgbmV3IGJ1ZmZlciwgY29uY2F0ZW5hdGluZyBhcmd1bWVudHMgd2l0aCBzcGFjZXMuCisgKi8KK3N0YXRpYyBjaGFyICoKK2NvcHlfYXJndihyZWdpc3RlciBjaGFyICoqYXJndikKK3sKKwlyZWdpc3RlciBjaGFyICoqcDsKKwlyZWdpc3RlciB1X2ludCBsZW4gPSAwOworCWNoYXIgKmJ1ZjsKKwljaGFyICpzcmMsICpkc3Q7CisKKwlwID0gYXJndjsKKwlpZiAoKnAgPT0gTlVMTCkKKwkJcmV0dXJuIDA7CisKKwl3aGlsZSAoKnApCisJCWxlbiArPSBzdHJsZW4oKnArKykgKyAxOworCisJYnVmID0gKGNoYXIgKiltYWxsb2MobGVuKTsKKwlpZiAoYnVmID09IE5VTEwpCisJCWVycm9yKCJjb3B5X2FyZ3Y6IG1hbGxvYyIpOworCisJcCA9IGFyZ3Y7CisJZHN0ID0gYnVmOworCXdoaWxlICgoc3JjID0gKnArKykgIT0gTlVMTCkgeworCQl3aGlsZSAoKCpkc3QrKyA9ICpzcmMrKykgIT0gJ1wwJykKKwkJCTsKKwkJZHN0Wy0xXSA9ICcgJzsKKwl9CisJZHN0Wy0xXSA9ICdcMCc7CisKKwlyZXR1cm4gYnVmOworfQorCisvKgorICogT24gV2luZG93cywgd2UgbmVlZCB0byBvcGVuIHRoZSBmaWxlIGluIGJpbmFyeSBtb2RlLCBzbyB0aGF0CisgKiB3ZSBnZXQgYWxsIHRoZSBieXRlcyBzcGVjaWZpZWQgYnkgdGhlIHNpemUgd2UgZ2V0IGZyb20gImZzdGF0KCkiLgorICogT24gVU5JWCwgdGhhdCdzIG5vdCBuZWNlc3NhcnkuICBPX0JJTkFSWSBpcyBkZWZpbmVkIG9uIFdpbmRvd3M7CisgKiB3ZSBkZWZpbmUgaXQgYXMgMCBpZiBpdCdzIG5vdCBkZWZpbmVkLCBzbyBpdCBkb2VzIG5vdGhpbmcuCisgKi8KKyNpZm5kZWYgT19CSU5BUlkKKyNkZWZpbmUgT19CSU5BUlkJMAorI2VuZGlmCisKK3N0YXRpYyBjaGFyICoKK3JlYWRfaW5maWxlKGNoYXIgKmZuYW1lKQoreworCXJlZ2lzdGVyIGludCBpLCBmZCwgY2M7CisJcmVnaXN0ZXIgY2hhciAqY3A7CisJc3RydWN0IHN0YXQgYnVmOworCisJZmQgPSBvcGVuKGZuYW1lLCBPX1JET05MWXxPX0JJTkFSWSk7CisJaWYgKGZkIDwgMCkKKwkJZXJyb3IoImNhbid0IG9wZW4gJXM6ICVzIiwgZm5hbWUsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKKworCWlmIChmc3RhdChmZCwgJmJ1ZikgPCAwKQorCQllcnJvcigiY2FuJ3Qgc3RhdCAlczogJXMiLCBmbmFtZSwgcGNhcF9zdHJlcnJvcihlcnJubykpOworCisJY3AgPSBtYWxsb2MoKHVfaW50KWJ1Zi5zdF9zaXplICsgMSk7CisJaWYgKGNwID09IE5VTEwpCisJCWVycm9yKCJtYWxsb2MoJWQpIGZvciAlczogJXMiLCAodV9pbnQpYnVmLnN0X3NpemUgKyAxLAorCQkJZm5hbWUsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKKwljYyA9IHJlYWQoZmQsIGNwLCAodV9pbnQpYnVmLnN0X3NpemUpOworCWlmIChjYyA8IDApCisJCWVycm9yKCJyZWFkICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7CisJaWYgKGNjICE9IGJ1Zi5zdF9zaXplKQorCQllcnJvcigic2hvcnQgcmVhZCAlcyAoJWQgIT0gJWQpIiwgZm5hbWUsIGNjLCAoaW50KWJ1Zi5zdF9zaXplKTsKKworCWNsb3NlKGZkKTsKKwkvKiByZXBsYWNlICIjIGNvbW1lbnQiIHdpdGggc3BhY2VzICovCisJZm9yIChpID0gMDsgaSA8IGNjOyBpKyspIHsKKwkJaWYgKGNwW2ldID09ICcjJykKKwkJCXdoaWxlIChpIDwgY2MgJiYgY3BbaV0gIT0gJ1xuJykKKwkJCQljcFtpKytdID0gJyAnOworCX0KKwljcFtjY10gPSAnXDAnOworCXJldHVybiAoY3ApOworfQorCisjaWZkZWYgSEFWRV9QQ0FQX0ZJTkRBTExERVZTCitzdGF0aWMgbG9uZworcGFyc2VfaW50ZXJmYWNlX251bWJlcihjb25zdCBjaGFyICpkZXZpY2UpCit7CisJbG9uZyBkZXZudW07CisJY2hhciAqZW5kOworCisJZGV2bnVtID0gc3RydG9sKGRldmljZSwgJmVuZCwgMTApOworCWlmIChkZXZpY2UgIT0gZW5kICYmICplbmQgPT0gJ1wwJykgeworCQkvKgorCQkgKiBJdCdzIGFsbC1udW1lcmljLCBidXQgaXMgaXQgYSB2YWxpZCBudW1iZXI/CisJCSAqLworCQlpZiAoZGV2bnVtIDw9IDApIHsKKwkJCS8qCisJCQkgKiBObywgaXQncyBub3QgYW4gb3JkaW5hbC4KKwkJCSAqLworCQkJZXJyb3IoIkludmFsaWQgYWRhcHRlciBpbmRleCIpOworCQl9CisJCXJldHVybiAoZGV2bnVtKTsKKwl9IGVsc2UgeworCQkvKgorCQkgKiBJdCdzIG5vdCBhbGwtbnVtZXJpYzsgcmV0dXJuIC0xLCBzbyBvdXIgY2FsbGVyCisJCSAqIGtub3dzIHRoYXQuCisJCSAqLworCQlyZXR1cm4gKC0xKTsKKwl9Cit9CisKK3N0YXRpYyBjaGFyICoKK2ZpbmRfaW50ZXJmYWNlX2J5X251bWJlcihsb25nIGRldm51bSkKK3sKKwlwY2FwX2lmX3QgKmRldiwgKmRldmxpc3Q7CisJbG9uZyBpOworCWNoYXIgZWJ1ZltQQ0FQX0VSUkJVRl9TSVpFXTsKKwljaGFyICpkZXZpY2U7CisKKwlpZiAocGNhcF9maW5kYWxsZGV2cygmZGV2bGlzdCwgZWJ1ZikgPCAwKQorCQllcnJvcigiJXMiLCBlYnVmKTsKKwkvKgorCSAqIExvb2sgZm9yIHRoZSBkZXZudW0tdGggZW50cnkgaW4gdGhlIGxpc3Qgb2YgZGV2aWNlcyAoMS1iYXNlZCkuCisJICovCisJZm9yIChpID0gMCwgZGV2ID0gZGV2bGlzdDsgaSA8IGRldm51bS0xICYmIGRldiAhPSBOVUxMOworCSAgICBpKyssIGRldiA9IGRldi0+bmV4dCkKKwkJOworCWlmIChkZXYgPT0gTlVMTCkKKwkJZXJyb3IoIkludmFsaWQgYWRhcHRlciBpbmRleCIpOworCWRldmljZSA9IHN0cmR1cChkZXYtPm5hbWUpOworCXBjYXBfZnJlZWFsbGRldnMoZGV2bGlzdCk7CisJcmV0dXJuIChkZXZpY2UpOworfQorI2VuZGlmCisKK3N0YXRpYyBwY2FwX3QgKgorb3Blbl9pbnRlcmZhY2UoY29uc3QgY2hhciAqZGV2aWNlLCBuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY2hhciAqZWJ1ZikKK3sKKwlwY2FwX3QgKnBjOworI2lmZGVmIEhBVkVfUENBUF9DUkVBVEUKKwlpbnQgc3RhdHVzOworCWNoYXIgKmNwOworI2VuZGlmCisKKyNpZmRlZiBIQVZFX1BDQVBfQ1JFQVRFCisJcGMgPSBwY2FwX2NyZWF0ZShkZXZpY2UsIGVidWYpOworCWlmIChwYyA9PSBOVUxMKSB7CisJCS8qCisJCSAqIElmIHRoaXMgZmFpbGVkIHdpdGggIk5vIHN1Y2ggZGV2aWNlIiwgdGhhdCBtZWFucworCQkgKiB0aGUgaW50ZXJmYWNlIGRvZXNuJ3QgZXhpc3Q7IHJldHVybiBOVUxMLCBzbyB0aGF0CisJCSAqIHRoZSBjYWxsZXIgY2FuIHNlZSB3aGV0aGVyIHRoZSBkZXZpY2UgbmFtZSBpcworCQkgKiBhY3R1YWxseSBhbiBpbnRlcmZhY2UgaW5kZXguCisJCSAqLworCQlpZiAoc3Ryc3RyKGVidWYsICJObyBzdWNoIGRldmljZSIpICE9IE5VTEwpCisJCQlyZXR1cm4gKE5VTEwpOworCQllcnJvcigiJXMiLCBlYnVmKTsKKwl9CisjaWZkZWYgSEFWRV9QQ0FQX1NFVF9UU1RBTVBfVFlQRQorCWlmIChKZmxhZykKKwkJc2hvd190c3RhbXBfdHlwZXNfYW5kX2V4aXQocGMsIGRldmljZSk7CisjZW5kaWYKKyNpZmRlZiBIQVZFX1BDQVBfU0VUX1RTVEFNUF9QUkVDSVNJT04KKwlzdGF0dXMgPSBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uKHBjLCBuZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWVycm9yKCIlczogQ2FuJ3Qgc2V0ICVzc2Vjb25kIHRpbWUgc3RhbXAgcHJlY2lzaW9uOiAlcyIsCisJCQlkZXZpY2UsCisJCQl0c3RhbXBfcHJlY2lzaW9uX3RvX3N0cmluZyhuZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uKSwKKwkJCXBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisjZW5kaWYKKworI2lmZGVmIEhBVkVfUENBUF9TRVRfSU1NRURJQVRFX01PREUKKwlpZiAoaW1tZWRpYXRlX21vZGUpIHsKKwkJc3RhdHVzID0gcGNhcF9zZXRfaW1tZWRpYXRlX21vZGUocGMsIDEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQllcnJvcigiJXM6IENhbid0IHNldCBpbW1lZGlhdGUgbW9kZTogJXMiLAorCQkJZGV2aWNlLAorCQkJcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKKwl9CisjZW5kaWYKKwkvKgorCSAqIElzIHRoaXMgYW4gaW50ZXJmYWNlIHRoYXQgc3VwcG9ydHMgbW9uaXRvciBtb2RlPworCSAqLworCWlmIChwY2FwX2Nhbl9zZXRfcmZtb24ocGMpID09IDEpCisJCXN1cHBvcnRzX21vbml0b3JfbW9kZSA9IDE7CisJZWxzZQorCQlzdXBwb3J0c19tb25pdG9yX21vZGUgPSAwOworCXN0YXR1cyA9IHBjYXBfc2V0X3NuYXBsZW4ocGMsIG5kby0+bmRvX3NuYXBsZW4pOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZXJyb3IoIiVzOiBDYW4ndCBzZXQgc25hcHNob3QgbGVuZ3RoOiAlcyIsCisJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisJc3RhdHVzID0gcGNhcF9zZXRfcHJvbWlzYyhwYywgIXBmbGFnKTsKKwlpZiAoc3RhdHVzICE9IDApCisJCWVycm9yKCIlczogQ2FuJ3Qgc2V0IHByb21pc2N1b3VzIG1vZGU6ICVzIiwKKwkJICAgIGRldmljZSwgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKKwlpZiAoSWZsYWcpIHsKKwkJc3RhdHVzID0gcGNhcF9zZXRfcmZtb24ocGMsIDEpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQllcnJvcigiJXM6IENhbid0IHNldCBtb25pdG9yIG1vZGU6ICVzIiwKKwkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisJfQorCXN0YXR1cyA9IHBjYXBfc2V0X3RpbWVvdXQocGMsIDEwMDApOworCWlmIChzdGF0dXMgIT0gMCkKKwkJZXJyb3IoIiVzOiBwY2FwX3NldF90aW1lb3V0IGZhaWxlZDogJXMiLAorCQkgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOworCWlmIChCZmxhZyAhPSAwKSB7CisJCXN0YXR1cyA9IHBjYXBfc2V0X2J1ZmZlcl9zaXplKHBjLCBCZmxhZyk7CisJCWlmIChzdGF0dXMgIT0gMCkKKwkJCWVycm9yKCIlczogQ2FuJ3Qgc2V0IGJ1ZmZlciBzaXplOiAlcyIsCisJCQkgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOworCX0KKyNpZmRlZiBIQVZFX1BDQVBfU0VUX1RTVEFNUF9UWVBFCisJaWYgKGpmbGFnICE9IC0xKSB7CisJCXN0YXR1cyA9IHBjYXBfc2V0X3RzdGFtcF90eXBlKHBjLCBqZmxhZyk7CisJCWlmIChzdGF0dXMgPCAwKQorCQkJZXJyb3IoIiVzOiBDYW4ndCBzZXQgdGltZSBzdGFtcCB0eXBlOiAlcyIsCisJCSAgICAgICAgICAgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOworCX0KKyNlbmRpZgorCXN0YXR1cyA9IHBjYXBfYWN0aXZhdGUocGMpOworCWlmIChzdGF0dXMgPCAwKSB7CisJCS8qCisJCSAqIHBjYXBfYWN0aXZhdGUoKSBmYWlsZWQuCisJCSAqLworCQljcCA9IHBjYXBfZ2V0ZXJyKHBjKTsKKwkJaWYgKHN0YXR1cyA9PSBQQ0FQX0VSUk9SKQorCQkJZXJyb3IoIiVzIiwgY3ApOworCQllbHNlIGlmIChzdGF0dXMgPT0gUENBUF9FUlJPUl9OT19TVUNIX0RFVklDRSkgeworCQkJLyoKKwkJCSAqIFJldHVybiBhbiBlcnJvciBmb3Igb3VyIGNhbGxlciB0byBoYW5kbGUuCisJCQkgKi8KKwkJCXBjYXBfY2xvc2UocGMpOworCQkJc25wcmludGYoZWJ1ZiwgUENBUF9FUlJCVUZfU0laRSwgIiVzOiAlc1xuKCVzKSIsCisJCQkgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIGNwKTsKKwkJCXJldHVybiAoTlVMTCk7CisJCX0gZWxzZSBpZiAoc3RhdHVzID09IFBDQVBfRVJST1JfUEVSTV9ERU5JRUQgJiYgKmNwICE9ICdcMCcpCisJCQllcnJvcigiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAorCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSwgY3ApOworCQllbHNlCisJCQllcnJvcigiJXM6ICVzIiwgZGV2aWNlLAorCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7CisJfSBlbHNlIGlmIChzdGF0dXMgPiAwKSB7CisJCS8qCisJCSAqIHBjYXBfYWN0aXZhdGUoKSBzdWNjZWVkZWQsIGJ1dCBpdCdzIHdhcm5pbmcgdXMKKwkJICogb2YgYSBwcm9ibGVtIGl0IGhhZC4KKwkJICovCisJCWNwID0gcGNhcF9nZXRlcnIocGMpOworCQlpZiAoc3RhdHVzID09IFBDQVBfV0FSTklORykKKwkJCXdhcm5pbmcoIiVzIiwgY3ApOworCQllbHNlIGlmIChzdGF0dXMgPT0gUENBUF9XQVJOSU5HX1BST01JU0NfTk9UU1VQICYmCisJCSAgICAgICAgICpjcCAhPSAnXDAnKQorCQkJd2FybmluZygiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAorCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSwgY3ApOworCQllbHNlCisJCQl3YXJuaW5nKCIlczogJXMiLCBkZXZpY2UsCisJCQkgICAgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKKwl9CisjaWZkZWYgSEFWRV9QQ0FQX1NFVERJUkVDVElPTgorCWlmIChRZmxhZyAhPSAtMSkgeworCQlzdGF0dXMgPSBwY2FwX3NldGRpcmVjdGlvbihwYywgUWZsYWcpOworCQlpZiAoc3RhdHVzICE9IDApCisJCQllcnJvcigiJXM6IHBjYXBfc2V0ZGlyZWN0aW9uKCkgZmFpbGVkOiAlcyIsCisJCQkgICAgICBkZXZpY2UsICBwY2FwX2dldGVycihwYykpOworCQl9CisjZW5kaWYgLyogSEFWRV9QQ0FQX1NFVERJUkVDVElPTiAqLworI2Vsc2UgLyogSEFWRV9QQ0FQX0NSRUFURSAqLworCSplYnVmID0gJ1wwJzsKKwlwYyA9IHBjYXBfb3Blbl9saXZlKGRldmljZSwgbmRvLT5uZG9fc25hcGxlbiwgIXBmbGFnLCAxMDAwLCBlYnVmKTsKKwlpZiAocGMgPT0gTlVMTCkgeworCQkvKgorCQkgKiBJZiB0aGlzIGZhaWxlZCB3aXRoICJObyBzdWNoIGRldmljZSIsIHRoYXQgbWVhbnMKKwkJICogdGhlIGludGVyZmFjZSBkb2Vzbid0IGV4aXN0OyByZXR1cm4gTlVMTCwgc28gdGhhdAorCQkgKiB0aGUgY2FsbGVyIGNhbiBzZWUgd2hldGhlciB0aGUgZGV2aWNlIG5hbWUgaXMKKwkJICogYWN0dWFsbHkgYW4gaW50ZXJmYWNlIGluZGV4LgorCQkgKi8KKwkJaWYgKHN0cnN0cihlYnVmLCAiTm8gc3VjaCBkZXZpY2UiKSAhPSBOVUxMKQorCQkJcmV0dXJuIChOVUxMKTsKKwkJZXJyb3IoIiVzIiwgZWJ1Zik7CisJfQorCWlmICgqZWJ1ZikKKwkJd2FybmluZygiJXMiLCBlYnVmKTsKKyNlbmRpZiAvKiBIQVZFX1BDQVBfQ1JFQVRFICovCisKKwlyZXR1cm4gKHBjKTsKK30KKwogaW50CiBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikKIHsKIAlyZWdpc3RlciBpbnQgY250LCBvcCwgaTsKIAlicGZfdV9pbnQzMiBsb2NhbG5ldCA9MCAsIG5ldG1hc2sgPSAwOworCWludCB0aW1lem9uZV9vZmZzZXQgPSAwOwogCXJlZ2lzdGVyIGNoYXIgKmNwLCAqaW5maWxlLCAqY21kYnVmLCAqZGV2aWNlLCAqUkZpbGVOYW1lLCAqVkZpbGVOYW1lLCAqV0ZpbGVOYW1lOwogCXBjYXBfaGFuZGxlciBjYWxsYmFjazsKLQlpbnQgdHlwZTsKIAlpbnQgZGx0OwotCWludCBuZXdfZGx0OwogCWNvbnN0IGNoYXIgKmRsdF9uYW1lOwogCXN0cnVjdCBicGZfcHJvZ3JhbSBmY29kZTsKLSNpZm5kZWYgV0lOMzIKKyNpZm5kZWYgX1dJTjMyCiAJUkVUU0lHVFlQRSAoKm9sZGhhbmRsZXIpKGludCk7CiAjZW5kaWYKLQlzdHJ1Y3QgcHJpbnRfaW5mbyBwcmludGluZm87CiAJc3RydWN0IGR1bXBfaW5mbyBkdW1waW5mbzsKIAl1X2NoYXIgKnBjYXBfdXNlcmRhdGE7CiAJY2hhciBlYnVmW1BDQVBfRVJSQlVGX1NJWkVdOwpAQCAtMTAyMCw4ICsxMTI0LDggQEAKIAljaGFyICpyZXQgPSBOVUxMOwogCWNoYXIgKmVuZDsKICNpZmRlZiBIQVZFX1BDQVBfRklOREFMTERFVlMKLQlwY2FwX2lmX3QgKmRldnBvaW50ZXI7Ci0JaW50IGRldm51bTsKKwlwY2FwX2lmX3QgKmRldmxpc3Q7CisJbG9uZyBkZXZudW07CiAjZW5kaWYKIAlpbnQgc3RhdHVzOwogCUZJTEUgKlZGaWxlOwpAQCAtMTAyOSwyMSArMTEzMywyMiBAQAogCWNhcF9yaWdodHNfdCByaWdodHM7CiAJaW50IGNhbnNhbmRib3g7CiAjZW5kaWYJLyogSEFWRV9DQVBTSUNVTSAqLworCWludCBPZmxhZyA9IDE7CQkJLyogcnVuIGZpbHRlciBjb2RlIG9wdGltaXplciAqLworCWludCB5ZmxhZ19kbHQgPSAtMTsKKwljb25zdCBjaGFyICp5ZmxhZ19kbHRfbmFtZSA9IE5VTEw7CiAKLSNpZmRlZiBXSU4zMgotCWlmKHdzb2NraW5pdCgpICE9IDApIHJldHVybiAxOwotI2VuZGlmIC8qIFdJTjMyICovCisJbmV0ZGlzc2VjdF9vcHRpb25zIE5kbzsKKwluZXRkaXNzZWN0X29wdGlvbnMgKm5kbyA9ICZOZG87CiAKLQlqZmxhZz0tMTsJLyogbm90IHNldCAqLwotICAgICAgICBnbmRvLT5uZG9fT2ZsYWc9MTsKLQlnbmRvLT5uZG9fUmZsYWc9MTsKLQlnbmRvLT5uZG9fZGx0PS0xOwotCWduZG8tPm5kb19kZWZhdWx0X3ByaW50PW5kb19kZWZhdWx0X3ByaW50OwotCWduZG8tPm5kb19wcmludGY9dGNwZHVtcF9wcmludGY7Ci0JZ25kby0+bmRvX2Vycm9yPW5kb19lcnJvcjsKLQlnbmRvLT5uZG9fd2FybmluZz1uZG9fd2FybmluZzsKLQlnbmRvLT5uZG9fc25hcGxlbiA9IERFRkFVTFRfU05BUExFTjsKLQlnbmRvLT5uZG9faW1tZWRpYXRlID0gMDsKKwkvKgorCSAqIEluaXRpYWxpemUgdGhlIG5ldGRpc3NlY3QgY29kZS4KKwkgKi8KKwlpZiAobmRfaW5pdChlYnVmLCBzaXplb2YgZWJ1ZikgPT0gLTEpCisJCWVycm9yKCIlcyIsIGVidWYpOworCisJbWVtc2V0KG5kbywgMCwgc2l6ZW9mKCpuZG8pKTsKKwluZG9fc2V0X2Z1bmN0aW9uX3BvaW50ZXJzKG5kbyk7CisJbmRvLT5uZG9fc25hcGxlbiA9IERFRkFVTFRfU05BUExFTjsKIAogCWNudCA9IC0xOwogCWRldmljZSA9IE5VTEw7CkBAIC0xMDU0LDkgKzExNTksMTQgQEAKIAlXRmlsZU5hbWUgPSBOVUxMOwogCWRsdCA9IC0xOwogCWlmICgoY3AgPSBzdHJyY2hyKGFyZ3ZbMF0sICcvJykpICE9IE5VTEwpCi0JCXByb2dyYW1fbmFtZSA9IGNwICsgMTsKKwkJbmRvLT5wcm9ncmFtX25hbWUgPSBwcm9ncmFtX25hbWUgPSBjcCArIDE7CiAJZWxzZQotCQlwcm9ncmFtX25hbWUgPSBhcmd2WzBdOworCQluZG8tPnByb2dyYW1fbmFtZSA9IHByb2dyYW1fbmFtZSA9IGFyZ3ZbMF07CisKKyNpZmRlZiBfV0lOMzIKKwlpZiAocGNhcF93c29ja2luaXQoKSAhPSAwKQorCQllcnJvcigiQXR0ZW1wdGluZyB0byBpbml0aWFsaXplIFdpbnNvY2sgZmFpbGVkIik7CisjZW5kaWYgLyogX1dJTjMyICovCiAKIAkvKgogCSAqIE9uIHBsYXRmb3JtcyB3aGVyZSB0aGUgQ1BVIGRvZXNuJ3Qgc3VwcG9ydCB1bmFsaWduZWQgbG9hZHMsCkBAIC0xMDY4LDEwICsxMTc4LDYgQEAKIAlpZiAoYWJvcnRfb25fbWlzYWxpZ25tZW50KGVidWYsIHNpemVvZihlYnVmKSkgPCAwKQogCQllcnJvcigiJXMiLCBlYnVmKTsKIAotI2lmZGVmIFVTRV9MSUJTTUkKLQlzbWlJbml0KCJ0Y3BkdW1wIik7Ci0jZW5kaWYKLQogCXdoaWxlICgKIAkgICAgKG9wID0gZ2V0b3B0X2xvbmcoYXJnYywgYXJndiwgU0hPUlRPUFRTLCBsb25nb3B0cywgTlVMTCkpICE9IC0xKQogCQlzd2l0Y2ggKG9wKSB7CkBAIC0xMDgxLDIwICsxMTg3LDIwIEBACiAJCQlicmVhazsKIAogCQljYXNlICdBJzoKLQkJCSsrQWZsYWc7CisJCQkrK25kby0+bmRvX0FmbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnYic6Ci0JCQkrK2JmbGFnOworCQkJKytuZG8tPm5kb19iZmxhZzsKIAkJCWJyZWFrOwogCi0jaWYgZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSB8fCBkZWZpbmVkKFdJTjMyKQorI2lmIGRlZmluZWQoSEFWRV9QQ0FQX0NSRUFURSkgfHwgZGVmaW5lZChfV0lOMzIpCiAJCWNhc2UgJ0InOgogCQkJQmZsYWcgPSBhdG9pKG9wdGFyZykqMTAyNDsKIAkJCWlmIChCZmxhZyA8PSAwKQogCQkJCWVycm9yKCJpbnZhbGlkIHBhY2tldCBidWZmZXIgc2l6ZSAlcyIsIG9wdGFyZyk7CiAJCQlicmVhazsKLSNlbmRpZiAvKiBkZWZpbmVkKEhBVkVfUENBUF9DUkVBVEUpIHx8IGRlZmluZWQoV0lOMzIpICovCisjZW5kaWYgLyogZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSB8fCBkZWZpbmVkKF9XSU4zMikgKi8KIAogCQljYXNlICdjJzoKIAkJCWNudCA9IGF0b2kob3B0YXJnKTsKQEAgLTExMDQsNyArMTIxMCw3IEBACiAKIAkJY2FzZSAnQyc6CiAJCQlDZmxhZyA9IGF0b2kob3B0YXJnKSAqIDEwMDAwMDA7Ci0JCQlpZiAoQ2ZsYWcgPCAwKQorCQkJaWYgKENmbGFnIDw9IDApCiAJCQkJZXJyb3IoImludmFsaWQgZmlsZSBzaXplICVzIiwgb3B0YXJnKTsKIAkJCWJyZWFrOwogCkBAIC0xMTIxLDE4ICsxMjI3LDE4IEBACiAJCQlicmVhazsKIAogCQljYXNlICdlJzoKLQkJCSsrZWZsYWc7CisJCQkrK25kby0+bmRvX2VmbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnRSc6CiAjaWZuZGVmIEhBVkVfTElCQ1JZUFRPCiAJCQl3YXJuaW5nKCJjcnlwdG8gY29kZSBub3QgY29tcGlsZWQgaW4iKTsKICNlbmRpZgotCQkJZ25kby0+bmRvX2VzcHNlY3JldCA9IG9wdGFyZzsKKwkJCW5kby0+bmRvX2VzcHNlY3JldCA9IG9wdGFyZzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ2YnOgotCQkJKytmZmxhZzsKKwkJCSsrbmRvLT5uZG9fZmZsYWc7CiAJCQlicmVhazsKIAogCQljYXNlICdGJzoKQEAgLTExNTYsNTIgKzEyNjIsMTQgQEAKIAogCQljYXNlICdoJzoKIAkJCXByaW50X3VzYWdlKCk7Ci0JCQlleGl0KDApOworCQkJZXhpdF90Y3BkdW1wKDApOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnSCc6Ci0JCQkrK0hmbGFnOworCQkJKytuZG8tPm5kb19IZmxhZzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ2knOgotCQkJaWYgKG9wdGFyZ1swXSA9PSAnMCcgJiYgb3B0YXJnWzFdID09IDApCi0JCQkJZXJyb3IoIkludmFsaWQgYWRhcHRlciBpbmRleCIpOwotCi0jaWZkZWYgSEFWRV9QQ0FQX0ZJTkRBTExERVZTCi0JCQkvKgotCQkJICogSWYgdGhlIGFyZ3VtZW50IGlzIGEgbnVtYmVyLCB0cmVhdCBpdCBhcwotCQkJICogYW4gaW5kZXggaW50byB0aGUgbGlzdCBvZiBhZGFwdGVycywgYXMKLQkJCSAqIHByaW50ZWQgYnkgInRjcGR1bXAgLUQiLgotCQkJICoKLQkJCSAqIFRoaXMgc2hvdWxkIGJlIE9LIG9uIFVOSVggc3lzdGVtcywgYXMgaW50ZXJmYWNlcwotCQkJICogc2hvdWxkbid0IGhhdmUgbmFtZXMgdGhhdCBiZWdpbiB3aXRoIGRpZ2l0cy4KLQkJCSAqIEl0IGNhbiBiZSB1c2VmdWwgb24gV2luZG93cywgd2hlcmUgbW9yZSB0aGFuCi0JCQkgKiBvbmUgaW50ZXJmYWNlIGNhbiBoYXZlIHRoZSBzYW1lIG5hbWUuCi0JCQkgKi8KLQkJCWRldm51bSA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDEwKTsKLQkJCWlmIChvcHRhcmcgIT0gZW5kICYmICplbmQgPT0gJ1wwJykgewotCQkJCWlmIChkZXZudW0gPCAwKQotCQkJCQllcnJvcigiSW52YWxpZCBhZGFwdGVyIGluZGV4Iik7Ci0KLQkJCQlpZiAocGNhcF9maW5kYWxsZGV2cygmZGV2cG9pbnRlciwgZWJ1ZikgPCAwKQotCQkJCQllcnJvcigiJXMiLCBlYnVmKTsKLQkJCQllbHNlIHsKLQkJCQkJLyoKLQkJCQkJICogTG9vayBmb3IgdGhlIGRldm51bS10aCBlbnRyeQotCQkJCQkgKiBpbiB0aGUgbGlzdCBvZiBkZXZpY2VzCi0JCQkJCSAqICgxLWJhc2VkKS4KLQkJCQkJICovCi0JCQkJCWZvciAoaSA9IDA7Ci0JCQkJCSAgICBpIDwgZGV2bnVtLTEgJiYgZGV2cG9pbnRlciAhPSBOVUxMOwotCQkJCQkgICAgaSsrLCBkZXZwb2ludGVyID0gZGV2cG9pbnRlci0+bmV4dCkKLQkJCQkJCTsKLQkJCQkJaWYgKGRldnBvaW50ZXIgPT0gTlVMTCkKLQkJCQkJCWVycm9yKCJJbnZhbGlkIGFkYXB0ZXIgaW5kZXgiKTsKLQkJCQl9Ci0JCQkJZGV2aWNlID0gZGV2cG9pbnRlci0+bmFtZTsKLQkJCQlicmVhazsKLQkJCX0KLSNlbmRpZiAvKiBIQVZFX1BDQVBfRklOREFMTERFVlMgKi8KIAkJCWRldmljZSA9IG9wdGFyZzsKIAkJCWJyZWFrOwogCkBAIC0xMjI0LDQxICsxMjkyLDM5IEBACiAjZW5kaWYKIAogCQljYXNlICdsJzoKLSNpZmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgogCQkJLyoKIAkJCSAqIF9JT0xCRiBpcyB0aGUgc2FtZSBhcyBfSU9GQkYgaW4gTWljcm9zb2Z0J3MgQwogCQkJICogbGlicmFyaWVzOyB0aGUgb25seSBhbHRlcm5hdGl2ZSB0aGV5IG9mZmVyCiAJCQkgKiBpcyBfSU9OQkYuCiAJCQkgKgogCQkJICogWFhYIC0gdGhpcyBzaG91bGQgcmVhbGx5IGJlIGNoZWNraW5nIGZvciBNU1ZDKyssCi0JCQkgKiBub3QgV0lOMzIsIGlmLCBmb3IgZXhhbXBsZSwgTWluR1cgaGFzIGl0cyBvd24KKwkJCSAqIG5vdCBfV0lOMzIsIGlmLCBmb3IgZXhhbXBsZSwgTWluR1cgaGFzIGl0cyBvd24KIAkJCSAqIEMgbGlicmFyeSB0aGF0IGlzIG1vcmUgVU5JWC1jb21wYXRpYmxlLgogCQkJICovCiAJCQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTkJGLCAwKTsKLSNlbHNlIC8qIFdJTjMyICovCisjZWxzZSAvKiBfV0lOMzIgKi8KICNpZmRlZiBIQVZFX1NFVExJTkVCVUYKIAkJCXNldGxpbmVidWYoc3Rkb3V0KTsKICNlbHNlCiAJCQlzZXR2YnVmKHN0ZG91dCwgTlVMTCwgX0lPTEJGLCAwKTsKICNlbmRpZgotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogX1dJTjMyICovCiAJCQlicmVhazsKIAogCQljYXNlICdLJzoKLQkJCSsrS2ZsYWc7CisJCQkrK25kby0+bmRvX0tmbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnbSc6Ci0jaWZkZWYgVVNFX0xJQlNNSQotCQkJaWYgKHNtaUxvYWRNb2R1bGUob3B0YXJnKSA9PSAwKSB7Ci0JCQkJZXJyb3IoImNvdWxkIG5vdCBsb2FkIE1JQiBtb2R1bGUgJXMiLCBvcHRhcmcpOworCQkJaWYgKG5kX2hhdmVfc21pX3N1cHBvcnQoKSkgeworCQkJCWlmIChuZF9sb2FkX3NtaV9tb2R1bGUob3B0YXJnLCBlYnVmLCBzaXplb2YgZWJ1ZikgPT0gLTEpCisJCQkJCWVycm9yKCIlcyIsIGVidWYpOworCQkJfSBlbHNlIHsKKwkJCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBpZ25vcmluZyBvcHRpb24gYC1tICVzJyAiLAorCQkJCQkgICAgICBwcm9ncmFtX25hbWUsIG9wdGFyZyk7CisJCQkJKHZvaWQpZnByaW50ZihzdGRlcnIsICIobm8gbGlic21pIHN1cHBvcnQpXG4iKTsKIAkJCX0KLQkJCXNmbGFnID0gMTsKLSNlbHNlCi0JCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBpZ25vcmluZyBvcHRpb24gYC1tICVzJyAiLAotCQkJCSAgICAgIHByb2dyYW1fbmFtZSwgb3B0YXJnKTsKLQkJCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiKG5vIGxpYnNtaSBzdXBwb3J0KVxuIik7Ci0jZW5kaWYKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ00nOgpAQCAtMTI2NiwxNSArMTMzMiwxNSBAQAogI2lmbmRlZiBIQVZFX0xJQkNSWVBUTwogCQkJd2FybmluZygiY3J5cHRvIGNvZGUgbm90IGNvbXBpbGVkIGluIik7CiAjZW5kaWYKLQkJCXNpZ3NlY3JldCA9IG9wdGFyZzsKKwkJCW5kby0+bmRvX3NpZ3NlY3JldCA9IG9wdGFyZzsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ24nOgotCQkJKytuZmxhZzsKKwkJCSsrbmRvLT5uZG9fbmZsYWc7CiAJCQlicmVhazsKIAogCQljYXNlICdOJzoKLQkJCSsrTmZsYWc7CisJCQkrK25kby0+bmRvX05mbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnTyc6CkBAIC0xMjg2LDE3ICsxMzUyLDE3IEBACiAJCQlicmVhazsKIAogCQljYXNlICdxJzoKLQkJCSsrcWZsYWc7Ci0JCQkrK3N1cHByZXNzX2RlZmF1bHRfcHJpbnQ7CisJCQkrK25kby0+bmRvX3FmbGFnOworCQkJKytuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50OwogCQkJYnJlYWs7CiAKICNpZmRlZiBIQVZFX1BDQVBfU0VURElSRUNUSU9OCiAJCWNhc2UgJ1EnOgotCQkJaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAiaW4iKSA9PSAwKQorCQkJaWYgKGFzY2lpX3N0cmNhc2VjbXAob3B0YXJnLCAiaW4iKSA9PSAwKQogCQkJCVFmbGFnID0gUENBUF9EX0lOOwotCQkJZWxzZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJvdXQiKSA9PSAwKQorCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJvdXQiKSA9PSAwKQogCQkJCVFmbGFnID0gUENBUF9EX09VVDsKLQkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAiaW5vdXQiKSA9PSAwKQorCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJpbm91dCIpID09IDApCiAJCQkJUWZsYWcgPSBQQ0FQX0RfSU5PVVQ7CiAJCQllbHNlCiAJCQkJZXJyb3IoInVua25vd24gY2FwdHVyZSBkaXJlY3Rpb24gYCVzJyIsIG9wdGFyZyk7CkBAIC0xMzA3LDY2ICsxMzczLDY0IEBACiAJCQlSRmlsZU5hbWUgPSBvcHRhcmc7CiAJCQlicmVhazsKIAotCQljYXNlICdSJzoKLQkJCVJmbGFnID0gMDsKLQkJCWJyZWFrOwotCiAJCWNhc2UgJ3MnOgotCQkJc25hcGxlbiA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOworCQkJbmRvLT5uZG9fc25hcGxlbiA9IHN0cnRvbChvcHRhcmcsICZlbmQsIDApOwogCQkJaWYgKG9wdGFyZyA9PSBlbmQgfHwgKmVuZCAhPSAnXDAnCi0JCQkgICAgfHwgc25hcGxlbiA8IDAgfHwgc25hcGxlbiA+IE1BWElNVU1fU05BUExFTikKKwkJCSAgICB8fCBuZG8tPm5kb19zbmFwbGVuIDwgMCB8fCBuZG8tPm5kb19zbmFwbGVuID4gTUFYSU1VTV9TTkFQTEVOKQogCQkJCWVycm9yKCJpbnZhbGlkIHNuYXBsZW4gJXMiLCBvcHRhcmcpOwotCQkJZWxzZSBpZiAoc25hcGxlbiA9PSAwKQotCQkJCXNuYXBsZW4gPSBNQVhJTVVNX1NOQVBMRU47CisJCQllbHNlIGlmIChuZG8tPm5kb19zbmFwbGVuID09IDApCisJCQkJbmRvLT5uZG9fc25hcGxlbiA9IE1BWElNVU1fU05BUExFTjsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ1MnOgotCQkJKytTZmxhZzsKKwkJCSsrbmRvLT5uZG9fU2ZsYWc7CiAJCQlicmVhazsKIAogCQljYXNlICd0JzoKLQkJCSsrdGZsYWc7CisJCQkrK25kby0+bmRvX3RmbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnVCc6Ci0JCQlpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJ2YXQiKSA9PSAwKQotCQkJCXBhY2tldHR5cGUgPSBQVF9WQVQ7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgIndiIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfV0I7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgInJwYyIpID09IDApCi0JCQkJcGFja2V0dHlwZSA9IFBUX1JQQzsKLQkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAicnRwIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfUlRQOwotCQkJZWxzZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJydGNwIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfUlRDUDsKLQkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAic25tcCIpID09IDApCi0JCQkJcGFja2V0dHlwZSA9IFBUX1NOTVA7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgImNuZnAiKSA9PSAwKQotCQkJCXBhY2tldHR5cGUgPSBQVF9DTkZQOwotCQkJZWxzZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJ0ZnRwIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfVEZUUDsKLQkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAiYW9kdiIpID09IDApCi0JCQkJcGFja2V0dHlwZSA9IFBUX0FPRFY7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgImNhcnAiKSA9PSAwKQotCQkJCXBhY2tldHR5cGUgPSBQVF9DQVJQOwotCQkJZWxzZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJyYWRpdXMiKSA9PSAwKQotCQkJCXBhY2tldHR5cGUgPSBQVF9SQURJVVM7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgInptdHAxIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfWk1UUDE7Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgInZ4bGFuIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfVlhMQU47Ci0JCQllbHNlIGlmIChzdHJjYXNlY21wKG9wdGFyZywgInBnbSIpID09IDApCi0JCQkJcGFja2V0dHlwZSA9IFBUX1BHTTsKLQkJCWVsc2UgaWYgKHN0cmNhc2VjbXAob3B0YXJnLCAicGdtX3ptdHAxIikgPT0gMCkKLQkJCQlwYWNrZXR0eXBlID0gUFRfUEdNX1pNVFAxOwotCQkJZWxzZSBpZiAoc3RyY2FzZWNtcChvcHRhcmcsICJsbXAiKSA9PSAwKQotCQkJCXBhY2tldHR5cGUgPSBQVF9MTVA7CisJCQlpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJ2YXQiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9WQVQ7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgIndiIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfV0I7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgInJwYyIpID09IDApCisJCQkJbmRvLT5uZG9fcGFja2V0dHlwZSA9IFBUX1JQQzsKKwkJCWVsc2UgaWYgKGFzY2lpX3N0cmNhc2VjbXAob3B0YXJnLCAicnRwIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfUlRQOworCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJydGNwIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfUlRDUDsKKwkJCWVsc2UgaWYgKGFzY2lpX3N0cmNhc2VjbXAob3B0YXJnLCAic25tcCIpID09IDApCisJCQkJbmRvLT5uZG9fcGFja2V0dHlwZSA9IFBUX1NOTVA7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgImNuZnAiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9DTkZQOworCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJ0ZnRwIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfVEZUUDsKKwkJCWVsc2UgaWYgKGFzY2lpX3N0cmNhc2VjbXAob3B0YXJnLCAiYW9kdiIpID09IDApCisJCQkJbmRvLT5uZG9fcGFja2V0dHlwZSA9IFBUX0FPRFY7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgImNhcnAiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9DQVJQOworCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJyYWRpdXMiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9SQURJVVM7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgInptdHAxIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfWk1UUDE7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgInZ4bGFuIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfVlhMQU47CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgInBnbSIpID09IDApCisJCQkJbmRvLT5uZG9fcGFja2V0dHlwZSA9IFBUX1BHTTsKKwkJCWVsc2UgaWYgKGFzY2lpX3N0cmNhc2VjbXAob3B0YXJnLCAicGdtX3ptdHAxIikgPT0gMCkKKwkJCQluZG8tPm5kb19wYWNrZXR0eXBlID0gUFRfUEdNX1pNVFAxOworCQkJZWxzZSBpZiAoYXNjaWlfc3RyY2FzZWNtcChvcHRhcmcsICJsbXAiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9MTVA7CisJCQllbHNlIGlmIChhc2NpaV9zdHJjYXNlY21wKG9wdGFyZywgInJlc3AiKSA9PSAwKQorCQkJCW5kby0+bmRvX3BhY2tldHR5cGUgPSBQVF9SRVNQOwogCQkJZWxzZQogCQkJCWVycm9yKCJ1bmtub3duIHBhY2tldCB0eXBlIGAlcyciLCBvcHRhcmcpOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAndSc6Ci0JCQkrK3VmbGFnOworCQkJKytuZG8tPm5kb191ZmxhZzsKIAkJCWJyZWFrOwogCiAjaWZkZWYgSEFWRV9QQ0FQX0RVTVBfRkxVU0gKQEAgLTEzNzYsNyArMTQ0MCw3IEBACiAjZW5kaWYKIAogCQljYXNlICd2JzoKLQkJCSsrdmZsYWc7CisJCQkrK25kby0+bmRvX3ZmbGFnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnVic6CkBAIC0xMzg5LDc3ICsxNDUzLDcxIEBACiAKIAkJY2FzZSAnVyc6CiAJCQlXZmxhZyA9IGF0b2kob3B0YXJnKTsKLQkJCWlmIChXZmxhZyA8IDApCisJCQlpZiAoV2ZsYWcgPD0gMCkKIAkJCQllcnJvcigiaW52YWxpZCBudW1iZXIgb2Ygb3V0cHV0IGZpbGVzICVzIiwgb3B0YXJnKTsKIAkJCVdmbGFnQ2hhcnMgPSBnZXRXZmxhZ0NoYXJzKFdmbGFnKTsKIAkJCWJyZWFrOwogCiAJCWNhc2UgJ3gnOgotCQkJKyt4ZmxhZzsKLQkJCSsrc3VwcHJlc3NfZGVmYXVsdF9wcmludDsKKwkJCSsrbmRvLT5uZG9feGZsYWc7CisJCQkrK25kby0+bmRvX3N1cHByZXNzX2RlZmF1bHRfcHJpbnQ7CiAJCQlicmVhazsKIAogCQljYXNlICdYJzoKLQkJCSsrWGZsYWc7Ci0JCQkrK3N1cHByZXNzX2RlZmF1bHRfcHJpbnQ7CisJCQkrK25kby0+bmRvX1hmbGFnOworCQkJKytuZG8tPm5kb19zdXBwcmVzc19kZWZhdWx0X3ByaW50OwogCQkJYnJlYWs7CiAKIAkJY2FzZSAneSc6Ci0JCQlnbmRvLT5uZG9fZGx0bmFtZSA9IG9wdGFyZzsKLQkJCWduZG8tPm5kb19kbHQgPQotCQkJICBwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKGduZG8tPm5kb19kbHRuYW1lKTsKLQkJCWlmIChnbmRvLT5uZG9fZGx0IDwgMCkKLQkJCQllcnJvcigiaW52YWxpZCBkYXRhIGxpbmsgdHlwZSAlcyIsIGduZG8tPm5kb19kbHRuYW1lKTsKKwkJCXlmbGFnX2RsdF9uYW1lID0gb3B0YXJnOworCQkJeWZsYWdfZGx0ID0KKwkJCQlwY2FwX2RhdGFsaW5rX25hbWVfdG9fdmFsKHlmbGFnX2RsdF9uYW1lKTsKKwkJCWlmICh5ZmxhZ19kbHQgPCAwKQorCQkJCWVycm9yKCJpbnZhbGlkIGRhdGEgbGluayB0eXBlICVzIiwgeWZsYWdfZGx0X25hbWUpOwogCQkJYnJlYWs7CiAKLSNpZiBkZWZpbmVkKEhBVkVfUENBUF9ERUJVRykgfHwgZGVmaW5lZChIQVZFX1lZREVCVUcpCisjaWZkZWYgSEFWRV9QQ0FQX1NFVF9QQVJTRVJfREVCVUcKIAkJY2FzZSAnWSc6CiAJCQl7CiAJCQkvKiBVbmRvY3VtZW50ZWQgZmxhZyAqLwotI2lmZGVmIEhBVkVfUENBUF9ERUJVRwotCQkJZXh0ZXJuIGludCBwY2FwX2RlYnVnOwotCQkJcGNhcF9kZWJ1ZyA9IDE7Ci0jZWxzZQotCQkJZXh0ZXJuIGludCB5eWRlYnVnOwotCQkJeXlkZWJ1ZyA9IDE7Ci0jZW5kaWYKKwkJCXBjYXBfc2V0X3BhcnNlcl9kZWJ1ZygxKTsKIAkJCX0KIAkJCWJyZWFrOwogI2VuZGlmCiAJCWNhc2UgJ3onOgotCQkJemZsYWcgPSBzdHJkdXAob3B0YXJnKTsKKwkJCXpmbGFnID0gb3B0YXJnOwogCQkJYnJlYWs7CiAKIAkJY2FzZSAnWic6Ci0JCQl1c2VybmFtZSA9IHN0cmR1cChvcHRhcmcpOworCQkJdXNlcm5hbWUgPSBvcHRhcmc7CiAJCQlicmVhazsKIAogCQljYXNlICcjJzoKLQkJCWduZG8tPm5kb19wYWNrZXRfbnVtYmVyID0gMTsKKwkJCW5kby0+bmRvX3BhY2tldF9udW1iZXIgPSAxOwogCQkJYnJlYWs7CiAKIAkJY2FzZSBPUFRJT05fVkVSU0lPTjoKIAkJCXByaW50X3ZlcnNpb24oKTsKLQkJCWV4aXQoMCk7CisJCQlleGl0X3RjcGR1bXAoMCk7CiAJCQlicmVhazsKIAogI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgogCQljYXNlIE9QVElPTl9UU1RBTVBfUFJFQ0lTSU9OOgotCQkJZ25kby0+bmRvX3RzdGFtcF9wcmVjaXNpb24gPSB0c3RhbXBfcHJlY2lzaW9uX2Zyb21fc3RyaW5nKG9wdGFyZyk7Ci0JCQlpZiAoZ25kby0+bmRvX3RzdGFtcF9wcmVjaXNpb24gPCAwKQorCQkJbmRvLT5uZG9fdHN0YW1wX3ByZWNpc2lvbiA9IHRzdGFtcF9wcmVjaXNpb25fZnJvbV9zdHJpbmcob3B0YXJnKTsKKwkJCWlmIChuZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uIDwgMCkKIAkJCQllcnJvcigidW5zdXBwb3J0ZWQgdGltZSBzdGFtcCBwcmVjaXNpb24iKTsKIAkJCWJyZWFrOwogI2VuZGlmCiAKICNpZmRlZiBIQVZFX1BDQVBfU0VUX0lNTUVESUFURV9NT0RFCiAJCWNhc2UgT1BUSU9OX0lNTUVESUFURV9NT0RFOgotCQkJZ25kby0+bmRvX2ltbWVkaWF0ZSA9IDE7CisJCQlpbW1lZGlhdGVfbW9kZSA9IDE7CiAJCQlicmVhazsKICNlbmRpZgogCiAJCWRlZmF1bHQ6CiAJCQlwcmludF91c2FnZSgpOwotCQkJZXhpdCgxKTsKKwkJCWV4aXRfdGNwZHVtcCgxKTsKIAkJCS8qIE5PVFJFQUNIRUQgKi8KIAkJfQogCkBAIC0xNDY4LDExICsxNTI2LDExIEBACiAJCXNob3dfZGV2aWNlc19hbmRfZXhpdCgpOwogI2VuZGlmCiAKLQlzd2l0Y2ggKHRmbGFnKSB7CisJc3dpdGNoIChuZG8tPm5kb190ZmxhZykgewogCiAJY2FzZSAwOiAvKiBEZWZhdWx0ICovCiAJY2FzZSA0OiAvKiBEZWZhdWx0ICsgRGF0ZSovCi0JCXRoaXN6b25lID0gZ210MmxvY2FsKDApOworCQl0aW1lem9uZV9vZmZzZXQgPSBnbXQybG9jYWwoMCk7CiAJCWJyZWFrOwogCiAJY2FzZSAxOiAvKiBObyB0aW1lIHN0YW1wICovCkBAIC0xNDg2LDcgKzE1NDQsNyBAQAogCQlicmVhazsKIAl9CiAKLQlpZiAoZmZsYWcgIT0gMCAmJiAoVkZpbGVOYW1lICE9IE5VTEwgfHwgUkZpbGVOYW1lICE9IE5VTEwpKQorCWlmIChuZG8tPm5kb19mZmxhZyAhPSAwICYmIChWRmlsZU5hbWUgIT0gTlVMTCB8fCBSRmlsZU5hbWUgIT0gTlVMTCkpCiAJCWVycm9yKCItZiBjYW4gbm90IGJlIHVzZWQgd2l0aCAtViBvciAtciIpOwogCiAJaWYgKFZGaWxlTmFtZSAhPSBOVUxMICYmIFJGaWxlTmFtZSAhPSBOVUxMKQpAQCAtMTUwMCw3ICsxNTU4LDcgQEAKIAkgKiBwcm9iYWJseSBleHBlY3RpbmcgdG8gc2VlIHBhY2tldHMgcG9wIHVwIGltbWVkaWF0ZWx5LgogCSAqLwogCWlmIChXRmlsZU5hbWUgPT0gTlVMTCAmJiBpc2F0dHkoMSkpCi0JCWduZG8tPm5kb19pbW1lZGlhdGUgPSAxOworCQlpbW1lZGlhdGVfbW9kZSA9IDE7CiAjZW5kaWYKIAogI2lmZGVmIFdJVEhfQ0hST09UCkBAIC0xNTMxLDcgKzE1ODksNyBAQAogCQkgKiBJbiBlaXRoZXIgY2FzZSwgd2UncmUgcmVhZGluZyBhIHNhdmVmaWxlLCBub3QgZG9pbmcKIAkJICogYSBsaXZlIGNhcHR1cmUuCiAJCSAqLwotI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBfV0lOMzIKIAkJLyoKIAkJICogV2UgZG9uJ3QgbmVlZCBuZXR3b3JrIGFjY2Vzcywgc28gcmVsaW5xdWlzaCBhbnkgc2V0LVVJRAogCQkgKiBvciBzZXQtR0lEIHByaXZpbGVnZXMgd2UgaGF2ZSAoaWYgYW55KS4KQEAgLTE1NDMsNyArMTYwMSw3IEBACiAJCSAqLwogCQlpZiAoc2V0Z2lkKGdldGdpZCgpKSAhPSAwIHx8IHNldHVpZChnZXR1aWQoKSkgIT0gMCApCiAJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IHNldGdpZC9zZXR1aWQgZmFpbGVkICFcbiIpOwotI2VuZGlmIC8qIFdJTjMyICovCisjZW5kaWYgLyogX1dJTjMyICovCiAJCWlmIChWRmlsZU5hbWUgIT0gTlVMTCkgewogCQkJaWYgKFZGaWxlTmFtZVswXSA9PSAnLScgJiYgVkZpbGVOYW1lWzFdID09ICdcMCcpCiAJCQkJVkZpbGUgPSBzdGRpbjsKQEAgLTE1NTEsNyArMTYwOSw3IEBACiAJCQkJVkZpbGUgPSBmb3BlbihWRmlsZU5hbWUsICJyIik7CiAKIAkJCWlmIChWRmlsZSA9PSBOVUxMKQotCQkJCWVycm9yKCJVbmFibGUgdG8gb3BlbiBmaWxlOiAlc1xuIiwgc3RyZXJyb3IoZXJybm8pKTsKKwkJCQllcnJvcigiVW5hYmxlIHRvIG9wZW4gZmlsZTogJXNcbiIsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKIAogCQkJcmV0ID0gZ2V0X25leHRfZmlsZShWRmlsZSwgVkZpbGVMaW5lKTsKIAkJCWlmICghcmV0KQpAQCAtMTU2MSw3ICsxNjE5LDcgQEAKIAogI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgogCQlwZCA9IHBjYXBfb3Blbl9vZmZsaW5lX3dpdGhfdHN0YW1wX3ByZWNpc2lvbihSRmlsZU5hbWUsCi0JCSAgICBnbmRvLT5uZG9fdHN0YW1wX3ByZWNpc2lvbiwgZWJ1Zik7CisJCSAgICBuZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uLCBlYnVmKTsKICNlbHNlCiAJCXBkID0gcGNhcF9vcGVuX29mZmxpbmUoUkZpbGVOYW1lLCBlYnVmKTsKICNlbmRpZgpAQCAtMTU5MSwxNTcgKzE2NDksOTEgQEAKIAkJICogV2UncmUgZG9pbmcgYSBsaXZlIGNhcHR1cmUuCiAJCSAqLwogCQlpZiAoZGV2aWNlID09IE5VTEwpIHsKKwkJCS8qCisJCQkgKiBObyBpbnRlcmZhY2Ugd2FzIHNwZWNpZmllZC4gIFBpY2sgb25lLgorCQkJICovCisjaWZkZWYgSEFWRV9QQ0FQX0ZJTkRBTExERVZTCisJCQkvKgorCQkJICogRmluZCB0aGUgbGlzdCBvZiBpbnRlcmZhY2VzLCBhbmQgcGljaworCQkJICogdGhlIGZpcnN0IGludGVyZmFjZS4KKwkJCSAqLworCQkJaWYgKHBjYXBfZmluZGFsbGRldnMoJmRldmxpc3QsIGVidWYpID49IDAgJiYKKwkJCSAgICBkZXZsaXN0ICE9IE5VTEwpIHsKKwkJCQlkZXZpY2UgPSBzdHJkdXAoZGV2bGlzdC0+bmFtZSk7CisJCQkJcGNhcF9mcmVlYWxsZGV2cyhkZXZsaXN0KTsKKwkJCX0KKyNlbHNlIC8qIEhBVkVfUENBUF9GSU5EQUxMREVWUyAqLworCQkJLyoKKwkJCSAqIFVzZSB3aGF0ZXZlciBpbnRlcmZhY2UgcGNhcF9sb29rdXBkZXYoKQorCQkJICogY2hvb3Nlcy4KKwkJCSAqLwogCQkJZGV2aWNlID0gcGNhcF9sb29rdXBkZXYoZWJ1Zik7CisjZW5kaWYKIAkJCWlmIChkZXZpY2UgPT0gTlVMTCkKIAkJCQllcnJvcigiJXMiLCBlYnVmKTsKIAkJfQotI2lmZGVmIFdJTjMyCisKIAkJLyoKLQkJICogUHJpbnQgYSBtZXNzYWdlIHRvIHRoZSBzdGFuZGFyZCBlcnJvciBvbiBXaW5kb3dzLgotCQkgKiBYWFggLSB3aHkgZG8gaXQgaGVyZSwgd2l0aCBhIGRpZmZlcmVudCBtZXNzYWdlPworCQkgKiBUcnkgdG8gb3BlbiB0aGUgaW50ZXJmYWNlIHdpdGggdGhlIHNwZWNpZmllZCBuYW1lLgogCQkgKi8KLQkJaWYoc3RybGVuKGRldmljZSkgPT0gMSkJLyogd2UgYXNzdW1lIHRoYXQgYW4gQVNDSUkgc3RyaW5nIGlzIGFsd2F5cyBsb25nZXIgdGhhbiAxIGNoYXIgKi8KLQkJewkJCQkJCS8qIGEgVW5pY29kZSBzdHJpbmcgaGFzIGEgXDAgYXMgc2Vjb25kIGJ5dGUgKHNvIHN0cmxlbigpIGlzIDEpICovCi0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBsaXN0ZW5pbmcgb24gJXdzXG4iLCBwcm9ncmFtX25hbWUsIGRldmljZSk7Ci0JCX0KLQkJZWxzZQotCQl7Ci0JCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiBsaXN0ZW5pbmcgb24gJXNcbiIsIHByb2dyYW1fbmFtZSwgZGV2aWNlKTsKKwkJcGQgPSBvcGVuX2ludGVyZmFjZShkZXZpY2UsIG5kbywgZWJ1Zik7CisJCWlmIChwZCA9PSBOVUxMKSB7CisJCQkvKgorCQkJICogVGhhdCBmYWlsZWQuICBJZiB3ZSBjYW4gZ2V0IGEgbGlzdCBvZgorCQkJICogaW50ZXJmYWNlcywgYW5kIHRoZSBpbnRlcmZhY2UgbmFtZQorCQkJICogaXMgcHVyZWx5IG51bWVyaWMsIHRyeSB0byB1c2UgaXQgYXMKKwkJCSAqIGEgMS1iYXNlZCBpbmRleCBpbiB0aGUgbGlzdCBvZgorCQkJICogaW50ZXJmYWNlcy4KKwkJCSAqLworI2lmZGVmIEhBVkVfUENBUF9GSU5EQUxMREVWUworCQkJZGV2bnVtID0gcGFyc2VfaW50ZXJmYWNlX251bWJlcihkZXZpY2UpOworCQkJaWYgKGRldm51bSA9PSAtMSkgeworCQkJCS8qCisJCQkJICogSXQncyBub3QgYSBudW1iZXI7IGp1c3QgcmVwb3J0CisJCQkJICogdGhlIG9wZW4gZXJyb3IgYW5kIGZhaWwuCisJCQkJICovCisJCQkJZXJyb3IoIiVzIiwgZWJ1Zik7CisJCQl9CisKKwkJCS8qCisJCQkgKiBPSywgaXQncyBhIG51bWJlcjsgdHJ5IHRvIGZpbmQgdGhlCisJCQkgKiBpbnRlcmZhY2Ugd2l0aCB0aGF0IGluZGV4LCBhbmQgdHJ5CisJCQkgKiB0byBvcGVuIGl0LgorCQkJICoKKwkJCSAqIGZpbmRfaW50ZXJmYWNlX2J5X251bWJlcigpIGV4aXRzIGlmIGl0CisJCQkgKiBjb3VsZG4ndCBiZSBmb3VuZC4KKwkJCSAqLworCQkJZGV2aWNlID0gZmluZF9pbnRlcmZhY2VfYnlfbnVtYmVyKGRldm51bSk7CisJCQlwZCA9IG9wZW5faW50ZXJmYWNlKGRldmljZSwgbmRvLCBlYnVmKTsKKwkJCWlmIChwZCA9PSBOVUxMKQorCQkJCWVycm9yKCIlcyIsIGVidWYpOworI2Vsc2UgLyogSEFWRV9QQ0FQX0ZJTkRBTExERVZTICovCisJCQkvKgorCQkJICogV2UgY2FuJ3QgZ2V0IGEgbGlzdCBvZiBpbnRlcmZhY2VzOyBqdXN0CisJCQkgKiBmYWlsLgorCQkJICovCisJCQllcnJvcigiJXMiLCBlYnVmKTsKKyNlbmRpZiAvKiBIQVZFX1BDQVBfRklOREFMTERFVlMgKi8KIAkJfQogCi0JCWZmbHVzaChzdGRlcnIpOwotI2VuZGlmIC8qIFdJTjMyICovCi0jaWZkZWYgSEFWRV9QQ0FQX0NSRUFURQotCQlwZCA9IHBjYXBfY3JlYXRlKGRldmljZSwgZWJ1Zik7Ci0JCWlmIChwZCA9PSBOVUxMKQotCQkJZXJyb3IoIiVzIiwgZWJ1Zik7Ci0jaWZkZWYgSEFWRV9QQ0FQX1NFVF9UU1RBTVBfVFlQRQotCQlpZiAoSmZsYWcpCi0JCQlzaG93X3RzdGFtcF90eXBlc19hbmRfZXhpdChkZXZpY2UsIHBkKTsKLSNlbmRpZgotI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgotCQlzdGF0dXMgPSBwY2FwX3NldF90c3RhbXBfcHJlY2lzaW9uKHBkLCBnbmRvLT5uZG9fdHN0YW1wX3ByZWNpc2lvbik7Ci0JCWlmIChzdGF0dXMgIT0gMCkKLQkJCWVycm9yKCIlczogQ2FuJ3Qgc2V0ICVzc2Vjb25kIHRpbWUgc3RhbXAgcHJlY2lzaW9uOiAlcyIsCi0JCQkJZGV2aWNlLAotCQkJCXRzdGFtcF9wcmVjaXNpb25fdG9fc3RyaW5nKGduZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uKSwKLQkJCQlwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOwotI2VuZGlmCi0KLSNpZmRlZiBIQVZFX1BDQVBfU0VUX0lNTUVESUFURV9NT0RFCi0JCWlmIChnbmRvLT5uZG9faW1tZWRpYXRlKSB7Ci0JCQlzdGF0dXMgPSBwY2FwX3NldF9pbW1lZGlhdGVfbW9kZShwZCwgMSk7Ci0JCQlpZiAoc3RhdHVzICE9IDApCi0JCQkJZXJyb3IoIiVzOiBDYW4ndCBzZXQgaW1tZWRpYXRlIG1vZGU6ICVzIiwKLQkJCQlkZXZpY2UsCi0JCQkJcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKLQkJfQotI2VuZGlmCi0JCS8qCi0JCSAqIElzIHRoaXMgYW4gaW50ZXJmYWNlIHRoYXQgc3VwcG9ydHMgbW9uaXRvciBtb2RlPwotCQkgKi8KLQkJaWYgKHBjYXBfY2FuX3NldF9yZm1vbihwZCkgPT0gMSkKLQkJCXN1cHBvcnRzX21vbml0b3JfbW9kZSA9IDE7Ci0JCWVsc2UKLQkJCXN1cHBvcnRzX21vbml0b3JfbW9kZSA9IDA7Ci0JCXN0YXR1cyA9IHBjYXBfc2V0X3NuYXBsZW4ocGQsIHNuYXBsZW4pOwotCQlpZiAoc3RhdHVzICE9IDApCi0JCQllcnJvcigiJXM6IENhbid0IHNldCBzbmFwc2hvdCBsZW5ndGg6ICVzIiwKLQkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JCXN0YXR1cyA9IHBjYXBfc2V0X3Byb21pc2MocGQsICFwZmxhZyk7Ci0JCWlmIChzdGF0dXMgIT0gMCkKLQkJCWVycm9yKCIlczogQ2FuJ3Qgc2V0IHByb21pc2N1b3VzIG1vZGU6ICVzIiwKLQkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JCWlmIChJZmxhZykgewotCQkJc3RhdHVzID0gcGNhcF9zZXRfcmZtb24ocGQsIDEpOwotCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCWVycm9yKCIlczogQ2FuJ3Qgc2V0IG1vbml0b3IgbW9kZTogJXMiLAotCQkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JCX0KLQkJc3RhdHVzID0gcGNhcF9zZXRfdGltZW91dChwZCwgMTAwMCk7Ci0JCWlmIChzdGF0dXMgIT0gMCkKLQkJCWVycm9yKCIlczogcGNhcF9zZXRfdGltZW91dCBmYWlsZWQ6ICVzIiwKLQkJCSAgICBkZXZpY2UsIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JCWlmIChCZmxhZyAhPSAwKSB7Ci0JCQlzdGF0dXMgPSBwY2FwX3NldF9idWZmZXJfc2l6ZShwZCwgQmZsYWcpOwotCQkJaWYgKHN0YXR1cyAhPSAwKQotCQkJCWVycm9yKCIlczogQ2FuJ3Qgc2V0IGJ1ZmZlciBzaXplOiAlcyIsCi0JCQkJICAgIGRldmljZSwgcGNhcF9zdGF0dXN0b3N0cihzdGF0dXMpKTsKLQkJfQotI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1RZUEUKLSAgICAgICAgICAgICAgICBpZiAoamZsYWcgIT0gLTEpIHsKLQkJCXN0YXR1cyA9IHBjYXBfc2V0X3RzdGFtcF90eXBlKHBkLCBqZmxhZyk7Ci0JCQlpZiAoc3RhdHVzIDwgMCkKLQkJCQllcnJvcigiJXM6IENhbid0IHNldCB0aW1lIHN0YW1wIHR5cGU6ICVzIiwKLQkJCSAgICAgICAgICAgICAgZGV2aWNlLCBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOwotCQl9Ci0jZW5kaWYKLQkJc3RhdHVzID0gcGNhcF9hY3RpdmF0ZShwZCk7Ci0JCWlmIChzdGF0dXMgPCAwKSB7Ci0JCQkvKgotCQkJICogcGNhcF9hY3RpdmF0ZSgpIGZhaWxlZC4KLQkJCSAqLwotCQkJY3AgPSBwY2FwX2dldGVycihwZCk7Ci0JCQlpZiAoc3RhdHVzID09IFBDQVBfRVJST1IpCi0JCQkJZXJyb3IoIiVzIiwgY3ApOwotCQkJZWxzZSBpZiAoKHN0YXR1cyA9PSBQQ0FQX0VSUk9SX05PX1NVQ0hfREVWSUNFIHx8Ci0JCQkgICAgICAgICAgc3RhdHVzID09IFBDQVBfRVJST1JfUEVSTV9ERU5JRUQpICYmCi0JCQkgICAgICAgICAqY3AgIT0gJ1wwJykKLQkJCQllcnJvcigiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAotCQkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIGNwKTsKLQkJCWVsc2UKLQkJCQllcnJvcigiJXM6ICVzIiwgZGV2aWNlLAotCQkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cykpOwotCQl9IGVsc2UgaWYgKHN0YXR1cyA+IDApIHsKLQkJCS8qCi0JCQkgKiBwY2FwX2FjdGl2YXRlKCkgc3VjY2VlZGVkLCBidXQgaXQncyB3YXJuaW5nIHVzCi0JCQkgKiBvZiBhIHByb2JsZW0gaXQgaGFkLgotCQkJICovCi0JCQljcCA9IHBjYXBfZ2V0ZXJyKHBkKTsKLQkJCWlmIChzdGF0dXMgPT0gUENBUF9XQVJOSU5HKQotCQkJCXdhcm5pbmcoIiVzIiwgY3ApOwotCQkJZWxzZSBpZiAoc3RhdHVzID09IFBDQVBfV0FSTklOR19QUk9NSVNDX05PVFNVUCAmJgotCQkJICAgICAgICAgKmNwICE9ICdcMCcpCi0JCQkJd2FybmluZygiJXM6ICVzXG4oJXMpIiwgZGV2aWNlLAotCQkJCSAgICBwY2FwX3N0YXR1c3Rvc3RyKHN0YXR1cyksIGNwKTsKLQkJCWVsc2UKLQkJCQl3YXJuaW5nKCIlczogJXMiLCBkZXZpY2UsCi0JCQkJICAgIHBjYXBfc3RhdHVzdG9zdHIoc3RhdHVzKSk7Ci0JCX0KLSNpZmRlZiBIQVZFX1BDQVBfU0VURElSRUNUSU9OCi0JCWlmIChRZmxhZyAhPSAtMSkgewotCQkJc3RhdHVzID0gcGNhcF9zZXRkaXJlY3Rpb24ocGQsIFFmbGFnKTsKLQkJCWlmIChzdGF0dXMgIT0gMCkKLQkJCQllcnJvcigiJXM6IHBjYXBfc2V0ZGlyZWN0aW9uKCkgZmFpbGVkOiAlcyIsCi0JCQkJICAgICAgZGV2aWNlLCAgcGNhcF9nZXRlcnIocGQpKTsKLQkJfQotI2VuZGlmIC8qIEhBVkVfUENBUF9TRVRESVJFQ1RJT04gKi8KLSNlbHNlCi0JCSplYnVmID0gJ1wwJzsKLQkJcGQgPSBwY2FwX29wZW5fbGl2ZShkZXZpY2UsIHNuYXBsZW4sICFwZmxhZywgMTAwMCwgZWJ1Zik7Ci0JCWlmIChwZCA9PSBOVUxMKQotCQkJZXJyb3IoIiVzIiwgZWJ1Zik7Ci0JCWVsc2UgaWYgKCplYnVmKQotCQkJd2FybmluZygiJXMiLCBlYnVmKTsKLSNlbmRpZiAvKiBIQVZFX1BDQVBfQ1JFQVRFICovCiAJCS8qCiAJCSAqIExldCB1c2VyIG93biBwcm9jZXNzIGFmdGVyIHNvY2tldCBoYXMgYmVlbiBvcGVuZWQuCiAJCSAqLwotI2lmbmRlZiBXSU4zMgorI2lmbmRlZiBfV0lOMzIKIAkJaWYgKHNldGdpZChnZXRnaWQoKSkgIT0gMCB8fCBzZXR1aWQoZ2V0dWlkKCkpICE9IDApCiAJCQlmcHJpbnRmKHN0ZGVyciwgIldhcm5pbmc6IHNldGdpZC9zZXR1aWQgZmFpbGVkICFcbiIpOwotI2VuZGlmIC8qIFdJTjMyICovCi0jaWYgIWRlZmluZWQoSEFWRV9QQ0FQX0NSRUFURSkgJiYgZGVmaW5lZChXSU4zMikKKyNlbmRpZiAvKiBfV0lOMzIgKi8KKyNpZiAhZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSAmJiBkZWZpbmVkKF9XSU4zMikKIAkJaWYoQmZsYWcgIT0gMCkKIAkJCWlmKHBjYXBfc2V0YnVmZihwZCwgQmZsYWcpPT0tMSl7CiAJCQkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKIAkJCX0KLSNlbmRpZiAvKiAhZGVmaW5lZChIQVZFX1BDQVBfQ1JFQVRFKSAmJiBkZWZpbmVkKFdJTjMyKSAqLworI2VuZGlmIC8qICFkZWZpbmVkKEhBVkVfUENBUF9DUkVBVEUpICYmIGRlZmluZWQoX1dJTjMyKSAqLwogCQlpZiAoTGZsYWcpCi0JCQlzaG93X2RsdHNfYW5kX2V4aXQoZGV2aWNlLCBwZCk7Ci0JCWlmIChnbmRvLT5uZG9fZGx0ID49IDApIHsKKwkJCXNob3dfZGx0c19hbmRfZXhpdChwZCwgZGV2aWNlKTsKKwkJaWYgKHlmbGFnX2RsdCA+PSAwKSB7CiAjaWZkZWYgSEFWRV9QQ0FQX1NFVF9EQVRBTElOSwotCQkJaWYgKHBjYXBfc2V0X2RhdGFsaW5rKHBkLCBnbmRvLT5uZG9fZGx0KSA8IDApCisJCQlpZiAocGNhcF9zZXRfZGF0YWxpbmsocGQsIHlmbGFnX2RsdCkgPCAwKQogCQkJCWVycm9yKCIlcyIsIHBjYXBfZ2V0ZXJyKHBkKSk7CiAjZWxzZQogCQkJLyoKQEAgLTE3NDksMjEgKzE3NDEsMjEgQEAKIAkJCSAqIGRhdGEgbGluayB0eXBlLCBzbyB3ZSBvbmx5IGxldCB0aGVtCiAJCQkgKiBzZXQgaXQgdG8gd2hhdCBpdCBhbHJlYWR5IGlzLgogCQkJICovCi0JCQlpZiAoZ25kby0+bmRvX2RsdCAhPSBwY2FwX2RhdGFsaW5rKHBkKSkgeworCQkJaWYgKHlmbGFnX2RsdCAhPSBwY2FwX2RhdGFsaW5rKHBkKSkgewogCQkJCWVycm9yKCIlcyBpcyBub3Qgb25lIG9mIHRoZSBETFRzIHN1cHBvcnRlZCBieSB0aGlzIGRldmljZVxuIiwKLQkJCQkgICAgICBnbmRvLT5uZG9fZGx0bmFtZSk7CisJCQkJICAgICAgeWZsYWdfZGx0X25hbWUpOwogCQkJfQogI2VuZGlmCiAJCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBkYXRhIGxpbmsgdHlwZSAlc1xuIiwKLQkJCQkgICAgICBwcm9ncmFtX25hbWUsIGduZG8tPm5kb19kbHRuYW1lKTsKKwkJCQkgICAgICBwcm9ncmFtX25hbWUsIHlmbGFnX2RsdF9uYW1lKTsKIAkJCSh2b2lkKWZmbHVzaChzdGRlcnIpOwogCQl9CiAJCWkgPSBwY2FwX3NuYXBzaG90KHBkKTsKLQkJaWYgKHNuYXBsZW4gPCBpKSB7Ci0JCQl3YXJuaW5nKCJzbmFwbGVuIHJhaXNlZCBmcm9tICVkIHRvICVkIiwgc25hcGxlbiwgaSk7Ci0JCQlzbmFwbGVuID0gaTsKKwkJaWYgKG5kby0+bmRvX3NuYXBsZW4gPCBpKSB7CisJCQl3YXJuaW5nKCJzbmFwbGVuIHJhaXNlZCBmcm9tICVkIHRvICVkIiwgbmRvLT5uZG9fc25hcGxlbiwgaSk7CisJCQluZG8tPm5kb19zbmFwbGVuID0gaTsKIAkJfQotICAgICAgICAgICAgICAgIGlmKGZmbGFnICE9IDApIHsKKyAgICAgICAgICAgICAgICBpZihuZG8tPm5kb19mZmxhZyAhPSAwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGNhcF9sb29rdXBuZXQoZGV2aWNlLCAmbG9jYWxuZXQsICZuZXRtYXNrLCBlYnVmKSA8IDApIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2FybmluZygiZm9yZWlnbiAoLWYpIGZsYWcgdXNlZCBidXQ6ICVzIiwgZWJ1Zik7CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0xNzc1LDMyICsxNzY3LDM1IEBACiAJZWxzZQogCQljbWRidWYgPSBjb3B5X2FyZ3YoJmFyZ3Zbb3B0aW5kXSk7CiAKKyNpZmRlZiBIQVZFX1BDQVBfU0VUX09QVElNSVpFUl9ERUJVRworCXBjYXBfc2V0X29wdGltaXplcl9kZWJ1ZyhkZmxhZyk7CisjZW5kaWYKIAlpZiAocGNhcF9jb21waWxlKHBkLCAmZmNvZGUsIGNtZGJ1ZiwgT2ZsYWcsIG5ldG1hc2spIDwgMCkKIAkJZXJyb3IoIiVzIiwgcGNhcF9nZXRlcnIocGQpKTsKIAlpZiAoZGZsYWcpIHsKIAkJYnBmX2R1bXAoJmZjb2RlLCBkZmxhZyk7CiAJCXBjYXBfY2xvc2UocGQpOwogCQlmcmVlKGNtZGJ1Zik7Ci0JCWV4aXQoMCk7CisJCXBjYXBfZnJlZWNvZGUoJmZjb2RlKTsKKwkJZXhpdF90Y3BkdW1wKDApOwogCX0KLQlpbml0X2FkZHJ0b25hbWUoZ25kbywgbG9jYWxuZXQsIG5ldG1hc2spOwotICAgICAgICBpbml0X2NoZWNrc3VtKCk7CisJaW5pdF9wcmludChuZG8sIGxvY2FsbmV0LCBuZXRtYXNrLCB0aW1lem9uZV9vZmZzZXQpOwogCi0jaWZuZGVmIFdJTjMyCisjaWZuZGVmIF9XSU4zMgogCSh2b2lkKXNldHNpZ25hbChTSUdQSVBFLCBjbGVhbnVwKTsKIAkodm9pZClzZXRzaWduYWwoU0lHVEVSTSwgY2xlYW51cCk7CiAJKHZvaWQpc2V0c2lnbmFsKFNJR0lOVCwgY2xlYW51cCk7Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBfV0lOMzIgKi8KICNpZiBkZWZpbmVkKEhBVkVfRk9SSykgfHwgZGVmaW5lZChIQVZFX1ZGT1JLKQogCSh2b2lkKXNldHNpZ25hbChTSUdDSExELCBjaGlsZF9jbGVhbnVwKTsKICNlbmRpZgogCS8qIENvb3BlcmF0ZSB3aXRoIG5vaHVwKDEpICovCi0jaWZuZGVmIFdJTjMyCisjaWZuZGVmIF9XSU4zMgogCWlmICgob2xkaGFuZGxlciA9IHNldHNpZ25hbChTSUdIVVAsIGNsZWFudXApKSAhPSBTSUdfREZMKQogCQkodm9pZClzZXRzaWduYWwoU0lHSFVQLCBvbGRoYW5kbGVyKTsKLSNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIF9XSU4zMiAqLwogCi0jaWZuZGVmIFdJTjMyCisjaWZuZGVmIF9XSU4zMgogCS8qCiAJICogSWYgYSB1c2VyIG5hbWUgd2FzIHNwZWNpZmllZCB3aXRoICItWiIsIGF0dGVtcHQgdG8gc3dpdGNoIHRvCiAJICogdGhhdCB1c2VyJ3MgVUlELiAgVGhpcyB3b3VsZCBwcm9iYWJseSBiZSB1c2VkIHdpdGggc3VkbywKQEAgLTE4MzEsNiArMTgyNiwxMyBAQAogCQkJCUNBUF9TRVRHSUQsCiAJCQkJLTEpOwogCQl9CisJCWlmIChjaHJvb3RfZGlyKSB7CisJCQljYXBuZ191cGRhdGUoCisJCQkJQ0FQTkdfQURELAorCQkJCUNBUE5HX1BFUk1JVFRFRCB8IENBUE5HX0VGRkVDVElWRSwKKwkJCQlDQVBfU1lTX0NIUk9PVAorCQkJCSk7CisJCX0KIAogCQlpZiAoV0ZpbGVOYW1lKSB7CiAJCQljYXBuZ191cGRhdGUoCkBAIC0xODQ1LDEzICsxODQ3LDEzIEBACiAJCQlkcm9wcm9vdCh1c2VybmFtZSwgY2hyb290X2Rpcik7CiAKIAl9Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBfV0lOMzIgKi8KIAogCWlmIChwY2FwX3NldGZpbHRlcihwZCwgJmZjb2RlKSA8IDApCiAJCWVycm9yKCIlcyIsIHBjYXBfZ2V0ZXJyKHBkKSk7CiAjaWZkZWYgSEFWRV9DQVBTSUNVTQogCWlmIChSRmlsZU5hbWUgPT0gTlVMTCAmJiBWRmlsZU5hbWUgPT0gTlVMTCkgewotCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgbG9uZyBjbWRzW10gPSB7IEJJT0NHU1RBVFMgfTsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIGxvbmcgY21kc1tdID0geyBCSU9DR1NUQVRTLCBCSU9DUk9UWkJVRiB9OwogCiAJCWNhcF9yaWdodHNfaW5pdCgmcmlnaHRzLCBDQVBfSU9DVEwsIENBUF9SRUFEKTsKIAkJaWYgKGNhcF9yaWdodHNfbGltaXQocGNhcF9maWxlbm8ocGQpLCAmcmlnaHRzKSA8IDAgJiYKQEAgLTE5MDAsNiArMTkwMiwxMCBAQAogCQlpZiAoQ2ZsYWcgIT0gMCB8fCBHZmxhZyAhPSAwKSB7CiAjaWZkZWYgSEFWRV9DQVBTSUNVTQogCQkJZHVtcGluZm8uV0ZpbGVOYW1lID0gc3RyZHVwKGJhc2VuYW1lKFdGaWxlTmFtZSkpOworCQkJaWYgKGR1bXBpbmZvLldGaWxlTmFtZSA9PSBOVUxMKSB7CisJCQkJZXJyb3IoIlVuYWJsZSB0byBhbGxvY2F0ZSBtZW1vcnkgZm9yIGZpbGUgJXMiLAorCQkJCSAgICBXRmlsZU5hbWUpOworCQkJfQogCQkJZHVtcGluZm8uZGlyZmQgPSBvcGVuKGRpcm5hbWUoV0ZpbGVOYW1lKSwKIAkJCSAgICBPX0RJUkVDVE9SWSB8IE9fUkRPTkxZKTsKIAkJCWlmIChkdW1waW5mby5kaXJmZCA8IDApIHsKQEAgLTE5MzIsMTAgKzE5MzgsMTAgQEAKIAkJCXBjYXBfZHVtcF9mbHVzaChwKTsKICNlbmRpZgogCX0gZWxzZSB7Ci0JCXR5cGUgPSBwY2FwX2RhdGFsaW5rKHBkKTsKLQkJcHJpbnRpbmZvID0gZ2V0X3ByaW50X2luZm8odHlwZSk7CisJCWRsdCA9IHBjYXBfZGF0YWxpbmsocGQpOworCQluZG8tPm5kb19pZl9wcmludGVyID0gZ2V0X2lmX3ByaW50ZXIobmRvLCBkbHQpOwogCQljYWxsYmFjayA9IHByaW50X3BhY2tldDsKLQkJcGNhcF91c2VyZGF0YSA9ICh1X2NoYXIgKikmcHJpbnRpbmZvOworCQlwY2FwX3VzZXJkYXRhID0gKHVfY2hhciAqKW5kbzsKIAl9CiAKICNpZmRlZiBTSUdOQUxfUkVRX0lORk8KQEAgLTE5NDcsMTAgKzE5NTMsMTAgQEAKIAkJKHZvaWQpc2V0c2lnbmFsKFNJR05BTF9SRVFfSU5GTywgcmVxdWVzdGluZm8pOwogI2VuZGlmCiAKLQlpZiAodmZsYWcgPiAwICYmIFdGaWxlTmFtZSkgeworCWlmIChuZG8tPm5kb192ZmxhZyA+IDAgJiYgV0ZpbGVOYW1lKSB7CiAJCS8qCiAJCSAqIFdoZW4gY2FwdHVyaW5nIHRvIGEgZmlsZSwgIi12IiBtZWFucyB0Y3BkdW1wIHNob3VsZCwKLQkJICogZXZlcnkgMTAgc2Vjb2RucywgInYiZXJib3NlbHkgcmVwb3J0IHRoZSBudW1iZXIgb2YKKwkJICogZXZlcnkgMTAgc2Vjb25kcywgInYiZXJib3NlbHkgcmVwb3J0IHRoZSBudW1iZXIgb2YKIAkJICogcGFja2V0cyBjYXB0dXJlZC4KIAkJICovCiAjaWZkZWYgVVNFX1dJTjMyX01NX1RJTUVSCkBAIC0xOTYzLDE0ICsxOTY5LDEzIEBACiAjZW5kaWYKIAl9CiAKLSNpZm5kZWYgV0lOMzIKIAlpZiAoUkZpbGVOYW1lID09IE5VTEwpIHsKIAkJLyoKIAkJICogTGl2ZSBjYXB0dXJlIChpZiAtViB3YXMgc3BlY2lmaWVkLCB3ZSBzZXQgUkZpbGVOYW1lCiAJCSAqIHRvIGEgZmlsZSBmcm9tIHRoZSAtViBmaWxlKS4gIFByaW50IGEgbWVzc2FnZSB0bwogCQkgKiB0aGUgc3RhbmRhcmQgZXJyb3Igb24gVU4qWC4KIAkJICovCi0JCWlmICghdmZsYWcgJiYgIVdGaWxlTmFtZSkgeworCQlpZiAoIW5kby0+bmRvX3ZmbGFnICYmICFXRmlsZU5hbWUpIHsKIAkJCSh2b2lkKWZwcmludGYoc3RkZXJyLAogCQkJICAgICIlczogdmVyYm9zZSBvdXRwdXQgc3VwcHJlc3NlZCwgdXNlIC12IG9yIC12diBmb3IgZnVsbCBwcm90b2NvbCBkZWNvZGVcbiIsCiAJCQkgICAgcHJvZ3JhbV9uYW1lKTsKQEAgLTE5ODAsMjIgKzE5ODUsMTkgQEAKIAkJZGx0X25hbWUgPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCk7CiAJCWlmIChkbHRfbmFtZSA9PSBOVUxMKSB7CiAJCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgImxpc3RlbmluZyBvbiAlcywgbGluay10eXBlICV1LCBjYXB0dXJlIHNpemUgJXUgYnl0ZXNcbiIsCi0JCQkgICAgZGV2aWNlLCBkbHQsIHNuYXBsZW4pOworCQkJICAgIGRldmljZSwgZGx0LCBuZG8tPm5kb19zbmFwbGVuKTsKIAkJfSBlbHNlIHsKIAkJCSh2b2lkKWZwcmludGYoc3RkZXJyLCAibGlzdGVuaW5nIG9uICVzLCBsaW5rLXR5cGUgJXMgKCVzKSwgY2FwdHVyZSBzaXplICV1IGJ5dGVzXG4iLAogCQkJICAgIGRldmljZSwgZGx0X25hbWUsCi0JCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oZGx0KSwgc25hcGxlbik7CisJCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oZGx0KSwgbmRvLT5uZG9fc25hcGxlbik7CiAJCX0KIAkJKHZvaWQpZmZsdXNoKHN0ZGVycik7CiAJfQotI2VuZGlmIC8qIFdJTjMyICovCiAKICNpZmRlZiBIQVZFX0NBUFNJQ1VNCi0JY2Fuc2FuZGJveCA9IChuZmxhZyAmJiBWRmlsZU5hbWUgPT0gTlVMTCAmJiB6ZmxhZyA9PSBOVUxMKTsKKwljYW5zYW5kYm94ID0gKG5kby0+bmRvX25mbGFnICYmIFZGaWxlTmFtZSA9PSBOVUxMICYmIHpmbGFnID09IE5VTEwpOwogCWlmIChjYW5zYW5kYm94ICYmIGNhcF9lbnRlcigpIDwgMCAmJiBlcnJubyAhPSBFTk9TWVMpCiAJCWVycm9yKCJ1bmFibGUgdG8gZW50ZXIgdGhlIGNhcGFiaWxpdHkgbW9kZSIpOwotCWlmIChjYXBfc2FuZGJveGVkKCkpCi0JCWZwcmludGYoc3RkZXJyLCAiY2FwYWJpbGl0eSBtb2RlIHNhbmRib3ggZW5hYmxlZFxuIik7CiAjZW5kaWYJLyogSEFWRV9DQVBTSUNVTSAqLwogCiAJZG8gewpAQCAtMjA0MSw2ICsyMDQzLDggQEAKIAkJaWYgKFZGaWxlTmFtZSAhPSBOVUxMKSB7CiAJCQlyZXQgPSBnZXRfbmV4dF9maWxlKFZGaWxlLCBWRmlsZUxpbmUpOwogCQkJaWYgKHJldCkgeworCQkJCWludCBuZXdfZGx0OworCiAJCQkJUkZpbGVOYW1lID0gVkZpbGVMaW5lOwogCQkJCXBkID0gcGNhcF9vcGVuX29mZmxpbmUoUkZpbGVOYW1lLCBlYnVmKTsKIAkJCQlpZiAocGQgPT0gTlVMTCkKQEAgLTIwNTMsMzAgKzIwNTcsNjcgQEAKIAkJCQl9CiAjZW5kaWYKIAkJCQluZXdfZGx0ID0gcGNhcF9kYXRhbGluayhwZCk7Ci0JCQkJaWYgKFdGaWxlTmFtZSAmJiBuZXdfZGx0ICE9IGRsdCkKLQkJCQkJZXJyb3IoIiVzOiBuZXcgZGx0IGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIiwgUkZpbGVOYW1lKTsKLQkJCQlwcmludGluZm8gPSBnZXRfcHJpbnRfaW5mbyhuZXdfZGx0KTsKLQkJCQlkbHRfbmFtZSA9IHBjYXBfZGF0YWxpbmtfdmFsX3RvX25hbWUobmV3X2RsdCk7CisJCQkJaWYgKG5ld19kbHQgIT0gZGx0KSB7CisJCQkJCS8qCisJCQkJCSAqIFRoZSBuZXcgZmlsZSBoYXMgYSBkaWZmZXJlbnQKKwkJCQkJICogbGluay1sYXllciBoZWFkZXIgdHlwZSBmcm9tIHRoZQorCQkJCQkgKiBwcmV2aW91cyBvbmUuCisJCQkJCSAqLworCQkJCQlpZiAoV0ZpbGVOYW1lICE9IE5VTEwpIHsKKwkJCQkJCS8qCisJCQkJCQkgKiBXZSdyZSB3cml0aW5nIHJhdyBwYWNrZXRzCisJCQkJCQkgKiB0aGF0IG1hdGNoIHRoZSBmaWx0ZXIgdG8KKwkJCQkJCSAqIGEgcGNhcCBmaWxlLiAgcGNhcCBmaWxlcworCQkJCQkJICogZG9uJ3Qgc3VwcG9ydCBtdWx0aXBsZQorCQkJCQkJICogZGlmZmVyZW50IGxpbmstbGF5ZXIKKwkJCQkJCSAqIGhlYWRlciB0eXBlcywgc28gd2UgZmFpbAorCQkJCQkJICogaGVyZS4KKwkJCQkJCSAqLworCQkJCQkJZXJyb3IoIiVzOiBuZXcgZGx0IGRvZXMgbm90IG1hdGNoIG9yaWdpbmFsIiwgUkZpbGVOYW1lKTsKKwkJCQkJfQorCisJCQkJCS8qCisJCQkJCSAqIFdlJ3JlIHByaW50aW5nIHRoZSBkZWNvZGVkIHBhY2tldHM7CisJCQkJCSAqIHN3aXRjaCB0byB0aGUgbmV3IERMVC4KKwkJCQkJICoKKwkJCQkJICogVG8gZG8gdGhhdCwgd2UgbmVlZCB0byBjaGFuZ2UKKwkJCQkJICogdGhlIHByaW50ZXIsIGNoYW5nZSB0aGUgRExUIG5hbWUsCisJCQkJCSAqIGFuZCByZWNvbXBpbGUgdGhlIGZpbHRlciB3aXRoCisJCQkJCSAqIHRoZSBuZXcgRExULgorCQkJCQkgKi8KKwkJCQkJZGx0ID0gbmV3X2RsdDsKKwkJCQkJbmRvLT5uZG9faWZfcHJpbnRlciA9IGdldF9pZl9wcmludGVyKG5kbywgZGx0KTsKKwkJCQkJaWYgKHBjYXBfY29tcGlsZShwZCwgJmZjb2RlLCBjbWRidWYsIE9mbGFnLCBuZXRtYXNrKSA8IDApCisJCQkJCQllcnJvcigiJXMiLCBwY2FwX2dldGVycihwZCkpOworCQkJCX0KKworCQkJCS8qCisJCQkJICogU2V0IHRoZSBmaWx0ZXIgb24gdGhlIG5ldyBmaWxlLgorCQkJCSAqLworCQkJCWlmIChwY2FwX3NldGZpbHRlcihwZCwgJmZjb2RlKSA8IDApCisJCQkJCWVycm9yKCIlcyIsIHBjYXBfZ2V0ZXJyKHBkKSk7CisKKwkJCQkvKgorCQkJCSAqIFJlcG9ydCB0aGUgbmV3IGZpbGUuCisJCQkJICovCisJCQkJZGx0X25hbWUgPSBwY2FwX2RhdGFsaW5rX3ZhbF90b19uYW1lKGRsdCk7CiAJCQkJaWYgKGRsdF9uYW1lID09IE5VTEwpIHsKIAkJCQkJZnByaW50ZihzdGRlcnIsICJyZWFkaW5nIGZyb20gZmlsZSAlcywgbGluay10eXBlICV1XG4iLAotCQkJCQlSRmlsZU5hbWUsIG5ld19kbHQpOworCQkJCQkgICAgUkZpbGVOYW1lLCBkbHQpOwogCQkJCX0gZWxzZSB7CiAJCQkJCWZwcmludGYoc3RkZXJyLAogCQkJCQkicmVhZGluZyBmcm9tIGZpbGUgJXMsIGxpbmstdHlwZSAlcyAoJXMpXG4iLAotCQkJCQlSRmlsZU5hbWUsIGRsdF9uYW1lLAotCQkJCQlwY2FwX2RhdGFsaW5rX3ZhbF90b19kZXNjcmlwdGlvbihuZXdfZGx0KSk7CisJCQkJCSAgICBSRmlsZU5hbWUsIGRsdF9uYW1lLAorCQkJCQkgICAgcGNhcF9kYXRhbGlua192YWxfdG9fZGVzY3JpcHRpb24oZGx0KSk7CiAJCQkJfQotCQkJCWlmIChwY2FwX2NvbXBpbGUocGQsICZmY29kZSwgY21kYnVmLCBPZmxhZywgbmV0bWFzaykgPCAwKQotCQkJCQllcnJvcigiJXMiLCBwY2FwX2dldGVycihwZCkpOwotCQkJCWlmIChwY2FwX3NldGZpbHRlcihwZCwgJmZjb2RlKSA8IDApCi0JCQkJCWVycm9yKCIlcyIsIHBjYXBfZ2V0ZXJyKHBkKSk7CiAJCQl9CiAJCX0KIAl9CiAJd2hpbGUgKHJldCAhPSBOVUxMKTsKIAogCWZyZWUoY21kYnVmKTsKLQlleGl0KHN0YXR1cyA9PSAtMSA/IDEgOiAwKTsKKwlwY2FwX2ZyZWVjb2RlKCZmY29kZSk7CisJZXhpdF90Y3BkdW1wKHN0YXR1cyA9PSAtMSA/IDEgOiAwKTsKIH0KIAogLyogbWFrZSBhIGNsZWFuIGV4aXQgb24gaW50ZXJydXB0cyAqLwpAQCAtMjExNiw3ICsyMTU3LDcgQEAKIAkJKHZvaWQpZmZsdXNoKHN0ZG91dCk7CiAJCWluZm8oMSk7CiAJfQotCWV4aXQoMCk7CisJZXhpdF90Y3BkdW1wKDApOwogI2VuZGlmCiB9CiAKQEAgLTIxMzUsMTQgKzIxNzYsMTQgQEAKIHN0YXRpYyB2b2lkCiBpbmZvKHJlZ2lzdGVyIGludCB2ZXJib3NlKQogewotCXN0cnVjdCBwY2FwX3N0YXQgc3RhdDsKKwlzdHJ1Y3QgcGNhcF9zdGF0IHN0YXRzOwogCiAJLyoKIAkgKiBPbGRlciB2ZXJzaW9ucyBvZiBsaWJwY2FwIGRpZG4ndCBzZXQgcHNfaWZkcm9wIG9uIHNvbWUKIAkgKiBwbGF0Zm9ybXM7IGluaXRpYWxpemUgaXQgdG8gMCB0byBoYW5kbGUgdGhhdC4KIAkgKi8KLQlzdGF0LnBzX2lmZHJvcCA9IDA7Ci0JaWYgKHBjYXBfc3RhdHMocGQsICZzdGF0KSA8IDApIHsKKwlzdGF0cy5wc19pZmRyb3AgPSAwOworCWlmIChwY2FwX3N0YXRzKHBkLCAmc3RhdHMpIDwgMCkgewogCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgInBjYXBfc3RhdHM6ICVzXG4iLCBwY2FwX2dldGVycihwZCkpOwogCQlpbmZvcHJpbnQgPSAwOwogCQlyZXR1cm47CkBAIC0yMTU3LDM4ICsyMTk4LDUyIEBACiAJCWZwdXRzKCIsICIsIHN0ZGVycik7CiAJZWxzZQogCQlwdXRjKCdcbicsIHN0ZGVycik7Ci0JKHZvaWQpZnByaW50ZihzdGRlcnIsICIldSBwYWNrZXQlcyByZWNlaXZlZCBieSBmaWx0ZXIiLCBzdGF0LnBzX3JlY3YsCi0JICAgIFBMVVJBTF9TVUZGSVgoc3RhdC5wc19yZWN2KSk7CisJKHZvaWQpZnByaW50ZihzdGRlcnIsICIldSBwYWNrZXQlcyByZWNlaXZlZCBieSBmaWx0ZXIiLCBzdGF0cy5wc19yZWN2LAorCSAgICBQTFVSQUxfU1VGRklYKHN0YXRzLnBzX3JlY3YpKTsKIAlpZiAoIXZlcmJvc2UpCiAJCWZwdXRzKCIsICIsIHN0ZGVycik7CiAJZWxzZQogCQlwdXRjKCdcbicsIHN0ZGVycik7Ci0JKHZvaWQpZnByaW50ZihzdGRlcnIsICIldSBwYWNrZXQlcyBkcm9wcGVkIGJ5IGtlcm5lbCIsIHN0YXQucHNfZHJvcCwKLQkgICAgUExVUkFMX1NVRkZJWChzdGF0LnBzX2Ryb3ApKTsKLQlpZiAoc3RhdC5wc19pZmRyb3AgIT0gMCkgeworCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXUgcGFja2V0JXMgZHJvcHBlZCBieSBrZXJuZWwiLCBzdGF0cy5wc19kcm9wLAorCSAgICBQTFVSQUxfU1VGRklYKHN0YXRzLnBzX2Ryb3ApKTsKKwlpZiAoc3RhdHMucHNfaWZkcm9wICE9IDApIHsKIAkJaWYgKCF2ZXJib3NlKQogCQkJZnB1dHMoIiwgIiwgc3RkZXJyKTsKIAkJZWxzZQogCQkJcHV0YygnXG4nLCBzdGRlcnIpOwogCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiV1IHBhY2tldCVzIGRyb3BwZWQgYnkgaW50ZXJmYWNlXG4iLAotCQkgICAgc3RhdC5wc19pZmRyb3AsIFBMVVJBTF9TVUZGSVgoc3RhdC5wc19pZmRyb3ApKTsKKwkJICAgIHN0YXRzLnBzX2lmZHJvcCwgUExVUkFMX1NVRkZJWChzdGF0cy5wc19pZmRyb3ApKTsKIAl9IGVsc2UKIAkJcHV0YygnXG4nLCBzdGRlcnIpOwogCWluZm9wcmludCA9IDA7CiB9CiAKICNpZiBkZWZpbmVkKEhBVkVfRk9SSykgfHwgZGVmaW5lZChIQVZFX1ZGT1JLKQorI2lmZGVmIEhBVkVfRk9SSworI2RlZmluZSBmb3JrX3N1YnByb2Nlc3MoKSBmb3JrKCkKKyNlbHNlCisjZGVmaW5lIGZvcmtfc3VicHJvY2VzcygpIHZmb3JrKCkKKyNlbmRpZgogc3RhdGljIHZvaWQKIGNvbXByZXNzX3NhdmVmaWxlKGNvbnN0IGNoYXIgKmZpbGVuYW1lKQogewotIyBpZmRlZiBIQVZFX0ZPUksKLQlpZiAoZm9yaygpKQotIyBlbHNlCi0JaWYgKHZmb3JrKCkpCi0jIGVuZGlmCisJcGlkX3QgY2hpbGQ7CisKKwljaGlsZCA9IGZvcmtfc3VicHJvY2VzcygpOworCWlmIChjaGlsZCA9PSAtMSkgeworCQlmcHJpbnRmKHN0ZGVyciwKKwkJCSJjb21wcmVzc19zYXZlZmlsZTogZm9yayBmYWlsZWQ6ICVzXG4iLAorCQkJcGNhcF9zdHJlcnJvcihlcnJubykpOwogCQlyZXR1cm47CisJfQorCWlmIChjaGlsZCAhPSAwKSB7CisJCS8qIFBhcmVudCBwcm9jZXNzLiAqLworCQlyZXR1cm47CisJfQorCiAJLyoKLQkgKiBTZXQgdG8gbG93ZXN0IHByaW9yaXR5IHNvIHRoYXQgdGhpcyBkb2Vzbid0IGRpc3R1cmIgdGhlIGNhcHR1cmUKKwkgKiBDaGlsZCBwcm9jZXNzLgorCSAqIFNldCB0byBsb3dlc3QgcHJpb3JpdHkgc28gdGhhdCB0aGlzIGRvZXNuJ3QgZGlzdHVyYiB0aGUgY2FwdHVyZS4KIAkgKi8KICNpZmRlZiBOWkVSTwogCXNldHByaW9yaXR5KFBSSU9fUFJPQ0VTUywgMCwgTlpFUk8gLSAxKTsKQEAgLTIxOTcsMTUgKzIyNTIsMTUgQEAKICNlbmRpZgogCWlmIChleGVjbHAoemZsYWcsIHpmbGFnLCBmaWxlbmFtZSwgKGNoYXIgKilOVUxMKSA9PSAtMSkKIAkJZnByaW50ZihzdGRlcnIsCi0JCQkiY29tcHJlc3Nfc2F2ZWZpbGU6ZXhlY2xwKCVzLCAlcyk6ICVzXG4iLAorCQkJImNvbXByZXNzX3NhdmVmaWxlOiBleGVjbHAoJXMsICVzKSBmYWlsZWQ6ICVzXG4iLAogCQkJemZsYWcsCiAJCQlmaWxlbmFtZSwKLQkJCXN0cmVycm9yKGVycm5vKSk7Ci0jIGlmZGVmIEhBVkVfRk9SSworCQkJcGNhcF9zdHJlcnJvcihlcnJubykpOworI2lmZGVmIEhBVkVfRk9SSwogCWV4aXQoMSk7Ci0jIGVsc2UKKyNlbHNlCiAJX2V4aXQoMSk7Ci0jIGVuZGlmCisjZW5kaWYKIH0KICNlbHNlICAvKiBIQVZFX0ZPUksgJiYgSEFWRV9WRk9SSyAqLwogc3RhdGljIHZvaWQKQEAgLTIyNzUsNyArMjMzMCw4IEBACiAJCQlpZiAoQ2ZsYWcgPT0gMCAmJiBXZmxhZyA+IDAgJiYgR2ZsYWdfY291bnQgPj0gV2ZsYWcpIHsKIAkJCQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIk1heGltdW0gZmlsZSBsaW1pdCByZWFjaGVkOiAlZFxuIiwKIAkJCQkgICAgV2ZsYWcpOwotCQkJCWV4aXQoMCk7CisJCQkJaW5mbygxKTsKKwkJCQlleGl0X3RjcGR1bXAoMCk7CiAJCQkJLyogTk9UUkVBQ0hFRCAqLwogCQkJfQogCQkJaWYgKGR1bXBfaW5mby0+Q3VycmVudEZpbGVOYW1lICE9IE5VTEwpCkBAIC0yNDM4LDEwNyArMjQ5NCwxOCBAQAogc3RhdGljIHZvaWQKIHByaW50X3BhY2tldCh1X2NoYXIgKnVzZXIsIGNvbnN0IHN0cnVjdCBwY2FwX3BrdGhkciAqaCwgY29uc3QgdV9jaGFyICpzcCkKIHsKLQlzdHJ1Y3QgcHJpbnRfaW5mbyAqcHJpbnRfaW5mbzsKLQl1X2ludCBoZHJsZW47Ci0gICAgICAgIG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvOwotCiAJKytwYWNrZXRzX2NhcHR1cmVkOwogCiAJKytpbmZvZGVsYXk7CiAKLQlwcmludF9pbmZvID0gKHN0cnVjdCBwcmludF9pbmZvICopdXNlcjsKLSAgICAgICAgbmRvID0gcHJpbnRfaW5mby0+bmRvOwotCi0JaWYobmRvLT5uZG9fcGFja2V0X251bWJlcikKLQkJTkRfUFJJTlQoKG5kbywgIiU1dSAgIiwgcGFja2V0c19jYXB0dXJlZCkpOwotCi0JdHNfcHJpbnQobmRvLCAmaC0+dHMpOwotCi0JLyoKLQkgKiBTb21lIHByaW50ZXJzIHdhbnQgdG8gY2hlY2sgdGhhdCB0aGV5J3JlIG5vdCB3YWxraW5nIG9mZiB0aGUKLQkgKiBlbmQgb2YgdGhlIHBhY2tldC4KLQkgKiBSYXRoZXIgdGhhbiBwYXNzIGl0IGFsbCB0aGUgd2F5IGRvd24sIHdlIHNldCB0aGlzIG1lbWJlcgotCSAqIG9mIHRoZSBuZXRkaXNzZWN0X29wdGlvbnMgc3RydWN0dXJlLgotCSAqLwotCW5kby0+bmRvX3NuYXBlbmQgPSBzcCArIGgtPmNhcGxlbjsKLQotICAgICAgICBpZihwcmludF9pbmZvLT5uZG9fdHlwZSkgewotICAgICAgICAgICAgICAgIGhkcmxlbiA9ICgqcHJpbnRfaW5mby0+cC5uZG9fcHJpbnRlcikocHJpbnRfaW5mby0+bmRvLCBoLCBzcCk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgaGRybGVuID0gKCpwcmludF9pbmZvLT5wLnByaW50ZXIpKGgsIHNwKTsKLSAgICAgICAgfQotCi0JLyoKLQkgKiBSZXN0b3JlIHRoZSBvcmlnaW5hbCBzbmFwZW5kLCBhcyBhIHByaW50ZXIgbWlnaHQgaGF2ZQotCSAqIGNoYW5nZWQgaXQuCi0JICovCi0JbmRvLT5uZG9fc25hcGVuZCA9IHNwICsgaC0+Y2FwbGVuOwotCWlmIChuZG8tPm5kb19YZmxhZykgewotCQkvKgotCQkgKiBQcmludCB0aGUgcmF3IHBhY2tldCBkYXRhIGluIGhleCBhbmQgQVNDSUkuCi0JCSAqLwotCQlpZiAobmRvLT5uZG9fWGZsYWcgPiAxKSB7Ci0JCQkvKgotCQkJICogSW5jbHVkZSB0aGUgbGluay1sYXllciBoZWFkZXIuCi0JCQkgKi8KLQkJCWhleF9hbmRfYXNjaWlfcHJpbnQobmRvLCAiXG5cdCIsIHNwLCBoLT5jYXBsZW4pOwotCQl9IGVsc2UgewotCQkJLyoKLQkJCSAqIERvbid0IGluY2x1ZGUgdGhlIGxpbmstbGF5ZXIgaGVhZGVyIC0gYW5kIGlmCi0JCQkgKiB3ZSBoYXZlIG5vdGhpbmcgcGFzdCB0aGUgbGluay1sYXllciBoZWFkZXIsCi0JCQkgKiBwcmludCBub3RoaW5nLgotCQkJICovCi0JCQlpZiAoaC0+Y2FwbGVuID4gaGRybGVuKQotCQkJCWhleF9hbmRfYXNjaWlfcHJpbnQobmRvLCAiXG5cdCIsIHNwICsgaGRybGVuLAotCQkJCSAgICBoLT5jYXBsZW4gLSBoZHJsZW4pOwotCQl9Ci0JfSBlbHNlIGlmIChuZG8tPm5kb194ZmxhZykgewotCQkvKgotCQkgKiBQcmludCB0aGUgcmF3IHBhY2tldCBkYXRhIGluIGhleC4KLQkJICovCi0JCWlmIChuZG8tPm5kb194ZmxhZyA+IDEpIHsKLQkJCS8qCi0JCQkgKiBJbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KLQkJCSAqLwotICAgICAgICAgICAgICAgICAgICAgICAgaGV4X3ByaW50KG5kbywgIlxuXHQiLCBzcCwgaC0+Y2FwbGVuKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBEb24ndCBpbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlciAtIGFuZCBpZgotCQkJICogd2UgaGF2ZSBub3RoaW5nIHBhc3QgdGhlIGxpbmstbGF5ZXIgaGVhZGVyLAotCQkJICogcHJpbnQgbm90aGluZy4KLQkJCSAqLwotCQkJaWYgKGgtPmNhcGxlbiA+IGhkcmxlbikKLQkJCQloZXhfcHJpbnQobmRvLCAiXG5cdCIsIHNwICsgaGRybGVuLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaC0+Y2FwbGVuIC0gaGRybGVuKTsKLQkJfQotCX0gZWxzZSBpZiAobmRvLT5uZG9fQWZsYWcpIHsKLQkJLyoKLQkJICogUHJpbnQgdGhlIHJhdyBwYWNrZXQgZGF0YSBpbiBBU0NJSS4KLQkJICovCi0JCWlmIChuZG8tPm5kb19BZmxhZyA+IDEpIHsKLQkJCS8qCi0JCQkgKiBJbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlci4KLQkJCSAqLwotCQkJYXNjaWlfcHJpbnQobmRvLCBzcCwgaC0+Y2FwbGVuKTsKLQkJfSBlbHNlIHsKLQkJCS8qCi0JCQkgKiBEb24ndCBpbmNsdWRlIHRoZSBsaW5rLWxheWVyIGhlYWRlciAtIGFuZCBpZgotCQkJICogd2UgaGF2ZSBub3RoaW5nIHBhc3QgdGhlIGxpbmstbGF5ZXIgaGVhZGVyLAotCQkJICogcHJpbnQgbm90aGluZy4KLQkJCSAqLwotCQkJaWYgKGgtPmNhcGxlbiA+IGhkcmxlbikKLQkJCQlhc2NpaV9wcmludChuZG8sIHNwICsgaGRybGVuLCBoLT5jYXBsZW4gLSBoZHJsZW4pOwotCQl9Ci0JfQotCi0JcHV0Y2hhcignXG4nKTsKKwlwcmV0dHlfcHJpbnRfcGFja2V0KChuZXRkaXNzZWN0X29wdGlvbnMgKil1c2VyLCBoLCBzcCwgcGFja2V0c19jYXB0dXJlZCk7CiAKIAktLWluZm9kZWxheTsKIAlpZiAoaW5mb3ByaW50KQogCQlpbmZvKDApOwogfQogCi0jaWZkZWYgV0lOMzIKKyNpZmRlZiBfV0lOMzIKIAkvKgogCSAqIFhYWCAtIHRoZXJlIHNob3VsZCByZWFsbHkgYmUgbGlicGNhcCBjYWxscyB0byBnZXQgdGhlIHZlcnNpb24KIAkgKiBudW1iZXIgYXMgYSBzdHJpbmcgKHRoZSBzdHJpbmcgd291bGQgYmUgZ2VuZXJhdGVkIGZyb20gI2RlZmluZXMKQEAgLTI1NjUsMjEgKzI1MzIsNiBAQAogCWNoYXIgV3BjYXBfdmVyc2lvbltdPSIzLjEiOwogI2VuZGlmCiAKLS8qCi0gKiBCeSBkZWZhdWx0LCBwcmludCB0aGUgc3BlY2lmaWVkIGRhdGEgb3V0IGluIGhleCBhbmQgQVNDSUkuCi0gKi8KLXN0YXRpYyB2b2lkCi1uZG9fZGVmYXVsdF9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywgY29uc3QgdV9jaGFyICpicCwgdV9pbnQgbGVuZ3RoKQotewotCWhleF9hbmRfYXNjaWlfcHJpbnQobmRvLCAiXG5cdCIsIGJwLCBsZW5ndGgpOyAvKiBwYXNzIG9uIGxmIGFuZCBpbmRlbnRhdGlvbiBzdHJpbmcgKi8KLX0KLQotdm9pZAotZGVmYXVsdF9wcmludChjb25zdCB1X2NoYXIgKmJwLCB1X2ludCBsZW5ndGgpCi17Ci0JbmRvX2RlZmF1bHRfcHJpbnQoZ25kbywgYnAsIGxlbmd0aCk7Ci19Ci0KICNpZmRlZiBTSUdOQUxfUkVRX0lORk8KIFJFVFNJR1RZUEUgcmVxdWVzdGluZm8oaW50IHNpZ25vIF9VXykKIHsKQEAgLTI1OTcsMTcgKzI1NDksMTMgQEAKIHZvaWQgQ0FMTEJBQ0sgdmVyYm9zZV9zdGF0c19kdW1wIChVSU5UIHRpbWVyX2lkIF9VXywgVUlOVCBtc2cgX1VfLCBEV09SRF9QVFIgYXJnIF9VXywKIAkJCQkgIERXT1JEX1BUUiBkdzEgX1VfLCBEV09SRF9QVFIgZHcyIF9VXykKIHsKLQlzdHJ1Y3QgcGNhcF9zdGF0IHN0YXQ7Ci0KLQlpZiAoaW5mb2RlbGF5ID09IDAgJiYgcGNhcF9zdGF0cyhwZCwgJnN0YXQpID49IDApCisJaWYgKGluZm9kZWxheSA9PSAwKQogCQlmcHJpbnRmKHN0ZGVyciwgIkdvdCAldVxyIiwgcGFja2V0c19jYXB0dXJlZCk7CiB9CiAjZWxpZiBkZWZpbmVkKEhBVkVfQUxBUk0pCiBzdGF0aWMgdm9pZCB2ZXJib3NlX3N0YXRzX2R1bXAoaW50IHNpZyBfVV8pCiB7Ci0Jc3RydWN0IHBjYXBfc3RhdCBzdGF0OwotCi0JaWYgKGluZm9kZWxheSA9PSAwICYmIHBjYXBfc3RhdHMocGQsICZzdGF0KSA+PSAwKQorCWlmIChpbmZvZGVsYXkgPT0gMCkKIAkJZnByaW50ZihzdGRlcnIsICJHb3QgJXVcciIsIHBhY2tldHNfY2FwdHVyZWQpOwogCWFsYXJtKDEpOwogfQpAQCAtMjYxOSwzNyArMjU2NywzOCBAQAogewogCWV4dGVybiBjaGFyIHZlcnNpb25bXTsKICNpZm5kZWYgSEFWRV9QQ0FQX0xJQl9WRVJTSU9OCi0jaWYgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChIQVZFX1BDQVBfVkVSU0lPTikKKyNpZiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChIQVZFX1BDQVBfVkVSU0lPTikKIAlleHRlcm4gY2hhciBwY2FwX3ZlcnNpb25bXTsKLSNlbHNlIC8qIGRlZmluZWQoV0lOMzIpIHx8IGRlZmluZWQoSEFWRV9QQ0FQX1ZFUlNJT04pICovCisjZWxzZSAvKiBkZWZpbmVkKF9XSU4zMikgfHwgZGVmaW5lZChIQVZFX1BDQVBfVkVSU0lPTikgKi8KIAlzdGF0aWMgY2hhciBwY2FwX3ZlcnNpb25bXSA9ICJ1bmtub3duIjsKLSNlbmRpZiAvKiBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKEhBVkVfUENBUF9WRVJTSU9OKSAqLworI2VuZGlmIC8qIGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKEhBVkVfUENBUF9WRVJTSU9OKSAqLwogI2VuZGlmIC8qIEhBVkVfUENBUF9MSUJfVkVSU0lPTiAqLworCWNvbnN0IGNoYXIgKnNtaV92ZXJzaW9uX3N0cmluZzsKIAogI2lmZGVmIEhBVkVfUENBUF9MSUJfVkVSU0lPTgotI2lmZGVmIFdJTjMyCisjaWZkZWYgX1dJTjMyCiAJKHZvaWQpZnByaW50ZihzdGRlcnIsICIlcyB2ZXJzaW9uICVzLCBiYXNlZCBvbiB0Y3BkdW1wIHZlcnNpb24gJXNcbiIsIHByb2dyYW1fbmFtZSwgV0R2ZXJzaW9uLCB2ZXJzaW9uKTsKLSNlbHNlIC8qIFdJTjMyICovCisjZWxzZSAvKiBfV0lOMzIgKi8KIAkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzIHZlcnNpb24gJXNcbiIsIHByb2dyYW1fbmFtZSwgdmVyc2lvbik7Ci0jZW5kaWYgLyogV0lOMzIgKi8KKyNlbmRpZiAvKiBfV0lOMzIgKi8KIAkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzXG4iLHBjYXBfbGliX3ZlcnNpb24oKSk7CiAjZWxzZSAvKiBIQVZFX1BDQVBfTElCX1ZFUlNJT04gKi8KLSNpZmRlZiBXSU4zMgorI2lmZGVmIF9XSU4zMgogCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlcywgYmFzZWQgb24gdGNwZHVtcCB2ZXJzaW9uICVzXG4iLCBwcm9ncmFtX25hbWUsIFdEdmVyc2lvbiwgdmVyc2lvbik7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsICJXaW5QY2FwIHZlcnNpb24gJXMsIGJhc2VkIG9uIGxpYnBjYXAgdmVyc2lvbiAlc1xuIixXcGNhcF92ZXJzaW9uLCBwY2FwX3ZlcnNpb24pOwotI2Vsc2UgLyogV0lOMzIgKi8KKyNlbHNlIC8qIF9XSU4zMiAqLwogCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXMgdmVyc2lvbiAlc1xuIiwgcHJvZ3JhbV9uYW1lLCB2ZXJzaW9uKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwgImxpYnBjYXAgdmVyc2lvbiAlc1xuIiwgcGNhcF92ZXJzaW9uKTsKLSNlbmRpZiAvKiBXSU4zMiAqLworI2VuZGlmIC8qIF9XSU4zMiAqLwogI2VuZGlmIC8qIEhBVkVfUENBUF9MSUJfVkVSU0lPTiAqLwogCiAjaWYgZGVmaW5lZChIQVZFX0xJQkNSWVBUTykgJiYgZGVmaW5lZChTU0xFQVlfVkVSU0lPTikKIAkodm9pZClmcHJpbnRmIChzdGRlcnIsICIlc1xuIiwgU1NMZWF5X3ZlcnNpb24oU1NMRUFZX1ZFUlNJT04pKTsKICNlbmRpZgogCi0jaWZkZWYgVVNFX0xJQlNNSQotCSh2b2lkKWZwcmludGYgKHN0ZGVyciwgIlNNSS1saWJyYXJ5OiAlc1xuIiwgc21pX3ZlcnNpb25fc3RyaW5nKTsKLSNlbmRpZgorCXNtaV92ZXJzaW9uX3N0cmluZyA9IG5kX3NtaV92ZXJzaW9uX3N0cmluZygpOworCWlmIChzbWlfdmVyc2lvbl9zdHJpbmcgIT0gTlVMTCkKKwkJKHZvaWQpZnByaW50ZiAoc3RkZXJyLCAiU01JLWxpYnJhcnk6ICVzXG4iLCBzbWlfdmVyc2lvbl9zdHJpbmcpOwogfQogVVNFU19BUFBMRV9SU1QKIApAQCAtMjY1OCw3ICsyNjA3LDcgQEAKIHsKIAlwcmludF92ZXJzaW9uKCk7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCi0iVXNhZ2U6ICVzIFstYUFiZCIgRF9GTEFHICJlZmhIIiBJX0ZMQUcgSl9GTEFHICJLbExuTk9wcVJTdHUiIFVfRkxBRyAidnhYI10iIEJfRkxBR19VU0FHRSAiIFsgLWMgY291bnQgXVxuIiwgcHJvZ3JhbV9uYW1lKTsKKyJVc2FnZTogJXMgWy1hQWJkIiBEX0ZMQUcgImVmaEgiIElfRkxBRyBKX0ZMQUcgIktsTG5OT3BxU3R1IiBVX0ZMQUcgInZ4WCNdIiBCX0ZMQUdfVVNBR0UgIiBbIC1jIGNvdW50IF1cbiIsIHByb2dyYW1fbmFtZSk7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCiAiXHRcdFsgLUMgZmlsZV9zaXplIF0gWyAtRSBhbGdvOnNlY3JldCBdIFsgLUYgZmlsZSBdIFsgLUcgc2Vjb25kcyBdXG4iKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKQEAgLTI2NzksNDggKzI2MjgsMTAgQEAKICNlbmRpZgogCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiWyAtVCB0eXBlIF0gWyAtLXZlcnNpb24gXSBbIC1WIGZpbGUgXVxuIik7CiAJKHZvaWQpZnByaW50ZihzdGRlcnIsCi0iXHRcdFsgLXcgZmlsZSBdIFsgLVcgZmlsZWNvdW50IF0gWyAteSBkYXRhbGlua3R5cGUgXSBbIC16IGNvbW1hbmQgXVxuIik7CisiXHRcdFsgLXcgZmlsZSBdIFsgLVcgZmlsZWNvdW50IF0gWyAteSBkYXRhbGlua3R5cGUgXSBbIC16IHBvc3Ryb3RhdGUtY29tbWFuZCBdXG4iKTsKIAkodm9pZClmcHJpbnRmKHN0ZGVyciwKICJcdFx0WyAtWiB1c2VyIF0gWyBleHByZXNzaW9uIF1cbiIpOwogfQotCi0KLQotLyogVkFSQVJHUyAqLwotc3RhdGljIHZvaWQKLW5kb19lcnJvcihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbyBfVV8sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiAiLCBwcm9ncmFtX25hbWUpOwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlpZiAoKmZtdCkgewotCQlmbXQgKz0gc3RybGVuKGZtdCk7Ci0JCWlmIChmbXRbLTFdICE9ICdcbicpCi0JCQkodm9pZClmcHV0YygnXG4nLCBzdGRlcnIpOwotCX0KLQlleGl0KDEpOwotCS8qIE5PVFJFQUNIRUQgKi8KLX0KLQotLyogVkFSQVJHUyAqLwotc3RhdGljIHZvaWQKLW5kb193YXJuaW5nKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvIF9VXywgY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6IFdBUk5JTkc6ICIsIHByb2dyYW1fbmFtZSk7Ci0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JKHZvaWQpdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCWlmICgqZm10KSB7Ci0JCWZtdCArPSBzdHJsZW4oZm10KTsKLQkJaWYgKGZtdFstMV0gIT0gJ1xuJykKLQkJCSh2b2lkKWZwdXRjKCdcbicsIHN0ZGVycik7Ci0JfQotfQogLyoKICAqIExvY2FsIFZhcmlhYmxlczoKICAqIGMtc3R5bGU6IHdoaXRlc21pdGgKZGlmZiAtLWdpdCBhL3Rlc3RzL09MU1J2MV9ITkFfc2d3XzEub3V0IGIvdGVzdHMvT0xTUnYxX0hOQV9zZ3dfMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGY0MWNkYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL09MU1J2MV9ITkFfc2d3XzEub3V0CkBAIC0wLDAgKzEsMTMgQEAKK0lQICh0b3MgMHgxMCwgdHRsIDEsIGlkIDI1MjQ1LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxMDApCisgICAgMTcyLjI5LjE3NS4yMjAuNjk4ID4gMjU1LjI1NS4yNTUuMjU1LjY5ODogT0xTUnY0LCBzZXEgMHhjZTkzLCBsZW5ndGggNzIKKwlITkEgTWVzc2FnZSAoMHgwNCksIG9yaWdpbmF0b3IgMTcyLjMxLjE3NS4yMjAsIHR0bCAyNTUsIGhvcCAwCisJICB2dGltZSAyODguMDAwcywgbXNnLXNlcSAweDZjZTUsIGxlbmd0aCAyOAorCSAgQWR2ZXJ0aXNlZCBuZXR3b3JrcyAodG90YWwgMikKKwkgICAgU21hcnQtR2F0ZXdheTogTElOS1NQRUVEIElQVjQgSVBWNC1OQVQgMTAwMDAvMTAwMDAsIDEwLjE3NS4yMjAuMC8yNAorCUhlbGxvLUxRIE1lc3NhZ2UgKDB4YzkpLCBvcmlnaW5hdG9yIDE3Mi4zMS4xNzUuMjIwLCB0dGwgMSwgaG9wIDAKKwkgIHZ0aW1lIDMuMDAwcywgbXNnLXNlcSAweDZjZTYsIGxlbmd0aCA0MAorCSAgaGVsbG8tdGltZSAxLjAwMHMsIE1QUiB3aWxsaW5nbmVzcyAzCisJICAgIGxpbmstdHlwZSBTeW1tZXRyaWMsIG5laWdoYm9yLXR5cGUgU3ltbWV0cmljLCBsZW4gMTIKKwkgICAgICBuZWlnaGJvciAxNzIuMjkuMTc1LjIyMSwgbGluay1xdWFsaXR5IDAuMDAlLCBuZWlnaGJvci1saW5rLXF1YWxpdHkgMC4wMCUKKwkgICAgbGluay10eXBlIFVuc3BlY2lmaWVkLCBuZWlnaGJvci10eXBlIFN5bW1ldHJpYywgbGVuIDEyCisJICAgICAgbmVpZ2hib3IgMTcyLjMxLjE3NS4yMjEsIGxpbmstcXVhbGl0eSAwLjAwJSwgbmVpZ2hib3ItbGluay1xdWFsaXR5IDAuMDAlCmRpZmYgLS1naXQgYS90ZXN0cy9PTFNSdjFfSE5BX3Nnd18xLnBjYXAgYi90ZXN0cy9PTFNSdjFfSE5BX3Nnd18xLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk3NWQ4ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL09MU1J2MV9ITkFfc2d3XzEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9SQURJVVMtcG9ydDE3MDAucGNhcCBiL3Rlc3RzL1JBRElVUy1wb3J0MTcwMC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFhN2IyNGUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9SQURJVVMtcG9ydDE3MDAucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9URVNUTElTVCBiL3Rlc3RzL1RFU1RMSVNUCmluZGV4IDM1OTYzYzYuLmJhMjlkYTQgMTAwNjQ0Ci0tLSBhL3Rlc3RzL1RFU1RMSVNUCisrKyBiL3Rlc3RzL1RFU1RMSVNUCkBAIC0xLDMgKzEsNSBAQAorIyBUaGUgT3B0aW9uIC1uIGlzIHVzZWxlc3MgaW4gVEVTVExJU1QuIEl0IGlzIGFscmVhZHkgc2V0IGluIFRFU1RvbmNlLgorCiAjIFZhcmlvdXMgZmxhZ3MgYXBwbGllZCB0byBhIFRDUCBzZXNzaW9uLgogIwogIyBXZSBjYW5ub3QgcmVseSBvbiwgZm9yIGV4YW1wbGUsICJwcmludC14Lm91dCIgYW5kCkBAIC0yMCwxMiArMjIsMTQgQEAKIGJncF92cG5fYXR0cnNldCBiZ3BfdnBuX2F0dHJzZXQucGNhcCBiZ3BfdnBuX2F0dHJzZXQub3V0IC10IC12CiBtcGJncC1saW5rbG9jYWwtbmV4dGhvcCBtcGJncC1saW5rbG9jYWwtbmV4dGhvcC5wY2FwIG1wYmdwLWxpbmtsb2NhbC1uZXh0aG9wLm91dCAtdCAtdgogYmdwX2luZmxvb3AtdgkJYmdwLWluZmluaXRlLWxvb3AucGNhcAkJYmdwX2luZmxvb3Atdi5vdXQJLXQgLXYKK2JncC1haWdwCWJncC1haWdwLnBjYXAJYmdwLWFpZ3Aub3V0CS10IC12CitiZ3AtbGFyZ2UtY29tbXVuaXR5IGJncC1sYXJnZS1jb21tdW5pdHkucGNhcCBiZ3AtbGFyZ2UtY29tbXVuaXR5Lm91dCAtdCAtdgogCiAjIEVBUCB0ZXN0cwogZWFwb24xIGVhcG9uMS5wY2FwIGVhcG9uMS5vdXQgLXQKIAogIyBFU1AgdGVzdHMKLWVzcDAgMDItc3VucmlzZS1zdW5zZXQtZXNwLnBjYXAgZXNwMC5vdXQgLXQgLW4KK2VzcDAgMDItc3VucmlzZS1zdW5zZXQtZXNwLnBjYXAgZXNwMC5vdXQgLXQKICMgbW9yZSBFU1AgdGVzdHMgaW4gY3J5cHRvLnNoCiAKICMgSVNBS01QIHRlc3RzCkBAIC00Miw2ICs0NiwxNCBAQAogIyBNUExTIHRlc3RzCiBtcGxzLWxkcC1oZWxsbwltcGxzLWxkcC1oZWxsby5wY2FwCW1wbHMtbGRwLWhlbGxvLm91dCAtdCAtdgogbGRwX2luZmxvb3AJbGRwLWluZmluaXRlLWxvb3AucGNhcAlsZHBfaW5mbG9vcC5vdXQgLXQKK2xzcHBpbmctZmVjLWxkcCAgICBsc3BwaW5nLWZlYy1sZHAucGNhcCBsc3BwaW5nLWZlYy1sZHAub3V0IC10Citsc3BwaW5nLWZlYy1sZHAtdiAgbHNwcGluZy1mZWMtbGRwLnBjYXAgbHNwcGluZy1mZWMtbGRwLXYub3V0IC10IC12Citsc3BwaW5nLWZlYy1sZHAtdnYgbHNwcGluZy1mZWMtbGRwLnBjYXAgbHNwcGluZy1mZWMtbGRwLXZ2Lm91dCAtdCAtdnYKK2xzcHBpbmctZmVjLXJzdnAgICAgbHNwcGluZy1mZWMtcnN2cC5wY2FwIGxzcHBpbmctZmVjLXJzdnAub3V0IC10Citsc3BwaW5nLWZlYy1yc3ZwLXYgIGxzcHBpbmctZmVjLXJzdnAucGNhcCBsc3BwaW5nLWZlYy1yc3ZwLXYub3V0IC10IC12Citsc3BwaW5nLWZlYy1yc3ZwLXZ2IGxzcHBpbmctZmVjLXJzdnAucGNhcCBsc3BwaW5nLWZlYy1yc3ZwLXZ2Lm91dCAtdCAtdnYKK21wbHMtdHJhY2Vyb3V0ZSAgIG1wbHMtdHJhY2Vyb3V0ZS5wY2FwIG1wbHMtdHJhY2Vyb3V0ZS5vdXQgLXQKK21wbHMtdHJhY2Vyb3V0ZS12IG1wbHMtdHJhY2Vyb3V0ZS5wY2FwIG1wbHMtdHJhY2Vyb3V0ZS12Lm91dCAtdCAtdgogCiAjIE9TUEYgdGVzdHMKIG9zcGYtZ21wbHMJb3NwZi1nbXBscy5wY2FwCQkJCW9zcGYtZ21wbHMub3V0CQktdCAtdgpAQCAtNTAsMTIgKzYyLDE2IEBACiBvc3BmM19iYy12dglPU1BGdjNfYnJvYWRjYXN0X2FkamFjZW5jeS5wY2FwCQlvc3BmM19iYy12di5vdXQJCS10IC12IC12CiBvc3BmM19tcC12dglPU1BGdjNfbXVsdGlwb2ludF9hZGphY2VuY2llcy5wY2FwCW9zcGYzX21wLXZ2Lm91dAkJLXQgLXYgLXYKIG9zcGYzX25ibWEtdnYJT1NQRnYzX05CTUFfYWRqYWNlbmNpZXMucGNhcAkJb3NwZjNfbmJtYS12di5vdXQJLXQgLXYgLXYKKyMgZnV6emVkIHBjYXAKK29zcGYyLXNlZy1mYXVsdC0xLXYgIG9zcGYyLXNlZy1mYXVsdC0xLnBjYXAgIG9zcGYyLXNlZy1mYXVsdC0xLXYub3V0ICAtdCAtdgogCiAjIElLRXYyIHRlc3RzCiBpa2V2MmZvdXIJaWtldjJmb3VyLnBjYXAJCWlrZXYyZm91ci5vdXQJLXQgLXYKIGlrZXYyZm91cnYJaWtldjJmb3VyLnBjYXAJCWlrZXYyZm91cnYub3V0CS10IC12IC12IC12CiBpa2V2MmZvdXJ2NAlpa2V2MmZvdXIucGNhcAkJaWtldjJmb3VydjQub3V0CS10IC12IC12IC12IC12CiAjIGlrZXYycEkyIHRlc3QgaW4gY3J5cHRvLnNoCitpa2V2MnBJMi1zZWdmYXVsdAlpa2V2MnBJMi1zZWdmYXVsdC5wY2FwCWlrZXYycEkyLXNlZ2ZhdWx0Lm91dAktdAoraWtldjJwSTItc2VnZmF1bHQtdglpa2V2MnBJMi1zZWdmYXVsdC5wY2FwCWlrZXYycEkyLXNlZ2ZhdWx0LXYub3V0CS10IC12CiAKICMgSUVURiBST0xMIFJQTCBwYWNrZXRzCiBkaW8wMiAgICAgICAgICAgcnBsLTE5LXBpY2tkYWcucGNhcCAgICAgICAgIHJwbC0xOS1waWNrZGFnLm91dCAgLXQgLXYgLXYKQEAgLTk2LDYgKzExMiw5IEBACiBwcHBvZXMgICAgICAgICAgcHBwb2VzLnBjYXAgICAgICAgICAgICBwcHBvZXMub3V0ICAgICAgLXQKIHBwcG9lc19pZCAgICAgICBwcHBvZXMucGNhcCAgICAgICAgICAgIHBwcG9lc19pZC5vdXQgICAtdCBwcHBvZXMgMHgzYgogCisjIFBQUCB0ZXN0cwordHJ1bmNhdGVkX2FhY2sgIHRydW5jYXRlZC1hYWNrLnBjYXAgICAgdHJ1bmNfYWFjay5vdXQgIC10CisKICMgSUdNUCB0ZXN0cwogaWdtcHYxCQlJR01QX1YxLnBjYXAJCWlnbXB2MS5vdXQJCS10CiBpZ21wdjIJCUlHTVBfVjIucGNhcAkJaWdtcHYyLm91dAkJLXQKQEAgLTExMiw2ICsxMzEsNyBAQAogCiAjIFNQQiBCUERVdjQgdGVzdHMKIHNwYl9icGR1djQgICAgICBzcGJfYnBkdXY0LnBjYXAgICAgICAgc3BiX2JwZHV2NC5vdXQgLXQKK3NwYl9icGR1djQtdglzcGJfYnBkdXY0LnBjYXAgICAgICAgc3BiX2JwZHV2NC12Lm91dCAtdCAtdgogCiAjIERDQiBUZXN0cwogZGNiX2V0cyAgICAgICAgIGRjYl9ldHMucGNhcCAgICAgICAgICBkY2JfZXRzLm91dCAgIC10IC12dgpAQCAtMTM5LDYgKzE1OSw3IEBACiBkaGNwdjYtbnRwLXNlcnZlcglkaGNwdjYtbnRwLXNlcnZlci5wY2FwCWRoY3B2Ni1udHAtc2VydmVyLm91dAktdCAtdgogZGhjcHY2LXNpcC1zZXJ2ZXItZAlkaGNwdjYtc2lwLXNlcnZlci1kLnBjYXAJZGhjcHY2LXNpcC1zZXJ2ZXItZC5vdXQgLXQgLXYKIGRoY3B2Ni1kb21haW4tbGlzdAlkaGNwdjYtZG9tYWluLWxpc3QucGNhcAlkaGNwdjYtZG9tYWluLWxpc3Qub3V0CS10IC12CitkaGNwdjYtbXVkCWRoY3B2Ni1tdWQucGNhcAkJZGhjcHY2LW11ZC5vdXQgLXQgLXZ2CiAKICMgWmVyb01RL1BHTSB0ZXN0cwogIyBaTVRQLzEuMCBvdmVyIFRDUApAQCAtMTUxLDYgKzE3Miw4IEBACiBwZ21fem10cDF2CXBnbV96bXRwMS5wY2FwCQlwZ21fem10cDF2Lm91dAktdCAtdiAtVCBwZ21fem10cDEKICMgWk1UUC8xLjAgaW5zaWRlIFVEUC1lbmNhcHN1bGF0ZWQgUEdNCiBlcGdtX3ptdHAxdgllcGdtX3ptdHAxLnBjYXAJCWVwZ21fem10cDF2Lm91dAktdCAtdiAtVCBwZ21fem10cDEKKyMgZnV6emVkIHBjYXAKK3ptdHAxLWluZi1sb29wLTEgem10cDEtaW5mLWxvb3AtMS5wY2FwIHptdHAxLWluZi1sb29wLTEub3V0IC10IC1UIHptdHAxCiAKICMgTVMgTkxCIHRlc3RzCiBtc25sYgkJbXNubGIucGNhcAkJbXNubGIub3V0CS10CkBAIC0xNjEsNiArMTg0LDggQEAKIG1wdGNwLWZjbG9zZQltcHRjcC1mY2xvc2UucGNhcAltcHRjcC1mY2xvc2Uub3V0CS10CiAjIFRGTyB0ZXN0cwogdGZvCQl0Zm8tNWMxZmE3ZjlhZTkxLnBjYXAJdGZvLm91dAkJLXQKKyMgU0NQUworc2Nwc19pbnZhbGlkCXNjcHNfaW52YWxpZC5wY2FwCXNjcHNfaW52YWxpZC5vdXQJLXQKIAogIyBJRUVFIDgwMi4xMSB0ZXN0cwogODAyLjExX2V4dGhkcglpZWVlODAyLjExX2V4dGhkci5wY2FwCWllZWU4MDIuMTFfZXh0aGRyLm91dAktdCAtdgpAQCAtMTc0LDcgKzE5OSw3IEBACiBvZjEwXzcwNTBzeF9ic24tdnYJb2YxMF83MDUwc3hfYnNuLnBjYXAJCW9mMTBfNzA1MHN4X2Jzbi12di5vdXQJLXQgLXZ2CiAKICMgR2VvTmV0d29ya2luZyBhbmQgQ0FMTSBGQVNUIHRlc3RzCi1nZW9uZXQtY2FsbS1mYXN0CWdlb25ldF9hbmRfY2FsbV9mYXN0LnBjYXAJZ2VvbmV0X2FuZF9jYWxtX2Zhc3Qub3V0CS10IC12diAtbgorZ2VvbmV0LWNhbG0tZmFzdAlnZW9uZXRfYW5kX2NhbG1fZmFzdC5wY2FwCWdlb25ldF9hbmRfY2FsbV9mYXN0Lm91dAktdCAtdnYKIAogIyBNM1VBIHRlc3RzCiBtM3VhIGlzdXAucGNhcCBpc3VwLm91dCAtdApAQCAtMTg1LDggKzIxMCwxMSBAQAogIyBzeXNsb2cgdGVzdCBjYXNlCiBzeXNsb2ctdglzeXNsb2dfdWRwLnBjYXAJCXN5c2xvZy12Lm91dAkJLXQgLXYKIAorIyBETlNTRUMgZnJvbSBodHRwczovL2J1Z3ppbGxhLnJlZGhhdC5jb20vc2hvd19idWcuY2dpP2lkPTIwNTg0MiwgLXZ2IGV4cG9zZXMgRUROUyBETworZG5zc2VjLXZ2CWRuc3NlYy5wY2FwCQlkbnNzZWMtdnYub3V0CQktdCAtdnYKKwogI0lQdjYgdGVzdHMKLWlwdjYtYmFkLXZlcnNpb24ucGNhcAlpcHY2LWJhZC12ZXJzaW9uLnBjYXAgCWlwdjYtYmFkLXZlcnNpb24ub3V0CS10CitpcHY2LWJhZC12ZXJzaW9uCWlwdjYtYmFkLXZlcnNpb24ucGNhcCAJaXB2Ni1iYWQtdmVyc2lvbi5vdXQJLXQKIGlwdjYtcm91dGluZy1oZWFkZXIJaXB2Ni1yb3V0aW5nLWhlYWRlci5wY2FwCWlwdjYtcm91dGluZy1oZWFkZXIub3V0IC10IC12CiAKICMgTG9vcGJhY2svQ1RQIHRlc3QgY2FzZQpAQCAtMjE3LDkgKzI0NSwyMiBAQAogCiAjIElTLUlTIHRlc3RzCiBpc2lzX2luZmxvb3Atdglpc2lzLWluZmluaXRlLWxvb3AucGNhcAkJaXNpc19pbmZsb29wLXYub3V0CS10IC12Citpc2lzX3BvaS12ICAgICAgaXNpc19wb2kucGNhcCAgICAgICAgICAgICAgICAgICBpc2lzX3BvaS5vdXQgICAgICAgICAgICAtdCAtdgoraXNpc19wb2kyLXYgICAgIGlzaXNfcG9pMi5wY2FwICAgICAgICAgICAgICAgICAgaXNpc19wb2kyLm91dCAgICAgICAgICAgLXQgLXYKK2lzaXNfMQkJSVNJU19leHRlcm5hbF9sc3AucGNhcAkJaXNpc18xLm91dAktdAoraXNpc18xLXYJSVNJU19leHRlcm5hbF9sc3AucGNhcAkJaXNpc18xLXYub3V0CS10IC12Citpc2lzXzItdglJU0lTX2xldmVsMV9hZGphY2VuY3kucGNhcAlpc2lzXzItdi5vdXQJLXQgLXYKK2lzaXNfMy12CUlTSVNfbGV2ZWwyX2FkamFjZW5jeS5wY2FwCWlzaXNfMy12Lm91dAktdCAtdgoraXNpc180LXYJSVNJU19wMnBfYWRqYWNlbmN5LnBjYXAJCWlzaXNfNC12Lm91dAktdCAtdgorIyBmdXp6ZWQgcGNhcAorIyBpc2lzLXNlZy1mYXVsdC0xLXYgaXMgbm93IGNvbmRpdGlvbmFsbHkgaGFuZGxlZCBieSBpc2lzLXNlZy1mYXVsdC0xLXYuc2gKK2lzaXMtc2VnLWZhdWx0LTItdiBpc2lzLXNlZy1mYXVsdC0yLnBjYXAgaXNpcy1zZWctZmF1bHQtMi12Lm91dCAtdCAtdgoraXNpcy1zZWctZmF1bHQtMy12IGlzaXMtc2VnLWZhdWx0LTMucGNhcCBpc2lzLXNlZy1mYXVsdC0zLXYub3V0IC10IC12CiAKICMgUlNWUCB0ZXN0cwogcnN2cF9pbmZsb29wLXYJcnN2cC1pbmZpbml0ZS1sb29wLnBjYXAJCXJzdnBfaW5mbG9vcC12Lm91dAktdCAtdgorIyBmdXp6ZWQgcGNhcAorcnN2cC1pbmYtbG9vcC0yLXYgcnN2cC1pbmYtbG9vcC0yLnBjYXAgcnN2cC1pbmYtbG9vcC0yLXYub3V0IC10IC12CiAKICMgSERMQyB0ZXN0cwogaGRsYzEJY2hkbGMtc2xhcnAucGNhcAloZGxjMS5vdXQJLXQKQEAgLTIzNCw2ICsyNzUsNyBAQAogcmFkaXVzLXYJUkFESVVTLnBjYXAJcmFkaXVzLXYub3V0CS10IC12CiByYWRpdXMtcmZjNDY3NQlSQURJVVMtUkZDNDY3NS5wY2FwCXJhZGl1cy1yZmM0Njc1LXYub3V0CS10IC12CiByYWRpdXMtcmZjNTE3NglSQURJVVMtUkZDNTE3Ni5wY2FwCXJhZGl1cy1yZmM1MTc2LXYub3V0CS10IC12CityYWRpdXMtcG9ydDE3MDAJUkFESVVTLXBvcnQxNzAwLnBjYXAJcmFkaXVzLXBvcnQxNzAwLXYub3V0CS10IC12CiAKICMgbGluay1sZXZlbCBwcm90b2NvbHMKIGR0cC12CQlEVFAucGNhcAkJZHRwLXYub3V0CQktdCAtdgpAQCAtMjQxLDYgKzI4MywxMCBAQAogbGxkcF9jZHAtZXYJTExEUF9hbmRfQ0RQLnBjYXAJbGxkcF9jZHAtZXYub3V0CQktdCAtZSAtdgogY2RwLXYJCTM1NjBfQ0RQLnBjYXAJCWNkcC12Lm91dAkJLXQgLXYKIHVkbGQtdgkJVURMRC5wY2FwCQl1ZGxkLXYub3V0CQktdCAtdgorbGxkcF9tdWQtdglsbGRwX211ZHVybC5wY2FwCWxsZHBfbXVkdXJsLXYub3V0CS10IC1lIC12CitsbGRwX211ZC12dglsbGRwX211ZHVybC5wY2FwCWxsZHBfbXVkdXJsLXZ2Lm91dAktdCAtZSAtdnYKKyMgZnV6emVkIHBjYXAKK3VkbGQtaW5mLWxvb3AtMS12ICB1ZGxkLWluZi1sb29wLTEucGNhcCAgdWRsZC1pbmYtbG9vcC0xLXYub3V0ICAtdCAtdgogCiAjIEVJR1JQIHRlc3RzCiBlaWdycDEtdglFSUdSUF9hZGphY2VuY3kucGNhcAllaWdycDEtdi5vdXQJLXQgLXYKQEAgLTI0OCwxMyArMjk0LDYgQEAKIGVpZ3JwMy12CUVJR1JQX3N1Ym5ldF9kb3duLnBjYXAJZWlncnAzLXYub3V0CS10IC12CiBlaWdycDQtdglFSUdSUF9zdWJuZXRfdXAucGNhcAllaWdycDQtdi5vdXQJLXQgLXYKIAotIyBJUy1JUyB0ZXN0cwotaXNpc18xCQlJU0lTX2V4dGVybmFsX2xzcC5wY2FwCQlpc2lzXzEub3V0CS10Ci1pc2lzXzEtdglJU0lTX2V4dGVybmFsX2xzcC5wY2FwCQlpc2lzXzEtdi5vdXQJLXQgLXYKLWlzaXNfMi12CUlTSVNfbGV2ZWwxX2FkamFjZW5jeS5wY2FwCWlzaXNfMi12Lm91dAktdCAtdgotaXNpc18zLXYJSVNJU19sZXZlbDJfYWRqYWNlbmN5LnBjYXAJaXNpc18zLXYub3V0CS10IC12Ci1pc2lzXzQtdglJU0lTX3AycF9hZGphY2VuY3kucGNhcAkJaXNpc180LXYub3V0CS10IC12Ci0KICMgQVRBLW92ZXItRXRoZXJuZXQgdGVzdHMKIGFvZV8xCQlBb0VfTGludXgucGNhcAkJYW9lXzEub3V0CS10CiBhb2VfMS12CQlBb0VfTGludXgucGNhcAkJYW9lXzEtdi5vdXQJLXQgLXYKQEAgLTI2NywyNSArMzA2LDE0MCBAQAogIyBESENQIHRlc3RzCiBkaGNwLXJmYzMwMDQJZGhjcC1yZmMzMDA0LnBjYXAJZGhjcC1yZmMzMDA0LXYub3V0CS10IC12CiBkaGNwLXJmYzU4NTkJZGhjcC1yZmM1ODU5LnBjYXAJZGhjcC1yZmM1ODU5LXYub3V0CS10IC12CitkaGNwLW11ZAlkaGNwLW11ZC5wY2FwCQlkaGNwLW11ZC5vdXQJLXQgLXZ2CisKKyMgTUVEU0EgdGVzdHMKK21lZHNhCQltZWRzYS5wY2FwCQltZWRzYS5vdXQJLXQKK21lZHNhLWUJCW1lZHNhLnBjYXAJCW1lZHNhLWUub3V0CS10IC1lCisKKyMgVlhMQU4gdGVzdHMKK3Z4bGFuICB2eGxhbi5wY2FwICB2eGxhbi5vdXQgIC0jIC10IC1lCisKKyMgQ1ZFcyAyMDE0IG1hbGZvcm1lZCBwYWNrZXRzIGZyb20gU3RlZmZlbiBCYXVjaAorY3ZlLTIwMTQtODc2Ny1PTFNSIGN2ZS0yMDE0LTg3NjctT0xTUi5wY2FwIGN2ZS0yMDE0LTg3NjctT0xTUi5vdXQgLXQgLXYKK2N2ZS0yMDE0LTg3NjgtR2VvbmV0IGN2ZS0yMDE0LTg3NjgtR2VvbmV0LnBjYXAgY3ZlLTIwMTQtODc2OC1HZW9uZXQub3V0IC10IC12CitjdmUtMjAxNC04NzY5LUFPRFYgY3ZlLTIwMTQtODc2OS1BT0RWLnBjYXAgY3ZlLTIwMTQtODc2OS1BT0RWLm91dCAtdCAtdgogCiAjIGJhZCBwYWNrZXRzIGZyb20gS2V2aW4gRGF5Ci0jIGN2ZS0yMDE1LTIxNTUgLS0gZnV0eiB0ZXN0aW5nIG9uIEZPUkNFUyBwcmludGVyCisjIGN2ZS0yMDE1LTIxNTUgLS0gZnV6eiB0ZXN0aW5nIG9uIEZPUkNFUyBwcmludGVyCiBrZGF5MSAgICAgICAgICAga2RheTEucGNhcCAgICAgICAgICAgICAga2RheTEub3V0ICAgICAgIC10IC12Ci0jIGN2ZS0yMDE1LTIxNTMgLS0gZnV0eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCisjIGN2ZS0yMDE1LTIxNTMgLS0gZnV6eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCiBrZGF5MiAgICAgICAgICAga2RheTIucGNhcCAgICAgICAgICAgICAga2RheTIub3V0ICAgICAgIC10IC12Ci0jIGN2ZS0yMDE1LTIxNTMgLS0gZnV0eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCisjIGN2ZS0yMDE1LTIxNTMgLS0gZnV6eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCiBrZGF5MyAgICAgICAgICAga2RheTMucGNhcCAgICAgICAgICAgICAga2RheTMub3V0ICAgICAgIC10IC12Ci0jIGN2ZS0yMDE1LTIxNTMgLS0gZnV0eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCisjIGN2ZS0yMDE1LTIxNTMgLS0gZnV6eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCiBrZGF5NCAgICAgICAgICAga2RheTQucGNhcCAgICAgICAgICAgICAga2RheTQub3V0ICAgICAgIC10IC12Ci0jIGN2ZS0yMDE1LTIxNTMgLS0gZnV0eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCisjIGN2ZS0yMDE1LTIxNTMgLS0gZnV6eiB0ZXN0aW5nIG9uIFRDUCBwcmludGVyCiBrZGF5NSAgICAgICAgICAga2RheTUucGNhcCAgICAgICAgICAgICAga2RheTUub3V0ICAgICAgIC10IC12CiAjIGN2ZS0yMDE1LTIxNTQgLS0gZXRoZXJuZXQgcHJpbnRlcgoga2RheTYgICAgICAgICAgIGtkYXk2LnBjYXAgICAgICAgICAgICAgIGtkYXk2Lm91dCAgICAgICAtdCAtdgotIyBjdmUtMjAxNS0yMTUzIC0tIGZ1dHogdGVzdGluZyBvbiBUQ1AgcHJpbnRlcgorIyBjdmUtMjAxNS0yMTUzIC0tIGZ1enogdGVzdGluZyBvbiBUQ1AgcHJpbnRlcgoga2RheTcgICAgICAgICAgIGtkYXk3LnBjYXAgICAgICAgICAgICAgIGtkYXk3Lm91dCAgICAgICAtdCAtdgotIyBjdmUtMjAxNS0yMTUzIC0tIGZ1dHogdGVzdGluZyBvbiBUQ1AgcHJpbnRlcgorIyBjdmUtMjAxNS0yMTUzIC0tIGZ1enogdGVzdGluZyBvbiBUQ1AgcHJpbnRlcgoga2RheTggICAgICAgICAgIGtkYXk4LnBjYXAgICAgICAgICAgICAgIGtkYXk4Lm91dCAgICAgICAtdCAtdgogCiAjIGJhZCBwYWNrZXRzIGZyb20gcmV2ZXJzZXg4Ni4KIGN2ZTIwMTUtMDI2MV8wMSAgICBjdmUyMDE1LTAyNjEtaXB2Ni5wY2FwICAgICAgIGN2ZTIwMTUtMDI2MS1pcHY2Lm91dCAtdCAtdgogY3ZlMjAxNS0wMjYxXzAyICAgIGN2ZTIwMTUtMDI2MS1jcmFzaC5wY2FwICAgICAgY3ZlMjAxNS0wMjYxLWNyYXNoLm91dCAtdCAtdgorCisjIE9MU1J2MSB0ZXN0cworb2xzcnYxXzEJT0xTUnYxX0hOQV9zZ3dfMS5wY2FwCQlPTFNSdjFfSE5BX3Nnd18xLm91dAktdCAtdgorCisjIHRlc3RzIHdpdGggdW5hbGlnbmVkIGRhdGEsIHRvIG1ha2Ugc3VyZSB0aGV5IHdvcmsgb24gU1BBUkMKK3VuYWxpZ25lZC1uZnMtMQl1bmFsaWduZWQtbmZzLTEucGNhcAl1bmFsaWduZWQtbmZzLTEub3V0CS10IC12CisKKyMgTElTUCB0ZXN0cworbGlzcF9laWRfbm90aWZ5CQlsaXNwX2VpZF9ub3RpZnkucGNhcAlsaXNwX2VpZF9ub3RpZnkub3V0CS10IC12CitsaXNwX2VpZF9yZWdpc3RlcglsaXNwX2VpZF9yZWdpc3Rlci5wY2FwCWxpc3BfZWlkX3JlZ2lzdGVyLm91dAktdCAtdgorbGlzcF9pcHY2X2VpZAkJbGlzcF9pcHY2LnBjYXAJCWxpc3BfaXB2Ni5vdXQJCS10IC12CisKKyMgcGNhcCBpbnZhbGlkIHZlcnNpb25zIChmaXJzdDogdmVyc2lvbiA9IDEuNCA7IHNlY29uZDogdmVyc2lvbiA9IDIuNSkKK3BjYXAtaW52YWxpZC12ZXJzaW9uLTEgcGNhcC1pbnZhbGlkLXZlcnNpb24tMS5wY2FwIHBjYXAtaW52YWxpZC12ZXJzaW9uLTEub3V0IC10CitwY2FwLWludmFsaWQtdmVyc2lvbi0yIHBjYXAtaW52YWxpZC12ZXJzaW9uLTIucGNhcCBwY2FwLWludmFsaWQtdmVyc2lvbi0yLm91dCAtdAorCisjIHBjYXAtbmcgaW52YWxpZCB2ZXJzaW9uIChmaXJzdDogdmVyc2lvbiA9IDAuMSA7IHNlY29uZDogdmVyc2lvbiA9IDEuMSkKK3BjYXAtbmctaW52YWxpZC12ZXJzLTEgcGNhcC1uZy1pbnZhbGlkLXZlcnMtMS5wY2FwIHBjYXAtbmctaW52YWxpZC12ZXJzLTEub3V0IC10CitwY2FwLW5nLWludmFsaWQtdmVycy0yIHBjYXAtbmctaW52YWxpZC12ZXJzLTIucGNhcCBwY2FwLW5nLWludmFsaWQtdmVycy0yLm91dCAtdAorCisjIE5TSCBvdmVyIFZ4TEFOLUdQRQorbnNoLW92ZXItdnhsYW4tZ3BlICAgICBuc2gtb3Zlci12eGxhbi1ncGUucGNhcCBuc2gtb3Zlci12eGxhbi1ncGUub3V0ICAgICAtdAorbnNoLW92ZXItdnhsYW4tZ3BlLXYgICBuc2gtb3Zlci12eGxhbi1ncGUucGNhcCBuc2gtb3Zlci12eGxhbi1ncGUtdi5vdXQgICAtdCAtdgorbnNoLW92ZXItdnhsYW4tZ3BlLXZ2ICBuc2gtb3Zlci12eGxhbi1ncGUucGNhcCBuc2gtb3Zlci12eGxhbi1ncGUtdnYub3V0ICAtdCAtdnYKK25zaC1vdmVyLXZ4bGFuLWdwZS12dnYgbnNoLW92ZXItdnhsYW4tZ3BlLnBjYXAgbnNoLW92ZXItdnhsYW4tZ3BlLXZ2di5vdXQgLXQgLXZ2dgorCisjIFJFU1AgdGVzdHMKK3Jlc3BfMSByZXNwXzFfYmVuY2htYXJrLnBjYXAgcmVzcF8xLm91dCAtdAorcmVzcF8yIHJlc3BfMl9pbmxpbmUucGNhcCAgICByZXNwXzIub3V0IC10CityZXNwXzMgcmVzcF8zX21hbGljaW91cy5wY2FwIHJlc3BfMy5vdXQgLXQKKworIyBITkNQIHRlc3RzCitobmNwIGhuY3AucGNhcCBobmNwLm91dCAtdnZ2IC10CisKKyMgQkZEIHRlc3RzIHdpdGggYXV0aGVudGljYXRpb24gZmllbGRzCitiZmQtcmF3LWF1dGgtc2ltcGxlIGJmZC1yYXctYXV0aC1zaW1wbGUucGNhcCBiZmQtcmF3LWF1dGgtc2ltcGxlLm91dCAtdAorYmZkLXJhdy1hdXRoLXNpbXBsZS12IGJmZC1yYXctYXV0aC1zaW1wbGUucGNhcCBiZmQtcmF3LWF1dGgtc2ltcGxlLXYub3V0IC10IC12CitiZmQtcmF3LWF1dGgtbWQ1IGJmZC1yYXctYXV0aC1tZDUucGNhcCBiZmQtcmF3LWF1dGgtbWQ1Lm91dCAtdAorYmZkLXJhdy1hdXRoLW1kNS12IGJmZC1yYXctYXV0aC1tZDUucGNhcCBiZmQtcmF3LWF1dGgtbWQ1LXYub3V0IC10IC12CitiZmQtcmF3LWF1dGgtc2hhMSBiZmQtcmF3LWF1dGgtc2hhMS5wY2FwIGJmZC1yYXctYXV0aC1zaGExLm91dCAtdAorYmZkLXJhdy1hdXRoLXNoYTEtdiBiZmQtcmF3LWF1dGgtc2hhMS5wY2FwIGJmZC1yYXctYXV0aC1zaGExLXYub3V0IC10IC12CisKKyMgYmFkIHBhY2tldHMgZnJvbSBIYW5ubyBCw7ZjaworaGVhcC1vdmVyZmxvdy0xCWhlYXAtb3ZlcmZsb3ctMS5wY2FwCQloZWFwLW92ZXJmbG93LTEub3V0CS10IC12IC1uCitoZWFwLW92ZXJmbG93LTIJaGVhcC1vdmVyZmxvdy0yLnBjYXAJCWhlYXAtb3ZlcmZsb3ctMi5vdXQJLXQgLXYgLW4KK2hlYXBvdmVyZmxvdy1hdGFsa19wcmludAloZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQucGNhcAloZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQub3V0CS10IC12IC1uCitoZWFwb3ZlcmZsb3ctRVhUUkFDVF8xNkJJVFMJaGVhcG92ZXJmbG93LUVYVFJBQ1RfMTZCSVRTLnBjYXAJaGVhcG92ZXJmbG93LUVYVFJBQ1RfMTZCSVRTLm91dAktdCAtdiAtbgoraGVhcG92ZXJmbG93LXBwcF9oZGxjX2lmX3ByaW50CWhlYXBvdmVyZmxvdy1wcHBfaGRsY19pZl9wcmludC5wY2FwCWhlYXBvdmVyZmxvdy1wcHBfaGRsY19pZl9wcmludC5vdXQJLXQgLXYgLW4KK2hlYXBvdmVyZmxvdy1xOTMzX3ByaW50cQloZWFwb3ZlcmZsb3ctcTkzM19wcmludHEucGNhcAloZWFwb3ZlcmZsb3ctcTkzM19wcmludHEub3V0CS10IC12IC1uCitoZWFwb3ZlcmZsb3ctc2xfaWZfcHJpbnQJaGVhcG92ZXJmbG93LXNsX2lmX3ByaW50LnBjYXAJaGVhcG92ZXJmbG93LXNsX2lmX3ByaW50Lm91dAktdCAtdiAtbgoraGVhcG92ZXJmbG93LWlwX3ByaW50X2RlbXV4CWhlYXBvdmVyZmxvdy1pcF9wcmludF9kZW11eC5wY2FwCWhlYXBvdmVyZmxvdy1pcF9wcmludF9kZW11eC5vdXQJLXQgLXYgLW4KK2hlYXBvdmVyZmxvdy1pbl9jaGVja3N1bQloZWFwb3ZlcmZsb3ctaW5fY2hlY2tzdW0ucGNhcAloZWFwb3ZlcmZsb3ctaW5fY2hlY2tzdW0ub3V0CS10IC12IC1uCitoZWFwb3ZlcmZsb3ctdGNwX3ByaW50CWhlYXBvdmVyZmxvdy10Y3BfcHJpbnQucGNhcAloZWFwb3ZlcmZsb3ctdGNwX3ByaW50Lm91dAktdCAtdiAtbgorZ3JlLWhlYXBvdmVyZmxvdy0xCWdyZS1oZWFwb3ZlcmZsb3ctMS5wY2FwCWdyZS1oZWFwb3ZlcmZsb3ctMS5vdXQJLXQgLXYgLW4KK2dyZS1oZWFwb3ZlcmZsb3ctMglncmUtaGVhcG92ZXJmbG93LTIucGNhcAlncmUtaGVhcG92ZXJmbG93LTIub3V0CS10IC12IC1uCitjYWxtLWZhc3QtbWFjLWxvb2t1cC1oZWFwb3ZlcmZsb3cJY2FsbS1mYXN0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93LnBjYXAJY2FsbS1mYXN0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93Lm91dAktdCAtdiAtbgorZ2VvbmV0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93CWdlb25ldC1tYWMtbG9va3VwLWhlYXBvdmVyZmxvdy5wY2FwCWdlb25ldC1tYWMtbG9va3VwLWhlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK3JhZGlvdGFwLWhlYXBvdmVyZmxvdwlyYWRpb3RhcC1oZWFwb3ZlcmZsb3cucGNhcAlyYWRpb3RhcC1oZWFwb3ZlcmZsb3cub3V0IC10IC12IC1uCitpc29jbG5zLWhlYXBvdmVyZmxvdwlpc29jbG5zLWhlYXBvdmVyZmxvdy5wY2FwCWlzb2NsbnMtaGVhcG92ZXJmbG93Lm91dAktdCAtdiAtbgordGNwLWF1dGgtaGVhcG92ZXJmbG93CXRjcC1hdXRoLWhlYXBvdmVyZmxvdy5wY2FwCXRjcC1hdXRoLWhlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK2ZyZjE1LWhlYXBvdmVyZmxvdwlmcmYxNS1oZWFwb3ZlcmZsb3cucGNhcAlmcmYxNS1oZWFwb3ZlcmZsb3cub3V0CS10IC12IC1uCithdG0tb2FtLWhlYXBvdmVyZmxvdwlhdG0tb2FtLWhlYXBvdmVyZmxvdy5wY2FwCWF0bS1vYW0taGVhcG92ZXJmbG93Lm91dAktdCAtdiAtbgordGNwX2hlYWRlcl9oZWFwb3ZlcmZsb3cJdGNwX2hlYWRlcl9oZWFwb3ZlcmZsb3cucGNhcAl0Y3BfaGVhZGVyX2hlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK2lwY29tcC1oZWFwb3ZlcmZsb3cJaXBjb21wLWhlYXBvdmVyZmxvdy5wY2FwCWlwY29tcC1oZWFwb3ZlcmZsb3cub3V0CS10IC12IC1uCitsbGMteGlkLWhlYXBvdmVyZmxvdwlsbGMteGlkLWhlYXBvdmVyZmxvdy5wY2FwCWxsYy14aWQtaGVhcG92ZXJmbG93Lm91dAktdCAtdiAtbgordWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cJdWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cucGNhcAl1ZHAtbGVuZ3RoLWhlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK2FhcnAtaGVhcG92ZXJmbG93LTEJYWFycC1oZWFwb3ZlcmZsb3ctMS5wY2FwCWFhcnAtaGVhcG92ZXJmbG93LTEub3V0CS10IC12IC1uCithYXJwLWhlYXBvdmVyZmxvdy0yCWFhcnAtaGVhcG92ZXJmbG93LTIucGNhcAlhYXJwLWhlYXBvdmVyZmxvdy0yLm91dAktdCAtdiAtbgorbXBscy1sYWJlbC1oZWFwb3ZlcmZsb3cJbXBscy1sYWJlbC1oZWFwb3ZlcmZsb3cucGNhcAltcGxzLWxhYmVsLWhlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK2JhZC1pcHY0LXZlcnNpb24tcGdtLWhlYXBvdmVyZmxvdwliYWQtaXB2NC12ZXJzaW9uLXBnbS1oZWFwb3ZlcmZsb3cucGNhcAliYWQtaXB2NC12ZXJzaW9uLXBnbS1oZWFwb3ZlcmZsb3cub3V0CS10IC12IC1uCitzdHAtaGVhcG92ZXJmbG93LTEJc3RwLWhlYXBvdmVyZmxvdy0xLnBjYXAJc3RwLWhlYXBvdmVyZmxvdy0xLm91dAktdCAtdiAtbgorc3RwLWhlYXBvdmVyZmxvdy0yCXN0cC1oZWFwb3ZlcmZsb3ctMi5wY2FwCXN0cC1oZWFwb3ZlcmZsb3ctMi5vdXQJLXQgLXYgLW4KK3N0cC1oZWFwb3ZlcmZsb3ctMwlzdHAtaGVhcG92ZXJmbG93LTMucGNhcAlzdHAtaGVhcG92ZXJmbG93LTMub3V0CS10IC12IC1uCitzdHAtaGVhcG92ZXJmbG93LTQJc3RwLWhlYXBvdmVyZmxvdy00LnBjYXAJc3RwLWhlYXBvdmVyZmxvdy00Lm91dAktdCAtdiAtbgorc3RwLWhlYXBvdmVyZmxvdy01CXN0cC1oZWFwb3ZlcmZsb3ctNS5wY2FwCXN0cC1oZWFwb3ZlcmZsb3ctNS5vdXQJLXQgLXYgLW4KK2FycC10b28tbG9uZy10aGEJYXJwLXRvby1sb25nLXRoYS5wY2FwCWFycC10b28tbG9uZy10aGEub3V0CS10IC12IC1uCitqdW5pcGVyX2hlYWRlci1oZWFwb3ZlcmZsb3cJanVuaXBlcl9oZWFkZXItaGVhcG92ZXJmbG93LnBjYXAJanVuaXBlcl9oZWFkZXItaGVhcG92ZXJmbG93Lm91dAktdCAtdiAtbgordGZ0cC1oZWFwb3ZlcmZsb3cJdGZ0cC1oZWFwb3ZlcmZsb3cucGNhcAl0ZnRwLWhlYXBvdmVyZmxvdy5vdXQJLXQgLXYgLW4KK3JlbHRzLTB4ODAwMDAwMDAJcmVsdHMtMHg4MDAwMDAwMC5wY2FwCXJlbHRzLTB4ODAwMDAwMDAub3V0CS10IC12IC1uCisKKyMgYmFkIHBhY2tldHMgZnJvbSBCcmlhbiBDYXJwZW50ZXIKK2lwdjZoZHItaGVhcG92ZXJmbG93CWlwdjZoZHItaGVhcG92ZXJmbG93LnBjYXAJaXB2Nmhkci1oZWFwb3ZlcmZsb3cub3V0CS10CitpcHY2aGRyLWhlYXBvdmVyZmxvdy12CWlwdjZoZHItaGVhcG92ZXJmbG93LnBjYXAJaXB2Nmhkci1oZWFwb3ZlcmZsb3ctdi5vdXQJLXQgLXYKK290di1oZWFwb3ZlcmZsb3ctMQlvdHYtaGVhcG92ZXJmbG93LTEucGNhcAkJb3R2LWhlYXBvdmVyZmxvdy0xLm91dAkJLXQgLWMxMAorb3R2LWhlYXBvdmVyZmxvdy0yCW90di1oZWFwb3ZlcmZsb3ctMi5wY2FwCQlvdHYtaGVhcG92ZXJmbG93LTIub3V0CQktdCAtYzEwCitxOTMzLWhlYXBvdmVyZmxvdy0yCXE5MzMtaGVhcG92ZXJmbG93LTIucGNhcAlxOTMzLWhlYXBvdmVyZmxvdy0yLm91dAkJLXQKK2F0bS1oZWFwb3ZlcmZsb3cJYXRtLWhlYXBvdmVyZmxvdy5wY2FwCQlhdG0taGVhcG92ZXJmbG93Lm91dAkJLXQgLWMxIC1lCisKKyMgYmFkIHBhY2tldHMgZnJvbSBLYW1pbCBGcmFua293aWN6Citzbm1wLWhlYXBvdmVyZmxvdy0xCXNubXAtaGVhcG92ZXJmbG93LTEucGNhcAlzbm1wLWhlYXBvdmVyZmxvdy0xLm91dAkJLXQKK3NubXAtaGVhcG92ZXJmbG93LTIJc25tcC1oZWFwb3ZlcmZsb3ctMi5wY2FwCXNubXAtaGVhcG92ZXJmbG93LTIub3V0CQktdAoraXNvY2xucy1oZWFwb3ZlcmZsb3ctMglpc29jbG5zLWhlYXBvdmVyZmxvdy0yLnBjYXAJaXNvY2xucy1oZWFwb3ZlcmZsb3ctMi5vdXQJLXQgLWUgLWMxCitpc29jbG5zLWhlYXBvdmVyZmxvdy0zCWlzb2NsbnMtaGVhcG92ZXJmbG93LTMucGNhcAlpc29jbG5zLWhlYXBvdmVyZmxvdy0zLm91dAktdCAtZSAtYzEKKworIyBSVFAgdGVzdHMKKyMgZnV6emVkIHBjYXAKK3J0cC1zZWctZmF1bHQtMSAgcnRwLXNlZy1mYXVsdC0xLnBjYXAgIHJ0cC1zZWctZmF1bHQtMS5vdXQgIC10IC12IC1UIHJ0cAorcnRwLXNlZy1mYXVsdC0yICBydHAtc2VnLWZhdWx0LTIucGNhcCAgcnRwLXNlZy1mYXVsdC0yLm91dCAgLXQgLXYgLVQgcnRwCisKKyMgTkZTIHRlc3RzCisjIGZ1enplZCBwY2FwCituZnMtc2VnLWZhdWx0LTEgIG5mcy1zZWctZmF1bHQtMS5wY2FwICBuZnMtc2VnLWZhdWx0LTEub3V0ICAtdApkaWZmIC0tZ2l0IGEvdGVzdHMvVEVTVG9uY2UgYi90ZXN0cy9URVNUb25jZQppbmRleCAzMGZmY2NkLi43OGFkMDc1IDEwMDc1NQotLS0gYS90ZXN0cy9URVNUb25jZQorKysgYi90ZXN0cy9URVNUb25jZQpAQCAtMzYsMTEgKzM2LDExIEBACiB9CiAKIGlmKCRyID09IDApIHsKLSAgcHJpbnRmICIgICAgJS0zMHM6IHBhc3NlZFxuIiwgJG5hbWU7CisgIHByaW50ZiAiICAgICUtMzVzOiBwYXNzZWRcbiIsICRuYW1lOwogICB1bmxpbmsgIkRJRkYvJG91dHB1dC5kaWZmIjsKICAgZXhpdCAwOwogfQotcHJpbnRmICIgICAgJS0zMHM6IFRFU1QgRkFJTEVEIiwgJG5hbWU7CitwcmludGYgIiAgICAlLTM1czogVEVTVCBGQUlMRUQiLCAkbmFtZTsKIG9wZW4gRk9VVCwgJz4+ZmFpbHVyZS1vdXRwdXRzLnR4dCc7CiBwcmludGYgRk9VVCAiRmFpbGVkIHRlc3Q6ICRuYW1lXG5cbiI7CiBjbG9zZSBGT1VUOwpAQCAtNTYsNiArNTYsOCBAQAogIyB0aGlzIGlzIG5vdCB3b3JraW5nIHJpZ2h0LCAkciA9PSAweDhiMDAgd2hlbiB0aGVyZSBpcyBhIGNvcmUgZHVtcC4KICMgY2xlYXJseSwgd2UgbmVlZCBzb21lIHBsYXRmb3JtIHNwZWNpZmljIHBlcmwgbWFnaWMgdG8gdGFrZSB0aGlzIGFwYXJ0LCBzbyBsb29rIGZvciAiY29yZSIKICMgdG9vLgorIyBJbiBwYXJ0aWN1bGFyLCBvbiBTb2xhcmlzIDEwIFNQQVJDIGFuIGFsaWdubWVudCBwcm9ibGVtIHJlc3VsdHMgaW4gU0lHSUxMLAorIyBhIGNvcmUgZHVtcCBhbmQgJHIgc2V0IHRvIDB4MDAwMDhhMDAgKCQ/ID09IDEzOCBpbiB0aGUgc2hlbGwpLgogaWYoJHIgJiAxMjcgfHwgLWYgImNvcmUiKSB7CiAgICAgbXkgJHdpdGggPSAoJHIgJiAxMjgpID8gJ3dpdGgnIDogJ3dpdGhvdXQnOwogICAgIGlmKC1mICJjb3JlIikgewpkaWZmIC0tZ2l0IGEvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMS5vdXQgYi90ZXN0cy9hYXJwLWhlYXBvdmVyZmxvdy0xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYyMjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMS5vdXQKQEAgLTAsMCArMSBAQAorYWFycCAgW3xhYXJwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMS5wY2FwIGIvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTNmMjIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hYXJwLWhlYXBvdmVyZmxvdy0xLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMi5vdXQgYi90ZXN0cy9hYXJwLWhlYXBvdmVyZmxvdy0yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNTYyMjIzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMi5vdXQKQEAgLTAsMCArMSBAQAorYWFycCAgW3xhYXJwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMi5wY2FwIGIvdGVzdHMvYWFycC1oZWFwb3ZlcmZsb3ctMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmYmJjODUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hYXJwLWhlYXBvdmVyZmxvdy0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYXJwLXRvby1sb25nLXRoYS5vdXQgYi90ZXN0cy9hcnAtdG9vLWxvbmctdGhhLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jNzBhZDgzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXJwLXRvby1sb25nLXRoYS5vdXQKQEAgLTAsMCArMSBAQAorQVJQLCBVbmtub3duIEhhcmR3YXJlICgxMjMzNikgKGxlbiAxNCksIElQdjQgKGxlbiA0KSwgUmVxdWVzdCB3aG8taGFzIDQ4LjQ4LjQ4LjQ4ICgzMDozMDozMDozMDozMDozMDozMDozMDozMDozMDozMDozMDozMDozMCkgdGVsbCA0OC40OC40OC40OCwgbGVuZ3RoIDgwODQ2NDQxNApkaWZmIC0tZ2l0IGEvdGVzdHMvYXJwLXRvby1sb25nLXRoYS5wY2FwIGIvdGVzdHMvYXJwLXRvby1sb25nLXRoYS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY3NzM5NzQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9hcnAtdG9vLWxvbmctdGhhLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYXRtLWhlYXBvdmVyZmxvdy5vdXQgYi90ZXN0cy9hdG0taGVhcG92ZXJmbG93Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jOWIxMmZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXRtLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorUng6IFZQSTowIFZDSTo1ICBbfGF0bV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2F0bS1oZWFwb3ZlcmZsb3cucGNhcCBiL3Rlc3RzL2F0bS1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OTE4ZjNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXRtLWhlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2F0bS1vYW0taGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL2F0bS1vYW0taGVhcG92ZXJmbG93Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jZGNiOGNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYXRtLW9hbS1oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEgQEAKK1t8b2FtXQpkaWZmIC0tZ2l0IGEvdGVzdHMvYXRtLW9hbS1oZWFwb3ZlcmZsb3cucGNhcCBiL3Rlc3RzL2F0bS1vYW0taGVhcG92ZXJmbG93LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGJiYjRkMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2F0bS1vYW0taGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmFkLWlwdjQtdmVyc2lvbi1wZ20taGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL2JhZC1pcHY0LXZlcnNpb24tcGdtLWhlYXBvdmVyZmxvdy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzY1NWE1MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JhZC1pcHY0LXZlcnNpb24tcGdtLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorSVA2LCB3cm9uZyBsaW5rLWxheWVyIGVuY2Fwc3VsYXRpb24gCmRpZmYgLS1naXQgYS90ZXN0cy9iYWQtaXB2NC12ZXJzaW9uLXBnbS1oZWFwb3ZlcmZsb3cucGNhcCBiL3Rlc3RzL2JhZC1pcHY0LXZlcnNpb24tcGdtLWhlYXBvdmVyZmxvdy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM2NWM0ZTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iYWQtaXB2NC12ZXJzaW9uLXBnbS1oZWFwb3ZlcmZsb3cucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9iZmQtcmF3LWF1dGgtbWQ1LXYub3V0IGIvdGVzdHMvYmZkLXJhdy1hdXRoLW1kNS12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjc2NmZmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmZkLXJhdy1hdXRoLW1kNS12Lm91dApAQCAtMCwwICsxLDM0MSBAQAorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgNCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgNiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgOCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgOSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTAsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDExLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxMiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDE0LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDE3LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxOCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTksIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDIwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAyMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMjIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDIzLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAyNCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMjUsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDI2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAyNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMjgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDI5LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA0OAorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA0OAorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBLZXllZCBNRDUgKDIpLCBsZW5ndGg6IDI0CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBEaWdlc3Q6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAzMCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNDgKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNDgKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogS2V5ZWQgTUQ1ICgyKSwgbGVuZ3RoOiAyNAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgRGlnZXN0OiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNgorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMzEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDQ4CisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDQ4CisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IEtleWVkIE1ENSAoMiksIGxlbmd0aDogMjQKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIERpZ2VzdDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYKZGlmZiAtLWdpdCBhL3Rlc3RzL2JmZC1yYXctYXV0aC1tZDUub3V0IGIvdGVzdHMvYmZkLXJhdy1hdXRoLW1kNS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWVlMzE2NQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JmZC1yYXctYXV0aC1tZDUub3V0CkBAIC0wLDAgKzEsMzEgQEAKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDQ4CitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNDgKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA0OApkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLW1kNS5wY2FwIGIvdGVzdHMvYmZkLXJhdy1hdXRoLW1kNS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlkZTZkNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZmQtcmF3LWF1dGgtbWQ1LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLXNoYTEtdi5vdXQgYi90ZXN0cy9iZmQtcmF3LWF1dGgtc2hhMS12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmI0NTUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmZkLXJhdy1hdXRoLXNoYTEtdi5vdXQKQEAgLTAsMCArMSwyNzUgQEAKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDQsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDUsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDcsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDksIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgwKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA1MgorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA1MgorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBNZXRpY3Vsb3VzIEtleWVkIFNIQTEgKDUpLCBsZW5ndGg6IDI4CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBIYXNoOiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTFhCitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4MCkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNTIKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNTIKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogTWV0aWN1bG91cyBLZXllZCBTSEExICg1KSwgbGVuZ3RoOiAyOAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgSGFzaDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkxYQorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEzLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgwKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA1MgorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA1MgorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBNZXRpY3Vsb3VzIEtleWVkIFNIQTEgKDUpLCBsZW5ndGg6IDI4CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBIYXNoOiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTFhCitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxNCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4MCkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNTIKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNTIKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogTWV0aWN1bG91cyBLZXllZCBTSEExICg1KSwgbGVuZ3RoOiAyOAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgSGFzaDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkxYQorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTUsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDE2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgwKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA1MgorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA1MgorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBNZXRpY3Vsb3VzIEtleWVkIFNIQTEgKDUpLCBsZW5ndGg6IDI4CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBIYXNoOiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTFhCitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4MCkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNTIKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNTIKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogTWV0aWN1bG91cyBLZXllZCBTSEExICg1KSwgbGVuZ3RoOiAyOAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgSGFzaDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkxYQorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDE5LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgwKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA1MgorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA1MgorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBNZXRpY3Vsb3VzIEtleWVkIFNIQTEgKDUpLCBsZW5ndGg6IDI4CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBIYXNoOiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTFhCitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAyMCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4MCkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNTIKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNTIKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogTWV0aWN1bG91cyBLZXllZCBTSEExICg1KSwgbGVuZ3RoOiAyOAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgSGFzaDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkxYQorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMjEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDIyLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgwKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiA1MgorCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiA1MgorCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBNZXRpY3Vsb3VzIEtleWVkIFNIQTEgKDUpLCBsZW5ndGg6IDI4CisJICBBdXRoIEtleSBJRDogMiwgU2VxdWVuY2UgTnVtYmVyOiAweDAwMDAwMDA1CisJICBIYXNoOiAwMTAyMDMwNDA1MDYwNzA4MDkxMDExMTIxMzE0MTUxNjE3MTgxOTFhCitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAyMywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4MCkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogNTIKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogNTIKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogTWV0aWN1bG91cyBLZXllZCBTSEExICg1KSwgbGVuZ3RoOiAyOAorCSAgQXV0aCBLZXkgSUQ6IDIsIFNlcXVlbmNlIE51bWJlcjogMHgwMDAwMDAwNQorCSAgSGFzaDogMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkxYQorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMjQsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODApCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDUyCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDUyCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IE1ldGljdWxvdXMgS2V5ZWQgU0hBMSAoNSksIGxlbmd0aDogMjgKKwkgIEF1dGggS2V5IElEOiAyLCBTZXF1ZW5jZSBOdW1iZXI6IDB4MDAwMDAwMDUKKwkgIEhhc2g6IDAxMDIwMzA0MDUwNjA3MDgwOTEwMTExMjEzMTQxNTE2MTcxODE5MWEKZGlmZiAtLWdpdCBhL3Rlc3RzL2JmZC1yYXctYXV0aC1zaGExLm91dCBiL3Rlc3RzL2JmZC1yYXctYXV0aC1zaGExLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42YTVlZDhhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmZkLXJhdy1hdXRoLXNoYTEub3V0CkBAIC0wLDAgKzEsMjUgQEAKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDUyCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogNTIKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiA1MgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLXNoYTEucGNhcCBiL3Rlc3RzL2JmZC1yYXctYXV0aC1zaGExLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZhZmI2MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JmZC1yYXctYXV0aC1zaGExLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLXNpbXBsZS12Lm91dCBiL3Rlc3RzL2JmZC1yYXctYXV0aC1zaW1wbGUtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzI3NmYwNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JmZC1yYXctYXV0aC1zaW1wbGUtdi5vdXQKQEAgLTAsMCArMSwxNTAgQEAKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDQsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDUsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDcsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDksIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYxKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiAzMworCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiAzMworCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBTaW1wbGUgUGFzc3dvcmQgKDEpLCBsZW5ndGg6IDkKKwkgIEF1dGggS2V5IElEOiAyLCBQYXNzd29yZDogc2VjcmV0CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MSkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogMzMKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogMzMKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogU2ltcGxlIFBhc3N3b3JkICgxKSwgbGVuZ3RoOiA5CisJICBBdXRoIEtleSBJRDogMiwgUGFzc3dvcmQ6IHNlY3JldAorSVAgKHRvcyAweDAsIHR0bCAxMCwgaWQgMTIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjEpCisgICAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBsZW5ndGg6IDMzCisJQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgRGlhZ25vc3RpYzogTm8gRGlhZ25vc3RpYyAoMHgwMCkKKwlEZXRlY3Rpb24gVGltZXIgTXVsdGlwbGllcjogNSAoNTAwMCBtcyBEZXRlY3Rpb24gdGltZSksIEJGRCBMZW5ndGg6IDMzCisJTXkgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMSwgWW91ciBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAwCisJICBEZXNpcmVkIG1pbiBUeCBJbnRlcnZhbDogICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIFJ4IEludGVydmFsOiAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBFY2hvIEludGVydmFsOiAgICAwIG1zCisJQXV0aGVudGljYXRpb246IFNpbXBsZSBQYXNzd29yZCAoMSksIGxlbmd0aDogOQorCSAgQXV0aCBLZXkgSUQ6IDIsIFBhc3N3b3JkOiBzZWNyZXQKK0lQICh0b3MgMHgwLCB0dGwgMTAsIGlkIDEzLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYxKQorICAgIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgbGVuZ3RoOiAzMworCUNvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIERpYWdub3N0aWM6IE5vIERpYWdub3N0aWMgKDB4MDApCisJRGV0ZWN0aW9uIFRpbWVyIE11bHRpcGxpZXI6IDUgKDUwMDAgbXMgRGV0ZWN0aW9uIHRpbWUpLCBCRkQgTGVuZ3RoOiAzMworCU15IERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDEsIFlvdXIgRGlzY3JpbWluYXRvcjogMHgwMDAwMDAwMAorCSAgRGVzaXJlZCBtaW4gVHggSW50ZXJ2YWw6ICAgIDEwMDAgbXMKKwkgIFJlcXVpcmVkIG1pbiBSeCBJbnRlcnZhbDogICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gRWNobyBJbnRlcnZhbDogICAgMCBtcworCUF1dGhlbnRpY2F0aW9uOiBTaW1wbGUgUGFzc3dvcmQgKDEpLCBsZW5ndGg6IDkKKwkgIEF1dGggS2V5IElEOiAyLCBQYXNzd29yZDogc2VjcmV0CitJUCAodG9zIDB4MCwgdHRsIDEwLCBpZCAxNCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MSkKKyAgICAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIGxlbmd0aDogMzMKKwlDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBEaWFnbm9zdGljOiBObyBEaWFnbm9zdGljICgweDAwKQorCURldGVjdGlvbiBUaW1lciBNdWx0aXBsaWVyOiA1ICg1MDAwIG1zIERldGVjdGlvbiB0aW1lKSwgQkZEIExlbmd0aDogMzMKKwlNeSBEaXNjcmltaW5hdG9yOiAweDAwMDAwMDAxLCBZb3VyIERpc2NyaW1pbmF0b3I6IDB4MDAwMDAwMDAKKwkgIERlc2lyZWQgbWluIFR4IEludGVydmFsOiAgICAxMDAwIG1zCisJICBSZXF1aXJlZCBtaW4gUnggSW50ZXJ2YWw6ICAgMTAwMCBtcworCSAgUmVxdWlyZWQgbWluIEVjaG8gSW50ZXJ2YWw6ICAgIDAgbXMKKwlBdXRoZW50aWNhdGlvbjogU2ltcGxlIFBhc3N3b3JkICgxKSwgbGVuZ3RoOiA5CisJICBBdXRoIEtleSBJRDogMiwgUGFzc3dvcmQ6IHNlY3JldApkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLXNpbXBsZS5vdXQgYi90ZXN0cy9iZmQtcmF3LWF1dGgtc2ltcGxlLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40MGI0ZjM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmZkLXJhdy1hdXRoLXNpbXBsZS5vdXQKQEAgLTAsMCArMSwxNSBAQAorSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDMzCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogMzMKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiAzMworSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDMzCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogMzMKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiAzMworSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDMzCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogMzMKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiAzMworSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDMzCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogMzMKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiAzMworSVAgMTkyLjg1LjEuMi4xMDI0ID4gMTkyLjAuMC4xLjM3ODQ6IEJGRHYxLCBDb250cm9sLCBTdGF0ZSBEb3duLCBGbGFnczogW0F1dGhlbnRpY2F0aW9uIFByZXNlbnRdLCBsZW5ndGg6IDMzCitJUCAxOTIuODUuMS4yLjEwMjQgPiAxOTIuMC4wLjEuMzc4NDogQkZEdjEsIENvbnRyb2wsIFN0YXRlIERvd24sIEZsYWdzOiBbQXV0aGVudGljYXRpb24gUHJlc2VudF0sIGxlbmd0aDogMzMKK0lQIDE5Mi44NS4xLjIuMTAyNCA+IDE5Mi4wLjAuMS4zNzg0OiBCRkR2MSwgQ29udHJvbCwgU3RhdGUgRG93biwgRmxhZ3M6IFtBdXRoZW50aWNhdGlvbiBQcmVzZW50XSwgbGVuZ3RoOiAzMwpkaWZmIC0tZ2l0IGEvdGVzdHMvYmZkLXJhdy1hdXRoLXNpbXBsZS5wY2FwIGIvdGVzdHMvYmZkLXJhdy1hdXRoLXNpbXBsZS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ4Y2YzYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZmQtcmF3LWF1dGgtc2ltcGxlLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvYmdwLWFpZ3Aub3V0IGIvdGVzdHMvYmdwLWFpZ3Aub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNmZDY2NzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZ3AtYWlncC5vdXQKQEAgLTAsMCArMSwyMCBAQAorSVAgKHRvcyAweGMwLCB0dGwgNjQsIGlkIDM1MDYzLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggMTgyKQorICAgIDE3Mi4xNi4yMC41LjU5NjMxID4gMTcyLjE2LjIwLjMuMTc5OiBGbGFncyBbUC5dLCBja3N1bSAweGUxMTIgKGNvcnJlY3QpLCBzZXEgMzkyMzc4MzE3MTozOTIzNzgzMzAxLCBhY2sgMzM0MTc3MzY5Mywgd2luIDE2Mzg0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAzMjczNDAyMiBlY3IgMzI2OTU2NzFdLCBsZW5ndGggMTMwOiBCR1AKKwlVcGRhdGUgTWVzc2FnZSAoMiksIGxlbmd0aDogMTAwCisJICBPcmlnaW4gKDEpLCBsZW5ndGg6IDEsIEZsYWdzIFtUXTogSW5jb21wbGV0ZQorCSAgQVMgUGF0aCAoMiksIGxlbmd0aDogMCwgRmxhZ3MgW1RdOiBlbXB0eQorCSAgTXVsdGkgRXhpdCBEaXNjcmltaW5hdG9yICg0KSwgbGVuZ3RoOiA0LCBGbGFncyBbT106IDAKKwkgIExvY2FsIFByZWZlcmVuY2UgKDUpLCBsZW5ndGg6IDQsIEZsYWdzIFtUXTogMTAwCisJICBDb21tdW5pdHkgKDgpLCBsZW5ndGg6IDQsIEZsYWdzIFtPVF06IDY1MDAwOjExMjAxCisJICBPcmlnaW5hdG9yIElEICg5KSwgbGVuZ3RoOiA0LCBGbGFncyBbT106IDE3Mi4xNi4yMS40CisJICBDbHVzdGVyIExpc3QgKDEwKSwgbGVuZ3RoOiA0LCBGbGFncyBbT106IDE3Mi4xNi4yMC41CisJICBBY2N1bXVsYXRlZCBJR1AgTWV0cmljICgyNiksIGxlbmd0aDogMTEsIEZsYWdzIFtPXTogCisJICAgIEFJR1AgVExWICgxKSwgbGVuZ3RoIDExLCBtZXRyaWMgMjAwMAorCSAgTXVsdGktUHJvdG9jb2wgUmVhY2ggTkxSSSAoMTQpLCBsZW5ndGg6IDE3LCBGbGFncyBbT0VdOiAKKwkgICAgQUZJOiBJUHY0ICgxKSwgU0FGSTogbGFiZWxlZCBVbmljYXN0ICg0KQorCSAgICBuZXh0aG9wOiAxNzIuMTYuMjAuNSwgbmgtbGVuZ3RoOiA0LCBubyBTTlBBCisJICAgICAgMTcyLjE2LjIxLjQvMzIsIGxhYmVsOjMwMDA5NiAoYm90dG9tKQorCVVwZGF0ZSBNZXNzYWdlICgyKSwgbGVuZ3RoOiAzMAorCSAgTXVsdGktUHJvdG9jb2wgVW5yZWFjaCBOTFJJICgxNSksIGxlbmd0aDogMywgRmxhZ3MgW09FXTogCisJICAgIEFGSTogSVB2NCAoMSksIFNBRkk6IGxhYmVsZWQgVW5pY2FzdCAoNCkKKwkgICAgICBFbmQtb2YtUmliIE1hcmtlciAoZW1wdHkgTkxSSSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2JncC1haWdwLnBjYXAgYi90ZXN0cy9iZ3AtYWlncC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlNTVlMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9iZ3AtYWlncC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2JncC1sYXJnZS1jb21tdW5pdHkub3V0IGIvdGVzdHMvYmdwLWxhcmdlLWNvbW11bml0eS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzlkY2Q0MAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2JncC1sYXJnZS1jb21tdW5pdHkub3V0CkBAIC0wLDAgKzEsNDIgQEAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDE0NjMwLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDQyNykKKyAgICAxOTIuMC4yLjIuNDY2MDUgPiAxOTIuMC4yLjMuMTc5OiBGbGFncyBbUC5dLCBja3N1bSAweDIzMmYgKGNvcnJlY3QpLCBzZXEgMTI5MzEwNDA5MToxMjkzMTA0NDY2LCBhY2sgNDA5Mzc1NDU1NCwgd2luIDQ1Nywgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgNjgzNjcgZWNyIDY4MzY3XSwgbGVuZ3RoIDM3NTogQkdQCisJVXBkYXRlIE1lc3NhZ2UgKDIpLCBsZW5ndGg6IDc1CisJICBPcmlnaW4gKDEpLCBsZW5ndGg6IDEsIEZsYWdzIFtUXTogSUdQCisJICBBUyBQYXRoICgyKSwgbGVuZ3RoOiA2LCBGbGFncyBbVF06IDY1NTM2IAorCSAgTmV4dCBIb3AgKDMpLCBsZW5ndGg6IDQsIEZsYWdzIFtUXTogMTkyLjAuMi4yCisJICBMYXJnZSBDb21tdW5pdHkgKDMyKSwgbGVuZ3RoOiAyNCwgRmxhZ3MgW09UXTogCisJICAgIDY1NTM1OjE6MSwgNDI5NDk2NzI5NTo0Mjk0OTY3Mjk1OjQyOTQ5NjcyOTUKKwkgIFVwZGF0ZWQgcm91dGVzOgorCSAgICAyMDMuMC4xMTMuMTYvMzIKKwlVcGRhdGUgTWVzc2FnZSAoMiksIGxlbmd0aDogNzUKKwkgIE9yaWdpbiAoMSksIGxlbmd0aDogMSwgRmxhZ3MgW1RdOiBJR1AKKwkgIEFTIFBhdGggKDIpLCBsZW5ndGg6IDYsIEZsYWdzIFtUXTogNjU1MzYgCisJICBOZXh0IEhvcCAoMyksIGxlbmd0aDogNCwgRmxhZ3MgW1RdOiAxOTIuMC4yLjIKKwkgIExhcmdlIENvbW11bml0eSAoMzIpLCBsZW5ndGg6IDI0LCBGbGFncyBbT1RdOiAKKwkgICAgNjU1MzY6MToxLCA2NTUzNjoxOjIKKwkgIFVwZGF0ZWQgcm91dGVzOgorCSAgICAyMDMuMC4xMTMuMTIvMzIKKwlVcGRhdGUgTWVzc2FnZSAoMiksIGxlbmd0aDogNjMKKwkgIE9yaWdpbiAoMSksIGxlbmd0aDogMSwgRmxhZ3MgW1RdOiBJR1AKKwkgIEFTIFBhdGggKDIpLCBsZW5ndGg6IDYsIEZsYWdzIFtUXTogNjU1MzYgCisJICBOZXh0IEhvcCAoMyksIGxlbmd0aDogNCwgRmxhZ3MgW1RdOiAxOTIuMC4yLjIKKwkgIExhcmdlIENvbW11bml0eSAoMzIpLCBsZW5ndGg6IDEyLCBGbGFncyBbT1RdOiAKKwkgICAgNjU1MzY6MToxCisJICBVcGRhdGVkIHJvdXRlczoKKwkgICAgMjAzLjAuMTEzLjExLzMyCisJVXBkYXRlIE1lc3NhZ2UgKDIpLCBsZW5ndGg6IDc1CisJICBPcmlnaW4gKDEpLCBsZW5ndGg6IDEsIEZsYWdzIFtUXTogSUdQCisJICBBUyBQYXRoICgyKSwgbGVuZ3RoOiA2LCBGbGFncyBbVF06IDY1NTM2IAorCSAgTmV4dCBIb3AgKDMpLCBsZW5ndGg6IDQsIEZsYWdzIFtUXTogMTkyLjAuMi4yCisJICBMYXJnZSBDb21tdW5pdHkgKDMyKSwgbGVuZ3RoOiAyNCwgRmxhZ3MgW09UXTogCisJICAgIDY1NTM2OjA6MSwgNjU1MzY6MTowCisJICBVcGRhdGVkIHJvdXRlczoKKwkgICAgMjAzLjAuMTEzLjE1LzMyCisJVXBkYXRlIE1lc3NhZ2UgKDIpLCBsZW5ndGg6IDg3CisJICBPcmlnaW4gKDEpLCBsZW5ndGg6IDEsIEZsYWdzIFtUXTogSUdQCisJICBBUyBQYXRoICgyKSwgbGVuZ3RoOiA2LCBGbGFncyBbVF06IDY1NTM2IAorCSAgTmV4dCBIb3AgKDMpLCBsZW5ndGg6IDQsIEZsYWdzIFtUXTogMTkyLjAuMi4yCisJICBMYXJnZSBDb21tdW5pdHkgKDMyKSwgbGVuZ3RoOiAzNiwgRmxhZ3MgW09UXTogCisJICAgIDY1NTM2OjE6MSwgNjU1MzY6MToyLCA2NTUzNjoxOjMKKwkgIFVwZGF0ZWQgcm91dGVzOgorCSAgICAyMDMuMC4xMTMuMTMvMzIKZGlmZiAtLWdpdCBhL3Rlc3RzL2JncC1sYXJnZS1jb21tdW5pdHkucGNhcCBiL3Rlc3RzL2JncC1sYXJnZS1jb21tdW5pdHkucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43YjUxMThkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvYmdwLWxhcmdlLWNvbW11bml0eS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2NhbG0tZmFzdC1tYWMtbG9va3VwLWhlYXBvdmVyZmxvdy5vdXQgYi90ZXN0cy9jYWxtLWZhc3QtbWFjLWxvb2t1cC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2ZTZmNDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jYWxtLWZhc3QtbWFjLWxvb2t1cC1oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEsNSBAQAorUS45MjIsIGludmFsaWQgYWRkcmVzcworQ0FMTSBGQVNUOyBTcmNOd3JlZjo0ODsgRHN0TndyZWY6NDg7IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgMDAwMDAwMDAwMDAwMDAwMAorCTB4MDAxMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgMDAwMDAwMDAwMDAwMDAwMAorCTB4MDAyMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgMDAwMDAwMDAwMApkaWZmIC0tZ2l0IGEvdGVzdHMvY2FsbS1mYXN0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9jYWxtLWZhc3QtbWFjLWxvb2t1cC1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42NGNhNTgxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY2FsbS1mYXN0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvY3J5cHRvLnNoIGIvdGVzdHMvY3J5cHRvLnNoCmluZGV4IGJkNDE5MjEuLmYyMGUyMzkgMTAwNzU1Ci0tLSBhL3Rlc3RzL2NyeXB0by5zaAorKysgYi90ZXN0cy9jcnlwdG8uc2gKQEAgLTEwLDcgKzEwLDcgQEAKIAkjIFJlYWRpbmcgdGhlIHNlY3JldChzKSBmcm9tIGEgZmlsZSBkb2VzIG5vdCB3b3JrIHdpdGggQ2Fwc2ljdW0uCiAJaWYgZ3JlcCAnXiNkZWZpbmUgSEFWRV9DQVBTSUNVTSAxJCcgLi4vY29uZmlnLmggPi9kZXYvbnVsbAogCXRoZW4KLQkJRk9STUFUPScgICAgJS0zMHM6IFRFU1QgU0tJUFBFRCAoY29tcGlsZWQgdy9DYXBzaWN1bSlcbicKKwkJRk9STUFUPScgICAgJS0zNXM6IFRFU1QgU0tJUFBFRCAoY29tcGlsZWQgdy9DYXBzaWN1bSlcbicKIAkJcHJpbnRmICIkRk9STUFUIiBlc3A0CiAJCXByaW50ZiAiJEZPUk1BVCIgZXNwNQogCQlwcmludGYgIiRGT1JNQVQiIGVzcHVkcDEKQEAgLTI0LDcgKzI0LDcgQEAKIAkJLi9URVNUb25jZSBpc2FrbXA0IGlzYWttcDQ1MDAucGNhcCBpc2FrbXA0Lm91dCAnLXQgLUUgImZpbGUgZXNwLXNlY3JldHMudHh0IicKIAlmaQogZWxzZQotCUZPUk1BVD0nICAgICUtMzBzOiBURVNUIFNLSVBQRUQgKGNvbXBpbGVkIHcvbyBPcGVuU1NMKVxuJworCUZPUk1BVD0nICAgICUtMzVzOiBURVNUIFNLSVBQRUQgKGNvbXBpbGVkIHcvbyBPcGVuU1NMKVxuJwogCXByaW50ZiAiJEZPUk1BVCIgZXNwMQogCXByaW50ZiAiJEZPUk1BVCIgZXNwMgogCXByaW50ZiAiJEZPUk1BVCIgZXNwMwpkaWZmIC0tZ2l0IGEvdGVzdHMvY3ZlLTIwMTQtODc2Ny1PTFNSLm91dCBiL3Rlc3RzL2N2ZS0yMDE0LTg3NjctT0xTUi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWRmYjA2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2N2ZS0yMDE0LTg3NjctT0xTUi5vdXQKQEAgLTAsMCArMSw0IEBACitJUCAodG9zIDB4MTUsRUNUKDEpLCB0dGwgNzcsIGlkIDYyMzM1LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MSwgYmFkIGNrc3VtIDMwYzYgKC0+MjJhZikhKQorICAgIDEwLjEuMS4xMDQuNjk4ID4gMTAuMi4yLjIuNTE0OiBPTFNSdjQsIHNlcSAweDAyMDIsIGxlbmd0aCAzMworCVRDIE1lc3NhZ2UgKDB4MDIpLCBvcmlnaW5hdG9yIDIuMi4yLjIsIHR0bCAyLCBob3AgMgorCSAgdnRpbWUgMC4wNzBzLCBtc2ctc2VxIDB4MDIwMiwgbGVuZ3RoIDIgKGludmFsaWQpCmRpZmYgLS1naXQgYS90ZXN0cy9jdmUtMjAxNC04NzY3LU9MU1IucGNhcCBiL3Rlc3RzL2N2ZS0yMDE0LTg3NjctT0xTUi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY3MDM2ZWQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jdmUtMjAxNC04NzY3LU9MU1IucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9jdmUtMjAxNC04NzY4LUdlb25ldC5vdXQgYi90ZXN0cy9jdmUtMjAxNC04NzY4LUdlb25ldC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGI3MTgyZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2N2ZS0yMDE0LTg3NjgtR2VvbmV0Lm91dApAQCAtMCwwICsxIEBACitHZW9OZXQgc3JjOjA3OjA3OjA3OjA3OjA3OjA3OyB2OjEyIE5IOjYtVW5rbm93biBIVDo1LTEtVG9wb1Njb3BlQmNhc3QtTUggSG9wTGltOjcgUGF5bG9hZDoxNzk5IEdOX0FERFI6ZWY6MDY6MDc6MzU6OTc6MDA6MjQ6OGMgbGF0OjQ1MjE5ODQgbG9uOjEwMzkzNjgwMDAgTWFsZm9ybWVkIChzbWFsbCkgCmRpZmYgLS1naXQgYS90ZXN0cy9jdmUtMjAxNC04NzY4LUdlb25ldC5wY2FwIGIvdGVzdHMvY3ZlLTIwMTQtODc2OC1HZW9uZXQucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNDVlZDI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY3ZlLTIwMTQtODc2OC1HZW9uZXQucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9jdmUtMjAxNC04NzY5LUFPRFYub3V0IGIvdGVzdHMvY3ZlLTIwMTQtODc2OS1BT0RWLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmI3MGI0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvY3ZlLTIwMTQtODc2OS1BT0RWLm91dApAQCAtMCwwICsxLDIgQEAKK0lQIHRydW5jYXRlZC1pcCAtIDU4ODgwIGJ5dGVzIG1pc3NpbmchICh0b3MgMHgwLCB0dGwgNjQsIGlkIDYyMzM1LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA1ODk0MSwgYmFkIGNrc3VtIDMwYzYgKC0+NDljMykhKQorICAgIDEwLjEuMS4xMDQuNjU0ID4gMTAuMi4yLjIuMzMyODogIGFvZHYgcmVyciAgW2l0ZW1zIDBdIFsxOTE5Ml06CmRpZmYgLS1naXQgYS90ZXN0cy9jdmUtMjAxNC04NzY5LUFPRFYucGNhcCBiL3Rlc3RzL2N2ZS0yMDE0LTg3NjktQU9EVi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNjZDE1NjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9jdmUtMjAxNC04NzY5LUFPRFYucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9jdmUyMDE1LTAyNjEtY3Jhc2gucGNhcCBiL3Rlc3RzL2N2ZTIwMTUtMDI2MS1jcmFzaC5wY2FwCmluZGV4IGM4NzZjMWYuLjAxY2QzODEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2N2ZTIwMTUtMDI2MS1jcmFzaC5wY2FwCisrKyBiL3Rlc3RzL2N2ZTIwMTUtMDI2MS1jcmFzaC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2N2ZTIwMTUtMDI2MS1pcHY2Lm91dCBiL3Rlc3RzL2N2ZTIwMTUtMDI2MS1pcHY2Lm91dAppbmRleCA0Njc0YWRhLi4zNjU4YzE5IDEwMDY0NAotLS0gYS90ZXN0cy9jdmUyMDE1LTAyNjEtaXB2Ni5vdXQKKysrIGIvdGVzdHMvY3ZlMjAxNS0wMjYxLWlwdjYub3V0CkBAIC0xLDMgKzEsMyBAQAotSVA2IHRydW5jYXRlZC1pcDYgLSAyNjMyNSBieXRlcyBtaXNzaW5nIShjbGFzcyAweDc2LCBmbG93bGFiZWwgMHg3Njc2NywgaGxpbSAxMDMsIG5leHQtaGVhZGVyIE1vYmlsaXR5ICgxMzUpIHBheWxvYWQgbGVuZ3RoOiAyNjQ3MCkgNjc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3ID4gNjc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzA1OiBtb2JpbGl0eTogQlUgc2VxIz0yNjQ3MSBITCBsaWZldGltZT0xMDU4ODQodHlwZS0weDY3OiBsZW49MTAzKVt0cnVuY10gCitJUDYgdHJ1bmNhdGVkLWlwNiAtIDI2MzI1IGJ5dGVzIG1pc3NpbmchKGNsYXNzIDB4NzYsIGZsb3dsYWJlbCAweDc2NzY3LCBobGltIDEwMywgbmV4dC1oZWFkZXIgTW9iaWxpdHkgKDEzNSkgcGF5bG9hZCBsZW5ndGg6IDI2NDcwKSA2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3NjcgPiA2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3MDU6IG1vYmlsaXR5OiBCVSBzZXEjPTI2NDcxIEhMIGxpZmV0aW1lPTEwNTg4NCh0eXBlLTB4Njc6IGxlbj0xMDMpW3xNT0JJTElUWV0KIElQNiB0cnVuY2F0ZWQtaXA2IC0gMjYzMjUgYnl0ZXMgbWlzc2luZyEoY2xhc3MgMHg3NiwgZmxvd2xhYmVsIDB4NzY3NjcsIGhsaW0gMTAzLCBuZXh0LWhlYWRlciBNb2JpbGl0eSAoMTM1KSBwYXlsb2FkIGxlbmd0aDogMjY0NzApIDY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2NyA+IDY3Njc6Njc2Nzo0ZjY3OjY3Njc6Njc2Nzo2NzY3OjY3Njc6Njc2NzogKGhlYWRlciBsZW5ndGggOCBpcyB0b28gc21hbGwgZm9yIHR5cGUgNilbfE1PQklMSVRZXQogRVhJVCBDT0RFIDAwMDAwMTAwCmRpZmYgLS1naXQgYS90ZXN0cy9kaGNwLW11ZC5vdXQgYi90ZXN0cy9kaGNwLW11ZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ5Mjc0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RoY3AtbXVkLm91dApAQCAtMCwwICsxLDM2IEBACitJUCAodG9zIDB4MCwgdHRsIDI1NSwgaWQgOTQ1OSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MjIpCisgICAgNjIuMTIuMTczLjEyMS42NyA+IDYyLjEyLjE3My4xMTQuNjc6IFt1ZHAgc3VtIG9rXSBCT09UUC9ESENQLCBSZXF1ZXN0IGZyb20gYjg6Mjc6ZWI6Yjg6NTM6YzgsIGxlbmd0aCAzOTQsIGhvcHMgMSwgeGlkIDB4NjhjNDg0NywgRmxhZ3MgW25vbmVdICgweDAwMDApCisJICBDbGllbnQtSVAgNjIuMTIuMTczLjEyMworCSAgR2F0ZXdheS1JUCA2Mi4xMi4xNzMuMTIxCisJICBDbGllbnQtRXRoZXJuZXQtQWRkcmVzcyBiODoyNzplYjpiODo1MzpjOAorCSAgVmVuZG9yLXJmYzEwNDggRXh0ZW5zaW9ucworCSAgICBNYWdpYyBDb29raWUgMHg2MzgyNTM2MworCSAgICBESENQLU1lc3NhZ2UgT3B0aW9uIDUzLCBsZW5ndGggMTogUmVxdWVzdAorCSAgICBDbGllbnQtSUQgT3B0aW9uIDYxLCBsZW5ndGggNzogZXRoZXIgYjg6Mjc6ZWI6Yjg6NTM6YzgKKwkgICAgTVNaIE9wdGlvbiA1NywgbGVuZ3RoIDI6IDE0NzIKKwkgICAgTVVELVVSTCBPcHRpb24gMTYxLCBsZW5ndGggNTQ6ICJodHRwczovL211ZGN0bC5leGFtcGxlLmNvbS8ud2VsbC1rbm93bi9tdWQvdjEvcmFzYnAxMDEiCisJICAgIFZlbmRvci1DbGFzcyBPcHRpb24gNjAsIGxlbmd0aCA0NTogImRoY3BjZC02LjExLjU6TGludXgtNC4xLjE4LXY3Kzphcm12N2w6QkNNMjcwOSIKKwkgICAgSG9zdG5hbWUgT3B0aW9uIDEyLCBsZW5ndGggMTE6ICJyYXNwYmVycnlwaSIKKwkgICAgVDE0NSBPcHRpb24gMTQ1LCBsZW5ndGggMTogMQorCSAgICBQYXJhbWV0ZXItUmVxdWVzdCBPcHRpb24gNTUsIGxlbmd0aCAxNjogCisJICAgICAgU3VibmV0LU1hc2ssIENsYXNzbGVzcy1TdGF0aWMtUm91dGUsIFN0YXRpYy1Sb3V0ZSwgRGVmYXVsdC1HYXRld2F5CisJICAgICAgRG9tYWluLU5hbWUtU2VydmVyLCBIb3N0bmFtZSwgRG9tYWluLU5hbWUsIEJSCisJICAgICAgTlRQLCBMZWFzZS1UaW1lLCBTZXJ2ZXItSUQsIFJOCisJICAgICAgUkIsIFBPU0lYLVRaLCBUWi1OYW1lLCBPcHRpb24gMTE5CitJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCAxMDMwNSwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMzM4KQorICAgIDYyLjEyLjE3My4xMTQuNjcgPiA2Mi4xMi4xNzMuMTIxLjY3OiBbdWRwIHN1bSBva10gQk9PVFAvREhDUCwgUmVwbHksIGxlbmd0aCAzMTAsIGhvcHMgMSwgeGlkIDB4NjhjNDg0NywgRmxhZ3MgW25vbmVdICgweDAwMDApCisJICBDbGllbnQtSVAgNjIuMTIuMTczLjEyMworCSAgWW91ci1JUCA2Mi4xMi4xNzMuMTIzCisJICBTZXJ2ZXItSVAgNjIuMTIuMTczLjExNAorCSAgR2F0ZXdheS1JUCA2Mi4xMi4xNzMuMTIxCisJICBDbGllbnQtRXRoZXJuZXQtQWRkcmVzcyBiODoyNzplYjpiODo1MzpjOAorCSAgVmVuZG9yLXJmYzEwNDggRXh0ZW5zaW9ucworCSAgICBNYWdpYyBDb29raWUgMHg2MzgyNTM2MworCSAgICBESENQLU1lc3NhZ2UgT3B0aW9uIDUzLCBsZW5ndGggMTogQUNLCisJICAgIFNlcnZlci1JRCBPcHRpb24gNTQsIGxlbmd0aCA0OiA2Mi4xMi4xNzMuMTE0CisJICAgIExlYXNlLVRpbWUgT3B0aW9uIDUxLCBsZW5ndGggNDogNjAwCisJICAgIFN1Ym5ldC1NYXNrIE9wdGlvbiAxLCBsZW5ndGggNDogMjU1LjI1NS4yNTUuMjQ4CisJICAgIERlZmF1bHQtR2F0ZXdheSBPcHRpb24gMywgbGVuZ3RoIDQ6IDYyLjEyLjE3My4xMjEKKwkgICAgRG9tYWluLU5hbWUtU2VydmVyIE9wdGlvbiA2LCBsZW5ndGggNDogNjIuMTIuMTczLjExNAorCSAgICBEb21haW4tTmFtZSBPcHRpb24gMTUsIGxlbmd0aCAxOTogIm9mY291cnNlaW1yaWdodC5jb20iCisJICAgIFRaLU5hbWUgT3B0aW9uIDEwMSwgbGVuZ3RoIDEzOiAiRXVyb3BlL0JlcmxpbiIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RoY3AtbXVkLnBjYXAgYi90ZXN0cy9kaGNwLW11ZC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcxN2YwMTkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kaGNwLW11ZC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2RoY3B2Ni1tdWQub3V0IGIvdGVzdHMvZGhjcHY2LW11ZC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzQ0N2RhZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2RoY3B2Ni1tdWQub3V0CkBAIC0wLDAgKzEsNSBAQAorSVA2IChjbGFzcyAweGUwLCBobGltIDI1NSwgbmV4dC1oZWFkZXIgVURQICgxNykgcGF5bG9hZCBsZW5ndGg6IDI1MikgMjAwMTo4YTg6MTAwNjo0OjIyMzplYmZmOmZlMTA6MmMyOS41NDcgPiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyLjU0NzogW3VkcCBzdW0gb2tdIGRoY3A2IHJlbGF5LWZ3ZCAobGlua2FkZHI9MjAwMTo4YTg6MTAwNjozOjIyNTo4NGZmOmZlZGI6MjM4MCBwZWVyYWRkcj1mZTgwOjpiYTI3OmViZmY6ZmViODo1M2M4IChyZWxheS1tZXNzYWdlIChkaGNwNiBzb2xpY2l0ICh4aWQ9NzgyNDRiIChjbGllbnQtSUQgaHdhZGRyL3RpbWUgdHlwZSAxIHRpbWUgNTA5NzY5NDgzIGI4MjdlYmI4NTNjOCkgKGVsYXBzZWQtdGltZSAwKSAodmVuZG9yLWNsYXNzKSAocmFwaWQtY29tbWl0KSAoSUFfTkEgSUFJRDozOTU0NzI1ODMyIFQxOjAgVDI6MCkgKENsaWVudC1GUUROKSAoTVVELVVSTD1odHRwczovL211ZGN0bC5leGFtcGxlLmNvbS8ud2VsbC1rbm93bi9tdWQvdjEvcmFzYnAxMDEpIChyZWNvbmZpZ3VyZS1hY2NlcHQpIChvcHRpb24tcmVxdWVzdCBETlMtc2VydmVyIEROUy1zZWFyY2gtbGlzdCBTTlRQLXNlcnZlcnMgQ2xpZW50LUZRRE4gb3B0XzgyIG9wdF84MykpKSAoaW50ZXJmYWNlLUlEIDAwMDAwMDA4Li4uKSkKK0lQNiAoY2xhc3MgMHhlMCwgaGxpbSAyNTUsIG5leHQtaGVhZGVyIFVEUCAoMTcpIHBheWxvYWQgbGVuZ3RoOiAyNTIpIDIwMDE6OGE4OjEwMDY6NDoyMjM6ZWJmZjpmZTEwOjJjMjkuNTQ3ID4gMjAwMTo4YTg6MTAwNjo0OjIyMzo1NGZmOmZlYzI6NTcwMi41NDc6IFt1ZHAgc3VtIG9rXSBkaGNwNiByZWxheS1md2QgKGxpbmthZGRyPTIwMDE6OGE4OjEwMDY6MzoyMjU6ODRmZjpmZWRiOjIzODAgcGVlcmFkZHI9ZmU4MDo6YmEyNzplYmZmOmZlYjg6NTNjOCAocmVsYXktbWVzc2FnZSAoZGhjcDYgc29saWNpdCAoeGlkPTc4MjQ0YiAoY2xpZW50LUlEIGh3YWRkci90aW1lIHR5cGUgMSB0aW1lIDUwOTc2OTQ4MyBiODI3ZWJiODUzYzgpIChlbGFwc2VkLXRpbWUgOTYpICh2ZW5kb3ItY2xhc3MpIChyYXBpZC1jb21taXQpIChJQV9OQSBJQUlEOjM5NTQ3MjU4MzIgVDE6MCBUMjowKSAoQ2xpZW50LUZRRE4pIChNVUQtVVJMPWh0dHBzOi8vbXVkY3RsLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS9yYXNicDEwMSkgKHJlY29uZmlndXJlLWFjY2VwdCkgKG9wdGlvbi1yZXF1ZXN0IEROUy1zZXJ2ZXIgRE5TLXNlYXJjaC1saXN0IFNOVFAtc2VydmVycyBDbGllbnQtRlFETiBvcHRfODIgb3B0XzgzKSkpIChpbnRlcmZhY2UtSUQgMDAwMDAwMDguLi4pKQorSVA2IChjbGFzcyAweGUwLCBobGltIDI1NSwgbmV4dC1oZWFkZXIgVURQICgxNykgcGF5bG9hZCBsZW5ndGg6IDI1MikgMjAwMTo4YTg6MTAwNjo0OjIyMzplYmZmOmZlMTA6MmMyOS41NDcgPiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyLjU0NzogW3VkcCBzdW0gb2tdIGRoY3A2IHJlbGF5LWZ3ZCAobGlua2FkZHI9MjAwMTo4YTg6MTAwNjozOjIyNTo4NGZmOmZlZGI6MjM4MCBwZWVyYWRkcj1mZTgwOjpiYTI3OmViZmY6ZmViODo1M2M4IChyZWxheS1tZXNzYWdlIChkaGNwNiBzb2xpY2l0ICh4aWQ9NzgyNDRiIChjbGllbnQtSUQgaHdhZGRyL3RpbWUgdHlwZSAxIHRpbWUgNTA5NzY5NDgzIGI4MjdlYmI4NTNjOCkgKGVsYXBzZWQtdGltZSAyODcpICh2ZW5kb3ItY2xhc3MpIChyYXBpZC1jb21taXQpIChJQV9OQSBJQUlEOjM5NTQ3MjU4MzIgVDE6MCBUMjowKSAoQ2xpZW50LUZRRE4pIChNVUQtVVJMPWh0dHBzOi8vbXVkY3RsLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS9yYXNicDEwMSkgKHJlY29uZmlndXJlLWFjY2VwdCkgKG9wdGlvbi1yZXF1ZXN0IEROUy1zZXJ2ZXIgRE5TLXNlYXJjaC1saXN0IFNOVFAtc2VydmVycyBDbGllbnQtRlFETiBvcHRfODIgb3B0XzgzKSkpIChpbnRlcmZhY2UtSUQgMDAwMDAwMDguLi4pKQorSVA2IChjbGFzcyAweGUwLCBobGltIDI1NSwgbmV4dC1oZWFkZXIgVURQICgxNykgcGF5bG9hZCBsZW5ndGg6IDI1MikgMjAwMTo4YTg6MTAwNjo0OjIyMzplYmZmOmZlMTA6MmMyOS41NDcgPiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyLjU0NzogW3VkcCBzdW0gb2tdIGRoY3A2IHJlbGF5LWZ3ZCAobGlua2FkZHI9MjAwMTo4YTg6MTAwNjozOjIyNTo4NGZmOmZlZGI6MjM4MCBwZWVyYWRkcj1mZTgwOjpiYTI3OmViZmY6ZmViODo1M2M4IChyZWxheS1tZXNzYWdlIChkaGNwNiBzb2xpY2l0ICh4aWQ9NzgyNDRiIChjbGllbnQtSUQgaHdhZGRyL3RpbWUgdHlwZSAxIHRpbWUgNTA5NzY5NDgzIGI4MjdlYmI4NTNjOCkgKGVsYXBzZWQtdGltZSA2NzcpICh2ZW5kb3ItY2xhc3MpIChyYXBpZC1jb21taXQpIChJQV9OQSBJQUlEOjM5NTQ3MjU4MzIgVDE6MCBUMjowKSAoQ2xpZW50LUZRRE4pIChNVUQtVVJMPWh0dHBzOi8vbXVkY3RsLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS9yYXNicDEwMSkgKHJlY29uZmlndXJlLWFjY2VwdCkgKG9wdGlvbi1yZXF1ZXN0IEROUy1zZXJ2ZXIgRE5TLXNlYXJjaC1saXN0IFNOVFAtc2VydmVycyBDbGllbnQtRlFETiBvcHRfODIgb3B0XzgzKSkpIChpbnRlcmZhY2UtSUQgMDAwMDAwMDguLi4pKQorSVA2IChjbGFzcyAweGUwLCBobGltIDI1NSwgbmV4dC1oZWFkZXIgVURQICgxNykgcGF5bG9hZCBsZW5ndGg6IDI1MikgMjAwMTo4YTg6MTAwNjo0OjIyMzplYmZmOmZlMTA6MmMyOS41NDcgPiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyLjU0NzogW3VkcCBzdW0gb2tdIGRoY3A2IHJlbGF5LWZ3ZCAobGlua2FkZHI9MjAwMTo4YTg6MTAwNjozOjIyNTo4NGZmOmZlZGI6MjM4MCBwZWVyYWRkcj1mZTgwOjpiYTI3OmViZmY6ZmViODo1M2M4IChyZWxheS1tZXNzYWdlIChkaGNwNiBzb2xpY2l0ICh4aWQ9NzgyNDRiIChjbGllbnQtSUQgaHdhZGRyL3RpbWUgdHlwZSAxIHRpbWUgNTA5NzY5NDgzIGI4MjdlYmI4NTNjOCkgKGVsYXBzZWQtdGltZSAxNDIxKSAodmVuZG9yLWNsYXNzKSAocmFwaWQtY29tbWl0KSAoSUFfTkEgSUFJRDozOTU0NzI1ODMyIFQxOjAgVDI6MCkgKENsaWVudC1GUUROKSAoTVVELVVSTD1odHRwczovL211ZGN0bC5leGFtcGxlLmNvbS8ud2VsbC1rbm93bi9tdWQvdjEvcmFzYnAxMDEpIChyZWNvbmZpZ3VyZS1hY2NlcHQpIChvcHRpb24tcmVxdWVzdCBETlMtc2VydmVyIEROUy1zZWFyY2gtbGlzdCBTTlRQLXNlcnZlcnMgQ2xpZW50LUZRRE4gb3B0XzgyIG9wdF84MykpKSAoaW50ZXJmYWNlLUlEIDAwMDAwMDA4Li4uKSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2RoY3B2Ni1tdWQucGNhcCBiL3Rlc3RzL2RoY3B2Ni1tdWQucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iYWEwMTU0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZGhjcHY2LW11ZC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2Ruc3NlYy12di5vdXQgYi90ZXN0cy9kbnNzZWMtdnYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE3NTEzNWIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kbnNzZWMtdnYub3V0CkBAIC0wLDAgKzEsMTIgQEAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc0KQorICAgIDEyNy4wLjAuMS40MzE0NCA+IDEyNy4wLjAuMS41MzogW2JhZCB1ZHAgY2tzdW0gMHhmZTQ5IC0+IDB4YjVlZiFdIDIwOTcyKyBbMWF1XSBTU0hGUD8gbW9uYWRpYy5jeW5pYy5uZXQuIGFyOiAuIE9QVCBVRFBzaXplPTQwOTYgRE8gKDQ2KQorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMzA0MCkKKyAgICAxMjcuMC4wLjEuNTMgPiAxMjcuMC4wLjEuNDMxNDQ6IFtiYWQgdWRwIGNrc3VtIDB4MDllMCAtPiAweDQyMzkhXSAyMDk3MiQgcTogU1NIRlA/IG1vbmFkaWMuY3luaWMubmV0LiAzLzYvMTMgbW9uYWRpYy5jeW5pYy5uZXQuIFNTSEZQLCBtb25hZGljLmN5bmljLm5ldC4gUlJTSUcsIG1vbmFkaWMuY3luaWMubmV0LiBSUlNJRyBuczogY3luaWMubmV0LiBOUyBuczEuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczQuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczIuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczMuY3luaWMubmV0LiwgY3luaWMubmV0LiBSUlNJRywgY3luaWMubmV0LiBSUlNJRyBhcjogbnMxLmN5bmljLm5ldC4gQSAxMjUuMTAwLjEyNi4yMDUsIG5zMi5jeW5pYy5uZXQuIEEgMTk5LjE3NS4xMzcuMjEzLCBuczMuY3luaWMubmV0LiBBIDIwMy4xNDEuMTUzLjIyLCBuczQuY3luaWMubmV0LiBBIDEyMi4xMDMuMjM4LjE4NiwgbnMxLmN5bmljLm5ldC4gUlJTSUcsIG5zMS5jeW5pYy5uZXQuIFJSU0lHLCBuczIuY3luaWMubmV0LiBSUlNJRywgbnMyLmN5bmljLm5ldC4gUlJTSUcsIG5zMy5jeW5pYy5uZXQuIFJSU0lHLCBuczMuY3luaWMubmV0LiBSUlNJRywgbnM0LmN5bmljLm5ldC4gUlJTSUcsIG5zNC5jeW5pYy5uZXQuIFJSU0lHLCAuIE9QVCBVRFBzaXplPTQwOTYgRE8gKDMwMTIpCitJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCAyMjgzOCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzQpCisgICAgMTI3LjAuMC4xLjMyOTcyID4gMTI3LjAuMC4xLjUzOiBbYmFkIHVkcCBja3N1bSAweGZlNDkgLT4gMHgyOGQ4IV0gNDg1NzYrIFsxYXVdIEE/IG1vbmFkaWMuY3luaWMubmV0LiBhcjogLiBPUFQgVURQc2l6ZT0xMDI0ICg0NikKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDIyNikKKyAgICAxMjcuMC4wLjEuNTMgPiAxMjcuMC4wLjEuMzI5NzI6IFtiYWQgdWRwIGNrc3VtIDB4ZmVlMSAtPiAweDYwZGQhXSA0ODU3NiBxOiBBPyBtb25hZGljLmN5bmljLm5ldC4gMS80LzUgbW9uYWRpYy5jeW5pYy5uZXQuIEEgMTI1LjEwMC4xMjYuMjAyIG5zOiBjeW5pYy5uZXQuIE5TIG5zNC5jeW5pYy5uZXQuLCBjeW5pYy5uZXQuIE5TIG5zMi5jeW5pYy5uZXQuLCBjeW5pYy5uZXQuIE5TIG5zMy5jeW5pYy5uZXQuLCBjeW5pYy5uZXQuIE5TIG5zMS5jeW5pYy5uZXQuIGFyOiBuczEuY3luaWMubmV0LiBBIDEyNS4xMDAuMTI2LjIwNSwgbnMyLmN5bmljLm5ldC4gQSAxOTkuMTc1LjEzNy4yMTMsIG5zMy5jeW5pYy5uZXQuIEEgMjAzLjE0MS4xNTMuMjIsIG5zNC5jeW5pYy5uZXQuIEEgMTIyLjEwMy4yMzguMTg2LCAuIE9QVCBVRFBzaXplPTQwOTYgKDE5OCkKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDIyOTA0LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NCkKKyAgICAxMjcuMC4wLjEuMzYwNjkgPiAxMjcuMC4wLjEuNTM6IFtiYWQgdWRwIGNrc3VtIDB4ZmU0OSAtPiAweGYyNjYhXSA0OTQzMisgWzFhdV0gU1NIRlA/IG1vbmFkaWMuY3luaWMubmV0LiBhcjogLiBPUFQgVURQc2l6ZT0wICg0NikKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDI0NCkKKyAgICAxMjcuMC4wLjEuNTMgPiAxMjcuMC4wLjEuMzYwNjk6IFtiYWQgdWRwIGNrc3VtIDB4ZmVmMyAtPiAweDEyMjchXSA0OTQzMiBxOiBTU0hGUD8gbW9uYWRpYy5jeW5pYy5uZXQuIDEvNC81IG1vbmFkaWMuY3luaWMubmV0LiBTU0hGUCBuczogY3luaWMubmV0LiBOUyBuczQuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczEuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczMuY3luaWMubmV0LiwgY3luaWMubmV0LiBOUyBuczIuY3luaWMubmV0LiBhcjogbnMxLmN5bmljLm5ldC4gQSAxMjUuMTAwLjEyNi4yMDUsIG5zMi5jeW5pYy5uZXQuIEEgMTk5LjE3NS4xMzcuMjEzLCBuczMuY3luaWMubmV0LiBBIDIwMy4xNDEuMTUzLjIyLCBuczQuY3luaWMubmV0LiBBIDEyMi4xMDMuMjM4LjE4NiwgLiBPUFQgVURQc2l6ZT00MDk2ICgyMTYpCmRpZmYgLS1naXQgYS90ZXN0cy9kbnNzZWMucGNhcCBiL3Rlc3RzL2Ruc3NlYy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmIxOTE0ODAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9kbnNzZWMucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9kdHAtdi5vdXQgYi90ZXN0cy9kdHAtdi5vdXQKaW5kZXggMWQ3MzQxOC4uNGViNTY2YiAxMDA2NDQKLS0tIGEvdGVzdHMvZHRwLXYub3V0CisrKyBiL3Rlc3RzL2R0cC12Lm91dApAQCAtMywyOCArMyw1MyBAQAogCVN0YXR1cyBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggNSwgMHg0CiAJRFRQIHR5cGUgVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDUsIDB4NDAKIAlOZWlnaGJvciBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggMTAsIDAwOjE5OjA2OmVhOmI4Ojg1Ci0wMDoxOTowNjplYTpiODo4NSA+IDAxOjAwOjBjOjAwOjAwOjAwIFNOQVAgVW5udW1iZXJlZCwgdWksIEZsYWdzIFtDb21tYW5kXSwgbGVuZ3RoIDc2CiswMDoxOTowNjplYTpiODo4NSA+IDAxOjAwOjBjOjAwOjAwOjAwIFNOQVAsIG91aSBDaXNjbyAoMHgwMDAwMGMpLCBwaWQgVW5rbm93biAoMHgwMDAzKSwgbGVuZ3RoIDY4OiAKKwkweDAwMDA6ICBhYWFhIDAzMDAgMDAwYyAwMDAzIDAwMDAgMDAwMCAwMTAwIDBjY2MgIC4uLi4uLi4uLi4uLi4uLi4KKwkweDAwMTA6ICBjY2NjIDAwMTkgMDZlYSBiODg1IDAwMjUgYWFhYSAwMzAwIDAwMGMgIC4uLi4uLi4uLiUuLi4uLi4KKwkweDAwMjA6ICAyMDA0IDAxMDAgMDEwMCAwODRjIDYxNjIgMDAwMCAwMjAwIDA1MDQgIC4uLi4uLi5MYWIuLi4uLi4KKwkweDAwMzA6ICAwMDAzIDAwMDUgNDAwMCAwNDAwIDBhMDAgMTkwNiBlYWI4IDg1MDAgIC4uLi5ALi4uLi4uLi4uLi4KKwkweDAwNDA6ICAwMDAwIDAwMDAgMDAwMCAwMDAwIGY3YTcgZmU0MiAgICAgICAgICAgIC4uLi4uLi4uLi4uQgogRFRQdjEsIGxlbmd0aCAzOAogCURvbWFpbiBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggOCwgTGFiCiAJU3RhdHVzIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCAweDQKIAlEVFAgdHlwZSBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggNSwgMHg0MAogCU5laWdoYm9yIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxMCwgMDA6MTk6MDY6ZWE6Yjg6ODUKLTAwOjE5OjA2OmVhOmI4Ojg1ID4gMDE6MDA6MGM6MDA6MDA6MDAgU05BUCBVbm51bWJlcmVkLCB1aSwgRmxhZ3MgW0NvbW1hbmRdLCBsZW5ndGggNzYKKzAwOjE5OjA2OmVhOmI4Ojg1ID4gMDE6MDA6MGM6MDA6MDA6MDAgU05BUCwgb3VpIENpc2NvICgweDAwMDAwYyksIHBpZCBVbmtub3duICgweDAwMDMpLCBsZW5ndGggNjg6IAorCTB4MDAwMDogIGFhYWEgMDMwMCAwMDBjIDAwMDMgMDAwMCAwMDAwIDAxMDAgMGNjYyAgLi4uLi4uLi4uLi4uLi4uLgorCTB4MDAxMDogIGNjY2MgMDAxOSAwNmVhIGI4ODUgMDAyNSBhYWFhIDAzMDAgMDAwYyAgLi4uLi4uLi4uJS4uLi4uLgorCTB4MDAyMDogIDIwMDQgMDEwMCAwMTAwIDA4NGMgNjE2MiAwMDAwIDAyMDAgMDUwNCAgLi4uLi4uLkxhYi4uLi4uLgorCTB4MDAzMDogIDAwMDMgMDAwNSA0MDAwIDA0MDAgMGEwMCAxOTA2IGVhYjggODUwMCAgLi4uLkAuLi4uLi4uLi4uLgorCTB4MDA0MDogIDAwMDAgMDAwMCAwMDAwIDAwMDAgZjdhNyBmZTQyICAgICAgICAgICAgLi4uLi4uLi4uLi5CCiBEVFB2MSwgbGVuZ3RoIDM4CiAJRG9tYWluIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCA4LCBMYWIKIAlTdGF0dXMgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDUsIDB4NAogCURUUCB0eXBlIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCA1LCAweDQwCiAJTmVpZ2hib3IgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEwLCAwMDoxOTowNjplYTpiODo4NQotMDA6MTk6MDY6ZWE6Yjg6ODUgPiAwMTowMDowYzowMDowMDowMCBTTkFQIFVubnVtYmVyZWQsIHVpLCBGbGFncyBbQ29tbWFuZF0sIGxlbmd0aCA3NgorMDA6MTk6MDY6ZWE6Yjg6ODUgPiAwMTowMDowYzowMDowMDowMCBTTkFQLCBvdWkgQ2lzY28gKDB4MDAwMDBjKSwgcGlkIFVua25vd24gKDB4MDAwMyksIGxlbmd0aCA2ODogCisJMHgwMDAwOiAgYWFhYSAwMzAwIDAwMGMgMDAwMyAwMDAwIDAwMDAgMDEwMCAwY2NjICAuLi4uLi4uLi4uLi4uLi4uCisJMHgwMDEwOiAgY2NjYyAwMDE5IDA2ZWEgYjg4NSAwMDI1IGFhYWEgMDMwMCAwMDBjICAuLi4uLi4uLi4lLi4uLi4uCisJMHgwMDIwOiAgMjAwNCAwMTAwIDAxMDAgMDg0YyA2MTYyIDAwMDAgMDIwMCAwNTA0ICAuLi4uLi4uTGFiLi4uLi4uCisJMHgwMDMwOiAgMDAwMyAwMDA1IDQwMDAgMDQwMCAwYTAwIDE5MDYgZWFiOCA4NTAwICAuLi4uQC4uLi4uLi4uLi4uCisJMHgwMDQwOiAgMDAwMCAwMDAwIDAwMDAgMDAwMCBmN2E3IGZlNDIgICAgICAgICAgICAuLi4uLi4uLi4uLkIKIERUUHYxLCBsZW5ndGggMzgKIAlEb21haW4gVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDgsIExhYgogCVN0YXR1cyBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggNSwgMHg0CiAJRFRQIHR5cGUgVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDUsIDB4NDAKIAlOZWlnaGJvciBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggMTAsIDAwOjE5OjA2OmVhOmI4Ojg1Ci0wMDoxOTowNjplYTpiODo4NSA+IDAxOjAwOjBjOjAwOjAwOjAwIFNOQVAgVW5udW1iZXJlZCwgdWksIEZsYWdzIFtDb21tYW5kXSwgbGVuZ3RoIDc2CiswMDoxOTowNjplYTpiODo4NSA+IDAxOjAwOjBjOjAwOjAwOjAwIFNOQVAsIG91aSBDaXNjbyAoMHgwMDAwMGMpLCBwaWQgVW5rbm93biAoMHgwMDAzKSwgbGVuZ3RoIDY4OiAKKwkweDAwMDA6ICBhYWFhIDAzMDAgMDAwYyAwMDAzIDAwMDAgMDAwMCAwMTAwIDBjY2MgIC4uLi4uLi4uLi4uLi4uLi4KKwkweDAwMTA6ICBjY2NjIDAwMTkgMDZlYSBiODg1IDAwMjUgYWFhYSAwMzAwIDAwMGMgIC4uLi4uLi4uLiUuLi4uLi4KKwkweDAwMjA6ICAyMDA0IDAxMDAgMDEwMCAwODRjIDYxNjIgMDAwMCAwMjAwIDA1MDQgIC4uLi4uLi5MYWIuLi4uLi4KKwkweDAwMzA6ICAwMDAzIDAwMDUgNDAwMCAwNDAwIDBhMDAgMTkwNiBlYWI4IDg1MTQgIC4uLi5ALi4uLi4uLi4uLi4KKwkweDAwNDA6ICAwMDAyIDAwMGYgMDAwMCAwMDAwIDcyMzIgMWRhNiAgICAgICAgICAgIC4uLi4uLi4ucjIuLgogRFRQdjEsIGxlbmd0aCAzOAogCURvbWFpbiBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggOCwgTGFiCiAJU3RhdHVzIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCAweDQKIAlEVFAgdHlwZSBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggNSwgMHg0MAogCU5laWdoYm9yIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxMCwgMDA6MTk6MDY6ZWE6Yjg6ODUKLTAwOjE5OjA2OmVhOmI4Ojg1ID4gMDE6MDA6MGM6MDA6MDA6MDAgU05BUCBVbm51bWJlcmVkLCB1aSwgRmxhZ3MgW0NvbW1hbmRdLCBsZW5ndGggNzYKKzAwOjE5OjA2OmVhOmI4Ojg1ID4gMDE6MDA6MGM6MDA6MDA6MDAgU05BUCwgb3VpIENpc2NvICgweDAwMDAwYyksIHBpZCBVbmtub3duICgweDAwMDMpLCBsZW5ndGggNjg6IAorCTB4MDAwMDogIGFhYWEgMDMwMCAwMDBjIDAwMDMgMDAwMCAwMDAwIDAxMDAgMGNjYyAgLi4uLi4uLi4uLi4uLi4uLgorCTB4MDAxMDogIGNjY2MgMDAxOSAwNmVhIGI4ODUgMDAyNSBhYWFhIDAzMDAgMDAwYyAgLi4uLi4uLi4uJS4uLi4uLgorCTB4MDAyMDogIDIwMDQgMDEwMCAwMTAwIDA4NGMgNjE2MiAwMDAwIDAyMDAgMDUwNCAgLi4uLi4uLkxhYi4uLi4uLgorCTB4MDAzMDogIDAwMDMgMDAwNSA0MDAwIDA0MDAgMGEwMCAxOTA2IGVhYjggODUxNCAgLi4uLkAuLi4uLi4uLi4uLgorCTB4MDA0MDogIDAwMDIgMDAwZiAwMDAwIDAwMDAgNzIzMiAxZGE2ICAgICAgICAgICAgLi4uLi4uLi5yMi4uCmRpZmYgLS1naXQgYS90ZXN0cy9ldmIub3V0IGIvdGVzdHMvZXZiLm91dAppbmRleCBkYjg4ODhjLi5kNWQ3MWU4IDEwMDY0NAotLS0gYS90ZXN0cy9ldmIub3V0CisrKyBiL3Rlc3RzL2V2Yi5vdXQKQEAgLTEsMjMgKzEsMjMgQEAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMTAyCi0JcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIHBvcnQtaWQgODAwMywgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLAogCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKLQl2M2xlbiA2NCwgTUNJRCBOYW1lIERlZmF1bHQsIHJldiAwLCAKLQkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsIAorCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCBhYzM2MTc3ZjUwMjgzY2Q0YjgzODIxZDhhYjI2ZGU2MiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMTAyCi0JcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIHBvcnQtaWQgODAwMywgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLAogCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKLQl2M2xlbiA2NCwgTUNJRCBOYW1lIERlZmF1bHQsIHJldiAwLCAKLQkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsIAorCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCBhYzM2MTc3ZjUwMjgzY2Q0YjgzODIxZDhhYjI2ZGU2MiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMTAyCi0JcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIHBvcnQtaWQgODAwMywgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjA4OjAwOjI3OjBkOmYxOjNjLCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLAogCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKLQl2M2xlbiA2NCwgTUNJRCBOYW1lIERlZmF1bHQsIHJldiAwLCAKLQkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsIAorCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCBhYzM2MTc3ZjUwMjgzY2Q0YjgzODIxZDhhYjI2ZGU2MiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIExMRFAsIGxlbmd0aCAxMDMKIAlDaGFzc2lzIElEIFRMViAoMSksIGxlbmd0aCA3CkBAIC02MSw4NiArNjEsODYgQEAKIAkgIDB4MDAwMDogIDAwODAgYzIwZSAwMDAwIDAwYTcgMDAxMCAwMQogCUVuZCBUTFYgKDApLCBsZW5ndGggMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMDIKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgcG9ydC1pZCA4MDAzLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuMDg6MDA6Mjc6MGQ6ZjE6M2MsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCBwb3J0LWlkIDgwMDMsCiAJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDY0LCBNQ0lEIE5hbWUgRGVmYXVsdCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IGFjMzYxNzdmNTAyODNjZDRiODM4MjFkOGFiMjZkZTYyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wODowMDoyNzowZDpmMTozYywgQ0lTVCByZW1haW5pbmctaG9wcyAyMApkaWZmIC0tZ2l0IGEvdGVzdHMvZnJmMTUtaGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL2ZyZjE1LWhlYXBvdmVyZmxvdy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTQ0ZDFmYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ZyZjE1LWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorVUkgMzAhIFt8ZnJmLjE1XQpkaWZmIC0tZ2l0IGEvdGVzdHMvZnJmMTUtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9mcmYxNS1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ODk4ZTdiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZnJmMTUtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VvbmV0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL2dlb25ldC1tYWMtbG9va3VwLWhlYXBvdmVyZmxvdy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2Q0OWRkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dlb25ldC1tYWMtbG9va3VwLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorR2VvTmV0IHNyYzozMDozMDozMDozMDozMDozMDsgdjozIE5IOjAtQW55IEhUOjMtMC1HZW9BbnljYXN0Q2lyY2xlIEhvcExpbTo0OCBQYXlsb2FkOjEyMzM2IFt8Z2VvbmV0XQpkaWZmIC0tZ2l0IGEvdGVzdHMvZ2VvbmV0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9nZW9uZXQtbWFjLWxvb2t1cC1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yYTQyYmNhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ2VvbmV0LW1hYy1sb29rdXAtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvZ3JlLWhlYXBvdmVyZmxvdy0xLm91dCBiL3Rlc3RzL2dyZS1oZWFwb3ZlcmZsb3ctMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzIyYzMyOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dyZS1oZWFwb3ZlcmZsb3ctMS5vdXQKQEAgLTAsMCArMSw4IEBACiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDEwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDIwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDMwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDQwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDUwOiAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwCitJUDAgCmRpZmYgLS1naXQgYS90ZXN0cy9ncmUtaGVhcG92ZXJmbG93LTEucGNhcCBiL3Rlc3RzL2dyZS1oZWFwb3ZlcmZsb3ctMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY4MTQ4MTUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ncmUtaGVhcG92ZXJmbG93LTEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9ncmUtaGVhcG92ZXJmbG93LTIub3V0IGIvdGVzdHMvZ3JlLWhlYXBvdmVyZmxvdy0yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMWFiMmNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvZ3JlLWhlYXBvdmVyZmxvdy0yLm91dApAQCAtMCwwICsxLDYgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMTA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMjA6ICAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwCitJUCAodG9zIDB4MzAsIHR0bCA0OCwgaWQgMTIzMzYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIEdSRSAoNDcpLCBsZW5ndGggMTIzMzYsIGJhZCBja3N1bSAzMDMwICgtPjY5N2YpISkKKyAgICA0OC40OC40OC40OCA+IDQ4LjQ4LjQ4LjQ4OiBHUkV2MCwgRmxhZ3MgW2NoZWNrc3VtIHByZXNlbnQsIHJvdXRpbmcgcHJlc2VudF0sIHN1bSAweDMwMzAsIG9mZiAweDMwMzAsIChydGFmPTB4MzAzMClbfGdyZV0KZGlmZiAtLWdpdCBhL3Rlc3RzL2dyZS1oZWFwb3ZlcmZsb3ctMi5wY2FwIGIvdGVzdHMvZ3JlLWhlYXBvdmVyZmxvdy0yLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTcyMmQ4ZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2dyZS1oZWFwb3ZlcmZsb3ctMi5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2hlYXAtb3ZlcmZsb3ctMS5vdXQgYi90ZXN0cy9oZWFwLW92ZXJmbG93LTEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRkMjg2MmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwLW92ZXJmbG93LTEub3V0CkBAIC0wLDAgKzEgQEAKK3Vua25vd24gaXAgMwpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcC1vdmVyZmxvdy0xLnBjYXAgYi90ZXN0cy9oZWFwLW92ZXJmbG93LTEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mMTUxOWI4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcC1vdmVyZmxvdy0xLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcC1vdmVyZmxvdy0yLm91dCBiL3Rlc3RzL2hlYXAtb3ZlcmZsb3ctMi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU3ZTIxYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXAtb3ZlcmZsb3ctMi5vdXQKQEAgLTAsMCArMSBAQAorSVAzIApkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcC1vdmVyZmxvdy0yLnBjYXAgYi90ZXN0cy9oZWFwLW92ZXJmbG93LTIucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MzhjNWY1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcC1vdmVyZmxvdy0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcG92ZXJmbG93LUVYVFJBQ1RfMTZCSVRTLm91dCBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1FWFRSQUNUXzE2QklUUy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGRkYzY0MQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1FWFRSQUNUXzE2QklUUy5vdXQKQEAgLTAsMCArMSBAQAorZXQxIEFUICBbfGRkcF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2hlYXBvdmVyZmxvdy1FWFRSQUNUXzE2QklUUy5wY2FwIGIvdGVzdHMvaGVhcG92ZXJmbG93LUVYVFJBQ1RfMTZCSVRTLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDkxYzJkMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1FWFRSQUNUXzE2QklUUy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2hlYXBvdmVyZmxvdy1hdGFsa19wcmludC5vdXQgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjBkZGM2NDEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQub3V0CkBAIC0wLDAgKzEgQEAKK2V0MSBBVCAgW3xkZHBdCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQucGNhcCBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1hdGFsa19wcmludC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgzZjA0ZmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctYXRhbGtfcHJpbnQucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctaW5fY2hlY2tzdW0ub3V0IGIvdGVzdHMvaGVhcG92ZXJmbG93LWluX2NoZWNrc3VtLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZmZjNjkyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LWluX2NoZWNrc3VtLm91dApAQCAtMCwwICsxLDMgQEAKK0lQICh0b3MgMHgzMCwgdHRsIDQ4LCBpZCAxMjMzNiwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFBJTSAoMTAzKSwgbGVuZ3RoIDEyMzM2LCBiYWQgY2tzdW0gMzAzMCAoLT4yOTQ3KSEpCisgICAgNDguNDguNDguNDggPiA0OC40OC40OC40ODogUElNdjIsIGxlbmd0aCAxMjMxNgorCUhlbGxvLCBSRkMyMTE3LWVuY29kaW5nLCBja3N1bSAweDMwMzAgKHVudmVyaWZpZWQpW3xwaW1dCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctaW5fY2hlY2tzdW0ucGNhcCBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1pbl9jaGVja3N1bS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjgyYTU1MDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctaW5fY2hlY2tzdW0ucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctaXBfcHJpbnRfZGVtdXgub3V0IGIvdGVzdHMvaGVhcG92ZXJmbG93LWlwX3ByaW50X2RlbXV4Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NGJkMTM3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LWlwX3ByaW50X2RlbXV4Lm91dApAQCAtMCwwICsxLDYgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMTA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMjA6ICAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwCitJUCAodG9zIDB4MzAsIHR0bCA0OCwgaWQgMTIzMzYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIEFIICg1MSksIGxlbmd0aCAxMjMzNiwgYmFkIGNrc3VtIDMwMzAgKC0+Njk3YikhKQorICAgIDQ4LjQ4LjQ4LjQ4ID4gNDguNDguNDguNDg6IEFIKHNwaT0weDMwMzAzMDMwLHN1bWxlbj0xOTIsc2VxPTB4MzAzMDMwMzBbdHJ1bmNhdGVkXSk6CmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctaXBfcHJpbnRfZGVtdXgucGNhcCBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1pcF9wcmludF9kZW11eC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhkZWMzMGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctaXBfcHJpbnRfZGVtdXgucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctcHBwX2hkbGNfaWZfcHJpbnQub3V0IGIvdGVzdHMvaGVhcG92ZXJmbG93LXBwcF9oZGxjX2lmX3ByaW50Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zOWNlZjQyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LXBwcF9oZGxjX2lmX3ByaW50Lm91dApAQCAtMCwwICsxIEBACitbfHBwcF0KZGlmZiAtLWdpdCBhL3Rlc3RzL2hlYXBvdmVyZmxvdy1wcHBfaGRsY19pZl9wcmludC5wY2FwIGIvdGVzdHMvaGVhcG92ZXJmbG93LXBwcF9oZGxjX2lmX3ByaW50LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzU2YWRmMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1wcHBfaGRsY19pZl9wcmludC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2hlYXBvdmVyZmxvdy1xOTMzX3ByaW50cS5vdXQgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctcTkzM19wcmludHEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmViYzU2MDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctcTkzM19wcmludHEub3V0CkBAIC0wLDAgKzEsMiBAQAorUS45MzMsIENDSVRULCBjb2Rlc2V0IDAsIHVua25vd24gbWVzc2FnZSAoMHgzMCksIGxlbmd0aCA4MDg0NjQ0MzAKKwl1bmtub3duIElFICgweDMwKSwgbGVuZ3RoIDQ4OiBbfHEuOTMzXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcG92ZXJmbG93LXE5MzNfcHJpbnRxLnBjYXAgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctcTkzM19wcmludHEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NmQxYjEyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LXE5MzNfcHJpbnRxLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcG92ZXJmbG93LXNsX2lmX3ByaW50Lm91dCBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1zbF9pZl9wcmludC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGRkY2Y1MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXBvdmVyZmxvdy1zbF9pZl9wcmludC5vdXQKQEAgLTAsMCArMSBAQAorW3xzbGlwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcG92ZXJmbG93LXNsX2lmX3ByaW50LnBjYXAgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctc2xfaWZfcHJpbnQucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40OTJhMDBiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LXNsX2lmX3ByaW50LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaGVhcG92ZXJmbG93LXRjcF9wcmludC5vdXQgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctdGNwX3ByaW50Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDMxNjc0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaGVhcG92ZXJmbG93LXRjcF9wcmludC5vdXQKQEAgLTAsMCArMSwyIEBACitJUCAodG9zIDB4MzAsIHR0bCA0OCwgaWQgMTIzMzYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggMTIzMzYsIGJhZCBja3N1bSAzMDMwICgtPjI5YTgpISkKKyAgICA0OC40OC40OC40OC4xMjMzNiA+IDQ4LjQ4LjQ4LjQ4LjEyMzM2OiBGbGFncyBbLlVdLCBzZXEgODA4NDY0NDMyOjgwODQ3NjY4OCwgYWNrIDgwODQ2NDQzMiwgd2luIDEyMzM2LCB1cmcgMTIzMzYsIG9wdGlvbnMgW3Vua25vd24tNDggMHgzMDMwMzAzMDMwMzAzMDMwW3x0Y3BdCmRpZmYgLS1naXQgYS90ZXN0cy9oZWFwb3ZlcmZsb3ctdGNwX3ByaW50LnBjYXAgYi90ZXN0cy9oZWFwb3ZlcmZsb3ctdGNwX3ByaW50LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDRjMTcxZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2hlYXBvdmVyZmxvdy10Y3BfcHJpbnQucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9obmNwLm91dCBiL3Rlc3RzL2huY3Aub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzg4MGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9obmNwLm91dApAQCAtMCwwICsxLDUzIEBACitJUDYgKGhsaW0gMSwgbmV4dC1oZWFkZXIgVURQICgxNykgcGF5bG9hZCBsZW5ndGg6IDMyKSBmZTgwOjoyMTg6ZjNmZjpmZWE5OjkxNGUuODIzMSA+IGZmMDI6OjExLjgyMzE6IFt1ZHAgc3VtIG9rXSBobmNwICgyNCkKKwlOb2RlIGVuZHBvaW50ICgxMikgTklEOiAzMTpkYTo3ODpkMiBFUElEOiAwMzAwMDAwMAorCU5ldHdvcmsgc3RhdGUgKDEyKSBoYXNoOiAyYWU1Zjc3MjU1MjAwYmNjCitJUDYgKGhsaW0gNjQsIG5leHQtaGVhZGVyIFVEUCAoMTcpIHBheWxvYWQgbGVuZ3RoOiAxMikgZmU4MDo6MjFlOjY0ZmY6ZmUyMzo0ZDM0LjgyMzEgPiBmZTgwOjoyMTg6ZjNmZjpmZWE5OjkxNGUuODIzMTogW3VkcCBzdW0gb2tdIGhuY3AgKDQpCisJUmVxdWVzdCBuZXR3b3JrIHN0YXRlICg0KQorSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBVRFAgKDE3KSBwYXlsb2FkIGxlbmd0aDogODApIGZlODA6OjIxODpmM2ZmOmZlYTk6OTE0ZS44MjMxID4gZmU4MDo6MjFlOjY0ZmY6ZmUyMzo0ZDM0LjgyMzE6IFt1ZHAgc3VtIG9rXSBobmNwICg3MikKKwlOb2RlIGVuZHBvaW50ICgxMikgTklEOiAzMTpkYTo3ODpkMiBFUElEOiAwMzAwMDAwMAorCU5ldHdvcmsgc3RhdGUgKDEyKSBoYXNoOiAyYWU1Zjc3MjU1MjAwYmNjCisJTm9kZSBzdGF0ZSAoMjQpIE5JRDogMzE6ZGE6Nzg6ZDIgc2Vxbm86IDE5IDE2MC4wODhzIGhhc2g6IDgwMDA4OGM4ZTA3MTQ2MzgKKwlOb2RlIHN0YXRlICgyNCkgTklEOiA2MTo2OTplZDo2MyBzZXFubzogMTIgOTY5LjY4MXMgaGFzaDogMDExZmZmYTFkYTk2NjE0OAorSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBVRFAgKDE3KSBwYXlsb2FkIGxlbmd0aDogMTYpIGZlODA6OjIxZTo2NGZmOmZlMjM6NGQzNC44MjMxID4gZmU4MDo6MjE4OmYzZmY6ZmVhOTo5MTRlLjgyMzE6IFt1ZHAgc3VtIG9rXSBobmNwICg4KQorCVJlcXVlc3Qgbm9kZSBzdGF0ZSAoOCkgTklEOiAzMTpkYTo3ODpkMgorSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBVRFAgKDE3KSBwYXlsb2FkIGxlbmd0aDogMTYpIGZlODA6OjIxZTo2NGZmOmZlMjM6NGQzNC44MjMxID4gZmU4MDo6MjE4OmYzZmY6ZmVhOTo5MTRlLjgyMzE6IFt1ZHAgc3VtIG9rXSBobmNwICg4KQorCVJlcXVlc3Qgbm9kZSBzdGF0ZSAoOCkgTklEOiA2MTo2OTplZDo2MworSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBVRFAgKDE3KSBwYXlsb2FkIGxlbmd0aDogMzMyKSBmZTgwOjoyMTg6ZjNmZjpmZWE5OjkxNGUuODIzMSA+IGZlODA6OjIxZTo2NGZmOmZlMjM6NGQzNC44MjMxOiBbdWRwIHN1bSBva10gaG5jcCAoMzI0KQorCU5vZGUgZW5kcG9pbnQgKDEyKSBOSUQ6IDMxOmRhOjc4OmQyIEVQSUQ6IDAzMDAwMDAwCisJTm9kZSBzdGF0ZSAoMzEyKSBOSUQ6IDMxOmRhOjc4OmQyIHNlcW5vOiAxOSAxNjAuMTA1cyBoYXNoOiA4MDAwODhjOGUwNzE0NjM4CisJCVBlZXIgKDE2KSBQZWVyLU5JRDogNjE6Njk6ZWQ6NjMgUGVlci1FUElEOiAwMTAwMDAwMCBMb2NhbC1FUElEOiAwMTAwMDAwMAorCQlITkNQLVZlcnNpb24gKDIyKSBNOiAwIFA6IDQgSDogNCBMOiA0IFVzZXItYWdlbnQ6IGhuZXRkL2NhYzk3MWQKKwkJRXh0ZXJuYWwtQ29ubmVjdGlvbiAoNTIpCisJCQlEZWxlZ2F0ZWQtUHJlZml4ICgzNikgVkxTTzogMC41OTlzIFBMU086IDAuMjk5cyBQcmVmaXg6IDEwLjAuMC4wLzgKKwkJCQlQcmVmaXgtUG9saWN5ICg1KSB0eXBlOiBJbnRlcm5ldCBjb25uZWN0aXZpdHkKKwkJCURIQ1B2NC1EYXRhICgxMCkKKwkJCQlETlMtc2VydmVyICg2KSAxOTIuMTY4LjEuMjU0CisJCUFzc2lnbmVkLVByZWZpeCAoMTgpIEVQSUQ6IDAzMDAwMDAwIFBydHk6IDIgUHJlZml4OiBmZDFmOmY4OGM6ZTIwNzpkYmJjOjovNjQKKwkJQXNzaWduZWQtUHJlZml4ICgyNSkgRVBJRDogMDEwMDAwMDAgUHJ0eTogMiBQcmVmaXg6IDEwLjAuOTkuMC8yNAorCQlBc3NpZ25lZC1QcmVmaXggKDI1KSBFUElEOiAwMzAwMDAwMCBQcnR5OiAyIFByZWZpeDogMTAuMC4xMDEuMC8yNAorCQlOb2RlLUFkZHJlc3MgKDI0KSBFUElEOiAwMTAwMDAwMCBJUCBBZGRyZXNzOiAxMC4wLjk5LjIKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDEwMDAwMDAgSVAgQWRkcmVzczogZmQxZjpmODhjOmUyMDc6OjIKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDMwMDAwMDAgSVAgQWRkcmVzczogMTAuMC4xMDEuMjcKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDMwMDAwMDAgSVAgQWRkcmVzczogZmQxZjpmODhjOmUyMDc6ZGJiYzo6MWIKKwkJTm9kZS1OYW1lICgyMykgSVAtQWRkcmVzczogMTAuMC4xMDEuMjcgTmFtZTogInIxIgorSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBVRFAgKDE3KSBwYXlsb2FkIGxlbmd0aDogNTY0KSBmZTgwOjoyMTg6ZjNmZjpmZWE5OjkxNGUuODIzMSA+IGZlODA6OjIxZTo2NGZmOmZlMjM6NGQzNC44MjMxOiBbdWRwIHN1bSBva10gaG5jcCAoNTU2KQorCU5vZGUgZW5kcG9pbnQgKDEyKSBOSUQ6IDMxOmRhOjc4OmQyIEVQSUQ6IDAzMDAwMDAwCisJTm9kZSBzdGF0ZSAoNTQ0KSBOSUQ6IDYxOjY5OmVkOjYzIHNlcW5vOiAxMiA5NjkuNjk5cyBoYXNoOiAwMTFmZmZhMWRhOTY2MTQ4CisJCVBlZXIgKDE2KSBQZWVyLU5JRDogMzE6ZGE6Nzg6ZDIgUGVlci1FUElEOiAwMTAwMDAwMCBMb2NhbC1FUElEOiAwMTAwMDAwMAorCQlITkNQLVZlcnNpb24gKDIyKSBNOiAwIFA6IDQgSDogNCBMOiA0IFVzZXItYWdlbnQ6IGhuZXRkL2NhYzk3MWQKKwkJRXh0ZXJuYWwtQ29ubmVjdGlvbiAoMjMpCisJCQlEZWxlZ2F0ZWQtUHJlZml4ICgxOSkgVkxTTzogMC41OTlzIFBMU086IDAuMjk5cyBQcmVmaXg6IGZkMWY6Zjg4YzplMjA3OjovNDgKKwkJQXNzaWduZWQtUHJlZml4ICgxOCkgRVBJRDogMDEwMDAwMDAgUHJ0eTogMiBQcmVmaXg6IGZkMWY6Zjg4YzplMjA3OjovNjQKKwkJQXNzaWduZWQtUHJlZml4ICgxOCkgRVBJRDogMDMwMDAwMDAgUHJ0eTogMiBQcmVmaXg6IGZkMWY6Zjg4YzplMjA3OjE3OjovNjQKKwkJQXNzaWduZWQtUHJlZml4ICgyNSkgRVBJRDogMDMwMDAwMDAgUHJ0eTogMiBQcmVmaXg6IDEwLjAuMTE2LjAvMjQKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDEwMDAwMDAgSVAgQWRkcmVzczogMTAuMC45OS40MQorCQlOb2RlLUFkZHJlc3MgKDI0KSBFUElEOiAwMTAwMDAwMCBJUCBBZGRyZXNzOiBmZDFmOmY4OGM6ZTIwNzo6NjkKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDMwMDAwMDAgSVAgQWRkcmVzczogMTAuMC4xMTYuNDQKKwkJTm9kZS1BZGRyZXNzICgyNCkgRVBJRDogMDMwMDAwMDAgSVAgQWRkcmVzczogZmQxZjpmODhjOmUyMDc6MTc6OjZjCisJCUROUy1EZWxlZ2F0ZWQtWm9uZSAoMzMpIElQLUFkZHJlc3M6IGZkMWY6Zjg4YzplMjA3Ojo2OSBsYi0gbGFuLnIuaG9tZQorCQlETlMtRGVsZWdhdGVkLVpvbmUgKDM1KSBJUC1BZGRyZXNzOiBmZDFmOmY4OGM6ZTIwNzoxNzo6NmMgbGItIHdsYW4wLnIuaG9tZQorCQlETlMtRGVsZWdhdGVkLVpvbmUgKDQ0KSBJUC1BZGRyZXNzOiBmZDFmOmY4OGM6ZTIwNzoxNzo6NmMgLS0tIDExNi4wLjEwLmluLWFkZHIuYXJwYQorCQlETlMtRGVsZWdhdGVkLVpvbmUgKDYzKSBJUC1BZGRyZXNzOiBmZDFmOmY4OGM6ZTIwNzo6NjkgLS0tIDAuMC4wLjAuNy4wLjIuZS5jLjguOC5mLmYuMS5kLmYuaXA2LmFycGEKKwkJRE5TLURlbGVnYXRlZC1ab25lICg2MykgSVAtQWRkcmVzczogZmQxZjpmODhjOmUyMDc6MTc6OjZjIC0tLSA3LjEuMC4wLjcuMC4yLmUuYy44LjguZi5mLjEuZC5mLmlwNi5hcnBhCisJCU5vZGUtTmFtZSAoMjIpIElQLUFkZHJlc3M6IDEwLjAuMTE2LjQ0IE5hbWU6ICJyIgorCQlOb2RlLU5hbWUgKDIyKSBJUC1BZGRyZXNzOiBmZDFmOmY4OGM6ZTIwNzoxNzo6NmMgTmFtZTogInIiCmRpZmYgLS1naXQgYS90ZXN0cy9obmNwLnBjYXAgYi90ZXN0cy9obmNwLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTZkNzA0NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2huY3AucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9pZWVlODAyLjExX2V4dGhkci5vdXQgYi90ZXN0cy9pZWVlODAyLjExX2V4dGhkci5vdXQKaW5kZXggZGQxNjg5ZC4uN2IyMTdlNSAxMDA2NDQKLS0tIGEvdGVzdHMvaWVlZTgwMi4xMV9leHRoZHIub3V0CisrKyBiL3Rlc3RzL2llZWU4MDIuMTFfZXh0aGRyLm91dApAQCAtMSwyNiArMSwyNiBAQAotMTAwMTYzNjB1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMjJkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzFdIDB1cyBQcm9iZSBSZXF1ZXN0IChvbXVzKSBbMS4wIDIuMCA1LjUgMTEuMCA2LjAgOS4wIDEyLjAgMTguMCBNYml0XQotMTAwMTg5MjJ1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMTlkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAwIFtiaXQgMzFdIDB1cyBBY2tub3dsZWRnbWVudCBSQTo5MDphNDpkZTpjMDo0NjowYSAKLTEwMDE3MjQ1dXMgdHNmdCAxLjAgTWIvcyAtODZkQiBub2lzZSAyN2RCbSB0eCBwb3dlciBbYml0IDE1XSAzMTR1cyBQcm9iZSBSZXNwb25zZSAob211cykgWzEuMCogMi4wKiA1LjUqIDExLjAqIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdIENIOiAxCi0xMDA4NTMwMXVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC0xOWRCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDEgW2JpdCAzMV0gMHVzIFByb2JlIFJlcXVlc3QgKG9tdXMpIFsxLjAgMi4wIDUuNSAxMS4wIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdCi0xMDA4NzcxOHVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC0xOGRCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMV0gMHVzIEFja25vd2xlZGdtZW50IFJBOjkwOmE0OmRlOmMwOjQ2OjBhIAotMTAwODYwNDJ1cyB0c2Z0IDEuMCBNYi9zIC04NmRCIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIDMxNHVzIFByb2JlIFJlc3BvbnNlIChvbXVzKSBbMS4wKiAyLjAqIDUuNSogMTEuMCogNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0gQ0g6IDEKLTEwMjg0MzU4dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTYxZEIgc2lnbmFsIC04NmRCIG5vaXNlIGFudGVubmEgMSBbYml0IDMxXSAwdXMgUHJvYmUgUmVxdWVzdCAob211cykgWzEuMCAyLjAgNS41IDExLjAgNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0KLTEwMjg4MjE3dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTQ2ZEIgc2lnbmFsIC04NmRCIG5vaXNlIGFudGVubmEgMCBbYml0IDMxXSAwdXMgQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCi0xMDI4NjU0MnVzIHRzZnQgMS4wIE1iL3MgLTg2ZEIgbm9pc2UgMjdkQm0gdHggcG93ZXIgW2JpdCAxNV0gMzE0dXMgUHJvYmUgUmVzcG9uc2UgKG9tdXMpIFsxLjAqIDIuMCogNS41KiAxMS4wKiA2LjAgOS4wIDEyLjAgMTguMCBNYml0XSBDSDogMQotMTAzNTEzNjZ1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtNzBkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzFdIDB1cyBQcm9iZSBSZXF1ZXN0IChvbXVzKSBbMS4wIDIuMCA1LjUgMTEuMCA2LjAgOS4wIDEyLjAgMTguMCBNYml0XQotMTAzNTM3Njl1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtNTdkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAwIFtiaXQgMzFdIDB1cyBBY2tub3dsZWRnbWVudCBSQTo5MDphNDpkZTpjMDo0NjowYSAKLTEwMzUyMDkydXMgdHNmdCAxLjAgTWIvcyAtODZkQiBub2lzZSAyN2RCbSB0eCBwb3dlciBbYml0IDE1XSAzMTR1cyBQcm9iZSBSZXNwb25zZSAob211cykgWzEuMCogMi4wKiA1LjUqIDExLjAqIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdIENIOiAxCi0xMDQxODM2OHVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC02N2RCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDEgW2JpdCAzMV0gMHVzIFByb2JlIFJlcXVlc3QgKG9tdXMpIFsxLjAgMi4wIDUuNSAxMS4wIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdCi0xMDQyMDkyOXVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC03M2RCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMV0gMHVzIEFja25vd2xlZGdtZW50IFJBOjkwOmE0OmRlOmMwOjQ2OjBhIAotMTA0MTkyNTN1cyB0c2Z0IDEuMCBNYi9zIC04NmRCIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIDMxNHVzIFByb2JlIFJlc3BvbnNlIChvbXVzKSBbMS4wKiAyLjAqIDUuNSogMTEuMCogNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0gQ0g6IDEKLTEwNDg1MzcxdXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTcyZEIgc2lnbmFsIC04NmRCIG5vaXNlIGFudGVubmEgMSBbYml0IDMxXSAwdXMgUHJvYmUgUmVxdWVzdCAob211cykgWzEuMCAyLjAgNS41IDExLjAgNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0KLTEwNDg5Mjc4dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTc0ZEIgc2lnbmFsIC04NmRCIG5vaXNlIGFudGVubmEgMCBbYml0IDMxXSAwdXMgQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCi0xMDQ4NzYwMnVzIHRzZnQgMS4wIE1iL3MgLTg2ZEIgbm9pc2UgMjdkQm0gdHggcG93ZXIgW2JpdCAxNV0gMzE0dXMgUHJvYmUgUmVzcG9uc2UgKG9tdXMpIFsxLjAqIDIuMCogNS41KiAxMS4wKiA2LjAgOS4wIDEyLjAgMTguMCBNYml0XSBDSDogMQotMTMzMzg1MDh1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMTRkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzFdIDMxNHVzIEF1dGhlbnRpY2F0aW9uIChPcGVuIFN5c3RlbSktMTogU3VjY2Vzc2Z1bAotMTMzNDAyMTV1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMTdkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAwIFtiaXQgMzFdIDB1cyBBY2tub3dsZWRnbWVudCBSQTo5MDphNDpkZTpjMDo0NjowYSAKLTEzMzM5NDM1dXMgdHNmdCAxLjAgTWIvcyAtODZkQiBub2lzZSAyN2RCbSB0eCBwb3dlciBbYml0IDE1XSAzMTR1cyBBdXRoZW50aWNhdGlvbiAoT3BlbiBTeXN0ZW0pLTI6IAotMTMzNDE5OTl1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMThkQiBzaWduYWwgLTg2ZEIgbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzFdIDMxNHVzIEFzc29jIFJlcXVlc3QgKG9tdXMpIFsxLjAgMi4wIDUuNSAxMS4wIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdCi0xMzM0NjQ1OHVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC0xOGRCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMV0gMHVzIEFja25vd2xlZGdtZW50IFJBOjkwOmE0OmRlOmMwOjQ2OjBhIAotMTMzNDQ5MjV1cyB0c2Z0IDEuMCBNYi9zIC04NmRCIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIDMxNHVzIEFzc29jIFJlc3BvbnNlIEFJRCgxKSA6OiBTdWNjZXNzZnVsCi0xMzM1NTQzM3VzIHRzZnQgMjQxMiBNSHogMTFnIC0yMmRCIHNpZ25hbCAtODZkQiBub2lzZSBhbnRlbm5hIDEgMTkuNSBNYi9zIE1DUyAyIDIwIE1IeiBsb24gR0kgW2JpdCAzMV0gNDh1cyAKLTEzNDU0NzkxdXMgdHNmdCAyNDEyIE1IeiAxMWcgLTIxZEIgc2lnbmFsIC04NmRCIG5vaXNlIGFudGVubmEgMSA1Mi4wIE1iL3MgTUNTIDExIDIwIE1IeiBsb24gR0kgW2JpdCAzMV0gUHdyIE1nbXQgNDR1cyAKKzEwMDE2MzYwdXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTIyZEJtIHNpZ25hbCAtODZkQm0gbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzJdIFByb2JlIFJlcXVlc3QgKG9tdXMpIFsxLjAgMi4wIDUuNSAxMS4wIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdCisxMDAxODkyMnVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC0xOWRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMCBbYml0IDMyXSBBY2tub3dsZWRnbWVudCBSQTo5MDphNDpkZTpjMDo0NjowYSAKKzEwMDE3MjQ1dXMgdHNmdCAxLjAgTWIvcyAtODZkQm0gbm9pc2UgMjdkQm0gdHggcG93ZXIgW2JpdCAxNV0gUHJvYmUgUmVzcG9uc2UgKG9tdXMpIFsxLjAqIDIuMCogNS41KiAxMS4wKiA2LjAgOS4wIDEyLjAgMTguMCBNYml0XSBDSDogMQorMTAwODUzMDF1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMTlkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDEgW2JpdCAzMl0gUHJvYmUgUmVxdWVzdCAob211cykgWzEuMCAyLjAgNS41IDExLjAgNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0KKzEwMDg3NzE4dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTE4ZEJtIHNpZ25hbCAtODZkQm0gbm9pc2UgYW50ZW5uYSAwIFtiaXQgMzJdIEFja25vd2xlZGdtZW50IFJBOjkwOmE0OmRlOmMwOjQ2OjBhIAorMTAwODYwNDJ1cyB0c2Z0IDEuMCBNYi9zIC04NmRCbSBub2lzZSAyN2RCbSB0eCBwb3dlciBbYml0IDE1XSBQcm9iZSBSZXNwb25zZSAob211cykgWzEuMCogMi4wKiA1LjUqIDExLjAqIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdIENIOiAxCisxMDI4NDM1OHVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC02MWRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMSBbYml0IDMyXSBQcm9iZSBSZXF1ZXN0IChvbXVzKSBbMS4wIDIuMCA1LjUgMTEuMCA2LjAgOS4wIDEyLjAgMTguMCBNYml0XQorMTAyODgyMTd1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtNDZkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMl0gQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCisxMDI4NjU0MnVzIHRzZnQgMS4wIE1iL3MgLTg2ZEJtIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIFByb2JlIFJlc3BvbnNlIChvbXVzKSBbMS4wKiAyLjAqIDUuNSogMTEuMCogNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0gQ0g6IDEKKzEwMzUxMzY2dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTcwZEJtIHNpZ25hbCAtODZkQm0gbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzJdIFByb2JlIFJlcXVlc3QgKG9tdXMpIFsxLjAgMi4wIDUuNSAxMS4wIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdCisxMDM1Mzc2OXVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC01N2RCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMCBbYml0IDMyXSBBY2tub3dsZWRnbWVudCBSQTo5MDphNDpkZTpjMDo0NjowYSAKKzEwMzUyMDkydXMgdHNmdCAxLjAgTWIvcyAtODZkQm0gbm9pc2UgMjdkQm0gdHggcG93ZXIgW2JpdCAxNV0gUHJvYmUgUmVzcG9uc2UgKG9tdXMpIFsxLjAqIDIuMCogNS41KiAxMS4wKiA2LjAgOS4wIDEyLjAgMTguMCBNYml0XSBDSDogMQorMTA0MTgzNjh1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtNjdkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDEgW2JpdCAzMl0gUHJvYmUgUmVxdWVzdCAob211cykgWzEuMCAyLjAgNS41IDExLjAgNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0KKzEwNDIwOTI5dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTczZEJtIHNpZ25hbCAtODZkQm0gbm9pc2UgYW50ZW5uYSAwIFtiaXQgMzJdIEFja25vd2xlZGdtZW50IFJBOjkwOmE0OmRlOmMwOjQ2OjBhIAorMTA0MTkyNTN1cyB0c2Z0IDEuMCBNYi9zIC04NmRCbSBub2lzZSAyN2RCbSB0eCBwb3dlciBbYml0IDE1XSBQcm9iZSBSZXNwb25zZSAob211cykgWzEuMCogMi4wKiA1LjUqIDExLjAqIDYuMCA5LjAgMTIuMCAxOC4wIE1iaXRdIENIOiAxCisxMDQ4NTM3MXVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC03MmRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMSBbYml0IDMyXSBQcm9iZSBSZXF1ZXN0IChvbXVzKSBbMS4wIDIuMCA1LjUgMTEuMCA2LjAgOS4wIDEyLjAgMTguMCBNYml0XQorMTA0ODkyNzh1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtNzRkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMl0gQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCisxMDQ4NzYwMnVzIHRzZnQgMS4wIE1iL3MgLTg2ZEJtIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIFByb2JlIFJlc3BvbnNlIChvbXVzKSBbMS4wKiAyLjAqIDUuNSogMTEuMCogNi4wIDkuMCAxMi4wIDE4LjAgTWJpdF0gQ0g6IDEKKzEzMzM4NTA4dXMgdHNmdCAxLjAgTWIvcyAyNDEyIE1IeiAxMWIgLTE0ZEJtIHNpZ25hbCAtODZkQm0gbm9pc2UgYW50ZW5uYSAxIFtiaXQgMzJdIEF1dGhlbnRpY2F0aW9uIChPcGVuIFN5c3RlbSktMTogU3VjY2Vzc2Z1bAorMTMzNDAyMTV1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMTdkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMl0gQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCisxMzMzOTQzNXVzIHRzZnQgMS4wIE1iL3MgLTg2ZEJtIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIEF1dGhlbnRpY2F0aW9uIChPcGVuIFN5c3RlbSktMjogCisxMzM0MTk5OXVzIHRzZnQgMS4wIE1iL3MgMjQxMiBNSHogMTFiIC0xOGRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMSBbYml0IDMyXSBBc3NvYyBSZXF1ZXN0IChvbXVzKSBbMS4wIDIuMCA1LjUgMTEuMCA2LjAgOS4wIDEyLjAgMTguMCBNYml0XQorMTMzNDY0NTh1cyB0c2Z0IDEuMCBNYi9zIDI0MTIgTUh6IDExYiAtMThkQm0gc2lnbmFsIC04NmRCbSBub2lzZSBhbnRlbm5hIDAgW2JpdCAzMl0gQWNrbm93bGVkZ21lbnQgUkE6OTA6YTQ6ZGU6YzA6NDY6MGEgCisxMzM0NDkyNXVzIHRzZnQgMS4wIE1iL3MgLTg2ZEJtIG5vaXNlIDI3ZEJtIHR4IHBvd2VyIFtiaXQgMTVdIEFzc29jIFJlc3BvbnNlIEFJRCgxKSA6OiBTdWNjZXNzZnVsCisxMzM1NTQzM3VzIHRzZnQgMjQxMiBNSHogMTFuIC0yMmRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMSAxOS41IE1iL3MgTUNTIDIgMjAgTUh6IGxvbmcgR0kgW2JpdCAzMl0gCisxMzQ1NDc5MXVzIHRzZnQgMjQxMiBNSHogMTFuIC0yMWRCbSBzaWduYWwgLTg2ZEJtIG5vaXNlIGFudGVubmEgMSA1Mi4wIE1iL3MgTUNTIDExIDIwIE1IeiBsb25nIEdJIFtiaXQgMzJdIApkaWZmIC0tZ2l0IGEvdGVzdHMvaWVlZTgwMi4xMV9yeC1zdGJjLm91dCBiL3Rlc3RzL2llZWU4MDIuMTFfcngtc3RiYy5vdXQKaW5kZXggOWY0ODNiOS4uODM2OWI2MiAxMDA2NDQKLS0tIGEvdGVzdHMvaWVlZTgwMi4xMV9yeC1zdGJjLm91dAorKysgYi90ZXN0cy9pZWVlODAyLjExX3J4LXN0YmMub3V0CkBAIC0xLDMgKzEsMyBAQAotNzI2OHVzIHRzZnQgMjQ2MiBNSHogMTFnIC01MWRCIHNpZ25hbCBhbnRlbm5hIDEgMTUwLjAgTWIvcyBNQ1MgNyA0MCBNSHogc2hvcnQgR0kgUlgtU1RCQzEgQ0YgK1FvUyBEYXRhIElWOiAxMSBQYWQgMjAgS2V5SUQgMAotMTE5NzM4MTczdXMgdHNmdCAyNDYyIE1IeiAxMWcgLTQ2ZEIgc2lnbmFsIGFudGVubmEgMSAxMzUuMCBNYi9zIE1DUyA3IDQwIE1IeiBsb24gR0kgUlgtU1RCQzIgQ0YgK1FvUyBEYXRhIElWOiAgMSBQYWQgMjAgS2V5SUQgMAotNDcwMzgyMzM2dXMgdHNmdCAyNDYyIE1IeiAxMWcgLTQ1ZEIgc2lnbmFsIGFudGVubmEgMSAxNTAuMCBNYi9zIE1DUyA3IDQwIE1IeiBzaG9ydCBHSSBSWC1TVEJDMyBDRiArUW9TIERhdGEgSVY6ICA1IFBhZCAyMCBLZXlJRCAwCis3MjY4dXMgdHNmdCAyNDYyIE1IeiAxMW4gLTUxZEJtIHNpZ25hbCBhbnRlbm5hIDEgMTUwLjAgTWIvcyBNQ1MgNyA0MCBNSHogc2hvcnQgR0kgUlgtU1RCQzEgRGF0YSBJVjogMTEgUGFkIDIwIEtleUlEIDAKKzExOTczODE3M3VzIHRzZnQgMjQ2MiBNSHogMTFuIC00NmRCbSBzaWduYWwgYW50ZW5uYSAxIDEzNS4wIE1iL3MgTUNTIDcgNDAgTUh6IGxvbmcgR0kgUlgtU1RCQzIgRGF0YSBJVjogIDEgUGFkIDIwIEtleUlEIDAKKzQ3MDM4MjMzNnVzIHRzZnQgMjQ2MiBNSHogMTFuIC00NWRCbSBzaWduYWwgYW50ZW5uYSAxIDE1MC4wIE1iL3MgTUNTIDcgNDAgTUh6IHNob3J0IEdJIFJYLVNUQkMzIERhdGEgSVY6ICA1IFBhZCAyMCBLZXlJRCAwCmRpZmYgLS1naXQgYS90ZXN0cy9pa2V2MnBJMi1zZWdmYXVsdC12Lm91dCBiL3Rlc3RzL2lrZXYycEkyLXNlZ2ZhdWx0LXYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE2OTBlZjkKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pa2V2MnBJMi1zZWdmYXVsdC12Lm91dApAQCAtMCwwICsxLDggQEAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNTM2LCBiYWQgY2tzdW0gMCAoLT5mNDhlKSEpCisgICAgMTkyLjEuMi40NS41MDAgPiAxOTIuMS4yLjIzLjUwMDogaXNha21wIDIuMCBtc2dpZCAwMDAwMDAwMDogcGFyZW50X3NhIGlrZXYyX2luaXRbSV06CisgICAgKHNhW0NdOiBsZW49MjQwCisgICAgICAgIChwOiAjMSBwcm90b2lkPWlzYWttcCB0cmFuc2Zvcm09NCBsZW49NDAKKyAgICAgICAgICAgICh0OiAjMSB0eXBlPWVuY3IgaWQ9IzI2MzgwICkKKyAgICAgICAgICAgICh0OiAjMiB0eXBlPWludGVnIGlkPWhtYWMtc2hhICkKKyAgICAgICAgICAgICh0OiAjMyB0eXBlPXByZiBpZD1obWFjLXNoYSApCisgICAgICAgICAgICAodjJlKSkgW3x2MnNhXSkgW3x2MmtlXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaWtldjJwSTItc2VnZmF1bHQub3V0IGIvdGVzdHMvaWtldjJwSTItc2VnZmF1bHQub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM3ZjAyODEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pa2V2MnBJMi1zZWdmYXVsdC5vdXQKQEAgLTAsMCArMSBAQAorSVAgMTkyLjEuMi40NS41MDAgPiAxOTIuMS4yLjIzLjUwMDogaXNha21wOiBwYXJlbnRfc2EgaWtldjJfaW5pdFtJXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaWtldjJwSTItc2VnZmF1bHQucGNhcCBiL3Rlc3RzL2lrZXYycEkyLXNlZ2ZhdWx0LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNhN2UyOAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lrZXYycEkyLXNlZ2ZhdWx0LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXBjb21wLWhlYXBvdmVyZmxvdy5vdXQgYi90ZXN0cy9pcGNvbXAtaGVhcG92ZXJmbG93Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMTU4Y2RmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXBjb21wLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSwyIEBACitJUCAodG9zIDB4MzAsIHR0bCA0OCwgaWQgMTIzMzYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIENvbXByZXNzZWQgSVAgKDEwOCksIGxlbmd0aCAxMjMzNiwgYmFkIGNrc3VtIDMwMzAgKC0+Njk0MikhKQorICAgIDQ4LjQ4LjQ4LjQ4ID4gNDguNDguNDguNDg6IFt8SVBDT01QXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXBjb21wLWhlYXBvdmVyZmxvdy5wY2FwIGIvdGVzdHMvaXBjb21wLWhlYXBvdmVyZmxvdy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhmM2NiMzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pcGNvbXAtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXB2Nmhkci1oZWFwb3ZlcmZsb3ctdi5vdXQgYi90ZXN0cy9pcHY2aGRyLWhlYXBvdmVyZmxvdy12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi40ZTM3MzBhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXB2Nmhkci1oZWFwb3ZlcmZsb3ctdi5vdXQKQEAgLTAsMCArMSBAQAorSVA2IChjbGFzcyAweDMzLCBmbG93bGFiZWwgMHgwMzAzMCwgaGxpbSA0OCwgbmV4dC1oZWFkZXIgT3B0aW9ucyAoMCkgcGF5bG9hZCBsZW5ndGg6IDEyMzM2KSAzMDMwOjMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMDozMDMwOjMwMzAgPiAzMDMwOjMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMDozMDMwOjMwMzA6IEhCSCBbdHJ1bmNdIFt8SEJIXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXB2Nmhkci1oZWFwb3ZlcmZsb3cub3V0IGIvdGVzdHMvaXB2Nmhkci1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmY5YmM5N2UKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pcHY2aGRyLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorSVA2IDMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMCA+IDMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMDozMDMwOjMwMzA6MzAzMDogSEJIIFt8SEJIXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXB2Nmhkci1oZWFwb3ZlcmZsb3cucGNhcCBiL3Rlc3RzL2lwdjZoZHItaGVhcG92ZXJmbG93LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTlkMjhkNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lwdjZoZHItaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNpcy1zZWctZmF1bHQtMS12Lm91dCBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTEtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTFiNGNkYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTEtdi5vdXQKQEAgLTAsMCArMSwzMDEgQEAKK0lTLUlTLCBsZW5ndGggMTQ5NworCUwyIExhbiBJSUgsIGhsZW46IDI3LCB2OiAxLCBwZHUtdjogMSwgc3lzLWlkLWxlbjogNiAoMCksIG1heC1hcmVhOiAzICgwKQorCSAgc291cmNlLWlkOiA0NDQ0LjA0NDQuNDQ0NCwgIGhvbGRpbmcgdGltZTogMTBzLCBGbGFnczogW0xldmVsIDIgb25seV0KKwkgIGxhbi1pZDogICAgNjM0NC40NDQ0LjQ0NDQuMDEsIFByaW9yaXR5OiA2NCwgUERVIGxlbmd0aDogMTQ5NworCSAgICBQcm90b2NvbHMgc3VwcG9ydGVkIFRMViAjMTI5LCBsZW5ndGg6IDEKKwkgICAgICBOTFBJRChzKTogSVB2NCAoMHhjYykKKwkgICAgQXJlYSBhZGRyZXNzKGVzKSBUTFYgIzEsIGxlbmd0aDogNAorCSAgICAgIEFyZWEgYWRkcmVzcyAobGVuZ3RoOiAzKTogNDkuMDAxNAorCSAgICB1bmtub3duIFRMViAjODAsIGxlbmd0aDogNAorCQkweDAwMDA6ICAwYTAwIDAwMDIKKwkgICAgUmVzdGFydCBTaWduYWxpbmcgVExWICMyMTEsIGxlbmd0aDogMworCSAgICAgIEZsYWdzIFtub25lXSwgUmVtYWluaW5nIGhvbGRpbmcgdGltZSAwcworCSAgICBJUyBOZWlnaGJvcihzKSBUTFYgIzYsIGxlbmd0aDogNgorCSAgICAgIFNOUEE6IGMyMDIuMjk5OC4wMDUxCisJICAgIFBhZGRpbmcgVExWICM4LCBsZW5ndGg6IDI1NQorCSAgICBJUyBBbGlhcyBJRCBUTFYgIzI0LCBsZW5ndGg6IDI1NQorCSAgICAgIElTIE5laWdoYm9yOiBmNTAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgbm8gc3ViLVRMVnMgcHJlc2VudAorCSAgICAgIElTIE5laWdoYm9yOiAwMDAwLjAwMDAuMDAwMC4wMCwgc3ViLVRMVnMgcHJlc2VudCAoMzcpCisJICAgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgICBCYW5kd2lkdGggQ29uc3RyYWludHMgc3ViVExWICMyMiwgbGVuZ3RoOiAwCisJICAgICAgICBCYW5kd2lkdGggQ29uc3RyYWludHMgTW9kZWwgSUQ6IFJ1c3NpYW4gZG9sbHMgKDApCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNjogLTAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxMDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDExOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxMzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0OiAtMTI2NzY1MDU5NzAyNzcxOTMwNDcwODA5Ni4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDIxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDI0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyNjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDI3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyOTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDMwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMzE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QzMjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDMzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMzQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QzNTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDM2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMzc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QzODogMTYuNzc3IE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QzOTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDQwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNDE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q0MjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDQzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNDQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q0NTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDQ2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNDc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q0ODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDQ5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNTA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q1MTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDUyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNTM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q1NDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDU1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNTY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q1NzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDU4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNTk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q2MDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDYxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNjI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q2MzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDY0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNjU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q2NjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDY3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNjg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q2OTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDcwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNzE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q3MjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDczOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNzQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q3NTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDc2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUNzc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q3ODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDc5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUODA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q4MTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDgyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUODM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q4NDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDg1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUODY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q4NzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDg4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUODk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q5MDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDkxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUOTI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q5MzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDk0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUOTU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q5NjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDk3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUOTg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1Q5OTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwMDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwMTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwMjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwMzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwNDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwNTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwNjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwNzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEwOTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDExMDogMzM0OTAzMTI4NTI1OTI1MDAyNjA4OTE4OTIxMjE2LjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTExOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTEyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTEzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTE5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTIwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTIxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTIyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTIzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTI5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTMwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTMxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTMyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTMzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTM0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTM1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTM2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMTM3OiAtNC4xOTQgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEzODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDEzOTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0MDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0MTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0MjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0MzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0NDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0NTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0NjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0NzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0ODogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE0OTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1MDogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1MTogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1MjogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1MzogMC4wMDAgTWJwcworCSAgICAgICAgICBCYW5kd2lkdGggY29uc3RyYWludCBDVDE1NDogMTYuNzc3IE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNTU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNTY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNTc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNTg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNTk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNjk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxNzk6IDEwOTk1MTEuNjI1IE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxODk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QxOTk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMDk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMTk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjA6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjE6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjI6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjM6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjQ6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjU6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjY6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjc6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjg6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMjk6IDAuMDAwIE1icHMKKwkgICAgICAgICAgQmFuZHdpZHRoIGNvbnN0cmFpbnQgQ1QyMzA6IC0wLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjMxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjMyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjMzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjM5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjQ5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjUwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjUxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjUyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjUzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU4OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjU5OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjYwOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjYxOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjYyOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjYzOiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjY0OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjY1OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjY2OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjY3OiAwLjAwMCBNYnBzCisJICAgICAgICAgIEJhbmR3aWR0aCBjb25zdHJhaW50IENUMjY4OiAwLjAwMCBNYnBzCisJCSBbfGlzaXNdCmRpZmYgLS1naXQgYS90ZXN0cy9pc2lzLXNlZy1mYXVsdC0xLXYuc2ggYi90ZXN0cy9pc2lzLXNlZy1mYXVsdC0xLXYuc2gKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uMmU5YjZlYwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTEtdi5zaApAQCAtMCwwICsxLDE3IEBACisjIS9iaW4vc2gKKworIyBUaGlzICJ2ZXJib3NlIiBJU0lTIHByb3RvY29sIHRlc3QgaW52b2x2ZXMgYSBmbG9hdCBjYWxjdWxhdGlvbiB0aGF0CisjIG1heSBwcm9kdWNlIGEgc2xpZ2h0bHkgZGlmZmVyZW50IHJlc3VsdCBpZiB0aGUgY29tcGlsZXIgaXMgbm90IEdDQy4KKyMgVGVzdCBvbmx5IHdpdGggR0NDIChzaW1pbGFyIHRvIEdpdEh1YiBpc3N1ZSAjMzMzKS4KKwordGVzdF9uYW1lPWlzaXMtc2VnLWZhdWx0LTEtdgorCitpZiBbICEgLWYgLi4vTWFrZWZpbGUgXQordGhlbgorCXByaW50ZiAnICAgICUtMzVzOiBURVNUIFNLSVBQRUQgKG5vIE1ha2VmaWxlKVxuJyAkdGVzdF9uYW1lCitlbGlmIGdyZXAgJ15DQyA9IC4qZ2NjJyAuLi9NYWtlZmlsZSA+L2Rldi9udWxsCit0aGVuCisgIC4vVEVTVG9uY2UgJHRlc3RfbmFtZSBpc2lzLXNlZy1mYXVsdC0xLnBjYXAgaXNpcy1zZWctZmF1bHQtMS12Lm91dCAnLXQgLXYnCitlbHNlCisJcHJpbnRmICcgICAgJS0zNXM6IFRFU1QgU0tJUFBFRCAoY29tcGlsZXIgaXMgbm90IEdDQylcbicgJHRlc3RfbmFtZQorZmkKZGlmZiAtLWdpdCBhL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTEucGNhcCBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMTlkMDgyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNpcy1zZWctZmF1bHQtMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTItdi5vdXQgYi90ZXN0cy9pc2lzLXNlZy1mYXVsdC0yLXYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYzOTVhOGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pc2lzLXNlZy1mYXVsdC0yLXYub3V0CkBAIC0wLDAgKzEsMjIyIEBACitJUy1JUywgbGVuZ3RoIDE0OTcKKwlMMSBMYW4gSUlILCBobGVuOiAyNywgdjogMSwgcGR1LXY6IDEsIHN5cy1pZC1sZW46IDYgKDApLCBtYXgtYXJlYTogMyAoMCkKKwkgIHNvdXJjZS1pZDogMzMzMy4zMzMzLjMzMzMsICBob2xkaW5nIHRpbWU6IDEwcywgRmxhZ3M6IFt1bmtub3duIGNpcmN1aXQgdHlwZSAweDIxXQorCSAgbGFuLWlkOiAgICAzMzMzLjVhMzMuMzMzMy4wMiwgUHJpb3JpdHk6IDY0LCBQRFUgbGVuZ3RoOiAxNDk3CisJICAgIE11bHRpLVRvcG9sb2d5IENhcGFiaWxpdHkgVExWICMxNDQsIGxlbmd0aDogMQorCSAgICAgIE86IDEsIFJFUzogNCwgTVRJRChzKTogMzA3MworCSAgICAgIHVua25vd24gc3ViVExWICM0LCBsZW5ndGg6IDMKKwkgICAgICB1bmtub3duIHN1YlRMViAjNzMsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMxMCwgbGVuZ3RoOiAxMzIKKwkgICAgICB1bmtub3duIHN1YlRMViAjNCwgbGVuZ3RoOiAxMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDEwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogNTUKKwkgICAgICBTUEJNIFNlcnZpY2UgSWRlbnRpZmllciBhbmQgVW5pY2FzdCBBZGRyZXNzIHN1YlRMViAjMywgbGVuZ3RoOiAwCisJICAgICAgICBCTUFDOiAwMDAwMDYwNmMyMDEsIFJFUzogMiwgVklEOiAyNDU2CisJICAgICAgdW5rbm93biBzdWJUTFYgIzIwNCwgbGVuZ3RoOiA4MworCSAgICAgIHVua25vd24gc3ViVExWICM4LCBsZW5ndGg6IDE5MQorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjODIsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDg2CisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzM3LCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMzcKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMTA4CisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMzNywgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzQ4LCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzM3LCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMxNzIsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjNzYsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogOTAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDkwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMzcsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDEwNworCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMzcKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzIsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMzcsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogOTIKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzExMywgbGVuZ3RoOiA5MAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDIzMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjNzksIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzIzNCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICM2NCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMzcsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMzNywgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMCwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgICB1bmtub3duIHN1YlRMViAjMiwgbGVuZ3RoOiAwCisJICAgICAgdW5rbm93biBzdWJUTFYgIzAsIGxlbmd0aDogMAorCSAgICAgIHVua25vd24gc3ViVExWICMwLCBsZW5ndGg6IDAKKwkgICAgQXJlYSBhZGRyZXNzKGVzKSBUTFYgIzEsIGxlbmd0aDogNAorCSAgICAgIEFyZWEgYWRkcmVzcyAobGVuZ3RoOiAzKTogNDkuMDAwYQorCSAgICBJUHY0IEludGVyZmFjZSBhZGRyZXNzKGVzKSBUTFYgIzEzMiwgbGVuZ3RoOiA0CisJICAgICAgSVB2NCBpbnRlcmZhY2UgYWRkcmVzczogMTAuMC4xMC4wCisJICAgIHVua25vd24gVExWICM1NSwgbGVuZ3RoOiAzCisJCTB4MDAwMDogIDAwMDAgMDAKKwkgICAgSVMgTmVpZ2hib3IocykgVExWICM2LCBsZW5ndGg6IDYKKwkgICAgICBTTlBBOiBjMjAxLjI5OTguY2M1MworCSAgICBQYWRkaW5nIFRMViAjOCwgbGVuZ3RoOiAxOTEKKwkgICAgdW5rbm93biBUTFYgIzAsIGxlbmd0aDogMAorCSAgICB1bmtub3duIFRMViAjMCwgbGVuZ3RoOiAwCisJICAgIHVua25vd24gVExWICMwLCBsZW5ndGg6IDAKKwkgICAgdW5rbm93biBUTFYgIzAsIGxlbmd0aDogMAorCSAgICB1bmtub3duIFRMViAjMCwgbGVuZ3RoOiAwCisJICAgIHVua25vd24gVExWICMwLCBsZW5ndGg6IDM3CisJCTB4MDAwMDogIDAwMDAgMDAwMCAwMDAwIDAwMjUgMDAwMCAwMDAwIDAwMDAgMDAwMAorCQkweDAwMTA6ICAwMDAwIDAwMDIgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAKKwkJMHgwMDIwOiAgMDAwMCA3MzAwIDFlCisJICAgIHVua25vd24gVExWICMwLCBsZW5ndGg6IDAKKwkgICAgdW5rbm93biBUTFYgIzAsIGxlbmd0aDogMTcwCisJCTB4MDAwMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDIwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAzMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNDA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDUwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA2MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNzA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDgwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA5MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwYTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkgICAgdW5rbm93biBUTFYgIzE3MCwgbGVuZ3RoOiAxNzAKKwkJMHgwMDAwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAxMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMjA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDMwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA0MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDYwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA3MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwODA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDkwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDBhMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCSAgICB1bmtub3duIFRMViAjMTcwLCBsZW5ndGg6IDE3MAorCQkweDAwMDA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDEwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAyMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMzA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDQwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA1MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNjA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDcwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA4MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwOTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMGEwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJICAgIHVua25vd24gVExWICMxNzAsIGxlbmd0aDogMTcwCisJCTB4MDAwMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDIwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAzMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNDA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDUwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA2MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNzA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDgwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA5MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwYTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkgICAgdW5rbm93biBUTFYgIzE3MCwgbGVuZ3RoOiAxNzAKKwkJMHgwMDAwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAxMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMjA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDMwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA0MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDYwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA3MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwODA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDkwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDBhMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCSAgICB1bmtub3duIFRMViAjMTcwLCBsZW5ndGg6IDE3MAorCQkweDAwMDA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDEwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDAyMDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwMzA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDQwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA1MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwNjA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMDcwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJCTB4MDA4MDogIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYQorCQkweDAwOTA6ICBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhIGFhYWEKKwkJMHgwMGEwOiAgYWFhYSBhYWFhIGFhYWEgYWFhYSBhYWFhCisJICAgICAgMTY0IHN0cmFnZ2xlciBieXRlcwpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNpcy1zZWctZmF1bHQtMi5wY2FwIGIvdGVzdHMvaXNpcy1zZWctZmF1bHQtMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY2YTY0NmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pc2lzLXNlZy1mYXVsdC0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNpcy1zZWctZmF1bHQtMy12Lm91dCBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTMtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE2MTA5MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTMtdi5vdXQKQEAgLTAsMCArMSw0IEBACitJUy1JUywgbGVuZ3RoIDEzMTE0NgorCUwyIExTUCwgaGxlbjogMjcsIHY6IDEsIHBkdS12OiAxLCBzeXMtaWQtbGVuOiA2ICgwKSwgbWF4LWFyZWE6IDMgKDApCisJICBsc3AtaWQ6IDExMTEuMTExMS4xMTExLjAwLTAwLCBzZXE6IDB4MDAwMDAwMDcsIGxpZmV0aW1lOiAgMTIwMHMKKwkgIGNoa3N1bTogMHgzNzhlIFt8aXNpc10KZGlmZiAtLWdpdCBhL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTMucGNhcCBiL3Rlc3RzL2lzaXMtc2VnLWZhdWx0LTMucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xN2Y2ODVmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNpcy1zZWctZmF1bHQtMy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lzaXNfcG9pLm91dCBiL3Rlc3RzL2lzaXNfcG9pLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMjk3MzRiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNpc19wb2kub3V0CkBAIC0wLDAgKzEsOCBAQAorSVMtSVMsIGxlbmd0aCA0MworCUwyIExTUCwgaGxlbjogMjcsIHY6IDEsIHBkdS12OiAxLCBzeXMtaWQtbGVuOiA2ICgwKSwgbWF4LWFyZWE6IDMgKDApCisJICBsc3AtaWQ6IDEyODAuOTIwMS45MDk4LjAwLTAwLCBzZXE6IDB4MDAwMDAxZTIsIGxpZmV0aW1lOiAgICAgMHMKKwkgIGNoa3N1bTogMHgwMDAwICh1bnZlcmlmaWVkKSwgUERVIGxlbmd0aDogNDMsIEZsYWdzOiBbIEwyIElTIF0KKwkgICAgUHVyZ2UgT3JpZ2luYXRvciBJZGVudGlmaWVyIFRMViAjMTMsIGxlbmd0aDogNworCSAgICAgIFB1cmdlIE9yaWdpbmF0b3IgU3lzdGVtLUlEOiAxMjgwLjkyMDIuMDA3NAorCSAgICBIb3N0bmFtZSBUTFYgIzEzNywgbGVuZ3RoOiA1CisJICAgICAgSG9zdG5hbWU6IFAyX3JlCmRpZmYgLS1naXQgYS90ZXN0cy9pc2lzX3BvaS5wY2FwIGIvdGVzdHMvaXNpc19wb2kucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mZGQ0MzNjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNpc19wb2kucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9pc2lzX3BvaTIub3V0IGIvdGVzdHMvaXNpc19wb2kyLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xMGVlY2NhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNpc19wb2kyLm91dApAQCAtMCwwICsxLDkgQEAKK0lTLUlTLCBsZW5ndGggNDkKKwlMMiBMU1AsIGhsZW46IDI3LCB2OiAxLCBwZHUtdjogMSwgc3lzLWlkLWxlbjogNiAoMCksIG1heC1hcmVhOiAzICgwKQorCSAgbHNwLWlkOiAxMjgwLjkyMDEuNzA4Mi4wMC0wMCwgc2VxOiAweDAwMDAwMjNmLCBsaWZldGltZTogICAgIDBzCisJICBjaGtzdW06IDB4MDAwMCAodW52ZXJpZmllZCksIFBEVSBsZW5ndGg6IDQ5LCBGbGFnczogWyBMMiBJUyBdCisJICAgIFB1cmdlIE9yaWdpbmF0b3IgSWRlbnRpZmllciBUTFYgIzEzLCBsZW5ndGg6IDEzCisJICAgICAgUHVyZ2UgT3JpZ2luYXRvciBTeXN0ZW0tSUQ6IDEyODAuOTIwMi43MDkyCisJICAgICAgUmVjZWl2ZWQgZnJvbSBTeXN0ZW0tSUQ6IDEyODAuOTIwMi4wMDc0CisJICAgIEhvc3RuYW1lIFRMViAjMTM3LCBsZW5ndGg6IDUKKwkgICAgICBIb3N0bmFtZTogUDFfcmUKZGlmZiAtLWdpdCBhL3Rlc3RzL2lzaXNfcG9pMi5wY2FwIGIvdGVzdHMvaXNpc19wb2kyLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODE3NDUyNAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzaXNfcG9pMi5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2lzb2NsbnMtaGVhcG92ZXJmbG93LTIub3V0IGIvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmJkZmQwMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzb2NsbnMtaGVhcG92ZXJmbG93LTIub3V0CkBAIC0wLDAgKzEgQEAKK2ZlOmZlOmZlOmZlOmZlOmZlID4gMzA6MzA6ZGE6ZmU6ZmU6ZmUsIGV0aGVydHlwZSBPU0kgKDB4ZmVmZSksIGxlbmd0aCA4MDg0NjQ0MzI6IE9TSSBOTFBJRCBDTE5QICgweDgxKTogW3xjbG5wXQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMi5wY2FwIGIvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM4NjU3MGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pc29jbG5zLWhlYXBvdmVyZmxvdy0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMy5vdXQgYi90ZXN0cy9pc29jbG5zLWhlYXBvdmVyZmxvdy0zLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NGQyYTIyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMy5vdXQKQEAgLTAsMCArMSBAQAorZmU6ZmU6ZmU6ZmU6ZmU6ZmUgPiAzMDozMDpkYTpmZTpmZTpmZSwgZXRoZXJ0eXBlIE9TSSAoMHhmZWZlKSwgbGVuZ3RoIDgwODQ2NDQzMjogT1NJIE5MUElEIENMTlAgKDB4ODEpOiAwMCA+IGU4LjMwMzAsIEVjaG8gUmVxdWVzdCwgbGVuZ3RoIDgwODQ2NDQxNwpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMy5wY2FwIGIvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3ctMy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MjViZGIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pc29jbG5zLWhlYXBvdmVyZmxvdy0zLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3cub3V0IGIvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmMyY2ZkZmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9pc29jbG5zLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorfE9TSQpkaWZmIC0tZ2l0IGEvdGVzdHMvaXNvY2xucy1oZWFwb3ZlcmZsb3cucGNhcCBiL3Rlc3RzL2lzb2NsbnMtaGVhcG92ZXJmbG93LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjcyNGRiMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2lzb2NsbnMtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvanVuaXBlcl9oZWFkZXItaGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL2p1bmlwZXJfaGVhZGVyLWhlYXBvdmVyZmxvdy5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjEzY2ZiZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2p1bmlwZXJfaGVhZGVyLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorW3xqdW5pcGVyX2hkcl0sIGxlbmd0aCA4MDg0NjQ0MzIKZGlmZiAtLWdpdCBhL3Rlc3RzL2p1bmlwZXJfaGVhZGVyLWhlYXBvdmVyZmxvdy5wY2FwIGIvdGVzdHMvanVuaXBlcl9oZWFkZXItaGVhcG92ZXJmbG93LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWE4ODYzNgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2p1bmlwZXJfaGVhZGVyLWhlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2tkYXkxLm91dCBiL3Rlc3RzL2tkYXkxLm91dAppbmRleCBlYWFhY2FhLi45Y2I4ODRkIDEwMDY0NAotLS0gYS90ZXN0cy9rZGF5MS5vdXQKKysrIGIvdGVzdHMva2RheTEub3V0CkBAIC0xLDE1ICsxLDIgQEAKLUlQNiwgd3JvbmcgbGluay1sYXllciBlbmNhcHN1bGF0aW9uICh0b3MgMHgxMCwgdHRsIDE5MiwgaWQgNjMxNzcsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBTQ1RQICgxMzIpLCBsZW5ndGggMTY4LCBvcHRpb25zIChzZWN1cml0eSBbYmFkIGxlbmd0aCAxMTBdKSwgYmFkIGNrc3VtIGEyOTEgKC0+OTIwNCkhKQotICAgIGMwODQ6YTI5MTpiOGFhOjQyYWE6M2UzODo5YWM3OjgyNmU6YjkzMC4zMzk0MyA+IDg0OTc6MWEzMDo3Y2Q0OmQ0ZDQ6ZDRkNDpkNDI4OjEzOjY4LjY3MDQ6IHNjdHBbRm9yQ0VTIEhQXSAoMSkgW0RBVEFdIChCKShFKSBbVFNOOiAxOTM0OTE3ODg3XSBbU0lEOiAyNTZdIFtTU0VRIDE1MzYwXSBbUFBJRCAweDNjMDBdIAotCUZvckNFUyBDb25maWcgCi0JRm9yQ0VTIFZlcnNpb24gMTQgbGVuIDg4QiBmbGFncyAweDBhMDQwNjA0IAotCVNyY0lEIDB4ZmYwMDAyMDAoQWxsTXVsdGljYXN0KSBEc3RJRCAweGI1OWNiZShGRSkgQ29ycmVsYXRvciAweDMwNDgwODA1ZjQwMTA4MDAKLQkJTWVzc3kgb3BlciBUTFYgaGVhZGVyLCB0eXBlICgweDYwMCkKLQkJZXhjZXNzIG9mIC0yNDAgQnl0ZXMgCi0JWzB4MDAwMDogIGU4MDMgMDAxNiBmZjAwIDAyMDAgMDBiNSA5Y2JlIDMwNDggMDgwNQotCVsweDAwMTA6ICBmNDAxIDA4MDAgMGEwNCAwNjA0IDAwMTAgMDAzYyAwMDAwIDNjZTgKLQlbMHgwMDIwOiAgMDMwMCAzYzAwIDAwMGUgMDAxNiAwNjA0IDAwMTAgMDAzYyAwMDAwCi0JWzB4MDAzMDogIDAwMDAgZmYwMCBmZmZmIGE2OWMgYmUzMCA0ODA4IDA2MDAgMDEwOAotCVsweDAwNDA6ICAwMDA2IDA0MDAgMDE4NCBiNTljIGJlMzAgODRiNSAwMDEwIDAwMDAKLQlbMHgwMDUwOiAgY2MwNSAzNjdlIDAwMDMgMDAwMAotCV1bfHNjdHBdCitJUDYsIHdyb25nIGxpbmstbGF5ZXIgZW5jYXBzdWxhdGlvbiAKIEVYSVQgQ09ERSAwMDAwMDEwMApkaWZmIC0tZ2l0IGEvdGVzdHMva2RheTIub3V0IGIvdGVzdHMva2RheTIub3V0CmluZGV4IDc3MGZjM2IuLmZhMTM1NzIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2tkYXkyLm91dAorKysgYi90ZXN0cy9rZGF5Mi5vdXQKQEAgLTksMTIgKzksNyBAQAogCSAgMHgwMDYwOiAgMDAwMCAwMDAwIDAwMDAgMzIwMCAwMDAwIDAwMDAgMDBhYSA2ODczCiAJUG9ydCBzdGF0dXMgVExWICgweDAyKSwgbGVuZ3RoIDI2LCBTdGF0dXM6IFVua25vd24gKDApCiAJVW5rbm93biBUTFYgKDB4MzcpLCBsZW5ndGggNDEwMQotCSAgMHgwMDAwOiAgMzcxMCAwNWZmIGZmMDUgY2MwOSAzNDkzIDAwMDAgMDAwMCA4MDAwCi0JICAweDAwMTA6ICAwMDAwIDAwMDAgMDAzMiAwMDAwIDAwMDAgMDAwMCBhYTY4IDczNTQKLQkgIDB4MDAyMDogIGQ3MDYgMGIwMCAzYzAwIDAwMDAgM2MwMCAwMDAwIDAwODAgMDAwMAotCSAgMHgwMDMwOiAgZmZmZCA0ZDVmIGQ5YmQgYzcwOSAzMGFjIDgxNzYgYjM2ZCBjYzExCi0JICAweDAwNDA6ICAzYWJmIDEyOTEgZjEwNiA0ZWRlIDYxZjQgNjI5NyBhZmM0IDM5YTQKLQkgIDB4MDA1MDogIDBkYjkgN2EKKwkJIHBhY2tldCBpcyB0b28gc2hvcnQKIElQICh0b3MgMHgxMCwgdHRsIDYyLCBpZCA2NDgwNiwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKICAgICAyMDQuOS41MS4xMzIuNTAwNzkgPiAyMDQuOS41NC44MC4yMjogRmxhZ3MgWy5dLCBja3N1bSAweDg2MTEgKGluY29ycmVjdCAtPiAweGE2NzgpLCBhY2sgMTgxOTIxODYwNiwgd2luIDQwOTQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDk0MTM3MTc3NSBlY3IgNDI5NDk2NzI0Ml0sIGxlbmd0aCAwCiBJUCAodG9zIDB4MTAsIHR0bCA2MiwgaWQgNjI5MjAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIsIGJhZCBja3N1bSA0NTA0ICgtPjQ1MWEpISkKQEAgLTI5LDYgKzI0LDYgQEAKIAkgIDB4MDAyMDogIGIzNmQgY2MxMSAzYWJmIDEyOTEgZjEwNiA0ZWRlIDYxZjQgNjI5NwogCSAgMHgwMDMwOiAgYWZjNCAzOWE0IDBkYjkgN2FhNSA2ODczIDMzZTgKIAlSUEtJLVJUUnY2NSwgRXJyb3IgUmVwb3J0IFBEVSAoMTApLCBsZW5ndGg6IDIxCi0JICBFcnJvciBjb2RlOiBVbmtub3duICg2NiksIEVuY2Fwc3VsYXRlZCBQRFUgbGVuZ3RoOiAzN3x0cnVuYworCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogMzcKIAlbfFJQS0ktUlRSXQogRVhJVCBDT0RFIDAwMDAwMTAwCmRpZmYgLS1naXQgYS90ZXN0cy9rZGF5My5vdXQgYi90ZXN0cy9rZGF5My5vdXQKaW5kZXggZjZmZDcyOC4uOTU5MDllMCAxMDA2NDQKLS0tIGEvdGVzdHMva2RheTMub3V0CisrKyBiL3Rlc3RzL2tkYXkzLm91dApAQCAtMSw3ICsxLDYgQEAKIElQICh0b3MgMHgxMCwgdHRsIDY0LCBpZCA2MzE3Nywgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCAxNjgpCiAgICAgMjA0LjkuNTQuODAuMjIgPiAyMDQuOS41MS4xMzIuNTAwNzk6IEZsYWdzIFtQLl0sIGNrc3VtIDB4MDI4MiAoaW5jb3JyZWN0IC0+IDB4MzIxNyksIHNlcSAxODE5MjE4NjA2OjE4MTkyMTg3MjIsIGFjayAxMjM4NDg1MDc2LCB3aW4gMTAzOSwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTM0MDU5MjA3OCBlY3IgOTQxMzcxODgyXSwgbGVuZ3RoIDExNgotSVA2LCB3cm9uZyBsaW5rLWxheWVyIGVuY2Fwc3VsYXRpb24gKHRvcyAweDEwLCB0dGwgNjIsIGlkIDY0ODA2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyLCBvcHRpb25zICh1bmtub3duIDE5NSBbYmFkIGxlbmd0aCAxNTldKSwgYmFkIGNrc3VtIDNkYTYgKC0+NDVjYSkhKQotICAgIDI3NzU5ID4gNDc4MjogIHRjcCAyNCBbYmFkIGhkciBsZW5ndGggMCAtIHRvbyBzaG9ydCwgPCAyMF0KK0lQNiwgd3JvbmcgbGluay1sYXllciBlbmNhcHN1bGF0aW9uIAogSVAgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDYyOTIwLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyLCBiYWQgY2tzdW0gNDUwNCAoLT40NTFhKSEpCiAgICAgMjA0LjkuNTEuMTMyLjUwMDc5ID4gMjA0LjI0My41My44MC4yMjogRmxhZ3MgWy5dLCBja3N1bSAweDg1OGIgKGluY29ycmVjdCAtPiAweDg1YTEpLCBhY2sgMTgxOTIxODcyMiwgd2luIDQwOTIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDk0MTM3MTkxMyBlY3IgMTM0MDU5MjA4NF0sIGxlbmd0aCAwCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA2MzE3OCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MiwgYmFkIGNrc3VtIDNlOGMgKC0+NDM4YykhKQpAQCAtMTMsMTAgKzEyLDcgQEAKIAkgIDB4MDAxMDogIGY4NTcgZWU2OCA0ZGZkIDRkNWYgZDliZCBjNzA5IDMwYWMgODE3NgogCSAgMHgwMDIwOiAgYjM2ZCBjYzExIDNhYmYgMTI5MSBmMTA2IDRlZGUgNjFmNCA2Mjk3CiAJICAweDAwMzA6ICBhZmM0IDM5YTQgMGRiOSA3YWE1IDY4NzMgMzNlOAotCVJQS0ktUlRSdjY1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjZ8dHJ1bmMKLQlSUEtJLVJUUnYxMTUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgotCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogMTIKLQkgICAgLS0tLS1lbmNhcHN1bGF0ZWQgUERVLS0tLS18dHJ1bmN8dHJ1bmMKKwlSUEtJLVJUUnY2NSwgRXJyb3IgUmVwb3J0IFBEVSAoMTApLCBsZW5ndGg6IDY2CiAJW3xSUEtJLVJUUl0KIElQICh0b3MgMHgxMCwgdHRsIDYyLCBpZCA2NDgwNiwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKICAgICAyMDQuOS41MS4xMzIuNTAwNzkgPiAyMDQuOS41NC44MC4yMjogRmxhZ3MgWy5dLCBja3N1bSAweDg2MTEgKGluY29ycmVjdCAtPiAweGE2NzgpLCBhY2sgMCwgd2luIDQwOTQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDk0MTM3MTc3NSBlY3IgNDI5NDk2NzI0Ml0sIGxlbmd0aCAwCkBAIC0zMyw5ICsyOSw2IEBACiAJICAweDAwMzA6ICBhZmM0IDM5YTQgMGRiOSA3YWE1IDY4NzMgMzNlOAogCVJQS0ktUlRSdjY1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjYKIAkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDM3Ci0JICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tfHRydW5jfHRydW5jCi0JUlBLSS1SVFJ2OSwgVW5rbm93biBQRFUgKDUxKSwgbGVuZ3RoOiAzMgotCSAgMHgwMDAwOiAgMDkzMyA4NGNjIDAwMDAgMDAyMCA5ZjAwIDE2NDkgZDFjOCA1NDZjCi0JICAweDAwMTA6ICBmZjEzIDE5ODAgMTAwZiBmYzg1IDhiMDAgMDA1NSAwMDAwIDAxMDEKKwkgICAgLS0tLS1lbmNhcHN1bGF0ZWQgUERVLS0tLS0KIAlbfFJQS0ktUlRSXQogRVhJVCBDT0RFIDAwMDAwMTAwCmRpZmYgLS1naXQgYS90ZXN0cy9rZGF5NC5vdXQgYi90ZXN0cy9rZGF5NC5vdXQKaW5kZXggOTViMjljYy4uY2NkZWJmYyAxMDA2NDQKLS0tIGEvdGVzdHMva2RheTQub3V0CisrKyBiL3Rlc3RzL2tkYXk0Lm91dApAQCAtMyw2ICszLDEwIEBACiBJUCAodG9zIDB4MTAsIHR0bCA2MiwgaWQgNjQ4MDYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIsIGJhZCBja3N1bSAzZGE2ICgtPjM1YTYpISkKICAgICAyMTIuOS41MS4xMzIuNTAwNzkgPiAyMDQuOS41NC44MC4yMjogRmxhZ3MgWy5dLCBja3N1bSAweDg2MTEgKGluY29ycmVjdCAtPiAweDQ4MTEpLCBhY2sgMTgxOTIxODYwNiwgd2luIDE3OTE4LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA5NDEzNzE5MDMgZWNyIDEzNDA1OTIwNzRdLCBsZW5ndGggMAogODQ6YjU6OWM6YmU6MzA6NDggVW5rbm93biBTU0FQIDB4MTAgPiAwYzpjNDo3YTowODplOToxMiBVbmtub3duIERTQVAgMHg0NCBJbmZvcm1hdGlvbiwgc2VuZCBzZXEgMCwgcmN2IHNlcSAyNiwgRmxhZ3MgW0NvbW1hbmRdLCBsZW5ndGggNTIKKwkweDAwMDA6ICA0NTEwIDAwMzQgZjVjOCA0MDAwIDNlMDYgNDUwNCBjYzA5IDMzODQgIEUuLjQuLkAuPi5FLi4uMy4KKwkweDAwMTA6ICBjYzA5IDM2NTAgYzM5ZiAwMDE2IDQ5ZDEgYzg1NCA2YzZmIDEzMjIgIC4uNlAuLi4uSS4uVGxvLiIKKwkweDAwMjA6ICA4MDEwIDBmZmMgODU4YiAwMDAwIDAxMDEgMDgwYSAzODFjIDMyMDkgIC4uLi4uLi4uLi4uLjguMi4KKwkweDAwMzA6ICA0ZmU3IGNmZDQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE8uLi4KIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDYzMTc4LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyKQogICAgIDIwNC45LjU0LjgwLjU1OTM2ID4gMjA0LjkuNTUuMTAuNDQzOiBGbGFncyBbLl0sIGNrc3VtIDB4MDU5NCAoaW5jb3JyZWN0IC0+IDB4NzI1YSksIGFjayAzNTg5NDk1NDA3LCB3aW4gMTA0MCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgNjQ3NzcwMjk0IGVjciAyMzY0Nzc5MzU0XSwgbGVuZ3RoIDAKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDM2NzUyLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDM5OSwgYmFkIGNrc3VtIGE0NmIgKC0+YTQ3NCkhKQpAQCAtMTQsMTAgKzE4LDcgQEAKIAkgIDB4MDAzMDogIGFmYzQgMzlhNCAwZGI5IDdhYTUgNjg3MyAzM2U4CiAJUlBLSS1SVFJ2NjUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgogCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogMzcKLQkgICAgLS0tLS1lbmNhcHN1bGF0ZWQgUERVLS0tLS18dHJ1bmN8dHJ1bmMKLQlSUEtJLVJUUnYxMTUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgotCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogMTIKLQkgICAgLS0tLS1lbmNhcHN1bGF0ZWQgUERVLS0tLS18dHJ1bmN8dHJ1bmMKKwkgICAgLS0tLS1lbmNhcHN1bGF0ZWQgUERVLS0tLS0KIAlbfFJQS0ktUlRSXQogSVAgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDY0ODA2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyKQogICAgIDIwNC45LjUxLjEzMi41MDA3OSA+IDIwNC45LjU0LjgwLjIyOiBGbGFncyBbLl0sIGNrc3VtIDB4ODYxMSAoaW5jb3JyZWN0IC0+IDB4YTY3OCksIGFjayAxODE5MjE4NjA2LCB3aW4gNDA5NCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgOTQxMzcxNzc1IGVjciA0Mjk0OTY3MjQyXSwgbGVuZ3RoIDAKQEAgLTM0LDEwICszNSw3IEBACiAJICAweDAwMzA6ICBhZmM0IDM5YTQgMGRiOSA3YWE1IDY4NzMgMzNlOAogCVJQS0ktUlRSdjY1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjYKIAkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDM3Ci0JICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tfHRydW5jfHRydW5jCi0JUlBLSS1SVFJ2MTE1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjYKLQkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDEyCi0JICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tfHRydW5jfHRydW5jCisJICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tCiAJW3xSUEtJLVJUUl0KIElQIHRydW5jYXRlZC1pcCAtIDc2OCBieXRlcyBtaXNzaW5nISAodG9zIDB4MTAsIHR0bCA2MiwgaWQgNjQ4MDYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggODIwLCBiYWQgY2tzdW0gM2RhNiAoLT4zYWE2KSEpCiAgICAgMjA0LjkuNTEuMTMyLjUwMDc5ID4gMjA0LjkuNTQuODAuMjI6IEZsYWdzIFsuXSwgc2VxIDA6NzY4LCBhY2sgMSwgd2luIDQwOTQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDk0MTM3MTc3NSBlY3IgNDI5NDk2NzI0Ml0sIGxlbmd0aCA3NjgKQEAgLTU1LDYgKzUzLDYgQEAKIAlSUEtJLVJUUnY2NSwgRXJyb3IgUmVwb3J0IFBEVSAoMTApLCBsZW5ndGg6IDY2CiAJICBFcnJvciBjb2RlOiBVbmtub3duICg2NiksIEVuY2Fwc3VsYXRlZCBQRFUgbGVuZ3RoOiAxMDAKIAkgIEVycm9yIHRleHQ6IF5AXkBeQE0tXj9NLV4/Xl9eW3BNLXhXTS1uaE1NLX1NX00tWU0tPU0tR15JME0tLE0tXkF2TS0zbU0tTF5ROk0tP15STS1eUU0tcV5GTk0tXmFNLXRiTS1eV00tL00tRDlNLSReTU0tOXpNLSVoczNNLWhBXkpeQEJeQF5AXkBCXkBeQF5AJU0tRHpeSE0taV5STS1eRE0tNU0tXlxNLT4wSF5IXkBFXlBeQDRNLX0mQF5APl5GCi0JUlBLSS1SVFJ2MTE1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjZ8dHJ1bmMKKwlSUEtJLVJUUnYxMTUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgogCVt8UlBLSS1SVFJdCiBFWElUIENPREUgMDAwMDAxMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2tkYXk1Lm91dCBiL3Rlc3RzL2tkYXk1Lm91dAppbmRleCA3YWVhZTcyLi40YThlZDdjIDEwMDY0NAotLS0gYS90ZXN0cy9rZGF5NS5vdXQKKysrIGIvdGVzdHMva2RheTUub3V0CkBAIC05LDEyICs5LDcgQEAKIAkgIDB4MDA2MDogIDAwMDAgMDAwMCAwMDAwIDMyMDAgMDAwMCAwMDAwIDAwYWEgNjg3MwogCVBvcnQgc3RhdHVzIFRMViAoMHgwMiksIGxlbmd0aCAyNiwgU3RhdHVzOiBVbmtub3duICgwKQogCVVua25vd24gVExWICgweDM3KSwgbGVuZ3RoIDQxMDEKLQkgIDB4MDAwMDogIDM3MTAgMDVmZiBmZjA1IGNjMDkgMzQ5MyAwMDAwIDAwMDAgODAwMAotCSAgMHgwMDEwOiAgMDAwMCAwMDAwIDAwMzIgMDAwMCAwMDAwIDAwMDAgYWE2OCA3MzU0Ci0JICAweDAwMjA6ICBkNzA2IDBiMDAgM2MwMCAwMDAwIDNjMDAgMDAwMCAwMDgwIDAwMDAKLQkgIDB4MDAzMDogIGZmZmQgNGQ1ZiBkOWJkIGM3MDkgMzBhYyA4MTc2IGIzNmQgY2MxMQotCSAgMHgwMDQwOiAgM2FiZiAxMjkxIGYxMDYgNGVkZSA2MWY0IDYyOTcgYWZjNCAzOWE0Ci0JICAweDAwNTA6ICAwZGI5IDdhCisJCSBwYWNrZXQgaXMgdG9vIHNob3J0CiBJUCAodG9zIDB4MTAsIHR0bCA2MiwgaWQgNjQ4MDYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCiAgICAgMjA0LjkuNTEuMTMyLjUwMDc5ID4gMjA0LjkuNTQuODAuMjI6IEZsYWdzIFsuXSwgY2tzdW0gMHg4NjExIChpbmNvcnJlY3QgLT4gMHhhNjc4KSwgYWNrIDE4MTkyMTg2MDYsIHdpbiA0MDk0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA5NDEzNzE3NzUgZWNyIDQyOTQ5NjcyNDJdLCBsZW5ndGggMAogSVAgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDYyOTIwLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyLCBiYWQgY2tzdW0gNDUwNCAoLT40NTFhKSEpCmRpZmYgLS1naXQgYS90ZXN0cy9rZGF5Ni5vdXQgYi90ZXN0cy9rZGF5Ni5vdXQKaW5kZXggM2ViYTdlNi4uOGM0OTI5MyAxMDA2NDQKLS0tIGEvdGVzdHMva2RheTYub3V0CisrKyBiL3Rlc3RzL2tkYXk2Lm91dApAQCAtMSw3ICsxLDcgQEAKIEZSRi4xNiBGcmFnLCBzZXEgNjkzLCBGbGFncyBbQmVnaW5dLCBVSSBlOCEgSVMtSVMsIGxlbmd0aCAzMDE5ODk5MTMKIAlMMSBMU1AsIGhsZW46IDI3LCB2OiAxLCBwZHUtdjogMSwgc3lzLWlkLWxlbjogNiAoMCksIG1heC1hcmVhOiAxMzEgKDEzMSkKIAkgIGxzcC1pZDogODM4My44MzgzLjgzNGYuMDAtNjAsIHNlcTogMHgwNjQxOGZjYywgbGlmZXRpbWU6IDMzNjY3cwotCSAgY2hrc3VtOiAweDA5MDAodW52ZXJpZmllZCksIFBEVSBsZW5ndGg6IDMzNjY3LCBGbGFnczogWyBPdmVybG9hZCBiaXQgc2V0LCBleHBlbnNlIEFUVCBiaXQgc2V0LCBMMSBJUyBdCisJICBjaGtzdW06IDB4MDkwMCAodW52ZXJpZmllZCksIFBEVSBsZW5ndGg6IDMzNjY3LCBGbGFnczogWyBPdmVybG9hZCBiaXQgc2V0LCBleHBlbnNlIEFUVCBiaXQgc2V0LCBMMSBJUyBdCiAJICAgIE11bHRpLVRvcG9sb2d5IENhcGFiaWxpdHkgVExWICMxNDQsIGxlbmd0aDogMTM3CiAJICAgICAgTzogMCwgUkVTOiA0LCBNVElEKHMpOiAzOTQ1CiAJICAgICAgdW5rbm93biBzdWJUTFYgIzgsIGxlbmd0aDogMjMzCkBAIC0zNjIsMTkgKzM2Miw4IEBACiAJICAgIFBhcnRpdGlvbiBESVMgVExWICM0LCBsZW5ndGg6IDQKIAkgICAgUGFydGl0aW9uIERJUyBUTFYgIzQsIGxlbmd0aDogNAogCSAgICBQYXJ0aXRpb24gRElTIFRMViAjNCwgbGVuZ3RoOiA1Ci0JICAgIHVua25vd24gVExWICMxMywgbGVuZ3RoOiAxNzgKLQkJMHgwMDAwOiAgYzRlNCBmOWNiIDBjZTIgY2QyZSAxNzVhIDBiZjMgYjQ5MiAwMWZhCi0JCTB4MDAxMDogIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZQotCQkweDAwMjA6ICAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUKLQkJMHgwMDMwOiAgM2EzYSAzYTNhIDNhM2EgM2EzYSAzYTNhIDNhM2EgM2EzYSAzYTNhCi0JCTB4MDA0MDogIDNhM2EgM2EwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUyOAotCQkweDAwNTA6ICAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUKLQkJMHgwMDYwOiAgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlCi0JCTB4MDA3MDogIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZQotCQkweDAwODA6ICAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUKLQkJMHgwMDkwOiAgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlCi0JCTB4MDBhMDogIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZSAwZTBlIDBlMGUgMGUwZQotCQkweDAwYjA6ICAwZTBlCisJICAgIFB1cmdlIE9yaWdpbmF0b3IgSWRlbnRpZmllciBUTFYgIzEzLCBsZW5ndGg6IDE3OAorCSAgICAgIFB1cmdlIE9yaWdpbmF0b3IgU3lzdGVtLUlEOiBlNGY5LmNiMGMuZTJjZAogCSAgICBMU1AgQnVmZmVyc2l6ZSBUTFYgIzE0LCBsZW5ndGg6IDE0CiAJICAgICAgTFNQIEJ1ZmZlcnNpemU6IDM1OTgKIAkgICAgTFNQIEJ1ZmZlcnNpemUgVExWICMxNCwgbGVuZ3RoOiAxNApAQCAtNDU1LDYgKzQ0NCw1IEBACiAJICAgICAgTFNQIEJ1ZmZlcnNpemU6IDM1OTgKIAkgICAgdW5rbm93biBUTFYgIzU4LCBsZW5ndGg6IDU4CiAJCTB4MDAwMDogIDNhM2EgM2EzYSAzYTNhIDNhM2EgM2EzYSAzYTNhIDNhM2EgM2EzYQotCQkweDAwMTA6ICAzYTNhIDNhCi0JCSBwYWNrZXQgZXhjZWVkZWQgc25hcHNob3QgKDM5KSBieXRlcworCQkweDAwMTA6ICAzYTNhIDNhIFt8aXNpc10KIEVYSVQgQ09ERSAwMDAwMDEwMApkaWZmIC0tZ2l0IGEvdGVzdHMva2RheTcub3V0IGIvdGVzdHMva2RheTcub3V0CmluZGV4IDk0ZThiNjUuLjc1ZTI0Y2EgMTAwNjQ0Ci0tLSBhL3Rlc3RzL2tkYXk3Lm91dAorKysgYi90ZXN0cy9rZGF5Ny5vdXQKQEAgLTMsNiArMywxMCBAQAogSVAgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDY0ODA2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyLCBiYWQgY2tzdW0gM2RhNiAoLT4zNWE2KSEpCiAgICAgMjEyLjkuNTEuMTMyLjUwMDc5ID4gMjA0LjkuNTQuODAuMjI6IEZsYWdzIFsuXSwgY2tzdW0gMHg4NjExIChpbmNvcnJlY3QgLT4gMHg0ODExKSwgYWNrIDE4MTkyMTg2MDYsIHdpbiAxNzkxOCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgOTQxMzcxOTAzIGVjciAxMzQwNTkyMDc0XSwgbGVuZ3RoIDAKIDg0OmI1OjljOmJlOjMwOjQ4IFVua25vd24gU1NBUCAweDEwID4gMGM6YzQ6N2E6MDg6ZTk6MTIgVW5rbm93biBEU0FQIDB4NDQgSW5mb3JtYXRpb24sIHNlbmQgc2VxIDAsIHJjdiBzZXEgMjYsIEZsYWdzIFtDb21tYW5kXSwgbGVuZ3RoIDUyCisJMHgwMDAwOiAgNDUxMCAwMDM0IGY1YzggNDAwMCAzZTA2IDQ1MDQgY2MwOSAzMzg0ICBFLi40Li5ALj4uRS4uLjMuCisJMHgwMDEwOiAgY2MwOSAzNjUwIGMzOWYgMDAxNiA0OWQxIGM4NTQgNmM2ZiAxMzIyICAuLjZQLi4uLkkuLlRsby4iCisJMHgwMDIwOiAgODAxMCAwZmZjIDg1OGIgMDAwMCAwMTAxIDA4MGEgMzgxYyAzMjA5ICAuLi4uLi4uLi4uLi44LjIuCisJMHgwMDMwOiAgNGZlNyBjZmQ0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPLi4uCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA2MzE3OCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKICAgICAyMDQuOS41NC44MC41NTkzNiA+IDIwNC45LjU1LjEwLjQ0MzogRmxhZ3MgWy5dLCBja3N1bSAweDA1OTQgKGluY29ycmVjdCAtPiAweDcyNWEpLCBhY2sgMzU4OTQ5NTQwNywgd2luIDEwNDAsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDY0Nzc3MDI5NCBlY3IgMjM2NDc3OTM1NF0sIGxlbmd0aCAwCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCAzNjc1Miwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCAzOTksIGJhZCBja3N1bSBhNDZiICgtPmE0NzQpISkKQEAgLTE0LDEwICsxOCw3IEBACiAJICAweDAwMzA6ICBhZmM0IDM5YTQgMGRiOSA3YWE1IDY4NzMgMzNlOAogCVJQS0ktUlRSdjY1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjYKIAkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDM3Ci0JICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tfHRydW5jfHRydW5jCi0JUlBLSS1SVFJ2MTE1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjYKLQkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDEyCi0JICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tfHRydW5jfHRydW5jCisJICAgIC0tLS0tZW5jYXBzdWxhdGVkIFBEVS0tLS0tCiAJW3xSUEtJLVJUUl0KIElQICh0b3MgMHgxMCwgdHRsIDYyLCBpZCA2NDgwNiwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKICAgICAyMDQuOS41MS4xMzIuNTAwNzkgPiAyMDQuOS41NC44MC4yMjogRmxhZ3MgWy5dLCBja3N1bSAweDg2MTEgKGluY29ycmVjdCAtPiAweGE2NzgpLCBhY2sgMTgxOTIxODYwNiwgd2luIDQwOTQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDk0MTM3MTc3NSBlY3IgNDI5NDk2NzI0Ml0sIGxlbmd0aCAwCkBAIC0zNCwxMCArMzUsNyBAQAogCSAgMHgwMDMwOiAgYWZjNCAzOWE0IDBkYjkgN2FhNSA2ODczIDMzZTgKIAlSUEtJLVJUUnY2NSwgRXJyb3IgUmVwb3J0IFBEVSAoMTApLCBsZW5ndGg6IDY2CiAJICBFcnJvciBjb2RlOiBVbmtub3duICg2NiksIEVuY2Fwc3VsYXRlZCBQRFUgbGVuZ3RoOiAzNwotCSAgICAtLS0tLWVuY2Fwc3VsYXRlZCBQRFUtLS0tLXx0cnVuY3x0cnVuYwotCVJQS0ktUlRSdjExNSwgRXJyb3IgUmVwb3J0IFBEVSAoMTApLCBsZW5ndGg6IDY2Ci0JICBFcnJvciBjb2RlOiBVbmtub3duICg2NiksIEVuY2Fwc3VsYXRlZCBQRFUgbGVuZ3RoOiAxMgotCSAgICAtLS0tLWVuY2Fwc3VsYXRlZCBQRFUtLS0tLXx0cnVuY3x0cnVuYworCSAgICAtLS0tLWVuY2Fwc3VsYXRlZCBQRFUtLS0tLQogCVt8UlBLSS1SVFJdCiBJUCB0cnVuY2F0ZWQtaXAgLSA3NjggYnl0ZXMgbWlzc2luZyEgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDY0ODA2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDgyMCwgYmFkIGNrc3VtIDNkYTYgKC0+M2FhNikhKQogICAgIDIwNC45LjUxLjEzMi41MDA3OSA+IDIwNC45LjU0LjgwLjIyOiBGbGFncyBbLl0sIHNlcSAwOjc2OCwgYWNrIDEsIHdpbiA0MDk0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA5NDEzNzE3NzUgZWNyIDQyOTQ5NjcyNDJdLCBsZW5ndGggNzY4CkBAIC01Myw3ICs1MSw2IEBACiAJICAweDAwMjA6ICBiMzZkIGNjMTEgM2FiZiAxMjkxIGYxMDYgNGVkZSA2MWY0IDYyOTcKIAkgIDB4MDAzMDogIGFmYzQgMzlhNCAwZGI5IDdhYTUgNjg3MyAzM2U4CiAJUlBLSS1SVFJ2NjUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgotCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogMTAwfHRydW5jCi0JUlBLSS1SVFJ2MTE1LCBFcnJvciBSZXBvcnQgUERVICgxMCksIGxlbmd0aDogNjZ8dHJ1bmMKKwkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDEwMAogCVt8UlBLSS1SVFJdCiBFWElUIENPREUgMDAwMDAxMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2tkYXk4Lm91dCBiL3Rlc3RzL2tkYXk4Lm91dAppbmRleCAyZDg0YjcyLi40ZGZiOTFjIDEwMDY0NAotLS0gYS90ZXN0cy9rZGF5OC5vdXQKKysrIGIvdGVzdHMva2RheTgub3V0CkBAIC05LDEyICs5LDcgQEAKIAkgIDB4MDA2MDogIGZmZmEgMDAwMCAwMDAwIDMyMDAgMDAwMCAwMDAwIDAwYWEgNjg3MwogCVBvcnQgc3RhdHVzIFRMViAoMHgwMiksIGxlbmd0aCAyNiwgU3RhdHVzOiBVbmtub3duICgwKQogCVVua25vd24gVExWICgweDM3KSwgbGVuZ3RoIDQxMDEKLQkgIDB4MDAwMDogIDM3MTAgMDVmZiBmZjA1IGNjMDkgMzQ5MyAwMDAwIDAwMDAgODBmZgotCSAgMHgwMDEwOiAgZmEwMCAwMDAwIDAwMzIgMDAwMCAwMDAwIDAwMDAgYWE2OCA3MzU0Ci0JICAweDAwMjA6ICBkNzA2IDBiMDAgM2MwMCAwMDAwIDNjMDAgMDAwMCAwMDgwIDAwMDAKLQkgIDB4MDAzMDogIGZmZmQgNGQ1ZiBkOWJkIGM3MDkgMzBhYyA4MTc2IGIzNmQgY2MxMQotCSAgMHgwMDQwOiAgM2FiZiAxMjkxIGYxMDYgNGVkZSA2MWY0IDYyOTcgYWZjNCAzOWE0Ci0JICAweDAwNTA6ICAwZGI5IDdhCisJCSBwYWNrZXQgaXMgdG9vIHNob3J0CiBJUCAodG9zIDB4MTAsIHR0bCA2MiwgaWQgNjQ4MDYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCiAgICAgMjA0LjkuNTEuMTMyLjUwMDc5ID4gMjA0LjkuNTQuODAuMjI6IEZsYWdzIFsuXSwgY2tzdW0gMHg4NjExIChpbmNvcnJlY3QgLT4gMHhhNjc4KSwgYWNrIDE4MTkyMTg2MDYsIHdpbiA0MDk0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA5NDEzNzE3NzUgZWNyIDQyOTQ5NjcyNDJdLCBsZW5ndGggMAogSVAgKHRvcyAweDEwLCB0dGwgNjIsIGlkIDYyOTIwLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyLCBiYWQgY2tzdW0gNDUwNCAoLT40NTFhKSEpCkBAIC0yOSw2ICsyNCw2IEBACiAJICAweDAwMjA6ICBiMzZkIGNjMTEgM2FiZiAxMjkxIGYxMDYgNGVkZSA2MWY0IDYyOTcKIAkgIDB4MDAzMDogIGFmYzQgMzlhNCAwZGI5IDdhYTUgNjg3MyAzM2U4CiAJUlBLSS1SVFJ2NjUsIEVycm9yIFJlcG9ydCBQRFUgKDEwKSwgbGVuZ3RoOiA2NgotCSAgRXJyb3IgY29kZTogVW5rbm93biAoNjYpLCBFbmNhcHN1bGF0ZWQgUERVIGxlbmd0aDogODB8dHJ1bmMKKwkgIEVycm9yIGNvZGU6IFVua25vd24gKDY2KSwgRW5jYXBzdWxhdGVkIFBEVSBsZW5ndGg6IDgwCiAJW3xSUEtJLVJUUl0KIEVYSVQgQ09ERSAwMDAwMDEwMApkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9laWRfbm90aWZ5Lm91dCBiL3Rlc3RzL2xpc3BfZWlkX25vdGlmeS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDNjNTI0NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpc3BfZWlkX25vdGlmeS5vdXQKQEAgLTAsMCArMSw2MyBAQAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxNjApCisgICAgMTkyLjE2OC4wLjEwNS40MzQyID4gMTI3LjAuMC4xLjQzNDI6IExJU1AtTWFwLU5vdGlmeSwgZmxhZ3MgW25vbmVdLAorICAgIDMgcmVjb3JkKHMpLCBBdXRoZW50aWNhdGlvbiBTSEExLAorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAwMDogIDRiYmIgOTYxNCBhNjdhIDg2MDQgMDQwNyA3OTk1IDQ1MzcgMTkwNgorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAxMDogIDgzNmMgZDFkNgorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMTAuMzAuMS4xMDAvMzIsIDEgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTMKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICAgIFJlY29yZCBUVEwgMTQ0MCwgQXV0aG9yaXRhdGl2ZSwgTm8tQWN0aW9uLCBNYXAgVmVyc2lvbjogMCwgRUlEIDEwLjMwLjEuOTYvMzIsIDIgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTEKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICAgICAgTE9DIDIwLjIwLjguMjUyCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgICBSZWNvcmQgVFRMIDE0NDAsIEF1dGhvcml0YXRpdmUsIE5vLUFjdGlvbiwgTWFwIFZlcnNpb246IDAsIEVJRCAxMC4zMC4xLjgwLzMyLCAxIGxvY2F0b3IocykKKyAgICAgICAgTE9DIDIwLjIwLjguMjM5CisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCitJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCAxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDE1NikKKyAgICAxOTIuMTY4LjAuMTA1LjQzNDIgPiAxMjcuMC4wLjEuNDM0MjogTElTUC1NYXAtTm90aWZ5LCBmbGFncyBbSS14VFItSUQtUHJlc2VudF0sCisgICAgMiByZWNvcmQocyksIEF1dGhlbnRpY2F0aW9uIFNIQTEsCisgICAgQXV0aGVudGljYXRpb24tRGF0YTogMHgwMDAwOiAgNGJiYiA5NjE0IGE2N2EgODYwNCAwNDA3IDc5OTUgNDUzNyAxOTA2CisgICAgQXV0aGVudGljYXRpb24tRGF0YTogMHgwMDEwOiAgODM2YyBkMWQ2CisgICAgICBSZWNvcmQgVFRMIDE0NDAsIEF1dGhvcml0YXRpdmUsIE5vLUFjdGlvbiwgTWFwIFZlcnNpb246IDAsIEVJRCAxMC4zMC4xLjEwMC8zMiwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MworICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMTAuMzAuMS45Ni8zMiwgMiBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MQorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgICAgICBMT0MgMjAuMjAuOC4yNTIKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICB4VFItSUQ6IDB4MDAwMDogIDk3ODcgYWQ3NSAzY2FmIDU4YTcgMTNmYSA2OTIwIGU2ZDIgN2E4ZgorICAgIFNJVEUtSUQ6IDAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMTYwKQorICAgIDE5Mi4xNjguMC4xMDUuNDM0MiA+IDEyNy4wLjAuMS40MzQyOiBMSVNQLU1hcC1Ob3RpZnksIGZsYWdzIFtJLXhUUi1JRC1QcmVzZW50XSwKKyAgICAzIHJlY29yZChzKSwgQXV0aGVudGljYXRpb24gU0hBMSwKKyAgICBBdXRoZW50aWNhdGlvbi1EYXRhOiAweDAwMDA6ICA0YmJiIDk2MTQgYTY3YSA4NjA0IDA0MDcgNzk5NSA0NTM3IDE5MDYKKyAgICBBdXRoZW50aWNhdGlvbi1EYXRhOiAweDAwMTA6ICA4MzZjIGQxZDYKKyAgICAgIFJlY29yZCBUVEwgMTQ0MCwgQXV0aG9yaXRhdGl2ZSwgTm8tQWN0aW9uLCBNYXAgVmVyc2lvbjogMCwgRUlEIDEwLjMwLjEuMTAwLzMyLCAxIGxvY2F0b3IocykKKyAgICAgICAgTE9DIDIwLjIwLjguMjUzCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgICBSZWNvcmQgVFRMIDE0NDAsIEF1dGhvcml0YXRpdmUsIE5vLUFjdGlvbiwgTWFwIFZlcnNpb246IDAsIEVJRCAxMC4zMC4xLjk2LzMyLCAyIGxvY2F0b3IocykKKyAgICAgICAgTE9DIDIwLjIwLjguMjUxCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgICAgIExPQyAyMC4yMC44LjI1MgorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMTAuMzAuMS44MC8zMiwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjIzOQorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgIChpbnZhbGlkKQorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxNTYpCisgICAgMTkyLjE2OC4wLjEwNS40MzQyID4gMTI3LjAuMC4xLjQzNDI6IExJU1AtTWFwLU5vdGlmeSwgZmxhZ3MgW25vbmVdLAorICAgIDIgcmVjb3JkKHMpLCBBdXRoZW50aWNhdGlvbiBTSEExLAorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAwMDogIDRiYmIgOTYxNCBhNjdhIDg2MDQgMDQwNyA3OTk1IDQ1MzcgMTkwNgorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAxMDogIDgzNmMgZDFkNgorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMTAuMzAuMS4xMDAvMzIsIDEgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTMKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICAgIFJlY29yZCBUVEwgMTQ0MCwgQXV0aG9yaXRhdGl2ZSwgTm8tQWN0aW9uLCBNYXAgVmVyc2lvbjogMCwgRUlEIDEwLjMwLjEuOTYvMzIsIDIgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTEKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICAgICAgTE9DIDIwLjIwLjguMjUyCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgRGF0YTogMHgwMDAwOiAgOTc4NyBhZDc1IDNjYWYgNThhNyAxM2ZhIDY5MjAgZTZkMiA3YThmCisgICAgRGF0YTogMHgwMDEwOiAgMDAwMCAwMDAwIDAwMDAgMDAwMApkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9laWRfbm90aWZ5LnBjYXAgYi90ZXN0cy9saXNwX2VpZF9ub3RpZnkucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xZjgzMzc4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlzcF9laWRfbm90aWZ5LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9laWRfcmVnaXN0ZXIub3V0IGIvdGVzdHMvbGlzcF9laWRfcmVnaXN0ZXIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc2ODdiNjUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9saXNwX2VpZF9yZWdpc3Rlci5vdXQKQEAgLTAsMCArMSwyOCBAQAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxNDQpCisgICAgMTkyLjE2OC4wLjEwNS40MzQyID4gMTI3LjAuMC4xLjQzNDI6IExJU1AtTWFwLVJlZ2lzdGVyLCBmbGFncyBbSS14VFItSUQtUHJlc2VudCwgTS1XYW50LU1hcC1Ob3RpZnldLAorICAgIDIgcmVjb3JkKHMpLCBBdXRoZW50aWNhdGlvbiBTSEExLAorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAwMDogIDRiYmIgOTYxNCBhNjdhIDg2MDQgMDQwNyA3OTk1IDQ1MzcgMTkwNgorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAxMDogIDgzNmMgZDFkNgorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMTAuMzAuMS4xMDAvMzIsIDEgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTMKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICAgIFJlY29yZCBUVEwgMTQ0MCwgQXV0aG9yaXRhdGl2ZSwgTm8tQWN0aW9uLCBNYXAgVmVyc2lvbjogMCwgRUlEIDEwLjMwLjEuOTYvMzIsIDEgbG9jYXRvcihzKQorICAgICAgICBMT0MgMjAuMjAuOC4yNTIKKyAgICAgICAgICBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIE11bHRpY2FzdCBQcmlvcml0eS9XZWlnaHQgMS8xMDAsIGZsYWdzIFtub25lXSwKKyAgICB4VFItSUQ6IDB4MDAwMDogIDk3ODcgYWQ3NSAzY2FmIDU4YTcgMTNmYSA2OTIwIGU2ZDIgN2E4ZgorICAgIFNJVEUtSUQ6IDAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMTU2KQorICAgIDE5Mi4xNjguMC4xMDUuNDM0MiA+IDEyNy4wLjAuMS40MzQyOiBMSVNQLU1hcC1SZWdpc3RlciwgZmxhZ3MgW0kteFRSLUlELVByZXNlbnQsIE0tV2FudC1NYXAtTm90aWZ5XSwKKyAgICAyIHJlY29yZChzKSwgQXV0aGVudGljYXRpb24gU0hBMSwKKyAgICBBdXRoZW50aWNhdGlvbi1EYXRhOiAweDAwMDA6ICA0YmJiIDk2MTQgYTY3YSA4NjA0IDA0MDcgNzk5NSA0NTM3IDE5MDYKKyAgICBBdXRoZW50aWNhdGlvbi1EYXRhOiAweDAwMTA6ICA4MzZjIGQxZDYKKyAgICAgIFJlY29yZCBUVEwgMTQ0MCwgQXV0aG9yaXRhdGl2ZSwgTm8tQWN0aW9uLCBNYXAgVmVyc2lvbjogMCwgRUlEIDEwLjMwLjEuMTAwLzMyLCAxIGxvY2F0b3IocykKKyAgICAgICAgTE9DIDIwLjIwLjguMjUzCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgICBSZWNvcmQgVFRMIDE0NDAsIEF1dGhvcml0YXRpdmUsIE5vLUFjdGlvbiwgTWFwIFZlcnNpb246IDAsIEVJRCAxMC4zMC4xLjk2LzMyLCAyIGxvY2F0b3IocykKKyAgICAgICAgTE9DIDIwLjIwLjguMjUxCisgICAgICAgICAgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBNdWx0aWNhc3QgUHJpb3JpdHkvV2VpZ2h0IDEvMTAwLCBmbGFncyBbbm9uZV0sCisgICAgICAgIExPQyAyMC4yMC44LjI1MgorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgIHhUUi1JRDogMHgwMDAwOiAgOTc4NyBhZDc1IDNjYWYgNThhNyAxM2ZhIDY5MjAgZTZkMiA3YThmCisgICAgU0lURS1JRDogMApkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9laWRfcmVnaXN0ZXIucGNhcCBiL3Rlc3RzL2xpc3BfZWlkX3JlZ2lzdGVyLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTZkNzFlZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpc3BfZWlkX3JlZ2lzdGVyLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9pcHY2Lm91dCBiL3Rlc3RzL2xpc3BfaXB2Ni5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzllODRjMwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xpc3BfaXB2Ni5vdXQKQEAgLTAsMCArMSwyNCBAQAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxNjgpCisgICAgMTkyLjE2OC4wLjEwNS40MzQyID4gMTI3LjAuMC4xLjQzNDI6IExJU1AtTWFwLVJlZ2lzdGVyLCBmbGFncyBbSS14VFItSUQtUHJlc2VudCwgTS1XYW50LU1hcC1Ob3RpZnldLAorICAgIDIgcmVjb3JkKHMpLCBBdXRoZW50aWNhdGlvbiBTSEExLAorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAwMDogIDRiYmIgOTYxNCBhNjdhIDg2MDQgMDQwNyA3OTk1IDQ1MzcgMTkwNgorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAxMDogIDgzNmMgZDFkNgorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMjAwMTpkYjg6ODVhMzo6OGEyZTozNzA6NzMzNC84MCwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MworICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMjAwMTpkYjg6OTVhMzo6OGEyZTozNzA6NzMzNC84MCwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MQorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgIHhUUi1JRDogMHgwMDAwOiAgOTc4NyBhZDc1IDNjYWYgNThhNyAxM2ZhIDY5MjAgZTZkMiA3YThmCisgICAgU0lURS1JRDogMAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxNDQpCisgICAgMTkyLjE2OC4wLjEwNS40MzQyID4gMTI3LjAuMC4xLjQzNDI6IExJU1AtTWFwLU5vdGlmeSwgZmxhZ3MgW25vbmVdLAorICAgIDIgcmVjb3JkKHMpLCBBdXRoZW50aWNhdGlvbiBTSEExLAorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAwMDogIDRiYmIgOTYxNCBhNjdhIDg2MDQgMDQwNyA3OTk1IDQ1MzcgMTkwNgorICAgIEF1dGhlbnRpY2F0aW9uLURhdGE6IDB4MDAxMDogIDgzNmMgZDFkNgorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMjAwMTpkYjg6ODVhMzo6OGEyZTozNzA6NzMzNC84MCwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MworICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLAorICAgICAgUmVjb3JkIFRUTCAxNDQwLCBBdXRob3JpdGF0aXZlLCBOby1BY3Rpb24sIE1hcCBWZXJzaW9uOiAwLCBFSUQgMjAwMTpkYjg6OTVhMzo6OGEyZTozNzA6NzMzNC84MCwgMSBsb2NhdG9yKHMpCisgICAgICAgIExPQyAyMC4yMC44LjI1MQorICAgICAgICAgIFByaW9yaXR5L1dlaWdodCAxLzEwMCwgTXVsdGljYXN0IFByaW9yaXR5L1dlaWdodCAxLzEwMCwgZmxhZ3MgW25vbmVdLApkaWZmIC0tZ2l0IGEvdGVzdHMvbGlzcF9pcHY2LnBjYXAgYi90ZXN0cy9saXNwX2lwdjYucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iODc4ZWZkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGlzcF9pcHY2LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvbGxjLXhpZC1oZWFwb3ZlcmZsb3cub3V0IGIvdGVzdHMvbGxjLXhpZC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRmY2FkNzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sbGMteGlkLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSBAQAorVW5rbm93biBEU0FQIDB4MzAgVW5udW1iZXJlZCwgeGlkLCBGbGFncyBbUG9sbF0sIGxlbmd0aCA4MDg0NjQ0MTJbfGxsY10KZGlmZiAtLWdpdCBhL3Rlc3RzL2xsYy14aWQtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9sbGMteGlkLWhlYXBvdmVyZmxvdy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjZhNWYxYTQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sbGMteGlkLWhlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2xsZHBfY2RwLWV2Lm91dCBiL3Rlc3RzL2xsZHBfY2RwLWV2Lm91dAppbmRleCBkOWZjNjQ3Li4wMDI5YTc1IDEwMDY0NAotLS0gYS90ZXN0cy9sbGRwX2NkcC1ldi5vdXQKKysrIGIvdGVzdHMvbGxkcF9jZHAtZXYub3V0CkBAIC0xLDQgKzEsNCBAQAotMDA6MTg6YmE6OTg6Njg6OGYgPiAwMTowMDowYzpjYzpjYzpjYywgODAyLjMsIGxlbmd0aCAzODg6IExMQywgZHNhcCBTTkFQICgweGFhKSBJbmRpdmlkdWFsLCBzc2FwIFNOQVAgKDB4YWEpIENvbW1hbmQsIGN0cmwgMHgwMzogb3VpIENpc2NvICgweDAwMDAwYyksIHBpZCBDRFAgKDB4MjAwMCk6IENEUHYyLCB0dGw6IDE4MHMsIGNoZWNrc3VtOiAweDBiZWEgKHVudmVyaWZpZWQpLCBsZW5ndGggMzY2CiswMDoxODpiYTo5ODo2ODo4ZiA+IDAxOjAwOjBjOmNjOmNjOmNjLCA4MDIuMywgbGVuZ3RoIDM3NDogTExDLCBkc2FwIFNOQVAgKDB4YWEpIEluZGl2aWR1YWwsIHNzYXAgU05BUCAoMHhhYSkgQ29tbWFuZCwgY3RybCAweDAzOiBvdWkgQ2lzY28gKDB4MDAwMDBjKSwgcGlkIENEUCAoMHgyMDAwKSwgbGVuZ3RoIDM2NjogQ0RQdjIsIHR0bDogMTgwcywgY2hlY2tzdW06IDB4MGJlYSAodW52ZXJpZmllZCksIGxlbmd0aCAzNjYKIAlEZXZpY2UtSUQgKDB4MDEpLCB2YWx1ZSBsZW5ndGg6IDIgYnl0ZXM6ICdTMScKIAlWZXJzaW9uIFN0cmluZyAoMHgwNSksIHZhbHVlIGxlbmd0aDogMTkwIGJ5dGVzOiAKIAkgIENpc2NvIElPUyBTb2Z0d2FyZSwgQzM1NjAgU29mdHdhcmUgKEMzNTYwLUFEVklQU0VSVklDRVNLOS1NKSwgVmVyc2lvbiAxMi4yKDQ0KVNFLCBSRUxFQVNFIFNPRlRXQVJFIChmYzEpCkBAIC0xNyw3ICsxNyw3IEBACiAJTWFuYWdlbWVudCBBZGRyZXNzZXMgKDB4MTYpLCB2YWx1ZSBsZW5ndGg6IDEzIGJ5dGVzOiBJUHY0ICgxKSAwLjAuMC4wCiAJdW5rbm93biBmaWVsZCB0eXBlICgweDFhKSwgdmFsdWUgbGVuZ3RoOiAxMiBieXRlczogCiAJICAweDAwMDA6ICAwMDAwIDAwMDEgMDAwMCAwMDAwIGZmZmYgZmZmZgotMDA6MTk6MmY6YTc6YjI6OGQgPiAwMTowMDowYzpjYzpjYzpjYywgODAyLjMsIGxlbmd0aCAzOTI6IExMQywgZHNhcCBTTkFQICgweGFhKSBJbmRpdmlkdWFsLCBzc2FwIFNOQVAgKDB4YWEpIENvbW1hbmQsIGN0cmwgMHgwMzogb3VpIENpc2NvICgweDAwMDAwYyksIHBpZCBDRFAgKDB4MjAwMCk6IENEUHYyLCB0dGw6IDE4MHMsIGNoZWNrc3VtOiAweDk3MWQgKHVudmVyaWZpZWQpLCBsZW5ndGggMzcwCiswMDoxOToyZjphNzpiMjo4ZCA+IDAxOjAwOjBjOmNjOmNjOmNjLCA4MDIuMywgbGVuZ3RoIDM3ODogTExDLCBkc2FwIFNOQVAgKDB4YWEpIEluZGl2aWR1YWwsIHNzYXAgU05BUCAoMHhhYSkgQ29tbWFuZCwgY3RybCAweDAzOiBvdWkgQ2lzY28gKDB4MDAwMDBjKSwgcGlkIENEUCAoMHgyMDAwKSwgbGVuZ3RoIDM3MDogQ0RQdjIsIHR0bDogMTgwcywgY2hlY2tzdW06IDB4OTcxZCAodW52ZXJpZmllZCksIGxlbmd0aCAzNzAKIAlEZXZpY2UtSUQgKDB4MDEpLCB2YWx1ZSBsZW5ndGg6IDIgYnl0ZXM6ICdTMicKIAlWZXJzaW9uIFN0cmluZyAoMHgwNSksIHZhbHVlIGxlbmd0aDogMTkwIGJ5dGVzOiAKIAkgIENpc2NvIElPUyBTb2Z0d2FyZSwgQzM1NjAgU29mdHdhcmUgKEMzNTYwLUFEVklQU0VSVklDRVNLOS1NKSwgVmVyc2lvbiAxMi4yKDQ0KVNFLCBSRUxFQVNFIFNPRlRXQVJFIChmYzEpCkBAIC0xMjQsNyArMTI0LDcgQEAKIAkgICAgUE1EIGF1dG9uZWcgY2FwYWJpbGl0eSBbU3ltIFBBVVNFIGZvciBmZHgsIEFzeW0gYW5kIFN5bSBQQVVTRSBmb3IgZmR4LCAxMDAwQkFTRS17WCBMWCBTWCBDWH0gZmR4LCAxMDAwQkFTRS1UIGhkeF0gKDB4MDAzNikKIAkgICAgTUFVIHR5cGUgMTAwQkFTRVRYIGZkeCAoMHgwMDEwKQogCUVuZCBUTFYgKDApLCBsZW5ndGggMAotMDA6MTg6YmE6OTg6Njg6OGYgPiAwMTowMDowYzpjYzpjYzpjYywgODAyLjMsIGxlbmd0aCAzODg6IExMQywgZHNhcCBTTkFQICgweGFhKSBJbmRpdmlkdWFsLCBzc2FwIFNOQVAgKDB4YWEpIENvbW1hbmQsIGN0cmwgMHgwMzogb3VpIENpc2NvICgweDAwMDAwYyksIHBpZCBDRFAgKDB4MjAwMCk6IENEUHYyLCB0dGw6IDE4MHMsIGNoZWNrc3VtOiAweDBiZTkgKHVudmVyaWZpZWQpLCBsZW5ndGggMzY2CiswMDoxODpiYTo5ODo2ODo4ZiA+IDAxOjAwOjBjOmNjOmNjOmNjLCA4MDIuMywgbGVuZ3RoIDM3NDogTExDLCBkc2FwIFNOQVAgKDB4YWEpIEluZGl2aWR1YWwsIHNzYXAgU05BUCAoMHhhYSkgQ29tbWFuZCwgY3RybCAweDAzOiBvdWkgQ2lzY28gKDB4MDAwMDBjKSwgcGlkIENEUCAoMHgyMDAwKSwgbGVuZ3RoIDM2NjogQ0RQdjIsIHR0bDogMTgwcywgY2hlY2tzdW06IDB4MGJlOSAodW52ZXJpZmllZCksIGxlbmd0aCAzNjYKIAlEZXZpY2UtSUQgKDB4MDEpLCB2YWx1ZSBsZW5ndGg6IDIgYnl0ZXM6ICdTMScKIAlWZXJzaW9uIFN0cmluZyAoMHgwNSksIHZhbHVlIGxlbmd0aDogMTkwIGJ5dGVzOiAKIAkgIENpc2NvIElPUyBTb2Z0d2FyZSwgQzM1NjAgU29mdHdhcmUgKEMzNTYwLUFEVklQU0VSVklDRVNLOS1NKSwgVmVyc2lvbiAxMi4yKDQ0KVNFLCBSRUxFQVNFIFNPRlRXQVJFIChmYzEpCkBAIC0xNDMsNyArMTQzLDcgQEAKIAlNYW5hZ2VtZW50IEFkZHJlc3NlcyAoMHgxNiksIHZhbHVlIGxlbmd0aDogMTMgYnl0ZXM6IElQdjQgKDEpIDAuMC4wLjAKIAl1bmtub3duIGZpZWxkIHR5cGUgKDB4MWEpLCB2YWx1ZSBsZW5ndGg6IDEyIGJ5dGVzOiAKIAkgIDB4MDAwMDogIDAwMDAgMDAwMSAwMDAwIDAwMDAgZmZmZiBmZmZmCi0wMDoxOToyZjphNzpiMjo4ZCA+IDAxOjAwOjBjOmNjOmNjOmNjLCA4MDIuMywgbGVuZ3RoIDM5MjogTExDLCBkc2FwIFNOQVAgKDB4YWEpIEluZGl2aWR1YWwsIHNzYXAgU05BUCAoMHhhYSkgQ29tbWFuZCwgY3RybCAweDAzOiBvdWkgQ2lzY28gKDB4MDAwMDBjKSwgcGlkIENEUCAoMHgyMDAwKTogQ0RQdjIsIHR0bDogMTgwcywgY2hlY2tzdW06IDB4OTcxYyAodW52ZXJpZmllZCksIGxlbmd0aCAzNzAKKzAwOjE5OjJmOmE3OmIyOjhkID4gMDE6MDA6MGM6Y2M6Y2M6Y2MsIDgwMi4zLCBsZW5ndGggMzc4OiBMTEMsIGRzYXAgU05BUCAoMHhhYSkgSW5kaXZpZHVhbCwgc3NhcCBTTkFQICgweGFhKSBDb21tYW5kLCBjdHJsIDB4MDM6IG91aSBDaXNjbyAoMHgwMDAwMGMpLCBwaWQgQ0RQICgweDIwMDApLCBsZW5ndGggMzcwOiBDRFB2MiwgdHRsOiAxODBzLCBjaGVja3N1bTogMHg5NzFjICh1bnZlcmlmaWVkKSwgbGVuZ3RoIDM3MAogCURldmljZS1JRCAoMHgwMSksIHZhbHVlIGxlbmd0aDogMiBieXRlczogJ1MyJwogCVZlcnNpb24gU3RyaW5nICgweDA1KSwgdmFsdWUgbGVuZ3RoOiAxOTAgYnl0ZXM6IAogCSAgQ2lzY28gSU9TIFNvZnR3YXJlLCBDMzU2MCBTb2Z0d2FyZSAoQzM1NjAtQURWSVBTRVJWSUNFU0s5LU0pLCBWZXJzaW9uIDEyLjIoNDQpU0UsIFJFTEVBU0UgU09GVFdBUkUgKGZjMSkKZGlmZiAtLWdpdCBhL3Rlc3RzL2xsZHBfbXVkdXJsLXYub3V0IGIvdGVzdHMvbGxkcF9tdWR1cmwtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTdhYzZmZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2xsZHBfbXVkdXJsLXYub3V0CkBAIC0wLDAgKzEsNjIgQEAKKzAwOjIzOjU0OmMyOjU3OjAyID4gMDE6ODA6YzI6MDA6MDA6MGUsIGV0aGVydHlwZSBMTERQICgweDg4Y2MpLCBsZW5ndGggMzAyOiBMTERQLCBsZW5ndGggMjg4CisJQ2hhc3NpcyBJRCBUTFYgKDEpLCBsZW5ndGggNworCSAgU3VidHlwZSBNQUMgYWRkcmVzcyAoNCk6IDAwOjIzOjU0OmMyOjU3OjAyCisJUG9ydCBJRCBUTFYgKDIpLCBsZW5ndGggNworCSAgU3VidHlwZSBNQUMgYWRkcmVzcyAoMyk6IDAwOjIzOjU0OmMyOjU3OjAyCisJVGltZSB0byBMaXZlIFRMViAoMyksIGxlbmd0aCAyOiBUVEwgMTIwcworCVN5c3RlbSBOYW1lIFRMViAoNSksIGxlbmd0aCAyODogdXBzdGFpcnMub2Zjb3Vyc2VpbXJpZ2h0LmNvbQorCVN5c3RlbSBEZXNjcmlwdGlvbiBUTFYgKDYpLCBsZW5ndGggOTIKKwkgIFVidW50dSAxNC4wNC41IExUUyBMaW51eCAzLjEzLjAtMTA2LWdlbmVyaWMgIzE1My1VYnVudHUgU01QIFR1ZSBEZWMgNiAxNTo0NToxMyBVVEMgMjAxNiBpNjg2CisJU3lzdGVtIENhcGFiaWxpdGllcyBUTFYgKDcpLCBsZW5ndGggNAorCSAgU3lzdGVtICBDYXBhYmlsaXRpZXMgW0JyaWRnZSwgV0xBTiBBUCwgUm91dGVyLCBTdGF0aW9uIE9ubHldICgweDAwOWMpCisJICBFbmFibGVkIENhcGFiaWxpdGllcyBbV0xBTiBBUF0gKDB4MDAwOCkKKwlNYW5hZ2VtZW50IEFkZHJlc3MgVExWICg4KSwgbGVuZ3RoIDEyCisJICBNYW5hZ2VtZW50IEFkZHJlc3MgbGVuZ3RoIDUsIEFGSSBJUHY0ICgxKTogNjIuMTIuMTczLjExNAorCSAgSW50ZXJmYWNlIEluZGV4IEludGVyZmFjZSBOdW1iZXJpbmcgKDIpOiAyCisJTWFuYWdlbWVudCBBZGRyZXNzIFRMViAoOCksIGxlbmd0aCAyNAorCSAgTWFuYWdlbWVudCBBZGRyZXNzIGxlbmd0aCAxNywgQUZJIElQdjYgKDIpOiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyCisJICBJbnRlcmZhY2UgSW5kZXggSW50ZXJmYWNlIE51bWJlcmluZyAoMik6IDIKKwlQb3J0IERlc2NyaXB0aW9uIFRMViAoNCksIGxlbmd0aCA0OiBldGgwCisJT3JnYW5pemF0aW9uIHNwZWNpZmljIFRMViAoMTI3KSwgbGVuZ3RoIDk6IE9VSSBJRUVFIDgwMi4zIFByaXZhdGUgKDB4MDAxMjBmKQorCSAgTGluayBhZ2dyZWdhdGlvbiBTdWJ0eXBlICgzKQorCSAgICBhZ2dyZWdhdGlvbiBzdGF0dXMgW3N1cHBvcnRlZF0sIGFnZ3JlZ2F0aW9uIHBvcnQgSUQgMAorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA5OiBPVUkgSUVFRSA4MDIuMyBQcml2YXRlICgweDAwMTIwZikKKwkgIE1BQy9QSFkgY29uZmlndXJhdGlvbi9zdGF0dXMgU3VidHlwZSAoMSkKKwkgICAgYXV0b25lZ290aWF0aW9uIFtzdXBwb3J0ZWQsIGVuYWJsZWRdICgweDAzKQorCSAgICBQTUQgYXV0b25lZyBjYXBhYmlsaXR5IFsxMEJBU0UtVCBoZHgsIDEwQkFTRS1UIGZkeCwgMTAwQkFTRS1UWCBoZHgsIDEwMEJBU0UtVFggZmR4LCBQYXVzZSBmb3IgZmR4IGxpbmtzLCBBc3ltIFBBVVNFIGZvciBmZHgsIDEwMDBCQVNFLVQgaGR4LCAxMDAwQkFTRS1UIGZkeF0gKDB4ZWNjMykKKwkgICAgTUFVIHR5cGUgMTAwQkFTRVRYIGZkeCAoMHgwMDEwKQorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA2NDogT1VJIElBTkEgKDB4MDAwMDVlKQorCSAgTVVELVVSTCBTdWJ0eXBlICgxKQorCSAgTVVELVVSTD1odHRwczovL2ltcmlnaHQubXVkLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS92b21pdHYyLjAKKwlFbmQgVExWICgwKSwgbGVuZ3RoIDAKKzAwOjIzOjU0OmMyOjU3OjAyID4gMDE6ODA6YzI6MDA6MDA6MGUsIGV0aGVydHlwZSBMTERQICgweDg4Y2MpLCBsZW5ndGggMzAyOiBMTERQLCBsZW5ndGggMjg4CisJQ2hhc3NpcyBJRCBUTFYgKDEpLCBsZW5ndGggNworCSAgU3VidHlwZSBNQUMgYWRkcmVzcyAoNCk6IDAwOjIzOjU0OmMyOjU3OjAyCisJUG9ydCBJRCBUTFYgKDIpLCBsZW5ndGggNworCSAgU3VidHlwZSBNQUMgYWRkcmVzcyAoMyk6IDAwOjIzOjU0OmMyOjU3OjAyCisJVGltZSB0byBMaXZlIFRMViAoMyksIGxlbmd0aCAyOiBUVEwgMTIwcworCVN5c3RlbSBOYW1lIFRMViAoNSksIGxlbmd0aCAyODogdXBzdGFpcnMub2Zjb3Vyc2VpbXJpZ2h0LmNvbQorCVN5c3RlbSBEZXNjcmlwdGlvbiBUTFYgKDYpLCBsZW5ndGggOTIKKwkgIFVidW50dSAxNC4wNC41IExUUyBMaW51eCAzLjEzLjAtMTA2LWdlbmVyaWMgIzE1My1VYnVudHUgU01QIFR1ZSBEZWMgNiAxNTo0NToxMyBVVEMgMjAxNiBpNjg2CisJU3lzdGVtIENhcGFiaWxpdGllcyBUTFYgKDcpLCBsZW5ndGggNAorCSAgU3lzdGVtICBDYXBhYmlsaXRpZXMgW0JyaWRnZSwgV0xBTiBBUCwgUm91dGVyLCBTdGF0aW9uIE9ubHldICgweDAwOWMpCisJICBFbmFibGVkIENhcGFiaWxpdGllcyBbV0xBTiBBUF0gKDB4MDAwOCkKKwlNYW5hZ2VtZW50IEFkZHJlc3MgVExWICg4KSwgbGVuZ3RoIDEyCisJICBNYW5hZ2VtZW50IEFkZHJlc3MgbGVuZ3RoIDUsIEFGSSBJUHY0ICgxKTogNjIuMTIuMTczLjExNAorCSAgSW50ZXJmYWNlIEluZGV4IEludGVyZmFjZSBOdW1iZXJpbmcgKDIpOiAyCisJTWFuYWdlbWVudCBBZGRyZXNzIFRMViAoOCksIGxlbmd0aCAyNAorCSAgTWFuYWdlbWVudCBBZGRyZXNzIGxlbmd0aCAxNywgQUZJIElQdjYgKDIpOiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyCisJICBJbnRlcmZhY2UgSW5kZXggSW50ZXJmYWNlIE51bWJlcmluZyAoMik6IDIKKwlQb3J0IERlc2NyaXB0aW9uIFRMViAoNCksIGxlbmd0aCA0OiBldGgwCisJT3JnYW5pemF0aW9uIHNwZWNpZmljIFRMViAoMTI3KSwgbGVuZ3RoIDk6IE9VSSBJRUVFIDgwMi4zIFByaXZhdGUgKDB4MDAxMjBmKQorCSAgTGluayBhZ2dyZWdhdGlvbiBTdWJ0eXBlICgzKQorCSAgICBhZ2dyZWdhdGlvbiBzdGF0dXMgW3N1cHBvcnRlZF0sIGFnZ3JlZ2F0aW9uIHBvcnQgSUQgMAorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA5OiBPVUkgSUVFRSA4MDIuMyBQcml2YXRlICgweDAwMTIwZikKKwkgIE1BQy9QSFkgY29uZmlndXJhdGlvbi9zdGF0dXMgU3VidHlwZSAoMSkKKwkgICAgYXV0b25lZ290aWF0aW9uIFtzdXBwb3J0ZWQsIGVuYWJsZWRdICgweDAzKQorCSAgICBQTUQgYXV0b25lZyBjYXBhYmlsaXR5IFsxMEJBU0UtVCBoZHgsIDEwQkFTRS1UIGZkeCwgMTAwQkFTRS1UWCBoZHgsIDEwMEJBU0UtVFggZmR4LCBQYXVzZSBmb3IgZmR4IGxpbmtzLCBBc3ltIFBBVVNFIGZvciBmZHgsIDEwMDBCQVNFLVQgaGR4LCAxMDAwQkFTRS1UIGZkeF0gKDB4ZWNjMykKKwkgICAgTUFVIHR5cGUgMTAwQkFTRVRYIGZkeCAoMHgwMDEwKQorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA2NDogT1VJIElBTkEgKDB4MDAwMDVlKQorCSAgTVVELVVSTCBTdWJ0eXBlICgxKQorCSAgTVVELVVSTD1odHRwczovL2ltcmlnaHQubXVkLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS92b21pdHYyLjAKKwlFbmQgVExWICgwKSwgbGVuZ3RoIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xsZHBfbXVkdXJsLXZ2Lm91dCBiL3Rlc3RzL2xsZHBfbXVkdXJsLXZ2Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NTY0ODk4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbGxkcF9tdWR1cmwtdnYub3V0CkBAIC0wLDAgKzEsMTA2IEBACiswMDoyMzo1NDpjMjo1NzowMiA+IDAxOjgwOmMyOjAwOjAwOjBlLCBldGhlcnR5cGUgTExEUCAoMHg4OGNjKSwgbGVuZ3RoIDMwMjogTExEUCwgbGVuZ3RoIDI4OAorCUNoYXNzaXMgSUQgVExWICgxKSwgbGVuZ3RoIDcKKwkgIFN1YnR5cGUgTUFDIGFkZHJlc3MgKDQpOiAwMDoyMzo1NDpjMjo1NzowMgorCSAgMHgwMDAwOiAgMDQwMCAyMzU0IGMyNTcgMDIKKwlQb3J0IElEIFRMViAoMiksIGxlbmd0aCA3CisJICBTdWJ0eXBlIE1BQyBhZGRyZXNzICgzKTogMDA6MjM6NTQ6YzI6NTc6MDIKKwkgIDB4MDAwMDogIDAzMDAgMjM1NCBjMjU3IDAyCisJVGltZSB0byBMaXZlIFRMViAoMyksIGxlbmd0aCAyOiBUVEwgMTIwcworCSAgMHgwMDAwOiAgMDA3OAorCVN5c3RlbSBOYW1lIFRMViAoNSksIGxlbmd0aCAyODogdXBzdGFpcnMub2Zjb3Vyc2VpbXJpZ2h0LmNvbQorCSAgMHgwMDAwOiAgNzU3MCA3Mzc0IDYxNjkgNzI3MyAyZTZmIDY2NjMgNmY3NSA3MjczCisJICAweDAwMTA6ICA2NTY5IDZkNzIgNjk2NyA2ODc0IDJlNjMgNmY2ZAorCVN5c3RlbSBEZXNjcmlwdGlvbiBUTFYgKDYpLCBsZW5ndGggOTIKKwkgIFVidW50dSAxNC4wNC41IExUUyBMaW51eCAzLjEzLjAtMTA2LWdlbmVyaWMgIzE1My1VYnVudHUgU01QIFR1ZSBEZWMgNiAxNTo0NToxMyBVVEMgMjAxNiBpNjg2CisJICAweDAwMDA6ICA1NTYyIDc1NmUgNzQ3NSAyMDMxIDM0MmUgMzAzNCAyZTM1IDIwNGMKKwkgIDB4MDAxMDogIDU0NTMgMjA0YyA2OTZlIDc1NzggMjAzMyAyZTMxIDMzMmUgMzAyZAorCSAgMHgwMDIwOiAgMzEzMCAzNjJkIDY3NjUgNmU2NSA3MjY5IDYzMjAgMjMzMSAzNTMzCisJICAweDAwMzA6ICAyZDU1IDYyNzUgNmU3NCA3NTIwIDUzNGQgNTAyMCA1NDc1IDY1MjAKKwkgIDB4MDA0MDogIDQ0NjUgNjMyMCAzNjIwIDMxMzUgM2EzNCAzNTNhIDMxMzMgMjA1NQorCSAgMHgwMDUwOiAgNTQ0MyAyMDMyIDMwMzEgMzYyMCA2OTM2IDM4MzYKKwlTeXN0ZW0gQ2FwYWJpbGl0aWVzIFRMViAoNyksIGxlbmd0aCA0CisJICBTeXN0ZW0gIENhcGFiaWxpdGllcyBbQnJpZGdlLCBXTEFOIEFQLCBSb3V0ZXIsIFN0YXRpb24gT25seV0gKDB4MDA5YykKKwkgIEVuYWJsZWQgQ2FwYWJpbGl0aWVzIFtXTEFOIEFQXSAoMHgwMDA4KQorCSAgMHgwMDAwOiAgMDA5YyAwMDA4CisJTWFuYWdlbWVudCBBZGRyZXNzIFRMViAoOCksIGxlbmd0aCAxMgorCSAgTWFuYWdlbWVudCBBZGRyZXNzIGxlbmd0aCA1LCBBRkkgSVB2NCAoMSk6IDYyLjEyLjE3My4xMTQKKwkgIEludGVyZmFjZSBJbmRleCBJbnRlcmZhY2UgTnVtYmVyaW5nICgyKTogMgorCSAgMHgwMDAwOiAgMDUwMSAzZTBjIGFkNzIgMDIwMCAwMDAwIDAyMDAKKwlNYW5hZ2VtZW50IEFkZHJlc3MgVExWICg4KSwgbGVuZ3RoIDI0CisJICBNYW5hZ2VtZW50IEFkZHJlc3MgbGVuZ3RoIDE3LCBBRkkgSVB2NiAoMik6IDIwMDE6OGE4OjEwMDY6NDoyMjM6NTRmZjpmZWMyOjU3MDIKKwkgIEludGVyZmFjZSBJbmRleCBJbnRlcmZhY2UgTnVtYmVyaW5nICgyKTogMgorCSAgMHgwMDAwOiAgMTEwMiAyMDAxIDA4YTggMTAwNiAwMDA0IDAyMjMgNTRmZiBmZWMyCisJICAweDAwMTA6ICA1NzAyIDAyMDAgMDAwMCAwMjAwCisJUG9ydCBEZXNjcmlwdGlvbiBUTFYgKDQpLCBsZW5ndGggNDogZXRoMAorCSAgMHgwMDAwOiAgNjU3NCA2ODMwCisJT3JnYW5pemF0aW9uIHNwZWNpZmljIFRMViAoMTI3KSwgbGVuZ3RoIDk6IE9VSSBJRUVFIDgwMi4zIFByaXZhdGUgKDB4MDAxMjBmKQorCSAgTGluayBhZ2dyZWdhdGlvbiBTdWJ0eXBlICgzKQorCSAgICBhZ2dyZWdhdGlvbiBzdGF0dXMgW3N1cHBvcnRlZF0sIGFnZ3JlZ2F0aW9uIHBvcnQgSUQgMAorCSAgMHgwMDAwOiAgMDAxMiAwZjAzIDAxMDAgMDAwMCAwMAorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA5OiBPVUkgSUVFRSA4MDIuMyBQcml2YXRlICgweDAwMTIwZikKKwkgIE1BQy9QSFkgY29uZmlndXJhdGlvbi9zdGF0dXMgU3VidHlwZSAoMSkKKwkgICAgYXV0b25lZ290aWF0aW9uIFtzdXBwb3J0ZWQsIGVuYWJsZWRdICgweDAzKQorCSAgICBQTUQgYXV0b25lZyBjYXBhYmlsaXR5IFsxMEJBU0UtVCBoZHgsIDEwQkFTRS1UIGZkeCwgMTAwQkFTRS1UWCBoZHgsIDEwMEJBU0UtVFggZmR4LCBQYXVzZSBmb3IgZmR4IGxpbmtzLCBBc3ltIFBBVVNFIGZvciBmZHgsIDEwMDBCQVNFLVQgaGR4LCAxMDAwQkFTRS1UIGZkeF0gKDB4ZWNjMykKKwkgICAgTUFVIHR5cGUgMTAwQkFTRVRYIGZkeCAoMHgwMDEwKQorCSAgMHgwMDAwOiAgMDAxMiAwZjAxIDAzZWMgYzMwMCAxMAorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA2NDogT1VJIElBTkEgKDB4MDAwMDVlKQorCSAgTVVELVVSTCBTdWJ0eXBlICgxKQorCSAgTVVELVVSTD1odHRwczovL2ltcmlnaHQubXVkLmV4YW1wbGUuY29tLy53ZWxsLWtub3duL211ZC92MS92b21pdHYyLjAKKwkgIDB4MDAwMDogIDAwMDAgNWUwMSA2ODc0IDc0NzAgNzMzYSAyZjJmIDY5NmQgNzI2OQorCSAgMHgwMDEwOiAgNjc2OCA3NDJlIDZkNzUgNjQyZSA2NTc4IDYxNmQgNzA2YyA2NTJlCisJICAweDAwMjA6ICA2MzZmIDZkMmYgMmU3NyA2NTZjIDZjMmQgNmI2ZSA2Zjc3IDZlMmYKKwkgIDB4MDAzMDogIDZkNzUgNjQyZiA3NjMxIDJmNzYgNmY2ZCA2OTc0IDc2MzIgMmUzMAorCUVuZCBUTFYgKDApLCBsZW5ndGggMAorMDA6MjM6NTQ6YzI6NTc6MDIgPiAwMTo4MDpjMjowMDowMDowZSwgZXRoZXJ0eXBlIExMRFAgKDB4ODhjYyksIGxlbmd0aCAzMDI6IExMRFAsIGxlbmd0aCAyODgKKwlDaGFzc2lzIElEIFRMViAoMSksIGxlbmd0aCA3CisJICBTdWJ0eXBlIE1BQyBhZGRyZXNzICg0KTogMDA6MjM6NTQ6YzI6NTc6MDIKKwkgIDB4MDAwMDogIDA0MDAgMjM1NCBjMjU3IDAyCisJUG9ydCBJRCBUTFYgKDIpLCBsZW5ndGggNworCSAgU3VidHlwZSBNQUMgYWRkcmVzcyAoMyk6IDAwOjIzOjU0OmMyOjU3OjAyCisJICAweDAwMDA6ICAwMzAwIDIzNTQgYzI1NyAwMgorCVRpbWUgdG8gTGl2ZSBUTFYgKDMpLCBsZW5ndGggMjogVFRMIDEyMHMKKwkgIDB4MDAwMDogIDAwNzgKKwlTeXN0ZW0gTmFtZSBUTFYgKDUpLCBsZW5ndGggMjg6IHVwc3RhaXJzLm9mY291cnNlaW1yaWdodC5jb20KKwkgIDB4MDAwMDogIDc1NzAgNzM3NCA2MTY5IDcyNzMgMmU2ZiA2NjYzIDZmNzUgNzI3MworCSAgMHgwMDEwOiAgNjU2OSA2ZDcyIDY5NjcgNjg3NCAyZTYzIDZmNmQKKwlTeXN0ZW0gRGVzY3JpcHRpb24gVExWICg2KSwgbGVuZ3RoIDkyCisJICBVYnVudHUgMTQuMDQuNSBMVFMgTGludXggMy4xMy4wLTEwNi1nZW5lcmljICMxNTMtVWJ1bnR1IFNNUCBUdWUgRGVjIDYgMTU6NDU6MTMgVVRDIDIwMTYgaTY4NgorCSAgMHgwMDAwOiAgNTU2MiA3NTZlIDc0NzUgMjAzMSAzNDJlIDMwMzQgMmUzNSAyMDRjCisJICAweDAwMTA6ICA1NDUzIDIwNGMgNjk2ZSA3NTc4IDIwMzMgMmUzMSAzMzJlIDMwMmQKKwkgIDB4MDAyMDogIDMxMzAgMzYyZCA2NzY1IDZlNjUgNzI2OSA2MzIwIDIzMzEgMzUzMworCSAgMHgwMDMwOiAgMmQ1NSA2Mjc1IDZlNzQgNzUyMCA1MzRkIDUwMjAgNTQ3NSA2NTIwCisJICAweDAwNDA6ICA0NDY1IDYzMjAgMzYyMCAzMTM1IDNhMzQgMzUzYSAzMTMzIDIwNTUKKwkgIDB4MDA1MDogIDU0NDMgMjAzMiAzMDMxIDM2MjAgNjkzNiAzODM2CisJU3lzdGVtIENhcGFiaWxpdGllcyBUTFYgKDcpLCBsZW5ndGggNAorCSAgU3lzdGVtICBDYXBhYmlsaXRpZXMgW0JyaWRnZSwgV0xBTiBBUCwgUm91dGVyLCBTdGF0aW9uIE9ubHldICgweDAwOWMpCisJICBFbmFibGVkIENhcGFiaWxpdGllcyBbV0xBTiBBUF0gKDB4MDAwOCkKKwkgIDB4MDAwMDogIDAwOWMgMDAwOAorCU1hbmFnZW1lbnQgQWRkcmVzcyBUTFYgKDgpLCBsZW5ndGggMTIKKwkgIE1hbmFnZW1lbnQgQWRkcmVzcyBsZW5ndGggNSwgQUZJIElQdjQgKDEpOiA2Mi4xMi4xNzMuMTE0CisJICBJbnRlcmZhY2UgSW5kZXggSW50ZXJmYWNlIE51bWJlcmluZyAoMik6IDIKKwkgIDB4MDAwMDogIDA1MDEgM2UwYyBhZDcyIDAyMDAgMDAwMCAwMjAwCisJTWFuYWdlbWVudCBBZGRyZXNzIFRMViAoOCksIGxlbmd0aCAyNAorCSAgTWFuYWdlbWVudCBBZGRyZXNzIGxlbmd0aCAxNywgQUZJIElQdjYgKDIpOiAyMDAxOjhhODoxMDA2OjQ6MjIzOjU0ZmY6ZmVjMjo1NzAyCisJICBJbnRlcmZhY2UgSW5kZXggSW50ZXJmYWNlIE51bWJlcmluZyAoMik6IDIKKwkgIDB4MDAwMDogIDExMDIgMjAwMSAwOGE4IDEwMDYgMDAwNCAwMjIzIDU0ZmYgZmVjMgorCSAgMHgwMDEwOiAgNTcwMiAwMjAwIDAwMDAgMDIwMAorCVBvcnQgRGVzY3JpcHRpb24gVExWICg0KSwgbGVuZ3RoIDQ6IGV0aDAKKwkgIDB4MDAwMDogIDY1NzQgNjgzMAorCU9yZ2FuaXphdGlvbiBzcGVjaWZpYyBUTFYgKDEyNyksIGxlbmd0aCA5OiBPVUkgSUVFRSA4MDIuMyBQcml2YXRlICgweDAwMTIwZikKKwkgIExpbmsgYWdncmVnYXRpb24gU3VidHlwZSAoMykKKwkgICAgYWdncmVnYXRpb24gc3RhdHVzIFtzdXBwb3J0ZWRdLCBhZ2dyZWdhdGlvbiBwb3J0IElEIDAKKwkgIDB4MDAwMDogIDAwMTIgMGYwMyAwMTAwIDAwMDAgMDAKKwlPcmdhbml6YXRpb24gc3BlY2lmaWMgVExWICgxMjcpLCBsZW5ndGggOTogT1VJIElFRUUgODAyLjMgUHJpdmF0ZSAoMHgwMDEyMGYpCisJICBNQUMvUEhZIGNvbmZpZ3VyYXRpb24vc3RhdHVzIFN1YnR5cGUgKDEpCisJICAgIGF1dG9uZWdvdGlhdGlvbiBbc3VwcG9ydGVkLCBlbmFibGVkXSAoMHgwMykKKwkgICAgUE1EIGF1dG9uZWcgY2FwYWJpbGl0eSBbMTBCQVNFLVQgaGR4LCAxMEJBU0UtVCBmZHgsIDEwMEJBU0UtVFggaGR4LCAxMDBCQVNFLVRYIGZkeCwgUGF1c2UgZm9yIGZkeCBsaW5rcywgQXN5bSBQQVVTRSBmb3IgZmR4LCAxMDAwQkFTRS1UIGhkeCwgMTAwMEJBU0UtVCBmZHhdICgweGVjYzMpCisJICAgIE1BVSB0eXBlIDEwMEJBU0VUWCBmZHggKDB4MDAxMCkKKwkgIDB4MDAwMDogIDAwMTIgMGYwMSAwM2VjIGMzMDAgMTAKKwlPcmdhbml6YXRpb24gc3BlY2lmaWMgVExWICgxMjcpLCBsZW5ndGggNjQ6IE9VSSBJQU5BICgweDAwMDA1ZSkKKwkgIE1VRC1VUkwgU3VidHlwZSAoMSkKKwkgIE1VRC1VUkw9aHR0cHM6Ly9pbXJpZ2h0Lm11ZC5leGFtcGxlLmNvbS8ud2VsbC1rbm93bi9tdWQvdjEvdm9taXR2Mi4wCisJICAweDAwMDA6ICAwMDAwIDVlMDEgNjg3NCA3NDcwIDczM2EgMmYyZiA2OTZkIDcyNjkKKwkgIDB4MDAxMDogIDY3NjggNzQyZSA2ZDc1IDY0MmUgNjU3OCA2MTZkIDcwNmMgNjUyZQorCSAgMHgwMDIwOiAgNjM2ZiA2ZDJmIDJlNzcgNjU2YyA2YzJkIDZiNmUgNmY3NyA2ZTJmCisJICAweDAwMzA6ICA2ZDc1IDY0MmYgNzYzMSAyZjc2IDZmNmQgNjk3NCA3NjMyIDJlMzAKKwlFbmQgVExWICgwKSwgbGVuZ3RoIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xsZHBfbXVkdXJsLnBjYXAgYi90ZXN0cy9sbGRwX211ZHVybC5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ5ZDgzYTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sbGRwX211ZHVybC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL2xtcC12LnNoIGIvdGVzdHMvbG1wLXYuc2gKaW5kZXggMTM4YTBjZC4uMWMyODZiZiAxMDA3NTUKLS0tIGEvdGVzdHMvbG1wLXYuc2gKKysrIGIvdGVzdHMvbG1wLXYuc2gKQEAgLTEwLDEwICsxMCwxMCBAQAogIyB0aGF0IHdvbid0IHJldHVybiBhbiBlcnJvciB3aGVuIHRoZSBmaWxlIGRvZXMgbm90IGV4aXN0LiBXb3JrIGFyb3VuZC4KIGlmIFsgISAtZiAuLi9NYWtlZmlsZSBdCiB0aGVuCi0JcHJpbnRmICcgICAgJS0zMHM6IFRFU1QgU0tJUFBFRCAobm8gTWFrZWZpbGUpXG4nICdsbXAtdicKKwlwcmludGYgJyAgICAlLTM1czogVEVTVCBTS0lQUEVEIChubyBNYWtlZmlsZSlcbicgJ2xtcC12JwogZWxpZiBncmVwICdeQ0MgPSAuKmdjYycgLi4vTWFrZWZpbGUgPi9kZXYvbnVsbAogdGhlbgogICAuL1RFU1RvbmNlIGxtcC12IGxtcC5wY2FwIGxtcC12Lm91dCAnLXQgLVQgbG1wIC12JwogZWxzZQotCXByaW50ZiAnICAgICUtMzBzOiBURVNUIFNLSVBQRUQgKGNvbXBpbGVyIGlzIG5vdCBHQ0MpXG4nICdsbXAtdicKKwlwcmludGYgJyAgICAlLTM1czogVEVTVCBTS0lQUEVEIChjb21waWxlciBpcyBub3QgR0NDKVxuJyAnbG1wLXYnCiBmaQpkaWZmIC0tZ2l0IGEvdGVzdHMvbHNwcGluZy1mZWMtbGRwLXYub3V0IGIvdGVzdHMvbHNwcGluZy1mZWMtbGRwLXYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmU0YTg4NmIKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sc3BwaW5nLWZlYy1sZHAtdi5vdXQKQEAgLTAsMCArMSwxMTEgQEAKK01QTFMgKGxhYmVsIDEwMDY1NiwgZXhwIDYsIFtTXSwgdHRsIDY0KQorCUlQICh0b3MgMHhjMCwgdHRsIDY0LCBpZCA0MDcxOSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDcxKQorICAgIDEyLjQuNC40LjQxMDAgPiAxMi44LjguOC4xNzk6IEZsYWdzIFtQLl0sIGNrc3VtIDB4ZmQxYiAoY29ycmVjdCksIHNlcSAxODYwNjQxOTU4OjE4NjA2NDE5NzcsIGFjayAyOTY5NDY4OTY3LCB3aW4gMTYzODQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDg0Nzg0MTUyIGVjciA4NDc3MDIzOF0sIGxlbmd0aCAxOTogQkdQCisJS2VlcGFsaXZlIE1lc3NhZ2UgKDQpLCBsZW5ndGg6IDE5CitNUExTIChsYWJlbCAxMDA2ODgsIGV4cCA3LCBbU10sIHR0bCAyNTUpCisJSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNDA3MjMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDQ4CisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAxCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDEyCisJICAgIExEUCBJUHY0IHByZWZpeCBzdWJUTFYgKDEpLCBsZW5ndGg6IDUKKwkgICAgICAxMi4xLjEuMS8zMgorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwODc4LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMQorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDYsIFtTXSwgdHRsIDY0KQorCUlQICh0b3MgMHhjMCwgdHRsIDY0LCBpZCA0MDcyNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDcxKQorICAgIDEyLjQuNC40LjIwMDYgPiAxMi4xLjEuMS4xNzk6IEZsYWdzIFtQLl0sIGNrc3VtIDB4NmMwZCAoY29ycmVjdCksIHNlcSAzOTk3MDg4NjY6Mzk5NzA4ODg1LCBhY2sgNzA4NjEzMjEyLCB3aW4gMTYzODQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDg0Nzg0NDU1IGVjciAxMzA0MTFdLCBsZW5ndGggMTk6IEJHUAorCUtlZXBhbGl2ZSBNZXNzYWdlICg0KSwgbGVuZ3RoOiAxOQorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNiwgW1NdLCB0dGwgNjQpCisJSVAgKHRvcyAweGMwLCB0dGwgNjQsIGlkIDQwNzI2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCisgICAgMTIuNC40LjQuMjAwNiA+IDEyLjEuMS4xLjE3OTogRmxhZ3MgWy5dLCBja3N1bSAweDY0NTEgKGNvcnJlY3QpLCBhY2sgMjAsIHdpbiAxNjM4NCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgODQ3ODQ0NjUgZWNyIDEzMzQxM10sIGxlbmd0aCAwCitNUExTIChsYWJlbCAxMDA2ODgsIGV4cCA3LCBbU10sIHR0bCAyNTUpCisJSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNDA3MjcsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDQ4CisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAyCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDEyCisJICAgIExEUCBJUHY0IHByZWZpeCBzdWJUTFYgKDEpLCBsZW5ndGg6IDUKKwkgICAgICAxMi4xLjEuMS8zMgorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwODgwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMgorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDY4OCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkKKwlJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0MDcyOSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxMi40LjQuNC40Nzg2ID4gMTI3LjAuMC4xLjM1MDM6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNDgKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDMKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMTIKKwkgICAgTERQIElQdjQgcHJlZml4IHN1YlRMViAoMSksIGxlbmd0aDogNQorCSAgICAgIDEyLjEuMS4xLzMyCitJUCAodG9zIDB4YzAsIHR0bCA2MiwgaWQgNTA4ODIsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjApCisgICAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40Nzg2OiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAzCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNjg4LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwNzMxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDEyLjQuNC40LjQ3ODYgPiAxMjcuMC4wLjEuMzUwMzogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXF1ZXN0ICgxKSwgbGVuZ3RoOiA0OAorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IE5vIHJldHVybiBjb2RlIG9yIHJldHVybiBjb2RlIGNvbnRhaW5lZCBpbiB0aGUgRXJyb3IgQ29kZSBUTFYgKDApCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogNAorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiBubyB0aW1lc3RhbXAKKwkgIFRhcmdldCBGRUMgU3RhY2sgVExWICgxKSwgbGVuZ3RoOiAxMgorCSAgICBMRFAgSVB2NCBwcmVmaXggc3ViVExWICgxKSwgbGVuZ3RoOiA1CisJICAgICAgMTIuMS4xLjEvMzIKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDg4Mywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ3ODY6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVwbHkgKDIpLCBsZW5ndGg6IDMyCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogUmVwbHlpbmcgcm91dGVyIGlzIGFuIGVncmVzcyBmb3IgdGhlIEZFQyBhdCBzdGFjayBkZXB0aCAwICgzKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDQKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogCitNUExTIChsYWJlbCAxMDA2ODgsIGV4cCA3LCBbU10sIHR0bCAyNTUpCisJSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNDA3MzMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDQ4CisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiA1CisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDEyCisJICAgIExEUCBJUHY0IHByZWZpeCBzdWJUTFYgKDEpLCBsZW5ndGg6IDUKKwkgICAgICAxMi4xLjEuMS8zMgorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwODg2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogNQorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKZGlmZiAtLWdpdCBhL3Rlc3RzL2xzcHBpbmctZmVjLWxkcC12di5vdXQgYi90ZXN0cy9sc3BwaW5nLWZlYy1sZHAtdnYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMGQxZjYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sc3BwaW5nLWZlYy1sZHAtdnYub3V0CkBAIC0wLDAgKzEsMTIxIEBACitNUExTIChsYWJlbCAxMDA2NTYsIGV4cCA2LCBbU10sIHR0bCA2NCkKKwlJUCAodG9zIDB4YzAsIHR0bCA2NCwgaWQgNDA3MTksIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA3MSkKKyAgICAxMi40LjQuNC40MTAwID4gMTIuOC44LjguMTc5OiBGbGFncyBbUC5dLCBja3N1bSAweGZkMWIgKGNvcnJlY3QpLCBzZXEgMTg2MDY0MTk1ODoxODYwNjQxOTc3LCBhY2sgMjk2OTQ2ODk2Nywgd2luIDE2Mzg0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA4NDc4NDE1MiBlY3IgODQ3NzAyMzhdLCBsZW5ndGggMTk6IEJHUAorCUtlZXBhbGl2ZSBNZXNzYWdlICg0KSwgbGVuZ3RoOiAxOQorTVBMUyAobGFiZWwgMTAwNjg4LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwNzIzLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDEyLjQuNC40LjQ3ODYgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNDgKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDEKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMTIKKwkgICAgTERQIElQdjQgcHJlZml4IHN1YlRMViAoMSksIGxlbmd0aDogNQorCSAgICAgIDEyLjEuMS4xLzMyCisJICAgICAgMHgwMDAwOiAgMGMwMSAwMTAxIDIwCisJICAgIDB4MDAwMDogIDAwMDEgMDAwNSAwYzAxIDAxMDEgMjAwMCAwMDAwCitJUCAodG9zIDB4YzAsIHR0bCA2MiwgaWQgNTA4NzgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjApCisgICAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40Nzg2OiBbdWRwIHN1bSBva10gCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMQorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDYsIFtTXSwgdHRsIDY0KQorCUlQICh0b3MgMHhjMCwgdHRsIDY0LCBpZCA0MDcyNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDcxKQorICAgIDEyLjQuNC40LjIwMDYgPiAxMi4xLjEuMS4xNzk6IEZsYWdzIFtQLl0sIGNrc3VtIDB4NmMwZCAoY29ycmVjdCksIHNlcSAzOTk3MDg4NjY6Mzk5NzA4ODg1LCBhY2sgNzA4NjEzMjEyLCB3aW4gMTYzODQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDg0Nzg0NDU1IGVjciAxMzA0MTFdLCBsZW5ndGggMTk6IEJHUAorCUtlZXBhbGl2ZSBNZXNzYWdlICg0KSwgbGVuZ3RoOiAxOQorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNiwgW1NdLCB0dGwgNjQpCisJSVAgKHRvcyAweGMwLCB0dGwgNjQsIGlkIDQwNzI2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCisgICAgMTIuNC40LjQuMjAwNiA+IDEyLjEuMS4xLjE3OTogRmxhZ3MgWy5dLCBja3N1bSAweDY0NTEgKGNvcnJlY3QpLCBzZXEgMTksIGFjayAyMCwgd2luIDE2Mzg0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCA4NDc4NDQ2NSBlY3IgMTMzNDEzXSwgbGVuZ3RoIDAKK01QTFMgKGxhYmVsIDEwMDY4OCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkKKwlJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0MDcyNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxMi40LjQuNC40Nzg2ID4gMTI3LjAuMC4xLjM1MDM6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDQ4CisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAyCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDEyCisJICAgIExEUCBJUHY0IHByZWZpeCBzdWJUTFYgKDEpLCBsZW5ndGg6IDUKKwkgICAgICAxMi4xLjEuMS8zMgorCSAgICAgIDB4MDAwMDogIDBjMDEgMDEwMSAyMAorCSAgICAweDAwMDA6ICAwMDAxIDAwMDUgMGMwMSAwMTAxIDIwMDAgMDAwMAorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwODgwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVwbHkgKDIpLCBsZW5ndGg6IDMyCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogUmVwbHlpbmcgcm91dGVyIGlzIGFuIGVncmVzcyBmb3IgdGhlIEZFQyBhdCBzdGFjayBkZXB0aCAwICgzKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDIKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogCitNUExTIChsYWJlbCAxMDA2ODgsIGV4cCA3LCBbU10sIHR0bCAyNTUpCisJSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNDA3MjksIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNzYpCisgICAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiBbdWRwIHN1bSBva10gCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXF1ZXN0ICgxKSwgbGVuZ3RoOiA0OAorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IE5vIHJldHVybiBjb2RlIG9yIHJldHVybiBjb2RlIGNvbnRhaW5lZCBpbiB0aGUgRXJyb3IgQ29kZSBUTFYgKDApCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMworCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiBubyB0aW1lc3RhbXAKKwkgIFRhcmdldCBGRUMgU3RhY2sgVExWICgxKSwgbGVuZ3RoOiAxMgorCSAgICBMRFAgSVB2NCBwcmVmaXggc3ViVExWICgxKSwgbGVuZ3RoOiA1CisJICAgICAgMTIuMS4xLjEvMzIKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMjAKKwkgICAgMHgwMDAwOiAgMDAwMSAwMDA1IDBjMDEgMDEwMSAyMDAwIDAwMDAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDg4Miwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ3ODY6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAzCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNjg4LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwNzMxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDc2KQorICAgIDEyLjQuNC40LjQ3ODYgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNDgKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDQKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMTIKKwkgICAgTERQIElQdjQgcHJlZml4IHN1YlRMViAoMSksIGxlbmd0aDogNQorCSAgICAgIDEyLjEuMS4xLzMyCisJICAgICAgMHgwMDAwOiAgMGMwMSAwMTAxIDIwCisJICAgIDB4MDAwMDogIDAwMDEgMDAwNSAwYzAxIDAxMDEgMjAwMCAwMDAwCitJUCAodG9zIDB4YzAsIHR0bCA2MiwgaWQgNTA4ODMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjApCisgICAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40Nzg2OiBbdWRwIHN1bSBva10gCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogNAorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDY4OCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkKKwlJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0MDczMywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA3NikKKyAgICAxMi40LjQuNC40Nzg2ID4gMTI3LjAuMC4xLjM1MDM6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDQ4CisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiA1CisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDEyCisJICAgIExEUCBJUHY0IHByZWZpeCBzdWJUTFYgKDEpLCBsZW5ndGg6IDUKKwkgICAgICAxMi4xLjEuMS8zMgorCSAgICAgIDB4MDAwMDogIDBjMDEgMDEwMSAyMAorCSAgICAweDAwMDA6ICAwMDAxIDAwMDUgMGMwMSAwMTAxIDIwMDAgMDAwMAorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwODg2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVwbHkgKDIpLCBsZW5ndGg6IDMyCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogUmVwbHlpbmcgcm91dGVyIGlzIGFuIGVncmVzcyBmb3IgdGhlIEZFQyBhdCBzdGFjayBkZXB0aCAwICgzKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDUKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogCmRpZmYgLS1naXQgYS90ZXN0cy9sc3BwaW5nLWZlYy1sZHAub3V0IGIvdGVzdHMvbHNwcGluZy1mZWMtbGRwLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yZGY4YjRjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbHNwcGluZy1mZWMtbGRwLm91dApAQCAtMCwwICsxLDEzIEBACitNUExTIChsYWJlbCAxMDA2NTYsIGV4cCA2LCBbU10sIHR0bCA2NCkgSVAgMTIuNC40LjQuNDEwMCA+IDEyLjguOC44LjE3OTogRmxhZ3MgW1AuXSwgc2VxIDE4NjA2NDE5NTg6MTg2MDY0MTk3NywgYWNrIDI5Njk0Njg5NjcsIHdpbiAxNjM4NCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgODQ3ODQxNTIgZWNyIDg0NzcwMjM4XSwgbGVuZ3RoIDE5OiBCR1AKK01QTFMgKGxhYmVsIDEwMDY4OCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkgSVAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVxdWVzdCwgc2VxIDEsIGxlbmd0aDogNDgKK0lQIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcGx5LCBzZXEgMSwgbGVuZ3RoOiAzMgorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNiwgW1NdLCB0dGwgNjQpIElQIDEyLjQuNC40LjIwMDYgPiAxMi4xLjEuMS4xNzk6IEZsYWdzIFtQLl0sIHNlcSAzOTk3MDg4NjY6Mzk5NzA4ODg1LCBhY2sgNzA4NjEzMjEyLCB3aW4gMTYzODQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDg0Nzg0NDU1IGVjciAxMzA0MTFdLCBsZW5ndGggMTk6IEJHUAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNiwgW1NdLCB0dGwgNjQpIElQIDEyLjQuNC40LjIwMDYgPiAxMi4xLjEuMS4xNzk6IEZsYWdzIFsuXSwgYWNrIDIwLCB3aW4gMTYzODQsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDg0Nzg0NDY1IGVjciAxMzM0MTNdLCBsZW5ndGggMAorTVBMUyAobGFiZWwgMTAwNjg4LCBleHAgNywgW1NdLCB0dGwgMjU1KSBJUCAxMi40LjQuNC40Nzg2ID4gMTI3LjAuMC4xLjM1MDM6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXF1ZXN0LCBzZXEgMiwgbGVuZ3RoOiA0OAorSVAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40Nzg2OiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVwbHksIHNlcSAyLCBsZW5ndGg6IDMyCitNUExTIChsYWJlbCAxMDA2ODgsIGV4cCA3LCBbU10sIHR0bCAyNTUpIElQIDEyLjQuNC40LjQ3ODYgPiAxMjcuMC4wLjEuMzUwMzogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcXVlc3QsIHNlcSAzLCBsZW5ndGg6IDQ4CitJUCAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ3ODY6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXBseSwgc2VxIDMsIGxlbmd0aDogMzIKK01QTFMgKGxhYmVsIDEwMDY4OCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkgSVAgMTIuNC40LjQuNDc4NiA+IDEyNy4wLjAuMS4zNTAzOiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVxdWVzdCwgc2VxIDQsIGxlbmd0aDogNDgKK0lQIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDc4NjogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcGx5LCBzZXEgNCwgbGVuZ3RoOiAzMgorTVBMUyAobGFiZWwgMTAwNjg4LCBleHAgNywgW1NdLCB0dGwgMjU1KSBJUCAxMi40LjQuNC40Nzg2ID4gMTI3LjAuMC4xLjM1MDM6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXF1ZXN0LCBzZXEgNSwgbGVuZ3RoOiA0OAorSVAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40Nzg2OiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVwbHksIHNlcSA1LCBsZW5ndGg6IDMyCmRpZmYgLS1naXQgYS90ZXN0cy9sc3BwaW5nLWZlYy1yc3ZwLXYub3V0IGIvdGVzdHMvbHNwcGluZy1mZWMtcnN2cC12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNzkwNDNlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbHNwcGluZy1mZWMtcnN2cC12Lm91dApAQCAtMCwwICsxLDEwNSBAQAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjY5LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXF1ZXN0ICgxKSwgbGVuZ3RoOiA2MAorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IE5vIHJldHVybiBjb2RlIG9yIHJldHVybiBjb2RlIGNvbnRhaW5lZCBpbiB0aGUgRXJyb3IgQ29kZSBUTFYgKDApCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMQorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiBubyB0aW1lc3RhbXAKKwkgIFRhcmdldCBGRUMgU3RhY2sgVExWICgxKSwgbGVuZ3RoOiAyNAorCSAgICBSU1ZQIElQdjQgU2Vzc2lvbiBRdWVyeSBzdWJUTFYgKDMpLCBsZW5ndGg6IDIwCisJICAgICAgdHVubmVsIGVuZC1wb2ludCAxMi4xLjEuMSwgdHVubmVsIHNlbmRlciAxMi40LjQuNCwgbHNwLWlkIDB4MDAxMAorCSAgICAgIHR1bm5lbC1pZCAweDUzNzIsIGV4dGVuZGVkIHR1bm5lbC1pZCAxMi40LjQuNAorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwNjM0LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDUyOTogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogMQorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkKKwlJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0MDI3MSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4OCkKKyAgICAxMi40LjQuNC40NTI5ID4gMTI3LjAuMC4xLjM1MDM6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDIKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDYzNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVwbHkgKDIpLCBsZW5ndGg6IDMyCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogUmVwbHlpbmcgcm91dGVyIGlzIGFuIGVncmVzcyBmb3IgdGhlIEZFQyBhdCBzdGFjayBkZXB0aCAwICgzKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDIKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogCitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCA3LCBbU10sIHR0bCAyNTUpCisJSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNDAyNzMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggODgpCisgICAgMTIuNC40LjQuNDUyOSA+IDEyNy4wLjAuMS4zNTAzOiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcXVlc3QgKDEpLCBsZW5ndGg6IDYwCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogTm8gcmV0dXJuIGNvZGUgb3IgcmV0dXJuIGNvZGUgY29udGFpbmVkIGluIHRoZSBFcnJvciBDb2RlIFRMViAoMCkKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAzCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IG5vIHRpbWVzdGFtcAorCSAgVGFyZ2V0IEZFQyBTdGFjayBUTFYgKDEpLCBsZW5ndGg6IDI0CisJICAgIFJTVlAgSVB2NCBTZXNzaW9uIFF1ZXJ5IHN1YlRMViAoMyksIGxlbmd0aDogMjAKKwkgICAgICB0dW5uZWwgZW5kLXBvaW50IDEyLjEuMS4xLCB0dW5uZWwgc2VuZGVyIDEyLjQuNC40LCBsc3AtaWQgMHgwMDEwCisJICAgICAgdHVubmVsLWlkIDB4NTM3MiwgZXh0ZW5kZWQgdHVubmVsLWlkIDEyLjQuNC40CitJUCAodG9zIDB4YzAsIHR0bCA2MiwgaWQgNTA2MzcsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNjApCisgICAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40NTI5OiAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAzCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjc1LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXF1ZXN0ICgxKSwgbGVuZ3RoOiA2MAorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IE5vIHJldHVybiBjb2RlIG9yIHJldHVybiBjb2RlIGNvbnRhaW5lZCBpbiB0aGUgRXJyb3IgQ29kZSBUTFYgKDApCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogNAorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiBubyB0aW1lc3RhbXAKKwkgIFRhcmdldCBGRUMgU3RhY2sgVExWICgxKSwgbGVuZ3RoOiAyNAorCSAgICBSU1ZQIElQdjQgU2Vzc2lvbiBRdWVyeSBzdWJUTFYgKDMpLCBsZW5ndGg6IDIwCisJICAgICAgdHVubmVsIGVuZC1wb2ludCAxMi4xLjEuMSwgdHVubmVsIHNlbmRlciAxMi40LjQuNCwgbHNwLWlkIDB4MDAxMAorCSAgICAgIHR1bm5lbC1pZCAweDUzNzIsIGV4dGVuZGVkIHR1bm5lbC1pZCAxMi40LjQuNAorSVAgKHRvcyAweGMwLCB0dGwgNjIsIGlkIDUwNjM4LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDYwKQorICAgIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDUyOTogCisJTFNQLVBJTkd2MSwgbXNnLXR5cGU6IE1QTFMgRWNobyBSZXBseSAoMiksIGxlbmd0aDogMzIKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBSZXBseWluZyByb3V0ZXIgaXMgYW4gZWdyZXNzIGZvciB0aGUgRkVDIGF0IHN0YWNrIGRlcHRoIDAgKDMpCisJICBSZXR1cm4gU3ViY29kZTogKDApCisJICBTZW5kZXIgSGFuZGxlOiAweDAwMDAwMDAwLCBTZXF1ZW5jZTogNAorCSAgU2VuZGVyIFRpbWVzdGFtcDogUmVjZWl2ZXIgVGltZXN0YW1wOiAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkKKwlJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0MDI3OCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA4OCkKKyAgICAxMi40LjQuNC40NTI5ID4gMTI3LjAuMC4xLjM1MDM6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDUKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDY0MSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVwbHkgKDIpLCBsZW5ndGg6IDMyCisJICByZXBseS1tb2RlOiBSZXBseSB2aWEgYW4gSVB2NC9JUHY2IFVEUCBwYWNrZXQgKDIpCisJICBSZXR1cm4gQ29kZTogUmVwbHlpbmcgcm91dGVyIGlzIGFuIGVncmVzcyBmb3IgdGhlIEZFQyBhdCBzdGFjayBkZXB0aCAwICgzKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDUKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogCmRpZmYgLS1naXQgYS90ZXN0cy9sc3BwaW5nLWZlYy1yc3ZwLXZ2Lm91dCBiL3Rlc3RzL2xzcHBpbmctZmVjLXJzdnAtdnYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM5MWRjNWEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9sc3BwaW5nLWZlYy1yc3ZwLXZ2Lm91dApAQCAtMCwwICsxLDEyNSBAQAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjY5LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDEKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMDAwMCA1MzcyIDBjMDQgMDQwNCAwYzA0IDA0MDQKKwkgICAgICAweDAwMTA6ICAwMDAwIDAwMTAKKwkgICAgMHgwMDAwOiAgMDAwMyAwMDE0IDBjMDEgMDEwMSAwMDAwIDUzNzIgMGMwNCAwNDA0CisJICAgIDB4MDAxMDogIDBjMDQgMDQwNCAwMDAwIDAwMTAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDYzNCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAxCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjcxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDIKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMDAwMCA1MzcyIDBjMDQgMDQwNCAwYzA0IDA0MDQKKwkgICAgICAweDAwMTA6ICAwMDAwIDAwMTAKKwkgICAgMHgwMDAwOiAgMDAwMyAwMDE0IDBjMDEgMDEwMSAwMDAwIDUzNzIgMGMwNCAwNDA0CisJICAgIDB4MDAxMDogIDBjMDQgMDQwNCAwMDAwIDAwMTAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDYzNSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAyCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjczLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDMKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMDAwMCA1MzcyIDBjMDQgMDQwNCAwYzA0IDA0MDQKKwkgICAgICAweDAwMTA6ICAwMDAwIDAwMTAKKwkgICAgMHgwMDAwOiAgMDAwMyAwMDE0IDBjMDEgMDEwMSAwMDAwIDUzNzIgMGMwNCAwNDA0CisJICAgIDB4MDAxMDogIDBjMDQgMDQwNCAwMDAwIDAwMTAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDYzNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiAzCisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjc1LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDQKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMDAwMCA1MzcyIDBjMDQgMDQwNCAwYzA0IDA0MDQKKwkgICAgICAweDAwMTA6ICAwMDAwIDAwMTAKKwkgICAgMHgwMDAwOiAgMDAwMyAwMDE0IDBjMDEgMDEwMSAwMDAwIDUzNzIgMGMwNCAwNDA0CisJICAgIDB4MDAxMDogIDBjMDQgMDQwNCAwMDAwIDAwMTAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDYzOCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiA0CisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KQorCUlQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDQwMjc4LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDg4KQorICAgIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogW3VkcCBzdW0gb2tdIAorCUxTUC1QSU5HdjEsIG1zZy10eXBlOiBNUExTIEVjaG8gUmVxdWVzdCAoMSksIGxlbmd0aDogNjAKKwkgIHJlcGx5LW1vZGU6IFJlcGx5IHZpYSBhbiBJUHY0L0lQdjYgVURQIHBhY2tldCAoMikKKwkgIFJldHVybiBDb2RlOiBObyByZXR1cm4gY29kZSBvciByZXR1cm4gY29kZSBjb250YWluZWQgaW4gdGhlIEVycm9yIENvZGUgVExWICgwKQorCSAgUmV0dXJuIFN1YmNvZGU6ICgwKQorCSAgU2VuZGVyIEhhbmRsZTogMHgwMDAwMDAwMCwgU2VxdWVuY2U6IDUKKwkgIFNlbmRlciBUaW1lc3RhbXA6IFJlY2VpdmVyIFRpbWVzdGFtcDogbm8gdGltZXN0YW1wCisJICBUYXJnZXQgRkVDIFN0YWNrIFRMViAoMSksIGxlbmd0aDogMjQKKwkgICAgUlNWUCBJUHY0IFNlc3Npb24gUXVlcnkgc3ViVExWICgzKSwgbGVuZ3RoOiAyMAorCSAgICAgIHR1bm5lbCBlbmQtcG9pbnQgMTIuMS4xLjEsIHR1bm5lbCBzZW5kZXIgMTIuNC40LjQsIGxzcC1pZCAweDAwMTAKKwkgICAgICB0dW5uZWwtaWQgMHg1MzcyLCBleHRlbmRlZCB0dW5uZWwtaWQgMTIuNC40LjQKKwkgICAgICAweDAwMDA6ICAwYzAxIDAxMDEgMDAwMCA1MzcyIDBjMDQgMDQwNCAwYzA0IDA0MDQKKwkgICAgICAweDAwMTA6ICAwMDAwIDAwMTAKKwkgICAgMHgwMDAwOiAgMDAwMyAwMDE0IDBjMDEgMDEwMSAwMDAwIDUzNzIgMGMwNCAwNDA0CisJICAgIDB4MDAxMDogIDBjMDQgMDQwNCAwMDAwIDAwMTAKK0lQICh0b3MgMHhjMCwgdHRsIDYyLCBpZCA1MDY0MSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA2MCkKKyAgICAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IFt1ZHAgc3VtIG9rXSAKKwlMU1AtUElOR3YxLCBtc2ctdHlwZTogTVBMUyBFY2hvIFJlcGx5ICgyKSwgbGVuZ3RoOiAzMgorCSAgcmVwbHktbW9kZTogUmVwbHkgdmlhIGFuIElQdjQvSVB2NiBVRFAgcGFja2V0ICgyKQorCSAgUmV0dXJuIENvZGU6IFJlcGx5aW5nIHJvdXRlciBpcyBhbiBlZ3Jlc3MgZm9yIHRoZSBGRUMgYXQgc3RhY2sgZGVwdGggMCAoMykKKwkgIFJldHVybiBTdWJjb2RlOiAoMCkKKwkgIFNlbmRlciBIYW5kbGU6IDB4MDAwMDAwMDAsIFNlcXVlbmNlOiA1CisJICBTZW5kZXIgVGltZXN0YW1wOiBSZWNlaXZlciBUaW1lc3RhbXA6IApkaWZmIC0tZ2l0IGEvdGVzdHMvbHNwcGluZy1mZWMtcnN2cC5vdXQgYi90ZXN0cy9sc3BwaW5nLWZlYy1yc3ZwLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43MDEzZmFlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbHNwcGluZy1mZWMtcnN2cC5vdXQKQEAgLTAsMCArMSwxMCBAQAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KSBJUCAxMi40LjQuNC40NTI5ID4gMTI3LjAuMC4xLjM1MDM6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXF1ZXN0LCBzZXEgMSwgbGVuZ3RoOiA2MAorSVAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40NTI5OiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVwbHksIHNlcSAxLCBsZW5ndGg6IDMyCitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCA3LCBbU10sIHR0bCAyNTUpIElQIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcXVlc3QsIHNlcSAyLCBsZW5ndGg6IDYwCitJUCAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXBseSwgc2VxIDIsIGxlbmd0aDogMzIKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDcsIFtTXSwgdHRsIDI1NSkgSVAgMTIuNC40LjQuNDUyOSA+IDEyNy4wLjAuMS4zNTAzOiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVxdWVzdCwgc2VxIDMsIGxlbmd0aDogNjAKK0lQIDEwLjIwLjAuMS4zNTAzID4gMTIuNC40LjQuNDUyOTogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcGx5LCBzZXEgMywgbGVuZ3RoOiAzMgorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgNywgW1NdLCB0dGwgMjU1KSBJUCAxMi40LjQuNC40NTI5ID4gMTI3LjAuMC4xLjM1MDM6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXF1ZXN0LCBzZXEgNCwgbGVuZ3RoOiA2MAorSVAgMTAuMjAuMC4xLjM1MDMgPiAxMi40LjQuNC40NTI5OiBMU1AtUElOR3YxLCBNUExTIEVjaG8gUmVwbHksIHNlcSA0LCBsZW5ndGg6IDMyCitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCA3LCBbU10sIHR0bCAyNTUpIElQIDEyLjQuNC40LjQ1MjkgPiAxMjcuMC4wLjEuMzUwMzogTFNQLVBJTkd2MSwgTVBMUyBFY2hvIFJlcXVlc3QsIHNlcSA1LCBsZW5ndGg6IDYwCitJUCAxMC4yMC4wLjEuMzUwMyA+IDEyLjQuNC40LjQ1Mjk6IExTUC1QSU5HdjEsIE1QTFMgRWNobyBSZXBseSwgc2VxIDUsIGxlbmd0aDogMzIKZGlmZiAtLWdpdCBhL3Rlc3RzL21lZHNhLWUub3V0IGIvdGVzdHMvbWVkc2EtZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY1YmUwZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21lZHNhLWUub3V0CkBAIC0wLDAgKzEsMjAgQEAKKzI2OmExOmZiOjkyOmRhOjczID4gMDE6ODA6YzI6MDA6MDA6MDAsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDY4OiBUb19DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMjowLCBCRFBVLCBwcmkgNzogTExDLCBkc2FwIFNUUCAoMHg0MikgSW5kaXZpZHVhbCwgc3NhcCBTVFAgKDB4NDIpIENvbW1hbmQsIGN0cmwgMHgwMzogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworOTQ6MTA6M2U6ODA6YmM6ZjMgPiAwMDoyMjowMjowMDoxODo0NCwgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggOTg6IEZyb21fQ1BVLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjM6MCwgcHJpIDA6IGV0aGVydHlwZSBJUHY0ICgweDA4MDApIDEwLjAuMC4xMi41OTQ4MyA+IDE5OC4xMTAuNDguMTIuMTIzOiBOVFB2NCwgQ2xpZW50LCBsZW5ndGggNDgKKzAwOjIyOjAyOjAwOjE4OjQ0ID4gOTQ6MTA6M2U6ODA6YmM6ZjMsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDk4OiBGb3J3YXJkLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjM6MCwgcHJpIDA6IGV0aGVydHlwZSBJUHY0ICgweDA4MDApIDE5OC4xMTAuNDguMTIuMTIzID4gMTAuMC4wLjEyLjU5NDgzOiBOVFB2NCwgU2VydmVyLCBsZW5ndGggNDgKKzI2OmExOmZiOjkyOmRhOjczID4gMDE6ODA6YzI6MDA6MDA6MDAsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDY4OiBUb19DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMjowLCBCRFBVLCBwcmkgNzogTExDLCBkc2FwIFNUUCAoMHg0MikgSW5kaXZpZHVhbCwgc3NhcCBTVFAgKDB4NDIpIENvbW1hbmQsIGN0cmwgMHgwMzogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworMjY6YTE6ZmI6OTI6ZGE6NzMgPiAwMTo4MDpjMjowMDowMDowMCwgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggNjg6IFRvX0NQVSwgdW50YWdnZWQsIGRldi5wb3J0OnZsYW4gMC4yOjAsIEJEUFUsIHByaSA3OiBMTEMsIGRzYXAgU1RQICgweDQyKSBJbmRpdmlkdWFsLCBzc2FwIFNUUCAoMHg0MikgQ29tbWFuZCwgY3RybCAweDAzOiBTVFAgODAyLjFkLCBDb25maWcsIEZsYWdzIFtub25lXSwgYnJpZGdlLWlkIDgwMDAuMjY6YTE6ZmI6OTI6ZGE6NzMuODAwMSwgbGVuZ3RoIDQzCis5NDoxMDozZTo4MDpiYzpmMyA+IDAwOjIyOjAyOjAwOjE4OjQ0LCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA5ODogRnJvbV9DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMzowLCBwcmkgMDogZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCkgMTAuMC4wLjEyLjU5ODA5ID4gNjYuMjI4LjQyLjU5LjEyMzogTlRQdjQsIENsaWVudCwgbGVuZ3RoIDQ4Cis5NDoxMDozZTo4MDpiYzpmMyA+IDAwOjIyOjAyOjAwOjE4OjQ0LCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA5ODogRnJvbV9DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMzowLCBwcmkgMDogZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCkgMTAuMC4wLjEyLjU4ODgwID4gMTk5LjEwMi40Ni43Ni4xMjM6IE5UUHY0LCBDbGllbnQsIGxlbmd0aCA0OAorMDA6MjI6MDI6MDA6MTg6NDQgPiA5NDoxMDozZTo4MDpiYzpmMywgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggOTg6IEZvcndhcmQsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMzowLCBwcmkgMDogZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCkgMTk5LjEwMi40Ni43Ni4xMjMgPiAxMC4wLjAuMTIuNTg4ODA6IE5UUHY0LCBTZXJ2ZXIsIGxlbmd0aCA0OAorMDA6MjI6MDI6MDA6MTg6NDQgPiA5NDoxMDozZTo4MDpiYzpmMywgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggOTg6IEZvcndhcmQsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMzowLCBwcmkgMDogZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCkgNjYuMjI4LjQyLjU5LjEyMyA+IDEwLjAuMC4xMi41OTgwOTogTlRQdjQsIFNlcnZlciwgbGVuZ3RoIDQ4CisyNjphMTpmYjo5MjpkYTo3MyA+IDAxOjgwOmMyOjAwOjAwOjAwLCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA2ODogVG9fQ1BVLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjI6MCwgQkRQVSwgcHJpIDc6IExMQywgZHNhcCBTVFAgKDB4NDIpIEluZGl2aWR1YWwsIHNzYXAgU1RQICgweDQyKSBDb21tYW5kLCBjdHJsIDB4MDM6IFNUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW25vbmVdLCBicmlkZ2UtaWQgODAwMC4yNjphMTpmYjo5MjpkYTo3My44MDAxLCBsZW5ndGggNDMKKzk0OjEwOjNlOjgwOmJjOmYzID4gMDA6MjI6MDI6MDA6MTg6NDQsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDk4OiBGcm9tX0NQVSwgdW50YWdnZWQsIGRldi5wb3J0OnZsYW4gMC4zOjAsIHByaSAwOiBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSAxMC4wLjAuMTIuNDEwNjggPiAyMDguOTcuMTQwLjY5LjEyMzogTlRQdjQsIENsaWVudCwgbGVuZ3RoIDQ4CiswMDoyMjowMjowMDoxODo0NCA+IDk0OjEwOjNlOjgwOmJjOmYzLCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA5ODogRm9yd2FyZCwgdW50YWdnZWQsIGRldi5wb3J0OnZsYW4gMC4zOjAsIHByaSAwOiBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSAyMDguOTcuMTQwLjY5LjEyMyA+IDEwLjAuMC4xMi40MTA2ODogTlRQdjQsIFNlcnZlciwgbGVuZ3RoIDQ4CisyNjphMTpmYjo5MjpkYTo3MyA+IDAxOjgwOmMyOjAwOjAwOjAwLCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA2ODogVG9fQ1BVLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjI6MCwgQkRQVSwgcHJpIDc6IExMQywgZHNhcCBTVFAgKDB4NDIpIEluZGl2aWR1YWwsIHNzYXAgU1RQICgweDQyKSBDb21tYW5kLCBjdHJsIDB4MDM6IFNUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW25vbmVdLCBicmlkZ2UtaWQgODAwMC4yNjphMTpmYjo5MjpkYTo3My44MDAxLCBsZW5ndGggNDMKKzI2OmExOmZiOjkyOmRhOjczID4gMDE6ODA6YzI6MDA6MDA6MDAsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDY4OiBUb19DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMjowLCBCRFBVLCBwcmkgNzogTExDLCBkc2FwIFNUUCAoMHg0MikgSW5kaXZpZHVhbCwgc3NhcCBTVFAgKDB4NDIpIENvbW1hbmQsIGN0cmwgMHgwMzogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworOTQ6MTA6M2U6ODA6YmM6ZjMgPiAwMDoyMjowMjowMDoxODo0NCwgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggMzUwOiBGcm9tX0NQVSwgdW50YWdnZWQsIGRldi5wb3J0OnZsYW4gMC4zOjAsIHByaSAwOiBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSAxMC4wLjAuMTIuNjggPiAxMC4wLjAuMS42NzogQk9PVFAvREhDUCwgUmVxdWVzdCBmcm9tIDk0OjEwOjNlOjgwOmJjOmYzLCBsZW5ndGggMzAwCiswMDoyMjowMjowMDoxODo0NCA+IDk0OjEwOjNlOjgwOmJjOmYzLCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCAzNTA6IEZvcndhcmQsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMzowLCBwcmkgMDogZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCkgMTAuMC4wLjEuNjcgPiAxMC4wLjAuMTIuNjg6IEJPT1RQL0RIQ1AsIFJlcGx5LCBsZW5ndGggMzAwCisyNjphMTpmYjo5MjpkYTo3MyA+IDAxOjgwOmMyOjAwOjAwOjAwLCBldGhlcnR5cGUgTUVEU0EgKDB4ZGFkYSksIGxlbmd0aCA2ODogVG9fQ1BVLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjI6MCwgQkRQVSwgcHJpIDc6IExMQywgZHNhcCBTVFAgKDB4NDIpIEluZGl2aWR1YWwsIHNzYXAgU1RQICgweDQyKSBDb21tYW5kLCBjdHJsIDB4MDM6IFNUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW25vbmVdLCBicmlkZ2UtaWQgODAwMC4yNjphMTpmYjo5MjpkYTo3My44MDAxLCBsZW5ndGggNDMKKzI2OmExOmZiOjkyOmRhOjczID4gMDE6ODA6YzI6MDA6MDA6MDAsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDY4OiBUb19DUFUsIHVudGFnZ2VkLCBkZXYucG9ydDp2bGFuIDAuMjowLCBCRFBVLCBwcmkgNzogTExDLCBkc2FwIFNUUCAoMHg0MikgSW5kaXZpZHVhbCwgc3NhcCBTVFAgKDB4NDIpIENvbW1hbmQsIGN0cmwgMHgwMzogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworOTQ6MTA6M2U6ODA6YmM6ZjMgPiAwMDoyMjowMjowMDoxODo0NCwgZXRoZXJ0eXBlIE1FRFNBICgweGRhZGEpLCBsZW5ndGggOTg6IEZyb21fQ1BVLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjM6MCwgcHJpIDA6IGV0aGVydHlwZSBJUHY0ICgweDA4MDApIDEwLjAuMC4xMi40NTY1MSA+IDE3MS42Ni45Ny4xMjYuMTIzOiBOVFB2NCwgQ2xpZW50LCBsZW5ndGggNDgKKzAwOjIyOjAyOjAwOjE4OjQ0ID4gOTQ6MTA6M2U6ODA6YmM6ZjMsIGV0aGVydHlwZSBNRURTQSAoMHhkYWRhKSwgbGVuZ3RoIDk4OiBGb3J3YXJkLCB1bnRhZ2dlZCwgZGV2LnBvcnQ6dmxhbiAwLjM6MCwgcHJpIDA6IGV0aGVydHlwZSBJUHY0ICgweDA4MDApIDE3MS42Ni45Ny4xMjYuMTIzID4gMTAuMC4wLjEyLjQ1NjUxOiBOVFB2NCwgU2VydmVyLCBsZW5ndGggNDgKZGlmZiAtLWdpdCBhL3Rlc3RzL21lZHNhLm91dCBiL3Rlc3RzL21lZHNhLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODFjZTQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbWVkc2Eub3V0CkBAIC0wLDAgKzEsMjAgQEAKK01FRFNBIDAuMjowOiBTVFAgODAyLjFkLCBDb25maWcsIEZsYWdzIFtub25lXSwgYnJpZGdlLWlkIDgwMDAuMjY6YTE6ZmI6OTI6ZGE6NzMuODAwMSwgbGVuZ3RoIDQzCitNRURTQSAwLjM6MDogSVAgMTAuMC4wLjEyLjU5NDgzID4gMTk4LjExMC40OC4xMi4xMjM6IE5UUHY0LCBDbGllbnQsIGxlbmd0aCA0OAorTUVEU0EgMC4zOjA6IElQIDE5OC4xMTAuNDguMTIuMTIzID4gMTAuMC4wLjEyLjU5NDgzOiBOVFB2NCwgU2VydmVyLCBsZW5ndGggNDgKK01FRFNBIDAuMjowOiBTVFAgODAyLjFkLCBDb25maWcsIEZsYWdzIFtub25lXSwgYnJpZGdlLWlkIDgwMDAuMjY6YTE6ZmI6OTI6ZGE6NzMuODAwMSwgbGVuZ3RoIDQzCitNRURTQSAwLjI6MDogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworTUVEU0EgMC4zOjA6IElQIDEwLjAuMC4xMi41OTgwOSA+IDY2LjIyOC40Mi41OS4xMjM6IE5UUHY0LCBDbGllbnQsIGxlbmd0aCA0OAorTUVEU0EgMC4zOjA6IElQIDEwLjAuMC4xMi41ODg4MCA+IDE5OS4xMDIuNDYuNzYuMTIzOiBOVFB2NCwgQ2xpZW50LCBsZW5ndGggNDgKK01FRFNBIDAuMzowOiBJUCAxOTkuMTAyLjQ2Ljc2LjEyMyA+IDEwLjAuMC4xMi41ODg4MDogTlRQdjQsIFNlcnZlciwgbGVuZ3RoIDQ4CitNRURTQSAwLjM6MDogSVAgNjYuMjI4LjQyLjU5LjEyMyA+IDEwLjAuMC4xMi41OTgwOTogTlRQdjQsIFNlcnZlciwgbGVuZ3RoIDQ4CitNRURTQSAwLjI6MDogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworTUVEU0EgMC4zOjA6IElQIDEwLjAuMC4xMi40MTA2OCA+IDIwOC45Ny4xNDAuNjkuMTIzOiBOVFB2NCwgQ2xpZW50LCBsZW5ndGggNDgKK01FRFNBIDAuMzowOiBJUCAyMDguOTcuMTQwLjY5LjEyMyA+IDEwLjAuMC4xMi40MTA2ODogTlRQdjQsIFNlcnZlciwgbGVuZ3RoIDQ4CitNRURTQSAwLjI6MDogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworTUVEU0EgMC4yOjA6IFNUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW25vbmVdLCBicmlkZ2UtaWQgODAwMC4yNjphMTpmYjo5MjpkYTo3My44MDAxLCBsZW5ndGggNDMKK01FRFNBIDAuMzowOiBJUCAxMC4wLjAuMTIuNjggPiAxMC4wLjAuMS42NzogQk9PVFAvREhDUCwgUmVxdWVzdCBmcm9tIDk0OjEwOjNlOjgwOmJjOmYzLCBsZW5ndGggMzAwCitNRURTQSAwLjM6MDogSVAgMTAuMC4wLjEuNjcgPiAxMC4wLjAuMTIuNjg6IEJPT1RQL0RIQ1AsIFJlcGx5LCBsZW5ndGggMzAwCitNRURTQSAwLjI6MDogU1RQIDgwMi4xZCwgQ29uZmlnLCBGbGFncyBbbm9uZV0sIGJyaWRnZS1pZCA4MDAwLjI2OmExOmZiOjkyOmRhOjczLjgwMDEsIGxlbmd0aCA0MworTUVEU0EgMC4yOjA6IFNUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW25vbmVdLCBicmlkZ2UtaWQgODAwMC4yNjphMTpmYjo5MjpkYTo3My44MDAxLCBsZW5ndGggNDMKK01FRFNBIDAuMzowOiBJUCAxMC4wLjAuMTIuNDU2NTEgPiAxNzEuNjYuOTcuMTI2LjEyMzogTlRQdjQsIENsaWVudCwgbGVuZ3RoIDQ4CitNRURTQSAwLjM6MDogSVAgMTcxLjY2Ljk3LjEyNi4xMjMgPiAxMC4wLjAuMTIuNDU2NTE6IE5UUHY0LCBTZXJ2ZXIsIGxlbmd0aCA0OApkaWZmIC0tZ2l0IGEvdGVzdHMvbWVkc2EucGNhcCBiL3Rlc3RzL21lZHNhLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWIyMDcxMAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL21lZHNhLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvbXBscy1sYWJlbC1oZWFwb3ZlcmZsb3cub3V0IGIvdGVzdHMvbXBscy1sYWJlbC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE0MTljYWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tcGxzLWxhYmVsLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSwyIEBACitNUExTIChsYWJlbCAxOTczNzksIGV4cCAwLCB0dGwgNDgpCisJKGxhYmVsIDE5NzM4NywgZXhwIDUsIFtTXSwgdHRsIDQ4KVt8TVBMU10KZGlmZiAtLWdpdCBhL3Rlc3RzL21wbHMtbGFiZWwtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9tcGxzLWxhYmVsLWhlYXBvdmVyZmxvdy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjNiNDUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tcGxzLWxhYmVsLWhlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL21wbHMtdHJhY2Vyb3V0ZS12Lm91dCBiL3Rlc3RzL21wbHMtdHJhY2Vyb3V0ZS12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzBjMmUzCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbXBscy10cmFjZXJvdXRlLXYub3V0CkBAIC0wLDAgKzEsODEgQEAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEpCisJSVAgKHRvcyAweDAsIHR0bCAxLCBpZCA0MjMxNiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM1OiBVRFAsIGxlbmd0aCAxMgorSVAgKHRvcyAweDAsIHR0bCAyNTUsIGlkIDUwMTQsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBJQ01QICgxKSwgbGVuZ3RoIDE2OCkKKyAgICAxMC41LjAuMSA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorCUlQICh0b3MgMHgwLCB0dGwgMSwgaWQgNDIzMTYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzNTogVURQLCBsZW5ndGggMTIKKwlNUExTIGV4dGVuc2lvbiB2MiwgY2hlY2tzdW0gMHhjNTVmIChjb3JyZWN0KSwgbGVuZ3RoIDEyCisJICBNUExTIFN0YWNrIEVudHJ5IE9iamVjdCAoMSksIENsYXNzLVR5cGU6IDEsIGxlbmd0aCA4CisJICAgIGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEpCisJSVAgKHRvcyAweDAsIHR0bCAxLCBpZCA0MjMxNywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM2OiBVRFAsIGxlbmd0aCAxMgorSVAgKHRvcyAweDAsIHR0bCAyNTUsIGlkIDUwMTUsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBJQ01QICgxKSwgbGVuZ3RoIDE2OCkKKyAgICAxMC41LjAuMSA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorCUlQICh0b3MgMHgwLCB0dGwgMSwgaWQgNDIzMTcsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzNjogVURQLCBsZW5ndGggMTIKKwlNUExTIGV4dGVuc2lvbiB2MiwgY2hlY2tzdW0gMHhjNTVmIChjb3JyZWN0KSwgbGVuZ3RoIDEyCisJICBNUExTIFN0YWNrIEVudHJ5IE9iamVjdCAoMSksIENsYXNzLVR5cGU6IDEsIGxlbmd0aCA4CisJICAgIGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEpCisJSVAgKHRvcyAweDAsIHR0bCAxLCBpZCA0MjMxOCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM3OiBVRFAsIGxlbmd0aCAxMgorSVAgKHRvcyAweDAsIHR0bCAyNTUsIGlkIDUwMTYsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBJQ01QICgxKSwgbGVuZ3RoIDE2OCkKKyAgICAxMC41LjAuMSA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorCUlQICh0b3MgMHgwLCB0dGwgMSwgaWQgNDIzMTgsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzNzogVURQLCBsZW5ndGggMTIKKwlNUExTIGV4dGVuc2lvbiB2MiwgY2hlY2tzdW0gMHhjNTVmIChjb3JyZWN0KSwgbGVuZ3RoIDEyCisJICBNUExTIFN0YWNrIEVudHJ5IE9iamVjdCAoMSksIENsYXNzLVR5cGU6IDEsIGxlbmd0aCA4CisJICAgIGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDIpCisJSVAgKHRvcyAweDAsIHR0bCAyLCBpZCA0MjMxOSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM4OiBVRFAsIGxlbmd0aCAxMgorSVAgKHRvcyAweDAsIHR0bCAyNTQsIGlkIDU5MTY2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gSUNNUCAoMSksIGxlbmd0aCAxNjgpCisgICAgMTAuNC4wLjIgPiAxMi40LjQuNDogSUNNUCB0aW1lIGV4Y2VlZGVkIGluLXRyYW5zaXQsIGxlbmd0aCAxNDgKKwlJUCAodG9zIDB4MCwgdHRsIDEsIGlkIDQyMzE5LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDQwKQorICAgIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0Mzg6IFVEUCwgbGVuZ3RoIDEyCisJTVBMUyBleHRlbnNpb24gdjIsIGNoZWNrc3VtIDB4YzRlNCAoY29ycmVjdCksIGxlbmd0aCAxMgorCSAgTVBMUyBTdGFjayBFbnRyeSBPYmplY3QgKDEpLCBDbGFzcy1UeXBlOiAxLCBsZW5ndGggOAorCSAgICBsYWJlbCAxMDI2NzIsIGV4cCAwLCBbU10sIHR0bCAxCitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCAwLCBbU10sIHR0bCAyKQorCUlQICh0b3MgMHgwLCB0dGwgMiwgaWQgNDIzMjAsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzOTogVURQLCBsZW5ndGggMTIKK0lQICh0b3MgMHgwLCB0dGwgMjU0LCBpZCA1OTE2Nywgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIElDTVAgKDEpLCBsZW5ndGggMTY4KQorICAgIDEwLjQuMC4yID4gMTIuNC40LjQ6IElDTVAgdGltZSBleGNlZWRlZCBpbi10cmFuc2l0LCBsZW5ndGggMTQ4CisJSVAgKHRvcyAweDAsIHR0bCAxLCBpZCA0MjMyMCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM5OiBVRFAsIGxlbmd0aCAxMgorCU1QTFMgZXh0ZW5zaW9uIHYyLCBjaGVja3N1bSAweGM0ZTQgKGNvcnJlY3QpLCBsZW5ndGggMTIKKwkgIE1QTFMgU3RhY2sgRW50cnkgT2JqZWN0ICgxKSwgQ2xhc3MtVHlwZTogMSwgbGVuZ3RoIDgKKwkgICAgbGFiZWwgMTAyNjcyLCBleHAgMCwgW1NdLCB0dGwgMQorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgMCwgW1NdLCB0dGwgMikKKwlJUCAodG9zIDB4MCwgdHRsIDIsIGlkIDQyMzIxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDQwKQorICAgIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDA6IFVEUCwgbGVuZ3RoIDEyCitJUCAodG9zIDB4MCwgdHRsIDI1NCwgaWQgNTkxNjgsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBJQ01QICgxKSwgbGVuZ3RoIDE2OCkKKyAgICAxMC40LjAuMiA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorCUlQICh0b3MgMHgwLCB0dGwgMSwgaWQgNDIzMjEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQ0MDogVURQLCBsZW5ndGggMTIKKwlNUExTIGV4dGVuc2lvbiB2MiwgY2hlY2tzdW0gMHhjNGU0IChjb3JyZWN0KSwgbGVuZ3RoIDEyCisJICBNUExTIFN0YWNrIEVudHJ5IE9iamVjdCAoMSksIENsYXNzLVR5cGU6IDEsIGxlbmd0aCA4CisJICAgIGxhYmVsIDEwMjY3MiwgZXhwIDAsIFtTXSwgdHRsIDEKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDMpCisJSVAgKHRvcyAweDAsIHR0bCAzLCBpZCA0MjMyMiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDQxOiBVRFAsIGxlbmd0aCAxMgorSVAgKHRvcyAweDAsIHR0bCAyNTMsIGlkIDUwNTk5LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gSUNNUCAoMSksIGxlbmd0aCA1NikKKyAgICAxMi4xLjEuMSA+IDEyLjQuNC40OiBJQ01QIDEyLjEuMS4xIHVkcCBwb3J0IDMzNDQxIHVucmVhY2hhYmxlLCBsZW5ndGggMzYKKwlJUCAodG9zIDB4MCwgdHRsIDEsIGlkIDQyMzIyLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDQwKQorICAgIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDE6IFVEUCwgbGVuZ3RoIDEyCitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCAwLCBbU10sIHR0bCAzKQorCUlQICh0b3MgMHgwLCB0dGwgMywgaWQgNDIzMjMsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQ0MjogVURQLCBsZW5ndGggMTIKK0lQICh0b3MgMHgwLCB0dGwgMjUzLCBpZCA1MDYwMCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIElDTVAgKDEpLCBsZW5ndGggNTYpCisgICAgMTIuMS4xLjEgPiAxMi40LjQuNDogSUNNUCAxMi4xLjEuMSB1ZHAgcG9ydCAzMzQ0MiB1bnJlYWNoYWJsZSwgbGVuZ3RoIDM2CisJSVAgKHRvcyAweDAsIHR0bCAxLCBpZCA0MjMyMywgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA0MCkKKyAgICAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDQyOiBVRFAsIGxlbmd0aCAxMgorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgMCwgW1NdLCB0dGwgMykKKwlJUCAodG9zIDB4MCwgdHRsIDMsIGlkIDQyMzI0LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDQwKQorICAgIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDM6IFVEUCwgbGVuZ3RoIDEyCitJUCAodG9zIDB4MCwgdHRsIDI1MywgaWQgNTA2MDEsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBJQ01QICgxKSwgbGVuZ3RoIDU2KQorICAgIDEyLjEuMS4xID4gMTIuNC40LjQ6IElDTVAgMTIuMS4xLjEgdWRwIHBvcnQgMzM0NDMgdW5yZWFjaGFibGUsIGxlbmd0aCAzNgorCUlQICh0b3MgMHgwLCB0dGwgMSwgaWQgNDIzMjQsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggNDApCisgICAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQ0MzogVURQLCBsZW5ndGggMTIKZGlmZiAtLWdpdCBhL3Rlc3RzL21wbHMtdHJhY2Vyb3V0ZS5vdXQgYi90ZXN0cy9tcGxzLXRyYWNlcm91dGUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZlOGMxMTYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9tcGxzLXRyYWNlcm91dGUub3V0CkBAIC0wLDAgKzEsMTggQEAKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDEpIElQIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0MzU6IFVEUCwgbGVuZ3RoIDEyCitJUCAxMC41LjAuMSA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgMCwgW1NdLCB0dGwgMSkgSVAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzNjogVURQLCBsZW5ndGggMTIKK0lQIDEwLjUuMC4xID4gMTIuNC40LjQ6IElDTVAgdGltZSBleGNlZWRlZCBpbi10cmFuc2l0LCBsZW5ndGggMTQ4CitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCAwLCBbU10sIHR0bCAxKSBJUCAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDM3OiBVRFAsIGxlbmd0aCAxMgorSVAgMTAuNS4wLjEgPiAxMi40LjQuNDogSUNNUCB0aW1lIGV4Y2VlZGVkIGluLXRyYW5zaXQsIGxlbmd0aCAxNDgKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDIpIElQIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0Mzg6IFVEUCwgbGVuZ3RoIDEyCitJUCAxMC40LjAuMiA+IDEyLjQuNC40OiBJQ01QIHRpbWUgZXhjZWVkZWQgaW4tdHJhbnNpdCwgbGVuZ3RoIDE0OAorTVBMUyAobGFiZWwgMTAwNzA0LCBleHAgMCwgW1NdLCB0dGwgMikgSVAgMTIuNC40LjQuNDIzMTUgPiAxMi4xLjEuMS4zMzQzOTogVURQLCBsZW5ndGggMTIKK0lQIDEwLjQuMC4yID4gMTIuNC40LjQ6IElDTVAgdGltZSBleGNlZWRlZCBpbi10cmFuc2l0LCBsZW5ndGggMTQ4CitNUExTIChsYWJlbCAxMDA3MDQsIGV4cCAwLCBbU10sIHR0bCAyKSBJUCAxMi40LjQuNC40MjMxNSA+IDEyLjEuMS4xLjMzNDQwOiBVRFAsIGxlbmd0aCAxMgorSVAgMTAuNC4wLjIgPiAxMi40LjQuNDogSUNNUCB0aW1lIGV4Y2VlZGVkIGluLXRyYW5zaXQsIGxlbmd0aCAxNDgKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDMpIElQIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDE6IFVEUCwgbGVuZ3RoIDEyCitJUCAxMi4xLjEuMSA+IDEyLjQuNC40OiBJQ01QIDEyLjEuMS4xIHVkcCBwb3J0IDMzNDQxIHVucmVhY2hhYmxlLCBsZW5ndGggMzYKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDMpIElQIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDI6IFVEUCwgbGVuZ3RoIDEyCitJUCAxMi4xLjEuMSA+IDEyLjQuNC40OiBJQ01QIDEyLjEuMS4xIHVkcCBwb3J0IDMzNDQyIHVucmVhY2hhYmxlLCBsZW5ndGggMzYKK01QTFMgKGxhYmVsIDEwMDcwNCwgZXhwIDAsIFtTXSwgdHRsIDMpIElQIDEyLjQuNC40LjQyMzE1ID4gMTIuMS4xLjEuMzM0NDM6IFVEUCwgbGVuZ3RoIDEyCitJUCAxMi4xLjEuMSA+IDEyLjQuNC40OiBJQ01QIDEyLjEuMS4xIHVkcCBwb3J0IDMzNDQzIHVucmVhY2hhYmxlLCBsZW5ndGggMzYKZGlmZiAtLWdpdCBhL3Rlc3RzL21zdHAtdi5vdXQgYi90ZXN0cy9tc3RwLXYub3V0CmluZGV4IDE2MTI3YjUuLjk5OGViZmEgMTAwNjQ0Ci0tLSBhL3Rlc3RzL21zdHAtdi5vdXQKKysrIGIvdGVzdHMvbXN0cC12Lm91dApAQCAtMSw5ICsxLDkgQEAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMTM0Ci0JcG9ydC1yb2xlIFJvb3QsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcG9ydC1pZCA4MDEyLCAKKwlwb3J0LXJvbGUgUm9vdCwgQ0lTVCByb290LWlkIDAwMDAuMDA6MWY6Mjc6YjQ6N2Q6ODAsIENJU1QgZXh0LXBhdGhjb3N0IDIwMDAwMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAxMiwKIAltZXNzYWdlLWFnZSAxLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCi0JdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwgCi0JCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAyMDAwMDAsIAorCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsCisJCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAyMDAwMDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wMDoxZTpmNzowNTphODo4MCwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogCU1TVEkgMSwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnQsIFRvcG9sb2d5IGNoYW5nZSBBQ0tdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgNjAwMS4wMDoxZTpmNzowNTphODo4MCwgcGF0aGNvc3QgMApAQCAtMTIsMTEgKzEyLDExIEBACiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDAyLjAwOjE2OjQ2OmI1OjhjOjgwLCBwYXRoY29zdCAyMDAwMDAKIAkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50XSwgbGVuZ3RoIDEzNAotCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAwZiwgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMGYsCiAJbWVzc2FnZS1hZ2UgMS4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsIAotCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwKKwkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogCU1TVEkgMSwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnQsIFRvcG9sb2d5IGNoYW5nZSBBQ0tdLCBwb3J0LXJvbGUgUm9vdAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgNjAwMS4wMDoxZTpmNzowNTphODo4MCwgcGF0aGNvc3QgMjAwMDAwCkBAIC0yNSwxMSArMjUsMTEgQEAKIAkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMDIuMDA6MTY6NDY6YjU6OGM6ODAsIHBhdGhjb3N0IDAKIAkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAxMzQKLQlwb3J0LXJvbGUgUm9vdCwgQ0lTVCByb290LWlkIDAwMDAuMDA6MWY6Mjc6YjQ6N2Q6ODAsIENJU1QgZXh0LXBhdGhjb3N0IDIwMDAwMCAKLQlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMTIsIAorCXBvcnQtcm9sZSBSb290LCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcG9ydC1pZCA4MDEyLAogCW1lc3NhZ2UtYWdlIDEuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKLQl2M2xlbiA5NiwgTUNJRCBOYW1lIEJyZXdlcnksIHJldiAwLCAKLQkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDIwMDAwMCwgCisJdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwKKwkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDIwMDAwMCwKIAlDSVNUIGJyaWRnZS1pZCA4MDAwLjAwOjFlOmY3OjA1OmE4OjgwLCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCiAJTVNUSSAxLCBGbGFncyBbTGVhcm4sIEZvcndhcmQsIEFncmVlbWVudCwgVG9wb2xvZ3kgY2hhbmdlIEFDS10sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA2MDAxLjAwOjFlOmY3OjA1OmE4OjgwLCBwYXRoY29zdCAwCkBAIC0zOCwxMSArMzgsMTEgQEAKIAkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMDIuMDA6MTY6NDY6YjU6OGM6ODAsIHBhdGhjb3N0IDIwMDAwMAogCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCiBTVFAgODAyLjFzLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnRdLCBsZW5ndGggMTM0Ci0JcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcG9ydC1pZCA4MDBmLCAKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDAwMDAuMDA6MWY6Mjc6YjQ6N2Q6ODAsIENJU1QgZXh0LXBhdGhjb3N0IDIwMDAwMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAwZiwKIAltZXNzYWdlLWFnZSAxLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCi0JdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwgCi0JCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLCAKKwl2M2xlbiA5NiwgTUNJRCBOYW1lIEJyZXdlcnksIHJldiAwLAorCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKIAlDSVNUIGJyaWRnZS1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCiAJTVNUSSAxLCBGbGFncyBbTGVhcm4sIEZvcndhcmQsIEFncmVlbWVudCwgVG9wb2xvZ3kgY2hhbmdlIEFDS10sIHBvcnQtcm9sZSBSb290CiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA2MDAxLjAwOjFlOmY3OjA1OmE4OjgwLCBwYXRoY29zdCAyMDAwMDAKQEAgLTUxLDExICs1MSwxMSBAQAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwMi4wMDoxNjo0NjpiNTo4Yzo4MCwgcGF0aGNvc3QgMAogCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCiBTVFAgODAyLjFzLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDEzNAotCXBvcnQtcm9sZSBSb290LCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAxMiwgCisJcG9ydC1yb2xlIFJvb3QsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMTIsCiAJbWVzc2FnZS1hZ2UgMS4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsIAotCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMjAwMDAwLCAKKwl2M2xlbiA5NiwgTUNJRCBOYW1lIEJyZXdlcnksIHJldiAwLAorCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMjAwMDAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDA6MWU6Zjc6MDU6YTg6ODAsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIAlNU1RJIDEsIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50LCBUb3BvbG9neSBjaGFuZ2UgQUNLXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKIAkJTVNUSSByZWdpb25hbC1yb290LWlkIDYwMDEuMDA6MWU6Zjc6MDU6YTg6ODAsIHBhdGhjb3N0IDAKQEAgLTY0LDExICs2NCwxMSBAQAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwMi4wMDoxNjo0NjpiNTo4Yzo4MCwgcGF0aGNvc3QgMjAwMDAwCiAJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmQsIEFncmVlbWVudF0sIGxlbmd0aCAxMzQKLQlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDAwMDAuMDA6MWY6Mjc6YjQ6N2Q6ODAsIENJU1QgZXh0LXBhdGhjb3N0IDIwMDAwMCAKLQlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMGYsIAorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcG9ydC1pZCA4MDBmLAogCW1lc3NhZ2UtYWdlIDEuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKLQl2M2xlbiA5NiwgTUNJRCBOYW1lIEJyZXdlcnksIHJldiAwLCAKLQkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsIAorCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsCisJCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIAlNU1RJIDEsIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50LCBUb3BvbG9neSBjaGFuZ2UgQUNLXSwgcG9ydC1yb2xlIFJvb3QKIAkJTVNUSSByZWdpb25hbC1yb290LWlkIDYwMDEuMDA6MWU6Zjc6MDU6YTg6ODAsIHBhdGhjb3N0IDIwMDAwMApAQCAtNzcsMTEgKzc3LDExIEBACiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDAyLjAwOjE2OjQ2OmI1OjhjOjgwLCBwYXRoY29zdCAwCiAJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKIFNUUCA4MDIuMXMsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMTM0Ci0JcG9ydC1yb2xlIFJvb3QsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAgCi0JQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuMDA6MTY6NDY6YjU6OGM6ODAsIENJU1QgcG9ydC1pZCA4MDEyLCAKKwlwb3J0LXJvbGUgUm9vdCwgQ0lTVCByb290LWlkIDAwMDAuMDA6MWY6Mjc6YjQ6N2Q6ODAsIENJU1QgZXh0LXBhdGhjb3N0IDIwMDAwMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAxMiwKIAltZXNzYWdlLWFnZSAxLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCi0JdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwgCi0JCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAyMDAwMDAsIAorCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsCisJCWRpZ2VzdCA5MzU3ZWJiN2E4ZDc0ZGQ1ZmVmNGYyYmFiNTA1MzFhYSwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAyMDAwMDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wMDoxZTpmNzowNTphODo4MCwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogCU1TVEkgMSwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnQsIFRvcG9sb2d5IGNoYW5nZSBBQ0tdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgNjAwMS4wMDoxZTpmNzowNTphODo4MCwgcGF0aGNvc3QgMApAQCAtOTAsMTEgKzkwLDExIEBACiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDAyLjAwOjE2OjQ2OmI1OjhjOjgwLCBwYXRoY29zdCAyMDAwMDAKIAkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50XSwgbGVuZ3RoIDEzNAotCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAwZiwgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMGYsCiAJbWVzc2FnZS1hZ2UgMS4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsIAotCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwKKwkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogCU1TVEkgMSwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnQsIFRvcG9sb2d5IGNoYW5nZSBBQ0tdLCBwb3J0LXJvbGUgUm9vdAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgNjAwMS4wMDoxZTpmNzowNTphODo4MCwgcGF0aGNvc3QgMjAwMDAwCkBAIC0xMDMsMTEgKzEwMywxMSBAQAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwMi4wMDoxNjo0NjpiNTo4Yzo4MCwgcGF0aGNvc3QgMAogCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCiBTVFAgODAyLjFzLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDEzNAotCXBvcnQtcm9sZSBSb290LCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAxMiwgCisJcG9ydC1yb2xlIFJvb3QsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMTIsCiAJbWVzc2FnZS1hZ2UgMS4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsIAotCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMjAwMDAwLCAKKwl2M2xlbiA5NiwgTUNJRCBOYW1lIEJyZXdlcnksIHJldiAwLAorCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMjAwMDAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDA6MWU6Zjc6MDU6YTg6ODAsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIAlNU1RJIDEsIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50LCBUb3BvbG9neSBjaGFuZ2UgQUNLXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKIAkJTVNUSSByZWdpb25hbC1yb290LWlkIDYwMDEuMDA6MWU6Zjc6MDU6YTg6ODAsIHBhdGhjb3N0IDAKQEAgLTExNiwxMSArMTE2LDExIEBACiAJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDAyLjAwOjE2OjQ2OmI1OjhjOjgwLCBwYXRoY29zdCAyMDAwMDAKIAkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAogU1RQIDgwMi4xcywgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50XSwgbGVuZ3RoIDEzNAotCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgMDAwMC4wMDoxZjoyNzpiNDo3ZDo4MCwgQ0lTVCBleHQtcGF0aGNvc3QgMjAwMDAwIAotCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjAwOjE2OjQ2OmI1OjhjOjgwLCBDSVNUIHBvcnQtaWQgODAwZiwgCisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCAwMDAwLjAwOjFmOjI3OmI0OjdkOjgwLCBDSVNUIGV4dC1wYXRoY29zdCAyMDAwMDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCBwb3J0LWlkIDgwMGYsCiAJbWVzc2FnZS1hZ2UgMS4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcwotCXYzbGVuIDk2LCBNQ0lEIE5hbWUgQnJld2VyeSwgcmV2IDAsIAotCQlkaWdlc3QgOTM1N2ViYjdhOGQ3NGRkNWZlZjRmMmJhYjUwNTMxYWEsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gOTYsIE1DSUQgTmFtZSBCcmV3ZXJ5LCByZXYgMCwKKwkJZGlnZXN0IDkzNTdlYmI3YThkNzRkZDVmZWY0ZjJiYWI1MDUzMWFhLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCiAJQ0lTVCBicmlkZ2UtaWQgODAwMC4wMDoxNjo0NjpiNTo4Yzo4MCwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAogCU1TVEkgMSwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkLCBBZ3JlZW1lbnQsIFRvcG9sb2d5IGNoYW5nZSBBQ0tdLCBwb3J0LXJvbGUgUm9vdAogCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgNjAwMS4wMDoxZTpmNzowNTphODo4MCwgcGF0aGNvc3QgMjAwMDAwCmRpZmYgLS1naXQgYS90ZXN0cy9uZmxvZy1lLnNoIGIvdGVzdHMvbmZsb2ctZS5zaAppbmRleCAwMGFjNGZkLi40NmI5OWVlIDEwMDc1NQotLS0gYS90ZXN0cy9uZmxvZy1lLnNoCisrKyBiL3Rlc3RzL25mbG9nLWUuc2gKQEAgLTYsNSArNiw1IEBACiB0aGVuCiAgIC4vVEVTVG9uY2UgbmZsb2ctZSBuZmxvZy5wY2FwIG5mbG9nLWUub3V0ICctdCAtZScKIGVsc2UKLQlwcmludGYgJyAgICAlLTMwczogVEVTVCBTS0lQUEVEIChjb21waWxlZCB3L28gTkZMT0cpXG4nICduZmxvZy1lJworCXByaW50ZiAnICAgICUtMzVzOiBURVNUIFNLSVBQRUQgKGNvbXBpbGVkIHcvbyBORkxPRylcbicgJ25mbG9nLWUnCiBmaQpkaWZmIC0tZ2l0IGEvdGVzdHMvbmZzLXNlZy1mYXVsdC0xLm91dCBiL3Rlc3RzL25mcy1zZWctZmF1bHQtMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGZmYzgwYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25mcy1zZWctZmF1bHQtMS5vdXQKQEAgLTAsMCArMSBAQAorSVAgMTAuMTMxLjEwMS42MC45MjMgPiAxMC4xMzEuMTAxLjExOC4yMDQ5OiBGbGFncyBbLl0sIHNlcSAxMTkyNTA4NzcxOjExOTI1MTY3MzEsIGFjayAzNTMyMjc0NTAyLCB3aW4gMzgxOSwgbGVuZ3RoIDc5NjA6IE5GUyByZXF1ZXN0IHhpZCAxMjYwODk3NzM3IDc5NTYgd3JpdGUgZmggVW5rbm93bi9BQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIDI4NjMzMTE1MzAgKDI4NjMzMTE1MzApIGJ5dGVzIEAgMTIyOTc4MjkzODI0NzMwMzQ0MTAKZGlmZiAtLWdpdCBhL3Rlc3RzL25mcy1zZWctZmF1bHQtMS5wY2FwIGIvdGVzdHMvbmZzLXNlZy1mYXVsdC0xLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWMyZDhlZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25mcy1zZWctZmF1bHQtMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS12Lm91dCBiL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mOGRiMzMyCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLXYub3V0CkBAIC0wLDAgKzEsNSBAQAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMTY0MTksIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDkyKQorICAgIDEyNy4wLjAuMS40NzkwID4gMTI3LjAuMC4xLjQ3OTA6IFZYTEFOLUdQRSwgZmxhZ3MgW0lQXSwgdm5pIDE2Nzc3MjE1CisgICAgTlNILCBmbGFncyBbT0NdLCBzZXJ2aWNlLXBhdGgtaWQgMHhmZmZmZmYsIHNlcnZpY2UtaW5kZXggMHhmZgorICAgIElQICh0b3MgMHgwLCB0dGwgMjU1LCBpZCA1NDMyMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAzMikKKyAgICAxOTIuMTY4LjAuMS4xMDAwMCA+IDE5Mi4xNjguMC4yLjIwMDAwOiBVRFAsIGxlbmd0aCA0CmRpZmYgLS1naXQgYS90ZXN0cy9uc2gtb3Zlci12eGxhbi1ncGUtdnYub3V0IGIvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLXZ2Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MjMzNzAxCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLXZ2Lm91dApAQCAtMCwwICsxLDUgQEAKK0lQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDE2NDE5LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA5MikKKyAgICAxMjcuMC4wLjEuNDc5MCA+IDEyNy4wLjAuMS40NzkwOiBbdWRwIHN1bSBva10gVlhMQU4tR1BFLCBmbGFncyBbSVBdLCB2bmkgMTY3NzcyMTUKKyAgICBOU0gsIHZlciAwLCBmbGFncyBbT0NdLCBuZXh0LXByb3RvY29sIDB4MSwgc2VydmljZS1wYXRoLWlkIDB4ZmZmZmZmLCBzZXJ2aWNlLWluZGV4IDB4ZmYKKyAgICBJUCAodG9zIDB4MCwgdHRsIDI1NSwgaWQgNTQzMjEsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMzIpCisgICAgMTkyLjE2OC4wLjEuMTAwMDAgPiAxOTIuMTY4LjAuMi4yMDAwMDogW3VkcCBzdW0gb2tdIFVEUCwgbGVuZ3RoIDQKZGlmZiAtLWdpdCBhL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS12dnYub3V0IGIvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLXZ2di5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjhhZjI4MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS12dnYub3V0CkBAIC0wLDAgKzEsOSBAQAorSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMTY0MTksIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDkyKQorICAgIDEyNy4wLjAuMS40NzkwID4gMTI3LjAuMC4xLjQ3OTA6IFt1ZHAgc3VtIG9rXSBWWExBTi1HUEUsIGZsYWdzIFtJUF0sIHZuaSAxNjc3NzIxNQorICAgIE5TSCwgdmVyIDAsIGZsYWdzIFtPQ10sIGxlbmd0aCA2LCBtZCB0eXBlIDB4MiwgbmV4dC1wcm90b2NvbCAweDEsIHNlcnZpY2UtcGF0aC1pZCAweGZmZmZmZiwgc2VydmljZS1pbmRleCAweGZmCisgICAgICAgIFRMViBDbGFzcyAxLCBUeXBlIDIsIExlbiAxCisgICAgICAgICAgICBWYWx1ZVswMF06IDB4MTIzNDU2NzgKKyAgICAgICAgVExWIENsYXNzIDIsIFR5cGUgMywgTGVuIDEKKyAgICAgICAgICAgIFZhbHVlWzAwXTogMHgxMjM0NTY3OAorICAgIElQICh0b3MgMHgwLCB0dGwgMjU1LCBpZCA1NDMyMSwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAzMikKKyAgICAxOTIuMTY4LjAuMS4xMDAwMCA+IDE5Mi4xNjguMC4yLjIwMDAwOiBbdWRwIHN1bSBva10gVURQLCBsZW5ndGggNApkaWZmIC0tZ2l0IGEvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLm91dCBiL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzM0OGE0MgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS5vdXQKQEAgLTAsMCArMSBAQAorSVAgMTI3LjAuMC4xLjQ3OTAgPiAxMjcuMC4wLjEuNDc5MDogVlhMQU4tR1BFLCBmbGFncyBbSVBdLCB2bmkgMTY3NzcyMTU6IE5TSCwgZmxhZ3MgW09DXSwgc2VydmljZS1wYXRoLWlkIDB4ZmZmZmZmLCBzZXJ2aWNlLWluZGV4IDB4ZmY6IElQIDE5Mi4xNjguMC4xLjEwMDAwID4gMTkyLjE2OC4wLjIuMjAwMDA6IFVEUCwgbGVuZ3RoIDQKZGlmZiAtLWdpdCBhL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS5wY2FwIGIvdGVzdHMvbnNoLW92ZXItdnhsYW4tZ3BlLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMGNjM2I2NwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL25zaC1vdmVyLXZ4bGFuLWdwZS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL29mMTBfcDMyOTUtdnYub3V0IGIvdGVzdHMvb2YxMF9wMzI5NS12di5vdXQKaW5kZXggN2QxYTY5MS4uMWU5ZjVkNSAxMDA2NDQKLS0tIGEvdGVzdHMvb2YxMF9wMzI5NS12di5vdXQKKysrIGIvdGVzdHMvb2YxMF9wMzI5NS12di5vdXQKQEAgLTQ5Nyw3ICs0OTcsNyBAQAogCSBtYXRjaCBud19wcm90byAxIFt8b3BlbmZsb3ddCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA3ODQsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNzQwKQogICAgIDEwLjAuMC4yMC42NjMzID4gMTAuMC4wLjUwLjM1MjU2OiBGbGFncyBbUC5dLCBja3N1bSAweDE3MWMgKGluY29ycmVjdCAtPiAweGRmZWUpLCBzZXEgMTU0OToyMjM3LCBhY2sgMjU4NSwgd2luIDE1NCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjIwOTU4NTMyIGVjciAxOTQ4ODkwMTRdLCBsZW5ndGggNjg4OiBPcGVuRmxvdwotCXZlcnNpb24gdW5rbm93biAoMHgwMCksIHR5cGUgMHgwMCwgbGVuZ3RoIDAsIHhpZCAweDAwMDMwMDBkIChjb3JydXB0KQorCXZlcnNpb24gdW5rbm93biAoMHgwMCksIHR5cGUgMHgwMCwgbGVuZ3RoIDAsIHhpZCAweDAwMDMwMDBkIChpbnZhbGlkKQogSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNTU1MDMsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCiAgICAgMTAuMC4wLjUwLjM1MjU2ID4gMTAuMC4wLjIwLjY2MzM6IEZsYWdzIFsuXSwgY2tzdW0gMHg5Mzg2IChjb3JyZWN0KSwgc2VxIDI1ODUsIGFjayAxNTQ5LCB3aW4gMjczLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxOTQ4ODkwMTYgZWNyIDIyMDk1ODUzMl0sIGxlbmd0aCAwCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA1NTUwNCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKQEAgLTc3MCw3ICs3NzAsNyBAQAogICAgIDEwLjAuMC4yMC42NjMzID4gMTAuMC4wLjUwLjM1MjU2OiBGbGFncyBbLl0sIGNrc3VtIDB4MTQ2YyAoaW5jb3JyZWN0IC0+IDB4NzMzYSksIHNlcSAyMjM3LCBhY2sgOTk1Mywgd2luIDI0OCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjIwOTU4NzIyIGVjciAxOTQ4ODkwNjNdLCBsZW5ndGggMAogSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNTU1MzIsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggMjY4MCkKICAgICAxMC4wLjAuNTAuMzUyNTYgPiAxMC4wLjAuMjAuNjYzMzogRmxhZ3MgW1AuXSwgY2tzdW0gMHgxZWIwIChpbmNvcnJlY3QgLT4gMHg1NjFiKSwgc2VxIDk5NTM6MTI1ODEsIGFjayAyMjM3LCB3aW4gMzY0LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxOTQ4ODkwNjMgZWNyIDIyMDk1ODcyMV0sIGxlbmd0aCAyNjI4OiBPcGVuRmxvdwotCXZlcnNpb24gdW5rbm93biAoMHgwMCksIHR5cGUgMHgwMCwgbGVuZ3RoIDAsIHhpZCAweDAwMDAwMDAwIChjb3JydXB0KQorCXZlcnNpb24gdW5rbm93biAoMHgwMCksIHR5cGUgMHgwMCwgbGVuZ3RoIDAsIHhpZCAweDAwMDAwMDAwIChpbnZhbGlkKQogSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgNzk2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyKQogICAgIDEwLjAuMC4yMC42NjMzID4gMTAuMC4wLjUwLjM1MjU2OiBGbGFncyBbLl0sIGNrc3VtIDB4MTQ2YyAoaW5jb3JyZWN0IC0+IDB4NjhjZCksIHNlcSAyMjM3LCBhY2sgMTI1ODEsIHdpbiAyODksIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIyMDk1ODcyMiBlY3IgMTk0ODg5MDYzXSwgbGVuZ3RoIDAKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDU1NTM0LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDY0KQpkaWZmIC0tZ2l0IGEvdGVzdHMvb2YxMF9zNDgxMC12dnZ2Lm91dCBiL3Rlc3RzL29mMTBfczQ4MTAtdnZ2di5vdXQKaW5kZXggZGFiYzJmMi4uZmQwZTNiMSAxMDA2NDQKLS0tIGEvdGVzdHMvb2YxMF9zNDgxMC12dnZ2Lm91dAorKysgYi90ZXN0cy9vZjEwX3M0ODEwLXZ2dnYub3V0CkBAIC0zNzcsNyArMzc3LDcgQEAKIAkgbWF0Y2ggZGxfZHN0IDAwOjExOjIyOjMzOjAwOjE1IFt8b3BlbmZsb3ddCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA1MzEwNCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCAxODApCiAgICAgMTAuMC4wLjIwLjY2MzMgPiAxMC4wLjAuODEuNTYwNjg6IEZsYWdzIFtQLl0sIGNrc3VtIDB4MTUwYiAoaW5jb3JyZWN0IC0+IDB4OGVjNyksIHNlcSA0MjQxOjQzNjksIGFjayA2NzcsIHdpbiAxMzksIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDQ3ODM2NTI3IGVjciAxXSwgbGVuZ3RoIDEyODogT3BlbkZsb3cKLQl2ZXJzaW9uIHVua25vd24gKDB4MDApLCB0eXBlIDB4MDAsIGxlbmd0aCAwLCB4aWQgMHgwMDAwMDAwMCAoY29ycnVwdCkKKwl2ZXJzaW9uIHVua25vd24gKDB4MDApLCB0eXBlIDB4MDAsIGxlbmd0aCAwLCB4aWQgMHgwMDAwMDAwMCAoaW52YWxpZCkKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCiAgICAgMTAuMC4wLjgxLjU2MDY4ID4gMTAuMC4wLjIwLjY2MzM6IEZsYWdzIFsuXSwgY2tzdW0gMHhmYWE3IChjb3JyZWN0KSwgc2VxIDY3NywgYWNrIDI4NzMsIHdpbiA5NTIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDEgZWNyIDQ3ODM2NTI3XSwgbGVuZ3RoIDAKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNTIpCkBAIC04NTgsNyArODU4LDcgQEAKIAkgIGR1cmF0aW9uX3NlYyAwLCBkdXJhdGlvbl9uc2VjIDAsIHByaW9yaXR5IDY1NTM1LCBpZGxlX3RpbWVvdXQgMCwgaGFyZF90aW1lb3V0IDAsIGNvb2tpZSAweDAwMDAwMDAwMDAwMDAwMjUsIHBhY2tldF9jb3VudCAwIFt8b3BlbmZsb3ddCiBJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA1MzU4Miwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCAxMDQwKQogICAgIDEwLjAuMC44MS41NjA2OCA+IDEwLjAuMC4yMC42NjMzOiBGbGFncyBbUC5dLCBja3N1bSAweDM5NWUgKGNvcnJlY3QpLCBzZXEgODExMzo5MTAxLCBhY2sgNDU0NSwgd2luIDEwMzUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIgZWNyIDQ3ODM3MDAwXSwgbGVuZ3RoIDk4ODogT3BlbkZsb3cKLQl2ZXJzaW9uIHVua25vd24gKDB4MDApLCB0eXBlIDB4MDAsIGxlbmd0aCAwLCB4aWQgMHgwMDAwMDAwMCAoY29ycnVwdCkKKwl2ZXJzaW9uIHVua25vd24gKDB4MDApLCB0eXBlIDB4MDAsIGxlbmd0aCAwLCB4aWQgMHgwMDAwMDAwMCAoaW52YWxpZCkKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDUzMTExLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyKQogICAgIDEwLjAuMC4yMC42NjMzID4gMTAuMC4wLjgxLjU2MDY4OiBGbGFncyBbLl0sIGNrc3VtIDB4MTQ4YiAoaW5jb3JyZWN0IC0+IDB4ZDM4NyksIHNlcSA0NjQxLCBhY2sgOTEwMSwgd2luIDMwMiwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgNDc4MzcwMDAgZWNyIDJdLCBsZW5ndGggMAogSVAgKHRvcyAweDAsIHR0bCA2NCwgaWQgMCwgb2Zmc2V0IDAsIGZsYWdzIFtERl0sIHByb3RvIFRDUCAoNiksIGxlbmd0aCA1MikKQEAgLTg4NiwxMSArODg2LDExIEBACiAJIGJ1ZmZlcl9pZCBOT05FLCB0b3RhbF9sZW4gMTE5LCBpbl9wb3J0IDEsIHJlYXNvbiBBQ1RJT04KIAkgZGF0YSAoMTE5IG9jdGV0cyksIGZyYW1lIGRlY29kaW5nIGJlbG93CiBTVFAgODAyLjFzLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW1Byb3Bvc2FsLCBMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50XSwgbGVuZ3RoIDEwMgotCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBleHQtcGF0aGNvc3QgMCAKLQlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBwb3J0LWlkIDgwMzQsIAorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjA4OjllOjAxOjYyOmQ1OmY0LCBDSVNUIHBvcnQtaWQgODAzNCwKIAltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCi0JdjNsZW4gNjQsIE1DSUQgTmFtZSBwaWNhOCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBwaWNhOCwgcmV2IDAsCisJCWRpZ2VzdCBhYzM2MTc3ZjUwMjgzY2Q0YjgzODIxZDhhYjI2ZGU2MiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDg6OWU6MDE6NjI6ZDU6ZjQsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDUzNjA1LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDE2OCkKICAgICAxMC4wLjAuODEuNTYwNjggPiAxMC4wLjAuMjAuNjYzMzogRmxhZ3MgW1AuXSwgY2tzdW0gMHg0YTAzIChjb3JyZWN0KSwgc2VxIDEwMzUwOjEwNDY2LCBhY2sgNDY0MSwgd2luIDEwMzUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDMgZWNyIDQ3ODM3MDAwXSwgbGVuZ3RoIDExNjogT3BlbkZsb3cKQEAgLTEyMzYsNiArMTIzNiwxMCBAQAogCSBhY3Rpb24gdHlwZSBPVVRQVVQsIGxlbiA4LCBwb3J0IDEKIAkgZGF0YSAoNjAgb2N0ZXRzKSwgZnJhbWUgZGVjb2RpbmcgYmVsb3cKIDY3OjY4OjAwOjAwOjAwOjAwID4gNjE6NjI6NjM6NjQ6NjU6NjYgTnVsbCBJbmZvcm1hdGlvbiwgc2VuZCBzZXEgMCwgcmN2IHNlcSAwLCBGbGFncyBbQ29tbWFuZF0sIGxlbmd0aCA0NgorCTB4MDAwMDogIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAgLi4uLi4uLi4uLi4uLi4uLgorCTB4MDAxMDogIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAgLi4uLi4uLi4uLi4uLi4uLgorCTB4MDAyMDogIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDAwMCAwMDAwIDAwMDAgMDExMiAgLi4uLi4uLi4uLi4uLi4uLgorCTB4MDAzMDogIDAwMDggMDAwMCAwMDQ1ICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uLi5FCiAJdmVyc2lvbiAxLjAsIHR5cGUgQkFSUklFUl9SRVFVRVNULCBsZW5ndGggOCwgeGlkIDB4MDAwMDAwNDUKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDAsIG9mZnNldCAwLCBmbGFncyBbREZdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggNjApCiAgICAgMTAuMC4wLjgxLjU2MDY4ID4gMTAuMC4wLjIwLjY2MzM6IEZsYWdzIFtQLl0sIGNrc3VtIDB4YjZmMSAoY29ycmVjdCksIHNlcSAxNDczNDoxNDc0MiwgYWNrIDQ4MjEsIHdpbiAxMDM1LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAzIGVjciA0NzgzNzQwM10sIGxlbmd0aCA4OiBPcGVuRmxvdwpAQCAtMTMxNSwxMSArMTMxOSwxMSBAQAogCSBidWZmZXJfaWQgTk9ORSwgdG90YWxfbGVuIDExOSwgaW5fcG9ydCAxLCByZWFzb24gTk9fTUFUQ0gKIAkgZGF0YSAoMTE5IG9jdGV0cyksIGZyYW1lIGRlY29kaW5nIGJlbG93CiBTVFAgODAyLjFzLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW1Byb3Bvc2FsLCBMZWFybiwgRm9yd2FyZCwgQWdyZWVtZW50XSwgbGVuZ3RoIDEwMgotCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBleHQtcGF0aGNvc3QgMCAKLQlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBwb3J0LWlkIDgwMzQsIAorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC4wODo5ZTowMTo2MjpkNTpmNCwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjA4OjllOjAxOjYyOmQ1OmY0LCBDSVNUIHBvcnQtaWQgODAzNCwKIAltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCi0JdjNsZW4gNjQsIE1DSUQgTmFtZSBwaWNhOCwgcmV2IDAsIAotCQlkaWdlc3QgYWMzNjE3N2Y1MDI4M2NkNGI4MzgyMWQ4YWIyNmRlNjIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwgCisJdjNsZW4gNjQsIE1DSUQgTmFtZSBwaWNhOCwgcmV2IDAsCisJCWRpZ2VzdCBhYzM2MTc3ZjUwMjgzY2Q0YjgzODIxZDhhYjI2ZGU2MiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAogCUNJU1QgYnJpZGdlLWlkIDgwMDAuMDg6OWU6MDE6NjI6ZDU6ZjQsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDUzMTI4LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDUyKQogICAgIDEwLjAuMC4yMC42NjMzID4gMTAuMC4wLjgxLjU2MDY4OiBGbGFncyBbLl0sIGNrc3VtIDB4MTQ4YiAoaW5jb3JyZWN0IC0+IDB4YjNlMCksIHNlcSA0ODU3LCBhY2sgMTQ5MDMsIHdpbiAzMzEsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDQ3ODM5MDUyIGVjciA2XSwgbGVuZ3RoIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL29zcGYyLXNlZy1mYXVsdC0xLXYub3V0IGIvdGVzdHMvb3NwZjItc2VnLWZhdWx0LTEtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IwNmJiMQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL29zcGYyLXNlZy1mYXVsdC0xLXYub3V0CkBAIC0wLDAgKzEsOSBAQAorSVAgKHRvcyAweGMwLCB0dGwgMSwgaWQgNDEwNiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gT1NQRiAoODkpLCBsZW5ndGggMTcyKQorICAgIDQwLjM1LjEuMiA+IDIyNC4wLjAuNTogT1NQRnYyLCBMUy1VcGRhdGUsIGxlbmd0aCAxNTIKKwlSb3V0ZXItSUQgMTAuMjU1LjI0NS4zNSwgQmFja2JvbmUgQXJlYSwgQXV0aGVudGljYXRpb24gVHlwZTogbm9uZSAoMCksIDEgTFNBCisJICBMU0EgIzEKKwkgIEFkdmVydGlzaW5nIFJvdXRlciAxMC4yNTUuMjQ1LjM3LCBzZXEgMHg4MDAwMDAwMiwgYWdlIDlzLCBsZW5ndGggMTA0CisJICAgIEFyZWEgTG9jYWwgT3BhcXVlIExTQSAoMTApLCBPcGFxdWUtVHlwZSBUcmFmZmljIEVuZ2luZWVyaW5nIExTQSAoMSksIE9wYXF1ZS1JRCA5CisJICAgIE9wdGlvbnM6IFtFeHRlcm5hbF0KKwkgICAgTGluayBUTFYgKDIpLCBsZW5ndGg6IDEwMAorCSAgICAgIEJhbmR3aWR0aCBDb25zdHJhaW50cyBzdWJUTFYgKDE3KSwgbGVuZ3RoOiAxIDwgNCAoaW52YWxpZCkKZGlmZiAtLWdpdCBhL3Rlc3RzL29zcGYyLXNlZy1mYXVsdC0xLnBjYXAgYi90ZXN0cy9vc3BmMi1zZWctZmF1bHQtMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2OWM2ZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vc3BmMi1zZWctZmF1bHQtMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL290di1oZWFwb3ZlcmZsb3ctMS5vdXQgYi90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiZWY5ZGQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTEub3V0CkBAIC0wLDAgKzEsMTAgQEAKK0lQIDE5Mi4xNjguMC4xMzQuNDc4MDggPiAxOTIuMTY4LjAuMjQuNDc4MDg6IFVEUCwgbGVuZ3RoIDYKK0lQIDE5Mi4xNjguMC4xMzQuNDc4MDggPiAxOTIuMTY4LjAuMjQuNDc4MDg6IFVEUCwgbGVuZ3RoIDEyCitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMTM0LjQ3ODA4OiBVRFAsIGxlbmd0aCA2CitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMjU1LjQ3ODA4OiBVRFAsIGxlbmd0aCAxOAorSVAgMTkyLjE2OC4wLjEwNS40NzgwOCA+IDE5Mi4xNjguMC4yNTUuNDc4MDg6IFVEUCwgbGVuZ3RoIDI1CitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMTM0LjQ3ODA4OiBVRFAsIGxlbmd0aCAzMQorSVAgMTkyLjE2OC4wLjE4LjQ3ODA4ID4gMTkyLjE2OC4wLjI1NS40NzgwODogVURQLCBsZW5ndGggMjQKK0lQIDE5Mi4xNjguMC4yNC40MDg5NiA+IDE5Mi4xNjguMC4xMzQuNDc4MDg6IFVEUCwgbGVuZ3RoIDMwCitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMjU1LjQ3ODA4OiBVRFAsIGxlbmd0aCAyMAorSVAgMTkyLjE2OC4wLjkuMzcxMjMgPiA5Ny4zNC4xLjIyNC44NDcyOiBPVFYsIGZsYWdzIFtJXSAoMHg5ZCksIG92ZXJsYXkgMTIxMjQxNjAsICBbfE9UVl0KZGlmZiAtLWdpdCBhL3Rlc3RzL290di1oZWFwb3ZlcmZsb3ctMS5wY2FwIGIvdGVzdHMvb3R2LWhlYXBvdmVyZmxvdy0xLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVlMTZiZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL290di1oZWFwb3ZlcmZsb3ctMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL290di1oZWFwb3ZlcmZsb3ctMi5vdXQgYi90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdlYTgwOWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTIub3V0CkBAIC0wLDAgKzEsMTEgQEAKK0lQIDE5Mi4xNjguMC4xMzQuNDc4MDggPiAxOTIuMTY4LjAuMjQuNDc4MDg6IFVEUCwgbGVuZ3RoIDYKK0lQIDE5Mi4xNjguMC4xMzQuNDc4MDggPiAxOTIuMTY4LjAuMjQuNDc4MDg6IFVEUCwgbGVuZ3RoIDEyCitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMTM0LjQ3ODA4OiBVRFAsIGxlbmd0aCA2CitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMjU1LjQ3ODA4OiBVRFAsIGxlbmd0aCAxOAorSVAgMTkyLjE2OC4wLjEwNS40NzgwOCA+IDE5Mi4xNjguMC4yNTUuNDc4MDg6IFVEUCwgbGVuZ3RoIDI1CitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMTM0LjQ3ODA4OiBVRFAsIGxlbmd0aCAzMQorSVAgMTkyLjE2OC4wLjE4LjQ3ODA4ID4gMTkyLjE2OC4wLjI1NS40NzgwODogVURQLCBsZW5ndGggMjQKK0lQIDE5Mi4xNjguMC4yNC40MDg5NiA+IDE5Mi4xNjguMC4xMzQuNDc4MDg6IFVEUCwgbGVuZ3RoIDMwCitJUCAxOTIuMTY4LjAuMjQuNDc4MDggPiAxOTIuMTY4LjAuMjU1LjQ3ODA4OiBVRFAsIGxlbmd0aCAyMAorSVAgMTkyLjE2OC4wLjkuMzcxMjMgPiA5Ny4zNC4xLjIyNC44NDcyOiBPVFYsIGZsYWdzIFtJXSAoMHg5ZCksIG92ZXJsYXkgMTIxMjQxNjAsIGluc3RhbmNlIDQ1ODc1MjAKK1t8ZXRoZXJdCmRpZmYgLS1naXQgYS90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTIucGNhcCBiL3Rlc3RzL290di1oZWFwb3ZlcmZsb3ctMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY5ZDZlNzgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9vdHYtaGVhcG92ZXJmbG93LTIucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9wY2FwLWludmFsaWQtdmVyc2lvbi0xLm91dCBiL3Rlc3RzL3BjYXAtaW52YWxpZC12ZXJzaW9uLTEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wY2FwLWludmFsaWQtdmVyc2lvbi0xLm91dApAQCAtMCwwICsxIEBACitFWElUIENPREUgMDAwMDAxMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3BjYXAtaW52YWxpZC12ZXJzaW9uLTEucGNhcCBiL3Rlc3RzL3BjYXAtaW52YWxpZC12ZXJzaW9uLTEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZGQwNDI5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGNhcC1pbnZhbGlkLXZlcnNpb24tMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3BjYXAtaW52YWxpZC12ZXJzaW9uLTIub3V0IGIvdGVzdHMvcGNhcC1pbnZhbGlkLXZlcnNpb24tMi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWVkY2RkYQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BjYXAtaW52YWxpZC12ZXJzaW9uLTIub3V0CkBAIC0wLDAgKzEgQEAKK0VYSVQgQ09ERSAwMDAwMDEwMApkaWZmIC0tZ2l0IGEvdGVzdHMvcGNhcC1pbnZhbGlkLXZlcnNpb24tMi5wY2FwIGIvdGVzdHMvcGNhcC1pbnZhbGlkLXZlcnNpb24tMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQyMTdkMWUKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wY2FwLWludmFsaWQtdmVyc2lvbi0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcGNhcC1uZy1pbnZhbGlkLXZlcnMtMS5vdXQgYi90ZXN0cy9wY2FwLW5nLWludmFsaWQtdmVycy0xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41ZWRjZGRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGNhcC1uZy1pbnZhbGlkLXZlcnMtMS5vdXQKQEAgLTAsMCArMSBAQAorRVhJVCBDT0RFIDAwMDAwMTAwCmRpZmYgLS1naXQgYS90ZXN0cy9wY2FwLW5nLWludmFsaWQtdmVycy0xLnBjYXAgYi90ZXN0cy9wY2FwLW5nLWludmFsaWQtdmVycy0xLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2JiYjdhYgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3BjYXAtbmctaW52YWxpZC12ZXJzLTEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9wY2FwLW5nLWludmFsaWQtdmVycy0yLm91dCBiL3Rlc3RzL3BjYXAtbmctaW52YWxpZC12ZXJzLTIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVlZGNkZGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9wY2FwLW5nLWludmFsaWQtdmVycy0yLm91dApAQCAtMCwwICsxIEBACitFWElUIENPREUgMDAwMDAxMDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3BjYXAtbmctaW52YWxpZC12ZXJzLTIucGNhcCBiL3Rlc3RzL3BjYXAtbmctaW52YWxpZC12ZXJzLTIucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzU5NWY0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcGNhcC1uZy1pbnZhbGlkLXZlcnMtMi5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3E5MzMtaGVhcG92ZXJmbG93LTIub3V0IGIvdGVzdHMvcTkzMy1oZWFwb3ZlcmZsb3ctMi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWE0MGM3MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3E5MzMtaGVhcG92ZXJmbG93LTIub3V0CkBAIC0wLDAgKzEsMjQgQEAKK1EuOTIyLCBpbnZhbGlkIGFkZHJlc3MKK1VJIDAwISBRLjkyMiwgaGRyLWxlbiA0LCBETENJIDU3NjkwMjQsIEZsYWdzIFtub25lXSwgTkxQSUQgdW5rbm93biAoMHgxMSksIGxlbmd0aCA0MTogCisJMHgwMDAwOiAgODg2YiA2OCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAua2gKK1EuOTIyLCBpbnZhbGlkIGFkZHJlc3MKK1VJIDAwISBRLjkyMiwgaGRyLWxlbiA0LCBETENJIDU3NjkwMjQsIEZsYWdzIFtub25lXSwgTkxQSUQgdW5rbm93biAoMHgxNCksIGxlbmd0aCAxNjA6IAorCTB4MDAwMDogIGE1MzAgYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLjAuCitRLjkyMiwgaW52YWxpZCBhZGRyZXNzCitVSSAwMCEgUS45MjIsIGhkci1sZW4gNCwgRExDSSA1ODAxNzkyLCBGbGFncyBbbm9uZV0sIE5MUElEIHVua25vd24gKDB4MTEpLCBsZW5ndGggMTc5OiAKKwkweDAwMDA6ICA4ODZiIDY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5raAorUS45MjIsIGludmFsaWQgYWRkcmVzcworVUkgMDAhIFEuOTIyLCBoZHItbGVuIDQsIERMQ0kgNTc2OTAyNCwgRmxhZ3MgW25vbmVdLCBOTFBJRCB1bmtub3duICgweDE0KSwgbGVuZ3RoIDMwOiAKKwkweDAwMDA6ICBhNTMwIGIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4wLgorUS45MjIsIGludmFsaWQgYWRkcmVzcworVUkgMDAhIFEuOTIyLCBoZHItbGVuIDQsIERMQ0kgMTg1NiwgRmxhZ3MgW25vbmVdLCBOTFBJRCB1bmtub3duICgweDExKSwgbGVuZ3RoIDg1OiAKKwkweDAwMDA6ICA4ODZiIDY4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5raAorUS45MjIsIGludmFsaWQgYWRkcmVzcworUS45MjIsIGludmFsaWQgYWRkcmVzcworVUkgMDAhIFEuOTIyLCBoZHItbGVuIDQsIERMQ0kgNTI2MTQ0LCBGbGFncyBbbm9uZV0sIE5MUElEIHVua25vd24gKDB4MTQpLCBsZW5ndGggNDY6IAorCTB4MDAwMDogIGE1MzAgYjAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLjAuCitRLjkyMiwgaW52YWxpZCBhZGRyZXNzCitVSSAyYyEgUGFkISBRLjkyMiwgaGRyLWxlbiAyLCBETENJIDI4OCwgRmxhZ3MgW25vbmVdLCBOTFBJRCBOVUxMICgweDAwKSwgbGVuZ3RoIDI0OiAKKwkweDAwMDA6ICAxMTg4IDZiNjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC4ua2gKK1EuOTIyLCBpbnZhbGlkIGFkZHJlc3MKK1VJIDJjISBQYWQhIFEuOTMzLCBDQ0lUVCwgY29kZXNldCAwW3xxLjkzM10KZGlmZiAtLWdpdCBhL3Rlc3RzL3E5MzMtaGVhcG92ZXJmbG93LTIucGNhcCBiL3Rlc3RzL3E5MzMtaGVhcG92ZXJmbG93LTIucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMzhjN2I2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcTkzMy1oZWFwb3ZlcmZsb3ctMi5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3JhZGlvdGFwLWhlYXBvdmVyZmxvdy5vdXQgYi90ZXN0cy9yYWRpb3RhcC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmE4MWQxODQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yYWRpb3RhcC1oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEgQEAKK1t8ODAyLjExXQpkaWZmIC0tZ2l0IGEvdGVzdHMvcmFkaW90YXAtaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy9yYWRpb3RhcC1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MmM2ZTE5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmFkaW90YXAtaGVhcG92ZXJmbG93LnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcmFkaXVzLXBvcnQxNzAwLXYub3V0IGIvdGVzdHMvcmFkaXVzLXBvcnQxNzAwLXYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM4OWM3NjMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yYWRpdXMtcG9ydDE3MDAtdi5vdXQKQEAgLTAsMCArMSw0IEBACitJUCAodG9zIDB4MCwgdHRsIDY0LCBpZCA0NDk3OCwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCA1MykKKyAgICAxMjcuMC4wLjEuNDIxNzIgPiAxMjcuMC4wLjEuMTcwMDogUkFESVVTLCBsZW5ndGg6IDI1CisJQ29BLVJlcXVlc3QgKDQzKSwgaWQ6IDB4YTYsIEF1dGhlbnRpY2F0b3I6IDdmYmYwMmM2NjYyYjU5OTA4MzhhNWU2ZTMzMWIzZmYwCisJICBVc2VyLU5hbWUgQXR0cmlidXRlICgxKSwgbGVuZ3RoOiA1LCBWYWx1ZTogYm9iCmRpZmYgLS1naXQgYS90ZXN0cy9yYWRpdXMtcmZjNDY3NS12Lm91dCBiL3Rlc3RzL3JhZGl1cy1yZmM0Njc1LXYub3V0CmluZGV4IGZmMGU5NmYuLmMxY2VhNTYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL3JhZGl1cy1yZmM0Njc1LXYub3V0CisrKyBiL3Rlc3RzL3JhZGl1cy1yZmM0Njc1LXYub3V0CkBAIC01LDcgKzUsNyBAQAogCSAgVXNlci1QYXNzd29yZCBBdHRyaWJ1dGUgKDIpLCBsZW5ndGg6IDE4LCBWYWx1ZTogCiAJICBOQVMtSVAtQWRkcmVzcyBBdHRyaWJ1dGUgKDQpLCBsZW5ndGg6IDYsIFZhbHVlOiAxMjcuMC4wLjEKIAkgIE5BUy1Qb3J0IEF0dHJpYnV0ZSAoNSksIGxlbmd0aDogNiwgVmFsdWU6IDEKLQkgIE1lc3NhZ2UtQXV0aGVudGljYXRvciBBdHRyaWJ1dGUgKDgwKSwgbGVuZ3RoOiAxOCwgVmFsdWU6IC4uLi4uYi4uNy1/Li4uYi4KKwkgIE1lc3NhZ2UtQXV0aGVudGljYXRvciBBdHRyaWJ1dGUgKDgwKSwgbGVuZ3RoOiAxOCwgVmFsdWU6IC4uLi4uYi4uNy0uLi4uYi4KIElQICh0b3MgMHgwLCB0dGwgNjQsIGlkIDIwODIxLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDgxKQogICAgIDEyNy4wLjAuMS4xODEyID4gMTI3LjAuMC4xLjUzMzM0OiBSQURJVVMsIGxlbmd0aDogNTMKIAlBY2Nlc3MtQWNjZXB0ICgyKSwgaWQ6IDB4NDYsIEF1dGhlbnRpY2F0b3I6IDc2NmEwMzE0ZWFmNGI5NWYxZWMyNzFhZTE5Y2IzYmRjCmRpZmYgLS1naXQgYS90ZXN0cy9yZWx0cy0weDgwMDAwMDAwLm91dCBiL3Rlc3RzL3JlbHRzLTB4ODAwMDAwMDAub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5NTQwNGEKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZWx0cy0weDgwMDAwMDAwLm91dApAQCAtMCwwICsxLDIgQEAKK0lQICh0b3MgMHgzMCwgdHRsIDQ4LCBpZCAxMjMzNiwgb2Zmc2V0IDAsIGZsYWdzIFtub25lXSwgcHJvdG8gSUdNUCAoMiksIGxlbmd0aCAxMjMzNiwgYmFkIGNrc3VtIDMwMzAgKC0+NjlhYykhKQorICAgIDQ4LjQ4LjQ4LjQ4ID4gNDguNDguNDguNDg6IGlnbXAgZHZtcnAgUHJ1bmUgc3JjIDQ4LjQ4LjQ4LjQ4IGdycCA0OC40OC40OC40OCB0aW1lciA2OHk1dzNoMTRtOHMKZGlmZiAtLWdpdCBhL3Rlc3RzL3JlbHRzLTB4ODAwMDAwMDAucGNhcCBiL3Rlc3RzL3JlbHRzLTB4ODAwMDAwMDAucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lYjgyNWZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVsdHMtMHg4MDAwMDAwMC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc3BfMS5vdXQgYi90ZXN0cy9yZXNwXzEub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjg4YzkxNDAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNwXzEub3V0CkBAIC0wLDAgKzEsMTUwIEBACitJUCAxMjcuMC4wLjEuMzU5MDEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMTE1OTkxODUxMSwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwMTogRmxhZ3MgW1MuXSwgc2VxIDEzMDk4MzE3NzEsIGFjayAxMTU5OTE4NTEyLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDYsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo3LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCA2OiBSRVNQICJQSU5HIgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDE6IEZsYWdzIFsuXSwgYWNrIDcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDE6IEZsYWdzIFtQLl0sIHNlcSAxOjgsIGFjayA3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDc6IFJFU1AgIlBPTkciCitJUCAxMjcuMC4wLjEuMzU5MDEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayA4LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTAxOiBGbGFncyBbRi5dLCBzZXEgOCwgYWNrIDgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTAxID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTAyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDM4ODAwMzY4OTUsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDI6IEZsYWdzIFtTLl0sIHNlcSA5NTgyNTIzNywgYWNrIDM4ODAwMzY4OTYsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nixub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTAyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTAyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjE1LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAxNDogUkVTUCAiUElORyIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTAyOiBGbGFncyBbLl0sIGFjayAxNSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwMjogRmxhZ3MgW1AuXSwgc2VxIDE6OCwgYWNrIDE1LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDc6IFJFU1AgIlBPTkciCitJUCAxMjcuMC4wLjEuMzU5MDIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDE1LCBhY2sgOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwMjogRmxhZ3MgW0YuXSwgc2VxIDgsIGFjayAxNiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgOSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMzA0MDY1ODU4Miwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwMzogRmxhZ3MgW1MuXSwgc2VxIDI0NTg2ODQyNjgsIGFjayAzMDQwNjU4NTgzLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDYsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo0NiwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggNDU6IFJFU1AgIlNFVCIgImtleTowMDAwMDAwMDA5NDMiICJ4eHgiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwMzogRmxhZ3MgWy5dLCBhY2sgNDYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDM6IEZsYWdzIFtQLl0sIHNlcSAxOjYsIGFjayA0Niwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCA1OiBSRVNQICJPSyIKK0lQIDEyNy4wLjAuMS4zNTkwMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgNDYsIGFjayA2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTAzOiBGbGFncyBbRi5dLCBzZXEgNiwgYWNrIDQ3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAyNTU1ODY3OTgwLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA0OiBGbGFncyBbUy5dLCBzZXEgNDI5MTk5NzA3MiwgYWNrIDI1NTU4Njc5ODEsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nixub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjM3LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAzNjogUkVTUCAiR0VUIiAia2V5OjAwMDAwMDAwMDE5OSIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA0OiBGbGFncyBbLl0sIGFjayAzNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwNDogRmxhZ3MgW1AuXSwgc2VxIDE6MTAsIGFjayAzNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCA5OiBSRVNQICJ4eHgiCitJUCAxMjcuMC4wLjEuMzU5MDQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMTAsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSAzNywgYWNrIDEwLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ2IGVjciAyMDA0NDA1ODQ2XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA0OiBGbGFncyBbRi5dLCBzZXEgMTAsIGFjayAzOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMjAwNDQwNTg0Nl0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMTEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDYgZWNyIDIwMDQ0MDU4NDZdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDIzNDIyNDg0MTksIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NiBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDU6IEZsYWdzIFtTLl0sIHNlcSAyNDkwODg2MjU5LCBhY2sgMjM0MjI0ODQyMCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ2LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDUgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDUgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NDIsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDQxOiBSRVNQICJJTkNSIiAiY291bnRlcjowMDAwMDAwMDAyOTMiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwNTogRmxhZ3MgWy5dLCBhY2sgNDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDU6IEZsYWdzIFtQLl0sIHNlcSAxOjUsIGFjayA0Miwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCA0OiBSRVNQICIzIgorSVAgMTI3LjAuMC4xLjM1OTA1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA0MiwgYWNrIDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDU6IEZsYWdzIFtGLl0sIHNlcSA1LCBhY2sgNDMsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDEzMTE1ODQxMiwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwNjogRmxhZ3MgW1MuXSwgc2VxIDQ5NzgxOTU4LCBhY2sgMTMxMTU4NDEzLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDcsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwNiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwNiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTozNywgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMzY6IFJFU1AgIkxQVVNIIiAibXlsaXN0IiAieHh4IgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDY6IEZsYWdzIFsuXSwgYWNrIDM3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA2OiBGbGFncyBbUC5dLCBzZXEgMTo5LCBhY2sgMzcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggODogUkVTUCAiNDcxNTgiCitJUCAxMjcuMC4wLjEuMzU5MDYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgOSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDM3LCBhY2sgOSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwNjogRmxhZ3MgW0YuXSwgc2VxIDksIGFjayAzOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMTAsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDE0NTQ3NDIzOTIsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDc6IEZsYWdzIFtTLl0sIHNlcSA0MTY2NTAxMTk1LCBhY2sgMTQ1NDc0MjM5Mywgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6MjcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDI2OiBSRVNQICJMUE9QIiAibXlsaXN0IgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDc6IEZsYWdzIFsuXSwgYWNrIDI3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA3OiBGbGFncyBbUC5dLCBzZXEgMToxMCwgYWNrIDI3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDk6IFJFU1AgInh4eCIKK0lQIDEyNy4wLjAuMS4zNTkwNyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxMCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDI3LCBhY2sgMTAsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDc6IEZsYWdzIFtGLl0sIHNlcSAxMCwgYWNrIDI4LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwNyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgNTQ1NTg5NDg3LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA4OiBGbGFncyBbUy5dLCBzZXEgMjgyMzgxNzg0NCwgYWNrIDU0NTU4OTQ4OCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NTMsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDUyOiBSRVNQICJTQUREIiAibXlzZXQiICJlbGVtZW50OjAwMDAwMDAwMDA2MyIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA4OiBGbGFncyBbLl0sIGFjayA1Mywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwODogRmxhZ3MgW1AuXSwgc2VxIDE6NSwgYWNrIDUzLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDQ6IFJFU1AgIjEiCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgNSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDUzLCBhY2sgNSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwODogRmxhZ3MgW0YuXSwgc2VxIDUsIGFjayA1NCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgNiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDkgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMjk2Njk4ODUwLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTA5OiBGbGFncyBbUy5dLCBzZXEgMzk3MDgwNjQ1MywgYWNrIDI5NjY5ODg1MSwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDkgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MDkgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6MjYsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDI1OiBSRVNQICJTUE9QIiAibXlzZXQiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwOTogRmxhZ3MgWy5dLCBhY2sgMjYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MDk6IEZsYWdzIFtQLl0sIHNlcSAxOjI4LCBhY2sgMjYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMjc6IFJFU1AgImVsZW1lbnQ6MDAwMDAwMDAwMDYzIgorSVAgMTI3LjAuMC4xLjM1OTA5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDI4LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkwOSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgMjYsIGFjayAyOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkwOTogRmxhZ3MgW0YuXSwgc2VxIDI4LCBhY2sgMjcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTA5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDI5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAyMDgyNTU1MDU5LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTEwOiBGbGFncyBbUy5dLCBzZXEgMTc2MjQ3MDc3OSwgYWNrIDIwODI1NTUwNjAsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0Nyxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTEwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTEwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjM3LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAzNjogUkVTUCAiTFBVU0giICJteWxpc3QiICJ4eHgiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMDogRmxhZ3MgWy5dLCBhY2sgMzcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTA6IEZsYWdzIFtQLl0sIHNlcSAxOjksIGFjayAzNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCA4OiBSRVNQICI0NzE1OCIKK0lQIDEyNy4wLjAuMS4zNTkxMCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgMzcsIGFjayA5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTEwOiBGbGFncyBbRi5dLCBzZXEgOSwgYWNrIDM4LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxMCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgODIzNTU1NTU5LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTExOiBGbGFncyBbUy5dLCBzZXEgMTM0MzExOTEyNywgYWNrIDgyMzU1NTU2MCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NDQsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDQzOiBSRVNQICJMUkFOR0UiICJteWxpc3QiICIwIiAiOTkiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMTogRmxhZ3MgWy5dLCBhY2sgNDQsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTE6IEZsYWdzIFtQLl0sIHNlcSAxOjkwNywgYWNrIDQ0LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDkwNjogUkVTUCAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IiAieHh4IgorSVAgMTI3LjAuMC4xLjM1OTExID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDkwNywgd2luIDM1Niwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDQ0LCBhY2sgOTA3LCB3aW4gMzU2LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTExOiBGbGFncyBbRi5dLCBzZXEgOTA3LCBhY2sgNDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTExID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDkwOCwgd2luIDM1Niwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMjM3OTY2MTY0MSwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMjogRmxhZ3MgW1MuXSwgc2VxIDE4MzI3NDA0ODAsIGFjayAyMzc5NjYxNjQyLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDcsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo0NSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggNDQ6IFJFU1AgIkxSQU5HRSIgIm15bGlzdCIgIjAiICIyOTkiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMjogRmxhZ3MgWy5dLCBhY2sgNDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTI6IEZsYWdzIFtQLl0sIHNlcSAxOjI3MDcsIGFjayA0NSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAyNzA2OiBSRVNQICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiCitJUCAxMjcuMC4wLjEuMzU5MTIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjcwNywgd2luIDEzNjUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTEyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA0NSwgYWNrIDI3MDcsIHdpbiAxMzY1LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTEyOiBGbGFncyBbRi5dLCBzZXEgMjcwNywgYWNrIDQ2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyNzA4LCB3aW4gMTM2NSwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0NyBlY3IgMjAwNDQwNTg0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMTY2OTMwNDM3Nywgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMzogRmxhZ3MgW1MuXSwgc2VxIDE5MTA2MTI1MzcsIGFjayAxNjY5MzA0Mzc4LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDcgZWNyIDIwMDQ0MDU4NDcsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ3IGVjciAyMDA0NDA1ODQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo0NSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDddLCBsZW5ndGggNDQ6IFJFU1AgIkxSQU5HRSIgIm15bGlzdCIgIjAiICI0NDkiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxMzogRmxhZ3MgWy5dLCBhY2sgNDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTM6IEZsYWdzIFtQLl0sIHNlcSAxOjQwNTcsIGFjayA0NSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCA0MDU2OiBSRVNQICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiICJ4eHgiCitJUCAxMjcuMC4wLjEuMzU5MTMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgNDA1Nywgd2luIDEzNjUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTEzID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA0NSwgYWNrIDQwNTcsIHdpbiAxMzY1LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTEzOiBGbGFncyBbRi5dLCBzZXEgNDA1NywgYWNrIDQ2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxMyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA0MDU4LCB3aW4gMTM2NSwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMTY5NTE1MzI4OCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxNDogRmxhZ3MgW1MuXSwgc2VxIDQ4ODQwMjAzMiwgYWNrIDE2OTUxNTMyODksIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTE0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTE0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjQ1LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCA0NDogUkVTUCAiTFJBTkdFIiAibXlsaXN0IiAiMCIgIjU5OSIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTE0OiBGbGFncyBbLl0sIGFjayA0NSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkxNDogRmxhZ3MgW1AuXSwgc2VxIDE6NTQwNywgYWNrIDQ1LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDU0MDY6IFJFU1AgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIgInh4eCIKK0lQIDEyNy4wLjAuMS4zNTkxNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA1NDA3LCB3aW4gMTM2NSwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDQ1LCBhY2sgNTQwNywgd2luIDEzNjUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTQ6IEZsYWdzIFtGLl0sIHNlcSA1NDA3LCBhY2sgNDYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTE0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDU0MDgsIHdpbiAxMzY1LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxNSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAzOTUyNTI5NjQyLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTE1OiBGbGFncyBbUy5dLCBzZXEgMjA3OTc3MTA0NSwgYWNrIDM5NTI1Mjk2NDMsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTE1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTE1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjMzNiwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMzM1OiBSRVNQICJNU0VUIiAia2V5OjAwMDAwMDAwMDUyNSIgInh4eCIgImtleTowMDAwMDAwMDAwNTAiICJ4eHgiICJrZXk6MDAwMDAwMDAwNDE2IiAieHh4IiAia2V5OjAwMDAwMDAwMDI2MyIgInh4eCIgImtleTowMDAwMDAwMDA5NDEiICJ4eHgiICJrZXk6MDAwMDAwMDAwMTQ4IiAieHh4IiAia2V5OjAwMDAwMDAwMDczOSIgInh4eCIgImtleTowMDAwMDAwMDA1NzEiICJ4eHgiICJrZXk6MDAwMDAwMDAwOTc0IiAieHh4IiAia2V5OjAwMDAwMDAwMDQ5NSIgInh4eCIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTE1OiBGbGFncyBbLl0sIGFjayAzMzYsIHdpbiAzNTAsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTU6IEZsYWdzIFtQLl0sIHNlcSAxOjYsIGFjayAzMzYsIHdpbiAzNTAsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggNTogUkVTUCAiT0siCitJUCAxMjcuMC4wLjEuMzU5MTUgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgNiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQwNTg0OCBlY3IgMjAwNDQwNTg0OF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuMzU5MTUgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDMzNiwgYWNrIDYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MDU4NDggZWNyIDIwMDQ0MDU4NDhdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MTU6IEZsYWdzIFtGLl0sIHNlcSA2LCBhY2sgMzM3LCB3aW4gMzUwLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkxNSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDA1ODQ4IGVjciAyMDA0NDA1ODQ4XSwgbGVuZ3RoIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc3BfMV9iZW5jaG1hcmsucGNhcCBiL3Rlc3RzL3Jlc3BfMV9iZW5jaG1hcmsucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iNzQ2ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzcF8xX2JlbmNobWFyay5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc3BfMi5vdXQgYi90ZXN0cy9yZXNwXzIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3MzMzZDcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9yZXNwXzIub3V0CkBAIC0wLDAgKzEsMTQgQEAKK0lQIDEyNy4wLjAuMS4zNTkzNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAyNzA1ODE3MzMsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMjAwNDQxMzM4NSBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MzQ6IEZsYWdzIFtTLl0sIHNlcSAzNTI0OTc1MzgzLCBhY2sgMjcwNTgxNzM0LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDIwMDQ0MTMzODUgZWNyIDIwMDQ0MTMzODUsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkzNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDEzMzg1IGVjciAyMDA0NDEzMzg1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkzNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMToxMywgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MTM2ODMgZWNyIDIwMDQ0MTMzODVdLCBsZW5ndGggMTI6IFJFU1AgInNldCB0ZXN0IDEiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkzNDogRmxhZ3MgWy5dLCBhY2sgMTMsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MTM2ODMgZWNyIDIwMDQ0MTM2ODNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTM0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxMzoxNTcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDEzNjgzIGVjciAyMDA0NDEzNjgzXSwgbGVuZ3RoIDE0NDogUkVTUCAiaW5jciB0ZXN0IiAic2V0IHRlc3QyIHJlZGlzIiAiZ2V0IHRlc3QyIiAibHB1c2ggdGVzdDMgciIgImxwdXNoIHRlc3QzIGUiICJscHVzaCB0ZXN0MyBkIiAibHB1c2ggdGVzdDMgaSIgImxwdXNoIHRlc3QzIHMiICJscmFuZ2UgdGVzdDMgMCAtMSIgImRlbCB0ZXN0NCIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjM1OTM0OiBGbGFncyBbLl0sIGFjayAxNTcsIHdpbiAzNTAsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MTM2ODMgZWNyIDIwMDQ0MTM2ODNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjM1OTM0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxNTc6MTY4LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQxMzY4MyBlY3IgMjAwNDQxMzY4M10sIGxlbmd0aCAxMTogUkVTUCAiZ2V0IHRlc3Q0IgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MzQ6IEZsYWdzIFsuXSwgYWNrIDE2OCwgd2luIDM1MCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQxMzY4MyBlY3IgMjAwNDQxMzY4M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS4zNTkzNDogRmxhZ3MgW1AuXSwgc2VxIDE6MTI4OSwgYWNrIDE2OCwgd2luIDM1MCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQxMzY4MyBlY3IgMjAwNDQxMzY4M10sIGxlbmd0aCAxMjg4OiBSRVNQICJPSyIgIjIiICJPSyIgInJlZGlzIiAiMTcwIiAiMTcxIiAiMTcyIiAiMTczIiAiMTc0IiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgImkiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJkIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJzIiAiaSIgImQiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAicyIgImkiICJkIiAiZSIgInIiICJpIiAicyIgImkiICJlIiAiciIgInMiICJpIiAiZCIgImUiICJyIiAiMCIgbnVsbAorSVAgMTI3LjAuMC4xLjM1OTM0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEyODksIHdpbiAxMzY1LCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDEzNjgzIGVjciAyMDA0NDEzNjgzXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkzNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgMTY4LCBhY2sgMTI4OSwgd2luIDEzNjUsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDIwMDQ0MTM5ODQgZWNyIDIwMDQ0MTM2ODNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuMzU5MzQ6IEZsYWdzIFtGLl0sIHNlcSAxMjg5LCBhY2sgMTY5LCB3aW4gMzUwLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAyMDA0NDEzOTg0IGVjciAyMDA0NDEzOTg0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS4zNTkzNCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxMjkwLCB3aW4gMTM2NSwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMjAwNDQxMzk4NCBlY3IgMjAwNDQxMzk4NF0sIGxlbmd0aCAwCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNwXzJfaW5saW5lLnBjYXAgYi90ZXN0cy9yZXNwXzJfaW5saW5lLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYjVmMgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Jlc3BfMl9pbmxpbmUucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9yZXNwXzMub3V0IGIvdGVzdHMvcmVzcF8zLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xODUyZjRlCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzcF8zLm91dApAQCAtMCwwICsxLDE2MyBAQAorSVAgMTI3LjAuMC4xLjUyNzU5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSAyMTY5ODMxMzgyLCBhY2sgNDg5OTcyMzM3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4MDM0IGVjciAxMTMyNDE3NzM0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzU5OiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTgwMzQgZWNyIDExMzI0MTgwMzRdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzU5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTgwMzQgZWNyIDExMzI0MTgwMzRdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzYwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDI2NDA1NTE1Miwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDE4MDM3IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2MDogRmxhZ3MgW1MuXSwgc2VxIDQyMjcxNDg4ODgsIGFjayAyNjQwNTUxNTMsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQxODAzNyBlY3IgMTEzMjQxODAzNyxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzYwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTgwMzcgZWNyIDExMzI0MTgwMzddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzYwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4MDM3IGVjciAxMTMyNDE4MDM3XSwgbGVuZ3RoIDY6IFJFU1AgZW1wdHkKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzYwOiBGbGFncyBbLl0sIGFjayA3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4MDM3IGVjciAxMTMyNDE4MDM3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzYwOiBGbGFncyBbUC5dLCBzZXEgMToyOCwgYWNrIDcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTgwMzcgZWNyIDExMzI0MTgwMzddLCBsZW5ndGggMjc6IFJFU1AgIkVSUiB1bmtub3duIGNvbW1hbmQgJyQwJyIKK0lQIDEyNy4wLjAuMS41Mjc2MCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODAzNyBlY3IgMTEzMjQxODAzN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayAyOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODMzNyBlY3IgMTEzMjQxODAzN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2MDogRmxhZ3MgW0YuXSwgc2VxIDI4LCBhY2sgOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODMzNyBlY3IgMTEzMjQxODMzN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTgzMzcgZWNyIDExMzI0MTgzMzddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzYzID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDQwMjk1NzczNjUsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQxODM0MCBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjM6IEZsYWdzIFtTLl0sIHNlcSAzNjUzMjIxODUsIGFjayA0MDI5NTc3MzY2LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MTgzNDAgZWNyIDExMzI0MTgzNDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2MyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4MzQwIGVjciAxMTMyNDE4MzQwXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2MyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo0LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODM0MCBlY3IgMTEzMjQxODM0MF0sIGxlbmd0aCAzOiBSRVNQICIiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2MzogRmxhZ3MgWy5dLCBhY2sgNCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODM0MCBlY3IgMTEzMjQxODM0MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2MzogRmxhZ3MgW1AuXSwgc2VxIDE6MjcsIGFjayA0LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4MzQwIGVjciAxMTMyNDE4MzQwXSwgbGVuZ3RoIDI2OiBSRVNQICJFUlIgdW5rbm93biBjb21tYW5kICcrJyIKK0lQIDEyNy4wLjAuMS41Mjc2MyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODM0MCBlY3IgMTEzMjQxODM0MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDQsIGFjayAyNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODY0MCBlY3IgMTEzMjQxODM0MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2MzogRmxhZ3MgW0YuXSwgc2VxIDI3LCBhY2sgNSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODY0MCBlY3IgMTEzMjQxODY0MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg2NDAgZWNyIDExMzI0MTg2NDBdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDM5OTQ0ODUxNzEsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQxODY0MiBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjQ6IEZsYWdzIFtTLl0sIHNlcSAzMDg5NTUzMjU2LCBhY2sgMzk5NDQ4NTE3Miwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDE4NjQyIGVjciAxMTMyNDE4NjQyLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODY0MiBlY3IgMTEzMjQxODY0Ml0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NCwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg2NDIgZWNyIDExMzI0MTg2NDJdLCBsZW5ndGggMzogUkVTUCAiIgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjQ6IEZsYWdzIFsuXSwgYWNrIDQsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg2NDIgZWNyIDExMzI0MTg2NDJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjQ6IEZsYWdzIFtQLl0sIHNlcSAxOjI3LCBhY2sgNCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxODY0MiBlY3IgMTEzMjQxODY0Ml0sIGxlbmd0aCAyNjogUkVTUCAiRVJSIHVua25vd24gY29tbWFuZCAnLSciCitJUCAxMjcuMC4wLjEuNTI3NjQgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg2NDIgZWNyIDExMzI0MTg2NDJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA0LCBhY2sgMjcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg5NDIgZWNyIDExMzI0MTg2NDJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjQ6IEZsYWdzIFtGLl0sIHNlcSAyNywgYWNrIDUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg5NDIgZWNyIDExMzI0MTg5NDJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY0ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDI4LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4OTQyIGVjciAxMTMyNDE4OTQyXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAzMjM1NTkyMjEzLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MTg5NDQgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY1OiBGbGFncyBbUy5dLCBzZXEgMTIxMzYxMTg0NywgYWNrIDMyMzU1OTIyMTQsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQxODk0NCBlY3IgMTEzMjQxODk0NCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg5NDQgZWNyIDExMzI0MTg5NDRdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjQsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4OTQ0IGVjciAxMTMyNDE4OTQ0XSwgbGVuZ3RoIDM6IFJFU1AgIiIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY1OiBGbGFncyBbLl0sIGFjayA0LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4OTQ0IGVjciAxMTMyNDE4OTQ0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY1OiBGbGFncyBbUC5dLCBzZXEgMToyNywgYWNrIDQsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTg5NDUgZWNyIDExMzI0MTg5NDRdLCBsZW5ndGggMjY6IFJFU1AgIkVSUiB1bmtub3duIGNvbW1hbmQgJzonIgorSVAgMTI3LjAuMC4xLjUyNzY1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDI3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE4OTQ1IGVjciAxMTMyNDE4OTQ1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgNCwgYWNrIDI3LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5MjQ0IGVjciAxMTMyNDE4OTQ1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY1OiBGbGFncyBbRi5dLCBzZXEgMjcsIGFjayA1LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5MjQ0IGVjciAxMTMyNDE5MjQ0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyOCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTI0NCBlY3IgMTEzMjQxOTI0NF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMTE2MTc3OTMxNiwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDE5MjQ3IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2NjogRmxhZ3MgW1MuXSwgc2VxIDEyMDYzMzExNzksIGFjayAxMTYxNzc5MzE3LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MTkyNDcgZWNyIDExMzI0MTkyNDcsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5MjQ3IGVjciAxMTMyNDE5MjQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo4OSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTkyNDcgZWNyIDExMzI0MTkyNDddLCBsZW5ndGggODg6IFJFU1AgIjAzOTIwNDkwMjkwMjQ5MjA0OTIzMDQ5MjMwNDkwMzI5NDAzMjk0MDIzOTQwOTIzMDQ5MzIwNDkyMzA0OTIwMzQ5MzIwOTQwMzI5NDAyMzQ5MDIzNDAiCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2NjogRmxhZ3MgWy5dLCBhY2sgODksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTkyNDcgZWNyIDExMzI0MTkyNDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NjY6IEZsYWdzIFtQLl0sIHNlcSAxOjExMiwgYWNrIDg5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5MjQ3IGVjciAxMTMyNDE5MjQ3XSwgbGVuZ3RoIDExMTogUkVTUCAiRVJSIHVua25vd24gY29tbWFuZCAnOjAzOTIwNDkwMjkwMjQ5MjA0OTIzMDQ5MjMwNDkwMzI5NDAzMjk0MDIzOTQwOTIzMDQ5MzIwNDkyMzA0OTIwMzQ5MzIwOTQwMzI5NDAyMzQ5MDIzNDAnIgorSVAgMTI3LjAuMC4xLjUyNzY2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDExMiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTI0NyBlY3IgMTEzMjQxOTI0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDg5LCBhY2sgMTEyLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5NTQ3IGVjciAxMTMyNDE5MjQ3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY2OiBGbGFncyBbRi5dLCBzZXEgMTEyLCBhY2sgOTAsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTk1NDcgZWNyIDExMzI0MTk1NDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDExMywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTU0NyBlY3IgMTEzMjQxOTU0N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMzQ1MzY4NzcxMCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDE5NTQ5IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2NzogRmxhZ3MgW1MuXSwgc2VxIDQwNzY4NjI1MzksIGFjayAzNDUzNjg3NzExLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MTk1NDkgZWNyIDExMzI0MTk1NDksbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5NTQ5IGVjciAxMTMyNDE5NTQ5XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2NyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTozOSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTk1NDkgZWNyIDExMzI0MTk1NDldLCBsZW5ndGggMzg6IFJFU1AgbGVuZ3RoIHRvbyBsYXJnZQorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Njc6IEZsYWdzIFsuXSwgYWNrIDM5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5NTQ5IGVjciAxMTMyNDE5NTQ5XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY3OiBGbGFncyBbUC5dLCBzZXEgMTo0OCwgYWNrIDM5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5NTQ5IGVjciAxMTMyNDE5NTQ5XSwgbGVuZ3RoIDQ3OiBSRVNQICJFUlIgUHJvdG9jb2wgZXJyb3I6IGludmFsaWQgbXVsdGlidWxrIGxlbmd0aCIKK0lQIDEyNy4wLjAuMS41Mjc2NyA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA0OCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTU0OSBlY3IgMTEzMjQxOTU0OV0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2NzogRmxhZ3MgW0YuXSwgc2VxIDQ4LCBhY2sgMzksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MTk1NDkgZWNyIDExMzI0MTk1NDldLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSAzOSwgYWNrIDQ5LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5NTQ5IGVjciAxMTMyNDE5NTQ5XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY3OiBGbGFncyBbLl0sIGFjayA0MCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTU0OSBlY3IgMTEzMjQxOTU0OV0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMzEwOTMwNTg5Mywgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDE5ODUyIGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2ODogRmxhZ3MgW1MuXSwgc2VxIDQyMDIwNTk2ODAsIGFjayAzMTA5MzA1ODk0LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MTk4NTIgZWNyIDExMzI0MTk4NTIsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2OCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDE5ODUyIGVjciAxMTMyNDE5ODUyXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2OCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo3LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTg1MiBlY3IgMTEzMjQxOTg1Ml0sIGxlbmd0aCA2OiBSRVNQIGxlbmd0aCBuZWdhdGl2ZSBhbmQgbm90IC0xCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc2ODogRmxhZ3MgWy5dLCBhY2sgNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQxOTg1MiBlY3IgMTEzMjQxOTg1Ml0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwMTUyIGVjciAxMTMyNDE5ODUyXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY4OiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjAxNTIgZWNyIDExMzI0MjAxNTJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY4ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjAxNTIgZWNyIDExMzI0MjAxNTJdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzY5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDQwNzI0MzgxNjYsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMDE1NCBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Njk6IEZsYWdzIFtTLl0sIHNlcSAxNTY3MzA0OTAsIGFjayA0MDcyNDM4MTY3LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MjAxNTQgZWNyIDExMzI0MjAxNTQsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwMTU0IGVjciAxMTMyNDIwMTU0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMToxMSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjAxNTQgZWNyIDExMzI0MjAxNTRdLCBsZW5ndGggMTA6IFJFU1AgbGVuZ3RoIG5lZ2F0aXZlIGFuZCBub3QgLTEgImhpIgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Njk6IEZsYWdzIFsuXSwgYWNrIDExLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwMTU0IGVjciAxMTMyNDIwMTU0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzY5OiBGbGFncyBbUC5dLCBzZXEgMTo1NywgYWNrIDExLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwMTU0IGVjciAxMTMyNDIwMTU0XSwgbGVuZ3RoIDU2OiBSRVNQICJFUlIgdW5rbm93biBjb21tYW5kICckLTIwJyIgIkVSUiB1bmtub3duIGNvbW1hbmQgJ2hpJyIKK0lQIDEyNy4wLjAuMS41Mjc2OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA1Nywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDE1NCBlY3IgMTEzMjQyMDE1NF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NjkgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDExLCBhY2sgNTcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjA0NTQgZWNyIDExMzI0MjAxNTRdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Njk6IEZsYWdzIFtGLl0sIHNlcSA1NywgYWNrIDEyLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwNDU0IGVjciAxMTMyNDIwNDU0XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc2OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayA1OCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDQ1NCBlY3IgMTEzMjQyMDQ1NF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMzc0NTQ5MzQ1LCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MjA0NTcgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzcwOiBGbGFncyBbUy5dLCBzZXEgMTE0NjYzMDYzNCwgYWNrIDM3NDU0OTM0Niwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIwNDU3IGVjciAxMTMyNDIwNDU3LG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDQ1NyBlY3IgMTEzMjQyMDQ1N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NywgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjA0NTcgZWNyIDExMzI0MjA0NTddLCBsZW5ndGggNjogUkVTUCBbfFJFU1BdCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3MDogRmxhZ3MgWy5dLCBhY2sgNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDQ1NyBlY3IgMTEzMjQyMDQ1N10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzAgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIwNzU3IGVjciAxMTMyNDIwNDU3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzcwOiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjA3NTcgZWNyIDExMzI0MjA3NTddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzcwID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjA3NTcgZWNyIDExMzI0MjA3NTddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzcxID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDI1NDEyNDE1MjMsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMDc2MCBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzE6IEZsYWdzIFtTLl0sIHNlcSAzNDgyNDY4ODg4LCBhY2sgMjU0MTI0MTUyNCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIwNzYwIGVjciAxMTMyNDIwNzYwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDc2MCBlY3IgMTEzMjQyMDc2MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NywgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjA3NjAgZWNyIDExMzI0MjA3NjBdLCBsZW5ndGggNjogUkVTUCBbfFJFU1BdCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3MTogRmxhZ3MgWy5dLCBhY2sgNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMDc2MCBlY3IgMTEzMjQyMDc2MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzEgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxMDU5IGVjciAxMTMyNDIwNzYwXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzcxOiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEwNTkgZWNyIDExMzI0MjEwNTldLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzcxID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEwNTkgZWNyIDExMzI0MjEwNTldLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzcyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDMzNzYwMTkxNDUsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMTA2MCBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzI6IEZsYWdzIFtTLl0sIHNlcSAyNDQ5MDExOTkxLCBhY2sgMzM3NjAxOTE0Niwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIxMDYwIGVjciAxMTMyNDIxMDYwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTA2MCBlY3IgMTEzMjQyMTA2MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NywgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEwNjAgZWNyIDExMzI0MjEwNjBdLCBsZW5ndGggNjogUkVTUCBbfFJFU1BdCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3MjogRmxhZ3MgWy5dLCBhY2sgNywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTA2MCBlY3IgMTEzMjQyMTA2MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzIgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDcsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxMzYwIGVjciAxMTMyNDIxMDYwXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzcyOiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDgsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEzNjAgZWNyIDExMzI0MjEzNjBdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzcyID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEzNjAgZWNyIDExMzI0MjEzNjBdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzczID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDM1Njc5NzA5MDksIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMTM2MyBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzM6IEZsYWdzIFtTLl0sIHNlcSAzMzY2MzcwNzM5LCBhY2sgMzU2Nzk3MDkxMCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIxMzYzIGVjciAxMTMyNDIxMzYzLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTM2MyBlY3IgMTEzMjQyMTM2M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6NiwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjEzNjMgZWNyIDExMzI0MjEzNjNdLCBsZW5ndGggNTogUkVTUCBudWxsCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3MzogRmxhZ3MgWy5dLCBhY2sgNiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTM2MyBlY3IgMTEzMjQyMTM2M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzMgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDYsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxNjYzIGVjciAxMTMyNDIxMzYzXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzczOiBGbGFncyBbRi5dLCBzZXEgMSwgYWNrIDcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE2NjMgZWNyIDExMzI0MjE2NjNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzczID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE2NjMgZWNyIDExMzI0MjE2NjNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDMzNzQ5NDMzNzksIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMTY2NSBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzU6IEZsYWdzIFtTLl0sIHNlcSAzNjM4NzAwNzAsIGFjayAzMzc0OTQzMzgwLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MjE2NjUgZWNyIDExMzI0MjE2NjUsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3NSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxNjY1IGVjciAxMTMyNDIxNjY1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3NSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMTo2LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTY2NSBlY3IgMTEzMjQyMTY2NV0sIGxlbmd0aCA1OiBSRVNQIG51bGwKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc1OiBGbGFncyBbLl0sIGFjayA2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxNjY1IGVjciAxMTMyNDIxNjY1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc1OiBGbGFncyBbUC5dLCBzZXEgMToyOSwgYWNrIDYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE2NjUgZWNyIDExMzI0MjE2NjVdLCBsZW5ndGggMjg6IFJFU1AgIkVSUiB1bmtub3duIGNvbW1hbmQgJyQtMSciCitJUCAxMjcuMC4wLjEuNTI3NzUgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE2NjUgZWNyIDExMzI0MjE2NjVdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA2LCBhY2sgMjksIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE5NjUgZWNyIDExMzI0MjE2NjVdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzU6IEZsYWdzIFtGLl0sIHNlcSAyOSwgYWNrIDcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE5NjUgZWNyIDExMzI0MjE5NjVdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc1ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDMwLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxOTY1IGVjciAxMTMyNDIxOTY1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3NiA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbU10sIHNlcSAyNzgwODYzOTAyLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MjE5NjkgZWNyIDAsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc2OiBGbGFncyBbUy5dLCBzZXEgMjc4OTA2NTYxNiwgYWNrIDI3ODA4NjM5MDMsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMTk2OSBlY3IgMTEzMjQyMTk2OSxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE5NjkgZWNyIDExMzI0MjE5NjldLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjY0LCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMTk2OSBlY3IgMTEzMjQyMTk2OV0sIGxlbmd0aCA2MzogUkVTUCAiSU5DUiIgInoiICJJTkNSIiAieiIgIklOQ1IiICJ6IgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3NzY6IEZsYWdzIFsuXSwgYWNrIDY0LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxOTY5IGVjciAxMTMyNDIxOTY5XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc2OiBGbGFncyBbUC5dLCBzZXEgMToxNiwgYWNrIDY0LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIxOTY5IGVjciAxMTMyNDIxOTY5XSwgbGVuZ3RoIDE1OiBSRVNQICI2OSIgIjcwIiAiNzEiCitJUCAxMjcuMC4wLjEuNTI3NzYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMTYsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjE5NjkgZWNyIDExMzI0MjE5NjldLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc2ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSA2NCwgYWNrIDE2LCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyMjcwIGVjciAxMTMyNDIxOTY5XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc2OiBGbGFncyBbRi5dLCBzZXEgMTYsIGFjayA2NSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjI3MCBlY3IgMTEzMjQyMjI3MF0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzYgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMTcsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjIyNzAgZWNyIDExMzI0MjIyNzBdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDM1NzMzOTQ3Niwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIyMjcxIGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3NzogRmxhZ3MgW1MuXSwgc2VxIDMxMjM5MjUyMTEsIGFjayAzNTczMzk0NzcsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMjI3MSBlY3IgMTEzMjQyMjI3MSxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjIyNzEgZWNyIDExMzI0MjIyNzFdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtQLl0sIHNlcSAxOjIxLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjI3MSBlY3IgMTEzMjQyMjI3MV0sIGxlbmd0aCAyMDogUkVTUCAiUElORyIgIlBJTkciICJQSU5HIgorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Nzc6IEZsYWdzIFsuXSwgYWNrIDIxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyMjcxIGVjciAxMTMyNDIyMjcxXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc3OiBGbGFncyBbUC5dLCBzZXEgMToyMiwgYWNrIDIxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyMjcxIGVjciAxMTMyNDIyMjcxXSwgbGVuZ3RoIDIxOiBSRVNQICJQT05HIiAiUE9ORyIgIlBPTkciCitJUCAxMjcuMC4wLjEuNTI3NzcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjIyNzEgZWNyIDExMzI0MjIyNzFdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc3ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtGLl0sIHNlcSAyMSwgYWNrIDIyLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyNTcxIGVjciAxMTMyNDIyMjcxXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc3OiBGbGFncyBbRi5dLCBzZXEgMjIsIGFjayAyMiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjU3MSBlY3IgMTEzMjQyMjU3MV0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzcgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMjMsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjI1NzEgZWNyIDExMzI0MjI1NzFdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc4ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFtTXSwgc2VxIDIwNjk1Njg3NzIsIHdpbiA0MzY5MCwgb3B0aW9ucyBbbXNzIDY1NDk1LHNhY2tPSyxUUyB2YWwgMTEzMjQyMjU3MyBlY3IgMCxub3Asd3NjYWxlIDddLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Nzg6IEZsYWdzIFtTLl0sIHNlcSAxMDg1Nzk2NDk3LCBhY2sgMjA2OTU2ODc3Mywgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIyNTczIGVjciAxMTMyNDIyNTczLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgWy5dLCBhY2sgMSwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjU3MyBlY3IgMTEzMjQyMjU3M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1AuXSwgc2VxIDE6MjEsIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyNTczIGVjciAxMTMyNDIyNTczXSwgbGVuZ3RoIDIwOiBSRVNQICJQSU5HIiAiUElORyIgIlBJTkciCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3ODogRmxhZ3MgWy5dLCBhY2sgMjEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjI1NzMgZWNyIDExMzI0MjI1NzNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Nzg6IEZsYWdzIFtQLl0sIHNlcSAxOjIyLCBhY2sgMjEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjI1NzMgZWNyIDExMzI0MjI1NzNdLCBsZW5ndGggMjE6IFJFU1AgIlBPTkciICJQT05HIiAiUE9ORyIKK0lQIDEyNy4wLjAuMS41Mjc3OCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyMiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjU3MyBlY3IgMTEzMjQyMjU3M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzggPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW0YuXSwgc2VxIDIxLCBhY2sgMjIsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjI4NzMgZWNyIDExMzI0MjI1NzNdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjYzNzkgPiAxMjcuMC4wLjEuNTI3Nzg6IEZsYWdzIFtGLl0sIHNlcSAyMiwgYWNrIDIyLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyODczIGVjciAxMTMyNDIyODczXSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3OCA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAyMywgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjg3MyBlY3IgMTEzMjQyMjg3M10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNTI3NzkgPiAxMjcuMC4wLjEuNjM3OTogRmxhZ3MgW1NdLCBzZXEgMTU3ODQ3OTEyMCwgd2luIDQzNjkwLCBvcHRpb25zIFttc3MgNjU0OTUsc2Fja09LLFRTIHZhbCAxMTMyNDIyODc1IGVjciAwLG5vcCx3c2NhbGUgN10sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3OTogRmxhZ3MgW1MuXSwgc2VxIDI1Mjk5NTcwNDYsIGFjayAxNTc4NDc5MTIxLCB3aW4gNDM2OTAsIG9wdGlvbnMgW21zcyA2NTQ5NSxzYWNrT0ssVFMgdmFsIDExMzI0MjI4NzUgZWNyIDExMzI0MjI4NzUsbm9wLHdzY2FsZSA3XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbLl0sIGFjayAxLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyODc1IGVjciAxMTMyNDIyODc1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbUC5dLCBzZXEgMToyNCwgYWNrIDEsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjI4NzUgZWNyIDExMzI0MjI4NzVdLCBsZW5ndGggMjM6IFJFU1AgIlBJTkciICJQSU5HIiAiUElORyIKK0lQIDEyNy4wLjAuMS42Mzc5ID4gMTI3LjAuMC4xLjUyNzc5OiBGbGFncyBbLl0sIGFjayAyNCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjg3NSBlY3IgMTEzMjQyMjg3NV0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3OTogRmxhZ3MgW1AuXSwgc2VxIDE6MjIsIGFjayAyNCwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMjg3NSBlY3IgMTEzMjQyMjg3NV0sIGxlbmd0aCAyMTogUkVTUCAiUE9ORyIgIlBPTkciICJQT05HIgorSVAgMTI3LjAuMC4xLjUyNzc5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIyLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIyODc1IGVjciAxMTMyNDIyODc1XSwgbGVuZ3RoIDAKK0lQIDEyNy4wLjAuMS41Mjc3OSA+IDEyNy4wLjAuMS42Mzc5OiBGbGFncyBbRi5dLCBzZXEgMjQsIGFjayAyMiwgd2luIDM0Miwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgMTEzMjQyMzE3NSBlY3IgMTEzMjQyMjg3NV0sIGxlbmd0aCAwCitJUCAxMjcuMC4wLjEuNjM3OSA+IDEyNy4wLjAuMS41Mjc3OTogRmxhZ3MgW0YuXSwgc2VxIDIyLCBhY2sgMjUsIHdpbiAzNDIsIG9wdGlvbnMgW25vcCxub3AsVFMgdmFsIDExMzI0MjMxNzUgZWNyIDExMzI0MjMxNzVdLCBsZW5ndGggMAorSVAgMTI3LjAuMC4xLjUyNzc5ID4gMTI3LjAuMC4xLjYzNzk6IEZsYWdzIFsuXSwgYWNrIDIzLCB3aW4gMzQyLCBvcHRpb25zIFtub3Asbm9wLFRTIHZhbCAxMTMyNDIzMTc1IGVjciAxMTMyNDIzMTc1XSwgbGVuZ3RoIDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3Jlc3BfM19tYWxpY2lvdXMucGNhcCBiL3Rlc3RzL3Jlc3BfM19tYWxpY2lvdXMucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMmNkNTNmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcmVzcF8zX21hbGljaW91cy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbC0xNC1kYW92dnYub3V0IGIvdGVzdHMvcnBsLTE0LWRhb3Z2di5vdXQKaW5kZXggNzg2OWU2Yi4uN2U0YjhhNSAxMDA2NDQKLS0tIGEvdGVzdHMvcnBsLTE0LWRhb3Z2di5vdXQKKysrIGIvdGVzdHMvcnBsLTE0LWRhb3Z2di5vdXQKQEAgLTEgKzEgQEAKLUlQNiAoaGxpbSA2NCwgbmV4dC1oZWFkZXIgSUNNUHY2ICg1OCkgcGF5bG9hZCBsZW5ndGg6IDI0KSBmZTgwOjoyMTY6M2VmZjpmZTExOjM0MjQgPiBmZjAyOjoxOiBbaWNtcDYgc3VtIG9rXSBJQ01QNiwgUlBMLCAoQ0xSKURlc3RpbmF0aW9uIEFkdmVydGlzZW1lbnQgT2JqZWN0IFtkYWdpZDpwYW5kb3JhIGlzIGZ1bjB4MGFsLHNlcToxLGluc3RhbmNlOjEsRGFnaWQsNDBdCitJUDYgKGhsaW0gNjQsIG5leHQtaGVhZGVyIElDTVB2NiAoNTgpIHBheWxvYWQgbGVuZ3RoOiAyNCkgZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0ID4gZmYwMjo6MTogW2ljbXA2IHN1bSBva10gSUNNUDYsIFJQTCwgKENMUilEZXN0aW5hdGlvbiBBZHZlcnRpc2VtZW50IE9iamVjdCBbZGFnaWQ6NzA2MTo2ZTY0OjZmNzI6NjEyMDo2OTczOjIwNjY6NzU2ZTphNmMsc2VxOjEsaW5zdGFuY2U6MSxEYWdpZCw0MF0KZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbC0xOS1waWNrZGFnLm91dCBiL3Rlc3RzL3JwbC0xOS1waWNrZGFnLm91dAppbmRleCAyNDYwYWRhLi5kM2M0MWVlIDEwMDY0NAotLS0gYS90ZXN0cy9ycGwtMTktcGlja2RhZy5vdXQKKysrIGIvdGVzdHMvcnBsLTE5LXBpY2tkYWcub3V0CkBAIC0xICsxIEBACi1JUDYgKGhsaW0gNjQsIG5leHQtaGVhZGVyIElDTVB2NiAoNTgpIHBheWxvYWQgbGVuZ3RoOiA1NikgZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0ID4gZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0OiBbaWNtcDYgc3VtIG9rXSBJQ01QNiwgUlBMLCAoQ0xSKURlc3RpbmF0aW9uIEFkdmVydGlzZW1lbnQgT2JqZWN0IFtkYWdpZDpUMTB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwLHNlcToxMCxpbnN0YW5jZTo0MixEYWdpZCw0MF0gb3B0OnJwbHRhcmdldCBsZW46MjUgIG9wdDpwYWQwIG9wdDpwYWQwIG9wdDpwYWQwIG9wdDpwYWQwIG9wdDpwYWQwIG9wdDpwYWQwIG9wdDpwYWQwCitJUDYgKGhsaW0gNjQsIG5leHQtaGVhZGVyIElDTVB2NiAoNTgpIHBheWxvYWQgbGVuZ3RoOiA1NikgZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0ID4gZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0OiBbaWNtcDYgc3VtIG9rXSBJQ01QNiwgUlBMLCAoQ0xSKURlc3RpbmF0aW9uIEFkdmVydGlzZW1lbnQgT2JqZWN0IFtkYWdpZDo1NDMxOjosc2VxOjEwLGluc3RhbmNlOjQyLERhZ2lkLDQwXSBvcHQ6cnBsdGFyZ2V0IGxlbjoyNSAgb3B0OnBhZDAgb3B0OnBhZDAgb3B0OnBhZDAgb3B0OnBhZDAgb3B0OnBhZDAgb3B0OnBhZDAgb3B0OnBhZDAKZGlmZiAtLWdpdCBhL3Rlc3RzL3JwbC0xOS1waWNrZGFndnZ2Lm91dCBiL3Rlc3RzL3JwbC0xOS1waWNrZGFndnZ2Lm91dAppbmRleCBiZDkzNDUzLi5kZWVlMDMzIDEwMDY0NAotLS0gYS90ZXN0cy9ycGwtMTktcGlja2RhZ3Z2di5vdXQKKysrIGIvdGVzdHMvcnBsLTE5LXBpY2tkYWd2dnYub3V0CkBAIC0xICsxIEBACi1JUDYgKGhsaW0gNjQsIG5leHQtaGVhZGVyIElDTVB2NiAoNTgpIHBheWxvYWQgbGVuZ3RoOiA1NikgZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0ID4gZmU4MDo6MjE2OjNlZmY6ZmUxMTozNDI0OiBbaWNtcDYgc3VtIG9rXSBJQ01QNiwgUlBMLCAoQ0xSKURlc3RpbmF0aW9uIEFkdmVydGlzZW1lbnQgT2JqZWN0IFtkYWdpZDpUMTB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwMHgwMDB4MDAweDAwLHNlcToxMCxpbnN0YW5jZTo0MixEYWdpZCw0MF0gb3B0OnJwbHRhcmdldCBsZW46MjUgIDB4MDAwMDogIDAwODAgMjAwMSAwZGI4IDAwMDEgMDAwMCAwMjE2IDNlZmYgZmUxMSAweDAwMTA6ICAzNDI0IDAwMDAgMDAwMCAwMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMAorSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBJQ01QdjYgKDU4KSBwYXlsb2FkIGxlbmd0aDogNTYpIGZlODA6OjIxNjozZWZmOmZlMTE6MzQyNCA+IGZlODA6OjIxNjozZWZmOmZlMTE6MzQyNDogW2ljbXA2IHN1bSBva10gSUNNUDYsIFJQTCwgKENMUilEZXN0aW5hdGlvbiBBZHZlcnRpc2VtZW50IE9iamVjdCBbZGFnaWQ6NTQzMTo6LHNlcToxMCxpbnN0YW5jZTo0MixEYWdpZCw0MF0gb3B0OnJwbHRhcmdldCBsZW46MjUgIDB4MDAwMDogIDAwODAgMjAwMSAwZGI4IDAwMDEgMDAwMCAwMjE2IDNlZmYgZmUxMSAweDAwMTA6ICAzNDI0IDAwMDAgMDAwMCAwMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMCBvcHQ6cGFkMApkaWZmIC0tZ2l0IGEvdGVzdHMvcnBsLTI2LXNlbmRkYW92di5vdXQgYi90ZXN0cy9ycGwtMjYtc2VuZGRhb3Z2Lm91dAppbmRleCA2ZDExYzgxLi4xYjY0MmJiIDEwMDY0NAotLS0gYS90ZXN0cy9ycGwtMjYtc2VuZGRhb3Z2Lm91dAorKysgYi90ZXN0cy9ycGwtMjYtc2VuZGRhb3Z2Lm91dApAQCAtMSArMSBAQAotSVA2IChobGltIDY0LCBuZXh0LWhlYWRlciBJQ01QdjYgKDU4KSBwYXlsb2FkIGxlbmd0aDogMjQpIGZlODA6OjIxNjozZWZmOmZlMTE6MzQyNCA+IGZmMDI6OjE6IFtpY21wNiBzdW0gb2tdIElDTVA2LCBSUEwsIChDTFIpRGVzdGluYXRpb24gQWR2ZXJ0aXNlbWVudCBPYmplY3QgQWNrIFtkYWdpZDp0aGlzaXNteWRpY2VkYWcyLHNlcToxMSxpbnN0YW5jZTo0MyxzdGF0dXM6MF0KK0lQNiAoaGxpbSA2NCwgbmV4dC1oZWFkZXIgSUNNUHY2ICg1OCkgcGF5bG9hZCBsZW5ndGg6IDI0KSBmZTgwOjoyMTY6M2VmZjpmZTExOjM0MjQgPiBmZjAyOjoxOiBbaWNtcDYgc3VtIG9rXSBJQ01QNiwgUlBMLCAoQ0xSKURlc3RpbmF0aW9uIEFkdmVydGlzZW1lbnQgT2JqZWN0IEFjayBbZGFnaWQ6NzQ2ODo2OTczOjY5NzM6NmQ3OTo2NDY5OjYzNjU6NjQ2MTo2NzMyLHNlcToxMSxpbnN0YW5jZTo0MyxzdGF0dXM6MF0KZGlmZiAtLWdpdCBhL3Rlc3RzL3JzdnAtaW5mLWxvb3AtMi12Lm91dCBiL3Rlc3RzL3JzdnAtaW5mLWxvb3AtMi12Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wMzY5NmZiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcnN2cC1pbmYtbG9vcC0yLXYub3V0CkBAIC0wLDAgKzEsMTIgQEAKK0lQICh0b3MgMHgwLCB0dGwgMjU0LCBpZCAwLCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBSU1ZQICg0NiksIGxlbmd0aCAyNjgsIG9wdGlvbnMgKFJBKSkKKyAgICAxMC4zMS4wLjEgPiAxMC4zMy4wLjE6IAorCVJTVlB2MSBQYXRoIE1lc3NhZ2UgKDEpLCBGbGFnczogW25vbmVdLCBsZW5ndGg6IDI0NCwgdHRsOiAyNTQsIGNoZWNrc3VtOiAweDBjYTMKKwkgIFNlc3Npb24gT2JqZWN0ICgxKSBGbGFnczogW3JlamVjdCBpZiB1bmtub3duXSwgQ2xhc3MtVHlwZTogVHVubmVsIElQdjQgKDcpLCBsZW5ndGg6IDE2CisJICAgIElQdjQgVHVubmVsIEVuZFBvaW50OiAxMC4zMy4wLjEsIFR1bm5lbCBJRDogMHgwMDA0LCBFeHRlbmRlZCBUdW5uZWwgSUQ6IDEwLjMxLjAuMQorCSAgUlNWUCBIb3AgT2JqZWN0ICgzKSBGbGFnczogW3JlamVjdCBpZiB1bmtub3duXSwgQ2xhc3MtVHlwZTogSVB2NCAoMSksIGxlbmd0aDogMTIKKwkgICAgUHJldmlvdXMvTmV4dCBJbnRlcmZhY2U6IDEwLjEuMi4xLCBMb2dpY2FsIEludGVyZmFjZSBIYW5kbGU6IDB4OTgwMDY3MDAKKwkgIFRpbWUgVmFsdWVzIE9iamVjdCAoNSkgRmxhZ3M6IFtyZWplY3QgaWYgdW5rbm93bl0sIENsYXNzLVR5cGU6IDEgKDEpLCBsZW5ndGg6IDgKKwkgICAgUmVmcmVzaCBQZXJpb2Q6IDMwMDAwbXMKKwkgIEVSTyBPYmplY3QgKDIwKSBGbGFnczogW3JlamVjdCBpZiB1bmtub3duXSwgQ2xhc3MtVHlwZTogSVB2NCAoMSksIGxlbmd0aDogMzYKKwkgICAgU3Vib2JqZWN0IFR5cGU6IElQdjQgcHJlZml4LCBsZW5ndGggOCwgU3RyaWN0LCAxMC4xLjIuMi8zMiwgRmxhZ3M6IFtub25lXQorCSAgICBTdWJvYmplY3QgVHlwZTogSVB2NCBwcmVmaXgsIGxlbmd0aCA4IEVSUk9SOiBQcmVmaXggbGVuZ3RoIDcwICE9IDMyIChpbnZhbGlkKQpkaWZmIC0tZ2l0IGEvdGVzdHMvcnN2cC1pbmYtbG9vcC0yLnBjYXAgYi90ZXN0cy9yc3ZwLWluZi1sb29wLTIucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMmNhYTJhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcnN2cC1pbmYtbG9vcC0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvcnRwLXNlZy1mYXVsdC0xLm91dCBiL3Rlc3RzL3J0cC1zZWctZmF1bHQtMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE4YWI4YwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3J0cC1zZWctZmF1bHQtMS5vdXQKQEAgLTAsMCArMSwyIEBACitJUCAodG9zIDB4MCwgdHRsIDI1NSwgaWQgMTU4LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAzNywgYmFkIGNrc3VtIGQ3ZTAgKC0+OWNmOCkhKQorICAgIDIwOC4yMS4yLjE4NC4xNTEyID4gMTAuMS4xLjk5LjUzOiB1ZHAvcnRwIDU3MzIzIGMzMSArKiA0NjUyIDM4MTU4MDQ5OTYgW3xydHBdCmRpZmYgLS1naXQgYS90ZXN0cy9ydHAtc2VnLWZhdWx0LTEucGNhcCBiL3Rlc3RzL3J0cC1zZWctZmF1bHQtMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVhMDUxMGMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ydHAtc2VnLWZhdWx0LTEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9ydHAtc2VnLWZhdWx0LTIub3V0IGIvdGVzdHMvcnRwLXNlZy1mYXVsdC0yLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzUwNGRhCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvcnRwLXNlZy1mYXVsdC0yLm91dApAQCAtMCwwICsxLDIgQEAKK0lQICh0b3MgMHgwLCB0dGwgMjUyLCBpZCA4MjY0LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBVRFAgKDE3KSwgbGVuZ3RoIDEwMCwgYmFkIGNrc3VtIGY4MDMgKC0+YzAwZikhKQorICAgIDIwOC4yMS4yLjE4NC4xNTEyID4gMTAuMS4xLjk5LjUxNDogdWRwL3J0cCAtMTIgYzMxICsgMzE5MjYgMzg4MTAyMjUyOSA0NTUxMjM5ODEgW3xydHBdCmRpZmYgLS1naXQgYS90ZXN0cy9ydHAtc2VnLWZhdWx0LTIucGNhcCBiL3Rlc3RzL3J0cC1zZWctZmF1bHQtMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjc3ZmVmYmYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9ydHAtc2VnLWZhdWx0LTIucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy9zY3BzX2ludmFsaWQub3V0IGIvdGVzdHMvc2Nwc19pbnZhbGlkLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMWU4Mzg0Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc2Nwc19pbnZhbGlkLm91dApAQCAtMCwwICsxLDIgQEAKK0lQIDE4Mi4xODEuMjAyLjIzMC41Mjc1MCA+IDgzLjI1My4xMDIuODMuNjM3NjQ6IEZsYWdzIFtTXSwgc2VxIDM3NTcyNjQ5OTksIHdpbiA4MTkyLCBvcHRpb25zIFttc3MgMTQ1Mixub3Asd3NjYWxlIDIsbm9wLG5vcCxzY3BzW2JhZCBvcHRdPgorSVAgMTgyLjE4MS4xNTguMjEuNTMwNTIgPiA4My4yNTMuMTAyLjgzLjMwMTIyOiBGbGFncyBbU10sIHNlcSAyODI0NjI0NDE0LCB3aW4gODE5Miwgb3B0aW9ucyBbbXNzIDE0NTIsbm9wLHdzY2FsZSAyLG5vcCxub3Asc2Nwc1tiYWQgb3B0XT4KZGlmZiAtLWdpdCBhL3Rlc3RzL3NjcHNfaW52YWxpZC5wY2FwIGIvdGVzdHMvc2Nwc19pbnZhbGlkLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTQyMGJhZQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NjcHNfaW52YWxpZC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTEub3V0IGIvdGVzdHMvc25tcC1oZWFwb3ZlcmZsb3ctMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjg4NTYwNwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTEub3V0CkBAIC0wLDAgKzEsMjEgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMTA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMjA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMzA6ICAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDEwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDIwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwICAwMDAwMDAwMDAwMDAwMDAwCisJMHgwMDMwOiAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgMDAwMDAwMDAwMDAwMDAwMAorCTB4MDAxMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgMDAwMDAwMDAwMDAwMDAwMAorCTB4MDAyMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgMDAwMDAwMDAwMDAwMDAwMAorCTB4MDAzMDogIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMTA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMjA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgMzAzMCAzMDMwIDMwMzAgIDAwMDAwMDAwMDAwMDAwMDAKKwkweDAwMzA6ICAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwCitJUCA0OC40OC40OC40OC4xMjMzNiA+IDQ4LjQ4LjQ4LjQ4LjE2MTogIFt8c25tcF0KZGlmZiAtLWdpdCBhL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTEucGNhcCBiL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44M2U1NzU5Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc25tcC1oZWFwb3ZlcmZsb3ctMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTIub3V0IGIvdGVzdHMvc25tcC1oZWFwb3ZlcmZsb3ctMi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTg3ODkxNQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NubXAtaGVhcG92ZXJmbG93LTIub3V0CkBAIC0wLDAgKzEgQEAKK0lQIDQ4LjQ4LjQ4LjQ4LjEyMzM2ID4gNDguNDguNDguNDguMTYyOiAgW3xzbm1wXQpkaWZmIC0tZ2l0IGEvdGVzdHMvc25tcC1oZWFwb3ZlcmZsb3ctMi5wY2FwIGIvdGVzdHMvc25tcC1oZWFwb3ZlcmZsb3ctMi5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE5ZmQyNDgKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zbm1wLWhlYXBvdmVyZmxvdy0yLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3BiX2JwZHV2NC12Lm91dCBiL3Rlc3RzL3NwYl9icGR1djQtdi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDE5YjI0OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3NwYl9icGR1djQtdi5vdXQKQEAgLTAsMCArMSw0MDAgQEAKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKworU1RQIDgwMi4xYXEsIFJhcGlkIFNUUCwgQ0lTVCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBsZW5ndGggMjA1CisJcG9ydC1yb2xlIERlc2lnbmF0ZWQsIENJU1Qgcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIGV4dC1wYXRoY29zdCAwCisJQ0lTVCByZWdpb25hbC1yb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcG9ydC1pZCA4MDAzLAorCW1lc3NhZ2UtYWdlIDAuMDBzLCBtYXgtYWdlIDIwLjAwcywgaGVsbG8tdGltZSAyLjAwcywgZm9yd2FyZGluZy1kZWxheSAxNS4wMHMKKwl2M2xlbiA4MCwgTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgcmV2IDAsCisJCWRpZ2VzdCA2N2Q3NjhkZmE5NDhlYjVlOWZkNTQwNzdlODA5NzVhMiwgQ0lTVCBpbnQtcm9vdC1wYXRoY29zdCAwLAorCUNJU1QgYnJpZGdlLWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgcmVtYWluaW5nLWhvcHMgMjAKKwlNU1RJIDEwLCBGbGFncyBbTGVhcm4sIEZvcndhcmRdLCBwb3J0LXJvbGUgRGVzaWduYXRlZAorCQlNU1RJIHJlZ2lvbmFsLXJvb3QtaWQgODAwYS41Mjo1NDowMDo0NTo1ZjoxNSwgcGF0aGNvc3QgMAorCQlNU1RJIGJyaWRnZS1wcmlvIDgsIHBvcnQtcHJpbyA4LCBob3BzIDIwCisJdjRsZW4gODUsIEFVWE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIFJldiAwLAorCQlkaWdlc3QgYzhiZDk0NmEwMDgxNWY4NmFjZTYxMmI5Zjg2MTYyODMKKwlBZ3JlZW1lbnQgbnVtIDAsIERpc2NhcmRlZCBBZ3JlZW1lbnQgbnVtIDAsIEFncmVlbWVudCB2YWxpZC1mbGFnIDAsCisJUmVzdHJpY3RlZCByb2xlLWZsYWc6IDAsIEZvcm1hdCBpZCAwIGNhcCAwLCBDb252ZW50aW9uIGlkIDIgY2FwIDMyLAorCUVkZ2UgY291bnQgMzIsIEFncmVlbWVudCBkaWdlc3QgMDAwMDAwMGU5MTg5OTRmYTljYTAwMzk4ZDkxMzhhM2U1NDAwMDAwMAorCitTVFAgODAyLjFhcSwgUmFwaWQgU1RQLCBDSVNUIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIGxlbmd0aCAyMDUKKwlwb3J0LXJvbGUgRGVzaWduYXRlZCwgQ0lTVCByb290LWlkIDgwMDAuNTI6NTQ6MDA6NDU6NWY6MTUsIENJU1QgZXh0LXBhdGhjb3N0IDAKKwlDSVNUIHJlZ2lvbmFsLXJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBwb3J0LWlkIDgwMDMsCisJbWVzc2FnZS1hZ2UgMC4wMHMsIG1heC1hZ2UgMjAuMDBzLCBoZWxsby10aW1lIDIuMDBzLCBmb3J3YXJkaW5nLWRlbGF5IDE1LjAwcworCXYzbGVuIDgwLCBNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCByZXYgMCwKKwkJZGlnZXN0IDY3ZDc2OGRmYTk0OGViNWU5ZmQ1NDA3N2U4MDk3NWEyLCBDSVNUIGludC1yb290LXBhdGhjb3N0IDAsCisJQ0lTVCBicmlkZ2UtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCByZW1haW5pbmctaG9wcyAyMAorCU1TVEkgMTAsIEZsYWdzIFtMZWFybiwgRm9yd2FyZF0sIHBvcnQtcm9sZSBEZXNpZ25hdGVkCisJCU1TVEkgcmVnaW9uYWwtcm9vdC1pZCA4MDBhLjUyOjU0OjAwOjQ1OjVmOjE1LCBwYXRoY29zdCAwCisJCU1TVEkgYnJpZGdlLXByaW8gOCwgcG9ydC1wcmlvIDgsIGhvcHMgMjAKKwl2NGxlbiA4NSwgQVVYTUNJRCBOYW1lIElFRUU4MDIuMSBTUEIgRGVmYXVsdCwgUmV2IDAsCisJCWRpZ2VzdCBjOGJkOTQ2YTAwODE1Zjg2YWNlNjEyYjlmODYxNjI4MworCUFncmVlbWVudCBudW0gMCwgRGlzY2FyZGVkIEFncmVlbWVudCBudW0gMCwgQWdyZWVtZW50IHZhbGlkLWZsYWcgMCwKKwlSZXN0cmljdGVkIHJvbGUtZmxhZzogMCwgRm9ybWF0IGlkIDAgY2FwIDAsIENvbnZlbnRpb24gaWQgMiBjYXAgMzIsCisJRWRnZSBjb3VudCAzMiwgQWdyZWVtZW50IGRpZ2VzdCAwMDAwMDAwZTkxODk5NGZhOWNhMDAzOThkOTEzOGEzZTU0MDAwMDAwCisKK1NUUCA4MDIuMWFxLCBSYXBpZCBTVFAsIENJU1QgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgbGVuZ3RoIDIwNQorCXBvcnQtcm9sZSBEZXNpZ25hdGVkLCBDSVNUIHJvb3QtaWQgODAwMC41Mjo1NDowMDo0NTo1ZjoxNSwgQ0lTVCBleHQtcGF0aGNvc3QgMAorCUNJU1QgcmVnaW9uYWwtcm9vdC1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHBvcnQtaWQgODAwMywKKwltZXNzYWdlLWFnZSAwLjAwcywgbWF4LWFnZSAyMC4wMHMsIGhlbGxvLXRpbWUgMi4wMHMsIGZvcndhcmRpbmctZGVsYXkgMTUuMDBzCisJdjNsZW4gODAsIE1DSUQgTmFtZSBJRUVFODAyLjEgU1BCIERlZmF1bHQsIHJldiAwLAorCQlkaWdlc3QgNjdkNzY4ZGZhOTQ4ZWI1ZTlmZDU0MDc3ZTgwOTc1YTIsIENJU1QgaW50LXJvb3QtcGF0aGNvc3QgMCwKKwlDSVNUIGJyaWRnZS1pZCA4MDAwLjUyOjU0OjAwOjQ1OjVmOjE1LCBDSVNUIHJlbWFpbmluZy1ob3BzIDIwCisJTVNUSSAxMCwgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXSwgcG9ydC1yb2xlIERlc2lnbmF0ZWQKKwkJTVNUSSByZWdpb25hbC1yb290LWlkIDgwMGEuNTI6NTQ6MDA6NDU6NWY6MTUsIHBhdGhjb3N0IDAKKwkJTVNUSSBicmlkZ2UtcHJpbyA4LCBwb3J0LXByaW8gOCwgaG9wcyAyMAorCXY0bGVuIDg1LCBBVVhNQ0lEIE5hbWUgSUVFRTgwMi4xIFNQQiBEZWZhdWx0LCBSZXYgMCwKKwkJZGlnZXN0IGM4YmQ5NDZhMDA4MTVmODZhY2U2MTJiOWY4NjE2MjgzCisJQWdyZWVtZW50IG51bSAwLCBEaXNjYXJkZWQgQWdyZWVtZW50IG51bSAwLCBBZ3JlZW1lbnQgdmFsaWQtZmxhZyAwLAorCVJlc3RyaWN0ZWQgcm9sZS1mbGFnOiAwLCBGb3JtYXQgaWQgMCBjYXAgMCwgQ29udmVudGlvbiBpZCAyIGNhcCAzMiwKKwlFZGdlIGNvdW50IDMyLCBBZ3JlZW1lbnQgZGlnZXN0IDAwMDAwMDBlOTE4OTk0ZmE5Y2EwMDM5OGQ5MTM4YTNlNTQwMDAwMDAKKwpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy0xLm91dCBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMS5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjRjYzA1MwotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMS5vdXQKQEAgLTAsMCArMSwyNyBAQAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAKK1t8c3RwIDgwODQ2NDQxNV0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMS5wY2FwIGIvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy0xLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjFmY2NlOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMi5vdXQgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTIub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGM1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTIub3V0CkBAIC0wLDAgKzEsMjcgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorU1RQIDgwMi4xZFt8c3RwIDgwODQ2NDQxNV0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMi5wY2FwIGIvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy0yLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNTcyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMi5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctMy5vdXQgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTMub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI3M2EwZGYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTMub3V0CkBAIC0wLDAgKzEsMjcgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMAorW3xzdHAgODA4NDY0NDE1XQpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy0zLnBjYXAgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTMucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zZjMzYjBkCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy0zLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy00Lm91dCBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNC5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjJjMzI1OAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNC5vdXQKQEAgLTAsMCArMSwyNyBAQAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwMDAKK1NUUCA4MDIuMWQsIENvbmZpZywgRmxhZ3MgW0xlYXJuLCBGb3J3YXJkXVt8c3RwIDgwODQ2NDQxNV0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNC5wY2FwIGIvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy00LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNzZkMjk1OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNC5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNS5vdXQgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTUub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE3ZGM1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9zdHAtaGVhcG92ZXJmbG93LTUub3V0CkBAIC0wLDAgKzEsMjcgQEAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorMzA6MzA6MzA6MzA6MzA6MzAgPiAzMDozMDozMDozMDozMDozMCwgZXRoZXJ0eXBlIFVua25vd24gKDB4MzAzMCksIGxlbmd0aCA4MDg0NjQ0MzI6IAorCTB4MDAwMDogIDMwMzAgMzAzMCAzMDMwICAgICAgICAgICAgICAgICAgICAgICAgICAgMDAwMDAwCiszMDozMDozMDozMDozMDozMCA+IDMwOjMwOjMwOjMwOjMwOjMwLCBldGhlcnR5cGUgVW5rbm93biAoMHgzMDMwKSwgbGVuZ3RoIDgwODQ2NDQzMjogCisJMHgwMDAwOiAgMzAzMCAzMDMwIDMwMzAgICAgICAgICAgICAgICAgICAgICAgICAgICAwMDAwMDAKKzMwOjMwOjMwOjMwOjMwOjMwID4gMzA6MzA6MzA6MzA6MzA6MzAsIGV0aGVydHlwZSBVbmtub3duICgweDMwMzApLCBsZW5ndGggODA4NDY0NDMyOiAKKwkweDAwMDA6ICAzMDMwIDMwMzAgMzAzMCAgICAgICAgICAgICAgICAgICAgICAgICAgIDAwMDAwMAorU1RQIDgwMi4xZFt8c3RwIDgwODQ2NDQxNV0KZGlmZiAtLWdpdCBhL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNS5wY2FwIGIvdGVzdHMvc3RwLWhlYXBvdmVyZmxvdy01LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uODNiNTcyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3N0cC1oZWFwb3ZlcmZsb3ctNS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3RjcC1hdXRoLWhlYXBvdmVyZmxvdy5vdXQgYi90ZXN0cy90Y3AtYXV0aC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI3ZmY3ZjcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90Y3AtYXV0aC1oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEsMiBAQAorSVAgKHRvcyAweDMwLCB0dGwgNDgsIGlkIDEyMzM2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDEyMzM2LCBiYWQgY2tzdW0gMzAzMCAoLT4yOWE4KSEpCisgICAgNDguNDguNDguNDguMTIzMzYgPiA0OC40OC40OC40OC4xMjMzNjogRmxhZ3MgWy5VXSwgc2VxIDgwODQ2NDQzMjo4MDg0NzY2OTYsIGFjayA4MDg0NjQ0MzIsIHdpbiAxMjMzNiwgdXJnIDEyMzM2LCBvcHRpb25zIFt0Y3AtYW8ga2V5aWQgNDggcm5leHRrZXlpZCA0OCBtYWMgMHgzMDMwMzAzMDMwMzBbfHRjcF0KZGlmZiAtLWdpdCBhL3Rlc3RzL3RjcC1hdXRoLWhlYXBvdmVyZmxvdy5wY2FwIGIvdGVzdHMvdGNwLWF1dGgtaGVhcG92ZXJmbG93LnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTlmODIzZAotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RjcC1hdXRoLWhlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3RjcF9oZWFkZXJfaGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL3RjcF9oZWFkZXJfaGVhcG92ZXJmbG93Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZjgzMGFiCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGNwX2hlYWRlcl9oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEsMiBAQAorSVAgKHRvcyAweDMwLCB0dGwgNDgsIGlkIDEyMzM2LCBvZmZzZXQgMCwgZmxhZ3MgW25vbmVdLCBwcm90byBUQ1AgKDYpLCBsZW5ndGggMTIzMzYsIGJhZCBja3N1bSAzMDMwICgtPjY5YTgpISkKKyAgICA0OC40OC40OC40OC4xMjMzNiA+IDQ4LjQ4LjQ4LjQ4LjEyMzM2OiBbfHRjcF0KZGlmZiAtLWdpdCBhL3Rlc3RzL3RjcF9oZWFkZXJfaGVhcG92ZXJmbG93LnBjYXAgYi90ZXN0cy90Y3BfaGVhZGVyX2hlYXBvdmVyZmxvdy5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjNkNmI3YzcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90Y3BfaGVhZGVyX2hlYXBvdmVyZmxvdy5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3Rlc3RzL3RmdHAtaGVhcG92ZXJmbG93Lm91dCBiL3Rlc3RzL3RmdHAtaGVhcG92ZXJmbG93Lm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDY4ZDQ1Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGZ0cC1oZWFwb3ZlcmZsb3cub3V0CkBAIC0wLDAgKzEsMiBAQAorSVAgKHRvcyAweDMwLCB0dGwgNDgsIGlkIDEyMzM2LCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVURQICgxNyksIGxlbmd0aCAxMjMzNiwgYmFkIGNrc3VtIDMwMzAgKC0+Mjk5ZCkhKQorICAgIDQ4LjQ4LjQ4LjQ4LjY5ID4gNDguNDguNDguNDguMTIzMzY6ICAxMjMwOCBSUlEgIjAwIiBbfHRmdHBdCmRpZmYgLS1naXQgYS90ZXN0cy90ZnRwLWhlYXBvdmVyZmxvdy5wY2FwIGIvdGVzdHMvdGZ0cC1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODgwMGY2Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdGZ0cC1oZWFwb3ZlcmZsb3cucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy90cnVuY19hYWNrLm91dCBiL3Rlc3RzL3RydW5jX2FhY2sub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRiNjUyYzAKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy90cnVuY19hYWNrLm91dApAQCAtMCwwICsxIEBACitQQVAsIEF1dGgtQUNLICgweDAyKSwgaWQgMVt8cGFwXQpkaWZmIC0tZ2l0IGEvdGVzdHMvdHJ1bmNhdGVkLWFhY2sucGNhcCBiL3Rlc3RzL3RydW5jYXRlZC1hYWNrLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjkwYjllOQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3RydW5jYXRlZC1hYWNrLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvdWRsZC1pbmYtbG9vcC0xLXYub3V0IGIvdGVzdHMvdWRsZC1pbmYtbG9vcC0xLXYub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRhZWFiYmQKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91ZGxkLWluZi1sb29wLTEtdi5vdXQKQEAgLTAsMCArMSw5IEBACitVRExEdjEsIENvZGUgUHJvYmUgbWVzc2FnZSAoMSksIEZsYWdzIFtSVCwgUlNZXSAoMHgwMSksIGxlbmd0aCA4MAorCUNoZWNrc3VtIDB4Mzk1NiAodW52ZXJpZmllZCkKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDMxWjdKRworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEdpMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjgsIF5AXkBeQF5BXkBeS0ZPQzEwMjVYNFczXkBeRUZhMC8xCisJTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggNSwgMTVzCisJVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggNSwgNXMKKwlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggNiwgUzEKKwlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDAgKGludmFsaWQpCmRpZmYgLS1naXQgYS90ZXN0cy91ZGxkLWluZi1sb29wLTEucGNhcCBiL3Rlc3RzL3VkbGQtaW5mLWxvb3AtMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjY1MjkzNWMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91ZGxkLWluZi1sb29wLTEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy91ZGxkLXYub3V0IGIvdGVzdHMvdWRsZC12Lm91dAppbmRleCBjYjU1YjhhLi5kNDM2MWY0IDEwMDY0NAotLS0gYS90ZXN0cy91ZGxkLXYub3V0CisrKyBiL3Rlc3RzL3VkbGQtdi5vdXQKQEAgLTEsMjYxICsxLDI2MSBAQAogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDMpLCBsZW5ndGggNjAKIAlDaGVja3N1bSAweDZkODUgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDQsIAotCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEsIDdzCi0JVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggMSwgNXMKLQlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggMiwgUzEKLQlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDQsIDEKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDMxWjdKRworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEdpMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggOCwgXkBeQF5AXkAKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCA3cworCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDUsIDVzCisJRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDYsIFMxCisJU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA4LCAxCiBVRExEdjEsIENvZGUgRWNobyBtZXNzYWdlICgyKSwgRmxhZ3MgW1JUXSAoMHgwMCksIGxlbmd0aCA4MAogCUNoZWNrc3VtIDB4ODA1ZCAodW52ZXJpZmllZCkKLQlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDExLCBGT0MxMDI1WDRXMwotCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDUsIEZhMC8xCi0JRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjQsIAotCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEsIDdzCi0JVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggMSwgNXMKLQlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggMiwgUzIKLQlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDQsIDEKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDI1WDRXMworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEZhMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjgsIF5AXkBeQF5BXkBeS0ZPQzEwMzFaN0pHXkBeRUdpMC8xCisJTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggNSwgN3MKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMQogVURMRHYxLCBDb2RlIEVjaG8gbWVzc2FnZSAoMiksIEZsYWdzIFtSVF0gKDB4MDApLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDgwNWUgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCA3cwotCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDEsIDVzCi0JRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDIsIFMxCi0JU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA0LCAxCisJRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxNSwgRk9DMTAzMVo3SkcKKwlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA5LCBHaTAvMQorCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI4LCBeQF5AXkBeQV5AXktGT0MxMDI1WDRXM15AXkVGYTAvMQorCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDUsIDdzCisJVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggNSwgNXMKKwlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggNiwgUzEKKwlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDgsIDEKIFVETER2MSwgQ29kZSBFY2hvIG1lc3NhZ2UgKDIpLCBGbGFncyBbUlRdICgweDAwKSwgbGVuZ3RoIDgwCiAJQ2hlY2tzdW0gMHg4MDVjICh1bnZlcmlmaWVkKQotCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTEsIEZPQzEwMjVYNFczCi0JUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggNSwgRmEwLzEKLQlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyNCwgCi0JTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggMSwgN3MKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMgorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCA3cworCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDUsIDVzCisJRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDYsIFMyCisJU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA4LCAyCiBVRExEdjEsIENvZGUgRWNobyBtZXNzYWdlICgyKSwgRmxhZ3MgW1JUXSAoMHgwMCksIGxlbmd0aCA4MAogCUNoZWNrc3VtIDB4ODA1ZCAodW52ZXJpZmllZCkKLQlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDExLCBGT0MxMDMxWjdKRwotCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDUsIEdpMC8xCi0JRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjQsIAotCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEsIDdzCi0JVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggMSwgNXMKLQlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggMiwgUzEKLQlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDQsIDIKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDMxWjdKRworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEdpMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjgsIF5AXkBeQF5BXkBeS0ZPQzEwMjVYNFczXkBeRUZhMC8xCisJTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggNSwgN3MKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMgogVURMRHYxLCBDb2RlIEVjaG8gbWVzc2FnZSAoMiksIEZsYWdzIFtSVF0gKDB4MDApLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDgwNWIgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCA3cwotCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDEsIDVzCi0JRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDIsIFMyCi0JU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA0LCAzCisJRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxNSwgRk9DMTAyNVg0VzMKKwlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA5LCBGYTAvMQorCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI4LCBeQF5AXkBeQV5AXktGT0MxMDMxWjdKR15AXkVHaTAvMQorCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDUsIDdzCisJVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggNSwgNXMKKwlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggNiwgUzIKKwlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDgsIDMKIFVETER2MSwgQ29kZSBFY2hvIG1lc3NhZ2UgKDIpLCBGbGFncyBbUlRdICgweDAwKSwgbGVuZ3RoIDgwCiAJQ2hlY2tzdW0gMHg4MDVjICh1bnZlcmlmaWVkKQotCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTEsIEZPQzEwMzFaN0pHCi0JUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggNSwgR2kwLzEKLQlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyNCwgCi0JTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggMSwgN3MKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMworCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCA3cworCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDUsIDVzCisJRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDYsIFMxCisJU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA4LCAzCiBVRExEdjEsIENvZGUgRWNobyBtZXNzYWdlICgyKSwgRmxhZ3MgW1JUXSAoMHgwMCksIGxlbmd0aCA4MAogCUNoZWNrc3VtIDB4ODA1YSAodW52ZXJpZmllZCkKLQlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDExLCBGT0MxMDI1WDRXMwotCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDUsIEZhMC8xCi0JRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjQsIAotCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEsIDdzCi0JVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggMSwgNXMKLQlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggMiwgUzIKLQlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDQsIDQKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDI1WDRXMworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEZhMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjgsIF5AXkBeQF5BXkBeS0ZPQzEwMzFaN0pHXkBeRUdpMC8xCisJTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggNSwgN3MKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNAogVURMRHYxLCBDb2RlIEVjaG8gbWVzc2FnZSAoMiksIEZsYWdzIFtSVF0gKDB4MDApLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDgwNWIgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCA3cwotCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDEsIDVzCi0JRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDIsIFMxCi0JU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA0LCA0CisJRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxNSwgRk9DMTAzMVo3SkcKKwlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA5LCBHaTAvMQorCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI4LCBeQF5AXkBeQV5AXktGT0MxMDI1WDRXM15AXkVGYTAvMQorCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDUsIDdzCisJVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggNSwgNXMKKwlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggNiwgUzEKKwlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDgsIDQKIFVETER2MSwgQ29kZSBFY2hvIG1lc3NhZ2UgKDIpLCBGbGFncyBbUlRdICgweDAwKSwgbGVuZ3RoIDgwCiAJQ2hlY2tzdW0gMHg4MDU5ICh1bnZlcmlmaWVkKQotCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTEsIEZPQzEwMjVYNFczCi0JUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggNSwgRmEwLzEKLQlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyNCwgCi0JTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggMSwgN3MKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCA3cworCVRpbWVvdXQgSW50ZXJ2YWwgVExWICgweDAwMDUpIFRMViwgbGVuZ3RoIDUsIDVzCisJRGV2aWNlIE5hbWUgVExWICgweDAwMDYpIFRMViwgbGVuZ3RoIDYsIFMyCisJU2VxdWVuY2UgTnVtYmVyIFRMViAoMHgwMDA3KSBUTFYsIGxlbmd0aCA4LCA1CiBVRExEdjEsIENvZGUgRWNobyBtZXNzYWdlICgyKSwgRmxhZ3MgW1JUXSAoMHgwMCksIGxlbmd0aCA4MAogCUNoZWNrc3VtIDB4ODA1YSAodW52ZXJpZmllZCkKLQlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDExLCBGT0MxMDMxWjdKRwotCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDUsIEdpMC8xCi0JRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjQsIAotCU1lc3NhZ2UgSW50ZXJ2YWwgVExWICgweDAwMDQpIFRMViwgbGVuZ3RoIDEsIDdzCi0JVGltZW91dCBJbnRlcnZhbCBUTFYgKDB4MDAwNSkgVExWLCBsZW5ndGggMSwgNXMKLQlEZXZpY2UgTmFtZSBUTFYgKDB4MDAwNikgVExWLCBsZW5ndGggMiwgUzEKLQlTZXF1ZW5jZSBOdW1iZXIgVExWICgweDAwMDcpIFRMViwgbGVuZ3RoIDQsIDUKKwlEZXZpY2UtSUQgVExWICgweDAwMDEpIFRMViwgbGVuZ3RoIDE1LCBGT0MxMDMxWjdKRworCVBvcnQtSUQgVExWICgweDAwMDIpIFRMViwgbGVuZ3RoIDksIEdpMC8xCisJRWNobyBUTFYgKDB4MDAwMykgVExWLCBsZW5ndGggMjgsIF5AXkBeQF5BXkBeS0ZPQzEwMjVYNFczXkBeRUZhMC8xCisJTWVzc2FnZSBJbnRlcnZhbCBUTFYgKDB4MDAwNCkgVExWLCBsZW5ndGggNSwgN3MKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWMgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWQgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWIgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMgorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMgogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWMgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMgorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMgogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWEgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMworCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMwogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWIgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgMworCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgMwogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTkgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNAorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNAogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NWEgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNAorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNAogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTggKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTkgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTcgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNgorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNgogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTggKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNgorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNgogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTYgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNworCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNwogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTcgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgNworCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgNwogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTUgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgOAorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgOAogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTYgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgOAorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgOAogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTQgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAyNVg0VzMKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBGYTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMgotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgOQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMjVYNFczCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgRmEwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAzMVo3SkdeQF5FR2kwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMgorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgOQogVURMRHYxLCBDb2RlIFByb2JlIG1lc3NhZ2UgKDEpLCBGbGFncyBbUlQsIFJTWV0gKDB4MDEpLCBsZW5ndGggODAKIAlDaGVja3N1bSAweDc5NTUgKHVudmVyaWZpZWQpCi0JRGV2aWNlLUlEIFRMViAoMHgwMDAxKSBUTFYsIGxlbmd0aCAxMSwgRk9DMTAzMVo3SkcKLQlQb3J0LUlEIFRMViAoMHgwMDAyKSBUTFYsIGxlbmd0aCA1LCBHaTAvMQotCUVjaG8gVExWICgweDAwMDMpIFRMViwgbGVuZ3RoIDI0LCAKLQlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCAxLCAxNXMKLQlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCAxLCA1cwotCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCAyLCBTMQotCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggNCwgOQorCURldmljZS1JRCBUTFYgKDB4MDAwMSkgVExWLCBsZW5ndGggMTUsIEZPQzEwMzFaN0pHCisJUG9ydC1JRCBUTFYgKDB4MDAwMikgVExWLCBsZW5ndGggOSwgR2kwLzEKKwlFY2hvIFRMViAoMHgwMDAzKSBUTFYsIGxlbmd0aCAyOCwgXkBeQF5AXkFeQF5LRk9DMTAyNVg0VzNeQF5FRmEwLzEKKwlNZXNzYWdlIEludGVydmFsIFRMViAoMHgwMDA0KSBUTFYsIGxlbmd0aCA1LCAxNXMKKwlUaW1lb3V0IEludGVydmFsIFRMViAoMHgwMDA1KSBUTFYsIGxlbmd0aCA1LCA1cworCURldmljZSBOYW1lIFRMViAoMHgwMDA2KSBUTFYsIGxlbmd0aCA2LCBTMQorCVNlcXVlbmNlIE51bWJlciBUTFYgKDB4MDAwNykgVExWLCBsZW5ndGggOCwgOQpkaWZmIC0tZ2l0IGEvdGVzdHMvdWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cub3V0IGIvdGVzdHMvdWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cub3V0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE1MTUxMTcKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91ZHAtbGVuZ3RoLWhlYXBvdmVyZmxvdy5vdXQKQEAgLTAsMCArMSwyIEBACitJUCAodG9zIDB4MzAsIHR0bCA0OCwgaWQgMTIzMzYsIG9mZnNldCAwLCBmbGFncyBbbm9uZV0sIHByb3RvIFVEUCAoMTcpLCBsZW5ndGggMTIzMzYsIGJhZCBja3N1bSAzMDMwICgtPjY5OWQpISkKKyAgICA0OC40OC40OC40OC4xMjMzNiA+IDQ4LjQ4LjQ4LjQ4LjEyMzM2OiAgW3x1ZHBdCmRpZmYgLS1naXQgYS90ZXN0cy91ZHAtbGVuZ3RoLWhlYXBvdmVyZmxvdy5wY2FwIGIvdGVzdHMvdWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42N2U4OTlmCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdWRwLWxlbmd0aC1oZWFwb3ZlcmZsb3cucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy91bmFsaWduZWQtbmZzLTEub3V0IGIvdGVzdHMvdW5hbGlnbmVkLW5mcy0xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNzRhYTMwCi0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvdW5hbGlnbmVkLW5mcy0xLm91dApAQCAtMCwwICsxLDIgQEAKK0lQICh0b3MgMHgwLCB0dGwgNjMsIGlkIDM4ODEwLCBvZmZzZXQgMCwgZmxhZ3MgW0RGXSwgcHJvdG8gVENQICg2KSwgbGVuZ3RoIDE2OCkKKyAgICAxMjguMTEyLjEzMC4xMzAuMjA0OSA+IDE0MC4xODAuMjI2LjIwMC4xMDIzOiBGbGFncyBbUC5dLCBja3N1bSAweDZmODIgKGNvcnJlY3QpLCBzZXEgMjcxOTk0NzE3OjI3MTk5NDgzMywgYWNrIDM2MjU4NjIzODMsIHdpbiAxMjI3NCwgb3B0aW9ucyBbbm9wLG5vcCxUUyB2YWwgODAxNDgxNjgzIGVjciAyNDMzNTc1ODRdLCBsZW5ndGggMTE2OiBORlMgcmVwbHkgeGlkIDM1MzI0ODUxNDkgcmVwbHkgb2sgMTEyCmRpZmYgLS1naXQgYS90ZXN0cy91bmFsaWduZWQtbmZzLTEucGNhcCBiL3Rlc3RzL3VuYWxpZ25lZC1uZnMtMS5wY2FwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjVmMTJjMTMKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy91bmFsaWduZWQtbmZzLTEucGNhcApCaW5hcnkgZmlsZXMgZGlmZmVyCmRpZmYgLS1naXQgYS90ZXN0cy92eGxhbi5vdXQgYi90ZXN0cy92eGxhbi5vdXQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQyMjU4NgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Z4bGFuLm91dApAQCAtMCwwICsxLDIwIEBACisgICAgMSAgMzY6ZGM6ODU6MWU6YjM6NDAgPiAwMDoxNjozZTowODo3MTpjZiwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCAxNDg6IDE5Mi4xNjguMjAzLjEuNDUxNDkgPiAxOTIuMTY4LjIwMi4xLjQ3ODk6IFZYTEFOLCBmbGFncyBbSV0gKDB4MDgpLCB2bmkgMTAwCiswMDoxNjozZTozNzpmNjowNCA+IDAwOjMwOjg4OjAxOjAwOjAyLCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDk4OiAxOTIuMTY4LjIwMy4zID4gMTkyLjE2OC4yMDMuNTogSUNNUCBlY2hvIHJlcXVlc3QsIGlkIDEyOTIsIHNlcSAxLCBsZW5ndGggNjQKKyAgICAyICAwMDoxNjozZTowODo3MTpjZiA+IDM2OmRjOjg1OjFlOmIzOjQwLCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDkyOiAxOTIuMTY4LjIwMi4xLjQyNzEwID4gMTkyLjE2OC4yMDMuMS40Nzg5OiBWWExBTiwgZmxhZ3MgW0ldICgweDA4KSwgdm5pIDEwMAorMDA6MzA6ODg6MDE6MDA6MDIgPiBmZjpmZjpmZjpmZjpmZjpmZiwgZXRoZXJ0eXBlIEFSUCAoMHgwODA2KSwgbGVuZ3RoIDQyOiBSZXF1ZXN0IHdoby1oYXMgMTkyLjE2OC4yMDMuMyB0ZWxsIDE5Mi4xNjguMjAzLjUsIGxlbmd0aCAyOAorICAgIDMgIDM2OmRjOjg1OjFlOmIzOjQwID4gMDA6MTY6M2U6MDg6NzE6Y2YsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggOTI6IDE5Mi4xNjguMjAzLjEuNTIxMDIgPiAxOTIuMTY4LjIwMi4xLjQ3ODk6IFZYTEFOLCBmbGFncyBbSV0gKDB4MDgpLCB2bmkgMTAwCiswMDoxNjozZTozNzpmNjowNCA+IDAwOjMwOjg4OjAxOjAwOjAyLCBldGhlcnR5cGUgQVJQICgweDA4MDYpLCBsZW5ndGggNDI6IFJlcGx5IDE5Mi4xNjguMjAzLjMgaXMtYXQgMDA6MTY6M2U6Mzc6ZjY6MDQsIGxlbmd0aCAyOAorICAgIDQgIDAwOjE2OjNlOjA4OjcxOmNmID4gMzY6ZGM6ODU6MWU6YjM6NDAsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggMTQ4OiAxOTIuMTY4LjIwMi4xLjMyODk0ID4gMTkyLjE2OC4yMDMuMS40Nzg5OiBWWExBTiwgZmxhZ3MgW0ldICgweDA4KSwgdm5pIDEwMAorMDA6MzA6ODg6MDE6MDA6MDIgPiAwMDoxNjozZTozNzpmNjowNCwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCA5ODogMTkyLjE2OC4yMDMuNSA+IDE5Mi4xNjguMjAzLjM6IElDTVAgZWNobyByZXBseSwgaWQgMTI5Miwgc2VxIDEsIGxlbmd0aCA2NAorICAgIDUgIDM2OmRjOjg1OjFlOmIzOjQwID4gMDA6MTY6M2U6MDg6NzE6Y2YsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggMTQ4OiAxOTIuMTY4LjIwMy4xLjQ1MTQ5ID4gMTkyLjE2OC4yMDIuMS40Nzg5OiBWWExBTiwgZmxhZ3MgW0ldICgweDA4KSwgdm5pIDEwMAorMDA6MTY6M2U6Mzc6ZjY6MDQgPiAwMDozMDo4ODowMTowMDowMiwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCA5ODogMTkyLjE2OC4yMDMuMyA+IDE5Mi4xNjguMjAzLjU6IElDTVAgZWNobyByZXF1ZXN0LCBpZCAxMjkyLCBzZXEgMiwgbGVuZ3RoIDY0CisgICAgNiAgMDA6MTY6M2U6MDg6NzE6Y2YgPiAzNjpkYzo4NToxZTpiMzo0MCwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCAxNDg6IDE5Mi4xNjguMjAyLjEuMzI4OTQgPiAxOTIuMTY4LjIwMy4xLjQ3ODk6IFZYTEFOLCBmbGFncyBbSV0gKDB4MDgpLCB2bmkgMTAwCiswMDozMDo4ODowMTowMDowMiA+IDAwOjE2OjNlOjM3OmY2OjA0LCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDk4OiAxOTIuMTY4LjIwMy41ID4gMTkyLjE2OC4yMDMuMzogSUNNUCBlY2hvIHJlcGx5LCBpZCAxMjkyLCBzZXEgMiwgbGVuZ3RoIDY0CisgICAgNyAgMzY6ZGM6ODU6MWU6YjM6NDAgPiAwMDoxNjozZTowODo3MTpjZiwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCAxNDg6IDE5Mi4xNjguMjAzLjEuNDUxNDkgPiAxOTIuMTY4LjIwMi4xLjQ3ODk6IFZYTEFOLCBmbGFncyBbSV0gKDB4MDgpLCB2bmkgMTAwCiswMDoxNjozZTozNzpmNjowNCA+IDAwOjMwOjg4OjAxOjAwOjAyLCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDk4OiAxOTIuMTY4LjIwMy4zID4gMTkyLjE2OC4yMDMuNTogSUNNUCBlY2hvIHJlcXVlc3QsIGlkIDEyOTIsIHNlcSAzLCBsZW5ndGggNjQKKyAgICA4ICAwMDoxNjozZTowODo3MTpjZiA+IDM2OmRjOjg1OjFlOmIzOjQwLCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDE0ODogMTkyLjE2OC4yMDIuMS4zMjg5NCA+IDE5Mi4xNjguMjAzLjEuNDc4OTogVlhMQU4sIGZsYWdzIFtJXSAoMHgwOCksIHZuaSAxMDAKKzAwOjMwOjg4OjAxOjAwOjAyID4gMDA6MTY6M2U6Mzc6ZjY6MDQsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggOTg6IDE5Mi4xNjguMjAzLjUgPiAxOTIuMTY4LjIwMy4zOiBJQ01QIGVjaG8gcmVwbHksIGlkIDEyOTIsIHNlcSAzLCBsZW5ndGggNjQKKyAgICA5ICAzNjpkYzo4NToxZTpiMzo0MCA+IDAwOjE2OjNlOjA4OjcxOmNmLCBldGhlcnR5cGUgSVB2NCAoMHgwODAwKSwgbGVuZ3RoIDE0ODogMTkyLjE2OC4yMDMuMS40NTE0OSA+IDE5Mi4xNjguMjAyLjEuNDc4OTogVlhMQU4sIGZsYWdzIFtJXSAoMHgwOCksIHZuaSAxMDAKKzAwOjE2OjNlOjM3OmY2OjA0ID4gMDA6MzA6ODg6MDE6MDA6MDIsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggOTg6IDE5Mi4xNjguMjAzLjMgPiAxOTIuMTY4LjIwMy41OiBJQ01QIGVjaG8gcmVxdWVzdCwgaWQgMTI5Miwgc2VxIDQsIGxlbmd0aCA2NAorICAgMTAgIDAwOjE2OjNlOjA4OjcxOmNmID4gMzY6ZGM6ODU6MWU6YjM6NDAsIGV0aGVydHlwZSBJUHY0ICgweDA4MDApLCBsZW5ndGggMTQ4OiAxOTIuMTY4LjIwMi4xLjMyODk0ID4gMTkyLjE2OC4yMDMuMS40Nzg5OiBWWExBTiwgZmxhZ3MgW0ldICgweDA4KSwgdm5pIDEwMAorMDA6MzA6ODg6MDE6MDA6MDIgPiAwMDoxNjozZTozNzpmNjowNCwgZXRoZXJ0eXBlIElQdjQgKDB4MDgwMCksIGxlbmd0aCA5ODogMTkyLjE2OC4yMDMuNSA+IDE5Mi4xNjguMjAzLjM6IElDTVAgZWNobyByZXBseSwgaWQgMTI5Miwgc2VxIDQsIGxlbmd0aCA2NApkaWZmIC0tZ2l0IGEvdGVzdHMvdnhsYW4ucGNhcCBiL3Rlc3RzL3Z4bGFuLnBjYXAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDRmMGMyZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL3Z4bGFuLnBjYXAKQmluYXJ5IGZpbGVzIGRpZmZlcgpkaWZmIC0tZ2l0IGEvdGVzdHMvem10cDEtaW5mLWxvb3AtMS5vdXQgYi90ZXN0cy96bXRwMS1pbmYtbG9vcC0xLm91dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yNDA0ODQ4Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvem10cDEtaW5mLWxvb3AtMS5vdXQKQEAgLTAsMCArMSwyIEBACitJUCAxOTYuNTkuNDguNjUuMTQyMTQgPiAxOTIuMTY4LjEuMS4xNzk6IEZsYWdzIFtQLl0sIHNlcSAyNDcwMTU5NDAzOjI0NzAxNTk0MzcsIGFjayAxNjA1NzAyMjEsIHdpbiA4MjI0LCBsZW5ndGggMzQ6IFpNVFAvMS4wCisJIGZyYW1lIGZsYWdzK2JvZHkgKDY0LWJpdCkgbGVuZ3RoIDE4NDQ2NzQ0MDczNzA5NTUxNjA3ICgyNSBjYXB0dXJlZCksIGZsYWdzIDB4ZmYgW3x6bXRwMV0KZGlmZiAtLWdpdCBhL3Rlc3RzL3ptdHAxLWluZi1sb29wLTEucGNhcCBiL3Rlc3RzL3ptdHAxLWluZi1sb29wLTEucGNhcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yODBlMzk3Ci0tLSAvZGV2L251bGwKKysrIGIvdGVzdHMvem10cDEtaW5mLWxvb3AtMS5wY2FwCkJpbmFyeSBmaWxlcyBkaWZmZXIKZGlmZiAtLWdpdCBhL3RpbWV2YWwtb3BlcmF0aW9ucy5oIGIvdGltZXZhbC1vcGVyYXRpb25zLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY0ZTg1YwotLS0gL2Rldi9udWxsCisrKyBiL3RpbWV2YWwtb3BlcmF0aW9ucy5oCkBAIC0wLDAgKzEsNzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMTUgVGhlIFRDUERVTVAgcHJvamVjdAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MKKyAqIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisgKiBDT1BZUklHSFQgSE9MREVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULAorICogSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywKKyAqIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIKKyAqIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVAorICogTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4KKyAqIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRQorICogUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBuZXRkaXNzZWN0X3RpbWV2YWxfb3BlcmF0aW9uc19oCisjZGVmaW5lIG5ldGRpc3NlY3RfdGltZXZhbF9vcGVyYXRpb25zX2gKKworLyogT3BlcmF0aW9ucyBvbiB0aW1ldmFscy4gKi8KKworI2lmbmRlZiBfTUlDUk9fUEVSX1NFQworI2RlZmluZSBfTUlDUk9fUEVSX1NFQyAxMDAwMDAwCisjZW5kaWYKKworI2lmbmRlZiBfTkFOT19QRVJfU0VDCisjZGVmaW5lIF9OQU5PX1BFUl9TRUMgMTAwMDAwMDAwMAorI2VuZGlmCisKKyNkZWZpbmUgbmV0ZGlzc2VjdF90aW1ldmFsY2xlYXIodHZwKSAoKHR2cCktPnR2X3NlYyA9ICh0dnApLT50dl91c2VjID0gMCkKKworI2RlZmluZSBuZXRkaXNzZWN0X3RpbWV2YWxpc3NldCh0dnApICgodHZwKS0+dHZfc2VjIHx8ICh0dnApLT50dl91c2VjKQorCisjZGVmaW5lIG5ldGRpc3NlY3RfdGltZXZhbGNtcCh0dnAsIHV2cCwgY21wKSAgICAgIFwKKwkoKCh0dnApLT50dl9zZWMgPT0gKHV2cCktPnR2X3NlYykgPyAgICBcCisJICgodHZwKS0+dHZfdXNlYyBjbXAgKHV2cCktPnR2X3VzZWMpIDogXAorCSAoKHR2cCktPnR2X3NlYyBjbXAgKHV2cCktPnR2X3NlYykpCisKKyNkZWZpbmUgbmV0ZGlzc2VjdF90aW1ldmFsYWRkKHR2cCwgdXZwLCB2dnAsIG5hbm9fcHJlYykgICAgICAgICAgIFwKKwlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkodnZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3NlYyArICh1dnApLT50dl9zZWM7ICAgIFwKKwkJKHZ2cCktPnR2X3VzZWMgPSAodHZwKS0+dHZfdXNlYyArICh1dnApLT50dl91c2VjOyBcCisJCWlmIChuYW5vX3ByZWMpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkJaWYgKCh2dnApLT50dl91c2VjID49IF9OQU5PX1BFUl9TRUMpIHsgICAgXAorCQkJCSh2dnApLT50dl9zZWMrKzsgICAgICAgICAgICAgICAgICBcCisJCQkJKHZ2cCktPnR2X3VzZWMgLT0gX05BTk9fUEVSX1NFQzsgIFwKKwkJCX0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCQlpZiAoKHZ2cCktPnR2X3VzZWMgPj0gX01JQ1JPX1BFUl9TRUMpIHsgICBcCisJCQkJKHZ2cCktPnR2X3NlYysrOyAgICAgICAgICAgICAgICAgIFwKKwkJCQkodnZwKS0+dHZfdXNlYyAtPSBfTUlDUk9fUEVSX1NFQzsgXAorCQkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQl9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIG5ldGRpc3NlY3RfdGltZXZhbHN1Yih0dnAsIHV2cCwgdnZwLCBuYW5vX3ByZWMpICAgICAgICAgICAgXAorCWRvIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkodnZwKS0+dHZfc2VjID0gKHR2cCktPnR2X3NlYyAtICh1dnApLT50dl9zZWM7ICAgICBcCisJCSh2dnApLT50dl91c2VjID0gKHR2cCktPnR2X3VzZWMgLSAodXZwKS0+dHZfdXNlYzsgIFwKKwkJaWYgKCh2dnApLT50dl91c2VjIDwgMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCQkgICAgKHZ2cCktPnR2X3NlYy0tOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisJCSAgICAodnZwKS0+dHZfdXNlYyArPSAobmFub19wcmVjID8gX05BTk9fUEVSX1NFQyA6IFwKKwkJCQkgICAgICAgX01JQ1JPX1BFUl9TRUMpOyAgICAgICAgICAgIFwKKwkJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorCX0gd2hpbGUgKDApCisKKyNlbmRpZiAvKiBuZXRkaXNzZWN0X3RpbWV2YWxfb3BlcmF0aW9uc19oICovCmRpZmYgLS1naXQgYS91ZHAuaCBiL3VkcC5oCmluZGV4IDc0M2RkZmEuLjQwOWNjNTkgMTAwNjQ0Ci0tLSBhL3VkcC5oCisrKyBiL3VkcC5oCkBAIC00NCw2MCArNDQsMjczIEBACiAJdWludDE2X3QJdWhfc3VtOwkJCS8qIHVkcCBjaGVja3N1bSAqLwogfTsKIAotI2RlZmluZSBCT09UUFNfUE9SVCA2NwkJLyogUkZDOTUxICovCi0jZGVmaW5lIEJPT1RQQ19QT1JUIDY4CQkvKiBSRkM5NTEgKi8KLSNkZWZpbmUgVEZUUF9QT1JUIDY5CQkvKlhYWCovCi0jZGVmaW5lIEtFUkJFUk9TX1BPUlQgODgJLypYWFgqLwotI2RlZmluZSBTVU5SUENfUE9SVCAxMTEJCS8qWFhYKi8KLSNkZWZpbmUgU05NUF9QT1JUIDE2MQkJLypYWFgqLwotI2RlZmluZSBOVFBfUE9SVCAxMjMJCS8qWFhYKi8KLSNkZWZpbmUgU05NUFRSQVBfUE9SVCAxNjIJLypYWFgqLwotI2RlZmluZSBJU0FLTVBfUE9SVCA1MDAJCS8qWFhYKi8KLSNkZWZpbmUgU1lTTE9HX1BPUlQgNTE0ICAgICAgICAgLyogcmZjMzE2NCAqLwotI2RlZmluZSBUSU1FRF9QT1JUIDUyNQkJLypYWFgqLwotI2RlZmluZSBSSVBfUE9SVCA1MjAJCS8qWFhYKi8KLSNkZWZpbmUgTERQX1BPUlQgNjQ2Ci0jZGVmaW5lIEFPRFZfUE9SVCA2NTQJCS8qWFhYKi8KLSNkZWZpbmUgT0xTUl9QT1JUIDY5OCAgICAgICAgICAgLyogcmZjMzYyNiAqLwotI2RlZmluZSBLRVJCRVJPU19TRUNfUE9SVCA3NTAJLypYWFgqLwotI2RlZmluZSBMMlRQX1BPUlQgMTcwMQkJLypYWFgqLwotI2RlZmluZSBTSVBfUE9SVCA1MDYwCi0jZGVmaW5lIElTQUtNUF9QT1JUX05BVFQgIDQ1MDAgIC8qIHJmYzM5NDggKi8KLSNkZWZpbmUgSVNBS01QX1BPUlRfVVNFUjEgNzUwMAkvKlhYWCAtIG5vbnN0YW5kYXJkKi8KLSNkZWZpbmUgSVNBS01QX1BPUlRfVVNFUjIgODUwMAkvKlhYWCAtIG5vbnN0YW5kYXJkKi8KLSNkZWZpbmUgUlhfUE9SVF9MT1cgNzAwMAkvKlhYWCovCi0jZGVmaW5lIFJYX1BPUlRfSElHSCA3MDA5CS8qWFhYKi8KLSNkZWZpbmUgTkVUQklPU19OU19QT1JUICAgMTM3Ci0jZGVmaW5lIE5FVEJJT1NfREdSQU1fUE9SVCAgIDEzOAotI2RlZmluZSBDSVNDT19BVVRPUlBfUE9SVCA0OTYJLypYWFgqLwotI2RlZmluZSBSQURJVVNfUE9SVCAxNjQ1Ci0jZGVmaW5lIFJBRElVU19ORVdfUE9SVCAxODEyCi0jZGVmaW5lIFJBRElVU19BQ0NPVU5USU5HX1BPUlQgMTY0NgotI2RlZmluZSBSQURJVVNfTkVXX0FDQ09VTlRJTkdfUE9SVCAxODEzCi0jZGVmaW5lIFJBRElVU19DT0FfUE9SVCAzNzk5Ci0jZGVmaW5lIEhTUlBfUE9SVCAxOTg1CQkvKlhYWCovCi0jZGVmaW5lIExNUF9QT1JUICAgICAgICAgICAgICAgIDcwMSAvKiByZmM0MjA0ICovCi0jZGVmaW5lIExXUkVTX1BPUlQJCTkyMQotI2RlZmluZSBWUVBfUE9SVAkJMTU4OQotI2RlZmluZSBaRVBIWVJfU1JWX1BPUlQJCTIxMDMKLSNkZWZpbmUgWkVQSFlSX0NMVF9QT1JUCQkyMTA0Ci0jZGVmaW5lIFZBVF9QT1JUCQkzNDU2Ci0jZGVmaW5lIE1QTFNfTFNQX1BJTkdfUE9SVCAgICAgIDM1MDMgLyogZHJhZnQtaWV0Zi1tcGxzLWxzcC1waW5nLTAyLnR4dCAqLwotI2RlZmluZSBCRkRfQ09OVFJPTF9QT1JUICAgICAgICAzNzg0IC8qIGRyYWZ0LWthdHotd2FyZC1iZmQtdjR2Ni0xaG9wLTAwLnR4dCAqLwotI2RlZmluZSBCRkRfRUNIT19QT1JUICAgICAgICAgICAzNzg1IC8qIGRyYWZ0LWthdHotd2FyZC1iZmQtdjR2Ni0xaG9wLTAwLnR4dCAqLwotI2RlZmluZSBXQl9QT1JUCQkJNDU2NwotI2RlZmluZSBTRkxPV19QT1JUICAgICAgICAgICAgICA2MzQzIC8qIGh0dHA6Ly93d3cuc2Zsb3cub3JnL2RldmVsb3BlcnMvc3BlY2lmaWNhdGlvbnMucGhwICovCi0jZGVmaW5lIExXQVBQX0RBVEFfUE9SVCAgICAgICAgIDEyMjIyIC8qIFJGQyA1NDEyICovCi0jZGVmaW5lIExXQVBQX0NPTlRST0xfUE9SVCAgICAgIDEyMjIzIC8qIFJGQyA1NDEyICovCi0jZGVmaW5lIE9UVl9QT1JUICAgICAgICAgICAgICAgIDg0NzIgIC8qIGRyYWZ0LWhhc21pdC1vdHYtMDQgKi8KLSNkZWZpbmUgVlhMQU5fUE9SVCAgICAgICAgICAgICAgNDc4OSAgLyogUkZDIDczNDggKi8KLSNkZWZpbmUgR0VORVZFX1BPUlQgICAgICAgICAgICAgNjA4MSAgLyogZHJhZnQtZ3Jvc3MtZ2VuZXZlLTAyICovCi0KLSNpZmRlZiBJTkVUNgotI2RlZmluZSBSSVBOR19QT1JUICAgICAgICAgICAgICA1MjEgICAvKiBSRkMgMjA4MCAqLwotI2RlZmluZSBESENQNl9TRVJWX1BPUlQgNTQ2CS8qWFhYKi8KLSNkZWZpbmUgREhDUDZfQ0xJX1BPUlQgNTQ3CS8qWFhYKi8KLSNkZWZpbmUgQUhDUF9QT1JUIDUzNTkJCS8qIGRyYWZ0LWNocm9ib2N6ZWstYWhjcC0wMCAqLwotI2RlZmluZSBCQUJFTF9QT1JUICAgICAgICAgICAgICA2Njk2ICAvKiBSRkMgNjEyNiBlcnJhdGEgKi8KLSNkZWZpbmUgQkFCRUxfUE9SVF9PTEQgICAgICAgICAgNjY5NyAgLyogUkZDIDYxMjYgKi8KKyNpZm5kZWYgTkFNRVNFUlZFUl9QT1JUCisjZGVmaW5lIE5BTUVTRVJWRVJfUE9SVAkJCTUzCisjZW5kaWYKKyNpZm5kZWYgVEFDQUNTX0RCX1BPUlQKKyNkZWZpbmUgVEFDQUNTX0RCX1BPUlQJCQk2NQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgT1JBQ0xFX1NRTE5FVF9QT1JUCisjZGVmaW5lIE9SQUNMRV9TUUxORVRfUE9SVAkJNjYJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIEJPT1RQU19QT1JUCisjZGVmaW5lIEJPT1RQU19QT1JUCQkJNjcJLyogUkZDOTUxICovCisjZW5kaWYKKyNpZm5kZWYgQk9PVFBDX1BPUlQKKyNkZWZpbmUgQk9PVFBDX1BPUlQJCQk2OAkvKiBSRkM5NTEgKi8KKyNlbmRpZgorI2lmbmRlZiBURlRQX1BPUlQKKyNkZWZpbmUgVEZUUF9QT1JUCQkJNjkJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIEtFUkJFUk9TX1BPUlQKKyNkZWZpbmUgS0VSQkVST1NfUE9SVAkJCTg4CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBTVU5SUENfUE9SVAorI2RlZmluZSBTVU5SUENfUE9SVAkJCTExMQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTlRQX1BPUlQKKyNkZWZpbmUgTlRQX1BPUlQJCQkxMjMJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIE5FVEJJT1NfTlNfUE9SVAorI2RlZmluZSBORVRCSU9TX05TX1BPUlQJCQkxMzcJLyogUkZDIDEwMDEsIFJGQyAxMDAyICovCisjZW5kaWYKKyNpZm5kZWYgTkVUQklPU19ER1JBTV9QT1JUCisjZGVmaW5lIE5FVEJJT1NfREdSQU1fUE9SVAkJMTM4CS8qIFJGQyAxMDAxLCBSRkMgMTAwMiAqLworI2VuZGlmCisjaWZuZGVmIE5FVEJJT1NfU1NOX1BPUlQKKyNkZWZpbmUgTkVUQklPU19TU05fUE9SVAkJMTM5CS8qIFJGQyAxMDAxLCBSRkMgMTAwMiAqLworI2VuZGlmCisjaWZuZGVmIFNOTVBfUE9SVAorI2RlZmluZSBTTk1QX1BPUlQJCQkxNjEJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFNOTVBUUkFQX1BPUlQKKyNkZWZpbmUgU05NUFRSQVBfUE9SVAkJCTE2MgkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgQkdQX1BPUlQKKyNkZWZpbmUgQkdQX1BPUlQJCQkxNzkJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIEFQUExFVEFMS19SVE1QX1BPUlQKKyNkZWZpbmUgQVBQTEVUQUxLX1JUTVBfUE9SVAkJMjAxCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBBUFBMRVRBTEtfTkJfUE9SVAorI2RlZmluZSBBUFBMRVRBTEtfTkJfUE9SVAkJMjAyCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBBUFBMRVRBTEtfRUNITworI2RlZmluZSBBUFBMRVRBTEtfRUNITwkJCTIwNAkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgQVBQTEVUQUxLX1pPTkVfSU5GT19QT1JUCisjZGVmaW5lIEFQUExFVEFMS19aT05FX0lORk9fUE9SVAkyMDYJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIExEQVBfUE9SVAorI2RlZmluZSBMREFQX1BPUlQJCQkzODkJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIEhUVFBTX1BPUlQKKyNkZWZpbmUgSFRUUFNfUE9SVAkJCTQ0MwkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTUlDUk9TT0ZUX0RTX1BPUlQKKyNkZWZpbmUgTUlDUk9TT0ZUX0RTX1BPUlQJCTQ0NQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgS0VSQkVST1M1X1BBU1NXRF9QT1JUCisjZGVmaW5lIEtFUkJFUk9TNV9QQVNTV0RfUE9SVAkJNDY0CS8qIFBFUiBJQU5BICovCisjZW5kaWYKKyNpZm5kZWYgQ0lTQ09fQVVUT1JQX1BPUlQKKyNkZWZpbmUgQ0lTQ09fQVVUT1JQX1BPUlQJCTQ5NgkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgSVNBS01QX1BPUlQKKyNkZWZpbmUgSVNBS01QX1BPUlQJCQk1MDAJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFNZU0xPR19QT1JUCisjZGVmaW5lIFNZU0xPR19QT1JUCQkJNTE0CS8qIHJmYzMxNjQgKi8KKyNlbmRpZgorI2lmbmRlZiBSSVBfUE9SVAorI2RlZmluZSBSSVBfUE9SVAkJCTUyMAkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgUklQTkdfUE9SVAorI2RlZmluZSBSSVBOR19QT1JUCQkJNTIxCS8qIFJGQyAyMDgwICovCisjZW5kaWYKKyNpZm5kZWYgVElNRURfUE9SVAorI2RlZmluZSBUSU1FRF9QT1JUCQkJNTI1CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBLRVJCRVJPU19MT0dJTl9QT1JUCisjZGVmaW5lIEtFUkJFUk9TX0xPR0lOX1BPUlQJCTU0MwkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgS0VSQkVST1NfU0hFTExfUE9SVAorI2RlZmluZSBLRVJCRVJPU19TSEVMTF9QT1JUCQk1NDQJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIERIQ1A2X1NFUlZfUE9SVAorI2RlZmluZSBESENQNl9TRVJWX1BPUlQJCQk1NDYJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIERIQ1A2X0NMSV9QT1JUCisjZGVmaW5lIERIQ1A2X0NMSV9QT1JUCQkJNTQ3CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBMREFQU19QT1JUCisjZGVmaW5lIExEQVBTX1BPUlQJCQk2MzYJLypYWFggLSBMREFQIG92ZXIgVExTL1NTTCAqLworI2VuZGlmCisjaWZuZGVmIExEUF9QT1JUCisjZGVmaW5lIExEUF9QT1JUCQkJNjQ2CisjZW5kaWYKKyNpZm5kZWYgREhDUF9GQUlMT1ZFUl9QT1JUCisjZGVmaW5lIERIQ1BfRkFJTE9WRVJfUE9SVAkJNjQ3CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBBUURWX1BPUlQKKyNkZWZpbmUgQU9EVl9QT1JUCQkJNjU0CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBPTFNSX1BPUlQKKyNkZWZpbmUgT0xTUl9QT1JUCQkJNjk4CS8qIHJmYzM2MjYgKi8KKyNlbmRpZgorI2lmbmRlZiBMTVBfUE9SVAorI2RlZmluZSBMTVBfUE9SVAkJCTcwMQkvKiByZmM0MjA0ICovCisjZW5kaWYKKyNpZm5kZWYgQ0lTQ09fVERQX1BPUlQKKyNkZWZpbmUgQ0lTQ09fVERQX1BPUlQJCQk3MTEJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIEtFUkJFUk9TX0FETV9QT1JUCisjZGVmaW5lIEtFUkJFUk9TX0FETV9QT1JUCQk3NDkJLypYWFggLSBLZXJiZXJvcyB2NSAqLworI2VuZGlmCisjaWZuZGVmIEtFUkJFUk9TX1NFQ19QT1JUCisjZGVmaW5lIEtFUkJFUk9TX1NFQ19QT1JUCQk3NTAJLypYWFggLSBLZXJiZXJvcyB2NCAqLworI2VuZGlmCisjaWZuZGVmIFJTWU5DX1BPUlQKKyNkZWZpbmUgUlNZTkNfUE9SVAkJCTg3MwkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTFdSRVNfUE9SVAorI2RlZmluZSBMV1JFU19QT1JUCQkJOTIxCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBPUEVOU1NMX1BPUlQKKyNkZWZpbmUgT1BFTlNTTF9QT1JUCQkJMTE5NAkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTE9UVVNfTk9URVNfUE9SVAorI2RlZmluZSBMT1RVU19OT1RFU19QT1JUCQkxMzUyCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBNU19TUUxfU0VSVkVSX1BPUlQKKyNkZWZpbmUgTVNfU1FMX1NFUlZFUl9QT1JUCQkxNDMzCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBNU19TUUxfU0VSVkVSX01PTklUT1IKKyNkZWZpbmUgTVNfU1FMX1NFUlZFUl9NT05JVE9SCQkxNDM0CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBJTkdSRVNMT0NLX1BPUlQKKyNkZWZpbmUgSU5HUkVTTE9DS19QT1JUCQkJMTUyNAkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgVlFQX1BPUlQKKyNkZWZpbmUgVlFQX1BPUlQJCQkxNTg5CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBSQURJVVNfUE9SVAorI2RlZmluZSBSQURJVVNfUE9SVAkJCTE2NDUJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFJBRElVU19BQ0NPVU5USU5HX1BPUlQKKyNkZWZpbmUgUkFESVVTX0FDQ09VTlRJTkdfUE9SVAkJMTY0NgorI2VuZGlmCisjaWZuZGVmIFJBRElVU19DSVNDT19DT0FfUE9SVAorI2RlZmluZSBSQURJVVNfQ0lTQ09fQ09BX1BPUlQJCTE3MDAKKyNlbmRpZgorI2lmbmRlZiBMMlRQX1BPUlQKKyNkZWZpbmUgTDJUUF9QT1JUCQkJMTcwMQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgUkFESVVTX05FV19QT1JUCisjZGVmaW5lIFJBRElVU19ORVdfUE9SVAkJCTE4MTIJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFJBRElVU19ORVdfQUNDT1VOVElOR19QT1JUCisjZGVmaW5lIFJBRElVU19ORVdfQUNDT1VOVElOR19QT1JUCTE4MTMKKyNlbmRpZgorI2lmbmRlZiBIU1JQX1BPUlQKKyNkZWZpbmUgSFNSUF9QT1JUCQkJMTk4NQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTkZTX0RBRU1PTl9QT1JUCisjZGVmaW5lIE5GU19EQUVNT05fUE9SVAkJCTIwNDkJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFpFUEhZUl9TUlZfUE9SVAorI2RlZmluZSBaRVBIWVJfU1JWX1BPUlQJCQkyMTAzCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBaRVBIWVJfQ0xJX1BPUlQKKyNkZWZpbmUgWkVQSFlSX0NMVF9QT1JUCQkJMjEwNAkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTVlTUUxfUE9SVAorI2RlZmluZSBNWVNRTF9QT1JUCQkJMzMwNgkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTVNfUkRQX1BPUlQKKyNkZWZpbmUgTVNfUkRQX1BPUlQJCQkzMzg5CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBWQVRfUE9SVAorI2RlZmluZSBWQVRfUE9SVAkJCTM0NTYJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIE1QTFNfTFNQX1BJTkdfUE9SVAorI2RlZmluZSBNUExTX0xTUF9QSU5HX1BPUlQJCTM1MDMJLyogZHJhZnQtaWV0Zi1tcGxzLWxzcC1waW5nLTAyLnR4dCAqLworI2VuZGlmCisjaWZuZGVmIFNVQlZFUlNJT05fUE9SVAorI2RlZmluZSBTVUJWRVJTSU9OX1BPUlQJCQkzNjkwCS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBCRkRfQ09OVFJPTF9QT1JUCisjZGVmaW5lIEJGRF9DT05UUk9MX1BPUlQJCTM3ODQJLyogUkZDIDU4ODEgKi8KKyNlbmRpZgorI2lmbmRlZiBCRkRfRUNIT19QT1JUCisjZGVmaW5lIEJGRF9FQ0hPX1BPUlQJCQkzNzg1CS8qIFJGQyA1ODgxICovCisjZW5kaWYKKyNpZm5kZWYgUkFESVVTX0NPQV9QT1JUCisjZGVmaW5lIFJBRElVU19DT0FfUE9SVAkJCTM3OTkJLyogUkZDIDUxNzYgKi8KKyNlbmRpZgorI2lmbmRlZiBORlNfTE9DS19EQUVNT05fUE9SVAorI2RlZmluZSBORlNfTE9DS19EQUVNT05fUE9SVAkJNDA0NQkvKlhYWCovCisjZW5kaWYKKyNpZm5kZWYgTElTUF9DT05UUk9MX1BPUlQKKyNkZWZpbmUgTElTUF9DT05UUk9MX1BPUlQJCTQzNDIJLyogUkZDIDY4MzAgKi8KKyNlbmRpZgorI2lmbmRlZiBJU0FLTVBfUE9SVF9OQVRUCisjZGVmaW5lIElTQUtNUF9QT1JUX05BVFQJCTQ1MDAJLyogcmZjMzk0OCAqLworI2VuZGlmCisjaWZuZGVmIFdCX1BPUlQKKyNkZWZpbmUgV0JfUE9SVAkJCQk0NTY3CisjZW5kaWYKKyNpZm5kZWYgVlhMQU5fUE9SVAorI2RlZmluZSBWWExBTl9QT1JUCQkJNDc4OQkvKiBSRkMgNzM0OCAqLworI2VuZGlmCisjaWZuZGVmIFZYTEFOX0dQRV9QT1JUCisjZGVmaW5lIFZYTEFOX0dQRV9QT1JUCQkJNDc5MAkvKiBkcmFmdC1pZXRmLW52bzMtdnhsYW4tZ3BlLTAxICovCisjZW5kaWYKKyNpZm5kZWYgU0lQX0RTX1BPUlQKKyNkZWZpbmUgU0lQX0RTX1BPUlQJCQk1MDU5CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBTSVBfUE9SVAorI2RlZmluZSBTSVBfUE9SVAkJCTUwNjAKKyNlbmRpZgorI2lmbmRlZiBNVUxUSUNBU1RETlNfUE9SVAorI2RlZmluZSBNVUxUSUNBU1RETlNfUE9SVAkJNTM1MwkvKiBSRkMgNjc2MiAqLworI2VuZGlmCisjaWZuZGVmIEFIQ1BfUE9SVAorI2RlZmluZSBBSENQX1BPUlQJCQk1MzU5CS8qIGRyYWZ0LWNocm9ib2N6ZWstYWhjcC0wMCAqLworI2VuZGlmCisjaWZuZGVmIEdFTkVWRV9QT1JUCisjZGVmaW5lIEdFTkVWRV9QT1JUCQkJNjA4MQkvKiBkcmFmdC1ncm9zcy1nZW5ldmUtMDIgKi8KKyNlbmRpZgorI2lmbmRlZiBTRkxPV19QT1JUCisjZGVmaW5lIFNGTE9XX1BPUlQJCQk2MzQzCS8qIGh0dHA6Ly93d3cuc2Zsb3cub3JnL2RldmVsb3BlcnMvc3BlY2lmaWNhdGlvbnMucGhwICovCisjZW5kaWYKKyNpZm5kZWYgQkFCRUxfUE9SVAorI2RlZmluZSBCQUJFTF9QT1JUCQkJNjY5NgkvKiBSRkMgNjEyNiBlcnJhdGEgKi8KKyNlbmRpZgorI2lmbmRlZiBCQUJFTF9QT1JUX09MRAorI2RlZmluZSBCQUJFTF9QT1JUX09MRAkJCTY2OTcJLyogUkZDIDYxMjYgKi8KKyNlbmRpZgorI2lmbmRlZiBSWF9QT1JUX0xPVworI2RlZmluZSBSWF9QT1JUX0xPVwkJCTcwMDAJLypYWFgqLworI2VuZGlmCisjaWZuZGVmIFJYX1BPUlRfSElHSAorI2RlZmluZSBSWF9QT1JUX0hJR0gJCQk3MDA5CS8qWFhYKi8KKyNlbmRpZgorI2lmbmRlZiBJU0FLTVBfUE9SVF9VU0VSMQorI2RlZmluZSBJU0FLTVBfUE9SVF9VU0VSMQkJNzUwMAkvKlhYWCAtIG5vbnN0YW5kYXJkKi8KKyNlbmRpZgorI2lmbmRlZiBITkNQX1BPUlQKKyNkZWZpbmUgSE5DUF9QT1JUCQkJODIzMQkvKiBSRkMgNzc4OCAqLworI2VuZGlmCisjaWZuZGVmIE9UVl9QT1JUCisjZGVmaW5lIE9UVl9QT1JUCQkJODQ3MgkvKiBkcmFmdC1oYXNtaXQtb3R2LTA0ICovCisjZW5kaWYKKyNpZm5kZWYgSVNBS01QX1BPUlRfVVNFUjIKKyNkZWZpbmUgSVNBS01QX1BPUlRfVVNFUjIJCTg1MDAJLypYWFggLSBub25zdGFuZGFyZCovCisjZW5kaWYKKyNpZm5kZWYgTFdBUFBfREFUQV9QT1JUCisjZGVmaW5lIExXQVBQX0RBVEFfUE9SVAkJCTEyMjIyCS8qIFJGQyA1NDEyICovCisjZW5kaWYKKyNpZm5kZWYgTFdBUFBfQ09OVFJPTF9QT1JUCisjZGVmaW5lIExXQVBQX0NPTlRST0xfUE9SVAkJMTIyMjMJLyogUkZDIDU0MTIgKi8KICNlbmRpZgpkaWZmIC0tZ2l0IGEvdXRpbC5jIGIvdXRpbC1wcmludC5jCnNpbWlsYXJpdHkgaW5kZXggNzUlCnJlbmFtZSBmcm9tIHV0aWwuYwpyZW5hbWUgdG8gdXRpbC1wcmludC5jCmluZGV4IGIzN2YzZDguLjVkYjA0MmEgMTAwNjQ0Ci0tLSBhL3V0aWwuYworKysgYi91dGlsLXByaW50LmMKQEAgLTM1LDI5ICszNSw2MSBAQAogICogRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgogICovCiAKLSNkZWZpbmUgTkVURElTU0VDVF9SRVdPUktFRAogI2lmZGVmIEhBVkVfQ09ORklHX0gKICNpbmNsdWRlICJjb25maWcuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8dGNwZHVtcC1zdGRpbmMuaD4KKyNpbmNsdWRlIDxuZXRkaXNzZWN0LXN0ZGluYy5oPgogCiAjaW5jbHVkZSA8c3lzL3N0YXQuaD4KIAogI2lmZGVmIEhBVkVfRkNOVExfSAogI2luY2x1ZGUgPGZjbnRsLmg+CiAjZW5kaWYKKyNpbmNsdWRlIDxjdHlwZS5oPgogI2luY2x1ZGUgPHN0ZGlvLmg+CiAjaW5jbHVkZSA8c3RkYXJnLmg+CiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8c3RyaW5nLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCisjaW5jbHVkZSAiYXNjaWlfc3RyY2FzZWNtcC5oIgorI2luY2x1ZGUgInRpbWV2YWwtb3BlcmF0aW9ucy5oIgorCitpbnQzMl90IHRoaXN6b25lOwkJLyogc2Vjb25kcyBvZmZzZXQgZnJvbSBnbXQgdG8gbG9jYWwgdGltZSAqLworLyogaW52YWxpZCBzdHJpbmcgdG8gcHJpbnQgJyhpbnZhbGlkKScgZm9yIG1hbGZvcm1lZCBvciBjb3JydXB0ZWQgcGFja2V0cyAqLworY29uc3QgY2hhciBpc3RyW10gPSAiIChpbnZhbGlkKSI7CisKKy8qCisgKiB0aW1lc3RhbXAgZGlzcGxheSBidWZmZXIgc2l6ZSwgdGhlIGJpZ2dlc3Qgc2l6ZSBvZiBib3RoIGZvcm1hdHMgaXMgbmVlZGVkCisgKiBzaXplb2YoIjAwMDAwMDAwMDAuMDAwMDAwMDAwIikgPiBzaXplb2YoIjAwOjAwOjAwLjAwMDAwMDAwMCIpCisgKi8KKyNkZWZpbmUgVFNfQlVGX1NJWkUgc2l6ZW9mKCIwMDAwMDAwMDAwLjAwMDAwMDAwMCIpCisKKyNkZWZpbmUgVE9LQlVGU0laRSAxMjgKKworLyoKKyAqIFByaW50IG91dCBhIGNoYXJhY3RlciwgZmlsdGVyaW5nIG91dCB0aGUgbm9uLXByaW50YWJsZSBvbmVzCisgKi8KK3ZvaWQKK2ZuX3ByaW50X2NoYXIobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sIHVfY2hhciBjKQoreworCWlmICghTkRfSVNBU0NJSShjKSkgeworCQljID0gTkRfVE9BU0NJSShjKTsKKwkJTkRfUFJJTlQoKG5kbywgIk0tIikpOworCX0KKwlpZiAoIU5EX0lTUFJJTlQoYykpIHsKKwkJYyBePSAweDQwOwkvKiBERUwgdG8gPywgb3RoZXJzIHRvIGFscGhhICovCisJCU5EX1BSSU5UKChuZG8sICJeIikpOworCX0KKwlORF9QUklOVCgobmRvLCAiJWMiLCBjKSk7Cit9CiAKIC8qCiAgKiBQcmludCBvdXQgYSBudWxsLXRlcm1pbmF0ZWQgZmlsZW5hbWUgKG9yIG90aGVyIGFzY2lpIHN0cmluZykuCiAgKiBJZiBlcCBpcyBOVUxMLCBhc3N1bWUgbm8gdHJ1bmNhdGlvbiBjaGVjayBpcyBuZWVkZWQuCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0cnVuY2F0ZWQuCisgKiBTdG9wIGF0IGVwIChpZiBnaXZlbikgb3IgYmVmb3JlIHRoZSBudWxsIGNoYXIsIHdoaWNoZXZlciBpcyBmaXJzdC4KICAqLwogaW50CiBmbl9wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKQEAgLTg3LDkgKzExOSw2MCBAQAogfQogCiAvKgorICogUHJpbnQgb3V0IGEgbnVsbC10ZXJtaW5hdGVkIGZpbGVuYW1lIChvciBvdGhlciBhc2NpaSBzdHJpbmcpIGZyb20KKyAqIGEgZml4ZWQtbGVuZ3RoIGJ1ZmZlci4KKyAqIElmIGVwIGlzIE5VTEwsIGFzc3VtZSBubyB0cnVuY2F0aW9uIGNoZWNrIGlzIG5lZWRlZC4KKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGJ5dGVzIG9mIHN0cmluZyBwcm9jZXNzZWQsIGluY2x1ZGluZyB0aGUKKyAqIHRlcm1pbmF0aW5nIG51bGwsIGlmIG5vdCB0cnVuY2F0ZWQuICBSZXR1cm4gMCBpZiB0cnVuY2F0ZWQuCisgKi8KK3VfaW50Citmbl9wcmludHp0bihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgIHJlZ2lzdGVyIGNvbnN0IHVfY2hhciAqcywgcmVnaXN0ZXIgdV9pbnQgbiwgcmVnaXN0ZXIgY29uc3QgdV9jaGFyICplcCkKK3sKKwlyZWdpc3RlciB1X2ludCBieXRlczsKKwlyZWdpc3RlciB1X2NoYXIgYzsKKworCWJ5dGVzID0gMDsKKwlmb3IgKDs7KSB7CisJCWlmIChuID09IDAgfHwgKGVwICE9IE5VTEwgJiYgcyA+PSBlcCkpIHsKKwkJCS8qCisJCQkgKiBUcnVuY2F0ZWQuICBUaGlzIGluY2x1ZGVzICJubyBudWxsIGJlZm9yZSB3ZQorCQkJICogZ290IHRvIHRoZSBlbmQgb2YgdGhlIGZpeGVkLWxlbmd0aCBidWZmZXIiLgorCQkJICoKKwkJCSAqIFhYWCAtIEJPT1RQIHNheXMgIm51bGwtdGVybWluYXRlZCIsIHdoaWNoCisJCQkgKiBtZWFucyB0aGUgbWF4aW11bSBsZW5ndGggb2YgdGhlIHN0cmluZywgaW4KKwkJCSAqIGJ5dGVzLCBpcyAxIGxlc3MgdGhhbiB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyLAorCQkJICogYXMgdGhlcmUgbXVzdCBhbHdheXMgYmUgYSB0ZXJtaW5hdGluZyBudWxsLgorCQkJICovCisJCQlieXRlcyA9IDA7CisJCQlicmVhazsKKwkJfQorCisJCWMgPSAqcysrOworCQlieXRlcysrOworCQluLS07CisJCWlmIChjID09ICdcMCcpIHsKKwkJCS8qIEVuZCBvZiBzdHJpbmcgKi8KKwkJCWJyZWFrOworCQl9CisJCWlmICghTkRfSVNBU0NJSShjKSkgeworCQkJYyA9IE5EX1RPQVNDSUkoYyk7CisJCQlORF9QUklOVCgobmRvLCAiTS0iKSk7CisJCX0KKwkJaWYgKCFORF9JU1BSSU5UKGMpKSB7CisJCQljIF49IDB4NDA7CS8qIERFTCB0byA/LCBvdGhlcnMgdG8gYWxwaGEgKi8KKwkJCU5EX1BSSU5UKChuZG8sICJeIikpOworCQl9CisJCU5EX1BSSU5UKChuZG8sICIlYyIsIGMpKTsKKwl9CisJcmV0dXJuKGJ5dGVzKTsKK30KKworLyoKICAqIFByaW50IG91dCBhIGNvdW50ZWQgZmlsZW5hbWUgKG9yIG90aGVyIGFzY2lpIHN0cmluZykuCiAgKiBJZiBlcCBpcyBOVUxMLCBhc3N1bWUgbm8gdHJ1bmNhdGlvbiBjaGVjayBpcyBuZWVkZWQuCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0cnVuY2F0ZWQuCisgKiBTdG9wIGF0IGVwIChpZiBnaXZlbikgb3IgYWZ0ZXIgbiBieXRlcywgd2hpY2hldmVyIGlzIGZpcnN0LgogICovCiBpbnQKIGZuX3ByaW50bihuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKQEAgLTExNyw2ICsyMDAsOCBAQAogICogUHJpbnQgb3V0IGEgbnVsbC1wYWRkZWQgZmlsZW5hbWUgKG9yIG90aGVyIGFzY2lpIHN0cmluZykuCiAgKiBJZiBlcCBpcyBOVUxMLCBhc3N1bWUgbm8gdHJ1bmNhdGlvbiBjaGVjayBpcyBuZWVkZWQuCiAgKiBSZXR1cm4gdHJ1ZSBpZiB0cnVuY2F0ZWQuCisgKiBTdG9wIGF0IGVwIChpZiBnaXZlbikgb3IgYWZ0ZXIgbiBieXRlcyBvciBiZWZvcmUgdGhlIG51bGwgY2hhciwKKyAqIHdoaWNoZXZlciBpcyBmaXJzdC4KICAqLwogaW50CiBmbl9wcmludHpwKG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLApAQCAtMTU1LDkgKzI0MCw4IEBACiAjaWZuZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgogX1VfCiAjZW5kaWYKLSwgaW50IHNlYywgaW50IHVzZWMpCissIGludCBzZWMsIGludCB1c2VjLCBjaGFyICpidWYpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmW3NpemVvZigiMDA6MDA6MDAuMDAwMDAwMDAwIildOwogCWNvbnN0IGNoYXIgKmZvcm1hdDsKIAogI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgpAQCAtMTcyLDIwICsyNTYsNTcgQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlmb3JtYXQgPSAiJTAyZDolMDJkOiUwMmQue3Vua25vd24gcHJlY2lzaW9ufSI7CisJCWZvcm1hdCA9ICIlMDJkOiUwMmQ6JTAyZC57dW5rbm93bn0iOwogCQlicmVhazsKIAl9CiAjZWxzZQogCWZvcm1hdCA9ICIlMDJkOiUwMmQ6JTAyZC4lMDZ1IjsKICNlbmRpZgogCi0Jc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgZm9ybWF0LAorCXNucHJpbnRmKGJ1ZiwgVFNfQlVGX1NJWkUsIGZvcm1hdCwKICAgICAgICAgICAgICAgICAgc2VjIC8gMzYwMCwgKHNlYyAlIDM2MDApIC8gNjAsIHNlYyAlIDYwLCB1c2VjKTsKIAogICAgICAgICByZXR1cm4gYnVmOwogfQogCiAvKgorICogRm9ybWF0IHRoZSB0aW1lc3RhbXAgLSBVbml4IHRpbWV2YWwgc3R5bGUKKyAqLworc3RhdGljIGNoYXIgKgordHNfdW5peF9mb3JtYXQobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8KKyNpZm5kZWYgSEFWRV9QQ0FQX1NFVF9UU1RBTVBfUFJFQ0lTSU9OCitfVV8KKyNlbmRpZgorLCBpbnQgc2VjLCBpbnQgdXNlYywgY2hhciAqYnVmKQoreworCWNvbnN0IGNoYXIgKmZvcm1hdDsKKworI2lmZGVmIEhBVkVfUENBUF9TRVRfVFNUQU1QX1BSRUNJU0lPTgorCXN3aXRjaCAobmRvLT5uZG9fdHN0YW1wX3ByZWNpc2lvbikgeworCisJY2FzZSBQQ0FQX1RTVEFNUF9QUkVDSVNJT05fTUlDUk86CisJCWZvcm1hdCA9ICIldS4lMDZ1IjsKKwkJYnJlYWs7CisKKwljYXNlIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5POgorCQlmb3JtYXQgPSAiJXUuJTA5dSI7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZm9ybWF0ID0gIiV1Lnt1bmtub3dufSI7CisJCWJyZWFrOworCX0KKyNlbHNlCisJZm9ybWF0ID0gIiV1LiUwNnUiOworI2VuZGlmCisKKwlzbnByaW50ZihidWYsIFRTX0JVRl9TSVpFLCBmb3JtYXQsCisJCSAodW5zaWduZWQpc2VjLCAodW5zaWduZWQpdXNlYyk7CisKKwlyZXR1cm4gYnVmOworfQorCisvKgogICogUHJpbnQgdGhlIHRpbWVzdGFtcAogICovCiB2b2lkCkBAIC0xOTUsNTIgKzMxNiw2MyBAQAogCXJlZ2lzdGVyIGludCBzOwogCXN0cnVjdCB0bSAqdG07CiAJdGltZV90IFRpbWU7Ci0Jc3RhdGljIHVuc2lnbmVkIGJfc2VjOwotCXN0YXRpYyB1bnNpZ25lZCBiX3VzZWM7Ci0JaW50IGRfdXNlYzsKLQlpbnQgZF9zZWM7CisJY2hhciBidWZbVFNfQlVGX1NJWkVdOworCXN0YXRpYyBzdHJ1Y3QgdGltZXZhbCB0dl9yZWY7CisJc3RydWN0IHRpbWV2YWwgdHZfcmVzdWx0OworCWludCBuZWdhdGl2ZV9vZmZzZXQ7CisJaW50IG5hbm9fcHJlYzsKIAogCXN3aXRjaCAobmRvLT5uZG9fdGZsYWcpIHsKIAogCWNhc2UgMDogLyogRGVmYXVsdCAqLwogCQlzID0gKHR2cC0+dHZfc2VjICsgdGhpc3pvbmUpICUgODY0MDA7Ci0JCU5EX1BSSU5UKChuZG8sICIlcyAiLCB0c19mb3JtYXQobmRvLCBzLCB0dnAtPnR2X3VzZWMpKSk7CisJCU5EX1BSSU5UKChuZG8sICIlcyAiLCB0c19mb3JtYXQobmRvLCBzLCB0dnAtPnR2X3VzZWMsIGJ1ZikpKTsKIAkJYnJlYWs7CiAKIAljYXNlIDE6IC8qIE5vIHRpbWUgc3RhbXAgKi8KIAkJYnJlYWs7CiAKIAljYXNlIDI6IC8qIFVuaXggdGltZXZhbCBzdHlsZSAqLwotCQlORF9QUklOVCgobmRvLCAiJXUuJTA2dSAiLAotCQkJICAgICAodW5zaWduZWQpdHZwLT50dl9zZWMsCi0JCQkgICAgICh1bnNpZ25lZCl0dnAtPnR2X3VzZWMpKTsKKwkJTkRfUFJJTlQoKG5kbywgIiVzICIsIHRzX3VuaXhfZm9ybWF0KG5kbywKKwkJCSAgdHZwLT50dl9zZWMsIHR2cC0+dHZfdXNlYywgYnVmKSkpOwogCQlicmVhazsKIAotCWNhc2UgMzogLyogTWljcm9zZWNvbmRzIHNpbmNlIHByZXZpb3VzIHBhY2tldCAqLwotICAgICAgICBjYXNlIDU6IC8qIE1pY3Jvc2Vjb25kcyBzaW5jZSBmaXJzdCBwYWNrZXQgKi8KLQkJaWYgKGJfc2VjID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8qIGluaXQgdGltZXN0YW1wIGZvciBmaXJzdCBwYWNrZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgICAgIGJfdXNlYyA9IHR2cC0+dHZfdXNlYzsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJfc2VjID0gdHZwLT50dl9zZWM7Ci0gICAgICAgICAgICAgICAgfQorCWNhc2UgMzogLyogTWljcm9zZWNvbmRzL25hbm9zZWNvbmRzIHNpbmNlIHByZXZpb3VzIHBhY2tldCAqLworICAgICAgICBjYXNlIDU6IC8qIE1pY3Jvc2Vjb25kcy9uYW5vc2Vjb25kcyBzaW5jZSBmaXJzdCBwYWNrZXQgKi8KKyNpZmRlZiBIQVZFX1BDQVBfU0VUX1RTVEFNUF9QUkVDSVNJT04KKwkJc3dpdGNoIChuZG8tPm5kb190c3RhbXBfcHJlY2lzaW9uKSB7CisJCWNhc2UgUENBUF9UU1RBTVBfUFJFQ0lTSU9OX01JQ1JPOgorCQkJbmFub19wcmVjID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFBDQVBfVFNUQU1QX1BSRUNJU0lPTl9OQU5POgorCQkJbmFub19wcmVjID0gMTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJbmFub19wcmVjID0gMDsKKwkJCWJyZWFrOworCQl9CisjZWxzZQorCQluYW5vX3ByZWMgPSAwOworI2VuZGlmCisJCWlmICghKG5ldGRpc3NlY3RfdGltZXZhbGlzc2V0KCZ0dl9yZWYpKSkKKwkJCXR2X3JlZiA9ICp0dnA7IC8qIHNldCB0aW1lc3RhbXAgZm9yIGZpcnN0IHBhY2tldCAqLwogCi0gICAgICAgICAgICAgICAgZF91c2VjID0gdHZwLT50dl91c2VjIC0gYl91c2VjOwotICAgICAgICAgICAgICAgIGRfc2VjID0gdHZwLT50dl9zZWMgLSBiX3NlYzsKKwkJbmVnYXRpdmVfb2Zmc2V0ID0gbmV0ZGlzc2VjdF90aW1ldmFsY21wKHR2cCwgJnR2X3JlZiwgPCk7CisJCWlmIChuZWdhdGl2ZV9vZmZzZXQpCisJCQluZXRkaXNzZWN0X3RpbWV2YWxzdWIoJnR2X3JlZiwgdHZwLCAmdHZfcmVzdWx0LCBuYW5vX3ByZWMpOworCQllbHNlCisJCQluZXRkaXNzZWN0X3RpbWV2YWxzdWIodHZwLCAmdHZfcmVmLCAmdHZfcmVzdWx0LCBuYW5vX3ByZWMpOwogCi0gICAgICAgICAgICAgICAgd2hpbGUgKGRfdXNlYyA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgZF91c2VjICs9IDEwMDAwMDA7Ci0gICAgICAgICAgICAgICAgICAgIGRfc2VjLS07Ci0gICAgICAgICAgICAgICAgfQorCQlORF9QUklOVCgobmRvLCAobmVnYXRpdmVfb2Zmc2V0ID8gIi0iIDogIiAiKSkpOwogCi0gICAgICAgICAgICAgICAgTkRfUFJJTlQoKG5kbywgIiVzICIsIHRzX2Zvcm1hdChuZG8sIGRfc2VjLCBkX3VzZWMpKSk7CisJCU5EX1BSSU5UKChuZG8sICIlcyAiLCB0c19mb3JtYXQobmRvLAorCQkJICB0dl9yZXN1bHQudHZfc2VjLCB0dl9yZXN1bHQudHZfdXNlYywgYnVmKSkpOwogCi0gICAgICAgICAgICAgICAgaWYgKG5kby0+bmRvX3RmbGFnID09IDMpIHsgLyogc2V0IHRpbWVzdGFtcCBmb3IgbGFzdCBwYWNrZXQgKi8KLSAgICAgICAgICAgICAgICAgICAgYl9zZWMgPSB0dnAtPnR2X3NlYzsKLSAgICAgICAgICAgICAgICAgICAgYl91c2VjID0gdHZwLT50dl91c2VjOwotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAobmRvLT5uZG9fdGZsYWcgPT0gMykKKwkJCXR2X3JlZiA9ICp0dnA7IC8qIHNldCB0aW1lc3RhbXAgZm9yIHByZXZpb3VzIHBhY2tldCAqLwogCQlicmVhazsKIAotCWNhc2UgNDogLyogRGVmYXVsdCArIERhdGUqLworCWNhc2UgNDogLyogRGVmYXVsdCArIERhdGUgKi8KIAkJcyA9ICh0dnAtPnR2X3NlYyArIHRoaXN6b25lKSAlIDg2NDAwOwogCQlUaW1lID0gKHR2cC0+dHZfc2VjICsgdGhpc3pvbmUpIC0gczsKIAkJdG0gPSBnbXRpbWUgKCZUaW1lKTsKQEAgLTI0OSwzMyArMzgxLDI5IEBACiAJCWVsc2UKIAkJCU5EX1BSSU5UKChuZG8sICIlMDRkLSUwMmQtJTAyZCAlcyAiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRtLT50bV95ZWFyKzE5MDAsIHRtLT50bV9tb24rMSwgdG0tPnRtX21kYXksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHNfZm9ybWF0KG5kbywgcywgdHZwLT50dl91c2VjKSkpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRzX2Zvcm1hdChuZG8sIHMsIHR2cC0+dHZfdXNlYywgYnVmKSkpOwogCQlicmVhazsKIAl9CiB9CiAKIC8qCi0gKiBQcmludCBhIHJlbGF0aXZlIG51bWJlciBvZiBzZWNvbmRzIChlLmcuIGhvbGQgdGltZSwgcHJ1bmUgdGltZXIpCisgKiBQcmludCBhbiB1bnNpZ25lZCByZWxhdGl2ZSBudW1iZXIgb2Ygc2Vjb25kcyAoZS5nLiBob2xkIHRpbWUsIHBydW5lIHRpbWVyKQogICogaW4gdGhlIGZvcm0gNW0xcy4gIFRoaXMgZG9lcyBubyB0cnVuY2F0aW9uLCBzbyAzMjIzMDg2MSBzZWNvbmRzCiAgKiBpcyByZXByZXNlbnRlZCBhcyAxeTF3MWQxaDFtMXMuCiAgKi8KIHZvaWQKLXJlbHRzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAotICAgICAgICAgICAgaW50IHNlY3MpCit1bnNpZ25lZF9yZWx0c19wcmludChuZXRkaXNzZWN0X29wdGlvbnMgKm5kbywKKyAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IHNlY3MpCiB7CiAJc3RhdGljIGNvbnN0IGNoYXIgKmxlbmd0aHNbXSA9IHsieSIsICJ3IiwgImQiLCAiaCIsICJtIiwgInMifTsKLQlzdGF0aWMgY29uc3QgaW50IHNlY29uZHNbXSA9IHszMTUzNjAwMCwgNjA0ODAwLCA4NjQwMCwgMzYwMCwgNjAsIDF9OworCXN0YXRpYyBjb25zdCB1X2ludCBzZWNvbmRzW10gPSB7MzE1MzYwMDAsIDYwNDgwMCwgODY0MDAsIDM2MDAsIDYwLCAxfTsKIAljb25zdCBjaGFyICoqbCA9IGxlbmd0aHM7Ci0JY29uc3QgaW50ICpzID0gc2Vjb25kczsKKwljb25zdCB1X2ludCAqcyA9IHNlY29uZHM7CiAKIAlpZiAoc2VjcyA9PSAwKSB7CiAJCU5EX1BSSU5UKChuZG8sICIwcyIpKTsKIAkJcmV0dXJuOwogCX0KLQlpZiAoc2VjcyA8IDApIHsKLQkJTkRfUFJJTlQoKG5kbywgIi0iKSk7Ci0JCXNlY3MgPSAtc2VjczsKLQl9CiAJd2hpbGUgKHNlY3MgPiAwKSB7CiAJCWlmIChzZWNzID49ICpzKSB7CiAJCQlORF9QUklOVCgobmRvLCAiJWQlcyIsIHNlY3MgLyAqcywgKmwpKTsKQEAgLTI4Nyw2ICs0MTUsNDIgQEAKIH0KIAogLyoKKyAqIFByaW50IGEgc2lnbmVkIHJlbGF0aXZlIG51bWJlciBvZiBzZWNvbmRzIChlLmcuIGhvbGQgdGltZSwgcHJ1bmUgdGltZXIpCisgKiBpbiB0aGUgZm9ybSA1bTFzLiAgVGhpcyBkb2VzIG5vIHRydW5jYXRpb24sIHNvIDMyMjMwODYxIHNlY29uZHMKKyAqIGlzIHJlcHJlc2VudGVkIGFzIDF5MXcxZDFoMW0xcy4KKyAqLwordm9pZAorc2lnbmVkX3JlbHRzX3ByaW50KG5ldGRpc3NlY3Rfb3B0aW9ucyAqbmRvLAorICAgICAgICAgICAgICAgICAgIGludDMyX3Qgc2VjcykKK3sKKwlpZiAoc2VjcyA8IDApIHsKKwkJTkRfUFJJTlQoKG5kbywgIi0iKSk7CisJCWlmIChzZWNzID09IElOVDMyX01JTikgeworCQkJLyoKKwkJCSAqIC0yXjMxOyB5b3UgY2FuJ3QgZml0IGl0cyBhYnNvbHV0ZSB2YWx1ZSBpbnRvCisJCQkgKiBhIDMyLWJpdCBzaWduZWQgaW50ZWdlci4KKwkJCSAqCisJCQkgKiBKdXN0IGRpcmVjdGx5IHBhc3Mgc2FpZCBhYnNvbHV0ZSB2YWx1ZSB0bworCQkJICogdW5zaWduZWRfcmVsdHNfcHJpbnQoKSBkaXJlY3RseS4KKwkJCSAqCisJCQkgKiAoWFhYIC0gZG9lcyBJU08gQyBndWFyYW50ZWUgdGhhdCAtKC0yXm4pLAorCQkJICogd2hlbiBjYWxjdWxhdGVkIGFuZCBjYXN0IHRvIGFuIG4tYml0IHVuc2lnbmVkCisJCQkgKiBpbnRlZ2VyIHR5cGUsIHdpbGwgaGF2ZSB0aGUgdmFsdWUgMl5uPykKKwkJCSAqLworCQkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCAyMTQ3NDgzNjQ4VSk7CisJCX0gZWxzZSB7CisJCQkvKgorCQkJICogV2Ugbm93IGtub3cgLXNlY3Mgd2lsbCBmaXQgaW50byBhbiBpbnQzMl90OworCQkJICogbmVnYXRlIGl0IGFuZCBwYXNzIHRoYXQgdG8gdW5zaWduZWRfcmVsdHNfcHJpbnQoKS4KKwkJCSAqLworCQkJdW5zaWduZWRfcmVsdHNfcHJpbnQobmRvLCAtc2Vjcyk7CisJCX0KKwkJcmV0dXJuOworCX0KKwl1bnNpZ25lZF9yZWx0c19wcmludChuZG8sIHNlY3MpOworfQorCisvKgogICogIHRoaXMgaXMgYSBnZW5lcmljIHJvdXRpbmUgZm9yIHByaW50aW5nIHVua25vd24gZGF0YTsKICAqICB3ZSBwYXNzIG9uIHRoZSBsaW5lZmVlZCBwbHVzIGluZGVudGF0aW9uIHN0cmluZyB0bwogICogIGdldCBhIHByb3BlciBvdXRwdXQgLSByZXR1cm5zIDAgb24gZXJyb3IKQEAgLTMzOSw3ICs1MDMsNyBAQAogdG9rMnN0cihyZWdpc3RlciBjb25zdCBzdHJ1Y3QgdG9rICpscCwgcmVnaXN0ZXIgY29uc3QgY2hhciAqZm10LAogCXJlZ2lzdGVyIHVfaW50IHYpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzRdWzEyOF07CisJc3RhdGljIGNoYXIgYnVmWzRdW1RPS0JVRlNJWkVdOwogCXN0YXRpYyBpbnQgaWR4ID0gMDsKIAljaGFyICpyZXQ7CiAKQEAgLTQxMyw3ICs1NzcsNyBAQAogCiAvKgogICogQ29udmVydCBhIHZhbHVlIHRvIGEgc3RyaW5nIHVzaW5nIGFuIGFycmF5OyB0aGUgbWFjcm8KLSAqIHRvazJzdHJhcnkoKSBpbiA8aW50ZXJmYWNlLmg+IGlzIHRoZSBwdWJsaWMgaW50ZXJmYWNlIHRvCisgKiB0b2syc3RyYXJ5KCkgaW4gPG5ldGRpc3NlY3QuaD4gaXMgdGhlIHB1YmxpYyBpbnRlcmZhY2UgdG8KICAqIHRoaXMgZnVuY3Rpb24gYW5kIGVuc3VyZXMgdGhhdCB0aGUgc2Vjb25kIGFyZ3VtZW50IGlzCiAgKiBjb3JyZWN0IGZvciBib3VuZHMtY2hlY2tpbmcuCiAgKi8KQEAgLTQyMSw3ICs1ODUsNyBAQAogdG9rMnN0cmFyeV9pbnRlcm5hbChyZWdpc3RlciBjb25zdCBjaGFyICoqbHAsIGludCBuLCByZWdpc3RlciBjb25zdCBjaGFyICpmbXQsCiAJcmVnaXN0ZXIgaW50IHYpCiB7Ci0Jc3RhdGljIGNoYXIgYnVmWzEyOF07CisJc3RhdGljIGNoYXIgYnVmW1RPS0JVRlNJWkVdOwogCiAJaWYgKHYgPj0gMCAmJiB2IDwgbiAmJiBscFt2XSAhPSBOVUxMKQogCQlyZXR1cm4gbHBbdl07CkBAIC00NjIsNyArNjI2LDYgQEAKIAlyZXR1cm4gKHByZWZpeF9sZW4pOwogfQogCi0jaWZkZWYgSU5FVDYKIGludAogbWFzazYycGxlbihjb25zdCB1X2NoYXIgKm1hc2spCiB7CkBAIC00ODksNyArNjUyLDYgQEAKIAl9CiAJcmV0dXJuIChjaWRyX2xlbik7CiB9Ci0jZW5kaWYgLyogSU5FVDYgKi8KIAogLyoKICAqIFJvdXRpbmUgdG8gcHJpbnQgb3V0IGluZm9ybWF0aW9uIGZvciB0ZXh0LWJhc2VkIHByb3RvY29scyBzdWNoIGFzIEZUUCwKQEAgLTY2Myw3ICs4MjUsNyBAQAogCQlpZiAoaWR4ICE9IDApIHsKIAkJCS8qIElzIHRoaXMgYSB2YWxpZCByZXF1ZXN0IG5hbWU/ICovCiAJCQl3aGlsZSAoKGNtZCA9ICpjbWRzKyspICE9IE5VTEwpIHsKLQkJCQlpZiAoc3RyY2FzZWNtcCgoY29uc3QgY2hhciAqKXRva2VuLCBjbWQpID09IDApIHsKKwkJCQlpZiAoYXNjaWlfc3RyY2FzZWNtcCgoY29uc3QgY2hhciAqKXRva2VuLCBjbWQpID09IDApIHsKIAkJCQkJLyogWWVzLiAqLwogCQkJCQlpc19yZXFyZXNwID0gMTsKIAkJCQkJYnJlYWs7CkBAIC03MDMsNyArODY1LDcgQEAKIAogCS8qIENhcGl0YWxpemUgdGhlIHByb3RvY29sIG5hbWUgKi8KIAlmb3IgKHBucCA9IHByb3RvbmFtZTsgKnBucCAhPSAnXDAnOyBwbnArKykKLQkJTkRfUFJJTlQoKG5kbywgIiVjIiwgdG91cHBlcigqcG5wKSkpOworCQlORF9QUklOVCgobmRvLCAiJWMiLCB0b3VwcGVyKCh1X2NoYXIpKnBucCkpKTsKIAogCWlmIChpc19yZXFyZXNwKSB7CiAJCS8qCkBAIC03MzQsMTIxICs4OTYsNiBAQAogCX0KIH0KIAotLyogVkFSQVJHUyAqLwotdm9pZAotZXJyb3IoY29uc3QgY2hhciAqZm10LCAuLi4pCi17Ci0JdmFfbGlzdCBhcDsKLQotCSh2b2lkKWZwcmludGYoc3RkZXJyLCAiJXM6ICIsIHByb2dyYW1fbmFtZSk7Ci0JdmFfc3RhcnQoYXAsIGZtdCk7Ci0JKHZvaWQpdmZwcmludGYoc3RkZXJyLCBmbXQsIGFwKTsKLQl2YV9lbmQoYXApOwotCWlmICgqZm10KSB7Ci0JCWZtdCArPSBzdHJsZW4oZm10KTsKLQkJaWYgKGZtdFstMV0gIT0gJ1xuJykKLQkJCSh2b2lkKWZwdXRjKCdcbicsIHN0ZGVycik7Ci0JfQotCWV4aXQoMSk7Ci0JLyogTk9UUkVBQ0hFRCAqLwotfQotCi0vKiBWQVJBUkdTICovCi12b2lkCi13YXJuaW5nKGNvbnN0IGNoYXIgKmZtdCwgLi4uKQotewotCXZhX2xpc3QgYXA7Ci0KLQkodm9pZClmcHJpbnRmKHN0ZGVyciwgIiVzOiBXQVJOSU5HOiAiLCBwcm9ncmFtX25hbWUpOwotCXZhX3N0YXJ0KGFwLCBmbXQpOwotCSh2b2lkKXZmcHJpbnRmKHN0ZGVyciwgZm10LCBhcCk7Ci0JdmFfZW5kKGFwKTsKLQlpZiAoKmZtdCkgewotCQlmbXQgKz0gc3RybGVuKGZtdCk7Ci0JCWlmIChmbXRbLTFdICE9ICdcbicpCi0JCQkodm9pZClmcHV0YygnXG4nLCBzdGRlcnIpOwotCX0KLX0KLQotLyoKLSAqIENvcHkgYXJnIHZlY3RvciBpbnRvIGEgbmV3IGJ1ZmZlciwgY29uY2F0ZW5hdGluZyBhcmd1bWVudHMgd2l0aCBzcGFjZXMuCi0gKi8KLWNoYXIgKgotY29weV9hcmd2KHJlZ2lzdGVyIGNoYXIgKiphcmd2KQotewotCXJlZ2lzdGVyIGNoYXIgKipwOwotCXJlZ2lzdGVyIHVfaW50IGxlbiA9IDA7Ci0JY2hhciAqYnVmOwotCWNoYXIgKnNyYywgKmRzdDsKLQotCXAgPSBhcmd2OwotCWlmICgqcCA9PSAwKQotCQlyZXR1cm4gMDsKLQotCXdoaWxlICgqcCkKLQkJbGVuICs9IHN0cmxlbigqcCsrKSArIDE7Ci0KLQlidWYgPSAoY2hhciAqKW1hbGxvYyhsZW4pOwotCWlmIChidWYgPT0gTlVMTCkKLQkJZXJyb3IoImNvcHlfYXJndjogbWFsbG9jIik7Ci0KLQlwID0gYXJndjsKLQlkc3QgPSBidWY7Ci0Jd2hpbGUgKChzcmMgPSAqcCsrKSAhPSBOVUxMKSB7Ci0JCXdoaWxlICgoKmRzdCsrID0gKnNyYysrKSAhPSAnXDAnKQotCQkJOwotCQlkc3RbLTFdID0gJyAnOwotCX0KLQlkc3RbLTFdID0gJ1wwJzsKLQotCXJldHVybiBidWY7Ci19Ci0KLS8qCi0gKiBPbiBXaW5kb3dzLCB3ZSBuZWVkIHRvIG9wZW4gdGhlIGZpbGUgaW4gYmluYXJ5IG1vZGUsIHNvIHRoYXQKLSAqIHdlIGdldCBhbGwgdGhlIGJ5dGVzIHNwZWNpZmllZCBieSB0aGUgc2l6ZSB3ZSBnZXQgZnJvbSAiZnN0YXQoKSIuCi0gKiBPbiBVTklYLCB0aGF0J3Mgbm90IG5lY2Vzc2FyeS4gIE9fQklOQVJZIGlzIGRlZmluZWQgb24gV2luZG93czsKLSAqIHdlIGRlZmluZSBpdCBhcyAwIGlmIGl0J3Mgbm90IGRlZmluZWQsIHNvIGl0IGRvZXMgbm90aGluZy4KLSAqLwotI2lmbmRlZiBPX0JJTkFSWQotI2RlZmluZSBPX0JJTkFSWQkwCi0jZW5kaWYKLQotY2hhciAqCi1yZWFkX2luZmlsZShjaGFyICpmbmFtZSkKLXsKLQlyZWdpc3RlciBpbnQgaSwgZmQsIGNjOwotCXJlZ2lzdGVyIGNoYXIgKmNwOwotCXN0cnVjdCBzdGF0IGJ1ZjsKLQotCWZkID0gb3BlbihmbmFtZSwgT19SRE9OTFl8T19CSU5BUlkpOwotCWlmIChmZCA8IDApCi0JCWVycm9yKCJjYW4ndCBvcGVuICVzOiAlcyIsIGZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7Ci0KLQlpZiAoZnN0YXQoZmQsICZidWYpIDwgMCkKLQkJZXJyb3IoImNhbid0IHN0YXQgJXM6ICVzIiwgZm5hbWUsIHBjYXBfc3RyZXJyb3IoZXJybm8pKTsKLQotCWNwID0gbWFsbG9jKCh1X2ludClidWYuc3Rfc2l6ZSArIDEpOwotCWlmIChjcCA9PSBOVUxMKQotCQllcnJvcigibWFsbG9jKCVkKSBmb3IgJXM6ICVzIiwgKHVfaW50KWJ1Zi5zdF9zaXplICsgMSwKLQkJCWZuYW1lLCBwY2FwX3N0cmVycm9yKGVycm5vKSk7Ci0JY2MgPSByZWFkKGZkLCBjcCwgKHVfaW50KWJ1Zi5zdF9zaXplKTsKLQlpZiAoY2MgPCAwKQotCQllcnJvcigicmVhZCAlczogJXMiLCBmbmFtZSwgcGNhcF9zdHJlcnJvcihlcnJubykpOwotCWlmIChjYyAhPSBidWYuc3Rfc2l6ZSkKLQkJZXJyb3IoInNob3J0IHJlYWQgJXMgKCVkICE9ICVkKSIsIGZuYW1lLCBjYywgKGludClidWYuc3Rfc2l6ZSk7Ci0KLQljbG9zZShmZCk7Ci0JLyogcmVwbGFjZSAiIyBjb21tZW50IiB3aXRoIHNwYWNlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBjYzsgaSsrKSB7Ci0JCWlmIChjcFtpXSA9PSAnIycpCi0JCQl3aGlsZSAoaSA8IGNjICYmIGNwW2ldICE9ICdcbicpCi0JCQkJY3BbaSsrXSA9ICcgJzsKLQl9Ci0JY3BbY2NdID0gJ1wwJzsKLQlyZXR1cm4gKGNwKTsKLX0KLQogdm9pZAogc2FmZXB1dHMobmV0ZGlzc2VjdF9vcHRpb25zICpuZG8sCiAgICAgICAgICBjb25zdCB1X2NoYXIgKnMsIGNvbnN0IHVfaW50IG1heGxlbikKQEAgLTg4OCwzICs5MzUsNCBAQAogCXJldHVybiAobWVtY21wKHAsIHEsIGwpKTsKIH0KICNlbmRpZgorCmRpZmYgLS1naXQgYS92ZXJzaW9uLmMgYi92ZXJzaW9uLmMKaW5kZXggZTdkYjcwOC4uMzkxYThkYiAxMDA2NDQKLS0tIGEvdmVyc2lvbi5jCisrKyBiL3ZlcnNpb24uYwpAQCAtMSArMSBAQAotY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiNC43LjQiOworY29uc3QgY2hhciB2ZXJzaW9uW10gPSAiNC45LjAiOwpkaWZmIC0tZ2l0IGEvdmZwcmludGYuYyBiL3ZmcHJpbnRmLmMKaW5kZXggNmYzZTE1Zi4uYWUyOGJjZiAxMDA2NDQKLS0tIGEvdmZwcmludGYuYworKysgYi92ZnByaW50Zi5jCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8c3RkbGliLmg+CiAjaW5jbHVkZSA8dW5pc3RkLmg+CiAKLSNpbmNsdWRlICJpbnRlcmZhY2UuaCIKKyNpbmNsdWRlICJuZXRkaXNzZWN0LmgiCiAKIC8qCiAgKiBTdG9jayA0LjMgZG9lc24ndCBoYXZlIHZmcHJpbnRmLgpkaWZmIC0tZ2l0IGEvd2luMzIvSW5jbHVkZS93MzJfZnpzLmggYi93aW4zMi9JbmNsdWRlL3czMl9menMuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOGI1ZTU5OC4uMDAwMDAwMAotLS0gYS93aW4zMi9JbmNsdWRlL3czMl9menMuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKGMpIDE5OTkKLSAqIE5ldEdyb3VwLCBQb2xpdGVjbmljbyBkaSBUb3Jpbm8gKEl0YWx5KQotICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqCi0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKiAzLiBOZWl0aGVyIHRoZSBuYW1lIG9mIHRoZSBQb2xpdGVjbmljbyBkaSBUb3Jpbm8gbm9yIHRoZSBuYW1lcyBvZiBpdHMKLSAqIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGUgcHJvZHVjdHMgZGVyaXZlZCBmcm9tCi0gKiB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlMKLSAqICJBUyBJUyIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UCi0gKiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IKLSAqIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUCi0gKiBPV05FUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwKLSAqIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QKLSAqIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLAotICogREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZCi0gKiBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKgotICovCi0KLSNpZm5kZWYgX1dJTlNPQ0tBUElfCi0jZGVmaW5lIF9XSU5TT0NLQVBJXyAvKiBQcmV2ZW50IGluY2x1c2lvbiBvZiB3aW5zb2NrLmggaW4gd2luZG93cy5oICovCi0jZW5kaWYgLyogX1dJTlNPQ0tBUElfICovCi0jaW5jbHVkZSA8d2luZG93cy5oPgotI2luY2x1ZGUgPHdpbnNvY2syLmg+Ci0KLWV4dGVybiBpbnQgcHJvZ3Jlc3M7Ci1pbnQgd3NvY2tpbml0KCk7Ci12b2lkIEluaXRQKCk7Ci12b2lkIFByaW50Q2FwQmVnaW5zIChjaGFyKiBwcm9ncmFtX25hbWUsIGNoYXIqIGRldmljZSk7Ci1leHRlcm4gY2hhciogQWRhcHRlck5hbWUxOwotI2lmbmRlZiBXSU45NQotV0NIQVIqIFNDaGFyMldDaGFyKGNoYXIqIG5vbWUpOwotI2Vsc2UKLUJPT0xFQU4gU3RhcnRQYWNrZXREcml2ZXIoTFBUU1RSIFNlcnZpY2VOYW1lKTsKLSNlbmRpZgpkaWZmIC0tZ2l0IGEvd2luMzIvcHJqL1dpbkR1bXAuZHNwIGIvd2luMzIvcHJqL1dpbkR1bXAuZHNwCmluZGV4IGFjYWZkZGQuLmVhMDViYTAgMTAwNjQ0Ci0tLSBhL3dpbjMyL3Byai9XaW5EdW1wLmRzcAorKysgYi93aW4zMi9wcmovV2luRHVtcC5kc3AKQEAgLTQxLDggKzQxLDggQEAKICMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJSZWxlYXNlIgogIyBQUk9QIElnbm9yZV9FeHBvcnRfTGliIDAKICMgUFJPUCBUYXJnZXRfRGlyICIiCi0jIEFERCBCQVNFIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9EICJXSU4zMiIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKLSMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvYnBmIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwL1dpbjMyL0luY2x1ZGUiIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZS9uZXQiIC9JICIuLi8uLi9XaW4zMi9JbmNsdWRlIiAvSSAiLi4vLi4vbGludXgtSW5jbHVkZSIgL0kgIi4uLy4uL2xibCIgL0kgIi4uLy4uLyIgL0kgIi4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvd2luMzItZXh0ZW5zaW9ucyIgL0QgIk5ERUJVRyIgL0QgIklORVQ2IiAvRCAiV0lOMzIiIC9EICJfTUJDUyIgL0QgIl9DT05TT0xFIiAvRCAiX19TVERDX18iIC9EICJXUENBUCIgL0QgSEFWRV9BRERSSU5GTz0xIC9EIEhBVkVfU09DS0FERFJfU1RPUkFHRT0xIC9EIEhBVkVfUENBUF9MSVNUX0RBVEFMSU5LUz0xIC9EIEhBVkVfUENBUF9TRVRfREFUQUxJTks9MSAvRCBIQVZFX1BDQVBfREFUQUxJTktfTkFNRV9UT19WQUw9MSAvRCBIQVZFX1BDQVBfREFUQUxJTktfVkFMX1RPX0RFU0NSSVBUSU9OPTEgL0QgSEFWRV9QQ0FQX0RVTVBfRlRFTEw9MSAvRCBIQVZFX0JQRl9EVU1QPTEgL0QgSEFWRV9QQ0FQX0RVTVBfRkxVU0g9MSAvRCBIQVZFX1BDQVBfRklOREFMTERFVlM9MSAvRCBIQVZFX1BDQVBfSUZfVD0xIC9EIEhBVkVfUENBUF9MSUJfVkVSU0lPTj0xIC9EICJIQVZFX1JFTU9URSIgL0QgX1VfPSAvRFVTRV9FVEhFUl9OVE9IT1NUIC9ZWCAvRkQgL2MKKyMgQUREIEJBU0UgQ1BQIC9ub2xvZ28gL1czIC9HWCAvTzIgL0QgIk5ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKKyMgQUREIENQUCAvbm9sb2dvIC9XMyAvR1ggL08yIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvYnBmIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwL1dpbjMyL0luY2x1ZGUiIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZS9uZXQiIC9JICIuLi8uLi9sYmwiIC9JICIuLi8uLi8iIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL3dpbjMyLWV4dGVuc2lvbnMiIC9EICJOREVCVUciIC9EICJfTUJDUyIgL0QgIl9DT05TT0xFIiAvRCAiX19TVERDX18iIC9EICJXUENBUCIgL0QgSEFWRV9QQ0FQX0xJU1RfREFUQUxJTktTPTEgL0QgSEFWRV9QQ0FQX1NFVF9EQVRBTElOSz0xIC9EIEhBVkVfUENBUF9EQVRBTElOS19OQU1FX1RPX1ZBTD0xIC9EIEhBVkVfUENBUF9EQVRBTElOS19WQUxfVE9fREVTQ1JJUFRJT049MSAvRCBIQVZFX1BDQVBfRFVNUF9GVEVMTD0xIC9EIEhBVkVfQlBGX0RVTVA9MSAvRCBIQVZFX1BDQVBfRFVNUF9GTFVTSD0xIC9EIEhBVkVfUENBUF9GSU5EQUxMREVWUz0xIC9EIEhBVkVfUENBUF9JRl9UPTEgL0QgSEFWRV9QQ0FQX0xJQl9WRVJTSU9OPTEgL0QgIkhBVkVfUkVNT1RFIiAvRCBfVV89IC9EVVNFX0VUSEVSX05UT0hPU1QgL1lYIC9GRCAvYwogIyBBREQgQkFTRSBSU0MgL2wgMHg0MTAgL2QgIk5ERUJVRyIKICMgQUREIFJTQyAvbCAweDQxMCAvZCAiTkRFQlVHIgogQlNDMzI9YnNjbWFrZS5leGUKQEAgLTY1LDggKzY1LDggQEAKICMgUFJPUCBJbnRlcm1lZGlhdGVfRGlyICJEZWJ1ZyIKICMgUFJPUCBJZ25vcmVfRXhwb3J0X0xpYiAwCiAjIFBST1AgVGFyZ2V0X0RpciAiIgotIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJXSU4zMiIgL0QgIl9ERUJVRyIgL0QgIl9DT05TT0xFIiAvRCAiX01CQ1MiIC9ZWCAvRkQgL2MKLSMgQUREIENQUCAvbm9sb2dvIC9XMyAvR20gL0dpIC9HWCAvWkkgL0kgIi4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcC9icGYiIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAiIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZSIgL0kgIi4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcC9XaW4zMi9JbmNsdWRlL25ldCIgL0kgIi4uLy4uL1dpbjMyL0luY2x1ZGUiIC9JICIuLi8uLi9saW51eC1JbmNsdWRlIiAvSSAiLi4vLi4vbGJsIiAvSSAiLi4vLi4vIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC93aW4zMi1leHRlbnNpb25zIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJJTkVUNiIgL0QgIldJTjMyIiAvRCAiX01CQ1MiIC9EICJfQ09OU09MRSIgL0QgIl9fU1REQ19fIiAvRCAiV1BDQVAiIC9EIEhBVkVfQUREUklORk89MSAvRCBIQVZFX1NPQ0tBRERSX1NUT1JBR0U9MSAvRCBIQVZFX1BDQVBfTElTVF9EQVRBTElOS1M9MSAvRCBIQVZFX1BDQVBfU0VUX0RBVEFMSU5LPTEgL0QgSEFWRV9QQ0FQX0RBVEFMSU5LX05BTUVfVE9fVkFMPTEgL0QgSEFWRV9QQ0FQX0RBVEFMSU5LX1ZBTF9UT19ERVNDUklQVElPTj0xIC9EIEhBVkVfUENBUF9EVU1QX0ZURUxMPTEgL0QgSEFWRV9CUEZfRFVNUD0xIC9EIEhBVkVfUENBUF9EVU1QX0ZMVVNIPTEgL0QgSEFWRV9QQ0FQX0ZJTkRBTExERVZTPTEgL0QgSEFWRV9QQ0FQX0lGX1Q9MSAvRCBIQVZFX1BDQVBfTElCX1ZFUlNJT049MSAvRCAiSEFWRV9SRU1PVEUiIC9EIF9VXz0gL0RVU0VfRVRIRVJfTlRPSE9TVCAvRlIgL1lYIC9GRCAvYworIyBBREQgQkFTRSBDUFAgL25vbG9nbyAvVzMgL0dtIC9HWCAvWmkgL09kIC9EICJfREVCVUciIC9EICJfQ09OU09MRSIgL0QgIl9NQkNTIiAvWVggL0ZEIC9jCisjIEFERCBDUFAgL25vbG9nbyAvVzMgL0dtIC9HaSAvR1ggL1pJIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvYnBmIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwL1dpbjMyL0luY2x1ZGUiIC9JICIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZS9uZXQiIC9JICIuLi8uLi9XaW4zMi9JbmNsdWRlIiAvSSAiLi4vLi4vbGJsIiAvSSAiLi4vLi4vIiAvSSAiLi4vLi4vLi4vd2lucGNhcC93cGNhcC93aW4zMi1leHRlbnNpb25zIiAvRCAiX0RFQlVHIiAvRCAiX1dJTkRPV1MiIC9EICJfTUJDUyIgL0QgIl9DT05TT0xFIiAvRCAiX19TVERDX18iIC9EICJXUENBUCIgL0QgSEFWRV9QQ0FQX0xJU1RfREFUQUxJTktTPTEgL0QgSEFWRV9QQ0FQX1NFVF9EQVRBTElOSz0xIC9EIEhBVkVfUENBUF9EQVRBTElOS19OQU1FX1RPX1ZBTD0xIC9EIEhBVkVfUENBUF9EQVRBTElOS19WQUxfVE9fREVTQ1JJUFRJT049MSAvRCBIQVZFX1BDQVBfRFVNUF9GVEVMTD0xIC9EIEhBVkVfQlBGX0RVTVA9MSAvRCBIQVZFX1BDQVBfRFVNUF9GTFVTSD0xIC9EIEhBVkVfUENBUF9GSU5EQUxMREVWUz0xIC9EIEhBVkVfUENBUF9JRl9UPTEgL0QgSEFWRV9QQ0FQX0xJQl9WRVJTSU9OPTEgL0QgIkhBVkVfUkVNT1RFIiAvRCBfVV89IC9EVVNFX0VUSEVSX05UT0hPU1QgL0ZSIC9ZWCAvRkQgL2MKICMgQUREIEJBU0UgUlNDIC9sIDB4NDEwIC9kICJfREVCVUciCiAjIEFERCBSU0MgL2wgMHg0MTAgL2QgIl9ERUJVRyIKIEJTQzMyPWJzY21ha2UuZXhlCkBAIC04OSwxMCArODksMTggQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0uLlwuLlxhZGRydG9zdHIuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPS4uXC4uXGFmLmMKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0uLlwuLlxhc2NpaV9zdHJjYXNlY21wLmMKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0uLlwuLlxicGZfZHVtcC5jCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtMTI1LDE1ICsxMzMsNyBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAotU09VUkNFPS4uXC4uXG1pc3NpbmdcaW5ldF9hdG9uLmMKLSMgRW5kIFNvdXJjZSBGaWxlCi0jIEJlZ2luIFNvdXJjZSBGaWxlCi0KLVNPVVJDRT0uLlwuLlxtaXNzaW5nXGluZXRfbnRvcC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCi1TT1VSQ0U9Li5cLi5cbWlzc2luZ1xpbmV0X3B0b24uYworU09VUkNFPS4uXC4uXGluX2Nrc3VtLmMKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKQEAgLTE2NSwxNCArMTY1LDI2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Li5cLi5ccHJpbnQtODAyXzE1XzQuYworIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPSIuLlwuLlxwcmludC1haC5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1haGNwLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LWFvZHYuYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtYW9lLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LWFwMTM5NC5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTE5Nyw2ICsyMDksMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtYmFiZWwuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtYmVlcC5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTIxNyw2ICsyMzMsMTQgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtY2FsbS1mYXN0LmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Ii4uXC4uXHByaW50LWNhcnAuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtY2RwLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtMjg5LDYgKzMxMywxMCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1mb3JjZXMuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtZnIuYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC0yOTcsNiArMzI1LDE4IEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Ii4uXC4uXHByaW50LWZ0cC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPSIuLlwuLlxwcmludC1nZW5ldmUuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0iLi5cLi5ccHJpbnQtZ2VvbmV0LmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LWdyZS5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTMwNSw2ICszNDUsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtaHR0cC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPSIuLlwuLlxwcmludC1pY21wLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtMzQxLDYgKzM4NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1pcG5ldC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPSIuLlwuLlxwcmludC1pcHguYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC0zODUsNiArNDMzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Ii4uXC4uXHByaW50LWxvb3BiYWNrLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LWxzcHBpbmcuYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC0zOTcsNiArNDQ5LDE0IEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Ii4uXC4uXHByaW50LW0zdWEuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0iLi5cLi5ccHJpbnQtbWVkc2EuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtbW9iaWxlLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtNDEzLDExICs0NzMsMTkgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtbXB0Y3AuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtbXNkcC5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAotU09VUkNFPSIuLlwuLlxwcmludC1uZXRiaW9zLmMiCitTT1VSQ0U9Ii4uXC4uXHByaW50LW1zbmxiLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Ii4uXC4uXHByaW50LW5mbG9nLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCkBAIC00MzcsNiArNTA1LDE0IEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Ii4uXC4uXHByaW50LW9wZW5mbG93LTEuMC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPSIuLlwuLlxwcmludC1vcGVuZmxvdy5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPSIuLlwuLlxwcmludC1vc3BmLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtNDQ1LDYgKzUyMSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1vdHYuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtcGdtLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtNDUzLDYgKzUzMywxNCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1wa3RhcC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPSIuLlwuLlxwcmludC1wcGkuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtcHBwLmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtNDk3LDYgKzU4NSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1ydHNwLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LXJ4LmMiCiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQpAQCAtNTI5LDYgKzYyMSwxMCBAQAogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKIAorU09VUkNFPSIuLlwuLlxwcmludC1zbXRwLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LXNubXAuYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC01MzcsNiArNjMzLDEwIEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCitTT1VSQ0U9Ii4uXC4uXG1pc3Npbmdcc3RyZHVwLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LXN1bmF0bS5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTU2OSw2ICs2NjksMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtdGlwYy5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPSIuLlwuLlxwcmludC10b2tlbi5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTU4MSw2ICs2ODUsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtdXNiLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCiBTT1VSQ0U9Ii4uXC4uXHByaW50LXZqYy5jIgogIyBFbmQgU291cmNlIEZpbGUKICMgQmVnaW4gU291cmNlIEZpbGUKQEAgLTU5Nyw2ICs3MDUsMTAgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtdnhsYW4uYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKIFNPVVJDRT0iLi5cLi5ccHJpbnQtd2IuYyIKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC02MTMsMTAgKzcyNSw2IEBACiAjIEVuZCBTb3VyY2UgRmlsZQogIyBCZWdpbiBTb3VyY2UgRmlsZQogCi1TT1VSQ0U9Li5cLi5cc3RyY2FzZWNtcC5jCi0jIEVuZCBTb3VyY2UgRmlsZQotIyBCZWdpbiBTb3VyY2UgRmlsZQotCiBTT1VSQ0U9Li5cLi5cbWlzc2luZ1xzdHJsY2F0LmMKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCkBAIC02MjksNyArNzM3LDcgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKLVNPVVJDRT0uLlwuLlxUY3BkdW1wLmMKK1NPVVJDRT0uLlwuLlx0Y3BkdW1wLmMKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKQEAgLTYzNyw2ICs3NDUsMjYgQEAKICMgRW5kIFNvdXJjZSBGaWxlCiAjIEJlZ2luIFNvdXJjZSBGaWxlCiAKK1NPVVJDRT0iLi5cLi5ccHJpbnQtemVyb21xLmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Ii4uXC4uXHByaW50LmMiCisjIEVuZCBTb3VyY2UgRmlsZQorIyBCZWdpbiBTb3VyY2UgRmlsZQorCitTT1VSQ0U9Ii4uXC4uXHNpZ25hdHVyZS5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKworU09VUkNFPSIuLlwuLlxzdHJ0b2FkZHIuYyIKKyMgRW5kIFNvdXJjZSBGaWxlCisjIEJlZ2luIFNvdXJjZSBGaWxlCisKK1NPVVJDRT0iLi5cLi5cdXRpbC1wcmludC5jIgorIyBFbmQgU291cmNlIEZpbGUKKyMgQmVnaW4gU291cmNlIEZpbGUKKwogU09VUkNFPS4uXC4uXHV0aWwuYwogIyBFbmQgU291cmNlIEZpbGUKICMgRW5kIFRhcmdldApkaWZmIC0tZ2l0IGEvd2luMzIvcHJqL1dpbkR1bXAuc2xuIGIvd2luMzIvcHJqL1dpbkR1bXAuc2xuCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU1YTg0MmYKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9wcmovV2luRHVtcC5zbG4KQEAgLTAsMCArMSwyMCBAQAor77u/CitNaWNyb3NvZnQgVmlzdWFsIFN0dWRpbyBTb2x1dGlvbiBGaWxlLCBGb3JtYXQgVmVyc2lvbiA5LjAwCisjIFZpc3VhbCBTdHVkaW8gMjAwNQorUHJvamVjdCgiezhCQzlDRUI4LThCNEEtMTFEMC04RDExLTAwQTBDOTFCQzk0Mn0iKSA9ICJXaW5EdW1wIiwgIldpbkR1bXAudmNwcm9qIiwgIntDQTc5OTgxMS1BRjcxLTRDODgtQkJEQS1DREM0OUIxMzc1OEJ9IgorRW5kUHJvamVjdAorR2xvYmFsCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvbkNvbmZpZ3VyYXRpb25QbGF0Zm9ybXMpID0gcHJlU29sdXRpb24KKwkJRGVidWd8V2luMzIgPSBEZWJ1Z3xXaW4zMgorCQlSZWxlYXNlfFdpbjMyID0gUmVsZWFzZXxXaW4zMgorCUVuZEdsb2JhbFNlY3Rpb24KKwlHbG9iYWxTZWN0aW9uKFByb2plY3RDb25maWd1cmF0aW9uUGxhdGZvcm1zKSA9IHBvc3RTb2x1dGlvbgorCQl7Q0E3OTk4MTEtQUY3MS00Qzg4LUJCREEtQ0RDNDlCMTM3NThCfS5EZWJ1Z3xXaW4zMi5BY3RpdmVDZmcgPSBEZWJ1Z3xXaW4zMgorCQl7Q0E3OTk4MTEtQUY3MS00Qzg4LUJCREEtQ0RDNDlCMTM3NThCfS5EZWJ1Z3xXaW4zMi5CdWlsZC4wID0gRGVidWd8V2luMzIKKwkJe0NBNzk5ODExLUFGNzEtNEM4OC1CQkRBLUNEQzQ5QjEzNzU4Qn0uUmVsZWFzZXxXaW4zMi5BY3RpdmVDZmcgPSBSZWxlYXNlfFdpbjMyCisJCXtDQTc5OTgxMS1BRjcxLTRDODgtQkJEQS1DREM0OUIxMzc1OEJ9LlJlbGVhc2V8V2luMzIuQnVpbGQuMCA9IFJlbGVhc2V8V2luMzIKKwlFbmRHbG9iYWxTZWN0aW9uCisJR2xvYmFsU2VjdGlvbihTb2x1dGlvblByb3BlcnRpZXMpID0gcHJlU29sdXRpb24KKwkJSGlkZVNvbHV0aW9uTm9kZSA9IEZBTFNFCisJRW5kR2xvYmFsU2VjdGlvbgorRW5kR2xvYmFsCmRpZmYgLS1naXQgYS93aW4zMi9wcmovV2luRHVtcC52Y3Byb2ogYi93aW4zMi9wcmovV2luRHVtcC52Y3Byb2oKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDE3ODdhYgotLS0gL2Rldi9udWxsCisrKyBiL3dpbjMyL3Byai9XaW5EdW1wLnZjcHJvagpAQCAtMCwwICsxLDM5NTAgQEAKKzw/eG1sIHZlcnNpb249IjEuMCIgZW5jb2Rpbmc9IldpbmRvd3MtMTI1MiI/PgorPFZpc3VhbFN0dWRpb1Byb2plY3QKKwlQcm9qZWN0VHlwZT0iVmlzdWFsIEMrKyIKKwlWZXJzaW9uPSI4LjAwIgorCU5hbWU9IldpbkR1bXAiCisJUHJvamVjdEdVSUQ9IntDQTc5OTgxMS1BRjcxLTRDODgtQkJEQS1DREM0OUIxMzc1OEJ9IgorCT4KKwk8UGxhdGZvcm1zPgorCQk8UGxhdGZvcm0KKwkJCU5hbWU9IldpbjMyIgorCQkvPgorCTwvUGxhdGZvcm1zPgorCTxUb29sRmlsZXM+CisJPC9Ub29sRmlsZXM+CisJPENvbmZpZ3VyYXRpb25zPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQlPdXRwdXREaXJlY3Rvcnk9Ii5cLi4vLi4iCisJCQlJbnRlcm1lZGlhdGVEaXJlY3Rvcnk9Ii5cRGVidWciCisJCQlDb25maWd1cmF0aW9uVHlwZT0iMSIKKwkJCUluaGVyaXRlZFByb3BlcnR5U2hlZXRzPSIkKFZDSW5zdGFsbERpcilWQ1Byb2plY3REZWZhdWx0c1xVcGdyYWRlRnJvbVZDNjAudnNwcm9wcyIKKwkJCVVzZU9mTUZDPSIwIgorCQkJQVRMTWluaW1pemVzQ1J1blRpbWVMaWJyYXJ5VXNhZ2U9ImZhbHNlIgorCQkJQ2hhcmFjdGVyU2V0PSIyIgorCQkJPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1ByZUJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNDdXN0b21CdWlsZFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hNTERhdGFHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJTZXJ2aWNlUHJveHlHZW5lcmF0b3JUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNSURMVG9vbCIKKwkJCQlUeXBlTGlicmFyeU5hbWU9Ii5cLi4vLi4vV2luRHVtcC50bGIiCisJCQkJSGVhZGVyRmlsZU5hbWU9IiIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJT3B0aW1pemF0aW9uPSI0IgorCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9Ii4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcC9icGYsLi4vLi4vLi4vd2lucGNhcC93cGNhcC9saWJwY2FwLC4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcC9XaW4zMi9JbmNsdWRlLC4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcC9XaW4zMi9JbmNsdWRlL25ldCwuLi8uLi9XaW4zMi9JbmNsdWRlLC4uLy4uL2xpbnV4LUluY2x1ZGUsLi4vLi4vbGJsLC4uLy4uLywuLi8uLi8uLi93aW5wY2FwL3dwY2FwL3dpbjMyLWV4dGVuc2lvbnMiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRztfV0lORE9XUztfQ09OU09MRTtfX1NURENfXztXUENBUDtIQVZFX1BDQVBfTElTVF9EQVRBTElOS1M9MTtIQVZFX1BDQVBfU0VUX0RBVEFMSU5LPTE7SEFWRV9QQ0FQX0RBVEFMSU5LX05BTUVfVE9fVkFMPTE7SEFWRV9QQ0FQX0RBVEFMSU5LX1ZBTF9UT19ERVNDUklQVElPTj0xO0hBVkVfUENBUF9EVU1QX0ZURUxMPTE7SEFWRV9CUEZfRFVNUD0xO0hBVkVfUENBUF9EVU1QX0ZMVVNIPTE7SEFWRV9QQ0FQX0ZJTkRBTExERVZTPTE7SEFWRV9QQ0FQX0lGX1Q9MTtIQVZFX1BDQVBfTElCX1ZFUlNJT049MTtIQVZFX1JFTU9URTtfVV89O19DUlRfU0VDVVJFX05PX1dBUk5JTkdTO1VTRV9FVEhFUl9OVE9IT1NUIgorCQkJCU1pbmltYWxSZWJ1aWxkPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIxIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxEZWJ1Zy9XaW5EdW1wLnBjaCIKKwkJCQlBc3NlbWJsZXJMaXN0aW5nTG9jYXRpb249Ii5cRGVidWcvIgorCQkJCU9iamVjdEZpbGU9Ii5cRGVidWcvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXERlYnVnLyIKKwkJCQlCcm93c2VJbmZvcm1hdGlvbj0iMSIKKwkJCQlXYXJuaW5nTGV2ZWw9IjMiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCURlYnVnSW5mb3JtYXRpb25Gb3JtYXQ9IjQiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Il9ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDQwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9IndwY2FwLmxpYiBvZGJjMzIubGliIG9kYmNjcDMyLmxpYiB3c29jazMyLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSJkZWJ1Zy9XaW5EdW1wLmV4ZSIKKwkJCQlMaW5rSW5jcmVtZW50YWw9IjIiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCUFkZGl0aW9uYWxMaWJyYXJ5RGlyZWN0b3JpZXM9Ii4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvUFJKL0RlYnVnL3g4NiIKKwkJCQlHZW5lcmF0ZURlYnVnSW5mb3JtYXRpb249InRydWUiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuLi8uLi9XaW5EdW1wLnBkYiIKKwkJCQlHZW5lcmF0ZU1hcEZpbGU9InRydWUiCisJCQkJTWFwRmlsZU5hbWU9Ii5cRGVidWcvV2luRHVtcC5tYXAiCisJCQkJU3ViU3lzdGVtPSIxIgorCQkJCVRhcmdldE1hY2hpbmU9IjEiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0FMaW5rVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTWFuaWZlc3RUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYRENNYWtlVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQnNjTWFrZVRvb2wiCisJCQkJU3VwcHJlc3NTdGFydHVwQmFubmVyPSJ0cnVlIgorCQkJCU91dHB1dEZpbGU9Ii5cLi4vLi4vV2luRHVtcC5ic2MiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0Z4Q29wVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQXBwVmVyaWZpZXJUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNXZWJEZXBsb3ltZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUG9zdEJ1aWxkRXZlbnRUb29sIgorCQkJLz4KKwkJPC9Db25maWd1cmF0aW9uPgorCQk8Q29uZmlndXJhdGlvbgorCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCU91dHB1dERpcmVjdG9yeT0iLlwuLi8uLiIKKwkJCUludGVybWVkaWF0ZURpcmVjdG9yeT0iLlxSZWxlYXNlIgorCQkJQ29uZmlndXJhdGlvblR5cGU9IjEiCisJCQlJbmhlcml0ZWRQcm9wZXJ0eVNoZWV0cz0iJChWQ0luc3RhbGxEaXIpVkNQcm9qZWN0RGVmYXVsdHNcVXBncmFkZUZyb21WQzYwLnZzcHJvcHMiCisJCQlVc2VPZk1GQz0iMCIKKwkJCUFUTE1pbmltaXplc0NSdW5UaW1lTGlicmFyeVVzYWdlPSJmYWxzZSIKKwkJCUNoYXJhY3RlclNldD0iMiIKKwkJCT4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVCdWlsZEV2ZW50VG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQ3VzdG9tQnVpbGRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNYTUxEYXRhR2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDV2ViU2VydmljZVByb3h5R2VuZXJhdG9yVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDTUlETFRvb2wiCisJCQkJVHlwZUxpYnJhcnlOYW1lPSIuXC4uLy4uL1dpbkR1bXAudGxiIgorCQkJCUhlYWRlckZpbGVOYW1lPSIiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCU9wdGltaXphdGlvbj0iMiIKKwkJCQlJbmxpbmVGdW5jdGlvbkV4cGFuc2lvbj0iMSIKKwkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvYnBmLC4uLy4uLy4uL3dpbnBjYXAvd3BjYXAvbGlicGNhcCwuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZSwuLi8uLi8uLi93aW5wY2FwL3dwY2FwL2xpYnBjYXAvV2luMzIvSW5jbHVkZS9uZXQsLi4vLi4vV2luMzIvSW5jbHVkZSwuLi8uLi9saW51eC1JbmNsdWRlLC4uLy4uL2xibCwuLi8uLi8sLi4vLi4vLi4vd2lucGNhcC93cGNhcC93aW4zMi1leHRlbnNpb25zIgorCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSJOREVCVUc7X0NPTlNPTEU7X19TVERDX187V1BDQVA7SEFWRV9QQ0FQX0xJU1RfREFUQUxJTktTPTE7SEFWRV9QQ0FQX1NFVF9EQVRBTElOSz0xO0hBVkVfUENBUF9EQVRBTElOS19OQU1FX1RPX1ZBTD0xO0hBVkVfUENBUF9EQVRBTElOS19WQUxfVE9fREVTQ1JJUFRJT049MTtIQVZFX1BDQVBfRFVNUF9GVEVMTD0xO0hBVkVfQlBGX0RVTVA9MTtIQVZFX1BDQVBfRFVNUF9GTFVTSD0xO0hBVkVfUENBUF9GSU5EQUxMREVWUz0xO0hBVkVfUENBUF9JRl9UPTE7SEFWRV9QQ0FQX0xJQl9WRVJTSU9OPTE7SEFWRV9SRU1PVEU7X1VfPTtfQ1JUX1NFQ1VSRV9OT19XQVJOSU5HUyIKKwkJCQlTdHJpbmdQb29saW5nPSJ0cnVlIgorCQkJCVJ1bnRpbWVMaWJyYXJ5PSIwIgorCQkJCUVuYWJsZUZ1bmN0aW9uTGV2ZWxMaW5raW5nPSJ0cnVlIgorCQkJCVByZWNvbXBpbGVkSGVhZGVyRmlsZT0iLlxSZWxlYXNlL1dpbkR1bXAucGNoIgorCQkJCUFzc2VtYmxlckxpc3RpbmdMb2NhdGlvbj0iLlxSZWxlYXNlLyIKKwkJCQlPYmplY3RGaWxlPSIuXFJlbGVhc2UvIgorCQkJCVByb2dyYW1EYXRhQmFzZUZpbGVOYW1lPSIuXFJlbGVhc2UvIgorCQkJCVdhcm5pbmdMZXZlbD0iMyIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ01hbmFnZWRSZXNvdXJjZUNvbXBpbGVyVG9vbCIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDUmVzb3VyY2VDb21waWxlclRvb2wiCisJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9Ik5ERUJVRyIKKwkJCQlDdWx0dXJlPSIxMDQwIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQcmVMaW5rRXZlbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNMaW5rZXJUb29sIgorCQkJCUFkZGl0aW9uYWxEZXBlbmRlbmNpZXM9Im9kYmMzMi5saWIgb2RiY2NwMzIubGliIHdzb2NrMzIubGliIHdwY2FwLmxpYiIKKwkJCQlPdXRwdXRGaWxlPSJyZWxlYXNlL1dpbkR1bXAuZXhlIgorCQkJCUxpbmtJbmNyZW1lbnRhbD0iMSIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJQWRkaXRpb25hbExpYnJhcnlEaXJlY3Rvcmllcz0iLi4vLi4vLi4vd2lucGNhcC93cGNhcC9QUkovUmVsZWFzZS94ODYiCisJCQkJUHJvZ3JhbURhdGFiYXNlRmlsZT0iLlwuLi8uLi9XaW5EdW1wLnBkYiIKKwkJCQlTdWJTeXN0ZW09IjEiCisJCQkJVGFyZ2V0TWFjaGluZT0iMSIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDQUxpbmtUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNNYW5pZmVzdFRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1hEQ01ha2VUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNCc2NNYWtlVG9vbCIKKwkJCQlTdXBwcmVzc1N0YXJ0dXBCYW5uZXI9InRydWUiCisJCQkJT3V0cHV0RmlsZT0iLlwuLi8uLi9XaW5EdW1wLmJzYyIKKwkJCS8+CisJCQk8VG9vbAorCQkJCU5hbWU9IlZDRnhDb3BUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNBcHBWZXJpZmllclRvb2wiCisJCQkvPgorCQkJPFRvb2wKKwkJCQlOYW1lPSJWQ1dlYkRlcGxveW1lbnRUb29sIgorCQkJLz4KKwkJCTxUb29sCisJCQkJTmFtZT0iVkNQb3N0QnVpbGRFdmVudFRvb2wiCisJCQkvPgorCQk8L0NvbmZpZ3VyYXRpb24+CisJPC9Db25maWd1cmF0aW9ucz4KKwk8UmVmZXJlbmNlcz4KKwk8L1JlZmVyZW5jZXM+CisJPEZpbGVzPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxhZGRydG9uYW1lLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGFkZHJ0b3N0ci5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxhZi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxhc2NpaV9zdHJjYXNlY21wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGJwZl9kdW1wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGNoZWNrc3VtLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGNwYWNrLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pc3NpbmdcZGF0YWxpbmtzLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pc3NpbmdcZGxuYW1lcy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaXNzaW5nXGdldG9wdF9sb25nLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdtcGxzLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGdtdDJsb2NhbC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpbl9ja3N1bS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxpcHByb3RvLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXGwydnBuLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1hY2hkZXAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbmxwaWQuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cb3VpLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBhcnNlbmZzZmguYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtODAyXzExLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LTgwMl8xNV80LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWFoLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWFoY3AuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYW9kdi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1hb2UuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYXAxMzk0LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWFyY25ldC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1hcnAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYXNjaWkuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYXRhbGsuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYXRtLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWJhYmVsLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWJlZXAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtYmZkLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWJncC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1ib290cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1idC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1jYWxtLWZhc3QuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtY2FycC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1jZHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtY2ZtLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWNoZGxjLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWNpcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1jbmZwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWRjY3AuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZGVjbmV0LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWRoY3A2LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWRvbWFpbi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1kdHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZHZtcnAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZWFwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWVncC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1laWdycC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1lbmMuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZXNwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWV0aGVyLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWZkZGkuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZm9yY2VzLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWZyLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWZyYWc2LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWZ0cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1nZW5ldmUuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtZ2VvbmV0LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWdyZS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1oc3JwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWh0dHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaWNtcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1pY21wNi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1pZ21wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWlncnAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaXAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaXA2LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWlwNm9wdHMuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaXBjb21wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWlwZmMuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaXBuZXQuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtaXB4LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWlzYWttcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1pc29jbG5zLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWp1bmlwZXIuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQta3JiLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWwydHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbGFuZS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1sZHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbGxjLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWxsZHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbG1wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWxvb3BiYWNrLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LWxzcHBpbmcuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbHdhcHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbHdyZXMuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbTN1YS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1tZWRzYS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1tb2JpbGUuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbW9iaWxpdHkuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbXBjcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1tcGxzLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW1wdGNwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW1zZHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbXNubGIuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbmZsb2cuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtbmZzLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW50cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1udWxsLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW9sc3IuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtb3BlbmZsb3ctMS4wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW9wZW5mbG93LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LW9zcGYuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtb3NwZjYuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtb3R2LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXBnbS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1waW0uYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtcGt0YXAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtcHBpLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXBwcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1wcHBvZS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1wcHRwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXJhZGl1cy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1yYXcuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtcmlwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXJpcG5nLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXJwa2ktcnRyLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXJyY3AuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtcnN2cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1ydDYuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtcnRzcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1yeC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zY3RwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXNmbG93LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXNpcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zbC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zbGwuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtc2xvdy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zbWIuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtc210cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zbm1wLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXN0cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC1zdW5hdG0uYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtc3VucnBjLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXN5bWFudGVjLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXN5c2xvZy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC10Y3AuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtdGVsbmV0LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXRmdHAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtdGltZWQuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtdGlwYy5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC10b2tlbi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC11ZGxkLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXVkcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC11c2IuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5ccHJpbnQtdmpjLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXZxcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC12cnJwLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXZ0cC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC12eGxhbi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC13Yi5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC16ZXBoeXIuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cc2V0c2lnbmFsLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHNpZ25hdHVyZS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxzbWJ1dGlsLmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXG1pc3Npbmdcc3RybGNhdC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxtaXNzaW5nXHN0cmxjcHkuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cbWlzc2luZ1xzdHJzZXAuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKworCQk8RmlsZSBSZWxhdGl2ZVBhdGg9Ii4uXFNyY1xldGhlcl9udG9ob3N0LmMiPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHByaW50LXplcm9tcS5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwcmludC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxzdHJ0b2FkZHIuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwkJPEZpbGUKKwkJCVJlbGF0aXZlUGF0aD0iLi5cLi5cdGNwZHVtcC5jIgorCQkJPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iRGVidWd8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IlJlbGVhc2V8V2luMzIiCisJCQkJPgorCQkJCTxUb29sCisJCQkJCU5hbWU9IlZDQ0xDb21waWxlclRvb2wiCisJCQkJCUFkZGl0aW9uYWxJbmNsdWRlRGlyZWN0b3JpZXM9IiIKKwkJCQkJUHJlcHJvY2Vzc29yRGVmaW5pdGlvbnM9IiIKKwkJCQkvPgorCQkJPC9GaWxlQ29uZmlndXJhdGlvbj4KKwkJPC9GaWxlPgorCQk8RmlsZQorCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlx1dGlsLXByaW50LmMiCisJCQk+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJEZWJ1Z3xXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQkJPEZpbGVDb25maWd1cmF0aW9uCisJCQkJTmFtZT0iUmVsZWFzZXxXaW4zMiIKKwkJCQk+CisJCQkJPFRvb2wKKwkJCQkJTmFtZT0iVkNDTENvbXBpbGVyVG9vbCIKKwkJCQkJQWRkaXRpb25hbEluY2x1ZGVEaXJlY3Rvcmllcz0iIgorCQkJCQlQcmVwcm9jZXNzb3JEZWZpbml0aW9ucz0iIgorCQkJCS8+CisJCQk8L0ZpbGVDb25maWd1cmF0aW9uPgorCQk8L0ZpbGU+CisJCTxGaWxlCisJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHV0aWwuYyIKKwkJCT4KKwkJCTxGaWxlQ29uZmlndXJhdGlvbgorCQkJCU5hbWU9IkRlYnVnfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCQk8RmlsZUNvbmZpZ3VyYXRpb24KKwkJCQlOYW1lPSJSZWxlYXNlfFdpbjMyIgorCQkJCT4KKwkJCQk8VG9vbAorCQkJCQlOYW1lPSJWQ0NMQ29tcGlsZXJUb29sIgorCQkJCQlBZGRpdGlvbmFsSW5jbHVkZURpcmVjdG9yaWVzPSIiCisJCQkJCVByZXByb2Nlc3NvckRlZmluaXRpb25zPSIiCisJCQkJLz4KKwkJCTwvRmlsZUNvbmZpZ3VyYXRpb24+CisJCTwvRmlsZT4KKwk8L0ZpbGVzPgorCTxHbG9iYWxzPgorCTwvR2xvYmFscz4KKzwvVmlzdWFsU3R1ZGlvUHJvamVjdD4KZGlmZiAtLWdpdCBhL3dpbjMyL3NyYy9ldGhlcl9udG9ob3N0LmMgYi93aW4zMi9zcmMvZXRoZXJfbnRvaG9zdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRhNThjZmMKLS0tIC9kZXYvbnVsbAorKysgYi93aW4zMi9zcmMvZXRoZXJfbnRvaG9zdC5jCkBAIC0wLDAgKzEsMjE5IEBACisvKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdDogKDEpIHNvdXJjZSBjb2RlIGRpc3RyaWJ1dGlvbnMKKyAqIHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwYXJhZ3JhcGggaW4gaXRzIGVudGlyZXR5LCAoMikKKyAqIGRpc3RyaWJ1dGlvbnMgaW5jbHVkaW5nIGJpbmFyeSBjb2RlIGluY2x1ZGUgdGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kCisgKiB0aGlzIHBhcmFncmFwaCBpbiBpdHMgZW50aXJldHkgaW4gdGhlIGRvY3VtZW50YXRpb24gb3Igb3RoZXIgbWF0ZXJpYWxzCisgKiBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24sIGFuZCAoMykgYWxsIGFkdmVydGlzaW5nIG1hdGVyaWFscyBtZW50aW9uaW5nCisgKiBmZWF0dXJlcyBvciB1c2Ugb2YgdGhpcyBzb2Z0d2FyZSBkaXNwbGF5IHRoZSBmb2xsb3dpbmcgYWNrbm93bGVkZ2VtZW50OgorICogYGBUaGlzIHByb2R1Y3QgaW5jbHVkZXMgc29mdHdhcmUgZGV2ZWxvcGVkIGJ5IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEsCisgKiBMYXdyZW5jZSBCZXJrZWxleSBMYWJvcmF0b3J5IGFuZCBpdHMgY29udHJpYnV0b3JzLicnIE5laXRoZXIgdGhlIG5hbWUgb2YKKyAqIHRoZSBVbml2ZXJzaXR5IG5vciB0aGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgYmUgdXNlZCB0byBlbmRvcnNlCisgKiBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3IKKyAqIHdyaXR0ZW4gcGVybWlzc2lvbi4KKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgYGBBUyBJUycnIEFORCBXSVRIT1VUIEFOWSBFWFBSRVNTIE9SIElNUExJRUQKKyAqIFdBUlJBTlRJRVMsIElOQ0xVRElORywgV0lUSE9VVCBMSU1JVEFUSU9OLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GCisgKiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLgorICoKKyAqIHRjcGR1bXAvV2luMzIgZnVuY3Rpb25zIGZvciByZWFkaW5nIGFuZCBwYXJzaW5nIHN5c3RlbSdzIEV0aGVybmV0CisgKiBhZGRyZXNzIGZpbGU6CisgKiAgICAnJVN5c3RlbVJvb3QlL2RyaXZlcnMvZXRjL2V0aGVycycgIChXaW4tTlQrKQorICogb3IgJyVXaW5kaXIlL2V0Yy9ldGhlcnMnICAgICAgICAgICAgICAoV2luLTl4L01FKQorICoKKyAqIEcuIFZhbmVtIDxndmFuZW1AeWFob28ubm8+IDIwMTIuCisgKi8KKworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8bmV0ZGlzc2VjdC1zdGRpbmMuaD4KKworI2luY2x1ZGUgImV0aGVyLmgiCisjaW5jbHVkZSAibmV0ZGlzc2VjdC5oIgorI2luY2x1ZGUgImFkZHJ0b25hbWUuaCIKKwordHlwZWRlZiBzdHJ1Y3QgZXRoZXJfYWRkciB7CisgICAgICAgIHVuc2lnbmVkIGNoYXIgb2N0ZXRbRVRIRVJfQUREUl9MRU5dOworICAgICAgfSBldGhlcl9hZGRyZXNzOworCit0eXBlZGVmIHN0cnVjdCBldGhlcl9lbnRyeSB7CisgICAgICAgIGV0aGVyX2FkZHJlc3MgICAgICBldGhfYWRkcjsgIC8qIE1BQyBhZGRyZXNzICovCisgICAgICAgIGNoYXIgICAgICAgICAgICAgICAqbmFtZTsgICAgIC8qIG5hbWUgb2YgTUFDLWFkZHJlc3MgKi8KKyAgICAgICAgc3RydWN0IGV0aGVyX2VudHJ5ICpuZXh0OworICAgICAgfSBldGhlcl9lbnRyeTsKKworc3RhdGljIHN0cnVjdCBldGhlcl9lbnRyeSAqZXRoMCA9IE5VTEw7CisKKy8qCisgKiBUaGUgcmVhc29uIHRvIGF2b2lkIHVzaW5nICdwY2FwX25leHRfZXRoZXJlbnQoKScgaW4gYWRkcnRvbmFtZS5jCisgKiBhcmUgc2V2ZXJhbDoKKyAqICAgMSkgd3BjYXAuZGxsIGFuZCAncGNhcF9uZXh0X2V0aGVyZW50KCknIGNvdWxkIGhhdmUgYmVlbiBidWlsdCBpbgorICogICAgICBkZWJ1Zy1tb2RlICgtTURkKSBvciByZWxlYXNlLW1vZGUgKC1NRCkgYW5kIHRjcGR1bXAgaW4KKyAqICAgICAgdGhlIG9wcG9zaXRlIG1vZGVsLgorICogICAyKSBJZiB0aGlzIGlzIGJ1aWx0IGJ5IE1TVkMsIHdwY2FwLmRsbCBjb3VsZCBoYXZlIGJlZW4gYnVpbHQgYnkKKyAqICAgICAgTWluZ1cuIEl0IGhhcyBubyBkZWJ1Zy1tb2RlbC4KKyAqICAgMykgSXQgbWF5IG5vdCBoYXZlIGJlZW4gZXhwb3J0ZWQgZnJvbSB3cGNhcC5kbGwgKHByZXNlbnQgaW4gd3BjYXAuZGVmKS4KKyAqCisgKiBTbyB3ZSBzaG9lLWhvcm4gdGhlIGJ1aWxkaW5nIG9mIHRjcGR1bXAgd2l0aCAnLURVU0VfRVRIRVJfTlRPSE9TVCcgdG8KKyAqIG1ha2UgJ2luaXRfZXRoZXJhcnJheSgpJyBjYWxsIHRoZSBiZWxvdyAnZXRoZXJfbnRvaG9zdCgpJyBpbnN0ZWFkLgorICovCisjaWYgIWRlZmluZWQoVVNFX0VUSEVSX05UT0hPU1QpCisjZXJyb3IgIictRFVTRV9FVEhFUl9OVE9IT1NUJyBtdXN0IGJlIHNldCIKKyNlbmRpZgorCisvKgorICogUmV0dXJuIFRSVUUgaWYgcnVubmluZyB1bmRlciBXaW4tOTUvOTgvTUUuCisgKi8KK3N0YXRpYyBCT09MIGlzX3dpbjl4ICh2b2lkKQoreworICBPU1ZFUlNJT05JTkZPIG92aTsKKyAgRFdPUkQgb3NfdmVyID0gR2V0VmVyc2lvbigpOworICBEV09SRCBtYWpvcl92ZXIgPSBMT0JZVEUgKExPV09SRChvc192ZXIpKTsKKworICByZXR1cm4gKG9zX3ZlciA+PSAweDgwMDAwMDAwICYmIG1ham9yX3ZlciA+PSA0KTsKK30KKworLyoKKyAqIFJldHVybiBwYXRoIHRvICIlU3lzdGVtUm9vdCUvZHJpdmVycy9ldGMvPGZpbGU+IiAgKFdpbi1OVCspCisgKiAgICAgICAgICBvciB0byAiJVdpbmRpciUvZXRjLzxmaWxlPiIgICAgICAgICAgICAgIChXaW4tOXgvTUUpCisgKi8KK2NvbnN0IGNoYXIgKmV0Y19wYXRoIChjb25zdCBjaGFyICpmaWxlKQoreworICBCT09MIHdpbjl4ID0gaXNfd2luOXgoKTsKKyAgY29uc3QgY2hhciAqZW52ID0gd2luOXggPyBnZXRlbnYoIldpbkRpciIpIDogZ2V0ZW52KCJTeXN0ZW1Sb290Iik7CisgIHN0YXRpYyBjaGFyIHBhdGhbTUFYX1BBVEhdOworCisgIGlmICghZW52KQorICAgIHJldHVybiAoZmlsZSk7CisKKyAgaWYgKHdpbjl4KQorICAgIHNucHJpbnRmIChwYXRoLCBzaXplb2YocGF0aCksICIlc1xcZXRjXFwlcyIsIGVudiwgZmlsZSk7CisgIGVsc2UKKyAgICBzbnByaW50ZiAocGF0aCwgc2l6ZW9mKHBhdGgpLCAiJXNcXHN5c3RlbTMyXFxkcml2ZXJzXFxldGNcXCVzIiwgZW52LCBmaWxlKTsKKworICByZXR1cm4gKHBhdGgpOworfQorCisvKgorICogUGFyc2UgYSBzdHJpbmctYnVmIGNvbnRhaW5pbmcgYW4gTUFDIGFkZHJlc3MgYW5kIG5hbWUuCisgKiBBY2NlcHRzIE1BQyBhZGRyZXNzZXMgb24gYm90aCAieHg6eHg6eHguLiIgYW5kICJ4eC14eC14eC4uIiBmb3Jtcy4KKyAqCisgKiBXZSBjb3VsZCBoYXZlIHVzZWQgcGNhcF9ldGhlcl9hdG9uKCksIGJ1dCBwcm9ibGVtIDMpIGFib3ZlIGNvdWxkIGFwcGx5LgorICogb3Igd2UgY291bGQgaGF2ZSBjdXQgJiBwYXN0ZWQgJ3BjYXBfbmV4dF9ldGhlcmVudChGSUxFICpmcCknIGJlbG93LgorICovCisjZGVmaW5lIE1JTl9MRU4gIHNpemVvZigiMDowOjA6MDowOjAgWCIpCisKK3N0YXRpYworaW50IHBhcnNlX2V0aGVyX2J1ZiAoY29uc3QgY2hhciAqYnVmLCBjaGFyICoqcmVzdWx0LCBzdHJ1Y3QgZXRoZXJfYWRkciAqZSkKK3sKKyAgY29uc3QgY2hhciAqZm10OworICBjaGFyICAgICAgICpuYW1lOworICBjaGFyICAgICAgICpzdHIgPSAoY2hhciopYnVmOworICB1bnNpZ25lZCAgICBldGggW3NpemVvZigqZSldOworICBpbnQgICAgICAgICBpOworCisgIC8qIEZpbmQgZmlyc3Qgbm9uLWJsYW5rIGluICdidWYnICovCisgIHdoaWxlIChzdHJbMF0gJiYgc3RyWzFdICYmIGlzc3BhY2UoKGludClzdHJbMF0pKQorICAgICAgIHN0cisrOworCisgIGlmICgqc3RyID09ICcjJyB8fCAqc3RyID09ICc7JyB8fCAqc3RyID09ICdcbicgfHwgc3RybGVuKHN0cikgPCBNSU5fTEVOKQorICAgICByZXR1cm4gKDApOworCisgIGlmIChzdHJbMl0gPT0gJzonKQorICAgIGZtdCA9ICIlMDJ4OiUwMng6JTAyeDolMDJ4OiUwMng6JTAyeCI7CisgIGVsc2UKKyAgICBmbXQgPSAiJTAyeC0lMDJ4LSUwMngtJTAyeC0lMDJ4LSUwMngiOworCisgIGlmIChzc2NhbmYoc3RyLCBmbXQsICZldGhbMF0sICZldGhbMV0sICZldGhbMl0sICZldGhbM10sICZldGhbNF0sICZldGhbNV0pICE9IEVUSEVSX0FERFJfTEVOKQorICAgICByZXR1cm4gKDApOworCisgIHN0ciAgPSBzdHJ0b2sgKHN0ciwgIiBcdCIpOworICBuYW1lID0gc3RydG9rIChOVUxMLCAiICNcdFxuIik7CisKKyAgaWYgKCFzdHIgfHwgIW5hbWUgfHwgc3RybGVuKG5hbWUpIDwgMSkKKyAgICAgcmV0dXJuICgwKTsKKworICAqcmVzdWx0ID0gbmFtZTsKKworICBmb3IgKGkgPSAwOyBpIDwgRVRIRVJfQUREUl9MRU47IGkrKykKKyAgICAgIGUtPm9jdGV0W2ldID0gZXRoW2ldOworCisgIHJldHVybiAoMSk7Cit9CisKK3N0YXRpYyB2b2lkIGZyZWVfZXRoZXJzICh2b2lkKQoreworICBzdHJ1Y3QgZXRoZXJfZW50cnkgKmUsICpuZXh0OworCisgIGZvciAoZSA9IGV0aDA7IGU7IGUgPSBuZXh0KSB7CisgICAgbmV4dCA9IGUtPm5leHQ7CisgICAgZnJlZShlLT5uYW1lKTsKKyAgICBmcmVlKGUpOworICB9CisgIGV0aDAgPSBOVUxMOworfQorCitzdGF0aWMgaW50IGluaXRfZXRoZXJzICh2b2lkKQoreworICBjaGFyICBidWZbQlVGU0laRV07CisgIEZJTEUgKmZwID0gZm9wZW4gKGV0Y19wYXRoKCJldGhlcnMiKSwgInIiKTsKKworICBpZiAoIWZwKQorICAgICByZXR1cm4gKDApOworCisgIHdoaWxlIChmZ2V0cyhidWYsc2l6ZW9mKGJ1ZiksZnApKQorICB7CisgICAgc3RydWN0IGV0aGVyX2VudHJ5ICplOworICAgIGNoYXIgICpuYW1lOworICAgIGV0aGVyX2FkZHJlc3MgZXRoOworCisgICAgaWYgKCFwYXJzZV9ldGhlcl9idWYoYnVmLCZuYW1lLCZldGgpKQorICAgICAgIGNvbnRpbnVlOworCisgICAgZSA9IGNhbGxvYyAoc2l6ZW9mKCplKSwgMSk7CisgICAgaWYgKCFlKQorICAgICAgIGJyZWFrOworCisgICAgbWVtY3B5KCZlLT5ldGhfYWRkciwgJmV0aCwgRVRIRVJfQUREUl9MRU4pOworICAgIGUtPm5hbWUgPSBzdHJkdXAobmFtZSk7CisgICAgaWYgKCFlLT5uYW1lKSB7CisgICAgICBmcmVlKGUpOworICAgICAgYnJlYWs7CisgICAgfQorCisgICAgZS0+bmV4dCA9IGV0aDA7CisgICAgZXRoMCA9IGU7CisgIH0KKyAgZmNsb3NlKGZwKTsKKyAgYXRleGl0KGZyZWVfZXRoZXJzKTsKKyAgcmV0dXJuICgxKTsKK30KKworLyoKKyAqIE1hcCBhbiBldGhlcm5ldCBhZGRyZXNzICdlJyB0byBhICduYW1lJy4KKyAqIFJldHVybnMgMCBvbiBzdWNjZXNzLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHN0YXJ0dXAgYnkgaW5pdF9ldGhlcmFycmF5KCkgYW5kIHRoZW4KKyAqIGJ5IGV0aGVyYWRkcl9zdHJpbmcoKSBhcyBuZWVkZWQuIFRvIGF2b2lkIGRvaW5nIGFuIGV4cGVuc2l2ZSBmb3BlbigpCisgKiBvbiBlYWNoIGNhbGwsIHRoZSBjb250ZW50cyBvZiAnZXRjX3BhdGgoImV0aGVycyIpJyBpcyBjYWNoZWQgaGVyZSBpbgorICogYSBsaW5rZWQtbGlzdCAnZXRoMCcuCisgKi8KK2ludCBldGhlcl9udG9ob3N0IChjaGFyICpuYW1lLCBzdHJ1Y3QgZXRoZXJfYWRkciAqZSkKK3sKKyAgY29uc3Qgc3RydWN0IGV0aGVyX2VudHJ5ICpjYWNoZTsKKyAgc3RhdGljIGludCBpbml0ID0gMDsKKworICBpZiAoIWluaXQpIHsKKyAgICBpbml0X2V0aGVycygpOworICAgIGluaXQgPSAxOworICB9CisKKyAgZm9yIChjYWNoZSA9IGV0aDA7IGNhY2hlOyBjYWNoZSA9IGNhY2hlLT5uZXh0KQorICAgICBpZiAoIW1lbWNtcCgmZS0+b2N0ZXQsICZjYWNoZS0+ZXRoX2FkZHIsIEVUSEVSX0FERFJfTEVOKSkgeworICAgICAgIHN0cmNweSAobmFtZSxjYWNoZS0+bmFtZSk7CisgICAgICAgcmV0dXJuICgwKTsKKyAgICAgfQorICByZXR1cm4gKDEpOworfQorCg==